handleDeliveryCom.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <!-- 选择简历 -->
  2. <template>
  3. <selectResumeDialog v-model="showResume" :list="resumeList" @submit="handleSubmit" @close="handleClose"></selectResumeDialog>
  4. <CtDialog
  5. :visible="showUploadFile"
  6. :widthType="2"
  7. titleClass="text-h6"
  8. @close="showUploadFile = false"
  9. title="简历上传"
  10. @submit="uploadFileSubmit"
  11. >
  12. <DeliveryForm ref="deliveryFormRef"></DeliveryForm>
  13. </CtDialog>
  14. <CtDialog
  15. :visible="baseInfoCompleteDialog"
  16. :widthType="2"
  17. titleClass="text-h6"
  18. @close="baseInfoCompleteDialog = false"
  19. title="快速填写"
  20. @submit="baseInfoSubmit"
  21. >
  22. <baseInfoCompleteForm ref="baseInfoCompleteFormRef" :baseInfo="baseInfo"></baseInfoCompleteForm>
  23. </CtDialog>
  24. </template>
  25. <script setup>
  26. defineOptions({name: 'shareJob-handleDeliveryCom'})
  27. import { nextTick, ref } from 'vue'
  28. import selectResumeDialog from '@/views/recruit/personal/position/components/jobDetails/selectResumeDialog'
  29. import Snackbar from '@/plugins/snackbar'
  30. import { useI18n } from '@/hooks/web/useI18n'; const { t } = useI18n()
  31. import {
  32. // jobCvRelCheckSend,
  33. jobCvRelSend
  34. } from '@/api/position'
  35. import { hireJobCvDelivery, savePersonSimpleInfo } from '@/api/recruit/personal/shareJob'
  36. import DeliveryForm from './deliveryForm.vue'
  37. import baseInfoCompleteForm from './baseInfoCompleteForm.vue'
  38. import { getPersonResumeCv, savePersonResumeCv } from '@/api/resume'
  39. const emits = defineEmits(['refresh'])
  40. const props = defineProps({
  41. jobId: {
  42. type: String,
  43. default: ''
  44. },
  45. hire: {
  46. type: Boolean,
  47. default: false
  48. },
  49. userId: {
  50. type: String,
  51. default: ''
  52. },
  53. baseInfo: {
  54. type: Object,
  55. default: () => {}
  56. }
  57. })
  58. const showResume = ref(false)
  59. const showUploadFile = ref(false)
  60. const resumeList = ref([])
  61. // 填写必填信息
  62. const baseInfoReady1 = ref(false)
  63. const baseInfoCompleteDialog = ref(false)
  64. const baseInfoCompleteFormRef = ref()
  65. const baseInfoSubmit = async () => {
  66. const appPersonInfoSaveSimpleReqVO = await baseInfoCompleteFormRef.value.getQuery()
  67. await savePersonSimpleInfo(appPersonInfoSaveSimpleReqVO)
  68. localStorage.setItem('baseInfo', JSON.stringify(appPersonInfoSaveSimpleReqVO))
  69. baseInfoReady1.value = true
  70. baseInfoCompleteDialog.value = false
  71. inspectionProcess()
  72. // nextTick(() => { baseInfoCompleteDialog.value = false; inspectionProcess() })
  73. }
  74. const deliveryFormRef = ref()
  75. const uploadFileSubmit = async () => {
  76. const obj = await deliveryFormRef.value.getQuery()
  77. await savePersonResumeCv({ title: obj.fileName, url: obj.url })
  78. showUploadFile.value = false
  79. inspectionProcess()
  80. }
  81. const inspectionProcess = async () => {
  82. try {
  83. // 已登录情况下流程:
  84. //
  85. // * 必填人才信息不完全 -> 不符合快速投递,进入完善人才信息流程
  86. const info = JSON.parse(localStorage.getItem('baseInfo'))
  87. const keyArr = ['name', 'phone', 'jobStatus', 'expType', 'eduType'] // 必填人才信息
  88. const baseInfoReady = keyArr.every(e => info[e] && info[e] !== 0) // 校验必填人才信息
  89. if (!baseInfoReady) {
  90. Snackbar.warning('请先完善个人基本信息')
  91. nextTick(() => { baseInfoCompleteDialog.value = true })
  92. return
  93. }
  94. // * 查看简历列表
  95. const data = await getPersonResumeCv()
  96. resumeList.value = data
  97. // * 上传简历 (已登录但未上传简历)
  98. if (!data?.length) {
  99. nextTick(() => { showUploadFile.value = true })
  100. return
  101. }
  102. // * 简历选择
  103. if (data?.length) nextTick(() => { showResume.value = true })
  104. } catch (error) {
  105. console.error('error', error)
  106. }
  107. }
  108. inspectionProcess()
  109. // 简历投递
  110. const selectResume = ref()
  111. const handleClose = () => {
  112. showResume.value = false
  113. selectResume.value = null
  114. }
  115. const handleSubmit = async (val) =>{
  116. selectResume.value = val
  117. if (!selectResume.value) return Snackbar.warning(t('resume.selectResumeToSubmit'))
  118. const obj = resumeList.value.find(e => e.id === selectResume.value)
  119. if (!obj) return Snackbar.warning(t('resume.selectedResumeNotExist'))
  120. // 区分普通职位跟众聘职位投递
  121. if (props.hire) await hireJobCvDelivery({ jobId: props.jobId, recommendUserId: props.userId, url: obj.url })
  122. else await jobCvRelSend({ jobId: props.jobId, title: obj.title, url: obj.url })
  123. // setTimeout(() => {
  124. Snackbar.success(t('resume.deliverySuccess'))
  125. // }, 3000)
  126. emits('refresh')
  127. handleClose()
  128. }
  129. </script>
  130. <style lang="scss" scoped>
  131. </style>