lifanagju_citu 6 ヶ月 前
コミット
15f270c794
3 ファイル変更24 行追加2 行削除
  1. 11 1
      components/FilterList/index.vue
  2. 12 0
      hooks/useDictionaries.js
  3. 1 1
      pages/index/position.vue

+ 11 - 1
components/FilterList/index.vue

@@ -9,6 +9,7 @@
         :localdata="item.array"
         :popup-title="'请选择' + item[labelValue]" 
         :map="item.map || { text: 'label', value: 'value' }"
+        @nodeclick="e => nodeClick(e, item)"
         @change="e => handleClick(e, item)"
       >
         <view v-if="error" class="error">
@@ -49,9 +50,18 @@ const pickerRef = ref()
 const handleClick = (e, item) => {
   const obj = e.detail.value?.length ? e.detail.value[e.detail.value.length-1] : {}
   //
+  let val = obj.value
   item.value = obj.value
   item.text = obj.text || ''
-  emit('change', item.key, item.value)
+  if (item.key === 'areaIds' && obj.value === 'unlimited') val = operateValue
+  emit('change', item.key, val)
+}
+
+let operateValue = ''
+const nodeClick = (node, item) => {
+  // operateKey = item.key
+  operateValue = Boolean(item.map?.value) ? node[item.map.value] : node.value
+  // operateText = Boolean(item.map?.text) ? node[item.map.text] : node.text
 }
 
 const handleClear = (item, index) => {

+ 12 - 0
hooks/useDictionaries.js

@@ -21,6 +21,17 @@ const setDict = (type, val) => {
       return e
     }) : []
   }
+  if (type === 'areaTreeDataExtend') {
+    const obj = val.data.find(e => e.name === '中国')
+    val.data = obj?.children ? obj.children.map(e =>{
+      // 市辖区直接显示区
+      const municipality = e.children && e.children.length && e.children[0].name === '市辖区'
+      if (municipality && e.children[0].children?.length) e.children = e.children[0].children
+      // 不限
+      if(e.children?.length)  e.children.unshift({ name: '不限', id: 'unlimited' })
+      return e
+    }) : []
+  }
   // 一小时过期
   const currentTime = new Date()
   currentTime.setTime(currentTime.getTime() + 3600 * 1000)
@@ -48,6 +59,7 @@ export const getDict = (type, params, apiType = 'dict') => {
         dict: getDictData,
         positionTreeData: getPositionTreeData, // 职位tree
         areaTreeData: getAreaTreeData, // 区域tree
+        areaTreeDataExtend: getAreaTreeData, // 区域tree(二级以后含不限)
         industryTreeData: getIndustryTreeData, // 行业tree
         industryList: getIndustryListData,
         skillList: getSkillList,

+ 1 - 1
pages/index/position.vue

@@ -88,7 +88,7 @@ const swiperAdList = [
   'https://minio.citupro.com/dev/menduner/miniProgram/banner4.jpg'
 ]
 const filterList = ref([
-  { label: '城市', dictType: 'areaTreeData', key: 'areaIds', map: { text: 'name', value: 'id' } },
+  { label: '城市', dictType: 'areaTreeDataExtend', key: 'areaIds', map: { text: 'name', value: 'id' } },
   // { label: '行业', dictType: 'industryTreeData',key: 'industryIds', map: { text: 'nameCn', value: 'id' } },
   { label: '职位', dictType: 'positionTreeData',key: 'positionId', map: { text: 'nameCn', value: 'id' } },
   { label: '求职类型', dictType: 'menduner_job_type', key: 'jobType' },