瀏覽代碼

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

lifanagju_citu 9 月之前
父節點
當前提交
e39bfa332a

+ 9 - 2
src/components/Position/longStrip.vue

@@ -3,7 +3,6 @@
     <div class="position-item mb-3 job-closed" v-for="(val, i) in props.items" :key="i" @mouseenter="val.active = true" @mouseleave="val.active = false">
       <div class="info-header">
         <div v-if="val.active" class="header-btn">
-          <!-- <v-btn class="half-button" color="primary" size="small">继续沟通</v-btn> -->
           <v-btn v-if="props.showCancelBtn" class="half-button ml-3" color="primary" size="small" @click="handleCancel(val)">取消感兴趣</v-btn>
         </div>
         <div class="img-box">
@@ -17,7 +16,7 @@
       <div class="info-content">
         <div class="job-info">
           <div class="job-name cursor-pointer">
-            <span class="mr-3 info-name">{{ val.job.name }}</span>
+            <span class="mr-3 info-name" @click="handleToPositionDetails(val)">{{ val.job.name }}</span>
             <span v-if="val?.job?.areaName">[{{ val.job.areaName }}]</span>
           </div>
           <div class="job-other">
@@ -46,6 +45,7 @@ import { getPersonJobUnfavorite } from '@/api/position'
 import { useI18n } from '@/hooks/web/useI18n'
 import Snackbar from '@/plugins/snackbar'
 import { getUserAvatar } from '@/utils/avatar'
+import { useRouter } from 'vue-router'
 
 const emits = defineEmits(['refresh'])
 const { t } = useI18n()
@@ -60,6 +60,8 @@ const props = defineProps({
   }
 })
 
+const router = useRouter()
+
 const desc = ['industryName', 'financingName', 'scaleName']
 
 const handleCancel = async (item) => {
@@ -68,6 +70,11 @@ const handleCancel = async (item) => {
   emits('refresh')
   Snackbar.success(t('common.operationSuccessful'))
 }
+
+// 职位详情
+const handleToPositionDetails = (item) => {
+  router.push(`/recruit/personal/position/details/${item.job.id}`)
+}
 </script>
 
 <style scoped lang="scss">

+ 14 - 9
src/views/recruit/enterprise/positionManagement/components/details.vue

@@ -1,9 +1,12 @@
 <template>
   <div class="default-width mb-5">
     <div class="banner px-6">
-      <div class="banner-title">
-        <h1 class="ellipsis">{{ info.name }}</h1>
-        <span class="salary">{{ info.payFrom }}-{{ info.payTo }}/{{ info.payName }}</span>
+      <div class="banner-title d-flex justify-space-between">
+        <div class="d-flex align-center">
+          <h1 class="ellipsis">{{ info.name }}</h1>
+          <span class="salary">{{ info.payFrom }}-{{ info.payTo }}/{{ info.payName }}</span>
+          <publicRecruitment v-if="info.hire" class="ml-5" width="50" height="50"></publicRecruitment>
+        </div>
         <span class="refresh-time">{{ timesTampChange(info.updateTime) }} {{ $t('common.refresh') }} <v-icon color="warning" size="20">mdi-alert-outline</v-icon></span>
       </div>
       <div class="banner-tags mt-4">
@@ -15,7 +18,11 @@
       <div class="banner-tools my-4">
         <v-chip size="small" label v-for="(k, i) in info.tagList" :key="i" class="mr-1" color="primary">{{ k }}</v-chip>
       </div>
-      <div class="d-flex justify-end mb-5">
+      <div class="d-flex justify-space-between mb-5">
+        <div>
+          <v-chip v-if="info.hire && info.hirePrice && info.hirePrice > 0" label color="primary">赏金:{{ commissionCalculation(info.hirePrice, 1) }}元</v-chip>
+          <v-chip v-if="info.hire && info.hirePoint && info.hirePoint > 0" label color="primary" class="ml-1">积分:{{ commissionCalculation(info.hirePoint, 1) }}点</v-chip>
+        </div>
         <div class="banner-tools-btns">
           <v-btn class="button-item radius" color="primary" variant="outlined" @click="handleEdit">{{ $t('common.edit') }}</v-btn>
         </div>
@@ -38,9 +45,6 @@
                   <div class="contact-info">{{ info.enterprise.name }} · {{ info.contact.postNameCn }}</div>
                 </div>
               </div>
-              <!-- <div class="float-right">
-                <v-chip color="primary" label>{{ $t('position.currentOnline') }}</v-chip>
-              </div> -->
             </div>
             <v-divider class="my-3"></v-divider>
             <div>
@@ -77,6 +81,7 @@ import { useRouter } from 'vue-router'
 import { timesTampChange } from '@/utils/date'
 import { getJobDetails } from '@/api/position'
 import { dealDictObjData } from '@/utils/position'
+import { commissionCalculation } from '@/utils/position'
 
 const router = useRouter()
 const { id } = router.currentRoute.value.params
@@ -100,8 +105,8 @@ const desc = [
 ]
 
 const handleEdit = () => {
-  if (!enterprise.value.id) return
-  window.open(`/recruit/enterprise/position/edit?id=${enterprise.value.id}`)
+  if (!id) return
+  window.open(`/recruit/enterprise/position/edit?id=${id}`)
 }
 </script>
 

+ 25 - 14
src/views/recruit/personal/PersonalCenter/components/interview/item.vue

@@ -5,6 +5,9 @@
           <v-btn color="primary" size="small" @click="handleAgree(val)">同意</v-btn>
           <v-btn class="ml-3" color="error" size="small" @click="handleRefuse(val)">拒绝</v-btn>
         </div>
+        <div v-if="tab === '1' || tab === '98'" class="float-right font-size-13" :style="{'padding': '12px 12px 0 0', 'color': tab === '1' ? 'var(--v-primary-base)' : 'var(--v-error-base)'}">
+          您已于{{ timesTampChange(val.updateTime, 'Y-M-D h:m') }}{{ tab === '1' ? '接受' : '拒绝'}}了此面试邀请
+        </div>
         <div class="img-box">
           <v-avatar :image="getUserAvatar(val.contact.avatar, val.contact.sex)" size="x-small"></v-avatar>
           <span class="name">
@@ -16,14 +19,18 @@
         </div>
       </div>
       <div class="info-content">
-        <div class="job-info">
+        <div class="font-size-16 color-333 mr-5" style="width: 322px;">
+          <div>面试时间:{{ timesTampChange(val.time, 'Y-M-D h:m') }}</div>
+          <div class="mt-3 ellipsis" style="max-width: 322px;">面试地点:{{ val.address }}</div>
+        </div>
+        <div class="job-info color-666">
           <div class="job-name ellipsis" style="max-width: 410px;">
-            <span class="mr-3">{{ val.job.name }}</span>
+            <span class="mr-3 cursor-pointer position-name" @click="handleToPositionDetails(val)">{{ val.job.name }}</span>
             <span>{{ val.job.payFrom }}-{{ val.job.payTo }}/{{ val.job.payName }}</span>
           </div>
           <div class="job-other d-flex align-center">
             <div style="width: 30px;height: 30px;">
-              <v-img width="30" height="30" :src="val.enterprise.logoUrl || 'https://minio.citupro.com/dev/menduner/7.png'"></v-img>
+              <v-img width="30" height="30" :src="val.enterprise.logoUrl || 'https://minio.citupro.com/dev/menduner/company-avatar.png'"></v-img>
             </div>
             <div class="ellipsis" style="max-width: 400px;">
               <span class="mx-2 enterprise-name" @click="handleToEnterprise(val)">{{ val.enterprise.name }}</span>
@@ -35,10 +42,6 @@
             </div>
           </div>
         </div>
-        <div class="font-size-14 color-666" style="width: 322px;">
-          <div>面试时间:{{ timesTampChange(val.time, 'Y-M-D h:m') }}</div>
-          <div class="mt-3 ellipsis" style="max-width: 322px;">面试地点:{{ val.address }}</div>
-        </div>
       </div>
   </div>
 </template>
@@ -51,6 +54,7 @@ import { userInterviewInviteReject, userInterviewInviteConsent } from '@/api/rec
 import Snackbar from '@/plugins/snackbar'
 import Confirm from '@/plugins/confirm'
 import { getUserAvatar } from '@/utils/avatar'
+import { useRouter } from 'vue-router'
 
 const { t } = useI18n()
 const emits = defineEmits(['refresh'])
@@ -65,11 +69,18 @@ const props = defineProps({
   }
 })
 
+const router = useRouter()
+
 // 企业详情
 const handleToEnterprise = (item) => {
   const id = item.enterprise.id
   if (!id) return
-  window.open(`/recruit/personal/company/details/${id}?key=briefIntroduction`)
+  router.push(`/recruit/personal/company/details/${id}?key=briefIntroduction`)
+}
+
+// 职位详情
+const handleToPositionDetails = (item) => {
+  router.push(`/recruit/personal/position/details/${item.job.id}`)
 }
 
 // 同意
@@ -138,22 +149,19 @@ const handleRefuse = (val) => {
     padding: 16px 24px;
     justify-content: space-between;
     .job-info {
-      width: 430px;
-      max-width: 430px;
+      width: 360px;
+      max-width: 360px;
       font-weight: 500;
-      font-size: 16px;
+      font-size: 14px;
       margin-right: 12px;
       .job-name {
         height: 22px;
         line-height: 22px;
-        color: var(--color-222);
         margin-bottom: 12px;
       }
       .job-other {
-        color: var(--color-666);
         height: 22px;
         line-height: 22px;
-        font-size: 14px;
         .enterprise-name {
           cursor: pointer;
           &:hover {
@@ -164,4 +172,7 @@ const handleRefuse = (val) => {
     }
   }
 }
+.position-name:hover {
+  color: var(--v-primary-base);
+}
 </style>