From 318a7bbb40a8f37f825f9eb4ee1bcd84c6020a09 Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期三, 13 八月 2025 16:00:34 +0800 Subject: [PATCH] feat: 接口对接 --- apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue | 220 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 198 insertions(+), 22 deletions(-) diff --git a/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue b/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue index 8986d91..a0435bc 100644 --- a/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue @@ -1,29 +1,98 @@ <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 + 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> </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="IconAttentioActive" class="taskDetail-address-title-icon" /> - <div class="taskDetail-address-title">瀹佹尝鏌忔偊閰掑簵</div> + <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">瀹佹尝甯傞劄宸炲尯涓滈挶婀栧ぇ鍫拌矾188鍙峰畞娉㈡煆鎮﹂厭搴�</div> - <RectRight :size="6" class="taskDetail-address-info-icon" /> + <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> @@ -45,7 +114,36 @@ :isFlex="false" openType="share" ></PageFooterAction> - <PageFooterBtn type="primary">鎶ュ悕</PageFooterBtn> + <PageFooterAction + :icon="IconPhone" + text="鎵嬫満" + :isFlex="false" + @click="handleCall" + ></PageFooterAction> + <PageFooterBtn v-if="from === 'sign'" type="primary" disabled> + {{ GetTaskInfoQueryResultApplyButtonText[detail.applyButton] }} + </PageFooterBtn> + <PageFooterBtn + v-if="from === 'hire'" + 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> @@ -53,22 +151,44 @@ <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'; 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, Message } from '@12333/utils'; +import { + EnumSettlementCycleText, + BillingMethodEnumUnit, + EnumTaskReleaseStatus, + GetPersonalApplyTaskInfosQueryStatusColor, + GetTaskInfoQueryResultApplyButtonText, + GetPersonalHireTaskInfosQueryStatusColor, + GetTaskInfoQueryResultHireButtonText, + 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, @@ -76,26 +196,82 @@ 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}`, }); +}); + +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('鎶ュ悕鎴愬姛'); + 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) { + 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}`, +}) } </script> -- Gitblit v1.9.1