1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- <template>
- <v-card class="position-box">
- <h4 class="h4 mb-3">{{ $t('position.recommend') }}</h4>
- <div v-if="items.length">
- <div v-for="(item, index) in items" :key="index" class="mb-2 cursor-pointer" @click="handlePosition(item)">
- <p class="recruit-name">{{ item.name }}</p>
- <span v-if="!item.payFrom && !item.payTo" class="recruit-salary">面议</span>
- <span v-else class="recruit-salary">{{ item.payFrom ? item.payFrom + '-' : '' }}{{ item.payTo }}{{ item.payName ? '/' + item.payName : '' }}</span>
- <div :class="['enterprise', {'border-bottom-dashed': index !== items.length - 1}]" @click="handleEnterprise(item)">
- <v-img class="float-left" :src="item.logoUrl || 'https://minio.citupro.com/dev/menduner/company-avatar.png'" :width="30" :height="30"></v-img>
- <span class="float-left enterprise-name">{{ item.anotherName }}</span>
- <span class="float-right enterprise-address">{{ item.areaName }}</span>
- </div>
- </div>
- </div>
- <Empty v-else :elevation="false" message="暂无推荐职位"></Empty>
- </v-card>
- </template>
- <script setup>
- defineOptions({name: 'retrieval-components-recommendedPositions'})
- import { ref } from 'vue'
- import { getPromotedPosition } from '@/api/position'
- import { dealDictArrayData } from '@/utils/position'
- const items = ref([])
- const getList = async () => {
- const { list } = await getPromotedPosition({ pageSize: 10, pageNo: 1 })
- if (!list.length) return items.value = []
- items.value = dealDictArrayData([], list)
- }
- getList()
- const handlePosition = (item) => {
- if (!item.id) return
- window.open(`/recruit/personal/position/details/${item.id}`)
- }
- const handleEnterprise = (item) => {
- if (!item.enterpriseId) return
- window.open(`/recruit/personal/company/details/${item.enterpriseId}?key=briefIntroduction`)
- }
- </script>
- <style lang="scss" scoped>
- .position-box {
- position: relative;
- width: 320px;
- height: 100%;
- border-radius: 8px;
- padding: 20px 15px;
- }
- .recruit-name {
- width: 125px;
- font-weight: 500;
- display: inline-block;
- max-width: 125px;
- vertical-align: middle;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
- &:hover {
- color: var(--v-primary-base);
- }
- }
- .recruit-salary {
- float: right;
- color: var(--v-error-base);
- font-weight: 500;
- height: auto;
- vertical-align: sub;
- }
- .enterprise {
- height: 40px;
- line-height: 30px;
- margin-top: 8px;
- }
- .enterprise-name {
- width: 120px;
- display: inline-block;
- max-width: 120px;
- vertical-align: middle;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
- color: var(--color-666);
- font-size: 13px;
- margin-left: 5px;
- &:hover {
- color: var(--v-primary-base);
- }
- }
- .enterprise-address {
- color: #555;
- font-size: 13px;
- }
- </style>
|