Bladeren bron

投递简历

lifanagju_citu 10 maanden geleden
bovenliggende
commit
0ba20b2faf

+ 1 - 0
src/views/recruit/personal/remuse/components/basicInfo.vue

@@ -211,6 +211,7 @@ const formItems = ref({
       label: '电话号码',
       col: 6,
       outlined: true,
+      rules: [v => !!v || '请填写手机号码']
       // disabled: true,
       // slotName: 'phone',
     },

+ 10 - 0
src/views/recruit/personal/shareJob/components/baseInfo.vue

@@ -0,0 +1,10 @@
+<!--  -->
+<template>
+  <div>vue3PageInit</div>
+</template>
+
+<script setup>
+defineOptions({name: 'shareJob-baseInfo'})
+</script>
+<style lang="scss" scoped>
+</style>

+ 46 - 19
src/views/recruit/personal/shareJob/components/baseInfoCompleteForm.vue

@@ -11,40 +11,67 @@ import { reactive, ref, defineExpose } from 'vue'
 const formPageRef = ref()
 let query = reactive({})
 
-
 const items = ref({
   options: [
     {
       type: 'text',
       key: 'name',
-      value: '',
-      clearable: true,
+      value: '姓名',
+      default: null,
       label: '姓名 *',
-      rules: [v => !!v || '请填写姓名']
+      outlined: true,
+      rules: [v => !!v || '请输入姓名']
     },
     {
       type: 'text',
       key: 'phone',
-      value: '',
+      value: '1840000003',
       clearable: true,
-      label: '手机号码 *',
-      rules: [v => !!v || '请填写手机号码']
+      label: '联系手机号 *',
+      rules: [v => !!v || '请填写联系手机号']
+    },
+    {
+      type: 'autocomplete',
+      key: 'jobStatus',
+      value: '0',
+      default: null,
+      label: '求职状态 *',
+      outlined: true,
+      itemText: 'label',
+      itemValue: 'value',
+      dictTypeName: 'menduner_job_status',
+      rules: [v => !!v || '请选择求职状态'],
+      items: []
+    },
+    {
+      type: 'autocomplete',
+      key: 'expType',
+      value: '0',
+      default: null,
+      label: '工作经验 *',
+      outlined: true,
+      itemText: 'label',
+      itemValue: 'value',
+      dictTypeName: 'menduner_exp_type',
+      rules: [v => !!v || '请选择工作经验'],
+      items: []
+    },
+    {
+      type: 'autocomplete',
+      key: 'eduType',
+      value: '0',
+      default: null,
+      label: '最高学历 *',
+      outlined: true,
+      itemText: 'label',
+      itemValue: 'value',
+      dictTypeName: 'menduner_education_type',
+      rules: [v => !!v || '请选择最高学历'],
+      items: []
     },
-    // {
-    //   type: 'upload',
-    //   key: 'url',
-    //   value: null,
-    //   data: '',
-    //   label: '简历 *',
-    //   accept: '.doc, .docx, .pdf',
-    //   placeholder: '请上传简历',
-    //   rules: [v => !!v || '请上传简历'],
-    //   change: handleUpload
-    // }
   ]
 })
 
-
 const getQuery = async () => {
   const { valid } = await formPageRef.value.formRef.validate()
   if (!valid) return

+ 3 - 1
src/views/recruit/personal/shareJob/components/deliveryForm.vue

@@ -33,7 +33,9 @@ const handleUpload = async (e) => {
   formData.append('file', file)
   const { data } = await uploadFile(formData)
   if (!data) return
-  items.value.options.find(e => e.key === 'url').data = data
+  const urlItem = items.value.options.find(e => e.key === 'url')
+  if (urlItem) urlItem.data = data
+  query.fileName = file.name
 }
 
 const items = ref({

+ 36 - 12
src/views/recruit/personal/shareJob/components/handleDeliveryCom.vue

@@ -7,25 +7,25 @@
     titleClass="text-h6"
     @close="showUploadFile = false"
     title="简历上传"
-    @submit="null"
+    @submit="uploadFileSubmit"
   >
-    <DeliveryForm ref="deliveryForm"></DeliveryForm>
+    <DeliveryForm ref="deliveryFormRef"></DeliveryForm>
   </CtDialog>
   <CtDialog
     :visible="baseInfoCompleteDialog"
     :widthType="2"
     titleClass="text-h6"
-    title="快速填写"
     @close="baseInfoCompleteDialog = false"
+    title="快速填写"
     @submit="baseInfoSubmit"
   >
-    <baseInfoCompleteForm ref="deliveryForm"></baseInfoCompleteForm>
+    <baseInfoCompleteForm ref="baseInfoCompleteFormRef" :baseInfo="baseInfo"></baseInfoCompleteForm>
   </CtDialog>
 </template>
 
 <script setup>
 defineOptions({name: 'shareJob-handleDeliveryCom'})
-import { ref } from 'vue'
+import { nextTick, ref } from 'vue'
 import selectResumeDialog from '@/views/recruit/personal/position/components/jobDetails/selectResumeDialog'
 import Snackbar from '@/plugins/snackbar'
 import { useI18n } from '@/hooks/web/useI18n'; const { t } = useI18n()
@@ -33,10 +33,10 @@ import {
   // jobCvRelCheckSend, 
   jobCvRelSend 
 } from '@/api/position'
-import { hireJobCvDelivery } from '@/api/recruit/personal/shareJob'
+import { hireJobCvDelivery, savePersonSimpleInfo } from '@/api/recruit/personal/shareJob'
 import DeliveryForm from './deliveryForm.vue'
 import baseInfoCompleteForm from './baseInfoCompleteForm.vue'
-import { getPersonResumeCv } from '@/api/resume'
+import { getPersonResumeCv, savePersonResumeCv } from '@/api/resume'
 
 const emits = defineEmits(['refresh'])
 const props = defineProps({
@@ -59,16 +59,40 @@ const props = defineProps({
 })
 const showResume = ref(false)
 const showUploadFile = ref(false)
-const baseInfoCompleteDialog = ref(false)
 const resumeList = ref([])
 
+// 填写必填信息
+const baseInfoReady1 = ref(false)
+const baseInfoCompleteDialog = ref(false)
+const baseInfoCompleteFormRef = ref()
+const baseInfoSubmit = async () => {
+  const appPersonInfoSaveSimpleReqVO = await baseInfoCompleteFormRef.value.getQuery()
+  await savePersonSimpleInfo(appPersonInfoSaveSimpleReqVO)
+  localStorage.setItem('baseInfo', JSON.stringify(appPersonInfoSaveSimpleReqVO))
+  baseInfoReady1.value = true
+  baseInfoCompleteDialog.value = false
+  inspectionProcess()
+  // nextTick(() => { baseInfoCompleteDialog.value = false; inspectionProcess() })
+}
+
+const deliveryFormRef = ref()
+const uploadFileSubmit = async () => {
+  const obj = await deliveryFormRef.value.getQuery()
+  await savePersonResumeCv({ title: obj.fileName, url: obj.url })
+  showUploadFile.value = false
+  inspectionProcess()
+}
+
 const inspectionProcess = async () => {
   try {
     // 已登录情况下流程:
     //
     // * 必填人才信息不完全 -> 不符合快速投递,进入完善人才信息流程
-    if (!props.baseInfo?.baseInfoReady) {
-      baseInfoCompleteDialog.value = true
+    const info = JSON.parse(localStorage.getItem('baseInfo'))
+    const keyArr = ['name', 'phone', 'jobStatus', 'expType', 'eduType'] // 必填人才信息
+    const baseInfoReady = keyArr.every(e => info[e] && info[e] !== 0) // 校验必填人才信息
+    if (!baseInfoReady) {
+      nextTick(() => { baseInfoCompleteDialog.value = true })
       return
     }
     // * 查看简历列表
@@ -76,11 +100,11 @@ const inspectionProcess = async () => {
     resumeList.value = data
     // * 上传简历 (已登录但未上传简历)
     if (!data?.length) {
-      showUploadFile.value = true
+      nextTick(() => { showUploadFile.value = true })
       return
     }
     // * 简历选择
-    if (data?.length) showResume.value = true
+    if (data?.length) nextTick(() => { showResume.value = true })
   } catch (error) {
     console.error('error', error)
   }

+ 1 - 2
src/views/recruit/personal/shareJob/components/login.vue

@@ -2,7 +2,7 @@
 <template>
   <div class="my-5">
     <phoneFrom ref="phoneRef" @handleEnter="handleLogin"></phoneFrom>
-    <v-btn  :loading="loginLoading" color="primary" class="white--text mt-5" min-width="350" @click="handleLogin">
+    <v-btn :loading="loginLoading" color="primary" class="white--text mt-5" min-width="350" @click="handleLogin">
       {{ $t('login.register') }}
     </v-btn>
   </div>
@@ -43,7 +43,6 @@ const handleLogin = async () => {
 // 查询用户基本信息失败 
 const getUserInfoVerify = () => {
   if (baseInfo.value) {
-    console.log(1, 'baseInfo.value', baseInfo.value)
     clearInterval(timer.value)
     timer.value = null
     loginLoading.value = false

+ 1 - 1
src/views/recruit/personal/shareJob/index.vue

@@ -198,7 +198,7 @@ const loginSuccess = async (info) => {
   const bool = await handleCheckJobDelivery()
   if (bool) return Snackbar.warning(t('resume.alreadyResume'))
   baseInfo.value = info
-  showHandleDelivery.value = true
+  showHandleDelivery.value = true // 校验流程
 }
 </script>