From cf727afa850496f3a239907fab342b4bd3ff77fc Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期一, 04 八月 2025 18:22:13 +0800
Subject: [PATCH] fix: 修改功能模块

---
 config/openapi.json                                        |    2 
 src/services/api/resource.ts                               |   20 
 src/views/CPersonManage/components/CPersonDetailDialog.vue |    5 
 src/utils/module/index.ts                                  |    9 
 src/constants/module.ts                                    |    8 
 src/services/api/typings.d.ts                              |  252 ++++++++++++++--
 src/services/api/dictionary.ts                             |    6 
 src/utils/oss/index.ts                                     |   11 
 src/store/modules/user.ts                                  |    4 
 types/api.d.ts                                             |   33 --
 src/utils/request/index.ts                                 |   14 
 src/services/api/menu.ts                                   |   26 +
 .env.development                                           |    2 
 /dev/null                                                  |   86 -----
 vite.config.ts                                             |    4 
 src/services/api/index.ts                                  |    6 
 src/views/System/components/AddOrEditModuleDialog.vue      |    8 
 src/services/api/role.ts                                   |   54 +++
 src/store/modules/permission.ts                            |   92 +++---
 src/views/System/ModuleManage.vue                          |  199 ++++++++-----
 src/constants/apiEnum.ts                                   |   16 +
 src/constants/index.ts                                     |    1 
 src/services/api/auth.ts                                   |   20 +
 23 files changed, 546 insertions(+), 332 deletions(-)

diff --git a/.env.development b/.env.development
index 81bd198..9d6ad13 100644
--- a/.env.development
+++ b/.env.development
@@ -11,7 +11,7 @@
 VITE_ROUTER_HISTORY = "h5"
 
 # 寮�鍙戠幆澧冨悗绔湴鍧�
-VITE_PROXY_DOMAIN_REAL = "http://localhost:44340/"
+VITE_PROXY_DOMAIN_REAL = "http://localhost:53780/"
 # VITE_PROXY_DOMAIN_REAL = "http://118.178.252.28:8752/"
 
 
diff --git a/config/openapi.json b/config/openapi.json
index 5659300..524dda8 100644
--- a/config/openapi.json
+++ b/config/openapi.json
@@ -2,7 +2,7 @@
   "config": [
     {
       "requestLibPath": "import { request } from '@/utils/request'",
-      "schemaPath": "https://localhost:44340/swagger/Default/swagger.json",
+      "schemaPath": "http://localhost:53780/swagger/Default/swagger.json",
       "serversPath": "./src/services",
       "enumStyle": "enum",
       "enumFilePath": "../../constants/apiEnum.ts"
diff --git a/src/components/Dialog/OperateHistoryLogByTypeDialog.vue b/src/components/Dialog/OperateHistoryLogByTypeDialog.vue
deleted file mode 100644
index 9aaf2a5..0000000
--- a/src/components/Dialog/OperateHistoryLogByTypeDialog.vue
+++ /dev/null
@@ -1,86 +0,0 @@
-<template>
-  <ProDialog
-    title="鏃ュ織"
-    v-model="innerVisible"
-    destroy-on-close
-    draggable
-    bodyNoPaddingBottom
-    @close="onDialogClose"
-  >
-    <ProDialogTableWrapper :height="500">
-      <ProTableV2 v-bind="proTableProps" :columns="extraColumns" :showOperationColumn="false">
-        <template #functionColumn>{{ props.functionModule }}</template>
-      </ProTableV2>
-    </ProDialogTableWrapper>
-    <template #footer>
-      <span class="dialog-footer">
-        <el-button @click="innerVisible = false" type="primary">纭� 瀹�</el-button>
-      </span>
-    </template>
-  </ProDialog>
-</template>
-
-<script setup lang="ts">
-import { ProDialog, ProTableV2, ProDialogTableWrapper } from '@bole-core/components';
-import { useTableLogListByType } from '@/hooks';
-import { OperateHistoryTypeEnum } from '@/constants';
-
-defineOptions({
-  name: 'OperateHistoryLogByTypeDialog',
-});
-
-type Props = {
-  modelValue: boolean;
-  relationId: string;
-  operateHistoryType?: OperateHistoryTypeEnum;
-
-  functionModule?: string;
-};
-
-const props = withDefaults(defineProps<Props>(), {
-  modelValue: false,
-});
-
-const emit = defineEmits<{
-  (e: 'update:modelValue', value: boolean): void;
-  (e: 'onConfirm'): void;
-}>();
-
-const innerVisible = computed({
-  get() {
-    return props.modelValue;
-  },
-  set(val) {
-    emit('update:modelValue', val);
-  },
-});
-
-watch(
-  () => props.modelValue,
-  async (visible, oldVisible) => {
-    if (!oldVisible && visible) {
-      await getList();
-      state.loading = false;
-    }
-  }
-);
-
-function onDialogClose() {
-  state.loading = true;
-}
-
-const functionModuleColumns: API.CustomModuleColumnDto[] = [
-  { id: '0', enCode: 'functionColumn', name: '鍔熻兘妯″潡' },
-];
-
-const extraColumns = computed(() => {
-  return props.functionModule
-    ? functionModuleColumns.concat(OperateHistoryTableColumns)
-    : OperateHistoryTableColumns;
-});
-
-const { getList, proTableProps, state, OperateHistoryTableColumns } = useTableLogListByType({
-  relationId: toRef(props, 'relationId'),
-  operateHistoryType: toRef(props, 'operateHistoryType'),
-});
-</script>
diff --git a/src/constants/apiEnum.ts b/src/constants/apiEnum.ts
index 30a5660..eeb9c95 100644
--- a/src/constants/apiEnum.ts
+++ b/src/constants/apiEnum.ts
@@ -41,6 +41,22 @@
   Descending = 1,
 }
 
+/** 瑙掕壊鎺ュ彛鏁版嵁鏉冮檺 */
+export enum EnumRoleWebApiDataPower {
+  /**鑷畾涔� */
+  Custom = 1,
+  /**鏌ヨ涓汉鍒涘缓鏁版嵁 */
+  Creator = 10,
+  /**鏌ヨ褰撳墠閮ㄩ棬鏁版嵁 */
+  CurrentDepartment = 20,
+  /**鏌ヨ褰撳墠鍙婁笅绾ч儴闂ㄦ暟鎹� */
+  NestingDepartment = 21,
+  /**鏌ヨ褰撳墠浼佷笟鎵�鏈夋暟鎹� */
+  CurrentEnterprise = 30,
+  /**鏌ヨ鎵�鏈� */
+  All = 999,
+}
+
 /** 鐢ㄦ埛绫诲瀷 */
 export enum EnumUserType {
   /**涓汉 */
diff --git a/src/constants/index.ts b/src/constants/index.ts
index 5dd6368..461b547 100644
--- a/src/constants/index.ts
+++ b/src/constants/index.ts
@@ -12,3 +12,4 @@
 export * from './dic';
 export * from './enterprise';
 export * from './cPerson';
+export * from './apiEnum';
diff --git a/src/constants/module.ts b/src/constants/module.ts
index 798ceca..2a88c44 100644
--- a/src/constants/module.ts
+++ b/src/constants/module.ts
@@ -1,3 +1,5 @@
+import { defineColumns } from '@bole-core/components';
+
 export enum SubModuleType {
   MenuButton = 1,
   /**
@@ -90,7 +92,7 @@
   [SubModuleType.Column]: FastColumnList,
 };
 
-export const ModuleColumns: API.CustomModuleColumnDto[] = [
+export const ModuleColumns = defineColumns([
   {
     id: '1',
     enCode: 'name',
@@ -110,7 +112,7 @@
   },
   {
     id: '4',
-    enCode: 'path',
+    enCode: 'url',
     name: '璺敱鍦板潃',
   },
   {
@@ -131,4 +133,4 @@
     name: '鏈夋晥',
     width: 80,
   },
-];
+]);
diff --git a/src/services/api/auth.ts b/src/services/api/auth.ts
index 27f5cb5..5c04818 100644
--- a/src/services/api/auth.ts
+++ b/src/services/api/auth.ts
@@ -2,11 +2,25 @@
 // @ts-ignore
 import { request } from '@/utils/request';
 
-/** 瀵嗙爜鐧诲綍 POST /api/user/auth/passwordLogin */
-export async function authPasswordLogin(
-  body: API.PasswordLoginCommand,
+/** 鑾峰彇闃块噷浜慜SS鎺堟潈淇℃伅 GET /api/user/auth/getAliyunOSSAcs */
+export async function getAliyunOSSAcs(
+  // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
+  params: API.APIgetAliyunOSSAcsParams,
   options?: API.RequestConfig
 ) {
+  return request<API.GetAliyunOSSAcsQueryResult>('/api/user/auth/getAliyunOSSAcs', {
+    method: 'GET',
+    params: {
+      ...params,
+      query: undefined,
+      ...params['query'],
+    },
+    ...(options || {}),
+  });
+}
+
+/** 瀵嗙爜鐧诲綍 POST /api/user/auth/passwordLogin */
+export async function passwordLogin(body: API.PasswordLoginCommand, options?: API.RequestConfig) {
   return request<API.PasswordLoginCommandCallback>('/api/user/auth/passwordLogin', {
     method: 'POST',
     headers: {
diff --git a/src/services/api/dictionary.ts b/src/services/api/dictionary.ts
index 3d209df..8ceca42 100644
--- a/src/services/api/dictionary.ts
+++ b/src/services/api/dictionary.ts
@@ -2,13 +2,13 @@
 // @ts-ignore
 import { request } from '@/utils/request';
 
-/** 鑾峰彇瀛楀吀鏁版嵁鍒嗛〉鍒楄〃 GET /api/main/dictionary/getDictionaryDatas */
-export async function dictionaryGetDictionaryDatas(
+/** 鑾峰彇瀛楀吀鏁版嵁鍒嗛〉鍒楄〃 POST /api/main/dictionary/getDictionaryDatas */
+export async function getDictionaryDatas(
   body: API.GetDictionaryDatasQuery,
   options?: API.RequestConfig
 ) {
   return request<API.GetDictionaryDatasQueryResult>('/api/main/dictionary/getDictionaryDatas', {
-    method: 'GET',
+    method: 'POST',
     headers: {
       'Content-Type': 'application/json-patch+json',
     },
diff --git a/src/services/api/index.ts b/src/services/api/index.ts
index b373538..e96a264 100644
--- a/src/services/api/index.ts
+++ b/src/services/api/index.ts
@@ -2,13 +2,15 @@
 /* eslint-disable */
 // API 鏇存柊鏃堕棿锛�
 // API 鍞竴鏍囪瘑锛�
+import * as dictionary from './dictionary';
 import * as auth from './auth';
 import * as menu from './menu';
 import * as resource from './resource';
-import * as dictionary from './dictionary';
+import * as role from './role';
 export default {
+  dictionary,
   auth,
   menu,
   resource,
-  dictionary,
+  role,
 };
diff --git a/src/services/api/menu.ts b/src/services/api/menu.ts
index d122313..04034d5 100644
--- a/src/services/api/menu.ts
+++ b/src/services/api/menu.ts
@@ -3,7 +3,7 @@
 import { request } from '@/utils/request';
 
 /** 鍒犻櫎鑿滃崟 DELETE /api/user/menu/deleteMenu */
-export async function menuDeleteMenu(body: API.DeleteMenuCommand, options?: API.RequestConfig) {
+export async function deleteMenu(body: API.DeleteMenuCommand, options?: API.RequestConfig) {
   return request<number>('/api/user/menu/deleteMenu', {
     method: 'DELETE',
     headers: {
@@ -15,31 +15,37 @@
 }
 
 /** 鏌ヨ鑿滃崟璇︽儏 GET /api/user/menu/getMenu */
-export async function menuGetMenu(body: API.GetMenuQuery, options?: API.RequestConfig) {
+export async function getMenu(
+  // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
+  params: API.APIgetMenuParams,
+  options?: API.RequestConfig
+) {
   return request<API.GetMenuQueryResult>('/api/user/menu/getMenu', {
     method: 'GET',
-    headers: {
-      'Content-Type': 'application/json-patch+json',
+    params: {
+      ...params,
     },
-    data: body,
     ...(options || {}),
   });
 }
 
 /** 鏌ヨ鑿滃崟鍒楄〃 GET /api/user/menu/getMenus */
-export async function menuGetMenus(body: API.GetMenusQuery, options?: API.RequestConfig) {
+export async function getMenus(
+  // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
+  params: API.APIgetMenusParams,
+  options?: API.RequestConfig
+) {
   return request<API.GetMenusQueryResultItem[]>('/api/user/menu/getMenus', {
     method: 'GET',
-    headers: {
-      'Content-Type': 'application/json-patch+json',
+    params: {
+      ...params,
     },
-    data: body,
     ...(options || {}),
   });
 }
 
 /** 淇濆瓨鑿滃崟 POST /api/user/menu/saveMenu */
-export async function menuSaveMenu(body: API.SaveMenuCommand, options?: API.RequestConfig) {
+export async function saveMenu(body: API.SaveMenuCommand, options?: API.RequestConfig) {
   return request<string>('/api/user/menu/saveMenu', {
     method: 'POST',
     headers: {
diff --git a/src/services/api/resource.ts b/src/services/api/resource.ts
index 92b3b47..dc3ef94 100644
--- a/src/services/api/resource.ts
+++ b/src/services/api/resource.ts
@@ -3,31 +3,31 @@
 import { request } from '@/utils/request';
 
 /** 鑾峰彇璧勬簮瀛楁 GET /api/user/resource/getResourceFields */
-export async function resourceGetResourceFields(
-  body: API.GetResourceFieldsQuery,
+export async function getResourceFields(
+  // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
+  params: API.APIgetResourceFieldsParams,
   options?: API.RequestConfig
 ) {
   return request<API.GetResourceFieldsQueryResultItem[]>('/api/user/resource/getResourceFields', {
     method: 'GET',
-    headers: {
-      'Content-Type': 'application/json-patch+json',
+    params: {
+      ...params,
     },
-    data: body,
     ...(options || {}),
   });
 }
 
 /** 鑾峰彇璧勬簮鍒楄〃 GET /api/user/resource/getResources */
-export async function resourceGetResources(
-  body: API.GetResourcesQuery,
+export async function getResources(
+  // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
+  params: API.APIgetResourcesParams,
   options?: API.RequestConfig
 ) {
   return request<API.GetResourcesQueryResultItem[]>('/api/user/resource/getResources', {
     method: 'GET',
-    headers: {
-      'Content-Type': 'application/json-patch+json',
+    params: {
+      ...params,
     },
-    data: body,
     ...(options || {}),
   });
 }
diff --git a/src/services/api/role.ts b/src/services/api/role.ts
new file mode 100644
index 0000000..13b983d
--- /dev/null
+++ b/src/services/api/role.ts
@@ -0,0 +1,54 @@
+/* eslint-disable */
+// @ts-ignore
+import { request } from '@/utils/request';
+
+/** 鍒犻櫎瑙掕壊 DELETE /api/user/role/deleteRole */
+export async function deleteRole(body: API.DeleteRoleCommand, options?: API.RequestConfig) {
+  return request<number>('/api/user/role/deleteRole', {
+    method: 'DELETE',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 鏌ヨ瑙掕壊璇︽儏 GET /api/user/role/getRole */
+export async function getRole(
+  // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
+  params: API.APIgetRoleParams,
+  options?: API.RequestConfig
+) {
+  return request<API.GetRoleQueryResult>('/api/user/role/getRole', {
+    method: 'GET',
+    params: {
+      ...params,
+    },
+    ...(options || {}),
+  });
+}
+
+/** 鏌ヨ瑙掕壊鍒楄〃 POST /api/user/role/getRoles */
+export async function getRoles(body: API.GetRolesQuery, options?: API.RequestConfig) {
+  return request<API.PagedListQueryResultGetRolesQueryResultItem>('/api/user/role/getRoles', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 淇濆瓨瑙掕壊 POST /api/user/role/saveRole */
+export async function saveRole(body: API.SaveRoleCommand, options?: API.RequestConfig) {
+  return request<string>('/api/user/role/saveRole', {
+    method: 'POST',
+    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 5317b70..8510633 100644
--- a/src/services/api/typings.d.ts
+++ b/src/services/api/typings.d.ts
@@ -3,7 +3,52 @@
     [key: string]: any;
   }
 
+  interface APIgetAliyunOSSAcsParams {
+    query?: GetAliyunOSSAcsQuery;
+  }
+
+  interface APIgetMenuParams {
+    /** Id */
+    id?: string;
+    /** 瑙掕壊Id */
+    roleId?: string;
+  }
+
+  interface APIgetMenusParams {
+    /** 鐢ㄦ埛绫诲瀷 */
+    userType?: EnumUserType;
+    /** 瀹㈡埛绔被鍨� */
+    clientType?: EnumClientType;
+    /** 瑙掕壊Id */
+    roleId?: string;
+  }
+
+  interface APIgetResourceFieldsParams {
+    /** Id */
+    id?: string;
+  }
+
+  interface APIgetResourcesParams {
+    /** 寰湇鍔� */
+    service?: string;
+    /** 璇锋眰鏂瑰紡 */
+    method?: EnumWebApiMethod;
+    /** 鍏抽敭瀛� */
+    keywords?: string;
+    /** 瑙掕壊Id */
+    roleId?: string;
+  }
+
+  interface APIgetRoleParams {
+    /** Id */
+    id?: string;
+  }
+
   interface DeleteMenuCommand {
+    ids: string[];
+  }
+
+  interface DeleteRoleCommand {
     ids: string[];
   }
 
@@ -43,6 +88,21 @@
     Descending = 1,
   }
 
+  enum EnumRoleWebApiDataPower {
+    /**鑷畾涔� */
+    Custom = 1,
+    /**鏌ヨ涓汉鍒涘缓鏁版嵁 */
+    Creator = 10,
+    /**鏌ヨ褰撳墠閮ㄩ棬鏁版嵁 */
+    CurrentDepartment = 20,
+    /**鏌ヨ褰撳墠鍙婁笅绾ч儴闂ㄦ暟鎹� */
+    NestingDepartment = 21,
+    /**鏌ヨ褰撳墠浼佷笟鎵�鏈夋暟鎹� */
+    CurrentEnterprise = 30,
+    /**鏌ヨ鎵�鏈� */
+    All = 999,
+  }
+
   enum EnumUserType {
     /**涓汉 */
     Personal = 10,
@@ -63,16 +123,36 @@
     Delete = 40,
   }
 
+  interface FriendlyResultGetAliyunOSSAcsQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetAliyunOSSAcsQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
   interface FriendlyResultGetDictionaryDatasQueryResult {
     /** 璺熻釜Id */
     traceId?: string;
     /** 鐘舵�佺爜 */
     code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
     data?: GetDictionaryDatasQueryResult;
     /** 鎵ц鎴愬姛 */
     success?: boolean;
     /** 閿欒淇℃伅 */
-    errors?: any;
+    msg?: any;
     /** 闄勫姞鏁版嵁 */
     extras?: any;
     /** 鏃堕棿鎴� */
@@ -84,11 +164,31 @@
     traceId?: string;
     /** 鐘舵�佺爜 */
     code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
     data?: GetMenuQueryResult;
     /** 鎵ц鎴愬姛 */
     success?: boolean;
     /** 閿欒淇℃伅 */
-    errors?: any;
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetRoleQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetRoleQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
     /** 闄勫姞鏁版嵁 */
     extras?: any;
     /** 鏃堕棿鎴� */
@@ -100,12 +200,14 @@
     traceId?: string;
     /** 鐘舵�佺爜 */
     code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
     /** 鏁版嵁 */
     data?: string;
     /** 鎵ц鎴愬姛 */
     success?: boolean;
     /** 閿欒淇℃伅 */
-    errors?: any;
+    msg?: any;
     /** 闄勫姞鏁版嵁 */
     extras?: any;
     /** 鏃堕棿鎴� */
@@ -117,12 +219,14 @@
     traceId?: string;
     /** 鐘舵�佺爜 */
     code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
     /** 鏁版嵁 */
     data?: number;
     /** 鎵ц鎴愬姛 */
     success?: boolean;
     /** 閿欒淇℃伅 */
-    errors?: any;
+    msg?: any;
     /** 闄勫姞鏁版嵁 */
     extras?: any;
     /** 鏃堕棿鎴� */
@@ -134,12 +238,14 @@
     traceId?: string;
     /** 鐘舵�佺爜 */
     code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
     /** 鏁版嵁 */
     data?: GetMenusQueryResultItem[];
     /** 鎵ц鎴愬姛 */
     success?: boolean;
     /** 閿欒淇℃伅 */
-    errors?: any;
+    msg?: any;
     /** 闄勫姞鏁版嵁 */
     extras?: any;
     /** 鏃堕棿鎴� */
@@ -151,12 +257,14 @@
     traceId?: string;
     /** 鐘舵�佺爜 */
     code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
     /** 鏁版嵁 */
     data?: GetResourceFieldsQueryResultItem[];
     /** 鎵ц鎴愬姛 */
     success?: boolean;
     /** 閿欒淇℃伅 */
-    errors?: any;
+    msg?: any;
     /** 闄勫姞鏁版嵁 */
     extras?: any;
     /** 鏃堕棿鎴� */
@@ -168,12 +276,32 @@
     traceId?: string;
     /** 鐘舵�佺爜 */
     code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
     /** 鏁版嵁 */
     data?: GetResourcesQueryResultItem[];
     /** 鎵ц鎴愬姛 */
     success?: boolean;
     /** 閿欒淇℃伅 */
-    errors?: any;
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultPagedListQueryResultGetRolesQueryResultItem {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: PagedListQueryResultGetRolesQueryResultItem;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
     /** 闄勫姞鏁版嵁 */
     extras?: any;
     /** 鏃堕棿鎴� */
@@ -185,15 +313,27 @@
     traceId?: string;
     /** 鐘舵�佺爜 */
     code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
     data?: PasswordLoginCommandCallback;
     /** 鎵ц鎴愬姛 */
     success?: boolean;
     /** 閿欒淇℃伅 */
-    errors?: any;
+    msg?: any;
     /** 闄勫姞鏁版嵁 */
     extras?: any;
     /** 鏃堕棿鎴� */
     timestamp?: number;
+  }
+
+  type GetAliyunOSSAcsQuery = Record<string, any>;
+
+  interface GetAliyunOSSAcsQueryResult {
+    expiration?: string;
+    ossAccessSecret?: string;
+    ossAccessKeyId?: string;
+    securityToken?: string;
+    requestId?: string;
   }
 
   interface GetDictionaryDatasQuery {
@@ -206,16 +346,13 @@
     data?: GetDictionaryDatasQueryResultItem[];
   }
 
-  type GetDictionaryDatasQueryResultItem = true;
-
-  interface GetMenuQuery {
-    /** Id */
-    id?: string;
-  }
+  type GetDictionaryDatasQueryResultItem = Record<string, any>;
 
   interface GetMenuQueryResult {
     /** Id */
     id?: string;
+    /** 鏄惁閫夋嫨锛堢敤鎴疯鑹叉巿鏉冿級 */
+    isChecked?: boolean;
     userType?: EnumUserType;
     clientType?: EnumClientType;
     /** 涓婄骇Id */
@@ -247,6 +384,8 @@
   interface GetMenuQueryResultButton {
     /** Id */
     id?: string;
+    /** 鏄惁閫夋嫨锛堢敤鎴疯鑹叉巿鏉冿級 */
+    isChecked?: boolean;
     /** 缂栧彿 */
     code?: string;
     /** 鍚嶇О */
@@ -271,6 +410,8 @@
   interface GetMenuQueryResultField {
     /** Id */
     id?: string;
+    /** 鏄惁閫夋嫨锛堢敤鎴疯鑹叉巿鏉冿級 */
+    isChecked?: boolean;
     /** 缂栧彿 */
     code?: string;
     /** 鍚嶇О */
@@ -292,18 +433,15 @@
     fields?: GetMenuQueryResultField[];
   }
 
-  interface GetMenusQuery {
-    userType?: EnumUserType;
-    clientType?: EnumClientType;
-  }
-
   interface GetMenusQueryResultItem {
     /** Id */
     id?: string;
+    /** 鏄惁閫夋嫨锛堢敤鎴疯鑹叉巿鏉冿級 */
+    isChecked?: boolean;
     /** 涓婄骇Id */
     parentId?: string;
     /** 涓嬬骇 */
-    childrens?: GetMenusQueryResultItem[];
+    children?: GetMenusQueryResultItem[];
     /** 缂栧彿 */
     code?: string;
     /** 鍚嶇О */
@@ -326,11 +464,6 @@
     remark?: string;
   }
 
-  interface GetResourceFieldsQuery {
-    /** Id */
-    id?: string;
-  }
-
   interface GetResourceFieldsQueryResultItem {
     /** 缂栧彿 */
     code?: string;
@@ -338,17 +471,11 @@
     name?: string;
   }
 
-  interface GetResourcesQuery {
-    /** 寰湇鍔� */
-    service?: string;
-    method?: EnumWebApiMethod;
-    /** 鍏抽敭瀛� */
-    keywords?: string;
-  }
-
   interface GetResourcesQueryResultItem {
     /** Id */
     id?: string;
+    /** 鏄惁閫変腑锛堢敤浜庤鑹叉巿鏉冿級 */
+    isChecked?: boolean;
     /** 寰湇鍔� */
     service?: string;
     /** 缂栧彿 */
@@ -364,6 +491,44 @@
     responseTypeName?: string;
   }
 
+  interface GetRoleQueryResult {
+    /** Id */
+    id?: string;
+    /** 鍚嶇О */
+    name?: string;
+    userType?: EnumUserType;
+    clientType?: EnumClientType;
+    /** 鏈�浣庣骇鍒� */
+    minLevel?: number;
+    /** 鑿滃崟Id */
+    menuIds?: string[];
+    /** 璧勬簮 */
+    resources?: GetRoleQueryResultResource[];
+  }
+
+  interface GetRoleQueryResultResource {
+    /** 璧勬簮Id */
+    resourceId?: string;
+    dataPower?: EnumRoleWebApiDataPower;
+  }
+
+  interface GetRolesQuery {
+    pageModel?: PagedListQueryPageModel;
+    userType?: EnumUserType;
+    clientType?: EnumClientType;
+  }
+
+  interface GetRolesQueryResultItem {
+    /** Id */
+    id?: string;
+    /** 鍚嶇О */
+    name?: string;
+    userType?: EnumUserType;
+    clientType?: EnumClientType;
+    /** 鏈�浣庣骇鍒� */
+    minLevel?: number;
+  }
+
   interface PagedListQueryPageModel {
     /** 琛屾暟 */
     rows?: number;
@@ -377,6 +542,12 @@
     /** 灞炴�� */
     property?: string;
     order?: EnumPagedListOrder;
+  }
+
+  interface PagedListQueryResultGetRolesQueryResultItem {
+    pageModel?: PagedListQueryResultPageModel;
+    /** 鏁版嵁 */
+    data?: GetRolesQueryResultItem[];
   }
 
   interface PagedListQueryResultPageModel {
@@ -484,4 +655,19 @@
     /** 瀛楁 */
     fields?: SaveMenuCommandField[];
   }
+
+  interface SaveRoleCommand {
+    /** Id */
+    id?: string;
+    /** 鍚嶇О */
+    name?: string;
+    userType?: EnumUserType;
+    clientType?: EnumClientType;
+    /** 鏈�浣庣骇鍒� */
+    minLevel?: number;
+    /** 鑿滃崟Id */
+    menuIds?: string[];
+    /** 璧勬簮 */
+    resources?: GetRoleQueryResultResource[];
+  }
 }
diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts
index 6aa2a72..fa8e73a 100644
--- a/src/store/modules/permission.ts
+++ b/src/store/modules/permission.ts
@@ -3,6 +3,7 @@
 // import { RouteConfigs } from "@/layout/types";
 import { constantRoutes, Route } from '@/router';
 import { addAsyncRoutes, ascending } from '@/router/utils';
+import * as menuServices from '@/services/api/menu';
 
 export interface PermissonState {
   routes: Route[];
@@ -26,11 +27,16 @@
     getModuleList() {
       return new Promise<Route[]>(async (resolve, reject) => {
         try {
-          // const res = await baseModuleServices.getCurrentUserModuleList({
-          //   showLoading: false,
-          // });
-          const res = [];
-          const accessedRoutes = ascending(addAsyncRoutes(formatModuleList(res, null))); // createAccessedRoutes(userMenuList, userInfo)
+          const res = await menuServices.getMenus(
+            {
+              userType: EnumUserType.Operation,
+              clientType: EnumClientType.PcWeb,
+            },
+            {
+              showLoading: false,
+            }
+          );
+          const accessedRoutes = ascending(addAsyncRoutes(formatModuleList(res))); // createAccessedRoutes(userMenuList, userInfo)
           //@ts-ignore
           accessedRoutes.push({ path: '/:pathMatch(.*)*', redirect: '/404', hidden: true });
 
@@ -55,47 +61,41 @@
   return usePermissionStore(store);
 }
 
-function formatModuleList(moduleList: API.ModuleDto[], parentId: string | null) {
-  const treeModuleList: Route[] = [];
-  if (moduleList.length > 0) {
-    moduleList.forEach((item) => {
-      if (item.parentId === parentId) {
-        const isRootModule = !item.parentId && item.isMenu === 1;
-        //@ts-ignore
-        const asyncRoute: Route = isRootModule
-          ? {
-              path: formatPath(item.path),
-              name: item.enCode,
-              redirect: 'noRedirect',
-              alwaysShow: true,
-              hidden: item.isMenu !== 1,
-              meta: {
-                title: item.name,
-                icon: item.icon,
-                moduleId: item.id,
-                rank: item?.sortCode,
-                rootMenu: true,
-              },
-            }
-          : {
-              path: formatPath(item.path),
-              name: item.enCode,
-              hidden: item.isMenu !== 1,
-              alwaysShow: true,
-              meta: {
-                title: item.name,
-                moduleId: item.id,
-                noCache: !item.isCache,
-                rank: item?.sortCode,
-              },
-            };
-        const children = formatModuleList(moduleList, item.id);
-        asyncRoute.children = children;
-        treeModuleList.push(asyncRoute);
-      }
-    });
-  }
-  return treeModuleList;
+function formatModuleList(moduleList: API.GetMenusQueryResultItem[]) {
+  return moduleList.map((item) => {
+    const isRootModule = !item.parentId && item.type == EnumMenuType.Menu;
+    //@ts-ignore
+    let asyncRoute: Route = isRootModule
+      ? {
+          path: formatPath(item.url),
+          name: item.code,
+          redirect: 'noRedirect',
+          alwaysShow: true,
+          hidden: item.type != EnumMenuType.Menu,
+          meta: {
+            title: item.name,
+            icon: item.icon,
+            moduleId: item.id,
+            rank: item?.sort,
+            rootMenu: true,
+          },
+        }
+      : {
+          path: formatPath(item.url),
+          name: item.code,
+          hidden: item.type != EnumMenuType.Menu,
+          alwaysShow: true,
+          meta: {
+            title: item.name,
+            moduleId: item.id,
+            noCache: !item.isCache,
+            rank: item?.sort,
+          },
+        };
+    const children = formatModuleList(item.children);
+    asyncRoute.children = children;
+    return asyncRoute;
+  });
 }
 
 function formatPath(path: string) {
diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts
index 40aa7bf..85c8aae 100644
--- a/src/store/modules/user.ts
+++ b/src/store/modules/user.ts
@@ -58,7 +58,7 @@
 
     // 鐢ㄦ埛鐧诲叆
     async loginByUsername(params: API.PasswordLoginCommand) {
-      let res = await authServices.authPasswordLogin(
+      let res = await authServices.passwordLogin(
         {
           ...params,
           password: md5Encrypt(params.password),
@@ -107,7 +107,7 @@
       Object.assign(this, getDefaultState());
     },
 
-    async refreshToken(params: API.AccessRefreshToken) {
+    async refreshToken(params: any) {
       return Promise.resolve({
         accessToken: '1222',
         expiresIn: 1000 * 60 * 24 * 60,
diff --git a/src/utils/module/index.ts b/src/utils/module/index.ts
index 17586a4..03f682d 100644
--- a/src/utils/module/index.ts
+++ b/src/utils/module/index.ts
@@ -3,13 +3,14 @@
 
 export * from './tree';
 
-export type TreeModuleDtoGroupDto = API.ModuleDto & {
+export type TreeModuleDtoGroupDto = API.GetMenusQueryResultItem & {
   children?: TreeModuleDtoGroupDto[];
   parentNode?: TreeModuleDtoGroupDto;
+  hasCheck?: boolean;
 };
 
 export class ModuleUtils {
-  static convertToModuleGroup(data: API.ModuleDto[]) {
+  static convertToModuleGroup(data: API.GetMenusQueryResultItem[]) {
     const moduleTreeStore = new TreeStore<TreeModuleDtoGroupDto>({
       data: TreeStore.formatListToTree(data, null),
     });
@@ -59,7 +60,7 @@
     if (module) {
       const moduleTreeNode = moduleTreeStore.getNode(module.id);
       const siblingsNodes = moduleTreeNode.parent.childNodes;
-      return siblingsNodes[siblingsNodes.length - 1].data.sortCode;
+      return siblingsNodes[siblingsNodes.length - 1].data.sort;
     } else {
       return moduleTreeStore.root.childNodes.length;
     }
@@ -72,7 +73,7 @@
     const moduleTreeNode = moduleTreeStore.getNode(module.id);
     const childNodes = moduleTreeNode.childNodes;
     const lastChildNode = childNodes[childNodes.length - 1];
-    return lastChildNode ? lastChildNode.data.sortCode : 0;
+    return lastChildNode ? lastChildNode.data.sort : 0;
   }
 
   static getParentModule(
diff --git a/src/utils/oss/index.ts b/src/utils/oss/index.ts
index eb13a61..76efceb 100644
--- a/src/utils/oss/index.ts
+++ b/src/utils/oss/index.ts
@@ -1,15 +1,18 @@
 import { BoleOss } from '@bole-core/core';
 import { loadEnv } from '@build/index';
 import AliOSS from 'ali-oss';
+import * as authServices from '@/services/api/auth';
 
 export class OssManager {
   private static OssInstance: BoleOss;
 
   private static async getOssSTS() {
-    return Promise.resolve({});
-    // return await accountServices.getOssSTS({
-    //   showLoading: false,
-    // });
+    return await authServices.getAliyunOSSAcs(
+      {},
+      {
+        showLoading: false,
+      }
+    );
   }
 
   public static async getOssInstance() {
diff --git a/src/utils/request/index.ts b/src/utils/request/index.ts
index 6cca864..16e6e6e 100644
--- a/src/utils/request/index.ts
+++ b/src/utils/request/index.ts
@@ -14,7 +14,7 @@
 const RefreshTokenUrl = '/GetTokenByRefreshToken';
 
 /** 璇锋眰鐧藉悕鍗曪紝鏀剧疆涓�浜涗笉闇�瑕乼oken鐨勬帴鍙o紙閫氳繃璁剧疆璇锋眰鐧藉悕鍗曪紝闃叉token杩囨湡鍚庡啀璇锋眰閫犳垚鐨勬寰幆闂锛� */
-const whiteList = [RefreshTokenUrl, '/GetToken'];
+const whiteList = [RefreshTokenUrl, '/passwordLogin'];
 
 let loadingInstance: ReturnType<typeof Loading.service>;
 
@@ -55,9 +55,13 @@
   success: boolean;
   data: any;
   /**
+   * http鐘舵�佸悧
+   */
+  code?: number;
+  /**
    * 閿欒鐮�
    */
-  error?: number;
+  errorCode?: string;
   /**
    * 閿欒淇℃伅
    */
@@ -74,7 +78,7 @@
 }
 
 interface ErrorInfo {
-  errorCode?: number;
+  errorCode?: string;
   errorMessage?: string;
   showType?: ErrorShowType;
   data: any;
@@ -156,7 +160,7 @@
 
     // 閿欒鎶涘嚭
     errorThrower: (res) => {
-      const { success, data, error: errorCode, msg, showType } = res;
+      const { success, data, errorCode, msg, showType } = res;
       if (!success) {
         const error: any = new Error(msg);
         error.name = 'BizError';
@@ -236,7 +240,7 @@
 
         endLoading();
 
-        return getResponse ? response : (response.data as any).result;
+        return getResponse ? response : response.data.data;
       },
       (error) => {
         endLoading();
diff --git a/src/views/CPersonManage/components/CPersonDetailDialog.vue b/src/views/CPersonManage/components/CPersonDetailDialog.vue
index 45a2fe2..e1e3b09 100644
--- a/src/views/CPersonManage/components/CPersonDetailDialog.vue
+++ b/src/views/CPersonManage/components/CPersonDetailDialog.vue
@@ -56,6 +56,7 @@
   ProFormImageUpload,
   ProFormRadio,
   ProFormInputNumber,
+  defineColumns,
 } from '@bole-core/components';
 import { OrderInputType } from '@bole-core/core';
 import _ from 'lodash';
@@ -90,7 +91,7 @@
   (e: 'onCancel'): void;
 }>();
 
-const column: API.CustomModuleColumnDto[] = [
+const column = defineColumns([
   {
     id: '1',
     enCode: 'enterpirseName',
@@ -131,7 +132,7 @@
     enCode: 'contractUrl',
     name: '鐢靛瓙鍚堝悓',
   },
-];
+]);
 
 watch(
   () => visible.value,
diff --git a/src/views/System/ModuleManage.vue b/src/views/System/ModuleManage.vue
index 9aa4d8c..40f8562 100644
--- a/src/views/System/ModuleManage.vue
+++ b/src/views/System/ModuleManage.vue
@@ -6,7 +6,7 @@
           <div class="query-filter-list-item">
             <SearchInput
               v-model="state.searchValue"
-              placeholder="瑙掕壊鍚嶇О"
+              placeholder="鑿滃崟鍚嶇О"
               @on-click-search="handleSearch"
               @keyup.enter="handleSearch()"
             >
@@ -45,18 +45,18 @@
           </template>
           <template v-else-if="column.property === 'isMenu'">
             <el-switch
-              v-model="row.isMenu"
+              :modelValue="row.type === EnumMenuType.Menu"
+              :onUpdate:modelValue="(v: boolean) =>{
+                 row.type=v?EnumMenuType.Menu:EnumMenuType.Page
+              }"
               inline-prompt
-              :active-value="1"
-              :inactive-value="0"
               @change="(v: number) => handleChangeStatus(v, row, 'isMenu')"
             ></el-switch>
           </template>
           <template v-else-if="column.property === 'enabledMark'">
             <el-switch
-              v-model="row.enabledMark"
-              :active-value="1"
-              :inactive-value="0"
+              :modelValue="!row.isDisabled"
+              :onUpdate:modelValue="(v: boolean) => row.isDisabled =!v"
               @change="(v: number) => handleChangeStatus(v, row, 'enabledMark')"
             ></el-switch>
           </template>
@@ -95,14 +95,22 @@
   OperationBtnType,
   SearchInput,
 } from '@bole-core/components';
-import { ModuleUtils, TreeModuleDtoGroupDto, Message, TreeStore } from '@/utils';
+import { ModuleUtils, TreeModuleDtoGroupDto, Message, TreeStore, flattenTree } from '@/utils';
 import { TableInstance } from 'element-plus';
-import { SubModuleType, SubModuleTitle, SubModuleKey, FastBtn, ModuleColumns } from '@/constants';
+import {
+  SubModuleType,
+  SubModuleTitle,
+  SubModuleKey,
+  FastBtn,
+  ModuleColumns,
+  EnumMenuType,
+} from '@/constants';
 import SubModuleEditDrawer from './components/SubModuleEditDrawer.vue';
 import AddOrEditModuleDialog from './components/AddOrEditModuleDialog.vue';
 import { useDebounceFn } from '@vueuse/core';
 import _ from 'lodash';
 import { useReset } from '@bole-core/core';
+import * as menuServices from '@/services/api/menu';
 
 defineOptions({
   name: 'ModuleManage',
@@ -189,8 +197,8 @@
   sortCode: 0,
   path: '',
   isCache: true,
-  isMenu: 1,
-  enabledMark: 1,
+  isMenu: true,
+  enabledMark: true,
   showCacheSelect: false,
   showIconSelect: false,
   showSubMenuIconSelect: false,
@@ -198,10 +206,10 @@
   title: '',
 };
 const editForm = reactive({ ...BaseFormData });
-const currentDialogModule = ref<TreeModuleDtoGroupDto>({});
+const currentDialogModule = ref<API.GetMenuQueryResult>({});
 //drawer
 const drawerVisible = ref(false);
-const currentDrawerModule = ref<TreeModuleDtoGroupDto>({});
+const currentDrawerModule = ref<API.GetMenuQueryResult>({});
 const drawerState = reactive<{
   type: SubModuleType;
   tableData: ValueOf<API.AllSubModule>;
@@ -215,10 +223,16 @@
 });
 async function getAllModule() {
   try {
-    let res = await baseModuleServices.getAllModuleList({
-      showLoading: !state.loading,
-    });
-    const treeStore = ModuleUtils.convertToModuleGroup(res);
+    let res = await menuServices.getMenus(
+      {
+        userType: EnumUserType.Operation,
+        clientType: EnumClientType.PcWeb,
+      },
+      {
+        showLoading: false,
+      }
+    );
+    const treeStore = ModuleUtils.convertToModuleGroup(flattenTree(res));
     moduleTreeStore.value = treeStore;
     originModuleTree.value = [...treeStore.data];
   } catch (error) {}
@@ -234,16 +248,21 @@
   statusType: T
 ) {
   try {
-    let params = {
-      ..._.omit(data, ['children', 'parentNode']),
-      [statusType]: value,
-    };
-    await baseModuleServices.addOrEditModule(params);
+    // let params = {
+    //   ..._.omit(data, ['children', 'parentNode']),
+    //   [statusType]: value,
+    // };
+    // await baseModuleServices.addOrEditModule(params);
   } catch (error) {
     Message.errorMessage('鎿嶄綔澶辫触');
   }
 }
-function openDialog(options: {
+
+async function getMenu(id: string) {
+  return await menuServices.getMenu({ id: id });
+}
+
+async function openDialog(options: {
   module?: TreeModuleDtoGroupDto;
   showCacheSelect: boolean;
   showIconSelect: boolean;
@@ -252,46 +271,48 @@
   parentId: string;
   baseSortCode?: number;
 }) {
-  const {
-    module,
-    showCacheSelect,
-    showIconSelect,
-    showSubMenuIconSelect,
-    showParentSelect,
-    parentId,
-    baseSortCode,
-  } = options;
-  if (module) {
-    currentDialogModule.value = module;
-    useSetReactive(editForm, {
-      title: `${module.name}缂栬緫`,
-      enCode: module.enCode,
-      name: module.name,
-      icon: module.icon,
-      sortCode: module.sortCode,
-      path: module.path,
-      isMenu: module.isMenu,
-      enabledMark: module.enabledMark,
-      parentId: parentId,
+  try {
+    const {
+      module,
       showCacheSelect,
       showIconSelect,
       showSubMenuIconSelect,
       showParentSelect,
-      isCache: module.isCache,
-    });
-  } else {
-    currentDialogModule.value = {};
-    useSetReactive(editForm, BaseFormData, {
-      title: '鏂板鍔熻兘妯″潡',
-      parentId: parentId,
-      showCacheSelect,
-      showIconSelect,
-      showSubMenuIconSelect,
-      showParentSelect,
-      sortCode: baseSortCode,
-    });
-  }
-  editDialogFormVisible.value = true;
+      parentId,
+      baseSortCode,
+    } = options;
+    if (module) {
+      currentDialogModule.value = await getMenu(module.id);
+      useSetReactive(editForm, {
+        title: `${module.name}缂栬緫`,
+        enCode: module.code,
+        name: module.name,
+        icon: module.icon,
+        sortCode: module.sort,
+        path: module.url,
+        isMenu: module.type == EnumMenuType.Menu,
+        enabledMark: !module.isDisabled,
+        parentId: parentId,
+        showCacheSelect,
+        showIconSelect,
+        showSubMenuIconSelect,
+        showParentSelect,
+        isCache: module.isCache,
+      });
+    } else {
+      currentDialogModule.value = {};
+      useSetReactive(editForm, BaseFormData, {
+        title: '鏂板鍔熻兘妯″潡',
+        parentId: parentId,
+        showCacheSelect,
+        showIconSelect,
+        showSubMenuIconSelect,
+        showParentSelect,
+        sortCode: baseSortCode,
+      });
+    }
+    editDialogFormVisible.value = true;
+  } catch (error) {}
 }
 function handleAddOrEditRootModule(module?: TreeModuleDtoGroupDto) {
   const showCacheSelect = false;
@@ -341,16 +362,17 @@
 }
 async function handleAddOrEditModule() {
   try {
-    let params: API.ModuleDto = {
-      enCode: editForm.enCode,
+    let params: API.SaveMenuCommand = {
+      userType: EnumUserType.Operation,
+      clientType: EnumClientType.PcWeb,
+      code: editForm.enCode,
       name: editForm.name,
-      sortCode: editForm.sortCode,
-      path: editForm.path,
-      // isCache: true,
-      isMenu: editForm.isMenu,
-      enabledMark: editForm.enabledMark,
+      type: editForm.isMenu ? EnumMenuType.Menu : EnumMenuType.Page,
+      visitLevel: EnumMenuVisitLevel.NeedPower,
       icon: editForm.icon,
-      // parentId:,
+      url: editForm.path,
+      isDisabled: !editForm.enabledMark,
+      sort: editForm.sortCode,
     };
     if (editForm.showCacheSelect) {
       params.isCache = editForm.isCache;
@@ -360,8 +382,9 @@
     }
     if (currentDialogModule.value.id) {
       params.id = currentDialogModule.value.id;
+      params.groups = currentDialogModule.value.groups;
     }
-    const res = await baseModuleServices.addOrEditModule(params);
+    const res = await saveMenu(params);
     if (res) {
       Message.successMessage('淇濆瓨鎴愬姛');
       getAllModule();
@@ -370,28 +393,46 @@
   } catch (e) {}
 }
 
+async function saveMenu(params: API.SaveMenuCommand) {
+  try {
+    const res = await menuServices.saveMenu(params);
+    if (res) {
+      Message.successMessage('淇濆瓨鎴愬姛');
+      getAllModule();
+      editDialogFormVisible.value = false;
+      return res;
+    }
+  } catch (error) {}
+}
+
 async function handleDelete(module: TreeModuleDtoGroupDto) {
   try {
     await Message.deleteMessage();
-    const res = await baseModuleServices.deleteModule({ id: module.id });
+    const res = await menuServices.deleteMenu({ ids: [module.id] });
     if (res) {
       Message.successMessage('鍒犻櫎鎴愬姛');
       getAllModule();
     }
   } catch (error) {}
 }
-function openDrawer(module: TreeModuleDtoGroupDto, type: SubModuleType) {
-  drawerState.type = type;
-  currentDrawerModule.value = module;
-  getBaseModuleGetAllSubModule(module, type);
+async function openDrawer(module: TreeModuleDtoGroupDto, type: SubModuleType) {
+  try {
+    drawerState.type = type;
+    currentDrawerModule.value = await getMenu(module.id);
+    await nextTick();
+    getBaseModuleGetAllSubModule(module, type);
+  } catch (error) {}
 }
 async function getBaseModuleGetAllSubModule(module: TreeModuleDtoGroupDto, type: SubModuleType) {
   try {
-    let params = {
-      moduleId: module.id,
-    };
-    const res = await baseModuleServices.getAllSubModule(params);
-    drawerState.tableData = res[SubModuleKey[type]];
+    const defaultGroup = currentDrawerModule.value.groups.find((g) => g.group === 'default');
+    if (type === SubModuleType.Column) {
+      drawerState.tableData = defaultGroup.fields;
+    } else {
+      drawerState.tableData = defaultGroup.buttonLocations.find(
+        (b) => b.location === SubModuleKey[type]
+      );
+    }
     drawerVisible.value = true;
   } catch (error) {}
 }
@@ -411,7 +452,7 @@
 }
 function getDefaultSortCode() {
   return drawerState.tableData.length > 0
-    ? drawerState.tableData[drawerState.tableData.length - 1].sortCode + 1
+    ? drawerState.tableData[drawerState.tableData.length - 1].sort + 1
     : 0;
 }
 function handleBatchAddColumn(keys: string[]) {
diff --git a/src/views/System/components/AddOrEditModuleDialog.vue b/src/views/System/components/AddOrEditModuleDialog.vue
index 0714c25..5d8d01a 100644
--- a/src/views/System/components/AddOrEditModuleDialog.vue
+++ b/src/views/System/components/AddOrEditModuleDialog.vue
@@ -57,10 +57,10 @@
         <el-switch v-model="editForm.isCache" />
       </el-form-item>
       <el-form-item label="鑿滃崟" prop="isMenu">
-        <el-switch :active-value="1" :inactive-value="0" v-model="editForm.isMenu" />
+        <el-switch v-model="editForm.isMenu" />
       </el-form-item>
       <el-form-item label="鏈夋晥" prop="enabledMark">
-        <el-switch :active-value="1" :inactive-value="0" v-model="editForm.enabledMark" />
+        <el-switch v-model="editForm.enabledMark" />
       </el-form-item>
     </el-form>
     <template #footer>
@@ -93,8 +93,8 @@
     sortCode: number;
     path: string;
     isCache: boolean;
-    isMenu: number;
-    enabledMark: number;
+    isMenu: boolean;
+    enabledMark: boolean;
     showCacheSelect: boolean;
     showIconSelect: boolean;
     showSubMenuIconSelect: boolean;
diff --git a/types/api.d.ts b/types/api.d.ts
index a095b00..1061075 100644
--- a/types/api.d.ts
+++ b/types/api.d.ts
@@ -14,38 +14,5 @@
     customErrorHandler?: (error: any) => boolean;
   }
 
-  interface ModuleButtonDto {
-    isEdit?: boolean;
-  }
 
-  interface ModuleColumnDto {
-    isEdit?: boolean;
-    fixed?: boolean | 'left' | 'right';
-    needTips?: boolean;
-  }
-
-  interface CustomModuleColumnDto extends ModuleColumnDto {
-    id: string;
-    enCode: string;
-    name: string;
-  }
-
-  interface DepartmentTree {
-    leaf?: boolean;
-  }
-  interface StationTree {
-    leaf?: boolean;
-  }
-
-  interface RoleList {
-    //鏄惁鏄鎴风
-    isClient?: boolean;
-  }
-
-  interface AreaTreeNode extends AreaDto {
-    children?: AreaTreeNode[];
-  }
-  interface GetSearchSettingList {
-    children?: GetSearchSettingList[];
-  }
 }
diff --git a/vite.config.ts b/vite.config.ts
index e6d3e8c..a3c29ca 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -56,7 +56,9 @@
     // 鏈嶅姟绔覆鏌�
     server: {
       // 鏄惁寮�鍚� https
-      // https: false,
+      // https: {
+
+      // },
       // 绔彛鍙�
       port: VITE_PORT,
       host: '0.0.0.0',

--
Gitblit v1.9.1