浏览代码

Merge branch 'dev' of https://git.citupro.com/zhengnaiwen_citu/menduner into dev

Xiao_123 7 月之前
父节点
当前提交
c2b8b2e40c

+ 57 - 15
src/views/recruit/personal/position/components/conditionFilter.vue

@@ -13,7 +13,7 @@
           :itemText="item.itemText"
           :displayDictName="item.displayDictName"
           :provideData="item.provideData || []"
-          btnClass="mt-1"
+          btnClass="mt-2"
           @inputChange="inputChange"
         ></component>
       </template>
@@ -46,6 +46,7 @@
 import { useRoute } from 'vue-router'; const route = useRoute()
 import { watch, ref, shallowRef, nextTick } from 'vue'
 import { filterList, getItemObj } from './dict'
+import { getDict } from '@/hooks/web/useDictionaries'
 defineOptions({name: 'retrieval-components-conditionFilter'})
 const emits = defineEmits(['change', 'reset'])
 const props = defineProps({
@@ -118,42 +119,83 @@ const deleteChip = (item, val) => { // 删除某个标签-更新路由 val结构
   inputChange({ idName: item.key, values: ids })
 }
 
+let cityLevel2 = []
 const showSelectList = ref([])
-// 添加
-const assembleList = ({ key, idsStr }) => {
+const assembleList = async ({ key, idsStr, isRefresh = false }) => {
+  if (isRefresh && key === 'cityId_1') {
+    const res = await getDict('areaTreeData', null, 'areaTreeData')
+    const data = res?.data?.length ? res.data : []
+    const item = data.find(e => e.id === idsStr)
+    if (item) {
+      cityLevel2 = item.children?.length? item.children : []
+      cityDeal(idsStr, key, item)
+      nextTick(() => {
+        assembleList({ key, idsStr })
+      })
+    }
+  }
+  if (isRefresh && key === 'cityId_2') {
+    nextTick(async () => {
+      const item = cityLevel2.find(e => String(e.id) === String(idsStr))
+      if (item) {
+        nextTick(() => {
+          cityDeal(idsStr, key, item)
+          nextTick(() => {
+            assembleList({ key, idsStr })
+          })
+        })
+      }
+    })
+  }
+  if (isRefresh && key === 'cityId_3') {
+    nextTick(() => {
+      nextTick(() => {
+        nextTick(() => {
+          assembleList({ key, idsStr })
+        })
+      })
+    })
+  }
+  // 添加
   const ids = idsStr.split('_') || []
   const obj = getItemObj({ key, ids, dictArr: list.value })
   if (!obj) return
   const index = showSelectList.value.findIndex(i => i.key === key)
   if (index === -1) showSelectList.value.push(obj)
   else showSelectList.value[index] = obj
+  //
+  showSelectList.value = [ // 城市放在一起展示
+    ...showSelectList.value.filter(item => item.key.includes('cityId_')),
+    ...showSelectList.value.filter(item => !item.key.includes('cityId_')),
+  ]
 }
 
 watch(
   () => route.query, 
   (newVal = {}, oldVal = {}) => {
-    // console.log('oldVal', oldVal); console.log('newVal', newVal)
+    const arr = Object.keys(newVal).length ? [...Object.keys(newVal)] : null
+    const newKeyList = arr ? [ // 城市放在一起展示
+      ...arr.filter(key => key.includes('cityId_')),
+      ...arr.filter(key => !key.includes('cityId_')),
+    ] : ''
     // 回显已选筛选-标签
-    if (!Object.keys(newVal).length) { // 路由没有参数
+    if (!newKeyList) { // 路由没有参数
       showSelectList.value = []
+      list.value = list.value.filter(e => !(e.cityLevel && e.cityLevel > 1))
     }
-    else if (!Object.keys(oldVal).length && Object.keys(newVal).length) { // 只有新加参数
-      Object.keys(newVal).forEach(key => {
-        assembleList({ key, idsStr: newVal[key] })
+    else if (!Object.keys(oldVal).length && newKeyList) { // 只有新加参数
+      newKeyList.forEach(key => {
+        assembleList({ key, idsStr: newVal[key], isRefresh: true })
       })
     }
-    else if (Object.keys(newVal).length && Object.keys(oldVal).length) { //路由参数更新
-      Object.keys(newVal).forEach(key => {
+    else if (newKeyList && Object.keys(oldVal).length) { //路由参数更新
+      newKeyList.forEach(key => {
         if (newVal[key] === oldVal[key]) return
         assembleList({ key, idsStr: newVal[key] })
       })
       // showSelectList去掉newVal里面没有的key
-      showSelectList.value = showSelectList.value.filter(item => Object.keys(newVal).includes(item.key))
+      showSelectList.value = showSelectList.value.filter(item => newKeyList.includes(item.key))
     }
-    showSelectList.value = [ // 城市放在一起展示
-      ...showSelectList.value.filter(item => item.key.includes('cityId_')),
-      ...showSelectList.value.filter(item => !item.key.includes('cityId_')),
-    ]
   },
   { immediate: true },
   { deep: true }

+ 7 - 18
src/views/recruit/personal/position/components/dict.js

@@ -5,29 +5,18 @@ import commonPath from './conditionFilter/commonPath.vue'
 // toFilterDictName: 查数据回显(一维数组字典),dictShow: 用户操作的字典(用户看到的数据)
 // 当type是tree类型的数据的时候需要提供dictType
 const dictList = [
-  // {
-  //   toFilterDictName: 'menduner_area_type',
-  //   toFilterApiType: 'areaList',
-  //   displayDictName: 'areaTreeData',
-  //   displayApiType: 'areaTreeData',
-  //   displayParams: {},
-  //   key: 'cityId_1',
-  //   cityLevel: 1,
-  //   itemKey: 'id',
-  //   itemText: 'name',
-  //   title: '工作城市',
-  //   isSingle: true,
-  //   path: commonPath,
-  //   toFilterDictDataList: []
-  // },
   {
     toFilterDictName: 'menduner_area_type',
     toFilterApiType: 'areaList',
-    key: 'city',
-    isSlot: true,
+    displayDictName: 'areaTreeData',
+    displayApiType: 'areaTreeData',
+    displayParams: {},
+    key: 'cityId_1',
+    cityLevel: 1,
     itemKey: 'id',
-    itemText: 'nameCn',
+    itemText: 'name',
     title: '工作城市',
+    isSingle: true,
     path: commonPath,
     toFilterDictDataList: []
   },

+ 4 - 4
src/views/recruit/personal/position/index.vue

@@ -11,7 +11,7 @@
             @handleSearch="val => handleQueryChange('content', val)"
           ></headSearch>
         </div>
-        <cityFilter class="mx-5 mb-3" ref="cityFilterRef" @change="handleQueryChange"></cityFilter>
+        <!-- <cityFilter class="mx-5 mb-3" ref="cityFilterRef" @change="handleQueryChange"></cityFilter> -->
         <div class="d-flex justify-space-between mx-5 mb-3">
           <conditionFilter ref="conditionFilterRef" :showFilterList="showFilterList" @reset="handleReset" @change="handleQueryChange"></conditionFilter>
         </div>
@@ -33,7 +33,7 @@
 
 <script setup>
 import buttons from '@/views/recruit/personal/components/buttons.vue'
-import cityFilter from './components/cityFilter'
+// import cityFilter from './components/cityFilter'
 import conditionFilter from './components/conditionFilter'
 import headSearch from '@/components/headSearch'
 import PositionLongStrip from '@/components/PositionLongStrip/item.vue'
@@ -46,10 +46,10 @@ import { dealDictObjData } from '@/utils/position'
 import { useRoute, useRouter } from 'vue-router'
 defineOptions({name: 'retrieval-position-page'})
 const route = useRoute(); const router = useRouter()
-const cityFilterRef = ref()
+// const cityFilterRef = ref()
 const conditionFilterRef = ref()
 const showFilterList = [
-  // { key: 'cityId_1' },
+  { key: 'cityId_1' },
   { key: 'industryIds' },
   { key: 'positionId', isSingle: true },
   { key: 'jobType' },