173 Commits
Author SHA1 Message Date
RuoYi 7c48bc3184 若依 4.3.1 2020-07-04 22:40:47 +08:00
RuoYi 91986f13f8 国家信息安全漏洞(请务必保持cipherKey密钥唯一性) 2020-07-04 20:52:27 +08:00
RuoYi 7728ad9eb4 检查字符支持小数点&降级改成异常提醒 2020-07-04 11:36:59 +08:00
RuoYi 868aed4079 openOptions函数中加入自定义maxmin属性 2020-06-29 14:55:27 +08:00
RuoYi 9627ba9e1d 支持openOptions方法最大化 2020-06-28 17:25:14 +08:00
RuoYi e0e305c423 验证码清除,防止多次使用。 2020-06-28 16:34:23 +08:00
若依andGitee ed4280379d !169 修改验证码使用后仍可用的问题
Merge pull request !169 from goodhal/master
2020-06-28 16:05:20 +08:00
RuoYi 233089b3e6 支持openOptions方法多个按钮回调 2020-06-28 11:44:12 +08:00
RuoYi bb0e7bd563 右键页签操作实现与菜单联动 2020-06-28 09:49:41 +08:00
tys 7bca4fcbc4 关闭顶部tab页时,左侧菜单定位到当前显示页 2020-06-27 22:19:14 +08:00
RuoYi 1b7a735f9c 升级shiro到最新版1.5.3 阻止权限绕过漏洞 2020-06-26 09:53:10 +08:00
RuoYi 829dfafdaa 新增isLinkage支持页签与菜单联动 2020-06-24 22:23:42 +08:00
RuoYi 5a59670124 修改代码生成导入表结构出现异常页面不提醒问题 2020-06-24 18:12:26 +08:00
RuoYi 2499685a31 如果加载头像时发生了错误,则显示一个默认头像 2020-06-24 10:39:02 +08:00
RuoYi a3bb603382 Excel支持dictType读取字符串组内容 2020-06-23 21:05:38 +08:00
RuoYi 9ad3cc0b9a Excel导出支持字典类型 2020-06-23 20:59:23 +08:00
RuoYi 7e259cd101 若依 4.3 2020-06-22 08:37:35 +08:00
RuoYi 3846329c82 代码生成主子表序号调整 2020-06-21 23:04:09 +08:00
RuoYi 326fe6a63f Excel支持readConverterExp读取字符串组内容 2020-06-21 11:19:15 +08:00
RuoYi 5321200c6e 修复jquery表单序列化时复选框未选中不会序列化到对象中去问题 2020-06-21 10:08:46 +08:00
RuoYi 82d913c7de 代码生成显示类型支持复选框 2020-06-20 17:52:05 +08:00
RuoYi 0df61a6336 新增回显数据字典(字符串数组) 2020-06-20 17:22:04 +08:00
RuoYi 68a4e6de5f 创建用户不允许选择系统管理员角色 2020-06-20 15:03:39 +08:00
RuoYi 84e447e170 用户信息添加输入框组图标&鼠标按下显示密码 2020-06-20 11:15:45 +08:00
RuoYi 4fcfe890c9 主子表生成模板多余逗号问题 2020-06-20 11:15:29 +08:00
RuoYi a3b51553fb 输入框组图标元素修改成圆角 2020-06-20 09:55:27 +08:00
RuoYi 7dc982aded 修复浏览器手动缩放比例后菜单无法自适应问题 2020-06-19 19:29:54 +08:00
Sxile 07c3a67b70 添加缺少的@ Override 2020-06-19 18:09:09 +08:00
Sxile 40333c6b16 添加{}使代码更容易理解 2020-06-19 18:02:35 +08:00
Sxile 942e609d36 常量接口修改为常量类 2020-06-19 16:00:42 +08:00
RuoYi 9f248e97f6 前端表单样式修改成圆角 2020-06-19 12:16:03 +08:00
RuoYi 9c763dceab ajaxSuccess判断修正 2020-06-18 13:33:54 +08:00
RuoYi 92d7c18879 HttpUtils.sendPost()方法,参数无需拼接参数到url 2020-06-18 10:36:24 +08:00
RuoYi e4919f1a62 HTML过滤器不替换&实体 2020-06-18 10:16:21 +08:00
RuoYi 052ab8866d 代码生成模板支持主子表 2020-06-17 09:43:15 +08:00
RuoYi 338138a0bc 代码生成浮点型改用BigDecimal 2020-06-17 08:56:06 +08:00
RuoYi fedb39c9ad 主子表示例添加序号&防止insertRow数据被初始化 2020-06-16 13:11:28 +08:00
RuoYi 128b35c2f6 新增示例(主子表提交) 2020-06-15 14:03:29 +08:00
RuoYi 57fed227f0 表单构建优化 2020-06-12 12:31:56 +08:00
RuoYi c3b9aa0daf 修复表单构建单选和多选框渲染问题 2020-06-10 20:27:02 +08:00
goodhal 690a9a6281 修改验证码在使用后仍可用的问题 2020-06-10 17:27:43 +08:00
RuoYi e91adcc28d 添加是否开启swagger配置 2020-06-08 12:20:28 +08:00
RuoYi 83981138e0 代码生成模板调整,字段为String并且必填则加空串条件 2020-06-07 15:54:17 +08:00
RuoYi c29d766cd8 字典数据查询列表根据dictSort升序排序 2020-06-04 14:26:40 +08:00
RuoYi 3ede0313f2 首页菜单显示调整 2020-06-04 13:49:28 +08:00
RuoYi e7248da61a 修复树表对imageView和tooltip方法无效问题。 2020-06-02 19:40:43 +08:00
RuoYi 05638550d5 添加cxselect参数手册地址 2020-06-02 11:53:32 +08:00
RuoYi 004e5b8af6 新增多级联动下拉示例 2020-06-02 11:06:01 +08:00
RuoYi 0544581ab9 升级fastjson到最新版1.2.70 修复高危安全漏洞 2020-06-01 10:14:10 +08:00
RuoYi 6b22fb86cb 示例demo页面清除html链接,防止点击后跳转出现404 2020-05-30 22:04:30 +08:00
RuoYi 6d5830a235 新增表格列参数(是否列选项可见ignore) 2020-05-29 17:11:32 +08:00
RuoYi 6aed57056c 修复部分情况节点不展开问题。 2020-05-29 11:29:06 +08:00
RuoYi 3f17e54cf9 README 2020-05-29 09:23:46 +08:00
RuoYi aea691537b 在线用户强退方法合并 2020-05-28 09:37:25 +08:00
若依andGitee 8c88957b69 !167 SysUserOnlineController疑问和建议
Merge pull request !167 from JoseK43326/master
2020-05-28 09:33:16 +08:00
JoseK43326 bb9d504d40 用户在线监测 部分修改建议 2020-05-27 20:50:46 +08:00
RuoYi 30b3909fc4 修复selectColumns方法获取子对象数据无效问题。 2020-05-23 21:43:24 +08:00
RuoYi f72d399f9a 修复selectColumns方法获取子对象数据无效问题。 2020-05-23 09:34:58 +08:00
RuoYi cb6ca423f8 README 2020-05-19 11:43:10 +08:00
RuoYi 1cb1743445 修改数据源类型优先级,先根据方法,再根据类 2020-05-19 11:05:24 +08:00
若依andGitee f24da2fc98 !161 fix 类上数据源类型获取不到问题,修改优先级,先根据方法,再根据类
Merge pull request !161 from sdvdxl/master
2020-05-19 09:59:31 +08:00
杜龙少 0b85032ca8 Merge remote-tracking branch 'ruoyi-orgin/master' 2020-05-18 09:08:11 +08:00
RuoYi 9c54c5c37d 缺少 @Override 2020-05-16 17:16:44 +08:00
RuoYi 59e2d4a2df 修改上级部门(选择项排除本身和下级) 2020-05-15 15:30:08 +08:00
RuoYi dc6fe4c985 修复关闭标签页后刷新还是上次地址问题 2020-05-14 17:14:23 +08:00
RuoYi a8eeb652b2 通用http发送方法增加参数 contentType 编码类型 2020-05-14 14:36:22 +08:00
RuoYi 1af0fef99e 更换IP地址查询接口 2020-05-13 21:16:15 +08:00
RuoYi 7190516a27 淘宝IP接口不稳定,默认关闭。 2020-05-13 18:58:10 +08:00
RuoYi 7e34c2339f 新增表格参数(是否启用显示卡片视图cardView) 2020-05-07 14:07:18 +08:00
RuoYi 12f1ff894f 修复选择菜单后刷新页面,菜单箭头显示不对问题 2020-05-07 13:55:43 +08:00
RuoYi 8a9d298ffc 添加校验部门包含未停用的子部门 2020-05-07 12:15:04 +08:00
RuoYi 2c8365b605 针对性屏蔽Enter 2020-04-30 15:53:17 +08:00
RuoYi 27f40d0357 取消回车自动提交表单 2020-04-28 22:26:08 +08:00
RuoYi cb32d5cc90 新增表格参数(是否显示全屏按钮showFullscreen) 2020-04-23 14:24:49 +08:00
RuoYi 14bb9f3cba 'A','I','BUTTON' 标签忽略clickToSelect事件,防止点击操作按钮时选中。 2020-04-23 11:53:56 +08:00
RuoYi 0140de4546 新增表格参数(是否启用分页条无限循环的功能paginationLoop) 2020-04-23 11:10:18 +08:00
RuoYi e476fe6f5d Long类型比较相等问题调整 2020-04-21 19:50:36 +08:00
RuoYi 897ce6e3c2 表格添加显示/隐藏所有列方法 showAllColumns/hideAllColumns 2020-04-21 13:29:21 +08:00
杜龙少 6d115e602e fix 类上数据源类型获取不到问题,修改优先级,先根据方法,再根据类 2020-04-19 11:00:35 +08:00
RuoYi 2bba8c7b73 新增表格参数(是否显示表头showHeader) 2020-04-17 18:46:21 +08:00
RuoYi 1dbc11f708 邮箱显示截取部分字符串,防止低分辨率错位 2020-04-17 18:35:48 +08:00
RuoYi f9fbdb291b 优化查询条件label为时间对齐问题 2020-04-14 20:38:19 +08:00
若依andGitee a3b3332fdd !160 fix bug: 字典排序值=0时无效
Merge pull request !160 from Errors0/fix0414
2020-04-14 20:31:06 +08:00
200cc 384b58ca11 fix bug: 字典排序值=0时无效 2020-04-14 15:35:16 +08:00
RuoYi 52423edb24 升级fastjson到最新版1.2.68 修复安全加固 2020-04-13 11:55:25 +08:00
RuoYi fed849beed list*.vm模板优化 2020-04-08 12:02:26 +08:00
RuoYi fe296cc8ba 删除无用注解 2020-04-08 11:14:16 +08:00
Sxile 6c94fe8b82 删除无用注解 2020-04-08 11:02:06 +08:00
RuoYi febd69e2b3 添加data数据加载属性及示例 2020-04-01 11:11:12 +08:00
RuoYi 55512bdbec 代码生成列属性根据sort排序 2020-04-01 10:38:57 +08:00
RuoYi 22d1e5882a 气泡弹出框特效移至通用js 2020-03-31 11:53:49 +08:00
RuoYi 2f24ab1692 图片预览事件属性修正 2020-03-30 18:54:19 +08:00
RuoYi 025731a04c @Override 注解缺失 2020-03-30 18:40:48 +08:00
RuoYi 28c861c6df 修复冻结列排序样式无效问题 2020-03-30 18:23:41 +08:00
RuoYi dcbc77b403 修复更多操作部分浏览器不兼容情况 2020-03-30 17:14:43 +08:00
RuoYi 1e6b78c349 升级Bootstrap版本到v3.3.7 2020-03-30 16:46:48 +08:00
RuoYi 4f57c28f2f 修复context-path的情况下个人中心刷新导致样式问题 2020-03-25 18:04:37 +08:00
RuoYi 2a718ba4d6 驱动移至admin模块 2020-03-25 14:55:32 +08:00
RuoYi ca9f87bff4 去掉多余的依赖 2020-03-25 12:14:24 +08:00
RuoYi e517741f99 全屏editFull打开适配表树 2020-03-25 12:03:51 +08:00
RuoYi d066539616 若依 4.2 2020-03-23 09:02:04 +08:00
RuoYi 5c736e96c9 页面滚动显示返回顶部按钮 2020-03-20 14:34:26 +08:00
RuoYi 0307599eed 移动端定时任务&角色管理更多操作可点击 2020-03-20 13:46:43 +08:00
RuoYi 55da596a80 定时任务&角色管理添加更多操作按钮 2020-03-20 13:21:30 +08:00
RuoYi 6fa8c991b8 移动端点击左侧目录不进行菜单切换 2020-03-19 13:48:15 +08:00
RuoYi 51f98aa0cb 代码生成细节优化 2020-03-18 23:05:26 +08:00
RuoYi 07042ac9b1 iframe框架页会话过期弹出超时提示 2020-03-18 22:57:03 +08:00
RuoYi 3df553c488 移动端登录不显示左侧菜单 2020-03-18 18:32:45 +08:00
RuoYi 5426ba9d5e 首页logo固定,不随菜单滚动 2020-03-18 16:06:22 +08:00
RuoYi 6b9ee80ca4 任务分组字典翻译(调度日志详细) 2020-03-18 15:37:47 +08:00
RuoYi 05b5b314ee 字典管理添加缓存读取 2020-03-18 15:03:52 +08:00
RuoYi f8491c36e2 字典数据列表标签显示样式 2020-03-18 12:45:53 +08:00
RuoYi 06751acbf9 参数管理支持缓存操作 2020-03-18 12:28:36 +08:00
RuoYi 567ab47ae9 日期控件清空结束时间设置开始默认值为2099-12-31 2020-03-14 15:34:33 +08:00
RuoYi 82f8dadbae 表格树添加获取数据后响应回调处理 2020-03-14 11:47:36 +08:00
RuoYi ca6a4b2ecf 批量替换表前缀调整 2020-03-13 21:56:29 +08:00
RuoYi 9247e004d0 调整包顺序 2020-02-28 21:37:56 +08:00
若依andGitee e1e494de33 !153 支持表格导入模板的弹窗表单加入其它输入控件
Merge pull request !153 from ฅ(̳••̳)ฅ大步/master
2020-02-28 21:34:09 +08:00
ฅ(̳••̳)ฅ大步andGitee 3988b12e72 update ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js.
支持导入模板的表单可以添加除了file、updateSupport之外的输入控件。
2020-02-26 14:30:29 +08:00
RuoYi c6bf712de4 登录页面默认模式设置 2020-02-17 17:28:16 +08:00
RuoYi 18e0a2a27d 重置刷新表格树 2020-02-17 15:50:11 +08:00
RuoYi 6ce34b1790 新增支持导出数据字段排序 2020-02-17 12:16:13 +08:00
RuoYi b5678994da 修改代码生成部分细节问题 2020-02-10 14:59:31 +08:00
RuoYi 2aa98dcbe1 新增表格参数(是否单选checkbox) 2020-02-05 18:16:52 +08:00
RuoYi 96d0bd2581 README 2020-02-05 18:05:08 +08:00
RuoYi f826a79633 防止db字段名为一个字母导致出现生成异常 2020-02-02 15:41:56 +08:00
RuoYi c958d6ec83 添加新群号 2020-01-31 14:44:31 +08:00
RuoYi 5cb3430791 druid未授权不允许访问 2020-01-11 19:33:08 +08:00
RuoYi d93e43cc2c 表格树父节点兼容0,'0','',null 2020-01-03 17:31:12 +08:00
RuoYi 47f007ba97 添加新群号 2020-01-03 10:58:25 +08:00
RuoYi f96328ea6b 调整表格树兼容父节点判断 2020-01-02 19:29:55 +08:00
RuoYi 2d55917f2e 必填的项增加星号 2019-12-31 16:34:24 +08:00
RuoYi 1c6e5cf665 修复select2不显示校验错误信息 2019-12-25 16:59:12 +08:00
RuoYi 9d316c44d2 HTML过滤器不替换双引号为",防止json格式无效 2019-12-20 17:27:17 +08:00
RuoYi 2f8422278a 添加HTML过滤器,用于去除XSS漏洞隐患 2019-12-19 17:04:32 +08:00
RuoYi 98dd156396 修复多数据源下enabled=false导致读取不到bean导致异常问题 2019-12-19 16:10:10 +08:00
RuoYi b65263fdd7 修复翻页记住选择项数据问题 2019-12-19 14:21:31 +08:00
RuoYi 21992c1be7 用户邮箱长度限制20 2019-12-16 11:44:20 +08:00
RuoYi d80c1d2a73 修改错误页面返回主页出现嵌套问题 2019-12-10 17:20:43 +08:00
RuoYi 55978c7f15 表格浮动提示单双引号转义 2019-12-10 09:55:23 +08:00
RuoYi b2012e699b 阿里云服务器89元/年,双12年末特惠,爆款产品限时1折 2019-12-09 11:32:53 +08:00
RuoYi 382d1868be 阿里云服务器89元/年,双12年末特惠,爆款产品限时1折 2019-12-09 11:25:49 +08:00
RuoYi 82df046e59 添加新群号 2019-12-04 11:44:26 +08:00
RuoYi 4f116a6a77 更新前后端分离版本链接 2019-12-03 18:05:28 +08:00
RuoYi 77d3db4cb0 代码生成防止缓存内的数据没有及时写入到zip文件 2019-12-02 15:02:31 +08:00
RuoYi 1155bcb22d 支持配置四级菜单 2019-11-27 11:05:10 +08:00
RuoYi 208c4a8417 升级shiro到最新版1.4.2 阻止rememberMe漏洞攻击 2019-11-26 15:33:42 +08:00
RuoYi 62a0018041 升级summernote到最新版本v0.8.12 2019-11-25 12:24:49 +08:00
RuoYi f276a83956 侧边栏添加一套深蓝色主题 2019-11-22 09:41:04 +08:00
RuoYi 28b8f3e36f Excel注解dateFormat属性为字符串时间时格式处理 2019-11-21 16:33:34 +08:00
若依andGitee 56a6e940c2 !146 浏览代码时间字符串处理
Merge pull request !146 from 厚积薄发/master
2019-11-21 16:31:37 +08:00
厚积薄发andGitee 868edbc88c 时间字符串处理 2019-11-21 10:15:24 +08:00
RuoYi b05a539970 支持mode配置history(表示去掉地址栏的#) 2019-11-21 09:59:45 +08:00
若依andGitee 2c48aedda7 !144 修复War部署无法正常shutdown,ehcache内存泄漏
Merge pull request !144 from wayneliquan/master
2019-11-20 18:52:32 +08:00
zhanliquan 87b8d032ca 修复War部署无法正常shutdown,ehcache内存泄漏
Signed-off-by: zhanliquan <zhanliquanit@foxmail.com>
2019-11-20 18:07:54 +08:00
zhanliquan 080237cabf 修复War部署无法正常shutdown,ehcache内存泄漏
Signed-off-by: zhanliquan <zhanliquanit@foxmail.com>
2019-11-20 16:54:22 +08:00
RuoYi 005418e065 修复代码生成短字段无法识别问题 2019-11-20 10:44:02 +08:00
RuoYi b32111f1ab 修复war包部署情况下404、500等页面样式丢失问题 2019-11-18 12:01:38 +08:00
RuoYi 25f51371f5 代码生成模板增加导出功能日志记录 2019-11-16 11:58:07 +08:00
RuoYi 14bad9bf20 2019年度最受欢迎中国开源软件评选
请给若依/RuoYi 投票,谢谢。
2019-11-15 09:55:32 +08:00
若依andGitee da2d0ba32f !143 serviceImpl模版 update方法判断bug修正
Merge pull request !143 from shenbururen/master
2019-11-13 14:55:27 +08:00
shenbururenandGitee 0b34c3e910 serviceImpl模版 update方法判断bug修正
应该判断updateTime字段。
2019-11-13 14:03:26 +08:00
RuoYi 1557a858ea 代码生成唯一编号调整为tableId 2019-11-12 15:12:13 +08:00
RuoYi 9a0098cca1 代码生成查询时忽略大小写&翻页记住选中&表注释未填写也允许导入 2019-11-12 15:00:47 +08:00
RuoYi fe8c142cd6 修改select2选择数量限制提示语 2019-11-08 10:47:07 +08:00
RuoYi 5346af9ab0 全局配置类修改为注解,防止多环境配置下读取问题。 2019-11-07 17:33:28 +08:00
RuoYi de1979212a 修复多表格情况下,firstLoad只对第一个表格生效 2019-11-07 15:22:42 +08:00
RuoYi aa0f33b5e7 处理打包出现警告问题 2019-11-06 17:04:25 +08:00
RuoYi ecb77e2be4 默认主题样式,防止网速慢情况下出现空白 2019-11-06 14:28:23 +08:00
RuoYi db9d1a7720 修复文件上传多级目录识别问题 2019-11-01 09:31:26 +08:00
RuoYi 6ad6f90968 解码url,防止中文导致页面不能加载问题 2019-10-31 15:25:23 +08:00
RuoYi b1b0542f72 右键Tab页刷新事件重复请求问题 2019-10-31 11:32:45 +08:00
RuoYi 7e749c25c6 阿里云服务器86元/年,双11冰点底价,错过再等1年 2019-10-24 09:37:19 +08:00
217 changed files with 13723 additions and 9184 deletions
+9 -12
View File
@@ -4,13 +4,9 @@
性别男,若依是给还没有出生女儿取的名字(寓意:你若不离不弃,我必生死相依)
若依参考后台模板。有需要可自行到群内下载
> 如需单应用,请移步 [RuoYi-fast](https://gitee.com/y_project/RuoYi-fast) `(保持同步更新)`,如需其他版本,请移步 [项目扩展](http://doc.ruoyi.vip/ruoyi/document/xmkz.html) `(不定时更新)`
> 阿里云通用云产品1888优惠券 [点我领取](https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=brki8iof)&nbsp;&nbsp;&nbsp;&nbsp;腾讯云通用云产品2860优惠券 [点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console)&nbsp;&nbsp;`(仅限新用户)`
> 阿里云Hi拼购 限量爆款 低至199元/年 [点我进入](https://www.aliyun.com/acts/hi-group-buying?userCode=brki8iof)&nbsp;&nbsp;`(仅限新用户)`
* 感谢 [hplus](https://gitee.com/hplus_admin/hplus) 后台主题 UI 框架
* 前后端分离版本,请移步[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue),微服务版本,请移步[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud)
* 阿里云优惠券:[点我进入](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link),腾讯云优惠券:[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console)&nbsp;&nbsp;
## 内置功能
@@ -31,12 +27,13 @@
15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
16. 在线构建器:拖动表单元素生成相应的HTML代码。
17. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
## 在线体验
> admin/admin123
> 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
- admin/admin123
- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
演示地址:http://ruoyi.vip
文档地址:http://doc.ruoyi.vip
## 演示图
@@ -80,11 +77,11 @@
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/bed2b98a44e7ae820c2885329e711965c28.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/5f3d39a141f21f81b90536f391b8408f1fa.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-6d73c2140ce694e3de4c05035fdc1868d4c.png"/></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/已满-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) [![加入QQ群](https://img.shields.io/badge/已满-1366522-blue.svg)](https://jq.qq.com/?_wv=1027&k=58cPoHA) [![加入QQ群](https://img.shields.io/badge/已满-1382251-blue.svg)](https://jq.qq.com/?_wv=1027&k=5Ofd4Pb) [![加入QQ群](https://img.shields.io/badge/已满-1145125-blue.svg)](https://jq.qq.com/?_wv=1027&k=5yugASz) [![加入QQ群](https://img.shields.io/badge/86752435-blue.svg)](https://jq.qq.com/?_wv=1027&k=5Rf3d2P) 点击按钮入群。
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) [![加入QQ群](https://img.shields.io/badge/已满-1366522-blue.svg)](https://jq.qq.com/?_wv=1027&k=58cPoHA) [![加入QQ群](https://img.shields.io/badge/已满-1382251-blue.svg)](https://jq.qq.com/?_wv=1027&k=5Ofd4Pb) [![加入QQ群](https://img.shields.io/badge/已满-1145125-blue.svg)](https://jq.qq.com/?_wv=1027&k=5yugASz) [![加入QQ群](https://img.shields.io/badge/已满-86752435-blue.svg)](https://jq.qq.com/?_wv=1027&k=5Rf3d2P) [![加入QQ群](https://img.shields.io/badge/已满-134072510-blue.svg)](https://jq.qq.com/?_wv=1027&k=5ZIjaeP) [![加入QQ群](https://img.shields.io/badge/已满-210336300-blue.svg)](https://jq.qq.com/?_wv=1027&k=5CJw1jY) [![加入QQ群](https://img.shields.io/badge/339522636-blue.svg)](https://jq.qq.com/?_wv=1027&k=5omzbKc)
+5 -4
View File
@@ -6,18 +6,18 @@
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi</artifactId>
<version>4.1.0</version>
<version>4.3.1</version>
<name>ruoyi</name>
<url>http://www.ruoyi.vip</url>
<description>若依管理系统</description>
<properties>
<ruoyi.version>4.1.0</ruoyi.version>
<ruoyi.version>4.3.1</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.1</shiro.version>
<shiro.version>1.5.3</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.14</druid.version>
@@ -25,7 +25,7 @@
<kaptcha.version>2.3.2</kaptcha.version>
<swagger.version>2.9.2</swagger.version>
<pagehelper.boot.version>1.2.5</pagehelper.boot.version>
<fastjson.version>1.2.60</fastjson.version>
<fastjson.version>1.2.70</fastjson.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>
@@ -228,6 +228,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
+10 -3
View File
@@ -5,7 +5,7 @@
<parent>
<artifactId>ruoyi</artifactId>
<groupId>com.ruoyi</groupId>
<version>4.1.0</version>
<version>4.3.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
@@ -54,6 +54,12 @@
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
<!-- Mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 核心模块-->
<dependency>
@@ -80,6 +86,7 @@
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.1.RELEASE</version>
<configuration>
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
</configuration>
@@ -97,11 +104,11 @@
<version>3.0.0</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<warName>${artifactId}</warName>
<warName>${project.artifactId}</warName>
</configuration>
</plugin>
</plugins>
<finalName>${artifactId}</finalName>
<finalName>${project.artifactId}</finalName>
</build>
</project>
File diff suppressed because one or more lines are too long
@@ -21,6 +21,7 @@ import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.exception.BusinessException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.web.controller.demo.domain.CustomerModel;
import com.ruoyi.web.controller.demo.domain.UserOperateModel;
/**
@@ -153,6 +154,17 @@ public class DemoOperateController extends BaseController
return AjaxResult.success(users.put(userId, user));
}
/**
* 新增保存主子表信息
*/
@PostMapping("/customer/add")
@ResponseBody
public AjaxResult addSave(CustomerModel customerModel)
{
System.out.println(customerModel.toString());
return AjaxResult.success();
}
/**
* 修改用户
*/
@@ -6,6 +6,7 @@ import java.util.Collections;
import java.util.Date;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -140,6 +141,16 @@ public class DemoTableController extends BaseController
return prefix + "/button";
}
/**
* 直接加载表格数据
*/
@GetMapping("/data")
public String data(ModelMap mmap)
{
mmap.put("users", users);
return prefix + "/data";
}
/**
* 表格冻结列
*/
@@ -166,7 +177,7 @@ public class DemoTableController extends BaseController
{
return prefix + "/detail";
}
/**
* 表格父子视图
*/
@@ -212,6 +223,15 @@ public class DemoTableController extends BaseController
return prefix + "/editable";
}
/**
* 主子表提交
*/
@GetMapping("/subdata")
public String subdata()
{
return prefix + "/subdata";
}
/**
* 表格其他操作
*/
@@ -0,0 +1,116 @@
package com.ruoyi.web.controller.demo.domain;
import java.util.List;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 客户测试信息
*
* @author ruoyi
*/
public class CustomerModel
{
/**
* 客户姓名
*/
private String name;
/**
* 客户手机
*/
private String phonenumber;
/**
* 客户性别
*/
private String sex;
/**
* 客户生日
*/
private String birthday;
/**
* 客户描述
*/
private String remark;
/**
* 商品信息
*/
private List<GoodsModel> goods;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getPhonenumber()
{
return phonenumber;
}
public void setPhonenumber(String phonenumber)
{
this.phonenumber = phonenumber;
}
public String getSex()
{
return sex;
}
public void setSex(String sex)
{
this.sex = sex;
}
public String getBirthday()
{
return birthday;
}
public void setBirthday(String birthday)
{
this.birthday = birthday;
}
public String getRemark()
{
return remark;
}
public void setRemark(String remark)
{
this.remark = remark;
}
public List<GoodsModel> getGoods()
{
return goods;
}
public void setGoods(List<GoodsModel> goods)
{
this.goods = goods;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("name", getName())
.append("phonenumber", getPhonenumber())
.append("sex", getSex())
.append("birthday", getBirthday())
.append("goods", getGoods())
.append("remark", getRemark())
.toString();
}
}
@@ -0,0 +1,82 @@
package com.ruoyi.web.controller.demo.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 商品测试信息
*
* @author ruoyi
*/
public class GoodsModel
{
/**
* 商品名称
*/
private String name;
/**
* 商品重量
*/
private Integer weight;
/**
* 商品价格
*/
private Double price;
/**
* 商品种类
*/
private String type;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public Integer getWeight()
{
return weight;
}
public void setWeight(Integer weight)
{
this.weight = weight;
}
public Double getPrice()
{
return price;
}
public void setPrice(Double price)
{
this.price = price;
}
public String getType()
{
return type;
}
public void setType(String type)
{
this.type = type;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("name", getName())
.append("weight", getWeight())
.append("price", getPrice())
.append("type", getType())
.toString();
}
}
@@ -135,11 +135,13 @@ public class UserOperateModel extends BaseEntity
this.status = status;
}
@Override
public Date getCreateTime()
{
return createTime;
}
@Override
public void setCreateTime(Date createTime)
{
this.createTime = createTime;
@@ -1,18 +1,19 @@
package com.ruoyi.web.controller.monitor;
import java.util.List;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
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.core.text.Convert;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.enums.OnlineStatus;
import com.ruoyi.framework.shiro.session.OnlineSession;
@@ -55,13 +56,13 @@ public class SysUserOnlineController extends BaseController
return getDataTable(list);
}
@RequiresPermissions("monitor:online:batchForceLogout")
@RequiresPermissions(value = { "monitor:online:batchForceLogout", "monitor:online:forceLogout" }, logical = Logical.OR)
@Log(title = "在线用户", businessType = BusinessType.FORCE)
@PostMapping("/batchForceLogout")
@ResponseBody
public AjaxResult batchForceLogout(@RequestParam("ids[]") String[] ids)
public AjaxResult batchForceLogout(String ids)
{
for (String sessionId : ids)
for (String sessionId : Convert.toStrArray(ids))
{
SysUserOnline online = userOnlineService.selectOnlineById(sessionId);
if (online == null)
@@ -84,31 +85,4 @@ public class SysUserOnlineController extends BaseController
}
return success();
}
@RequiresPermissions("monitor:online:forceLogout")
@Log(title = "在线用户", businessType = BusinessType.FORCE)
@PostMapping("/forceLogout")
@ResponseBody
public AjaxResult forceLogout(String sessionId)
{
SysUserOnline online = userOnlineService.selectOnlineById(sessionId);
if (sessionId.equals(ShiroUtils.getSessionId()))
{
return error("当前登陆用户无法强退");
}
if (online == null)
{
return error("用户已下线");
}
OnlineSession onlineSession = (OnlineSession) onlineSessionDAO.readSession(online.getSessionId());
if (onlineSession == null)
{
return error("用户已下线");
}
onlineSession.setStatus(OnlineStatus.off_line);
onlineSessionDAO.update(onlineSession);
online.setStatus(OnlineStatus.off_line);
userOnlineService.saveOnline(online);
return success();
}
}
@@ -132,6 +132,19 @@ public class SysConfigController extends BaseController
return toAjax(configService.deleteConfigByIds(ids));
}
/**
* 清空缓存
*/
@RequiresPermissions("system:config:remove")
@Log(title = "参数管理", businessType = BusinessType.CLEAN)
@GetMapping("/clearCache")
@ResponseBody
public AjaxResult clearCache()
{
configService.clearCache();
return success();
}
/**
* 校验参数键名
*/
@@ -112,6 +112,11 @@ public class SysDeptController extends BaseController
{
return error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
}
else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus())
&& deptService.selectNormalChildrenDeptById(dept.getDeptId()) > 0)
{
return AjaxResult.error("该部门包含未停用的子部门!");
}
dept.setUpdateBy(ShiroUtils.getLoginName());
return toAjax(deptService.updateDept(dept));
}
@@ -148,11 +153,16 @@ public class SysDeptController extends BaseController
/**
* 选择部门树
*
* @param deptId 部门ID
* @param excludeId 排除ID
*/
@GetMapping("/selectDeptTree/{deptId}")
public String selectDeptTree(@PathVariable("deptId") Long deptId, ModelMap mmap)
@GetMapping(value = { "/selectDeptTree/{deptId}", "/selectDeptTree/{deptId}/{excludeId}" })
public String selectDeptTree(@PathVariable("deptId") Long deptId,
@PathVariable(value = "excludeId", required = false) String excludeId, ModelMap mmap)
{
mmap.put("dept", deptService.selectDeptById(deptId));
mmap.put("excludeId", excludeId);
return prefix + "/tree";
}
@@ -167,6 +177,19 @@ public class SysDeptController extends BaseController
return ztrees;
}
/**
* 加载部门列表树(排除下级)
*/
@GetMapping("/treeData/{excludeId}")
@ResponseBody
public List<Ztree> treeDataExcludeChild(@PathVariable(value = "excludeId", required = false) Long excludeId)
{
SysDept dept = new SysDept();
dept.setDeptId(excludeId);
List<Ztree> ztrees = deptService.selectDeptTreeExcludeChild(dept);
return ztrees;
}
/**
* 加载角色部门(数据权限)列表树
*/
@@ -125,14 +125,20 @@ public class SysDictTypeController extends BaseController
@ResponseBody
public AjaxResult remove(String ids)
{
try
{
return toAjax(dictTypeService.deleteDictTypeByIds(ids));
}
catch (Exception e)
{
return error(e.getMessage());
}
return toAjax(dictTypeService.deleteDictTypeByIds(ids));
}
/**
* 清空缓存
*/
@RequiresPermissions("system:dict:remove")
@Log(title = "字典类型", businessType = BusinessType.CLEAN)
@GetMapping("/clearCache")
@ResponseBody
public AjaxResult clearCache()
{
dictTypeService.clearCache();
return success();
}
/**
@@ -10,6 +10,7 @@ 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.ISysConfigService;
import com.ruoyi.system.service.ISysMenuService;
/**
@@ -23,6 +24,9 @@ public class SysIndexController extends BaseController
@Autowired
private ISysMenuService menuService;
@Autowired
private ISysConfigService configService;
// 系统首页
@GetMapping("/index")
public String index(ModelMap mmap)
@@ -33,6 +37,8 @@ public class SysIndexController extends BaseController
List<SysMenu> menus = menuService.selectMenusByUser(user);
mmap.put("menus", menus);
mmap.put("user", user);
mmap.put("sideTheme", configService.selectConfigByKey("sys.index.sideTheme"));
mmap.put("skinName", configService.selectConfigByKey("sys.index.skinName"));
mmap.put("copyrightYear", Global.getCopyrightYear());
mmap.put("demoEnabled", Global.isDemoEnabled());
return "index";
@@ -0,0 +1,46 @@
package com.ruoyi.web.controller.system;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
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.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.framework.shiro.service.SysRegisterService;
import com.ruoyi.system.domain.SysUser;
import com.ruoyi.system.service.ISysConfigService;
/**
* 注册验证
*
* @author ruoyi
*/
@Controller
public class SysRegisterController extends BaseController
{
@Autowired
private SysRegisterService registerService;
@Autowired
private ISysConfigService configService;
@GetMapping("/register")
public String register()
{
return "register";
}
@PostMapping("/register")
@ResponseBody
public AjaxResult ajaxRegister(SysUser user)
{
if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
{
return error("当前系统没有开启注册功能!");
}
String msg = registerService.register(user);
return StringUtils.isEmpty(msg) ? success() : error(msg);
}
}
@@ -1,6 +1,7 @@
package com.ruoyi.web.controller.system;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -21,7 +22,9 @@ import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.shiro.service.SysPasswordService;
import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.system.domain.SysRole;
import com.ruoyi.system.domain.SysUser;
import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.service.ISysPostService;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService;
@@ -105,7 +108,7 @@ public class SysUserController extends BaseController
@GetMapping("/add")
public String add(ModelMap mmap)
{
mmap.put("roles", roleService.selectRoleAll());
mmap.put("roles", roleService.selectRoleAll().stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
mmap.put("posts", postService.selectPostAll());
return prefix + "/add";
}
@@ -143,8 +146,9 @@ public class SysUserController extends BaseController
@GetMapping("/edit/{userId}")
public String edit(@PathVariable("userId") Long userId, ModelMap mmap)
{
List<SysRole> roles = roleService.selectRolesByUserId(userId);
mmap.put("user", userService.selectUserById(userId));
mmap.put("roles", roleService.selectRolesByUserId(userId));
mmap.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
mmap.put("posts", postService.selectPostsByUserId(userId));
return prefix + "/edit";
}
@@ -191,7 +195,7 @@ public class SysUserController extends BaseController
user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
if (userService.resetUserPwd(user) > 0)
{
if (ShiroUtils.getUserId() == user.getUserId())
if (ShiroUtils.getUserId().longValue() == user.getUserId().longValue())
{
ShiroUtils.setSysUser(userService.selectUserById(user.getUserId()));
}
@@ -200,6 +204,33 @@ public class SysUserController extends BaseController
return error();
}
/**
* 进入授权角色页
*/
@GetMapping("/authRole/{userId}")
public String authRole(@PathVariable("userId") Long userId, ModelMap mmap)
{
SysUser user = userService.selectUserById(userId);
// 获取用户所属的角色列表
List<SysUserRole> userRoles = userService.selectUserRoleByUserId(userId);
mmap.put("user", user);
mmap.put("userRoles", userRoles);
return prefix + "/authRole";
}
/**
* 用户授权角色
*/
@RequiresPermissions("system:user:add")
@Log(title = "用户管理", businessType = BusinessType.GRANT)
@PostMapping("/authRole/insertAuthRole")
@ResponseBody
public AjaxResult insertAuthRole(Long userId, Long[] roleIds)
{
userService.insertUserAuth(userId, roleIds);
return success();
}
@RequiresPermissions("system:user:remove")
@Log(title = "用户管理", businessType = BusinessType.DELETE)
@PostMapping("/remove")
@@ -1,5 +1,6 @@
package com.ruoyi.web.core.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.ruoyi.common.config.Global;
@@ -22,6 +23,10 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
@EnableSwagger2
public class SwaggerConfig
{
/** 是否开启swagger */
@Value("${swagger.enabled}")
private boolean enabled;
/**
* 创建API
*/
@@ -29,6 +34,8 @@ public class SwaggerConfig
public Docket createRestApi()
{
return new Docket(DocumentationType.SWAGGER_2)
// 是否启用Swagger
.enable(enabled)
// 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
.apiInfo(apiInfo())
// 设置哪些接口暴露给Swagger展示
@@ -3,7 +3,7 @@ ruoyi:
# 名称
name: RuoYi
# 版本
version: 4.1.0
version: 4.3.1
# 版权年份
copyrightYear: 2019
# 实例演示开关
@@ -11,7 +11,7 @@ ruoyi:
# 文件路径 示例( Windows配置D:/ruoyi/uploadPathLinux配置 /home/ruoyi/uploadPath
profile: D:/ruoyi/uploadPath
# 获取ip地址开关
addressEnabled: true
addressEnabled: false
# 开发环境配置
server:
@@ -108,6 +108,8 @@ shiro:
httpOnly: true
# 设置Cookie的过期时间,天为单位
maxAge: 30
# 设置密钥,务必保持唯一性(生成方式,直接拷贝到main运行即可)KeyGenerator keygen = KeyGenerator.getInstance("AES"); SecretKey deskey = keygen.generateKey(); System.out.println(Base64.encodeToString(deskey.getEncoded()));
cipherKey: zSyK5Kp6PZAAjlT+eeNMlg==
session:
# Session超时时间,-1代表永不过期(默认30分钟)
expireTime: 30
@@ -128,3 +130,8 @@ xss:
excludes: /system/notice/*
# 匹配链接
urlPatterns: /system/*,/monitor/*,/tool/*
# Swagger配置
swagger:
# 是否开启swagger
enabled: true
@@ -41,7 +41,31 @@
timeToIdleSeconds="0"
statistics="true">
</cache>
<!-- 系统缓存 -->
<cache name="sys-cache"
maxEntriesLocalHeap="1000"
eternal="true"
overflowToDisk="true"
statistics="true">
</cache>
<!-- 系统参数缓存 -->
<cache name="sys-config"
maxEntriesLocalHeap="1000"
eternal="true"
overflowToDisk="true"
statistics="true">
</cache>
<!-- 系统字典缓存 -->
<cache name="sys-dict"
maxEntriesLocalHeap="1000"
eternal="true"
overflowToDisk="true"
statistics="true">
</cache>
<!-- 系统会话缓存 -->
<cache name="shiro-activeSessionCache"
maxElementsInMemory="10000"
@@ -52,6 +76,6 @@
diskPersistent="true"
diskExpiryThreadIntervalSeconds="600">
</cache>
</ehcache>
@@ -5,10 +5,10 @@ PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
<configuration>
<settings>
<setting name="cacheEnabled" value="true" /> <!-- 全局映射器启用缓存 -->
<setting name="useGeneratedKeys" value="true" /> <!-- 允许 JDBC 支持自动生成主键 -->
<setting name="defaultExecutorType" value="REUSE" /> <!-- 配置默认的执行器 -->
<setting name="logImpl" value="SLF4J" /> <!-- 指定 MyBatis 所用日志的具体实现 -->
<setting name="cacheEnabled" value="true" /> <!-- 全局映射器启用缓存 -->
<setting name="useGeneratedKeys" value="true" /> <!-- 允许 JDBC 支持自动生成主键 -->
<setting name="defaultExecutorType" value="REUSE" /> <!-- 配置默认的执行器 -->
<setting name="logImpl" value="SLF4J" /> <!-- 指定 MyBatis 所用日志的具体实现 -->
<!-- <setting name="mapUnderscoreToCamelCase" value="true"/> 驼峰式命名 -->
</settings>
File diff suppressed because one or more lines are too long
@@ -243,8 +243,33 @@
$(".left-fixed-table-columns input[name=btSelectAll]").prop('checked', checkAll);
$('.fixed-table-body input[name=btSelectItem]').closest('tr').removeClass('selected');
});
$("#" + table.options.id).off('click', '.fixed-table-body').on('click', '.th-inner', function (event) {
$.each(that.$fixedHeader.find('th'), function (i, th) {
$(th).find('.sortable').removeClass('desc asc').addClass('both');
});
});
//// events
// events
this.$fixedHeader.off('click', '.th-inner').on('click', '.th-inner', function (event) {
var target = $(this);
var $this = event.type === "keypress" ? $(event.currentTarget) : $(event.currentTarget).parent(), $this_ = that.$header.find('th').eq($this.index());
var sortOrder = "";
if (table.options.sortName === $this.data('field')) {
sortOrder = table.options.sortOrder === 'asc' ? 'desc' : 'asc';
} else {
sortOrder = $this.data('order') === 'asc' ? 'desc' : 'asc';
}
table.options.sortOrder = sortOrder;
var sortName = $this.data('sortName') ? $this.data('sortName') : $this.data('field');
if (target.parent().data().sortable) {
$.each(that.$fixedHeader.find('th'), function (i, th) {
$(th).find('.sortable').removeClass('desc asc').addClass(($(th).data('field') === sortName || $(th).data('sortName') === sortName) ? sortOrder : 'both');
});
}
});
this.$tableBody.on('scroll', function () {
that.$fixedBody.find('table').css('top', -$(this).scrollTop());
});
@@ -29,7 +29,7 @@
$.extend($.fn.bootstrapTable.locales, {
formatExport: function () {
return 'Export data';
return '导出';
}
});
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales);
@@ -167,6 +167,7 @@
success: function(data, textStatus, jqXHR) {
data = calculateObjectValue(options, options.responseHandler, [data], data);
renderTable(data);
calculateObjectValue(options, options.onLoadSuccess, [data], data);
},
error: function(xhr, textStatus) {
var _errorMsg = '<tr><td colspan="' + options.columns.length + '"><div style="display: block;text-align: center;">' + xhr.responseText + '</div></td></tr>'
@@ -241,19 +242,26 @@
// 缓存并格式化数据
var formatData = function(data) {
var _root = options.rootIdValue ? options.rootIdValue : null;
var firstCode = data[0][options.parentCode];
// 父节点属性列表
var parentCodes = [];
var rootFlag = false;
$.each(data, function(index, item) {
if($.inArray(item[options.parentCode], parentCodes) == -1){
parentCodes.push(item[options.parentCode]);
}
});
$.each(data, function(index, item) {
// 添加一个默认属性,用来判断当前节点有没有被显示
item.isShow = false;
// 这里兼容几种常见Root节点写法
// 默认的几种判断
// 顶级节点校验判断,兼容0,'0','',null
var _defaultRootFlag = item[options.parentCode] == '0' ||
item[options.parentCode] == 0 ||
item[options.parentCode] == null ||
item[options.parentCode] == firstCode ||
item[options.parentCode] == '';
item[options.parentCode] == 0 ||
item[options.parentCode] == null ||
item[options.parentCode] == '' ||
$.inArray(item[options.code], parentCodes) > 0 && !rootFlag;
if (!item[options.parentCode] || (_root ? (item[options.parentCode] == options.rootIdValue) : _defaultRootFlag)) {
if (!target.data_list["_root_"]) {
rootFlag = true;
if (!target.data_list["_root_"]) {
target.data_list["_root_"] = [];
}
if (!target.data_obj["id_" + item[options.code]]) {
@@ -731,6 +739,9 @@
expanderCollapsedClass: 'glyphicon glyphicon-chevron-right', // 缩起的按钮的图标
responseHandler: function(res) {
return false;
},
onLoadSuccess: function(res) {
return false;
}
};
})(jQuery);
@@ -0,0 +1,406 @@
/*!
* jQuery cxSelect
* @name jquery.cxselect.js
* @version 1.4.2
* @date 2017-09-26
* @author ciaoca
* @email ciaoca@gmail.com
* @site https://github.com/ciaoca/cxSelect
* @license Released under the MIT license
*/
(function(factory) {
if (typeof define === 'function' && define.amd) {
define(['jquery'], factory);
} else {
factory(window.jQuery || window.Zepto || window.$);
};
}(function($) {
var cxSelect = function() {
var self = this;
var dom, settings, callback;
// 分配参数
for (var i = 0, l = arguments.length; i < l; i++) {
if (cxSelect.isJquery(arguments[i]) || cxSelect.isZepto(arguments[i])) {
dom = arguments[i];
} else if (cxSelect.isElement(arguments[i])) {
dom = $(arguments[i]);
} else if (typeof arguments[i] === 'function') {
callback = arguments[i];
} else if (typeof arguments[i] === 'object') {
settings = arguments[i];
};
};
var api = new cxSelect.init(dom, settings);
if (typeof callback === 'function') {
callback(api);
};
return api;
};
cxSelect.isElement = function(o){
if (o && (typeof HTMLElement === 'function' || typeof HTMLElement === 'object') && o instanceof HTMLElement) {
return true;
} else {
return (o && o.nodeType && o.nodeType === 1) ? true : false;
};
};
cxSelect.isJquery = function(o){
return (o && o.length && (typeof jQuery === 'function' || typeof jQuery === 'object') && o instanceof jQuery) ? true : false;
};
cxSelect.isZepto = function(o){
return (o && o.length && (typeof Zepto === 'function' || typeof Zepto === 'object') && Zepto.zepto.isZ(o)) ? true : false;
};
cxSelect.getIndex = function(n, required) {
return required ? n : n - 1;
};
cxSelect.getData = function(data, space) {
if (typeof space === 'string' && space.length) {
space = space.split('.');
for (var i = 0, l = space.length; i < l; i++) {
data = data[space[i]];
};
};
return data;
};
cxSelect.init = function(dom, settings) {
var self = this;
if (!cxSelect.isJquery(dom) && !cxSelect.isZepto(dom)) {return};
var theSelect = {
dom: {
box: dom
}
};
self.attach = cxSelect.attach.bind(theSelect);
self.detach = cxSelect.detach.bind(theSelect);
self.setOptions = cxSelect.setOptions.bind(theSelect);
self.clear = cxSelect.clear.bind(theSelect);
theSelect.changeEvent = function() {
cxSelect.selectChange.call(theSelect, this.className);
};
theSelect.settings = $.extend({}, $.cxSelect.defaults, settings, {
url: theSelect.dom.box.data('url'),
emptyStyle: theSelect.dom.box.data('emptyStyle'),
required: theSelect.dom.box.data('required'),
firstTitle: theSelect.dom.box.data('firstTitle'),
firstValue: theSelect.dom.box.data('firstValue'),
jsonSpace: theSelect.dom.box.data('jsonSpace'),
jsonName: theSelect.dom.box.data('jsonName'),
jsonValue: theSelect.dom.box.data('jsonValue'),
jsonSub: theSelect.dom.box.data('jsonSub')
});
var _dataSelects = theSelect.dom.box.data('selects');
if (typeof _dataSelects === 'string' && _dataSelects.length) {
theSelect.settings.selects = _dataSelects.split(',');
};
self.setOptions();
self.attach();
// 使用独立接口获取数据
if (!theSelect.settings.url && !theSelect.settings.data) {
cxSelect.start.apply(theSelect);
// 设置自定义数据
} else if ($.isArray(theSelect.settings.data)) {
cxSelect.start.call(theSelect, theSelect.settings.data);
// 设置 URL,通过 Ajax 获取数据
} else if (typeof theSelect.settings.url === 'string' && theSelect.settings.url.length) {
$.getJSON(theSelect.settings.url, function(json) {
cxSelect.start.call(theSelect, json);
});
};
};
// 设置参数
cxSelect.setOptions = function(opts) {
var self = this;
if (opts) {
$.extend(self.settings, opts);
};
// 初次或重设选择器组
if (!$.isArray(self.selectArray) || !self.selectArray.length || (opts && opts.selects)) {
self.selectArray = [];
if ($.isArray(self.settings.selects) && self.settings.selects.length) {
var _tempSelect;
for (var i = 0, l = self.settings.selects.length; i < l; i++) {
_tempSelect = self.dom.box.find('select.' + self.settings.selects[i]);
if (!_tempSelect || !_tempSelect.length) {break};
self.selectArray.push(_tempSelect);
};
};
};
if (opts) {
if (!$.isArray(opts.data) && typeof opts.url === 'string' && opts.url.length) {
$.getJSON(self.settings.url, function(json) {
cxSelect.start.call(self, json);
});
} else {
cxSelect.start.call(self, opts.data);
};
};
};
// 绑定
cxSelect.attach = function() {
var self = this;
if (!self.attachStatus) {
self.dom.box.on('change', 'select', self.changeEvent);
};
if (typeof self.attachStatus === 'boolean') {
cxSelect.start.call(self);
};
self.attachStatus = true;
};
// 移除绑定
cxSelect.detach = function() {
var self = this;
self.dom.box.off('change', 'select', self.changeEvent);
self.attachStatus = false;
};
// 清空选项
cxSelect.clear = function(index) {
var self = this;
var _style = {
display: '',
visibility: ''
};
index = isNaN(index) ? 0 : index;
// 清空后面的 select
for (var i = index, l = self.selectArray.length; i < l; i++) {
self.selectArray[i].empty().prop('disabled', true);
if (self.settings.emptyStyle === 'none') {
_style.display = 'none';
} else if (self.settings.emptyStyle === 'hidden') {
_style.visibility = 'hidden';
};
self.selectArray[i].css(_style);
};
};
cxSelect.start = function(data) {
var self = this;
if ($.isArray(data)) {
self.settings.data = cxSelect.getData(data, self.settings.jsonSpace);
};
if (!self.selectArray.length) {return};
// 保存默认值
for (var i = 0, l = self.selectArray.length; i < l; i++) {
if (typeof self.selectArray[i].attr('data-value') !== 'string' && self.selectArray[i][0].options.length) {
self.selectArray[i].attr('data-value', self.selectArray[i].val());
};
};
if (self.settings.data || (typeof self.selectArray[0].data('url') === 'string' && self.selectArray[0].data('url').length)) {
cxSelect.getOptionData.call(self, 0);
} else if (self.selectArray[0][0].options.length && typeof self.selectArray[0].attr('data-value') === 'string' && self.selectArray[0].attr('data-value').length) {
self.selectArray[0].val(self.selectArray[0].attr('data-value'));
cxSelect.getOptionData.call(self, 1);
} else {
self.selectArray[0].prop('disabled', false).css({
'display': '',
'visibility': ''
});
};
};
// 获取选项数据
cxSelect.getOptionData = function(index) {
var self = this;
if (typeof index !== 'number' || isNaN(index) || index < 0 || index >= self.selectArray.length) {return};
var _indexPrev = index - 1;
var _select = self.selectArray[index];
var _selectData;
var _valueIndex;
var _dataUrl = _select.data('url');
var _jsonSpace = typeof _select.data('jsonSpace') === 'undefined' ? self.settings.jsonSpace : _select.data('jsonSpace');
var _query = {};
var _queryName;
var _selectName;
var _selectValue;
cxSelect.clear.call(self, index);
// 使用独立接口
if (typeof _dataUrl === 'string' && _dataUrl.length) {
if (index > 0) {
for (var i = 0, j = 1; i < index; i++, j++) {
_queryName = self.selectArray[j].data('queryName');
_selectName = self.selectArray[i].attr('name');
_selectValue = self.selectArray[i].val();
if (typeof _queryName === 'string' && _queryName.length) {
_query[_queryName] = _selectValue;
} else if (typeof _selectName === 'string' && _selectName.length) {
_query[_selectName] = _selectValue;
};
};
};
$.getJSON(_dataUrl, _query, function(json) {
_selectData = cxSelect.getData(json, _jsonSpace);
cxSelect.buildOption.call(self, index, _selectData);
});
// 使用整合数据
} else if (self.settings.data && typeof self.settings.data === 'object') {
_selectData = self.settings.data;
for (var i = 0; i < index; i++) {
_valueIndex = cxSelect.getIndex(self.selectArray[i][0].selectedIndex, typeof self.selectArray[i].data('required') === 'boolean' ? self.selectArray[i].data('required') : self.settings.required);
if (typeof _selectData[_valueIndex] === 'object' && $.isArray(_selectData[_valueIndex][self.settings.jsonSub]) && _selectData[_valueIndex][self.settings.jsonSub].length) {
_selectData = _selectData[_valueIndex][self.settings.jsonSub];
} else {
_selectData = null;
break;
};
};
cxSelect.buildOption.call(self, index, _selectData);
};
};
// 构建选项列表
cxSelect.buildOption = function(index, data) {
var self = this;
var _select = self.selectArray[index];
var _required = typeof _select.data('required') === 'boolean' ? _select.data('required') : self.settings.required;
var _firstTitle = typeof _select.data('firstTitle') === 'undefined' ? self.settings.firstTitle : _select.data('firstTitle');
var _firstValue = typeof _select.data('firstValue') === 'undefined' ? self.settings.firstValue : _select.data('firstValue');
var _jsonName = typeof _select.data('jsonName') === 'undefined' ? self.settings.jsonName : _select.data('jsonName');
var _jsonValue = typeof _select.data('jsonValue') === 'undefined' ? self.settings.jsonValue : _select.data('jsonValue');
if (!$.isArray(data)) {return};
var _html = !_required ? '<option value="' + String(_firstValue) + '">' + String(_firstTitle) + '</option>' : '';
// 区分标题、值的数据
if (typeof _jsonName === 'string' && _jsonName.length) {
// 无值字段时使用标题作为值
if (typeof _jsonValue !== 'string' || !_jsonValue.length) {
_jsonValue = _jsonName;
};
for (var i = 0, l = data.length; i < l; i++) {
_html += '<option value="' + String(data[i][_jsonValue]) + '">' + String(data[i][_jsonName]) + '</option>';
};
// 数组即为值的数据
} else {
for (var i = 0, l = data.length; i < l; i++) {
_html += '<option value="' + String(data[i]) + '">' + String(data[i]) + '</option>';
};
};
_select.html(_html).prop('disabled', false).css({
'display': '',
'visibility': ''
});
// 初次加载设置默认值
if (typeof _select.attr('data-value') === 'string') {
_select.val(String(_select.attr('data-value'))).removeAttr('data-value');
if (_select[0].selectedIndex < 0) {
_select[0].options[0].selected = true;
};
};
if (_required || _select[0].selectedIndex > 0) {
_select.trigger('change');
};
};
// 改变选择时的处理
cxSelect.selectChange = function(name) {
var self = this;
if (typeof name !== 'string' || !name.length) {return};
var index;
name = name.replace(/\s+/g, ',');
name = ',' + name + ',';
// 获取当前 select 位置
for (var i = 0, l = self.selectArray.length; i < l; i++) {
if (name.indexOf(',' + self.settings.selects[i] + ',') > -1) {
index = i;
break;
};
};
if (typeof index === 'number' && index > -1) {
index += 1;
cxSelect.getOptionData.call(self, index);
};
};
$.cxSelect = function() {
return cxSelect.apply(this, arguments);
};
// 默认值
$.cxSelect.defaults = {
selects: [], // 下拉选框组
url: null, // 列表数据文件路径(URL)或数组数据
data: null, // 自定义数据
emptyStyle: null, // 无数据状态显示方式
required: false, // 是否为必选
firstTitle: '请选择', // 第一个选项的标题
firstValue: '', // 第一个选项的值
jsonSpace: '', // 数据命名空间
jsonName: 'n', // 数据标题字段名称
jsonValue: '', // 数据值字段名称
jsonSub: 's' // 子集数据字段名称
};
$.fn.cxSelect = function(settings, callback) {
this.each(function(i) {
$.cxSelect(this, settings, callback);
});
return this;
};
}));
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -4614,7 +4614,7 @@ S2.define('select2/i18n/en',[],function () {
return '载入更多结果…';
},
maximumSelected: function (args) {
var message = '最多只能选择' + args.maximum + '个项';
var message = '最多只能' + args.maximum + '个项';
if (args.maximum != 1) {
message += 's';
File diff suppressed because one or more lines are too long
@@ -5778,7 +5778,7 @@ td.visible-lg {
display: table-cell !important;
}
}
.hidden-xs {
.summernote .hidden-xs {
display: block !important;
}
tr.hidden-xs {
@@ -1,155 +1,155 @@
(function($) {
$.extend($.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);
(function($) {
$.extend($.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);
@@ -1,3 +0,0 @@
/*! Summernote v0.8.11 | (c) 2013- Alan Hong and other contributors | MIT license */
!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
File diff suppressed because one or more lines are too long
@@ -144,4 +144,18 @@ body.signin {
font-weight: normal; /*改变了rememberme的字体*/
margin-bottom: 0;
text-align: left;
}
.form-control, .form-control:focus, .has-error .form-control:focus, .has-success .form-control:focus, .has-warning .form-control:focus, .navbar-collapse, .navbar-form, .navbar-form-custom .form-control:focus, .navbar-form-custom .form-control:hover, .open .btn.dropdown-toggle, .panel, .popover, .progress, .progress-bar {
box-shadow: none;
}
.form-control{
border-radius: 1px!important;
padding: 6px 12px!important;
height: 34px!important;
}
.form-control:focus{
border-color: #1ab394 !important;
}
+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}.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}
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}.form-control,.form-control:focus,.has-error .form-control:focus,.has-success .form-control:focus,.has-warning .form-control:focus,.navbar-collapse,.navbar-form,.navbar-form-custom .form-control:focus,.navbar-form-custom .form-control:hover,.open .btn.dropdown-toggle,.panel,.popover,.progress,.progress-bar{box-shadow:none}.form-control{border-radius:1px!important;padding:6px 12px!important;height:34px!important}.form-control:focus{border-color:#1ab394!important}
@@ -5,7 +5,7 @@
*
*/
/** 蓝色主题 skin-blue **/
.skin-blue .navbar {
.navbar, .skin-blue .navbar {
background-color: #3c8dbc
}
@@ -103,11 +103,6 @@
border-left: none;
}
.skin-blue .nav>li>.treeview-menu {
margin: 0 1px;
background: #2c3b41
}
.skin-blue .sidebar a {
color: #b8c7ce
}
@@ -116,15 +111,6 @@
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;
@@ -292,11 +278,6 @@
border-left: none;
}
.skin-green .nav>li>.treeview-menu {
margin: 0 1px;
background: #2c3b41
}
.skin-green .sidebar a {
color: #b8c7ce
}
@@ -305,15 +286,6 @@
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;
@@ -457,11 +429,6 @@
border-bottom: 1px solid #e5e5e5;
}
.skin-red .nav>li>.treeview-menu {
margin: 0 1px;
background: #2c3b41
}
.skin-red .sidebar a {
color: #b8c7ce
}
@@ -470,15 +437,6 @@
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;
@@ -622,11 +580,6 @@
border-bottom: 1px solid #e5e5e5;
}
.skin-yellow .nav>li>.treeview-menu {
margin: 0 1px;
background: #2c3b41
}
.skin-yellow .sidebar a {
color: #b8c7ce
}
@@ -635,15 +588,6 @@
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;
@@ -787,11 +731,6 @@
border-bottom: 1px solid #e5e5e5;
}
.skin-purple .nav>li>.treeview-menu {
margin: 0 1px;
background: #2c3b41
}
.skin-purple .sidebar a {
color: #b8c7ce
}
@@ -800,15 +739,6 @@
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;
@@ -855,7 +785,7 @@
* NAME - .theme-dark/theme-light
*
*/
/** 深主题 .theme-dark **/
/** 深主题 .theme-dark **/
.theme-dark .user-panel>.info>p, .theme-dark .user-panel>.info, .theme-dark .user-panel>.info>a{
color: #fff
}
@@ -961,4 +891,94 @@
.fixed-sidebar.theme-light.mini-navbar .nav li:hover>.nav-second-level {
background-color: #f9fafc;
}
/** 深蓝主题 theme-light **/
/**
.skin-blue.theme-blue .logo, .skin-white.theme-blue .logo {
background-color: rgba(15,41,80,1) !important;
color: #fff;
}
**/
.theme-blue .user-panel>.info>p, .theme-blue .user-panel>.info, .theme-blue .user-panel>.info>a{
color: #a3b1cc
}
.theme-blue .nav>li.active{
background-color: rgba(15,41,80,1);
}
.theme-blue .navbar-static-side {
background-color: rgba(15,41,80,1);
box-shadow: 2px 0 2px 0 rgba(29,35,41,.05);
}
.theme-blue .user-panel {
background-color: rgba(15,41,80,1);
}
.theme-blue .navbar-default .nav>li>a {
color: #a3b1cc;
}
.theme-blue.skin-blue .navbar-default .nav>li.active>a {
color: #1890ff;
}
.theme-blue.skin-blue .navbar-default .nav>li.selected>a,
.theme-blue.skin-blue .navbar-default .nav>li.selected>a:focus {
background-color: #1890ff;
}
.theme-blue.skin-green .navbar-default .nav>li.active>a {
color: #52c41a;
}
.theme-blue.skin-green .navbar-default .nav>li.selected>a,
.theme-blue.skin-green .navbar-default .nav>li.selected>a:focus {
background-color: #52c41a;
color: rgba(255,255,255,1);
}
.theme-blue.skin-purple .navbar-default .nav>li.active>a {
color: rgb(114, 46, 209);
}
.theme-blue.skin-purple .navbar-default .nav>li.selected>a,
.theme-blue.skin-purple .navbar-default .nav>li.selected>a:focus {
background-color: #722ed1;
color: rgba(255,255,255,1);
}
.theme-blue.skin-red .navbar-default .nav>li.active>a {
color: rgb(245, 34, 45);
}
.theme-blue.skin-red .navbar-default .nav>li.selected>a,
.theme-blue.skin-red .navbar-default .nav>li.selected>a:focus {
background-color: #f5222d;
color: rgba(255,255,255,1);
}
.theme-blue.skin-yellow .navbar-default .nav>li.active>a {
color: rgb(250, 173, 20);
}
.theme-blue.skin-yellow .navbar-default .nav>li.selected>a,
.theme-blue.skin-yellow .navbar-default .nav>li.selected>a:focus {
background-color: #faad14;
color: rgba(255,255,255,1);
}
.theme-blue .navbar-default .nav>li>a:hover,
.theme-blue .navbar-default .nav>li>a:focus {
background-color: rgba(15,41,80,1);
box-shadow: 2px 0 2px 0 rgba(29,35,41,.05);
}
.fixed-sidebar.theme-blue.mini-navbar .nav li:hover>a> span.nav-label {
background-color: rgba(15,41,80,1);
}
.fixed-sidebar.theme-blue.mini-navbar .nav li:hover>.nav-second-level {
background-color: rgba(15,41,80,1);
}
@@ -763,15 +763,15 @@ body.canvas-menu.mini-navbar nav.navbar-static-side {
}
.btn-default {
background-color: #c2c2c2;
border-color: #c2c2c2;
color: #FFFFFF;
background-color: #f4f4f4;
border-color: #ddd;
color: #444;
}
.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
background-color: #bababa;
border-color: #bababa;
color: #FFFFFF;
background-color: #e7e7e7;
border-color: #e7e7e7;
color: #444;
}
.btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
@@ -865,7 +865,7 @@ body.canvas-menu.mini-navbar nav.navbar-static-side {
color: #cacaca;
}
.form-control, .form-control:focus, .has-error .form-control:focus, .has-success .form-control:focus, .has-warning .form-control:focus, .navbar-collapse, .navbar-form, .navbar-form-custom .form-control:focus, .navbar-form-custom .form-control:hover, .open .btn.dropdown-toggle, .panel, .popover, .progress, .progress-bar {
.form-control, .has-error .form-control:focus, .has-success .form-control:focus, .has-warning .form-control:focus, .navbar-collapse, .navbar-form, .navbar-form-custom .form-control:focus, .navbar-form-custom .form-control:hover, .open .btn.dropdown-toggle, .panel, .popover, .progress, .progress-bar {
box-shadow: none;
}
@@ -1818,18 +1818,19 @@ table.dataTable thead .sorting:after {
.form-control, .single-line {
background: #FFFFFF none;
border: 1px solid #e5e6e7;
border-radius: 1px;
border-radius: 4px;
color: inherit;
display: block;
padding: 6px 12px;
padding: 3px 6px 4px;
-webkit-transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s;
transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s;
width: 100%;
height: 31px;
font-size: 14px;
}
.form-control:focus, .single-line:focus {
border-color: #1ab394 !important;
border-color: #3c8dbc !important;
}
.has-success .form-control {
@@ -1858,8 +1859,8 @@ table.dataTable thead .sorting:after {
.input-group-addon {
background-color: #fff;
border: 1px solid #E5E6E7;
border-radius: 1px;
border: 1px solid #e5e6e7;
border-radius: 4px;
color: inherit;
font-size: 14px;
font-weight: 400;
@@ -6939,7 +6940,7 @@ body.rtls .top-navigation .footer.fixed, body.rtls.top-navigation .footer.fixed
background: #f5f5f5;
}
.nav .logo {
nav .logo {
background-color: #367fa9;
color: #fff;
border-bottom: 0 solid transparent;
@@ -18,6 +18,7 @@ user.password.not.valid=* 5-50个字符
user.email.not.valid=邮箱格式错误
user.mobile.phone.number.not.valid=手机号格式错误
user.login.success=登录成功
user.register.success=注册成功
user.notfound=请重新登录
user.forcelogout=管理员强制退出,请重新登录
user.unknown.error=未知错误,请重新登录
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -322,12 +322,18 @@
}
/** 表单验证 样式布局 **/
.control-label.is-required:before {
content: '* ';
color: red;
}
label.error {
position: absolute;
right: 18px;
top: 10px;
top: 6px;
color: #ef392b;
font-size: 12px
font-size: 12px;
z-index:99;
}
.input-group label.error {
@@ -638,10 +644,10 @@ label {
margin: 5px 15px 5px 0px;
}
.select-list li p{
.select-list li p, .select-list li label:not(.radio-box){
float: left;
width: 65px;
margin: 5px 5px 5px 0px;
margin: 5px 0px 0px 0px;
text-align:right;
}
@@ -675,11 +681,11 @@ label {
.bootstrap-select.form-control .btn-default {
color: inherit;
padding: 6px 12px;
border-radius: 1px;
padding: 4px 6px 4px;
border-radius: 4px;
border: 1px solid #e5e6e7;
outline: none;
height: 34px;
height: 31px;
background: #FFFFFF none
}
@@ -811,12 +817,26 @@ label {
border: 0px!important;
}
.table-striped .table, .table-striped .table, .table>thead>tr>th, .table>tbody>tr>th, .table>tfoot>tr>th, .table>thead>tr>td, .table>tbody>tr>td, .table>tfoot>tr>td {
.table-striped table>thead>tr>th, .table-striped table>tbody>tr>th, .table-striped table>tfoot>tr>th, .table-striped table>thead>tr>td, .table-striped table>tbody>tr>td, .table-striped table>tfoot>tr>td {
border-bottom: 1px solid #e7eaec!important;
background-color: transparent;
border: 0px;
}
.table-bordered table>thead>tr>th:first-child, .table-bordered table>tbody>tr>td:first-child {
border-left: 1px solid #ddd;
}
.table-bordered table>thead>tr>th:last-child, .table-bordered table>tbody>tr>td:last-child {
border-right: 1px solid #ddd;
}
.table-bordered table>thead>tr>th, .table-bordered table>tbody>tr>td {
border-top: 1px solid #ddd!important;
border-bottom: 1px solid #ddd;
}
.fixed-table-footer {
border-top: 0px solid #ddd;
}
@@ -838,10 +858,6 @@ label {
background-color: #eff3f8;
}
.table-bordered td,.table-bordered th {
border: 1px solid #ddd!important
}
.fixed-table-container thead th >.both{
display: inline-block
}
@@ -884,6 +900,16 @@ label {
z-index:100;
}
/** 表格全屏样式 **/
.bootstrap-table.fullscreen {
position: fixed;
top: 0;
left: 0;
z-index: 1050;
width: 100%!important;
background: #FFF;
}
/** 表格树样式 **/
.bootstrap-tree-table .treetable-indent {width:16px; height: 16px; display: inline-block; position: relative;}
.bootstrap-tree-table .treetable-expander {width:16px; height: 16px; display: inline-block; position: relative; cursor: pointer;}
@@ -893,7 +919,7 @@ label {
.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{overflow:hidden;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 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;}
@@ -998,6 +1024,51 @@ label {
background-color: #F5F5F5;
}
/** 气泡弹出框样式 **/
.popover {
font-size: 13px;
max-width: unset;
}
.popover-title {
padding: 8px 14px;
margin: 0 !important;
font-size: 14px;
background-color: #f7f7f7;
border-bottom: 1px solid #ebebeb;
border-radius: 5px 5px 0 0;
}
.popover-content {
padding: 5px;
}
/** 向上滚动样式 **/
#scroll-up {
border-width: 0;
position: fixed;
right: 2px;
z-index: 99;
-webkit-transition-duration: .3s;
transition-duration: .3s;
opacity: 0;
filter: alpha(opacity=0);
bottom: -24px;
visibility: hidden;
background-color: #aaa;
color: #fff;
font-size: 14px;
display: none;
}
#scroll-up.display {
opacity: .7;
filter: alpha(opacity=70);
bottom: 2px;
visibility: visible;
}
/* 设置滚动条样式 */
::-webkit-scrollbar {
width: 6px;
height: 10px;
@@ -1007,4 +1078,21 @@ label {
::-webkit-scrollbar-thumb {
border-radius: 6px;
background-color: #999;
}
}
/* 设置placeholder样式 */
::-webkit-input-placeholder {
color: #b3b3b3!important;
}
:-moz-placeholder {
color: #b3b3b3!important;
}
::-moz-placeholder {
color: #b3b3b3!important;
}
:-ms-input-placeholder {
color: #b3b3b3!important;
}
@@ -7,31 +7,37 @@ layer.config({
skin: 'layer-ext-moon'
});
var isMobile = false;
var sidebarHeight = isMobile ? '100%' : '96%';
$(function() {
// MetsiMenu
$('#side-menu').metisMenu();
//固定菜单栏
$(function() {
$('.sidebar-collapse').slimScroll({
height: '100%',
railOpacity: 0.9,
alwaysVisible: false
});
// 固定菜单栏
$('.sidebar-collapse').slimScroll({
height: sidebarHeight,
railOpacity: 0.9,
alwaysVisible: false
});
// 菜单切换
$('.navbar-minimalize').click(function() {
$("body").toggleClass("mini-navbar");
if (isMobile) {
$("body").toggleClass("canvas-menu");
} else {
$("body").toggleClass("mini-navbar");
}
SmoothlyMenu();
});
$('#side-menu>li').click(function() {
if ($('body').hasClass('mini-navbar')) {
if ($('body').hasClass('canvas-menu mini-navbar')) {
NavToggle();
}
});
$('#side-menu>li li a').click(function() {
$('#side-menu>li li a:not(:has(span))').click(function() {
if ($(window).width() < 769) {
NavToggle();
}
@@ -46,35 +52,64 @@ $(function() {
});
$(window).bind("load resize",
function() {
if ($(this).width() < 769) {
$('body').addClass('mini-navbar');
$('.navbar-static-side').fadeIn();
$(".sidebar-collapse .logo").addClass("hide");
$(".slimScrollDiv").css({ "overflow":"hidden" })
$(window).bind("load resize", function() {
isMobile = $.common.isMobile() || $(window).width() < 769;
if (isMobile) {
$('body').addClass('canvas-menu');
$("body").removeClass("mini-navbar");
$("nav .logo").addClass("hide");
$(".slimScrollDiv").css({ "overflow": "hidden" });
$('.navbar-static-side').fadeOut();
} else {
if($('body').hasClass('canvas-menu')) {
$('body').addClass('fixed-sidebar');
$('body').removeClass('canvas-menu');
$("body").removeClass("mini-navbar");
$("nav .logo").removeClass("hide");
$(".slimScrollDiv").css({ "overflow": "visible" });
$('.navbar-static-side').fadeIn();
}
}
});
function syncMenuTab(dataId) {
if(isLinkage) {
var $dataObj = $('a[href$="' + decodeURI(dataId) + '"]');
if (!$dataObj.hasClass("noactive")) {
$('.nav ul').removeClass("in");
$dataObj.parents("ul").addClass("in")
$dataObj.parents("li").addClass("active").siblings().removeClass("active").find('li').removeClass("active");
$dataObj.parents("ul").css('height', 'auto').height();
$dataObj.click();
}
}
}
function NavToggle() {
$('.navbar-minimalize').trigger('click');
}
function fixedSidebar() {
$('#side-menu').hide();
$("nav .logo").addClass("hide");
setTimeout(function() {
$('#side-menu').fadeIn(500);
},
100);
}
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);
},
300);
if (isMobile && !$('body').hasClass('canvas-menu')) {
$('.navbar-static-side').fadeIn();
fixedSidebar();
} else if (!isMobile &&!$('body').hasClass('mini-navbar')) {
fixedSidebar();
$("nav .logo").removeClass("hide");
} else if (isMobile && $('body').hasClass('fixed-sidebar')) {
$('.navbar-static-side').fadeOut();
fixedSidebar();
} else if (!isMobile && $('body').hasClass('fixed-sidebar')) {
fixedSidebar();
} else {
$('#side-menu').removeAttr('style');
}
@@ -92,11 +127,12 @@ $(function() {
});
return width;
}
// 激活指定选项卡
function setActiveTab(element) {
if (!$(element).hasClass('active')) {
var currentId = $(element).data('id');
syncMenuTab(currentId);
// 显示tab对应的内容区
$('.RuoYi_iframe').each(function() {
if ($(this).data('id') == currentId) {
@@ -217,9 +253,12 @@ $(function() {
dataIndex = $(this).data('index'),
menuName = $.trim($(this).text()),
flag = true;
$(".nav ul li, .nav li").removeClass("selected");
$(this).parent("li").addClass("selected");
setIframeUrl($(this).attr("href"));
if (!$('a[href$="' + dataUrl + '"]').hasClass("noactive")) {
$(".nav ul li, .nav li").removeClass("selected");
$(this).parent("li").addClass("selected");
}
setIframeUrl(dataUrl);
if (dataUrl == undefined || $.trim(dataUrl).length == 0) return false;
// 选项卡菜单已存在
@@ -248,20 +287,20 @@ $(function() {
// 添加选项卡对应的iframe
var str1 = '<iframe class="RuoYi_iframe" name="iframe' + dataIndex + '" width="100%" height="100%" src="' + dataUrl + '" frameborder="0" data-id="' + dataUrl + '" seamless></iframe>';
$('.mainContent').find('iframe.RuoYi_iframe').hide().parents('.mainContent').append(str1);
$.modal.loading("数据加载中,请稍后...");
$('.mainContent iframe:visible').load(function () {
$.modal.closeLoading();
});
// 添加选项卡
$('.menuTabs .page-tabs-content').append(str);
scrollToTab($('.menuTab.active'));
}
return false;
}
function menuBlank() {
// 新窗口打开外网以http://开头,如http://ruoyi.vip
var dataUrl = $(this).attr('href');
@@ -270,7 +309,7 @@ $(function() {
}
$('.menuItem').on('click', menuItem);
$('.menuBlank').on('click', menuBlank);
// 关闭选项卡菜单
@@ -335,7 +374,7 @@ $(function() {
return false;
}
});
if($.common.isNotEmpty(panelUrl)){
$('.menuTab[data-id="' + panelUrl + '"]').addClass('active').siblings('.menuTab').removeClass('active');
$('.mainContent .RuoYi_iframe').each(function() {
@@ -361,9 +400,10 @@ $(function() {
});
}
scrollToTab($('.menuTab.active'));
syncMenuTab($('.page-tabs-content').find('.active').attr('data-id'));
return false;
}
$('.menuTabs').on('click', '.menuTab i', closeTab);
//滚动到已激活的选项卡
@@ -376,6 +416,7 @@ $(function() {
function activeTab() {
if (!$(this).hasClass('active')) {
var currentId = $(this).data('id');
syncMenuTab(currentId);
// 显示tab对应的内容区
$('.mainContent .RuoYi_iframe').each(function() {
if ($(this).data('id') == currentId) {
@@ -398,19 +439,19 @@ $(function() {
var url = target.attr('src');
target.attr('src', url).ready();
}
// 页签全屏
function fullScreenTab() {
var currentId = $('.page-tabs-content').find('.active').attr('data-id');
var target = $('.RuoYi_iframe[data-id="' + currentId + '"]');
target.fullScreen(true);
}
// 关闭当前选项卡
function tabCloseCurrent() {
$('.page-tabs-content').find('.active i').trigger("click");
}
//关闭其他选项卡
function tabCloseOther() {
$('.page-tabs-content').children("[data-id]").not(":first").not(".active").each(function() {
@@ -419,7 +460,7 @@ $(function() {
});
$('.page-tabs-content').css("margin-left", "0");
}
// 关闭全部选项卡
function tabCloseAll() {
$('.page-tabs-content').children("[data-id]").not(":first").each(function() {
@@ -431,17 +472,18 @@ $(function() {
$(this).addClass("active");
});
$('.page-tabs-content').css("margin-left", "0");
syncMenuTab($('.page-tabs-content').find('.active').attr('data-id'));
}
// 全屏显示
$('#fullScreen').on('click', function () {
$(document).toggleFullScreen();
});
// 页签刷新按钮
$('.tabReload').on('click', refreshTab);
// 页签全屏按钮
$('.tabFullScreen').on('click', fullScreenTab);
@@ -453,53 +495,57 @@ $(function() {
// 右移按扭
$('.tabRight').on('click', scrollTabRight);
// 关闭当前
$('.tabCloseCurrent').on('click', tabCloseCurrent);
// 关闭其他
$('.tabCloseOther').on('click', tabCloseOther);
// 关闭全部
$('.tabCloseAll').on('click', tabCloseAll);
// 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();
}
// 设置锚点
function setIframeUrl(href) {
var nowUrl = window.location.href;
var newUrl = nowUrl.substring(0, nowUrl.indexOf("#"));
window.location.href = newUrl + "#" + href;
if($.common.equals("history", mode)) {
storage.set('publicPath', href);
} else {
var nowUrl = window.location.href;
var newUrl = nowUrl.substring(0, nowUrl.indexOf("#"));
window.location.href = newUrl + "#" + href;
}
}
$(window).keydown(function(event) {
if (event.keyCode == 27) {
$('#content-main').removeClass('max');
$('#ax_close_max').hide();
}
});
window.onhashchange = function() {
var hash = location.hash;
var url = hash.substring(1, hash.length);
$('a[href$="' + url + '"]').click();
};
// 右键菜单实现
$.contextMenu({
selector: ".menuTab",
@@ -571,7 +617,6 @@ $(function() {
setActiveTab(this);
var target = $('.RuoYi_iframe[data-id="' + this.data('id') + '"]');
var url = target.attr('src');
target.attr('src', url).ready();
$.modal.loading("数据加载中,请稍后...");
target.attr('src', url).load(function () {
$.modal.closeLoading();
@@ -588,4 +633,4 @@ $(function() {
},
}
})
});
});
@@ -12,6 +12,11 @@ $(function() {
});
}
// 回到顶部绑定
if ($.fn.toTop !== undefined) {
$('#scroll-up').toTop();
}
// select2复选框事件绑定
if ($.fn.select2 !== undefined) {
$.fn.select2.defaults.set( "theme", "bootstrap" );
@@ -31,6 +36,30 @@ $(function() {
})
})
}
// 气泡弹出框特效(移到元素时)
$(document).on("mouseenter", '.table [data-toggle="popover"]', function() {
var _this = this;
$(this).popover("show");
$(".popover").on("mouseleave", function() {
$(_this).popover('hide');
});
})
// 气泡弹出框特效(离开元素时)
$(document).on("mouseleave", '.table [data-toggle="popover"]', function() {
var _this = this;
setTimeout(function() {
if (!$(".popover:hover").length) $(_this).popover("hide");
}, 100);
});
// 取消回车自动提交表单
$(document).on("keypress", ":input:not(textarea):not([type=submit])", function(event) {
if (event.keyCode == 13) {
event.preventDefault();
}
});
// laydate 时间控件绑定
if ($(".select-time").length > 0) {
@@ -66,14 +95,15 @@ $(function() {
startDate.config.max.month = date.month - 1;
startDate.config.max.date = date.date;
} else {
startDate.config.max.year = '';
startDate.config.max.month = '';
startDate.config.max.date = '';
startDate.config.max.year = '2099';
startDate.config.max.month = '12';
startDate.config.max.date = '31';
}
}
});
});
}
// laydate time-input 时间控件绑定
if ($(".time-input").length > 0) {
layui.use('laydate', function () {
@@ -121,6 +151,7 @@ $(function() {
});
});
}
// tree 关键字搜索绑定
if ($("#keyword").length > 0) {
$("#keyword").bind("focus", function focusKey(e) {
@@ -134,6 +165,7 @@ $(function() {
$.tree.searchNode(e);
}).bind("input propertychange", $.tree.searchNode);
}
// tree表格树 展开/折叠
var expandFlag;
$("#expandAllBtn").click(function() {
@@ -146,6 +178,7 @@ $(function() {
}
expandFlag = expandFlag ? false: true;
})
// 按下ESC按钮关闭弹层
$('body', document).on('keyup', function(e) {
if (e.which === 27) {
@@ -154,6 +187,49 @@ $(function() {
});
});
(function ($) {
'use strict';
$.fn.toTop = function(opt) {
var elem = this;
var win = $(window);
var doc = $('html, body');
var options = $.extend({
autohide: true,
offset: 50,
speed: 500,
position: true,
right: 15,
bottom: 5
}, opt);
elem.css({
'cursor': 'pointer'
});
if (options.autohide) {
elem.css('display', 'none');
}
if (options.position) {
elem.css({
'position': 'fixed',
'right': options.right,
'bottom': options.bottom,
});
}
elem.click(function() {
doc.animate({
scrollTop: 0
}, options.speed);
});
win.scroll(function() {
var scrolling = win.scrollTop();
if (options.autohide) {
if (scrolling > options.offset) {
elem.fadeIn(options.speed);
} else elem.fadeOut(options.speed);
}
});
};
})(jQuery);
/** 刷新选项卡 */
var refreshItem = function(){
var topWindow = $(window.parent.document);
@@ -232,7 +308,7 @@ function createMenuItem(dataUrl, menuName) {
return false;
}
//日志打印封装处理
// 日志打印封装处理
var log = {
log: function(msg) {
console.log(msg);
@@ -248,7 +324,7 @@ var log = {
}
};
//本地缓存处理
// 本地缓存处理
var storage = {
set: function(key, value) {
window.localStorage.setItem(key, value);
@@ -264,6 +340,42 @@ var storage = {
}
};
// 主子表操作封装处理
var sub = {
editColumn: function() {
var count = $("#" + table.options.id).bootstrapTable('getData').length;
var params = new Array();
for (var dataIndex = 0; dataIndex <= count; dataIndex++) {
var columns = $('#' + table.options.id + ' tr[data-index="' + dataIndex + '"] td');
var obj = new Object();
for (var i = 0; i < columns.length; i++) {
var inputValue = $(columns[i]).find('input');
var selectValue = $(columns[i]).find('select');
var key = table.options.columns[i].field;
if ($.common.isNotEmpty(inputValue.val())) {
obj[key] = inputValue.val();
} else if ($.common.isNotEmpty(selectValue.val())) {
obj[key] = selectValue.val();
} else {
obj[key] = "";
}
}
params.push({ index: dataIndex, row: obj });
}
$("#" + table.options.id).bootstrapTable("updateRow", params);
},
delColumn: function(column) {
sub.editColumn();
var subColumn = $.common.isEmpty(column) ? "index" : column;
var ids = $.table.selectColumns(subColumn);
if (ids.length == 0) {
$.modal.alertWarning("请至少选择一条记录");
return;
}
$("#" + table.options.id).bootstrapTable('remove', { field: subColumn, values: ids });
}
};
/** 设置全局ajax处理 */
$.ajaxSetup({
complete: function(XMLHttpRequest, textStatus) {
@@ -43,7 +43,9 @@ var table = {
sortName: "",
sortOrder: "asc",
pagination: true,
paginationLoop: false,
pageSize: 10,
pageNumber: 1,
pageList: [10, 25, 50],
toolbar: "toolbar",
striped: false,
@@ -58,6 +60,7 @@ var table = {
showToggle: true,
showExport: false,
clickToSelect: false,
singleSelect: false,
mobileResponsive: true,
rememberSelected: false,
fixedColumns: false,
@@ -72,6 +75,7 @@ var table = {
table.config[options.id] = options;
$.table.initEvent();
$('#' + options.id).bootstrapTable({
id: options.id,
url: options.url, // 请求后台的URL*
contentType: "application/x-www-form-urlencoded", // 编码类型
method: 'post', // 请求方式(*
@@ -83,6 +87,7 @@ var table = {
sortName: options.sortName, // 排序列名称
sortOrder: options.sortOrder, // 排序方式 asc 或者 desc
pagination: options.pagination, // 是否显示分页(*
paginationLoop: options.paginationLoop, // 是否启用分页条无限循环的功能
pageNumber: 1, // 初始化加载第一页,默认第一页
pageSize: options.pageSize, // 每页的记录行数(*
pageList: options.pageList, // 可供选择的每页的行数(*
@@ -100,9 +105,13 @@ var table = {
showColumns: options.showColumns, // 是否显示隐藏某列下拉框
showToggle: options.showToggle, // 是否显示详细视图和列表视图的切换按钮
showExport: options.showExport, // 是否支持导出文件
showHeader: options.showHeader, // 是否显示表头
showFullscreen: options.showFullscreen, // 是否显示全屏按钮
uniqueId: options.uniqueId, // 唯 一的标识符
clickToSelect: options.clickToSelect, // 是否启用点击选中行
singleSelect: options.singleSelect, // 是否单选checkbox
mobileResponsive: options.mobileResponsive, // 是否支持移动端适配
cardView: options.cardView, // 是否启用显示卡片视图
detailView: options.detailView, // 是否启用显示细节视图
onClickRow: options.onClickRow, // 点击某行触发的事件
onDblClickRow: options.onDblClickRow, // 双击某行触发的事件
@@ -119,6 +128,7 @@ var table = {
queryParams: options.queryParams, // 传递参数(*
rowStyle: options.rowStyle, // 通过自定义函数设置行样式
columns: options.columns, // 显示列信息(*
data: options.data, // 被加载的数据
responseHandler: $.table.responseHandler, // 在加载服务器发送来的数据之前处理函数
onLoadSuccess: $.table.onLoadSuccess, // 当所有数据被加载时触发处理函数
exportOptions: options.exportOptions, // 前端导出忽略列索引
@@ -212,9 +222,14 @@ var table = {
$(optionsIds).off("click").on("click", '.img-circle', function() {
var src = $(this).attr('src');
var target = $(this).data('target');
var height = $(this).data('height');
var width = $(this).data('width');
if($.common.equals("self", target)) {
var height = $(this).data('height');
var width = $(this).data('width');
// 如果是移动端,就使用自适应大小弹窗
if ($.common.isMobile()) {
width = 'auto';
height = 'auto';
}
layer.open({
title: false,
type: 1,
@@ -250,7 +265,7 @@ var table = {
table.options.onLoadSuccess(data);
}
// 浮动提示框特效
$("[data-toggle='tooltip']").tooltip();
$(".table [data-toggle='tooltip']").tooltip();
},
// 表格销毁
destroy: function (tableId) {
@@ -261,8 +276,8 @@ var table = {
serialNumber: function (index, tableId) {
var currentId = $.common.isEmpty(tableId) ? table.options.id : tableId;
var tableParams = $("#" + currentId).bootstrapTable('getOptions');
var pageSize = tableParams.pageSize;
var pageNumber = tableParams.pageNumber;
var pageSize = $.common.isNotEmpty(tableParams.pageSize) ? tableParams.pageSize: table.options.pageSize;
var pageNumber = $.common.isNotEmpty(tableParams.pageNumber) ? tableParams.pageNumber: table.options.pageNumber;
return pageSize * (pageNumber - 1) + index + 1;
},
// 列超出指定长度浮动提示 target(copy单击复制文本 open弹窗打开文本)
@@ -273,10 +288,11 @@ var table = {
var _target = $.common.isEmpty(target) ? 'copy' : target;
if (_value.length > _length) {
_text = _value.substr(0, _length) + "...";
_value = _value.replace(/\'/g,"");
_value = _value.replace(/\'/g,"&apos;");
_value = _value.replace(/\"/g,"&quot;");
var actions = [];
actions.push($.common.sprintf('<input id="tooltip-show" style="opacity: 0;position: absolute;z-index:-1" type="text" value="%s"/>', _value));
actions.push($.common.sprintf("<a href='###' class='tooltip-show' data-toggle='tooltip' data-target='%s' title='%s'>%s</a>", _target, _value, _text));
actions.push($.common.sprintf('<input style="opacity: 0;position: absolute;z-index:-1" type="text" value="%s"/>', _value));
actions.push($.common.sprintf('<a href="###" class="tooltip-show" data-toggle="tooltip" data-target="%s" title="%s">%s</a>', _target, _value, _text));
return actions.join('');
} else {
_text = _value;
@@ -341,8 +357,12 @@ var table = {
table.set();
$.modal.confirm("确定导出所有" + table.options.modalName + "吗?", function() {
var currentId = $.common.isEmpty(formId) ? $('form').attr('id') : formId;
var params = $("#" + table.options.id).bootstrapTable('getOptions');
var dataParam = $("#" + currentId).serializeArray();
dataParam.push({ "name": "orderByColumn", "value": params.sortName });
dataParam.push({ "name": "isAsc", "value": params.sortOrder });
$.modal.loading("正在导出数据,请稍后...");
$.post(table.options.exportUrl, $("#" + currentId).serializeArray(), function(result) {
$.post(table.options.exportUrl, dataParam, 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) {
@@ -391,9 +411,7 @@ var table = {
}
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'));
var formData = new FormData(layero.find('form')[0]);
$.ajax({
url: table.options.importUrl,
data: formData,
@@ -430,13 +448,13 @@ var table = {
// 查询表格指定列值
selectColumns: function(column) {
var rows = $.map($("#" + table.options.id).bootstrapTable('getSelections'), function (row) {
return row[column];
return $.common.getItemField(row, column);
});
if ($.common.isNotEmpty(table.options.rememberSelected) && table.options.rememberSelected) {
var selectedRows = table.rememberSelecteds[table.options.id];
if($.common.isNotEmpty(selectedRows)) {
rows = $.map(table.rememberSelecteds[table.options.id], function (row) {
return row[column];
return $.common.getItemField(row, column);
});
}
}
@@ -448,7 +466,7 @@ var table = {
var rowIds;
if ($.isArray(rows)) {
rowIds = $.map(rows, function(row) {
return row[column];
return $.common.getItemField(row, column);
});
} else {
rowIds = [rows[column]];
@@ -458,13 +476,13 @@ var table = {
// 查询表格首列值
selectFirstColumns: function() {
var rows = $.map($("#" + table.options.id).bootstrapTable('getSelections'), function (row) {
return row[table.options.columns[1].field];
return $.common.getItemField(row, table.options.columns[1].field);
});
if ($.common.isNotEmpty(table.options.rememberSelected) && table.options.rememberSelected) {
var selectedRows = table.rememberSelecteds[table.options.id];
if($.common.isNotEmpty(selectedRows)) {
rows = $.map(selectedRows, function (row) {
return row[table.options.columns[1].field];
return $.common.getItemField(row, table.options.columns[1].field);
});
}
}
@@ -482,6 +500,21 @@ var table = {
});
return actions.join('');
},
// 回显数据字典(字符串数组)
selectDictLabels: function(datas, value, separator) {
var currentSeparator = $.common.isEmpty(separator) ? "," : separator;
var actions = [];
$.each(value.split(currentSeparator), function(i, val) {
$.each(datas, function(index, dict) {
if (dict.dictValue == ('' + val)) {
var listClass = $.common.equals("default", dict.listClass) || $.common.isEmpty(dict.listClass) ? "" : "badge badge-" + dict.listClass;
actions.push($.common.sprintf("<span class='%s'>%s </span>", listClass, dict.dictLabel));
return false;
}
});
});
return actions.join('');
},
// 显示表格指定列
showColumn: function(column, tableId) {
var currentId = $.common.isEmpty(tableId) ? table.options.id : tableId;
@@ -491,6 +524,16 @@ var table = {
hideColumn: function(column, tableId) {
var currentId = $.common.isEmpty(tableId) ? table.options.id : tableId;
$("#" + currentId).bootstrapTable('hideColumn', column);
},
// 显示所有表格列
showAllColumns: function(tableId) {
var currentId = $.common.isEmpty(tableId) ? table.options.id : tableId;
$("#" + currentId).bootstrapTable('showAllColumns');
},
// 隐藏所有表格列
hideAllColumns: function(tableId) {
var currentId = $.common.isEmpty(tableId) ? table.options.id : tableId;
$("#" + currentId).bootstrapTable('hideAllColumns');
}
},
// 表格树封装处理
@@ -515,6 +558,7 @@ var table = {
var options = $.extend(defaults, options);
table.options = options;
table.config[options.id] = options;
$.table.initEvent();
$.bttTable = $('#' + options.id).bootstrapTreeTable({
code: options.code, // 用于设置父子关系
parentCode: options.parentCode, // 用于设置父子关系
@@ -526,7 +570,7 @@ var table = {
height: options.height, // 表格树的高度
expandColumn: options.expandColumn, // 在哪一列上面显示展开按钮
striped: options.striped, // 是否显示行间隔色
bordered: true, // 是否显示边框
bordered: false, // 是否显示边框
toolbar: '#' + options.toolbar, // 指定工作栏
showSearch: options.showSearch, // 是否显示检索信息
showRefresh: options.showRefresh, // 是否显示刷新按钮
@@ -534,7 +578,8 @@ var table = {
expandAll: options.expandAll, // 是否全部展开
expandFirst: options.expandFirst, // 是否默认第一级展开--expandAll为false时生效
columns: options.columns, // 显示列信息(*
responseHandler: $.treeTable.responseHandler // 当所有数据被加载时触发处理函数
responseHandler: $.treeTable.responseHandler, // 在加载服务器发送来的数据之前处理函数
onLoadSuccess: $.table.onLoadSuccess // 当所有数据被加载时触发处理函数
});
},
// 条件查询
@@ -550,17 +595,20 @@ var table = {
// 查询表格树指定列值
selectColumns: function(column) {
var rows = $.map($.bttTable.bootstrapTreeTable('getSelections'), function (row) {
return row[column];
return $.common.getItemField(row, column);
});
return $.common.uniqueFn(rows);
},
// 请求获取数据后处理回调函数,校验异常状态提醒
responseHandler: function(data) {
if (data.code != undefined && data.code != 0) {
$.modal.alertWarning(data.msg);
responseHandler: function(res) {
if (typeof table.options.responseHandler == "function") {
table.options.responseHandler(res);
}
if (res.code != undefined && res.code != 0) {
$.modal.alertWarning(res.msg);
return [];
} else {
return data;
return res;
}
},
},
@@ -577,6 +625,12 @@ var table = {
} else{
$("#" + tableId).bootstrapTable('refresh');
}
} else if (table.options.type == table_type.bootstrapTreeTable) {
if($.common.isEmpty(tableId)){
$("#" + table.options.id).bootstrapTreeTable('refresh', []);
} else{
$("#" + tableId).bootstrapTreeTable('refresh', []);
}
}
},
// 获取选中复选框项
@@ -695,7 +749,7 @@ var table = {
// 弹出层指定宽度
open: function (title, url, width, height, callback) {
//如果是移动端,就使用自适应大小弹窗
if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {
if ($.common.isMobile()) {
width = 'auto';
height = 'auto';
}
@@ -747,27 +801,39 @@ var table = {
options.callBack(index, layero);
}
}
layer.open({
type: 2,
maxmin: true,
shade: 0.3,
title: _title,
fix: false,
area: [_width + 'px', _height + 'px'],
content: _url,
shadeClose: $.common.isEmpty(options.shadeClose) ? true : options.shadeClose,
skin: options.skin,
btn: $.common.isEmpty(options.btn) ? _btn : options.btn,
yes: options.yes,
cancel: function () {
return true;
}
});
var btnCallback = {};
if(options.btn instanceof Array){
for (var i = 1, len = options.btn.length; i < len; i++) {
var btn = options["btn" + (i + 1)];
if (btn) {
btnCallback["btn" + (i + 1)] = btn;
}
}
}
var index = layer.open($.extend({
type: 2,
maxmin: $.common.isEmpty(options.maxmin) ? true : options.maxmin,
shade: 0.3,
title: _title,
fix: false,
area: [_width + 'px', _height + 'px'],
content: _url,
shadeClose: $.common.isEmpty(options.shadeClose) ? true : options.shadeClose,
skin: options.skin,
btn: $.common.isEmpty(options.btn) ? _btn : options.btn,
yes: options.yes,
cancel: function () {
return true;
}
}, btnCallback));
if ($.common.isNotEmpty(options.full) && options.full === true) {
layer.full(index);
}
},
// 弹出层全屏
openFull: function (title, url, width, height) {
//如果是移动端,就使用自适应大小弹窗
if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {
if ($.common.isMobile()) {
width = 'auto';
height = 'auto';
}
@@ -880,7 +946,7 @@ var table = {
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)) {
if ($.common.isMobile()) {
_width = 'auto';
_height = 'auto';
}
@@ -996,8 +1062,17 @@ var table = {
if ($.common.isNotEmpty(id)) {
url = table.options.updateUrl.replace("{id}", id);
} else {
var row = $.common.isEmpty(table.options.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns(table.options.uniqueId);
url = table.options.updateUrl.replace("{id}", row);
if(table.options.type == table_type.bootstrapTreeTable) {
var row = $("#" + table.options.id).bootstrapTreeTable('getSelections')[0];
if ($.common.isEmpty(row)) {
$.modal.alertWarning("请至少选择一条记录");
return;
}
url = table.options.updateUrl.replace("{id}", row[table.options.uniqueId]);
} else {
var row = $.common.isEmpty(table.options.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns(table.options.uniqueId);
url = table.options.updateUrl.replace("{id}", row);
}
}
$.modal.openFull("修改" + table.options.modalName, url);
},
@@ -1089,7 +1164,9 @@ var table = {
} else if (result.code == web_status.SUCCESS && table.options.type == table_type.bootstrapTreeTable) {
$.modal.msgSuccess(result.msg);
$.treeTable.refresh();
} else if (result.code == web_status.WARNING) {
} else if (result.code == web_status.SUCCESS && $.common.isEmpty(table.options.type)) {
$.modal.msgSuccess(result.msg)
} else if (result.code == web_status.WARNING) {
$.modal.alertWarning(result.msg)
} else {
$.modal.alertError(result.msg);
@@ -1216,9 +1293,11 @@ var table = {
var treeId = $("#treeId").val();
tree = $.fn.zTree.init($("#" + options.id), setting, data);
$._tree = tree;
var nodes = tree.getNodesByParam("level", options.expandLevel - 1);
for (var i = 0; i < nodes.length; i++) {
tree.expandNode(nodes[i], true, false, false);
for (var i = 0; i < options.expandLevel; i++) {
var nodes = tree.getNodesByParam("level", i);
for (var j = 0; j < nodes.length; j++) {
tree.expandNode(nodes[j], true, false, false);
}
}
var node = tree.getNodesByParam("id", treeId, null)[0];
$.tree.selectByIdName(treeId, node);
@@ -1415,6 +1494,18 @@ var table = {
});
return flag ? str : '';
},
// 获取节点数据,支持多层级访问
getItemField: function (item, field) {
var value = item;
if (typeof field !== 'string' || item.hasOwnProperty(field)) {
return item[field];
}
var props = field.split('.');
for (var p in props) {
value = value && value[props[p]];
}
return value;
},
// 指定随机数返回
random: function (min, max) {
return Math.floor((Math.random() * max) + min);
@@ -1460,6 +1551,20 @@ var table = {
});
return json;
},
// 数据字典转下拉框
dictToSelect: function(datas, value, name) {
var actions = [];
actions.push($.common.sprintf("<select class='form-control' name='%s'>", name));
$.each(datas, function(index, dict) {
actions.push($.common.sprintf("<option value='%s'", dict.dictValue));
if (dict.dictValue == ('' + value)) {
actions.push(' selected');
}
actions.push($.common.sprintf(">%s</option>", dict.dictLabel));
});
actions.push('</select>');
return actions.join('');
},
// 获取obj对象长度
getLength: function(obj) {
var count = 0;  
@@ -1469,7 +1574,11 @@ var table = {
}  
}
return count;
}
},
// 判断移动端
isMobile: function () {
return navigator.userAgent.match(/(Android|iPhone|SymbianOS|Windows Phone|iPad|iPod)/i);
},
}
});
})(jQuery);
@@ -26,7 +26,7 @@ function login() {
data: {
"username": username,
"password": password,
"validateCode" : validateCode,
"validateCode": validateCode,
"rememberMe": rememberMe
},
success: function(r) {
@@ -0,0 +1,82 @@
$(function() {
validateRule();
$('.imgcode').click(function() {
var url = ctx + "captcha/captchaImage?type=" + captchaType + "&s=" + Math.random();
$(".imgcode").attr("src", url);
});
});
$.validator.setDefaults({
submitHandler: function() {
register();
}
});
function register() {
$.modal.loading($("#btnSubmit").data("loading"));
var username = $.common.trim($("input[name='username']").val());
var password = $.common.trim($("input[name='password']").val());
var validateCode = $("input[name='validateCode']").val();
$.ajax({
type: "post",
url: ctx + "register",
data: {
"loginName": username,
"password": password,
"validateCode": validateCode
},
success: function(r) {
if (r.code == 0) {
layer.alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", {
icon: 1,
title: "系统提示"
},
function(index) {
//关闭弹窗
layer.close(index);
location.href = ctx + 'login';
});
} else {
$.modal.closeLoading();
$('.imgcode').click();
$(".code").val("");
$.modal.msg(r.msg);
}
}
});
}
function validateRule() {
var icon = "<i class='fa fa-times-circle'></i> ";
$("#registerForm").validate({
rules: {
username: {
required: true,
minlength: 2
},
password: {
required: true,
minlength: 5
},
confirmPassword: {
required: true,
equalTo: "[name='password']"
}
},
messages: {
username: {
required: icon + "请输入您的用户名",
minlength: icon + "用户名不能小于2个字符"
},
password: {
required: icon + "请输入您的密码",
minlength: icon + "密码不能小于5个字符",
},
confirmPassword: {
required: icon + "请再次输入您的密码",
equalTo: icon + "两次密码输入不一致"
}
}
})
}
@@ -14,13 +14,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="form_basic.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="form_basic.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="form_basic.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -54,7 +54,7 @@
<h4>还不是会员?</h4>
<p>您可以注册一个新账户</p>
<p class="text-center">
<a href="form_basic.html"><i class="fa fa-sign-in big-icon"></i></a>
<a href="#"><i class="fa fa-sign-in big-icon"></i></a>
</p>
</div>
</div>
@@ -69,13 +69,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="form_basic.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="form_basic.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="form_basic.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -119,13 +119,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="form_basic.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="form_basic.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="form_basic.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -160,13 +160,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="form_basic.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="form_basic.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="form_basic.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -176,7 +176,7 @@
</div>
<div class="ibox-content">
<div class="text-center">
<a data-toggle="modal" class="btn btn-primary" href="form_basic.html#modal-form">打开登录窗口</a>
<a data-toggle="modal" class="btn btn-primary" href="#modal-form">打开登录窗口</a>
</div>
</div>
</div>
@@ -191,13 +191,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="form_basic.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="form_basic.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="form_basic.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -463,14 +463,14 @@
<button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">操作 <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="form_basic.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="form_basic.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
<li><a href="form_basic.html#">选项3</a>
<li><a href="#">选项3</a>
</li>
<li class="divider"></li>
<li><a href="form_basic.html#">选项4</a>
<li><a href="#">选项4</a>
</li>
</ul>
</div>
@@ -483,14 +483,14 @@
<button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">操作 <span class="caret"></span>
</button>
<ul class="dropdown-menu pull-right">
<li><a href="form_basic.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="form_basic.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
<li><a href="form_basic.html#">选项3</a>
<li><a href="#">选项3</a>
</li>
<li class="divider"></li>
<li><a href="form_basic.html#">选项4</a>
<li><a href="#">选项4</a>
</li>
</ul>
</div>
@@ -508,14 +508,14 @@
<button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button"><span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="form_basic.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="form_basic.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
<li><a href="form_basic.html#">选项3</a>
<li><a href="#">选项3</a>
</li>
<li class="divider"></li>
<li><a href="form_basic.html#">选项4</a>
<li><a href="#">选项4</a>
</li>
</ul>
</div>
@@ -580,7 +580,7 @@
<h4>还不是会员?</h4>
<p>您可以注册一个账户</p>
<p class="text-center">
<a href="form_basic.html"><i class="fa fa-sign-in big-icon"></i></a>
<a href="#"><i class="fa fa-sign-in big-icon"></i></a>
</p>
</div>
</div>
@@ -13,13 +13,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="buttons.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="buttons.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="buttons.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -56,13 +56,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="buttons.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="buttons.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="buttons.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -99,13 +99,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="buttons.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="buttons.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="buttons.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -143,13 +143,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="buttons.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="buttons.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="buttons.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -217,13 +217,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="buttons.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="buttons.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="buttons.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -241,14 +241,14 @@
<button data-toggle="dropdown" class="btn btn-primary dropdown-toggle">操作 <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="buttons.html#">置顶</a>
<li><a href="#">置顶</a>
</li>
<li><a href="buttons.html#" class="font-bold">修改</a>
<li><a href="#" class="font-bold">修改</a>
</li>
<li><a href="buttons.html#">禁用</a>
<li><a href="#">禁用</a>
</li>
<li class="divider"></li>
<li><a href="buttons.html#">删除</a>
<li><a href="#">删除</a>
</li>
</ul>
</div>
@@ -256,14 +256,14 @@
<button data-toggle="dropdown" class="btn btn-warning dropdown-toggle">操作 <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="buttons.html#">置顶</a>
<li><a href="#">置顶</a>
</li>
<li><a href="buttons.html#">修改</a>
<li><a href="#">修改</a>
</li>
<li><a href="buttons.html#">禁用</a>
<li><a href="#">禁用</a>
</li>
<li class="divider"></li>
<li><a href="buttons.html#">删除</a>
<li><a href="#">删除</a>
</li>
</ul>
</div>
@@ -271,14 +271,14 @@
<button data-toggle="dropdown" class="btn btn-default dropdown-toggle">操作 <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="buttons.html#">置顶</a>
<li><a href="#">置顶</a>
</li>
<li><a href="buttons.html#" class="font-bold">修改</a>
<li><a href="#" class="font-bold">修改</a>
</li>
<li><a href="buttons.html#">禁用</a>
<li><a href="#">禁用</a>
</li>
<li class="divider"></li>
<li><a href="buttons.html#">删除</a>
<li><a href="#">删除</a>
</li>
</ul>
</div>
@@ -288,14 +288,14 @@
<button data-toggle="dropdown" class="btn btn-primary btn-sm dropdown-toggle">操作 <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="buttons.html#">置顶</a>
<li><a href="#">置顶</a>
</li>
<li><a href="buttons.html#" class="font-bold">修改</a>
<li><a href="#" class="font-bold">修改</a>
</li>
<li><a href="buttons.html#">禁用</a>
<li><a href="#">禁用</a>
</li>
<li class="divider"></li>
<li><a href="buttons.html#">删除</a>
<li><a href="#">删除</a>
</li>
</ul>
</div>
@@ -303,14 +303,14 @@
<button data-toggle="dropdown" class="btn btn-warning btn-sm dropdown-toggle">操作 <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="buttons.html#">置顶</a>
<li><a href="#">置顶</a>
</li>
<li><a href="buttons.html#" class="font-bold">修改</a>
<li><a href="#" class="font-bold">修改</a>
</li>
<li><a href="buttons.html#">禁用</a>
<li><a href="#">禁用</a>
</li>
<li class="divider"></li>
<li><a href="buttons.html#">删除</a>
<li><a href="#">删除</a>
</li>
</ul>
</div>
@@ -318,14 +318,14 @@
<button data-toggle="dropdown" class="btn btn-default btn-sm dropdown-toggle">操作 <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="buttons.html#">置顶</a>
<li><a href="#">置顶</a>
</li>
<li><a href="buttons.html#" class="font-bold">修改</a>
<li><a href="#" class="font-bold">修改</a>
</li>
<li><a href="buttons.html#">禁用</a>
<li><a href="#">禁用</a>
</li>
<li class="divider"></li>
<li><a href="buttons.html#">删除</a>
<li><a href="#">删除</a>
</li>
</ul>
</div>
@@ -334,14 +334,14 @@
<button data-toggle="dropdown" class="btn btn-primary btn-xs dropdown-toggle">操作 <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="buttons.html#">置顶</a>
<li><a href="#">置顶</a>
</li>
<li><a href="buttons.html#" class="font-bold">修改</a>
<li><a href="#" class="font-bold">修改</a>
</li>
<li><a href="buttons.html#">禁用</a>
<li><a href="#">禁用</a>
</li>
<li class="divider"></li>
<li><a href="buttons.html#">删除</a>
<li><a href="#">删除</a>
</li>
</ul>
</div>
@@ -349,14 +349,14 @@
<button data-toggle="dropdown" class="btn btn-warning btn-xs dropdown-toggle">操作 <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="buttons.html#">置顶</a>
<li><a href="#">置顶</a>
</li>
<li><a href="buttons.html#" class="font-bold">修改</a>
<li><a href="#" class="font-bold">修改</a>
</li>
<li><a href="buttons.html#">禁用</a>
<li><a href="#">禁用</a>
</li>
<li class="divider"></li>
<li><a href="buttons.html#">删除</a>
<li><a href="#">删除</a>
</li>
</ul>
</div>
@@ -364,14 +364,14 @@
<button data-toggle="dropdown" class="btn btn-default btn-xs dropdown-toggle">操作 <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="buttons.html#">置顶</a>
<li><a href="#">置顶</a>
</li>
<li><a href="buttons.html#" class="font-bold">修改</a>
<li><a href="#" class="font-bold">修改</a>
</li>
<li><a href="buttons.html#">禁用</a>
<li><a href="#">禁用</a>
</li>
<li class="divider"></li>
<li><a href="buttons.html#">删除</a>
<li><a href="#">删除</a>
</li>
</ul>
</div>
@@ -386,13 +386,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="buttons.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="buttons.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="buttons.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -431,13 +431,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="buttons.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="buttons.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="buttons.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -513,13 +513,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="buttons.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="buttons.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="buttons.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -576,13 +576,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="buttons.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="buttons.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="buttons.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -597,16 +597,16 @@
<h3 class="font-bold">按钮组</h3>
<p>
<a class="btn btn-default btn-rounded" href="buttons.html#">默认</a>
<a class="btn btn-primary btn-rounded" href="buttons.html#">主要</a>
<a class="btn btn-success btn-rounded" href="buttons.html#">成果</a>
<a class="btn btn-info btn-rounded" href="buttons.html#">信息</a>
<a class="btn btn-warning btn-rounded" href="buttons.html#">警告</a>
<a class="btn btn-danger btn-rounded" href="buttons.html#">危险</a>
<a class="btn btn-danger btn-rounded btn-outline" href="buttons.html#">危险</a>
<a class="btn btn-default btn-rounded" href="#">默认</a>
<a class="btn btn-primary btn-rounded" href="#">主要</a>
<a class="btn btn-success btn-rounded" href="#">成果</a>
<a class="btn btn-info btn-rounded" href="#">信息</a>
<a class="btn btn-warning btn-rounded" href="#">警告</a>
<a class="btn btn-danger btn-rounded" href="#">危险</a>
<a class="btn btn-danger btn-rounded btn-outline" href="#">危险</a>
<br/>
<br/>
<a class="btn btn-primary btn-rounded btn-block" href="buttons.html#"><i class="fa fa-info-circle"></i> 圆角块级带图标按钮</a>
<a class="btn btn-primary btn-rounded btn-block" href="#"><i class="fa fa-info-circle"></i> 圆角块级带图标按钮</a>
</p>
</div>
</div>
@@ -0,0 +1,161 @@
<!DOCTYPE html>
<html lang="zh">
<head>
<th:block th:include="include :: header('多级联动下拉')" />
</head>
<body class="gray-bg">
<div class="wrapper wrapper-content animated fadeInRight">
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>多级联动下拉<small>https://github.com/ciaoca/cxSelect</small></h5>
</div>
<div class="ibox-content">
<p>简单联动示例。</p>
<div id="element" class="row">
<div class="col-sm-2">
<select class="type form-control m-b" data-first-title="请选择">
<option value="">请选择</option>
</select>
</div>
<div class="col-sm-2">
<select class="router form-control m-b" data-first-title="请选择">
<option value="">请选择</option>
</select>
</div>
</div>
<hr>
<p>国内省市区联动。</p>
<div id="element1" class="row">
<div class="col-sm-2">
<select class="province form-control m-b" data-first-title="选择省">
<option value="">请选择</option>
<option value="广东省" selected>广东省</option>
</select>
</div>
<div class="col-sm-2">
<select class="city form-control m-b" data-first-title="选择市">
<option value="">请选择</option>
<option value="深圳市" selected>深圳市</option>
</select>
</div>
<div class="col-sm-2">
<select class="area form-control m-b" data-first-title="选择地区">
<option value="">请选择</option>
<option value="南山区" selected>南山区</option>
</select>
</div>
</div>
<hr>
<p>自定义选项。</p>
<div id="element2" class="row">
<div class="col-sm-2">
<select class="first form-control m-b"></select>
</div>
<div class="col-sm-2">
<select class="second form-control m-b"></select>
</div>
<div class="col-sm-2">
<select class="third form-control m-b"></select>
</div>
<div class="col-sm-2">
<select class="fourth form-control m-b"></select>
</div>
<div class="col-sm-2">
<select class="fifth form-control m-b"></select>
</div>
</div>
<hr>
<div class="form-group">
<label class="font-noraml">相关参数详细信息</label>
<div><a href="http://doc.ruoyi.vip/ruoyi/document/zjwd.html#jquery-cxselect" target="_blank">http://doc.ruoyi.vip/ruoyi/document/zjwd.html#jquery-cxselect</a></div>
</div>
</div>
</div>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: jquery-cxselect-js" />
<script th:inline="javascript">
// 直接返回获取
var data = [[${data}]];
$('#element').cxSelect({
selects: ['type', 'router'],
jsonValue: 'v',
data: data
});
// 通过默认url获取
var urlChina = 'cityData';
$.cxSelect.defaults.url = urlChina;
$('#element1').cxSelect({
selects: ['province', 'city', 'area'],
nodata: 'none'
});
// 固定值获取
$('#element2').cxSelect({
selects: ['first', 'second', 'third', 'fourth', 'fifth'],
required: true,
jsonValue: 'v',
data: [
{'v': '1', 'n': '第一级 >', 's': [
{'v': '2', 'n': '第二级 >', 's': [
{'v': '3', 'n': '第三级 >', 's': [
{'v': '4', 'n': '第四级 >', 's': [
{'v': '5', 'n': '第五级 >', 's': [
{'v': '6', 'n': '第六级 >'}
]}
]}
]}
]}
]},
{'v': 'test number', 'n': '测试数字', 's': [
{'v': 'text', 'n': '文本类型', 's': [
{'v': '4', 'n': '4'},
{'v': '5', 'n': '5'},
{'v': '6', 'n': '6'},
{'v': '7', 'n': '7'},
{'v': '8', 'n': '8'},
{'v': '9', 'n': '9'},
{'v': '10', 'n': '10'}
]},
{'v': 'number', 'n': '数值类型', 's': [
{'v': 11, 'n': 11},
{'v': 12, 'n': 12},
{'v': 13, 'n': 13},
{'v': 14, 'n': 14},
{'v': 15, 'n': 15},
{'v': 16, 'n': 16},
{'v': 17, 'n': 17}
]}
]},
{'v': 'test boolean','n': '测试 Boolean 类型', 's': [
{'v': true ,'n': true},
{'v': false ,'n': false}
]},
{v: 'test quotes', n: '测试属性不加引号', s: [
{v: 'quotes', n: '引号'}
]},
{v: 'test other', n: '测试奇怪的值', s: [
{v: '[]', n: '数组(空)'},
{v: [1,2,3], n: '数组(数值)'},
{v: ['a','b','c'], n: '数组(文字)'},
{v: new Date(), n: '日期'},
{v: new RegExp('\\d+'), n: '正则对象'},
{v: /\d+/, n: '正则直接量'},
{v: {}, n: '对象'},
{v: document.getElementById('custom_data'), n: 'DOM'},
{v: null, n: 'Null'},
{n: '未设置 value'}
]},
{'v': '' , 'n': '无子级'}
]
});
</script>
</body>
</html>
@@ -14,13 +14,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="grid_options.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="grid_options.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="grid_options.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -124,13 +124,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="grid_options.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="grid_options.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="grid_options.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -183,13 +183,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="grid_options.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="grid_options.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="grid_options.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -227,13 +227,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="grid_options.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="grid_options.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="grid_options.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -270,13 +270,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="grid_options.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="grid_options.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="grid_options.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -285,7 +285,7 @@
</div>
</div>
<div class="ibox-content">
<p>在等宽的4网格中,网格不等高会碰到问题,为了解决这个问题,可使用<code>.clearfix</code><a href="grid_options.html#responsive-utilities">响应实用工具类</a>
<p>在等宽的4网格中,网格不等高会碰到问题,为了解决这个问题,可使用<code>.clearfix</code><a href="#responsive-utilities">响应实用工具类</a>
</p>
<div class="row show-grid">
<div class="col-xs-6 col-sm-3">
@@ -315,13 +315,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="grid_options.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="grid_options.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="grid_options.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -358,13 +358,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="grid_options.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="grid_options.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="grid_options.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -401,13 +401,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="grid_options.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="grid_options.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="grid_options.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -17,7 +17,7 @@
<h2>若依后台管理系统</h2>
<p>ruoyi是一个完全响应式,基于Bootstrap3.3.6最新版本开发的扁平化主题,她采用了主流的左右两栏式布局,使用了Html5+CSS3等现代技术,她提供了诸多的强大的可以重新组合的UI组件,并集成了最新的jQuery版本(v2.1.1),当然,也集成了很多功能强大,用途广泛的就jQuery插件,她可以用于所有的Web应用程序,如<b>网站管理后台</b><b>网站会员中心</b><b>CMS</b><b>CRM</b><b>OA</b>等等,当然,您也可以对她进行深度定制,以做出更强系统。</p>
<p>
<b>当前版本:</b>v4.1.0
<b>当前版本:</b>v4.3.1
</p>
<p>
<span class="label label-warning">免费开源</span>
@@ -56,7 +56,7 @@
<h3>你好,若依 </h3>
<p>H+是一个完全响应式,基于Bootstrap3.3.6最新版本开发的扁平化主题,她采用了主流的左右两栏式布局,使用了Html5+CSS3等现代技术,她提供了诸多的强大的可以重新组合的UI组件,并集成了最新的jQuery版本(v2.1.1),当然,也集成了很多功能强大,用途广泛的就jQuery插件,她可以用于所有的Web应用程序,如<b>网站管理后台</b><b>网站会员中心</b><b>CMS</b><b>CRM</b><b>OA</b>等等,当然,您也可以对她进行深度定制,以做出更强系统。</p>
<p>
<b>当前版本:</b>v4.1.0
<b>当前版本:</b>v4.3.1
</p>
<p>
<span class="label label-warning">开源免费</span>
@@ -14,13 +14,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="tabs_panels.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="tabs_panels.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="tabs_panels.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -76,13 +76,13 @@
<div class="panel-options">
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="tabs_panels.html#tab-4"><i class="fa fa-laptop"></i></a>
<li class="active"><a data-toggle="tab" href="#tab-4"><i class="fa fa-laptop"></i></a>
</li>
<li class=""><a data-toggle="tab" href="tabs_panels.html#tab-5"><i class="fa fa-desktop"></i></a>
<li class=""><a data-toggle="tab" href="#tab-5"><i class="fa fa-desktop"></i></a>
</li>
<li class=""><a data-toggle="tab" href="tabs_panels.html#tab-6"><i class="fa fa-signal"></i></a>
<li class=""><a data-toggle="tab" href="#tab-6"><i class="fa fa-signal"></i></a>
</li>
<li class=""><a data-toggle="tab" href="tabs_panels.html#tab-7"><i class="fa fa-bar-chart-o"></i></a>
<li class=""><a data-toggle="tab" href="#tab-7"><i class="fa fa-bar-chart-o"></i></a>
</li>
</ul>
</div>
@@ -273,13 +273,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="tabs_panels.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="tabs_panels.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="tabs_panels.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -293,7 +293,7 @@
<div class="panel panel-default">
<div class="panel-heading">
<h5 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="tabs_panels.html#collapseOne">标题 #1</a>
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">标题 #1</a>
</h5>
</div>
<div id="collapseOne" class="panel-collapse collapse in">
@@ -305,7 +305,7 @@
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="tabs_panels.html#collapseTwo">标题 #2</a>
<a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">标题 #2</a>
</h4>
</div>
<div id="collapseTwo" class="panel-collapse collapse">
@@ -317,7 +317,7 @@
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="tabs_panels.html#collapseThree">标题 #3</a>
<a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">标题 #3</a>
</h4>
</div>
<div id="collapseThree" class="panel-collapse collapse">
@@ -19,13 +19,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="icons.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="icons.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="icons.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -19,13 +19,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="icons.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="icons.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="icons.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -9,7 +9,7 @@
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label"><span style="color: red; ">*</span>用户名称:</label>
<label class="col-sm-4 control-label is-required">用户名称:</label>
<div class="col-sm-8">
<input name="userName" placeholder="请输入用户名称" class="form-control" type="text">
</div>
@@ -17,7 +17,7 @@
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label"><span style="color: red; ">*</span>归属部门:</label>
<label class="col-sm-4 control-label is-required">归属部门:</label>
<div class="col-sm-8">
<div class="input-group">
<input name="deptName" type="text" placeholder="请选择归属部门" class="form-control">
@@ -30,7 +30,7 @@
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label"><span style="color: red; ">*</span>手机号码:</label>
<label class="col-sm-4 control-label is-required">手机号码:</label>
<div class="col-sm-8">
<input name="phonenumber" placeholder="请输入手机号码" class="form-control" type="text">
</div>
@@ -38,7 +38,7 @@
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label"><span style="color: red; ">*</span>邮箱:</label>
<label class="col-sm-4 control-label is-required">邮箱:</label>
<div class="col-sm-8">
<input name="email" class="form-control" type="text" placeholder="请输入邮箱">
</div>
@@ -48,7 +48,7 @@
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label"><span style="color: red; ">*</span>登录账号:</label>
<label class="col-sm-4 control-label is-required">登录账号:</label>
<div class="col-sm-8">
<input name="loginName" placeholder="请输入登录账号" class="form-control" type="text">
</div>
@@ -56,7 +56,7 @@
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label"><span style="color: red; ">*</span>登录密码:</label>
<label class="col-sm-4 control-label is-required">登录密码:</label>
<div class="col-sm-8">
<input name="password" placeholder="请输入登录密码" class="form-control" type="password">
</div>
@@ -13,7 +13,7 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label ">用户姓名:</label>
<label class="col-sm-3 control-label">用户姓名:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="userName" id="userName" required>
</div>
@@ -11,7 +11,7 @@
<div class="form-control-static" th:text="${user.userCode}"></div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label ">用户姓名:</label>
<label class="col-sm-3 control-label">用户姓名:</label>
<div class="col-sm-8">
<div class="form-control-static" th:text="${user.userName}"></div>
</div>
@@ -14,7 +14,7 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label ">用户姓名:</label>
<label class="col-sm-3 control-label">用户姓名:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="userName" id="userName" th:field="*{userName}" required>
</div>
@@ -23,13 +23,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_flot.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="graph_flot.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="graph_flot.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -50,13 +50,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_flot.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="graph_flot.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="graph_flot.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -80,13 +80,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_flot.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="graph_flot.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="graph_flot.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -107,13 +107,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_flot.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="graph_flot.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="graph_flot.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -134,13 +134,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_flot.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="graph_flot.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="graph_flot.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -161,13 +161,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_flot.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="graph_flot.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="graph_flot.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -188,13 +188,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_flot.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="graph_flot.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="graph_flot.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -215,13 +215,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_flot.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="graph_flot.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="graph_flot.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -245,13 +245,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_flot.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="graph_flot.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="graph_flot.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -98,13 +98,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_sparkline.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="graph_sparkline.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="graph_sparkline.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -125,13 +125,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_sparkline.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="graph_sparkline.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="graph_sparkline.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -152,13 +152,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_sparkline.html#">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="graph_sparkline.html#">选项1</a>
<li><a href="#">选项1</a>
</li>
<li><a href="graph_sparkline.html#">选项2</a>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
@@ -77,12 +77,12 @@
});
initChildTable = function(index, row, $detail) {
var cur_table = $detail.html('<table style="table-layout:fixed"></table>').find('table');
$(cur_table).bootstrapTable({
var childTable = $detail.html('<table style="table-layout:fixed"></table>').find('table');
$(childTable).bootstrapTable({
url: prefix + "/list",
method: 'post',
sidePagination: "server",
contentType: "application/x-www-form-urlencoded", // 编码类型
contentType: "application/x-www-form-urlencoded",
queryParams : {
userName: '测试8'
},
@@ -0,0 +1,76 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('加载data数据')" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
<div th:include="include :: footer"></div>
<script th:inline="javascript">
var datas = [[${@dict.getType('sys_normal_disable')}]];
$(function() {
var options = {
data: [[${users}]],
sidePagination: "client",
showSearch: false,
showRefresh: false,
showToggle: false,
showColumns: false,
columns: [{
checkbox: true
},
{
field : 'userId',
title : '用户ID'
},
{
field : 'userCode',
title : '用户编号'
},
{
field : 'userName',
title : '用户姓名'
},
{
field : 'userPhone',
title : '用户手机'
},
{
field : 'userEmail',
title : '用户邮箱'
},
{
field : 'userBalance',
title : '用户余额'
},
{
field: 'status',
title: '用户状态',
align: 'center',
formatter: function(value, row, index) {
return $.table.selectDictLabel(datas, value);
}
},
{
title: '操作',
align: 'center',
formatter: function(value, row, index) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs" href="#"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs" href="#"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]
};
$.table.init(options);
});
</script>
</body>
</html>
@@ -35,7 +35,7 @@
<i class="fa fa-remove"></i> 删除
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<div class="col-xs-12 select-table table-striped">
<table id="bootstrap-table1"></table>
</div>
</div>
@@ -73,7 +73,7 @@
<i class="fa fa-remove"></i> 删除
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<div class="col-xs-12 select-table table-striped">
<table id="bootstrap-table2"></table>
</div>
</div>
@@ -62,6 +62,29 @@
</form>
</div>
<div class="col-sm-12 search-collapse">
<p class="select-title">多级联动下拉查询</p>
<form id="select-form">
<div class="select-list">
<ul id="element">
<li>
商户编号:<input type="text" name="userId"/>
</li>
<li>
充值类型:<select class="type"></select>
</li>
<li>
充值路由:<select class="router"></select>
</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-warning btn-rounded btn-sm" onclick="$.form.reset('select-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="col-sm-12 search-collapse">
<p class="select-title">下拉多选条件查询</p>
<form id="select-form">
@@ -97,19 +120,19 @@
<div class="select-list">
<ul>
<li>
<p style="width: 80px">商户编号:</p>
<label style="width: 80px">商户编号:</label>
<input type="text" name="userId"/>
</li>
<li>
<p style="width: 80px">订单号:</p>
<label style="width: 80px">订单号:</label>
<input type="text" name="orderNo"/>
</li>
<li>
<p style="width: 80px">日期:</p>
<label style="width: 80px">日期:</label>
<input type="text" class="time-input" placeholder="日期"/>
</li>
<li class="select-selectpicker">
<p style="width: 80px">状态:</p>
<label style="width: 80px">状态:</label>
<select class="selectpicker" data-none-selected-text="请选择" multiple>
<option value="">所有</option>
<option value="0">初始</option>
@@ -119,7 +142,7 @@
</select>
</li>
<li>
<p style="width: 80px">供货商通道:</p>
<label style="width: 80px">供货商通道:</label>
<select>
<option value="">所有</option>
<option value="0">腾讯</option>
@@ -128,7 +151,7 @@
</select>
</li>
<li>
<p style="width: 80px">来源:</p>
<label style="width: 80px">来源:</label>
<select>
<option value="">所有</option>
<option value="0">手机</option>
@@ -137,7 +160,7 @@
</select>
</li>
<li>
<p style="width: 80px">运营商:</p>
<label style="width: 80px">运营商:</label>
<select>
<option value="">所有</option>
<option value="0">移动</option>
@@ -146,7 +169,7 @@
</select>
</li>
<li class="select-time">
<p style="width: 80px">回调时间:</p>
<label style="width: 80px">回调时间:</label>
<input type="text" class="time-input" placeholder="开始时间"/>
<span>-</span>
<input type="text" class="time-input" placeholder="结束时间"/>
@@ -164,5 +187,16 @@
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: bootstrap-select-js" />
<th:block th:include="include :: jquery-cxselect-js" />
<script th:inline="javascript">
// 直接返回获取
var data = [{"v":"taobao","n":"淘宝","s":[{"v":"tm","n":"天猫"},{"v":"jhs","n":"聚划算"}]},{"v":"jd","n":"京东","s":[{"v":"jdcs","n":"京东超市"},{"v":"jdsx","n":"京东生鲜"}]}];
$('#element').cxSelect({
selects: ['type', 'router'],
jsonValue: 'v',
data: data
});
</script>
</body>
</html>
@@ -0,0 +1,185 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('主子表提交')" />
<th:block th:include="include :: datetimepicker-css" />
</head>
<body class="gray-bg">
<div class="main-content">
<form id="form-add" class="form-horizontal">
<input name="deptId" type="hidden" id="treeId"/>
<h4 class="form-header h4">客户信息</h4>
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label is-required">客户名称:</label>
<div class="col-sm-8">
<input name="name" placeholder="请输入客户名称" class="form-control" type="text" maxlength="30">
</div>
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label is-required">用户性别:</label>
<div class="col-sm-8">
<select name="sex" class="form-control" th:with="type=${@dict.getType('sys_user_sex')}">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label is-required">手机号码:</label>
<div class="col-sm-8">
<input id="phonenumber" name="phonenumber" placeholder="请输入手机号码" class="form-control" type="text" maxlength="11">
</div>
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label is-required">生日:</label>
<div class="col-sm-8">
<div class="input-group date">
<input name="birthday" class="form-control" placeholder="yyyy-MM-dd" type="text">
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="form-group">
<label class="col-xs-2 control-label">备注:</label>
<div class="col-xs-10">
<textarea name="remark" maxlength="500" class="form-control" rows="3"></textarea>
</div>
</div>
</div>
</div>
<h4 class="form-header h4">商品数据</h4>
<div class="row">
<div class="col-sm-12">
<button type="button" class="btn btn-white btn-sm" onclick="addColumn()"><i class="fa fa-plus"> 增加</i></button>
<button type="button" class="btn btn-white btn-sm" onclick="sub.delColumn()"><i class="fa fa-minus"> 删除</i></button>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
</form>
</div>
<div class="row">
<div class="col-sm-offset-5 col-sm-10">
<button type="button" class="btn btn-sm btn-primary" onclick="submitHandler()"><i class="fa fa-check"></i>保 存</button>&nbsp;
<button type="button" class="btn btn-sm btn-danger" onclick="closeItem()"><i class="fa fa-reply-all"></i>关 闭 </button>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: datetimepicker-js" />
<script th:src="@{/js/jquery.tmpl.js}"></script>
<script th:inline="javascript">
$(function() {
var options = {
pagination: false,
showSearch: false,
showRefresh: false,
showToggle: false,
showColumns: false,
columns: [{
checkbox: true
},
{
field: 'index',
align: 'center',
title: "序号",
formatter: function (value, row, index) {
var columnIndex = $.common.sprintf("<input type='hidden' name='index' value='%s'>", $.table.serialNumber(index));
return columnIndex + $.table.serialNumber(index);
}
},
{
field: 'name',
align: 'center',
title: '商品名称',
formatter: function(value, row, index) {
var html = $.common.sprintf("<input class='form-control' type='text' name='goods[%s].name' value='%s'>", index, value);
return html;
}
},
{
field: 'weight',
align: 'center',
title: '商品重量',
formatter: function(value, row, index) {
var html = $.common.sprintf("<input class='form-control' type='text' name='goods[%s].weight' value='%s'>", index, value);
return html;
}
},
{
field: 'price',
align: 'center',
title: '商品价格',
formatter: function(value, row, index) {
var html = $.common.sprintf("<input class='form-control' type='text' name='goods[%s].price' value='%s'>", index, value);
return html;
}
},
{
field: 'type',
align: 'center',
title: '商品种类',
formatter: function(value, row, index) {
var data = [{ index: index, type: value }];
return $("#goodsTypeTpl").tmpl(data).html();
}
}]
};
$.table.init(options);
});
/* 主子表-提交 */
function submitHandler(index, layero){
var data = $("#form-add").serializeArray();
$.operate.saveModal("/demo/operate/customer/add", data);
}
$("input[name='birthday']").datetimepicker({
format: "yyyy-mm-dd",
minView: "month",
autoclose: true
});
function addColumn() {
var count = $("#" + table.options.id).bootstrapTable('getData').length;
sub.editColumn();
$("#" + table.options.id).bootstrapTable('insertRow', {
index: count,
row: {
index: $.table.serialNumber(count),
name: "",
weight: "",
price: "",
type: "",
}
});
}
</script>
</body>
</html>
<!-- 商品类型 -->
<script id="goodsTypeTpl" type="text/x-jquery-tmpl">
<div>
<select class='form-control' name='goods[${index}].type'>
<option value="">所有</option>
<option value="0" {{if type==="0"}}selected{{/if}}>寒性</option>
<option value="1" {{if type==="1"}}selected{{/if}}>热性</option>
</select>
</div>
</script>
@@ -4,9 +4,9 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RuoYi - 404</title>
<link href="/css/bootstrap.min.css" rel="stylesheet"/>
<link href="/css/animate.css" rel="stylesheet"/>
<link href="/css/style.css" rel="stylesheet"/>
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
<link th:href="@{/css/animate.css}" rel="stylesheet"/>
<link th:href="@{/css/style.css}" rel="stylesheet"/>
</head>
<body class="gray-bg">
<div class="middle-box text-center animated fadeInDown">
@@ -14,8 +14,14 @@
<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:index()" class="btn btn-primary m-t">主页</a>
</div>
</div>
<script th:inline="javascript">
var ctx = [[@{/}]];
function index() {
window.parent.frames.location.href = ctx + "index";
}
</script>
</body>
</html>
@@ -4,9 +4,9 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RuoYi - 500</title>
<link href="/css/bootstrap.min.css" rel="stylesheet"/>
<link href="/css/animate.css" rel="stylesheet"/>
<link href="/css/style.css" rel="stylesheet"/>
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
<link th:href="@{/css/animate.css}" rel="stylesheet"/>
<link th:href="@{/css/style.css}" rel="stylesheet"/>
</head>
<body class="gray-bg">
<div class="middle-box text-center animated fadeInDown">
@@ -15,8 +15,14 @@
<div class="error-desc">
服务器遇到意外事件,不允许完成请求。我们抱歉。您可以返回主页面。
<a href="javascript:top.document.location.href='/'" class="btn btn-primary m-t">主页</a>
<a href="javascript:index()" class="btn btn-primary m-t">主页</a>
</div>
</div>
<script th:inline="javascript">
var ctx = [[@{/}]];
function index() {
window.parent.frames.location.href = ctx + "index";
}
</script>
</body>
</html>
@@ -4,9 +4,9 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RuoYi - 403</title>
<link href="/css/bootstrap.min.css" rel="stylesheet"/>
<link href="/css/animate.css" rel="stylesheet"/>
<link href="/css/style.css" rel="stylesheet"/>
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
<link th:href="@{/css/animate.css}" rel="stylesheet"/>
<link th:href="@{/css/style.css}" rel="stylesheet"/>
</head>
<body class="gray-bg">
<div class="middle-box text-center animated fadeInDown">
@@ -4,9 +4,9 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RuoYi - 403</title>
<link href="/css/bootstrap.min.css" rel="stylesheet"/>
<link href="/css/animate.css" rel="stylesheet"/>
<link href="/css/style.css" rel="stylesheet"/>
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
<link th:href="@{/css/animate.css}" rel="stylesheet"/>
<link th:href="@{/css/style.css}" rel="stylesheet"/>
</head>
<body class="gray-bg">
<div class="middle-box text-center animated fadeInDown">
@@ -15,8 +15,14 @@
<div class="error-desc">
对不起,您没有访问权限,请不要进行非法操作!您可以返回主页面
<a href="javascript:top.document.location.href='/'" class="btn btn-outline btn-primary btn-xs">返回主页</a>
<a href="javascript:index()" class="btn btn-outline btn-primary btn-xs">返回主页</a>
</div>
</div>
<script th:inline="javascript">
var ctx = [[@{/}]];
function index() {
window.parent.frames.location.href = ctx + "index";
}
</script>
</body>
</html>
@@ -2,6 +2,7 @@
<head th:fragment=header(title)>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="keywords" content="">
<meta name="description" content="">
<title th:text="${title}"></title>
@@ -11,16 +12,17 @@
<!-- bootstrap-table 表格插件样式 -->
<link th:href="@{/ajax/libs/bootstrap-table/bootstrap-table.min.css}" rel="stylesheet"/>
<link th:href="@{/css/animate.css}" rel="stylesheet"/>
<link th:href="@{/css/style.css}" rel="stylesheet"/>
<link th:href="@{/css/style.css?v=20200318}" rel="stylesheet"/>
<link th:href="@{/ruoyi/css/ry-ui.css}" rel="stylesheet"/>
</head>
<!-- 通用JS -->
<div th:fragment="footer">
<a id="scroll-up" href="#" class="btn btn-sm display"><i class="fa fa-angle-double-up"></i></a>
<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/bootstrap-table.min.js?v=20200529}"></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.js}"></script>
<script th:src="@{/ajax/libs/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.min.js}"></script>
@@ -39,8 +41,8 @@
<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=4.1.0}"></script>
<script th:src="@{/ruoyi/js/ry-ui.js?v=4.1.0}"></script>
<script th:src="@{/ruoyi/js/common.js?v=4.3.1}"></script>
<script th:src="@{/ruoyi/js/ry-ui.js?v=4.3.1}"></script>
<script th:inline="javascript"> var ctx = [[@{/}]]; </script>
</div>
@@ -74,7 +76,7 @@
<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>
<script th:src="@{/ajax/libs/datapicker/bootstrap-datetimepicker.min.js}"></script>
</div>
<!-- ui布局插件 -->
@@ -137,6 +139,11 @@
<script th:src="@{/ajax/libs/typeahead/bootstrap3-typeahead.min.js}"></script>
</div>
<!-- 多级联动下拉 -->
<div th:fragment="jquery-cxselect-js">
<script th:src="@{/ajax/libs/cxselect/jquery.cxselect.min.js}"></script>
</div>
<!-- jsonview格式化和语法高亮JSON格式数据查看插件 -->
<div th:fragment="jsonview-css">
<link th:href="@{/ajax/libs/jsonview/jquery.jsonview.css}" rel="stylesheet"/>
@@ -5,9 +5,8 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="renderer" content="webkit">
<title>若依系统首页</title>
<!--[if lt IE 9]>
<meta http-equiv="refresh" content="0;ie.html"/>
<![endif]-->
<!-- 避免IE使用兼容模式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link th:href="@{favicon.ico}" rel="stylesheet"/>
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
<link th:href="@{/css/jquery.contextMenu.min.css}" rel="stylesheet"/>
@@ -15,7 +14,7 @@
<link th:href="@{/css/animate.css}" rel="stylesheet"/>
<link th:href="@{/css/style.css}" rel="stylesheet"/>
<link th:href="@{/css/skins.css}" rel="stylesheet"/>
<link th:href="@{/ruoyi/css/ry-ui.css?v=4.1.0}" rel="stylesheet"/>
<link th:href="@{/ruoyi/css/ry-ui.css?v=4.3.1}" rel="stylesheet"/>
</head>
<body class="fixed-sidebar full-height-layout gray-bg" style="overflow: hidden">
<div id="wrapper">
@@ -25,19 +24,19 @@
<div class="nav-close">
<i class="fa fa-times-circle"></i>
</div>
<a th:href="@{/index}">
<li class="logo hidden-xs">
<span class="logo-lg">RuoYi</span>
</li>
</a>
<div class="sidebar-collapse">
<ul class="nav" id="side-menu">
<a th:href="@{/index}">
<li class="logo">
<span class="logo-lg" >RuoYi</span>
</li>
</a>
<li>
<div class="user-panel">
<a class="menuItem" title="个人中心" th:href="@{/system/user/profile}">
<a class="menuItem noactive" 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} : @{${user.avatar}}" class="img-circle" alt="User Image">
<img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{${user.avatar}}" th:onerror="this.src='img/profile.jpg'" class="img-circle" alt="User Image">
</div>
</a>
<div class="pull-left info">
@@ -48,15 +47,12 @@
</div>
</li>
<li>
<a href="#"><i class="fa fa-home"></i> <span class="nav-label"></span> <span class="fa arrow"></span></a>
<ul class="nav nav-second-level">
<li><a class="menuItem" th:href="@{/system/main}">了解若依</a></li>
</ul>
<a class="menuItem" th:href="@{/system/main}"><i class="fa fa-home"></i> <span class="nav-label"></span> </a>
</li>
<li th:each="menu : ${menus}">
<a th:class="@{${menu.url != '' && menu.url != '#'} ? ${menu.target}}" th:href="@{${menu.url == ''} ? |#| : ${menu.url}}">
<i class="fa fa-bar-chart-o" th:class="${menu.icon}"></i>
<span class="nav-label" th:text="${menu.menuName}">一级菜单</span>
<span class="nav-label" th:text="${menu.menuName}">一级菜单</span>
<span th:class="${menu.url == '' || menu.url == '#'} ? |fa arrow|"></span>
</a>
<ul class="nav nav-second-level collapse">
@@ -64,7 +60,13 @@
<a th:if="${#lists.isEmpty(cmenu.children)}" th:class="${cmenu.target == ''} ? |menuItem| : ${cmenu.target}" th:utext="${cmenu.menuName}" th:href="@{${cmenu.url}}">二级菜单</a>
<a th:if="${not #lists.isEmpty(cmenu.children)}" href="#">[[${cmenu.menuName}]]<span class="fa arrow"></span></a>
<ul th:if="${not #lists.isEmpty(cmenu.children)}" class="nav nav-third-level">
<li th:each="emenu : ${cmenu.children}"><a th:class="${emenu.target == ''} ? |menuItem| : ${emenu.target}" th:text="${emenu.menuName}" th:href="@{${emenu.url}}">三级菜单</a></li>
<li th:each="emenu : ${cmenu.children}">
<a th:if="${#lists.isEmpty(emenu.children)}" th:class="${emenu.target == ''} ? |menuItem| : ${emenu.target}" th:text="${emenu.menuName}" th:href="@{${emenu.url}}">三级菜单</a>
<a th:if="${not #lists.isEmpty(emenu.children)}" href="#">[[${emenu.menuName}]]<span class="fa arrow"></span></a>
<ul th:if="${not #lists.isEmpty(emenu.children)}" class="nav nav-four-level">
<li th:each="fmenu : ${emenu.children}"><a th:if="${#lists.isEmpty(fmenu.children)}" th:class="${fmenu.target == ''} ? |menuItem| : ${fmenu.target}" th:text="${fmenu.menuName}" th:href="@{${fmenu.url}}">四级菜单</a></li>
</ul>
</li>
</ul>
</li>
</ul>
@@ -90,6 +92,7 @@
<li><a class="menuItem" th:href="@{/demo/form/summernote}">富文本编辑器</a></li>
<li><a class="menuItem" th:href="@{/demo/form/duallistbox}">左右互选组件</a></li>
<li><a class="menuItem" th:href="@{/demo/form/autocomplete}">搜索自动补全</a></li>
<li><a class="menuItem" th:href="@{/demo/form/cxselect}">多级联动下拉</a></li>
</ul>
</li>
<li> <a>表格<span class="fa arrow"></span></a>
@@ -103,6 +106,7 @@
<li><a class="menuItem" th:href="@{/demo/table/params}">自定义查询参数</a></li>
<li><a class="menuItem" th:href="@{/demo/table/multi}">初始多表格</a></li>
<li><a class="menuItem" th:href="@{/demo/table/button}">点击按钮加载表格</a></li>
<li><a class="menuItem" th:href="@{/demo/table/data}">直接加载表格数据</a></li>
<li><a class="menuItem" th:href="@{/demo/table/fixedColumns}">表格冻结列</a></li>
<li><a class="menuItem" th:href="@{/demo/table/event}">自定义触发事件</a></li>
<li><a class="menuItem" th:href="@{/demo/table/detail}">表格细节视图</a></li>
@@ -111,6 +115,7 @@
<li><a class="menuItem" th:href="@{/demo/table/curd}">动态增删改查</a></li>
<li><a class="menuItem" th:href="@{/demo/table/reorder}">表格拖拽操作</a></li>
<li><a class="menuItem" th:href="@{/demo/table/editable}">表格行内编辑</a></li>
<li><a class="menuItem" th:href="@{/demo/table/subdata}">主子表提交</a></li>
<li><a class="menuItem" th:href="@{/demo/table/other}">表格其他操作</a></li>
</ul>
</li>
@@ -142,8 +147,8 @@
</ul>
</li>
<li>
<a href="#"><i class="fa fa-sitemap"></i> <span class="nav-label">四层菜单 </span><span class="fa arrow"></span></a>
<ul class="nav nav-second-level collapse">
<a href="#"><i class="fa fa-sitemap"></i>四层菜单<span class="fa arrow"></span></a>
<ul class="nav nav-third-level collapse">
<li>
<a href="#" id="damian">三级菜单1<span class="fa arrow"></span></a>
<ul class="nav nav-third-level">
@@ -164,7 +169,7 @@
</div>
</nav>
<!--左侧导航结束-->
<!--右侧部分开始-->
<div id="page-wrapper" class="gray-bg dashbard-1">
<div class="row border-bottom">
@@ -175,13 +180,13 @@
</a>
</div>
<ul class="nav navbar-top-links navbar-right welcome-message">
<li><a title="视频教程" href="http://doc.ruoyi.vip/ruoyi/document/spjc.html" target="_blank"><i class="fa fa-video-camera"></i> 视频教程</a></li>
<li><a title="视频教程" href="http://doc.ruoyi.vip/ruoyi/document/spjc.html" target="_blank"><i class="fa fa-video-camera"></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="全屏显示" href="javascript:void(0)" id="fullScreen"><i class="fa fa-arrows-alt"></i> 全屏显示</a></li>
<li class="dropdown user-menu">
<a href="javascript:void(0)" class="dropdown-toggle" data-hover="dropdown">
<img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{${user.avatar}}" class="user-image">
<span class="hidden-xs">[[${user.userName}]]</span>
<img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{${user.avatar}}" th:onerror="this.src='img/profile.jpg'" class="user-image">
<span class="hidden-xs">[[${#strings.defaultString(user.userName, '-')}]]</span>
</a>
<ul class="dropdown-menu">
<li class="mt5">
@@ -220,9 +225,9 @@
</button>
<a href="javascript:void(0);" 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>
@@ -241,22 +246,28 @@
<script th:src="@{/js/jquery.contextMenu.min.js}"></script>
<script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
<script th:src="@{/ajax/libs/layer/layer.min.js}"></script>
<script th:src="@{/ruoyi/js/ry-ui.js?v=4.1.0}"></script>
<script th:src="@{/ruoyi/js/common.js?v=4.1.0}"></script>
<script th:src="@{/ruoyi/js/ry-ui.js?v=4.3.1}"></script>
<script th:src="@{/ruoyi/js/common.js?v=4.3.1}"></script>
<script th:src="@{/ruoyi/index.js}"></script>
<script th:src="@{/ajax/libs/fullscreen/jquery.fullscreen.js}"></script>
<script th:inline="javascript">
var ctx = [[@{/}]];
// 皮肤缓存
var skin = storage.get("skin");
// history(表示去掉地址的#)否则地址以"#"形式展示
var mode = "history";
// 历史访问路径缓存
var historyPath = storage.get("historyPath");
// 是否页签与菜单联动
var isLinkage = true;
// 本地主题优先,未设置取系统配置
if($.common.isNotEmpty(skin)){
$("body").addClass(skin.split('|')[0]);
$("body").addClass(skin.split('|')[1]);
} else {
var sideTheme = [[${@config.getKey('sys.index.sideTheme')}]];
var skinName = [[${@config.getKey('sys.index.skinName')}]];
$("body").addClass(sideTheme);
$("body").addClass(skinName);
$("body").addClass([[${sideTheme}]]);
$("body").addClass([[${skinName}]]);
}
/* 用户管理-重置密码 */
@@ -275,18 +286,27 @@ function switchSkin() {
})
}
// 排除非左侧菜单链接
var excludesUrl = ["/system/user/profile"];
/** 刷新时访问路径页签 */
function applyPath(url) {
$('a[href$="' + decodeURI(url) + '"]').click();
if (!$('a[href$="' + url + '"]').hasClass("noactive")) {
$('a[href$="' + url + '"]').parent("li").addClass("selected").parents("li").addClass("active").end().parents("ul").addClass("in");
}
}
$(function() {
var hash = location.hash;
if (hash !== '') {
var url = hash.substring(1, hash.length);
$('a[href$="' + url + '"]').click();
if($.inArray(url, excludesUrl)){
$('a[href$="' + url + '"]').parent("li").addClass("selected").parents("li").addClass("active").end().parents("ul").addClass("in");
}
}
if($.common.equals("history", mode) && window.performance.navigation.type == 1) {
var url = storage.get('publicPath');
if ($.common.isNotEmpty(url)) {
applyPath(url);
}
} else {
var hash = location.hash;
if ($.common.isNotEmpty(hash)) {
var url = hash.substring(1, hash.length);
applyPath(url);
}
}
});
</script>
</body>
@@ -3,26 +3,24 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<title>登录若依系统</title>
<meta name="description" content="若依后台管理框架">
<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=4.1.0}" rel="stylesheet"/>
<!--[if lt IE 9]>
<meta http-equiv="refresh" content="0;ie.html" />
<![endif]-->
<link href="../static/ruoyi/css/ry-ui.css" th:href="@{/ruoyi/css/ry-ui.css?v=4.3.1}" rel="stylesheet"/>
<!-- 360浏览器急速模式 -->
<meta name="renderer" content="webkit">
<!-- 避免IE使用兼容模式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="shortcut icon" href="../static/favicon.ico" th:href="@{favicon.ico}"/>
<style type="text/css">label.error { position:inherit; }</style>
<script>
if(window.top!==window.self){window.top.location=window.location};
if(window.top!==window.self){alert('未登录或登录超时。请重新登录');window.top.location=window.location};
</script>
</head>
<body class="signin">
<div class="signinpanel">
<div class="row">
<div class="col-sm-7">
@@ -39,18 +37,18 @@
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Thymeleaf</li>
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Bootstrap</li>
</ul>
<strong>还没有账号? <a href="#">立即注册&raquo;</a></strong>
<strong th:if="${@config.getKey('sys.account.registerUser')}">还没有账号? <a th:href="@{/register}">立即注册&raquo;</a></strong>
</div>
</div>
<div class="col-sm-5">
<form id="signupForm">
<form id="signupForm" autocomplete="off">
<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" 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" autocomplete="off">
<input type="text" name="validateCode" class="form-control code" placeholder="验证码" maxlength="5" />
</div>
<div class="col-xs-6">
<a href="javascript:void(0);" title="点击更换验证码">
@@ -80,7 +78,7 @@
<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/blockUI/jquery.blockUI.js" th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
<script src="../static/ruoyi/js/ry-ui.js" th:src="@{/ruoyi/js/ry-ui.js?v=4.1.0}"></script>
<script src="../static/ruoyi/js/ry-ui.js" th:src="@{/ruoyi/js/ry-ui.js?v=4.3.1}"></script>
<script src="../static/ruoyi/login.js" th:src="@{/ruoyi/login.js}"></script>
</body>
</html>
@@ -17,11 +17,9 @@
<div class="col-sm-12">
<blockquote class="text-warning" style="font-size:14px">
领取阿里云通用云产品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>
<br><a target="_blank" href="https://www.aliyun.com/minisite/goods?userCode=brki8iof">https://www.aliyun.com/minisite/goods?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><br>
阿里云Hi拼购 限量爆款 低至199元/年
<br><a target="_blank" href="https://www.aliyun.com/acts/hi-group-buying?userCode=brki8iof">https://www.aliyun.com/acts/hi-group-buying?userCode=brki8iof</a>
<h4 class="text-danger">云产品通用红包,可叠加官网常规优惠使用。(仅限新用户)</h4>
</blockquote>
@@ -81,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> <s>满1679294</s> <s>满1529866</s> <s>满1772718</s> <s>满1366522</s> <s>满1382251</s> <s>满1145125</s> <a href="https://jq.qq.com/?_wv=1027&k=5IdFWW8" target="_blank">86752435</a>
<p><i class="fa fa-qq"></i> QQ群:<s>满1389287</s> <s>满1679294</s> <s>满1529866</s> <s>满1772718</s> <s>满1366522</s> <s>满1382251</s> <s>满1145125</s> <s>满86752435</s> <s>满134072510</s> <s>满210336300</s> <a href="https://jq.qq.com/?_wv=1027&k=5omzbKc" target="_blank">339522636</a>
</p>
<p><i class="fa fa-weixin"></i> 微信:<a href="javascript:;">/ *若依</a>
</p>
@@ -98,13 +96,168 @@
<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="#v431">v4.3.1</a><code class="pull-right">2020.07.05</code>
</h5>
</div>
<div id="v431" class="panel-collapse collapse in">
<div class="panel-body">
<ol>
<li>国家信息安全漏洞(请务必保持cipherKey密钥唯一性)</li>
<li>升级shiro到最新版1.5.3 阻止权限绕过漏洞</li>
<li>修改验证码在使用后清除,防止多次使用</li>
<li>检查字符支持小数点&降级改成异常提醒</li>
<li>openOptions函数中加入自定义maxmin属性</li>
<li>支持openOptions方法最大化</li>
<li>支持openOptions方法多个按钮回调</li>
<li>新增isLinkage支持页签与菜单联动</li>
<li>修改代码生成导入表结构出现异常页面不提醒问题</li>
<li>优化用户头像发生错误,则显示一个默认头像</li>
<li>Excel导出支持字典类型</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="#v43">v4.3.0</a><code class="pull-right">2020.06.22</code>
</h5>
</div>
<div id="v43" class="panel-collapse collapse">
<div class="panel-body">
<ol>
<li>代码生成模板支持主子表</li>
<li>代码生成显示类型支持复选框</li>
<li>前端表单样式修改成圆角</li>
<li>新增回显数据字典(字符串数组)</li>
<li>修复浏览器手动缩放比例后菜单无法自适应问题</li>
<li>限制用户不允许选择系统管理员角色</li>
<li>用户信息添加输入框组图标&鼠标按下显示密码</li>
<li>升级fastjson到最新版1.2.70 修复高危安全漏洞</li>
<li>升级Bootstrap版本到v3.3.7</li>
<li>修复selectColumns方法获取子对象数据无效问题</li>
<li>修改数据源类型优先级,先根据方法,再根据类</li>
<li>修改上级部门(选择项排除本身和下级)</li>
<li>首页菜单显示调整</li>
<li>添加是否开启swagger配置</li>
<li>新增示例(主子表提交)</li>
<li>新增示例(多级联动下拉示例)</li>
<li>新增示例(表格属性data数据加载)</li>
<li>新增表格列参数(是否列选项可见ignore)</li>
<li>新增表格参数(是否启用显示卡片视图cardView)</li>
<li>新增表格参数(是否显示全屏按钮showFullscreen</li>
<li>新增表格参数(是否启用分页条无限循环的功能paginationLoop</li>
<li>新增表格参数(是否显示表头showHeader)</li>
<li>表格添加显示/隐藏所有列方法 showAllColumns/hideAllColumns</li>
<li>修复部分情况节点不展开问题</li>
<li>修复关闭标签页后刷新还是上次地址问题</li>
<li>修复选择菜单后刷新页面,菜单箭头显示不对问题</li>
<li>修复jquery表单序列化时复选框未选中不会序列化到对象中问题</li>
<li>Excel支持readConverterExp读取字符串组内容</li>
<li>更换IP地址查询接口</li>
<li>默认关闭获取ip地址</li>
<li>操作处理ajaxSuccess判断修正</li>
<li>HttpUtils.sendPost()方法,参数无需拼接参数到url</li>
<li>通用http发送方法增加参数 contentType 编码类型</li>
<li>HTML过滤器不替换&实体</li>
<li>代码生成浮点型改用BigDecimal</li>
<li>修复表单构建单选和多选框渲染问题</li>
<li>代码生成模板调整,字段为String并且必填则加空串条件</li>
<li>字典数据查询列表根据dictSort升序排序</li>
<li>修复树表对imageView和tooltip方法无效问题</li>
<li>修复Long类型比较相等问题调整</li>
<li>示例demo页面清除html链接,防止点击后跳转出现404</li>
<li>在线用户强退方法合并</li>
<li>添加校验部门包含未停用的子部门</li>
<li>取消回车自动提交表单</li>
<li>'A','I','BUTTON' 标签忽略clickToSelect事件,防止点击操作按钮时选中</li>
<li>邮箱显示截取部分字符串,防止低分辨率错位</li>
<li>代码生成列属性根据sort排序</li>
<li>修复更多操作部分浏览器不兼容情况</li>
<li>图片预览事件属性修正</li>
<li>修复冻结列排序样式无效问题</li>
<li>修复context-path的情况下个人中心刷新导致样式问题</li>
<li>全屏editFull打开适配表树</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="#v42">v4.2.0</a><code class="pull-right">2020.03.23</code>
</h5>
</div>
<div id="v42" class="panel-collapse collapse">
<div class="panel-body">
<ol>
<li>用户管理添加分配角色页面</li>
<li>定时任务添加调度日志按钮</li>
<li>新增是否开启用户注册功能</li>
<li>新增页面滚动显示返回顶部按钮</li>
<li>用户&角色&任务添加更多操作按钮</li>
<li>iframe框架页会话过期弹出超时提示</li>
<li>移动端登录不显示左侧菜单</li>
<li>侧边栏添加一套深蓝色主题</li>
<li>首页logo固定,不随菜单滚动</li>
<li>支持mode配置history(表示去掉地址栏的#)</li>
<li>任务分组字典翻译(调度日志详细)</li>
<li>字典管理添加缓存读取</li>
<li>字典数据列表标签显示样式</li>
<li>参数管理支持缓存操作</li>
<li>日期控件清空结束时间设置开始默认值为2099-12-31</li>
<li>表格树添加获取数据后响应回调处理</li>
<li>批量替换表前缀调整</li>
<li>支持表格导入模板的弹窗表单加入其它输入控件</li>
<li>表单重置刷新表格树</li>
<li>新增支持导出数据字段排序</li>
<li>新增表格参数(是否单选checkbox)</li>
<li>druid未授权不允许访问</li>
<li>表格树父节点兼容0,'0','',null</li>
<li>表单必填的项添加星号</li>
<li>修复select2不显示校验错误信息</li>
<li>添加自定义HTML过滤器</li>
<li>修复多数据源下开关关闭出现异常问题</li>
<li>修复翻页记住选择项数据问题</li>
<li>用户邮箱长度限制20</li>
<li>修改错误页面返回主页出现嵌套问题</li>
<li>表格浮动提示单双引号转义</li>
<li>支持配置四级菜单</li>
<li>升级shiro到最新版1.4.2 阻止rememberMe漏洞攻击</li>
<li>升级summernote到最新版本v0.8.12</li>
<li>导入Excel根据dateFormat属性格式处理</li>
<li>修复War部署无法正常shutdown,ehcache内存泄漏</li>
<li>修复代码生成短字段无法识别问题</li>
<li>修复serviceImpl模版,修改方法判断日期错误</li>
<li>代码生成模板增加导出功能日志记录</li>
<li>代码生成唯一编号调整为tableId</li>
<li>代码生成查询时忽略大小写</li>
<li>代码生成支持翻页记住选中</li>
<li>代码生成表注释未填写也允许导入</li>
<li>Global全局配置类修改为注解,防止多环境配置下读取问题</li>
<li>修复多表格情况下,firstLoad只对第一个表格生效</li>
<li>处理Maven打包出现警告问题</li>
<li>默认主题样式,防止网速慢情况下出现空白</li>
<li>修复文件上传多级目录识别问题</li>
<li>锚链接解码url,防止中文导致页面不能加载问题</li>
<li>修复右键Tab页刷新事件重复请求问题</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="#v41">v4.1.0</a><code class="pull-right">2019.10.22</code>
</h5>
</div>
<div id="v41" class="panel-collapse collapse in">
<div id="v41" class="panel-collapse collapse">
<div class="panel-body">
<ol>
<li>支持多表格实例操作</li>
@@ -144,7 +297,7 @@
</ol>
</div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h5 class="panel-title">
@@ -205,8 +358,8 @@
<li>其他细节优化</li>
</ol>
</div>
</div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h5 class="panel-title">
@@ -125,8 +125,8 @@
// 单条强退
function forceLogout(sessionId) {
$.modal.confirm("确定要强制选中用户下线吗?", function() {
var data = { "sessionId": sessionId };
$.operate.post(prefix + "/forceLogout", data);
var data = { "ids": sessionId };
$.operate.post(prefix + "/batchForceLogout", data);
})
}
@@ -139,7 +139,7 @@
}
$.modal.confirm("确认要强退选中的" + rows.length + "条数据吗?", function() {
var url = prefix + "/batchForceLogout";
var data = { "ids": rows };
var data = { "ids": rows.join() };
$.operate.post(url, data);
});
}
@@ -155,8 +155,9 @@
}
function resetPre() {
$.form.reset();
$("#operlog-form")[0].reset();
$("#businessTypes").selectpicker('refresh');
$.table.search('operlog-form', 'bootstrap-table');
}
</script>
</body>
@@ -0,0 +1,83 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<title>注册若依系统</title>
<meta name="description" content="若依后台管理框架">
<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=4.3.1}" rel="stylesheet"/>
<!-- 360浏览器急速模式 -->
<meta name="renderer" content="webkit">
<!-- 避免IE使用兼容模式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="shortcut icon" href="../static/favicon.ico" th:href="@{favicon.ico}"/>
<style type="text/css">label.error { position:inherit; }</style>
</head>
<body class="signin">
<div class="signinpanel">
<div class="row">
<div class="col-sm-7">
<div class="signin-info">
<div class="logopanel m-b">
<h1><img alt="[ 若依 ]" src="../static/ruoyi.png" th:src="@{/ruoyi.png}"></h1>
</div>
<div class="m-b"></div>
<h4>欢迎使用 <strong>若依 后台管理系统</strong></h4>
<ul class="m-b">
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> SpringBoot</li>
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Mybatis</li>
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Shiro</li>
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Thymeleaf</li>
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Bootstrap</li>
</ul>
<strong>已经注册过? <a th:href="@{/login}">直接登录&raquo;</a></strong>
</div>
</div>
<div class="col-sm-5">
<form id="registerForm" autocomplete="off">
<h4 class="no-margins">注册:</h4>
<p class="m-t-md">你若不离不弃,我必生死相依</p>
<input type="text" name="username" class="form-control uname" placeholder="用户名" maxlength="20" />
<input type="password" name="password" class="form-control pword" placeholder="密码" maxlength="20" />
<input type="password" name="confirmPassword" class="form-control pword" placeholder="确认密码" maxlength="20" />
<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" >
</div>
<div class="col-xs-6">
<a href="javascript:void(0);" title="点击更换验证码">
<img th:src="@{captcha/captchaImage(type=${captchaType})}" class="imgcode" width="85%"/>
</a>
</div>
</div>
<div class="checkbox-custom" th:classappend="${captchaEnabled==false} ? 'm-t'">
<input type="checkbox" id="acceptTerm" name="acceptTerm"> <label for="acceptTerm">我已阅读并同意</label>
<a href="https://gitee.com/y_project/RuoYi/blob/master/README.md" target="_blank">使用条款</a>
</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; 2019 All Rights Reserved. RuoYi <br>
</div>
</div>
</div>
<script th:inline="javascript"> var ctx = [[@{/}]]; var captchaType = [[${captchaType}]]; </script>
<!-- 全局js -->
<script src="../static/js/jquery.min.js" th:src="@{/js/jquery.min.js}"></script>
<script src="../static/js/bootstrap.min.js" th:src="@{/js/bootstrap.min.js}"></script>
<!-- 验证插件 -->
<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/blockUI/jquery.blockUI.js" th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
<script src="../static/ruoyi/js/ry-ui.js" th:src="@{/ruoyi/js/ry-ui.js?v=4.3.1}"></script>
<script src="../static/ruoyi/register.js" th:src="@{/ruoyi/register.js}"></script>
</body>
</html>
@@ -118,16 +118,35 @@
</a>
<p class="text-center">黄灰</p>
</li>
<li style="float:left; width: 33.33333%; padding: 5px;">
<a href="javascript:" data-skin="skin-blue|theme-blue" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">
<span style="width: 20%; float: left; height: 13px; background: #367fa9"></span>
<span style="width: 80%; float: left; height: 13px; background: #3c8dbc"></span>
<span style="width: 20%; float: left; height: 30px; background: rgba(15,41,80,1)"></span>
<span style="width: 80%; float: left; height: 30px; background: #f4f5f7"></span>
</a>
<p class="text-center">蓝浅(新)</p>
</li>
<li style="float:left; width: 33.33333%; padding: 5px;">
<a href="javascript:" data-skin="skin-green|theme-blue" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">
<span style="width: 20%; float: left; height: 13px; background: #008d4c"></span>
<span style="width: 80%; float: left; height: 13px; background: #00a65a"></span>
<span style="width: 20%; float: left; height: 30px; background: rgba(15,41,80,1)"></span>
<span style="width: 80%; float: left; height: 30px; background: #f4f5f7"></span>
</a>
<p class="text-center">绿浅(新)</p>
</li>
</ul>
</body>
<script th:src="@{/js/jquery.min.js}"></script>
<script th:src="@{/ruoyi/js/common.js?v=4.1.0}"></script>
<script th:src="@{/ruoyi/js/common.js?v=4.3.1}"></script>
<script type="text/javascript">
//皮肤样式列表
var skins = ["skin-blue", "skin-green", "skin-purple", "skin-red", "skin-yellow"];
// 主题样式列表
var themes = ["theme-dark", "theme-light"];
var themes = ["theme-dark", "theme-light", "theme-blue"];
$("[data-skin]").on('click',
function(e) {
@@ -7,19 +7,19 @@
<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>
<label class="col-sm-3 control-label is-required">参数名称:</label>
<div class="col-sm-8">
<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>
<label class="col-sm-3 control-label is-required">参数键名:</label>
<div class="col-sm-8">
<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>
<label class="col-sm-3 control-label is-required">参数键值:</label>
<div class="col-sm-8">
<input id="configValue" name="configValue" class="form-control" type="text" required>
</div>
@@ -50,6 +50,9 @@
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="system:config:export">
<i class="fa fa-download"></i> 导出
</a>
<a class="btn btn-danger" onclick="clearCache()" shiro:hasPermission="system:config:remove">
<i class="fa fa-refresh"></i> 清理缓存
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
@@ -131,6 +134,11 @@
};
$.table.init(options);
});
/** 清理参数缓存 */
function clearCache() {
$.operate.get(prefix + "/clearCache");
}
</script>
</body>
</html>
@@ -8,19 +8,19 @@
<form class="form-horizontal m" id="form-config-edit" th:object="${config}">
<input id="configId" name="configId" th:field="*{configId}" type="hidden">
<div class="form-group">
<label class="col-sm-3 control-label">参数名称:</label>
<label class="col-sm-3 control-label is-required">参数名称:</label>
<div class="col-sm-8">
<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>
<label class="col-sm-3 control-label is-required">参数键名:</label>
<div class="col-sm-8">
<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>
<label class="col-sm-3 control-label is-required">参数键值:</label>
<div class="col-sm-8">
<input id="configValue" name="configValue" th:field="*{configValue}" class="form-control" type="text" required>
</div>
@@ -8,7 +8,7 @@
<form class="form-horizontal m" id="form-dept-add">
<input id="treeId" name="parentId" type="hidden" th:value="${dept.deptId}" />
<div class="form-group">
<label class="col-sm-3 control-label ">上级部门:</label>
<label class="col-sm-3 control-label">上级部门:</label>
<div class="col-sm-8">
<div class="input-group">
<input class="form-control" type="text" onclick="selectDeptTree()" id="treeName" readonly="true" th:value="${dept.deptName}">
@@ -17,13 +17,13 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">部门名称:</label>
<label class="col-sm-3 control-label is-required">部门名称:</label>
<div class="col-sm-8">
<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>
<label class="col-sm-3 control-label is-required">显示排序:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="orderNum" required>
</div>
@@ -9,7 +9,7 @@
<input name="deptId" type="hidden" th:field="*{deptId}" />
<input id="treeId" name="parentId" type="hidden" th:field="*{parentId}" />
<div class="form-group">
<label class="col-sm-3 control-label ">上级部门:</label>
<label class="col-sm-3 control-label">上级部门:</label>
<div class="col-sm-8">
<div class="input-group">
<input class="form-control" type="text" id="treeName" onclick="selectDeptTree()" readonly="true" th:field="*{parentName}">
@@ -18,13 +18,13 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">部门名称:</label>
<label class="col-sm-3 control-label is-required">部门名称:</label>
<div class="col-sm-8">
<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>
<label class="col-sm-3 control-label is-required">显示排序:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="orderNum" th:field="*{orderNum}" required>
</div>
@@ -113,11 +113,12 @@
/*部门管理-修改-选择部门树*/
function selectDeptTree() {
var deptId = $("#treeId").val();
var excludeId = $("input[name='deptId']").val();
if(deptId > 0) {
var options = {
title: '部门选择',
width: "380",
url: prefix + "/selectDeptTree/" + $("#treeId").val(),
url: prefix + "/selectDeptTree/" + $("#treeId").val() + "/" + excludeId,
callBack: doSubmit
};
$.modal.openOptions(options);
@@ -28,8 +28,11 @@
<th:block th:include="include :: footer" />
<th:block th:include="include :: ztree-js" />
<script th:inline="javascript">
var prefix = ctx + "system/dept"
var deptId = [[${deptId}]];
var excludeId = [[${excludeId}]];
$(function() {
var url = ctx + "system/dept/treeData";
var url = $.common.isEmpty(excludeId) ? prefix + "/treeData": prefix + "/treeData/" + excludeId;
var options = {
url: url,
expandLevel: 2,
@@ -7,13 +7,13 @@
<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>
<label class="col-sm-3 control-label is-required">字典标签:</label>
<div class="col-sm-8">
<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>
<label class="col-sm-3 control-label is-required">字典键值:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="dictValue" id="dictValue" required>
</div>
@@ -31,7 +31,7 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">字典排序:</label>
<label class="col-sm-3 control-label is-required">字典排序:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="dictSort" required>
</div>
@@ -70,8 +70,8 @@
removeUrl: prefix + "/remove",
exportUrl: prefix + "/export",
queryParams: queryParams,
sortName: "createTime",
sortOrder: "desc",
sortName: "dictSort",
sortOrder: "asc",
modalName: "数据",
columns: [{
checkbox: true
@@ -82,7 +82,11 @@
},
{
field: 'dictLabel',
title: '字典标签'
title: '字典标签',
formatter: function(value, row, index) {
var listClass = $.common.equals("default", row.listClass) || $.common.isEmpty(row.listClass) ? "" : "badge badge-" + row.listClass;
return $.common.sprintf("<span class='%s'>%s</span>", listClass, value);
}
},
{
field: 'dictValue',
@@ -8,13 +8,13 @@
<form class="form-horizontal m" id="form-dict-edit" th:object="${dict}">
<input name="dictCode" type="hidden" th:field="*{dictCode}" />
<div class="form-group">
<label class="col-sm-3 control-label ">字典标签:</label>
<label class="col-sm-3 control-label is-required">字典标签:</label>
<div class="col-sm-8">
<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>
<label class="col-sm-3 control-label is-required">字典键值:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="dictValue" id="dictValue" th:field="*{dictValue}" required>
</div>
@@ -32,7 +32,7 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">字典排序:</label>
<label class="col-sm-3 control-label is-required">字典排序:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="dictSort" th:field="*{dictSort}" required>
</div>
@@ -7,13 +7,13 @@
<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>
<label class="col-sm-3 control-label is-required">字典名称:</label>
<div class="col-sm-8">
<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>
<label class="col-sm-3 control-label is-required">字典类型:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="dictType" id="dictType" required>
</div>
@@ -8,13 +8,13 @@
<form class="form-horizontal m" id="form-dict-edit" th:object="${dict}">
<input id="dictId" name="dictId" type="hidden" th:field="*{dictId}" />
<div class="form-group">
<label class="col-sm-3 control-label ">字典名称:</label>
<label class="col-sm-3 control-label is-required">字典名称:</label>
<div class="col-sm-8">
<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>
<label class="col-sm-3 control-label is-required">字典类型:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="dictType" id="dictType" th:field="*{dictType}" required>
</div>
@@ -50,6 +50,9 @@
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="system:dict:export">
<i class="fa fa-download"></i> 导出
</a>
<a class="btn btn-danger" onclick="clearCache()" shiro:hasPermission="system:dict:remove">
<i class="fa fa-refresh"></i> 清理缓存
</a>
</div>
<div class="col-sm-12 select-table table-striped">
@@ -105,7 +108,10 @@
},
{
field: 'remark',
title: '备注'
title: '备注',
formatter: function(value, row, index) {
return $.table.tooltip(value);
}
},
{
field: 'createTime',
@@ -132,6 +138,11 @@
var url = prefix + '/detail/' + dictId;
$.modal.openTab("字典数据", url);
}
/** 清理字典缓存 */
function clearCache() {
$.operate.get(prefix + "/clearCache");
}
</script>
</body>
</html>
@@ -8,7 +8,7 @@
<form class="form-horizontal m" id="form-menu-add">
<input id="treeId" name="parentId" type="hidden" th:value="${menu.menuId}" />
<div class="form-group">
<label class="col-sm-3 control-label ">上级菜单:</label>
<label class="col-sm-3 control-label">上级菜单:</label>
<div class="col-sm-8">
<div class="input-group">
<input class="form-control" type="text" onclick="selectMenuTree()" id="treeName" readonly="true" th:value="${menu.menuName}">
@@ -17,7 +17,7 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">菜单类型:</label>
<label class="col-sm-3 control-label is-required">菜单类型:</label>
<div class="col-sm-8">
<label class="radio-box"> <input type="radio" name="menuType" value="M" /> 目录 </label>
<label class="radio-box"> <input type="radio" name="menuType" value="C" /> 菜单 </label>
@@ -25,7 +25,7 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">菜单名称:</label>
<label class="col-sm-3 control-label is-required">菜单名称:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="menuName" id="menuName" required>
</div>
@@ -53,7 +53,7 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">显示排序:</label>
<label class="col-sm-3 control-label is-required">显示排序:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="orderNum" required>
</div>
@@ -9,7 +9,7 @@
<input name="menuId" type="hidden" th:field="*{menuId}" />
<input id="treeId" name="parentId" type="hidden" th:field="*{parentId}" />
<div class="form-group">
<label class="col-sm-3 control-label ">上级菜单:</label>
<label class="col-sm-3 control-label">上级菜单:</label>
<div class="col-sm-8">
<div class="input-group">
<input class="form-control" type="text" onclick="selectMenuTree()" id="treeName" readonly="true" th:value="${menu.parentName == null ? '无' : menu.parentName}">
@@ -18,7 +18,7 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">菜单类型:</label>
<label class="col-sm-3 control-label is-required">菜单类型:</label>
<div class="col-sm-8">
<label class="radio-box"> <input type="radio" th:field="*{menuType}" name="menuType" value="M" /> 目录 </label>
<label class="radio-box"> <input type="radio" th:field="*{menuType}" name="menuType" value="C" /> 菜单 </label>
@@ -26,7 +26,7 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">菜单名称:</label>
<label class="col-sm-3 control-label is-required">菜单名称:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="menuName" id="menuName" th:field="*{menuName}" required>
</div>
@@ -54,7 +54,7 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">显示排序:</label>
<label class="col-sm-3 control-label is-required">显示排序:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="orderNum" th:field="*{orderNum}" required>
</div>
@@ -91,7 +91,10 @@
field: 'url',
title: '请求地址',
width: '15%',
align: "left"
align: "left",
formatter: function(value, row, index) {
return $.table.tooltip(value);
}
},
{
title: '类型',
@@ -127,6 +130,9 @@
title: '权限标识',
width: '15%',
align: "left",
formatter: function(value, row, index) {
return $.table.tooltip(value);
}
},
{
title: '操作',

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