From d570bb61d6c325a7486ec7c23006f796901685c2 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期五, 07 十一月 2025 17:20:33 +0800
Subject: [PATCH] feat: 接口
---
apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue | 278 ++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 214 insertions(+), 64 deletions(-)
diff --git a/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue
index 289d0a5..522a51b 100644
--- a/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue
@@ -2,79 +2,228 @@
<LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
<ContentScrollView style="background-color: #fff">
<div class="personal-info-wrapper">
- <TaskCheckPersonalView />
+ <TaskCheckPersonalView
+ :avatarUrl="setOSSLink(detail?.enterpriseEmployeeUser?.avatar)"
+ :name="detail?.enterpriseEmployeeUser?.name"
+ :isReal="detail?.enterpriseEmployeeUser?.isReal"
+ :contactPhoneNumber="detail?.enterpriseEmployeeUser?.contactPhoneNumber"
+ />
</div>
- <div class="taskCheckDetail-status-wrapper">
- <div class="taskCheckDetail-status-title">楠屾敹鐓х墖</div>
- </div>
- <div class="taskCheckDetail-time">2024.11.14 9:28:39</div>
- <nut-grid
- square
- :column-num="3"
- :border="false"
- :gutter="20"
- v-if="list.length > 0"
- class="pro-img-grid"
- >
- <nut-grid-item v-for="(item, index) in list" :key="item" class="pro-img-grid-item">
- <div class="pro-img-grid-img-item">
- <PreviewImage :src="item" class="pro-img-grid-img" :urls="list" />
- </div>
- </nut-grid-item>
- </nut-grid>
+ <div class="taskCheckFileCard-status-title">楠屾敹璇︽儏</div>
+ <TaskCheckFileCard
+ :created-time="detail?.createdTime"
+ :userCheckInTime="detail?.userCheckInTime"
+ :userCheckOutTime="detail?.userCheckOutTime"
+ :checkInTime="detail?.checkInTime"
+ :checkOutTime="detail?.checkOutTime"
+ :checkReceiveMethods="detail?.checkReceiveMethods"
+ :files="detail?.files?.map((x) => setOSSLink(x))"
+ userCheckLabelPrefix="鐢ㄦ埛"
+ showCheckTime
+ ></TaskCheckFileCard>
</ContentScrollView>
<PageFooter>
- <PageFooterBtn type="primary" :color="Colors.Info" class="dark-btn">楠屾敹鏈�氳繃</PageFooterBtn>
- <PageFooterBtn type="primary">楠屾敹閫氳繃</PageFooterBtn>
+ <PageFooterBtn
+ type="primary"
+ :color="Colors.Info"
+ class="dark-btn"
+ @click="openDialog(detail?.checkInTime ?? '')"
+ >淇敼鏈嶅姟璐�</PageFooterBtn
+ >
+ <PageFooterBtn type="primary" @click="checkReceiveTask()">楠屾敹</PageFooterBtn>
</PageFooter>
+ <nut-popup v-model:visible="dialogVisible">
+ <div class="payroll-form-wrapper">
+ <nut-form :model-value="form" ref="formRef">
+ <nut-form-item
+ label="鏈嶅姟璐�:"
+ class="bole-form-item"
+ prop="serviceFee"
+ label-width="90px"
+ >
+ <div class="bole-form-input-wrapper">
+ <NumberInput
+ v-model.trim="form.serviceFee"
+ class="nut-input-text bole-input-text"
+ placeholder="璇疯緭鍏ユ湇鍔¤垂"
+ :min="0"
+ :max="999999999999"
+ :precision="2"
+ type="text"
+ disabled
+ />
+ <div class="form-input-unit">鍏�</div>
+ </div>
+ </nut-form-item>
+ <nut-form-item
+ label="瓒呮椂:"
+ class="bole-form-item"
+ prop="timeoutHours"
+ label-width="90px"
+ >
+ <div class="bole-form-input-wrapper">
+ <NumberInput
+ v-model.trim="form.timeoutHours"
+ class="nut-input-text bole-input-text"
+ placeholder="璇疯緭鍏ヨ秴鏃舵椂闀�"
+ :min="0"
+ :max="999999999999"
+ :precision="2"
+ type="text"
+ @change="onTimeoutHoursChange"
+ />
+ <div class="form-input-unit">灏忔椂</div>
+ </div>
+ </nut-form-item>
+ <nut-form-item
+ label="瓒呮椂璐圭敤:"
+ class="bole-form-item"
+ prop="timeoutFee"
+ label-width="90px"
+ >
+ <div class="bole-form-input-wrapper">
+ <NumberInput
+ v-model.trim="form.timeoutFee"
+ class="nut-input-text bole-input-text"
+ placeholder="璇疯緭鍏ヨ秴鏃惰垂鐢�"
+ :min="0"
+ :max="999999999999"
+ :precision="2"
+ type="text"
+ />
+ <div class="form-input-unit">鍏�</div>
+ </div>
+ </nut-form-item>
+ <nut-form-item
+ label="鍏朵粬璐圭敤:"
+ class="bole-form-item"
+ prop="otherFee"
+ label-width="90px"
+ >
+ <div class="bole-form-input-wrapper">
+ <NumberInput
+ v-model.trim="form.otherFee"
+ class="nut-input-text bole-input-text"
+ placeholder="璇疯緭鍏ュ叾浠栬垂鐢�"
+ :max="999999999999"
+ :precision="2"
+ type="text"
+ />
+ <div class="form-input-unit">鍏�</div>
+ </div>
+ </nut-form-item>
+ <nut-form-item
+ label="缁撶畻閲戦:"
+ class="bole-form-item"
+ prop="settlementAmount"
+ label-width="90px"
+ >
+ {{ `${settlementAmount}鍏僠 }}
+ </nut-form-item>
+ <nut-form-item
+ label="澶囨敞:"
+ class="bole-form-item alignTop"
+ prop="remark"
+ label-width="90px"
+ >
+ <nut-textarea v-model="form.remark" rows="4" placeholder="璇疯緭鍏ュ娉�"> </nut-textarea>
+ </nut-form-item>
+ </nut-form>
+ <div class="payroll-form-footer">
+ <nut-button @click="handleCancel">鍙栨秷</nut-button>
+ <nut-button type="primary" @click="handleConfirm">纭</nut-button>
+ </div>
+ </div>
+ </nut-popup>
</LoadingLayout>
</template>
<script setup lang="ts">
import Taro from '@tarojs/taro';
import { useQuery } from '@tanstack/vue-query';
-import * as orderServices from '@12333/services/api/Order';
-import TaskCheckPersonalView from '../components/TaskCheckPersonalView.vue';
-import { PreviewImage } from '@12333/components';
-import { Colors } from '@12333/constants';
+import * as taskCheckReceiveServices from '@12333/services/apiV2/taskCheckReceive';
+import { TaskCheckFileCard, TaskCheckPersonalView, NumberInput } from '@12333/components';
+import { Colors, EnumTaskUserSubmitCheckReceiveStatus } from '@12333/constants';
+import { Message, setOSSLink } from '@12333/utils';
+import dayjs from 'dayjs';
+import { goBack } from '@/utils';
+import { useCheckReceiveTaskUserSubmit } from '@12333/hooks';
+import { useSettlementAmount } from '../hooks';
defineOptions({
name: 'InnerPage',
});
const router = Taro.useRouter();
-const taskId = router.params?.id ?? '';
+const id = router.params?.id ?? '';
+const taskInfoId = router.params?.taskInfoId ?? '';
+const date = router.params?.date ?? '';
-const {
- isLoading,
- isError,
- data: detail,
- refetch,
-} = useQuery({
- queryKey: ['orderServices/getOrdeForDetail', taskId],
- queryFn: async () => {
- return await orderServices.getOrdeForDetail(
- { id: taskId },
- {
- showLoading: false,
- }
- );
+const { isLoading, isError, detail, refetch } = useCheckReceiveTaskUserSubmit({
+ params: {
+ taskInfoUserId: id,
+ date: dayjs(date).format('YYYY-MM-DD'),
},
- placeholderData: () => ({} as API.OrderInfoDto),
});
-const list = ref([
- 'https://storage.360buyimg.com/jdc-article/NutUItaro34.jpg',
- 'https://storage.360buyimg.com/jdc-article/NutUItaro2.jpg',
- 'https://storage.360buyimg.com/jdc-article/welcomenutui.jpg',
- 'https://storage.360buyimg.com/jdc-article/fristfabu.jpg',
-]);
+const {
+ dialogVisible,
+ form,
+ settlementAmount,
+ handleCancel,
+ openDialog,
+ handleConfirm,
+ onTimeoutHoursChange,
+} = useSettlementAmount({
+ taskInfoUserId: id,
+ id: taskInfoId,
+ timeoutServiceFee: computed(() => detail.value?.timeoutServiceFee),
+ date,
+ onSuccess() {
+ Message.success('鎻愪氦鎴愬姛', {
+ onClosed() {
+ goBack();
+ },
+ });
+ },
+});
+
+async function checkReceiveTask() {
+ try {
+ let params: API.CheckReceiveTaskCommand = {
+ id: detail.value?.id,
+ checkReceiveStatus: EnumTaskUserSubmitCheckReceiveStatus.Success,
+ // serviceFee: form.serviceFee,
+ // timeoutHours: form.timeoutHours,
+ // timeoutFee: form.timeoutFee,
+ // otherFee: form.otherFee,
+ // remark: form.remark,
+ // settlementAmount: settlementAmount.value,
+ };
+ let res = await taskCheckReceiveServices.checkReceiveTask(params);
+ if (res) {
+ Message.success('鎻愪氦鎴愬姛', {
+ onClosed() {
+ goBack();
+ },
+ });
+ }
+ } catch (error) {}
+}
</script>
<style lang="scss">
@import '@/styles/common.scss';
.taskHandleCheckDetail-page-wrapper {
+ .taskCheckFileCard-status-title {
+ font-weight: 600;
+ font-size: 28px;
+ line-height: 32px;
+ margin-bottom: 16px;
+ color: boleGetCssVar('text-color', 'primary');
+ }
+
.personal-info-wrapper {
padding-top: 52px;
padding-bottom: 36px;
@@ -82,27 +231,28 @@
margin-bottom: 22px;
}
- .taskCheckDetail-status-wrapper {
+ .bole-form-input-wrapper {
display: flex;
align-items: center;
- font-weight: 600;
- font-size: 28px;
- line-height: 32px;
- margin-bottom: 16px;
-
- .taskCheckDetail-status-title {
- color: boleGetCssVar('text-color', 'primary');
- flex: 1;
- min-width: 0;
- }
}
- .taskCheckDetail-time {
- font-weight: 400;
- font-size: 24px;
- color: boleGetCssVar('text-color', 'regular');
- line-height: 36px;
- margin-bottom: 22px;
+ .form-input-unit {
+ margin-left: 10px;
+ color: boleGetCssVar('text-color', 'primary');
+ flex-shrink: 0;
+ }
+
+ .payroll-form-wrapper {
+ width: 600px;
+ }
+
+ .payroll-form-footer {
+ padding: 10px 20px;
+ text-align: center;
+
+ .nut-button + .nut-button {
+ margin-left: 20px;
+ }
}
}
</style>
--
Gitblit v1.9.1