hotPromotedPositions.vue 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <template>
  2. <div>
  3. <v-tabs v-model="tab" align-tabs="start" color="primary" bg-color="#fff" @click="getPositionList">
  4. <v-tab :value="1">{{ $t('position.recommend') }}</v-tab>
  5. <v-tab :value="2">{{ $t('position.latest') }}</v-tab>
  6. <v-tab :value="3">{{ $t('position.urgent') }}</v-tab>
  7. </v-tabs>
  8. <v-window v-model="tab" class="mt-3">
  9. <v-window-item :value="1">
  10. <PositionCard :items="items"></PositionCard>
  11. </v-window-item>
  12. <v-window-item :value="2">
  13. <PositionCard :items="items"></PositionCard>
  14. </v-window-item>
  15. <v-window-item :value="3">
  16. <PositionCard :items="items"></PositionCard>
  17. </v-window-item>
  18. </v-window>
  19. <div class="text-center">
  20. <v-btn class="buttons" color="primary">{{ $t('position.moreBtn') }}</v-btn>
  21. </div>
  22. </div>
  23. </template>
  24. <script setup name="hotPromotedPositions">
  25. import PositionCard from '@/components/Position/item.vue'
  26. import { ref, reactive } from 'vue'
  27. import { getPromotedPosition, getLatestPosition, getUrgentPosition } from '@/api/position'
  28. import { getDict } from '@/hooks/web/useDictionaries'
  29. const tab = ref(1)
  30. const items = ref([])
  31. const dictObj = reactive({
  32. payUnit: [], // 薪资单位
  33. scale: [], // 规模
  34. industry: [], // 行业
  35. edu: [], // 学历
  36. exp: [], // 工作经验
  37. area: [] // 地区
  38. })
  39. const dictList = [
  40. { type: 'menduner_pay_unit', value: 'payUnit', key: 'payUnit', label: 'payName' },
  41. { type: 'menduner_scale', value: 'scale', key: 'scale', label: 'scaleName' },
  42. { type: 'menduner_industry_type', value: 'industry', key: 'industryId', label: 'industryName', params: {}, apiType: 'industryList', nameKey: 'nameCn', valueKey: 'id' },
  43. { type: 'menduner_education_type', value: 'edu', key: 'eduType', label: 'eduName' },
  44. { type: 'menduner_exp_type', value: 'exp', key: 'expType', label: 'expName' },
  45. { type: 'menduner_area_type', value: 'area', key: 'areaId', label: 'areaName', params: {}, apiType: 'areaList', nameKey: 'name', valueKey: 'id' }
  46. ]
  47. // 推荐职位
  48. const getPositionList = async () => {
  49. const api = tab.value === 1 ? getPromotedPosition : (tab.value === 2 ? getLatestPosition : getUrgentPosition)
  50. const { list } = await api({ pageNo: 1, pageSize: 9 })
  51. dictList.forEach(item => {
  52. items.value = list.map(e => {
  53. const valueKey = item.nameKey ? item.nameKey : 'label'
  54. const idKey = item.valueKey ? item.valueKey : 'value'
  55. e[item.label] = dictObj[item.value].find(k => Number(k[idKey]) === e[item.key])[valueKey]
  56. e.active = false
  57. return e
  58. })
  59. })
  60. }
  61. // 字典
  62. const getDictList = async () => {
  63. dictList.forEach(async (val) => {
  64. const { data } = await getDict(val.type, val.params, val.apiType)
  65. dictObj[val.value] = data
  66. })
  67. }
  68. getDictList()
  69. getPositionList()
  70. </script>