新增菜单显示功能
This commit is contained in:
parent
8b1cdf496c
commit
e23b549197
|
|
@ -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;
|
||||||
|
|
@ -12,8 +12,6 @@ public class RuoYiApplication
|
||||||
|
|
||||||
public static void main(String[] args)
|
public static void main(String[] args)
|
||||||
{
|
{
|
||||||
// http://localhost/system/user/getUserlist.action
|
|
||||||
// http://localhost/system/user/login
|
|
||||||
SpringApplication.run(RuoYiApplication.class, args);
|
SpringApplication.run(RuoYiApplication.class, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ public class BaseController
|
||||||
return ShiroUtils.getUser();
|
return ShiroUtils.getUser();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getUserId()
|
public Long getUserId()
|
||||||
{
|
{
|
||||||
return getUser().getUserId();
|
return getUser().getUserId();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -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 +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,10 +1,15 @@
|
||||||
package com.ruoyi.project.system.user.controller;
|
package com.ruoyi.project.system.user.controller;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.ui.Model;
|
import org.springframework.ui.Model;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
|
||||||
import com.ruoyi.framework.core.controller.BaseController;
|
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.domain.User;
|
||||||
import com.ruoyi.project.system.user.service.IUserService;
|
import com.ruoyi.project.system.user.service.IUserService;
|
||||||
|
|
||||||
|
|
@ -20,34 +25,26 @@ public class IndexController extends BaseController
|
||||||
@Autowired
|
@Autowired
|
||||||
private IUserService userService;
|
private IUserService userService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMenuService menuService;
|
||||||
|
|
||||||
// 系统首页
|
// 系统首页
|
||||||
@RequestMapping("/index")
|
@RequestMapping("/index")
|
||||||
public String index(Model model) throws Exception
|
public String index(Model model) throws Exception
|
||||||
{
|
{
|
||||||
// 取身份信息
|
// 取身份信息
|
||||||
User user = getUser();
|
User user = getUser();
|
||||||
|
|
||||||
// 根据用户id取出菜单
|
// 根据用户id取出菜单
|
||||||
//List<Permission> permissions = userService.findPermsListByUserId(currentUser.getUserName());
|
List<Menu> menus = menuService.findMenusByUserId(user.getUserId());
|
||||||
|
model.addAttribute("menus", menus);
|
||||||
// 通过model传到页面
|
model.addAttribute("user", user);
|
||||||
//session.setAttribute("permissions", TreeUtil.getChildPerms(permissions, 0));
|
|
||||||
model.addAttribute("username", user.getUserName());
|
|
||||||
return "index";
|
return "index";
|
||||||
}
|
}
|
||||||
|
|
||||||
// 系统介绍
|
// 系统介绍
|
||||||
@RequestMapping("/main")
|
@RequestMapping("/main")
|
||||||
public String main() throws Exception
|
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";
|
return "main";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,7 @@ import org.apache.shiro.subject.Subject;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
|
||||||
import com.ruoyi.common.tools.StringTools;
|
import com.ruoyi.common.tools.StringTools;
|
||||||
import com.ruoyi.common.utils.security.ShiroUtils;
|
import com.ruoyi.common.utils.security.ShiroUtils;
|
||||||
import com.ruoyi.framework.core.controller.BaseController;
|
import com.ruoyi.framework.core.controller.BaseController;
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,9 @@ public class User implements Serializable
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
// 用户ID
|
// 用户ID
|
||||||
private Integer userId;
|
private Long userId;
|
||||||
// 部门ID
|
// 部门ID
|
||||||
private Integer deptId;
|
private Long deptId;
|
||||||
// 登录名
|
// 登录名
|
||||||
private String loginName;
|
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();
|
super();
|
||||||
this.userId = userId;
|
this.userId = userId;
|
||||||
|
|
@ -47,22 +47,22 @@ public class User implements Serializable
|
||||||
this.password = password;
|
this.password = password;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getUserId()
|
public Long getUserId()
|
||||||
{
|
{
|
||||||
return userId;
|
return userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUserId(Integer userId)
|
public void setUserId(Long userId)
|
||||||
{
|
{
|
||||||
this.userId = userId;
|
this.userId = userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getDeptId()
|
public Long getDeptId()
|
||||||
{
|
{
|
||||||
return deptId;
|
return deptId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDeptId(Integer deptId)
|
public void setDeptId(Long deptId)
|
||||||
{
|
{
|
||||||
this.deptId = deptId;
|
this.deptId = deptId;
|
||||||
}
|
}
|
||||||
|
|
@ -168,12 +168,20 @@ public class User implements Serializable
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString() {
|
||||||
{
|
return "User{" +
|
||||||
return "{\"userId\":\"" + userId + "\",\"deptId\":\"" + deptId + "\",\"loginName\":\"" + loginName
|
"userId=" + userId +
|
||||||
+ "\",\"userName\":\"" + userName + "\",\"email\":\"" + email + "\",\"phonenumber\":\"" + phonenumber
|
", deptId=" + deptId +
|
||||||
+ "\",\"password\":\"" + password + "\",\"salt\":\"" + salt + "\",\"status\":\"" + status
|
", loginName='" + loginName + '\'' +
|
||||||
+ "\",\"refuseDes\":\"" + refuseDes + "\",\"createTime\":\"" + createTime + "\",\"roleName\":\""
|
", userName='" + userName + '\'' +
|
||||||
+ roleName + "\"} ";
|
", email='" + email + '\'' +
|
||||||
|
", phonenumber=" + phonenumber +
|
||||||
|
", password='" + password + '\'' +
|
||||||
|
", salt=" + salt +
|
||||||
|
", status=" + status +
|
||||||
|
", refuseDes=" + refuseDes +
|
||||||
|
", createTime=" + createTime +
|
||||||
|
", roleName=" + roleName +
|
||||||
|
'}';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -7,7 +7,8 @@ spring:
|
||||||
datasource:
|
datasource:
|
||||||
type: com.alibaba.druid.pool.DruidDataSource
|
type: com.alibaba.druid.pool.DruidDataSource
|
||||||
driverClassName: com.mysql.jdbc.Driver
|
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
|
username: root
|
||||||
password: password
|
password: password
|
||||||
initialSize: 1
|
initialSize: 1
|
||||||
|
|
|
||||||
|
|
@ -1,35 +1,35 @@
|
||||||
server:
|
server:
|
||||||
port: 80
|
port: 80
|
||||||
tomcat:
|
tomcat:
|
||||||
uri-encoding: utf-8
|
uri-encoding: utf-8
|
||||||
user:
|
user:
|
||||||
password:
|
password:
|
||||||
#密码错误{maxRetryCount}次锁定10分钟
|
#密码错误{maxRetryCount}次锁定10分钟
|
||||||
maxRetryCount: 5
|
maxRetryCount: 5
|
||||||
spring:
|
spring:
|
||||||
thymeleaf:
|
thymeleaf:
|
||||||
mode: LEGACYHTML5
|
mode: LEGACYHTML5
|
||||||
cache: false
|
cache: false
|
||||||
messages:
|
messages:
|
||||||
#国际化资源文件路径
|
#国际化资源文件路径
|
||||||
basename: i18n/messages
|
basename: i18n/messages
|
||||||
jackson:
|
jackson:
|
||||||
time-zone: GMT+8
|
time-zone: GMT+8
|
||||||
date-format: yyyy-MM-dd HH:mm:ss
|
date-format: yyyy-MM-dd HH:mm:ss
|
||||||
profiles:
|
profiles:
|
||||||
active: druid
|
active: druid
|
||||||
http:
|
http:
|
||||||
multipart:
|
multipart:
|
||||||
max-file-size: 30Mb
|
max-file-size: 30Mb
|
||||||
max-request-size: 30Mb
|
max-request-size: 30Mb
|
||||||
devtools:
|
devtools:
|
||||||
restart:
|
restart:
|
||||||
enabled: true
|
enabled: true
|
||||||
# MyBatis
|
# MyBatis
|
||||||
mybatis:
|
mybatis:
|
||||||
# 配置类型别名
|
# 配置类型别名
|
||||||
typeAliasesPackage: com.ruoyi.project.system.user.domain
|
typeAliasesPackage: com.ruoyi.project.system.user.domain
|
||||||
# 配置mapper的扫描,找到所有的mapper.xml映射文件
|
# 配置mapper的扫描,找到所有的mapper.xml映射文件
|
||||||
mapperLocations: classpath:mybatis/**/*Mapper.xml
|
mapperLocations: classpath:mybatis/**/*Mapper.xml
|
||||||
# 加载全局的配置文件
|
# 加载全局的配置文件
|
||||||
configLocation: classpath:mybatis/mybatis-config.xml
|
configLocation: classpath:mybatis/mybatis-config.xml
|
||||||
|
|
@ -4,8 +4,16 @@ PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
|
||||||
"http://mybatis.org/dtd/mybatis-3-config.dtd">
|
"http://mybatis.org/dtd/mybatis-3-config.dtd">
|
||||||
<configuration>
|
<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>
|
</configuration>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -1,170 +1,164 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<title>若依管理系统首页</title>
|
<title>若依管理系统首页</title>
|
||||||
<meta name="keywords" content="若依管理系统首页">
|
<meta name="keywords" content="若依管理系统首页">
|
||||||
<meta name="description" content="若依管理系统首页">
|
<meta name="description" content="若依管理系统首页">
|
||||||
<!--[if lt IE 9]>
|
<!--[if lt IE 9]>
|
||||||
<meta http-equiv="refresh" content="0;ie.html"/>
|
<meta http-equiv="refresh" content="0;ie.html"/>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
<link rel="shortcut icon" href="favicon.ico">
|
<link rel="shortcut icon" href="favicon.ico">
|
||||||
<link href="/css/bootstrap.min.css?v=3.3.6" rel="stylesheet">
|
<link href="/css/bootstrap.min.css?v=3.3.6" rel="stylesheet">
|
||||||
<link href="/css/font-awesome.min.css?v=4.4.0" rel="stylesheet">
|
<link href="/css/font-awesome.min.css?v=4.4.0" rel="stylesheet">
|
||||||
<link href="/css/plugins/toastr/toastr.min.css" rel="stylesheet">
|
<link href="/css/plugins/toastr/toastr.min.css" rel="stylesheet">
|
||||||
<link href="/css/animate.css" rel="stylesheet">
|
<link href="/css/animate.css" rel="stylesheet">
|
||||||
<link href="/css/style.css?v=4.1.0" rel="stylesheet">
|
<link href="/css/style.css?v=4.1.0" rel="stylesheet">
|
||||||
</head>
|
</head>
|
||||||
<body class="fixed-sidebar full-height-layout gray-bg" style="overflow: hidden">
|
<body class="fixed-sidebar full-height-layout gray-bg" style="overflow: hidden">
|
||||||
<div id="wrapper">
|
<div id="wrapper">
|
||||||
|
|
||||||
<!--左侧导航开始-->
|
<!--左侧导航开始-->
|
||||||
<nav class="navbar-default navbar-static-side" role="navigation">
|
<nav class="navbar-default navbar-static-side" role="navigation">
|
||||||
<div class="nav-close">
|
<div class="nav-close">
|
||||||
<i class="fa fa-times-circle"></i>
|
<i class="fa fa-times-circle"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="sidebar-collapse">
|
<div class="sidebar-collapse">
|
||||||
<ul class="nav" id="side-menu">
|
<ul class="nav" id="side-menu">
|
||||||
<li class="nav-header">
|
<li class="nav-header">
|
||||||
<div class="dropdown profile-element">
|
<div class="dropdown profile-element">
|
||||||
<span><img src="img/profile_small.jpg" alt="image" class="img-circle" height="60" width="60"/></span>
|
<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="#">
|
<a data-toggle="dropdown" class="dropdown-toggle" href="#">
|
||||||
<span class="clear">
|
<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 class="text-muted text-xs block">超级管理员</b></span>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li class="active">
|
||||||
<a href="#">
|
<a href="index.html"><i class="fa fa-home"></i> <span class="nav-label">主页</span> <span class="fa arrow"></span></a>
|
||||||
<i class="fa fa-home"></i>
|
<ul class="nav nav-second-level">
|
||||||
<span class="nav-label">主页</span>
|
<li class="active"><a class="J_menuItem" href="main.html" th:href="@{/main}">了解若依</a></li>
|
||||||
<span class="fa arrow"></span>
|
</ul>
|
||||||
</a>
|
</li>
|
||||||
<ul class="nav nav-second-level">
|
<li th:each="menu : ${menus}">
|
||||||
<li>
|
<a href="#">
|
||||||
<a id="index001" class="J_menuItem" href="main.html" data-index="0" th:href="@{/main}">了解若依</a>
|
<i class="fa fa fa-bar-chart-o" th:class="${menu.icon}"></i>
|
||||||
</li>
|
<span class="nav-label" th:text="${menu.menuName}">一级菜单</span>
|
||||||
</ul>
|
<span class="fa arrow"></span>
|
||||||
</li>
|
</a>
|
||||||
<li th:each="menu : ${menus}">
|
<ul class="nav nav-second-level collapse">
|
||||||
<a href="#">
|
<li th:each="cmenu : ${menu.children}">
|
||||||
<i class="fa fa fa-bar-chart-o" th:class="${menu.attributes.icon}"></i>
|
<a class="J_menuItem" th:text="${cmenu.menuName}" th:href="${cmenu.url}">二级菜单</a>
|
||||||
<span class="nav-label" th:text="${menu.text}">一级菜单</span>
|
</li>
|
||||||
<span class="fa arrow"></span>
|
</ul>
|
||||||
</a>
|
</li>
|
||||||
<ul class="nav nav-second-level">
|
</ul>
|
||||||
<li th:each="cmenu : ${menu.children}">
|
</div>
|
||||||
<a class="J_menuItem" href="graph_echarts.html" th:text="${cmenu.text}" th:href="${cmenu.attributes.url}">二级菜单</a>
|
</nav>
|
||||||
</li>
|
<!--左侧导航结束-->
|
||||||
</ul>
|
|
||||||
</li>
|
<!--右侧部分开始-->
|
||||||
</ul>
|
<div id="page-wrapper" class="gray-bg dashbard-1">
|
||||||
</div>
|
<div class="row border-bottom">
|
||||||
</nav>
|
<nav class="navbar navbar-static-top" role="navigation"
|
||||||
<!--左侧导航结束-->
|
style="margin-bottom: 0">
|
||||||
|
<div class="navbar-header">
|
||||||
<!--右侧部分开始-->
|
|
||||||
<div id="page-wrapper" class="gray-bg dashbard-1">
|
<a class="navbar-minimalize minimalize-styl-2 btn btn-default " href="#" title="收起菜单">
|
||||||
<div class="row border-bottom">
|
<i class="fa fa-bars"></i>
|
||||||
<nav class="navbar navbar-static-top" role="navigation"
|
</a>
|
||||||
style="margin-bottom: 0">
|
<form role="search" class="navbar-form-custom" method="post" action="">
|
||||||
<div class="navbar-header">
|
<div class="form-group">
|
||||||
|
<input type="text" placeholder="请输入您需要查找的内容 …" class="form-control" name="top-search" id="top-search">
|
||||||
<a class="navbar-minimalize minimalize-styl-2 btn btn-default " href="#" title="收起菜单">
|
</div>
|
||||||
<i class="fa fa-bars"></i>
|
</form>
|
||||||
</a>
|
</div>
|
||||||
<form role="search" class="navbar-form-custom" method="post" action="">
|
<ul class="nav navbar-top-links navbar-right">
|
||||||
<div class="form-group">
|
<li class="hidden-xs"><a @click="personal" href="#" ><i class="fa fa-id-card"></i> 个人资料</a></li>
|
||||||
<input type="text" placeholder="请输入您需要查找的内容 …" class="form-control" name="top-search" id="top-search">
|
<li class="hidden-xs"><a @click="personal" href="/logout" ><i class="fa fa-close"></i> 注销</a></li>
|
||||||
</div>
|
</ul>
|
||||||
</form>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
<ul class="nav navbar-top-links navbar-right">
|
<div class="row content-tabs">
|
||||||
<li class="hidden-xs"><a @click="personal" href="#" ><i class="fa fa-id-card"></i> 个人资料</a></li>
|
<button class="roll-nav roll-left J_tabLeft">
|
||||||
<li class="hidden-xs"><a @click="personal" href="/logout" ><i class="fa fa-close"></i> 注销</a></li>
|
<i class="fa fa-backward"></i>
|
||||||
</ul>
|
</button>
|
||||||
</nav>
|
<nav class="page-tabs J_menuTabs">
|
||||||
</div>
|
<div class="page-tabs-content">
|
||||||
<div class="row content-tabs">
|
<a href="javascript:;" class="active J_menuTab" data-id="index_v1.html">首页</a>
|
||||||
<button class="roll-nav roll-left J_tabLeft">
|
</div>
|
||||||
<i class="fa fa-backward"></i>
|
</nav>
|
||||||
</button>
|
<button class="roll-nav roll-right J_tabRight">
|
||||||
<nav class="page-tabs J_menuTabs">
|
<i class="fa fa-forward"></i>
|
||||||
<div class="page-tabs-content">
|
</button>
|
||||||
<a href="javascript:;" class="active J_menuTab" data-id="index_v1.html">首页</a>
|
<div class="btn-group roll-nav roll-right">
|
||||||
</div>
|
<button class="dropdown J_tabClose" data-toggle="dropdown">
|
||||||
</nav>
|
关闭操作<span class="caret"></span>
|
||||||
<button class="roll-nav roll-right J_tabRight">
|
</button>
|
||||||
<i class="fa fa-forward"></i>
|
<ul role="menu" class="dropdown-menu dropdown-menu-right">
|
||||||
</button>
|
<li class="J_tabShowActive"><a>定位当前选项卡</a></li>
|
||||||
<div class="btn-group roll-nav roll-right">
|
<li class="divider"></li>
|
||||||
<button class="dropdown J_tabClose" data-toggle="dropdown">
|
<li class="J_tabCloseAll"><a>关闭全部选项卡</a></li>
|
||||||
关闭操作<span class="caret"></span>
|
<li class="J_tabCloseOther"><a>关闭其他选项卡</a></li>
|
||||||
</button>
|
</ul>
|
||||||
<ul role="menu" class="dropdown-menu dropdown-menu-right">
|
</div>
|
||||||
<li class="J_tabShowActive"><a>定位当前选项卡</a></li>
|
<a href="/logout" class="roll-nav roll-right J_tabExit"><i class="fa fa fa-sign-out"></i> 退出</a>
|
||||||
<li class="divider"></li>
|
</div>
|
||||||
<li class="J_tabCloseAll"><a>关闭全部选项卡</a></li>
|
<div class="row J_mainContent" id="content-main">
|
||||||
<li class="J_tabCloseOther"><a>关闭其他选项卡</a></li>
|
<iframe class="J_iframe" name="iframe0" width="100%" height="100%"
|
||||||
</ul>
|
src="" th:src="@{/main}" frameborder="0" data-id="index.html"
|
||||||
</div>
|
seamless></iframe>
|
||||||
<a href="/logout" class="roll-nav roll-right J_tabExit"><i class="fa fa fa-sign-out"></i> 退出</a>
|
</div>
|
||||||
</div>
|
<div class="footer">
|
||||||
<div class="row J_mainContent" id="content-main">
|
<div class="pull-right">© 2018-2020 RuoYi Copyright</div>
|
||||||
<iframe class="J_iframe" name="iframe0" width="100%" height="100%"
|
</div>
|
||||||
src="" th:src="@{/main}" frameborder="0" data-id="index.html"
|
</div>
|
||||||
seamless></iframe>
|
<!--右侧部分结束-->
|
||||||
</div>
|
</div>
|
||||||
<div class="footer">
|
<!-- 全局js -->
|
||||||
<div class="pull-right">© 2018-2020 RuoYi Copyright</div>
|
<script src="/js/jquery.min.js?v=2.1.4"></script>
|
||||||
</div>
|
<script src="/js/bootstrap.min.js?v=3.3.6"></script>
|
||||||
</div>
|
<script src="/js/plugins/metisMenu/jquery.metisMenu.js"></script>
|
||||||
<!--右侧部分结束-->
|
<script src="/js/plugins/slimscroll/jquery.slimscroll.min.js"></script>
|
||||||
</div>
|
<script src="/js/plugins/layer/layer.min.js"></script>
|
||||||
<!-- 全局js -->
|
<!-- 自定义js -->
|
||||||
<script src="/js/jquery.min.js?v=2.1.4"></script>
|
<script src="/js/app.js?v=4.1.0"></script>
|
||||||
<script src="/js/bootstrap.min.js?v=3.3.6"></script>
|
<script type="text/javascript" src="/js/contabs.js"></script>
|
||||||
<script src="/js/plugins/metisMenu/jquery.metisMenu.js"></script>
|
<!-- 第三方插件 -->
|
||||||
<script src="/js/plugins/slimscroll/jquery.slimscroll.min.js"></script>
|
<script src="/js/plugins/pace/pace.min.js"></script>
|
||||||
<script src="/js/plugins/layer/layer.min.js"></script>
|
<!-- vue -->
|
||||||
<!-- 自定义js -->
|
<script type="text/javascript" src="/js/vue.min.js"></script>
|
||||||
<script src="/js/app.js?v=4.1.0"></script>
|
<script src="/js/appjs/oa/webSocket/sockjs.min.js"></script>
|
||||||
<script type="text/javascript" src="/js/contabs.js"></script>
|
<script src="/js/appjs/oa/webSocket/stomp.min.js"></script>
|
||||||
<!-- 第三方插件 -->
|
<!-- Toastr script -->
|
||||||
<script src="/js/plugins/pace/pace.min.js"></script>
|
<script src="/js/plugins/toastr/toastr.min.js"></script>
|
||||||
<!-- vue -->
|
<script type="text/javascript">
|
||||||
<script type="text/javascript" src="/js/vue.min.js"></script>
|
var wrapper = new Vue({
|
||||||
<script src="/js/appjs/oa/webSocket/sockjs.min.js"></script>
|
el: '#wrapper',
|
||||||
<script src="/js/appjs/oa/webSocket/stomp.min.js"></script>
|
data: {
|
||||||
<!-- Toastr script -->
|
total: '',
|
||||||
<script src="/js/plugins/toastr/toastr.min.js"></script>
|
rows: '',
|
||||||
<script type="text/javascript">
|
},
|
||||||
var wrapper = new Vue({
|
methods: {
|
||||||
el: '#wrapper',
|
personal: function () {
|
||||||
data: {
|
layer.open({
|
||||||
total: '',
|
type: 2,
|
||||||
rows: '',
|
title: '个人设置',
|
||||||
},
|
maxmin: true,
|
||||||
methods: {
|
shadeClose: false,
|
||||||
personal: function () {
|
area: ['1024px', '720px'],
|
||||||
layer.open({
|
content: '/sys/user/personal'
|
||||||
type: 2,
|
});
|
||||||
title: '个人设置',
|
}
|
||||||
maxmin: true,
|
},
|
||||||
shadeClose: false,
|
created: function () {
|
||||||
area: ['1024px', '720px'],
|
this.notify()
|
||||||
content: '/sys/user/personal'
|
}
|
||||||
});
|
})
|
||||||
}
|
</script>
|
||||||
},
|
</body>
|
||||||
created: function () {
|
</html>
|
||||||
this.notify()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue