From 903afe339142785105c6aa2285b96b519e7d557d Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期一, 10 十一月 2025 10:13:54 +0800
Subject: [PATCH] fix: bug

---
 apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue |  477 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 432 insertions(+), 45 deletions(-)

diff --git a/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue
index 9d19582..d248026 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(form.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 taskId = router.params?.id ?? '';
 const isEdit = !!taskId;
 const isCopy = router.params?.isCopy === 'true';
-console.log('isCopy: ', router.params?.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,54 @@
       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: '璇烽�夋嫨楠屾敹鏂瑰紡',
+    },
+  ],
+});
+
+const { settlementAccessList } = useEnterpriseWalletAccessSelect({
+  supplierEnterpriseId: computed(() => form.supplierEnterpriseId),
 });
 
 const {
@@ -295,17 +607,21 @@
   placeholderData: () => ({} as API.GetTaskInfoQueryResult),
   enabled: isEdit,
   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,
@@ -316,8 +632,43 @@
       longitude: data.longitude,
       addressName: 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 formRef = ref<any>(null);
 function handleConfirm() {
@@ -331,11 +682,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 +706,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 +720,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