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/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue                               |    2 
 apps/bMiniApp/src/constants/task.ts                                                              |   58 +++
 apps/cMiniApp/src/subpackages/mine/mineCancel/InnerPage.vue                                      |    2 
 apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue                          |   20 
 apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue                                      |   48 ++
 apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue                                        |    2 
 apps/bMiniApp/src/subpackages/task/publishTask/publishTask.vue                                   |    2 
 packages/components/src/Card/TaskPrice.vue                                                       |    3 
 apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/jobApplicationManage.vue |    6 
 packages/constants/dic.ts                                                                        |   56 --
 apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue                       |   24 
 apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue                                       |   23 
 packages/components/src/Card/TaskCard.vue                                                        |    7 
 apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue                                  |   34 +
 packages/components/src/Card/FlexJobTopView.vue                                                  |   27 +
 packages/hooks/area.ts                                                                           |   10 
 packages/components/src/index.ts                                                                 |    1 
 apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue                                     |  176 +++++++--
 apps/bMiniApp/src/subpackages/task/taskManage/taskManage.vue                                     |    2 
 packages/components/src/Input/ChooseInputWithCheckbox.vue                                        |   66 +++
 packages/components/src/Card/JobApplicationCard.vue                                              |  112 +++--
 packages/components/src/ActionSheet/CheckboxActionSheet.vue                                      |   86 ++++
 packages/components/src/Input/ChooseInputWithDatePicker.vue                                      |    1 
 apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue                        |   36 +
 apps/bMiniApp/src/subpackages/mine/mineFavorites/InnerPage.vue                                   |    2 
 apps/cMiniApp/src/hooks/task.ts                                                                  |    2 
 apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/InnerPage.vue                            |    2 
 apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue                                 |    2 
 apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue                                        |    2 
 apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue                                 |   40 +
 packages/services/api/typings.d.ts                                                               |   26 
 apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue                                   |   41 +
 apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue                          |    2 
 apps/bMiniApp/src/subpackages/mine/mineContactRecord/InnerPage.vue                               |    2 
 packages/components/src/Card/MyTaskCard.vue                                                      |   12 
 apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue            |  112 ++++-
 packages/components/src/Card/FlexJobCard.vue                                                     |   14 
 apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue                      |   40 +
 38 files changed, 840 insertions(+), 263 deletions(-)

diff --git a/apps/bMiniApp/src/constants/task.ts b/apps/bMiniApp/src/constants/task.ts
index 7dc7228..d0e14ad 100644
--- a/apps/bMiniApp/src/constants/task.ts
+++ b/apps/bMiniApp/src/constants/task.ts
@@ -71,3 +71,61 @@
   [FlexTaskSettleTypeEnum.OfWeek]: '鍛ㄧ粨',
   [FlexTaskSettleTypeEnum.OfDay]: '鏃ョ粨',
 };
+
+export enum FlexTaskReleaseStatusEnum {
+  /**
+   * 鍙戝竷涓�
+   */
+  Releasing = 10,
+  /**
+   * 宸插仠姝�
+   */
+  Stoping = 20,
+}
+
+export const FlexTaskReleaseStatusEnumText = {
+  [FlexTaskReleaseStatusEnum.Releasing]: '鍙戝竷涓�',
+  [FlexTaskReleaseStatusEnum.Stoping]: '宸插仠姝�',
+};
+
+export enum FlexTaskWorkerHireEnum {
+  /**
+   * 寰呭鐞�
+   */
+  Wait = 10,
+  /**
+   * 宸插綍鐢�
+   */
+  Hired = 20,
+  /**
+   * 宸茶阿缁�
+   */
+  Refused = 30,
+}
+
+export const FlexTaskWorkerHireEnumText = {
+  [FlexTaskWorkerHireEnum.Wait]: '寰呭鐞�',
+  [FlexTaskWorkerHireEnum.Hired]: '宸插綍鐢�',
+  [FlexTaskWorkerHireEnum.Refused]: '宸茶阿缁�',
+};
+
+export enum FlexTaskCheckAcceptStatusEnum {
+  /**
+   * 寰呴獙鏀�
+   */
+  Wait = 10,
+  /**
+   * 楠屾敹閫氳繃
+   */
+  Passed = 20,
+  /**
+   * 楠屾敹鏈�氳繃
+   */
+  Refused = 30,
+}
+
+export const FlexTaskCheckAcceptStatusEnumText = {
+  [FlexTaskCheckAcceptStatusEnum.Wait]: '寰呴獙鏀�',
+  [FlexTaskCheckAcceptStatusEnum.Passed]: '楠屾敹閫氳繃',
+  [FlexTaskCheckAcceptStatusEnum.Refused]: '楠屾敹鏈�氳繃',
+};
diff --git a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue
index 16454ef..2cc644d 100644
--- a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue
@@ -2,8 +2,15 @@
   <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
     <JobDetailContent :isCollapse="true">
       <template #footer>
-        <PageFooterBtn type="primary" plain>璋㈢粷</PageFooterBtn>
-        <PageFooterBtn type="primary">褰曠敤</PageFooterBtn>
+        <PageFooterBtn
+          type="primary"
+          plain
+          @click="taskWorkerHireRefuse(FlexTaskWorkerHireEnum.Refused)"
+          >璋㈢粷</PageFooterBtn
+        >
+        <PageFooterBtn type="primary" @click="taskWorkerHireRefuse(FlexTaskWorkerHireEnum.Hired)"
+          >褰曠敤</PageFooterBtn
+        >
       </template>
     </JobDetailContent>
   </LoadingLayout>
@@ -13,6 +20,8 @@
 import Taro from '@tarojs/taro';
 import { useQuery } from '@tanstack/vue-query';
 import * as flexWorkerServices from '@12333/services/api/FlexWorker';
+import { Message } from '@12333/utils';
+import { FlexTaskWorkerHireEnum } from '@/constants/task';
 
 defineOptions({
   name: 'InnerPage',
@@ -27,17 +36,34 @@
   data: detail,
   refetch,
 } = useQuery({
-  queryKey: ['flexWorkerServices/getOrdeForDetail', taskId],
+  queryKey: ['flexWorkerServices/getFlexTaskDto', taskId],
   queryFn: async () => {
-    return await flexWorkerServices.getOrdeForDetail(
+    return await flexWorkerServices.getFlexTaskDto(
       { id: taskId },
       {
         showLoading: false,
       }
     );
   },
-  placeholderData: () => ({} as API.OrderInfoDto),
+  placeholderData: () => ({} as API.GetFlexTaskDtoOutput),
 });
+
+async function taskWorkerHireRefuse(hireStatus: FlexTaskWorkerHireEnum) {
+  try {
+    let params: API.TaskWorkerHireRefuseInput = {
+      flexTaskId: taskId,
+      flexWorkerId: detail.value?.taskId,
+      hireStatus: hireStatus,
+    };
+    let res = await flexWorkerServices.taskWorkerHireRefuse(params);
+    if (res) {
+      Message.success('鎿嶄綔鎴愬姛');
+      refetch({
+        type: 'inactive',
+      });
+    }
+  } catch (error) {}
+}
 </script>
 
 <style lang="scss">
diff --git a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue
index 1ce13ca..65077aa 100644
--- a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue
@@ -59,7 +59,7 @@
       pageModel: {
         rows: 20,
         page: pageParam,
-        orderInput: [{ property: 'isRecommend', order: OrderInputType.Desc }],
+        orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
       },
     };
 
diff --git a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/InnerPage.vue b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/InnerPage.vue
index 4fd03da..da05e70 100644
--- a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/InnerPage.vue
@@ -52,7 +52,7 @@
       pageModel: {
         rows: 20,
         page: pageParam,
-        orderInput: [{ property: 'isRecommend', order: OrderInputType.Desc }],
+        orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
       },
     };
 
diff --git a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue
index a58e780..ceb504a 100644
--- a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue
+++ b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue
@@ -1,15 +1,21 @@
 <template>
   <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
     <ContentScrollView style="background-color: transparent">
-      <Cell :title="'瀹㈡埧鏈嶅姟鍛�'" titleSize="large">
-        <div class="taskDetail-time">2025骞�2鏈�5鏃� 鑷� 2025骞�3鏈�5鏃�</div>
+      <Cell :title="detail.taskName" titleSize="large">
+        <div class="taskDetail-time">
+          {{
+            `${dayjs(detail.startDate).format('YYYY骞碝M鏈圖D鏃�')}鑷�${dayjs(detail.endDate).format(
+              'YYYY骞碝M鏈圖D鏃�'
+            )}`
+          }}
+        </div>
         <div class="task-card-welfare-wrapper">
           <div class="task-card-welfare-list">
-            <div class="task-card-welfare-list-item">鏃ョ粨</div>
-            <div class="task-card-welfare-list-item">鐢峰コ涓嶉檺</div>
-            <div class="task-card-welfare-list-item">鍖呬笁椁�</div>
+            <div class="task-card-welfare-list-item">
+              {{ FlexTaskSettleTypeEnumText[detail.settleType] }}
+            </div>
           </div>
-          <TaskPrice :value="212" />
+          <TaskPrice :value="detail.fee" :unit="SalaryTimeTypeEnumUnit[detail.feeType]" />
         </div>
         <div class="taskDetail-address-wrapper">
           <div class="taskDetail-address-title-wrapper">
@@ -25,11 +31,12 @@
       <Cell :show-title="false">
         <CellChunk title="绂忓埄淇℃伅">
           <div class="taskDetail-welfare-list">
-            <TaskDetailWelfareItem :icon="IconLocaltion" text="楂樻俯琛ヨ创" />
-            <TaskDetailWelfareItem :icon="IconLocaltion" text="楂樻俯琛ヨ创" />
-            <TaskDetailWelfareItem :icon="IconLocaltion" text="楂樻俯琛ヨ创" />
-            <TaskDetailWelfareItem :icon="IconLocaltion" text="楂樻俯琛ヨ创" />
-            <TaskDetailWelfareItem :icon="IconLocaltion" text="楂樻俯琛ヨ创" />
+            <TaskDetailWelfareItem
+              v-for="item in detail.taskWeals"
+              :key="item.id"
+              :icon="setOSSLink(item.name)"
+              :text="item.name"
+            />
           </div>
         </CellChunk>
       </Cell>
@@ -43,6 +50,9 @@
 import * as flexWorkerServices from '@12333/services/api/FlexWorker';
 import IconLocaltion from '@/assets/flexJob/icon-localtion.png';
 import { TaskPrice, TaskDetailWelfareItem } from '@12333/components';
+import { SalaryTimeTypeEnumUnit, FlexTaskSettleTypeEnumText } from '@/constants/task';
+import dayjs from 'dayjs';
+import { setOSSLink } from '@12333/utils';
 
 defineOptions({
   name: 'JobDetail',
@@ -53,7 +63,7 @@
 // const props = withDefaults(defineProps<Props>(), {});
 const router = Taro.useRouter();
 
-const taskId = router.params?.id ?? 'c4cfe028-23e7-0be8-ee56-3a11e3743b9d';
+const taskId = router.params?.taskId;
 
 const {
   isLoading,
@@ -61,16 +71,16 @@
   data: detail,
   refetch,
 } = useQuery({
-  queryKey: ['flexWorkerServices/getOrdeForDetail', taskId],
+  queryKey: ['flexWorkerServices/getFlexTaskDto', taskId],
   queryFn: async () => {
-    return await flexWorkerServices.getOrdeForDetail(
+    return await flexWorkerServices.getFlexTaskDto(
       { id: taskId },
       {
         showLoading: false,
       }
     );
   },
-  placeholderData: () => ({} as API.OrderInfoDto),
+  placeholderData: () => ({} as API.GetFlexTaskDtoOutput),
   onSuccess(data) {},
 });
 </script>
diff --git a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue
index b78be59..10c56b0 100644
--- a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue
+++ b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue
@@ -1,12 +1,17 @@
 <template>
   <InfiniteLoading scrollViewClassName="common-infinite-scroll-list" v-bind="infiniteLoadingProps">
     <template #renderItem="{ item }">
-      <FlexJobCard>
+      <FlexJobCard
+        :name="item.name"
+        :age="item.age"
+        :genderType="item.genderType"
+        :workExperience="item.workExperience"
+      >
         <template #footerLeft>
-          <div class="flexJob-card-footer-text">宸插綍鐢�</div>
+          <div class="flexJob-card-footer-text">{{ FlexTaskWorkerHireEnum[item.hireStatus] }}</div>
         </template>
         <template #footerRight>
-          <nut-button type="primary" @click="goToJobDetail(item.id)">鏌ョ湅璇︽儏</nut-button>
+          <nut-button type="primary" @click="goToJobDetail(item.userId)">鏌ョ湅璇︽儏</nut-button>
         </template>
       </FlexJobCard>
     </template>
@@ -16,6 +21,7 @@
 <script setup lang="ts">
 import { OrderInputType } from '@12333/constants';
 import { RouterPath } from '@/constants';
+import { FlexTaskWorkerHireEnum } from '@/constants/task';
 import { useInfiniteLoading } from '@12333/hooks';
 import * as flexWorkerServices from '@12333/services/api/FlexWorker';
 import { FlexJobCard } from '@12333/components';
@@ -29,22 +35,26 @@
 
 // const props = withDefaults(defineProps<Props>(), {});
 
+const router = Taro.useRouter();
+const taskId = router.params?.taskId ?? '';
+
 const { infiniteLoadingProps } = useInfiniteLoading(
   ({ pageParam }) => {
-    let params: API.GetFlexTaskListInput = {
+    let params: API.GetFlexTaskWorkerApplyListInput = {
+      flexTaskId: taskId,
       pageModel: {
         rows: 20,
         page: pageParam,
-        orderInput: [{ property: 'isRecommend', order: OrderInputType.Desc }],
+        orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
       },
     };
 
-    return flexWorkerServices.getFlexTaskByArrange(params, {
+    return flexWorkerServices.getFlexTaskWorkerApplyList(params, {
       showLoading: false,
     });
   },
   {
-    queryKey: ['flexWorkerServices/getFlexTaskByArrange'],
+    queryKey: ['flexWorkerServices/getFlexTaskWorkerApplyList'],
   }
 );
 
diff --git a/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue b/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue
index c72c92e..38a6504 100644
--- a/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue
@@ -1,22 +1,49 @@
 <template>
   <ProTabs
-    v-model="queryState.mineHireType"
+    v-model="queryState.flexTaskReleaseStatus"
     name="home-tab"
     :showPaneContent="false"
     class="home-tabs"
     isTransparent
     title-gutter="12"
     title-scroll
+    @change="invalidateQueries"
   >
-    <ProTabPane :title="`鍙戝竷涓�(${1})`" :pane-key="0"></ProTabPane>
-    <ProTabPane :title="`宸插仠姝�(${1})`" :pane-key="10"></ProTabPane>
+    <ProTabPane
+      :title="`${
+        FlexTaskReleaseStatusEnumText[FlexTaskReleaseStatusEnum.Releasing]
+      }(${releaseing})`"
+      :pane-key="FlexTaskReleaseStatusEnum.Releasing"
+    ></ProTabPane>
+    <ProTabPane
+      :title="`${FlexTaskReleaseStatusEnumText[FlexTaskReleaseStatusEnum.Stoping]}(${stoping})`"
+      :pane-key="FlexTaskReleaseStatusEnum.Stoping"
+    ></ProTabPane>
   </ProTabs>
   <InfiniteLoading
     scrollViewClassName="common-infinite-scroll-list home-list"
     v-bind="infiniteLoadingProps"
+    :key="queryState.flexTaskReleaseStatus"
   >
     <template #renderItem="{ item }">
-      <JobApplicationCard @edit="goEdit" @detail="goDetail"> </JobApplicationCard>
+      <JobApplicationCard
+        :taskName="item.taskName"
+        :startDate="item.startDate"
+        :endDate="item.endDate"
+        :creationTime="item.creationTime"
+        :address="item.address"
+        :fee="item.fee"
+        :applyWorkerCount="item.applyWorkerCount"
+        :unit="SalaryTimeTypeEnumUnit[item.feeType]"
+        :releaseStatus="item.releaseStatus"
+        @edit="goEdit(item)"
+        @copy="goEdit(item, true)"
+        @detail="goDetail(item)"
+        @publish="handleChangeStatus(item, FlexTaskReleaseStatusEnum.Releasing)"
+        @stop="handleChangeStatus(item, FlexTaskReleaseStatusEnum.Stoping)"
+        @delete="handleDelete(item)"
+      >
+      </JobApplicationCard>
     </template>
   </InfiniteLoading>
 </template>
@@ -26,54 +53,95 @@
 import { RouterPath } from '@/constants';
 import { useInfiniteLoading } from '@12333/hooks';
 import { OrderInputType } from '@12333/constants';
+import {
+  FlexTaskReleaseStatusEnum,
+  FlexTaskReleaseStatusEnumText,
+  SalaryTimeTypeEnumUnit,
+} from '@/constants/task';
 import * as flexWorkerServices from '@12333/services/api/FlexWorker';
-import { TaskStatus } from '@/constants/task';
 import Taro from '@tarojs/taro';
+import { Message } from '@12333/utils';
 
 defineOptions({
   name: 'InnerPage',
 });
 
 const queryState = reactive({
-  mineHireType: TaskStatus.All,
+  flexTaskReleaseStatus: FlexTaskReleaseStatusEnum.Releasing,
 });
 
-const { infiniteLoadingProps } = useInfiniteLoading(
+const { infiniteLoadingProps, invalidateQueries } = useInfiniteLoading(
   ({ pageParam }) => {
-    let params: API.GetFlexTaskListInput = {
+    let params: API.GetFlexTaskListByStatusInput = {
+      releaseStatus: queryState.flexTaskReleaseStatus,
       pageModel: {
         rows: 20,
         page: pageParam,
-        orderInput: [{ property: 'isRecommend', order: OrderInputType.Desc }],
+        orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
       },
     };
 
-    return flexWorkerServices.getFlexTaskByArrange(params, {
+    return flexWorkerServices.getFlexTaskList(params, {
       showLoading: false,
     });
   },
   {
-    queryKey: ['flexWorkerServices/getFlexTaskByArrange'],
+    queryKey: ['flexWorkerServices/getFlexTaskList'],
   }
 );
 
-function goPage(routeName: string) {
-  Taro.navigateTo({
-    url: routeName,
-  });
+const releaseing = computed(() => {
+  return infiniteLoadingProps.value?.listData?.pages?.[0]?.objectData?.releaseing ?? 0;
+});
+const stoping = computed(() => {
+  return infiniteLoadingProps.value?.listData?.pages?.[0]?.objectData?.stoping ?? 0;
+});
+
+async function handleChangeStatus(
+  item: API.GetFlexTaskListOutput,
+  releaseStatus: FlexTaskReleaseStatusEnum
+) {
+  try {
+    let params: API.UpdateTaskReleaseStatusInput = {
+      taskId: item.taskId,
+      releaseStatus: releaseStatus,
+    };
+    let res = await flexWorkerServices.updateFlexTaskReleaseStatus(params);
+    if (res) {
+      Message.success('鎿嶄綔鎴愬姛');
+      invalidateQueries();
+    }
+  } catch (error) {}
 }
 
-function goEdit() {
-  goPage(RouterPath.publishTask);
+async function handleDelete(item: API.GetFlexTaskListOutput) {
+  try {
+    await Message.confirm({
+      message: '纭畾瑕佸垹闄ゅ悧锛�',
+    });
+    let params: API.APIdeleteFlexTaskParams = {
+      id: item.taskId,
+    };
+    let res = await flexWorkerServices.deleteFlexTask(params);
+    if (res) {
+      Message.success('鍒犻櫎鎴愬姛');
+      invalidateQueries();
+    }
+  } catch (error) {}
 }
-function goDetail() {
-  goPage(RouterPath.jobApplicationDetail);
+
+function goEdit(item: API.GetFlexTaskListOutput, isCopy = false) {
+  Taro.navigateTo({
+    url: `${RouterPath.publishTask}?taskId=${item.taskId}&isCopy=${isCopy}`,
+  });
+}
+function goDetail(item: API.GetFlexTaskListOutput) {
+  Taro.navigateTo({
+    url: `${RouterPath.jobApplicationDetail}?taskId=${item.taskId}`,
+  });
 }
 </script>
 
 <style lang="scss">
 @import '@/styles/common.scss';
-
-// .jobApplicationManage-page-wrapper {
-// }
 </style>
diff --git a/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/jobApplicationManage.vue b/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/jobApplicationManage.vue
index ffe2e4a..ea7e836 100644
--- a/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/jobApplicationManage.vue
+++ b/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/jobApplicationManage.vue
@@ -1,5 +1,9 @@
 <template>
-  <PageLayoutWithBg class="jobApplicationManage-page-wrapper" :title="'搴旇仒绠$悊'">
+  <PageLayoutWithBg
+    class="jobApplicationManage-page-wrapper"
+    :title="'搴旇仒绠$悊'"
+    :need-auth="false"
+  >
     <InnerPage></InnerPage>
   </PageLayoutWithBg>
 </template>
diff --git a/apps/bMiniApp/src/subpackages/mine/mineContactRecord/InnerPage.vue b/apps/bMiniApp/src/subpackages/mine/mineContactRecord/InnerPage.vue
index 03a3ee4..3869b14 100644
--- a/apps/bMiniApp/src/subpackages/mine/mineContactRecord/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/mine/mineContactRecord/InnerPage.vue
@@ -28,7 +28,7 @@
       pageModel: {
         rows: 20,
         page: pageParam,
-        orderInput: [{ property: 'isRecommend', order: OrderInputType.Desc }],
+        orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
       },
     };
 
diff --git a/apps/bMiniApp/src/subpackages/mine/mineFavorites/InnerPage.vue b/apps/bMiniApp/src/subpackages/mine/mineFavorites/InnerPage.vue
index bb377c0..380011f 100644
--- a/apps/bMiniApp/src/subpackages/mine/mineFavorites/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/mine/mineFavorites/InnerPage.vue
@@ -28,7 +28,7 @@
       pageModel: {
         rows: 20,
         page: pageParam,
-        orderInput: [{ property: 'isRecommend', order: OrderInputType.Desc }],
+        orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
       },
     };
 
diff --git a/apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue
index df5b28a..ae81c7c 100644
--- a/apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue
@@ -9,9 +9,16 @@
   </div>
   <InfiniteLoading scrollViewClassName="common-infinite-scroll-list" v-bind="infiniteLoadingProps">
     <template #renderItem="{ item }">
-      <FlexJobCard :showFooterLeft="false">
+      <FlexJobCard
+        :name="item.name"
+        :genderType="item.genderType"
+        :age="item.age"
+        :educationalLevel="item.educationalLevel"
+        :arrangeCount="item.arrangeCount"
+        :showFooterLeft="false"
+      >
         <template #footerRight>
-          <nut-button type="primary">瀹夋帓</nut-button>
+          <nut-button type="primary" @click="handleArrange(item)">瀹夋帓</nut-button>
           <!-- <div class="batch-task-card-status">宸插畨鎺�</div> -->
         </template>
       </FlexJobCard>
@@ -25,7 +32,7 @@
 import { OrderInputType } from '@12333/constants';
 import * as flexWorkerServices from '@12333/services/api/FlexWorker';
 import _ from 'lodash';
-import { trim } from '@12333/utils';
+import { Message, trim } from '@12333/utils';
 import { FlexJobCard } from '@12333/components';
 
 defineOptions({
@@ -33,7 +40,8 @@
 });
 
 const searchValue = ref('');
-
+const router = Taro.useRouter();
+const taskId = router.params?.taskId ?? '';
 const queryState = reactive({
   searchValueTrim: '',
 });
@@ -42,9 +50,11 @@
   queryState.searchValueTrim = trim(searchValue.value);
 }, 300);
 
-const { infiniteLoadingProps } = useInfiniteLoading(
+const { infiniteLoadingProps, invalidateQueries } = useInfiniteLoading(
   ({ pageParam }) => {
-    let params: API.GetFlexTaskListInput = {
+    let params: API.GetFlexTaskWorkerArrangeListInput = {
+      searchKeys: queryState.searchValueTrim,
+      flexTaskId: taskId,
       pageModel: {
         rows: 20,
         page: pageParam,
@@ -52,14 +62,29 @@
       },
     };
 
-    return flexWorkerServices.getFlexTaskByArrange(params, {
+    return flexWorkerServices.getFlexTaskWorkerArrangeList(params, {
       showLoading: false,
     });
   },
   {
-    queryKey: ['flexWorkerServices/getFlexTaskByArrange', queryState],
+    queryKey: ['flexWorkerServices/getFlexTaskWorkerArrangeList', queryState],
   }
 );
+
+async function handleArrange(item: API.GetNewestWorkerListOutput) {
+  try {
+    let params: API.TaskWorkerArrangeInput = {
+      flexTaskId: taskId,
+      flexWorkerId: item.userId,
+      arrange: true,
+    };
+    let res = await flexWorkerServices.taskWorkerArrange(params);
+    if (res) {
+      Message.success('宸插畨鎺�');
+      invalidateQueries();
+    }
+  } catch (error) {}
+}
 </script>
 
 <style lang="scss">
diff --git a/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue b/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue
index db091ef..d95e866 100644
--- a/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue
+++ b/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue
@@ -1,9 +1,23 @@
 <template>
   <div class="task-check-card-wrapper">
-    <TaskCheckPersonalView class="task-check-card-view">
+    <TaskCheckPersonalView
+      class="task-check-card-view"
+      :avatarUrl="avatarUrl"
+      :name="name"
+      :genderType="genderType"
+      :isRealName="isRealName"
+      :contactPhone="contactPhone"
+    >
       <template #actions>
-        <nut-button type="primary" class="task-check-card-phone-btn">楠屾敹</nut-button>
-        <!-- <div class="task-check-card-phone-status" :style="{ color: Colors.Success }">楠屾敹閫氳繃</div> -->
+        <nut-button
+          v-if="checkAcceptStatus === FlexTaskCheckAcceptStatusEnum.Wait"
+          type="primary"
+          class="task-check-card-phone-btn"
+          >楠屾敹</nut-button
+        >
+        <div v-else class="task-check-card-phone-status" :style="{ color: Colors.Success }">
+          {{ FlexTaskCheckAcceptStatusEnumText[checkAcceptStatus] }}
+        </div>
       </template>
     </TaskCheckPersonalView>
   </div>
@@ -11,15 +25,23 @@
 
 <script setup lang="ts">
 import TaskCheckPersonalView from './TaskCheckPersonalView.vue';
-import { Colors } from '@12333/constants';
+import { Colors, Gender } from '@12333/constants';
+import { FlexTaskCheckAcceptStatusEnum, FlexTaskCheckAcceptStatusEnumText } from '@/constants/task';
 
 defineOptions({
   name: 'TaskCheckCard',
 });
 
-// type Props = {};
+type Props = {
+  avatarUrl?: string;
+  name?: string;
+  genderType?: Gender;
+  isRealName?: boolean;
+  contactPhone?: string;
+  checkAcceptStatus?: API.FlexTaskCheckAcceptStatusEnum;
+};
 
-// const props = withDefaults(defineProps<Props>(), {});
+const props = withDefaults(defineProps<Props>(), {});
 </script>
 
 <style lang="scss">
diff --git a/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue b/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue
index 1b76904..55a7923 100644
--- a/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue
+++ b/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue
@@ -1,10 +1,15 @@
 <template>
-  <FlexJobTopView>
+  <FlexJobTopView
+    :avatarUrl="avatarUrl"
+    :name="name"
+    :genderType="genderType"
+    :isRealName="isRealName"
+  >
     <template #detail>
       <div class="task-check-card-phone-container">
         <div class="task-check-card-phone-wrapper">
           <div class="task-check-card-phone-label">鎵嬫満鍙凤細</div>
-          <div class="task-check-card-phone">13000000000</div>
+          <div class="task-check-card-phone">{{ contactPhone }}</div>
         </div>
         <slot name="actions"></slot>
       </div>
@@ -14,10 +19,21 @@
 
 <script setup lang="ts">
 import { FlexJobTopView } from '@12333/components';
+import { Gender } from '@12333/constants';
 
 defineOptions({
   name: 'TaskCheckPersonalView',
 });
+
+type Props = {
+  avatarUrl?: string;
+  name?: string;
+  genderType?: Gender;
+  isRealName?: boolean;
+  contactPhone?: string;
+};
+
+const props = withDefaults(defineProps<Props>(), {});
 </script>
 
 <style lang="scss">
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>
diff --git a/apps/bMiniApp/src/subpackages/task/publishTask/publishTask.vue b/apps/bMiniApp/src/subpackages/task/publishTask/publishTask.vue
index bc207c6..7a6f3d4 100644
--- a/apps/bMiniApp/src/subpackages/task/publishTask/publishTask.vue
+++ b/apps/bMiniApp/src/subpackages/task/publishTask/publishTask.vue
@@ -1,5 +1,5 @@
 <template>
-  <PageLayout class="publishTask-page-wrapper" :title="'鍙戝竷鎷涜仒'" has-border>
+  <PageLayout class="publishTask-page-wrapper" :title="'鍙戝竷鎷涜仒'" has-border :need-auth="false">
     <InnerPage></InnerPage>
   </PageLayout>
 </template>
diff --git a/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue
index 45989d8..aba6805 100644
--- a/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue
@@ -9,8 +9,8 @@
     title-gutter="8"
     title-scroll
   >
-    <ProTabPane :title="`寰呴獙鏀禶" :pane-key="10"></ProTabPane>
-    <ProTabPane :title="`宸查獙鏀禶" :pane-key="20"></ProTabPane>
+    <ProTabPane title="寰呴獙鏀�" pane-key="10"></ProTabPane>
+    <ProTabPane title="宸查獙鏀�" pane-key="20"></ProTabPane>
   </ProTabs>
   <InfiniteLoading
     scrollViewClassName="common-infinite-scroll-list"
@@ -18,7 +18,13 @@
     :key="queryState.status"
   >
     <template #renderItem="{ item }">
-      <MyTaskCard @click="goSubmitTaskDetail(item)" />
+      <MyTaskCard
+        :taskName="item.taskName"
+        :startDate="item.startDate"
+        :endDate="item.endDate"
+        :address="item.address"
+        @click="goSubmitTaskDetail(item)"
+      />
     </template>
   </InfiniteLoading>
 </template>
@@ -35,32 +41,33 @@
 });
 
 const queryState = reactive({
-  status: 10,
+  status: '10',
   date: new Date(),
 });
 
 const { infiniteLoadingProps } = useInfiniteLoading(
   ({ pageParam }) => {
     let params: API.GetFlexTaskListInput = {
+      isOverCheck: queryState.status === '20',
       pageModel: {
         rows: 20,
         page: pageParam,
-        orderInput: [{ property: 'lastShelfTime', order: OrderInputType.Desc }],
+        orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
       },
     };
 
-    return flexWorkerServices.getFlexTaskByArrange(params, {
+    return flexWorkerServices.getFlexTaskByIsOverCheck(params, {
       showLoading: false,
     });
   },
   {
-    queryKey: ['flexWorkerServices/getFlexTaskByArrange', queryState],
+    queryKey: ['flexWorkerServices/getFlexTaskByIsOverCheck', queryState],
   }
 );
 
 function goSubmitTaskDetail(item: API.GetFlexTaskListOutput) {
   Taro.navigateTo({
-    url: `${RouterPath.taskCheckDetail}?id=${item.id}`,
+    url: `${RouterPath.taskCheckDetail}?taskId=${item.taskId}`,
   });
 }
 </script>
diff --git a/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
index e5b78fb..85e4494 100644
--- a/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
@@ -1,7 +1,12 @@
 <template>
   <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
     <ContentView>
-      <MyTaskCard :showMyTaskArrow="false" :showTime="false"></MyTaskCard>
+      <MyTaskCard
+        :task-name="detail.taskName"
+        :address="address"
+        :showMyTaskArrow="false"
+        :showTime="false"
+      ></MyTaskCard>
       <ChunkTitle title="楠屾敹鍒楄〃" />
     </ContentView>
     <InfiniteLoading
@@ -10,7 +15,15 @@
       :key="queryState.status"
     >
       <template #renderItem="{ item }">
-        <TaskCheckCard @click="goHandleTaskDetail(item)" />
+        <TaskCheckCard
+          :avatarUrl="setOSSLink(item.avatarUrl)"
+          :name="item.name"
+          :genderType="item.genderType"
+          :isRealName="item.isRealName"
+          :contactPhone="item.contactPhone"
+          :checkAcceptStatus="item.checkAcceptStatus"
+          @click="goHandleTaskDetail(item)"
+        />
       </template>
     </InfiniteLoading>
   </LoadingLayout>
@@ -24,13 +37,14 @@
 import { OrderInputType } from '@12333/constants';
 import TaskCheckCard from '../components/TaskCheckCard.vue';
 import { MyTaskCard } from '@12333/components';
+import { setOSSLink } from '@12333/utils';
 
 defineOptions({
   name: 'InnerPage',
 });
 
 const router = Taro.useRouter();
-const taskId = router.params?.id ?? '';
+const taskId = router.params?.taskId ?? '';
 
 const {
   isLoading,
@@ -38,16 +52,20 @@
   data: detail,
   refetch,
 } = useQuery({
-  queryKey: ['flexWorkerServices/getOrdeForDetail', taskId],
+  queryKey: ['flexWorkerServices/getFlexTaskDto', taskId],
   queryFn: async () => {
-    return await flexWorkerServices.getOrdeForDetail(
+    return await flexWorkerServices.getFlexTaskDto(
       { id: taskId },
       {
         showLoading: false,
       }
     );
   },
-  placeholderData: () => ({} as API.OrderInfoDto),
+  placeholderData: () => ({} as API.GetFlexTaskDtoOutput),
+});
+
+const address = computed(() => {
+  return `${detail.value.provinceName} ${detail.value.cityName} ${detail.value.areaName} ${detail.value.address}`;
 });
 
 const queryState = reactive({
@@ -56,7 +74,7 @@
 
 const { infiniteLoadingProps } = useInfiniteLoading(
   ({ pageParam }) => {
-    let params: API.GetFlexTaskListInput = {
+    let params: API.GetFlexTaskWorkerCheckListInput = {
       pageModel: {
         rows: 20,
         page: pageParam,
@@ -64,18 +82,18 @@
       },
     };
 
-    return flexWorkerServices.getFlexTaskByArrange(params, {
+    return flexWorkerServices.getFlexTaskWorkerCheckList(params, {
       showLoading: false,
     });
   },
   {
-    queryKey: ['flexWorkerServices/getFlexTaskByArrange', queryState],
+    queryKey: ['flexWorkerServices/getFlexTaskWorkerCheckList', queryState],
   }
 );
 
-function goHandleTaskDetail(item: API.GetFlexTaskListOutput) {
+function goHandleTaskDetail(item: API.GetNewestWorkerListOutput) {
   Taro.navigateTo({
-    url: `${RouterPath.taskHandleCheckDetail}?id=${item.id}`,
+    url: `${RouterPath.taskHandleCheckDetail}?userId=${item.userId}`,
   });
 }
 </script>
diff --git a/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue
index abb2d1f..14184b8 100644
--- a/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue
@@ -8,8 +8,8 @@
     title-gutter="8"
     title-scroll
   >
-    <ProTabPane :title="`寰呭畨鎺�(10)`" :pane-key="10"></ProTabPane>
-    <ProTabPane :title="`宸插畨鎺�(11)`" :pane-key="20"></ProTabPane>
+    <ProTabPane :title="`寰呭畨鎺�(${notCount})`" pane-key="10"></ProTabPane>
+    <ProTabPane :title="`宸插畨鎺�(${hasCount})`" pane-key="20"></ProTabPane>
   </ProTabs>
   <InfiniteLoading
     scrollViewClassName="common-infinite-scroll-list"
@@ -17,10 +17,27 @@
     :key="queryState.status"
   >
     <template #renderItem="{ item }">
-      <JobApplicationCard @click="goSubmitTaskDetail(item)" mode="taskManage">
+      <JobApplicationCard
+        :taskName="item.taskName"
+        :startDate="item.startDate"
+        :endDate="item.endDate"
+        :address="item.address"
+        :creationTime="item.creationTime"
+        :fee="item.fee"
+        :unit="SalaryTimeTypeEnumUnit[item.feeType]"
+        @click="goSubmitTaskDetail(item)"
+        mode="taskManage"
+      >
         <template #footer-actions>
-          <!-- <nut-button type="primary">浜哄憳瀹夋帓</nut-button> -->
-          <nut-button type="primary" :color="Colors.Info" class="dark-btn">璇︽儏</nut-button>
+          <nut-button
+            v-if="item.isArrange"
+            type="primary"
+            :color="Colors.Info"
+            class="dark-btn"
+            @click="goSubmitTaskDetail(item)"
+            >璇︽儏</nut-button
+          >
+          <nut-button type="primary" v-else @click="goBatchTaskList(item)">浜哄憳瀹夋帓</nut-button>
         </template>
       </JobApplicationCard>
     </template>
@@ -33,22 +50,24 @@
 import { useInfiniteLoading } from '@12333/hooks';
 import { OrderInputType, Colors } from '@12333/constants';
 import * as flexWorkerServices from '@12333/services/api/FlexWorker';
+import { SalaryTimeTypeEnumUnit } from '@/constants/task';
 
 defineOptions({
   name: 'InnerPage',
 });
 
 const queryState = reactive({
-  status: 10,
+  status: '10',
 });
 
 const { infiniteLoadingProps } = useInfiniteLoading(
   ({ pageParam }) => {
     let params: API.GetFlexTaskListInput = {
+      isArrange: queryState.status === '20',
       pageModel: {
         rows: 20,
         page: pageParam,
-        orderInput: [{ property: 'lastShelfTime', order: OrderInputType.Desc }],
+        orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
       },
     };
 
@@ -61,9 +80,22 @@
   }
 );
 
+const hasCount = computed(() => {
+  return infiniteLoadingProps.value?.listData?.pages?.[0]?.objectData?.hasCount ?? 0;
+});
+const notCount = computed(() => {
+  return infiniteLoadingProps.value?.listData?.pages?.[0]?.objectData?.notCount ?? 0;
+});
+
 function goSubmitTaskDetail(item: API.GetFlexTaskListOutput) {
   Taro.navigateTo({
-    url: `${RouterPath.batchTaskList}?id=${item.id}`,
+    url: `${RouterPath.flexJobDetail}?taskId=${item.taskId}`,
+  });
+}
+
+function goBatchTaskList(item: API.GetFlexTaskListOutput) {
+  Taro.navigateTo({
+    url: `${RouterPath.batchTaskList}?taskId=${item.taskId}`,
   });
 }
 </script>
diff --git a/apps/bMiniApp/src/subpackages/task/taskManage/taskManage.vue b/apps/bMiniApp/src/subpackages/task/taskManage/taskManage.vue
index 5b9ad6e..74d2fda 100644
--- a/apps/bMiniApp/src/subpackages/task/taskManage/taskManage.vue
+++ b/apps/bMiniApp/src/subpackages/task/taskManage/taskManage.vue
@@ -1,5 +1,5 @@
 <template>
-  <PageLayoutWithBg class="taskManage-page-wrapper" title="浠诲姟绠$悊">
+  <PageLayoutWithBg class="taskManage-page-wrapper" title="浠诲姟绠$悊" :need-auth="false">
     <InnerPage />
   </PageLayoutWithBg>
 </template>
diff --git a/apps/cMiniApp/src/hooks/task.ts b/apps/cMiniApp/src/hooks/task.ts
index 1a789e7..91b37c3 100644
--- a/apps/cMiniApp/src/hooks/task.ts
+++ b/apps/cMiniApp/src/hooks/task.ts
@@ -41,7 +41,7 @@
           page: pageParam,
           orderInput: [
             queryState.orderType === HomeOrderType.Recommend
-              ? { property: 'isRecommend', order: OrderInputType.Desc }
+              ? { property: 'creationTime', order: OrderInputType.Desc }
               : { property: 'lastShelfTime', order: OrderInputType.Desc },
           ],
         },
diff --git a/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue
index 89b65b9..7909b96 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue
@@ -57,7 +57,7 @@
         page: pageParam,
         orderInput: [
           queryState.mineAgreementSignType === TaskStatus.All
-            ? { property: 'isRecommend', order: OrderInputType.Desc }
+            ? { property: 'creationTime', order: OrderInputType.Desc }
             : { property: 'lastShelfTime', order: OrderInputType.Desc },
         ],
       },
diff --git a/apps/cMiniApp/src/subpackages/mine/mineCancel/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineCancel/InnerPage.vue
index b7975b9..6853486 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineCancel/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineCancel/InnerPage.vue
@@ -32,7 +32,7 @@
       pageModel: {
         rows: 20,
         page: pageParam,
-        orderInput: [{ property: 'isRecommend', order: OrderInputType.Desc }],
+        orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
       },
     };
 
diff --git a/apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue
index effe877..b4a33b2 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue
@@ -32,7 +32,7 @@
       pageModel: {
         rows: 20,
         page: pageParam,
-        orderInput: [{ property: 'isRecommend', order: OrderInputType.Desc }],
+        orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
       },
     };
 
diff --git a/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue
index 6dddc52..15ab8a5 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue
@@ -57,7 +57,7 @@
         page: pageParam,
         orderInput: [
           queryState.mineHireType === TaskStatus.All
-            ? { property: 'isRecommend', order: OrderInputType.Desc }
+            ? { property: 'creationTime', order: OrderInputType.Desc }
             : { property: 'lastShelfTime', order: OrderInputType.Desc },
         ],
       },
diff --git a/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue
index 9f87fe6..659e8ea 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue
@@ -56,7 +56,7 @@
         page: pageParam,
         orderInput: [
           queryState.mineSignType === TaskStatus.All
-            ? { property: 'isRecommend', order: OrderInputType.Desc }
+            ? { property: 'creationTime', order: OrderInputType.Desc }
             : { property: 'lastShelfTime', order: OrderInputType.Desc },
         ],
       },
diff --git a/packages/components/src/ActionSheet/CheckboxActionSheet.vue b/packages/components/src/ActionSheet/CheckboxActionSheet.vue
new file mode 100644
index 0000000..4d2ebda
--- /dev/null
+++ b/packages/components/src/ActionSheet/CheckboxActionSheet.vue
@@ -0,0 +1,86 @@
+<template>
+  <div class="checkbox-action-sheet">
+    <div class="checkbox-action-sheet-title">{{ title }}</div>
+    <nut-checkbox-group v-model="model" :max="max">
+      <nut-checkbox v-for="item in columns" :key="item.id" :label="item.id" icon-size="16">
+        {{ item.name }}</nut-checkbox
+      >
+    </nut-checkbox-group>
+    <div class="checkbox-action-sheet-footer">
+      <nut-button type="primary" plain @click="handleCancel">鍙栨秷</nut-button>
+      <nut-button type="primary" @click="handleConfirm">纭畾</nut-button>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+defineOptions({
+  name: 'CheckboxActionSheet',
+});
+
+type Props = {
+  max?: number;
+  title?: string;
+  columns?: API.GetTypeSearchSettingList[];
+};
+
+const props = withDefaults(defineProps<Props>(), {});
+
+const emit = defineEmits<{
+  (e: 'update:modelValue', value: Array<string | number>): void;
+  (e: 'update:visible', value: boolean): void;
+}>();
+
+const model = defineModel<Array<string | number>>();
+const visible = defineModel<boolean>('visible');
+
+function handleCancel() {
+  model.value = [];
+  emit('update:visible', false);
+}
+
+function handleConfirm() {
+  emit('update:visible', false);
+  emit('update:modelValue', model.value);
+}
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.checkbox-action-sheet {
+  padding: 30px 30px 0;
+
+  .checkbox-action-sheet-title {
+    font-size: 32px;
+    text-align: center;
+    margin-bottom: 30px;
+    color: #2878ff;
+  }
+
+  .nut-checkbox-group {
+    padding-bottom: 30rpx;
+    max-height: 400px;
+    min-height: 200px;
+
+    .nut-checkbox {
+      margin-bottom: 20rpx;
+
+      .nut-checkbox__label {
+        margin-left: 10rpx;
+      }
+    }
+  }
+
+  .checkbox-action-sheet-footer {
+    --nut-button-default-padding: 0 80px;
+
+    display: flex;
+    justify-content: space-around;
+
+    .nut-button--primary {
+      border-width: 1px;
+    }
+  }
+}
+</style>
diff --git a/packages/components/src/Card/FlexJobCard.vue b/packages/components/src/Card/FlexJobCard.vue
index 4eed133..8039453 100644
--- a/packages/components/src/Card/FlexJobCard.vue
+++ b/packages/components/src/Card/FlexJobCard.vue
@@ -1,10 +1,8 @@
 <template>
   <div class="flexJob-card-wrapper">
-    <FlexJobTopView />
+    <FlexJobTopView :name="name" :age="age" :genderType="genderType" />
     <div class="flexJob-card-done-list">
-      {{
-        '鍋氳繃锛氬鎴挎湇鍔″憳銆佸鎴挎湇鍔″憳銆佸鎴垮鎴挎湇鍔″憳銆佸鎴垮仛杩囷細瀹㈡埧鏈嶅姟鍛樸�佸鎴挎湇鍔″憳銆佸鎴垮鎴挎湇鍔″憳銆佸鎴�'
-      }}
+      {{ workExperience }}
     </div>
     <div class="flexJob-card-done-detail" v-if="showDoneDetail">
       <div class="flexJob-card-done-detail-item">
@@ -35,6 +33,7 @@
 import IconFemale from '@/assets/mine/icon-female.png';
 import { CommonTaskCardProps } from './card';
 import FlexJobTopView from './FlexJobTopView.vue';
+import { Gender } from '@12333/constants';
 
 defineOptions({
   name: 'FlexJobCard',
@@ -44,6 +43,13 @@
   showFooterLeft?: boolean;
   showFooterRight?: boolean;
   showDoneDetail?: boolean;
+
+  name?: string;
+  genderType?: Gender;
+  age?: number;
+  educationalLevel?: string;
+  workExperience?: string;
+  arrangeCount?: number;
 };
 
 const props = withDefaults(defineProps<Props>(), {
diff --git a/packages/components/src/Card/FlexJobTopView.vue b/packages/components/src/Card/FlexJobTopView.vue
index 63a0ef0..ba2b4fd 100644
--- a/packages/components/src/Card/FlexJobTopView.vue
+++ b/packages/components/src/Card/FlexJobTopView.vue
@@ -1,17 +1,23 @@
 <template>
   <div :class="['flexJob-card-top-wrapper', size]">
-    <UserAvatar :size="size === 'small' ? 50 : 60" class="flexJob-card-top-avatar" />
+    <Avatar :src="avatarUrl" :size="size === 'small' ? 50 : 60" class="flexJob-card-top-avatar" />
     <div class="flexJob-card-top-info">
       <div class="flexJob-card-top-info-item">
-        <div class="flexJob-card-top-info-name">{{ '娲嬫磱' }}</div>
+        <div class="flexJob-card-top-info-name">{{ name }}</div>
         <div class="flexJob-card-top-info-gender">
-          <img v-if="1" :src="IconMale" class="flexJob-card-top-info-gender-icon" />
+          <img
+            v-if="genderType === Gender.Male"
+            :src="IconMale"
+            class="flexJob-card-top-info-gender-icon"
+          />
           <img v-else :src="IconFemale" class="flexJob-card-top-info-gender-icon" />
         </div>
-        <div class="flexJob-card-top-info-auth">{{ '宸插疄鍚�' }}</div>
+        <div class="flexJob-card-top-info-auth">{{ isRealName ? '宸插疄鍚�' : '鏈疄鍚�' }}</div>
       </div>
       <slot name="detail">
-        <div class="flexJob-card-top-info-detail">{{ '26宀� | 闈炲鐢� | 鏈 | 涓婂矖121娆�' }}</div>
+        <div class="flexJob-card-top-info-detail">
+          {{ `${age}宀� | ${educationalLevel} |  ${educationalLevel} | 涓婂矖${arrangeCount}娆 }}
+        </div>
       </slot>
     </div>
   </div>
@@ -20,6 +26,8 @@
 <script setup lang="ts">
 import IconMale from '@/assets/mine/icon-male.png';
 import IconFemale from '@/assets/mine/icon-female.png';
+import { AvatarImage, Gender } from '@12333/constants';
+import { Avatar } from '@12333/components';
 
 defineOptions({
   name: 'FlexJobTopView',
@@ -27,10 +35,19 @@
 
 type Props = {
   size?: 'normal' | 'small';
+
+  avatarUrl?: string;
+  name?: string;
+  genderType?: Gender;
+  age?: number;
+  educationalLevel?: string;
+  arrangeCount?: number;
+  isRealName?: boolean;
 };
 
 const props = withDefaults(defineProps<Props>(), {
   size: 'normal',
+  avatarUrl: AvatarImage,
 });
 </script>
 
diff --git a/packages/components/src/Card/JobApplicationCard.vue b/packages/components/src/Card/JobApplicationCard.vue
index 20e606c..2b77b39 100644
--- a/packages/components/src/Card/JobApplicationCard.vue
+++ b/packages/components/src/Card/JobApplicationCard.vue
@@ -1,28 +1,38 @@
 <template>
   <div class="job-application-card-wrapper">
     <div class="job-application-card-title-wrapper">
-      <div class="job-application-card-title">瀹㈡埧鏈嶅姟鍛�</div>
-      <TaskPrice :value="212" v-if="mode === 'taskManage'" />
+      <div class="job-application-card-title">{{ taskName }}</div>
+      <TaskPrice :value="fee" :unit="unit" v-if="mode === 'taskManage'" />
       <div v-else class="job-application-card-title-more" @click.stop="handleMore">
         <img :src="IconMore" class="more-btn-icon" />
       </div>
     </div>
     <div class="job-application-card-line">
-      <div class="job-application-card-time">{{ `${'2025骞�2鏈�5鏃�'}鑷�${'2025骞�3鏈�5鏃�'}` }}</div>
-      <div class="job-application-card-status" v-if="mode === 'normal'">{{ '鐢熸晥涓�' }}</div>
+      <div class="job-application-card-time">
+        {{
+          `${dayjs(startDate).format('YYYY骞碝M鏈圖D鏃�')}鑷�${dayjs(endDate).format('YYYY骞碝M鏈圖D鏃�')}`
+        }}
+      </div>
+      <div class="job-application-card-status" v-if="mode === 'normal'">
+        {{ FlexTaskReleaseStatusEnumText[releaseStatus] }}
+      </div>
     </div>
     <div class="job-application-card-line">
       <div class="job-application-card-company">
         <div class="job-application-card-company-tag">H</div>
-        <div class="job-application-card-company-address">瀹佹尝闆疯开妫厭搴�</div>
+        <div class="job-application-card-company-address">{{ address }}</div>
       </div>
-      <div class="job-application-card-people" v-if="mode === 'normal'">{{ `鎶ュ悕浜烘暟锛�${5}` }}</div>
+      <div class="job-application-card-people" v-if="mode === 'normal'">
+        {{ `鎶ュ悕浜烘暟锛�${applyWorkerCount}` }}
+      </div>
     </div>
     <div class="job-application-card-line">
-      <div class="job-application-card-publish-time">{{ `鍙戝竷鏃ユ湡锛�${'2022骞�12鏈�25鏃�'}` }}</div>
+      <div class="job-application-card-publish-time">
+        {{ `鍙戝竷鏃ユ湡锛�${dayjs(creationTime).format('YYYY-MM-DD')}` }}
+      </div>
       <slot name="footer-actions">
         <div class="job-application-card-fee">
-          <TaskPrice :value="212" />
+          <TaskPrice :value="fee" :unit="unit" />
         </div>
       </slot>
     </div>
@@ -36,6 +46,7 @@
 import { ActionSheet } from '@nutui/nutui-taro';
 import { Portal } from 'senin-mini/components';
 import { TaskPrice } from '@12333/components';
+import dayjs from 'dayjs';
 
 defineOptions({
   name: 'JobApplicationCard',
@@ -50,37 +61,36 @@
   Delete,
 }
 
-enum ResourceStatus {
+enum FlexTaskReleaseStatusEnum {
   /**
-   * 宸查┏鍥�
+   * 鍙戝竷涓�
    */
-  Reject = -10,
+  Releasing = 10,
   /**
-   * 鏈彁浜�
+   * 宸插仠姝�
    */
-  Draft = 10,
-  /**
-   * 寰呭鏍�
-   */
-  WaitAudit = 20,
-  /**
-   * 杩涜涓�
-   */
-  Running = 30,
-  /**
-   * 宸蹭笅鏋�
-   */
-  OffShelf = 40,
-  /**
-   * 绯荤粺涓嬫灦
-   */
-  SystemOffShelf = 50,
+  Stoping = 20,
 }
+
+const FlexTaskReleaseStatusEnumText = {
+  [FlexTaskReleaseStatusEnum.Releasing]: '鍙戝竷涓�',
+  [FlexTaskReleaseStatusEnum.Stoping]: '宸插仠姝�',
+};
 
 type Props = CommonTaskCardProps & {
   showActions?: boolean;
-  status?: ResourceStatus;
+  status?: FlexTaskReleaseStatusEnum;
   mode?: 'taskManage' | 'normal';
+
+  taskName?: string;
+  startDate?: string;
+  endDate?: string;
+  address?: string;
+  creationTime?: string;
+  fee?: number;
+  applyWorkerCount?: number;
+  unit?: string;
+  releaseStatus?: API.FlexTaskReleaseStatusEnum;
 };
 
 const props = withDefaults(defineProps<Props>(), {
@@ -99,40 +109,38 @@
 
 const menuList = computed(() => {
   let _menuList = [];
-  if (props.status !== ResourceStatus.WaitAudit) {
-    _menuList.push({
+  _menuList.push(
+    {
       name: '缂栬緫',
       value: ManageActions.Edit,
-    });
-  }
-  _menuList.push({
-    name: '鏌ョ湅璇︽儏',
-    value: ManageActions.Detail,
-  });
-  if (props.status === ResourceStatus.OffShelf) {
+    },
+    {
+      name: '鏌ョ湅璇︽儏',
+      value: ManageActions.Detail,
+    }
+  );
+  if (props.releaseStatus === FlexTaskReleaseStatusEnum.Stoping) {
     _menuList.push({
       name: '鍙戝竷',
       value: ManageActions.Publish,
     });
   }
-  if (props.status === ResourceStatus.Running) {
+  if (props.releaseStatus === FlexTaskReleaseStatusEnum.Releasing) {
     _menuList.push({
       name: '鍋滄鍙戝竷',
       value: ManageActions.Stop,
     });
   }
-  if (props.status !== ResourceStatus.WaitAudit) {
-    _menuList.push(
-      {
-        name: '澶嶅埗',
-        value: ManageActions.Copy,
-      },
-      {
-        name: '鍒犻櫎',
-        value: ManageActions.Delete,
-      }
-    );
-  }
+  _menuList.push(
+    {
+      name: '澶嶅埗',
+      value: ManageActions.Copy,
+    },
+    {
+      name: '鍒犻櫎',
+      value: ManageActions.Delete,
+    }
+  );
 
   return _menuList;
 });
diff --git a/packages/components/src/Card/MyTaskCard.vue b/packages/components/src/Card/MyTaskCard.vue
index 9921ce4..8283af6 100644
--- a/packages/components/src/Card/MyTaskCard.vue
+++ b/packages/components/src/Card/MyTaskCard.vue
@@ -4,7 +4,11 @@
       <RectRight :size="12" class="my-task-card-arrow" v-if="showMyTaskArrow" />
       <div v-else></div>
     </template>
-    <div class="my-task-card-time" v-if="showTime">2025骞�2鏈�5鏃� 鑷� 2025骞�3鏈�5鏃�</div>
+    <div class="my-task-card-time" v-if="showTime">
+      {{
+        `${dayjs(startDate).format('YYYY骞碝M鏈圖D鏃�')}鑷�${dayjs(endDate).format('YYYY骞碝M鏈圖D鏃�')}`
+      }}
+    </div>
     <div v-else></div>
   </TaskCard>
 </template>
@@ -13,6 +17,7 @@
 import TaskCard from './TaskCard.vue';
 import { CommonTaskCardProps } from './card';
 import { RectRight } from '@nutui/icons-vue-taro';
+import dayjs from 'dayjs';
 
 defineOptions({
   name: 'MyTaskCard',
@@ -21,6 +26,11 @@
 type Props = CommonTaskCardProps & {
   showMyTaskArrow?: boolean;
   showTime?: boolean;
+
+  startDate?: string;
+  endDate?: string;
+  taskName?: string;
+  address?: string;
 };
 
 const props = withDefaults(defineProps<Props>(), {
diff --git a/packages/components/src/Card/TaskCard.vue b/packages/components/src/Card/TaskCard.vue
index 27a75cb..f358afb 100644
--- a/packages/components/src/Card/TaskCard.vue
+++ b/packages/components/src/Card/TaskCard.vue
@@ -1,7 +1,7 @@
 <template>
   <div class="task-card-wrapper">
     <div class="task-card-title-wrapper">
-      <div class="task-card-title">瀹㈡埧鏈嶅姟鍛�</div>
+      <div class="task-card-title">{{ taskName }}</div>
       <slot name="title-right">
         <TaskPrice :value="212" />
       </slot>
@@ -17,7 +17,7 @@
     <div class="task-card-footer">
       <div class="task-card-left">
         <div class="task-card-footer-tag">H</div>
-        <div class="task-card-footer-address">瀹佹尝闆疯开妫厭搴�</div>
+        <div class="task-card-footer-address">{{ address }}</div>
       </div>
       <div class="task-card-actions" v-if="showActions">
         <slot name="actions">
@@ -38,6 +38,9 @@
 
 type Props = CommonTaskCardProps & {
   showActions?: boolean;
+
+  taskName?: string;
+  address?: string;
 };
 
 const props = withDefaults(defineProps<Props>(), {
diff --git a/packages/components/src/Card/TaskPrice.vue b/packages/components/src/Card/TaskPrice.vue
index c2297c9..922f437 100644
--- a/packages/components/src/Card/TaskPrice.vue
+++ b/packages/components/src/Card/TaskPrice.vue
@@ -1,7 +1,7 @@
 <template>
   <div class="task-price">
     <div class="task-price-decimal">{{ value }}</div>
-    <div class="task-price-unit">鍏�/灏忔椂</div>
+    <div class="task-price-unit">{{ unit }}</div>
   </div>
 </template>
 
@@ -12,6 +12,7 @@
 
 type Props = {
   value?: number;
+  unit?: string;
 };
 
 const props = withDefaults(defineProps<Props>(), {});
diff --git a/packages/components/src/Input/ChooseInputWithCheckbox.vue b/packages/components/src/Input/ChooseInputWithCheckbox.vue
new file mode 100644
index 0000000..b1ff1a6
--- /dev/null
+++ b/packages/components/src/Input/ChooseInputWithCheckbox.vue
@@ -0,0 +1,66 @@
+<template>
+  <ChooseInput :modelValue="inputValue" @click="handleOpen()"></ChooseInput>
+</template>
+
+<script setup lang="ts">
+import { Portal } from 'senin-mini/components';
+import ChooseInput from './ChooseInput.vue';
+import { computed, h } from 'vue';
+import { Popup, DatePicker, Picker } from '@nutui/nutui-taro';
+import CheckboxActionSheet from '../ActionSheet/CheckboxActionSheet.vue';
+import _ from 'lodash';
+
+defineOptions({
+  name: 'ChooseInputWithCheckbox',
+});
+
+type Props = {
+  columns: API.GetTypeSearchSettingList[];
+  modelValue: Array<string | number>;
+  title?: string;
+  max?: number;
+};
+
+const props = withDefaults(defineProps<Props>(), {});
+const inputValue = computed(() =>
+  props.modelValue.map((x) => props.columns.find((y) => y.id === x)?.name).join(',')
+);
+
+const emit = defineEmits<{
+  (e: 'update:modelValue', val: Array<string | number>): void;
+}>();
+
+function handleOpen() {
+  Portal.add((key) => {
+    return h(
+      Portal.Container,
+      { keyNumber: key, delayOpen: true },
+      {
+        default: ({ open, onClose }) =>
+          h(
+            Popup,
+            {
+              visible: open.value,
+              'onUpdate:visible': (value) => !value && onClose(),
+              position: 'bottom',
+              closeOnClickOverlay: false,
+            },
+            {
+              default: () =>
+                h(CheckboxActionSheet, {
+                  modelValue: props.modelValue,
+                  columns: props.columns,
+                  title: props.title,
+                  visible: open.value,
+                  'onUpdate:visible': (value) => !value && onClose(),
+                  'onUpdate:modelValue': (value) => {
+                    emit('update:modelValue', value);
+                  },
+                }),
+            }
+          ),
+      }
+    );
+  });
+}
+</script>
diff --git a/packages/components/src/Input/ChooseInputWithDatePicker.vue b/packages/components/src/Input/ChooseInputWithDatePicker.vue
index a40694d..f14b604 100644
--- a/packages/components/src/Input/ChooseInputWithDatePicker.vue
+++ b/packages/components/src/Input/ChooseInputWithDatePicker.vue
@@ -44,7 +44,6 @@
                   modelValue: _modelValue,
                   onCancel: onClose,
                   onConfirm: ({ selectedValue }) => {
-                    console.log('selectedValue: ', selectedValue);
                     emit('update:modelValue', dayjs(selectedValue).format('YYYY-MM-DD'));
                     onClose();
                   },
diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts
index eff99ae..1d6af42 100644
--- a/packages/components/src/index.ts
+++ b/packages/components/src/index.ts
@@ -12,6 +12,7 @@
 export { default as ChooseInputWithPicker } from './Input/ChooseInputWithPicker.vue';
 export { default as ChooseInputWithDatePicker } from './Input/ChooseInputWithDatePicker.vue';
 export { default as ChooseInputWithAreaPicker } from './Input/ChooseInputWithAreaPicker.vue';
+export { default as ChooseInputWithCheckbox } from './Input/ChooseInputWithCheckbox.vue';
 export { default as ChooseInputWithAreaSheet } from './Input/ChooseInputWithAreaSheet.vue';
 export { default as ChooseLocationInput } from './Input/ChooseLocationInput.vue';
 export { default as PreviewImage } from './Image/PreviewImage.vue';
diff --git a/packages/constants/dic.ts b/packages/constants/dic.ts
index 3bda434..475f69a 100644
--- a/packages/constants/dic.ts
+++ b/packages/constants/dic.ts
@@ -1,45 +1,25 @@
 export enum SearchType {
-  Hot = 10,
-  Service = 20,
-  Work = 30,
-  Park = 40,
-  Info = 50,
-  Policy = 60,
-  RegionalManagement = 70,
-  ProductType = 80,
-  DemandType = 90,
-  DemandRange = 100,
-  EmployeeBenefits = 110,
-  CompanyIndustry = 120,
-  HeadHunterPosition = 130,
-  ConsultationCategory = 140,
-  FAQCategory = 150,
-  IndustryCategory = 160,
-  FirstPartyIndustry = 170,
-  MatingServiceType = 180,
-  IndustryBodyType = 190,
+  /**韬唤 */
+  Identity = 210,
+  /**瀛﹀巻 */
+  Education = 220,
+  /**宀椾綅 */
+  Position = 230,
+  /**璇佷功绫诲瀷 */
+  CertificateType = 240,
+  /**绂忓埄 */
+  Welfare = 250,
+  /**琛屼笟绫诲瀷 */
+  IndustryCategory = 260,
 }
 
 export const SearchTypeText = {
-  [SearchType.Hot]: '鐑悳璇�',
-  [SearchType.Service]: '鏈嶅姟绫诲瀷',
-  [SearchType.Work]: '宸ョ',
-  [SearchType.Park]: '鍥尯绫诲瀷',
-  [SearchType.Info]: '璧勮娲诲姩绫诲瀷',
-  [SearchType.Policy]: '鏀跨瓥棰佸竷鏈烘瀯',
-  [SearchType.RegionalManagement]: '鍖哄煙绠$悊',
-  [SearchType.ProductType]: '浜у搧绫诲瀷',
-  [SearchType.DemandType]: '闇�姹傜被鍨�',
-  [SearchType.DemandRange]: '闇�姹傝寖鍥�',
-  [SearchType.EmployeeBenefits]: '鍛樺伐绂忓埄',
-  [SearchType.CompanyIndustry]: '鍏徃琛屼笟',
-  [SearchType.HeadHunterPosition]: '鐚庡ご鑱屼綅',
-  [SearchType.ConsultationCategory]: '鍜ㄨ绫诲埆',
-  [SearchType.FAQCategory]: '闂鍒嗙被',
-  [SearchType.IndustryCategory]: '琛屼笟绫诲埆',
-  [SearchType.FirstPartyIndustry]: '鐢叉柟琛屼笟',
-  [SearchType.MatingServiceType]: '閰嶅鏈嶅姟绫诲瀷',
-  [SearchType.IndustryBodyType]: '琛屼笟鏈烘瀯绫诲瀷',
+  [SearchType.Identity]: '韬唤',
+  [SearchType.Education]: '瀛﹀巻',
+  [SearchType.Position]: '宀椾綅',
+  [SearchType.CertificateType]: '璇佷功绫诲瀷',
+  [SearchType.Welfare]: '绂忓埄',
+  [SearchType.IndustryCategory]: '琛屼笟绫诲瀷',
 };
 
 export enum BelongType {
diff --git a/packages/hooks/area.ts b/packages/hooks/area.ts
index de3bffe..2f9220f 100644
--- a/packages/hooks/area.ts
+++ b/packages/hooks/area.ts
@@ -1,5 +1,5 @@
 import { flattenAreaTree, formatAreaListToTree } from '@12333/utils';
-import * as areaServices from '@12333/services/api/Area';
+import * as flexWorkerServices from '@12333/services/api/FlexWorker';
 import { useQuery, useQueryClient } from '@tanstack/vue-query';
 import { computed, onMounted, onUnmounted, ref } from 'vue';
 import { AreaType } from '@12333/constants';
@@ -14,14 +14,14 @@
   const queryClient = useQueryClient();
 
   const { data: areaStore } = useQuery({
-    queryKey: ['areaServices/getRegionalManagementList'],
+    queryKey: ['flexWorkerServices/getAreaList'],
     queryFn: async () => {
-      return await areaServices.getRegionalManagementList({ showLoading: false });
+      return await flexWorkerServices.getAreaList({}, { showLoading: false });
     },
-    placeholderData: () => [] as API.AreaInfo[],
+    placeholderData: () => [] as API.AreaDto[],
     staleTime: Infinity,
     select(data) {
-      const areaItemMap: Record<API.AreaInfo['areaCode'], API.AreaInfo> = {};
+      const areaItemMap: Record<API.AreaDto['areaCode'], API.AreaDto> = {};
       data.forEach((item) => {
         areaItemMap[item.areaCode] = item;
       });
diff --git a/packages/services/api/typings.d.ts b/packages/services/api/typings.d.ts
index 46080ab..b48eac8 100644
--- a/packages/services/api/typings.d.ts
+++ b/packages/services/api/typings.d.ts
@@ -42,9 +42,9 @@
     sexType?: GenderTypeEnum;
     /** 璇佷功Id */
     listCertionIds?: string[];
-    provinceId?: string;
-    cityId?: string;
-    areaId?: string;
+    provinceId?: number;
+    cityId?: number;
+    areaId?: number;
     address?: string;
     startDate?: string;
     endDate?: string;
@@ -380,16 +380,18 @@
   }
 
   interface AreaDto {
-    /** 缂栫爜 */
+    id?: string;
     areaCode?: number;
-    /** 鐖剁骇缂栫爜 */
-    parentCode?: number;
-    /** 鍚嶇О */
+    parentId?: number;
     areaName?: string;
     /** 1鐪� 2甯� 3鍖� 4闀� */
     layer?: number;
-    /** 鎺掑簭 */
     sort?: number;
+    children?: AreaDto[];
+    /** 绠�鏄撴嫾闊� */
+    simpleSpelling?: string;
+    /** 蹇�熸绱� */
+    quickQuery?: string;
   }
 
   interface BaseAuthorizeDto {
@@ -880,9 +882,9 @@
     taskWeals?: FlexTaskAideDto[];
     taskCerts?: FlexTaskAideDto[];
     fee?: number;
-    provinceId?: string;
-    cityId?: string;
-    areaId?: string;
+    provinceId?: number;
+    cityId?: number;
+    areaId?: number;
     provinceName?: string;
     cityName?: string;
     areaName?: string;
@@ -910,6 +912,8 @@
     taskId?: string;
     taskName?: string;
     isArrange?: boolean;
+    isOverCheck?: boolean;
+    releaseStatus?: FlexTaskReleaseStatusEnum;
     startDate?: string;
     endDate?: string;
     feeType?: FlexTaskFeeTypeEnum;

--
Gitblit v1.9.1