Просмотр исходного кода

Merge branch 'dev_zyh' of United_Software/k_online_ui into dev

Jack Zhou 1 год назад
Родитель
Сommit
c1106b722b

+ 5 - 1
src/stores/modules/headerSearch.ts

@@ -4,11 +4,13 @@ interface HeaderSearch {
   searchValue: string
   searchResult?: string
   isChangeByLogin: boolean
+  trackingData?: any
 }
 export const useHeaderSearch = defineStore('headerSearch', {
   state: (): HeaderSearch => ({
     searchValue: JSON.parse(localStorage.getItem('searchData'))?.searchValue || '',
     searchResult: JSON.parse(localStorage.getItem('searchData'))?.searchResult || '',
+    trackingData: JSON.parse(localStorage.getItem('searchData'))?.searchResult || {},
     isChangeByLogin: Boolean(localStorage.getItem('isChangeByLogin')) || false
   }),
   getters: {},
@@ -16,7 +18,8 @@ export const useHeaderSearch = defineStore('headerSearch', {
     setSearchData(searchData: any) {
       localStorage.setItem('searchData', JSON.stringify(searchData))
       this.searchValue = searchData.searchValue
-      this.searchResult = searchData.searchResult
+      this.searchResult = searchData?.searchResult
+      this.trackingData = searchData?.trackingData
     },
     setChangeByLogin(isChangeByLogin: boolean) {
       localStorage.setItem('isChangeByLogin', JSON.stringify(isChangeByLogin))
@@ -26,6 +29,7 @@ export const useHeaderSearch = defineStore('headerSearch', {
       localStorage.removeItem('searchData')
       this.searchValue = ''
       this.searchResult = ''
+      this.trackingData = ''
     },
     clearChangeByLogin() {
       localStorage.removeItem('isChangeByLogin')

+ 4 - 2
src/stores/modules/user.ts

@@ -13,8 +13,10 @@ export const useUserStore = defineStore('user', {
       localStorage.setItem('username', username)
       this.username = username
     },
-    logout() {
-      $api.logout().then(() => {})
+    logout(isNeedLogout: boolean = true) {
+      if (isNeedLogout) {
+        $api.logout().then(() => {})
+      }
       localStorage.removeItem('username')
       this.username = ''
     }

+ 1 - 1
src/utils/axios.ts

@@ -58,7 +58,7 @@ class HttpAxios {
     if (response.status === 200) {
       if (response.data.code === 401 || response.data.code === 403) {
         const userStore = useUserStore()
-        userStore.logout()
+        userStore.logout(false)
         router.push('/login')
         ElMessage.warning({
           message: 'Please log in to use this feature.',

+ 3 - 2
src/views/Layout/src/components/Header/HeaderView.vue

@@ -80,9 +80,10 @@ const handleSearch = () => {
             headerSearch.setChangeByLogin(true)
             headerSearch.setSearchData({
               searchValue: searchValue.value,
-              searchResult: ''
+              searchResult: '',
+              trackingData: res.data
             })
-            localStorage.setItem('TrackingData', JSON.stringify(res.data))
+            // localStorage.setItem('TrackingData', JSON.stringify(res.data))
             router.push({
               name: 'Tracking'
             })

+ 39 - 32
src/views/Tracking/src/TrackingView.vue

@@ -158,8 +158,14 @@ const defaultDate = (val: any, value: any, data: any) => {
   } else {
     searchTableQeuryTracking = data
   }
-  TrackingTable_ref.value.searchTableData(searchTableQeuryTracking)
-  Gettrackingdata()
+  const trackingData = JSON.parse(localStorage.getItem('searchData'))
+  if (trackingData) {
+    // 根据顶部搜索框的搜索结果赋值
+    initDataByHeaderSearch()
+  } else {
+    TrackingTable_ref.value.searchTableData(searchTableQeuryTracking)
+    Gettrackingdata()
+  }
   renderTagsData()
 }
 //DateRangeSearch
@@ -382,21 +388,29 @@ const clearMoreFiltersTags = () => {
   filterData.morefiltersData = []
 }
 
+const initDataByHeaderSearch = () => {
+  const data = JSON.parse(localStorage.getItem('searchData'))
+  if (data) {
+    // 更新搜索框的值
+    TrackingSearch.value = data.searchValue
+    // 更新表格数据
+    TrackingTable_ref.value.getSharedTableData()
+    // 更新tagsList和TransportList
+    TransportListItem.value = data.trackingData.TransportList
+    TagsList.value = data.trackingData.tagsList
+
+    headerSearch.clearSearchData()
+  }
+}
+
 // 从 store 中获取数据并绑定到输入框
 const headerSearchdData = computed(() => headerSearch.searchValue)
-// 监听 sharedData 的变化并更新 inputValue
-headerSearchdData.value && (TrackingSearch.value = headerSearchdData.value)
-headerSearch.clearSearchData()
-// 当 sharedData 发生变化时,更新 inputValue
+// 监听顶部搜索结果的变化
 watch(
   () => headerSearchdData.value,
   (newData) => {
     if (newData) {
-      // 更新表格数据
-      TrackingTable_ref.value.getSharedTableData()
-      // 更新筛选条件
-      TrackingSearch.value = headerSearchdData.value
-      headerSearch.clearSearchData()
+      initDataByHeaderSearch()
     }
   }
 )
@@ -412,27 +426,20 @@ interface ListItem {
 const TagsList = ref<ListItem[]>([])
 const filterTag = ref(['All'])
 const Gettrackingdata = () => {
-  const trackingData = JSON.parse(localStorage.getItem('TrackingData'))
-  if (trackingData) {
-    TransportListItem.value = trackingData.TransportList
-    TagsList.value = trackingData.tagsList
-    TrackingSearch.value = trackingData.searchData
-  } else {
-    $api
-      .getTrackingTableData({
-        cp: TrackingTable_ref.value.pageInfo.pageNo,
-        ps: TrackingTable_ref.value.pageInfo.pageSize,
-        rc: -1,
-        other_filed: '',
-        ...searchTableQeuryTracking
-      })
-      .then((res: any) => {
-        if (res.code === 200) {
-          TransportListItem.value = res.data.TransportList
-          TagsList.value = res.data.tagsList
-        }
-      })
-  }
+  $api
+    .getTrackingTableData({
+      cp: TrackingTable_ref.value.pageInfo.pageNo,
+      ps: TrackingTable_ref.value.pageInfo.pageSize,
+      rc: -1,
+      other_filed: '',
+      ...searchTableQeuryTracking
+    })
+    .then((res: any) => {
+      if (res.code === 200) {
+        TransportListItem.value = res.data.TransportList
+        TagsList.value = res.data.tagsList
+      }
+    })
 }
 onMounted(() => {
   if (

+ 16 - 5
src/views/Tracking/src/components/PublicTracking/src/PublicTrackingSearch.vue

@@ -3,6 +3,7 @@ import { useRouter } from 'vue-router'
 import { useHeaderSearch } from '@/stores/modules/headerSearch'
 import SlideVerify from './components/SlideVerify.vue'
 import CryptoJS from 'crypto-js'
+import dayjs from 'dayjs'
 
 const router = useRouter()
 
@@ -44,9 +45,7 @@ const handleSearchNo = () => {
     .then((res) => {
       if (res.code === 200) {
         const { data } = res
-        if (data.msg === 'visit limit') {
-          slideVerifyRef.value?.openDialog()
-        }
+
         if (data.msg === 'No matches') {
           searchResult.value = 'error'
         } else if (data.msg === 'Multiple results') {
@@ -55,6 +54,11 @@ const handleSearchNo = () => {
           sessionStorage.setItem('publicTrackingData', JSON.stringify(data.data))
           router.push(`/public-tracking/detail?searchNo=${inputVModel.value}`)
         }
+      } else if (res.code === 400) {
+        const { data } = res
+        if (data.msg === 'visit limit') {
+          slideVerifyRef.value?.openDialog()
+        }
       }
     })
     .finally(() => {
@@ -65,13 +69,20 @@ const handleSearchNo = () => {
 
 const slideVerifyRef = ref<InstanceType<typeof SlideVerify> | null>(null)
 const secretKey = 'fT5!R1k$7Mv@4Q9X'
+const fixedIv = '1234567890123456' // 固定的初始化向量,长度为16字符
+
 // AES 加密函数
 const encryptPassword = (password) => {
-  return CryptoJS.AES.encrypt(password, secretKey).toString()
+  const key = CryptoJS.enc.Utf8.parse(secretKey) // 解析密钥
+  const iv = CryptoJS.enc.Utf8.parse(fixedIv) // 解析IV
+  const encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(password), key, { iv: iv })
+  return encrypted.toString()
 }
+
 // 验证滑块成功
 const confirmVerify = () => {
-  confirmVerifyStatus.value = encryptPassword('completed')
+  const pwd = dayjs().unix()
+  confirmVerifyStatus.value = encryptPassword(pwd)
 }
 </script>
 

+ 16 - 1
src/views/Tracking/src/components/PublicTracking/src/components/SlideVerify.vue

@@ -102,13 +102,28 @@ const moveSlider = (event: MouseEvent) => {
     onDrag(event)
   }
 }
+
+const clearData = () => {
+  sliderState.value = 'start'
+  verifyText.value = 'Swipe right to verify'
+  position.value = 0
+}
 defineExpose({
   openDialog
 })
 </script>
 
 <template>
-  <el-dialog top="30vh" v-model="dialogVisible" width="400" class="slide-verify-dialog">
+  <el-dialog
+    top="30vh"
+    destroy-on-close
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    @closed="clearData"
+    v-model="dialogVisible"
+    width="400"
+    class="slide-verify-dialog"
+  >
     <div class="content">
       <p>Please drag the slider below to complete the</p>
       <p>verification to ensure normal access</p>

+ 12 - 6
src/views/Tracking/src/components/TrackingTable/src/TrackingTable.vue

@@ -97,10 +97,11 @@ const TagsList = ref()
 // 获取表格数据
 let filterdataobj: any = {}
 const getSharedTableData = () => {
-  const trackingData = JSON.parse(localStorage.getItem('TrackingData'))
+  const trackingData = JSON.parse(localStorage.getItem('searchData'))?.trackingData
   if (trackingData) {
     trackingTable.value.data = trackingData.searchData || []
     pageInfo.value.total = Number(trackingData.rc)
+    pageInfo.value.pageSize = Number(trackingData.ps)
     TagsList.value = trackingData.tagsList
     if (trackingData.canEdiVgm && trackingTable.value.columns.length > 0) {
       const index = trackingTable.value.columns.findIndex((item: any) => item.title === 'Action')
@@ -123,16 +124,12 @@ const getSharedTableData = () => {
         allTableRef.value && autoWidth(allTable.value, allTableRef.value)
       })
     }, 1000)
-    localStorage.removeItem('TrackingData')
     return true
   }
   return false
 }
 
 const getTableData = async (isInit: boolean, isPageChange?: boolean) => {
-  if (getSharedTableData()) {
-    return
-  }
   const rc = isPageChange ? pageInfo.value.total : -1
   tableLoading.value = true
   if (
@@ -236,6 +233,15 @@ const searchTableData = (data: any) => {
           trackingTable.value.data = res.data.searchData
           pageInfo.value.total = Number(res.data.rc)
           tableLoading.value = false
+
+          // 拥有所有字段的表格
+          setTimeout(() => {
+            allTable.value.columns = handleColumns(res.data.allColums, 'all')
+            allTable.value.data = res.data.searchData
+            nextTick(() => {
+              allTableRef.value && autoWidth(allTable.value, allTableRef.value)
+            })
+          }, 1000)
         }
       }
     })
@@ -243,7 +249,7 @@ const searchTableData = (data: any) => {
 
 onMounted(() => {
   tableLoading.value = true
-  Promise.all([getTableColumns(true), getTableData(true)]).finally(() => {
+  Promise.all([getTableColumns(true)]).finally(() => {
     tableLoading.value = false
     nextTick(() => {
       tableRef.value && autoWidth(trackingTable.value, tableRef.value)

+ 0 - 10
vite.config.ts

@@ -60,14 +60,4 @@ export default defineConfig({
       }
     }
   }
-  // build: {
-  //   assetsDir: 'assets',
-  //   rollupOptions: {
-  //     output: {
-  //       entryFileNames: `assets/[name].[hash].js`,
-  //       chunkFileNames: `assets/[name].[hash].js`,
-  //       assetFileNames: `assets/[name].[hash].[ext]`
-  //     }
-  //   }
-  // }
 })