From 5fc0cba8af1a9e9b1cc41fa65c8a4db89e82ee3e Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期五, 08 八月 2025 13:22:10 +0800
Subject: [PATCH] fix: 任务发布

---
 apps/bMiniApp/src/utils/request/index.ts                     |   13 ++-
 packages/components/src/Input/ChooseInputWithDatePicker.vue  |    2 
 apps/cMiniApp/src/pages/home/index.vue                       |    4 
 packages/constants/task.ts                                   |   10 ++
 apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue |   21 +++-
 apps/cMiniApp/src/utils/request/index.ts                     |   13 ++-
 apps/cMiniApp/src/hooks/task.ts                              |   38 +++++++--
 apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue           |   29 +++++--
 packages/components/src/Input/ChooseInputWithPicker.vue      |    2 
 apps/bMiniApp/src/pages/home/index.vue                       |   40 +++++++---
 apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue           |   10 +
 11 files changed, 128 insertions(+), 54 deletions(-)

diff --git a/apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue b/apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue
index 0fd23a4..5a67ad8 100644
--- a/apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue
+++ b/apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue
@@ -2,7 +2,11 @@
   <QueryMenuView @close="handleReset" @confirm="emit('close')" cancelText="閲嶇疆">
     <div class="home-query-menu-view">
       <QueryMenuItem title="鎬у埆">
-        <ProRadio v-model="query.gender" :value-enum="GenderText" show-all-btn></ProRadio>
+        <ProRadio
+          v-model="query.genderLimit"
+          :value-enum="EnumUserGenderText"
+          show-all-btn
+        ></ProRadio>
       </QueryMenuItem>
       <QueryMenuItem title="韬唤">
         <ProRadio v-model="query.identity" :value-enum="identityList" show-all-btn></ProRadio>
@@ -35,7 +39,7 @@
 
 <script setup lang="ts">
 import { QueryMenuView, QueryMenuItem, ProRadio } from '@12333/components';
-import { GenderText, CategoryCode } from '@12333/constants';
+import { EnumUserGenderText, CategoryCode } from '@12333/constants';
 import { useDictionaryDataSelect } from '@12333/hooks';
 
 defineOptions({
@@ -60,7 +64,7 @@
 }>();
 
 const query = defineModel<{
-  gender: number | string;
+  genderLimit: number | string;
   age: number[];
   identity: string;
   certificateType: string;
diff --git a/apps/bMiniApp/src/pages/home/index.vue b/apps/bMiniApp/src/pages/home/index.vue
index c62da08..6156d7f 100644
--- a/apps/bMiniApp/src/pages/home/index.vue
+++ b/apps/bMiniApp/src/pages/home/index.vue
@@ -74,8 +74,13 @@
 import { ProTabs, ProTabPane, FlexJobCard } from '@12333/components';
 import { HomeOrderType } from './constants';
 import { useInfiniteLoading } from '@12333/hooks';
-import { OrderInputType, Gender } from '@12333/constants';
-import * as flexWorkerServices from '@12333/services/api/FlexWorker';
+import {
+  EnumPagedListOrder,
+  EnumTaskRecommendStatus,
+  EnumTaskReleaseStatus,
+  EnumUserGender,
+} from '@12333/constants';
+import * as taskServices from '@12333/services/apiV2/task';
 import _ from 'lodash';
 import HomeQueryMenuView from './HomeQueryMenuView.vue';
 import HomeQueryPositionMenuView from './HomeQueryPositionMenuView.vue';
@@ -87,7 +92,7 @@
 const userStore = useUserStore();
 
 const queryMenuState = reactive({
-  gender: '' as any as Gender,
+  genderLimit: '' as any as EnumUserGender,
   age: [15, 65],
   identity: '',
   certificateType: '',
@@ -103,25 +108,36 @@
 
 const { infiniteLoadingProps } = useInfiniteLoading(
   ({ pageParam }) => {
-    let params: API.GetFlexTaskListInput = {
+    let params: API.GetTaskInfosQuery = {
       pageModel: {
         rows: 20,
         page: pageParam,
-        orderInput: [{ property: 'taskId', order: OrderInputType.Desc }],
+        orderInput: [
+          queryState.orderType === HomeOrderType.Recommend
+            ? { property: 'createdTime', order: EnumPagedListOrder.Desc }
+            : {},
+        ],
       },
+      // keywords: 'string',
+      // time: '2025-08-08T02:58:58.756Z',
+      // cityCode: 'string',
+      // settlementCycle: 10,
+      // benefitCodes: ['string'],
+      genderLimit: queryMenuState.genderLimit,
+      // status: 10,
+      releaseStatus: EnumTaskReleaseStatus.InProcess,
     };
 
-    return flexWorkerServices.getFlexTaskWorkerArrangeList(params, {
+    if (queryState.orderType === HomeOrderType.Recommend) {
+      params.recommendStatus = EnumTaskRecommendStatus.Yes;
+    }
+
+    return taskServices.getTaskInfos(params, {
       showLoading: false,
     });
   },
   {
-    queryKey: [
-      'flexWorkerServices/getFlexTaskByArrange',
-      queryState,
-      queryMenuState,
-      queryPositionState,
-    ],
+    queryKey: ['taskServices/getTaskInfos', queryState, queryMenuState, queryPositionState],
   }
 );
 
diff --git a/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue
index 8e810c9..5f50ad4 100644
--- a/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue
@@ -20,11 +20,11 @@
       </nut-form-item>
       <nut-form-item label=" " class="bole-form-item" prop="serviceFee" label-width="0">
         <div class="bole-form-input-wrapper">
-          <nut-input
+          <NumberInput
             v-model.trim="form.serviceFee"
             class="nut-input-text bole-input-text"
             placeholder="璇疯緭鍏ユ湇鍔¤垂"
-            type="text"
+            :min="0"
           />
           <div class="form-input-unit">{{ BillingMethodEnumUnit[form.billingMethod] }}</div>
         </div>
@@ -83,7 +83,7 @@
         <ChooseInputWithPicker
           v-model="form.genderLimit"
           placeholder="璇烽�夋嫨鎬у埆瑕佹眰"
-          :value-enum="EnumUserGenderText"
+          :value-enum="EnumUserGenderTextOptions"
         />
       </nut-form-item>
       <nut-form-item
@@ -122,10 +122,16 @@
         prop="beginTime"
         label-width="90px"
       >
-        <ChooseInputWithDatePicker v-model="form.beginTime"></ChooseInputWithDatePicker>
+        <ChooseInputWithDatePicker
+          v-model="form.beginTime"
+          :minDate="nowDate"
+        ></ChooseInputWithDatePicker>
       </nut-form-item>
       <nut-form-item label="浠诲姟缁撴潫鏃ユ湡:" class="bole-form-item" prop="endTime" label-width="90px">
-        <ChooseInputWithDatePicker v-model="form.endTime"></ChooseInputWithDatePicker>
+        <ChooseInputWithDatePicker
+          v-model="form.endTime"
+          :minDate="nowDate"
+        ></ChooseInputWithDatePicker>
       </nut-form-item>
     </nut-form>
   </ContentScrollView>
@@ -146,6 +152,7 @@
   EnumUserGenderText,
   EnumSettlementCycleText,
   BillingMethodEnumUnit,
+  EnumUserGenderTextOptions,
 } from '@12333/constants';
 import {
   ChooseInputWithPicker,
@@ -177,6 +184,8 @@
 const isEdit = !!taskId;
 const isCopy = router.params?.isCopy === 'true';
 console.log('isCopy: ', router.params?.isCopy);
+
+const nowDate = dayjs().toDate();
 
 const { dictionaryDataList: WelfareTypeList } = useDictionaryDataSelect({
   categoryCode: CategoryCode.Welfare,
@@ -345,7 +354,7 @@
 }
 
 function handleCancel() {
-  Taro.navigateBack();
+  goBack();
 }
 </script>
 
diff --git a/apps/bMiniApp/src/utils/request/index.ts b/apps/bMiniApp/src/utils/request/index.ts
index 339d938..6f6fa4b 100644
--- a/apps/bMiniApp/src/utils/request/index.ts
+++ b/apps/bMiniApp/src/utils/request/index.ts
@@ -115,6 +115,9 @@
         const errorInfo: ErrorInfo | undefined = (error as any).info;
         if (errorInfo) {
           const { errorMessage, errorCode } = errorInfo;
+          if (Number(errorCode) === 401) {
+            handleLogout();
+          }
           switch (errorInfo.showType) {
             case ErrorShowType.SILENT:
               // do nothing
@@ -138,7 +141,7 @@
       } else if ((error as AxiosError<ResponseStructure, IRequestOptions>).response) {
         // Axios 鐨勯敊璇�
         // 璇锋眰鎴愬姛鍙戝嚭涓旀湇鍔″櫒涔熷搷搴斾簡鐘舵�佺爜锛屼絾鐘舵�佷唬鐮佽秴鍑轰簡 2xx 鐨勮寖鍥�
-        handleAxiosResponseError(error as AxiosError<ErrorResponse, IRequestOptions>);
+        handleAxiosResponseError(error as AxiosError<ResponseStructure, IRequestOptions>);
         // Message.errorMessage(`Response status:${(error as AxiosError).response.status}`);
       } else if ((error as AxiosError).request) {
         // 璇锋眰宸茬粡鎴愬姛鍙戣捣锛屼絾娌℃湁鏀跺埌鍝嶅簲
@@ -251,17 +254,17 @@
   [505]: 'HTTP鐗堟湰涓嶅彈鏀寔',
 };
 
-function handleAxiosResponseError(error: AxiosError<ErrorResponse, IRequestOptions>) {
+function handleAxiosResponseError(error: AxiosError<ResponseStructure, IRequestOptions>) {
   if (error.response.config.url.toLowerCase().includes(RefreshTokenUrl.toLowerCase())) {
     handleLogout();
     return;
   }
   if (error && error.response) {
     let message = ErrorMessageMap[error.response?.status] ?? '璇锋眰閿欒';
-    if (error.response.data?.error?.message) {
-      message = error.response.data?.error?.message;
+    if (error.response.data?.msg) {
+      message = error.response.data?.msg;
     }
-    if (error.response?.status === 401) {
+    if (error.response?.status === 401 || error.response.data.code === 401) {
       handleLogout();
     }
 
diff --git a/apps/cMiniApp/src/hooks/task.ts b/apps/cMiniApp/src/hooks/task.ts
index 91b37c3..d8414e1 100644
--- a/apps/cMiniApp/src/hooks/task.ts
+++ b/apps/cMiniApp/src/hooks/task.ts
@@ -1,9 +1,16 @@
 import { useInfiniteLoading } from '@12333/hooks';
-import { OrderInputType, Gender } from '@12333/constants';
-import * as flexWorkerServices from '@12333/services/api/FlexWorker';
+import {
+  EnumPagedListOrder,
+  EnumSettlementCycle,
+  EnumTaskRecommendStatus,
+  EnumTaskReleaseStatus,
+  EnumTaskStatus,
+  EnumUserGender,
+} from '@12333/constants';
 import _ from 'lodash';
 import { trim } from '@12333/utils';
 import { MaybeRef } from 'vue';
+import * as taskServices from '@12333/services/apiV2/task';
 
 export enum HomeOrderType {
   Recommend = 'Recommend',
@@ -20,13 +27,15 @@
   const searchValue = ref('');
 
   const queryMenuState = reactive({
-    gender: '' as any as Gender,
+    genderLimit: '' as any as EnumUserGender,
+    settlementCycle: '' as any as EnumSettlementCycle,
+    benefitCodes: '',
+    status: '' as any as EnumTaskStatus,
   });
 
   const queryState = reactive({
     searchValueTrim: '',
     orderType: HomeOrderType.Recommend,
-    companyId: '',
   });
 
   const handleSearch = _.debounce(function () {
@@ -35,24 +44,35 @@
 
   const { infiniteLoadingProps } = useInfiniteLoading(
     ({ pageParam }) => {
-      let params: API.GetFlexTaskListInput = {
+      let params: API.GetTaskInfosQuery = {
         pageModel: {
           rows: 20,
           page: pageParam,
           orderInput: [
             queryState.orderType === HomeOrderType.Recommend
-              ? { property: 'creationTime', order: OrderInputType.Desc }
-              : { property: 'lastShelfTime', order: OrderInputType.Desc },
+              ? { property: 'createdTime', order: EnumPagedListOrder.Desc }
+              : {},
           ],
         },
+        keywords: queryState.searchValueTrim,
+        // cityCode: 'string',
+        settlementCycle: queryMenuState.settlementCycle,
+        benefitCodes: [queryMenuState.benefitCodes].filter(Boolean),
+        genderLimit: queryMenuState.genderLimit,
+        status: queryMenuState.status,
+        releaseStatus: EnumTaskReleaseStatus.InProcess,
       };
 
-      return flexWorkerServices.getFlexTaskByArrange(params, {
+      if (queryState.orderType === HomeOrderType.Recommend) {
+        params.recommendStatus = EnumTaskRecommendStatus.Yes;
+      }
+
+      return taskServices.getTaskInfos(params, {
         showLoading: false,
       });
     },
     {
-      queryKey: ['flexWorkerServices/getFlexTaskByArrange', queryState, queryMenuState, cityName],
+      queryKey: ['taskServices/getTaskInfos', queryState, queryMenuState, cityName],
     }
   );
 
diff --git a/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue b/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue
index 20ce0a2..92e012a 100644
--- a/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue
+++ b/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue
@@ -3,16 +3,20 @@
     <div class="home-query-menu-view">
       <QueryMenuItem title="缁撶畻鏂瑰紡">
         <ProRadio
-          v-model="query.gender"
-          :value-enum="FlexTaskSettleTypeEnumText"
+          v-model="query.settlementCycle"
+          :value-enum="EnumSettlementCycleText"
           show-all-btn
         ></ProRadio>
       </QueryMenuItem>
       <QueryMenuItem title="鍛樺伐绂忓埄">
-        <ProRadio v-model="query.gender" :value-enum="WelfareList" show-all-btn></ProRadio>
+        <!-- <ProRadio v-model="query.benefitCodes" :value-enum="welfareList" show-all-btn></ProRadio> -->
       </QueryMenuItem>
       <QueryMenuItem title="鎬у埆瑕佹眰">
-        <ProRadio v-model="query.gender" :value-enum="GenderText" show-all-btn></ProRadio>
+        <ProRadio
+          v-model="query.genderLimit"
+          :value-enum="EnumUserGenderText"
+          show-all-btn
+        ></ProRadio>
       </QueryMenuItem>
     </div>
   </QueryMenuView>
@@ -20,8 +24,13 @@
 
 <script setup lang="ts">
 import { QueryMenuView, QueryMenuItem, ProRadio } from '@12333/components';
-import { GenderText, SearchType, FlexTaskSettleTypeEnumText } from '@12333/constants';
-import { useSearchSettingType } from '@12333/hooks';
+import {
+  EnumUserGenderText,
+  EnumSettlementCycle,
+  CategoryCode,
+  EnumSettlementCycleText,
+} from '@12333/constants';
+import { useDictionaryDataSelect } from '@12333/hooks';
 
 defineOptions({
   name: 'HomeQueryMenuView',
@@ -31,8 +40,8 @@
 
 // const props = withDefaults(defineProps<Props>(), {});
 
-const { searchSettingTypeList: WelfareList } = useSearchSettingType({
-  searchType: SearchType.Welfare,
+const { dictionaryDataList: welfareList } = useDictionaryDataSelect({
+  categoryCode: CategoryCode.Welfare,
 });
 
 const emit = defineEmits<{
@@ -41,7 +50,9 @@
 }>();
 
 const query = defineModel<{
-  gender: number | string;
+  genderLimit: number | string;
+  settlementCycle: EnumSettlementCycle;
+  benefitCodes: string;
 }>('query');
 
 const DefaultQuery = {
diff --git a/apps/cMiniApp/src/pages/home/index.vue b/apps/cMiniApp/src/pages/home/index.vue
index de26f12..f9c3298 100644
--- a/apps/cMiniApp/src/pages/home/index.vue
+++ b/apps/cMiniApp/src/pages/home/index.vue
@@ -20,13 +20,13 @@
           <div class="city-btn-text">{{ locationCity }}</div>
         </div>
       </div>
-      <div class="home-banner-wrapper">
+      <!-- <div class="home-banner-wrapper">
         <nut-swiper :auto-play="3000">
           <nut-swiper-item v-for="(item, index) in list" :key="index">
             <img :src="item" class="banner-img" draggable="false" />
           </nut-swiper-item>
         </nut-swiper>
-      </div>
+      </div> -->
     </div>
     <ProTabs
       v-model="queryState.orderType"
diff --git a/apps/cMiniApp/src/utils/request/index.ts b/apps/cMiniApp/src/utils/request/index.ts
index 339d938..6f6fa4b 100644
--- a/apps/cMiniApp/src/utils/request/index.ts
+++ b/apps/cMiniApp/src/utils/request/index.ts
@@ -115,6 +115,9 @@
         const errorInfo: ErrorInfo | undefined = (error as any).info;
         if (errorInfo) {
           const { errorMessage, errorCode } = errorInfo;
+          if (Number(errorCode) === 401) {
+            handleLogout();
+          }
           switch (errorInfo.showType) {
             case ErrorShowType.SILENT:
               // do nothing
@@ -138,7 +141,7 @@
       } else if ((error as AxiosError<ResponseStructure, IRequestOptions>).response) {
         // Axios 鐨勯敊璇�
         // 璇锋眰鎴愬姛鍙戝嚭涓旀湇鍔″櫒涔熷搷搴斾簡鐘舵�佺爜锛屼絾鐘舵�佷唬鐮佽秴鍑轰簡 2xx 鐨勮寖鍥�
-        handleAxiosResponseError(error as AxiosError<ErrorResponse, IRequestOptions>);
+        handleAxiosResponseError(error as AxiosError<ResponseStructure, IRequestOptions>);
         // Message.errorMessage(`Response status:${(error as AxiosError).response.status}`);
       } else if ((error as AxiosError).request) {
         // 璇锋眰宸茬粡鎴愬姛鍙戣捣锛屼絾娌℃湁鏀跺埌鍝嶅簲
@@ -251,17 +254,17 @@
   [505]: 'HTTP鐗堟湰涓嶅彈鏀寔',
 };
 
-function handleAxiosResponseError(error: AxiosError<ErrorResponse, IRequestOptions>) {
+function handleAxiosResponseError(error: AxiosError<ResponseStructure, IRequestOptions>) {
   if (error.response.config.url.toLowerCase().includes(RefreshTokenUrl.toLowerCase())) {
     handleLogout();
     return;
   }
   if (error && error.response) {
     let message = ErrorMessageMap[error.response?.status] ?? '璇锋眰閿欒';
-    if (error.response.data?.error?.message) {
-      message = error.response.data?.error?.message;
+    if (error.response.data?.msg) {
+      message = error.response.data?.msg;
     }
-    if (error.response?.status === 401) {
+    if (error.response?.status === 401 || error.response.data.code === 401) {
       handleLogout();
     }
 
diff --git a/packages/components/src/Input/ChooseInputWithDatePicker.vue b/packages/components/src/Input/ChooseInputWithDatePicker.vue
index f14b604..2b21ef6 100644
--- a/packages/components/src/Input/ChooseInputWithDatePicker.vue
+++ b/packages/components/src/Input/ChooseInputWithDatePicker.vue
@@ -15,6 +15,7 @@
 
 type Props = {
   modelValue: string | number;
+  minDate?: Date;
 };
 
 const props = withDefaults(defineProps<Props>(), {});
@@ -47,6 +48,7 @@
                     emit('update:modelValue', dayjs(selectedValue).format('YYYY-MM-DD'));
                     onClose();
                   },
+                  minDate: props.minDate,
                 }),
             }
           ),
diff --git a/packages/components/src/Input/ChooseInputWithPicker.vue b/packages/components/src/Input/ChooseInputWithPicker.vue
index e89cb4e..1d07b64 100644
--- a/packages/components/src/Input/ChooseInputWithPicker.vue
+++ b/packages/components/src/Input/ChooseInputWithPicker.vue
@@ -22,7 +22,7 @@
 
 const props = withDefaults(defineProps<Props>(), {
   enumLabelKey: 'label',
-  enumValueKey: 'code',
+  enumValueKey: 'value',
 });
 
 const emit = defineEmits<{
diff --git a/packages/constants/task.ts b/packages/constants/task.ts
index f3552ac..ccc95e1 100644
--- a/packages/constants/task.ts
+++ b/packages/constants/task.ts
@@ -8,8 +8,14 @@
 };
 
 export const EnumUserGenderText = {
-  [EnumUserGender.Male]: '鐢�',
-  [EnumUserGender.Female]: '濂�',
+  [EnumUserGender.Male]: '浠呴檺鐢锋��',
+  [EnumUserGender.Female]: '浠呴檺濂虫��',
+};
+
+export const EnumUserGenderTextOptions = {
+  [0]: '涓嶉檺',
+  [EnumUserGender.Male]: '浠呴檺鐢锋��',
+  [EnumUserGender.Female]: '浠呴檺濂虫��',
 };
 
 export const EnumSettlementCycleText = {

--
Gitblit v1.9.1