From e5b6f4180bd311bb63c3c5c9b3074e3b6b60e19e Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期五, 08 八月 2025 10:32:12 +0800
Subject: [PATCH] feat: 任务

---
 src/constants/user.ts                                    |    4 
 types/global.d.ts                                        |    6 
 src/constants/task.ts                                    |   18 ++
 .eslintrc-auto-import.json                               |    9 +
 src/services/api/typings.d.ts                            |   75 ++++++++
 src/services/api/dictionary.ts                           |   36 ++--
 src/views/Permission/OperationUserManage.vue             |   24 +-
 src/services/api/task.ts                                 |   42 ++++
 src/services/api/index.ts                                |   16 +-
 src/views/TaskManage/components/SignDetailView.vue       |   31 ---
 src/views/TaskManage/components/SelltementDetailView.vue |   83 ++++++++++
 auto-imports.d.ts                                        |   19 ++
 src/constants/apiEnum.ts                                 |   28 +++
 src/constants/index.ts                                   |    1 
 src/views/TaskManage/TaskManageDetail.vue                |    4 
 src/services/api/user.ts                                 |   16 +-
 src/views/TaskManage/TaskManageList.vue                  |   39 ++--
 17 files changed, 337 insertions(+), 114 deletions(-)

diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json
index d70254c..93803cd 100644
--- a/.eslintrc-auto-import.json
+++ b/.eslintrc-auto-import.json
@@ -34,13 +34,20 @@
     "EnumRoleWebApiDataPowerText": true,
     "EnumRoleWebApiDataPowerTextForFilter": true,
     "EnumSettlementCycle": true,
+    "EnumSettlementCycleText": true,
     "EnumSmsAccess": true,
     "EnumSmsAccessText": true,
+    "EnumTaskCheckReceiveStatus": true,
+    "EnumTaskRecommendStatus": true,
+    "EnumTaskRecommendStatusText": true,
     "EnumTaskReleaseStatus": true,
+    "EnumTaskReleaseStatusText": true,
+    "EnumTaskSettlementStatus": true,
     "EnumTaskStatus": true,
+    "EnumTaskStatusText": true,
     "EnumUserGender": true,
-    "EnumUserInfoStatus": true,
     "EnumUserInfoStatusText": true,
+    "EnumUserStatus": true,
     "EnumUserType": true,
     "EnumUserTypeText": true,
     "ExtractDefaultPropTypes": true,
diff --git a/auto-imports.d.ts b/auto-imports.d.ts
index f3f0191..ca95e32 100644
--- a/auto-imports.d.ts
+++ b/auto-imports.d.ts
@@ -41,13 +41,21 @@
   const EnumRoleWebApiDataPowerText: typeof import('./src/constants/apiEnumText')['EnumRoleWebApiDataPowerText']
   const EnumRoleWebApiDataPowerTextForFilter: typeof import('./src/constants/apiEnumText')['EnumRoleWebApiDataPowerTextForFilter']
   const EnumSettlementCycle: typeof import('./src/constants/apiEnum')['EnumSettlementCycle']
+  const EnumSettlementCycleText: typeof import('./src/constants/task')['EnumSettlementCycleText']
   const EnumSmsAccess: typeof import('./src/constants/apiEnum')['EnumSmsAccess']
   const EnumSmsAccessText: typeof import('./src/constants/enterprise')['EnumSmsAccessText']
+  const EnumTaskCheckReceiveStatus: typeof import('./src/constants/apiEnum')['EnumTaskCheckReceiveStatus']
+  const EnumTaskRecommendStatus: typeof import('./src/constants/apiEnum')['EnumTaskRecommendStatus']
+  const EnumTaskRecommendStatusText: typeof import('./src/constants/task')['EnumTaskRecommendStatusText']
   const EnumTaskReleaseStatus: typeof import('./src/constants/apiEnum')['EnumTaskReleaseStatus']
+  const EnumTaskReleaseStatusText: typeof import('./src/constants/task')['EnumTaskReleaseStatusText']
+  const EnumTaskSettlementStatus: typeof import('./src/constants/apiEnum')['EnumTaskSettlementStatus']
   const EnumTaskStatus: typeof import('./src/constants/apiEnum')['EnumTaskStatus']
+  const EnumTaskStatusText: typeof import('./src/constants/task')['EnumTaskStatusText']
   const EnumUserGender: typeof import('./src/constants/apiEnum')['EnumUserGender']
   const EnumUserInfoStatus: typeof import('./src/constants/apiEnum')['EnumUserInfoStatus']
   const EnumUserInfoStatusText: typeof import('./src/constants/user')['EnumUserInfoStatusText']
+  const EnumUserStatus: typeof import('./src/constants/apiEnum')['EnumUserStatus']
   const EnumUserType: typeof import('./src/constants/apiEnum')['EnumUserType']
   const EnumUserTypeText: typeof import('./src/constants/apiEnumText')['EnumUserTypeText']
   const EnumWebApiMethod: typeof import('./src/constants/apiEnum')['EnumWebApiMethod']
@@ -211,7 +219,7 @@
   export type { Component, Slot, Slots, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
   import('vue')
   // @ts-ignore
-  export type { EnumBillingMethod, EnumClientType, EnumMenuType, EnumMenuVisitLevel, EnumPagedListOrder, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskReleaseStatus, EnumTaskStatus, EnumUserGender, EnumUserInfoStatus, EnumUserType, EnumBillingMethod, EnumClientType, EnumMenuType, EnumMenuVisitLevel, EnumPagedListOrder, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskReleaseStatus, EnumTaskStatus, EnumUserGender, EnumUserInfoStatus, EnumUserType } from './src/constants/apiEnum'
+  export type { EnumBillingMethod, EnumClientType, EnumMenuType, EnumMenuVisitLevel, EnumPagedListOrder, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumUserGender, EnumUserStatus, EnumUserType, EnumBillingMethod, EnumClientType, EnumMenuType, EnumMenuVisitLevel, EnumPagedListOrder, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumUserGender, EnumUserStatus, EnumUserType } from './src/constants/apiEnum'
   import('./src/constants/apiEnum')
   // @ts-ignore
   export type { FlexWorkerEleSignEnum, FlexTaskWorkerHireEnum, FlexWorkerEleSignEnum, FlexTaskWorkerHireEnum } from './src/constants/cPerson'
@@ -283,13 +291,20 @@
     readonly EnumRoleWebApiDataPowerText: UnwrapRef<typeof import('./src/constants/apiEnumText')['EnumRoleWebApiDataPowerText']>
     readonly EnumRoleWebApiDataPowerTextForFilter: UnwrapRef<typeof import('./src/constants/apiEnumText')['EnumRoleWebApiDataPowerTextForFilter']>
     readonly EnumSettlementCycle: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumSettlementCycle']>
+    readonly EnumSettlementCycleText: UnwrapRef<typeof import('./src/constants/task')['EnumSettlementCycleText']>
     readonly EnumSmsAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumSmsAccess']>
     readonly EnumSmsAccessText: UnwrapRef<typeof import('./src/constants/enterprise')['EnumSmsAccessText']>
+    readonly EnumTaskCheckReceiveStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskCheckReceiveStatus']>
+    readonly EnumTaskRecommendStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskRecommendStatus']>
+    readonly EnumTaskRecommendStatusText: UnwrapRef<typeof import('./src/constants/task')['EnumTaskRecommendStatusText']>
     readonly EnumTaskReleaseStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskReleaseStatus']>
+    readonly EnumTaskReleaseStatusText: UnwrapRef<typeof import('./src/constants/task')['EnumTaskReleaseStatusText']>
+    readonly EnumTaskSettlementStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskSettlementStatus']>
     readonly EnumTaskStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskStatus']>
+    readonly EnumTaskStatusText: UnwrapRef<typeof import('./src/constants/task')['EnumTaskStatusText']>
     readonly EnumUserGender: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumUserGender']>
-    readonly EnumUserInfoStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumUserInfoStatus']>
     readonly EnumUserInfoStatusText: UnwrapRef<typeof import('./src/constants/user')['EnumUserInfoStatusText']>
+    readonly EnumUserStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumUserStatus']>
     readonly EnumUserType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumUserType']>
     readonly EnumUserTypeText: UnwrapRef<typeof import('./src/constants/apiEnumText')['EnumUserTypeText']>
     readonly FastButtonMap: UnwrapRef<typeof import('./src/constants/module')['FastButtonMap']>
diff --git a/src/constants/apiEnum.ts b/src/constants/apiEnum.ts
index 1e227fd..f260f44 100644
--- a/src/constants/apiEnum.ts
+++ b/src/constants/apiEnum.ts
@@ -76,7 +76,7 @@
   /**鐢ㄦ埛瑙掕壊 */
   Role = 5,
   /**鐢ㄦ埛淇℃伅 */
-  UserInfo = 6,
+  User = 6,
   /**浼佷笟淇℃伅 */
   Enterprise = 7,
 }
@@ -125,12 +125,36 @@
   AliyunSms = 10,
 }
 
+/** 浠诲姟缁撶畻鐘舵�� */
+export enum EnumTaskCheckReceiveStatus {
+  /**寰呴獙鏀� */
+  Wait = 10,
+  /**宸查獙鏀� */
+  Completed = 30,
+}
+
+/** 浠诲姟鎺ㄨ崘鐘舵�� */
+export enum EnumTaskRecommendStatus {
+  /**鏈帹鑽� */
+  No = 10,
+  /**宸叉帹鑽� */
+  Yes = 20,
+}
+
 /** 浠诲姟鍙戝竷鐘舵�� */
 export enum EnumTaskReleaseStatus {
   /**鍙戝竷涓� */
   InProcess = 20,
   /**宸插仠姝� */
   Stopped = 100,
+}
+
+/** 浠诲姟缁撶畻鐘舵�� */
+export enum EnumTaskSettlementStatus {
+  /**寰呯粨绠� */
+  Wait = 10,
+  /**宸茬粨绠� */
+  Completed = 30,
 }
 
 /** 浠诲姟瀹夋帓鐘舵�� */
@@ -150,7 +174,7 @@
 }
 
 /** 鐢ㄦ埛淇℃伅鐘舵�� */
-export enum EnumUserInfoStatus {
+export enum EnumUserStatus {
   /**姝e父 */
   Normal = 10,
   /**绂佺敤 */
diff --git a/src/constants/index.ts b/src/constants/index.ts
index b179761..02c6032 100644
--- a/src/constants/index.ts
+++ b/src/constants/index.ts
@@ -16,3 +16,4 @@
 export * from './apiEnumText';
 export * from './user';
 export * from './dic';
+export * from './task';
diff --git a/src/constants/task.ts b/src/constants/task.ts
new file mode 100644
index 0000000..fa7fd95
--- /dev/null
+++ b/src/constants/task.ts
@@ -0,0 +1,18 @@
+export const EnumTaskStatusText = {
+  [EnumTaskStatus.Wait]: '寰呭畨鎺�',
+  [EnumTaskStatus.Complete]: '宸插畨鎺�',
+};
+export const EnumSettlementCycleText = {
+  [EnumSettlementCycle.Month]: '鏈堢粨',
+  [EnumSettlementCycle.Week]: '鍛ㄧ粨',
+  [EnumSettlementCycle.Day]: '鏃ョ粨',
+};
+
+export const EnumTaskReleaseStatusText = {
+  [EnumTaskReleaseStatus.InProcess]: '鍙戝竷涓�',
+  [EnumTaskReleaseStatus.Stopped]: '宸插仠姝�',
+};
+export const EnumTaskRecommendStatusText = {
+  [EnumTaskRecommendStatus.No]: '鏈帹鑽�',
+  [EnumTaskRecommendStatus.Yes]: '宸叉帹鑽�',
+};
diff --git a/src/constants/user.ts b/src/constants/user.ts
index 588b889..b0c901c 100644
--- a/src/constants/user.ts
+++ b/src/constants/user.ts
@@ -1,4 +1,4 @@
 export const EnumUserInfoStatusText = {
-  [EnumUserInfoStatus.Normal]: '姝e父',
-  [EnumUserInfoStatus.Disabled]: '绂佺敤',
+  [EnumUserStatus.Normal]: '姝e父',
+  [EnumUserStatus.Disabled]: '绂佺敤',
 };
diff --git a/src/services/api/dictionary.ts b/src/services/api/dictionary.ts
index c48fb89..4c74b85 100644
--- a/src/services/api/dictionary.ts
+++ b/src/services/api/dictionary.ts
@@ -2,12 +2,12 @@
 // @ts-ignore
 import { request } from '@/utils/request';
 
-/** 鍒犻櫎鏁版嵁瀛楀吀绫诲埆 DELETE /api/main/dictionary/deleteDictionaryCategory */
+/** 鍒犻櫎鏁版嵁瀛楀吀绫诲埆 DELETE /api/flexjob/dictionary/deleteDictionaryCategory */
 export async function deleteDictionaryCategory(
   body: API.DeleteDictionaryCategoryCommand,
   options?: API.RequestConfig
 ) {
-  return request<number>('/api/main/dictionary/deleteDictionaryCategory', {
+  return request<number>('/api/flexjob/dictionary/deleteDictionaryCategory', {
     method: 'DELETE',
     headers: {
       'Content-Type': 'application/json-patch+json',
@@ -17,13 +17,13 @@
   });
 }
 
-/** 鑾峰彇鏁版嵁瀛楀吀绫诲埆鍒嗛〉鍒楄〃鏁版嵁 POST /api/main/dictionary/getDictionaryCategories */
+/** 鑾峰彇鏁版嵁瀛楀吀绫诲埆鍒嗛〉鍒楄〃鏁版嵁 POST /api/flexjob/dictionary/getDictionaryCategories */
 export async function getDictionaryCategories(
   body: API.GetDictionaryCategoriesQuery,
   options?: API.RequestConfig
 ) {
   return request<API.PagedListQueryResultGetDictionaryCategoriesQueryResultItem>(
-    '/api/main/dictionary/getDictionaryCategories',
+    '/api/flexjob/dictionary/getDictionaryCategories',
     {
       method: 'POST',
       headers: {
@@ -35,14 +35,14 @@
   );
 }
 
-/** 鏌ヨ鏁版嵁瀛楀吀绫诲埆閫夋嫨鍣ㄦ暟鎹� GET /api/main/dictionary/getDictionaryCategorySelect */
+/** 鏌ヨ鏁版嵁瀛楀吀绫诲埆閫夋嫨鍣ㄦ暟鎹� GET /api/flexjob/dictionary/getDictionaryCategorySelect */
 export async function getDictionaryCategorySelect(
   // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
   params: API.APIgetDictionaryCategorySelectParams,
   options?: API.RequestConfig
 ) {
   return request<API.SelectOptionGuidGetDictionaryCategorySelectQueryOption[]>(
-    '/api/main/dictionary/getDictionaryCategorySelect',
+    '/api/flexjob/dictionary/getDictionaryCategorySelect',
     {
       method: 'GET',
       params: {
@@ -55,13 +55,13 @@
   );
 }
 
-/** 鑾峰彇鏁版嵁瀛楀吀鍒嗛〉鍒楄〃鏁版嵁 POST /api/main/dictionary/getDictionaryDatas */
+/** 鑾峰彇鏁版嵁瀛楀吀鍒嗛〉鍒楄〃鏁版嵁 POST /api/flexjob/dictionary/getDictionaryDatas */
 export async function getDictionaryDatas(
   body: API.GetDictionaryDatasQuery,
   options?: API.RequestConfig
 ) {
   return request<API.PagedListQueryResultGetDictionaryDatasQueryResultItem>(
-    '/api/main/dictionary/getDictionaryDatas',
+    '/api/flexjob/dictionary/getDictionaryDatas',
     {
       method: 'POST',
       headers: {
@@ -73,14 +73,14 @@
   );
 }
 
-/** 鏌ヨ鏁版嵁瀛楀吀閫夋嫨鍣� GET /api/main/dictionary/getDictionaryDataSelect */
+/** 鏌ヨ鏁版嵁瀛楀吀閫夋嫨鍣� GET /api/flexjob/dictionary/getDictionaryDataSelect */
 export async function getDictionaryDataSelect(
   // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
   params: API.APIgetDictionaryDataSelectParams,
   options?: API.RequestConfig
 ) {
   return request<API.SelectOptionStringGetDictionaryDataSelectQueryResultOption[]>(
-    '/api/main/dictionary/getDictionaryDataSelect',
+    '/api/flexjob/dictionary/getDictionaryDataSelect',
     {
       method: 'GET',
       params: {
@@ -91,12 +91,12 @@
   );
 }
 
-/** 淇濆瓨鏁版嵁瀛楀吀绫诲埆 POST /api/main/dictionary/saveDictionaryCategory */
+/** 淇濆瓨鏁版嵁瀛楀吀绫诲埆 POST /api/flexjob/dictionary/saveDictionaryCategory */
 export async function saveDictionaryCategory(
   body: API.SaveDictionaryCategoryCommand,
   options?: API.RequestConfig
 ) {
-  return request<string>('/api/main/dictionary/saveDictionaryCategory', {
+  return request<string>('/api/flexjob/dictionary/saveDictionaryCategory', {
     method: 'POST',
     headers: {
       'Content-Type': 'application/json-patch+json',
@@ -106,12 +106,12 @@
   });
 }
 
-/** 淇濆瓨鏁版嵁瀛楀吀 POST /api/main/dictionary/saveDictionaryData */
+/** 淇濆瓨鏁版嵁瀛楀吀 POST /api/flexjob/dictionary/saveDictionaryData */
 export async function saveDictionaryData(
   body: API.SaveDictionaryDataCommand,
   options?: API.RequestConfig
 ) {
-  return request<string>('/api/main/dictionary/saveDictionaryData', {
+  return request<string>('/api/flexjob/dictionary/saveDictionaryData', {
     method: 'POST',
     headers: {
       'Content-Type': 'application/json-patch+json',
@@ -121,12 +121,12 @@
   });
 }
 
-/** 璁剧疆鏁版嵁瀛楀吀鏄惁绂佺敤 PUT /api/main/dictionary/setDictionaryDataIsDisabled */
+/** 璁剧疆鏁版嵁瀛楀吀鏄惁绂佺敤 PUT /api/flexjob/dictionary/setDictionaryDataIsDisabled */
 export async function setDictionaryDataIsDisabled(
   body: API.SetDictionaryDataIsDisabledCommand,
   options?: API.RequestConfig
 ) {
-  return request<number>('/api/main/dictionary/setDictionaryDataIsDisabled', {
+  return request<number>('/api/flexjob/dictionary/setDictionaryDataIsDisabled', {
     method: 'PUT',
     headers: {
       'Content-Type': 'application/json-patch+json',
@@ -136,12 +136,12 @@
   });
 }
 
-/** 鍚屾浜哄姏璧勬簮鍦板尯瀛楀吀鏁版嵁 POST /api/main/dictionary/syncHumanResourcesAreaDictionaryData */
+/** 鍚屾浜哄姏璧勬簮鍦板尯瀛楀吀鏁版嵁 POST /api/flexjob/dictionary/syncHumanResourcesAreaDictionaryData */
 export async function syncHumanResourcesAreaDictionaryData(
   body: API.SyncHumanResourcesAreaDictionaryDataCommand,
   options?: API.RequestConfig
 ) {
-  return request<number>('/api/main/dictionary/syncHumanResourcesAreaDictionaryData', {
+  return request<number>('/api/flexjob/dictionary/syncHumanResourcesAreaDictionaryData', {
     method: 'POST',
     headers: {
       'Content-Type': 'application/json-patch+json',
diff --git a/src/services/api/index.ts b/src/services/api/index.ts
index de6fd71..dcda25c 100644
--- a/src/services/api/index.ts
+++ b/src/services/api/index.ts
@@ -2,21 +2,21 @@
 /* eslint-disable */
 // API 鏇存柊鏃堕棿锛�
 // API 鍞竴鏍囪瘑锛�
-import * as userInfo from './userInfo';
-import * as auth from './auth';
 import * as dictionary from './dictionary';
 import * as menu from './menu';
-import * as resource from './resource';
-import * as role from './role';
 import * as enterprise from './enterprise';
 import * as task from './task';
+import * as auth from './auth';
+import * as user from './user';
+import * as role from './role';
+import * as resource from './resource';
 export default {
-  userInfo,
-  auth,
   dictionary,
   menu,
-  resource,
-  role,
   enterprise,
   task,
+  auth,
+  user,
+  role,
+  resource,
 };
diff --git a/src/services/api/task.ts b/src/services/api/task.ts
index 264a625..23c1be7 100644
--- a/src/services/api/task.ts
+++ b/src/services/api/task.ts
@@ -2,13 +2,13 @@
 // @ts-ignore
 import { request } from '@/utils/request';
 
-/** 鏌ヨ浠诲姟璇︽儏 GET /api/main/task/getTaskInfo */
+/** 鏌ヨ浠诲姟璇︽儏 GET /api/flexjob/task/getTaskInfo */
 export async function getTaskInfo(
   // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
   params: API.APIgetTaskInfoParams,
   options?: API.RequestConfig
 ) {
-  return request<API.GetTaskInfoQueryResult>('/api/main/task/getTaskInfo', {
+  return request<API.GetTaskInfoQueryResult>('/api/flexjob/task/getTaskInfo', {
     method: 'GET',
     params: {
       ...params,
@@ -17,10 +17,10 @@
   });
 }
 
-/** 鏌ヨ浠诲姟鍒嗛〉鍒楄〃 POST /api/main/task/getTaskInfos */
+/** 鏌ヨ浠诲姟鍒嗛〉鍒楄〃 POST /api/flexjob/task/getTaskInfos */
 export async function getTaskInfos(body: API.GetTaskInfosQuery, options?: API.RequestConfig) {
   return request<API.PagedListQueryResultGetTaskInfosQueryResultItem>(
-    '/api/main/task/getTaskInfos',
+    '/api/flexjob/task/getTaskInfos',
     {
       method: 'POST',
       headers: {
@@ -32,9 +32,9 @@
   );
 }
 
-/** 淇濆瓨浠诲姟 POST /api/main/task/saveTaskInfo */
+/** 淇濆瓨浠诲姟 POST /api/flexjob/task/saveTaskInfo */
 export async function saveTaskInfo(body: API.SaveTaskInfoCommand, options?: API.RequestConfig) {
-  return request<string>('/api/main/task/saveTaskInfo', {
+  return request<string>('/api/flexjob/task/saveTaskInfo', {
     method: 'POST',
     headers: {
       'Content-Type': 'application/json-patch+json',
@@ -43,3 +43,33 @@
     ...(options || {}),
   });
 }
+
+/** 璁剧疆浠诲姟鏄惁鎺ㄨ崘 PUT /api/flexjob/task/setTaskInfoRecommendStatus */
+export async function setTaskInfoRecommendStatus(
+  body: API.SetTaskInfoRecommendStatusCommand,
+  options?: API.RequestConfig
+) {
+  return request<number>('/api/flexjob/task/setTaskInfoRecommendStatus', {
+    method: 'PUT',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 璁剧疆浠诲姟鍙戝竷鐘舵�� PUT /api/flexjob/task/setTaskInfoReleaseStatus */
+export async function setTaskInfoReleaseStatus(
+  body: API.SetTaskInfoReleaseStatusCommand,
+  options?: API.RequestConfig
+) {
+  return request<number>('/api/flexjob/task/setTaskInfoReleaseStatus', {
+    method: 'PUT',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
diff --git a/src/services/api/typings.d.ts b/src/services/api/typings.d.ts
index f99c072..4d2153f 100644
--- a/src/services/api/typings.d.ts
+++ b/src/services/api/typings.d.ts
@@ -192,7 +192,7 @@
     /**鐢ㄦ埛瑙掕壊 */
     Role = 5,
     /**鐢ㄦ埛淇℃伅 */
-    UserInfo = 6,
+    User = 6,
     /**浼佷笟淇℃伅 */
     Enterprise = 7,
   }
@@ -237,11 +237,32 @@
     AliyunSms = 10,
   }
 
+  enum EnumTaskCheckReceiveStatus {
+    /**寰呴獙鏀� */
+    Wait = 10,
+    /**宸查獙鏀� */
+    Completed = 30,
+  }
+
+  enum EnumTaskRecommendStatus {
+    /**鏈帹鑽� */
+    No = 10,
+    /**宸叉帹鑽� */
+    Yes = 20,
+  }
+
   enum EnumTaskReleaseStatus {
     /**鍙戝竷涓� */
     InProcess = 20,
     /**宸插仠姝� */
     Stopped = 100,
+  }
+
+  enum EnumTaskSettlementStatus {
+    /**寰呯粨绠� */
+    Wait = 10,
+    /**宸茬粨绠� */
+    Completed = 30,
   }
 
   enum EnumTaskStatus {
@@ -258,7 +279,7 @@
     Female = 20,
   }
 
-  enum EnumUserInfoStatus {
+  enum EnumUserStatus {
     /**姝e父 */
     Normal = 10,
     /**绂佺敤 */
@@ -996,7 +1017,7 @@
     remark?: string;
     /** 瑙掕壊 */
     roles?: GetOperationUserInfosQueryResultItemRole[];
-    status?: EnumUserInfoStatus;
+    status?: EnumUserStatus;
   }
 
   interface GetOperationUserInfosQueryResultItemRole {
@@ -1102,6 +1123,12 @@
   interface GetTaskInfoQueryResult {
     /** Id */
     id?: string;
+    /** 浼佷笟Id */
+    enterpriseId?: string;
+    /** 浼佷笟鍏ㄧО */
+    enterpriseName?: string;
+    /** 鍦ㄦ嫑宀椾綅鏁伴噺 */
+    taskCount?: number;
     /** 浠诲姟鍚嶇О */
     name?: string;
     billingMethod?: EnumBillingMethod;
@@ -1125,14 +1152,18 @@
     cityCode?: string;
     /** 浠诲姟鍦扮偣鎵�灞炲煄甯� */
     cityName?: string;
+    /** 浠诲姟鍦扮偣鍚嶇О */
+    addressName?: string;
     /** 浠诲姟鍦扮偣璇︾粏鍦板潃 */
-    address?: string;
+    addressDetail?: string;
     /** 浠诲姟寮�濮嬫椂闂� */
     beginTime?: string;
     /** 浠诲姟缁撴潫鏃堕棿 */
     endTime?: string;
     /** 鍒涘缓鏃堕棿 */
     createdTime?: string;
+    /** 鏄惁宸叉敹钘� */
+    isCollected?: boolean;
   }
 
   interface GetTaskInfosQuery {
@@ -1141,11 +1172,20 @@
     keywords?: string;
     /** 鍙戝竷鏃堕棿 */
     time?: string;
+    /** 浠诲姟鍦扮偣鎵�灞炲煄甯傜紪鍙� */
+    cityCode?: string;
+    settlementCycle?: EnumSettlementCycle;
+    /** 鍛樺伐绂忓埄 */
+    benefitCodes?: string[];
+    genderLimit?: EnumUserGender;
     status?: EnumTaskStatus;
     releaseStatus?: EnumTaskReleaseStatus;
+    recommendStatus?: EnumTaskRecommendStatus;
   }
 
   interface GetTaskInfosQueryResultItem {
+    /** Id */
+    id?: string;
     /** 浠诲姟鍚嶇О */
     name: string;
     /** 浠诲姟鍗曞彿 */
@@ -1163,6 +1203,11 @@
     /** 浠诲姟缁撴潫鏃堕棿 */
     endTime?: string;
     releaseStatus?: EnumTaskReleaseStatus;
+    checkReceiveStatus?: EnumTaskCheckReceiveStatus;
+    settlementStatus?: EnumTaskSettlementStatus;
+    recommendStatus?: EnumTaskRecommendStatus;
+    /** 鍒涘缓鏃堕棿 */
+    createdTime?: string;
   }
 
   interface GetUserInfoRolesQueryResultItem {
@@ -1492,8 +1537,14 @@
     provinceCode: string;
     /** 浠诲姟鍦扮偣鎵�灞炲煄甯傜紪鍙� */
     cityCode: string;
+    /** 浠诲姟鍦扮偣鍚嶇О */
+    addressName: string;
     /** 浠诲姟鍦扮偣璇︾粏鍦板潃 */
-    address: string;
+    addressDetail: string;
+    /** 缁忓害 */
+    longitude?: number;
+    /** 绾害 */
+    latitude?: number;
     /** 浠诲姟寮�濮嬫椂闂� */
     beginTime: string;
     /** 浠诲姟缁撴潫鏃堕棿 */
@@ -1567,6 +1618,18 @@
     userInfoIds?: string[];
   }
 
+  interface SetTaskInfoRecommendStatusCommand {
+    /** Id */
+    ids?: string[];
+    recommendStatus?: EnumTaskRecommendStatus;
+  }
+
+  interface SetTaskInfoReleaseStatusCommand {
+    /** Id */
+    ids?: string[];
+    releaseStatus?: EnumTaskReleaseStatus;
+  }
+
   interface SetUserInfoRolesCommand {
     /** 鐢ㄦ埛Id */
     userInfoId?: string;
@@ -1577,7 +1640,7 @@
   interface SetUserInfoStatusCommand {
     /** Id */
     ids?: string[];
-    status?: EnumUserInfoStatus;
+    status?: EnumUserStatus;
   }
 
   type SyncHumanResourcesAreaDictionaryDataCommand = Record<string, any>;
diff --git a/src/services/api/userInfo.ts b/src/services/api/user.ts
similarity index 71%
rename from src/services/api/userInfo.ts
rename to src/services/api/user.ts
index 4367d18..3d4e6e0 100644
--- a/src/services/api/userInfo.ts
+++ b/src/services/api/user.ts
@@ -2,13 +2,13 @@
 // @ts-ignore
 import { request } from '@/utils/request';
 
-/** 鏌ヨ杩愯惀绔敤鎴峰垎椤靛垪琛ㄦ暟鎹� POST /api/user/userInfo/getOperationUserInfos */
+/** 鏌ヨ杩愯惀绔敤鎴峰垎椤靛垪琛ㄦ暟鎹� POST /api/user/user/getOperationUserInfos */
 export async function getOperationUserInfos(
   body: API.GetOperationUserInfosQuery,
   options?: API.RequestConfig
 ) {
   return request<API.PagedListQueryResultGetOperationUserInfosQueryResultItem>(
-    '/api/user/userInfo/getOperationUserInfos',
+    '/api/user/user/getOperationUserInfos',
     {
       method: 'POST',
       headers: {
@@ -20,13 +20,13 @@
   );
 }
 
-/** 鏌ヨ鐢ㄦ埛瑙掕壊鍒楄〃 GET /api/user/userInfo/getUserInfoRoles */
+/** 鏌ヨ鐢ㄦ埛瑙掕壊鍒楄〃 GET /api/user/user/getUserInfoRoles */
 export async function getUserInfoRoles(
   // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
   params: API.APIgetUserInfoRolesParams,
   options?: API.RequestConfig
 ) {
-  return request<API.GetUserInfoRolesQueryResultItem[]>('/api/user/userInfo/getUserInfoRoles', {
+  return request<API.GetUserInfoRolesQueryResultItem[]>('/api/user/user/getUserInfoRoles', {
     method: 'GET',
     params: {
       ...params,
@@ -35,12 +35,12 @@
   });
 }
 
-/** 璁剧疆鐢ㄦ埛淇℃伅瑙掕壊 PUT /api/user/userInfo/setUserInfoRoles */
+/** 璁剧疆鐢ㄦ埛淇℃伅瑙掕壊 PUT /api/user/user/setUserInfoRoles */
 export async function setUserInfoRoles(
   body: API.SetUserInfoRolesCommand,
   options?: API.RequestConfig
 ) {
-  return request<number>('/api/user/userInfo/setUserInfoRoles', {
+  return request<number>('/api/user/user/setUserInfoRoles', {
     method: 'PUT',
     headers: {
       'Content-Type': 'application/json-patch+json',
@@ -50,12 +50,12 @@
   });
 }
 
-/** 璁剧疆鐢ㄦ埛淇℃伅鐘舵�� PUT /api/user/userInfo/setUserInfoStatus */
+/** 璁剧疆鐢ㄦ埛淇℃伅鐘舵�� PUT /api/user/user/setUserInfoStatus */
 export async function setUserInfoStatus(
   body: API.SetUserInfoStatusCommand,
   options?: API.RequestConfig
 ) {
-  return request<number>('/api/user/userInfo/setUserInfoStatus', {
+  return request<number>('/api/user/user/setUserInfoStatus', {
     method: 'PUT',
     headers: {
       'Content-Type': 'application/json-patch+json',
diff --git a/src/views/Permission/OperationUserManage.vue b/src/views/Permission/OperationUserManage.vue
index c33d828..b66c8c3 100644
--- a/src/views/Permission/OperationUserManage.vue
+++ b/src/views/Permission/OperationUserManage.vue
@@ -24,8 +24,8 @@
             v-model="row.status"
             active-text="鍚敤"
             inactive-text="绂佺敤"
-            :active-value="EnumUserInfoStatus.Normal"
-            :inactive-value="EnumUserInfoStatus.Disabled"
+            :active-value="EnumUserStatus.Normal"
+            :inactive-value="EnumUserStatus.Disabled"
             :before-change="() => setStatus(row)"
           />
         </template>
@@ -50,9 +50,9 @@
 } from '@bole-core/components';
 import { useAccess } from '@/hooks';
 import { formatRoleName } from '@/utils';
-import * as userInfoServices from '@/services/api/userInfo';
+import * as userServices from '@/services/api/user';
 import { Message } from '@bole-core/core';
-import { EnumUserInfoStatus } from '@/constants';
+import { EnumUserStatus } from '@/constants';
 import SetOperationUserRoleDialog from './components/SetOperationUserRoleDialog.vue';
 
 defineOptions({
@@ -95,7 +95,7 @@
         },
         keywords: extraParamState.keywords,
       };
-      let res = await userInfoServices.getOperationUserInfos(params, {
+      let res = await userServices.getOperationUserInfos(params, {
         showLoading: !state.loading,
       });
       return res;
@@ -106,7 +106,7 @@
       keywords: '',
       orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
     },
-    queryKey: ['userInfoServices/getOperationUserInfos'],
+    queryKey: ['userServices/getOperationUserInfos'],
     columnsRenderProps: {},
   }
 );
@@ -114,16 +114,14 @@
 async function setStatus(row: API.GetOperationUserInfosQueryResultItem) {
   try {
     await Message.tipMessage(
-      `纭瑕�${row.status === EnumUserInfoStatus.Normal ? '绂佺敤' : '鍚敤'}璇ヨ处鍙峰悧锛焋
+      `纭瑕�${row.status === EnumUserStatus.Normal ? '绂佺敤' : '鍚敤'}璇ヨ处鍙峰悧锛焋
     );
     let params: API.SetUserInfoStatusCommand = {
       ids: [row.id],
       status:
-        row.status === EnumUserInfoStatus.Normal
-          ? EnumUserInfoStatus.Disabled
-          : EnumUserInfoStatus.Normal,
+        row.status === EnumUserStatus.Normal ? EnumUserStatus.Disabled : EnumUserStatus.Normal,
     };
-    let res = await userInfoServices.setUserInfoStatus(params);
+    let res = await userServices.setUserInfoStatus(params);
     return !!res;
   } catch (error) {}
 }
@@ -154,7 +152,7 @@
       userInfoId: editForm.userInfoId,
       roleIds: editForm.roleIds,
     };
-    let res = await userInfoServices.setUserInfoRoles(params);
+    let res = await userServices.setUserInfoRoles(params);
     if (res) {
       Message.successMessage('鎿嶄綔鎴愬姛');
       getList(paginationState.pageIndex);
@@ -168,7 +166,7 @@
       userInfoId: row.id,
       // clientType: row.clientType,
     };
-    let res = await userInfoServices.getUserInfoRoles(params);
+    let res = await userServices.getUserInfoRoles(params);
     return res;
   } catch (error) {}
 }
diff --git a/src/views/TaskManage/TaskManageDetail.vue b/src/views/TaskManage/TaskManageDetail.vue
index f664309..3dd88d4 100644
--- a/src/views/TaskManage/TaskManageDetail.vue
+++ b/src/views/TaskManage/TaskManageDetail.vue
@@ -8,6 +8,9 @@
         <ProTabPane lazy label="鎶ュ悕璇︽儏" name="sign">
           <SignDetailView></SignDetailView>
         </ProTabPane>
+        <ProTabPane lazy label="缁撶畻璇︽儏" name="settle">
+          <SelltementDetailView></SelltementDetailView>
+        </ProTabPane>
       </ProTabs>
     </AppContainer>
   </LoadingLayout>
@@ -17,6 +20,7 @@
 import { AppContainer, ProTabs, ProTabPane } from '@bole-core/components';
 import TaskDetailView from './components/TaskDetailView.vue';
 import SignDetailView from './components/SignDetailView.vue';
+import SelltementDetailView from './components/SelltementDetailView.vue';
 
 defineOptions({
   name: 'TaskManageDetail',
diff --git a/src/views/TaskManage/TaskManageList.vue b/src/views/TaskManage/TaskManageList.vue
index 1409251..b6433ff 100644
--- a/src/views/TaskManage/TaskManageList.vue
+++ b/src/views/TaskManage/TaskManageList.vue
@@ -5,11 +5,8 @@
         <template #query>
           <QueryFilterItem tip-content="鍙戝竷鐘舵��">
             <FieldRadio
-              v-model="extraParamState.status"
-              :value-enum="[
-                { value: true, label: '鍙戝竷涓�' },
-                { value: false, label: '宸插仠姝�' },
-              ]"
+              v-model="extraParamState.releaseStatus"
+              :value-enum="EnumTaskReleaseStatusText"
               buttonStyle
               showAllBtn
               @change="getList()"
@@ -17,11 +14,8 @@
           </QueryFilterItem>
           <QueryFilterItem tip-content="鎺ㄨ崘鐘舵��">
             <FieldRadio
-              v-model="extraParamState.status"
-              :value-enum="[
-                { value: true, label: '宸叉帹鑽�' },
-                { value: false, label: '鏈帹鑽�' },
-              ]"
+              v-model="extraParamState.recommendStatus"
+              :value-enum="EnumTaskRecommendStatusText"
               buttonStyle
               showAllBtn
               @change="getList()"
@@ -29,7 +23,7 @@
           </QueryFilterItem>
           <QueryFilterItem tip-content="鍙戝竷鏃堕棿">
             <FieldDatePicker
-              v-model="extraParamState.beginDate"
+              v-model="extraParamState.time"
               type="daterange"
               range-separator="~"
               start-placeholder="寮�濮嬫棩鏈�"
@@ -40,7 +34,7 @@
           </QueryFilterItem>
           <QueryFilterItem>
             <SearchInput
-              v-model="extraParamState.keyword"
+              v-model="extraParamState.keywords"
               style="width: 260px"
               placeholder="浠诲姟鍚嶇О"
               @on-click-search="getList"
@@ -70,7 +64,8 @@
 } from '@bole-core/components';
 import { useAccess } from '@/hooks';
 import { ModelValueType } from 'element-plus';
-import * as enterpriseServices from '@/services/api/enterprise';
+import * as taskServices from '@/services/api/task';
+import { EnumTaskReleaseStatusText, EnumTaskRecommendStatusText } from '@/constants';
 
 defineOptions({
   name: 'OperationManageList',
@@ -118,15 +113,18 @@
 } = useTable(
   async ({ pageIndex, pageSize }, extraParamState) => {
     try {
-      let params: API.GetEnterprisesQuery = {
+      let params: API.GetTaskInfosQuery = {
         pageModel: {
           rows: pageSize,
           page: pageIndex,
           orderInput: extraParamState.orderInput,
         },
-        // searchKeys: extraParamState.keyword,
+        keywords: extraParamState.keywords,
+        releaseStatus: extraParamState.releaseStatus,
+        recommendStatus: extraParamState.recommendStatus,
+        // time: extraParamState.time,
       };
-      let res = await enterpriseServices.getEnterprises(params, {
+      let res = await taskServices.getTaskInfos(params, {
         showLoading: !state.loading,
       });
       return res;
@@ -134,11 +132,10 @@
   },
   {
     defaultExtraParams: {
-      keyword: '',
-      pageType: '' as any as number,
-      status: '' as any as boolean,
-      beginDate: [] as unknown as ModelValueType,
-      endDate: [] as unknown as ModelValueType,
+      keywords: '',
+      releaseStatus: '' as any as EnumTaskReleaseStatus,
+      recommendStatus: '' as any as EnumTaskRecommendStatus,
+      time: [] as unknown as ModelValueType,
       orderInput: [{ property: 'id', order: EnumPagedListOrder.Asc }],
     },
     columnsRenderProps: {},
diff --git a/src/views/TaskManage/components/SelltementDetailView.vue b/src/views/TaskManage/components/SelltementDetailView.vue
new file mode 100644
index 0000000..58e1843
--- /dev/null
+++ b/src/views/TaskManage/components/SelltementDetailView.vue
@@ -0,0 +1,83 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableV2
+        v-bind="proTableProps"
+        :columns="settleColumns"
+        :operationBtns="settleOperationBtns"
+      >
+      </ProTableV2>
+    </AppContainer>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import { ProTableV2, LoadingLayout, AppContainer, useTable } from '@bole-core/components';
+import { ModelValueType } from 'element-plus';
+import * as enterpriseServices from '@/services/api/enterprise';
+
+defineOptions({
+  name: 'SelltementDetailView',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+  'settle-downloadBtn': { emits: { onClick: (role) => handleDownload(role) } },
+};
+
+const { checkSubModuleItemShow, column, operationBtns } = useAccess({
+  operationBtnMap,
+});
+
+const [settleColumns] = useGroupColumns(column, ['settle-']);
+const [settleOperationBtns] = useGroupOperationBtns(operationBtns, ['settle-']);
+
+const router = useRouter();
+const BaseState = {
+  loading: true,
+};
+
+const state = reactive({ ...BaseState });
+
+onMounted(async () => {
+  await getList();
+  state.loading = false;
+});
+
+const {
+  getDataSource: getList,
+  proTableProps,
+  paginationState,
+  extraParamState,
+  reset,
+} = useTable(
+  async ({ pageIndex, pageSize }, extraParamState) => {
+    try {
+      let params: API.GetEnterprisesQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          orderInput: extraParamState.orderInput,
+        },
+        // searchKeys: extraParamState.keyword,
+      };
+      let res = await enterpriseServices.getEnterprises(params, {
+        showLoading: !state.loading,
+      });
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      keyword: '',
+      pageType: '' as any as number,
+      status: '' as any as boolean,
+      beginDate: [] as unknown as ModelValueType,
+      endDate: [] as unknown as ModelValueType,
+      orderInput: [{ property: 'id', order: EnumPagedListOrder.Asc }],
+    },
+    columnsRenderProps: {},
+  }
+);
+
+function handleDownload(row) {}
+</script>
diff --git a/src/views/TaskManage/components/SignDetailView.vue b/src/views/TaskManage/components/SignDetailView.vue
index 8a59d91..7ef9a0f 100644
--- a/src/views/TaskManage/components/SignDetailView.vue
+++ b/src/views/TaskManage/components/SignDetailView.vue
@@ -1,21 +1,14 @@
 <template>
   <LoadingLayout :loading="state.loading">
     <AppContainer>
-      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
+      <ProTableV2 v-bind="proTableProps" :columns="signColumns" :operationBtns="signOperationBtns">
       </ProTableV2>
     </AppContainer>
   </LoadingLayout>
 </template>
 
 <script setup lang="ts">
-import {
-  OperationBtnType,
-  ProTableV2,
-  LoadingLayout,
-  AppContainer,
-  useTable,
-} from '@bole-core/components';
-import { useAccess } from '@/hooks';
+import { ProTableV2, LoadingLayout, AppContainer, useTable } from '@bole-core/components';
 import { ModelValueType } from 'element-plus';
 import * as enterpriseServices from '@/services/api/enterprise';
 
@@ -24,25 +17,15 @@
 });
 
 const operationBtnMap: Record<string, OperationBtnType> = {
-  detailBtn: { emits: { onClick: (role) => goDetail(role) } },
-  recommendBtn: {
-    emits: { onClick: (role) => setAdvertiseOnShowStatus(role) },
-    extraProps: {
-      hide: (row) => row.status,
-    },
-  },
-  cancelRecommendBtn: {
-    emits: { onClick: (role) => setAdvertiseOnShowStatus(role) },
-    props: { type: 'danger' },
-    extraProps: {
-      hide: (row) => !row.status,
-    },
-  },
+  'sign-detailBtn': { emits: { onClick: (role) => goDetail(role) } },
 };
 
 const { checkSubModuleItemShow, column, operationBtns } = useAccess({
   operationBtnMap,
 });
+
+const [signColumns] = useGroupColumns(column, ['sign-']);
+const [signOperationBtns] = useGroupOperationBtns(operationBtns, ['sign-']);
 
 const router = useRouter();
 const BaseState = {
@@ -92,7 +75,7 @@
   }
 );
 
-async function setAdvertiseOnShowStatus(row) {
+async function handleRecommend(row) {
   try {
   } catch (error) {}
 }
diff --git a/types/global.d.ts b/types/global.d.ts
index 33ce661..b091bab 100644
--- a/types/global.d.ts
+++ b/types/global.d.ts
@@ -137,9 +137,9 @@
     provinceName?: string;
     cityName?: string;
     countyName?: string;
-    provinceCode?: number;
-    cityCode?: number;
-    countyCode?: number;
+    provinceCode?: string;
+    cityCode?: string;
+    countyCode?: string;
     address?: string;
   }
 

--
Gitblit v1.9.1