| | |
| | | <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 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> |
| | | <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 } 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 queryClient = useQueryClient(); |
| | | |
| | | 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 = dayjs(data.startDate).format('YYYY-MM-DD 00:00:00'); |
| | | form.endDate = dayjs(data.endDate).format('YYYY-MM-DD 23:59:59'); |
| | | 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: dayjs(form.startDate).format('YYYY-MM-DD 00:00:00'), |
| | | endDate: 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 ? '编辑成功' : '添加成功', { |
| | | onClosed() { |
| | | goBack(); |
| | | queryClient.invalidateQueries(['userResumeServices/getUserResumeCredentials']); |
| | | }, |
| | | }); |
| | | } |
| | | } catch (error) {} |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |