Эх сурвалжийг харах

feat: 重构Tracking筛选项

Jack Zhou 2 сар өмнө
parent
commit
af53b228a0

+ 22 - 10
src/components/DateRange/src/DateRange.new.vue

@@ -3,6 +3,12 @@ import { ref, watch, onMounted, onBeforeMount } from 'vue'
 import IconDropDown from '@/components/IconDropDown'
 import VCalendarDate from './components/VCalendarDate.vue'
 import { useFiltersStore } from '@/stores/modules/filtersList'
+import { useRoute } from 'vue-router'
+
+const route = useRoute()
+const searchMode = route.path.includes('booking') ? 'booking' : 'tracking'
+const etaKey = searchMode === 'booking' ? ['f_eta_start', 'f_eta_start'] : ['eta_start', 'eta_end']
+const etdKey = searchMode === 'booking' ? ['f_etd_start', 'f_etd_start'] : ['etd_start', 'etd_end']
 
 const filtersStore = useFiltersStore()
 const filtersList = computed(() => filtersStore.filtersList)
@@ -50,9 +56,7 @@ const addType = () => {
 const deleteType = (i: any) => {
   otherDateType.value.splice(i, 1)
 }
-const props = defineProps({
-  isShipment: Boolean
-})
+
 const etdDateRange = ref([])
 const etaDateRange = ref([])
 
@@ -61,24 +65,32 @@ const hasValidDate = (date: any) => {
   return date && date.length === 2 && date[0] && date[1]
 }
 const DateRangeSearch = () => {
-  hasValidDate(etaDateRange.value) &&
-    filtersStore.pushFilter({
+  if (hasValidDate(etaDateRange.value)) {
+    filtersStore.updateFilter({
       title: 'ETA',
       keyType: 'dateRange',
       value: etaDateRange.value,
-      key: ['f_eta_start', 'f_eta_end']
+      key: etaKey
     })
-  hasValidDate(etdDateRange.value) &&
-    filtersStore.pushFilter({
+  } else {
+    filtersStore.deleteFilterByTitle('ETA')
+  }
+
+  if (hasValidDate(etdDateRange.value)) {
+    filtersStore.updateFilter({
       title: 'ETD',
       keyType: 'dateRange',
       value: etdDateRange.value,
-      key: ['f_etd_start', 'f_etd_end']
+      key: etdKey
     })
+  } else {
+    filtersStore.deleteFilterByTitle('ETD')
+  }
+
   allOtherType.value.forEach((item) => {
     const curIndex = otherDateType.value.findIndex((type) => type.title === item.title)
     if (curIndex !== -1 && hasValidDate(otherDateType.value[curIndex]?.value)) {
-      filtersStore.pushFilter({
+      filtersStore.updateFilter({
         title: item.title,
         keyType: 'dateRange',
         value: otherDateType.value[curIndex].value,

+ 40 - 139
src/components/MoreFilters/src/MoreFilters.new.vue

@@ -2,98 +2,19 @@
 import AutoSelect from '@/components/AutoSelect'
 // import SelectAutoSelect from '@/components/SelectAutoSelect'
 import { useFiltersStore } from '@/stores/modules/filtersList'
+import { useRoute } from 'vue-router'
+
+const route = useRoute()
+const searchMode = route.path.includes('booking') ? 'booking' : 'tracking'
 
 const filtersStore = useFiltersStore()
 
 const drawer = ref(false)
 
 const props = defineProps({
-  isShipment: Boolean,
   isShowMoreFiltersGuidePhoto: Boolean,
-  pageMode: String
-})
-const PartyTypeoptions = computed(() => {
-  if (props.isShipment) {
-    return [
-      {
-        value: 'Notify Party',
-        label: 'Notify Party'
-      },
-      {
-        value: 'Bill to',
-        label: 'Bill to'
-      },
-      {
-        value: 'Origin Agent',
-        label: 'Origin Agent'
-      },
-      {
-        value: 'Destination Agent',
-        label: 'Destination Agent'
-      },
-      {
-        value: 'Destination Operator',
-        label: 'Destination Operator'
-      },
-      {
-        value: 'Sales',
-        label: 'Sales'
-      }
-    ]
-  } else {
-    return [
-      {
-        label: 'Origin Agent',
-        key: 'origin'
-      },
-      {
-        label: 'Destination Agent',
-        key: 'agent'
-      },
-      {
-        label: 'Sales',
-        key: 'sales_rep'
-      }
-    ]
-  }
-})
-
-const PlaceTypeoptions = computed(() => {
-  if (props.isShipment) {
-    return [
-      {
-        value: 'Place of Receipt',
-        label: 'Place of Receipt'
-      },
-      {
-        value: 'Port of Loading',
-        label: 'Port of Loading'
-      },
-      {
-        value: 'Place of Discharge',
-        label: 'Place of Discharge'
-      },
-      {
-        value: 'Place of delivery',
-        label: 'Place of delivery'
-      }
-    ]
-  } else {
-    return [
-      {
-        label: 'Place of Receipt',
-        key: 'place_of_receipt/place_of_receipt_exp'
-      },
-      {
-        label: 'Port of Loading',
-        key: 'fport_of_loading_uncode/fport_of_loading_exp'
-      },
-      {
-        label: 'Place of delivery',
-        key: 'place_of_delivery/place_of_delivery_exp'
-      }
-    ]
-  }
+  incotermsList: Array<any>,
+  serviceList: Array<any>
 })
 
 const InputForm = ref({
@@ -137,6 +58,8 @@ const placesViewRef = ref()
 const initData = () => {
   partiesViewRef.value.initData()
   placesViewRef.value.initData()
+  incotermsRef.value.initData()
+  serviceRef.value.initData()
 }
 const transportationBadgeCount = computed(() => {
   let count = 0
@@ -148,18 +71,28 @@ const transportationBadgeCount = computed(() => {
   return count
 })
 
-const count = ref()
-const countT = ref()
-const countP = ref()
-const countG = ref()
-const PartiesBadge = ref()
+const incotermsRef = ref()
+const serviceRef = ref()
+const getQueryData = () => {
+  partiesViewRef.value.getQueryData()
+  placesViewRef.value.getQueryData()
+  incotermsRef.value.getQueryData()
+  serviceRef.value.getQueryData()
+  // Transportation
+  transportaionData.value.forEach((item) => {
+    if (item.value.length !== 0) {
+      filtersStore.updateFilter({
+        title: item.title,
+        key: item.key,
+        value: item.value,
+        keyType: 'array'
+      })
+    } else {
+      filtersStore.deleteFilterByTitle(item.title)
+    }
+  })
+}
 const GeneralBadge = ref()
-const TransportationBadge = ref()
-const PlacesBadge = ref()
-count.value = []
-countT.value = []
-countP.value = []
-countG.value = []
 
 const collapseValue = ref()
 
@@ -172,15 +105,12 @@ const changeTransportationData = (data: any, title: string) => {
 const emit = defineEmits(['handleSearch', 'clearMoreFiltersTags'])
 const handleSearch = () => {
   getQueryData()
-  emit('handleSearch')
+  console.log(filtersStore, 'value')
+  // emit('handleSearch')
 }
 // 清除
 const clearrest = () => {}
 
-const IncotermsCheckAll = ref(false)
-const ServiceCheckAll = ref(false)
-const IncotermsList = ref()
-const SeiviceList = ref()
 const IncotermsSearch = (val: any, value: any) => {
   InputForm.value.General.Incoterms = val.data
 }
@@ -189,19 +119,8 @@ const ServiceSearch = (val: any, value: any) => {
 }
 const clickmorefilters = () => {
   drawer.value = true
-  const incotermsList = JSON.parse(sessionStorage.getItem('incotermsList') as string) || {}
-  if (incotermsList) {
-    IncotermsList.value = incotermsList.IncotermsList
-    SeiviceList.value = incotermsList.ServiceList
-  }
 }
-const searchTableQeurytest = ref(props.searchTableQeury)
-watch(
-  () => props.searchTableQeury,
-  (current) => {
-    searchTableQeurytest.value = current
-  }
-)
+
 import trackingMoreFiltersImgLight from './image/tracking-more-filters-guide.png'
 import trackingMoreFiltersImgDark from './image/tracking-dark-more-filters-guide.png'
 import bookingMoreFiltersImgLight from './image/booking-more-filters-guide.png'
@@ -211,30 +130,12 @@ import { useThemeStore } from '@/stores/modules/theme'
 const themeStore = useThemeStore()
 
 const moreFiltersGuideImg = computed(() => {
-  if (props.pageMode === 'tracking') {
+  if (searchMode === 'tracking') {
     return themeStore.theme === 'dark' ? trackingMoreFiltersImgDark : trackingMoreFiltersImgLight
   } else {
     return themeStore.theme === 'dark' ? bookingMoreFiltersImgDark : bookingMoreFiltersImgLight
   }
 })
-
-const getQueryData = () => {
-  partiesViewRef.value.getQueryData()
-  placesViewRef.value.getQueryData()
-  // Transportation
-  transportaionData.value.forEach((item) => {
-    if (item.value.length !== 0) {
-      filtersStore.pushFilter({
-        title: item.title,
-        key: item.key,
-        value: item.value,
-        keyType: 'array'
-      })
-    } else {
-      filtersStore.deleteFilterByTitle(item.title)
-    }
-  })
-}
 </script>
 <template>
   <div style="position: relative">
@@ -258,7 +159,7 @@ const getQueryData = () => {
     <el-drawer @open="initData" size="400px" title="More Filters" v-model="drawer">
       <el-collapse v-model="collapseValue"
         ><!-- General -->
-        <el-collapse-item class="collapse_item" name="General" v-if="props.isShipment">
+        <el-collapse-item class="collapse_item" name="General" v-if="searchMode === 'tracking'">
           <template #title>
             <span class="collapse-title"
               >General <el-badge class="mark" :value="GeneralBadge" type="warning"
@@ -267,21 +168,21 @@ const getQueryData = () => {
           <div class="ETD">
             <div class="ETD_title">Incoterms</div>
             <SelectValue
-              :checkAll="IncotermsCheckAll"
               title="Incoterms"
-              :TransportListItem="IncotermsList"
+              key="incoterms"
+              ref="incotermsRef"
+              :transportListData="props.incotermsList"
               @generalSearch="IncotermsSearch"
-              :Serval="InputForm.General.Incoterms"
             ></SelectValue>
           </div>
           <div class="ETA">
             <div class="ETD_title">Service</div>
             <SelectValue
-              :checkAll="ServiceCheckAll"
               title="Service"
-              :TransportListItem="SeiviceList"
+              key="service"
+              ref="serviceRef"
+              :transportListData="props.serviceList"
               @generalSearch="ServiceSearch"
-              :Serval="InputForm.General.Service"
             ></SelectValue>
           </div>
         </el-collapse-item>

+ 25 - 2
src/components/MoreFilters/src/components/PartiesView.vue

@@ -1,6 +1,10 @@
 <script setup lang="ts">
 import { useFiltersStore } from '@/stores/modules/filtersList'
 import { cloneDeep } from 'lodash'
+import { useRoute } from 'vue-router'
+
+const route = useRoute()
+const searchMode = route.path.includes('booking') ? 'booking' : 'tracking'
 
 const filtersStore = useFiltersStore()
 const filtersList = filtersStore.filtersList
@@ -43,6 +47,25 @@ const partyTypeOptions = ref([
     type: 'sales'
   }
 ])
+if (searchMode === 'tracking') {
+  partyTypeOptions.value.push(
+    {
+      title: 'Notify Party',
+      key: 'notify',
+      type: 'apex'
+    },
+    {
+      title: 'Bill to',
+      key: 'bill_to',
+      type: 'apex'
+    },
+    {
+      title: 'Destination Operator',
+      key: 'dest_op',
+      type: 'sales'
+    }
+  )
+}
 
 const moreList = ref([])
 
@@ -91,7 +114,7 @@ const deleteType = (title: string) => {
 const getQueryData = () => {
   pageData.value.forEach((item: any) => {
     if (item.value.length) {
-      filtersStore.pushFilter({
+      filtersStore.updateFilter({
         title: item.title,
         key: item.key,
         value: item.value,
@@ -113,7 +136,7 @@ const getQueryData = () => {
     const index = moreList.value.findIndex((ite) => ite.title === item.title && ite.value.length)
     if (index !== -1) {
       const ite = moreList.value[index]
-      filtersStore.pushFilter({
+      filtersStore.updateFilter({
         title: ite.title,
         key: ite.key,
         value: ite.value,

+ 14 - 2
src/components/MoreFilters/src/components/PlacesView.vue

@@ -1,6 +1,10 @@
 <script setup lang="ts">
 import { useFiltersStore } from '@/stores/modules/filtersList'
 import { cloneDeep } from 'lodash'
+import { useRoute } from 'vue-router'
+
+const route = useRoute()
+const searchMode = route.path.includes('booking') ? 'booking' : 'tracking'
 
 const filtersStore = useFiltersStore()
 const filtersList = filtersStore.filtersList
@@ -37,6 +41,14 @@ const placeTypeOptions = ref([
     type: 'uncode'
   }
 ])
+if (searchMode === 'tracking') {
+  placeTypeOptions.value.push({
+    title: 'Place of Discharge',
+    key: 'Place of Discharge',
+    needKey: 'city'
+  })
+}
+
 const initData = () => {
   moreList.value = []
   pageData.value.forEach((item) => {
@@ -101,7 +113,7 @@ const changeData = (data: any, title: string) => {
 const getQueryData = () => {
   pageData.value.forEach((item: any) => {
     if (item.value.length) {
-      filtersStore.pushFilter({
+      filtersStore.updateFilter({
         title: item.title,
         key: item.key,
         value: item.value,
@@ -123,7 +135,7 @@ const getQueryData = () => {
     const index = moreList.value.findIndex((ite) => ite.title === item.title && ite.value.length)
     if (index !== -1) {
       const ite = moreList.value[index]
-      filtersStore.pushFilter({
+      filtersStore.updateFilter({
         title: ite.title,
         key: ite.key,
         value: ite.value,

+ 98 - 89
src/components/MoreFilters/src/components/SelectValue.vue

@@ -1,101 +1,65 @@
 <script setup lang="ts">
-import { ref, watch, computed } from 'vue'
 import type { DropdownInstance } from 'element-plus'
+import { cloneDeep } from 'lodash'
+import { useFiltersStore } from '@/stores/modules/filtersList'
+
+const filtersStore = useFiltersStore()
 
 interface ListItem {
   name: string
   checked: boolean
 }
 interface Props {
-  TransportListItem: ListItem[]
-  title: String
-  Serval: String
-  checkAll: boolean
-}
-const props = withDefaults(defineProps<Props>(), {
-  checkAll: false
-})
-const TransportList = ref(props.TransportListItem)
-const Title = ref(props.title)
-const Serval = ref(props.Serval)
-const checkAll = ref(props.checkAll)
+  transportListData: ListItem[]
+  title: string
+  key: string
+}
+const props = withDefaults(defineProps<Props>(), {})
+const transportList = ref(props.transportListData)
+const title = ref(props.title)
+const checkAll = ref()
+const selectData = ref()
 watch(
-  () => props.TransportListItem,
+  () => props.transportListData,
   (current) => {
-    TransportList.value = current
-  }
-)
-watch(
-  () => props.Serval,
-  (current) => {
-    Serval.value = current
-  }
-)
-watch(
-  () => props.checkAll,
-  (current) => {
-    checkAll.value = current
+    transportList.value = cloneDeep(current)
+    checkAll.value = transportList.value.every((item) => {
+      return item.checked
+    })
   }
 )
 
 const dropdown1 = ref<DropdownInstance>()
-let checkedCount: any[] = []
 
-const handleCheckAllChange = (val: any) => {
-  checkedCount = []
-  TransportList.value.forEach((item: any) => {
-    if (val) {
-      item.checked = true
-      checkedCount.push(item.name)
-    } else {
-      item.checked = false
-      checkedCount = []
-    }
+const handleCheckAll = (val: any) => {
+  transportList.value.forEach((item: any) => {
+    item.checked = val
   })
 }
-const handleCheckedTransportChange = (value: any, checked: any, index: any) => {
-  if (checked) {
-    checkedCount.push(value)
-    const map = new Map()
-    checkedCount.forEach((item) => map.set(item, true))
-    checkedCount = [...map.keys()]
-  } else {
-    if (checkedCount.length == 1) {
-      checkedCount.splice(0, 1)
-    } else {
-      checkedCount.splice(index, 1)
-    }
-  }
-  checkAll.value = checkedCount.length === TransportList.value.length
+const handleCheckedTransport = () => {
+  checkAll.value = transportList.value.every((item) => item.checked)
 }
 
 // 清除选中
 const clearList = () => {
   checkAll.value = false
-  TransportList.value.forEach((item: any) => {
+  transportList.value.forEach((item: any) => {
     item.checked = false
   })
-  changedata.value = ''
-  checkedCount = []
+  selectData.value = ''
 }
-const emit = defineEmits(['generalSearch'])
-const changedata = ref()
-const changedata2 = ref()
+
 //点击搜索
 const TransportSearch = (visible: any) => {
-  if (checkedCount.length == TransportList.value.length) {
-    changedata.value = 'All'
-    changedata2.value = 'All'
+  if (checkAll.value) {
+    selectData.value = 'All'
   } else {
-    changedata.value = checkedCount.join(', ')
-    changedata2.value = checkedCount
-  }
-  const TransportData = {
-    title: Title.value,
-    data: changedata.value
+    selectData.value = transportList.value
+      .filter((item) => item.checked)
+      .map((item) => item.name)
+      .join(', ')
   }
-  Serval.value = changedata.value
-  emit('generalSearch', TransportData, changedata2.value)
+  seeall.value = false
   if (!dropdown1.value) return
   if (visible) {
     dropdown1.value.handleClose()
@@ -107,33 +71,75 @@ const seeall = ref(false)
 const clickSeeAll = () => {
   seeall.value = !seeall.value
 }
+
+const getQueryData = () => {
+  if (!selectData.value) filtersStore.deleteFilterByTitle(props.title)
+  if (checkAll.value) {
+    filtersStore.updateFilter({
+      title: props.title,
+      key: props.key,
+      value: ['All'],
+      keyType: 'array'
+    })
+  } else {
+    filtersStore.updateFilter({
+      title: props.title,
+      key: props.key,
+      value: selectData.value.split(', '),
+      keyType: 'array'
+    })
+  }
+}
+
+const initData = () => {
+  const filterData = filtersStore.getFilterByTitle(props.title)
+  if (filterData) {
+    if (filterData.value == 'All') {
+      transportList.value.forEach((item) => {
+        item.checked = true
+      })
+      selectData.value = 'All'
+    } else {
+      filterData.value.forEach((item) => {
+        transportList.value.forEach((item2) => {
+          if (item2.name == item) {
+            item2.checked = true
+          } else {
+            item2.checked = false
+          }
+        })
+      })
+    }
+    selectData.value = filterData.value.join(', ')
+  } else {
+    transportList.value.forEach((item) => {
+      item.checked = false
+    })
+    selectData.value = ''
+  }
+}
+
+defineExpose({
+  getQueryData,
+  initData
+})
 </script>
 <template>
-  <div class="select" :class="{ isDisabled: TransportList.length == 0 }">
+  <div class="select" :class="{ isDisabled: transportList?.length == 0 }">
     <el-dropdown
       ref="dropdown1"
       trigger="click"
       :hide-on-click="false"
-      :disabled="TransportList.length == 0"
+      :disabled="transportList?.length == 0"
     >
       <div class="el-dropdown-link">
-        <div
-          v-if="
-            props.title == 'Incoterms' && (Serval == 'Please Select Date Range' || Serval == '')
-          "
-          class="select_title"
-        >
+        <div v-if="props.title == 'Incoterms' && !selectData" class="select_title">
           Please Select Date Range
         </div>
-        <div
-          v-else-if="
-            props.title == 'Service' && (Serval == 'Please Select Service' || Serval == '')
-          "
-          class="select_title"
-        >
+        <div v-else-if="props.title == 'Service' && !selectData" class="select_title">
           Please Select Service
         </div>
-        <div v-else class="select_title_2">{{ Serval }}</div>
+        <div v-else class="select_title_2">{{ selectData }}</div>
         <span class="iconfont_icon">
           <svg class="iconfont icon_dark" aria-hidden="true">
             <use xlink:href="#icon-icon_dropdown_b"></use>
@@ -142,21 +148,21 @@ const clickSeeAll = () => {
       </div>
       <template #dropdown>
         <div class="dropdownwidth">
-          <div class="title">{{ Title }}</div>
+          <div class="title">{{ title }}</div>
           <el-dropdown-menu>
             <el-dropdown-item>
-              <el-checkbox v-model="checkAll" class="checkbox" @change="handleCheckAllChange">
+              <el-checkbox v-model="checkAll" class="checkbox" @change="handleCheckAll">
                 <div class="checkbox_title">Select All</div>
               </el-checkbox>
             </el-dropdown-item>
             <el-divider></el-divider>
             <div class="inval" :class="{ seeall: seeall }">
-              <el-dropdown-item v-for="(item, index) in TransportList" :key="index">
+              <el-dropdown-item v-for="(item, index) in transportList" :key="index">
                 <el-checkbox
                   :value="item.name"
                   v-model="item.checked"
                   class="checkbox"
-                  @change="handleCheckedTransportChange(item.name, item.checked, index)"
+                  @change="handleCheckedTransport()"
                 >
                   <div class="checkbox_title">
                     {{ item.name }}
@@ -291,6 +297,9 @@ const clickSeeAll = () => {
 :deep(.el-dropdown-menu__item) {
   padding: 0;
   margin: 10px 16px;
+  &:first-child {
+    margin-top: 0;
+  }
 }
 :deep(.el-dropdown-menu__item:not(.is-disabled):focus) {
   background-color: var(--border-hover-color);
@@ -330,7 +339,7 @@ const clickSeeAll = () => {
 }
 .seeall {
   max-height: 426px;
-  overflow: scroll;
+  overflow-y: auto;
 }
 .isDisabled {
   background-color: var(--input-disabled-bg-color);

+ 6 - 3
src/components/TransportMode/src/TransportMode.vue

@@ -1,5 +1,4 @@
 <script setup lang="ts">
-import { ref, onMounted, onBeforeMount, watch, computed } from 'vue'
 import type { DropdownInstance } from 'element-plus'
 import { cloneDeep } from 'lodash'
 import { useFiltersStore } from '@/stores/modules/filtersList'
@@ -28,7 +27,6 @@ const updateTransportList = (data: any) => {
 watch(
   () => props.transportListItem,
   (current) => {
-    console.log(current, 'value')
     updateTransportList(current)
   },
   {
@@ -72,7 +70,12 @@ const transportSearch = () => {
   const selectedNames = allChecked
     ? ['All']
     : transportList.value.filter((item) => item.checked).map((item) => item.sname)
-  filtersStore.updateFilter('transport_mode', selectedNames)
+  filtersStore.updateFilter({
+    title: 'Transport Mode',
+    value: selectedNames,
+    keyType: 'array',
+    key: 'transport_mode'
+  })
   dropdownVisible.value.handleClose()
   emit('transportSearch', transportList.value)
 }

+ 5 - 7
src/stores/modules/filtersList.ts

@@ -77,13 +77,8 @@ export const useFiltersStore = defineStore('filtersStore', {
       }
     },
 
-    updateFilter(title: string, value: string | string[]) {
-      const index = this.getFilterIndexByTitle(title)
-      if (index !== -1) {
-        this.filtersList[index].value = value
-      }
-    },
-    pushFilter(filter: FiltersType) {
+
+    updateFilter(filter: FiltersType) {
       const index = this.getFilterIndexByTitle(filter.title)
       if (index !== -1) {
         this.filtersList[index] = filter
@@ -91,6 +86,9 @@ export const useFiltersStore = defineStore('filtersStore', {
         this.filtersList.push(filter)
       }
     },
+    clearFilters() {
+      this.filtersList = []
+    }
   },
   persist: {
     storage: sessionStorage // 👈 使用 sessionStorage

+ 0 - 76
src/utils/filters.ts

@@ -1,76 +0,0 @@
-import dayjs from "dayjs"
-import { useUserStore } from '@/stores/modules/user'
-import { cloneDeep } from "lodash"
-
-const valueFormat = 'MM/DD/YYYY'
-const userStore = useUserStore()
-const formatDate = userStore.dateFormat
-
-export type FiltersType =
-  | {
-    title: string
-    key: string
-    keyType: 'normal'
-    value: string
-  }
-  | {
-    title: string
-    key: string
-    keyType: 'array'
-    value: string[]
-  } | {
-    title: string
-    key: string[]
-    keyType: 'dateRange'
-    value: string[]
-  }
-
-export const getTags = (filtersList: FiltersType[]) => {
-  return filtersList.map(filter => {
-    if (filter.keyType === 'dateRange') {
-      return filter.title + ': ' + filter.value[0] + ' To ' + filter.value[1]
-    } else if (filter.keyType === 'array') {
-      return filter.title + ': ' + filter.value.join(', ')
-    } else {
-      return filter.title + ': ' + filter.value
-    }
-  })
-}
-
-export const getFilterIndex = (filtersList: FiltersType[], key: string) => {
-  return filtersList.findIndex(filter => {
-    return filter.key === key
-  })
-}
-
-export const getFitler = (filtersList: FiltersType[], key: string) => {
-  return filtersList.find(filter => {
-    return filter.key === key
-  })
-}
-
-export const deleteFilter = (filtersList: FiltersType[], key: string) => {
-  const curIndex = filtersList.findIndex(filter => {
-    return filter.key === key
-  })
-  filtersList.splice(curIndex, 1)
-}
-export const updateFilter = (filtersList: FiltersType[], key: string, value: string | string[]) => {
-  const curIndex = filtersList.findIndex(filter => {
-    return filter.key === key
-  })
-  if (curIndex !== -1) {
-    filtersList[curIndex].value = value
-  }
-}
-
-export const pushFilter = (filtersList: FiltersType[], filter: FiltersType) => {
-  const curFilter = cloneDeep(filter)
-  if (curFilter.keyType === 'dateRange') {
-    curFilter.value = curFilter.value.map(item => dayjs(item, valueFormat).format(formatDate))
-  }
-  filtersList.push(curFilter)
-}
-
-export const parseJSONFilsters = (filtersList: FiltersType[]) => {
-}

+ 31 - 152
src/views/Booking/src/BookingView.new.vue

@@ -1,5 +1,4 @@
 <script setup lang="ts">
-import emitter from '@/utils/bus'
 import FilterTags from '@/components/FliterTags'
 import TransportMode from '@/components/TransportMode'
 import BookingTable from './components/BookingTable'
@@ -69,13 +68,13 @@ const tabList = ref([
 
 const initPage = () => {
   if (!filtersList.value || (filtersList.value && filtersList.value.length == 0)) {
-    filtersStore.pushFilter({
+    filtersStore.updateFilter({
       title: 'Transport Mode',
       value: ['All'],
       keyType: 'array',
       key: 'transport_mode'
     })
-    filtersStore.pushFilter({
+    filtersStore.updateFilter({
       title: 'ETD',
       value: [
         dayjs().subtract(2, 'month').startOf('month').format(formatDate),
@@ -84,13 +83,12 @@ const initPage = () => {
       keyType: 'dateRange',
       key: ['f_etd_start', 'f_etd_end']
     })
-    filtersStore.pushFilter({
+    filtersStore.updateFilter({
       title: 'Shipment Status',
       value: ['All'],
       keyType: 'array',
       key: 'filterTag'
     })
-  } else {
   }
 }
 
@@ -99,147 +97,19 @@ initPage()
 const BookingSearch = ref()
 const tableLoadingTableData = ref(false)
 let searchTableQeury: any = {}
-const filterData = reactive({
-  filtersTagData: [] as Array<string>,
-  transportData: [] as Array<string>,
-  daterangeData: [] as Array<string>,
-  morefiltersData: [] as Array<string>
-})
 
-const tagsData: any = ref([])
 const handleClose = (tagTitle: any) => {
   filtersStore.deleteFilterByTitle(tagTitle)
   getBookingdata()
 }
 
-//MoreFiltersSearch
-const MoreFiltersSearch = (val: any, value: any) => {
-  filterData.morefiltersData = []
-  if (Object.keys(value).length == 0) {
-    delete searchTableQeury.shipper
-    delete searchTableQeury.consignee
-    delete searchTableQeury.origin
-    delete searchTableQeury.agent
-    delete searchTableQeury.sales_rep
-    delete searchTableQeury.shipper_city
-    delete searchTableQeury.consignee_city
-    delete searchTableQeury['place_of_receipt/place_of_receipt_exp']
-    delete searchTableQeury['fport_of_loading_uncode/fport_of_loading_exp']
-    delete searchTableQeury['place_of_delivery/place_of_delivery_exp']
-    delete searchTableQeury['f_vessel/m_vessel']
-    delete searchTableQeury['f_voyage/m_voyage']
-  }
-  for (const key in val) {
-    let str = `${key}:${val[key]}`
-    filterData.morefiltersData.push(str)
-    if (key == 'Shippername') {
-      searchTableQeury.shipper = value[key]
-    } else if (key == 'Consigneename') {
-      searchTableQeury.consignee = value[key]
-    } else if (key == 'Origin Agent') {
-      searchTableQeury.origin = value[key]
-    } else if (key == 'Destination Agent') {
-      searchTableQeury.agent = value[key]
-    } else if (key == 'Sales') {
-      searchTableQeury.sales_rep = value[key]
-    } else if (key == 'Origin') {
-      searchTableQeury.shipper_city = value[key]
-    } else if (key == 'Destination') {
-      searchTableQeury.consignee_city = value[key]
-    } else if (key == 'Place of Receipt') {
-      searchTableQeury['place_of_receipt/place_of_receipt_exp'] = value[key]
-    } else if (key == 'Port of Loading') {
-      searchTableQeury['fport_of_loading_uncode/fport_of_loading_exp'] = value[key]
-    } else if (key == 'Place of delivery') {
-      searchTableQeury['place_of_delivery/place_of_delivery_exp'] = value[key]
-    } else if (key == 'Vessel') {
-      searchTableQeury['f_vessel/m_vessel'] = value[key]
-    } else if (key == 'Voyage') {
-      searchTableQeury['f_voyage/m_voyage'] = value[key]
-    }
-  }
-  sessionStorage.setItem('searchTableQeury', JSON.stringify(searchTableQeury))
-  getBookingdata()
-}
-const defaultMorefilters = (val: any, value: any, data: any) => {
-  filterData.morefiltersData = []
-  for (const key in val) {
-    let str = `${key}:${val[key]}`
-    filterData.morefiltersData.push(str)
-    if (key == 'Shippername') {
-      searchTableQeury.shipper = value[key]
-    } else if (key == 'Consigneename') {
-      searchTableQeury.consignee = value[key]
-    } else if (key == 'Origin Agent') {
-      searchTableQeury.origin = value[key]
-    } else if (key == 'Destination Agent') {
-      searchTableQeury.agent = value[key]
-    } else if (key == 'Sales') {
-      searchTableQeury.sales_rep = value[key]
-    } else if (key == 'Origin') {
-      searchTableQeury.shipper_city = value[key]
-    } else if (key == 'Destination') {
-      searchTableQeury.consignee_city = value[key]
-    } else if (key == 'Place of Receipt') {
-      searchTableQeury['place_of_receipt/place_of_receipt_exp'] = value[key]
-    } else if (key == 'Port of Loading') {
-      searchTableQeury['fport_of_loading_uncode/fport_of_loading_exp'] = value[key]
-    } else if (key == 'Place of delivery') {
-      searchTableQeury['place_of_delivery/place_of_delivery_exp'] = value[key]
-    } else if (key == 'Vessel') {
-      searchTableQeury['f_vessel/m_vessel'] = value[key]
-    } else if (key == 'Voyage') {
-      searchTableQeury['f_voyage/m_voyage'] = value[key]
-    }
-  }
-  if (sessionStorage.getItem('searchTableQeury') != null) {
-    searchTableQeury = data
-  }
-}
 const clearfilters = () => {
-  BookingSearch.value = ''
-  filterData.filtersTagData = []
-  tagsData.value = []
-  let str = 'Shipment status: All'
-  filterData.filtersTagData.push(str)
-  filterData.transportData = []
-  filterData.daterangeData = []
-  filterData.morefiltersData = []
-  emitter.emit('clearTag', 'Shipment status')
-  emitter.emit('clearTag', 'Transport Mode')
-  emitter.emit('clearTag', 'ETD')
-  emitter.emit('clearTag', 'ETA')
-  emitter.emit('clearTag', 'Creation Time')
-  emitter.emit('clearTag', 'Shippername')
-  emitter.emit('clearTag', 'Consigneename')
-  emitter.emit('clearTag', 'Origin Agent')
-  emitter.emit('clearTag', 'Destination Agent')
-  emitter.emit('clearTag', 'Sales')
-  emitter.emit('clearTag', 'Origin')
-  emitter.emit('clearTag', 'Destination')
-  emitter.emit('clearTag', 'Place of Receipt')
-  emitter.emit('clearTag', 'Port of Loading')
-  emitter.emit('clearTag', 'Place of delivery')
-  emitter.emit('clearTag', 'Vessel')
-  emitter.emit('clearTag', 'Voyage')
-  searchTableQeury = {}
-  searchTableQeury.filterTag = ['All']
-  sessionStorage.setItem('searchTableQeury', JSON.stringify(searchTableQeury))
+  filtersStore.clearFilters()
   getBookingdata()
 }
 
-// 清除 Transport Tags
-const clearTransportTags = () => {
-  filterData.transportData = []
-}
-// 清除 Daterange Tags
-const clearDaterangeTags = () => {
-  filterData.daterangeData = []
-}
-// 清除 MoreFilters Tags
-const clearMoreFiltersTags = () => {
-  filterData.morefiltersData = []
-}
+const clearDaterangeTags = () => {}
+const clearMoreFiltersTags = () => {}
 
 const BookingTable_ref = ref()
 const transportListItem = ref()
@@ -266,7 +136,12 @@ const getBookingdata = () => {
         const checkedTabNames = tabList.value
           .filter((item) => item.checked)
           .map((item) => item.name)
-        filtersStore.updateFilter('filterTag', checkedTabNames)
+        filtersStore.updateFilter({
+          title: 'Shipment Status',
+          value: checkedTabNames,
+          keyType: 'array',
+          key: 'filterTag'
+        })
 
         sessionStorage.setItem('BookingData', JSON.stringify(res.data))
         BookingTable_ref.value.searchTableData(searchTableQeury)
@@ -284,14 +159,18 @@ const getBookingdata = () => {
 const tabChange = (changeTabList: any) => {
   tabList.value = changeTabList
   const checkedTabNames = tabList.value.filter((item) => item.checked).map((item) => item.name)
-  filtersStore.updateFilter('filterTag', checkedTabNames)
+  filtersStore.updateFilter({
+    title: 'Shipment Status',
+    value: checkedTabNames,
+    keyType: 'array',
+    key: 'filterTag'
+  })
 
   getBookingdata()
 }
 // 点击search按钮
 const SearchInput = () => {
   searchTableQeury._textSearch = BookingSearch.value
-  sessionStorage.setItem('searchTableQeury', JSON.stringify(searchTableQeury))
   getBookingdata()
 }
 
@@ -300,12 +179,22 @@ onMounted(() => {
 })
 import BookingGuide from './components/BookingGuide.vue'
 import { useGuideStore } from '@/stores/modules/guide'
+import { onBeforeRouteLeave } from 'vue-router'
 
 const guideStore = useGuideStore()
 const bookingGuideRef = ref()
 const handleGuide = () => {
   bookingGuideRef.value.startGuide() // 开始引导
 }
+
+onBeforeRouteLeave((route: any) => {
+  // guideStore.clearGuide()
+  const whiteList = ['Booking Detail', 'Tracking Detail']
+  console.log(route.name, '跳转')
+  if (!whiteList.includes(route?.name)) {
+    filtersStore.clearFilters()
+  }
+})
 </script>
 
 <template>
@@ -352,24 +241,17 @@ const handleGuide = () => {
             </el-input>
           </div>
           <TransportMode
-            :isShipment="false"
             :transportListItem="transportListItem"
             @transportSearch="getBookingdata()"
           ></TransportMode>
           <DateRange
-            :isShipment="false"
             @DateRangeSearch="getBookingdata()"
             @clearDaterangeTags="clearDaterangeTags"
           ></DateRange>
         </div>
       </div>
       <MoreFilters
-        :isShipment="false"
-        :pageMode="'booking'"
-        :searchTableQeury="searchTableQeury"
-        @MoreFiltersSearch="MoreFiltersSearch"
         @clearMoreFiltersTags="clearMoreFiltersTags"
-        @defaultMorefilters="defaultMorefilters"
         :isShowMoreFiltersGuidePhoto="guideStore.booking.isShowMoreFiltersGuidePhoto"
       ></MoreFilters>
       <el-button class="el-button--dark" style="margin-left: 8px" @click="SearchInput"
@@ -392,20 +274,17 @@ const handleGuide = () => {
           effect="dark"
           :content="tag.value"
           placement="top"
+          :popper-style="{ maxWidth: '500px', whiteSpace: 'normal', wordWrap: 'break-word' }"
           v-if="tag.value.length > 39"
         >
-          {{ tag.value.length > 39 ? tag.value.slice(0, 39) + '...' : tag }}
+          {{ tag.value.length > 39 ? tag.value.slice(0, 39) + '...' : tag.value }}
         </el-tooltip>
         <div v-else>{{ tag.value }}</div>
       </el-tag>
       <div class="text_button" @click="clearfilters">Clear Filters</div>
     </div>
   </div>
-  <BookingTable
-    :height="containerHeight"
-    :tagsData="tagsData"
-    ref="BookingTable_ref"
-  ></BookingTable>
+  <BookingTable :height="containerHeight" ref="BookingTable_ref"></BookingTable>
 </template>
 
 <style lang="scss" scoped>

+ 28 - 9
src/views/Booking/src/components/BookingTable/src/BookingTable.vue

@@ -10,6 +10,10 @@ import { transportationMode } from '@/components/transportationMode'
 import { useThemeStore } from '@/stores/modules/theme'
 import { useVisitedRowState } from '@/stores/modules/visitedRow'
 import { formatTimezone, formatNumber } from '@/utils/tools'
+import { useFiltersStore } from '@/stores/modules/filtersList'
+
+const filtersStore = useFiltersStore()
+const filtersList = computed(() => filtersStore.filtersList)
 
 const visitedRowState = useVisitedRowState()
 const themeStore = useThemeStore()
@@ -18,13 +22,30 @@ const props = defineProps({
   height: {
     type: Number,
     default: 440
-  },
-  tagsData: {
-    type: Array,
-    default: () => []
   }
 })
 
+const tagsData = computed(() => {
+  return filtersList.value.map((filter) => {
+    if (filter.keyType === 'dateRange') {
+      return {
+        title: filter.title,
+        value: filter.title + ': ' + filter.value[0] + ' To ' + filter.value[1]
+      }
+    } else if (filter.keyType === 'array') {
+      return {
+        title: filter.title,
+        value: filter.title + ': ' + filter.value.join(', ')
+      }
+    } else {
+      return {
+        title: filter.title,
+        value: filter.title + ': ' + filter.value
+      }
+    }
+  })
+})
+
 const tableLoadingTable = ref()
 const getLoadingData = (data: any) => {
   tableLoadingTable.value = data
@@ -115,7 +136,6 @@ assignPageInfo()
 
 const curTableData = ref([])
 const tempSearch = ref()
-const filterdataobj = ref()
 // 获得表格数据后赋值
 const assignTableData = (data: any) => {
   bookingTable.value.data = data.searchData || []
@@ -135,6 +155,7 @@ const assignTableData = (data: any) => {
 // 获取表格数据
 const getTableData = async (isPageChange?: boolean) => {
   const rc = isPageChange ? pageInfo.value.total : -1
+  const queryData = filtersStore.getQueryData
   // 保存页长以及当前页码
   sessionStorage.setItem('bookingTablePageInfo', JSON.stringify(pageInfo.value))
   tableLoadingTable.value = true
@@ -144,7 +165,7 @@ const getTableData = async (isPageChange?: boolean) => {
       ps: pageInfo.value.pageSize,
       rc,
       other_filed: '',
-      ...filterdataobj.value
+      ...queryData
     })
     .then((res: any) => {
       if (res.code === 200) {
@@ -162,7 +183,6 @@ const getTableData = async (isPageChange?: boolean) => {
 }
 // 查询列表数据
 const searchTableData = (data: any) => {
-  filterdataobj.value = data
   if (sessionStorage.getItem('BookingData') != null) {
     const data = JSON.parse(sessionStorage.getItem('BookingData') as string) || {}
     assignTableData(data)
@@ -299,7 +319,6 @@ const handleDownload = () => {
     }
   })
   downloadDialogRef.value.openDialog(
-    props.tagsData,
     curSelectedColumns,
     selectedNumber.value || pageInfo.value.total
   )
@@ -327,11 +346,11 @@ const getExportTableData = (status: number) => {
   } else {
     column = buildColumnString(allTable.value.columns)
   }
+  const queryData = filtersStore.getQueryData
 
   $api
     .getAllBookingTableData({
       selected_fields: column,
-      excel_filter_condition: props.tagsData.join(','),
       tmp_search: tempSearch.value
     })
     .then((res: any) => {

+ 39 - 4
src/views/Booking/src/components/BookingTable/src/components/DownloadDialog.vue

@@ -1,8 +1,32 @@
 <script setup lang="ts">
+import { useFiltersStore } from '@/stores/modules/filtersList'
+
+const filtersStore = useFiltersStore()
+const filtersList = computed(() => filtersStore.filtersList)
+
 const dialogVisible = ref(false)
 
-const openDialog = (tagsData: string[], selectedColumns: string[], slectedDataNumber: number) => {
-  listData.value = tagsData
+const listData = computed(() => {
+  return filtersList.value.map((filter) => {
+    if (filter.keyType === 'dateRange') {
+      return {
+        title: filter.title,
+        value: filter.title + ': ' + filter.value[0] + ' To ' + filter.value[1]
+      }
+    } else if (filter.keyType === 'array') {
+      return {
+        title: filter.title,
+        value: filter.title + ': ' + filter.value.join(', ')
+      }
+    } else {
+      return {
+        title: filter.title,
+        value: filter.title + ': ' + filter.value
+      }
+    }
+  })
+})
+const openDialog = (selectedColumns: string[], slectedDataNumber: number) => {
   selectedDataNumber.value = slectedDataNumber
   columns.value = selectedColumns
   dialogVisible.value = true
@@ -12,7 +36,6 @@ const isShowSelectColumn = ref(false)
 
 const downloadFilter = ref(1)
 const selectedDataNumber = ref(0)
-const listData = ref()
 
 const columns = ref()
 
@@ -44,7 +67,19 @@ defineExpose({
           </div>
         </div>
         <div class="data-filter">
-          <div class="filter-item" v-for="item in listData" :key="item">{{ item }}</div>
+          <div class="filter-item" v-for="item in listData" :key="item.title">
+            <el-tooltip
+              class="box-item"
+              effect="dark"
+              :content="item.value"
+              placement="top"
+              :popper-style="{ maxWidth: '500px', whiteSpace: 'normal', wordWrap: 'break-word' }"
+              v-if="item.value.length > 39"
+            >
+              {{ item.value.length > 39 ? item.value.slice(0, 39) + '...' : item.value }}
+            </el-tooltip>
+            <div v-else>{{ item.value }}</div>
+          </div>
         </div>
         <div class="download-filter">
           <el-radio-group v-model="downloadFilter">

+ 24 - 27
src/views/Dashboard/src/DashboardView.new.vue

@@ -58,32 +58,28 @@ const RevenueDefaultData = ref()
 // 获取首页数据
 let dashboardObj: any = {}
 const GetDashboardData = () => {
-  $api
-    .getDashboardFilters({})
-    .then((res: any) => {
-      if (res.code == 200) {
-        //给默认筛选条件赋值
-        KPIDefaulteData.value = res.data.KPIDefaulteData
-        dashboardObj.KPIDefaulteData = res.data.KPIDefaulteData
-        PendingDefaulteData.value = res.data.PendingDefaultData
-        dashboardObj.PendingDefaultData = res.data.PendingDefaultData
-        RecentDefaulteData.value = res.data.RecentDefaultData
-        dashboardObj.RecentDefaultData = res.data.RecentDefaultData
-        ETDDefaulteData.value = res.data.ETDDefaultData
-        dashboardObj.ETDDefaultData = res.data.ETDDefaultData
-        ContainerefaultData.value = res.data.ContainerefaultData
-        dashboardObj.ContainerefaultData = res.data.ContainerefaultData
-        Top10DefaultData.value = res.data.Top10faultData
-        dashboardObj.Top10faultData = res.data.Top10faultData
-        Co2OriginDefaultData.value = res.data.OriginCo2Top10faultData
-        dashboardObj.OriginCo2Top10faultData = res.data.OriginCo2Top10faultData
-        Co2DestinationDefaultData.value = res.data.DestinationCo2Top10faultData
-        dashboardObj.DestinationCo2Top10faultData = res.data.DestinationCo2Top10faultData
-        RevenueDefaultData.value = res.data.RevenueDefaultData
-        dashboardObj.RevenueDefaultData = res.data.RevenueDefaultData
-      }
-    })
-    .finally(() => {
+  $api.getDashboardFilters({}).then((res: any) => {
+    if (res.code == 200) {
+      //给默认筛选条件赋值
+      KPIDefaulteData.value = res.data.KPIDefaulteData
+      dashboardObj.KPIDefaulteData = res.data.KPIDefaulteData
+      PendingDefaulteData.value = res.data.PendingDefaultData
+      dashboardObj.PendingDefaultData = res.data.PendingDefaultData
+      RecentDefaulteData.value = res.data.RecentDefaultData
+      dashboardObj.RecentDefaultData = res.data.RecentDefaultData
+      ETDDefaulteData.value = res.data.ETDDefaultData
+      dashboardObj.ETDDefaultData = res.data.ETDDefaultData
+      ContainerefaultData.value = res.data.ContainerefaultData
+      dashboardObj.ContainerefaultData = res.data.ContainerefaultData
+      Top10DefaultData.value = res.data.Top10faultData
+      dashboardObj.Top10faultData = res.data.Top10faultData
+      Co2OriginDefaultData.value = res.data.OriginCo2Top10faultData
+      dashboardObj.OriginCo2Top10faultData = res.data.OriginCo2Top10faultData
+      Co2DestinationDefaultData.value = res.data.DestinationCo2Top10faultData
+      dashboardObj.DestinationCo2Top10faultData = res.data.DestinationCo2Top10faultData
+      RevenueDefaultData.value = res.data.RevenueDefaultData
+      dashboardObj.RevenueDefaultData = res.data.RevenueDefaultData
+
       nextTick(() => {
         GetKpiData(KPIDefaulteData.value)
         GetPendingEcharts(PendingDefaulteData.value)
@@ -95,7 +91,8 @@ const GetDashboardData = () => {
         GetCo2DestinationEcharts(Co2DestinationDefaultData.value)
         GetRevenueEcharts(RevenueDefaultData.value)
       })
-    })
+    }
+  })
 }
 // 获取表单数据
 const getTableData = (isPage: any, val: any) => {

+ 1 - 1
src/views/Tracking/index.ts

@@ -1 +1 @@
-export { default } from './src/TrackingView.vue'
+export { default } from './src/TrackingView.new.vue'

+ 148 - 669
src/views/Tracking/src/TrackingView.new.vue

@@ -10,552 +10,107 @@ import { useCalculatingHeight } from '@/hooks/calculatingHeight'
 import { useHeaderSearch } from '@/stores/modules/headerSearch'
 import { useUserStore } from '@/stores/modules/user'
 import dayjs from 'dayjs'
-import {
-  FiltersType,
-  updateFilter,
-  deleteFilter,
-  getFilterIndex,
-  getFitler,
-  getTags
-} from '@/utils/filters'
+import { useFiltersStore } from '@/stores/modules/filtersList'
 
 const userStore = useUserStore()
 const formatDate = userStore.dateFormat
 const valueFormatDate = 'MM/DD/YYYY'
 
-const filtersList = ref<FiltersType[]>([])
-
-const initPage = () => {
-  if (sessionStorage.getItem('trackingFilters') != null) {
-    filtersList.value = getTags(
-      JSON.parse(sessionStorage.getItem('trackingFilters') as string)
-    ) as unknown as FiltersType[]
-  }
-}
-
-const headerSearch = useHeaderSearch()
 const filterRef: Ref<HTMLElement | null> = ref(null)
-
 const containerHeight = useCalculatingHeight(document.documentElement, 246, [filterRef])
 
-const TrackingSearch = ref()
-const tableLoadingTableData = ref(false)
-let searchTableQeuryTracking: any = {}
-const filterData = reactive({
-  filtersTagData: [] as Array<string>,
-  transportData: [] as Array<string>,
-  daterangeData: [] as Array<string>,
-  morefiltersData: [] as Array<string>,
-  dashboardData: [] as Array<string>
-})
-const tagsData: any = ref([])
-const handleClose = (tag: any) => {
-  emitter.emit('clearTag', tag)
-  tagsData.value.splice(tagsData.value.indexOf(tag), 1)
-  if (
-    sessionStorage.getItem('reportList') != null ||
-    sessionStorage.getItem('reportList') != '{}'
-  ) {
-    const reportList = JSON.parse(sessionStorage.getItem('reportList') as string) || {}
-    let data = JSON.parse(sessionStorage.getItem('tagsList') as string) || {}
-    if (tag.includes('Transport')) {
-      delete reportList.transport_mode
-    } else if (tag.includes('Day') || tag.includes('CO2e')) {
-      delete reportList._reportRef
-      delete reportList._reportType
-      delete reportList._reportRefe_date
-      delete reportList._reportRefb_date
-      delete reportList._reportStationType
-      delete reportList._reportDataType
-      delete reportList._reportStationType
-      filterData.dashboardData = []
-      data = {}
-    } else if (tag.includes('ETD')) {
-      filterData.daterangeData.forEach((item: any, index: any) => {
-        if (item.includes('ETD')) {
-          filterData.daterangeData.splice(index, 1)
-        }
-      })
-      delete reportList.etd_start
-      delete reportList.etd_end
-    } else if (tag.includes('ETA')) {
-      filterData.daterangeData.forEach((item: any, index: any) => {
-        if (item.includes('ETA')) {
-          filterData.daterangeData.splice(index, 1)
-        }
-      })
-      delete reportList.eta_start
-      delete reportList.eta_end
-    } else if (tag.includes('Origin')) {
-      delete reportList.shipper_city
-      delete reportList._city_name
-      filterData.dashboardData = []
-    } else if (tag.includes('Destination')) {
-      delete reportList.consignee_city
-    }
-    sessionStorage.setItem('reportList', JSON.stringify(reportList))
-    sessionStorage.setItem('tagsList', JSON.stringify(data))
-  }
-  if (tag.includes('Transport')) {
-    delete searchTableQeuryTracking.transport_mode
-  } else if (tag.includes('Day') || tag.includes('CO2e')) {
-    delete searchTableQeuryTracking._reportRef
-    delete searchTableQeuryTracking._reportType
-    delete searchTableQeuryTracking._reportRefe_date
-    delete searchTableQeuryTracking._reportRefb_date
-    delete searchTableQeuryTracking._reportStationType
-    delete searchTableQeuryTracking._reportDataType
-    delete searchTableQeuryTracking._reportStationType
-    filterData.dashboardData = []
-  } else if (tag.includes('ETD')) {
-    filterData.daterangeData.forEach((item: any, index: any) => {
-      if (item.includes('ETD')) {
-        filterData.daterangeData.splice(index, 1)
-      }
-    })
-    delete searchTableQeuryTracking.etd_start
-    delete searchTableQeuryTracking.etd_end
-  } else if (tag.includes('ETA')) {
-    filterData.daterangeData.forEach((item: any, index: any) => {
-      if (item.includes('ETA')) {
-        filterData.daterangeData.splice(index, 1)
-      }
-    })
-    delete searchTableQeuryTracking.eta_start
-    delete searchTableQeuryTracking.eta_end
-  } else if (tag.includes('Creation')) {
-    delete searchTableQeuryTracking.created_time_start
-    delete searchTableQeuryTracking.created_time_end
-  } else if (tag.includes('Shippername')) {
-    delete searchTableQeuryTracking.shipper
-  } else if (tag.includes('Consigneename')) {
-    delete searchTableQeuryTracking.consignee
-  } else if (tag.includes('Service')) {
-    delete searchTableQeuryTracking.service
-  } else if (tag.includes('Incoterms')) {
-    delete searchTableQeuryTracking.incoterms
-  } else if (tag.includes('Notify Party')) {
-    delete searchTableQeuryTracking.notify_party
-  } else if (tag.includes('Bill to')) {
-    delete searchTableQeuryTracking.billto
-  } else if (tag.includes('Origin Agent')) {
-    delete searchTableQeuryTracking.origin
-  } else if (tag.includes('Destination Agent')) {
-    delete searchTableQeuryTracking.agent
-  } else if (tag.includes('Destination Operator')) {
-    delete searchTableQeuryTracking.dest_op
-  } else if (tag.includes('Sales')) {
-    delete searchTableQeuryTracking.sales_rep
-  } else if (tag.includes('Origin')) {
-    delete searchTableQeuryTracking.shipper_city
-    delete searchTableQeuryTracking._city_name
-    filterData.dashboardData = []
-  } else if (tag.includes('Destination')) {
-    delete searchTableQeuryTracking.consignee_city
-  } else if (tag.includes('Place of Receipt')) {
-    delete searchTableQeuryTracking.place_of_receipt_exp
-  } else if (tag.includes('Port of Loading')) {
-    delete searchTableQeuryTracking.port_of_loading
-  } else if (tag.includes('Place of delivery')) {
-    delete searchTableQeuryTracking.place_of_delivery_exp
-  } else if (tag.includes('Place of Discharge')) {
-    delete searchTableQeuryTracking.port_of_discharge
-  } else if (tag.includes('Vessel')) {
-    delete searchTableQeuryTracking['f_vessel/vessel']
-  } else if (tag.includes('Voyage')) {
-    delete searchTableQeuryTracking['f_voyage/voyage']
-  }
-
-  sessionStorage.setItem('searchTableQeuryTracking', JSON.stringify(searchTableQeuryTracking))
-  getTrackingData()
-}
-// 筛选框查询
-const FiltersSeach = (val: any, value: any) => {
-  searchTableQeuryTracking[val] = value
+const filtersStore = useFiltersStore()
+const filtersList = computed(() => filtersStore.filtersList)
 
-  sessionStorage.setItem('searchTableQeuryTracking', JSON.stringify(searchTableQeuryTracking))
-  getTrackingData()
-}
-//TransportSearch
-const TransportSearch = (val: any) => {
-  filterData.transportData = []
-  if (val.data.length != 0) {
-    let str = `${val.title}:${val.data}`
-    filterData.transportData.push(str)
-  }
-  FiltersSeach('transport_mode', val.data)
-  renderTagsData()
-}
-// defaultTransport
-const defaultTransport = (val: any, value: any) => {
-  filterData.transportData = []
-  if (val.data.length != 0) {
-    let str = `${val.title}:${val.data}`
-    filterData.transportData.push(str)
-  }
-  if (sessionStorage.getItem('searchTableQeuryTracking') == null) {
-    if (
-      sessionStorage.getItem('clickParams') === null ||
-      sessionStorage.getItem('clickParams') === '{}'
-    ) {
-      searchTableQeuryTracking.transport_mode = val.data
-    }
-  } else {
-    searchTableQeuryTracking = value
-  }
-}
-const setFilterData = (dateRangeData: any) => {
-  filterData.daterangeData = []
-  for (const key in dateRangeData) {
-    const startEnd = dateRangeData[key].data[0] + ' To ' + dateRangeData[key].data[1]
-    let str = `${key}:${startEnd}`
-    filterData.daterangeData.push(str)
-  }
-}
-//defaultDate
-const defaultDate = (dateRangeData: any, data: any) => {
-  setFilterData(dateRangeData)
+const headerSearch = useHeaderSearch()
 
-  if (sessionStorage.getItem('searchTableQeuryTracking') == null) {
-    if (
-      sessionStorage.getItem('clickParams') === null ||
-      sessionStorage.getItem('clickParams') === '{}'
-    ) {
-      if (Object.keys(dateRangeData).length == 0) {
-        delete searchTableQeuryTracking.etd_start
-        delete searchTableQeuryTracking.etd_end
+const filterTagsList = computed(() => {
+  return filtersList.value.map((filter) => {
+    if (filter.keyType === 'dateRange') {
+      return {
+        title: filter.title,
+        value: filter.title + ': ' + filter.value[0] + ' To ' + filter.value[1]
       }
-      for (const key in dateRangeData) {
-        searchTableQeuryTracking.etd_start = dateRangeData[key].data[0]
-
-        searchTableQeuryTracking.etd_end = dateRangeData[key].data[1]
+    } else if (filter.keyType === 'array') {
+      return {
+        title: filter.title,
+        value: filter.title + ': ' + filter.value.join(', ')
       }
-    }
-  } else {
-    searchTableQeuryTracking = data
-    if (searchTableQeuryTracking._textSearch) {
-      TrackingSearch.value = searchTableQeuryTracking._textSearch
-    }
-  }
-
-  const rawData = localStorage.getItem('searchData')
-  const trackingData = rawData ? JSON.parse(rawData) : null
-  if (trackingData) {
-    // 根据顶部搜索框的搜索结果赋值
-    initDataByHeaderSearch()
-  } else if (!trackingData && !sessionStorage.getItem('clickParams')) {
-    getTrackingData()
-  }
-
-  renderTagsData()
-}
-//DateRangeSearch
-const DateRangeSearch = (dateRangeData: any) => {
-  setFilterData(dateRangeData)
-  if (Object.keys(dateRangeData).length == 0) {
-    delete searchTableQeuryTracking.etd_start
-    delete searchTableQeuryTracking.etd_end
-    delete searchTableQeuryTracking.eta_start
-    delete searchTableQeuryTracking.eta_end
-    delete searchTableQeuryTracking.created_time_start
-    delete searchTableQeuryTracking.created_time_end
-  }
-  const fieldList = [
-    {
-      title: 'ETD',
-      keys: ['etd_start', 'etd_end']
-    },
-    { title: 'ETA', keys: ['eta_start', 'eta_end'] },
-    { title: 'Creation Time', keys: ['created_time_start', 'created_time_end'] }
-  ]
-  fieldList.forEach((item) => {
-    if (!dateRangeData.hasOwnProperty(item.title)) {
-      // 删除不存在的字段
-      searchTableQeuryTracking[item.keys[0]] = undefined
-      searchTableQeuryTracking[item.keys[1]] = undefined
-    }
-  })
-  for (const key in dateRangeData) {
-    if (key == 'ETD') {
-      searchTableQeuryTracking.etd_start = dateRangeData[key].data[0]
-      searchTableQeuryTracking.etd_end = dateRangeData[key].data[1]
-    } else if (key == 'ETA') {
-      searchTableQeuryTracking.eta_start = dateRangeData[key].data[0]
-      searchTableQeuryTracking.eta_end = dateRangeData[key].data[1]
     } else {
-      searchTableQeuryTracking.created_time_start = dateRangeData[key].data[0]
-      searchTableQeuryTracking.created_time_end = dateRangeData[key].data[1]
-    }
-  }
-  sessionStorage.setItem('searchTableQeuryTracking', JSON.stringify(searchTableQeuryTracking))
-  getTrackingData()
-  renderTagsData()
-}
-//MoreFiltersSearch
-const MoreFiltersSearch = (val: any, value: any) => {
-  filterData.morefiltersData = []
-  if (Object.keys(value).length == 0) {
-    delete searchTableQeuryTracking.shipper
-    delete searchTableQeuryTracking.consignee
-    delete searchTableQeuryTracking.service
-    delete searchTableQeuryTracking.incoterms
-    delete searchTableQeuryTracking.notify_party
-    delete searchTableQeuryTracking.billto
-    delete searchTableQeuryTracking.origin
-    delete searchTableQeuryTracking.agent
-    delete searchTableQeuryTracking.sales_rep
-    delete searchTableQeuryTracking.dest_op
-    delete searchTableQeuryTracking.consignee_city
-    delete searchTableQeuryTracking.place_of_receipt_exp
-    delete searchTableQeuryTracking.place_of_delivery_exp
-    delete searchTableQeuryTracking.port_of_discharge
-    delete searchTableQeuryTracking.shipper_city
-    delete searchTableQeuryTracking['port_of_loading/fport_of_loading_un']
-    delete searchTableQeuryTracking['f_vessel/vessel']
-    delete searchTableQeuryTracking['f_voyage/voyage']
-  }
-  for (const key in val) {
-    let str = `${key}:${val[key]}`
-    filterData.morefiltersData.push(str)
-    if (key == 'Shippername') {
-      searchTableQeuryTracking.shipper = value[key]
-    } else if (key == 'Consigneename') {
-      searchTableQeuryTracking.consignee = value[key]
-    } else if (key == 'Service') {
-      searchTableQeuryTracking.service = value[key]
-    } else if (key == 'Incoterms') {
-      searchTableQeuryTracking.incoterms = value[key]
-    } else if (key == 'Notify Party') {
-      searchTableQeuryTracking.notify_party = value[key]
-    } else if (key == 'Bill to') {
-      searchTableQeuryTracking.billto = value[key]
-    } else if (key == 'Origin Agent') {
-      searchTableQeuryTracking.origin = value[key]
-    } else if (key == 'Destination Agent') {
-      searchTableQeuryTracking.agent = value[key]
-    } else if (key == 'Destination Operator') {
-      searchTableQeuryTracking.dest_op = value[key]
-    } else if (key == 'Sales') {
-      searchTableQeuryTracking.sales_rep = value[key]
-    } else if (key == 'Destination') {
-      searchTableQeuryTracking.consignee_city = value[key]
-    } else if (key == 'Place of Receipt') {
-      searchTableQeuryTracking.place_of_receipt_exp = value[key]
-    } else if (key == 'Origin') {
-      searchTableQeuryTracking.shipper_city = value[key]
-    } else if (key == 'Port of Loading') {
-      searchTableQeuryTracking['port_of_loading/fport_of_loading_un'] = value[key]
-    } else if (key == 'Place of delivery') {
-      searchTableQeuryTracking.place_of_delivery_exp = value[key]
-    } else if (key == 'Port of Discharge') {
-      searchTableQeuryTracking.port_of_discharge = value[key]
-    } else if (key == 'Vessel') {
-      searchTableQeuryTracking['f_vessel/vessel'] = value[key]
-    } else if (key == 'Voyage') {
-      searchTableQeuryTracking['f_voyage/voyage'] = value[key]
-    }
-  }
-  sessionStorage.setItem('searchTableQeuryTracking', JSON.stringify(searchTableQeuryTracking))
-  getTrackingData()
-  renderTagsData()
-}
-const defaultMorefilters = (val: any, value: any, data: any) => {
-  filterData.morefiltersData = []
-  for (const key in val) {
-    let str = `${key}:${val[key]}`
-    filterData.morefiltersData.push(str)
-    for (const key in val) {
-      if (key == 'Shippername') {
-        searchTableQeuryTracking.shipper = value[key]
-      } else if (key == 'Consigneename') {
-        searchTableQeuryTracking.consignee = value[key]
-      } else if (key == 'Service') {
-        searchTableQeuryTracking.service = value[key]
-      } else if (key == 'Incoterms') {
-        searchTableQeuryTracking.incoterms = value[key]
-      } else if (key == 'Notify Party') {
-        searchTableQeuryTracking.notify_party = value[key]
-      } else if (key == 'Bill to') {
-        searchTableQeuryTracking.billto = value[key]
-      } else if (key == 'Destination Operator') {
-        searchTableQeuryTracking.dest_op = value[key]
-      } else if (key == 'Origin Agent') {
-        searchTableQeuryTracking.origin = value[key]
-      } else if (key == 'Destination Agent') {
-        searchTableQeuryTracking.agent = value[key]
-      } else if (key == 'Sales') {
-        searchTableQeuryTracking.sales_rep = value[key]
-      } else if (key == 'Origin') {
-        searchTableQeuryTracking.shipper_city = value[key]
-      } else if (key == 'Destination') {
-        searchTableQeuryTracking.consignee_city = value[key]
-      } else if (key == 'Place of Receipt') {
-        searchTableQeuryTracking.place_of_receipt_exp = value[key]
-      } else if (key == 'Port of Loading') {
-        searchTableQeuryTracking.port_of_loading = value[key]
-      } else if (key == 'Place of delivery') {
-        searchTableQeuryTracking.place_of_delivery_exp = value[key]
-      } else if (key == 'Place of Discharge') {
-        searchTableQeuryTracking.port_of_discharge = value[key]
-      } else if (key == 'Vessel') {
-        searchTableQeuryTracking['f_vessel/vessel'] = value[key]
-      } else if (key == 'Voyage') {
-        searchTableQeuryTracking['f_voyage/voyage'] = value[key]
+      return {
+        title: filter.title,
+        value: filter.title + ': ' + filter.value
       }
     }
-    if (sessionStorage.getItem('searchTableQeuryTracking') != null) {
-      searchTableQeuryTracking = data
-    }
-  }
-}
-const clearfilters = () => {
-  TrackingSearch.value = ''
-  filterData.filtersTagData = []
-  tagsData.value = []
-  let str = 'Shipment status: All'
-  filterData.filtersTagData.push(str)
-  filterData.transportData = []
-  filterData.daterangeData = []
-  filterData.morefiltersData = []
-  filterData.dashboardData = []
-  emitter.emit('clearTag', 'Shipment status')
-  emitter.emit('clearTag', 'Transport Mode')
-  emitter.emit('clearTag', 'ETD')
-  emitter.emit('clearTag', 'ETA')
-  emitter.emit('clearTag', 'Creation Time')
-  emitter.emit('clearTag', 'Shippername')
-  emitter.emit('clearTag', 'Consigneename')
-  emitter.emit('clearTag', 'Service')
-  emitter.emit('clearTag', 'Incoterms')
-  emitter.emit('clearTag', 'Notify Party')
-  emitter.emit('clearTag', 'Bill to')
-  emitter.emit('clearTag', 'Origin Agent')
-  emitter.emit('clearTag', 'Destination Agent')
-  emitter.emit('clearTag', 'Destination Operator')
-  emitter.emit('clearTag', 'Sales')
-  emitter.emit('clearTag', 'Origin')
-  emitter.emit('clearTag', 'Destination')
-  emitter.emit('clearTag', 'Place of Receipt')
-  emitter.emit('clearTag', 'Port of Loading')
-  emitter.emit('clearTag', 'Place of delivery')
-  emitter.emit('clearTag', 'Port of Discharge')
-  emitter.emit('clearTag', 'Vessel')
-  emitter.emit('clearTag', 'Voyage')
-  searchTableQeuryTracking = {}
-  searchTableQeuryTracking.filterTag = ['All']
-  sessionStorage.setItem('searchTableQeuryTracking', JSON.stringify(searchTableQeuryTracking))
-  if (
-    sessionStorage.getItem('reportList') != null ||
-    sessionStorage.getItem('reportList') != '{}'
-  ) {
-    // sessionStorage.removeItem('reportList')
-    sessionStorage.removeItem('tagsList')
-  }
-  getTrackingData()
-  renderTagsData()
-}
-const renderTagsData = () => {
-  const data = JSON.parse(sessionStorage.getItem('tagsList') as string) || {}
-  if (Object.keys(data).length != 0) {
-    let str = `${data.title}:${data.name}`
-    !filterData.dashboardData.includes(str) && filterData.dashboardData.push(str)
-  }
-  tagsData.value = []
-  if (filterData.transportData.length) {
-    tagsData.value.push(filterData.transportData[0])
-  }
-  if (filterData.daterangeData.length) {
-    filterData.daterangeData.forEach((item) => {
-      tagsData.value.push(item)
-    })
-  }
-  if (filterData.morefiltersData.length) {
-    filterData.morefiltersData.forEach((item) => {
-      tagsData.value.push(item)
+  })
+})
+const initPage = () => {
+  if (!filtersList.value || (filtersList.value && filtersList.value.length == 0)) {
+    filtersStore.updateFilter({
+      title: 'Transport Mode',
+      value: ['All'],
+      keyType: 'array',
+      key: 'transport_mode'
     })
-  }
-  if (filterData.dashboardData.length) {
-    filterData.dashboardData.forEach((item) => {
-      tagsData.value.push(item)
+    filtersStore.updateFilter({
+      title: 'ETD',
+      value: [
+        dayjs().subtract(2, 'month').startOf('month').format(formatDate),
+        dayjs().add(1, 'month').format(formatDate)
+      ],
+      keyType: 'dateRange',
+      key: ['etd_start', 'etd_end']
     })
-  }
-  if (filterData.filtersTagData.length) {
-    filterData.filtersTagData.forEach((item) => {
-      tagsData.value.push(item)
+    filtersStore.updateFilter({
+      title: 'Shipment Status',
+      value: ['All'],
+      keyType: 'array',
+      key: 'filterTag'
     })
+  } else {
   }
 }
-// 清除 Transport Tags
-const clearTransportTags = () => {
-  filterData.transportData = []
-}
-// 清除 Daterange Tags
-const clearDaterangeTags = () => {
-  filterData.daterangeData = []
-}
-// 清除 MoreFilters Tags
-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
-    let obj = {
-      IncotermsList: data.trackingData.IncotermsList,
-      ServiceList: data.trackingData.ServiceList
-    }
-    sessionStorage.setItem('incotermsList', JSON.stringify(obj))
-    headerSearch.clearSearchData()
-    tagsData.value = []
-    filterData.transportData = []
-    filterData.daterangeData = []
-    filterData.morefiltersData = []
-    filterData.dashboardData = []
-    filterData.filtersTagData = []
-    let str = 'Shipment status: All'
-    filterData.filtersTagData.push(str)
-    searchTableQeuryTracking = {}
-    sessionStorage.removeItem('searchTableQeuryTracking')
-    searchTableQeuryTracking._textSearch = TrackingSearch.value
-    searchTableQeuryTracking.filterTag = ['All']
+initPage()
+
+const TrackingSearch = ref()
+const tableLoadingTableData = ref(false)
 
-    sessionStorage.setItem('searchTableQeuryTracking', JSON.stringify(searchTableQeuryTracking))
-    setTimeout(() => {
-      emitter.emit('clearTag', 'Shipment status')
-      emitter.emit('clearTag', 'Transport Mode')
-      emitter.emit('clearTag', 'ETD')
-      emitter.emit('clearTag', 'ETA')
-      emitter.emit('clearTag', 'Creation Time')
-      emitter.emit('clearTag', 'Shippername')
-      emitter.emit('clearTag', 'Consigneename')
-      emitter.emit('clearTag', 'Service')
-      emitter.emit('clearTag', 'Incoterms')
-      emitter.emit('clearTag', 'Notify Party')
-      emitter.emit('clearTag', 'Bill to')
-      emitter.emit('clearTag', 'Origin Agent')
-      emitter.emit('clearTag', 'Destination Agent')
-      emitter.emit('clearTag', 'Destination Operator')
-      emitter.emit('clearTag', 'Sales')
-      emitter.emit('clearTag', 'Origin')
-      emitter.emit('clearTag', 'Destination')
-      emitter.emit('clearTag', 'Place of Receipt')
-      emitter.emit('clearTag', 'Port of Loading')
-      emitter.emit('clearTag', 'Place of delivery')
-      emitter.emit('clearTag', 'Port of Discharge')
-      emitter.emit('clearTag', 'Vessel')
-      emitter.emit('clearTag', 'Voyage')
-    }, 2000)
-    renderTagsData()
+const tabList = ref([
+  {
+    name: 'All',
+    number: 0,
+    checked: true,
+    type: 'all'
+  },
+  {
+    name: 'Created',
+    number: 0,
+    checked: false,
+    type: 'created'
+  },
+  {
+    name: 'Confirmed',
+    number: 0,
+    checked: false,
+    type: 'confirmed'
+  },
+  {
+    name: 'Cancelled',
+    number: 0,
+    checked: false,
+    type: 'cancelled'
   }
+])
+
+// 筛选框查询
+const FiltersSeach = (val: any, value: any) => {
+  getTrackingData()
 }
+//TransportSearch
+const TransportSearch = (val: any) => {}
+
+//defaultDate
 
 // 从 store 中获取数据并绑定到输入框
 const headerSearchdData = computed(() => headerSearch.searchValue)
@@ -564,37 +119,19 @@ watch(
   () => headerSearchdData.value,
   (newData) => {
     if (newData) {
-      initDataByHeaderSearch()
+      // 从顶部获取的值
     }
   }
 )
 
 const TrackingTable_ref = ref()
-const TransportListItem = ref()
-interface ListItem {
-  name: string
-  number: number
-  type: string
-  checked: boolean
-}
-const TagsList = ref<ListItem[]>([])
-const filterTag = ref(['All'])
+const transportListItem = ref()
+
 const isShowAlertIcon = ref(false)
+const incotermsList = ref([])
+const serviceList = ref([])
 const getTrackingData = () => {
-  const dateRangeKeys = [
-    'etd_start',
-    'etd_end',
-    'eta_start',
-    'eta_end',
-    'created_time_start',
-    'created_time_end'
-  ]
-  const curRangeData = {}
-  for (const key of dateRangeKeys) {
-    if (searchTableQeuryTracking[key]) {
-      curRangeData[key] = dayjs(searchTableQeuryTracking[key], formatDate).format(valueFormatDate)
-    }
-  }
+  const queryData = filtersStore.getQueryData
 
   tableLoadingTableData.value = true
   TrackingTable_ref.value.getLoadingData(tableLoadingTableData.value)
@@ -604,33 +141,26 @@ const getTrackingData = () => {
       ps: TrackingTable_ref.value.pageInfo.pageSize,
       rc: -1,
       other_filed: '',
-      ...searchTableQeuryTracking,
-      ...curRangeData
+      ...queryData
     })
     .then((res: any) => {
       if (res.code === 200) {
-        TransportListItem.value = res.data.TransportList
-        TagsList.value = res.data.tagsList
-        let obj = {
-          IncotermsList: res.data.IncotermsList,
-          ServiceList: res.data.ServiceList
-        }
-        let taglist: any = []
-        if (Object.keys(filterData.filtersTagData).length == 0) {
-          TagsList.value.forEach((item: any) => {
-            if (item.checked == true) {
-              taglist.push(item.name)
-            }
-          })
-          let str = 'Shipment status: ' + taglist.toString()
-          filterData.filtersTagData.push(str)
-          filterData.filtersTagData.forEach((item) => {
-            tagsData.value.push(item)
-          })
-        }
-        sessionStorage.setItem('incotermsList', JSON.stringify(obj))
+        transportListItem.value = res.data.TransportList
+        tabList.value = res.data.tagsList
+        const checkedTabNames = tabList.value
+          .filter((item) => item.checked)
+          .map((item) => item.name)
+        filtersStore.updateFilter({
+          title: 'Shipment Status',
+          value: checkedTabNames,
+          keyType: 'array',
+          key: 'filterTag'
+        })
+        incotermsList.value = res.data.IncotermsList
+        serviceList.value = res.data.ServiceList
+
         sessionStorage.setItem('TrackingData', JSON.stringify(res.data))
-        TrackingTable_ref.value.searchTableData(searchTableQeuryTracking)
+        TrackingTable_ref.value.searchTableData()
         // 查询没结果的话显示icon
         if (TrackingSearch.value != '' && TrackingSearch.value != undefined) {
           if (res.data.searchData.length == 0) {
@@ -641,96 +171,56 @@ const getTrackingData = () => {
         }
       }
     })
-    .finally(() => {
-      sessionStorage.removeItem('clickParams')
-    })
 }
 onMounted(() => {
-  if (
-    sessionStorage.getItem('clickParams') != null &&
-    sessionStorage.getItem('clickParams') != '{}'
-  ) {
-    const reportList = JSON.parse(sessionStorage.getItem('reportList') as string) || {}
-    for (const key in reportList) {
-      let str = ''
-      switch (key) {
-        case 'etd_start':
-          const startDate = dayjs(reportList['etd_start'], valueFormatDate).format(formatDate)
-          searchTableQeuryTracking['etd_start'] = startDate
-          const endDate = dayjs(reportList['etd_end'], valueFormatDate).format(formatDate)
-          searchTableQeuryTracking['etd_end'] = endDate
-          const startEnd = startDate + ' To ' + endDate
-          str = `ETD:${startEnd}`
-          // filterData.daterangeData.push(str)
-          break
-
-        case 'etd_end':
-          break
-        case 'eta_start':
-          const etaStart = dayjs(reportList['eta_start'], valueFormatDate).format(formatDate)
-          searchTableQeuryTracking['eta_start'] = etaStart
-          const etaEnd = dayjs(reportList['eta_end'], valueFormatDate).format(formatDate)
-          searchTableQeuryTracking['eta_end'] = etaEnd
-          str = `ETA:${etaStart} To ${etaEnd}`
-          // filterData.daterangeData.push(str)
-          break
-
-        case 'eta_end':
-          break
-        case 'created_time_start':
-          const createdTimeStart = dayjs(reportList['created_time_start'], valueFormatDate).format(
-            formatDate
-          )
-          searchTableQeuryTracking['created_time_start'] = createdTimeStart
-          const createdTimeEnd = dayjs(reportList['created_time_end'], valueFormatDate).format(
-            formatDate
-          )
-          searchTableQeuryTracking['created_time_end'] = createdTimeEnd
-          str = `Creation Time:${createdTimeStart} To ${createdTimeEnd}`
-          // filterData.daterangeData.push(str)
-          break
-        case 'created_time_end':
-          break
-        default:
-          searchTableQeuryTracking[key] = reportList[key]
-      }
-    }
-
-    // sessionStorage.removeItem('reportList')
-    sessionStorage.setItem('searchTableQeuryTracking', JSON.stringify(searchTableQeuryTracking))
-    getTrackingData()
-  }
-  renderTagsData()
+  getTrackingData()
 })
-const changeTag = (val: any, boolean: any) => {
-  filterData.filtersTagData = []
-  searchTableQeuryTracking.filterTag = val
-  let str = 'Shipment status: ' + val
-  filterData.filtersTagData.push(str)
-  filterTag.value = val
 
-  sessionStorage.setItem('searchTableQeuryTracking', JSON.stringify(searchTableQeuryTracking))
-  if (boolean) {
-    getTrackingData()
-  }
-  renderTagsData()
+const tabChange = (changeTabList: any) => {
+  tabList.value = changeTabList
+  const checkedTabNames = tabList.value.filter((item) => item.checked).map((item) => item.name)
+  filtersStore.updateFilter({
+    title: 'Shipment Status',
+    value: checkedTabNames,
+    keyType: 'array',
+    key: 'filterTag'
+  })
+
+  getTrackingData()
 }
 // 点击search按钮
 const SearchInput = () => {
-  searchTableQeuryTracking._textSearch = TrackingSearch.value
-
-  sessionStorage.setItem('searchTableQeuryTracking', JSON.stringify(searchTableQeuryTracking))
-  getTrackingData()
+  TrackingTable_ref.value.searchTableData()
 }
 
 import TrackingGuide from './components/TrackingGuide.vue'
 import { useGuideStore } from '@/stores/modules/guide'
+import { onBeforeRouteLeave } from 'vue-router'
 
 const guideStore = useGuideStore()
 const trackingGuideRef = ref()
 const handleGuide = () => {
   trackingGuideRef.value.startGuide() // 开始引导
 }
+
+const clearfilters = () => {}
+
+const handleClose = (tagTitle: any) => {
+  filtersStore.deleteFilterByTitle(tagTitle)
+  getTrackingData()
+}
+
+const clearDaterangeTags = () => {}
+
+const clearMoreFiltersTags = () => {}
+
+onBeforeRouteLeave((route: any) => {
+  // guideStore.clearGuide()
+  const whiteList = ['Booking Detail', 'Tracking Detail']
+  if (!whiteList.includes(route?.name)) {
+    filtersStore.clearFilters()
+  }
+})
 </script>
 
 <template>
@@ -742,7 +232,7 @@ const handleGuide = () => {
   <div class="display" ref="filterRef">
     <div class="filter-box">
       <div class="filters-container" id="filters-container-guide">
-        <FilterTags :TagsListItem="TagsList" @changeTag="changeTag"></FilterTags>
+        <FilterTags :tagsList="tabList" @changeTag="tabChange"></FilterTags>
         <div class="heaer_top">
           <div class="search">
             <el-input
@@ -778,63 +268,52 @@ const handleGuide = () => {
           </div>
 
           <TransportMode
-            :isShipment="true"
-            :TransportListItem="TransportListItem"
+            :transportListItem="transportListItem"
             @TransportSearch="TransportSearch"
-            @defaultTransport="defaultTransport"
-            @clearTransportTags="clearTransportTags"
           ></TransportMode>
           <DateRange
-            :isShipment="true"
-            @DateRangeSearch="DateRangeSearch"
+            @DateRangeSearch="getTrackingData()"
             @clearDaterangeTags="clearDaterangeTags"
-            @defaultDate="defaultDate"
           ></DateRange>
         </div>
       </div>
       <MoreFilters
-        :isShipment="true"
-        :searchTableQeury="searchTableQeuryTracking"
-        @MoreFiltersSearch="MoreFiltersSearch"
+        :incotermsList="incotermsList"
+        :serviceList="serviceList"
         @clearMoreFiltersTags="clearMoreFiltersTags"
-        @defaultMorefilters="defaultMorefilters"
         :isShowMoreFiltersGuidePhoto="guideStore.tracking.isShowMoreFiltersGuidePhoto"
-        :pageMode="'tracking'"
       ></MoreFilters>
       <el-button class="el-button--dark" style="margin-left: 8px" @click="SearchInput"
         >Search</el-button
       >
     </div>
     <!-- 筛选项 -->
-    <div class="filtersTag" v-if="tagsData.length" id="filter-tag-guide">
+    <div class="filtersTag" v-if="filterTagsList.length" id="filter-tag-guide">
       <el-tag
-        :key="tag"
+        :key="tag.title"
         class="tag"
-        v-for="tag in tagsData"
-        :closable="!tag.includes('Shipment')"
+        v-for="tag in filterTagsList"
+        :closable="!tag.title.includes('Shipment')"
         :disable-transitions="false"
-        @close="handleClose(tag)"
+        @close="handleClose(tag.title)"
         color="#EFEFF0"
       >
         <el-tooltip
           class="box-item"
           effect="dark"
-          :content="tag"
+          :content="tag.value"
           placement="top"
-          v-if="tag.length > 39"
+          :popper-style="{ maxWidth: '500px', whiteSpace: 'normal', wordWrap: 'break-word' }"
+          v-if="tag.value.length > 39"
         >
-          {{ tag.length > 39 ? tag.substr(0, 39) + '...' : tag }}
+          {{ tag.value.length > 39 ? tag.value.slice(0, 39) + '...' : tag.value }}
         </el-tooltip>
-        <div v-else>{{ tag }}</div>
+        <div v-else>{{ tag.value }}</div>
       </el-tag>
       <div class="text_button" @click="clearfilters">Clear Filters</div>
     </div>
   </div>
-  <TrackingTable
-    :height="containerHeight"
-    :tagsData="tagsData"
-    ref="TrackingTable_ref"
-  ></TrackingTable>
+  <TrackingTable :height="containerHeight" ref="TrackingTable_ref"></TrackingTable>
 </template>
 
 <style lang="scss" scoped>

+ 7 - 45
src/views/Tracking/src/components/TrackingTable/src/TrackingTable.vue

@@ -11,6 +11,9 @@ import { useThemeStore } from '@/stores/modules/theme'
 import { useVisitedRowState } from '@/stores/modules/visitedRow'
 import { formatTimezone, formatNumber } from '@/utils/tools'
 import { useTrackingDownloadData } from '@/stores/modules/trackingDownloadData'
+import { useFiltersStore } from '@/stores/modules/filtersList'
+
+const filtersStore = useFiltersStore()
 
 const visitedRowState = useVisitedRowState()
 const themeStore = useThemeStore()
@@ -21,10 +24,6 @@ const props = defineProps({
   height: {
     type: Number,
     default: 440
-  },
-  tagsData: {
-    type: Array,
-    default: () => []
   }
 })
 const tableLoadingTable = ref()
@@ -154,7 +153,6 @@ const assignTableData = (data: any) => {
   }, 1000)
 }
 
-const filterdataobj = ref()
 const getSharedTableData = () => {
   const trackingData = JSON.parse(localStorage.getItem('searchData'))?.trackingData
   if (trackingData) {
@@ -177,13 +175,14 @@ const getTableData = async (isPageChange?: boolean) => {
   sessionStorage.setItem('trackingTablePageInfo', JSON.stringify(pageInfo.value))
   tableLoadingTable.value = true
   const rc = isPageChange ? pageInfo.value.total : -1
+  const queryData = filtersStore.getQueryData
   await $api
     .getTrackingTableData({
       cp: pageInfo.value.pageNo,
       ps: pageInfo.value.pageSize,
       rc,
       other_filed: '',
-      ...filterdataobj.value
+      ...queryData
     })
     .then((res: any) => {
       if (res.code === 200) {
@@ -198,46 +197,11 @@ const getTableData = async (isPageChange?: boolean) => {
       selectedNumber.value = 0
       selectedTableData.value = []
     })
-  // if (
-  //   sessionStorage.getItem('clickParams') != null &&
-  //   sessionStorage.getItem('clickParams') != '{}'
-  // ) {
-  //   const data = JSON.parse(sessionStorage.getItem('clickParams') as string) || {}
-  //   assignTableData(data)
-  //   nextTick(() => {
-  //     tableRef.value && autoWidth(trackingTable.value, tableRef.value)
-  //     tableLoadingTable.value = false
-  //     selectedNumber.value = 0
-  //     selectedTableData.value = []
-  //   })
-  // } else {
-  //   await $api
-  //     .getTrackingTableData({
-  //       cp: pageInfo.value.pageNo,
-  //       ps: pageInfo.value.pageSize,
-  //       rc,
-  //       other_filed: '',
-  //       ...filterdataobj.value
-  //     })
-  //     .then((res: any) => {
-  //       if (res.code === 200) {
-  //         assignTableData(res.data)
-  //       }
-  //     })
-  //     .finally(() => {
-  //       nextTick(() => {
-  //         tableRef.value && autoWidth(trackingTable.value, tableRef.value)
-  //         tableLoadingTable.value = false
-  //       })
-  //       selectedNumber.value = 0
-  //       selectedTableData.value = []
-  //     })
-  // }
 }
 
 // 查询列表数据
-const searchTableData = (data: any) => {
-  filterdataobj.value = data
+const searchTableData = () => {
+  console.log(sessionStorage.getItem('TrackingData'), 'tableData')
   if (sessionStorage.getItem('TrackingData') != null) {
     const data = JSON.parse(sessionStorage.getItem('TrackingData') as string) || {}
     assignTableData(data)
@@ -387,7 +351,6 @@ const handleDownload = () => {
     }
   })
   downloadDialogRef.value.openDialog(
-    props.tagsData,
     curSelectedColumns,
     selectedNumber.value || pageInfo.value.total
   )
@@ -443,7 +406,6 @@ const getExportTableData = (status: number) => {
   $api
     .getAllTrackingTableData({
       selected_fields: column,
-      excel_filter_condition: props.tagsData.join(','),
       tmp_search: tempSearch.value
     })
     .then((res: any) => {

+ 44 - 5
src/views/Tracking/src/components/TrackingTable/src/components/DownloadDialog.vue

@@ -1,8 +1,32 @@
 <script setup lang="ts">
+import { useFiltersStore } from '@/stores/modules/filtersList'
+
+const filtersStore = useFiltersStore()
+const filtersList = computed(() => filtersStore.filtersList)
+
 const dialogVisible = ref(false)
 
-const openDialog = (tagsData: string[], selectedColumns: string[], slectedDataNumber: number) => {
-  listData.value = tagsData
+const listData = computed(() => {
+  return filtersList.value.map((filter) => {
+    if (filter.keyType === 'dateRange') {
+      return {
+        title: filter.title,
+        value: filter.title + ': ' + filter.value[0] + ' To ' + filter.value[1]
+      }
+    } else if (filter.keyType === 'array') {
+      return {
+        title: filter.title,
+        value: filter.title + ': ' + filter.value.join(', ')
+      }
+    } else {
+      return {
+        title: filter.title,
+        value: filter.title + ': ' + filter.value
+      }
+    }
+  })
+})
+const openDialog = (selectedColumns: string[], slectedDataNumber: number) => {
   selectedDataNumber.value = slectedDataNumber
   columns.value = selectedColumns
   dialogVisible.value = true
@@ -13,8 +37,6 @@ const isShowSelectColumn = ref(false)
 const downloadFilter = ref(1)
 const selectedDataNumber = ref(0)
 
-const listData = ref()
-
 const columns = ref()
 
 const emits = defineEmits<{ export: [number] }>()
@@ -44,7 +66,19 @@ defineExpose({
           </div>
         </div>
         <div class="data-filter">
-          <div class="filter-item" v-for="item in listData" :key="item">{{ item }}</div>
+          <div class="filter-item" v-for="item in listData" :key="item.title">
+            <el-tooltip
+              class="box-item"
+              effect="dark"
+              :content="item.value"
+              placement="top"
+              :popper-style="{ maxWidth: '500px', whiteSpace: 'normal', wordWrap: 'break-word' }"
+              v-if="item.value.length > 39"
+            >
+              {{ item.value.length > 39 ? item.value.slice(0, 39) + '...' : item.value }}
+            </el-tooltip>
+            <div v-else>{{ item.value }}</div>
+          </div>
         </div>
         <div class="download-filter">
           <el-radio-group v-model="downloadFilter">
@@ -129,6 +163,11 @@ defineExpose({
     }
 
     .column-number {
+      display: inline-flex;
+      align-items: center;
+      justify-content: center;
+      min-width: 18px;
+      height: 18px;
       padding: 3px 5px;
       background-color: var(--color-theme);
       border-radius: 12px;