新增菜单显示功能

This commit is contained in:
RuoYi 2018-02-22 21:46:13 +08:00
parent 8b1cdf496c
commit e23b549197
18 changed files with 1057 additions and 241 deletions

275
new_intall_20180222.sql Normal file
View File

@ -0,0 +1,275 @@
-- ----------------------------
-- 1、创建部门表
-- ----------------------------
drop table if exists sys_dept;
create table sys_dept (
dept_id int(11) not null auto_increment comment '部门ID',
parent_id int(11) default 0 comment '父部门ID',
dept_name varchar(30) default '' comment '部门名称',
order_num int(4) default null comment '显示顺序',
status int(1) default 0 comment '部门状态:0正常,1停用',
primary key (dept_id)
) engine=innodb auto_increment=100 default charset=utf8;
-- ----------------------------
-- 初始化-部门表数据
-- ----------------------------
insert into sys_dept values('1', '0', '研发部', '1', '0');
insert into sys_dept values('2', '0', '测试部', '2', '0');
insert into sys_dept values('3', '0', '市场部', '3', '0');
insert into sys_dept values('4', '1', '研发一部', '1', '0');
insert into sys_dept values('5', '1', '研发二部', '2', '0');
insert into sys_dept values('6', '1', '研发三部', '3', '0');
insert into sys_dept values('7', '2', '测试一部', '1', '0');
insert into sys_dept values('8', '2', '测试二部', '2', '0');
insert into sys_dept values('9', '3', '市场一部', '1', '0');
insert into sys_dept values('10', '3', '市场二部', '2', '0');
-- ----------------------------
-- 2、创建用户信息表
-- ----------------------------
drop table if exists sys_user;
create table sys_user (
user_id int(11) not null auto_increment comment '用户ID',
dept_id int(20) default null comment '部门ID',
login_name varchar(30) not null comment '登录名',
user_name varchar(30) default '' comment '用户名称',
email varchar(100) default '' comment '用户邮箱',
phonenumber varchar(20) default '' comment '手机号码',
password varchar(100) not null comment '密码',
salt varchar(100) default '' comment '盐加密',
status int(1) default 0 comment '帐号状态:0正常,1锁定,2黑名单,3禁止',
refuse_des varchar(500) default '' comment '拒绝登录描述',
create_time varchar(30) default null comment '创建时间',
primary key (user_id)
) engine=innodb auto_increment=100 default charset=utf8;
-- ----------------------------
-- 初始化-用户信息表数据
-- ----------------------------
insert into sys_user values('1', '1', 'admin', '阳宗专', 'yzz_ivy@163.com', '1517911213', '172eee54aa664e9dd0536b063796e54e', '', 0, '维护中', '2018-01-01');
insert into sys_user values('2', '1', 'eptok', '银盛通信', 'ys@eptok.com', '15220051213', '172eee54aa664e9dd0536b063796e54e', '', 3, '黑名单', '2018-01-01');
-- ----------------------------
-- 3、创建角色信息表
-- ----------------------------
drop table if exists sys_role;
create table sys_role (
role_id int(10) not null auto_increment comment '角色ID',
role_name varchar(30) not null comment '角色名',
status int(1) default 0 comment '角色状态:0正常,1禁用',
create_time varchar(30) default null comment '创建时间',
update_time varchar(30) default null comment '更新时间',
update_by varchar(30) default null comment '更新者',
remark varchar(500) default '' comment '备注',
primary key (role_id)
) engine=innodb auto_increment=100 default charset=utf8;
-- ----------------------------
-- 初始化-角色信息表数据
-- ----------------------------
insert into sys_role values('1', '管理员', 0, '2018-01-01', '', 'system', '管理员');
insert into sys_role values('2', '普通角色', 0, '2018-01-01', '', 'system', '普通角色');
-- ----------------------------
-- 4、创建菜单权限表
-- ----------------------------
drop table if exists sys_menu;
create table sys_menu (
menu_id int(11) not null auto_increment comment '菜单ID',
menu_name varchar(50) not null comment '菜单名称',
parent_id int(11) default 0 comment '父菜单ID',
order_num int(4) default null comment '显示顺序',
url varchar(200) default '' comment '菜单URL',
menu_type char(1) default '' comment '类型:M目录,C菜单,F按钮',
visible int(1) default 0 comment '菜单状态:0显示,1隐藏',
perms varchar(100) default '' comment '权限字符串',
icon varchar(100) default '' comment '菜单图标',
create_time varchar(30) default null comment '创建时间',
update_time varchar(30) default null comment '更新时间',
update_by varchar(30) default null comment '更新者',
remark varchar(500) default '' comment '备注',
primary key (menu_id)
) engine=innodb auto_increment=1000 default charset=utf8;
-- ----------------------------
-- 初始化-菜单信息表数据
-- ----------------------------
-- 一级菜单
insert into sys_menu values('1', '系统管理', '0', '1', '#', 'M', '0', 'system', 'fa fa-gear', '2018-01-01', '', 'system', '系统管理目录');
insert into sys_menu values('2', '系统监控', '0', '2', '#', 'M', '0', 'monitor', 'fa fa-video-camera', '2018-01-01', '', 'system', '系统监控目录');
-- 二级菜单
insert into sys_menu values('3', '用户管理', '1', '1', '/system/userView.action', 'C', '0', 'system:user', '#', '2018-01-01', '', 'system', '用户管理菜单');
insert into sys_menu values('4', '角色管理', '1', '2', '/system/roleView.action', 'C', '0', 'system:role', '#', '2018-01-01', '', 'system', '角色管理菜单');
insert into sys_menu values('5', '菜单管理', '1', '3', '/system/menuView.action', 'C', '0', 'system:menu', '#', '2018-01-01', '', 'system', '菜单管理菜单');
insert into sys_menu values('6', '操作日志', '1', '4', '/system/operlogView.action', 'C', '0', 'system:operlog', '#', '2018-01-01', '', 'system', '操作日志菜单');
insert into sys_menu values('7', '登录日志', '1', '5', '/system/userlogView.action', 'C', '0', 'system:userlog', '#', '2018-01-01', '', 'system', '登录日志菜单');
insert into sys_menu values('8', '数据监控', '2', '1', '/monitor/druid/index.html', 'C', '0', 'monitor:druid', '#', '2018-01-01', '', 'system', '数据监控菜单');
--- 三级用户按钮
insert into sys_menu values('9', '用户新增', '3', '1', '/system/user/add.action', 'F', '0', 'sys:user:add', '#', '2018-01-01', '', 'system', '用户管理新增按钮');
insert into sys_menu values('10', '用户修改', '3', '2', '/system/user/update.action', 'F', '0', 'sys:user:update', '#', '2018-01-01', '', 'system', '用户管理修改按钮');
insert into sys_menu values('11', '用户删除', '3', '3', '/system/user/delete.action', 'F', '0', 'sys:user:delete', '#', '2018-01-01', '', 'system', '用户管理删除按钮');
insert into sys_menu values('12', '用户查询', '3', '4', '/system/user/select.action', 'F', '0', 'sys:user:select', '#', '2018-01-01', '', 'system', '用户管理查询按钮');
insert into sys_menu values('13', '密码修改', '3', '5', '/system/user/pwdUpdate.action', 'F', '0', 'sys:user:pwdUpdate', '#', '2018-01-01', '', 'system', '用户密码修改按钮');
--- 三级角色按钮
insert into sys_menu values('14', '角色新增', '4', '1', '/system/role/add.action', 'F', '0', 'sys:role:add', '#', '2018-01-01', '', 'system', '角色管理新增按钮');
insert into sys_menu values('15', '角色修改', '4', '2', '/system/role/update.action', 'F', '0', 'sys:role:update', '#', '2018-01-01', '', 'system', '角色管理修改按钮');
insert into sys_menu values('16', '角色删除', '4', '3', '/system/role/delete.action', 'F', '0', 'sys:role:delete', '#', '2018-01-01', '', 'system', '角色管理删除按钮');
insert into sys_menu values('17', '角色查询', '4', '4', '/system/role/select.action', 'F', '0', 'sys:role:select', '#', '2018-01-01', '', 'system', '角色管理查询按钮');
insert into sys_menu values('18', '角色授权', '4', '5', '/system/role/auth.action', 'F', '0', 'sys:role:auth', '#', '2018-01-01', '', 'system', '角色管理授权按钮');
--- 三级菜单按钮
insert into sys_menu values('19', '菜单新增', '5', '1', '/system/role/add.action', 'F', '0', 'sys:menu:add', '#', '2018-01-01', '', 'system', '菜单管理新增按钮');
insert into sys_menu values('20', '菜单修改', '5', '2', '/system/role/update.action', 'F', '0', 'sys:menu:update', '#', '2018-01-01', '', 'system', '菜单管理修改按钮');
insert into sys_menu values('21', '菜单删除', '5', '3', '/system/role/delete.action', 'F', '0', 'sys:menu:delete', '#', '2018-01-01', '', 'system', '菜单管理删除按钮');
insert into sys_menu values('22', '菜单查询', '5', '4', '/system/role/select.action', 'F', '0', 'sys:menu:select', '#', '2018-01-01', '', 'system', '菜单管理查询按钮');
--- 三级日志按钮
insert into sys_menu values('23', '操作日志查询', '4', '5', '/system/operlog/auth.action', 'F', '0', 'sys:operlog:select', '#', '2018-01-01', '', 'system', '操作日志查询按钮');
insert into sys_menu values('24', '登录日志查询', '4', '5', '/system/userlog/auth.action', 'F', '0', 'sys:userlog:select', '#', '2018-01-01', '', 'system', '登录日志查询按钮');
-- ----------------------------
-- 5、创建用户和角色关联表 用户N-1角色
-- ----------------------------
drop table if exists sys_user_role;
create table sys_user_role (
user_id int(11) not null comment '用户ID',
role_id int(11) not null comment '角色ID',
primary key(user_id, role_id)
) engine=innodb default charset=utf8;
-- ----------------------------
-- 初始化-用户和角色关联表数据
-- ----------------------------
insert into sys_user_role values ('1', '1');
insert into sys_user_role values ('2', '2');
-- ----------------------------
-- 6、创建角色和菜单关联表 角色1-N菜单
-- ----------------------------
drop table if exists sys_role_menu;
create table sys_role_menu (
role_id int(11) not null comment '角色ID',
menu_id int(11) not null comment '菜单ID',
primary key(role_id, menu_id)
) engine=innodb default charset=utf8;
-- ----------------------------
-- 初始化-角色和菜单关联表数据
-- ----------------------------
insert into sys_role_menu values ('1', '1');
insert into sys_role_menu values ('1', '2');
insert into sys_role_menu values ('1', '3');
insert into sys_role_menu values ('1', '4');
insert into sys_role_menu values ('1', '5');
insert into sys_role_menu values ('1', '6');
insert into sys_role_menu values ('1', '7');
insert into sys_role_menu values ('1', '8');
-- ----------------------------
-- 7、创建操作日志管理表
-- ----------------------------
drop table if exists oper_log;
create table oper_log (
operid int(11) not null auto_increment comment '日志主键',
opername varchar(50) default '' comment '操作员名称',
opertime varchar(30) default null comment '操作时间',
opertype varchar(50) default '' comment '操作类型',
opertparam varchar(255) default '' comment '操作参数',
opertip varchar(30) default '' comment '执行地址',
operturl varchar(255) default '' comment '请求URL',
status varchar(3) default '' comment '状态0正常 1错误',
message varchar(255) default '' comment '错误消息',
primary key (operid)
) engine=innodb auto_increment=100 default charset=utf8;
insert into oper_log values(1, 'admin', '2018-01-01', '系统管理-启用/停用-用户', 'delete.do?id=1', '127.0.0.1', 'system/changeUserStatus.action', '0', '');
-- ----------------------------
-- 8、创建数据字典表
-- ----------------------------
drop table if exists sys_code;
create table sys_code (
codekey varchar(50) not null comment '标识',
codeid varchar(50) not null comment '',
codevalue varchar(50) not null comment '',
codedesc varchar(50) default '' comment '描述',
codestyle varchar(255) default '' comment '样式',
codeorder varchar(2) default '' comment '排序',
primary key (codeid, codekey)
) engine=innodb default charset=utf8;
-- ----------------------------
-- 初始化用户状态选项列表
-- ----------------------------
insert into sys_code values('system-user-status', '0', '正常', '', '', '1');
insert into sys_code values('system-user-status', '1', '锁定', '', '', '2');
insert into sys_code values('system-user-status', '2', '黑名单', '', '', '3');
insert into sys_code values('system-user-status', '3', '禁止', '', '', '4');
-- ----------------------------
-- 初始化菜单选项列表
-- ----------------------------
insert into sys_code values('system-menu-status', '0', '显示', '', '', '1');
insert into sys_code values('system-menu-status', '1', '隐藏', '', '', '2');
-- ----------------------------
-- 初始化登录日志状态选项列表
-- ----------------------------
insert into sys_code values('system-operlog-status', '0', '成功', '', '', '1');
insert into sys_code values('system-operlog-status', '1', '失败', '', '', '2');
-- ----------------------------
-- 9、系统访问日志情况信息
-- ----------------------------
drop table if exists sys_logininfor;
create table sys_logininfor (
info_id int(11) not null auto_increment comment '在线登录ID',
opername varchar(50) default '' comment '用户账号',
status int(1) default 0 comment '登录状态 0成功 1失败',
ipaddr varchar(50) default '' comment '登录IP地址',
browser varchar(50) default '' comment '浏览器类型',
os varchar(50) default '' comment '操作系统',
msg varchar(255) default '' comment '提示消息',
logondate varchar(30) default null comment '访问时间',
primary key (info_id)
) engine=innodb auto_increment=100 default charset=utf8;
insert into sys_logininfor values(1, 'admin', 0 , '127.0.0.1', 'Chrome 45', 'Windows 7', '登录成功' ,'2018-01-01');
-- 用户部门表
SELECT * FROM sys_dept;
-- 用户信息表
SELECT * FROM sys_user;
-- 角色信息表
SELECT * FROM sys_role;
-- 菜单信息表
SELECT * FROM sys_menu;
-- 创建用户和角色关联表 用户N-1角色
SELECT * FROM sys_user_role;
-- 创建角色和菜单关联表 角色1-N菜单
SELECT * FROM sys_role_menu;
-- 创建操作日志管理表
SELECT * FROM oper_log;
-- 创建数据字典表
SELECT * FROM sys_code;
-- 系统访问日志情况信息
SELECT * FROM sys_logininfor;

View File

@ -12,8 +12,6 @@ public class RuoYiApplication
public static void main(String[] args)
{
// http://localhost/system/user/getUserlist.action
// http://localhost/system/user/login
SpringApplication.run(RuoYiApplication.class, args);
}

View File

@ -15,7 +15,7 @@ public class BaseController
return ShiroUtils.getUser();
}
public Integer getUserId()
public Long getUserId()
{
return getUser().getUserId();
}

View File

@ -0,0 +1,22 @@
package com.ruoyi.project.system.menu.dao;
import java.util.List;
import com.ruoyi.project.system.menu.domain.Menu;
/**
* 角色表 数据层
*
* @author yangzz
*/
public interface IMenuDao
{
/**
* 根据用户ID查询权限表
*
* @param userId 用户ID
* @return 菜单列表
*/
public List<Menu> findMenusByUserId(Long userId);
}

View File

@ -0,0 +1,38 @@
package com.ruoyi.project.system.menu.dao;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.ruoyi.framework.core.dao.DynamicObjectBaseDao;
import com.ruoyi.project.system.menu.domain.Menu;
/**
* 用户 数据层处理
*
* @author yangzz
*/
@Repository("menuDao")
public class MenuDao extends DynamicObjectBaseDao implements IMenuDao
{
/**
* 根据用户ID查询权限表
*
* @param userId 用户ID
* @return 菜单列表
*/
@SuppressWarnings("unchecked")
public List<Menu> findMenusByUserId(Long userId)
{
List<Menu> permsList = null;
try
{
permsList = (List<Menu>) this.findForList("SystemMenuMapper.findMenusByUserId", userId);
}
catch (Exception e)
{
e.printStackTrace();
}
return permsList;
}
}

View File

@ -0,0 +1,202 @@
package com.ruoyi.project.system.menu.domain;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* 角色对象 sys_menu
*
* @author yangzz
*/
public class Menu implements Serializable
{
private static final long serialVersionUID = 1L;
// 菜单ID
private Integer menuId;
// 菜单名称
private String menuName;
// 父菜单ID
private Integer parentId;
// 显示顺序
private String orderNum;
// 菜单URL
private String url;
// 类型:0目录,1菜单,2按钮
private String menuType;
// 菜单状态:0显示,1隐藏
private String visible;
// 权限字符串
private String perms;
// 菜单图标
private String icon;
// 创建时间
private String createTime;
// 更新时间
private String updateTime;
// 更新者
private String updateBy;
// 备注
private String remark;
// 子菜单
private List<Menu> children = new ArrayList<Menu>();
public Integer getMenuId()
{
return menuId;
}
public void setMenuId(Integer menuId)
{
this.menuId = menuId;
}
public String getMenuName()
{
return menuName;
}
public void setMenuName(String menuName)
{
this.menuName = menuName;
}
public Integer getParentId()
{
return parentId;
}
public void setParentId(Integer parentId)
{
this.parentId = parentId;
}
public String getOrderNum()
{
return orderNum;
}
public void setOrderNum(String orderNum)
{
this.orderNum = orderNum;
}
public String getUrl()
{
return url;
}
public void setUrl(String url)
{
this.url = url;
}
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 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 String getCreateTime()
{
return createTime;
}
public void setCreateTime(String createTime)
{
this.createTime = createTime;
}
public String getUpdateTime()
{
return updateTime;
}
public void setUpdateTime(String updateTime)
{
this.updateTime = updateTime;
}
public String getUpdateBy()
{
return updateBy;
}
public void setUpdateBy(String updateBy)
{
this.updateBy = updateBy;
}
public String getRemark()
{
return remark;
}
public void setRemark(String remark)
{
this.remark = remark;
}
public List<Menu> getChildren()
{
return children;
}
public void setChildren(List<Menu> children)
{
this.children = children;
}
@Override
public String toString() {
return "Menu{" +
"menuId=" + menuId +
", menuName=" + menuName +
", parentId='" + parentId + '\'' +
", orderNum='" + orderNum + '\'' +
", url='" + url + '\'' +
", menuType=" + menuType +
", visible='" + visible + '\'' +
", perms=" + perms +
", icon=" + icon +
", createTime=" + createTime +
", updateTime=" + updateTime +
", updateBy=" + updateBy +
", remark=" + remark +
'}';
}
}

View File

@ -0,0 +1,22 @@
package com.ruoyi.project.system.menu.service;
import java.util.List;
import com.ruoyi.project.system.menu.domain.Menu;
/**
* 菜单 业务层
*
* @author yangzz
*/
public interface IMenuService
{
/**
* 根据用户ID查询权限表
*
* @param userId 用户ID
* @return 菜单列表
*/
public List<Menu> findMenusByUserId(Long userId);
}

View File

@ -0,0 +1,36 @@
package com.ruoyi.project.system.menu.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.project.system.menu.dao.IMenuDao;
import com.ruoyi.project.system.menu.domain.Menu;
import com.ruoyi.project.util.TreeUtil;
/**
* 用户 业务层处理
*
* @author yangzz
*/
@Service("menuService")
public class MenuService implements IMenuService
{
@Autowired
private IMenuDao menuDao;
/**
* 根据用户ID查询权限表
*
* @param userId 用户ID
* @return 菜单列表
*/
public List<Menu> findMenusByUserId(Long userId)
{
List<Menu> menus = menuDao.findMenusByUserId(userId);
return TreeUtil.getChildPerms(menus, 0);
}
}

View File

@ -1,10 +1,15 @@
package com.ruoyi.project.system.user.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.framework.core.controller.BaseController;
import com.ruoyi.project.system.menu.domain.Menu;
import com.ruoyi.project.system.menu.service.IMenuService;
import com.ruoyi.project.system.user.domain.User;
import com.ruoyi.project.system.user.service.IUserService;
@ -20,19 +25,19 @@ public class IndexController extends BaseController
@Autowired
private IUserService userService;
@Autowired
private IMenuService menuService;
// 系统首页
@RequestMapping("/index")
public String index(Model model) throws Exception
{
// 取身份信息
User user = getUser();
// 根据用户id取出菜单
//List<Permission> permissions = userService.findPermsListByUserId(currentUser.getUserName());
// 通过model传到页面
//session.setAttribute("permissions", TreeUtil.getChildPerms(permissions, 0));
model.addAttribute("username", user.getUserName());
List<Menu> menus = menuService.findMenusByUserId(user.getUserId());
model.addAttribute("menus", menus);
model.addAttribute("user", user);
return "index";
}
@ -40,14 +45,6 @@ public class IndexController extends BaseController
@RequestMapping("/main")
public String main() throws Exception
{
// 取身份信息
User currentUser = getUser();
// 根据用户id取出菜单
//List<Permission> permissions = userService.findPermsListByUserId(currentUser.getUserName());
// 通过model传到页面
//session.setAttribute("permissions", TreeUtil.getChildPerms(permissions, 0));
return "main";
}

View File

@ -7,9 +7,7 @@ import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.tools.StringTools;
import com.ruoyi.common.utils.security.ShiroUtils;
import com.ruoyi.framework.core.controller.BaseController;

View File

@ -11,9 +11,9 @@ public class User implements Serializable
{
private static final long serialVersionUID = 1L;
// 用户ID
private Integer userId;
private Long userId;
// 部门ID
private Integer deptId;
private Long deptId;
// 登录名
private String loginName;
// 用户名称
@ -39,7 +39,7 @@ public class User implements Serializable
{
}
public User(Integer userId, String loginName, String password)
public User(Long userId, String loginName, String password)
{
super();
this.userId = userId;
@ -47,22 +47,22 @@ public class User implements Serializable
this.password = password;
}
public Integer getUserId()
public Long getUserId()
{
return userId;
}
public void setUserId(Integer userId)
public void setUserId(Long userId)
{
this.userId = userId;
}
public Integer getDeptId()
public Long getDeptId()
{
return deptId;
}
public void setDeptId(Integer deptId)
public void setDeptId(Long deptId)
{
this.deptId = deptId;
}
@ -168,12 +168,20 @@ public class User implements Serializable
}
@Override
public String toString()
{
return "{\"userId\":\"" + userId + "\",\"deptId\":\"" + deptId + "\",\"loginName\":\"" + loginName
+ "\",\"userName\":\"" + userName + "\",\"email\":\"" + email + "\",\"phonenumber\":\"" + phonenumber
+ "\",\"password\":\"" + password + "\",\"salt\":\"" + salt + "\",\"status\":\"" + status
+ "\",\"refuseDes\":\"" + refuseDes + "\",\"createTime\":\"" + createTime + "\",\"roleName\":\""
+ roleName + "\"} ";
public String toString() {
return "User{" +
"userId=" + userId +
", deptId=" + deptId +
", loginName='" + loginName + '\'' +
", userName='" + userName + '\'' +
", email='" + email + '\'' +
", phonenumber=" + phonenumber +
", password='" + password + '\'' +
", salt=" + salt +
", status=" + status +
", refuseDes=" + refuseDes +
", createTime=" + createTime +
", roleName=" + roleName +
'}';
}
}

View File

@ -0,0 +1,185 @@
package com.ruoyi.project.util;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.ruoyi.project.system.menu.domain.Menu;
/**
* 权限数据处理
*
* @author y
*/
public class TreeUtil
{
/**
* 根据父节点的ID获取所有子节点
*
* @param list 分类表
* @param typeId 传入的父节点ID
* @return String
*/
public static List<Menu> getChildPerms(List<Menu> list, int praentId)
{
List<Menu> returnList = new ArrayList<Menu>();
for (Iterator<Menu> iterator = list.iterator(); iterator.hasNext();)
{
Menu t = (Menu) iterator.next();
// 根据传入的某个父节点ID,遍历该父节点的所有子节点
if (t.getParentId() == praentId)
{
recursionFn(list, t);
returnList.add(t);
}
}
return returnList;
}
/**
* 递归列表
*
* @param list
* @param Menu
*/
private static void recursionFn(List<Menu> list, Menu t)
{
List<Menu> childList = getChildList(list, t);// 得到子节点列表
t.setChildren(childList);
for (Menu tChild : childList)
{
if (hasChild(list, tChild))
{
// 判断是否有子节点
Iterator<Menu> it = childList.iterator();
while (it.hasNext())
{
Menu n = (Menu) it.next();
recursionFn(list, n);
}
}
}
}
// 得到子节点列表
private static List<Menu> getChildList(List<Menu> list, Menu t)
{
List<Menu> tlist = new ArrayList<Menu>();
Iterator<Menu> it = list.iterator();
while (it.hasNext())
{
Menu n = (Menu) it.next();
if (n.getParentId().intValue() == t.getMenuId().intValue())
{
tlist.add(n);
}
}
return tlist;
}
List<Menu> returnList = new ArrayList<Menu>();
/**
* 根据父节点的ID获取所有子节点
*
* @param list 分类表
* @param typeId 传入的父节点ID
* @param prefix 子节点前缀
*/
public List<Menu> getChildPerms(List<Menu> list, int typeId, String prefix)
{
if (list == null)
return null;
for (Iterator<Menu> iterator = list.iterator(); iterator.hasNext();)
{
Menu node = (Menu) iterator.next();
// 根据传入的某个父节点ID,遍历该父节点的所有子节点
if (node.getParentId() == typeId)
{
recursionFn(list, node, prefix);
}
// 遍历所有的父节点下的所有子节点
/*
* if (node.getParentId()==0) { recursionFn(list, node); }
*/
}
return returnList;
}
private void recursionFn(List<Menu> list, Menu node, String p)
{
List<Menu> childList = getChildList(list, node);// 得到子节点列表
if (hasChild(list, node))
{// 判断是否有子节点
returnList.add(node);
Iterator<Menu> it = childList.iterator();
while (it.hasNext())
{
Menu n = (Menu) it.next();
n.setMenuName(p + n.getMenuName());
recursionFn(list, n, p + p);
}
}
else
{
returnList.add(node);
}
}
// 判断是否有子节点
private static boolean hasChild(List<Menu> list, Menu t)
{
return getChildList(list, t).size() > 0 ? true : false;
}
// 本地模拟数据测试
public static void main(String[] args)
{
long start = System.currentTimeMillis();
List<Menu> permList = new ArrayList<Menu>();
Menu perm1 = new Menu();
perm1.setMenuId(100);
perm1.setMenuName("系统管理");
perm1.setParentId(0);
Menu perm2 = new Menu();
perm2.setMenuId(101);
perm2.setMenuName("用户管理");
perm2.setParentId(100);
Menu perm3 = new Menu();
perm3.setMenuId(102);
perm3.setMenuName("角色管理");
perm3.setParentId(100);
Menu perm4 = new Menu();
perm4.setMenuId(103);
perm4.setMenuName("菜单管理");
perm4.setParentId(100);
Menu perm5 = new Menu();
perm5.setMenuId(103);
perm5.setMenuName("日志管理");
perm5.setParentId(100);
permList.add(perm1);
permList.add(perm2);
permList.add(perm3);
permList.add(perm4);
permList.add(perm5);
List<Menu> ns = TreeUtil.getChildPerms(permList, 0);
for (Menu m : ns)
{
System.out.println(m.getMenuName());
System.out.println(m.getChildren());
}
long end = System.currentTimeMillis();
System.out.println("用时:" + (end - start) + "ms");
}
}

View File

@ -7,7 +7,8 @@ spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://10.213.24.45:3306/ry?useUnicode=true&characterEncoding=utf8
#url: jdbc:mysql://10.213.24.45:3306/ry?useUnicode=true&characterEncoding=utf8
url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8
username: root
password: password
initialSize: 1

View File

@ -4,8 +4,16 @@ PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="cacheEnabled" value="true" /><!-- 全局映射器启用缓存 -->
<setting name="useGeneratedKeys" value="true" />
<setting name="defaultExecutorType" value="REUSE" />
<setting name="logImpl" value="SLF4J"/>
</settings>
<typeAliases>
<typeAlias type="com.ruoyi.project.system.user.domain.User" alias="User"/>
<typeAlias type="com.ruoyi.project.system.menu.domain.Menu" alias="Menu"/>
</typeAliases>
</configuration>

View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="SystemMenuMapper">
<resultMap type="Menu" id="MenuResult">
<result property="menuId" column="menu_id" />
<result property="menuName" column="menu_name" />
<result property="parentId" column="parent_id" />
<result property="orderNum" column="order_num" />
<result property="url" column="url" />
<result property="menuType" column="menu_type" />
<result property="visible" column="visible" />
<result property="perms" column="perms" />
<result property="icon" column="icon" />
<result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" />
<result property="updateBy" column="update_by" />
<result property="remark" column="remark" />
</resultMap>
<select id="findMenusByUserId" parameterType="Long" resultMap="MenuResult">
select distinct m.menu_id, m.parent_id, m.menu_name, m.url, m.perms , m.menu_type, m.icon, m.order_num, m.create_time, m.update_time
from sys_menu m
left join sys_role_menu rm on m.menu_id = rm.menu_id
left join sys_user_role ur on rm.role_id = ur.role_id
where ur.user_id = #{userId} and m.menu_type in ('M', 'C')
order by m.order_num
</select>
</mapper>

View File

@ -32,33 +32,27 @@
<span><img src="img/profile_small.jpg" alt="image" class="img-circle" height="60" width="60"/></span>
<a data-toggle="dropdown" class="dropdown-toggle" href="#">
<span class="clear">
<span class="block m-t-xs"><strong class="font-bold" th:text="${username}">Beaut-Ruoyi</strong></span>
<span class="block m-t-xs"><strong class="font-bold" th:text="${user.userName}">Beaut-XX</strong></span>
<span class="text-muted text-xs block">超级管理员</b></span>
</span>
</a>
</div>
</li>
<li>
<a href="#">
<i class="fa fa-home"></i>
<span class="nav-label">主页</span>
<span class="fa arrow"></span>
</a>
<li class="active">
<a href="index.html"><i class="fa fa-home"></i> <span class="nav-label">主页</span> <span class="fa arrow"></span></a>
<ul class="nav nav-second-level">
<li>
<a id="index001" class="J_menuItem" href="main.html" data-index="0" th:href="@{/main}">了解若依</a>
</li>
<li class="active"><a class="J_menuItem" href="main.html" th:href="@{/main}">了解若依</a></li>
</ul>
</li>
<li th:each="menu : ${menus}">
<a href="#">
<i class="fa fa fa-bar-chart-o" th:class="${menu.attributes.icon}"></i>
<span class="nav-label" th:text="${menu.text}">一级菜单</span>
<i class="fa fa fa-bar-chart-o" th:class="${menu.icon}"></i>
<span class="nav-label" th:text="${menu.menuName}">一级菜单</span>
<span class="fa arrow"></span>
</a>
<ul class="nav nav-second-level">
<ul class="nav nav-second-level collapse">
<li th:each="cmenu : ${menu.children}">
<a class="J_menuItem" href="graph_echarts.html" th:text="${cmenu.text}" th:href="${cmenu.attributes.url}">二级菜单</a>
<a class="J_menuItem" th:text="${cmenu.menuName}" th:href="${cmenu.url}">二级菜单</a>
</li>
</ul>
</li>