From f95d3066203612a450e462edd679eb5a4973f35c Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期一, 10 十一月 2025 16:59:29 +0800
Subject: [PATCH] fix: bug

---
 apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue |  294 +++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 197 insertions(+), 97 deletions(-)

diff --git a/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue b/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
index 763c349..d7a1d9c 100644
--- a/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
@@ -1,72 +1,54 @@
 <template>
   <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
     <ContentScrollView style="background-color: transparent">
-      <Cell :title="'瀹㈡埧鏈嶅姟鍛�'" titleSize="large">
+      <TaskDetailView :detail="detail">
         <template #title-right>
-          <img :src="IconAttentioActive" class="taskDetail-attention-icon" />
+          <img
+            v-if="from === 'apply'"
+            :src="detail.isCollected ? IconAttentioActive : IconAttention"
+            class="taskDetail-attention-icon"
+            @click="handleAttention"
+          />
+          <div
+            v-if="from === 'sign'"
+            :style="{ color: GetPersonalApplyTaskInfosQueryStatusColor[detail.applyButton] }"
+          >
+            {{ GetTaskInfoQueryResultApplyButtonText[detail.applyButton] }}
+          </div>
+          <div
+            v-if="from === 'hire'"
+            :style="{ color: GetPersonalHireTaskInfosQueryStatusColor[detail.hireButton] }"
+          >
+            {{ GetTaskInfoQueryResultHireButtonText[detail.hireButton] }}
+          </div>
+          <div v-if="from === 'cancel'" :style="{ color: '#999999' }">宸插彇娑�</div>
         </template>
-        <div class="taskDetail-time">2025骞�2鏈�5鏃� 鑷� 2025骞�3鏈�5鏃�</div>
-        <div class="task-card-welfare-wrapper">
-          <div class="task-card-welfare-list">
-            <div class="task-card-welfare-list-item">鏃ョ粨</div>
-            <div class="task-card-welfare-list-item">鐢峰コ涓嶉檺</div>
-            <div class="task-card-welfare-list-item">鍖呬笁椁�</div>
-          </div>
-          <TaskPrice :value="212" />
-        </div>
-        <div class="taskDetail-address-wrapper">
-          <div class="taskDetail-address-title-wrapper">
-            <img :src="IconAttentioActive" class="taskDetail-address-title-icon" />
-            <div class="taskDetail-address-title">瀹佹尝鏌忔偊閰掑簵</div>
-          </div>
-          <div class="taskDetail-address-info-wrapper">
-            <div class="taskDetail-address-info">瀹佹尝甯傞劄宸炲尯涓滈挶婀栧ぇ鍫拌矾188鍙峰畞娉㈡煆鎮﹂厭搴�</div>
-            <RectRight :size="8" class="taskDetail-address-info-icon" />
-          </div>
-        </div>
-      </Cell>
-      <Cell :show-title="false">
-        <CellChunk title="绂忓埄淇℃伅">
-          <div class="taskDetail-welfare-list">
-            <TaskDetailWelfareItem />
-            <TaskDetailWelfareItem />
-            <TaskDetailWelfareItem />
-            <TaskDetailWelfareItem />
-            <TaskDetailWelfareItem />
-          </div>
-        </CellChunk>
-        <CellChunk title="鎶ュ悕鏉′欢">
-          <div class="taskDetail-limit-list">
-            <div class="taskDetail-limit-list-item">
-              <div class="taskDetail-limit-list-item-label">骞撮緞锛�</div>
-              <div class="taskDetail-limit-list-item-text">18-45宀�</div>
-            </div>
-            <div class="taskDetail-limit-list-item">
-              <div class="taskDetail-limit-list-item-label">鎬у埆锛�</div>
-              <div class="taskDetail-limit-list-item-text">涓嶉檺</div>
-            </div>
-            <div class="taskDetail-limit-list-item">
-              <div class="taskDetail-limit-list-item-label">璧勬牸璇佷功锛�</div>
-              <div class="taskDetail-limit-list-item-text">鍋ュ悍璇�</div>
-            </div>
-          </div>
-        </CellChunk>
-        <CellChunk title="鍙戝竷鑰呬俊鎭�">
-          <CompanyDesc @click="goCompanyDetail"></CompanyDesc>
-        </CellChunk>
-      </Cell>
-      <Cell>
-        <template #title>
-          <div class="safe-cell-title-wrapper">
-            <img :src="IconSafe" class="safe-cell-title-icon" />
-            <div class="safe-cell-title">瀹夊叏鎻愮ず</div>
-          </div>
+        <template #companyDesc>
+          <CellChunk title="鍙戝竷鑰呬俊鎭�">
+            <CompanyDesc
+              @click="goCompanyDetail"
+              :enterpriseName="detail?.enterpriseName ?? ''"
+              :taskCount="detail?.taskCount ?? 0"
+              :isReal="detail?.isReal ?? false"
+              :supplierEnterpriseName="detail?.supplierEnterpriseName ?? ''"
+            ></CompanyDesc>
+          </CellChunk>
         </template>
-        <div class="safe-cell-content">
-          璇ヤ俊鎭敱鐢ㄦ埛鑷富鍙戝竷锛屽閬囪櫄鍋囦俊鎭�佽瘓楠椼�佷紶閿�绛夎繚娉曡繚瑙勮涓猴紝璇风珛鍗�
-          <div class="safe-cell-content-btn" @click="goComplaint">鎶曡瘔涓炬姤</div>
-        </div>
-      </Cell>
+        <template #footer>
+          <Cell>
+            <template #title>
+              <div class="safe-cell-title-wrapper">
+                <img :src="IconSafe" class="safe-cell-title-icon" />
+                <div class="safe-cell-title">瀹夊叏鎻愮ず</div>
+              </div>
+            </template>
+            <div class="safe-cell-content">
+              璇ヤ俊鎭敱鐢ㄦ埛鑷富鍙戝竷锛屽閬囪櫄鍋囦俊鎭�佽瘓楠椼�佷紶閿�绛夎繚娉曡繚瑙勮涓猴紝璇风珛鍗�
+              <div class="safe-cell-content-btn" @click="goComplaint">鎶曡瘔涓炬姤</div>
+            </div>
+          </Cell>
+        </template>
+      </TaskDetailView>
     </ContentScrollView>
     <PageFooter>
       <PageFooterAction
@@ -75,8 +57,47 @@
         :isFlex="false"
         openType="share"
       ></PageFooterAction>
-      <PageFooterAction :icon="IconShare" text="鎵嬫満" :isFlex="false"></PageFooterAction>
-      <PageFooterBtn type="primary">鎶ュ悕</PageFooterBtn>
+      <PageFooterAction
+        :icon="IconPhone"
+        text="鎵嬫満"
+        :isFlex="false"
+        @click="handleCall"
+      ></PageFooterAction>
+      <PageFooterBtn
+        v-if="from === 'sign' && !!detail?.applyButton"
+        type="primary"
+        :disabled="detail?.applyButton === GetTaskInfoQueryResultApplyButton.WaitHire"
+        @click="handleSign"
+      >
+        {{ GetTaskInfoQueryResultApplyButtonText[detail.applyButton] }}
+      </PageFooterBtn>
+      <PageFooterBtn
+        v-if="
+          from === 'hire' &&
+          !(
+            isContainCheckIn &&
+            detail?.hireButton === GetTaskInfoQueryResultHireButton.ApplyCheckReceive
+          )
+        "
+        type="primary"
+        :disabled="detail?.hireButton !== GetTaskInfoQueryResultHireButton.ApplyCheckReceive"
+        @click="handleHire"
+      >
+        {{ GetTaskInfoQueryResultHireButtonText[detail.hireButton] }}
+      </PageFooterBtn>
+      <template v-if="from === 'apply'">
+        <PageFooterBtn
+          v-if="detail?.releaseStatus === EnumTaskReleaseStatus.InProcess"
+          type="primary"
+          @click="handleApply"
+          :disabled="!!detail?.hireStatus"
+          >{{ `鎶ュ悕锛�${detail?.applyCount ?? 0}浜哄凡鎶ュ悕锛塦 }}</PageFooterBtn
+        >
+
+        <PageFooterBtn v-if="detail.releaseStatus === EnumTaskReleaseStatus.Stopped" color="#999999"
+          >宸插仠姝�</PageFooterBtn
+        >
+      </template>
     </PageFooter>
   </LoadingLayout>
 </template>
@@ -84,57 +105,136 @@
 <script setup lang="ts">
 import Taro from '@tarojs/taro';
 import { useQuery } from '@tanstack/vue-query';
-import * as orderServices from '@12333/services/api/Order';
+import * as taskServices from '@12333/services/apiV2/task';
+import * as taskUserServices from '@12333/services/apiV2/taskUser';
 import { useToggle } from 'senin-mini/hooks';
-import { TaskPrice } from '@12333/components';
+import { TaskDetailView, Cell, CellChunk } from '@12333/components';
 import IconAttention from '@/assets/task/icon-attention.png';
 import IconAttentioActive from '@/assets/task/icon-attention-active.png';
-import { RectRight } from '@nutui/icons-vue-taro';
 import IconShare from '@/assets/task/icon-share.png';
+import IconPhone from '@/assets/task/icon-phone.png';
 import IconSafe from '@/assets/task/icon-safe.png';
 import './taskDetail.scss';
-import TaskDetailWelfareItem from '../components/TaskDetailWelfareItem.vue';
 import CompanyDesc from '../components/CompanyDesc.vue';
+import { Message } from '@12333/utils';
+import {
+  EnumTaskReleaseStatus,
+  GetPersonalApplyTaskInfosQueryStatusColor,
+  GetTaskInfoQueryResultApplyButtonText,
+  GetPersonalHireTaskInfosQueryStatusColor,
+  GetTaskInfoQueryResultHireButtonText,
+  GetTaskInfoQueryResultHireButton,
+  GetTaskInfoQueryResultApplyButton,
+  EnumTaskCheckReceiveMethod,
+} from '@12333/constants';
+import { useAccessLogin } from '@/hooks';
+import { useTaskInfo } from '@12333/hooks';
+import _ from 'lodash';
 
 defineOptions({
   name: 'InnerPage',
 });
 
+/**
+ * TODO 缂哄皯 鎶曡瘔涓炬姤鎺ュ彛
+ */
+const { userDetail } = useUser();
 const router = Taro.useRouter();
-const taskId = router.params?.id ?? '';
+const id = router.params?.id ?? '';
+const from = router.params?.from ?? '';
 
-const {
-  isLoading,
-  isError,
-  data: detail,
-  refetch,
-} = useQuery({
-  queryKey: ['orderServices/getOrdeForDetail', taskId],
-  queryFn: async () => {
-    return await orderServices.getOrdeForDetail(
-      { id: taskId },
-      {
-        showLoading: false,
-      }
-    );
-  },
-  placeholderData: () => ({} as API.OrderInfoDto),
-  onSuccess(data) {
-    if (data.isExistTradeChatRecord) setTrue();
-  },
-});
+const { isLoading, isError, detail, refetch, isContainCheckIn } = useTaskInfo({ id });
 
 const { isCollapse, setTrue } = useToggle();
 
-function goComplaint() {
+const goComplaint = useAccessLogin(() => {
   Taro.navigateTo({
-    url: `${RouterPath.complaint}?id=${taskId}`,
+    url: `${RouterPath.complaint}?id=${id}`,
+  });
+});
+
+const goCompanyDetail = useAccessLogin(() => {
+  if (detail.value.enterpriseId) {
+    Taro.navigateTo({
+      url: `${RouterPath.companyDetail}?id=${detail.value.enterpriseId}&supplierEnterpriseId=${
+        detail.value.supplierEnterpriseId ?? ''
+      }`,
+    });
+  }
+});
+
+const handleApply = _.debounce(
+  useAccessReal(
+    async () => {
+      try {
+        let params: API.ApplyTaskCommand = {
+          ids: [id],
+        };
+        let res = await taskUserServices.applyTask(params);
+        if (res) {
+          Message.success('鎶ュ悕鎴愬姛');
+          refetch({ type: 'inactive' });
+        }
+      } catch (error) {}
+    },
+    { message: '瀹炲悕鎴愬姛鍚庢墠鍙姤鍚嶏紝璇峰墠寰�瀹炲悕璁よ瘉' }
+  ),
+  1000,
+  {
+    leading: true,
+    trailing: false,
+  }
+);
+
+const handleAttention = useAccessLogin(async () => {
+  try {
+    // await Message.confirm({
+    //   message: `纭畾${detail.value?.isCollected ? '鍙栨秷鏀惰棌' : '鏀惰棌'}鍚楋紵`,
+    // });
+    let params: API.CollectTaskCommand = {
+      ids: [id],
+      isCollect: !detail.value?.isCollected,
+    };
+    let res = await taskUserServices.collectTask(params);
+    if (res) {
+      refetch({ type: 'inactive' });
+      // Message.success('鎿嶄綔鎴愬姛', {
+      //   onClosed() {
+      //     refetch({ type: 'inactive' });
+      //   },
+      // });
+    }
+  } catch (error) {}
+});
+
+const handleCall = useAccessLogin(() => {
+  if (detail.value.contactPhoneNumber) {
+    Taro.makePhoneCall({
+      phoneNumber: detail.value.contactPhoneNumber,
+    });
+  }
+});
+
+function handleHire() {
+  Taro.navigateTo({
+    url: `${RouterPath.taskSubmitCheck}?id=${id}`,
+  });
+}
+const handleSign = useAccessReal(() => {
+  Taro.navigateTo({
+    url: `${RouterPath.mineAgreementSignDetail}?id=${detail.value?.enterpriseEmployeeId}`,
+  });
+});
+
+function goMap() {
+  Taro.openLocation({
+    latitude: detail.value?.latitude,
+    longitude: detail.value?.longitude,
+    scale: 18,
   });
 }
 
-function goCompanyDetail() {
-  Taro.navigateTo({
-    url: `${RouterPath.companyDetail}?id=${taskId}`,
-  });
-}
+Taro.useDidShow(() => {
+  refetch();
+});
 </script>

--
Gitblit v1.9.1