From b617603a5e9a4f86e47bb3df67e1cd0c9beb2ba1 Mon Sep 17 00:00:00 2001 From: zhengyiming <540361168@qq.com> Date: 星期一, 11 八月 2025 17:03:51 +0800 Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/flexJobMiniApp --- apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue | 108 ++++++++++--- apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue | 6 apps/cMiniApp/src/pages/task/InnerPage.vue | 57 ++---- apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue | 1 packages/services/apiV2/taskUser.ts | 27 +++ apps/cMiniApp/project.private.config.json | 7 packages/hooks/task.ts | 4 apps/cMiniApp/src/subpackages/curriculum/mineCertificate/InnerPage.vue | 9 + apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue | 13 packages/services/apiV2/index.ts | 2 packages/hooks/area.ts | 47 ++++- apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue | 39 ++-- packages/utils/area.ts | 6 packages/services/apiV2/typings.d.ts | 40 ++++ apps/cMiniApp/src/subpackages/curriculum/mineWorkExperience/InnerPage.vue | 28 ++- packages/constants/apiEnum.ts | 26 ++ apps/cMiniApp/src/pages/mine/index.vue | 43 ++++ 17 files changed, 322 insertions(+), 141 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 a6c0377..02429d4 100644 --- a/apps/cMiniApp/project.private.config.json +++ b/apps/cMiniApp/project.private.config.json @@ -77,13 +77,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/editMineInfo/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue index 61ef2e5..fb29bf4 100644 --- a/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue @@ -26,7 +26,7 @@ </nut-form-item> <nut-form-item label="甯搁┗鍩庡競:" class="bole-form-item" prop="areaList"> <ChooseInputWithAreaPicker - :columns="completeAreaTree" + :columns="areaTree" v-model="form.areaList" placeholder="璇烽�夋嫨甯搁┗鍩庡競" ></ChooseInputWithAreaPicker> @@ -42,7 +42,7 @@ import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; import { ChooseInputWithPicker, ChooseInputWithAreaPicker } from '@12333/components'; import { convertApi2FormUrlOnlyOne, Message, setOSSLink } from '@12333/utils'; -import { useArea, useDictionaryDataSelect } from '@12333/hooks'; +import { useAreaTree, useDictionaryDataSelect } from '@12333/hooks'; import { CategoryCode } from '@12333/constants'; import * as userResumeServices from '@12333/services/apiV2/userResume'; import Taro from '@tarojs/taro'; @@ -60,7 +60,7 @@ categoryCode: CategoryCode.Education, }); -const { completeAreaTree } = useArea(); +const { areaTree } = useAreaTree(); const form = reactive({ avatar: [], 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 cc6ab80..393a3ce 100644 --- a/packages/constants/apiEnum.ts +++ b/packages/constants/apiEnum.ts @@ -91,20 +91,22 @@ Dictionary = 0, /**浠诲姟 */ Task = 1, + /**浠诲姟闆囦剑 */ + TaskUser = 2, /**鐢ㄦ埛璁よ瘉 */ - Auth = 2, + Auth = 3, /**鐢ㄦ埛鑿滃崟 */ - Menu = 3, + Menu = 4, /**鐢ㄦ埛璧勬簮 */ - Resource = 4, + Resource = 5, /**鐢ㄦ埛瑙掕壊 */ - Role = 5, + Role = 6, /**鐢ㄦ埛淇℃伅 */ - User = 6, + User = 7, /**鐢ㄦ埛绠�鍘� */ - UserResume = 7, + UserResume = 8, /**浼佷笟淇℃伅 */ - Enterprise = 8, + Enterprise = 9, } /** 璧勬簮璇锋眰鏂瑰紡 */ @@ -191,6 +193,16 @@ Complete = 20, } +/** 浠诲姟褰曠敤鐘舵�� */ +export enum EnumTaskUserHireStatus { + /**寰呭綍鐢� */ + Wait = 10, + /**宸插綍鐢� */ + Pass = 20, + /**宸茶阿缁� */ + Refuse = 30, +} + /** 鐢ㄦ埛鎬у埆 */ export enum EnumUserGender { /**鐢� */ diff --git a/packages/hooks/area.ts b/packages/hooks/area.ts index f8bd597..684ce2c 100644 --- a/packages/hooks/area.ts +++ b/packages/hooks/area.ts @@ -4,6 +4,7 @@ import { AreaType, CategoryCode } from '@12333/constants'; import Taro, { EventChannel } from '@tarojs/taro'; import { useDictionaryDataSelect } from './dic'; +import axios from 'axios'; export function useArea() { const queryClient = useQueryClient(); @@ -12,13 +13,12 @@ categoryCode: CategoryCode.Area, staleTime: Infinity, all: true, - maxDeep: AreaType.City, + maxDeep: AreaType.Area, }); const areaList = computed(() => dictionaryDataList.value.map(convertDictionaryToAreaTreeNode)); - console.log('areaList: ', areaList); - const areaTree = computed(() => formatAreaListToTree(areaList.value)); + // const areaTree = computed(() => formatAreaListToTree(areaList.value)); function getAreaFromCompleteAreaList(areaCode: string) { return areaList.value.find((x) => x.areaCode === areaCode); @@ -31,20 +31,41 @@ return { completeAreaList: areaList, areaList, - completeAreaTree: areaTree, - provinceList: computed(() => areaList.value.filter((x) => x.layer === AreaType.Province)), + // completeAreaTree: areaTree, + // provinceList: computed(() => areaList.value.filter((x) => x.layer === AreaType.Province)), getAreaFromCompleteAreaList, getAreaByAreaCode, }; +} + +export function useAreaTree() { + axios.get('https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/12333/area.txt').then((res) => { + console.log(res); + }); + const { data } = useQuery({ + queryKey: ['area.txt'], + queryFn() { + return axios + .get<API.AreaTreeNode[]>( + 'https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/12333/area.txt' + ) + .then((res) => res.data); + }, + + placeholderData: () => [] as API.AreaTreeNode[], + }); + + const areaTree = computed(() => formatAreaListToTree(data.value)); + + return { areaTree: areaTree }; } function convertDictionaryToAreaTreeNode( item: API.SelectOptionStringGetDictionaryDataSelectQueryResultOption ) { return { - children: [], areaCode: item.data?.code, - parentCode: item.data?.field1, + parentCode: item.data?.parentCode, areaName: item.label, layer: Number(item.data?.field4), quickQuery: item.data?.field2, @@ -79,13 +100,13 @@ }; } -export function useProvinceList() { - const { provinceList } = useArea(); +// export function useProvinceList() { +// const { provinceList } = useArea(); - return { - provinceList, - }; -} +// return { +// provinceList, +// }; +// } export const globalEventEmitter = new Taro.Events(); 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/index.ts b/packages/services/apiV2/index.ts index e33974b..a1555c0 100644 --- a/packages/services/apiV2/index.ts +++ b/packages/services/apiV2/index.ts @@ -10,6 +10,7 @@ import * as task from './task'; import * as enterprise from './enterprise'; import * as role from './role'; +import * as taskUser from './taskUser'; import * as menu from './menu'; export default { userResume, @@ -20,5 +21,6 @@ task, enterprise, role, + taskUser, menu, }; diff --git a/packages/services/apiV2/taskUser.ts b/packages/services/apiV2/taskUser.ts new file mode 100644 index 0000000..694be3e --- /dev/null +++ b/packages/services/apiV2/taskUser.ts @@ -0,0 +1,27 @@ +/* eslint-disable */ +// @ts-ignore +import { request } from '@/utils/request'; + +/** 鎶ュ悕浠诲姟 POST /api/flexjob/taskUser/applyTask */ +export async function applyTask(body: API.ApplyTaskCommand, options?: API.RequestConfig) { + return request<number>('/api/flexjob/taskUser/applyTask', { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} + +/** 鏀惰棌浠诲姟 POST /api/flexjob/taskUser/collectTask */ +export async function collectTask(body: API.CollectTaskCommand, options?: API.RequestConfig) { + return request<number>('/api/flexjob/taskUser/collectTask', { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} diff --git a/packages/services/apiV2/typings.d.ts b/packages/services/apiV2/typings.d.ts index a8f052a..8638b22 100644 --- a/packages/services/apiV2/typings.d.ts +++ b/packages/services/apiV2/typings.d.ts @@ -145,6 +145,11 @@ request?: GetUserResumeWorkExperienceQuery; } + interface ApplyTaskCommand { + /** 浠诲姟Id */ + ids?: string[]; + } + interface BindWxmpUserInfoCommand { /** 鍖呮嫭鏁忔劅鏁版嵁鍦ㄥ唴鐨勫畬鏁寸敤鎴蜂俊鎭殑鍔犲瘑鏁版嵁 */ encryptedData: string; @@ -159,6 +164,13 @@ phoneNumber: string; /** 楠岃瘉鐮� */ verifyCode: string; + } + + interface CollectTaskCommand { + /** 浠诲姟Id */ + ids?: string[]; + /** 鏄惁鏀惰棌 */ + isCollect?: boolean; } interface DeleteDictionaryCategoryCommand { @@ -262,20 +274,22 @@ Dictionary = 0, /**浠诲姟 */ Task = 1, + /**浠诲姟闆囦剑 */ + TaskUser = 2, /**鐢ㄦ埛璁よ瘉 */ - Auth = 2, + Auth = 3, /**鐢ㄦ埛鑿滃崟 */ - Menu = 3, + Menu = 4, /**鐢ㄦ埛璧勬簮 */ - Resource = 4, + Resource = 5, /**鐢ㄦ埛瑙掕壊 */ - Role = 5, + Role = 6, /**鐢ㄦ埛淇℃伅 */ - User = 6, + User = 7, /**鐢ㄦ埛绠�鍘� */ - UserResume = 7, + UserResume = 8, /**浼佷笟淇℃伅 */ - Enterprise = 8, + Enterprise = 9, } enum EnumResourceMethod { @@ -351,6 +365,15 @@ Wait = 10, /**宸插畨鎺� */ Complete = 20, + } + + enum EnumTaskUserHireStatus { + /**寰呭綍鐢� */ + Wait = 10, + /**宸插綍鐢� */ + Pass = 20, + /**宸茶阿缁� */ + Refuse = 30, } enum EnumUserGender { @@ -1481,6 +1504,8 @@ releaseStatus?: EnumTaskReleaseStatus; recommendStatus?: EnumTaskRecommendStatus; checkReceiveStatus?: EnumTaskCheckReceiveStatus; + /** 褰曠敤鐘舵�� */ + hireStatus?: EnumTaskUserHireStatus[]; pageModel?: PagedListQueryPageModel; } @@ -1536,6 +1561,7 @@ recommendStatus?: EnumTaskRecommendStatus; /** 鍒涘缓鏃堕棿 */ createdTime?: string; + hireStatus?: EnumTaskUserHireStatus; } interface GetTaskInfosQueryResultObjectData { diff --git a/packages/utils/area.ts b/packages/utils/area.ts index aa4c806..c41d617 100644 --- a/packages/utils/area.ts +++ b/packages/utils/area.ts @@ -2,7 +2,7 @@ export function formatAreaListToTree( areaDataList: API.AreaTreeNode[], - parentId = '', + parentId = null, maxLayer = AreaType.Area ) { const treeNodeList: API.AreaTreeNode[] = []; @@ -11,7 +11,9 @@ const areaTreeNode: API.AreaTreeNode = { ...areaData }; if (areaData.parentCode === parentId && areaData.layer <= maxLayer) { const children = formatAreaListToTree(areaDataList, areaData.areaCode, maxLayer); - areaTreeNode.children = children; + if (children.length > 0) { + areaTreeNode.children = children; + } treeNodeList.push(areaTreeNode); } }); -- Gitblit v1.9.1