Browse Source

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

lifanagju_citu 1 year ago
parent
commit
bc2e30f3c0

+ 3 - 0
src/components/headSearch/index.vue

@@ -49,6 +49,9 @@ const emits = defineEmits(['handleSearch', 'handleJobClick'])// 定义一个或
 const text = ref('职位类型')
 const value = ref('')
 let drawer = ref(false)
+
+if (route.query && route.query?.content) value.value = route.query.content
+
 // 点击外部关闭职位下拉
 const sharedState = useSharedState()
 // 监听 layoutClickCount 变化

+ 13 - 3
src/components/jobTypeCard/index.vue

@@ -78,6 +78,11 @@ const props = defineProps({
   page: { // 左侧数据是否分页(首页有分页)
     type: Boolean,
     default: false
+  },
+  // 是否单选(首页为单选)
+  isSingle: {
+    type: Boolean,
+    default: false
   }
 })
 const isPage = props.page
@@ -88,9 +93,14 @@ const routeQuery = route?.query
 // 职位点击
 const handleJobClick = async (val) => {
   await getPositionTreeClick({ id: val.id }) // 埋点
-  if (selectItems.value.includes(val.id)) {
-    selectItems.value = selectItems.value.filter(e => e.id !== val.id)
-  } else selectItems.value.push(val.id)
+  const obj = selectItems.value.includes(val.id)
+  if (props.isSingle) {
+    selectItems.value = obj ? [] : [val.id]
+  } else {
+    if (obj) {
+      selectItems.value = selectItems.value.filter(e => e.id !== val.id)
+    } else selectItems.value.push(val.id)
+  }
   emits('handleJobClick', selectItems.value)
 }
 

+ 8 - 1
src/views/Home/personal/index.vue

@@ -6,7 +6,7 @@
     </div>
     <hotJobs></hotJobs>
     <div class="default-width">
-      <jobTypeCard class="mb-5" page></jobTypeCard>
+      <jobTypeCard class="mb-5" page @handleJobClick="handleJobClick" isSingle></jobTypeCard>
       <hotPromotedPositions></hotPromotedPositions>
       <PopularEnterprises class="mt-10"></PopularEnterprises>
     </div>
@@ -21,6 +21,13 @@ import jobTypeCard from '@/components/jobTypeCard'
 import hotPromotedPositions from './components/hotPromotedPositions.vue'
 import PopularEnterprises from './components/popularEnterprises.vue'
 defineOptions({ name:'personal-index'})
+import { useRouter } from 'vue-router'
+
+// 职位点击
+const router = useRouter()
+const handleJobClick = (val) => {
+  if (val.length) router.push(`/recruit/position?positionId=${val[0]}`)
+}
 </script>
 
 <style lang="scss" scoped>

+ 1 - 1
src/views/recruit/position/components/areaCascader/index.vue

@@ -72,7 +72,7 @@ getDict('areaTreeData', {}, 'areaTreeData').then(({ data }) => {
             if (arr?.length) {
               arr.forEach(idItem => {
                 const dataItem = treeList.value[levelIndex].find(findItem => findItem.id === (idItem - 0))
-                if (dataItem) handleNext(dataItem, levelIndex, false, false)
+                if (dataItem) handleNext(dataItem, levelIndex, false, true)
               })
             }
           }

+ 0 - 1
src/views/recruit/position/components/cityFilter.vue

@@ -21,7 +21,6 @@ const checkedInputChange = (idChecked) => {
   if (idChecked?.length) {
     const obj = {}
     idChecked.forEach((_e, index) => {
-      // if (_e?.length) str.value += `${index ? '&' : '' }level${index+1}=${_e.join('_')}`
       if (_e?.length) {
         obj[`level${index+1}`] = _e.join('_')
       }

+ 8 - 0
src/views/recruit/position/components/conditionFilter.vue

@@ -20,8 +20,10 @@ import educationType from './conditionFilter/educationType.vue'
 import scale from './conditionFilter/scale.vue'
 import financingStatus from './conditionFilter/financingStatus.vue'
 import { reactive } from 'vue'
+import { useRoute } from 'vue-router'
 defineOptions({name: 'retrieval-components-conditionFilter'})
 const emits = defineEmits(['conditionFilterChange'])
+const route = useRoute()
 
 const removeEmptyStringsAndReturnNew = (obj) => {
   const result = {}
@@ -35,6 +37,12 @@ const removeEmptyStringsAndReturnNew = (obj) => {
  
 const params = reactive({})
 let query = reactive({})
+
+if (route.query?.content) {
+  query['content'] = route.query.content
+  emits('conditionFilterChange')
+}
+
 const inputChange = (key, { values, isEmit}) => {
   params[key] = values
   query[key] = values.join('_')

+ 1 - 1
src/views/recruit/position/components/conditionFilter/JobType.vue

@@ -38,7 +38,7 @@ getDict('menduner_job_type').then(({ data }) => {
     if (arr?.length) {
       title.value = `求职类型(${arr.length})`
       selectedItems.value = arr
-      emits('inputChange', { values: selectedItems.value, isEmit: false })
+      emits('inputChange', { values: selectedItems.value, isEmit: true })
     }
   }
   show.value = true

+ 1 - 0
src/views/recruit/position/components/conditionFilter/companyIndustry.vue

@@ -19,6 +19,7 @@ const title = ref('行业类型')
 if (routeQuery && routeQuery.industryIds) {
   const arr = routeQuery.industryIds.split('_')
   title.value = `行业类型(${arr.length})`
+  emits('inputChange', { values: arr, isEmit: true })
 }
 
 const handleIndustry = (val) => {

+ 1 - 1
src/views/recruit/position/components/conditionFilter/educationType.vue

@@ -43,7 +43,7 @@ getDict('menduner_education_type').then(({ data }) => {
     if (arr?.length) {
       selectedItems.value = arr
       title.value = `学历要求(${arr.length})`
-      emits('inputChange', { values: selectedItems.value, isEmit: false })
+      emits('inputChange', { values: selectedItems.value, isEmit: true })
     }
   }
   show.value = true

+ 1 - 1
src/views/recruit/position/components/conditionFilter/expType.vue

@@ -43,7 +43,7 @@ getDict('menduner_exp_type').then(({ data }) => {
     if (arr?.length) {
       title.value = `工作经验(${arr.length})`
       selectedItems.value = arr
-      emits('inputChange', { values: selectedItems.value, isEmit: false })
+      emits('inputChange', { values: selectedItems.value, isEmit: true })
     }
   }
   show.value = true

+ 1 - 1
src/views/recruit/position/components/conditionFilter/financingStatus.vue

@@ -37,7 +37,7 @@ getDict('menduner_financing_status').then(({ data }) => {
     if (arr?.length) {
       selectedItems.value = arr
       title.value = `融资阶段(${arr.length})`
-      emits('inputChange', { values: selectedItems.value, isEmit: false })
+      emits('inputChange', { values: selectedItems.value, isEmit: true })
     }
   }
   show.value = true

+ 1 - 1
src/views/recruit/position/components/conditionFilter/payScope.vue

@@ -33,7 +33,7 @@ getDict('menduner_pay_scope').then(({ data }) => {
   if (query && query.payType) {
     title.value = '薪资待遇(1)'
     selectedItems.value = [query.payType]
-    emits('inputChange', { values: selectedItems.value })
+    emits('inputChange', { values: selectedItems.value, isEmit: true })
   }
   show.value = true
 })

+ 9 - 7
src/views/recruit/position/components/conditionFilter/positionType.vue

@@ -11,20 +11,22 @@ defineOptions({name: 'conditionFilter-company-industry'})
 import { ref } from 'vue'
 import { useRoute } from 'vue-router'
 
-const route = useRoute()
-const routeQuery = route?.query
-
 const emits = defineEmits(['inputChange'])
 const title = ref('职位类型')
-if (routeQuery && routeQuery.positionId) {
-  const arr = routeQuery.positionId.split('_')
-  title.value = `职位类型(${arr.length})`
-}
 
 const handleClick = (val) => {
   title.value = val.length ? `职位类型(${val.length})` : '职位类型'
   emits('inputChange', { values: val, isEmit: true })
 }
+
+const route = useRoute()
+const routeQuery = route?.query
+
+if (routeQuery && routeQuery.positionId) {
+  const arr = routeQuery.positionId.split('_')
+  title.value = `职位类型(${arr.length})`
+  if (arr.length) emits('inputChange', { values: arr, isEmit: true })
+}
 </script>
 
 <style lang="scss" scoped>

+ 1 - 1
src/views/recruit/position/components/conditionFilter/scale.vue

@@ -38,7 +38,7 @@ getDict('menduner_scale').then(({ data }) => {
     if (arr?.length) {
       selectedItems.value = arr
       title.value = `公司规模(${arr.length})`
-      emits('inputChange', { values: selectedItems.value, isEmit: false })
+      emits('inputChange', { values: selectedItems.value, isEmit: true })
     }
   }
   show.value = true

+ 23 - 19
src/views/recruit/position/index.vue

@@ -5,8 +5,8 @@
     <v-card style="z-index: 998">
       <div class="stickyBox my-3">
         <headSearch 
-          @handleJobClick="val => dealParams('conditionFilterRef', val, 'positionId')" 
-          @handleSearch="val => dealParams('conditionFilterRef', val, 'content')"
+          @handleJobClick="val => dealParams(val, 'positionId')" 
+          @handleSearch="val => dealParams(val, 'content')"
         ></headSearch>
       </div>
       <cityFilter class="mx-5 mb-3" ref="cityFilterRef" @updateCheckedInput="updateRouteQuery('cityFilterRef')"></cityFilter>
@@ -62,15 +62,6 @@ const getPositionList = async () => {
   total.value = number
 }
 
-// 刷新后有参数则进行搜索
-if (routeQuery) {
-  for (let i in routeQuery) {
-    if (routeQuery[i].indexOf('_') !== -1) pageReqVO[i] = routeQuery[i].split('_')
-    else pageReqVO[i] = routeQuery[i]
-  }
-  getPositionList()
-} else getPositionList()
-
 const removeEmptyStringsAndReturnNew = (obj) => {
   const result = {}
   Object.keys(obj).forEach(function(key) {
@@ -83,13 +74,14 @@ const removeEmptyStringsAndReturnNew = (obj) => {
 
 const updateRouteQuery = (ref, val, key) => {
   ref
-  const queryObj = { cityFilter: null, conditionFilter: null }
+  const queryObj = { cityFilter: {}, conditionFilter: {} }
   if (cityFilterRef.value?.getQuery) {
     queryObj.cityFilter = removeEmptyStringsAndReturnNew(cityFilterRef.value?.getQuery())
   }
   if (conditionFilterRef.value?.getQuery) {
-    queryObj.conditionFilter = removeEmptyStringsAndReturnNew(conditionFilterRef.value?.getQuery())
-    if (val && key) queryObj.conditionFilter[key] = val
+    const objData = conditionFilterRef.value?.getQuery()
+    if (val && key) objData[key] = val
+    queryObj.conditionFilter = removeEmptyStringsAndReturnNew(objData)
   }
   let queryArr = []
   if (queryObj) {
@@ -105,22 +97,34 @@ const updateRouteQuery = (ref, val, key) => {
   }
   const str = queryArr?.join('&')
   if (str) router.push(`${route.path}?${str}`)
-  handleSearchPosition()
+  handleSearchPosition(val, key)
 }
 
 // 职位搜索
 const handleSearchPosition = () => {
-  const conditionParams = conditionFilterRef.value.params
+  const conditionParams = conditionFilterRef.value?.params
   const cityParams = cityFilterRef.value?.getQuery
-  pageReqVO = { ...pageReqVO, ...conditionParams, ...cityParams }
+  pageReqVO = { ...pageReqVO, ...conditionParams, ...cityParams, content: pageReqVO.content }
   getPositionList()
 }
 
 // 职位类型、关键字
-const dealParams = (name, val, key) => {
-  updateRouteQuery(name, val, key)
+const dealParams = (val, key) => {
+  pageReqVO[key] = val
   updateRouteQuery('cityFilterRef')
+  updateRouteQuery('conditionFilterRef', val, key)
 }
+
+// 刷新后有参数则进行搜索
+if (routeQuery) {
+  for (let i in routeQuery) {
+    if (routeQuery[i].indexOf('_') !== -1) pageReqVO[i] = routeQuery[i].split('_')
+    else pageReqVO[i] = routeQuery[i]
+  }
+  if (routeQuery.content) updateRouteQuery('conditionFilterRef', routeQuery.content, 'content')
+  getPositionList()
+} else getPositionList()
+
 // 分页
 const handleChangePage = (index) => {
   pageInfo.pageNo = index