From ccc340793f1cf2c3932be705c69fa5906033f989 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期一, 27 十月 2025 18:27:46 +0800
Subject: [PATCH] fix: bug
---
apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue | 298 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 280 insertions(+), 18 deletions(-)
diff --git a/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
index f9e1391..b98f5c7 100644
--- a/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
@@ -19,12 +19,120 @@
:name="item.name"
:gender="item.gender"
:isReal="item.isReal"
+ :checkInTime="item.checkInTime"
+ :checkOutTime="item.checkOutTime"
:contactPhoneNumber="item.contactPhoneNumber"
:checkReceiveStatus="item.checkReceiveStatus"
+ :checkReceiveMethod="detail?.checkReceiveMethod"
+ :submitCheckReceiveStatus="item.submitCheckReceiveStatus"
@checkReceive="goTaskDetail(item)"
+ @checkInOrOut="(ev) => checkReceiveTask(ev, item)"
/>
</template>
</InfiniteLoading>
+ <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>
@@ -33,9 +141,13 @@
import * as taskCheckReceiveServices from '@12333/services/apiV2/taskCheckReceive';
import { useInfiniteLoading } from '@12333/hooks';
import TaskCheckCard from '../components/TaskCheckCard.vue';
-import { MyTaskCard } from '@12333/components';
-import { EnumTaskCheckReceiveStatus } from '@12333/constants';
-import { setOSSLink } from '@12333/utils';
+import { MyTaskCard, NumberInput } from '@12333/components';
+import {
+ EnumTaskCheckReceiveMethod,
+ EnumTaskCheckReceiveStatus,
+ EnumTaskUserSubmitCheckReceiveStatus,
+} from '@12333/constants';
+import { Message, setOSSLink } from '@12333/utils';
import dayjs from 'dayjs';
defineOptions({
@@ -47,8 +159,25 @@
const date = router.params?.date ?? '';
const checkReceiveStatus = Number(router.params?.checkReceiveStatus);
+const dialogVisible = ref(false);
+
+const form = reactive({
+ serviceFee: 0,
+ timeoutHours: 0,
+ timeoutFee: 0,
+ otherFee: 0,
+ remark: '',
+ timeoutServiceFee: 0,
+
+ taskInfoId: '',
+ checkInTime: '',
+ checkoutTime: '',
+});
+
+const detail = ref<API.GetCheckReceiveTasksQueryResultItem>();
+
const { infiniteLoadingProps } = useInfiniteLoading(
- ({ pageParam }) => {
+ async ({ pageParam }) => {
let params: API.GetCheckReceiveTaskQuery = {
pageModel: {
rows: 20,
@@ -59,28 +188,161 @@
checkReceiveStatus: checkReceiveStatus,
};
- return taskCheckReceiveServices.getCheckReceiveTask(params, {
+ let res = await taskCheckReceiveServices.getCheckReceiveTask(params, {
showLoading: false,
});
+ detail.value = res.objectData;
+ return res;
},
{
queryKey: ['taskCheckReceiveServices/getCheckReceiveTask'],
}
);
-function goTaskDetail(item: API.GetCheckReceiveTaskQueryResultItem) {
- if (item.checkReceiveStatus === EnumTaskCheckReceiveStatus.Completed) {
- Taro.navigateTo({
- url: `${RouterPath.taskCheckedDetail}?id=${item.id}`,
- });
- }
- if (
- item.checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitCheckReceive ||
- item.checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitSubmit
- ) {
- Taro.navigateTo({
- url: `${RouterPath.taskHandleCheckDetail}?id=${item.id}&date=${date}`,
- });
+const settlementAmount = computed(() => sumSettlementAmount());
+
+function onTimeoutHoursChange(event: any) {
+ form.timeoutFee = Number(form.timeoutServiceFee)
+ ? form.timeoutServiceFee * event.detail.value
+ : 0;
+}
+
+function sumSettlementAmount() {
+ return (
+ getFeeValue(Number(form.timeoutFee ?? 0)) +
+ getFeeValue(Number(form.serviceFee ?? 0)) +
+ getFeeValue(Number(form.otherFee ?? 0))
+ );
+}
+
+function getFeeValue(val: number) {
+ return val || 0;
+}
+
+async function openDialog(item: API.GetCheckReceiveTaskQueryResultItem) {
+ let res = await calcTaskCheckReceive(item);
+ if (res) {
+ dialogVisible.value = true;
+ form.taskInfoId = item.id;
+ form.serviceFee = res.serviceFee ?? 0;
+ form.timeoutHours = res.timeoutHours ?? 0;
+ form.timeoutServiceFee = detail.value?.timeoutServiceFee ?? 0;
+ form.otherFee = 0;
+ form.timeoutFee = 0;
+ form.remark = '';
}
}
+
+function handleCancel() {
+ dialogVisible.value = false;
+}
+
+async function handleConfirm() {
+ try {
+ let params: API.CheckReceiveTaskCommand = {
+ taskInfoUserId: form.taskInfoId,
+ date: dayjs(date).format('YYYY-MM-DD'),
+ checkOutTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
+ 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('鎻愪氦鎴愬姛');
+ dialogVisible.value = false;
+ infiniteLoadingProps.value?.refetch?.();
+ }
+ } catch (error) {}
+}
+
+async function calcTaskCheckReceive(item: API.GetCheckReceiveTaskQueryResultItem) {
+ try {
+ let params: API.CalcTaskCheckReceiveCommand = {
+ taskInfoId: id,
+ checkInTime: dayjs(item.checkInTime).format('YYYY-MM-DD HH:mm:ss'),
+ checkOutTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
+ };
+ return await taskCheckReceiveServices.calcTaskCheckReceive(params);
+ } catch (error) {}
+}
+
+function goTaskDetail(item: API.GetCheckReceiveTaskQueryResultItem) {
+ if (detail.value.checkReceiveMethod !== EnumTaskCheckReceiveMethod.CheckIn) {
+ if (item.checkReceiveStatus === EnumTaskCheckReceiveStatus.Completed) {
+ Taro.navigateTo({
+ url: `${RouterPath.taskCheckedDetail}?id=${item.id}`,
+ });
+ }
+ if (
+ item.checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitCheckReceive ||
+ item.checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitSubmit
+ ) {
+ Taro.navigateTo({
+ url: `${RouterPath.taskHandleCheckDetail}?id=${item.id}&date=${date}`,
+ });
+ }
+ }
+}
+
+async function checkReceiveTask(
+ ev: EnumTaskUserSubmitCheckReceiveStatus,
+ item: API.GetCheckReceiveTaskQueryResultItem
+) {
+ try {
+ let params: API.CheckReceiveTaskCommand = {
+ taskInfoUserId: item.id,
+ date: dayjs(date).format('YYYY-MM-DD'),
+ };
+ if (ev === EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive) {
+ params.checkInTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
+ params.checkReceiveStatus = ev;
+ } else if (ev === EnumTaskUserSubmitCheckReceiveStatus.Success) {
+ openDialog(item);
+ return;
+ // params.checkOutTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
+ // params.checkReceiveStatus = ev;
+ } else if (ev === EnumTaskUserSubmitCheckReceiveStatus.Fail) {
+ params.checkReceiveStatus = ev;
+ }
+ let res = await taskCheckReceiveServices.checkReceiveTask(params);
+ if (res) {
+ Message.success('鎻愪氦鎴愬姛');
+ infiniteLoadingProps.value?.refetch?.();
+ }
+ } catch (error) {}
+}
</script>
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.taskCheckDetail-page-wrapper {
+ .bole-form-input-wrapper {
+ display: flex;
+ align-items: center;
+ }
+
+ .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