Browse Source

Merge branch 'dev_zyh' of United_Software/k_online_ui into dev

Jack Zhou 4 weeks ago
parent
commit
7304b3a85d
29 changed files with 446 additions and 507 deletions
  1. 4 4
      src/components/AIRobot/src/AIRobot.vue
  2. 109 130
      src/components/CreateAddRules/src/CreateAddRules.vue
  3. 35 0
      src/components/TableImgEmpty/TableImgEmpty.vue
  4. 0 0
      src/components/TableImgEmpty/image/empty-dark.png
  5. 0 0
      src/components/TableImgEmpty/image/empty-light.png
  6. 0 0
      src/components/TableImgEmpty/index.ts
  7. 42 42
      src/components/VBreadcrumb/src/VBreadcrumb.vue
  8. 37 22
      src/router/index.ts
  9. 15 97
      src/stores/modules/breadCrumb.ts
  10. 1 2
      src/views/AIRobotChat/src/AIRobotChat.vue
  11. 1 1
      src/views/Dashboard/src/components/TopMap.vue
  12. 10 5
      src/views/DestinationDelivery/src/components/ConfiguRations/src/ConfiguRations.vue
  13. 22 17
      src/views/DestinationDelivery/src/components/ConfiguRations/src/components/ConfigurationsTable.vue
  14. 1 1
      src/views/DestinationDelivery/src/components/TableView/src/TableView.vue
  15. 5 1
      src/views/Layout/src/LayoutView.vue
  16. 1 1
      src/views/Layout/src/components/Header/components/NotificationDrawer.vue
  17. 89 89
      src/views/Layout/src/components/Menu/MenuView.vue
  18. 3 19
      src/views/Report/src/ReportView.vue
  19. 1 1
      src/views/Report/src/components/ReportDetail/src/ReportDetail.vue
  20. 1 9
      src/views/Report/src/components/ReportDetail/src/components/FieldsTable.vue
  21. BIN
      src/views/Report/src/components/ReportDetail/src/images/empty-dark.png
  22. 0 0
      src/views/Report/src/components/ReportDetail/src/images/empty-light.png
  23. 1 9
      src/views/Report/src/components/ReportSchedule/src/components/FieldsTable.vue
  24. 2 5
      src/views/Report/src/components/ReportSchedule/src/components/TimeRange.vue
  25. 3 3
      src/views/SystemSettings/src/SystemSettings.vue
  26. 7 7
      src/views/SystemSettings/src/components/MonitoringTable/src/MonitoringTable.vue
  27. 1 1
      src/views/SystemSettings/src/components/SettingTable/src/SettingTable.vue
  28. 54 40
      src/views/TemplateManagement/src/components/TableView/src/TableView.vue
  29. 1 1
      src/views/Tracking/src/components/TrackingDetail/src/components/MapView.vue

+ 4 - 4
src/components/AIRobot/src/AIRobot.vue

@@ -34,10 +34,10 @@ const AvatarMouseLeave = () => {
     AIRobotHoverVisible.value = false
     AIRobotHoverVisible.value = false
   }
   }
 }
 }
-const emit = defineEmits(['AvatarClick', 'handelClickAIDefault','handelclickaiinit'])
+const emit = defineEmits(['AvatarClick', 'handelClickAIDefault', 'handelclickaiinit'])
 // 点击AIRobot图标
 // 点击AIRobot图标
 const AvatarClick = () => {
 const AvatarClick = () => {
-  if(clicked.value == false) {
+  if (clicked.value == false) {
     emit('handelclickaiinit')
     emit('handelclickaiinit')
   }
   }
   clicked.value = true
   clicked.value = true
@@ -126,7 +126,7 @@ const handelClick = (item: any) => {
 }
 }
 
 
 onMounted(() => {
 onMounted(() => {
-  if(localStorage.getItem('userInfo') != null) {
+  if (localStorage.getItem('userInfo') != null) {
     AIIconVisible.value = true
     AIIconVisible.value = true
   }
   }
   emitter.on('login-success', isShowLogin)
   emitter.on('login-success', isShowLogin)
@@ -158,7 +158,7 @@ defineExpose({
       <div class="dialogue_title">Hi! I'm your Freight Assistant, always on call</div>
       <div class="dialogue_title">Hi! I'm your Freight Assistant, always on call</div>
     </div>
     </div>
     <div class="flex_end">
     <div class="flex_end">
-      <div class="dialogue_content"  style="box-shadow: -10px 10px 24px rgba(58, 0, 78, 0.15);">
+      <div class="dialogue_content" style="box-shadow: -10px 10px 24px rgba(58, 0, 78, 0.15)">
         <div class="dialogue_content_title">
         <div class="dialogue_content_title">
           <div class="dialogue_title_left">
           <div class="dialogue_title_left">
             <img src="../image/icon_faq_b@2x.png" width="24px" />
             <img src="../image/icon_faq_b@2x.png" width="24px" />

+ 109 - 130
src/components/CreateAddRules/src/CreateAddRules.vue

@@ -159,7 +159,8 @@ const Initdata = () => {
             FrequencyDataCon.value = res.data.Container_Status_Update
             FrequencyDataCon.value = res.data.Container_Status_Update
             MethodsDataCon.value = res.data.Container_Status_Update
             MethodsDataCon.value = res.data.Container_Status_Update
             ShipmentRangeCon.value = res.data.Container_Status_Update
             ShipmentRangeCon.value = res.data.Container_Status_Update
-            createObj.Transportstr = res.data.Container_Status_Update.shipment_details.split(';\r\n')[0]
+            createObj.Transportstr =
+              res.data.Container_Status_Update.shipment_details.split(';\r\n')[0]
             createObj.Timestr = res.data.Container_Status_Update.shipment_details.split(';\r\n')[1]
             createObj.Timestr = res.data.Container_Status_Update.shipment_details.split(';\r\n')[1]
             createListContainer.value.push(createObj.Transportstr)
             createListContainer.value.push(createObj.Transportstr)
             createListContainer.value.push(createObj.Timestr)
             createListContainer.value.push(createObj.Timestr)
@@ -179,8 +180,10 @@ const Initdata = () => {
             FrequencyDataDep.value = res.data['Departure/Arrival_Delay']
             FrequencyDataDep.value = res.data['Departure/Arrival_Delay']
             MethodsDataDep.value = res.data['Departure/Arrival_Delay']
             MethodsDataDep.value = res.data['Departure/Arrival_Delay']
             ShipmentRangeDep.value = res.data['Departure/Arrival_Delay']
             ShipmentRangeDep.value = res.data['Departure/Arrival_Delay']
-            createObj.Transportstr = res.data['Departure/Arrival_Delay'].shipment_details.split(';\r\n')[0]
-            createObj.Timestr = res.data['Departure/Arrival_Delay'].shipment_details.split(';\r\n')[1]
+            createObj.Transportstr =
+              res.data['Departure/Arrival_Delay'].shipment_details.split(';\r\n')[0]
+            createObj.Timestr =
+              res.data['Departure/Arrival_Delay'].shipment_details.split(';\r\n')[1]
             createListDeparture.value.push(createObj.Transportstr)
             createListDeparture.value.push(createObj.Transportstr)
             createListDeparture.value.push(createObj.Timestr)
             createListDeparture.value.push(createObj.Timestr)
           } else if (editTablerules_type == 'ETD/ETA_Change') {
           } else if (editTablerules_type == 'ETD/ETA_Change') {
@@ -281,7 +284,7 @@ const changecheckCreateRulesMilestone = (val: any, value: any) => {
   savesubscribeobj.shipment_transport_mode = value
   savesubscribeobj.shipment_transport_mode = value
   savesubscribeobj.shipment_details = createListMilestone.value.join(';\n')
   savesubscribeobj.shipment_details = createListMilestone.value.join(';\n')
 }
 }
-const ChangeCheckTimeRulesMilestone = (val: any, time: any, timeend :any) => {
+const ChangeCheckTimeRulesMilestone = (val: any, time: any, timeend: any) => {
   createListMilestone.value = []
   createListMilestone.value = []
   createObj.Timestr = val
   createObj.Timestr = val
   if (val.includes('ETD')) {
   if (val.includes('ETD')) {
@@ -316,7 +319,7 @@ const changecheckCreateRulesContainer = (val: any, value: any) => {
   savesubscribeobj.shipment_transport_mode = value
   savesubscribeobj.shipment_transport_mode = value
   savesubscribeobj.shipment_details = createListContainer.value.join(';\n')
   savesubscribeobj.shipment_details = createListContainer.value.join(';\n')
 }
 }
-const ChangeCheckTimeRulesContainer = (val: any, time: any, timeend :any) => {
+const ChangeCheckTimeRulesContainer = (val: any, time: any, timeend: any) => {
   createListContainer.value = []
   createListContainer.value = []
   createObj.Timestr = val
   createObj.Timestr = val
   if (val.includes('ETD')) {
   if (val.includes('ETD')) {
@@ -351,7 +354,7 @@ const changecheckCreateRulesDeparture = (val: any, value: any) => {
   savesubscribeobj.shipment_transport_mode = value
   savesubscribeobj.shipment_transport_mode = value
   savesubscribeobj.shipment_details = createListDeparture.value.join(';\n')
   savesubscribeobj.shipment_details = createListDeparture.value.join(';\n')
 }
 }
-const ChangeCheckTimeRulesDeparture = (val: any, time: any, timeend :any) => {
+const ChangeCheckTimeRulesDeparture = (val: any, time: any, timeend: any) => {
   createListDeparture.value = []
   createListDeparture.value = []
   createObj.Timestr = val
   createObj.Timestr = val
   if (val.includes('ETD')) {
   if (val.includes('ETD')) {
@@ -386,7 +389,7 @@ const changecheckCreateRulesETDChange = (val: any, value: any) => {
   savesubscribeobj.shipment_transport_mode = value
   savesubscribeobj.shipment_transport_mode = value
   savesubscribeobj.shipment_details = createListETDChange.value.join(';\n')
   savesubscribeobj.shipment_details = createListETDChange.value.join(';\n')
 }
 }
-const ChangeCheckTimeRulesETDChange = (val: any, time: any, timeend :any) => {
+const ChangeCheckTimeRulesETDChange = (val: any, time: any, timeend: any) => {
   createListETDChange.value = []
   createListETDChange.value = []
   createObj.Timestr = val
   createObj.Timestr = val
   if (val.includes('ETD')) {
   if (val.includes('ETD')) {
@@ -578,20 +581,19 @@ const SaveSuceessful = () => {
     })
     })
     .then((res: any) => {
     .then((res: any) => {
       if (res.code === 200) {
       if (res.code === 200) {
-        if(res.data.msg == 'Update Successful') {
+        if (res.data.msg == 'Update Successful') {
           SaveedVisible.value = true
           SaveedVisible.value = true
           setTimeout(() => {
           setTimeout(() => {
             SaveedVisible.value = false
             SaveedVisible.value = false
-            sessionStorage.setItem('activeTab', 'Monitoring Settings')
+            sessionStorage.setItem('activeTab', 'System Settings')
             router.push({
             router.push({
-              path: '/SystemSettings',
+              path: '/system-settings',
               query: {}
               query: {}
             })
             })
           }, 3000)
           }, 3000)
-        } else if(res.data.msg == 'Similar Rule Detected') {
+        } else if (res.data.msg == 'Similar Rule Detected') {
           SaveVisibleDetected.value = true
           SaveVisibleDetected.value = true
-        } else if(res.data.msg == 'Unable to Save')
-        SaveVisibleError.value = true
+        } else if (res.data.msg == 'Unable to Save') SaveVisibleError.value = true
       }
       }
     })
     })
 }
 }
@@ -606,15 +608,15 @@ const HandelSaveVisibleDetected = () => {
     })
     })
     .then((res: any) => {
     .then((res: any) => {
       if (res.code === 200) {
       if (res.code === 200) {
-          SaveedVisible.value = true
-          setTimeout(() => {
-            SaveedVisible.value = false
-            sessionStorage.setItem('activeTab', 'Monitoring Settings')
-            router.push({
-              path: '/SystemSettings',
-              query: {}
-            })
-          }, 3000)
+        SaveedVisible.value = true
+        setTimeout(() => {
+          SaveedVisible.value = false
+          sessionStorage.setItem('activeTab', 'System Settings')
+          router.push({
+            path: '/system-settings',
+            query: {}
+          })
+        }, 3000)
       }
       }
     })
     })
 }
 }
@@ -624,8 +626,7 @@ const Savesubscribe = () => {
   if (props.TitleType == 'Milestone') {
   if (props.TitleType == 'Milestone') {
     savesubscribeobj.rules_type = 'Milestone_Update'
     savesubscribeobj.rules_type = 'Milestone_Update'
     if (
     if (
-      OceanCheckList.value.length == 0 &&
-      AirCheckList.value.length == 0 ||
+      (OceanCheckList.value.length == 0 && AirCheckList.value.length == 0) ||
       MilFrequencyList.value.length == 0 ||
       MilFrequencyList.value.length == 0 ||
       MilMethodsList.value.length == 0 ||
       MilMethodsList.value.length == 0 ||
       createObj.Transportstr == '' ||
       createObj.Transportstr == '' ||
@@ -637,7 +638,7 @@ const Savesubscribe = () => {
       if (createObj.Timestr == '') {
       if (createObj.Timestr == '') {
         missingmessage.value += 'Time, '
         missingmessage.value += 'Time, '
       }
       }
-      if (OceanCheckList.value.length == 0 && AirCheckList.value.length == 0 ) {
+      if (OceanCheckList.value.length == 0 && AirCheckList.value.length == 0) {
         missingmessage.value += 'Select Milestone, '
         missingmessage.value += 'Select Milestone, '
       }
       }
       if (MilFrequencyList.value.length == 0) {
       if (MilFrequencyList.value.length == 0) {
@@ -651,21 +652,17 @@ const Savesubscribe = () => {
     } else {
     } else {
       savesubscribeobj.ocean_milestone = OceanCheckListCode.value
       savesubscribeobj.ocean_milestone = OceanCheckListCode.value
       savesubscribeobj.air_milestone = AirCheckListCode.value
       savesubscribeobj.air_milestone = AirCheckListCode.value
-      if(OceanCheckList.value.length == 0) {
-        str =
-        'Air Milestones: ' +
-        AirCheckList.value.join(',')
-      } else if(AirCheckList.value.length == 0) {
-        str =
-        'Ocean Milestones: ' +
-        OceanCheckList.value.join(',')
+      if (OceanCheckList.value.length == 0) {
+        str = 'Air Milestones: ' + AirCheckList.value.join(',')
+      } else if (AirCheckList.value.length == 0) {
+        str = 'Ocean Milestones: ' + OceanCheckList.value.join(',')
       } else {
       } else {
         str =
         str =
-        'Ocean Milestones: ' +
-        OceanCheckList.value.join(',') +
-        ';\nAir Milestones: ' +
-        AirCheckList.value.join(',') +
-        ';'
+          'Ocean Milestones: ' +
+          OceanCheckList.value.join(',') +
+          ';\nAir Milestones: ' +
+          AirCheckList.value.join(',') +
+          ';'
       }
       }
       savesubscribeobj.event_details = str
       savesubscribeobj.event_details = str
       SaveSuceessful()
       SaveSuceessful()
@@ -704,9 +701,8 @@ const Savesubscribe = () => {
     }
     }
   } else if (props.TitleType == 'Departure') {
   } else if (props.TitleType == 'Departure') {
     savesubscribeobj.rules_type = 'Departure/Arrival_Delay'
     savesubscribeobj.rules_type = 'Departure/Arrival_Delay'
-    if ( 
-      DelayedDeparturedList.value.length == 0 &&
-      DelayedAirdList.value.length == 0 ||
+    if (
+      (DelayedDeparturedList.value.length == 0 && DelayedAirdList.value.length == 0) ||
       DepFrequencyList.value.length == 0 ||
       DepFrequencyList.value.length == 0 ||
       DepMethodsList.value == undefined ||
       DepMethodsList.value == undefined ||
       DepMethodsList.value.length == 0 ||
       DepMethodsList.value.length == 0 ||
@@ -731,21 +727,17 @@ const Savesubscribe = () => {
       missingmessage.value = missingmessage.value.substring(0, missingmessage.value.length - 2)
       missingmessage.value = missingmessage.value.substring(0, missingmessage.value.length - 2)
       UnableSaveVisible.value = true
       UnableSaveVisible.value = true
     } else {
     } else {
-      if(DelayedDeparturedList.value.length == 0) {
-        str =
-        'Air: ' +
-        DelayedAirdList.value.join(',')
-      } else if(DelayedAirdList.value.length == 0) {
-        str =
-        'Ocean: ' +
-        DelayedDeparturedList.value.join(',')
+      if (DelayedDeparturedList.value.length == 0) {
+        str = 'Air: ' + DelayedAirdList.value.join(',')
+      } else if (DelayedAirdList.value.length == 0) {
+        str = 'Ocean: ' + DelayedDeparturedList.value.join(',')
       } else {
       } else {
         str =
         str =
-        'Ocean: ' +
-        DelayedDeparturedList.value.join(',') +
-        ';\nAir: ' +
-        DelayedAirdList.value.join(',') +
-        ';'
+          'Ocean: ' +
+          DelayedDeparturedList.value.join(',') +
+          ';\nAir: ' +
+          DelayedAirdList.value.join(',') +
+          ';'
       }
       }
       savesubscribeobj.event_details = str
       savesubscribeobj.event_details = str
       SaveSuceessful()
       SaveSuceessful()
@@ -753,8 +745,7 @@ const Savesubscribe = () => {
   } else {
   } else {
     savesubscribeobj.rules_type = 'ETD/ETA_Change'
     savesubscribeobj.rules_type = 'ETD/ETA_Change'
     if (
     if (
-      ETDOceanList.value.length == 0 &&
-      ETDAirList.value.length == 0 ||
+      (ETDOceanList.value.length == 0 && ETDAirList.value.length == 0) ||
       ETDFrequencyList.value.length == 0 ||
       ETDFrequencyList.value.length == 0 ||
       ETDMethodsList.value == undefined ||
       ETDMethodsList.value == undefined ||
       ETDMethodsList.value.length == 0 ||
       ETDMethodsList.value.length == 0 ||
@@ -779,21 +770,13 @@ const Savesubscribe = () => {
       missingmessage.value = missingmessage.value.substring(0, missingmessage.value.length - 2)
       missingmessage.value = missingmessage.value.substring(0, missingmessage.value.length - 2)
       UnableSaveVisible.value = true
       UnableSaveVisible.value = true
     } else {
     } else {
-      if(ETDOceanList.value.length == 0) {
-        str =
-        '[Air]' +
-        ETDAirList.value.join(',')
-      } else if(ETDAirList.value.length == 0) {
-        str =
-        '[Ocean]' +
-        ETDOceanList.value.join(',')
+      if (ETDOceanList.value.length == 0) {
+        str = '[Air]' + ETDAirList.value.join(',')
+      } else if (ETDAirList.value.length == 0) {
+        str = '[Ocean]' + ETDOceanList.value.join(',')
       } else {
       } else {
         str =
         str =
-        '[Ocean]' +
-        ETDOceanList.value.join(',') +
-        ';\n[Air]' +
-        ETDAirList.value.join(',') +
-        ';'
+          '[Ocean]' + ETDOceanList.value.join(',') + ';\n[Air]' + ETDAirList.value.join(',') + ';'
       }
       }
       savesubscribeobj.event_details = str
       savesubscribeobj.event_details = str
       SaveSuceessful()
       SaveSuceessful()
@@ -836,14 +819,14 @@ const clearData = (val: any) => {
 const MilOceanref = ref()
 const MilOceanref = ref()
 const MilAirref = ref()
 const MilAirref = ref()
 const ContainerOcean = ref()
 const ContainerOcean = ref()
-const handleCloseMilestoneOcean = (val:any) => {
+const handleCloseMilestoneOcean = (val: any) => {
   MilOceanref.value.hadleclose(val)
   MilOceanref.value.hadleclose(val)
 }
 }
-const handleCloseMilestoneAir = (val:any) => {
+const handleCloseMilestoneAir = (val: any) => {
   MilAirref.value.hadleclose(val)
   MilAirref.value.hadleclose(val)
 }
 }
 
 
-const handleCloseContainer = (val:any) => {
+const handleCloseContainer = (val: any) => {
   ContainerOcean.value.hadleclose(val)
   ContainerOcean.value.hadleclose(val)
 }
 }
 
 
@@ -1269,68 +1252,64 @@ defineExpose({
   </el-dialog>
   </el-dialog>
   <!-- 保存成功 -->
   <!-- 保存成功 -->
   <el-dialog v-model="SaveedVisible" width="320" style="height: 212px">
   <el-dialog v-model="SaveedVisible" width="320" style="height: 212px">
-    <div style="text-align: center"><el-image :src="submitsucessful" style="width: 64px;" /></div>
+    <div style="text-align: center"><el-image :src="submitsucessful" style="width: 64px" /></div>
     <div style="text-align: center; margin-top: 20px">Saved successfully</div>
     <div style="text-align: center; margin-top: 20px">Saved successfully</div>
   </el-dialog>
   </el-dialog>
   <!-- 保存失败 -->
   <!-- 保存失败 -->
   <el-dialog v-model="SaveVisibleError" width="480">
   <el-dialog v-model="SaveVisibleError" width="480">
-      <div>Duplicate Rule Error.</div>
-      <div>This rule exactly matches an existing rule.</div>
-      <template #footer>
-        <div class="dialog-footer">
-          <el-button
-            class="el-button--danger"
-            @click="SaveVisibleError = false"
-            style="width: 100px"
-          >
-            OK
-          </el-button>
-        </div>
-      </template>
-      <template #header>
-        <div class="cancel_header">
-          <span class="iconfont_icon iconfont_warning">
-            <svg class="iconfont icon_danger" aria-hidden="true">
-              <use xlink:href="#icon-icon_fail_fill_b"></use>
-            </svg>
-          </span>
-          Unable to Save
-        </div>
-      </template>
-    </el-dialog>
-    <!-- 三项重合提示 -->
+    <div>Duplicate Rule Error.</div>
+    <div>This rule exactly matches an existing rule.</div>
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button class="el-button--danger" @click="SaveVisibleError = false" style="width: 100px">
+          OK
+        </el-button>
+      </div>
+    </template>
+    <template #header>
+      <div class="cancel_header">
+        <span class="iconfont_icon iconfont_warning">
+          <svg class="iconfont icon_danger" aria-hidden="true">
+            <use xlink:href="#icon-icon_fail_fill_b"></use>
+          </svg>
+        </span>
+        Unable to Save
+      </div>
+    </template>
+  </el-dialog>
+  <!-- 三项重合提示 -->
   <el-dialog v-model="SaveVisibleDetected" width="480">
   <el-dialog v-model="SaveVisibleDetected" width="480">
-      <div>A similar configuration rule already exists.</div>
-      <div>Would you like to proceed with creating this rule?</div>
-      <template #footer>
-        <div class="dialog-footer">
-          <el-button
-            class="el-button--default"
-            @click="SaveVisibleDetected = false"
-            style="width: 100px"
-          >
-            Cancel
-          </el-button>
-          <el-button
-            class="el-button--warning"
-            @click="HandelSaveVisibleDetected"
-            style="width: 100px"
-          >
-            Save
-          </el-button>
-        </div>
-      </template>
-      <template #header>
-        <div class="cancel_header">
-          <span class="iconfont_icon iconfont_warning">
-            <svg class="iconfont icon_warning" aria-hidden="true">
-              <use xlink:href="#icon-icon_tipsfilled_b"></use>
-            </svg>
-          </span>
-          Similar Rule Detected
-        </div>
-      </template>
-    </el-dialog>
+    <div>A similar configuration rule already exists.</div>
+    <div>Would you like to proceed with creating this rule?</div>
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button
+          class="el-button--default"
+          @click="SaveVisibleDetected = false"
+          style="width: 100px"
+        >
+          Cancel
+        </el-button>
+        <el-button
+          class="el-button--warning"
+          @click="HandelSaveVisibleDetected"
+          style="width: 100px"
+        >
+          Save
+        </el-button>
+      </div>
+    </template>
+    <template #header>
+      <div class="cancel_header">
+        <span class="iconfont_icon iconfont_warning">
+          <svg class="iconfont icon_warning" aria-hidden="true">
+            <use xlink:href="#icon-icon_tipsfilled_b"></use>
+          </svg>
+        </span>
+        Similar Rule Detected
+      </div>
+    </template>
+  </el-dialog>
 </template>
 </template>
 
 
 <style lang="scss" scoped>
 <style lang="scss" scoped>
@@ -1462,4 +1441,4 @@ defineExpose({
 :deep(.el-collapse) {
 :deep(.el-collapse) {
   margin-right: 8px;
   margin-right: 8px;
 }
 }
-</style>
+</style>

+ 35 - 0
src/components/TableImgEmpty/TableImgEmpty.vue

@@ -0,0 +1,35 @@
+<script setup lang="ts">
+import { computed } from 'vue'
+import lightPng from './image/empty-light.png'
+import darkPng from './image/empty-dark.png'
+import { useThemeStore } from '@/stores/modules/theme'
+
+const themeStore = useThemeStore()
+// 判断当前系统主题模式
+const emptyImg = computed(() => {
+  return themeStore.theme === 'dark' ? darkPng : lightPng
+})
+
+const props = defineProps({
+  EmptyTitle: String
+})
+</script>
+
+<template>
+  <div class="table-img-empty">
+    <img :src="emptyImg" />
+    <div class="empty-text">No data</div>
+  </div>
+</template>
+
+<style lang="scss" scoped>
+.table-img-empty {
+  .empty-text {
+    margin: 8px 0;
+    color: var(--color-neutral-2);
+    text-align: center;
+    font-size: 14px;
+    font-weight: 700;
+  }
+}
+</style>

+ 0 - 0
src/views/Report/src/images/empty-dark.png → src/components/TableImgEmpty/image/empty-dark.png


+ 0 - 0
src/views/Report/src/images/empty-light.png → src/components/TableImgEmpty/image/empty-light.png


+ 0 - 0
src/components/TableImgEmpty/index.ts


+ 42 - 42
src/components/VBreadcrumb/src/VBreadcrumb.vue

@@ -17,31 +17,31 @@ const handleGoBack = () => {
 }
 }
 let monitoringQuery = ref()
 let monitoringQuery = ref()
 const jumpLink = (label: string, query: any) => {
 const jumpLink = (label: string, query: any) => {
-    if(label == 'Monitoring Settings') {
-      CancelRulesVisible.value = true
-      monitoringQuery.value = query
-    } else if(label == 'Destination Delivery') {
-      router.push({
-        name: 'Destination Delivery',
-        query: query
-      })
-    } else if (label == 'Configurations'){
-      router.push({
-        name: 'Configurations',
-        query: query
-      })
-    }else {
-      label &&
+  if (label == 'System Settings') {
+    CancelRulesVisible.value = true
+    monitoringQuery.value = query
+  } else if (label == 'Destination Delivery') {
+    router.push({
+      name: 'Destination Delivery',
+      query: query
+    })
+  } else if (label == 'Configurations') {
+    router.push({
+      name: 'Configurations',
+      query: query
+    })
+  } else {
+    label &&
       router.push({
       router.push({
         name: label,
         name: label,
         query: query
         query: query
       })
       })
-    }
+  }
 }
 }
 const jumpLinkMonitoring = () => {
 const jumpLinkMonitoring = () => {
   CancelRulesVisible.value = false
   CancelRulesVisible.value = false
   router.push({
   router.push({
-    name: 'Monitoring Settings',
+    name: 'System Settings',
     query: monitoringQuery.value
     query: monitoringQuery.value
   })
   })
 }
 }
@@ -65,31 +65,31 @@ const jumpLinkMonitoring = () => {
     </template>
     </template>
   </div>
   </div>
   <div v-else></div>
   <div v-else></div>
-    <!-- 取消保存 -->
-    <el-dialog v-model="CancelRulesVisible" width="480">
-      <div style="font-weight: 400">You have unsaved changes.</div>
-      <div style="font-weight: 400">Are you sure you want to leave this page?</div>
-      <template #footer>
-        <div class="dialog-footer">
-          <el-button type="default" @click="CancelRulesVisible = false" style="width: 100px"
-            >Cancel</el-button
-          >
-          <el-button class="el-button--warning" @click="jumpLinkMonitoring" style="width: 100px">
-            OK
-          </el-button>
-        </div>
-      </template>
-      <template #header>
-        <div class="cancel_header">
-          <span class="iconfont_icon iconfont_warning">
-            <svg class="iconfont icon_warning" aria-hidden="true">
-              <use xlink:href="#icon-icon_tipsfilled_b"></use>
-            </svg>
-          </span>
-          Unsaved Changes
-        </div>
-      </template>
-    </el-dialog>
+  <!-- 取消保存 -->
+  <el-dialog v-model="CancelRulesVisible" width="480">
+    <div style="font-weight: 400">You have unsaved changes.</div>
+    <div style="font-weight: 400">Are you sure you want to leave this page?</div>
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button type="default" @click="CancelRulesVisible = false" style="width: 100px"
+          >Cancel</el-button
+        >
+        <el-button class="el-button--warning" @click="jumpLinkMonitoring" style="width: 100px">
+          OK
+        </el-button>
+      </div>
+    </template>
+    <template #header>
+      <div class="cancel_header">
+        <span class="iconfont_icon iconfont_warning">
+          <svg class="iconfont icon_warning" aria-hidden="true">
+            <use xlink:href="#icon-icon_tipsfilled_b"></use>
+          </svg>
+        </span>
+        Unsaved Changes
+      </div>
+    </template>
+  </el-dialog>
 </template>
 </template>
 
 
 <style lang="scss" scoped>
 <style lang="scss" scoped>

+ 37 - 22
src/router/index.ts

@@ -28,18 +28,20 @@ const router = createRouter({
         },
         },
         {
         {
           path: '/report/detail',
           path: '/report/detail',
-          name: 'ReportDetail',
+          name: 'Report Detail',
           component: () => import('../views/Report/src/components/ReportDetail'),
           component: () => import('../views/Report/src/components/ReportDetail'),
           meta: {
           meta: {
-            activeMenu: '/report'
+            activeMenu: '/report',
+            breadName: 'Detail'
           }
           }
         },
         },
         {
         {
           path: '/report/schedule',
           path: '/report/schedule',
-          name: 'ReportSchedule',
+          name: 'Report Schedule',
           component: () => import('../views/Report/src/components/ReportSchedule'),
           component: () => import('../views/Report/src/components/ReportSchedule'),
           meta: {
           meta: {
-            activeMenu: '/report'
+            activeMenu: '/report',
+            breadName: 'Schedule Configuration'
           }
           }
         },
         },
         {
         {
@@ -63,6 +65,14 @@ const router = createRouter({
             activeMenu: '/tracking'
             activeMenu: '/tracking'
           }
           }
         },
         },
+        {
+          path: '/tracking/download-attachment',
+          name: 'Tracking Download Attachment',
+          component: () => import('../views/Tracking/src/components/DownloadAttachment'),
+          meta: {
+            activeMenu: '/tracking'
+          }
+        },
         {
         {
           path: '/shipment/detail',
           path: '/shipment/detail',
           name: 'Shipment Detail',
           name: 'Shipment Detail',
@@ -113,8 +123,8 @@ const router = createRouter({
           component: () => import('../views/Login/src/components/ChangePasswordCard.vue')
           component: () => import('../views/Login/src/components/ChangePasswordCard.vue')
         },
         },
         {
         {
-          path: '/Operationlog',
-          name: 'Operationlog',
+          path: '/operation-log',
+          name: 'Operation log',
           component: () => import('../views/OperationLog')
           component: () => import('../views/OperationLog')
         },
         },
         {
         {
@@ -128,8 +138,8 @@ const router = createRouter({
           component: () => import('../views/AIApiLog')
           component: () => import('../views/AIApiLog')
         },
         },
         {
         {
-          path: '/PromptConfiguration',
-          name: 'PromptConfiguration',
+          path: '/prompt-configuration',
+          name: 'Prompt Configuration',
           component: () => import('../views/PromptConfiguration')
           component: () => import('../views/PromptConfiguration')
         },
         },
         {
         {
@@ -160,21 +170,16 @@ const router = createRouter({
           component: () => import('../views/SystemMessage/src/components/SystemMessageDetail.vue')
           component: () => import('../views/SystemMessage/src/components/SystemMessageDetail.vue')
         },
         },
         {
         {
-          path: '/SystemSettings',
-          name: 'Monitoring Settings',
-          component: () => import('../views/SystemSettings')
-        },
-        {
-          path: '/SystemSettings',
+          path: '/system-settings',
           name: 'System Settings',
           name: 'System Settings',
           component: () => import('../views/SystemSettings')
           component: () => import('../views/SystemSettings')
         },
         },
         {
         {
-          path: '/SystemSettings/createnewrule',
+          path: '/system-settings/create-new-rule',
           name: 'Create New Rule',
           name: 'Create New Rule',
           component: () => import('../views/SystemSettings/src/components/CreateNewrule'),
           component: () => import('../views/SystemSettings/src/components/CreateNewrule'),
           meta: {
           meta: {
-            activeMenu: '/SystemSettings'
+            activeMenu: '/system-settings'
           }
           }
         },
         },
         {
         {
@@ -183,22 +188,28 @@ const router = createRouter({
           component: () => import('../views/DestinationDelivery')
           component: () => import('../views/DestinationDelivery')
         },
         },
         {
         {
-          path: '/destination-delivery/CreateNewBooking',
+          path: '/destination-delivery/create-new-booking',
           name: 'Create New Booking',
           name: 'Create New Booking',
           component: () => import('../views/DestinationDelivery/src/components/CreateNewBooking')
           component: () => import('../views/DestinationDelivery/src/components/CreateNewBooking')
         },
         },
         {
         {
-          path: '/destination-delivery/ConfiguRations',
+          path: '/destination-delivery/configurations',
           name: 'Configurations',
           name: 'Configurations',
-          component: () => import('../views/DestinationDelivery/src/components/ConfiguRations')
+          component: () => import('../views/DestinationDelivery/src/components/ConfiguRations'),
+          meta: {
+            activeMenu: '/destination-delivery'
+          }
         },
         },
         {
         {
-          path: '/destination-delivery/ConfiguRations/CreateNewRule',
+          path: '/destination-delivery/configurations/create-new-rule',
           name: 'Destination Create New Rule',
           name: 'Destination Create New Rule',
           component: () =>
           component: () =>
             import(
             import(
               '../views/DestinationDelivery/src/components/ConfiguRations/src/components/CreateNewRule.vue'
               '../views/DestinationDelivery/src/components/ConfiguRations/src/components/CreateNewRule.vue'
-            )
+            ),
+          meta: {
+            activeMenu: '/destination-delivery'
+          }
         },
         },
         {
         {
           path: '/destination-delivery/modify-booking',
           path: '/destination-delivery/modify-booking',
@@ -208,7 +219,11 @@ const router = createRouter({
             breadName: 'Modify Booking',
             breadName: 'Modify Booking',
             activeMenu: '/destination-delivery'
             activeMenu: '/destination-delivery'
           }
           }
-        }
+        }, {
+          path: '/demo-video',
+          name: 'Demo Video',
+          component: () => import('../views/Video'),
+        },
       ]
       ]
     }
     }
   ]
   ]

+ 15 - 97
src/stores/modules/breadCrumb.ts

@@ -20,7 +20,13 @@ const whiteList = [
   'Configurations',
   'Configurations',
   'Create New Booking',
   'Create New Booking',
   'Destination Create New Rule',
   'Destination Create New Rule',
-  "Create Report Template",
+  'Create Report Template',
+  'Report Schedule',
+  'Report Detail',
+  'Modify Booking',
+  'System Message Detail',
+  'Public Tracking Detail',
+  'Configurations'
 ]
 ]
 
 
 export const useBreadCrumb = defineStore('breadCrumb', {
 export const useBreadCrumb = defineStore('breadCrumb', {
@@ -31,75 +37,12 @@ export const useBreadCrumb = defineStore('breadCrumb', {
   actions: {
   actions: {
     setRouteList(toRoute: any) {
     setRouteList(toRoute: any) {
       const index = this.routeList.findIndex((item) => item.label === toRoute.name)
       const index = this.routeList.findIndex((item) => item.label === toRoute.name)
+      // 返回之前的路由时,删除之后的所有路由
       if (index !== -1) {
       if (index !== -1) {
         this.routeList.splice(index + 1)
         this.routeList.splice(index + 1)
-        if (toRoute.name === 'Configurations') {
-          this.routeList = [
-            {
-              label: 'Destination Delivery',
-              path: '/destination-delivery',
-              query: ''
-            },
-            {
-              label: 'Configurations',
-              path: '/destination-delivery/ConfiguRations',
-              query: toRoute.query
-            }
-          ]
-        }
-      } else if (toRoute.name === 'Public Tracking Detail') {
-        this.routeList = [
-          {
-            label: 'Public Tracking',
-            path: '/public-tracking',
-            query: ''
-          },
-          {
-            label: 'Public Tracking Detail',
-            path: '/public-tracking/detail',
-            query: toRoute.query
-          }
-        ]
-      } else if (toRoute.name === 'System Message Detail') {
-        this.routeList = [
-          {
-            label: 'System Message',
-            path: '/system-message',
-            query: ''
-          },
-          {
-            label: 'System Message Detail',
-            path: '/system-message/detail',
-            query: toRoute.query
-          }
-        ]
-      } else if (toRoute.name === 'Shipment Detail') {
-        this.routeList = [
-          {
-            label: 'System Settings',
-            path: '/SystemSettings',
-            query: ''
-          },
-          {
-            label: 'Shipment Detail',
-            path: '/shipment/detail',
-            query: toRoute.query
-          }
-        ]
-      } else if (toRoute.name === 'Modify Booking') {
-        this.routeList = [
-          {
-            label: 'Destination Delivery',
-            path: '/destination-delivery',
-            query: ''
-          },
-          {
-            label: 'Modify Booking',
-            path: '/destination-delivery/modify-booking',
-            query: toRoute.query
-          }
-        ]
-      } else if (toRoute.name === 'Destination Create New Rule') {
+        return
+      }
+      if (toRoute.name === 'Destination Create New Rule') {
         let label = ''
         let label = ''
         if (toRoute.query.a != undefined) {
         if (toRoute.query.a != undefined) {
           label = 'Modify Rule'
           label = 'Modify Rule'
@@ -114,12 +57,12 @@ export const useBreadCrumb = defineStore('breadCrumb', {
           },
           },
           {
           {
             label: 'Configurations',
             label: 'Configurations',
-            path: '/destination-delivery/ConfiguRations',
+            path: '/destination-delivery/configurations',
             query: ''
             query: ''
           },
           },
           {
           {
             label: label,
             label: label,
-            path: '/destination-delivery/CreateNewRule',
+            path: '/destination-delivery/create-new-rule',
             query: toRoute.query
             query: toRoute.query
           }
           }
         ]
         ]
@@ -138,36 +81,11 @@ export const useBreadCrumb = defineStore('breadCrumb', {
           },
           },
           {
           {
             label: label,
             label: label,
-            path: '/destination-delivery/CreateNewBooking',
-            query: toRoute.query
-          }
-        ]
-      } else if (toRoute.name === 'ReportDetail') {
-        this.routeList = [
-          {
-            label: 'Report Management',
-            path: '/report',
-            query: ''
-          },
-          {
-            label: 'Details',
-            path: '/report/detail',
-            query: toRoute.query
-          }
-        ]
-      } else if (toRoute.name === 'ReportSchedule') {
-        this.routeList = [
-          {
-            label: 'Report Management',
-            path: '/report',
-            query: ''
-          },
-          {
-            label: 'Schedule Configuration',
-            path: '/report/detail',
+            path: '/destination-delivery/create-new-booking',
             query: toRoute.query
             query: toRoute.query
           }
           }
         ]
         ]
+
       } else if (toRoute.name && whiteList.includes(toRoute.name)) {
       } else if (toRoute.name && whiteList.includes(toRoute.name)) {
         this.routeList.push({
         this.routeList.push({
           label: toRoute?.meta?.breadName || toRoute.name,
           label: toRoute?.meta?.breadName || toRoute.name,

+ 1 - 2
src/views/AIRobotChat/src/AIRobotChat.vue

@@ -335,7 +335,7 @@ const handleLiabilityExeDialog = () => {
 }
 }
 
 
 const handelclckaiinit = () => {
 const handelclckaiinit = () => {
-  AIQuestion.value.AIRobotInit() 
+  AIQuestion.value.AIRobotInit()
 }
 }
 
 
 defineExpose({
 defineExpose({
@@ -344,7 +344,6 @@ defineExpose({
   clearData,
   clearData,
   handelclckaiinit
   handelclckaiinit
 })
 })
-
 </script>
 </script>
 
 
 <template>
 <template>

+ 1 - 1
src/views/Dashboard/src/components/TopMap.vue

@@ -22,7 +22,7 @@ const init = () => {
   }
   }
   map = L.map('map', { attributionControl: false }).setView([51.505, -0.09], 3)
   map = L.map('map', { attributionControl: false }).setView([51.505, -0.09], 3)
 
 
-  L.tileLayer('https://map.kerryapex.com/osm_tiles/{z}/{x}/{y}.png', {
+  L.tileLayer('https://map.k-apex.kln.com/osm_tiles/{z}/{x}/{y}.png', {
     attribution:
     attribution:
       '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
       '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
   }).addTo(map)
   }).addTo(map)

+ 10 - 5
src/views/DestinationDelivery/src/components/ConfiguRations/src/ConfiguRations.vue

@@ -4,7 +4,7 @@ import { useCalculatingHeight } from '@/hooks/calculatingHeight'
 import { useRouter } from 'vue-router'
 import { useRouter } from 'vue-router'
 
 
 const filterRef: Ref<HTMLElement | null> = ref(null)
 const filterRef: Ref<HTMLElement | null> = ref(null)
-  const router = useRouter()
+const router = useRouter()
 
 
 const AddRulesTableColumns = ref([
 const AddRulesTableColumns = ref([
   {
   {
@@ -20,7 +20,8 @@ const AddRulesTableColumns = ref([
     type: 'normal',
     type: 'normal',
     width: '20%',
     width: '20%',
     formatter: ''
     formatter: ''
-  },{
+  },
+  {
     field: 'booking_window_desc',
     field: 'booking_window_desc',
     title: 'Booking Window',
     title: 'Booking Window',
     type: 'normal',
     type: 'normal',
@@ -43,7 +44,7 @@ const gettabledatalength = (val: any) => {
 // 跳转Create New Rule页面
 // 跳转Create New Rule页面
 const ToCreateRule = () => {
 const ToCreateRule = () => {
   router.push({
   router.push({
-    path: '/destination-delivery/ConfiguRations/CreateNewRule',
+    path: '/destination-delivery/Configurations/create-new-rule',
     query: {}
     query: {}
   })
   })
 }
 }
@@ -63,7 +64,11 @@ const ToCreateRule = () => {
           >+ Add Rule</el-button
           >+ Add Rule</el-button
         >
         >
       </div>
       </div>
-      <ConfigurationsTable :height="containerHeight" :ColumnsList="AddRulesTableColumns" @gettabledatalength="gettabledatalength"></ConfigurationsTable>
+      <ConfigurationsTable
+        :height="containerHeight"
+        :ColumnsList="AddRulesTableColumns"
+        @gettabledatalength="gettabledatalength"
+      ></ConfigurationsTable>
     </div>
     </div>
   </div>
   </div>
 </template>
 </template>
@@ -92,4 +97,4 @@ const ToCreateRule = () => {
   padding-right: 24px;
   padding-right: 24px;
   align-items: end;
   align-items: end;
 }
 }
-</style>
+</style>

+ 22 - 17
src/views/DestinationDelivery/src/components/ConfiguRations/src/components/ConfigurationsTable.vue

@@ -101,27 +101,29 @@ const handleDelete = (row: any) => {
 const deleteMoniTable = (row: any) => {
 const deleteMoniTable = (row: any) => {
   row.visible = false
   row.visible = false
   $api
   $api
-  .deleteConfigurationList({
-    a: row._serial_no
-  })
-  .then((res: any) => {
-    if (res.code === 200) {
-      tableData.value.data = tableData.value.data?.filter((item) => item._serial_no !== row._serial_no)
-      emits('gettabledatalength', tableData.value.data?.length)
-    }
-  })
+    .deleteConfigurationList({
+      a: row._serial_no
+    })
+    .then((res: any) => {
+      if (res.code === 200) {
+        tableData.value.data = tableData.value.data?.filter(
+          (item) => item._serial_no !== row._serial_no
+        )
+        emits('gettabledatalength', tableData.value.data?.length)
+      }
+    })
 }
 }
 
 
 // 编辑表格数据
 // 编辑表格数据
 const handleEdit = (row: any) => {
 const handleEdit = (row: any) => {
   router.push({
   router.push({
-    path: '/destination-delivery/ConfiguRations/CreateNewRule',
-    query: {a: row._serial_no}
+    path: '/destination-delivery/configurations/create-new-rule',
+    query: { a: row._serial_no }
   })
   })
 }
 }
 // 添加新规则
 // 添加新规则
 const clickAddNewRule = () => {
 const clickAddNewRule = () => {
-  router.push('/destination-delivery/ConfiguRations/CreateNewRule')
+  router.push('/destination-delivery/configurations/create-new-rule')
 }
 }
 
 
 onMounted(() => {
 onMounted(() => {
@@ -134,7 +136,7 @@ onMounted(() => {
   <div class="SettingTable">
   <div class="SettingTable">
     <vxe-grid
     <vxe-grid
       ref="tableRef"
       ref="tableRef"
-      :style="{ border: 'none'}"
+      :style="{ border: 'none' }"
       v-bind="tableData"
       v-bind="tableData"
       :height="props.height"
       :height="props.height"
       @cell-dblclick="({ row }) => handleEdit(row)"
       @cell-dblclick="({ row }) => handleEdit(row)"
@@ -146,14 +148,17 @@ onMounted(() => {
           <div class="empty-text">
           <div class="empty-text">
             Configure available destination delivery regions and time slots.
             Configure available destination delivery regions and time slots.
           </div>
           </div>
-          <el-button class="el-button--main" style="width: 117px; height: 40px;" @click="clickAddNewRule">+ Add Rule</el-button>
+          <el-button
+            class="el-button--main"
+            style="width: 117px; height: 40px"
+            @click="clickAddNewRule"
+            >+ Add Rule</el-button
+          >
         </div>
         </div>
       </template>
       </template>
       <!-- Tracking No字段的插槽 -->
       <!-- Tracking No字段的插槽 -->
       <template #countryNo="{ row, column }">
       <template #countryNo="{ row, column }">
-        <span
-          style="color: var(--color-theme)"
-        >
+        <span style="color: var(--color-theme)">
           {{ row[column.field] }}
           {{ row[column.field] }}
         </span>
         </span>
       </template>
       </template>

+ 1 - 1
src/views/DestinationDelivery/src/components/TableView/src/TableView.vue

@@ -301,7 +301,7 @@ const clickEmailBtn = (row: any) => {
 // edit
 // edit
 const handleEdit = (row: any) => {
 const handleEdit = (row: any) => {
   router.push({
   router.push({
-    path: '/destination-delivery/CreateNewBooking',
+    path: '/destination-delivery/create-new-booking',
     query: { a: row._serial_no }
     query: { a: row._serial_no }
   })
   })
 }
 }

+ 5 - 1
src/views/Layout/src/LayoutView.vue

@@ -91,7 +91,11 @@ onMounted(() => {
         <router-view />
         <router-view />
       </el-main>
       </el-main>
     </el-container>
     </el-container>
-    <AIRobot @AvatarClick="AvatarClick" @handelClickAIDefault="handelClickAIDefault" @handelclickaiinit=handelclickaiinit></AIRobot>
+    <AIRobot
+      @AvatarClick="AvatarClick"
+      @handelClickAIDefault="handelClickAIDefault"
+      @handelclickaiinit="handelclickaiinit"
+    ></AIRobot>
     <AIRobotChat
     <AIRobotChat
       ref="AIRobotChatref"
       ref="AIRobotChatref"
       v-show="isShowAIRobotChat"
       v-show="isShowAIRobotChat"

+ 1 - 1
src/views/Layout/src/components/Header/components/NotificationDrawer.vue

@@ -72,7 +72,7 @@ const handleViewAll = () => {
 const handleSettingMessage = () => {
 const handleSettingMessage = () => {
   drawerRef.value.handleClose()
   drawerRef.value.handleClose()
   router.push({
   router.push({
-    name: 'Monitoring Settings',
+    name: 'System Settings',
     query: {
     query: {
       tab: 'Subscribe Notifications'
       tab: 'Subscribe Notifications'
     }
     }

+ 89 - 89
src/views/Layout/src/components/Menu/MenuView.vue

@@ -11,99 +11,99 @@ const userStore = useUserStore()
 const isCollapse = defineModel<boolean>()
 const isCollapse = defineModel<boolean>()
 
 
 const menuList = ref()
 const menuList = ref()
-// watch(
-//   () => userStore.userInfo?.uname,
-//   () => {
-//     getMenuList()
-//   }
-// )
+watch(
+  () => userStore.userInfo?.uname,
+  () => {
+    getMenuList()
+  }
+)
 const getMenuList = () => {
 const getMenuList = () => {
   $api.getMenuList().then((res) => {
   $api.getMenuList().then((res) => {
     if (res.code === 200) {
     if (res.code === 200) {
       menuList.value = res.data
       menuList.value = res.data
     }
     }
   })
   })
-  // menuList.value = [
-  //   {
-  //     index: '1',
-  //     label: 'Dashboard',
-  //     icon: 'icon_data_fill_b',
-  //     path: '/dashboard'
-  //   },
-  //   {
-  //     index: '2',
-  //     label: 'Booking',
-  //     icon: 'icon_booking__fill_b',
-  //     type: 'list',
-  //     children: [
-  //       {
-  //         index: '2-1',
-  //         label: 'Booking Management',
-  //         path: '/booking'
-  //       },
-  //       {
-  //         index: '2-2',
-  //         label: 'Destination Delivery',
-  //         path: '/destination-delivery'
-  //       }
-  //     ]
-  //   },
-  //   {
-  //     index: '3',
-  //     label: 'Tracking',
-  //     icon: 'icon_tracking__fill_b',
-  //     path: '/tracking'
-  //   },
-  //   {
-  //     index: '4',
-  //     label: 'Report',
-  //     icon: 'icon_report__fill_b',
-  //     path: '/report'
-  //   },
-  //   {
-  //     index: '5',
-  //     label: 'System Management',
-  //     icon: 'icon_system__management_fill_b',
-  //     type: 'list',
-  //     children: [
-  //       {
-  //         index: '5-7',
-  //         label: 'Template Management',
-  //         path: '/template-management'
-  //       },
-  //       {
-  //         index: '5-1',
-  //         label: 'System Message',
-  //         path: '/system-message'
-  //       },
-  //       {
-  //         index: '5-2',
-  //         label: 'System Settings',
-  //         path: '/SystemSettings'
-  //       },
-  //       {
-  //         index: '5-3',
-  //         label: 'Chat Log',
-  //         path: '/chat-log'
-  //       },
-  //       {
-  //         index: '5-4',
-  //         label: 'AI API Log',
-  //         path: '/ai-api-log'
-  //       },
-  //       {
-  //         index: '5-5',
-  //         label: 'Operation Log',
-  //         path: '/Operationlog'
-  //       },
-  //       {
-  //         index: '5-6',
-  //         label: 'Prompt Configuration',
-  //         path: '/PromptConfiguration'
-  //       }
-  //     ]
-  //   }
-  // ]
+  menuList.value = [
+    {
+      index: '1',
+      label: 'Dashboard',
+      icon: 'icon_data_fill_b',
+      path: '/dashboard'
+    },
+    {
+      index: '2',
+      label: 'Booking',
+      icon: 'icon_booking__fill_b',
+      type: 'list',
+      children: [
+        {
+          index: '2-1',
+          label: 'Booking Management',
+          path: '/booking'
+        },
+        {
+          index: '2-2',
+          label: 'Destination Delivery',
+          path: '/destination-delivery'
+        }
+      ]
+    },
+    {
+      index: '3',
+      label: 'Tracking',
+      icon: 'icon_tracking__fill_b',
+      path: '/tracking'
+    },
+    {
+      index: '4',
+      label: 'Report',
+      icon: 'icon_report__fill_b',
+      path: '/report'
+    },
+    {
+      index: '5',
+      label: 'System Management',
+      icon: 'icon_system__management_fill_b',
+      type: 'list',
+      children: [
+        {
+          index: '5-7',
+          label: 'Template Management',
+          path: '/template-management'
+        },
+        {
+          index: '5-1',
+          label: 'System Message',
+          path: '/system-message'
+        },
+        {
+          index: '5-2',
+          label: 'System Settings',
+          path: '/system-settings'
+        },
+        {
+          index: '5-3',
+          label: 'Chat Log',
+          path: '/chat-log'
+        },
+        {
+          index: '5-4',
+          label: 'AI API Log',
+          path: '/ai-api-log'
+        },
+        {
+          index: '5-5',
+          label: 'Operation Log',
+          path: '/operation-log'
+        },
+        {
+          index: '5-6',
+          label: 'Prompt Configuration',
+          path: '/prompt-configuration'
+        }
+      ]
+    }
+  ]
 }
 }
 getMenuList()
 getMenuList()
 //监听窗口大小
 //监听窗口大小
@@ -163,8 +163,8 @@ const changeRouter = (path: any) => {
     localStorage.removeItem('loginAI')
     localStorage.removeItem('loginAI')
     emitter.emit('login-success')
     emitter.emit('login-success')
   }
   }
-  if (path == '/PromptConfiguration' || path == '/report') {
-    emitter.emit('checkPrompt')
+  if (path == '/prompt-configuration' || path == '/report') {
+    // emitter.emit('checkPrompt')
   } else {
   } else {
     if (localStorage.getItem('loginAI')) {
     if (localStorage.getItem('loginAI')) {
       localStorage.removeItem('loginAI')
       localStorage.removeItem('loginAI')

+ 3 - 19
src/views/Report/src/ReportView.vue

@@ -5,12 +5,8 @@ import { useRowClickStyle } from '@/hooks/rowClickStyle'
 import { formatNumber } from '@/utils/tools'
 import { formatNumber } from '@/utils/tools'
 import { useRouter } from 'vue-router'
 import { useRouter } from 'vue-router'
 import { useCalculatingHeight } from '@/hooks/calculatingHeight'
 import { useCalculatingHeight } from '@/hooks/calculatingHeight'
-import emptyImgLight from './images/empty-light.png'
-import emptyImgDark from './images/empty-dark.png'
-import { useThemeStore } from '@/stores/modules/theme'
 
 
 const router = useRouter()
 const router = useRouter()
-const themeStore = useThemeStore()
 
 
 const textSearch = ref('')
 const textSearch = ref('')
 // search report name
 // search report name
@@ -18,10 +14,6 @@ const SearchInput = () => {
   getTableData()
   getTableData()
 }
 }
 
 
-const emptyImg = computed(() => {
-  return themeStore.theme === 'dark' ? emptyImgDark : emptyImgLight
-})
-
 const filterRef: Ref<HTMLElement | null> = ref(null)
 const filterRef: Ref<HTMLElement | null> = ref(null)
 const containerHeight = useCalculatingHeight(document.documentElement, 256, [filterRef])
 const containerHeight = useCalculatingHeight(document.documentElement, 256, [filterRef])
 
 
@@ -89,7 +81,7 @@ useRowClickStyle(tableRef)
 
 
 const handleClickDetail = (row: any) => {
 const handleClickDetail = (row: any) => {
   router.push({
   router.push({
-    name: 'ReportDetail',
+    name: 'Report Detail',
     query: {
     query: {
       id: row.serial_no
       id: row.serial_no
     }
     }
@@ -97,7 +89,7 @@ const handleClickDetail = (row: any) => {
 }
 }
 const handleClickSchedule = (row: any) => {
 const handleClickSchedule = (row: any) => {
   router.push({
   router.push({
-    name: 'ReportSchedule',
+    name: 'Report Schedule',
     query: {
     query: {
       id: row.serial_no
       id: row.serial_no
     }
     }
@@ -140,8 +132,7 @@ onMounted(() => {
     >
     >
       <!-- 空数据时的插槽 -->
       <!-- 空数据时的插槽 -->
       <template #empty>
       <template #empty>
-        <img :src="emptyImg" />
-        <div class="empty-text">No data</div>
+        <TableImgEmpty />
       </template>
       </template>
       <template #action="{ row }">
       <template #action="{ row }">
         <el-button class="el-button--blue" @click="handleClickDetail(row)" style="height: 24px">
         <el-button class="el-button--blue" @click="handleClickDetail(row)" style="height: 24px">
@@ -228,11 +219,4 @@ onMounted(() => {
 :deep(.el-icon svg) {
 :deep(.el-icon svg) {
   width: 1em !important;
   width: 1em !important;
 }
 }
-.empty-text {
-  margin: 8px 0;
-  color: var(--color-neutral-2);
-  text-align: center;
-  font-size: 14px;
-  font-weight: 700;
-}
 </style>
 </style>

+ 1 - 1
src/views/Report/src/components/ReportDetail/src/ReportDetail.vue

@@ -224,7 +224,7 @@ const applyNewColumn = () => {
     display: flex;
     display: flex;
     justify-content: space-between;
     justify-content: space-between;
     align-items: center;
     align-items: center;
-    margin-bottom: 20px;
+    margin-bottom: 16px;
   }
   }
   .filters-title {
   .filters-title {
     font-size: 18px;
     font-size: 18px;

+ 1 - 9
src/views/Report/src/components/ReportDetail/src/components/FieldsTable.vue

@@ -234,8 +234,7 @@ defineExpose({
       >
       >
         <!-- 空数据时的插槽 -->
         <!-- 空数据时的插槽 -->
         <template #empty>
         <template #empty>
-          <img src="../images/default_no_data@2x.png" />
-          <div class="empty-text">No data</div>
+          <TableImgEmpty></TableImgEmpty>
         </template>
         </template>
         <!-- Status字段的插槽 -->
         <!-- Status字段的插槽 -->
         <template #status="{ row, column }">
         <template #status="{ row, column }">
@@ -304,11 +303,4 @@ defineExpose({
     width: 20px;
     width: 20px;
   }
   }
 }
 }
-.empty-text {
-  margin: 8px 0;
-  color: var(--color-neutral-2);
-  text-align: center;
-  font-size: 14px;
-  font-weight: 700;
-}
 </style>
 </style>

BIN
src/views/Report/src/components/ReportDetail/src/images/empty-dark.png


+ 0 - 0
src/views/Report/src/components/ReportDetail/src/images/default_no_data@2x.png → src/views/Report/src/components/ReportDetail/src/images/empty-light.png


+ 1 - 9
src/views/Report/src/components/ReportSchedule/src/components/FieldsTable.vue

@@ -180,8 +180,7 @@ defineExpose({
       >
       >
         <!-- 空数据时的插槽 -->
         <!-- 空数据时的插槽 -->
         <template #empty>
         <template #empty>
-          <img src="../../../ReportDetail/src/images/default_no_data@2x.png" />
-          <div class="empty-text">No data</div>
+          <TableImgEmpty></TableImgEmpty>
         </template>
         </template>
         <!-- Status字段的插槽 -->
         <!-- Status字段的插槽 -->
         <template #status="{ row, column }">
         <template #status="{ row, column }">
@@ -243,11 +242,4 @@ defineExpose({
   border-radius: 12px;
   border-radius: 12px;
   border-top: 1px solid var(--color-border);
   border-top: 1px solid var(--color-border);
 }
 }
-.empty-text {
-  margin: 8px 0;
-  color: var(--color-neutral-2);
-  text-align: center;
-  font-size: 14px;
-  font-weight: 700;
-}
 </style>
 </style>

+ 2 - 5
src/views/Report/src/components/ReportSchedule/src/components/TimeRange.vue

@@ -263,10 +263,7 @@ defineExpose({
                   <el-radio-button label="Past 30 days" value="Past 30 days" />
                   <el-radio-button label="Past 30 days" value="Past 30 days" />
                   <el-radio-button label="Customize" value="Customize" />
                   <el-radio-button label="Customize" value="Customize" />
                 </el-radio-group>
                 </el-radio-group>
-                <div
-                  class="flex"
-                  style="align-items: end; margin: 16px 8px 16px 0; flex-wrap: wrap"
-                >
+                <div class="flex" style="align-items: end; margin: 16px 8px 8px 0; flex-wrap: wrap">
                   <div class="date_flex" style="margin-right: 10px">
                   <div class="date_flex" style="margin-right: 10px">
                     <div class="time_title">Start Date</div>
                     <div class="time_title">Start Date</div>
                     <div class="flex">
                     <div class="flex">
@@ -331,7 +328,7 @@ defineExpose({
                     <el-radio-button label="Customize" value="Customize" />
                     <el-radio-button label="Customize" value="Customize" />
                   </el-radio-group>
                   </el-radio-group>
                 </div>
                 </div>
-                <div style="display: flex; padding-bottom: 16px">
+                <div style="display: flex; padding-bottom: 8px">
                   <div style="margin-right: 9px; width: 50%">
                   <div style="margin-right: 9px; width: 50%">
                     <div class="date_text">Start Date</div>
                     <div class="date_text">Start Date</div>
                     <el-date-picker
                     <el-date-picker

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

@@ -223,10 +223,10 @@ const deleteAddedRules = (val: any) => {
 // 跳转Create New Rule页面
 // 跳转Create New Rule页面
 const ToCreateRule = () => {
 const ToCreateRule = () => {
   router.push({
   router.push({
-    path: '/SystemSettings/createnewrule',
+    path: '/system-settings/create-new-rule',
     query: {}
     query: {}
   })
   })
-  sessionStorage.setItem('activeTab', 'Monitoring Settings')
+  sessionStorage.setItem('activeTab', 'System Settings')
 }
 }
 
 
 const tabledatalength = ref()
 const tabledatalength = ref()
@@ -353,7 +353,7 @@ onMounted(() => {
         ref="SubShipmentsTable"
         ref="SubShipmentsTable"
       ></AddRSettingTableules>
       ></AddRSettingTableules>
     </el-tab-pane>
     </el-tab-pane>
-    <el-tab-pane label="Monitoring Settings" name="Monitoring Settings">
+    <el-tab-pane label="Monitoring Settings" name="System Settings">
       <div class="monitoring_flex">
       <div class="monitoring_flex">
         <div class="subscribedTitle">Added Rules</div>
         <div class="subscribedTitle">Added Rules</div>
         <el-button
         <el-button

+ 7 - 7
src/views/SystemSettings/src/components/MonitoringTable/src/MonitoringTable.vue

@@ -59,7 +59,7 @@ const tableData = ref<VxeGridProps<any>>({
     backgroundColor: 'var(--color-table-header-bg)'
     backgroundColor: 'var(--color-table-header-bg)'
   },
   },
   columnConfig: { resizable: true, useKey: true },
   columnConfig: { resizable: true, useKey: true },
-  rowConfig: { isHover: true, isCurrent: true },
+  rowConfig: { isHover: true, isCurrent: true }
 })
 })
 
 
 const tableRef = ref<VxeGridInstance | null>(null)
 const tableRef = ref<VxeGridInstance | null>(null)
@@ -129,10 +129,10 @@ const handleDelete = (row: any) => {
 // 跳转Create New Rule页面
 // 跳转Create New Rule页面
 const ToCreateRule = () => {
 const ToCreateRule = () => {
   router.push({
   router.push({
-    path: '/SystemSettings/createnewrule',
+    path: '/system-settings/create-new-rule',
     query: {}
     query: {}
   })
   })
-  sessionStorage.setItem('activeTab', 'Monitoring Settings')
+  sessionStorage.setItem('activeTab', 'System Settings')
 }
 }
 
 
 // 删除表格数据
 // 删除表格数据
@@ -152,23 +152,23 @@ const deleteMoniTable = (row: any) => {
 
 
 // 编辑表格数据
 // 编辑表格数据
 const handleedit = ({ row }: any) => {
 const handleedit = ({ row }: any) => {
-  sessionStorage.setItem('activeTab', 'Monitoring Settings')
+  sessionStorage.setItem('activeTab', 'System Settings')
   sessionStorage.setItem('editTableid', row.id)
   sessionStorage.setItem('editTableid', row.id)
   sessionStorage.setItem('editTablerules_type', row.rules_type)
   sessionStorage.setItem('editTablerules_type', row.rules_type)
   sessionStorage.setItem('editTableoption', row.notifications_option)
   sessionStorage.setItem('editTableoption', row.notifications_option)
   router.push({
   router.push({
-    path: '/SystemSettings/createnewrule',
+    path: '/system-settings/create-new-rule',
     query: {}
     query: {}
   })
   })
 }
 }
 
 
 const handleedittow = (row: any) => {
 const handleedittow = (row: any) => {
-  sessionStorage.setItem('activeTab', 'Monitoring Settings')
+  sessionStorage.setItem('activeTab', 'System Settings')
   sessionStorage.setItem('editTableid', row.id)
   sessionStorage.setItem('editTableid', row.id)
   sessionStorage.setItem('editTablerules_type', row.rules_type)
   sessionStorage.setItem('editTablerules_type', row.rules_type)
   sessionStorage.setItem('editTableoption', row.notifications_option)
   sessionStorage.setItem('editTableoption', row.notifications_option)
   router.push({
   router.push({
-    path: '/SystemSettings/createnewrule',
+    path: '/system-settings/create-new-rule',
     query: {}
     query: {}
   })
   })
 }
 }

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

@@ -115,7 +115,7 @@ const handleDelete = (row: any) => {
 // 点击link字段
 // 点击link字段
 const handleLinkClick = (row: any) => {
 const handleLinkClick = (row: any) => {
   router.push({
   router.push({
-    path: '/shipment/detail',
+    path: '/tracking/detail',
     query: { a: row.__serial_no, _schemas: row._schemas }
     query: { a: row.__serial_no, _schemas: row._schemas }
   })
   })
   sessionStorage.setItem('activeTab', 'Subscribe Notifications')
   sessionStorage.setItem('activeTab', 'Subscribe Notifications')

+ 54 - 40
src/views/TemplateManagement/src/components/TableView/src/TableView.vue

@@ -88,7 +88,7 @@ const handleColumns = (columns: any) => {
       curColumn = {
       curColumn = {
         ...curColumn,
         ...curColumn,
         formatter: ({ cellValue }: any) =>
         formatter: ({ cellValue }: any) =>
-          dayjs.tz(cellValue, 'US/Pacific').format(formatString.value + ' HH:mm:ss ')
+          (dayjs as any).tz(cellValue, 'US/Pacific').format(formatString.value + ' HH:mm')
       }
       }
     }
     }
     return curColumn
     return curColumn
@@ -312,45 +312,59 @@ defineExpose({
     >
     >
       <!-- action操作栏的插槽 -->
       <!-- action操作栏的插槽 -->
       <template #action="{ row }">
       <template #action="{ row }">
-        <el-button class="el-button--blue action-btn" @click="handleEdit(row.serial_no)">
-          <span
-            style="margin-right: 2px; font-size: 15px"
-            class="font_family icon-icon_edit_b"
-          ></span>
-        </el-button>
-        <el-button class="el-button--blue action-btn" @click="handleCopy(row.serial_no)">
-          <span
-            style="margin-right: 2px; font-size: 15px"
-            class="font_family icon-icon_clone_b"
-          ></span>
-        </el-button>
-        <el-button
-          class="el-button--blue action-btn"
-          v-if="row.is_active === 't'"
-          @click="handleClick(row, false)"
-        >
-          <span
-            style="margin-right: 2px; font-size: 16px"
-            class="font_family icon-icon_disablee__b"
-          ></span>
-        </el-button>
-        <el-button
-          class="el-button--blue action-btn"
-          v-if="row.is_active === 'f'"
-          @click="handleClick(row, true)"
-        >
-          <span
-            style="margin-right: 2px; font-size: 13px"
-            class="font_family icon-icon_active"
-          ></span>
-        </el-button>
-        <el-button
-          v-if="isShowDeleteBtn"
-          class="el-button--blue action-btn"
-          @click="handleDelete(row.serial_no)"
-        >
-          <span class="font_family icon-icon_delete_b"></span>
-        </el-button>
+        <el-tooltip effect="dark" content="Edit" placement="top">
+          <el-button class="el-button--blue action-btn" @click="handleEdit(row.serial_no)">
+            <span
+              style="margin-right: 2px; font-size: 15px"
+              class="font_family icon-icon_edit_b"
+            ></span>
+          </el-button>
+        </el-tooltip>
+
+        <el-tooltip effect="dark" content="Copy" placement="top">
+          <el-button class="el-button--blue action-btn" @click="handleCopy(row.serial_no)">
+            <span
+              style="margin-right: 2px; font-size: 15px"
+              class="font_family icon-icon_clone_b"
+            ></span>
+          </el-button>
+        </el-tooltip>
+
+        <el-tooltip effect="dark" content="Inactivate" placement="top">
+          <el-button
+            class="el-button--blue action-btn"
+            v-if="row.is_active === 't'"
+            @click="handleClick(row, false)"
+          >
+            <span
+              style="margin-right: 2px; font-size: 16px"
+              class="font_family icon-icon_disablee__b"
+            ></span>
+          </el-button>
+        </el-tooltip>
+
+        <el-tooltip effect="dark" content="Activate" placement="top">
+          <el-button
+            class="el-button--blue action-btn"
+            v-if="row.is_active === 'f'"
+            @click="handleClick(row, true)"
+          >
+            <span
+              style="margin-right: 2px; font-size: 13px"
+              class="font_family icon-icon_active"
+            ></span>
+          </el-button>
+        </el-tooltip>
+
+        <el-tooltip effect="dark" content="Delete" placement="top">
+          <el-button
+            v-if="isShowDeleteBtn"
+            class="el-button--blue action-btn"
+            @click="handleDelete(row.serial_no)"
+          >
+            <span class="font_family icon-icon_delete_b"></span>
+          </el-button>
+        </el-tooltip>
       </template>
       </template>
       <!-- Status字段的插槽 -->
       <!-- Status字段的插槽 -->
       <template #status="{ row, column }">
       <template #status="{ row, column }">

+ 1 - 1
src/views/Tracking/src/components/TrackingDetail/src/components/MapView.vue

@@ -60,7 +60,7 @@ const initMap = () => {
   map = L.map('tracking-map', { scrollWheelZoom: false }).setView([51.505, -0.09], 3)
   map = L.map('tracking-map', { scrollWheelZoom: false }).setView([51.505, -0.09], 3)
 
 
   // 添加 TileLayer
   // 添加 TileLayer
-  L.tileLayer('https://map.kerryapex.com/osm_tiles/{z}/{x}/{y}.png', {
+  L.tileLayer('https://map.k-apex.kln.com/osm_tiles/{z}/{x}/{y}.png', {
     attribution:
     attribution:
       '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
       '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
   }).addTo(map)
   }).addTo(map)