From 186234cb3833e620aa0ae46212fe337eb2d6e77d Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期四, 13 三月 2025 13:07:02 +0800
Subject: [PATCH] feat: 接口对接

---
 apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue                |   28 +
 apps/bMiniApp/src/constants/task.ts                                                   |   21 +
 apps/cMiniApp/src/subpackages/user/complaint/complaint.vue                            |   36 +-
 apps/cMiniApp/src/pages/home/index.vue                                                |    2 
 apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue                           |   10 
 apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue                   |   29 +
 apps/cMiniApp/src/pages/task/InnerPage.vue                                            |    2 
 packages/services/api/FlexTask.ts                                                     |   63 +++++
 packages/services/api/index.ts                                                        |    4 
 apps/cMiniApp/src/pages/mine/index.vue                                                |    4 
 apps/bMiniApp/src/subpackages/mine/mineFavorites/InnerPage.vue                        |   36 ++
 packages/services/api/User.ts                                                         |   11 
 apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue                 |   15 +
 apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue            |   21 +
 packages/services/api/UserResume.ts                                                   |   30 +-
 apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue                      |    2 
 packages/services/api/typings.d.ts                                                    |  190 +++++++++++++++
 apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue                        |   13 
 apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue               |   53 ++++
 apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue               |   26 +-
 apps/cMiniApp/src/subpackages/curriculum/mineWorkExperience/InnerPage.vue             |   54 +++
 apps/bMiniApp/src/subpackages/mine/mineContactRecord/InnerPage.vue                    |   21 +
 apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue |    3 
 packages/components/src/Card/FlexJobCard.vue                                          |   23 +
 apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue           |    3 
 apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue                                    |   14 
 26 files changed, 607 insertions(+), 107 deletions(-)

diff --git a/apps/bMiniApp/src/constants/task.ts b/apps/bMiniApp/src/constants/task.ts
index d0e14ad..16d939b 100644
--- a/apps/bMiniApp/src/constants/task.ts
+++ b/apps/bMiniApp/src/constants/task.ts
@@ -129,3 +129,24 @@
   [FlexTaskCheckAcceptStatusEnum.Passed]: '楠屾敹閫氳繃',
   [FlexTaskCheckAcceptStatusEnum.Refused]: '楠屾敹鏈�氳繃',
 };
+
+export enum FlexWorkerEleSignEnum {
+  /**
+   * 寰呯绾�
+   */
+  WaitSign = 10,
+  /**
+   * 宸茬绾�
+   */
+  HasSign = 20,
+  /**
+   * 宸茶В绾�
+   */
+  CancelSign = 30,
+}
+
+export const FlexWorkerEleSignEnumText = {
+  [FlexWorkerEleSignEnum.WaitSign]: '寰呯绾�',
+  [FlexWorkerEleSignEnum.HasSign]: '宸茬绾�',
+  [FlexWorkerEleSignEnum.CancelSign]: '宸茶В绾�',
+};
diff --git a/apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue b/apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue
index 4c5cdf1..9aebcf1 100644
--- a/apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue
+++ b/apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue
@@ -5,7 +5,7 @@
         <ProRadio v-model="query.gender" :value-enum="GenderText" show-all-btn></ProRadio>
       </QueryMenuItem>
       <QueryMenuItem title="韬唤">
-        <ProRadio v-model="query.gender" :value-enum="GenderText" show-all-btn></ProRadio>
+        <ProRadio v-model="query.gender" :value-enum="IdentityList" show-all-btn></ProRadio>
       </QueryMenuItem>
       <QueryMenuItem>
         <template #title>
@@ -23,7 +23,7 @@
         ></nut-range>
       </QueryMenuItem>
       <QueryMenuItem title="璧勬牸璇佷功">
-        <ProRadio v-model="query.gender" :value-enum="GenderText" show-all-btn></ProRadio>
+        <ProRadio v-model="query.gender" :value-enum="CertificateTypeList" show-all-btn></ProRadio>
       </QueryMenuItem>
     </div>
   </QueryMenuView>
@@ -31,7 +31,8 @@
 
 <script setup lang="ts">
 import { QueryMenuView, QueryMenuItem, ProRadio } from '@12333/components';
-import { GenderText } from '@12333/constants';
+import { GenderText, SearchType } from '@12333/constants';
+import { useSearchSettingType } from '@12333/hooks';
 
 defineOptions({
   name: 'HomeQueryMenuView',
@@ -41,6 +42,13 @@
 
 // const props = withDefaults(defineProps<Props>(), {});
 
+const { searchSettingTypeList: CertificateTypeList } = useSearchSettingType({
+  searchType: SearchType.CertificateType,
+});
+const { searchSettingTypeList: IdentityList } = useSearchSettingType({
+  searchType: SearchType.Identity,
+});
+
 const emit = defineEmits<{
   (e: 'reset'): void;
   (e: 'close'): void;
diff --git a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue
index 243cce3..e143e38 100644
--- a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue
+++ b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue
@@ -13,6 +13,7 @@
             :icon="IconAttentionActive"
             text="鏀惰棌"
             :isFlex="false"
+            @click="handleAttention"
           ></PageFooterAction>
           <PageFooterBtn type="primary" @click="toggle">绔嬪嵆鑱旂郴</PageFooterBtn>
         </template>
@@ -29,6 +30,7 @@
 import IconAttention from '@/assets/flexJob/icon-attention-lg.png';
 import IconAttentionActive from '@/assets/flexJob/icon-attention-lg-active.png';
 import { useToggle } from 'senin-mini/hooks';
+import { Message } from '@12333/utils';
 
 defineOptions({
   name: 'flexJobDetail',
@@ -56,6 +58,19 @@
 });
 
 const { isCollapse, toggle } = useToggle();
+
+async function handleAttention() {
+  try {
+    let params: API.CollectFlexWorkerResumeInput = {
+      flexWorkerId: detail.value?.flexWorkerId,
+      userResumeId: detail.value?.userResumeId,
+    };
+    let res = await flexWorkerServices.collectFlexWorkerResume(params);
+    if (res) {
+      Message.success('鏀惰棌鎴愬姛');
+    }
+  } 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 65077aa..b52155b 100644
--- a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue
@@ -8,18 +8,19 @@
     title-gutter="12"
     title-scroll
   >
-    <ProTabPane :title="`宸茬绾" :pane-key="TaskStatus.All"></ProTabPane>
-    <ProTabPane :title="`寰呯绾" :pane-key="TaskStatus.WaitSign"></ProTabPane>
-    <ProTabPane :title="`宸茶В绾" :pane-key="TaskStatus.Effect"></ProTabPane>
+    <ProTabPane :title="`宸茬绾" :pane-key="FlexWorkerEleSignEnum.HasSign"></ProTabPane>
+    <ProTabPane :title="`寰呯绾" :pane-key="FlexWorkerEleSignEnum.WaitSign"></ProTabPane>
+    <ProTabPane :title="`宸茶В绾" :pane-key="FlexWorkerEleSignEnum.CancelSign"></ProTabPane>
   </ProTabs>
   <InfiniteLoading
     scrollViewClassName="common-infinite-scroll-list home-list"
     v-bind="infiniteLoadingProps"
+    :key="queryState.mineHireType"
   >
     <template #renderItem="{ item }">
       <FlexJobCard :show-done-detail="false" :show-footer-left="false" @click="goDetail(item)">
         <template #footerRight>
-          <template v-if="Number(queryState.mineHireType) === TaskStatus.All">
+          <template v-if="queryState.mineHireType === FlexWorkerEleSignEnum.HasSign">
             <nut-button
               class="flexJobManage-card-plain-button"
               type="default"
@@ -42,7 +43,7 @@
 import { useInfiniteLoading } from '@12333/hooks';
 import { OrderInputType } from '@12333/constants';
 import * as flexWorkerServices from '@12333/services/api/FlexWorker';
-import { TaskStatus } from '@/constants/task';
+import { FlexWorkerEleSignEnum } from '@/constants/task';
 import Taro from '@tarojs/taro';
 
 defineOptions({
@@ -50,12 +51,13 @@
 });
 
 const queryState = reactive({
-  mineHireType: TaskStatus.All,
+  mineHireType: FlexWorkerEleSignEnum.HasSign,
 });
 
 const { infiniteLoadingProps } = useInfiniteLoading(
   ({ pageParam }) => {
-    let params: API.GetFlexTaskListInput = {
+    let params: API.GetFlexSignWorkerListInput = {
+      signStatus: queryState.mineHireType,
       pageModel: {
         rows: 20,
         page: pageParam,
@@ -63,24 +65,24 @@
       },
     };
 
-    return flexWorkerServices.getFlexTaskByArrange(params, {
+    return flexWorkerServices.getFlexSignWorkerList(params, {
       showLoading: false,
     });
   },
   {
-    queryKey: ['flexWorkerServices/getFlexTaskByArrange'],
+    queryKey: ['flexWorkerServices/getFlexSignWorkerList', queryState],
   }
 );
 
-function goDetail(item: API.GetFlexTaskListOutput) {
+function goDetail(item: API.GetNewestWorkerListOutput) {
   Taro.navigateTo({
-    url: `${RouterPath.flexJobDetailFromManage}?id=${item.taskId}`,
+    url: `${RouterPath.flexJobDetailFromManage}?userId=${item.userId}`,
   });
 }
 
 function checkContract() {}
 function handleUnContract() {}
-function goSignContract(item: API.GetFlexTaskListOutput) {
+function goSignContract(item: API.GetNewestWorkerListOutput) {
   Taro.navigateTo({
     url: `${RouterPath.flexJobSign}`,
   });
diff --git a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue
index ceb504a..9caeaae 100644
--- a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue
+++ b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue
@@ -34,7 +34,7 @@
             <TaskDetailWelfareItem
               v-for="item in detail.taskWeals"
               :key="item.id"
-              :icon="setOSSLink(item.name)"
+              :icon="setOSSLink(item.imageUrl)"
               :text="item.name"
             />
           </div>
@@ -53,6 +53,7 @@
 import { SalaryTimeTypeEnumUnit, FlexTaskSettleTypeEnumText } from '@/constants/task';
 import dayjs from 'dayjs';
 import { setOSSLink } from '@12333/utils';
+import { RectRight } from '@nutui/icons-vue-taro';
 
 defineOptions({
   name: 'JobDetail',
diff --git a/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue b/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue
index 38a6504..1340552 100644
--- a/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue
@@ -7,7 +7,6 @@
     isTransparent
     title-gutter="12"
     title-scroll
-    @change="invalidateQueries"
   >
     <ProTabPane
       :title="`${
@@ -86,7 +85,7 @@
     });
   },
   {
-    queryKey: ['flexWorkerServices/getFlexTaskList'],
+    queryKey: ['flexWorkerServices/getFlexTaskList', queryState],
   }
 );
 
diff --git a/apps/bMiniApp/src/subpackages/mine/mineContactRecord/InnerPage.vue b/apps/bMiniApp/src/subpackages/mine/mineContactRecord/InnerPage.vue
index 3869b14..2405fab 100644
--- a/apps/bMiniApp/src/subpackages/mine/mineContactRecord/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/mine/mineContactRecord/InnerPage.vue
@@ -4,7 +4,18 @@
     v-bind="infiniteLoadingProps"
   >
     <template #renderItem="{ item }">
-      <FlexJobCard :show-footer-left="false"> </FlexJobCard>
+      <FlexJobCard
+        :show-footer-left="false"
+        :name="item.name"
+        :age="item.age"
+        :genderType="item.genderType"
+        :workExperience="item.workExperience"
+        :isRealName="item.isRealName"
+        :arrangeCount="item.arrangeCount"
+        :educationalLevel="item.educationalLevel"
+        @contact="handleContact"
+      >
+      </FlexJobCard>
     </template>
   </InfiniteLoading>
 </template>
@@ -24,7 +35,7 @@
 
 const { infiniteLoadingProps } = useInfiniteLoading(
   ({ pageParam }) => {
-    let params: API.GetFlexTaskListInput = {
+    let params: API.PageInput = {
       pageModel: {
         rows: 20,
         page: pageParam,
@@ -32,14 +43,16 @@
       },
     };
 
-    return flexWorkerServices.getFlexTaskByArrange(params, {
+    return flexWorkerServices.getUserContractRecordList(params, {
       showLoading: false,
     });
   },
   {
-    queryKey: ['flexWorkerServices/getFlexTaskByArrange'],
+    queryKey: ['flexWorkerServices/getUserContractRecordList'],
   }
 );
+
+function handleContact() {}
 </script>
 
 <style lang="scss">
diff --git a/apps/bMiniApp/src/subpackages/mine/mineFavorites/InnerPage.vue b/apps/bMiniApp/src/subpackages/mine/mineFavorites/InnerPage.vue
index 380011f..957308d 100644
--- a/apps/bMiniApp/src/subpackages/mine/mineFavorites/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/mine/mineFavorites/InnerPage.vue
@@ -4,7 +4,18 @@
     v-bind="infiniteLoadingProps"
   >
     <template #renderItem="{ item }">
-      <FlexJobCard> </FlexJobCard>
+      <FlexJobCard
+        :name="item.name"
+        :age="item.age"
+        :genderType="item.genderType"
+        :workExperience="item.workExperience"
+        :isRealName="item.isRealName"
+        :arrangeCount="item.arrangeCount"
+        :educationalLevel="item.educationalLevel"
+        @contact="handleContact"
+        @cancel-collection="handleCancelCollection(item)"
+      >
+      </FlexJobCard>
     </template>
   </InfiniteLoading>
 </template>
@@ -15,6 +26,7 @@
 import { useInfiniteLoading } from '@12333/hooks';
 import { OrderInputType } from '@12333/constants';
 import * as flexWorkerServices from '@12333/services/api/FlexWorker';
+import { Message } from '@12333/utils';
 
 defineOptions({
   name: 'InnerPage',
@@ -22,9 +34,9 @@
 
 const userStore = useUserStore();
 
-const { infiniteLoadingProps } = useInfiniteLoading(
+const { infiniteLoadingProps, invalidateQueries } = useInfiniteLoading(
   ({ pageParam }) => {
-    let params: API.GetFlexTaskListInput = {
+    let params: API.PageInput = {
       pageModel: {
         rows: 20,
         page: pageParam,
@@ -32,14 +44,28 @@
       },
     };
 
-    return flexWorkerServices.getFlexTaskByArrange(params, {
+    return flexWorkerServices.getWorkerResumeCollectList(params, {
       showLoading: false,
     });
   },
   {
-    queryKey: ['flexWorkerServices/getFlexTaskByArrange'],
+    queryKey: ['flexWorkerServices/getWorkerResumeCollectList'],
   }
 );
+
+function handleContact() {}
+async function handleCancelCollection(item: API.GetNewestWorkerListOutput) {
+  try {
+    let params: API.APIcancelUserResumeCollectParams = {
+      flexWorkerId: item.userId,
+    };
+    let res = await flexWorkerServices.cancelUserResumeCollect(params);
+    if (res) {
+      Message.success('鎿嶄綔鎴愬姛');
+      invalidateQueries();
+    }
+  } catch (error) {}
+}
 </script>
 
 <style lang="scss">
diff --git a/apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue
index ae81c7c..d8c055d 100644
--- a/apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="searchbar-container">
+  <div class="searchbar-container" v-if="showQueryState">
     <BlSearchbar
       v-model.trim="searchValue"
       placeholder="鎼滅储濮撳悕/韬唤璇佸彿"
@@ -18,8 +18,10 @@
         :showFooterLeft="false"
       >
         <template #footerRight>
-          <nut-button type="primary" @click="handleArrange(item)">瀹夋帓</nut-button>
-          <!-- <div class="batch-task-card-status">宸插畨鎺�</div> -->
+          <nut-button v-if="showQueryState" type="primary" @click="handleArrange(item)"
+            >瀹夋帓</nut-button
+          >
+          <div v-else class="batch-task-card-status">宸插畨鎺�</div>
         </template>
       </FlexJobCard>
     </template>
@@ -42,10 +44,15 @@
 const searchValue = ref('');
 const router = Taro.useRouter();
 const taskId = router.params?.taskId ?? '';
+const status = router.params?.status ?? '';
 const queryState = reactive({
   searchValueTrim: '',
 });
 
+const showQueryState = computed(() => {
+  return status === 'arrange';
+});
+
 const handleSearch = _.debounce(function () {
   queryState.searchValueTrim = trim(searchValue.value);
 }, 300);
diff --git a/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
index 85e4494..5728029 100644
--- a/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
@@ -93,7 +93,7 @@
 
 function goHandleTaskDetail(item: API.GetNewestWorkerListOutput) {
   Taro.navigateTo({
-    url: `${RouterPath.taskHandleCheckDetail}?userId=${item.userId}`,
+    url: `${RouterPath.taskHandleCheckDetail}?userId=${item.userId}&taskId=${taskId}`,
   });
 }
 </script>
diff --git a/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue
index 84ccdba..cc10ce4 100644
--- a/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue
@@ -2,12 +2,19 @@
   <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
     <ContentScrollView style="background-color: #fff">
       <div class="personal-info-wrapper">
-        <TaskCheckPersonalView />
+        <TaskCheckPersonalView
+          :avatarUrl="setOSSLink(detail.avatarUrl)"
+          :name="detail.name"
+          :isRealName="detail.isRealName"
+          :contactPhone="detail.contactPhone"
+        />
       </div>
       <div class="taskCheckDetail-status-wrapper">
         <div class="taskCheckDetail-status-title">楠屾敹鐓х墖</div>
       </div>
-      <div class="taskCheckDetail-time">2024.11.14 9:28:39</div>
+      <div class="taskCheckDetail-time">
+        {{ dayjs(detail.appleCheckTime).format('YYYY.MM.DD HH:mm:ss') }}
+      </div>
       <nut-grid
         square
         :column-num="3"
@@ -16,7 +23,11 @@
         v-if="list.length > 0"
         class="pro-img-grid"
       >
-        <nut-grid-item v-for="(item, index) in list" :key="item" class="pro-img-grid-item">
+        <nut-grid-item
+          v-for="(item, index) in detail.checkImageUrl"
+          :key="index"
+          class="pro-img-grid-item"
+        >
           <div class="pro-img-grid-img-item">
             <PreviewImage :src="item" class="pro-img-grid-img" :urls="list" />
           </div>
@@ -37,13 +48,16 @@
 import TaskCheckPersonalView from '../components/TaskCheckPersonalView.vue';
 import { PreviewImage } from '@12333/components';
 import { Colors } from '@12333/constants';
+import { setOSSLink } from '@12333/utils';
+import dayjs from 'dayjs';
 
 defineOptions({
   name: 'InnerPage',
 });
 
 const router = Taro.useRouter();
-const taskId = router.params?.id ?? '';
+const taskId = router.params?.taskId ?? '';
+const userId = router.params?.userId ?? '';
 
 const {
   isLoading,
@@ -53,14 +67,14 @@
 } = useQuery({
   queryKey: ['flexWorkerServices/getOrdeForDetail', taskId],
   queryFn: async () => {
-    return await flexWorkerServices.getOrdeForDetail(
-      { id: taskId },
+    return await flexWorkerServices.getFlexTaskWorkerCheckContentDto(
+      { flexTaskId: taskId, flexWorkerId: userId },
       {
         showLoading: false,
       }
     );
   },
-  placeholderData: () => ({} as API.OrderInfoDto),
+  placeholderData: () => ({} as API.GetTaskWorkerCheckContentOutput),
 });
 
 const list = ref([
diff --git a/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue
index 14184b8..9c049a0 100644
--- a/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue
@@ -34,10 +34,12 @@
             type="primary"
             :color="Colors.Info"
             class="dark-btn"
-            @click="goSubmitTaskDetail(item)"
+            @click.stop="goBatchTaskList(item, 'detail')"
             >璇︽儏</nut-button
           >
-          <nut-button type="primary" v-else @click="goBatchTaskList(item)">浜哄憳瀹夋帓</nut-button>
+          <nut-button type="primary" v-else @click.stop="goBatchTaskList(item, 'arrange')"
+            >浜哄憳瀹夋帓</nut-button
+          >
         </template>
       </JobApplicationCard>
     </template>
@@ -93,9 +95,9 @@
   });
 }
 
-function goBatchTaskList(item: API.GetFlexTaskListOutput) {
+function goBatchTaskList(item: API.GetFlexTaskListOutput, status: string) {
   Taro.navigateTo({
-    url: `${RouterPath.batchTaskList}?taskId=${item.taskId}`,
+    url: `${RouterPath.batchTaskList}?taskId=${item.taskId}&detail=${status}`,
   });
 }
 </script>
diff --git a/apps/cMiniApp/src/pages/home/index.vue b/apps/cMiniApp/src/pages/home/index.vue
index 1c9395b..de26f12 100644
--- a/apps/cMiniApp/src/pages/home/index.vue
+++ b/apps/cMiniApp/src/pages/home/index.vue
@@ -110,7 +110,7 @@
 
 function goTaskDetail(item: API.GetFlexTaskListOutput) {
   Taro.navigateTo({
-    url: `${RouterPath.taskDetail}?id=${item.id}`,
+    url: `${RouterPath.taskDetail}?id=${item.taskId}`,
   });
 }
 </script>
diff --git a/apps/cMiniApp/src/pages/mine/index.vue b/apps/cMiniApp/src/pages/mine/index.vue
index b1746f9..e07e7ce 100644
--- a/apps/cMiniApp/src/pages/mine/index.vue
+++ b/apps/cMiniApp/src/pages/mine/index.vue
@@ -136,9 +136,9 @@
 
 Taro.useShareAppMessage((res) => {
   return {
-    title: `${userDetail.value?.contacter}鍚嶇墖`,
+    // title: `${userDetail.value?.contacter}鍚嶇墖`,
     // path: `${RouterPath.userHomePage}?userId=${userDetail.value?.userId}`,
-    imageUrl: userDetail.value?.avatarUrl,
+    // imageUrl: userDetail.value?.avatarUrl,
   };
 });
 
diff --git a/apps/cMiniApp/src/pages/task/InnerPage.vue b/apps/cMiniApp/src/pages/task/InnerPage.vue
index cb331f8..33a1569 100644
--- a/apps/cMiniApp/src/pages/task/InnerPage.vue
+++ b/apps/cMiniApp/src/pages/task/InnerPage.vue
@@ -63,7 +63,7 @@
   //     url: `${RouterPath.taskSubmitCheck}?id=${item.id}`,
   //   });
   Taro.navigateTo({
-    url: `${RouterPath.taskCheckDetail}?id=${item.id}`,
+    url: `${RouterPath.taskCheckDetail}?id=${item.taskId}`,
   });
 }
 </script>
diff --git a/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue
index 7b1d765..cfccdcb 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue
@@ -10,18 +10,18 @@
       <nut-form-item label="鎵嬫満鍙�:" class="bole-form-item" prop="phone" required>
         <nut-input v-model.trim="form.phone" placeholder="璇疯緭鍏ユ墜鏈哄彿" type="text" />
       </nut-form-item>
-      <nut-form-item label="韬唤:" class="bole-form-item" prop="gender">
+      <nut-form-item label="韬唤:" class="bole-form-item" prop="socialIdentity">
         <ChooseInputWithPicker
-          v-model="form.gender"
+          v-model="form.socialIdentity"
           placeholder="璇烽�夋嫨韬唤"
-          :value-enum="TaskStatusText"
+          :value-enum="IdentityTypeList"
         />
       </nut-form-item>
-      <nut-form-item label="瀛﹀巻:" class="bole-form-item" prop="gender">
+      <nut-form-item label="瀛﹀巻:" class="bole-form-item" prop="educationalLevel">
         <ChooseInputWithPicker
-          v-model="form.gender"
+          v-model="form.educationalLevel"
           placeholder="璇烽�夋嫨瀛﹀巻"
-          :value-enum="TaskStatusText"
+          :value-enum="EducationTypeList"
         />
       </nut-form-item>
       <nut-form-item label="甯搁┗鍩庡競:" class="bole-form-item" prop="gender">
@@ -44,22 +44,35 @@
 import { TaskStatusText, TaskStatus } from '@/constants';
 import { convertApi2FormUrlOnlyOne } from '@12333/utils';
 import { useUser } from '@/hooks';
+import { useSearchSettingType } from '@12333/hooks';
+import { SearchType } from '@12333/constants';
 
 defineOptions({
   name: 'InnerPage',
 });
 
-const { userDetail } = useUser();
+const { searchSettingTypeList: EducationTypeList } = useSearchSettingType({
+  searchType: SearchType.Education,
+});
+const { searchSettingTypeList: IdentityTypeList } = useSearchSettingType({
+  searchType: SearchType.Identity,
+});
 
 const form = reactive({
-  avatarUrl: convertApi2FormUrlOnlyOne(userDetail.value?.originalAvatarUrl),
+  // avatarUrl: convertApi2FormUrlOnlyOne(userDetail.value?.originalAvatarUrl),
   name: '',
   phone: '',
   gender: TaskStatus.All,
+  socialIdentity: '',
+  educationalLevel: '',
+  areaList: [] as number[],
 });
 
 const rules = reactive<FormRules>({
   phone: [{ required: true, message: '璇疯緭鍏ユ墜鏈哄彿' }],
+  socialIdentity: [{ required: true, message: '璇烽�夋嫨韬唤' }],
+  educationalLevel: [{ required: true, message: '璇烽�夋嫨瀛﹀巻' }],
+  areaList: [{ required: true, message: '璇烽�夋嫨甯搁┗鍩庡競' }],
 });
 const formRef = ref<any>(null);
 function handleConfirm() {
diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue
index 629cb78..77d25d5 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue
@@ -91,12 +91,14 @@
 import MineAgreementSignDetailItem from '../../mine/mineAgreementSignDetail/MineAgreementSignDetailItem.vue';
 import { List, ListItem, JobTagList } from '@12333/components';
 import { RouterPath } from '@/constants';
+import * as userResumeServices from '@12333/services/api/userResume';
 import IconArrow from '@/assets/setting/icon-arrow.png';
 import IconAuth from '@/assets/mine/icon-auth.png';
 import IconMale from '@/assets/mine/icon-male.png';
 import IconFemale from '@/assets/mine/icon-female.png';
 import IconPhone from '@/assets/mine/icon-phone.png';
 import Taro from '@tarojs/taro';
+import { useQuery } from '@tanstack/vue-query';
 
 defineOptions({
   name: 'InnerPage',
@@ -104,6 +106,25 @@
 
 const userStore = useUserStore();
 const isLogin = useIsLogin();
+const router = Taro.useRouter();
+
+const taskId = router.params?.taskId;
+
+const {
+  isLoading,
+  isError,
+  data: detail,
+  refetch,
+} = useQuery({
+  queryKey: ['userResumeServices/getUserResume', taskId],
+  queryFn: async () => {
+    return await userResumeServices.getUserResume({
+      showLoading: false,
+    });
+  },
+  placeholderData: () => ({} as API.MyResumeOutput),
+  onSuccess(data) {},
+});
 
 function goPage(routeName: string) {
   Taro.navigateTo({
diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue
index 02bb09b..e360f49 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue
@@ -17,7 +17,8 @@
         prop="photo"
         label-position="top"
       >
-        <Uploader v-model:file-list="form.photo" :maximum="6" class="bole-uploader"> </Uploader>
+        <Uploader v-model:file-list="form.lifeCircleImgUrlList" :maximum="6" class="bole-uploader">
+        </Uploader>
       </nut-form-item>
     </nut-form>
   </ContentScrollView>
@@ -27,22 +28,64 @@
 </template>
 
 <script setup lang="ts">
-import { useUser } from '@/hooks';
+import { goBack } from '@/utils';
 import { NumberInput } from '@12333/components';
+import * as userResumeServices from '@12333/services/api/userResume';
+import { convertApiPath2Url, Message } from '@12333/utils';
+import { FileItem } from '@nutui/nutui-taro/dist/types/__VUE/uploader/type';
+import { useQuery } from '@tanstack/vue-query';
 
 defineOptions({
   name: 'InnerPage',
 });
 
-const { userDetail } = useUser();
+const {
+  isLoading,
+  isError,
+  data: detail,
+  refetch,
+} = useQuery({
+  queryKey: ['userResumeServices/getUserResumeDetailInfo'],
+  queryFn: async () => {
+    return await userResumeServices.getUserResumeDetailInfo({
+      showLoading: false,
+    });
+  },
+  placeholderData: () => ({} as API.UserResumeDetailInfoOutput),
+  onSuccess(data) {
+    form.height = data.height;
+    form.weight = data.weight;
+    form.lifeCircleImgUrlList = data.lifeCircleImgUrlList?.length
+      ? data.lifeCircleImgUrlList.map((x) => convertApiPath2Url(x))
+      : [];
+  },
+});
 
 const form = reactive({
   height: '',
   weight: '',
-  photo: [],
+  lifeCircleImgUrlList: [] as FileItem[],
 });
 
-function handleConfirm() {}
+async function handleConfirm() {
+  try {
+    let params: API.SaveUserResumeDetailInfoInput = {
+      weight: form.weight,
+      height: form.weight,
+      lifeCircleImgUrlList: form.lifeCircleImgUrlList?.length
+        ? form.lifeCircleImgUrlList.map((x) => x.url)
+        : [],
+    };
+    let res = await userResumeServices.saveUserResumeDetailInfo(params);
+    if (res) {
+      Message.success('淇濆瓨鎴愬姛', {
+        onClosed() {
+          goBack();
+        },
+      });
+    }
+  } catch (error) {}
+}
 </script>
 
 <style lang="scss">
diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineWorkExperience/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineWorkExperience/InnerPage.vue
index 5dd1dbc..60f5d12 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/mineWorkExperience/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/mineWorkExperience/InnerPage.vue
@@ -1,11 +1,11 @@
 <template>
   <ContentScrollView :paddingH="false">
     <nut-form :model-value="form" ref="formRef">
-      <nut-form-item label="宸ヤ綔骞撮檺:" class="bole-form-item" prop="workYear">
-        <nut-input v-model="form.workYear" placeholder="璇疯緭鍏�"> </nut-input>
+      <nut-form-item label="宸ヤ綔骞撮檺:" class="bole-form-item" prop="workingSeniority">
+        <nut-input v-model="form.workingSeniority" placeholder="璇疯緭鍏�"> </nut-input>
       </nut-form-item>
-      <nut-form-item label="宸ヤ綔缁忛獙:" class="bole-form-item" prop="workYear">
-        <nut-input v-model="form.workYear" type="textarea" placeholder="璇疯緭鍏�"> </nut-input>
+      <nut-form-item label="宸ヤ綔缁忛獙:" class="bole-form-item" prop="workExperience">
+        <nut-input v-model="form.workExperience" type="textarea" placeholder="璇疯緭鍏�"> </nut-input>
       </nut-form-item>
     </nut-form>
   </ContentScrollView>
@@ -15,19 +15,55 @@
 </template>
 
 <script setup lang="ts">
-import { useUser } from '@/hooks';
+import { goBack } from '@/utils';
+import * as userResumeServices from '@12333/services/api/userResume';
+import { Message } from '@12333/utils';
+import { useQuery } from '@tanstack/vue-query';
 
 defineOptions({
   name: 'InnerPage',
 });
 
-const { userDetail } = useUser();
-
 const form = reactive({
-  workYear: '',
+  workingSeniority: '',
+  workExperience: '',
 });
 
-function handleConfirm() {}
+const {
+  isLoading,
+  isError,
+  data: detail,
+  refetch,
+} = useQuery({
+  queryKey: ['userResumeServices/getUserResumeWorkExperience'],
+  queryFn: async () => {
+    return await userResumeServices.getUserResumeWorkExperience({
+      showLoading: false,
+    });
+  },
+  placeholderData: () => ({} as API.UserResumeWorkExperienceOutput),
+  onSuccess(data) {
+    form.workingSeniority = data.workingSeniority;
+    form.workExperience = data.workExperience;
+  },
+});
+
+async function handleConfirm() {
+  try {
+    let params: API.SaveUserResumeWorkExperienceInput = {
+      workingSeniority: form.workingSeniority,
+      workExperience: form.workExperience,
+    };
+    let res = await userResumeServices.saveUserResumeWorkExperience(params);
+    if (res) {
+      Message.success('淇濆瓨鎴愬姛', {
+        onClosed() {
+          goBack();
+        },
+      });
+    }
+  } catch (error) {}
+}
 </script>
 
 <style lang="scss">
diff --git a/apps/cMiniApp/src/subpackages/user/complaint/complaint.vue b/apps/cMiniApp/src/subpackages/user/complaint/complaint.vue
index 32c86ac..445dd60 100644
--- a/apps/cMiniApp/src/subpackages/user/complaint/complaint.vue
+++ b/apps/cMiniApp/src/subpackages/user/complaint/complaint.vue
@@ -52,7 +52,7 @@
 
 <script setup lang="ts">
 import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
-import * as cooperationApplyServices from '@12333/services/api/CooperationApply';
+// import * as cooperationApplyServices from '@12333/services/api/CooperationApply';
 import { CooperateTypeText, CooperateApplyTypeEnum } from '@12333/constants';
 import { FormValidator, Message } from '@12333/utils';
 import Taro from '@tarojs/taro';
@@ -94,23 +94,23 @@
 
 async function createPlatformCooperationApply() {
   try {
-    let params: API.CreatePlatformCooperationApplyInput = {
-      title: CooperateTypeText.Complaint,
-      contact: form.contact,
-      contactPhone: form.contactPhone,
-      applyDescription: form.remark,
-      companyName: form.companyName,
-      applyType: CooperateApplyTypeEnum.Complaint,
-    };
-    let res = await cooperationApplyServices.createPlatformCooperationApply(params);
-    if (res) {
-      await Message.confirm({
-        message: '淇℃伅宸叉彁浜わ紝璇疯�愬績绛夊緟宸ヤ綔浜哄憳鐨勮仈绯�',
-      });
-      Taro.navigateBack({
-        delta: 1,
-      });
-    }
+    // let params: API.CreatePlatformCooperationApplyInput = {
+    //   title: CooperateTypeText.Complaint,
+    //   contact: form.contact,
+    //   contactPhone: form.contactPhone,
+    //   applyDescription: form.remark,
+    //   companyName: form.companyName,
+    //   applyType: CooperateApplyTypeEnum.Complaint,
+    // };
+    // let res = await cooperationApplyServices.createPlatformCooperationApply(params);
+    // if (res) {
+    //   await Message.confirm({
+    //     message: '淇℃伅宸叉彁浜わ紝璇疯�愬績绛夊緟宸ヤ綔浜哄憳鐨勮仈绯�',
+    //   });
+    //   Taro.navigateBack({
+    //     delta: 1,
+    //   });
+    // }
   } catch (error) {}
 }
 </script>
diff --git a/packages/components/src/Card/FlexJobCard.vue b/packages/components/src/Card/FlexJobCard.vue
index 8039453..bcdc7ac 100644
--- a/packages/components/src/Card/FlexJobCard.vue
+++ b/packages/components/src/Card/FlexJobCard.vue
@@ -1,6 +1,13 @@
 <template>
   <div class="flexJob-card-wrapper">
-    <FlexJobTopView :name="name" :age="age" :genderType="genderType" />
+    <FlexJobTopView
+      :name="name"
+      :age="age"
+      :genderType="genderType"
+      :isRealName="isRealName"
+      :arrangeCount="arrangeCount"
+      :educationalLevel="educationalLevel"
+    />
     <div class="flexJob-card-done-list">
       {{ workExperience }}
     </div>
@@ -14,14 +21,16 @@
       <div class="flexJob-card-footer-left-wrapper">
         <div class="flexJob-card-footer-left" v-if="showFooterLeft">
           <slot name="footerLeft">
-            <div class="flexJob-card-footer-text">鍙栨秷鏀惰棌</div>
+            <div class="flexJob-card-footer-text" @click.stop="emit('cancelCollection')">
+              鍙栨秷鏀惰棌
+            </div>
           </slot>
         </div>
       </div>
 
       <div class="flexJob-card-footer-right" v-if="showFooterRight">
         <slot name="footerRight">
-          <nut-button type="primary">绔嬪嵆鑱旂郴</nut-button>
+          <nut-button type="primary" @click.stop="emit('contact')">绔嬪嵆鑱旂郴</nut-button>
         </slot>
       </div>
     </div>
@@ -29,8 +38,6 @@
 </template>
 
 <script setup lang="ts">
-import IconMale from '@/assets/mine/icon-male.png';
-import IconFemale from '@/assets/mine/icon-female.png';
 import { CommonTaskCardProps } from './card';
 import FlexJobTopView from './FlexJobTopView.vue';
 import { Gender } from '@12333/constants';
@@ -47,6 +54,7 @@
   name?: string;
   genderType?: Gender;
   age?: number;
+  isRealName?: boolean;
   educationalLevel?: string;
   workExperience?: string;
   arrangeCount?: number;
@@ -57,6 +65,11 @@
   showFooterRight: true,
   showDoneDetail: true,
 });
+
+const emit = defineEmits<{
+  (e: 'cancelCollection'): void;
+  (e: 'contact'): void;
+}>();
 </script>
 
 <style lang="scss">
diff --git a/packages/services/api/FlexTask.ts b/packages/services/api/FlexTask.ts
new file mode 100644
index 0000000..e26d387
--- /dev/null
+++ b/packages/services/api/FlexTask.ts
@@ -0,0 +1,63 @@
+/* eslint-disable */
+// @ts-ignore
+import { request } from '@/utils/request';
+
+/** 鑾峰彇浠诲姟璇︽儏 GET /api/FlexTask/GetFlexTaskDetail */
+export async function getFlexTaskDetail(
+  // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
+  params: API.APIgetFlexTaskDetailParams,
+  options?: API.RequestConfig
+) {
+  return request<API.GetFlexTaskDetailForBackOutput>('/api/FlexTask/GetFlexTaskDetail', {
+    method: 'GET',
+    params: {
+      ...params,
+    },
+    ...(options || {}),
+  });
+}
+
+/** 鑾峰彇杩愯惀绔换鍔$鐞嗗垪琛� POST /api/FlexTask/GetFlexTaskList */
+export async function getFlexTaskList(
+  body: API.GetFlexTaskForBackInput,
+  options?: API.RequestConfig
+) {
+  return request<API.FlexTaskListOutputPageOutput>('/api/FlexTask/GetFlexTaskList', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 鑾峰彇鎶ュ悕璇︽儏 POST /api/FlexTask/GetFlexTaskWorkerList */
+export async function getFlexTaskWorkerList(
+  body: API.GetFlexTaskWorkerListInput,
+  options?: API.RequestConfig
+) {
+  return request<API.GetWorkerListForBackOutputPageOutput>('/api/FlexTask/GetFlexTaskWorkerList', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 璁剧疆浠诲姟鎺ㄨ崘鐘舵�� POST /api/FlexTask/SetFlexTaskReRecommendStatus */
+export async function setFlexTaskReRecommendStatus(
+  body: API.SetRecommendInput,
+  options?: API.RequestConfig
+) {
+  return request<number>('/api/FlexTask/SetFlexTaskReRecommendStatus', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
diff --git a/packages/services/api/User.ts b/packages/services/api/User.ts
new file mode 100644
index 0000000..603e2e7
--- /dev/null
+++ b/packages/services/api/User.ts
@@ -0,0 +1,11 @@
+/* eslint-disable */
+// @ts-ignore
+import { request } from '@/utils/request';
+
+/** 鑾峰彇涓汉淇℃伅璇︽儏 GET /api/User/GetUserInfo */
+export async function getUserInfo(options?: API.RequestConfig) {
+  return request<API.UserDto>('/api/User/GetUserInfo', {
+    method: 'GET',
+    ...(options || {}),
+  });
+}
diff --git a/packages/services/api/UserResume.ts b/packages/services/api/UserResume.ts
index b10d921..9b0735e 100644
--- a/packages/services/api/UserResume.ts
+++ b/packages/services/api/UserResume.ts
@@ -2,7 +2,7 @@
 // @ts-ignore
 import { request } from '@/utils/request';
 
-/** 姝ゅ鍚庣娌℃湁鎻愪緵娉ㄩ噴 GET /api/UserResume/GetUserResume */
+/** 鏍规嵁鐢ㄦ埛鑾峰彇绠�鍘� GET /api/UserResume/GetUserResume */
 export async function getUserResume(options?: API.RequestConfig) {
   return request<API.MyResumeOutput>('/api/UserResume/GetUserResume', {
     method: 'GET',
@@ -10,7 +10,7 @@
   });
 }
 
-/** 姝ゅ鍚庣娌℃湁鎻愪緵娉ㄩ噴 GET /api/UserResume/GetUserResumeCertificateDetailById */
+/** 鏍规嵁璁よ瘉id鑾峰彇璁よ瘉璇︽儏 GET /api/UserResume/GetUserResumeCertificateDetailById */
 export async function getUserResumeCertificateDetailById(
   // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
   params: API.APIgetUserResumeCertificateDetailByIdParams,
@@ -28,7 +28,7 @@
   );
 }
 
-/** 姝ゅ鍚庣娌℃湁鎻愪緵娉ㄩ噴 GET /api/UserResume/GetUserResumeCertificateList */
+/** 鏍规嵁鐢ㄦ埛ID鑾峰彇鐢ㄦ埛璁よ瘉淇℃伅 GET /api/UserResume/GetUserResumeCertificateList */
 export async function getUserResumeCertificateList(options?: API.RequestConfig) {
   return request<API.UserResumeCertificateListOutput[]>(
     '/api/UserResume/GetUserResumeCertificateList',
@@ -39,7 +39,7 @@
   );
 }
 
-/** 姝ゅ鍚庣娌℃湁鎻愪緵娉ㄩ噴 GET /api/UserResume/GetUserResumeDetailInfo */
+/** 鑾峰彇鐢ㄦ埛绠�鍘嗚鎯� GET /api/UserResume/GetUserResumeDetailInfo */
 export async function getUserResumeDetailInfo(options?: API.RequestConfig) {
   return request<API.UserResumeDetailInfoOutput>('/api/UserResume/GetUserResumeDetailInfo', {
     method: 'GET',
@@ -47,7 +47,7 @@
   });
 }
 
-/** 姝ゅ鍚庣娌℃湁鎻愪緵娉ㄩ噴 GET /api/UserResume/GetUserResumeWorkExperience */
+/** 鏍规嵁鐢ㄦ埛id鑾峰彇鐢ㄦ埛宸ヤ綔缁忓巻 GET /api/UserResume/GetUserResumeWorkExperience */
 export async function getUserResumeWorkExperience(options?: API.RequestConfig) {
   return request<API.UserResumeWorkExperienceOutput>(
     '/api/UserResume/GetUserResumeWorkExperience',
@@ -58,12 +58,12 @@
   );
 }
 
-/** 姝ゅ鍚庣娌℃湁鎻愪緵娉ㄩ噴 POST /api/UserResume/SaveUserResumeBaseInfo */
+/** 淇濆瓨绠�鍘嗙殑鍩虹淇℃伅 POST /api/UserResume/SaveUserResumeBaseInfo */
 export async function saveUserResumeBaseInfo(
   body: API.SaveUserResumeBaseInfoInput,
   options?: API.RequestConfig
 ) {
-  return request<any>('/api/UserResume/SaveUserResumeBaseInfo', {
+  return request<number>('/api/UserResume/SaveUserResumeBaseInfo', {
     method: 'POST',
     headers: {
       'Content-Type': 'application/json',
@@ -73,12 +73,12 @@
   });
 }
 
-/** 姝ゅ鍚庣娌℃湁鎻愪緵娉ㄩ噴 POST /api/UserResume/SaveUserResumeCertificate */
+/** 淇濆瓨鐢ㄦ埛鐨勭畝鍘嗚璇佷俊鎭� POST /api/UserResume/SaveUserResumeCertificate */
 export async function saveUserResumeCertificate(
   body: API.SaveUserResumeCertificateInput,
   options?: API.RequestConfig
 ) {
-  return request<any>('/api/UserResume/SaveUserResumeCertificate', {
+  return request<number>('/api/UserResume/SaveUserResumeCertificate', {
     method: 'POST',
     headers: {
       'Content-Type': 'application/json',
@@ -88,12 +88,12 @@
   });
 }
 
-/** 姝ゅ鍚庣娌℃湁鎻愪緵娉ㄩ噴 POST /api/UserResume/SaveUserResumeDetailInfo */
+/** 淇濆瓨绠�鍘嗚鎯� POST /api/UserResume/SaveUserResumeDetailInfo */
 export async function saveUserResumeDetailInfo(
   body: API.SaveUserResumeDetailInfoInput,
   options?: API.RequestConfig
 ) {
-  return request<any>('/api/UserResume/SaveUserResumeDetailInfo', {
+  return request<number>('/api/UserResume/SaveUserResumeDetailInfo', {
     method: 'POST',
     headers: {
       'Content-Type': 'application/json',
@@ -103,12 +103,12 @@
   });
 }
 
-/** 姝ゅ鍚庣娌℃湁鎻愪緵娉ㄩ噴 POST /api/UserResume/SaveUserResumeExpectationJob */
+/** 淇濆瓨鐢ㄦ埛鏈熸湜鐨勫矖浣嶄俊鎭� POST /api/UserResume/SaveUserResumeExpectationJob */
 export async function saveUserResumeExpectationJob(
   body: API.SaveUserResumeExpectationJobInput,
   options?: API.RequestConfig
 ) {
-  return request<any>('/api/UserResume/SaveUserResumeExpectationJob', {
+  return request<number>('/api/UserResume/SaveUserResumeExpectationJob', {
     method: 'POST',
     headers: {
       'Content-Type': 'application/json',
@@ -118,12 +118,12 @@
   });
 }
 
-/** 姝ゅ鍚庣娌℃湁鎻愪緵娉ㄩ噴 POST /api/UserResume/SaveUserResumeWorkExperience */
+/** 淇濆瓨鐢ㄦ埛宸ヤ綔缁忓巻 POST /api/UserResume/SaveUserResumeWorkExperience */
 export async function saveUserResumeWorkExperience(
   body: API.SaveUserResumeWorkExperienceInput,
   options?: API.RequestConfig
 ) {
-  return request<any>('/api/UserResume/SaveUserResumeWorkExperience', {
+  return request<number>('/api/UserResume/SaveUserResumeWorkExperience', {
     method: 'POST',
     headers: {
       'Content-Type': 'application/json',
diff --git a/packages/services/api/index.ts b/packages/services/api/index.ts
index 4b96af1..a9c1745 100644
--- a/packages/services/api/index.ts
+++ b/packages/services/api/index.ts
@@ -9,6 +9,7 @@
 import * as Common from './Common';
 import * as Features from './Features';
 import * as FlexEnterprise from './FlexEnterprise';
+import * as FlexTask from './FlexTask';
 import * as FlexWorker from './FlexWorker';
 import * as IdentityRole from './IdentityRole';
 import * as IdentityUser from './IdentityUser';
@@ -18,6 +19,7 @@
 import * as Profile from './Profile';
 import * as SearchSetting from './SearchSetting';
 import * as Tenant from './Tenant';
+import * as User from './User';
 import * as UserResume from './UserResume';
 import * as Version from './Version';
 export default {
@@ -28,6 +30,7 @@
   Common,
   Features,
   FlexEnterprise,
+  FlexTask,
   FlexWorker,
   IdentityRole,
   IdentityUser,
@@ -37,6 +40,7 @@
   Profile,
   SearchSetting,
   Tenant,
+  User,
   UserResume,
   Version,
 };
diff --git a/packages/services/api/typings.d.ts b/packages/services/api/typings.d.ts
index b48eac8..3b11f05 100644
--- a/packages/services/api/typings.d.ts
+++ b/packages/services/api/typings.d.ts
@@ -184,6 +184,10 @@
     moduleId?: string;
   }
 
+  interface APIgetFlexTaskDetailParams {
+    id?: string;
+  }
+
   interface APIgetFlexTaskDtoParams {
     id?: string;
   }
@@ -799,6 +803,7 @@
     id?: string;
     aideType?: FlexTaskAideEnum;
     name?: string;
+    imageUrl?: string;
   }
 
   type FlexTaskAideEnum = 10 | 20;
@@ -806,6 +811,38 @@
   type FlexTaskCheckAcceptStatusEnum = 10 | 20 | 30;
 
   type FlexTaskFeeTypeEnum = 10 | 20 | 30 | 40;
+
+  interface FlexTaskListOutput {
+    taskId?: string;
+    /** 浠诲姟鍚嶇О */
+    taskName?: string;
+    releaseStatus?: FlexTaskReleaseStatusEnum;
+    /** 瀹夋帓鐘舵�� */
+    arrangeStatus?: boolean;
+    /** 鍙戝竷鏃ユ湡 */
+    startDate?: string;
+    /** 缁撴潫鏃ユ湡 */
+    endDate?: string;
+    feeType?: FlexTaskFeeTypeEnum;
+    settleType?: FlexTaskSettleTypeEnum;
+    settleStatus?: SettleStatusEnum;
+    /** 鏄惁鎺ㄨ崘 */
+    isRecommend?: boolean;
+    /** 缁撶畻鏂瑰紡 */
+    fee?: number;
+    /** 鎶ュ悕浜烘暟 */
+    applyWorkerCount?: number;
+    /** 鏄惁宸插畬鎴愰獙鏀� */
+    isOverCheck?: boolean;
+    overCheckStatus?: OverCheckStatusEnum;
+    creationTime?: string;
+  }
+
+  interface FlexTaskListOutputPageOutput {
+    pageModel?: Pagination;
+    objectData?: any;
+    data?: FlexTaskListOutput[];
+  }
 
   type FlexTaskReleaseStatusEnum = 10 | 20;
 
@@ -869,6 +906,44 @@
     signStatus?: FlexWorkerEleSignEnum;
   }
 
+  interface GetFlexTaskDetailForBackOutput {
+    /** 浠诲姟Id */
+    taskId?: string;
+    /** 浠诲姟鍚嶇О */
+    taskName?: string;
+    isArrange?: boolean;
+    startDate?: string;
+    endDate?: string;
+    feeType?: FlexTaskFeeTypeEnum;
+    feeTypeName?: string;
+    settleType?: FlexTaskSettleTypeEnum;
+    /** 缁撶畻鏂瑰紡 */
+    settleTypeName?: string;
+    /** 绂忓埄 */
+    taskWeals?: FlexTaskAideDto[];
+    /** 璇佷功 */
+    taskCerts?: FlexTaskAideDto[];
+    /** 鏈嶅姟璐� */
+    fee?: number;
+    provinceId?: number;
+    cityId?: number;
+    areaId?: number;
+    /** 鐪� */
+    provinceName?: string;
+    /** 甯� */
+    cityName?: string;
+    /** 鍖哄煙 */
+    areaName?: string;
+    /** 浠诲姟鍦扮偣 */
+    address?: string;
+    creationDate?: string;
+    /** 鏈�灏忓勾榫� */
+    minAge?: number;
+    /** 鏈�澶у勾榫� */
+    maxAge?: number;
+    sexType?: GenderTypeEnum;
+  }
+
   interface GetFlexTaskDtoOutput {
     taskId?: string;
     taskName?: string;
@@ -893,6 +968,19 @@
     minAge?: number;
     maxAge?: number;
     sexType?: GenderTypeEnum;
+  }
+
+  interface GetFlexTaskForBackInput {
+    pageModel?: Pagination;
+    /** 浠诲姟鍚嶇О */
+    taskName?: string;
+    /** 鍙戝竷寮�濮嬫棩鏈� */
+    startBeginDate?: string;
+    /** 鍙戝竷缁撴潫鏃ユ湡 */
+    startEndDate?: string;
+    releaseStatus?: FlexTaskReleaseStatusEnum;
+    /** 鏄惁鎺ㄨ崘 */
+    isRecommend?: boolean;
   }
 
   interface GetFlexTaskListByStatusInput {
@@ -961,6 +1049,11 @@
     /** 浠诲姟Id */
     flexTaskId?: string;
     checkAcceptStatus?: FlexTaskCheckAcceptStatusEnum;
+  }
+
+  interface GetFlexTaskWorkerListInput {
+    pageModel?: Pagination;
+    flexTaskId?: string;
   }
 
   interface GetFlexWorkerRecordOutput {
@@ -1102,6 +1195,27 @@
   interface GetTypeSearchSettingListInput {
     searchType: number;
     belongType?: number;
+  }
+
+  interface GetWorkerListForBackOutput {
+    userId?: string;
+    /** 濮撳悕 */
+    name?: string;
+    /** 韬唤璇佸彿鐮� */
+    idNumber?: string;
+    /** 鐢佃瘽鍙风爜 */
+    contactPhone?: string;
+    /** 骞撮緞 */
+    age?: number;
+    genderType?: GenderTypeEnum;
+    eduLevelName?: string;
+    hireStatus?: FlexTaskWorkerHireEnum;
+  }
+
+  interface GetWorkerListForBackOutputPageOutput {
+    pageModel?: Pagination;
+    objectData?: any;
+    data?: GetWorkerListForBackOutput[];
   }
 
   interface IanaTimeZone {
@@ -1393,6 +1507,7 @@
     resumeCertifiDetail?: UserResumeCertificateDetailOutput;
     resumeDetailInfo?: UserResumeDetailInfoOutput;
     resumeWorkExperience?: UserResumeWorkExperienceOutput;
+    /** 宸ヤ綔璁板綍 */
     resumeWorkRecordList?: UserResumeWorkerRecordOutput[];
   }
 
@@ -1441,6 +1556,8 @@
     securityToken?: string;
     requestId?: string;
   }
+
+  type OverCheckStatusEnum = 10 | 20 | -10;
 
   interface PageInput {
     pageModel?: Pagination;
@@ -1597,6 +1714,13 @@
     typeSimple?: string;
   }
 
+  interface RoleDto {
+    /** 瑙掕壊Id */
+    id?: string;
+    /** 瑙掕壊鍚� */
+    name?: string;
+  }
+
   interface SaveUserResumeBaseInfoInput {
     name?: string;
     socialIdentity?: string;
@@ -1693,10 +1817,18 @@
     preViewData?: string;
   }
 
+  interface SetRecommendInput {
+    id?: string;
+    /** 鏄惁鎺ㄨ崘 */
+    isRecommend?: boolean;
+  }
+
   interface SetRoleUserInput {
     userId?: string[];
     roleId?: string;
   }
+
+  type SettleStatusEnum = 10 | 20 | -10;
 
   interface SetUserRoleInput {
     userId?: string;
@@ -1828,51 +1960,102 @@
     items?: UserData[];
   }
 
-  interface UserResumeBaseInfoOutput {
+  interface UserDto {
+    /** 鐢ㄦ埛Id */
+    id?: string;
+    /** 鐧诲綍鐢ㄦ埛鍚嶏紙璐﹀彿锛� */
+    userName?: string;
+    /** 鍚嶇О */
     name?: string;
+    /** 鐢ㄦ埛鎵嬫満鍙� */
     phoneNumber?: string;
+    /** 璐︽埛鏄惁閿佷綇锛堟槸鍚︾鐢級 */
+    isLocked?: boolean;
+    /** 瑙掕壊淇℃伅 */
+    roles?: RoleDto[];
+    /** 澶囨敞 */
+    remark?: string;
+    /** 缁勭粐鏋舵瀯鍏徃id */
+    companyOrgId?: string;
+    /** 缁勭粐鏋舵瀯閮ㄩ棬id */
+    departmentOrgId?: string;
+  }
+
+  interface UserResumeBaseInfoOutput {
+    /** 濮撳悕 */
+    name?: string;
+    /** 鐢佃瘽鍙风爜 */
+    phoneNumber?: string;
+    /** 澶村儚 */
     avatarUrl?: string;
     genderType?: GenderTypeEnum;
+    /** 骞撮緞 */
     age?: number;
+    /** 涓婂矖娆℃暟 */
     arrangeCount?: number;
+    /** 韬唤璇佸彿鐮� */
     idNumber?: string;
+    /** 韬唤 */
     socialIdentity?: string;
+    /** 韬唤鍚嶇О */
     socialIdentityName?: string;
+    /** 瀛﹀巻 */
     educationalLevel?: string;
+    /** 瀛﹀巻鍚嶇О */
     educationalLevelName?: string;
+    /** 甯搁┗鐪佷唤Code */
     residentProvinceCode?: number;
+    /** 甯搁┗鍩庡競code */
     residentCityCode?: number;
+    /** 甯搁┗鐪佷唤鍚嶇О */
     residentProvinceName?: string;
+    /** 甯搁┗鍩庡競鍚嶇О */
     residentCityName?: string;
   }
 
   interface UserResumeCertificateDetailOutput {
+    /** 绠�鍘嗚璇佽鎯匢d */
     id?: string;
+    /** 鐢ㄦ埛绠�鍘咺d */
     userResumeId?: string;
+    /** 璁よ瘉绫诲埆Id */
     certificateTypeId?: string;
+    /** 璁よ瘉璇佷欢鍙烽粯璁よ韩浠借瘉 */
     certificateNo?: string;
+    /** 璇佷欢寮�濮嬫椂闂� */
     beginTime?: string;
+    /** 璇佷欢缁撴潫鏃堕棿 */
     endTime?: string;
+    /** 鏄惁姘镐箙 */
     isPermanent?: boolean;
     certificateUnit?: string;
+    /** 韬唤璇佹闈� */
     certificateFrontImgUrl?: string;
+    /** 韬唤璇佸弽闈� */
     certificateBackImgUrl?: string;
   }
 
   interface UserResumeCertificateListOutput {
     id?: string;
+    /** 璇佷功Id */
     certificateTypeId?: string;
+    /** 璇佷功鍚嶇О */
     certificateTypeName?: string;
+    /** 宸ヤ綔绠�鍘咺d */
     userResumeId?: string;
   }
 
   interface UserResumeDetailInfoOutput {
+    /** 韬珮 */
     height?: string;
+    /** 浣撻噸 */
     weight?: string;
+    /** 涓汉鐢熸椿鐓� */
     lifeCircleImgUrlList?: string[];
   }
 
   interface UserResumeExpectationJobOutput {
+    /** 鏈熸湜宀椾綅鍒楄〃 */
     jobIdList?: IdNameOutput[];
     freeTime?: UserResumeFreeTimeEnum;
     jobSeekingStatus?: UserResumeJobSeekingStatusEnum;
@@ -1883,13 +2066,18 @@
   type UserResumeJobSeekingStatusEnum = 1 | 2 | 3;
 
   interface UserResumeWorkerRecordOutput {
+    /** 宸ヤ綔鏃堕棿 */
     workTime?: string;
+    /** 宸ヤ綔鍦扮偣 */
     workAddress?: string;
+    /** 宸ヤ綔鍚嶇О */
     workName?: string;
   }
 
   interface UserResumeWorkExperienceOutput {
+    /** 宸ヤ綔骞撮檺 */
     workingSeniority?: string;
+    /** 宸ヤ綔缁忛獙 */
     workExperience?: string;
   }
 

--
Gitblit v1.9.1