From 7af4ab328e56300f7dca75de6c532d16464d2f10 Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期二, 12 八月 2025 16:30:35 +0800 Subject: [PATCH] feat: mine --- apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue | 30 +- packages/constants/task.ts | 29 ++ apps/cMiniApp/src/subpackages/mine/mineCancel/InnerPage.vue | 27 + apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue | 63 +++- packages/services/apiV2/taskUser.ts | 32 ++ apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue | 67 +++- apps/bMiniApp/project.private.config.json | 7 apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue | 44 +-- packages/hooks/taskUser.ts | 39 +++ packages/hooks/index.ts | 1 packages/components/src/Card/FlexJobTopView.vue | 27 + apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue | 2 packages/services/apiV2/task.ts | 54 ++++ packages/services/apiV2/typings.d.ts | 248 ++++++++++++++++++ apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue | 4 packages/components/src/Card/FlexJobCard.vue | 27 + apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue | 6 packages/constants/apiEnum.ts | 26 + 18 files changed, 599 insertions(+), 134 deletions(-) diff --git a/apps/bMiniApp/project.private.config.json b/apps/bMiniApp/project.private.config.json index c3f7281..08d5725 100644 --- a/apps/bMiniApp/project.private.config.json +++ b/apps/bMiniApp/project.private.config.json @@ -91,6 +91,13 @@ "query": "", "launchMode": "default", "scene": null + }, + { + "name": "", + "pathName": "subpackages/jobApplicationManage/jobApplicationDetail/jobApplicationDetail", + "query": "id=04c75425-e783-4dbf-0f16-08ddd626b756", + "launchMode": "default", + "scene": null } ] } diff --git a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue index e10ac35..307e0d0 100644 --- a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue +++ b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue @@ -67,7 +67,7 @@ // const props = withDefaults(defineProps<Props>(), {}); const router = Taro.useRouter(); -const taskId = router.params?.taskId; +const id = router.params?.id; const { isLoading, @@ -75,10 +75,10 @@ data: detail, refetch, } = useQuery({ - queryKey: ['taskServices/getTaskInfo', taskId], + queryKey: ['taskServices/getTaskInfo', id], queryFn: async () => { return await taskServices.getTaskInfo( - { id: taskId }, + { id: id }, { showLoading: false, } diff --git a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue index 0bd03d2..adc2bdc 100644 --- a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue +++ b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue @@ -4,14 +4,22 @@ <FlexJobCard :name="item.name" :age="item.age" - :genderType="item.genderType" + :gender="item.gender" + :avatar="item.avatar" + :isReal="item.isReal" + :personalIdentityContent="item.personalIdentityContent" + :educationalBackgroundContent="item.educationalBackgroundContent" + :taskCount="item.taskCount" + :workSeniority="item.workSeniority" :workExperience="item.workExperience" > <template #footerLeft> - <div class="flexJob-card-footer-text">{{ FlexTaskWorkerHireEnum[item.hireStatus] }}</div> + <div class="flexJob-card-footer-text"> + {{ EnumTaskUserHireStatusText[item.hireStatus] }} + </div> </template> <template #footerRight> - <nut-button type="primary" @click="goToJobDetail(item.userId)">鏌ョ湅璇︽儏</nut-button> + <nut-button type="primary" @click="goToJobDetail(item.id)">鏌ョ湅璇︽儏</nut-button> </template> </FlexJobCard> </template> @@ -19,11 +27,9 @@ </template> <script setup lang="ts"> -import { OrderInputType } from '@12333/constants'; +import { EnumTaskUserHireStatusText } from '@12333/constants'; import { RouterPath } from '@/constants'; -import { FlexTaskWorkerHireEnum } from '@12333/constants/task'; -import { useInfiniteLoading } from '@12333/hooks'; -import * as flexWorkerServices from '@12333/services/api/FlexWorker'; +import { useTaskUserList } from '@12333/hooks'; import { FlexJobCard } from '@12333/components'; import Taro from '@tarojs/taro'; @@ -36,27 +42,11 @@ // const props = withDefaults(defineProps<Props>(), {}); const router = Taro.useRouter(); -const taskId = router.params?.taskId ?? ''; +const id = router.params?.id ?? ''; -const { infiniteLoadingProps } = useInfiniteLoading( - ({ pageParam }) => { - let params: API.GetFlexTaskWorkerApplyListInput = { - flexTaskId: taskId, - pageModel: { - rows: 20, - page: pageParam, - orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }], - }, - }; - - return flexWorkerServices.getFlexTaskWorkerApplyList(params, { - showLoading: false, - }); - }, - { - queryKey: ['flexWorkerServices/getFlexTaskWorkerApplyList'], - } -); +const { infiniteLoadingProps } = useTaskUserList({ + id: id, +}); function goToJobDetail(id: string) { Taro.navigateTo({ diff --git a/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue b/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue index d2afb15..170b4a4 100644 --- a/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue +++ b/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue @@ -107,12 +107,12 @@ function goEdit(item: API.GetTaskInfosQueryResultItem, isCopy = false) { Taro.navigateTo({ - url: `${RouterPath.publishTask}?taskId=${item.id}&isCopy=${isCopy}`, + url: `${RouterPath.publishTask}?id=${item.id}&isCopy=${isCopy}`, }); } function goDetail(item: API.GetTaskInfosQueryResultItem) { Taro.navigateTo({ - url: `${RouterPath.jobApplicationDetail}?taskId=${item.id}`, + url: `${RouterPath.jobApplicationDetail}?id=${item.id}`, }); } </script> diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue index 6aaee7d..87a0c9d 100644 --- a/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue @@ -18,18 +18,20 @@ > <nut-switch v-model="form.isForever" /> </nut-form-item> - <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 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> @@ -159,8 +161,8 @@ 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'), + 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, diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue index 07085f8..e4d1581 100644 --- a/apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue @@ -73,7 +73,7 @@ try { let params: API.SaveUserResumeDetailCommand = { weight: form.weight, - height: form.weight, + height: form.height, photos: form.photos?.length ? form.photos.map((x) => x.path) : [], }; let res = await userResumeServices.saveUserResumeDetail(params); diff --git a/apps/cMiniApp/src/subpackages/mine/mineCancel/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineCancel/InnerPage.vue index 6853486..122a79d 100644 --- a/apps/cMiniApp/src/subpackages/mine/mineCancel/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/mine/mineCancel/InnerPage.vue @@ -4,7 +4,16 @@ v-bind="infiniteLoadingProps" > <template #renderItem="{ item }"> - <TaskCard> + <TaskCard + :name="item.name" + :begin-time="item.beginTime" + :end-time="item.endTime" + :billing-method="item.billingMethod" + :benefits="item.benefits" + :service-fee="item.serviceFee" + :settlement-cycle="item.settlementCycle" + :address-name="item.addressName" + > <template #actions> <div class="task-card-actions-text">{{ '宸插彇娑�' }}</div> </template> @@ -15,33 +24,29 @@ <script setup lang="ts"> import { TaskCard } from '@12333/components'; -import { useUserStore } from '@/stores/modules/user'; import { useInfiniteLoading } from '@12333/hooks'; -import { OrderInputType } from '@12333/constants'; -import * as flexWorkerServices from '@12333/services/api/FlexWorker'; +import { EnumPagedListOrder } from '@12333/constants'; +import * as taskServices from '@12333/services/apiV2/task'; defineOptions({ name: 'InnerPage', }); -const userStore = useUserStore(); - const { infiniteLoadingProps } = useInfiniteLoading( ({ pageParam }) => { - let params: API.GetFlexTaskListInput = { + let params: API.GetPersonalCancelTaskInfosQuery = { pageModel: { rows: 20, page: pageParam, - orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }], + orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }], }, }; - - return flexWorkerServices.getFlexTaskByArrange(params, { + return taskServices.getPersonalCancelTaskInfos(params, { showLoading: false, }); }, { - queryKey: ['flexWorkerServices/getFlexTaskByArrange'], + queryKey: ['taskServices/getPersonalCancelTaskInfos'], } ); </script> diff --git a/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue index 15ab8a5..69b284a 100644 --- a/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue @@ -1,6 +1,6 @@ <template> <ProTabs - v-model="queryState.mineHireType" + v-model="queryState.status" name="home-tab" :showPaneContent="false" class="home-tabs" @@ -9,20 +9,38 @@ title-scroll > <ProTabPane :title="`鍏ㄩ儴`" :pane-key="0"></ProTabPane> - <ProTabPane :title="`杩涜涓璥" :pane-key="10"></ProTabPane> - <ProTabPane :title="`寰呴獙鏀禶" :pane-key="20"></ProTabPane> - <ProTabPane :title="`宸插畬鎴恅" :pane-key="30"></ProTabPane> + <ProTabPane + :title="`杩涜涓璥" + :pane-key="GetPersonalHireTaskInfosQueryStatus.InProcess" + ></ProTabPane> + <ProTabPane + :title="`宸插畬鎴恅" + :pane-key="GetPersonalHireTaskInfosQueryStatus.Completed" + ></ProTabPane> </ProTabs> <InfiniteLoading scrollViewClassName="common-infinite-scroll-list home-list" v-bind="infiniteLoadingProps" - :key="queryState.mineHireType" + :key="queryState.status" > <template #renderItem="{ item }"> - <TaskCard @click="goTaskDetail(item)"> + <TaskCard + :name="item.name" + :begin-time="item.beginTime" + :end-time="item.endTime" + :billing-method="item.billingMethod" + :benefits="item.benefits" + :service-fee="item.serviceFee" + :settlement-cycle="item.settlementCycle" + :address-name="item.addressName" + @click="goTaskDetail(item)" + > <template #actions> - <div class="task-card-actions-text" :style="{ color: TaskStatusColor[10] }"> - {{ TaskStatusText[10] }} + <div + class="task-card-actions-text" + :style="{ color: GetPersonalHireTaskInfosQueryStatusColor[item.status] }" + > + {{ GetPersonalHireTaskInfosQueryStatusText[item.status] }} </div> </template> </TaskCard> @@ -32,11 +50,14 @@ <script setup lang="ts"> import { TaskCard, ProTabs, ProTabPane } from '@12333/components'; -import { useUserStore } from '@/stores/modules/user'; -import { TaskStatusText, TaskStatusColor, TaskStatus } from '@/constants'; import { useInfiniteLoading } from '@12333/hooks'; -import { OrderInputType } from '@12333/constants'; -import * as flexWorkerServices from '@12333/services/api/FlexWorker'; +import { + EnumPagedListOrder, + GetPersonalHireTaskInfosQueryStatus, + GetPersonalHireTaskInfosQueryStatusText, + GetPersonalHireTaskInfosQueryStatusColor, +} from '@12333/constants'; +import * as taskServices from '@12333/services/apiV2/task'; import Taro from '@tarojs/taro'; defineOptions({ @@ -44,35 +65,31 @@ }); const queryState = reactive({ - mineHireType: TaskStatus.All, + status: 0 as any as GetPersonalHireTaskInfosQueryStatus, }); - -const userStore = useUserStore(); const { infiniteLoadingProps } = useInfiniteLoading( ({ pageParam }) => { - let params: API.GetFlexTaskListInput = { + let params: API.GetPersonalHireTaskInfosQuery = { pageModel: { rows: 20, page: pageParam, - orderInput: [ - queryState.mineHireType === TaskStatus.All - ? { property: 'creationTime', order: OrderInputType.Desc } - : { property: 'lastShelfTime', order: OrderInputType.Desc }, - ], + orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }], }, }; - - return flexWorkerServices.getFlexTaskByArrange(params, { + if (Number(queryState.status)) { + params.status = queryState.status; + } + return taskServices.getPersonalHireTaskInfos(params, { showLoading: false, }); }, { - queryKey: ['flexWorkerServices/getFlexTaskByArrange', queryState], + queryKey: ['taskServices/getPersonalHireTaskInfos', queryState], } ); -function goTaskDetail(item: API.GetFlexTaskListOutput) { +function goTaskDetail(item: API.GetPersonalHireTaskInfosQueryResultItem) { Taro.navigateTo({ url: `${RouterPath.taskDetail}?id=${item.id}`, }); diff --git a/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue index 659e8ea..0e86abd 100644 --- a/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue @@ -1,6 +1,6 @@ <template> <ProTabs - v-model="queryState.mineSignType" + v-model="queryState.status" name="home-tab" :showPaneContent="false" class="home-tabs" @@ -9,19 +9,38 @@ title-scroll > <ProTabPane :title="`鍏ㄩ儴`" :pane-key="0"></ProTabPane> - <ProTabPane :title="`寰呯‘璁" :pane-key="10"></ProTabPane> - <ProTabPane :title="`寰呯绾" :pane-key="20"></ProTabPane> + <ProTabPane + :title="`寰呯‘璁" + :pane-key="GetPersonalApplyTaskInfosQueryStatus.WaitHire" + ></ProTabPane> + <ProTabPane + :title="`寰呯绾" + :pane-key="GetPersonalApplyTaskInfosQueryStatus.WaitSignContract" + ></ProTabPane> </ProTabs> <InfiniteLoading scrollViewClassName="common-infinite-scroll-list home-list" v-bind="infiniteLoadingProps" - :key="queryState.mineSignType" + :key="queryState.status" > <template #renderItem="{ item }"> - <TaskCard @click="goTaskDetail(item)"> + <TaskCard + :name="item.name" + :begin-time="item.beginTime" + :end-time="item.endTime" + :billing-method="item.billingMethod" + :benefits="item.benefits" + :service-fee="item.serviceFee" + :settlement-cycle="item.settlementCycle" + :address-name="item.addressName" + @click="goTaskDetail(item)" + > <template #actions> - <div class="task-card-actions-text" :style="{ color: TaskStatusColor[10] }"> - {{ TaskStatusText[10] }} + <div + class="task-card-actions-text" + :style="{ color: GetPersonalApplyTaskInfosQueryStatusColor[item.status] }" + > + {{ GetPersonalApplyTaskInfosQueryStatusText[item.status] }} </div> </template> </TaskCard> @@ -32,10 +51,14 @@ <script setup lang="ts"> import { TaskCard, ProTabs, ProTabPane } from '@12333/components'; import { useUserStore } from '@/stores/modules/user'; -import { TaskStatusText, TaskStatusColor, TaskStatus } from '@/constants'; import { useInfiniteLoading } from '@12333/hooks'; -import { OrderInputType } from '@12333/constants'; -import * as flexWorkerServices from '@12333/services/api/FlexWorker'; +import { + EnumPagedListOrder, + GetPersonalApplyTaskInfosQueryStatus, + GetPersonalApplyTaskInfosQueryStatusText, + GetPersonalApplyTaskInfosQueryStatusColor, +} from '@12333/constants'; +import * as taskServices from '@12333/services/apiV2/task'; import Taro from '@tarojs/taro'; defineOptions({ @@ -43,35 +66,33 @@ }); const queryState = reactive({ - mineSignType: TaskStatus.All, + status: 0 as any as GetPersonalApplyTaskInfosQueryStatus, }); const userStore = useUserStore(); const { infiniteLoadingProps } = useInfiniteLoading( ({ pageParam }) => { - let params: API.GetFlexTaskListInput = { + let params: API.GetPersonalApplyTaskInfosQuery = { pageModel: { rows: 20, page: pageParam, - orderInput: [ - queryState.mineSignType === TaskStatus.All - ? { property: 'creationTime', order: OrderInputType.Desc } - : { property: 'lastShelfTime', order: OrderInputType.Desc }, - ], + orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }], }, }; - - return flexWorkerServices.getFlexTaskByArrange(params, { + if (Number(queryState.status)) { + params.status = queryState.status; + } + return taskServices.getPersonalApplyTaskInfos(params, { showLoading: false, }); }, { - queryKey: ['flexWorkerServices/getFlexTaskByArrange', queryState], + queryKey: ['taskServices/getPersonalApplyTaskInfos', queryState], } ); -function goTaskDetail(item: API.GetFlexTaskListOutput) { +function goTaskDetail(item: API.GetPersonalApplyTaskInfosQueryResultItem) { Taro.navigateTo({ url: `${RouterPath.taskDetail}?id=${item.id}`, }); diff --git a/packages/components/src/Card/FlexJobCard.vue b/packages/components/src/Card/FlexJobCard.vue index bcdc7ac..36fca70 100644 --- a/packages/components/src/Card/FlexJobCard.vue +++ b/packages/components/src/Card/FlexJobCard.vue @@ -3,19 +3,21 @@ <FlexJobTopView :name="name" :age="age" - :genderType="genderType" - :isRealName="isRealName" - :arrangeCount="arrangeCount" - :educationalLevel="educationalLevel" + :avatar="avatar" + :gender="gender" + :isReal="isReal" + :personalIdentityContent="personalIdentityContent" + :educationalBackgroundContent="educationalBackgroundContent" + :taskCount="taskCount" /> <div class="flexJob-card-done-list"> {{ workExperience }} </div> <div class="flexJob-card-done-detail" v-if="showDoneDetail"> <div class="flexJob-card-done-detail-item"> - {{ '鍦ㄣ�屽畞娉㈤浄杩.閰掑簵銆嶏紝鍋氳繃瀹㈡埧鏈嶅姟鍛樺湪銆屽畞娉㈤浄杩.閰掑簵銆嶏紝鍋氳繃瀹㈡埧鏈嶅姟鍛�' }} + {{ workSeniority }} </div> - <div class="flexJob-card-done-detail-item">{{ '鍦ㄣ�屽畞娉㈤浄杩.閰掑簵銆嶏紝鍋氳繃瀹㈡埧鏈嶅姟鍛�' }}</div> + <!-- <div class="flexJob-card-done-detail-item">{{ '鍦ㄣ�屽畞娉㈤浄杩.閰掑簵銆嶏紝鍋氳繃瀹㈡埧鏈嶅姟鍛�' }}</div> --> </div> <div class="flexJob-card-footer"> <div class="flexJob-card-footer-left-wrapper"> @@ -40,7 +42,7 @@ <script setup lang="ts"> import { CommonTaskCardProps } from './card'; import FlexJobTopView from './FlexJobTopView.vue'; -import { Gender } from '@12333/constants'; +import { EnumUserGender, Gender } from '@12333/constants'; defineOptions({ name: 'FlexJobCard', @@ -52,12 +54,15 @@ showDoneDetail?: boolean; name?: string; - genderType?: Gender; + avatar?: string; + gender?: EnumUserGender; age?: number; - isRealName?: boolean; - educationalLevel?: string; + isReal?: boolean; + personalIdentityContent?: string; + educationalBackgroundContent?: string; + taskCount?: number; workExperience?: string; - arrangeCount?: number; + workSeniority?: string; }; const props = withDefaults(defineProps<Props>(), { diff --git a/packages/components/src/Card/FlexJobTopView.vue b/packages/components/src/Card/FlexJobTopView.vue index 4461f81..754b80d 100644 --- a/packages/components/src/Card/FlexJobTopView.vue +++ b/packages/components/src/Card/FlexJobTopView.vue @@ -1,24 +1,28 @@ <template> <div :class="['flexJob-card-top-wrapper', size]"> - <Avatar :src="avatarUrl" :size="size === 'small' ? 50 : 60" class="flexJob-card-top-avatar" /> + <Avatar :src="avatar" :size="size === 'small' ? 50 : 60" class="flexJob-card-top-avatar" /> <div class="flexJob-card-top-info"> <div class="flexJob-card-top-info-item"> <div class="flexJob-card-top-info-name">{{ name }}</div> <div class="flexJob-card-top-info-gender"> <img - v-if="genderType === EnumUserGender.Male" + v-if="gender === EnumUserGender.Male" :src="IconMale" class="flexJob-card-top-info-gender-icon" /> <img v-else :src="IconFemale" class="flexJob-card-top-info-gender-icon" /> </div> - <div class="flexJob-card-top-info-auth" :class="{ 'is-real-name': isRealName }"> - {{ isRealName ? '宸插疄鍚�' : '鏈疄鍚�' }} + <div class="flexJob-card-top-info-auth" :class="{ 'is-real-name': isReal }"> + {{ isReal ? '宸插疄鍚�' : '鏈疄鍚�' }} </div> </div> <slot name="detail"> <div class="flexJob-card-top-info-detail"> - {{ `${age}宀� | ${educationalLevel} | ${educationalLevel} | 涓婂矖${arrangeCount}娆 }} + {{ + `${age ? '' : `${age}宀亅`}${personalIdentityContent ?? ''} | ${ + educationalBackgroundContent ?? '' + } | 涓婂矖${taskCount ?? 0}娆 + }} </div> </slot> </div> @@ -38,18 +42,19 @@ type Props = { size?: 'normal' | 'small'; - avatarUrl?: string; + avatar?: string; name?: string; - genderType?: EnumUserGender; + gender?: EnumUserGender; age?: number; - educationalLevel?: string; - arrangeCount?: number; - isRealName?: boolean; + isReal?: boolean; + personalIdentityContent?: string; + educationalBackgroundContent?: string; + taskCount?: number; }; const props = withDefaults(defineProps<Props>(), { size: 'normal', - avatarUrl: AvatarImage, + avatar: AvatarImage, }); </script> diff --git a/packages/constants/apiEnum.ts b/packages/constants/apiEnum.ts index aec9be0..a2b8be0 100644 --- a/packages/constants/apiEnum.ts +++ b/packages/constants/apiEnum.ts @@ -91,7 +91,7 @@ Dictionary = 0, /**浠诲姟 */ Task = 1, - /**浠诲姟闆囦剑 */ + /**浠诲姟浜哄憳 */ TaskUser = 2, /**鐢ㄦ埛璁よ瘉 */ Auth = 3, @@ -195,6 +195,14 @@ Complete = 20, } +/** 浠诲姟鐢ㄦ埛瀹夋帓鐘舵�� */ +export enum EnumTaskUserArrangeStatus { + /**鏈畨鎺� */ + Wait = 10, + /**宸插畨鎺� */ + Complete = 20, +} + /** 浠诲姟褰曠敤鐘舵�� */ export enum EnumTaskUserHireStatus { /**寰呭綍鐢� */ @@ -250,3 +258,19 @@ /**杩愯惀 */ Operation = 100, } + +/** 鎴戠殑鎶ュ悕鍒嗛〉鍒楄〃-鐘舵�� */ +export enum GetPersonalApplyTaskInfosQueryStatus { + /**寰呯‘璁� */ + WaitHire = 10, + /**寰呯绾� */ + WaitSignContract = 20, +} + +/** 鎴戠殑宸插綍鐢ㄥ垎椤靛垪琛�-鐘舵�� */ +export enum GetPersonalHireTaskInfosQueryStatus { + /**杩涜涓� */ + InProcess = 10, + /**宸插畬鎴� */ + Completed = 20, +} diff --git a/packages/constants/task.ts b/packages/constants/task.ts index 6e1fd23..245bba6 100644 --- a/packages/constants/task.ts +++ b/packages/constants/task.ts @@ -6,6 +6,9 @@ EnumTaskCheckReceiveStatus, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, + EnumTaskUserHireStatus, + GetPersonalApplyTaskInfosQueryStatus, + GetPersonalHireTaskInfosQueryStatus, } from './apiEnum'; export const EnumBillingMethodText = { @@ -62,3 +65,29 @@ [EnumPersonalJobSeekingStatus.Whatever]: '闅忎究鐪嬬湅', [EnumPersonalJobSeekingStatus.Not]: '鏆傛椂涓嶆壘浠诲姟', }; + +export const EnumTaskUserHireStatusText = { + [EnumTaskUserHireStatus.Wait]: '寰呭綍鐢�', + [EnumTaskUserHireStatus.Pass]: '宸插綍鐢�', + [EnumTaskUserHireStatus.Refuse]: '宸茶阿缁�', +}; + +export const GetPersonalApplyTaskInfosQueryStatusText = { + [GetPersonalApplyTaskInfosQueryStatus.WaitHire]: '寰呯‘璁�', + [GetPersonalApplyTaskInfosQueryStatus.WaitSignContract]: '寰呯绾�', +}; + +export const GetPersonalApplyTaskInfosQueryStatusColor = { + [GetPersonalApplyTaskInfosQueryStatus.WaitHire]: '#FF7D00', + [GetPersonalApplyTaskInfosQueryStatus.WaitSignContract]: '#3A71FF', +}; + +export const GetPersonalHireTaskInfosQueryStatusText = { + [GetPersonalHireTaskInfosQueryStatus.InProcess]: '杩涜涓�', + [GetPersonalHireTaskInfosQueryStatus.Completed]: '宸插畬鎴�', +}; + +export const GetPersonalHireTaskInfosQueryStatusColor = { + [GetPersonalHireTaskInfosQueryStatus.InProcess]: '#2A9E1B', + [GetPersonalHireTaskInfosQueryStatus.Completed]: '#9FA4AC', +}; diff --git a/packages/hooks/index.ts b/packages/hooks/index.ts index 8459cc4..517d13d 100644 --- a/packages/hooks/index.ts +++ b/packages/hooks/index.ts @@ -6,3 +6,4 @@ export * from './identify'; export * from './enterprise'; export * from './task'; +export * from './taskUser'; diff --git a/packages/hooks/taskUser.ts b/packages/hooks/taskUser.ts new file mode 100644 index 0000000..d028288 --- /dev/null +++ b/packages/hooks/taskUser.ts @@ -0,0 +1,39 @@ +import { useInfiniteLoading } from '@12333/hooks'; +import { EnumPagedListOrder } from '@12333/constants'; +import _ from 'lodash'; +import { MaybeRef, unref } from 'vue'; +import * as taskUserServices from '@12333/services/apiV2/taskUser'; + +type UseTaskListOptions = { + id?: MaybeRef<string>; +}; + +export function useTaskUserList(options: UseTaskListOptions = {}) { + const { id } = options; + + const { infiniteLoadingProps, invalidateQueries } = useInfiniteLoading( + ({ pageParam }) => { + let params: API.GetTaskUsersQuery = { + pageModel: { + rows: 20, + page: pageParam, + orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }], + }, + id: unref(id), + }; + + return taskUserServices.getTaskUsers(params, { + showLoading: false, + }); + }, + { + queryKey: ['taskUserServices/getTaskUsers', id], + enabled: !!unref(id), + } + ); + + return { + infiniteLoadingProps, + invalidateQueries, + }; +} diff --git a/packages/services/apiV2/task.ts b/packages/services/apiV2/task.ts index 5dd6235..b6c19fa 100644 --- a/packages/services/apiV2/task.ts +++ b/packages/services/apiV2/task.ts @@ -14,6 +14,60 @@ }); } +/** 鎴戠殑鎶ュ悕鍒嗛〉鍒楄〃 POST /api/flexjob/task/getPersonalApplyTaskInfos */ +export async function getPersonalApplyTaskInfos( + body: API.GetPersonalApplyTaskInfosQuery, + options?: API.RequestConfig +) { + return request<API.GetPersonalApplyTaskInfosQueryResult>( + '/api/flexjob/task/getPersonalApplyTaskInfos', + { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + } + ); +} + +/** 鎴戠殑宸插彇娑堝垎椤靛垪琛� POST /api/flexjob/task/getPersonalCancelTaskInfos */ +export async function getPersonalCancelTaskInfos( + body: API.GetPersonalCancelTaskInfosQuery, + options?: API.RequestConfig +) { + return request<API.GetPersonalCancelTaskInfosQueryResult>( + '/api/flexjob/task/getPersonalCancelTaskInfos', + { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + } + ); +} + +/** 鎴戠殑宸插綍鐢ㄥ垎椤靛垪琛� POST /api/flexjob/task/getPersonalHireTaskInfos */ +export async function getPersonalHireTaskInfos( + body: API.GetPersonalHireTaskInfosQuery, + options?: API.RequestConfig +) { + return request<API.GetPersonalHireTaskInfosQueryResult>( + '/api/flexjob/task/getPersonalHireTaskInfos', + { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + } + ); +} + /** 鏌ヨ浠诲姟璇︽儏 GET /api/flexjob/task/getTaskInfo */ export async function getTaskInfo( // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) diff --git a/packages/services/apiV2/taskUser.ts b/packages/services/apiV2/taskUser.ts index 0b1d1b5..af03cc7 100644 --- a/packages/services/apiV2/taskUser.ts +++ b/packages/services/apiV2/taskUser.ts @@ -26,7 +26,22 @@ }); } -/** 鏌ヨ搴旇仒鎶ュ悕鍒嗛〉鍒楄〃淇℃伅 POST /api/flexjob/taskUser/getTaskUsers */ +/** B绔煡璇汉鍛樺畨鎺掑垎椤靛垪琛ㄤ俊鎭� POST /api/flexjob/taskUser/getArrangeTaskUsers */ +export async function getArrangeTaskUsers( + body: API.GetArrangeTaskUsersQuery, + options?: API.RequestConfig +) { + return request<API.GetArrangeTaskUsersQueryResult>('/api/flexjob/taskUser/getArrangeTaskUsers', { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} + +/** B绔煡璇㈠簲鑱樻姤鍚嶅垎椤靛垪琛ㄤ俊鎭� POST /api/flexjob/taskUser/getTaskUsers */ export async function getTaskUsers(body: API.GetTaskUsersQuery, options?: API.RequestConfig) { return request<API.GetTaskUsersQueryResult>('/api/flexjob/taskUser/getTaskUsers', { method: 'POST', @@ -38,6 +53,21 @@ }); } +/** 浠诲姟瀹夋帓 PUT /api/flexjob/taskUser/setTaskUserArrange */ +export async function setTaskUserArrange( + body: API.SetTaskUserArrangeCommand, + options?: API.RequestConfig +) { + return request<string>('/api/flexjob/taskUser/setTaskUserArrange', { + method: 'PUT', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} + /** 浠诲姟褰曠敤 PUT /api/flexjob/taskUser/setTaskUserHire */ export async function setTaskUserHire( body: API.SetTaskUserHireCommand, diff --git a/packages/services/apiV2/typings.d.ts b/packages/services/apiV2/typings.d.ts index fe6ab58..7051bdc 100644 --- a/packages/services/apiV2/typings.d.ts +++ b/packages/services/apiV2/typings.d.ts @@ -283,7 +283,7 @@ Dictionary = 0, /**浠诲姟 */ Task = 1, - /**浠诲姟闆囦剑 */ + /**浠诲姟浜哄憳 */ TaskUser = 2, /**鐢ㄦ埛璁よ瘉 */ Auth = 3, @@ -378,6 +378,13 @@ Complete = 20, } + enum EnumTaskUserArrangeStatus { + /**鏈畨鎺� */ + Wait = 10, + /**宸插畨鎺� */ + Complete = 20, + } + enum EnumTaskUserHireStatus { /**寰呭綍鐢� */ Wait = 10, @@ -455,6 +462,24 @@ /** 閿欒鐮� */ errorCode?: string; data?: GetAliyunOSSAcsQueryResult; + /** 鎵ц鎴愬姛 */ + success?: boolean; + /** 閿欒淇℃伅 */ + msg?: any; + /** 闄勫姞鏁版嵁 */ + extras?: any; + /** 鏃堕棿鎴� */ + timestamp?: number; + } + + interface FriendlyResultGetArrangeTaskUsersQueryResult { + /** 璺熻釜Id */ + traceId?: string; + /** 鐘舵�佺爜 */ + code?: number; + /** 閿欒鐮� */ + errorCode?: string; + data?: GetArrangeTaskUsersQueryResult; /** 鎵ц鎴愬姛 */ success?: boolean; /** 閿欒淇℃伅 */ @@ -545,6 +570,60 @@ /** 閿欒鐮� */ errorCode?: string; data?: GetMenuQueryResult; + /** 鎵ц鎴愬姛 */ + success?: boolean; + /** 閿欒淇℃伅 */ + msg?: any; + /** 闄勫姞鏁版嵁 */ + extras?: any; + /** 鏃堕棿鎴� */ + timestamp?: number; + } + + interface FriendlyResultGetPersonalApplyTaskInfosQueryResult { + /** 璺熻釜Id */ + traceId?: string; + /** 鐘舵�佺爜 */ + code?: number; + /** 閿欒鐮� */ + errorCode?: string; + data?: GetPersonalApplyTaskInfosQueryResult; + /** 鎵ц鎴愬姛 */ + success?: boolean; + /** 閿欒淇℃伅 */ + msg?: any; + /** 闄勫姞鏁版嵁 */ + extras?: any; + /** 鏃堕棿鎴� */ + timestamp?: number; + } + + interface FriendlyResultGetPersonalCancelTaskInfosQueryResult { + /** 璺熻釜Id */ + traceId?: string; + /** 鐘舵�佺爜 */ + code?: number; + /** 閿欒鐮� */ + errorCode?: string; + data?: GetPersonalCancelTaskInfosQueryResult; + /** 鎵ц鎴愬姛 */ + success?: boolean; + /** 閿欒淇℃伅 */ + msg?: any; + /** 闄勫姞鏁版嵁 */ + extras?: any; + /** 鏃堕棿鎴� */ + timestamp?: number; + } + + interface FriendlyResultGetPersonalHireTaskInfosQueryResult { + /** 璺熻釜Id */ + traceId?: string; + /** 鐘舵�佺爜 */ + code?: number; + /** 閿欒鐮� */ + errorCode?: string; + data?: GetPersonalHireTaskInfosQueryResult; /** 鎵ц鎴愬姛 */ success?: boolean; /** 閿欒淇℃伅 */ @@ -1117,6 +1196,55 @@ quickQuery?: string; } + interface GetArrangeTaskUsersQuery { + /** 浠诲姟Id */ + id?: string; + /** 鍏抽敭瀛楋紙濮撳悕/韬唤璇�/鐢佃瘽锛� */ + keywords?: string; + arrangeStatus?: EnumTaskUserArrangeStatus; + pageModel?: PagedListQueryPageModel; + } + + interface GetArrangeTaskUsersQueryResult { + pageModel?: PagedListQueryResultPageModel; + /** 鏁版嵁 */ + data?: GetArrangeTaskUsersQueryResultItem[]; + } + + interface GetArrangeTaskUsersQueryResultItem { + /** 浠诲姟浜哄憳Id */ + id?: string; + /** 澶村儚 */ + avatar?: string; + /** 濮撳悕 */ + name?: string; + /** 韬唤璇佸彿 */ + identity?: string; + /** 鎵嬫満鍙� */ + contactPhoneNumber?: string; + gender?: EnumUserGender; + /** 骞撮緞 */ + age?: number; + /** 鏄惁瀹炲悕 */ + isReal?: boolean; + realMethod?: EnumUserRealMethod; + /** 韬唤缂栧彿 */ + personalIdentityCode?: string; + /** 韬唤 */ + personalIdentityContent?: string; + /** 瀛﹀巻缂栧彿 */ + educationalBackgroundCode?: string; + /** 瀛﹀巻 */ + educationalBackgroundContent?: string; + /** 涓婂矖娆℃暟 */ + taskCount?: number; + /** 宸ヤ綔璧勫巻 */ + workSeniority?: string; + /** 宸ヤ綔缁忛獙 */ + workExperience?: string; + arrangeStatus?: EnumTaskUserArrangeStatus; + } + type GetCurrentLogierMenusQuery = Record<string, any>; interface GetDictionaryCategoriesQuery { @@ -1514,6 +1642,111 @@ name?: string; } + interface GetPersonalApplyTaskInfosQuery { + status?: GetPersonalApplyTaskInfosQueryStatus; + pageModel?: PagedListQueryPageModel; + } + + interface GetPersonalApplyTaskInfosQueryResult { + pageModel?: PagedListQueryResultPageModel; + /** 鏁版嵁 */ + data?: GetPersonalApplyTaskInfosQueryResultItem[]; + } + + interface GetPersonalApplyTaskInfosQueryResultItem { + /** 浠诲姟Id */ + id?: string; + /** 浠诲姟鍚嶇О */ + name?: string; + /** 浠诲姟寮�濮嬫椂闂� */ + beginTime?: string; + /** 浠诲姟缁撴潫鏃堕棿 */ + endTime?: string; + billingMethod?: EnumBillingMethod; + /** 鏈嶅姟璐� */ + serviceFee?: number; + settlementCycle?: EnumSettlementCycle; + /** 绂忓埄 */ + benefits?: GetTaskInfoQueryResultBenefit[]; + /** 浠诲姟鍦扮偣鍚嶇О */ + addressName?: string; + status?: GetPersonalApplyTaskInfosQueryStatus; + } + + enum GetPersonalApplyTaskInfosQueryStatus { + /**寰呯‘璁� */ + WaitHire = 10, + /**寰呯绾� */ + WaitSignContract = 20, + } + + interface GetPersonalCancelTaskInfosQuery { + pageModel?: PagedListQueryPageModel; + } + + interface GetPersonalCancelTaskInfosQueryResult { + pageModel?: PagedListQueryResultPageModel; + /** 鏁版嵁 */ + data?: GetPersonalCancelTaskInfosQueryResultItem[]; + } + + interface GetPersonalCancelTaskInfosQueryResultItem { + /** 浠诲姟Id */ + id?: string; + /** 浠诲姟鍚嶇О */ + name?: string; + /** 浠诲姟寮�濮嬫椂闂� */ + beginTime?: string; + /** 浠诲姟缁撴潫鏃堕棿 */ + endTime?: string; + billingMethod?: EnumBillingMethod; + /** 鏈嶅姟璐� */ + serviceFee?: number; + settlementCycle?: EnumSettlementCycle; + /** 绂忓埄 */ + benefits?: GetTaskInfoQueryResultBenefit[]; + /** 浠诲姟鍦扮偣鍚嶇О */ + addressName?: string; + } + + interface GetPersonalHireTaskInfosQuery { + status?: GetPersonalHireTaskInfosQueryStatus; + pageModel?: PagedListQueryPageModel; + } + + interface GetPersonalHireTaskInfosQueryResult { + pageModel?: PagedListQueryResultPageModel; + /** 鏁版嵁 */ + data?: GetPersonalHireTaskInfosQueryResultItem[]; + } + + interface GetPersonalHireTaskInfosQueryResultItem { + /** 浠诲姟Id */ + id?: string; + /** 浠诲姟鍚嶇О */ + name?: string; + /** 浠诲姟寮�濮嬫椂闂� */ + beginTime?: string; + /** 浠诲姟缁撴潫鏃堕棿 */ + endTime?: string; + billingMethod?: EnumBillingMethod; + /** 鏈嶅姟璐� */ + serviceFee?: number; + settlementCycle?: EnumSettlementCycle; + /** 绂忓埄 */ + benefits?: GetTaskInfoQueryResultBenefit[]; + /** 浠诲姟鍦扮偣鍚嶇О */ + addressName?: string; + status?: GetPersonalHireTaskInfosQueryStatus; + } + + enum GetPersonalHireTaskInfosQueryStatus { + /**杩涜涓� */ + InProcess = 10, + /**宸插畬鎴� */ + Completed = 20, + } + type GetPersonalLoginInfoQuery = Record<string, any>; interface GetPersonalLoginInfoQueryResult { @@ -1717,8 +1950,6 @@ releaseStatus?: EnumTaskReleaseStatus; recommendStatus?: EnumTaskRecommendStatus; checkReceiveStatus?: EnumTaskCheckReceiveStatus; - /** 褰曠敤鐘舵�� */ - hireStatus?: EnumTaskUserHireStatus[]; pageModel?: PagedListQueryPageModel; } @@ -1774,7 +2005,6 @@ recommendStatus?: EnumTaskRecommendStatus; /** 鍒涘缓鏃堕棿 */ createdTime?: string; - hireStatus?: EnumTaskUserHireStatus; } interface GetTaskInfosQueryResultObjectData { @@ -1801,7 +2031,7 @@ } interface GetTaskUsersQueryResultItem { - /** 浠诲姟闆囦剑Id */ + /** 浠诲姟浜哄憳Id */ id?: string; /** 澶村儚 */ avatar?: string; @@ -2585,8 +2815,14 @@ releaseStatus?: EnumTaskReleaseStatus; } + interface SetTaskUserArrangeCommand { + /** 浠诲姟浜哄憳Id */ + id?: string; + arrangeStatus?: EnumTaskUserArrangeStatus; + } + interface SetTaskUserHireCommand { - /** 浠诲姟闆囦剑Id */ + /** 浠诲姟浜哄憳Id */ id?: string; hireStatus?: EnumTaskUserHireStatus; } -- Gitblit v1.9.1