Jelajahi Sumber

招聘会职位投递参加添加

Xiao_123 3 bulan lalu
induk
melakukan
299b8a264e

+ 1 - 1
components.d.ts

@@ -53,7 +53,7 @@ declare module 'vue' {
     LongCompany: typeof import('./src/components/Position/longCompany.vue')['default']
     LongStrip: typeof import('./src/components/Position/longStrip.vue')['default']
     NestedListGroup: typeof import('./src/components/FormUI/nestedListGroup/index.vue')['default']
-    Pay: typeof import('./src/components/pay/index.vue')['default']
+    Pay: typeof import('./src/components/personalRecharge/pay.vue')['default']
     PersonalRecharge: typeof import('./src/components/personalRecharge/index.vue')['default']
     PreviewImage: typeof import('./src/components/PreviewImg/previewImage.vue')['default']
     PreviewImg: typeof import('./src/components/PreviewImg/index.vue')['default']

+ 8 - 0
src/api/recruit/personal/jobFair.js

@@ -30,3 +30,11 @@ export const getJobFairEntJobPage = async (params) => {
 		params
 	})
 }
+
+// 效验招聘会职位是否投递
+export const jobFairPositionDeliveryCheck = async (params) => {
+	return await request.get({
+		url: '/app-api/menduner/system/job-cv-rel/job-fair/send/check',
+		params
+	})
+}

+ 0 - 8
src/router/modules/common.js

@@ -17,14 +17,6 @@ const common = [
       // }
     ]
   },
-  // { // 暂停维护
-  //   path: '/shareJob',
-  //   name: 'shareJob',
-  //   meta: {
-  //     title: '分享职位'
-  //   },
-  //   component: () => import('@/views/recruit/personal/shareJob/index.vue')
-  // },
   // 邀请页
   {
     path: '/invite',

+ 1 - 1
src/views/recruit/personal/jobFair/position/components/jobCard.vue

@@ -117,7 +117,7 @@ watch(
 
 // 跳转职位详情
 const handleClick = (id) => {
-	window.open(`/recruit/personal/position/details/${id}`)
+	window.open(`/recruit/personal/position/details/${id}?jobFairId=${props.jobFairId}`)
 }
 </script>
 

+ 34 - 7
src/views/recruit/personal/position/components/details.vue

@@ -6,7 +6,7 @@
           <h1>{{ formatName(info.name) }}</h1>
           <svg-icon v-if="info?.hire" class="ml-5" name="pin" size="50"></svg-icon>
         </div>
-        <v-btn v-if="showContentRight" color="primary" variant="text" size="large" @click.stop="handleReturn" prepend-icon="mdi-chevron-triple-left">返回上一页</v-btn>
+        <v-btn v-if="showContentRight && !jobFairId" color="primary" variant="text" size="large" @click.stop="handleReturn" prepend-icon="mdi-chevron-triple-left">返回上一页</v-btn>
       </div>
       <div class="d-flex mt-1 justify-space-between align-center">
         <div class="banner-tags">
@@ -133,7 +133,7 @@
 
     <Loading :visible="loading"></Loading>
     <div v-if="Object.keys(info).length && Object.keys(positionInfo).length" style="position: absolute; left: -9999px; bottom: 0">
-      <PosterPage :id="id" :info="info" :positionInfo="positionInfo" ref="share"></PosterPage>
+      <PosterPage :id="id" :jobFairId="jobFairId" :info="info" :positionInfo="positionInfo" ref="share"></PosterPage>
     </div>
 
     <!-- 快速登录 -->
@@ -144,7 +144,7 @@
 <script setup>
 defineOptions({ name: 'position-details' })
 import { ref, computed } from 'vue'
-import { useRouter } from 'vue-router'
+import { useRouter, useRoute } from 'vue-router'
 import Snackbar from '@/plugins/snackbar'
 import html2canvas from 'html2canvas'
 import { useI18n } from '@/hooks/web/useI18n'
@@ -163,6 +163,7 @@ import {
   jobCvRelCheckSend,
   jobCvRelSend
 } from '@/api/position'
+import { jobFairPositionDeliveryCheck } from '@/api/recruit/personal/jobFair'
 import { getPersonResumeCv, savePersonResumeCv } from '@/api/recruit/personal/resume'
 
 import { DPR } from '@/utils'
@@ -200,7 +201,7 @@ const props = defineProps({
 })
 
 const { t } = useI18n()
-const router = useRouter()
+const router = useRouter(); const route = useRoute()
 let { id } = props.propJobId ? { id: props.propJobId } : router.currentRoute.value.params
 if (id) id = id.toString()
 const delivery = ref(false) // 是否已投递简历
@@ -234,6 +235,9 @@ const formItems = ref({
   ]
 })
 
+// 招聘会id
+const jobFairId = ref(route?.query?.jobFairId)
+
 const nextFunc = ref(null) // 登录成功或强制填写个人信息成功后回调
 let loginCloseWarningWord = ''
 // 快速登录
@@ -316,7 +320,11 @@ getPositionDetail()
 
 // 效验是否有投递过简历
 const deliveryCheck = async () => {
-  const data = await jobCvRelCheckSend({ jobId: id })
+  // 区分招聘会职位与普通职位
+  const api = jobFairId.value ? jobFairPositionDeliveryCheck : jobCvRelCheckSend
+  const params = jobFairId.value ? { jobFairId: jobFairId.value, jobId: id } : { jobId: id }
+
+  const data = await api(params)
   if (data) delivery.value = true
 }
 if (getToken()) deliveryCheck()
@@ -400,7 +408,16 @@ const handleUploadSubmit = async () => {
   if (!obj.title || !obj.url) return
   loading.value = true
   await savePersonResumeCv(obj)
-  await jobCvRelSend({ jobId: id, title: obj.title, url: obj.url, type: info.value.hire ? 1 : 0 })
+
+  const params = {
+    jobId: id,
+    title: obj.title,
+    url: obj.url,
+    type: info.value.hire ? 1 : 0
+  }
+  // 如果是参与招聘会的职位,则传招聘会id
+  if (jobFairId.value) params.jobFairId = jobFairId.value
+  await jobCvRelSend(params)
   showUploadDialog.value = false
   setTimeout(() => {
     Snackbar.success(t('resume.deliverySuccess'))
@@ -453,7 +470,17 @@ const handleSubmit = async (val) =>{
   if (!obj) return Snackbar.warning(t('resume.selectedResumeNotExist'))
   handleClose()
   loading.value = true
-  await jobCvRelSend({ jobId: id, title: obj.title, url: obj.url, type: info.value.hire ? 1 : 0 })
+
+  const params = {
+    jobId: id,
+    title: obj.title,
+    url: obj.url,
+    type: info.value.hire ? 1 : 0
+  }
+  // 如果是参与招聘会的职位,则传招聘会id
+  if (jobFairId.value) params.jobFairId = jobFairId.value
+  await jobCvRelSend(params)
+
   setTimeout(async () => {
     Snackbar.success(t('resume.deliverySuccess'))
     await deliveryCheck()

+ 12 - 3
src/views/recruit/personal/position/components/poster.vue

@@ -14,7 +14,6 @@
             <div v-for="(k, i) in desc" :key="k.mdi">
               <span>
                 {{ k.value === 'areaName' ? !positionInfo.areaId ? '全国' : positionInfo.area?.str : positionInfo[k.value] }}
-                <!-- {{ (k.value === 'areaName' && !positionInfo.areaId) ? '全国' : positionInfo[k.value] }} -->
               </span>
               <span v-if="i !== desc.length - 1 && (positionInfo[k.value] || k.value === 'areaName')" class="septal-line"></span>
             </div>
@@ -80,8 +79,10 @@ import { formatName } from '@/utils/getText'
 const props = defineProps({
   info: Object,
   positionInfo: Object,
-  id: String
+  id: String,
+  jobFairId: [String, Number] // 招聘会id
 })
+
 // 富文本内容处理,去除多余的换行空格等
 const cleanedHtml = (text) => {
   let cleaned = text.replace(/\n/g, '</br>')
@@ -97,7 +98,15 @@ const url = ref('')
 // 获取二维码
 const getQrCode = async () => {
   // 先将需要的参数传递给后端,后端返回一个id,再根据id获取二维码,小程序端根据scene中的id获取分享的职位id与推荐人id
-  const result = await getJobAdvertisedShare({ jobId: props.id, sharedById: userInfo?.id })
+  
+  const params = {
+    jobId: props.id,
+    sharedById: userInfo?.id
+  }
+  // 参与招聘会的职位则需要传递招聘会id
+  if (props.jobFairId) params.jobFairId = props.jobFairId
+
+  const result = await getJobAdvertisedShare(params)
   const query = {
     scene: 'id=' + result,
     path: 'pagesB/positionDetail/index',