From 20459fe59f680031bfc7c1012be860e0727cb016 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期二, 05 八月 2025 17:47:09 +0800
Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/flexJobAdmin

---
 src/views/System/ModuleManage.vue |  341 ++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 205 insertions(+), 136 deletions(-)

diff --git a/src/views/System/ModuleManage.vue b/src/views/System/ModuleManage.vue
index 9aa4d8c..5a20161 100644
--- a/src/views/System/ModuleManage.vue
+++ b/src/views/System/ModuleManage.vue
@@ -3,10 +3,26 @@
     <AppContainer>
       <ProTableQueryFilterBar @on-reset="handleReset">
         <template #query>
+          <QueryFilterItem>
+            <FieldRadio
+              v-model="state.clientType"
+              :value-enum="EnumClientTypeText"
+              buttonStyle
+              @change="getAllModule()"
+            />
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <FieldRadio
+              v-model="state.userType"
+              :value-enum="EnumUserTypeText"
+              buttonStyle
+              @change="getAllModule()"
+            />
+          </QueryFilterItem>
           <div class="query-filter-list-item">
             <SearchInput
               v-model="state.searchValue"
-              placeholder="瑙掕壊鍚嶇О"
+              placeholder="鑿滃崟鍚嶇О"
               @on-click-search="handleSearch"
               @keyup.enter="handleSearch()"
             >
@@ -45,19 +61,19 @@
           </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')"
+              @change="(v: boolean) => 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"
-              @change="(v: number) => handleChangeStatus(v, row, 'enabledMark')"
+              :modelValue="!row.isDisabled"
+              :onUpdate:modelValue="(v: boolean) => row.isDisabled =!v"
+              @change="(v: boolean) => handleChangeStatus(v, row, 'enabledMark')"
             ></el-switch>
           </template>
         </template>
@@ -94,15 +110,28 @@
   LoadingLayout,
   OperationBtnType,
   SearchInput,
+  QueryFilterItem,
+  FieldRadio,
 } 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,
+  EnumClientTypeText,
+  EnumUserTypeText,
+} 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';
+import { DrawerTableDataItem } from './types';
 
 defineOptions({
   name: 'ModuleManage',
@@ -173,6 +202,9 @@
 const BaseState = {
   loading: true,
   searchValue: '',
+  group: 'default',
+  userType: EnumUserType.Operation,
+  clientType: EnumClientType.PcWeb,
 };
 const state = reactive({ ...BaseState });
 const moduleTreeStore = ref<TreeStore<TreeModuleDtoGroupDto>>();
@@ -189,8 +221,8 @@
   sortCode: 0,
   path: '',
   isCache: true,
-  isMenu: 1,
-  enabledMark: 1,
+  isMenu: true,
+  enabledMark: true,
   showCacheSelect: false,
   showIconSelect: false,
   showSubMenuIconSelect: false,
@@ -198,13 +230,14 @@
   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>;
+  tableData: DrawerTableDataItem[];
 }>({
   type: SubModuleType.PageButton,
   tableData: [],
@@ -215,35 +248,53 @@
 });
 async function getAllModule() {
   try {
-    let res = await baseModuleServices.getAllModuleList({
-      showLoading: !state.loading,
-    });
-    const treeStore = ModuleUtils.convertToModuleGroup(res);
+    let res = await menuServices.getMenus(
+      {
+        userType: state.userType,
+        clientType: state.clientType,
+      },
+      {
+        showLoading: false,
+      }
+    );
+    const treeStore = ModuleUtils.convertToModuleGroup(flattenTree(res));
     moduleTreeStore.value = treeStore;
     originModuleTree.value = [...treeStore.data];
   } catch (error) {}
 }
 type StatusEventType = {
   isCache: boolean;
-  isMenu: number;
-  enabledMark: number;
+  isMenu: boolean;
+  enabledMark: boolean;
 };
 async function handleChangeStatus<T extends keyof StatusEventType>(
-  value: StatusEventType[T],
+  value: boolean,
   data: TreeModuleDtoGroupDto,
   statusType: T
 ) {
   try {
-    let params = {
-      ..._.omit(data, ['children', 'parentNode']),
-      [statusType]: value,
+    let params: API.SetMenuSwitchCommand = {
+      ids: [data.id],
+      type: data.type,
+      isDisabled: data.isDisabled,
+      isCache: data.isCache,
     };
-    await baseModuleServices.addOrEditModule(params);
-  } catch (error) {
-    Message.errorMessage('鎿嶄綔澶辫触');
-  }
+    if (statusType === 'isMenu') {
+      params.type = value ? EnumMenuType.Menu : EnumMenuType.Page;
+    } else if (statusType === 'isCache') {
+      params.isCache = value;
+    } else {
+      params.isDisabled = !value;
+    }
+    await menuServices.setMenuSwitch(params);
+  } catch (error) {}
 }
-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 +303,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 +394,17 @@
 }
 async function handleAddOrEditModule() {
   try {
-    let params: API.ModuleDto = {
-      enCode: editForm.enCode,
+    let params: API.SaveMenuCommand = {
+      userType: state.userType,
+      clientType: state.clientType,
+      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 +414,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 +425,57 @@
   } catch (e) {}
 }
 
+async function saveMenu(params: API.SaveMenuCommand) {
+  try {
+    const res = await menuServices.saveMenu(params);
+    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;
+    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 menu = await getMenu(module.id);
+    currentDrawerModule.value = menu;
+    const currentGroup = menu.groups.find((g) => g.group === state.group) ?? {};
+    if (type === SubModuleType.Column) {
+      drawerState.tableData = (currentGroup.fields ?? []).map((f) => ({
+        enCode: f.code,
+        name: f.name,
+        sortCode: f.sort,
+        width: f.width,
+        isEdit: false,
+        isShow: false,
+        id: f.id,
+      }));
+    } else {
+      drawerState.tableData = (
+        currentGroup.buttonLocations?.find((b) => b.location === SubModuleKey[type])?.buttons ?? []
+      ).map((b) => ({
+        enCode: b.code,
+        name: b.name,
+        sortCode: b.sort,
+        width: b.width,
+        isEdit: false,
+        isShow: false,
+        id: b.id,
+      }));
+    }
     drawerVisible.value = true;
   } catch (error) {}
 }
@@ -401,10 +485,10 @@
     enCode: '',
     name: '',
     sortCode: sortCode,
-    width: 0,
+    width: 0 as any as string,
     isEdit: true,
-    apiName: '',
-    realColumn: '',
+    // apiName: '',
+    // realColumn: '',
     isShow: true,
   };
   drawerState.tableData?.push(baseData);
@@ -420,13 +504,13 @@
     enCode: key,
     name: '',
     sortCode: sortCode + index,
-    width: 0,
+    width: 0 as any as string,
     isEdit: true,
   }));
   drawerState.tableData?.push(...baseDataList);
 }
 function handleAddFastBtn(fastBtn: FastBtn) {
-  let subModule: API.ModuleButtonDto | API.ModuleColumnDto = {
+  let subModule: DrawerTableDataItem = {
     enCode: fastBtn.enCode,
     name: fastBtn.name,
     sortCode: getDefaultSortCode(),
@@ -437,37 +521,29 @@
   }
   handleSaveSubModule(subModule);
 }
-async function handleSaveSubModule(subModule: API.ModuleButtonDto | API.ModuleColumnDto) {
+async function handleSaveSubModule(subModule: DrawerTableDataItem) {
   try {
-    let params = {
-      moduleId: currentDrawerModule.value.id,
-      enCode: subModule.enCode,
+    let params: API.SaveMenuFieldCommand = {
+      parentId: currentDrawerModule.value.id,
+      code: subModule.enCode,
       name: subModule.name,
-      sortCode: subModule.sortCode,
+      group: state.group,
+      // location: 'string',
+      width: subModule.width,
+      sort: subModule.sortCode,
     };
     if (subModule.id) {
-      //@ts-ignore
       params.id = subModule.id;
     }
     if (drawerState.type === SubModuleType.Column) {
-      const _subModule = subModule as API.ModuleColumnDto;
-      params = {
-        ...params,
-        //@ts-ignore
-        width: _subModule.width,
-        apiName: _subModule.apiName,
-        realColumn: _subModule.realColumn,
-        isShow: _subModule.isShow,
-      };
     } else {
-      //@ts-ignore
-      params.buttonType = drawerState.type;
+      params.location = SubModuleKey[drawerState.type];
     }
     let res = null;
     if (drawerState.type === SubModuleType.Column) {
-      res = await baseModuleServices.addOrEditModuleColumn(params);
+      res = await menuServices.saveMenuField(params);
     } else {
-      res = await baseModuleServices.addOrEditModuleButton(params);
+      res = await menuServices.saveMenuButton(params);
     }
     if (res) {
       getBaseModuleGetAllSubModule(currentDrawerModule.value, drawerState.type);
@@ -478,28 +554,24 @@
 async function handelBatchSaveColumn() {
   try {
     if (drawerState.type === SubModuleType.Column) {
-      let columnModuleList = drawerState.tableData as (API.ModuleColumnDto & { isEdit: boolean })[]; //.filter((d) => d.isEdit);
+      let columnModuleList = drawerState.tableData; //.filter((d) => d.isEdit);
       if (columnModuleList.length > 0) {
-        let params = columnModuleList.map((columnModule) => {
-          let columnItem = {
-            moduleId: currentDrawerModule.value.id,
-            enCode: columnModule.enCode,
-            name: columnModule.name,
-            sortCode: columnModule.sortCode,
-            apiName: columnModule.apiName,
-            realColumn: columnModule.realColumn,
-            isShow: columnModule.isShow,
-            width: columnModule.width,
-          };
-          if (columnModule.id) {
-            //@ts-ignore
-            columnItem.id = columnModule.id;
+        const groups = currentDrawerModule.value.groups.map((group) => {
+          if (group.group === state.group) {
+            group.fields = columnModuleList.map((c) => ({
+              code: c.enCode,
+              name: c.name,
+              width: c.width,
+              sort: c.sortCode,
+            }));
           }
-          return columnItem;
+          return group;
         });
-        let res = await baseModuleServices.addModuleColumnList(params, {
-          getResponse: true,
-        });
+        let params: API.SaveMenuCommand = {
+          ...currentDrawerModule.value,
+          groups: groups,
+        };
+        const res = await saveMenu(params);
         if (res) {
           getBaseModuleGetAllSubModule(currentDrawerModule.value, drawerState.type);
           Message.successMessage('淇濆瓨鎴愬姛');
@@ -509,15 +581,12 @@
   } catch (error) {}
 }
 
-async function handleDeleteSubModule(subModule: API.ModuleButtonDto | API.ModuleColumnDto) {
+async function handleDeleteSubModule(subModule: DrawerTableDataItem) {
   try {
     await Message.deleteMessage();
-    let res = null;
-    if (drawerState.type === SubModuleType.Column) {
-      res = await baseModuleServices.deleteModuleColumn({ id: subModule.id });
-    } else {
-      res = await baseModuleServices.deleteModuleButton({ id: subModule.id });
-    }
+    let res = await menuServices.deleteMenu({
+      ids: [subModule.id],
+    });
     if (res) {
       Message.successMessage('鍒犻櫎鎴愬姛');
       getBaseModuleGetAllSubModule(currentDrawerModule.value, drawerState.type);

--
Gitblit v1.9.1