From 2a4b768f52d9556a18a3190c5e6390b86abb37d8 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期三, 13 八月 2025 10:16:04 +0800
Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/flexJobMiniApp

---
 apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue |  209 ++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 171 insertions(+), 38 deletions(-)

diff --git a/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue b/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
index 7b64f7d..0efdd59 100644
--- a/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
@@ -1,26 +1,39 @@
 <template>
   <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
     <ContentScrollView style="background-color: transparent">
-      <Cell :title="'瀹㈡埧鏈嶅姟鍛�'" titleSize="large">
+      <Cell :title="detail?.name ?? ''" titleSize="large">
         <template #title-right>
-          <img :src="IconAttentioActive" class="taskDetail-attention-icon" />
+          <img
+            :src="detail.isCollected ? IconAttentioActive : IconAttention"
+            class="taskDetail-attention-icon"
+            @click="handleAttention"
+          />
         </template>
-        <div class="taskDetail-time">2025骞�2鏈�5鏃� 鑷� 2025骞�3鏈�5鏃�</div>
+        <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">鏃ョ粨</div>
-            <div class="task-card-welfare-list-item">鐢峰コ涓嶉檺</div>
-            <div class="task-card-welfare-list-item">鍖呬笁椁�</div>
+            <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="212" />
+          <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">瀹佹尝鏌忔偊閰掑簵</div>
+            <div class="taskDetail-address-title">{{ detail?.addressName ?? '' }}</div>
           </div>
           <div class="taskDetail-address-info-wrapper">
-            <div class="taskDetail-address-info">瀹佹尝甯傞劄宸炲尯涓滈挶婀栧ぇ鍫拌矾188鍙峰畞娉㈡煆鎮﹂厭搴�</div>
+            <div class="taskDetail-address-info">{{ detail?.addressDetail ?? '' }}</div>
             <RectRight :size="8" class="taskDetail-address-info-icon" />
           </div>
         </div>
@@ -28,31 +41,44 @@
       <Cell :show-title="false">
         <CellChunk title="绂忓埄淇℃伅">
           <div class="taskDetail-welfare-list">
-            <TaskDetailWelfareItem />
-            <TaskDetailWelfareItem />
-            <TaskDetailWelfareItem />
-            <TaskDetailWelfareItem />
-            <TaskDetailWelfareItem />
+            <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">18-45宀�</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">涓嶉檺</div>
+              <div class="taskDetail-limit-list-item-text">
+                {{ TaskUtils.getGenderText(detail.genderLimit) }}
+              </div>
             </div>
             <div class="taskDetail-limit-list-item">
-              <div class="taskDetail-limit-list-item-label">璧勬牸璇佷功锛�</div>
-              <div class="taskDetail-limit-list-item-text">鍋ュ悍璇�</div>
+              <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"></CompanyDesc>
+          <CompanyDesc
+            @click="goCompanyDetail"
+            :enterpriseName="detail?.enterpriseName ?? ''"
+            :taskCount="detail?.taskCount ?? 0"
+          ></CompanyDesc>
         </CellChunk>
       </Cell>
       <Cell>
@@ -75,8 +101,53 @@
         :isFlex="false"
         openType="share"
       ></PageFooterAction>
-      <PageFooterAction :icon="IconPhone" text="鎵嬫満" :isFlex="false"></PageFooterAction>
-      <PageFooterBtn type="primary">鎶ュ悕锛�5浜哄凡鎶ュ悕锛�</PageFooterBtn>
+      <PageFooterAction
+        :icon="IconPhone"
+        text="鎵嬫満"
+        :isFlex="false"
+        @click="handleCall"
+      ></PageFooterAction>
+      <template v-if="from === 'mine'">
+        <PageFooterBtn
+          v-if="detail.applyButton === GetTaskInfoQueryResultApplyButton.WaitHire"
+          color="#999999"
+          disabled
+          >寰呯‘璁�</PageFooterBtn
+        >
+        <!-- <PageFooterBtn
+        v-if="detail.applyButton === GetTaskInfoQueryResultApplyButton.WaitSignContract"
+        >鍘荤绾�</PageFooterBtn
+      > -->
+        <PageFooterBtn
+          v-if="detail.hireButton === GetTaskInfoQueryResultHireButton.InProcess"
+          color="#999999"
+          disabled
+          >杩涜涓�</PageFooterBtn
+        >
+        <!-- <PageFooterBtn
+        v-if="detail.hireButton === GetTaskInfoQueryResultHireButton.ApplyCheckReceive"
+        >鐢宠楠屾敹</PageFooterBtn
+      > -->
+        <PageFooterBtn
+          v-if="detail.hireButton === GetTaskInfoQueryResultHireButton.Completed"
+          color="#999999"
+          disabled
+          >宸插畬鎴�</PageFooterBtn
+        >
+      </template>
+      <template v-else>
+        <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,9 +155,10 @@
 <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 { TaskPrice, TaskDetailWelfareItem } 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';
@@ -95,15 +167,30 @@
 import IconSafe from '@/assets/task/icon-safe.png';
 import IconLocaltion from '@/assets/task/icon-localtion.png';
 import './taskDetail.scss';
-import TaskDetailWelfareItem from '../components/TaskDetailWelfareItem.vue';
 import CompanyDesc from '../components/CompanyDesc.vue';
+import dayjs from 'dayjs';
+import { TaskUtils, toThousand, setOSSLink, Message } from '@12333/utils';
+import {
+  EnumSettlementCycleText,
+  BillingMethodEnumUnit,
+  EnumTaskReleaseStatus,
+  EnumTaskUserHireStatus,
+  GetTaskInfoQueryResultApplyButton,
+  GetTaskInfoQueryResultHireButton,
+} from '@12333/constants';
+import { useAccessLogin } from '@/hooks';
 
 defineOptions({
   name: 'InnerPage',
 });
 
+/**
+ * TODO 缂哄皯 鎵嬫満 鎶曡瘔涓炬姤鎺ュ彛 鎶ュ悕鎺ュ彛
+ */
+
 const router = Taro.useRouter();
-const taskId = router.params?.id ?? '';
+const id = router.params?.id ?? '';
+const from = router.params?.from ?? '';
 
 const {
   isLoading,
@@ -111,32 +198,78 @@
   data: detail,
   refetch,
 } = useQuery({
-  queryKey: ['orderServices/getOrdeForDetail', taskId],
+  queryKey: ['taskServices/getTaskInfo', id],
   queryFn: async () => {
-    return await orderServices.getOrdeForDetail(
-      { id: taskId },
+    return await taskServices.getTaskInfo(
+      { id: id },
       {
         showLoading: false,
       }
     );
   },
-  placeholderData: () => ({} as API.OrderInfoDto),
+  placeholderData: () => ({} as API.GetTaskInfoQueryResult),
   onSuccess(data) {
-    if (data.isExistTradeChatRecord) setTrue();
+    // if (data.isExistTradeChatRecord) setTrue();
   },
 });
 
 const { isCollapse, setTrue } = useToggle();
 
-function goComplaint() {
+const goComplaint = useAccessLogin(() => {
   Taro.navigateTo({
-    url: `${RouterPath.complaint}?id=${taskId}`,
+    url: `${RouterPath.complaint}?id=${id}`,
   });
-}
+});
 
-function goCompanyDetail() {
-  Taro.navigateTo({
-    url: `${RouterPath.companyDetail}?id=${taskId}`,
-  });
-}
+const goCompanyDetail = useAccessLogin(() => {
+  if (detail.value.enterpriseId) {
+    Taro.navigateTo({
+      url: `${RouterPath.companyDetail}?id=${detail.value.enterpriseId}`,
+    });
+  }
+});
+
+const handleApply = useAccessLogin(async () => {
+  try {
+    let params: API.ApplyTaskCommand = {
+      ids: [id],
+    };
+    let res = await taskUserServices.applyTask(params);
+    if (res) {
+      Message.success('鎶ュ悕鎴愬姛', {
+        onClosed() {
+          refetch({ type: 'inactive' });
+        },
+      });
+    }
+  } catch (error) {}
+});
+
+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) {
+      Message.success('鎿嶄綔鎴愬姛', {
+        onClosed() {
+          refetch({ type: 'inactive' });
+        },
+      });
+    }
+  } catch (error) {}
+});
+
+const handleCall = useAccessLogin(() => {
+  if (detail.value.contactPhoneNumber) {
+    Taro.makePhoneCall({
+      phoneNumber: detail.value.contactPhoneNumber,
+    });
+  }
+});
 </script>

--
Gitblit v1.9.1