|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <ContentScrollView :paddingH="false"> | 
|---|
|  |  |  | <nut-form :model-value="form" ref="formRef" :rules="rules"> | 
|---|
|  |  |  | <nut-form-item label="证书类型:" class="bole-form-item" prop="type"> | 
|---|
|  |  |  | <nut-form-item label="证书类型:" class="bole-form-item" prop="typeCode"> | 
|---|
|  |  |  | <ChooseInputWithPicker | 
|---|
|  |  |  | v-model="form.type" | 
|---|
|  |  |  | v-model="form.typeCode" | 
|---|
|  |  |  | placeholder="请选择证书类型" | 
|---|
|  |  |  | :value-enum="TaskStatusText" | 
|---|
|  |  |  | :value-enum="certificateTypeList" | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </nut-form-item> | 
|---|
|  |  |  | <nut-form-item label="证书编号:" class="bole-form-item" prop="certificateNumber"> | 
|---|
|  |  |  | <nut-input v-model="form.certificateNumber" type="number" placeholder="请输入"> </nut-input> | 
|---|
|  |  |  | <nut-form-item label="证书编号:" class="bole-form-item" prop="code"> | 
|---|
|  |  |  | <nut-input v-model="form.code" type="number" placeholder="请输入"> </nut-input> | 
|---|
|  |  |  | </nut-form-item> | 
|---|
|  |  |  | <nut-form-item | 
|---|
|  |  |  | label="永久证书:" | 
|---|
|  |  |  | class="bole-form-item permanent-certificate" | 
|---|
|  |  |  | prop="isPermanentCertificate" | 
|---|
|  |  |  | prop="isForever" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <nut-switch v-model="form.isPermanentCertificate" /> | 
|---|
|  |  |  | <nut-switch v-model="form.isForever" /> | 
|---|
|  |  |  | </nut-form-item> | 
|---|
|  |  |  | <nut-form-item label="开始日期:" class="bole-form-item" prop="startDate"> | 
|---|
|  |  |  | <ChooseInputWithDatePicker v-model="form.startDate"></ChooseInputWithDatePicker> | 
|---|
|  |  |  | </nut-form-item> | 
|---|
|  |  |  | <nut-form-item label="结束日期:" class="bole-form-item" prop="endDate"> | 
|---|
|  |  |  | <ChooseInputWithDatePicker v-model="form.endDate"></ChooseInputWithDatePicker> | 
|---|
|  |  |  | </nut-form-item> | 
|---|
|  |  |  | <nut-form-item label="发证单位:" class="bole-form-item" prop="certificateNumber"> | 
|---|
|  |  |  | <nut-input v-model="form.certificateNumber" placeholder="请输入"> </nut-input> | 
|---|
|  |  |  | <template v-if="!form.isForever"> | 
|---|
|  |  |  | <nut-form-item label="开始日期:" class="bole-form-item" prop="startDate"> | 
|---|
|  |  |  | <ChooseInputWithDatePicker | 
|---|
|  |  |  | v-model="form.startDate" | 
|---|
|  |  |  | placeholder="请选择开始日期" | 
|---|
|  |  |  | ></ChooseInputWithDatePicker> | 
|---|
|  |  |  | </nut-form-item> | 
|---|
|  |  |  | <nut-form-item label="结束日期:" class="bole-form-item" prop="endDate"> | 
|---|
|  |  |  | <ChooseInputWithDatePicker | 
|---|
|  |  |  | v-model="form.endDate" | 
|---|
|  |  |  | placeholder="请选择结束日期" | 
|---|
|  |  |  | ></ChooseInputWithDatePicker> | 
|---|
|  |  |  | </nut-form-item> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | <nut-form-item label="发证单位:" class="bole-form-item" prop="issueUnit"> | 
|---|
|  |  |  | <nut-input v-model="form.issueUnit" placeholder="请输入"> </nut-input> | 
|---|
|  |  |  | </nut-form-item> | 
|---|
|  |  |  | <div class="certificate-upload"> | 
|---|
|  |  |  | <div class="certificate-upload-title">上传证书</div> | 
|---|
|  |  |  | <nut-form-item | 
|---|
|  |  |  | label="证书正面照片(请确保证书号、头像照片等清晰可见)" | 
|---|
|  |  |  | class="bole-form-item" | 
|---|
|  |  |  | prop="photo" | 
|---|
|  |  |  | prop="img" | 
|---|
|  |  |  | label-position="top" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <Uploader v-model:file-list="form.photo" :maximum="1" class="bole-uploader"> </Uploader> | 
|---|
|  |  |  | <Uploader v-model:file-list="form.img" :maximum="1" class="bole-uploader"> </Uploader> | 
|---|
|  |  |  | </nut-form-item> | 
|---|
|  |  |  | <nut-form-item | 
|---|
|  |  |  | label="证书反面照片(或其他有内容页)" | 
|---|
|  |  |  | class="bole-form-item" | 
|---|
|  |  |  | prop="photo" | 
|---|
|  |  |  | prop="backImg" | 
|---|
|  |  |  | label-position="top" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <Uploader v-model:file-list="form.photo" :maximum="1" class="bole-uploader"> </Uploader> | 
|---|
|  |  |  | <Uploader v-model:file-list="form.backImg" :maximum="1" class="bole-uploader"> </Uploader> | 
|---|
|  |  |  | </nut-form-item> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </nut-form> | 
|---|
|  |  |  | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script setup lang="ts"> | 
|---|
|  |  |  | import { useUser } from '@/hooks'; | 
|---|
|  |  |  | import { ChooseInputWithPicker, ChooseInputWithDatePicker } from '@12333/components'; | 
|---|
|  |  |  | import * as userResumeServices from '@12333/services/apiV2/userResume'; | 
|---|
|  |  |  | import { TaskStatusText, TaskStatus } from '@/constants'; | 
|---|
|  |  |  | import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; | 
|---|
|  |  |  | import { useQuery } from '@tanstack/vue-query'; | 
|---|
|  |  |  | import { useQuery, useQueryClient } from '@tanstack/vue-query'; | 
|---|
|  |  |  | import Taro from '@tarojs/taro'; | 
|---|
|  |  |  | import { useDictionaryDataSelect, useUpdateResume } from '@12333/hooks'; | 
|---|
|  |  |  | import { CategoryCode } from '@12333/constants'; | 
|---|
|  |  |  | import { convertApi2FormUrlOnlyOne, Message, setOSSLink, FormValidator } from '@12333/utils'; | 
|---|
|  |  |  | import dayjs from 'dayjs'; | 
|---|
|  |  |  | import { goBack } from '@/utils'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | defineOptions({ | 
|---|
|  |  |  | name: 'InnerPage', | 
|---|
|  |  |  | 
|---|
|  |  |  | const router = Taro.useRouter(); | 
|---|
|  |  |  | const id = router.params?.id as string; | 
|---|
|  |  |  | const isEdit = computed(() => !!id); | 
|---|
|  |  |  | const { updateUserResumeCredentials } = useUpdateResume(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { dictionaryDataList: certificateTypeList } = useDictionaryDataSelect({ | 
|---|
|  |  |  | categoryCode: CategoryCode.CertificateType, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const form = reactive({ | 
|---|
|  |  |  | type: TaskStatus.All, | 
|---|
|  |  |  | certificateNumber: '', | 
|---|
|  |  |  | typeCode: '', | 
|---|
|  |  |  | code: '', | 
|---|
|  |  |  | startDate: '', | 
|---|
|  |  |  | endDate: '', | 
|---|
|  |  |  | isPermanentCertificate: false, | 
|---|
|  |  |  | photo: [], | 
|---|
|  |  |  | issueUnit: '', | 
|---|
|  |  |  | isForever: false, | 
|---|
|  |  |  | img: [], | 
|---|
|  |  |  | backImg: [], | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { | 
|---|
|  |  |  | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | placeholderData: () => ({} as API.GetUserResumeCredentialQueryResult), | 
|---|
|  |  |  | enabled: isEdit.value, | 
|---|
|  |  |  | enabled: computed(() => isEdit.value), | 
|---|
|  |  |  | onSuccess(data) { | 
|---|
|  |  |  | form.typeCode = data.typeCode; | 
|---|
|  |  |  | form.code = data.code; | 
|---|
|  |  |  | form.startDate = data.startDate ? dayjs(data.startDate).format('YYYY-MM-DD') : ''; | 
|---|
|  |  |  | form.endDate = data.startDate ? dayjs(data.endDate).format('YYYY-MM-DD') : ''; | 
|---|
|  |  |  | form.issueUnit = data.issueUnit; | 
|---|
|  |  |  | form.isForever = data.isForever; | 
|---|
|  |  |  | form.img = convertApi2FormUrlOnlyOne(setOSSLink(data.img)); | 
|---|
|  |  |  | form.backImg = convertApi2FormUrlOnlyOne(setOSSLink(data.backImg)); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const rules = reactive<FormRules>({ | 
|---|
|  |  |  | type: [{ required: true, message: '请输入手机号' }], | 
|---|
|  |  |  | typeCode: [{ required: true, message: '请选择证书类型' }], | 
|---|
|  |  |  | startDate: [{ required: true, message: '请选择开始日期' }], | 
|---|
|  |  |  | endDate: [{ required: true, message: '请选择结束日期' }], | 
|---|
|  |  |  | photo: [{ required: true, message: '请上传证书正面照' }], | 
|---|
|  |  |  | endDate: [ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | required: true, | 
|---|
|  |  |  | message: '请选择结束日期', | 
|---|
|  |  |  | validator(value) { | 
|---|
|  |  |  | if (!value) return Promise.reject('请选择结束日期'); | 
|---|
|  |  |  | if (value <= form.startDate) return Promise.reject('结束日期不能小于开始日期'); | 
|---|
|  |  |  | return Promise.resolve(true); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | ], | 
|---|
|  |  |  | img: [{ required: true, message: '请上传证书正面照', validator: FormValidator.validatorArray }], | 
|---|
|  |  |  | backImg: [ | 
|---|
|  |  |  | { required: true, message: '请上传证书反面照', validator: FormValidator.validatorArray }, | 
|---|
|  |  |  | ], | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | const formRef = ref<any>(null); | 
|---|
|  |  |  | function handleConfirm() { | 
|---|
|  |  |  | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function confirm() {} | 
|---|
|  |  |  | async function confirm() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | let params: API.SaveUserResumeCredentialCommand = { | 
|---|
|  |  |  | typeCode: form.typeCode, | 
|---|
|  |  |  | code: form.code, | 
|---|
|  |  |  | isForever: form.isForever, | 
|---|
|  |  |  | startDate: form.isForever ? '' : dayjs(form.startDate).format('YYYY-MM-DD 00:00:00'), | 
|---|
|  |  |  | endDate: form.isForever ? '' : dayjs(form.endDate).format('YYYY-MM-DD 23:59:59'), | 
|---|
|  |  |  | issueUnit: form.issueUnit, | 
|---|
|  |  |  | img: form.img?.[0]?.path, | 
|---|
|  |  |  | backImg: form.backImg?.[0]?.path, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | if (isEdit.value) { | 
|---|
|  |  |  | params.id = id; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | let res = await userResumeServices.saveUserResumeCredential(params); | 
|---|
|  |  |  | if (res) { | 
|---|
|  |  |  | Message.success(isEdit.value ? '编辑成功' : '添加成功', { | 
|---|
|  |  |  | onClosed() { | 
|---|
|  |  |  | goBack(); | 
|---|
|  |  |  | updateUserResumeCredentials(); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (error) {} | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style lang="scss"> | 
|---|