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) | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										25
									
								
								pom.xml
								
								
								
								
							
							
						
						
									
										25
									
								
								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.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 = '定时任务调度日志表'; | ||||
|  | @ -56,7 +56,11 @@ 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; | ||||
| 
 | ||||
| /** | ||||
|  | @ -19,7 +22,7 @@ public class ShiroUtils | |||
|     { | ||||
|         return SecurityUtils.getSubject(); | ||||
|     } | ||||
|      | ||||
| 
 | ||||
|     public static Session getSession() | ||||
|     { | ||||
|         return SecurityUtils.getSubject().getSession(); | ||||
|  | @ -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; | ||||
|  | @ -36,10 +38,10 @@ import com.ruoyi.project.system.user.domain.User; | |||
| public class UserRealm extends AuthorizingRealm | ||||
| { | ||||
|     private static final Logger log = LoggerFactory.getLogger(UserRealm.class); | ||||
|      | ||||
| 
 | ||||
|     @Autowired | ||||
|     private IMenuService menuService; | ||||
|      | ||||
| 
 | ||||
|     @Autowired | ||||
|     private IRoleService roleService; | ||||
| 
 | ||||
|  | @ -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
											
										
									
								
							|  | @ -365,10 +365,14 @@ $(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,16 +94,38 @@ | |||
|                     <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="#v13">v1.1.3</a><code class="pull-right">2018.05.14</code> | ||||
|                                             </h5> | ||||
|                                     </div> | ||||
|                                     <div id="v13" class="panel-collapse collapse in"> | ||||
|                                         <div class="panel-body"> | ||||
|                                             <ol> | ||||
|                                             	<li>新增验证码(数组计算、字符验证)</li> | ||||
| 							    <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"> | ||||
| 										<div class="panel-body"> | ||||
| 										   <ol> | ||||
| 												<li>新增验证码(数组计算、字符验证)</li> | ||||
| 												<li>新增cookie记住我</li> | ||||
| 												<li>新增头像上传</li> | ||||
| 												<li>用户名密码长度限制</li> | ||||
|  | @ -111,15 +133,15 @@ | |||
| 												<li>支持自定义条件查询</li> | ||||
| 												<li>部门名称必填、时间格式调整</li> | ||||
| 												<li>其他细节优化</li> | ||||
|                                             </ol> | ||||
|                                         </div> | ||||
|                                     </div> | ||||
|                                 </div> | ||||
|                             <div class="panel panel-default"> | ||||
| 											</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="#v12">v1.1.2</a><code class="pull-right">2018.05.07</code> | ||||
|                                             </h5> | ||||
| 											<a data-toggle="collapse" data-parent="#version" href="#v12">v1.1.2</a><code class="pull-right">2018.05.07</code> | ||||
| 										</h5> | ||||
|                                     </div> | ||||
|                                     <div id="v12" class="panel-collapse collapse"> | ||||
|                                         <div class="panel-body"> | ||||
|  | @ -140,8 +162,8 @@ | |||
|                                 <div class="panel panel-default"> | ||||
|                             	<div class="panel-heading"> | ||||
|                                         <h5 class="panel-title"> | ||||
|                                                 <a data-toggle="collapse" data-parent="#version" href="#v11">v1.1.1</a><code class="pull-right">2018.04.23</code> | ||||
|                                             </h5> | ||||
| 											<a data-toggle="collapse" data-parent="#version" href="#v11">v1.1.1</a><code class="pull-right">2018.04.23</code> | ||||
| 										</h5> | ||||
|                                     </div> | ||||
|                                     <div id="v11" class="panel-collapse collapse"> | ||||
|                                         <div class="panel-body"> | ||||
|  | @ -159,8 +181,8 @@ | |||
|                                 <div class="panel panel-default"> | ||||
|                             	<div class="panel-heading"> | ||||
|                                         <h5 class="panel-title"> | ||||
|                                                 <a data-toggle="collapse" data-parent="#version" href="#v10">v1.1.0</a><code class="pull-right">2018.04.20</code> | ||||
|                                             </h5> | ||||
| 											<a data-toggle="collapse" data-parent="#version" href="#v10">v1.1.0</a><code class="pull-right">2018.04.20</code> | ||||
| 										</h5> | ||||
|                                     </div> | ||||
|                                     <div id="v10" class="panel-collapse collapse"> | ||||
|                                         <div class="panel-body"> | ||||
|  | @ -179,8 +201,8 @@ | |||
|                                 <div class="panel panel-default"> | ||||
|                             	<div class="panel-heading"> | ||||
|                                         <h5 class="panel-title"> | ||||
|                                                 <a data-toggle="collapse" data-parent="#version" href="#v09">v1.0.9</a><code class="pull-right">2018.04.14</code> | ||||
|                                             </h5> | ||||
| 											<a data-toggle="collapse" data-parent="#version" href="#v09">v1.0.9</a><code class="pull-right">2018.04.14</code> | ||||
| 										</h5> | ||||
|                                     </div> | ||||
|                                     <div id="v09" class="panel-collapse collapse"> | ||||
|                                         <div class="panel-body"> | ||||
|  | @ -194,8 +216,8 @@ | |||
| 								<div class="panel panel-default"> | ||||
|                             	<div class="panel-heading"> | ||||
|                                         <h5 class="panel-title"> | ||||
|                                                 <a data-toggle="collapse" data-parent="#version" href="#v08">v1.0.8</a><code class="pull-right">2018.04.08</code> | ||||
|                                             </h5> | ||||
| 											<a data-toggle="collapse" data-parent="#version" href="#v08">v1.0.8</a><code class="pull-right">2018.04.08</code> | ||||
| 										</h5> | ||||
|                                     </div> | ||||
|                                     <div id="v08" class="panel-collapse collapse"> | ||||
|                                         <div class="panel-body"> | ||||
|  | @ -209,8 +231,8 @@ | |||
|                             	<div class="panel panel-default"> | ||||
|                             	<div class="panel-heading"> | ||||
|                                         <h5 class="panel-title"> | ||||
|                                                 <a data-toggle="collapse" data-parent="#version" href="#v07">v1.0.7</a><code class="pull-right">2018.04.04</code> | ||||
|                                             </h5> | ||||
| 											<a data-toggle="collapse" data-parent="#version" href="#v07">v1.0.7</a><code class="pull-right">2018.04.04</code> | ||||
| 										</h5> | ||||
|                                     </div> | ||||
|                                     <div id="v07" class="panel-collapse collapse"> | ||||
|                                         <div class="panel-body"> | ||||
|  | @ -224,8 +246,8 @@ | |||
| 								<div class="panel panel-default"> | ||||
|                             	<div class="panel-heading"> | ||||
|                                         <h5 class="panel-title"> | ||||
|                                                 <a data-toggle="collapse" data-parent="#version" href="#v06">v1.0.6</a><code class="pull-right">2018.03.15</code> | ||||
|                                             </h5> | ||||
| 											<a data-toggle="collapse" data-parent="#version" href="#v06">v1.0.6</a><code class="pull-right">2018.03.15</code> | ||||
| 										</h5> | ||||
|                                     </div> | ||||
|                                     <div id="v06" class="panel-collapse collapse"> | ||||
|                                         <div class="panel-body"> | ||||
|  | @ -240,8 +262,8 @@ | |||
| 								<div class="panel panel-default"> | ||||
|                             	<div class="panel-heading"> | ||||
|                                         <h5 class="panel-title"> | ||||
|                                                 <a data-toggle="collapse" data-parent="#version" href="#v05">v1.0.5</a><code class="pull-right">2018.03.12</code> | ||||
|                                             </h5> | ||||
| 											<a data-toggle="collapse" data-parent="#version" href="#v05">v1.0.5</a><code class="pull-right">2018.03.12</code> | ||||
| 										</h5> | ||||
|                                     </div> | ||||
|                                     <div id="v05" class="panel-collapse collapse"> | ||||
|                                         <div class="panel-body"> | ||||
|  | @ -255,8 +277,8 @@ | |||
| 								<div class="panel panel-default"> | ||||
|                             	<div class="panel-heading"> | ||||
|                                         <h5 class="panel-title"> | ||||
|                                                 <a data-toggle="collapse" data-parent="#version" href="#v04">v1.0.4</a><code class="pull-right">2018.03.11</code> | ||||
|                                             </h5> | ||||
| 											<a data-toggle="collapse" data-parent="#version" href="#v04">v1.0.4</a><code class="pull-right">2018.03.11</code> | ||||
| 										</h5> | ||||
|                                     </div> | ||||
|                                     <div id="v04" class="panel-collapse collapse"> | ||||
|                                         <div class="panel-body"> | ||||
|  | @ -269,8 +291,8 @@ | |||
| 								<div class="panel panel-default"> | ||||
|                             	<div class="panel-heading"> | ||||
|                                         <h5 class="panel-title"> | ||||
|                                                 <a data-toggle="collapse" data-parent="#version" href="#v03">v1.0.3</a><code class="pull-right">2018.03.08</code> | ||||
|                                             </h5> | ||||
| 											<a data-toggle="collapse" data-parent="#version" href="#v03">v1.0.3</a><code class="pull-right">2018.03.08</code> | ||||
| 										</h5> | ||||
|                                     </div> | ||||
|                                     <div id="v03" class="panel-collapse collapse"> | ||||
|                                         <div class="panel-body"> | ||||
|  | @ -283,8 +305,8 @@ | |||
|                             	<div class="panel panel-default"> | ||||
|                             	<div class="panel-heading"> | ||||
|                                         <h5 class="panel-title"> | ||||
|                                                 <a data-toggle="collapse" data-parent="#version" href="#v02">v1.0.2</a><code class="pull-right">2018.03.04</code> | ||||
|                                             </h5> | ||||
| 											<a data-toggle="collapse" data-parent="#version" href="#v02">v1.0.2</a><code class="pull-right">2018.03.04</code> | ||||
| 										</h5> | ||||
|                                     </div> | ||||
|                                     <div id="v02" class="panel-collapse collapse"> | ||||
|                                         <div class="panel-body"> | ||||
|  | @ -297,8 +319,8 @@ | |||
|                                 <div class="panel panel-default"> | ||||
|                                     <div class="panel-heading"> | ||||
|                                         <h5 class="panel-title"> | ||||
|                                                 <a data-toggle="collapse" data-parent="#version" href="#v01">v1.0.1</a><code class="pull-right">2018.03.03</code> | ||||
|                                             </h5> | ||||
| 											<a data-toggle="collapse" data-parent="#version" href="#v01">v1.0.1</a><code class="pull-right">2018.03.03</code> | ||||
| 										</h5> | ||||
|                                     </div> | ||||
|                                     <div id="v01" class="panel-collapse collapse"> | ||||
|                                         <div class="panel-body"> | ||||
|  |  | |||
|  | @ -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> | ||||
|  | @ -56,12 +56,12 @@ | |||
| 				</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 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> | ||||
| 		</div> | ||||
| 		</form> | ||||
| 	</div> | ||||
| 	<div th:include="include::footer"></div> | ||||
|  |  | |||
|  | @ -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,12 +67,55 @@ | |||
| 				}, | ||||
| 				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(); | ||||
| 			} | ||||
|  |  | |||
|  | @ -5,23 +5,24 @@ | |||
| <body class="white-bg"> | ||||
|     <div class="wrapper wrapper-content animated fadeInRight ibox-content"> | ||||
|         <form class="form-horizontal m" id="form-${classname}-add"> | ||||
|         #foreach($column in $columns) | ||||
|         #if($column.columnName != $primaryKey.columnName) | ||||
|         <div class="form-group">	 | ||||
|             <label class="col-sm-3 control-label">${column.columnComment}:</label> | ||||
|             <div class="col-sm-8"> | ||||
|                 <input id="${column.attrname}" name="${column.attrname}" class="form-control" type="text"> | ||||
|             </div> | ||||
|         </div> | ||||
|         #end | ||||
|         #end | ||||
|         <div class="form-group"> | ||||
|             <div class="col-sm-8 col-sm-offset-3"> | ||||
|                 <button type="submit" class="btn btn-primary">提交</button> | ||||
|             </div> | ||||
|         </div> | ||||
|     </form> | ||||
|     </div> | ||||
| #foreach($column in $columns) | ||||
| #if($column.columnName != $primaryKey.columnName) | ||||
| 			<div class="form-group">	 | ||||
| 				<label class="col-sm-3 control-label">${column.columnComment}:</label> | ||||
| 				<div class="col-sm-8"> | ||||
| 					<input id="${column.attrname}" name="${column.attrname}" class="form-control" type="text"> | ||||
| 				</div> | ||||
| 			</div> | ||||
| #end | ||||
| #end | ||||
| 			<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/${moduleName}/${classname}/add.js" th:src="@{/ruoyi/${moduleName}/${classname}/add.js}"> | ||||
|     </script> | ||||
|  |  | |||
|  | @ -6,23 +6,23 @@ | |||
|     <div class="wrapper wrapper-content animated fadeInRight ibox-content"> | ||||
|         <form class="form-horizontal m" id="form-${classname}-edit"> | ||||
|             <input id="${primaryKey.attrname}" name="${primaryKey.attrname}" th:value="${${classname}.${primaryKey.attrname}}"  type="hidden"> | ||||
|             #foreach($column in $columns) | ||||
|             #if($column.columnName != $primaryKey.columnName) | ||||
| #foreach($column in $columns) | ||||
| #if($column.columnName != $primaryKey.columnName) | ||||
|             <div class="form-group">	 | ||||
|                 <label class="col-sm-3 control-label">${column.columnComment}:</label> | ||||
|                 <div class="col-sm-8"> | ||||
|                     <input id="${column.attrname}" name="${column.attrname}" th:value="${${classname}.${column.attrname}}" class="form-control" type="text"> | ||||
|                 </div> | ||||
|             </div> | ||||
|             #end | ||||
|             #end | ||||
|             <div class="form-group"> | ||||
|                 <div class="col-sm-8 col-sm-offset-3"> | ||||
|                     <button type="submit" class="btn btn-primary">提交</button> | ||||
|                 </div> | ||||
|             </div> | ||||
|             </div> | ||||
|         </form> | ||||
| #end | ||||
| #end | ||||
| 			<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/${moduleName}/${classname}/edit.js" th:src="@{/ruoyi/${moduleName}/${classname}/edit.js}"> | ||||
|  |  | |||
|  | @ -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()); | ||||
| } | ||||
|  | @ -4,12 +4,12 @@ $(function() { | |||
| 	var columns = [{ | ||||
|             checkbox: true | ||||
|         }, | ||||
| 		#foreach($column in $columns) | ||||
| #foreach($column in $columns) | ||||
| 		{ | ||||
| 			field : '${column.attrname}',  | ||||
| 			title : '${column.columnComment}'  | ||||
| 		}, | ||||
| 		#end | ||||
| #end | ||||
|         { | ||||
|             title: '操作', | ||||
|             align: 'center', | ||||
|  |  | |||
|  | @ -5,40 +5,39 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||
| <mapper namespace="${package}.mapper.${className}Mapper"> | ||||
|      | ||||
|     <resultMap type="${className}" id="${className}Result"> | ||||
|         #foreach ($column in $columns) | ||||
| #foreach ($column in $columns) | ||||
|         <result property="${column.attrname}"    column="${column.columnName}"    /> | ||||
|         #end | ||||
| #end | ||||
|     </resultMap> | ||||
|      | ||||
|     <select id="select${className}ById" parameterType="${primaryKey.attrType}" resultMap="${className}Result"> | ||||
|         select #foreach($column in $columns) $column.columnName #if($velocityCount != $columns.size()),#end#end from ${tableName} | ||||
|         select#foreach($column in $columns) $column.columnName#if($velocityCount != $columns.size()),#end#end from ${tableName} | ||||
|         where ${primaryKey.columnName} = #{${primaryKey.attrname}} | ||||
|     </select> | ||||
|      | ||||
|     <select id="select${className}List" parameterType="${className}" resultMap="${className}Result"> | ||||
|         select #foreach($column in $columns) $column.columnName #if($velocityCount != $columns.size()),#end#end from ${tableName} | ||||
|         select#foreach($column in $columns) $column.columnName#if($velocityCount != $columns.size()),#end#end from ${tableName} | ||||
|         <where>   | ||||
|             #foreach($column in $columns) | ||||
|             <if test="$column.attrname != null and $column.attrname.trim() != ''"> and $column.columnName = #{$column.attrname} </if> | ||||
|             #end | ||||
| #foreach($column in $columns) | ||||
|             <if test="$column.attrname != null and $column.attrname.trim() != ''"> and $column.columnName = #{$column.attrname}</if> | ||||
|  #end | ||||
|         </where> | ||||
|     </select> | ||||
|      | ||||
|     <insert id="insert${className}" parameterType="${className}"#if($primaryKey.extra == 'auto_increment') useGeneratedKeys="true" keyProperty="$primaryKey.attrname"#end> | ||||
|         insert into ${tableName} ( | ||||
|                 #foreach($column in $columns) | ||||
| #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 ( | ||||
|                 #foreach($column in $columns) | ||||
|         )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 | ||||
| ) | ||||
| 		) | ||||
|     </insert> | ||||
| 	  | ||||
|     <update id="update${className}" parameterType="${className}"> | ||||
|  | @ -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
	
	 RuoYi
						RuoYi