| | |
| | | <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="completeAreaTree" |
| | | 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 { useArea, useDictionaryDataSelect } from '@12333/hooks'; |
| | | import { CategoryCode } from '@12333/constants'; |
| | | import * as userResumeServices from '@12333/services/apiV2/userResume'; |
| | | import Taro from '@tarojs/taro'; |
| | | import { useQuery } from '@tanstack/vue-query'; |
| | | |
| | |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const { searchSettingTypeList: EducationTypeList } = useSearchSettingType({ |
| | | searchType: SearchType.Education, |
| | | }); |
| | | const { searchSettingTypeList: IdentityTypeList } = useSearchSettingType({ |
| | | searchType: SearchType.Identity, |
| | | const { dictionaryDataList: identityList } = useDictionaryDataSelect({ |
| | | categoryCode: CategoryCode.Identity, |
| | | }); |
| | | |
| | | const { findAreaNameFromCode, cityAreaTree } = useAllAreaList(); |
| | | const { dictionaryDataList: educationList } = useDictionaryDataSelect({ |
| | | categoryCode: CategoryCode.Education, |
| | | }); |
| | | |
| | | const { completeAreaTree } = useArea(); |
| | | |
| | | const form = reactive({ |
| | | avatarUrl: [], |
| | | avatar: [], |
| | | name: '', |
| | | phoneNumber: '', |
| | | gender: Gender.Male, |
| | | socialIdentity: '', |
| | | educationalLevel: '', |
| | | areaList: [] as number[], |
| | | identity: '', |
| | | 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.avatar = convertApi2FormUrlOnlyOne(setOSSLink(data.avatar)); |
| | | 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.identity = data.identity; |
| | | form.contactPhoneNumber = data.contactPhoneNumber; |
| | | form.personalIdentityCode = data.personalIdentityCode ?? ''; |
| | | form.educationalBackgroundCode = data.educationalBackgroundCode ?? ''; |
| | | form.areaList = |
| | | data.provinceCode && data.cityCode ? [data.provinceCode, data.cityCode] : ['', '']; |
| | | }, |
| | | }); |
| | | |
| | | 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]), |
| | | identity: form.identity, |
| | | 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() { |