Ver código fonte

feat:修改部分bug

AmandaG 8 meses atrás
pai
commit
c571c54230

+ 1 - 2
src/auto-imports.d.ts

@@ -3,7 +3,6 @@
 // @ts-nocheck
 // noinspection JSUnusedGlobalSymbols
 // Generated by unplugin-auto-import
-// biome-ignore lint: disable
 export {}
 declare global {
   const $api: typeof import('@/api/index')['default']
@@ -69,6 +68,6 @@ declare global {
 // for type re-export
 declare global {
   // @ts-ignore
-  export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
+  export type { Component, ComponentPublicInstance, ComputedRef, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, VNode, WritableComputedRef } from 'vue'
   import('vue')
 }

+ 15 - 10
src/components/AddRules/src/AddRules.vue

@@ -385,19 +385,16 @@ const Savesubscribe = () => {
   if (props.TitleType == 'Milestone') {
     savesubscribeobj.rules_type = 'Milestone_Update'
     if (
-      OceanCheckList.value == undefined ||
+      OceanCheckList.value == undefined &&
       AirCheckList.value == undefined ||
-      OceanCheckList.value.length == 0 ||
+      OceanCheckList.value.length == 0 &&
       AirCheckList.value.length == 0 ||
       MilFrequencyList.value.length == 0 ||
       MilMethodsList.value == undefined ||
       MilMethodsList.value.length == 0
     ) {
-      if (OceanCheckList.value == undefined || OceanCheckList.value.length == 0) {
-        missingmessage.value += 'Ocean Shipments, '
-      }
-      if (AirCheckList.value == undefined || AirCheckList.value.length == 0) {
-        missingmessage.value += 'Air Shipments, '
+      if (OceanCheckList.value == undefined && AirCheckList.value == undefined || OceanCheckList.value.length == 0 && AirCheckList.value.length == 0) {
+        missingmessage.value += 'Select Milstone, '
       }
       if (MilFrequencyList.value.length == 0) {
         missingmessage.value += 'Notification Frequency, '
@@ -408,16 +405,24 @@ const Savesubscribe = () => {
       missingmessage.value = missingmessage.value.substring(0, missingmessage.value.length - 2)
       UnableSaveVisible.value = true
     } else {
-      console.log(OceanCheckCode.value)
-      console.log(AirCheckListCode.value)
       savesubscribeobj.ocean_milestone = OceanCheckCode.value
       savesubscribeobj.air_milestone = AirCheckListCode.value
-      str =
+      if(OceanCheckList.value.length == 0) {
+        str =
+        'Air Milestones: ' +
+        AirCheckList.value.join(',')
+      } else if(AirCheckList.value.length == 0) {
+        str =
+        'Ocean Milestones: ' +
+        OceanCheckList.value.join(',')
+      } else {
+        str =
         'Ocean Milestones: ' +
         OceanCheckList.value.join(',') +
         ';\nAir Milestones: ' +
         AirCheckList.value.join(',') +
         ';'
+      }
       savesubscribeobj.event_details = str
       SaveSuceessful()
     }

+ 52 - 30
src/components/AddRules/src/components/DelayedType.vue

@@ -38,9 +38,9 @@ const isDeparture = ref(false)
 const isArrival = ref(false)
 const OceanActive = ref(['DelayedShipments'])
 const OceanCheckedList = ref()
-const DepartureTime = ref('')
+const DepartureTime = ref()
 const DepartureSelect = ref('')
-const ArrivalTime = ref('')
+const ArrivalTime = ref()
 const ArrivalSelect = ref('')
 const emit = defineEmits(['ChangeCheckRules', 'closeDelayed'])
 const DepartureList = ref({
@@ -50,34 +50,45 @@ const DepartureList = ref({
 let Departurestr: any = ''
 let Arrivalstr: any = ''
 
-const clampedValue = computed(() => {
-  if (DepartureTime.value == '') {
-    return 0
-  } else {
-    const numericValue = DepartureTime.value.replace(/[^0-9]/g, 0) // 移除非数字字符
-    return Math.min(Math.max(parseInt(numericValue, 10), 0), 365) // 确保值在0到1000之间,但不更新原输入值仅用于显示
+const clampedValue = computed({
+  get: () => DepartureTime.value,
+  set: (newVal) => {
+    const isValid = /^[1-9]\d*$/.test(newVal);
+    DepartureTime.value = isValid ? newVal : '';
+    if( DepartureTime.value!='') {
+      DepartureTime.value = Math.min(Math.max(parseInt(DepartureTime.value, 10), 1), 365)
+    }
   }
 })
-const clampedArrivalValue = computed(() => {
-  if (ArrivalTime.value == '') {
-    return 0
-  } else {
-    const numericValue = ArrivalTime.value.replace(/[^0-9]/g, 0) // 移除非数字字符
-    return Math.min(Math.max(parseInt(numericValue, 10), 0), 365) // 确保值在0到1000之间,但不更新原输入值仅用于显示
+const clampedArrivalValue = computed({
+  get: () => ArrivalTime.value,
+  set: (newVal) => {
+    const isValid = /^[1-9]\d*$/.test(newVal);
+    ArrivalTime.value = isValid ? newVal : '';
+    if( ArrivalTime.value!='') {
+      ArrivalTime.value = Math.min(Math.max(parseInt(ArrivalTime.value, 10), 1), 365)
+    }
   }
 })
 
 const CheckChange = (val: any) => {
   if (val.includes('Departure Delayed')) {
     isDeparture.value = true
-    Departurestr = 'Departure Delayed' + ' ≥ ' + clampedValue.value + ' ' + DepartureSelect.value
+    if(clampedValue.value != '' && clampedValue.value!= undefined) {
+      Departurestr = 'Departure Delayed' + ' ≥ ' + clampedValue.value + ' ' + DepartureSelect.value
+    } else {
+      Departurestr = ''
+    }
     if (DepartureSelect.value != '') {
       DepartureList.value.Departure = Departurestr
     }
     if (val.includes('Arrival Delayed (ATA-ETA)')) {
       isArrival.value = true
-      Arrivalstr =
-        'Arrival Delayed (ATA-ETA)' + ' ≥ ' + clampedArrivalValue.value + ' ' + ArrivalSelect.value
+      if(clampedArrivalValue.value != '' && clampedArrivalValue.value!= undefined) {
+        Arrivalstr = 'Departure Delayed' + ' ≥ ' + clampedArrivalValue.value + ' ' + DepartureSelect.value
+      } else {
+        Arrivalstr = ''
+      }
       if (ArrivalSelect.value != '') {
         DepartureList.value.Arrival = Arrivalstr
       }
@@ -90,8 +101,11 @@ const CheckChange = (val: any) => {
     DepartureList.value.Departure = ''
     if (val.includes('Arrival Delayed (ATA-ETA)')) {
       isArrival.value = true
-      Arrivalstr =
-        'Arrival Delayed (ATA-ETA)' + ' ≥ ' + clampedArrivalValue.value + ' ' + ArrivalSelect.value
+      if(clampedArrivalValue.value != '' && clampedArrivalValue.value!= undefined) {
+        Arrivalstr = 'Departure Delayed' + ' ≥ ' + clampedArrivalValue.value + ' ' + DepartureSelect.value
+      } else {
+        Arrivalstr = ''
+      }
       if (ArrivalSelect.value != '') {
         DepartureList.value.Arrival = Arrivalstr
       }
@@ -104,21 +118,31 @@ const CheckChange = (val: any) => {
 }
 const changedeparture = (val: any) => {
   if (val == 'Departure') {
-    Departurestr = 'Departure Delayed' + ' ≥ ' + clampedValue.value + ' ' + DepartureSelect.value
+    if(clampedValue.value != '' && clampedValue.value!= undefined) {
+      Departurestr = 'Departure Delayed' + ' ≥ ' + clampedValue.value + ' ' + DepartureSelect.value
+    } else {
+      Departurestr = ''
+    }
     if (DepartureSelect.value != '') {
       DepartureList.value.Departure = Departurestr
     }
     if (val == 'Arrival') {
-      Arrivalstr =
-        'Arrival Delayed (ATA-ETA)' + ' ≥ ' + clampedArrivalValue.value + ' ' + ArrivalSelect.value
+      if(clampedArrivalValue.value != '' && clampedArrivalValue.value!= undefined) {
+        Arrivalstr = 'Departure Delayed' + ' ≥ ' + clampedArrivalValue.value + ' ' + DepartureSelect.value
+      } else {
+        Arrivalstr = ''
+      }
       if (ArrivalSelect.value != '') {
         DepartureList.value.Arrival = Arrivalstr
       }
     }
   } else {
     if (val == 'Arrival') {
-      Arrivalstr =
-        'Arrival Delayed (ATA-ETA)' + ' ≥ ' + clampedArrivalValue.value + ' ' + ArrivalSelect.value
+      if(clampedArrivalValue.value != '' && clampedArrivalValue.value!= undefined) {
+        Arrivalstr = 'Departure Delayed' + ' ≥ ' + clampedArrivalValue.value + ' ' + DepartureSelect.value
+      } else {
+        Arrivalstr = ''
+      }
       if (ArrivalSelect.value != '') {
         DepartureList.value.Arrival = Arrivalstr
       }
@@ -177,9 +201,8 @@ defineExpose({
                 <span class="delayedTitle">Delayed Time</span>
                 <span class="delayedIcon">></span>
                 <el-input
-                  v-model="DepartureTime"
+                  v-model="clampedValue"
                   class="input-with-select"
-                  :value="clampedValue"
                   @input="changedeparture('Departure')"
                 >
                   <template #append>
@@ -189,7 +212,7 @@ defineExpose({
                       @change="changedeparture('Departure')"
                     >
                       <el-option label="Day(s)" value="Day(s)" />
-                      <el-option label="Hour(s)" value="Hour(s)" />
+                      <el-option v-if="props.Title == 'Air shipments'" label="Hour(s)" value="Hour(s)" />
                     </el-select>
                   </template>
                 </el-input>
@@ -201,9 +224,8 @@ defineExpose({
                 <span class="delayedTitle">Delayed Time</span>
                 <span class="delayedIcon">></span>
                 <el-input
-                  v-model="ArrivalTime"
+                  v-model="clampedArrivalValue"
                   @input="changedeparture('Arrival')"
-                  :value="clampedArrivalValue"
                   class="input-with-select"
                 >
                   <template #append>
@@ -213,7 +235,7 @@ defineExpose({
                       @change="changedeparture('Arrival')"
                     >
                       <el-option label="Day(s)" value="Day(s)" />
-                      <el-option label="Hour(s)" value="Hour(s)" />
+                      <el-option v-if="props.Title == 'Air shipments'" label="Hour(s)" value="Hour(s)" />
                     </el-select>
                   </template>
                 </el-input>

+ 54 - 28
src/components/AddRules/src/components/ETDShipments.vue

@@ -49,9 +49,9 @@ const isETD = ref(false)
 const isETA = ref(false)
 const OceanActive = ref(['ETDShipments'])
 const OceanCheckedList = ref()
-const ETDTime = ref('')
+const ETDTime = ref()
 const ETDSelect = ref('')
-const ETATime = ref('')
+const ETATime = ref()
 const ETASelect = ref('')
 const ETDRadio = ref()
 const ETARadio = ref()
@@ -65,13 +65,25 @@ let ETAstr: any = ''
 const CheckChange = (val: any) => {
   if (val.includes('ETD')) {
     isETD.value = true
-    if (ETDSelect.value != '') {
+    if(ETDstr.includes('all changes')) {
       ETDETAList.value.ETD = ETDstr
+    } else {
+      if (ETDSelect.value != ''  && clampedValue.value!= '') {
+        ETDETAList.value.ETD = ETDstr
+      } else {
+        ETDETAList.value.ETD = ''
+      }
     }
     if (val.includes('ETA')) {
       isETA.value = true
-      if (ETASelect.value != '') {
+      if(ETAstr.includes('all changes')) {
         ETDETAList.value.ETA = ETAstr
+      } else {
+        if (ETASelect.value != ''  && clampedETAValue.value!= '') {
+          ETDETAList.value.ETA = ETAstr
+        } else {
+          ETDETAList.value.ETA = ''
+        }
       }
     } else {
       isETA.value = false
@@ -82,8 +94,14 @@ const CheckChange = (val: any) => {
     ETDETAList.value.ETD = ''
     if (val.includes('ETA')) {
       isETA.value = true
-      if (ETASelect.value != '') {
+      if(ETAstr.includes('all changes')) {
         ETDETAList.value.ETA = ETAstr
+      } else {
+        if (ETASelect.value != ''  && clampedETAValue.value!= '') {
+          ETDETAList.value.ETA = ETAstr
+        } else {
+          ETDETAList.value.ETA = ''
+        }
       }
     } else {
       isETA.value = false
@@ -98,7 +116,7 @@ const changeETDRadio = (val: any) => {
     ETDETAList.value.ETD = ETDstr
   } else if (val == 2) {
     ETDstr = 'ETD: Notify for all changes ≥ ' + clampedValue.value + ' ' + ETDSelect.value
-    if (ETDSelect.value != '') {
+    if (ETDSelect.value != '' && clampedValue.value!= '') {
       ETDETAList.value.ETD = ETDstr
     } else {
       ETDETAList.value.ETD = ''
@@ -112,7 +130,7 @@ const changeETARadio = (val: any) => {
     ETDETAList.value.ETA = ETAstr
   } else if (val == 2) {
     ETAstr = 'ETA: Notify for all changes ≥ ' + clampedETAValue.value + ' ' + ETASelect.value
-    if (ETASelect.value != '') {
+    if (ETASelect.value != '' && clampedValue.value!= '') {
       ETDETAList.value.ETA = ETAstr
     } else {
       ETDETAList.value.ETA = ''
@@ -123,20 +141,26 @@ const changeETARadio = (val: any) => {
 const changedeparture = (val: any) => {
   if (val == 'ETD') {
     ETDstr = 'ETD: Notify for all changes ≥ ' + clampedValue.value + ' ' + ETDSelect.value
-    if (ETDSelect.value != '') {
+    if (ETDSelect.value != '' && clampedValue.value!= '') {
       ETDETAList.value.ETD = ETDstr
+    } else {
+      ETDETAList.value.ETD = ''
     }
     if (val == 'ETA') {
       ETAstr = 'ETA: Notify for all changes ≥ ' + clampedETAValue.value + ' ' + ETASelect.value
-      if (ETASelect.value != '') {
+      if (ETASelect.value != '' && clampedETAValue.value!= '') {
         ETDETAList.value.ETA = ETAstr
+      } else {
+        ETDETAList.value.ETA = ''
       }
     }
   } else {
     if (val == 'ETA') {
       ETAstr = 'ETA: Notify for all changes ≥ ' + clampedETAValue.value + ' ' + ETASelect.value
-      if (ETASelect.value != '') {
+      if (ETASelect.value != '' && clampedETAValue.value!= '') {
         ETDETAList.value.ETA = ETAstr
+      } else {
+        ETDETAList.value.ETA = ''
       }
     }
   }
@@ -182,20 +206,24 @@ defineExpose({
   ClearData
 })
 
-const clampedValue = computed(() => {
-  if (ETDTime.value == '') {
-    return 0
-  } else {
-    const numericValue = ETDTime.value.replace(/[^0-9]/g, 0) // 移除非数字字符
-    return Math.min(Math.max(parseInt(numericValue, 10), 0), 365) // 确保值在0到1000之间,但不更新原输入值仅用于显示
+const clampedValue = computed({
+  get: () => ETDTime.value,
+  set: (newVal) => {
+    const isValid = /^[1-9]\d*$/.test(newVal);
+    ETDTime.value = isValid ? newVal : '';
+    if( ETDTime.value!='') {
+      ETDTime.value = Math.min(Math.max(parseInt(ETDTime.value, 10), 1), 365)
+    }
   }
 })
-const clampedETAValue = computed(() => {
-  if (ETATime.value == '') {
-    return 0
-  } else {
-    const numericValue = ETATime.value.replace(/[^0-9]/g, 0) // 移除非数字字符
-    return Math.min(Math.max(parseInt(numericValue, 10), 0), 365) // 确保值在0到1000之间,但不更新原输入值仅用于显示
+const clampedETAValue = computed({
+  get: () => ETATime.value,
+  set: (newVal) => {
+    const isValid = /^[1-9]\d*$/.test(newVal);
+    ETATime.value = isValid ? newVal : '';
+    if( ETATime.value!='') {
+      ETATime.value = Math.min(Math.max(parseInt(ETATime.value, 10), 1), 365)
+    }
   }
 })
 </script>
@@ -217,8 +245,7 @@ const clampedETAValue = computed(() => {
                     >Notify only when time difference
                     <span class="delayedIcon">></span>
                     <el-input
-                      v-model="ETDTime"
-                      :value="clampedValue"
+                      v-model="clampedValue"
                       class="input-with-select"
                       @input="changedeparture('ETD')"
                     >
@@ -229,7 +256,7 @@ const clampedETAValue = computed(() => {
                           @change="changedeparture('ETD')"
                         >
                           <el-option label="Day(s)" value="Day(s)" />
-                          <el-option label="Hour(s)" value="Hour(s)" />
+                          <el-option v-if="props.Title == 'Air shipments'" label="Hour(s)" value="Hour(s)" />
                         </el-select>
                       </template> </el-input
                   ></el-radio>
@@ -245,8 +272,7 @@ const clampedETAValue = computed(() => {
                     >Notify only when time difference
                     <span class="delayedIcon">></span>
                     <el-input
-                      v-model="ETATime"
-                      :value="clampedETAValue"
+                      v-model="clampedETAValue"
                       class="input-with-select"
                       @input="changedeparture('ETA')"
                     >
@@ -257,7 +283,7 @@ const clampedETAValue = computed(() => {
                           @change="changedeparture('ETA')"
                         >
                           <el-option label="Day(s)" value="Day(s)" />
-                          <el-option label="Hour(s)" value="Hour(s)" />
+                          <el-option v-if="props.Title == 'Air shipments'" label="Hour(s)" value="Hour(s)" />
                         </el-select>
                       </template> </el-input
                   ></el-radio>

+ 6 - 0
src/components/AddRules/src/components/NotiFrequency.vue

@@ -180,6 +180,9 @@ const ChangeFrequency = (val: any) => {
   if (val == 1) {
     isDaily.value = false
     isWeekly.value = false
+    DailyTime.value = ''
+    WeeklyDay.value = ''
+    WeeklyTime.value = ''
     str = 'Instant notification for each update'
     FrequencyList.value.push(str)
     savesubscribeobj.frequency_type = 'Instant'
@@ -187,6 +190,8 @@ const ChangeFrequency = (val: any) => {
   } else if (val == 2) {
     isDaily.value = true
     isWeekly.value = false
+    WeeklyDay.value = ''
+    WeeklyTime.value = ''
     str = 'Daily, ' + DailyTime.value + ', ' + TimeZoneDailySelect.value
     if (DailyTime.value != '' && TimeZoneDailySelect.value !== '') {
       FrequencyList.value.push(str)
@@ -198,6 +203,7 @@ const ChangeFrequency = (val: any) => {
   } else if (val == 3) {
     isDaily.value = false
     isWeekly.value = true
+    DailyTime.value = ''
     str = 'Weekly, ' + WeeklyDay.value + ', ' + WeeklyTime.value + ', ' + TimeZoneWeeklySelect.value
     if (WeeklyDay.value != '' && WeeklyTime.value != '' && TimeZoneWeeklySelect.value !== '') {
       FrequencyList.value.push(str)

+ 30 - 20
src/components/AddRules/src/components/ShipmentRange.vue

@@ -25,23 +25,27 @@ TransportList.value = [
 
 const TimeChecked = ref()
 
-const ETDTime = ref('')
-const ETATime = ref('')
+const ETDTime = ref()
+const ETATime = ref()
 
-const clampedETDValue = computed(() => {
-  if (ETDTime.value == '') {
-    return 0
-  } else {
-    const numericValue = ETDTime.value.replace(/[^0-9]/g, 0) // 移除非数字字符
-    return Math.min(Math.max(parseInt(numericValue, 10), 0), 365) // 确保值在0到1000之间,但不更新原输入值仅用于显示
+const clampedETDValue = computed({
+  get: () => ETDTime.value,
+  set: (newVal) => {
+    const isValid = /^[1-9]\d*$/.test(newVal);
+    ETDTime.value = isValid ? newVal : '';
+    if( ETDTime.value!='') {
+      ETDTime.value = Math.min(Math.max(parseInt(ETDTime.value, 10), 1), 365)
+    }
   }
 })
-const clampedETAValue = computed(() => {
-  if (ETATime.value == '') {
-    return 0
-  } else {
-    const numericValue = ETATime.value.replace(/[^0-9]/g, 0) // 移除非数字字符
-    return Math.min(Math.max(parseInt(numericValue, 10), 0), 365) // 确保值在0到1000之间,但不更新原输入值仅用于显示
+const clampedETAValue = computed({
+  get: () => ETATime.value,
+  set: (newVal) => {
+    const isValid = /^[1-9]\d*$/.test(newVal);
+    ETATime.value = isValid ? newVal : '';
+    if( ETATime.value!='') {
+      ETATime.value = Math.min(Math.max(parseInt(ETATime.value, 10), 1), 365)
+    }
   }
 })
 
@@ -60,9 +64,17 @@ const CheckChange = (val: any) => {
 // 输入ETD、ETA
 const changeTime = (val: any) => {
   if (val == 1) {
-    Timestr = 'ETD within ' + clampedETDValue.value + ' Day(s)'
+    if(clampedETDValue.value != '' && clampedETDValue.value != undefined) {
+      Timestr = 'ETD within ' + clampedETDValue.value + ' Day(s)'
+    } else{
+      Timestr = ''
+    }
   } else if (val == 2) {
-    Timestr = 'ETA within ' + clampedETAValue.value + ' Day(s)'
+    if(clampedETAValue.value != '' && clampedETAValue.value != undefined) {
+      Timestr = 'ETA within ' + clampedETAValue.value + ' Day(s)'
+    } else{
+      Timestr = ''
+    }
   } else {
     Timestr = ''
   }
@@ -112,8 +124,7 @@ defineExpose({
                 ETD within
                 <el-input
                   @input="changeTime('1')"
-                  v-model="ETDTime"
-                  :value="clampedETDValue"
+                  v-model="clampedETDValue"
                   class="input-with-select"
                 >
                 </el-input>
@@ -125,8 +136,7 @@ defineExpose({
                 ETA within
                 <el-input
                   @input="changeTime('2')"
-                  v-model="ETATime"
-                  :value="clampedETAValue"
+                  v-model="clampedETAValue"
                   class="input-with-select"
                 >
                 </el-input>

+ 15 - 8
src/components/CreateAddRules/src/CreateAddRules.vue

@@ -592,9 +592,9 @@ const Savesubscribe = () => {
   if (props.TitleType == 'Milestone') {
     savesubscribeobj.rules_type = 'Milestone_Update'
     if (
-      OceanCheckList.value == undefined ||
+      OceanCheckList.value == undefined &&
       AirCheckList.value == undefined ||
-      OceanCheckList.value.length == 0 ||
+      OceanCheckList.value.length == 0 &&
       AirCheckList.value.length == 0 ||
       MilFrequencyList.value.length == 0 ||
       MilMethodsList.value.length == 0 ||
@@ -607,11 +607,8 @@ const Savesubscribe = () => {
       if (createObj.Timestr == '') {
         missingmessage.value += 'Time, '
       }
-      if (OceanCheckList.value == undefined || OceanCheckList.value.length == 0) {
-        missingmessage.value += 'Ocean Shipments, '
-      }
-      if (AirCheckList.value == undefined || AirCheckList.value.length == 0) {
-        missingmessage.value += 'Air Shipments, '
+      if (OceanCheckList.value == undefined && AirCheckList.value == undefined || OceanCheckList.value.length == 0 && AirCheckList.value.length == 0 ) {
+        missingmessage.value += 'Select Milstone, '
       }
       if (MilFrequencyList.value.length == 0) {
         missingmessage.value += 'Notification Frequency, '
@@ -624,12 +621,22 @@ const Savesubscribe = () => {
     } else {
       savesubscribeobj.ocean_milestone = OceanCheckListCode.value
       savesubscribeobj.air_milestone = AirCheckListCode.value
-      str =
+      if(OceanCheckList.value.length == 0) {
+        str =
+        'Air Milestones: ' +
+        AirCheckList.value.join(',')
+      } else if(AirCheckList.value.length == 0) {
+        str =
+        'Ocean Milestones: ' +
+        OceanCheckList.value.join(',')
+      } else {
+        str =
         'Ocean Milestones: ' +
         OceanCheckList.value.join(',') +
         ';\nAir Milestones: ' +
         AirCheckList.value.join(',') +
         ';'
+      }
       savesubscribeobj.event_details = str
       SaveSuceessful()
     }

+ 50 - 28
src/components/CreateAddRules/src/components/DelayedType.vue

@@ -38,9 +38,9 @@ const isDeparture = ref(false)
 const isArrival = ref(false)
 const OceanActive = ref(['DelayedShipments'])
 const OceanCheckedList = ref()
-const DepartureTime = ref('')
+const DepartureTime = ref()
 const DepartureSelect = ref('')
-const ArrivalTime = ref('')
+const ArrivalTime = ref()
 const ArrivalSelect = ref('')
 const emit = defineEmits(['ChangeCheckRules', 'closeDelayed'])
 const DepartureList = ref({
@@ -50,34 +50,45 @@ const DepartureList = ref({
 let Departurestr: any = ''
 let Arrivalstr: any = ''
 
-const clampedValue = computed(() => {
-  if (DepartureTime.value == '') {
-    return 0
-  } else {
-    const numericValue = DepartureTime.value.replace(/[^0-9]/g, 0) // 移除非数字字符
-    return Math.min(Math.max(parseInt(numericValue, 10), 0), 365) // 确保值在0到1000之间,但不更新原输入值仅用于显示
+const clampedValue = computed({
+  get: () => DepartureTime.value,
+  set: (newVal) => {
+    const isValid = /^[1-9]\d*$/.test(newVal);
+    DepartureTime.value = isValid ? newVal : '';
+    if( DepartureTime.value!='') {
+      DepartureTime.value = Math.min(Math.max(parseInt(DepartureTime.value, 10), 1), 365)
+    }
   }
 })
-const clampedArrivalValue = computed(() => {
-  if (ArrivalTime.value == '') {
-    return 0
-  } else {
-    const numericValue = ArrivalTime.value.replace(/[^0-9]/g, 0) // 移除非数字字符
-    return Math.min(Math.max(parseInt(numericValue, 10), 0), 365) // 确保值在0到1000之间,但不更新原输入值仅用于显示
+const clampedArrivalValue = computed({
+  get: () => ArrivalTime.value,
+  set: (newVal) => {
+    const isValid = /^[1-9]\d*$/.test(newVal);
+    ArrivalTime.value = isValid ? newVal : '';
+    if( ArrivalTime.value!='') {
+      ArrivalTime.value = Math.min(Math.max(parseInt(ArrivalTime.value, 10), 1), 365)
+    }
   }
 })
 
 const CheckChange = (val: any) => {
   if (val.includes('Departure Delayed')) {
     isDeparture.value = true
-    Departurestr = 'Departure Delayed' + ' ≥ ' + clampedValue.value + ' ' + DepartureSelect.value
+    if(clampedValue.value != '' && clampedValue.value!= undefined) {
+      Departurestr = 'Departure Delayed' + ' ≥ ' + clampedValue.value + ' ' + DepartureSelect.value
+    } else {
+      Departurestr = ''
+    }
     if (DepartureSelect.value != '') {
       DepartureList.value.Departure = Departurestr
     }
     if (val.includes('Arrival Delayed (ATA-ETA)')) {
       isArrival.value = true
-      Arrivalstr =
-        'Arrival Delayed (ATA-ETA)' + ' ≥ ' + clampedArrivalValue.value + ' ' + ArrivalSelect.value
+      if(clampedArrivalValue.value != '' && clampedArrivalValue.value!= undefined) {
+        Arrivalstr = 'Departure Delayed' + ' ≥ ' + clampedArrivalValue.value + ' ' + DepartureSelect.value
+      } else {
+        Arrivalstr = ''
+      }
       if (ArrivalSelect.value != '') {
         DepartureList.value.Arrival = Arrivalstr
       }
@@ -90,8 +101,11 @@ const CheckChange = (val: any) => {
     DepartureList.value.Departure = ''
     if (val.includes('Arrival Delayed (ATA-ETA)')) {
       isArrival.value = true
-      Arrivalstr =
-        'Arrival Delayed (ATA-ETA)' + ' ≥ ' + clampedArrivalValue.value + ' ' + ArrivalSelect.value
+      if(clampedArrivalValue.value != '' && clampedArrivalValue.value!= undefined) {
+        Arrivalstr = 'Departure Delayed' + ' ≥ ' + clampedArrivalValue.value + ' ' + DepartureSelect.value
+      } else {
+        Arrivalstr = ''
+      }
       if (ArrivalSelect.value != '') {
         DepartureList.value.Arrival = Arrivalstr
       }
@@ -104,21 +118,31 @@ const CheckChange = (val: any) => {
 }
 const changedeparture = (val: any) => {
   if (val == 'Departure') {
-    Departurestr = 'Departure Delayed' + ' ≥ ' + clampedValue.value + ' ' + DepartureSelect.value
+    if(clampedValue.value != '' && clampedValue.value!= undefined) {
+      Departurestr = 'Departure Delayed' + ' ≥ ' + clampedValue.value + ' ' + DepartureSelect.value
+    } else {
+      Departurestr = ''
+    }
     if (DepartureSelect.value != '') {
       DepartureList.value.Departure = Departurestr
     }
     if (val == 'Arrival') {
-      Arrivalstr =
-        'Arrival Delayed (ATA-ETA)' + ' ≥ ' + clampedArrivalValue.value + ' ' + ArrivalSelect.value
+      if(clampedArrivalValue.value != '' && clampedArrivalValue.value!= undefined) {
+        Arrivalstr = 'Departure Delayed' + ' ≥ ' + clampedArrivalValue.value + ' ' + DepartureSelect.value
+      } else {
+        Arrivalstr = ''
+      }
       if (ArrivalSelect.value != '') {
         DepartureList.value.Arrival = Arrivalstr
       }
     }
   } else {
     if (val == 'Arrival') {
-      Arrivalstr =
-        'Arrival Delayed (ATA-ETA)' + ' ≥ ' + clampedArrivalValue.value + ' ' + ArrivalSelect.value
+      if(clampedArrivalValue.value != '' && clampedArrivalValue.value!= undefined) {
+        Arrivalstr = 'Departure Delayed' + ' ≥ ' + clampedArrivalValue.value + ' ' + DepartureSelect.value
+      } else {
+        Arrivalstr = ''
+      }
       if (ArrivalSelect.value != '') {
         DepartureList.value.Arrival = Arrivalstr
       }
@@ -177,9 +201,8 @@ defineExpose({
                 <span class="delayedTitle">Delayed Time</span>
                 <span class="delayedIcon">></span>
                 <el-input
-                  v-model="DepartureTime"
+                  v-model="clampedValue"
                   class="input-with-select"
-                  :value="clampedValue"
                   @input="changedeparture('Departure')"
                 >
                   <template #append>
@@ -201,9 +224,8 @@ defineExpose({
                 <span class="delayedTitle">Delayed Time</span>
                 <span class="delayedIcon">></span>
                 <el-input
-                  v-model="ArrivalTime"
+                  v-model="clampedArrivalValue"
                   @input="changedeparture('Arrival')"
-                  :value="clampedArrivalValue"
                   class="input-with-select"
                 >
                   <template #append>

+ 54 - 28
src/components/CreateAddRules/src/components/ETDShipments.vue

@@ -49,9 +49,9 @@ const isETD = ref(false)
 const isETA = ref(false)
 const OceanActive = ref(['ETDShipments'])
 const OceanCheckedList = ref()
-const ETDTime = ref('')
+const ETDTime = ref()
 const ETDSelect = ref('')
-const ETATime = ref('')
+const ETATime = ref()
 const ETASelect = ref('')
 const ETDRadio = ref()
 const ETARadio = ref()
@@ -65,13 +65,25 @@ let ETAstr: any = ''
 const CheckChange = (val: any) => {
   if (val.includes('ETD')) {
     isETD.value = true
-    if (ETDSelect.value != '') {
+    if(ETDstr.includes('all changes')) {
       ETDETAList.value.ETD = ETDstr
+    } else {
+      if (ETDSelect.value != ''  && clampedValue.value!= '') {
+        ETDETAList.value.ETD = ETDstr
+      } else {
+        ETDETAList.value.ETD = ''
+      }
     }
     if (val.includes('ETA')) {
       isETA.value = true
-      if (ETASelect.value != '') {
+      if(ETAstr.includes('all changes')) {
         ETDETAList.value.ETA = ETAstr
+      } else {
+        if (ETASelect.value != ''  && clampedETAValue.value!= '') {
+          ETDETAList.value.ETA = ETAstr
+        } else {
+          ETDETAList.value.ETA = ''
+        }
       }
     } else {
       isETA.value = false
@@ -82,8 +94,14 @@ const CheckChange = (val: any) => {
     ETDETAList.value.ETD = ''
     if (val.includes('ETA')) {
       isETA.value = true
-      if (ETASelect.value != '') {
+      if(ETAstr.includes('all changes')) {
         ETDETAList.value.ETA = ETAstr
+      } else {
+        if (ETASelect.value != ''  && clampedETAValue.value!= '') {
+          ETDETAList.value.ETA = ETAstr
+        } else {
+          ETDETAList.value.ETA = ''
+        }
       }
     } else {
       isETA.value = false
@@ -98,7 +116,7 @@ const changeETDRadio = (val: any) => {
     ETDETAList.value.ETD = ETDstr
   } else if (val == 2) {
     ETDstr = 'ETD: Notify for all changes ≥ ' + clampedValue.value + ' ' + ETDSelect.value
-    if (ETDSelect.value != '') {
+    if (ETDSelect.value != '' && clampedValue.value!= '') {
       ETDETAList.value.ETD = ETDstr
     } else {
       ETDETAList.value.ETD = ''
@@ -112,7 +130,7 @@ const changeETARadio = (val: any) => {
     ETDETAList.value.ETA = ETAstr
   } else if (val == 2) {
     ETAstr = 'ETA: Notify for all changes ≥ ' + clampedETAValue.value + ' ' + ETASelect.value
-    if (ETASelect.value != '') {
+    if (ETASelect.value != '' && clampedValue.value!= '') {
       ETDETAList.value.ETA = ETAstr
     } else {
       ETDETAList.value.ETA = ''
@@ -123,20 +141,26 @@ const changeETARadio = (val: any) => {
 const changedeparture = (val: any) => {
   if (val == 'ETD') {
     ETDstr = 'ETD: Notify for all changes ≥ ' + clampedValue.value + ' ' + ETDSelect.value
-    if (ETDSelect.value != '') {
+    if (ETDSelect.value != '' && clampedValue.value!= '') {
       ETDETAList.value.ETD = ETDstr
+    } else {
+      ETDETAList.value.ETD = ''
     }
     if (val == 'ETA') {
       ETAstr = 'ETA: Notify for all changes ≥ ' + clampedETAValue.value + ' ' + ETASelect.value
-      if (ETASelect.value != '') {
+      if (ETASelect.value != '' && clampedETAValue.value!= '') {
         ETDETAList.value.ETA = ETAstr
+      } else {
+        ETDETAList.value.ETA = ''
       }
     }
   } else {
     if (val == 'ETA') {
       ETAstr = 'ETA: Notify for all changes ≥ ' + clampedETAValue.value + ' ' + ETASelect.value
-      if (ETASelect.value != '') {
+      if (ETASelect.value != '' && clampedETAValue.value!= '') {
         ETDETAList.value.ETA = ETAstr
+      } else {
+        ETDETAList.value.ETA = ''
       }
     }
   }
@@ -182,20 +206,24 @@ defineExpose({
   ClearData
 })
 
-const clampedValue = computed(() => {
-  if (ETDTime.value == '') {
-    return 0
-  } else {
-    const numericValue = ETDTime.value.replace(/[^0-9]/g, 0) // 移除非数字字符
-    return Math.min(Math.max(parseInt(numericValue, 10), 0), 365) // 确保值在0到1000之间,但不更新原输入值仅用于显示
+const clampedValue = computed({
+  get: () => ETDTime.value,
+  set: (newVal) => {
+    const isValid = /^[1-9]\d*$/.test(newVal);
+    ETDTime.value = isValid ? newVal : '';
+    if( ETDTime.value!='') {
+      ETDTime.value = Math.min(Math.max(parseInt(ETDTime.value, 10), 1), 365)
+    }
   }
 })
-const clampedETAValue = computed(() => {
-  if (ETATime.value == '') {
-    return 0
-  } else {
-    const numericValue = ETATime.value.replace(/[^0-9]/g, 0) // 移除非数字字符
-    return Math.min(Math.max(parseInt(numericValue, 10), 0), 365) // 确保值在0到1000之间,但不更新原输入值仅用于显示
+const clampedETAValue = computed({
+  get: () => ETATime.value,
+  set: (newVal) => {
+    const isValid = /^[1-9]\d*$/.test(newVal);
+    ETATime.value = isValid ? newVal : '';
+    if( ETATime.value!='') {
+      ETATime.value = Math.min(Math.max(parseInt(ETATime.value, 10), 1), 365)
+    }
   }
 })
 </script>
@@ -217,8 +245,7 @@ const clampedETAValue = computed(() => {
                     >Notify only when time difference
                     <span class="delayedIcon">></span>
                     <el-input
-                      v-model="ETDTime"
-                      :value="clampedValue"
+                      v-model="clampedValue"
                       class="input-with-select"
                       @input="changedeparture('ETD')"
                     >
@@ -229,7 +256,7 @@ const clampedETAValue = computed(() => {
                           @change="changedeparture('ETD')"
                         >
                           <el-option label="Day(s)" value="Day(s)" />
-                          <el-option label="Hour(s)" value="Hour(s)" />
+                          <el-option v-if="props.Title == 'Air shipments'" label="Hour(s)" value="Hour(s)" />
                         </el-select>
                       </template> </el-input
                   ></el-radio>
@@ -245,8 +272,7 @@ const clampedETAValue = computed(() => {
                     >Notify only when time difference
                     <span class="delayedIcon">></span>
                     <el-input
-                      v-model="ETATime"
-                      :value="clampedETAValue"
+                      v-model="clampedETAValue"
                       class="input-with-select"
                       @input="changedeparture('ETA')"
                     >
@@ -257,7 +283,7 @@ const clampedETAValue = computed(() => {
                           @change="changedeparture('ETA')"
                         >
                           <el-option label="Day(s)" value="Day(s)" />
-                          <el-option label="Hour(s)" value="Hour(s)" />
+                          <el-option v-if="props.Title == 'Air shipments'" label="Hour(s)" value="Hour(s)" />
                         </el-select>
                       </template> </el-input
                   ></el-radio>

+ 6 - 0
src/components/CreateAddRules/src/components/NotiFrequency.vue

@@ -180,6 +180,9 @@ const ChangeFrequency = (val: any) => {
   if (val == 1) {
     isDaily.value = false
     isWeekly.value = false
+    DailyTime.value = ''
+    WeeklyDay.value = ''
+    WeeklyTime.value = ''
     str = 'Instant notification for each update'
     FrequencyList.value.push(str)
     savesubscribeobj.frequency_type = 'Instant'
@@ -187,6 +190,8 @@ const ChangeFrequency = (val: any) => {
   } else if (val == 2) {
     isDaily.value = true
     isWeekly.value = false
+    WeeklyDay.value = ''
+    WeeklyTime.value = ''
     str = 'Daily, ' + DailyTime.value + ', ' + TimeZoneDailySelect.value
     if (DailyTime.value != '' && TimeZoneDailySelect.value !== '') {
       FrequencyList.value.push(str)
@@ -198,6 +203,7 @@ const ChangeFrequency = (val: any) => {
   } else if (val == 3) {
     isDaily.value = false
     isWeekly.value = true
+    DailyTime.value = ''
     str = 'Weekly, ' + WeeklyDay.value + ', ' + WeeklyTime.value + ', ' + TimeZoneWeeklySelect.value
     if (WeeklyDay.value != '' && WeeklyTime.value != '' && TimeZoneWeeklySelect.value !== '') {
       FrequencyList.value.push(str)

+ 33 - 23
src/components/CreateAddRules/src/components/ShipmentRange.vue

@@ -29,9 +29,6 @@ TransportList.value = [
 
 const TimeChecked = ref()
 
-const ETDTime = ref('')
-const ETATime = ref('')
-
 watch(
   () => props.ShipmentRangeData,
   (current) => {
@@ -57,20 +54,27 @@ const ShipmentRangeInit = () => {
   }
 }
 
-const clampedETDValue = computed(() => {
-  if (ETDTime.value == '') {
-    return 0
-  } else {
-    const numericValue = ETDTime.value.replace(/[^0-9]/g, 0) // 移除非数字字符
-    return Math.min(Math.max(parseInt(numericValue, 10), 0), 365) // 确保值在0到1000之间,但不更新原输入值仅用于显示
+const ETDTime = ref()
+const ETATime = ref()
+
+const clampedETDValue = computed({
+  get: () => ETDTime.value,
+  set: (newVal) => {
+    const isValid = /^[1-9]\d*$/.test(newVal);
+    ETDTime.value = isValid ? newVal : '';
+    if( ETDTime.value!='') {
+      ETDTime.value = Math.min(Math.max(parseInt(ETDTime.value, 10), 1), 365)
+    }
   }
 })
-const clampedETAValue = computed(() => {
-  if (ETATime.value == '') {
-    return 0
-  } else {
-    const numericValue = ETATime.value.replace(/[^0-9]/g, 0) // 移除非数字字符
-    return Math.min(Math.max(parseInt(numericValue, 10), 0), 365) // 确保值在0到1000之间,但不更新原输入值仅用于显示
+const clampedETAValue = computed({
+  get: () => ETATime.value,
+  set: (newVal) => {
+    const isValid = /^[1-9]\d*$/.test(newVal);
+    ETATime.value = isValid ? newVal : '';
+    if( ETATime.value!='') {
+      ETATime.value = Math.min(Math.max(parseInt(ETATime.value, 10), 1), 365)
+    }
   }
 })
 
@@ -89,11 +93,19 @@ const CheckChange = (val: any) => {
 // 输入ETD、ETA
 const changeTime = (val: any) => {
   if (val == 1) {
-    Timestr = 'ETD within ' + clampedETDValue.value + ' Day(s)'
-  emit('ChangeCheckTimeRules', Timestr, clampedETDValue.value)
+    if(clampedETDValue.value != '' && clampedETDValue.value != undefined) {
+      Timestr = 'ETD within ' + clampedETDValue.value + ' Day(s)'
+    } else{
+      Timestr = ''
+    }
+    emit('ChangeCheckTimeRules', Timestr, clampedETDValue.value)
   } else if (val == 2) {
-    Timestr = 'ETA within ' + clampedETAValue.value + ' Day(s)'
-  emit('ChangeCheckTimeRules', Timestr, clampedETAValue.value)
+    if(clampedETAValue.value != '' && clampedETAValue.value != undefined) {
+      Timestr = 'ETA within ' + clampedETAValue.value + ' Day(s)'
+    } else{
+      Timestr = ''
+    }
+    emit('ChangeCheckTimeRules', Timestr, clampedETAValue.value)
   } else {
     Timestr = ''
   }
@@ -142,8 +154,7 @@ defineExpose({
                 <div style="width: 70px">ETD within</div>
                 <el-input
                   @input="changeTime('1')"
-                  v-model="ETDTime"
-                  :value="clampedETDValue"
+                  v-model="clampedETDValue"
                   class="input-with-select"
                 >
                 </el-input>
@@ -155,8 +166,7 @@ defineExpose({
                 <div style="width: 70px">ETA within</div>
                 <el-input
                   @input="changeTime('2')"
-                  v-model="ETATime"
-                  :value="clampedETAValue"
+                  v-model="clampedETAValue"
                   class="input-with-select"
                 >
                 </el-input>

+ 1 - 1
src/views/SystemSettings/src/SystemSettings.vue

@@ -95,7 +95,7 @@ const SubShipmentsColumns = ref([
   {
     field: 'h_bol',
     title: 'HBOL/HAWB',
-    type: 'normal',
+    type: 'link',
     formatter: ''
   },
   {

+ 29 - 1
src/views/SystemSettings/src/components/SettingTable/src/SettingTable.vue

@@ -3,6 +3,11 @@ import { type VxeGridInstance, type VxeGridProps } from 'vxe-table'
 import { useRowClickStyle } from '@/hooks/rowClickStyle'
 import { formatTimezone } from '@/utils/tools'
 import { ref, onMounted } from 'vue'
+import { useRouter } from 'vue-router'
+import { useVisitedRowState } from '@/stores/modules/visitedRow'
+
+const visitedRowState = useVisitedRowState()
+const router = useRouter()
 interface ColumnsListItem {
   field: String
   title: String
@@ -50,6 +55,11 @@ const handleColumns = (columns: any) => {
         ...curColumn,
         formatter: ({ cellValue }: any) => formatTimezone(cellValue)
       }
+    }  else if (item.type === 'link') {
+      curColumn = {
+        ...curColumn,
+        slots: { default: 'trackingNo' }
+      }
     }
     return curColumn
   })
@@ -96,6 +106,16 @@ const handleDelete = (row: any) => {
     })
 }
 
+// 点击link字段
+const handleLinkClick = (row: any) => {
+  console.log(row)
+  router.push({
+      path: '/tracking/detail',
+      query: { a: row.__serial_no, _schemas: row._schemas }
+    })
+    visitedRowState.setTrackingTableData(row['__serial_no'])
+}
+
 onMounted(() => {
   getTableColumns()
 })
@@ -130,7 +150,15 @@ const getpaginationTableData = () => {
       <template #empty>
         <div class="empty">No data</div>
       </template>
-
+      <!-- Tracking No字段的插槽 -->
+      <template #trackingNo="{ row, column }">
+        <span
+          style="color: var(--color-theme); cursor: pointer"
+          @click="handleLinkClick(row)"
+        >
+          {{ row[column.field] }}
+        </span>
+      </template>
       <template #action="{ row }">
         <el-popover :visible="row.visible" placement="left" :width="480">
           <div class="delete_title">