From 676578f3be736ef109d1c8a15da265a62c66ba04 Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期二, 12 八月 2025 13:13:23 +0800 Subject: [PATCH] feat: 接口对接 --- apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue | 148 +++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 118 insertions(+), 30 deletions(-) diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue index ed793cf..6aaee7d 100644 --- a/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue @@ -1,49 +1,55 @@ <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> - <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 label="璇佷功缂栧彿:" class="bole-form-item" prop="code"> + <nut-input v-model="form.code" type="text" 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="certificateNumber"> - <nut-input v-model="form.certificateNumber" placeholder="璇疯緭鍏�"> </nut-input> + <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> + <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="璇佷功姝i潰鐓х墖锛堣纭繚璇佷功鍙枫�佸ご鍍忕収鐗囩瓑娓呮櫚鍙锛�" 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> @@ -54,31 +60,88 @@ </template> <script setup lang="ts"> -import { useUser } from '@/hooks'; import { ChooseInputWithPicker, ChooseInputWithDatePicker } from '@12333/components'; -import { TaskStatusText, TaskStatus } from '@/constants'; +import * as userResumeServices from '@12333/services/apiV2/userResume'; import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; +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 { userDetail } = useUser(); +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 { + isLoading, + isError, + data: detail, + refetch, +} = useQuery({ + queryKey: ['userResumeServices/getUserResumeCredential', id], + queryFn: async () => { + return await userResumeServices.getUserResumeCredential( + { id: id }, + { + showLoading: false, + } + ); + }, + placeholderData: () => ({} as API.GetUserResumeCredentialQueryResult), + enabled: computed(() => isEdit.value), + onSuccess(data) { + form.typeCode = data.typeCode; + form.code = data.code; + form.startDate = dayjs(data.startDate).format('YYYY-MM-DD'); + form.endDate = 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() { @@ -90,7 +153,32 @@ }); } -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.value ? '缂栬緫鎴愬姛' : '娣诲姞鎴愬姛', { + onClosed() { + goBack(); + updateUserResumeCredentials(); + }, + }); + } + } catch (error) {} +} </script> <style lang="scss"> -- Gitblit v1.9.1