| apps/bMiniApp/src/subpackages/task/hooks/index.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| apps/underTakeMiniApp/src/subpackages/task/components/TaskCheckCard.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| apps/underTakeMiniApp/src/subpackages/task/taskCheck/InnerPage.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| apps/underTakeMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| packages/constants/task.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
apps/bMiniApp/src/subpackages/task/hooks/index.ts
@@ -61,7 +61,7 @@ try { let params: API.CalcTaskCheckReceiveCommand = { taskInfoId: unref(id), checkInTime: dayjs(checkInTime).format('YYYY-MM-DD HH:mm:ss'), checkInTime: !!checkInTime ? dayjs(checkInTime).format('YYYY-MM-DD HH:mm:ss') : null, checkOutTime: dayjs().format('YYYY-MM-DD HH:mm:ss'), }; return await taskCheckReceiveServices.calcTaskCheckReceive(params); apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue
@@ -414,8 +414,8 @@ const { supplierEnterpriseSelect } = useGetSupplierEnterpriseSelect(); const router = Taro.useRouter(); const taskId = router.params?.id ?? ''; const isEdit = !!taskId; const isCopy = router.params?.isCopy === 'true'; const isEdit = !!taskId && !isCopy; const nowDate = dayjs().toDate(); const applyBeginTimeMinDate = computed(() => { @@ -609,7 +609,7 @@ ); }, placeholderData: () => ({} as API.GetTaskInfoQueryResult), enabled: isEdit, enabled: isEdit || isCopy, onSuccess(data) { form.supplierEnterpriseId = data.supplierEnterpriseId; form.name = data.name; @@ -715,7 +715,7 @@ name: form.name, needPeopleNumber: form.needPeopleNumber, billingMethod: form.billingMethod, serviceFee: form.serviceFee, // serviceFee: form.serviceFee, totalPieceQuantity: form.totalPieceQuantity, settlementCycle: form.settlementCycle, settlementDate: form.settlementDate ? form.settlementDate : 0, @@ -740,6 +740,12 @@ applyEndTime: dayjs(form.applyEndTime).format('YYYY-MM-DD 23:59:59'), settlementAccess: form.settlementAccess, }; if ( form.billingMethod !== EnumBillingMethod.Face && form.billingMethod !== EnumBillingMethod.Piece ) { params.serviceFee = form.serviceFee; } if (isEdit) { params.id = taskId; } apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue
@@ -49,22 +49,27 @@ const { queryState, infiniteLoadingProps } = useCheckReceiveTasks(); function goSubmitTaskDetail(item: API.GetCheckReceiveTasksQueryResultItem) { if ( item.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn && dayjs(queryState.date).isBefore(dayjs(), 'day') ) { Taro.navigateTo({ url: `${RouterPath.taskUserSubmitCheckHistories}?id=${item.id}&date=${dayjs( queryState.date ).format('YYYY-MM-DD')}`, }); } else { // if ( // item.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn && // dayjs(queryState.date).isBefore(dayjs(), 'day') // ) { // Taro.navigateTo({ // url: `${RouterPath.taskUserSubmitCheckHistories}?id=${item.id}&date=${dayjs( // queryState.date // ).format('YYYY-MM-DD')}`, // }); // } else { // Taro.navigateTo({ // url: `${RouterPath.taskCheckDetail}?id=${item.id}&date=${dayjs(queryState.date).format( // 'YYYY-MM-DD' // )}&checkReceiveStatus=${queryState.checkReceiveStatus}`, // }); // } Taro.navigateTo({ url: `${RouterPath.taskCheckDetail}?id=${item.id}&date=${dayjs(queryState.date).format( 'YYYY-MM-DD' )}&checkReceiveStatus=${queryState.checkReceiveStatus}`, }); } } </script> apps/underTakeMiniApp/src/subpackages/task/components/TaskCheckCard.vue
@@ -9,50 +9,12 @@ :contactPhoneNumber="contactPhoneNumber" > <template #actions> <template v-if="OrderUtils.isContainCheckIn(checkReceiveMethods)"> <!-- <nut-button v-if="!checkInTime" type="primary" class="task-check-card-phone-btn" @click.stop="emit('checkInOrOut', CheckInOrOutEventEnum.CheckIn)" >签到</nut-button <div class="task-check-card-phone-status" :style="{ color: EnumTaskCheckReceiveStatusColor[checkReceiveStatus] }" > <nut-button v-else-if="!checkOutTime" type="primary" class="task-check-card-phone-btn" @click.stop="emit('checkInOrOut', CheckInOrOutEventEnum.CheckOut)" >签出</nut-button > <div v-else class="task-check-card-phone-status" :style="{ color: Colors.Success }"> {{ EnumTaskCheckReceiveStatusText[checkReceiveStatus] }} </div> --> <template v-if="props.submitCheckReceiveStatus !== EnumTaskUserSubmitCheckReceiveStatus.Fail" > <nut-button v-if="!checkInTime || !checkOutTime" type="primary" class="task-check-card-phone-btn" @click.stop="handleMore" >操作</nut-button > <div v-else class="task-check-card-phone-status" :style="{ color: Colors.Success }"> {{ EnumTaskCheckReceiveStatusText[checkReceiveStatus] }} </div> </template> </template> <template v-else> <nut-button v-if="checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitCheckReceive" type="primary" class="task-check-card-phone-btn" >验收</nut-button > <div v-else class="task-check-card-phone-status" :style="{ color: Colors.Success }"> {{ EnumTaskCheckReceiveStatusText[checkReceiveStatus] }} </div> </template> </template> </TaskCheckPersonalView> </div> @@ -67,6 +29,7 @@ EnumTaskCheckReceiveMethod, EnumGetCheckReceiveTasksQueryResultItemCheckStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumTaskCheckReceiveStatusColor, } from '@12333/constants'; import { TaskCheckPersonalView } from '@12333/components'; import { CheckInOrOutEventEnum } from '../constants'; apps/underTakeMiniApp/src/subpackages/task/taskCheck/InnerPage.vue
@@ -49,22 +49,27 @@ const { queryState, infiniteLoadingProps } = useCheckReceiveTasks(); function goSubmitTaskDetail(item: API.GetCheckReceiveTasksQueryResultItem) { if ( item.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn && dayjs(queryState.date).isBefore(dayjs(), 'day') ) { Taro.navigateTo({ url: `${RouterPath.taskUserSubmitCheckHistories}?id=${item.id}&date=${dayjs( queryState.date ).format('YYYY-MM-DD')}`, }); } else { // if ( // item.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn && // dayjs(queryState.date).isBefore(dayjs(), 'day') // ) { // Taro.navigateTo({ // url: `${RouterPath.taskUserSubmitCheckHistories}?id=${item.id}&date=${dayjs( // queryState.date // ).format('YYYY-MM-DD')}`, // }); // } else { // Taro.navigateTo({ // url: `${RouterPath.taskCheckDetail}?id=${item.id}&date=${dayjs(queryState.date).format( // 'YYYY-MM-DD' // )}&checkReceiveStatus=${queryState.checkReceiveStatus}`, // }); // } Taro.navigateTo({ url: `${RouterPath.taskCheckDetail}?id=${item.id}&date=${dayjs(queryState.date).format( 'YYYY-MM-DD' )}&checkReceiveStatus=${queryState.checkReceiveStatus}`, }); } } </script> apps/underTakeMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
@@ -25,114 +25,9 @@ :checkReceiveStatus="item.checkReceiveStatus" :checkReceiveMethods="detail?.checkReceiveMethods" :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> @@ -159,21 +54,6 @@ 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( @@ -198,124 +78,6 @@ queryKey: ['taskCheckReceiveServices/getCheckReceiveTask'], } ); const settlementAmount = computed(() => sumSettlementAmount()); function onTimeoutHoursChange(event: any) { form.timeoutFee = Number(form.timeoutServiceFee) ? form.timeoutServiceFee * event.detail.value : 0; } function sumSettlementAmount() { return toRound( 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'; packages/constants/task.ts
@@ -106,6 +106,12 @@ [EnumTaskCheckReceiveStatus.Completed]: '已验收', }; export const EnumTaskCheckReceiveStatusColor = { [EnumTaskCheckReceiveStatus.WaitSubmit]: Colors.Warning, [EnumTaskCheckReceiveStatus.WaitCheckReceive]: Colors.Warning, [EnumTaskCheckReceiveStatus.Completed]: Colors.Success, }; export const EnumTaskUserSubmitCheckReceiveStatusText = { [EnumTaskUserSubmitCheckReceiveStatus.WaitSubmit]: '待提交', [EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive]: '待验收',