From 84e27a26dcbee4d0706dfad6059454ea85fadacc Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期五, 15 八月 2025 14:20:54 +0800
Subject: [PATCH] fix: 修改角色授权代码

---
 src/views/Permission/RoleManage.vue                   |    3 
 src/services/api/resource.ts                          |   15 -
 .eslintrc-auto-import.json                            |    5 
 src/services/api/typings.d.ts                         |  278 +++++++++++++++++++++++-
 src/utils/common/tree.ts                              |   26 ++
 src/services/api/taskUser.ts                          |   15 +
 src/views/Permission/components/dialogAuthorizeV2.vue |  127 ++++------
 src/services/api/index.ts                             |    4 
 src/services/api/userResume.ts                        |   15 +
 src/services/api/fileUtils.ts                         |   52 ++++
 auto-imports.d.ts                                     |   12 +
 src/constants/apiEnum.ts                              |   58 ++++
 src/services/api/ocrUtils.ts                          |   18 +
 src/services/api/user.ts                              |   15 +
 14 files changed, 527 insertions(+), 116 deletions(-)

diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json
index 3725c7e..92ed0ec 100644
--- a/.eslintrc-auto-import.json
+++ b/.eslintrc-auto-import.json
@@ -25,11 +25,16 @@
     "EnumBillingMethodUnitText": true,
     "EnumClientType": true,
     "EnumClientTypeText": true,
+    "EnumDataSource": true,
+    "EnumEnterpriseRealMethod": true,
     "EnumMenuType": true,
     "EnumMenuVisitLevel": true,
+    "EnumOcrAccess": true,
     "EnumPagedListOrder": true,
+    "EnumPayAccess": true,
     "EnumPersonalFreeTime": true,
     "EnumPersonalJobSeekingStatus": true,
+    "EnumPersonalRealMethod": true,
     "EnumRealAccess": true,
     "EnumRealAccessText": true,
     "EnumResourceController": true,
diff --git a/auto-imports.d.ts b/auto-imports.d.ts
index f4b04b9..0bc8cee 100644
--- a/auto-imports.d.ts
+++ b/auto-imports.d.ts
@@ -33,11 +33,16 @@
   const EnumBillingMethodUnitText: typeof import('./src/constants/task')['EnumBillingMethodUnitText']
   const EnumClientType: typeof import('./src/constants/apiEnum')['EnumClientType']
   const EnumClientTypeText: typeof import('./src/constants/apiEnumText')['EnumClientTypeText']
+  const EnumDataSource: typeof import('./src/constants/apiEnum')['EnumDataSource']
+  const EnumEnterpriseRealMethod: typeof import('./src/constants/apiEnum')['EnumEnterpriseRealMethod']
   const EnumMenuType: typeof import('./src/constants/apiEnum')['EnumMenuType']
   const EnumMenuVisitLevel: typeof import('./src/constants/apiEnum')['EnumMenuVisitLevel']
+  const EnumOcrAccess: typeof import('./src/constants/apiEnum')['EnumOcrAccess']
   const EnumPagedListOrder: typeof import('./src/constants/apiEnum')['EnumPagedListOrder']
+  const EnumPayAccess: typeof import('./src/constants/apiEnum')['EnumPayAccess']
   const EnumPersonalFreeTime: typeof import('./src/constants/apiEnum')['EnumPersonalFreeTime']
   const EnumPersonalJobSeekingStatus: typeof import('./src/constants/apiEnum')['EnumPersonalJobSeekingStatus']
+  const EnumPersonalRealMethod: typeof import('./src/constants/apiEnum')['EnumPersonalRealMethod']
   const EnumRealAccess: typeof import('./src/constants/apiEnum')['EnumRealAccess']
   const EnumRealAccessText: typeof import('./src/constants/enterprise')['EnumRealAccessText']
   const EnumResourceController: typeof import('./src/constants/apiEnum')['EnumResourceController']
@@ -253,7 +258,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, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, EnumBillingMethod, EnumClientType, EnumMenuType, EnumMenuVisitLevel, EnumPagedListOrder, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton } from './src/constants/apiEnum'
+  export type { EnumBillingMethod, EnumClientType, EnumDataSource, EnumEnterpriseRealMethod, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, EnumBillingMethod, EnumClientType, EnumDataSource, EnumEnterpriseRealMethod, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton } from './src/constants/apiEnum'
   import('./src/constants/apiEnum')
   // @ts-ignore
   export type { FlexWorkerEleSignEnum, FlexTaskWorkerHireEnum, FlexWorkerEleSignEnum, FlexTaskWorkerHireEnum } from './src/constants/cPerson'
@@ -316,11 +321,16 @@
     readonly EnumBillingMethodUnitText: UnwrapRef<typeof import('./src/constants/task')['EnumBillingMethodUnitText']>
     readonly EnumClientType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumClientType']>
     readonly EnumClientTypeText: UnwrapRef<typeof import('./src/constants/apiEnumText')['EnumClientTypeText']>
+    readonly EnumDataSource: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumDataSource']>
+    readonly EnumEnterpriseRealMethod: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseRealMethod']>
     readonly EnumMenuType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumMenuType']>
     readonly EnumMenuVisitLevel: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumMenuVisitLevel']>
+    readonly EnumOcrAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumOcrAccess']>
     readonly EnumPagedListOrder: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPagedListOrder']>
+    readonly EnumPayAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPayAccess']>
     readonly EnumPersonalFreeTime: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPersonalFreeTime']>
     readonly EnumPersonalJobSeekingStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPersonalJobSeekingStatus']>
+    readonly EnumPersonalRealMethod: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPersonalRealMethod']>
     readonly EnumRealAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumRealAccess']>
     readonly EnumRealAccessText: UnwrapRef<typeof import('./src/constants/enterprise')['EnumRealAccessText']>
     readonly EnumResourceController: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumResourceController']>
diff --git a/src/constants/apiEnum.ts b/src/constants/apiEnum.ts
index 01db867..15ec8af 100644
--- a/src/constants/apiEnum.ts
+++ b/src/constants/apiEnum.ts
@@ -21,6 +21,20 @@
   Wxmp = 20,
 }
 
+/** 鏁版嵁鏉ユ簮 */
+export enum EnumDataSource {
+  /**818 */
+  HumanResources = 10,
+}
+
+/** 浼佷笟瀹炲悕鏂瑰紡 */
+export enum EnumEnterpriseRealMethod {
+  /**浼佷笟涓夎绱� */
+  Identity3 = 10,
+  /**浼佷笟鍥涜绱� */
+  Identity4 = 20,
+}
+
 /** 鑿滃崟绫诲瀷 */
 export enum EnumMenuType {
   /**鑿滃崟 */
@@ -45,12 +59,26 @@
   NeedPower = 30,
 }
 
+/** 鏂囧瓧璇嗗埆閫氶亾 */
+export enum EnumOcrAccess {
+  /**鐧惧害 */
+  Baidu = 10,
+}
+
 /** 鍒嗛〉鍒楄〃鎺掑簭 */
 export enum EnumPagedListOrder {
   /**鍗囧簭 */
   Asc = 0,
   /**闄嶅簭 */
   Desc = 1,
+}
+
+/** 鏀粯閫氶亾 */
+export enum EnumPayAccess {
+  /**骞冲畨閾惰 */
+  PingAnBank = 10,
+  /**鏀粯瀹� */
+  Alipay = 20,
 }
 
 /** 绌洪棽鏃堕棿 */
@@ -77,6 +105,16 @@
   Not = 30,
 }
 
+/** 涓汉瀹炲悕鏂瑰紡 */
+export enum EnumPersonalRealMethod {
+  /**涓汉鎵嬫満鍙蜂笁瑕佺礌 */
+  Identity3 = 10,
+  /**閾惰鍗″瑕佺礌 */
+  Identity4 = 20,
+  /**鍒疯劯璁よ瘉 */
+  Face = 30,
+}
+
 /** 瀹炲悕閫氶亾 */
 export enum EnumRealAccess {
   /**涓婁笂绛� */
@@ -95,22 +133,26 @@
   TaskUser = 2,
   /**浠诲姟楠屾敹 */
   TaskCheckReceive = 3,
+  /**鏂囧瓧璇嗗埆 */
+  FileUtils = 4,
+  /**鏂囧瓧璇嗗埆 */
+  OcrUtils = 5,
   /**鐢ㄦ埛璁よ瘉 */
-  Auth = 4,
+  Auth = 6,
   /**鐢ㄦ埛鑿滃崟 */
-  Menu = 5,
+  Menu = 7,
   /**鐢ㄦ埛璧勬簮 */
-  Resource = 6,
+  Resource = 8,
   /**鐢ㄦ埛瑙掕壊 */
-  Role = 7,
+  Role = 9,
   /**鐢ㄦ埛淇℃伅 */
-  User = 8,
+  User = 10,
   /**鐢ㄦ埛绠�鍘� */
-  UserResume = 9,
+  UserResume = 11,
   /**浼佷笟淇℃伅 */
-  Enterprise = 10,
+  Enterprise = 12,
   /**鐏靛伐淇℃伅 */
-  EnterpriseEmployee = 11,
+  EnterpriseEmployee = 13,
 }
 
 /** 璧勬簮璇锋眰鏂瑰紡 */
diff --git a/src/services/api/fileUtils.ts b/src/services/api/fileUtils.ts
new file mode 100644
index 0000000..425fac0
--- /dev/null
+++ b/src/services/api/fileUtils.ts
@@ -0,0 +1,52 @@
+/* eslint-disable */
+// @ts-ignore
+import { request } from '@/utils/request';
+
+/** 鑾峰彇鏂囦欢鍦板潃 GET /api/common/fileUtils/getFileUrl */
+export async function getFileUrl(
+  // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
+  params: API.APIgetFileUrlParams,
+  options?: API.RequestConfig
+) {
+  return request<string>('/api/common/fileUtils/getFileUrl', {
+    method: 'GET',
+    params: {
+      ...params,
+    },
+    ...(options || {}),
+  });
+}
+
+/** 涓婁紶鏂囦欢 POST /api/common/fileUtils/uploadFile */
+export async function uploadFile(
+  body: {
+    /** 鍦烘櫙 */
+    Scene?: string;
+  },
+  File?: File,
+  options?: API.RequestConfig
+) {
+  const formData = new FormData();
+
+  if (File) {
+    formData.append('File', File);
+  }
+
+  Object.keys(body).forEach((ele) => {
+    const item = (body as any)[ele];
+
+    if (item !== undefined && item !== null) {
+      formData.append(
+        ele,
+        typeof item === 'object' && !(item instanceof File) ? JSON.stringify(item) : item
+      );
+    }
+  });
+
+  return request<API.UploadFileCommandResult>('/api/common/fileUtils/uploadFile', {
+    method: 'POST',
+    data: formData,
+    requestType: 'form',
+    ...(options || {}),
+  });
+}
diff --git a/src/services/api/index.ts b/src/services/api/index.ts
index 9cabf40..38f65d3 100644
--- a/src/services/api/index.ts
+++ b/src/services/api/index.ts
@@ -7,6 +7,7 @@
 import * as role from './role';
 import * as enterprise from './enterprise';
 import * as task from './task';
+import * as ocrUtils from './ocrUtils';
 import * as dictionary from './dictionary';
 import * as userResume from './userResume';
 import * as auth from './auth';
@@ -14,12 +15,14 @@
 import * as resource from './resource';
 import * as taskUser from './taskUser';
 import * as menu from './menu';
+import * as fileUtils from './fileUtils';
 export default {
   enterpriseEmployee,
   user,
   role,
   enterprise,
   task,
+  ocrUtils,
   dictionary,
   userResume,
   auth,
@@ -27,4 +30,5 @@
   resource,
   taskUser,
   menu,
+  fileUtils,
 };
diff --git a/src/services/api/ocrUtils.ts b/src/services/api/ocrUtils.ts
new file mode 100644
index 0000000..4601bae
--- /dev/null
+++ b/src/services/api/ocrUtils.ts
@@ -0,0 +1,18 @@
+/* eslint-disable */
+// @ts-ignore
+import { request } from '@/utils/request';
+
+/** 鏂囧瓧璇嗗埆钀ヤ笟鎵х収 GET /api/common/ocrUtils/getLicenseOcr */
+export async function getLicenseOcr(
+  // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
+  params: API.APIgetLicenseOcrParams,
+  options?: API.RequestConfig
+) {
+  return request<API.GetLicenseOcrCommandResult>('/api/common/ocrUtils/getLicenseOcr', {
+    method: 'GET',
+    params: {
+      ...params,
+    },
+    ...(options || {}),
+  });
+}
diff --git a/src/services/api/resource.ts b/src/services/api/resource.ts
index 5e25fe0..dc3ef94 100644
--- a/src/services/api/resource.ts
+++ b/src/services/api/resource.ts
@@ -31,18 +31,3 @@
     ...(options || {}),
   });
 }
-
-/** 淇濆瓨浠诲姟璋冨害-浣滀笟 POST /api/user/resource/saveScheduleJobDetail */
-export async function saveScheduleJobDetail(
-  body: API.SaveScheduleJobDetailCommand,
-  options?: API.RequestConfig
-) {
-  return request<boolean>('/api/user/resource/saveScheduleJobDetail', {
-    method: 'POST',
-    headers: {
-      'Content-Type': 'application/json-patch+json',
-    },
-    data: body,
-    ...(options || {}),
-  });
-}
diff --git a/src/services/api/taskUser.ts b/src/services/api/taskUser.ts
index a23742d..0edd5de 100644
--- a/src/services/api/taskUser.ts
+++ b/src/services/api/taskUser.ts
@@ -14,6 +14,21 @@
   });
 }
 
+/** 娓呯┖宸插仠姝㈢殑浠诲姟鏀惰棌 DELETE /api/flexjob/taskUser/clearTaskCollect */
+export async function clearTaskCollect(
+  body: API.ClearTaskCollectCommand,
+  options?: API.RequestConfig
+) {
+  return request<number>('/api/flexjob/taskUser/clearTaskCollect', {
+    method: 'DELETE',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
 /** 鏀惰棌浠诲姟 POST /api/flexjob/taskUser/collectTask */
 export async function collectTask(body: API.CollectTaskCommand, options?: API.RequestConfig) {
   return request<number>('/api/flexjob/taskUser/collectTask', {
diff --git a/src/services/api/typings.d.ts b/src/services/api/typings.d.ts
index 9256ea7..5b7daa2 100644
--- a/src/services/api/typings.d.ts
+++ b/src/services/api/typings.d.ts
@@ -83,6 +83,22 @@
     id?: string;
   }
 
+  interface APIgetFileUrlParams {
+    /** 鍦板潃 */
+    url?: string;
+  }
+
+  interface APIgetLicenseOcrParams {
+    /** 閫氶亾 */
+    access?: EnumOcrAccess;
+    /** 鍦烘櫙 */
+    scene?: string;
+    /** 閾炬帴鍦板潃 */
+    url?: string;
+    /** 鏄惁涓轰簯瀛樺偍鐩稿鍦板潃 */
+    isOssUrl?: boolean;
+  }
+
   interface APIgetMenuParams {
     /** Id */
     id?: string;
@@ -189,6 +205,25 @@
     ids?: string[];
   }
 
+  interface BaiduOcrBusinessLicenseResultModel {
+    /** 浼佷笟鍏ㄧО */
+    enterpriseName?: string;
+    /** 缁熶竴绀句細淇$敤浠g爜 */
+    societyCreditCode?: string;
+    /** 娉曚汉濮撳悕 */
+    legalPerson?: string;
+    /** 浼佷笟绫诲瀷 */
+    enterpriseType?: string;
+    /** 娉ㄥ唽璧勬湰 */
+    registeredCapital?: string;
+    /** 鎴愮珛鏃ユ湡 */
+    establishmentDate?: string;
+    /** 浼佷笟鍦板潃 */
+    address?: string;
+    /** 缁忚惀鑼冨洿 */
+    mainBusiness?: string;
+  }
+
   interface BindWxmpUserInfoCommand {
     /** 璁块棶浠ょ墝 */
     accessToken: string;
@@ -212,6 +247,8 @@
     id?: string;
     checkReceiveStatus?: EnumTaskUserSubmitCheckReceiveStatus;
   }
+
+  type ClearTaskCollectCommand = Record<string, any>;
 
   interface CollectTaskCommand {
     /** 浠诲姟Id */
@@ -288,6 +325,18 @@
     Wxmp = 20,
   }
 
+  enum EnumDataSource {
+    /**818 */
+    HumanResources = 10,
+  }
+
+  enum EnumEnterpriseRealMethod {
+    /**浼佷笟涓夎绱� */
+    Identity3 = 10,
+    /**浼佷笟鍥涜绱� */
+    Identity4 = 20,
+  }
+
   enum EnumMenuType {
     /**鑿滃崟 */
     Menu = 10,
@@ -310,11 +359,23 @@
     NeedPower = 30,
   }
 
+  enum EnumOcrAccess {
+    /**鐧惧害 */
+    Baidu = 10,
+  }
+
   enum EnumPagedListOrder {
     /**鍗囧簭 */
     Asc = 0,
     /**闄嶅簭 */
     Desc = 1,
+  }
+
+  enum EnumPayAccess {
+    /**骞冲畨閾惰 */
+    PingAnBank = 10,
+    /**鏀粯瀹� */
+    Alipay = 20,
   }
 
   enum EnumPersonalFreeTime {
@@ -339,6 +400,15 @@
     Not = 30,
   }
 
+  enum EnumPersonalRealMethod {
+    /**涓汉鎵嬫満鍙蜂笁瑕佺礌 */
+    Identity3 = 10,
+    /**閾惰鍗″瑕佺礌 */
+    Identity4 = 20,
+    /**鍒疯劯璁よ瘉 */
+    Face = 30,
+  }
+
   enum EnumRealAccess {
     /**涓婁笂绛� */
     BestSign = 10,
@@ -355,22 +425,26 @@
     TaskUser = 2,
     /**浠诲姟楠屾敹 */
     TaskCheckReceive = 3,
+    /**鏂囧瓧璇嗗埆 */
+    FileUtils = 4,
+    /**鏂囧瓧璇嗗埆 */
+    OcrUtils = 5,
     /**鐢ㄦ埛璁よ瘉 */
-    Auth = 4,
+    Auth = 6,
     /**鐢ㄦ埛鑿滃崟 */
-    Menu = 5,
+    Menu = 7,
     /**鐢ㄦ埛璧勬簮 */
-    Resource = 6,
+    Resource = 8,
     /**鐢ㄦ埛瑙掕壊 */
-    Role = 7,
+    Role = 9,
     /**鐢ㄦ埛淇℃伅 */
-    User = 8,
+    User = 10,
     /**鐢ㄦ埛绠�鍘� */
-    UserResume = 9,
+    UserResume = 11,
     /**浼佷笟淇℃伅 */
-    Enterprise = 10,
+    Enterprise = 12,
     /**鐏靛伐淇℃伅 */
-    EnterpriseEmployee = 11,
+    EnterpriseEmployee = 13,
   }
 
   enum EnumResourceMethod {
@@ -748,6 +822,24 @@
     /** 閿欒鐮� */
     errorCode?: string;
     data?: GetEnterpriseSmsSettingQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetLicenseOcrCommandResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetLicenseOcrCommandResult;
     /** 鎵ц鎴愬姛 */
     success?: boolean;
     /** 閿欒淇℃伅 */
@@ -1454,6 +1546,24 @@
     timestamp?: number;
   }
 
+  interface FriendlyResultUploadFileCommandResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: UploadFileCommandResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
   type GetAliyunOSSAcsQuery = Record<string, any>;
 
   interface GetAliyunOSSAcsQueryResult {
@@ -1936,6 +2046,7 @@
     avatar?: string;
     /** 濮撳悕 */
     name?: string;
+    gender?: EnumUserGender;
     /** 浼佷笟鍏ㄧО */
     enterpriseName?: string;
     /** 瑙掕壊 */
@@ -2024,6 +2135,12 @@
     industryTypeContent?: string;
     /** 鏄惁宸查厤缃� */
     isConfigured?: boolean;
+  }
+
+  interface GetLicenseOcrCommandResult {
+    /** 鍦板潃 */
+    url?: string;
+    model?: BaiduOcrBusinessLicenseResultModel;
   }
 
   interface GetMenuQueryResult {
@@ -2161,6 +2278,27 @@
     releaseStatus?: EnumTaskReleaseStatus;
     recommendStatus?: EnumTaskRecommendStatus;
     checkReceiveStatus?: EnumTaskCheckReceiveStatus;
+    pageModel?: PagedListQueryPageModel;
+  }
+
+  interface GetOpenUserResumesQuery {
+    /** 浠诲姟Id */
+    taskInfoId?: string;
+    /** 鏈熸湜宀椾綅缂栧彿 */
+    userExpectJobs?: string[];
+    gender?: EnumUserGender;
+    /** 韬唤缂栧彿 */
+    personalIdentityCode?: string;
+    /** 骞撮緞鑼冨洿鏈�灏� */
+    ageMin?: number;
+    /** 骞撮緞鑼冨洿澶� */
+    ageMax?: number;
+    /** 璧勬牸璇佷功缂栧彿 */
+    userCredentials?: string[];
+    /** 鏄惁宸叉敹钘� */
+    isCollected?: boolean;
+    /** 鏄惁宸茶仈绯� */
+    isContacted?: boolean;
     pageModel?: PagedListQueryPageModel;
   }
 
@@ -2303,6 +2441,8 @@
   interface GetPersonalLoginInfoQueryResult {
     /** Id */
     id?: string;
+    /** 澶村儚 */
+    avatar?: string;
     /** 濮撳悕 */
     name?: string;
     /** 鏄惁瀹炲悕 */
@@ -2993,6 +3133,7 @@
     workExperience?: string;
     /** 鍒涘缓鏃堕棿 */
     createdTime?: string;
+    hireStatus?: EnumTaskUserHireStatus;
   }
 
   type GetUserResumeWorkExperienceQuery = Record<string, any>;
@@ -3332,15 +3473,6 @@
     resources?: GetRoleQueryResultResource[];
   }
 
-  interface SaveScheduleJobDetailCommand {
-    /** 璧勬簮Id */
-    resourceId?: string;
-    /** 璇锋眰鏁版嵁 */
-    body?: string;
-    /** Cron琛ㄨ揪寮� */
-    cron?: string;
-  }
-
   interface SaveTaskInfoCommand {
     /** 浠诲姟鍚嶇О */
     name: string;
@@ -3557,8 +3689,115 @@
   interface SubmitCheckReceiveTaskCommand {
     /** 浠诲姟Id */
     taskInfoId?: string;
+    /** 鏃ユ湡 */
+    date?: string;
     /** 闄勪欢 */
     files?: string[];
+  }
+
+  interface SyncEnterpriseUserCommand {
+    dataSource?: EnumDataSource;
+    /** 鏁版嵁鏉ユ簮Id */
+    dataSourceId?: string;
+    /** 瀵嗙爜 */
+    password?: string;
+    /** 濮撳悕 */
+    name?: string;
+    /** 鐢ㄦ埛鍚� */
+    userName?: string;
+    /** 鎵嬫満鍙� */
+    phoneNumber?: string;
+    enterprise?: SyncEnterpriseUserCommandEnterprise;
+  }
+
+  interface SyncEnterpriseUserCommandEnterprise {
+    /** 浼佷笟鍏ㄧО */
+    enterpriseName: string;
+    /** 缁熶竴绀句細淇$敤浠g爜 */
+    societyCreditCode: string;
+    /** 钀ヤ笟鎵х収鐓х墖 */
+    licenseImage?: string;
+    /** 娉曚汉濮撳悕 */
+    legalPerson?: string;
+    /** 娉曚汉韬唤璇佸彿 */
+    legalIdentity?: string;
+    /** 鎵�鍦ㄧ渷浠界紪鍙� */
+    provinceCode?: string;
+    /** 鎵�鍦ㄥ煄甯傜紪鍙� */
+    cityCode?: string;
+    /** 鎵�灞炶涓氱紪鍙� */
+    industryTypeCode?: string;
+    /** 浼佷笟绫诲瀷 */
+    enterpriseType?: string;
+    /** 娉ㄥ唽璧勬湰 */
+    registeredCapital?: string;
+    /** 鎴愮珛鏃ユ湡 */
+    establishmentDate?: string;
+    /** 浼佷笟鍦板潃 */
+    address?: string;
+    /** 缁忚惀鑼冨洿 */
+    mainBusiness?: string;
+    /** 鑱旂郴浜� */
+    contacts?: string;
+    /** 鑱旂郴鐢佃瘽 */
+    contactPhoneNumber?: string;
+    /** 鑱旂郴閭 */
+    contactEmail?: string;
+    payAccess?: EnumPayAccess;
+    /** 寮�鎴锋�昏 */
+    bankName?: string;
+    /** 寮�鎴锋敮琛� */
+    bankBranchName?: string;
+    /** 閾惰璐︽埛 */
+    bankCard?: string;
+    /** 鏄惁宸叉牎楠岄摱琛岃处鎴� */
+    isCheckedBankCard?: boolean;
+    realAccess?: EnumRealAccess;
+    /** 瀹炲悕璐圭敤 */
+    realVerifyCost?: number;
+    /** 绛剧害璐圭敤 */
+    signCost?: number;
+    /** 涓�鍙d环 */
+    mergeSignCost?: number;
+    smsAccess?: EnumSmsAccess;
+    /** 鐭俊璐圭敤 */
+    smsCost?: number;
+    /** 鏄惁瀹炲悕 */
+    isReal?: boolean;
+    enterpriseAuth?: SyncEnterpriseUserCommandEnterpriseAuth;
+  }
+
+  interface SyncEnterpriseUserCommandEnterpriseAuth {
+    enterpriseRealMethod?: EnumEnterpriseRealMethod;
+    /** 浼佷笟鍏ㄧО */
+    enterpriseName: string;
+    /** 缁熶竴绀句細淇$敤浠g爜 */
+    societyCreditCode: string;
+    /** 钀ヤ笟鎵х収鐓х墖 */
+    licenseImage?: string;
+    /** 娉曚汉濮撳悕 */
+    legalPerson?: string;
+    /** 娉曚汉韬唤璇佸彿 */
+    legalIdentity?: string;
+    personalRealMethod?: EnumPersonalRealMethod;
+    /** 娉曚汉鎴栫粡鍔炰汉濮撳悕 */
+    name?: string;
+    /** 娉曚汉鎴栫粡鍔炰汉韬唤璇佸彿 */
+    identity?: string;
+    /** 娉曚汉鎴栫粡鍔炰汉韬唤璇佷汉鍍忛潰 */
+    identityImg?: string;
+    /** 娉曚汉鎴栫粡鍔炰汉韬唤璇佸浗寰介潰 */
+    identityBackImg?: string;
+    /** 娉曚汉鎴栫粡鍔炰汉閾惰鍗″彿 */
+    bankCard?: string;
+    /** 娉曚汉鎴栫粡鍔炰汉閾惰鍗$収鐗� */
+    bankCardImg?: string;
+    /** 娉曚汉鎴栫粡鍔炰汉鎵嬫満鍙� */
+    phoneNumber?: string;
+    /** 鏄惁濮旀墭缁忓姙浜� */
+    proxy?: boolean;
+    /** 浼佷笟鎺堟潈涔� */
+    proxyPowerAttorneyUrl?: string;
   }
 
   type SyncHumanResourcesAreaDictionaryDataCommand = Record<string, any>;
@@ -3568,6 +3807,11 @@
     phoneNumber: string;
   }
 
+  interface UploadFileCommandResult {
+    /** 鍦板潃 */
+    url?: string;
+  }
+
   interface WxmpLoginCommand {
     /** 鐢ㄦ埛鐧诲綍鍑瘉 */
     code: string;
diff --git a/src/services/api/user.ts b/src/services/api/user.ts
index 83fdcbf..44bca4f 100644
--- a/src/services/api/user.ts
+++ b/src/services/api/user.ts
@@ -97,3 +97,18 @@
     ...(options || {}),
   });
 }
+
+/** 鍚屾浼佷笟鐢ㄦ埛 POST /api/user/user/syncEnterpriseUser */
+export async function syncEnterpriseUser(
+  body: API.SyncEnterpriseUserCommand,
+  options?: API.RequestConfig
+) {
+  return request<string>('/api/user/user/syncEnterpriseUser', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
diff --git a/src/services/api/userResume.ts b/src/services/api/userResume.ts
index 8edd703..2557cb6 100644
--- a/src/services/api/userResume.ts
+++ b/src/services/api/userResume.ts
@@ -47,6 +47,21 @@
   });
 }
 
+/** 鏌ヨ寮�鏀剧畝鍘嗗垎椤靛垪琛ㄦ暟鎹� POST /api/user/userResume/getOpenUserResumes */
+export async function getOpenUserResumes(
+  body: API.GetOpenUserResumesQuery,
+  options?: API.RequestConfig
+) {
+  return request<API.GetUserResumesQueryResult>('/api/user/userResume/getOpenUserResumes', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
 /** 鏌ヨ鐢ㄦ埛绠�鍘� GET /api/user/userResume/getUserResume */
 export async function getUserResume(
   // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
diff --git a/src/utils/common/tree.ts b/src/utils/common/tree.ts
index c1f171c..8f5241f 100644
--- a/src/utils/common/tree.ts
+++ b/src/utils/common/tree.ts
@@ -1,3 +1,5 @@
+import { TreeNodeData } from 'element-plus/es/components/tree/src/tree.type';
+
 export function getTree(
   data: API.ModuleDto[],
   root?: string,
@@ -44,3 +46,27 @@
 
   return result;
 }
+
+type TreeCallback<T extends TreeNodeData, R> = (
+  data: T,
+  index: number,
+  array: T[],
+  parent?: T
+) => R;
+
+export function treeEach<T extends TreeNodeData>(
+  treeData: T[],
+  callback: TreeCallback<T, void>,
+  getChildren: (data: T) => T[],
+  parent?: T
+) {
+  for (let i = 0; i < treeData.length; i++) {
+    const data = treeData[i];
+    callback(data, i, treeData, parent);
+
+    const children = getChildren(data);
+    if (Array.isArray(children)) {
+      treeEach(children, callback, getChildren, data);
+    }
+  }
+}
diff --git a/src/views/Permission/RoleManage.vue b/src/views/Permission/RoleManage.vue
index 976860e..efbe7b4 100644
--- a/src/views/Permission/RoleManage.vue
+++ b/src/views/Permission/RoleManage.vue
@@ -260,7 +260,8 @@
   } catch (error) {}
 }
 
-async function handleAuthorize(selectedMenuIds: string[], resourceIds: string[]) {
+async function handleAuthorize(selectedMenuIds: string[]) {
+  console.log('selectedMenuIds: ', selectedMenuIds);
   try {
     let params: API.SaveRoleCommand = {
       ...authorizeForm.detail,
diff --git a/src/views/Permission/components/dialogAuthorizeV2.vue b/src/views/Permission/components/dialogAuthorizeV2.vue
index 5573b5b..9a272f7 100644
--- a/src/views/Permission/components/dialogAuthorizeV2.vue
+++ b/src/views/Permission/components/dialogAuthorizeV2.vue
@@ -24,7 +24,8 @@
             default-expand-all
             show-checkbox
             ref="moduleTree"
-            :default-checked-keys="checkedModules"
+            :default-checked-keys="defaultCheckedKeys"
+            @check="handleModuleCheck"
           >
             <template #default="{ node }">
               <div class="custom-tree-node">
@@ -62,7 +63,8 @@
             default-expand-all
             show-checkbox
             ref="pageButtonTree"
-            :default-checked-keys="checkedPageButton"
+            :default-checked-keys="defaultCheckedKeys"
+            @check="handlePageButtonCheck"
           >
             <template #default="{ node }">
               <div class="custom-tree-node">
@@ -97,7 +99,8 @@
             default-expand-all
             show-checkbox
             ref="dataButtonTree"
-            :default-checked-keys="checkedDataButton"
+            :default-checked-keys="defaultCheckedKeys"
+            @check="handleDataButtonCheck"
           >
             <template #default="{ node }">
               <div class="custom-tree-node">
@@ -132,7 +135,8 @@
             default-expand-all
             show-checkbox
             ref="dataColumnTree"
-            :default-checked-keys="checkedDataColumn"
+            :default-checked-keys="defaultCheckedKeys"
+            @check="handleDataColumnCheck"
           >
             <template #default="{ node }">
               <div class="custom-tree-node">
@@ -155,10 +159,11 @@
 <script setup lang="ts">
 import { Message } from '@bole-core/core';
 import { AuthorizeType, SubModuleType, SubModuleTitle, EnumMenuType } from '@/constants';
-import { getTree } from '@/utils';
+import { getTree, treeEach } from '@/utils';
 import { TreeInstance } from 'element-plus';
 import { ProDialog } from '@bole-core/components';
 import { useMenus, useMenu } from '@/hooks';
+import data from '@iconify-icons/ep/tickets';
 
 const TypeTip = defineComponent({
   name: 'TypeTip',
@@ -195,7 +200,7 @@
 const form = defineModel<Form>('form');
 
 const emit = defineEmits<{
-  (e: 'onConfirm', selectedMenuIds: string[], resourceIds: string[]): void;
+  (e: 'onConfirm', selectedMenuIds: string[]): void;
   (e: 'onCancel'): void;
 }>();
 
@@ -207,13 +212,17 @@
 
 const state = reactive({
   currentMenuId: '',
-  checkedInfo: [] as CheckedResourceItem[],
+  selectedMenuIds: [] as string[],
 });
+
+const defaultCheckedKeys = computed(() => Array.from(state.selectedMenuIds));
 
 watch(visible, (newVal) => {
   if (newVal) {
     state.currentMenuId = '';
-    state.checkedInfo = [];
+    const menuIds = form.value.detail?.menuIds ?? [];
+    // menuIds.forEach((id) => state.selectedMenuIds.add(id));
+    state.selectedMenuIds = [...menuIds];
   }
 });
 
@@ -225,6 +234,8 @@
 const pageButtonTree = useTemplateRef<TreeInstance>('pageButtonTree');
 const dataButtonTree = useTemplateRef<TreeInstance>('dataButtonTree');
 const dataColumnTree = useTemplateRef<TreeInstance>('dataColumnTree');
+
+type TreeRef = ReturnType<typeof useTemplateRef<TreeInstance>>;
 
 const { menusTree, getMenuById } = useMenus({
   params: computed(() => ({
@@ -243,77 +254,45 @@
   enabled: computed(() => !!state.currentMenuId),
 });
 
-const checkedModules = computed(() => {
-  if (form.value.detail) {
-    return form.value.detail.menuIds;
-  }
-  return [];
-});
-
-const checkedPageButton = computed(() => initChecked(SubModuleType.PageButton));
-const checkedDataButton = computed(() => initChecked(SubModuleType.DataButton));
-const checkedDataColumn = computed(() => initChecked(SubModuleType.Column));
-
-function initChecked(type: SubModuleType) {
-  return state.checkedInfo.filter((x) => x.resourceType === type).map((x) => x.resourceId);
-}
-
 function handleSelectModule(menu: API.GetMenusQueryResultItem) {
-  const modules1 =
-    dataButtonTree &&
-    dataButtonTree.value.getCheckedKeys(true).map((x) => {
-      return {
-        resourceType: SubModuleType.DataButton,
-        resourceId: x,
-        menuId: menu.id,
-      } as CheckedResourceItem;
-    });
-
-  const modules2 =
-    pageButtonTree &&
-    pageButtonTree.value.getCheckedKeys(true).map((x) => {
-      return {
-        resourceType: SubModuleType.PageButton,
-        resourceId: x,
-        menuId: menu.id,
-      } as CheckedResourceItem;
-    });
-
-  const modules3 =
-    dataColumnTree &&
-    dataColumnTree.value.getCheckedKeys(true).map((x) => {
-      return {
-        resourceType: SubModuleType.Column,
-        resourceId: x,
-        menuId: menu.id,
-      } as CheckedResourceItem;
-    });
-
-  const checkExtends = state.checkedInfo.filter(
-    (x) => x.menuId !== menu.id && x.menuId !== undefined
-  );
-
-  if (modules1 && modules1.length) {
-    checkExtends.push(...modules1);
-  }
-  if (modules2 && modules2.length) {
-    checkExtends.push(...modules2);
-  }
-  if (modules3 && modules3.length) {
-    checkExtends.push(...modules3);
-  }
-
-  state.checkedInfo = checkExtends;
   state.currentMenuId = menu.id;
 }
 
+function handleModuleCheck(data, params) {
+  handleCheck(data, params, moduleTree);
+}
+
+function handlePageButtonCheck(data, params) {
+  handleCheck(data, params, pageButtonTree);
+}
+
+function handleDataButtonCheck(data, params) {
+  handleCheck(data, params, dataButtonTree);
+}
+
+function handleDataColumnCheck(data, params) {
+  handleCheck(data, params, dataColumnTree);
+}
+
+function handleCheck(data, params, treeRef: TreeRef) {
+  const dataMap = {};
+  treeEach(
+    [treeRef.value.store.root],
+    (node) => (dataMap[node.key] = node),
+    (node) => node.childNodes
+  );
+
+  const uncachedCheckedKeys = params.checkedKeys.filter(
+    (item) => !['pageButtonAll', 'dataButtonAll', 'dataColumnAll'].includes(item)
+  );
+  const cachedKeys = state.selectedMenuIds.filter(
+    (item) => !(item in dataMap) && !uncachedCheckedKeys.includes(item)
+  );
+  state.selectedMenuIds = cachedKeys.concat(uncachedCheckedKeys);
+}
+
 function handleConfirm() {
-  const selectedMenuIds = moduleTree.value.getCheckedNodes().map((x) => x.id);
-  if (state.currentMenuId) {
-    handleSelectModule(getMenuById(state.currentMenuId));
-  }
-  const resourceIds = state.checkedInfo.map((x) => x.resourceId);
-  emit('onConfirm', selectedMenuIds, resourceIds);
+  emit('onConfirm', state.selectedMenuIds);
 }
 </script>
 

--
Gitblit v1.9.1