|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <ContentScrollView :paddingH="false"> | 
|---|
|  |  |  | <nut-form :model-value="form" ref="formRef" :rules="rules"> | 
|---|
|  |  |  | <nut-form-item label="头像:" class="bole-form-item" prop="avatarUrl"> | 
|---|
|  |  |  | <Uploader v-model:file-list="form.avatarUrl" :maximum="1" class="bole-uploader"> </Uploader> | 
|---|
|  |  |  | <nut-form-item label="头像:" class="bole-form-item" prop="avatar"> | 
|---|
|  |  |  | <Uploader v-model:file-list="form.avatar" :maximum="1" class="bole-uploader"> </Uploader> | 
|---|
|  |  |  | </nut-form-item> | 
|---|
|  |  |  | <nut-form-item label="姓名:" class="bole-form-item" prop="name"> | 
|---|
|  |  |  | <nut-input v-model.trim="form.name" placeholder="请输入企业名称" /> | 
|---|
|  |  |  | <nut-input v-model.trim="form.name" placeholder="请输入姓名" /> | 
|---|
|  |  |  | </nut-form-item> | 
|---|
|  |  |  | <nut-form-item label="手机号:" class="bole-form-item" prop="phoneNumber" required> | 
|---|
|  |  |  | <nut-input v-model.trim="form.phoneNumber" placeholder="请输入手机号" type="text" /> | 
|---|
|  |  |  | <nut-form-item label="手机号:" class="bole-form-item" prop="contactPhoneNumber" required> | 
|---|
|  |  |  | <nut-input v-model.trim="form.contactPhoneNumber" placeholder="请输入手机号" type="text" /> | 
|---|
|  |  |  | </nut-form-item> | 
|---|
|  |  |  | <nut-form-item label="身份:" class="bole-form-item" prop="socialIdentity"> | 
|---|
|  |  |  | <nut-form-item label="身份:" class="bole-form-item" prop="personalIdentityCode"> | 
|---|
|  |  |  | <ChooseInputWithPicker | 
|---|
|  |  |  | v-model="form.socialIdentity" | 
|---|
|  |  |  | v-model="form.personalIdentityCode" | 
|---|
|  |  |  | placeholder="请选择身份" | 
|---|
|  |  |  | :value-enum="IdentityTypeList" | 
|---|
|  |  |  | :value-enum="identityList" | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </nut-form-item> | 
|---|
|  |  |  | <nut-form-item label="学历:" class="bole-form-item" prop="educationalLevel"> | 
|---|
|  |  |  | <nut-form-item label="学历:" class="bole-form-item" prop="educationalBackgroundCode"> | 
|---|
|  |  |  | <ChooseInputWithPicker | 
|---|
|  |  |  | v-model="form.educationalLevel" | 
|---|
|  |  |  | v-model="form.educationalBackgroundCode" | 
|---|
|  |  |  | placeholder="请选择学历" | 
|---|
|  |  |  | :value-enum="EducationTypeList" | 
|---|
|  |  |  | :value-enum="educationList" | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </nut-form-item> | 
|---|
|  |  |  | <nut-form-item label="常驻城市:" class="bole-form-item" prop="areaList"> | 
|---|
|  |  |  | <ChooseInputWithAreaPicker | 
|---|
|  |  |  | :columns="cityAreaTree" | 
|---|
|  |  |  | :columns="areaTree" | 
|---|
|  |  |  | v-model="form.areaList" | 
|---|
|  |  |  | placeholder="请选择常驻城市" | 
|---|
|  |  |  | ></ChooseInputWithAreaPicker> | 
|---|
|  |  |  | 
|---|
|  |  |  | <script setup lang="ts"> | 
|---|
|  |  |  | import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; | 
|---|
|  |  |  | import { ChooseInputWithPicker, ChooseInputWithAreaPicker } from '@12333/components'; | 
|---|
|  |  |  | import { TaskStatusText } from '@/constants'; | 
|---|
|  |  |  | import { convertApi2FormUrlOnlyOne, Message, setOSSLink } from '@12333/utils'; | 
|---|
|  |  |  | import { useAllAreaList, useArea, useSearchSettingType } from '@12333/hooks'; | 
|---|
|  |  |  | import { Gender, SearchType } from '@12333/constants'; | 
|---|
|  |  |  | import * as userResumeServices from '@12333/services/api/userResume'; | 
|---|
|  |  |  | import { useAreaTree, useDictionaryDataSelect, useUpdateResume } from '@12333/hooks'; | 
|---|
|  |  |  | import { AreaType, CategoryCode } from '@12333/constants'; | 
|---|
|  |  |  | import * as userResumeServices from '@12333/services/apiV2/userResume'; | 
|---|
|  |  |  | import Taro from '@tarojs/taro'; | 
|---|
|  |  |  | import { useQuery } from '@tanstack/vue-query'; | 
|---|
|  |  |  | import { useEventChannel } from 'senin-mini/hooks'; | 
|---|
|  |  |  | import { goBack } from '@/utils'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | defineOptions({ | 
|---|
|  |  |  | name: 'InnerPage', | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { searchSettingTypeList: EducationTypeList } = useSearchSettingType({ | 
|---|
|  |  |  | searchType: SearchType.Education, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | const { searchSettingTypeList: IdentityTypeList } = useSearchSettingType({ | 
|---|
|  |  |  | searchType: SearchType.Identity, | 
|---|
|  |  |  | const { updateUserResume } = useUpdateResume(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const eventChannel = useEventChannel(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { dictionaryDataList: identityList } = useDictionaryDataSelect({ | 
|---|
|  |  |  | categoryCode: CategoryCode.Identity, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { findAreaNameFromCode, cityAreaTree } = useAllAreaList(); | 
|---|
|  |  |  | const { dictionaryDataList: educationList } = useDictionaryDataSelect({ | 
|---|
|  |  |  | categoryCode: CategoryCode.Education, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { areaTree } = useAreaTree({ | 
|---|
|  |  |  | maxLayer: AreaType.City, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const form = reactive({ | 
|---|
|  |  |  | avatarUrl: [], | 
|---|
|  |  |  | avatar: [], | 
|---|
|  |  |  | name: '', | 
|---|
|  |  |  | phoneNumber: '', | 
|---|
|  |  |  | gender: Gender.Male, | 
|---|
|  |  |  | socialIdentity: '', | 
|---|
|  |  |  | educationalLevel: '', | 
|---|
|  |  |  | areaList: [] as number[], | 
|---|
|  |  |  | contactPhoneNumber: '', | 
|---|
|  |  |  | personalIdentityCode: '', | 
|---|
|  |  |  | educationalBackgroundCode: '', | 
|---|
|  |  |  | areaList: [] as string[], | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { | 
|---|
|  |  |  | 
|---|
|  |  |  | data: detail, | 
|---|
|  |  |  | refetch, | 
|---|
|  |  |  | } = useQuery({ | 
|---|
|  |  |  | queryKey: ['userResumeServices/getUserResumeBaseInfo'], | 
|---|
|  |  |  | queryKey: ['userResumeServices/getUserResumePersonal'], | 
|---|
|  |  |  | queryFn: async () => { | 
|---|
|  |  |  | return await userResumeServices.getUserResumeBaseInfo({ | 
|---|
|  |  |  | showLoading: false, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | return await userResumeServices.getUserResumePersonal( | 
|---|
|  |  |  | {}, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | showLoading: false, | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | placeholderData: () => ({} as API.UserResumeBaseInfoOutput), | 
|---|
|  |  |  | placeholderData: () => ({} as API.GetUserResumePersonalQueryResult), | 
|---|
|  |  |  | onSuccess(data) { | 
|---|
|  |  |  | form.avatarUrl = convertApi2FormUrlOnlyOne(setOSSLink(data.avatarUrl)); | 
|---|
|  |  |  | form.name = data.name; | 
|---|
|  |  |  | form.phoneNumber = data.phoneNumber; | 
|---|
|  |  |  | form.gender = data.genderType; | 
|---|
|  |  |  | form.socialIdentity = data.socialIdentity; | 
|---|
|  |  |  | form.educationalLevel = data.educationalLevel; | 
|---|
|  |  |  | form.areaList = [data.residentProvinceCode, data.residentCityCode]; | 
|---|
|  |  |  | form.avatar = convertApi2FormUrlOnlyOne(data.avatar); | 
|---|
|  |  |  | form.name = data.name ?? ''; | 
|---|
|  |  |  | form.contactPhoneNumber = data.contactPhoneNumber ?? ''; | 
|---|
|  |  |  | form.personalIdentityCode = data.personalIdentityCode ?? ''; | 
|---|
|  |  |  | form.educationalBackgroundCode = data.educationalBackgroundCode ?? ''; | 
|---|
|  |  |  | form.areaList = [data.provinceCode, data.cityCode].filter(Boolean); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const rules = reactive<FormRules>({ | 
|---|
|  |  |  | phoneNumber: [{ required: true, message: '请输入手机号' }], | 
|---|
|  |  |  | socialIdentity: [{ required: true, message: '请选择身份' }], | 
|---|
|  |  |  | educationalLevel: [{ required: true, message: '请选择学历' }], | 
|---|
|  |  |  | areaList: [{ required: true, message: '请选择常驻城市' }], | 
|---|
|  |  |  | contactPhoneNumber: [{ required: true, message: '请输入手机号' }], | 
|---|
|  |  |  | personalIdentityCode: [{ required: true, message: '请选择身份' }], | 
|---|
|  |  |  | educationalBackgroundCode: [{ required: true, message: '请选择学历' }], | 
|---|
|  |  |  | areaList: [ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | required: true, | 
|---|
|  |  |  | validator: () => { | 
|---|
|  |  |  | if (!form.areaList.length) { | 
|---|
|  |  |  | return Promise.reject('请选择常驻城市'); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return Promise.resolve(); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | ], | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | const formRef = ref<any>(null); | 
|---|
|  |  |  | function handleConfirm() { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | async function confirm() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | let params: API.SaveUserResumeBaseInfoInput = { | 
|---|
|  |  |  | let params: API.SaveUserResumePersonalCommand = { | 
|---|
|  |  |  | name: form.name, | 
|---|
|  |  |  | avatarUrl: form.avatarUrl[0]?.path, | 
|---|
|  |  |  | phoneNumber: form.phoneNumber, | 
|---|
|  |  |  | educationalLevel: form.educationalLevel, | 
|---|
|  |  |  | socialIdentity: form.socialIdentity, | 
|---|
|  |  |  | residentProvinceCode: form.areaList[0], | 
|---|
|  |  |  | residentProvinceName: findAreaNameFromCode(form.areaList[0]), | 
|---|
|  |  |  | residentCityCode: form.areaList[1], | 
|---|
|  |  |  | residentCityName: findAreaNameFromCode(form.areaList[1]), | 
|---|
|  |  |  | avatar: form.avatar?.[0]?.path ?? '', | 
|---|
|  |  |  | contactPhoneNumber: form.contactPhoneNumber, | 
|---|
|  |  |  | educationalBackgroundCode: form.educationalBackgroundCode, | 
|---|
|  |  |  | personalIdentityCode: form.personalIdentityCode, | 
|---|
|  |  |  | provinceCode: form.areaList?.[0] ?? '', | 
|---|
|  |  |  | cityCode: form.areaList?.[1] ?? '', | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | let res = await userResumeServices.saveUserResumeBaseInfo(params); | 
|---|
|  |  |  | let res = await userResumeServices.saveUserResumePersonal(params); | 
|---|
|  |  |  | if (res) { | 
|---|
|  |  |  | Message.success('保存成功', { | 
|---|
|  |  |  | onClosed() { | 
|---|
|  |  |  | Taro.navigateTo({ | 
|---|
|  |  |  | url: `${RouterPath.mineCurriculumVitae}`, | 
|---|
|  |  |  | success: function (res) { | 
|---|
|  |  |  | res.eventChannel.emit('updateResume', { content: true }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | goBack(); | 
|---|
|  |  |  | updateUserResume(); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (error) {} | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style lang="scss"> | 
|---|
|  |  |  | @import '@/styles/common.scss'; | 
|---|
|  |  |  | </style> | 
|---|