mirror of https://gitee.com/y_project/RuoYi.git
				
				
				
			若依开源1.1.4发布
							parent
							
								
									fab59267ed
								
							
						
					
					
						commit
						01d61b1d0e
					
				
							
								
								
									
										17
									
								
								README.md
								
								
								
								
							
							
						
						
									
										17
									
								
								README.md
								
								
								
								
							| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
 | 
			
		||||
一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套后台系统。如此有了若依。她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。
 | 
			
		||||
 | 
			
		||||
性别男,若依是女儿的名字。屌丝男士别来骚扰了。~
 | 
			
		||||
性别男,若依是女儿的名字。
 | 
			
		||||
 | 
			
		||||
## 内置功能
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -12,13 +12,14 @@
 | 
			
		|||
4.  菜单管理:配置系统菜单(支持控制到按钮)。
 | 
			
		||||
5.  角色管理:角色菜单权限分配。
 | 
			
		||||
6.  字典管理:对系统中经常使用的一些较为固定的数据进行维护。
 | 
			
		||||
7.  操作日志:系统操作日志记录(含异常)。
 | 
			
		||||
8.  登录日志:系统登录情况记录(含异常)。
 | 
			
		||||
9.  在线用户:当前系统中活跃用户状态监控。
 | 
			
		||||
10. 定时任务:在线添加、修改和删除任务调度(含执行日志)。
 | 
			
		||||
11. 代码生成:生成包括 java、html、js、xml、sql。
 | 
			
		||||
12. 在线构建器:拖动表单元素生成相应的HTML代码。
 | 
			
		||||
13. 连接池监视:监视当期系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
 | 
			
		||||
7.  参数管理:对系统动态配置参数。
 | 
			
		||||
8.  操作日志:系统操作日志记录(含异常)。
 | 
			
		||||
9.  登录日志:系统登录情况记录(含异常)。
 | 
			
		||||
10. 在线用户:当前系统中活跃用户状态监控。
 | 
			
		||||
11. 定时任务:在线添加、修改和删除任务调度(含执行日志)。
 | 
			
		||||
12. 代码生成:生成包括 java、html、js、xml、sql。
 | 
			
		||||
13. 在线构建器:拖动表单元素生成相应的HTML代码。
 | 
			
		||||
14. 连接池监视:监视当期系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
 | 
			
		||||
 | 
			
		||||
## 系统演示 [www.ruoyi.club](http://www.ruoyi.club)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										23
									
								
								pom.xml
								
								
								
								
							
							
						
						
									
										23
									
								
								pom.xml
								
								
								
								
							| 
						 | 
				
			
			@ -5,7 +5,7 @@
 | 
			
		|||
 | 
			
		||||
	<groupId>com.ruoyi</groupId>
 | 
			
		||||
	<artifactId>RuoYi</artifactId>
 | 
			
		||||
	<version>1.1.3</version>
 | 
			
		||||
	<version>1.1.4</version>
 | 
			
		||||
	<packaging>jar</packaging>
 | 
			
		||||
 | 
			
		||||
	<name>RuoYi</name>
 | 
			
		||||
| 
						 | 
				
			
			@ -25,16 +25,19 @@
 | 
			
		|||
		<shiro.version>1.3.2</shiro.version>
 | 
			
		||||
		<thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
 | 
			
		||||
    	<thymeleaf-layout-dialect.version>2.0.1</thymeleaf-layout-dialect.version>
 | 
			
		||||
		<thymeleaf-extras-shiro.version>2.0.0</thymeleaf-extras-shiro.version>
 | 
			
		||||
		<mybatis-spring-boot-starter.version>1.1.1</mybatis-spring-boot-starter.version>
 | 
			
		||||
		<thymeleaf.extras.shiro.version>2.0.0</thymeleaf.extras.shiro.version>
 | 
			
		||||
		<mybatis.spring.boot.starter.version>1.1.1</mybatis.spring.boot.starter.version>
 | 
			
		||||
		<pagehelper.spring.boot.starter.version>1.2.3</pagehelper.spring.boot.starter.version>
 | 
			
		||||
		<fastjson.version>1.2.31</fastjson.version>
 | 
			
		||||
		<druid.version>1.0.28</druid.version>		
 | 
			
		||||
		<commons.lang3.version>3.6</commons.lang3.version>
 | 
			
		||||
		<commons.io.version>2.5</commons.io.version>
 | 
			
		||||
		<commons.fileupload.version>1.3.3</commons.fileupload.version>
 | 
			
		||||
		<bitwalker.version>1.19</bitwalker.version>
 | 
			
		||||
		<lombok.version>1.16.18</lombok.version>
 | 
			
		||||
		<mybatisplus-spring-boot-starter.version>1.0.4</mybatisplus-spring-boot-starter.version>
 | 
			
		||||
		<velocity.version>1.7</velocity.version>
 | 
			
		||||
		<quartz.version>2.3.0</quartz.version>
 | 
			
		||||
		<kaptcha.version>2.3.2</kaptcha.version>
 | 
			
		||||
	</properties>
 | 
			
		||||
 | 
			
		||||
	<dependencies>
 | 
			
		||||
| 
						 | 
				
			
			@ -94,14 +97,14 @@
 | 
			
		|||
		<dependency>
 | 
			
		||||
			<groupId>org.mybatis.spring.boot</groupId>
 | 
			
		||||
			<artifactId>mybatis-spring-boot-starter</artifactId>
 | 
			
		||||
			<version>${mybatis-spring-boot-starter.version}</version>
 | 
			
		||||
			<version>${mybatis.spring.boot.starter.version}</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		
 | 
			
		||||
		<!-- pagehelper 分页插件 -->
 | 
			
		||||
		<dependency>
 | 
			
		||||
		    <groupId>com.github.pagehelper</groupId>
 | 
			
		||||
		    <artifactId>pagehelper-spring-boot-starter</artifactId>
 | 
			
		||||
		    <version>1.2.3</version>
 | 
			
		||||
		    <version>${pagehelper.spring.boot.starter.version}</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		
 | 
			
		||||
		<!--阿里数据库连接池 -->
 | 
			
		||||
| 
						 | 
				
			
			@ -122,14 +125,14 @@
 | 
			
		|||
		<dependency>
 | 
			
		||||
            <groupId>commons-io</groupId>
 | 
			
		||||
            <artifactId>commons-io</artifactId>
 | 
			
		||||
            <version>2.5</version>
 | 
			
		||||
            <version>${commons.io.version}</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
		
 | 
			
		||||
		<!--文件上传工具类 -->
 | 
			
		||||
		<dependency>
 | 
			
		||||
		   <groupId>commons-fileupload</groupId>
 | 
			
		||||
		   <artifactId>commons-fileupload</artifactId>
 | 
			
		||||
		   <version>1.3.3</version>
 | 
			
		||||
		   <version>${commons.fileupload.version}</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
					
 | 
			
		||||
		<!--Shiro核心框架 -->
 | 
			
		||||
| 
						 | 
				
			
			@ -157,7 +160,7 @@
 | 
			
		|||
		<dependency>
 | 
			
		||||
			<groupId>com.github.theborakompanioni</groupId>
 | 
			
		||||
			<artifactId>thymeleaf-extras-shiro</artifactId>
 | 
			
		||||
			<version>${thymeleaf-extras-shiro.version}</version>
 | 
			
		||||
			<version>${thymeleaf.extras.shiro.version}</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		
 | 
			
		||||
		<!-- 阿里JSON解析器 -->
 | 
			
		||||
| 
						 | 
				
			
			@ -204,7 +207,7 @@
 | 
			
		|||
		<dependency>
 | 
			
		||||
			<groupId>com.github.penggle</groupId>
 | 
			
		||||
			<artifactId>kaptcha</artifactId>
 | 
			
		||||
			<version>2.3.2</version>
 | 
			
		||||
			<version>${kaptcha.version}</version>
 | 
			
		||||
			<exclusions>
 | 
			
		||||
				<exclusion>
 | 
			
		||||
					<artifactId>javax.servlet-api</artifactId>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,9 +12,9 @@ create table sys_dept (
 | 
			
		|||
  email             varchar(20)     default ''                 comment '邮箱',
 | 
			
		||||
  status 			int(1) 			default 0 				   comment '部门状态:0正常,1停用',
 | 
			
		||||
  create_by         varchar(64)     default ''                 comment '创建者',
 | 
			
		||||
  create_time 	    timestamp                                  comment '创建时间',
 | 
			
		||||
  create_time 	    datetime                                   comment '创建时间',
 | 
			
		||||
  update_by         varchar(64)     default ''                 comment '更新者',
 | 
			
		||||
  update_time       timestamp                                  comment '更新时间',
 | 
			
		||||
  update_time       datetime                                   comment '更新时间',
 | 
			
		||||
  primary key (dept_id)
 | 
			
		||||
) engine=innodb auto_increment=200 default charset=utf8 comment = '部门表';
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -52,9 +52,9 @@ create table sys_user (
 | 
			
		|||
  status 			int(1) 			default 0 				   comment '帐号状态:0正常,1禁用',
 | 
			
		||||
  refuse_des 		varchar(500) 	default '' 				   comment '拒绝登录描述',
 | 
			
		||||
  create_by         varchar(64)     default ''                 comment '创建者',
 | 
			
		||||
  create_time 	    timestamp                                  comment '创建时间',
 | 
			
		||||
  create_time 	    datetime                                   comment '创建时间',
 | 
			
		||||
  update_by         varchar(64)     default ''                 comment '更新者',
 | 
			
		||||
  update_time       timestamp                                  comment '更新时间',
 | 
			
		||||
  update_time       datetime                                   comment '更新时间',
 | 
			
		||||
  primary key (user_id)
 | 
			
		||||
) engine=innodb auto_increment=100 default charset=utf8 comment = '用户信息表';
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -76,9 +76,9 @@ create table sys_post
 | 
			
		|||
	post_sort     int(4)          not null                   comment '显示顺序',
 | 
			
		||||
	status        int(1)          not null                   comment '状态(0正常 1停用)',
 | 
			
		||||
    create_by     varchar(64)     default ''                 comment '创建者',
 | 
			
		||||
    create_time   timestamp                                  comment '创建时间',
 | 
			
		||||
    create_time   datetime                                   comment '创建时间',
 | 
			
		||||
    update_by     varchar(64) 	  default ''			     comment '更新者',
 | 
			
		||||
	update_time   timestamp                                  comment '更新时间',
 | 
			
		||||
	update_time   datetime                                   comment '更新时间',
 | 
			
		||||
    remark 		  varchar(500) 	  default '' 				 comment '备注',
 | 
			
		||||
	primary key (post_id)
 | 
			
		||||
) engine=innodb default charset=utf8 comment = '岗位信息表';
 | 
			
		||||
| 
						 | 
				
			
			@ -103,9 +103,9 @@ create table sys_role (
 | 
			
		|||
  role_sort         int(10)         not null                   comment '显示顺序',
 | 
			
		||||
  status 			int(1) 			default 0 				   comment '角色状态:0正常,1禁用',
 | 
			
		||||
  create_by         varchar(64)     default ''                 comment '创建者',
 | 
			
		||||
  create_time 		timestamp                                  comment '创建时间',
 | 
			
		||||
  create_time 		datetime                                   comment '创建时间',
 | 
			
		||||
  update_by 		varchar(64) 	default ''			       comment '更新者',
 | 
			
		||||
  update_time 		timestamp                                  comment '更新时间',
 | 
			
		||||
  update_time 		datetime                                   comment '更新时间',
 | 
			
		||||
  remark 			varchar(500) 	default '' 				   comment '备注',
 | 
			
		||||
  primary key (role_id)
 | 
			
		||||
) engine=innodb auto_increment=100 default charset=utf8 comment = '角色信息表';
 | 
			
		||||
| 
						 | 
				
			
			@ -132,9 +132,9 @@ create table sys_menu (
 | 
			
		|||
  perms 			varchar(100) 	default '' 				   comment '权限标识',
 | 
			
		||||
  icon 				varchar(100) 	default '' 				   comment '菜单图标',
 | 
			
		||||
  create_by         varchar(64)     default ''                 comment '创建者',
 | 
			
		||||
  create_time 		timestamp                                  comment '创建时间',
 | 
			
		||||
  create_time 		datetime                                   comment '创建时间',
 | 
			
		||||
  update_by 		varchar(64) 	default ''			       comment '更新者',
 | 
			
		||||
  update_time 		timestamp                                  comment '更新时间',
 | 
			
		||||
  update_time 		datetime                                   comment '更新时间',
 | 
			
		||||
  remark 			varchar(500) 	default '' 				   comment '备注',
 | 
			
		||||
  primary key (menu_id)
 | 
			
		||||
) engine=innodb auto_increment=1000 default charset=utf8 comment = '菜单权限表';
 | 
			
		||||
| 
						 | 
				
			
			@ -202,28 +202,35 @@ insert into sys_menu values('49', '字典修改', '9', '3', '#',  'F', '0', 'sys
 | 
			
		|||
insert into sys_menu values('50', '字典删除', '9', '4', '#',  'F', '0', 'system:dict:remove',       '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('51', '字典保存', '9', '5', '#',  'F', '0', 'system:dict:save',         '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('52', '批量删除', '9', '6', '#',  'F', '0', 'system:dict:batchRemove',  '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
-- 参数设置按钮
 | 
			
		||||
insert into sys_menu values('53', '参数查询', '10', '1', '#',  'F', '0', 'system:config:list',              '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('54', '参数新增', '10', '2', '#',  'F', '0', 'system:config:add',               '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('55', '参数修改', '10', '3', '#',  'F', '0', 'system:config:edit',              '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('56', '参数删除', '10', '4', '#',  'F', '0', 'system:config:remove',            '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('57', '参数保存', '10', '5', '#',  'F', '0', 'system:config:save',              '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('58', '批量删除', '10', '6', '#',  'F', '0', 'system:config:batchRemove',       '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
-- 操作日志按钮
 | 
			
		||||
insert into sys_menu values('53', '操作查询', '11', '1', '#',  'F', '0', 'monitor:operlog:list',            '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('54', '批量删除', '11', '2', '#',  'F', '0', 'monitor:operlog:batchRemove',     '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('55', '详细信息', '11', '3', '#',  'F', '0', 'monitor:operlog:detail',          '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('59', '操作查询', '11', '1', '#',  'F', '0', 'monitor:operlog:list',            '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('60', '批量删除', '11', '2', '#',  'F', '0', 'monitor:operlog:batchRemove',     '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('61', '详细信息', '11', '3', '#',  'F', '0', 'monitor:operlog:detail',          '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
-- 登录日志按钮
 | 
			
		||||
insert into sys_menu values('56', '登录查询', '12', '1', '#',  'F', '0', 'monitor:logininfor:list',         '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('57', '批量删除', '12', '2', '#',  'F', '0', 'monitor:logininfor:batchRemove',  '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('62', '登录查询', '12', '1', '#',  'F', '0', 'monitor:logininfor:list',         '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('63', '批量删除', '12', '2', '#',  'F', '0', 'monitor:logininfor:batchRemove',  '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
-- 在线用户按钮
 | 
			
		||||
insert into sys_menu values('58', '在线查询', '13', '1', '#',  'F', '0', 'monitor:online:list',             '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('59', '批量强退', '13', '2', '#',  'F', '0', 'monitor:online:batchForceLogout', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('60', '单条强退', '13', '3', '#',  'F', '0', 'monitor:online:forceLogout',      '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('64', '在线查询', '13', '1', '#',  'F', '0', 'monitor:online:list',             '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('65', '批量强退', '13', '2', '#',  'F', '0', 'monitor:online:batchForceLogout', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('66', '单条强退', '13', '3', '#',  'F', '0', 'monitor:online:forceLogout',      '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
-- 定时任务按钮
 | 
			
		||||
insert into sys_menu values('61', '任务查询', '14', '1', '#',  'F', '0', 'monitor:job:list',             '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('62', '任务新增', '14', '2', '#',  'F', '0', 'monitor:job:add',              '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('63', '任务修改', '14', '3', '#',  'F', '0', 'monitor:job:edit',             '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('64', '任务删除', '14', '4', '#',  'F', '0', 'monitor:job:remove',           '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('65', '任务保存', '14', '5', '#',  'F', '0', 'monitor:job:save',             '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('66', '状态修改', '14', '6', '#',  'F', '0', 'monitor:job:changeStatus',     '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('67', '批量删除', '14', '7', '#',  'F', '0', 'monitor:job:batchRemove',      '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('67', '任务查询', '14', '1', '#',  'F', '0', 'monitor:job:list',             '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('68', '任务新增', '14', '2', '#',  'F', '0', 'monitor:job:add',              '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('69', '任务修改', '14', '3', '#',  'F', '0', 'monitor:job:edit',             '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('70', '任务删除', '14', '4', '#',  'F', '0', 'monitor:job:remove',           '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('71', '任务保存', '14', '5', '#',  'F', '0', 'monitor:job:save',             '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('72', '状态修改', '14', '6', '#',  'F', '0', 'monitor:job:changeStatus',     '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('73', '批量删除', '14', '7', '#',  'F', '0', 'monitor:job:batchRemove',      '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
-- 代码生成按钮
 | 
			
		||||
insert into sys_menu values('68', '生成查询', '16', '1', '#',  'F', '0', 'tool:gen:list',  '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('69', '生成代码', '16', '2', '#',  'F', '0', 'tool:gen:code',  '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('74', '生成查询', '16', '1', '#',  'F', '0', 'tool:gen:list',  '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
insert into sys_menu values('75', '生成代码', '16', '2', '#',  'F', '0', 'tool:gen:code',  '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
| 
						 | 
				
			
			@ -325,7 +332,12 @@ insert into sys_role_menu values ('1', '66');
 | 
			
		|||
insert into sys_role_menu values ('1', '67');
 | 
			
		||||
insert into sys_role_menu values ('1', '68');
 | 
			
		||||
insert into sys_role_menu values ('1', '69');
 | 
			
		||||
 | 
			
		||||
insert into sys_role_menu values ('1', '70');
 | 
			
		||||
insert into sys_role_menu values ('1', '71');
 | 
			
		||||
insert into sys_role_menu values ('1', '72');
 | 
			
		||||
insert into sys_role_menu values ('1', '73');
 | 
			
		||||
insert into sys_role_menu values ('1', '74');
 | 
			
		||||
insert into sys_role_menu values ('1', '75');
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 8、用户与岗位关联表  用户1-N岗位
 | 
			
		||||
| 
						 | 
				
			
			@ -362,7 +374,7 @@ create table sys_oper_log (
 | 
			
		|||
  oper_param 		varchar(255) 	default '' 				   comment '请求参数',
 | 
			
		||||
  status 			int(1) 		    default 0				   comment '操作状态 0正常 1异常',
 | 
			
		||||
  error_msg 		varchar(2000) 	default '' 				   comment '错误消息',
 | 
			
		||||
  oper_time 		timestamp                                  comment '操作时间',
 | 
			
		||||
  oper_time 		datetime                                   comment '操作时间',
 | 
			
		||||
  primary key (oper_id)
 | 
			
		||||
) engine=innodb auto_increment=100 default charset=utf8 comment = '操作日志记录';
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -378,9 +390,9 @@ create table sys_dict_type
 | 
			
		|||
	dict_type        varchar(100)    default ''                 comment '字典类型',
 | 
			
		||||
    status 			 int(1) 		 default 0				    comment '状态(0正常 1禁用)',
 | 
			
		||||
    create_by        varchar(64)     default ''                 comment '创建者',
 | 
			
		||||
    create_time      timestamp                                  comment '创建时间',
 | 
			
		||||
    create_time      datetime                                   comment '创建时间',
 | 
			
		||||
    update_by        varchar(64) 	 default ''			        comment '更新者',
 | 
			
		||||
	update_time      timestamp                                  comment '更新时间',
 | 
			
		||||
	update_time      datetime                                   comment '更新时间',
 | 
			
		||||
    remark 	         varchar(500) 	 default '' 				comment '备注',
 | 
			
		||||
	primary key (dict_id),
 | 
			
		||||
	unique (dict_type)
 | 
			
		||||
| 
						 | 
				
			
			@ -403,9 +415,9 @@ create table sys_dict_data
 | 
			
		|||
	dict_type        varchar(100)    default ''                 comment '字典类型',
 | 
			
		||||
    status 			 int(1) 		 default 0				    comment '状态(0正常 1禁用)',
 | 
			
		||||
    create_by        varchar(64)     default ''                 comment '创建者',
 | 
			
		||||
    create_time      timestamp                                  comment '创建时间',
 | 
			
		||||
    create_time      datetime                                   comment '创建时间',
 | 
			
		||||
    update_by        varchar(64) 	 default ''			        comment '更新者',
 | 
			
		||||
	update_time      timestamp                                  comment '更新时间',
 | 
			
		||||
	update_time      datetime                                   comment '更新时间',
 | 
			
		||||
    remark 	         varchar(500) 	 default '' 				comment '备注',
 | 
			
		||||
	primary key (dict_code)
 | 
			
		||||
) engine=innodb auto_increment=100 default charset=utf8 comment = '字典数据表';
 | 
			
		||||
| 
						 | 
				
			
			@ -425,7 +437,29 @@ insert into sys_dict_data values(12, 4, '京东支付', 'QQ',  'sys_pay_code',
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 12、系统访问记录
 | 
			
		||||
-- 12、参数配置表
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists sys_config;
 | 
			
		||||
create table sys_config (
 | 
			
		||||
	config_id 		   int(5) 	     not null auto_increment    comment '参数主键',
 | 
			
		||||
	config_name        varchar(100)  default ''                 comment '参数名称',
 | 
			
		||||
	config_key         varchar(100)  default ''                 comment '参数键名',
 | 
			
		||||
	config_value       varchar(100)  default ''                 comment '参数键值',
 | 
			
		||||
	config_type        char(1)       default 'N'                comment '系统内置(Y是 N否)',
 | 
			
		||||
    create_by          varchar(64)   default ''                 comment '创建者',
 | 
			
		||||
    create_time 	   datetime                                 comment '创建时间',
 | 
			
		||||
    update_by          varchar(64)   default ''                 comment '更新者',
 | 
			
		||||
    update_time        datetime                                 comment '更新时间',
 | 
			
		||||
	remark 	         varchar(500) 	 default '' 				comment '备注',
 | 
			
		||||
	primary key (config_id)
 | 
			
		||||
) engine=innodb auto_increment=100 default charset=utf8 comment = '参数配置表';
 | 
			
		||||
 | 
			
		||||
insert into sys_config values(1, '主框架页-默认皮肤样式名称', 'sys.index.skinName',     'skin-default',  'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '默认 skin-default、蓝色 skin-blue、黄色 skin-yellow' );
 | 
			
		||||
insert into sys_config values(2, '用户管理-账号初始密码',     'sys.user.initPassword',  '123456',        'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '初始化密码 123456' );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 13、系统访问记录
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists sys_logininfor;
 | 
			
		||||
create table sys_logininfor (
 | 
			
		||||
| 
						 | 
				
			
			@ -436,13 +470,13 @@ create table sys_logininfor (
 | 
			
		|||
  os      		varchar(50)  default '' 			   comment '操作系统',
 | 
			
		||||
  status 		int(1) 		 default 0 			 	   comment '登录状态 0成功 1失败',
 | 
			
		||||
  msg      		varchar(255) default '' 			   comment '提示消息',
 | 
			
		||||
  login_time 	timestamp                              comment '访问时间',
 | 
			
		||||
  login_time 	datetime                               comment '访问时间',
 | 
			
		||||
  primary key (info_id)
 | 
			
		||||
) engine=innodb auto_increment=100 default charset=utf8 comment = '系统访问记录';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 13、在线用户记录
 | 
			
		||||
-- 14、在线用户记录
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists sys_user_online;
 | 
			
		||||
create table sys_user_online (
 | 
			
		||||
| 
						 | 
				
			
			@ -453,15 +487,15 @@ create table sys_user_online (
 | 
			
		|||
  browser  		    varchar(50)  default '' 			 	comment '浏览器类型',
 | 
			
		||||
  os      		    varchar(50)  default '' 			 	comment '操作系统',
 | 
			
		||||
  status      	    varchar(10)  default '' 			 	comment '在线状态on_line在线off_line离线',
 | 
			
		||||
  start_timestsamp 	timestamp                               comment 'session创建时间',
 | 
			
		||||
  last_access_time  timestamp                               comment 'session最后访问时间',
 | 
			
		||||
  start_timestsamp 	datetime                                comment 'session创建时间',
 | 
			
		||||
  last_access_time  datetime                                comment 'session最后访问时间',
 | 
			
		||||
  expire_time 	    int(5) 		 default 0 			 	    comment '超时时间,单位为分钟',
 | 
			
		||||
  primary key (sessionId)
 | 
			
		||||
) engine=innodb default charset=utf8 comment = '在线用户记录';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 14、定时任务调度表
 | 
			
		||||
-- 15、定时任务调度表
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists sys_job;
 | 
			
		||||
create table sys_job (
 | 
			
		||||
| 
						 | 
				
			
			@ -473,9 +507,9 @@ create table sys_job (
 | 
			
		|||
  cron_expression     varchar(255)  default ''                 comment 'cron执行表达式',
 | 
			
		||||
  status              int(1)        default 0                  comment '状态(0正常 1暂停)',
 | 
			
		||||
  create_by           varchar(64)   default ''                 comment '创建者',
 | 
			
		||||
  create_time         timestamp                                comment '创建时间',
 | 
			
		||||
  create_time         datetime                                 comment '创建时间',
 | 
			
		||||
  update_by           varchar(64)   default ''                 comment '更新者',
 | 
			
		||||
  update_time         timestamp                                comment '更新时间',
 | 
			
		||||
  update_time         datetime                                 comment '更新时间',
 | 
			
		||||
  remark              varchar(500)  default ''                 comment '备注信息',
 | 
			
		||||
  primary key (job_id, job_name, job_group)
 | 
			
		||||
) engine=innodb auto_increment=100 default charset=utf8 comment = '定时任务调度表';
 | 
			
		||||
| 
						 | 
				
			
			@ -485,7 +519,7 @@ insert into sys_job values(2, 'ryTask', '系统默认(有参)', 'ryParams',
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 15、定时任务调度日志表
 | 
			
		||||
-- 16、定时任务调度日志表
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists sys_job_log;
 | 
			
		||||
create table sys_job_log (
 | 
			
		||||
| 
						 | 
				
			
			@ -497,6 +531,6 @@ create table sys_job_log (
 | 
			
		|||
  job_message         varchar(500)                             comment '日志信息',
 | 
			
		||||
  is_exception        int(1)        default 0                  comment '是否异常',
 | 
			
		||||
  exception_info      text                                     comment '异常信息',
 | 
			
		||||
  create_time         timestamp                                comment '创建时间',
 | 
			
		||||
  create_time         datetime                                 comment '创建时间',
 | 
			
		||||
  primary key (job_log_id)
 | 
			
		||||
) engine=innodb default charset=utf8 comment = '定时任务调度日志表';
 | 
			
		||||
| 
						 | 
				
			
			@ -57,6 +57,10 @@ public class UserConstants
 | 
			
		|||
    public final static String DICT_TYPE_UNIQUE = "0";
 | 
			
		||||
    public final static String DICT_TYPE_NOT_UNIQUE = "1";
 | 
			
		||||
    
 | 
			
		||||
    /** 参数键名是否唯一的返回结果码 */
 | 
			
		||||
    public final static String CONFIG_KEY_UNIQUE = "0";
 | 
			
		||||
    public final static String CONFIG_KEY_NOT_UNIQUE = "1";
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * 密码长度限制
 | 
			
		||||
     */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,13 @@
 | 
			
		|||
package com.ruoyi.common.utils.security;
 | 
			
		||||
 | 
			
		||||
import org.apache.shiro.SecurityUtils;
 | 
			
		||||
import org.apache.shiro.mgt.RealmSecurityManager;
 | 
			
		||||
import org.apache.shiro.session.Session;
 | 
			
		||||
import org.apache.shiro.subject.PrincipalCollection;
 | 
			
		||||
import org.apache.shiro.subject.SimplePrincipalCollection;
 | 
			
		||||
import org.apache.shiro.subject.Subject;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.framework.shiro.realm.UserRealm;
 | 
			
		||||
import com.ruoyi.project.system.user.domain.User;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -45,6 +48,13 @@ public class ShiroUtils
 | 
			
		|||
        subject.runAs(newPrincipalCollection);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void clearCachedAuthorizationInfo()
 | 
			
		||||
    {
 | 
			
		||||
        RealmSecurityManager rsm = (RealmSecurityManager) SecurityUtils.getSecurityManager();
 | 
			
		||||
        UserRealm realm = (UserRealm) rsm.getRealms().iterator().next();
 | 
			
		||||
        realm.clearCachedAuthorizationInfo();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static Long getUserId()
 | 
			
		||||
    {
 | 
			
		||||
        return getUser().getUserId().longValue();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
package com.ruoyi.framework.shiro.realm;
 | 
			
		||||
 | 
			
		||||
import org.apache.shiro.SecurityUtils;
 | 
			
		||||
import org.apache.shiro.authc.AuthenticationException;
 | 
			
		||||
import org.apache.shiro.authc.AuthenticationInfo;
 | 
			
		||||
import org.apache.shiro.authc.AuthenticationToken;
 | 
			
		||||
| 
						 | 
				
			
			@ -16,6 +17,7 @@ import org.apache.shiro.subject.PrincipalCollection;
 | 
			
		|||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.common.exception.user.CaptchaException;
 | 
			
		||||
import com.ruoyi.common.exception.user.RoleBlockedException;
 | 
			
		||||
import com.ruoyi.common.exception.user.UserBlockedException;
 | 
			
		||||
| 
						 | 
				
			
			@ -113,4 +115,12 @@ public class UserRealm extends AuthorizingRealm
 | 
			
		|||
        return info;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 清理缓存权限
 | 
			
		||||
     */
 | 
			
		||||
    public void clearCachedAuthorizationInfo()
 | 
			
		||||
    {
 | 
			
		||||
        this.clearCachedAuthorizationInfo(SecurityUtils.getSubject().getPrincipals());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
package com.ruoyi.framework.web.service;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
import com.ruoyi.project.system.config.service.IConfigService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * RuoYi首创 html调用 thymeleaf 实现参数管理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@Component
 | 
			
		||||
public class ConfigService
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private IConfigService configService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据键名查询参数配置信息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param configName 参数名称
 | 
			
		||||
     * @return 参数键值
 | 
			
		||||
     */
 | 
			
		||||
    public String selectConfigByKey(String configKey)
 | 
			
		||||
    {
 | 
			
		||||
        return configService.selectConfigByKey(configKey);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,143 @@
 | 
			
		|||
package com.ruoyi.project.system.config.controller;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.stereotype.Controller;
 | 
			
		||||
import org.springframework.ui.Model;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.PathVariable;
 | 
			
		||||
import org.springframework.web.bind.annotation.PostMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestParam;
 | 
			
		||||
import org.springframework.web.bind.annotation.ResponseBody;
 | 
			
		||||
import com.ruoyi.project.system.config.domain.Config;
 | 
			
		||||
import com.ruoyi.project.system.config.service.IConfigService;
 | 
			
		||||
import com.ruoyi.framework.aspectj.lang.annotation.Log;
 | 
			
		||||
import com.ruoyi.framework.web.controller.BaseController;
 | 
			
		||||
import com.ruoyi.framework.web.page.TableDataInfo;
 | 
			
		||||
import com.ruoyi.framework.web.domain.Message;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 参数配置 信息操作处理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@Controller
 | 
			
		||||
@RequestMapping("/system/config")
 | 
			
		||||
public class ConfigController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    private String prefix = "system/config";
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private IConfigService configService;
 | 
			
		||||
 | 
			
		||||
    @RequiresPermissions("system:config:view")
 | 
			
		||||
    @GetMapping()
 | 
			
		||||
    public String index()
 | 
			
		||||
    {
 | 
			
		||||
        return prefix + "/config";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询参数配置列表
 | 
			
		||||
     */
 | 
			
		||||
    @RequiresPermissions("system:config:list")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    @ResponseBody
 | 
			
		||||
    public TableDataInfo list(Config config)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<Config> list = configService.selectConfigList(config);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增参数配置
 | 
			
		||||
     */
 | 
			
		||||
    @RequiresPermissions("system:config:add")
 | 
			
		||||
    @Log(title = "系统管理", action = "参数配置-新增参数")
 | 
			
		||||
    @GetMapping("/add")
 | 
			
		||||
    public String add()
 | 
			
		||||
    {
 | 
			
		||||
        return prefix + "/add";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改参数配置
 | 
			
		||||
     */
 | 
			
		||||
    @RequiresPermissions("system:config:edit")
 | 
			
		||||
    @Log(title = "系统管理", action = "参数配置-修改参数")
 | 
			
		||||
    @GetMapping("/edit/{configId}")
 | 
			
		||||
    public String edit(@PathVariable("configId") Integer configId, Model model)
 | 
			
		||||
    {
 | 
			
		||||
        Config config = configService.selectConfigById(configId);
 | 
			
		||||
        model.addAttribute("config", config);
 | 
			
		||||
        return prefix + "/edit";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 保存参数配置
 | 
			
		||||
     */
 | 
			
		||||
    @RequiresPermissions("system:config:save")
 | 
			
		||||
    @Log(title = "系统管理", action = "参数配置-保存参数")
 | 
			
		||||
    @PostMapping("/save")
 | 
			
		||||
    @ResponseBody
 | 
			
		||||
    public Message save(Config config)
 | 
			
		||||
    {
 | 
			
		||||
        if (configService.saveConfig(config) > 0)
 | 
			
		||||
        {
 | 
			
		||||
            return Message.success();
 | 
			
		||||
        }
 | 
			
		||||
        return Message.error();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除参数配置
 | 
			
		||||
     */
 | 
			
		||||
    @RequiresPermissions("system:config:remove")
 | 
			
		||||
    @Log(title = "系统管理", action = "参数配置-删除参数")
 | 
			
		||||
    @PostMapping("/remove/{configId}")
 | 
			
		||||
    @ResponseBody
 | 
			
		||||
    public Message remove(@PathVariable("configId") Integer configId)
 | 
			
		||||
    {
 | 
			
		||||
        if (configService.deleteConfigById(configId) > 0)
 | 
			
		||||
        {
 | 
			
		||||
            return Message.success();
 | 
			
		||||
        }
 | 
			
		||||
        return Message.error();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 批量删除参数配置
 | 
			
		||||
     */
 | 
			
		||||
    @RequiresPermissions("system:config:batchRemove")
 | 
			
		||||
    @Log(title = "系统管理", action = "参数配置-批量删除")
 | 
			
		||||
    @PostMapping("/batchRemove")
 | 
			
		||||
    @ResponseBody
 | 
			
		||||
    public Message remove(@RequestParam("ids[]") Integer[] configIds)
 | 
			
		||||
    {
 | 
			
		||||
        int rows = configService.batchDeleteConfig(configIds);
 | 
			
		||||
        if (rows > 0)
 | 
			
		||||
        {
 | 
			
		||||
            return Message.success();
 | 
			
		||||
        }
 | 
			
		||||
        return Message.error();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * 校验参数键名
 | 
			
		||||
     */
 | 
			
		||||
    @PostMapping("/checkConfigKeyUnique")
 | 
			
		||||
    @ResponseBody
 | 
			
		||||
    public String checkConfigKeyUnique(Config config)
 | 
			
		||||
    {
 | 
			
		||||
        String uniqueFlag = "0";
 | 
			
		||||
        if (config != null)
 | 
			
		||||
        {
 | 
			
		||||
            uniqueFlag = configService.checkConfigKeyUnique(config);
 | 
			
		||||
        }
 | 
			
		||||
        return uniqueFlag;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,75 @@
 | 
			
		|||
package com.ruoyi.project.system.config.domain;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.framework.web.domain.BaseEntity;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 参数配置表 sys_config
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class Config extends BaseEntity
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /** 参数主键 */
 | 
			
		||||
    private Integer configId;
 | 
			
		||||
    /** 参数名称 */
 | 
			
		||||
    private String configName;
 | 
			
		||||
    /** 参数键名 */
 | 
			
		||||
    private String configKey;
 | 
			
		||||
    /** 参数键值 */
 | 
			
		||||
    private String configValue;
 | 
			
		||||
    /** 系统内置(Y是 N否) */
 | 
			
		||||
    private String configType;
 | 
			
		||||
 | 
			
		||||
    public Integer getConfigId()
 | 
			
		||||
    {
 | 
			
		||||
        return configId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setConfigId(Integer configId)
 | 
			
		||||
    {
 | 
			
		||||
        this.configId = configId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getConfigName()
 | 
			
		||||
    {
 | 
			
		||||
        return configName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setConfigName(String configName)
 | 
			
		||||
    {
 | 
			
		||||
        this.configName = configName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getConfigKey()
 | 
			
		||||
    {
 | 
			
		||||
        return configKey;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setConfigKey(String configKey)
 | 
			
		||||
    {
 | 
			
		||||
        this.configKey = configKey;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getConfigValue()
 | 
			
		||||
    {
 | 
			
		||||
        return configValue;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setConfigValue(String configValue)
 | 
			
		||||
    {
 | 
			
		||||
        this.configValue = configValue;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getConfigType()
 | 
			
		||||
    {
 | 
			
		||||
        return configType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setConfigType(String configType)
 | 
			
		||||
    {
 | 
			
		||||
        this.configType = configType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,70 @@
 | 
			
		|||
package com.ruoyi.project.system.config.mapper;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.project.system.config.domain.Config;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 参数配置 数据层
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public interface ConfigMapper
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询参数配置信息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param configId 参数配置ID
 | 
			
		||||
     * @return 参数配置信息
 | 
			
		||||
     */
 | 
			
		||||
    public Config selectConfigById(Integer configId);
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据键名查询参数配置信息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param configName 参数名称
 | 
			
		||||
     * @return 参数配置信息
 | 
			
		||||
     */
 | 
			
		||||
    public Config selectConfigByKey(String configKey);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询参数配置列表
 | 
			
		||||
     * 
 | 
			
		||||
     * @param config 参数配置信息
 | 
			
		||||
     * @return 参数配置集合
 | 
			
		||||
     */
 | 
			
		||||
    public List<Config> selectConfigList(Config config);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增参数配置
 | 
			
		||||
     * 
 | 
			
		||||
     * @param config 参数配置信息
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public int insertConfig(Config config);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改参数配置
 | 
			
		||||
     * 
 | 
			
		||||
     * @param config 参数配置信息
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public int updateConfig(Config config);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除参数配置
 | 
			
		||||
     * 
 | 
			
		||||
     * @param configId 参数配置ID
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public int deleteConfigById(Integer configId);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 批量删除参数配置
 | 
			
		||||
     * 
 | 
			
		||||
     * @param configIds 需要删除的数据ID
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public int batchDeleteConfig(Integer[] configIds);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,154 @@
 | 
			
		|||
package com.ruoyi.project.system.config.service;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.common.constant.UserConstants;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
import com.ruoyi.project.system.config.domain.Config;
 | 
			
		||||
import com.ruoyi.project.system.config.mapper.ConfigMapper;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 参数配置 服务层实现
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@Service
 | 
			
		||||
public class ConfigServiceImpl implements IConfigService
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ConfigMapper configMapper;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询参数配置信息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param configId 参数配置ID
 | 
			
		||||
     * @return 参数配置信息
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public Config selectConfigById(Integer configId)
 | 
			
		||||
    {
 | 
			
		||||
        return configMapper.selectConfigById(configId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据键名查询参数配置信息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param configName 参数名称
 | 
			
		||||
     * @return 参数键值
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public String selectConfigByKey(String configKey)
 | 
			
		||||
    {
 | 
			
		||||
        Config config = configMapper.selectConfigByKey(configKey);
 | 
			
		||||
        return StringUtils.isNotNull(config) ? config.getConfigValue() : "";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询参数配置列表
 | 
			
		||||
     * 
 | 
			
		||||
     * @param config 参数配置信息
 | 
			
		||||
     * @return 参数配置集合
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<Config> selectConfigList(Config config)
 | 
			
		||||
    {
 | 
			
		||||
        return configMapper.selectConfigList(config);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增参数配置
 | 
			
		||||
     * 
 | 
			
		||||
     * @param config 参数配置信息
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public int insertConfig(Config config)
 | 
			
		||||
    {
 | 
			
		||||
        return configMapper.insertConfig(config);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改参数配置
 | 
			
		||||
     * 
 | 
			
		||||
     * @param config 参数配置信息
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public int updateConfig(Config config)
 | 
			
		||||
    {
 | 
			
		||||
        return configMapper.updateConfig(config);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 保存参数配置
 | 
			
		||||
     * 
 | 
			
		||||
     * @param config 参数配置信息
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public int saveConfig(Config config)
 | 
			
		||||
    {
 | 
			
		||||
        Integer configId = config.getConfigId();
 | 
			
		||||
        int rows = 0;
 | 
			
		||||
        if (StringUtils.isNotNull(configId))
 | 
			
		||||
        {
 | 
			
		||||
            rows = configMapper.updateConfig(config);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            rows = configMapper.insertConfig(config);
 | 
			
		||||
        }
 | 
			
		||||
        return rows;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除参数配置信息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param configId 参数配置ID
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public int deleteConfigById(Integer configId)
 | 
			
		||||
    {
 | 
			
		||||
        return configMapper.deleteConfigById(configId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 批量删除参数配置对象
 | 
			
		||||
     * 
 | 
			
		||||
     * @param configIds 需要删除的数据ID
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public int batchDeleteConfig(Integer[] configIds)
 | 
			
		||||
    {
 | 
			
		||||
        return configMapper.batchDeleteConfig(configIds);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 校验参数键名是否唯一
 | 
			
		||||
     * 
 | 
			
		||||
     * @param config 参数配置信息
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public String checkConfigKeyUnique(Config config)
 | 
			
		||||
    {
 | 
			
		||||
        if (config.getConfigId() == null)
 | 
			
		||||
        {
 | 
			
		||||
            config.setConfigId(-1);
 | 
			
		||||
        }
 | 
			
		||||
        Integer configId = config.getConfigId();
 | 
			
		||||
        Config info = configMapper.selectConfigByKey(config.getConfigKey());
 | 
			
		||||
        if (StringUtils.isNotNull(info) && StringUtils.isNotNull(info.getConfigId())
 | 
			
		||||
                && info.getConfigId().intValue() != configId.intValue())
 | 
			
		||||
        {
 | 
			
		||||
            return UserConstants.CONFIG_KEY_NOT_UNIQUE;
 | 
			
		||||
        }
 | 
			
		||||
        return UserConstants.CONFIG_KEY_UNIQUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,86 @@
 | 
			
		|||
package com.ruoyi.project.system.config.service;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.project.system.config.domain.Config;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 参数配置 服务层
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public interface IConfigService
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询参数配置信息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param configId 参数配置ID
 | 
			
		||||
     * @return 参数配置信息
 | 
			
		||||
     */
 | 
			
		||||
    public Config selectConfigById(Integer configId);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据键名查询参数配置信息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param configName 参数名称
 | 
			
		||||
     * @return 参数键值
 | 
			
		||||
     */
 | 
			
		||||
    public String selectConfigByKey(String configKey);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询参数配置列表
 | 
			
		||||
     * 
 | 
			
		||||
     * @param config 参数配置信息
 | 
			
		||||
     * @return 参数配置集合
 | 
			
		||||
     */
 | 
			
		||||
    public List<Config> selectConfigList(Config config);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增参数配置
 | 
			
		||||
     * 
 | 
			
		||||
     * @param config 参数配置信息
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public int insertConfig(Config config);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改参数配置
 | 
			
		||||
     * 
 | 
			
		||||
     * @param config 参数配置信息
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public int updateConfig(Config config);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 保存参数配置
 | 
			
		||||
     * 
 | 
			
		||||
     * @param config 参数配置信息
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public int saveConfig(Config config);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除参数配置信息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param configId 参数配置ID
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public int deleteConfigById(Integer configId);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 批量删除参数配置信息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param configIds 需要删除的数据ID
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public int batchDeleteConfig(Integer[] configIds);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 校验参数键名是否唯一
 | 
			
		||||
     * 
 | 
			
		||||
     * @param dept 部门信息
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public String checkConfigKeyUnique(Config config);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -140,6 +140,10 @@ public class DeptServiceImpl implements IDeptService
 | 
			
		|||
    @Override
 | 
			
		||||
    public String checkDeptNameUnique(Dept dept)
 | 
			
		||||
    {
 | 
			
		||||
        if (dept.getDeptId() == null)
 | 
			
		||||
        {
 | 
			
		||||
            dept.setDeptId(-1L);
 | 
			
		||||
        }
 | 
			
		||||
        Long deptId = dept.getDeptId();
 | 
			
		||||
        Dept info = deptMapper.checkDeptNameUnique(dept.getDeptName());
 | 
			
		||||
        if (StringUtils.isNotNull(info) && StringUtils.isNotNull(info.getDeptId())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -192,6 +192,7 @@ public class MenuServiceImpl implements IMenuService
 | 
			
		|||
    @Override
 | 
			
		||||
    public int deleteMenuById(Long menuId)
 | 
			
		||||
    {
 | 
			
		||||
        ShiroUtils.clearCachedAuthorizationInfo();
 | 
			
		||||
        return menuMapper.deleteMenuById(menuId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -244,11 +245,13 @@ public class MenuServiceImpl implements IMenuService
 | 
			
		|||
        if (StringUtils.isNotNull(menuId))
 | 
			
		||||
        {
 | 
			
		||||
            menu.setUpdateBy(ShiroUtils.getLoginName());
 | 
			
		||||
            ShiroUtils.clearCachedAuthorizationInfo();
 | 
			
		||||
            return menuMapper.updateMenu(menu);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            menu.setCreateBy(ShiroUtils.getLoginName());
 | 
			
		||||
            ShiroUtils.clearCachedAuthorizationInfo();
 | 
			
		||||
            return menuMapper.insertMenu(menu);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -262,6 +265,10 @@ public class MenuServiceImpl implements IMenuService
 | 
			
		|||
    @Override
 | 
			
		||||
    public String checkMenuNameUnique(Menu menu)
 | 
			
		||||
    {
 | 
			
		||||
        if (menu.getMenuId() == null)
 | 
			
		||||
        {
 | 
			
		||||
            menu.setMenuId(-1L);
 | 
			
		||||
        }
 | 
			
		||||
        Long menuId = menu.getMenuId();
 | 
			
		||||
        Menu info = menuMapper.checkMenuNameUnique(menu.getMenuName());
 | 
			
		||||
        if (StringUtils.isNotNull(info) && StringUtils.isNotNull(info.getMenuId())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -165,6 +165,7 @@ public class RoleServiceImpl implements IRoleService
 | 
			
		|||
            // 新增角色信息
 | 
			
		||||
            roleMapper.insertRole(role);
 | 
			
		||||
        }
 | 
			
		||||
        ShiroUtils.clearCachedAuthorizationInfo();
 | 
			
		||||
        return insertRoleMenu(role);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -201,6 +202,10 @@ public class RoleServiceImpl implements IRoleService
 | 
			
		|||
    @Override
 | 
			
		||||
    public String checkRoleNameUnique(Role role)
 | 
			
		||||
    {
 | 
			
		||||
        if (role.getRoleId() == null)
 | 
			
		||||
        {
 | 
			
		||||
            role.setRoleId(-1L);
 | 
			
		||||
        }
 | 
			
		||||
        Long roleId = role.getRoleId();
 | 
			
		||||
        Role info = roleMapper.checkRoleNameUnique(role.getRoleName());
 | 
			
		||||
        if (StringUtils.isNotNull(info) && StringUtils.isNotNull(info.getRoleId()) && info.getRoleId() != roleId)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -274,6 +274,10 @@ public class UserServiceImpl implements IUserService
 | 
			
		|||
    @Override
 | 
			
		||||
    public String checkPhoneUnique(User user)
 | 
			
		||||
    {
 | 
			
		||||
        if (user.getUserId() == null)
 | 
			
		||||
        {
 | 
			
		||||
            user.setUserId(-1L);
 | 
			
		||||
        }
 | 
			
		||||
        Long userId = user.getUserId();
 | 
			
		||||
        User info = userMapper.checkPhoneUnique(user.getPhonenumber());
 | 
			
		||||
        if (StringUtils.isNotNull(info) && StringUtils.isNotNull(info.getUserId())
 | 
			
		||||
| 
						 | 
				
			
			@ -293,6 +297,10 @@ public class UserServiceImpl implements IUserService
 | 
			
		|||
    @Override
 | 
			
		||||
    public String checkEmailUnique(User user)
 | 
			
		||||
    {
 | 
			
		||||
        if (user.getUserId() == null)
 | 
			
		||||
        {
 | 
			
		||||
            user.setUserId(-1L);
 | 
			
		||||
        }
 | 
			
		||||
        Long userId = user.getUserId();
 | 
			
		||||
        User info = userMapper.checkEmailUnique(user.getEmail());
 | 
			
		||||
        if (StringUtils.isNotNull(info) && StringUtils.isNotNull(info.getUserId())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
# 项目名称、版本、版权年份
 | 
			
		||||
ruoyi:
 | 
			
		||||
  name: RuoYi
 | 
			
		||||
  version: 1.1.3
 | 
			
		||||
  version: 1.1.4
 | 
			
		||||
  copyrightYear: 2018
 | 
			
		||||
  profile: D:/profile/
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,10 @@
 | 
			
		|||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<ehcache name="ruoyi">
 | 
			
		||||
 | 
			
		||||
    <!-- 磁盘缓存位置 -->
 | 
			
		||||
    <diskStore path="java.io.tmpdir"/>
 | 
			
		||||
 | 
			
		||||
    <!-- 默认缓存 -->
 | 
			
		||||
    <defaultCache
 | 
			
		||||
            maxEntriesLocalHeap="1000"
 | 
			
		||||
            eternal="false"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,7 +20,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		|||
	</resultMap>
 | 
			
		||||
	
 | 
			
		||||
	<select id="selectJobList" parameterType="Job" resultMap="JobResult">
 | 
			
		||||
		select job_id, job_name, job_group, method_name, params, cron_expression, status, create_by, create_time remark from sys_job
 | 
			
		||||
		select job_id, job_name, job_group, method_name, params, cron_expression, status, create_by, create_time, remark from sys_job
 | 
			
		||||
		<where>
 | 
			
		||||
			<if test="searchValue != null and searchValue != ''">
 | 
			
		||||
				AND job_name like concat(concat('%', #{searchValue}), '%') OR method_name like concat(concat('%', #{searchValue}), '%')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,8 +16,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		|||
	</resultMap>
 | 
			
		||||
 | 
			
		||||
	<insert id="insertLogininfor" parameterType="Logininfor">
 | 
			
		||||
		insert into sys_logininfor (login_name, status, ipaddr, browser, os, msg) 
 | 
			
		||||
		values (#{loginName}, #{status}, #{ipaddr}, #{browser}, #{os}, #{msg})
 | 
			
		||||
		insert into sys_logininfor (login_name, status, ipaddr, browser, os, msg, login_time) 
 | 
			
		||||
		values (#{loginName}, #{status}, #{ipaddr}, #{browser}, #{os}, #{msg}, sysdate())
 | 
			
		||||
	</insert>
 | 
			
		||||
	
 | 
			
		||||
	<select id="selectLogininforList" parameterType="Logininfor" resultMap="LogininforResult">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,8 +21,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		|||
	</resultMap>
 | 
			
		||||
 | 
			
		||||
	<insert id="insertOperlog" parameterType="OperLog">
 | 
			
		||||
		insert into sys_oper_log(title, action, method, channel, login_name, dept_name, oper_url, oper_ip, oper_param, status, error_msg) 
 | 
			
		||||
        values (#{title}, #{action}, #{method}, #{channel}, #{loginName}, #{deptName}, #{operUrl}, #{operIp}, #{operParam}, #{status}, #{errorMsg})
 | 
			
		||||
		insert into sys_oper_log(title, action, method, channel, login_name, dept_name, oper_url, oper_ip, oper_param, status, error_msg, oper_time) 
 | 
			
		||||
        values (#{title}, #{action}, #{method}, #{channel}, #{loginName}, #{deptName}, #{operUrl}, #{operIp}, #{operParam}, #{status}, #{errorMsg}, sysdate())
 | 
			
		||||
	</insert>
 | 
			
		||||
	
 | 
			
		||||
	<select id="selectOperLogList" parameterType="OperLog" resultMap="OperLogResult">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,83 @@
 | 
			
		|||
<?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="com.ruoyi.project.system.config.mapper.ConfigMapper">
 | 
			
		||||
    
 | 
			
		||||
    <resultMap type="Config" id="ConfigResult">
 | 
			
		||||
    	<id     property="configId"     column="config_id"      />
 | 
			
		||||
        <result property="configName"    column="config_name"    />
 | 
			
		||||
        <result property="configKey"     column="config_key"     />
 | 
			
		||||
        <result property="configValue"   column="config_value"   />
 | 
			
		||||
        <result property="configType"    column="config_type"    />
 | 
			
		||||
        <result property="createBy"      column="create_by"      />
 | 
			
		||||
        <result property="createTime"    column="create_time"    />
 | 
			
		||||
        <result property="updateBy"      column="update_by"      />
 | 
			
		||||
        <result property="updateTime"    column="update_time"    />
 | 
			
		||||
    </resultMap>
 | 
			
		||||
    
 | 
			
		||||
    <select id="selectConfigById" parameterType="Integer" resultMap="ConfigResult">
 | 
			
		||||
        select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config
 | 
			
		||||
        where config_id = #{configId}
 | 
			
		||||
    </select>
 | 
			
		||||
    
 | 
			
		||||
    <select id="selectConfigByKey" parameterType="String" resultMap="ConfigResult">
 | 
			
		||||
        select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config
 | 
			
		||||
        where config_key = #{configKey}
 | 
			
		||||
    </select>
 | 
			
		||||
    
 | 
			
		||||
    <select id="selectConfigList" parameterType="Config" resultMap="ConfigResult">
 | 
			
		||||
        select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config
 | 
			
		||||
        <where>
 | 
			
		||||
			<if test="searchValue != null and searchValue != ''">
 | 
			
		||||
				AND config_name like concat(concat('%', #{searchValue}), '%') OR config_key like concat(concat('%', #{searchValue}), '%')
 | 
			
		||||
			</if>
 | 
			
		||||
		</where>
 | 
			
		||||
    </select>
 | 
			
		||||
    
 | 
			
		||||
    <insert id="insertConfig" parameterType="Config">
 | 
			
		||||
        insert into sys_config (
 | 
			
		||||
			<if test="configName != null and configName != '' ">config_name,</if>
 | 
			
		||||
			<if test="configKey != null and configKey != '' ">config_key,</if>
 | 
			
		||||
			<if test="configValue != null and configValue != '' ">config_value,</if>
 | 
			
		||||
			<if test="configType != null and configType != '' ">config_type,</if>
 | 
			
		||||
			<if test="createBy != null and createBy != ''">create_by,</if>
 | 
			
		||||
			<if test="remark != null and remark != ''">remark,</if>
 | 
			
		||||
 			create_time
 | 
			
		||||
        )values(
 | 
			
		||||
			<if test="configName != null and configName != ''">#{configName},</if>
 | 
			
		||||
			<if test="configKey != null and configKey != ''">#{configKey},</if>
 | 
			
		||||
			<if test="configValue != null and configValue != ''">#{configValue},</if>
 | 
			
		||||
			<if test="configType != null and configType != ''">#{configType},</if>
 | 
			
		||||
			<if test="createBy != null and createBy != ''">#{createBy},</if>
 | 
			
		||||
			<if test="remark != null and remark != ''">#{remark},</if>
 | 
			
		||||
 			sysdate()
 | 
			
		||||
		)
 | 
			
		||||
    </insert>
 | 
			
		||||
	 
 | 
			
		||||
    <update id="updateConfig" parameterType="Config">
 | 
			
		||||
        update sys_config 
 | 
			
		||||
        <set>
 | 
			
		||||
            <if test="configName != null and configName != ''">config_name = #{configName},</if>
 | 
			
		||||
            <if test="configKey != null and configKey != ''">config_key = #{configKey},</if>
 | 
			
		||||
            <if test="configValue != null and configValue != ''">config_value = #{configValue},</if>
 | 
			
		||||
            <if test="configType != null and configType != ''">config_type = #{configType},</if>
 | 
			
		||||
            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
 | 
			
		||||
            <if test="remark != null and remark != ''">remark = #{remark},</if>
 | 
			
		||||
 			update_time = sysdate()
 | 
			
		||||
        </set>
 | 
			
		||||
        where config_id = #{configId}
 | 
			
		||||
    </update>
 | 
			
		||||
	
 | 
			
		||||
    <delete id="deleteConfigById" parameterType="Integer">
 | 
			
		||||
        delete from sys_config where config_id = #{value}
 | 
			
		||||
    </delete>
 | 
			
		||||
	
 | 
			
		||||
    <delete id="batchDeleteConfig" parameterType="Integer">
 | 
			
		||||
        delete from sys_config where config_id in 
 | 
			
		||||
        <foreach item="configId" collection="array" open="(" separator="," close=")">
 | 
			
		||||
        #{configId}
 | 
			
		||||
        </foreach>
 | 
			
		||||
    </delete>
 | 
			
		||||
    
 | 
			
		||||
</mapper>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB  | 
| 
		 Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB  | 
| 
						 | 
				
			
			@ -6622,7 +6622,7 @@ body.rtls .top-navigation .footer.fixed, body.rtls.top-navigation .footer.fixed
 | 
			
		|||
 | 
			
		||||
.blue-skin {
 | 
			
		||||
    font-weight: 600;
 | 
			
		||||
    background: url("patterns/header-profile-skin-1.png") repeat scroll 0 0;
 | 
			
		||||
    background: url("patterns/header-profile-skin-blue.png") repeat scroll 0 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.blue-skin:hover {
 | 
			
		||||
| 
						 | 
				
			
			@ -6631,7 +6631,7 @@ body.rtls .top-navigation .footer.fixed, body.rtls.top-navigation .footer.fixed
 | 
			
		|||
 | 
			
		||||
.yellow-skin {
 | 
			
		||||
    font-weight: 600;
 | 
			
		||||
    background: url("patterns/header-profile-skin-3.png") repeat scroll 0  100%;
 | 
			
		||||
    background: url("patterns/header-profile-skin-yellow.png") repeat scroll 0  100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.yellow-skin:hover {
 | 
			
		||||
| 
						 | 
				
			
			@ -6661,295 +6661,295 @@ body.rtls .top-navigation .footer.fixed, body.rtls.top-navigation .footer.fixed
 | 
			
		|||
}
 | 
			
		||||
/*
 | 
			
		||||
 *
 | 
			
		||||
 *   SKIN 1 - H+ - 后台主题UI框架
 | 
			
		||||
 *   NAME - Blue light
 | 
			
		||||
 *   SKIN blue 若依管理系统
 | 
			
		||||
 *   NAME - blue/purple
 | 
			
		||||
 *
 | 
			
		||||
*/
 | 
			
		||||
.skin-1 .minimalize-styl-2 {
 | 
			
		||||
.skin-blue .minimalize-styl-2 {
 | 
			
		||||
    margin: 14px 5px 5px 30px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .navbar-top-links li:last-child {
 | 
			
		||||
.skin-blue .navbar-top-links li:last-child {
 | 
			
		||||
    margin-right: 30px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1.fixed-nav .minimalize-styl-2 {
 | 
			
		||||
.skin-blue.fixed-nav .minimalize-styl-2 {
 | 
			
		||||
    margin: 14px 5px 5px 15px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .spin-icon {
 | 
			
		||||
.skin-blue .spin-icon {
 | 
			
		||||
    background: #0e9aef !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .nav-header {
 | 
			
		||||
.skin-blue .nav-header {
 | 
			
		||||
    background: #0e9aef;
 | 
			
		||||
    background: url('patterns/header-profile-skin-1.png');
 | 
			
		||||
    background: url('patterns/header-profile-skin-blue.png');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1.mini-navbar .nav-second-level {
 | 
			
		||||
.skin-blue.mini-navbar .nav-second-level {
 | 
			
		||||
    background: #3e495f;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .breadcrumb {
 | 
			
		||||
.skin-blue .breadcrumb {
 | 
			
		||||
    background: transparent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .page-heading {
 | 
			
		||||
.skin-blue .page-heading {
 | 
			
		||||
    border: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .nav>li.active {
 | 
			
		||||
.skin-blue .nav>li.active {
 | 
			
		||||
    background: #3a4459;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .nav>li>a {
 | 
			
		||||
.skin-blue .nav>li>a {
 | 
			
		||||
    color: #9ea6b9;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .nav>li.active>a {
 | 
			
		||||
.skin-blue .nav>li.active>a {
 | 
			
		||||
    color: #fff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .navbar-minimalize {
 | 
			
		||||
.skin-blue .navbar-minimalize {
 | 
			
		||||
    background: #0e9aef;
 | 
			
		||||
    border-color: #0e9aef;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
body.skin-1 {
 | 
			
		||||
body.skin-blue {
 | 
			
		||||
    background: #3e495f;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .navbar-static-top {
 | 
			
		||||
.skin-blue .navbar-static-top {
 | 
			
		||||
    background: #ffffff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .dashboard-header {
 | 
			
		||||
.skin-blue .dashboard-header {
 | 
			
		||||
    background: transparent;
 | 
			
		||||
    border-bottom: none !important;
 | 
			
		||||
    border-top: none;
 | 
			
		||||
    padding: 20px 30px 10px 30px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.fixed-nav.skin-1 .navbar-fixed-top {
 | 
			
		||||
.fixed-nav.skin-blue .navbar-fixed-top {
 | 
			
		||||
    background: #fff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .wrapper-content {
 | 
			
		||||
.skin-blue .wrapper-content {
 | 
			
		||||
    padding: 30px 15px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 #page-wrapper {
 | 
			
		||||
.skin-blue #page-wrapper {
 | 
			
		||||
    background: #f4f6fa;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .ibox-title, .skin-1 .ibox-content {
 | 
			
		||||
.skin-blue .ibox-title, .skin-blue .ibox-content {
 | 
			
		||||
    border-width: 1px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .ibox-content:last-child {
 | 
			
		||||
.skin-blue .ibox-content:last-child {
 | 
			
		||||
    border-style: solid solid solid solid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .nav>li.active {
 | 
			
		||||
.skin-blue .nav>li.active {
 | 
			
		||||
    border: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .nav-header {
 | 
			
		||||
.skin-blue .nav-header {
 | 
			
		||||
    padding: 35px 25px 25px 25px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .nav-header a.dropdown-toggle {
 | 
			
		||||
.skin-blue .nav-header a.dropdown-toggle {
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    margin-top: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .nav-header a.dropdown-toggle .text-muted {
 | 
			
		||||
.skin-blue .nav-header a.dropdown-toggle .text-muted {
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    opacity: 0.8;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .profile-element {
 | 
			
		||||
.skin-blue .profile-element {
 | 
			
		||||
    text-align: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .img-circle {
 | 
			
		||||
.skin-blue .img-circle {
 | 
			
		||||
    border-radius: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .navbar-default .nav>li>a:hover, .skin-1 .navbar-default .nav>li>a:focus {
 | 
			
		||||
.skin-blue .navbar-default .nav>li>a:hover, .skin-blue .navbar-default .nav>li>a:focus {
 | 
			
		||||
    background: #39aef5;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .nav.nav-tabs>li.active>a {
 | 
			
		||||
.skin-blue .nav.nav-tabs>li.active>a {
 | 
			
		||||
    color: #555;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .content-tabs {
 | 
			
		||||
.skin-blue .content-tabs {
 | 
			
		||||
    border-bottom: solid 2px #39aef5;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .nav.nav-tabs>li.active {
 | 
			
		||||
.skin-blue .nav.nav-tabs>li.active {
 | 
			
		||||
    background: transparent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .page-tabs a.active {
 | 
			
		||||
.skin-blue .page-tabs a.active {
 | 
			
		||||
    background: #39aef5;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-1 .page-tabs a.active:hover, .skin-1 .page-tabs a.active i:hover {
 | 
			
		||||
.skin-blue .page-tabs a.active:hover, .skin-blue .page-tabs a.active i:hover {
 | 
			
		||||
    background: #0e9aef;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
}
 | 
			
		||||
/*
 | 
			
		||||
 *
 | 
			
		||||
 *   SKIN 3 - H+ - 后台主题UI框架
 | 
			
		||||
 *   SKIN Yellow 若依管理系统
 | 
			
		||||
 *   NAME - Yellow/purple
 | 
			
		||||
 *
 | 
			
		||||
*/
 | 
			
		||||
.skin-3 .minimalize-styl-2 {
 | 
			
		||||
.skin-yellow .minimalize-styl-2 {
 | 
			
		||||
    margin: 14px 5px 5px 30px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .navbar-top-links li:last-child {
 | 
			
		||||
.skin-yellow .navbar-top-links li:last-child {
 | 
			
		||||
    margin-right: 30px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3.fixed-nav .minimalize-styl-2 {
 | 
			
		||||
.skin-yellow.fixed-nav .minimalize-styl-2 {
 | 
			
		||||
    margin: 14px 5px 5px 15px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .spin-icon {
 | 
			
		||||
.skin-yellow .spin-icon {
 | 
			
		||||
    background: #ecba52 !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
body.boxed-layout.skin-3 #wrapper {
 | 
			
		||||
body.boxed-layout.skin-yellow #wrapper {
 | 
			
		||||
    background: #3e2c42;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .nav-header {
 | 
			
		||||
.skin-yellow .nav-header {
 | 
			
		||||
    background: #ecba52;
 | 
			
		||||
    background: url('patterns/header-profile-skin-3.png');
 | 
			
		||||
    background: url('patterns/header-profile-skin-yellow.png');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3.mini-navbar .nav-second-level {
 | 
			
		||||
.skin-yellow.mini-navbar .nav-second-level {
 | 
			
		||||
    background: #3e2c42;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .breadcrumb {
 | 
			
		||||
.skin-yellow .breadcrumb {
 | 
			
		||||
    background: transparent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .page-heading {
 | 
			
		||||
.skin-yellow .page-heading {
 | 
			
		||||
    border: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .nav>li.active {
 | 
			
		||||
.skin-yellow .nav>li.active {
 | 
			
		||||
    background: #38283c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.fixed-nav.skin-3 .navbar-fixed-top {
 | 
			
		||||
.fixed-nav.skin-yellow .navbar-fixed-top {
 | 
			
		||||
    background: #fff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .nav>li>a {
 | 
			
		||||
.skin-yellow .nav>li>a {
 | 
			
		||||
    color: #948b96;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .nav>li.active>a {
 | 
			
		||||
.skin-yellow .nav>li.active>a {
 | 
			
		||||
    color: #fff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .navbar-minimalize {
 | 
			
		||||
.skin-yellow .navbar-minimalize {
 | 
			
		||||
    background: #ecba52;
 | 
			
		||||
    border-color: #ecba52;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
body.skin-3 {
 | 
			
		||||
body.skin-yellow {
 | 
			
		||||
    background: #3e2c42;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .navbar-static-top {
 | 
			
		||||
.skin-yellow .navbar-static-top {
 | 
			
		||||
    background: #ffffff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .dashboard-header {
 | 
			
		||||
.skin-yellow .dashboard-header {
 | 
			
		||||
    background: transparent;
 | 
			
		||||
    border-bottom: none !important;
 | 
			
		||||
    border-top: none;
 | 
			
		||||
    padding: 20px 30px 10px 30px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .wrapper-content {
 | 
			
		||||
.skin-yellow .wrapper-content {
 | 
			
		||||
    padding: 30px 15px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 #page-wrapper {
 | 
			
		||||
.skin-yellow #page-wrapper {
 | 
			
		||||
    background: #f4f6fa;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .ibox-title, .skin-3 .ibox-content {
 | 
			
		||||
.skin-yellow .ibox-title, .skin-yellow .ibox-content {
 | 
			
		||||
    border-width: 1px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .ibox-content:last-child {
 | 
			
		||||
.skin-yellow .ibox-content:last-child {
 | 
			
		||||
    border-style: solid solid solid solid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .nav>li.active {
 | 
			
		||||
.skin-yellow .nav>li.active {
 | 
			
		||||
    border: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .nav-header {
 | 
			
		||||
.skin-yellow .nav-header {
 | 
			
		||||
    padding: 35px 25px 25px 25px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .nav-header a.dropdown-toggle {
 | 
			
		||||
.skin-yellow .nav-header a.dropdown-toggle {
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    margin-top: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .nav-header a.dropdown-toggle .text-muted {
 | 
			
		||||
.skin-yellow .nav-header a.dropdown-toggle .text-muted {
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    opacity: 0.8;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .profile-element {
 | 
			
		||||
.skin-yellow .profile-element {
 | 
			
		||||
    text-align: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .img-circle {
 | 
			
		||||
.skin-yellow .img-circle {
 | 
			
		||||
    border-radius: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .navbar-default .nav>li>a:hover, .skin-3 .navbar-default .nav>li>a:focus {
 | 
			
		||||
.skin-yellow .navbar-default .nav>li>a:hover, .skin-yellow .navbar-default .nav>li>a:focus {
 | 
			
		||||
    background: #38283c;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .nav.nav-tabs>li.active>a {
 | 
			
		||||
.skin-yellow .nav.nav-tabs>li.active>a {
 | 
			
		||||
    color: #555;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .nav.nav-tabs>li.active {
 | 
			
		||||
.skin-yellow .nav.nav-tabs>li.active {
 | 
			
		||||
    background: transparent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .content-tabs {
 | 
			
		||||
.skin-yellow .content-tabs {
 | 
			
		||||
    border-bottom: solid 2px #3e2c42;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .nav.nav-tabs>li.active {
 | 
			
		||||
.skin-yellow .nav.nav-tabs>li.active {
 | 
			
		||||
    background: transparent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .page-tabs a.active {
 | 
			
		||||
.skin-yellow .page-tabs a.active {
 | 
			
		||||
    background: #3e2c42;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skin-3 .page-tabs a.active:hover, .skin-3 .page-tabs a.active i:hover {
 | 
			
		||||
.skin-yellow .page-tabs a.active:hover, .skin-yellow .page-tabs a.active i:hover {
 | 
			
		||||
    background: #38283c;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
				
			
			@ -366,9 +366,13 @@ $(function() {
 | 
			
		|||
    // 右移按扭
 | 
			
		||||
    $('.tabRight').on('click', scrollTabRight);
 | 
			
		||||
    
 | 
			
		||||
    // 关闭当前
 | 
			
		||||
    $('.tabCloseCurrent').on('click', function () {
 | 
			
		||||
        $('.page-tabs-content').find('.active i').trigger("click");
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    // 关闭全部
 | 
			
		||||
    $('.tabCloseAll').on('click',
 | 
			
		||||
    function() {
 | 
			
		||||
    $('.tabCloseAll').on('click', function() {
 | 
			
		||||
        $('.page-tabs-content').children("[data-id]").not(":first").each(function() {
 | 
			
		||||
            $('.RuoYi_iframe[data-id="' + $(this).data('id') + '"]').remove();
 | 
			
		||||
            $(this).remove();
 | 
			
		||||
| 
						 | 
				
			
			@ -379,4 +383,5 @@ $(function() {
 | 
			
		|||
        });
 | 
			
		||||
        $('.page-tabs-content').css("margin-left", "0");
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
$("#form-config-add").validate({
 | 
			
		||||
	rules:{
 | 
			
		||||
		configKey:{
 | 
			
		||||
			required:true,
 | 
			
		||||
			remote: {
 | 
			
		||||
                url: ctx + "system/config/checkConfigKeyUnique",
 | 
			
		||||
                type: "post",
 | 
			
		||||
                dataType: "json",
 | 
			
		||||
                data: {
 | 
			
		||||
                	"configKey" : function() {
 | 
			
		||||
                        return $("input[name='configKey']").val();
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                dataFilter: function(data, type) {
 | 
			
		||||
                    if (data == "0") return true;
 | 
			
		||||
                    else return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
		},
 | 
			
		||||
		configName:{
 | 
			
		||||
			required:true
 | 
			
		||||
		},
 | 
			
		||||
		configValue:{
 | 
			
		||||
			required:true
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	messages: {
 | 
			
		||||
        "configKey": {
 | 
			
		||||
            remote: "参数键名已经存在"
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
	submitHandler:function(form){
 | 
			
		||||
		add();
 | 
			
		||||
	}
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
function add() {
 | 
			
		||||
    _ajax_save(ctx + "system/config/save", $('#form-config-add').serialize());
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,82 @@
 | 
			
		|||
var prefix = ctx + "system/config"
 | 
			
		||||
 | 
			
		||||
$(function() {
 | 
			
		||||
	var columns = [{
 | 
			
		||||
            checkbox: true
 | 
			
		||||
        },
 | 
			
		||||
		{
 | 
			
		||||
			field : 'configId', 
 | 
			
		||||
			title : '参数主键' 
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			field : 'configName', 
 | 
			
		||||
			title : '参数名称' 
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			field : 'configKey', 
 | 
			
		||||
			title : '参数键名' 
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			field : 'configValue', 
 | 
			
		||||
			title : '参数键值' 
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
            field: 'configType',
 | 
			
		||||
            title: '系统内置',
 | 
			
		||||
            align: 'center',
 | 
			
		||||
            formatter: function(value, row, index) {
 | 
			
		||||
                if (value == 'Y') {
 | 
			
		||||
                    return '<span class="label label-success">是</span>';
 | 
			
		||||
                } else if (value == 'N') {
 | 
			
		||||
                    return '<span class="label label-primary">否</span>';
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
		{
 | 
			
		||||
			field : 'createDateTimeStr', 
 | 
			
		||||
			title : '创建时间' 
 | 
			
		||||
		},
 | 
			
		||||
        {
 | 
			
		||||
            title: '操作',
 | 
			
		||||
            align: 'center',
 | 
			
		||||
            formatter: function(value, row, index) {
 | 
			
		||||
            	var actions = [];
 | 
			
		||||
				actions.push('<a class="btn btn-primary btn-sm ' + editFlag + '" href="#" title="编辑" mce_href="#" onclick="edit(\'' + row.configId + '\')"><i class="fa fa-edit"></i></a> ');
 | 
			
		||||
				actions.push('<a class="btn btn-warning btn-sm ' + removeFlag + '" href="#" title="删除" onclick="remove(\'' + row.configId + '\')"><i class="fa fa-remove"></i></a>');
 | 
			
		||||
				return actions.join('');
 | 
			
		||||
            }
 | 
			
		||||
        }];
 | 
			
		||||
	var url = prefix + "/list";
 | 
			
		||||
	$.initTable(columns, url);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
/*参数配置-新增*/
 | 
			
		||||
function add() {
 | 
			
		||||
    var url = prefix + '/add';
 | 
			
		||||
    layer_showAuto("新增参数", url);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*参数配置-修改*/
 | 
			
		||||
function edit(configId) {
 | 
			
		||||
    var url = prefix + '/edit/' + configId;
 | 
			
		||||
    layer_showAuto("修改参数", url);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 单条删除
 | 
			
		||||
function remove(id) {
 | 
			
		||||
	$.modalConfirm("确定要删除选中参数配置吗?", function() {
 | 
			
		||||
		_ajax(prefix + "/remove/" + id, "", "post");
 | 
			
		||||
    })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 批量删除
 | 
			
		||||
function batchRemove() {
 | 
			
		||||
	var rows = $.getSelections("configId");
 | 
			
		||||
	if (rows.length == 0) {
 | 
			
		||||
		$.modalMsg("请选择要删除的数据", "warning");
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	$.modalConfirm("确认要删除选中的" + rows.length + "条数据吗?", function() {
 | 
			
		||||
		_ajax(prefix + '/batchRemove', { "ids": rows }, "post");
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
$("#form-config-edit").validate({
 | 
			
		||||
	rules:{
 | 
			
		||||
		configKey:{
 | 
			
		||||
			required:true,
 | 
			
		||||
			remote: {
 | 
			
		||||
                url: ctx + "system/config/checkConfigKeyUnique",
 | 
			
		||||
                type: "post",
 | 
			
		||||
                dataType: "json",
 | 
			
		||||
                data: {
 | 
			
		||||
                	"configId": function() {
 | 
			
		||||
                	    return $("input[name='configId']").val();
 | 
			
		||||
                	},
 | 
			
		||||
                	"configKey" : function() {
 | 
			
		||||
                        return $("input[name='configKey']").val();
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                dataFilter: function(data, type) {
 | 
			
		||||
                    if (data == "0") return true;
 | 
			
		||||
                    else return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
		},
 | 
			
		||||
		configName:{
 | 
			
		||||
			required:true
 | 
			
		||||
		},
 | 
			
		||||
		configValue:{
 | 
			
		||||
			required:true
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	messages: {
 | 
			
		||||
        "configKey": {
 | 
			
		||||
            remote: "参数键名已经存在"
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
	submitHandler:function(form){
 | 
			
		||||
		update();
 | 
			
		||||
	}
 | 
			
		||||
});
 | 
			
		||||
function update() {
 | 
			
		||||
    _ajax_save(ctx + "system/config/save", $('#form-config-edit').serialize());
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -28,11 +28,11 @@ $("#form-dept-add").validate({
 | 
			
		|||
        }
 | 
			
		||||
    },
 | 
			
		||||
	submitHandler:function(form){
 | 
			
		||||
		update();
 | 
			
		||||
		add();
 | 
			
		||||
	}
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
function update() {
 | 
			
		||||
function add() {
 | 
			
		||||
	_ajax_save(ctx + "system/dept/save", $("#form-dept-add").serialize());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,6 +50,7 @@ $("#form-user-add").validate({
 | 
			
		|||
		},
 | 
			
		||||
		phonenumber:{
 | 
			
		||||
			required:true,
 | 
			
		||||
			isPhone:true,
 | 
			
		||||
            remote: {
 | 
			
		||||
                url: ctx + "system/user/checkPhoneUnique",
 | 
			
		||||
                type: "post",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,6 +29,7 @@ $("#form-user-edit").validate({
 | 
			
		|||
		},
 | 
			
		||||
		phonenumber:{
 | 
			
		||||
			required:true,
 | 
			
		||||
			isPhone:true,
 | 
			
		||||
            remote: {
 | 
			
		||||
                url: ctx + "system/user/checkPhoneUnique",
 | 
			
		||||
                type: "post",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,6 +26,7 @@
 | 
			
		|||
	<!-- jquery-validate 表单验证插件 -->
 | 
			
		||||
	<script src="../static/ajax/libs/validate/jquery.validate.min.js" th:src="@{/ajax/libs/validate/jquery.validate.min.js}"></script>
 | 
			
		||||
	<script src="../static/ajax/libs/validate/messages_zh.min.js" th:src="@{/ajax/libs/validate/messages_zh.min.js}"></script>
 | 
			
		||||
	<script src="../static/ajax/libs/validate/jquery.validate.extend.js" th:src="@{/ajax/libs/validate/jquery.validate.extend.js}"></script>
 | 
			
		||||
	<!-- jquery-validate 表单树插件 -->
 | 
			
		||||
	<script src="../static/ajax/libs/jqTreeGrid/jquery.treegrid.min.js" th:src="@{/ajax/libs/jqTreeGrid/jquery.treegrid.min.js}"></script>
 | 
			
		||||
	<script src="../static/ajax/libs/jqTreeGrid/jquery.treegrid.extension.js" th:src="@{/ajax/libs/jqTreeGrid/jquery.treegrid.extension.js}"></script>
 | 
			
		||||
| 
						 | 
				
			
			@ -33,8 +34,8 @@
 | 
			
		|||
	<script src="../static/ajax/libs/bootstrap-table/extensions/export/bootstrap-table-export.js" th:src="@{/ajax/libs/bootstrap-table/extensions/export/bootstrap-table-export.js}"></script>
 | 
			
		||||
	<script src="../static/ajax/libs/bootstrap-table/extensions/export/tableExport.js" th:src="@{/ajax/libs/bootstrap-table/extensions/export/tableExport.js}"></script>
 | 
			
		||||
	<script src="../static/ajax/libs/layer/layer.min.js" th:src="@{/ajax/libs/layer/layer.min.js}"></script>
 | 
			
		||||
	<script src="../static/ruoyi/js/common.js?v=1.1.3" th:src="@{/ruoyi/js/common.js?v=1.1.3}"></script>
 | 
			
		||||
	<script src="../static/ruoyi/js/ry-ui.js?v=1.1.3" th:src="@{/ruoyi/js/ry-ui.js?v=1.1.3}"></script>
 | 
			
		||||
	<script src="../static/ruoyi/js/common.js?v=1.1.4" th:src="@{/ruoyi/js/common.js?v=1.1.4}"></script>
 | 
			
		||||
	<script src="../static/ruoyi/js/ry-ui.js?v=1.1.4" th:src="@{/ruoyi/js/ry-ui.js?v=1.1.4}"></script>
 | 
			
		||||
	<script th:inline="javascript"> var ctx = [[@{/}]]; </script>
 | 
			
		||||
	<script src="http://tajs.qq.com/stats?sId=62048022"></script>
 | 
			
		||||
</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,7 +20,7 @@
 | 
			
		|||
        .nav > li:hover .dropdown-menu {display: block;}
 | 
			
		||||
    </style>
 | 
			
		||||
</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" th:classappend="${@configService.selectConfigByKey('sys.index.skinName')}">
 | 
			
		||||
<div id="wrapper">
 | 
			
		||||
 | 
			
		||||
    <!--左侧导航开始-->
 | 
			
		||||
| 
						 | 
				
			
			@ -96,7 +96,7 @@
 | 
			
		|||
            </button>
 | 
			
		||||
            <nav class="page-tabs menuTabs">
 | 
			
		||||
                <div class="page-tabs-content">
 | 
			
		||||
                    <a href="javascript:;" class="active menuTab">首页</a>
 | 
			
		||||
                    <a href="javascript:;" class="active menuTab" data-id="/system/main">首页</a>
 | 
			
		||||
                </div>
 | 
			
		||||
            </nav>
 | 
			
		||||
            <button class="roll-nav roll-right tabRight">
 | 
			
		||||
| 
						 | 
				
			
			@ -107,14 +107,15 @@
 | 
			
		|||
                    	页签操作<span class="caret"></span>
 | 
			
		||||
                </button>
 | 
			
		||||
                <ul role="menu" class="dropdown-menu dropdown-menu-right">
 | 
			
		||||
                    <li class="tabCloseAll"><a>全部关闭</a></li>
 | 
			
		||||
                    <li class="tabCloseOther"><a>关闭其他</a></li>
 | 
			
		||||
                     <li><a class="tabCloseCurrent" href="javascript:void();">关闭当前</a></li>
 | 
			
		||||
                     <li><a class="tabCloseOther" href="javascript:void();">关闭其他</a></li>
 | 
			
		||||
					 <li><a class="tabCloseAll" href="javascript:void();">全部关闭</a></li>
 | 
			
		||||
                </ul>
 | 
			
		||||
            </div>
 | 
			
		||||
            <a href="#" class="roll-nav roll-right tabReload"><i class="fa fa-refresh"></i> 刷新</a>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="row mainContent" id="content-main">
 | 
			
		||||
            <iframe class="RuoYi_iframe" name="iframe0" width="100%" height="100%"
 | 
			
		||||
            <iframe class="RuoYi_iframe" name="iframe0" width="100%" height="100%" data-id="/system/main"
 | 
			
		||||
                    th:src="@{/system/main}" frameborder="0" seamless></iframe>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="footer">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,7 @@
 | 
			
		|||
    <meta name="description" content="RuoYi">
 | 
			
		||||
    <link href="../static/css/bootstrap.min.css" th:href="@{css/bootstrap.min.css}" rel="stylesheet"/>
 | 
			
		||||
    <link href="../static/css/font-awesome.css" th:href="@{css/font-awesome.css}" rel="stylesheet"/>
 | 
			
		||||
    <link href="../static/css/style.min.css" th:href="@{css/style.min.css}" rel="stylesheet"/>
 | 
			
		||||
    <link href="../static/css/style.css" th:href="@{css/style.css}" rel="stylesheet"/>
 | 
			
		||||
    <link href="../static/css/login.min.css" th:href="@{css/login.min.css}" rel="stylesheet"/>
 | 
			
		||||
    <link href="../static/ajax/libs/iCheck/custom.css" th:href="@{/ajax/libs/iCheck/custom.css}" rel="stylesheet"/>
 | 
			
		||||
    <!--[if lt IE 9]>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,9 +75,9 @@
 | 
			
		|||
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="ibox-content">
 | 
			
		||||
                        <p><i class="fa fa-send-o"></i> 群:<a href="https://jq.qq.com/?_wv=1027&k=5HBAaYN" target="_blank">点击加入</a>
 | 
			
		||||
                        <p><i class="fa fa-send-o"></i> 官网:<a href="http://www.ruoyi.club" target="_blank">http://www.ruoyi.club</a>
 | 
			
		||||
                        </p>
 | 
			
		||||
                        <p><i class="fa fa-qq"></i> QQ:<a href="http://wpa.qq.com/msgrd?v=3&uin=346039442&site=qq&menu=yes" target="_blank">346039442</a>
 | 
			
		||||
                        <p><i class="fa fa-qq"></i> QQ群:<a href="https://jq.qq.com/?_wv=1027&k=5HBAaYN" target="_blank">1389287</a>
 | 
			
		||||
                        </p>
 | 
			
		||||
                        <p><i class="fa fa-weixin"></i> 微信:<a href="javascript:;">/ *若依</a>
 | 
			
		||||
                        </p>
 | 
			
		||||
| 
						 | 
				
			
			@ -94,13 +94,35 @@
 | 
			
		|||
                    <div class="ibox-content no-padding">
 | 
			
		||||
                        <div class="panel-body">
 | 
			
		||||
                            <div class="panel-group" id="version">
 | 
			
		||||
							    <div class="panel panel-default">
 | 
			
		||||
								<div class="panel-heading">
 | 
			
		||||
									   <h5 class="panel-title">
 | 
			
		||||
										   <a data-toggle="collapse" data-parent="#version" href="#v14">v1.1.4</a><code class="pull-right">2018.05.20</code>
 | 
			
		||||
									   </h5>
 | 
			
		||||
									</div>
 | 
			
		||||
									<div id="v14" class="panel-collapse collapse in">
 | 
			
		||||
										<div class="panel-body">
 | 
			
		||||
										   <ol>
 | 
			
		||||
												<li>新增参数管理</li>
 | 
			
		||||
												<li>修复头像上传bug</li>
 | 
			
		||||
												<li>手机邮箱唯一校验</li>
 | 
			
		||||
												<li>支持手机邮箱登录</li>
 | 
			
		||||
												<li>代码生成优化</li>
 | 
			
		||||
												<li>支持模糊查询</li>
 | 
			
		||||
												<li>支持切换主题皮肤</li>
 | 
			
		||||
												<li>修改权限即时生效</li>
 | 
			
		||||
												<li>修复页签Tab关闭问题</li>
 | 
			
		||||
											</ol>
 | 
			
		||||
										</div>
 | 
			
		||||
									</div>
 | 
			
		||||
								</div>
 | 
			
		||||
								<div class="panel panel-default">
 | 
			
		||||
								<div class="panel-heading">
 | 
			
		||||
									   <h5 class="panel-title">
 | 
			
		||||
										   <a data-toggle="collapse" data-parent="#version" href="#v13">v1.1.3</a><code class="pull-right">2018.05.14</code>
 | 
			
		||||
									   </h5>
 | 
			
		||||
									</div>
 | 
			
		||||
                                    <div id="v13" class="panel-collapse collapse in">
 | 
			
		||||
									<div id="v13" class="panel-collapse collapse">
 | 
			
		||||
										<div class="panel-body">
 | 
			
		||||
										   <ol>
 | 
			
		||||
												<li>新增验证码(数组计算、字符验证)</li>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,57 @@
 | 
			
		|||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
<meta charset="utf-8">
 | 
			
		||||
<head th:include="include :: header"></head>
 | 
			
		||||
<body class="white-bg">
 | 
			
		||||
    <div class="wrapper wrapper-content animated fadeInRight ibox-content">
 | 
			
		||||
        <form class="form-horizontal m" id="form-config-add">
 | 
			
		||||
        <div class="form-group">	
 | 
			
		||||
            <label class="col-sm-3 control-label">参数名称:</label>
 | 
			
		||||
            <div class="col-sm-8">
 | 
			
		||||
                <input id="configName" name="configName" class="form-control" type="text">
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="form-group">	
 | 
			
		||||
            <label class="col-sm-3 control-label">参数键名:</label>
 | 
			
		||||
            <div class="col-sm-8">
 | 
			
		||||
                <input id="configKey" name="configKey" class="form-control" type="text">
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="form-group">	
 | 
			
		||||
            <label class="col-sm-3 control-label">参数键值:</label>
 | 
			
		||||
            <div class="col-sm-8">
 | 
			
		||||
                <input id="configValue" name="configValue" class="form-control" type="text">
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="form-group">
 | 
			
		||||
			<label class="col-sm-3 control-label">系统内置:</label>
 | 
			
		||||
			<div class="col-sm-8">
 | 
			
		||||
                    <div class="radio radio-info radio-inline">
 | 
			
		||||
					<input type="radio" id="radio1" name="configType" value="Y" checked="">
 | 
			
		||||
					<label for="radio1">是</label>
 | 
			
		||||
				</div>
 | 
			
		||||
				<div class="radio radio-danger radio-inline">
 | 
			
		||||
					<input type="radio" id="radio2" name="configType" value="N">
 | 
			
		||||
					<label for="radio2">否</label>
 | 
			
		||||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
		<div class="form-group">	
 | 
			
		||||
            <label class="col-sm-3 control-label">备注:</label>
 | 
			
		||||
            <div class="col-sm-8">
 | 
			
		||||
                <textarea id="remark" name="remark" class="form-control"></textarea>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="form-group">
 | 
			
		||||
			<div class="form-control-static col-sm-offset-9">
 | 
			
		||||
				<button type="submit" class="btn btn-primary">提交</button>
 | 
			
		||||
				<button th:onclick="'javascript:layer_close()'" class="btn btn-danger" type="button">关闭</button>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
    </form>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div th:include="include::footer"></div>
 | 
			
		||||
    <script src="/ruoyi/system/config/add.js" th:src="@{/ruoyi/system/config/add.js}">
 | 
			
		||||
    </script>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
<!DOCTYPE html>
 | 
			
		||||
<html lang="zh_CN" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
 | 
			
		||||
<meta charset="utf-8">
 | 
			
		||||
<head th:include="include :: header"></head>
 | 
			
		||||
<body class="gray-bg">
 | 
			
		||||
    <div class="wrapper wrapper-content">
 | 
			
		||||
        <div class="btn-group hidden-xs" id="tableToolbar" role="group">
 | 
			
		||||
        <button type="button" class="btn btn-outline btn-default" th:onclick="'javascript:add()'" shiro:hasPermission="system:config:add">
 | 
			
		||||
            <i class="glyphicon glyphicon-plus"></i>
 | 
			
		||||
        </button>
 | 
			
		||||
        <button type="button" class="btn btn-outline btn-default" th:onclick="'javascript:batchRemove()'" shiro:hasPermission="system:config:batchRemove">
 | 
			
		||||
            <i class="glyphicon glyphicon-trash"></i>
 | 
			
		||||
        </button>
 | 
			
		||||
        </div>
 | 
			
		||||
        <table class="bootstrap-table" data-mobile-responsive="true">
 | 
			
		||||
        </table>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div th:include="include :: footer"></div>
 | 
			
		||||
    <script src="/ruoyi/system/config/config.js" th:src="@{/ruoyi/system/config/config.js}"></script>
 | 
			
		||||
    <script th:inline="javascript">
 | 
			
		||||
        var editFlag = [[${@permissionService.hasPermi('system:config:edit')}]];
 | 
			
		||||
        var removeFlag = [[${@permissionService.hasPermi('system:config:remove')}]];
 | 
			
		||||
    </script>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,58 @@
 | 
			
		|||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
<meta charset="utf-8">
 | 
			
		||||
<head th:include="include :: header"></head>
 | 
			
		||||
<body class="white-bg">
 | 
			
		||||
    <div class="wrapper wrapper-content animated fadeInRight ibox-content">
 | 
			
		||||
        <form class="form-horizontal m" id="form-config-edit">
 | 
			
		||||
            <input id="configId" name="configId" th:value="${config.configId}"  type="hidden">
 | 
			
		||||
            <div class="form-group">	
 | 
			
		||||
                <label class="col-sm-3 control-label">参数名称:</label>
 | 
			
		||||
                <div class="col-sm-8">
 | 
			
		||||
                    <input id="configName" name="configName" th:value="${config.configName}" class="form-control" type="text">
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="form-group">	
 | 
			
		||||
                <label class="col-sm-3 control-label">参数键名:</label>
 | 
			
		||||
                <div class="col-sm-8">
 | 
			
		||||
                    <input id="configKey" name="configKey" th:value="${config.configKey}" class="form-control" type="text">
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="form-group">	
 | 
			
		||||
                <label class="col-sm-3 control-label">参数键值:</label>
 | 
			
		||||
                <div class="col-sm-8">
 | 
			
		||||
                    <input id="configValue" name="configValue" th:value="${config.configValue}" class="form-control" type="text">
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
			<div class="form-group">
 | 
			
		||||
				<label class="col-sm-3 control-label">系统内置:</label>
 | 
			
		||||
				<div class="col-sm-8">
 | 
			
		||||
					<div class="radio radio-info radio-inline">
 | 
			
		||||
						<input type="radio" id="radio1" th:field="*{config.configType}" name="configType" value="Y">
 | 
			
		||||
						<label for="radio1">是</label>
 | 
			
		||||
					</div>
 | 
			
		||||
					<div class="radio radio-danger radio-inline">
 | 
			
		||||
						<input type="radio" id="radio2" th:field="*{config.configType}" name="configType" value="N">
 | 
			
		||||
						<label for="radio2">否</label>
 | 
			
		||||
					</div>
 | 
			
		||||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
			<div class="form-group">	
 | 
			
		||||
	            <label class="col-sm-3 control-label">备注:</label>
 | 
			
		||||
	            <div class="col-sm-8">
 | 
			
		||||
	                <textarea id="remark" name="remark" class="form-control">[[${config.remark}]]</textarea>
 | 
			
		||||
	            </div>
 | 
			
		||||
	        </div>
 | 
			
		||||
            <div class="form-group">
 | 
			
		||||
				<div class="form-control-static col-sm-offset-9">
 | 
			
		||||
					<button type="submit" class="btn btn-primary">提交</button>
 | 
			
		||||
					<button th:onclick="'javascript:layer_close()'" class="btn btn-danger" type="button">关闭</button>
 | 
			
		||||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
    	</form>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div th:include="include::footer"></div>
 | 
			
		||||
    <script src="/ruoyi/system/config/edit.js" th:src="@{/ruoyi/system/config/edit.js}">
 | 
			
		||||
    </script>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
| 
						 | 
				
			
			@ -30,7 +30,7 @@
 | 
			
		|||
			<div class="form-group">
 | 
			
		||||
				<label class="col-sm-3 control-label">密码:</label>
 | 
			
		||||
				<div class="col-sm-8">
 | 
			
		||||
					<input class="form-control" type="password" name="password" id="password">
 | 
			
		||||
					<input class="form-control" type="password" name="password" id="password" th:value="${@configService.selectConfigByKey('sys.user.initPassword')}">
 | 
			
		||||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
			<div class="form-group">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -67,11 +67,54 @@
 | 
			
		|||
				},
 | 
			
		||||
				email:{
 | 
			
		||||
					required:true,
 | 
			
		||||
					email:true
 | 
			
		||||
		            email:true,
 | 
			
		||||
		            remote: {
 | 
			
		||||
		                url: ctx + "system/user/checkEmailUnique",
 | 
			
		||||
		                type: "post",
 | 
			
		||||
		                dataType: "json",
 | 
			
		||||
		                data: {
 | 
			
		||||
		                	"userId": function() {
 | 
			
		||||
		                        return $("input[name='userId']").val();
 | 
			
		||||
		                    },
 | 
			
		||||
		        			"email": function() {
 | 
			
		||||
		                        return $("input[name='email']").val();
 | 
			
		||||
		                    }
 | 
			
		||||
		                },
 | 
			
		||||
		                dataFilter: function (data, type) {
 | 
			
		||||
		                    if (data == "0") return true;
 | 
			
		||||
		                    else return false;
 | 
			
		||||
		                }
 | 
			
		||||
		            }
 | 
			
		||||
				},
 | 
			
		||||
				phonenumber:{
 | 
			
		||||
					required:true,
 | 
			
		||||
					isPhone:true,
 | 
			
		||||
		            remote: {
 | 
			
		||||
		                url: ctx + "system/user/checkPhoneUnique",
 | 
			
		||||
		                type: "post",
 | 
			
		||||
		                dataType: "json",
 | 
			
		||||
		                data: {
 | 
			
		||||
		                	"userId": function() {
 | 
			
		||||
		                        return $("input[name='userId']").val();
 | 
			
		||||
		                    },
 | 
			
		||||
		        			"phonenumber": function() {
 | 
			
		||||
		                        return $("input[name='phonenumber']").val();
 | 
			
		||||
		                    }
 | 
			
		||||
		                },
 | 
			
		||||
		                dataFilter: function (data, type) {
 | 
			
		||||
		                    if (data == "0") return true;
 | 
			
		||||
		                    else return false;
 | 
			
		||||
		                }
 | 
			
		||||
		            }
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			messages: {
 | 
			
		||||
				"email": {
 | 
			
		||||
		            remote: "Email已经存在"
 | 
			
		||||
		        },
 | 
			
		||||
				"phonenumber":{
 | 
			
		||||
		        	remote: "手机号码已经存在"
 | 
			
		||||
				}
 | 
			
		||||
		    },
 | 
			
		||||
			submitHandler:function(form){
 | 
			
		||||
				update();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,8 +16,9 @@
 | 
			
		|||
#end
 | 
			
		||||
#end
 | 
			
		||||
			<div class="form-group">
 | 
			
		||||
            <div class="col-sm-8 col-sm-offset-3">
 | 
			
		||||
				<div class="form-control-static col-sm-offset-9">
 | 
			
		||||
					<button type="submit" class="btn btn-primary">提交</button>
 | 
			
		||||
					<button th:onclick="'javascript:layer_close()'" class="btn btn-danger" type="button">关闭</button>
 | 
			
		||||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
		</form>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,9 +17,9 @@
 | 
			
		|||
#end
 | 
			
		||||
#end
 | 
			
		||||
			<div class="form-group">
 | 
			
		||||
                <div class="col-sm-8 col-sm-offset-3">
 | 
			
		||||
				<div class="form-control-static col-sm-offset-9">
 | 
			
		||||
					<button type="submit" class="btn btn-primary">提交</button>
 | 
			
		||||
                </div>
 | 
			
		||||
					<button th:onclick="'javascript:layer_close()'" class="btn btn-danger" type="button">关闭</button>
 | 
			
		||||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
		</form>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,8 +42,8 @@ public class ${className}Controller extends BaseController
 | 
			
		|||
	/**
 | 
			
		||||
	 * 查询${tableComment}列表
 | 
			
		||||
	 */
 | 
			
		||||
	@GetMapping("/list")
 | 
			
		||||
	@RequiresPermissions("${moduleName}:${classname}:list")
 | 
			
		||||
	@GetMapping("/list")
 | 
			
		||||
	@ResponseBody
 | 
			
		||||
	public TableDataInfo list(${className} ${classname})
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -55,8 +55,8 @@ public class ${className}Controller extends BaseController
 | 
			
		|||
	/**
 | 
			
		||||
	 * 新增${tableComment}
 | 
			
		||||
	 */
 | 
			
		||||
	@GetMapping("/add")
 | 
			
		||||
	@RequiresPermissions("${moduleName}:${classname}:add")
 | 
			
		||||
	@GetMapping("/add")
 | 
			
		||||
	public String add()
 | 
			
		||||
	{
 | 
			
		||||
	    return prefix + "/add";
 | 
			
		||||
| 
						 | 
				
			
			@ -65,8 +65,8 @@ public class ${className}Controller extends BaseController
 | 
			
		|||
	/**
 | 
			
		||||
	 * 修改${tableComment}
 | 
			
		||||
	 */
 | 
			
		||||
	@GetMapping("/edit/{${primaryKey.attrname}}")
 | 
			
		||||
	@RequiresPermissions("${moduleName}:${classname}:edit")
 | 
			
		||||
	@GetMapping("/edit/{${primaryKey.attrname}}")
 | 
			
		||||
	public String edit(@PathVariable("${primaryKey.attrname}") ${primaryKey.attrType} ${primaryKey.attrname}, Model model)
 | 
			
		||||
	{
 | 
			
		||||
		${className} ${classname} = ${classname}Service.select${className}ById(${primaryKey.attrname});
 | 
			
		||||
| 
						 | 
				
			
			@ -77,9 +77,9 @@ public class ${className}Controller extends BaseController
 | 
			
		|||
	/**
 | 
			
		||||
	 * 保存${tableComment}
 | 
			
		||||
	 */
 | 
			
		||||
	@RequiresPermissions("${moduleName}:${classname}:save")
 | 
			
		||||
	PostMapping("/save")
 | 
			
		||||
	@ResponseBody
 | 
			
		||||
	@PostMapping("/save")
 | 
			
		||||
	@RequiresPermissions("${moduleName}:${classname}:add")
 | 
			
		||||
	public Message save(${className} ${classname})
 | 
			
		||||
	{
 | 
			
		||||
		if (${classname}Service.save${className}(${classname}) > 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -92,9 +92,9 @@ public class ${className}Controller extends BaseController
 | 
			
		|||
	/**
 | 
			
		||||
	 * 删除${tableComment}
 | 
			
		||||
	 */
 | 
			
		||||
	@RequiresPermissions("${moduleName}:${classname}:remove")
 | 
			
		||||
	@PostMapping( "/remove/{${primaryKey.attrname}}")
 | 
			
		||||
	@ResponseBody
 | 
			
		||||
	@RequiresPermissions("${moduleName}:${classname}:remove")
 | 
			
		||||
	public Message remove(@PathVariable("${primaryKey.attrname}") ${primaryKey.attrType} ${primaryKey.attrname})
 | 
			
		||||
	{
 | 
			
		||||
		if (${classname}Service.delete${className}ById(${primaryKey.attrname}) > 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -107,9 +107,9 @@ public class ${className}Controller extends BaseController
 | 
			
		|||
	/**
 | 
			
		||||
	 * 批量删除${tableComment}
 | 
			
		||||
	 */
 | 
			
		||||
	@RequiresPermissions("${moduleName}:${classname}:batchRemove")
 | 
			
		||||
	@PostMapping( "/batchRemove")
 | 
			
		||||
	@ResponseBody
 | 
			
		||||
	@RequiresPermissions("${moduleName}:${classname}:batchRemove")
 | 
			
		||||
	public Message remove(@RequestParam("ids[]") ${primaryKey.attrType}[] ${primaryKey.attrname}s)
 | 
			
		||||
	{
 | 
			
		||||
		int rows = ${classname}Service.batchDelete${className}(${primaryKey.attrname}s);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,7 @@ import java.math.BigDecimal;
 | 
			
		|||
#end
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * ${tableName} ${tableComment}
 | 
			
		||||
 * ${tableComment}表 ${tableName}
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ${author}
 | 
			
		||||
 * @date ${datetime}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,10 +5,10 @@ $("#form-${classname}-edit").validate({
 | 
			
		|||
		},
 | 
			
		||||
	},
 | 
			
		||||
	submitHandler:function(form){
 | 
			
		||||
		edit();
 | 
			
		||||
		update();
 | 
			
		||||
	}
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
function edit() {
 | 
			
		||||
function update() {
 | 
			
		||||
    _ajax_save(ctx + "${moduleName}/${classname}/save", $('#form-${classname}-edit').serialize());
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -28,14 +28,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		|||
        insert into ${tableName} (
 | 
			
		||||
#foreach($column in $columns)
 | 
			
		||||
#if($column.columnName != $primaryKey.columnName || $primaryKey.extra != 'auto_increment')
 | 
			
		||||
$column.columnName#if($velocityCount != $columns.size()), #end
 | 
			
		||||
			<if test="$column.attrname != null and $column.attrname != '' ">$column.columnName#if($velocityCount != $columns.size()), #end</if>
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
)
 | 
			
		||||
        values (
 | 
			
		||||
        )values(
 | 
			
		||||
#foreach($column in $columns)
 | 
			
		||||
#if($column.columnName != $primaryKey.columnName || $primaryKey.extra != 'auto_increment')
 | 
			
		||||
#{$column.attrname}#if($velocityCount != $columns.size()), #end
 | 
			
		||||
			<if test="$column.attrname != null and $column.attrname != ''">#{$column.attrname}#if($velocityCount != $columns.size()), #end</if>
 | 
			
		||||
#end			
 | 
			
		||||
#end
 | 
			
		||||
		)
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +45,7 @@ $column.columnName#if($velocityCount != $columns.size()), #end
 | 
			
		|||
        <set>
 | 
			
		||||
#foreach($column in $columns)
 | 
			
		||||
#if($column.columnName != $primaryKey.columnName)
 | 
			
		||||
            <if test="$column.attrname != null">$column.columnName = #{$column.attrname}#if($velocityCount != $columns.size()), #end</if>
 | 
			
		||||
            <if test="$column.attrname != null and $column.attrname != ''">$column.columnName = #{$column.attrname}#if($velocityCount != $columns.size()), #end</if>
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
        </set>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue