From c3d85f99d71dc283308e1219817e1d816e985809 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期四, 25 十二月 2025 10:31:38 +0800
Subject: [PATCH] feat: init

---
 src/views/EmploymentManage/EmploymentSignList.vue                   |   72 
 src/services/api/standardOrder.ts                                   |  162 +
 src/views/CustomerManage/CustomerManage.vue                         |  202 +
 src/views/ServiceChargeManage/ServiceChargeDetail.vue               |  157 
 src/views/FinanceManage/components/EnterpriseBalanceManageView.vue  |  127 
 src/views/DataReport/DistributionDetailReport.vue                   |  116 
 src/views/ServiceChargeManage/ServiceChargeManageList.vue           |   34 
 src/views/EmploymentManage/TaskArrange.vue                          |  188 -
 src/views/FinanceManage/components/DistributionDetailView.vue       |    8 
 src/hooks/index.ts                                                  |    2 
 src/views/CustomerManage/components/ResetOperatorPasswordDialog.vue |   81 
 src/views/FinanceManage/CustomerRechargeManage.vue                  |  158 +
 src/views/FlexJobManage/FlexJobContractManage.vue                   |  552 ++++
 src/views/EmploymentManage/components/AddTaskDialog.vue             |  175 +
 src/views/ServiceChargeManage/components/ResettleEditDialog.vue     |   90 
 src/views/EmploymentManage/TaskManageList.vue                       |   20 
 auto-imports.d.ts                                                   |   48 
 src/constants/electronSign.ts                                       |    2 
 src/views/FinanceManage/components/OrderSettlementDetailDialog.vue  |  143 +
 src/views/FinanceManage/components/RechargeRecordialog.vue          |  102 
 src/constants/app.ts                                                |    2 
 src/views/CustomerManage/AddOrEditCustomer.vue                      |   19 
 src/constants/enum.ts                                               |    5 
 src/views/EmploymentManage/EmploymentManageArrange.vue              |   36 
 src/services/api/standardService.ts                                 |  153 +
 src/views/CustomerManage/CustomerDetail.vue                         |   11 
 src/views/EmploymentManage/TaskArrangeDetail.vue                    |  274 ++
 src/views/FlexJobManage/FlexJobManage.vue                           |  419 +-
 src/views/FinanceManage/AccountManage.vue                           |  169 +
 src/services/api/auth.ts                                            |   15 
 src/views/Permission/RoleManage.vue                                 |    2 
 src/views/CustomerManage/components/ResetPasswordDialog.vue         |   71 
 src/services/api/advertisement.ts                                   |   96 
 src/views/AgreementManage/AgreementManageList.vue                   |  113 
 src/hooks/useEvent.ts                                               |    2 
 src/views/FinanceManage/OrderSettlementManage.vue                   |  154 +
 src/views/CustomerManage/InsureProductConfigure.vue                 |  117 
 src/views/ServiceChargeManage/components/SettleDetailDialog.vue     |    8 
 src/views/EmploymentManage/components/ManualCheckManageDialog.vue   |   35 
 src/views/FlexJobManage/hooks/index.ts                              |  108 
 src/views/FlexJobManage/components/StaffDetailInfoView.vue          |    8 
 src/views/FinanceManage/constants/columns.ts                        |   68 
 src/views/FinanceManage/EnterpriseBalanceManage.vue                 |  132 
 src/views/FlexJobManage/components/AddInternalStaffDialog.vue       |  225 +
 src/constants/enterpriseEmployee.ts                                 |    8 
 src/views/EmploymentManage/CheckReceiveTaskDetail.vue               |   16 
 src/views/EmploymentManage/components/AddOrEditEmploymentView.vue   |  110 
 src/views/AgreementManage/components/TemplateAddDialog.vue          |   35 
 src/views/EmploymentManage/CheckManage.vue                          |    5 
 src/constants/apiEnum.ts                                            |  136 
 src/constants/index.ts                                              |    2 
 src/utils/common/common.ts                                          |   31 
 src/services/api/userWallet.ts                                      |   15 
 src/views/EmploymentManage/StandardOrder.vue                        |  158 +
 src/views/CustomerManage/components/AddOrEditCustomerView.vue       |  579 ++++
 .eslintrc-auto-import.json                                          |   15 
 src/hooks/useUser.ts                                                |    4 
 src/services/api/typings.d.ts                                       | 1380 ++++++++++
 src/constants/customer.ts                                           |   23 
 src/views/UserManage/UserManageList.vue                             |    9 
 src/services/api/enterprise.ts                                      |   93 
 src/views/Permission/components/dialogAuthorizeV2.vue               |    2 
 src/services/api/index.ts                                           |   10 
 src/views/EmploymentManage/StandardOrderDetail.vue                  |  180 +
 src/views/ServiceChargeManage/BalanceManage.vue                     |   28 
 src/views/EmploymentManage/components/CheckManageDialog.vue         |   20 
 src/views/FinanceManage/CustomerRechargeRecord.vue                  |  105 
 src/constants/finance.ts                                            |    5 
 src/views/FinanceManage/components/CustomerBalanceManageView.vue    |   96 
 src/views/FinanceManage/EnterpriseBalanceManageDetail.vue           |   49 
 src/views/FinanceManage/components/CustomerRechargeDialog.vue       |  170 +
 71 files changed, 7,054 insertions(+), 911 deletions(-)

diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json
index 6c88a55..ec15cc0 100644
--- a/.eslintrc-auto-import.json
+++ b/.eslintrc-auto-import.json
@@ -3,6 +3,8 @@
     "AppLocalConfig": true,
     "AppType": true,
     "AreaType": true,
+    "AutoSignPowerAttorneyTempUrl": true,
+    "BooleanOptions": true,
     "CategoryCode": true,
     "CertificateTypeCodeEnum": true,
     "CommonAnnexTableColumns": true,
@@ -15,6 +17,8 @@
     "EducationCodeEnum": true,
     "EffectScope": true,
     "EmptyTextEditorItem": true,
+    "EnumAdvertisementPage": true,
+    "EnumAdvertisementStatus": true,
     "EnumBillingMethod": true,
     "EnumBillingMethodText": true,
     "EnumBillingMethodUnitText": true,
@@ -31,15 +35,18 @@
     "EnumElectronSignAccess": true,
     "EnumElectronSignVerifyType": true,
     "EnumEnterpriseCooperationServiceFeeCollectType": true,
+    "EnumEnterpriseCooperationServiceFeeCollectTypeText": true,
     "EnumEnterpriseCooperationSignStatus": true,
     "EnumEnterpriseCooperationSignStatusText": true,
     "EnumEnterpriseCooperationStatus": true,
     "EnumEnterpriseCooperationStatusText": true,
     "EnumEnterpriseCooperationWalletTransactionStatus": true,
     "EnumEnterpriseCooperationWalletTransactionStatusText": true,
+    "EnumEnterpriseCooperationWalletTransactionStatusTextForConfirm": true,
     "EnumEnterpriseCostStatus": true,
     "EnumEnterpriseCostType": true,
     "EnumEnterpriseEmployeeSource": true,
+    "EnumEnterpriseEmployeeSourceText": true,
     "EnumEnterpriseRealMethod": true,
     "EnumEnterpriseType": true,
     "EnumEnterpriseTypeText": true,
@@ -85,6 +92,11 @@
     "EnumSettlementCycleText": true,
     "EnumSmsAccess": true,
     "EnumSmsStatus": true,
+    "EnumStandardOrderAppointmentStatus": true,
+    "EnumStandardOrderPayStatus": true,
+    "EnumStandardOrderSettlementStatus": true,
+    "EnumStandardServiceRecommendStatus": true,
+    "EnumStandardServiceReleaseStatus": true,
     "EnumTaskApplyStatus": true,
     "EnumTaskCheckReceiveMethod": true,
     "EnumTaskCheckReceiveMethodText": true,
@@ -162,7 +174,10 @@
     "GlobalEventListener": true,
     "IdentityCodeEnum": true,
     "ImportEnterpriseEmployeesTempPath": true,
+    "ImportFlexJobTempPath": true,
     "InjectionKey": true,
+    "IsConfiguredText": true,
+    "IsRealText": true,
     "MaybeRef": true,
     "MaybeRefOrGetter": true,
     "MenuSvgIconMap": true,
diff --git a/auto-imports.d.ts b/auto-imports.d.ts
index 286e380..1cc9fdc 100644
--- a/auto-imports.d.ts
+++ b/auto-imports.d.ts
@@ -9,8 +9,12 @@
   const AppLocalConfig: typeof import('./src/constants/app')['AppLocalConfig']
   const AppType: typeof import('./src/constants/app')['AppType']
   const AreaType: typeof import('./src/constants/enum')['AreaType']
+  const AutoSignPowerAttorneyTempUrl: typeof import('./src/constants/electronSign')['AutoSignPowerAttorneyTempUrl']
+  const BooleanOptions: typeof import('./src/constants/enum')['BooleanOptions']
   const CategoryCode: typeof import('./src/constants/dic')['CategoryCode']
   const CertificateTypeCodeEnum: typeof import('./src/constants/dic')['CertificateTypeCodeEnum']
+  const ChargeTypeEnum: typeof import('./src/constants/enterprise')['ChargeTypeEnum']
+  const ChargeTypeEnumText: typeof import('./src/constants/enterprise')['ChargeTypeEnumText']
   const CommonAnnexTableColumns: typeof import('./src/constants/common')['CommonAnnexTableColumns']
   const EditorType: typeof import('./src/constants/editor')['EditorType']
   const EditorTypeText: typeof import('./src/constants/editor')['EditorTypeText']
@@ -18,6 +22,11 @@
   const EffectScope: typeof import('vue')['EffectScope']
   const ElMessageBox: typeof import('element-plus/es')['ElMessageBox']
   const EmptyTextEditorItem: typeof import('./src/constants/editor')['EmptyTextEditorItem']
+  const EnterpriseConfigureType: typeof import('./src/constants/enterprise')['EnterpriseConfigureType']
+  const EnterpriseConfigureTypeTextPartA: typeof import('./src/constants/enterprise')['EnterpriseConfigureTypeTextPartA']
+  const EnterpriseConfigureTypeTextSupplier: typeof import('./src/constants/enterprise')['EnterpriseConfigureTypeTextSupplier']
+  const EnumAdvertisementPage: typeof import('./src/constants/apiEnum')['EnumAdvertisementPage']
+  const EnumAdvertisementStatus: typeof import('./src/constants/apiEnum')['EnumAdvertisementStatus']
   const EnumBillingMethod: typeof import('./src/constants/apiEnum')['EnumBillingMethod']
   const EnumBillingMethodText: typeof import('./src/constants/task')['EnumBillingMethodText']
   const EnumBillingMethodUnitText: typeof import('./src/constants/task')['EnumBillingMethodUnitText']
@@ -34,15 +43,18 @@
   const EnumElectronSignAccess: typeof import('./src/constants/apiEnum')['EnumElectronSignAccess']
   const EnumElectronSignVerifyType: typeof import('./src/constants/apiEnum')['EnumElectronSignVerifyType']
   const EnumEnterpriseCooperationServiceFeeCollectType: typeof import('./src/constants/apiEnum')['EnumEnterpriseCooperationServiceFeeCollectType']
+  const EnumEnterpriseCooperationServiceFeeCollectTypeText: typeof import('./src/constants/customer')['EnumEnterpriseCooperationServiceFeeCollectTypeText']
   const EnumEnterpriseCooperationSignStatus: typeof import('./src/constants/apiEnum')['EnumEnterpriseCooperationSignStatus']
   const EnumEnterpriseCooperationSignStatusText: typeof import('./src/constants/supplier')['EnumEnterpriseCooperationSignStatusText']
   const EnumEnterpriseCooperationStatus: typeof import('./src/constants/apiEnum')['EnumEnterpriseCooperationStatus']
   const EnumEnterpriseCooperationStatusText: typeof import('./src/constants/supplier')['EnumEnterpriseCooperationStatusText']
   const EnumEnterpriseCooperationWalletTransactionStatus: typeof import('./src/constants/apiEnum')['EnumEnterpriseCooperationWalletTransactionStatus']
   const EnumEnterpriseCooperationWalletTransactionStatusText: typeof import('./src/constants/finance')['EnumEnterpriseCooperationWalletTransactionStatusText']
+  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']
@@ -53,7 +65,9 @@
   const EnumEnterpriseWalletExpandindirectOrderFileType: typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletExpandindirectOrderFileType']
   const EnumEnterpriseWalletExpandindirectOrderScene: typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletExpandindirectOrderScene']
   const EnumEnterpriseWalletExpandindirectOrderStatus: typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletExpandindirectOrderStatus']
+  const EnumEnterpriseWalletExpandindirectOrderStatusText: typeof import('./src/constants/enterprise')['EnumEnterpriseWalletExpandindirectOrderStatusText']
   const EnumEnterpriseWalletSignStatus: typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletSignStatus']
+  const EnumEnterpriseWalletSignStatusText: typeof import('./src/constants/enterprise')['EnumEnterpriseWalletSignStatusText']
   const EnumEnterpriseWalletTransactionStatus: typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletTransactionStatus']
   const EnumEnterpriseWalletTransactionType: typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletTransactionType']
   const EnumGetArrangeTaskUsersQueryApplyStatus: typeof import('./src/constants/apiEnum')['EnumGetArrangeTaskUsersQueryApplyStatus']
@@ -62,6 +76,7 @@
   const EnumGetCheckReceiveTasksQueryResultItemCheckStatus: typeof import('./src/constants/apiEnum')['EnumGetCheckReceiveTasksQueryResultItemCheckStatus']
   const EnumGetEnterpriseEmployeesQuerySignContractStatus: typeof import('./src/constants/apiEnum')['EnumGetEnterpriseEmployeesQuerySignContractStatus']
   const EnumInsuranceSupplierAccess: typeof import('./src/constants/apiEnum')['EnumInsuranceSupplierAccess']
+  const EnumInsuranceSupplierAccessText: typeof import('./src/constants/enterprise')['EnumInsuranceSupplierAccessText']
   const EnumLogLevel: typeof import('./src/constants/apiEnum')['EnumLogLevel']
   const EnumMenuType: typeof import('./src/constants/apiEnum')['EnumMenuType']
   const EnumMenuVisitLevel: typeof import('./src/constants/apiEnum')['EnumMenuVisitLevel']
@@ -76,6 +91,7 @@
   const EnumPersonalUserRealStatus: typeof import('./src/constants/apiEnum')['EnumPersonalUserRealStatus']
   const EnumReadScene: typeof import('./src/constants/apiEnum')['EnumReadScene']
   const EnumRealAccess: typeof import('./src/constants/apiEnum')['EnumRealAccess']
+  const EnumRealAccessText: typeof import('./src/constants/enterprise')['EnumRealAccessText']
   const EnumResourceController: typeof import('./src/constants/apiEnum')['EnumResourceController']
   const EnumResourceMethod: typeof import('./src/constants/apiEnum')['EnumResourceMethod']
   const EnumRoleWebApiDataPower: typeof import('./src/constants/apiEnum')['EnumRoleWebApiDataPower']
@@ -88,8 +104,15 @@
   const EnumSettlementCycleDateWeekArray: typeof import('./src/constants/task')['EnumSettlementCycleDateWeekArray']
   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 EnumSmsAccessTextUseInSms: typeof import('./src/constants/enterprise')['EnumSmsAccessTextUseInSms']
   const EnumSmsStatus: typeof import('./src/constants/apiEnum')['EnumSmsStatus']
   const EnumSmsTemplateType: typeof import('./src/constants/apiEnum')['EnumSmsTemplateType']
+  const EnumStandardOrderAppointmentStatus: typeof import('./src/constants/apiEnum')['EnumStandardOrderAppointmentStatus']
+  const EnumStandardOrderPayStatus: typeof import('./src/constants/apiEnum')['EnumStandardOrderPayStatus']
+  const EnumStandardOrderSettlementStatus: typeof import('./src/constants/apiEnum')['EnumStandardOrderSettlementStatus']
+  const EnumStandardServiceRecommendStatus: typeof import('./src/constants/apiEnum')['EnumStandardServiceRecommendStatus']
+  const EnumStandardServiceReleaseStatus: typeof import('./src/constants/apiEnum')['EnumStandardServiceReleaseStatus']
   const EnumTaskApplyStatus: typeof import('./src/constants/apiEnum')['EnumTaskApplyStatus']
   const EnumTaskCheckReceiveMethod: typeof import('./src/constants/apiEnum')['EnumTaskCheckReceiveMethod']
   const EnumTaskCheckReceiveMethodText: typeof import('./src/constants/task')['EnumTaskCheckReceiveMethodText']
@@ -154,6 +177,8 @@
   const FastColumnList: typeof import('./src/constants/module')['FastColumnList']
   const FastDataButtonList: typeof import('./src/constants/module')['FastDataButtonList']
   const FastPageButtonList: typeof import('./src/constants/module')['FastPageButtonList']
+  const FlexEnterpriseCertificationStatus: typeof import('./src/constants/enterprise')['FlexEnterpriseCertificationStatus']
+  const FlexEnterpriseCertificationStatusText: typeof import('./src/constants/enterprise')['FlexEnterpriseCertificationStatusText']
   const FlexEnterpriseSettingStatus: typeof import('./src/constants/enum')['FlexEnterpriseSettingStatus']
   const Gender: typeof import('./src/constants/enum')['Gender']
   const GenderText: typeof import('./src/constants/enum')['GenderText']
@@ -165,6 +190,9 @@
   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 IsConfiguredText: typeof import('./src/constants/customer')['IsConfiguredText']
+  const IsRealText: typeof import('./src/constants/customer')['IsRealText']
   const MenuSvgIconMap: typeof import('./src/constants/menu')['MenuSvgIconMap']
   const ModuleColumns: typeof import('./src/constants/module')['ModuleColumns']
   const MyRegExp: typeof import('./src/constants/regExp')['MyRegExp']
@@ -188,6 +216,9 @@
   const SubModuleType: typeof import('./src/constants/module')['SubModuleType']
   const TempFolderPath: typeof import('./src/constants/enum')['TempFolderPath']
   const ThemeColors: typeof import('./src/constants/theme')['ThemeColors']
+  const VerifyStatus: typeof import('./src/constants/enterprise')['VerifyStatus']
+  const VerifyStatusColor: typeof import('./src/constants/enterprise')['VerifyStatusColor']
+  const VerifyStatusText: typeof import('./src/constants/enterprise')['VerifyStatusText']
   const WelfareCodeEnum: typeof import('./src/constants/dic')['WelfareCodeEnum']
   const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate']
   const computed: typeof import('vue')['computed']
@@ -307,7 +338,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, EnumEnterpriseCooperationServiceFeeCollectType, EnumEnterpriseCooperationSignStatus, EnumEnterpriseCooperationStatus, EnumEnterpriseCooperationWalletTransactionStatus, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseEmployeeSource, EnumEnterpriseRealMethod, EnumEnterpriseType, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetArrangeTaskUsersQueryApplyStatus, EnumGetCheckReceiveTaskCheckInUsersQueryStatus, EnumGetCheckReceiveTasksQueryResultItemCheckStatus, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumInsuranceSupplierAccess, EnumLogLevel, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumReadScene, 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, EnumWxmpSubscribMessageTemplate, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetSettlementTasksQueryPaymentStatus, GetSettlementTasksQuerySupplierPaymentStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus, EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumConsoleLogAccess, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumElectronSignVerifyType, EnumEnterpriseCooperationServiceFeeCollectType, EnumEnterpriseCooperationSignStatus, EnumEnterpriseCooperationStatus, EnumEnterpriseCooperationWalletTransactionStatus, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseEmployeeSource, EnumEnterpriseRealMethod, EnumEnterpriseType, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetArrangeTaskUsersQueryApplyStatus, EnumGetCheckReceiveTaskCheckInUsersQueryStatus, EnumGetCheckReceiveTasksQueryResultItemCheckStatus, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumInsuranceSupplierAccess, EnumLogLevel, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumReadScene, 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, EnumWxmpSubscribMessageTemplate, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetSettlementTasksQueryPaymentStatus, GetSettlementTasksQuerySupplierPaymentStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus } from './src/constants/apiEnum'
+  export type { EnumAdvertisementPage, EnumAdvertisementStatus, EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumConsoleLogAccess, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumElectronSignVerifyType, EnumEnterpriseCooperationServiceFeeCollectType, EnumEnterpriseCooperationSignStatus, EnumEnterpriseCooperationStatus, EnumEnterpriseCooperationWalletTransactionStatus, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseEmployeeSource, EnumEnterpriseRealMethod, EnumEnterpriseType, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetArrangeTaskUsersQueryApplyStatus, EnumGetCheckReceiveTaskCheckInUsersQueryStatus, EnumGetCheckReceiveTasksQueryResultItemCheckStatus, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumInsuranceSupplierAccess, EnumLogLevel, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumReadScene, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumSmsStatus, EnumStandardOrderAppointmentStatus, EnumStandardOrderPayStatus, EnumStandardOrderSettlementStatus, EnumStandardServiceRecommendStatus, EnumStandardServiceReleaseStatus, 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, EnumWxmpSubscribMessageTemplate, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetSettlementTasksQueryPaymentStatus, GetSettlementTasksQuerySupplierPaymentStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus, EnumAdvertisementPage, EnumAdvertisementStatus, EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumConsoleLogAccess, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumElectronSignVerifyType, EnumEnterpriseCooperationServiceFeeCollectType, EnumEnterpriseCooperationSignStatus, EnumEnterpriseCooperationStatus, EnumEnterpriseCooperationWalletTransactionStatus, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseEmployeeSource, EnumEnterpriseRealMethod, EnumEnterpriseType, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetArrangeTaskUsersQueryApplyStatus, EnumGetCheckReceiveTaskCheckInUsersQueryStatus, EnumGetCheckReceiveTasksQueryResultItemCheckStatus, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumInsuranceSupplierAccess, EnumLogLevel, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumReadScene, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumSmsStatus, EnumStandardOrderAppointmentStatus, EnumStandardOrderPayStatus, EnumStandardOrderSettlementStatus, EnumStandardServiceRecommendStatus, EnumStandardServiceReleaseStatus, 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, EnumWxmpSubscribMessageTemplate, 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'
@@ -346,6 +377,8 @@
     readonly AppLocalConfig: UnwrapRef<typeof import('./src/constants/app')['AppLocalConfig']>
     readonly AppType: UnwrapRef<typeof import('./src/constants/app')['AppType']>
     readonly AreaType: UnwrapRef<typeof import('./src/constants/enum')['AreaType']>
+    readonly AutoSignPowerAttorneyTempUrl: UnwrapRef<typeof import('./src/constants/electronSign')['AutoSignPowerAttorneyTempUrl']>
+    readonly BooleanOptions: UnwrapRef<typeof import('./src/constants/enum')['BooleanOptions']>
     readonly CategoryCode: UnwrapRef<typeof import('./src/constants/dic')['CategoryCode']>
     readonly CertificateTypeCodeEnum: UnwrapRef<typeof import('./src/constants/dic')['CertificateTypeCodeEnum']>
     readonly CommonAnnexTableColumns: UnwrapRef<typeof import('./src/constants/common')['CommonAnnexTableColumns']>
@@ -354,6 +387,8 @@
     readonly EducationCodeEnum: UnwrapRef<typeof import('./src/constants/dic')['EducationCodeEnum']>
     readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']>
     readonly EmptyTextEditorItem: UnwrapRef<typeof import('./src/constants/editor')['EmptyTextEditorItem']>
+    readonly EnumAdvertisementPage: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumAdvertisementPage']>
+    readonly EnumAdvertisementStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumAdvertisementStatus']>
     readonly EnumBillingMethod: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumBillingMethod']>
     readonly EnumBillingMethodText: UnwrapRef<typeof import('./src/constants/task')['EnumBillingMethodText']>
     readonly EnumBillingMethodUnitText: UnwrapRef<typeof import('./src/constants/task')['EnumBillingMethodUnitText']>
@@ -370,15 +405,18 @@
     readonly EnumElectronSignAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumElectronSignAccess']>
     readonly EnumElectronSignVerifyType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumElectronSignVerifyType']>
     readonly EnumEnterpriseCooperationServiceFeeCollectType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseCooperationServiceFeeCollectType']>
+    readonly EnumEnterpriseCooperationServiceFeeCollectTypeText: UnwrapRef<typeof import('./src/constants/customer')['EnumEnterpriseCooperationServiceFeeCollectTypeText']>
     readonly EnumEnterpriseCooperationSignStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseCooperationSignStatus']>
     readonly EnumEnterpriseCooperationSignStatusText: UnwrapRef<typeof import('./src/constants/supplier')['EnumEnterpriseCooperationSignStatusText']>
     readonly EnumEnterpriseCooperationStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseCooperationStatus']>
     readonly EnumEnterpriseCooperationStatusText: UnwrapRef<typeof import('./src/constants/supplier')['EnumEnterpriseCooperationStatusText']>
     readonly EnumEnterpriseCooperationWalletTransactionStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseCooperationWalletTransactionStatus']>
     readonly EnumEnterpriseCooperationWalletTransactionStatusText: UnwrapRef<typeof import('./src/constants/finance')['EnumEnterpriseCooperationWalletTransactionStatusText']>
+    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']>
@@ -424,6 +462,11 @@
     readonly EnumSettlementCycleText: UnwrapRef<typeof import('./src/constants/task')['EnumSettlementCycleText']>
     readonly EnumSmsAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumSmsAccess']>
     readonly EnumSmsStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumSmsStatus']>
+    readonly EnumStandardOrderAppointmentStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumStandardOrderAppointmentStatus']>
+    readonly EnumStandardOrderPayStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumStandardOrderPayStatus']>
+    readonly EnumStandardOrderSettlementStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumStandardOrderSettlementStatus']>
+    readonly EnumStandardServiceRecommendStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumStandardServiceRecommendStatus']>
+    readonly EnumStandardServiceReleaseStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumStandardServiceReleaseStatus']>
     readonly EnumTaskApplyStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskApplyStatus']>
     readonly EnumTaskCheckReceiveMethod: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskCheckReceiveMethod']>
     readonly EnumTaskCheckReceiveMethodText: UnwrapRef<typeof import('./src/constants/task')['EnumTaskCheckReceiveMethodText']>
@@ -494,6 +537,9 @@
     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 IsConfiguredText: UnwrapRef<typeof import('./src/constants/customer')['IsConfiguredText']>
+    readonly IsRealText: UnwrapRef<typeof import('./src/constants/customer')['IsRealText']>
     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 c98f0a4..a8c9942 100644
--- a/src/constants/apiEnum.ts
+++ b/src/constants/apiEnum.ts
@@ -1,6 +1,20 @@
 /* eslint-disable */
 // @ts-ignore
 
+/** 骞垮憡椤甸潰 */
+export enum EnumAdvertisementPage {
+  /**鐢叉柟灏忕▼搴忛椤� */
+  PartAWxmpHome = 10,
+}
+
+/** 骞垮憡鐘舵�� */
+export enum EnumAdvertisementStatus {
+  /**灞曠ず涓� */
+  InProcess = 20,
+  /**宸蹭笅鏋� */
+  Stopped = 100,
+}
+
 /** 璁¤垂鏂瑰紡 */
 export enum EnumBillingMethod {
   /**鎸夋湀 */
@@ -165,6 +179,8 @@
   Identity3 = 10,
   /**浼佷笟鍥涜绱� */
   Identity4 = 20,
+  /**瀹㈡埛鑷璇� */
+  Customer = 30,
 }
 
 /** 浼佷笟绫诲瀷 */
@@ -173,6 +189,8 @@
   Supplier = 0,
   /**鐢叉柟浼佷笟 */
   PartyA = 1,
+  /**骞冲彴 */
+  Platform = 999,
 }
 
 /** 浼佷笟閽卞寘閫氶亾 */
@@ -417,74 +435,82 @@
   BestSign = 10,
   /**鏀粯瀹濅俊浠荤 */
   AlipaySign = 20,
+  /**瀹㈡埛鑷璇� */
+  Customer = 30,
 }
 
 /** 璧勬簮鎺у埗鍣� */
 export enum EnumResourceController {
   /**鏁版嵁瀛楀吀 */
   FlexJobServerDictionary = 0,
+  /**鏍囧噯璁㈠崟鏈嶅姟 */
+  FlexJobServerStandardService = 1,
+  /**鏍囧噯璁㈠崟 */
+  FlexJobServerStandardOrder = 2,
   /**浠诲姟 */
-  FlexJobServerTask = 1,
+  FlexJobServerTask = 3,
   /**浠诲姟浜哄憳 */
-  FlexJobServerTaskUser = 2,
+  FlexJobServerTaskUser = 4,
   /**浠诲姟楠屾敹 */
-  FlexJobServerTaskCheckReceive = 3,
+  FlexJobServerTaskCheckReceive = 5,
   /**鎶曚繚浜у搧 */
-  FlexJobServerInsuranceProduct = 4,
+  FlexJobServerInsuranceProduct = 6,
   /**浼佷笟鎶曚繚浜у搧 */
-  FlexJobServerEnterpriseInsuranceProduct = 5,
+  FlexJobServerEnterpriseInsuranceProduct = 7,
+  /**骞垮憡 */
+  CommonServerAdvertisement = 8,
   /**缂栧彿鍦板潃 */
-  CommonServerCodeUrls = 6,
+  CommonServerCodeUrls = 9,
   /**鏂囦欢 */
-  CommonServerFileUtils = 7,
+  CommonServerFileUtils = 10,
   /**浜嬩欢 */
-  CommonServerEventUtils = 8,
+  CommonServerEventUtils = 11,
   /**鏂囧瓧璇嗗埆 */
-  CommonServerOcrUtils = 9,
+  CommonServerOcrUtils = 12,
   /**鏃ュ織璁板綍 */
-  CommonServerLogRecords = 10,
+  CommonServerLogRecords = 13,
   /**鍚屾鏁版嵁搴� */
-  CommonServerSyncDatabase = 11,
+  CommonServerSyncDatabase = 14,
   /**鐭俊宸ュ叿 */
-  CommonServerSmsUtils = 12,
+  CommonServerSmsUtils = 15,
   /**閰嶇疆 */
-  CommonServerSettings = 13,
+  CommonServerSettings = 16,
   /**宸茶 */
-  CommonServerReadRecord = 14,
+  CommonServerReadRecord = 17,
   /**寰俊灏忕▼搴� */
-  CommonServerWxmp = 15,
+  CommonServerWxmp = 18,
   /**鐢ㄦ埛璁よ瘉 */
-  UserServerAuth = 16,
+  UserServerAuth = 19,
   /**鐢ㄦ埛鑿滃崟 */
-  UserServerMenu = 17,
+  UserServerMenu = 20,
   /**鐢ㄦ埛璧勬簮 */
-  UserServerResource = 18,
+  UserServerResource = 21,
   /**鐢ㄦ埛瑙掕壊 */
-  UserServerRole = 19,
+  UserServerRole = 22,
   /**鐢ㄦ埛淇℃伅 */
-  UserServerUser = 20,
+  UserServerUser = 23,
   /**鐢ㄦ埛閽卞寘 */
-  UserServerUserWallet = 21,
+  UserServerUserWallet = 24,
   /**鐢靛瓙绛� */
-  UserServerElectronSign = 22,
+  UserServerElectronSign = 25,
   /**鐢ㄦ埛绠�鍘� */
-  UserServerUserResume = 23,
+  UserServerUserResume = 26,
   /**浼佷笟淇℃伅 */
-  UserServerEnterprise = 24,
+  UserServerEnterprise = 27,
   /**浼佷笟閽卞寘 */
-  UserServerEnterpriseWallet = 25,
+  UserServerEnterpriseWallet = 28,
   /**浼佷笟鍚堜綔閽卞寘 */
-  UserServerEnterpriseCooperationWallet = 26,
+  UserServerEnterpriseCooperationWallet = 29,
   /**鐏靛伐淇℃伅 */
-  UserServerEnterpriseEmployee = 27,
+  UserServerEnterpriseEmployee = 30,
   /**鐢靛瓙绛� */
-  ElectronSignServerElectronSign = 28,
+  ElectronSignServerElectronSign = 31,
   /**鐭俊 */
-  ToolServerSms = 29,
+  ToolServerSms = 32,
   /**灏忕▼搴� */
-  ToolServerWxmp = 30,
+  ToolServerWxmp = 33,
   /**淇濋櫓 */
-  WaterDropCloudServerInsurance = 31,
+  WaterDropCloudServerInsurance = 34,
 }
 
 /** 璧勬簮璇锋眰鏂瑰紡 */
@@ -549,6 +575,52 @@
   Fail = 30,
 }
 
+/** 鏍囧噯璁㈠崟棰勭害鐘舵�� */
+export enum EnumStandardOrderAppointmentStatus {
+  /**寰呯‘璁� */
+  WaitSure = 10,
+  /**寰呮湇鍔� */
+  WaitServe = 20,
+  /**宸插畬鎴� */
+  Completed = 30,
+  /**宸插彇娑� */
+  Cancelled = 40,
+}
+
+/** 鏍囧噯璁㈠崟鏀粯鐘舵�� */
+export enum EnumStandardOrderPayStatus {
+  /**寰呮敮浠� */
+  Wait = 10,
+  /**宸叉敮浠� */
+  Completed = 20,
+  /**宸插彇娑� */
+  Cancelled = 30,
+}
+
+/** 鏍囧噯璁㈠崟缁撶畻鐘舵�� */
+export enum EnumStandardOrderSettlementStatus {
+  /**寰呯粨绠� */
+  Wait = 10,
+  /**宸插畬鎴� */
+  Completed = 20,
+}
+
+/** 鏍囧噯璁㈠崟鏈嶅姟鎺ㄨ崘鐘舵�� */
+export enum EnumStandardServiceRecommendStatus {
+  /**鏈帹鑽� */
+  No = 10,
+  /**宸叉帹鑽� */
+  Yes = 20,
+}
+
+/** 鏍囧噯璁㈠崟鏈嶅姟-鍙戝竷鐘舵�� */
+export enum EnumStandardServiceReleaseStatus {
+  /**鍙戝竷涓� */
+  InProcess = 20,
+  /**宸插仠姝� */
+  Stopped = 100,
+}
+
 /** 浠诲姟鎶ュ悕鐘舵�� */
 export enum EnumTaskApplyStatus {
   /**寰呭紑濮� */
@@ -751,6 +823,8 @@
 
 /** 鐢ㄦ埛閽卞寘鏀舵敮绫诲瀷 */
 export enum EnumUserWalletTransactionType {
+  /**鏀粯 */
+  Payment = 1,
   /**鏀跺叆 */
   Income = 10,
   /**鎻愮幇 */
diff --git a/src/constants/app.ts b/src/constants/app.ts
index c3ab8d7..090be88 100644
--- a/src/constants/app.ts
+++ b/src/constants/app.ts
@@ -3,5 +3,5 @@
 export const AppLocalConfig = {
   userType: EnumUserType.Enterprise,
   clientType: EnumClientType.PcWeb,
-  enterpriseType: EnumEnterpriseType.PartyA,
+  enterpriseType: EnumEnterpriseType.Supplier,
 };
diff --git a/src/constants/customer.ts b/src/constants/customer.ts
new file mode 100644
index 0000000..a0da17c
--- /dev/null
+++ b/src/constants/customer.ts
@@ -0,0 +1,23 @@
+export const EnumEnterpriseCooperationStatusText = {
+  [EnumEnterpriseCooperationStatus.None]: '鏈悎浣�',
+  [EnumEnterpriseCooperationStatus.Completed]: '宸插悎浣�',
+};
+
+export const EnumEnterpriseCooperationSignStatusText = {
+  [EnumEnterpriseCooperationSignStatus.None]: '鏈绾�',
+  [EnumEnterpriseCooperationSignStatus.Completed]: '宸茬绾�',
+};
+
+export const EnumEnterpriseCooperationServiceFeeCollectTypeText = {
+  [EnumEnterpriseCooperationServiceFeeCollectType.Rate]: '鎸夋瘮渚�',
+  [EnumEnterpriseCooperationServiceFeeCollectType.SingleTime]: '鍗曚汉鍗曟',
+};
+
+export const IsRealText = {
+  false: '鏈疄鍚�',
+  true: '宸插疄鍚�',
+};
+export const IsConfiguredText = {
+  false: '鏈厤缃�',
+  true: '宸查厤缃�',
+};
diff --git a/src/constants/electronSign.ts b/src/constants/electronSign.ts
index 4577c54..83363f5 100644
--- a/src/constants/electronSign.ts
+++ b/src/constants/electronSign.ts
@@ -8,3 +8,5 @@
   width: number;
   height: number;
 };
+
+export const AutoSignPowerAttorneyTempUrl = `https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/FlexJob/temp/%E3%80%90%E5%85%AC%E5%AF%B9%E5%85%AC%E3%80%91%E7%94%B5%E5%AD%90%E7%AD%BE%E5%90%8D%E6%8E%88%E6%9D%83%E4%B9%A6%EF%BC%88%E4%BB%A3%E4%B8%BA%E7%AD%BE%E7%BD%B2%26%E8%87%AA%E5%8A%A8%E7%AD%BE%EF%BC%89-V4-20220315.docx`;
diff --git a/src/constants/enterpriseEmployee.ts b/src/constants/enterpriseEmployee.ts
index 9b3808b..afcc484 100644
--- a/src/constants/enterpriseEmployee.ts
+++ b/src/constants/enterpriseEmployee.ts
@@ -8,7 +8,6 @@
   [EnumTaskUserHireStatus.Wait]: '寰呭綍鐢�',
   [EnumTaskUserHireStatus.Pass]: '宸插綍鐢�',
   [EnumTaskUserHireStatus.Refuse]: '宸茶阿缁�',
-  [EnumTaskUserHireStatus.Cancel]: '宸插彇娑�',
 };
 
 export const EnumTaskUserSignContractStatusTextForFilter = {
@@ -25,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/constants/enum.ts b/src/constants/enum.ts
index c1ba104..7a9fcd1 100644
--- a/src/constants/enum.ts
+++ b/src/constants/enum.ts
@@ -19,3 +19,8 @@
    */
   Town,
 }
+
+export const BooleanOptions = [
+  { label: '鏄�', value: true },
+  { label: '鍚�', value: false },
+];
diff --git a/src/constants/finance.ts b/src/constants/finance.ts
index fa071de..15f29cb 100644
--- a/src/constants/finance.ts
+++ b/src/constants/finance.ts
@@ -17,3 +17,8 @@
   [EnumEnterpriseCooperationWalletTransactionStatus.Success]: '宸插埌璐�',
   [EnumEnterpriseCooperationWalletTransactionStatus.Fail]: '鏈埌璐�',
 };
+
+export const EnumEnterpriseCooperationWalletTransactionStatusTextForConfirm = {
+  [EnumEnterpriseCooperationWalletTransactionStatus.Success]: '宸插埌璐�',
+  [EnumEnterpriseCooperationWalletTransactionStatus.Fail]: '鏈埌璐�',
+};
diff --git a/src/constants/index.ts b/src/constants/index.ts
index e9eac59..5647ab8 100644
--- a/src/constants/index.ts
+++ b/src/constants/index.ts
@@ -17,4 +17,4 @@
 export * from './finance';
 export * from './common';
 export * from './user';
-export * from './supplier';
+export * from './customer';
diff --git a/src/hooks/index.ts b/src/hooks/index.ts
index 7bccc40..5460294 100644
--- a/src/hooks/index.ts
+++ b/src/hooks/index.ts
@@ -11,5 +11,3 @@
 export * from './sign';
 export * from './settlement';
 export * from './portraitTable';
-export * from './supplier';
-export * from './insurance';
diff --git a/src/hooks/useEvent.ts b/src/hooks/useEvent.ts
index 3d01572..7c89841 100644
--- a/src/hooks/useEvent.ts
+++ b/src/hooks/useEvent.ts
@@ -7,6 +7,8 @@
   'taskManage:edit': any;
   sureTaskSettlementOrder: any;
   checkReceiveTask: any;
+  'customerManage:add': any;
+  'customerManage:edit': any;
 };
 
 export type GlobalEventListener<T extends keyof GlobalEvent> = (payload: GlobalEvent[T]) => any;
diff --git a/src/hooks/useUser.ts b/src/hooks/useUser.ts
index b677f4d..975d556 100644
--- a/src/hooks/useUser.ts
+++ b/src/hooks/useUser.ts
@@ -23,14 +23,14 @@
 
 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(
         {
           userInfoId: unref(userInfoId),
           userType: userType,
           clientType: clientType,
-          enterpriseType: EnumEnterpriseType.PartyA,
+          enterpriseType: EnumEnterpriseType.Supplier,
         },
         { showLoading: false }
       );
diff --git a/src/services/api/advertisement.ts b/src/services/api/advertisement.ts
new file mode 100644
index 0000000..d75f8f0
--- /dev/null
+++ b/src/services/api/advertisement.ts
@@ -0,0 +1,96 @@
+/* eslint-disable */
+// @ts-ignore
+import { request } from '@/utils/request';
+
+/** 鏌ヨ骞垮憡璇︽儏 GET /api/common/advertisement/getAdvertisement */
+export async function getAdvertisement(
+  // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
+  params: API.APIgetAdvertisementParams,
+  options?: API.RequestConfig
+) {
+  return request<API.GetAdvertisementQueryResult>('/api/common/advertisement/getAdvertisement', {
+    method: 'GET',
+    params: {
+      ...params,
+    },
+    ...(options || {}),
+  });
+}
+
+/** 鏌ヨ骞垮憡鏃ュ織鍒嗛〉鍒楄〃 POST /api/common/advertisement/getAdvertisementLogs */
+export async function getAdvertisementLogs(
+  body: API.GetAdvertisementLogsQuery,
+  options?: API.RequestConfig
+) {
+  return request<API.HistoryQueryResult>('/api/common/advertisement/getAdvertisementLogs', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 鏌ヨ骞垮憡鍒嗛〉鍒楄〃 POST /api/common/advertisement/getAdvertisements */
+export async function getAdvertisements(
+  body: API.GetAdvertisementsQuery,
+  options?: API.RequestConfig
+) {
+  return request<API.GetAdvertisementsQueryResult>('/api/common/advertisement/getAdvertisements', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 鏌ヨ灞曠ず骞垮憡鍒楄〃 GET /api/common/advertisement/getShowAdvertisements */
+export async function getShowAdvertisements(
+  // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
+  params: API.APIgetShowAdvertisementsParams,
+  options?: API.RequestConfig
+) {
+  return request<API.GetShowAdvertisementsQueryResultItem[]>(
+    '/api/common/advertisement/getShowAdvertisements',
+    {
+      method: 'GET',
+      params: {
+        ...params,
+      },
+      ...(options || {}),
+    }
+  );
+}
+
+/** 淇濆瓨骞垮憡 POST /api/common/advertisement/saveAdvertisement */
+export async function saveAdvertisement(
+  body: API.SaveAdvertisementCommand,
+  options?: API.RequestConfig
+) {
+  return request<string>('/api/common/advertisement/saveAdvertisement', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 璁剧疆骞垮憡鐘舵�� PUT /api/common/advertisement/setAdvertisementStatus */
+export async function setAdvertisementStatus(
+  body: API.SetAdvertisementStatusCommand,
+  options?: API.RequestConfig
+) {
+  return request<number>('/api/common/advertisement/setAdvertisementStatus', {
+    method: 'PUT',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
diff --git a/src/services/api/auth.ts b/src/services/api/auth.ts
index 87bd6be..2cb1c46 100644
--- a/src/services/api/auth.ts
+++ b/src/services/api/auth.ts
@@ -32,6 +32,21 @@
   });
 }
 
+/** 閫夋嫨寰俊鎵嬫満鍙� POST /api/user/auth/chooseWxmpPhoneNumber */
+export async function chooseWxmpPhoneNumber(
+  body: API.ChooseWxmpPhoneNumberCommand,
+  options?: API.RequestConfig
+) {
+  return request<boolean>('/api/user/auth/chooseWxmpPhoneNumber', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
 /** 鑾峰彇闃块噷浜慜SS鎺堟潈淇℃伅 GET /api/user/auth/getAliyunOSSAcs */
 export async function getAliyunOSSAcs(
   // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
diff --git a/src/services/api/enterprise.ts b/src/services/api/enterprise.ts
index 346e2eb..90c4a39 100644
--- a/src/services/api/enterprise.ts
+++ b/src/services/api/enterprise.ts
@@ -2,6 +2,36 @@
 // @ts-ignore
 import { request } from '@/utils/request';
 
+/** 鍒犻櫎浼佷笟鍦板潃 DELETE /api/user/enterprise/deleteEnterpriseAddress */
+export async function deleteEnterpriseAddress(
+  body: API.DeleteEnterpriseAddressCommand,
+  options?: API.RequestConfig
+) {
+  return request<number>('/api/user/enterprise/deleteEnterpriseAddress', {
+    method: 'DELETE',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 绂佺敤浼佷笟 POST /api/user/enterprise/disabledEnterprise */
+export async function disabledEnterprise(
+  body: API.DisabledEnterpriseCommand,
+  options?: API.RequestConfig
+) {
+  return request<number>('/api/user/enterprise/disabledEnterprise', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
 /** 鏌ヨ浼佷笟璇︽儏 GET /api/user/enterprise/getEnterprise */
 export async function getEnterprise(
   // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
@@ -17,6 +47,39 @@
   });
 }
 
+/** 鏌ヨ浼佷笟鍦板潃璇︽儏 GET /api/user/enterprise/getEnterpriseAddress */
+export async function getEnterpriseAddress(
+  // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
+  params: API.APIgetEnterpriseAddressParams,
+  options?: API.RequestConfig
+) {
+  return request<API.GetEnterpriseAddressQueryResult>('/api/user/enterprise/getEnterpriseAddress', {
+    method: 'GET',
+    params: {
+      ...params,
+    },
+    ...(options || {}),
+  });
+}
+
+/** 鏌ヨ浼佷笟鍦板潃鍒嗛〉鍒楄〃 POST /api/user/enterprise/getEnterpriseAddresses */
+export async function getEnterpriseAddresses(
+  body: API.GetEnterpriseAddressesQuery,
+  options?: API.RequestConfig
+) {
+  return request<API.GetEnterpriseAddressesQueryResult>(
+    '/api/user/enterprise/getEnterpriseAddresses',
+    {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/json-patch+json',
+      },
+      data: body,
+      ...(options || {}),
+    }
+  );
+}
+
 /** 鏌ヨ浼佷笟鐢靛瓙绛鹃厤缃� GET /api/user/enterprise/getEnterpriseElectronSignSetting */
 export async function getEnterpriseElectronSignSetting(
   // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
@@ -169,6 +232,21 @@
   });
 }
 
+/** 淇濆瓨浼佷笟鍦板潃 POST /api/user/enterprise/saveEnterpriseAddress */
+export async function saveEnterpriseAddress(
+  body: API.SaveEnterpriseAddressCommand,
+  options?: API.RequestConfig
+) {
+  return request<string>('/api/user/enterprise/saveEnterpriseAddress', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
 /** 淇濆瓨浼佷笟璐圭敤 POST /api/user/enterprise/saveEnterpriseCost */
 export async function saveEnterpriseCost(
   body: API.SaveEnterpriseCostCommand,
@@ -229,6 +307,21 @@
   });
 }
 
+/** 璁剧疆浼佷笟鐧诲綍鐢ㄦ埛淇℃伅 PUT /api/user/enterprise/setEnterpriseLoginInfo */
+export async function setEnterpriseLoginInfo(
+  body: API.SetEnterpriseLoginInfoCommand,
+  options?: API.RequestConfig
+) {
+  return request<string>('/api/user/enterprise/setEnterpriseLoginInfo', {
+    method: 'PUT',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
 /** 璁剧疆浼佷笟鐭俊閰嶇疆 PUT /api/user/enterprise/setEnterpriseSmsSetting */
 export async function setEnterpriseSmsSetting(
   body: API.SetEnterpriseSmsSettingCommand,
diff --git a/src/services/api/index.ts b/src/services/api/index.ts
index 2dd6b34..566987c 100644
--- a/src/services/api/index.ts
+++ b/src/services/api/index.ts
@@ -14,10 +14,13 @@
 import * as logRecords from './logRecords';
 import * as dictionary from './dictionary';
 import * as taskCheckReceive from './taskCheckReceive';
+import * as standardService from './standardService';
+import * as userWallet from './userWallet';
 import * as userResume from './userResume';
 import * as auth from './auth';
 import * as taskUser from './taskUser';
 import * as enterpriseInsuranceProduct from './enterpriseInsuranceProduct';
+import * as standardOrder from './standardOrder';
 import * as eventUtils from './eventUtils';
 import * as enterpriseCooperationWallet from './enterpriseCooperationWallet';
 import * as insuranceProduct from './insuranceProduct';
@@ -25,7 +28,7 @@
 import * as syncDatabase from './syncDatabase';
 import * as menu from './menu';
 import * as sms from './sms';
-import * as userWallet from './userWallet';
+import * as advertisement from './advertisement';
 import * as fileUtils from './fileUtils';
 import * as settings from './settings';
 import * as wxmpUtils from './wxmpUtils';
@@ -42,10 +45,13 @@
   logRecords,
   dictionary,
   taskCheckReceive,
+  standardService,
+  userWallet,
   userResume,
   auth,
   taskUser,
   enterpriseInsuranceProduct,
+  standardOrder,
   eventUtils,
   enterpriseCooperationWallet,
   insuranceProduct,
@@ -53,7 +59,7 @@
   syncDatabase,
   menu,
   sms,
-  userWallet,
+  advertisement,
   fileUtils,
   settings,
   wxmpUtils,
diff --git a/src/services/api/standardOrder.ts b/src/services/api/standardOrder.ts
new file mode 100644
index 0000000..4890389
--- /dev/null
+++ b/src/services/api/standardOrder.ts
@@ -0,0 +1,162 @@
+/* eslint-disable */
+// @ts-ignore
+import { request } from '@/utils/request';
+
+/** 棰勭害涓嬪崟锛堟爣鍑嗚鍗曪級 POST /api/flexjob/standardOrder/addStandardOrder */
+export async function addStandardOrder(
+  body: API.AddStandardOrderCommand,
+  options?: API.RequestConfig
+) {
+  return request<string>('/api/flexjob/standardOrder/addStandardOrder', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 鏍囧噯璁㈠崟鍙栨秷 POST /api/flexjob/standardOrder/cancelStandardOrderAppointment */
+export async function cancelStandardOrderAppointment(
+  body: API.CancelStandardOrderAppointmentCommand,
+  options?: API.RequestConfig
+) {
+  return request<string>('/api/flexjob/standardOrder/cancelStandardOrderAppointment', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 鏌ヨ鏍囧噯璁㈠崟璇︽儏 GET /api/flexjob/standardOrder/getStandardOrder */
+export async function getStandardOrder(
+  // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
+  params: API.APIgetStandardOrderParams,
+  options?: API.RequestConfig
+) {
+  return request<API.GetStandardOrderQueryResult>('/api/flexjob/standardOrder/getStandardOrder', {
+    method: 'GET',
+    params: {
+      ...params,
+    },
+    ...(options || {}),
+  });
+}
+
+/** 鏌ヨ鏍囧噯璁㈠崟棰勭害鍒嗛〉鍒楄〃 POST /api/flexjob/standardOrder/getStandardOrderAppointments */
+export async function getStandardOrderAppointments(
+  body: API.GetStandardOrderAppointmentsQuery,
+  options?: API.RequestConfig
+) {
+  return request<API.GetStandardOrderAppointmentsQueryResult>(
+    '/api/flexjob/standardOrder/getStandardOrderAppointments',
+    {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/json-patch+json',
+      },
+      data: body,
+      ...(options || {}),
+    }
+  );
+}
+
+/** 鏌ヨ鏍囧噯璁㈠崟鏀粯鍒嗛〉鍒楄〃 POST /api/flexjob/standardOrder/getStandardOrderPays */
+export async function getStandardOrderPays(
+  body: API.GetStandardOrderPaysQuery,
+  options?: API.RequestConfig
+) {
+  return request<API.GetStandardOrderPaysQueryResult>(
+    '/api/flexjob/standardOrder/getStandardOrderPays',
+    {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/json-patch+json',
+      },
+      data: body,
+      ...(options || {}),
+    }
+  );
+}
+
+/** 鏌ヨ鏍囧噯璁㈠崟鍒嗛〉鍒楄〃 POST /api/flexjob/standardOrder/getStandardOrders */
+export async function getStandardOrders(
+  body: API.GetStandardOrdersQuery,
+  options?: API.RequestConfig
+) {
+  return request<API.GetStandardOrdersQueryResult>('/api/flexjob/standardOrder/getStandardOrders', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 鏌ヨ鏍囧噯璁㈠崟缁撶畻鍒嗛〉鍒楄〃 POST /api/flexjob/standardOrder/getStandardOrderSettlements */
+export async function getStandardOrderSettlements(
+  body: API.GetStandardOrderSettlementsQuery,
+  options?: API.RequestConfig
+) {
+  return request<API.GetStandardOrderSettlementsQueryResult>(
+    '/api/flexjob/standardOrder/getStandardOrderSettlements',
+    {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/json-patch+json',
+      },
+      data: body,
+      ...(options || {}),
+    }
+  );
+}
+
+/** 鏍囧噯璁㈠崟鏀粯 POST /api/flexjob/standardOrder/payStandardOrder */
+export async function payStandardOrder(
+  body: API.PayStandardOrderCommand,
+  options?: API.RequestConfig
+) {
+  return request<API.PayStandardOrderCommandResult>('/api/flexjob/standardOrder/payStandardOrder', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 鏍囧噯璁㈠崟鏈嶅姟纭 POST /api/flexjob/standardOrder/sureStandardOrder */
+export async function sureStandardOrder(
+  body: API.SureStandardOrderCommand,
+  options?: API.RequestConfig
+) {
+  return request<string>('/api/flexjob/standardOrder/sureStandardOrder', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 鏍囧噯璁㈠崟纭棰勭害 POST /api/flexjob/standardOrder/sureStandardOrderAppointment */
+export async function sureStandardOrderAppointment(
+  body: API.SureStandardOrderAppointmentCommand,
+  options?: API.RequestConfig
+) {
+  return request<string>('/api/flexjob/standardOrder/sureStandardOrderAppointment', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
diff --git a/src/services/api/standardService.ts b/src/services/api/standardService.ts
new file mode 100644
index 0000000..43d02bc
--- /dev/null
+++ b/src/services/api/standardService.ts
@@ -0,0 +1,153 @@
+/* eslint-disable */
+// @ts-ignore
+import { request } from '@/utils/request';
+
+/** 鏀惰棌鏍囧噯璁㈠崟鏈嶅姟 POST /api/flexjob/standardService/collectionStandardService */
+export async function collectionStandardService(
+  body: API.CollectionStandardServiceCommand,
+  options?: API.RequestConfig
+) {
+  return request<number>('/api/flexjob/standardService/collectionStandardService', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 鏌ヨ鏍囧噯璁㈠崟鏈嶅姟璇︽儏 GET /api/flexjob/standardService/getStandardService */
+export async function getStandardService(
+  // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
+  params: API.APIgetStandardServiceParams,
+  options?: API.RequestConfig
+) {
+  return request<API.GetStandardServiceQueryResult>(
+    '/api/flexjob/standardService/getStandardService',
+    {
+      method: 'GET',
+      params: {
+        ...params,
+      },
+      ...(options || {}),
+    }
+  );
+}
+
+/** 鏌ヨ鏍囧噯璁㈠崟鏈嶅姟璇勮鍒嗛〉鍒楄〃 POST /api/flexjob/standardService/getStandardServiceComments */
+export async function getStandardServiceComments(
+  body: API.GetStandardServiceCommentsQuery,
+  options?: API.RequestConfig
+) {
+  return request<API.GetStandardServiceCommentsQueryResult>(
+    '/api/flexjob/standardService/getStandardServiceComments',
+    {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/json-patch+json',
+      },
+      data: body,
+      ...(options || {}),
+    }
+  );
+}
+
+/** 鏌ヨ鏍囧噯璁㈠崟鏈嶅姟鍒嗛〉鍒楄〃 POST /api/flexjob/standardService/getStandardServices */
+export async function getStandardServices(
+  body: API.GetStandardServicesQuery,
+  options?: API.RequestConfig
+) {
+  return request<API.GetStandardServicesQueryResult>(
+    '/api/flexjob/standardService/getStandardServices',
+    {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/json-patch+json',
+      },
+      data: body,
+      ...(options || {}),
+    }
+  );
+}
+
+/** 鏌ヨ鏍囧噯璁㈠崟鏈嶅姟浜哄憳鍒嗛〉鍒楄〃 POST /api/flexjob/standardService/getStandardServiceServers */
+export async function getStandardServiceServers(
+  body: API.GetStandardServiceServersQuery,
+  options?: API.RequestConfig
+) {
+  return request<API.GetStandardServiceServersQueryResult>(
+    '/api/flexjob/standardService/getStandardServiceServers',
+    {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/json-patch+json',
+      },
+      data: body,
+      ...(options || {}),
+    }
+  );
+}
+
+/** 鏌ヨ鏍囧噯璁㈠崟鏈嶅姟渚涘簲鍟嗗垎椤靛垪琛� POST /api/flexjob/standardService/getStandardServiceSupplierEnterprises */
+export async function getStandardServiceSupplierEnterprises(
+  body: API.GetStandardServiceSupplierEnterprisesQuery,
+  options?: API.RequestConfig
+) {
+  return request<API.GetStandardServiceSupplierEnterprisesQueryResult>(
+    '/api/flexjob/standardService/getStandardServiceSupplierEnterprises',
+    {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/json-patch+json',
+      },
+      data: body,
+      ...(options || {}),
+    }
+  );
+}
+
+/** 淇濆瓨鏍囧噯璁㈠崟鏈嶅姟 POST /api/flexjob/standardService/saveStandardService */
+export async function saveStandardService(
+  body: API.SaveStandardServiceCommand,
+  options?: API.RequestConfig
+) {
+  return request<string>('/api/flexjob/standardService/saveStandardService', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 璁剧疆鏍囧噯璁㈠崟鏈嶅姟鏄惁鎺ㄨ崘 PUT /api/flexjob/standardService/setStandardServiceRecommendStatus */
+export async function setStandardServiceRecommendStatus(
+  body: API.SetStandardServiceRecommendStatusCommand,
+  options?: API.RequestConfig
+) {
+  return request<number>('/api/flexjob/standardService/setStandardServiceRecommendStatus', {
+    method: 'PUT',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 璁剧疆鏍囧噯璁㈠崟鏈嶅姟鍙戝竷鐘舵�� PUT /api/flexjob/standardService/setStandardServiceReleaseStatus */
+export async function setStandardServiceReleaseStatus(
+  body: API.SetStandardServiceReleaseStatusCommand,
+  options?: API.RequestConfig
+) {
+  return request<number>('/api/flexjob/standardService/setStandardServiceReleaseStatus', {
+    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 af06ffb..bc58f45 100644
--- a/src/services/api/typings.d.ts
+++ b/src/services/api/typings.d.ts
@@ -25,6 +25,60 @@
     contractEnd?: string;
   }
 
+  interface AddStandardOrderCommand {
+    /** 鏈嶅姟Id */
+    serviceId?: string;
+    /** 鏈嶅姟鍚� */
+    serviceName?: string;
+    /** 鏈嶅姟鍗曞彿 */
+    serviceCode?: string;
+    /** 瑙勬牸 */
+    specId?: string;
+    /** 瑙勬牸鍚嶇О */
+    specName?: string;
+    /** 瑙勬牸浠锋牸 */
+    specPrice?: number;
+    /** 瑙勬牸鏁伴噺 */
+    specNumber?: number;
+    /** 鍦板潃Id */
+    addressId?: string;
+    /** 濮撳悕 */
+    name?: string;
+    /** 鑱旂郴鐢佃瘽 */
+    contactPhoneNumber?: string;
+    /** 鐪佷唤缂栧彿 */
+    provinceCode?: string;
+    /** 鐪佷唤 */
+    provinceContent?: string;
+    /** 鍩庡競缂栧彿 */
+    cityCode?: string;
+    /** 鍩庡競 */
+    cityContent?: string;
+    /** 鍖虹紪鍙� */
+    areaCode?: string;
+    /** 鍖� */
+    areaContent?: string;
+    /** 璇︾粏鍦板潃 */
+    addressName?: string;
+    /** 闂ㄧ墝鍙� */
+    addressDetail?: string;
+    /** 缁忓害 */
+    longitude?: number;
+    /** 绾害 */
+    latitude?: number;
+    /** 鏈嶅姟璧峰鏃堕棿 */
+    beginTime?: string;
+    /** 鏈嶅姟鎴鏃堕棿 */
+    endTime?: string;
+    /** 渚涘簲鍟咺d */
+    supplierEnterpriseId?: string;
+    /** 鏈嶅姟浜哄憳Id */
+    enterpriseEmployeeIds?: string[];
+    /** 澶囨敞 */
+    remark?: string;
+    payAccess?: EnumUserBankCardAccess;
+  }
+
   interface AgainSureTaskSettlementOrderRosterCommand {
     /** 鍚嶅崟Id */
     id?: string;
@@ -35,6 +89,11 @@
     request?: CheckHealthQuery;
   }
 
+  interface APIgetAdvertisementParams {
+    /** Id */
+    id?: string;
+  }
+
   interface APIgetAliyunOSSAcsParams {
     /** 鑾峰彇闃块噷浜慜SS鎺堟潈淇℃伅 */
     request?: GetAliyunOSSAcsQuery;
@@ -114,6 +173,16 @@
     maxDeep?: number;
     /** 鎼哄甫涓嬬骇 */
     withChildren?: boolean;
+    /** 瀛楁1 */
+    field1?: string;
+    /** 瀛楁2 */
+    field2?: string;
+    /** 瀛楁3 */
+    field3?: string;
+    /** 瀛楁4 */
+    field4?: string;
+    /** 瀛楁5 */
+    field5?: string;
   }
 
   interface APIgetEnabledElectronSignSettingsParams {
@@ -123,6 +192,11 @@
     all?: boolean;
   }
 
+  interface APIgetEnterpriseAddressParams {
+    /** Id */
+    id?: string;
+  }
+
   interface APIgetEnterpriseContractTemplateSelectParams {
     /** 浼佷笟Id */
     enterpriseId?: string;
@@ -312,6 +386,21 @@
     operatorToken?: string;
   }
 
+  interface APIgetShowAdvertisementsParams {
+    /** 椤甸潰 */
+    page?: EnumAdvertisementPage;
+  }
+
+  interface APIgetStandardOrderParams {
+    /** 璁㈠崟Id */
+    id?: string;
+  }
+
+  interface APIgetStandardServiceParams {
+    /** Id */
+    id?: string;
+  }
+
   interface APIgetSupplierEnterpriseSelectParams {
     /** 鏌ヨ渚涘簲鍟嗛�夋嫨鍣ㄦ暟鎹� */
     request?: GetSupplierEnterpriseSelectQuery;
@@ -591,6 +680,13 @@
     insuranceSupplierId?: string;
   }
 
+  interface CancelStandardOrderAppointmentCommand {
+    /** 璁㈠崟Id */
+    id?: string;
+    /** 鍙栨秷鍘熷洜 */
+    appointmentCancelReason?: string;
+  }
+
   interface ChangePhoneNumberCommand {
     /** 鎵嬫満鍙风爜 */
     phoneNumber: string;
@@ -645,6 +741,8 @@
     checkReceiveStatus?: EnumTaskUserSubmitCheckReceiveStatus;
   }
 
+  type ChooseWxmpPhoneNumberCommand = Record<string, any>;
+
   type ClearTaskCollectCommand = Record<string, any>;
 
   interface CloseEnterpriseWalletCommand {
@@ -653,6 +751,13 @@
     access?: EnumEnterpriseWalletAccess;
   }
 
+  interface CollectionStandardServiceCommand {
+    /** Id */
+    ids?: string[];
+    /** 鏄惁鏀惰棌 */
+    isCollect?: boolean;
+  }
+
   interface CollectTaskCommand {
     /** 浠诲姟Id */
     ids?: string[];
@@ -676,6 +781,10 @@
     ids: string[];
   }
 
+  interface DeleteEnterpriseAddressCommand {
+    ids: string[];
+  }
+
   interface DeleteMenuCommand {
     ids: string[];
   }
@@ -696,6 +805,12 @@
     ids: string[];
   }
 
+  interface DisabledEnterpriseCommand {
+    ids?: string[];
+    /** 鏄惁宸茬鐢� */
+    isDisabled?: boolean;
+  }
+
   interface EditEnterpriseEmployeeCommand {
     /** Id */
     id?: string;
@@ -813,6 +928,18 @@
     enterpriseId?: string;
   }
 
+  enum EnumAdvertisementPage {
+    /**鐢叉柟灏忕▼搴忛椤� */
+    PartAWxmpHome = 10,
+  }
+
+  enum EnumAdvertisementStatus {
+    /**灞曠ず涓� */
+    InProcess = 20,
+    /**宸蹭笅鏋� */
+    Stopped = 100,
+  }
+
   enum EnumBillingMethod {
     /**鎸夋湀 */
     Month = 10,
@@ -958,6 +1085,8 @@
     Identity3 = 10,
     /**浼佷笟鍥涜绱� */
     Identity4 = 20,
+    /**瀹㈡埛鑷璇� */
+    Customer = 30,
   }
 
   enum EnumEnterpriseType {
@@ -965,6 +1094,8 @@
     Supplier = 0,
     /**鐢叉柟浼佷笟 */
     PartyA = 1,
+    /**骞冲彴 */
+    Platform = 999,
   }
 
   enum EnumEnterpriseWalletAccess {
@@ -1186,73 +1317,81 @@
     BestSign = 10,
     /**鏀粯瀹濅俊浠荤 */
     AlipaySign = 20,
+    /**瀹㈡埛鑷璇� */
+    Customer = 30,
   }
 
   enum EnumResourceController {
     /**鏁版嵁瀛楀吀 */
     FlexJobServerDictionary = 0,
+    /**鏍囧噯璁㈠崟鏈嶅姟 */
+    FlexJobServerStandardService = 1,
+    /**鏍囧噯璁㈠崟 */
+    FlexJobServerStandardOrder = 2,
     /**浠诲姟 */
-    FlexJobServerTask = 1,
+    FlexJobServerTask = 3,
     /**浠诲姟浜哄憳 */
-    FlexJobServerTaskUser = 2,
+    FlexJobServerTaskUser = 4,
     /**浠诲姟楠屾敹 */
-    FlexJobServerTaskCheckReceive = 3,
+    FlexJobServerTaskCheckReceive = 5,
     /**鎶曚繚浜у搧 */
-    FlexJobServerInsuranceProduct = 4,
+    FlexJobServerInsuranceProduct = 6,
     /**浼佷笟鎶曚繚浜у搧 */
-    FlexJobServerEnterpriseInsuranceProduct = 5,
+    FlexJobServerEnterpriseInsuranceProduct = 7,
+    /**骞垮憡 */
+    CommonServerAdvertisement = 8,
     /**缂栧彿鍦板潃 */
-    CommonServerCodeUrls = 6,
+    CommonServerCodeUrls = 9,
     /**鏂囦欢 */
-    CommonServerFileUtils = 7,
+    CommonServerFileUtils = 10,
     /**浜嬩欢 */
-    CommonServerEventUtils = 8,
+    CommonServerEventUtils = 11,
     /**鏂囧瓧璇嗗埆 */
-    CommonServerOcrUtils = 9,
+    CommonServerOcrUtils = 12,
     /**鏃ュ織璁板綍 */
-    CommonServerLogRecords = 10,
+    CommonServerLogRecords = 13,
     /**鍚屾鏁版嵁搴� */
-    CommonServerSyncDatabase = 11,
+    CommonServerSyncDatabase = 14,
     /**鐭俊宸ュ叿 */
-    CommonServerSmsUtils = 12,
+    CommonServerSmsUtils = 15,
     /**閰嶇疆 */
-    CommonServerSettings = 13,
+    CommonServerSettings = 16,
     /**宸茶 */
-    CommonServerReadRecord = 14,
+    CommonServerReadRecord = 17,
     /**寰俊灏忕▼搴� */
-    CommonServerWxmp = 15,
+    CommonServerWxmp = 18,
     /**鐢ㄦ埛璁よ瘉 */
-    UserServerAuth = 16,
+    UserServerAuth = 19,
     /**鐢ㄦ埛鑿滃崟 */
-    UserServerMenu = 17,
+    UserServerMenu = 20,
     /**鐢ㄦ埛璧勬簮 */
-    UserServerResource = 18,
+    UserServerResource = 21,
     /**鐢ㄦ埛瑙掕壊 */
-    UserServerRole = 19,
+    UserServerRole = 22,
     /**鐢ㄦ埛淇℃伅 */
-    UserServerUser = 20,
+    UserServerUser = 23,
     /**鐢ㄦ埛閽卞寘 */
-    UserServerUserWallet = 21,
+    UserServerUserWallet = 24,
     /**鐢靛瓙绛� */
-    UserServerElectronSign = 22,
+    UserServerElectronSign = 25,
     /**鐢ㄦ埛绠�鍘� */
-    UserServerUserResume = 23,
+    UserServerUserResume = 26,
     /**浼佷笟淇℃伅 */
-    UserServerEnterprise = 24,
+    UserServerEnterprise = 27,
     /**浼佷笟閽卞寘 */
-    UserServerEnterpriseWallet = 25,
+    UserServerEnterpriseWallet = 28,
     /**浼佷笟鍚堜綔閽卞寘 */
-    UserServerEnterpriseCooperationWallet = 26,
+    UserServerEnterpriseCooperationWallet = 29,
     /**鐏靛伐淇℃伅 */
-    UserServerEnterpriseEmployee = 27,
+    UserServerEnterpriseEmployee = 30,
     /**鐢靛瓙绛� */
-    ElectronSignServerElectronSign = 28,
+    ElectronSignServerElectronSign = 31,
     /**鐭俊 */
-    ToolServerSms = 29,
+    ToolServerSms = 32,
     /**灏忕▼搴� */
-    ToolServerWxmp = 30,
+    ToolServerWxmp = 33,
     /**淇濋櫓 */
-    WaterDropCloudServerInsurance = 31,
+    WaterDropCloudServerInsurance = 34,
   }
 
   enum EnumResourceMethod {
@@ -1312,6 +1451,47 @@
     Fail = 30,
   }
 
+  enum EnumStandardOrderAppointmentStatus {
+    /**寰呯‘璁� */
+    WaitSure = 10,
+    /**寰呮湇鍔� */
+    WaitServe = 20,
+    /**宸插畬鎴� */
+    Completed = 30,
+    /**宸插彇娑� */
+    Cancelled = 40,
+  }
+
+  enum EnumStandardOrderPayStatus {
+    /**寰呮敮浠� */
+    Wait = 10,
+    /**宸叉敮浠� */
+    Completed = 20,
+    /**宸插彇娑� */
+    Cancelled = 30,
+  }
+
+  enum EnumStandardOrderSettlementStatus {
+    /**寰呯粨绠� */
+    Wait = 10,
+    /**宸插畬鎴� */
+    Completed = 20,
+  }
+
+  enum EnumStandardServiceRecommendStatus {
+    /**鏈帹鑽� */
+    No = 10,
+    /**宸叉帹鑽� */
+    Yes = 20,
+  }
+
+  enum EnumStandardServiceReleaseStatus {
+    /**鍙戝竷涓� */
+    InProcess = 20,
+    /**宸插仠姝� */
+    Stopped = 100,
+  }
+
   enum EnumTaskApplyStatus {
     /**寰呭紑濮� */
     Wait = 10,
@@ -1492,6 +1672,8 @@
   }
 
   enum EnumUserWalletTransactionType {
+    /**鏀粯 */
+    Payment = 1,
     /**鏀跺叆 */
     Income = 10,
     /**鎻愮幇 */
@@ -1859,6 +2041,42 @@
     timestamp?: number;
   }
 
+  interface FriendlyResultGetAdvertisementQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetAdvertisementQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetAdvertisementsQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetAdvertisementsQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
   interface FriendlyResultGetAliyunOSSAcsQueryResult {
     /** 璺熻釜Id */
     traceId?: string;
@@ -2165,6 +2383,42 @@
     timestamp?: number;
   }
 
+  interface FriendlyResultGetEnterpriseAddressesQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetEnterpriseAddressesQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetEnterpriseAddressQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetEnterpriseAddressQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
   interface FriendlyResultGetEnterpriseContractTemplateLogsQueryResult {
     /** 璺熻釜Id */
     traceId?: string;
@@ -3011,6 +3265,186 @@
     timestamp?: number;
   }
 
+  interface FriendlyResultGetStandardOrderAppointmentsQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetStandardOrderAppointmentsQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetStandardOrderPaysQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetStandardOrderPaysQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetStandardOrderQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetStandardOrderQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetStandardOrderSettlementsQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetStandardOrderSettlementsQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetStandardOrdersQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetStandardOrdersQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetStandardServiceCommentsQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetStandardServiceCommentsQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetStandardServiceQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetStandardServiceQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetStandardServiceServersQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetStandardServiceServersQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetStandardServicesQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetStandardServicesQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetStandardServiceSupplierEnterprisesQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetStandardServiceSupplierEnterprisesQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
   interface FriendlyResultGetTaskEnterpriseQueryResult {
     /** 璺熻釜Id */
     traceId?: string;
@@ -3336,6 +3770,24 @@
     timestamp?: number;
   }
 
+  interface FriendlyResultHistoryQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: HistoryQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
   interface FriendlyResultImportEnterpriseEmployeesCommandResult {
     /** 璺熻釜Id */
     traceId?: string;
@@ -3562,6 +4014,25 @@
     timestamp?: number;
   }
 
+  interface FriendlyResultListGetShowAdvertisementsQueryResultItem {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    /** 鏁版嵁 */
+    data?: GetShowAdvertisementsQueryResultItem[];
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
   interface FriendlyResultListGetUserInfoRolesQueryResultItem {
     /** 璺熻釜Id */
     traceId?: string;
@@ -3914,6 +4385,24 @@
     timestamp?: number;
   }
 
+  interface FriendlyResultPayStandardOrderCommandResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: PayStandardOrderCommandResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
   interface FriendlyResultPersonalUserElectronSignCommandResult {
     /** 璺熻釜Id */
     traceId?: string;
@@ -4041,6 +4530,68 @@
     timestamp?: number;
   }
 
+  interface GetAdvertisementLogsQuery {
+    /** Id */
+    id?: string;
+    pageModel?: PagedListQueryPageModel;
+  }
+
+  interface GetAdvertisementQueryResult {
+    /** Id */
+    id?: string;
+    page?: EnumAdvertisementPage;
+    /** 骞垮憡鍚嶇О */
+    name?: string;
+    /** 寮�濮嬫椂闂� */
+    beginTime?: string;
+    /** 缁撴潫鏃堕棿 */
+    endTime?: string;
+    /** 骞垮憡鍥剧墖 */
+    file?: string;
+    /** 骞垮憡閾炬帴 */
+    url?: string;
+    status?: EnumAdvertisementStatus;
+    /** 鎺掑簭 */
+    sort?: number;
+  }
+
+  interface GetAdvertisementsQuery {
+    /** 鍏抽敭瀛楋紙骞垮憡鍚嶇О锛� */
+    keywords?: string;
+    /** 骞垮憡寮�濮嬫椂闂� */
+    beginTime?: string;
+    /** 骞垮憡缁撴潫鏃堕棿 */
+    endTime?: string;
+    page?: EnumAdvertisementPage;
+    status?: EnumAdvertisementStatus;
+    pageModel?: PagedListQueryPageModel;
+  }
+
+  interface GetAdvertisementsQueryResult {
+    pageModel?: PagedListQueryResultPageModel;
+    /** 鏁版嵁 */
+    data?: GetAdvertisementsQueryResultItem[];
+  }
+
+  interface GetAdvertisementsQueryResultItem {
+    /** Id */
+    id?: string;
+    page?: EnumAdvertisementPage;
+    /** 骞垮憡鍚嶇О */
+    name?: string;
+    /** 寮�濮嬫椂闂� */
+    beginTime?: string;
+    /** 缁撴潫鏃堕棿 */
+    endTime?: string;
+    /** 骞垮憡鍥剧墖 */
+    file?: string;
+    /** 骞垮憡閾炬帴 */
+    url?: string;
+    status?: EnumAdvertisementStatus;
+    /** 鎺掑簭 */
+    sort?: number;
+  }
+
   type GetAlipayNotifyCommand = Record<string, any>;
 
   type GetAliyunOSSAcsQuery = Record<string, any>;
@@ -4524,6 +5075,10 @@
     checkReceiveMethods?: EnumTaskCheckReceiveMethod[];
     /** 鏄惁鍐呴儴浠诲姟 */
     isInternal?: boolean;
+    /** 鑱旂郴浜� */
+    contacts?: string;
+    /** 鑱旂郴鐢佃瘽 */
+    contactPhoneNumber?: string;
   }
 
   interface GetCodeUrlQueryResult {
@@ -4953,6 +5508,60 @@
     mergeSignCost?: number;
   }
 
+  interface GetEnterpriseAddressesQuery {
+    pageModel?: PagedListQueryPageModel;
+  }
+
+  interface GetEnterpriseAddressesQueryResult {
+    pageModel?: PagedListQueryResultPageModel;
+    /** 鏁版嵁 */
+    data?: GetEnterpriseAddressesQueryResultItem[];
+  }
+
+  interface GetEnterpriseAddressesQueryResultItem {
+    /** Id */
+    id?: string;
+    /** 濮撳悕 */
+    name?: string;
+    /** 鑱旂郴鐢佃瘽 */
+    contactPhoneNumber?: string;
+    /** 鐪佸競鍖�+璇︾粏鍦板潃+闂ㄧ墝鍙� */
+    addressDetail?: string;
+    /** 鏄惁榛樿 */
+    isDefault?: boolean;
+  }
+
+  interface GetEnterpriseAddressQueryResult {
+    /** Id */
+    id?: string;
+    /** 濮撳悕 */
+    name?: string;
+    /** 鑱旂郴鐢佃瘽 */
+    contactPhoneNumber?: string;
+    /** 鐪佷唤缂栧彿 */
+    provinceCode?: string;
+    /** 鐪佷唤 */
+    provinceContent?: string;
+    /** 鍩庡競缂栧彿 */
+    cityCode?: string;
+    /** 鍩庡競 */
+    cityContent?: string;
+    /** 鍖虹紪鍙� */
+    areaCode?: string;
+    /** 鍖� */
+    areaContent?: string;
+    /** 璇︾粏鍦板潃 */
+    addressName?: string;
+    /** 闂ㄧ墝鍙� */
+    addressDetail?: string;
+    /** 缁忓害 */
+    longitude?: number;
+    /** 绾害 */
+    latitude?: number;
+    /** 鏄惁榛樿 */
+    isDefault?: boolean;
+  }
+
   interface GetEnterpriseContractTemplateLogsQuery {
     /** 妯℃澘Id */
     id?: string;
@@ -5245,13 +5854,22 @@
   interface GetEnterpriseLoginInfoQueryResult {
     /** Id */
     id?: string;
+    type?: EnumUserType;
     /** 澶村儚 */
     avatar?: string;
     /** 濮撳悕 */
     name?: string;
+    /** 鎵嬫満鍙� */
+    contactPhoneNumber?: string;
     gender?: EnumUserGender;
+    /** 钀ヤ笟鎵х収鐓х墖 */
+    licenseImage?: string;
+    /** 浼佷笟Id */
+    enterpriseId?: string;
     /** 浼佷笟鍏ㄧО */
     enterpriseName?: string;
+    /** 缁熶竴绀句細淇$敤浠g爜 */
+    societyCreditCode?: string;
     /** 浼佷笟鏄惁瀹炲悕 */
     enterpriseIsReal?: boolean;
     /** 瑙掕壊 */
@@ -5269,6 +5887,7 @@
   interface GetEnterpriseQueryResult {
     /** Id */
     id?: string;
+    type?: EnumEnterpriseType;
     /** 浼佷笟鍏ㄧО */
     enterpriseName?: string;
     /** 缁熶竴绀句細淇$敤浠g爜 */
@@ -5301,6 +5920,15 @@
     userName?: string;
     /** 鍦ㄦ嫑宀椾綅鏁伴噺 */
     taskCount?: number;
+    cooperationStatus?: EnumEnterpriseCooperationStatus;
+    signStatus?: EnumEnterpriseCooperationSignStatus;
+    /** 鍚堜綔鍗忚 */
+    cooperationAgreementUrl?: string;
+    serviceFeeCollectType?: EnumEnterpriseCooperationServiceFeeCollectType;
+    /** 鏈嶅姟璐� */
+    serviceFeeRate?: number;
+    /** 鍙戠エ绋庣偣 */
+    invoiceTaxPointRate?: number;
   }
 
   type GetEnterpriseReceiveAccountQuery = Record<string, any>;
@@ -5329,6 +5957,11 @@
     keywords?: string;
     /** 鏄惁宸查厤缃� */
     isConfigured?: boolean;
+    type?: EnumEnterpriseType;
+    /** 鍒涘缓鏃堕棿-璧峰 */
+    createdTimeBegin?: string;
+    /** 鍒涘缓鏃堕棿-鎴 */
+    createdTimeEnd?: string;
     pageModel?: PagedListQueryPageModel;
   }
 
@@ -5344,10 +5977,18 @@
     societyCreditCode?: string;
     /** 鏄惁瀹炲悕 */
     isReal?: boolean;
+    /** 鏄惁绂佺敤 */
+    isDisabled?: boolean;
     /** 鑱旂郴浜� */
     contacts?: string;
     /** 鑱旂郴鐢佃瘽 */
     contactPhoneNumber?: string;
+    /** 鐢ㄦ埛Id */
+    userId?: string;
+    /** 鐢ㄦ埛鍚� */
+    userName?: string;
+    /** 鎵嬫満鍙� */
+    userPhoneNumber?: string;
     /** 鎵�鍦ㄧ渷浠� */
     provinceContent?: string;
     /** 鎵�鍦ㄥ煄甯� */
@@ -5356,6 +5997,13 @@
     industryTypeContent?: string;
     /** 鏄惁宸查厤缃� */
     isConfigured?: boolean;
+    /** 鍏宠仈鏈嶅姟 */
+    standardServiceCount?: number;
+    serviceFeeCollectType?: EnumEnterpriseCooperationServiceFeeCollectType;
+    /** 鏈嶅姟璐� */
+    serviceFeeRate?: number;
+    /** 鍒涘缓鏃堕棿 */
+    createdTime?: string;
   }
 
   interface GetEnterpriseWalletAccessSelectQueryOption {
@@ -6541,6 +7189,8 @@
     code?: string;
     /** 浠诲姟鍚嶇О */
     taskName?: string;
+    /** 浠诲姟鍗曞彿 */
+    taskCode?: string;
     /** 浼佷笟鍚嶇О */
     enterpriseName?: string;
     /** 缁撶畻鏃ユ湡 */
@@ -7114,6 +7764,17 @@
     ereceiptDownloadOssUrl?: string;
   }
 
+  interface GetShowAdvertisementsQueryResultItem {
+    /** Id */
+    id?: string;
+    /** 骞垮憡鍚嶇О */
+    name?: string;
+    /** 骞垮憡鍥剧墖 */
+    file?: string;
+    /** 骞垮憡閾炬帴 */
+    url?: string;
+  }
+
   interface GetSmsLogsQuery {
     /** 鍒涘缓鏃堕棿-璧峰 */
     createdTimeBegin?: string;
@@ -7199,6 +7860,458 @@
     signName?: string;
   }
 
+  interface GetStandardOrderAppointmentsQuery {
+    appointmentStatus?: EnumStandardOrderAppointmentStatus;
+    pageModel?: PagedListQueryPageModel;
+  }
+
+  interface GetStandardOrderAppointmentsQueryResult {
+    pageModel?: PagedListQueryResultPageModel;
+    /** 鏁版嵁 */
+    data?: GetStandardOrderAppointmentsQueryResultItem[];
+  }
+
+  interface GetStandardOrderAppointmentsQueryResultItem {
+    /** 璁㈠崟Id */
+    id?: string;
+    /** 鏈嶅姟鍚嶇О */
+    serviceName?: string;
+    /** 瀹炰粯閲戦 */
+    payAmount?: number;
+    /** 鏈嶅姟璧峰鏃堕棿 */
+    beginTime?: string;
+    /** 鏈嶅姟鎴鏃堕棿 */
+    endTime?: string;
+    /** 鏈嶅姟鍦板潃锛堢渷甯傚尯+璇︾粏鍦板潃+闂ㄧ墝鍙凤級 */
+    addressDetail?: string;
+    /** 鏈嶅姟鏈烘瀯 */
+    supplierEnterpriseName?: string;
+    /** 鏈嶅姟浜哄憳 */
+    serverNames?: string[];
+    appointmentStatus?: EnumStandardOrderAppointmentStatus;
+  }
+
+  interface GetStandardOrderPaysQuery {
+    payStatus?: EnumStandardOrderPayStatus;
+    pageModel?: PagedListQueryPageModel;
+  }
+
+  interface GetStandardOrderPaysQueryResult {
+    pageModel?: PagedListQueryResultPageModel;
+    /** 鏁版嵁 */
+    data?: GetStandardOrderPaysQueryResultItem[];
+  }
+
+  interface GetStandardOrderPaysQueryResultItem {
+    /** 璁㈠崟Id */
+    id?: string;
+    /** 鏈嶅姟鍚嶇О */
+    serviceName?: string;
+    /** 瀹炰粯閲戦 */
+    payAmount?: number;
+    /** 鏈嶅姟璧峰鏃堕棿 */
+    beginTime?: string;
+    /** 鏈嶅姟鎴鏃堕棿 */
+    endTime?: string;
+    /** 鏈嶅姟鍦板潃锛堢渷甯傚尯+璇︾粏鍦板潃+闂ㄧ墝鍙凤級 */
+    addressDetail?: string;
+    /** 鏈嶅姟鏈烘瀯 */
+    supplierEnterpriseName?: string;
+    /** 鏈嶅姟浜哄憳 */
+    serverNames?: string[];
+    payStatus?: EnumStandardOrderPayStatus;
+  }
+
+  interface GetStandardOrderQueryResult {
+    /** 璁㈠崟Id */
+    id?: string;
+    /** 鏈嶅姟Id */
+    serviceId?: string;
+    /** 鏈嶅姟鍚� */
+    serviceName?: string;
+    /** 鐢叉柟浼佷笟Id */
+    partyAEnterpriseId?: string;
+    /** 鐢叉柟浼佷笟 */
+    partyAEnterpriseName?: string;
+    /** 瑙勬牸Id */
+    specId?: string;
+    /** 瑙勬牸鍚嶇О */
+    specName?: string;
+    /** 瑙勬牸浠锋牸 */
+    specPrice?: number;
+    /** 瑙勬牸鏁伴噺 */
+    specNumber?: number;
+    /** 鍦板潃Id */
+    addressId?: string;
+    /** 濮撳悕 */
+    name?: string;
+    /** 鑱旂郴鐢佃瘽 */
+    contactPhoneNumber?: string;
+    /** 鐪佷唤缂栧彿 */
+    provinceCode?: string;
+    /** 鐪佷唤 */
+    provinceContent?: string;
+    /** 鍩庡競缂栧彿 */
+    cityCode?: string;
+    /** 鍩庡競 */
+    cityContent?: string;
+    /** 鍖虹紪鍙� */
+    areaCode?: string;
+    /** 鍖� */
+    areaContent?: string;
+    /** 璇︾粏鍦板潃 */
+    addressName?: string;
+    /** 闂ㄧ墝鍙� */
+    addressDetail?: string;
+    /** 缁忓害 */
+    longitude?: number;
+    /** 绾害 */
+    latitude?: number;
+    /** 鏈嶅姟璧峰鏃堕棿 */
+    beginTime?: string;
+    /** 鏈嶅姟鎴鏃堕棿 */
+    endTime?: string;
+    /** 渚涘簲鍟咺d */
+    supplierEnterpriseId?: string;
+    /** 渚涘簲鍟� */
+    supplierEnterpriseName?: string;
+    /** 鏈嶅姟浜哄憳Id */
+    serverId?: string;
+    /** 鏈嶅姟浜哄憳濮撳悕 */
+    serverName?: string;
+    /** 鏈嶅姟浜哄憳鑱旂郴鐢佃瘽 */
+    serverContactPhoneNumber?: string;
+    /** 澶囨敞 */
+    remark?: string;
+    payAccess?: EnumUserBankCardAccess;
+    appointmentStatus?: EnumStandardOrderAppointmentStatus;
+    /** 棰勭害瀹屾垚/鍙栨秷鏃堕棿 */
+    appointmentCompletedTime?: string;
+    /** 鍙栨秷鍘熷洜 */
+    appointmentCancelReason?: string;
+    payStatus?: EnumStandardOrderPayStatus;
+    /** 瀹炰粯閲戦 */
+    payAmount?: number;
+    /** 鏀粯鏃堕棿 */
+    payTime?: string;
+    settlementStatus?: EnumStandardOrderSettlementStatus;
+    serviceFeeCollectType?: EnumEnterpriseCooperationServiceFeeCollectType;
+    /** 鏈嶅姟璐� */
+    serviceFee?: number;
+    /** 瀹炴敹閲戦 */
+    receiveAmount?: number;
+    /** 缁撶畻閲戦 */
+    settlementAmount?: number;
+  }
+
+  interface GetStandardOrderSettlementsQuery {
+    /** 鍏抽敭瀛楋紙璁㈠崟鍙�/鏈嶅姟鍚�/渚涘簲鍟嗭級 */
+    keywords?: string;
+    settlementStatus?: EnumStandardOrderSettlementStatus;
+    pageModel?: PagedListQueryPageModel;
+  }
+
+  interface GetStandardOrderSettlementsQueryResult {
+    pageModel?: PagedListQueryResultPageModel;
+    /** 鏁版嵁 */
+    data?: GetStandardOrderSettlementsQueryResultItem[];
+  }
+
+  interface GetStandardOrderSettlementsQueryResultItem {
+    /** 璁㈠崟Id */
+    id?: string;
+    /** 璁㈠崟鍙� */
+    code?: string;
+    /** 鏈嶅姟鍚嶇О */
+    serviceName?: string;
+    /** 鏈嶅姟鍗曞彿 */
+    serviceCode?: string;
+    /** 鐢叉柟浼佷笟Id */
+    partyAEnterpriseId?: string;
+    /** 鐢叉柟浼佷笟 */
+    partyAEnterpriseName?: string;
+    /** 鏈嶅姟鍦板潃锛堢渷甯傚尯+璇︾粏鍦板潃+闂ㄧ墝鍙凤級 */
+    addressDetail?: string;
+    /** 鏈嶅姟鏈烘瀯 */
+    supplierEnterpriseName?: string;
+    /** 鏈嶅姟浜哄憳 */
+    serverNames?: string[];
+    /** 瀹炰粯閲戦 */
+    payAmount?: number;
+    /** 瀹炴敹閲戦 */
+    receiveAmount?: number;
+    /** 鏈嶅姟璐� */
+    serviceFee?: number;
+    /** 缁撶畻閲戦 */
+    settlementAmount?: number;
+    /** 缁撶畻鍗曞彿 */
+    settlementCode?: string;
+    settlementStatus?: EnumStandardOrderSettlementStatus;
+    /** 缁撶畻鏃堕棿 */
+    settlementTime?: string;
+    /** 鏈嶅姟璧峰鏃堕棿 */
+    beginTime?: string;
+    /** 鏈嶅姟鎴鏃堕棿 */
+    endTime?: string;
+  }
+
+  interface GetStandardOrdersQuery {
+    /** 鍏抽敭瀛楋紙璁㈠崟鍙�/鏈嶅姟鍚嶏級 */
+    keywords?: string;
+    /** 涓嬪崟鏃堕棿-璧峰 */
+    createdTimeBegin?: string;
+    /** 涓嬪崟鏃堕棿-鎴 */
+    createdTimeEnd?: string;
+    /** 鏀粯鏃堕棿-璧峰 */
+    payTimeBegin?: string;
+    /** 鏀粯鏃堕棿-鎴 */
+    payTimeEnd?: string;
+    appointmentStatus?: EnumStandardOrderAppointmentStatus;
+    payStatus?: EnumStandardOrderPayStatus;
+    pageModel?: PagedListQueryPageModel;
+  }
+
+  interface GetStandardOrdersQueryResult {
+    pageModel?: PagedListQueryResultPageModel;
+    /** 鏁版嵁 */
+    data?: GetStandardOrdersQueryResultItem[];
+  }
+
+  interface GetStandardOrdersQueryResultItem {
+    /** Id */
+    id?: string;
+    /** 璁㈠崟鍙� */
+    code?: string;
+    /** 鏈嶅姟鍚� */
+    serviceName?: string;
+    /** 鏈嶅姟鍗曞彿 */
+    serviceCode?: string;
+    /** 涓嬪崟鏃堕棿 */
+    createdTime?: string;
+    /** 鏀粯鏃堕棿 */
+    payTime?: string;
+    appointmentStatus?: EnumStandardOrderAppointmentStatus;
+    payStatus?: EnumStandardOrderPayStatus;
+    settlementStatus?: EnumStandardOrderSettlementStatus;
+    /** 鐢叉柟浼佷笟Id */
+    partyAEnterpriseId?: string;
+    /** 鐢叉柟浼佷笟 */
+    partyAEnterpriseName?: string;
+    /** 鑱旂郴鐢佃瘽 */
+    contactPhoneNumber?: string;
+    /** 瀹炰粯閲戦 */
+    payAmount?: number;
+    /** 瀹炴敹閲戦 */
+    receiveAmount?: number;
+    /** 鏈嶅姟璐� */
+    serviceFee?: number;
+    /** 缁撶畻閲戦 */
+    settlementAmount?: number;
+  }
+
+  interface GetStandardServiceCommentsQuery {
+    pageModel?: PagedListQueryPageModel;
+  }
+
+  interface GetStandardServiceCommentsQueryResult {
+    pageModel?: PagedListQueryResultPageModel;
+    /** 鏁版嵁 */
+    data?: GetStandardServiceCommentsQueryResultItem[];
+  }
+
+  interface GetStandardServiceCommentsQueryResultItem {
+    /** Id */
+    id?: string;
+    /** 鐢ㄦ埛鍚� */
+    userName?: string;
+    /** 璇勫垎 */
+    star?: number;
+    /** 鍐呭 */
+    content?: string;
+    /** 鍒涘缓鏃堕棿 */
+    createdTime?: string;
+  }
+
+  interface GetStandardServiceQueryResult {
+    /** Id */
+    id?: string;
+    /** 琛屼笟绫诲埆缂栧彿 */
+    industryCategoryCode?: string;
+    /** 琛屼笟绫诲埆 */
+    industryCategoryContent?: string;
+    /** 宀椾綅缂栧彿 */
+    jobCode?: string;
+    /** 宀椾綅 */
+    jobContent?: string;
+    /** 鏈嶅姟鍚� */
+    name?: string;
+    /** 鏈嶅姟鍗曞彿 */
+    code?: string;
+    /** 瑙勬牸 */
+    specs?: GetStandardServiceQueryResultSpec[];
+    /** 鏈�浣庤鏍间环鏍� */
+    minSpecPrice?: number;
+    /** 鍥剧墖 */
+    files?: string[];
+    /** 鏈嶅姟鎻忚堪 */
+    description?: string;
+    /** 渚涘簲鍟� */
+    suppliers?: GetStandardServiceQueryResultSupplier[];
+    releaseStatus?: EnumStandardServiceReleaseStatus;
+    recommendStatus?: EnumStandardServiceRecommendStatus;
+    /** 鏄惁鏀惰棌 */
+    isCollection?: boolean;
+  }
+
+  interface GetStandardServiceQueryResultSpec {
+    /** Id */
+    id?: string;
+    /** 瑙勬牸鍚嶇О */
+    name?: string;
+    /** 浠锋牸 */
+    price?: number;
+  }
+
+  interface GetStandardServiceQueryResultSupplier {
+    /** Id */
+    id?: string;
+    /** 浼佷笟鍏ㄧО */
+    enterpriseName?: string;
+    /** 娉曚汉濮撳悕 */
+    legalPerson?: string;
+    /** 缁熶竴绀句細淇$敤浠g爜 */
+    societyCreditCode?: string;
+    /** 鏄惁瀹炲悕 */
+    isReal?: boolean;
+    /** 鑱旂郴浜� */
+    contacts?: string;
+    /** 鑱旂郴鐢佃瘽 */
+    contactPhoneNumber?: string;
+    /** 鎵�鍦ㄧ渷浠� */
+    provinceContent?: string;
+    /** 鎵�鍦ㄥ煄甯� */
+    cityContent?: string;
+  }
+
+  interface GetStandardServiceServersQuery {
+    /** 渚涘簲鍟咺d */
+    supplierEnterpriseId?: string;
+    /** 鏈嶅姟璧峰鏃堕棿 */
+    beginTime?: string;
+    /** 鏈嶅姟鎴鏃堕棿 */
+    endTime?: string;
+    pageModel?: PagedListQueryPageModel;
+  }
+
+  interface GetStandardServiceServersQueryResult {
+    pageModel?: PagedListQueryResultPageModel;
+    /** 鏁版嵁 */
+    data?: GetStandardServiceServersQueryResultItem[];
+  }
+
+  interface GetStandardServiceServersQueryResultItem {
+    /** Id */
+    id?: string;
+    /** 澶村儚 */
+    avatar?: string;
+    /** 濮撳悕 */
+    name?: string;
+    gender?: EnumUserGender;
+    /** 鏄惁瀹炲悕 */
+    isReal?: boolean;
+    realMethod?: EnumUserRealMethod;
+    /** 骞撮緞 */
+    age?: number;
+    /** 韬唤缂栧彿 */
+    personalIdentityCode?: string;
+    /** 韬唤 */
+    personalIdentityContent?: string;
+    /** 瀛﹀巻缂栧彿 */
+    educationalBackgroundCode?: string;
+    /** 瀛﹀巻 */
+    educationalBackgroundContent?: string;
+    /** 涓婂矖娆℃暟 */
+    taskCount?: number;
+    /** 宸ヤ綔璧勫巻 */
+    workSeniority?: string;
+    /** 宸ヤ綔缁忛獙 */
+    workExperience?: string;
+  }
+
+  interface GetStandardServicesQuery {
+    /** 鍏抽敭瀛楋紙鏈嶅姟鍚�/Id锛� */
+    keywords?: string;
+    /** 宀椾綅缂栧彿 */
+    jobCode?: string;
+    /** 鍒涘缓鏃堕棿-璧峰 */
+    createdTimeBegin?: string;
+    /** 鍒涘缓鏃堕棿-鎴 */
+    createdTimeEnd?: string;
+    releaseStatus?: EnumStandardServiceReleaseStatus;
+    recommendStatus?: EnumStandardServiceRecommendStatus;
+    /** 鏄惁鏀惰棌 */
+    isCollected?: boolean;
+    pageModel?: PagedListQueryPageModel;
+  }
+
+  interface GetStandardServicesQueryResult {
+    pageModel?: PagedListQueryResultPageModel;
+    /** 鏁版嵁 */
+    data?: GetStandardServicesQueryResultItem[];
+  }
+
+  interface GetStandardServicesQueryResultItem {
+    /** Id */
+    id?: string;
+    /** 棣栦釜鍥剧墖 */
+    file?: string;
+    /** 琛屼笟绫诲埆 */
+    industryCategoryContent?: string;
+    /** 宀椾綅 */
+    jobContent?: string;
+    /** 鏈嶅姟鍚� */
+    name?: string;
+    /** 鏈�浣庤鏍间环鏍� */
+    minSpecPrice?: number;
+    /** 鏈嶅姟鍗曞彿 */
+    code?: string;
+    releaseStatus?: EnumStandardServiceReleaseStatus;
+    recommendStatus?: EnumStandardServiceRecommendStatus;
+    /** 鏄惁鏀惰棌 */
+    isCollection?: boolean;
+    /** 鍒涘缓鏃堕棿 */
+    createdTime?: string;
+    /** 渚涘簲鍟嗘暟閲� */
+    supplierCount?: number;
+  }
+
+  interface GetStandardServiceSupplierEnterprisesQuery {
+    /** 鏈嶅姟Id */
+    serviceId?: string;
+    pageModel?: PagedListQueryPageModel;
+  }
+
+  interface GetStandardServiceSupplierEnterprisesQueryResult {
+    pageModel?: PagedListQueryResultPageModel;
+    /** 鏁版嵁 */
+    data?: GetStandardServiceSupplierEnterprisesQueryResultItem[];
+  }
+
+  interface GetStandardServiceSupplierEnterprisesQueryResultItem {
+    /** Id */
+    id?: string;
+    /** 澶村儚 */
+    avatar?: string;
+    /** 浼佷笟鍏ㄧО */
+    enterpriseName?: string;
+    /** 鏈嶅姟浜哄憳 */
+    serverCount?: number;
+    /** 鏈嶅姟浜烘 */
+    serviceCount?: number;
+    /** 缁忚惀鑼冨洿 */
+    mainBusiness?: string;
+  }
+
   type GetSupplierEnterpriseSelectQuery = Record<string, any>;
 
   interface GetSupplierEnterpriseSelectQueryOption {
@@ -7285,6 +8398,8 @@
     enterpriseId?: string;
     /** 浼佷笟鍏ㄧО */
     enterpriseName?: string;
+    /** 鑱旂郴浜� */
+    contacts?: string;
     /** 鑱旂郴鐢佃瘽 */
     contactPhoneNumber?: string;
     /** 鏄惁璁よ瘉 */
@@ -8014,6 +9129,26 @@
     hiddenAlipay?: boolean;
   }
 
+  interface HistoryQueryResult {
+    pageModel?: PagedListQueryResultPageModel;
+    /** 鏁版嵁 */
+    data?: HistoryQueryResultItem[];
+  }
+
+  interface HistoryQueryResultItem {
+    /** Id */
+    id?: string;
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鎿嶄綔浜� */
+    createdUser?: string;
+    /** 鎿嶄綔鏃堕棿 */
+    createdTime?: string;
+    operate?: EnumDbAuditOperate;
+    /** 鎿嶄綔鍐呭 */
+    content?: string[];
+  }
+
   interface ImportEnterpriseEmployeesCommand {
     /** Excel鍦板潃 */
     excelUrl?: string;
@@ -8296,6 +9431,32 @@
     enterpriseType?: EnumEnterpriseType;
   }
 
+  interface PayStandardOrderCommand {
+    /** 璁㈠崟Id */
+    id?: string;
+  }
+
+  interface PayStandardOrderCommandResult {
+    /** 鏃堕棿鎴�
+浠� 1970 骞� 1 鏈� 1 鏃� 00:00:00 鑷充粖鐨勭鏁帮紝鍗冲綋鍓嶇殑鏃堕棿 */
+    timestamp?: string;
+    /** 闅忔満瀛楃涓�
+闀垮害涓�32涓瓧绗︿互涓� */
+    nonceStr?: string;
+    /** 缁熶竴涓嬪崟鎺ュ彛杩斿洖鐨� prepay_id 鍙傛暟鍊�
+鎻愪氦鏍煎紡濡傦細prepay_id=*** */
+    package?: string;
+    /** 绛惧悕绠楁硶锛屽簲涓庡悗鍙颁笅鍗曟椂鐨勫�间竴鑷�
+MD5	浠呭湪 v2 鐗堟湰鎺ュ彛閫傜敤
+HMAC-SHA256	浠呭湪 v2 鐗堟湰鎺ュ彛閫傜敤
+RSA	浠呭湪 v3 鐗堟湰鎺ュ彛閫傜敤 */
+    signType?: string;
+    /** 绛惧悕锛屽叿浣撹寰俊鏀粯鏂囨。 */
+    paySign?: string;
+    /** 鏀粯缁撴潫鏃堕棿 */
+    timeExpire?: string;
+  }
+
   interface PersonalUserElectronSignCommand {
     /** 鐏靛伐Id锛堜簩閫変竴锛� */
     id?: string;
@@ -8428,6 +9589,24 @@
     taskInfoId?: string;
   }
 
+  interface SaveAdvertisementCommand {
+    page?: EnumAdvertisementPage;
+    /** 骞垮憡鍚嶇О */
+    name?: string;
+    /** 寮�濮嬫椂闂� */
+    beginTime?: string;
+    /** 缁撴潫鏃堕棿 */
+    endTime?: string;
+    /** 骞垮憡鍥剧墖 */
+    file?: string;
+    /** 骞垮憡閾炬帴 */
+    url?: string;
+    /** 鎺掑簭 */
+    sort?: number;
+    /** Id */
+    id?: string;
+  }
+
   interface SaveCodeUrlCommand {
     scene?: EnumCodeUrlScene;
     /** 鍦板潃 */
@@ -8543,6 +9722,31 @@
     id?: string;
   }
 
+  interface SaveEnterpriseAddressCommand {
+    /** 濮撳悕 */
+    name?: string;
+    /** 鑱旂郴鐢佃瘽 */
+    contactPhoneNumber?: string;
+    /** 鐪佷唤缂栧彿 */
+    provinceCode?: string;
+    /** 鍩庡競缂栧彿 */
+    cityCode?: string;
+    /** 鍖虹紪鍙� */
+    areaCode?: string;
+    /** 璇︾粏鍦板潃 */
+    addressName?: string;
+    /** 闂ㄧ墝鍙� */
+    addressDetail?: string;
+    /** 缁忓害 */
+    longitude?: number;
+    /** 绾害 */
+    latitude?: number;
+    /** 鏄惁榛樿 */
+    isDefault?: boolean;
+    /** Id */
+    id?: string;
+  }
+
   interface SaveEnterpriseCommand {
     /** 浼佷笟鍏ㄧО */
     enterpriseName: string;
@@ -8570,6 +9774,15 @@
     userName?: string;
     /** 瀵嗙爜 */
     password?: string;
+    cooperationStatus?: EnumEnterpriseCooperationStatus;
+    signStatus?: EnumEnterpriseCooperationSignStatus;
+    /** 鍚堜綔鍗忚 */
+    cooperationAgreementUrl?: string;
+    serviceFeeCollectType?: EnumEnterpriseCooperationServiceFeeCollectType;
+    /** 鏈嶅姟璐� */
+    serviceFeeRate?: number;
+    /** 鍙戠エ绋庣偣 */
+    invoiceTaxPointRate?: number;
     /** Id */
     id?: string;
   }
@@ -8865,6 +10078,34 @@
     signName?: string;
   }
 
+  interface SaveStandardServiceCommand {
+    /** 琛屼笟绫诲埆缂栧彿 */
+    industryCategoryCode?: string;
+    /** 宀椾綅缂栧彿 */
+    jobCode?: string;
+    /** 鏈嶅姟鍚� */
+    name?: string;
+    /** 瑙勬牸 */
+    specs?: SaveStandardServiceCommandSpec[];
+    /** 鍥剧墖 */
+    files?: string[];
+    /** 鏈嶅姟鎻忚堪 */
+    description?: string;
+    /** 渚涘簲鍟� */
+    supplierIds?: string[];
+    /** Id */
+    id?: string;
+  }
+
+  interface SaveStandardServiceCommandSpec {
+    /** Id */
+    id?: string;
+    /** 瑙勬牸鍚嶇О */
+    name?: string;
+    /** 浠锋牸 */
+    price?: number;
+  }
+
   interface SaveTaskInfoCommand {
     /** 渚涘簲鍟咺d */
     supplierEnterpriseId?: string;
@@ -9122,6 +10363,12 @@
     relationId?: string;
   }
 
+  interface SetAdvertisementStatusCommand {
+    /** Id */
+    ids?: string[];
+    status?: EnumAdvertisementStatus;
+  }
+
   interface SetDictionaryDataIsDisabledCommand {
     ids?: string[];
     /** 鏄惁宸茬鐢� */
@@ -9151,6 +10398,21 @@
     insuranceSupplierAccount?: string;
   }
 
+  interface SetEnterpriseLoginInfoCommand {
+    /** 澶村儚 */
+    avatar?: string;
+    /** 濮撳悕 */
+    name?: string;
+    /** 钀ヤ笟鎵х収鐓х墖 */
+    licenseImage?: string;
+    /** 浼佷笟鍏ㄧО */
+    enterpriseName?: string;
+    /** 缁熶竴绀句細淇$敤浠g爜 */
+    societyCreditCode?: string;
+    /** 鎵嬫満鍙� */
+    contactPhoneNumber?: string;
+  }
+
   interface SetEnterpriseSmsSettingCommand {
     /** Id */
     id?: string;
@@ -9194,6 +10456,18 @@
     userInfoIds?: string[];
   }
 
+  interface SetStandardServiceRecommendStatusCommand {
+    /** Id */
+    ids?: string[];
+    recommendStatus?: EnumStandardServiceRecommendStatus;
+  }
+
+  interface SetStandardServiceReleaseStatusCommand {
+    /** Id */
+    ids?: string[];
+    releaseStatus?: EnumStandardServiceReleaseStatus;
+  }
+
   interface SetTaskInfoRecommendStatusCommand {
     /** Id */
     ids?: string[];
@@ -9331,6 +10605,20 @@
     remark?: string;
   }
 
+  interface SureStandardOrderAppointmentCommand {
+    /** 璁㈠崟Id */
+    id?: string;
+  }
+
+  interface SureStandardOrderCommand {
+    /** 璁㈠崟Id */
+    id?: string;
+    /** 璇勫垎 */
+    commentStar?: number;
+    /** 璇勪环 */
+    commentContent?: string;
+  }
+
   interface SureTaskSettlementCommand {
     /** 浠诲姟Id */
     taskInfoId?: string;
@@ -10142,6 +11430,36 @@
     reject_reason: string;
   }
 
+  interface WeChatPayTransactionsJsApiNotifyCommand {
+    /** 閫氱煡ID锛屽洖璋冮�氱煡鐨勫敮涓�缂栧彿 */
+    id?: string;
+    /** 閫氱煡鍒涘缓鏃堕棿
+1銆佸畾涔夛細鏈鍥炶皟閫氱煡鍒涘缓鐨勬椂闂�
+2銆佹牸寮忥細閬靛惊rfc3339鏍囧噯鏍煎紡锛歽yyy-MM-DDTHH:mm:ss+TIMEZONE锛堢ず渚嬶細2015-05-20T13:29:35+08:00 琛ㄧず鍖椾含鏃堕棿2015骞�5鏈�20鏃�13鐐�29鍒�35绉掞級 */
+    create_time?: string;
+    /** 閫氱煡鐨勭被鍨嬶紝寰俊鏀粯鍥炶皟閫氱煡鐨勭被鍨�
+鏀粯鎴愬姛閫氱煡鐨勭被鍨嬩负TRANSACTION.SUCCESS */
+    event_type?: string;
+    /** 閫氱煡鏁版嵁绫诲瀷锛岄�氱煡鐨勮祫婧愭暟鎹被鍨嬶紝鍥哄畾涓篹ncrypt-resource */
+    resource_type?: string;
+    resource?: WeChatPayTransactionsJsApiNotifyCommandResource;
+    /** 鍥炶皟鎽樿锛屽井淇℃敮浠樺鍥炶皟鍐呭鐨勬憳瑕佸娉� */
+    summary?: string;
+  }
+
+  interface WeChatPayTransactionsJsApiNotifyCommandResource {
+    /** 鍔犲瘑绠楁硶绫诲瀷锛屽洖璋冩暟鎹瘑鏂囩殑鍔犲瘑绠楁硶绫诲瀷锛岀洰鍓嶄负AEAD_AES_256_GCM锛屽紑鍙戣�呴渶瑕佷娇鐢ㄥ悓鏍风被鍨嬬殑鏁版嵁杩涜瑙e瘑 */
+    algorithm?: string;
+    /** 鏁版嵁瀵嗘枃锛孊ase64缂栫爜鍚庣殑鍥炶皟鏁版嵁瀵嗘枃锛屾湇鍔″晢闇�Base64瑙g爜骞朵娇鐢ˋPIV3瀵嗛挜瑙e瘑锛屽叿浣撳弬鑰冨浣曡В瀵嗚瘉涔﹀拰鍥炶皟鎶ユ枃 */
+    ciphertext?: string;
+    /** 闄勫姞鏁版嵁锛屽弬涓庤В瀵嗙殑闄勫姞鏁版嵁锛岃瀛楁鍙兘涓虹┖ */
+    associated_data?: string;
+    /** 鍘熷鍥炶皟绫诲瀷锛屽姞瀵嗗墠鐨勫璞$被鍨嬶紝涓簍ransaction */
+    original_type?: string;
+    /** 闅忔満涓诧紝鍙備笌瑙e瘑鐨勯殢鏈轰覆 */
+    nonce?: string;
+  }
+
   interface WxmpLoginCommand {
     /** 鐢ㄦ埛鐧诲綍鍑瘉 */
     code: string;
diff --git a/src/services/api/userWallet.ts b/src/services/api/userWallet.ts
index 6443e40..d945ac1 100644
--- a/src/services/api/userWallet.ts
+++ b/src/services/api/userWallet.ts
@@ -16,3 +16,18 @@
     ...(options || {}),
   });
 }
+
+/** 寰俊JS鏀粯閫氱煡 POST /api/user/userWallet/weChatPayTransactionsJsApiNotify */
+export async function weChatPayTransactionsJsApiNotify(
+  body: API.WeChatPayTransactionsJsApiNotifyCommand,
+  options?: API.RequestConfig
+) {
+  return request<boolean>('/api/user/userWallet/weChatPayTransactionsJsApiNotify', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
diff --git a/src/utils/common/common.ts b/src/utils/common/common.ts
index f338db2..9b58507 100644
--- a/src/utils/common/common.ts
+++ b/src/utils/common/common.ts
@@ -131,6 +131,37 @@
   return null;
 }
 
+/**
+ * 鍓旈櫎瀵硅薄涓�间负 ''銆乽ndefined銆乶ull 鐨勯敭锛屾敮鎸佸祵濂楀璞�
+ * @param {Object} obj - 闇�瑕佸鐞嗙殑瀵硅薄
+ * @returns {Object} 澶勭悊鍚庣殑鏂板璞�
+ */
+export function removeEmptyKeys<T extends object>(obj: T) {
+  // 濡傛灉涓嶆槸瀵硅薄鎴栦负null锛岀洿鎺ヨ繑鍥炲師鍊�
+  if (obj === null || typeof obj !== 'object') {
+    return obj;
+  }
+
+  // 澶勭悊鏁扮粍锛堥�掑綊澶勭悊姣忎釜鍏冪礌锛�
+  if (Array.isArray(obj)) {
+    return obj.map((item) => removeEmptyKeys(item));
+  }
+
+  // 澶勭悊瀵硅薄
+  const result = {} as T;
+  for (const key in obj) {
+    if (obj.hasOwnProperty(key)) {
+      //@ts-ignore
+      const value = removeEmptyKeys(obj[key]); // 閫掑綊澶勭悊宓屽瀵硅薄
+      // 鍙繚鐣欓潪绌哄�硷紙鎺掗櫎''銆乽ndefined銆乶ull锛�
+      if (value !== '' && value !== undefined && value !== null) {
+        result[key] = value;
+      }
+    }
+  }
+  return result;
+}
+
 export const hiddenIDNumberForEnd4 = (realIDNumber: string) => {
   if (!realIDNumber) return '';
   return realIDNumber.replace(/^(\d+)(.{4})$/, '$1****');
diff --git a/src/views/AgreementManage/AgreementManageList.vue b/src/views/AgreementManage/AgreementManageList.vue
index 717f974..dcdd801 100644
--- a/src/views/AgreementManage/AgreementManageList.vue
+++ b/src/views/AgreementManage/AgreementManageList.vue
@@ -36,14 +36,15 @@
           </QueryFilterItem>
         </template>
         <template #btn>
-          <el-button type="primary" @click="handleAdd()">鏂板妯℃澘</el-button>
+          <el-button
+            v-if="checkSubModuleItemShow('pageButton', 'addBtn')"
+            type="primary"
+            @click="openDialog()"
+            >鏂板妯℃澘</el-button
+          >
         </template>
       </ProTableQueryFilterBar>
-      <ProTableV2
-        v-bind="proTableProps"
-        :columns="AgreementbManageColumns"
-        :operationBtns="operationBtns"
-      >
+      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
         <template #code="{ row }">
           <el-button
             v-if="row.status === EnumContractTemplateStatus.Completed && !!row.wxmpQrCode"
@@ -72,14 +73,18 @@
   useTable,
   FieldDatePicker,
   FieldRadio,
-  defineOperationBtns,
   UploadUserFile,
   useFormDialog,
   bolePreview,
 } from '@bole-core/components';
-import { AgreementbManageColumns } from './constants';
 import { EnumContractTemplateStatus, EnumContractTemplateStatusText } from '@/constants';
-import { convertPdfToImage, downloadFileByUrl, format, setOSSLink } from '@/utils';
+import {
+  convertApi2FormUrlOnlyOne,
+  convertPdfToImage,
+  downloadFileByUrl,
+  format,
+  setOSSLink,
+} from '@/utils';
 import { ModelValueType } from 'element-plus';
 import * as electronSignServices from '@/services/api/electronSign';
 import TemplateAddDialog from './components/TemplateAddDialog.vue';
@@ -90,12 +95,8 @@
   name: 'AgreementManageList',
 });
 
-const operationBtns = defineOperationBtns([
-  {
-    data: {
-      enCode: 'checkBtn',
-      name: '鏌ョ湅',
-    },
+const operationBtnMap: Record<string, OperationBtnType> = {
+  checkBtn: {
     emits: {
       onClick: (role) => handleCheck(role),
     },
@@ -103,11 +104,15 @@
       hide: (row) => row.status !== EnumContractTemplateStatus.Completed,
     },
   },
-  {
-    data: {
-      enCode: 'downloadBtn',
-      name: '涓嬭浇',
+  editBtn: {
+    emits: {
+      onClick: (role) => openDialog(role),
     },
+    extraProps: {
+      hide: (row) => row.status !== EnumContractTemplateStatus.Completed,
+    },
+  },
+  downloadBtn: {
     emits: {
       onClick: (role) => handleDownload(role),
     },
@@ -115,11 +120,7 @@
       hide: (row) => row.status !== EnumContractTemplateStatus.Completed,
     },
   },
-  {
-    data: {
-      enCode: 'deleteBtn',
-      name: '鍒犻櫎',
-    },
+  deleteBtn: {
     emits: {
       onClick: (role) => handleDelete(role),
     },
@@ -128,7 +129,11 @@
       hide: (row) => row.status !== EnumContractTemplateStatus.Completed,
     },
   },
-]);
+};
+
+const { column, operationBtns, checkSubModuleItemShow } = useAccess({
+  operationBtnMap,
+});
 
 const router = useRouter();
 
@@ -192,20 +197,67 @@
   }
 );
 
-const { dialogProps, handleAdd, editForm } = useFormDialog({
+async function openDialog(row?: API.GetEnterpriseContractTemplatesQueryResultItem) {
+  try {
+    if (row) {
+      let detail = await electronSignServices.getContractTemplate({ id: row.id });
+      handleTemplateEdit({
+        id: row.id,
+        templateId: row.templateId,
+        name: row.name,
+        code: row.code,
+        url: convertApi2FormUrlOnlyOne(row.file),
+        access: row.access,
+        isEnterpriseUserCreated: detail.isEnterpriseUserCreated,
+        templateEditData: detail.templateEditData,
+        isAutoSign: detail.isAutoSign ?? false,
+        autoSignPowerAttorneyUrl: convertApi2FormUrlOnlyOne(detail.autoSignPowerAttorneyUrl),
+        enterpriseId: detail.enterpriseId,
+
+        customContents: detail.customContents.map((x) => x.name),
+      });
+    } else {
+      handleTemplateAdd();
+    }
+  } catch (error) {}
+}
+
+const {
+  dialogProps,
+  handleAdd: handleTemplateAdd,
+  handleEdit: handleTemplateEdit,
+  editForm,
+} = useFormDialog({
   onConfirm: handleAddOrEdit,
   defaultFormParams: {
+    id: '',
+    templateId: '',
     name: '',
+    code: '',
     url: [] as UploadUserFile[],
+    access: '' as any as EnumElectronSignAccess,
+    isEnterpriseUserCreated: false,
+    templateEditData: '',
+    enterpriseId: '',
+    isAutoSign: false,
+    autoSignPowerAttorneyUrl: [] as UploadUserFile[],
+
+    customContents: [] as string[],
   },
 });
 
 async function handleAddOrEdit() {
   try {
+    let isEdit = !!editForm.id;
     let pdfToImage = await convertPdfToImage(editForm.url?.[0].url);
     let params: API.SaveContractTemplateCommand = {
       name: editForm.name,
       file: editForm.url[0]?.path ?? '',
+      enterpriseId: editForm.enterpriseId,
+      code: editForm.code,
+      access: editForm.access,
+      templateId: editForm.templateId,
+      autoSignPowerAttorneyUrl: editForm.autoSignPowerAttorneyUrl?.[0]?.path ?? '',
       templateEditData: JSON.stringify(
         pdfToImage.map(
           (x) =>
@@ -216,7 +268,16 @@
             } as TemplateEditDataItem)
         )
       ),
+      customContents: editForm.customContents,
     };
+    if (editForm.access === EnumElectronSignAccess.BestSign) {
+      params.isAutoSign = editForm.isAutoSign;
+    } else {
+      params.isAutoSign = false;
+    }
+    if (isEdit) {
+      params.id = editForm.id;
+    }
     let res = await electronSignServices.saveContractTemplate(params);
     if (res) {
       Message.successMessage('淇濆瓨鎴愬姛');
diff --git a/src/views/AgreementManage/components/TemplateAddDialog.vue b/src/views/AgreementManage/components/TemplateAddDialog.vue
index 07cf6b2..60793f4 100644
--- a/src/views/AgreementManage/components/TemplateAddDialog.vue
+++ b/src/views/AgreementManage/components/TemplateAddDialog.vue
@@ -2,7 +2,8 @@
   <ProDialog title="鏂板妯℃澘" v-model="visible" @close="onDialogClose" destroy-on-close draggable>
     <ProForm :model="form" ref="dialogForm" label-width="100px">
       <ProFormItemV2 label="妯℃澘鍚嶇О:" prop="name" :check-rules="[{ message: '璇疯緭鍏ユā鏉垮悕绉�' }]">
-        <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ユā鏉垮悕绉�" :maxlength="32" > </ProFormText>
+        <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ユā鏉垮悕绉�" :maxlength="32">
+        </ProFormText>
       </ProFormItemV2>
       <ProFormItemV2
         label="涓婁紶妯℃澘:"
@@ -16,6 +17,27 @@
           accept="pdf"
         ></ProFormUpload>
       </ProFormItemV2>
+      <ProFormItemV2 label="鑷姩绛�:" prop="isAutoSign" required>
+        <ProFormRadio v-model="form.isAutoSign" :value-enum="BooleanOptions"></ProFormRadio>
+      </ProFormItemV2>
+      <ProFormItemV2
+        label="涓婁紶鎺堟潈涔�:"
+        prop="autoSignPowerAttorneyUrl"
+        :check-rules="[{ message: '璇蜂笂浼犳巿鏉冧功', type: 'upload' }]"
+        v-if="form.isAutoSign"
+      >
+        <ProFormUpload
+          v-model:file-url="form.autoSignPowerAttorneyUrl"
+          :limit="1"
+          :limitFileSize="10"
+          accept="pdf,doc,docx,png,jpg,jpeg"
+        >
+          <div>
+            <el-button icon="Upload">涓婁紶鏂囦欢</el-button>
+            <el-button type="primary" link @click.stop="handleDownload">涓嬭浇鎺堟潈涔︽ā鏉�</el-button>
+          </div>
+        </ProFormUpload>
+      </ProFormItemV2>
     </ProForm>
     <template #footer>
       <span class="dialog-footer">
@@ -34,9 +56,11 @@
   ProFormUpload,
   ProFormText,
   UploadUserFile,
+  ProFormRadio,
 } from '@bole-core/components';
 import { FormInstance } from 'element-plus';
-import { max } from 'lodash';
+import { BooleanOptions } from '@/constants';
+import { downloadFileByUrl } from '@/utils';
 
 defineOptions({
   name: 'TemplateAddDialog',
@@ -44,8 +68,11 @@
 
 type Form = {
   title?: string;
+  id: string;
   name: string;
   url: UploadUserFile[];
+  isAutoSign: boolean;
+  autoSignPowerAttorneyUrl: UploadUserFile[];
 };
 
 const visible = defineModel({ type: Boolean });
@@ -73,4 +100,8 @@
     }
   });
 }
+
+function handleDownload() {
+  downloadFileByUrl(AutoSignPowerAttorneyTempUrl, '鑷姩绛炬巿鏉冧功妯℃澘');
+}
 </script>
diff --git a/src/views/CustomerManage/AddOrEditCustomer.vue b/src/views/CustomerManage/AddOrEditCustomer.vue
new file mode 100644
index 0000000..93668ad
--- /dev/null
+++ b/src/views/CustomerManage/AddOrEditCustomer.vue
@@ -0,0 +1,19 @@
+<template>
+  <AddOrEditCustomerView :isDetail="false" />
+</template>
+
+<script lang="ts">
+import { setPageTitle } from '@/utils';
+
+export default defineComponent({
+  name: 'AddOrEditCustomer',
+  beforeRouteEnter(to) {
+    to.meta.title = to.params.id ? '缂栬緫瀹㈡埛' : '鏂板瀹㈡埛';
+    setPageTitle(to.meta.title as string);
+  },
+});
+</script>
+
+<script setup lang="ts">
+import AddOrEditCustomerView from './components/AddOrEditCustomerView.vue';
+</script>
diff --git a/src/views/CustomerManage/CustomerDetail.vue b/src/views/CustomerManage/CustomerDetail.vue
new file mode 100644
index 0000000..10fc45d
--- /dev/null
+++ b/src/views/CustomerManage/CustomerDetail.vue
@@ -0,0 +1,11 @@
+<template>
+  <AddOrEditCustomerView isDetail />
+</template>
+
+<script setup lang="ts">
+import AddOrEditCustomerView from './components/AddOrEditCustomerView.vue';
+
+defineOptions({
+  name: 'CustomerDetail',
+});
+</script>
diff --git a/src/views/CustomerManage/CustomerManage.vue b/src/views/CustomerManage/CustomerManage.vue
new file mode 100644
index 0000000..15c62c9
--- /dev/null
+++ b/src/views/CustomerManage/CustomerManage.vue
@@ -0,0 +1,202 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableQueryFilterBar @on-reset="reset">
+        <template #query>
+          <QueryFilterItem tip-content="鍚堜綔鐘舵��">
+            <FieldRadio
+              v-model="extraParamState.cooperationStatus"
+              :value-enum="EnumEnterpriseCooperationStatusText"
+              buttonStyle
+              showAllBtn
+              @change="getList()"
+            />
+          </QueryFilterItem>
+          <QueryFilterItem tip-content="绛剧害鐘舵��">
+            <FieldRadio
+              v-model="extraParamState.signStatus"
+              :value-enum="EnumEnterpriseCooperationSignStatusText"
+              buttonStyle
+              showAllBtn
+              @change="getList()"
+            />
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.keywords"
+              style="width: 300px"
+              placeholder="浼佷笟鍚嶇О/淇$敤浠g爜/濮撳悕/鐢佃瘽"
+              @on-click-search="getList"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+        </template>
+        <template #btn>
+          <el-button
+            v-if="checkSubModuleItemShow('pageButton', 'addBtn')"
+            @click="goAddOrEdit()"
+            icon="Plus"
+            type="primary"
+            >鏂板瀹㈡埛</el-button
+          >
+        </template>
+      </ProTableQueryFilterBar>
+      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
+      </ProTableV2>
+    </AppContainer>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  ProTableQueryFilterBar,
+  FieldRadio,
+  ProTableV2,
+  SearchInput,
+  LoadingLayout,
+  AppContainer,
+  QueryFilterItem,
+  useTable,
+} from '@bole-core/components';
+import * as enterpriseServices from '@/services/api/enterprise';
+import {
+  EnumEnterpriseCooperationStatusText,
+  EnumEnterpriseCooperationSignStatusText,
+} from '@/constants';
+
+defineOptions({
+  name: 'CustomerManage',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+  detailBtn: {
+    emits: {
+      onClick: (role) => goDetail(role),
+    },
+  },
+  editBtn: {
+    emits: {
+      onClick: (role) => goAddOrEdit(role),
+    },
+  },
+  insureConfigureBtn: {
+    emits: {
+      onClick: (role) => goInsureProductConfigure(role),
+    },
+    // extraProps: {
+    //   hide: (role: API.GetPartyAEnterprisesQueryResultItem) => !role.isConfigured,
+    // },
+  },
+};
+
+const { checkSubModuleItemShow, column, operationBtns } = useAccess({
+  operationBtnMap,
+});
+
+const BaseState = {
+  loading: true,
+};
+
+const state = reactive({ ...BaseState });
+
+const eventContext = useGlobalEventContext();
+
+eventContext.addEvent('customerManage:add', () => {
+  getList();
+});
+
+eventContext.addEvent('customerManage:edit', () => {
+  getList(paginationState.pageIndex);
+});
+
+onMounted(async () => {
+  await getList();
+  state.loading = false;
+});
+
+const {
+  getDataSource: getList,
+  proTableProps,
+  paginationState,
+  extraParamState,
+  reset,
+} = useTable(
+  async ({ pageIndex, pageSize }, extraParamState) => {
+    try {
+      let params: API.GetPartyAEnterprisesQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          orderInput: extraParamState.orderInput,
+        },
+        keywords: extraParamState.keywords,
+        cooperationStatus: extraParamState.cooperationStatus,
+        signStatus: extraParamState.signStatus,
+      };
+
+      let res = await enterpriseServices.getPartyAEnterprises(params, {
+        showLoading: !state.loading,
+      });
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      keywords: '',
+      cooperationStatus: '' as any as EnumEnterpriseCooperationStatus,
+      signStatus: '' as any as EnumEnterpriseCooperationSignStatus,
+      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
+    },
+    queryKey: ['enterpriseServices/getPartyAEnterprises'],
+    columnsRenderProps: {
+      cooperationStatus: { type: 'enum', valueEnum: EnumEnterpriseCooperationStatusText },
+      signStatus: { type: 'enum', valueEnum: EnumEnterpriseCooperationSignStatusText },
+      serviceFeeCollectType: {
+        type: 'enum',
+        valueEnum: EnumEnterpriseCooperationServiceFeeCollectTypeText,
+      },
+      invoiceTaxPointRate: {
+        formatter: (row: API.GetPartyAEnterprisesQueryResultItem) => {
+          if (row.invoiceTaxPointRate) {
+            return `${row.invoiceTaxPointRate}%`;
+          }
+          return '';
+        },
+      },
+      isConfigured: {
+        formatter: (row: API.GetPartyAEnterprisesQueryResultItem) =>
+          row.isConfigured ? '宸查厤缃�' : '鏈厤缃�',
+      },
+    },
+  }
+);
+
+const router = useRouter();
+
+function goAddOrEdit(row?: API.GetPartyAEnterprisesQueryResultItem) {
+  router.push({
+    name: 'AddOrEditCustomer',
+    params: {
+      id: row?.id ?? '',
+    },
+  });
+}
+
+function goDetail(row: API.GetPartyAEnterprisesQueryResultItem) {
+  router.push({
+    name: 'CustomerDetail',
+    params: {
+      id: row?.id ?? '',
+    },
+  });
+}
+
+function goInsureProductConfigure(row: API.GetPartyAEnterprisesQueryResultItem) {
+  router.push({
+    name: 'InsureProductConfigure',
+    params: {
+      id: row?.id ?? '',
+    },
+  });
+}
+</script>
diff --git a/src/views/CustomerManage/InsureProductConfigure.vue b/src/views/CustomerManage/InsureProductConfigure.vue
new file mode 100644
index 0000000..dfb22c7
--- /dev/null
+++ b/src/views/CustomerManage/InsureProductConfigure.vue
@@ -0,0 +1,117 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
+      </ProTableV2>
+    </AppContainer>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import { ProTableV2, LoadingLayout, AppContainer, useTable } from '@bole-core/components';
+import * as enterpriseInsuranceProductServices from '@/services/api/enterpriseInsuranceProduct';
+import {
+  EnumEnterpriseCooperationStatusText,
+  EnumEnterpriseCooperationSignStatusText,
+} from '@/constants';
+import { Message } from '@bole-core/core';
+
+defineOptions({
+  name: 'InsureProductConfigure',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+  enableBtn: {
+    emits: {
+      onClick: (role) => setDisabledEnterpriseInsuranceProducts(role),
+    },
+    extraProps: {
+      hide: (role: API.GetEnterpriseInsuranceProductsQueryResultItem) => !role.isDisabled,
+    },
+  },
+  disableBtn: {
+    emits: {
+      onClick: (role) => setDisabledEnterpriseInsuranceProducts(role),
+    },
+    extraProps: {
+      hide: (role: API.GetEnterpriseInsuranceProductsQueryResultItem) => role.isDisabled,
+    },
+  },
+};
+
+const { checkSubModuleItemShow, column, operationBtns } = useAccess({
+  operationBtnMap,
+});
+
+const route = useRoute();
+const enterpriseCooperationId = (route.params.id as string) ?? '';
+
+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.GetEnterpriseInsuranceProductsQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          orderInput: extraParamState.orderInput,
+        },
+        enterpriseCooperationId: enterpriseCooperationId,
+      };
+
+      let res = await enterpriseInsuranceProductServices.getEnterpriseInsuranceProducts(params, {
+        showLoading: !state.loading,
+      });
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
+    },
+    queryKey: ['enterpriseServices/getPartyAEnterprises'],
+    columnsRenderProps: {
+      isDisabled: {
+        formatter: (row: API.GetEnterpriseInsuranceProductsQueryResultItem) =>
+          row.isDisabled ? '绂佺敤' : '鍚敤',
+      },
+    },
+  }
+);
+
+async function setDisabledEnterpriseInsuranceProducts(
+  row: API.GetEnterpriseInsuranceProductsQueryResultItem
+) {
+  try {
+    await Message.tipMessage(`纭瑕�${row.isDisabled ? '鍚敤' : '绂佺敤'}璇ヤ繚闄╀骇鍝佸悧锛焋);
+    let params: API.SetDisabledEnterpriseInsuranceProductsCommand = {
+      enterpriseCooperationId: enterpriseCooperationId,
+      ids: [row.id],
+      isDisabled: !row.isDisabled,
+    };
+    let res = await enterpriseInsuranceProductServices.setDisabledEnterpriseInsuranceProducts(
+      params
+    );
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      getList(paginationState.pageIndex);
+    }
+  } catch (error) {}
+}
+</script>
diff --git a/src/views/CustomerManage/components/AddOrEditCustomerView.vue b/src/views/CustomerManage/components/AddOrEditCustomerView.vue
new file mode 100644
index 0000000..83a92ba
--- /dev/null
+++ b/src/views/CustomerManage/components/AddOrEditCustomerView.vue
@@ -0,0 +1,579 @@
+<template>
+  <LoadingLayout :loading="isEdit && isLoading">
+    <AppScrollContainer>
+      <ChunkCell title="浼佷笟鍩烘湰淇℃伅">
+        <ProForm :model="form" ref="formRef" label-width="140px" :is-read="isDetail">
+          <ProFormCol>
+            <ProFormColItem :span="8">
+              <ProFormItemV2
+                label="浼佷笟鍚嶇О:"
+                prop="enterpriseName"
+                :check-rules="[{ message: '璇疯緭鍏ヤ紒涓氬悕绉�' }]"
+              >
+                <ProFormText
+                  v-model.trim="form.enterpriseName"
+                  :maxlength="30"
+                  placeholder="璇疯緭鍏ヤ紒涓氬悕绉�"
+                />
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="8">
+              <ProFormItemV2 label="娉曚汉濮撳悕:" prop="legalPerson">
+                <ProFormText
+                  v-model.trim="form.legalPerson"
+                  :maxlength="30"
+                  placeholder="璇疯緭鍏ユ硶浜哄鍚�"
+                />
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="8">
+              <ProFormItemV2 label="娉曚汉韬唤璇佸彿:" prop="legalIdentity">
+                <ProFormText
+                  v-model.trim="form.legalIdentity"
+                  :maxlength="30"
+                  placeholder="璇疯緭鍏ユ硶浜鸿韩浠借瘉鍙�"
+                />
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="8">
+              <ProFormItemV2
+                label="缁熶竴绀句細淇$敤浠g爜:"
+                prop="societyCreditCode"
+                :check-rules="[{ message: '璇疯緭鍏ョ粺涓�绀句細淇$敤浠g爜', type: 'societyCreditCode' }]"
+              >
+                <ProFormText
+                  v-model.trim="form.societyCreditCode"
+                  placeholder="璇疯緭鍏ョ粺涓�绀句細淇$敤浠g爜"
+                />
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="8">
+              <ProFormItemV2 label="娉ㄥ唽璧勬湰:" prop="registeredCapital">
+                <ProFormText v-model.trim="form.registeredCapital" placeholder="璇疯緭鍏ユ敞鍐岃祫鏈�" />
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="8">
+              <ProFormItemV2 label="浼佷笟绫诲瀷:" prop="enterpriseType">
+                <ProFormText v-model.trim="form.enterpriseType" placeholder="璇疯緭鍏ヤ紒涓氱被鍨�" />
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="8">
+              <ProFormItemV2 label="鎴愮珛鏃ユ湡:" prop="establishmentDate">
+                <ProFormDatePicker
+                  v-model="form.establishmentDate"
+                  type="date"
+                  placeholder="璇烽�夋嫨鎴愮珛鏃ユ湡"
+                />
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="8">
+              <ProFormItemV2 label="鎵�鍦ㄥ湴鍖�:" prop="areaList">
+                <ProFromAddressSelectV2
+                  v-model:areaList="form.areaList"
+                  areaListPlaceholder="璇烽�夋嫨鎵�鍦ㄥ湴鍖�"
+                  :layer="AreaType.City"
+                />
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="8"> </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="8">
+              <ProFormItemV2 label="璇︾粏鍦板潃:" prop="address">
+                <ProFormText v-model.trim="form.address" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�" />
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormItemV2 label="缁忚惀鑼冨洿:" prop="mainBusiness">
+            <ProFormTextArea
+              v-model="form.mainBusiness"
+              maxlength="200"
+              :rows="6"
+              show-word-limit
+              placeholder="璇疯緭鍏ョ粡钀ヨ寖鍥�"
+            />
+          </ProFormItemV2>
+        </ProForm>
+      </ChunkCell>
+      <ChunkCell title="鍚堜綔淇℃伅">
+        <ProForm
+          :model="form"
+          ref="settingFormRef"
+          label-width="140px"
+          :scroll-to-error="false"
+          :is-read="isDetail"
+        >
+          <ProFormCol>
+            <ProFormColItem :span="8">
+              <ProFormItemV2
+                label="鑱旂郴浜�:"
+                prop="contacts"
+                :check-rules="[{ message: '璇疯緭鍏ヨ仈绯讳汉' }]"
+              >
+                <ProFormText
+                  v-model.trim="form.contacts"
+                  :maxlength="30"
+                  placeholder="璇疯緭鍏ヨ仈绯讳汉"
+                />
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="8">
+              <ProFormItemV2
+                label="鑱旂郴鐢佃瘽:"
+                prop="contactPhoneNumber"
+                :check-rules="[{ message: '璇疯緭鍏ヨ仈绯荤數璇�', type: 'phone' }]"
+              >
+                <ProFormText v-model.trim="form.contactPhoneNumber" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="8">
+              <ProFormItemV2 label="鑱旂郴閭:" prop="contactEmail">
+                <ProFormText
+                  v-model.trim="form.contactEmail"
+                  :maxlength="30"
+                  placeholder="璇疯緭鍏ヨ仈绯婚偖绠�"
+                  :formatter="filterCN"
+                />
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="8">
+              <ProFormItemV2 label="鍚堜綔鐘舵��:" prop="cooperationStatus">
+                <ProFormRadio
+                  v-model="form.cooperationStatus"
+                  :value-enum="EnumEnterpriseCooperationStatusText"
+                />
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="8">
+              <ProFormItemV2 label="绛剧害鐘舵��:" prop="signStatus">
+                <ProFormRadio
+                  v-model="form.signStatus"
+                  :value-enum="EnumEnterpriseCooperationSignStatusText"
+                />
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="8">
+              <ProFormItemV2 label="鍚堜綔鍗忚:" prop="cooperationAgreementUrl">
+                <ProFormUpload
+                  v-model:file-url="form.cooperationAgreementUrl"
+                  :limit="1"
+                  :limitFileSize="10"
+                  accept="jpg/jpeg,png,pdf"
+                ></ProFormUpload>
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="8">
+              <ProFormItemV2 label="鏈嶅姟璐规敹鍙栨柟寮�:" prop="serviceFeeCollectType">
+                <ProFormSelect
+                  v-model="form.serviceFeeCollectType"
+                  :valueEnum="EnumEnterpriseCooperationServiceFeeCollectTypeText"
+                  placeholder="璇烽�夋嫨鏈嶅姟璐规敹鍙栨柟寮�"
+                >
+                </ProFormSelect>
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="8">
+              <ProFormItemV2
+                label="鏈嶅姟璐�:"
+                prop="serviceFeeRate"
+                :check-rules="
+                  form.serviceFeeCollectType ? [{ message: '璇疯緭鍏ユ湇鍔¤垂' }] : undefined
+                "
+                :required="!!form.serviceFeeCollectType"
+              >
+                <ProFormInputNumber
+                  v-model="form.serviceFeeRate"
+                  :controls="false"
+                  :min="0"
+                  :precision="2"
+                  placeholder="璇疯緭鍏�"
+                  :unit="serviceFeeCollectTypeUnit"
+                  :showReadContent="!!form.serviceFeeRate"
+                />
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="8">
+              <ProFormItemV2 label="鍙戠エ绋庣偣:" prop="invoiceTaxPointRate">
+                <ProFormInputNumber
+                  v-model="form.invoiceTaxPointRate"
+                  :controls="false"
+                  :min="0"
+                  :precision="2"
+                  placeholder="璇疯緭鍏�"
+                  unit="%"
+                  :showReadContent="!!form.invoiceTaxPointRate"
+                />
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+        </ProForm>
+      </ChunkCell>
+      <ChunkCell title="璐﹀彿淇℃伅">
+        <ProForm
+          :model="form"
+          ref="accountFormRef"
+          label-width="140px"
+          :scroll-to-error="false"
+          :is-read="isDetail"
+        >
+          <ProFormCol>
+            <ProFormColItem :span="8">
+              <ProFormItemV2
+                label="璐﹀彿:"
+                prop="userName"
+                :check-rules="[{ message: '璇疯緭鍏ヨ处鍙�' }]"
+              >
+                <ProFormText
+                  v-model.trim="form.userName"
+                  :maxlength="30"
+                  placeholder="璇疯緭鍏ヨ处鍙�"
+                />
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol v-if="!isDetail">
+            <ProFormColItem :span="8">
+              <ProFormItemV2
+                label="瀵嗙爜:"
+                prop="password"
+                :check-rules="[{ required: !isEdit, message: '璇疯緭鍏ュ瘑鐮�' }]"
+              >
+                <div class="password-input">
+                  <ProFormText
+                    v-if="!isEdit"
+                    v-model.trim="form.password"
+                    :maxlength="30"
+                    placeholder="璇疯緭鍏ュ瘑鐮�"
+                  />
+                  <el-button v-else type="primary" link @click="openResetPasswordDialog"
+                    >淇敼瀵嗙爜</el-button
+                  >
+                </div>
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol v-if="!isDetail">
+            <ProFormColItem :span="8">
+              <ProFormItemV2
+                label="鎿嶄綔瀵嗙爜:"
+                prop="operatorPassword"
+                :check-rules="[
+                  {
+                    required: false,
+                    message: '璇疯緭鍏�6浣嶆暟瀛�',
+                    pattern: /\b\d{6}\b/,
+                  },
+                ]"
+              >
+                <div class="password-input">
+                  <ProFormText
+                    v-if="!isEdit"
+                    v-model.trim="form.operatorPassword"
+                    :maxlength="6"
+                    placeholder="璇疯緭鍏ユ搷浣滃瘑鐮�(6浣嶆暟瀛�)"
+                  />
+                  <el-button type="primary" v-else link @click="openResetOperatorPasswordDialog"
+                    >淇敼瀵嗙爜</el-button
+                  >
+                </div>
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <div class="chuck-add-or-edit-actions">
+            <el-button @click="handleBack">杩斿洖</el-button>
+            <el-button v-if="!isDetail" type="primary" @click="handleSubmit">纭</el-button>
+          </div>
+        </ProForm>
+      </ChunkCell>
+    </AppScrollContainer>
+    <ResetPasswordDialog v-bind="resetPasswordDialogProps"></ResetPasswordDialog>
+    <ResetOperatorPasswordDialog
+      v-bind="resetOperatorPasswordDialogProps"
+    ></ResetOperatorPasswordDialog>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  LoadingLayout,
+  AppScrollContainer,
+  ProForm,
+  ProFormItemV2,
+  ChunkCell,
+  ProFormText,
+  ProFormUpload,
+  ProFormTextArea,
+  ProFormCol,
+  ProFormColItem,
+  ProFormDatePicker,
+  ProFormRadio,
+  UploadUserFile,
+  useFormDialog,
+  ProFormSelect,
+  ProFormInputNumber,
+} from '@bole-core/components';
+import { FormInstance } from 'element-plus';
+import * as enterpriseServices from '@/services/api/enterprise';
+import * as userServices from '@/services/api/user';
+import { useRouteView, useGlobalEventContext } from '@/hooks';
+import _ from 'lodash';
+import {
+  EnumEnterpriseCooperationStatusText,
+  EnumEnterpriseCooperationSignStatusText,
+  EnumEnterpriseCooperationServiceFeeCollectTypeText,
+  EnumEnterpriseCooperationServiceFeeCollectType,
+} from '@/constants';
+import {
+  validateFormList,
+  filterCN,
+  removeEmptyKeys,
+  format,
+  convertApi2FormUrlOnlyOne,
+} from '@/utils';
+import { Message } from '@bole-core/core';
+import { useQuery } from '@tanstack/vue-query';
+import { AreaType } from '@/constants';
+import ResetPasswordDialog from './ResetPasswordDialog.vue';
+import ResetOperatorPasswordDialog from './ResetOperatorPasswordDialog.vue';
+
+defineOptions({
+  name: 'AddOrEditCustomerView',
+});
+
+type Props = {
+  isDetail: boolean;
+};
+
+const props = withDefaults(defineProps<Props>(), {});
+
+const route = useRoute();
+const id = route.params.id as string;
+const isEdit = !!id;
+
+const { closeViewPush } = useRouteView();
+const eventContext = useGlobalEventContext();
+
+const form = reactive({
+  id: '',
+  enterpriseName: '',
+  legalPerson: '',
+  legalIdentity: '',
+  societyCreditCode: '',
+  registeredCapital: '',
+  enterpriseType: '',
+  establishmentDate: '',
+  areaList: [] as string[],
+  address: '',
+  mainBusiness: '',
+  contacts: '',
+  contactPhoneNumber: '',
+  contactEmail: '',
+  cooperationStatus: EnumEnterpriseCooperationStatus.None,
+  signStatus: EnumEnterpriseCooperationSignStatus.None,
+  cooperationAgreementUrl: [] as UploadUserFile[],
+  userName: '',
+  password: '',
+  operatorPassword: '',
+
+  userId: '',
+
+  serviceFeeCollectType: '' as any as EnumEnterpriseCooperationServiceFeeCollectType,
+  serviceFeeRate: null as any as number,
+  invoiceTaxPointRate: null as any as number,
+});
+
+const { isLoading, refetch } = useQuery({
+  queryKey: ['enterpriseServices/getPartyAEnterprise', id],
+  queryFn: async () => {
+    return await enterpriseServices.getPartyAEnterprise(
+      { id: id },
+      {
+        showLoading: false,
+      }
+    );
+  },
+  onSuccess(data) {
+    form.id = data.id;
+    form.enterpriseName = data.enterpriseName;
+    form.legalPerson = data.legalPerson;
+    form.legalIdentity = data.legalIdentity;
+    form.societyCreditCode = data.societyCreditCode;
+    form.registeredCapital = data.registeredCapital;
+    form.enterpriseType = data.enterpriseType;
+    form.establishmentDate = data.establishmentDate;
+    form.areaList = [data.provinceCode, data.cityCode].filter(Boolean);
+    form.address = data.address;
+    form.mainBusiness = data.mainBusiness;
+    form.contacts = data.contacts;
+    form.contactPhoneNumber = data.contactPhoneNumber;
+    form.contactEmail = data.contactEmail;
+    form.cooperationStatus = data.cooperationStatus;
+    form.signStatus = data.signStatus;
+    form.cooperationAgreementUrl = convertApi2FormUrlOnlyOne(data.cooperationAgreementUrl);
+    form.userName = data.userName;
+
+    form.userId = data.userId;
+    form.serviceFeeCollectType = data.serviceFeeCollectType;
+    form.serviceFeeRate = data.serviceFeeRate;
+    form.invoiceTaxPointRate = data.invoiceTaxPointRate;
+  },
+  enabled: computed(() => !!id),
+});
+
+const serviceFeeCollectTypeUnit = computed(() => {
+  if (!form.serviceFeeCollectType) {
+    return '';
+  } else {
+    return form.serviceFeeCollectType === EnumEnterpriseCooperationServiceFeeCollectType.Rate
+      ? '%'
+      : '鍏�/浜�';
+  }
+});
+
+const {
+  dialogProps: resetPasswordDialogProps,
+  handleAdd: handleResetPasswordAdd,
+  editForm: resetPasswordEditForm,
+} = useFormDialog({
+  onConfirm: resetPassword,
+  defaultFormParams: {
+    ids: '',
+    password: '',
+  },
+});
+
+function openResetPasswordDialog() {
+  handleResetPasswordAdd({
+    ids: form.userId,
+    password: '',
+  });
+}
+
+async function resetPassword() {
+  try {
+    let params: API.ResetUserPasswordsCommand = {
+      ids: [resetPasswordEditForm.ids],
+      password: resetPasswordEditForm.password,
+    };
+    let res = await userServices.resetUserPasswords(params);
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      refetch();
+    }
+  } catch (error) {}
+}
+
+const {
+  dialogProps: resetOperatorPasswordDialogProps,
+  handleAdd: handleResetOperatorPasswordAdd,
+  editForm: resetOperatorPasswordEditForm,
+} = useFormDialog({
+  onConfirm: resetOperatorPassword,
+  defaultFormParams: {
+    ids: '',
+    operatorPassword: '',
+  },
+});
+
+function openResetOperatorPasswordDialog() {
+  handleResetOperatorPasswordAdd({
+    ids: form.userId,
+    operatorPassword: '',
+  });
+}
+
+async function resetOperatorPassword() {
+  try {
+    let params: API.ResetUserOperatorPasswordsCommand = {
+      ids: [resetOperatorPasswordEditForm.ids],
+      operatorPassword: resetOperatorPasswordEditForm.operatorPassword,
+    };
+    let res = await userServices.resetUserOperatorPasswords(params);
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      refetch();
+    }
+  } catch (error) {}
+}
+
+const formRef = ref<FormInstance>();
+const settingFormRef = ref<FormInstance>();
+const accountFormRef = ref<FormInstance>();
+
+async function handleSubmit() {
+  try {
+    const valid = await validateFormList([
+      formRef.value,
+      settingFormRef.value,
+      accountFormRef.value,
+    ]);
+    if (valid) {
+      handleCreateOrEditFlexEnterprise();
+    }
+  } catch (error) {}
+}
+
+async function handleCreateOrEditFlexEnterprise() {
+  try {
+    let params: API.SavePartyAEnterpriseCommand = {
+      enterpriseName: form.enterpriseName,
+      legalPerson: form.legalPerson,
+      legalIdentity: form.legalIdentity,
+      societyCreditCode: form.societyCreditCode,
+      registeredCapital: form.registeredCapital,
+      enterpriseType: form.enterpriseType,
+      establishmentDate: format(form.establishmentDate, 'YYYY-MM-DD'),
+      provinceCode: form.areaList[0],
+      cityCode: form.areaList[1],
+      address: form.address,
+      mainBusiness: form.mainBusiness,
+      contacts: form.contacts,
+      contactPhoneNumber: form.contactPhoneNumber,
+      contactEmail: form.contactEmail,
+      cooperationStatus: form.cooperationStatus,
+      signStatus: form.signStatus,
+      cooperationAgreementUrl: form.cooperationAgreementUrl[0]?.path,
+      userName: form.userName,
+      password: form.password,
+      operatorPassword: form.operatorPassword,
+      serviceFeeCollectType: form.serviceFeeCollectType,
+      invoiceTaxPointRate: form.invoiceTaxPointRate,
+      serviceFeeRate: form.serviceFeeRate,
+    };
+    if (isEdit) {
+      params.id = id;
+    }
+    let res = await enterpriseServices.savePartyAEnterprise(removeEmptyKeys(params));
+    if (res) {
+      Message.successMessage(isEdit ? '缂栬緫鎴愬姛' : '鍙戝竷鎴愬姛');
+      eventContext.emit(isEdit ? 'customerManage:edit' : 'customerManage:add');
+      handleBack();
+    }
+  } catch (error) {}
+}
+
+function handleBack() {
+  closeViewPush(route, {
+    name: 'CustomerManage',
+  });
+}
+</script>
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+
+.password-input {
+  display: flex;
+  flex: 1;
+  min-width: 0;
+}
+</style>
diff --git a/src/views/CustomerManage/components/ResetOperatorPasswordDialog.vue b/src/views/CustomerManage/components/ResetOperatorPasswordDialog.vue
new file mode 100644
index 0000000..cd7be05
--- /dev/null
+++ b/src/views/CustomerManage/components/ResetOperatorPasswordDialog.vue
@@ -0,0 +1,81 @@
+<template>
+  <ProDialog
+    :title="form.title"
+    v-model="visible"
+    @close="onDialogClose"
+    destroy-on-close
+    draggable
+    :width="800"
+  >
+    <ProForm :model="form" ref="dialogForm" label-width="120px">
+      <ProFormItemV2
+        label="鎿嶄綔瀵嗙爜:"
+        prop="operatorPassword"
+        :check-rules="[
+          { message: '璇疯緭鍏ユ搷浣滃瘑鐮�' },
+          {
+            message: '璇疯緭鍏�6浣嶆暟瀛�',
+            pattern: /\b\d{6}\b/,
+          },
+        ]"
+      >
+        <ProFormText
+          placeholder="璇疯緭鍏ユ搷浣滃瘑鐮�"
+          v-model.trim="form.operatorPassword"
+          :maxlength="30"
+        ></ProFormText>
+      </ProFormItemV2>
+    </ProForm>
+    <template #footer>
+      <span class="dialog-footer">
+        <el-button @click="emit('onCancel')">鍙� 娑�</el-button>
+        <el-button type="primary" @click="handleConfirm">纭� 瀹�</el-button>
+      </span>
+    </template>
+  </ProDialog>
+</template>
+
+<script setup lang="ts">
+import { FormInstance } from 'element-plus';
+import { ProDialog, ProForm, ProFormItemV2, ProFormText } from '@bole-core/components';
+
+defineOptions({
+  name: 'ResetOperatorPasswordDialog',
+});
+
+// type Props = {};
+
+// const props = withDefaults(defineProps<Props>(), {});
+
+const visible = defineModel({ type: Boolean });
+
+type Form = {
+  title?: string;
+  ids: string;
+  operatorPassword: string;
+};
+
+const form = defineModel<Form>('form');
+const emit = defineEmits<{
+  (e: 'onConfirm'): void;
+  (e: 'onCancel'): void;
+}>();
+
+const dialogForm = ref<FormInstance>();
+
+function onDialogClose() {
+  if (!dialogForm.value) return;
+  dialogForm.value.resetFields();
+}
+
+function handleConfirm() {
+  if (!dialogForm.value) return;
+  dialogForm.value.validate((valid) => {
+    if (valid) {
+      emit('onConfirm');
+    } else {
+      return;
+    }
+  });
+}
+</script>
diff --git a/src/views/CustomerManage/components/ResetPasswordDialog.vue b/src/views/CustomerManage/components/ResetPasswordDialog.vue
new file mode 100644
index 0000000..f622c4f
--- /dev/null
+++ b/src/views/CustomerManage/components/ResetPasswordDialog.vue
@@ -0,0 +1,71 @@
+<template>
+  <ProDialog
+    :title="form.title"
+    v-model="visible"
+    @close="onDialogClose"
+    destroy-on-close
+    draggable
+    :width="800"
+  >
+    <ProForm :model="form" ref="dialogForm" label-width="120px">
+      <ProFormItemV2 label="瀵嗙爜:" prop="password" :check-rules="[{ message: '璇疯緭鍏ュ瘑鐮�' }]">
+        <ProFormText
+          placeholder="璇疯緭鍏ュ瘑鐮�"
+          v-model.trim="form.password"
+          :maxlength="30"
+        ></ProFormText>
+      </ProFormItemV2>
+    </ProForm>
+    <template #footer>
+      <span class="dialog-footer">
+        <el-button @click="emit('onCancel')">鍙� 娑�</el-button>
+        <el-button type="primary" @click="handleConfirm">纭� 瀹�</el-button>
+      </span>
+    </template>
+  </ProDialog>
+</template>
+
+<script setup lang="ts">
+import { FormInstance } from 'element-plus';
+import { ProDialog, ProForm, ProFormItemV2, ProFormText } from '@bole-core/components';
+
+defineOptions({
+  name: 'ResetPasswordDialog',
+});
+
+// type Props = {};
+
+// const props = withDefaults(defineProps<Props>(), {});
+
+const visible = defineModel({ type: Boolean });
+
+type Form = {
+  title?: string;
+  ids: string;
+  password: string;
+};
+
+const form = defineModel<Form>('form');
+const emit = defineEmits<{
+  (e: 'onConfirm'): void;
+  (e: 'onCancel'): void;
+}>();
+
+const dialogForm = ref<FormInstance>();
+
+function onDialogClose() {
+  if (!dialogForm.value) return;
+  dialogForm.value.resetFields();
+}
+
+function handleConfirm() {
+  if (!dialogForm.value) return;
+  dialogForm.value.validate((valid) => {
+    if (valid) {
+      emit('onConfirm');
+    } else {
+      return;
+    }
+  });
+}
+</script>
diff --git a/src/views/DataReport/DistributionDetailReport.vue b/src/views/DataReport/DistributionDetailReport.vue
new file mode 100644
index 0000000..6ccf6ba
--- /dev/null
+++ b/src/views/DataReport/DistributionDetailReport.vue
@@ -0,0 +1,116 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableQueryFilterBar @on-reset="reset">
+        <template #query>
+          <QueryFilterItem>
+            <FieldDatePicker
+              v-model="extraParamState.time"
+              type="daterange"
+              range-separator="~"
+              start-placeholder="璧峰鏃ユ湡"
+              end-placeholder="鎴鏃ユ湡"
+              clearable
+              @change="getList()"
+              tooltipContent="鏃ユ湡"
+            ></FieldDatePicker>
+          </QueryFilterItem>
+        </template>
+      </ProTableQueryFilterBar>
+      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
+      </ProTableV2>
+    </AppContainer>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  ProTableQueryFilterBar,
+  ProTableV2,
+  LoadingLayout,
+  AppContainer,
+  QueryFilterItem,
+  useTable,
+  FieldDatePicker,
+} from '@bole-core/components';
+import * as taskServices from '@/services/api/task';
+import { ModelValueType } from 'element-plus';
+import { downloadFileByUrl, format, OrderUtils, setOSSLink } from '@/utils';
+
+defineOptions({
+  name: 'DistributionDetailReport',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+  downloadBtn: {
+    emits: {
+      onClick: (role) => handleDownload(role),
+    },
+    extraProps: {
+      hide: (row: API.GetTaskSettlementReleaseReportsQueryResultItem) => !row.url,
+    },
+  },
+};
+
+const { column, operationBtns } = useAccess({
+  operationBtnMap,
+});
+
+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.GetTaskSettlementReleaseReportsQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          orderInput: extraParamState.orderInput,
+        },
+        startMonth: format(extraParamState.time?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
+        endMonth: format(extraParamState.time?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
+      };
+
+      let res = await taskServices.getTaskSettlementReleaseReports(params, {
+        showLoading: !state.loading,
+      });
+      return res;
+    } catch (error) {
+      console.log('error: ', error);
+    }
+  },
+  {
+    defaultExtraParams: {
+      orderInput: [{ property: 'month', order: EnumPagedListOrder.Desc }],
+      time: [] as unknown as ModelValueType,
+    },
+    queryKey: ['taskServices/getTaskSettlementReleaseReports'],
+    columnsRenderProps: {
+      amount: { type: 'money' },
+      month: { type: 'date', format: 'YYYY-M' },
+      createdTime: { type: 'date' },
+    },
+  }
+);
+
+async function handleDownload(row: API.GetTaskSettlementReleaseReportsQueryResultItem) {
+  downloadFileByUrl(setOSSLink(row.url));
+}
+</script>
diff --git a/src/views/EmploymentManage/CheckManage.vue b/src/views/EmploymentManage/CheckManage.vue
index 7810aad..c009de0 100644
--- a/src/views/EmploymentManage/CheckManage.vue
+++ b/src/views/EmploymentManage/CheckManage.vue
@@ -53,10 +53,11 @@
   useTable,
   FieldDatePicker,
   FieldRadio,
+  useFormDialog,
 } from '@bole-core/components';
 import * as taskCheckReceiveServices from '@/services/api/taskCheckReceive';
 import { ModelValueType } from 'element-plus';
-import { downloadFileByUrl, format, OrderUtils, setOSSLink } from '@/utils';
+import { downloadFileByUrl, format, OrderUtils, setOSSLink, hiddenIDNumberForEnd4 } from '@/utils';
 import { EnumTaskCheckReceiveStatusText } from '@/constants';
 
 defineOptions({
@@ -80,7 +81,7 @@
   },
 };
 
-const { column, operationBtns } = useAccess({
+const { checkSubModuleItemShow, column, operationBtns } = useAccess({
   operationBtnMap,
 });
 
diff --git a/src/views/EmploymentManage/CheckReceiveTaskDetail.vue b/src/views/EmploymentManage/CheckReceiveTaskDetail.vue
index dba13ae..d4b19e3 100644
--- a/src/views/EmploymentManage/CheckReceiveTaskDetail.vue
+++ b/src/views/EmploymentManage/CheckReceiveTaskDetail.vue
@@ -87,13 +87,14 @@
         !(
           (row.checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitCheckReceive ||
             row.checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitSubmit) &&
-          row.checkReceiveMethods.includes(EnumTaskCheckReceiveMethod.Submit)
+          row.checkReceiveMethods.includes(EnumTaskCheckReceiveMethod.Submit) &&
+          taskInfo.value?.isInternal
         ),
     },
   },
 };
 
-const { column, operationBtns } = useAccess({
+const { checkSubModuleItemShow, column, operationBtns } = useAccess({
   operationBtnMap,
 });
 
@@ -116,6 +117,8 @@
 const BaseState = {
   loading: true,
   checkReceiveMethods: [] as any as EnumTaskCheckReceiveMethod[],
+
+  isInternal: false,
 };
 
 const state = reactive({ ...BaseState });
@@ -152,6 +155,7 @@
         showLoading: !state.loading,
       });
       state.checkReceiveMethods = res.objectData?.checkReceiveMethods;
+      state.isInternal = res.objectData?.isInternal;
       return res;
     } catch (error) {}
   },
@@ -178,23 +182,25 @@
   //     id: row.id,
   //   });
   // } else {
+  // }
   handleEdit({
     id: row.id,
+    checkReceiveMethods: state.checkReceiveMethods,
+    isInternal: state.isInternal,
     tabType: state.checkReceiveMethods.includes(EnumTaskCheckReceiveMethod.CheckIn)
       ? 'signRecord'
       : '',
-    checkReceiveMethods: state.checkReceiveMethods,
     isDetail,
   });
-  // }
 }
 
 const { dialogProps, handleEdit } = useFormDialog({
   defaultFormParams: {
     id: '',
-    tabType: '',
     checkReceiveMethods: [] as any as EnumTaskCheckReceiveMethod[],
+    isInternal: false,
     isDetail: false,
+    tabType: '',
   },
 });
 
diff --git a/src/views/EmploymentManage/EmploymentManageArrange.vue b/src/views/EmploymentManage/EmploymentManageArrange.vue
index b07e95d..72bfd5a 100644
--- a/src/views/EmploymentManage/EmploymentManageArrange.vue
+++ b/src/views/EmploymentManage/EmploymentManageArrange.vue
@@ -48,6 +48,7 @@
   AppContainer,
   QueryFilterItem,
   useTable,
+  FieldDatePicker,
   FieldRadio,
 } from '@bole-core/components';
 import { Message } from '@bole-core/core';
@@ -69,21 +70,12 @@
     },
     extraProps: {
       hide: (row: API.GetArrangeTaskUsersQueryResultItem) =>
-        row.arrangeStatus === EnumTaskUserArrangeStatus.Complete,
-    },
-  },
-  cancelRecruitBtn: {
-    emits: {
-      onClick: (role) => setTaskUserHire(role, EnumTaskUserHireStatus.Cancel),
-    },
-    extraProps: {
-      hide: (row: API.GetArrangeTaskUsersQueryResultItem) =>
-        row.arrangeStatus === EnumTaskUserArrangeStatus.Complete || !row.taskInfoUserId,
+        row.arrangeStatus === EnumTaskUserArrangeStatus.Complete || !state.isInternal,
     },
   },
 };
 
-const { column, operationBtns } = useAccess({
+const { checkSubModuleItemShow, column, operationBtns } = useAccess({
   operationBtnMap,
 });
 
@@ -93,6 +85,7 @@
 
 const BaseState = {
   loading: true,
+  isInternal: false,
 };
 
 const state = reactive({ ...BaseState });
@@ -126,6 +119,9 @@
       let res = await taskUserServices.getArrangeTaskUsers(params, {
         showLoading: !state.loading,
       });
+      if (res) {
+        state.isInternal = res.objectData?.isInternal;
+      }
       return res;
     } catch (error) {
       console.log('error: ', error);
@@ -164,22 +160,4 @@
     }
   } catch (error) {}
 }
-
-async function setTaskUserHire(
-  row: API.GetArrangeTaskUsersQueryResultItem,
-  hireStatus: EnumTaskUserHireStatus
-) {
-  try {
-    await Message.tipMessage(`纭瑕佸彇娑堝綍鐢ㄥ悧锛焋);
-    let params: API.SetTaskUserHireCommand = {
-      id: row.taskInfoUserId,
-      hireStatus: hireStatus,
-    };
-    let res = await taskUserServices.setTaskUserHire(params);
-    if (res) {
-      Message.successMessage('鎿嶄綔鎴愬姛');
-      getList(paginationState.pageIndex);
-    }
-  } catch (error) {}
-}
 </script>
diff --git a/src/views/EmploymentManage/EmploymentSignList.vue b/src/views/EmploymentManage/EmploymentSignList.vue
index 6072f08..23fc1f6 100644
--- a/src/views/EmploymentManage/EmploymentSignList.vue
+++ b/src/views/EmploymentManage/EmploymentSignList.vue
@@ -28,7 +28,6 @@
       </ProTableV2>
     </AppContainer>
     <StaffInfoDialog v-bind="dialogStaffInfoProps" />
-    <RefuseDialog v-bind="dialogProps" />
   </LoadingLayout>
 </template>
 
@@ -51,7 +50,6 @@
 import { convertApi2FormUrlOnlyOne, hiddenIDNumberForEnd4 } from '@/utils';
 import * as taskUserServices from '@/services/api/taskUser';
 import * as enterpriseEmployeeServices from '@/services/api/enterpriseEmployee';
-import RefuseDialog from './components/RefuseDialog.vue';
 
 defineOptions({
   name: 'EmploymentSignList',
@@ -65,34 +63,25 @@
   },
   recruitBtn: {
     emits: {
-      onClick: (role) => handleRecruit(role.id, EnumTaskUserHireStatus.Pass),
+      onClick: (role) => setTaskUserHire(role, EnumTaskUserHireStatus.Pass),
     },
     extraProps: {
       hide: (row: API.GetTaskUsersQueryResultItem) =>
-        row.hireStatus === EnumTaskUserHireStatus.Pass,
-    },
-  },
-  cancelRecruitBtn: {
-    emits: {
-      onClick: (role) => handleCancelRecruit(role.id, EnumTaskUserHireStatus.Cancel),
-    },
-    extraProps: {
-      hide: (row: API.GetTaskUsersQueryResultItem) =>
-        row.hireStatus !== EnumTaskUserHireStatus.Pass,
+        row.hireStatus === EnumTaskUserHireStatus.Pass || !state.isInternal,
     },
   },
   refuseBtn: {
     emits: {
-      onClick: (role) => openRefuseDialog(role),
+      onClick: (role) => setTaskUserHire(role, EnumTaskUserHireStatus.Refuse),
     },
     extraProps: {
       hide: (row: API.GetTaskUsersQueryResultItem) =>
-        row.hireStatus !== EnumTaskUserHireStatus.Wait,
+        row.hireStatus !== EnumTaskUserHireStatus.Wait || !state.isInternal,
     },
   },
 };
 
-const { column, operationBtns } = useAccess({
+const { checkSubModuleItemShow, column, operationBtns } = useAccess({
   operationBtnMap,
 });
 
@@ -101,6 +90,8 @@
 const id = route.params.id as string;
 const BaseState = {
   loading: true,
+
+  isInternal: false,
 };
 
 const state = reactive({ ...BaseState });
@@ -133,6 +124,9 @@
       let res = await taskUserServices.getTaskUsers(params, {
         showLoading: !state.loading,
       });
+      if (res) {
+        state.isInternal = res.objectData?.isInternal;
+      }
       return res;
     } catch (error) {
       console.log('error: ', error);
@@ -204,47 +198,17 @@
   } catch (error) {}
 }
 
-const { dialogProps, handleAdd, editForm } = useFormDialog({
-  onConfirm: handleRefuse,
-  defaultFormParams: {
-    id: '',
-    remark: '',
-  },
-});
-
-async function openRefuseDialog(row: API.GetTaskUsersQueryResultItem) {
+async function setTaskUserHire(
+  row: API.GetTaskUsersQueryResultItem,
+  hireStatus: EnumTaskUserHireStatus
+) {
   try {
-    await Message.tipMessage(`纭瑕佽阿缁濆悧锛焋);
-    handleAdd({
-      id: row.id,
-    });
-  } catch (error) {}
-}
-
-async function handleRefuse() {
-  setTaskUserHire(editForm.id, EnumTaskUserHireStatus.Refuse, editForm.remark);
-}
-
-async function handleRecruit(id: string, hireStatus: EnumTaskUserHireStatus) {
-  try {
-    await Message.tipMessage(`纭瑕佸綍鐢ㄥ悧锛焋);
-    setTaskUserHire(id, hireStatus);
-  } catch (error) {}
-}
-
-async function handleCancelRecruit(id: string, hireStatus: EnumTaskUserHireStatus) {
-  try {
-    await Message.tipMessage(`纭瑕佸彇娑堝綍鐢ㄥ悧锛焋);
-    setTaskUserHire(id, hireStatus);
-  } catch (error) {}
-}
-
-async function setTaskUserHire(id: string, hireStatus: EnumTaskUserHireStatus, remark?: string) {
-  try {
+    await Message.tipMessage(
+      `纭瑕�${hireStatus === EnumTaskUserHireStatus.Pass ? '褰曠敤' : '璋㈢粷'}鍚楋紵`
+    );
     let params: API.SetTaskUserHireCommand = {
-      id: id,
+      id: row.id,
       hireStatus: hireStatus,
-      hireRemark: remark,
     };
     let res = await taskUserServices.setTaskUserHire(params);
     if (res) {
diff --git a/src/views/EmploymentManage/StandardOrder.vue b/src/views/EmploymentManage/StandardOrder.vue
new file mode 100644
index 0000000..fe6f3c6
--- /dev/null
+++ b/src/views/EmploymentManage/StandardOrder.vue
@@ -0,0 +1,158 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableQueryFilterBar @on-reset="reset">
+        <template #query>
+          <QueryFilterItem tip-content="棰勭害鐘舵��">
+            <FieldSelect v-model="extraParamState.status" :value-enum="[]" @change="getList()" />
+          </QueryFilterItem>
+          <QueryFilterItem tip-content="璁㈠崟鐘舵��">
+            <FieldSelect v-model="extraParamState.status" :value-enum="[]" @change="getList()" />
+          </QueryFilterItem>
+          <QueryFilterItem tip-content="涓嬪崟鏃堕棿">
+            <FieldDatePicker
+              v-model="extraParamState.time"
+              type="daterange"
+              range-separator="~"
+              start-placeholder="寮�濮嬫棩鏈�"
+              end-placeholder="缁撴潫鏃ユ湡"
+              clearable
+              @change="getList()"
+            ></FieldDatePicker>
+          </QueryFilterItem>
+          <QueryFilterItem tip-content="鏀粯鏃堕棿">
+            <FieldDatePicker
+              v-model="extraParamState.time"
+              type="daterange"
+              range-separator="~"
+              start-placeholder="寮�濮嬫棩鏈�"
+              end-placeholder="缁撴潫鏃ユ湡"
+              clearable
+              @change="getList()"
+            ></FieldDatePicker>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.keywords"
+              style="width: 260px"
+              placeholder="璁㈠崟鍙�/鏈嶅姟鍚�"
+              @on-click-search="getList"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+        </template>
+      </ProTableQueryFilterBar>
+      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
+      </ProTableV2>
+    </AppContainer>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  ProTableQueryFilterBar,
+  ProTableV2,
+  SearchInput,
+  LoadingLayout,
+  AppContainer,
+  QueryFilterItem,
+  useTable,
+  FieldDatePicker,
+  FieldSelect,
+} from '@bole-core/components';
+import { EnumTaskStatusText, EnumTaskReleaseStatusText } from '@/constants';
+import { useGlobalEventContext } from '@/hooks';
+import * as taskServices from '@/services/api/task';
+import { format, OrderUtils } from '@/utils';
+import { ModelValueType } from 'element-plus';
+import { Message } from '@bole-core/core';
+import dayjs from 'dayjs';
+
+defineOptions({
+  name: 'StandardOrder',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+  detailBtn: {
+    emits: {
+      onClick: (row: API.GetTaskInfosQueryResultItem) => goDetail(row),
+    },
+  },
+  confirmBtn: {
+    emits: {
+      onClick: (row: API.GetTaskInfosQueryResultItem) => goDetail(row),
+    },
+  },
+};
+
+const { checkSubModuleItemShow, column, operationBtns } = useAccess({
+  operationBtnMap,
+});
+
+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.GetTaskInfosQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          orderInput: extraParamState.orderInput,
+        },
+        keywords: extraParamState.keywords,
+        status: extraParamState.status,
+        releaseStatus: extraParamState.releaseStatus,
+        beginTime: format(extraParamState.time?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
+        endTime: format(extraParamState.time?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
+      };
+
+      let res = await taskServices.getTaskInfos(params, {
+        showLoading: !state.loading,
+      });
+      return res;
+    } catch (error) {
+      console.log('error: ', error);
+    }
+  },
+  {
+    defaultExtraParams: {
+      keywords: '',
+      status: '' as any as EnumTaskStatus,
+      releaseStatus: '' as any as EnumTaskReleaseStatus,
+      time: [] as unknown as ModelValueType,
+      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
+    },
+    queryKey: ['taskServices/getTaskInfos'],
+    columnsRenderProps: {
+      endTime: { type: 'date', format: 'YYYY-MM-DD' },
+    },
+  }
+);
+
+function goDetail(row: API.GetTaskInfosQueryResultItem) {
+  router.push({
+    name: 'StandardOrderDetail',
+    params: {
+      id: row?.id ?? '',
+    },
+  });
+}
+</script>
diff --git a/src/views/EmploymentManage/StandardOrderDetail.vue b/src/views/EmploymentManage/StandardOrderDetail.vue
new file mode 100644
index 0000000..3ae7fae
--- /dev/null
+++ b/src/views/EmploymentManage/StandardOrderDetail.vue
@@ -0,0 +1,180 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppScrollContainer>
+      <ChunkCell title="鐘舵��">
+        <ProForm :model="form" ref="formRef" label-width="120px" :is-read="true">
+          <ProFormItemV2 label="棰勭害鐘舵��:" prop="cooperationStatus">
+            <ProFormRadio v-model="form.access" :value-enum="EnumWalletTransactionStatusText" />
+          </ProFormItemV2>
+          <ProFormItemV2 label="璁㈠崟鐘舵��:" prop="cooperationStatus">
+            <ProFormRadio v-model="form.access" :value-enum="EnumWalletTransactionStatusText" />
+          </ProFormItemV2>
+          <ProFormItemV2 label="缁撶畻鐘舵��:" prop="cooperationStatus">
+            <ProFormRadio v-model="form.access" :value-enum="EnumWalletTransactionStatusText" />
+          </ProFormItemV2>
+        </ProForm>
+      </ChunkCell>
+      <ChunkCell title="璁㈠崟淇℃伅">
+        <ProForm :model="form" ref="formRef" label-width="120px" :is-read="true">
+          <ProFormItemV2 label="鏈嶅姟鍗曞彿:" prop="cooperationStatus">
+            <ProFormText v-model.trim="form.access" />
+          </ProFormItemV2>
+          <ProFormItemV2 label="涓嬪崟鐢ㄦ埛:" prop="cooperationStatus">
+            <ProFormText v-model.trim="form.access" />
+          </ProFormItemV2>
+          <ProFormItemV2 label="鏈嶅姟鏃堕棿:" prop="cooperationStatus">
+            <ProFormDatePicker
+              v-model="form.access"
+              type="date"
+              value-format="YYYY-MM-DD"
+              placeholder="璇烽�夋嫨鏃ユ湡"
+            ></ProFormDatePicker>
+          </ProFormItemV2>
+          <ProFormItemV2 label="鏈嶅姟鍦板潃:" prop="cooperationStatus">
+            <ProFormText v-model.trim="form.access" />
+          </ProFormItemV2>
+          <ProFormItemV2 label="鏈嶅姟鏈烘瀯:" prop="cooperationStatus">
+            <ProFormText v-model.trim="form.access" />
+          </ProFormItemV2>
+          <ProFormItemV2 label="鏈嶅姟浜哄憳:" prop="cooperationStatus">
+            <ProFormText v-model.trim="form.access" />
+          </ProFormItemV2>
+          <ProFormItemV2 label="澶囨敞:" prop="cooperationStatus">
+            <ProFormText v-model.trim="form.access" />
+          </ProFormItemV2>
+          <ProFormItemV2 label="瀹炰粯娆�:" prop="invoiceTaxPointRate">
+            <ProFormInputNumber v-model="form.balance" :controls="false" :min="0" :precision="2" />
+          </ProFormItemV2>
+          <ProFormItemV2 label="瀹炴敹娆�:" prop="cooperationStatus">
+            <ProFormInputNumber v-model="form.balance" :controls="false" :min="0" :precision="2" />
+          </ProFormItemV2>
+          <ProFormItemV2 label="鏈嶅姟璐�:" prop="cooperationStatus">
+            <ProFormInputNumber v-model="form.balance" :controls="false" :min="0" :precision="2" />
+          </ProFormItemV2>
+          <ProFormItemV2 label="缁撶畻娆�:" prop="cooperationStatus">
+            <ProFormInputNumber v-model="form.balance" :controls="false" :min="0" :precision="2" />
+          </ProFormItemV2>
+        </ProForm>
+        <ProTableV2
+          v-bind="proTableProps"
+          :columns="column"
+          :show-operation-column="false"
+          :auto-height="false"
+          :table-props="{
+            height: '400px',
+          }"
+        >
+        </ProTableV2>
+
+        <div class="chuck-add-or-edit-actions">
+          <el-button class="chuck-add-or-edit-actions" @click="handleBack">鍙栨秷棰勭害</el-button>
+          <el-button type="primary" class="chuck-add-or-edit-actions" @click="handleSubmit"
+            >纭棰勭害</el-button
+          >
+        </div>
+      </ChunkCell>
+    </AppScrollContainer>
+  </LoadingLayout>
+</template>
+<script setup lang="ts">
+import {
+  LoadingLayout,
+  AppScrollContainer,
+  ChunkCell,
+  ProForm,
+  ProFormItemV2,
+  ProFormText,
+  ProFormRadio,
+  ProFormDatePicker,
+  ProFormInputNumber,
+  useTable,
+  ProTableV2,
+} from '@bole-core/components';
+import { EnumWalletTransactionStatusText } from '@/constants';
+import * as userServices from '@/services/api/user';
+import { format, setOSSLink } from '@/utils';
+import { useRouteView } from '@/hooks';
+
+defineOptions({
+  name: 'StandardOrderDetail',
+});
+
+const { column, operationBtns } = useAccess({});
+
+const route = useRoute();
+const { closeViewPush } = useRouteView();
+const id = (route.params.id as string) ?? '';
+
+const form = reactive({
+  identity: '',
+  access: '' as any as EnumEnterpriseWalletAccess,
+  balance: 0,
+});
+
+const BaseState = {
+  loading: true,
+};
+
+const state = reactive({ ...BaseState });
+
+const {
+  getDataSource: getList,
+  proTableProps,
+  paginationState,
+  extraParamState,
+  reset,
+} = useTable(
+  async ({ pageIndex, pageSize }, extraParamState) => {
+    try {
+      let params: API.GetPersonalUserTransactionsQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          orderInput: extraParamState.orderInput,
+        },
+        enterpriseWalletId: id,
+      };
+      let res = await userServices.getPersonalUserTransactions(params);
+      if (res.objectData?.enterpriseWallet) {
+        form.identity = res.objectData.enterpriseWallet.identity;
+        form.access = res.objectData.enterpriseWallet.access;
+        form.balance = res.objectData.enterpriseWallet.balance;
+      }
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
+    },
+    columnsRenderProps: {
+      transDate: { type: 'date' },
+      sendTime: { type: 'date' },
+      amount: { type: 'money' },
+      transactionStatus: { type: 'enum', valueEnum: EnumWalletTransactionStatusText },
+      ereceiptDownloadOssUrl: {
+        type: 'url',
+        formatter: (row: API.GetPersonalUserTransactionsQueryResultItem) =>
+          row.ereceiptDownloadOssUrl ? setOSSLink(row.ereceiptDownloadOssUrl) : '',
+      },
+    },
+  }
+);
+
+onMounted(() => {
+  state.loading = false;
+  getList();
+});
+
+function handleBack() {
+  closeViewPush(route, {
+    name: 'TaskManageList',
+  });
+}
+
+async function handleSubmit() {}
+</script>
+
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+</style>
diff --git a/src/views/EmploymentManage/TaskArrange.vue b/src/views/EmploymentManage/TaskArrange.vue
index c74d1b0..a445ce2 100644
--- a/src/views/EmploymentManage/TaskArrange.vue
+++ b/src/views/EmploymentManage/TaskArrange.vue
@@ -3,61 +3,18 @@
     <AppContainer>
       <ProTableQueryFilterBar @on-reset="reset">
         <template #query>
-          <QueryFilterItem tip-content="浠诲姟鐘舵��">
-            <FieldRadio
-              v-model="extraParamState.status"
-              :value-enum="EnumTaskStatusText"
-              buttonStyle
-              showAllBtn
-              @change="getList()"
-            />
-          </QueryFilterItem>
-          <QueryFilterItem tip-content="鍙戝竷鐘舵��">
-            <FieldRadio
-              v-model="extraParamState.releaseStatus"
-              :value-enum="EnumTaskReleaseStatusText"
-              buttonStyle
-              showAllBtn
-              @change="getList()"
-            />
-          </QueryFilterItem>
-          <QueryFilterItem tip-content="鍙戝竷鏃堕棿">
-            <FieldDatePicker
-              v-model="extraParamState.time"
-              type="daterange"
-              range-separator="~"
-              start-placeholder="寮�濮嬫棩鏈�"
-              end-placeholder="缁撴潫鏃ユ湡"
-              clearable
-              @change="getList()"
-            ></FieldDatePicker>
-          </QueryFilterItem>
           <QueryFilterItem>
             <SearchInput
               v-model="extraParamState.keywords"
               style="width: 260px"
-              placeholder="浠诲姟鍚嶇О/瀹㈡埛"
+              placeholder="濮撳悕/韬唤璇佸彿/鎵嬫満鍙�"
               @on-click-search="getList"
             >
             </SearchInput>
           </QueryFilterItem>
         </template>
-        <template #btn>
-          <el-button
-            v-if="checkSubModuleItemShow('pageButton', 'addBtn')"
-            @click="goAddOrEdit()"
-            type="primary"
-            >鍙戝竷</el-button
-          >
-        </template>
       </ProTableQueryFilterBar>
       <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
-        <template #userCount="{ row }">
-          <el-button v-if="!row.isInternal" link type="primary" @click="goSignList(row)">{{
-            row.userCount || 0
-          }}</el-button>
-          <span v-else>/</span>
-        </template>
       </ProTableV2>
     </AppContainer>
   </LoadingLayout>
@@ -72,64 +29,20 @@
   AppContainer,
   QueryFilterItem,
   useTable,
-  FieldDatePicker,
-  FieldRadio,
-  defineOperationBtns,
 } from '@bole-core/components';
-import { EnumTaskStatusText, EnumTaskReleaseStatusText } from '@/constants';
-import { useGlobalEventContext } from '@/hooks';
 import * as taskServices from '@/services/api/task';
-import { format, OrderUtils } from '@/utils';
-import { ModelValueType } from 'element-plus';
-import { Message } from '@bole-core/core';
-import dayjs from 'dayjs';
 
 defineOptions({
   name: 'TaskArrange',
 });
 
 const operationBtnMap: Record<string, OperationBtnType> = {
-  // editBtn: {
-  //   emits: {
-  //     onClick: (role) => goAddOrEdit(role),
-  //   },
-  //   extraProps: {
-  //     hide: (row: API.GetTaskInfosQueryResultItem) =>
-  //       row.status === EnumTaskStatus.Complete || !row.isInternal,
-  //   },
-  // },
-  // detailBtn: {
-  //   emits: {
-  //     onClick: (row: API.GetTaskInfosQueryResultItem) => goDetail(row),
-  //   },
-  // },
-  // publishBtn: {
-  //   emits: {
-  //     onClick: (row: API.GetTaskInfosQueryResultItem) =>
-  //       setTaskInfoReleaseStatus(row, EnumTaskReleaseStatus.InProcess),
-  //   },
-  //   extraProps: {
-  //     hide: (row: API.GetTaskInfosQueryResultItem) =>
-  //       row.releaseStatus === EnumTaskReleaseStatus.InProcess || !row.isInternal,
-  //   },
-  // },
-  // unPublishBtn: {
-  //   emits: {
-  //     onClick: (row: API.GetTaskInfosQueryResultItem) =>
-  //       setTaskInfoReleaseStatus(row, EnumTaskReleaseStatus.Stopped),
-  //   },
-  //   extraProps: {
-  //     hide: (row: API.GetTaskInfosQueryResultItem) =>
-  //       row.releaseStatus === EnumTaskReleaseStatus.Stopped || !row.isInternal,
-  //   },
-  // },
   arrangeBtn: {
     emits: {
       onClick: (row: API.GetTaskInfosQueryResultItem) => handleArrange(row),
     },
     extraProps: {
-      hide: (row: API.GetTaskInfosQueryResultItem) =>
-        row.releaseStatus === EnumTaskReleaseStatus.Stopped || !row.isInternal,
+      hide: (row: API.GetTaskInfosQueryResultItem) => false,
     },
   },
 };
@@ -146,16 +59,6 @@
 
 const state = reactive({ ...BaseState });
 
-const eventContext = useGlobalEventContext();
-
-eventContext.addEvent('taskManage:add', () => {
-  getList();
-});
-
-eventContext.addEvent('taskManage:edit', () => {
-  getList(paginationState.pageIndex);
-});
-
 onMounted(async () => {
   await getList();
   state.loading = false;
@@ -177,10 +80,6 @@
           orderInput: extraParamState.orderInput,
         },
         keywords: extraParamState.keywords,
-        status: extraParamState.status,
-        releaseStatus: extraParamState.releaseStatus,
-        beginTime: format(extraParamState.time?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
-        endTime: format(extraParamState.time?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
       };
 
       let res = await taskServices.getTaskInfos(params, {
@@ -194,66 +93,13 @@
   {
     defaultExtraParams: {
       keywords: '',
-      status: '' as any as EnumTaskStatus,
-      releaseStatus: '' as any as EnumTaskReleaseStatus,
-      time: [] as unknown as ModelValueType,
       orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
     },
     queryKey: ['taskServices/getTaskInfos'],
-    columnsRenderProps: {
-      billingMethod: { type: 'enum', valueEnum: EnumBillingMethodText },
-      settlementCycle: { type: 'enum', valueEnum: EnumSettlementCycleText },
-      genderLimit: { type: 'enum', valueEnum: EnumUserGenderText },
-      status: { type: 'enum', valueEnum: EnumTaskStatusText },
-      releaseStatus: { type: 'enum', valueEnum: EnumTaskReleaseStatusText },
-      createdTime: { type: 'date', format: 'YYYY-MM-DD' },
-      beginTime: { type: 'date', format: 'YYYY-MM-DD' },
-      endTime: { type: 'date', format: 'YYYY-MM-DD' },
-      serviceFee: {
-        type: 'money',
-        formatter: (row: API.GetTaskInfosQueryResultItem) => {
-          return OrderUtils.getServiceFeeText(row.serviceFee, row.billingMethod);
-        },
-      },
-      applyBeginTime: { type: 'date', format: 'YYYY-MM-DD' },
-      applyEndTime: { type: 'date', format: 'YYYY-MM-DD' },
-      //@ts-ignore
-      applyStatus: {
-        formatter: (row: API.GetTaskInfosQueryResultItem) => {
-          const applyBeginTime = dayjs(row.applyBeginTime);
-          const applyEndTime = dayjs(row.applyEndTime);
-          const now = dayjs();
-          if (applyEndTime.isBefore(now)) {
-            return '宸茬粨鏉�';
-          } else if (applyBeginTime.isAfter(now)) {
-            return '寰呭紑濮�';
-          } else {
-            return '杩涜涓�';
-          }
-        },
-      },
-    },
+    columnsRenderProps: {},
   }
 );
 
-async function setTaskInfoReleaseStatus(
-  row: API.GetTaskInfosQueryResultItem,
-  releaseStatus: EnumTaskReleaseStatus
-) {
-  try {
-    await Message.tipMessage(`纭瑕�${EnumTaskReleaseStatusTextForTip[releaseStatus]}鍚楋紵`);
-    let params: API.SetTaskInfoReleaseStatusCommand = {
-      ids: [row.id],
-      releaseStatus: releaseStatus,
-    };
-    let res = await taskServices.setTaskInfoReleaseStatus(params);
-    if (res) {
-      Message.successMessage('鎿嶄綔鎴愬姛');
-      getList(paginationState.pageIndex);
-    }
-  } catch (error) {}
-}
-
 function handleArrange(row: API.GetTaskInfosQueryResultItem) {
   router.push({
     name: 'EmploymentManageArrange',
@@ -262,32 +108,4 @@
     },
   });
 }
-function goAddOrEdit(row?: API.GetTaskInfosQueryResultItem) {
-  router.push({
-    name: 'AddOrEditEmployment',
-    params: {
-      id: row?.id ?? '',
-    },
-    query: {
-      supplierEnterpriseId: row?.supplierEnterpriseId,
-    },
-  });
-}
-function goDetail(row: API.GetTaskInfosQueryResultItem) {
-  router.push({
-    name: 'EmploymentManageDetail',
-    params: {
-      id: row?.id ?? '',
-    },
-  });
-}
-
-function goSignList(row: API.GetTaskInfosQueryResultItem) {
-  router.push({
-    name: 'EmploymentSignList',
-    params: {
-      id: row?.id ?? '',
-    },
-  });
-}
 </script>
diff --git a/src/views/EmploymentManage/TaskArrangeDetail.vue b/src/views/EmploymentManage/TaskArrangeDetail.vue
new file mode 100644
index 0000000..b6bf954
--- /dev/null
+++ b/src/views/EmploymentManage/TaskArrangeDetail.vue
@@ -0,0 +1,274 @@
+<template>
+  <LoadingLayout :loading="isLoading">
+    <AppScrollContainer>
+      <ChunkCell title="浜哄憳淇℃伅">
+        <ProForm :model="form" ref="formRef" label-width="120px" :is-read="true">
+          <ProFormCol>
+            <ProFormColItem :span="12">
+              <ProFormItemV2 label="濮撳悕锛�" prop="name">
+                <ProFormText v-model.trim="form.name"></ProFormText>
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="12">
+              <ProFormItemV2 label="鏈嶅姟鍗忚锛�" prop="contractUrl">
+                <ProFormUpload
+                  v-model:file-url="form.contractUrl"
+                  :limit="1"
+                  :limitFileSize="10"
+                  accept="jpg/jpeg,png,pdf"
+                ></ProFormUpload>
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="12">
+              <ProFormItemV2 label="韬唤璇佸彿锛�" prop="identity">
+                <ProFormText v-model.trim="form.identity"></ProFormText>
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="12">
+              <ProFormItemV2 label="鍗忚鏃堕棿:" prop="contractTime">
+                <ProFormDatePicker
+                  v-model="form.contractTime"
+                  type="daterange"
+                  range-separator="鑷�"
+                ></ProFormDatePicker>
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="12">
+              <ProFormItemV2 label="鎵嬫満鍙凤細" prop="contactPhoneNumber">
+                <ProFormText v-model.trim="form.contactPhoneNumber"></ProFormText>
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="12">
+              <ProFormItemV2 label="鎬у埆锛�" prop="gender">
+                <ProFormRadio
+                  v-model="form.gender"
+                  :value-enum="EnumUserGenderTextForPerson"
+                ></ProFormRadio>
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="12">
+              <ProFormItemV2 label="骞撮緞锛�" prop="age">
+                <ProFormInputNumber v-model="form.age" :controls="false" unit="宀�" />
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+        </ProForm>
+      </ChunkCell>
+      <ChunkCell title="浠诲姟瀹夋帓">
+        <ProTableQueryFilterBar>
+          <template #btn>
+            <el-button
+              v-if="checkSubModuleItemShow('pageButton', 'addBtn')"
+              type="primary"
+              link
+              @click="handleAdd()"
+              >鏂板浠诲姟</el-button
+            >
+          </template>
+        </ProTableQueryFilterBar>
+        <ProTableV2
+          v-bind="proTableProps"
+          :columns="column"
+          :operationBtns="operationBtns"
+          :auto-height="false"
+          ref="proTable"
+          :tableProps="{
+            maxHeight: '400px',
+          }"
+        >
+        </ProTableV2>
+        <div class="chuck-add-or-edit-actions">
+          <el-button class="chuck-add-or-edit-actions" @click="handleBack">鍙栨秷</el-button>
+        </div>
+      </ChunkCell>
+    </AppScrollContainer>
+    <AddTaskDialog v-bind="dialogProps"></AddTaskDialog>
+  </LoadingLayout>
+</template>
+<script setup lang="ts">
+import {
+  LoadingLayout,
+  ProFormUpload,
+  AppScrollContainer,
+  ChunkCell,
+  ProForm,
+  ProFormItemV2,
+  ProFormText,
+  ProFormCol,
+  ProFormColItem,
+  ProFormDatePicker,
+  ProFormInputNumber,
+  useTable,
+  ProTableV2,
+  ProFormRadio,
+  ProTableQueryFilterBar,
+  useFormDialog,
+  UploadUserFile,
+} from '@bole-core/components';
+import { useQuery } from '@tanstack/vue-query';
+import * as taskUserServices from '@/services/api/taskUser';
+import AddTaskDialog from './components/AddTaskDialog.vue';
+import { EnumUserGenderTextForPerson } from '@/constants';
+import { paginateList } from '@/utils';
+
+defineOptions({
+  name: 'TaskArrangeDetail',
+});
+
+const { closeViewPush } = useRouteView();
+const eventContext = useGlobalEventContext();
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+  arrangeBtn: {
+    emits: {
+      onClick: (role) => openDialog(role),
+    },
+    extraProps: {
+      hide: (row: API.GetSettlementTaskUsersQueryResultItem) => false,
+    },
+  },
+  cancelArrangeBtn: {
+    emits: {
+      onClick: (role) => openDialog(role),
+    },
+    extraProps: {
+      hide: (row: API.GetSettlementTaskUsersQueryResultItem) => false,
+    },
+  },
+};
+const { column, operationBtns, checkSubModuleItemShow } = useAccess({
+  operationBtnMap,
+});
+
+const route = useRoute();
+const id = (route.params.id as string) ?? '';
+
+const form = reactive({
+  name: '',
+  contractUrl: [] as UploadUserFile[],
+  contractTime: [],
+  contactPhoneNumber: '',
+  gender: '',
+  age: 0,
+  identity: '',
+  settlementTaskUsers: [] as API.GetSettlementTaskUsersQueryResultItem[],
+});
+
+const BaseState = {
+  loading: true,
+};
+
+const state = reactive({ ...BaseState });
+
+const { isLoading, refetch } = useQuery({
+  queryKey: ['taskUserServices/getSettlementTaskUsers', id],
+  queryFn: async () => {
+    let params: API.APIgetSettlementTaskUsersParams = {
+      id: id,
+    };
+    return await taskUserServices.getSettlementTaskUsers(params, {
+      showLoading: false,
+    });
+  },
+  placeholderData: () => ({} as API.GetSettlementTaskUsersQueryResult),
+  onSuccess(res) {
+    form.settlementTaskUsers = res?.data ?? [];
+    if (res?.detail) {
+      form.name = res?.detail?.name;
+    }
+    getList();
+  },
+  enabled: !!id,
+});
+
+const {
+  getDataSource: getList,
+  proTableProps,
+  paginationState,
+  extraParamState,
+  reset,
+} = useTable(
+  async ({ pageIndex, pageSize }, extraParamState) => {
+    try {
+      let list = [...form.settlementTaskUsers];
+      if (extraParamState.keywords) {
+        list = list?.filter((item) => {
+          return (
+            item.name.includes(extraParamState.keywords) ||
+            item.contactPhoneNumber.includes(extraParamState.keywords) ||
+            item.identity.includes(extraParamState.keywords)
+          );
+        });
+      }
+
+      return Promise.resolve({
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          totalCount: list.length,
+        },
+        data: paginateList(list, pageIndex, pageSize),
+      });
+    } catch (error) {
+      console.log('error: ', error);
+    }
+  },
+  {
+    defaultExtraParams: {
+      keywords: '',
+      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
+    },
+    queryKey: ['taskUserServices/getSettlementTaskUsers'],
+    columnsRenderProps: {
+      settlementTime: { type: 'date' },
+    },
+  }
+);
+
+const { dialogProps, handleAdd, handleEdit, editForm } = useFormDialog({
+  onConfirm: handleAddOrEdit,
+  defaultFormParams: {
+    id: '',
+  },
+});
+
+function openDialog(row?: API.GetSettlementTaskUsersQueryResultItem) {
+  if (row) {
+    handleEdit({
+      id: row?.id,
+    });
+  }
+}
+
+async function handleAddOrEdit() {
+  try {
+    // let params: API.EditTaskSettlementOrderRosterCommand = {
+    //   id: editForm.id,
+    // };
+    // let res = await taskServices.editTaskSettlementOrderRoster(params);
+    // if (res) {
+    //   Message.successMessage('鎿嶄綔鎴愬姛');
+    //   refetch();
+    //   getList(paginationState.pageIndex);
+    // }
+  } catch (error) {}
+}
+
+function handleBack() {
+  closeViewPush(route, {
+    name: 'ServiceChargeManageList',
+  });
+}
+</script>
+
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+</style>
diff --git a/src/views/EmploymentManage/TaskManageList.vue b/src/views/EmploymentManage/TaskManageList.vue
index aaf8578..70829b7 100644
--- a/src/views/EmploymentManage/TaskManageList.vue
+++ b/src/views/EmploymentManage/TaskManageList.vue
@@ -36,7 +36,7 @@
             <SearchInput
               v-model="extraParamState.keywords"
               style="width: 260px"
-              placeholder="浠诲姟鍚嶇О"
+              placeholder="浠诲姟鍚嶇О/瀹㈡埛"
               @on-click-search="getList"
             >
             </SearchInput>
@@ -53,9 +53,10 @@
       </ProTableQueryFilterBar>
       <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
         <template #userCount="{ row }">
-          <el-button link type="primary" @click="goSignList(row)">{{
+          <el-button v-if="!row.isInternal" link type="primary" @click="goSignList(row)">{{
             row.userCount || 0
           }}</el-button>
+          <span v-else>/</span>
         </template>
       </ProTableV2>
     </AppContainer>
@@ -73,6 +74,7 @@
   useTable,
   FieldDatePicker,
   FieldRadio,
+  defineOperationBtns,
 } from '@bole-core/components';
 import { EnumTaskStatusText, EnumTaskReleaseStatusText } from '@/constants';
 import { useGlobalEventContext } from '@/hooks';
@@ -92,7 +94,8 @@
       onClick: (role) => goAddOrEdit(role),
     },
     extraProps: {
-      hide: (row: API.GetTaskInfosQueryResultItem) => row.status === EnumTaskStatus.Complete,
+      hide: (row: API.GetTaskInfosQueryResultItem) =>
+        row.status === EnumTaskStatus.Complete || !row.isInternal,
     },
   },
   detailBtn: {
@@ -107,7 +110,7 @@
     },
     extraProps: {
       hide: (row: API.GetTaskInfosQueryResultItem) =>
-        row.releaseStatus === EnumTaskReleaseStatus.InProcess,
+        row.releaseStatus === EnumTaskReleaseStatus.InProcess || !row.isInternal,
     },
   },
   unPublishBtn: {
@@ -117,7 +120,7 @@
     },
     extraProps: {
       hide: (row: API.GetTaskInfosQueryResultItem) =>
-        row.releaseStatus === EnumTaskReleaseStatus.Stopped,
+        row.releaseStatus === EnumTaskReleaseStatus.Stopped || !row.isInternal,
     },
   },
   arrangeBtn: {
@@ -126,7 +129,7 @@
     },
     extraProps: {
       hide: (row: API.GetTaskInfosQueryResultItem) =>
-        row.releaseStatus === EnumTaskReleaseStatus.Stopped,
+        row.releaseStatus === EnumTaskReleaseStatus.Stopped || !row.isInternal,
     },
   },
 };
@@ -207,7 +210,7 @@
       beginTime: { type: 'date', format: 'YYYY-MM-DD' },
       endTime: { type: 'date', format: 'YYYY-MM-DD' },
       serviceFee: {
-        type: 'text',
+        type: 'money',
         formatter: (row: API.GetTaskInfosQueryResultItem) => {
           return OrderUtils.getServiceFeeText(row.serviceFee, row.billingMethod);
         },
@@ -265,6 +268,9 @@
     params: {
       id: row?.id ?? '',
     },
+    query: {
+      supplierEnterpriseId: row?.supplierEnterpriseId,
+    },
   });
 }
 function goDetail(row: API.GetTaskInfosQueryResultItem) {
diff --git a/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue b/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue
index d130636..f15f78d 100644
--- a/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue
+++ b/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue
@@ -3,19 +3,6 @@
     <AppContainer>
       <PageFormLayout title="鍩烘湰淇℃伅">
         <ProForm :model="form" ref="productFormRef" label-width="120px" :is-read="isDetail">
-          <ProFormItemV2
-            label="渚涘簲鍟�:"
-            prop="supplierEnterpriseId"
-            :check-rules="[{ message: '璇烽�夋嫨渚涘簲鍟�' }]"
-          >
-            <ProFormSelect
-              v-model="form.supplierEnterpriseId"
-              :value-enum="supplierEnterpriseSelect"
-              placeholder="璇烽�夋嫨渚涘簲鍟�"
-              :disabled="isEdit"
-              @change="supplierEnterpriseChange"
-            ></ProFormSelect>
-          </ProFormItemV2>
           <ProFormCol>
             <ProFormColItem :span="12">
               <ProFormItemV2
@@ -65,6 +52,7 @@
                     },
                   },
                 ]"
+                @change="calcTaskTotalServiceFee"
               >
                 <RadioWithExtra
                   v-model="form.billingMethod"
@@ -72,7 +60,6 @@
                   :showExtra="true"
                   :button-style="false"
                   :disabled="feeCannotEdit"
-                  @change="calcTaskTotalServiceFee"
                 >
                   <template #extra>
                     <ProFormInputNumber
@@ -91,7 +78,7 @@
               </ProFormItemV2>
             </ProFormColItem>
           </ProFormCol>
-          <template v-if="form.billingMethod === EnumBillingMethod.Hour">
+          <template v-if="form.billingMethod === EnumBillingMethod.Day">
             <ProFormCol>
               <ProFormColItem :span="12">
                 <ProFormItemV2
@@ -384,21 +371,6 @@
               </ProFormItemV2>
             </ProFormColItem>
           </ProFormCol>
-          <ProFormItemV2
-            label="淇濋櫓浜у搧:"
-            prop="insuranceProductId"
-            :check-rules="[{ message: '璇烽�夋嫨淇濋櫓浜у搧' }]"
-            v-if="
-              form.checkReceiveMethods.includes(EnumTaskCheckReceiveMethod.CheckIn) &&
-              form.isConfiguredInsurance
-            "
-          >
-            <ProFormSelect
-              v-model="form.insuranceProductId"
-              :value-enum="enterpriseInsuranceProductSelect"
-              @change="calcTaskTotalServiceFee"
-            ></ProFormSelect>
-          </ProFormItemV2>
           <ProFormItemV2 label="棰勮鏈嶅姟璐规�婚:" prop="totalServiceFee">
             {{ `${toThousand(form.totalServiceFee)}鍏僠 }}
           </ProFormItemV2>
@@ -456,7 +428,7 @@
   EnumSettlementCycleDateWeekArray,
   EnumSettlementCycle,
   EnumTaskCheckReceiveMethodText,
-  EnumTaskCheckReceiveMethod,
+  EnumEnterpriseWalletAccessText,
 } from '@/constants';
 import { format, FormValidator, toThousand } from '@/utils';
 import dayjs from 'dayjs';
@@ -473,7 +445,9 @@
 const id = route.params.id as string;
 const isEdit = !!id;
 
-const { supplierEnterpriseSelect } = useGetSupplierEnterpriseSelect();
+const { settlementAccessList } = useEnterpriseWalletAccessSelect({
+  supplierEnterpriseId: computed(() => ''),
+});
 
 function disabledDate(time: Date) {
   return dayjs(time).isBefore(dayjs(), 'day');
@@ -518,12 +492,11 @@
 const form = reactive({
   supplierEnterpriseId: '',
   name: '',
-  needPeopleNumber: null as number,
   billingMethod: EnumBillingMethod.Day,
   serviceFee: null,
-  totalPieceQuantity: null as number,
   settlementCycle: EnumSettlementCycle.Day,
   settlementDate: null as number,
+  totalPieceQuantity: null as number,
   benefits: [] as string[],
   ageMinLimit: null,
   ageMaxLimit: null,
@@ -538,19 +511,9 @@
   checkReceiveMethods: [] as any as EnumTaskCheckReceiveMethod[],
   applyTime: [] as unknown as ModelValueType,
   settlementAccess: '' as any as EnumEnterpriseWalletAccess,
+  needPeopleNumber: null as number,
+
   totalServiceFee: 0,
-
-  insuranceProductId: '',
-  isConfiguredInsurance: false,
-});
-
-const { settlementAccessList } = useEnterpriseWalletAccessSelect({
-  supplierEnterpriseId: computed(() => form.supplierEnterpriseId),
-});
-
-const { enterpriseInsuranceProductSelect } = useEnterpriseInsuranceProductSelect({
-  supplierEnterpriseId: computed(() => form.supplierEnterpriseId),
-  isConfiguredInsurance: computed(() => form.isConfiguredInsurance),
 });
 
 const { isLoading } = useQuery({
@@ -565,14 +528,13 @@
   },
   placeholderData: () => ({} as API.GetTaskInfoQueryResult),
   onSuccess(data) {
-    form.supplierEnterpriseId = data.supplierEnterpriseId;
+    form.supplierEnterpriseId = data.supplierEnterpriseId ?? '';
     form.name = data.name;
-    form.needPeopleNumber = data.needPeopleNumber;
     form.billingMethod = data.billingMethod;
-    form.totalPieceQuantity = data.totalPieceQuantity;
     form.serviceFee = data.serviceFee;
     form.settlementCycle = data.settlementCycle;
     form.settlementDate = data.settlementDate;
+    form.totalPieceQuantity = data.totalPieceQuantity;
     form.benefits = data.benefits?.map((x) => x.benefitCode) ?? [];
     form.ageMinLimit = data.ageMinLimit;
     form.ageMaxLimit = data.ageMaxLimit;
@@ -605,11 +567,8 @@
       format(data.applyEndTime, 'YYYY-MM-DD 23:59:59'),
     ];
     form.settlementAccess = data.settlementAccess;
+    form.needPeopleNumber = data.needPeopleNumber;
     form.totalServiceFee = data.estimatedServiceFee;
-
-    form.insuranceProductId = data.insuranceProductId ?? '';
-
-    supplierEnterpriseChange();
   },
   enabled: isEdit,
 });
@@ -628,7 +587,6 @@
     name: 'TaskManageList',
   });
 }
-
 const productFormRef = ref<FormInstance>();
 function handleConfirm() {
   if (!productFormRef.value) return;
@@ -641,42 +599,6 @@
   });
 }
 
-// function calculateMonthInterval(startDate, endDate) {
-//   const diffInDays = dayjs(endDate).diff(startDate, 'day');
-//   const monthInterval = Math.ceil(diffInDays / 30);
-//   return monthInterval > 15 ? Math.ceil(monthInterval / 30) : monthInterval;
-// }
-
-// const totalServiceFee = computed(() => {
-//   const monthInterval = calculateMonthInterval(form.time[0], form.time[1]);
-//   const dayInterval = dayjs(form.time[1]).diff(dayjs(form.time[0]), 'day');
-//   switch (form.billingMethod) {
-//     case EnumBillingMethod.Month:
-//       return monthInterval * (form.serviceFee ?? 0) * (form.needPeopleNumber ?? 0);
-//     case EnumBillingMethod.Day:
-//       return dayInterval * (form.serviceFee ?? 0) * (form.needPeopleNumber ?? 0);
-//     case EnumBillingMethod.Hour:
-//       return (
-//         dayInterval *
-//         (form.verifyWorkHours ?? 0) *
-//         (form.serviceFee ?? 0) *
-//         (form.needPeopleNumber ?? 0)
-//       );
-//     case EnumBillingMethod.Piece:
-//       return (form.totalPieceQuantity ?? 0) * (form.serviceFee ?? 0);
-//     default:
-//       return form.totalServiceFee;
-//   }
-// });
-
-function supplierEnterpriseChange() {
-  if (form.supplierEnterpriseId) {
-    form.isConfiguredInsurance = supplierEnterpriseSelect.value?.find(
-      (item) => item.value === form.supplierEnterpriseId
-    )?.data?.isConfiguredInsurance;
-  }
-}
-
 async function calcTaskTotalServiceFee() {
   try {
     let params: API.CalcTaskTotalServiceFeeCommand = {
@@ -687,12 +609,7 @@
       needPeopleNumber: form.needPeopleNumber ?? 0,
       beginTime: dayjs(form.time[0]).format('YYYY-MM-DD 00:00:00'),
       endTime: dayjs(form.time[1]).format('YYYY-MM-DD 23:59:59'),
-      supplierEnterpriseId: form.supplierEnterpriseId,
-      checkReceiveMethods: form.checkReceiveMethods,
     };
-    if (form.insuranceProductId) {
-      params.insuranceProductId = form.insuranceProductId;
-    }
     let res = await taskServices.calcTaskTotalServiceFee(params);
     if (res) {
       form.totalServiceFee = res.totalServiceFee;
@@ -732,7 +649,6 @@
       description: form.description,
       checkReceiveMethods: form.checkReceiveMethods,
       settlementAccess: form.settlementAccess,
-      insuranceProductId: form.insuranceProductId ? form.insuranceProductId : null,
     };
     if (form.billingMethod !== EnumBillingMethod.Face) {
       params.serviceFee = form.serviceFee;
@@ -757,7 +673,7 @@
         callback: (action) => {
           if (action === 'confirm') {
             router.push({
-              name: 'BalanceManageV2',
+              name: 'EnterpriseBalanceManage',
             });
           }
         },
diff --git a/src/views/EmploymentManage/components/AddTaskDialog.vue b/src/views/EmploymentManage/components/AddTaskDialog.vue
new file mode 100644
index 0000000..4a18c8a
--- /dev/null
+++ b/src/views/EmploymentManage/components/AddTaskDialog.vue
@@ -0,0 +1,175 @@
+<template>
+  <ProDialog title="鏂板浠诲姟" v-model="visible" width="1200px" destroy-on-close>
+    <ProTableQueryFilterBar>
+      <template #query>
+        <QueryFilterItem>
+          <SearchInput
+            v-model="extraParamState.keywords"
+            style="width: 260px"
+            placeholder="浠诲姟鍚�/浠诲姟鍗曞彿"
+            @on-click-search="getList"
+          >
+          </SearchInput>
+        </QueryFilterItem>
+      </template>
+    </ProTableQueryFilterBar>
+    <ProTableV2
+      v-bind="proTableProps"
+      :columns="column"
+      :operation-btns="operationBtns"
+      :auto-height="false"
+      :table-props="{
+        height: '400px',
+      }"
+    >
+    </ProTableV2>
+    <template #footer>
+      <span class="dialog-footer">
+        <el-button @click="emit('onCancel')">鍙栨秷</el-button>
+        <el-button type="primary" @click="handleConfirm">纭</el-button>
+      </span>
+    </template>
+  </ProDialog>
+</template>
+
+<script setup lang="ts">
+import {
+  ProDialog,
+  useTable,
+  defineColumns,
+  ProTableV2,
+  defineOperationBtns,
+  ProTableQueryFilterBar,
+  QueryFilterItem,
+  SearchInput,
+} from '@bole-core/components';
+import * as userServices from '@/services/api/user';
+
+defineOptions({
+  name: 'AddTaskDialog',
+});
+
+type Form = {
+  id: string;
+};
+
+const form = defineModel<Form>('form');
+const visible = defineModel<boolean>('modelValue');
+
+const emit = defineEmits<{
+  (e: 'onConfirm'): void;
+  (e: 'onCancel'): void;
+}>();
+
+const operationBtns = defineOperationBtns([
+  {
+    data: {
+      enCode: 'chooseBtn',
+      name: '閫夋嫨',
+    },
+    emits: {
+      onClick: (role) => handleChoose(role),
+    },
+    extraProps: {
+      hide: (row) => row.recommendStatus === EnumTaskRecommendStatus.No,
+    },
+  },
+  {
+    data: {
+      enCode: 'cancelChooseBtn',
+      name: '鍙栨秷閫夋嫨',
+    },
+    emits: {
+      onClick: (role) => handleChoose(role),
+    },
+    extraProps: {
+      hide: (row) => row.recommendStatus === EnumTaskRecommendStatus.No,
+    },
+  },
+]);
+
+const column = defineColumns([
+  {
+    id: '1',
+    enCode: 'name',
+    name: '浠诲姟鍚�',
+  },
+  {
+    id: '2',
+    enCode: 'name',
+    name: '浠诲姟鍗曞彿',
+  },
+  {
+    id: '3',
+    enCode: 'name',
+    name: '鍙戝崟瀹㈡埛',
+  },
+  {
+    id: '4',
+    enCode: 'name',
+    name: '瀹㈡埛ID',
+  },
+  {
+    id: '5',
+    enCode: 'name',
+    name: '浠诲姟寮�濮�',
+  },
+  {
+    id: '6',
+    enCode: 'name',
+    name: '浠诲姟缁撴潫',
+  },
+]);
+
+watch(
+  () => visible.value,
+  (value) => {
+    if (value) {
+      getList();
+    }
+  }
+);
+
+const {
+  getDataSource: getList,
+  proTableProps,
+  paginationState,
+  extraParamState,
+} = useTable(
+  async ({ pageIndex, pageSize }, extraParamState) => {
+    try {
+      let params: API.GetPersonalUserInfoSignContractsQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          orderInput: extraParamState.orderInput,
+        },
+        id: form.value.id,
+      };
+      let res = await userServices.getPersonalUserInfoSignContracts(params);
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      keywords: '',
+      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
+    },
+    columnsRenderProps: {
+      applyTime: { type: 'date' },
+      hireTime: { type: 'date' },
+      enterpriseSignContractTime: { type: 'date' },
+    },
+  }
+);
+
+function handleChoose(row) {}
+
+function handleConfirm() {
+  emit('onConfirm');
+}
+</script>
+
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+</style>
diff --git a/src/views/EmploymentManage/components/CheckManageDialog.vue b/src/views/EmploymentManage/components/CheckManageDialog.vue
index f90e2cc..bf67829 100644
--- a/src/views/EmploymentManage/components/CheckManageDialog.vue
+++ b/src/views/EmploymentManage/components/CheckManageDialog.vue
@@ -38,13 +38,15 @@
 
 type Form = {
   id: string;
-  isDetail: boolean;
-  tabType: string;
   checkReceiveMethods: EnumTaskCheckReceiveMethod[];
+  isInternal: boolean;
+  tabType: string;
+  isDetail: boolean;
 };
 
 const visible = defineModel({ type: Boolean });
 const form = defineModel<Form>('form');
+
 const title = computed(() => (form.value.isDetail ? '璇︽儏' : '楠屾敹'));
 const emit = defineEmits<{
   (e: 'onCancel'): void;
@@ -153,12 +155,13 @@
     },
     extraProps: {
       hide: (row: API.GetCheckReceiveTaskUserSubmitsQueryResultItem) =>
-        form.value.isDetail ||
-        form.value.tabType === 'signRecord' ||
         !(
           row.checkReceiveStatus === EnumTaskUserSubmitCheckReceiveStatus.WaitSubmit ||
           row.checkReceiveStatus === EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive
-        ),
+        ) ||
+        form.value.isDetail ||
+        form.value.tabType === 'signRecord' ||
+        !form.value.isInternal,
     },
   },
   {
@@ -171,12 +174,13 @@
     },
     extraProps: {
       hide: (row: API.GetCheckReceiveTaskUserSubmitsQueryResultItem) =>
-        form.value.isDetail ||
-        form.value.tabType === 'signRecord' ||
         !(
           row.checkReceiveStatus === EnumTaskUserSubmitCheckReceiveStatus.WaitSubmit ||
           row.checkReceiveStatus === EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive
-        ),
+        ) ||
+        form.value.isDetail ||
+        form.value.tabType === 'signRecord' ||
+        !form.value.isInternal,
     },
   },
   {
diff --git a/src/views/EmploymentManage/components/ManualCheckManageDialog.vue b/src/views/EmploymentManage/components/ManualCheckManageDialog.vue
index 802597e..703ea4f 100644
--- a/src/views/EmploymentManage/components/ManualCheckManageDialog.vue
+++ b/src/views/EmploymentManage/components/ManualCheckManageDialog.vue
@@ -18,9 +18,13 @@
   ProTableV2,
   ProDialogTableWrapper,
   defineColumns,
+  defineOperationBtns,
   useTable,
 } from '@bole-core/components';
 import * as taskCheckReceiveServices from '@/services/api/taskCheckReceive';
+import { setOSSLink } from '@/utils';
+import { downloadWithZip, Message } from '@bole-core/core';
+import { useGlobalEventContext } from '@/hooks';
 
 defineOptions({
   name: 'ManualCheckManageDialog',
@@ -36,6 +40,8 @@
   (e: 'onCancel'): void;
 }>();
 
+const eventContext = useGlobalEventContext();
+
 const columns = defineColumns([
   {
     id: '1',
@@ -120,4 +126,33 @@
     },
   }
 );
+
+function handleDownload(row: API.GetCheckReceiveTaskUserSubmitsQueryResultItem) {
+  if (row.files?.length > 0) {
+    downloadWithZip(
+      row.files.map((x) => ({
+        data: `${setOSSLink(x)}`,
+      })),
+      '楠屾敹鐓х墖'
+    );
+  }
+}
+
+async function checkReceiveTask(
+  row: API.GetCheckReceiveTaskUserSubmitsQueryResultItem,
+  checkReceiveStatus: EnumTaskUserSubmitCheckReceiveStatus
+) {
+  try {
+    let params: API.CheckReceiveTaskCommand = {
+      id: row.id,
+      checkReceiveStatus: checkReceiveStatus,
+    };
+    let res = await taskCheckReceiveServices.checkReceiveTask(params);
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      getList(paginationState.pageIndex);
+      eventContext.emit('checkReceiveTask');
+    }
+  } catch (error) {}
+}
 </script>
diff --git a/src/views/FinanceManage/AccountManage.vue b/src/views/FinanceManage/AccountManage.vue
new file mode 100644
index 0000000..818d4a4
--- /dev/null
+++ b/src/views/FinanceManage/AccountManage.vue
@@ -0,0 +1,169 @@
+<template>
+  <LoadingLayout :loading="isLoading">
+    <AppContainer>
+      <PageFormLayout title="璐︽埛淇℃伅">
+        <ProForm :model="form" ref="formRef" label-width="140px" :is-read="isDetail">
+          <ProFormCol>
+            <ProFormColItem :span="12">
+              <ProFormItemV2 label="璐︽埛鍚嶇О:" prop="name" mode="read">
+                <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ヨ处鎴峰悕绉�" />
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="12">
+              <ProFormItemV2
+                label="寮�鎴锋�昏:"
+                prop="bank"
+                :check-rules="[{ message: '璇疯緭鍏ュ紑鎴锋�昏' }]"
+              >
+                <ProFormText v-model.trim="form.bank" placeholder="璇疯緭鍏ュ紑鎴锋�昏" />
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="12">
+              <ProFormItemV2
+                label="寮�鎴锋敮琛�:"
+                prop="bankBranch"
+                :check-rules="[{ message: '璇疯緭鍏ュ紑鎴锋敮琛�' }]"
+              >
+                <ProFormText v-model.trim="form.bankBranch" placeholder="璇疯緭鍏ュ紑鎴锋敮琛�" />
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="12">
+              <ProFormItemV2
+                label="鎴峰彿:"
+                prop="account"
+                :check-rules="[{ message: '璇疯緭鍏ユ埛鍙�', type: 'bankCard' }]"
+              >
+                <ProFormText v-model.trim="form.account" placeholder="璇疯緭鍏ユ埛鍙�" />
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+        </ProForm>
+        <template #footer>
+          <el-button v-if="isDetail" type="primary" @click="isDetail = false">缂栬緫</el-button>
+          <el-button v-else type="primary" @click="handleConfirm()">淇濆瓨</el-button>
+        </template>
+      </PageFormLayout>
+    </AppContainer>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  LoadingLayout,
+  AppContainer,
+  PageFormLayout,
+  ProForm,
+  ProFormCol,
+  ProFormColItem,
+  ProFormItemV2,
+  ProFormInputNumber,
+  ProFormRadio,
+  ProFormText,
+} from '@bole-core/components';
+import { useQuery } from '@tanstack/vue-query';
+import * as smsServices from '@/services/api/sms';
+import { FormInstance } from 'element-plus';
+import { Message } from '@bole-core/core';
+import * as enterpriseCooperationWalletServices from '@/services/api/enterpriseCooperationWallet';
+
+defineOptions({
+  name: 'AccountManage',
+});
+
+const { userDetail } = useUser();
+
+const form = reactive({
+  name: '',
+  bank: '',
+  bankBranch: '',
+  account: '',
+});
+
+const isDetail = ref(true);
+
+const { isLoading } = useQuery({
+  queryKey: ['enterpriseCooperationWalletServices/getEnterpriseReceiveAccount'],
+  queryFn: async () => {
+    return await enterpriseCooperationWalletServices.getEnterpriseReceiveAccount(
+      {},
+      {
+        showLoading: false,
+      }
+    );
+  },
+  placeholderData: () => ({} as API.GetEnterpriseReceiveAccountQueryResult),
+  onSuccess(data) {
+    form.name = data.name;
+    form.bank = data.bank;
+    form.bankBranch = data.bankBranch;
+    form.account = data.account;
+  },
+});
+
+const formRef = ref<FormInstance>();
+
+function handleConfirm() {
+  if (!formRef.value) return;
+  formRef.value.validate((valid) => {
+    if (valid) {
+      submit();
+    } else {
+      return;
+    }
+  });
+}
+
+async function submit() {
+  try {
+    let params: API.SaveEnterpriseReceiveAccountCommand = {
+      bank: form.bank,
+      bankBranch: form.bankBranch,
+      account: form.account,
+    };
+    let res = await enterpriseCooperationWalletServices.saveEnterpriseReceiveAccount(params);
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      isDetail.value = true;
+    }
+  } catch (error) {}
+}
+</script>
+
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+
+.access-list {
+  flex: 1;
+  min-width: 0;
+
+  :deep() {
+    .el-form-item__content {
+      flex-direction: column;
+      align-items: flex-start;
+    }
+  }
+}
+
+.access-item {
+  display: flex;
+  align-items: center;
+  margin-bottom: 10px;
+
+  .access-item-label {
+    margin-right: 20px;
+    word-break: keep-all;
+  }
+
+  :deep() {
+    .el-radio-group {
+      margin-right: 20px;
+    }
+  }
+}
+</style>
diff --git a/src/views/FinanceManage/CustomerRechargeManage.vue b/src/views/FinanceManage/CustomerRechargeManage.vue
new file mode 100644
index 0000000..48307e0
--- /dev/null
+++ b/src/views/FinanceManage/CustomerRechargeManage.vue
@@ -0,0 +1,158 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableQueryFilterBar @on-reset="reset">
+        <template #query>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.keywords"
+              style="width: 260px"
+              placeholder="浼佷笟鍚嶇О/淇$敤浠g爜"
+              @on-click-search="getList"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+        </template>
+      </ProTableQueryFilterBar>
+      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
+      </ProTableV2>
+    </AppContainer>
+    <CustomerRechargeDialog v-bind="dialogProps" />
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  ProTableQueryFilterBar,
+  ProTableV2,
+  SearchInput,
+  LoadingLayout,
+  AppContainer,
+  QueryFilterItem,
+  useTable,
+  useFormDialog,
+  defineOperationBtns,
+} from '@bole-core/components';
+import * as enterpriseCooperationWalletServices from '@/services/api/enterpriseCooperationWallet';
+import CustomerRechargeDialog from './components/CustomerRechargeDialog.vue';
+import { Message } from '@bole-core/core';
+
+defineOptions({
+  name: 'CustomerRechargeManage',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+  confirmBtn: {
+    emits: {
+      onClick: (role) => openDialog(role, false),
+    },
+    extraProps: {
+      hide: (role: API.GetCooperationWalletRechargeTransactionsQueryResultItem) =>
+        role.transactionStatus !== EnumEnterpriseCooperationWalletTransactionStatus.WaitSure,
+    },
+  },
+  detailBtn: {
+    emits: {
+      onClick: (role) => openDialog(role, true),
+    },
+    extraProps: {
+      hide: (role: API.GetCooperationWalletRechargeTransactionsQueryResultItem) =>
+        role.transactionStatus === EnumEnterpriseCooperationWalletTransactionStatus.WaitSure,
+    },
+  },
+};
+const { column, operationBtns, checkSubModuleItemShow } = useAccess({
+  operationBtnMap,
+});
+
+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.GetCooperationWalletRechargeTransactionsQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          orderInput: extraParamState.orderInput,
+        },
+        keywords: extraParamState.keywords,
+      };
+      let res = await enterpriseCooperationWalletServices.getCooperationWalletRechargeTransactions(
+        params
+      );
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      keywords: '',
+      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
+    },
+    columnsRenderProps: {
+      amount: { type: 'money' },
+      createdTime: { type: 'date' },
+      transactionStatus: {
+        type: 'enum',
+        valueEnum: EnumEnterpriseCooperationWalletTransactionStatusText,
+      },
+    },
+  }
+);
+
+const { dialogProps, handleAdd, handleEdit, editForm } = useFormDialog({
+  onConfirm: handleAddOrEdit,
+  defaultFormParams: {
+    id: '',
+    cooperationId: '',
+    transactionStatus: '' as any as EnumEnterpriseCooperationWalletTransactionStatus,
+    remark: '',
+    isDetail: false,
+  },
+});
+
+function openDialog(
+  row: API.GetCooperationWalletRechargeTransactionsQueryResultItem,
+  isDetail: boolean
+) {
+  handleEdit({
+    cooperationId: '',
+    id: row.id,
+    transactionStatus: '' as any as EnumEnterpriseCooperationWalletTransactionStatus,
+    remark: '',
+    isDetail: isDetail,
+  });
+}
+
+async function handleAddOrEdit() {
+  try {
+    let params: API.SureRechargeCooperationWalletCommand = {
+      cooperationId: editForm.cooperationId,
+      id: editForm.id,
+      transactionStatus: editForm.transactionStatus,
+      remark: editForm.remark,
+    };
+    let res = await enterpriseCooperationWalletServices.sureRechargeCooperationWallet(params);
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      getList(paginationState.pageIndex);
+    }
+  } catch (error) {}
+}
+</script>
diff --git a/src/views/FinanceManage/CustomerRechargeRecord.vue b/src/views/FinanceManage/CustomerRechargeRecord.vue
new file mode 100644
index 0000000..d129493
--- /dev/null
+++ b/src/views/FinanceManage/CustomerRechargeRecord.vue
@@ -0,0 +1,105 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
+      </ProTableV2>
+    </AppContainer>
+    <RechargeRecordialog v-bind="dialogProps" />
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  ProTableV2,
+  LoadingLayout,
+  AppContainer,
+  useTable,
+  useFormDialog,
+  defineOperationBtns,
+  UploadUserFile,
+} from '@bole-core/components';
+import * as enterpriseCooperationWalletServices from '@/services/api/enterpriseCooperationWallet';
+import RechargeRecordialog from './components/RechargeRecordialog.vue';
+import { EnumEnterpriseCooperationWalletTransactionStatusText } from '@/constants';
+
+defineOptions({
+  name: 'CustomerRechargeRecord',
+});
+
+const route = useRoute();
+const id = route.params.id as string;
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+  detailBtn: {
+    emits: {
+      onClick: (role: API.GetCooperationWalletRechargeTransactionsQueryResultItem) =>
+        openDialog(role),
+    },
+  },
+};
+const { column, operationBtns, checkSubModuleItemShow } = useAccess({
+  operationBtnMap,
+});
+
+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.GetCooperationWalletRechargeTransactionsQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          orderInput: extraParamState.orderInput,
+        },
+        cooperationId: id,
+      };
+      let res = await enterpriseCooperationWalletServices.getCooperationWalletRechargeTransactions(
+        params
+      );
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
+    },
+    columnsRenderProps: {
+      amount: { type: 'money' },
+      createdTime: { type: 'date' },
+      transactionStatus: {
+        type: 'enum',
+        valueEnum: EnumEnterpriseCooperationWalletTransactionStatusText,
+      },
+    },
+  }
+);
+
+const { dialogProps, handleAdd, editForm } = useFormDialog({
+  defaultFormParams: {
+    id: '',
+  },
+});
+
+function openDialog(row: API.GetCooperationWalletRechargeTransactionsQueryResultItem) {
+  handleAdd({
+    id: row.id,
+  });
+}
+</script>
diff --git a/src/views/FinanceManage/EnterpriseBalanceManage.vue b/src/views/FinanceManage/EnterpriseBalanceManage.vue
index 1b860ed..9a057cd 100644
--- a/src/views/FinanceManage/EnterpriseBalanceManage.vue
+++ b/src/views/FinanceManage/EnterpriseBalanceManage.vue
@@ -1,128 +1,26 @@
 <template>
-  <LoadingLayout :loading="state.loading">
-    <AppContainer>
-      <ProTableV2
-        v-bind="proTableProps"
-        :columns="BalanceManageColumns"
-        :operationBtns="operationBtns"
-      >
-      </ProTableV2>
-    </AppContainer>
-    <RechargeEnterpriseWalletDialog v-bind="dialogRechargeProps" />
-  </LoadingLayout>
+  <AppContainer>
+    <ProTabs v-model="state.tabType" hasBorder>
+      <ProTabPane lazy label="浣欓绠$悊" name="enterpriseBalanceManageView">
+        <EnterpriseBalanceManageView />
+      </ProTabPane>
+      <ProTabPane lazy label="瀹㈡埛浣欓绠$悊" name="customerBalanceManageView">
+        <CustomerBalanceManageView />
+      </ProTabPane>
+    </ProTabs>
+  </AppContainer>
 </template>
 
 <script setup lang="ts">
-import {
-  ProTableV2,
-  LoadingLayout,
-  AppContainer,
-  useTable,
-  useFormDialog,
-  defineOperationBtns,
-} from '@bole-core/components';
-import * as enterpriseWalletServices from '@/services/api/enterpriseWallet';
-import { BalanceManageColumns } from './constants';
-import RechargeEnterpriseWalletDialog from '@/views/ServiceChargeManage/components/RechargeEnterpriseWalletDialog.vue';
-import { EnumEnterpriseWalletAccess, EnumEnterpriseWalletAccessText } from '@/constants';
+import { AppContainer, ProTabs, ProTabPane } from '@bole-core/components';
+import EnterpriseBalanceManageView from './components/EnterpriseBalanceManageView.vue';
+import CustomerBalanceManageView from './components/CustomerBalanceManageView.vue';
 
 defineOptions({
   name: 'EnterpriseBalanceManage',
 });
 
-const operationBtns = defineOperationBtns([
-  {
-    data: {
-      enCode: 'rechargeBtn',
-      name: '鍏呭��',
-    },
-    emits: {
-      onClick: (role) => openDialog(role),
-    },
-    extraProps: {
-      hide: (role: API.GetEnterpriseWalletBalancesQueryResultItem) =>
-        role.access !== EnumEnterpriseWalletAccess.Alipay,
-    },
-  },
-  {
-    data: {
-      enCode: 'detailBtn',
-      name: '璇︽儏',
-    },
-    emits: {
-      onClick: (role) => goDetail(role),
-    },
-  },
-]);
-
-const router = useRouter();
-const BaseState = {
-  loading: true,
-};
-
-const state = reactive({ ...BaseState });
-
-onMounted(async () => {
-  await getList();
-  state.loading = false;
+const state = reactive({
+  tabType: 'enterpriseBalanceManageView',
 });
-
-const {
-  getDataSource: getList,
-  proTableProps,
-  paginationState,
-  extraParamState,
-  reset,
-} = useTable(
-  async ({ pageIndex, pageSize }, extraParamState) => {
-    try {
-      let params: API.GetEnterpriseWalletBalancesQuery = {
-        pageModel: {
-          rows: pageSize,
-          page: pageIndex,
-          orderInput: extraParamState.orderInput,
-        },
-      };
-
-      let res = await enterpriseWalletServices.getEnterpriseWalletBalances(params, {
-        showLoading: !state.loading,
-      });
-      return res;
-    } catch (error) {}
-  },
-  {
-    defaultExtraParams: {
-      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
-    },
-    columnsRenderProps: {
-      access: { type: 'enum', valueEnum: EnumEnterpriseWalletAccessText },
-      balance: { type: 'money' },
-    },
-  }
-);
-
-const {
-  dialogProps: dialogRechargeProps,
-  handleAdd: handleRechargeAdd,
-  editForm: rechargeEditForm,
-} = useFormDialog({
-  defaultFormParams: {
-    access: EnumEnterpriseWalletAccess.Alipay,
-    amount: null as number,
-    remark: '',
-  },
-});
-
-function openDialog(row) {
-  handleRechargeAdd();
-}
-
-function goDetail(row: API.GetEnterpriseWalletBalancesQueryResultItem) {
-  router.push({
-    name: 'EnterpriseBalanceManageDetail',
-    params: {
-      id: row?.id ?? '',
-    },
-  });
-}
 </script>
diff --git a/src/views/FinanceManage/EnterpriseBalanceManageDetail.vue b/src/views/FinanceManage/EnterpriseBalanceManageDetail.vue
index 26008ea..5678dc8 100644
--- a/src/views/FinanceManage/EnterpriseBalanceManageDetail.vue
+++ b/src/views/FinanceManage/EnterpriseBalanceManageDetail.vue
@@ -41,12 +41,23 @@
             </QueryFilterItem>
           </template>
           <template #btn>
-            <el-button type="primary" @click="handleExport()">瀵煎嚭</el-button>
+            <el-button
+              v-if="checkSubModuleItemShow('pageButton', 'receiptExportBtn')"
+              type="primary"
+              @click="exportPersonalUserTransactionEreceipts()"
+              >鍥炲崟瀵煎嚭</el-button
+            >
+            <el-button
+              v-if="checkSubModuleItemShow('pageButton', 'exportBtn')"
+              type="primary"
+              @click="handleExport()"
+              >瀵煎嚭</el-button
+            >
           </template>
         </ProTableQueryFilterBar>
         <ProTableV2
           v-bind="proTableProps"
-          :columns="BalanceManageDetailColumns"
+          :columns="column"
           :show-operation-column="false"
           :auto-height="false"
           :table-props="{
@@ -76,12 +87,11 @@
   ProTableQueryFilterBar,
   ProFormSelect,
 } from '@bole-core/components';
-import { BalanceManageDetailColumns } from './constants';
 import { EnumWalletTransactionStatusText, EnumEnterpriseWalletAccessText } from '@/constants';
 import * as enterpriseWalletServices from '@/services/api/enterpriseWallet';
 import * as userServices from '@/services/api/user';
 import { Message } from '@bole-core/core';
-import { downloadFileByUrl, format, setOSSLink } from '@/utils';
+import { downloadFile, downloadFileByUrl, format, setOSSLink } from '@/utils';
 import _ from 'lodash';
 import { ModelValueType } from 'element-plus';
 
@@ -89,6 +99,11 @@
   name: 'EnterpriseBalanceManageDetail',
 });
 
+const operationBtnMap: Record<string, OperationBtnType> = {};
+const { column, operationBtns, checkSubModuleItemShow } = useAccess({
+  operationBtnMap,
+});
+
 const route = useRoute();
 const id = (route.params.id as string) ?? '';
 
@@ -173,6 +188,32 @@
   { leading: true, trailing: false }
 );
 
+const exportPersonalUserTransactionEreceipts = _.debounce(
+  async () => {
+    if (paginationState.total === 0) {
+      Message.warnMessage('娌℃湁鏁版嵁鍙互瀵煎嚭鍝');
+      return;
+    }
+    try {
+      let params: API.ExportPersonalUserTransactionEreceiptsCommand = {
+        enterpriseWalletId: id,
+        createdTimeStart: format(extraParamState.creationTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
+        createdTimeEnd: format(extraParamState.creationTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
+      };
+      let res = await userServices.exportPersonalUserTransactionEreceipts(params, {
+        responseType: 'blob',
+        getResponse: true,
+      });
+      if (res) {
+        // @ts-ignore
+        downloadFile(res?.data, `鐢靛瓙鍥炲崟`, 'zip');
+      }
+    } catch (error) {}
+  },
+  1000,
+  { leading: true, trailing: false }
+);
+
 onMounted(() => {
   state.loading = false;
   getList();
diff --git a/src/views/FinanceManage/OrderSettlementManage.vue b/src/views/FinanceManage/OrderSettlementManage.vue
new file mode 100644
index 0000000..552b635
--- /dev/null
+++ b/src/views/FinanceManage/OrderSettlementManage.vue
@@ -0,0 +1,154 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableQueryFilterBar @on-reset="reset">
+        <template #query>
+          <QueryFilterItem tip-content="缁撶畻鐘舵��">
+            <FieldRadio
+              v-model="extraParamState.settlementStatus"
+              :value-enum="EnumTaskSettlementStatusText"
+              buttonStyle
+              showAllBtn
+              @change="getList()"
+            />
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.keywords"
+              style="width: 250px"
+              placeholder="璁㈠崟鍙�/鏈嶅姟鍚�/渚涘簲鍟�"
+              @on-click-search="getList()"
+              @keyup.enter="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+        </template>
+      </ProTableQueryFilterBar>
+      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
+      </ProTableV2>
+    </AppContainer>
+    <OrderSettlementDetailDialog v-bind="dialogProps" />
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  ProTableQueryFilterBar,
+  ProTableV2,
+  SearchInput,
+  LoadingLayout,
+  AppContainer,
+  QueryFilterItem,
+  useTable,
+  FieldRadio,
+  useFormDialog,
+} from '@bole-core/components';
+import {
+  EnumTaskSettlementStatusText,
+  EnumTaskSettlementOrderStatus,
+  EnumTaskSettlementStatus,
+  EnumTaskCheckReceiveStatus,
+} from '@/constants';
+import * as taskServices from '@/services/api/task';
+import { ModelValueType } from 'element-plus';
+import OrderSettlementDetailDialog from './components/OrderSettlementDetailDialog.vue';
+
+defineOptions({
+  name: 'OrderSettlementManage',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+  detailBtn: {
+    emits: {
+      onClick: (role: API.GetSettlementTasksQueryResultItem) => openDialog(role.id),
+    },
+  },
+};
+
+const { column, operationBtns, checkSubModuleItemShow } = useAccess({
+  operationBtnMap,
+});
+
+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.GetSettlementTasksQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          orderInput: extraParamState.orderInput,
+        },
+        keywords: extraParamState.keywords,
+        settlementStatus: extraParamState.settlementStatus,
+      };
+
+      let res = await taskServices.getSettlementTasks(params, {
+        showLoading: !state.loading,
+      });
+      return res;
+    } catch (error) {
+      console.log('error: ', error);
+    }
+  },
+  {
+    defaultExtraParams: {
+      keywords: '',
+      settlementOrderStatus: '' as any as EnumTaskSettlementOrderStatus,
+      checkReceiveStatus: '' as any as EnumTaskCheckReceiveStatus,
+      settlementStatus: '' as any as EnumTaskSettlementStatus,
+      time: [] as unknown as ModelValueType,
+      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
+    },
+    queryKey: ['taskServices/getSettlementTasks'],
+    columnsRenderProps: {
+      settlementStatus: { type: 'enum', valueEnum: EnumTaskSettlementStatusText },
+    },
+  }
+);
+
+const { dialogProps, handleAdd, editForm } = useFormDialog({
+  onConfirm: handleAddOrEdit,
+  defaultFormParams: {
+    id: '',
+  },
+});
+
+function openDialog(id: string) {
+  handleAdd({
+    id: id,
+  });
+}
+
+async function handleAddOrEdit() {
+  try {
+  } catch (error) {}
+}
+
+function goDetail(id: string, settlement?: string) {
+  router.push({
+    name: 'ServiceChargeDetail',
+    params: {
+      id: id ?? '',
+    },
+  });
+}
+</script>
diff --git a/src/views/FinanceManage/components/CustomerBalanceManageView.vue b/src/views/FinanceManage/components/CustomerBalanceManageView.vue
new file mode 100644
index 0000000..e4c229f
--- /dev/null
+++ b/src/views/FinanceManage/components/CustomerBalanceManageView.vue
@@ -0,0 +1,96 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableV2
+        v-bind="proTableProps"
+        :columns="customerColumns"
+        :operationBtns="customerOperationBtns"
+      >
+      </ProTableV2>
+    </AppContainer>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  ProTableV2,
+  LoadingLayout,
+  AppContainer,
+  useTable,
+  defineOperationBtns,
+} from '@bole-core/components';
+import * as enterpriseCooperationWalletServices from '@/services/api/enterpriseCooperationWallet';
+
+defineOptions({
+  name: 'CustomerBalanceManageView',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+  'customer-recordBtn': {
+    emits: {
+      onClick: (role: API.GetCooperationWalletsQueryResultItem) => goDetail(role),
+    },
+  },
+};
+
+const { checkSubModuleItemShow, column, operationBtns } = useAccess({
+  operationBtnMap,
+});
+
+const [customerColumns] = useGroupColumns(column, ['customer-']);
+const [customerOperationBtns] = useGroupOperationBtns(operationBtns, ['customer-']);
+
+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.GetCooperationWalletsQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          orderInput: extraParamState.orderInput,
+        },
+      };
+
+      let res = await enterpriseCooperationWalletServices.getCooperationWallets(params, {
+        showLoading: !state.loading,
+      });
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
+    },
+    columnsRenderProps: {
+      balance: { type: 'money' },
+    },
+  }
+);
+
+function goDetail(row: API.GetCooperationWalletsQueryResultItem) {
+  router.push({
+    name: 'CustomerRechargeRecord',
+    params: {
+      id: row?.id ?? '',
+    },
+  });
+}
+</script>
diff --git a/src/views/FinanceManage/components/CustomerRechargeDialog.vue b/src/views/FinanceManage/components/CustomerRechargeDialog.vue
new file mode 100644
index 0000000..d1d2839
--- /dev/null
+++ b/src/views/FinanceManage/components/CustomerRechargeDialog.vue
@@ -0,0 +1,170 @@
+<template>
+  <ProDialog :title="title" v-model="visible" @close="onDialogClose" destroy-on-close draggable>
+    <PortraitTableWithAttachment v-bind="portraitTableWithAttachmentProps" />
+    <ProForm
+      :model="form"
+      ref="dialogForm"
+      label-width="90px"
+      style="margin-top: 20px"
+      :is-read="form.isDetail"
+    >
+      <ProFormItemV2
+        label="鍏呭�肩姸鎬�:"
+        prop="transactionStatus"
+        :check-rules="[{ message: '璇烽�夋嫨鍏呭�肩姸鎬�' }]"
+      >
+        <ProFormRadio v-model="form.transactionStatus" :value-enum="transactionStatusText" />
+      </ProFormItemV2>
+      <ProFormItemV2 label="澶囨敞:" prop="remark">
+        <ProFormTextArea
+          v-model="form.remark"
+          placeholder="璇疯緭鍏ュ娉�"
+          :rows="4"
+          :maxlength="150"
+          show-word-limit
+        />
+      </ProFormItemV2>
+    </ProForm>
+    <template #footer>
+      <span class="dialog-footer">
+        <el-button @click="emit('onCancel')">鍙� 娑�</el-button>
+        <el-button type="primary" @click="handleConfirm">纭� 瀹�</el-button>
+      </span>
+    </template>
+  </ProDialog>
+</template>
+
+<script setup lang="ts">
+import { FormInstance } from 'element-plus';
+import {
+  ProDialog,
+  ProForm,
+  ProFormItemV2,
+  ProFormRadio,
+  ProFormTextArea,
+} from '@bole-core/components';
+import { usePortraitTableWithAttachment } from '@/hooks';
+import { convertApi2FormUrl } from '@/utils';
+import { useQuery } from '@tanstack/vue-query';
+import * as enterpriseCooperationWalletServices from '@/services/api/enterpriseCooperationWallet';
+import { EnumEnterpriseCooperationWalletTransactionStatusTextForConfirm } from '@/constants';
+import _ from 'lodash';
+
+defineOptions({
+  name: 'CustomerRechargeDialog',
+});
+
+const visible = defineModel({ type: Boolean });
+
+type Form = {
+  title?: string;
+  id: string;
+  cooperationId: string;
+  transactionStatus: EnumEnterpriseCooperationWalletTransactionStatus;
+  remark: string;
+  isDetail: boolean;
+};
+
+const form = defineModel<Form>('form');
+
+const title = computed(() => (form.value.isDetail ? '鍏呭�艰褰�' : '纭鍏呭��'));
+
+const transactionStatusText = computed(() =>
+  form.value.isDetail
+    ? EnumEnterpriseCooperationWalletTransactionStatusText
+    : EnumEnterpriseCooperationWalletTransactionStatusTextForConfirm
+);
+
+const emit = defineEmits<{
+  (e: 'onConfirm'): void;
+  (e: 'onCancel'): void;
+}>();
+
+watch(
+  () => visible.value,
+  (val) => {
+    if (val) {
+      refetch();
+    }
+  }
+);
+
+const { data: detail, refetch } = useQuery({
+  queryKey: [
+    'enterpriseCooperationWalletServices/getCooperationWalletRechargeTransaction',
+    form.value.id,
+  ],
+  queryFn: async () => {
+    return await enterpriseCooperationWalletServices.getCooperationWalletRechargeTransaction({
+      id: form.value.id,
+    });
+  },
+  placeholderData: () => ({} as API.GetCooperationWalletRechargeTransactionQueryResult),
+  onSuccess(data) {
+    form.value.cooperationId = data.cooperationId ?? '';
+    if (form.value.isDetail) {
+      form.value.transactionStatus = data.transactionStatus;
+      form.value.remark = data.remark ?? '';
+    }
+  },
+  enabled: computed(() => !!form.value.id),
+});
+
+const { portraitTableWithAttachmentProps } = usePortraitTableWithAttachment({
+  data: detail,
+  annexList: computed(() =>
+    detail.value?.files ? detail.value?.files.map((item) => convertApi2FormUrl(item)) : []
+  ),
+  columns: [
+    {
+      label: '鍏呭�煎崟浣�',
+      key: 'receiveUnit',
+    },
+    {
+      label: '寮�鎴疯处鍙�',
+      key: 'receiveAccount',
+    },
+    {
+      label: '鍏呭�奸噾棰�',
+      key: 'amount',
+      type: 'money',
+    },
+    {
+      label: '鍏呭�兼椂闂�',
+      key: 'createdTime',
+      type: 'date',
+    },
+  ],
+});
+const dialogForm = ref<FormInstance>();
+
+function onDialogClose() {
+  if (!dialogForm.value) return;
+  dialogForm.value.resetFields();
+}
+
+const handleConfirm = _.debounce(
+  () => {
+    if (form.value.isDetail) {
+      emit('onCancel');
+    } else {
+      if (!dialogForm.value) return;
+      dialogForm.value.validate((valid) => {
+        if (valid) {
+          emit('onConfirm');
+        } else {
+          return;
+        }
+      });
+    }
+  },
+  1000,
+  {
+    leading: true,
+    trailing: false,
+  }
+);
+</script>
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+</style>
diff --git a/src/views/FinanceManage/components/DistributionDetailView.vue b/src/views/FinanceManage/components/DistributionDetailView.vue
index 8500679..b2ff74e 100644
--- a/src/views/FinanceManage/components/DistributionDetailView.vue
+++ b/src/views/FinanceManage/components/DistributionDetailView.vue
@@ -18,7 +18,11 @@
 <script setup lang="ts">
 import { ProTableV2, LoadingLayout, AppContainer, useTable } from '@bole-core/components';
 import * as userServices from '@/services/api/user';
-import { EnumTaskSettlementStatusText, EnumTaskSettlementStatus } from '@/constants';
+import {
+  EnumTaskSettlementStatusText,
+  SettlementReceiveStatusText,
+  EnumTaskSettlementStatus,
+} from '@/constants';
 
 defineOptions({
   name: 'DistributionDetailView',
@@ -26,7 +30,7 @@
 
 const operationBtnMap: Record<string, OperationBtnType> = {};
 
-const { column, operationBtns } = useAccess({
+const { column, operationBtns, checkSubModuleItemShow } = useAccess({
   operationBtnMap,
 });
 
diff --git a/src/views/FinanceManage/components/EnterpriseBalanceManageView.vue b/src/views/FinanceManage/components/EnterpriseBalanceManageView.vue
new file mode 100644
index 0000000..03c4596
--- /dev/null
+++ b/src/views/FinanceManage/components/EnterpriseBalanceManageView.vue
@@ -0,0 +1,127 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableV2
+        v-bind="proTableProps"
+        :columns="enterpriseColumns"
+        :operationBtns="enterpriseOperationBtns"
+      >
+      </ProTableV2>
+    </AppContainer>
+    <RechargeEnterpriseWalletDialog v-bind="dialogRechargeProps" />
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  ProTableV2,
+  LoadingLayout,
+  AppContainer,
+  useTable,
+  useFormDialog,
+} from '@bole-core/components';
+import * as enterpriseWalletServices from '@/services/api/enterpriseWallet';
+import RechargeEnterpriseWalletDialog from '@/views/ServiceChargeManage/components/RechargeEnterpriseWalletDialog.vue';
+import { EnumEnterpriseWalletAccess, EnumEnterpriseWalletAccessText } from '@/constants';
+
+defineOptions({
+  name: 'EnterpriseBalanceManageView',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+  'enterprise-rechargeBtn': {
+    emits: {
+      onClick: (role) => openDialog(role),
+    },
+    extraProps: {
+      hide: (role: API.GetEnterpriseWalletBalancesQueryResultItem) =>
+        role.access !== EnumEnterpriseWalletAccess.Alipay,
+    },
+  },
+  'enterprise-detailBtn': {
+    emits: {
+      onClick: (role) => goDetail(role),
+    },
+  },
+};
+
+const { checkSubModuleItemShow, column, operationBtns } = useAccess({
+  operationBtnMap,
+});
+
+const [enterpriseColumns] = useGroupColumns(column, ['enterprise-']);
+const [enterpriseOperationBtns] = useGroupOperationBtns(operationBtns, ['enterprise-']);
+
+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.GetEnterpriseWalletBalancesQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          orderInput: extraParamState.orderInput,
+        },
+      };
+
+      let res = await enterpriseWalletServices.getEnterpriseWalletBalances(params, {
+        showLoading: !state.loading,
+      });
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
+    },
+    columnsRenderProps: {
+      access: { type: 'enum', valueEnum: EnumEnterpriseWalletAccessText },
+      balance: { type: 'money' },
+      availableBalance: { type: 'money' },
+      freezeBalance: { type: 'money' },
+    },
+  }
+);
+
+const {
+  dialogProps: dialogRechargeProps,
+  handleAdd: handleRechargeAdd,
+  editForm: rechargeEditForm,
+} = useFormDialog({
+  defaultFormParams: {
+    access: EnumEnterpriseWalletAccess.Alipay,
+    amount: null as number,
+    remark: '',
+  },
+});
+
+function openDialog(row) {
+  handleRechargeAdd();
+}
+
+function goDetail(row: API.GetEnterpriseWalletBalancesQueryResultItem) {
+  router.push({
+    name: 'EnterpriseBalanceManageDetail',
+    params: {
+      id: row?.id ?? '',
+    },
+  });
+}
+</script>
diff --git a/src/views/FinanceManage/components/OrderSettlementDetailDialog.vue b/src/views/FinanceManage/components/OrderSettlementDetailDialog.vue
new file mode 100644
index 0000000..1ee399e
--- /dev/null
+++ b/src/views/FinanceManage/components/OrderSettlementDetailDialog.vue
@@ -0,0 +1,143 @@
+<template>
+  <ProDialog
+    :title="form.title"
+    v-model="visible"
+    @close="onDialogClose"
+    destroy-on-close
+    draggable
+  >
+    <PortraitTableWithAttachment v-bind="portraitTableWithAttachmentProps" />
+    <template #footer>
+      <span class="dialog-footer">
+        <el-button type="primary" @click="handleConfirm">纭� 瀹�</el-button>
+      </span>
+    </template>
+  </ProDialog>
+</template>
+
+<script setup lang="ts">
+import { FormInstance } from 'element-plus';
+import { ProDialog } from '@bole-core/components';
+import { usePortraitTableWithAttachment } from '@/hooks';
+import { convertApi2FormUrl } from '@/utils';
+import { useQuery } from '@tanstack/vue-query';
+import * as enterpriseCooperationWalletServices from '@/services/api/enterpriseCooperationWallet';
+
+defineOptions({
+  name: 'OrderSettlementDetailDialog',
+});
+
+const visible = defineModel({ type: Boolean });
+
+type Form = {
+  title?: string;
+  id: string;
+};
+
+const form = defineModel<Form>('form');
+
+const emit = defineEmits<{
+  (e: 'onConfirm'): void;
+  (e: 'onCancel'): void;
+}>();
+
+watch(
+  () => visible.value,
+  (val) => {
+    if (val) {
+      refetch();
+    }
+  }
+);
+
+const { data: detail, refetch } = useQuery({
+  queryKey: [
+    'enterpriseCooperationWalletServices/getCooperationWalletRechargeTransaction',
+    form.value.id,
+  ],
+  queryFn: async () => {
+    return await enterpriseCooperationWalletServices.getCooperationWalletRechargeTransaction({
+      id: form.value.id,
+    });
+  },
+  placeholderData: () => ({} as API.GetCooperationWalletRechargeTransactionQueryResult),
+  enabled: computed(() => !!form.value.id),
+});
+
+const { portraitTableWithAttachmentProps } = usePortraitTableWithAttachment({
+  data: detail,
+  annexList: computed(() =>
+    detail.value?.files ? detail.value?.files.map((item) => convertApi2FormUrl(item)) : []
+  ),
+  columns: [
+    {
+      label: '浠樻浜鸿处鎴�',
+      key: 'receiveUnit',
+    },
+    {
+      label: '鏀舵浜鸿处鎴�',
+      key: 'receiveName',
+    },
+    {
+      label: '浠樻浜哄悕绉�',
+      key: 'receiveBank',
+    },
+    {
+      label: '鏀舵浜哄悕绉�',
+      key: 'receiveAccount',
+    },
+    {
+      label: '浠樻浜哄紑鎴疯',
+      key: 'receiveAccount',
+    },
+    {
+      label: '鏀舵浜哄紑鎴疯',
+      key: 'receiveAccount',
+    },
+    {
+      label: '甯佺',
+      key: 'receiveAccount',
+    },
+    {
+      label: '缁撶畻閲戦',
+      key: 'amount',
+      type: 'money',
+    },
+    {
+      label: '缁撶畻鏃堕棿',
+      key: 'createdTime',
+      type: 'date',
+    },
+    {
+      label: '缁撶畻鐘舵��',
+      key: 'transactionStatus',
+      type: 'enum',
+    },
+  ],
+});
+
+const dialogForm = ref<FormInstance>();
+
+function onDialogClose() {
+  if (!dialogForm.value) return;
+  dialogForm.value.resetFields();
+}
+
+function handleConfirm() {
+  if (!dialogForm.value) return;
+  dialogForm.value.validate((valid) => {
+    if (valid) {
+      emit('onConfirm');
+    } else {
+      return;
+    }
+  });
+}
+</script>
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+
+.portrait-table-with-attachment-title {
+  justify-content: space-between;
+}
+</style>
diff --git a/src/views/FinanceManage/components/RechargeRecordialog.vue b/src/views/FinanceManage/components/RechargeRecordialog.vue
new file mode 100644
index 0000000..215f7a2
--- /dev/null
+++ b/src/views/FinanceManage/components/RechargeRecordialog.vue
@@ -0,0 +1,102 @@
+<template>
+  <ProDialog title="鍏呭�艰鎯�" v-model="visible" @close="onDialogClose" destroy-on-close draggable>
+    <PortraitTableWithAttachment v-bind="portraitTableWithAttachmentProps" />
+    <template #footer>
+      <span class="dialog-footer">
+        <el-button @click="emit('onCancel')">鍙� 娑�</el-button>
+        <el-button type="primary" @click="emit('onCancel')">纭� 瀹�</el-button>
+      </span>
+    </template>
+  </ProDialog>
+</template>
+
+<script setup lang="ts">
+import { FormInstance } from 'element-plus';
+import { ProDialog } from '@bole-core/components';
+import { usePortraitTableWithAttachment } from '@/hooks';
+import { useQuery } from '@tanstack/vue-query';
+import { EnumEnterpriseCooperationWalletTransactionStatusText } from '@/constants';
+import * as enterpriseCooperationWalletServices from '@/services/api/enterpriseCooperationWallet';
+import { convertApi2FormUrl } from '@/utils';
+
+defineOptions({
+  name: 'RechargeRecordialog',
+});
+
+const visible = defineModel({ type: Boolean });
+
+type Form = {
+  title?: string;
+  id: string;
+};
+
+const form = defineModel<Form>('form');
+
+const emit = defineEmits<{
+  (e: 'onConfirm'): void;
+  (e: 'onCancel'): void;
+}>();
+
+watch(
+  () => visible.value,
+  (val) => {
+    if (val) {
+      refetch();
+    }
+  }
+);
+
+const { data: detail, refetch } = useQuery({
+  queryKey: [
+    'enterpriseCooperationWalletServices/getCooperationWalletRechargeTransaction',
+    form.value.id,
+  ],
+  queryFn: async () => {
+    return await enterpriseCooperationWalletServices.getCooperationWalletRechargeTransaction({
+      id: form.value.id,
+    });
+  },
+  placeholderData: () => ({} as API.GetCooperationWalletRechargeTransactionQueryResult),
+  enabled: computed(() => !!form.value.id),
+});
+
+const { portraitTableWithAttachmentProps } = usePortraitTableWithAttachment({
+  data: detail,
+  annexList: computed(() =>
+    detail.value?.files ? detail.value?.files.map((item) => convertApi2FormUrl(item)) : []
+  ),
+  columns: [
+    {
+      label: '鍏呭�煎崟浣�',
+      key: 'receiveUnit',
+    },
+    {
+      label: '寮�鎴疯处鍙�',
+      key: 'receiveAccount',
+    },
+    {
+      label: '鍏呭�奸噾棰�',
+      key: 'amount',
+      type: 'money',
+    },
+    {
+      label: '鍏呭�兼椂闂�',
+      key: 'createdTime',
+      type: 'date',
+    },
+    {
+      label: '鍏呭�肩姸鎬�',
+      key: 'transactionStatus',
+      type: 'enum',
+      valueEnum: EnumEnterpriseCooperationWalletTransactionStatusText,
+    },
+  ],
+});
+
+const dialogForm = ref<FormInstance>();
+
+function onDialogClose() {
+  if (!dialogForm.value) return;
+  dialogForm.value.resetFields();
+}
+</script>
diff --git a/src/views/FinanceManage/constants/columns.ts b/src/views/FinanceManage/constants/columns.ts
index ab116f7..2dafec6 100644
--- a/src/views/FinanceManage/constants/columns.ts
+++ b/src/views/FinanceManage/constants/columns.ts
@@ -22,71 +22,3 @@
     name: '璐圭敤锛堝厓锛�',
   },
 ]);
-
-export const BalanceManageColumns = defineColumns([
-  {
-    id: '1',
-    enCode: 'access',
-    name: '璐︽埛绫诲瀷',
-  },
-  {
-    id: '2',
-    enCode: 'identity',
-    name: '鎴峰彿',
-  },
-  {
-    id: '3',
-    enCode: 'balance',
-    name: '璐︽埛浣欓',
-  },
-]);
-
-export const BalanceManageDetailColumns = defineColumns([
-  {
-    id: '1',
-    enCode: 'sendTime',
-    name: '鍙戞斁鏃ユ湡',
-  },
-  {
-    id: '2',
-    enCode: 'code',
-    name: '娴佹按鍙�',
-  },
-  {
-    id: '3',
-    enCode: 'transactionStatus',
-    name: '鐘舵��',
-    width: 120,
-  },
-  {
-    id: '4',
-    enCode: 'amount',
-    name: '閲戦',
-    width: 120,
-  },
-  {
-    id: '5',
-    enCode: 'receiveName',
-    name: '鏀舵浜�',
-  },
-  {
-    id: '6',
-    enCode: 'receiveIdentity',
-    name: '韬唤璇佸彿',
-  },
-  {
-    id: '7',
-    enCode: 'receiveAccount',
-    name: '鏀舵浜鸿处鎴�',
-  },
-  {
-    id: '8',
-    enCode: 'transDate',
-    name: '鎻愮幇鏃ユ湡',
-  },
-  {
-    id: '9',
-    enCode: 'ereceiptDownloadOssUrl',
-    name: '鐢靛瓙鍥炲崟',
-  },
-]);
diff --git a/src/views/FlexJobManage/FlexJobContractManage.vue b/src/views/FlexJobManage/FlexJobContractManage.vue
new file mode 100644
index 0000000..0aea8c5
--- /dev/null
+++ b/src/views/FlexJobManage/FlexJobContractManage.vue
@@ -0,0 +1,552 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableQueryFilterBar @on-reset="reset">
+        <template #query>
+          <QueryFilterItem tip-content="鐏靛伐绛剧害鐘舵��">
+            <FieldSelect
+              v-model="extraParamState.userSignContractStatus"
+              :value-enum="EnumTaskUserSignContractStatusText"
+              placeholder="璇烽�夋嫨鐏靛伐绛剧害鐘舵��"
+              clearable
+              @change="getList()"
+            />
+          </QueryFilterItem>
+          <QueryFilterItem tip-content="浼佷笟绛剧害鐘舵��">
+            <FieldSelect
+              v-model="extraParamState.enterpriseSignContractStatus"
+              :value-enum="EnumTaskUserSignContractStatusText"
+              placeholder="璇烽�夋嫨浼佷笟绛剧害鐘舵��"
+              clearable
+              @change="getList()"
+            />
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <FieldDatePicker
+              v-model="extraParamState.userSignContractTime"
+              type="daterange"
+              range-separator="~"
+              start-placeholder="璧峰鏃ユ湡"
+              end-placeholder="鎴鏃ユ湡"
+              clearable
+              @change="getList()"
+              tooltipContent="鐏靛伐绛剧害鏃堕棿"
+            ></FieldDatePicker>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <FieldDatePicker
+              v-model="extraParamState.signContractTime"
+              type="daterange"
+              range-separator="~"
+              start-placeholder="璧峰鏃ユ湡"
+              end-placeholder="鎴鏃ユ湡"
+              clearable
+              @change="getList()"
+              tooltipContent="浼佷笟绛剧害鏃堕棿"
+            ></FieldDatePicker>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.searchWord"
+              style="width: 300px"
+              placeholder="濮撳悕/鎵嬫満/韬唤璇佸彿"
+              @on-click-search="getList"
+              @keyup.enter="getList()"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+        </template>
+        <template #btn>
+          <!-- <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
+            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
+            v-if="checkSubModuleItemShow('pageButton', 'batchEnterpriseSignBtn')"
+            @click="handleEnterpriseBatchSign()"
+            type="primary"
+            >鎵归噺浼佷笟绛剧害</el-button
+          >
+        </template>
+      </ProTableQueryFilterBar>
+      <ProTableV2
+        v-bind="proTableProps"
+        :columns="column"
+        :operationBtns="operationBtns"
+        show-column-check
+        ref="proTable"
+        :table-props="{
+          rowKey: 'id',
+        }"
+      >
+      </ProTableV2>
+    </AppContainer>
+    <!-- <StaffInfoDialog v-bind="dialogStaffInfoProps" /> -->
+    <StaffDetailInfoDialog v-bind="dialogStaffDetailProps" />
+    <BatchImportDialog
+      v-bind="dialogBatchImportProps"
+      @onDownloadTemplate="handleDownloadTemplate"
+    />
+    <SendShotMessageDialog v-bind="dialogShotMessageProps" />
+    <SignDialog v-bind="dialogSignProps" />
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  ProTableQueryFilterBar,
+  OperationBtnType,
+  ProTableV2,
+  SearchInput,
+  LoadingLayout,
+  AppContainer,
+  QueryFilterItem,
+  useTable,
+  FieldDatePicker,
+  FieldSelect,
+  useFormDialog,
+  UploadUserFile,
+  XLSXUtils,
+} from '@bole-core/components';
+import { EnumTaskUserHireStatusText, EnumTaskUserSignContractStatusText } from '@/constants';
+import { Message } from '@bole-core/core';
+import { convertApi2FormUrlOnlyOne, downloadFileByUrl, format } from '@/utils';
+// import StaffInfoDialog from './components/StaffInfoDialog.vue';
+import BatchImportDialog from './components/BatchImportDialog.vue';
+import SendShotMessageDialog from './components/SendShotMessageDialog.vue';
+import StaffDetailInfoDialog from './components/StaffDetailInfoDialog.vue';
+import SignDialog from './components/SignDialog.vue';
+import * as enterpriseEmployeeServices from '@/services/api/enterpriseEmployee';
+import { ModelValueType } from 'element-plus';
+import _ from 'lodash';
+import { getEnterpriseEmployeesHooks } from './hooks';
+
+defineOptions({
+  name: 'FlexJobContractManage',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+  // editBtn: {
+  //   emits: {
+  //     onClick: (role) => openDialog(role),
+  //   },
+  // },
+  detailBtn: {
+    emits: {
+      onClick: (role: API.GetEnterpriseEmployeesQueryResultItem) =>
+        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.source === EnumEnterpriseEmployeeSource.Internal &&
+          row.userSignContractStatus !== EnumTaskUserSignContractStatus.Pass
+        ),
+    },
+  },
+  unSignBtn: {
+    emits: {
+      onClick: (role) => handleUnSign(role),
+    },
+    extraProps: {
+      hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
+        !(
+          row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
+          row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Pass
+        ),
+    },
+  },
+  delBtn: {
+    props: { type: 'danger' },
+    emits: {
+      onClick: (role) => handleDelete(role),
+    },
+  },
+};
+
+const { checkSubModuleItemShow, column, operationBtns } = useAccess({
+  operationBtnMap,
+});
+
+const router = useRouter();
+
+const BaseState = {
+  loading: true,
+};
+
+const state = reactive({ ...BaseState });
+
+onMounted(async () => {
+  await getList();
+  state.loading = false;
+});
+
+const { getList, proTableProps, paginationState, extraParamState, reset } =
+  getEnterpriseEmployeesHooks();
+
+const proTable = ref<InstanceType<typeof ProTableV2>>();
+
+function getSelectionRows() {
+  if (proTableProps.value.tableData.length) {
+    const res = proTable.value.innerTableRef.getSelectionRows();
+    if (res.length > 0) {
+      return res;
+    } else {
+      Message.errorMessage('鏈�夋嫨鏁版嵁');
+    }
+  } else {
+    Message.errorMessage('鏆傛棤鏁版嵁');
+  }
+}
+
+const {
+  dialogProps: dialogStaffInfoProps,
+  handleEdit: handleStaffInfoEdit,
+  handleAdd: handleStaffInfoAdd,
+  editForm: staffInfoEditForm,
+} = useFormDialog({
+  onConfirm: handleAddOrEdit,
+  defaultFormParams: {
+    id: '',
+    name: '',
+    identity: '',
+    contactPhoneNumber: '',
+    gender: EnumUserGender.Male,
+    age: null as any as number,
+    identityImg: [] as UploadUserFile[],
+    identityBackImg: [] as UploadUserFile[],
+    contractUrl: [] as UploadUserFile[],
+    regiterTime: '',
+    userRealTime: '',
+    userSignContractTime: '',
+    isDetail: false,
+  },
+});
+
+async function openDialog(row: API.GetEnterpriseEmployeesQueryResultItem, isDetail = false) {
+  try {
+    let detail = await enterpriseEmployeeServices.getEnterpriseEmployee({ id: row.id });
+    handleStaffInfoEdit({
+      id: row.id,
+      name: row.name,
+      identity: row.identity,
+      contactPhoneNumber: row.contactPhoneNumber,
+      gender: detail.gender,
+      age: detail.age ?? null,
+      identityImg: convertApi2FormUrlOnlyOne(detail.identityImg),
+      identityBackImg: convertApi2FormUrlOnlyOne(detail.identityBackImg),
+      contractUrl: convertApi2FormUrlOnlyOne(detail.contractUrl, {
+        fileName: detail.contractUrl ? detail.contractUrl.split('/').pop() : '鍚堝悓',
+      }),
+      regiterTime: detail.applyTime ?? '',
+      userRealTime: row.userRealTime ?? '',
+      userSignContractTime: row.userSignContractTime ?? '',
+      isDetail: isDetail,
+    });
+  } catch (error) {}
+}
+
+async function handleAddOrEdit() {
+  try {
+    let params: API.EditEnterpriseEmployeeCommand = {
+      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 ?? '',
+      id: staffInfoEditForm.id,
+    };
+    let res = await enterpriseEmployeeServices.editEnterpriseEmployee(params);
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      getList(paginationState.pageIndex);
+    }
+  } catch (error) {}
+}
+
+const {
+  dialogProps: dialogBatchImportProps,
+  handleAdd: handleBatchImportAdd,
+  editForm: batchImportForm,
+} = useFormDialog({
+  onConfirm: handleBatchImport,
+  defaultFormParams: {
+    url: [] as UploadUserFile[],
+  },
+});
+
+async function handleBatchImport() {
+  try {
+    let params: API.ImportEnterpriseEmployeesCommand = {
+      excelUrl: batchImportForm.url[0]?.path ?? '',
+    };
+    let res = await enterpriseEmployeeServices.importEnterpriseEmployees(params);
+    if (res.failCount > 0) {
+      await Message.tipMessage('瀛樺湪閿欒鏁版嵁锛屾槸鍚﹀鍑猴紵');
+      XLSXUtils.exportToXLSX({
+        workbookDataList: res.errors,
+        fileName: '鐏靛伐鎵归噺瀵煎叆-閿欒鏁版嵁',
+        workbookHeaderMap: {
+          name: '濮撳悕',
+          identity: '韬唤璇佸彿',
+          contactPhoneNumber: '鎵嬫満鍙�',
+          errorMessage: '澶囨敞',
+        },
+      });
+    } else {
+      Message.successMessage('瀵煎叆鎴愬姛');
+      getList();
+    }
+  } catch (error) {}
+}
+
+const {
+  dialogProps: dialogShotMessageProps,
+  handleAdd: handleShotMessageAdd,
+  editForm: editShotMessageForm,
+} = useFormDialog({
+  onConfirm: sendMessageForSign,
+  defaultFormParams: {
+    ids: [] as string[],
+    customerId: '',
+    name: '',
+    contractTemplateId: '',
+  },
+});
+
+async function handleSendShotMessage() {
+  try {
+    const selectionRows = getSelectionRows();
+    if (selectionRows) {
+      if (selectionRows.some((x) => x.source === EnumEnterpriseEmployeeSource.External)) {
+        Message.warnMessage('鍕鹃�変汉鍛樹腑鍖呭惈澶栭儴浜哄憳');
+        return;
+      } else if (
+        selectionRows.some((x) => x.userSignContractStatus === EnumTaskUserSignContractStatus.Pass)
+      ) {
+        await Message.tipMessage('鍕鹃�変汉鍛樹腑鍖呭惈宸茬绾﹀畬鎴愪汉鍛橈紝纭瑕佺户缁彂閫佺煭淇¢�氱煡鍚楋紵');
+      }
+      handleShotMessageAdd({
+        ids: selectionRows.map((x) => x.id),
+        name: '浜哄憳绛剧害閫氶亾鐭俊',
+      });
+    }
+  } catch (error) {}
+}
+
+async function sendMessageForSign() {
+  try {
+    let params: API.SendInviteElectronSignSmsCommand = {
+      ids: editShotMessageForm.ids,
+      contractTemplateId: editShotMessageForm.contractTemplateId,
+    };
+    let res = await enterpriseEmployeeServices.sendInviteElectronSignSms(params);
+    if (res) {
+      Message.successMessage('鐭俊宸插彂閫�');
+    }
+  } catch (error) {}
+}
+
+function handleDownloadTemplate() {
+  downloadFileByUrl(ImportEnterpriseEmployeesTempPath, '鎵归噺瀵煎叆妯℃澘');
+}
+
+const {
+  dialogProps: dialogSignProps,
+  handleAdd: handleSignAdd,
+  handleEdit: handleSignEdit,
+  editForm: signEditForm,
+} = useFormDialog({
+  onConfirm: signContract,
+  defaultFormParams: {
+    ids: [] as string[],
+    contractTemplateId: '',
+  },
+});
+
+function handleInviteSign(row: API.GetEnterpriseEmployeesQueryResultItem) {
+  if (row) {
+    handleSignEdit({
+      ids: [row.id],
+      contractTemplateId: '',
+    });
+  }
+}
+function handleBatchSign() {
+  const selectionRows = getSelectionRows();
+  if (selectionRows) {
+    const hasSigned = selectionRows?.some(
+      (x) =>
+        x.userSignContractStatus === EnumTaskUserSignContractStatus.Pass ||
+        x.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Pass ||
+        x.source === EnumEnterpriseEmployeeSource.External
+    );
+    if (hasSigned) {
+      Message.warnMessage('鍕鹃�変汉鍛樹腑鍖呭惈宸茬绾﹀畬鎴愭垨澶栭儴浜哄憳');
+      return;
+    }
+    handleSignAdd({
+      ids: selectionRows.map((x) => x.id),
+      contractTemplateId: '',
+    });
+  }
+}
+
+const handleEnterpriseBatchSign = _.debounce(
+  () => {
+    const selectionRows = getSelectionRows();
+    if (selectionRows) {
+      const hasSigned = selectionRows?.some(
+        (x) =>
+          !(
+            x.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
+            x.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Wait
+          )
+      );
+      if (hasSigned) {
+        Message.warnMessage('鍕鹃�変汉鍛樹腑鍖呭惈宸蹭紒涓氱绾︺�佹湭褰曠敤浜哄憳鎴栨湭绛剧害瀹屾垚浜哄憳');
+        return;
+      }
+      const ids = selectionRows.map((x) => x.id);
+      handleBatchEnterpriseSign(ids);
+    }
+  },
+  1000,
+  { leading: true, trailing: false }
+);
+
+async function handleBatchEnterpriseSign(ids: string[]) {
+  try {
+    state.loading = true;
+    let res = await enterpriseEmployeeServices.batchEnterpriseSignContract({ ids: ids });
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      getList(paginationState.pageIndex);
+      if (res?.errors?.length > 0) {
+        Message.tipMessage('瀛樺湪绛剧害澶辫触鐨勭伒宸ヤ俊鎭暟鎹紝鏄惁瀵煎嚭锛�').then(() => {
+          XLSXUtils.exportToXLSX({
+            workbookDataList: res.errors,
+            fileName: '绛剧害澶辫触鐏靛伐淇℃伅',
+            workbookHeaderMap: {
+              name: '濮撳悕',
+              contactPhoneNumber: '鎵嬫満鍙�',
+              identity: '韬唤璇佸彿',
+              errorMessages: '閿欒淇℃伅',
+            },
+          });
+        });
+      }
+    }
+  } catch (error) {
+  } finally {
+    state.loading = false;
+  }
+}
+
+async function signContract() {
+  try {
+    let params: API.InviteElectronSignCommand = {
+      ids: signEditForm.ids,
+      contractTemplateId: signEditForm.contractTemplateId,
+    };
+    let res = await enterpriseEmployeeServices.inviteElectronSign(params);
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      getList(paginationState.pageIndex);
+    }
+  } catch (error) {}
+}
+
+async function handleEnterpriseSign(row: API.GetEnterpriseEmployeesQueryResultItem) {
+  try {
+    let res = await enterpriseEmployeeServices.enterpriseUserElectronSign({ id: row.id });
+    if (res) {
+      window.open(res?.signContractLongUrl, '_blank');
+    }
+  } catch (error) {}
+}
+
+function handleUnSign(row: API.GetEnterpriseEmployeesQueryResultItem) {
+  stopElectronSign([row.id]);
+}
+
+function handleBatchUnSign() {
+  try {
+    const selectionRows = getSelectionRows();
+    if (selectionRows) {
+      const hasUnSigned = selectionRows?.some(
+        (x) => x.enterpriseSignContractStatus !== EnumTaskUserSignContractStatus.Pass
+      );
+      if (hasUnSigned) {
+        Message.warnMessage('鍕鹃�夋暟鎹腑鍖呭惈浼佷笟鏈绾︽垨宸茶В绾︽暟鎹�');
+        return;
+      }
+      stopElectronSign(selectionRows.map((x) => x.id));
+    }
+  } catch (error) {}
+}
+
+async function stopElectronSign(ids: string[]) {
+  try {
+    await Message.tipMessage('纭畾瑙g害鐢ㄦ埛锛�');
+    let res = await enterpriseEmployeeServices.stopElectronSign({ ids: ids });
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      getList(paginationState.pageIndex);
+    }
+  } catch (error) {}
+}
+
+const {
+  dialogProps: dialogStaffDetailProps,
+  handleEdit: handleStaffDetailEdit,
+  editForm: staffDetailEditForm,
+} = useFormDialog({
+  defaultFormParams: {
+    id: '',
+    tabType: 'info',
+  },
+});
+
+async function handleDelete(row: API.GetEnterpriseEmployeesQueryResultItem) {
+  try {
+    await Message.deleteMessage();
+  } catch (error) {}
+}
+</script>
diff --git a/src/views/FlexJobManage/FlexJobManage.vue b/src/views/FlexJobManage/FlexJobManage.vue
index b4522c1..98bdc03 100644
--- a/src/views/FlexJobManage/FlexJobManage.vue
+++ b/src/views/FlexJobManage/FlexJobManage.vue
@@ -3,7 +3,7 @@
     <AppContainer>
       <ProTableQueryFilterBar @on-reset="reset">
         <template #query>
-          <QueryFilterItem tip-content="褰曠敤鐘舵��">
+          <!-- <QueryFilterItem tip-content="褰曠敤鐘舵��">
             <FieldRadio
               v-model="extraParamState.hireStatus"
               :value-enum="EnumTaskUserHireStatusText"
@@ -11,7 +11,7 @@
               showAllBtn
               @change="getList()"
             />
-          </QueryFilterItem>
+          </QueryFilterItem> -->
           <QueryFilterItem tip-content="瀹炲悕鐘舵��">
             <FieldRadio
               v-model="extraParamState.isReal"
@@ -25,6 +25,15 @@
               @change="getList()"
             />
           </QueryFilterItem>
+          <QueryFilterItem tip-content="鐏靛伐鏉ユ簮">
+            <FieldRadio
+              v-model="extraParamState.source"
+              :value-enum="EnumEnterpriseEmployeeSourceText"
+              buttonStyle
+              showAllBtn
+              @change="getList()"
+            />
+          </QueryFilterItem>
           <QueryFilterItem tip-content="鐏靛伐绛剧害鐘舵��">
             <FieldSelect
               v-model="extraParamState.userSignContractStatus"
@@ -43,7 +52,7 @@
               @change="getList()"
             />
           </QueryFilterItem>
-          <QueryFilterItem>
+          <!-- <QueryFilterItem>
             <FieldDatePicker
               v-model="extraParamState.createdTime"
               type="daterange"
@@ -66,12 +75,24 @@
               @change="getList()"
               tooltipContent="绛剧害鏃堕棿"
             ></FieldDatePicker>
+          </QueryFilterItem> -->
+          <QueryFilterItem>
+            <FieldDatePicker
+              v-model="extraParamState.userRealTime"
+              type="daterange"
+              range-separator="~"
+              start-placeholder="璧峰鏃ユ湡"
+              end-placeholder="鎴鏃ユ湡"
+              clearable
+              @change="getList()"
+              tooltipContent="瀹炲悕鏃堕棿"
+            ></FieldDatePicker>
           </QueryFilterItem>
           <QueryFilterItem>
             <SearchInput
               v-model="extraParamState.searchWord"
               style="width: 300px"
-              placeholder="濮撳悕/鎵嬫満/韬唤璇佸彿/瀹㈡埛"
+              placeholder="濮撳悕/鎵嬫満/韬唤璇佸彿"
               @on-click-search="getList"
               @keyup.enter="getList()"
             >
@@ -79,17 +100,62 @@
           </QueryFilterItem>
         </template>
         <template #btn>
-          <el-button @click="handleDownloadTemplate()" type="primary" link>妯℃澘涓嬭浇</el-button>
-          <el-button @click="handleBatchImportAdd()" 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 @click="handleEnterpriseBatchSign()" type="primary">鎵归噺浼佷笟绛剧害</el-button>
+          <el-button
+            v-if="checkSubModuleItemShow('pageButton', 'importBtn')"
+            @click="handleDownloadFlexJobTemplate()"
+            type="primary"
+            link
+            >妯℃澘涓嬭浇</el-button
+          >
+          <BlFileUpload
+            v-if="checkSubModuleItemShow('pageButton', 'importBtn')"
+            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 type="primary" class="pro-table-operation-btn">鎵归噺瀵煎叆</el-button>
+          </BlFileUpload>
+          <el-button
+            v-if="checkSubModuleItemShow('pageButton', 'addBtn')"
+            @click="handleInternalStaffAdd()"
+            type="primary"
+            >鏂板缓</el-button
+          >
+          <!-- <el-button
+            v-if="checkSubModuleItemShow('pageButton', 'batchUnSignBtn')"
+            @click="handleBatchUnSign()"
+            type="primary"
+            >鎵归噺瑙g害</el-button
+          >
+          <el-button
+            v-if="checkSubModuleItemShow('pageButton', 'sendShotBtn')"
+            @click="handleSendShotMessage()"
+            type="primary"
+            >鐭俊鍙戦��</el-button
+          >
+          <el-button
+            v-if="checkSubModuleItemShow('pageButton', 'batchSignBtn')"
+            @click="handleBatchSign()"
+            type="primary"
+            >鎵归噺绛剧害</el-button
+          >
+          <el-button
+            v-if="checkSubModuleItemShow('pageButton', 'enterpriseBatchSignBtn')"
+            @click="handleEnterpriseBatchSign()"
+            type="primary"
+            >鎵归噺浼佷笟绛剧害</el-button
+          > -->
         </template>
       </ProTableQueryFilterBar>
       <ProTableV2
         v-bind="proTableProps"
-        :columns="FlexJobManageColumns"
+        :columns="column"
         :operationBtns="operationBtns"
         show-column-check
         ref="proTable"
@@ -107,6 +173,7 @@
     />
     <SendShotMessageDialog v-bind="dialogShotMessageProps" />
     <SignDialog v-bind="dialogSignProps" />
+    <AddInternalStaffDialog v-bind="dialogAddInternalStaffProps" />
   </LoadingLayout>
 </template>
 
@@ -123,112 +190,101 @@
   FieldDatePicker,
   FieldRadio,
   FieldSelect,
-  defineOperationBtns,
   useFormDialog,
   UploadUserFile,
   XLSXUtils,
+  BlFileUpload,
 } from '@bole-core/components';
-import { FlexJobManageColumns } from './constants';
-import { EnumTaskUserHireStatusText, EnumTaskUserSignContractStatusText } from '@/constants';
+import {
+  EnumTaskUserHireStatusText,
+  EnumTaskUserSignContractStatusText,
+  EnumEnterpriseEmployeeSourceText,
+} from '@/constants';
 import { Message } from '@bole-core/core';
-import { convertApi2FormUrlOnlyOne, downloadFileByUrl, format } from '@/utils';
+import {
+  convertApi2FormUrlOnlyOne,
+  downloadFileByUrl,
+  format,
+  hiddenIDNumberForEnd4,
+} from '@/utils';
 import StaffInfoDialog from './components/StaffInfoDialog.vue';
 import BatchImportDialog from './components/BatchImportDialog.vue';
 import SendShotMessageDialog from './components/SendShotMessageDialog.vue';
 import StaffDetailInfoDialog from './components/StaffDetailInfoDialog.vue';
+import AddInternalStaffDialog from './components/AddInternalStaffDialog.vue';
 import SignDialog from './components/SignDialog.vue';
 import * as enterpriseEmployeeServices from '@/services/api/enterpriseEmployee';
 import { ModelValueType } from 'element-plus';
 import _ from 'lodash';
+import { getEnterpriseEmployeesHooks } from './hooks';
 
 defineOptions({
   name: 'FlexJobManageList',
 });
 
-const operationBtns = defineOperationBtns([
-  {
-    data: {
-      enCode: 'editBtn',
-      name: '缂栬緫',
-    },
+const operationBtnMap: Record<string, OperationBtnType> = {
+  editBtn: {
     emits: {
-      onClick: (role) => openDialog(role),
+      onClick: (role) => openInternalDialog(role),
+    },
+    extraProps: {
+      hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
+        row.source === EnumEnterpriseEmployeeSource.External,
     },
   },
-  {
-    data: {
-      enCode: 'detailBtn',
-      name: '璇︽儏',
-    },
+  detailBtn: {
     emits: {
       onClick: (role: API.GetEnterpriseEmployeesQueryResultItem) =>
         handleStaffDetailEdit({ id: role.id, tabType: 'info' }),
     },
   },
-  {
-    data: {
-      enCode: 'enterpriseSignBtn',
-      name: '浼佷笟绛剧害',
-    },
-    emits: {
-      onClick: (role) => handleEnterpriseSign(role),
-    },
-    extraProps: {
-      hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
-        !(
-          row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
-          row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Wait
-        ),
-    },
-  },
-  {
-    data: {
-      enCode: 'inviteSignBtn',
-      name: '閭�璇风绾�',
-    },
-    emits: {
-      onClick: (role) => handleInviteSign(role),
-    },
-    extraProps: {
-      hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
-        !(
-          row.userSignContractStatus !== EnumTaskUserSignContractStatus.Pass &&
-          row.hireStatus === EnumTaskUserHireStatus.Pass
-        ),
-    },
-  },
-  {
-    data: {
-      enCode: 'unSignBtn',
-      name: '瑙g害',
-    },
-    emits: {
-      onClick: (role) => handleUnSign(role),
-    },
-    extraProps: {
-      hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
-        !(
-          row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
-          row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Pass
-        ),
-    },
-  },
-  // {
-  //   data: {
-  //     enCode: 'delBtn',
-  //     name: '鍒犻櫎',
-  //   },
-  //   props: { type: 'danger' },
+  // enterpriseSignBtn: {
   //   emits: {
-  //     onClick: (role) => handleDelete(role),
+  //     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({
+  operationBtnMap,
+});
 
 const router = useRouter();
 
 const BaseState = {
   loading: true,
+  flexjobUrl: [] as UploadUserFile[],
 };
 
 const state = reactive({ ...BaseState });
@@ -238,75 +294,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>>();
 
@@ -326,9 +315,10 @@
 const {
   dialogProps: dialogStaffInfoProps,
   handleEdit: handleStaffInfoEdit,
+  handleAdd: handleStaffInfoAdd,
   editForm: staffInfoEditForm,
 } = useFormDialog({
-  onConfirm: handleAddOrEdit,
+  onConfirm: editEnterpriseEmployee,
   defaultFormParams: {
     id: '',
     name: '',
@@ -369,7 +359,7 @@
   } catch (error) {}
 }
 
-async function handleAddOrEdit() {
+async function editEnterpriseEmployee() {
   try {
     let params: API.EditEnterpriseEmployeeCommand = {
       name: staffInfoEditForm.name,
@@ -473,6 +463,10 @@
   downloadFileByUrl(ImportEnterpriseEmployeesTempPath, '鎵归噺瀵煎叆妯℃澘');
 }
 
+function handleDownloadFlexJobTemplate() {
+  downloadFileByUrl(ImportFlexJobTempPath, '鎵归噺瀵煎叆妯℃澘');
+}
+
 const {
   dialogProps: dialogSignProps,
   handleAdd: handleSignAdd,
@@ -635,4 +629,121 @@
     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[];
+  }
+}
+
+const {
+  dialogProps: dialogAddInternalStaffProps,
+  handleAdd: handleInternalStaffAdd,
+  handleEdit: handleInternalStaffEdit,
+  editForm: internalStaffEditForm,
+  dialogState: internalDialogState,
+} = useFormDialog({
+  onConfirm: addEnterpriseEmployee,
+  defaultFormParams: {
+    id: '',
+    name: '',
+    identity: '',
+    contactPhoneNumber: '',
+    gender: EnumUserGender.Male,
+    age: null as any as number,
+    identityImg: [] as UploadUserFile[],
+    identityBackImg: [] as UploadUserFile[],
+    contractUrl: [] as UploadUserFile[],
+    regiterTime: '',
+    userRealTime: '',
+    userSignContractTime: '',
+    contractTime: [] as unknown as ModelValueType,
+  },
+  closeAfterConfirm: false,
+});
+
+async function openInternalDialog(row: API.GetEnterpriseEmployeesQueryResultItem) {
+  try {
+    let detail = await enterpriseEmployeeServices.getEnterpriseEmployee({ id: row.id });
+    handleInternalStaffEdit({
+      id: row.id,
+      name: row.name,
+      identity: row.identity,
+      contactPhoneNumber: row.contactPhoneNumber,
+      gender: detail.gender,
+      age: detail.age ?? null,
+      identityImg: convertApi2FormUrlOnlyOne(detail.identityImg),
+      identityBackImg: convertApi2FormUrlOnlyOne(detail.identityBackImg),
+      contractUrl: convertApi2FormUrlOnlyOne(detail.contractUrl, {
+        fileName: detail.contractUrl ? detail.contractUrl.split('/').pop() : '鍚堝悓',
+      }),
+      regiterTime: detail.applyTime ?? '',
+      userRealTime: row.userRealTime ?? '',
+      userSignContractTime: row.userSignContractTime ?? '',
+      contractTime: [row.contractBegin, row.contractEnd],
+    });
+  } catch (error) {}
+}
+
+async function addEnterpriseEmployee() {
+  try {
+    const isEdit = !!internalStaffEditForm.id;
+    let params: API.AddEnterpriseEmployeeCommand = {
+      name: internalStaffEditForm.name,
+      identity: internalStaffEditForm.identity,
+      contactPhoneNumber: internalStaffEditForm.contactPhoneNumber,
+      gender: internalStaffEditForm.gender,
+      age: internalStaffEditForm.age,
+      identityImg: internalStaffEditForm.identityImg[0]?.path ?? '',
+      identityBackImg: internalStaffEditForm.identityBackImg[0]?.path ?? '',
+      contractUrl: internalStaffEditForm.contractUrl[0]?.path ?? '',
+      contractBegin: format(internalStaffEditForm.contractTime[0], 'YYYY-MM-DD 00:00:00'),
+      contractEnd: format(internalStaffEditForm.contractTime[1], 'YYYY-MM-DD 23:59:59'),
+    };
+    let res;
+    if (isEdit) {
+      (params as API.EditEnterpriseEmployeeCommand).id = internalStaffEditForm.id;
+      res = await enterpriseEmployeeServices.editEnterpriseEmployee(params);
+    } else {
+      res = await enterpriseEmployeeServices.addEnterpriseEmployee(params);
+    }
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      getList(paginationState.pageIndex);
+      internalDialogState.dialogVisible = false;
+    }
+  } catch (error) {
+    internalDialogState.dialogVisible = true;
+  }
+}
 </script>
diff --git a/src/views/FlexJobManage/components/AddInternalStaffDialog.vue b/src/views/FlexJobManage/components/AddInternalStaffDialog.vue
new file mode 100644
index 0000000..43f0a09
--- /dev/null
+++ b/src/views/FlexJobManage/components/AddInternalStaffDialog.vue
@@ -0,0 +1,225 @@
+<template>
+  <ProDialog
+    title="鏂板缓鐏靛伐"
+    v-model="visible"
+    @close="onDialogClose"
+    destroy-on-close
+    draggable
+    :width="900"
+  >
+    <ProForm :model="form" ref="dialogForm" label-width="120px">
+      <ProFormCol>
+        <ProFormColItem :span="12">
+          <ProFormItemV2 label="濮撳悕锛�" prop="name" :check-rules="[{ message: '璇疯緭鍏ュ鍚�' }]">
+            <ProFormText placeholder="璇疯緭鍏ュ鍚�" v-model.trim="form.name"></ProFormText>
+          </ProFormItemV2>
+        </ProFormColItem>
+        <ProFormColItem :span="12">
+          <ProFormItemV2 label="鏈嶅姟鍗忚锛�" prop="contractUrl">
+            <ProFormUpload
+              v-model:file-url="form.contractUrl"
+              :limit="1"
+              :limitFileSize="10"
+              accept="jpg/jpeg,png,pdf"
+            ></ProFormUpload>
+          </ProFormItemV2>
+        </ProFormColItem>
+        <ProFormColItem :span="12">
+          <ProFormItemV2
+            label="韬唤璇佸彿锛�"
+            prop="identity"
+            :check-rules="[{ message: '璇疯緭鍏ヨ韩浠借瘉鍙�', type: 'idCard' }]"
+          >
+            <ProFormText
+              placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�"
+              v-model.trim="form.identity"
+              @blur="handleCalculateAge"
+            ></ProFormText>
+          </ProFormItemV2>
+        </ProFormColItem>
+        <ProFormColItem :span="12">
+          <ProFormItemV2 label="鍗忚鏃堕棿:" prop="contractTime">
+            <ProFormDatePicker
+              v-model="form.contractTime"
+              type="daterange"
+              range-separator="鑷�"
+              start-placeholder="璧峰鏃ユ湡"
+              end-placeholder="缁堟鏃ユ湡"
+            ></ProFormDatePicker>
+          </ProFormItemV2>
+        </ProFormColItem>
+        <ProFormColItem :span="12">
+          <ProFormItemV2
+            label="鎵嬫満鍙凤細"
+            prop="contactPhoneNumber"
+            :check-rules="[{ message: '璇疯緭鍏ユ墜鏈哄彿', type: 'phone' }]"
+          >
+            <ProFormText
+              placeholder="璇疯緭鍏ユ墜鏈哄彿"
+              v-model.trim="form.contactPhoneNumber"
+            ></ProFormText>
+          </ProFormItemV2>
+        </ProFormColItem>
+        <ProFormColItem :span="12"> </ProFormColItem>
+        <ProFormColItem :span="12">
+          <ProFormItemV2
+            label="鎬у埆锛�"
+            prop="gender"
+            required
+            :check-rules="[{ message: '璇烽�夋嫨鎬у埆' }]"
+          >
+            <ProFormRadio
+              v-model="form.gender"
+              :value-enum="EnumUserGenderTextForPerson"
+              :buttonStyle="false"
+            ></ProFormRadio>
+          </ProFormItemV2>
+        </ProFormColItem>
+        <ProFormColItem :span="12"> </ProFormColItem>
+        <ProFormColItem :span="12">
+          <ProFormItemV2
+            label="骞撮緞锛�"
+            prop="age"
+            :check-rules="[{ message: '璇疯緭鍏ュ勾榫�', type: 'number' }]"
+          >
+            <ProFormInputNumber
+              v-model="form.age"
+              :controls="false"
+              :min="0"
+              :max="9999"
+              placeholder="璇疯緭鍏ュ勾榫�"
+              unit="宀�"
+            />
+          </ProFormItemV2>
+        </ProFormColItem>
+      </ProFormCol>
+      <ProFormItemV2
+        label="韬唤璇佹闈細"
+        prop="identityImg"
+        :check-rules="[{ message: '璇蜂笂浼犺韩浠借瘉姝i潰', type: 'upload' }]"
+      >
+        <ProFormImageUpload
+          v-model:file-url="form.identityImg"
+          :limitFileSize="10"
+          :showTip="false"
+          imgBlur
+        >
+        </ProFormImageUpload>
+      </ProFormItemV2>
+      <ProFormItemV2
+        label="韬唤璇佸弽闈細"
+        prop="identityBackImg"
+        :check-rules="[{ message: '璇蜂笂浼犺韩浠借瘉鍙嶉潰', type: 'upload' }]"
+      >
+        <ProFormImageUpload
+          v-model:file-url="form.identityBackImg"
+          :limitFileSize="10"
+          :showTip="false"
+          imgBlur
+        >
+        </ProFormImageUpload>
+      </ProFormItemV2>
+    </ProForm>
+    <template #footer>
+      <span class="dialog-footer">
+        <el-button type="primary" @click="handleConfirm">鎻愪氦</el-button>
+        <el-button @click="emit('onCancel')">鍙栨秷</el-button>
+      </span>
+    </template>
+  </ProDialog>
+</template>
+
+<script setup lang="ts">
+import { FormInstance, ModelValueType } from 'element-plus';
+import {
+  ProDialog,
+  ProForm,
+  ProFormItemV2,
+  ProFormText,
+  UploadUserFile,
+  ProFormCol,
+  ProFormColItem,
+  ProFormImageUpload,
+  ProFormRadio,
+  ProFormUpload,
+  ProFormInputNumber,
+  ProFormDatePicker,
+} from '@bole-core/components';
+import { calculateAge, deepClone, format, hiddenIDNumberForEnd4 } from '@/utils';
+import { EnumUserGender, EnumUserGenderTextForPerson } from '@/constants';
+import { BoleRegExp } from '@bole-core/core';
+
+defineOptions({
+  name: 'AddInternalStaffDialog',
+});
+
+type Form = {
+  title?: string;
+  id: string;
+  name: string;
+  identity: string;
+  contactPhoneNumber: string;
+  gender: EnumUserGender;
+  age: number;
+  identityImg: UploadUserFile[];
+  identityBackImg: UploadUserFile[];
+  contractUrl: UploadUserFile[];
+  regiterTime: string;
+  userRealTime: string;
+  userSignContractTime: string;
+
+  contractTime: ModelValueType;
+};
+
+const visible = defineModel({ type: Boolean });
+
+const form = defineModel<Form>('form');
+let defaultForm: Form = null;
+
+watch(
+  visible,
+  (visible) => {
+    if (visible) {
+      defaultForm = deepClone(unref(form));
+    }
+  },
+  {
+    immediate: true,
+  }
+);
+
+const emit = defineEmits<{
+  (e: 'onConfirm'): void;
+  (e: 'onCancel'): void;
+}>();
+
+const dialogForm = ref<FormInstance>();
+
+function onDialogClose() {
+  if (!dialogForm.value) return;
+  dialogForm.value.resetFields();
+}
+
+function handleConfirm() {
+  if (!dialogForm.value) return;
+  dialogForm.value.validate((valid) => {
+    if (valid) {
+      emit('onConfirm');
+    } else {
+      return;
+    }
+  });
+}
+
+function handleReset() {
+  form.value = { ...defaultForm };
+}
+
+function handleCalculateAge() {
+  form.value.age = calculateAge(form.value.identity);
+}
+
+function formatterIdentity(value: string) {
+  return hiddenIDNumberForEnd4(value);
+}
+</script>
diff --git a/src/views/FlexJobManage/components/StaffDetailInfoView.vue b/src/views/FlexJobManage/components/StaffDetailInfoView.vue
index 5dbe708..576721e 100644
--- a/src/views/FlexJobManage/components/StaffDetailInfoView.vue
+++ b/src/views/FlexJobManage/components/StaffDetailInfoView.vue
@@ -44,10 +44,10 @@
       </ProFormColItem>
     </ProFormCol>
     <ProFormItemV2 label="韬唤璇佹闈細" prop="identityImg">
-      <ProFormImageUpload v-model:file-url="detail.identityImg"> </ProFormImageUpload>
+      <ProFormImageUpload v-model:file-url="detail.identityImg" imgBlur> </ProFormImageUpload>
     </ProFormItemV2>
     <ProFormItemV2 label="韬唤璇佸弽闈細" prop="identityBackImg">
-      <ProFormImageUpload v-model:file-url="detail.identityBackImg"> </ProFormImageUpload>
+      <ProFormImageUpload v-model:file-url="detail.identityBackImg" imgBlur> </ProFormImageUpload>
     </ProFormItemV2>
   </ProForm>
 </template>
@@ -64,7 +64,7 @@
   ProFormRadio,
   UploadUserFile,
 } from '@bole-core/components';
-import { convertApi2FormUrlOnlyOne, format } from '@/utils';
+import { convertApi2FormUrlOnlyOne, format, hiddenIDNumberForEnd4 } from '@/utils';
 import { useQuery } from '@tanstack/vue-query';
 import { EnumUserGender, EnumUserGenderTextForPerson } from '@/constants';
 import * as enterpriseEmployeeServices from '@/services/api/enterpriseEmployee';
@@ -97,7 +97,7 @@
   },
   onSuccess(data) {
     detail.name = data.name;
-    detail.identity = data.identity;
+    detail.identity = hiddenIDNumberForEnd4(data.identity);
     detail.contactPhoneNumber = data.contactPhoneNumber;
     detail.gender = data.gender;
     detail.age = data.age ?? 0;
diff --git a/src/views/FlexJobManage/hooks/index.ts b/src/views/FlexJobManage/hooks/index.ts
new file mode 100644
index 0000000..0dcfb26
--- /dev/null
+++ b/src/views/FlexJobManage/hooks/index.ts
@@ -0,0 +1,108 @@
+import { format, hiddenIDNumberForEnd4 } 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'),
+          userRealTimeStart: format(extraParamState.userRealTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
+          userRealTimeEnd: format(extraParamState.userRealTime?.[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'
+          ),
+          userSignContractTimeStart: format(
+            extraParamState.userSignContractTime?.[0] ?? '',
+            'YYYY-MM-DD 00:00:00'
+          ),
+          userSignContractTimeEnd: format(
+            extraParamState.userSignContractTime?.[1] ?? '',
+            'YYYY-MM-DD 23:59:59'
+          ),
+          hireStatus: extraParamState.hireStatus,
+          isReal: extraParamState.isReal,
+          userSignContractStatus: extraParamState.userSignContractStatus,
+          enterpriseSignContractStatus: extraParamState.enterpriseSignContractStatus,
+
+          source: extraParamState.source,
+        };
+
+        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,
+        userSignContractTime: [] as unknown as ModelValueType,
+        userRealTime: [] 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,
+        source: '' as any as EnumEnterpriseEmployeeSource,
+      },
+      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 },
+        identity: {
+          formatter: (row: API.GetPersonalUserInfosQueryResultItem) => {
+            return hiddenIDNumberForEnd4(row.identity);
+          },
+        },
+      },
+    }
+  );
+
+  return {
+    getList,
+    proTableProps,
+    paginationState,
+    extraParamState,
+    reset,
+  };
+}
diff --git a/src/views/Permission/RoleManage.vue b/src/views/Permission/RoleManage.vue
index dfd95e2..2e32a69 100644
--- a/src/views/Permission/RoleManage.vue
+++ b/src/views/Permission/RoleManage.vue
@@ -185,7 +185,9 @@
     enterpriseType: AppLocalConfig.enterpriseType,
   },
 });
+
 const queryClient = useQueryClient();
+
 async function handleAddOrEdit() {
   try {
     const isEdit = editForm.id;
diff --git a/src/views/Permission/components/dialogAuthorizeV2.vue b/src/views/Permission/components/dialogAuthorizeV2.vue
index 77ef4d4..aad24be 100644
--- a/src/views/Permission/components/dialogAuthorizeV2.vue
+++ b/src/views/Permission/components/dialogAuthorizeV2.vue
@@ -21,6 +21,7 @@
             node-key="id"
             :expand-on-click-node="false"
             :highlight-current="true"
+            check-strictly
             default-expand-all
             show-checkbox
             ref="moduleTree"
@@ -60,7 +61,6 @@
             node-key="id"
             :expand-on-click-node="false"
             :highlight-current="true"
-            check-strictly
             default-expand-all
             show-checkbox
             ref="pageButtonTree"
diff --git a/src/views/ServiceChargeManage/BalanceManage.vue b/src/views/ServiceChargeManage/BalanceManage.vue
index a741e82..1bfe623 100644
--- a/src/views/ServiceChargeManage/BalanceManage.vue
+++ b/src/views/ServiceChargeManage/BalanceManage.vue
@@ -30,11 +30,7 @@
           </QueryFilterItem>
         </template>
       </ProTableQueryFilterBar>
-      <ProTableV2
-        v-bind="proTableProps"
-        :columns="BalanceManageColumns"
-        :operationBtns="operationBtns"
-      >
+      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
       </ProTableV2>
     </AppContainer>
     <BalanceDetailDialog v-bind="dialogProps" />
@@ -55,23 +51,22 @@
 } from '@bole-core/components';
 import * as userServices from '@/services/api/user';
 import BalanceDetailDialog from './components/BalanceDetailDialog.vue';
-import { BalanceManageColumns } from './constants';
+import { hiddenIDNumberForEnd4 } from '@/utils';
 
 defineOptions({
-  name: 'WithdrawManageList',
+  name: 'BalanceManage',
 });
 
-const operationBtns = defineOperationBtns([
-  {
-    data: {
-      enCode: 'detailBtn',
-      name: '鏄庣粏',
-    },
+const operationBtnMap: Record<string, OperationBtnType> = {
+  detailBtn: {
     emits: {
       onClick: (role) => openDialog(role),
     },
   },
-]);
+};
+const { column, operationBtns, checkSubModuleItemShow } = useAccess({
+  operationBtnMap,
+});
 
 const router = useRouter();
 const BaseState = {
@@ -120,6 +115,11 @@
     },
     columnsRenderProps: {
       balance: { type: 'money' },
+      identity: {
+        formatter: (row: API.GetPersonalUserWalletBalancesQueryResultItem) => {
+          return hiddenIDNumberForEnd4(row.identity);
+        },
+      },
     },
   }
 );
diff --git a/src/views/ServiceChargeManage/ServiceChargeDetail.vue b/src/views/ServiceChargeManage/ServiceChargeDetail.vue
index 6748247..97363ae 100644
--- a/src/views/ServiceChargeManage/ServiceChargeDetail.vue
+++ b/src/views/ServiceChargeManage/ServiceChargeDetail.vue
@@ -74,7 +74,13 @@
             >
               <el-button text type="primary" class="pro-table-operation-btn">瀵煎叆</el-button>
             </BlFileUpload> -->
-            <el-button type="primary" link @click="handleExport()">瀵煎嚭</el-button>
+            <el-button
+              v-if="checkSubModuleItemShow('pageButton', 'exportBtn')"
+              type="primary"
+              link
+              @click="handleExport()"
+              >瀵煎嚭</el-button
+            >
           </template>
         </ProTableQueryFilterBar>
         <ProTableV2
@@ -90,28 +96,29 @@
         </ProTableV2>
         <div class="chuck-add-or-edit-actions">
           <el-button class="chuck-add-or-edit-actions" @click="handleBack">鍙栨秷</el-button>
-          <!-- <el-button
+          <el-button
             v-if="
               isSettlement &&
               (!form.auditStatus || form.auditStatus !== EnumTaskSettlementAuditStatus.Pass)
             "
             class="chuck-add-or-edit-actions"
             type="primary"
-            @click="handleSubmit()"
-            >缁撶畻鐢宠</el-button
-          > -->
+            @click="handleSubmit('confirm')"
+            >缁撶畻纭</el-button
+          >
           <el-button
-            v-if="isSettlement"
+            v-if="isSettlement && form.auditStatus === EnumTaskSettlementAuditStatus.Pass"
             class="chuck-add-or-edit-actions"
             type="primary"
-            @click="handleSubmit()"
-            >缁撶畻纭</el-button
+            @click="handleSubmit('submit')"
+            >鎻愪氦缁撶畻</el-button
           >
         </div>
       </ChunkCell>
     </AppScrollContainer>
     <EditAccountInfoDialog v-bind="dialogProps"></EditAccountInfoDialog>
     <SettleDetailDialog v-bind="dialogSettleProps" />
+    <ResettleEditDialog v-bind="dialogResettleProps" />
   </LoadingLayout>
 </template>
 <script setup lang="ts">
@@ -143,6 +150,7 @@
 import * as taskUserServices from '@/services/api/taskUser';
 import EditAccountInfoDialog from './components/EditAccountInfoDialog.vue';
 import SettleDetailDialog from './components/SettleDetailDialog.vue';
+import ResettleEditDialog from './components/ResettleEditDialog.vue';
 import { Message } from '@bole-core/core';
 import { SettlementReceiveStatusText, EnumTaskSettlementAuditStatus } from '@/constants';
 import {
@@ -162,19 +170,35 @@
 
 const { closeViewPush } = useRouteView();
 const eventContext = useGlobalEventContext();
+
 const operationBtnMap: Record<string, OperationBtnType> = {
   editBtn: {
     emits: {
       onClick: (role) => openDialog(role),
     },
     extraProps: {
-      hide: () => !isSettlement.value,
+      hide: (row: API.GetSettlementTaskUsersQueryResultItem) =>
+        !(
+          (row.settlementReceiveStatus === SettlementReceiveStatus.Refunded &&
+            form.auditStatus === EnumTaskSettlementAuditStatus.Pass) ||
+          form.auditStatus === EnumTaskSettlementAuditStatus.Wait
+        ),
+    },
+  },
+  reSettleBtn: {
+    emits: {
+      onClick: (role) => againSureTaskSettlementOrderRoster(role),
+    },
+    extraProps: {
+      hide: (row: API.GetSettlementTaskUsersQueryResultItem) =>
+        row.settlementReceiveStatus !== SettlementReceiveStatus.Refunded,
     },
   },
 };
 const { column, operationBtns, checkSubModuleItemShow } = useAccess({
   operationBtnMap,
 });
+
 const route = useRoute();
 const id = (route.params.id as string) ?? '';
 const settlement = (route.query.settlement as string) ?? '';
@@ -199,7 +223,7 @@
 
   timeoutServiceFee: 0,
 
-  supplierEnterpriseId: '',
+  settlementStatus: '' as any as EnumTaskSettlementStatus,
 });
 
 const BaseState = {
@@ -235,7 +259,7 @@
       form.settlementAccess = res?.detail?.settlementAccess;
       form.auditStatus = res?.detail?.auditStatus;
       form.timeoutServiceFee = res?.detail?.timeoutServiceFee ?? 0;
-      form.supplierEnterpriseId = res?.detail?.supplierEnterpriseId;
+      form.settlementStatus = res?.detail?.settlementStatus;
       // form.settlementOrderName = setOssFileName(res?.detail?.settlementOrderName);
       // form.settlementOrderTime = res?.detail?.settlementOrderTime ?? '';
     }
@@ -344,22 +368,33 @@
 
 function openDialog(row?: API.GetSettlementTaskUsersQueryResultItem) {
   if (row) {
-    handleEdit({
-      id: row?.id,
-      settlementAmount: row?.settlementAmount ?? null,
-      actualSettlementAmount: row?.actualSettlementAmount ?? null,
-      receiveAccount: row?.receiveAccount ?? '',
-      bank: row?.bank ?? '',
-      // totalWorkHours: row?.totalWorkHours ?? null,
-      settlementAccess: form.settlementAccess,
-      // bankBranch: row?.bankBranch ?? '',
-      timeoutServiceFee: form.timeoutServiceFee,
-      serviceFee: row?.serviceFee ?? 0,
-      timeoutHours: row?.timeoutHours ?? null,
-      timeoutFee: row?.timeoutFee ?? null,
-      otherFee: row?.otherFee ?? null,
-      remark: row?.remark ?? '',
-    });
+    if (isSettlement) {
+      handleEdit({
+        id: row?.id,
+        settlementAmount: row?.settlementAmount ?? null,
+        actualSettlementAmount: row?.actualSettlementAmount ?? null,
+        receiveAccount: row?.receiveAccount ?? '',
+        bank: row?.bank ?? '',
+        // totalWorkHours: row?.totalWorkHours ?? null,
+        settlementAccess: form.settlementAccess,
+        // bankBranch: row?.bankBranch ?? '',
+        timeoutServiceFee: form.timeoutServiceFee,
+        serviceFee: row?.serviceFee ?? 0,
+        timeoutHours: row?.timeoutHours ?? null,
+        timeoutFee: row?.timeoutFee ?? null,
+        otherFee: row?.otherFee ?? null,
+        remark: row?.remark ?? '',
+      });
+    } else {
+      handleResettleEdit({
+        id: row?.id,
+        name: row?.name ?? '',
+        bank: row?.bank ?? '',
+        bankBranch: row?.bankBranch ?? '',
+        receiveAccount: row?.receiveAccount ?? '',
+        remark: row?.remark ?? '',
+      });
+    }
   }
 }
 
@@ -436,7 +471,7 @@
   }
 }
 
-function handleSubmit() {
+function handleSubmit(submitStatus: string) {
   let actualList = form.settlementTaskUsers.filter((x) => x.actualSettlementAmount > 0);
   const actualSettlementAmount = actualList.reduce(
     (pre, cur) => pre + cur.actualSettlementAmount,
@@ -447,11 +482,11 @@
     id: id,
     name: form.name,
     code: form.code,
+    submitStatus: submitStatus,
     settlementUserCount: actualList.length,
     actualSettlementAmount: actualSettlementAmount,
     settlementAmount: settlementAmount,
     settlementAccess: form.settlementAccess,
-    supplierEnterpriseId: form.supplierEnterpriseId,
   });
 }
 
@@ -465,16 +500,21 @@
     id: '',
     name: '',
     code: '',
+    submitStatus: '',
     settlementUserCount: 0,
     settlementAmount: 0,
     actualSettlementAmount: 0,
     settlementAccess: '' as any as EnumEnterpriseWalletAccess,
-    supplierEnterpriseId: '',
   },
 });
 
 async function handleSettle() {
-  auditTaskSettlement();
+  if (settleEditForm.submitStatus === 'confirm') {
+    auditTaskSettlement();
+  }
+  if (settleEditForm.submitStatus === 'submit') {
+    sureTaskSettlementOrder();
+  }
 }
 
 async function auditTaskSettlement() {
@@ -495,8 +535,9 @@
     let res = await taskServices.auditTaskSettlement(params);
     if (res) {
       Message.successMessage('鎿嶄綔鎴愬姛');
-      eventContext.emit('sureTaskSettlementOrder');
-      handleBack();
+      // eventContext.emit('sureTaskSettlementOrder');
+      // handleBack();
+      refetch();
     }
   } catch (error) {}
 }
@@ -535,6 +576,56 @@
   { leading: true, trailing: false }
 );
 
+const {
+  dialogProps: dialogResettleProps,
+  handleEdit: handleResettleEdit,
+  editForm: resettleEditForm,
+} = useFormDialog({
+  onConfirm: handleResettle,
+  defaultFormParams: {
+    id: '',
+    name: '',
+    bank: '',
+    bankBranch: '',
+    receiveAccount: '',
+    remark: '',
+  },
+});
+
+async function handleResettle() {
+  try {
+    let params: API.EditTaskSettlementOrderRosterCommand = {
+      id: id,
+      bank: resettleEditForm.bank,
+      bankBranch: resettleEditForm.bankBranch,
+      receiveAccount: resettleEditForm.receiveAccount,
+      remark: resettleEditForm.remark,
+      settlementAmount: 0,
+      actualSettlementAmount: 0,
+    };
+    let res = await taskServices.editTaskSettlementOrderRoster(params);
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      refetch();
+      getList(paginationState.pageIndex);
+    }
+  } catch (error) {}
+}
+
+async function againSureTaskSettlementOrderRoster(row: API.GetSettlementTaskUsersQueryResultItem) {
+  try {
+    let params: API.AgainSureTaskSettlementOrderRosterCommand = {
+      id: row.id,
+    };
+    let res = await taskServices.againSureTaskSettlementOrderRoster(params);
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      refetch();
+      getList(paginationState.pageIndex);
+    }
+  } catch (error) {}
+}
+
 function handleBack() {
   closeViewPush(route, {
     name: 'ServiceChargeManageList',
diff --git a/src/views/ServiceChargeManage/ServiceChargeManageList.vue b/src/views/ServiceChargeManage/ServiceChargeManageList.vue
index 119bdd0..2d37f2c 100644
--- a/src/views/ServiceChargeManage/ServiceChargeManageList.vue
+++ b/src/views/ServiceChargeManage/ServiceChargeManageList.vue
@@ -3,7 +3,7 @@
     <AppContainer>
       <ProTableQueryFilterBar @on-reset="reset">
         <template #query>
-          <QueryFilterItem tip-content="楠屾敹鐘舵��">
+          <!-- <QueryFilterItem tip-content="楠屾敹鐘舵��">
             <FieldRadio
               v-model="extraParamState.checkReceiveStatus"
               :value-enum="EnumTaskCheckReceiveStatusTextForFilter"
@@ -11,7 +11,7 @@
               showAllBtn
               @change="getList()"
             />
-          </QueryFilterItem>
+          </QueryFilterItem> -->
           <QueryFilterItem tip-content="缁撶畻鐘舵��">
             <FieldRadio
               v-model="extraParamState.settlementStatus"
@@ -119,6 +119,7 @@
   EnumTaskCheckReceiveStatusText,
   EnumTaskCheckReceiveStatusTextForFilter,
   EnumTaskCheckReceiveStatus,
+  EnumEnterpriseWalletAccessText,
 } from '@/constants';
 import { downloadFileByUrl, format, setOssFileName, setOSSLink } from '@/utils';
 import * as taskServices from '@/services/api/task';
@@ -136,9 +137,6 @@
 
 const operationBtnMap: Record<string, OperationBtnType> = {
   // uploadBtn: {
-  //   emits: {
-  //     onClick: (role: API.GetSettlementTasksQueryResultItem) => openSettleMethodDialog(role),
-  //   },
   //   extraProps: {
   //     hide: (row: API.GetSettlementTasksQueryResultItem) =>
   //       row.settlementOrderStatus !== EnumTaskSettlementOrderStatus.Wait,
@@ -159,24 +157,18 @@
     },
     extraProps: {
       hide: (role: API.GetSettlementTasksQueryResultItem) =>
-        !(
-          role.settlementStatus === EnumTaskSettlementStatus.Wait &&
-          role.auditStatus !== EnumTaskSettlementAuditStatus.Pass
-        ),
+        role.settlementStatus !== EnumTaskSettlementStatus.Wait,
     },
   },
-  // recallBtn: {
-  //   emits: {
-  //     onClick: (role) => handleRecall(role),
-  //   },
-  //   extraProps: {
-  //     hide: (role: API.GetSettlementTasksQueryResultItem) =>
-  //       !(
-  //         role.settlementStatus === EnumTaskSettlementStatus.InProcess &&
-  //         role.checkReceiveStatus === EnumTaskCheckReceiveStatus.Completed
-  //       ),
-  //   },
-  // },
+  recallBtn: {
+    emits: {
+      onClick: (role) => handleRecall(role),
+    },
+    extraProps: {
+      hide: (role: API.GetSettlementTasksQueryResultItem) =>
+        role.settlementStatus !== EnumTaskSettlementStatus.InProcess,
+    },
+  },
   // settleAuditBtn: {
   //   emits: {
   //     onClick: (role: API.GetSettlementTasksQueryResultItem) => goDetail(role.id, 'settlement'),
diff --git a/src/views/ServiceChargeManage/components/ResettleEditDialog.vue b/src/views/ServiceChargeManage/components/ResettleEditDialog.vue
new file mode 100644
index 0000000..970bb20
--- /dev/null
+++ b/src/views/ServiceChargeManage/components/ResettleEditDialog.vue
@@ -0,0 +1,90 @@
+<template>
+  <ProDialog
+    title="缂栬緫"
+    v-model="visible"
+    @close="onDialogClose"
+    destroy-on-close
+    draggable
+    :width="700"
+  >
+    <ProForm :model="form" ref="dialogForm" label-width="120px">
+      <ProFormItemV2 label="濮撳悕锛�" prop="name" mode="read">
+        <ProFormText v-model.trim="form.name"></ProFormText>
+      </ProFormItemV2>
+      <ProFormItemV2 label="閾惰锛�" prop="bank" :check-rules="[{ message: '璇疯緭鍏ラ摱琛�' }]">
+        <ProFormText placeholder="璇疯緭鍏ラ摱琛�" v-model.trim="form.bank"></ProFormText>
+      </ProFormItemV2>
+      <ProFormItemV2 label="鏀锛�" prop="bankBranch" :check-rules="[{ message: '璇疯緭鍏ユ敮琛�' }]">
+        <ProFormText placeholder="璇疯緭鍏ユ敮琛�" v-model.trim="form.bankBranch"></ProFormText>
+      </ProFormItemV2>
+      <ProFormItemV2
+        label="鏀舵璐︽埛锛�"
+        prop="receiveAccount"
+        :check-rules="[{ message: '璇疯緭鍏ユ敹娆捐处鎴�' }]"
+      >
+        <ProFormText placeholder="璇疯緭鍏ユ敹娆捐处鎴�" v-model.trim="form.receiveAccount"></ProFormText>
+      </ProFormItemV2>
+      <ProFormItemV2 label="澶囨敞锛�" prop="remark">
+        <ProFormTextArea placeholder="璇疯緭鍏ュ娉�" v-model="form.remark"></ProFormTextArea>
+      </ProFormItemV2>
+    </ProForm>
+    <template #footer>
+      <span class="dialog-footer">
+        <el-button @click="emit('onCancel')">鍙栨秷</el-button>
+        <el-button type="primary" @click="handleConfirm">纭</el-button>
+      </span>
+    </template>
+  </ProDialog>
+</template>
+
+<script setup lang="ts">
+import { FormInstance } from 'element-plus';
+import {
+  ProDialog,
+  ProForm,
+  ProFormItemV2,
+  ProFormText,
+  ProFormTextArea,
+} from '@bole-core/components';
+
+defineOptions({
+  name: 'ResettleEditDialog',
+});
+
+type Form = {
+  title?: string;
+  id?: string;
+  name: string;
+  bank: string;
+  bankBranch: string;
+  receiveAccount: string;
+  remark: string;
+};
+
+const visible = defineModel({ type: Boolean });
+
+const form = defineModel<Form>('form');
+
+const emit = defineEmits<{
+  (e: 'onConfirm'): void;
+  (e: 'onCancel'): void;
+}>();
+
+const dialogForm = ref<FormInstance>();
+
+function onDialogClose() {
+  if (!dialogForm.value) return;
+  dialogForm.value.resetFields();
+}
+
+function handleConfirm() {
+  if (!dialogForm.value) return;
+  dialogForm.value.validate((valid) => {
+    if (valid) {
+      emit('onConfirm');
+    } else {
+      return;
+    }
+  });
+}
+</script>
diff --git a/src/views/ServiceChargeManage/components/SettleDetailDialog.vue b/src/views/ServiceChargeManage/components/SettleDetailDialog.vue
index 4110c43..b8d08db 100644
--- a/src/views/ServiceChargeManage/components/SettleDetailDialog.vue
+++ b/src/views/ServiceChargeManage/components/SettleDetailDialog.vue
@@ -69,16 +69,16 @@
   settlementAmount: number;
   actualSettlementAmount: number;
   settlementAccess: EnumEnterpriseWalletAccess;
-  supplierEnterpriseId: string;
 };
 
+const { settlementAccessList } = useEnterpriseWalletAccessSelect({
+  supplierEnterpriseId: computed(() => ''),
+});
+
 const visible = defineModel({ type: Boolean });
 
 const form = defineModel<Form>('form');
 
-const { settlementAccessList } = useEnterpriseWalletAccessSelect({
-  supplierEnterpriseId: computed(() => form.value.supplierEnterpriseId),
-});
 const emit = defineEmits<{
   (e: 'onConfirm'): void;
   (e: 'onCancel'): void;
diff --git a/src/views/UserManage/UserManageList.vue b/src/views/UserManage/UserManageList.vue
index ccb367c..2402aa5 100644
--- a/src/views/UserManage/UserManageList.vue
+++ b/src/views/UserManage/UserManageList.vue
@@ -54,7 +54,6 @@
   QueryFilterItem,
   useTable,
   useFormDialog,
-  defineOperationBtns,
   FieldSwitch,
 } from '@bole-core/components';
 import * as userServices from '@/services/api/user';
@@ -76,18 +75,24 @@
     },
   },
   resetPasswordBtn: {
+    props: {
+      type: 'danger',
+    },
     emits: {
       onClick: (role) => openResetPasswordDialog(role),
     },
   },
   resetOperatorPasswordBtn: {
+    props: {
+      type: 'danger',
+    },
     emits: {
       onClick: (role) => openResetOperatorPasswordDialog(role),
     },
   },
 };
 
-const { column, operationBtns, checkSubModuleItemShow } = useAccess({
+const { checkSubModuleItemShow, column, operationBtns } = useAccess({
   operationBtnMap,
 });
 

--
Gitblit v1.10.0