From 286f1b727856d6b32a8d237f353ae008f3076deb Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期二, 11 三月 2025 17:48:15 +0800
Subject: [PATCH] feat: 接口对接

---
 apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue |  176 ++++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 138 insertions(+), 38 deletions(-)

diff --git a/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue
index 0b3ad58..738ce69 100644
--- a/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue
@@ -6,10 +6,11 @@
       </nut-form-item>
       <nut-form-item
         label="鏈嶅姟璐�:"
-        class="bole-form-item"
+        class="bole-form-item alignTop"
         prop="feeType"
         required
         label-width="90px"
+        label-position="top"
       >
         <nut-radio-group v-model="form.feeType" direction="horizontal">
           <BlRadio :label="Number(key)" v-for="(val, key) in FlexTaskFeeTypeEnumText" :key="key">{{
@@ -17,7 +18,7 @@
           }}</BlRadio>
         </nut-radio-group>
       </nut-form-item>
-      <nut-form-item label=" " class="bole-form-item" prop="fee" label-width="90px">
+      <nut-form-item label=" " class="bole-form-item" prop="fee" label-width="0">
         <div class="bole-form-input-wrapper">
           <nut-input
             v-model.trim="form.fee"
@@ -44,55 +45,62 @@
           >
         </nut-radio-group>
       </nut-form-item>
-      <nut-form-item label="绂忓埄:" class="bole-form-item" prop="listAideIds" label-width="90px">
-        <ChooseInputWithPicker
+      <nut-form-item label="绂忓埄:" class="bole-form-item" prop="settleType" label-width="90px">
+        <ChooseInputWithCheckbox
           v-model="form.listAideIds"
+          title="璇烽�夋嫨绂忓埄"
+          :columns="WelfareTypeList"
           placeholder="璇烽�夋嫨绂忓埄"
-          :value-enum="TaskStatusText"
         />
       </nut-form-item>
       <nut-form-item
         label="骞撮緞鑼冨洿:"
         class="bole-form-item"
-        prop="ageStart"
+        prop="minAge"
         required
         label-width="90px"
       >
         <div class="bole-form-input-wrapper">
           <NumberInput
-            v-model.trim="form.ageStart"
+            v-model.trim="form.minAge"
             class="nut-input-text bole-input-text"
             placeholder="璇烽�夋嫨骞撮緞鑼冨洿"
             :min="1"
           />
           <div class="form-input-separator">鑷�</div>
           <NumberInput
-            v-model.trim="form.ageEnd"
+            v-model.trim="form.maxAge"
             class="nut-input-text bole-input-text"
             placeholder="璇烽�夋嫨骞撮緞鑼冨洿"
             :min="1"
           />
         </div>
       </nut-form-item>
-      <nut-form-item label="鎬у埆:" class="bole-form-item" prop="welfare" label-width="90px">
+      <nut-form-item label="鎬у埆:" class="bole-form-item" prop="sexType" label-width="90px">
         <ChooseInputWithPicker
-          v-model="form.welfare"
+          v-model="form.sexType"
           placeholder="璇烽�夋嫨鎬у埆瑕佹眰"
-          :value-enum="TaskStatusText"
+          :value-enum="GenderText"
         />
       </nut-form-item>
-      <nut-form-item label="璧勬牸璇佷功:" class="bole-form-item" prop="welfare" label-width="90px">
-        <ChooseInputWithPicker
-          v-model="form.welfare"
-          placeholder="璇烽�夋嫨瑕佹眰鐨勮祫鏍艰瘉涔�"
-          :value-enum="TaskStatusText"
+      <nut-form-item label="璧勬牸璇佷功:" class="bole-form-item" prop="settleType" label-width="90px">
+        <ChooseInputWithCheckbox
+          v-model="form.listCertionIds"
+          title="璇烽�夋嫨璧勬牸璇佷功"
+          :columns="CertificateTypeList"
+          placeholder="璇烽�夋嫨璧勬牸璇佷功"
         />
       </nut-form-item>
-      <nut-form-item label="浠诲姟鍦扮偣" class="bole-form-item" prop="weMapInfo" required>
-        <ChooseLocationInput placeholder="璇烽�夋嫨浠诲姟鎵�鍦ㄥ湴" v-model="form.weMapInfo" />
+      <nut-form-item label="浠诲姟鍦扮偣" class="bole-form-item" prop="areaList" required>
+        <!-- <ChooseLocationInput placeholder="璇烽�夋嫨浠诲姟鎵�鍦ㄥ湴" v-model="form.weMapInfo" /> -->
+        <ChooseInputWithAreaPicker
+          :columns="areaTreeList"
+          v-model="form.areaList"
+          placeholder="璇烽�夋嫨鎵�鍦ㄥ湴鍖�"
+        ></ChooseInputWithAreaPicker>
       </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 label="璇︾粏鍦板潃:" class="bole-form-item" prop="address" label-width="90px">
+        <nut-input v-model="form.address" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"> </nut-input>
       </nut-form-item>
       <nut-form-item
         label="浠诲姟寮�濮嬫棩鏈�:"
@@ -115,8 +123,6 @@
 
 <script setup lang="ts">
 import {
-  TaskStatus,
-  TaskStatusText,
   FlexTaskSettleTypeEnum,
   FlexTaskSettleTypeEnumText,
   FlexTaskFeeTypeEnum,
@@ -130,21 +136,37 @@
   NumberInput,
   ChooseLocationInput,
   Radio as BlRadio,
+  ChooseInputWithAreaPicker,
+  ChooseInputWithCheckbox,
 } from '@12333/components';
 import { FormValidator, Message } from '@12333/utils';
 import * as flexWorkerServices from '@12333/services/api/FlexWorker';
 import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
 import Taro from '@tarojs/taro';
 import { goBack } from '@/utils';
+import { Gender, GenderText, SearchType } from '@12333/constants';
+import { useAllAreaList, useSearchSettingType } from '@12333/hooks';
+import { useQuery } from '@tanstack/vue-query';
+import dayjs from 'dayjs';
 
 defineOptions({
   name: 'InnerPage',
 });
 
 const { userDetail } = useUser();
+const { areaTreeList } = useAllAreaList();
 const router = Taro.useRouter();
 const taskId = router.params?.taskId ?? '';
-const isEdit = computed(() => !!taskId);
+const isEdit = !!taskId;
+const isCopy = router.params?.isCopy === 'true';
+console.log('isCopy: ', router.params?.isCopy);
+
+const { searchSettingTypeList: WelfareTypeList } = useSearchSettingType({
+  searchType: SearchType.Welfare,
+});
+const { searchSettingTypeList: CertificateTypeList } = useSearchSettingType({
+  searchType: SearchType.CertificateType,
+});
 
 const form = reactive({
   taskName: '',
@@ -152,43 +174,101 @@
   fee: 0,
   settleType: FlexTaskSettleTypeEnum.OfMonth,
   listAideIds: [] as string[],
-
-  welfare: TaskStatus.All,
-  salaryTimeType: SalaryTimeTypeEnum.Month,
-  salaryType: SalaryType.month,
+  minAge: 0,
+  maxAge: 0,
+  sexType: Gender.Male,
+  listCertionIds: [] as string[],
+  address: '',
   startDate: '',
   endDate: '',
-  ageStart: '',
-  ageEnd: '',
+  areaList: [] as number[],
+
   weMapInfo: {} as WeMapModel,
 });
 
 const rules = reactive<FormRules>({
   taskName: [{ required: true, message: '璇疯緭鍏ヤ换鍔″悕绉�' }],
 
-  weMapInfo: [
-    { required: true, message: '璇疯缃伐浣滃湴鐐�', validator: FormValidator.validatorWeMap },
+  // weMapInfo: [
+  //   { required: true, message: '璇疯缃伐浣滃湴鐐�', validator: FormValidator.validatorWeMap },
+  // ],
+  areaList: [
+    { required: true, message: '娓呮坊鍔犲伐浣滃湴鐐�', validator: FormValidator.validatorArray },
   ],
 
-  ageStart: [
+  minAge: [
     {
       required: true,
       message: '璇疯緭鍏ュ勾榫勮姹�',
       validator: () => {
-        if (!form.ageStart) {
+        if (!form.minAge) {
           return Promise.reject('璇疯緭鍏ュ勾榫勮姹�');
         }
-        if (!form.ageEnd) {
+        if (!form.maxAge) {
           return Promise.reject('璇疯緭鍏ュ勾榫勮姹�');
         }
-        if (Number(form.ageEnd) <= Number(form.ageStart)) {
+        if (Number(form.maxAge) <= Number(form.minAge)) {
           return Promise.reject('鏈�澶у勾榫勪笉鑳藉皬浜庢渶灏忓勾榫�');
         }
         return Promise.resolve(true);
       },
     },
   ],
+
+  startDate: [
+    {
+      required: true,
+      message: '璇烽�夋嫨寮�濮嬫棩鏈�',
+    },
+  ],
+  endDate: [
+    {
+      required: true,
+      message: '璇烽�夋嫨缁撴潫鏃ユ湡',
+      validator(value) {
+        if (!value) return Promise.reject('璇烽�夋嫨缁撴潫鏃ユ湡');
+        if (value <= form.startDate) return Promise.reject('缁撴潫鏃ユ湡涓嶈兘灏忎簬寮�濮嬫棩鏈�');
+        return Promise.resolve(true);
+      },
+    },
+  ],
 });
+
+const {
+  isLoading,
+  isError,
+  data: detail,
+  refetch,
+} = useQuery({
+  queryKey: ['flexWorkerServices/getFlexTaskDto', taskId],
+  queryFn: async () => {
+    return await flexWorkerServices.getFlexTaskDto(
+      { id: taskId },
+      {
+        showLoading: false,
+      }
+    );
+  },
+  placeholderData: () => ({} as API.GetFlexTaskDtoOutput),
+  enabled: isEdit,
+  onSuccess(data) {
+    form.taskName = data.taskName;
+    form.feeType = data.feeType;
+    form.fee = data.fee;
+    form.settleType = data.settleType;
+    form.listAideIds = data.taskWeals?.length > 0 ? data.taskWeals.map((item) => item.id) : [];
+    form.minAge = data.minAge;
+    form.maxAge = data.maxAge;
+    form.sexType = data.sexType;
+    form.listCertionIds = data.taskCerts?.length > 0 ? data.taskCerts.map((item) => item.id) : [];
+    form.address = data.address;
+    form.startDate = dayjs(data.startDate).format('YYYY-MM-DD');
+    form.endDate = dayjs(data.endDate).format('YYYY-MM-DD');
+    form.areaList = [data.provinceId, data.cityId, data.areaId];
+    form.address = data.address;
+  },
+});
+
 const formRef = ref<any>(null);
 function handleConfirm() {
   if (!formRef.value) return;
@@ -203,14 +283,30 @@
   try {
     let params: API.AddEidtFlexTaskInput = {
       taskName: form.taskName,
-      feeType: form.salaryType,
+      feeType: form.feeType,
+      fee: form.fee,
+      settleType: form.settleType,
+      listAideIds: form.listAideIds,
+      minAge: form.minAge,
+      maxAge: form.maxAge,
+      sexType: form.sexType,
+      listCertionIds: form.listCertionIds,
+      address: form.address,
+      startDate: form.startDate,
+      endDate: form.endDate,
+      provinceId: form.areaList[0],
+      cityId: form.areaList[1],
+      areaId: form.areaList[2],
     };
-    if (isEdit.value) {
+    if (isEdit) {
       params.taskId = taskId;
+    }
+    if (isCopy) {
+      params.taskId = '';
     }
     let res = await flexWorkerServices.addEidtFlexTask(params);
     if (res) {
-      Message.success(isEdit.value ? '缂栬緫鎴愬姛' : '鍙戝竷鎴愬姛', {
+      Message.success(isEdit ? '缂栬緫鎴愬姛' : '鍙戝竷鎴愬姛', {
         onClosed() {
           goBack();
         },
@@ -238,5 +334,9 @@
     color: boleGetCssVar('text-color', 'primary');
     flex-shrink: 0;
   }
+
+  .form-input-separator {
+    margin-right: 10px;
+  }
 }
 </style>

--
Gitblit v1.9.1