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 |  297 +++++++++++++++++++++++++++++++++++------------------------
 1 files changed, 176 insertions(+), 121 deletions(-)

diff --git a/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue b/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
index 1e83219..d7a1d9c 100644
--- a/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
@@ -1,97 +1,54 @@
 <template>
   <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
     <ContentScrollView style="background-color: transparent">
-      <Cell :title="detail?.name ?? ''" titleSize="large">
+      <TaskDetailView :detail="detail">
         <template #title-right>
           <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">
-          {{ dayjs(detail?.beginTime).format('YYYY骞碝M鏈圖D鏃�') }} 鑷�
-          {{ dayjs(detail?.endTime).format('YYYY骞碝M鏈圖D鏃�') }}
-        </div>
-        <div class="task-card-welfare-wrapper">
-          <div class="task-card-welfare-list">
-            <div class="task-card-welfare-list-item">
-              {{ EnumSettlementCycleText[detail.settlementCycle] }}
-            </div>
-            <!-- <div class="task-card-welfare-list-item">
-              {{ TaskUtils.getGenderText(detail.genderLimit) }}
-            </div> -->
-          </div>
-          <TaskPrice
-            :value="toThousand(detail.serviceFee ?? 0)"
-            :unit="BillingMethodEnumUnit[detail.billingMethod]"
-          />
-        </div>
-        <div class="taskDetail-address-wrapper">
-          <div class="taskDetail-address-title-wrapper">
-            <img :src="IconLocaltion" class="taskDetail-address-title-icon" />
-            <div class="taskDetail-address-title">{{ detail?.addressName ?? '' }}</div>
-          </div>
-          <div class="taskDetail-address-info-wrapper">
-            <div class="taskDetail-address-info">{{ detail?.addressDetail ?? '' }}</div>
-            <RectRight :size="8" class="taskDetail-address-info-icon" />
-          </div>
-        </div>
-      </Cell>
-      <Cell :show-title="false">
-        <CellChunk title="绂忓埄淇℃伅">
-          <div class="taskDetail-welfare-list">
-            <TaskDetailWelfareItem
-              v-for="benefit in detail.benefits"
-              :key="benefit.benefitCode"
-              :icon="setOSSLink(benefit.benefitField2)"
-              :text="benefit.benefitContent"
-            />
-          </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">
-                {{ detail.ageMinLimit ?? 0 }}-{{ detail.ageMaxLimit ?? 0 }}宀�
-              </div>
-            </div>
-            <div class="taskDetail-limit-list-item">
-              <div class="taskDetail-limit-list-item-label">鎬у埆锛�</div>
-              <div class="taskDetail-limit-list-item-text">
-                {{ TaskUtils.getGenderText(detail.genderLimit) }}
-              </div>
-            </div>
-            <div class="taskDetail-limit-list-item">
-              <template v-if="detail?.credentialLimits?.length > 0">
-                <div class="taskDetail-limit-list-item-label">璧勬牸璇佷功锛�</div>
-                <div class="taskDetail-limit-list-item-text">
-                  {{ TaskUtils.getCredentialLimit(detail?.credentialLimits) }}
-                </div>
-              </template>
-            </div>
-          </div>
-        </CellChunk>
-        <CellChunk title="鍙戝竷鑰呬俊鎭�">
-          <CompanyDesc
-            @click="goCompanyDetail"
-            :enterpriseName="detail?.enterpriseName ?? ''"
-            :taskCount="detail?.taskCount ?? 0"
-          ></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
@@ -100,13 +57,47 @@
         :isFlex="false"
         openType="share"
       ></PageFooterAction>
-      <PageFooterAction :icon="IconPhone" text="鎵嬫満" :isFlex="false"></PageFooterAction>
-      <PageFooterBtn v-if="detail.releaseStatus === EnumTaskReleaseStatus.InProcess" type="primary"
-        >鎶ュ悕锛坽{ detail.applyCount }}浜哄凡鎶ュ悕锛�</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"
       >
-      <PageFooterBtn v-if="detail.releaseStatus === EnumTaskReleaseStatus.Stopped" color="#999999"
-        >宸插仠姝�</PageFooterBtn
+        {{ 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>
@@ -115,71 +106,135 @@
 import Taro from '@tarojs/taro';
 import { useQuery } from '@tanstack/vue-query';
 import * as taskServices from '@12333/services/apiV2/task';
+import * as taskUserServices from '@12333/services/apiV2/taskUser';
 import { useToggle } from 'senin-mini/hooks';
-import { TaskPrice, TaskDetailWelfareItem } 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 IconLocaltion from '@/assets/task/icon-localtion.png';
 import './taskDetail.scss';
 import CompanyDesc from '../components/CompanyDesc.vue';
-import dayjs from 'dayjs';
-import { TaskUtils, toThousand, setOSSLink } from '@12333/utils';
+import { Message } from '@12333/utils';
 import {
-  EnumSettlementCycleText,
-  BillingMethodEnumUnit,
   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 缂哄皯 鎵嬫満 鎶曡瘔涓炬姤鎺ュ彛 鎶ュ悕鎺ュ彛
+ * 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: ['taskServices/getTaskInfo', taskId],
-  queryFn: async () => {
-    return await taskServices.getTaskInfo(
-      { id: taskId },
-      {
-        showLoading: false,
-      }
-    );
-  },
-  placeholderData: () => ({} as API.GetTaskInfoQueryResult),
-  onSuccess(data) {
-    // if (data.isExistTradeChatRecord) setTrue();
-  },
-});
+const { isLoading, isError, detail, refetch, isContainCheckIn } = useTaskInfo({ id });
 
 const { isCollapse, setTrue } = useToggle();
 
 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}`,
+      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,
+  });
+}
+
+Taro.useDidShow(() => {
+  refetch();
+});
 </script>

--
Gitblit v1.9.1