From 92b51e47eb0e53e1e8e13aa0f9135603e1bb03a0 Mon Sep 17 00:00:00 2001 From: zhengyiming <540361168@qq.com> Date: 星期日, 19 十月 2025 14:38:36 +0800 Subject: [PATCH] fix: 验收管理 --- packages/constants/enum.ts | 2 packages/services/apiV2/taskCheckReceive.ts | 18 + packages/constants/task.ts | 15 + apps/bMiniApp/src/constants/router.ts | 1 apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue | 3 packages/services/apiV2/user.ts | 30 ++ apps/bMiniApp/project.private.config.json | 65 +++- apps/bMiniApp/src/subpackages/task/components/TaskCheckHistoryCard.vue | 80 ++++++ apps/bMiniApp/src/app.config.ts | 1 apps/bMiniApp/src/subpackages/task/constants/index.ts | 6 apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue | 22 + apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.vue | 13 + packages/services/apiV2/index.ts | 20 apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue | 47 ++ apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue | 61 +++- packages/components/src/Card/FlexJobTopView.vue | 38 ++ packages/services/apiV2/task.ts | 15 + packages/services/apiV2/typings.d.ts | 161 ++++++++++++ apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/InnerPage.vue | 104 ++++++++ packages/constants/apiEnum.ts | 26 + apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.config.ts | 3 21 files changed, 654 insertions(+), 77 deletions(-) diff --git a/apps/bMiniApp/project.private.config.json b/apps/bMiniApp/project.private.config.json index fa7ccc7..23c40f5 100644 --- a/apps/bMiniApp/project.private.config.json +++ b/apps/bMiniApp/project.private.config.json @@ -1,25 +1,44 @@ { - "description": "椤圭洰绉佹湁閰嶇疆鏂囦欢銆傛鏂囦欢涓殑鍐呭灏嗚鐩� project.config.json 涓殑鐩稿悓瀛楁銆傞」鐩殑鏀瑰姩浼樺厛鍚屾鍒版鏂囦欢涓�傝瑙佹枃妗o細https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", - "projectname": "bMiniApp", - "setting": { - "compileHotReLoad": true, - "bigPackageSizeSupport": true, - "urlCheck": false, - "coverView": true, - "lazyloadPlaceholderEnable": false, - "skylineRenderEnable": false, - "preloadBackgroundData": false, - "autoAudits": false, - "useApiHook": true, - "useApiHostProcess": true, - "showShadowRootInWxmlPanel": true, - "useStaticServer": false, - "useLanDebug": false, - "showES6CompileOption": false, - "checkInvalidKey": true, - "ignoreDevUnusedFiles": true, - "useIsolateContext": true - }, - "condition": {}, - "libVersion": "3.9.3" + "description": "椤圭洰绉佹湁閰嶇疆鏂囦欢銆傛鏂囦欢涓殑鍐呭灏嗚鐩� project.config.json 涓殑鐩稿悓瀛楁銆傞」鐩殑鏀瑰姩浼樺厛鍚屾鍒版鏂囦欢涓�傝瑙佹枃妗o細https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", + "projectname": "bMiniApp", + "setting": { + "compileHotReLoad": true, + "bigPackageSizeSupport": true, + "urlCheck": false, + "coverView": true, + "lazyloadPlaceholderEnable": false, + "skylineRenderEnable": false, + "preloadBackgroundData": false, + "autoAudits": false, + "useApiHook": true, + "useApiHostProcess": true, + "showShadowRootInWxmlPanel": true, + "useStaticServer": false, + "useLanDebug": false, + "showES6CompileOption": false, + "checkInvalidKey": true, + "ignoreDevUnusedFiles": true, + "useIsolateContext": true + }, + "condition": { + "miniprogram": { + "list": [ + { + "name": "楠屾敹绠$悊", + "pathName": "subpackages/task/taskCheck/taskCheck", + "query": "", + "scene": null, + "launchMode": "default" + }, + { + "name": "楠屾敹璇︽儏", + "pathName": "subpackages/task/taskCheckDetail/taskCheckDetail", + "query": "id=927b9898-1e9f-4aec-99aa-08ddf4e125c9&date=2025-10-19&checkReceiveStatus=10", + "launchMode": "default", + "scene": null + } + ] + } + }, + "libVersion": "3.9.3" } \ No newline at end of file diff --git a/apps/bMiniApp/src/app.config.ts b/apps/bMiniApp/src/app.config.ts index bb6a629..4077471 100644 --- a/apps/bMiniApp/src/app.config.ts +++ b/apps/bMiniApp/src/app.config.ts @@ -94,6 +94,7 @@ 'taskHandleCheckDetail/taskHandleCheckDetail', 'taskManage/taskManage', 'batchTaskList/batchTaskList', + 'taskUserSubmitCheckHistories/taskUserSubmitCheckHistories', ], }, { diff --git a/apps/bMiniApp/src/constants/router.ts b/apps/bMiniApp/src/constants/router.ts index e2db973..acd5296 100644 --- a/apps/bMiniApp/src/constants/router.ts +++ b/apps/bMiniApp/src/constants/router.ts @@ -47,6 +47,7 @@ taskHandleCheckDetail = '/subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail', taskManage = '/subpackages/task/taskManage/taskManage', batchTaskList = '/subpackages/task/batchTaskList/batchTaskList', + taskUserSubmitCheckHistories = '/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories', jobApplicationManage = '/subpackages/jobApplicationManage/jobApplicationManage/jobApplicationManage', jobApplicationDetail = '/subpackages/jobApplicationManage/jobApplicationDetail/jobApplicationDetail', diff --git a/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue b/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue index fe8e7ea..801c3ee 100644 --- a/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue +++ b/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue @@ -9,15 +9,36 @@ :contactPhoneNumber="contactPhoneNumber" > <template #actions> - <nut-button - v-if="checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitCheckReceive" - type="primary" - class="task-check-card-phone-btn" - >楠屾敹</nut-button - > - <div v-else class="task-check-card-phone-status" :style="{ color: Colors.Success }"> - {{ EnumTaskCheckReceiveStatusText[checkReceiveStatus] }} - </div> + <template v-if="checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn"> + <nut-button + v-if="!checkInTime" + type="primary" + class="task-check-card-phone-btn" + @click.stop="emit('checkInOrOut', CheckInOrOutEventEnum.CheckIn)" + >绛惧埌</nut-button + > + <nut-button + v-else-if="!checkOutTime" + type="primary" + class="task-check-card-phone-btn" + @click.stop="emit('checkInOrOut', CheckInOrOutEventEnum.CheckOut)" + >绛惧嚭</nut-button + > + <div v-else class="task-check-card-phone-status" :style="{ color: Colors.Success }"> + {{ EnumTaskCheckReceiveStatusText[checkReceiveStatus] }} + </div> + </template> + <template v-else> + <nut-button + v-if="checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitCheckReceive" + type="primary" + class="task-check-card-phone-btn" + >楠屾敹</nut-button + > + <div v-else class="task-check-card-phone-status" :style="{ color: Colors.Success }"> + {{ EnumTaskCheckReceiveStatusText[checkReceiveStatus] }} + </div> + </template> </template> </TaskCheckPersonalView> </div> @@ -30,7 +51,9 @@ EnumUserGender, EnumTaskCheckReceiveStatus, EnumTaskCheckReceiveStatusText, + EnumTaskCheckReceiveMethod, } from '@12333/constants'; +import { CheckInOrOutEventEnum } from '../constants'; defineOptions({ name: 'TaskCheckCard', @@ -43,12 +66,18 @@ isReal?: boolean; contactPhoneNumber?: string; checkReceiveStatus?: EnumTaskCheckReceiveStatus; + /** 绛惧埌鏃堕棿 */ + checkInTime?: string; + /** 绛惧嚭鏃堕棿 */ + checkOutTime?: string; + checkReceiveMethod?: EnumTaskCheckReceiveMethod; }; const props = withDefaults(defineProps<Props>(), {}); const emit = defineEmits<{ (e: 'checkReceive'): void; + (e: 'checkInOrOut', ev: CheckInOrOutEventEnum): void; }>(); </script> diff --git a/apps/bMiniApp/src/subpackages/task/components/TaskCheckHistoryCard.vue b/apps/bMiniApp/src/subpackages/task/components/TaskCheckHistoryCard.vue new file mode 100644 index 0000000..ef9135a --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/components/TaskCheckHistoryCard.vue @@ -0,0 +1,80 @@ +<template> + <div class="task-check-card-wrapper"> + <TaskCheckPersonalView + class="task-check-card-view" + :avatar="avatar" + :name="name" + :gender="gender" + :isReal="isReal" + :contactPhoneNumber="contactPhoneNumber" + > + <template #time v-if="!!checkTime"> + {{ dayjs(checkTime).format('HH:mm') }} + </template> + <template #actions> + <div + class="task-check-card-phone-status" + :style="{ color: EnumTaskUserSubmitCheckHistoryTypeColor[type] }" + > + {{ EnumTaskUserSubmitCheckHistoryTypeText[type] }} + </div> + </template> + </TaskCheckPersonalView> + </div> +</template> + +<script setup lang="ts"> +import dayjs from 'dayjs'; +import TaskCheckPersonalView from './TaskCheckPersonalView.vue'; +import { + Colors, + EnumUserGender, + EnumTaskUserSubmitCheckHistoryType, + EnumTaskUserSubmitCheckHistoryTypeText, + EnumTaskUserSubmitCheckHistoryTypeColor, +} from '@12333/constants'; + +defineOptions({ + name: 'TaskCheckHistoryCard', +}); + +type Props = { + avatar?: string; + name?: string; + gender?: EnumUserGender; + isReal?: boolean; + contactPhoneNumber?: string; + type?: EnumTaskUserSubmitCheckHistoryType; + checkTime?: string; +}; + +const props = withDefaults(defineProps<Props>(), {}); +</script> + +<style lang="scss"> +@import '@/styles/common.scss'; + +.task-check-card-wrapper { + background: #ffffff; + border-radius: 12px; + padding: 40px; + padding-right: 26px; + margin-bottom: 24px; + + &:last-child { + margin-bottom: 0; + } + + .task-check-card-view { + .task-check-card-phone-container { + margin-top: 0; + } + } + + .task-check-card-phone-status { + font-size: 24px; + height: 52px; + line-height: 52px; + } +} +</style> diff --git a/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue b/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue index 0fdb3db..ff39f26 100644 --- a/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue +++ b/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue @@ -1,5 +1,8 @@ <template> <FlexJobTopView :avatar="avatar" :name="name" :gender="gender" :isReal="isReal"> + <template #time> + <slot name="time"></slot> + </template> <template #detail> <div class="task-check-card-phone-container"> <div class="task-check-card-phone-wrapper"> diff --git a/apps/bMiniApp/src/subpackages/task/constants/index.ts b/apps/bMiniApp/src/subpackages/task/constants/index.ts new file mode 100644 index 0000000..3d6b49a --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/constants/index.ts @@ -0,0 +1,6 @@ +export enum CheckInOrOutEventEnum { + /**绛惧埌 */ + CheckIn = 10, + /**绛惧嚭 */ + CheckOut = 20, +} diff --git a/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue index a8ed12a..b8760a6 100644 --- a/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue +++ b/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue @@ -36,8 +36,9 @@ <script setup lang="ts"> import { MyTaskCard, ProTabs, ProTabPane, Calendar } from '@12333/components'; import Taro from '@tarojs/taro'; -import { EnumTaskCheckReceiveStatus } from '@12333/constants'; +import { EnumTaskCheckReceiveStatus, EnumTaskCheckReceiveMethod } from '@12333/constants'; import { useCheckReceiveTasks } from '@12333/hooks'; +import dayjs from 'dayjs'; defineOptions({ name: 'InnerPage', @@ -46,8 +47,21 @@ const { queryState, infiniteLoadingProps } = useCheckReceiveTasks(); function goSubmitTaskDetail(item: API.GetCheckReceiveTasksQueryResultItem) { - Taro.navigateTo({ - url: `${RouterPath.taskCheckDetail}?id=${item.id}&date=${queryState.date}&checkReceiveStatus=${queryState.checkReceiveStatus}`, - }); + if ( + item.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn && + dayjs(queryState.date).isBefore(dayjs()) + ) { + Taro.navigateTo({ + url: `${RouterPath.taskUserSubmitCheckHistories}?id=${item.id}&date=${dayjs( + queryState.date + ).format('YYYY-MM-DD')}`, + }); + } else { + Taro.navigateTo({ + url: `${RouterPath.taskCheckDetail}?id=${item.id}&date=${dayjs(queryState.date).format( + 'YYYY-MM-DD' + )}&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 f9e1391..09dd67b 100644 --- a/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue +++ b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue @@ -19,9 +19,13 @@ :name="item.name" :gender="item.gender" :isReal="item.isReal" + :checkInTime="item.checkInTime" + :checkOutTime="item.checkOutTime" :contactPhoneNumber="item.contactPhoneNumber" :checkReceiveStatus="item.checkReceiveStatus" + :checkReceiveMethod="detail?.checkReceiveMethod" @checkReceive="goTaskDetail(item)" + @checkInOrOut="checkReceiveTask" /> </template> </InfiniteLoading> @@ -34,9 +38,10 @@ import { useInfiniteLoading } from '@12333/hooks'; import TaskCheckCard from '../components/TaskCheckCard.vue'; import { MyTaskCard } from '@12333/components'; -import { EnumTaskCheckReceiveStatus } from '@12333/constants'; -import { setOSSLink } from '@12333/utils'; +import { EnumTaskCheckReceiveMethod, EnumTaskCheckReceiveStatus } from '@12333/constants'; +import { Message, setOSSLink } from '@12333/utils'; import dayjs from 'dayjs'; +import { CheckInOrOutEventEnum } from '../constants'; defineOptions({ name: 'InnerPage', @@ -47,8 +52,10 @@ const date = router.params?.date ?? ''; const checkReceiveStatus = Number(router.params?.checkReceiveStatus); +const detail = ref<API.GetCheckReceiveTasksQueryResultItem>(); + const { infiniteLoadingProps } = useInfiniteLoading( - ({ pageParam }) => { + async ({ pageParam }) => { let params: API.GetCheckReceiveTaskQuery = { pageModel: { rows: 20, @@ -59,9 +66,11 @@ checkReceiveStatus: checkReceiveStatus, }; - return taskCheckReceiveServices.getCheckReceiveTask(params, { + let res = await taskCheckReceiveServices.getCheckReceiveTask(params, { showLoading: false, }); + detail.value = res.objectData; + return res; }, { queryKey: ['taskCheckReceiveServices/getCheckReceiveTask'], @@ -69,18 +78,38 @@ ); function goTaskDetail(item: API.GetCheckReceiveTaskQueryResultItem) { - if (item.checkReceiveStatus === EnumTaskCheckReceiveStatus.Completed) { - Taro.navigateTo({ - url: `${RouterPath.taskCheckedDetail}?id=${item.id}`, - }); + if (detail.value.checkReceiveMethod !== EnumTaskCheckReceiveMethod.CheckIn) { + if (item.checkReceiveStatus === EnumTaskCheckReceiveStatus.Completed) { + Taro.navigateTo({ + url: `${RouterPath.taskCheckedDetail}?id=${item.id}`, + }); + } + if ( + item.checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitCheckReceive || + item.checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitSubmit + ) { + Taro.navigateTo({ + url: `${RouterPath.taskHandleCheckDetail}?id=${item.id}&date=${date}`, + }); + } } - if ( - item.checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitCheckReceive || - item.checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitSubmit - ) { - Taro.navigateTo({ - url: `${RouterPath.taskHandleCheckDetail}?id=${item.id}&date=${date}`, - }); - } +} + +async function checkReceiveTask(ev: CheckInOrOutEventEnum) { + try { + let params: API.CheckReceiveTaskCommand = { + id: id, + }; + if (ev === CheckInOrOutEventEnum.CheckIn) { + params.checkInTime = dayjs().format('YYYY-MM-DD HH:mm:ss'); + } else if (ev === CheckInOrOutEventEnum.CheckOut) { + params.checkOutTime = dayjs().format('YYYY-MM-DD HH:mm:ss'); + } + let res = await taskCheckReceiveServices.checkReceiveTask(params); + if (res) { + Message.success('鎻愪氦鎴愬姛'); + infiniteLoadingProps.value?.refetch?.(); + } + } catch (error) {} } </script> diff --git a/apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/InnerPage.vue new file mode 100644 index 0000000..0d74f59 --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/InnerPage.vue @@ -0,0 +1,104 @@ +<template> + <LoadingLayout> + <ProTabs + v-model="queryState.type" + name="taskUserSubmitCheckHistories-tab" + :showPaneContent="false" + class="taskUserSubmitCheckHistories-tabs" + isTransparent + title-gutter="8" + title-scroll + > + <ProTabPane :title="`鍏ㄩ儴`" :pane-key="0"></ProTabPane> + <ProTabPane + :title="EnumTaskUserSubmitCheckHistoryTypeText[EnumTaskUserSubmitCheckHistoryType.CheckIn]" + :pane-key="EnumTaskUserSubmitCheckHistoryType.CheckIn" + ></ProTabPane> + <ProTabPane + :title="EnumTaskUserSubmitCheckHistoryTypeText[EnumTaskUserSubmitCheckHistoryType.CheckOut]" + :pane-key="EnumTaskUserSubmitCheckHistoryType.CheckOut" + ></ProTabPane> + <ProTabPane + :title=" + EnumTaskUserSubmitCheckHistoryTypeText[EnumTaskUserSubmitCheckHistoryType.UnCheckIn] + " + :pane-key="EnumTaskUserSubmitCheckHistoryType.UnCheckIn" + ></ProTabPane> + <ProTabPane + :title=" + EnumTaskUserSubmitCheckHistoryTypeText[EnumTaskUserSubmitCheckHistoryType.UnCheckOut] + " + :pane-key="EnumTaskUserSubmitCheckHistoryType.UnCheckOut" + ></ProTabPane> + </ProTabs> + <ChunkTitle :title="title" /> + <InfiniteLoading + scrollViewClassName="common-infinite-scroll-list" + v-bind="infiniteLoadingProps" + > + <template #renderItem="{ item }"> + <TaskCheckHistoryCard + :avatar="setOSSLink(item.avatar)" + :name="item.name" + :gender="item.gender" + :isReal="item.isReal" + :contactPhoneNumber="item.contactPhoneNumber" + :type="item.type" + :checkTime="item.checkTime" + /> + </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 TaskCheckHistoryCard from '../components/TaskCheckHistoryCard.vue'; +import { ProTabs, ProTabPane } from '@12333/components'; +import { + EnumTaskUserSubmitCheckHistoryTypeText, + EnumTaskUserSubmitCheckHistoryTypeColor, + EnumTaskUserSubmitCheckHistoryType, + WeekCN, +} from '@12333/constants'; +import { Message, setOSSLink } from '@12333/utils'; +import dayjs from 'dayjs'; + +defineOptions({ + name: 'InnerPage', +}); + +const router = Taro.useRouter(); +const id = router.params?.id ?? ''; +const date = router.params?.date ?? ''; + +const title = `${dayjs(date).format('YYYY骞碝M鏈圖D鏃�')} 鏄熸湡${WeekCN[dayjs(date).day()]}`; + +const queryState = reactive({ + type: 0 as any as EnumTaskUserSubmitCheckHistoryType, +}); + +const { infiniteLoadingProps } = useInfiniteLoading( + async ({ pageParam }) => { + let params: API.GetCheckReceiveTaskUserSubmitCheckHistoriesQuery = { + pageModel: { + rows: 20, + page: pageParam, + }, + taskInfoId: id, + date: dayjs(date).format('YYYY-MM-DD'), + type: queryState.type, + }; + + let res = await taskCheckReceiveServices.getCheckReceiveTaskUserSubmitCheckHistories(params, { + showLoading: false, + }); + return res; + }, + { + queryKey: ['taskCheckReceiveServices/getCheckReceiveTaskUserSubmitCheckHistories', queryState], + } +); +</script> diff --git a/apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.config.ts b/apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.config.ts new file mode 100644 index 0000000..305fdb1 --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + disableScroll: true, +}); diff --git a/apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.vue b/apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.vue new file mode 100644 index 0000000..5ff25c8 --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.vue @@ -0,0 +1,13 @@ +<template> + <PageLayoutWithBg class="taskUserSubmitCheckHistories-page-wrapper" title="楠屾敹璇︽儏"> + <InnerPage /> + </PageLayoutWithBg> +</template> + +<script setup lang="ts"> +import InnerPage from './InnerPage.vue'; + +defineOptions({ + name: 'taskUserSubmitCheckHistories', +}); +</script> diff --git a/packages/components/src/Card/FlexJobTopView.vue b/packages/components/src/Card/FlexJobTopView.vue index f874817..2c9fa45 100644 --- a/packages/components/src/Card/FlexJobTopView.vue +++ b/packages/components/src/Card/FlexJobTopView.vue @@ -7,17 +7,22 @@ /> <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="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 class="flexJob-card-top-info-item-w"> + <div class="flexJob-card-top-info-name">{{ name }}</div> + <div class="flexJob-card-top-info-gender"> + <img + 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': isReal }"> + {{ isReal ? '宸插疄鍚�' : '鏈疄鍚�' }} + </div> </div> - <div class="flexJob-card-top-info-auth" :class="{ 'is-real-name': isReal }"> - {{ isReal ? '宸插疄鍚�' : '鏈疄鍚�' }} + <div class="flexJob-card-top-info-item-right"> + <slot name="time"></slot> </div> </div> <slot name="detail"> @@ -90,10 +95,23 @@ flex: 1; min-width: 0; + .flexJob-card-top-info-item-w { + display: flex; + align-items: center; + flex: 1; + min-width: 0; + } + .flexJob-card-top-info-item { display: flex; align-items: center; + .flexJob-card-top-info-item-right { + font-size: 28px; + line-height: 34px; + color: boleGetCssVar('text-color', 'secondary'); + } + .flexJob-card-top-info-name { font-size: 34px; line-height: 34px; diff --git a/packages/constants/apiEnum.ts b/packages/constants/apiEnum.ts index b901d56..3d11edb 100644 --- a/packages/constants/apiEnum.ts +++ b/packages/constants/apiEnum.ts @@ -485,6 +485,16 @@ Stopped = 100, } +/** 浠诲姟缁撶畻瀹℃牳鐘舵�� */ +export enum EnumTaskSettlementAuditStatus { + /**寰呭鏍� */ + Wait = 10, + /**瀹℃牳閫氳繃 */ + Pass = 20, + /**椹冲洖 */ + Fail = 30, +} + /** 浠诲姟缁撶畻鍗曠姸鎬� */ export enum EnumTaskSettlementOrderStatus { /**寰呬笂浼� */ @@ -545,15 +555,27 @@ Stop = 50, } +/** 浠诲姟浜哄憳鎻愪氦淇℃伅绛惧埌璁板綍绫诲瀷 */ +export enum EnumTaskUserSubmitCheckHistoryType { + /**绛惧埌 */ + CheckIn = 10, + /**绛惧嚭 */ + CheckOut = 20, + /**鏈埌宀� */ + UnCheckIn = 30, + /**鏈鍑� */ + UnCheckOut = 40, +} + /** 浠诲姟楠屾敹鐘舵�� */ export enum EnumTaskUserSubmitCheckReceiveStatus { /**寰呮彁浜� */ WaitSubmit = 10, - /**寰呴獙鏀�/鏈埌宀� */ + /**寰呴獙鏀� */ WaitCheckReceive = 20, /**楠屾敹閫氳繃/宸茬鍒� */ Success = 30, - /**楠屾敹鏈�氳繃 */ + /**楠屾敹鏈�氳繃/鏈埌宀� */ Fail = 40, } diff --git a/packages/constants/enum.ts b/packages/constants/enum.ts index 511e684..712ee34 100644 --- a/packages/constants/enum.ts +++ b/packages/constants/enum.ts @@ -116,3 +116,5 @@ */ UserCertification = 10, } + +export const WeekCN = ['鏃�', '涓�', '浜�', '涓�', '鍥�', '浜�', '鍏�']; diff --git a/packages/constants/task.ts b/packages/constants/task.ts index fd41f55..669badf 100644 --- a/packages/constants/task.ts +++ b/packages/constants/task.ts @@ -13,6 +13,7 @@ GetTaskInfoQueryResultHireButton, GetTaskInfoQueryResultApplyButton, EnumTaskUserSubmitCheckReceiveStatus, + EnumTaskUserSubmitCheckHistoryType, } from './apiEnum'; export const EnumBillingMethodText = { @@ -155,3 +156,17 @@ [GetTaskInfoQueryResultApplyButton.WaitHire]: '寰呯‘璁�', [GetTaskInfoQueryResultApplyButton.WaitSignContract]: '鍘荤绾�', }; + +export const EnumTaskUserSubmitCheckHistoryTypeText = { + [EnumTaskUserSubmitCheckHistoryType.CheckIn]: '绛惧埌', + [EnumTaskUserSubmitCheckHistoryType.CheckOut]: '绛惧嚭', + [EnumTaskUserSubmitCheckHistoryType.UnCheckIn]: '鏈埌宀�', + [EnumTaskUserSubmitCheckHistoryType.UnCheckOut]: '鏈鍑�', +}; + +export const EnumTaskUserSubmitCheckHistoryTypeColor = { + [EnumTaskUserSubmitCheckHistoryType.CheckIn]: Colors.Success, + [EnumTaskUserSubmitCheckHistoryType.CheckOut]: Colors.Success, + [EnumTaskUserSubmitCheckHistoryType.UnCheckIn]: Colors.Danger, + [EnumTaskUserSubmitCheckHistoryType.UnCheckOut]: Colors.Info, +}; diff --git a/packages/services/apiV2/index.ts b/packages/services/apiV2/index.ts index aa1fd08..e99bcae 100644 --- a/packages/services/apiV2/index.ts +++ b/packages/services/apiV2/index.ts @@ -5,11 +5,12 @@ import * as enterpriseEmployee from './enterpriseEmployee'; import * as user from './user'; import * as role from './role'; +import * as enterpriseWallet from './enterpriseWallet'; import * as ocrUtils from './ocrUtils'; import * as task from './task'; import * as enterprise from './enterprise'; +import * as logRecords from './logRecords'; import * as resource from './resource'; -import * as enterpriseWallet from './enterpriseWallet'; import * as dictionary from './dictionary'; import * as codeUrl from './codeUrl'; import * as electronSign from './electronSign'; @@ -18,21 +19,21 @@ import * as taskCheckReceive from './taskCheckReceive'; import * as taskUser from './taskUser'; import * as sms from './sms'; -import * as logRecords from './logRecords'; -import * as menu from './menu'; -import * as fileUtils from './fileUtils'; -import * as userWallet from './userWallet'; import * as settings from './settings'; +import * as menu from './menu'; +import * as userWallet from './userWallet'; +import * as fileUtils from './fileUtils'; import * as syncDatabase from './syncDatabase'; export default { enterpriseEmployee, user, role, + enterpriseWallet, ocrUtils, task, enterprise, + logRecords, resource, - enterpriseWallet, dictionary, codeUrl, electronSign, @@ -41,10 +42,9 @@ taskCheckReceive, taskUser, sms, - logRecords, - menu, - fileUtils, - userWallet, settings, + menu, + userWallet, + fileUtils, syncDatabase, }; diff --git a/packages/services/apiV2/task.ts b/packages/services/apiV2/task.ts index 0f797ab..84167b8 100644 --- a/packages/services/apiV2/task.ts +++ b/packages/services/apiV2/task.ts @@ -2,6 +2,21 @@ // @ts-ignore import { request } from '@/utils/request'; +/** 瀹℃牳浠诲姟缁撶畻 POST /api/flexjob/task/auditTaskSettlement */ +export async function auditTaskSettlement( + body: API.AuditTaskSettlementCommand, + options?: API.RequestConfig +) { + return request<string>('/api/flexjob/task/auditTaskSettlement', { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} + /** 鍒犻櫎浠诲姟 DELETE /api/flexjob/task/deleteTaskInfo */ export async function deleteTaskInfo(body: API.DeleteTaskInfoCommand, options?: API.RequestConfig) { return request<number>('/api/flexjob/task/deleteTaskInfo', { diff --git a/packages/services/apiV2/taskCheckReceive.ts b/packages/services/apiV2/taskCheckReceive.ts index 87c33b3..aaa88db 100644 --- a/packages/services/apiV2/taskCheckReceive.ts +++ b/packages/services/apiV2/taskCheckReceive.ts @@ -86,6 +86,24 @@ ); } +/** 鏌ヨ楠屾敹浠诲姟璇︽儏-绛惧埌绛惧嚭璁板綍 POST /api/flexjob/taskCheckReceive/getCheckReceiveTaskUserSubmitCheckHistories */ +export async function getCheckReceiveTaskUserSubmitCheckHistories( + body: API.GetCheckReceiveTaskUserSubmitCheckHistoriesQuery, + options?: API.RequestConfig +) { + return request<API.GetCheckReceiveTaskUserSubmitCheckHistoriesQueryResult>( + '/api/flexjob/taskCheckReceive/getCheckReceiveTaskUserSubmitCheckHistories', + { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + } + ); +} + /** 鏌ヨ楠屾敹璇︽儏 POST /api/flexjob/taskCheckReceive/getCheckReceiveTaskUserSubmits */ export async function getCheckReceiveTaskUserSubmits( body: API.GetCheckReceiveTaskUserSubmitsQuery, diff --git a/packages/services/apiV2/typings.d.ts b/packages/services/apiV2/typings.d.ts index f903ae2..5dac705 100644 --- a/packages/services/apiV2/typings.d.ts +++ b/packages/services/apiV2/typings.d.ts @@ -344,6 +344,14 @@ ids?: string[]; } + interface AuditTaskSettlementCommand { + /** 缁撶畻璁㈠崟Id */ + id?: string; + auditStatus?: EnumTaskSettlementAuditStatus; + /** 瀹℃牳澶囨敞 */ + auditRemark?: string; + } + interface BaiduOcrBusinessLicenseResultModel { /** 浼佷笟鍏ㄧО */ enterpriseName?: string; @@ -397,6 +405,16 @@ sessionKey: string; } + interface BuildOperatorTokenCommand { + /** 鎿嶄綔瀵嗙爜 */ + password?: string; + } + + interface BuildOperatorTokenCommandResult { + /** 鎿嶄綔浠ょ墝 */ + operatorToken?: string; + } + interface ChangePhoneNumberCommand { /** 鎵嬫満鍙风爜 */ phoneNumber: string; @@ -416,9 +434,18 @@ type CheckHealthQuery = Record<string, any>; + interface CheckOperatorTokenCommand { + /** 鎿嶄綔浠ょ墝 */ + operatorToken?: string; + } + interface CheckReceiveTaskCommand { /** 鎻愪氦Id */ id?: string; + /** 绛惧埌鏃堕棿 */ + checkInTime?: string; + /** 绛惧嚭鏃堕棿 */ + checkOutTime?: string; checkReceiveStatus?: EnumTaskUserSubmitCheckReceiveStatus; } @@ -494,6 +521,8 @@ interface EditTaskSettlementOrderRosterCommand { /** 鍚嶅崟Id */ id?: string; + /** 绱宸ユ椂 */ + totalWorkHours?: number; /** 缁撶畻閲戦 */ settlementAmount: number; /** 瀹炲彂閲戦 */ @@ -1015,6 +1044,15 @@ Stopped = 100, } + enum EnumTaskSettlementAuditStatus { + /**寰呭鏍� */ + Wait = 10, + /**瀹℃牳閫氳繃 */ + Pass = 20, + /**椹冲洖 */ + Fail = 30, + } + enum EnumTaskSettlementOrderStatus { /**寰呬笂浼� */ Wait = 10, @@ -1069,14 +1107,25 @@ Stop = 50, } + enum EnumTaskUserSubmitCheckHistoryType { + /**绛惧埌 */ + CheckIn = 10, + /**绛惧嚭 */ + CheckOut = 20, + /**鏈埌宀� */ + UnCheckIn = 30, + /**鏈鍑� */ + UnCheckOut = 40, + } + enum EnumTaskUserSubmitCheckReceiveStatus { /**寰呮彁浜� */ WaitSubmit = 10, - /**寰呴獙鏀�/鏈埌宀� */ + /**寰呴獙鏀� */ WaitCheckReceive = 20, /**楠屾敹閫氳繃/宸茬鍒� */ Success = 30, - /**楠屾敹鏈�氳繃 */ + /**楠屾敹鏈�氳繃/鏈埌宀� */ Fail = 40, } @@ -1313,6 +1362,24 @@ timestamp?: number; } + interface FriendlyResultBuildOperatorTokenCommandResult { + /** 璺熻釜Id */ + traceId?: string; + /** 鐘舵�佺爜 */ + code?: number; + /** 閿欒鐮� */ + errorCode?: string; + data?: BuildOperatorTokenCommandResult; + /** 鎵ц鎴愬姛 */ + success?: boolean; + /** 閿欒淇℃伅 */ + msg?: any; + /** 闄勫姞鏁版嵁 */ + extras?: any; + /** 鏃堕棿鎴� */ + timestamp?: number; + } + interface FriendlyResultEnterpriseUserElectronSignCommandResult { /** 璺熻釜Id */ traceId?: string; @@ -1411,6 +1478,24 @@ /** 閿欒鐮� */ errorCode?: string; data?: GetCheckReceiveTasksQueryResult; + /** 鎵ц鎴愬姛 */ + success?: boolean; + /** 閿欒淇℃伅 */ + msg?: any; + /** 闄勫姞鏁版嵁 */ + extras?: any; + /** 鏃堕棿鎴� */ + timestamp?: number; + } + + interface FriendlyResultGetCheckReceiveTaskUserSubmitCheckHistoriesQueryResult { + /** 璺熻釜Id */ + traceId?: string; + /** 鐘舵�佺爜 */ + code?: number; + /** 閿欒鐮� */ + errorCode?: string; + data?: GetCheckReceiveTaskUserSubmitCheckHistoriesQueryResult; /** 鎵ц鎴愬姛 */ success?: boolean; /** 閿欒淇℃伅 */ @@ -3373,6 +3458,12 @@ /** 鏄惁瀹炲悕 */ isReal?: boolean; realMethod?: EnumUserRealMethod; + /** 绛惧埌鏃堕棿 */ + checkInTime?: string; + /** 绛惧嚭鏃堕棿 */ + checkOutTime?: string; + /** 鎿嶄綔浜� */ + operator?: string; /** 鏈�杩戞彁浜ゆ椂闂� */ lastSubmitTime?: string; checkReceiveStatus?: EnumTaskCheckReceiveStatus; @@ -3462,6 +3553,45 @@ lastCheckReceiveTime?: string; } + interface GetCheckReceiveTaskUserSubmitCheckHistoriesQuery { + /** 浠诲姟Id */ + taskInfoId?: string; + /** 鏃ユ湡 */ + date?: string; + type?: EnumTaskUserSubmitCheckHistoryType; + pageModel?: PagedListQueryPageModel; + } + + interface GetCheckReceiveTaskUserSubmitCheckHistoriesQueryResult { + pageModel?: PagedListQueryResultPageModel; + /** 鏁版嵁 */ + data?: GetCheckReceiveTaskUserSubmitCheckHistoriesQueryResultItem[]; + } + + interface GetCheckReceiveTaskUserSubmitCheckHistoriesQueryResultItem { + /** 璁板綍Id */ + id?: string; + /** 澶村儚 */ + avatar?: string; + /** 濮撳悕 */ + name?: string; + /** 韬唤璇佸彿 */ + identity?: string; + gender?: EnumUserGender; + /** 骞撮緞 */ + age?: number; + /** 鎵嬫満鍙� */ + contactPhoneNumber?: string; + /** 鏄惁瀹炲悕 */ + isReal?: boolean; + realMethod?: EnumUserRealMethod; + /** 绛惧埌绛惧嚭鏃堕棿 */ + checkTime?: string; + /** 鎿嶄綔浜� */ + operator?: string; + type?: EnumTaskUserSubmitCheckHistoryType; + } + interface GetCheckReceiveTaskUserSubmitQueryResult { /** 鎻愪氦Id */ id?: string; @@ -3495,6 +3625,12 @@ id?: string; /** 楠屾敹鏃堕棿 */ date?: string; + /** 绛惧埌鏃堕棿 */ + checkInTime?: string; + /** 绛惧嚭鏃堕棿 */ + checkOutTime?: string; + /** 鎿嶄綔浜� */ + operator?: string; /** 鎻愪氦鏃堕棿 */ createdTime?: string; /** 楠屾敹鐓х墖 */ @@ -5534,10 +5670,21 @@ interface GetSettlementTaskUsersQueryResultDetail { /** 缁撶畻璁㈠崟Id */ id?: string; + /** 鏍¢獙楠屾敹璧峰鏃ユ湡 */ + checkReceiveBeginDate?: string; + /** 鏍¢獙楠屾敹鎴鏃ユ湡 */ + checkReceiveEndDate?: string; /** 浠诲姟鍚嶇О */ name?: string; /** 浠诲姟鍗曞彿 */ code?: string; + billingMethod?: EnumBillingMethod; + /** 鏈嶅姟璐� */ + serviceFee?: number; + /** 鏍稿畾宸ユ椂 */ + verifyWorkHours?: number; + /** 瓒呮椂鏈嶅姟璐� */ + timeoutServiceFee?: number; settlementOrderStatus?: EnumTaskSettlementOrderStatus; /** 缁撶畻鍗曞悕绉� */ settlementOrderName?: string; @@ -5557,6 +5704,8 @@ interface GetSettlementTaskUsersQueryResultItem { /** 缁撶畻鍚嶅崟Id */ id?: string; + /** 浠诲姟浜哄憳Id */ + taskInfoUserId?: string; /** 鐢ㄦ埛淇℃伅Id */ userId?: string; /** 濮撳悕 */ @@ -5565,6 +5714,8 @@ identity?: string; /** 鎵嬫満鍙� */ contactPhoneNumber?: string; + /** 绱宸ユ椂 */ + totalWorkHours?: number; /** 鎵�灞為摱琛� */ bank?: string; /** 寮�鎴锋敮琛屽悕绉� */ @@ -6435,6 +6586,8 @@ bankBranch?: string; /** 鏀舵璐︽埛 */ receiveAccount?: string; + /** 绱宸ユ椂 */ + totalWorkHours?: number; /** 缁撶畻閲戦 */ settlementAmount?: number; /** 瀹炲彂閲戦 */ @@ -7121,8 +7274,10 @@ userName?: string; /** 鎵嬫満鍙� */ phoneNumber?: string; - /** 瀵嗙爜 */ + /** 瀵嗙爜锛堥�夊~ 濉簡灏辨敼涓嶅~灏变笉鏀癸級 */ password?: string; + /** 鎿嶄綔瀵嗙爜锛堥�夊~ 濉簡灏辨敼涓嶅~灏变笉鏀癸級 */ + operatorPassword?: string; /** 瑙掕壊Id */ roleIds?: string[]; status?: EnumUserStatus; diff --git a/packages/services/apiV2/user.ts b/packages/services/apiV2/user.ts index e62b980..eb29746 100644 --- a/packages/services/apiV2/user.ts +++ b/packages/services/apiV2/user.ts @@ -2,6 +2,36 @@ // @ts-ignore import { request } from '@/utils/request'; +/** 鐢熸垚鎿嶄綔浠ょ墝 POST /api/user/user/buildOperatorToken */ +export async function buildOperatorToken( + body: API.BuildOperatorTokenCommand, + options?: API.RequestConfig +) { + return request<API.BuildOperatorTokenCommandResult>('/api/user/user/buildOperatorToken', { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} + +/** 鏍¢獙鎿嶄綔浠ょ墝 POST /api/user/user/checkOperatorToken */ +export async function checkOperatorToken( + body: API.CheckOperatorTokenCommand, + options?: API.RequestConfig +) { + return request<boolean>('/api/user/user/checkOperatorToken', { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} + /** 鍒犻櫎鐢ㄦ埛閾惰鍗′俊鎭� DELETE /api/user/user/deletePersonalUserBankCard */ export async function deletePersonalUserBankCard( body: API.DeletePersonalUserBankCardCommand, -- Gitblit v1.9.1