hotPromotedPositions.vue 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <template>
  2. <div>
  3. <v-tabs v-model="tab" align-tabs="start" color="primary" bg-color="#fff" @update:model-value="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 v-if="items.filter(Boolean) && items.length" :items="items" :tab="tab" @position="handlePosition" @enterprise="handleEnterprise"></PositionCard>
  11. </v-window-item>
  12. <v-window-item :value="2">
  13. <PositionCard v-if="items.filter(Boolean) && items.length" :items="items" :tab="tab" @position="handlePosition" @enterprise="handleEnterprise"></PositionCard>
  14. </v-window-item>
  15. <v-window-item :value="3">
  16. <PositionCard v-if="items.filter(Boolean) && items.length" :items="items" :tab="tab" @position="handlePosition" @enterprise="handleEnterprise"></PositionCard>
  17. </v-window-item>
  18. </v-window>
  19. <div class="text-center">
  20. <v-btn class="buttons" color="primary" to="/recruit/position">{{ $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 } from 'vue'
  27. import { getPromotedPosition, getLatestPosition, getUrgentPosition } from '@/api/position'
  28. import { dealDictArrayData } from '@/views/recruit/position/components/dict'
  29. const tab = ref(1)
  30. const items = ref([])
  31. // 推荐职位
  32. const getPositionList = async () => {
  33. const api = tab.value === 1 ? getPromotedPosition : (tab.value === 2 ? getLatestPosition : getUrgentPosition)
  34. const { list } = await api({ pageNo: 1, pageSize: 9 })
  35. items.value = dealDictArrayData([], list)
  36. }
  37. getPositionList()
  38. // 职位详情
  39. const handlePosition = (item) => {
  40. if (!item.id) return
  41. window.open(`/recruit/position/details/${item.id}`)
  42. }
  43. const handleEnterprise = (item) => {
  44. window.open(`/company/details/${item.enterpriseId}?key=briefIntroduction`)
  45. }
  46. </script>