From 18f571786729ff46a667760a569436593c59f899 Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期四, 14 八月 2025 09:10:30 +0800 Subject: [PATCH] feat: 接口对接 --- apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue | 121 +++---- apps/cMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue | 108 ------- packages/constants/task.ts | 3 apps/bMiniApp/src/constants/router.ts | 1 apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue | 17 apps/cMiniApp/src/pages/task/InnerPage.vue | 4 packages/services/apiV2/userResume.ts | 30 ++ packages/components/src/Card/TaskCheckFileCard.vue | 132 +++++++++ packages/services/apiV2/auth.ts | 17 + apps/bMiniApp/src/subpackages/task/taskCheckedDetail/InnerPage.vue | 102 +++++++ apps/bMiniApp/project.private.config.json | 7 packages/hooks/task.ts | 2 apps/bMiniApp/src/app.config.ts | 1 apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue | 31 -- apps/bMiniApp/src/subpackages/task/taskCheckedDetail/taskCheckedDetail.config.ts | 3 apps/bMiniApp/src/subpackages/task/taskCheckedDetail/taskCheckedDetail.vue | 13 packages/services/apiV2/index.ts | 4 apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue | 30 + apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue | 71 ++--- packages/components/src/index.ts | 1 apps/cMiniApp/project.config.json | 2 apps/cMiniApp/src/subpackages/task/taskSubmitCheck/InnerPage.vue | 3 packages/services/apiV2/typings.d.ts | 81 +++++ 23 files changed, 507 insertions(+), 277 deletions(-) diff --git a/apps/bMiniApp/project.private.config.json b/apps/bMiniApp/project.private.config.json index 57b2186..ed02394 100644 --- a/apps/bMiniApp/project.private.config.json +++ b/apps/bMiniApp/project.private.config.json @@ -98,13 +98,6 @@ "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/app.config.ts b/apps/bMiniApp/src/app.config.ts index 5215387..9c69db0 100644 --- a/apps/bMiniApp/src/app.config.ts +++ b/apps/bMiniApp/src/app.config.ts @@ -90,6 +90,7 @@ 'publishTask/publishTask', 'taskCheck/taskCheck', 'taskCheckDetail/taskCheckDetail', + 'taskCheckedDetail/taskCheckedDetail', 'taskHandleCheckDetail/taskHandleCheckDetail', 'taskManage/taskManage', 'batchTaskList/batchTaskList', diff --git a/apps/bMiniApp/src/constants/router.ts b/apps/bMiniApp/src/constants/router.ts index 6af2f0a..0c429b2 100644 --- a/apps/bMiniApp/src/constants/router.ts +++ b/apps/bMiniApp/src/constants/router.ts @@ -43,6 +43,7 @@ publishTask = '/subpackages/task/publishTask/publishTask', taskCheck = '/subpackages/task/taskCheck/taskCheck', taskCheckDetail = '/subpackages/task/taskCheckDetail/taskCheckDetail', + taskCheckedDetail = '/subpackages/task/taskCheckedDetail/taskCheckedDetail', taskHandleCheckDetail = '/subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail', taskManage = '/subpackages/task/taskManage/taskManage', batchTaskList = '/subpackages/task/batchTaskList/batchTaskList', diff --git a/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue b/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue index 46667a7..9d89fd7 100644 --- a/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue +++ b/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue @@ -1,22 +1,23 @@ <template> - <div class="task-check-card-wrapper"> + <div class="task-check-card-wrapper" @click.stop="emit('taskChecked')"> <TaskCheckPersonalView class="task-check-card-view" - :avatarUrl="avatarUrl" + :avatar="avatar" :name="name" - :genderType="genderType" - :isRealName="isRealName" - :contactPhone="contactPhone" + :gender="gender" + :isReal="isReal" + :contactPhoneNumber="contactPhoneNumber" > <template #actions> <nut-button - v-if="checkAcceptStatus === EnumTaskCheckReceiveStatus.Wait" + v-if="checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitCheckReceive" type="primary" class="task-check-card-phone-btn" + @click.stop="emit('checkReceive')" >楠屾敹</nut-button > <div v-else class="task-check-card-phone-status" :style="{ color: Colors.Success }"> - {{ EnumTaskCheckReceiveStatusText[checkAcceptStatus] }} + {{ EnumTaskCheckReceiveStatusText[checkReceiveStatus] }} </div> </template> </TaskCheckPersonalView> @@ -37,15 +38,20 @@ }); type Props = { - avatarUrl?: string; + avatar?: string; name?: string; - genderType?: EnumUserGender; - isRealName?: boolean; - contactPhone?: string; - checkAcceptStatus?: EnumTaskCheckReceiveStatus; + gender?: EnumUserGender; + isReal?: boolean; + contactPhoneNumber?: string; + checkReceiveStatus?: EnumTaskCheckReceiveStatus; }; const props = withDefaults(defineProps<Props>(), {}); + +const emit = defineEmits<{ + (e: 'checkReceive'): void; + (e: 'taskChecked'): void; +}>(); </script> <style lang="scss"> diff --git a/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue b/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue index c29a64e..0fdb3db 100644 --- a/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue +++ b/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue @@ -1,15 +1,10 @@ <template> - <FlexJobTopView - :avatarUrl="avatarUrl" - :name="name" - :genderType="genderType" - :isRealName="isRealName" - > + <FlexJobTopView :avatar="avatar" :name="name" :gender="gender" :isReal="isReal"> <template #detail> <div class="task-check-card-phone-container"> <div class="task-check-card-phone-wrapper"> <div class="task-check-card-phone-label">鎵嬫満鍙凤細</div> - <div class="task-check-card-phone">{{ contactPhone }}</div> + <div class="task-check-card-phone">{{ contactPhoneNumber }}</div> </div> <slot name="actions"></slot> </div> @@ -26,11 +21,11 @@ }); type Props = { - avatarUrl?: string; + avatar?: string; name?: string; - genderType?: EnumUserGender; - isRealName?: boolean; - contactPhone?: string; + gender?: EnumUserGender; + isReal?: boolean; + contactPhoneNumber?: string; }; const props = withDefaults(defineProps<Props>(), {}); diff --git a/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue index bbcb6a8..a8ed12a 100644 --- a/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue +++ b/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue @@ -37,42 +37,17 @@ import { MyTaskCard, ProTabs, ProTabPane, Calendar } from '@12333/components'; import Taro from '@tarojs/taro'; import { EnumTaskCheckReceiveStatus } from '@12333/constants'; -import { useInfiniteLoading, useTaskList } from '@12333/hooks'; -import * as taskCheckReceiveServices from '@12333/services/apiV2/taskCheckReceive'; -import dayjs from 'dayjs'; +import { useCheckReceiveTasks } from '@12333/hooks'; defineOptions({ name: 'InnerPage', }); -const queryState = reactive({ - date: dayjs().toDate(), - checkReceiveStatus: EnumTaskCheckReceiveStatus.WaitSubmit, -}); - -const { infiniteLoadingProps } = useInfiniteLoading( - ({ pageParam }) => { - let params: API.GetCheckReceiveTasksQuery = { - pageModel: { - rows: 20, - page: pageParam, - }, - date: dayjs(queryState.date).format('YYYY-MM-DD'), - checkReceiveStatus: queryState.checkReceiveStatus, - }; - - return taskCheckReceiveServices.getCheckReceiveTasks(params, { - showLoading: false, - }); - }, - { - queryKey: ['taskCheckReceiveServices/getCheckReceiveTasks', queryState], - } -); +const { queryState, infiniteLoadingProps } = useCheckReceiveTasks(); function goSubmitTaskDetail(item: API.GetCheckReceiveTasksQueryResultItem) { Taro.navigateTo({ - url: `${RouterPath.taskCheckDetail}?taskId=${item.id}`, + url: `${RouterPath.taskCheckDetail}?id=${item.id}&date=${queryState.date}&checkReceiveStatus=${queryState.checkReceiveStatus}`, }); } </script> diff --git a/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue index a91b416..dc40cd9 100644 --- a/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue +++ b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue @@ -1,9 +1,9 @@ <template> - <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch"> + <LoadingLayout> <ContentView> <MyTaskCard - :namee="detail.name" - :addressName="detail.addressName" + :name="infiniteLoadingProps?.listData?.pages?.[0]?.objectData?.name" + :addressName="infiniteLoadingProps?.listData?.pages?.[0]?.objectData?.addressName" :showMyTaskArrow="false" :showTime="false" ></MyTaskCard> @@ -12,17 +12,17 @@ <InfiniteLoading scrollViewClassName="common-infinite-scroll-list" v-bind="infiniteLoadingProps" - :key="queryState.status" > <template #renderItem="{ item }"> <TaskCheckCard - :avatarUrl="setOSSLink(item.avatarUrl)" + :avatar="setOSSLink(item.avatar)" :name="item.name" - :genderType="item.genderType" - :isRealName="item.isRealName" - :contactPhone="item.contactPhone" - :checkAcceptStatus="item.checkAcceptStatus" - @click="goHandleTaskDetail(item)" + :gender="item.gender" + :isReal="item.isReal" + :contactPhoneNumber="item.contactPhoneNumber" + :checkReceiveStatus="item.checkReceiveStatus" + @checkReceive="goHandleTaskDetail(item)" + @taskChecked="goTaskCheckedDetail(item)" /> </template> </InfiniteLoading> @@ -31,65 +31,52 @@ <script setup lang="ts"> import Taro from '@tarojs/taro'; -import { useQuery } from '@tanstack/vue-query'; -import * as taskServices from '@12333/services/apiV2/task'; +import * as taskCheckReceiveServices from '@12333/services/apiV2/taskCheckReceive'; import { useInfiniteLoading } from '@12333/hooks'; -import { OrderInputType } from '@12333/constants'; import TaskCheckCard from '../components/TaskCheckCard.vue'; import { MyTaskCard } from '@12333/components'; import { setOSSLink } from '@12333/utils'; +import dayjs from 'dayjs'; defineOptions({ name: 'InnerPage', }); const router = Taro.useRouter(); -const taskId = router.params?.taskId ?? ''; - -const { - isLoading, - isError, - data: detail, - refetch, -} = useQuery({ - queryKey: ['taskServices/getTaskInfo', taskId], - queryFn: async () => { - return await taskServices.getTaskInfo( - { id: taskId }, - { - showLoading: false, - } - ); - }, - placeholderData: () => ({} as API.GetTaskInfoQueryResult), -}); - -const queryState = reactive({ - status: 10, -}); +const id = router.params?.id ?? ''; +const date = router.params?.date ?? ''; +const checkReceiveStatus = Number(router.params?.checkReceiveStatus); const { infiniteLoadingProps } = useInfiniteLoading( ({ pageParam }) => { - let params: API.GetFlexTaskWorkerCheckListInput = { + let params: API.GetCheckReceiveTaskQuery = { pageModel: { rows: 20, page: pageParam, - orderInput: [{ property: 'lastShelfTime', order: OrderInputType.Desc }], }, + taskInfoId: id, + date: dayjs(date).format('YYYY-MM-DD'), + checkReceiveStatus: checkReceiveStatus, }; - return flexWorkerServices.getFlexTaskWorkerCheckList(params, { + return taskCheckReceiveServices.getCheckReceiveTask(params, { showLoading: false, }); }, { - queryKey: ['flexWorkerServices/getFlexTaskWorkerCheckList', queryState], + queryKey: ['taskCheckReceiveServices/getCheckReceiveTask'], } ); -function goHandleTaskDetail(item: API.GetNewestWorkerListOutput) { +function goHandleTaskDetail(item: API.GetCheckReceiveTaskQueryResultItem) { Taro.navigateTo({ - url: `${RouterPath.taskHandleCheckDetail}?userId=${item.userId}&taskId=${taskId}`, + url: `${RouterPath.taskHandleCheckDetail}?id=${item.id}&date=${date}`, + }); +} + +function goTaskCheckedDetail(item: API.GetCheckReceiveTaskQueryResultItem) { + Taro.navigateTo({ + url: `${RouterPath.taskCheckedDetail}?id=${item.id}`, }); } </script> diff --git a/apps/bMiniApp/src/subpackages/task/taskCheckedDetail/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskCheckedDetail/InnerPage.vue new file mode 100644 index 0000000..b52c25e --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/taskCheckedDetail/InnerPage.vue @@ -0,0 +1,102 @@ +<template> + <LoadingLayout> + <ContentView> + <MyTaskCard + :name="infiniteLoadingProps?.listData?.pages?.[0]?.objectData?.taskInfo?.name" + :addressName="infiniteLoadingProps?.listData?.pages?.[0]?.objectData?.taskInfo?.addressName" + :showMyTaskArrow="false" + :showTime="false" + ></MyTaskCard> + <ChunkTitle title="楠屾敹鍒楄〃" /> + <TaskCheckCard + :avatar=" + setOSSLink( + infiniteLoadingProps?.listData?.pages?.[0]?.objectData?.enterpriseEmployeeUser?.avatar + ) + " + :name="infiniteLoadingProps?.listData?.pages?.[0]?.objectData?.enterpriseEmployeeUser?.name" + :gender=" + infiniteLoadingProps?.listData?.pages?.[0]?.objectData?.enterpriseEmployeeUser?.gender + " + :isReal=" + infiniteLoadingProps?.listData?.pages?.[0]?.objectData?.enterpriseEmployeeUser?.isReal + " + :contactPhoneNumber=" + infiniteLoadingProps?.listData?.pages?.[0]?.objectData?.enterpriseEmployeeUser + ?.contactPhoneNumber + " + :checkReceiveStatus=" + infiniteLoadingProps?.listData?.pages?.[0]?.objectData?.enterpriseEmployeeUser + ?.checkReceiveStatus + " + /> + <div class="taskCheckFileCard-status-title">楠屾敹鐓х墖</div> + </ContentView> + <InfiniteLoading + scrollViewClassName="common-infinite-scroll-list" + v-bind="infiniteLoadingProps" + :key="date" + > + <template #renderItem="{ item }"> + <TaskCheckFileCard + :created-time="item?.createdTime" + :checkReceiveStatus="item?.checkReceiveStatus" + :files="item?.files" + /> + </template> + </InfiniteLoading> + </LoadingLayout> +</template> + +<script setup lang="ts"> +import Taro from '@tarojs/taro'; +import * as taskCheckReceiveServices from '@12333/services/apiV2/taskCheckReceive'; +import { useInfiniteLoading } from '@12333/hooks'; +import TaskCheckCard from '../components/TaskCheckCard.vue'; +import { MyTaskCard, TaskCheckFileCard } from '@12333/components'; +import { setOSSLink } from '@12333/utils'; + +defineOptions({ + name: 'InnerPage', +}); + +const router = Taro.useRouter(); +const id = router.params?.id ?? ''; +const date = router.params?.date ?? ''; + +const { infiniteLoadingProps } = useInfiniteLoading( + ({ pageParam }) => { + let params: API.GetCheckReceiveTaskUserSubmitsQuery = { + pageModel: { + rows: 20, + page: pageParam, + }, + id: id, + }; + + return taskCheckReceiveServices.getCheckReceiveTaskUserSubmits(params, { + showLoading: false, + }); + }, + { + queryKey: ['taskCheckReceiveServices/getCheckReceiveTaskUserSubmits'], + } +); +</script> +<style lang="scss"> +@import '@/styles/common.scss'; + +.taskCheckedDetail-page-wrapper { + .taskCheckFileCard-status-title { + font-weight: 600; + font-size: 28px; + line-height: 32px; + margin-bottom: 16px; + color: boleGetCssVar('text-color', 'primary'); + } + + .task-check-card-wrapper { + margin-bottom: 24px; + } +} +</style> diff --git a/apps/bMiniApp/src/subpackages/task/taskCheckedDetail/taskCheckedDetail.config.ts b/apps/bMiniApp/src/subpackages/task/taskCheckedDetail/taskCheckedDetail.config.ts new file mode 100644 index 0000000..305fdb1 --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/taskCheckedDetail/taskCheckedDetail.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + disableScroll: true, +}); diff --git a/apps/bMiniApp/src/subpackages/task/taskCheckedDetail/taskCheckedDetail.vue b/apps/bMiniApp/src/subpackages/task/taskCheckedDetail/taskCheckedDetail.vue new file mode 100644 index 0000000..b26bbe6 --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/taskCheckedDetail/taskCheckedDetail.vue @@ -0,0 +1,13 @@ +<template> + <PageLayoutWithBg class="taskCheckedDetail-page-wrapper" title="楠屾敹璇︽儏"> + <InnerPage /> + </PageLayoutWithBg> +</template> + +<script setup lang="ts"> +import InnerPage from './InnerPage.vue'; + +defineOptions({ + name: 'taskCheckedDetail', +}); +</script> diff --git a/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue index cc10ce4..5a10229 100644 --- a/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue +++ b/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue @@ -3,40 +3,31 @@ <ContentScrollView style="background-color: #fff"> <div class="personal-info-wrapper"> <TaskCheckPersonalView - :avatarUrl="setOSSLink(detail.avatarUrl)" - :name="detail.name" - :isRealName="detail.isRealName" - :contactPhone="detail.contactPhone" + :avatarUrl="setOSSLink(detail?.enterpriseEmployeeUser?.avatar)" + :name="detail?.enterpriseEmployeeUser?.name" + :isReal="detail?.enterpriseEmployeeUser?.isReal" + :contactPhoneNumber="detail?.enterpriseEmployeeUser?.contactPhoneNumber" /> </div> - <div class="taskCheckDetail-status-wrapper"> - <div class="taskCheckDetail-status-title">楠屾敹鐓х墖</div> - </div> - <div class="taskCheckDetail-time"> - {{ dayjs(detail.appleCheckTime).format('YYYY.MM.DD HH:mm:ss') }} - </div> - <nut-grid - square - :column-num="3" - :border="false" - :gutter="20" - v-if="list.length > 0" - class="pro-img-grid" - > - <nut-grid-item - v-for="(item, index) in detail.checkImageUrl" - :key="index" - class="pro-img-grid-item" - > - <div class="pro-img-grid-img-item"> - <PreviewImage :src="item" class="pro-img-grid-img" :urls="list" /> - </div> - </nut-grid-item> - </nut-grid> + <div class="taskCheckFileCard-status-title">楠屾敹鐓х墖</div> + <TaskCheckFileCard + :created-time="detail?.createdTime" + :files="detail?.files" + ></TaskCheckFileCard> </ContentScrollView> <PageFooter> - <PageFooterBtn type="primary" :color="Colors.Info" class="dark-btn">楠屾敹鏈�氳繃</PageFooterBtn> - <PageFooterBtn type="primary">楠屾敹閫氳繃</PageFooterBtn> + <PageFooterBtn + type="primary" + :color="Colors.Info" + class="dark-btn" + @click="checkReceiveTask(EnumTaskUserSubmitCheckReceiveStatus.Fail)" + >楠屾敹鏈�氳繃</PageFooterBtn + > + <PageFooterBtn + type="primary" + @click="checkReceiveTask(EnumTaskUserSubmitCheckReceiveStatus.Success)" + >楠屾敹閫氳繃</PageFooterBtn + > </PageFooter> </LoadingLayout> </template> @@ -44,20 +35,21 @@ <script setup lang="ts"> import Taro from '@tarojs/taro'; import { useQuery } from '@tanstack/vue-query'; -import * as flexWorkerServices from '@12333/services/api/FlexWorker'; +import * as taskCheckReceiveServices from '@12333/services/apiV2/taskCheckReceive'; import TaskCheckPersonalView from '../components/TaskCheckPersonalView.vue'; -import { PreviewImage } from '@12333/components'; -import { Colors } from '@12333/constants'; -import { setOSSLink } from '@12333/utils'; +import { TaskCheckFileCard } from '@12333/components'; +import { Colors, EnumTaskUserSubmitCheckReceiveStatus } from '@12333/constants'; +import { Message, setOSSLink } from '@12333/utils'; import dayjs from 'dayjs'; +import { goBack } from '@/utils'; defineOptions({ name: 'InnerPage', }); const router = Taro.useRouter(); -const taskId = router.params?.taskId ?? ''; -const userId = router.params?.userId ?? ''; +const id = router.params?.id ?? ''; +const date = router.params?.date ?? ''; const { isLoading, @@ -65,57 +57,52 @@ data: detail, refetch, } = useQuery({ - queryKey: ['flexWorkerServices/getOrdeForDetail', taskId], + queryKey: ['flexWorkerServices/getOrdeForDetail', id, date], queryFn: async () => { - return await flexWorkerServices.getFlexTaskWorkerCheckContentDto( - { flexTaskId: taskId, flexWorkerId: userId }, + return await taskCheckReceiveServices.getCheckReceiveTaskUserSubmit( + { taskInfoUserId: id, date: dayjs(date).format('YYYY-MM-DD') }, { showLoading: false, } ); }, - placeholderData: () => ({} as API.GetTaskWorkerCheckContentOutput), + placeholderData: () => ({} as API.GetCheckReceiveTaskUserSubmitQueryResult), }); -const list = ref([ - 'https://storage.360buyimg.com/jdc-article/NutUItaro34.jpg', - 'https://storage.360buyimg.com/jdc-article/NutUItaro2.jpg', - 'https://storage.360buyimg.com/jdc-article/welcomenutui.jpg', - 'https://storage.360buyimg.com/jdc-article/fristfabu.jpg', -]); +async function checkReceiveTask(checkReceiveStatus: EnumTaskUserSubmitCheckReceiveStatus) { + try { + let params: API.CheckReceiveTaskCommand = { + id: detail.value?.id, + checkReceiveStatus: checkReceiveStatus, + }; + let res = await taskCheckReceiveServices.checkReceiveTask(params); + if (res) { + Message.success('鎻愪氦鎴愬姛', { + onClosed() { + goBack(); + }, + }); + } + } catch (error) {} +} </script> <style lang="scss"> @import '@/styles/common.scss'; .taskHandleCheckDetail-page-wrapper { - .personal-info-wrapper { - padding-top: 52px; - padding-bottom: 36px; - border-bottom: 1px solid #d9d9d9; - margin-bottom: 22px; - } - - .taskCheckDetail-status-wrapper { - display: flex; - align-items: center; + .taskCheckFileCard-status-title { font-weight: 600; font-size: 28px; line-height: 32px; margin-bottom: 16px; - - .taskCheckDetail-status-title { - color: boleGetCssVar('text-color', 'primary'); - flex: 1; - min-width: 0; - } + color: boleGetCssVar('text-color', 'primary'); } - .taskCheckDetail-time { - font-weight: 400; - font-size: 24px; - color: boleGetCssVar('text-color', 'regular'); - line-height: 36px; + .personal-info-wrapper { + padding-top: 52px; + padding-bottom: 36px; + border-bottom: 1px solid #d9d9d9; margin-bottom: 22px; } } diff --git a/apps/cMiniApp/project.config.json b/apps/cMiniApp/project.config.json index cc53dd5..75e8651 100644 --- a/apps/cMiniApp/project.config.json +++ b/apps/cMiniApp/project.config.json @@ -51,5 +51,5 @@ "ignore": [], "include": [] }, - "appid": "wxb9e0baf4f87aa0de" + "appid": "wx88251c84f5cd886b" } \ No newline at end of file diff --git a/apps/cMiniApp/src/pages/task/InnerPage.vue b/apps/cMiniApp/src/pages/task/InnerPage.vue index 81dc2bb..a022624 100644 --- a/apps/cMiniApp/src/pages/task/InnerPage.vue +++ b/apps/cMiniApp/src/pages/task/InnerPage.vue @@ -46,12 +46,12 @@ const { queryState, infiniteLoadingProps } = useCheckReceiveTasks(); function goSubmitTaskDetail(item: API.GetCheckReceiveTasksQueryResultItem) { - if (item.checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitSubmit) { + if (Number(queryState.checkReceiveStatus) === EnumTaskCheckReceiveStatus.WaitSubmit) { Taro.navigateTo({ url: `${RouterPath.taskSubmitCheck}?id=${item.id}`, }); } - if (item.checkReceiveStatus === EnumTaskCheckReceiveStatus.Completed) { + if (Number(queryState.checkReceiveStatus) === EnumTaskCheckReceiveStatus.Completed) { Taro.navigateTo({ url: `${RouterPath.taskCheckDetail}?id=${item.id}`, }); diff --git a/apps/cMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue b/apps/cMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue index c91b50a..7f2f3eb 100644 --- a/apps/cMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue @@ -1,45 +1,16 @@ <template> <ContentScrollView style="background-color: transparent"> <MyTaskCard :showMyTaskArrow="false"></MyTaskCard> + <div class="taskCheckFileCard-status-title">楠屾敹鐓х墖</div> <InfiniteLoading scrollViewClassName="common-infinite-scroll-list task-list" v-bind="infiniteLoadingProps" > <template #renderItem="{ item }"> - <div class="taskCheckDetail-status-wrapper"> - <div class="taskCheckDetail-status-title">楠屾敹鐓х墖</div> - <div - class="taskCheckDetail-status" - :style="{ - color: Colors.Warning, - }" - > - 寰呴獙鏀� - </div> - </div> - <div class="taskCheckDetail-time">2024.11.14 9:28:39</div> - <nut-grid - square - :column-num="3" - :border="false" - :gutter="20" - v-if="item?.files?.length > 0" - class="taskCheckDetail-img-grid" - > - <nut-grid-item - v-for="(itema, index) in item.files" - :key="index" - class="publish-circle-friend-file-grid-item" - > - <div class="taskCheckDetail-img-grid-item"> - <PreviewImage - :src="setOSSLink(itema)" - class="taskCheckDetail-img" - :urls="item.files" - /> - </div> - </nut-grid-item> - </nut-grid> + <TaskCheckFileCard + :created-time="item?.createdTime" + :files="item?.files" + ></TaskCheckFileCard> </template> </InfiniteLoading> </ContentScrollView> @@ -50,11 +21,9 @@ </template> <script setup lang="ts"> -import { MyTaskCard, PreviewImage } from '@12333/components'; -import { Colors } from '@12333/constants'; +import { MyTaskCard, TaskCheckFileCard } from '@12333/components'; import Taro from '@tarojs/taro'; import { useCheckReceiveTaskUserSubmits } from '@12333/hooks'; -import { setOSSLink } from '@12333/utils'; defineOptions({ name: 'InnerPage', @@ -70,73 +39,12 @@ @import '@/styles/common.scss'; .taskCheckDetail-page-wrapper { - .taskCheckDetail-status-wrapper { - display: flex; - align-items: center; + .taskCheckFileCard-status-title { font-weight: 600; font-size: 28px; line-height: 32px; margin-bottom: 16px; - - .taskCheckDetail-status-title { - color: boleGetCssVar('text-color', 'primary'); - flex: 1; - min-width: 0; - } - } - - .taskCheckDetail-time { - font-weight: 400; - font-size: 24px; - color: boleGetCssVar('text-color', 'regular'); - line-height: 36px; - margin-bottom: 22px; - } - - .taskCheckDetail-img-grid { - padding: 0 !important; - - .publish-circle-friend-file-grid-item { - .nut-grid-item__content--square { - padding: 0; - border: none; - display: block; - background-color: transparent; - } - } - - .taskCheckDetail-img-grid-item { - width: 100%; - height: 100%; - box-sizing: border-box; - position: relative; - padding: 20px; - } - - .taskCheckDetail-img { - border-radius: 8px; - width: 100% !important; - height: 100%; - object-fit: cover; - } - } - - .taskCheckDetail-tips-wrapper { - display: flex; - flex-direction: column; - align-items: center; - font-weight: 400; - font-size: 24px; - line-height: 32px; - padding: 20px 0; - - .taskCheckDetail-tips-text { - color: boleGetCssVar('text-color', 'secondary'); - } - - .taskCheckDetail-tips-btn { - color: boleGetCssVar('color', 'primary'); - } + color: boleGetCssVar('text-color', 'primary'); } } </style> diff --git a/apps/cMiniApp/src/subpackages/task/taskSubmitCheck/InnerPage.vue b/apps/cMiniApp/src/subpackages/task/taskSubmitCheck/InnerPage.vue index 05900ca..bc40ba1 100644 --- a/apps/cMiniApp/src/subpackages/task/taskSubmitCheck/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/task/taskSubmitCheck/InnerPage.vue @@ -24,6 +24,7 @@ import * as taskCheckReceiveServices from '@12333/services/apiV2/taskCheckReceive'; import Taro from '@tarojs/taro'; import { goBack } from '@/utils'; +import { useQueryClient } from '@tanstack/vue-query'; defineOptions({ name: 'InnerPage', @@ -31,6 +32,7 @@ const route = Taro.useRouter(); const id = route.params?.id as string; +const queryClient = useQueryClient(); const form = reactive({ files: [] as FileItem[], @@ -62,6 +64,7 @@ Message.success('鎻愪氦鎴愬姛', { onClosed() { goBack(); + queryClient.invalidateQueries(['taskServices/getTaskInfo', id]); }, }); } diff --git a/packages/components/src/Card/TaskCheckFileCard.vue b/packages/components/src/Card/TaskCheckFileCard.vue new file mode 100644 index 0000000..cc0fc5d --- /dev/null +++ b/packages/components/src/Card/TaskCheckFileCard.vue @@ -0,0 +1,132 @@ +<template> + <div class="taskCheckFileCard-wrapper"> + <div class="taskCheckFileCard-status-wrapper"> + <div class="taskCheckFileCard-time"> + {{ dayjs(props.createdTime).format('YYYY-MM-DD HH:mm:ss') }} + </div> + <div + class="taskCheckFileCard-status" + :style="{ + color: Colors.Warning, + }" + > + {{ EnumTaskCheckReceiveStatusText[props.checkReceiveStatus] }} + </div> + </div> + + <nut-grid + square + :column-num="3" + :border="false" + :gutter="20" + v-if="props?.files?.length > 0" + class="taskCheckFileCard-img-grid" + > + <nut-grid-item + v-for="(itema, index) in props.files" + :key="index" + class="publish-circle-friend-file-grid-item" + > + <div class="taskCheckFileCard-img-grid-item"> + <PreviewImage + :src="setOSSLink(itema)" + class="taskCheckFileCard-img" + :urls="props.files" + /> + </div> + </nut-grid-item> + </nut-grid> + </div> +</template> + +<script setup lang="ts"> +import { PreviewImage } from '@12333/components'; +import { + Colors, + EnumTaskUserSubmitCheckReceiveStatus, + EnumTaskCheckReceiveStatusText, +} from '@12333/constants'; +import { setOSSLink } from '@12333/utils'; +import dayjs from 'dayjs'; + +defineOptions({ + name: 'TaskCheckFileCard', +}); + +type Props = { + createdTime?: string; + checkReceiveStatus?: EnumTaskUserSubmitCheckReceiveStatus; + files?: string[]; + + showCheckReceiveStatus?: boolean; +}; + +const props = withDefaults(defineProps<Props>(), { + showCheckReceiveStatus: false, +}); +</script> + +<style lang="scss"> +@import '@/styles/common.scss'; + +.taskCheckFileCard-wrapper { + .taskCheckFileCard-status-wrapper { + display: flex; + align-items: center; + justify-content: space-between; + } + + .taskCheckFileCard-time { + font-weight: 400; + font-size: 24px; + color: boleGetCssVar('text-color', 'regular'); + line-height: 32px; + } + + .taskCheckFileCard-img-grid { + padding: 0 !important; + + .publish-circle-friend-file-grid-item { + .nut-grid-item__content--square { + padding: 0; + border: none; + display: block; + background-color: transparent; + } + + .taskCheckFileCard-img-grid-item { + width: 100%; + height: 100%; + box-sizing: border-box; + position: relative; + padding: 20px; + } + } + + .taskCheckFileCard-img { + border-radius: 8px; + width: 100% !important; + height: 100%; + object-fit: cover; + } + } + + .taskCheckFileCard-tips-wrapper { + display: flex; + flex-direction: column; + align-items: center; + font-weight: 400; + font-size: 24px; + line-height: 32px; + padding: 20px 0; + + .taskCheckFileCard-tips-text { + color: boleGetCssVar('text-color', 'secondary'); + } + + .taskCheckFileCard-tips-btn { + color: boleGetCssVar('color', 'primary'); + } + } +} +</style> diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts index a98cb48..0adeb76 100644 --- a/packages/components/src/index.ts +++ b/packages/components/src/index.ts @@ -22,6 +22,7 @@ export { default as AreaTreeSelect } from './AreaTreeSelect/AreaTreeSelect.vue'; export { default as Elevator } from './Elevator/Elevator.vue'; export { default as TaskCard } from './Card/TaskCard.vue'; +export { default as TaskCheckFileCard } from './Card/TaskCheckFileCard.vue'; export { default as MineAgreementSignCard } from './Card/MineAgreementSignCard.vue'; export { default as JobApplicationCard } from './Card/JobApplicationCard.vue'; export { default as MyTaskCard } from './Card/MyTaskCard.vue'; diff --git a/packages/constants/task.ts b/packages/constants/task.ts index aa6b8e2..ab19a55 100644 --- a/packages/constants/task.ts +++ b/packages/constants/task.ts @@ -51,7 +51,8 @@ }; export const EnumTaskCheckReceiveStatusText = { - [EnumTaskCheckReceiveStatus.WaitSubmit]: '寰呴獙鏀�', + [EnumTaskCheckReceiveStatus.WaitSubmit]: '寰呮彁浜�', + [EnumTaskCheckReceiveStatus.WaitCheckReceive]: '寰呴獙鏀�', [EnumTaskCheckReceiveStatus.Completed]: '宸查獙鏀�', }; diff --git a/packages/hooks/task.ts b/packages/hooks/task.ts index 9cc65d2..a29fbb1 100644 --- a/packages/hooks/task.ts +++ b/packages/hooks/task.ts @@ -169,7 +169,7 @@ }); }, { - queryKey: ['taskCheckReceiveServices/getCheckReceiveTaskUserSubmits', id], + queryKey: ['taskCheckReceiveServices/getCheckReceiveTaskUserSubmits'], } ); diff --git a/packages/services/apiV2/auth.ts b/packages/services/apiV2/auth.ts index 331a423..1a95129 100644 --- a/packages/services/apiV2/auth.ts +++ b/packages/services/apiV2/auth.ts @@ -81,6 +81,23 @@ }); } +/** 鏌ヨ浼佷笟鐢ㄦ埛鐧诲綍淇℃伅 GET /api/user/auth/getEnterpriseLoginInfo */ +export async function getEnterpriseLoginInfo( + // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) + params: API.APIgetEnterpriseLoginInfoParams, + options?: API.RequestConfig +) { + return request<API.GetEnterpriseLoginInfoQueryResult>('/api/user/auth/getEnterpriseLoginInfo', { + method: 'GET', + params: { + ...params, + request: undefined, + ...params['request'], + }, + ...(options || {}), + }); +} + /** 鏌ヨ涓汉鐢ㄦ埛鐧诲綍淇℃伅 GET /api/user/auth/getPersonalLoginInfo */ export async function getPersonalLoginInfo( // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) diff --git a/packages/services/apiV2/index.ts b/packages/services/apiV2/index.ts index 24135cb..ca93bf7 100644 --- a/packages/services/apiV2/index.ts +++ b/packages/services/apiV2/index.ts @@ -10,9 +10,9 @@ import * as user from './user'; import * as userResume from './userResume'; import * as auth from './auth'; +import * as taskCheckReceive from './taskCheckReceive'; import * as resource from './resource'; import * as taskUser from './taskUser'; -import * as taskCheckReceive from './taskCheckReceive'; import * as menu from './menu'; export default { enterpriseEmployee, @@ -23,8 +23,8 @@ user, userResume, auth, + taskCheckReceive, resource, taskUser, - taskCheckReceive, menu, }; diff --git a/packages/services/apiV2/typings.d.ts b/packages/services/apiV2/typings.d.ts index 4228eaa..beca1f6 100644 --- a/packages/services/apiV2/typings.d.ts +++ b/packages/services/apiV2/typings.d.ts @@ -14,8 +14,14 @@ } interface APIgetCheckReceiveTaskUserSubmitParams { - /** 鎻愪氦Id */ - id?: string; + /** 鎻愪氦Id锛堢敤浜嶣绔鎴风锛� */ + submitId?: string; + /** 浠诲姟Id锛堢敤浜嶤绔皬绋嬪簭缂栬緫鎻愪氦 鍜屾棩鏈熶竴璧蜂紶锛� */ + taskInfoId?: string; + /** 浠诲姟浜哄憳Id锛堢敤浜嶣绔皬绋嬪簭楠屾敹 鍜屾棩鏈熶竴璧蜂紶锛� */ + taskInfoUserId?: string; + /** 鏃ユ湡锛堢敤浜庝袱涓皬绋嬪簭 璺熸煇涓�涓狪d涓�璧蜂紶锛� */ + date?: string; } interface APIgetCurrentLogierMenuParams { @@ -60,6 +66,11 @@ id?: string; /** 浠诲姟Id */ taskInfoId?: string; + } + + interface APIgetEnterpriseLoginInfoParams { + /** 鏌ヨ浼佷笟鐢ㄦ埛鐧诲綍淇℃伅 */ + request?: GetEnterpriseLoginInfoQuery; } interface APIgetEnterpriseParams { @@ -198,6 +209,18 @@ ids?: string[]; /** 鏄惁鏀惰棌 */ isCollect?: boolean; + } + + interface CollectUserResumeCommand { + /** 鐢ㄦ埛Id */ + id?: string; + /** 鏄惁宸叉敹钘� */ + isCollected?: boolean; + } + + interface ContactUserResumeCommand { + /** 鐢ㄦ埛Id */ + id?: string; } interface DeleteDictionaryCategoryCommand { @@ -639,6 +662,24 @@ /** 閿欒鐮� */ errorCode?: string; data?: GetEnterpriseEmployeesQueryResult; + /** 鎵ц鎴愬姛 */ + success?: boolean; + /** 閿欒淇℃伅 */ + msg?: any; + /** 闄勫姞鏁版嵁 */ + extras?: any; + /** 鏃堕棿鎴� */ + timestamp?: number; + } + + interface FriendlyResultGetEnterpriseLoginInfoQueryResult { + /** 璺熻釜Id */ + traceId?: string; + /** 鐘舵�佺爜 */ + code?: number; + /** 閿欒鐮� */ + errorCode?: string; + data?: GetEnterpriseLoginInfoQueryResult; /** 鎵ц鎴愬姛 */ success?: boolean; /** 閿欒淇℃伅 */ @@ -1371,6 +1412,9 @@ interface GetCheckReceiveTaskQuery { /** 浠诲姟Id */ taskInfoId?: string; + checkReceiveStatus?: EnumTaskCheckReceiveStatus; + /** 鏃ユ湡锛圔绔皬绋嬪簭涓撶敤锛� */ + date?: string; pageModel?: PagedListQueryPageModel; } @@ -1427,6 +1471,8 @@ interface GetCheckReceiveTasksQuery { /** 鏃ユ湡锛堝皬绋嬪簭-楠屾敹绠$悊涓撶敤锛� */ date?: string; + /** 鍏抽敭瀛楋紙濮撳悕/鎵嬫満/韬唤璇佸彿锛� */ + keywords?: string; /** 楠屾敹鏃ユ湡-鏈�鏃╂椂闂达紙B绔鎴风-楠屾敹绠$悊涓撶敤锛� */ checkReceiveTimeBegin?: string; /** 楠屾敹鏃ユ湡-鏈�鏅氭椂闂达紙B绔鎴风-楠屾敹绠$悊涓撶敤锛� */ @@ -1452,6 +1498,8 @@ /** 鏈嶅姟璐� */ serviceFee?: number; settlementCycle?: EnumSettlementCycle; + /** 鍙戝竷鏃堕棿 */ + createdTime?: string; /** 浠诲姟寮�濮嬫椂闂� */ beginTime?: string; /** 浠诲姟缁撴潫鏃堕棿 */ @@ -1504,6 +1552,8 @@ } interface GetCheckReceiveTaskUserSubmitsQueryResultObjectDataEnterpriseEmployeeUser { + /** 鐢ㄦ埛Id */ + id?: string; /** 澶村儚 */ avatar?: string; /** 濮撳悕 */ @@ -1518,6 +1568,8 @@ /** 鏄惁瀹炲悕 */ isReal?: boolean; realMethod?: EnumUserRealMethod; + /** 鏄惁缁戝畾閾惰鍗� */ + isBindBankCard?: boolean; } interface GetCheckReceiveTaskUserSubmitsQueryResultObjectDataTaskInfo { @@ -1748,6 +1800,27 @@ enterpriseSignContractStatus?: EnumTaskUserSignContractStatus; /** 浼佷笟绛剧害鏃堕棿 */ enterpriseSignContractTime?: string; + } + + type GetEnterpriseLoginInfoQuery = Record<string, any>; + + interface GetEnterpriseLoginInfoQueryResult { + /** Id */ + id?: string; + /** 澶村儚 */ + avatar?: string; + /** 濮撳悕 */ + name?: string; + /** 浼佷笟鍏ㄧО */ + enterpriseName?: string; + /** 瑙掕壊 */ + roles?: string[]; + /** 鏄惁瀹炲悕 */ + isReal?: boolean; + /** 鎴戠殑鏀惰棌 */ + collectUsers?: number; + /** 鑱旂郴璁板綍 */ + contactRecords?: number; } interface GetEnterpriseQueryResult { @@ -2226,6 +2299,8 @@ applyCount?: number; /** 浠诲姟鍚嶇О */ name?: string; + /** 浠诲姟鍗曞彿 */ + code?: string; billingMethod?: EnumBillingMethod; /** 鏈嶅姟璐� */ serviceFee?: number; @@ -2374,7 +2449,7 @@ checkReceiveStatus?: EnumTaskCheckReceiveStatus; settlementStatus?: EnumTaskSettlementStatus; recommendStatus?: EnumTaskRecommendStatus; - /** 鍒涘缓鏃堕棿 */ + /** 鍙戝竷鏃堕棿 */ createdTime?: string; } diff --git a/packages/services/apiV2/userResume.ts b/packages/services/apiV2/userResume.ts index 7b9b8d6..8edd703 100644 --- a/packages/services/apiV2/userResume.ts +++ b/packages/services/apiV2/userResume.ts @@ -2,6 +2,36 @@ // @ts-ignore import { request } from '@/utils/request'; +/** 鏀惰棌鐏靛伐 POST /api/user/userResume/collectUserResume */ +export async function collectUserResume( + body: API.CollectUserResumeCommand, + options?: API.RequestConfig +) { + return request<string>('/api/user/userResume/collectUserResume', { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} + +/** 鑱旂郴鐏靛伐 POST /api/user/userResume/contactUserResume */ +export async function contactUserResume( + body: API.ContactUserResumeCommand, + options?: API.RequestConfig +) { + return request<string>('/api/user/userResume/contactUserResume', { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} + /** 鍒犻櫎鐢ㄦ埛绠�鍘�-璧勬牸璇佷功 DELETE /api/user/userResume/deleteUserResumeCredential */ export async function deleteUserResumeCredential( body: API.DeleteUserResumeCredentialCommand, -- Gitblit v1.9.1