diff --git a/db/qihang-oms.sql b/db/qihang-oms.sql new file mode 100644 index 00000000..eabc1b18 --- /dev/null +++ b/db/qihang-oms.sql @@ -0,0 +1,106 @@ +/* + Navicat Premium Data Transfer + + Source Server : localhost + Source Server Type : MySQL + Source Server Version : 80200 + Source Host : localhost:3306 + Source Schema : qihang-oms + + Target Server Type : MySQL + Target Server Version : 80200 + File Encoding : 65001 + + Date: 24/02/2024 21:21:11 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for sys_menu +-- ---------------------------- +DROP TABLE IF EXISTS `sys_menu`; +CREATE TABLE `sys_menu` ( + `menu_id` bigint NOT NULL AUTO_INCREMENT COMMENT '菜单ID', + `menu_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单名称', + `parent_id` bigint NULL DEFAULT 0 COMMENT '父菜单ID', + `order_num` int NULL DEFAULT 0 COMMENT '显示顺序', + `path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '路由地址', + `component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组件路径', + `query` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '路由参数', + `is_frame` int NULL DEFAULT 1 COMMENT '是否为外链(0是 1否)', + `is_cache` int NULL DEFAULT 0 COMMENT '是否缓存(0缓存 1不缓存)', + `menu_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '菜单类型(M目录 C菜单 F按钮)', + `visible` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '菜单状态(0显示 1隐藏)', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '菜单状态(0正常 1停用)', + `perms` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '权限标识', + `icon` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '#' COMMENT '菜单图标', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', + PRIMARY KEY (`menu_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2078 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单权限表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_menu +-- ---------------------------- +INSERT INTO `sys_menu` VALUES (1, '淘宝平台', 0, 99, '/tao', 'Layout', '', 1, 0, 'M', '0', '0', '', 'system', 'admin', '2023-12-27 15:00:27', 'admin', '2023-12-29 09:07:42.856856', '系统管理目录'); +INSERT INTO `sys_menu` VALUES (2, '京东平台', 0, 1, '/jd', 'Layout', '', 1, 0, 'M', '0', '0', '', 'monitor', 'admin', '2023-12-27 15:00:27', 'admin', '2024-01-06 23:55:21', '至简官网地址'); +INSERT INTO `sys_menu` VALUES (3, '抖店平台', 0, 9, '/dou', 'Layout', '', 1, 0, 'M', '0', '0', '', 'dict', 'admin', '2023-12-29 13:29:44', '', '', ''); +INSERT INTO `sys_menu` VALUES (4, '拼多多平台', 0, 2, '/pdd', 'Layout', '', 1, 0, 'M', '0', '0', '', 'peoples', 'admin', '2023-12-29 16:53:03', 'admin', '2024-01-03 14:06:38', ''); +INSERT INTO `sys_menu` VALUES (5, '系统设置', 0, 99, '/system', 'Layout', '', 1, 0, 'M', '0', '0', '', 'system', 'admin', '2023-12-27 15:00:27', 'admin', '2023-12-29 09:07:42.856856', '系统管理目录'); +INSERT INTO `sys_menu` VALUES (100, '订单管理', 1, 1, 'order_list', 'tao/order/index', '', 1, 0, 'C', '0', '0', '', 'user', 'admin', '2023-12-27 15:00:27', '', '', '用户管理菜单'); +INSERT INTO `sys_menu` VALUES (101, '商品管理', 1, 2, 'tao/goods/list', 'system/role/index', '', 1, 0, 'C', '0', '0', '', 'peoples', 'admin', '2023-12-27 15:00:27', '', '', '角色管理菜单'); +INSERT INTO `sys_menu` VALUES (102, '售后管理', 1, 3, 'tao/refund/list', 'system/menu/index', '', 1, 0, 'C', '0', '0', '', 'monitor', 'admin', '2023-12-27 15:00:27', '', '', '菜单管理菜单'); +INSERT INTO `sys_menu` VALUES (103, '店铺管理', 1, 4, 'tao/shop', 'system/dept/index', '', 1, 0, 'C', '0', '0', '', 'tree', 'admin', '2023-12-27 15:00:27', '', '', '部门管理菜单'); +INSERT INTO `sys_menu` VALUES (104, '订单管理', 2, 5, 'post', 'system/post/index', '', 1, 0, 'C', '0', '0', '', 'tree', 'admin', '2023-12-27 15:00:27', '', '', '岗位管理菜单'); +INSERT INTO `sys_menu` VALUES (105, '商品管理', 2, 6, 'jd/goods/list', 'system/dict/index', '', 1, 0, 'C', '0', '0', '', 'dict', 'admin', '2023-12-27 15:00:27', '', '', '字典管理菜单'); +INSERT INTO `sys_menu` VALUES (106, '售后设置', 2, 7, 'jd/refund/list', 'system/config/index', '', 1, 0, 'C', '0', '0', '', 'edit', 'admin', '2023-12-27 15:00:27', '', '', '参数设置菜单'); +INSERT INTO `sys_menu` VALUES (107, '店铺管理', 2, 8, 'jd/shop', 'system/notice/index', '', 1, 0, 'C', '0', '0', '', 'monitor', 'admin', '2023-12-27 15:00:27', '', '', '通知公告菜单'); +INSERT INTO `sys_menu` VALUES (108, '订单管理', 3, 9, 'dou/order/list', 'scm/supplier/index', '', 1, 0, 'C', '0', '0', '', 'tree', 'admin', '2023-12-29 09:14:02', 'admin', '2023-12-29 09:17:27.514466', ''); +INSERT INTO `sys_menu` VALUES (109, '商品管理', 3, 10, 'dou/goods/list', 'goods/index', '', 1, 0, 'C', '0', '0', '', 'peoples', 'admin', '2023-12-29 13:31:01', 'admin', '2023-12-29 15:02:40.869685', ''); +INSERT INTO `sys_menu` VALUES (110, '售后管理', 3, 88, 'dou/refund/list', 'goods/category/index', '', 1, 0, 'C', '0', '0', '', 'peoples', 'admin', '2023-12-29 13:32:41', 'admin', '2023-12-29 15:02:22.220534', ''); +INSERT INTO `sys_menu` VALUES (111, '店铺管理', 3, 99, 'dou/shop', 'goods/brand/index', '', 1, 0, 'C', '0', '0', '', 'monitor', 'admin', '2023-12-29 13:34:49', 'admin', '2023-12-29 13:58:43.724029', ''); +INSERT INTO `sys_menu` VALUES (112, '订单管理', 4, 1, 'dou/order/list', 'scm/purchase/order', '', 1, 0, 'C', '0', '0', '', 'tree', 'admin', '2023-12-29 16:35:55', 'admin', '2023-12-29 16:36:57.653118', ''); +INSERT INTO `sys_menu` VALUES (113, '商品管理', 4, 2, 'pdd/goods/list', 'scm/purchase/contract', '', 1, 0, 'C', '0', '0', '', 'peoples', 'admin', '2023-12-29 16:39:43', 'admin', '2023-12-30 18:07:58.363465', ''); +INSERT INTO `sys_menu` VALUES (114, '售后管理', 4, 3, 'pdd/refund/list', 'scm/purchase/ship', '', 1, 0, 'C', '0', '0', '', 'system', 'admin', '2023-12-29 16:45:42', 'admin', '2023-12-30 20:48:47.282509', ''); +INSERT INTO `sys_menu` VALUES (115, '店铺管理', 4, 4, 'pdd/shop', 'scm/purchase/cost', '', 1, 0, 'C', '0', '0', '', 'monitor', 'admin', '2023-12-29 16:47:07', 'admin', '2024-01-13 18:32:21', ''); +INSERT INTO `sys_menu` VALUES (116, '用户管理', 5, 1, 'user', 'system/user/index', '', 1, 0, 'C', '0', '0', '', 'user', 'admin', '2023-12-27 15:00:27', '', '', '用户管理菜单'); +INSERT INTO `sys_menu` VALUES (117, '菜单管理', 5, 1, 'menu', 'system/menu/index', '', 1, 0, 'C', '0', '0', '', 'user', 'admin', '2023-12-27 15:00:27', '', '', '用户管理菜单'); + +-- ---------------------------- +-- Table structure for sys_user +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user`; +CREATE TABLE `sys_user` ( + `user_id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID', + `dept_id` bigint NULL DEFAULT NULL COMMENT '部门ID', + `user_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户账号', + `nick_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户昵称', + `user_type` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '00' COMMENT '用户类型(00系统用户)', + `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户邮箱', + `phonenumber` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '手机号码', + `sex` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)', + `avatar` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '头像地址', + `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '密码', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '帐号状态(0正常 1停用)', + `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `login_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '最后登录IP', + `login_date` datetime NULL DEFAULT NULL COMMENT '最后登录时间', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`user_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_user +-- ---------------------------- +INSERT INTO `sys_user` VALUES (1, 103, 'admin', '启航oms', '00', '280645618@qq.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', '2024-02-24 20:20:36', 'admin', '2023-08-07 19:31:37', '', '2024-02-24 20:20:36', '管理员'); + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/oms-api/src/main/java/com/qihang/oms/api/controller/MenusController.java b/oms-api/src/main/java/com/qihang/oms/api/controller/MenusController.java index c0d012f8..050b1e8d 100644 --- a/oms-api/src/main/java/com/qihang/oms/api/controller/MenusController.java +++ b/oms-api/src/main/java/com/qihang/oms/api/controller/MenusController.java @@ -3,150 +3,247 @@ package com.qihang.oms.api.controller; import com.alibaba.fastjson2.JSONArray; import com.qihang.oms.api.common.AjaxResult; import com.qihang.oms.api.domain.LoginUser; +import com.qihang.oms.api.domain.SysMenu; import com.qihang.oms.api.domain.vo.MenusDetailVo; import com.qihang.oms.api.domain.vo.MenusVo; +import com.qihang.oms.api.service.ISysMenuService; import com.qihang.oms.api.service.TokenService; import jakarta.servlet.http.HttpServletRequest; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; @RequestMapping("/menus") @RestController public class MenusController { private final TokenService tokenService; + private final ISysMenuService sysMenuService; - public MenusController(TokenService tokenService) { + public MenusController(TokenService tokenService, ISysMenuService sysMenuService) { this.tokenService = tokenService; + this.sysMenuService = sysMenuService; } @GetMapping(value = "/routes") public AjaxResult list(HttpServletRequest request) { LoginUser loginUser = tokenService.getLoginUser(request); + + List sysMenuList = sysMenuService.selectMenuList(loginUser.getUserId()); + + +// Map> treeList = menusVos.stream().collect(Collectors.groupingBy(MenusVo::getParentId)); +// menusVos.forEach(menu -> menu.setChildren(treeList.getOrDefault(menu.getId(), null))); +// List result = menusVos.stream().filter(m -> m.getParentId() == 0).collect(Collectors.toList()); + Map> sysMenuMap = sysMenuList.stream().collect(Collectors.groupingBy(SysMenu::getParentId)); +// menuList.forEach(menu -> menu.setChildren(treeList.getOrDefault(menu.getMenuId(), new ArrayList<>()))); +// List result = menuList.stream().filter(node -> node.getParentId() == 0).collect(Collectors.toList()); + +// MenusDetailVo meta1 = new MenusDetailVo(); +// meta1.setTitle("系统管理"); +// meta1.setIcon("system"); +// meta1.setHidden(false); +// meta1.setRoles(new String[]{"GUEST","ADMIN", "ADMIN6"}); +// +// menuList.forEach(menu -> { +// menu.setChildren(treeList.getOrDefault(menu.getMenuId(), new ArrayList<>())); +// menu.setComponent("/system/user"); +// MenusDetailVo m = new MenusDetailVo(); +// m.setTitle(menu.getMenuName()); +// m.setIcon(menu.getIcon()); +// m.setHidden(false); +// m.setRoles(new String[]{"GUEST","ADMIN", "ADMIN6"}); +// menu.setMeta(m); +// menu.setName(menu.getPath()); +//// menu.setRedirect("/system/user"); +// }); + +// List result = menuList.stream().filter(node -> node.getParentId() == 0).collect(Collectors.toList()); + + List vo = new ArrayList<>(); - MenusVo m1 = new MenusVo(); - m1.setPath("/system"); - m1.setComponent("Layout"); - m1.setRedirect("/system/user"); - m1.setName("/system"); - MenusDetailVo meta1 = new MenusDetailVo(); - meta1.setTitle("系统管理"); - meta1.setIcon("system"); - meta1.setHidden(false); - meta1.setRoles(new String[]{"ADMIN", "ADMIN6"}); - m1.setMeta(meta1); + for (var entry : sysMenuMap.entrySet()) { + Optional first = sysMenuList.stream().filter(x -> Objects.equals(x.getMenuId(), entry.getKey())).findFirst(); +// SysMenu sysMenuStream = first.orElse(null); + if(first.isPresent()) { + MenusVo topMenu = new MenusVo(); + topMenu.setPath(first.get().getPath()); + topMenu.setComponent(first.get().getComponent()); +// topMenu.setRedirect("/system/user"); + topMenu.setName(first.get().getPath()); + MenusDetailVo meta = new MenusDetailVo(); + meta.setTitle(first.get().getMenuName()); + meta.setIcon(first.get().getIcon()); + meta.setHidden(false); + meta.setRoles(new String[]{"ADMIN", "ADMIN6"}); + topMenu.setMeta(meta); + var child = sysMenuMap.getOrDefault(entry.getKey(), null); + if(child!=null){ + List children = new ArrayList<>(); + for(var m : child) { + MenusVo m1ch1 = new MenusVo(); + m1ch1.setPath(m.getPath()); + m1ch1.setComponent(m.getComponent()); +// m1ch1.setName(m.getPath().replace("/","")); + MenusDetailVo meta11 = new MenusDetailVo(); + meta11.setTitle(m.getMenuName()); + meta11.setIcon(m.getIcon()); + meta11.setHidden(false); + meta11.setRoles(new String[]{"ADMIN", "GUEST"}); + m1ch1.setMeta(meta11); + children.add(m1ch1); + } + topMenu.setChildren(children); + } + vo.add(topMenu); +// MenusVo m1 = new MenusVo(); +// m1.setPath("/"+first.get().getPath()); +// m1.setComponent(first.get().getComponent()); +// m1.setRedirect("/system/user"); +// m1.setName("/system"); +// MenusDetailVo meta1 = new MenusDetailVo(); +// meta1.setTitle(first.get().getMenuName()); +// meta1.setIcon(first.get().getIcon()); +// meta1.setHidden(false); +// meta1.setRoles(new String[]{"ADMIN", "ADMIN6"}); +// m1.setMeta(meta1); +// vo.add(m1); + } + System.out.println(entry.getKey() + " : " + entry.getValue()); + } - List m1Ch = new ArrayList<>(); - MenusVo m1ch1 = new MenusVo(); - m1ch1.setPath("/user"); - m1ch1.setComponent("system/user/index"); - m1ch1.setName("User"); - MenusDetailVo meta11 = new MenusDetailVo(); - meta11.setTitle("用户管理"); - meta11.setIcon("user"); - meta11.setHidden(false); - meta11.setRoles(new String[]{"ADMIN", "GUEST"}); -// meta11.setKeepAlive(true); - m1ch1.setMeta(meta11); - m1Ch.add(m1ch1); +// vo = new ArrayList<>(); +// MenusVo m1 = new MenusVo(); +// m1.setPath("/system"); +// m1.setComponent("Layout"); +// m1.setRedirect("/system/user"); +// m1.setName("/system"); +// MenusDetailVo meta1 = new MenusDetailVo(); +// meta1.setTitle("系统管理"); +// meta1.setIcon("system"); +// meta1.setHidden(false); +// meta1.setRoles(new String[]{"ADMIN", "ADMIN6"}); +// m1.setMeta(meta1); +// +// List m1Ch = new ArrayList<>(); +// MenusVo m1ch1 = new MenusVo(); +// m1ch1.setPath("/user"); +// m1ch1.setComponent("system/user/index"); +// m1ch1.setName("User"); +// MenusDetailVo meta11 = new MenusDetailVo(); +// meta11.setTitle("用户管理"); +// meta11.setIcon("user"); +// meta11.setHidden(false); +// meta11.setRoles(new String[]{"ADMIN", "GUEST"}); +//// meta11.setKeepAlive(true); +// m1ch1.setMeta(meta11); +// m1Ch.add(m1ch1); +// m1Ch.add(m1ch1); +// +// +// m1.setChildren(m1Ch); +// vo.add(m1); - m1.setChildren(m1Ch); - vo.add(m1); - JSONArray jsonArray = JSONArray.parseArray("[{\n" + - " \"path\": \"/system\",\n" + - " \"component\": \"Layout\",\n" + - " \"redirect\": \"/system/user\",\n" + - " \"name\": \"/system\",\n" + - " \"meta\": {\n" + - " \"title\": \"系统管理\",\n" + - " \"icon\": \"system\",\n" + - " \"hidden\": false,\n" + - " \"roles\": [\n" + - " \"GUEST\",\n" + - " \"ADMIN\",\n" + - " \"ADMIN6\"\n" + - " ]\n" + - " },\n" + - " \"children\": [\n" + - " {\n" + - " \"path\": \"user\",\n" + - " \"component\": \"system/user/index\",\n" + - " \"name\": \"User\",\n" + - " \"meta\": {\n" + - " \"title\": \"用户管理\",\n" + - " \"icon\": \"user\",\n" + - " \"hidden\": false,\n" + - " \"roles\": [\n" + - " \"ADMIN\",\n" + - " \"GUEST\"\n" + - " ],\n" + - " \"keepAlive\": true\n" + - " }\n" + - " },\n" + - " {\n" + - " \"path\": \"role\",\n" + - " \"component\": \"system/role/index\",\n" + - " \"name\": \"Role\",\n" + - " \"meta\": {\n" + - " \"title\": \"角色管理\",\n" + - " \"icon\": \"role\",\n" + - " \"hidden\": false,\n" + - " \"roles\": [\n" + - " \"ADMIN\",\n" + - " \"ADMIN6\",\n" + - " \"GUEST\"\n" + - " ],\n" + - " \"keepAlive\": true\n" + - " }\n" + - " },\n" + - " {\n" + - " \"path\": \"menu\",\n" + - " \"component\": \"system/menu/index\",\n" + - " \"name\": \"Menu\",\n" + - " \"meta\": {\n" + - " \"title\": \"菜单管理\",\n" + - " \"icon\": \"menu\",\n" + - " \"hidden\": false,\n" + - " \"roles\": [\n" + - " \"ADMIN\"\n" + - " ],\n" + - " \"keepAlive\": true\n" + - " }\n" + - " },\n" + - " {\n" + - " \"path\": \"dept\",\n" + - " \"component\": \"system/dept/index\",\n" + - " \"name\": \"Dept\",\n" + - " \"meta\": {\n" + - " \"title\": \"部门管理\",\n" + - " \"icon\": \"tree\",\n" + - " \"hidden\": false,\n" + - " \"roles\": [\n" + - " \"ADMIN\"\n" + - " ],\n" + - " \"keepAlive\": true\n" + - " }\n" + - " },\n" + - " {\n" + - " \"path\": \"dict\",\n" + - " \"component\": \"system/dict/index\",\n" + - " \"name\": \"Dict\",\n" + - " \"meta\": {\n" + - " \"title\": \"字典管理\",\n" + - " \"icon\": \"dict\",\n" + - " \"hidden\": false,\n" + - " \"roles\": [\n" + - " \"ADMIN\"\n" + - " ],\n" + - " \"keepAlive\": true\n" + - " }\n" + - " }\n" + - " ]\n" + - "}]"); - return AjaxResult.success(jsonArray); + + return AjaxResult.success(JSONArray.from(vo)); +// return AjaxResult.success(JSONArray.from(result)); +// return AjaxResult.success(JSONArray.from(result)); +// JSONArray jsonArray = JSONArray.parseArray("[{\n" + +// " \"path\": \"/system\",\n" + +// " \"component\": \"Layout\",\n" + +// " \"redirect\": \"/system/user\",\n" + +// " \"name\": \"/system\",\n" + +// " \"meta\": {\n" + +// " \"title\": \"系统管理\",\n" + +// " \"icon\": \"system\",\n" + +// " \"hidden\": false,\n" + +// " \"roles\": [\n" + +// " \"GUEST\",\n" + +// " \"ADMIN\",\n" + +// " \"ADMIN6\"\n" + +// " ]\n" + +// " },\n" + +// " \"children\": [\n" + +// " {\n" + +// " \"path\": \"user\",\n" + +// " \"component\": \"system/user/index\",\n" + +// " \"name\": \"User\",\n" + +// " \"meta\": {\n" + +// " \"title\": \"用户管理\",\n" + +// " \"icon\": \"user\",\n" + +// " \"hidden\": false,\n" + +// " \"roles\": [\n" + +// " \"ADMIN\",\n" + +// " \"GUEST\"\n" + +// " ],\n" + +// " \"keepAlive\": true\n" + +// " }\n" + +// " },\n" + +// " {\n" + +// " \"path\": \"role\",\n" + +// " \"component\": \"system/role/index\",\n" + +// " \"name\": \"Role\",\n" + +// " \"meta\": {\n" + +// " \"title\": \"角色管理\",\n" + +// " \"icon\": \"role\",\n" + +// " \"hidden\": false,\n" + +// " \"roles\": [\n" + +// " \"ADMIN\",\n" + +// " \"ADMIN6\",\n" + +// " \"GUEST\"\n" + +// " ],\n" + +// " \"keepAlive\": true\n" + +// " }\n" + +// " },\n" + +// " {\n" + +// " \"path\": \"menu\",\n" + +// " \"component\": \"system/menu/index\",\n" + +// " \"name\": \"Menu\",\n" + +// " \"meta\": {\n" + +// " \"title\": \"菜单管理\",\n" + +// " \"icon\": \"menu\",\n" + +// " \"hidden\": false,\n" + +// " \"roles\": [\n" + +// " \"ADMIN\"\n" + +// " ],\n" + +// " \"keepAlive\": true\n" + +// " }\n" + +// " },\n" + +// " {\n" + +// " \"path\": \"dept\",\n" + +// " \"component\": \"system/dept/index\",\n" + +// " \"name\": \"Dept\",\n" + +// " \"meta\": {\n" + +// " \"title\": \"部门管理\",\n" + +// " \"icon\": \"tree\",\n" + +// " \"hidden\": false,\n" + +// " \"roles\": [\n" + +// " \"ADMIN\"\n" + +// " ],\n" + +// " \"keepAlive\": true\n" + +// " }\n" + +// " },\n" + +// " {\n" + +// " \"path\": \"dict\",\n" + +// " \"component\": \"system/dict/index\",\n" + +// " \"name\": \"Dict\",\n" + +// " \"meta\": {\n" + +// " \"title\": \"字典管理\",\n" + +// " \"icon\": \"dict\",\n" + +// " \"hidden\": false,\n" + +// " \"roles\": [\n" + +// " \"ADMIN\"\n" + +// " ],\n" + +// " \"keepAlive\": true\n" + +// " }\n" + +// " }\n" + +// " ]\n" + +// "}]"); + +// return AjaxResult.success(jsonArray); } } diff --git a/oms-api/src/main/java/com/qihang/oms/api/domain/SysMenu.java b/oms-api/src/main/java/com/qihang/oms/api/domain/SysMenu.java new file mode 100644 index 00000000..a09fc72d --- /dev/null +++ b/oms-api/src/main/java/com/qihang/oms/api/domain/SysMenu.java @@ -0,0 +1,280 @@ +package com.qihang.oms.api.domain; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.qihang.oms.api.domain.vo.MenusDetailVo; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.ArrayList; +import java.util.List; + +/** + * 菜单权限表 sys_menu + * + * @author qihang + */ +public class SysMenu extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 菜单ID */ + private Long menuId; + + /** 菜单名称 */ + @JsonProperty("title") + private String menuName; + + /** 父菜单名称 */ + private String parentName; + + /** 父菜单ID */ + private Long parentId; + + /** 显示顺序 */ + private Integer orderNum; + + /** 路由地址 */ + private String path; + + /** 组件路径 */ + private String component; + + /** 路由参数 */ + private String query; + + /** 是否为外链(0是 1否) */ + private String isFrame; + + /** 是否缓存(0缓存 1不缓存) */ + private String isCache; + + /** 类型(M目录 C菜单 F按钮) */ + private String menuType; + + /** 显示状态(0显示 1隐藏) */ + private String visible; + + /** 菜单状态(0正常 1停用) */ + private String status; + + /** 权限字符串 */ + private String perms; + + /** 菜单图标 */ + private String icon; + private String redirect; + private String name; + + /** 子菜单 */ + private List children = new ArrayList(); + private MenusDetailVo meta; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getRedirect() { + return redirect; + } + + public void setRedirect(String redirect) { + this.redirect = redirect; + } + + public MenusDetailVo getMeta() { + return meta; + } + + public void setMeta(MenusDetailVo meta) { + this.meta = meta; + } + + public Long getMenuId() + { + return menuId; + } + + public void setMenuId(Long menuId) + { + this.menuId = menuId; + } + + public String getMenuName() + { + return menuName; + } + + public void setMenuName(String menuName) + { + this.menuName = menuName; + } + + public String getParentName() + { + return parentName; + } + + public void setParentName(String parentName) + { + this.parentName = parentName; + } + + public Long getParentId() + { + return parentId; + } + + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + public Integer getOrderNum() + { + return orderNum; + } + + public void setOrderNum(Integer orderNum) + { + this.orderNum = orderNum; + } + + public String getPath() + { + return path; + } + + public void setPath(String path) + { + this.path = path; + } + + public String getComponent() + { + return component; + } + + public void setComponent(String component) + { + this.component = component; + } + + public String getQuery() + { + return query; + } + + public void setQuery(String query) + { + this.query = query; + } + + public String getIsFrame() + { + return isFrame; + } + + public void setIsFrame(String isFrame) + { + this.isFrame = isFrame; + } + + public String getIsCache() + { + return isCache; + } + + public void setIsCache(String isCache) + { + this.isCache = isCache; + } + + public String getMenuType() + { + return menuType; + } + + public void setMenuType(String menuType) + { + this.menuType = menuType; + } + + public String getVisible() + { + return visible; + } + + public void setVisible(String visible) + { + this.visible = visible; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getPerms() + { + return perms; + } + + public void setPerms(String perms) + { + this.perms = perms; + } + + public String getIcon() + { + return icon; + } + + public void setIcon(String icon) + { + this.icon = icon; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("menuId", getMenuId()) + .append("menuName", getMenuName()) + .append("parentId", getParentId()) + .append("orderNum", getOrderNum()) + .append("path", getPath()) + .append("component", getComponent()) + .append("isFrame", getIsFrame()) + .append("IsCache", getIsCache()) + .append("menuType", getMenuType()) + .append("visible", getVisible()) + .append("status ", getStatus()) + .append("perms", getPerms()) + .append("icon", getIcon()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/oms-api/src/main/java/com/qihang/oms/api/domain/vo/MenuMetaVo.java b/oms-api/src/main/java/com/qihang/oms/api/domain/vo/MenuMetaVo.java new file mode 100644 index 00000000..6bf6463f --- /dev/null +++ b/oms-api/src/main/java/com/qihang/oms/api/domain/vo/MenuMetaVo.java @@ -0,0 +1,4 @@ +package com.qihang.oms.api.domain.vo; + +public class MenuMetaVo { +} diff --git a/oms-api/src/main/java/com/qihang/oms/api/domain/vo/MenusVo.java b/oms-api/src/main/java/com/qihang/oms/api/domain/vo/MenusVo.java index 05e33ef4..59155b03 100644 --- a/oms-api/src/main/java/com/qihang/oms/api/domain/vo/MenusVo.java +++ b/oms-api/src/main/java/com/qihang/oms/api/domain/vo/MenusVo.java @@ -8,8 +8,26 @@ public class MenusVo { private String redirect; private String name; private MenusDetailVo meta; + private Long parentId; + private Long id; private List children; + public Long getParentId() { + return parentId; + } + + public void setParentId(Long parentId) { + this.parentId = parentId; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + public String getPath() { return path; } diff --git a/oms-api/src/main/java/com/qihang/oms/api/mapper/SysMenuMapper.java b/oms-api/src/main/java/com/qihang/oms/api/mapper/SysMenuMapper.java new file mode 100644 index 00000000..3a1aec52 --- /dev/null +++ b/oms-api/src/main/java/com/qihang/oms/api/mapper/SysMenuMapper.java @@ -0,0 +1,127 @@ +package com.qihang.oms.api.mapper; + + +import com.qihang.oms.api.domain.SysMenu; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 菜单表 数据层 + * + * @author qihang + */ +public interface SysMenuMapper +{ + /** + * 查询系统菜单列表 + * + * @param menu 菜单信息 + * @return 菜单列表 + */ + public List selectMenuList(SysMenu menu); + + /** + * 根据用户所有权限 + * + * @return 权限列表 + */ + public List selectMenuPerms(); + + /** + * 根据用户查询系统菜单列表 + * + * @param menu 菜单信息 + * @return 菜单列表 + */ + public List selectMenuListByUserId(SysMenu menu); + + /** + * 根据角色ID查询权限 + * + * @param roleId 角色ID + * @return 权限列表 + */ + public List selectMenuPermsByRoleId(Long roleId); + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + public List selectMenuPermsByUserId(Long userId); + + /** + * 根据用户ID查询菜单 + * + * @return 菜单列表 + */ + public List selectMenuTreeAll(); + + /** + * 根据用户ID查询菜单 + * + * @param userId 用户ID + * @return 菜单列表 + */ + public List selectMenuTreeByUserId(Long userId); + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * @param menuCheckStrictly 菜单树选择项是否关联显示 + * @return 选中菜单列表 + */ + public List selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly); + + /** + * 根据菜单ID查询信息 + * + * @param menuId 菜单ID + * @return 菜单信息 + */ + public SysMenu selectMenuById(Long menuId); + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * @return 结果 + */ + public int hasChildByMenuId(Long menuId); + + /** + * 新增菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + public int insertMenu(SysMenu menu); + + /** + * 修改菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + public int updateMenu(SysMenu menu); + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * @return 结果 + */ + public int deleteMenuById(Long menuId); + + /** + * 校验菜单名称是否唯一 + * + * @param menuName 菜单名称 + * @param parentId 父菜单ID + * @return 结果 + */ + public SysMenu checkMenuNameUnique(@Param("menuName") String menuName, @Param("parentId") Long parentId); +} diff --git a/oms-api/src/main/java/com/qihang/oms/api/service/ISysMenuService.java b/oms-api/src/main/java/com/qihang/oms/api/service/ISysMenuService.java new file mode 100644 index 00000000..25278ced --- /dev/null +++ b/oms-api/src/main/java/com/qihang/oms/api/service/ISysMenuService.java @@ -0,0 +1,143 @@ +package com.qihang.oms.api.service; + +import com.qihang.oms.api.domain.SysMenu; + +import java.util.List; +import java.util.Set; + +/** + * 菜单 业务层 + * + * @author qihang + */ +public interface ISysMenuService +{ + /** + * 根据用户查询系统菜单列表 + * + * @param userId 用户ID + * @return 菜单列表 + */ + public List selectMenuList(Long userId); + + /** + * 根据用户查询系统菜单列表 + * + * @param menu 菜单信息 + * @param userId 用户ID + * @return 菜单列表 + */ + public List selectMenuList(SysMenu menu, Long userId); + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + public Set selectMenuPermsByUserId(Long userId); + + /** + * 根据角色ID查询权限 + * + * @param roleId 角色ID + * @return 权限列表 + */ + public Set selectMenuPermsByRoleId(Long roleId); + + /** + * 根据用户ID查询菜单树信息 + * + * @param userId 用户ID + * @return 菜单列表 + */ +// public List selectMenuTreeByUserId(Long userId); + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * @return 选中菜单列表 + */ +// public List selectMenuListByRoleId(Long roleId); + + /** + * 构建前端路由所需要的菜单 + * + * @param menus 菜单列表 + * @return 路由列表 + */ +// public List buildMenus(List menus); + + /** + * 构建前端所需要树结构 + * + * @param menus 菜单列表 + * @return 树结构列表 + */ + public List buildMenuTree(List menus); + + /** + * 构建前端所需要下拉树结构 + * + * @param menus 菜单列表 + * @return 下拉树结构列表 + */ +// public List buildMenuTreeSelect(List menus); + + /** + * 根据菜单ID查询信息 + * + * @param menuId 菜单ID + * @return 菜单信息 + */ + public SysMenu selectMenuById(Long menuId); + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * @return 结果 true 存在 false 不存在 + */ + public boolean hasChildByMenuId(Long menuId); + + /** + * 查询菜单是否存在角色 + * + * @param menuId 菜单ID + * @return 结果 true 存在 false 不存在 + */ +// public boolean checkMenuExistRole(Long menuId); + + /** + * 新增保存菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + public int insertMenu(SysMenu menu); + + /** + * 修改保存菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + public int updateMenu(SysMenu menu); + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * @return 结果 + */ + public int deleteMenuById(Long menuId); + + /** + * 校验菜单名称是否唯一 + * + * @param menu 菜单信息 + * @return 结果 + */ + public boolean checkMenuNameUnique(SysMenu menu); +} diff --git a/oms-api/src/main/java/com/qihang/oms/api/service/impl/SysMenuServiceImpl.java b/oms-api/src/main/java/com/qihang/oms/api/service/impl/SysMenuServiceImpl.java new file mode 100644 index 00000000..a0fa151f --- /dev/null +++ b/oms-api/src/main/java/com/qihang/oms/api/service/impl/SysMenuServiceImpl.java @@ -0,0 +1,514 @@ +package com.qihang.oms.api.service.impl; + +import com.qihang.oms.api.common.UserConstants; +import com.qihang.oms.api.constant.Constants; +import com.qihang.oms.api.domain.SysMenu; +import com.qihang.oms.api.domain.SysUser; +import com.qihang.oms.api.mapper.SysMenuMapper; +import com.qihang.oms.api.service.ISysMenuService; +import com.qihang.oms.api.utils.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 菜单 业务层处理 + * + * @author qihang + */ +@Service +public class SysMenuServiceImpl implements ISysMenuService +{ + public static final String PREMISSION_STRING = "perms[\"{0}\"]"; + + @Autowired + private SysMenuMapper menuMapper; + + + /** + * 根据用户查询系统菜单列表 + * + * @param userId 用户ID + * @return 菜单列表 + */ + @Override + public List selectMenuList(Long userId) + { + return selectMenuList(new SysMenu(), userId); + } + + /** + * 查询系统菜单列表 + * + * @param menu 菜单信息 + * @return 菜单列表 + */ + @Override + public List selectMenuList(SysMenu menu, Long userId) + { + List menuList = null; + // 管理员显示所有菜单信息 + if (SysUser.isAdmin(userId)) + { + menuList = menuMapper.selectMenuList(menu); + } + else + { + menu.getParams().put("userId", userId); + menuList = menuMapper.selectMenuListByUserId(menu); + } + return menuList; + } + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + @Override + public Set selectMenuPermsByUserId(Long userId) + { + List perms = menuMapper.selectMenuPermsByUserId(userId); + Set permsSet = new HashSet<>(); + for (String perm : perms) + { + if (StringUtils.isNotEmpty(perm)) + { + permsSet.addAll(Arrays.asList(perm.trim().split(","))); + } + } + return permsSet; + } + + /** + * 根据角色ID查询权限 + * + * @param roleId 角色ID + * @return 权限列表 + */ + @Override + public Set selectMenuPermsByRoleId(Long roleId) + { + List perms = menuMapper.selectMenuPermsByRoleId(roleId); + Set permsSet = new HashSet<>(); + for (String perm : perms) + { + if (StringUtils.isNotEmpty(perm)) + { + permsSet.addAll(Arrays.asList(perm.trim().split(","))); + } + } + return permsSet; + } + + /** + * 根据用户ID查询菜单 + * + * @param userId 用户名称 + * @return 菜单列表 + */ +// @Override +// public List selectMenuTreeByUserId(Long userId) +// { +// List menus = null; +// if (SecurityUtils.isAdmin(userId)) +// { +// menus = menuMapper.selectMenuTreeAll(); +// } +// else +// { +// menus = menuMapper.selectMenuTreeByUserId(userId); +// } +// return getChildPerms(menus, 0); +// } + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * @return 选中菜单列表 + */ +// @Override +// public List selectMenuListByRoleId(Long roleId) +// { +// SysRole role = roleMapper.selectRoleById(roleId); +// return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly()); +// } + + /** + * 构建前端路由所需要的菜单 + * + * @param menus 菜单列表 + * @return 路由列表 + */ +// @Override +// public List buildMenus(List menus) +// { +// List routers = new LinkedList(); +// for (SysMenu menu : menus) +// { +// RouterVo router = new RouterVo(); +// router.setHidden("1".equals(menu.getVisible())); +// router.setName(getRouteName(menu)); +// router.setPath(getRouterPath(menu)); +// router.setComponent(getComponent(menu)); +// router.setQuery(menu.getQuery()); +// router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); +// List cMenus = menu.getChildren(); +// if (StringUtils.isNotEmpty(cMenus) && UserConstants.TYPE_DIR.equals(menu.getMenuType())) +// { +// router.setAlwaysShow(true); +// router.setRedirect("noRedirect"); +// router.setChildren(buildMenus(cMenus)); +// } +// else if (isMenuFrame(menu)) +// { +// router.setMeta(null); +// List childrenList = new ArrayList(); +// RouterVo children = new RouterVo(); +// children.setPath(menu.getPath()); +// children.setComponent(menu.getComponent()); +// children.setName(StringUtils.capitalize(menu.getPath())); +// children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); +// children.setQuery(menu.getQuery()); +// childrenList.add(children); +// router.setChildren(childrenList); +// } +// else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) +// { +// router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); +// router.setPath("/"); +// List childrenList = new ArrayList(); +// RouterVo children = new RouterVo(); +// String routerPath = innerLinkReplaceEach(menu.getPath()); +// children.setPath(routerPath); +// children.setComponent(UserConstants.INNER_LINK); +// children.setName(StringUtils.capitalize(routerPath)); +// children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), menu.getPath())); +// childrenList.add(children); +// router.setChildren(childrenList); +// } +// routers.add(router); +// } +// return routers; +// } + + /** + * 构建前端所需要树结构 + * + * @param menus 菜单列表 + * @return 树结构列表 + */ + @Override + public List buildMenuTree(List menus) + { + List returnList = new ArrayList(); + List tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList()); + for (Iterator iterator = menus.iterator(); iterator.hasNext();) + { + SysMenu menu = (SysMenu) iterator.next(); + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.contains(menu.getParentId())) + { + recursionFn(menus, menu); + returnList.add(menu); + } + } + if (returnList.isEmpty()) + { + returnList = menus; + } + return returnList; + } + + /** + * 构建前端所需要下拉树结构 + * + * @param menus 菜单列表 + * @return 下拉树结构列表 + */ +// @Override +// public List buildMenuTreeSelect(List menus) +// { +// List menuTrees = buildMenuTree(menus); +// return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); +// } + + /** + * 根据菜单ID查询信息 + * + * @param menuId 菜单ID + * @return 菜单信息 + */ + @Override + public SysMenu selectMenuById(Long menuId) + { + return menuMapper.selectMenuById(menuId); + } + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * @return 结果 + */ + @Override + public boolean hasChildByMenuId(Long menuId) + { + int result = menuMapper.hasChildByMenuId(menuId); + return result > 0; + } + + /** + * 查询菜单使用数量 + * + * @param menuId 菜单ID + * @return 结果 + */ +// @Override +// public boolean checkMenuExistRole(Long menuId) +// { +// int result = roleMenuMapper.checkMenuExistRole(menuId); +// return result > 0; +// } + + /** + * 新增保存菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + @Override + public int insertMenu(SysMenu menu) + { + return menuMapper.insertMenu(menu); + } + + /** + * 修改保存菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + @Override + public int updateMenu(SysMenu menu) + { + return menuMapper.updateMenu(menu); + } + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * @return 结果 + */ + @Override + public int deleteMenuById(Long menuId) + { + return menuMapper.deleteMenuById(menuId); + } + + /** + * 校验菜单名称是否唯一 + * + * @param menu 菜单信息 + * @return 结果 + */ + @Override + public boolean checkMenuNameUnique(SysMenu menu) + { + Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId(); + SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId()); + if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 获取路由名称 + * + * @param menu 菜单信息 + * @return 路由名称 + */ + public String getRouteName(SysMenu menu) + { + String routerName = StringUtils.capitalize(menu.getPath()); + // 非外链并且是一级目录(类型为目录) + if (isMenuFrame(menu)) + { + routerName = StringUtils.EMPTY; + } + return routerName; + } + + /** + * 获取路由地址 + * + * @param menu 菜单信息 + * @return 路由地址 + */ + public String getRouterPath(SysMenu menu) + { + String routerPath = menu.getPath(); + // 内链打开外网方式 + if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) + { + routerPath = innerLinkReplaceEach(routerPath); + } + // 非外链并且是一级目录(类型为目录) + if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType()) + && UserConstants.NO_FRAME.equals(menu.getIsFrame())) + { + routerPath = "/" + menu.getPath(); + } + // 非外链并且是一级目录(类型为菜单) + else if (isMenuFrame(menu)) + { + routerPath = "/"; + } + return routerPath; + } + + /** + * 获取组件信息 + * + * @param menu 菜单信息 + * @return 组件信息 + */ + public String getComponent(SysMenu menu) + { + String component = UserConstants.LAYOUT; + if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) + { + component = menu.getComponent(); + } + else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu)) + { + component = UserConstants.INNER_LINK; + } + else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) + { + component = UserConstants.PARENT_VIEW; + } + return component; + } + + /** + * 是否为菜单内部跳转 + * + * @param menu 菜单信息 + * @return 结果 + */ + public boolean isMenuFrame(SysMenu menu) + { + return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType()) + && menu.getIsFrame().equals(UserConstants.NO_FRAME); + } + + /** + * 是否为内链组件 + * + * @param menu 菜单信息 + * @return 结果 + */ + public boolean isInnerLink(SysMenu menu) + { + return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath()); + } + + /** + * 是否为parent_view组件 + * + * @param menu 菜单信息 + * @return 结果 + */ + public boolean isParentView(SysMenu menu) + { + return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()); + } + + /** + * 根据父节点的ID获取所有子节点 + * + * @param list 分类表 + * @param parentId 传入的父节点ID + * @return String + */ + public List getChildPerms(List list, int parentId) + { + List returnList = new ArrayList(); + for (Iterator iterator = list.iterator(); iterator.hasNext();) + { + SysMenu t = (SysMenu) iterator.next(); + // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点 + if (t.getParentId() == parentId) + { + recursionFn(list, t); + returnList.add(t); + } + } + return returnList; + } + + /** + * 递归列表 + * + * @param list 分类表 + * @param t 子节点 + */ + private void recursionFn(List list, SysMenu t) + { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (SysMenu tChild : childList) + { + if (hasChild(list, tChild)) + { + recursionFn(list, tChild); + } + } + } + + /** + * 得到子节点列表 + */ + private List getChildList(List list, SysMenu t) + { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) + { + SysMenu n = (SysMenu) it.next(); + if (n.getParentId().longValue() == t.getMenuId().longValue()) + { + tlist.add(n); + } + } + return tlist; + } + + /** + * 判断是否有子节点 + */ + private boolean hasChild(List list, SysMenu t) + { + return getChildList(list, t).size() > 0; + } + + /** + * 内链域名特殊字符替换 + * + * @return 替换后的内链域名 + */ + public String innerLinkReplaceEach(String path) + { + return StringUtils.replaceEach(path, new String[] { Constants.HTTP, Constants.HTTPS, Constants.WWW, "." }, + new String[] { "", "", "", "/" }); + } +} diff --git a/oms-api/src/main/resources/mapper/system/SysMenuMapper.xml b/oms-api/src/main/resources/mapper/system/SysMenuMapper.xml new file mode 100644 index 00000000..441e7b67 --- /dev/null +++ b/oms-api/src/main/resources/mapper/system/SysMenuMapper.xml @@ -0,0 +1,202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time + from sys_menu + + + + + + + + + + + + + + + + + + + + + + + + + + update sys_menu + + menu_name = #{menuName}, + parent_id = #{parentId}, + order_num = #{orderNum}, + path = #{path}, + component = #{component}, + `query` = #{query}, + is_frame = #{isFrame}, + is_cache = #{isCache}, + menu_type = #{menuType}, + visible = #{visible}, + status = #{status}, + perms = #{perms}, + icon = #{icon}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = current_timestamp() + + where menu_id = #{menuId} + + + + insert into sys_menu( + menu_id, + parent_id, + menu_name, + order_num, + path, + component, + `query`, + is_frame, + is_cache, + menu_type, + visible, + status, + perms, + icon, + remark, + create_by, + create_time + )values( + #{menuId}, + #{parentId}, + #{menuName}, + #{orderNum}, + #{path}, + #{component}, + #{query}, + #{isFrame}, + #{isCache}, + #{menuType}, + #{visible}, + #{status}, + #{perms}, + #{icon}, + #{remark}, + #{createBy}, + current_timestamp() + ) + + + + delete from sys_menu where menu_id = #{menuId} + + + \ No newline at end of file diff --git a/vue3/src/lang/package/zh-cn.ts b/vue3/src/lang/package/zh-cn.ts index ed901433..c9e29d76 100644 --- a/vue3/src/lang/package/zh-cn.ts +++ b/vue3/src/lang/package/zh-cn.ts @@ -16,6 +16,5 @@ export default { dashboard: "首页", logout: "注销", document: "项目文档", - gitee: "码云", }, }; diff --git a/vue3/src/layout/components/NavBar/NavRight.vue b/vue3/src/layout/components/NavBar/NavRight.vue index fa42222b..4a5a2f9c 100644 --- a/vue3/src/layout/components/NavBar/NavRight.vue +++ b/vue3/src/layout/components/NavBar/NavRight.vue @@ -22,18 +22,6 @@ {{ $t("navbar.dashboard") }} - - Github - - - {{ $t("navbar.gitee") }} - - - {{ $t("navbar.document") }} - {{ $t("navbar.logout") }} diff --git a/vue3/src/layout/components/Sidebar/SidebarItem.vue b/vue3/src/layout/components/Sidebar/SidebarItem.vue index fefbae68..cf2e7658 100644 --- a/vue3/src/layout/components/Sidebar/SidebarItem.vue +++ b/vue3/src/layout/components/Sidebar/SidebarItem.vue @@ -114,7 +114,7 @@ function resolvePath(routePath: string) {