From 0063b31f352bfa5904e5bfa23f418ca7ca5c0a5e Mon Sep 17 00:00:00 2001 From: lijiahang Date: Wed, 9 Aug 2023 15:45:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20cacheStore.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu/SystemMenuUpdateStatusRequest.java | 4 +- .../module/infra/enums/MenuVisibleEnum.java | 43 ++++++++++ .../service/impl/SystemMenuServiceImpl.java | 22 ++++- orion-ops-ui/src/api/system/menu.ts | 9 ++ orion-ops-ui/src/assets/style/layout.less | 12 +++ orion-ops-ui/src/store/index.ts | 4 +- orion-ops-ui/src/store/modules/cache/index.ts | 29 +++++++ .../modules/{system/menu => cache}/types.ts | 2 +- .../src/store/modules/system/menu/index.ts | 84 ------------------- orion-ops-ui/src/utils/enum.ts | 27 ++++++ .../menu/components/menu-form-modal.vue | 10 +-- .../system/menu/components/menu-table.vue | 74 ++++++++++++---- .../menu/components/menu-tree-selector.vue | 34 +++++++- 13 files changed, 238 insertions(+), 116 deletions(-) create mode 100644 orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/enums/MenuVisibleEnum.java create mode 100644 orion-ops-ui/src/store/modules/cache/index.ts rename orion-ops-ui/src/store/modules/{system/menu => cache}/types.ts (79%) delete mode 100644 orion-ops-ui/src/store/modules/system/menu/index.ts diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/menu/SystemMenuUpdateStatusRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/menu/SystemMenuUpdateStatusRequest.java index 63ac8164..b276e5fa 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/menu/SystemMenuUpdateStatusRequest.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/menu/SystemMenuUpdateStatusRequest.java @@ -26,7 +26,9 @@ public class SystemMenuUpdateStatusRequest { @Schema(description = "id") private Long id; - @NotNull + @Schema(description = "是否可见 0不可见 1可见") + private Integer visible; + @Schema(description = "菜单状态 0停用 1启用") private Integer status; diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/enums/MenuVisibleEnum.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/enums/MenuVisibleEnum.java new file mode 100644 index 00000000..cc85e766 --- /dev/null +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/enums/MenuVisibleEnum.java @@ -0,0 +1,43 @@ +package com.orion.ops.module.infra.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 菜单可见枚举 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/7/16 1:45 + */ +@Getter +@AllArgsConstructor +public enum MenuVisibleEnum { + + /** + * 显示 + */ + HIDE(0), + + /** + * 隐藏 + */ + SHOW(1), + + ; + + private final Integer visible; + + public static MenuVisibleEnum of(Integer visible) { + if (visible == null) { + return null; + } + for (MenuVisibleEnum value : values()) { + if (value.visible.equals(visible)) { + return value; + } + } + return null; + } + +} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemMenuServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemMenuServiceImpl.java index 529fbe0e..65c1e88e 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemMenuServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemMenuServiceImpl.java @@ -19,6 +19,7 @@ import com.orion.ops.module.infra.entity.request.menu.SystemMenuUpdateStatusRequ import com.orion.ops.module.infra.entity.vo.SystemMenuVO; import com.orion.ops.module.infra.enums.MenuStatusEnum; import com.orion.ops.module.infra.enums.MenuTypeEnum; +import com.orion.ops.module.infra.enums.MenuVisibleEnum; import com.orion.ops.module.infra.service.PermissionService; import com.orion.ops.module.infra.service.SystemMenuService; import lombok.extern.slf4j.Slf4j; @@ -177,22 +178,37 @@ public class SystemMenuServiceImpl implements SystemMenuService { @Override public Integer updateSystemMenuStatus(SystemMenuUpdateStatusRequest request) { Long id = request.getId(); - Integer status = Valid.valid(MenuStatusEnum::of, request.getStatus()).getStatus(); + Integer status = request.getStatus(); + Integer visible = request.getVisible(); + if (status != null) { + Valid.valid(MenuStatusEnum::of, status); + } + if (visible != null) { + Valid.valid(MenuVisibleEnum::of, visible); + } // 查询 SystemMenuDO record = systemMenuDAO.selectById(id); Valid.notNull(record, ErrorMessage.DATA_ABSENT); // 从缓存中查询 List cache = permissionService.getMenuCache(); - // 获取要删除的id + // 获取要更新的id List updateIdList = this.getChildrenIdList(id, cache, record.getType()); // 修改状态 SystemMenuDO update = new SystemMenuDO(); update.setStatus(status); + update.setVisible(visible); int effect = systemMenuDAO.update(update, Conditions.in(SystemMenuDO::getId, updateIdList)); // 修改引用缓存状态 cache.stream() .filter(s -> updateIdList.contains(s.getId())) - .forEach(s -> s.setStatus(status)); + .forEach(s -> { + if (status != null) { + s.setStatus(status); + } + if (visible != null) { + s.setVisible(visible); + } + }); log.info("SystemMenuService-updateSystemMenuStatus updateIdList: {}, effect: {}", JSON.toJSONString(updateIdList), effect); return effect; } diff --git a/orion-ops-ui/src/api/system/menu.ts b/orion-ops-ui/src/api/system/menu.ts index 981671ce..61e34740 100644 --- a/orion-ops-ui/src/api/system/menu.ts +++ b/orion-ops-ui/src/api/system/menu.ts @@ -9,6 +9,7 @@ export interface MenuCreateRequest { permission?: string; type?: number; sort?: number; + visible?: number; cache?: number; icon?: string; path?: string; @@ -20,6 +21,7 @@ export interface MenuCreateRequest { */ export interface MenuUpdateRequest extends MenuCreateRequest { id: number; + status?: number; } /** @@ -70,6 +72,13 @@ export function updateMenu(request: MenuUpdateRequest) { return axios.put('/infra/system-menu/update', request); } +/** + * 修改菜单状态 + */ +export function updateMenuStatus(request: MenuUpdateRequest) { + return axios.put('/infra/system-menu/update-status', request); +} + /** * 删除菜单 */ diff --git a/orion-ops-ui/src/assets/style/layout.less b/orion-ops-ui/src/assets/style/layout.less index 52239fa2..1cc3918c 100644 --- a/orion-ops-ui/src/assets/style/layout.less +++ b/orion-ops-ui/src/assets/style/layout.less @@ -24,10 +24,22 @@ } } +.modal-form { + .arco-form-item { + &:last-child { + margin-bottom: 0 !important; + } + } +} + .hide { display: none; } +.pointer { + cursor: pointer; +} + .ml4 { margin-left: 4px; } diff --git a/orion-ops-ui/src/store/index.ts b/orion-ops-ui/src/store/index.ts index 646bbc14..77b726e8 100644 --- a/orion-ops-ui/src/store/index.ts +++ b/orion-ops-ui/src/store/index.ts @@ -2,7 +2,7 @@ import { createPinia } from 'pinia'; import useAppStore from './modules/app'; import useUserStore from './modules/user'; import useTabBarStore from './modules/tab-bar'; -import useMenuStore from './modules/system/menu'; +import useCacheStore from './modules/cache'; const pinia = createPinia(); @@ -10,7 +10,7 @@ export { useAppStore, useUserStore, useTabBarStore, - useMenuStore + useCacheStore }; export default pinia; diff --git a/orion-ops-ui/src/store/modules/cache/index.ts b/orion-ops-ui/src/store/modules/cache/index.ts new file mode 100644 index 00000000..e6dc6163 --- /dev/null +++ b/orion-ops-ui/src/store/modules/cache/index.ts @@ -0,0 +1,29 @@ +import { defineStore } from 'pinia'; +import { CacheState } from './types'; +import { MenuQueryResponse } from '@/api/system/menu'; + +const useCacheStore = defineStore('cache', { + state: (): CacheState => ({ + menus: [] + }), + + getters: {}, + + actions: { + /** + * 更新菜单 + */ + updateMenu(menus: MenuQueryResponse[]) { + this.menus = menus; + }, + + /** + * 清空菜单 + */ + resetMenu() { + this.menus = []; + }, + }, +}); + +export default useCacheStore; diff --git a/orion-ops-ui/src/store/modules/system/menu/types.ts b/orion-ops-ui/src/store/modules/cache/types.ts similarity index 79% rename from orion-ops-ui/src/store/modules/system/menu/types.ts rename to orion-ops-ui/src/store/modules/cache/types.ts index d2e92f5d..bde75483 100644 --- a/orion-ops-ui/src/store/modules/system/menu/types.ts +++ b/orion-ops-ui/src/store/modules/cache/types.ts @@ -1,6 +1,6 @@ import { MenuQueryResponse } from '@/api/system/menu'; -export interface MenuState { +export interface CacheState { menus: MenuQueryResponse[], [key: string]: unknown; diff --git a/orion-ops-ui/src/store/modules/system/menu/index.ts b/orion-ops-ui/src/store/modules/system/menu/index.ts deleted file mode 100644 index bbf5776d..00000000 --- a/orion-ops-ui/src/store/modules/system/menu/index.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { defineStore } from 'pinia'; -import { MenuState } from './types'; -import { MenuQueryResponse } from '@/api/system/menu'; -import { TreeNodeData } from '@arco-design/web-vue'; - -const useMenuStore = defineStore('menu', { - state: (): MenuState => ({ - menus: [] - }), - - getters: { - menuState(state: MenuState): MenuState { - return { ...state }; - }, - treeData(state: MenuState): TreeNodeData[] { - let render = (arr: any[]): TreeNodeData[] => { - return arr.map((s) => { - // 非 function - if (s.type === 3) { - return null as unknown as TreeNodeData; - } - // 当前节点 - const node = { - key: s.id, - title: s.name, - children: undefined as unknown - } as TreeNodeData; - // 子节点 - if (s.children && s.children.length) { - node.children = render(s.children); - } - return node; - }).filter(Boolean); - }; - return [{ - key: 0, - title: '根目录', - children: render([...state.menus]) - }]; - } - }, - - actions: { - /** - * 更新菜单 - */ - updateMenu(menus: MenuQueryResponse[]) { - this.menus = menus; - }, - - /** - * 获取父菜单 - */ - findParentMenu(arr: any, id: number): any { - if (!arr || !arr.length) { - return null; - } - // 当前级 - for (let e of arr) { - if (e.id === id) { - return arr; - } - } - // 子级 - for (let e of arr) { - if (e.children && e.children.length) { - if (this.findParentMenu(e.children, id)) { - return e.children; - } - } - } - return null; - }, - - /** - * 清空菜单 - */ - reset() { - this.menus = []; - }, - }, -}); - -export default useMenuStore; diff --git a/orion-ops-ui/src/utils/enum.ts b/orion-ops-ui/src/utils/enum.ts index 9183c992..6ede1a2c 100644 --- a/orion-ops-ui/src/utils/enum.ts +++ b/orion-ops-ui/src/utils/enum.ts @@ -9,6 +9,33 @@ export const toOptions = (enums: any) => { return arr; }; +/** + * 切换枚举值 + */ +export const toggleEnumValue = (value: any, + enums: any, + key = 'value', + defaultValue = value) => { + for (let k in enums) { + if (enums[k].value !== value) { + return enums[k][key]; + } + } + return defaultValue; +}; + +/** + * 切换枚举对象 + */ +export const toggleEnum = (value: any, enums: any) => { + for (let k in enums) { + if (enums[k].value !== value) { + return enums[k]; + } + } + return {}; +}; + /** * 获取枚举值 */ diff --git a/orion-ops-ui/src/views/system/menu/components/menu-form-modal.vue b/orion-ops-ui/src/views/system/menu/components/menu-form-modal.vue index f804bcd8..bc8ad0b6 100644 --- a/orion-ops-ui/src/views/system/menu/components/menu-form-modal.vue +++ b/orion-ops-ui/src/views/system/menu/components/menu-form-modal.vue @@ -1,5 +1,6 @@