From c4a05d1cd214627d1f62a71b72f7f32087cee92d Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期三, 22 十月 2025 19:50:55 +0800
Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/flexJobMiniApp

---
 apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue                                 |    3 
 apps/cMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.config.ts |    3 
 apps/cMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.vue       |   13 +++
 apps/cMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/InnerPage.vue                          |  105 ++++++++++++++++++++++++++
 packages/components/src/Card/TaskCheckPersonalView.vue                                                 |    0 
 apps/cMiniApp/src/pages/task/InnerPage.vue                                                             |   29 +++++--
 apps/cMiniApp/project.private.config.json                                                              |    4 
 apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue                                        |   50 ++++++++----
 apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue                                       |   17 +++-
 packages/components/src/index.ts                                                                       |    2 
 apps/cMiniApp/src/constants/router.ts                                                                  |    1 
 apps/cMiniApp/src/app.config.ts                                                                        |    1 
 packages/components/src/Card/TaskCheckHistoryCard.vue                                                  |    0 
 apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/InnerPage.vue                          |    3 
 apps/bMiniApp/src/subpackages/businessCard/components/BusinessCardDetailInfoView.vue                   |    2 
 15 files changed, 196 insertions(+), 37 deletions(-)

diff --git a/apps/bMiniApp/src/subpackages/businessCard/components/BusinessCardDetailInfoView.vue b/apps/bMiniApp/src/subpackages/businessCard/components/BusinessCardDetailInfoView.vue
index dc7b383..5ab8a2b 100644
--- a/apps/bMiniApp/src/subpackages/businessCard/components/BusinessCardDetailInfoView.vue
+++ b/apps/bMiniApp/src/subpackages/businessCard/components/BusinessCardDetailInfoView.vue
@@ -27,13 +27,13 @@
 </template>
 
 <script setup lang="ts">
-import TaskCheckPersonalView from '../../task/components/TaskCheckPersonalView.vue';
 import BusinessCardDetailItem from './BusinessCardDetailItem.vue';
 import IconWechat from '@/assets/businessCard/icon-wechat.png';
 import IconPosition from '@/assets/businessCard/icon-position.png';
 import IconEmail from '@/assets/businessCard/icon-email.png';
 import IconCompany from '@/assets/businessCard/icon-company.png';
 import IconAddress from '@/assets/businessCard/icon-address.png';
+import { TaskCheckPersonalView } from '@12333/components';
 
 defineOptions({
   name: 'BusinessCardDetailInfoView',
diff --git a/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue b/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue
index c74a2cc..02cda1e 100644
--- a/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue
+++ b/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue
@@ -27,9 +27,20 @@
           <div v-else class="task-check-card-phone-status" :style="{ color: Colors.Success }">
             {{ EnumTaskCheckReceiveStatusText[checkReceiveStatus] }}
           </div> -->
-          <nut-button type="primary" class="task-check-card-phone-btn" @click.stop="handleMore"
-            >鎿嶄綔</nut-button
+          <template
+            v-if="props.submitCheckReceiveStatus !== EnumTaskUserSubmitCheckReceiveStatus.Fail"
           >
+            <nut-button
+              v-if="!checkInTime || !checkOutTime"
+              type="primary"
+              class="task-check-card-phone-btn"
+              @click.stop="handleMore"
+              >鎿嶄綔</nut-button
+            >
+            <div v-else class="task-check-card-phone-status" :style="{ color: Colors.Success }">
+              {{ EnumTaskCheckReceiveStatusText[checkReceiveStatus] }}
+            </div>
+          </template>
         </template>
         <template v-else>
           <nut-button
@@ -48,14 +59,16 @@
 </template>
 
 <script setup lang="ts">
-import TaskCheckPersonalView from './TaskCheckPersonalView.vue';
 import {
   Colors,
   EnumUserGender,
   EnumTaskCheckReceiveStatus,
   EnumTaskCheckReceiveStatusText,
   EnumTaskCheckReceiveMethod,
+  EnumGetCheckReceiveTasksQueryResultItemCheckStatus,
+  EnumTaskUserSubmitCheckReceiveStatus,
 } from '@12333/constants';
+import { TaskCheckPersonalView } from '@12333/components';
 import { CheckInOrOutEventEnum } from '../constants';
 import { Portal } from 'senin-mini/components';
 import { ActionSheet } from '@nutui/nutui-taro';
@@ -82,32 +95,35 @@
   /** 绛惧嚭鏃堕棿 */
   checkOutTime?: string;
   checkReceiveMethod?: EnumTaskCheckReceiveMethod;
+
+  submitCheckReceiveStatus?: EnumTaskUserSubmitCheckReceiveStatus;
 };
 
 const props = withDefaults(defineProps<Props>(), {});
 
 const emit = defineEmits<{
   (e: 'checkReceive'): void;
-  (e: 'checkInOrOut', ev: CheckInOrOutEventEnum): void;
+  (e: 'checkInOrOut', ev: EnumTaskUserSubmitCheckReceiveStatus): void;
 }>();
 
 const menuList = computed(() => {
   let _menuList = [];
   if (props.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn) {
-    _menuList.push(
-      {
+    _menuList.push({
+      name: '鏈埌宀�',
+      value: ManageActions.OutWork,
+    });
+    if (!props.checkInTime) {
+      _menuList.push({
         name: '绛惧埌',
         value: ManageActions.CheckIn,
-      },
-      {
+      });
+    } else if (!props.checkOutTime) {
+      _menuList.push({
         name: '绛惧嚭',
         value: ManageActions.CheckOut,
-      },
-      {
-        name: '鏈埌宀�',
-        value: ManageActions.OutWork,
-      }
-    );
+      });
+    }
   }
 
   return _menuList;
@@ -138,13 +154,13 @@
 function handleEmit(action: { name: string; value: number }) {
   switch (action.value) {
     case ManageActions.CheckIn:
-      emit('checkInOrOut', CheckInOrOutEventEnum.CheckIn);
+      emit('checkInOrOut', EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive);
       break;
     case ManageActions.CheckOut:
-      emit('checkInOrOut', CheckInOrOutEventEnum.CheckOut);
+      emit('checkInOrOut', EnumTaskUserSubmitCheckReceiveStatus.Success);
       break;
     case ManageActions.OutWork:
-      emit('checkInOrOut', CheckInOrOutEventEnum.CheckOut);
+      emit('checkInOrOut', EnumTaskUserSubmitCheckReceiveStatus.Fail);
       break;
   }
 }
diff --git a/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
index d7cc662..77591a8 100644
--- a/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
@@ -24,6 +24,7 @@
           :contactPhoneNumber="item.contactPhoneNumber"
           :checkReceiveStatus="item.checkReceiveStatus"
           :checkReceiveMethod="detail?.checkReceiveMethod"
+          :submitCheckReceiveStatus="item.submitCheckReceiveStatus"
           @checkReceive="goTaskDetail(item)"
           @checkInOrOut="(ev) => checkReceiveTask(ev, item.id)"
         />
@@ -38,7 +39,11 @@
 import { useInfiniteLoading } from '@12333/hooks';
 import TaskCheckCard from '../components/TaskCheckCard.vue';
 import { MyTaskCard } from '@12333/components';
-import { EnumTaskCheckReceiveMethod, EnumTaskCheckReceiveStatus } from '@12333/constants';
+import {
+  EnumTaskCheckReceiveMethod,
+  EnumTaskCheckReceiveStatus,
+  EnumTaskUserSubmitCheckReceiveStatus,
+} from '@12333/constants';
 import { Message, setOSSLink } from '@12333/utils';
 import dayjs from 'dayjs';
 import { CheckInOrOutEventEnum } from '../constants';
@@ -95,16 +100,20 @@
   }
 }
 
-async function checkReceiveTask(ev: CheckInOrOutEventEnum, taskInfoUserId: string) {
+async function checkReceiveTask(ev: EnumTaskUserSubmitCheckReceiveStatus, taskInfoUserId: string) {
   try {
     let params: API.CheckReceiveTaskCommand = {
       taskInfoUserId: taskInfoUserId,
       date: dayjs(date).format('YYYY-MM-DD'),
     };
-    if (ev === CheckInOrOutEventEnum.CheckIn) {
+    if (ev === EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive) {
       params.checkInTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
-    } else if (ev === CheckInOrOutEventEnum.CheckOut) {
+      params.checkReceiveStatus = ev;
+    } else if (ev === EnumTaskUserSubmitCheckReceiveStatus.Success) {
       params.checkOutTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      params.checkReceiveStatus = ev;
+    } else if (ev === EnumTaskUserSubmitCheckReceiveStatus.Fail) {
+      params.checkReceiveStatus = ev;
     }
     let res = await taskCheckReceiveServices.checkReceiveTask(params);
     if (res) {
diff --git a/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue
index 0711fb0..c2e2779 100644
--- a/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue
@@ -36,8 +36,7 @@
 import Taro from '@tarojs/taro';
 import { useQuery } from '@tanstack/vue-query';
 import * as taskCheckReceiveServices from '@12333/services/apiV2/taskCheckReceive';
-import TaskCheckPersonalView from '../components/TaskCheckPersonalView.vue';
-import { TaskCheckFileCard } from '@12333/components';
+import { TaskCheckFileCard, TaskCheckPersonalView } from '@12333/components';
 import { Colors, EnumTaskUserSubmitCheckReceiveStatus } from '@12333/constants';
 import { Message, setOSSLink } from '@12333/utils';
 import dayjs from 'dayjs';
diff --git a/apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/InnerPage.vue
index aeece0f..0bb2284 100644
--- a/apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/InnerPage.vue
@@ -57,8 +57,7 @@
 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 { ProTabs, ProTabPane, TaskCheckHistoryCard } from '@12333/components';
 import {
   EnumTaskUserSubmitCheckHistoryTypeText,
   EnumTaskUserSubmitCheckHistoryTypeColor,
diff --git a/apps/cMiniApp/project.private.config.json b/apps/cMiniApp/project.private.config.json
index 81e4067..35a4f34 100644
--- a/apps/cMiniApp/project.private.config.json
+++ b/apps/cMiniApp/project.private.config.json
@@ -26,8 +26,8 @@
                     "name": "浠诲姟",
                     "pathName": "pages/task/task",
                     "query": "",
-                    "scene": null,
-                    "launchMode": "default"
+                    "launchMode": "default",
+                    "scene": null
                 },
                 {
                     "name": "绠�鍘嗚缁嗕俊鎭�",
diff --git a/apps/cMiniApp/src/app.config.ts b/apps/cMiniApp/src/app.config.ts
index fa41cff..d661c02 100644
--- a/apps/cMiniApp/src/app.config.ts
+++ b/apps/cMiniApp/src/app.config.ts
@@ -120,6 +120,7 @@
         'companyDetail/companyDetail',
         'taskSubmitCheck/taskSubmitCheck',
         'taskCheckDetail/taskCheckDetail',
+        'taskUserSubmitCheckHistories/taskUserSubmitCheckHistories',
       ],
     },
     {
diff --git a/apps/cMiniApp/src/constants/router.ts b/apps/cMiniApp/src/constants/router.ts
index ad70779..60edb1b 100644
--- a/apps/cMiniApp/src/constants/router.ts
+++ b/apps/cMiniApp/src/constants/router.ts
@@ -14,6 +14,7 @@
   companyDetail = '/subpackages/task/companyDetail/companyDetail',
   taskSubmitCheck = '/subpackages/task/taskSubmitCheck/taskSubmitCheck',
   taskCheckDetail = '/subpackages/task/taskCheckDetail/taskCheckDetail',
+  taskUserSubmitCheckHistories = '/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories',
 
   // userInfo = '/subpackages/setting/userInfo/userInfo',
   // setting = '/subpackages/setting/setting/setting',
diff --git a/apps/cMiniApp/src/pages/task/InnerPage.vue b/apps/cMiniApp/src/pages/task/InnerPage.vue
index 4d79b33..6be8d8a 100644
--- a/apps/cMiniApp/src/pages/task/InnerPage.vue
+++ b/apps/cMiniApp/src/pages/task/InnerPage.vue
@@ -28,7 +28,10 @@
           :addressName="item.addressName"
           :begin-time="item.beginTime"
           :end-time="item.endTime"
-          showActions
+          :showActions="
+            item.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn &&
+            queryState.checkReceiveStatus === EnumTaskCheckReceiveStatus.Completed
+          "
           @click="goSubmitTaskDetail(item)"
         />
       </template>
@@ -40,7 +43,7 @@
 import { MyTaskCard, ProTabs, ProTabPane, Calendar } from '@12333/components';
 import Taro from '@tarojs/taro';
 import { useCheckReceiveTasks, useTaskList } from '@12333/hooks';
-import { EnumTaskCheckReceiveStatus } from '@12333/constants';
+import { EnumTaskCheckReceiveStatus, EnumTaskCheckReceiveMethod } from '@12333/constants';
 
 defineOptions({
   name: 'InnerPage',
@@ -54,13 +57,21 @@
       url: `${RouterPath.taskSubmitCheck}?id=${item.id}&date=${queryState.date}`,
     });
   }
-  if (
-    Number(queryState.checkReceiveStatus) === EnumTaskCheckReceiveStatus.WaitCheckReceive ||
-    Number(queryState.checkReceiveStatus) === EnumTaskCheckReceiveStatus.Completed
-  ) {
-    Taro.navigateTo({
-      url: `${RouterPath.taskCheckDetail}?id=${item.id}`,
-    });
+  if (item.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn) {
+    if (Number(queryState.checkReceiveStatus) === EnumTaskCheckReceiveStatus.Completed) {
+      Taro.navigateTo({
+        url: `${RouterPath.taskUserSubmitCheckHistories}?id=${item.id}&date=${queryState.date}`,
+      });
+    }
+  } else {
+    if (
+      Number(queryState.checkReceiveStatus) === EnumTaskCheckReceiveStatus.WaitCheckReceive ||
+      Number(queryState.checkReceiveStatus) === EnumTaskCheckReceiveStatus.Completed
+    ) {
+      Taro.navigateTo({
+        url: `${RouterPath.taskCheckDetail}?id=${item.id}`,
+      });
+    }
   }
 }
 </script>
diff --git a/apps/cMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/InnerPage.vue b/apps/cMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/InnerPage.vue
new file mode 100644
index 0000000..0bb2284
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/InnerPage.vue
@@ -0,0 +1,105 @@
+<template>
+  <LoadingLayout>
+    <ContentView>
+      <ChunkTitle :title="title" />
+    </ContentView>
+    <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>
+    <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 { ProTabs, ProTabPane, TaskCheckHistoryCard } 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/cMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.config.ts b/apps/cMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.config.ts
new file mode 100644
index 0000000..305fdb1
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.config.ts
@@ -0,0 +1,3 @@
+export default definePageConfig({
+  disableScroll: true,
+});
diff --git a/apps/cMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.vue b/apps/cMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.vue
new file mode 100644
index 0000000..5ff25c8
--- /dev/null
+++ b/apps/cMiniApp/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/apps/bMiniApp/src/subpackages/task/components/TaskCheckHistoryCard.vue b/packages/components/src/Card/TaskCheckHistoryCard.vue
similarity index 100%
rename from apps/bMiniApp/src/subpackages/task/components/TaskCheckHistoryCard.vue
rename to packages/components/src/Card/TaskCheckHistoryCard.vue
diff --git a/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue b/packages/components/src/Card/TaskCheckPersonalView.vue
similarity index 100%
rename from apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue
rename to packages/components/src/Card/TaskCheckPersonalView.vue
diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts
index 40631bb..1656d39 100644
--- a/packages/components/src/index.ts
+++ b/packages/components/src/index.ts
@@ -33,6 +33,8 @@
 export { default as BindWalletView } from './Card/BindWalletView.vue';
 export { default as TaskPrice } from './Card/TaskPrice.vue';
 export { default as TaskDetailWelfareItem } from './Card/TaskDetailWelfareItem.vue';
+export { default as TaskCheckPersonalView } from './Card/TaskCheckPersonalView.vue';
+export { default as TaskCheckHistoryCard } from './Card/TaskCheckHistoryCard.vue';
 export { default as FlexJobTopView } from './Card/FlexJobTopView.vue';
 export { default as QueryMenuView } from './Menu/QueryMenuView.vue';
 export { default as QueryMenuItem } from './Menu/QueryMenuItem.vue';

--
Gitblit v1.9.1