|
@@ -10,8 +10,8 @@
|
|
<span class="refresh-time">{{ timesTampChange(info.updateTime) }} {{ $t('common.refresh') }} <v-icon color="warning" size="20">mdi-alert-outline</v-icon></span>
|
|
<span class="refresh-time">{{ timesTampChange(info.updateTime) }} {{ $t('common.refresh') }} <v-icon color="warning" size="20">mdi-alert-outline</v-icon></span>
|
|
</div>
|
|
</div>
|
|
<div class="banner-tags mt-4">
|
|
<div class="banner-tags mt-4">
|
|
- <span v-for="k in desc" :key="k.mdi" class="mr-10">
|
|
|
|
- <span v-if="positionInfo[k.value]">
|
|
|
|
|
|
+ <span v-for="k in desc" :key="k.mdi">
|
|
|
|
+ <span v-if="positionInfo[k.value]" class="mr-10">
|
|
<v-icon color="var(--color-666)" size="20">{{ k.mdi }}</v-icon>
|
|
<v-icon color="var(--color-666)" size="20">{{ k.mdi }}</v-icon>
|
|
<span class="ml-1">{{ positionInfo[k.value] }}</span>
|
|
<span class="ml-1">{{ positionInfo[k.value] }}</span>
|
|
</span>
|
|
</span>
|
|
@@ -70,7 +70,7 @@
|
|
<v-divider class="my-3"></v-divider>
|
|
<v-divider class="my-3"></v-divider>
|
|
<div class="contact" v-if="Object.keys(info).length">
|
|
<div class="contact" v-if="Object.keys(info).length">
|
|
<div class="float-left d-flex align-center">
|
|
<div class="float-left d-flex align-center">
|
|
- <v-img :src="info.contact.avatar || 'https://minio.citupro.com/dev/menduner/7.png'" :width="45" style="height: 45px;"></v-img>
|
|
|
|
|
|
+ <v-img :src="getUserAvatar(info.contact.avatar, info.contact.sex)" :width="45" style="height: 45px;"></v-img>
|
|
<div class="ml-2">
|
|
<div class="ml-2">
|
|
<div class="contact-name">{{ info.contact.name }}</div>
|
|
<div class="contact-name">{{ info.contact.name }}</div>
|
|
<div class="contact-info">
|
|
<div class="contact-info">
|
|
@@ -112,8 +112,9 @@
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
- <!-- 弹窗提示去上传简历 -->
|
|
|
|
- <promptToUpload v-model="dialog" @handleToUpload="handleToUpload"></promptToUpload>
|
|
|
|
|
|
+ <!-- 简历上传 -->
|
|
|
|
+ <input type="file" ref="fileInput" accept=".pdf, .doc, .docx" style="display: none;" @change="handleUploadFile"/>
|
|
|
|
+
|
|
<!-- 选择简历 -->
|
|
<!-- 选择简历 -->
|
|
<selectResumeDialog v-model="showResume" :list="resumeList" @submit="handleSubmit" @close="handleClose"></selectResumeDialog>
|
|
<selectResumeDialog v-model="showResume" :list="resumeList" @submit="handleSubmit" @close="handleClose"></selectResumeDialog>
|
|
<!-- 复制分享链接 -->
|
|
<!-- 复制分享链接 -->
|
|
@@ -149,6 +150,7 @@ defineOptions({ name: 'position-details' })
|
|
import { computed, ref } from 'vue'
|
|
import { computed, ref } from 'vue'
|
|
import { useRouter } from 'vue-router'
|
|
import { useRouter } from 'vue-router'
|
|
import { timesTampChange } from '@/utils/date'
|
|
import { timesTampChange } from '@/utils/date'
|
|
|
|
+import { uploadFile } from '@/api/common'
|
|
import { getPersonResumeCv } from '@/api/recruit/personal/resume'
|
|
import { getPersonResumeCv } from '@/api/recruit/personal/resume'
|
|
import { useI18n } from '@/hooks/web/useI18n'
|
|
import { useI18n } from '@/hooks/web/useI18n'
|
|
import { getPositionDetails, getSimilarPosition, getJobFavoriteCheck, getPersonJobFavorite, getPersonJobUnfavorite, jobCvRelCheckSend, jobCvRelSend } from '@/api/position'
|
|
import { getPositionDetails, getSimilarPosition, getJobFavoriteCheck, getPersonJobFavorite, getPersonJobUnfavorite, jobCvRelCheckSend, jobCvRelSend } from '@/api/position'
|
|
@@ -157,10 +159,10 @@ import similarPositions from '@/components/Position/similarPositions.vue'
|
|
import EnterpriseInfo from '@/components/Enterprise/info.vue'
|
|
import EnterpriseInfo from '@/components/Enterprise/info.vue'
|
|
import Snackbar from '@/plugins/snackbar'
|
|
import Snackbar from '@/plugins/snackbar'
|
|
import Dialog from '@/components/CtDialog'
|
|
import Dialog from '@/components/CtDialog'
|
|
-import promptToUpload from './jobDetails/promptToUpload'
|
|
|
|
import selectResumeDialog from './jobDetails/selectResumeDialog'
|
|
import selectResumeDialog from './jobDetails/selectResumeDialog'
|
|
import { getToken } from '@/utils/auth'
|
|
import { getToken } from '@/utils/auth'
|
|
-import { prologue } from '@/hooks/web/useIM'
|
|
|
|
|
|
+import { prologue, defaultText } from '@/hooks/web/useIM'
|
|
|
|
+import { getUserAvatar } from '@/utils/avatar'
|
|
|
|
|
|
const { t } = useI18n()
|
|
const { t } = useI18n()
|
|
const router = useRouter()
|
|
const router = useRouter()
|
|
@@ -181,7 +183,6 @@ const info = ref({})
|
|
const positionInfo = ref({})
|
|
const positionInfo = ref({})
|
|
const getPositionDetail = async () => {
|
|
const getPositionDetail = async () => {
|
|
const data = await getPositionDetails({ id })
|
|
const data = await getPositionDetails({ id })
|
|
- console.log('daaa', data)
|
|
|
|
info.value = data
|
|
info.value = data
|
|
positionInfo.value = { ...dealDictObjData({}, info.value), ...info.value }
|
|
positionInfo.value = { ...dealDictObjData({}, info.value), ...info.value }
|
|
getSimilarPositionList()
|
|
getSimilarPositionList()
|
|
@@ -207,7 +208,6 @@ const getCollectionStatus = async () => {
|
|
if (!getToken()) return isCollection.value = false
|
|
if (!getToken()) return isCollection.value = false
|
|
const data = await getJobFavoriteCheck({ jobId: id })
|
|
const data = await getJobFavoriteCheck({ jobId: id })
|
|
isCollection.value = data
|
|
isCollection.value = data
|
|
- console.log('isCollection', data)
|
|
|
|
}
|
|
}
|
|
getCollectionStatus()
|
|
getCollectionStatus()
|
|
|
|
|
|
@@ -246,14 +246,37 @@ const handleCollection = async () => {
|
|
await getCollectionStatus()
|
|
await getCollectionStatus()
|
|
}
|
|
}
|
|
|
|
|
|
-const dialog = ref(false)
|
|
|
|
-const showResume = ref(false)
|
|
|
|
-// 去上传附件
|
|
|
|
-const handleToUpload = () => {
|
|
|
|
- dialog.value = false
|
|
|
|
- window.open('/recruit/personal/personalCenter')
|
|
|
|
|
|
+// 投递简历时,若当前用户没有简历列表则弹窗上传简历以及投递
|
|
|
|
+const typeList = ['pdf', 'doc', 'docx']
|
|
|
|
+const handleUploadFile = async (e) => {
|
|
|
|
+ if (!e.target.files.length) return
|
|
|
|
+ const file = e.target.files[0]
|
|
|
|
+ const size = file.size
|
|
|
|
+ if (size / (1024*1024) > 10) {
|
|
|
|
+ Snackbar.warning(t('common.fileSizeExceed'))
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ const arr = file.name.split('.')
|
|
|
|
+ if (typeList.indexOf(arr[arr.length - 1]) < 0) {
|
|
|
|
+ Snackbar.warning(t('common.fileFormatIncorrect'))
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ const formData = new FormData()
|
|
|
|
+ formData.append('file', file)
|
|
|
|
+ const { data } = await uploadFile(formData)
|
|
|
|
+ if (!data) return
|
|
|
|
+
|
|
|
|
+ await jobCvRelSend({ jobId: id, title: arr[0], url: data, type: info.value.hire ? 1 : 0 })
|
|
|
|
+ setTimeout(() => {
|
|
|
|
+ Snackbar.success(t('resume.deliverySuccess'))
|
|
|
|
+ deliveryCheck()
|
|
|
|
+ }, 3000)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+const showResume = ref(false)
|
|
|
|
+const clicked = ref(false)
|
|
|
|
+const fileInput = ref()
|
|
|
|
+
|
|
// 效验是否有投递简历
|
|
// 效验是否有投递简历
|
|
const resumeList = ref([])
|
|
const resumeList = ref([])
|
|
const selectResume = ref()
|
|
const selectResume = ref()
|
|
@@ -263,7 +286,11 @@ const handleDelivery = async () => {
|
|
resumeList.value = result
|
|
resumeList.value = result
|
|
// 没有上传过简历的先去上传
|
|
// 没有上传过简历的先去上传
|
|
if (!result.length) {
|
|
if (!result.length) {
|
|
- dialog.value = true
|
|
|
|
|
|
+ Snackbar.warning('您还未上传过简历,请先上传简历')
|
|
|
|
+ if (clicked.value) return
|
|
|
|
+ clicked.value = true
|
|
|
|
+ fileInput.value.click()
|
|
|
|
+ clicked.value = false
|
|
return
|
|
return
|
|
}
|
|
}
|
|
showResume.value = true
|
|
showResume.value = true
|
|
@@ -290,9 +317,8 @@ const handleSubmit = async (val) =>{
|
|
const toDetails = async (info) => {
|
|
const toDetails = async (info) => {
|
|
const userId = info.contact.userId
|
|
const userId = info.contact.userId
|
|
const enterpriseId = info.contact.enterpriseId
|
|
const enterpriseId = info.contact.enterpriseId
|
|
- const text = '您好,我对该职位很感兴趣,希望能有机会与您进一步沟通。'
|
|
|
|
const textObj = {
|
|
const textObj = {
|
|
- text: text,
|
|
|
|
|
|
+ text: defaultText,
|
|
positionInfo: positionInfo.value
|
|
positionInfo: positionInfo.value
|
|
}
|
|
}
|
|
await prologue({userId, enterpriseId, text: JSON.stringify(textObj)})
|
|
await prologue({userId, enterpriseId, text: JSON.stringify(textObj)})
|