From 4be53daa8eda7c2577a101f28c97f8068b71175c Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期三, 12 十一月 2025 14:57:20 +0800
Subject: [PATCH] feat: 1.3.0.2

---
 src/views/Permission/RoleManage.vue                    |    6 
 src/services/api/enterpriseEmployee.ts                 |   30 ++
 src/views/FlexJobManage/constants/columns.ts           |   63 -----
 src/views/FlexJobManage/components/StaffInfoDialog.vue |    8 
 .eslintrc-auto-import.json                             |    3 
 src/hooks/useUser.ts                                   |    2 
 src/services/api/typings.d.ts                          |   64 +++++
 src/views/FlexJobManage/FlexJobManage.vue              |  241 ++++++++++---------
 src/views/FlexJobManage/hooks/index.ts                 |   88 +++++++
 src/services/api/index.ts                              |   12 
 src/views/FlexJobManage/FlexJobContractManage.vue      |  159 +++---------
 auto-imports.d.ts                                      |    8 
 src/constants/enterpriseEmployee.ts                    |   15 +
 src/constants/apiEnum.ts                               |    8 
 14 files changed, 400 insertions(+), 307 deletions(-)

diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json
index 4938c3b..ecb4828 100644
--- a/.eslintrc-auto-import.json
+++ b/.eslintrc-auto-import.json
@@ -39,6 +39,8 @@
     "EnumEnterpriseCooperationWalletTransactionStatusTextForConfirm": true,
     "EnumEnterpriseCostStatus": true,
     "EnumEnterpriseCostType": true,
+    "EnumEnterpriseEmployeeSource": true,
+    "EnumEnterpriseEmployeeSourceText": true,
     "EnumEnterpriseRealMethod": true,
     "EnumEnterpriseType": true,
     "EnumEnterpriseTypeText": true,
@@ -158,6 +160,7 @@
     "GlobalEventListener": true,
     "IdentityCodeEnum": true,
     "ImportEnterpriseEmployeesTempPath": true,
+    "ImportFlexJobTempPath": true,
     "InjectionKey": true,
     "MaybeRef": true,
     "MaybeRefOrGetter": true,
diff --git a/auto-imports.d.ts b/auto-imports.d.ts
index 1cea0e6..07575b4 100644
--- a/auto-imports.d.ts
+++ b/auto-imports.d.ts
@@ -42,6 +42,8 @@
   const EnumEnterpriseCooperationWalletTransactionStatusTextForConfirm: typeof import('./src/constants/finance')['EnumEnterpriseCooperationWalletTransactionStatusTextForConfirm']
   const EnumEnterpriseCostStatus: typeof import('./src/constants/apiEnum')['EnumEnterpriseCostStatus']
   const EnumEnterpriseCostType: typeof import('./src/constants/apiEnum')['EnumEnterpriseCostType']
+  const EnumEnterpriseEmployeeSource: typeof import('./src/constants/apiEnum')['EnumEnterpriseEmployeeSource']
+  const EnumEnterpriseEmployeeSourceText: typeof import('./src/constants/enterpriseEmployee')['EnumEnterpriseEmployeeSourceText']
   const EnumEnterpriseRealMethod: typeof import('./src/constants/apiEnum')['EnumEnterpriseRealMethod']
   const EnumEnterpriseType: typeof import('./src/constants/apiEnum')['EnumEnterpriseType']
   const EnumEnterpriseTypeText: typeof import('./src/constants/apiEnumText')['EnumEnterpriseTypeText']
@@ -161,6 +163,7 @@
   const GetTaskInfoQueryResultHireButton: typeof import('./src/constants/apiEnum')['GetTaskInfoQueryResultHireButton']
   const IdentityCodeEnum: typeof import('./src/constants/dic')['IdentityCodeEnum']
   const ImportEnterpriseEmployeesTempPath: typeof import('./src/constants/enterpriseEmployee')['ImportEnterpriseEmployeesTempPath']
+  const ImportFlexJobTempPath: typeof import('./src/constants/enterpriseEmployee')['ImportFlexJobTempPath']
   const MenuSvgIconMap: typeof import('./src/constants/menu')['MenuSvgIconMap']
   const ModuleColumns: typeof import('./src/constants/module')['ModuleColumns']
   const MyRegExp: typeof import('./src/constants/regExp')['MyRegExp']
@@ -301,7 +304,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, EnumCodeUrlScene, EnumConsoleLogAccess, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumElectronSignVerifyType, EnumEnterpriseCooperationSignStatus, EnumEnterpriseCooperationStatus, EnumEnterpriseCooperationWalletTransactionStatus, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseRealMethod, EnumEnterpriseType, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetArrangeTaskUsersQueryApplyStatus, EnumGetCheckReceiveTaskCheckInUsersQueryStatus, EnumGetCheckReceiveTasksQueryResultItemCheckStatus, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumLogLevel, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumSmsStatus, EnumTaskApplyStatus, EnumTaskCheckReceiveMethod, EnumTaskCheckReceiveStatus, EnumTaskPaymentMethod, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementAuditStatus, EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserApplyStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckHistoryType, EnumTaskUserSubmitCheckReceiveStatus, EnumUserBankCardAccess, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, EnumWeChatPayApplymentBankAccountType, EnumWeChatPayApplymentCertType, EnumWeChatPayApplymentContactType, EnumWeChatPayApplymentFinanceType, EnumWeChatPayApplymentIdDocType, EnumWeChatPayApplymentIdHolderType, EnumWeChatPayApplymentSalesScenesType, EnumWeChatPayApplymentState, EnumWeChatPayApplymentSubjectType, EnumWeChatPaySettlementModifyVerifyResult, EnumWeChatPaySettlementVerifyResult, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetSettlementTasksQueryPaymentStatus, GetSettlementTasksQuerySupplierPaymentStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus, EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumConsoleLogAccess, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumElectronSignVerifyType, EnumEnterpriseCooperationSignStatus, EnumEnterpriseCooperationStatus, EnumEnterpriseCooperationWalletTransactionStatus, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseRealMethod, EnumEnterpriseType, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetArrangeTaskUsersQueryApplyStatus, EnumGetCheckReceiveTaskCheckInUsersQueryStatus, EnumGetCheckReceiveTasksQueryResultItemCheckStatus, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumLogLevel, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumSmsStatus, EnumTaskApplyStatus, EnumTaskCheckReceiveMethod, EnumTaskCheckReceiveStatus, EnumTaskPaymentMethod, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementAuditStatus, EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserApplyStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckHistoryType, EnumTaskUserSubmitCheckReceiveStatus, EnumUserBankCardAccess, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, EnumWeChatPayApplymentBankAccountType, EnumWeChatPayApplymentCertType, EnumWeChatPayApplymentContactType, EnumWeChatPayApplymentFinanceType, EnumWeChatPayApplymentIdDocType, EnumWeChatPayApplymentIdHolderType, EnumWeChatPayApplymentSalesScenesType, EnumWeChatPayApplymentState, EnumWeChatPayApplymentSubjectType, EnumWeChatPaySettlementModifyVerifyResult, EnumWeChatPaySettlementVerifyResult, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetSettlementTasksQueryPaymentStatus, GetSettlementTasksQuerySupplierPaymentStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus } from './src/constants/apiEnum'
+  export type { EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumConsoleLogAccess, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumElectronSignVerifyType, EnumEnterpriseCooperationSignStatus, EnumEnterpriseCooperationStatus, EnumEnterpriseCooperationWalletTransactionStatus, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseEmployeeSource, EnumEnterpriseRealMethod, EnumEnterpriseType, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetArrangeTaskUsersQueryApplyStatus, EnumGetCheckReceiveTaskCheckInUsersQueryStatus, EnumGetCheckReceiveTasksQueryResultItemCheckStatus, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumLogLevel, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumSmsStatus, EnumTaskApplyStatus, EnumTaskCheckReceiveMethod, EnumTaskCheckReceiveStatus, EnumTaskPaymentMethod, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementAuditStatus, EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserApplyStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckHistoryType, EnumTaskUserSubmitCheckReceiveStatus, EnumUserBankCardAccess, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, EnumWeChatPayApplymentBankAccountType, EnumWeChatPayApplymentCertType, EnumWeChatPayApplymentContactType, EnumWeChatPayApplymentFinanceType, EnumWeChatPayApplymentIdDocType, EnumWeChatPayApplymentIdHolderType, EnumWeChatPayApplymentSalesScenesType, EnumWeChatPayApplymentState, EnumWeChatPayApplymentSubjectType, EnumWeChatPaySettlementModifyVerifyResult, EnumWeChatPaySettlementVerifyResult, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetSettlementTasksQueryPaymentStatus, GetSettlementTasksQuerySupplierPaymentStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus, EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumConsoleLogAccess, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumElectronSignVerifyType, EnumEnterpriseCooperationSignStatus, EnumEnterpriseCooperationStatus, EnumEnterpriseCooperationWalletTransactionStatus, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseEmployeeSource, EnumEnterpriseRealMethod, EnumEnterpriseType, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetArrangeTaskUsersQueryApplyStatus, EnumGetCheckReceiveTaskCheckInUsersQueryStatus, EnumGetCheckReceiveTasksQueryResultItemCheckStatus, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumLogLevel, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumSmsStatus, EnumTaskApplyStatus, EnumTaskCheckReceiveMethod, EnumTaskCheckReceiveStatus, EnumTaskPaymentMethod, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementAuditStatus, EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserApplyStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckHistoryType, EnumTaskUserSubmitCheckReceiveStatus, EnumUserBankCardAccess, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, EnumWeChatPayApplymentBankAccountType, EnumWeChatPayApplymentCertType, EnumWeChatPayApplymentContactType, EnumWeChatPayApplymentFinanceType, EnumWeChatPayApplymentIdDocType, EnumWeChatPayApplymentIdHolderType, EnumWeChatPayApplymentSalesScenesType, EnumWeChatPayApplymentState, EnumWeChatPayApplymentSubjectType, EnumWeChatPaySettlementModifyVerifyResult, EnumWeChatPaySettlementVerifyResult, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetSettlementTasksQueryPaymentStatus, GetSettlementTasksQuerySupplierPaymentStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus } from './src/constants/apiEnum'
   import('./src/constants/apiEnum')
   // @ts-ignore
   export type { CategoryCode, IdentityCodeEnum, EducationCodeEnum, CertificateTypeCodeEnum, WelfareCodeEnum } from './src/constants/dic'
@@ -372,6 +375,8 @@
     readonly EnumEnterpriseCooperationWalletTransactionStatusTextForConfirm: UnwrapRef<typeof import('./src/constants/finance')['EnumEnterpriseCooperationWalletTransactionStatusTextForConfirm']>
     readonly EnumEnterpriseCostStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseCostStatus']>
     readonly EnumEnterpriseCostType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseCostType']>
+    readonly EnumEnterpriseEmployeeSource: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseEmployeeSource']>
+    readonly EnumEnterpriseEmployeeSourceText: UnwrapRef<typeof import('./src/constants/enterpriseEmployee')['EnumEnterpriseEmployeeSourceText']>
     readonly EnumEnterpriseRealMethod: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseRealMethod']>
     readonly EnumEnterpriseType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseType']>
     readonly EnumEnterpriseTypeText: UnwrapRef<typeof import('./src/constants/apiEnumText')['EnumEnterpriseTypeText']>
@@ -484,6 +489,7 @@
     readonly GetTaskInfoQueryResultHireButton: UnwrapRef<typeof import('./src/constants/apiEnum')['GetTaskInfoQueryResultHireButton']>
     readonly IdentityCodeEnum: UnwrapRef<typeof import('./src/constants/dic')['IdentityCodeEnum']>
     readonly ImportEnterpriseEmployeesTempPath: UnwrapRef<typeof import('./src/constants/enterpriseEmployee')['ImportEnterpriseEmployeesTempPath']>
+    readonly ImportFlexJobTempPath: UnwrapRef<typeof import('./src/constants/enterpriseEmployee')['ImportFlexJobTempPath']>
     readonly MenuSvgIconMap: UnwrapRef<typeof import('./src/constants/menu')['MenuSvgIconMap']>
     readonly ModuleColumns: UnwrapRef<typeof import('./src/constants/module')['ModuleColumns']>
     readonly MyRegExp: UnwrapRef<typeof import('./src/constants/regExp')['MyRegExp']>
diff --git a/src/constants/apiEnum.ts b/src/constants/apiEnum.ts
index 975e0ca..c684e71 100644
--- a/src/constants/apiEnum.ts
+++ b/src/constants/apiEnum.ts
@@ -143,6 +143,14 @@
   ElectronSign = 20,
 }
 
+/** 鐏靛伐鏉ユ簮 */
+export enum EnumEnterpriseEmployeeSource {
+  /**鍐呴儴 */
+  Internal = 10,
+  /**澶栭儴 */
+  External = 20,
+}
+
 /** 浼佷笟瀹炲悕鏂瑰紡 */
 export enum EnumEnterpriseRealMethod {
   /**浼佷笟涓夎绱� */
diff --git a/src/constants/enterpriseEmployee.ts b/src/constants/enterpriseEmployee.ts
index 1d926ed..afcc484 100644
--- a/src/constants/enterpriseEmployee.ts
+++ b/src/constants/enterpriseEmployee.ts
@@ -1,4 +1,8 @@
-import { EnumTaskUserHireStatus, EnumTaskUserSignContractStatus,EnumGetArrangeTaskUsersQueryApplyStatus } from './apiEnum';
+import {
+  EnumTaskUserHireStatus,
+  EnumTaskUserSignContractStatus,
+  EnumGetArrangeTaskUsersQueryApplyStatus,
+} from './apiEnum';
 
 export const EnumTaskUserHireStatusText = {
   [EnumTaskUserHireStatus.Wait]: '寰呭綍鐢�',
@@ -20,7 +24,14 @@
 
 export const ImportEnterpriseEmployeesTempPath = `${TempFolderPath}/%E7%81%B5%E5%B7%A5%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx`;
 
+export const ImportFlexJobTempPath = `${TempFolderPath}/%E7%81%B5%E5%B7%A5%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BFV2.xlsx`;
+
 export const EnumGetArrangeTaskUsersQueryApplyStatusText = {
   [EnumGetArrangeTaskUsersQueryApplyStatus.None]: '鏈姤鍚�',
   [EnumGetArrangeTaskUsersQueryApplyStatus.Completed]: '宸叉姤鍚�',
-}
+};
+
+export const EnumEnterpriseEmployeeSourceText = {
+  [EnumEnterpriseEmployeeSource.Internal]: '鍐呴儴',
+  [EnumEnterpriseEmployeeSource.External]: '澶栭儴',
+};
diff --git a/src/hooks/useUser.ts b/src/hooks/useUser.ts
index fa4559b..975d556 100644
--- a/src/hooks/useUser.ts
+++ b/src/hooks/useUser.ts
@@ -23,7 +23,7 @@
 
 export function useUserInfoRoles({ userInfoId, userType, clientType }: UseUserInfoRolesOptions) {
   const { data: userInfoRoles } = useQuery({
-    queryKey: ['userServices/getUserInfoRoles'],
+    queryKey: ['userServices/getUserInfoRoles', userInfoId, userType, clientType],
     queryFn: async () => {
       let res = await userServices.getUserInfoRoles(
         {
diff --git a/src/services/api/enterpriseEmployee.ts b/src/services/api/enterpriseEmployee.ts
index 622e474..c1a0c1e 100644
--- a/src/services/api/enterpriseEmployee.ts
+++ b/src/services/api/enterpriseEmployee.ts
@@ -2,6 +2,21 @@
 // @ts-ignore
 import { request } from '@/utils/request';
 
+/** 娣诲姞鐏靛伐淇℃伅 POST /api/user/enterpriseEmployee/addEnterpriseEmployee */
+export async function addEnterpriseEmployee(
+  body: API.AddEnterpriseEmployeeCommand,
+  options?: API.RequestConfig
+) {
+  return request<string>('/api/user/enterpriseEmployee/addEnterpriseEmployee', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
 /** 浼佷笟鎵归噺绛剧害鍚堝悓 POST /api/user/enterpriseEmployee/batchEnterpriseSignContract */
 export async function batchEnterpriseSignContract(
   body: API.BatchEnterpriseSignContractCommand,
@@ -176,6 +191,21 @@
   );
 }
 
+/** 淇1.3.0.2鐗堟湰鐏靛伐鏁版嵁 POST /api/user/enterpriseEmployee/repairEnterpriseEmployee_1_3_0_2 */
+export async function repairEnterpriseEmployee1302(
+  body: API.RepairEnterpriseEmployee1302Command,
+  options?: API.RequestConfig
+) {
+  return request<boolean>('/api/user/enterpriseEmployee/repairEnterpriseEmployee_1_3_0_2', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
 /** 鍙戦�侀個璇风绾︾煭淇� POST /api/user/enterpriseEmployee/sendInviteElectronSignSms */
 export async function sendInviteElectronSignSms(
   body: API.SendInviteElectronSignSmsCommand,
diff --git a/src/services/api/index.ts b/src/services/api/index.ts
index e23b688..b5aa93e 100644
--- a/src/services/api/index.ts
+++ b/src/services/api/index.ts
@@ -9,14 +9,16 @@
 import * as task from './task';
 import * as enterpriseWallet from './enterpriseWallet';
 import * as ocrUtils from './ocrUtils';
+import * as electronSign from './electronSign';
 import * as resource from './resource';
 import * as logRecords from './logRecords';
 import * as dictionary from './dictionary';
 import * as taskCheckReceive from './taskCheckReceive';
-import * as electronSign from './electronSign';
 import * as userResume from './userResume';
 import * as auth from './auth';
 import * as taskUser from './taskUser';
+import * as eventUtils from './eventUtils';
+import * as enterpriseCooperationWallet from './enterpriseCooperationWallet';
 import * as codeUrl from './codeUrl';
 import * as syncDatabase from './syncDatabase';
 import * as menu from './menu';
@@ -24,8 +26,6 @@
 import * as userWallet from './userWallet';
 import * as fileUtils from './fileUtils';
 import * as settings from './settings';
-import * as eventUtils from './eventUtils';
-import * as enterpriseCooperationWallet from './enterpriseCooperationWallet';
 export default {
   enterprise,
   enterpriseEmployee,
@@ -34,14 +34,16 @@
   task,
   enterpriseWallet,
   ocrUtils,
+  electronSign,
   resource,
   logRecords,
   dictionary,
   taskCheckReceive,
-  electronSign,
   userResume,
   auth,
   taskUser,
+  eventUtils,
+  enterpriseCooperationWallet,
   codeUrl,
   syncDatabase,
   menu,
@@ -49,6 +51,4 @@
   userWallet,
   fileUtils,
   settings,
-  eventUtils,
-  enterpriseCooperationWallet,
 };
diff --git a/src/services/api/typings.d.ts b/src/services/api/typings.d.ts
index 1501d1e..113f2ac 100644
--- a/src/services/api/typings.d.ts
+++ b/src/services/api/typings.d.ts
@@ -3,6 +3,28 @@
     [key: string]: any;
   }
 
+  interface AddEnterpriseEmployeeCommand {
+    /** 濮撳悕 */
+    name: string;
+    /** 韬唤璇佸彿 */
+    identity: string;
+    /** 鎵嬫満鍙� */
+    contactPhoneNumber: string;
+    gender?: EnumUserGender;
+    /** 骞撮緞 */
+    age?: number;
+    /** 韬唤璇佷汉鍍忛潰 */
+    identityImg?: string;
+    /** 韬唤璇佸浗寰介潰 */
+    identityBackImg?: string;
+    /** 鐢靛瓙鍚堝悓 */
+    contractUrl?: string;
+    /** 鍗忚璧峰鏃堕棿 */
+    contractBegin?: string;
+    /** 鍗忚缁堟鏃堕棿 */
+    contractEnd?: string;
+  }
+
   interface AgainSureTaskSettlementOrderRosterCommand {
     /** 鍚嶅崟Id */
     id?: string;
@@ -200,6 +222,8 @@
   interface APIgetMenusParams {
     /** 鐢ㄦ埛绫诲瀷 */
     userType?: EnumUserType;
+    /** 浼佷笟绫诲瀷 */
+    enterpriseType?: EnumEnterpriseType;
     /** 瀹㈡埛绔被鍨� */
     clientType?: EnumClientType;
     /** 瑙掕壊Id */
@@ -646,6 +670,8 @@
   }
 
   interface EditEnterpriseEmployeeCommand {
+    /** Id */
+    id?: string;
     /** 濮撳悕 */
     name: string;
     /** 韬唤璇佸彿 */
@@ -659,8 +685,12 @@
     identityImg?: string;
     /** 韬唤璇佸浗寰介潰 */
     identityBackImg?: string;
-    /** Id */
-    id?: string;
+    /** 鐢靛瓙鍚堝悓 */
+    contractUrl?: string;
+    /** 鍗忚璧峰鏃堕棿 */
+    contractBegin?: string;
+    /** 鍗忚缁堟鏃堕棿 */
+    contractEnd?: string;
   }
 
   interface EditTaskSettlementOrderRosterCommand {
@@ -880,6 +910,13 @@
     SMS = 10,
     /**鐢靛瓙绛� */
     ElectronSign = 20,
+  }
+
+  enum EnumEnterpriseEmployeeSource {
+    /**鍐呴儴 */
+    Internal = 10,
+    /**澶栭儴 */
+    External = 20,
   }
 
   enum EnumEnterpriseRealMethod {
@@ -4847,8 +4884,13 @@
     /** 绛剧害鏃堕棿-鏈�鏅氭椂闂� */
     signContractTimeEnd?: string;
     hireStatus?: EnumTaskUserHireStatus;
+    /** 瀹炲悕鏃堕棿-鏈�鏃╂椂闂� */
+    userRealTimeStart?: string;
+    /** 瀹炲悕鏃堕棿-鏈�鏅氭椂闂� */
+    userRealTimeEnd?: string;
     /** 鏄惁瀹炲悕 */
     isReal?: boolean;
+    source?: EnumEnterpriseEmployeeSource;
     userSignContractStatus?: EnumTaskUserSignContractStatus;
     enterpriseSignContractStatus?: EnumTaskUserSignContractStatus;
     signContractStatus?: EnumGetEnterpriseEmployeesQuerySignContractStatus;
@@ -4907,6 +4949,14 @@
     enterpriseSignContractTime?: string;
     /** 鐢靛瓙鍚堝悓 */
     contractUrl?: string;
+    /** 鍗忚璧峰鏃堕棿 */
+    contractBegin?: string;
+    /** 鍗忚缁堟鏃堕棿 */
+    contractEnd?: string;
+    source?: EnumEnterpriseEmployeeSource;
+    /** 鏉ユ簮鍚嶇О */
+    sourceName?: string;
+    /** 鍒涘缓鏃堕棿 */
     createdTime?: string;
   }
 
@@ -5464,6 +5514,7 @@
     /** 鏄惁閫夋嫨锛堢敤鎴疯鑹叉巿鏉冿級 */
     isChecked?: boolean;
     userType?: EnumUserType;
+    enterpriseType?: EnumEnterpriseType;
     clientType?: EnumClientType;
     /** 涓婄骇Id */
     parentId?: string;
@@ -6423,6 +6474,8 @@
     dataPower?: EnumRoleWebApiDataPower;
     /** 澶囨敞 */
     remark?: string;
+    /** 鐢ㄦ埛鏁� */
+    userCount?: number;
     /** 鑿滃崟Id */
     menuIds?: string[];
     /** 璧勬簮 */
@@ -7571,6 +7624,10 @@
     contactPhoneNumber?: string;
     /** 韬唤璇佸彿 */
     identity?: string;
+    /** 鍗忚璧峰鏃堕棿 */
+    contractBegin?: string;
+    /** 鍗忚缁堟鏃堕棿 */
+    contractEnd?: string;
   }
 
   interface ImportTaskSettlementOrderRostersCommand {
@@ -7922,6 +7979,8 @@
 
   type RepairContractTemplateValuePointBy1202Command = Record<string, any>;
 
+  type RepairEnterpriseEmployee1302Command = Record<string, any>;
+
   type RepairTaskEstimatedServiceFee1301Command = Record<string, any>;
 
   interface ResendResourceCommand {
@@ -8155,6 +8214,7 @@
 
   interface SaveMenuCommand {
     userType?: EnumUserType;
+    enterpriseType?: EnumEnterpriseType;
     clientType?: EnumClientType;
     /** 涓婄骇Id */
     parentId?: string;
diff --git a/src/views/FlexJobManage/FlexJobContractManage.vue b/src/views/FlexJobManage/FlexJobContractManage.vue
index f12bbf1..3d72bca 100644
--- a/src/views/FlexJobManage/FlexJobContractManage.vue
+++ b/src/views/FlexJobManage/FlexJobContractManage.vue
@@ -60,15 +60,30 @@
           <!-- <el-button @click="handleDownloadTemplate()" type="primary" link>妯℃澘涓嬭浇</el-button> -->
           <!-- <el-button @click="handleBatchImportAdd()" type="primary">鎵归噺瀵煎叆</el-button> -->
           <!-- <el-button @click="handleStaffInfoAdd()" type="primary">鏂板缓</el-button> -->
-          <el-button @click="handleBatchUnSign()" type="primary">鎵归噺瑙g害</el-button>
-          <el-button @click="handleSendShotMessage()" type="primary">鐭俊鍙戦��</el-button>
-          <el-button @click="handleBatchSign()" type="primary">鎵归噺绛剧害</el-button>
+          <el-button
+            v-if="checkSubModuleItemShow('pageButton', 'batchUnSignBtn')"
+            @click="handleBatchUnSign()"
+            type="primary"
+            >鎵归噺瑙g害</el-button
+          >
+          <el-button
+            v-if="checkSubModuleItemShow('pageButton', 'sendShotMessageBtn')"
+            @click="handleSendShotMessage()"
+            type="primary"
+            >鐭俊鍙戦��</el-button
+          >
+          <el-button
+            v-if="checkSubModuleItemShow('pageButton', 'batchSignBtn')"
+            @click="handleBatchSign()"
+            type="primary"
+            >鎵归噺绛剧害</el-button
+          >
           <!-- <el-button @click="handleEnterpriseBatchSign()" type="primary">鎵归噺浼佷笟绛剧害</el-button> -->
         </template>
       </ProTableQueryFilterBar>
       <ProTableV2
         v-bind="proTableProps"
-        :columns="FlexJobContractManageColumns"
+        :columns="column"
         :operationBtns="operationBtns"
         show-column-check
         ref="proTable"
@@ -78,7 +93,7 @@
       >
       </ProTableV2>
     </AppContainer>
-    <StaffInfoDialog v-bind="dialogStaffInfoProps" />
+    <!-- <StaffInfoDialog v-bind="dialogStaffInfoProps" /> -->
     <StaffDetailInfoDialog v-bind="dialogStaffDetailProps" />
     <BatchImportDialog
       v-bind="dialogBatchImportProps"
@@ -100,18 +115,15 @@
   QueryFilterItem,
   useTable,
   FieldDatePicker,
-  FieldRadio,
   FieldSelect,
-  defineOperationBtns,
   useFormDialog,
   UploadUserFile,
   XLSXUtils,
 } from '@bole-core/components';
-import { FlexJobContractManageColumns } from './constants';
 import { EnumTaskUserHireStatusText, EnumTaskUserSignContractStatusText } from '@/constants';
 import { Message } from '@bole-core/core';
 import { convertApi2FormUrlOnlyOne, downloadFileByUrl, format } from '@/utils';
-import StaffInfoDialog from './components/StaffInfoDialog.vue';
+// import StaffInfoDialog from './components/StaffInfoDialog.vue';
 import BatchImportDialog from './components/BatchImportDialog.vue';
 import SendShotMessageDialog from './components/SendShotMessageDialog.vue';
 import StaffDetailInfoDialog from './components/StaffDetailInfoDialog.vue';
@@ -119,36 +131,25 @@
 import * as enterpriseEmployeeServices from '@/services/api/enterpriseEmployee';
 import { ModelValueType } from 'element-plus';
 import _ from 'lodash';
+import { getEnterpriseEmployeesHooks } from './hooks';
 
 defineOptions({
   name: 'FlexJobContractManage',
 });
 
-const operationBtns = defineOperationBtns([
-  // {
-  //   data: {
-  //     enCode: 'editBtn',
-  //     name: '缂栬緫',
-  //   },
+const operationBtnMap: Record<string, OperationBtnType> = {
+  // editBtn: {
   //   emits: {
   //     onClick: (role) => openDialog(role),
   //   },
   // },
-  {
-    data: {
-      enCode: 'detailBtn',
-      name: '璇︽儏',
-    },
+  detailBtn: {
     emits: {
       onClick: (role: API.GetEnterpriseEmployeesQueryResultItem) =>
         handleStaffDetailEdit({ id: role.id, tabType: 'info' }),
     },
   },
-  {
-    data: {
-      enCode: 'enterpriseSignBtn',
-      name: '浼佷笟绛剧害',
-    },
+  enterpriseSignBtn: {
     emits: {
       onClick: (role) => handleEnterpriseSign(role),
     },
@@ -156,15 +157,12 @@
       hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
         !(
           row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
-          row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Wait
+          row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Wait &&
+          row.source === EnumEnterpriseEmployeeSource.Internal
         ),
     },
   },
-  {
-    data: {
-      enCode: 'inviteSignBtn',
-      name: '閭�璇风绾�',
-    },
+  inviteSignBtn: {
     emits: {
       onClick: (role) => handleInviteSign(role),
     },
@@ -176,11 +174,7 @@
         ),
     },
   },
-  {
-    data: {
-      enCode: 'unSignBtn',
-      name: '瑙g害',
-    },
+  unSignBtn: {
     emits: {
       onClick: (role) => handleUnSign(role),
     },
@@ -192,17 +186,17 @@
         ),
     },
   },
-  // {
-  //   data: {
-  //     enCode: 'delBtn',
-  //     name: '鍒犻櫎',
-  //   },
-  //   props: { type: 'danger' },
-  //   emits: {
-  //     onClick: (role) => handleDelete(role),
-  //   },
-  // },
-]);
+  delBtn: {
+    props: { type: 'danger' },
+    emits: {
+      onClick: (role) => handleDelete(role),
+    },
+  },
+};
+
+const { checkSubModuleItemShow, column, operationBtns } = useAccess({
+  operationBtnMap,
+});
 
 const router = useRouter();
 
@@ -217,75 +211,8 @@
   state.loading = false;
 });
 
-const {
-  getDataSource: getList,
-  proTableProps,
-  paginationState,
-  extraParamState,
-  reset,
-} = useTable(
-  async ({ pageIndex, pageSize }, extraParamState) => {
-    try {
-      let params: API.GetEnterpriseEmployeesQuery = {
-        pageModel: {
-          rows: pageSize,
-          page: pageIndex,
-          orderInput: extraParamState.orderInput,
-        },
-        keywords: extraParamState.searchWord,
-        createdTimeStart: format(extraParamState.createdTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
-        createdTimeEnd: format(extraParamState.createdTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
-        signContractTimeStart: format(
-          extraParamState.signContractTime?.[0] ?? '',
-          'YYYY-MM-DD 00:00:00'
-        ),
-        signContractTimeEnd: format(
-          extraParamState.signContractTime?.[1] ?? '',
-          'YYYY-MM-DD 23:59:59'
-        ),
-        hireStatus: extraParamState.hireStatus,
-        isReal: extraParamState.isReal,
-        userSignContractStatus: extraParamState.userSignContractStatus,
-        enterpriseSignContractStatus: extraParamState.enterpriseSignContractStatus,
-      };
-
-      let res = await enterpriseEmployeeServices.getEnterpriseEmployees(params, {
-        showLoading: !state.loading,
-      });
-      return res;
-    } catch (error) {
-      console.log('error: ', error);
-    }
-  },
-  {
-    defaultExtraParams: {
-      searchWord: '',
-      orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }],
-      createdTime: [] as unknown as ModelValueType,
-      signContractTime: [] as unknown as ModelValueType,
-      hireStatus: '' as any as EnumTaskUserHireStatus,
-      isReal: null as any as boolean,
-      userSignContractStatus: '' as any as EnumTaskUserSignContractStatus,
-      enterpriseSignContractStatus: '' as any as EnumTaskUserSignContractStatus,
-    },
-    queryKey: ['enterpriseEmployeeServices/getEnterpriseEmployees'],
-    columnsRenderProps: {
-      gender: { type: 'enum', valueEnum: EnumUserGenderTextForPerson },
-      hireStatus: { type: 'enum', valueEnum: EnumTaskUserHireStatusText },
-      userIsReal: {
-        formatter: (row: API.GetEnterpriseEmployeesQueryResultItem) => {
-          return row.userIsReal ? '宸插疄鍚�' : '鏈疄鍚�';
-        },
-      },
-      userSignContractStatus: { type: 'enum', valueEnum: EnumTaskUserSignContractStatusText },
-      hireTime: { type: 'date' },
-      userRealTime: { type: 'date' },
-      userSignContractTime: { type: 'date' },
-      enterpriseSignContractStatus: { type: 'enum', valueEnum: EnumTaskUserSignContractStatusText },
-      enterpriseSignContractTime: { type: 'date' },
-    },
-  }
-);
+const { getList, proTableProps, paginationState, extraParamState, reset } =
+  getEnterpriseEmployeesHooks();
 
 const proTable = ref<InstanceType<typeof ProTableV2>>();
 
diff --git a/src/views/FlexJobManage/FlexJobManage.vue b/src/views/FlexJobManage/FlexJobManage.vue
index 75e4801..b626354 100644
--- a/src/views/FlexJobManage/FlexJobManage.vue
+++ b/src/views/FlexJobManage/FlexJobManage.vue
@@ -103,18 +103,32 @@
         <template #btn>
           <el-button
             v-if="checkSubModuleItemShow('pageButton', 'importBtn')"
-            @click="handleDownloadTemplate()"
+            @click="handleDownloadFlexJobTemplate()"
             type="primary"
             link
             >妯℃澘涓嬭浇</el-button
           >
-          <el-button
+          <BlFileUpload
             v-if="checkSubModuleItemShow('pageButton', 'importBtn')"
-            @click="handleBatchImportAdd()"
-            type="primary"
-            >鎵归噺瀵煎叆</el-button
+            v-model:file-url="state.flexjobUrl"
+            ref="uploadRef"
+            :showTip="false"
+            :show-file-list="false"
+            class="pro-table-operation-btn upload-style-btn"
+            :on-success="(event) => handleUploadSuccess(event)"
+            :limitFileSize="null"
+            :limit="1"
+            accept="xlsx,xls"
           >
+            <el-button text type="primary" class="pro-table-operation-btn">鎵归噺瀵煎叆</el-button>
+          </BlFileUpload>
           <el-button
+            v-if="checkSubModuleItemShow('pageButton', 'addBtn')"
+            @click="handleStaffInfoAdd()"
+            type="primary"
+            >鏂板缓</el-button
+          >
+          <!-- <el-button
             v-if="checkSubModuleItemShow('pageButton', 'batchUnSignBtn')"
             @click="handleBatchUnSign()"
             type="primary"
@@ -137,7 +151,7 @@
             @click="handleEnterpriseBatchSign()"
             type="primary"
             >鎵归噺浼佷笟绛剧害</el-button
-          >
+          > -->
         </template>
       </ProTableQueryFilterBar>
       <ProTableV2
@@ -179,6 +193,7 @@
   useFormDialog,
   UploadUserFile,
   XLSXUtils,
+  BlFileUpload,
 } from '@bole-core/components';
 import { EnumTaskUserHireStatusText, EnumTaskUserSignContractStatusText } from '@/constants';
 import { Message } from '@bole-core/core';
@@ -191,6 +206,7 @@
 import * as enterpriseEmployeeServices from '@/services/api/enterpriseEmployee';
 import { ModelValueType } from 'element-plus';
 import _ from 'lodash';
+import { getEnterpriseEmployeesHooks } from './hooks';
 
 defineOptions({
   name: 'FlexJobManageList',
@@ -208,42 +224,42 @@
         handleStaffDetailEdit({ id: role.id, tabType: 'info' }),
     },
   },
-  enterpriseSignBtn: {
-    emits: {
-      onClick: (role) => handleEnterpriseSign(role),
-    },
-    extraProps: {
-      hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
-        !(
-          row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
-          row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Wait
-        ),
-    },
-  },
-  inviteSignBtn: {
-    emits: {
-      onClick: (role) => handleInviteSign(role),
-    },
-    extraProps: {
-      hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
-        !(
-          row.userSignContractStatus !== EnumTaskUserSignContractStatus.Pass &&
-          row.hireStatus === EnumTaskUserHireStatus.Pass
-        ),
-    },
-  },
-  unSignBtn: {
-    emits: {
-      onClick: (role) => handleUnSign(role),
-    },
-    extraProps: {
-      hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
-        !(
-          row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
-          row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Pass
-        ),
-    },
-  },
+  // enterpriseSignBtn: {
+  //   emits: {
+  //     onClick: (role) => handleEnterpriseSign(role),
+  //   },
+  //   extraProps: {
+  //     hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
+  //       !(
+  //         row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
+  //         row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Wait
+  //       ),
+  //   },
+  // },
+  // inviteSignBtn: {
+  //   emits: {
+  //     onClick: (role) => handleInviteSign(role),
+  //   },
+  //   extraProps: {
+  //     hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
+  //       !(
+  //         row.userSignContractStatus !== EnumTaskUserSignContractStatus.Pass &&
+  //         row.hireStatus === EnumTaskUserHireStatus.Pass
+  //       ),
+  //   },
+  // },
+  // unSignBtn: {
+  //   emits: {
+  //     onClick: (role) => handleUnSign(role),
+  //   },
+  //   extraProps: {
+  //     hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
+  //       !(
+  //         row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
+  //         row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Pass
+  //       ),
+  //   },
+  // },
 };
 
 const { checkSubModuleItemShow, column, operationBtns } = useAccess({
@@ -254,6 +270,7 @@
 
 const BaseState = {
   loading: true,
+  flexjobUrl: [] as UploadUserFile[],
 };
 
 const state = reactive({ ...BaseState });
@@ -263,75 +280,8 @@
   state.loading = false;
 });
 
-const {
-  getDataSource: getList,
-  proTableProps,
-  paginationState,
-  extraParamState,
-  reset,
-} = useTable(
-  async ({ pageIndex, pageSize }, extraParamState) => {
-    try {
-      let params: API.GetEnterpriseEmployeesQuery = {
-        pageModel: {
-          rows: pageSize,
-          page: pageIndex,
-          orderInput: extraParamState.orderInput,
-        },
-        keywords: extraParamState.searchWord,
-        createdTimeStart: format(extraParamState.createdTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
-        createdTimeEnd: format(extraParamState.createdTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
-        signContractTimeStart: format(
-          extraParamState.signContractTime?.[0] ?? '',
-          'YYYY-MM-DD 00:00:00'
-        ),
-        signContractTimeEnd: format(
-          extraParamState.signContractTime?.[1] ?? '',
-          'YYYY-MM-DD 23:59:59'
-        ),
-        hireStatus: extraParamState.hireStatus,
-        isReal: extraParamState.isReal,
-        userSignContractStatus: extraParamState.userSignContractStatus,
-        enterpriseSignContractStatus: extraParamState.enterpriseSignContractStatus,
-      };
-
-      let res = await enterpriseEmployeeServices.getEnterpriseEmployees(params, {
-        showLoading: !state.loading,
-      });
-      return res;
-    } catch (error) {
-      console.log('error: ', error);
-    }
-  },
-  {
-    defaultExtraParams: {
-      searchWord: '',
-      orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }],
-      createdTime: [] as unknown as ModelValueType,
-      signContractTime: [] as unknown as ModelValueType,
-      hireStatus: '' as any as EnumTaskUserHireStatus,
-      isReal: null as any as boolean,
-      userSignContractStatus: '' as any as EnumTaskUserSignContractStatus,
-      enterpriseSignContractStatus: '' as any as EnumTaskUserSignContractStatus,
-    },
-    queryKey: ['enterpriseEmployeeServices/getEnterpriseEmployees'],
-    columnsRenderProps: {
-      gender: { type: 'enum', valueEnum: EnumUserGenderTextForPerson },
-      hireStatus: { type: 'enum', valueEnum: EnumTaskUserHireStatusText },
-      userIsReal: {
-        formatter: (row: API.GetEnterpriseEmployeesQueryResultItem) => {
-          return row.userIsReal ? '宸插疄鍚�' : '鏈疄鍚�';
-        },
-      },
-      userSignContractStatus: { type: 'enum', valueEnum: EnumTaskUserSignContractStatusText },
-      hireTime: { type: 'date' },
-      userRealTime: { type: 'date' },
-      userSignContractTime: { type: 'date' },
-      enterpriseSignContractStatus: { type: 'enum', valueEnum: EnumTaskUserSignContractStatusText },
-      enterpriseSignContractTime: { type: 'date' },
-    },
-  }
-);
+const { getList, proTableProps, paginationState, extraParamState, reset } =
+  getEnterpriseEmployeesHooks();
 
 const proTable = ref<InstanceType<typeof ProTableV2>>();
 
@@ -354,7 +304,7 @@
   handleAdd: handleStaffInfoAdd,
   editForm: staffInfoEditForm,
 } = useFormDialog({
-  onConfirm: handleAddOrEdit,
+  onConfirm: addEnterpriseEmployee,
   defaultFormParams: {
     id: '',
     name: '',
@@ -368,6 +318,7 @@
     regiterTime: '',
     userRealTime: '',
     userSignContractTime: '',
+    contractTime: [] as unknown as ModelValueType,
     isDetail: false,
   },
 });
@@ -391,11 +342,35 @@
       userRealTime: row.userRealTime ?? '',
       userSignContractTime: row.userSignContractTime ?? '',
       isDetail: isDetail,
+
+      contractTime: [row.contractBegin, row.contractEnd],
     });
   } catch (error) {}
 }
 
-async function handleAddOrEdit() {
+async function addEnterpriseEmployee() {
+  try {
+    let params: API.AddEnterpriseEmployeeCommand = {
+      name: staffInfoEditForm.name,
+      identity: staffInfoEditForm.identity,
+      contactPhoneNumber: staffInfoEditForm.contactPhoneNumber,
+      gender: staffInfoEditForm.gender,
+      age: staffInfoEditForm.age,
+      identityImg: staffInfoEditForm.identityImg[0]?.path ?? '',
+      identityBackImg: staffInfoEditForm.identityBackImg[0]?.path ?? '',
+      contractUrl: staffInfoEditForm.contractUrl[0]?.path ?? '',
+      contractBegin: format(staffInfoEditForm.contractTime[0], 'YYYY-MM-DD 00:00:00'),
+      contractEnd: format(staffInfoEditForm.contractTime[1], 'YYYY-MM-DD 23:59:59'),
+    };
+    let res = await enterpriseEmployeeServices.addEnterpriseEmployee(params);
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      getList(paginationState.pageIndex);
+    }
+  } catch (error) {}
+}
+
+async function editEnterpriseEmployee() {
   try {
     let params: API.EditEnterpriseEmployeeCommand = {
       name: staffInfoEditForm.name,
@@ -497,6 +472,10 @@
 
 function handleDownloadTemplate() {
   downloadFileByUrl(ImportEnterpriseEmployeesTempPath, '鎵归噺瀵煎叆妯℃澘');
+}
+
+function handleDownloadFlexJobTemplate() {
+  downloadFileByUrl(ImportFlexJobTempPath, '鎵归噺瀵煎叆妯℃澘');
 }
 
 const {
@@ -661,4 +640,40 @@
     await Message.deleteMessage();
   } catch (error) {}
 }
+
+function handleUploadSuccess(response: UploadUserFile & { file: File & { uid: number } }) {
+  if (response.path) {
+    importEnterpriseEmployees(response.path);
+  }
+}
+
+async function importEnterpriseEmployees(excelUrl: string) {
+  try {
+    let params: API.ImportEnterpriseEmployeesCommand = {
+      excelUrl: excelUrl,
+    };
+    let res = await enterpriseEmployeeServices.importEnterpriseEmployees(params);
+    if (res.failCount > 0) {
+      await Message.tipMessage('瀛樺湪閿欒鏁版嵁锛屾槸鍚﹀鍑猴紵');
+      XLSXUtils.exportToXLSX({
+        workbookDataList: res.errors,
+        fileName: '鐏靛伐鎵归噺瀵煎叆-閿欒鏁版嵁',
+        workbookHeaderMap: {
+          name: '濮撳悕',
+          contactPhoneNumber: '鎵嬫満鍙�',
+          identity: '韬唤璇佸彿',
+          contractBegin: '鍗忚璧峰鏃堕棿',
+          contractEnd: '鍗忚缁堟鏃堕棿',
+          errorMessage: '閿欒淇℃伅',
+        },
+      });
+    } else {
+      Message.successMessage('瀵煎叆鎴愬姛');
+      getList();
+    }
+  } catch (error) {
+  } finally {
+    state.flexjobUrl = [] as UploadUserFile[];
+  }
+}
 </script>
diff --git a/src/views/FlexJobManage/components/StaffInfoDialog.vue b/src/views/FlexJobManage/components/StaffInfoDialog.vue
index c9024f8..94309b3 100644
--- a/src/views/FlexJobManage/components/StaffInfoDialog.vue
+++ b/src/views/FlexJobManage/components/StaffInfoDialog.vue
@@ -40,11 +40,11 @@
         <ProFormColItem :span="12">
           <ProFormItemV2
             label="鍗忚鏃堕棿:"
-            prop="regiterTime"
+            prop="contractTime"
             :check-rules="[{ message: '璇烽�夋嫨鍗忚鏃堕棿', type: 'array' }]"
           >
             <ProFormDatePicker
-              v-model="form.regiterTime"
+              v-model="form.contractTime"
               type="daterange"
               range-separator="鑷�"
               start-placeholder="璧峰鏃ユ湡"
@@ -136,7 +136,7 @@
 </template>
 
 <script setup lang="ts">
-import { FormInstance } from 'element-plus';
+import { FormInstance, ModelValueType } from 'element-plus';
 import {
   ProDialog,
   ProForm,
@@ -174,6 +174,8 @@
   userRealTime: string;
   userSignContractTime: string;
   isDetail: boolean;
+
+  contractTime: ModelValueType;
 };
 
 const visible = defineModel({ type: Boolean });
diff --git a/src/views/FlexJobManage/constants/columns.ts b/src/views/FlexJobManage/constants/columns.ts
index 2076546..65fa563 100644
--- a/src/views/FlexJobManage/constants/columns.ts
+++ b/src/views/FlexJobManage/constants/columns.ts
@@ -82,66 +82,3 @@
     name: '鐏靛伐鏉ユ簮',
   },
 ]);
-
-export const FlexJobContractManageColumns = defineColumns([
-  {
-    id: '1',
-    enCode: 'name',
-    name: '濮撳悕',
-  },
-  {
-    id: '2',
-    enCode: 'identity',
-    name: '韬唤璇佸彿',
-  },
-  {
-    id: '3',
-    enCode: 'gender',
-    name: '鎬у埆',
-  },
-  {
-    id: '5',
-    enCode: 'age',
-    name: '骞撮緞',
-  },
-  {
-    id: '6',
-    enCode: 'contactPhoneNumber',
-    name: '鎵嬫満鍙�',
-  },
-  {
-    id: '9',
-    enCode: 'userIsReal',
-    name: '瀹炲悕鐘舵��',
-  },
-  {
-    id: '10',
-    enCode: 'userRealTime',
-    name: '瀹炲悕鏃堕棿',
-  },
-  {
-    id: '11',
-    enCode: 'a',
-    name: '鐏靛伐鏉ユ簮',
-  },
-  {
-    id: '12',
-    enCode: 'userSignContractStatus',
-    name: '鐏靛伐绛剧害鐘舵��',
-  },
-  {
-    id: '13',
-    enCode: 'userSignContractTime',
-    name: '绛剧害鏃堕棿',
-  },
-  {
-    id: '14',
-    enCode: 'enterpriseSignContractStatus',
-    name: '浼佷笟绛剧害鐘舵��',
-  },
-  {
-    id: '15',
-    enCode: 'enterpriseSignContractTime',
-    name: '浼佷笟绛剧害鏃堕棿',
-  },
-]);
diff --git a/src/views/FlexJobManage/hooks/index.ts b/src/views/FlexJobManage/hooks/index.ts
new file mode 100644
index 0000000..d833a25
--- /dev/null
+++ b/src/views/FlexJobManage/hooks/index.ts
@@ -0,0 +1,88 @@
+import { format } from '@/utils';
+import { useTable } from '@bole-core/components';
+import * as enterpriseEmployeeServices from '@/services/api/enterpriseEmployee';
+import { ModelValueType } from 'element-plus';
+
+export function getEnterpriseEmployeesHooks() {
+  const {
+    getDataSource: getList,
+    proTableProps,
+    paginationState,
+    extraParamState,
+    reset,
+  } = useTable(
+    async ({ pageIndex, pageSize }, extraParamState) => {
+      try {
+        let params: API.GetEnterpriseEmployeesQuery = {
+          pageModel: {
+            rows: pageSize,
+            page: pageIndex,
+            orderInput: extraParamState.orderInput,
+          },
+          keywords: extraParamState.searchWord,
+          createdTimeStart: format(extraParamState.createdTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
+          createdTimeEnd: format(extraParamState.createdTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
+          signContractTimeStart: format(
+            extraParamState.signContractTime?.[0] ?? '',
+            'YYYY-MM-DD 00:00:00'
+          ),
+          signContractTimeEnd: format(
+            extraParamState.signContractTime?.[1] ?? '',
+            'YYYY-MM-DD 23:59:59'
+          ),
+          hireStatus: extraParamState.hireStatus,
+          isReal: extraParamState.isReal,
+          userSignContractStatus: extraParamState.userSignContractStatus,
+          enterpriseSignContractStatus: extraParamState.enterpriseSignContractStatus,
+        };
+
+        let res = await enterpriseEmployeeServices.getEnterpriseEmployees(params);
+        return res;
+      } catch (error) {
+        console.log('error: ', error);
+      }
+    },
+    {
+      defaultExtraParams: {
+        searchWord: '',
+        orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }],
+        createdTime: [] as unknown as ModelValueType,
+        signContractTime: [] as unknown as ModelValueType,
+        hireStatus: '' as any as EnumTaskUserHireStatus,
+        isReal: null as any as boolean,
+        userSignContractStatus: '' as any as EnumTaskUserSignContractStatus,
+        enterpriseSignContractStatus: '' as any as EnumTaskUserSignContractStatus,
+      },
+      queryKey: ['enterpriseEmployeeServices/getEnterpriseEmployees'],
+      columnsRenderProps: {
+        gender: { type: 'enum', valueEnum: EnumUserGenderTextForPerson },
+        hireStatus: { type: 'enum', valueEnum: EnumTaskUserHireStatusText },
+        userIsReal: {
+          formatter: (row: API.GetEnterpriseEmployeesQueryResultItem) => {
+            return row.userIsReal ? '宸插疄鍚�' : '鏈疄鍚�';
+          },
+        },
+        userSignContractStatus: { type: 'enum', valueEnum: EnumTaskUserSignContractStatusText },
+        hireTime: { type: 'date' },
+        userRealTime: { type: 'date' },
+        userSignContractTime: { type: 'date' },
+        enterpriseSignContractStatus: {
+          type: 'enum',
+          valueEnum: EnumTaskUserSignContractStatusText,
+        },
+        enterpriseSignContractTime: { type: 'date' },
+        contractBegin: { type: 'date' },
+        contractEnd: { type: 'date' },
+        source: { type: 'enum', valueEnum: EnumEnterpriseEmployeeSourceText },
+      },
+    }
+  );
+
+  return {
+    getList,
+    proTableProps,
+    paginationState,
+    extraParamState,
+    reset,
+  };
+}
diff --git a/src/views/Permission/RoleManage.vue b/src/views/Permission/RoleManage.vue
index 887b4f1..431d940 100644
--- a/src/views/Permission/RoleManage.vue
+++ b/src/views/Permission/RoleManage.vue
@@ -52,6 +52,7 @@
 import { EnumUserType } from '@/constants';
 import DialogAuthorizeV2 from './components/dialogAuthorizeV2.vue';
 import * as roleServices from '@/services/api/role';
+import { useQueryClient } from '@tanstack/vue-query';
 
 defineOptions({
   name: 'RoleManage',
@@ -169,6 +170,8 @@
   },
 });
 
+const queryClient = useQueryClient();
+
 async function handleAddOrEdit() {
   try {
     const isEdit = editForm.id;
@@ -193,6 +196,7 @@
     if (res) {
       Message.successMessage('鎿嶄綔鎴愬姛');
       getList(isEdit ? paginationState.pageIndex : 1);
+      queryClient.invalidateQueries(['userServices/getUserInfoRoles']);
     }
   } catch (error) {}
 }
@@ -207,6 +211,7 @@
     if (res) {
       Message.successMessage('鎿嶄綔鎴愬姛');
       getList(paginationState.pageIndex);
+      queryClient.invalidateQueries(['userServices/getUserInfoRoles']);
     }
   } catch (error) {}
 }
@@ -221,6 +226,7 @@
     if (res) {
       Message.successMessage('鎿嶄綔鎴愬姛');
       getList(paginationState.pageIndex);
+      queryClient.invalidateQueries(['userServices/getUserInfoRoles']);
       return !!res;
     }
   } catch (error) {}

--
Gitblit v1.9.1