From df30eaca97a8db2190a9931e75cced42589f6df7 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期一, 10 十一月 2025 14:13:38 +0800
Subject: [PATCH] fix: bug
---
apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue | 507 +++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 460 insertions(+), 47 deletions(-)
diff --git a/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue
index 9d19582..66120ad 100644
--- a/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue
@@ -1,8 +1,41 @@
<template>
<ContentScrollView :paddingH="false">
<nut-form :model-value="form" ref="formRef" :rules="rules">
+ <nut-form-item
+ label="渚涘簲鍟�:"
+ class="bole-form-item"
+ prop="supplierEnterpriseId"
+ label-width="90px"
+ required
+ >
+ <ChooseInputWithPicker
+ v-model="form.supplierEnterpriseId"
+ placeholder="璇烽�夋嫨渚涘簲鍟�"
+ :value-enum="supplierEnterpriseSelect"
+ :disabled="isEdit"
+ />
+ </nut-form-item>
<nut-form-item label="浠诲姟鍚嶇О:" class="bole-form-item" prop="name" label-width="90px">
<nut-input v-model="form.name" placeholder="璇疯緭鍏ヤ换鍔″悕绉�"> </nut-input>
+ </nut-form-item>
+ <nut-form-item
+ label="闇�姹備汉鏁�:"
+ class="bole-form-item"
+ prop="needPeopleNumber"
+ label-width="90px"
+ >
+ <div class="bole-form-input-wrapper">
+ <NumberInput
+ v-model.trim="form.needPeopleNumber"
+ class="nut-input-text bole-input-text"
+ placeholder="璇疯緭鍏ラ渶姹備汉鏁�"
+ :min="0"
+ :max="999999999999"
+ :precision="0"
+ @change="calcTaskTotalServiceFee"
+ />
+ <div class="form-input-unit">浜�</div>
+ </div>
</nut-form-item>
<nut-form-item
label="鏈嶅姟璐�:"
@@ -12,21 +45,105 @@
label-width="90px"
label-position="top"
>
- <nut-radio-group v-model="form.billingMethod" direction="horizontal">
- <BlRadio :label="Number(key)" v-for="(val, key) in EnumBillingMethodText" :key="key">{{
- val
- }}</BlRadio>
+ <nut-radio-group
+ v-model="form.billingMethod"
+ direction="horizontal"
+ @change="calcTaskTotalServiceFee"
+ >
+ <BlRadio
+ :label="Number(key)"
+ v-for="(val, key) in EnumBillingMethodText"
+ :key="key"
+ :disabled="feeCannotEdit"
+ >{{ val }}</BlRadio
+ >
</nut-radio-group>
</nut-form-item>
- <nut-form-item label=" " class="bole-form-item" prop="serviceFee" label-width="0">
+ <nut-form-item
+ label=" "
+ class="bole-form-item"
+ prop="serviceFee"
+ label-width="0"
+ v-if="form.billingMethod !== EnumBillingMethod.Face"
+ >
<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="feeCannotEdit"
+ @change="calcTaskTotalServiceFee"
/>
<div class="form-input-unit">{{ BillingMethodEnumUnit[form.billingMethod] }}</div>
+ </div>
+ </nut-form-item>
+ <template v-if="form.billingMethod === EnumBillingMethod.Hour">
+ <nut-form-item
+ label="鏍稿畾宸ユ椂:"
+ class="bole-form-item"
+ prop="verifyWorkHours"
+ label-width="90"
+ >
+ <div class="bole-form-input-wrapper">
+ <NumberInput
+ v-model.trim="form.verifyWorkHours"
+ class="nut-input-text bole-input-text"
+ placeholder="璇疯緭鍏ユ牳瀹氬伐鏃�"
+ :min="0"
+ :max="999999999999"
+ :precision="2"
+ type="text"
+ :disabled="feeCannotEdit"
+ @change="calcTaskTotalServiceFee"
+ />
+ <div class="form-input-unit">{{ '灏忔椂/澶�' }}</div>
+ </div>
+ </nut-form-item>
+ <nut-form-item
+ label="瓒呮椂鏈嶅姟璐�:"
+ class="bole-form-item"
+ prop="timeoutServiceFee"
+ label-width="90"
+ >
+ <div class="bole-form-input-wrapper">
+ <NumberInput
+ v-model.trim="form.timeoutServiceFee"
+ class="nut-input-text bole-input-text"
+ placeholder="璇疯緭鍏ヨ秴鏃舵湇鍔¤垂"
+ :min="0"
+ :max="999999999999"
+ :precision="2"
+ type="text"
+ :disabled="feeCannotEdit"
+ />
+ <div class="form-input-unit">{{ '鍏�/灏忔椂' }}</div>
+ </div>
+ </nut-form-item>
+ </template>
+ <nut-form-item
+ v-if="form.billingMethod === EnumBillingMethod.Piece"
+ label="鎬讳欢鏁�:"
+ class="bole-form-item"
+ prop="totalPieceQuantity"
+ label-width="90"
+ >
+ <div class="bole-form-input-wrapper">
+ <NumberInput
+ v-model.trim="form.totalPieceQuantity"
+ class="nut-input-text bole-input-text"
+ placeholder="璇疯緭鍏ヤ换鍔℃�讳欢鏁�"
+ :min="0"
+ :max="999999999999"
+ :precision="2"
+ type="text"
+ :disabled="feeCannotEdit"
+ @change="calcTaskTotalServiceFee"
+ />
+ <div class="form-input-unit">{{ '浠�' }}</div>
</div>
</nut-form-item>
<nut-form-item
@@ -36,11 +153,33 @@
required
label-width="90px"
>
- <nut-radio-group v-model="form.settlementCycle" direction="horizontal">
- <BlRadio :label="Number(key)" v-for="(val, key) in EnumSettlementCycleText" :key="key">{{
- val
- }}</BlRadio>
+ <nut-radio-group
+ v-model="form.settlementCycle"
+ direction="horizontal"
+ @change="settleTypeChange"
+ >
+ <BlRadio
+ :label="Number(key)"
+ v-for="(val, key) in EnumSettlementCycleText"
+ :key="key"
+ :disabled="feeCannotEdit"
+ >{{ val }}</BlRadio
+ >
</nut-radio-group>
+ </nut-form-item>
+ <nut-form-item
+ label="缁撶畻鏃ユ湡:"
+ class="bole-form-item"
+ prop="settlementDate"
+ label-width="90px"
+ required
+ v-if="form.settlementCycle !== EnumSettlementCycle.Day"
+ >
+ <ChooseInputWithPicker
+ v-model="form.settlementDate"
+ placeholder="璇疯缃粨绠楁棩鏈�"
+ :value-enum="settlementDateList"
+ />
</nut-form-item>
<nut-form-item label="绂忓埄:" class="bole-form-item" prop="benefits" label-width="90px">
<ChooseInputWithCheckbox
@@ -62,14 +201,14 @@
v-model.trim="form.ageMinLimit"
class="nut-input-text bole-input-text"
placeholder="璇烽�夋嫨骞撮緞鑼冨洿"
- :min="1"
+ :min="16"
/>
<div class="form-input-separator">鑷�</div>
<NumberInput
v-model.trim="form.ageMaxLimit"
class="nut-input-text bole-input-text"
placeholder="璇烽�夋嫨骞撮緞鑼冨洿"
- :min="1"
+ :min="16"
/>
</div>
</nut-form-item>
@@ -99,22 +238,29 @@
placeholder="璇烽�夋嫨璧勬牸璇佷功"
/>
</nut-form-item>
- <nut-form-item label="浠诲姟鍦扮偣" class="bole-form-item" prop="weMapInfo" required>
- <ChooseLocationInput placeholder="璇烽�夋嫨浠诲姟鍦扮偣" v-model="form.weMapInfo" />
- <!-- <ChooseInputWithAreaPicker
- :columns="areaTreeList"
- v-model="form.areaList"
- placeholder="璇烽�夋嫨鎵�鍦ㄥ湴鍖�"
- ></ChooseInputWithAreaPicker> -->
+ <nut-form-item
+ label="浠诲姟鍦扮偣"
+ label-width="90px"
+ class="bole-form-item"
+ prop="weMapInfo"
+ required
+ >
+ <ChooseLocationInput
+ inputAlign="left"
+ placeholder="璇烽�夋嫨浠诲姟鍦扮偣"
+ v-model="form.weMapInfo"
+ />
</nut-form-item>
<nut-form-item
- label="璇︾粏鍦板潃:"
+ label="鍦扮偣璇存槑:"
class="bole-form-item"
prop="addressDetail"
label-width="90px"
- required
>
- <nut-input v-model="form.addressDetail" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"> </nut-input>
+ <nut-input v-model="form.addressDetail" placeholder="璇疯緭鍏ュ湴鐐硅鏄�"> </nut-input>
+ </nut-form-item>
+ <nut-form-item label="浠诲姟璇存槑:" class="bole-form-item" prop="description" label-width="90px">
+ <nut-textarea v-model="form.description" placeholder="璇疯緭鍏ヤ换鍔¤鏄�"> </nut-textarea>
</nut-form-item>
<nut-form-item
label="浠诲姟寮�濮嬫棩鏈�:"
@@ -125,13 +271,88 @@
<ChooseInputWithDatePicker
v-model="form.beginTime"
:minDate="nowDate"
+ placeholder="璇烽�夋嫨浠诲姟寮�濮嬫棩鏈�"
+ @change="timeChange"
></ChooseInputWithDatePicker>
</nut-form-item>
<nut-form-item label="浠诲姟缁撴潫鏃ユ湡:" class="bole-form-item" prop="endTime" label-width="90px">
<ChooseInputWithDatePicker
v-model="form.endTime"
:minDate="nowDate"
+ placeholder="璇烽�夋嫨浠诲姟缁撴潫鏃ユ湡"
+ @change="calcTaskTotalServiceFee()"
></ChooseInputWithDatePicker>
+ </nut-form-item>
+ <nut-form-item
+ label="鎶ュ悕寮�濮嬫棩鏈�:"
+ class="bole-form-item"
+ prop="applyBeginTime"
+ label-width="90px"
+ >
+ <ChooseInputWithDatePicker
+ v-model="form.applyBeginTime"
+ :minDate="nowDate"
+ placeholder="璇烽�夋嫨鎶ュ悕寮�濮嬫棩鏈�"
+ ></ChooseInputWithDatePicker>
+ </nut-form-item>
+ <nut-form-item
+ label="鎶ュ悕缁撴潫鏃ユ湡:"
+ class="bole-form-item"
+ prop="applyEndTime"
+ label-width="90px"
+ >
+ <ChooseInputWithDatePicker
+ v-model="form.applyEndTime"
+ :minDate="form.applyBeginTime ? dayjs(form.applyBeginTime).toDate() : nowDate"
+ placeholder="璇烽�夋嫨鎶ュ悕缁撴潫鏃ユ湡"
+ ></ChooseInputWithDatePicker>
+ </nut-form-item>
+ <nut-form-item
+ label="楠屾敹鏂瑰紡:"
+ class="bole-form-item"
+ prop="checkReceiveMethods"
+ label-width="90px"
+ >
+ <!-- <nut-radio-group v-model="form.checkReceiveMethod" direction="horizontal">
+ <BlRadio
+ :label="Number(key)"
+ v-for="(val, key) in EnumTaskCheckReceiveMethodText"
+ :key="key"
+ >{{ val }}</BlRadio
+ >
+ </nut-radio-group> -->
+ <nut-checkbox-group v-model="form.checkReceiveMethods">
+ <nut-checkbox
+ :disabled="isEdit"
+ v-for="(val, key) in EnumTaskCheckReceiveMethodText"
+ :key="key"
+ :label="Number(key) as any"
+ >
+ {{ val }}
+ </nut-checkbox>
+ </nut-checkbox-group>
+ </nut-form-item>
+ <nut-form-item
+ label="缁撶畻鏂瑰紡:"
+ class="bole-form-item"
+ prop="settlementAccess"
+ label-width="90px"
+ required
+ >
+ <ChooseInputWithPicker
+ v-model="form.settlementAccess"
+ placeholder="璇烽�夋嫨缁撶畻鏂瑰紡"
+ :value-enum="settlementAccessList"
+ :disabled="isEdit"
+ />
+ </nut-form-item>
+ <nut-form-item
+ label="棰勮鏈嶅姟璐规�婚:"
+ class="bole-form-item"
+ prop="totalServiceFee"
+ label-width="110px"
+ >
+ {{ `${toThousand(totalServiceFee)}鍏僠 }}
</nut-form-item>
</nut-form>
</ContentScrollView>
@@ -153,6 +374,12 @@
EnumSettlementCycleText,
BillingMethodEnumUnit,
EnumUserGenderTextOptions,
+ EnumSettlementCycleDateWeekArray,
+ EnumSettlementCycleDateMonthArray,
+ EnumTaskCheckReceiveMethod,
+ EnumTaskCheckReceiveMethodText,
+ EnumEnterpriseWalletAccess,
+ EnumEnterpriseWalletAccessText,
} from '@12333/constants';
import {
ChooseInputWithPicker,
@@ -163,13 +390,17 @@
ChooseInputWithAreaPicker,
ChooseInputWithCheckbox,
} from '@12333/components';
-import { FormValidator, Message } from '@12333/utils';
-import * as flexWorkerServices from '@12333/services/api/FlexWorker';
+import { FormValidator, Message, toThousand } from '@12333/utils';
import * as taskServices from '@12333/services/apiV2/task';
import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
import Taro from '@tarojs/taro';
import { goBack } from '@/utils';
-import { useAllAreaList, useDictionaryDataSelect } from '@12333/hooks';
+import {
+ useAllAreaList,
+ useDictionaryDataSelect,
+ useEnterpriseWalletAccessSelect,
+ useGetSupplierEnterpriseSelect,
+} from '@12333/hooks';
import { useQuery } from '@tanstack/vue-query';
import dayjs from 'dayjs';
@@ -179,13 +410,25 @@
const { userDetail } = useUser();
const { findAreaNameFromCode } = useAllAreaList();
+
+const { supplierEnterpriseSelect } = useGetSupplierEnterpriseSelect();
const router = Taro.useRouter();
-const taskId = router.params?.taskId ?? '';
-const isEdit = !!taskId;
+const taskId = router.params?.id ?? '';
const isCopy = router.params?.isCopy === 'true';
-console.log('isCopy: ', router.params?.isCopy);
+const isEdit = !!taskId && !isCopy;
const nowDate = dayjs().toDate();
+const applyBeginTimeMinDate = computed(() => {
+ return form.applyBeginTime
+ ? dayjs(form.applyBeginTime).toDate()
+ : form.beginTime
+ ? dayjs(form.beginTime).toDate()
+ : nowDate;
+});
+
+const feeCannotEdit = computed(() => {
+ return dayjs().isAfter(form.beginTime, 'second') && isEdit;
+});
const { dictionaryDataList: WelfareTypeList } = useDictionaryDataSelect({
categoryCode: CategoryCode.Welfare,
@@ -194,29 +437,58 @@
categoryCode: CategoryCode.CertificateType,
});
+const settlementDateList = computed(() => {
+ if (form.settlementCycle === EnumSettlementCycle.Month) {
+ return EnumSettlementCycleDateMonthArray;
+ }
+ if (form.settlementCycle === EnumSettlementCycle.Week) {
+ return EnumSettlementCycleDateWeekArray;
+ }
+ return [];
+});
+
const form = reactive({
+ supplierEnterpriseId: '',
name: '',
- billingMethod: EnumBillingMethod.Month,
+ needPeopleNumber: '' as any as number,
+ billingMethod: EnumBillingMethod.Day,
serviceFee: '' as any as number,
- settlementCycle: EnumSettlementCycle.Month,
+ settlementCycle: EnumSettlementCycle.Day,
benefits: [] as string[],
- ageMinLimit: 0,
- ageMaxLimit: 0,
+ ageMinLimit: '' as any as number,
+ ageMaxLimit: '' as any as number,
genderLimit: 0 as any as EnumUserGender,
credentialLimits: [] as string[],
- // address: '',
beginTime: '',
endTime: '',
- // areaList: [] as number[],
+ settlementDate: null as number,
weMapInfo: {} as WeMapModel,
addressDetail: '',
+
+ verifyWorkHours: null as number,
+ timeoutServiceFee: null as number,
+ description: '',
+ checkReceiveMethods: [] as EnumTaskCheckReceiveMethod[],
+ applyBeginTime: '',
+ applyEndTime: '',
+ settlementAccess: '' as any as EnumEnterpriseWalletAccess,
+ totalPieceQuantity: '' as any as number,
+
+ totalServiceFee: null as number,
});
const rules = reactive<FormRules>({
+ supplierEnterpriseId: [{ required: true, message: '璇烽�夋嫨渚涘簲鍟�' }],
name: [{ required: true, message: '璇疯緭鍏ヤ换鍔″悕绉�' }],
+ needPeopleNumber: [{ required: true, message: '璇疯緭鍏ラ渶姹備汉鏁�' }],
+ totalPieceQuantity: [{ required: true, message: '璇疯緭鍏ヤ换鍔℃�讳欢鏁�' }],
+ verifyWorkHours: [{ required: true, message: '璇疯緭鍏ユ牳瀹氬伐鏃�' }],
+ timeoutServiceFee: [{ required: true, message: '璇疯緭鍏ヨ秴鏃舵湇鍔¤垂' }],
genderLimit: [{ required: true, message: '璇烽�夋嫨鎬у埆瑕佹眰' }],
- addressDetail: [{ required: true, message: '璇疯緭鍏ヨ缁嗗湴鍧�' }],
+ settlementCycleDate: [{ required: true, message: '璇疯缃粨绠楁棩鏈�' }],
+ settlementAccess: [{ required: true, message: '璇烽�夋嫨缁撶畻鏂瑰紡' }],
+ // addressDetail: [{ required: true, message: '璇疯緭鍏ヨ缁嗗湴鍧�' }],
billingMethod: [
{
required: true,
@@ -225,7 +497,7 @@
if (!form.billingMethod) {
return Promise.reject('璇烽�夋嫨鏈嶅姟璐圭被鍨�');
}
- if (!form.serviceFee) {
+ if (!form.serviceFee && form.billingMethod !== EnumBillingMethod.Face) {
return Promise.reject('璇疯緭鍏ユ湇鍔¤垂');
}
return Promise.resolve(true);
@@ -235,19 +507,16 @@
weMapInfo: [
{ required: true, message: '璇疯缃伐浣滃湴鐐�', validator: FormValidator.validatorWeMap },
],
- // areaList: [
- // { required: true, message: '璇锋坊鍔犲伐浣滃湴鐐�', validator: FormValidator.validatorArray },
- // ],
ageMinLimit: [
{
required: true,
message: '璇疯緭鍏ュ勾榫勮姹�',
validator: () => {
- if (!form.ageMinLimit) {
+ if (!form.ageMinLimit && form.ageMinLimit > 0) {
return Promise.reject('璇疯緭鍏ュ勾榫勮姹�');
}
- if (!form.ageMaxLimit) {
+ if (!form.ageMaxLimit && form.ageMaxLimit > 0) {
return Promise.reject('璇疯緭鍏ュ勾榫勮姹�');
}
if (Number(form.ageMaxLimit) <= Number(form.ageMinLimit)) {
@@ -270,11 +539,58 @@
message: '璇烽�夋嫨缁撴潫鏃ユ湡',
validator(value) {
if (!value) return Promise.reject('璇烽�夋嫨缁撴潫鏃ユ湡');
- if (value <= form.beginTime) return Promise.reject('缁撴潫鏃ユ湡涓嶈兘灏忎簬寮�濮嬫棩鏈�');
+ if (form.billingMethod === EnumBillingMethod.Month) {
+ if (dayjs(form.endTime).isBefore(dayjs(form.beginTime).add(1, 'month'))) {
+ return Promise.reject('鎸夋湀鏈嶅姟璐癸紝浠诲姟鏃堕暱闇�澶т簬涓�涓湀');
+ }
+ return Promise.resolve(true);
+ }
+ if (dayjs(value).isBefore(dayjs(form.beginTime)))
+ return Promise.reject('缁撴潫鏃ユ湡闇�澶т簬寮�濮嬫棩鏈�');
return Promise.resolve(true);
},
},
],
+ applyBeginTime: [
+ {
+ required: true,
+ message: '璇烽�夋嫨鎶ュ悕寮�濮嬫棩鏈�',
+ validator(value) {
+ if (!value) return Promise.reject('璇烽�夋嫨鎶ュ悕寮�濮嬫棩鏈�');
+ if (dayjs(value).isAfter(dayjs(form.endTime)))
+ return Promise.reject('鎶ュ悕寮�濮嬫棩鏈熼渶灏忎簬浠诲姟缁撴潫鏃ユ湡');
+ return Promise.resolve(true);
+ },
+ },
+ ],
+ applyEndTime: [
+ {
+ required: true,
+ message: '璇烽�夋嫨鎶ュ悕缁撴潫鏃ユ湡',
+ validator(value) {
+ if (!value) return Promise.reject('璇烽�夋嫨鎶ュ悕缁撴潫鏃ユ湡');
+ if (dayjs(value).isBefore(dayjs(form.applyBeginTime)))
+ return Promise.reject('鎶ュ悕缁撴潫鏃ユ湡闇�澶т簬鎶ュ悕寮�濮嬫棩鏈�');
+ if (dayjs(value).isAfter(dayjs(form.endTime)))
+ return Promise.reject('鎶ュ悕缁撴潫鏃ユ湡闇�灏忎簬浠诲姟缁撴潫鏃ユ湡');
+ return Promise.resolve(true);
+ },
+ },
+ ],
+ checkReceiveMethods: [
+ {
+ required: true,
+ message: '璇烽�夋嫨楠屾敹鏂瑰紡',
+ validator(value) {
+ if (!value?.length) return Promise.reject('璇烽�夋嫨楠屾敹鏂瑰紡');
+ return Promise.resolve(true);
+ },
+ },
+ ],
+});
+
+const { settlementAccessList } = useEnterpriseWalletAccessSelect({
+ supplierEnterpriseId: computed(() => form.supplierEnterpriseId),
});
const {
@@ -293,19 +609,23 @@
);
},
placeholderData: () => ({} as API.GetTaskInfoQueryResult),
- enabled: isEdit,
+ enabled: isEdit || isCopy,
onSuccess(data) {
+ form.supplierEnterpriseId = data.supplierEnterpriseId;
form.name = data.name;
+ form.needPeopleNumber = data.needPeopleNumber;
form.billingMethod = data.billingMethod;
form.serviceFee = data.serviceFee;
+ form.totalPieceQuantity = data.totalPieceQuantity;
form.settlementCycle = data.settlementCycle;
+ form.settlementDate = data.settlementDate;
form.benefits = (data.benefits ?? []).map((item) => item.benefitCode);
form.ageMinLimit = data.ageMinLimit;
form.ageMaxLimit = data.ageMaxLimit;
form.genderLimit = data.genderLimit;
form.credentialLimits = (data.credentialLimits ?? []).map((item) => item.typeCode);
- form.beginTime = dayjs(data.beginTime).format('YYYY-MM-DD 00:00:00');
- form.endTime = dayjs(data.endTime).format('YYYY-MM-DD 23:59:59');
+ form.beginTime = dayjs(data.beginTime).format('YYYY-MM-DD');
+ form.endTime = dayjs(data.endTime).format('YYYY-MM-DD');
form.addressDetail = data.addressDetail;
form.weMapInfo = {
provinceName: data.provinceContent,
@@ -315,8 +635,65 @@
latitude: data.latitude,
longitude: data.longitude,
addressName: data.addressName,
+ address: data.addressName,
};
+ form.description = data.description;
+ form.verifyWorkHours = data.verifyWorkHours;
+ form.timeoutServiceFee = data.timeoutServiceFee;
+ form.checkReceiveMethods = data.checkReceiveMethods;
+ form.applyBeginTime = dayjs(data.applyBeginTime).format('YYYY-MM-DD');
+ form.applyEndTime = dayjs(data.applyEndTime).format('YYYY-MM-DD');
+ form.settlementAccess = data.settlementAccess;
+
+ if (!!data.timeoutServiceFee) {
+ calcTaskTotalServiceFee();
+ }
},
+});
+
+async function calcTaskTotalServiceFee() {
+ try {
+ if (!form.beginTime || !form.endTime) {
+ return;
+ }
+ if (form.billingMethod !== EnumBillingMethod.Piece && !form.needPeopleNumber) {
+ return;
+ }
+ let params: API.CalcTaskTotalServiceFeeCommand = {
+ billingMethod: form.billingMethod,
+ serviceFee: form.serviceFee,
+ verifyWorkHours: form.verifyWorkHours,
+ totalPieceQuantity: form.totalPieceQuantity,
+ needPeopleNumber: form.needPeopleNumber,
+ beginTime: dayjs(form.beginTime).format('YYYY-MM-DD 00:00:00'),
+ endTime: dayjs(form.endTime).format('YYYY-MM-DD 23:59:59'),
+ };
+ let res = await taskServices.calcTaskTotalServiceFee(params, { showLoading: false });
+ if (res) {
+ form.totalServiceFee = res.totalServiceFee;
+ }
+ } catch (error) {}
+}
+
+const totalServiceFee = computed(() => {
+ if (!form.beginTime || !form.endTime) {
+ return 0;
+ }
+ var days = dayjs(form.endTime).diff(dayjs(form.beginTime), 'day') + 1;
+ const serviceFee = form.serviceFee || 0;
+ const needPeopleNumber = form.needPeopleNumber || 0;
+ switch (form.billingMethod) {
+ case EnumBillingMethod.Month:
+ return serviceFee * Math.round(days / 30) * needPeopleNumber;
+ case EnumBillingMethod.Day:
+ return serviceFee * days * needPeopleNumber;
+ case EnumBillingMethod.Hour:
+ return serviceFee * (form.verifyWorkHours || 0) * days * needPeopleNumber;
+ case EnumBillingMethod.Piece:
+ return serviceFee * (form.totalPieceQuantity || 0);
+ default:
+ return 0;
+ }
});
const formRef = ref<any>(null);
@@ -331,11 +708,17 @@
async function confirm() {
try {
+ await calcTaskTotalServiceFee();
+
let params: API.SaveTaskInfoCommand = {
+ supplierEnterpriseId: form.supplierEnterpriseId,
name: form.name,
+ needPeopleNumber: form.needPeopleNumber,
billingMethod: form.billingMethod,
serviceFee: form.serviceFee,
+ totalPieceQuantity: form.totalPieceQuantity,
settlementCycle: form.settlementCycle,
+ settlementDate: form.settlementDate ? form.settlementDate : 0,
benefits: form.benefits,
ageMinLimit: form.ageMinLimit,
ageMaxLimit: form.ageMaxLimit,
@@ -349,6 +732,13 @@
latitude: form.weMapInfo.latitude,
beginTime: dayjs(form.beginTime).format('YYYY-MM-DD 00:00:00'),
endTime: dayjs(form.endTime).format('YYYY-MM-DD 23:59:59'),
+ description: form.description,
+ verifyWorkHours: form.verifyWorkHours,
+ timeoutServiceFee: form.timeoutServiceFee,
+ checkReceiveMethods: form.checkReceiveMethods,
+ applyBeginTime: dayjs(form.applyBeginTime).format('YYYY-MM-DD 00:00:00'),
+ applyEndTime: dayjs(form.applyEndTime).format('YYYY-MM-DD 23:59:59'),
+ settlementAccess: form.settlementAccess,
};
if (isEdit) {
params.id = taskId;
@@ -356,15 +746,38 @@
if (isCopy) {
params.id = '';
}
- let res = await taskServices.saveTaskInfo(params);
+ let res = await taskServices.saveTaskInfo(params, { skipErrorHandler: true });
if (res) {
- Message.success(isEdit ? '缂栬緫鎴愬姛' : '鍙戝竷鎴愬姛', {
+ Message.success(isEdit && !isCopy ? '缂栬緫鎴愬姛' : '鍙戝竷鎴愬姛', {
onClosed() {
goBack();
},
});
}
- } catch (error) {}
+ } catch (error) {
+ if (error?.info?.errorCode == 'BalanceNotEnough') {
+ await Message.confirm({
+ message: `鎮ㄥ綋鍓嶈处鎴蜂綑棰濅笉瓒筹紝鏆傛椂鏃犳硶鍙戝竷浠诲姟锛岃鐧诲綍瀹㈡埛绔悗鍙板厖鍊煎悗鎿嶄綔`,
+ showCancelBtn: false,
+ });
+ } else {
+ Message.error(error);
+ }
+ }
+}
+
+function timeChange() {
+ form.applyBeginTime = '';
+ form.applyEndTime = '';
+ calcTaskTotalServiceFee();
+}
+
+function applyTimeChange() {
+ form.applyEndTime = '';
+}
+
+function settleTypeChange() {
+ form.settlementDate = null as number;
}
function handleCancel() {
--
Gitblit v1.9.1