From 10089fbb4958ff4780c33bf2e51ec6f04024e2b6 Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期一, 11 八月 2025 15:55:23 +0800 Subject: [PATCH] feat: 接口对接 --- apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue | 108 ++++++++++--- apps/cMiniApp/src/pages/task/InnerPage.vue | 57 ++---- apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue | 1 apps/cMiniApp/project.private.config.json | 7 packages/services/apiV2/auth.ts | 63 ++++++- packages/hooks/task.ts | 4 apps/cMiniApp/src/subpackages/curriculum/mineCertificate/InnerPage.vue | 9 + apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue | 13 apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue | 39 ++-- packages/services/apiV2/typings.d.ts | 80 +++++++++ apps/cMiniApp/src/subpackages/curriculum/mineWorkExperience/InnerPage.vue | 28 ++- packages/constants/apiEnum.ts | 10 + apps/cMiniApp/src/pages/mine/index.vue | 43 ++++ 13 files changed, 338 insertions(+), 124 deletions(-) diff --git a/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue index 639db70..2010249 100644 --- a/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue +++ b/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue @@ -1,7 +1,7 @@ <template> <Calendar v-model="queryMenuState.time"></Calendar> <ProTabs - v-model="queryMenuState.status" + v-model="queryMenuState.checkReceiveStatus" name="task-tab" :showPaneContent="false" class="task-tabs" @@ -9,14 +9,14 @@ title-gutter="8" title-scroll > - <ProTabPane title="寰呮彁浜�" pane-key="10"></ProTabPane> - <ProTabPane title="寰呴獙鏀�" pane-key="10"></ProTabPane> - <ProTabPane title="宸查獙鏀�" pane-key="20"></ProTabPane> + <ProTabPane :title="`寰呮彁浜" :pane-key="EnumTaskCheckReceiveStatus.Wait"></ProTabPane> + <ProTabPane :title="`寰呴獙鏀禶" :pane-key="EnumTaskCheckReceiveStatus.Wait"></ProTabPane> + <ProTabPane :title="`宸查獙鏀禶" :pane-key="EnumTaskCheckReceiveStatus.Completed"></ProTabPane> </ProTabs> <InfiniteLoading scrollViewClassName="common-infinite-scroll-list" v-bind="infiniteLoadingProps" - :key="queryMenuState.status" + :key="queryMenuState.checkReceiveStatus" > <template #renderItem="{ item }"> <MyTaskCard @@ -33,6 +33,7 @@ <script setup lang="ts"> import { MyTaskCard, ProTabs, ProTabPane, Calendar } from '@12333/components'; import Taro from '@tarojs/taro'; +import { EnumTaskCheckReceiveStatus } from '@12333/constants'; import { useTaskList } from '@12333/hooks'; defineOptions({ @@ -41,7 +42,7 @@ const { queryMenuState, infiniteLoadingProps } = useTaskList({ defaultQueryMenuState: { - status: EnumTaskStatus.Wait, + checkReceiveStatus: EnumTaskCheckReceiveStatus.Wait, }, }); diff --git a/apps/cMiniApp/project.private.config.json b/apps/cMiniApp/project.private.config.json index a17549d..ca80844 100644 --- a/apps/cMiniApp/project.private.config.json +++ b/apps/cMiniApp/project.private.config.json @@ -70,13 +70,6 @@ "query": "", "launchMode": "default", "scene": null - }, - { - "name": "", - "pathName": "subpackages/curriculum/mineCertificate/mineCertificate", - "query": "", - "launchMode": "default", - "scene": null } ] } diff --git a/apps/cMiniApp/src/pages/mine/index.vue b/apps/cMiniApp/src/pages/mine/index.vue index 4bafb51..cb55be5 100644 --- a/apps/cMiniApp/src/pages/mine/index.vue +++ b/apps/cMiniApp/src/pages/mine/index.vue @@ -16,7 +16,7 @@ <div class="mine-avatar-wrapper" @click="goLogin"> <UserAvatar :size="52" class="mine-avatar" /> <div class="user-info" v-if="isLogin"> - <div class="user-info-item">{{ userDetail?.userName ?? '' }}</div> + <div class="user-info-item">{{ detail?.name ?? '' }}</div> <!-- <div class="user-info-auth"> <div class="user-info-auth-item"> <div class="user-info-unCertified" v-if="isCertified"> @@ -64,15 +64,30 @@ <img :src="IconArrow" class="mine-order-list-title-icon" /> </div> <div class="mine-order-list-content"> - <nut-badge class="mine-order-list-item" top="8" :value="8" @click="goMineSign"> + <nut-badge + class="mine-order-list-item" + top="8" + :value="detail?.taskCount ?? 0" + @click="goMineSign" + > <img :src="IconOrderSign" class="mine-order-list-icon" /> <div class="mine-order-list-text">鎴戠殑鎶ュ悕</div> </nut-badge> - <nut-badge class="mine-order-list-item" top="8" :value="8" @click="goMineHire"> + <nut-badge + class="mine-order-list-item" + top="8" + :value="detail?.hirePassTaskCount ?? 0" + @click="goMineHire" + > <img :src="IconOrderHire" class="mine-order-list-icon" /> <div class="mine-order-list-text">宸插綍鐢�</div> </nut-badge> - <nut-badge class="mine-order-list-item" top="8" :value="8" @click="goMineCancel"> + <nut-badge + class="mine-order-list-item" + top="8" + :value="detail?.hireRefuseTaskCount ?? 0" + @click="goMineCancel" + > <img :src="IconOrderCancel" class="mine-order-list-icon" /> <div class="mine-order-list-text">宸插彇娑�</div> </nut-badge> @@ -106,6 +121,8 @@ import { useSystemStore } from '@/stores/modules/system'; import PageLayoutWithBg from '@/components/Layout/PageLayoutWithBg.vue'; import { toThousand } from '@12333/utils'; +import { useQuery } from '@tanstack/vue-query'; +import * as authServices from '@12333/services/apiV2/auth'; const { userDetail, isCertified } = useUser(); const isLogin = useIsLogin(); @@ -114,6 +131,24 @@ const { goLoginFn } = useGoLogin(); const bgHeight = computed(() => 133 + systemStore.navHeight); +const { + isLoading, + isError, + data: detail, + refetch, +} = useQuery({ + queryKey: ['authServices/getPersonalLoginInfo'], + queryFn: async () => { + return await authServices.getPersonalLoginInfo( + {}, + { + showLoading: false, + } + ); + }, + placeholderData: () => ({} as API.GetPersonalLoginInfoQueryResult), +}); + function goLogin() { if (!isLogin.value) { goLoginFn(); diff --git a/apps/cMiniApp/src/pages/task/InnerPage.vue b/apps/cMiniApp/src/pages/task/InnerPage.vue index 33a1569..7de494e 100644 --- a/apps/cMiniApp/src/pages/task/InnerPage.vue +++ b/apps/cMiniApp/src/pages/task/InnerPage.vue @@ -1,7 +1,7 @@ <template> - <Calendar v-model="queryState.date"></Calendar> + <Calendar v-model="queryMenuState.time"></Calendar> <ProTabs - v-model="queryState.status" + v-model="queryMenuState.checkReceiveStatus" name="task-tab" :showPaneContent="false" class="task-tabs" @@ -9,16 +9,23 @@ title-gutter="8" title-scroll > - <ProTabPane :title="`寰呮彁浜" :pane-key="10"></ProTabPane> - <ProTabPane :title="`寰呴獙鏀禶" :pane-key="20"></ProTabPane> + <ProTabPane :title="`寰呮彁浜" :pane-key="EnumTaskCheckReceiveStatus.Wait"></ProTabPane> + <ProTabPane :title="`寰呴獙鏀禶" :pane-key="EnumTaskCheckReceiveStatus.Wait"></ProTabPane> + <ProTabPane :title="`宸查獙鏀禶" :pane-key="EnumTaskCheckReceiveStatus.Completed"></ProTabPane> </ProTabs> <InfiniteLoading scrollViewClassName="common-infinite-scroll-list task-list" v-bind="infiniteLoadingProps" - :key="queryState.status" + :key="queryMenuState.checkReceiveStatus" > <template #renderItem="{ item }"> - <MyTaskCard @click="goSubmitTaskDetail(item)" /> + <MyTaskCard + :name="item.name" + :addressName="item.addressName" + :begin-time="item.beginTime" + :end-time="item.endTime" + @click="goSubmitTaskDetail(item)" + /> </template> </InfiniteLoading> </template> @@ -26,44 +33,22 @@ <script setup lang="ts"> import { MyTaskCard, ProTabs, ProTabPane, Calendar } from '@12333/components'; import Taro from '@tarojs/taro'; -import { useInfiniteLoading } from '@12333/hooks'; -import { OrderInputType } from '@12333/constants'; -import * as flexWorkerServices from '@12333/services/api/FlexWorker'; +import { useTaskList } from '@12333/hooks'; +import { EnumTaskCheckReceiveStatus } from '@12333/constants'; defineOptions({ name: 'InnerPage', }); -const queryState = reactive({ - status: 10, - date: new Date(), +const { queryMenuState, infiniteLoadingProps } = useTaskList({ + defaultQueryMenuState: { + checkReceiveStatus: EnumTaskCheckReceiveStatus.Wait, + }, }); -const { infiniteLoadingProps } = useInfiniteLoading( - ({ pageParam }) => { - let params: API.GetFlexTaskListInput = { - pageModel: { - rows: 20, - page: pageParam, - orderInput: [{ property: 'lastShelfTime', order: OrderInputType.Desc }], - }, - }; - - return flexWorkerServices.getFlexTaskByArrange(params, { - showLoading: false, - }); - }, - { - queryKey: ['flexWorkerServices/getFlexTaskByArrange', queryState], - } -); - -function goSubmitTaskDetail(item: API.GetFlexTaskListOutput) { - // Taro.navigateTo({ - // url: `${RouterPath.taskSubmitCheck}?id=${item.id}`, - // }); +function goSubmitTaskDetail(item: API.GetTaskInfosQueryResultItem) { Taro.navigateTo({ - url: `${RouterPath.taskCheckDetail}?id=${item.taskId}`, + url: `${RouterPath.taskCheckDetail}?id=${item.id}`, }); } </script> diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineCertificate/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineCertificate/InnerPage.vue index e659738..f546f29 100644 --- a/apps/cMiniApp/src/subpackages/curriculum/mineCertificate/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/curriculum/mineCertificate/InnerPage.vue @@ -21,11 +21,20 @@ import { RouterPath } from '@/constants'; import * as userResumeServices from '@12333/services/apiV2/userResume'; import { useQuery } from '@tanstack/vue-query'; +import { useEvent } from 'senin-mini/hooks'; defineOptions({ name: 'InnerPage', }); +useEvent('updateResume', function (data: { content: boolean }) { + if (data.content) { + refetch({ + type: 'inactive', + }); + } +}); + const { isLoading, isError, diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue index 123fc38..46c8966 100644 --- a/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue @@ -1,22 +1,22 @@ <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> @@ -24,26 +24,26 @@ <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="璇佷功姝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,13 +54,16 @@ </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', @@ -69,14 +72,21 @@ 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 { @@ -95,14 +105,37 @@ ); }, 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() { @@ -114,7 +147,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 ? '缂栬緫鎴愬姛' : '娣诲姞鎴愬姛', { + onClosed() { + goBack(); + queryClient.invalidateQueries(['userResumeServices/getUserResumeCredentials']); + }, + }); + } + } catch (error) {} +} </script> <style lang="scss"> diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue index e360f49..9a7eca4 100644 --- a/apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue @@ -17,8 +17,7 @@ prop="photo" label-position="top" > - <Uploader v-model:file-list="form.lifeCircleImgUrlList" :maximum="6" class="bole-uploader"> - </Uploader> + <Uploader v-model:file-list="form.photos" :maximum="6" class="bole-uploader"> </Uploader> </nut-form-item> </nut-form> </ContentScrollView> @@ -30,7 +29,7 @@ <script setup lang="ts"> import { goBack } from '@/utils'; import { NumberInput } from '@12333/components'; -import * as userResumeServices from '@12333/services/api/userResume'; +import * as userResumeServices from '@12333/services/apiV2/userResume'; import { convertApiPath2Url, Message } from '@12333/utils'; import { FileItem } from '@nutui/nutui-taro/dist/types/__VUE/uploader/type'; import { useQuery } from '@tanstack/vue-query'; @@ -39,48 +38,50 @@ name: 'InnerPage', }); +const { refetch: userResumeRefetch } = useUserResume(); + const { isLoading, isError, data: detail, refetch, } = useQuery({ - queryKey: ['userResumeServices/getUserResumeDetailInfo'], + queryKey: ['userResumeServices/getUserResumeDetail'], queryFn: async () => { - return await userResumeServices.getUserResumeDetailInfo({ - showLoading: false, - }); + return await userResumeServices.getUserResumeDetail( + {}, + { + showLoading: false, + } + ); }, - placeholderData: () => ({} as API.UserResumeDetailInfoOutput), + placeholderData: () => ({} as API.GetUserResumeDetailQueryResult), onSuccess(data) { form.height = data.height; form.weight = data.weight; - form.lifeCircleImgUrlList = data.lifeCircleImgUrlList?.length - ? data.lifeCircleImgUrlList.map((x) => convertApiPath2Url(x)) - : []; + form.photos = data.photos?.length ? data.photos.map((x) => convertApiPath2Url(x)) : []; }, }); const form = reactive({ - height: '', - weight: '', - lifeCircleImgUrlList: [] as FileItem[], + height: 0, + weight: 0, + photos: [] as FileItem[], }); async function handleConfirm() { try { - let params: API.SaveUserResumeDetailInfoInput = { + let params: API.SaveUserResumeDetailCommand = { weight: form.weight, height: form.weight, - lifeCircleImgUrlList: form.lifeCircleImgUrlList?.length - ? form.lifeCircleImgUrlList.map((x) => x.url) - : [], + photos: form.photos?.length ? form.photos.map((x) => x.path) : [], }; - let res = await userResumeServices.saveUserResumeDetailInfo(params); + let res = await userResumeServices.saveUserResumeDetail(params); if (res) { Message.success('淇濆瓨鎴愬姛', { onClosed() { goBack(); + userResumeRefetch({ type: 'inactive' }); }, }); } diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue index 87b07bf..309e69d 100644 --- a/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue @@ -147,7 +147,6 @@ }, }, success: function (res) { - console.log('res: ', res); res.eventChannel.emit('updatePosition', { content: form.userExpectJobs }); }, }); diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineWorkExperience/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineWorkExperience/InnerPage.vue index 60f5d12..1303900 100644 --- a/apps/cMiniApp/src/subpackages/curriculum/mineWorkExperience/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/curriculum/mineWorkExperience/InnerPage.vue @@ -1,8 +1,8 @@ <template> <ContentScrollView :paddingH="false"> <nut-form :model-value="form" ref="formRef"> - <nut-form-item label="宸ヤ綔骞撮檺:" class="bole-form-item" prop="workingSeniority"> - <nut-input v-model="form.workingSeniority" placeholder="璇疯緭鍏�"> </nut-input> + <nut-form-item label="宸ヤ綔骞撮檺:" class="bole-form-item" prop="workSeniority"> + <nut-input v-model="form.workSeniority" placeholder="璇疯緭鍏�"> </nut-input> </nut-form-item> <nut-form-item label="宸ヤ綔缁忛獙:" class="bole-form-item" prop="workExperience"> <nut-input v-model="form.workExperience" type="textarea" placeholder="璇疯緭鍏�"> </nut-input> @@ -16,7 +16,7 @@ <script setup lang="ts"> import { goBack } from '@/utils'; -import * as userResumeServices from '@12333/services/api/userResume'; +import * as userResumeServices from '@12333/services/apiV2/userResume'; import { Message } from '@12333/utils'; import { useQuery } from '@tanstack/vue-query'; @@ -24,8 +24,10 @@ name: 'InnerPage', }); +const { refetch: userResumeRefetch } = useUserResume(); + const form = reactive({ - workingSeniority: '', + workSeniority: '', workExperience: '', }); @@ -37,21 +39,24 @@ } = useQuery({ queryKey: ['userResumeServices/getUserResumeWorkExperience'], queryFn: async () => { - return await userResumeServices.getUserResumeWorkExperience({ - showLoading: false, - }); + return await userResumeServices.getUserResumeWorkExperience( + {}, + { + showLoading: false, + } + ); }, - placeholderData: () => ({} as API.UserResumeWorkExperienceOutput), + placeholderData: () => ({} as API.GetUserResumeWorkExperienceQueryResult), onSuccess(data) { - form.workingSeniority = data.workingSeniority; + form.workSeniority = data.workSeniority; form.workExperience = data.workExperience; }, }); async function handleConfirm() { try { - let params: API.SaveUserResumeWorkExperienceInput = { - workingSeniority: form.workingSeniority, + let params: API.SaveUserResumeWorkExperienceCommand = { + workSeniority: form.workSeniority, workExperience: form.workExperience, }; let res = await userResumeServices.saveUserResumeWorkExperience(params); @@ -59,6 +64,7 @@ Message.success('淇濆瓨鎴愬姛', { onClosed() { goBack(); + userResumeRefetch({ type: 'inactive' }); }, }); } diff --git a/packages/constants/apiEnum.ts b/packages/constants/apiEnum.ts index 849b19f..cc6ab80 100644 --- a/packages/constants/apiEnum.ts +++ b/packages/constants/apiEnum.ts @@ -199,6 +199,16 @@ Female = 20, } +/** 鐢ㄦ埛瀹炲悕鏂瑰紡 */ +export enum EnumUserRealMethod { + /**涓汉鎵嬫満鍙蜂笁瑕佺礌 */ + Identity3 = 10, + /**閾惰鍗″瑕佺礌 */ + Identity4 = 20, + /**鍒疯劯璁よ瘉 */ + Face = 30, +} + /** 鐢ㄦ埛淇℃伅鐘舵�� */ export enum EnumUserStatus { /**姝e父 */ diff --git a/packages/hooks/task.ts b/packages/hooks/task.ts index bac7643..77af26c 100644 --- a/packages/hooks/task.ts +++ b/packages/hooks/task.ts @@ -2,6 +2,7 @@ import { EnumPagedListOrder, EnumSettlementCycle, + EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskStatus, @@ -27,6 +28,7 @@ status?: EnumTaskStatus; genderLimit?: EnumUserGender; settlementCycle?: EnumSettlementCycle; + checkReceiveStatus?: EnumTaskCheckReceiveStatus; benefitCodes?: string; enterpriseId?: string; time?: Date; @@ -44,6 +46,7 @@ benefitCodes: '', status: '' as any as EnumTaskStatus, releaseStatus: EnumTaskReleaseStatus.InProcess, + checkReceiveStatus: '' as any as EnumTaskCheckReceiveStatus, enterpriseId: '', time: '' as any as Date, ...defaultQueryMenuState, @@ -77,6 +80,7 @@ genderLimit: queryMenuState.genderLimit, status: queryMenuState.status, releaseStatus: queryMenuState.releaseStatus, + checkReceiveStatus: queryMenuState.checkReceiveStatus, enterpriseId: queryMenuState.enterpriseId, beginTime: queryMenuState.time ? dayjs(queryMenuState.time).format('YYYY-MM-DD 00:00:00') diff --git a/packages/services/apiV2/auth.ts b/packages/services/apiV2/auth.ts index 38dc7f7..331a423 100644 --- a/packages/services/apiV2/auth.ts +++ b/packages/services/apiV2/auth.ts @@ -2,12 +2,12 @@ // @ts-ignore import { request } from '@/utils/request'; -/** 缁戝畾鎵嬫満鍙� POST /api/user/auth/bindPhoneNumber */ -export async function bindPhoneNumber( - body: API.BindPhoneNumberCommand, +/** 缁戝畾寰俊灏忕▼搴忕敤鎴蜂俊鎭� POST /api/user/auth/bindWxmpUserInfo */ +export async function bindWxmpUserInfo( + body: API.BindWxmpUserInfoCommand, options?: API.RequestConfig ) { - return request<boolean>('/api/user/auth/bindPhoneNumber', { + return request<API.LoginCommandCallback>('/api/user/auth/bindWxmpUserInfo', { method: 'POST', headers: { 'Content-Type': 'application/json-patch+json', @@ -17,12 +17,12 @@ }); } -/** 缁戝畾寰俊灏忕▼搴忕敤鎴蜂俊鎭� POST /api/user/auth/bindWxmpUserInfo */ -export async function bindWxmpUserInfo( - body: API.BindWxmpUserInfoCommand, +/** 鏇存崲鎵嬫満鍙� POST /api/user/auth/changePhoneNumber */ +export async function changePhoneNumber( + body: API.ChangePhoneNumberCommand, options?: API.RequestConfig ) { - return request<API.LoginCommandCallback>('/api/user/auth/bindWxmpUserInfo', { + return request<boolean>('/api/user/auth/changePhoneNumber', { method: 'POST', headers: { 'Content-Type': 'application/json-patch+json', @@ -81,9 +81,41 @@ }); } +/** 鏌ヨ涓汉鐢ㄦ埛鐧诲綍淇℃伅 GET /api/user/auth/getPersonalLoginInfo */ +export async function getPersonalLoginInfo( + // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) + params: API.APIgetPersonalLoginInfoParams, + options?: API.RequestConfig +) { + return request<API.GetPersonalLoginInfoQueryResult>('/api/user/auth/getPersonalLoginInfo', { + method: 'GET', + params: { + ...params, + request: undefined, + ...params['request'], + }, + ...(options || {}), + }); +} + /** 瀵嗙爜鐧诲綍 POST /api/user/auth/passwordLogin */ export async function passwordLogin(body: API.PasswordLoginCommand, options?: API.RequestConfig) { return request<API.LoginCommandCallback>('/api/user/auth/passwordLogin', { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} + +/** 娉ㄥ唽涓汉璐﹀彿 POST /api/user/auth/registerPersonalUser */ +export async function registerPersonalUser( + body: API.RegisterPersonalUserCommand, + options?: API.RequestConfig +) { + return request<boolean>('/api/user/auth/registerPersonalUser', { method: 'POST', headers: { 'Content-Type': 'application/json-patch+json', @@ -120,6 +152,21 @@ }); } +/** 鍙戦�佹洿鎹㈡墜鏈哄彿鐭俊 POST /api/user/auth/updatePhoneNumberVerifyCode */ +export async function updatePhoneNumberVerifyCode( + body: API.UpdatePhoneNumberVerifyCodeCommand, + options?: API.RequestConfig +) { + return request<string>('/api/user/auth/updatePhoneNumberVerifyCode', { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} + /** 寰俊灏忕▼搴忕櫥褰� POST /api/user/auth/wxmpLogin */ export async function wxmpLogin(body: API.WxmpLoginCommand, options?: API.RequestConfig) { return request<API.LoginCommandCallback>('/api/user/auth/wxmpLogin', { diff --git a/packages/services/apiV2/typings.d.ts b/packages/services/apiV2/typings.d.ts index 1d549f8..a8f052a 100644 --- a/packages/services/apiV2/typings.d.ts +++ b/packages/services/apiV2/typings.d.ts @@ -69,6 +69,11 @@ roleId?: string; } + interface APIgetPersonalLoginInfoParams { + /** 鏌ヨ涓汉鐢ㄦ埛鐧诲綍淇℃伅 */ + request?: GetPersonalLoginInfoQuery; + } + interface APIgetResourceFieldsParams { /** Id */ id?: string; @@ -140,13 +145,6 @@ request?: GetUserResumeWorkExperienceQuery; } - interface BindPhoneNumberCommand { - /** 鎵嬫満鍙风爜 */ - phoneNumber?: string; - /** 楠岃瘉鐮� */ - verifyCode?: string; - } - interface BindWxmpUserInfoCommand { /** 鍖呮嫭鏁忔劅鏁版嵁鍦ㄥ唴鐨勫畬鏁寸敤鎴蜂俊鎭殑鍔犲瘑鏁版嵁 */ encryptedData: string; @@ -154,6 +152,13 @@ iv: string; /** 鑾峰彇浼氳瘽瀵嗛挜 */ sessionKey: string; + } + + interface ChangePhoneNumberCommand { + /** 鎵嬫満鍙风爜 */ + phoneNumber: string; + /** 楠岃瘉鐮� */ + verifyCode: string; } interface DeleteDictionaryCategoryCommand { @@ -355,6 +360,15 @@ Female = 20, } + enum EnumUserRealMethod { + /**涓汉鎵嬫満鍙蜂笁瑕佺礌 */ + Identity3 = 10, + /**閾惰鍗″瑕佺礌 */ + Identity4 = 20, + /**鍒疯劯璁よ瘉 */ + Face = 30, + } + enum EnumUserStatus { /**姝e父 */ Normal = 10, @@ -470,6 +484,24 @@ /** 閿欒鐮� */ errorCode?: string; data?: GetMenuQueryResult; + /** 鎵ц鎴愬姛 */ + success?: boolean; + /** 閿欒淇℃伅 */ + msg?: any; + /** 闄勫姞鏁版嵁 */ + extras?: any; + /** 鏃堕棿鎴� */ + timestamp?: number; + } + + interface FriendlyResultGetPersonalLoginInfoQueryResult { + /** 璺熻釜Id */ + traceId?: string; + /** 鐘舵�佺爜 */ + code?: number; + /** 閿欒鐮� */ + errorCode?: string; + data?: GetPersonalLoginInfoQueryResult; /** 鎵ц鎴愬姛 */ success?: boolean; /** 閿欒淇℃伅 */ @@ -1251,6 +1283,24 @@ name?: string; } + type GetPersonalLoginInfoQuery = Record<string, any>; + + interface GetPersonalLoginInfoQueryResult { + /** Id */ + id?: string; + /** 濮撳悕 */ + name?: string; + /** 鏄惁瀹炲悕 */ + isReal?: boolean; + realMethod?: EnumUserRealMethod; + /** 鎴戠殑鎶ュ悕 */ + taskCount?: number; + /** 宸插綍鐢� */ + hirePassTaskCount?: number; + /** 宸插彇娑� */ + hireRefuseTaskCount?: number; + } + interface GetResourceFieldsQueryResultItem { /** 缂栧彿 */ code?: string; @@ -1702,6 +1752,10 @@ accessToken?: string; /** 鍒锋柊浠ょ墝 */ refreshToken?: string; + /** 浼氳瘽绉橀挜锛堜粎鐢ㄤ簬寰俊灏忕▼搴忔巿鏉冪櫥褰曪級 */ + sessionKey?: string; + /** 鏄惁宸茬粦瀹氭墜鏈哄彿锛堜粎鐢ㄤ簬寰俊灏忕▼搴忔巿鏉冪櫥褰曪級 */ + isBindPhoneNumber?: boolean; } interface PagedListQueryPageModel { @@ -1769,6 +1823,13 @@ password: string; type?: EnumUserType; clientType?: EnumClientType; + } + + interface RegisterPersonalUserCommand { + /** 鎵嬫満鍙风爜 */ + phoneNumber: string; + /** 楠岃瘉鐮� */ + verifyCode: string; } interface SaveDictionaryCategoryCommand { @@ -2201,6 +2262,11 @@ type SyncHumanResourcesAreaDictionaryDataCommand = Record<string, any>; + interface UpdatePhoneNumberVerifyCodeCommand { + /** 鎵嬫満鍙风爜 */ + phoneNumber: string; + } + interface WxmpLoginCommand { /** 鐢ㄦ埛鐧诲綍鍑瘉 */ code: string; -- Gitblit v1.9.1