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