hotPromotedPositions.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <template>
  2. <div>
  3. <div class="d-flex align-center justify-center">
  4. <div class="home-title">
  5. 精选职位
  6. <div class="home-title-line"></div>
  7. </div>
  8. </div>
  9. <v-tabs v-model="tab" align-tabs="start" color="primary" @update:model-value="getPositionList">
  10. <v-tab :value="1">{{ $t('position.recommend') }}</v-tab>
  11. <v-tab :value="2">{{ $t('position.latest') }}</v-tab>
  12. <v-tab :value="3">{{ $t('position.hire') }}</v-tab>
  13. </v-tabs>
  14. <v-window v-model="tab" class="mt-5">
  15. <v-window-item v-for="v in 3" :value="v" :key="v">
  16. <PositionCard v-if="items.filter(Boolean) && items.length" :items="items" :tab="tab" @position="handlePosition" @enterprise="handleEnterprise"></PositionCard>
  17. <Empty v-else class="mb-3" :elevation="false"></Empty>
  18. </v-window-item>
  19. <!-- <v-window-item :value="1">
  20. <PositionCard v-if="items.filter(Boolean) && items.length" :items="items" :tab="tab" @position="handlePosition" @enterprise="handleEnterprise"></PositionCard>
  21. <Empty v-else class="mb-3" :elevation="false"></Empty>
  22. </v-window-item>
  23. <v-window-item :value="2">
  24. <PositionCard v-if="items.filter(Boolean) && items.length" :items="items" :tab="tab" @position="handlePosition" @enterprise="handleEnterprise"></PositionCard>
  25. <Empty v-else class="mb-3" :elevation="false"></Empty>
  26. </v-window-item>
  27. <v-window-item :value="3">
  28. <PositionCard v-if="items.filter(Boolean) && items.length" :items="items" :tab="tab" @position="handlePosition" @enterprise="handleEnterprise"></PositionCard>
  29. <Empty v-else class="mb-3" :elevation="false"></Empty>
  30. </v-window-item> -->
  31. </v-window>
  32. <div class="text-center mt-5" style="border-top: 1px solid #ccc; padding-top: 30px;">
  33. <v-btn class="buttons btnColor" to="/recruit/personal/position">{{ $t('position.moreBtn') }}</v-btn>
  34. </div>
  35. </div>
  36. </template>
  37. <script setup name="hotPromotedPositions">
  38. import PositionCard from '@/components/Position/item.vue'
  39. import { ref } from 'vue'
  40. import { getPromotedPosition, getLatestPosition, getHirePosition } from '@/api/position'
  41. import { dealDictArrayData } from '@/utils/position'
  42. const tab = ref(1)
  43. const items = ref([])
  44. // 推荐职位
  45. const getPositionList = async () => {
  46. items.value = []
  47. const api = tab.value === 1 ? getPromotedPosition : (tab.value === 2 ? getLatestPosition : getHirePosition)
  48. const { list } = await api({ pageNo: 1, pageSize: 9 })
  49. items.value = dealDictArrayData([], list)
  50. }
  51. getPositionList()
  52. // 职位详情
  53. const handlePosition = (item) => {
  54. if (!item.id) return
  55. window.open(`/recruit/personal/position/details/${item.id}`)
  56. }
  57. const handleEnterprise = (item) => {
  58. window.open(`/recruit/personal/company/details/${item.enterpriseId}?key=briefIntroduction`)
  59. }
  60. </script>
  61. <style lang="scss" scoped>
  62. :deep(.v-slide-group__content) {
  63. border-bottom: 1px solid #ccc !important;
  64. }
  65. :deep(.v-tab) {
  66. font-weight: 700;
  67. color: #666;
  68. font-size: 16px;
  69. }
  70. </style>