|
|
@@ -0,0 +1,601 @@
|
|
|
+<script setup lang="ts">
|
|
|
+import SelectValue from './SelectValue.vue'
|
|
|
+import { ref } from 'vue'
|
|
|
+
|
|
|
+// 定义类型接口
|
|
|
+interface RuleOption {
|
|
|
+ label: string;
|
|
|
+ value: string;
|
|
|
+}
|
|
|
+
|
|
|
+interface RuleItem {
|
|
|
+ Priority: string;
|
|
|
+ RuleType: string;
|
|
|
+ AirPort?: string[];
|
|
|
+ Port?: string[];
|
|
|
+ Carrier?: string[];
|
|
|
+ FromDate: string | number;
|
|
|
+ ToDate: string | number;
|
|
|
+}
|
|
|
+
|
|
|
+// 定义 RuleItem 中数组字段的类型
|
|
|
+type ArrayFields = 'AirPort' | 'Port' | 'Carrier';
|
|
|
+
|
|
|
+const props = defineProps({
|
|
|
+ Recommendradio: {
|
|
|
+ type: Number,
|
|
|
+ default: 0
|
|
|
+ },
|
|
|
+ recommendata: {
|
|
|
+ type: Object,
|
|
|
+ default: () => ({})
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+// 响应式变量
|
|
|
+const Recommendradio = ref(props.Recommendradio)
|
|
|
+const isRecommendETA = ref(false)
|
|
|
+const isAir = ref(false)
|
|
|
+const isSea = ref(false)
|
|
|
+const RecommendCheckedList = ref<string[]>([])
|
|
|
+
|
|
|
+// 选项配置
|
|
|
+const AirRuleTypeoptions = ref<RuleOption[]>([
|
|
|
+ { label: 'Specific Rule', value: 'Specific Rule' }
|
|
|
+])
|
|
|
+
|
|
|
+const RuleTypeoptions = ref<RuleOption[]>([
|
|
|
+ { label: 'Specific Rule', value: 'Specific Rule' },
|
|
|
+ { label: 'Single Dimension', value: 'Single Dimension' }
|
|
|
+])
|
|
|
+
|
|
|
+// 规则数据
|
|
|
+const AirContentList = ref<RuleItem[]>([
|
|
|
+ {
|
|
|
+ Priority: 'P1',
|
|
|
+ RuleType: '*Default Rule',
|
|
|
+ AirPort: ['All'],
|
|
|
+ FromDate: '',
|
|
|
+ ToDate: ''
|
|
|
+ }
|
|
|
+])
|
|
|
+const SeaContentList = ref<RuleItem[]>([
|
|
|
+ {
|
|
|
+ Priority: 'P1',
|
|
|
+ RuleType: '*Default Rule',
|
|
|
+ Port: ['All'],
|
|
|
+ Carrier: ['All'],
|
|
|
+ FromDate: '',
|
|
|
+ ToDate: ''
|
|
|
+ }
|
|
|
+])
|
|
|
+
|
|
|
+// 创建规则项的工厂函数
|
|
|
+function createRuleItem(type: 'Air' | 'Sea', ruleType: string): RuleItem {
|
|
|
+ const baseItem = {
|
|
|
+ Priority: 'P1',
|
|
|
+ RuleType: ruleType,
|
|
|
+ FromDate: '',
|
|
|
+ ToDate: ''
|
|
|
+ }
|
|
|
+ if (type === 'Air') {
|
|
|
+ return {
|
|
|
+ ...baseItem,
|
|
|
+ AirPort: ruleType === '*Default Rule' ? ['All'] : []
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ ...baseItem,
|
|
|
+ Port: ruleType === '*Default Rule' ? ['All'] : [],
|
|
|
+ Carrier: ruleType === '*Default Rule' ? ['All'] : []
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 选择checkbox
|
|
|
+const emits = defineEmits(['chackchangerecommend'])
|
|
|
+const CheckChange = (val: string[]) => {
|
|
|
+ isAir.value = val.includes('Air')
|
|
|
+ isSea.value = val.includes('Sea')
|
|
|
+ // 确保至少有一条规则
|
|
|
+ if (isAir.value && AirContentList.value.length === 0) {
|
|
|
+ AirContentList.value.push(createRuleItem('Air', '*Default Rule'))
|
|
|
+ }
|
|
|
+ if (isSea.value && SeaContentList.value.length === 0) {
|
|
|
+ SeaContentList.value.push(createRuleItem('Sea', '*Default Rule'))
|
|
|
+ }
|
|
|
+ updatePriorities()
|
|
|
+}
|
|
|
+
|
|
|
+const handleCheckboxClick = (event: Event) => {
|
|
|
+ const target = event.target as HTMLElement
|
|
|
+ const isCheckboxInput = target.closest('.el-checkbox__inner')
|
|
|
+ const isCheckboxTitle = target.closest('.titlecheckbox')
|
|
|
+ if (!isCheckboxInput && !isCheckboxTitle) {
|
|
|
+ event.preventDefault()
|
|
|
+ }
|
|
|
+}
|
|
|
+// 选择booking window
|
|
|
+const ChangeFrequency = (val: number) => {
|
|
|
+ isRecommendETA.value = val === 2
|
|
|
+ emits('chackchangerecommend', RecommendCheckedList.value, AirContentList.value, SeaContentList.value, Recommendradio.value)
|
|
|
+}
|
|
|
+// 修复后的 handleInput 函数
|
|
|
+const handleInput = (val: string, index: number, type: 'FromDate' | 'ToDate', list: RuleItem[]) => {
|
|
|
+ // 移除非数字字符
|
|
|
+ const numStr = val.replace(/[^\d]/g, '');
|
|
|
+ // 转换为整数,处理NaN情况
|
|
|
+ let num = parseInt(numStr, 10) || 0;
|
|
|
+ // 确保最小值为1
|
|
|
+ num = num < 1 ? 1 : num;
|
|
|
+ // 更新对应数据
|
|
|
+ list[index][type] = num;
|
|
|
+};
|
|
|
+// 删除数据
|
|
|
+const handleDelete = (index: number, list: RuleItem[], type: 'Air' | 'Sea') => {
|
|
|
+ list.splice(index, 1);
|
|
|
+ if (list.length === 0) {
|
|
|
+ if (type === 'Air') {
|
|
|
+ isAir.value = false
|
|
|
+ RecommendCheckedList.value = RecommendCheckedList.value.filter(item => item !== 'Air')
|
|
|
+ } else {
|
|
|
+ isSea.value = false
|
|
|
+ RecommendCheckedList.value = RecommendCheckedList.value.filter(item => item !== 'Sea')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ updatePriorities()
|
|
|
+};
|
|
|
+// 添加数据
|
|
|
+const AddRuleItem = (list: RuleItem[], type: 'Air' | 'Sea') => {
|
|
|
+ // 检查是否已存在默认规则
|
|
|
+ const hasDefaultRule = list.some(item => item.RuleType === '*Default Rule')
|
|
|
+ // 如果已经有默认规则,则创建特定规则
|
|
|
+ const ruleType = hasDefaultRule ? 'Specific Rule' : '*Default Rule'
|
|
|
+ list.push(createRuleItem(type, ruleType))
|
|
|
+ updatePriorities()
|
|
|
+}
|
|
|
+// 根据RuleType的值来修改Priority的值
|
|
|
+const updatePriorities = () => {
|
|
|
+ emits('chackchangerecommend', RecommendCheckedList.value, AirContentList.value, SeaContentList.value,Recommendradio.value)
|
|
|
+ updateListPriorities(AirContentList.value, 'Air')
|
|
|
+ updateListPriorities(SeaContentList.value, 'Sea')
|
|
|
+};
|
|
|
+// 统一更新列表优先级
|
|
|
+const updateListPriorities = (list: RuleItem[], type: 'Air' | 'Sea') => {
|
|
|
+ const length = list.length
|
|
|
+ // 保护默认规则的数据
|
|
|
+ list.forEach(item => {
|
|
|
+ if (item.RuleType === '*Default Rule') {
|
|
|
+ if (type === 'Air') {
|
|
|
+ item.AirPort = ['All']
|
|
|
+ } else {
|
|
|
+ item.Port = ['All']
|
|
|
+ item.Carrier = ['All']
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (length === 1) {
|
|
|
+ handleLengthOne(list, type)
|
|
|
+ } else if (length === 2) {
|
|
|
+ handleLengthTwo(list, type)
|
|
|
+ } else if (length >= 3) {
|
|
|
+ handleLengthThreePlus(list, type)
|
|
|
+ }
|
|
|
+}
|
|
|
+// 处理长度为1
|
|
|
+const handleLengthOne = (list: RuleItem[], type: string) => {
|
|
|
+ list.forEach(item => item.Priority = 'P1')
|
|
|
+};
|
|
|
+// 处理长度为2
|
|
|
+const handleLengthTwo = (list: RuleItem[], type: string) => {
|
|
|
+ const types = new Set(list.map(i => i.RuleType))
|
|
|
+ // 两个都是 *Default Rule
|
|
|
+ if (types.size === 1 && types.has('*Default Rule')) {
|
|
|
+ list.forEach(item => item.Priority = 'P1')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 包含 *Default Rule 和其他类型
|
|
|
+ if (types.has('*Default Rule')) {
|
|
|
+ list.forEach(item => {
|
|
|
+ item.Priority = item.RuleType === '*Default Rule' ? 'P2' : 'P1'
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 同时存在 Specific Rule 和 Single Dimension
|
|
|
+ if (types.has('Specific Rule') && types.has('Single Dimension')) {
|
|
|
+ list.forEach(item => {
|
|
|
+ item.Priority = item.RuleType === 'Specific Rule' ? 'P1' : 'P2'
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 其他情况
|
|
|
+ list.forEach(item => item.Priority = 'P1')
|
|
|
+};
|
|
|
+// 处理长度≥3
|
|
|
+const handleLengthThreePlus = (list: RuleItem[], type: string) => {
|
|
|
+ // 统计各类型数量
|
|
|
+ const counts = list.reduce((acc, cur) => {
|
|
|
+ acc[cur.RuleType] = (acc[cur.RuleType] || 0) + 1
|
|
|
+ return acc
|
|
|
+ }, {} as Record<string, number>)
|
|
|
+ // 获取所有存在的类型
|
|
|
+ const existingTypes = Object.keys(counts)
|
|
|
+ // 三个不同类型都存在
|
|
|
+ if (
|
|
|
+ existingTypes.includes('Specific Rule') &&
|
|
|
+ existingTypes.includes('Single Dimension') &&
|
|
|
+ existingTypes.includes('*Default Rule')
|
|
|
+ ) {
|
|
|
+ const priorityMap: Record<string, string> = {
|
|
|
+ 'Specific Rule': 'P1',
|
|
|
+ 'Single Dimension': 'P2',
|
|
|
+ '*Default Rule': 'P3'
|
|
|
+ }
|
|
|
+ list.forEach(item => {
|
|
|
+ item.Priority = priorityMap[item.RuleType]
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 全为同一种类型的情况
|
|
|
+ if (existingTypes.length === 1) {
|
|
|
+ list.forEach(item => item.Priority = 'P1')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 处理 Specific + Default 组合
|
|
|
+ if (existingTypes.length === 2 &&
|
|
|
+ existingTypes.includes('Specific Rule') &&
|
|
|
+ existingTypes.includes('*Default Rule')) {
|
|
|
+ list.forEach(item => {
|
|
|
+ item.Priority = item.RuleType === 'Specific Rule' ? 'P1' : 'P2'
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 存在两个Default Rule
|
|
|
+ if (counts['*Default Rule'] === 2 && existingTypes.length === 2) {
|
|
|
+ list.forEach(item => {
|
|
|
+ item.Priority = item.RuleType === '*Default Rule' ? 'P2' : 'P1'
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 存在两个Single Dimension
|
|
|
+ if (counts['Single Dimension'] === 2) {
|
|
|
+ if (existingTypes.includes('*Default Rule')) {
|
|
|
+ // 两个Single + 一个Default
|
|
|
+ list.forEach(item => {
|
|
|
+ item.Priority = item.RuleType === '*Default Rule' ? 'P2' : 'P1'
|
|
|
+ })
|
|
|
+ } else if (existingTypes.includes('Specific Rule')) {
|
|
|
+ // 两个Single + 一个Specific
|
|
|
+ list.forEach(item => {
|
|
|
+ item.Priority = item.RuleType === 'Specific Rule' ? 'P1' : 'P2'
|
|
|
+ })
|
|
|
+ }
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 其他情况
|
|
|
+ const defaultPriorityMap: Record<string, string> = {
|
|
|
+ 'Specific Rule': 'P1',
|
|
|
+ 'Single Dimension': 'P2',
|
|
|
+ '*Default Rule': 'P3'
|
|
|
+ }
|
|
|
+ list.forEach(item => {
|
|
|
+ item.Priority = defaultPriorityMap[item.RuleType] || 'P3'
|
|
|
+ })
|
|
|
+}
|
|
|
+// 修复:改变选项值 - 使用类型保护
|
|
|
+const changeSelectedValue = (val: string[], index: number, field: ArrayFields, list: RuleItem[]) => {
|
|
|
+ // 使用类型断言确保安全
|
|
|
+ const item = list[index] as Record<ArrayFields, string[]>;
|
|
|
+ item[field] = val;
|
|
|
+}
|
|
|
+// 改变规则类型
|
|
|
+const changeRuleType = (val: string, index: number, list: RuleItem[]) => {
|
|
|
+ const item = list[index]
|
|
|
+ // 保护默认规则
|
|
|
+ if (item.RuleType === '*Default Rule' && val !== '*Default Rule') {
|
|
|
+ // 从默认规则切换到其他规则时重置选项
|
|
|
+ if ('AirPort' in item) item.AirPort = []
|
|
|
+ if ('Port' in item) item.Port = []
|
|
|
+ if ('Carrier' in item) item.Carrier = []
|
|
|
+ } else if (val === '*Default Rule') {
|
|
|
+ // 切换到默认规则时设置默认值
|
|
|
+ if ('AirPort' in item) item.AirPort = ['All']
|
|
|
+ if ('Port' in item) item.Port = ['All']
|
|
|
+ if ('Carrier' in item) item.Carrier = ['All']
|
|
|
+ }
|
|
|
+ item.RuleType = val
|
|
|
+ updatePriorities()
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<template>
|
|
|
+ <div>
|
|
|
+ <el-radio-group v-model="Recommendradio" @change="ChangeFrequency">
|
|
|
+ <el-radio :value="1">No Specific recommended time for choosing delivery date</el-radio>
|
|
|
+ <el-radio :value="2">
|
|
|
+ <div>Recommend Delivery Date (ETA/ATA)</div>
|
|
|
+ <div v-if="isRecommendETA" class="oceanCheckbox">
|
|
|
+ <el-checkbox-group v-model="RecommendCheckedList" @change="CheckChange">
|
|
|
+ <!-- Air 部分 -->
|
|
|
+ <el-checkbox class="delayedType" value="Air" @click="handleCheckboxClick">
|
|
|
+ <div class="titlecheckbox">
|
|
|
+ <div>Air</div>
|
|
|
+ <span class="icon_grey font_family" :class="isAir ? 'icon-icon_dropdown_b' : 'icon-icon_up_b'"></span>
|
|
|
+ </div>
|
|
|
+ <div v-if="isAir" class="radiocheckbox" style="margin-top: 16px">
|
|
|
+ <div class="AirCoulumn">
|
|
|
+ <div class="AicoulumnTitile" style="width: 10%;">Priority</div>
|
|
|
+ <div class="AicoulumnTitile" style="width: 20%;">Rule Type</div>
|
|
|
+ <div class="AicoulumnTitile" style="width: 40%;">Air Port</div>
|
|
|
+ <div style="display: flex;flex-direction: column;border-right: 1px solid var(--color-system-border);width: 20%;">
|
|
|
+ <div class="AicoulumnTitile2">Recommended Delivery Date</div>
|
|
|
+ <div style="display: flex;height: 24px;align-items: center;">
|
|
|
+ <div class="datetitle" style="border-right: 1px solid var(--color-system-border);">From (ETA/ATA + Days)</div>
|
|
|
+ <div class="datetitle">To (ETA/ATA + Days)</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="AirCoumlulnAdd" style="width: 10%;" @click="AddRuleItem(AirContentList, 'Air')">+ Add</div>
|
|
|
+ </div>
|
|
|
+ <div class="AirContent" v-for="(item, index) in AirContentList" :key="index">
|
|
|
+ <div class="AirCoumlumn" style="width: 10%;">{{ item.Priority }}</div>
|
|
|
+ <div class="AirCoumlumn" style="width: 20%;">
|
|
|
+ <el-select
|
|
|
+ v-model="item.RuleType"
|
|
|
+ :disabled="item.RuleType === '*Default Rule'"
|
|
|
+ style="width: 100%;"
|
|
|
+ @change="val => changeRuleType(val, index, AirContentList)"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="opt in AirRuleTypeoptions"
|
|
|
+ :key="opt.value"
|
|
|
+ :label="opt.label"
|
|
|
+ :value="opt.value"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ <div class="AirCoumlumn" style="width: 40%;">
|
|
|
+ <SelectValue
|
|
|
+ :SelectIndex="index"
|
|
|
+ :SelectedValue="item.AirPort"
|
|
|
+ :typeisDisabled="item.RuleType"
|
|
|
+ @changeSelectedValue="val => changeSelectedValue(val, index, 'AirPort', AirContentList)"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div class="AirCoumlumn" style="width: 10%;">
|
|
|
+ <el-input
|
|
|
+ @input="val => handleInput(val, index, 'FromDate', AirContentList)"
|
|
|
+ placeholder="Input"
|
|
|
+ v-model="item.FromDate"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div class="AirCoumlumn" style="width: 10%;">
|
|
|
+ <el-input
|
|
|
+ @input="val => handleInput(val, index, 'ToDate', AirContentList)"
|
|
|
+ placeholder="Input"
|
|
|
+ v-model="item.ToDate"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div class="AirDelete" style="width: 10%;">
|
|
|
+ <el-button
|
|
|
+ v-if="item.RuleType !== '*Default Rule'"
|
|
|
+ @click="handleDelete(index, AirContentList, 'Air')"
|
|
|
+ class="el-button--blue"
|
|
|
+ style="height: 24px"
|
|
|
+ >
|
|
|
+ <span class="font_family icon-icon_delete_b"></span>
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-checkbox>
|
|
|
+ <!-- Sea 部分 -->
|
|
|
+ <el-checkbox class="delayedType" value="Sea" @click="handleCheckboxClick">
|
|
|
+ <div class="titlecheckbox">
|
|
|
+ <div>Sea</div>
|
|
|
+ <span class="icon_grey font_family" :class="isSea ? 'icon-icon_dropdown_b' : 'icon-icon_up_b'"></span>
|
|
|
+ </div>
|
|
|
+ <div v-if="isSea" style="margin-top: 16px">
|
|
|
+ <div class="AirCoulumn">
|
|
|
+ <div class="AicoulumnTitile" style="width: 10%;">Priority</div>
|
|
|
+ <div class="AicoulumnTitile" style="width: 20%;">Rule Type</div>
|
|
|
+ <div class="AicoulumnTitile" style="width: 20%;">Port</div>
|
|
|
+ <div class="AicoulumnTitile" style="width: 20%;">Carrier</div>
|
|
|
+ <div style="display: flex;flex-direction: column;border-right: 1px solid var(--color-system-border);width: 20%;">
|
|
|
+ <div class="AicoulumnTitile2">Recommended Delivery Date</div>
|
|
|
+ <div style="display: flex;height: 24px;align-items: center;">
|
|
|
+ <div class="datetitle" style="border-right: 1px solid var(--color-system-border);">From (ETA/ATA + Days)</div>
|
|
|
+ <div class="datetitle">To (ETA/ATA + Days)</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="AirCoumlulnAdd" style="width: 10%;" @click="AddRuleItem(SeaContentList, 'Sea')">+ Add</div>
|
|
|
+ </div>
|
|
|
+ <div class="AirContent" v-for="(item, index) in SeaContentList" :key="index">
|
|
|
+ <div class="AirCoumlumn" style="width: 10%;">{{ item.Priority }}</div>
|
|
|
+ <div class="AirCoumlumn" style="width: 20%;">
|
|
|
+ <el-select
|
|
|
+ v-model="item.RuleType"
|
|
|
+ :disabled="item.RuleType === '*Default Rule'"
|
|
|
+ style="width: 100%;"
|
|
|
+ @change="val => changeRuleType(val, index, SeaContentList)"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="opt in RuleTypeoptions"
|
|
|
+ :key="opt.value"
|
|
|
+ :label="opt.label"
|
|
|
+ :value="opt.value"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ <div class="AirCoumlumn" style="width: 20%;">
|
|
|
+ <SelectValue
|
|
|
+ :SelectIndex="index"
|
|
|
+ :SelectedValue="item.Port"
|
|
|
+ :typeisDisabled="item.RuleType"
|
|
|
+ @changeSelectedValue="val => changeSelectedValue(val, index, 'Port', SeaContentList)"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div class="AirCoumlumn" style="width: 20%;">
|
|
|
+ <SelectValue
|
|
|
+ :SelectIndex="index"
|
|
|
+ :SelectedValue="item.Carrier"
|
|
|
+ :typeisDisabled="item.RuleType"
|
|
|
+ @changeSelectedValue="val => changeSelectedValue(val, index, 'Carrier', SeaContentList)"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div class="AirCoumlumn" style="width: 10%;">
|
|
|
+ <el-input
|
|
|
+ @input="val => handleInput(val, index, 'FromDate', SeaContentList)"
|
|
|
+ placeholder="Input"
|
|
|
+ v-model="item.FromDate"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div class="AirCoumlumn" style="width: 10%;">
|
|
|
+ <el-input
|
|
|
+ @input="val => handleInput(val, index, 'ToDate', SeaContentList)"
|
|
|
+ placeholder="Input"
|
|
|
+ v-model="item.ToDate"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div class="AirDelete" style="width: 10%;">
|
|
|
+ <el-button
|
|
|
+ v-if="item.RuleType !== '*Default Rule'"
|
|
|
+ @click="handleDelete(index, SeaContentList, 'Sea')"
|
|
|
+ class="el-button--blue"
|
|
|
+ style="height: 24px"
|
|
|
+ >
|
|
|
+ <span class="font_family icon-icon_delete_b"></span>
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-checkbox>
|
|
|
+ </el-checkbox-group>
|
|
|
+ </div>
|
|
|
+ </el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+:deep(.el-radio-group) {
|
|
|
+ display: block;
|
|
|
+}
|
|
|
+:deep(.el-radio) {
|
|
|
+ display: flex;
|
|
|
+ min-height: 32px;
|
|
|
+ border: 1px solid var(--color-system-border);
|
|
|
+ background-color: var(--color-system-body-bg);
|
|
|
+ margin-bottom: 4px;
|
|
|
+ border-radius: 6px;
|
|
|
+ padding: 0 8px;
|
|
|
+ margin-right: 0;
|
|
|
+ height: fit-content;
|
|
|
+ line-height: 32px;
|
|
|
+ align-items: start;
|
|
|
+}
|
|
|
+:deep(.el-radio__input.is-checked + .el-radio__label) {
|
|
|
+ color: var(--color-neutral-1);
|
|
|
+}
|
|
|
+:deep( .el-radio__inner) {
|
|
|
+ border: 1px solid var(--color-system-checkbox-border);
|
|
|
+}
|
|
|
+:deep(.el-radio__inner) {
|
|
|
+ margin-top: 7px;
|
|
|
+}
|
|
|
+:deep(.el-checkbox-group) {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+}
|
|
|
+.oceanCheckbox {
|
|
|
+ margin-bottom: 8px;
|
|
|
+}
|
|
|
+.delayedType {
|
|
|
+ align-items: start;
|
|
|
+ height: fit-content;
|
|
|
+ margin-right: 5px;
|
|
|
+ border-radius: 6px;
|
|
|
+ padding: 13px;
|
|
|
+}
|
|
|
+:deep(.el-checkbox) {
|
|
|
+ width: 100%;
|
|
|
+ border-radius: 6px;
|
|
|
+ background-color: var(--color-personal-preference-bg);
|
|
|
+ margin-bottom: 4px;
|
|
|
+}
|
|
|
+:deep(.el-checkbox__label) {
|
|
|
+ width: 100%;
|
|
|
+}
|
|
|
+.titlecheckbox {
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+}
|
|
|
+.icon_grey {
|
|
|
+ color: #b8bbbf;
|
|
|
+}
|
|
|
+.AirCoulumn {
|
|
|
+ display: flex;
|
|
|
+ border: 1px solid var(--color-system-border);
|
|
|
+ background-color: var(--color-personal-preference-bg);
|
|
|
+ border-radius: 6px 6px 0 0;
|
|
|
+}
|
|
|
+.AicoulumnTitile {
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 700;
|
|
|
+ border-right: 1px solid var(--color-system-border);
|
|
|
+ height: 56px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ padding: 0 8px;
|
|
|
+}
|
|
|
+.datetitle {
|
|
|
+ font-size: 12px;
|
|
|
+ font-weight: 400;
|
|
|
+ height: 24px;
|
|
|
+ width: 50%;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ padding: 0 8px;
|
|
|
+}
|
|
|
+.AicoulumnTitile2 {
|
|
|
+ font-weight: 700;
|
|
|
+ height: 32px;
|
|
|
+ display: flex;
|
|
|
+ border-bottom: 1px solid var(--color-system-border);
|
|
|
+ align-items: center;
|
|
|
+ padding: 0 8px;
|
|
|
+}
|
|
|
+.AirCoumlulnAdd {
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 400;
|
|
|
+ height: 56px;
|
|
|
+ color: var(--color-theme);
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ padding: 0 8px;
|
|
|
+}
|
|
|
+.AirContent {
|
|
|
+ display: flex;
|
|
|
+ border: 1px solid var(--color-system-border);
|
|
|
+ background-color: var(--color-mode);
|
|
|
+ border-top: none;
|
|
|
+ height: 40px;
|
|
|
+ align-items: center;
|
|
|
+}
|
|
|
+.AirContent:last-child {
|
|
|
+ border-radius: 0 0 6px 6px;
|
|
|
+}
|
|
|
+.AirCoumlumn {
|
|
|
+ border-right: 1px solid var(--color-system-border);
|
|
|
+ display: flex;
|
|
|
+ height: 40px;
|
|
|
+ align-items: center;
|
|
|
+ padding: 0 8px;
|
|
|
+}
|
|
|
+.AirDelete {
|
|
|
+ display: flex;
|
|
|
+ height: 40px;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+}
|
|
|
+</style>
|