Explorar o código

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

lifanagju_citu hai 1 ano
pai
achega
f48a130327

+ 5 - 1
src/components/Enterprise/hotPromoted.vue

@@ -14,7 +14,7 @@
       <!-- 职位列表 -->
       <ul class="company-job-list">
         <li class="company-job-item" v-for="(k, i) in item.jobList" :key="i">
-          <div class="job-info" @mouseenter="k.active = true" @mouseleave="k.active = false">
+          <div class="job-info" @mouseenter="k.active = true" @mouseleave="k.active = false" @click="handleClickPosition(k)">
             <div class="mb-2 d-flex">
               <p :class="['name', {'default-active': k.active }]">{{ k.name }}</p>
               <v-icon size="20" class="message">mdi-message-processing</v-icon>
@@ -55,6 +55,10 @@ const desc = [
   { value: 'eduName' },
   { value: 'expName' }
 ]
+
+const handleClickPosition = (k) => {
+  window.open(`/recruit/position/details/${k.positionId}`)
+}
 </script>
 
 <style lang="scss" scoped>

+ 12 - 30
src/components/Enterprise/info.vue

@@ -10,9 +10,9 @@
       </div>
     </div>
     <div class="mt-3 border-bottom-dashed" style="font-size: 14px;">
-      <div v-for="val in dictList" :key="val.icon" class="d-flex my-2">
+      <div v-for="val in list" :key="val.icon" class="d-flex my-2">
         <v-icon size="20" color="#666">{{ val.icon }}</v-icon>
-        <div class="info-address ml-4">{{ val.label }}</div>
+        <div class="info-address ml-4">{{ obj[val.label] }}</div>
       </div>
     </div>
     <div style="font-size: 12px;height: 50px; line-height: 50px">
@@ -24,8 +24,8 @@
 
 <script setup>
 defineOptions({ name: 'enterprise-info' })
-import { reactive } from 'vue'
-import { getDict } from '@/hooks/web/useDictionaries'
+import { ref } from 'vue'
+import { dealDictData } from '@/views/recruit/position/components/dict'
 const props = defineProps({
   info: {
     type: Object,
@@ -33,33 +33,15 @@ const props = defineProps({
   }
 })
 
-const dictObj = reactive({
-  scale: [],
-  financing: [],
-  industry: []
-})
-const dictList = reactive([
-  { type: 'menduner_financing_status', value: 'financing', key: 'scale', label: '', icon: 'mdi-domain' },
-  { type: 'menduner_scale', value: 'scale', key: 'financingStatus', label: '', icon: 'mdi-account-multiple' },
-  { type: 'menduner_industry_type', value: 'industry', key: 'industryId', label: '', params: {}, apiType: 'industryList', nameKey: 'nameCn', valueKey: 'id', icon: 'mdi-family-tree' }
-])
-const getDictList = async () => {
-  dictList.forEach(async (val) => {
-    const { data } = await getDict(val.type, val.params, val.apiType)
-    dictObj[val.value] = data
-  })
-}
-const dealData = () => {
-  const prise = props.info.enterprise
-  dictList.forEach(item => {
-    const valueKey = item.nameKey ? item.nameKey : 'label'
-    const idKey = item.valueKey ? item.valueKey : 'value'
-    item.label = dictObj[item.value].find(k => Number(k[idKey]) === Number(prise[item.key]))[valueKey] || ''
-  })
-}
+const list = [
+  { icon: 'mdi-domain', label: 'financingName' },
+  { icon: 'mdi-account-multiple', label: 'scaleName' },
+  { icon: 'mdi-family-tree', label: 'industryName' }
+]
+const obj = ref({})
 const getData = async () => {
-  await getDictList()
-  dealData()
+  const prise = props.info.enterprise
+  obj.value = dealDictData(obj.value, prise)
 }
 getData()
 </script>

+ 7 - 2
src/layout/personal/slider.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="slider-box">
-    <div v-for="item in list" :key="item.mdi" class="slider-box-item">
+    <div v-for="(item, index) in list" :key="index" class="slider-box-item" @click="handleClick(index)">
       <v-btn size="30" class="icons" icon variant="text">
         <v-icon class="icons" size="30">{{ item.mdi }}</v-icon>
         <v-tooltip :text="item.tips" location="start" activator="parent">
@@ -21,8 +21,13 @@ const list = [
   { mdi: 'mdi-arrow-up-bold', tips: '返回顶部' },
   { mdi: 'mdi-qrcode', tips: '微信公众号', showImg: 'https://minio.citupro.com/dev/static/mendunerCode.jpg' },
   { mdi: 'mdi-face-agent', tips: '客服' },
-  { mdi: 'mdi-list-box-outline', tips: '个人简历' }
+  { mdi: 'mdi-list-box-outline', tips: '在线简历' }
 ]
+
+const handleClick = (index) => {
+  // 回到顶部
+  if (index === 0) window.scrollTo({ top: 0, behavior: 'smooth' })
+}
 </script>
 
 <style lang="scss" scoped>

+ 4 - 47
src/views/Home/personal/components/hotPromotedPositions.vue

@@ -24,67 +24,24 @@
 
 <script setup name="hotPromotedPositions">
 import PositionCard from '@/components/Position/item.vue'
-import { ref, reactive } from 'vue'
-import { useRouter } from 'vue-router'
+import { ref } from 'vue'
 import { getPromotedPosition, getLatestPosition, getUrgentPosition } from '@/api/position'
-import { getDict } from '@/hooks/web/useDictionaries'
+import { dealDictData } from '@/views/recruit/position/components/dict'
 
 const tab = ref(1)
 const items = ref([])
-const dictObj = reactive({
-  payUnit: [], // 薪资单位
-  scale: [], // 规模
-  industry: [], // 行业
-  edu: [], // 学历
-  exp: [], // 工作经验
-  area: [] // 地区
-})
-const dictList = [
-  { type: 'menduner_pay_unit', value: 'payUnit', key: 'payUnit', label: 'payName' },
-  { type: 'menduner_scale', value: 'scale', key: 'scale', label: 'scaleName' },
-  { type: 'menduner_industry_type', value: 'industry', key: 'industryId', label: 'industryName', params: {}, apiType: 'industryList', nameKey: 'nameCn', valueKey: 'id' },
-  { type: 'menduner_education_type', value: 'edu', key: 'eduType', label: 'eduName' },
-  { type: 'menduner_exp_type', value: 'exp', key: 'expType', label: 'expName' },
-  { type: 'menduner_area_type', value: 'area', key: 'areaId', label: 'areaName', params: {}, apiType: 'areaList', nameKey: 'name', valueKey: 'id' }
-]
 
 // 推荐职位
 const getPositionList = async () => {
   const api = tab.value === 1 ? getPromotedPosition : (tab.value === 2 ? getLatestPosition : getUrgentPosition)
   const { list } = await api({ pageNo: 1, pageSize: 9 })
-  dictList.forEach(item => {
-    items.value = list.map(e => {
-      const valueKey = item.nameKey ? item.nameKey : 'label'
-      const idKey = item.valueKey ? item.valueKey : 'value'
-      e[item.label] = dictObj[item.value].find(k => Number(k[idKey]) === Number(e[item.key]))[valueKey] || ''
-      e.active = false
-      return e
-    })
-  })
+  items.value = dealDictData(items.value, list)
 }
-
-// 字典
-const getDictList = async () => {
-  dictList.forEach(async (val) => {
-    const { data } = await getDict(val.type, val.params, val.apiType)
-    dictObj[val.value] = data
-  })
-}
-getDictList()
 getPositionList()
 
 // 职位详情
-const info = ref({})
-const router = useRouter()
 const handlePosition = (item) => {
-  info.value = item
-  let routeData = router.resolve({
-    path: `/recruit/position/details/${item.positionId}`,
-    query: {
-      positionInfo: JSON.stringify(info)
-    }
-  })
-  window.open(routeData.href)
+  window.open(`/recruit/position/details/${item.positionId}`)
 }
 const handleEnterprise = (item) => {
   console.log(item, 'enterprise-item')

+ 10 - 14
src/views/Home/personal/components/popularEnterprises.vue

@@ -12,6 +12,7 @@ import HotPromoted from '@/components/Enterprise/hotPromoted.vue'
 import { ref, reactive } from 'vue'
 import { getHotEnterprise } from '@/api/enterprise'
 import { getDict } from '@/hooks/web/useDictionaries'
+import { dealDictData } from '@/views/recruit/position/components/dict'
 
 const items = ref([])
 const dictObj = reactive({
@@ -44,22 +45,14 @@ const getHotEnterpriseList = async () => {
         e[item.label] = dictObj[item.value].find(k => Number(k[idKey]) === e[item.key])[valueKey]
       }
       const list = e.jobList
-      deal(item, list, e)
+      if (!item.isEnter) {
+        // 职位列表
+        e.jobList = dealDictData(e.jobList, list)
+      }
       return e
     })
   })
 }
-const deal = (item, list, e) => {
-  if (item.isEnter) return
-  list.map(val => {
-    const valueKey = item.nameKey ? item.nameKey : 'label'
-    const idKey = item.valueKey ? item.valueKey : 'value'
-    val[item.label] = dictObj[item.value].find(k => Number(k[idKey]) === val[item.key])[valueKey]
-    val.active = false
-    return val
-  })
-  e.jobList = list
-}
 
 // 字典
 const getDictList = async () => {
@@ -68,6 +61,9 @@ const getDictList = async () => {
     dictObj[val.value] = data
   })
 }
-getDictList()
-getHotEnterpriseList()
+const getData = async () => {
+  await getDictList()
+  getHotEnterpriseList()
+}
+getData()
 </script>

+ 7 - 32
src/views/recruit/position/components/details.vue

@@ -70,23 +70,24 @@
 
 <script setup>
 defineOptions({ name: 'position-details' })
-import { ref, reactive } from 'vue'
+import { ref } from 'vue'
 import { useRouter } from 'vue-router'
 import { timesTampChange } from '@/utils/date'
-import { getDict } from '@/hooks/web/useDictionaries'
 import { getPositionDetails, getSimilarPosition } from '@/api/position'
+import { dealDictData } from '@/views/recruit/position/components/dict'
 import similarPositions from '@/components/Position/similarPositions.vue'
 import EnterpriseInfo from '@/components/Enterprise/info.vue'
 
 const router = useRouter()
 const { id } = router.currentRoute.value.params
-const { _value: positionInfo } = JSON.parse(router.currentRoute.value.query.positionInfo)
 
 // 职位详情
 const info = ref({})
+const positionInfo = ref({})
 const getPositionDetail = async () => {
   const data = await getPositionDetails({ id })
   info.value = data
+  positionInfo.value = { ...dealDictData(positionInfo.value, info.value), ...info.value }
 }
 getPositionDetail()
 
@@ -100,38 +101,12 @@ const desc = [
 const similarList = ref([])
 const getSimilarPositionList = async () => {
   if (!Object.keys(positionInfo).length) return
-  const { list } = await getSimilarPosition({ pageNo: 1, pageSize: 4, positionId: positionInfo.positionId, expType: positionInfo.expType })
+  const { list } = await getSimilarPosition({ pageNo: 1, pageSize: 4, positionId: positionInfo.value.positionId, expType: positionInfo.value.expType })
   const items = list.splice(0, 4)
-  dictList.forEach(item => {
-    similarList.value = items.map(e => {
-      const valueKey = item.nameKey ? item.nameKey : 'label'
-      const idKey = item.valueKey ? item.valueKey : 'value'
-      e[item.label] = dictObj[item.value].find(k => Number(k[idKey]) === Number(e[item.key]))[valueKey] || ''
-      return e
-    })
-  })
+  similarList.value = dealDictData(similarList.value, items)
 }
 
-const dictObj = reactive({
-  payUnit: [],
-  area: []
-})
-const dictList = [
-  { type: 'menduner_pay_unit', value: 'payUnit', key: 'payUnit', label: 'payName' },
-  { type: 'menduner_area_type', value: 'area', key: 'areaId', label: 'areaName', params: {}, apiType: 'areaList', nameKey: 'name', valueKey: 'id' }
-]
-// 字典
-const getDictList = async () => {
-  dictList.forEach(async (val) => {
-    const { data } = await getDict(val.type, val.params, val.apiType)
-    dictObj[val.value] = data
-  })
-}
-const getData = async () => {
-  await getDictList()
-  getSimilarPositionList()
-}
-getData()
+getSimilarPositionList()
 </script>
 
 <style lang="scss" scoped>

+ 55 - 0
src/views/recruit/position/components/dict.js

@@ -0,0 +1,55 @@
+import { reactive } from 'vue'
+import { getDict } from '@/hooks/web/useDictionaries'
+
+const dictObj = reactive({
+  payUnit: [], // 薪资单位
+  scale: [], // 规模
+  industry: [], // 行业
+  edu: [], // 学历
+  exp: [], // 工作经验
+  area: [], // 地区
+  financing: [] // 融资阶段
+})
+const dictList = [
+  { type: 'menduner_pay_unit', value: 'payUnit', key: 'payUnit', label: 'payName' },
+  { type: 'menduner_financing_status', value: 'financing', key: 'financingStatus', label: 'financingName' },
+  { type: 'menduner_scale', value: 'scale', key: 'scale', label: 'scaleName' },
+  { type: 'menduner_industry_type', value: 'industry', key: 'industryId', label: 'industryName', params: {}, apiType: 'industryList', nameKey: 'nameCn', valueKey: 'id' },
+  { type: 'menduner_education_type', value: 'edu', key: 'eduType', label: 'eduName' },
+  { type: 'menduner_exp_type', value: 'exp', key: 'expType', label: 'expName' },
+  { type: 'menduner_area_type', value: 'area', key: 'areaId', label: 'areaName', params: {}, apiType: 'areaList', nameKey: 'name', valueKey: 'id' }
+]
+
+// 字典
+const getDictList = async () => {
+  dictList.forEach(async (val) => {
+    const { data } = await getDict(val.type, val.params, val.apiType)
+    dictObj[val.value] = data
+  })
+}
+getDictList()
+
+export const dealDictData = (res, list) => {
+  dictList.forEach(item => {
+    const valueKey = item.nameKey ? item.nameKey : 'label'
+    const idKey = item.valueKey ? item.valueKey : 'value'
+    if (Array.isArray(list)) {
+      res = list.map(e => {
+        const obj = dictObj[item.value].find(k => Number(k[idKey]) === Number(e[item.key]))
+        if (!obj) return
+        e[item.label] = obj[valueKey] || ''
+        e.active = false
+        return e
+      })
+      return
+    }
+    for(let i in list) {
+      if (i === item.key) {
+        const obj = dictObj[item.value].find(k => Number(k[idKey]) === Number(list[i]))
+        if (!obj) return
+        res[item.label] = obj[valueKey]
+      }
+    }
+  })
+  return res
+}