223 Commits
Author SHA1 Message Date
RuoYi 7913796730 若依3.3 2019-04-01 08:34:44 +08:00
RuoYi 87b7e8665a 若依3.3 2019-03-31 12:56:04 +08:00
RuoYi 7e67c233dc 表单生成html多行文本不能识别问题 2019-03-25 20:02:12 +08:00
RuoYi 0cec24d90b 集成组件beanutils 2019-03-20 20:58:41 +08:00
RuoYi 6874736a20 增加rootIdValue配置项可指定根节点 2019-03-19 11:47:33 +08:00
RuoYi cd199be6aa 添加新群号 2019-03-18 11:55:21 +08:00
dhx920and若依 fc51f0ce80 !79 修正DynamicDataSourceContextHolder类中三处DataSource拼写错误
Merge pull request !79 from dhx920/master
2019-03-18 11:18:31 +08:00
dhx920 316b126c8f 修正DynamicDataSourceContextHolder类中三处DataSource拼写错误 2019-03-18 11:08:41 +08:00
RuoYi f7a9f33882 按下不触发校验,防止造成资源浪费 2019-03-17 22:27:44 +08:00
RuoYi a805d23afe 权限错误消息提醒添加注释,方便理解 2019-03-17 22:14:37 +08:00
RuoYi fb2887b3bf 修复菜单为“目录”,perms字段保存为NULL编辑角色权限问题 2019-03-17 21:26:01 +08:00
RuoYi 92d98a2a6e 修复IE浏览器导出功能报错 2019-03-17 20:52:45 +08:00
RuoYi d066bf022b 菜单表格树第一级默认不展开 2019-03-17 19:47:35 +08:00
RuoYi e26b65459e 线程异常打印方法移入工具类 2019-03-15 19:02:28 +08:00
RuoYi 00a661e325 捕获线程池执行任务抛出的异常 2019-03-15 18:19:23 +08:00
geekymvand若依 975829f2c0 !78 记录异常日志(默认情况下,线程池会捕获任务抛出的所有异常,但是不做任何处理)
Merge pull request !78 from geekymv/master
2019-03-15 18:14:26 +08:00
RuoYi 9bf809061e 权限校验失败 如果请求为ajax返回json,普通请求跳转页面 2019-03-14 19:41:26 +08:00
geekymv c9dad631df 记录异常日志(默认情况下,线程池会捕获任务抛出的所有异常,但是不做任何处理) 2019-03-13 22:14:03 +08:00
RuoYi 47f5d7a7b7 定时任务导出增加并发执行字段 2019-03-13 20:24:12 +08:00
RuoYi e34b4ea63d 定时任务支持并发控制 2019-03-13 19:45:12 +08:00
RuoYi 9fc42511c6 datetimepicker 汉化 2019-03-13 13:52:09 +08:00
RuoYi c9bd08c2de 修复定时任务执行失败后入库状态为成功 2019-03-13 13:41:40 +08:00
RuoYi 4b8d64f16f 启用点击选中行 2019-03-13 12:41:29 +08:00
RuoYi 32e2e212a7 事务由Controller迁移到Service 2019-03-09 22:21:09 +08:00
RuoYi aa478f2bd6 增加日期控件显示类型及回显格式扩展选项 2019-03-09 21:29:19 +08:00
RuoYi d27d739558 代码生成配置classpath引用文件 2019-03-09 21:14:55 +08:00
RuoYi 4f84560710 修复字典值为0/1时无法输出问题 2019-03-08 16:31:02 +08:00
RuoYi 29e20870fc 调整部分包路径 2019-03-08 16:11:24 +08:00
RuoYi a9f378218b 默认显示Sql监控 2019-03-08 15:25:24 +08:00
RuoYi 9531875401 调整部分包路径 2019-03-08 14:44:38 +08:00
RuoYi 1b193bcc65 关闭选项卡激活滚动 2019-03-07 13:48:40 +08:00
RuoYi 2d32b0d9c2 新增分页跳转到指定页码 2019-03-07 12:57:15 +08:00
RuoYi f1ba270a47 去除多余注释 2019-03-05 22:57:53 +08:00
RuoYi 8a2bba86eb 新增表格销毁方法 2019-03-05 15:51:15 +08:00
RuoYi 9ad6c1b998 更换prompt名称 2019-03-05 15:29:13 +08:00
流光and若依 eca0b9f89b !74 修复 @Excel 注解 prompt 属性使用报错
Merge pull request !74 from 流光/master
2019-03-05 14:52:18 +08:00
RuoYi 536ee476cb 修复在firefox浏览器显示高度问题 2019-03-05 14:42:23 +08:00
stickdream 67b5ff894e 修复@Excel注解 prompt 属性使用报错 2019-03-03 00:56:52 +08:00
RuoYi a469435499 数据被加载触发工具条按钮禁用/启用 2019-03-01 16:03:23 +08:00
RuoYi 1d01d20b49 Ztree树结构优化 2019-03-01 15:26:04 +08:00
RuoYi 161c0f1a67 更新readme 2019-02-28 23:06:00 +08:00
RuoYi b554c46825 手机端自适应优化 2019-02-28 20:52:07 +08:00
RuoYi 402fc9c4eb 文本框、下拉框、时间控件宽度调整 2019-02-28 20:05:12 +08:00
RuoYi a0f07f786a 新增下拉按钮切换 2019-02-28 16:23:09 +08:00
RuoYi 8a37d2ae24 检查字符,防止注入绕过 2019-02-28 13:03:02 +08:00
RuoYi 9c50dd8c2d 添加druid白名单 2019-02-28 12:12:21 +08:00
RuoYi 807b723116 修复界面存在的一些安全问题 2019-02-27 12:29:03 +08:00
RuoYi d399160a0b 表格ID自定义及默认值修改,合并editTree到edit 2019-02-26 16:10:49 +08:00
RuoYi dacf0bfe66 添加表格的高度 2019-02-25 20:02:01 +08:00
RuoYi cf1b00c409 添加表头样式 2019-02-25 15:55:42 +08:00
RuoYi b033c858b8 表单验证优化 2019-02-25 13:19:06 +08:00
RuoYi 6a3ba38b45 新增方法(addTab、editTab) 2019-02-24 14:51:43 +08:00
lsm121and若依 90131d1338 !71 强制退出用户时更新缓存
Merge pull request !71 from lsm121/master
2019-02-22 16:10:47 +08:00
okayliaoand若依 2d319a8d0c !73 fix:操作日志页面,权限码错误
Merge pull request !73 from okayliao/master
2019-02-21 12:41:02 +08:00
okayliao 84b39901af fix:操作日志页面,权限码错误 2019-02-18 23:48:38 +08:00
okayliaoand若依 877e8edb09 !72 fix:登录地点 字段名错误
Merge pull request !72 from okayliao/develop
2019-02-15 17:55:15 +08:00
RuoYi 2d588ed873 登录地点字段名错误 2019-02-15 17:49:34 +08:00
RuoYi f1f7d7e4fc 使用jsonview展示操作日志参数 2019-02-15 17:46:24 +08:00
okayliao f3ea70c32c fix:登录地点 字段名错误 2019-02-15 16:50:27 +08:00
RuoYi fe4677bcf5 验证码禁用自动记录 2019-02-15 16:07:25 +08:00
RuoYi c03613f317 弹出层增加回调事件 2019-02-15 15:27:41 +08:00
RuoYi cc67d57cef 新增表格客户端分页选项 2019-02-15 14:12:03 +08:00
RuoYi 742846b421 上传文件按日期存储及部分文件路径位置 2019-01-31 11:45:55 +08:00
RuoYi 4829163bab 导入导出支持父类字段 2019-01-31 09:33:02 +08:00
lsm121 3c92ab7463 踢出用户时更新ehcash缓存 2019-01-30 13:08:00 +08:00
RuoYi 2de9f07449 修复combo属性Excel兼容性问题 2019-01-29 17:15:01 +08:00
RuoYi 97260b02cb 个人头像为图片服务器跨域问题 2019-01-29 11:23:16 +08:00
RuoYi af64be2a31 避免ehcache配置文件一直被占用,无法完全销毁项目重新部署 2019-01-29 10:07:57 +08:00
okayliaoand若依 0a0a6982f7 !70 fix: 关闭验证码时,保持 "记住我" 间距
Merge pull request !70 from okayliao/master
2019-01-29 09:13:24 +08:00
okayliao 3270db75af fix: 关闭验证码时,保持 "记住我" 间距 2019-01-28 23:08:56 +08:00
okayliaoand若依 0d69164acd !69 fix:导入按钮图标错误
Merge pull request !69 from okayliao/master
2019-01-28 18:44:09 +08:00
okayliao a5507dace7 Merge branch 'master' into develop
* master:
  升级datepicker拓展
  修复全屏模式下,详情弹窗被遮盖
2019-01-28 15:20:54 +08:00
okayliao 0ced39f2d6 fix:导出按钮图标错误 2019-01-28 15:20:04 +08:00
RuoYi c5968b76ec 升级datepicker拓展 2019-01-28 13:59:59 +08:00
RuoYi d5014c754c 修复全屏模式下,详情弹窗被遮盖 2019-01-28 13:18:05 +08:00
RuoYi a8b7ba00ac 修改tip默认值20 2019-01-25 20:14:10 +08:00
RuoYi 894090c39f 新增表格浮动提示方法 2019-01-25 17:48:17 +08:00
RuoYi 6b74dcb95f 支持左右列冻结 2019-01-25 11:08:13 +08:00
RuoYi 170e736c44 新增支持冻结列 2019-01-25 10:26:22 +08:00
RuoYi 25d7c2c1f7 spring工具类移至common 2019-01-24 21:56:45 +08:00
RuoYi d5a89621a9 线程池统一管理 2019-01-24 16:31:50 +08:00
okayliaoand若依 c6bd84818a !68 fix: Mapper文件错误
Merge pull request !68 from okayliao/master
2019-01-24 11:51:26 +08:00
okayliao 262ee4eb5c fix: Mapper 文件错误 2019-01-22 15:44:47 +08:00
RuoYi 00a10ed8df 代码生成列extra属性 2019-01-21 15:25:12 +08:00
RuoYi c064115501 bootstrap-table-mobile.js 2019-01-21 14:46:09 +08:00
RuoYi eae8c660cf 部分字段设置可修改为空 2019-01-18 16:40:56 +08:00
RuoYi f5af4e8204 添加使用文档 2019-01-18 15:59:03 +08:00
RuoYi 2f535082f2 获取完整的服务地址 2019-01-17 15:05:44 +08:00
RuoYi d872c66d19 若依3.2 2019-01-16 23:14:37 +08:00
yuteland若依 1042b40cfc !65 代码生成包名修改
Merge pull request !65 from yutel/master
2019-01-16 18:08:19 +08:00
yutel 070f7bc6bd 更新 Controller.java.vm
解决代码生成时找不到ExcelUtil.java类的问题
2019-01-16 18:02:16 +08:00
RuoYi 4f1c99293f pom 3.2 2019-01-16 15:28:32 +08:00
RuoYi 57fa243747 若依3.2 2019-01-16 14:56:27 +08:00
GeBronand若依 04f2607398 !64 去掉注释中多余参数说明
Merge pull request !64 from GeBron/master
2019-01-16 13:24:46 +08:00
GeBron 01caa02f5e 去掉注释中多余参数说明 2019-01-16 12:58:21 +08:00
RuoYi e37ec9f8fa 用户管理移动端默认隐藏左侧布局 2019-01-13 12:26:09 +08:00
RuoYi 122e8b61a0 详细信息弹出层显示在顶层 2019-01-12 12:08:41 +08:00
RuoYi 2345dfdf42 调整初始密码位置 2019-01-11 10:34:34 +08:00
RuoYi 77550e2f11 用户导入初始密码 2019-01-11 10:14:31 +08:00
RuoYi ca5b4bc852 用户导入 2019-01-11 09:50:16 +08:00
RuoYi 5fc9a63231 新增用户导入权限 2019-01-10 19:51:31 +08:00
ziryand若依 958be505c9 !62 修改样式文件小BUG及改用接口ISysUserOnlineService
Merge pull request !62 from ziry/master
2019-01-10 19:09:55 +08:00
RuoYi ec8c7f1d79 支持用户数据导入 2019-01-10 19:06:15 +08:00
ziry 030b61bc37 修改样式文件小BUG 2019-01-10 15:50:43 +08:00
RuoYi 619e1d241a 升级summernote到最新版本v0.8.11 2019-01-09 16:22:45 +08:00
RuoYi dc07b97cdb 字典数据根据选择下拉新增 2019-01-08 19:30:24 +08:00
RuoYi dd37524b04 修复个人信息修改漏洞 2019-01-08 15:56:49 +08:00
ziry 8c0ebd008e 更新 SysUserOnlineController.java ,改用接口ISysUserOnlineService 2019-01-08 15:42:08 +08:00
RuoYi 0c76d45349 新增修改全屏/确认取消按钮 2019-01-04 11:37:35 +08:00
若依 6237ddb3dc !60 SysJobMapper.deleteJobById改为通过ID删除及修改注释与方法参数对应
Merge pull request !60 from ziry/master
2018-12-29 17:47:01 +08:00
ziry 8643dde074 改为通过ID删除 2018-12-29 16:32:17 +08:00
ziry d22fa29b65 修改注释与方法参数对应 2018-12-29 16:28:54 +08:00
ziry b66097c004 更新 banner.txt
修复启动佛祖保佑图小瑕疵
2018-12-29 15:25:32 +08:00
RuoYi d30dc35e59 代码格式化 2018-12-29 15:18:28 +08:00
RuoYi 87c38706cd Merge branch 'master' of https://gitee.com/y_project/RuoYi 2018-12-29 15:05:53 +08:00
RuoYi f04c1fed50 线程池代码优化 2018-12-29 15:05:29 +08:00
xjt283525476and若依 4474c533e6 !59 修复驼峰转下划线拼接时,简称缩写作为前缀时,转换后首字母后追加了下划线,同时做了代码优化,利于阅读
Merge pull request !59 from xjt283525476/master
2018-12-29 14:25:47 +08:00
xjt283525476 4374a24f79 修复驼峰转下划线拼接时,简称缩写作为前缀时,转换后首字母后追加了下划线 2018-12-29 14:04:16 +08:00
RuoYi 383d082194 类位置迁移 2018-12-29 12:25:46 +08:00
RuoYi e9a7cc7bc7 去除序号居中 2018-12-29 12:04:53 +08:00
xjt283525476and若依 8b07f8925f !57 因笔误导致无意义的判断,同时还会出现空指针异常
Merge pull request !57 from xjt283525476/master
2018-12-29 10:21:58 +08:00
j3eastand若依 2af817d8dc !58 解决tomcat无法退出问题
Merge pull request !58 from j3east/j3east
2018-12-29 10:21:17 +08:00
cj 0e240cb244 代码风格和项目保持一致 2018-12-28 23:05:53 +08:00
cj fc834b35cb 一键打war包 2018-12-28 22:55:31 +08:00
cj 4fa795dee9 确保应用退出时能关闭后台线程 2018-12-28 22:54:38 +08:00
RuoYi 33788ecd02 ry-ui新增序列号生成方法 2018-12-28 17:33:15 +08:00
RuoYi 3d3017804d Excel注解支持多级获取 2018-12-28 16:15:56 +08:00
wangchl 63ee2ba2e7 修复会出现空指针异常 2018-12-28 14:23:23 +08:00
xjt283525476 aac46aa353 修复明显笔误 2018-12-27 19:41:56 +08:00
RuoYi c6e4daedd4 摸版edit缺少; 2018-12-27 11:43:16 +08:00
GeBronand若依 6b9b8ed889 !56 修改注释中的参数名称
Merge pull request !56 from GeBron/master
2018-12-25 23:29:09 +08:00
RuoYi 1f000d9f84 Merge branch 'master' of https://gitee.com/y_project/RuoYi 2018-12-25 23:26:52 +08:00
RuoYi 9d5a702e1f 新增方法$.operate.get(url) 2018-12-25 23:24:38 +08:00
GeBron bb1831f609 修改注释中的参数名称 2018-12-25 20:35:18 +08:00
RuoYi c628cf7ee7 去掉多余; 2018-12-25 17:16:27 +08:00
RuoYi 1de73da333 会话检查优化 2018-12-25 11:56:16 +08:00
RuoYi c404de1773 reset 2018-12-20 19:41:56 +08:00
wangchl cfcd48b6b2 取消配置文件配置从数据源,改为直接从数据库中直接读取 2018-12-20 14:24:02 +08:00
RuoYi a87e1d019d 修正getSubject命名 2018-12-19 18:10:44 +08:00
RuoYi ef91e71d7b 修正登录必填项位置偏移 2018-12-19 14:58:06 +08:00
zhangmritand若依 3bacfc5951 !55 模板
Merge pull request !55 from zhangmrit/ruoyi
2018-12-19 14:54:18 +08:00
zhangmrit b5cd54da66 时区 2018-12-19 14:51:08 +08:00
zhangmrit 0e9925a481 mysql时区和模板修复 2018-12-19 13:55:27 +08:00
RuoYi 7943b765ca 升级MYSQL驱动 2018-12-18 18:16:29 +08:00
RuoYi a74e58f7d5 升级SpringBoot到最新版本2.1.1 2018-12-17 22:32:37 +08:00
RuoYi ea58f8db9c 添加群号 2018-12-14 17:25:04 +08:00
RuoYi 89e21eecea 验证码配置补齐注释 2018-12-14 12:43:31 +08:00
RuoYi 35df1dbcdf 验证码文本字符间距修正 2018-12-14 12:30:33 +08:00
RuoYi 0972bba763 Merge branch 'master' of https://gitee.com/y_project/RuoYi 2018-12-12 13:26:16 +08:00
RuoYi 583b06ca9a 登录界面去除iCheck插件改为自定义css(提升响应速度及部分背景图不适应) 2018-12-12 13:26:01 +08:00
RuoYi 6a4b1898b1 Merge branch 'master' of https://gitee.com/y_project/RuoYi 2018-12-08 23:11:16 +08:00
RuoYi 268f0a6321 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴
(2核8G云服务器5M带宽)
2018-12-08 23:11:02 +08:00
RuoYi e56a7e7e57 磁盘(光驱)验证除数不为零 2018-12-06 11:44:20 +08:00
RuoYi 9d225fecb9 修正部门菜单排序字段无效 2018-12-03 20:47:33 +08:00
RuoYi d24481f9a5 部门修改不允许最后层级节点选择 2018-12-01 18:39:54 +08:00
RuoYi 6a592827e8 若依 3.1 2018-12-01 16:14:19 +08:00
RuoYi 451caf12fc 修正选中菜单项无效 2018-11-30 11:37:50 +08:00
zhangmritand若依 7517b1baa9 !46 多余的标签
Merge pull request !46 from zhangmrit/ruoyi
2018-11-28 19:03:37 +08:00
zhangmrit 5d582331d3 多余的标签 2018-11-28 18:32:55 +08:00
tenchiwuyoand若依 2d99d2c286 !45 补全@Override注解;修正注释中参数项;
Merge pull request !45 from tenchiwuyo/master
2018-11-28 16:47:42 +08:00
andy d881d45829 补全@Override注解;修正注释中参数项; 2018-11-28 16:19:53 +08:00
chenzzand若依 66aabcd2b4 !43 修复菜单,部门管理tree控件展开/折叠不可用问题
Merge pull request !43 from chenzz/Branch_bug_fix
2018-11-26 15:37:18 +08:00
chenzz 6128d816de 修复菜单,部门管理tree控件展开/折叠不可用问题 2018-11-26 15:35:37 +08:00
RuoYi 553358aa12 新增提交静默更新表格方法 2018-11-25 17:27:57 +08:00
RuoYi 650f89ac13 任务日志新增详细 2018-11-24 16:13:35 +08:00
RuoYi 1292dcf579 Excel注解新增 height/width/suffix/defaultValue 2018-11-24 08:54:01 +08:00
RuoYi 1c1078565a Merge branch 'master' of https://gitee.com/y_project/RuoYi 2018-11-23 22:43:53 +08:00
RuoYi 4d2d5defb9 Excel注解新增 dateFormat日期格式/readConverterExp读取内容转表达式 2018-11-23 22:43:20 +08:00
wangchl 75f27dc536 删出冗余代码 2018-11-23 17:16:48 +08:00
RuoYi aa06f1adc5 代码生成datas变量全局 2018-11-23 13:26:03 +08:00
RuoYi a42c824e92 文件路径保持与packageName一致 2018-11-22 21:33:57 +08:00
RuoYi 67e87bde94 在线用户服务修改 2018-11-22 13:03:57 +08:00
若依 a2735adc57 !39 ruoyi-system模块下SysUserOnlineServiceImpl未实现ISysUserOnlineService
Merge pull request !39 from TyroneGo/master
2018-11-22 12:35:11 +08:00
Tyrone 80bda1909c SysUserOnlineServiceImpl类没有实现ISysUserOnlineService 2018-11-22 10:27:16 +08:00
RuoYi a46738dd9d 会话获取Principal 2018-11-22 09:28:06 +08:00
RuoYi c96b73bbda 代码生成优化 2018-11-21 23:37:09 +08:00
RuoYi 4fed9a1e50 Merge branch 'master' of https://gitee.com/y_project/RuoYi 2018-11-19 18:05:57 +08:00
RuoYi b0495c23a6 修复热部署引起Null 2018-11-19 18:05:44 +08:00
若依 007a4e5275 !36 注解丢失
Merge pull request !36 from 麦洛/master
2018-11-19 17:06:20 +08:00
麦洛 bf01219420 添加丢失的 @Override注解 2018-11-19 15:43:18 +08:00
RuoYi bcb7ba19f9 系统用户会话命名sysUser 2018-11-18 18:17:40 +08:00
RuoYi d870710af1 系统用户会话命名sysUser 2018-11-18 18:02:20 +08:00
RuoYi 6244e6bf18 全局ajax提示 2018-11-15 18:34:05 +08:00
RuoYi c1be1659ea 增加关闭全屏 2018-11-15 15:33:03 +08:00
RuoYi 6cda301f43 选项卡新增全屏显示 2018-11-15 13:35:41 +08:00
wangchl e5b314cc96 修复定时任务无法删除参数问题 2018-11-15 12:07:20 +08:00
RuoYi 3383418837 新增打包文件 2018-11-15 08:58:54 +08:00
RuoYi 3a44c4e765 日志详细优化 2018-11-14 23:08:52 +08:00
RuoYi 0c5da2cf17 上传头像提交修改 2018-11-14 18:29:59 +08:00
CharlesSongand若依 ecfba42651 !34 BaseController迁移到framework模块的com.ruoyi.web.base路径下
Merge pull request !34 from CharlesSong/master
2018-11-13 16:55:24 +08:00
CharlesSong 26b4f598e2 为了便于二次开发依赖framework项目
1.BaseController迁移到framework com.ruoyi.web.base中
2.admin中的properties 放到root pom中
2018-11-13 16:48:44 +08:00
RuoYi 737c2d8515 前台日期格式转化 2018-11-13 13:07:00 +08:00
RuoYi 8a005a088d 2018年度最受欢迎中国开源软件评选
请给若依/RuoYi 投票,谢谢支持。
https://www.oschina.net/project/top_cn_2018?sort=1
2018-11-12 10:57:54 +08:00
RuoYi dcc534bb2d 2018年度最受欢迎中国开源软件评选
请给若依/RuoYi 投票,谢谢支持。
https://www.oschina.net/project/top_cn_2018?sort=1
2018-11-12 10:55:37 +08:00
RuoYi ebc6a1ade2 登录失败清空验证码 2018-11-07 22:25:36 +08:00
RuoYi 834089ef08 Merge branch 'master' of https://gitee.com/y_project/RuoYi 2018-11-01 17:49:35 +08:00
RuoYi d30b66b633 阿里云双11活动1折团 2018-11-01 17:49:23 +08:00
RuoYi 6a4894e9d1 Merge branch 'master' of https://gitee.com/y_project/RuoYi 2018-10-27 21:39:36 +08:00
RuoYi a44aa5db42 校验cron表达式是否有效 2018-10-27 21:39:01 +08:00
RuoYi 71c3274333 修改finalName 2018-10-26 13:29:07 +08:00
RuoYi 1961ca5197 添加warName 2018-10-26 13:21:40 +08:00
RuoYi ba2d7f418d 部署war包启动说明 2018-10-26 13:01:30 +08:00
RuoYi 83b4c25137 扫描路径修改 2018-10-18 16:48:05 +08:00
RuoYi 6ee8053a9b 内网不查询地址 2018-10-16 20:21:59 +08:00
Skqingand若依 7b0e1c46c5 !32 判断如果是内网IP则不去获取IP地址
Merge pull request !32 from Skqing/master
2018-10-16 19:57:55 +08:00
tenchiwuyoand若依 6c99bc1059 !33 修正参数名称
Merge pull request !33 from tenchiwuyo/master
2018-10-16 19:54:17 +08:00
andy f0dadb0123 Merge remote-tracking branch 'origin/master' 2018-10-16 16:19:16 +08:00
andy 6afaae0c05 修正参数名称,deptId改为operId 2018-10-16 16:17:24 +08:00
Skqing e4b9638bd5 判断如果是内网IP则不去获取IP地址 2018-10-16 12:47:09 +08:00
Administrator 27dee2a63a 增加16号段的电话号码验证 2018-10-15 20:38:16 +08:00
RuoYi 260feb7cef 优化一些细节 2018-10-12 14:10:25 +08:00
tenchiwuyoand若依 c778cd2ac9 !31 表格增加行间隔色配置项
Merge pull request !31 from tenchiwuyo/master
2018-10-12 13:28:59 +08:00
andy 9660e30ca5 增加表格是否行间隔色的option配置项 2018-10-12 13:21:08 +08:00
RuoYi 5285003dee 修复个人信息-修改密码 2018-10-11 20:27:34 +08:00
RuoYi b5e8432e2f 代码生成路径调整 2018-10-10 21:56:19 +08:00
j3eastand若依 4ac96a8348 !30 gitignore更新
Merge pull request !30 from j3east/master
2018-10-09 17:25:02 +08:00
cj f7a0c94c16 不能直接忽略所有名为build的文件夹,因为源代码目录中含也有名为build的文件夹, 2018-10-09 15:39:01 +08:00
RuoYi 16dc6ab57e 父部门不能选择&选择树自适应 2018-10-08 13:41:45 +08:00
j3eastand若依 5b2664a87a !29 添加gitignore
Merge pull request !29 from j3east/master
2018-10-07 23:26:20 +08:00
cj 5070f1325f 添加 gitignore 2018-10-07 23:22:16 +08:00
RuoYi bc48c80240 swagger2-UI 2018-10-07 23:10:09 +08:00
kuangbx ebe67e7bde Merge remote-tracking branch 'origin/master'
# Conflicts:
#	ruoyi-admin/pom.xml
#	ruoyi-framework/pom.xml
2018-10-07 22:29:19 +08:00
kuangbx 211a0ab746 [修改内容]调整Pom依赖,目前ruoyi-admin只依赖ruoyi-framework,ruoyi-framework依赖ruoyi-system,ruoyi-generator,ruoyi-quartz。ruoyi-common为基础模块。
[修改人]匡宝旭
[修改时间]2018-10-07 22:06
[备注]编译,打包,测试均通过
2018-10-07 22:06:58 +08:00
313 changed files with 21684 additions and 25942 deletions
+43
View File
@@ -0,0 +1,43 @@
######################################################################
# Build Tools
.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar
target/
!.mvn/wrapper/maven-wrapper.jar
######################################################################
# IDE
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
nbproject/private/
build/*
nbbuild/
dist/
nbdist/
.nb-gradle/
######################################################################
# Others
*.log
*.xml.versionsBackup
!*/build/*.java
!*/build/*.html
!*/build/*.xml
+33 -25
View File
@@ -2,17 +2,13 @@
一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套后台系统。如此有了若依。她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。
性别男,若依是女儿的名字
性别男,若依是给还没有出生女儿的名字(寓意:你若不离不弃,我必生死相依)
若依基于hplus和inspinia两套后台系统模板开发。有需要可自行到群内下载。
http://www.zi-han.net/theme/hplus
> 如需单应用,请移步 [RuoYi-fast](https://gitee.com/y_project/RuoYi-fast) `(保持同步更新)`,如需Oracle版本,请移步 [RuoYi-oracle](http://doc.ruoyi.vip/#/standard/xmkz) `(不定时更新)`
http://webapplayers.com/inspinia_admin-v2.7.1
> RuoYi从3.0开始,进行模块拆分,将原先的单应用转变为多模块,如需单应用,请移步 [RuoYi-fast](https://gitee.com/y_project/RuoYi-fast)
> 推荐使用阿里云部署,通用云产品代金券 :[点我领取](https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=brki8iof)
> 阿里云通用云产品1888优惠券 :[点我领取](https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=brki8iof)    腾讯云通用云产品2860优惠券 [点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console)  `(仅限新用户)`
## 内置功能
@@ -30,43 +26,55 @@ http://webapplayers.com/inspinia_admin-v2.7.1
12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。
14. 系统接口:根据业务代码自动生成相关的api接口文档。
15. 在线构建器:拖动表单元素生成相应的HTML代码
16. 连接池监视:监视当期系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈
15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息
16. 在线构建器:拖动表单元素生成相应的HTML代码
17. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
## 在线体验
> admin/admin123
> admin/admin123
> 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
地址:http://www.ruoyi.vip
演示地址:http://ruoyi.vip
文档地址:http://doc.ruoyi.vip
## 演示图
<table>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/25b5e333768d013d45a990c152dbe4d9d6e.jpg"/></td>
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194326_GBIJ_1438828.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/5ac52ccc07a59f12205948c9408791f5c5b.jpg"/></td>
</tr>
<tr>
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194443_Qyuq_1438828.png"/></td>
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194501_U7gT_1438828.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/66f8b5b24720dabe0e11ae84bd1ad4b038e.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/a46f34786bc9fc400697b6f3677be5bb3f0.jpg"/></td>
</tr>
<tr>
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194525_PApp_1438828.png"/></td>
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194535_3EM0_1438828.png"/></td>
</tr>
<tr>
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194612_kJ4F_1438828.png"/></td>
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194623_YEXO_1438828.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/6010201b078dbc9e1d8c09c6a3e53f4344c.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/058928ad3a6e6de67b43d62d42dbf071355.jpg"/></td>
</tr>
<tr>
<td><img src="https://static.oschina.net/uploads/space/2018/0902/132548_ne4U_1438828.png"/></td>
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194643_MsxF_1438828.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/21acdcade5e306f2c5d7ae26993b4e6bd06.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/ad5ea3c4c2ea2e91d1f05f6cc384cbad2a1.jpg"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/6ca845cca1701fbf71881efe4f341c82f99.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/e3aeb8fff585594f6e947218e14f2806ea1.jpg"/></td>
</tr>
<tr>
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194658_40L4_1438828.png"/></td>
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194712_2ma3_1438828.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/197ddc2fdffc27020f8624bd7ca1a971f61.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/a2dabea752d7d70aede20908dee0b419829.jpg"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/c5699c5726b5aebde71a37bb5163d840bc2.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/24740d59377e826d0d8664ebad66dc84abd.jpg"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/bbe7fe1048d29217ba73bd3ed88d6743b55.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/5f3d39a141f21f81b90536f391b8408f1fa.jpg"/></td>
</tr>
</table>
## 若依交流群
QQ群: [![加入QQ群](https://img.shields.io/badge/已满-1389287-blue.svg)](https://jq.qq.com/?_wv=1027&k=5HBAaYN) [![加入QQ群](https://img.shields.io/badge/QQ群-1679294-blue.svg)](https://jq.qq.com/?_wv=1027&k=5cHeRVW) 点击按钮入群。
QQ群: [![加入QQ群](https://img.shields.io/badge/已满-1389287-blue.svg)](https://jq.qq.com/?_wv=1027&k=5HBAaYN) [![加入QQ群](https://img.shields.io/badge/已满-1679294-blue.svg)](https://jq.qq.com/?_wv=1027&k=5cHeRVW) [![加入QQ群](https://img.shields.io/badge/已满-1529866-blue.svg)](https://jq.qq.com/?_wv=1027&k=53R0L5Z) [![加入QQ群](https://img.shields.io/badge/1772718-blue.svg)](https://jq.qq.com/?_wv=1027&k=5g75dCU) 点击按钮入群。
+14
View File
@@ -0,0 +1,14 @@
@echo off
echo.
echo [信息] 清理生成路径。
echo.
pause
echo.
cd %~dp0
cd..
call mvn clean
cd bin
pause
+13
View File
@@ -0,0 +1,13 @@
@echo off
echo.
echo [信息] 打包工程,生成jar包文件。
echo.
pause
echo.
cd %~dp0
cd..
call mvn clean package -Dmaven.test.skip=true
pause
+14
View File
@@ -0,0 +1,14 @@
@echo off
echo.
echo [信息] 运行Web工程。
echo.
cd %~dp0
cd ../ruoyi-admin/target
set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -jar %JAVA_OPTS% ruoyi-admin.jar
cd bin
pause
+172 -15
View File
@@ -6,35 +6,201 @@
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi</artifactId>
<version>3.0</version>
<version>3.3</version>
<name>ruoyi</name>
<url>http://www.ruoyi.vip</url>
<description>若依管理系统</description>
<properties>
<ruoyi.version>3.0</ruoyi.version>
<ruoyi.version>3.3</ruoyi.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<shiro.version>1.4.0</shiro.version>
<thymeleaf.extras.shiro.version>2.0.0</thymeleaf.extras.shiro.version>
<mybatis.boot.version>1.3.2</mybatis.boot.version>
<druid.version>1.1.10</druid.version>
<druid.version>1.1.14</druid.version>
<bitwalker.version>1.19</bitwalker.version>
<kaptcha.version>2.3.2</kaptcha.version>
<swagger.version>2.7.0</swagger.version>
<pagehelper.boot.version>1.2.5</pagehelper.boot.version>
<oshi.version>3.9.1</oshi.version>
<commons.io.version>2.5</commons.io.version>
<commons.fileupload.version>1.3.3</commons.fileupload.version>
<commons.beanutils.version>1.9.3</commons.beanutils.version>
<jsoup.version>1.11.3</jsoup.version>
<poi.version>3.17</poi.version>
<velocity.version>1.7</velocity.version>
</properties>
<!-- 依赖声明 -->
<dependencyManagement>
<dependencies>
<!-- SpringBoot的依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.5.RELEASE</version>
<version>2.1.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--阿里数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!--验证码 -->
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>${kaptcha.version}</version>
</dependency>
<!--Shiro核心框架 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>${shiro.version}</version>
</dependency>
<!-- Shiro使用Srping框架 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>${shiro.version}</version>
</dependency>
<!-- Shiro使用EhCache缓存框架 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-ehcache</artifactId>
<version>${shiro.version}</version>
</dependency>
<!-- thymeleaf模板引擎和shiro框架的整合 -->
<dependency>
<groupId>com.github.theborakompanioni</groupId>
<artifactId>thymeleaf-extras-shiro</artifactId>
<version>${thymeleaf.extras.shiro.version}</version>
</dependency>
<!-- 解析客户端操作系统、浏览器等 -->
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
<version>${bitwalker.version}</version>
</dependency>
<!-- pagehelper 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper.boot.version}</version>
</dependency>
<!-- 获取系统信息 -->
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
<version>${oshi.version}</version>
</dependency>
<!-- swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<!-- swagger2-UI-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<!--io常用工具类 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons.io.version}</version>
</dependency>
<!--文件上传工具类 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons.fileupload.version}</version>
</dependency>
<!-- 简化反射封工具类 -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>${commons.beanutils.version}</version>
</dependency>
<!-- HTML解析器 -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>${jsoup.version}</version>
</dependency>
<!-- excel工具 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
<!--velocity代码生成使用模板 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>${velocity.version}</version>
</dependency>
<!-- 定时任务-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-quartz</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- 代码生成-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-generator</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- 核心模块-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-framework</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- 系统模块-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-system</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- 通用工具-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
<version>${ruoyi.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
@@ -50,17 +216,8 @@
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<!-- 日志工具类 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
</dependencies>
+93 -107
View File
@@ -1,108 +1,94 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ruoyi</artifactId>
<groupId>com.ruoyi</groupId>
<version>3.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ruoyi-admin</artifactId>
<description>
web服务入口
</description>
<properties>
<pagehelper.boot.version>1.2.5</pagehelper.boot.version>
<swagger.version>2.7.0</swagger.version>
</properties>
<dependencies>
<!-- SpringBoot Web容器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot集成thymeleaf模板 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- spring-boot-devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 表示依赖不会传递 -->
</dependency>
<!-- pagehelper 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper.boot.version}</version>
</dependency>
<!-- swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<!-- swagger2-UI-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<!-- 核心模块-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-framework</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- 定时任务-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-quartz</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- 代码生成-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-generator</artifactId>
<version>${ruoyi.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<finalName>ruoyi-${ruoyi.version}</finalName>
</build>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ruoyi</artifactId>
<groupId>com.ruoyi</groupId>
<version>3.3</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>ruoyi-admin</artifactId>
<description>
web服务入口
</description>
<dependencies>
<!-- SpringBoot集成thymeleaf模板 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- spring-boot-devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 表示依赖不会传递 -->
</dependency>
<!-- swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<!-- swagger2-UI-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
<!-- 核心模块-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-framework</artifactId>
</dependency>
<!-- 定时任务-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-quartz</artifactId>
</dependency>
<!-- 代码生成-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-generator</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<warName>${artifactId}</warName>
</configuration>
</plugin>
</plugins>
<finalName>${artifactId}</finalName>
</build>
</project>
@@ -6,9 +6,17 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.config.Global;
import com.ruoyi.common.config.ServerConfig;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.FileUtils;
/**
@@ -21,17 +29,36 @@ public class CommonController
{
private static final Logger log = LoggerFactory.getLogger(CommonController.class);
@RequestMapping("common/download")
/**
* 文件上传路径
*/
public static final String UPLOAD_PATH = "/profile/upload/";
@Autowired
private ServerConfig serverConfig;
/**
* 通用下载请求
*
* @param fileName 文件名称
* @param delete 是否删除
*/
@GetMapping("common/download")
public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
{
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
try
{
if (!FileUtils.isValidFilename(fileName))
{
throw new Exception(StringUtils.format(" 文件名称({})非法,不允许下载。 ", fileName));
}
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
String filePath = Global.getDownloadPath() + fileName;
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;fileName=" + setFileDownloadHeader(request, realFileName));
response.setHeader("Content-Disposition",
"attachment;fileName=" + setFileDownloadHeader(request, realFileName));
FileUtils.writeBytes(filePath, response.getOutputStream());
if (delete)
{
@@ -44,6 +71,31 @@ public class CommonController
}
}
/**
* 通用上传请求
*/
@PostMapping("/common/upload")
@ResponseBody
public AjaxResult uploadFile(MultipartFile file) throws Exception
{
try
{
// 上传文件路径
String filePath = Global.getUploadPath();
// 上传并返回新文件名称
String fileName = FileUploadUtils.upload(filePath, file);
String url = serverConfig.getUrl() + UPLOAD_PATH + fileName;
AjaxResult ajax = AjaxResult.success();
ajax.put("fileName", fileName);
ajax.put("url", url);
return ajax;
}
catch (Exception e)
{
return AjaxResult.error(e.getMessage());
}
}
public String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException
{
final String agent = request.getHeader("USER-AGENT");
@@ -4,7 +4,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.web.core.base.BaseController;
import com.ruoyi.common.core.controller.BaseController;
/**
* druid 监控
@@ -0,0 +1,31 @@
package com.ruoyi.web.controller.monitor;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.framework.web.domain.Server;
/**
* 服务器监控
*
* @author ruoyi
*/
@Controller
@RequestMapping("/monitor/server")
public class ServerController extends BaseController
{
private String prefix = "monitor/server";
@RequiresPermissions("monitor:server:view")
@GetMapping()
public String server(ModelMap mmap) throws Exception
{
Server server = new Server();
server.copyTo();
mmap.put("server", server);
return prefix + "/server";
}
}
@@ -9,13 +9,13 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.ExcelUtil;
import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.SysLogininfor;
import com.ruoyi.system.service.ISysLogininforService;
import com.ruoyi.web.core.base.BaseController;
/**
* 系统访问记录
@@ -24,7 +24,7 @@ import com.ruoyi.web.core.base.BaseController;
*/
@Controller
@RequestMapping("/monitor/logininfor")
public class LogininforController extends BaseController
public class SysLogininforController extends BaseController
{
private String prefix = "monitor/logininfor";
@@ -56,7 +56,7 @@ public class LogininforController extends BaseController
{
List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class);
return util.exportExcel(list, "logininfor");
return util.exportExcel(list, "登陆日志");
}
@RequiresPermissions("monitor:logininfor:remove")
@@ -11,13 +11,13 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.ExcelUtil;
import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.SysOperLog;
import com.ruoyi.system.service.ISysOperLogService;
import com.ruoyi.web.core.base.BaseController;
/**
* 操作日志记录
@@ -26,7 +26,7 @@ import com.ruoyi.web.core.base.BaseController;
*/
@Controller
@RequestMapping("/monitor/operlog")
public class OperlogController extends BaseController
public class SysOperlogController extends BaseController
{
private String prefix = "monitor/operlog";
@@ -58,7 +58,7 @@ public class OperlogController extends BaseController
{
List<SysOperLog> list = operLogService.selectOperLogList(operLog);
ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class);
return util.exportExcel(list, "operLog");
return util.exportExcel(list, "操作日志");
}
@RequiresPermissions("monitor:operlog:remove")
@@ -71,9 +71,9 @@ public class OperlogController extends BaseController
@RequiresPermissions("monitor:operlog:detail")
@GetMapping("/detail/{operId}")
public String detail(@PathVariable("operId") Long deptId, ModelMap mmap)
public String detail(@PathVariable("operId") Long operId, ModelMap mmap)
{
mmap.put("operLog", operLogService.selectOperLogById(deptId));
mmap.put("operLog", operLogService.selectOperLogById(operId));
return prefix + "/detail";
}
@@ -10,16 +10,16 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.enums.OnlineStatus;
import com.ruoyi.framework.shiro.session.OnlineSession;
import com.ruoyi.framework.shiro.session.OnlineSessionDAO;
import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.system.domain.SysUserOnline;
import com.ruoyi.system.service.impl.SysUserOnlineServiceImpl;
import com.ruoyi.web.core.base.BaseController;
import com.ruoyi.system.service.ISysUserOnlineService;
/**
* 在线用户监控
@@ -28,12 +28,12 @@ import com.ruoyi.web.core.base.BaseController;
*/
@Controller
@RequestMapping("/monitor/online")
public class UserOnlineController extends BaseController
public class SysUserOnlineController extends BaseController
{
private String prefix = "monitor/online";
@Autowired
private SysUserOnlineServiceImpl userOnlineService;
private ISysUserOnlineService userOnlineService;
@Autowired
private OnlineSessionDAO onlineSessionDAO;
@@ -78,6 +78,7 @@ public class UserOnlineController extends BaseController
return error("当前登陆用户无法强退");
}
onlineSession.setStatus(OnlineStatus.off_line);
onlineSessionDAO.update(onlineSession);
online.setStatus(OnlineStatus.off_line);
userOnlineService.saveOnline(online);
}
@@ -105,6 +106,7 @@ public class UserOnlineController extends BaseController
return error("用户已下线");
}
onlineSession.setStatus(OnlineStatus.off_line);
onlineSessionDAO.update(onlineSession);
online.setStatus(OnlineStatus.off_line);
userOnlineService.saveOnline(online);
return success();
@@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;
import com.ruoyi.web.core.base.BaseController;
import com.ruoyi.common.core.controller.BaseController;
/**
* 图片验证码支持算术形式
@@ -23,7 +23,7 @@ import com.ruoyi.web.core.base.BaseController;
*/
@Controller
@RequestMapping("/captcha")
public class CaptchaController extends BaseController
public class SysCaptchaController extends BaseController
{
@Resource(name = "captchaProducer")
private Producer captchaProducer;
@@ -11,14 +11,14 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.ExcelUtil;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.system.domain.SysConfig;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.web.core.base.BaseController;
/**
* 参数配置 信息操作处理
@@ -27,7 +27,7 @@ import com.ruoyi.web.core.base.BaseController;
*/
@Controller
@RequestMapping("/system/config")
public class ConfigController extends BaseController
public class SysConfigController extends BaseController
{
private String prefix = "system/config";
@@ -62,7 +62,7 @@ public class ConfigController extends BaseController
{
List<SysConfig> list = configService.selectConfigList(config);
ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class);
return util.exportExcel(list, "config");
return util.exportExcel(list, "参数数据");
}
/**
@@ -1,7 +1,6 @@
package com.ruoyi.web.controller.system;
import java.util.List;
import java.util.Map;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -12,13 +11,15 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.Ztree;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.system.domain.SysDept;
import com.ruoyi.system.domain.SysRole;
import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.web.core.base.BaseController;
/**
* 部门信息
@@ -27,7 +28,7 @@ import com.ruoyi.web.core.base.BaseController;
*/
@Controller
@RequestMapping("/system/dept")
public class DeptController extends BaseController
public class SysDeptController extends BaseController
{
private String prefix = "system/dept";
@@ -79,7 +80,12 @@ public class DeptController extends BaseController
@GetMapping("/edit/{deptId}")
public String edit(@PathVariable("deptId") Long deptId, ModelMap mmap)
{
mmap.put("dept", deptService.selectDeptById(deptId));
SysDept dept = deptService.selectDeptById(deptId);
if (StringUtils.isNotNull(dept) && 100L == deptId)
{
dept.setParentName("");
}
mmap.put("dept", dept);
return prefix + "/edit";
}
@@ -101,17 +107,17 @@ public class DeptController extends BaseController
*/
@Log(title = "部门管理", businessType = BusinessType.DELETE)
@RequiresPermissions("system:dept:remove")
@PostMapping("/remove/{deptId}")
@GetMapping("/remove/{deptId}")
@ResponseBody
public AjaxResult remove(@PathVariable("deptId") Long deptId)
{
if (deptService.selectDeptCount(deptId) > 0)
{
return error(1, "存在下级部门,不允许删除");
return AjaxResult.warn("存在下级部门,不允许删除");
}
if (deptService.checkDeptExistUser(deptId))
{
return error(1, "部门存在用户,不允许删除");
return AjaxResult.warn("部门存在用户,不允许删除");
}
return toAjax(deptService.deleteDeptById(deptId));
}
@@ -141,10 +147,10 @@ public class DeptController extends BaseController
*/
@GetMapping("/treeData")
@ResponseBody
public List<Map<String, Object>> treeData()
public List<Ztree> treeData()
{
List<Map<String, Object>> tree = deptService.selectDeptTree();
return tree;
List<Ztree> ztrees = deptService.selectDeptTree(new SysDept());
return ztrees;
}
/**
@@ -152,9 +158,9 @@ public class DeptController extends BaseController
*/
@GetMapping("/roleDeptTreeData")
@ResponseBody
public List<Map<String, Object>> deptTreeData(SysRole role)
public List<Ztree> deptTreeData(SysRole role)
{
List<Map<String, Object>> tree = deptService.roleDeptTreeData(role);
return tree;
List<Ztree> ztrees = deptService.roleDeptTreeData(role);
return ztrees;
}
}
@@ -11,14 +11,14 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.ExcelUtil;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.system.domain.SysDictData;
import com.ruoyi.system.service.ISysDictDataService;
import com.ruoyi.web.core.base.BaseController;
/**
* 数据字典信息
@@ -27,7 +27,7 @@ import com.ruoyi.web.core.base.BaseController;
*/
@Controller
@RequestMapping("/system/dict/data")
public class DictDataController extends BaseController
public class SysDictDataController extends BaseController
{
private String prefix = "system/dict/data";
@@ -59,7 +59,7 @@ public class DictDataController extends BaseController
{
List<SysDictData> list = dictDataService.selectDictDataList(dictData);
ExcelUtil<SysDictData> util = new ExcelUtil<SysDictData>(SysDictData.class);
return util.exportExcel(list, "dictData");
return util.exportExcel(list, "字典数据");
}
/**
@@ -11,14 +11,14 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.ExcelUtil;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.system.domain.SysDictType;
import com.ruoyi.system.service.ISysDictTypeService;
import com.ruoyi.web.core.base.BaseController;
/**
* 数据字典信息
@@ -27,7 +27,7 @@ import com.ruoyi.web.core.base.BaseController;
*/
@Controller
@RequestMapping("/system/dict")
public class DictTypeController extends BaseController
public class SysDictTypeController extends BaseController
{
private String prefix = "system/dict/type";
@@ -60,7 +60,7 @@ public class DictTypeController extends BaseController
List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class);
return util.exportExcel(list, "dictType");
return util.exportExcel(list, "字典类型");
}
/**
@@ -6,10 +6,11 @@ import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import com.ruoyi.common.config.Global;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.system.domain.SysMenu;
import com.ruoyi.system.domain.SysUser;
import com.ruoyi.system.service.ISysMenuService;
import com.ruoyi.web.core.base.BaseController;
/**
* 首页 业务处理
@@ -17,7 +18,7 @@ import com.ruoyi.web.core.base.BaseController;
* @author ruoyi
*/
@Controller
public class IndexController extends BaseController
public class SysIndexController extends BaseController
{
@Autowired
private ISysMenuService menuService;
@@ -27,7 +28,7 @@ public class IndexController extends BaseController
public String index(ModelMap mmap)
{
// 取身份信息
SysUser user = getUser();
SysUser user = ShiroUtils.getSysUser();
// 根据用户id取出菜单
List<SysMenu> menus = menuService.selectMenusByUser(user);
mmap.put("menus", menus);
@@ -10,10 +10,10 @@ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.util.ServletUtils;
import com.ruoyi.web.core.base.BaseController;
/**
* 登录验证
@@ -21,7 +21,7 @@ import com.ruoyi.web.core.base.BaseController;
* @author ruoyi
*/
@Controller
public class LoginController extends BaseController
public class SysLoginController extends BaseController
{
@GetMapping("/login")
public String login(HttpServletRequest request, HttpServletResponse response)
@@ -1,7 +1,6 @@
package com.ruoyi.web.controller.system;
import java.util.List;
import java.util.Map;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -12,13 +11,14 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.Ztree;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.system.domain.SysMenu;
import com.ruoyi.system.domain.SysRole;
import com.ruoyi.system.service.ISysMenuService;
import com.ruoyi.web.core.base.BaseController;
/**
* 菜单信息
@@ -27,7 +27,7 @@ import com.ruoyi.web.core.base.BaseController;
*/
@Controller
@RequestMapping("/system/menu")
public class MenuController extends BaseController
public class SysMenuController extends BaseController
{
private String prefix = "system/menu";
@@ -55,17 +55,17 @@ public class MenuController extends BaseController
*/
@Log(title = "菜单管理", businessType = BusinessType.DELETE)
@RequiresPermissions("system:menu:remove")
@PostMapping("/remove/{menuId}")
@GetMapping("/remove/{menuId}")
@ResponseBody
public AjaxResult remove(@PathVariable("menuId") Long menuId)
{
if (menuService.selectCountMenuByParentId(menuId) > 0)
{
return error(1, "存在子菜单,不允许删除");
return AjaxResult.warn("存在子菜单,不允许删除");
}
if (menuService.selectCountRoleMenuByMenuId(menuId) > 0)
{
return error(1, "菜单已分配,不允许删除");
return AjaxResult.warn("菜单已分配,不允许删除");
}
ShiroUtils.clearCachedAuthorizationInfo();
return toAjax(menuService.deleteMenuById(menuId));
@@ -154,10 +154,10 @@ public class MenuController extends BaseController
*/
@GetMapping("/roleMenuTreeData")
@ResponseBody
public List<Map<String, Object>> roleMenuTreeData(SysRole role)
public List<Ztree> roleMenuTreeData(SysRole role)
{
List<Map<String, Object>> tree = menuService.roleMenuTreeData(role);
return tree;
List<Ztree> ztrees = menuService.roleMenuTreeData(role);
return ztrees;
}
/**
@@ -165,10 +165,10 @@ public class MenuController extends BaseController
*/
@GetMapping("/menuTreeData")
@ResponseBody
public List<Map<String, Object>> menuTreeData(SysRole role)
public List<Ztree> menuTreeData(SysRole role)
{
List<Map<String, Object>> tree = menuService.menuTreeData();
return tree;
List<Ztree> ztrees = menuService.menuTreeData();
return ztrees;
}
/**
@@ -11,13 +11,13 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.system.domain.SysNotice;
import com.ruoyi.system.service.ISysNoticeService;
import com.ruoyi.web.core.base.BaseController;
/**
* 公告 信息操作处理
@@ -26,7 +26,7 @@ import com.ruoyi.web.core.base.BaseController;
*/
@Controller
@RequestMapping("/system/notice")
public class NoticeController extends BaseController
public class SysNoticeController extends BaseController
{
private String prefix = "system/notice";
@@ -11,14 +11,14 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.ExcelUtil;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.system.domain.SysPost;
import com.ruoyi.system.service.ISysPostService;
import com.ruoyi.web.core.base.BaseController;
/**
* 岗位信息操作处理
@@ -27,7 +27,7 @@ import com.ruoyi.web.core.base.BaseController;
*/
@Controller
@RequestMapping("/system/post")
public class PostController extends BaseController
public class SysPostController extends BaseController
{
private String prefix = "system/post";
@@ -59,7 +59,7 @@ public class PostController extends BaseController
{
List<SysPost> list = postService.selectPostList(post);
ExcelUtil<SysPost> util = new ExcelUtil<SysPost>(SysPost.class);
return util.exportExcel(list, "post");
return util.exportExcel(list, "岗位数据");
}
@RequiresPermissions("system:post:remove")
@@ -1,27 +1,27 @@
package com.ruoyi.web.controller.system;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
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 org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.config.Global;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.util.FileUploadUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.framework.shiro.service.SysPasswordService;
import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.system.domain.SysUser;
import com.ruoyi.system.service.ISysDictDataService;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.web.core.base.BaseController;
/**
* 个人信息 业务处理
@@ -30,17 +30,17 @@ import com.ruoyi.web.core.base.BaseController;
*/
@Controller
@RequestMapping("/system/user/profile")
public class ProfileController extends BaseController
public class SysProfileController extends BaseController
{
private static final Logger log = LoggerFactory.getLogger(ProfileController.class);
private static final Logger log = LoggerFactory.getLogger(SysProfileController.class);
private String prefix = "system/user/profile";
@Autowired
private ISysUserService userService;
@Autowired
private ISysDictDataService dictDataService;
private SysPasswordService passwordService;
/**
* 个人信息
@@ -48,8 +48,7 @@ public class ProfileController extends BaseController
@GetMapping()
public String profile(ModelMap mmap)
{
SysUser user = getUser();
user.setSex(dictDataService.selectDictLabel("sys_user_sex", user.getSex()));
SysUser user = ShiroUtils.getSysUser();
mmap.put("user", user);
mmap.put("roleGroup", userService.selectUserRoleGroup(user.getUserId()));
mmap.put("postGroup", userService.selectUserPostGroup(user.getUserId()));
@@ -60,53 +59,64 @@ public class ProfileController extends BaseController
@ResponseBody
public boolean checkPassword(String password)
{
SysUser user = getUser();
String encrypt = new Md5Hash(user.getLoginName() + password + user.getSalt()).toHex().toString();
if (user.getPassword().equals(encrypt))
SysUser user = ShiroUtils.getSysUser();
if (passwordService.matches(user, password))
{
return true;
}
return false;
}
@GetMapping("/resetPwd/{userId}")
public String resetPwd(@PathVariable("userId") Long userId, ModelMap mmap)
@GetMapping("/resetPwd")
public String resetPwd(ModelMap mmap)
{
mmap.put("user", userService.selectUserById(userId));
SysUser user = ShiroUtils.getSysUser();
mmap.put("user", userService.selectUserById(user.getUserId()));
return prefix + "/resetPwd";
}
@Log(title = "重置密码", businessType = BusinessType.UPDATE)
@PostMapping("/resetPwd")
@ResponseBody
public AjaxResult resetPwd(SysUser user)
public AjaxResult resetPwd(String oldPassword, String newPassword)
{
int rows = userService.resetUserPwd(user);
if (rows > 0)
SysUser user = ShiroUtils.getSysUser();
if (StringUtils.isNotEmpty(newPassword) && passwordService.matches(user, oldPassword))
{
setUser(userService.selectUserById(user.getUserId()));
return success();
user.setSalt(ShiroUtils.randomSalt());
user.setPassword(passwordService.encryptPassword(user.getLoginName(), newPassword, user.getSalt()));
if (userService.resetUserPwd(user) > 0)
{
ShiroUtils.setSysUser(userService.selectUserById(user.getUserId()));
return success();
}
return error();
}
else
{
return error("修改密码失败,旧密码错误");
}
return error();
}
/**
* 修改用户
*/
@GetMapping("/edit/{userId}")
public String edit(@PathVariable("userId") Long userId, ModelMap mmap)
@GetMapping("/edit")
public String edit(ModelMap mmap)
{
mmap.put("user", userService.selectUserById(userId));
SysUser user = ShiroUtils.getSysUser();
mmap.put("user", userService.selectUserById(user.getUserId()));
return prefix + "/edit";
}
/**
* 修改头像
*/
@GetMapping("/avatar/{userId}")
public String avatar(@PathVariable("userId") Long userId, ModelMap mmap)
@GetMapping("/avatar")
public String avatar(ModelMap mmap)
{
mmap.put("user", userService.selectUserById(userId));
SysUser user = ShiroUtils.getSysUser();
mmap.put("user", userService.selectUserById(user.getUserId()));
return prefix + "/avatar";
}
@@ -118,9 +128,14 @@ public class ProfileController extends BaseController
@ResponseBody
public AjaxResult update(SysUser user)
{
if (userService.updateUserInfo(user) > 0)
SysUser currentUser = ShiroUtils.getSysUser();
currentUser.setUserName(user.getUserName());
currentUser.setEmail(user.getEmail());
currentUser.setPhonenumber(user.getPhonenumber());
currentUser.setSex(user.getSex());
if (userService.updateUserInfo(currentUser) > 0)
{
setUser(userService.selectUserById(user.getUserId()));
ShiroUtils.setSysUser(userService.selectUserById(currentUser.getUserId()));
return success();
}
return error();
@@ -132,17 +147,18 @@ public class ProfileController extends BaseController
@Log(title = "个人信息", businessType = BusinessType.UPDATE)
@PostMapping("/updateAvatar")
@ResponseBody
public AjaxResult updateAvatar(SysUser user, @RequestParam("avatarfile") MultipartFile file)
public AjaxResult updateAvatar(@RequestParam("avatarfile") MultipartFile file)
{
SysUser currentUser = ShiroUtils.getSysUser();
try
{
if (!file.isEmpty())
{
String avatar = FileUploadUtils.upload(Global.getAvatarPath(), file);
user.setAvatar(avatar);
if (userService.updateUserInfo(user) > 0)
currentUser.setAvatar(avatar);
if (userService.updateUserInfo(currentUser) > 0)
{
setUser(userService.selectUserById(user.getUserId()));
ShiroUtils.setSysUser(userService.selectUserById(currentUser.getUserId()));
return success();
}
}
@@ -4,7 +4,6 @@ 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.transaction.annotation.Transactional;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@@ -12,14 +11,17 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.ExcelUtil;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.system.domain.SysRole;
import com.ruoyi.system.domain.SysUser;
import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.web.core.base.BaseController;
import com.ruoyi.system.service.ISysUserService;
/**
* 角色信息
@@ -28,13 +30,16 @@ import com.ruoyi.web.core.base.BaseController;
*/
@Controller
@RequestMapping("/system/role")
public class RoleController extends BaseController
public class SysRoleController extends BaseController
{
private String prefix = "system/role";
@Autowired
private ISysRoleService roleService;
@Autowired
private ISysUserService userService;
@RequiresPermissions("system:role:view")
@GetMapping()
public String role()
@@ -60,7 +65,7 @@ public class RoleController extends BaseController
{
List<SysRole> list = roleService.selectRoleList(role);
ExcelUtil<SysRole> util = new ExcelUtil<SysRole>(SysRole.class);
return util.exportExcel(list, "role");
return util.exportExcel(list, "角色数据");
}
/**
@@ -78,7 +83,6 @@ public class RoleController extends BaseController
@RequiresPermissions("system:role:add")
@Log(title = "角色管理", businessType = BusinessType.INSERT)
@PostMapping("/add")
@Transactional(rollbackFor = Exception.class)
@ResponseBody
public AjaxResult addSave(SysRole role)
{
@@ -104,7 +108,6 @@ public class RoleController extends BaseController
@RequiresPermissions("system:role:edit")
@Log(title = "角色管理", businessType = BusinessType.UPDATE)
@PostMapping("/edit")
@Transactional(rollbackFor = Exception.class)
@ResponseBody
public AjaxResult editSave(SysRole role)
{
@@ -114,27 +117,25 @@ public class RoleController extends BaseController
}
/**
* 新增数据权限
* 角色分配数据权限
*/
@GetMapping("/rule/{roleId}")
public String rule(@PathVariable("roleId") Long roleId, ModelMap mmap)
@GetMapping("/authDataScope/{roleId}")
public String authDataScope(@PathVariable("roleId") Long roleId, ModelMap mmap)
{
mmap.put("role", roleService.selectRoleById(roleId));
return prefix + "/rule";
return prefix + "/dataScope";
}
/**
* 修改保存数据权限
* 保存角色分配数据权限
*/
@RequiresPermissions("system:role:edit")
@Log(title = "角色管理", businessType = BusinessType.UPDATE)
@PostMapping("/rule")
@Transactional(rollbackFor = Exception.class)
@PostMapping("/authDataScope")
@ResponseBody
public AjaxResult ruleSave(SysRole role)
public AjaxResult authDataScopeSave(SysRole role)
{
role.setUpdateBy(ShiroUtils.getLoginName());
return toAjax(roleService.updateRule(role));
return toAjax(roleService.authDataScope(role));
}
@RequiresPermissions("system:role:remove")
@@ -181,4 +182,96 @@ public class RoleController extends BaseController
{
return prefix + "/tree";
}
/**
* 角色状态修改
*/
@Log(title = "角色管理", businessType = BusinessType.UPDATE)
@RequiresPermissions("system:role:edit")
@PostMapping("/changeStatus")
@ResponseBody
public AjaxResult changeStatus(SysRole role)
{
return toAjax(roleService.changeStatus(role));
}
/**
* 分配用户
*/
@RequiresPermissions("system:role:edit")
@GetMapping("/authUser/{roleId}")
public String authUser(@PathVariable("roleId") Long roleId, ModelMap mmap)
{
mmap.put("role", roleService.selectRoleById(roleId));
return prefix + "/authUser";
}
/**
* 查询已分配用户角色列表
*/
@RequiresPermissions("system:role:list")
@PostMapping("/authUser/allocatedList")
@ResponseBody
public TableDataInfo allocatedList(SysUser user)
{
startPage();
List<SysUser> list = userService.selectAllocatedList(user);
return getDataTable(list);
}
/**
* 取消授权
*/
@Log(title = "角色管理", businessType = BusinessType.GRANT)
@PostMapping("/authUser/cancel")
@ResponseBody
public AjaxResult cancelAuthUser(SysUserRole userRole)
{
return toAjax(roleService.deleteAuthUser(userRole));
}
/**
* 批量取消授权
*/
@Log(title = "角色管理", businessType = BusinessType.GRANT)
@PostMapping("/authUser/cancelAll")
@ResponseBody
public AjaxResult cancelAuthUserAll(Long roleId, String userIds)
{
return toAjax(roleService.deleteAuthUsers(roleId, userIds));
}
/**
* 选择用户
*/
@GetMapping("/authUser/selectUser/{roleId}")
public String selectUser(@PathVariable("roleId") Long roleId, ModelMap mmap)
{
mmap.put("role", roleService.selectRoleById(roleId));
return prefix + "/selectUser";
}
/**
* 查询未分配用户角色列表
*/
@RequiresPermissions("system:role:list")
@PostMapping("/authUser/unallocatedList")
@ResponseBody
public TableDataInfo unallocatedList(SysUser user)
{
startPage();
List<SysUser> list = userService.selectUnallocatedList(user);
return getDataTable(list);
}
/**
* 批量选择用户授权
*/
@Log(title = "角色管理", businessType = BusinessType.GRANT)
@PostMapping("/authUser/selectAll")
@ResponseBody
public AjaxResult selectAuthUserAll(Long roleId, String userIds)
{
return toAjax(roleService.insertAuthUsers(roleId, userIds));
}
}
@@ -4,26 +4,26 @@ 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.transaction.annotation.Transactional;
import org.springframework.ui.ModelMap;
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.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.ExcelUtil;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.shiro.service.PasswordService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.shiro.service.SysPasswordService;
import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.system.domain.SysUser;
import com.ruoyi.system.service.ISysPostService;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.web.core.base.BaseController;
/**
* 用户信息
@@ -32,7 +32,7 @@ import com.ruoyi.web.core.base.BaseController;
*/
@Controller
@RequestMapping("/system/user")
public class UserController extends BaseController
public class SysUserController extends BaseController
{
private String prefix = "system/user";
@@ -46,7 +46,7 @@ public class UserController extends BaseController
private ISysPostService postService;
@Autowired
private PasswordService passwordService;
private SysPasswordService passwordService;
@RequiresPermissions("system:user:view")
@GetMapping()
@@ -73,7 +73,29 @@ public class UserController extends BaseController
{
List<SysUser> list = userService.selectUserList(user);
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
return util.exportExcel(list, "user");
return util.exportExcel(list, "用户数据");
}
@Log(title = "用户管理", businessType = BusinessType.IMPORT)
@RequiresPermissions("system:user:import")
@PostMapping("/importData")
@ResponseBody
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
{
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
List<SysUser> userList = util.importExcel(file.getInputStream());
String operName = ShiroUtils.getSysUser().getLoginName();
String message = userService.importUser(userList, updateSupport, operName);
return AjaxResult.success(message);
}
@RequiresPermissions("system:user:view")
@GetMapping("/importTemplate")
@ResponseBody
public AjaxResult importTemplate()
{
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
return util.importTemplateExcel("用户数据");
}
/**
@@ -93,7 +115,6 @@ public class UserController extends BaseController
@RequiresPermissions("system:user:add")
@Log(title = "用户管理", businessType = BusinessType.INSERT)
@PostMapping("/add")
@Transactional(rollbackFor = Exception.class)
@ResponseBody
public AjaxResult addSave(SysUser user)
{
@@ -125,7 +146,6 @@ public class UserController extends BaseController
@RequiresPermissions("system:user:edit")
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
@PostMapping("/edit")
@Transactional(rollbackFor = Exception.class)
@ResponseBody
public AjaxResult editSave(SysUser user)
{
@@ -202,4 +222,16 @@ public class UserController extends BaseController
{
return userService.checkEmailUnique(user);
}
/**
* 用户状态修改
*/
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
@RequiresPermissions("system:user:edit")
@PostMapping("/changeStatus")
@ResponseBody
public AjaxResult changeStatus(SysUser user)
{
return toAjax(userService.changeStatus(user));
}
}
@@ -4,7 +4,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.web.core.base.BaseController;
import com.ruoyi.common.core.controller.BaseController;
/**
* build 表单构建
@@ -4,7 +4,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.web.core.base.BaseController;
import com.ruoyi.common.core.controller.BaseController;
/**
* swagger 接口
@@ -2,17 +2,14 @@ package com.ruoyi.web.controller.tool;
import java.util.ArrayList;
import java.util.List;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.web.core.base.BaseController;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
@@ -2,11 +2,11 @@
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源
master:
url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true
url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: password
# 从库数据源
@@ -17,32 +17,38 @@ spring:
username:
password:
# 初始连接数
initial-size: 10
# 最大连接池数量
max-active: 100
initialSize: 5
# 最小连接池数量
min-idle: 10
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
max-wait: 60000
# 打开PSCache,并且指定每个连接上PSCache的大小
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: false
test-on-return: false
stat-view-servlet:
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
webStatFilter:
enabled: true
statViewServlet:
enabled: true
# 设置白名单,不填则允许所有访问
allow:
url-pattern: /monitor/druid/*
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: false
merge-sql: true
wall:
config:
multi-statement-allow: true
+4 -15
View File
@@ -3,10 +3,10 @@ ruoyi:
# 名称
name: RuoYi
# 版本
version: 3.0.0
version: 3.3.0
# 版权年份
copyrightYear: 2018
# 文件上传路径
copyrightYear: 2019
# 文件上传
profile: D:/profile/
# 获取ip地址开关
addressEnabled: true
@@ -72,7 +72,7 @@ mybatis:
# 搜索指定包别名
typeAliasesPackage: com.ruoyi
# 配置mapper的扫描,找到所有的mapper.xml映射文件
mapperLocations: classpath:mapper/system/*Mapper.xml,classpath:mapper/quartz/*Mapper.xml,classpath:mapper/generator/*Mapper.xml
mapperLocations: classpath*:mapper/**/*Mapper.xml
# 加载全局的配置文件
configLocation: classpath:mapper/mybatis-config.xml
@@ -121,14 +121,3 @@ xss:
excludes: /system/notice/*
# 匹配链接
urlPatterns: /system/*,/monitor/*,/tool/*
# 代码生成
gen:
# 作者
author: ruoyi
# 默认生成包路径 module 需改成自己的模块名称 如 system monitor tool
packageName: com.ruoyi.project.module
# 自动去除表前缀,默认是true
autoRemovePre: true
# 表前缀(类名不会包含表前缀)
tablePrefix: sys_
+1 -1
View File
@@ -20,5 +20,5 @@ Spring Boot Version: ${spring-boot.version}
// ========`-.____`-.___\_____/___.-`____.-'======== //
// `=---=' //
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
// 佛祖保佑 永不宕机 永无BUG //
// 佛祖保佑 永不宕机 永无BUG //
////////////////////////////////////////////////////////////////////
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ehcache name="ruoyi">
<ehcache name="ruoyi" updateCheck="false">
<!-- 磁盘缓存位置 -->
<diskStore path="java.io.tmpdir"/>
@@ -6,8 +6,8 @@ user.password.not.match=用户不存在/密码错误
user.password.retry.limit.count=密码输入错误{0}次
user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定10分钟
user.password.delete=对不起,您的账号已被删除
user.blocked=用户已封禁,原因:{0}
role.blocked=角色已封禁,原因:{0}
user.blocked=用户已封禁,请联系管理员
role.blocked=角色已封禁,请联系管理员
user.logout.success=退出成功
length.not.valid=长度必须在{min}到{max}个字符之间
@@ -22,13 +22,10 @@ user.notfound=请重新登录
user.forcelogout=管理员强制退出,请重新登录
user.unknown.error=未知错误,请重新登录
#批量插入用户错误信
user.import.excel.null=Excel数据为空,请按照导入模板填写数据
user.import.excel.data.null=Excel数据为空,只有标题行,请按照导入模板填写数据
user.import.excel.filetype.error=文件不是Excel文件
user.import.excel.file.error=文件名为空,文件为空
user.import.excel.fileinput.error=获取Excel2003流错误
user.import.excel.fileinputx.error=获取Excel2007流错误
##文件上传消
upload.exceed.maxSize=上传的文件大小超出限制的文件大小!<br/>允许的文件最大大小是:{0}MB!
upload.filename.exceed.length=上传的文件名最长{0}个字符
##权限
no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
File diff suppressed because one or more lines are too long
@@ -0,0 +1,27 @@
.fixed-table-header-columns,
.fixed-table-body-columns {
position: absolute;
background-color: #fff;
display: none;
box-sizing: border-box;
overflow: hidden;
}
.fixed-table-header-columns .table,
.fixed-table-body-columns .table {
border-right: 1px solid #ddd;
}
.fixed-table-header-columns .table.table-no-bordered,
.fixed-table-body-columns .table.table-no-bordered {
border-right: 1px solid transparent;
}
.fixed-table-body-columns table {
position: absolute;
animation: none;
}
.bootstrap-table .table-hover > tbody > tr.hover > td {
background-color: #f5f5f5;
}
@@ -0,0 +1,256 @@
/**
* 基于bootstrap-table-fixed-columns修改
* 支持左右列冻结
* Copyright (c) 2019 ruoyi
*/
(function ($) {
'use strict';
$.extend($.fn.bootstrapTable.defaults, {
fixedColumns: false,
fixedNumber: 1,
rightFixedColumns: false,
rightFixedNumber: 1
});
var BootstrapTable = $.fn.bootstrapTable.Constructor,
_initHeader = BootstrapTable.prototype.initHeader,
_initBody = BootstrapTable.prototype.initBody,
_resetView = BootstrapTable.prototype.resetView;
BootstrapTable.prototype.initFixedColumns = function () {
this.timeoutHeaderColumns_ = 0;
this.timeoutBodyColumns_ = 0;
if (this.options.fixedColumns) {
this.$fixedBody = $([
'<div class="fixed-table-column" style="position: absolute; background-color: #fff; border-right:1px solid #ddd;">',
'<table>',
'<thead></thead>',
'<tbody></tbody>',
'</table>',
'</div>'].join(''));
this.$fixedBody.find('table').attr('class', this.$el.attr('class'));
this.$fixedHeaderColumns = this.$fixedBody.find('thead');
this.$fixedBodyColumns = this.$fixedBody.find('tbody');
this.$tableBody.before(this.$fixedBody);
}
if (this.options.rightFixedColumns) {
this.$rightfixedBody = $([
'<div class="fixed-table-column" style="position: absolute;right:0px; background-color: #fff; border-right:1px solid #ddd;">',
'<table>',
'<thead></thead>',
'<tbody></tbody>',
'</table>',
'</div>'].join(''));
this.$rightfixedBody.find('table').attr('class', this.$el.attr('class'));
this.$rightfixedHeaderColumns = this.$rightfixedBody.find('thead');
this.$rightfixedBodyColumns = this.$rightfixedBody.find('tbody');
this.$tableBody.before(this.$rightfixedBody);
}
};
BootstrapTable.prototype.initHeader = function () {
_initHeader.apply(this, Array.prototype.slice.apply(arguments));
if (!this.options.fixedColumns && !this.options.rightFixedColumns){
return;
}
this.initFixedColumns();
var $ltr = this.$header.find('tr:eq(0)').clone(),
$rtr = this.$header.find('tr:eq(0)').clone(),
$lths = $ltr.clone().find('th'),
$rths = $rtr.clone().find('th');
$ltr.html('');
$rtr.html('');
//右边列冻结
if (this.options.rightFixedColumns) {
for (var i = 0; i < this.options.rightFixedNumber; i++) {
$rtr.append($rths.eq($rths.length - this.options.rightFixedNumber + i).clone());
}
this.$rightfixedHeaderColumns.html('').append($rtr);
}
//左边列冻结
if (this.options.fixedColumns) {
for (var i = 0; i < this.options.fixedNumber; i++) {
$ltr.append($lths.eq(i).clone());
}
this.$fixedHeaderColumns.html('').append($ltr);
}
};
BootstrapTable.prototype.initBody = function () {
_initBody.apply(this, Array.prototype.slice.apply(arguments));
if (!this.options.fixedColumns && !this.options.rightFixedColumns) {
return;
}
var that = this;
if (this.options.fixedColumns) {
this.$fixedBodyColumns.html('');
this.$body.find('> tr[data-index]').each(function () {
var $tr = $(this).clone(),
$tds = $tr.clone().find('td');
$tr.html('');
for (var i = 0; i < that.options.fixedNumber; i++) {
$tr.append($tds.eq(i).clone());
}
that.$fixedBodyColumns.append($tr);
});
}
if (this.options.rightFixedColumns) {
this.$rightfixedBodyColumns.html('');
this.$body.find('> tr[data-index]').each(function () {
var $tr = $(this).clone(),
$tds = $tr.clone().find('td');
$tr.html('');
for (var i = 0; i < that.options.rightFixedNumber; i++) {
var indexTd = $tds.length - that.options.rightFixedNumber + i;
var oldTd = $tds.eq(indexTd);
var fixTd = oldTd.clone();
var buttons = fixTd.find('button');
//事件转移:冻结列里面的事件转移到实际按钮的事件
buttons.each(function (key, item) {
$(item).click(function () {
that.$body.find("tr[data-index=" + $tr.attr('data-index') + "] td:eq(" + indexTd + ") button:eq(" + key + ")").click();
});
});
$tr.append(fixTd);
}
that.$rightfixedBodyColumns.append($tr);
});
}
};
BootstrapTable.prototype.resetView = function () {
_resetView.apply(this, Array.prototype.slice.apply(arguments));
if (!this.options.fixedColumns && !this.options.rightFixedColumns) {
return;
}
clearTimeout(this.timeoutHeaderColumns_);
this.timeoutHeaderColumns_ = setTimeout($.proxy(this.fitHeaderColumns, this), this.$el.is(':hidden') ? 100 : 0);
clearTimeout(this.timeoutBodyColumns_);
this.timeoutBodyColumns_ = setTimeout($.proxy(this.fitBodyColumns, this), this.$el.is(':hidden') ? 100 : 0);
};
BootstrapTable.prototype.fitHeaderColumns = function () {
var that = this,
visibleFields = this.getVisibleFields(),
headerWidth = 0;
if (that.options.fixedColumns) {
this.$body.find('tr:first-child:not(.no-records-found) > *').each(function (i) {
var $this = $(this),
index = i;
if (i >= that.options.fixedNumber) {
return false;
}
if (that.options.detailView && !that.options.cardView) {
index = i - 1;
}
that.$fixedBody.find('thead th[data-field="' + visibleFields[index] + '"]')
.find('.fht-cell').width($this.innerWidth() - 1);
headerWidth += $this.outerWidth();
});
this.$fixedBody.width(headerWidth - 1).show();
}
if (that.options.rightFixedColumns) {
this.$body.find('tr:first-child:not(.no-records-found) > *').each(function (i) {
var $this = $(this),
index = i;
if (i >= visibleFields.length - that.options.rightFixedNumber) {
return false;
if (that.options.detailView && !that.options.cardView) {
index = i - 1;
}
that.$rightfixedBody.find('thead th[data-field="' + visibleFields[index] + '"]')
.find('.fht-cell').width($this.innerWidth() - 1);
headerWidth += $this.outerWidth();
}
});
this.$rightfixedBody.width(headerWidth - 1).show();
}
};
BootstrapTable.prototype.fitBodyColumns = function () {
var that = this,
top = -(parseInt(this.$el.css('margin-top')) - 2),
height = this.$tableBody.height() - 2;
if (that.options.fixedColumns) {
if (!this.$body.find('> tr[data-index]').length) {
this.$fixedBody.hide();
return;
}
this.$body.find('> tr').each(function (i) {
that.$fixedBody.find('tbody tr:eq(' + i + ')').height($(this).height());
});
//// events
this.$tableBody.on('scroll', function () {
that.$fixedBody.find('table').css('top', -$(this).scrollTop());
});
this.$body.find('> tr[data-index]').off('hover').hover(function () {
var index = $(this).data('index');
that.$fixedBody.find('tr[data-index="' + index + '"]').addClass('hover');
}, function () {
var index = $(this).data('index');
that.$fixedBody.find('tr[data-index="' + index + '"]').removeClass('hover');
});
this.$fixedBody.find('tr[data-index]').off('hover').hover(function () {
var index = $(this).data('index');
that.$body.find('tr[data-index="' + index + '"]').addClass('hover');
}, function () {
var index = $(this).data('index');
that.$body.find('> tr[data-index="' + index + '"]').removeClass('hover');
});
}
if (that.options.rightFixedColumns) {
if (!this.$body.find('> tr[data-index]').length) {
this.$rightfixedBody.hide();
return;
}
this.$body.find('> tr').each(function (i) {
that.$rightfixedBody.find('tbody tr:eq(' + i + ')').height($(this).height());
});
//// events
this.$tableBody.on('scroll', function () {
that.$rightfixedBody.find('table').css('top', -$(this).scrollTop());
});
this.$body.find('> tr[data-index]').off('hover').hover(function () {
var index = $(this).data('index');
that.$rightfixedBody.find('tr[data-index="' + index + '"]').addClass('hover');
}, function () {
var index = $(this).data('index');
that.$rightfixedBody.find('tr[data-index="' + index + '"]').removeClass('hover');
});
this.$rightfixedBody.find('tr[data-index]').off('hover').hover(function () {
var index = $(this).data('index');
that.$body.find('tr[data-index="' + index + '"]').addClass('hover');
}, function () {
var index = $(this).data('index');
that.$body.find('> tr[data-index="' + index + '"]').removeClass('hover');
});
}
};
})(jQuery);
@@ -1,44 +1,35 @@
/**
* @author: Dennis Hernández
* @webSite: http://djhvscf.github.io/Blog
* @version: v1.1.0
* 基于bootstrap-table-mobile修改
* 修正部分iPhone手机不显示卡片视图
* Copyright (c) 2019 ruoyi
*/
!function ($) {
'use strict';
var showHideColumns = function (that, checked) {
if (that.options.columnsHidden.length > 0 ) {
$.each(that.columns, function (i, column) {
if (that.options.columnsHidden.indexOf(column.field) !== -1) {
if (column.visible !== checked) {
that.toggleColumn($.fn.bootstrapTable.utils.getFieldIndex(that.columns, column.field), checked, true);
}
}
});
}
};
var resetView = function (that) {
if (that.options.height || that.options.showFooter) {
setTimeout(function(){
that.resetView.call(that);
}, 1);
setTimeout(that.resetView(), 1);
}
};
// 判断是否 iphone
var isIPhone = function () {
var browserName = navigator.userAgent.toLowerCase();
return /(iPhone|iPad|iPod|iOS)/i.test(browserName);
};
var changeView = function (that, width, height) {
if (that.options.minHeight) {
if ((width <= that.options.minWidth) && (height <= that.options.minHeight)) {
if (checkValuesLessEqual(width, that.options.minWidth) && checkValuesLessEqual(height, that.options.minHeight)) {
conditionCardView(that);
} else if ((width > that.options.minWidth) && (height > that.options.minHeight)) {
} else if (checkValuesGreater(width, that.options.minWidth) && checkValuesGreater(height, that.options.minHeight)) {
conditionFullView(that);
}
} else {
if (width <= that.options.minWidth) {
if (checkValuesLessEqual(width, that.options.minWidth) || isIPhone()) {
conditionCardView(that);
} else if (width > that.options.minWidth) {
} else if (checkValuesGreater(width, that.options.minWidth)) {
conditionFullView(that);
}
}
@@ -46,14 +37,20 @@
resetView(that);
};
var checkValuesLessEqual = function (currentValue, targetValue) {
return currentValue <= targetValue;
};
var checkValuesGreater = function (currentValue, targetValue) {
return currentValue > targetValue;
};
var conditionCardView = function (that) {
changeTableView(that, false);
showHideColumns(that, false);
};
var conditionFullView = function (that) {
changeTableView(that, true);
showHideColumns(that, true);
};
var changeTableView = function (that, cardViewState) {
@@ -61,27 +58,12 @@
that.toggleView();
};
var debounce = function(func,wait) {
var timeout;
return function() {
var context = this,
args = arguments;
var later = function() {
timeout = null;
func.apply(context,args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
};
$.extend($.fn.bootstrapTable.defaults, {
mobileResponsive: false,
minWidth: 562,
minHeight: undefined,
heightThreshold: 100, // just slightly larger than mobile chrome's auto-hiding toolbar
checkOnInit: true,
columnsHidden: []
toggled: false
});
var BootstrapTable = $.fn.bootstrapTable.Constructor,
@@ -98,39 +80,13 @@
return;
}
if (this.options.minWidth < 100 && this.options.resizable) {
console.log("The minWidth when the resizable extension is active should be greater or equal than 100");
this.options.minWidth = 100;
}
var that = this,
old = {
width: $(window).width(),
height: $(window).height()
};
$(window).on('resize orientationchange',debounce(function (evt) {
// reset view if height has only changed by at least the threshold.
var height = $(this).height(),
width = $(this).width();
if (Math.abs(old.height - height) > that.options.heightThreshold || old.width != width) {
changeView(that, width, height);
old = {
width: width,
height: height
};
}
},200));
var that = this;
$(window).resize(function () {
changeView(that, $(this).width(), $(this).height())
});
if (this.options.checkOnInit) {
var height = $(window).height(),
width = $(window).width();
changeView(this, width, height);
old = {
width: width,
height: height
};
changeView(this, $(window).width(), $(window).height());
}
};
}(jQuery);
@@ -1,7 +0,0 @@
/*
* bootstrap-table - v1.11.0 - 2016-07-02
* https://github.com/wenzhixin/bootstrap-table
* Copyright (c) 2016 zhixin wen
* Licensed MIT License
*/
!function(a){"use strict";var b=function(b,c){b.options.columnsHidden.length>0&&a.each(b.columns,function(d,e){-1!==b.options.columnsHidden.indexOf(e.field)&&e.visible!==c&&b.toggleColumn(a.fn.bootstrapTable.utils.getFieldIndex(b.columns,e.field),c,!0)})},c=function(a){(a.options.height||a.options.showFooter)&&setTimeout(function(){a.resetView.call(a)},1)},d=function(a,b,d){a.options.minHeight?b<=a.options.minWidth&&d<=a.options.minHeight?e(a):b>a.options.minWidth&&d>a.options.minHeight&&f(a):b<=a.options.minWidth?e(a):b>a.options.minWidth&&f(a),c(a)},e=function(a){g(a,!1),b(a,!1)},f=function(a){g(a,!0),b(a,!0)},g=function(a,b){a.options.cardView=b,a.toggleView()},h=function(a,b){var c;return function(){var d=this,e=arguments,f=function(){c=null,a.apply(d,e)};clearTimeout(c),c=setTimeout(f,b)}};a.extend(a.fn.bootstrapTable.defaults,{mobileResponsive:!1,minWidth:562,minHeight:void 0,heightThreshold:100,checkOnInit:!0,columnsHidden:[]});var i=a.fn.bootstrapTable.Constructor,j=i.prototype.init;i.prototype.init=function(){if(j.apply(this,Array.prototype.slice.apply(arguments)),this.options.mobileResponsive&&this.options.minWidth){this.options.minWidth<100&&this.options.resizable&&(console.log("The minWidth when the resizable extension is active should be greater or equal than 100"),this.options.minWidth=100);var b=this,c={width:a(window).width(),height:a(window).height()};if(a(window).on("resize orientationchange",h(function(){var e=a(this).height(),f=a(this).width();(Math.abs(c.height-e)>b.options.heightThreshold||c.width!=f)&&(d(b,f,e),c={width:f,height:e})},200)),this.options.checkOnInit){var e=a(window).height(),f=a(window).width();d(this,f,e),c={width:f,height:e}}}}}(jQuery);
@@ -2,11 +2,11 @@
.bootstrap-tree-table .treetable-expander {width:16px; height: 16px; display: inline-block; position: relative; cursor: pointer;}
.bootstrap-tree-table .treetable-selected{background: #f5f5f5 !important;}
.bootstrap-tree-table .treetable-table{border:0 !important;margin-bottom:0}
.bootstrap-tree-table .treetable-table tbody {display:block;height:auto;overflow-y:auto;}
.bootstrap-tree-table .treetable-table tbody {display:block;height:auto;}
.bootstrap-tree-table .treetable-table thead, .treetable-table tbody tr {display:table;width:100%;table-layout:fixed;}
.bootstrap-tree-table .treetable-thead th{line-height:24px;border: 0 !important;border-radius: 4px;border-left:0px solid #e7eaec !important;border-bottom:1px solid #ccc!important;text-align: left;}
.bootstrap-tree-table .treetable-thead tr :first-child{border-left:0 !important}
.bootstrap-tree-table .treetable-tbody td{border: 0 !important;border-left:0px solid #e7eaec !important;border-bottom:1px solid #e7eaec!important;overflow: hidden; white-space: nowrap; text-overflow: ellipsis;}
.bootstrap-tree-table .treetable-tbody td{border: 0 !important;border-left:0px solid #e7eaec !important;border-bottom:1px solid #e7eaec!important;white-space: nowrap; text-overflow: ellipsis;}
.bootstrap-tree-table .treetable-tbody tr :first-child{border-left:0 !important}
.bootstrap-tree-table .treetable-bars .tool-left, .bootstrap-tree-table .treetable-bars .tool-right{margin-top: 10px; margin-bottom: 10px;}
.bootstrap-tree-table .treetable-bars .tool-left{float: left;}
@@ -240,32 +240,32 @@
item.isShow = false;
// 这里兼容几种常见Root节点写法
// 默认的几种判断
var _defaultRootFlag = item[options.parentId] == '0' ||
item[options.parentId] == 0 ||
item[options.parentId] == null ||
item[options.parentId] == '';
if (!item[options.parentId] || (_root ? (item[options.parentId] == options.rootIdValue) : _defaultRootFlag)) {
var _defaultRootFlag = item[options.parentCode] == '0' ||
item[options.parentCode] == 0 ||
item[options.parentCode] == null ||
item[options.parentCode] == '';
if (!item[options.parentCode] || (_root ? (item[options.parentCode] == options.rootIdValue) : _defaultRootFlag)) {
if (!target.data_list["_root_"]) {
target.data_list["_root_"] = [];
}
if (!target.data_obj["id_" + item[options.id]]) {
if (!target.data_obj["id_" + item[options.code]]) {
target.data_list["_root_"].push(item);
}
} else {
if (!target.data_list["_n_" + item[options.parentId]]) {
target.data_list["_n_" + item[options.parentId]] = [];
if (!target.data_list["_n_" + item[options.parentCode]]) {
target.data_list["_n_" + item[options.parentCode]] = [];
}
if (!target.data_obj["id_" + item[options.id]]) {
target.data_list["_n_" + item[options.parentId]].push(item);
if (!target.data_obj["id_" + item[options.code]]) {
target.data_list["_n_" + item[options.parentCode]].push(item);
}
}
target.data_obj["id_" + item[options.id]] = item;
target.data_obj["id_" + item[options.code]] = item;
});
}
// 递归获取子节点并且设置子节点
var recursionNode = function(parentNode, lv, row_id, p_id) {
var $tbody = target.find("tbody");
var _ls = target.data_list["_n_" + parentNode[options.id]];
var _ls = target.data_list["_n_" + parentNode[options.code]];
var $tr = renderRow(parentNode, _ls ? true : false, lv, row_id, p_id);
$tbody.append($tr);
if (_ls) {
@@ -307,11 +307,11 @@
target.hasSelectItem = true;
var $td = $('<td style="text-align:center;width:36px"></td>');
if (column.radio) {
var _ipt = $('<input name="select_item" type="radio" value="' + item[options.id] + '"></input>');
var _ipt = $('<input name="select_item" type="radio" value="' + item[options.code] + '"></input>');
$td.append(_ipt);
}
if (column.checkbox) {
var _ipt = $('<input name="select_item" type="checkbox" value="' + item[options.id] + '"></input>');
var _ipt = $('<input name="select_item" type="checkbox" value="' + item[options.code] + '"></input>');
$td.append(_ipt);
}
$tr.append($td);
@@ -441,9 +441,9 @@
target.appendData = function(data) {
// 下边的操作主要是为了查询时让一些没有根节点的节点显示
$.each(data, function(i, item) {
var _data = target.data_obj["id_" + item[options.id]];
var _p_data = target.data_obj["id_" + item[options.parentId]];
var _c_list = target.data_list["_n_" + item[options.parentId]];
var _data = target.data_obj["id_" + item[options.code]];
var _p_data = target.data_obj["id_" + item[options.parentCode]];
var _c_list = target.data_list["_n_" + item[options.parentCode]];
var row_id = ""; //行id
var p_id = ""; //父行id
var _lv = 1; //如果没有父就是1默认显示
@@ -643,26 +643,26 @@
};
$.fn.bootstrapTreeTable.defaults = {
id: 'id', // 选取记录返回的值,用于设置父子关系
parentId: 'parentId', // 用于设置父子关系
rootIdValue: null, // 设置根节点id值----可指定根节点,默认为null,"",0,"0"
data: null, // 构造table的数据集合
type: "GET", // 请求数据的ajax类型
url: null, // 请求数据的ajax的url
ajaxParams: {}, // 请求数据的ajax的data属性
expandColumn: 0, // 在哪一列上面显示展开按钮
expandAll: false, // 是否全部展开
expandFirst: true, // 是否默认第一级展开--expandAll为false时生效
striped: false, // 是否各行渐变色
bordered: true, // 是否显示边框
hover: true, // 是否鼠标悬停
condensed: false, // 是否紧缩表格
columns: [], // 列
toolbar: null, // 顶部工具条
height: 0, // 表格高度
showTitle: true, // 是否采用title属性显示字段内容(被formatter格式化的字段不会显示)
showColumns: true, // 是否显示内容列下拉框
showRefresh: true, // 是否显示刷新按钮
code: 'code', // 选取记录返回的值,用于设置父子关系
parentCode: 'parentCode', // 用于设置父子关系
rootIdValue: null, // 设置根节点id值----可指定根节点,默认为null,"",0,"0"
data: null, // 构造table的数据集合
type: "GET", // 请求数据的ajax类型
url: null, // 请求数据的ajax的url
ajaxParams: {}, // 请求数据的ajax的data属性
expandColumn: 0, // 在哪一列上面显示展开按钮
expandAll: false, // 是否全部展开
expandFirst: true, // 是否默认第一级展开--expandAll为false时生效
striped: false, // 是否各行渐变色
bordered: true, // 是否显示边框
hover: true, // 是否鼠标悬停
condensed: false, // 是否紧缩表格
columns: [], // 列
toolbar: null, // 顶部工具条
height: 0, // 表格高度
showTitle: true, // 是否采用title属性显示字段内容(被formatter格式化的字段不会显示)
showColumns: true, // 是否显示内容列下拉框
showRefresh: true, // 是否显示刷新按钮
expanderExpandedClass: 'glyphicon glyphicon-chevron-down', // 展开的按钮的图标
expanderCollapsedClass: 'glyphicon glyphicon-chevron-right' // 缩起的按钮的图标
@@ -123,6 +123,7 @@
$(window).bind('mouseup', imgMouseUp);
el.bind('mousewheel DOMMouseScroll', zoomImage);
};
obj.image.crossOrigin = 'Anonymous';
obj.image.src = options.imgSrc;
el.on('remove', function(){$(window).unbind('mouseup', imgMouseUp)});
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,418 @@
/*!
* Datetimepicker for Bootstrap
*
* Copyright 2012 Stefan Petre
* Improvements by Andrew Rowls
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
*/
.datetimepicker {
padding: 4px;
margin-top: 1px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
direction: ltr;
}
.datetimepicker-inline {
width: 220px;
}
.datetimepicker.datetimepicker-rtl {
direction: rtl;
}
.datetimepicker.datetimepicker-rtl table tr td span {
float: right;
}
.datetimepicker-dropdown, .datetimepicker-dropdown-left {
top: 0;
left: 0;
}
[class*=" datetimepicker-dropdown"]:before {
content: '';
display: inline-block;
border-left: 7px solid transparent;
border-right: 7px solid transparent;
border-bottom: 7px solid #cccccc;
border-bottom-color: rgba(0, 0, 0, 0.2);
position: absolute;
}
[class*=" datetimepicker-dropdown"]:after {
content: '';
display: inline-block;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid #ffffff;
position: absolute;
}
[class*=" datetimepicker-dropdown-top"]:before {
content: '';
display: inline-block;
border-left: 7px solid transparent;
border-right: 7px solid transparent;
border-top: 7px solid #cccccc;
border-top-color: rgba(0, 0, 0, 0.2);
border-bottom: 0;
}
[class*=" datetimepicker-dropdown-top"]:after {
content: '';
display: inline-block;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-top: 6px solid #ffffff;
border-bottom: 0;
}
.datetimepicker-dropdown-bottom-left:before {
top: -7px;
right: 6px;
}
.datetimepicker-dropdown-bottom-left:after {
top: -6px;
right: 7px;
}
.datetimepicker-dropdown-bottom-right:before {
top: -7px;
left: 6px;
}
.datetimepicker-dropdown-bottom-right:after {
top: -6px;
left: 7px;
}
.datetimepicker-dropdown-top-left:before {
bottom: -7px;
right: 6px;
}
.datetimepicker-dropdown-top-left:after {
bottom: -6px;
right: 7px;
}
.datetimepicker-dropdown-top-right:before {
bottom: -7px;
left: 6px;
}
.datetimepicker-dropdown-top-right:after {
bottom: -6px;
left: 7px;
}
.datetimepicker > div {
display: none;
}
.datetimepicker.minutes div.datetimepicker-minutes {
display: block;
}
.datetimepicker.hours div.datetimepicker-hours {
display: block;
}
.datetimepicker.days div.datetimepicker-days {
display: block;
}
.datetimepicker.months div.datetimepicker-months {
display: block;
}
.datetimepicker.years div.datetimepicker-years {
display: block;
}
.datetimepicker table {
margin: 0;
}
.datetimepicker td,
.datetimepicker th {
text-align: center;
width: 20px;
height: 20px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
border: none;
}
.table-striped .datetimepicker table tr td,
.table-striped .datetimepicker table tr th {
background-color: transparent;
}
.datetimepicker table tr td.minute:hover {
background: #eeeeee;
cursor: pointer;
}
.datetimepicker table tr td.hour:hover {
background: #eeeeee;
cursor: pointer;
}
.datetimepicker table tr td.day:hover {
background: #eeeeee;
cursor: pointer;
}
.datetimepicker table tr td.old,
.datetimepicker table tr td.new {
color: #999999;
}
.datetimepicker table tr td.disabled,
.datetimepicker table tr td.disabled:hover {
background: none;
color: #999999;
cursor: default;
}
.datetimepicker table tr td.today,
.datetimepicker table tr td.today:hover,
.datetimepicker table tr td.today.disabled,
.datetimepicker table tr td.today.disabled:hover {
background-color: #fde19a;
background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a);
background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a);
background-image: -o-linear-gradient(top, #fdd49a, #fdf59a);
background-image: linear-gradient(to bottom, #fdd49a, #fdf59a);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);
border-color: #fdf59a #fdf59a #fbed50;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.datetimepicker table tr td.today:hover,
.datetimepicker table tr td.today:hover:hover,
.datetimepicker table tr td.today.disabled:hover,
.datetimepicker table tr td.today.disabled:hover:hover,
.datetimepicker table tr td.today:active,
.datetimepicker table tr td.today:hover:active,
.datetimepicker table tr td.today.disabled:active,
.datetimepicker table tr td.today.disabled:hover:active,
.datetimepicker table tr td.today.active,
.datetimepicker table tr td.today:hover.active,
.datetimepicker table tr td.today.disabled.active,
.datetimepicker table tr td.today.disabled:hover.active,
.datetimepicker table tr td.today.disabled,
.datetimepicker table tr td.today:hover.disabled,
.datetimepicker table tr td.today.disabled.disabled,
.datetimepicker table tr td.today.disabled:hover.disabled,
.datetimepicker table tr td.today[disabled],
.datetimepicker table tr td.today:hover[disabled],
.datetimepicker table tr td.today.disabled[disabled],
.datetimepicker table tr td.today.disabled:hover[disabled] {
background-color: #fdf59a;
}
.datetimepicker table tr td.today:active,
.datetimepicker table tr td.today:hover:active,
.datetimepicker table tr td.today.disabled:active,
.datetimepicker table tr td.today.disabled:hover:active,
.datetimepicker table tr td.today.active,
.datetimepicker table tr td.today:hover.active,
.datetimepicker table tr td.today.disabled.active,
.datetimepicker table tr td.today.disabled:hover.active {
background-color: #fbf069;
}
.datetimepicker table tr td.active,
.datetimepicker table tr td.active:hover,
.datetimepicker table tr td.active.disabled,
.datetimepicker table tr td.active.disabled:hover {
background-color: #006dcc;
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
background-image: linear-gradient(to bottom, #0088cc, #0044cc);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
border-color: #0044cc #0044cc #002a80;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
color: #ffffff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datetimepicker table tr td.active:hover,
.datetimepicker table tr td.active:hover:hover,
.datetimepicker table tr td.active.disabled:hover,
.datetimepicker table tr td.active.disabled:hover:hover,
.datetimepicker table tr td.active:active,
.datetimepicker table tr td.active:hover:active,
.datetimepicker table tr td.active.disabled:active,
.datetimepicker table tr td.active.disabled:hover:active,
.datetimepicker table tr td.active.active,
.datetimepicker table tr td.active:hover.active,
.datetimepicker table tr td.active.disabled.active,
.datetimepicker table tr td.active.disabled:hover.active,
.datetimepicker table tr td.active.disabled,
.datetimepicker table tr td.active:hover.disabled,
.datetimepicker table tr td.active.disabled.disabled,
.datetimepicker table tr td.active.disabled:hover.disabled,
.datetimepicker table tr td.active[disabled],
.datetimepicker table tr td.active:hover[disabled],
.datetimepicker table tr td.active.disabled[disabled],
.datetimepicker table tr td.active.disabled:hover[disabled] {
background-color: #0044cc;
}
.datetimepicker table tr td.active:active,
.datetimepicker table tr td.active:hover:active,
.datetimepicker table tr td.active.disabled:active,
.datetimepicker table tr td.active.disabled:hover:active,
.datetimepicker table tr td.active.active,
.datetimepicker table tr td.active:hover.active,
.datetimepicker table tr td.active.disabled.active,
.datetimepicker table tr td.active.disabled:hover.active {
background-color: #003399;
}
.datetimepicker table tr td span {
display: block;
width: 23%;
height: 54px;
line-height: 54px;
float: left;
margin: 1%;
cursor: pointer;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.datetimepicker .datetimepicker-hours span {
height: 26px;
line-height: 26px;
}
.datetimepicker .datetimepicker-hours table tr td span.hour_am,
.datetimepicker .datetimepicker-hours table tr td span.hour_pm {
width: 14.6%;
}
.datetimepicker .datetimepicker-hours fieldset legend,
.datetimepicker .datetimepicker-minutes fieldset legend {
margin-bottom: inherit;
line-height: 30px;
}
.datetimepicker .datetimepicker-minutes span {
height: 26px;
line-height: 26px;
}
.datetimepicker table tr td span:hover {
background: #eeeeee;
}
.datetimepicker table tr td span.disabled,
.datetimepicker table tr td span.disabled:hover {
background: none;
color: #999999;
cursor: default;
}
.datetimepicker table tr td span.active,
.datetimepicker table tr td span.active:hover,
.datetimepicker table tr td span.active.disabled,
.datetimepicker table tr td span.active.disabled:hover {
background-color: #006dcc;
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
background-image: linear-gradient(to bottom, #0088cc, #0044cc);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
border-color: #0044cc #0044cc #002a80;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
color: #ffffff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datetimepicker table tr td span.active:hover,
.datetimepicker table tr td span.active:hover:hover,
.datetimepicker table tr td span.active.disabled:hover,
.datetimepicker table tr td span.active.disabled:hover:hover,
.datetimepicker table tr td span.active:active,
.datetimepicker table tr td span.active:hover:active,
.datetimepicker table tr td span.active.disabled:active,
.datetimepicker table tr td span.active.disabled:hover:active,
.datetimepicker table tr td span.active.active,
.datetimepicker table tr td span.active:hover.active,
.datetimepicker table tr td span.active.disabled.active,
.datetimepicker table tr td span.active.disabled:hover.active,
.datetimepicker table tr td span.active.disabled,
.datetimepicker table tr td span.active:hover.disabled,
.datetimepicker table tr td span.active.disabled.disabled,
.datetimepicker table tr td span.active.disabled:hover.disabled,
.datetimepicker table tr td span.active[disabled],
.datetimepicker table tr td span.active:hover[disabled],
.datetimepicker table tr td span.active.disabled[disabled],
.datetimepicker table tr td span.active.disabled:hover[disabled] {
background-color: #0044cc;
}
.datetimepicker table tr td span.active:active,
.datetimepicker table tr td span.active:hover:active,
.datetimepicker table tr td span.active.disabled:active,
.datetimepicker table tr td span.active.disabled:hover:active,
.datetimepicker table tr td span.active.active,
.datetimepicker table tr td span.active:hover.active,
.datetimepicker table tr td span.active.disabled.active,
.datetimepicker table tr td span.active.disabled:hover.active {
background-color: #003399;
}
.datetimepicker table tr td span.old {
color: #999999;
}
.datetimepicker th.switch {
width: 145px;
}
.datetimepicker th span.glyphicon {
pointer-events: none;
}
.datetimepicker thead tr:first-child th,
.datetimepicker tfoot th {
cursor: pointer;
}
.datetimepicker thead tr:first-child th:hover,
.datetimepicker tfoot th:hover {
background: #eeeeee;
}
.input-append.date .add-on i,
.input-prepend.date .add-on i,
.input-group.date .input-group-addon span {
cursor: pointer;
width: 14px;
height: 14px;
}
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,789 +0,0 @@
/*!
* Datepicker for Bootstrap
*
* Copyright 2012 Stefan Petre
* Improvements by Andrew Rowls
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
*/
.datepicker {
padding: 4px;
border-radius: 4px;
direction: ltr;
/*.dow {
border-top: 1px solid #ddd !important;
}*/
}
.datepicker-inline {
width: 220px;
}
.datepicker.datepicker-rtl {
direction: rtl;
}
.datepicker.datepicker-rtl table tr td span {
float: right;
}
.datepicker-dropdown {
top: 0;
left: 0;
}
.datepicker-dropdown:before {
content: '';
display: inline-block;
border-left: 7px solid transparent;
border-right: 7px solid transparent;
border-bottom: 7px solid #ccc;
border-top: 0;
border-bottom-color: rgba(0, 0, 0, 0.2);
position: absolute;
}
.datepicker-dropdown:after {
content: '';
display: inline-block;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid #fff;
border-top: 0;
position: absolute;
}
.datepicker-dropdown.datepicker-orient-left:before {
left: 6px;
}
.datepicker-dropdown.datepicker-orient-left:after {
left: 7px;
}
.datepicker-dropdown.datepicker-orient-right:before {
right: 6px;
}
.datepicker-dropdown.datepicker-orient-right:after {
right: 7px;
}
.datepicker-dropdown.datepicker-orient-top:before {
top: -7px;
}
.datepicker-dropdown.datepicker-orient-top:after {
top: -6px;
}
.datepicker-dropdown.datepicker-orient-bottom:before {
bottom: -7px;
border-bottom: 0;
border-top: 7px solid #999;
}
.datepicker-dropdown.datepicker-orient-bottom:after {
bottom: -6px;
border-bottom: 0;
border-top: 6px solid #fff;
}
.datepicker > div {
display: none;
}
.datepicker.days div.datepicker-days {
display: block;
}
.datepicker.months div.datepicker-months {
display: block;
}
.datepicker.years div.datepicker-years {
display: block;
}
.datepicker table {
margin: 0;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.datepicker table tr td,
.datepicker table tr th {
text-align: center;
width: 30px;
height: 30px;
border-radius: 4px;
border: none;
}
.table-striped .datepicker table tr td,
.table-striped .datepicker table tr th {
background-color: transparent;
}
.datepicker table tr td.day:hover,
.datepicker table tr td.day.focused {
background: #eeeeee;
cursor: pointer;
}
.datepicker table tr td.old,
.datepicker table tr td.new {
color: #999999;
}
.datepicker table tr td.disabled,
.datepicker table tr td.disabled:hover {
background: none;
color: #999999;
cursor: default;
}
.datepicker table tr td.today,
.datepicker table tr td.today:hover,
.datepicker table tr td.today.disabled,
.datepicker table tr td.today.disabled:hover {
color: #000000;
background-color: #ffdb99;
border-color: #ffb733;
}
.datepicker table tr td.today:hover,
.datepicker table tr td.today:hover:hover,
.datepicker table tr td.today.disabled:hover,
.datepicker table tr td.today.disabled:hover:hover,
.datepicker table tr td.today:focus,
.datepicker table tr td.today:hover:focus,
.datepicker table tr td.today.disabled:focus,
.datepicker table tr td.today.disabled:hover:focus,
.datepicker table tr td.today:active,
.datepicker table tr td.today:hover:active,
.datepicker table tr td.today.disabled:active,
.datepicker table tr td.today.disabled:hover:active,
.datepicker table tr td.today.active,
.datepicker table tr td.today:hover.active,
.datepicker table tr td.today.disabled.active,
.datepicker table tr td.today.disabled:hover.active,
.open .dropdown-toggle.datepicker table tr td.today,
.open .dropdown-toggle.datepicker table tr td.today:hover,
.open .dropdown-toggle.datepicker table tr td.today.disabled,
.open .dropdown-toggle.datepicker table tr td.today.disabled:hover {
color: #000000;
background-color: #ffcd70;
border-color: #f59e00;
}
.datepicker table tr td.today:active,
.datepicker table tr td.today:hover:active,
.datepicker table tr td.today.disabled:active,
.datepicker table tr td.today.disabled:hover:active,
.datepicker table tr td.today.active,
.datepicker table tr td.today:hover.active,
.datepicker table tr td.today.disabled.active,
.datepicker table tr td.today.disabled:hover.active,
.open .dropdown-toggle.datepicker table tr td.today,
.open .dropdown-toggle.datepicker table tr td.today:hover,
.open .dropdown-toggle.datepicker table tr td.today.disabled,
.open .dropdown-toggle.datepicker table tr td.today.disabled:hover {
background-image: none;
}
.datepicker table tr td.today.disabled,
.datepicker table tr td.today:hover.disabled,
.datepicker table tr td.today.disabled.disabled,
.datepicker table tr td.today.disabled:hover.disabled,
.datepicker table tr td.today[disabled],
.datepicker table tr td.today:hover[disabled],
.datepicker table tr td.today.disabled[disabled],
.datepicker table tr td.today.disabled:hover[disabled],
fieldset[disabled] .datepicker table tr td.today,
fieldset[disabled] .datepicker table tr td.today:hover,
fieldset[disabled] .datepicker table tr td.today.disabled,
fieldset[disabled] .datepicker table tr td.today.disabled:hover,
.datepicker table tr td.today.disabled:hover,
.datepicker table tr td.today:hover.disabled:hover,
.datepicker table tr td.today.disabled.disabled:hover,
.datepicker table tr td.today.disabled:hover.disabled:hover,
.datepicker table tr td.today[disabled]:hover,
.datepicker table tr td.today:hover[disabled]:hover,
.datepicker table tr td.today.disabled[disabled]:hover,
.datepicker table tr td.today.disabled:hover[disabled]:hover,
fieldset[disabled] .datepicker table tr td.today:hover,
fieldset[disabled] .datepicker table tr td.today:hover:hover,
fieldset[disabled] .datepicker table tr td.today.disabled:hover,
fieldset[disabled] .datepicker table tr td.today.disabled:hover:hover,
.datepicker table tr td.today.disabled:focus,
.datepicker table tr td.today:hover.disabled:focus,
.datepicker table tr td.today.disabled.disabled:focus,
.datepicker table tr td.today.disabled:hover.disabled:focus,
.datepicker table tr td.today[disabled]:focus,
.datepicker table tr td.today:hover[disabled]:focus,
.datepicker table tr td.today.disabled[disabled]:focus,
.datepicker table tr td.today.disabled:hover[disabled]:focus,
fieldset[disabled] .datepicker table tr td.today:focus,
fieldset[disabled] .datepicker table tr td.today:hover:focus,
fieldset[disabled] .datepicker table tr td.today.disabled:focus,
fieldset[disabled] .datepicker table tr td.today.disabled:hover:focus,
.datepicker table tr td.today.disabled:active,
.datepicker table tr td.today:hover.disabled:active,
.datepicker table tr td.today.disabled.disabled:active,
.datepicker table tr td.today.disabled:hover.disabled:active,
.datepicker table tr td.today[disabled]:active,
.datepicker table tr td.today:hover[disabled]:active,
.datepicker table tr td.today.disabled[disabled]:active,
.datepicker table tr td.today.disabled:hover[disabled]:active,
fieldset[disabled] .datepicker table tr td.today:active,
fieldset[disabled] .datepicker table tr td.today:hover:active,
fieldset[disabled] .datepicker table tr td.today.disabled:active,
fieldset[disabled] .datepicker table tr td.today.disabled:hover:active,
.datepicker table tr td.today.disabled.active,
.datepicker table tr td.today:hover.disabled.active,
.datepicker table tr td.today.disabled.disabled.active,
.datepicker table tr td.today.disabled:hover.disabled.active,
.datepicker table tr td.today[disabled].active,
.datepicker table tr td.today:hover[disabled].active,
.datepicker table tr td.today.disabled[disabled].active,
.datepicker table tr td.today.disabled:hover[disabled].active,
fieldset[disabled] .datepicker table tr td.today.active,
fieldset[disabled] .datepicker table tr td.today:hover.active,
fieldset[disabled] .datepicker table tr td.today.disabled.active,
fieldset[disabled] .datepicker table tr td.today.disabled:hover.active {
background-color: #ffdb99;
border-color: #ffb733;
}
.datepicker table tr td.today:hover:hover {
color: #000;
}
.datepicker table tr td.today.active:hover {
color: #fff;
}
.datepicker table tr td.range,
.datepicker table tr td.range:hover,
.datepicker table tr td.range.disabled,
.datepicker table tr td.range.disabled:hover {
background: #eeeeee;
border-radius: 0;
}
.datepicker table tr td.range.today,
.datepicker table tr td.range.today:hover,
.datepicker table tr td.range.today.disabled,
.datepicker table tr td.range.today.disabled:hover {
color: #000000;
background-color: #f7ca77;
border-color: #f1a417;
border-radius: 0;
}
.datepicker table tr td.range.today:hover,
.datepicker table tr td.range.today:hover:hover,
.datepicker table tr td.range.today.disabled:hover,
.datepicker table tr td.range.today.disabled:hover:hover,
.datepicker table tr td.range.today:focus,
.datepicker table tr td.range.today:hover:focus,
.datepicker table tr td.range.today.disabled:focus,
.datepicker table tr td.range.today.disabled:hover:focus,
.datepicker table tr td.range.today:active,
.datepicker table tr td.range.today:hover:active,
.datepicker table tr td.range.today.disabled:active,
.datepicker table tr td.range.today.disabled:hover:active,
.datepicker table tr td.range.today.active,
.datepicker table tr td.range.today:hover.active,
.datepicker table tr td.range.today.disabled.active,
.datepicker table tr td.range.today.disabled:hover.active,
.open .dropdown-toggle.datepicker table tr td.range.today,
.open .dropdown-toggle.datepicker table tr td.range.today:hover,
.open .dropdown-toggle.datepicker table tr td.range.today.disabled,
.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover {
color: #000000;
background-color: #f4bb51;
border-color: #bf800c;
}
.datepicker table tr td.range.today:active,
.datepicker table tr td.range.today:hover:active,
.datepicker table tr td.range.today.disabled:active,
.datepicker table tr td.range.today.disabled:hover:active,
.datepicker table tr td.range.today.active,
.datepicker table tr td.range.today:hover.active,
.datepicker table tr td.range.today.disabled.active,
.datepicker table tr td.range.today.disabled:hover.active,
.open .dropdown-toggle.datepicker table tr td.range.today,
.open .dropdown-toggle.datepicker table tr td.range.today:hover,
.open .dropdown-toggle.datepicker table tr td.range.today.disabled,
.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover {
background-image: none;
}
.datepicker table tr td.range.today.disabled,
.datepicker table tr td.range.today:hover.disabled,
.datepicker table tr td.range.today.disabled.disabled,
.datepicker table tr td.range.today.disabled:hover.disabled,
.datepicker table tr td.range.today[disabled],
.datepicker table tr td.range.today:hover[disabled],
.datepicker table tr td.range.today.disabled[disabled],
.datepicker table tr td.range.today.disabled:hover[disabled],
fieldset[disabled] .datepicker table tr td.range.today,
fieldset[disabled] .datepicker table tr td.range.today:hover,
fieldset[disabled] .datepicker table tr td.range.today.disabled,
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover,
.datepicker table tr td.range.today.disabled:hover,
.datepicker table tr td.range.today:hover.disabled:hover,
.datepicker table tr td.range.today.disabled.disabled:hover,
.datepicker table tr td.range.today.disabled:hover.disabled:hover,
.datepicker table tr td.range.today[disabled]:hover,
.datepicker table tr td.range.today:hover[disabled]:hover,
.datepicker table tr td.range.today.disabled[disabled]:hover,
.datepicker table tr td.range.today.disabled:hover[disabled]:hover,
fieldset[disabled] .datepicker table tr td.range.today:hover,
fieldset[disabled] .datepicker table tr td.range.today:hover:hover,
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover,
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:hover,
.datepicker table tr td.range.today.disabled:focus,
.datepicker table tr td.range.today:hover.disabled:focus,
.datepicker table tr td.range.today.disabled.disabled:focus,
.datepicker table tr td.range.today.disabled:hover.disabled:focus,
.datepicker table tr td.range.today[disabled]:focus,
.datepicker table tr td.range.today:hover[disabled]:focus,
.datepicker table tr td.range.today.disabled[disabled]:focus,
.datepicker table tr td.range.today.disabled:hover[disabled]:focus,
fieldset[disabled] .datepicker table tr td.range.today:focus,
fieldset[disabled] .datepicker table tr td.range.today:hover:focus,
fieldset[disabled] .datepicker table tr td.range.today.disabled:focus,
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:focus,
.datepicker table tr td.range.today.disabled:active,
.datepicker table tr td.range.today:hover.disabled:active,
.datepicker table tr td.range.today.disabled.disabled:active,
.datepicker table tr td.range.today.disabled:hover.disabled:active,
.datepicker table tr td.range.today[disabled]:active,
.datepicker table tr td.range.today:hover[disabled]:active,
.datepicker table tr td.range.today.disabled[disabled]:active,
.datepicker table tr td.range.today.disabled:hover[disabled]:active,
fieldset[disabled] .datepicker table tr td.range.today:active,
fieldset[disabled] .datepicker table tr td.range.today:hover:active,
fieldset[disabled] .datepicker table tr td.range.today.disabled:active,
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:active,
.datepicker table tr td.range.today.disabled.active,
.datepicker table tr td.range.today:hover.disabled.active,
.datepicker table tr td.range.today.disabled.disabled.active,
.datepicker table tr td.range.today.disabled:hover.disabled.active,
.datepicker table tr td.range.today[disabled].active,
.datepicker table tr td.range.today:hover[disabled].active,
.datepicker table tr td.range.today.disabled[disabled].active,
.datepicker table tr td.range.today.disabled:hover[disabled].active,
fieldset[disabled] .datepicker table tr td.range.today.active,
fieldset[disabled] .datepicker table tr td.range.today:hover.active,
fieldset[disabled] .datepicker table tr td.range.today.disabled.active,
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover.active {
background-color: #f7ca77;
border-color: #f1a417;
}
.datepicker table tr td.selected,
.datepicker table tr td.selected:hover,
.datepicker table tr td.selected.disabled,
.datepicker table tr td.selected.disabled:hover {
color: #ffffff;
background-color: #999999;
border-color: #555555;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datepicker table tr td.selected:hover,
.datepicker table tr td.selected:hover:hover,
.datepicker table tr td.selected.disabled:hover,
.datepicker table tr td.selected.disabled:hover:hover,
.datepicker table tr td.selected:focus,
.datepicker table tr td.selected:hover:focus,
.datepicker table tr td.selected.disabled:focus,
.datepicker table tr td.selected.disabled:hover:focus,
.datepicker table tr td.selected:active,
.datepicker table tr td.selected:hover:active,
.datepicker table tr td.selected.disabled:active,
.datepicker table tr td.selected.disabled:hover:active,
.datepicker table tr td.selected.active,
.datepicker table tr td.selected:hover.active,
.datepicker table tr td.selected.disabled.active,
.datepicker table tr td.selected.disabled:hover.active,
.open .dropdown-toggle.datepicker table tr td.selected,
.open .dropdown-toggle.datepicker table tr td.selected:hover,
.open .dropdown-toggle.datepicker table tr td.selected.disabled,
.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover {
color: #ffffff;
background-color: #858585;
border-color: #373737;
}
.datepicker table tr td.selected:active,
.datepicker table tr td.selected:hover:active,
.datepicker table tr td.selected.disabled:active,
.datepicker table tr td.selected.disabled:hover:active,
.datepicker table tr td.selected.active,
.datepicker table tr td.selected:hover.active,
.datepicker table tr td.selected.disabled.active,
.datepicker table tr td.selected.disabled:hover.active,
.open .dropdown-toggle.datepicker table tr td.selected,
.open .dropdown-toggle.datepicker table tr td.selected:hover,
.open .dropdown-toggle.datepicker table tr td.selected.disabled,
.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover {
background-image: none;
}
.datepicker table tr td.selected.disabled,
.datepicker table tr td.selected:hover.disabled,
.datepicker table tr td.selected.disabled.disabled,
.datepicker table tr td.selected.disabled:hover.disabled,
.datepicker table tr td.selected[disabled],
.datepicker table tr td.selected:hover[disabled],
.datepicker table tr td.selected.disabled[disabled],
.datepicker table tr td.selected.disabled:hover[disabled],
fieldset[disabled] .datepicker table tr td.selected,
fieldset[disabled] .datepicker table tr td.selected:hover,
fieldset[disabled] .datepicker table tr td.selected.disabled,
fieldset[disabled] .datepicker table tr td.selected.disabled:hover,
.datepicker table tr td.selected.disabled:hover,
.datepicker table tr td.selected:hover.disabled:hover,
.datepicker table tr td.selected.disabled.disabled:hover,
.datepicker table tr td.selected.disabled:hover.disabled:hover,
.datepicker table tr td.selected[disabled]:hover,
.datepicker table tr td.selected:hover[disabled]:hover,
.datepicker table tr td.selected.disabled[disabled]:hover,
.datepicker table tr td.selected.disabled:hover[disabled]:hover,
fieldset[disabled] .datepicker table tr td.selected:hover,
fieldset[disabled] .datepicker table tr td.selected:hover:hover,
fieldset[disabled] .datepicker table tr td.selected.disabled:hover,
fieldset[disabled] .datepicker table tr td.selected.disabled:hover:hover,
.datepicker table tr td.selected.disabled:focus,
.datepicker table tr td.selected:hover.disabled:focus,
.datepicker table tr td.selected.disabled.disabled:focus,
.datepicker table tr td.selected.disabled:hover.disabled:focus,
.datepicker table tr td.selected[disabled]:focus,
.datepicker table tr td.selected:hover[disabled]:focus,
.datepicker table tr td.selected.disabled[disabled]:focus,
.datepicker table tr td.selected.disabled:hover[disabled]:focus,
fieldset[disabled] .datepicker table tr td.selected:focus,
fieldset[disabled] .datepicker table tr td.selected:hover:focus,
fieldset[disabled] .datepicker table tr td.selected.disabled:focus,
fieldset[disabled] .datepicker table tr td.selected.disabled:hover:focus,
.datepicker table tr td.selected.disabled:active,
.datepicker table tr td.selected:hover.disabled:active,
.datepicker table tr td.selected.disabled.disabled:active,
.datepicker table tr td.selected.disabled:hover.disabled:active,
.datepicker table tr td.selected[disabled]:active,
.datepicker table tr td.selected:hover[disabled]:active,
.datepicker table tr td.selected.disabled[disabled]:active,
.datepicker table tr td.selected.disabled:hover[disabled]:active,
fieldset[disabled] .datepicker table tr td.selected:active,
fieldset[disabled] .datepicker table tr td.selected:hover:active,
fieldset[disabled] .datepicker table tr td.selected.disabled:active,
fieldset[disabled] .datepicker table tr td.selected.disabled:hover:active,
.datepicker table tr td.selected.disabled.active,
.datepicker table tr td.selected:hover.disabled.active,
.datepicker table tr td.selected.disabled.disabled.active,
.datepicker table tr td.selected.disabled:hover.disabled.active,
.datepicker table tr td.selected[disabled].active,
.datepicker table tr td.selected:hover[disabled].active,
.datepicker table tr td.selected.disabled[disabled].active,
.datepicker table tr td.selected.disabled:hover[disabled].active,
fieldset[disabled] .datepicker table tr td.selected.active,
fieldset[disabled] .datepicker table tr td.selected:hover.active,
fieldset[disabled] .datepicker table tr td.selected.disabled.active,
fieldset[disabled] .datepicker table tr td.selected.disabled:hover.active {
background-color: #999999;
border-color: #555555;
}
.datepicker table tr td.active,
.datepicker table tr td.active:hover,
.datepicker table tr td.active.disabled,
.datepicker table tr td.active.disabled:hover {
color: #ffffff;
background-color: #428bca;
border-color: #357ebd;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datepicker table tr td.active:hover,
.datepicker table tr td.active:hover:hover,
.datepicker table tr td.active.disabled:hover,
.datepicker table tr td.active.disabled:hover:hover,
.datepicker table tr td.active:focus,
.datepicker table tr td.active:hover:focus,
.datepicker table tr td.active.disabled:focus,
.datepicker table tr td.active.disabled:hover:focus,
.datepicker table tr td.active:active,
.datepicker table tr td.active:hover:active,
.datepicker table tr td.active.disabled:active,
.datepicker table tr td.active.disabled:hover:active,
.datepicker table tr td.active.active,
.datepicker table tr td.active:hover.active,
.datepicker table tr td.active.disabled.active,
.datepicker table tr td.active.disabled:hover.active,
.open .dropdown-toggle.datepicker table tr td.active,
.open .dropdown-toggle.datepicker table tr td.active:hover,
.open .dropdown-toggle.datepicker table tr td.active.disabled,
.open .dropdown-toggle.datepicker table tr td.active.disabled:hover {
color: #ffffff;
background-color: #3276b1;
border-color: #285e8e;
}
.datepicker table tr td.active:active,
.datepicker table tr td.active:hover:active,
.datepicker table tr td.active.disabled:active,
.datepicker table tr td.active.disabled:hover:active,
.datepicker table tr td.active.active,
.datepicker table tr td.active:hover.active,
.datepicker table tr td.active.disabled.active,
.datepicker table tr td.active.disabled:hover.active,
.open .dropdown-toggle.datepicker table tr td.active,
.open .dropdown-toggle.datepicker table tr td.active:hover,
.open .dropdown-toggle.datepicker table tr td.active.disabled,
.open .dropdown-toggle.datepicker table tr td.active.disabled:hover {
background-image: none;
}
.datepicker table tr td.active.disabled,
.datepicker table tr td.active:hover.disabled,
.datepicker table tr td.active.disabled.disabled,
.datepicker table tr td.active.disabled:hover.disabled,
.datepicker table tr td.active[disabled],
.datepicker table tr td.active:hover[disabled],
.datepicker table tr td.active.disabled[disabled],
.datepicker table tr td.active.disabled:hover[disabled],
fieldset[disabled] .datepicker table tr td.active,
fieldset[disabled] .datepicker table tr td.active:hover,
fieldset[disabled] .datepicker table tr td.active.disabled,
fieldset[disabled] .datepicker table tr td.active.disabled:hover,
.datepicker table tr td.active.disabled:hover,
.datepicker table tr td.active:hover.disabled:hover,
.datepicker table tr td.active.disabled.disabled:hover,
.datepicker table tr td.active.disabled:hover.disabled:hover,
.datepicker table tr td.active[disabled]:hover,
.datepicker table tr td.active:hover[disabled]:hover,
.datepicker table tr td.active.disabled[disabled]:hover,
.datepicker table tr td.active.disabled:hover[disabled]:hover,
fieldset[disabled] .datepicker table tr td.active:hover,
fieldset[disabled] .datepicker table tr td.active:hover:hover,
fieldset[disabled] .datepicker table tr td.active.disabled:hover,
fieldset[disabled] .datepicker table tr td.active.disabled:hover:hover,
.datepicker table tr td.active.disabled:focus,
.datepicker table tr td.active:hover.disabled:focus,
.datepicker table tr td.active.disabled.disabled:focus,
.datepicker table tr td.active.disabled:hover.disabled:focus,
.datepicker table tr td.active[disabled]:focus,
.datepicker table tr td.active:hover[disabled]:focus,
.datepicker table tr td.active.disabled[disabled]:focus,
.datepicker table tr td.active.disabled:hover[disabled]:focus,
fieldset[disabled] .datepicker table tr td.active:focus,
fieldset[disabled] .datepicker table tr td.active:hover:focus,
fieldset[disabled] .datepicker table tr td.active.disabled:focus,
fieldset[disabled] .datepicker table tr td.active.disabled:hover:focus,
.datepicker table tr td.active.disabled:active,
.datepicker table tr td.active:hover.disabled:active,
.datepicker table tr td.active.disabled.disabled:active,
.datepicker table tr td.active.disabled:hover.disabled:active,
.datepicker table tr td.active[disabled]:active,
.datepicker table tr td.active:hover[disabled]:active,
.datepicker table tr td.active.disabled[disabled]:active,
.datepicker table tr td.active.disabled:hover[disabled]:active,
fieldset[disabled] .datepicker table tr td.active:active,
fieldset[disabled] .datepicker table tr td.active:hover:active,
fieldset[disabled] .datepicker table tr td.active.disabled:active,
fieldset[disabled] .datepicker table tr td.active.disabled:hover:active,
.datepicker table tr td.active.disabled.active,
.datepicker table tr td.active:hover.disabled.active,
.datepicker table tr td.active.disabled.disabled.active,
.datepicker table tr td.active.disabled:hover.disabled.active,
.datepicker table tr td.active[disabled].active,
.datepicker table tr td.active:hover[disabled].active,
.datepicker table tr td.active.disabled[disabled].active,
.datepicker table tr td.active.disabled:hover[disabled].active,
fieldset[disabled] .datepicker table tr td.active.active,
fieldset[disabled] .datepicker table tr td.active:hover.active,
fieldset[disabled] .datepicker table tr td.active.disabled.active,
fieldset[disabled] .datepicker table tr td.active.disabled:hover.active {
background-color: #428bca;
border-color: #357ebd;
}
.datepicker table tr td span {
display: block;
width: 23%;
height: 54px;
line-height: 54px;
float: left;
margin: 1%;
cursor: pointer;
border-radius: 4px;
}
.datepicker table tr td span:hover {
background: #eeeeee;
}
.datepicker table tr td span.disabled,
.datepicker table tr td span.disabled:hover {
background: none;
color: #999999;
cursor: default;
}
.datepicker table tr td span.active,
.datepicker table tr td span.active:hover,
.datepicker table tr td span.active.disabled,
.datepicker table tr td span.active.disabled:hover {
color: #ffffff;
background-color: #428bca;
border-color: #357ebd;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datepicker table tr td span.active:hover,
.datepicker table tr td span.active:hover:hover,
.datepicker table tr td span.active.disabled:hover,
.datepicker table tr td span.active.disabled:hover:hover,
.datepicker table tr td span.active:focus,
.datepicker table tr td span.active:hover:focus,
.datepicker table tr td span.active.disabled:focus,
.datepicker table tr td span.active.disabled:hover:focus,
.datepicker table tr td span.active:active,
.datepicker table tr td span.active:hover:active,
.datepicker table tr td span.active.disabled:active,
.datepicker table tr td span.active.disabled:hover:active,
.datepicker table tr td span.active.active,
.datepicker table tr td span.active:hover.active,
.datepicker table tr td span.active.disabled.active,
.datepicker table tr td span.active.disabled:hover.active,
.open .dropdown-toggle.datepicker table tr td span.active,
.open .dropdown-toggle.datepicker table tr td span.active:hover,
.open .dropdown-toggle.datepicker table tr td span.active.disabled,
.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover {
color: #ffffff;
background-color: #3276b1;
border-color: #285e8e;
}
.datepicker table tr td span.active:active,
.datepicker table tr td span.active:hover:active,
.datepicker table tr td span.active.disabled:active,
.datepicker table tr td span.active.disabled:hover:active,
.datepicker table tr td span.active.active,
.datepicker table tr td span.active:hover.active,
.datepicker table tr td span.active.disabled.active,
.datepicker table tr td span.active.disabled:hover.active,
.open .dropdown-toggle.datepicker table tr td span.active,
.open .dropdown-toggle.datepicker table tr td span.active:hover,
.open .dropdown-toggle.datepicker table tr td span.active.disabled,
.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover {
background-image: none;
}
.datepicker table tr td span.active.disabled,
.datepicker table tr td span.active:hover.disabled,
.datepicker table tr td span.active.disabled.disabled,
.datepicker table tr td span.active.disabled:hover.disabled,
.datepicker table tr td span.active[disabled],
.datepicker table tr td span.active:hover[disabled],
.datepicker table tr td span.active.disabled[disabled],
.datepicker table tr td span.active.disabled:hover[disabled],
fieldset[disabled] .datepicker table tr td span.active,
fieldset[disabled] .datepicker table tr td span.active:hover,
fieldset[disabled] .datepicker table tr td span.active.disabled,
fieldset[disabled] .datepicker table tr td span.active.disabled:hover,
.datepicker table tr td span.active.disabled:hover,
.datepicker table tr td span.active:hover.disabled:hover,
.datepicker table tr td span.active.disabled.disabled:hover,
.datepicker table tr td span.active.disabled:hover.disabled:hover,
.datepicker table tr td span.active[disabled]:hover,
.datepicker table tr td span.active:hover[disabled]:hover,
.datepicker table tr td span.active.disabled[disabled]:hover,
.datepicker table tr td span.active.disabled:hover[disabled]:hover,
fieldset[disabled] .datepicker table tr td span.active:hover,
fieldset[disabled] .datepicker table tr td span.active:hover:hover,
fieldset[disabled] .datepicker table tr td span.active.disabled:hover,
fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,
.datepicker table tr td span.active.disabled:focus,
.datepicker table tr td span.active:hover.disabled:focus,
.datepicker table tr td span.active.disabled.disabled:focus,
.datepicker table tr td span.active.disabled:hover.disabled:focus,
.datepicker table tr td span.active[disabled]:focus,
.datepicker table tr td span.active:hover[disabled]:focus,
.datepicker table tr td span.active.disabled[disabled]:focus,
.datepicker table tr td span.active.disabled:hover[disabled]:focus,
fieldset[disabled] .datepicker table tr td span.active:focus,
fieldset[disabled] .datepicker table tr td span.active:hover:focus,
fieldset[disabled] .datepicker table tr td span.active.disabled:focus,
fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,
.datepicker table tr td span.active.disabled:active,
.datepicker table tr td span.active:hover.disabled:active,
.datepicker table tr td span.active.disabled.disabled:active,
.datepicker table tr td span.active.disabled:hover.disabled:active,
.datepicker table tr td span.active[disabled]:active,
.datepicker table tr td span.active:hover[disabled]:active,
.datepicker table tr td span.active.disabled[disabled]:active,
.datepicker table tr td span.active.disabled:hover[disabled]:active,
fieldset[disabled] .datepicker table tr td span.active:active,
fieldset[disabled] .datepicker table tr td span.active:hover:active,
fieldset[disabled] .datepicker table tr td span.active.disabled:active,
fieldset[disabled] .datepicker table tr td span.active.disabled:hover:active,
.datepicker table tr td span.active.disabled.active,
.datepicker table tr td span.active:hover.disabled.active,
.datepicker table tr td span.active.disabled.disabled.active,
.datepicker table tr td span.active.disabled:hover.disabled.active,
.datepicker table tr td span.active[disabled].active,
.datepicker table tr td span.active:hover[disabled].active,
.datepicker table tr td span.active.disabled[disabled].active,
.datepicker table tr td span.active.disabled:hover[disabled].active,
fieldset[disabled] .datepicker table tr td span.active.active,
fieldset[disabled] .datepicker table tr td span.active:hover.active,
fieldset[disabled] .datepicker table tr td span.active.disabled.active,
fieldset[disabled] .datepicker table tr td span.active.disabled:hover.active {
background-color: #428bca;
border-color: #357ebd;
}
.datepicker table tr td span.old,
.datepicker table tr td span.new {
color: #999999;
}
.datepicker th.datepicker-switch {
width: 145px;
}
.datepicker thead tr:first-child th,
.datepicker tfoot tr th {
cursor: pointer;
}
.datepicker thead tr:first-child th:hover,
.datepicker tfoot tr th:hover {
background: #eeeeee;
}
.datepicker .cw {
font-size: 10px;
width: 12px;
padding: 0 2px 0 5px;
vertical-align: middle;
}
.datepicker thead tr:first-child th.cw {
cursor: default;
background-color: transparent;
}
.input-group.date .input-group-addon i {
cursor: pointer;
width: 16px;
height: 16px;
}
.input-daterange input {
text-align: center;
}
.input-daterange input:first-child {
border-radius: 3px 0 0 3px;
}
.input-daterange input:last-child {
border-radius: 0 3px 3px 0;
}
.input-daterange .input-group-addon {
width: auto;
min-width: 16px;
padding: 4px 5px;
font-weight: normal;
line-height: 1.428571429;
text-align: center;
text-shadow: 0 1px 0 #fff;
vertical-align: middle;
background-color: #eeeeee;
border-width: 1px 0;
margin-left: -5px;
margin-right: -5px;
}
.datepicker.dropdown-menu {
position: absolute;
top: 100%;
left: 0;
z-index: 1000;
float: left;
display: none;
min-width: 160px;
list-style: none;
background-color: #ffffff;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, 0.2);
border-radius: 5px;
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-webkit-background-clip: padding-box;
-moz-background-clip: padding;
background-clip: padding-box;
*border-right-width: 2px;
*border-bottom-width: 2px;
color: #333333;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 13px;
line-height: 1.428571429;
}
.datepicker.dropdown-menu th,
.datepicker.dropdown-menu td {
padding: 4px 5px;
}
@@ -1,9 +1,7 @@
/**
* @name jQuery FullScreen Plugin
* @author Martin Angelov, Morten Sjøgren
* @version 1.2
* @url http://tutorialzine.com/2012/02/enhance-your-website-fullscreen-api/
* @license MIT License
* 基于jQuery FullScreen修改
* 新增支持IE全屏显示
* Copyright (c) 2019 ruoyi
*/
/*jshint browser: true, jquery: true */
@@ -15,6 +13,7 @@
var doc = document.documentElement;
return ('requestFullscreen' in doc) ||
('msRequestFullscreen' in doc) ||
('mozRequestFullScreen' in doc && document.mozFullScreenEnabled) ||
('webkitRequestFullScreen' in doc);
}
@@ -26,6 +25,8 @@
elem.mozRequestFullScreen();
} else if (elem.webkitRequestFullScreen) {
elem.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);
} else if (elem.msRequestFullscreen) {
elem.msRequestFullscreen();
}
}
@@ -33,6 +34,7 @@
return document.fullscreen ||
document.mozFullScreen ||
document.webkitIsFullScreen ||
document.msFullscreenElement ||
false;
}
@@ -43,6 +45,8 @@
document.mozCancelFullScreen();
} else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,50 @@
@charset "UTF-8";
.jsonview {
font-family: monospace;
font-size: 1.1em;
white-space: pre-wrap; }
.jsonview .prop {
font-weight: bold; }
.jsonview .null {
color: red; }
.jsonview .bool {
color: blue; }
.jsonview .num {
color: blue; }
.jsonview .string {
color: green;
white-space: pre-wrap; }
.jsonview .string.multiline {
display: inline-block;
vertical-align: text-top; }
.jsonview .collapser {
position: absolute;
left: -1em;
cursor: pointer; }
.jsonview .collapsible {
transition: height 1.2s;
transition: width 1.2s; }
.jsonview .collapsible.collapsed {
height: .8em;
width: 1em;
display: inline-block;
overflow: hidden;
margin: 0; }
.jsonview .collapsible.collapsed:before {
content: "…";
width: 1em;
margin-left: .2em; }
.jsonview .collapser.collapsed {
transform: rotate(0deg); }
.jsonview .q {
display: inline-block;
width: 0px;
color: transparent; }
.jsonview li {
position: relative; }
.jsonview ul {
list-style: none;
margin: 0 0 0 2em;
padding: 0; }
.jsonview h1 {
font-size: 1.2em; }
@@ -0,0 +1,250 @@
(function(jQuery) {
var $, Collapser, JSONFormatter, JSONView;
JSONFormatter = (function() {
function JSONFormatter(options) {
if (options == null) {
options = {};
}
this.options = options;
}
JSONFormatter.prototype.htmlEncode = function(html) {
if (html !== null) {
return html.toString().replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
} else {
return '';
}
};
JSONFormatter.prototype.jsString = function(s) {
s = JSON.stringify(s).slice(1, -1);
return this.htmlEncode(s);
};
JSONFormatter.prototype.decorateWithSpan = function(value, className) {
return "<span class=\"" + className + "\">" + (this.htmlEncode(value)) + "</span>";
};
JSONFormatter.prototype.valueToHTML = function(value, level) {
var valueType;
if (level == null) {
level = 0;
}
valueType = Object.prototype.toString.call(value).match(/\s(.+)]/)[1].toLowerCase();
return this["" + valueType + "ToHTML"].call(this, value, level);
};
JSONFormatter.prototype.nullToHTML = function(value) {
return this.decorateWithSpan('null', 'null');
};
JSONFormatter.prototype.numberToHTML = function(value) {
return this.decorateWithSpan(value, 'num');
};
JSONFormatter.prototype.stringToHTML = function(value) {
var multilineClass, newLinePattern;
if (/^(http|https|file):\/\/[^\s]+$/i.test(value)) {
return "<a href=\"" + (this.htmlEncode(value)) + "\"><span class=\"q\">\"</span>" + (this.jsString(value)) + "<span class=\"q\">\"</span></a>";
} else {
multilineClass = '';
value = this.jsString(value);
if (this.options.nl2br) {
newLinePattern = /([^>\\r\\n]?)(\\r\\n|\\n\\r|\\r|\\n)/g;
if (newLinePattern.test(value)) {
multilineClass = ' multiline';
value = (value + '').replace(newLinePattern, '$1' + '<br />');
}
}
return "<span class=\"string" + multilineClass + "\">\"" + value + "\"</span>";
}
};
JSONFormatter.prototype.booleanToHTML = function(value) {
return this.decorateWithSpan(value, 'bool');
};
JSONFormatter.prototype.arrayToHTML = function(array, level) {
var collapsible, hasContents, index, numProps, output, value, _i, _len;
if (level == null) {
level = 0;
}
hasContents = false;
output = '';
numProps = array.length;
for (index = _i = 0, _len = array.length; _i < _len; index = ++_i) {
value = array[index];
hasContents = true;
output += '<li>' + this.valueToHTML(value, level + 1);
if (numProps > 1) {
output += ',';
}
output += '</li>';
numProps--;
}
if (hasContents) {
collapsible = level === 0 ? '' : ' collapsible';
return "[<ul class=\"array level" + level + collapsible + "\">" + output + "</ul>]";
} else {
return '[ ]';
}
};
JSONFormatter.prototype.objectToHTML = function(object, level) {
var collapsible, hasContents, numProps, output, prop, value;
if (level == null) {
level = 0;
}
hasContents = false;
output = '';
numProps = 0;
for (prop in object) {
numProps++;
}
for (prop in object) {
value = object[prop];
hasContents = true;
output += "<li><span class=\"prop\"><span class=\"q\">\"</span>" + (this.jsString(prop)) + "<span class=\"q\">\"</span></span>: " + (this.valueToHTML(value, level + 1));
if (numProps > 1) {
output += ',';
}
output += '</li>';
numProps--;
}
if (hasContents) {
collapsible = level === 0 ? '' : ' collapsible';
return "{<ul class=\"obj level" + level + collapsible + "\">" + output + "</ul>}";
} else {
return '{ }';
}
};
JSONFormatter.prototype.jsonToHTML = function(json) {
return "<div class=\"jsonview\">" + (this.valueToHTML(json)) + "</div>";
};
return JSONFormatter;
})();
(typeof module !== "undefined" && module !== null) && (module.exports = JSONFormatter);
Collapser = {
bindEvent: function(item, collapsed) {
var collapser;
collapser = document.createElement('div');
collapser.className = 'collapser';
collapser.innerHTML = collapsed ? '+' : '-';
collapser.addEventListener('click', (function(_this) {
return function(event) {
return _this.toggle(event.target);
};
})(this));
item.insertBefore(collapser, item.firstChild);
if (collapsed) {
return this.collapse(collapser);
}
},
expand: function(collapser) {
var ellipsis, target;
target = this.collapseTarget(collapser);
ellipsis = target.parentNode.getElementsByClassName('ellipsis')[0];
target.parentNode.removeChild(ellipsis);
target.style.display = '';
return collapser.innerHTML = '-';
},
collapse: function(collapser) {
var ellipsis, target;
target = this.collapseTarget(collapser);
target.style.display = 'none';
ellipsis = document.createElement('span');
ellipsis.className = 'ellipsis';
ellipsis.innerHTML = ' &hellip; ';
target.parentNode.insertBefore(ellipsis, target);
return collapser.innerHTML = '+';
},
toggle: function(collapser) {
var target;
target = this.collapseTarget(collapser);
if (target.style.display === 'none') {
return this.expand(collapser);
} else {
return this.collapse(collapser);
}
},
collapseTarget: function(collapser) {
var target, targets;
targets = collapser.parentNode.getElementsByClassName('collapsible');
if (!targets.length) {
return;
}
return target = targets[0];
}
};
$ = jQuery;
JSONView = {
collapse: function(el) {
if (el.innerHTML === '-') {
return Collapser.collapse(el);
}
},
expand: function(el) {
if (el.innerHTML === '+') {
return Collapser.expand(el);
}
},
toggle: function(el) {
return Collapser.toggle(el);
}
};
return $.fn.JSONView = function() {
var args, defaultOptions, formatter, json, method, options, outputDoc;
args = arguments;
if (JSONView[args[0]] != null) {
method = args[0];
return this.each(function() {
var $this, level;
$this = $(this);
if (args[1] != null) {
level = args[1];
return $this.find(".jsonview .collapsible.level" + level).siblings('.collapser').each(function() {
return JSONView[method](this);
});
} else {
return $this.find('.jsonview > ul > li > .collapsible').siblings('.collapser').each(function() {
return JSONView[method](this);
});
}
});
} else {
json = args[0];
options = args[1] || {};
defaultOptions = {
collapsed: false,
nl2br: false
};
options = $.extend(defaultOptions, options);
formatter = new JSONFormatter({
nl2br: options.nl2br
});
if (Object.prototype.toString.call(json) === '[object String]') {
json = JSON.parse(json);
}
outputDoc = formatter.jsonToHTML(json);
return this.each(function() {
var $this, item, items, _i, _len, _results;
$this = $(this);
$this.html(outputDoc);
items = $this[0].getElementsByClassName('collapsible');
_results = [];
for (_i = 0, _len = items.length; _i < _len; _i++) {
item = items[_i];
if (item.parentNode.nodeName === 'LI') {
_results.push(Collapser.bindEvent(item.parentNode, options.collapsed));
} else {
_results.push(void 0);
}
}
return _results;
});
}
};
})(jQuery);
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

@@ -0,0 +1,138 @@
/**
* layer皮肤
* Copyright (c) 2019 ruoyi
*/
html #layui_layer_skinmoonstylecss {
display: none;
position: absolute;
width: 1989px;
}
body .layer-ext-moon[type="dialog"] {
min-width: 320px;
}
body .layer-ext-moon-msg[type="dialog"]{min-width:200px;}
body .layer-ext-moon .layui-layer-title {
background: #F8F8F8;
color: #333;
font-size: 14px;
height: 42px;
line-height: 42px;
border-bottom: 1px solid #eee;
}
body .layer-ext-moon .layui-layer-content .layui-layer-ico {
height: 32px;
width: 32px;
top:18.5px;
}
body .layer-ext-moon .layui-layer-ico0 {
background: url(default.png) no-repeat -96px 0;
;
}
body .layer-ext-moon .layui-layer-ico1 {
background: url(default.png) no-repeat -224px 0;
;
}
body .layer-ext-moon .layui-layer-ico2 {
background: url(default.png) no-repeat -192px 0;
}
body .layer-ext-moon .layui-layer-ico3 {
background: url(default.png) no-repeat -160px 0;
}
body .layer-ext-moon .layui-layer-ico4 {
background: url(default.png) no-repeat -320px 0;
}
body .layer-ext-moon .layui-layer-ico5 {
background: url(default.png) no-repeat -288px 0;
}
body .layer-ext-moon .layui-layer-ico6 {
background: url(default.png) -256px 0;
}
body .layer-ext-moon .layui-layer-ico7 {
background: url(default.png) no-repeat -128px 0;
}
body .layer-ext-moon .layui-layer-setwin {
top: 15px;
right: 15px;
}
body .layer-ext-moon .layui-layer-setwin a {
width: 16px;
height: 16px;
}
body .layer-ext-moon .layui-layer-setwin .layui-layer-min cite:hover {
background-color: #56abe4;
}
body .layer-ext-moon .layui-layer-setwin .layui-layer-max {
background: url(default.png) no-repeat -80px 0;
}
body .layer-ext-moon .layui-layer-setwin .layui-layer-max:hover {
background: url(default.png) no-repeat -64px 0;
}
body .layer-ext-moon .layui-layer-setwin .layui-layer-maxmin {
background: url(default.png) no-repeat -32px 0;
}
body .layer-ext-moon .layui-layer-setwin .layui-layer-maxmin:hover {
background: url(default.png) no-repeat -16px 0;
}
body .layer-ext-moon .layui-layer-setwin .layui-layer-close1,body .layer-ext-moon .layui-layer-setwin .layui-layer-close2 {
background: url(default.png) 0 0;
}
body .layer-ext-moon .layui-layer-setwin .layui-layer-close1:hover,body .layer-ext-moon .layui-layer-setwin .layui-layer-close2:hover {
background: url(default.png) -48px 0;
}
body .layer-ext-moon .layui-layer-padding{padding-top: 24px;}
body .layer-ext-moon .layui-layer-btn {
text-align: right;
padding: 10px 15px 12px;
background: #f0f4f7;
border-top: 1px #c7c7c7 solid;
}
body .layer-ext-moon .layui-layer-btn a {
font-size: 12px;
font-weight: normal;
margin: 0 3px;
margin-right: 7px;
margin-left: 7px;
padding: 0 15px;
color: #fff;
border: 1px solid #0064b6;
background: #0071ce;
border-radius: 3px;
display: inline-block;
height: 30px;
line-height: 30px;
text-align: center;
vertical-align: middle;
background-repeat: no-repeat;
text-decoration: none;
outline: none;
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box;
box-sizing: content-box;
}
body .layer-ext-moon .layui-layer-btn .layui-layer-btn0 {
background: #0071ce;
}
body .layer-ext-moon .layui-layer-btn .layui-layer-btn1 {
background: #fff;
color: #404a58;
border: 1px solid #c0c4cd;
border-radius: 3px;
}
body .layer-ext-moon .layui-layer-btn .layui-layer-btn2 {
background: #f60;
color: #fff;
border: 1px solid #f60;
border-radius: 3px;
}
body .layer-ext-moon .layui-layer-btn .layui-layer-btn3 {
background: #f00;
color: #fff;
border: 1px solid #f00;
border-radius: 3px;
}
body .layer-ext-moon .layui-layer-title span.layui-layer-tabnow{
height:47px;
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,28 +1,46 @@
(function ($) {
(function($) {
$.extend($.summernote.lang, {
'zh-CN': {
font: {
bold: '粗体',
italic: '斜体',
underline: '下划线',
strikethrough: '删除线',
clear: '清除格式',
height: '行高',
name: '字体',
strikethrough: '删除线',
subscript: '下标',
superscript: '上标',
size: '字号'
},
image: {
image: '图片',
insert: '插入图片',
resizeFull: '调整至 100%',
resizeHalf: '调整至 50%',
resizeQuarter: '调整至 25%',
floatLeft: '左浮动',
floatRight: '右浮动',
floatNone: '浮动',
dragImageHere: '将图片拖至此处',
resizeFull: '缩放至 100%',
resizeHalf: '缩放至 50%',
resizeQuarter: '缩放至 25%',
floatLeft: '左浮动',
floatRight: '右浮动',
floatNone: '取消浮动',
shapeRounded: '形状: 圆角',
shapeCircle: '形状: 圆',
shapeThumbnail: '形状: 缩略图',
shapeNone: '形状: 无',
dragImageHere: '将图片拖拽至此处',
dropImage: '拖拽图片或文本',
selectFromFiles: '从本地上传',
url: '图片地址'
maximumFileSize: '文件大小最大值',
maximumFileSizeError: '文件大小超出最大值。',
url: '图片地址',
remove: '移除图片',
original: '原始图片'
},
video: {
video: '视频',
videoLink: '视频链接',
insert: '插入视频',
url: '视频地址',
providers: '(优酷, 腾讯, Instagram, DailyMotion, Youtube等)'
},
link: {
link: '链接',
@@ -33,22 +51,22 @@
url: '链接地址',
openInNewWindow: '在新窗口打开'
},
video: {
video: '视频',
videoLink: '视频链接',
insert: '插入视频',
url: '视频地址',
providers: '(优酷, Instagram, DailyMotion, Youtube等)'
},
table: {
table: '表格'
table: '表格',
addRowAbove: '在上方插入行',
addRowBelow: '在下方插入行',
addColLeft: '在左侧插入列',
addColRight: '在右侧插入列',
delRow: '删除行',
delCol: '删除列',
delTable: '删除表格'
},
hr: {
insert: '水平线'
},
style: {
style: '样式',
normal: '普通',
p: '普通',
blockquote: '引用',
pre: '代码',
h1: '标题 1',
@@ -92,11 +110,45 @@
textFormatting: '文本格式',
action: '动作',
paragraphFormatting: '段落格式',
documentStyle: '文档样式'
documentStyle: '文档样式',
extraKeys: '额外按键'
},
help: {
insertParagraph: '插入段落',
undo: '撤销',
redo: '重做',
tab: '增加缩进',
untab: '减少缩进',
bold: '粗体',
italic: '斜体',
underline: '下划线',
strikethrough: '删除线',
removeFormat: '清除格式',
justifyLeft: '左对齐',
justifyCenter: '居中对齐',
justifyRight: '右对齐',
justifyFull: '两端对齐',
insertUnorderedList: '无序列表',
insertOrderedList: '有序列表',
outdent: '减少缩进',
indent: '增加缩进',
formatPara: '设置选中内容样式为 普通',
formatH1: '设置选中内容样式为 标题1',
formatH2: '设置选中内容样式为 标题2',
formatH3: '设置选中内容样式为 标题3',
formatH4: '设置选中内容样式为 标题4',
formatH5: '设置选中内容样式为 标题5',
formatH6: '设置选中内容样式为 标题6',
insertHorizontalRule: '插入水平线',
'linkDialog.show': '显示链接对话框'
},
history: {
undo: '撤销',
redo: '重做'
},
specialChar: {
specialChar: '特殊字符',
select: '选取特殊字符'
}
}
});
@@ -1,3 +1,3 @@
/*! Summernote v0.8.8 | (c) 2013- Alan Hong and other contributors | MIT license */
/*! Summernote v0.8.11 | (c) 2013- Alan Hong and other contributors | MIT license */
!function(a){a.extend(a.summernote.lang,{"zh-CN":{font:{bold:"粗体",italic:"斜体",underline:"下划线",clear:"清除格式",height:"行高",name:"字体",strikethrough:"删除线",subscript:"下标",superscript:"上标",size:"字号"},image:{image:"图片",insert:"插入图片",resizeFull:"缩放至 100%",resizeHalf:"缩放至 50%",resizeQuarter:"缩放至 25%",floatLeft:"靠左浮动",floatRight:"靠右浮动",floatNone:"取消浮动",shapeRounded:"形状: 圆角",shapeCircle:"形状: 圆",shapeThumbnail:"形状: 缩略图",shapeNone:"形状: 无",dragImageHere:"将图片拖拽至此处",selectFromFiles:"从本地上传",maximumFileSize:"文件大小最大值",maximumFileSizeError:"文件大小超出最大值。",url:"图片地址",remove:"移除图片"},video:{video:"视频",videoLink:"视频链接",insert:"插入视频",url:"视频地址",providers:"(优酷, 腾讯, Instagram, DailyMotion, Youtube等)"},link:{link:"链接",insert:"插入链接",unlink:"去除链接",edit:"编辑链接",textToDisplay:"显示文本",url:"链接地址",openInNewWindow:"在新窗口打开"},table:{table:"表格"},hr:{insert:"水平线"},style:{style:"样式",p:"普通",blockquote:"引用",pre:"代码",h1:"标题 1",h2:"标题 2",h3:"标题 3",h4:"标题 4",h5:"标题 5",h6:"标题 6"},lists:{unordered:"无序列表",ordered:"有序列表"},options:{help:"帮助",fullscreen:"全屏",codeview:"源代码"},paragraph:{paragraph:"段落",outdent:"减少缩进",indent:"增加缩进",left:"左对齐",center:"居中对齐",right:"右对齐",justify:"两端对齐"},color:{recent:"最近使用",more:"更多",background:"背景",foreground:"前景",transparent:"透明",setTransparent:"透明",reset:"重置",resetToDefault:"默认"},shortcut:{shortcuts:"快捷键",close:"关闭",textFormatting:"文本格式",action:"动作",paragraphFormatting:"段落格式",documentStyle:"文档样式",extraKeys:"额外按键"},history:{undo:"撤销",redo:"重做"},help:{insertParagraph:"插入段落",undo:"撤销",redo:"重做",tab:"增加缩进",untab:"减少缩进",bold:"粗体",italic:"斜体",underline:"下划线",strikethrough:"删除线",removeFormat:"清除格式",justifyLeft:"左对齐",justifyCenter:"居中对齐",justifyRight:"右对齐",justifyFull:"两端对齐",insertUnorderedList:"无序列表",insertOrderedList:"有序列表",outdent:"减少缩进",indent:"增加缩进",formatPara:"设置选中内容样式为 普通",formatH1:"设置选中内容样式为 标题1",formatH2:"设置选中内容样式为 标题2",formatH3:"设置选中内容样式为 标题3",formatH4:"设置选中内容样式为 标题4",formatH5:"设置选中内容样式为 标题5",formatH6:"设置选中内容样式为 标题6",insertHorizontalRule:"插入水平线","linkDialog.show":"显示链接对话框"}}})}(jQuery);
!function(e){e.extend(e.summernote.lang,{"zh-CN":{font:{bold:"粗体",italic:"斜体",underline:"下划线",clear:"清除格式",height:"行高",name:"字体",strikethrough:"删除线",subscript:"下标",superscript:"上标",size:"字号"},image:{image:"图片",insert:"插入图片",resizeFull:"缩放至 100%",resizeHalf:"缩放至 50%",resizeQuarter:"缩放至 25%",floatLeft:"靠左浮动",floatRight:"靠右浮动",floatNone:"取消浮动",shapeRounded:"形状: 圆角",shapeCircle:"形状: 圆",shapeThumbnail:"形状: 缩略图",shapeNone:"形状: 无",dragImageHere:"将图片拖拽至此处",dropImage:"拖拽图片或文本",selectFromFiles:"从本地上传",maximumFileSize:"文件大小最大值",maximumFileSizeError:"文件大小超出最大值。",url:"图片地址",remove:"移除图片",original:"原始图片"},video:{video:"视频",videoLink:"视频链接",insert:"插入视频",url:"视频地址",providers:"(优酷, 腾讯, Instagram, DailyMotion, Youtube等)"},link:{link:"链接",insert:"插入链接",unlink:"去除链接",edit:"编辑链接",textToDisplay:"显示文本",url:"链接地址",openInNewWindow:"在新窗口打开"},table:{table:"表格",addRowAbove:"在上方插入行",addRowBelow:"在下方插入行",addColLeft:"在左侧插入列",addColRight:"在右侧插入列",delRow:"删除行",delCol:"删除列",delTable:"删除表格"},hr:{insert:"水平线"},style:{style:"样式",p:"普通",blockquote:"引用",pre:"代码",h1:"标题 1",h2:"标题 2",h3:"标题 3",h4:"标题 4",h5:"标题 5",h6:"标题 6"},lists:{unordered:"无序列表",ordered:"有序列表"},options:{help:"帮助",fullscreen:"全屏",codeview:"源代码"},paragraph:{paragraph:"段落",outdent:"减少缩进",indent:"增加缩进",left:"左对齐",center:"居中对齐",right:"右对齐",justify:"两端对齐"},color:{recent:"最近使用",more:"更多",background:"背景",foreground:"前景",transparent:"透明",setTransparent:"透明",reset:"重置",resetToDefault:"默认"},shortcut:{shortcuts:"快捷键",close:"关闭",textFormatting:"文本格式",action:"动作",paragraphFormatting:"段落格式",documentStyle:"文档样式",extraKeys:"额外按键"},help:{insertParagraph:"插入段落",undo:"撤销",redo:"重做",tab:"增加缩进",untab:"减少缩进",bold:"粗体",italic:"斜体",underline:"下划线",strikethrough:"删除线",removeFormat:"清除格式",justifyLeft:"左对齐",justifyCenter:"居中对齐",justifyRight:"右对齐",justifyFull:"两端对齐",insertUnorderedList:"无序列表",insertOrderedList:"有序列表",outdent:"减少缩进",indent:"增加缩进",formatPara:"设置选中内容样式为 普通",formatH1:"设置选中内容样式为 标题1",formatH2:"设置选中内容样式为 标题2",formatH3:"设置选中内容样式为 标题3",formatH4:"设置选中内容样式为 标题4",formatH5:"设置选中内容样式为 标题5",formatH6:"设置选中内容样式为 标题6",insertHorizontalRule:"插入水平线","linkDialog.show":"显示链接对话框"},history:{undo:"撤销",redo:"重做"},specialChar:{specialChar:"特殊字符",select:"选取特殊字符"}}})}(jQuery);
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
@@ -8,7 +8,7 @@ $(document).ready(function(){
//手机号码验证身份证正则合并:(^\d{15}$)|(^\d{17}([0-9]|X)$)
jQuery.validator.addMethod("isPhone",function(value,element){
var length = value.length;
var phone=/^1[3|4|5|7|8][0-9]\d{8}$/;
var phone=/^1[3|4|5|6|7|8][0-9]\d{8}$/;
return this.optional(element)||(length == 11 && phone.test(value));
},"请填写正确的11位手机号");
//电话号码验证
@@ -84,3 +84,64 @@ body.signin {
width:auto
}
}
/*
登录界面check样式
*/
.checkbox-custom {
position: relative;
padding: 0 15px 0 25px;
margin-bottom: 7px;
display: inline-block;
}
/*
将初始的checkbox的样式改变
*/
.checkbox-custom input[type="checkbox"] {
opacity: 0; /*将初始的checkbox隐藏起来*/
position: absolute;
cursor: pointer;
z-index: 2;
margin: -6px 0 0 0;
top: 50%;
left: 3px;
}
/*
设计新的checkbox位置
*/
.checkbox-custom label:before {
content: '';
position: absolute;
top: 50%;
left: 0;
margin-top: -9px;
width: 18px;
height: 17px;
display: inline-block;
border-radius: 2px;
border: 1px solid #bbb;
background: #fff;
}
/*
点击初始的checkbox将新的checkbox关联起来
*/
.checkbox-custom input[type="checkbox"]:checked +label:after {
position: absolute;
display: inline-block;
font-family: 'Glyphicons Halflings';
content: "\e013";
top: 42%;
left: 3px;
margin-top: -5px;
font-size: 11px;
line-height: 1;
width: 16px;
height: 16px;
color: #333;
}
.checkbox-custom label {
cursor: pointer;
line-height: 1.2;
font-weight: normal; /*改变了rememberme的字体*/
margin-bottom: 0;
text-align: left;
}
+1 -1
View File
@@ -1 +1 @@
html{height:100%}body.signin{height:auto;background:url(../img/login-background.jpg) no-repeat center fixed;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;color:rgba(255,255,255,.95)}.signinpanel{width:750px;margin:10% auto 0}.signinpanel .logopanel{float:none;width:auto;padding:0;background:0 0}.signinpanel .signin-info ul{list-style:none;padding:0;margin:20px 0}.signinpanel .form-control{display:block;margin-top:15px}.signinpanel .uname{background:#fff url(../img/user.png) no-repeat 95% center;color:#333}.signinpanel .pword{background:#fff url(../img/locked.png) no-repeat 95% center;color:#333}.signinpanel .code{background:#fff no-repeat 95% center;color:#333;margin:0 0 15px 0}.signinpanel .btn{margin-top:15px}.signinpanel form{background:rgba(255,255,255,.2);border:1px solid rgba(255,255,255,.3);-moz-box-shadow:0 3px 0 rgba(12,12,12,.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,.03);box-shadow:0 3px 0 rgba(12,12,12,.03);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:30px}.signup-footer{border-top:solid 1px rgba(255,255,255,.3);margin:20px 0;padding-top:15px}@media screen and (max-width:768px){.signinpanel,.signuppanel{margin:0 auto;width:420px!important;padding:20px}.signinpanel form{margin-top:20px}.signup-footer,.signuppanel .form-control{margin-bottom:10px}.signup-footer .pull-left,.signup-footer .pull-right{float:none!important;text-align:center}.signinpanel .signin-info ul{display:none}}@media screen and (max-width:320px){.signinpanel,.signuppanel{margin:0 20px;width:auto}}
html{height:100%}body.signin{height:auto;background:url(../img/login-background.jpg) no-repeat center fixed;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;color:rgba(255,255,255,.95)}.signinpanel{width:750px;margin:10% auto 0}.signinpanel .logopanel{float:none;width:auto;padding:0;background:0}.signinpanel .signin-info ul{list-style:none;padding:0;margin:20px 0}.signinpanel .form-control{display:block;margin-top:15px}.signinpanel .uname{background:#fff url(../img/user.png) no-repeat 95% center;color:#333}.signinpanel .pword{background:#fff url(../img/locked.png) no-repeat 95% center;color:#333}.signinpanel .code{background:#fff no-repeat 95% center;color:#333;margin:0 0 15px 0}.signinpanel .btn{margin-top:15px}.signinpanel form{background:rgba(255,255,255,.2);border:1px solid rgba(255,255,255,.3);-moz-box-shadow:0 3px 0 rgba(12,12,12,.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,.03);box-shadow:0 3px 0 rgba(12,12,12,.03);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:30px}.signup-footer{border-top:solid 1px rgba(255,255,255,.3);margin:20px 0;padding-top:15px}@media screen and (max-width:768px){.signinpanel,.signuppanel{margin:0 auto;width:420px!important;padding:20px}.signinpanel form{margin-top:20px}.signup-footer,.signuppanel .form-control{margin-bottom:10px}.signup-footer .pull-left,.signup-footer .pull-right{float:none!important;text-align:center}.signinpanel .signin-info ul{display:none}}@media screen and (max-width:320px){.signinpanel,.signuppanel{margin:0 20px;width:auto}}.checkbox-custom{position:relative;padding:0 15px 0 25px;margin-bottom:7px;display:inline-block}.checkbox-custom input[type="checkbox"]{opacity:0;position:absolute;cursor:pointer;z-index:2;margin:-6px 0 0 0;top:50%;left:3px}.checkbox-custom label:before{content:'';position:absolute;top:50%;left:0;margin-top:-9px;width:18px;height:17px;display:inline-block;border-radius:2px;border:1px solid #bbb;background:#fff}.checkbox-custom input[type="checkbox"]:checked+label:after{position:absolute;display:inline-block;font-family:'Glyphicons Halflings';content:"\e013";top:42%;left:3px;margin-top:-5px;font-size:11px;line-height:1;width:16px;height:16px;color:#333}.checkbox-custom label{cursor:pointer;line-height:1.2;font-weight:normal;margin-bottom:0;text-align:left}
@@ -0,0 +1,822 @@
/*
*
* SKIN blue 若依管理系统
* NAME - blue/green/purple/red/yellow
*
*/
/** 蓝色主题 skin-blue **/
.skin-blue .navbar {
background-color: #3c8dbc
}
.skin-blue .navbar .nav>li>a {
color: #fff
}
.skin-blue .navbar .nav>li>a:hover,
.skin-blue .navbar .nav>li>a:active,
.skin-blue .navbar .nav>li>a:focus,
.skin-blue .navbar .nav .open>a,
.skin-blue .navbar .nav .open>a:hover,
.skin-blue .navbar .nav .open>a:focus,
.skin-blue .navbar .nav>.active>a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6
}
.skin-blue .navbar .sidebar-toggle {
color: #fff
}
.skin-blue .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1)
}
.skin-blue .navbar .sidebar-toggle {
color: #fff
}
.skin-blue .navbar .sidebar-toggle:hover {
background-color: #367fa9
}
@media ( max-width :767px) {
.skin-blue .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1)
}
.skin-blue .navbar .dropdown-menu li a {
color: #fff
}
.skin-blue .navbar .dropdown-menu li a:hover {
background: #367fa9
}
}
.skin-blue .logo {
background-color: #367fa9;
color: #fff;
border-bottom: 0 solid transparent
}
.skin-blue .logo:hover {
background-color: #357ca5
}
.skin-blue li.user-header {
background-color: #3c8dbc
}
.skin-blue .content-header {
background: transparent
}
.skin-blue .wrapper,
.skin-blue .main-sidebar,
.skin-blue .left-side {
background-color: #222d32
}
.skin-blue .user-panel>.info,
.skin-blue .user-panel>.info>a {
color: #fff
}
.skin-blue .nav>li.header {
color: #4b646f;
background: #1a2226
}
.skin-blue .nav>li.active {
color: #fff;
background: #293846;
border-left: 3px solid #3c8dbc;
}
.skin-blue .nav>li.active:last-child {
border-left: none;
}
.skin-blue .nav>li>.treeview-menu {
margin: 0 1px;
background: #2c3b41
}
.skin-blue .sidebar a {
color: #b8c7ce
}
.skin-blue .sidebar a:hover {
text-decoration: none
}
.skin-blue .treeview-menu>li>a {
color: #8aa4af
}
.skin-blue .treeview-menu>li.active>a,
.skin-blue .treeview-menu>li>a:hover {
color: #fff
}
.skin-blue .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px
}
.skin-blue .sidebar-form input[type="text"],
.skin-blue .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px
}
.skin-blue .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px
}
.skin-blue .sidebar-form input[type="text"]:focus,
.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
background-color: #fff;
color: #666
}
.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
border-left-color: #fff
}
.skin-blue .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0
}
.skin-blue.layout-top-nav>.logo {
background-color: #3c8dbc;
color: #fff;
border-bottom: 0 solid transparent
}
.skin-blue.layout-top-nav>.logo:hover {
background-color: #3b8ab8
}
.skin-blue .content-tabs {
border-bottom: solid 2px #e7eaec;
}
.skin-blue.layout-top-nav>.logo {
background-color: #3c8dbc;
color: #fff;
border-bottom: 0 solid transparent
}
.skin-blue.layout-top-nav>.logo:hover {
background-color: #3b8ab8
}
/** 绿色主题 skin-green **/
.skin-green .navbar {
background-color: #00a65a;
}
.skin-green .content-tabs {
border-bottom: solid 2px #e7eaec;
}
.skin-green .navbar .nav>li>a {
color: #fff
}
.skin-green .navbar .nav>li>a:hover,
.skin-green .navbar .nav>li>a:active,
.skin-green .navbar .nav>li>a:focus,
.skin-green .navbar .nav .open>a,
.skin-green .navbar .nav .open>a:hover,
.skin-green .navbar .nav .open>a:focus,
.skin-green .navbar .nav>.active>a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6
}
.skin-green .navbar .sidebar-toggle {
color: #fff
}
.skin-green .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1)
}
.skin-green .navbar .sidebar-toggle {
color: #fff
}
.skin-green .navbar .sidebar-toggle:hover {
background-color: #008d4c
}
@media ( max-width :767px) {
.skin-green .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1)
}
.skin-green .navbar .dropdown-menu li a {
color: #fff
}
.skin-green .navbar .dropdown-menu li a:hover {
background: #008d4c
}
}
.skin-green .logo {
background-color: #008d4c;
color: #fff;
border-bottom: 0 solid transparent
}
.skin-green .logo:hover {
background-color: #008749
}
.skin-green li.user-header {
background-color: #00a65a
}
.skin-green .content-header {
background: transparent
}
.skin-green .wrapper,
.skin-green .main-sidebar,
.skin-green .left-side {
background-color: #222d32
}
.skin-green .user-panel>.info,
.skin-green .user-panel>.info>a {
color: #fff
}
.skin-green .nav>li.header {
color: #4b646f;
background: #1a2226;
}
.skin-green .nav>li.active {
color: #fff;
background: #293846;
border-left: 3px solid #00a65a;
}
.skin-green .nav>li.active:last-child {
border-left: none;
}
.skin-green .nav>li>.treeview-menu {
margin: 0 1px;
background: #2c3b41
}
.skin-green .sidebar a {
color: #b8c7ce
}
.skin-green .sidebar a:hover {
text-decoration: none
}
.skin-green .treeview-menu>li>a {
color: #8aa4af
}
.skin-green .treeview-menu>li.active>a,
.skin-green .treeview-menu>li>a:hover {
color: #fff
}
.skin-green .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px
}
.skin-green .sidebar-form input[type="text"],
.skin-green .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px
}
.skin-green .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px
}
.skin-green .sidebar-form input[type="text"]:focus,
.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
background-color: #fff;
color: #666
}
.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
border-left-color: #fff
}
.skin-green .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0
}
/** 红色主题 skin-red **/
.skin-red .navbar {
background-color: #dd4b39
}
.skin-red .navbar .nav>li>a {
color: #fff
}
.skin-red .navbar .nav>li>a:hover,
.skin-red .navbar .nav>li>a:active,
.skin-red .navbar .nav>li>a:focus,
.skin-red .navbar .nav .open>a,
.skin-red .navbar .nav .open>a:hover,
.skin-red .navbar .nav .open>a:focus,
.skin-red .navbar .nav>.active>a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6
}
.skin-red .navbar .sidebar-toggle {
color: #fff
}
.skin-red .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1)
}
.skin-red .navbar .sidebar-toggle {
color: #fff
}
.skin-red .navbar .sidebar-toggle:hover {
background-color: #d73925
}
@media ( max-width :767px) {
.skin-red .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1)
}
.skin-red .navbar .dropdown-menu li a {
color: #fff
}
.skin-red .navbar .dropdown-menu li a:hover {
background: #d73925
}
}
.skin-red .logo {
background-color: #d73925;
color: #fff;
border-bottom: 0 solid transparent
}
.skin-red .logo:hover {
background-color: #d33724
}
.skin-red li.user-header {
background-color: #dd4b39
}
.skin-red .content-header {
background: transparent
}
.skin-red .wrapper,
.skin-red .main-sidebar,
.skin-red .left-side {
background-color: #222d32
}
.skin-red .user-panel>.info,
.skin-red .user-panel>.info>a {
color: #fff
}
.skin-red .nav>li.header {
color: #4b646f;
background: #1a2226
}
.skin-red .nav>li.active {
color: #fff;
border-left: 3px solid #dd4b39;
background: #293846;
}
.skin-red .nav>li.active:last-child {
border-left: none;
}
.skin-red .content-tabs {
border-bottom: solid 2px #e7eaec;
}
.skin-red .nav>li>.treeview-menu {
margin: 0 1px;
background: #2c3b41
}
.skin-red .sidebar a {
color: #b8c7ce
}
.skin-red .sidebar a:hover {
text-decoration: none
}
.skin-red .treeview-menu>li>a {
color: #8aa4af
}
.skin-red .treeview-menu>li.active>a,
.skin-red .treeview-menu>li>a:hover {
color: #fff
}
.skin-red .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px
}
.skin-red .sidebar-form input[type="text"],
.skin-red .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px
}
.skin-red .sidebar-form input[type="text"] {
color: #fff;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px
}
.skin-red .sidebar-form input[type="text"]:focus,
.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
background-color: #fff;
color: #666
}
.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
border-left-color: #fff
}
.skin-red .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0
}
/** 黄色主题 skin-red **/
.skin-yellow .navbar {
background-color: #f39c12
}
.skin-yellow .navbar .nav>li>a {
color: #fff
}
.skin-yellow .navbar .nav>li>a:hover,
.skin-yellow .navbar .nav>li>a:active,
.skin-yellow .navbar .nav>li>a:focus,
.skin-yellow .navbar .nav .open>a,
.skin-yellow .navbar .nav .open>a:hover,
.skin-yellow .navbar .nav .open>a:focus,
.skin-yellow .navbar .nav>.active>a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6
}
.skin-yellow .navbar .sidebar-toggle {
color: #fff
}
.skin-yellow .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1)
}
.skin-yellow .navbar .sidebar-toggle {
color: #fff
}
.skin-yellow .navbar .sidebar-toggle:hover {
background-color: #e08e0b
}
@media ( max-width :767px) {
.skin-yellow .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1)
}
.skin-yellow .navbar .dropdown-menu li a {
color: #fff
}
.skin-yellow .navbar .dropdown-menu li a:hover {
background: #e08e0b
}
}
.skin-yellow .logo {
background-color: #e08e0b;
color: #fff;
border-bottom: 0 solid transparent
}
.skin-yellow .logo:hover {
background-color: #db8b0b
}
.skin-yellow li.user-header {
background-color: #f39c12
}
.skin-yellow .content-header {
background: transparent
}
.skin-yellow .wrapper,
.skin-yellow .main-sidebar,
.skin-yellow .left-side {
background-color: #222d32
}
.skin-yellow .user-panel>.info,
.skin-yellow .user-panel>.info>a {
color: #fff
}
.skin-yellow .nav>li.header {
color: #4b646f;
background: #1a2226
}
.skin-yellow .nav>li.active {
color: #fff;
background: #293846;
border-left: 3px solid #f39c12;
}
.skin-yellow .nav>li.active:last-child {
border-left: none;
}
.skin-yellow .content-tabs {
border-bottom: solid 2px #e7eaec;
}
.skin-yellow .nav>li>.treeview-menu {
margin: 0 1px;
background: #2c3b41
}
.skin-yellow .sidebar a {
color: #b8c7ce
}
.skin-yellow .sidebar a:hover {
text-decoration: none
}
.skin-yellow .treeview-menu>li>a {
color: #8aa4af
}
.skin-yellow .treeview-menu>li.active>a,
.skin-yellow .treeview-menu>li>a:hover {
color: #fff
}
.skin-yellow .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px
}
.skin-yellow .sidebar-form input[type="text"],
.skin-yellow .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px
}
.skin-yellow .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px
}
.skin-yellow .sidebar-form input[type="text"]:focus,
.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
background-color: #fff;
color: #666
}
.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
border-left-color: #fff
}
.skin-yellow .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0
}
/** 紫色主题 skin-purple **/
.skin-purple .navbar {
background-color: #605ca8
}
.skin-purple .navbar .nav>li>a {
color: #fff
}
.skin-purple .navbar .nav>li>a:hover,
.skin-purple .navbar .nav>li>a:active,
.skin-purple .navbar .nav>li>a:focus,
.skin-purple .navbar .nav .open>a,
.skin-purple .navbar .nav .open>a:hover,
.skin-purple .navbar .nav .open>a:focus,
.skin-purple .navbar .nav>.active>a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6
}
.skin-purple .navbar .sidebar-toggle {
color: #fff
}
.skin-purple .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1)
}
.skin-purple .navbar .sidebar-toggle {
color: #fff
}
.skin-purple .navbar .sidebar-toggle:hover {
background-color: #555299
}
@media ( max-width :767px) {
.skin-purple .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1)
}
.skin-purple .navbar .dropdown-menu li a {
color: #fff
}
.skin-purple .navbar .dropdown-menu li a:hover {
background: #555299
}
}
.skin-purple .logo {
background-color: #555299;
color: #fff;
border-bottom: 0 solid transparent
}
.skin-purple .logo:hover {
background-color: #545096
}
.skin-purple li.user-header {
background-color: #605ca8
}
.skin-purple .content-header {
background: transparent
}
.skin-purple .wrapper,
.skin-purple .main-sidebar,
.skin-purple .left-side {
background-color: #222d32
}
.skin-purple .user-panel>.info,
.skin-purple .user-panel>.info>a {
color: #fff
}
.skin-purple .nav>li.header {
color: #4b646f;
background: #1a2226
}
.skin-purple .nav>li.active {
color: #fff;
background: #293846;
border-left: 3px solid #605ca8;
}
.skin-purple .nav>li.active:last-child {
border-left: none;
}
.skin-purple .content-tabs {
border-bottom: solid 2px #e7eaec;
}
.skin-purple .nav>li>.treeview-menu {
margin: 0 1px;
background: #2c3b41
}
.skin-purple .sidebar a {
color: #b8c7ce
}
.skin-purple .sidebar a:hover {
text-decoration: none
}
.skin-purple .treeview-menu>li>a {
color: #8aa4af
}
.skin-purple .treeview-menu>li.active>a,
.skin-purple .treeview-menu>li>a:hover {
color: #fff
}
.skin-purple .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px
}
.skin-purple .sidebar-form input[type="text"],
.skin-purple .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px
}
.skin-purple .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px
}
.skin-purple .sidebar-form input[type="text"]:focus,
.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
background-color: #fff;
color: #666
}
.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
border-left-color: #fff
}
.skin-purple .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0
}
@@ -47,28 +47,44 @@ a:focus {
}
.nav.navbar-right>li>a {
color: #999c9e;
color: #fff;
font-size: 14px;
height: 50px;
padding: 18px 15px;
}
.nav>li.active>a {
color: #ffffff;
}
.navbar-default .nav>li>a:hover, .navbar-default .nav>li>a:focus {
background-color: #293846;
color: white;
.nav.navbar-right>li>a>.label {
position: absolute;
top: 9px;
right: 5px;
text-align: center;
font-size: 9px;
padding: 2px 4px;
line-height: .9;
}
.nav.navbar-right>li>a:hover {
background-color: #367fa9;
color: #fff;
}
.nav .open>a, .nav .open>a:hover, .nav .open>a:focus {
background: #fff;
.navbar-default .nav>li>a:hover,
.navbar-default .nav>li>a:focus {
background-color: #293846;
color: white;
}
.nav>li>a i {
margin-right: 6px;
.nav .open>a,
.nav .open>a:hover,
.nav .open>a:focus {
background: #fff;
}
.navbar {
border: 0;
border: 0;
}
.navbar-default {
@@ -77,12 +93,12 @@ a:focus {
position: relative;
}
.navbar-top-links li {
display: inline-block;
.nav.navbar-top-links li {
display: inline-block;
}
.navbar-top-links li:last-child {
margin-right: 30px;
margin-right: 16px;
}
body.body-small .navbar-top-links li:last-child {
@@ -179,7 +195,7 @@ body.body-small .navbar-top-links li:last-child {
}
.nav-header {
padding: 33px 25px;
padding: 34px 25px 20px 25px;
background: url("patterns/header-profile.png") no-repeat;
}
@@ -211,7 +227,7 @@ body.body-small .navbar-top-links li:last-child {
.minimalize-styl-2 {
padding: 4px 12px;
margin: 14px 5px 5px 20px;
margin: 12px 5px 5px 15px;
font-size: 14px;
float: left;
}
@@ -368,10 +384,6 @@ body.mini-navbar .navbar-default .nav>li>.nav-second-level li a {
z-index: 2030;
}
.navbar-fixed-top, .navbar-static-top {
background: #f3f3f4;
}
.fixed-nav #wrapper {
padding-top: 60px;
box-sizing: border-box;
@@ -460,18 +472,6 @@ body.body-small.fixed-sidebar.mini-navbar .navbar-static-side {
.fixed-sidebar.mini-navbar .nav li.active {
border-left-width: 0;
}
/*.fixed-sidebar.mini-navbar .nav li:hover>.nav-second-level, .canvas-menu.mini-navbar .nav li:hover>.nav-second-level*/
/*{*/
/*position: absolute;*/
/*left: 70px;*/
/*top: 40px;*/
/*background-color: #2f4050;*/
/*padding: 10px 10px 0 10px;*/
/*font-size: 12px;*/
/*display: block;*/
/*min-width: 140px;*/
/*border-radius: 2px;*/
/*}*/
/*伸缩菜单*/
.fixed-sidebar.mini-navbar .nav li:hover>a> span.nav-label {
@@ -485,7 +485,6 @@ body.body-small.fixed-sidebar.mini-navbar .navbar-static-side {
.fixed-sidebar.mini-navbar .nav li:hover>.nav-second-level {
top: 40px;
font-size: 12px;
/*padding: 10px 10px 0 10px;*/
background-color: #2f4050;
}
@@ -2319,16 +2318,6 @@ table.dataTable thead .sorting:after {
.google-map {
height: 300px;
}
/* Validation */
label.error {
color: #cc5965;
display: inline-block;
margin-left: 5px;
}
.form-control.error {
border: 1px dotted #cc5965;
}
/* ngGrid */
.gridStyle {
border: 1px solid #d4d4d4;
@@ -5507,8 +5496,8 @@ del {
}
20% {
-webkit-transform: scaleY (1);
transform: scaleY (1);
-webkit-transform: scaleY(1);
transform: scaleY(1);
}
}
@@ -5567,20 +5556,20 @@ del {
transform: translateX(42px) translateY(42px) rotate(-179deg);
}
50 .1 % {
-webkit-transform: translateX(42px) translateY(42px) rotate(-180deg);
transform: translateX(42px) translateY(42px) rotate(-180deg);
}
50.1% {
-webkit-transform: translateX(42px) translateY(42px) rotate(-180deg);
transform: translateX(42px) translateY(42px) rotate(-180deg);
}
75% {
-webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0 .5 );
transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0 .5 );
}
75% {
-webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0 .5 );
transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0 .5 );
}
100% {
-webkit-transform: rotate(-360deg);
transform: rotate(-360deg);
}
100% {
-webkit-transform: rotate(-360deg);
transform: rotate(-360deg);
}
}
@keyframes sk-wanderingCubeMove {
@@ -6567,391 +6556,24 @@ body.rtls .top-navigation .footer.fixed, body.rtls.top-navigation .footer.fixed
.rtls .ltr-support {
direction: ltr;
}
/*
*
* This is style for skin config
* Use only in demo theme
*
*/
.skin-setttings .title {
background: #efefef;
text-align: center;
text-transform: uppercase;
font-weight: 600;
display: block;
padding: 10px 15px;
font-size: 12px;
}
.setings-item {
padding: 10px 30px;
}
.setings-item.nb {
border: none;
}
.setings-item.skin {
text-align: center;
}
.setings-item .switch {
float: right;
}
.skin-name a {
text-transform: uppercase;
}
.setings-item a {
color: #fff;
}
.default-skin, .blue-skin, .ultra-skin, .yellow-skin {
text-align: center;
}
.default-skin {
font-weight: 600;
background: #1ab394;
}
.default-skin:hover {
background: #199d82;
}
.blue-skin {
font-weight: 600;
background: url("patterns/header-profile-skin-blue.png") repeat scroll 0 0;
}
.blue-skin:hover {
background: #0d8ddb;
}
.yellow-skin {
font-weight: 600;
background: url("patterns/header-profile-skin-yellow.png") repeat scroll 0 100%;
}
.yellow-skin:hover {
background: #ce8735;
}
.content-tabs {
border-bottom: solid 2px #2f4050;
}
.page-tabs a {
color: #999;
}
.page-tabs a i {
color: #ccc;
margin-left: 2px;
font-size: 13px;
}
.page-tabs a.active {
background: #2f4050;
color: #a7b1c2;
background: #eaedf1;
color: #23508e;
}
.page-tabs a.active:hover, .page-tabs a.active i:hover {
background: #293846;
color: #fff;
}
/*
*
* SKIN blue 若依管理系统
* NAME - blue/purple
*
*/
.skin-blue .minimalize-styl-2 {
margin: 14px 5px 5px 30px;
}
.skin-blue .navbar-top-links li:last-child {
margin-right: 30px;
}
.skin-blue.fixed-nav .minimalize-styl-2 {
margin: 14px 5px 5px 15px;
}
.skin-blue .spin-icon {
background: #0e9aef !important;
}
.skin-blue .nav-header {
background: #0e9aef;
background: url('patterns/header-profile-skin-blue.png');
}
.skin-blue.mini-navbar .nav-second-level {
background: #3e495f;
}
.skin-blue .breadcrumb {
background: transparent;
}
.skin-blue .page-heading {
border: none;
}
.skin-blue .nav>li.active {
background: #3a4459;
}
.skin-blue .nav>li>a {
color: #9ea6b9;
}
.skin-blue .nav>li.active>a {
color: #fff;
}
.skin-blue .navbar-minimalize {
background: #0e9aef;
border-color: #0e9aef;
}
body.skin-blue {
background: #3e495f;
}
.skin-blue .navbar-static-top {
background: #ffffff;
}
.skin-blue .dashboard-header {
background: transparent;
border-bottom: none !important;
border-top: none;
padding: 20px 30px 10px 30px;
}
.fixed-nav.skin-blue .navbar-fixed-top {
background: #fff;
}
.skin-blue .wrapper-content {
padding: 30px 15px;
}
.skin-blue #page-wrapper {
background: #f4f6fa;
}
.skin-blue .ibox-title, .skin-blue .ibox-content {
border-width: 1px;
}
.skin-blue .ibox-content:last-child {
border-style: solid solid solid solid;
}
.skin-blue .nav>li.active {
border: none;
}
.skin-blue .nav-header {
padding: 35px 25px 25px 25px;
}
.skin-blue .nav-header a.dropdown-toggle {
color: #fff;
margin-top: 10px;
}
.skin-blue .nav-header a.dropdown-toggle .text-muted {
color: #fff;
opacity: 0.8;
}
.skin-blue .profile-element {
text-align: center;
}
.skin-blue .img-circle {
border-radius: 5px;
}
.skin-blue .navbar-default .nav>li>a:hover, .skin-blue .navbar-default .nav>li>a:focus {
background: #39aef5;
color: #fff;
}
.skin-blue .nav.nav-tabs>li.active>a {
color: #555;
}
.skin-blue .content-tabs {
border-bottom: solid 2px #39aef5;
}
.skin-blue .nav.nav-tabs>li.active {
background: transparent;
}
.skin-blue .page-tabs a.active {
background: #39aef5;
color: #fff;
}
.skin-blue .page-tabs a.active:hover, .skin-blue .page-tabs a.active i:hover {
background: #0e9aef;
color: #fff;
}
/*
*
* SKIN Yellow 若依管理系统
* NAME - Yellow/purple
*
*/
.skin-yellow .minimalize-styl-2 {
margin: 14px 5px 5px 30px;
}
.skin-yellow .navbar-top-links li:last-child {
margin-right: 30px;
}
.skin-yellow.fixed-nav .minimalize-styl-2 {
margin: 14px 5px 5px 15px;
}
.skin-yellow .spin-icon {
background: #ecba52 !important;
}
body.boxed-layout.skin-yellow #wrapper {
background: #3e2c42;
}
.skin-yellow .nav-header {
background: #ecba52;
background: url('patterns/header-profile-skin-yellow.png');
}
.skin-yellow.mini-navbar .nav-second-level {
background: #3e2c42;
}
.skin-yellow .breadcrumb {
background: transparent;
}
.skin-yellow .page-heading {
border: none;
}
.skin-yellow .nav>li.active {
background: #38283c;
}
.fixed-nav.skin-yellow .navbar-fixed-top {
background: #fff;
}
.skin-yellow .nav>li>a {
color: #948b96;
}
.skin-yellow .nav>li.active>a {
color: #fff;
}
.skin-yellow .navbar-minimalize {
background: #ecba52;
border-color: #ecba52;
}
body.skin-yellow {
background: #3e2c42;
}
.skin-yellow .navbar-static-top {
background: #ffffff;
}
.skin-yellow .dashboard-header {
background: transparent;
border-bottom: none !important;
border-top: none;
padding: 20px 30px 10px 30px;
}
.skin-yellow .wrapper-content {
padding: 30px 15px;
}
.skin-yellow #page-wrapper {
background: #f4f6fa;
}
.skin-yellow .ibox-title, .skin-yellow .ibox-content {
border-width: 1px;
}
.skin-yellow .ibox-content:last-child {
border-style: solid solid solid solid;
}
.skin-yellow .nav>li.active {
border: none;
}
.skin-yellow .nav-header {
padding: 35px 25px 25px 25px;
}
.skin-yellow .nav-header a.dropdown-toggle {
color: #fff;
margin-top: 10px;
}
.skin-yellow .nav-header a.dropdown-toggle .text-muted {
color: #fff;
opacity: 0.8;
}
.skin-yellow .profile-element {
text-align: center;
}
.skin-yellow .img-circle {
border-radius: 5px;
}
.skin-yellow .navbar-default .nav>li>a:hover, .skin-yellow .navbar-default .nav>li>a:focus {
background: #38283c;
color: #fff;
}
.skin-yellow .nav.nav-tabs>li.active>a {
color: #555;
}
.skin-yellow .nav.nav-tabs>li.active {
background: transparent;
}
.skin-yellow .content-tabs {
border-bottom: solid 2px #3e2c42;
}
.skin-yellow .nav.nav-tabs>li.active {
background: transparent;
}
.skin-yellow .page-tabs a.active {
background: #3e2c42;
color: #fff;
}
.skin-yellow .page-tabs a.active:hover, .skin-yellow .page-tabs a.active i:hover {
background: #38283c;
color: #fff;
.page-tabs a.active:hover,
.page-tabs a.active i:hover {
background: #eaedf1;
color: #23508e;
}
@media ( min-width : 768px) {
@@ -7279,7 +6901,8 @@ body.skin-yellow {
}
.navbar-header {
width: 60%;
width: 10%;
height: 50px;
}
.bs-glyphicons {
@@ -7347,3 +6970,99 @@ body.skin-yellow {
border-color: #cccccc!important;
}
.folder-list li.active a {
color: #2791df;
background: #f5f5f5;
}
.nav .logo {
background-color: #367fa9;
color: #fff;
border-bottom: 0 solid transparent;
-webkit-transition: width .3s ease-in-out;
-o-transition: width .3s ease-in-out;
transition: width .3s ease-in-out;
display: block;
height: 50px;
font-size: 20px;
line-height: 50px;
text-align: center;
width: 220px;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
padding: 0 15px;
font-weight: 300;
overflow: hidden
}
.logo-mini {
display: none;
}
.logo-lg {
display: block;
}
.roleList {
color: #d5d5d5;
margin-right: 10px;
padding-top: 10px;
line-height: 1;
white-space: nowrap;
overflow: hidden;
width: 110px;
}
.sidebar-collapse .user-panel {
white-space: nowrap;
position: relative;
width: 100%;
padding: 15px;
overflow: hidden;
}
.sidebar-collapse .user-panel .image>img {
width: 100%;
max-width: 45px;
height: auto;
}
.sidebar-collapse .user-panel>.info {
padding: 5px 5px 5px 15px;
line-height: 1;
position: absolute;
left: 55px;
}
.sidebar-collapse .user-panel>.info a {
color: #fff;
font-size: 12px;
}
.sidebar-collapse .user-panel>.info>p {
font-weight: 600;
margin-bottom: 9px;
color: #fff;
font-size: 12px;
}
.user-panel>.info>a>.fa,
.user-panel>.info>a>.ion,
.user-panel>.info>a>.glyphicon {
margin-right: 3px;
}
.nav>li:hover .dropdown-menu {
display: block;
}
#content-main.max {
height: calc(100% - 110px);
overflow: hidden;
width: 100%;
height: 100%;
left: 0px;
position: absolute;
top: 0px;
z-index: 9998;
margin: 0;
}
@@ -1,9 +1,188 @@
/**
* 通用css样式布局处理
* Copyright (c) 2018 ruoyi
* Copyright (c) 2019 ruoyi
*/
/** 用户管理 样式布局 */
/** 基础通用 **/
.pt5 {
padding-top: 5px;
}
.pr5 {
padding-right: 5px;
}
.pb5 {
padding-bottom: 5px;
}
.mt5 {
margin-top: 5px;
}
.mr5 {
margin-right: 5px;
}
.mb5 {
margin-bottom: 5px;
}
.ml5 {
margin-left: 5px;
}
.mt10 {
margin-top: 10px;
}
.mr10 {
margin-right: 10px;
}
.mb10 {
margin-bottom: 10px;
}
.ml0 {
margin-left: 10px;
}
.mt20 {
margin-top: 20px;
}
.mr20 {
margin-right: 20px;
}
.mb20 {
margin-bottom: 20px;
}
.ml20 {
margin-left: 20px;
}
.section-content {
min-height: 250px;
margin-right: auto;
margin-left: auto;
padding: 5px 5px 5px 5px;
width: 100%;
height: 100%;
position: absolute;
}
.ibox {
margin-bottom: 25px;
background-color: #fff;
border: 1px solid #ddd;
border-radius: 4px;
height: 100%;
-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
}
.list-group-striped > .list-group-item {
border-left: 0;
border-right: 0;
border-radius: 0;
padding-left: 0;
padding-right: 0
}
.ibox-title-gray {
height: 41px;
background-color: #f0f3f4;
color: #333;
font-weight: 700;
border-radius: 2px 2px 0 0;
padding: 13px !important;
border-bottom: 1px solid #eee;
display: block;
clear: both;
}
.dashboard-header h5 {
padding: 8px 0 0 0;
display: inline-block;
font-size: 14px;
text-overflow: ellipsis;
float: left;
font-weight: 400;
}
.ibox-title-gray h5 {
display: inline-block;
font-size: 14px;
margin: 0 0 7px;
padding: 0;
text-overflow: ellipsis;
float: left;
}
/* 导航页签 */
.nav-tabs-custom {
margin-bottom: 20px;
background: #fff;
box-shadow: 0 1px 1px rgba(0,0,0,0.1);
border-radius: 3px
}
.nav-tabs-custom>.nav-tabs {
margin: 0;
border-bottom-color: #f4f4f4;
border-top-right-radius: 3px;
border-top-left-radius: 3px
}
.nav-tabs-custom>.nav-tabs>li {
border-top: 3px solid transparent;
margin-bottom: -2px;
margin-right: 5px
}
.nav-tabs-custom>.nav-tabs>li.disabled>a {
color: #777
}
.nav-tabs-custom>.nav-tabs>li>a {
color: #444;
font-weight: normal;
border-radius: 0
}
.nav-tabs-custom>.nav-tabs>li>a,.nav-tabs-custom>.nav-tabs>li>a:hover {
background: transparent;
margin: 0
}
.nav-tabs-custom>.nav-tabs>li>a:hover {
color: #999
}
.nav-tabs-custom>.nav-tabs>li:not(.active)>a:hover,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:focus,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:active {
border-color: transparent
}
.nav-tabs-custom>.nav-tabs>li.active {
border-top-color: #1890ff
}
.nav-tabs-custom>.nav-tabs>li.active>a,.nav-tabs-custom>.nav-tabs>li.active:hover>a {
background-color: #fff;
color: #444
}
.nav-tabs-custom>.nav-tabs>li.active>a {
border-top-color: transparent;
border-bottom-color: transparent;
border-left-color: #f4f4f4;
border-right-color: #f4f4f4
}
.nav-tabs-custom>.tab-content {
background: #fff;
padding: 10px;
border-bottom-right-radius: 3px;
border-bottom-left-radius: 3px
}
/** 弹层组件 禁用样式 **/
.layer-disabled {
border: 1px #dedede solid !important;
background-color: #f1f1f1 !important;
color: #333 !important;
pointer-events: none;
}
/** 用户管理 样式布局 **/
.box {
position: relative;
border-radius: 3px;
@@ -91,7 +270,7 @@
margin: 5px 0 5px -25px
}
/** select2 样式修改 */
/** select2 样式修改 **/
.select2-container--default .select2-selection--multiple .select2-selection__choice {
background-color: #1AB394;
border-color: #1AB394;
@@ -112,15 +291,20 @@
padding-right: 10px
}
/** 表单验证 样式布局 */
/** 表单验证 样式布局 **/
label.error {
position: absolute;
right: 18px;
top: 7px;
top: 10px;
color: #ef392b;
font-size: 12px
}
.input-group label.error {
z-index:99;
right: 42px
}
.Validform_error,input.error,select.error {
background-color: #fbe2e2;
border-color: #c66161;
@@ -143,7 +327,7 @@ label.error {
max-width: none;
}
/** 复选框&单选框 */
/** 复选框&单选框 **/
.check-box,.radio-box {
display: inline-block;
box-sizing: border-box;
@@ -160,14 +344,14 @@ label.error {
left: 0
}
/* iCheck */
/** iCheck **/
.icheckbox-blue,.iradio-blue {
display: block;
margin: 0;
padding: 0;
width: 18px;
height: 18px;
background: url(/img/blue.png) no-repeat;
background: url(../../img/blue.png) no-repeat;
border: none;
cursor: pointer
}
@@ -214,7 +398,7 @@ label.error {
background-position: -180px 0
}
/** 遮罩层 */
/** 遮罩层 **/
.loaderbox {
display: inline-block;
min-width: 125px;
@@ -281,7 +465,7 @@ label.error {
}
}
/** 表单查询条件 */
/** 表单查询条件 **/
ul {
margin: 0;
padding: 0;
@@ -352,7 +536,7 @@ label {
background: transparent;
outline: none;
height: 30px;
width: 280px;
width: 200px;
padding-left: 5px;
}
@@ -371,17 +555,26 @@ label {
background: transparent;
outline: none;
height: 30px;
width: 280px;
width: 200px;
}
.select-list .select-time input {
width: 133px;
width: 93px;
}
.select-time label,.select-time span,.select-time input {
float: left;
}
@media (max-width:767px) {
.select-time label,.select-time span,.select-time input {
float: none;
}
.select-list .select-time input {
width: 200px;
}
}
.select-time label {
margin-top: 5px;
}
@@ -409,7 +602,7 @@ label {
cursor: pointer;
}
/** 表格查询数据 */
/** 表格查询数据 **/
.table-striped {
min-height: 75%;
}
@@ -430,9 +623,95 @@ label {
}
.table-striped .table>thead:first-child>tr:first-child>th {
color: #333;
font-weight: normal;
font-size: 13px
}
.table-striped table thead {
background-color: #eff3f8;
}
.table-bordered td,.table-bordered th {
border: 1px solid #ddd!important
}
.fixed-table-container thead th >.both{
display: inline-block
}
/** 首页样式 **/
.ax_close_max {
position: fixed;
top: 5px;
left: 5px;
z-index: 9999;
display: none;
color: #ccc;
}
.navbar-right > .user-menu > .dropdown-menu {
border-top-right-radius:0;
border-top-left-radius:0;
padding:1px 0 0 0;
border-top-width:0;
width:138px;
}
.navbar-right > .user-menu .user-image {
float:left;
width:27px;
height:27px;
border-radius:50%;
margin-right:8px;
margin-top:-3px;
}
@media (max-width:767px) {
.navbar-right > .user-menu .user-image {
float:none;
margin-right:0;
margin-top:-8px;
line-height:10px;
}
}.dropdown-menu > li > a > .glyphicon,.dropdown-menu > li > a > .fa,.dropdown-menu > li > a > .ion {
margin-right:10px;
}
.dropdown-menu > li > a:hover {
background-color:#e1e3e9;
color:#333;
}
.dropdown-menu > .divider {
background-color:#eee;
}
/** 表单布局 **/
.form-header {
font-size:15px;
color:#6379bb;
border-bottom:1px solid #ddd;
margin:8px 10px 25px 10px;
padding-bottom:5px
}
.form-content {
background-color: #ffffff;
color: inherit;
padding: 10px 15px 15px 15px;
border-color: #e7eaec;
-webkit-border-image: none;
-o-border-image: none;
border-image: none;
border-width: 1px 0px;
}
/** 表格跳转样式 **/
.pageGo input {
height: 32px;
width: 50px;
margin-left: 5px;
margin-right: 5px;
text-align: center;
display: block;
float:left;
}
.pageGo button {
height: 32px;
display: block;
float:left;
}
@@ -1,6 +1,12 @@
/**
* 菜单处理
* 首页方法封装处理
* Copyright (c) 2019 ruoyi
*/
layer.config({
extend: 'moon/style.css',
skin: 'layer-ext-moon'
});
$(function() {
// MetsiMenu
$('#side-menu').metisMenu();
@@ -45,6 +51,7 @@ function() {
if ($(this).width() < 769) {
$('body').addClass('mini-navbar');
$('.navbar-static-side').fadeIn();
$(".sidebar-collapse .logo").addClass("hide");
}
});
@@ -55,12 +62,14 @@ function NavToggle() {
function SmoothlyMenu() {
if (!$('body').hasClass('mini-navbar')) {
$('#side-menu').hide();
$(".sidebar-collapse .logo").removeClass("hide");
setTimeout(function() {
$('#side-menu').fadeIn(500);
},
100);
} else if ($('body').hasClass('fixed-sidebar')) {
$('#side-menu').hide();
$(".sidebar-collapse .logo").addClass("hide");
setTimeout(function() {
$('#side-menu').fadeIn(500);
},
@@ -115,14 +124,14 @@ $(function() {
//查看左侧隐藏的选项卡
function scrollTabLeft() {
var marginLeftVal = Math.abs(parseInt($('.page-tabs-content').css('margin-left')));
var marginLeftVal = Math.abs(parseInt($('.page-tabs-content').css('margin-left')) + 50);
// 可视区域非tab宽度
var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".menuTabs"));
//可视区域tab宽度
var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth;
//实际滚动宽度
var scrollVal = 0;
if ($(".page-tabs-content").width() < visibleWidth) {
if (($(".page-tabs-content").width() + 50) < visibleWidth) {
return false;
} else {
var tabElement = $(".menuTab:first");
@@ -240,7 +249,7 @@ $(function() {
function closeTab() {
var closeTabId = $(this).parents('.menuTab').data('id');
var currentWidth = $(this).parents('.menuTab').width();
var panelUrl = $(this).parents('.menuTab').data('panel');
// 当前元素处于活动状态
if ($(this).parents('.menuTab').hasClass('active')) {
@@ -298,6 +307,16 @@ $(function() {
return false;
}
});
if($.common.isNotEmpty(panelUrl)){
$('.menuTab[data-id="' + panelUrl + '"]').addClass('active').siblings('.menuTab').removeClass('active');
$('.mainContent .RuoYi_iframe').each(function() {
if ($(this).data('id') == panelUrl) {
$(this).show().siblings('.RuoYi_iframe').hide();
return false;
}
});
}
}
}
// 当前元素不处于活动状态
@@ -312,8 +331,8 @@ $(function() {
return false;
}
});
scrollToTab($('.menuTab.active'));
}
scrollToTab($('.menuTab.active'));
return false;
}
@@ -370,7 +389,8 @@ $(function() {
// 刷新按钮
$('.tabReload').on('click', refreshTab);
$('.menuTabs').on('dblclick', '.menuTab', refreshTab);
// 双击选项卡全屏显示
$('.menuTabs').on('dblclick', '.menuTab', activeTabMax);
// 左移按扭
$('.tabLeft').on('click', scrollTabLeft);
@@ -396,4 +416,27 @@ $(function() {
$('.page-tabs-content').css("margin-left", "0");
});
// tab全屏显示
$('.tabMaxCurrent').on('click', function () {
$('.page-tabs-content').find('.active').trigger("dblclick");
});
// 关闭全屏
$('#ax_close_max').click(function(){
$('#content-main').toggleClass('max');
$('#ax_close_max').hide();
})
// 双击选项卡全屏显示
function activeTabMax() {
$('#content-main').toggleClass('max');
$('#ax_close_max').show();
}
$(window).keydown(function(event) {
if (event.keyCode == 27) {
$('#content-main').removeClass('max');
$('#ax_close_max').hide();
}
});
});
@@ -1,8 +1,7 @@
/**
* 通用方法封装处理
* Copyright (c) 2018 ruoyi
* Copyright (c) 2019 ruoyi
*/
$(function() {
// select2复选框事件绑定
if ($.fn.select2 !== undefined) {
@@ -68,6 +67,28 @@ $(function() {
});
});
}
// laydate time-input 时间控件绑定
if ($(".time-input").length > 0) {
layui.use('laydate', function() {
var laydate = layui.laydate;
var times = $(".time-input");
// 控制控件外观
var type = times.attr("data-type") || 'date';
// 控制回显格式
var format = times.attr("data-format") || 'yyyy-MM-dd';
for (var i = 0; i < times.length; i++) {
var time = times[i];
laydate.render({
elem: time,
theme: 'molv',
trigger: 'click',
type: type,
format: format,
done: function(value, date) {}
});
}
});
}
// tree 关键字搜索绑定
if ($("#keyword").length > 0) {
$("#keyword").bind("focus", function focusKey(e) {
@@ -81,26 +102,48 @@ $(function() {
$.tree.searchNode(e);
}).bind("input propertychange", $.tree.searchNode);
}
// 复选框后按钮样式状态变更
$("#bootstrap-table").on("check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table", function () {
var ids = $("#bootstrap-table").bootstrapTable("getSelections");
$('#toolbar .btn-del').toggleClass('disabled', !ids.length);
$('#toolbar .btn-edit').toggleClass('disabled', ids.length!=1);;
});
// tree表格树 展开/折叠
var expandFlag = false;
var expandFlag;
$("#expandAllBtn").click(function() {
if (expandFlag) {
$('#bootstrap-table').bootstrapTreeTable('expandAll');
var dataExpand = $.common.isEmpty($.table._option.expandAll) ? true : $.table._option.expandAll;
expandFlag = $.common.isEmpty(expandFlag) ? dataExpand : expandFlag;
if (!expandFlag) {
$('#' + $.table._option.id).bootstrapTreeTable('expandAll');
} else {
$('#bootstrap-table').bootstrapTreeTable('collapseAll');
$('#' + $.table._option.id).bootstrapTreeTable('collapseAll');
}
expandFlag = expandFlag ? false: true;
})
});
/** 刷新选项卡 */
var refreshItem = function(){
var topWindow = $(window.parent.document);
var currentId = $('.page-tabs-content', topWindow).find('.active').attr('data-id');
var target = $('.RuoYi_iframe[data-id="' + currentId + '"]', topWindow);
var url = target.attr('src');
target.attr('src', url).ready();
}
/** 关闭选项卡 */
var closeItem = function(){
var topWindow = $(window.parent.document);
var panelUrl = window.frameElement.getAttribute('data-panel');
$('.page-tabs-content .active i', topWindow).click();
if($.common.isNotEmpty(panelUrl)){
$('.menuTab[data-id="' + panelUrl + '"]', topWindow).addClass('active').siblings('.menuTab').removeClass('active');
$('.mainContent .RuoYi_iframe', topWindow).each(function() {
if ($(this).data('id') == panelUrl) {
$(this).show().siblings('.RuoYi_iframe').hide();
return false;
}
});
}
}
/** 创建选项卡 */
function createMenuItem(dataUrl, menuName) {
var panelUrl = window.frameElement.getAttribute('data-id');
dataIndex = $.common.random(1,100),
flag = true;
if (dataUrl == undefined || $.trim(dataUrl).length == 0) return false;
@@ -125,12 +168,17 @@ function createMenuItem(dataUrl, menuName) {
});
// 选项卡菜单不存在
if (flag) {
var str = '<a href="javascript:;" class="active menuTab" data-id="' + dataUrl + '">' + menuName + ' <i class="fa fa-times-circle"></i></a>';
var str = '<a href="javascript:;" class="active menuTab" data-id="' + dataUrl + '" data-panel="' + panelUrl + '">' + menuName + ' <i class="fa fa-times-circle"></i></a>';
$('.menuTab', topWindow).removeClass('active');
// 添加选项卡对应的iframe
var str1 = '<iframe class="RuoYi_iframe" name="iframe' + dataIndex + '" width="100%" height="100%" src="' + dataUrl + '" frameborder="0" data-id="' + dataUrl + '" seamless></iframe>';
var str1 = '<iframe class="RuoYi_iframe" name="iframe' + dataIndex + '" width="100%" height="100%" src="' + dataUrl + '" frameborder="0" data-id="' + dataUrl + '" data-panel="' + panelUrl + '" seamless></iframe>';
$('.mainContent', topWindow).find('iframe.RuoYi_iframe').hide().parents('.mainContent').append(str1);
window.parent.$.modal.loading("数据加载中,请稍后...");
$('.mainContent iframe:visible', topWindow).load(function () {
window.parent.$.modal.closeLoading();
});
// 添加选项卡
$('.menuTabs .page-tabs-content', topWindow).append(str);
@@ -138,13 +186,35 @@ function createMenuItem(dataUrl, menuName) {
return false;
}
/** 设置全局ajax超时处理 */
//日志打印封装处理
var log = {
log: function (msg) {
console.log(msg);
},
info: function(msg) {
console.info(msg);
},
warn: function(msg) {
console.warn(msg);
},
error: function(msg) {
console.error(msg);
}
};
/** 设置全局ajax处理 */
$.ajaxSetup({
complete: function(XMLHttpRequest, textStatus) {
if (textStatus == "parsererror") {
$.modal.confirm("登陆超时!请重新登陆!", function() {
window.location.href = ctx + "login";
})
if (textStatus == 'timeout') {
$.modal.alertWarning("服务器超时,请稍后再试!");
$.modal.closeLoading();
} else if (textStatus == "parsererror") {
$.modal.alertWarning("服务器错误,请联系管理员!");
$.modal.closeLoading();
}
}
});
});
layer.config({
extend: 'moon/style.css',
skin: 'layer-ext-moon'
});
@@ -1,6 +1,6 @@
/**
* 通用js方法封装处理
* Copyright (c) 2018 ruoyi
* Copyright (c) 2019 ruoyi
*/
(function ($) {
$.extend({
@@ -9,139 +9,340 @@
// 表格封装处理
table: {
_option: {},
_params: {},
// 初始化表格
// 初始化表格参数
init: function(options) {
var defaults = {
id: "bootstrap-table",
type: 0, // 0 代表bootstrapTable 1代表bootstrapTreeTable
height: undefined,
sidePagination: "server",
sortName: "",
sortOrder: "asc",
pagination: true,
pageSize: 10,
toolbar: "toolbar",
striped: false,
escape: false,
showFooter: false,
search: false,
showSearch: true,
showPageGo: false,
showRefresh: true,
showColumns: true,
showToggle: true,
showExport: false,
clickToSelect: false,
rememberSelected: false,
fixedColumns: false,
fixedNumber: 0,
rightFixedColumns: false,
rightFixedNumber: 0,
queryParams: $.table.queryParams,
};
var options = $.extend(defaults, options);
$.table._option = options;
$.table._params = $.common.isEmpty(options.queryParams) ? $.table.queryParams : options.queryParams;
_sortOrder = $.common.isEmpty(options.sortOrder) ? "asc" : options.sortOrder;
_sortName = $.common.isEmpty(options.sortName) ? "" : options.sortName;
$('#bootstrap-table').bootstrapTable({
$('#' + options.id).bootstrapTable({
url: options.url, // 请求后台的URL*
contentType: "application/x-www-form-urlencoded", // 编码类型
method: 'post', // 请求方式(*
cache: false, // 是否使用缓存
height: options.height, // 表格的高度
striped: options.striped, // 是否显示行间隔色
sortable: true, // 是否启用排序
sortStable: true, // 设置为 true 将获得稳定的排序
sortName: _sortName, // 排序列名称
sortOrder: _sortOrder, // 排序方式 asc 或者 desc
pagination: $.common.visible(options.pagination), // 是否显示分页(*
sortName: options.sortName, // 排序列名称
sortOrder: options.sortOrder, // 排序方式 asc 或者 desc
pagination: options.pagination, // 是否显示分页(*
pageNumber: 1, // 初始化加载第一页,默认第一页
pageSize: 10, // 每页的记录行数(*
pageSize: options.pageSize, // 每页的记录行数(*
pageList: [10, 25, 50], // 可供选择的每页的行数(*
escape: options.escape, // 转义HTML字符串
showFooter: options.showFooter, // 是否显示表尾
iconSize: 'outline', // 图标大小:undefined默认的按钮尺寸 xs超小按钮sm小按钮lg大按钮
toolbar: '#toolbar', // 指定工作栏
sidePagination: "server", // 启用服务端分页
search: $.common.visible(options.search), // 是否显示搜索框功能
showSearch: $.common.visible(options.showSearch), // 是否显示检索信息
showRefresh: $.common.visible(options.showRefresh), // 是否显示刷新按钮
showColumns: $.common.visible(options.showColumns), // 是否显示隐藏某列下拉框
showToggle: $.common.visible(options.showToggle), // 是否显示详细视图和列表视图的切换按钮
showExport: $.common.visible(options.showExport), // 是否支持导出文件
queryParams: $.table._params, // 传递参数(*
toolbar: '#' + options.toolbar, // 指定工作栏
sidePagination: options.sidePagination, // server启用服务端分页client客户端分页
search: options.search, // 是否显示搜索框功能
showSearch: options.showSearch, // 是否显示检索信息
showPageGo: options.showPageGo, // 是否显示跳转页
showRefresh: options.showRefresh, // 是否显示刷新按钮
showColumns: options.showColumns, // 是否显示隐藏某列下拉框
showToggle: options.showToggle, // 是否显示详细视图和列表视图的切换按钮
showExport: options.showExport, // 是否支持导出文件
clickToSelect: options.clickToSelect, // 是否启用点击选中行
rememberSelected: options.rememberSelected, // 启用翻页记住前面的选择
fixedColumns: options.fixedColumns, // 是否启用冻结列(左侧)
fixedNumber: options.fixedNumber, // 列冻结的个数(左侧)
rightFixedColumns: options.rightFixedColumns, // 是否启用冻结列(右侧)
rightFixedNumber: options.rightFixedNumber, // 列冻结的个数(右侧)
queryParams: options.queryParams, // 传递参数(*
columns: options.columns, // 显示列信息(*
responseHandler: $.table.responseHandler // 回调函数
responseHandler: $.table.responseHandler, // 在加载服务器发送来的数据之前处理函数
onLoadSuccess: $.table.onLoadSuccess, // 当所有数据被加载时触发处理函数
});
},
// 查询条件
queryParams: function(params) {
return {
// 传递参数查询参数
pageSize: params.limit,
pageNum: params.offset / params.limit + 1,
searchValue: params.search,
orderByColumn: params.sort,
isAsc: params.order
pageSize: params.limit,
pageNum: params.offset / params.limit + 1,
searchValue: params.search,
orderByColumn: params.sort,
isAsc: params.order
};
},
// 请求获取数据后处理回调函数
responseHandler: function(res) {
if (res.code == 0) {
return { rows: res.rows, total: res.total };
if ($.common.isNotEmpty($.table._option.sidePagination) && $.table._option.sidePagination == 'client') {
return res.rows;
} else {
return { rows: res.rows, total: res.total };
}
} else {
$.modal.alertWarning(res.msg);
return { rows: [], total: 0 };
$.modal.alertWarning(res.msg);
return { rows: [], total: 0 };
}
},
// 搜索
// 当所有数据被加载时触发
onLoadSuccess: function(data) {
// 浮动提示框特效
$("[data-toggle='tooltip']").tooltip();
// 触发行点击事件 加载成功事件
$("#" + $.table._option.id).on("check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table load-success.bs.table", function () {
// 工具栏按钮控制
var rows = $.common.isEmpty($.table._option.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns($.table._option.uniqueId);
$('#' + $.table._option.toolbar + ' .btn-del').toggleClass('disabled', !rows.length);
$('#' + $.table._option.toolbar + ' .btn-edit').toggleClass('disabled', rows.length!=1);
});
// 绑定选中事件、取消事件、全部选中、全部取消
$("#" + $.table._option.id).on("check.bs.table check-all.bs.table uncheck.bs.table uncheck-all.bs.table", function (e, rows) {
// 复选框分页保留保存选中数组
var rows = $.common.isEmpty($.table._option.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns($.table._option.uniqueId);
if ($.common.isNotEmpty($.table._option.rememberSelected) && $.table._option.rememberSelected) {
func = $.inArray(e.type, ['check', 'check-all']) > -1 ? 'union' : 'difference';
selectionIds = _[func](selectionIds, rows);
}
});
},
// 表格销毁
destroy: function (tableId) {
var currentId = $.common.isEmpty(tableId) ? $.table._option.id : tableId;
$("#" + currentId).bootstrapTable('destroy');
},
// 序列号生成
serialNumber: function (index) {
var table = $('#' + $.table._option.id).bootstrapTable('getOptions');
var pageSize = table.pageSize;
var pageNumber = table.pageNumber;
return pageSize * (pageNumber - 1) + index + 1;
},
// 列超出指定长度浮动提示
tooltip: function (value, length) {
var _length = $.common.isEmpty(length) ? 20 : length;
var _text = "";
var _value = $.common.nullToStr(value);
if (_value.length > _length) {
_text = _value.substr(0, _length) + "...";
} else {
_text = _value;
}
return '<a href="#" class="tooltip-show" data-toggle="tooltip" title="' + _value + '">' + _text +'</a>';
},
// 下拉按钮切换
dropdownToggle: function (value) {
var actions = [];
actions.push('<div class="btn-group">');
actions.push('<button type="button" class="btn btn-xs dropdown-toggle" data-toggle="dropdown" aria-expanded="false">');
actions.push('<i class="fa fa-cog"></i>&nbsp;<span class="fa fa-chevron-down"></span></button>');
actions.push('<ul class="dropdown-menu">');
actions.push(value.replace(/<a/g,"<li><a").replace(/<\/a>/g,"</a></li>"));
actions.push('</ul>');
actions.push('</div>');
return actions.join('');
},
// 搜索-默认第一个form
search: function(formId) {
var currentId = $.common.isEmpty(formId) ? $('form').attr('id') : formId;
var params = $("#bootstrap-table").bootstrapTable('getOptions');
var params = $("#" + $.table._option.id).bootstrapTable('getOptions');
params.queryParams = function(params) {
var search = {};
$.each($("#" + currentId).serializeArray(), function(i, field) {
search[field.name] = field.value;
});
search.pageSize = params.limit;
search.pageNum = params.offset / params.limit + 1;
search.searchValue = params.search;
search.orderByColumn = params.sort;
search.isAsc = params.order;
var search = {};
$.each($("#" + currentId).serializeArray(), function(i, field) {
search[field.name] = field.value;
});
search.pageSize = params.limit;
search.pageNum = params.offset / params.limit + 1;
search.searchValue = params.search;
search.orderByColumn = params.sort;
search.isAsc = params.order;
return search;
}
$("#bootstrap-table").bootstrapTable('refresh', params);
$("#" + $.table._option.id).bootstrapTable('refresh', params);
},
// 下载
// 导出数据
exportExcel: function(formId) {
var currentId = $.common.isEmpty(formId) ? $('form').attr('id') : formId;
$.modal.loading("正在导出数据,请稍后...");
$.post($.table._option.exportUrl, $("#" + currentId).serializeArray(), function(result) {
if (result.code == web_status.SUCCESS) {
window.location.href = ctx + "common/download?fileName=" + result.msg + "&delete=" + true;
} else {
$.modal.alertError(result.msg);
}
$.modal.closeLoading();
$.modal.confirm("确定导出所有" + $.table._option.modalName + "吗?", function() {
var currentId = $.common.isEmpty(formId) ? $('form').attr('id') : formId;
$.modal.loading("正在导出数据,请稍后...");
$.post($.table._option.exportUrl, $("#" + currentId).serializeArray(), function(result) {
if (result.code == web_status.SUCCESS) {
window.location.href = ctx + "common/download?fileName=" + encodeURI(result.msg) + "&delete=" + true;
} else if (result.code == web_status.WARNING) {
$.modal.alertWarning(result.msg)
} else {
$.modal.alertError(result.msg);
}
$.modal.closeLoading();
});
});
},
// 刷新
// 下载模板
importTemplate: function() {
$.get($.table._option.importTemplateUrl, function(result) {
if (result.code == web_status.SUCCESS) {
window.location.href = ctx + "common/download?fileName=" + encodeURI(result.msg) + "&delete=" + true;
} else if (result.code == web_status.WARNING) {
$.modal.alertWarning(result.msg)
} else {
$.modal.alertError(result.msg);
}
});
},
// 导入数据
importExcel: function(formId) {
var currentId = $.common.isEmpty(formId) ? 'importForm' : formId;
$.form.reset(currentId);
layer.open({
type: 1,
area: ['400px', '230px'],
fix: false,
//不固定
maxmin: true,
shade: 0.3,
title: '导入' + $.table._option.modalName + '数据',
content: $('#' + currentId),
btn: ['<i class="fa fa-check"></i> 导入', '<i class="fa fa-remove"></i> 取消'],
// 弹层外区域关闭
shadeClose: true,
btn1: function(index, layero){
var file = layero.find('#file').val();
if (file == '' || (!$.common.endWith(file, '.xls') && !$.common.endWith(file, '.xlsx'))){
$.modal.msgWarning("请选择后缀为 “xls”或“xlsx”的文件。");
return false;
}
var index = layer.load(2, {shade: false});
$.modal.disable();
var formData = new FormData();
formData.append("file", $('#file')[0].files[0]);
formData.append("updateSupport", $("input[name='updateSupport']").is(':checked'));
$.ajax({
url: $.table._option.importUrl,
data: formData,
cache: false,
contentType: false,
processData: false,
type: 'POST',
success: function (result) {
if (result.code == web_status.SUCCESS) {
$.modal.closeAll();
$.modal.alertSuccess(result.msg);
$.table.refresh();
} else if (result.code == web_status.WARNING) {
layer.close(index);
$.modal.enable();
$.modal.alertWarning(result.msg)
} else {
layer.close(index);
$.modal.enable();
$.modal.alertError(result.msg);
}
}
});
}
});
},
// 刷新表格
refresh: function() {
$("#bootstrap-table").bootstrapTable('refresh', {
url: $.table._option.url,
$("#" + $.table._option.id).bootstrapTable('refresh', {
silent: true
});
},
// 查询选中列值
// 查询表格指定列值
selectColumns: function(column) {
return $.map($('#bootstrap-table').bootstrapTable('getSelections'), function (row) {
var rows = $.map($('#' + $.table._option.id).bootstrapTable('getSelections'), function (row) {
return row[column];
});
if ($.common.isNotEmpty($.table._option.rememberSelected) && $.table._option.rememberSelected) {
rows = rows.concat(selectionIds);
}
return $.common.uniqueFn(rows);
},
// 查询选中首列值
// 查询表格首列值
selectFirstColumns: function() {
return $.map($('#bootstrap-table').bootstrapTable('getSelections'), function (row) {
var rows = $.map($('#' + $.table._option.id).bootstrapTable('getSelections'), function (row) {
return row[$.table._option.columns[1].field];
});
if ($.common.isNotEmpty($.table._option.rememberSelected) && $.table._option.rememberSelected) {
rows = rows.concat(selectionIds);
}
return $.common.uniqueFn(rows);
},
// 回显数据字典
selectDictLabel: function(datas, value) {
var actions = [];
$.each(datas, function(index, dict) {
if (dict.dictValue == value) {
if (dict.dictValue == ('' + value)) {
actions.push("<span class='badge badge-" + dict.listClass + "'>" + dict.dictLabel + "</span>");
return false;
}
});
return actions.join('');
},
// 显示表格指定列
showColumn: function(column) {
$("#" + $.table._option.id).bootstrapTable('showColumn', column);
},
// 隐藏表格指定列
hideColumn: function(column) {
$("#" + $.table._option.id).bootstrapTable('hideColumn', column);
}
},
// 表格树封装处理
treeTable: {
_option: {},
// 初始化表格
init: function(options) {
var defaults = {
id: "bootstrap-tree-table",
type: 1, // 0 代表bootstrapTable 1代表bootstrapTreeTable
height: 0,
rootIdValue: null,
ajaxParams: {},
toolbar: "toolbar",
striped: false,
expandColumn: 1,
showRefresh: true,
showColumns: true,
expandAll: true,
expandFirst: true
};
var options = $.extend(defaults, options);
$.table._option = options;
var treeTable = $('#bootstrap-table').bootstrapTreeTable({
id : options.id, // 用于设置父子关系
parentId : options.parentId, // 用于设置父子关系
type: 'get', // 请求方式(*
url: options.url, // 请求后台的URL*
ajaxParams : {}, // 请求数据的ajax的data属性
expandColumn : '1', // 在哪一列上面显示展开按钮
striped : false, // 是否各行渐变色
bordered : true, // 是否显示边框
toolbar: '#toolbar', // 指定工作栏
expandAll : $.common.visible(options.expandAll), // 是否全部展开
var treeTable = $('#' + options.id).bootstrapTreeTable({
code: options.code, // 用于设置父子关系
parentCode: options.parentCode, // 用于设置父子关系
type: 'get', // 请求方式(*
url: options.url, // 请求后台的URL*
ajaxParams: options.ajaxParams, // 请求数据的ajax的data属性
rootIdValue: options.rootIdValue, // 设置指定根节点id值
height: options.height, // 表格树的高度
expandColumn: options.expandColumn, // 在哪一列上面显示展开按钮
striped: options.striped, // 是否显示行间隔色
bordered: true, // 是否显示边框
toolbar: '#' + options.toolbar, // 指定工作栏
showRefresh: options.showRefresh, // 是否显示刷新按钮
showColumns: options.showColumns, // 是否显示隐藏某列下拉框
expandAll: options.expandAll, // 是否全部展开
expandFirst: options.expandFirst, // 是否默认第一级展开--expandAll为false时生效
columns: options.columns
});
$._treeTable = treeTable;
@@ -265,6 +466,10 @@
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
},
// 关闭全部窗体
closeAll: function () {
layer.closeAll();
},
// 确认窗体
confirm: function (content, callBack) {
layer.confirm(content, {
@@ -278,7 +483,7 @@
});
},
// 弹出层指定宽度
open: function (title, url, width, height) {
open: function (title, url, width, height, callback) {
//如果是移动端,就使用自适应大小弹窗
if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {
width = 'auto';
@@ -296,6 +501,12 @@
if ($.common.isEmpty(height)) {
height = ($(window).height() - 50);
};
if ($.common.isEmpty(callback)) {
callback = function(index, layero) {
var iframeWin = layero.find('iframe')[0];
iframeWin.contentWindow.submitHandler();
}
}
layer.open({
type: 2,
area: [width + 'px', height + 'px'],
@@ -308,10 +519,7 @@
btn: ['确定', '关闭'],
// 弹层外区域关闭
shadeClose: true,
yes: function(index, layero) {
var iframeWin = layero.find('iframe')[0];
iframeWin.contentWindow.submitHandler();
},
yes: callback,
cancel: function(index) {
return true;
}
@@ -368,11 +576,33 @@
shade: 0.3,
title: title,
content: url,
btn: ['确定', '关闭'],
// 弹层外区域关闭
shadeClose: true
shadeClose: true,
yes: function(index, layero) {
var iframeWin = layero.find('iframe')[0];
iframeWin.contentWindow.submitHandler();
},
cancel: function(index) {
return true;
}
});
layer.full(index);
},
// 选卡页方式打开
openTab: function (title, url) {
createMenuItem(url, title);
},
// 禁用按钮
disable: function() {
var doc = window.top == window.parent ? window.document : window.parent.document;
$("a[class*=layui-layer-btn]", doc).addClass("layer-disabled");
},
// 启用按钮
enable: function() {
var doc = window.top == window.parent ? window.document : window.parent.document;
$("a[class*=layui-layer-btn]", doc).removeClass("layer-disabled");
},
// 打开遮罩层
loading: function (message) {
$.blockUI({ message: '<div class="loaderbox"><div class="loading-activity"></div> ' + message + '</div>' });
@@ -392,12 +622,14 @@
operate: {
// 提交数据
submit: function(url, type, dataType, data) {
$.modal.loading("正在处理中,请稍后...");
var config = {
url: url,
type: type,
dataType: dataType,
data: data,
beforeSend: function () {
$.modal.loading("正在处理中,请稍后...");
},
success: function(result) {
$.operate.ajaxSuccess(result);
}
@@ -408,37 +640,53 @@
post: function(url, data) {
$.operate.submit(url, "post", "json", data);
},
// get请求传输
get: function(url) {
$.operate.submit(url, "get", "json", "");
},
// 详细信息
detail: function(id) {
detail: function(id, width, height) {
var _url = $.common.isEmpty(id) ? $.table._option.detailUrl : $.table._option.detailUrl.replace("{id}", id);
var _width = $.common.isEmpty(width) ? "800" : width;
var _height = $.common.isEmpty(height) ? ($(window).height() - 50) : height;
//如果是移动端,就使用自适应大小弹窗
if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {
_width = 'auto';
_height = 'auto';
}
layer.open({
type: 2,
area: ['800px', ($(window).height() - 50) + 'px'],
area: [_width + 'px', _height + 'px'],
fix: false,
//不固定
maxmin: true,
shade: 0.3,
title: $.table._option.modalName + "详细",
content: _url,
btn: ['<i class="fa fa-close"></i> 关闭'],
btn: ['关闭'],
// 弹层外区域关闭
shadeClose: true,
cancel: function(index) {
return true;
}
cancel: function(index){
return true;
}
});
},
// 删除信息
remove: function(id) {
$.modal.confirm("确定删除该条" + $.table._option.modalName + "信息吗?", function() {
var url = $.common.isEmpty(id) ? $.table._option.removeUrl : $.table._option.removeUrl.replace("{id}", id);
var data = { "ids": id };
$.operate.submit(url, "post", "json", data);
var url = $.common.isEmpty(id) ? $.table._option.removeUrl : $.table._option.removeUrl.replace("{id}", id);
if($.table._option.type == table_type.bootstrapTreeTable) {
$.operate.get(url);
} else {
var data = { "ids": id };
$.operate.submit(url, "post", "json", data);
}
});
},
// 批量删除信息
removeAll: function() {
var rows = $.common.isEmpty($.table._option.id) ? $.table.selectFirstColumns() : $.table.selectColumns($.table._option.id);
var rows = $.common.isEmpty($.table._option.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns($.table._option.uniqueId);
if (rows.length == 0) {
$.modal.alertWarning("请至少选择一条记录");
return;
@@ -458,78 +706,192 @@
},
// 添加信息
add: function(id) {
var url = $.common.isEmpty(id) ? $.table._option.createUrl : $.table._option.createUrl.replace("{id}", id);
$.modal.open("添加" + $.table._option.modalName, url);
$.modal.open("添加" + $.table._option.modalName, $.operate.addUrl(id));
},
// 修改信息
edit: function(id) {
var url = "/404.html";
if ($.common.isNotEmpty(id)) {
url = $.table._option.updateUrl.replace("{id}", id);
} else {
var id = $.common.isEmpty($.table._option.id) ? $.table.selectFirstColumns() : $.table.selectColumns($.table._option.id);
url = $.table._option.updateUrl.replace("{id}", id);
}
$.modal.open("修改" + $.table._option.modalName, url);
},
// 工具栏表格树修改
editTree: function() {
var row = $('#bootstrap-table').bootstrapTreeTable('getSelections')[0];
if ($.common.isEmpty(row)) {
$.modal.alertWarning("请至少选择一条记录");
return;
}
var url = $.table._option.updateUrl.replace("{id}", row[$.table._option.id]);
$.modal.open("修改" + $.table._option.modalName, url);
// 添加信息,以tab页展现
addTab: function (id) {
$.modal.openTab("添加" + $.table._option.modalName, $.operate.addUrl(id));
},
// 添加信息 全屏
addFull: function(id) {
var url = $.common.isEmpty(id) ? $.table._option.createUrl : $.table._option.createUrl.replace("{id}", id);
$.modal.openFull("添加" + $.table._option.modalName, url);
},
// 添加访问地址
addUrl: function(id) {
var url = $.common.isEmpty(id) ? $.table._option.createUrl : $.table._option.createUrl.replace("{id}", id);
return url;
},
// 修改信息
edit: function(id) {
if($.common.isEmpty(id) && $.table._option.type == table_type.bootstrapTreeTable) {
var row = $('#' + $.table._option.id).bootstrapTreeTable('getSelections')[0];
if ($.common.isEmpty(row)) {
$.modal.alertWarning("请至少选择一条记录");
return;
}
var url = $.table._option.updateUrl.replace("{id}", row[$.table._option.uniqueId]);
$.modal.open("修改" + $.table._option.modalName, url);
} else {
$.modal.open("修改" + $.table._option.modalName, $.operate.editUrl(id));
}
},
// 修改信息,以tab页展现
editTab: function(id) {
$.modal.openTab("修改" + $.table._option.modalName, $.operate.editUrl(id));
},
// 修改信息 全屏
editFull: function(id) {
var url = "/404.html";
if ($.common.isNotEmpty(id)) {
url = $.table._option.updateUrl.replace("{id}", id);
} else {
var row = $.common.isEmpty($.table._option.id) ? $.table.selectFirstColumns() : $.table.selectColumns($.table._option.id);
var row = $.common.isEmpty($.table._option.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns($.table._option.uniqueId);
url = $.table._option.updateUrl.replace("{id}", row);
}
$.modal.openFull("修改" + $.table._option.modalName, url);
},
// 保存信息
// 修改访问地址
editUrl: function(id) {
var url = "/404.html";
if ($.common.isNotEmpty(id)) {
url = $.table._option.updateUrl.replace("{id}", id);
} else {
var id = $.common.isEmpty($.table._option.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns($.table._option.uniqueId);
if (id.length == 0) {
$.modal.alertWarning("请至少选择一条记录");
return;
}
url = $.table._option.updateUrl.replace("{id}", id);
}
return url;
},
// 保存信息 刷新表格
save: function(url, data) {
$.modal.loading("正在处理中,请稍后...");
var config = {
url: url,
type: "post",
dataType: "json",
data: data,
beforeSend: function () {
$.modal.loading("正在处理中,请稍后...");
$.modal.disable();
},
success: function(result) {
$.operate.saveSuccess(result);
$.operate.successCallback(result);
}
};
$.ajax(config)
},
// 保存信息 弹出提示框
saveModal: function(url, data) {
var config = {
url: url,
type: "post",
dataType: "json",
data: data,
beforeSend: function () {
$.modal.loading("正在处理中,请稍后...");
},
success: function(result) {
if (result.code == web_status.SUCCESS) {
$.modal.alertSuccess(result.msg)
} else if (result.code == web_status.WARNING) {
$.modal.alertWarning(result.msg)
} else {
$.modal.alertError(result.msg);
}
$.modal.closeLoading();
}
};
$.ajax(config)
},
// 保存选项卡信息
saveTab: function(url, data) {
var config = {
url: url,
type: "post",
dataType: "json",
data: data,
beforeSend: function () {
$.modal.loading("正在处理中,请稍后...");
},
success: function(result) {
$.operate.successTabCallback(result);
}
};
$.ajax(config)
},
// 保存结果弹出msg刷新table表格
ajaxSuccess: function (result) {
if (result.code == web_status.SUCCESS) {
if (result.code == web_status.SUCCESS && $.table._option.type == table_type.bootstrapTable) {
$.modal.msgSuccess(result.msg);
$.table.refresh();
} else {
} else if (result.code == web_status.SUCCESS && $.table._option.type == table_type.bootstrapTreeTable) {
$.modal.msgSuccess(result.msg);
$.treeTable.refresh();
} else if (result.code == web_status.WARNING) {
$.modal.alertWarning(result.msg)
} else {
$.modal.alertError(result.msg);
}
$.modal.closeLoading();
},
// 保存结果提示msg
// 成功结果提示msg(父窗体全局更新)
saveSuccess: function (result) {
if (result.code == web_status.SUCCESS) {
$.modal.msgReload("保存成功,正在刷新数据请稍后……", modal_status.SUCCESS);
} else {
} else if (result.code == web_status.WARNING) {
$.modal.alertWarning(result.msg)
} else {
$.modal.alertError(result.msg);
}
$.modal.closeLoading();
},
// 成功回调执行事件(父窗体静默更新)
successCallback: function(result) {
if (result.code == web_status.SUCCESS) {
var parent = window.parent;
if (parent.$.table._option.type == table_type.bootstrapTable) {
$.modal.close();
parent.$.modal.msgSuccess(result.msg);
parent.$.table.refresh();
} else if (parent.$.table._option.type == table_type.bootstrapTreeTable) {
$.modal.close();
parent.$.modal.msgSuccess(result.msg);
parent.$.treeTable.refresh();
} else {
$.modal.msgReload("保存成功,正在刷新数据请稍后……", modal_status.SUCCESS);
}
} else if (result.code == web_status.WARNING) {
$.modal.alertWarning(result.msg)
} else {
$.modal.alertError(result.msg);
}
$.modal.closeLoading();
$.modal.enable();
},
// 选项卡成功回调执行事件(父窗体静默更新)
successTabCallback: function(result) {
if (result.code == web_status.SUCCESS) {
var topWindow = $(window.parent.document);
var currentId = $('.page-tabs-content', topWindow).find('.active').attr('data-panel');
var $contentWindow = $('.RuoYi_iframe[data-id="' + currentId + '"]', topWindow)[0].contentWindow;
$.modal.close();
$contentWindow.$.modal.msgSuccess(result.msg);
$contentWindow.$(".layui-layer-padding").removeAttr("style");
if ($contentWindow.$.table._option.type == table_type.bootstrapTable) {
$contentWindow.$.table.refresh();
} else if ($contentWindow.$.table._option.type == table_type.bootstrapTreeTable) {
$contentWindow.$.treeTable.refresh();
}
closeItem();
} else if (result.code == web_status.WARNING) {
$.modal.alertWarning(result.msg)
} else {
$.modal.alertError(result.msg);
}
$.modal.closeLoading();
}
},
// 校验封装处理
@@ -553,54 +915,56 @@
_lastValue: {},
// 初始化树结构
init: function(options) {
var defaults = {
id: "tree", // 属性ID
expandLevel: 0, // 展开等级节点
view: {
selectedMulti: false, // 设置是否允许同时选中多个节点
nameIsHTML: true // 设置 name 属性是否支持 HTML 脚本
},
check: {
enable: false, // 置 zTree 的节点上是否显示 checkbox / radio
nocheckInherit: true, // 设置子节点是否自动继承
},
data: {
key: {
title: "title" // 节点数据保存节点提示信息的属性名称
},
simpleData: {
enable: true // true / false 分别表示 使用 / 不使用 简单数据模式
}
},
};
var options = $.extend(defaults, options);
$.tree._option = options;
// 属性ID
var _id = $.common.isEmpty(options.id) ? "tree" : options.id;
// 展开等级节点
var _expandLevel = $.common.isEmpty(options.expandLevel) ? 0 : options.expandLevel;
// 树结构初始化加载
var setting = {
check: options.check,
view: { selectedMulti: false, nameIsHTML: true },
data: { key: { title: "title" }, simpleData: { enable: true } },
callback: { onClick: options.onClick }
};
var setting = {
callback: {
onClick: options.onClick, // 用于捕获节点被点击的事件回调函数
onCheck: options.onCheck, // 用于捕获 checkbox / radio 被勾选 或 取消勾选的事件回调函数
onDblClick: options.onDblClick // 用于捕获鼠标双击之后的事件回调函数
},
check: options.check,
view: options.view,
data: options.data
};
$.get(options.url, function(data) {
var treeName = $("#treeName").val();
var treeId = $("#treeId").val();
tree = $.fn.zTree.init($("#" + _id), setting, data);
tree = $.fn.zTree.init($("#" + options.id), setting, data);
$._tree = tree;
// 展开第一级节点
var nodes = tree.getNodesByParam("level", 0);
var nodes = tree.getNodesByParam("level", options.expandLevel - 1);
for (var i = 0; i < nodes.length; i++) {
if(_expandLevel > 0) {
tree.expandNode(nodes[i], true, false, false);
}
$.tree.selectByIdName(treeId, treeName, nodes[i]);
tree.expandNode(nodes[i], true, false, false);
}
// 展开第二级节点
nodes = tree.getNodesByParam("level", 1);
for (var i = 0; i < nodes.length; i++) {
if(_expandLevel > 1) {
tree.expandNode(nodes[i], true, false, false);
}
$.tree.selectByIdName(treeId, treeName, nodes[i]);
}
// 展开第三级节点
nodes = tree.getNodesByParam("level", 2);
for (var i = 0; i < nodes.length; i++) {
if(_expandLevel > 2) {
tree.expandNode(nodes[i], true, false, false);
}
$.tree.selectByIdName(treeId, treeName, nodes[i]);
}
}, null, null, "正在加载,请稍后...");
var node = tree.getNodesByParam("id", treeId, null)[0];
$.tree.selectByIdName(treeId, node);
});
},
// 搜索节点
searchNode: function() {
// 取得输入的关键字的值
var value = $.common.trim($("#keyword").val());
if ($.tree._lastValue === value) {
if ($.tree._lastValue == value) {
return;
}
// 保存最后一次搜索名称
@@ -616,11 +980,9 @@
$.tree.updateNodes($._tree.getNodesByParamFuzzy("name", value));
},
// 根据Id和Name选中指定节点
selectByIdName: function(treeId, treeName, node) {
if ($.common.isNotEmpty(treeName) && $.common.isNotEmpty(treeId)) {
if (treeId == node.id && treeName == node.name) {
$._tree.selectNode(node, true);
}
selectByIdName: function(treeId, node) {
if ($.common.isNotEmpty(treeId) && treeId == node.id) {
$._tree.selectNode(node, true);
}
},
// 显示所有节点
@@ -695,6 +1057,17 @@
}
return true;
},
// 不允许最后层级节点选择
notAllowLastLevel: function(_tree) {
var nodes = _tree.getSelectedNodes();
for (var i = 0; i < nodes.length; i++) {
if (nodes[i].level == nodes.length + 1) {
$.modal.msgError("不能选择最后层级节点(" + nodes[i].name + "");
return false;
}
}
return true;
},
// 隐藏/显示搜索栏
toggleSearch: function() {
$('#search').slideToggle(200);
@@ -724,6 +1097,13 @@
isNotEmpty: function (value) {
return !$.common.isEmpty(value);
},
// 空对象转字符串
nullToStr: function(value) {
if ($.common.isEmpty(value)) {
return "-";
}
return value;
},
// 是否显示数据 为空默认为显示
visible: function (value) {
if ($.common.isEmpty(value) || value == true) {
@@ -738,18 +1118,60 @@
}
return value.toString().replace(/(^\s*)|(\s*$)|\r|\n/g, "");
},
// 字符串格式化(%s )
sprintf: function (str) {
var args = arguments, flag = true, i = 1;
str = str.replace(/%s/g, function () {
var arg = args[i++];
if (typeof arg === 'undefined') {
flag = false;
return '';
}
return arg;
});
return flag ? str : '';
},
// 指定随机数返回
random: function (min, max) {
return Math.floor((Math.random() * max) + min);
},
// 判断字符串是否是以start开头
startWith: function(value, start) {
var reg = new RegExp("^" + start);
return reg.test(value)
},
// 判断字符串是否是以end结尾
endWith: function(value, end) {
var reg = new RegExp(end + "$");
return reg.test(value)
},
// 数组去重
uniqueFn: function(array) {
var result = [];
var hashObj = {};
for (var i = 0; i < array.length; i++) {
if (!hashObj[array[i]]) {
hashObj[array[i]] = true;
result.push(array[i]);
}
}
return result;
}
}
});
})(jQuery);
/** 表格类型 */
table_type = {
bootstrapTable: 0,
bootstrapTreeTable: 1
};
/** 消息状态码 */
web_status = {
SUCCESS: 0,
FAIL: 500
FAIL: 500,
WARNING: 301
};
/** 弹窗状态码 */
@@ -1,7 +1,6 @@
$(function() {
validateRule();
$(".i-checks").iCheck({checkboxClass:"icheckbox_square-green-login"});
$('.imgcode').click(function() {
var url = ctx + "captcha/captchaImage?type=" + captchaType + "&s=" + Math.random();
$(".imgcode").attr("src", url);
@@ -35,6 +34,7 @@ function login() {
} else {
$.modal.closeLoading();
$('.imgcode').click();
$(".code").val("");
$.modal.msg(r.msg);
}
}
@@ -14,8 +14,8 @@
<h3 class="font-bold">您没有访问权限!</h3>
<div class="error-desc">
对不起,您正在寻找的页面已经找到。尝试检查URL的错误,然后按浏览器上的刷新按钮或尝试在我们的应用程序中找到其他内容。
<a href="javascript:top.document.location.href='/'" class="btn btn-primary m-t">主页</a>
对不起,您没有访问权限,请不要进行非法操作!您可以返回主页面
<a href="javascript:top.document.location.href='/'" class="btn btn-outline btn-primary btn-xs">返回主页</a>
</div>
</div>
<script src="/js/jquery.min.js?v=2.1.4"></script>
@@ -1,29 +1,32 @@
<head th:fragment="header">
<!-- 通用CSS -->
<head th:fragment=header(title)>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
<meta name="keywords" content="">
<meta name="description" content="">
<title th:text="${title}"></title>
<link rel="shortcut icon" href="favicon.ico">
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
<link th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
<!-- bootstrap-table 表格插件样式 -->
<link th:href="@{/ajax/libs/bootstrap-table/bootstrap-table.min.css}" rel="stylesheet"/>
<link th:href="@{/ajax/libs/bootstrap-treetable/bootstrap-treetable.css}" rel="stylesheet"/>
<link th:href="@{/ajax/libs/bootstrap-table/extensions/columns/bootstrap-table-fixed-columns.css}" rel="stylesheet"/>
<link th:href="@{/css/animate.css}" rel="stylesheet"/>
<link th:href="@{/css/style.css}" rel="stylesheet"/>
<link th:href="@{/ajax/libs/select/select2.css}" rel="stylesheet"/>
<link th:href="@{/ruoyi/css/ry-ui.css}" rel="stylesheet"/>
</head>
<!-- 通用JS -->
<div th:fragment="footer">
<script th:src="@{/js/jquery.min.js}"></script>
<script th:src="@{/js/bootstrap.min.js}"></script>
<!-- bootstrap-table 表格插件 -->
<script th:src="@{/ajax/libs/bootstrap-table/bootstrap-table.min.js}"></script>
<script th:src="@{/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.min.js}"></script>
<script th:src="@{/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js}"></script>
<script th:src="@{/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.js}"></script>
<script th:src="@{/ajax/libs/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.min.js}"></script>
<script th:src="@{/ajax/libs/bootstrap-table/extensions/columns/bootstrap-table-fixed-columns.js}"></script>
<!-- jquery-validate 表单验证插件 -->
<script th:src="@{/ajax/libs/validate/jquery.validate.min.js}"></script>
<script th:src="@{/ajax/libs/validate/messages_zh.min.js}"></script>
@@ -35,11 +38,69 @@
<script th:src="@{/ajax/libs/bootstrap-table/extensions/export/tableExport.js}"></script>
<!-- 遮罩层 -->
<script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
<script th:src="@{/ajax/libs/iCheck/icheck.min.js}"></script>
<script th:src="@{/ajax/libs/iCheck/icheck.min.js}"></script>
<script th:src="@{/ajax/libs/layer/layer.min.js}"></script>
<script th:src="@{/ajax/libs/layui/layui.js}"></script>
<script th:src="@{/ruoyi/js/common.js?v=3.0.0}"></script>
<script th:src="@{/ruoyi/js/ry-ui.js?v=3.0.0}"></script>
<script th:src="@{/ruoyi/js/common.js?v=3.3.0}"></script>
<script th:src="@{/ruoyi/js/ry-ui.js?v=3.3.0}"></script>
<script src="http://tajs.qq.com/stats?sId=62048022"></script>
<script th:inline="javascript"> var ctx = [[@{/}]]; </script>
</div>
<!-- ztree树插件 -->
<div th:fragment="ztree-css">
<link th:href="@{/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css}" rel="stylesheet"/>
</div>
<div th:fragment="ztree-js">
<script th:src="@{/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js}"></script>
</div>
<!-- select下拉框插件 -->
<div th:fragment="select2-css">
<link th:href="@{/ajax/libs/select/select2.css}" rel="stylesheet"/>
</div>
<div th:fragment="select2-js">
<script th:src="@{/ajax/libs/select/select2.js}"></script>
</div>
<!-- datetimepicker日期和时间插件 -->
<div th:fragment="datetimepicker-css">
<link th:href="@{/ajax/libs/datapicker/bootstrap-datetimepicker.min.css}" rel="stylesheet"/>
</div>
<div th:fragment="datetimepicker-js">
<script th:src="@{/ajax/libs//datapicker/bootstrap-datetimepicker.min.js}"></script>
</div>
<!-- ui布局插件 -->
<div th:fragment="layout-latest-css">
<link th:href="@{/ajax/libs/jquery-layout/jquery.layout-latest.css}" rel="stylesheet"/>
</div>
<div th:fragment="layout-latest-js">
<script th:src="@{/ajax/libs/jquery-layout/jquery.layout-latest.js}"></script>
</div>
<!-- summernote富文本编辑器插件 -->
<div th:fragment="summernote-css">
<link th:href="@{/ajax/libs/summernote/summernote.css}" rel="stylesheet"/>
<link th:href="@{/ajax/libs/summernote/summernote-bs3.css}" rel="stylesheet"/>
</div>
<div th:fragment="summernote-js">
<script th:src="@{/ajax/libs/summernote/summernote.min.js}"></script>
<script th:src="@{/ajax/libs/summernote/summernote-zh-CN.js}"></script>
</div>
<!-- cropbox图像裁剪插件 -->
<div th:fragment="cropbox-css">
<link th:href="@{/ajax/libs/cropbox/cropbox.css}" rel="stylesheet"/>
</div>
<div th:fragment="cropbox-js">
<script th:src="@{/ajax/libs/cropbox/cropbox.js}"></script>
</div>
<!-- jsonview格式化和语法高亮JSON格式数据查看插件 -->
<div th:fragment="jsonview-css">
<link th:href="@{/ajax/libs/jsonview/jquery.jsonview.css}" rel="stylesheet"/>
</div>
<div th:fragment="jsonview-js">
<script th:src="@{/ajax/libs/jsonview/jquery.jsonview.js}"></script>
</div>
@@ -15,9 +15,11 @@
<link th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
<link th:href="@{/css/animate.css}" rel="stylesheet"/>
<link th:href="@{/css/style.css}" rel="stylesheet"/>
<link th:href="@{/ruoyi/css/ry-ui.css?v=3.0.0}" rel="stylesheet"/>
<link th:href="@{/css/skins.css}" rel="stylesheet"/>
<link th:href="@{/ruoyi/css/ry-ui.css?v=3.3.0}" rel="stylesheet"/>
<style type="text/css">
.nav > li:hover .dropdown-menu {display: block;}
#content-main.max { height: calc(100% - 110px); overflow: hidden; width: 100%; height: 100%; left: 0px; position: absolute; top: 0px; z-index: 9998; margin: 0; }
</style>
</head>
<body class="fixed-sidebar full-height-layout gray-bg" style="overflow: hidden" th:classappend="${@config.getKey('sys.index.skinName')}">
@@ -30,19 +32,24 @@
</div>
<div class="sidebar-collapse">
<ul class="nav" id="side-menu">
<li class="nav-header">
<div class="dropdown profile-element"> <span>
<img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{/profile/avatar/} + ${user.avatar}" alt="image" class="img-circle" height="60" width="60"/></span>
<a data-toggle="dropdown" class="dropdown-toggle" href="#">
<span class="clear"><span class="block m-t-xs"><strong class="font-bold" th:text="${user.userName}">用户</strong></span>
<span class="text-muted text-xs block"><span th:text="${user.dept?.deptName}">部门</span> <b class="caret"></b></span> </span> </a>
<ul class="dropdown-menu animated fadeInRight m-t-xs">
<li><a class="menuItem" th:href="@{/system/user/profile}">个人信息</a></li>
<li class="divider"></li>
<li><a th:href="@{logout}">退出</a></li>
</ul>
</div>
</li>
<li class="logo">
<span class="logo-lg">RuoYi</span>
</li>
<li>
<div class="user-panel">
<a class="menuItem" title="个人中心" th:href="@{/system/user/profile}">
<div class="hide" th:text="个人中心"></div>
<div class="pull-left image">
<img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{/profile/avatar/} + ${user.avatar}" class="img-circle" alt="User Image">
</div>
</a>
<div class="pull-left info">
<p>[[${user.loginName}]]</p>
<a href="#"><i class="fa fa-circle text-success"></i> 在线</a>
<a th:href="@{logout}" style="padding-left:5px;"><i class="fa fa-sign-out text-danger"></i> 注销</a>
</div>
</div>
</li>
<li class="active">
<a href="index.html"><i class="fa fa-home"></i> <span class="nav-label">主页</span> <span class="fa arrow"></span></a>
<ul class="nav nav-second-level">
@@ -73,25 +80,36 @@
<!--右侧部分开始-->
<div id="page-wrapper" class="gray-bg dashbard-1">
<div class="row border-bottom">
<nav class="navbar navbar-static-top" role="navigation"
style="margin-bottom: 0">
<nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0">
<div class="navbar-header">
<a class="navbar-minimalize minimalize-styl-2 btn btn-default " href="#" title="收起菜单">
<a class="navbar-minimalize minimalize-styl-2" style="color:#FFF;" href="#" title="收起菜单">
<i class="fa fa-bars"></i>
</a>
<form role="search" class="navbar-form-custom" method="post" action="">
<div class="form-group">
<input type="text" placeholder="请输入您需要查找的内容 …" class="form-control" name="top-search" id="top-search">
</div>
</form>
</div>
<ul class="nav navbar-top-links navbar-right welcome-message">
<li>
<span class="m-r-sm text-muted">欢迎来到若依管理后台.</span>
</li>
<li><a id="fullScreen"><i class="fa fa-arrows-alt"></i>全屏</a></li>
<li><a th:href="@{logout}"><i class="fa fa-sign-out"></i>退出</a></li>
<li><a title="使用文档" href="http://doc.ruoyi.vip" target="_blank"><i class="fa fa-question-circle"></i> 使用文档</a></li>
<li><a title="全屏显示" id="fullScreen"><i class="fa fa-arrows-alt"></i> 全屏显示</a></li>
<li class="dropdown user-menu">
<a href="javascript:" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown">
<img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{/profile/avatar/} + ${user.avatar}" class="user-image">
<span class="hidden-xs">[[${user.userName}]]</span>
</a>
<ul class="dropdown-menu">
<li class="mt5">
<a th:href="@{/system/user/profile}" class="menuItem">
<i class="fa fa-user"></i> 个人中心</a>
</li>
<li>
<a onclick="resetPwd()" class="menuItem">
<i class="fa fa-key"></i> 修改密码</a>
</li>
<li class="divider"></li>
<li>
<a th:href="@{logout}">
<i class="fa fa-sign-out"></i> 退出登录</a>
</li>
</ul>
</li>
</ul>
</nav>
</div>
@@ -115,10 +133,14 @@
<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>
<li><a class="tabMaxCurrent" href="javascript:void();">全屏显示</a></li>
</ul>
</div>
<a href="#" class="roll-nav roll-right tabReload"><i class="fa fa-refresh"></i> 刷新</a>
</div>
<a id="ax_close_max" class="ax_close_max" href="#" title="关闭全屏"> <i class="fa fa-times-circle-o"></i> </a>
<div class="row mainContent" id="content-main">
<iframe class="RuoYi_iframe" name="iframe0" width="100%" height="100%" data-id="/system/main"
th:src="@{/system/main}" frameborder="0" seamless></iframe>
@@ -135,9 +157,18 @@
<script th:src="@{/js/plugins/metisMenu/jquery.metisMenu.js}"></script>
<script th:src="@{/js/plugins/slimscroll/jquery.slimscroll.min.js}"></script>
<script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
<script th:src="@{/ajax/libs/layer/layer.min.js}"></script>
<script src="http://tajs.qq.com/stats?sId=62048022"></script>
<script th:src="@{/ruoyi/js/ry-ui.js?v=3.0.0}"></script>
<script th:src="@{/ruoyi/js/ry-ui.js?v=3.3.0}"></script>
<script th:src="@{/ruoyi/index.js}"></script>
<script th:src="@{/ajax/libs/fullscreen/jquery.fullscreen.js}"></script>
<script th:inline="javascript">
var ctx = [[@{/}]];
/*用户管理-重置密码*/
function resetPwd() {
var url = ctx + 'system/user/profile/resetPwd';
$.modal.open("重置密码", url, '800', '500');
}
</script>
</body>
</html>
@@ -7,12 +7,11 @@
<title>若依管理系统</title>
<meta name="keywords" content="若依,若依开源,若依框架,若依系统,ruoyi">
<meta name="description" content="若依基于SpringBoot2.0的权限管理系统 易读易懂、界面简洁美观。 核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖">
<link href="../static/css/bootstrap.min.css" th:href="@{css/bootstrap.min.css}" rel="stylesheet"/>
<link href="../static/css/font-awesome.min.css" th:href="@{css/font-awesome.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"/>
<link href="../static/ruoyi/css/ry-ui.css" th:href="@{/ruoyi/css/ry-ui.css?v=3.0.0}" rel="stylesheet"/>
<link href="../static/css/bootstrap.min.css" th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
<link href="../static/css/font-awesome.min.css" th:href="@{/css/font-awesome.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/ruoyi/css/ry-ui.css" th:href="@{/ruoyi/css/ry-ui.css?v=3.3.0}" rel="stylesheet"/>
<!--[if lt IE 9]>
<meta http-equiv="refresh" content="0;ie.html" />
<![endif]-->
@@ -49,10 +48,10 @@
<h4 class="no-margins">登录:</h4>
<p class="m-t-md">你若不离不弃,我必生死相依</p>
<input type="text" name="username" class="form-control uname" placeholder="用户名" value="admin" />
<input type="password" name="password" class="form-control pword m-b" placeholder="密码" value="admin123" />
<div class="row" th:if="${captchaEnabled==true}">
<input type="password" name="password" class="form-control pword" placeholder="密码" value="admin123" />
<div class="row m-t" th:if="${captchaEnabled==true}">
<div class="col-xs-6">
<input type="text" name="validateCode" class="form-control code" placeholder="验证码" maxlength="5">
<input type="text" name="validateCode" class="form-control code" placeholder="验证码" maxlength="5" autocomplete="off">
</div>
<div class="col-xs-6">
<a href="javascript:void(0);" title="点击更换验证码">
@@ -60,14 +59,16 @@
</a>
</div>
</div>
<input class="i-checks" type="checkbox" name="rememberme" />&nbsp;&nbsp;记住我
<div class="checkbox-custom" th:classappend="${captchaEnabled==false} ? 'm-t'">
<input type="checkbox" id="rememberme" name="rememberme"> <label for="rememberme">记住我</label>
</div>
<button class="btn btn-success btn-block" id="btnSubmit" data-loading="正在验证登录,请稍后...">登录</button>
</form>
</div>
</div>
<div class="signup-footer">
<div class="pull-left">
&copy; 2018 All Rights Reserved. RuoYi <br>
&copy; 2019 All Rights Reserved. RuoYi <br>
<a href="http://www.miitbeian.gov.cn/" target="_blank" rel="nofollow">粤ICP备18046899号</a><br>
</div>
</div>
@@ -80,10 +81,9 @@
<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/layer/layer.min.js" th:src="@{/ajax/libs/layer/layer.min.js}"></script>
<script src="../static/ajax/libs/iCheck/icheck.min.js" th:src="@{/ajax/libs/iCheck/icheck.min.js}"></script>
<script src="../static/ajax/libs/blockUI/jquery.blockUI.js" th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
<script src="http://tajs.qq.com/stats?sId=62048022"></script>
<script src="../static/ruoyi/js/ry-ui.js" th:src="@{/ruoyi/js/ry-ui.js?v=3.0.0}"></script>
<script src="../static/ruoyi/js/ry-ui.js" th:src="@{/ruoyi/js/ry-ui.js?v=3.3.0}"></script>
<script src="../static/ruoyi/login.js" th:src="@{/ruoyi/login.js}"></script>
</body>
</html>
@@ -16,11 +16,11 @@
<div class="row border-bottom white-bg dashboard-header">
<div class="col-sm-12">
<blockquote class="text-warning" style="font-size:14px">
高性能云服务器2折起
<br><a target="_blank" href="https://promotion.aliyun.com/ntms/act/qwbk.html?userCode=brki8iof">https://promotion.aliyun.com/ntms/act/qwbk.html?userCode=brki8iof</a>
<br>云产品通用代金券,可叠加官网常规优惠使用
<br><a target="_blank" href="https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=brki8iof">https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=brki8iof</a>
<h4 class="text-danger">限时活动推广。</h4>
领取阿里云通用云产品1888优惠券
<br><a target="_blank" href="https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=brki8iof">https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=brki8iof</a><br>
领取腾讯云通用云产品2860优惠券
<br><a target="_blank" href="https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console">https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console</a>
<h4 class="text-danger">云产品通用红包,可叠加官网常规优惠使用。(仅限新用户)</h4>
</blockquote>
<hr>
@@ -79,7 +79,7 @@
<div class="ibox-content">
<p><i class="fa fa-send-o"></i> 官网:<a href="http://www.ruoyi.vip" target="_blank">http://www.ruoyi.vip</a>
</p>
<p><i class="fa fa-qq"></i> QQ群:<s>满1389287</s> <a href="https://jq.qq.com/?_wv=1027&k=5cHeRVW" target="_blank">1679294</a>
<p><i class="fa fa-qq"></i> QQ群:<s>满1389287</s> <s>满1679294</s> <s>满1529866</s> <a href="https://jq.qq.com/?_wv=1027&k=5g75dCU" target="_blank">1772718</a>
</p>
<p><i class="fa fa-weixin"></i> 微信:<a href="javascript:;">/ *若依</a>
</p>
@@ -96,13 +96,129 @@
<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="#v33">v3.3.0</a><code class="pull-right">2019.04.01</code>
</h5>
</div>
<div id="v33" class="panel-collapse collapse in">
<div class="panel-body">
<ol>
<li>新增线程池统一管理</li>
<li>新增支持左右冻结列</li>
<li>新增表格字符超长浮动提示</li>
<li>升级datepicker拓展并汉化</li>
<li>升级druid到最新版本v1.1.14</li>
<li>修复个人头像为图片服务器跨域问题</li>
<li>修改上传文件按日期存储</li>
<li>新增表格客户端分页选项</li>
<li>新增表格的高度参数</li>
<li>新增表格销毁方法</li>
<li>新增表格下拉按钮切换方法</li>
<li>新增表格分页跳转到指定页码</li>
<li>新增表格启用点击选中行参数</li>
<li>修复表格数据重新加载未触发部分按钮禁用</li>
<li>使用jsonview展示操作日志参数</li>
<li>新增方法(addTab、editTab</li>
<li>修改用户管理界面为Tab打开方式</li>
<li>表单验证代码优化</li>
<li>修复@Excel注解 prompt 属性使用报错</li>
<li>修复combo属性Excel兼容性问题</li>
<li>新增@Excel导入导出支持父类字段</li>
<li>修复关闭最后选项卡无法激活滚动问题</li>
<li>增加日期控件显示类型及回显格式扩展选项</li>
<li>修复定时任务执行失败后入库状态为成功状态</li>
<li>支持定时任务并发开关控制</li>
<li>优化权限校验失败普通请求跳转页面</li>
<li>捕获线程池执行任务抛出的异常</li>
<li>修复IE浏览器导出功能报错</li>
<li>新增角色管理分配用户功能</li>
<li>新增表格翻页记住前面的选择</li>
<li>调整用户个人中心页面</li>
<li>修复界面存在的一些安全问题</li>
<li>其他细节优化</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="#v32">v3.2.0</a><code class="pull-right">2019.01.18</code>
</h5>
</div>
<div id="v32" class="panel-collapse collapse">
<div class="panel-body">
<ol>
<li>部门修改时不允许选择最后节点</li>
<li>修复部门菜单排序字段无效</li>
<li>修复光驱磁盘导致服务监控异常</li>
<li>登录界面去除check插件</li>
<li>验证码文本字符间距修正</li>
<li>升级SpringBoot到最新版本2.1.1</li>
<li>升级MYSQL驱动</li>
<li>修正登录必填项位置偏移</li>
<li>Session会话检查优化</li>
<li>Excel注解支持多级获取</li>
<li>新增序列号生成方法</li>
<li>修复WAR部署tomcat退出线程异常</li>
<li>全屏操作增加默认确认/关闭</li>
<li>修复个人信息可能导致漏洞</li>
<li>字典数据根据下拉选择新增类型</li>
<li>升级Summernote到最新版本v0.8.11</li>
<li>新增用户数据导入</li>
<li>首页主题样式更换</li>
<li>layer扩展主题更换</li>
<li>用户管理移动端默认隐藏左侧布局</li>
<li>详细信息弹出层显示在顶层</li>
<li>表格支持切换状态(用户/角色/定时任务)</li>
<li>Druid数据源支持配置继承</li>
<li>修正部分iPhone手机端表格适配问题</li>
<li>新增防止重复提交表单方法</li>
<li>新增表格数据统计汇总方法</li>
<li>支持富文本上传图片文件</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="#v31">v3.1.0</a><code class="pull-right">2018.12.03</code>
</h5>
</div>
<div id="v31" class="panel-collapse collapse">
<div class="panel-body">
<ol>
<li>新增内网不获取IP地址</li>
<li>新增cron表达式有效校验</li>
<li>定时任务新增详细信息</li>
<li>定时任务默认策略修改(不触发立即执行)</li>
<li>定时任务显示下一个执行周期</li>
<li>支持前端任意日期格式处理</li>
<li>上传头像删除多余提交按钮</li>
<li>表格增加行间隔色配置项</li>
<li>表格增加转义HTML字符串配置项</li>
<li>表格增加显示/隐藏指定列</li>
<li>代码生成优化</li>
<li>操作日志参数格式化显示</li>
<li>页签新增新增全屏显示</li>
<li>新增一键打包部署</li>
<li>Excel注解新增多个参数</li>
<li>新增提交静默更新表格方法</li>
<li>新增服务监控菜单</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="#v30">v3.0.0</a><code class="pull-right">2018.10.08</code>
</h5>
</div>
<div id="v30" class="panel-collapse collapse in">
<div id="v30" class="panel-collapse collapse">
<div class="panel-body">
<ol>
<li>升级poi到最新版3.17</li>
@@ -1,10 +1,9 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8">
<head th:include="include :: header"></head>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('登录日志列表')" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
@@ -31,20 +30,23 @@
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="monitor:logininfor:export"><i class="fa fa-download"></i>&nbsp;导出</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-danger btn-del disabled" onclick="$.operate.removeAll()" shiro:hasPermission="monitor:logininfor:remove">
<i class="fa fa-remove"></i> 删除
</a>
<a class="btn btn-danger" onclick="$.operate.clean()" shiro:hasPermission="monitor:logininfor:remove">
<i class="fa fa-trash"></i> 清空
</a>
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="monitor:logininfor:export">
<i class="fa fa-download"></i> 导出
</a>
</div>
<div class="col-sm-12 select-table table-striped">
@@ -53,7 +55,7 @@
</div>
</div>
<div th:include="include :: footer"></div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var datas = [[${@dict.getType('sys_common_status')}]];
var prefix = ctx + "monitor/logininfor";
@@ -67,8 +69,9 @@
sortName: "loginTime",
sortOrder: "desc",
modalName: "登录日志",
search: false,
showExport: false,
escape: true,
showPageGo: true,
rememberSelected: true,
columns: [{
checkbox: true
},
@@ -1,10 +1,9 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8">
<head th:include="include :: header"></head>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('在线用户列表')" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
@@ -26,7 +25,7 @@
</form>
</div>
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-danger btn-del disabled" onclick="javascript:batchForceLogout()" shiro:hasPermission="monitor:online:batchForceLogout">
<i class="fa fa-sign-out"></i> 强退
</a>
@@ -37,7 +36,7 @@
</div>
</div>
</div>
<div th:include="include :: footer"></div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var forceFlag = [[${@permission.hasPermi('monitor:online:forceLogout')}]];
var prefix = ctx + "monitor/online";
@@ -48,10 +47,17 @@
exportUrl: prefix + "/export",
sortName: "lastAccessTime",
sortOrder: "desc",
search: false,
showExport: true,
escape: true,
columns: [{
checkbox: true
},
{
title: "序号",
formatter: function (value, row, index) {
return $.table.serialNumber(index);
}
},
{
field: 'sessionId',
title: '会话编号'
@@ -70,7 +76,7 @@
title: '主机'
},
{
field: 'longinLocation',
field: 'loginLocation',
title: '登录地点'
},
{
@@ -1,8 +1,9 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8">
<head th:include="include :: header"></head>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('操作日志详细')" />
<th:block th:include="include :: jsonview-css" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m-t" id="signupForm">
@@ -28,8 +29,7 @@
</div>
<div class="form-group">
<label class="col-sm-2 control-label">请求参数:</label>
<div class="form-control-static" th:text="${operLog.operParam}">
</div>
<div class="form-control-static"><pre id="operParam"></pre></div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">状态:</label>
@@ -43,6 +43,17 @@
</div>
</form>
</div>
<div th:include="include :: footer"></div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: jsonview-js" />
<script th:inline="javascript">
$(function() {
var json = [[${operLog.operParam}]];
if ($.common.isNotEmpty(json) && json.length < 2000) {
$("#operParam").JSONView(json);
} else {
$("#operParam").text(json);
}
});
</script>
</body>
</html>
@@ -1,10 +1,9 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8">
<head th:include="include :: header"></head>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('操作日志列表')" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
@@ -31,20 +30,23 @@
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="monitor:logininfor:export"><i class="fa fa-download"></i>&nbsp;导出</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
<a class="btn btn-danger btn-del disabled" onclick="$.operate.removeAll()" shiro:hasPermission="monitor:logininfor:remove">
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-danger btn-del disabled" onclick="$.operate.removeAll()" shiro:hasPermission="monitor:operlog:remove">
<i class="fa fa-remove"></i> 删除
</a>
<a class="btn btn-danger" onclick="$.operate.clean()" shiro:hasPermission="monitor:logininfor:remove">
<a class="btn btn-danger" onclick="$.operate.clean()" shiro:hasPermission="monitor:operlog:remove">
<i class="fa fa-trash"></i> 清空
</a>
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="monitor:operlog:export">
<i class="fa fa-download"></i> 导出
</a>
</div>
<div class="col-sm-12 select-table table-striped">
@@ -53,7 +55,7 @@
</div>
</div>
<div th:include="include :: footer"></div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var detailFlag = [[${@permission.hasPermi('monitor:operlog:detail')}]];
var datas = [[${@dict.getType('sys_oper_type')}]];
@@ -69,8 +71,9 @@
sortName: "operTime",
sortOrder: "desc",
modalName: "操作日志",
search: false,
showExport: false,
escape: true,
showPageGo: true,
rememberSelected: true,
columns: [{
checkbox: true
},
@@ -0,0 +1,254 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('服务器监控')" />
</head>
<body class="gray-bg">
<div class="wrapper wrapper-content">
<div class="col-sm-12">
<div class="row">
<div class="col-sm-6">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>CPU</h5>
<div class="ibox-tools">
<a class="collapse-link"><i class="fa fa-chevron-up"></i>
</a>
<a class="close-link"><i class="fa fa-times"></i></a>
</div>
</div>
<div class="ibox-content">
<table class="table table-hover no-margins">
<thead>
<tr>
<th>属性</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>核心数</td>
<td th:text="${server.cpu.cpuNum}">0个</td>
</tr>
<tr>
<td>用户使用率</td>
<td th:text="${server.cpu.used + '%'}">0%</td>
</tr>
<tr>
<td>系统使用率</td>
<td th:text="${server.cpu.sys + '%'}">0%</td>
</tr>
<tr>
<td>当前空闲率</td>
<td th:text="${server.cpu.free + '%'}">0%</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>内存</h5>
<div class="ibox-tools">
<a class="collapse-link"><i class="fa fa-chevron-up"></i></a>
<a class="close-link"><i class="fa fa-times"></i></a>
</div>
</div>
<div class="ibox-content">
<table class="table table-hover no-margins">
<thead>
<tr>
<th>属性</th>
<th>内存</th>
<th>JVM</th>
</tr>
</thead>
<tbody>
<tr>
<td>总内存</td>
<td th:text="${server.mem.total + 'G'}">0GB</td>
<td th:text="${server.jvm.total + 'M'}">0MB</td>
</tr>
<tr>
<td>已用内存</td>
<td th:text="${server.mem.used + 'G'}">0GB</td>
<td th:text="${server.jvm.used + 'M'}">0MB</td>
</tr>
<tr>
<td>剩余内存</td>
<td th:text="${server.mem.free + 'G'}">0GB</td>
<td th:text="${server.jvm.free + 'M'}">0MB</td>
</tr>
<tr>
<td>使用率</td>
<td th:class="${server.mem.usage gt 80} ? 'text-danger'">[[${server.mem.usage}]]%</td>
<td th:class="${server.jvm.usage gt 80} ? 'text-danger'">[[${server.jvm.usage}]]%</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>服务器信息</h5>
<div class="ibox-tools">
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="close-link">
<i class="fa fa-times"></i>
</a>
</div>
</div>
<div class="ibox-content">
<div class="row">
<div class="col-sm-12">
<table class="table table-hover margin bottom">
<tbody>
<tr>
<td>服务器名称</td>
<td th:text="${server.sys.computerName}">RuoYi</td>
<td>操作系统</td>
<td th:text="${server.sys.osName}">Linux</td>
</tr>
<tr>
<td>服务器IP</td>
<td th:text="${server.sys.computerIp}">127.0.0.1</td>
<td>系统架构</td>
<td th:text="${server.sys.osArch}">amd64</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>Java虚拟机信息</h5>
<div class="ibox-tools">
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="close-link">
<i class="fa fa-times"></i>
</a>
</div>
</div>
<div class="ibox-content">
<div class="row">
<div class="col-sm-12">
<table class="table table-hover margin bottom">
<tbody>
<tr>
<td>Java名称</td>
<td th:text="${server.jvm.name}">Java</td>
<td>Java版本</td>
<td th:text="${server.jvm.version}">1.8.0</td>
</tr>
<tr>
<td>启动时间</td>
<td th:text="${server.jvm.startTime}">2018-12-31 00:00:00</td>
<td>运行时长</td>
<td th:text="${server.jvm.runTime}">0天0时0分0秒</td>
</tr>
<tr>
<td colspan="1">安装路径</td>
<td colspan="3" th:text="${server.jvm.home}"></td>
</tr>
<tr>
<td colspan="1">项目路径</td>
<td colspan="3" th:text="${server.sys.userDir}"></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>磁盘状态</h5>
<div class="ibox-tools">
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="close-link">
<i class="fa fa-times"></i>
</a>
</div>
</div>
<div class="ibox-content">
<div class="row">
<div class="col-sm-12">
<table class="table table-hover margin bottom">
<thead>
<tr>
<th>盘符路径</th>
<th>文件系统</th>
<th>盘符类型</th>
<th>总大小</th>
<th>可用大小</th>
<th>已用大小</th>
<th>已用百分比</th>
</tr>
</thead>
<tbody>
<tr th:each="sysFile : ${server.sysFiles}">
<td th:text="${sysFile.dirName}">C:\</td>
<td th:text="${sysFile.sysTypeName}">NTFS</td>
<td th:text="${sysFile.typeName}">local</td>
<td th:text="${sysFile.total}">0GB</td>
<td th:text="${sysFile.free}">0GB</td>
<td th:text="${sysFile.used}">0GB</td>
<td th:class="${sysFile.usage gt 80} ? 'text-danger'">[[${sysFile.usage}]]%</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
<th:block th:include="include :: footer" />
<script>
$(".modal").appendTo("body"), $("[data-toggle=popover]").popover(), $(".collapse-link").click(function() {
var div_ibox = $(this).closest("div.ibox"),
e = $(this).find("i"),
i = div_ibox.find("div.ibox-content");
i.slideToggle(200),
e.toggleClass("fa-chevron-up").toggleClass("fa-chevron-down"),
div_ibox.toggleClass("").toggleClass("border-bottom"),
setTimeout(function() {
div_ibox.resize();
}, 50);
}), $(".close-link").click(function () {
var div_ibox = $(this).closest("div.ibox");
div_ibox.remove()
});
</script>
</html>
@@ -1,26 +1,27 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<meta charset="utf-8">
<head th:include="include :: header"></head>
<head>
<th:block 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" name="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">
<input id="configName" name="configName" class="form-control" type="text" required>
</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">
<input id="configKey" name="configKey" class="form-control" type="text" required>
</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">
<input id="configValue" name="configValue" class="form-control" type="text" required>
</div>
</div>
<div class="form-group">
@@ -40,14 +41,14 @@
</div>
</form>
</div>
<div th:include="include::footer"></div>
<th:block th:include="include :: footer" />
<script type="text/javascript">
var prefix = ctx + "system/config";
$("#form-config-add").validate({
onkeyup: false,
rules: {
configKey: {
required: true,
remote: {
url: prefix + "/checkConfigKeyUnique",
type: "post",
@@ -62,18 +63,13 @@
}
}
},
configName: {
required: true
},
configValue: {
required: true
},
},
messages: {
"configKey": {
remote: "参数键名已经存在"
}
}
},
focusCleanup: true
});
function submitHandler() {
@@ -1,9 +1,9 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8">
<head th:include="include :: header"></head>
<head>
<th:block th:include="include :: header('参数列表')" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
@@ -37,7 +37,7 @@
</form>
</div>
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="system:config:add">
<i class="fa fa-plus"></i> 新增
</a>
@@ -56,7 +56,7 @@
</div>
</div>
</div>
<div th:include="include :: footer"></div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var editFlag = [[${@permission.hasPermi('system:config:edit')}]];
var removeFlag = [[${@permission.hasPermi('system:config:remove')}]];
@@ -73,8 +73,6 @@
sortName: "createTime",
sortOrder: "desc",
modalName: "参数",
search: false,
showExport: false,
columns: [{
checkbox: true
},
@@ -102,6 +100,14 @@
return $.table.selectDictLabel(datas, value);
}
},
{
field: 'remark',
title: '备注',
align: 'center',
formatter: function(value, row, index) {
return $.table.tooltip(value);
}
},
{
field: 'createTime',
title: '创建时间'
@@ -1,7 +1,8 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<meta charset="utf-8">
<head th:include="include :: header"></head>
<head>
<th:block 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" th:object="${config}">
@@ -9,19 +10,19 @@
<div class="form-group">
<label class="col-sm-3 control-label">参数名称:</label>
<div class="col-sm-8">
<input id="configName" name="configName" th:field="*{configName}" class="form-control" type="text">
<input id="configName" name="configName" th:field="*{configName}" class="form-control" type="text" required>
</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:field="*{configKey}" class="form-control" type="text">
<input id="configKey" name="configKey" th:field="*{configKey}" class="form-control" type="text" required>
</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:field="*{configValue}" class="form-control" type="text">
<input id="configValue" name="configValue" th:field="*{configValue}" class="form-control" type="text" required>
</div>
</div>
<div class="form-group">
@@ -41,14 +42,14 @@
</div>
</form>
</div>
<div th:include="include::footer"></div>
<th:block th:include="include :: footer" />
<script type="text/javascript">
var prefix = ctx + "system/config";
$("#form-config-edit").validate({
onkeyup: false,
rules: {
configKey: {
required: true,
remote: {
url: prefix + "/checkConfigKeyUnique",
type: "post",
@@ -66,18 +67,13 @@
}
}
},
configName: {
required: true
},
configValue: {
required: true
},
},
messages: {
"configKey": {
remote: "参数键名已经存在"
}
}
},
focusCleanup: true
});
function submitHandler() {
@@ -1,7 +1,8 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<meta charset="utf-8">
<head th:include="include :: header"></head>
<head>
<th:block 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-dept-add">
@@ -9,19 +10,22 @@
<div class="form-group">
<label class="col-sm-3 control-label ">上级部门:</label>
<div class="col-sm-8">
<input class="form-control" type="text" onclick="selectDeptTree()" id="treeName" readonly="true" th:value="${dept.deptName}"/>
<div class="input-group">
<input class="form-control" type="text" onclick="selectDeptTree()" id="treeName" readonly="true" th:value="${dept.deptName}">
<span class="input-group-addon"><i class="fa fa-search"></i></span>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">部门名称:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="deptName" id="deptName">
<input class="form-control" type="text" name="deptName" id="deptName" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">显示排序:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="orderNum">
<input class="form-control" type="text" name="orderNum" required>
</div>
</div>
<div class="form-group">
@@ -53,14 +57,14 @@
</div>
</form>
</div>
<div th:include="include::footer"></div>
<th:block th:include="include :: footer" />
<script type="text/javascript">
var prefix = ctx + "system/dept";
$("#form-dept-add").validate({
onkeyup: false,
rules:{
deptName:{
required:true,
remote: {
url: prefix + "/checkDeptNameUnique",
type: "post",
@@ -79,7 +83,6 @@
}
},
orderNum:{
required:true,
digits:true
},
email:{
@@ -93,7 +96,8 @@
"deptName": {
remote: "部门已经存在"
}
}
},
focusCleanup: true
});
function submitHandler() {
@@ -107,7 +111,6 @@
var options = {
title: '部门选择',
width: "380",
height: "380",
url: prefix + "/selectDeptTree/" + $("#treeId").val(),
callBack: doSubmit
};
@@ -1,8 +1,8 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8">
<head th:include="include :: header"></head>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('部门列表')" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
@@ -28,11 +28,11 @@
</form>
</div>
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add(100)" shiro:hasPermission="system:dept:add">
<i class="fa fa-plus"></i> 新增
</a>
<a class="btn btn-primary" onclick="$.operate.editTree()" shiro:hasPermission="system:dept:edit">
<a class="btn btn-primary" onclick="$.operate.edit()" shiro:hasPermission="system:dept:edit">
<i class="fa fa-edit"></i> 修改
</a>
<a class="btn btn-info" id="expandAllBtn">
@@ -40,11 +40,11 @@
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table" data-mobile-responsive="true"></table>
<table id="bootstrap-tree-table" data-mobile-responsive="true"></table>
</div>
</div>
</div>
<div th:include="include :: footer"></div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var addFlag = [[${@permission.hasPermi('system:dept:add')}]];
var editFlag = [[${@permission.hasPermi('system:dept:edit')}]];
@@ -54,8 +54,9 @@
$(function() {
var options = {
id: "deptId",
parentId: "parentId",
code: "deptId",
parentCode: "parentId",
uniqueId: "deptId",
url: prefix + "/list",
createUrl: prefix + "/add/{id}",
updateUrl: prefix + "/edit/{id}",
@@ -94,10 +95,10 @@
formatter: function(value, row, index) {
if (row.parentId != 0) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.deptId + '\')"><i class="fa fa-edit">编辑</i></a> ');
actions.push('<a class="btn btn-info btn-xs ' + addFlag + '" href="#" onclick="$.operate.add(\'' + row.deptId + '\')"><i class="fa fa-plus">新增</i></a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="remove(\'' + row.deptId + '\')"><i class="fa fa-remove">删除</i></a>');
return actions.join('');
actions.push('<a class="' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.deptId + '\')"><i class="fa fa-edit"></i>编辑</a>');
actions.push('<a class="' + removeFlag + '" href="#" onclick="$.operate.remove(\'' + row.deptId + '\')"><i class="fa fa-trash"></i>删除</a>');
actions.push('<a class="' + addFlag + '" href="#" onclick="$.operate.add(\'' + row.deptId + '\')"><i class="fa fa-plus"></i>添加下级部门</a>');
return $.table.dropdownToggle(actions.join(''));
} else {
return "";
}
@@ -106,23 +107,6 @@
};
$.treeTable.init(options);
});
function remove(id) {
$.modal.confirm("确定删除该条" + $.table._option.modalName + "信息吗?", function() {
$.ajax({
type : 'post',
url: prefix + "/remove/" + id,
success : function(result) {
if (result.code == web_status.SUCCESS) {
$.modal.msgSuccess(result.msg);
$.treeTable.refresh();
} else {
$.modal.msgError(result.msg);
}
}
});
});
}
</script>
</body>
</html>
@@ -1,7 +1,8 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<meta charset="utf-8">
<head th:include="include :: header"></head>
<head>
<th:block 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-dept-edit" th:object="${dept}">
@@ -10,19 +11,22 @@
<div class="form-group">
<label class="col-sm-3 control-label ">上级部门:</label>
<div class="col-sm-8">
<input class="form-control" type="text" id="treeName" onclick="selectDeptTree()" readonly="true" th:field="*{parentName}"/>
<div class="input-group">
<input class="form-control" type="text" id="treeName" onclick="selectDeptTree()" readonly="true" th:field="*{parentName}">
<span class="input-group-addon"><i class="fa fa-search"></i></span>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">部门名称:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="deptName" th:field="*{deptName}" id="deptName">
<input class="form-control" type="text" name="deptName" th:field="*{deptName}" id="deptName" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">显示排序:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="orderNum" th:field="*{orderNum}">
<input class="form-control" type="text" name="orderNum" th:field="*{orderNum}" required>
</div>
</div>
<div class="form-group">
@@ -54,14 +58,14 @@
</div>
</form>
</div>
<div th:include="include::footer"></div>
<th:block th:include="include :: footer" />
<script type="text/javascript">
var prefix = ctx + "system/dept";
$("#form-dept-edit").validate({
onkeyup: false,
rules:{
deptName:{
required:true,
remote: {
url: prefix + "/checkDeptNameUnique",
type: "post",
@@ -83,7 +87,6 @@
}
},
orderNum:{
required:true,
digits:true
},
email:{
@@ -97,7 +100,8 @@
"deptName": {
remote: "部门已经存在"
}
}
},
focusCleanup: true
});
function submitHandler() {
@@ -108,21 +112,28 @@
/*部门管理-修改-选择部门树*/
function selectDeptTree() {
var options = {
title: '部门选择',
width: "380",
height: "380",
url: prefix + "/selectDeptTree/" + $("#treeId").val(),
callBack: doSubmit
};
$.modal.openOptions(options);
var deptId = $("#treeId").val();
if(deptId > 0) {
var options = {
title: '部门选择',
width: "380",
url: prefix + "/selectDeptTree/" + $("#treeId").val(),
callBack: doSubmit
};
$.modal.openOptions(options);
} else {
$.modal.alertError("父部门不能选择");
}
}
function doSubmit(index, layero){
var body = layer.getChildFrame('body', index);
$("#treeId").val(body.find('#treeId').val());
$("#treeName").val(body.find('#treeName').val());
layer.close(index);
var tree = layero.find("iframe")[0].contentWindow.$._tree;
if ($.tree.notAllowLastLevel(tree)) {
var body = layer.getChildFrame('body', index);
$("#treeId").val(body.find('#treeId').val());
$("#treeName").val(body.find('#treeName').val());
layer.close(index);
}
}
</script>
</body>
@@ -1,11 +1,12 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<meta charset="utf-8">
<head th:include="include :: header"></head>
<link th:href="@{/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css}" rel="stylesheet"/>
<head>
<th:block th:include="include :: header('部门树选择')" />
<th:block th:include="include :: ztree-css" />
</head>
<style>
body{height:auto;font-family: "Microsoft YaHei";}
button{font-family: "SimSun","Helvetica Neue",Helvetica,Arial;}
body{height:auto;font-family: "Microsoft YaHei";}
button{font-family: "SimSun","Helvetica Neue",Helvetica,Arial;}
</style>
<body class="hold-transition box box-main">
<input id="treeId" name="treeId" type="hidden" th:value="${dept.deptId}"/>
@@ -24,8 +25,8 @@ button{font-family: "SimSun","Helvetica Neue",Helvetica,Arial;}
</div>
<div id="tree" class="ztree treeselect"></div>
</div>
<div th:include="include::footer"></div>
<script th:src="@{/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js}"></script>
<th:block th:include="include :: footer" />
<th:block th:include="include :: ztree-js" />
<script th:inline="javascript">
$(function() {
var url = ctx + "system/dept/treeData";
@@ -1,20 +1,21 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<meta charset="utf-8">
<head th:include="include :: header"></head>
<head>
<th:block 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-dict-add">
<div class="form-group">
<label class="col-sm-3 control-label ">字典标签:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="dictLabel" id="dictLabel"/>
<input class="form-control" type="text" name="dictLabel" id="dictLabel" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label ">字典键值:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="dictValue" id="dictValue"/>
<input class="form-control" type="text" name="dictValue" id="dictValue" required>
</div>
</div>
<div class="form-group">
@@ -32,7 +33,7 @@
<div class="form-group">
<label class="col-sm-3 control-label">字典排序:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="dictSort">
<input class="form-control" type="text" name="dictSort" required>
</div>
</div>
<div class="form-group">
@@ -76,23 +77,17 @@
</div>
</form>
</div>
<div th:include="include::footer"></div>
<th:block th:include="include :: footer" />
<script type="text/javascript">
var prefix = ctx + "system/dict/data";
$("#form-dict-add").validate({
rules:{
dictLabel:{
required:true,
},
dictValue:{
required:true,
},
dictSort:{
required:true,
digits:true
},
}
},
focusCleanup: true
});
function submitHandler() {
@@ -1,10 +1,9 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8">
<head th:include="include :: header"></head>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('字典数据列表')" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
@@ -34,8 +33,8 @@
</form>
</div>
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
<a class="btn btn-primary" th:onclick="'javascript:$.operate.add(\''+${dict.dictType}+'\')'" shiro:hasPermission="system:dict:add">
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="add()" shiro:hasPermission="system:dict:add">
<i class="fa fa-plus"></i> 新增
</a>
<a class="btn btn-primary btn-edit disabled" onclick="$.operate.edit()" shiro:hasPermission="system:dict:edit">
@@ -54,8 +53,7 @@
</div>
</div>
</div>
<div th:include="include :: footer"></div>
<script th:src="@{/ajax/libs/select/select2.js}"></script>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var editFlag = [[${@permission.hasPermi('system:dict:edit')}]];
var removeFlag = [[${@permission.hasPermi('system:dict:remove')}]];
@@ -73,8 +71,6 @@
sortName: "createTime",
sortOrder: "desc",
modalName: "数据",
search: false,
showExport: false,
columns: [{
checkbox: true
},
@@ -135,6 +131,12 @@
isAsc: params.order
};
}
/*字典数据-新增字典*/
function add() {
var dictType = $("#dictType option:selected").val();
$.operate.add(dictType);
}
</script>
</body>
</html>
@@ -1,7 +1,8 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<meta charset="utf-8">
<head th:include="include :: header"></head>
<head>
<th:block 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-dict-edit" th:object="${dict}">
@@ -9,13 +10,13 @@
<div class="form-group">
<label class="col-sm-3 control-label ">字典标签:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="dictLabel" id="dictLabel" th:field="*{dictLabel}"/>
<input class="form-control" type="text" name="dictLabel" id="dictLabel" th:field="*{dictLabel}" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label ">字典键值:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="dictValue" id="dictValue" th:field="*{dictValue}"/>
<input class="form-control" type="text" name="dictValue" id="dictValue" th:field="*{dictValue}" required>
</div>
</div>
<div class="form-group">
@@ -33,7 +34,7 @@
<div class="form-group">
<label class="col-sm-3 control-label">字典排序:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="dictSort" th:field="*{dictSort}">
<input class="form-control" type="text" name="dictSort" th:field="*{dictSort}" required>
</div>
</div>
<div class="form-group">
@@ -77,23 +78,17 @@
</div>
</form>
</div>
<div th:include="include::footer"></div>
<th:block th:include="include :: footer" />
<script type="text/javascript">
var prefix = ctx + "system/dict/data";
$("#form-dict-edit").validate({
rules:{
dictLabel:{
required:true,
},
dictValue:{
required:true,
},
dictSort:{
required:true,
digits:true
},
}
},
focusCleanup: true
});
function submitHandler() {
@@ -1,20 +1,21 @@
<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<meta charset="utf-8">
<head th:include="include :: header"></head>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block 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-dict-add">
<div class="form-group">
<label class="col-sm-3 control-label ">字典名称:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="dictName" id="dictName"/>
<input class="form-control" type="text" name="dictName" id="dictName" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">字典类型:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="dictType" id="dictType">
<input class="form-control" type="text" name="dictType" id="dictType" required>
</div>
</div>
<div class="form-group">
@@ -34,17 +35,14 @@
</div>
</form>
</div>
<div th:include="include::footer"></div>
<th:block th:include="include :: footer" />
<script type="text/javascript">
var prefix = ctx + "system/dict";
$("#form-dict-add").validate({
onkeyup: false,
rules:{
dictName:{
required:true,
},
dictType:{
required:true,
minlength: 5,
remote: {
url: prefix + "/checkDictTypeUnique",
@@ -65,7 +63,8 @@
"dictType": {
remote: "该字典类型已经存在"
}
}
},
focusCleanup: true
});
function submitHandler() {
@@ -1,7 +1,8 @@
<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<meta charset="utf-8">
<head th:include="include :: header"></head>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block 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-dict-edit" th:object="${dict}">
@@ -9,13 +10,13 @@
<div class="form-group">
<label class="col-sm-3 control-label ">字典名称:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="dictName" id="dictName" th:field="*{dictName}"/>
<input class="form-control" type="text" name="dictName" id="dictName" th:field="*{dictName}" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">字典类型:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="dictType" id="dictType" th:field="*{dictType}">
<input class="form-control" type="text" name="dictType" id="dictType" th:field="*{dictType}" required>
</div>
</div>
<div class="form-group">
@@ -35,17 +36,14 @@
</div>
</form>
</div>
<div th:include="include::footer"></div>
<th:block th:include="include :: footer" />
<script type="text/javascript">
var prefix = ctx + "system/dict";
$("#form-dict-edit").validate({
onkeyup: false,
rules:{
dictName:{
required:true,
},
dictType:{
required:true,
minlength: 5,
remote: {
url: prefix + "/checkDictTypeUnique",
@@ -69,7 +67,8 @@
"dictType": {
remote: "该字典类型已经存在"
}
}
},
focusCleanup: true
});
function submitHandler() {
@@ -1,10 +1,9 @@
<!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>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('字典类型列表')" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
@@ -38,7 +37,7 @@
</form>
</div>
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="system:dict:add">
<i class="fa fa-plus"></i> 新增
</a>
@@ -58,7 +57,7 @@
</div>
</div>
</div>
<div th:include="include :: footer"></div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var editFlag = [[${@permission.hasPermi('system:dict:edit')}]];
var listFlag = [[${@permission.hasPermi('system:dict:list')}]];
@@ -76,8 +75,6 @@
sortName: "createTime",
sortOrder: "desc",
modalName: "类型",
search: false,
showExport: false,
columns: [{
checkbox: true
},
@@ -1,7 +1,8 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<meta charset="utf-8">
<head th:include="include :: header"></head>
<head>
<th:block 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-menu-add">
@@ -9,7 +10,10 @@
<div class="form-group">
<label class="col-sm-3 control-label ">上级菜单:</label>
<div class="col-sm-8">
<input class="form-control" type="text" onclick="selectMenuTree()" id="treeName" readonly="true" th:value="${menu.menuName}"/>
<div class="input-group">
<input class="form-control" type="text" onclick="selectMenuTree()" id="treeName" readonly="true" th:value="${menu.menuName}">
<span class="input-group-addon"><i class="fa fa-search"></i></span>
</div>
</div>
</div>
<div class="form-group">
@@ -23,7 +27,7 @@
<div class="form-group">
<label class="col-sm-3 control-label">菜单名称:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="menuName" id="menuName">
<input class="form-control" type="text" name="menuName" id="menuName" required>
</div>
</div>
<div class="form-group">
@@ -41,7 +45,7 @@
<div class="form-group">
<label class="col-sm-3 control-label">显示排序:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="orderNum">
<input class="form-control" type="text" name="orderNum" required>
</div>
</div>
<div class="form-group">
@@ -66,17 +70,17 @@
</div>
</form>
</div>
<div th:include="include::footer"></div>
<th:block th:include="include :: footer" />
<script>
var prefix = ctx + "system/menu";
$("#form-menu-add").validate({
onkeyup: false,
rules:{
menuType:{
required:true,
},
menuName:{
required:true,
remote: {
url: prefix + "/checkMenuNameUnique",
type: "post",
@@ -95,7 +99,6 @@
}
},
orderNum:{
required:true,
digits:true
},
},
@@ -103,7 +106,8 @@
"menuName": {
remote: "菜单已经存在"
}
}
},
focusCleanup: true
});
function submitHandler() {
@@ -151,7 +155,6 @@
var options = {
title: '菜单选择',
width: "380",
height: "380",
url: url,
callBack: doSubmit
};

Some files were not shown because too many files have changed in this diff Show More