Compare commits

...

207 Commits

Author SHA1 Message Date
RuoYi
54ba9b8c02 update ry-ui.js 2024-11-13 21:55:39 +08:00
RuoYi
e728c37b64 add timezone 2024-11-12 13:07:43 +08:00
RuoYi
0eaeba0298 update pom.xml 2024-11-08 16:30:36 +08:00
RuoYi
7b6ed52181 升级pom依赖到安全版本(IAWCAE) 2024-11-08 16:03:41 +08:00
RuoYi
72868aeb6f 支持自定义显示Excel属性列 2024-11-07 22:11:27 +08:00
RuoYi
c0afd904d0 修复匿名注解空值无效的问题(IASXHN) 2024-11-06 20:53:06 +08:00
RuoYi
cac84c1bab 升级spring-framework到安全版本(IASFCW) 2024-11-06 20:08:15 +08:00
RuoYi
fb4f63c883 优化身份证脱敏正则 2024-10-21 17:20:08 +08:00
RuoYi
66ebd480e1 升级oshi到最新版本6.6.5 2024-10-18 20:41:43 +08:00
RuoYi
758dd95c07 添加新群号:232896766 2024-10-18 20:41:22 +08:00
RuoYi
c0ce3fd7c2 修复角色禁用权限不失效问题 2024-09-21 10:58:42 +08:00
RuoYi
9b68013b2a 用户导入响应消息对名称安全处理 2024-09-13 21:13:04 +08:00
RuoYi
c34d9f0c09 修复记住我请求头过大的问题 2024-09-09 10:29:12 +08:00
RuoYi
3b968d735f 修复记住我失效的问题(IAPHA4) 2024-09-06 20:16:22 +08:00
RuoYi
b2a491c99a update content 2024-09-04 19:40:09 +08:00
RuoYi
13fffa0ba8 优化异步树表格折叠同步子状态 2024-09-03 19:07:24 +08:00
RuoYi
d9fbae538b 升级oshi到最新版本6.6.3 2024-08-30 21:19:35 +08:00
RuoYi
adb22846a4 update sqlkeyword 2024-08-30 21:14:12 +08:00
RuoYi
5bef005075 修改时间范围日期格式 2024-07-08 16:26:49 +08:00
RuoYi
ad5cd1921e 升级commons.io到最新版本2.16.1 2024-07-03 11:39:00 +08:00
RuoYi
c6c8f8b3fb remove sub resultType 2024-07-03 11:06:05 +08:00
RuoYi
e9550ab5bd 优化代码 2024-06-27 16:44:51 +08:00
RuoYi
447542656a 修复主子表数据显示问题(IA61OI) 2024-06-24 17:19:49 +08:00
RuoYi
32e448b6b4 添加新群号:287843737 2024-06-13 14:59:19 +08:00
RuoYi
116bed00a5 优化数据权限代码 2024-06-13 14:58:04 +08:00
RuoYi
4f5bf990bf 若依 v4.7.9 2024-06-06 09:08:49 +08:00
RuoYi
0144cb855f 优化代码 2024-06-05 11:53:53 +08:00
RuoYi
e8f9bfb5c6 新增表格示例(保存状态) 2024-06-03 13:31:33 +08:00
RuoYi
56b1354496 升级oshi到最新版本6.6.1 2024-06-03 13:31:11 +08:00
RuoYi
8e1a89bcbe 升级druid到最新版本1.2.23 2024-06-03 13:30:50 +08:00
RuoYi
4c9bfd8683 升级bootstrap-table到最新版本1.22.6 2024-06-03 13:29:36 +08:00
RuoYi
ec6d84aa88 Excel注解新增属性comboReadDict 2024-06-02 19:08:47 +08:00
RuoYi
05c29a2a6c update mapper 2024-06-01 17:55:50 +08:00
RuoYi
18ef1ea816 update sql css 2024-06-01 17:45:01 +08:00
RuoYi
3c574b45dc 代码生成支持表单布局选项 2024-06-01 11:54:05 +08:00
RuoYi
0e08cc7ca4 优化代码生成模板格式 2024-06-01 09:55:33 +08:00
RuoYi
b2d832edab 优化代码生成主子表关联查询方式 2024-06-01 09:31:17 +08:00
RuoYi
60889185d8 新增表格示例(全文检索) 2024-05-31 11:25:27 +08:00
RuoYi
b95280aba2 优化导入Excel时设置dictType属性重复查缓存问题 2024-05-30 13:31:34 +08:00
RuoYi
96b2c0d9b7 update sql 2024-05-29 12:20:37 +08:00
RuoYi
f0efa914fe 优化代码 2024-05-29 12:20:14 +08:00
RuoYi
edb1c614d0 限制用户操作数据权限范围 2024-05-29 12:19:57 +08:00
RuoYi
61c2e96aaa 新增表格示例(虚拟滚动) 2024-05-13 10:58:48 +08:00
RuoYi
f31e6bd1bb 优化树表格align属性在标题生效(I9FVBJ) 2024-04-18 09:48:01 +08:00
RuoYi
f5805fd79e 新增Anonymous匿名访问不鉴权注解 2024-04-15 13:49:50 +08:00
RuoYi
55913e8707 升级spring-framework到安全版本,防止漏洞风险 2024-04-11 16:31:12 +08:00
RuoYi
45f71a5125 新增数据脱敏过滤注解 2024-04-08 13:14:40 +08:00
RuoYi
4218cf7cfd Excel注解ColumnType类型新增文本 2024-03-22 16:20:02 +08:00
RuoYi
4963454f23 升级oshi到最新版本6.5.0 2024-03-15 09:20:47 +08:00
RuoYi
85cf318a94 update locale 2024-03-13 17:09:00 +08:00
RuoYi
82a0eaed4a 优化代码 2024-03-13 16:33:13 +08:00
RuoYi
f6ce55be47 定义统一Locale获取国际化(I8Z7DA) 2024-03-13 11:38:35 +08:00
RuoYi
fd37e8b4a7 定时任务白名单配置范围缩小 2024-03-11 11:15:11 +08:00
RuoYi
d43fea60e2 update copyright 2024 2024-03-11 09:40:08 +08:00
RuoYi
05075e21a3 joblog order by 2024-03-11 09:39:53 +08:00
RuoYi
f2f6b25ed2 用户密码新增非法字符验证 2024-03-01 21:50:45 +08:00
RuoYi
4a5ea50a14 update gen pom.xml 2024-03-01 21:50:34 +08:00
RuoYi
81c1ffb07e 升级oshi到最新版本6.4.13 2024-02-29 14:14:01 +08:00
RuoYi
6dd8bbfc38 定时任务屏蔽违规的字符 2024-02-29 14:13:51 +08:00
RuoYi
bcb6222c61 优化匹配方式 2024-02-29 14:13:38 +08:00
RuoYi
0ce40fc039 升级oshi到最新版本6.4.11 2024-01-19 11:54:25 +08:00
RuoYi
0cde5c2446 update http user-agent 2024-01-15 10:55:10 +08:00
若依
69714747d7
!481 【轻量级 PR】:更新HttpUtils中的默认User-Agent
Merge pull request !481 from coderWu/master
2024-01-15 02:25:30 +00:00
RuoYi
83b90c3267 通知公告新增详细显示 2024-01-12 11:57:22 +08:00
RuoYi
5b19d33af9 优化登录注册页面 2024-01-09 19:49:18 +08:00
RuoYi
c8fd0b0470 优化登录注册页面 2024-01-09 19:46:56 +08:00
RuoYi
8c8d53a9cc 修复重置日期时出现的异常问题(I8PZFA) 2024-01-09 15:45:40 +08:00
coderwu
f84b77993c 更新HttpUtils中的User-Agent 2024-01-08 22:24:56 +08:00
RuoYi
192c0c5241 修复tooltip单击复制文本不生效的问题 2024-01-08 15:18:03 +08:00
RuoYi
92d121175d 默认加载layer扩展皮肤 2024-01-08 15:15:04 +08:00
RuoYi
d6e599d6ac 未修改初始密码弹框提醒 2024-01-04 11:24:07 +08:00
RuoYi
a4c8026265 升级oshi到最新版本6.4.8 2023-12-05 11:36:30 +08:00
RuoYi
90022df5a6 升级commons.io到最新版本2.13.0 2023-12-05 11:36:12 +08:00
RuoYi
0699c2350a 添加新群号:174942938 2023-11-27 10:13:18 +08:00
RuoYi
fd4fe83e9f 修复页签关闭后存在的跳转问题(I8JDIS) 2023-11-25 15:43:51 +08:00
RuoYi
4933ea6d2f 操作日志列表重置回第一页 2023-11-25 15:43:28 +08:00
RuoYi
07ddbfeabf 修复高频率定时任务不执行问题(I8IQSX) 2023-11-25 15:43:15 +08:00
RuoYi
8db4a059d9 若依 v4.7.8 2023-11-23 10:39:05 +08:00
RuoYi
11a59e7f77 update style 2023-11-22 15:12:00 +08:00
RuoYi
f2f27c7ea3 升级jquery到最新版v3.7.1 2023-11-22 11:38:22 +08:00
RuoYi
e3be485727 通用detail详细信息弹窗不显示按钮 2023-11-22 11:37:50 +08:00
RuoYi
752dd06cd9 升级druid到最新版本1.2.20 2023-11-22 11:08:46 +08:00
RuoYi
a2d0fd7057 用户列表新增抽屉效果详细信息 2023-11-22 11:08:12 +08:00
RuoYi
09b41e8b24 用户列表新增抽屉效果详细信息 2023-11-22 09:20:42 +08:00
RuoYi
40835fa733 升级layui到最新版本v2.8.18 2023-11-22 09:13:45 +08:00
RuoYi
b838533558 升级layer到最新版本v3.7.0 2023-11-22 09:06:35 +08:00
RuoYi
6994ee771c 角色列表显示数据权限 2023-11-21 22:23:29 +08:00
RuoYi
7be8b2fbe1 升级oshi到最新版本6.4.7 2023-11-20 12:09:11 +08:00
RuoYi
61bc1891c3 升级pagehelper到最新版1.4.7 2023-11-20 12:08:51 +08:00
RuoYi
b7f015cd07 升级shiro到最新版本1.13.0 2023-11-20 12:08:30 +08:00
RuoYi
d18cd2e662 重置密码鼠标按下显示密码 2023-11-20 12:07:39 +08:00
RuoYi
5f941c6b87 优化注释错误 2023-11-20 12:07:11 +08:00
RuoYi
7d91e58594 优化数字金额大写转换精度丢失问题 2023-11-10 16:29:24 +08:00
RuoYi
d7f58f4128 升级oshi到最新版本6.4.6 2023-10-21 15:00:48 +08:00
RuoYi
52b9f43ea0 新增isScrollToTop页签切换滚动到顶部 2023-09-27 19:29:13 +08:00
RuoYi
ff6845f5ce a标签#更换为javascript:; 2023-09-27 18:01:45 +08:00
RuoYi
e4e2faa93b 修复用户管理跳转部门页签显示问题(I84PGJ) 2023-09-27 12:02:40 +08:00
RuoYi
8dd40158ec 操作日志列表新增IP地址查询 2023-09-26 09:19:30 +08:00
RuoYi
64e6ae4fe4 优化Tab页签切换,会滚动到页面顶部问题(I841ER) 2023-09-26 09:15:41 +08:00
RuoYi
f05195d373 优化菜单管理类型为按钮状态可选(I7VZEJ) 2023-09-18 14:38:28 +08:00
RuoYi
fbeacbb026 修复自定义字典样式不生效的问题 2023-09-14 17:46:28 +08:00
RuoYi
24d21eda23 修复横向菜单关闭最后一个页签状态问题(I7SVPK) 2023-09-14 10:31:10 +08:00
RuoYi
2cb417dab2 删除无用的传参 2023-09-01 09:40:26 +08:00
RuoYi
6c89c9896a 修复Excels导入时无法获取到dictType字典值问题(I7M4PW) 2023-08-21 15:59:06 +08:00
RuoYi
705e627908 Excel导入数据临时文件无法删除问题 2023-08-19 16:12:16 +08:00
RuoYi
049ca00930 升级oshi到最新版本6.4.4 2023-08-14 19:21:53 +08:00
RuoYi
43dd9ae664 Excel自定义数据处理器增加单元格/工作簿对象 2023-08-13 17:35:28 +08:00
RuoYi
8445d6a078 新增表格参数(数据值为空时显示的内容undefinedText) 2023-08-13 14:57:42 +08:00
RuoYi
bf58ce6067 修复弹窗按钮启用禁用方法无效问题(I7L0WA) 2023-08-13 13:05:19 +08:00
RuoYi
364b471d2b 新增定时任务页去除状态选项(I7KU2E) 2023-08-13 11:35:27 +08:00
RuoYi
c2deb14284 树表查询无数据时清除分页信息(I7OB0S) 2023-08-12 16:22:29 +08:00
RuoYi
2ebedeb5df 优化代码 2023-08-12 16:21:23 +08:00
RuoYi
e4585f5dcb update maven-plugin 2023-08-12 16:20:33 +08:00
若依
62db29627a
!465 前端定时任务菜单中Cron表达式生成器中-日-选项中的--每小时--应为-每日
Merge pull request !465 from wpengsen/master
2023-08-12 08:09:42 +00:00
RuoYi
b15106d139 升级shiro到最新版本1.12.0 2023-07-28 20:27:07 +08:00
wpengsen
d7a2e80bf6 前端定时任务菜单中Cron表达式生成器中-日-选项中的--每小时--应为-每日 2023-07-20 10:30:21 +08:00
RuoYi
e405becf9a 表格重置默认返回到第一页 2023-07-14 11:04:27 +08:00
RuoYi
e8d8325ead 排序属性orderBy参数限制长度 2023-07-06 21:52:18 +08:00
RuoYi
c21eb3507b 优化代码 2023-07-06 21:51:35 +08:00
RuoYi
c92059d356 update sql 2023-07-06 21:49:52 +08:00
RuoYi
b36ba5a16c 升级oshi到最新版本6.4.3 2023-06-29 19:36:45 +08:00
RuoYi
cc74bde7be optimized code 2023-06-29 19:36:24 +08:00
RuoYi
7358a2027d 升级spring-boot到最新版本2.5.15 2023-06-23 16:25:39 +08:00
RuoYi
21ea871ada update application.yml 2023-06-23 16:24:41 +08:00
RuoYi
1207052749 修复表格行内编辑启用翻页记住选择无效问题(I72OMA) 2023-05-19 10:26:15 +08:00
RuoYi
6f8a388e8e 升级x-editable到最新版本1.5.3 2023-05-19 10:25:55 +08:00
RuoYi
03201c36e8 若依 v4.7.7 2023-04-14 08:32:07 +08:00
RuoYi
aa7ee1aae1 升级oshi到最新版本6.4.1 2023-04-12 15:06:04 +08:00
RuoYi
07f9316935 优化导入用户时更新丢失岗位角色的问题 2023-04-10 18:20:28 +08:00
RuoYi
5e34d68d51 优化代码 2023-04-10 18:20:22 +08:00
RuoYi
5a07a91b50 升级jasny-bootstrap到最新版4.0.0 2023-04-07 19:38:29 +08:00
RuoYi
17abf826e9 优化用户导入更新时需获取用户编号问题 2023-04-07 19:20:38 +08:00
若依
eca27ed5a1
!448 优化用户导入
Merge pull request !448 from 周冰/master
2023-04-07 11:08:15 +00:00
RuoYi
466d8800fc 优化导出Excel时设置dictType属性重复查缓存问题 2023-04-06 15:23:06 +08:00
shui
ada2cb426b 用户导入,更新时需获取用户id,用于更新数据 2023-04-03 13:35:32 +08:00
RuoYi
f67600df28 支持自定义隐藏属性列过滤子对象 2023-03-17 14:54:24 +08:00
RuoYi
10bbb27684 修复用户注册唯一校验问题(I6MVZS) 2023-03-17 11:24:27 +08:00
若依
a32da911d1
!442 用户多角色,数据权限切面处理时可能出现权限抬升的情况。
Merge pull request !442 from 0慕容雪0/master
2023-03-17 03:21:13 +00:00
0慕容雪0
6a861498ca
update ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java.
Signed-off-by: 0慕容雪0 <ytu.mxh@163.com>
2023-03-11 04:28:09 +00:00
0慕容雪0
292ac30aa5
update ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java.
DataScopeAspect,数据权限切面处理类中,用户多角色情况下,若所有角色都不包含传递过来的权限字符,这个时候sqlString也会为空,会导致用户拥有全部数据权限,所以要限制一下, 可以根据conditions集合是否为空,来判断循环时所有角色是否都是在判断权限字符时continue了。
复现方法: 在使用@DataScope注解时permission定义了值,这个值所有角色不包含。


Signed-off-by: 0慕容雪0 <ytu.mxh@163.com>
2023-03-10 07:53:03 +00:00
RuoYi
1e91312f08 日志管理使用索引提升查询性能 2023-02-23 09:29:26 +08:00
RuoYi
bee73e87a5 升级layui到最新版本2.7.6 2023-02-23 09:23:26 +08:00
RuoYi
a1e2c6e1e6 修复isMatchedIp的参数判断产生空指针的问题 2023-02-22 10:30:49 +08:00
RuoYi
0bbe126125 移除apache/commons-fileupload依赖 2023-02-21 17:18:34 +08:00
RuoYi
590f6a302c 遗漏的优化代码 2023-02-21 16:19:33 +08:00
RuoYi
22470677d4 升级druid到最新版本1.2.16 2023-02-21 13:44:19 +08:00
RuoYi
7040cd26c6 优化代码 2023-02-21 13:43:52 +08:00
RuoYi
ac1e66b4b6 日志注解支持排除指定的请求参数 2023-02-20 15:50:15 +08:00
RuoYi
658ed5791b update sql 2023-02-20 15:49:35 +08:00
RuoYi
ef0a29552e 支持登录IP黑名单限制 2023-02-20 12:54:02 +08:00
RuoYi
99554659f0 修复异步表格树子项排序问题(I6G2YL) 2023-02-19 22:26:39 +08:00
RuoYi
995eb76c0f 修复冻结列不支持IE浏览器的问题(I6FD4W) 2023-02-19 20:54:55 +08:00
RuoYi
dbb312b26e 修复主子表使用suggest插件无法新增问题(I6FA5Z) 2023-02-19 19:29:35 +08:00
RuoYi
9b476399f0 更新fontawesome图标示例 2023-02-19 14:54:08 +08:00
RuoYi
e4f70b190c 优化前端属性提醒说明 2023-02-18 16:06:44 +08:00
RuoYi
bb5f87658e 新增监控页面图标显示 2023-02-17 08:52:15 +08:00
RuoYi
00f2db99d8 操作日志新增消耗时间属性 2023-02-16 11:57:40 +08:00
RuoYi
e26b65ca31 添加新群号:175104288 2023-02-11 12:16:15 +08:00
RuoYi
cda00589a4 修复菜单栏快速点击导致展开折叠样式问题(I6CWMP) 2023-02-04 21:56:56 +08:00
RuoYi
3b75d93d6b 连接池Druid支持新的配置connectTimeout和socketTimeout(I6CLL8) 2023-02-04 20:11:34 +08:00
RuoYi
10fb654d23 修复异步加载表格树重置列表父节点展开异常问题(I6AGWH) 2023-02-04 17:32:31 +08:00
RuoYi
432d5ce1be 屏蔽定时任务bean违规的字符 2023-02-04 16:06:04 +08:00
RuoYi
f2d5545092 update copyright 2023 2023-02-03 17:41:14 +08:00
若依
8939e21a29
!437 解决单体版本表格行拖拽操作后,列表底部的总共记录条数变成了undefined问题
Merge pull request !437 from chenxin04187/master
2023-02-03 08:43:46 +00:00
若依
b872a84a4a
!436 EhCacheManager改为从bean容器获取,不使用自动装配
Merge pull request !436 from oak/master
2023-02-03 08:31:19 +00:00
William Chen
311cb892a7 解决单体版本表格行拖拽操作后,列表底部的总共记录条数变成了undefined问题。
link https://gitee.com/y_project/RuoYi/issues/I68198
2023-01-23 22:19:34 +08:00
oak
fab98274b1 EhCacheManager改为从bean容器获取,不使用自动装配。作用:自建SpringBoot模块如果引用了ruoyi-system并且没有使用shiro,启动会报错。 2023-01-23 16:38:33 +08:00
RuoYi
3e8b211789 升级jquery到最新版v3.6.3 2023-01-19 11:59:10 +08:00
RuoYi
c92ed66436 修复页签属性refresh为undefined时页面被刷新问题 2023-01-12 17:31:30 +08:00
RuoYi
f1233c85d7 主子表根据序号删除方法加入表格ID参数 2023-01-12 17:31:06 +08:00
RuoYi
9d02f8f7e7 若依 v4.7.6 2022-12-16 08:50:57 +08:00
RuoYi
70205922fc 优化代码 2022-12-13 15:45:13 +08:00
RuoYi
f3d1f0afe2 修改参数键名时移除前缓存配置 2022-12-13 15:09:38 +08:00
RuoYi
7ee6ad8aec 升级pagehelper到最新版1.4.6 2022-12-13 14:23:20 +08:00
RuoYi
4ff9afac23 升级oshi到最新版本6.4.0 2022-12-13 14:21:58 +08:00
RuoYi
167970e5c4 优化SQL关键字检查防止注入 2022-12-13 13:17:17 +08:00
若依
29395be19a
!432 优化deleteFile方法返回值,接受File.delete的false返回值
Merge pull request !432 from 岳林/master
2022-12-12 05:48:17 +00:00
fanchenweimin
da01f093f8 优化deleteFile方法返回值,接受File.delete的false返回值 2022-12-12 09:41:38 +08:00
RuoYi
f53515eb70 升级druid到最新版本1.2.15 2022-12-07 11:55:23 +08:00
RuoYi
84dde0dcf2 升级kaptcha到最新版2.3.3 2022-12-07 10:58:07 +08:00
RuoYi
df1c283335 定时任务违规的字符 2022-12-03 11:32:41 +08:00
RuoYi
faa4bfaef3 升级oshi到最新版本6.3.2 2022-12-01 11:49:25 +08:00
若依
eef7ef6544
!426 升级shiro到最新版本1.10.1
Merge pull request !426 from Hacker/N/A
2022-11-25 11:05:20 +00:00
Hacker
22d42048ab
升级shiro到最新版本1.10.1
Signed-off-by: Hacker <721806280@qq.com>
2022-11-24 07:31:40 +00:00
RuoYi
e5b905c455 优化用户管理重置时取消部门选择(I621OJ) 2022-11-21 13:39:09 +08:00
RuoYi
c64f027e66 兼容Excel下拉框内容过多无法显示的问题(I61HCG) 2022-11-21 11:13:02 +08:00
RuoYi
96934ca139 修复操作日志类型多选导出不生效问题(I617FW) 2022-11-15 13:30:43 +08:00
RuoYi
f4c763c84d 升级druid到最新版本1.2.14 2022-11-14 11:47:57 +08:00
RuoYi
8cd0d9f366 忽略不必要的属性数据返回 2022-11-12 11:57:08 +08:00
RuoYi
6a7f727f70 优化导出对象的子列表为空会出现[]问题(I60904) 2022-11-11 10:35:32 +08:00
RuoYi
62381f0472 修复sheet超出最大行数异常问题 2022-11-07 11:27:12 +08:00
若依
2952337f15
!420 update ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionFactory.java.
Merge pull request !420 from chenjh/N/A
2022-11-07 03:22:59 +00:00
chenjh
c719be609a
update ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionFactory.java.
ServletUtils.getRequest()应改request,可能为空

Signed-off-by: chenjh <asgard2023@outlook.com>
2022-11-06 14:26:47 +00:00
RuoYi
6253e41658 升级oshi到最新版本6.3.0 2022-10-28 21:31:14 +08:00
RuoYi
bd0e574268 优化select2搜索下拉后校验必填样式问题(I5VZY0) 2022-10-21 09:48:13 +08:00
RuoYi
6e176c807c 升级bootstrap-fileinput到最新版本5.5.2 2022-10-20 19:12:26 +08:00
RuoYi
2bdf12b1e1 升级shiro到最新版本1.10.0 2022-10-13 10:09:10 +08:00
RuoYi
67f2ba2aa9 修复导出包含空子列表数据异常的问题 2022-10-10 09:00:10 +08:00
RuoYi
c105f44eb9 优化树形表格层级显示(I5TQ87) 2022-10-09 21:17:20 +08:00
RuoYi
e23a6919af 优化topnav页缺少的样式右括号 2022-10-09 21:17:04 +08:00
RuoYi
b362e58646 R isError and isSuccess static 2022-10-09 21:16:52 +08:00
RuoYi
db3e571af0 优化代码生成同步后字典值NULL问题 2022-09-28 20:58:11 +08:00
RuoYi
52fe19e933 导入更新用户数据前校验数据权限 2022-09-28 20:58:02 +08:00
RuoYi
7b3ab45ecc 添加新群号:185760789 2022-09-28 10:56:36 +08:00
RuoYi
e337f685bc 修改用户登录账号重复验证 2022-09-18 11:25:03 +08:00
RuoYi
13287e02eb 修复关闭父页签后提交无法跳转的问题(I5QBMO) 2022-09-12 10:34:00 +08:00
RuoYi
d4a33eab94 优化代码 2022-09-09 10:09:56 +08:00
264 changed files with 7012 additions and 5400 deletions

View File

@ -1,11 +1,11 @@
<p align="center">
<img alt="logo" src="https://oscimg.oschina.net/oscnet/up-dd77653d7c9f197dd9d93684f3c8dcfbab6.png">
</p>
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi v4.7.5</h1>
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi v4.7.9</h1>
<h4 align="center">基于SpringBoot开发的轻量级Java快速开发框架</h4>
<p align="center">
<a href="https://gitee.com/y_project/RuoYi/stargazers"><img src="https://gitee.com/y_project/RuoYi/badge/star.svg?theme=gvp"></a>
<a href="https://gitee.com/y_project/RuoYi"><img src="https://img.shields.io/badge/RuoYi-v4.7.5-brightgreen.svg"></a>
<a href="https://gitee.com/y_project/RuoYi"><img src="https://img.shields.io/badge/RuoYi-v4.7.9-brightgreen.svg"></a>
<a href="https://gitee.com/y_project/RuoYi/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
</p>
@ -99,4 +99,4 @@
## 若依交流群
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) [![加入QQ群](https://img.shields.io/badge/已满-130035985-blue.svg)](https://jq.qq.com/?_wv=1027&k=qPIKBb7s) [![加入QQ群](https://img.shields.io/badge/已满-143151071-blue.svg)](https://jq.qq.com/?_wv=1027&k=4NsjKbtU) [![加入QQ群](https://img.shields.io/badge/已满-158781320-blue.svg)](https://jq.qq.com/?_wv=1027&k=VD2pkz2G) [![加入QQ群](https://img.shields.io/badge/已满-201531282-blue.svg)](https://jq.qq.com/?_wv=1027&k=HlshFwkJ) [![加入QQ群](https://img.shields.io/badge/已满-101526938-blue.svg)](https://jq.qq.com/?_wv=1027&k=0ARRrO9V) [![加入QQ群](https://img.shields.io/badge/已满-264355400-blue.svg)](https://jq.qq.com/?_wv=1027&k=up9k3ZXJ) [![加入QQ群](https://img.shields.io/badge/已满-298522656-blue.svg)](https://jq.qq.com/?_wv=1027&k=540WfdEr) [![加入QQ群](https://img.shields.io/badge/已满-139845794-blue.svg)](https://jq.qq.com/?_wv=1027&k=ss91fC4t) [![加入QQ群](https://img.shields.io/badge/213650505-blue.svg)](https://jq.qq.com/?_wv=1027&k=uUQpdY7J)
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) [![加入QQ群](https://img.shields.io/badge/已满-130035985-blue.svg)](https://jq.qq.com/?_wv=1027&k=qPIKBb7s) [![加入QQ群](https://img.shields.io/badge/已满-143151071-blue.svg)](https://jq.qq.com/?_wv=1027&k=4NsjKbtU) [![加入QQ群](https://img.shields.io/badge/已满-158781320-blue.svg)](https://jq.qq.com/?_wv=1027&k=VD2pkz2G) [![加入QQ群](https://img.shields.io/badge/已满-201531282-blue.svg)](https://jq.qq.com/?_wv=1027&k=HlshFwkJ) [![加入QQ群](https://img.shields.io/badge/已满-101526938-blue.svg)](https://jq.qq.com/?_wv=1027&k=0ARRrO9V) [![加入QQ群](https://img.shields.io/badge/已满-264355400-blue.svg)](https://jq.qq.com/?_wv=1027&k=up9k3ZXJ) [![加入QQ群](https://img.shields.io/badge/已满-298522656-blue.svg)](https://jq.qq.com/?_wv=1027&k=540WfdEr) [![加入QQ群](https://img.shields.io/badge/已满-139845794-blue.svg)](https://jq.qq.com/?_wv=1027&k=ss91fC4t) [![加入QQ群](https://img.shields.io/badge/已满-185760789-blue.svg)](https://jq.qq.com/?_wv=1027&k=Cqd66IKe) [![加入QQ群](https://img.shields.io/badge/已满-175104288-blue.svg)](https://jq.qq.com/?_wv=1027&k=7FplYUnR) [![加入QQ群](https://img.shields.io/badge/已满-174942938-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=lqMHu_5Fskm7H2S1vNAQTtzAUokVydwc&authKey=ptw0Fpch5pbNocML3CIJKKqZBaq2DI7cusKuzIgfMNiY3t9Pvd9hP%2BA8WYx3yaY1&noverify=0&group_code=174942938) [![加入QQ群](https://img.shields.io/badge/已满-287843737-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=blYlRDmwZXSXI5pVrPPU7ZJ1stFJ6Q2Q&authKey=ForGBWffHVlPt9NE3d7g4DoOIouBh%2BqvAj2lp1CLReHfZAUaK7SRrdwsChKpRJDJ&noverify=0&group_code=287843737) [![加入QQ群](https://img.shields.io/badge/232896766-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=KTVAIhggR3rR3uZWK9A8kR4yYNREQ4jo&authKey=An4DUV9e7uK8I8VgBbp949z0ypQoDrOoqvVg%2FWOr2vuNNDMZUAMPvqHor6TFMIgz&noverify=0&group_code=232896766)

86
pom.xml
View File

@ -5,47 +5,91 @@
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi</artifactId>
<version>4.7.5</version>
<version>4.7.9</version>
<name>ruoyi</name>
<url>http://www.ruoyi.vip</url>
<description>若依管理系统</description>
<properties>
<ruoyi.version>4.7.5</ruoyi.version>
<ruoyi.version>4.7.9</ruoyi.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
<shiro.version>1.9.1</shiro.version>
<spring-boot.version>2.5.15</spring-boot.version>
<shiro.version>1.13.0</shiro.version>
<thymeleaf.extras.shiro.version>2.1.0</thymeleaf.extras.shiro.version>
<druid.version>1.2.11</druid.version>
<druid.version>1.2.23</druid.version>
<bitwalker.version>1.21</bitwalker.version>
<kaptcha.version>2.3.2</kaptcha.version>
<kaptcha.version>2.3.3</kaptcha.version>
<swagger.version>3.0.0</swagger.version>
<mybatis-spring-boot.version>2.2.2</mybatis-spring-boot.version>
<pagehelper.boot.version>1.4.3</pagehelper.boot.version>
<pagehelper.boot.version>1.4.7</pagehelper.boot.version>
<fastjson.version>1.2.83</fastjson.version>
<oshi.version>6.2.2</oshi.version>
<commons.io.version>2.11.0</commons.io.version>
<commons.fileupload.version>1.4</commons.fileupload.version>
<oshi.version>6.6.5</oshi.version>
<commons.io.version>2.16.1</commons.io.version>
<poi.version>4.1.2</poi.version>
<velocity.version>2.3</velocity.version>
<!-- override dependency version -->
<tomcat.version>9.0.96</tomcat.version>
<logback.version>1.2.13</logback.version>
<spring-framework.version>5.3.39</spring-framework.version>
</properties>
<!-- 依赖声明 -->
<dependencyManagement>
<dependencies>
<!-- 覆盖SpringFramework的依赖配置-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>${spring-framework.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SpringBoot的依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.5.14</version>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 覆盖logback的依赖配置-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<!-- 覆盖tomcat的依赖配置-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
<version>${tomcat.version}</version>
</dependency>
<!-- 阿里数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
@ -55,7 +99,7 @@
<!-- 验证码 -->
<dependency>
<groupId>com.github.penggle</groupId>
<groupId>pro.fessional</groupId>
<artifactId>kaptcha</artifactId>
<version>${kaptcha.version}</version>
</dependency>
@ -95,13 +139,6 @@
<version>${bitwalker.version}</version>
</dependency>
<!-- SpringBoot集成mybatis框架 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot.version}</version>
</dependency>
<!-- pagehelper 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
@ -136,13 +173,6 @@
<version>${commons.io.version}</version>
</dependency>
<!-- 文件上传工具类 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons.fileupload.version}</version>
</dependency>
<!-- excel工具 -->
<dependency>
<groupId>org.apache.poi</groupId>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>ruoyi</artifactId>
<groupId>com.ruoyi</groupId>
<version>4.7.5</version>
<version>4.7.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
@ -74,7 +74,7 @@
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.1.RELEASE</version>
<version>2.5.15</version>
<configuration>
<fork>true</fork> <!-- 如果没有该配置devtools不会生效 -->
</configuration>
@ -123,6 +123,7 @@
<exclude>**/*.min.js</exclude>
<exclude>**/*.min.css</exclude>
<exclude>**/fileinput.js</exclude>
<exclude>**/validate/**</exclude>
<exclude>**/bootstrap-table/**</exclude>
</excludes>
</configuration>

View File

@ -16,6 +16,7 @@ import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Excel.ColumnType;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.page.PageDomain;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.page.TableSupport;
@ -125,6 +126,22 @@ public class DemoTableController extends BaseController
columns.add(new UserTableColumn("用户邮箱", "userEmail"));
columns.add(new UserTableColumn("用户状态", "status"));
}
private final static List<DocumentModel> documents = new ArrayList<DocumentModel>();
{
documents.add(new DocumentModel(1, "247-XW·2024-D10-0001", "新闻热线[2024]000001", "索尼射击游戏《Concord》停止运营玩家将获全额退款", "索尼宣布多人射击游戏《Concord》将于9月6日停止运营玩家将获得全额退款。游戏总监Ryan Ellis在给玩家的信中表示这款游戏首次发布“并没有像我们预期的那样顺利”。《Concord》的开发历时8年投资超过1.5亿美元。游戏在Steam平台的售价为40美元采用买断制销售模式。据SteamDB统计游戏上市后的最高同时在线人数为697人。"));
documents.add(new DocumentModel(2, "247-XW·2024-D30-0002", "新闻热线[2024]000002", "网红账号被封,央媒:如此炫富毒瘤早就该拔了", "在社交平台上分享自己的生活日常,本来无可厚非。但无底线地展示物欲、宣扬拜金,取笑甚至嘲讽工薪者的烟火生活,就会遮蔽普通人的平凡质朴和坚韧奋斗,在无形中消解芸芸众生脚踏实地、自立自强的社会正气。对这种助长金钱至上、刺激公众焦虑,既污染网络生态,又撕裂社会和谐的炫富“毒瘤”,必须坚决拔除之。在国家有关部门的部署下,近日,多个网络平台开展“不良价值导向内容专项治理”行动,对“奢靡浪费”“炫富拜金”等问题从严打击,倡导理性、文明的消费观和价值观。"));
documents.add(new DocumentModel(3, "CT01-XW·2024-Y-0003", "新闻热线[2024]000003", "重庆一夫妻被骗至缅甸,家属:两人已被解救,预计很快能回国", "5月25日重庆一对夫妻在前往泰国后失联疑被诈骗集团骗至缅甸的消息引发广泛关注。警方已对此事立案调查而这对夫妻的亲属则每天生活在焦急和不安之中。亲属家都瘫痪了事情一经曝光迅速登上了热搜成为公众热议的话题。据了解这对夫妻原计划是去泰国谈生意但不幸的是他们的泰国之行变成了一场噩梦。亲属李先生透露4月14日他们夫妻二人抵达泰国不久后便疑似被人以10万元的价格卖到缅甸目前被困在缅甸妙瓦底的一个电信诈骗园区。"));
documents.add(new DocumentModel(4, "CT01-XW·2024-Y-0004", "新闻热线[2024]000004", "江滨社区联合派出所、金霞消防站开展电动自行车安全隐患夜查活动", "近日,长沙市开福区江滨社区联合派出所、金霞消防站深入居民小区、单位场所,以电动车自行车火灾防范为重点,开展消防安全夜查行动。此次夜查紧紧围绕老旧居民区、“三合一”场所、沿街门店、夜间经营使用场所等场所开展监督检查,重点检查电动自行车违规停放充电、堵塞疏散通道和安全出口,架空层违规作为电动自行车停放充电场所,电动自行车违规“进楼入户”“飞线充电”,电动自行车擅自改装等五大类问题。"));
documents.add(new DocumentModel(5, "CT01-XW·2024-Y-0005", "新闻热线[2024]000005", "《黑神话》让海外玩家迷上“悟空”", "备受全球玩家瞩目的首款国产3A游戏《黑神话悟空》日前正式发布。精美绝伦的东方美学世界、精彩纷呈的中国神话故事、酣畅淋漓的游戏体验这款游戏为全球玩家带来一场视觉与文化的双重盛宴。从“悟空”成功出海的背后海外人士看到了中国游戏产业的巨大进步感受到了中国文化的多元精彩并对下一个“悟空”的诞生及更多中国文化产品走向世界充满期待。"));
documents.add(new DocumentModel(6, "CT01-XW·2024-Y-0006", "新闻热线[2024]000006", "市场状况充满挑战极星宣布裁员全球约15%的员工", "据路透社报道极星周五以“充满挑战的市场状况”为由宣布计划在全球范围内裁减约450个职位。此次裁员之际许多人都对电动汽车需求降温表示担忧而且极星预计汽车业务最早将在2025年开始实现收支平衡。极星发言人表示“作为该商业计划的一部分我们需要调整我们的业务和运营规模。” “这涉及减少外部支出,遗憾的是,还包括我们的员工数量。”该公司还表示,希望减少对沃尔沃及其母公司吉利外部融资的依赖,最近还表示希望削减成本并提高电动汽车的利润率。"));
documents.add(new DocumentModel(7, "CT01-XW·2024-Y-0007", "新闻热线[2024]000007", "浙江隐秘富豪涉百亿非法集资案,部分资金流入新造车公司", "5月10日、11日上海北广投资管理有限公司下称“北广投”非法集资案在上海黄浦区人民法院一审公开开庭审理北广投实控人周敏、法定代表人朱江等30余名中高管被控非法吸收公众存款罪。根据财新报道这一案件中非法集资的资金有部分流入了两家新能源车企——爱驰汽车、万象汽车。同时有多位投资人引述与经侦部门沟通时的说法称该案事发时未兑付金额有130余亿元其中去往广微控股45亿元、万象汽车63亿元、爱驰汽车15亿元。"));
documents.add(new DocumentModel(8, "CT01-XW·2024-Y-0008", "新闻热线[2024]000008", "特斯拉宣布Model Y升级搭载HW4.0硬件售价仍25.89万元起", "2月1日特斯拉官方宣布ModelY升级。外观上新增ModelY专属色“快银车漆”并采用烈焰红代替中国红、星空灰代替冷光银性能上ModelY全系配备全新一代自动辅助驾驶硬件(HW4.0)通过搭载超远距离双目摄像头ModelY的最远探测距离达424米。由此特斯拉全系车型均配备了自动辅助驾驶硬件HW4.0。在售价方面特斯拉中国官网显示ModelY车型依然保持原价。ModelY后轮驱动版25.89万元起、ModelY长续航版29.99万元起、ModelY高性能版售价36.39万元起。"));
documents.add(new DocumentModel(9, "CT01-XW·2024-D10-0009", "新闻热线[2024]000009", "华为手机归来,谁最受伤?", "低迷周期下的智能手机市场在2023年下半年迎来了华为的回归这也给本就竞争激烈的市场环境带来了更大变数。1月29日有消息称华为已注册“星耀手机”品牌商标定位中端手机市场但上述消息并未获得华为方面确认。“目前星耀的相关信息我们看到了但是没有获得产品信息以及启动线下铺货的通知。对于和其他品牌的二选一问题听其他省份的经销商说过但目前华为渠道这边也没有更多动作。”一位广东区域的华为核心经销商对记者说。但华为手机的反扑已经开始。在多家调研机构公布的2023年四季度智能手机出货数据中华为手机的量正在明显上升当季增幅在35%到47%之间。不过,从全年数据来看,并未登上前五榜单。"));
documents.add(new DocumentModel(10, "CT01-XW·2024-D10-0010", "新闻热线[2024]000010", "疯狂裁员的硅谷大厂除了AI其它都是将就", "放眼望去近期科技企业财报形势一片大好裁员浪潮却仍在不断蔓延。国内职场动态看脉脉那硅谷裁员情况就得看layoff.fyi了。数据显示2024年103家科技企业进行了裁员28963位员工失去了饭碗。其中电子支付公司PayPal大笔一挥裁掉2500人微软则在开年就裁掉1900人。回望2023年谷歌、Meta、亚马逊、微软均为裁员重灾区裁员人数在一万左右。具体而言谷歌近日披露的财报指出2023年谷歌解雇了12000多名员工光是在遣散费和其他费用上就花费了21亿美元。而且裁员费用还在不断增加2024年刚过去一个月谷歌就已经花费了7亿美元用来裁员。"));
documents.add(new DocumentModel(11, "CT01-XW·2024-D30-0011", "新闻热线[2024]000011", "国产手机品牌重新崛起背后:市场正在逐步恢复活力,竞争也愈发激烈", "2024年伊始随着全球经济的逐渐复苏手机消费市场也展现出勃勃生机。中国信通院最新数据显示2023年中国市场手机出货量实现了6.5%的同比增长其中5G手机增长势头更为强劲占比高达82.8%。1月25日国际数据公司IDC发布了最新手机季度跟踪报告揭示了中国智能手机市场在2023年第四季度的出货量情况。报告显示该季度中国智能手机市场出货量达到了约7363万台同比增长1.2%。这是在连续十个季度同比下降后,中国智能手机市场首次实现反弹。这一积极信号表明,市场正在逐步恢复活力,各大品牌之间的竞争也愈发激烈。"));
documents.add(new DocumentModel(12, "CT01-XW·2024-D30-0012", "新闻热线[2024]000012", "SpaceX将于1月31日向国际空间站发射天鹅号货运飞船", "1月29日消息美国太空探索技术公司SpaceX计划于当地时间1月30日利用“猎鹰9号”火箭从佛罗里达州肯尼迪航天中心发射诺斯罗普·格鲁曼公司的“天鹅号”货运飞船至国际空间站。此次任务是执行NG-20商业补给将运送约8200多磅的物资、设备及科学实验器材。"));
}
/**
* 搜索相关
@ -209,6 +226,15 @@ public class DemoTableController extends BaseController
return prefix + "/remember";
}
/**
* 表格保存状态
*/
@GetMapping("/cookie")
public String cookie()
{
return prefix + "/cookie";
}
/**
* 跳转至指定页
*/
@ -390,6 +416,15 @@ public class DemoTableController extends BaseController
return prefix + "/dynamicColumns";
}
/**
* 表格虚拟滚动
*/
@GetMapping("/virtualScroll")
public String virtualScroll()
{
return prefix + "/virtualScroll";
}
/**
* 自定义视图分页
*/
@ -399,6 +434,15 @@ public class DemoTableController extends BaseController
return prefix + "/customView";
}
/**
* 全文索引
*/
@GetMapping("/textSearch")
public String textSearch()
{
return prefix + "/textSearch";
}
/**
* 异步加载表格树
*/
@ -473,6 +517,57 @@ public class DemoTableController extends BaseController
return rspData;
}
/**
* 查询全文索引数据
*/
@PostMapping("/text/list")
@ResponseBody
public TableDataInfo textList(BaseEntity baseEntity)
{
TableDataInfo rspData = new TableDataInfo();
List<DocumentModel> documentList = new ArrayList<DocumentModel>(Arrays.asList(new DocumentModel[documents.size()]));
Collections.copy(documentList, documents);
// 查询条件过滤
if (StringUtils.isNotEmpty(baseEntity.getSearchValue()))
{
documentList.clear();
for (DocumentModel document : documents)
{
boolean indexFlag = false;
if (document.getTitle().contains(baseEntity.getSearchValue()))
{
indexFlag = true;
document.setTitle(document.getTitle().replace(baseEntity.getSearchValue(), "<font color=\"red\">" + baseEntity.getSearchValue() + "</font>"));
}
if (document.getContent().contains(baseEntity.getSearchValue()))
{
indexFlag = true;
document.setContent(document.getContent().replace(baseEntity.getSearchValue(), "<font color=\"red\">" + baseEntity.getSearchValue() + "</font>"));
}
if (indexFlag)
{
documentList.add(document);
}
}
}
PageDomain pageDomain = TableSupport.buildPageRequest();
if (null == pageDomain.getPageNum() || null == pageDomain.getPageSize())
{
rspData.setRows(documentList);
rspData.setTotal(documentList.size());
return rspData;
}
Integer pageNum = (pageDomain.getPageNum() - 1) * 10;
Integer pageSize = pageDomain.getPageNum() * 10;
if (pageSize > documentList.size())
{
pageSize = documentList.size();
}
rspData.setRows(documentList.subList(pageNum, pageSize));
rspData.setTotal(documentList.size());
return rspData;
}
/**
* 查询树表数据
*/
@ -506,8 +601,8 @@ public class DemoTableController extends BaseController
}
}
PageDomain pageDomain = TableSupport.buildPageRequest();
Integer pageNum = (pageDomain.getPageNum() - 1) * 10;
Integer pageSize = pageDomain.getPageNum() * 10;
Integer pageNum = (pageDomain.getPageNum() - 1) * pageDomain.getPageSize();
Integer pageSize = pageDomain.getPageNum() * pageDomain.getPageSize();
if (pageSize > areaList.size())
{
pageSize = areaList.size();
@ -844,3 +939,85 @@ class AreaModel
this.isTreeLeaf = isTreeLeaf;
}
}
class DocumentModel
{
/** 编号 */
private int tableId;
/** 档号 */
private String archiveNo;
/** 文件编号 */
private String docNo;
/** 标题 */
private String title;
/** 内容 */
private String content;
public DocumentModel()
{
}
public DocumentModel(int tableId, String archiveNo, String docNo, String title, String content)
{
this.tableId = tableId;
this.archiveNo = archiveNo;
this.docNo = docNo;
this.title = title;
this.content = content;
}
public int getTableId()
{
return tableId;
}
public String getArchiveNo()
{
return archiveNo;
}
public String getDocNo()
{
return docNo;
}
public String getTitle()
{
return title;
}
public String getContent()
{
return content;
}
public void setTableId(int tableId)
{
this.tableId = tableId;
}
public void setArchiveNo(String archiveNo)
{
this.archiveNo = archiveNo;
}
public void setDocNo(String docNo)
{
this.docNo = docNo;
}
public void setTitle(String title)
{
this.title = title;
}
public void setContent(String content)
{
this.content = content;
}
}

View File

@ -12,7 +12,6 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
@ -84,7 +83,7 @@ public class SysConfigController extends BaseController
@ResponseBody
public AjaxResult addSave(@Validated SysConfig config)
{
if (UserConstants.CONFIG_KEY_NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config)))
if (!configService.checkConfigKeyUnique(config))
{
return error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
}
@ -112,7 +111,7 @@ public class SysConfigController extends BaseController
@ResponseBody
public AjaxResult editSave(@Validated SysConfig config)
{
if (UserConstants.CONFIG_KEY_NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config)))
if (!configService.checkConfigKeyUnique(config))
{
return error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
}
@ -151,7 +150,7 @@ public class SysConfigController extends BaseController
*/
@PostMapping("/checkConfigKeyUnique")
@ResponseBody
public String checkConfigKeyUnique(SysConfig config)
public boolean checkConfigKeyUnique(SysConfig config)
{
return configService.checkConfigKeyUnique(config);
}

View File

@ -74,7 +74,7 @@ public class SysDeptController extends BaseController
@ResponseBody
public AjaxResult addSave(@Validated SysDept dept)
{
if (UserConstants.DEPT_NAME_NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
if (!deptService.checkDeptNameUnique(dept))
{
return error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
}
@ -110,7 +110,7 @@ public class SysDeptController extends BaseController
{
Long deptId = dept.getDeptId();
deptService.checkDeptDataScope(deptId);
if (UserConstants.DEPT_NAME_NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
if (!deptService.checkDeptNameUnique(dept))
{
return error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
}
@ -152,7 +152,7 @@ public class SysDeptController extends BaseController
*/
@PostMapping("/checkDeptNameUnique")
@ResponseBody
public String checkDeptNameUnique(SysDept dept)
public boolean checkDeptNameUnique(SysDept dept)
{
return deptService.checkDeptNameUnique(dept);
}

View File

@ -12,7 +12,6 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.Ztree;
@ -83,7 +82,7 @@ public class SysDictTypeController extends BaseController
@ResponseBody
public AjaxResult addSave(@Validated SysDictType dict)
{
if (UserConstants.DICT_TYPE_NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict)))
if (!dictTypeService.checkDictTypeUnique(dict))
{
return error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
}
@ -111,7 +110,7 @@ public class SysDictTypeController extends BaseController
@ResponseBody
public AjaxResult editSave(@Validated SysDictType dict)
{
if (UserConstants.DICT_TYPE_NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict)))
if (!dictTypeService.checkDictTypeUnique(dict))
{
return error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
}
@ -159,7 +158,7 @@ public class SysDictTypeController extends BaseController
*/
@PostMapping("/checkDictTypeUnique")
@ResponseBody
public String checkDictTypeUnique(SysDictType dictType)
public boolean checkDictTypeUnique(SysDictType dictType)
{
return dictTypeService.checkDictTypeUnique(dictType);
}

View File

@ -12,7 +12,6 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.Ztree;
@ -105,7 +104,7 @@ public class SysMenuController extends BaseController
@ResponseBody
public AjaxResult addSave(@Validated SysMenu menu)
{
if (UserConstants.MENU_NAME_NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu)))
if (!menuService.checkMenuNameUnique(menu))
{
return error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
}
@ -134,7 +133,7 @@ public class SysMenuController extends BaseController
@ResponseBody
public AjaxResult editSave(@Validated SysMenu menu)
{
if (UserConstants.MENU_NAME_NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu)))
if (!menuService.checkMenuNameUnique(menu))
{
return error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
}
@ -157,7 +156,7 @@ public class SysMenuController extends BaseController
*/
@PostMapping("/checkMenuNameUnique")
@ResponseBody
public String checkMenuNameUnique(SysMenu menu)
public boolean checkMenuNameUnique(SysMenu menu)
{
return menuService.checkMenuNameUnique(menu);
}

View File

@ -99,6 +99,17 @@ public class SysNoticeController extends BaseController
return toAjax(noticeService.updateNotice(notice));
}
/**
* 查询公告详细
*/
@RequiresPermissions("system:notice:list")
@GetMapping("/view/{noticeId}")
public String view(@PathVariable("noticeId") Long noticeId, ModelMap mmap)
{
mmap.put("notice", noticeService.selectNoticeById(noticeId));
return prefix + "/view";
}
/**
* 删除公告
*/

View File

@ -12,7 +12,6 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
@ -97,11 +96,11 @@ public class SysPostController extends BaseController
@ResponseBody
public AjaxResult addSave(@Validated SysPost post)
{
if (UserConstants.POST_NAME_NOT_UNIQUE.equals(postService.checkPostNameUnique(post)))
if (!postService.checkPostNameUnique(post))
{
return error("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在");
}
else if (UserConstants.POST_CODE_NOT_UNIQUE.equals(postService.checkPostCodeUnique(post)))
else if (!postService.checkPostCodeUnique(post))
{
return error("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在");
}
@ -129,11 +128,11 @@ public class SysPostController extends BaseController
@ResponseBody
public AjaxResult editSave(@Validated SysPost post)
{
if (UserConstants.POST_NAME_NOT_UNIQUE.equals(postService.checkPostNameUnique(post)))
if (!postService.checkPostNameUnique(post))
{
return error("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在");
}
else if (UserConstants.POST_CODE_NOT_UNIQUE.equals(postService.checkPostCodeUnique(post)))
else if (!postService.checkPostCodeUnique(post))
{
return error("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在");
}
@ -146,7 +145,7 @@ public class SysPostController extends BaseController
*/
@PostMapping("/checkPostNameUnique")
@ResponseBody
public String checkPostNameUnique(SysPost post)
public boolean checkPostNameUnique(SysPost post)
{
return postService.checkPostNameUnique(post);
}
@ -156,7 +155,7 @@ public class SysPostController extends BaseController
*/
@PostMapping("/checkPostCodeUnique")
@ResponseBody
public String checkPostCodeUnique(SysPost post)
public boolean checkPostCodeUnique(SysPost post)
{
return postService.checkPostCodeUnique(post);
}

View File

@ -13,7 +13,6 @@ import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
@ -63,11 +62,7 @@ public class SysProfileController extends BaseController
public boolean checkPassword(String password)
{
SysUser user = getSysUser();
if (passwordService.matches(user, password))
{
return true;
}
return false;
return passwordService.matches(user, password);
}
@GetMapping("/resetPwd")
@ -138,13 +133,11 @@ public class SysProfileController extends BaseController
currentUser.setEmail(user.getEmail());
currentUser.setPhonenumber(user.getPhonenumber());
currentUser.setSex(user.getSex());
if (StringUtils.isNotEmpty(user.getPhonenumber())
&& UserConstants.USER_PHONE_NOT_UNIQUE.equals(userService.checkPhoneUnique(currentUser)))
if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(currentUser))
{
return error("修改用户'" + currentUser.getLoginName() + "'失败,手机号码已存在");
}
else if (StringUtils.isNotEmpty(user.getEmail())
&& UserConstants.USER_EMAIL_NOT_UNIQUE.equals(userService.checkEmailUnique(currentUser)))
else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(currentUser))
{
return error("修改用户'" + currentUser.getLoginName() + "'失败,邮箱账号已存在");
}

View File

@ -12,7 +12,6 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.Ztree;
@ -93,11 +92,11 @@ public class SysRoleController extends BaseController
@ResponseBody
public AjaxResult addSave(@Validated SysRole role)
{
if (UserConstants.ROLE_NAME_NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
if (!roleService.checkRoleNameUnique(role))
{
return error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
}
else if (UserConstants.ROLE_KEY_NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role)))
else if (!roleService.checkRoleKeyUnique(role))
{
return error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
}
@ -130,11 +129,11 @@ public class SysRoleController extends BaseController
{
roleService.checkRoleAllowed(role);
roleService.checkRoleDataScope(role.getRoleId());
if (UserConstants.ROLE_NAME_NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
if (!roleService.checkRoleNameUnique(role))
{
return error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
}
else if (UserConstants.ROLE_KEY_NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role)))
else if (!roleService.checkRoleKeyUnique(role))
{
return error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
}
@ -187,7 +186,7 @@ public class SysRoleController extends BaseController
*/
@PostMapping("/checkRoleNameUnique")
@ResponseBody
public String checkRoleNameUnique(SysRole role)
public boolean checkRoleNameUnique(SysRole role)
{
return roleService.checkRoleNameUnique(role);
}
@ -197,7 +196,7 @@ public class SysRoleController extends BaseController
*/
@PostMapping("/checkRoleKeyUnique")
@ResponseBody
public String checkRoleKeyUnique(SysRole role)
public boolean checkRoleKeyUnique(SysRole role)
{
return roleService.checkRoleKeyUnique(role);
}

View File

@ -15,7 +15,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.Ztree;
@ -25,6 +24,7 @@ import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
@ -130,22 +130,23 @@ public class SysUserController extends BaseController
@ResponseBody
public AjaxResult addSave(@Validated SysUser user)
{
if (UserConstants.USER_NAME_NOT_UNIQUE.equals(userService.checkLoginNameUnique(user.getLoginName())))
deptService.checkDeptDataScope(user.getDeptId());
roleService.checkRoleDataScope(user.getRoleIds());
if (!userService.checkLoginNameUnique(user))
{
return error("新增用户'" + user.getLoginName() + "'失败,登录账号已存在");
}
else if (StringUtils.isNotEmpty(user.getPhonenumber())
&& UserConstants.USER_PHONE_NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
{
return error("新增用户'" + user.getLoginName() + "'失败,手机号码已存在");
}
else if (StringUtils.isNotEmpty(user.getEmail())
&& UserConstants.USER_EMAIL_NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
{
return error("新增用户'" + user.getLoginName() + "'失败,邮箱账号已存在");
}
user.setSalt(ShiroUtils.randomSalt());
user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
user.setPwdUpdateDate(DateUtils.getNowDate());
user.setCreateBy(getLoginName());
return toAjax(userService.insertUser(user));
}
@ -165,6 +166,20 @@ public class SysUserController extends BaseController
return prefix + "/edit";
}
/**
* 查询用户详细
*/
@RequiresPermissions("system:user:list")
@GetMapping("/view/{userId}")
public String view(@PathVariable("userId") Long userId, ModelMap mmap)
{
userService.checkUserDataScope(userId);
mmap.put("user", userService.selectUserById(userId));
mmap.put("roleGroup", userService.selectUserRoleGroup(userId));
mmap.put("postGroup", userService.selectUserPostGroup(userId));
return prefix + "/view";
}
/**
* 修改保存用户
*/
@ -176,13 +191,17 @@ public class SysUserController extends BaseController
{
userService.checkUserAllowed(user);
userService.checkUserDataScope(user.getUserId());
if (StringUtils.isNotEmpty(user.getPhonenumber())
&& UserConstants.USER_PHONE_NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
deptService.checkDeptDataScope(user.getDeptId());
roleService.checkRoleDataScope(user.getRoleIds());
if (!userService.checkLoginNameUnique(user))
{
return error("修改用户'" + user.getLoginName() + "'失败,登录账号已存在");
}
else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
{
return error("修改用户'" + user.getLoginName() + "'失败,手机号码已存在");
}
else if (StringUtils.isNotEmpty(user.getEmail())
&& UserConstants.USER_EMAIL_NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
{
return error("修改用户'" + user.getLoginName() + "'失败,邮箱账号已存在");
}
@ -244,6 +263,7 @@ public class SysUserController extends BaseController
public AjaxResult insertAuthRole(Long userId, Long[] roleIds)
{
userService.checkUserDataScope(userId);
roleService.checkRoleDataScope(roleIds);
userService.insertUserAuth(userId, roleIds);
AuthorizationUtils.clearAllCachedAuthorizationInfo();
return success();
@ -267,9 +287,9 @@ public class SysUserController extends BaseController
*/
@PostMapping("/checkLoginNameUnique")
@ResponseBody
public String checkLoginNameUnique(SysUser user)
public boolean checkLoginNameUnique(SysUser user)
{
return userService.checkLoginNameUnique(user.getLoginName());
return userService.checkLoginNameUnique(user);
}
/**
@ -277,7 +297,7 @@ public class SysUserController extends BaseController
*/
@PostMapping("/checkPhoneUnique")
@ResponseBody
public String checkPhoneUnique(SysUser user)
public boolean checkPhoneUnique(SysUser user)
{
return userService.checkPhoneUnique(user);
}
@ -287,7 +307,7 @@ public class SysUserController extends BaseController
*/
@PostMapping("/checkEmailUnique")
@ResponseBody
public String checkEmailUnique(SysUser user)
public boolean checkEmailUnique(SysUser user)
{
return userService.checkEmailUnique(user);
}

View File

@ -24,6 +24,10 @@ spring:
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置连接超时时间
connectTimeout: 30000
# 配置网络超时时间
socketTimeout: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒

View File

@ -3,9 +3,9 @@ ruoyi:
# 名称
name: RuoYi
# 版本
version: 4.7.5
version: 4.7.9
# 版权年份
copyrightYear: 2022
copyrightYear: 2024
# 实例演示开关
demoEnabled: true
# 文件路径 示例( Windows配置D:/ruoyi/uploadPathLinux配置 /home/ruoyi/uploadPath
@ -58,15 +58,15 @@ spring:
jackson:
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
profiles:
profiles:
active: druid
# 文件上传
servlet:
multipart:
# 单个文件大小
max-file-size: 10MB
# 设置总上传的文件大小
max-request-size: 20MB
multipart:
# 单个文件大小
max-file-size: 10MB
# 设置总上传的文件大小
max-request-size: 20MB
# 服务模块
devtools:
restart:
@ -75,18 +75,18 @@ spring:
# MyBatis
mybatis:
# 搜索指定包别名
typeAliasesPackage: com.ruoyi.**.domain
# 配置mapper的扫描找到所有的mapper.xml映射文件
mapperLocations: classpath*:mapper/**/*Mapper.xml
# 加载全局的配置文件
configLocation: classpath:mybatis/mybatis-config.xml
# 搜索指定包别名
typeAliasesPackage: com.ruoyi.**.domain
# 配置mapper的扫描找到所有的mapper.xml映射文件
mapperLocations: classpath*:mapper/**/*Mapper.xml
# 加载全局的配置文件
configLocation: classpath:mybatis/mybatis-config.xml
# PageHelper分页插件
pagehelper:
pagehelper:
helperDialect: mysql
supportMethodsArguments: true
params: count=countSql
params: count=countSql
# Shiro
shiro:
@ -99,11 +99,11 @@ shiro:
indexUrl: /index
# 验证码开关
captchaEnabled: true
# 验证码类型 math 数组计算 char 字符
# 验证码类型 math 数字计算 char 字符验证
captchaType: math
cookie:
# 设置Cookie的域名 默认空,即当前访问的域名
domain:
domain:
# 设置cookie的有效访问路径
path: /
# 设置HttpOnly属性
@ -111,7 +111,7 @@ shiro:
# 设置Cookie的过期时间天为单位
maxAge: 30
# 设置密钥务必保持唯一性生成方式直接拷贝到main运行即可Base64.encodeToString(CipherUtils.generateNewKey(128, "AES").getEncoded()) 默认启动生成随机秘钥随机秘钥会导致之前客户端RememberMe Cookie无效如设置固定秘钥RememberMe Cookie则有效
cipherKey:
cipherKey:
session:
# Session超时时间-1代表永不过期默认30分钟
expireTime: 30
@ -128,7 +128,7 @@ shiro:
enabled: true
# 防止XSS攻击
xss:
xss:
# 过滤开关
enabled: true
# 排除链接(多个用逗号分隔)

View File

@ -1,11 +1,11 @@
/*!
* bootstrap-fileinput v5.2.4
* bootstrap-fileinput v5.5.2
* http://plugins.krajee.com/file-input
*
* Krajee default styling for bootstrap-fileinput.
*
* Author: Kartik Visweswaran
* Copyright: 2014 - 2021, Kartik Visweswaran, Krajee.com
* Copyright: 2014 - 2022, Kartik Visweswaran, Krajee.com
*
* Licensed under the BSD-3-Clause
* https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
@ -50,6 +50,10 @@ input[type=file].file-loading {
display: none;
}
.file-caption .input-group {
align-items: center;
}
.btn-file input[type=file],
.file-caption-icon,
.file-preview .fileinput-remove,
@ -274,6 +278,7 @@ input[type=file].file-loading {
padding: 6px;
float: left;
text-align: center;
}
.krajee-default.file-preview-frame .kv-file-content {
@ -281,12 +286,6 @@ input[type=file].file-loading {
height: 160px;
}
.krajee-default .file-preview-other-frame {
display: flex;
align-items: center;
justify-content: center;
}
.krajee-default.file-preview-frame .kv-file-content.kv-pdf-rendered {
width: 400px;
}
@ -330,7 +329,7 @@ input[type=file].file-loading {
text-align: center;
padding-top: 4px;
font-size: 11px;
color: #777;
color: #999;
margin-bottom: 30px;
}
@ -406,7 +405,7 @@ input[type=file].file-loading {
height: 2.4rem;
top: 50%;
border-radius: 50%;
text-align:center;
text-align: center;
}
.btn-navigate * {
@ -426,19 +425,12 @@ input[type=file].file-loading {
right: 0;
}
.file-zoom-dialog .kv-zoom-caption {
max-width: 50%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.file-zoom-dialog .kv-zoom-header {
padding: 0.5rem;
}
.file-zoom-dialog .kv-zoom-body {
padding: 0.25rem 0.5rem 0.25rem 0;
padding: 0.25rem;
}
.file-zoom-dialog .kv-zoom-description {
@ -554,6 +546,10 @@ input[type=file].file-loading {
z-index: 3000;
}
.kv-zoom-actions {
min-width: 140px;
}
.kv-zoom-actions .btn-kv {
margin-left: 3px;
}
@ -568,15 +564,6 @@ input[type=file].file-loading {
background: transparent;
}
.file-zoom-content > * {
display: inline-block;
vertical-align: middle;
}
.file-zoom-content .kv-spacer {
height: 100%;
}
.file-zoom-content .file-preview-image {
max-height: 100%;
}
@ -668,4 +655,34 @@ input[type=file].file-loading {
.file-preview .kv-zoom-cache {
display: none;
}
.file-preview-other-frame, .file-preview-object, .kv-file-content, .kv-zoom-body {
display: flex;
align-items: center;
justify-content: center;
}
.btn-kv-rotate,
.kv-file-rotate {
display: none;
}
.rotatable:not(.hide-rotate) .btn-kv-rotate,
.rotatable:not(.hide-rotate) .kv-file-rotate {
display: inline-block;
}
.rotatable .file-zoom-detail,
.rotatable .kv-file-content,
.rotatable .kv-file-content > :first-child {
transform-origin: center center;
}
.rotate-animate {
transition: transform 0.3s ease;
}
.kv-overflow-hidden {
overflow: hidden;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -49,8 +49,8 @@ $.BootstrapTable = class extends $.BootstrapTable {
<button class="auto-refresh ${this.constants.buttonsClass}
${this.options.autoRefreshStatus ? ` ${this.constants.classes.buttonActive}` : ''}"
type="button" name="autoRefresh" title="${this.options.formatAutoRefresh()}">
${ this.options.showButtonIcons ? Utils.sprintf(this.constants.html.icon, this.options.iconsPrefix, this.options.icons.autoRefresh) : ''}
${ this.options.showButtonText ? this.options.formatAutoRefresh() : ''}
${this.options.showButtonIcons ? Utils.sprintf(this.constants.html.icon, this.options.iconsPrefix, this.options.icons.autoRefresh) : ''}
${this.options.showButtonText ? this.options.formatAutoRefresh() : ''}
</button>
`,
event: this.toggleAutoRefresh

View File

@ -0,0 +1,606 @@
/**
* @author: Dennis Hernández
* @update zhixin wen <wenzhixin2010@gmail.com>
*/
var Utils = $.fn.bootstrapTable.utils
var UtilsCookie = {
cookieIds: {
sortOrder: 'bs.table.sortOrder',
sortName: 'bs.table.sortName',
sortPriority: 'bs.table.sortPriority',
pageNumber: 'bs.table.pageNumber',
pageList: 'bs.table.pageList',
hiddenColumns: 'bs.table.hiddenColumns',
cardView: 'bs.table.cardView',
customView: 'bs.table.customView',
searchText: 'bs.table.searchText',
reorderColumns: 'bs.table.reorderColumns',
filterControl: 'bs.table.filterControl',
filterBy: 'bs.table.filterBy'
},
getCurrentHeader (that) {
return that.options.height ? that.$tableHeader : that.$header
},
getCurrentSearchControls (that) {
return that.options.height ? 'table select, table input' : 'select, input'
},
isCookieSupportedByBrowser () {
return navigator.cookieEnabled
},
isCookieEnabled (that, cookieName) {
return that.options.cookiesEnabled.includes(cookieName)
},
setCookie (that, cookieName, cookieValue) {
if (
!that.options.cookie ||
!UtilsCookie.isCookieEnabled(that, cookieName)
) {
return
}
return that._storage.setItem(`${that.options.cookieIdTable}.${cookieName}`, cookieValue)
},
getCookie (that, cookieName) {
if (
!cookieName ||
!UtilsCookie.isCookieEnabled(that, cookieName)
) {
return null
}
return that._storage.getItem(`${that.options.cookieIdTable}.${cookieName}`)
},
deleteCookie (that, cookieName) {
return that._storage.removeItem(`${that.options.cookieIdTable}.${cookieName}`)
},
calculateExpiration (cookieExpire) {
const time = cookieExpire.replace(/[0-9]*/, '') // s,mi,h,d,m,y
cookieExpire = cookieExpire.replace(/[A-Za-z]{1,2}/, '') // number
switch (time.toLowerCase()) {
case 's':
cookieExpire = +cookieExpire
break
case 'mi':
cookieExpire *= 60
break
case 'h':
cookieExpire = cookieExpire * 60 * 60
break
case 'd':
cookieExpire = cookieExpire * 24 * 60 * 60
break
case 'm':
cookieExpire = cookieExpire * 30 * 24 * 60 * 60
break
case 'y':
cookieExpire = cookieExpire * 365 * 24 * 60 * 60
break
default:
cookieExpire = undefined
break
}
if (!cookieExpire) {
return ''
}
const d = new Date()
d.setTime(d.getTime() + cookieExpire * 1000)
return d.toGMTString()
},
initCookieFilters (that) {
setTimeout(() => {
const parsedCookieFilters = JSON.parse(
UtilsCookie.getCookie(that, UtilsCookie.cookieIds.filterControl))
if (!that._filterControlValuesLoaded && parsedCookieFilters) {
const cachedFilters = {}
const header = UtilsCookie.getCurrentHeader(that)
const searchControls = UtilsCookie.getCurrentSearchControls(that)
const applyCookieFilters = (element, filteredCookies) => {
filteredCookies.forEach(cookie => {
const value = element.value.toString()
const text = cookie.text
if (
text === '' ||
element.type === 'radio' &&
value !== text
) {
return
}
if (
element.tagName === 'INPUT' &&
element.type === 'radio' &&
value === text
) {
element.checked = true
cachedFilters[cookie.field] = text
} else if (element.tagName === 'INPUT') {
element.value = text
cachedFilters[cookie.field] = text
} else if (
element.tagName === 'SELECT' &&
that.options.filterControlContainer
) {
element.value = text
cachedFilters[cookie.field] = text
} else if (text !== '' && element.tagName === 'SELECT') {
cachedFilters[cookie.field] = text
for (const currentElement of element) {
if (currentElement.value === text) {
currentElement.selected = true
return
}
}
const option = document.createElement('option')
option.value = text
option.text = text
element.add(option, element[1])
element.selectedIndex = 1
}
})
}
let filterContainer = header
if (that.options.filterControlContainer) {
filterContainer = $(`${that.options.filterControlContainer}`)
}
filterContainer.find(searchControls).each(function () {
const field = $(this).closest('[data-field]').data('field')
const filteredCookies = parsedCookieFilters.filter(cookie => cookie.field === field)
applyCookieFilters(this, filteredCookies)
})
that.initColumnSearch(cachedFilters)
that._filterControlValuesLoaded = true
that.initServer()
}
}, 250)
}
}
Object.assign($.fn.bootstrapTable.defaults, {
cookie: false,
cookieExpire: '2h',
cookiePath: null,
cookieDomain: null,
cookieSecure: null,
cookieSameSite: 'Lax',
cookieIdTable: '',
cookiesEnabled: [
'bs.table.sortOrder', 'bs.table.sortName', 'bs.table.sortPriority',
'bs.table.pageNumber', 'bs.table.pageList',
'bs.table.hiddenColumns', 'bs.table.searchText',
'bs.table.filterControl', 'bs.table.filterBy',
'bs.table.reorderColumns', 'bs.table.cardView', 'bs.table.customView'
],
cookieStorage: 'cookieStorage', // localStorage, sessionStorage, customStorage
cookieCustomStorageGet: null,
cookieCustomStorageSet: null,
cookieCustomStorageDelete: null,
// internal variable
_filterControls: [],
_filterControlValuesLoaded: false,
_storage: {
setItem: undefined,
getItem: undefined,
removeItem: undefined
}
})
$.fn.bootstrapTable.methods.push('getCookies')
$.fn.bootstrapTable.methods.push('deleteCookie')
Object.assign($.fn.bootstrapTable.utils, {
setCookie: UtilsCookie.setCookie,
getCookie: UtilsCookie.getCookie
})
$.BootstrapTable = class extends $.BootstrapTable {
init () {
if (this.options.cookie) {
if (
this.options.cookieStorage === 'cookieStorage' &&
!UtilsCookie.isCookieSupportedByBrowser()
) {
throw new Error('Cookies are not enabled in this browser.')
}
this.configureStorage()
// FilterBy logic
const filterByCookieValue = UtilsCookie.getCookie(this, UtilsCookie.cookieIds.filterBy)
if (typeof filterByCookieValue === 'boolean' && !filterByCookieValue) {
throw new Error('The cookie value of filterBy must be a json!')
}
let filterByCookie = {}
try {
filterByCookie = JSON.parse(filterByCookieValue)
} catch (e) {
throw new Error('Could not parse the json of the filterBy cookie!')
}
this.filterColumns = filterByCookie ? filterByCookie : {}
// FilterControl logic
this._filterControls = []
this._filterControlValuesLoaded = false
this.options.cookiesEnabled = typeof this.options.cookiesEnabled === 'string' ?
this.options.cookiesEnabled.replace('[', '').replace(']', '')
.replace(/'/g, '').replace(/ /g, '').split(',') :
this.options.cookiesEnabled
if (this.options.filterControl) {
const that = this
this.$el.on('column-search.bs.table', (e, field, text) => {
let isNewField = true
for (let i = 0; i < that._filterControls.length; i++) {
if (that._filterControls[i].field === field) {
that._filterControls[i].text = text
isNewField = false
break
}
}
if (isNewField) {
that._filterControls.push({
field,
text
})
}
UtilsCookie.setCookie(that, UtilsCookie.cookieIds.filterControl, JSON.stringify(that._filterControls))
}).on('created-controls.bs.table', UtilsCookie.initCookieFilters(that))
}
}
super.init()
}
initServer (...args) {
if (
this.options.cookie &&
this.options.filterControl &&
!this._filterControlValuesLoaded
) {
const cookie = JSON.parse(UtilsCookie.getCookie(this, UtilsCookie.cookieIds.filterControl))
if (cookie) {
return
}
}
super.initServer(...args)
}
initTable (...args) {
super.initTable(...args)
this.initCookie()
}
onSort (...args) {
super.onSort(...args)
if (!this.options.cookie) {
return
}
if (this.options.sortName === undefined || this.options.sortOrder === undefined) {
UtilsCookie.deleteCookie(this, UtilsCookie.cookieIds.sortName)
UtilsCookie.deleteCookie(this, UtilsCookie.cookieIds.sortOrder)
} else {
this.options.sortPriority = null
UtilsCookie.deleteCookie(this, UtilsCookie.cookieIds.sortPriority)
UtilsCookie.setCookie(this, UtilsCookie.cookieIds.sortOrder, this.options.sortOrder)
UtilsCookie.setCookie(this, UtilsCookie.cookieIds.sortName, this.options.sortName)
}
}
onMultipleSort (...args) {
super.onMultipleSort(...args)
if (!this.options.cookie) {
return
}
if (this.options.sortPriority === undefined) {
UtilsCookie.deleteCookie(this, UtilsCookie.cookieIds.sortPriority)
} else {
this.options.sortName = undefined
this.options.sortOrder = undefined
UtilsCookie.deleteCookie(this, UtilsCookie.cookieIds.sortName)
UtilsCookie.deleteCookie(this, UtilsCookie.cookieIds.sortOrder)
UtilsCookie.setCookie(this, UtilsCookie.cookieIds.sortPriority, JSON.stringify(this.options.sortPriority))
}
}
onPageNumber (...args) {
super.onPageNumber(...args)
if (!this.options.cookie) {
return
}
UtilsCookie.setCookie(this, UtilsCookie.cookieIds.pageNumber, this.options.pageNumber)
}
onPageListChange (...args) {
super.onPageListChange(...args)
if (!this.options.cookie) {
return
}
UtilsCookie.setCookie(this, UtilsCookie.cookieIds.pageList,
this.options.pageSize === this.options.formatAllRows() ? 'all' : this.options.pageSize)
UtilsCookie.setCookie(this, UtilsCookie.cookieIds.pageNumber, this.options.pageNumber)
}
onPagePre (...args) {
super.onPagePre(...args)
if (!this.options.cookie) {
return
}
UtilsCookie.setCookie(this, UtilsCookie.cookieIds.pageNumber, this.options.pageNumber)
}
onPageNext (...args) {
super.onPageNext(...args)
if (!this.options.cookie) {
return
}
UtilsCookie.setCookie(this, UtilsCookie.cookieIds.pageNumber, this.options.pageNumber)
}
_toggleColumn (...args) {
super._toggleColumn(...args)
if (!this.options.cookie) {
return
}
UtilsCookie.setCookie(this, UtilsCookie.cookieIds.hiddenColumns, JSON.stringify(this.getHiddenColumns().map(column => column.field)))
}
_toggleAllColumns (...args) {
super._toggleAllColumns(...args)
if (!this.options.cookie) {
return
}
UtilsCookie.setCookie(this, UtilsCookie.cookieIds.hiddenColumns, JSON.stringify(this.getHiddenColumns().map(column => column.field)))
}
toggleView () {
super.toggleView()
UtilsCookie.setCookie(this, UtilsCookie.cookieIds.cardView, this.options.cardView)
}
toggleCustomView () {
super.toggleCustomView()
UtilsCookie.setCookie(this, UtilsCookie.cookieIds.customView, this.customViewDefaultView)
}
selectPage (page) {
super.selectPage(page)
if (!this.options.cookie) {
return
}
UtilsCookie.setCookie(this, UtilsCookie.cookieIds.pageNumber, page)
}
onSearch (event) {
super.onSearch(event, arguments.length > 1 ? arguments[1] : true)
if (!this.options.cookie) {
return
}
if (this.options.search) {
UtilsCookie.setCookie(this, UtilsCookie.cookieIds.searchText, this.searchText)
}
UtilsCookie.setCookie(this, UtilsCookie.cookieIds.pageNumber, this.options.pageNumber)
}
initHeader (...args) {
if (this.options.reorderableColumns && this.options.cookie) {
this.columnsSortOrder = JSON.parse(UtilsCookie.getCookie(this, UtilsCookie.cookieIds.reorderColumns))
}
super.initHeader(...args)
}
persistReorderColumnsState (that) {
UtilsCookie.setCookie(that, UtilsCookie.cookieIds.reorderColumns, JSON.stringify(that.columnsSortOrder))
}
filterBy (...args) {
super.filterBy(...args)
if (!this.options.cookie) {
return
}
UtilsCookie.setCookie(this, UtilsCookie.cookieIds.filterBy, JSON.stringify(this.filterColumns))
}
initCookie () {
if (!this.options.cookie) {
return
}
if (this.options.cookieIdTable === '' || this.options.cookieExpire === '') {
console.error('Configuration error. Please review the cookieIdTable and the cookieExpire property. If the properties are correct, then this browser does not support cookies.')
this.options.cookie = false // Make sure that the cookie extension is disabled
return
}
const sortOrderCookie = UtilsCookie.getCookie(this, UtilsCookie.cookieIds.sortOrder)
const sortOrderNameCookie = UtilsCookie.getCookie(this, UtilsCookie.cookieIds.sortName)
let sortPriorityCookie = UtilsCookie.getCookie(this, UtilsCookie.cookieIds.sortPriority)
const pageNumberCookie = UtilsCookie.getCookie(this, UtilsCookie.cookieIds.pageNumber)
const pageListCookie = UtilsCookie.getCookie(this, UtilsCookie.cookieIds.pageList)
const searchTextCookie = UtilsCookie.getCookie(this, UtilsCookie.cookieIds.searchText)
const cardViewCookie = UtilsCookie.getCookie(this, UtilsCookie.cookieIds.cardView)
const customViewCookie = UtilsCookie.getCookie(this, UtilsCookie.cookieIds.customView)
const hiddenColumnsCookieValue = UtilsCookie.getCookie(this, UtilsCookie.cookieIds.hiddenColumns)
let hiddenColumnsCookie = {}
try {
hiddenColumnsCookie = JSON.parse(hiddenColumnsCookieValue)
} catch (e) {
throw new Error('Could not parse the json of the hidden columns cookie!', hiddenColumnsCookieValue)
}
try {
sortPriorityCookie = JSON.parse(sortPriorityCookie)
} catch (e) {
throw new Error('Could not parse the json of the sortPriority cookie!', sortPriorityCookie)
}
if (!sortPriorityCookie) {
// sortOrder
this.options.sortOrder = sortOrderCookie ? sortOrderCookie : this.options.sortOrder
// sortName
this.options.sortName = sortOrderNameCookie ? sortOrderNameCookie : this.options.sortName
} else {
this.options.sortOrder = undefined
this.options.sortName = undefined
}
// sortPriority
this.options.sortPriority = sortPriorityCookie ? sortPriorityCookie : this.options.sortPriority
if (this.options.sortOrder || this.options.sortName) {
// sortPriority
this.options.sortPriority = null
}
// pageNumber
this.options.pageNumber = pageNumberCookie ? +pageNumberCookie : this.options.pageNumber
// pageSize
this.options.pageSize = pageListCookie ? pageListCookie === 'all' ?
this.options.formatAllRows() : +pageListCookie : this.options.pageSize
// searchText
if (UtilsCookie.isCookieEnabled(this, UtilsCookie.cookieIds.searchText) && this.options.searchText === '') {
this.options.searchText = searchTextCookie ? searchTextCookie : ''
}
// cardView
if (cardViewCookie !== null) {
this.options.cardView = cardViewCookie === 'true' ? cardViewCookie : false
}
this.customViewDefaultView = customViewCookie === 'true'
if (hiddenColumnsCookie) {
for (const column of this.columns) {
if (!column.switchable) {
continue
}
column.visible = this.isSelectionColumn(column) ||
!hiddenColumnsCookie.includes(column.field)
}
}
}
getCookies () {
const bootstrapTable = this
const cookies = {}
for (const [key, value] of Object.entries(UtilsCookie.cookieIds)) {
cookies[key] = UtilsCookie.getCookie(bootstrapTable, value)
if (key === 'columns' || key === 'hiddenColumns' || key === 'sortPriority') {
cookies[key] = JSON.parse(cookies[key])
}
}
return cookies
}
deleteCookie (cookieName) {
if (!cookieName) {
return
}
UtilsCookie.deleteCookie(this, UtilsCookie.cookieIds[cookieName])
}
configureStorage () {
const that = this
this._storage = {}
switch (this.options.cookieStorage) {
case 'cookieStorage':
this._storage.setItem = function (cookieName, cookieValue) {
document.cookie = [
cookieName, '=', encodeURIComponent(cookieValue),
`; expires=${UtilsCookie.calculateExpiration(that.options.cookieExpire)}`,
that.options.cookiePath ? `; path=${that.options.cookiePath}` : '',
that.options.cookieDomain ? `; domain=${that.options.cookieDomain}` : '',
that.options.cookieSecure ? '; secure' : '',
`;SameSite=${that.options.cookieSameSite}`
].join('')
}
this._storage.getItem = function (cookieName) {
const value = `; ${document.cookie}`
const parts = value.split(`; ${cookieName}=`)
return parts.length === 2 ? decodeURIComponent(parts.pop().split(';').shift()) : null
}
this._storage.removeItem = function (cookieName) {
document.cookie = [
encodeURIComponent(cookieName), '=',
'; expires=Thu, 01 Jan 1970 00:00:00 GMT',
that.options.cookiePath ? `; path=${that.options.cookiePath}` : '',
that.options.cookieDomain ? `; domain=${that.options.cookieDomain}` : '',
`;SameSite=${that.options.cookieSameSite}`
].join('')
}
break
case 'localStorage':
this._storage.setItem = function (cookieName, cookieValue) {
localStorage.setItem(cookieName, cookieValue)
}
this._storage.getItem = function (cookieName) {
return localStorage.getItem(cookieName)
}
this._storage.removeItem = function (cookieName) {
localStorage.removeItem(cookieName)
}
break
case 'sessionStorage':
this._storage.setItem = function (cookieName, cookieValue) {
sessionStorage.setItem(cookieName, cookieValue)
}
this._storage.getItem = function (cookieName) {
return sessionStorage.getItem(cookieName)
}
this._storage.removeItem = function (cookieName) {
sessionStorage.removeItem(cookieName)
}
break
case 'customStorage':
if (
!this.options.cookieCustomStorageSet ||
!this.options.cookieCustomStorageGet ||
!this.options.cookieCustomStorageDelete
) {
throw new Error('The following options must be set while using the customStorage: cookieCustomStorageSet, cookieCustomStorageGet and cookieCustomStorageDelete')
}
this._storage.setItem = function (cookieName, cookieValue) {
Utils.calculateObjectValue(that.options, that.options.cookieCustomStorageSet, [cookieName, cookieValue], '')
}
this._storage.getItem = function (cookieName) {
return Utils.calculateObjectValue(that.options, that.options.cookieCustomStorageGet, [cookieName], '')
}
this._storage.removeItem = function (cookieName) {
Utils.calculateObjectValue(that.options, that.options.cookieCustomStorageDelete, [cookieName], '')
}
break
default:
throw new Error('Storage method not supported.')
}
}
}

View File

@ -5,65 +5,81 @@
var Utils = $.fn.bootstrapTable.utils
$.extend($.fn.bootstrapTable.defaults, {
Object.assign($.fn.bootstrapTable.defaults, {
customView: false,
showCustomView: false,
showCustomViewButton: false
customViewDefaultView: false
})
$.extend($.fn.bootstrapTable.defaults.icons, {
customView: {
Object.assign($.fn.bootstrapTable.defaults.icons, {
customViewOn: {
bootstrap3: 'glyphicon glyphicon-list',
bootstrap5: 'bi-list',
bootstrap4: 'fa fa-list',
semantic: 'fa fa-list',
foundation: 'fa fa-list',
bulma: 'fa fa-list',
materialize: 'list'
}[$.fn.bootstrapTable.theme] || 'fa-list',
customViewOff: {
bootstrap3: 'glyphicon glyphicon-eye-open',
bootstrap5: 'bi-eye',
bootstrap4: 'fa fa-eye',
semantic: 'fa fa-eye',
foundation: 'fa fa-eye',
bulma: 'fa fa-eye',
materialize: 'remove_red_eye'
}[$.fn.bootstrapTable.theme] || 'fa-eye'
bootstrap5: 'bi-grid',
bootstrap4: 'fa fa-th',
semantic: 'fa fa-th',
foundation: 'fa fa-th',
bulma: 'fa fa-th',
materialize: 'grid_on'
}[$.fn.bootstrapTable.theme] || 'fa-th'
})
$.extend($.fn.bootstrapTable.defaults, {
Object.assign($.fn.bootstrapTable.defaults, {
onCustomViewPostBody () {
return false
},
onCustomViewPreBody () {
return false
},
onToggleCustomView () {
return false
}
})
$.extend($.fn.bootstrapTable.locales, {
formatToggleCustomView () {
return 'Toggle custom view'
Object.assign($.fn.bootstrapTable.locales, {
formatToggleCustomViewOn () {
return 'Show custom view'
},
formatToggleCustomViewOff () {
return 'Hide custom view'
}
})
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales)
Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales)
$.fn.bootstrapTable.methods.push('toggleCustomView')
$.extend($.fn.bootstrapTable.Constructor.EVENTS, {
Object.assign($.fn.bootstrapTable.events, {
'custom-view-post-body.bs.table': 'onCustomViewPostBody',
'custom-view-pre-body.bs.table': 'onCustomViewPreBody'
'custom-view-pre-body.bs.table': 'onCustomViewPreBody',
'toggle-custom-view.bs.table': 'onToggleCustomView'
})
$.BootstrapTable = class extends $.BootstrapTable {
init () {
this.showCustomView = this.options.showCustomView
this.customViewDefaultView = this.options.customViewDefaultView
super.init()
}
initToolbar (...args) {
if (this.options.customView && this.options.showCustomViewButton) {
if (this.options.customView && this.options.showCustomView) {
this.buttons = Object.assign(this.buttons, {
customView: {
text: this.options.formatToggleCustomView(),
icon: this.options.icons.customView,
text: this.options.customViewDefaultView ? this.options.formatToggleCustomViewOff() : this.options.formatToggleCustomViewOn(),
icon: this.options.customViewDefaultView ? this.options.icons.customViewOn : this.options.icons.customViewOff,
event: this.toggleCustomView,
attributes: {
'aria-label': this.options.formatToggleCustomView(),
title: this.options.formatToggleCustomView()
'aria-label': this.options.customViewDefaultView ? this.options.formatToggleCustomViewOff() : this.options.formatToggleCustomViewOn(),
title: this.options.customViewDefaultView ? this.options.formatToggleCustomViewOff() : this.options.formatToggleCustomViewOn()
}
}
})
@ -84,7 +100,7 @@ $.BootstrapTable = class extends $.BootstrapTable {
$table.hide()
$customViewContainer.hide()
if (!this.options.customView || !this.showCustomView) {
if (!this.options.customView || !this.customViewDefaultView) {
$table.show()
return
}
@ -103,7 +119,17 @@ $.BootstrapTable = class extends $.BootstrapTable {
}
toggleCustomView () {
this.showCustomView = !this.showCustomView
this.customViewDefaultView = !this.customViewDefaultView
const icon = this.options.showButtonIcons ? this.customViewDefaultView ? this.options.icons.customViewOn : this.options.icons.customViewOff : ''
const text = this.options.showButtonText ? this.customViewDefaultView ? this.options.formatToggleCustomViewOff() : this.options.formatToggleCustomViewOn() : ''
this.$toolbar.find('button[name="customView"]')
.html(`${Utils.sprintf(this.constants.html.icon, this.options.iconsPrefix, icon)} ${text}`)
.attr('aria-label', text)
.attr('title', text)
this.initBody()
this.trigger('toggle-custom-view', this.customViewDefaultView)
}
}
}

View File

@ -1,7 +1,7 @@
/*! X-editable - v1.5.1
/*! X-editable - v1.5.3
* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery
* http://github.com/vitalets/x-editable
* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */
* Copyright (c) 2019 Vitaliy Potapov; Licensed MIT */
.editableform {
margin-bottom: 0; /* overwrites bootstrap margin */
}
@ -12,6 +12,16 @@
line-height: 20px; /* overwriting bootstrap line-height. See #133 */
}
/*
BS3 fix: stop css from breaking when the form is inside a popup and inside a form with the class .form-horizontal
See: https://github.com/vitalets/x-editable/issues/682
*/
.form-horizontal .editable-popup .editableform .form-group {
margin-left:0;
margin-right:0;
}
/*
BS3 width:1005 for inputs breaks editable form in popup
See: https://github.com/vitalets/x-editable/issues/393
@ -145,6 +155,7 @@
.editable-pre-wrapped {
white-space: pre-wrap;
}
.editable-container.editable-popup {
max-width: none !important; /* without this rule poshytip/tooltip does not stretch */
}

View File

@ -26,7 +26,7 @@ $.extend($.fn.bootstrapTable.columnDefaults, {
alwaysUseFormatter: false
})
$.extend($.fn.bootstrapTable.Constructor.EVENTS, {
$.extend($.fn.bootstrapTable.events, {
'editable-init.bs.table': 'onEditableInit',
'editable-save.bs.table': 'onEditableSave',
'editable-shown.bs.table': 'onEditableShown',
@ -63,7 +63,7 @@ $.BootstrapTable = class extends $.BootstrapTable {
column.formatter = column.formatter || (value => value)
column._formatter = column._formatter ? column._formatter : column.formatter
column.formatter = (value, row, index) => {
column.formatter = (value, row, index, field) => {
let result = Utils.calculateObjectValue(column, column._formatter, [value, row, index], value)
result = typeof result === 'undefined' || result === null ? this.options.undefinedText : result
@ -86,7 +86,7 @@ $.BootstrapTable = class extends $.BootstrapTable {
column.editable, [index, row], {})
if (editableOpts.hasOwnProperty('noEditFormatter')) {
noEditFormatter = editableOpts.noEditFormatter(value, row, index)
noEditFormatter = editableOpts.noEditFormatter(value, row, index, field)
}
if (noEditFormatter === false) {
@ -177,11 +177,13 @@ $.BootstrapTable = class extends $.BootstrapTable {
if (params && params.escape) {
for (const row of data) {
for (const [key, value] of Object.entries(row)) {
row[key] = Utils.unescapeHTML(value)
if (typeof(value) !== "number") {
row[key] = Utils.unescapeHTML(value)
}
}
}
}
return data
}
}
}

View File

@ -19,28 +19,20 @@ const TYPE_NAME = {
pdf: 'PDF'
}
$.extend($.fn.bootstrapTable.defaults, {
Object.assign($.fn.bootstrapTable.defaults, {
showExport: false,
exportDataType: 'basic', // basic, all, selected
exportTypes: ['json', 'xml', 'csv', 'txt', 'sql', 'excel'],
exportOptions: {
onCellHtmlData (cell, rowIndex, colIndex, htmlData) {
if (cell.is('th')) {
return cell.find('.th-inner').text()
}
return htmlData
}
},
exportOptions: {},
exportFooter: false
})
$.extend($.fn.bootstrapTable.columnDefaults, {
Object.assign($.fn.bootstrapTable.columnDefaults, {
forceExport: false,
forceHide: false
})
$.extend($.fn.bootstrapTable.defaults.icons, {
Object.assign($.fn.bootstrapTable.defaults.icons, {
export: {
bootstrap3: 'glyphicon-export icon-share',
bootstrap5: 'bi-download',
@ -49,24 +41,28 @@ $.extend($.fn.bootstrapTable.defaults.icons, {
}[$.fn.bootstrapTable.theme] || 'fa-download'
})
$.extend($.fn.bootstrapTable.locales, {
Object.assign($.fn.bootstrapTable.locales, {
formatExport () {
return 'Export data'
}
})
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales)
Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales)
$.fn.bootstrapTable.methods.push('exportTable')
$.extend($.fn.bootstrapTable.defaults, {
Object.assign($.fn.bootstrapTable.defaults, {
// eslint-disable-next-line no-unused-vars
onExportSaved (exportedRows) {
return false
},
onExportStarted () {
return false
}
})
$.extend($.fn.bootstrapTable.Constructor.EVENTS, {
'export-saved.bs.table': 'onExportSaved'
Object.assign($.fn.bootstrapTable.events, {
'export-saved.bs.table': 'onExportSaved',
'export-started.bs.table': 'onExportStarted'
})
$.BootstrapTable = class extends $.BootstrapTable {
@ -84,6 +80,10 @@ $.BootstrapTable = class extends $.BootstrapTable {
exportTypes = types.map(t => t.slice(1, -1))
}
if (typeof o.exportOptions === 'string') {
o.exportOptions = Utils.calculateObjectValue(null, o.exportOptions)
}
this.$export = this.$toolbar.find('>.columns div.export')
if (this.$export.length) {
this.updateExportButton()
@ -93,13 +93,13 @@ $.BootstrapTable = class extends $.BootstrapTable {
this.buttons = Object.assign(this.buttons, {
export: {
html:
(() => {
() => {
if (exportTypes.length === 1) {
return `
<div class="export ${this.constants.classes.buttonsDropdown}"
data-type="${exportTypes[0]}">
<button class="${this.constants.buttonsClass}"
aria-label="Export"
aria-label="${o.formatExport()}"
type="button"
title="${o.formatExport()}">
${o.showButtonIcons ? Utils.sprintf(this.constants.html.icon, o.iconsPrefix, o.icons.export) : ''}
@ -114,7 +114,7 @@ $.BootstrapTable = class extends $.BootstrapTable {
html.push(`
<div class="export ${this.constants.classes.buttonsDropdown}">
<button class="${this.constants.buttonsClass} dropdown-toggle"
aria-label="Export"
aria-label="${o.formatExport()}"
${this.constants.dataToggle}="dropdown"
type="button"
title="${o.formatExport()}">
@ -136,7 +136,7 @@ $.BootstrapTable = class extends $.BootstrapTable {
html.push(this.constants.html.toolbarDropdown[1], '</div>')
return html.join('')
})
}
}
})
}
@ -152,19 +152,15 @@ $.BootstrapTable = class extends $.BootstrapTable {
let $exportButtons = this.$export.find('[data-type]')
if (exportTypes.length === 1) {
$exportButtons = this.$export.find('button')
$exportButtons = this.$export
}
$exportButtons.click(e => {
e.preventDefault()
const type = $(e.currentTarget).data('type')
const exportOptions = {
type,
escape: false
}
this.exportTable(exportOptions)
this.trigger('export-started')
this.exportTable({
type: $(e.currentTarget).data('type')
})
})
this.handleToolbar()
}
@ -206,7 +202,7 @@ $.BootstrapTable = class extends $.BootstrapTable {
o.exportOptions.ignoreColumn = [detailViewIndex].concat(o.exportOptions.ignoreColumn || [])
}
if (o.exportFooter) {
if (o.exportFooter && o.height) {
const $footerRow = this.$tableFooter.find('tr').first()
const footerData = {}
const footerHtml = []
@ -240,7 +236,7 @@ $.BootstrapTable = class extends $.BootstrapTable {
options.fileName = o.exportOptions.fileName()
}
this.$el.tableExport($.extend({
this.$el.tableExport(Utils.extend({
onAfterSaveToFile: () => {
if (o.exportFooter) {
this.load(data)
@ -277,15 +273,17 @@ $.BootstrapTable = class extends $.BootstrapTable {
this.$el.one(eventName, () => {
setTimeout(() => {
const data = this.getData()
doExport(() => {
this.options.virtualScroll = virtualScroll
this.togglePagination()
})
this.trigger('export-saved', data)
}, 0)
})
this.options.virtualScroll = false
this.togglePagination()
this.trigger('export-saved', this.getData())
} else if (o.exportDataType === 'selected') {
let data = this.getData()
let selectedData = this.getSelections()
@ -334,4 +332,4 @@ $.BootstrapTable = class extends $.BootstrapTable {
.prop('disabled', !this.getSelections().length)
}
}
}
}

View File

@ -1,6 +1,5 @@
/**
* @author: Dennis Hernández
* @webSite: http://djhvscf.github.io/Blog
* @update zhixin wen <wenzhixin2010@gmail.com>
*/
@ -18,7 +17,7 @@ const debounce = (func, wait) => {
}
}
$.extend($.fn.bootstrapTable.defaults, {
Object.assign($.fn.bootstrapTable.defaults, {
mobileResponsive: false,
minWidth: 562,
minHeight: undefined,
@ -108,9 +107,9 @@ $.BootstrapTable = class extends $.BootstrapTable {
changeView (width, height) {
if (this.options.minHeight) {
if ((width <= this.options.minWidth) && (height <= this.options.minHeight)) {
if (width <= this.options.minWidth && height <= this.options.minHeight) {
this.conditionCardView()
} else if ((width > this.options.minWidth) && (height > this.options.minHeight)) {
} else if (width > this.options.minWidth && height > this.options.minHeight) {
this.conditionFullView()
}
} else if (width <= this.options.minWidth) {
@ -121,4 +120,4 @@ $.BootstrapTable = class extends $.BootstrapTable {
this.resetView()
}
}
}

View File

@ -4,76 +4,80 @@
var Utils = $.fn.bootstrapTable.utils
function printPageBuilderDefault (table) {
function printPageBuilderDefault (table, styles) {
return `
<html>
<head>
<style type="text/css" media="print">
@page {
size: auto;
margin: 25px 0 25px 0;
}
</style>
<style type="text/css" media="all">
table {
border-collapse: collapse;
font-size: 12px;
}
table, th, td {
border: 1px solid grey;
}
th, td {
text-align: center;
vertical-align: middle;
}
p {
font-weight: bold;
margin-left:20px;
}
table {
width:94%;
margin-left:3%;
margin-right:3%;
}
div.bs-table-print {
text-align:center;
}
</style>
</head>
<title>Print Table</title>
<body>
<p>Printed on: ${new Date} </p>
<div class="bs-table-print">${table}</div>
</body>
</html>`
<html>
<head>
${styles}
<style type="text/css" media="print">
@page {
size: auto;
margin: 25px 0 25px 0;
}
</style>
<style type="text/css" media="all">
table {
border-collapse: collapse;
font-size: 12px;
}
table, th, td {
border: 1px solid grey;
}
th, td {
text-align: center;
vertical-align: middle;
}
p {
font-weight: bold;
margin-left:20px;
}
table {
width: 94%;
margin-left: 3%;
margin-right: 3%;
}
div.bs-table-print {
text-align: center;
}
</style>
</head>
<title>Print Table</title>
<body>
<p>Printed on: ${new Date} </p>
<div class="bs-table-print">${table}</div>
</body>
</html>
`
}
$.extend($.fn.bootstrapTable.locales, {
Object.assign($.fn.bootstrapTable.locales, {
formatPrint () {
return 'Print'
}
})
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales)
Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales)
$.extend($.fn.bootstrapTable.defaults, {
Object.assign($.fn.bootstrapTable.defaults, {
showPrint: false,
printAsFilteredAndSortedOnUI: true,
printSortColumn: undefined,
printSortOrder: 'asc',
printPageBuilder (table) {
return printPageBuilderDefault(table)
printStyles: [],
printPageBuilder (table, styles) {
return printPageBuilderDefault(table, styles)
}
})
$.extend($.fn.bootstrapTable.COLUMN_DEFAULTS, {
Object.assign($.fn.bootstrapTable.columnDefaults, {
printFilter: undefined,
printIgnore: false,
printFormatter: undefined
})
$.extend($.fn.bootstrapTable.defaults.icons, {
Object.assign($.fn.bootstrapTable.defaults.icons, {
print: {
bootstrap3: 'glyphicon-print icon-share',
bootstrap5: 'bi-printer',
'bootstrap-table': 'icon-printer'
}[$.fn.bootstrapTable.theme] || 'fa-print'
})
@ -133,10 +137,15 @@ $.BootstrapTable = class extends $.BootstrapTable {
}
doPrint (data) {
const canPrint = column => {
return !column.printIgnore && column.visible
}
const formatValue = (row, i, column) => {
const value_ = Utils.getItemField(row, column.field, this.options.escape, column.escape)
const value = Utils.calculateObjectValue(column,
column.printFormatter || column.formatter,
[$.common.getItemField(row, column.field), row, i], $.common.getItemField(row, column.field))
[value_, row, i], value_)
return typeof value === 'undefined' || value === null ?
this.options.undefinedText : value
@ -149,7 +158,7 @@ $.BootstrapTable = class extends $.BootstrapTable {
for (const columns of columnsArray) {
html.push('<tr>')
for (let h = 0; h < columns.length; h++) {
if (!columns[h].printIgnore) {
if (canPrint(columns[h])) {
html.push(
`<th
${Utils.sprintf(' rowspan="%s"', columns[h].rowspan)}
@ -162,7 +171,7 @@ $.BootstrapTable = class extends $.BootstrapTable {
html.push('</thead><tbody>')
const dontRender = []
const notRender = []
if (this.mergedCells) {
for (let mc = 0; mc < this.mergedCells.length; mc++) {
@ -174,7 +183,7 @@ $.BootstrapTable = class extends $.BootstrapTable {
for (let cs = 0; cs < currentMergedCell.colspan; cs++) {
const col = currentMergedCell.col + cs
dontRender.push(`${row },${ col}`)
notRender.push(`${row},${col}`)
}
}
}
@ -207,11 +216,11 @@ $.BootstrapTable = class extends $.BootstrapTable {
}
if (
!columns[j].printIgnore && columns[j].field &&
(
!dontRender.includes(`${i },${ j}`) ||
(rowspan > 0 && colspan > 0)
)
canPrint(columns[j]) &&
(
!notRender.includes(`${i},${j}`) ||
rowspan > 0 && colspan > 0
)
) {
if (rowspan > 0 && colspan > 0) {
html.push(`<td ${Utils.sprintf(' rowspan="%s"', rowspan)} ${Utils.sprintf(' colspan="%s"', colspan)}>`, formatValue(data[i], i, columns[j]), '</td>')
@ -221,7 +230,6 @@ $.BootstrapTable = class extends $.BootstrapTable {
}
}
html.push('</tr>')
}
@ -231,7 +239,7 @@ $.BootstrapTable = class extends $.BootstrapTable {
for (const columns of columnsArray) {
for (let h = 0; h < columns.length; h++) {
if (!columns[h].printIgnore) {
if (canPrint(columns)) {
const footerData = Utils.trToData(columns, this.$el.find('>tfoot>tr'))
const footerValue = Utils.calculateObjectValue(columns[h], columns[h].footerFormatter, [data], footerData[0] && footerData[0][columns[h].field] || '')
@ -252,8 +260,8 @@ $.BootstrapTable = class extends $.BootstrapTable {
}
let reverse = sortOrder !== 'asc'
reverse = -((+reverse) || -1)
return data.sort((a, b) => reverse * (a[colName].localeCompare(b[colName])))
reverse = -(+reverse || -1)
return data.sort((a, b) => reverse * a[colName].localeCompare(b[colName]))
}
const filterRow = (row, filters) => {
@ -275,11 +283,30 @@ $.BootstrapTable = class extends $.BootstrapTable {
data = sortRows(data, this.options.printSortColumn, this.options.printSortOrder)
const table = buildTable(data, this.options.columns)
const newWin = window.open('')
const printStyles = typeof this.options.printStyles === 'string' ?
this.options.printStyles.replace(/\[|\]| /g, '').toLowerCase().split(',') :
this.options.printStyles
const styles = printStyles.map(it =>
`<link rel="stylesheet" href="${it}" />`).join('')
newWin.document.write(this.options.printPageBuilder.call(this, table))
const calculatedPrintPage = Utils.calculateObjectValue(this, this.options.printPageBuilder,
[table, styles], printPageBuilderDefault(table, styles))
const startPrint = () => {
newWin.focus()
newWin.print()
newWin.close()
}
newWin.document.write(calculatedPrintPage)
newWin.document.close()
newWin.focus()
newWin.print()
newWin.close()
if (printStyles.length) {
const links = document.getElementsByTagName('link')
const lastLink = links[links.length - 1]
lastLink.onload = startPrint
} else {
startPrint()
}
}
}
}

View File

@ -1,6 +1,5 @@
/**
* @author: Dennis Hernández
* @webSite: http://djhvscf.github.io/Blog
* @update: https://github.com/wenzhixin
* @version: v1.2.0
*/
@ -60,7 +59,7 @@ const filterFn = () => {
}
}
$.extend($.fn.bootstrapTable.defaults, {
Object.assign($.fn.bootstrapTable.defaults, {
reorderableColumns: false,
maxMovingRows: 10,
// eslint-disable-next-line no-unused-vars
@ -70,7 +69,7 @@ $.extend($.fn.bootstrapTable.defaults, {
dragaccept: null
})
$.extend($.fn.bootstrapTable.Constructor.EVENTS, {
Object.assign($.fn.bootstrapTable.events, {
'reorder-column.bs.table': 'onReorderColumn'
})
@ -84,7 +83,7 @@ $.BootstrapTable = class extends $.BootstrapTable {
return
}
this.makeRowsReorderable()
this.makeColumnsReorderable()
}
_toggleColumn (...args) {
@ -94,7 +93,7 @@ $.BootstrapTable = class extends $.BootstrapTable {
return
}
this.makeRowsReorderable()
this.makeColumnsReorderable()
}
toggleView (...args) {
@ -108,7 +107,7 @@ $.BootstrapTable = class extends $.BootstrapTable {
return
}
this.makeRowsReorderable()
this.makeColumnsReorderable()
}
resetView (...args) {
@ -118,10 +117,10 @@ $.BootstrapTable = class extends $.BootstrapTable {
return
}
this.makeRowsReorderable()
this.makeColumnsReorderable()
}
makeRowsReorderable (order = null) {
makeColumnsReorderable (order = null) {
try {
$(this.$el).dragtable('destroy')
} catch (e) {
@ -208,6 +207,6 @@ $.BootstrapTable = class extends $.BootstrapTable {
orderColumns (order) {
this.columnsSortOrder = order
this.makeRowsReorderable()
this.makeColumnsReorderable()
}
}
}

View File

@ -1,6 +1,5 @@
/**
* @author: Dennis Hernández
* @webSite: http://djhvscf.github.io/Blog
* @update zhixin wen <wenzhixin2010@gmail.com>
*/
@ -8,11 +7,11 @@ const rowAttr = (row, index) => ({
id: `customId_${index}`
})
$.extend($.fn.bootstrapTable.defaults, {
Object.assign($.fn.bootstrapTable.defaults, {
reorderableRows: false,
onDragStyle: null,
onDropStyle: null,
onDragClass: 'reorder_rows_onDragClass',
onDragClass: 'reorder-rows-on-drag-class',
dragHandle: '>tbody>tr>td:not(.bs-checkbox)',
useRowAttrFunc: false,
// eslint-disable-next-line no-unused-vars
@ -26,10 +25,14 @@ $.extend($.fn.bootstrapTable.defaults, {
// eslint-disable-next-line no-unused-vars
onReorderRow (newData) {
return false
},
onDragStop () {},
onAllowDrop () {
return true
}
})
$.extend($.fn.bootstrapTable.Constructor.EVENTS, {
Object.assign($.fn.bootstrapTable.events, {
'reorder-row.bs.table': 'onReorderRow'
})
@ -61,6 +64,8 @@ $.BootstrapTable = class extends $.BootstrapTable {
onDragStyle: this.options.onDragStyle,
onDropStyle: this.options.onDropStyle,
onDragClass: this.options.onDragClass,
onAllowDrop: (hoveredRow, draggedRow) => this.onAllowDrop(hoveredRow, draggedRow),
onDragStop: (table, draggedRow) => this.onDragStop(table, draggedRow),
onDragStart: (table, droppedRow) => this.onDropStart(table, droppedRow),
onDrop: (table, droppedRow) => this.onDrop(table, droppedRow),
dragHandle: this.options.dragHandle
@ -74,8 +79,26 @@ $.BootstrapTable = class extends $.BootstrapTable {
this.options.onReorderRowsDrag(this.data[this.draggingIndex])
}
onDragStop (table, draggedRow) {
const rowIndexDraggedRow = $(draggedRow).data('index')
const draggedRowItem = this.data[rowIndexDraggedRow]
this.options.onDragStop(table, draggedRowItem, draggedRow)
}
onAllowDrop (hoveredRow, draggedRow) {
const rowIndexDraggedRow = $(draggedRow).data('index')
const rowIndexHoveredRow = $(hoveredRow).data('index')
const draggedRowItem = this.data[rowIndexDraggedRow]
const hoveredRowItem = this.data[rowIndexHoveredRow]
return this.options.onAllowDrop(hoveredRowItem, draggedRowItem, hoveredRow, draggedRow)
}
onDrop (table) {
this.$draggingTd.css('cursor', '')
const pageNum = this.options.pageNumber
const pageSize = this.options.pageSize
const newData = []
for (let i = 0; i < table.tBodies[0].rows.length; i++) {
@ -88,13 +111,17 @@ $.BootstrapTable = class extends $.BootstrapTable {
const draggingRow = this.data[this.draggingIndex]
const droppedIndex = newData.indexOf(this.data[this.draggingIndex])
const droppedRow = this.data[droppedIndex]
const index = this.options.data.indexOf(this.data[droppedIndex])
const index = (pageNum - 1) * pageSize + this.options.data.indexOf(this.data[droppedIndex])
this.options.data.splice(this.options.data.indexOf(draggingRow), 1)
this.options.data.splice(index, 0, draggingRow)
this.initSearch()
if (this.options.sidePagination === 'server') {
this.data = [...this.options.data]
}
// Call the user defined function
this.options.onReorderRowsDrop(droppedRow)
@ -115,4 +142,4 @@ $.BootstrapTable = class extends $.BootstrapTable {
super.initSort()
}
}
}

View File

@ -1,6 +1,5 @@
/**
* @author: Dennis Hernández
* @webSite: http://djhvscf.github.io/Blog
* @version: v2.0.0
*/
@ -30,7 +29,7 @@ const reInitResizable = that => {
initResizable(that)
}
$.extend($.fn.bootstrapTable.defaults, {
Object.assign($.fn.bootstrapTable.defaults, {
resizable: false
})
@ -66,4 +65,4 @@ $.BootstrapTable = class extends $.BootstrapTable {
}, 100)
}
}
}
}

View File

@ -131,6 +131,9 @@
$th = $('<th style="width:36px"></th>');
} else {
$th = $('<th style="' + ((column.width) ? ('width:' + column.width + ((column.widthUnit) ? column.widthUnit : 'px')) : '') + '" class="' + column.field + '_cls"></th>');
if (column.align) {
$th.css("text-align", column.align);
}
}
if((!target.isFixWidth)&& column.width){
target.isFixWidth = column.width.indexOf("px")>-1?true:false;
@ -217,6 +220,8 @@
if (!data || data.length <= 0) {
var _empty = '<tr><td colspan="' + options.columns.length + '"><div style="display: block;text-align: center;">没有找到匹配的记录</div></td></tr>'
$tbody.html(_empty);
options.pageNumber = 1;
initPagination(0, 0);
return;
}
// 缓存并格式化数据
@ -272,6 +277,9 @@
if (pageTo > target.totalRows) {
pageTo = target.totalRows;
}
if (pageFrom > pageTo) {
pageFrom = pageTo;
}
html.push('<div class="pull-left pagination-detail">');
html.push('<span class="pagination-info">' + formatShowingRows(pageFrom, pageTo, target.totalRows) + '</span>');
var pageList = false;
@ -681,6 +689,7 @@
if (_isExpanded || _isCollapsed) {
var tr = $(this).parent().parent();
var row_id = tr.attr("id");
var row_pid = tr.attr("pid");
var _id = tr.attr("data-id");
var _ls = target.find("tbody").find("tr[id^='" + row_id + "_']");
if (!options.pagination) {
@ -698,7 +707,8 @@
if (_ls && _ls.length > 0) {
$.each(_ls, function(index, item) {
var _p_icon = $("#" + $(item).attr("pid")).children().eq(options.expandColumn).find(".treetable-expander");
if (_p_icon.hasClass(options.expanderExpandedClass)) {
var _p_display = $("#" + $(item).attr("pid")).css('display');
if (_p_icon.hasClass(options.expanderExpandedClass) && _p_display == 'table') {
$(item).css("display", "table");
}
});
@ -708,18 +718,36 @@
var _ls = target.find("tbody").find("tr[id^='" + row_id + "_']");
if (_ls && _ls.length > 0) {
if (_isExpanded) {
$.each(_ls, function(index, item) {
$(item).css("display", "none");
});
if (row_pid == "row_root") {
$('table tr[id^="' + row_id + '_"]').css("display", "none");
$('table tr[id^="' + row_id + '_"]').each(function(i,n) {
var _isExpanded = $(n).find(".treetable-expander").hasClass(options.expanderExpandedClass);
if (_isExpanded) {
$(n).find(".treetable-expander").trigger("click");
}
})
} else {
$.each(_ls, function(index, item) {
$(item).css("display", "none");
var _isExpanded = $(item).find(".treetable-expander").hasClass(options.expanderExpandedClass);
if (_isExpanded) {
$(item).find(".treetable-expander").trigger("click");
}
});
}
} else {
$.each(_ls, function(index, item) {
var _icon = $(item).eq(options.expandColumn).find(".treetable-expander");
if (_icon && _icon.hasClass(options.expanderExpandedClass)) {
$(item).css("display", "table");
} else {
$(item).css("display", "table");
}
});
if (row_pid == "row_root") {
$('table tr[pid="' + row_id + '"]').css("display", "table");
} else {
$.each(_ls, function(index, item) {
var _p_icon = $("#" + $(item).attr("pid")).children().eq(options.expandColumn).find(".treetable-expander");
var _isExpanded = _p_icon.hasClass(options.expanderExpandedClass);
var _isCollapsed = _p_icon.hasClass(options.expanderCollapsedClass);
if (row_id == $(item).attr("pid")) {
$(item).css("display", "table");
}
});
}
}
} else {
if (options.pagination) {
@ -729,7 +757,7 @@
$.ajax({
type: options.type,
url: options.dataUrl,
data: $.extend(parms, options.ajaxParams),
data: parms,
dataType: "json",
success: function(data, textStatus, jqXHR) {
$("#" + row_id + "_load").remove();
@ -765,6 +793,7 @@
}
// 添加数据刷新表格
target.appendData = function(data) {
data.reverse()
// 下边的操作主要是为了查询时让一些没有根节点的节点显示
$.each(data, function(i, item) {
if (options.pagination) {

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,3 @@
/* *html{background-image: url(about:blank); background-attachment: fixed;} */
html #layuicss-layer{display: none; position: absolute; width: 1989px;}
/* common */
@ -9,11 +8,8 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
.layui-layer-close{position:absolute;}
.layui-layer-content{position:relative;}
.layui-layer-border{border: 1px solid #B2B2B2; border: 1px solid rgba(0,0,0,.1); box-shadow: 1px 1px 5px rgba(0,0,0,.2);}
.layui-layer-load{background:url(loading-1.gif) #eee center center no-repeat;}
.layui-layer-ico{ background:url(icon.png) no-repeat;}
.layui-layer-dialog .layui-layer-ico,
.layui-layer-setwin a,
.layui-layer-btn a{display:inline-block; *display:inline; *zoom:1; vertical-align:top;}
.layui-layer-setwin span,
.layui-layer-btn a{display: inline-block; vertical-align: middle; *display: inline; *zoom:1; }
.layui-layer-move{display: none; position: fixed; *position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; cursor: move; opacity: 0; filter:alpha(opacity=0); background-color: #fff; z-index: 2147483647;}
.layui-layer-resize{position: absolute; width: 15px; height: 15px; right: 0; bottom: 0; cursor: se-resize;}
@ -43,54 +39,139 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
@-webkit-keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:layer-shake;animation-name:layer-shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}
/* 从上往下 */
@keyframes layer-slide-down {
from {
transform: translate3d(0,-100%,0);
} to {
transform: translate3d(0,0,0);
}
}
@keyframes layer-slide-down-out {
from {
transform: translate3d(0,0,0);
} to {
transform: translate3d(0,-100%,0);
}
}
.layer-anim-slide-down{animation-name: layer-slide-down}
.layer-anim-slide-down-out{animation-name: layer-slide-down-out}
/* 从右往左 */
@keyframes layer-slide-left {
from {
transform: translate3d(100%,0,0);
} to {
transform: translate3d(0,0,0);
}
}
@keyframes layer-slide-left-out {
from {
transform: translate3d(0,0,0);
} to {
transform: translate3d(100%,0,0);
}
}
.layer-anim-slide-left{animation-name: layer-slide-left}
.layer-anim-slide-left-out{animation-name: layer-slide-left-out}
/* 从下往上 */
@keyframes layer-slide-up {
from {
transform: translate3d(0,100%,0);
} to {
transform: translate3d(0,0,0);
}
}
@keyframes layer-slide-up-out {
from {
transform: translate3d(0,0,0);
} to {
transform: translate3d(0,100%,0);
}
}
.layer-anim-slide-up{animation-name: layer-slide-up}
.layer-anim-slide-up-out{animation-name: layer-slide-up-out}
/* 从左往右 */
@keyframes layer-slide-right {
from {
transform: translate3d(-100%,0,0);
} to {
transform: translate3d(0,0,0);
}
}
@keyframes layer-slide-right-out {
from {
transform: translate3d(0,0,0);
} to {
transform: translate3d(-100%,0,0);
}
}
.layer-anim-slide-right{animation-name: layer-slide-right;}
.layer-anim-slide-right-out{animation-name: layer-slide-right-out;}
/* 标题栏 */
.layui-layer-title{padding:0 80px 0 20px; height: 50px; line-height: 50px; border-bottom:1px solid #F0F0F0; font-size: 14px; color:#333; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; border-radius: 2px 2px 0 0;}
.layui-layer-setwin{position:absolute; right: 15px; *right:0; top: 17px; font-size:0; line-height: initial;}
.layui-layer-setwin a{position:relative; width: 16px; height:16px; margin-left:10px; font-size:12px; _overflow:hidden;}
.layui-layer-setwin .layui-layer-min cite{position:absolute; width:14px; height:2px; left:0; top:50%; margin-top:-1px; background-color:#2E2D3C; cursor:pointer; _overflow:hidden;}
.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA; }
.layui-layer-setwin .layui-layer-max{background-position:-32px -40px;}
.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px;}
.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px;}
.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px;}
.layui-layer-setwin .layui-layer-close1{background-position: 1px -40px; cursor: pointer;}
.layui-layer-setwin .layui-layer-close1:hover{opacity:0.7;}
.layui-layer-setwin .layui-layer-close2{position:absolute; right:-28px; top:-28px; width:30px; height:30px; margin-left:0; background-position:-149px -31px; *right:-18px; _display:none;}
.layui-layer-setwin .layui-layer-close2:hover{ background-position:-180px -31px;}
.layui-layer-title{padding: 0 81px 0 16px; height: 50px; line-height: 50px; border-bottom:1px solid #F0F0F0; font-size: 14px; color:#333; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; border-radius: 2px 2px 0 0;}
.layui-layer-setwin{position:absolute; right: 15px; *right:0; top: 16px; font-size:0; line-height: initial;}
.layui-layer-setwin span{position:relative; width: 16px; height: 16px; line-height: 18px; margin-left: 10px; text-align: center; font-size: 16px; cursor: pointer; color: #000; _overflow: hidden; box-sizing: border-box;}
.layui-layer-setwin .layui-layer-min:before{content: ''; position: absolute; width: 12px; border-bottom: 1px solid #2E2D3C; left: 50%; top: 50%; margin: -0.5px 0 0 -6px; cursor: pointer; _overflow:hidden;}
.layui-layer-setwin .layui-layer-min:hover:before{background-color: #2D93CA}
.layui-layer-setwin .layui-layer-max:hover:before,
.layui-layer-setwin .layui-layer-max:hover:after{border-color: #2D93CA;}
.layui-layer-setwin .layui-layer-min:hover:before{background-color: #2D93CA}
.layui-layer-setwin .layui-layer-maxmin:before,
.layui-layer-setwin .layui-layer-maxmin:after{width: 7px; height: 7px; margin: -3px 0 0 -3px; background-color: #fff;}
.layui-layer-setwin .layui-layer-maxmin:after{z-index: 0; margin: -5px 0 0 -1px;}
.layui-layer-setwin .layui-layer-close{cursor: pointer;}
.layui-layer-setwin .layui-layer-close:hover{opacity:0.7;}
.layui-layer-setwin .layui-layer-close2{position:absolute; right: -28px; top: -28px; color: #fff; background-color: #787878; padding: 3px; width: 16px; height: 20px; font-size: 16px; font-weight: bolder; border-radius: 50%; margin-left: 0; *right:-18px; _display:none;}
.layui-layer-setwin .layui-layer-close2:hover{opacity: unset; background-color: #3888f6;}
/* 按钮栏 */
.layui-layer-btn{text-align: right; padding: 0 15px 12px; pointer-events: auto; user-select: none; -webkit-user-select: none;}
.layui-layer-btn a{height: 28px; line-height: 28px; margin: 5px 5px 0; padding: 0 15px; border: 1px solid #dedede; background-color:#fff; color: #333; border-radius: 2px; font-weight:400; cursor:pointer; text-decoration: none;}
.layui-layer-btn a{height: 30px; line-height: 30px; margin: 5px 5px 0; padding: 0 16px; border: 1px solid #dedede; background-color: #fff; color: #333; border-radius: 2px; font-weight: 400; cursor: pointer; text-decoration: none; box-sizing: border-box;}
.layui-layer-btn a:hover{opacity: 0.9; text-decoration: none;}
.layui-layer-btn a:active{opacity: 0.8;}
.layui-layer-btn .layui-layer-btn0{border-color: #1E9FFF; background-color: #1E9FFF; color:#fff;}
.layui-layer-btn .layui-layer-btn0{border-color: transparent; background-color: #1E9FFF; color:#fff;}
.layui-layer-btn-l{text-align: left;}
.layui-layer-btn-c{text-align: center;}
/* 定制化 */
.layui-layer-dialog{min-width: 300px;}
.layui-layer-dialog .layui-layer-content{position: relative; padding:20px; line-height:24px; word-break: break-all; overflow:hidden; font-size:14px; overflow-x: hidden; overflow-y:auto;}
.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute; top:16px; left:15px; _left:-40px; width:30px; height:30px;}
.layui-layer-ico1{background-position:-30px 0 }
.layui-layer-ico2{background-position:-60px 0;}
.layui-layer-ico3{background-position:-90px 0;}
.layui-layer-ico4{background-position:-120px 0;}
.layui-layer-ico5{background-position:-150px 0;}
.layui-layer-ico6{background-position:-180px 0;}
.layui-layer-dialog{min-width: 240px;}
.layui-layer-dialog .layui-layer-content{position: relative; padding: 16px; line-height: 24px; word-break: break-all; overflow:hidden; font-size:14px; overflow-x: hidden; overflow-y:auto;}
.layui-layer-dialog .layui-layer-content .layui-layer-face{position: absolute; top: 18px; left: 16px; color: #959595; font-size: 32px; _left: -40px;}
.layui-layer-dialog .layui-layer-content .layui-icon-tips{color: #F39B12;}
.layui-layer-dialog .layui-layer-content .layui-icon-success{color: #16b777;}
.layui-layer-dialog .layui-layer-content .layui-icon-error{top: 19px; color: #FF5722;}
.layui-layer-dialog .layui-layer-content .layui-icon-question{color: #FFB800;}
.layui-layer-dialog .layui-layer-content .layui-icon-lock{color: #787878;}
.layui-layer-dialog .layui-layer-content .layui-icon-face-cry{color: #FF5722;}
.layui-layer-dialog .layui-layer-content .layui-icon-face-smile{color: #16b777;}
.layui-layer-rim{border:6px solid #8D8D8D; border:6px solid rgba(0,0,0,.3); border-radius:5px; box-shadow: none;}
.layui-layer-msg{min-width:180px; border:1px solid #D3D4D3; box-shadow: none;}
.layui-layer-hui{min-width:100px; background-color: #000; filter:alpha(opacity=60); background-color: rgba(0,0,0,0.6); color: #fff; border:none;}
.layui-layer-hui .layui-layer-content{padding:12px 25px; text-align:center;}
.layui-layer-dialog .layui-layer-padding{padding: 20px 20px 20px 55px; text-align: left;}
.layui-layer-hui .layui-layer-close{color: #fff;}
.layui-layer-hui .layui-layer-content{padding: 11px 24px; text-align: center;}
.layui-layer-dialog .layui-layer-padding{padding: 18px 24px 18px 58px; text-align: left;}
.layui-layer-page .layui-layer-content{position:relative; overflow:auto;}
.layui-layer-page .layui-layer-btn,.layui-layer-iframe .layui-layer-btn{padding-top:10px;}
.layui-layer-nobg{background:none;}
.layui-layer-iframe iframe{display: block; width: 100%;}
.layui-layer-loading{border-radius:100%; background:none; box-shadow:none; border:none;}
.layui-layer-loading .layui-layer-content{width:60px; height:24px; background:url(loading-0.gif) no-repeat;}
.layui-layer-loading .layui-layer-loading1{width:37px; height:37px; background:url(loading-1.gif) no-repeat;}
.layui-layer-loading .layui-layer-loading2, .layui-layer-ico16{width:32px; height:32px; background:url(loading-2.gif) no-repeat;}
.layui-layer-loading .layui-layer-content{width: 76px; height: 38px; line-height: 38px; text-align: center;}
.layui-layer-loading-icon{font-size: 38px; color: #959595;}
.layui-layer-loading2{text-align: center;}
.layui-layer-loading-2{position: relative; height: 38px;}
.layui-layer-loading-2:before,
.layui-layer-loading-2:after{content: ''; position: absolute; left: 50%; top: 50%; width: 38px; height: 38px; margin: -19px 0 0 -19px; border-radius: 50%; border: 3px solid #d2d2d2; box-sizing: border-box;}
.layui-layer-loading-2:after{border-color: transparent; border-left-color: #1E9FFF;}
.layui-layer-tips{background: none; box-shadow:none; border:none;}
.layui-layer-tips .layui-layer-content{position: relative; line-height: 22px; min-width: 12px; padding: 8px 15px; font-size: 12px; _float:left; border-radius: 2px; box-shadow: 1px 1px 3px rgba(0,0,0,.2); background-color: #000; color: #fff;}
.layui-layer-tips .layui-layer-close{right:-2px; top:-1px;}
@ -102,15 +183,31 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
.layui-layer-tips i.layui-layer-TipsR{left:-8px;}
.layui-layer-tips i.layui-layer-TipsL{right:-8px;}
/* skin */
.layui-layer-lan[type="dialog"]{min-width:280px;}
/* 内置 skin */
.layui-layer-lan .layui-layer-title{background:#4476A7; color:#fff; border: none;}
.layui-layer-lan .layui-layer-btn{padding: 5px 10px 10px; text-align: right; border-top:1px solid #E9E7E7}
.layui-layer-lan .layui-layer-btn{padding: 5px 10px 10px; border-top:1px solid #E9E7E7}
.layui-layer-lan .layui-layer-btn a{background: #fff; border-color: #E9E7E7; color: #333;}
.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5;}
.layui-layer-molv .layui-layer-title{background: #009f95; color:#fff; border: none;}
.layui-layer-molv .layui-layer-btn a{background: #009f95; border-color: #009f95;}
.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1;}
.layui-layer-lan .layui-layer-setwin .layui-icon,
.layui-layer-molv .layui-layer-setwin .layui-icon{color: #fff;}
/* Windows 10 风格主题 */
.layui-layer-win10{border: 1px solid #aaa; box-shadow: 1px 1px 6px rgba(0,0,0,.3); border-radius: none;}
.layui-layer-win10 .layui-layer-title{height: 32px; line-height: 32px; padding-left: 8px; border-bottom: none; font-size: 12px;}
.layui-layer-win10 .layui-layer-setwin{right: 0; top: 0;}
.layui-layer-win10 .layui-layer-setwin span{margin-left: 0; width: 32px; height: 32px; padding: 8px;}
.layui-layer-win10.layui-layer-page .layui-layer-setwin span{width: 38px;}
.layui-layer-win10 .layui-layer-setwin span:hover{background-color: #E5E5E5;}
.layui-layer-win10 .layui-layer-setwin span.layui-icon-close:hover{background-color: #E81123; color: #fff;}
.layui-layer-win10.layui-layer-dialog .layui-layer-content{padding: 8px 16px 32px; color: #0033BC;}
.layui-layer-win10.layui-layer-dialog .layui-layer-padding{padding-top: 18px; padding-left: 58px;}
.layui-layer-win10 .layui-layer-btn{padding: 5px 5px 10px; border-top:1px solid #DFDFDF; background-color: #F0F0F0;}
.layui-layer-win10 .layui-layer-btn a{height: 20px; line-height: 18px; background-color: #E1E1E1; border-color: #ADADAD; color: #000; font-size: 12px; transition: all .3s;}
.layui-layer-win10 .layui-layer-btn a:hover{border-color: #2A8EDD; background-color: #E5F1FB;}
.layui-layer-win10 .layui-layer-btn .layui-layer-btn0{border-color: #0078D7;}
/**
@ -119,39 +216,44 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
*/
.layui-layer-iconext{background:url(icon-ext.png) no-repeat;}
/* prompt模式 */
.layui-layer-prompt .layui-layer-input{display: block; width: 260px; height: 36px; margin: 0 auto; line-height: 30px; padding-left: 10px; border: 1px solid #e6e6e6; color: #333;}
.layui-layer-prompt textarea.layui-layer-input{width: 300px; height: 100px; line-height: 20px; padding: 6px 10px;}
.layui-layer-prompt .layui-layer-content{padding: 20px;}
.layui-layer-prompt .layui-layer-content{padding: 16px;}
.layui-layer-prompt .layui-layer-btn{padding-top: 0;}
/* tab模式 */
.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4);}
.layui-layer-tab .layui-layer-title{padding-left:0; overflow: visible;}
.layui-layer-tab .layui-layer-title span{position:relative; float:left; min-width:80px; max-width: 300px; padding:0 20px; text-align:center; cursor:default; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer;}
.layui-layer-tab .layui-layer-title span.layui-this{height: 51px; border-left: 1px solid #eee; border-right: 1px solid #eee; background-color: #fff; z-index: 10;}
.layui-layer-tab .layui-layer-title span:first-child{border-left:none;}
.layui-layer-tabmain{line-height:24px; clear:both;}
.layui-layer-tab .layui-layer-title span{position:relative; display: inline-block; vertical-align: top; border-left: 1px solid transparent; border-right: 1px solid transparent; min-width:80px; max-width: 300px; padding:0 16px; text-align:center; cursor:default; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer;}
.layui-layer-tab .layui-layer-title span.layui-this{height: 51px; border-left-color: #eee; border-right-color: #eee; background-color: #fff; z-index: 10;}
.layui-layer-tab .layui-layer-title span:first-child{border-left-color: transparent;}
.layui-layer-tabmain{line-height:24px; clear: both;}
.layui-layer-tabmain .layui-layer-tabli{display:none;}
.layui-layer-tabmain .layui-layer-tabli.layui-this{display: block;}
/* photo模式 */
/* photos */
.layui-layer-photos{background: none; box-shadow: none;}
.layui-layer-photos .layui-layer-content{overflow:hidden; text-align: center;}
.layui-layer-photos .layui-layer-phimg img{position: relative; width:100%; display: inline-block; *display:inline; *zoom:1; vertical-align:top;}
.layui-layer-imgprev, .layui-layer-imgnext{position: fixed; top: 50%; width: 27px; _width: 44px; height: 44px; margin-top:-22px; outline:none;blr:expression(this.onFocus=this.blur());}
.layui-layer-imgprev{left: 30px; background-position:-5px -5px; _background-position:-70px -5px;}
.layui-layer-imgprev:hover{background-position:-33px -5px; _background-position:-120px -5px;}
.layui-layer-imgnext{right: 30px; _right:8px; background-position:-5px -50px; _background-position:-70px -50px;}
.layui-layer-imgnext:hover{background-position: -33px -50px; _background-position: -120px -50px;}
.layui-layer-imgbar{position: fixed; left:0; right: 0; bottom:0; width:100%; height: 40px; line-height: 40px; background-color:#000\9; filter:Alpha(opacity=60); background-color: rgba(2,0,0,.35); color: #fff; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; font-size:0;}
.layui-layer-imgtit{/*position:absolute; left:20px;*/}
.layui-layer-imgtit *{display:inline-block; *display:inline; *zoom:1; vertical-align:top; font-size:12px;}
.layui-layer-imgtit a{max-width:65%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; color:#fff;}
.layui-layer-imgtit a:hover{color:#fff; text-decoration:underline;}
.layui-layer-imgtit em{padding-left:10px; font-style: normal;}
.layui-layer-photos .layui-layer-content{overflow: visible; text-align: center;}
.layui-layer-photos .layer-layer-photos-main img{position: relative; width:100%; display: inline-block; *display:inline; *zoom:1; vertical-align:top;}
.layui-layer-photos-prev,
.layui-layer-photos-next{position: fixed; top: 50%; width: 52px; height: 52px; line-height: 52px; margin-top: -26px; cursor: pointer; font-size: 52px; color: #717171;}
.layui-layer-photos-prev{left: 32px;}
.layui-layer-photos-next{right: 32px;}
.layui-layer-photos-prev:hover,
.layui-layer-photos-next:hover{color: #959595;}
.layui-layer-photos-toolbar{position: fixed; left: 0; right: 0; bottom: 0; width: 100%; height: 52px; line-height: 52px; background-color: #000\9; filter: Alpha(opacity=60); background-color: rgba(0,0,0,.32); color: #fff; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; font-size:0;}
.layui-layer-photos-toolbar > *{display:inline-block; vertical-align: top; padding: 0 16px; font-size: 12px; color: #fff; *display:inline; *zoom: 1;}
.layui-layer-photos-toolbar *{font-size: 12px;}
.layui-layer-photos-header{top: 0; bottom: auto;}
.layui-layer-photos-header > span{cursor: pointer;}
.layui-layer-photos-header > span:hover{background-color: rgba(51,51,51,.32);}
.layui-layer-photos-header .layui-icon{font-size: 18px;}
.layui-layer-photos-footer > h3{max-width: 65%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}
.layui-layer-photos-footer a:hover{text-decoration: underline;}
.layui-layer-photos-footer em{font-style: normal;}
/* 关闭动画 */
@-webkit-keyframes layer-bounceOut {
@ -181,4 +283,4 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
.layui-layer-gray .layui-layer-btn {padding: 5px 10px 10px; text-align: right; border-top: 1px solid #e9e7e7}
.layui-layer-gray .layui-layer-btn a {background: #fff; border-color: #e9e7e7; color: #333}
.layui-layer-gray .layui-layer-btn .layui-layer-btn1 {background: #c9c5c5}
.layui-layer-tab .layui-layer-content {width: 100%}
.layui-layer-tab .layui-layer-content {width: 100%}

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 701 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -21,35 +21,33 @@ body .layer-ext-moon .layui-layer-title {
border: none;
}
body .layer-ext-moon .layui-layer-content .layui-layer-ico {
body .layer-ext-moon .layui-layer-content .layui-layer-face {
height: 32px;
width: 32px;
top:18.5px;
}
body .layer-ext-moon .layui-layer-ico0 {
body .layer-ext-moon .layui-icon-tips {
background: url(default.png) no-repeat -96px 0;
;
}
body .layer-ext-moon .layui-layer-ico1 {
body .layer-ext-moon .layui-icon-success {
background: url(default.png) no-repeat -224px 0;
;
}
body .layer-ext-moon .layui-layer-ico2 {
body .layer-ext-moon .layui-icon-error {
background: url(default.png) no-repeat -192px 0;
}
body .layer-ext-moon .layui-layer-ico3 {
body .layer-ext-moon .layui-icon-question {
background: url(default.png) no-repeat -160px 0;
}
body .layer-ext-moon .layui-layer-ico4 {
body .layer-ext-moon .layui-icon-lock {
background: url(default.png) no-repeat -320px 0;
}
body .layer-ext-moon .layui-layer-ico5 {
body .layer-ext-moon .layui-icon-face-cry {
background: url(default.png) no-repeat -288px 0;
}
body .layer-ext-moon .layui-layer-ico6 {
body .layer-ext-moon .layui-icon-face-smile {
background: url(default.png) -256px 0;
}
body .layer-ext-moon .layui-layer-ico7 {
body .layer-ext-moon .layui-layer-download {
background: url(default.png) no-repeat -128px 0;
}
body .layer-ext-moon .layui-layer-setwin {
@ -75,10 +73,10 @@ body .layer-ext-moon .layui-layer-setwin .layui-layer-maxmin {
body .layer-ext-moon .layui-layer-setwin .layui-layer-maxmin:hover {
background: url(default.png) no-repeat -16px 0;
}
body .layer-ext-moon .layui-layer-setwin .layui-layer-close1,body .layer-ext-moon .layui-layer-setwin .layui-layer-close2 {
body .layer-ext-moon .layui-layer-setwin .layui-layer-close1,body .layer-ext-moon .layui-layer-setwin .layui-layer-close2, body .layui-layer-tab .layui-layer-setwin .layui-layer-close1,body .layui-layer-tab .layui-layer-setwin .layui-layer-close2 {
background: url(default.png) 0 0;
}
body .layer-ext-moon .layui-layer-setwin .layui-layer-close1:hover,body .layer-ext-moon .layui-layer-setwin .layui-layer-close2:hover {
body .layer-ext-moon .layui-layer-setwin .layui-layer-close1:hover,body .layer-ext-moon .layui-layer-setwin .layui-layer-close2:hover, body .layui-layer-tab .layui-layer-setwin .layui-layer-close1:hover,body .layui-layer-tab .layui-layer-setwin .layui-layer-close2:hover {
background: url(default.png) -48px 0;
}
body .layer-ext-moon .layui-layer-padding{padding-top: 24px;}
@ -136,3 +134,36 @@ body .layer-ext-moon .layui-layer-btn .layui-layer-btn3 {
body .layer-ext-moon .layui-layer-title span.layui-layer-tabnow{
height:47px;
}
/** 图标字体 **/
@font-face {
font-family: 'layui-icon';
src: url('../../../../../fonts/iconfont.woff?v=282') format('woff');
}
.layui-icon{
font-family:"layui-icon" !important;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* font-class */
.layui-icon-left:before{content:"\e603"}
.layui-icon-right:before{content:"\e602"}
.layui-icon-refresh:before{content:"\e669"}
.layui-icon-slider:before{content:"\e714"}
.layui-icon-add-circle:before{content:"\e61f"}
.layui-icon-reduce-circle:before{content:"\e616"}
.layui-icon-refresh-1:before{content:"\e666"}
.layui-icon-loading:before{content:"\e63d"}
.layui-icon-loading-1:before{content:"\e63e"}
/** 循环旋转动画 **/
.layui-anim{-webkit-animation-duration: 0.3s; -webkit-animation-fill-mode: both; animation-duration: 0.3s; animation-fill-mode: both;}
.layui-anim.layui-icon{display: inline-block;}
.layui-anim-loop{-webkit-animation-iteration-count: infinite; animation-iteration-count: infinite;}
.layui-trans,
.layui-trans a{transition: all .2s; -webkit-transition: all .2s;}
@-webkit-keyframes layui-rotate{from {-webkit-transform: rotate(0deg);} to {-webkit-transform: rotate(360deg);}}
@keyframes layui-rotate{from {transform: rotate(0deg);} to {transform: rotate(360deg);}}
.layui-anim-rotate{-webkit-animation-name: layui-rotate; animation-name: layui-rotate; -webkit-animation-duration: 1s; animation-duration: 1s; -webkit-animation-timing-function: linear; animation-timing-function: linear;}

File diff suppressed because one or more lines are too long

View File

@ -1,45 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
2013-9-30: Created.
-->
<svg>
<metadata>
Created by iconfont
</metadata>
<defs>
<font id="laydate-icon" horiz-adv-x="1024" >
<font-face
font-family="laydate-icon"
font-weight="500"
font-stretch="normal"
units-per-em="1024"
ascent="896"
descent="-128"
/>
<missing-glyph />
<glyph glyph-name="x" unicode="x" horiz-adv-x="1001"
d="M281 543q-27 -1 -53 -1h-83q-18 0 -36.5 -6t-32.5 -18.5t-23 -32t-9 -45.5v-76h912v41q0 16 -0.5 30t-0.5 18q0 13 -5 29t-17 29.5t-31.5 22.5t-49.5 9h-133v-97h-438v97zM955 310v-52q0 -23 0.5 -52t0.5 -58t-10.5 -47.5t-26 -30t-33 -16t-31.5 -4.5q-14 -1 -29.5 -0.5
t-29.5 0.5h-32l-45 128h-439l-44 -128h-29h-34q-20 0 -45 1q-25 0 -41 9.5t-25.5 23t-13.5 29.5t-4 30v167h911zM163 247q-12 0 -21 -8.5t-9 -21.5t9 -21.5t21 -8.5q13 0 22 8.5t9 21.5t-9 21.5t-22 8.5zM316 123q-8 -26 -14 -48q-5 -19 -10.5 -37t-7.5 -25t-3 -15t1 -14.5
t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-5 19 -11 39h-368zM336 498v228q0 11 2.5 23t10 21.5t20.5 15.5t34 6h188q31 0 51.5 -14.5t20.5 -52.5v-227h-327z" />
<glyph glyph-name="youyou" unicode="&#58882;" d="M283.648 721.918976 340.873216 780.926976 740.352 383.997952 340.876288-12.925952 283.648 46.077952 619.52 383.997952Z" horiz-adv-x="1024" />
<glyph glyph-name="zuozuo" unicode="&#58883;" d="M740.352 721.918976 683.126784 780.926976 283.648 383.997952 683.123712-12.925952 740.352 46.077952 404.48 383.997952Z" horiz-adv-x="1024" />
<glyph glyph-name="xiayiye" unicode="&#58970;" d="M62.573 384.103l423.401 423.662c18.985 18.985 49.757 18.985 68.727 0 18.982-18.972 18.985-49.746 0-68.729l-355.058-355.067 356.796-356.796c18.977-18.971 18.976-49.746 0-68.727-18.982-18.976-49.751-18.976-68.727 0l-39.753 39.753 0.269 0.246-385.655 385.661zM451.365 384.103l423.407 423.662c18.985 18.985 49.757 18.985 68.727 0 18.982-18.972 18.985-49.746 0-68.729l-355.058-355.067 356.796-356.796c18.977-18.971 18.976-49.746 0-68.727-18.982-18.976-49.757-18.977-68.727 0l-39.762 39.754 0.273 0.249-385.662 385.661zM451.365 384.103z" horiz-adv-x="1024" />
<glyph glyph-name="xiayiye1" unicode="&#58971;" d="M948.066926 382.958838l-411.990051-412.24426c-18.47333-18.47333-48.417689-18.47333-66.875207 0-18.47333 18.461167-18.47333 48.405526 0 66.875207L814.691135 383.088983 467.512212 730.269123c-18.466032 18.458735-18.466032 48.405526 0 66.873991 18.468465 18.464816 48.410391 18.464816 66.872774 0l38.682336-38.682336-0.261507-0.239614 375.259894-375.265975v0.003649m-378.312834 0L157.756743-29.285422c-18.47333-18.47333-48.415256-18.47333-66.872775 0-18.47333 18.461167-18.47333 48.405526 0 66.875207L436.369787 383.088983 89.19208 730.269123c-18.4636 18.458735-18.4636 48.405526 0 66.873991 18.470898 18.464816 48.415256 18.464816 66.872774 0l38.692067-38.682336-0.266372-0.239614 375.267191-375.265975-0.004865 0.003649m0 0z" horiz-adv-x="1024" />
</font>
</defs></svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,49 +1,53 @@
/*this is basic form validation using for validation person's basic information author:Clara Guo data:2017/07/20*/
$(document).ready(function(){
$.validator.setDefaults({
submitHandler: function(form) {
form.submit();
submitHandler: function(form) {
form.submit();
}
});
//手机号码验证身份证正则合并:(^\d{15}$)|(^\d{17}([0-9]|X)$)
jQuery.validator.addMethod("isPhone",function(value,element){
});
// 非法字符验证
jQuery.validator.addMethod("specialSign",function(value,element) {
var char = /^[^<>"'|\\]+$/;
return this.optional(element) || (char.test(value));
},"不能包含非法字符:< > \" ' \\\ |");
// 手机号码验证身份证正则合并:(^\d{15}$)|(^\d{17}([0-9]|X)$)
jQuery.validator.addMethod("isPhone",function(value,element) {
var length = value.length;
var phone=/^1[3-9]\d{9}$/;
var phone = /^1[3-9]\d{9}$/;
return this.optional(element)||(length == 11 && phone.test(value));
},"请填写正确的11位手机号");
//电话号码验证
jQuery.validator.addMethod("isTel",function(value,element){
// 电话号码验证
jQuery.validator.addMethod("isTel",function(value,element) {
var tel = /^(0\d{2,3}-)?\d{7,8}$/g;//区号3,4位,号码7,8位
return this.optional(element) || (tel.test(value));
},"请填写正确的座机号码");
//姓名校验
jQuery.validator.addMethod("isName",function(value,element){
var name=/^[\u4e00-\u9fa5]{2,6}$/;
// 姓名校验
jQuery.validator.addMethod("isName",function(value,element) {
var name = /^[\u4e00-\u9fa5]{2,6}$/;
return this.optional(element) || (name.test(value));
},"姓名只能用汉字,长度2-4位");
//校验用户名
jQuery.validator.addMethod("isUserName",function(value,element){
var userName=/^[a-zA-Z0-9]{2,13}$/;
// 校验用户名
jQuery.validator.addMethod("isUserName",function(value,element) {
var userName = /^[a-zA-Z0-9]{2,13}$/;
return this.optional(element) || (userName).test(value);
},'请输入数字或者字母,不包含特殊字符');
//校验身份证
jQuery.validator.addMethod("isIdentity",function(value,element){
var id= /^(\d{15}$|^\d{18}$|^\d{17}(\d|X))$/;
// 校验身份证
jQuery.validator.addMethod("isIdentity",function(value,element) {
var id = /^(\d{15}$|^\d{18}$|^\d{17}(\d|X))$/;
return this.optional(element) || (id.test(value));
},"请输入正确的15或18位身份证号,末尾若为X请大写");
//校验二代身份证
jQuery.validator.addMethod("isIdentity18",function(value,element){
var id= /^(^\d{17}(\d|X))$/;
// 校验二代身份证
jQuery.validator.addMethod("isIdentity18",function(value,element) {
var id = /^(^\d{17}(\d|X))$/;
return this.optional(element) || (id.test(value));
},"请输入正确的18位身份证号末尾若为X请大写");
//校验出生日期
jQuery.validator.addMethod("isBirth",function(value,element){
// 校验出生日期
jQuery.validator.addMethod("isBirth",function(value,element) {
var birth = /^(19|20)\d{2}-(1[0-2]|0?[1-9])-(0?[1-9]|[1-2][0-9]|3[0-1])$/;
return this.optional(element) || (birth).test(value);
},"出生日期格式示例2000-01-01");
//校验IP地址
jQuery.validator.addMethod("isIp",function(value,element){
// 校验IP地址
jQuery.validator.addMethod("isIp",function(value,element) {
var ip = /^(?:(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:1[0-9][0-9]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:2[0-4][0-9])|(?:25[0-5])|(?:1[0-9][0-9])|(?:[1-9][0-9])|(?:[0-9]))$/;
return this.optional(element) || (ip).test(value);
},"IP地址格式示例127.0.0.1");
@ -53,7 +57,7 @@ $(document).ready(function(){
jQuery.validator.addMethod("gt", function(value, element, param) {
return value > param;
}, $.validator.format("输入值必须大于{0}"));
//校验新旧密码是否相同
// 校验新旧密码是否相同
jQuery.validator.addMethod("isdiff",function(){
var p1=$("#pwdOld").val();
var p2=$("#pwdNew").val();
@ -63,7 +67,7 @@ $(document).ready(function(){
return true;
}
});
//校验新密码和确认密码是否相同
// 校验新密码和确认密码是否相同
jQuery.validator.addMethod("issame",function(){
var p3=$("#confirm_password").val();
var p4=$("#pwdNew").val();
@ -73,7 +77,7 @@ $(document).ready(function(){
return false;
}
});
//校验基础信息表单
// 校验基础信息表单
$("#basicInfoForm").validate({
errorElement:'span',
errorClass:'help-block error-mes',
@ -133,11 +137,11 @@ $(document).ready(function(){
}
});
//校验修改密码表单
// 校验修改密码表单
$("#modifyPwd").validate({
onfocusout: function(element) { $(element).valid()},
debug:false, //表示校验通过后是否直接提交表单
onkeyup:false, //表示按键松开时候监听验证
debug:false, // 表示校验通过后是否直接提交表单
onkeyup:false, // 表示按键松开时候监听验证
rules:{
pwdOld:{
required:true,

View File

@ -150,12 +150,26 @@ body.signin {
box-shadow: none;
}
.form-control{
border-radius: 1px!important;
padding: 6px 12px!important;
height: 34px!important;
.form-control {
border-radius: 1px!important;
padding: 6px 12px!important;
height: 34px!important;
}
.form-control:focus{
.form-control:focus {
border-color: #1ab394 !important;
}
body .layer-ext-moon-msg[type="dialog"]{
min-width: 100px !important;
}
body .layer-ext-moon-msg {
background-color: rgba(0,0,0,0.6);
color: #fff;
border: none;
}
body .layer-ext-moon-msg .layui-layer-content{
padding: 12px 25px;
text-align: center;
}

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}.signinpanel{width:750px;margin:10% auto 0;color:rgba(255,255,255,.95)}.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:380px!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}
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}.signinpanel{width:750px;margin:10% auto 0;color:rgba(255,255,255,.95)}.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:380px!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}body .layer-ext-moon-msg[type="dialog"]{min-width:100px!important}body .layer-ext-moon-msg{background-color:rgba(0,0,0,0.6);color:#fff;border:0}body .layer-ext-moon-msg .layui-layer-content{padding:12px 25px;text-align:center}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 322 KiB

View File

@ -8,6 +8,7 @@ user.password.retry.limit.exceed=密码输入错误{0}次帐户锁定10分钟
user.password.delete=对不起,您的账号已被删除
user.blocked=用户已封禁,请联系管理员
role.blocked=角色已封禁,请联系管理员
login.blocked=很遗憾访问IP已被列入系统黑名单
user.logout.success=退出成功
length.not.valid=长度必须在{min}到{max}个字符之间

File diff suppressed because one or more lines are too long

View File

@ -1,120 +1,10 @@
/*
* metismenu - v1.1.3
* Easy menu jQuery plugin for Twitter Bootstrap 3
* metismenu - v2.0.2
* A jQuery menu plugin
* https://github.com/onokumus/metisMenu
*
* Made by Osman Nuri Okumus
* Under MIT License
*/
;(function($, window, document, undefined) {
var pluginName = "metisMenu",
defaults = {
toggle: true,
doubleTapToGo: false
};
function Plugin(element, options) {
this.element = $(element);
this.settings = $.extend({}, defaults, options);
this._defaults = defaults;
this._name = pluginName;
this.init();
}
Plugin.prototype = {
init: function() {
var $this = this.element,
$toggle = this.settings.toggle,
obj = this;
if (this.isIE() <= 9) {
$this.find("li.active").has("ul").children("ul").collapse("show");
$this.find("li").not(".active").has("ul").children("ul").collapse("hide");
} else {
$this.find("li.active").has("ul").children("ul").addClass("collapse in");
$this.find("li").not(".active").has("ul").children("ul").addClass("collapse");
}
//add the "doubleTapToGo" class to active items if needed
if (obj.settings.doubleTapToGo) {
$this.find("li.active").has("ul").children("a").addClass("doubleTapToGo");
}
$this.find("li").has("ul").children("a").on("click" + "." + pluginName, function(e) {
e.preventDefault();
//Do we need to enable the double tap
if (obj.settings.doubleTapToGo) {
//if we hit a second time on the link and the href is valid, navigate to that url
if (obj.doubleTapToGo($(this)) && $(this).attr("href") !== "#" && $(this).attr("href") !== "") {
e.stopPropagation();
document.location = $(this).attr("href");
return;
}
}
$(this).parent("li").toggleClass("active").children("ul").collapse("toggle");
if ($toggle) {
$(this).parent("li").siblings().removeClass("active").children("ul.in").collapse("hide");
}
});
},
isIE: function() { //https://gist.github.com/padolsey/527683
var undef,
v = 3,
div = document.createElement("div"),
all = div.getElementsByTagName("i");
while (
div.innerHTML = "<!--[if gt IE " + (++v) + "]><i></i><![endif]-->",
all[0]
) {
return v > 4 ? v : undef;
}
},
//Enable the link on the second click.
doubleTapToGo: function(elem) {
var $this = this.element;
//if the class "doubleTapToGo" exists, remove it and return
if (elem.hasClass("doubleTapToGo")) {
elem.removeClass("doubleTapToGo");
return true;
}
//does not exists, add a new class and return false
if (elem.parent().children("ul").length) {
//first remove all other class
$this.find(".doubleTapToGo").removeClass("doubleTapToGo");
//add the class on the current element
elem.addClass("doubleTapToGo");
return false;
}
},
remove: function() {
this.element.off("." + pluginName);
this.element.removeData(pluginName);
}
};
$.fn[pluginName] = function(options) {
this.each(function () {
var el = $(this);
if (el.data(pluginName)) {
el.data(pluginName).remove();
}
el.data(pluginName, new Plugin(this, options));
});
return this;
};
})(jQuery, window, document);
!function(a){"use strict";function b(){var a=document.createElement("mm"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}function c(b){return this.each(function(){var c=a(this),d=c.data("mm"),f=a.extend({},e.DEFAULTS,c.data(),"object"==typeof b&&b);d||c.data("mm",d=new e(this,f)),"string"==typeof b&&d[b]()})}a.fn.emulateTransitionEnd=function(b){var c=!1,e=this;a(this).one("mmTransitionEnd",function(){c=!0});var f=function(){c||a(e).trigger(d.end)};return setTimeout(f,b),this};var d=b();d&&(a.event.special.mmTransitionEnd={bindType:d.end,delegateType:d.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}});var e=function(b,c){this.$element=a(b),this.options=a.extend({},e.DEFAULTS,c),this.transitioning=null,this.init()};e.TRANSITION_DURATION=350,e.DEFAULTS={toggle:!0,doubleTapToGo:!1,activeClass:"active"},e.prototype.init=function(){var b=this,c=this.options.activeClass;this.$element.find("li."+c).has("ul").children("ul").addClass("collapse in"),this.$element.find("li").not("."+c).has("ul").children("ul").addClass("collapse"),this.options.doubleTapToGo&&this.$element.find("li."+c).has("ul").children("a").addClass("doubleTapToGo"),this.$element.find("li").has("ul").children("a").on("click.metisMenu",function(d){var e=a(this),f=e.parent("li"),g=f.children("ul");return d.preventDefault(),f.hasClass(c)?b.hide(g):b.show(g),b.options.doubleTapToGo&&b.doubleTapToGo(e)&&"#"!==e.attr("href")&&""!==e.attr("href")?(d.stopPropagation(),void(document.location=e.attr("href"))):void 0})},e.prototype.doubleTapToGo=function(a){var b=this.$element;return a.hasClass("doubleTapToGo")?(a.removeClass("doubleTapToGo"),!0):a.parent().children("ul").length?(b.find(".doubleTapToGo").removeClass("doubleTapToGo"),a.addClass("doubleTapToGo"),!1):void 0},e.prototype.show=function(b){var c=this.options.activeClass,f=a(b),g=f.parent("li");if(!this.transitioning&&!f.hasClass("in")){g.addClass(c),this.options.toggle&&this.hide(g.siblings().children("ul.in")),f.removeClass("collapse").addClass("collapsing").height(0),this.transitioning=1;var h=function(){f.removeClass("collapsing").addClass("collapse in").height(""),this.transitioning=0};return d?void f.one("mmTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(e.TRANSITION_DURATION).height(f[0].scrollHeight):h.call(this)}},e.prototype.hide=function(b){var c=this.options.activeClass,f=a(b);if(!this.transitioning&&f.hasClass("in")){f.parent("li").removeClass(c),f.height(f.height())[0].offsetHeight,f.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var g=function(){this.transitioning=0,f.removeClass("collapsing").addClass("collapse")};return d?void f.height(0).one("mmTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(e.TRANSITION_DURATION):g.call(this)}};var f=a.fn.metisMenu;a.fn.metisMenu=c,a.fn.metisMenu.Constructor=e,a.fn.metisMenu.noConflict=function(){return a.fn.metisMenu=f,this}}(jQuery);

View File

@ -338,7 +338,7 @@ label.error {
.input-group label.error {
z-index:99;
right: 42px
right: 42px;
}
.input-group input.error + label.error + .input-group-addon>i {
@ -347,10 +347,14 @@ label.error {
.input-group.date label.error {
z-index:99;
right: 42px
right: 42px;
}
.Validform_error,input.error,textarea.error,select.error {
.select2-hidden-accessible + label.error {
right: 38px;
}
.Validform_error,input.error,textarea.error,select.error,label.error+.select2-container--bootstrap .select2-selection--single {
background-color: #fbe2e2;
border-color: #c66161;
color: #c00
@ -380,12 +384,12 @@ label.error {
position: relative;
padding-left: 25px;
padding-right: 15px;
padding-top: 8px;
padding-top: 7px;
}
.icheckbox, .icheckbox-blue, .iradio, .iradio-blue, .iradio-purple {
position: absolute;
top: 8px;
top: 7px;
left: 0
}
@ -1004,6 +1008,37 @@ table.rc-table-resizing thead > th > a {
padding-bottom:5px
}
.form-control-plaintext {
display: block;
width: 100%;
padding-top: .286rem;
padding-bottom: .286rem;
margin-bottom: 0;
line-height: 1.57142857;
color: #212529;
background-color: transparent;
border: solid transparent;
border-width: 1px 0;
font-weight: 500;
border-bottom: 1px dashed #ccd5db;
min-height: 25px
}
.form-control-plaintext-no-content {
display: block;
width: 100%;
padding-top: .286rem;
padding-bottom: .286rem;
margin-bottom: 0;
line-height: 1.57142857;
color: #ddd !important;
background-color: transparent;
border: solid transparent;
border-width: 1px 0;
border-bottom: 1px dashed #ccd5db;
min-height: 25px
}
.main-content {
background-color: #ffffff;
color: inherit;
@ -1032,7 +1067,7 @@ table.rc-table-resizing thead > th > a {
}
/** 表格行拖拽样式 **/
.reorder_rows_onDragClass td {
.reorder-rows-on-drag-class td {
color:yellow!important;
background-color:#999!important;
text-shadow:0 0 10px black,0 0 10px black,0 0 8px black,0 0 6px black,0 0 6px black;

View File

@ -2,11 +2,6 @@
* 首页方法封装处理
* Copyright (c) 2019 ruoyi
*/
layer.config({
extend: 'moon/style.css',
skin: 'layer-ext-moon'
});
var isMobile = false;
var sidebarHeight = isMobile ? '100%' : '96%';
@ -61,7 +56,7 @@ $(window).bind("load resize", function() {
$(".slimScrollDiv").css({ "overflow": "hidden" });
$('.navbar-static-side').fadeOut();
} else {
if($('body').hasClass('canvas-menu')) {
if ($('body').hasClass('canvas-menu')) {
$('body').addClass('fixed-sidebar');
$('body').removeClass('canvas-menu');
$("body").removeClass("mini-navbar");
@ -72,10 +67,19 @@ $(window).bind("load resize", function() {
}
});
function openToCurrentTab(obj) {
if (isScrollToTop) {
$(obj).show().siblings('.RuoYi_iframe').hide();
} else {
$(obj).css({"visibility": "visible", "position": "static"}).siblings('.RuoYi_iframe').css({"visibility": "hidden", "position": "absolute"});
}
}
function syncMenuTab(dataId) {
if(isLinkage) {
if (isLinkage) {
var $dataObj = $('a[href$="' + decodeURI(dataId) + '"]');
if ($dataObj.attr("class") != null && !$dataObj.hasClass("noactive")) {
$('.tab-pane li').removeClass("active");
$('.nav ul').removeClass("in");
$dataObj.parents("ul").addClass("in")
$dataObj.parents("li").addClass("active").siblings().removeClass("active").find('li').removeClass("active");
@ -109,7 +113,7 @@ function fixedSidebar() {
// 设置锚点
function setIframeUrl(href) {
if($.common.equals("history", mode)) {
if ($.common.equals("history", mode)) {
storage.set('publicPath', href);
} else {
var nowUrl = window.location.href;
@ -156,7 +160,7 @@ $(function() {
// 显示tab对应的内容区
$('.RuoYi_iframe').each(function() {
if ($(this).data('id') == currentId) {
$(this).show().siblings('.RuoYi_iframe').hide();
openToCurrentTab(this);
}
});
$(element).addClass('active').siblings('.menuTab').removeClass('active');
@ -288,7 +292,7 @@ $(function() {
// 显示tab对应的内容区
$('.mainContent .RuoYi_iframe').each(function() {
if ($(this).data('id') == dataUrl) {
$(this).show().siblings('.RuoYi_iframe').hide();
openToCurrentTab(this);
return false;
}
});
@ -307,8 +311,12 @@ $(function() {
// 添加选项卡对应的iframe
var str1 = '<iframe class="RuoYi_iframe" name="iframe' + dataIndex + '" width="100%" height="100%" src="' + dataUrl + '" frameborder="0" data-id="' + dataUrl + '" data-refresh="' + isRefresh + '" seamless></iframe>';
$('.mainContent').find('iframe.RuoYi_iframe').hide().parents('.mainContent').append(str1);
if (isScrollToTop) {
$('.mainContent').find('iframe.RuoYi_iframe').hide().parents('.mainContent').append(str1);
} else {
$('.mainContent').find('iframe.RuoYi_iframe').css({"visibility": "hidden", "position": "absolute"}).parents('.mainContent').append(str1);
}
$.modal.loading("数据加载中,请稍候...");
$('.mainContent iframe:visible').on('load', function() {
@ -349,7 +357,7 @@ $(function() {
$('.mainContent .RuoYi_iframe').each(function() {
if ($(this).data('id') == activeId) {
$(this).show().siblings('.RuoYi_iframe').hide();
openToCurrentTab(this);
return false;
}
});
@ -377,7 +385,7 @@ $(function() {
$(this).parents('.menuTab').prev('.menuTab:last').addClass('active');
$('.mainContent .RuoYi_iframe').each(function() {
if ($(this).data('id') == activeId) {
$(this).show().siblings('.RuoYi_iframe').hide();
openToCurrentTab(this);
return false;
}
});
@ -393,11 +401,11 @@ $(function() {
}
});
if($.common.isNotEmpty(panelUrl)){
if ($.common.isNotEmpty(panelUrl)) {
$('.menuTab[data-id="' + panelUrl + '"]').addClass('active').siblings('.menuTab').removeClass('active');
$('.mainContent .RuoYi_iframe').each(function() {
if ($(this).data('id') == panelUrl) {
$(this).show().siblings('.RuoYi_iframe').hide();
openToCurrentTab(this);
return false;
}
});
@ -418,7 +426,7 @@ $(function() {
});
}
scrollToTab($('.menuTab.active'));
syncMenuTab($('.page-tabs-content').find('.active').attr('data-id'));
syncMenuTab($.common.isNotEmpty(panelUrl) ? panelUrl : $('.page-tabs-content').find('.active').attr('data-id'));
return false;
}
@ -439,8 +447,8 @@ $(function() {
// 显示tab对应的内容区
$('.mainContent .RuoYi_iframe').each(function() {
if ($(this).data('id') == currentId) {
$(this).show().siblings('.RuoYi_iframe').hide();
isRefresh = $(this).data('refresh');
openToCurrentTab(this);
isRefresh = $.common.nullToDefault($(this).data('refresh'), false);
return false;
}
});
@ -491,7 +499,11 @@ $(function() {
$(this).remove();
});
$('.page-tabs-content').children("[data-id]:first").each(function() {
$('.RuoYi_iframe[data-id="' + $(this).data('id') + '"]').show();
if (isScrollToTop) {
$('.RuoYi_iframe[data-id="' + $(this).data('id') + '"]').show();
} else {
$('.RuoYi_iframe[data-id="' + $(this).data('id') + '"]').css({"visibility": "visible", "position": "static"});
}
$(this).addClass("active");
});
$('.page-tabs-content').css("margin-left", "0");

View File

@ -5,16 +5,10 @@
var startLayDate;
var endLayDate;
var isScrollToTop = parent.isScrollToTop;
$(function() {
// layer扩展皮肤
if (window.layer !== undefined) {
layer.config({
extend: 'moon/style.css',
skin: 'layer-ext-moon'
});
}
// 回到顶部绑定
if ($.fn.toTop !== undefined) {
$('#scroll-up').toTop();
@ -48,7 +42,7 @@ $(function() {
});
// laydate 时间控件绑定
if ($(".select-time").length > 0) {
if ($(".select-time").length > 0 && $('#startTime').length > 0 && $('#endTime').length > 0) {
layui.use('laydate', function() {
var laydate = layui.laydate;
startLayDate = laydate.render({
@ -68,6 +62,7 @@ $(function() {
endLayDate.config.min.month = '';
endLayDate.config.min.date = '';
}
$('#endTime').trigger('click');
}
});
endLayDate = laydate.render({
@ -230,7 +225,7 @@ var refreshItem = function(){
/** 关闭选项卡 */
var closeItem = function(dataId){
var topWindow = $(window.parent.document);
if($.common.isNotEmpty(dataId)){
if ($.common.isNotEmpty(dataId)) {
window.parent.$.modal.closeLoading();
// 根据dataId关闭指定选项卡
$('.menuTab[data-id="' + dataId + '"]', topWindow).remove();
@ -240,11 +235,11 @@ var closeItem = function(dataId){
}
var panelUrl = window.frameElement.getAttribute('data-panel');
$('.page-tabs-content .active i', topWindow).click();
if($.common.isNotEmpty(panelUrl)){
if ($.common.isNotEmpty(panelUrl)) {
$('.menuTab[data-id="' + panelUrl + '"]', topWindow).addClass('active').siblings('.menuTab').removeClass('active');
$('.mainContent .RuoYi_iframe', topWindow).each(function() {
if ($(this).data('id') == panelUrl) {
$(this).show().siblings('.RuoYi_iframe').hide();
openToCurrentTab(this);
return false;
}
});
@ -268,13 +263,13 @@ function createMenuItem(dataUrl, menuName, isRefresh) {
// 显示tab对应的内容区
$('.mainContent .RuoYi_iframe', topWindow).each(function() {
if ($(this).data('id') == dataUrl) {
$(this).show().siblings('.RuoYi_iframe').hide();
openToCurrentTab(this);
return false;
}
});
}
if (isRefresh) {
refreshTab();
refreshTab();
}
flag = false;
return false;
@ -287,7 +282,11 @@ function createMenuItem(dataUrl, menuName, isRefresh) {
// 添加选项卡对应的iframe
var str1 = '<iframe class="RuoYi_iframe" name="iframe' + dataIndex + '" width="100%" height="100%" src="' + dataUrl + '" frameborder="0" data-id="' + dataUrl + '" data-panel="' + panelUrl + '" seamless></iframe>';
$('.mainContent', topWindow).find('iframe.RuoYi_iframe').hide().parents('.mainContent').append(str1);
if (isScrollToTop) {
$('.mainContent', topWindow).find('iframe.RuoYi_iframe').hide().parents('.mainContent').append(str1);
} else {
$('.mainContent', topWindow).find('iframe.RuoYi_iframe').css({"visibility": "hidden", "position": "absolute"}).parents('.mainContent').append(str1);
}
window.parent.$.modal.loading("数据加载中,请稍候...");
$('.mainContent iframe:visible', topWindow).on('load', function() {
@ -357,25 +356,33 @@ function activeWindow() {
return $('.RuoYi_iframe[data-id="' + currentId + '"]', topWindow)[0].contentWindow;
}
function openToCurrentTab(obj) {
if (isScrollToTop) {
$(obj).show().siblings('.RuoYi_iframe').hide();
} else {
$(obj).css({"visibility": "visible", "position": "static"}).siblings('.RuoYi_iframe').css({"visibility": "hidden", "position": "absolute"});
}
}
/** 密码规则范围验证 */
function checkpwd(chrtype, password) {
if (chrtype == 1) {
if(!$.common.numValid(password)){
if (!$.common.numValid(password)) {
$.modal.alertWarning("密码只能为0-9数字");
return false;
}
} else if (chrtype == 2) {
if(!$.common.enValid(password)){
if (!$.common.enValid(password)) {
$.modal.alertWarning("密码只能为a-z和A-Z字母");
return false;
}
} else if (chrtype == 3) {
if(!$.common.enNumValid(password)){
if (!$.common.enNumValid(password)) {
$.modal.alertWarning("密码必须包含字母以及数字");
return false;
}
} else if (chrtype == 4) {
if(!$.common.charValid(password)){
if (!$.common.charValid(password)) {
$.modal.alertWarning("密码必须包含字母、数字、以及特殊符号<font color='red'>~!@#$%^&*()-=_+</font>");
return false;
}
@ -383,6 +390,32 @@ function checkpwd(chrtype, password) {
return true;
}
/** 开始时间/时分秒 */
function beginOfTime(date) {
if ($.common.isNotEmpty(date)) {
return $.common.sprintf("%s 00:00:00", date);
}
}
/** 结束时间/时分秒 */
function endOfTime(date) {
if ($.common.isNotEmpty(date)) {
return $.common.sprintf("%s 23:59:59", date);
}
}
/** 重置日期/年月日 */
function resetDate() {
if ($.common.isNotEmpty(startLayDate) && $.common.isNotEmpty(endLayDate)) {
endLayDate.config.min.year = '';
endLayDate.config.min.month = '';
endLayDate.config.min.date = '';
startLayDate.config.max.year = '2099';
startLayDate.config.max.month = '12';
startLayDate.config.max.date = '31';
}
}
// 日志打印封装处理
var log = {
log: function(msg) {
@ -428,7 +461,7 @@ var sub = {
var data = $("#" + table.options.id).bootstrapTable('getData');
var count = data.length;
for (var dataIndex = 0; dataIndex < count; dataIndex++) {
var columns = $('#' + table.options.id + ' tr[data-index="' + dataIndex + '"] td');
var columns = $('#' + table.options.id + ' tr[data-index="' + dataIndex + '"] td:visible');
var obj = new Object();
for (var i = 0; i < columns.length; i++) {
var inputValue = $(columns[i]).find('input');
@ -465,9 +498,10 @@ var sub = {
}
$("#" + table.options.id).bootstrapTable('remove', { field: subColumn, values: ids });
},
delRowByIndex: function(value) {
delRowByIndex: function(value, tableId) {
var currentId = $.common.isEmpty(tableId) ? table.options.id : tableId;
sub.editRow();
$("#" + table.options.id).bootstrapTable('remove', { field: "index", values: [value] });
$("#" + currentId).bootstrapTable('remove', { field: "index", values: [value] });
sub.editRow();
},
addRow: function(row, tableId) {

View File

@ -10,7 +10,7 @@ var table = {
options: {},
// 设置实例配置
set: function(id) {
if($.common.getLength(table.config) > 1 && $.common.isNotEmpty(event)) {
if ($.common.getLength(table.config) > 1 && $.common.isNotEmpty(event)) {
var tableId = $.common.isEmpty(id) ? $(event.currentTarget).parents(".bootstrap-table").find("table.table").attr("id") || $(event.currentTarget).parents(".bootstrap-tree-table").find("table.table").attr("id") : id;
if ($.common.isNotEmpty(tableId)) {
table.options = table.get(tableId);
@ -41,17 +41,18 @@ var table = {
method: 'post',
height: undefined,
sidePagination: "server",
undefinedText: '-',
sortName: undefined,
sortOrder: "asc",
pagination: true,
paginationLoop: false,
pageSize: 10,
pageNumber: 1,
pageList: [10, 25, 50],
pageList: [10, 25, 50, 100],
toolbar: "toolbar",
loadingFontSize: 13,
striped: false,
escape: false,
escape: true,
firstLoad: true,
showFooter: false,
search: false,
@ -87,6 +88,7 @@ var table = {
cache: false, // 是否使用缓存
height: options.height, // 表格的高度
striped: options.striped, // 是否显示行间隔色
undefinedText: options.undefinedText, // 数据值为空时显示的内容
sortable: true, // 是否启用排序
sortStable: true, // 设置为 true 将获得稳定的排序
sortName: options.sortName, // 排序列名称
@ -101,6 +103,7 @@ var table = {
showFooter: options.showFooter, // 是否显示表尾
iconSize: 'outline', // 图标大小undefined默认的按钮尺寸 xs超小按钮sm小按钮lg大按钮
toolbar: '#' + options.toolbar, // 指定工作栏
virtualScroll: options.virtualScroll, // 是否启动虚拟滚动(大量数据纯展示时使用)
loadingFontSize: options.loadingFontSize, // 自定义加载文本的字体大小
sidePagination: options.sidePagination, // server启用服务端分页client客户端分页
search: options.search, // 是否显示搜索框功能
@ -221,13 +224,13 @@ var table = {
if ($.common.isNotEmpty(table.options.rememberSelected) && table.options.rememberSelected) {
func = $.inArray(e.type, ['check', 'check-all']) > -1 ? 'union' : 'difference';
var selectedIds = table.rememberSelectedIds[table.options.id];
if($.common.isNotEmpty(selectedIds)) {
if ($.common.isNotEmpty(selectedIds)) {
table.rememberSelectedIds[table.options.id] = _[func](selectedIds, rowIds);
} else {
table.rememberSelectedIds[table.options.id] = _[func]([], rowIds);
}
var selectedRows = table.rememberSelecteds[table.options.id];
if($.common.isNotEmpty(selectedRows)) {
if ($.common.isNotEmpty(selectedRows)) {
table.rememberSelecteds[table.options.id] = _[func](selectedRows, rows);
} else {
table.rememberSelecteds[table.options.id] = _[func]([], rows);
@ -249,7 +252,7 @@ var table = {
$(optionsIds).off("click").on("click", '.img-circle', function() {
var src = $(this).attr('src');
var target = $(this).data('target');
if($.common.equals("self", target)) {
if ($.common.equals("self", target)) {
var height = $(this).data('height');
var width = $(this).data('width');
top.layer.open({
@ -316,7 +319,7 @@ var table = {
_value = _value.replace(/\'/g,"&apos;");
_value = _value.replace(/\"/g,"&quot;");
var actions = [];
actions.push($.common.sprintf('<input style="opacity: 0;position: absolute;width:5px;z-index:-1" type="text" value="%s"/>', _value));
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 {
@ -363,7 +366,7 @@ var table = {
if ($.common.isNotEmpty(pageSize)) {
params.pageSize = pageSize;
}
if($.common.isNotEmpty(tableId)){
if ($.common.isNotEmpty(tableId)) {
$("#" + tableId).bootstrapTable('refresh', params);
} else{
$("#" + table.options.id).bootstrapTable('refresh', params);
@ -423,7 +426,7 @@ var table = {
shadeClose: true,
btn1: function(index, layero){
var file = layero.find('#file').val();
if (file == '' || (!$.common.endWith(file, '.xls') && !$.common.endWith(file, '.xlsx'))){
if (file == '' || (!$.common.endWith(file, '.xls') && !$.common.endWith(file, '.xlsx'))) {
$.modal.msgWarning("请选择后缀为 “xls”或“xlsx”的文件。");
return false;
}
@ -493,7 +496,7 @@ var table = {
});
if ($.common.isNotEmpty(table.options.rememberSelected) && table.options.rememberSelected) {
var selectedRows = table.rememberSelecteds[table.options.id];
if($.common.isNotEmpty(selectedRows)) {
if ($.common.isNotEmpty(selectedRows)) {
rows = $.map(table.rememberSelecteds[table.options.id], function (row) {
return $.common.getItemField(row, column);
});
@ -522,7 +525,7 @@ var table = {
});
if ($.common.isNotEmpty(table.options.rememberSelected) && table.options.rememberSelected) {
var selectedRows = table.rememberSelecteds[table.options.id];
if($.common.isNotEmpty(selectedRows)) {
if ($.common.isNotEmpty(selectedRows)) {
rows = $.map(selectedRows, function (row) {
return $.common.getItemField(row, table.options.columns[1].field);
});
@ -539,7 +542,8 @@ var table = {
$.each(datas, function(index, dict) {
if (dict.dictValue == ('' + value)) {
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));
var cssClass = $.common.isNotEmpty(dict.cssClass) ? dict.cssClass : listClass;
actions.push($.common.sprintf("<span class='%s'>%s</span>", cssClass, dict.dictLabel));
return false;
}
});
@ -694,9 +698,7 @@ var table = {
var tableId = $.common.isEmpty(tableId) ? table.options.id : tableId;
if (table.options.type == table_type.bootstrapTable) {
var params = $("#" + tableId).bootstrapTable('getOptions');
if ($.common.isNotEmpty(pageNumber)) {
params.pageNumber = pageNumber;
}
params.pageNumber = 1;
if ($.common.isNotEmpty(pageSize)) {
params.pageSize = pageSize;
}
@ -704,14 +706,7 @@ var table = {
} else if (table.options.type == table_type.bootstrapTreeTable) {
$("#" + tableId).bootstrapTreeTable('refresh', table.options.ajaxParams);
}
if ($.common.isNotEmpty(startLayDate) && $.common.isNotEmpty(endLayDate)) {
endLayDate.config.min.year = '';
endLayDate.config.min.month = '';
endLayDate.config.min.date = '';
startLayDate.config.max.year = '2099';
startLayDate.config.max.month = '12';
startLayDate.config.max.date = '31';
}
resetDate();
},
// 获取选中复选框项
selectCheckeds: function(name) {
@ -812,7 +807,7 @@ var table = {
},
// 获取iframe页的DOM
getChildFrame: function (index) {
if($.common.isEmpty(index)){
if ($.common.isEmpty(index)) {
var index = parent.layer.getFrameIndex(window.name);
return parent.layer.getChildFrame('body', index);
} else {
@ -821,7 +816,7 @@ var table = {
},
// 关闭窗体
close: function (index) {
if($.common.isEmpty(index)){
if ($.common.isEmpty(index)) {
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
} else {
@ -907,7 +902,7 @@ var table = {
}
}
var btnCallback = {};
if(options.btn instanceof Array){
if (options.btn instanceof Array){
for (var i = 1, len = options.btn.length; i < len; i++) {
var btn = options["btn" + (i + 1)];
if (btn) {
@ -925,6 +920,7 @@ var table = {
fix: false,
area: [_width + 'px', _height + 'px'],
content: _url,
closeBtn: $.common.isEmpty(options.closeBtn) ? 1 : options.closeBtn,
shadeClose: $.common.isEmpty(options.shadeClose) ? true : options.shadeClose,
skin: options.skin,
// options.btn设置为0表示不显示按钮
@ -995,18 +991,38 @@ var table = {
createMenuItem(url, title);
closeItem(dataId);
},
// 右侧弹出窗口打开
popupRight: function(title, url){
var width = 150;
if (top.location !== self.location) {
if ($(top.window).outerWidth() < 400) {
width = 50;
}
}
top.layer.open({
type: 2,
offset: 'r',
anim: 'slideLeft',
move: false,
title: title,
shade: 0.3,
shadeClose: true,
area: [($(window).outerWidth() - width) + 'px', '100%'],
content: url
});
},
// 关闭选项卡
closeTab: function (dataId) {
closeItem(dataId);
},
// 禁用按钮
disable: function() {
var doc = window.top == window.parent ? window.document : window.parent.document;
var doc = window.top == window.parent ? top.window.document : window.parent.document;
$("a[class*=layui-layer-btn]", doc).addClass("layer-disabled");
},
// 启用按钮
enable: function() {
var doc = window.top == window.parent ? window.document : window.parent.document;
var doc = window.top == window.parent ? top.window.document : window.parent.document;
$("a[class*=layui-layer-btn]", doc).removeClass("layer-disabled");
},
// 打开遮罩层
@ -1062,8 +1078,7 @@ var table = {
width: width,
height: height,
url: _url,
skin: 'layui-layer-gray',
btn: ['关闭'],
btn: 0,
yes: function (index, layero) {
$.modal.close(index);
}
@ -1095,7 +1110,7 @@ var table = {
table.set();
$.modal.confirm("确定删除该条" + table.options.modalName + "信息吗?", function() {
var url = $.common.isEmpty(id) ? table.options.removeUrl : table.options.removeUrl.replace("{id}", id);
if(table.options.type == table_type.bootstrapTreeTable) {
if (table.options.type == table_type.bootstrapTreeTable) {
$.operate.get(url);
} else {
var data = { "ids": id };
@ -1148,7 +1163,7 @@ var table = {
// 修改信息
edit: function(id) {
table.set();
if($.common.isEmpty(id) && table.options.type == table_type.bootstrapTreeTable) {
if ($.common.isEmpty(id) && table.options.type == table_type.bootstrapTreeTable) {
var row = $("#" + table.options.id).bootstrapTreeTable('getSelections')[0];
if ($.common.isEmpty(row)) {
$.modal.alertWarning("请至少选择一条记录");
@ -1172,7 +1187,7 @@ var table = {
if ($.common.isNotEmpty(id)) {
url = table.options.updateUrl.replace("{id}", id);
} else {
if(table.options.type == table_type.bootstrapTreeTable) {
if (table.options.type == table_type.bootstrapTreeTable) {
var row = $("#" + table.options.id).bootstrapTreeTable('getSelections')[0];
if ($.common.isEmpty(row)) {
$.modal.alertWarning("请至少选择一条记录");
@ -1201,6 +1216,12 @@ var table = {
}
return url;
},
// 右侧弹出详情
view: function(id){
table.set();
var url = table.options.viewUrl.replace("{id}", id);
$.modal.popupRight(table.options.modalName + "信息详情", url);
},
// 保存信息 刷新表格
save: function(url, data, callback) {
var config = {
@ -1298,7 +1319,7 @@ var table = {
successCallback: function(result) {
if (result.code == web_status.SUCCESS) {
var parent = activeWindow();
if($.common.isEmpty(parent.table)) {
if ($.common.isEmpty(parent.table)) {
$.modal.msgSuccessReload(result.msg);
} else if (parent.table.options.type == table_type.bootstrapTable) {
$.modal.close();
@ -1322,15 +1343,20 @@ var table = {
if (result.code == web_status.SUCCESS) {
var topWindow = $(window.parent.document);
var currentId = $('.page-tabs-content', topWindow).find('.active').attr('data-panel');
var $contentWindow = $('.RuoYi_iframe[data-id="' + currentId + '"]', topWindow)[0].contentWindow;
$.modal.close();
$contentWindow.$.modal.msgSuccess(result.msg);
$contentWindow.$(".layui-layer-padding").removeAttr("style");
if ($contentWindow.table.options.type == table_type.bootstrapTable) {
$contentWindow.$.table.refresh();
} else if ($contentWindow.table.options.type == table_type.bootstrapTreeTable) {
$contentWindow.$.treeTable.refresh();
var topWindow = $('.RuoYi_iframe[data-id="' + currentId + '"]', topWindow)[0];
if ($.common.isNotEmpty(topWindow) && $.common.isNotEmpty(currentId)) {
var $contentWindow = topWindow.contentWindow;
$contentWindow.$.modal.msgSuccess(result.msg);
$contentWindow.$(".layui-layer-padding").removeAttr("style");
if ($contentWindow.table.options.type == table_type.bootstrapTable) {
$contentWindow.$.table.refresh();
} else if ($contentWindow.table.options.type == table_type.bootstrapTreeTable) {
$contentWindow.$.treeTable.refresh();
}
} else {
$.modal.msgSuccess(result.msg);
}
$.modal.close();
$.modal.closeTab();
} else if (result.code == web_status.WARNING) {
$.modal.alertWarning(result.msg)
@ -1342,13 +1368,6 @@ var table = {
},
// 校验封装处理
validate: {
// 判断返回标识是否唯一 false 为存在 true 为不存在
unique: function (value) {
if (value == "0") {
return true;
}
return false;
},
// 表单验证
form: function (formId) {
var currentId = $.common.isEmpty(formId) ? $('form').attr('id') : formId;
@ -1413,7 +1432,7 @@ var table = {
var node = tree.getNodesByParam("id", treeId, null)[0];
$.tree.selectByIdName(treeId, node);
// 回调tree方法
if(typeof(options.callBack) === "function"){
if (typeof(options.callBack) === "function"){
options.callBack(tree);
}
});
@ -1502,7 +1521,7 @@ var table = {
// 不允许根父节点选择
notAllowParents: function(_tree) {
var nodes = _tree.getSelectedNodes();
if(nodes.length == 0){
if (nodes.length == 0){
$.modal.msgError("请选择节点后提交");
return false;
}
@ -1558,6 +1577,10 @@ var table = {
isNotEmpty: function (value) {
return !$.common.isEmpty(value);
},
// 如果值是空,则返回指定默认字符串,否则返回字符串本身
nullToDefault: function (value, defaultValue) {
return $.common.isEmpty(value) ? defaultValue : value;
},
// 空对象转字符串
nullToStr: function(value) {
if ($.common.isEmpty(value)) {
@ -1690,7 +1713,7 @@ var table = {
formToJSON: function(formId) {
var json = {};
$.each($("#" + formId).serializeArray(), function(i, field) {
if(json[field.name]) {
if (json[field.name]) {
json[field.name] += ("," + field.value);
} else {
json[field.name] = field.value;

View File

@ -8,18 +8,15 @@ $(function() {
});
});
$.validator.setDefaults({
submitHandler: function() {
login();
}
});
function login() {
$.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();
var rememberMe = $("input[name='rememberme']").is(':checked');
if($.common.isEmpty(validateCode) && captchaEnabled) {
$.modal.msg("请输入验证码");
return false;
}
$.ajax({
type: "post",
url: ctx + "login",
@ -29,13 +26,16 @@ function login() {
"validateCode": validateCode,
"rememberMe": rememberMe
},
beforeSend: function () {
$.modal.loading($("#btnSubmit").data("loading"));
},
success: function(r) {
if (r.code == web_status.SUCCESS) {
location.href = ctx + 'index';
} else {
$('.imgcode').click();
$(".code").val("");
$.modal.msg(r.msg);
$('.imgcode').click();
$(".code").val("");
$.modal.msg(r.msg);
}
$.modal.closeLoading();
}
@ -60,6 +60,9 @@ function validateRule() {
password: {
required: icon + "请输入您的密码",
}
},
submitHandler: function(form) {
login();
}
})
}

View File

@ -7,17 +7,14 @@ $(function() {
});
});
$.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();
if($.common.isEmpty(validateCode) && captchaEnabled) {
$.modal.msg("请输入验证码");
return false;
}
$.ajax({
type: "post",
url: ctx + "register",
@ -26,6 +23,9 @@ function register() {
"password": password,
"validateCode": validateCode
},
beforeSend: function () {
$.modal.loading($("#btnSubmit").data("loading"));
},
success: function(r) {
if (r.code == web_status.SUCCESS) {
layer.alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", {
@ -57,7 +57,8 @@ function validateRule() {
},
password: {
required: true,
minlength: 5
minlength: 5,
specialSign: true
},
confirmPassword: {
required: true,
@ -77,6 +78,9 @@ function validateRule() {
required: icon + "请再次输入您的密码",
equalTo: icon + "两次密码输入不一致"
}
},
submitHandler: function(form) {
register();
}
})
}

View File

@ -14,13 +14,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项2</a>
</li>
</ul>
<a class="close-link">
@ -54,7 +54,7 @@
<h4>还不是会员?</h4>
<p>您可以注册一个新账户</p>
<p class="text-center">
<a href="#"><i class="fa fa-sign-in big-icon"></i></a>
<a href="javascript:;"><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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项2</a>
</li>
</ul>
<a class="close-link">
@ -191,13 +191,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项2</a>
</li>
<li><a href="#">选项3</a>
<li><a href="javascript:;">选项3</a>
</li>
<li class="divider"></li>
<li><a href="#">选项4</a>
<li><a href="javascript:;">选项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="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项2</a>
</li>
<li><a href="#">选项3</a>
<li><a href="javascript:;">选项3</a>
</li>
<li class="divider"></li>
<li><a href="#">选项4</a>
<li><a href="javascript:;">选项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="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项2</a>
</li>
<li><a href="#">选项3</a>
<li><a href="javascript:;">选项3</a>
</li>
<li class="divider"></li>
<li><a href="#">选项4</a>
<li><a href="javascript:;">选项4</a>
</li>
</ul>
</div>
@ -580,7 +580,7 @@
<h4>还不是会员?</h4>
<p>您可以注册一个账户</p>
<p class="text-center">
<a href="#"><i class="fa fa-sign-in big-icon"></i></a>
<a href="javascript:;"><i class="fa fa-sign-in big-icon"></i></a>
</p>
</div>
</div>

View File

@ -13,13 +13,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">置顶</a>
<li><a href="javascript:;">置顶</a>
</li>
<li><a href="#" class="font-bold">修改</a>
<li><a href="javascript:;" class="font-bold">修改</a>
</li>
<li><a href="#">禁用</a>
<li><a href="javascript:;">禁用</a>
</li>
<li class="divider"></li>
<li><a href="#">删除</a>
<li><a href="javascript:;">删除</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="#">置顶</a>
<li><a href="javascript:;">置顶</a>
</li>
<li><a href="#">修改</a>
<li><a href="javascript:;">修改</a>
</li>
<li><a href="#">禁用</a>
<li><a href="javascript:;">禁用</a>
</li>
<li class="divider"></li>
<li><a href="#">删除</a>
<li><a href="javascript:;">删除</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="#">置顶</a>
<li><a href="javascript:;">置顶</a>
</li>
<li><a href="#" class="font-bold">修改</a>
<li><a href="javascript:;" class="font-bold">修改</a>
</li>
<li><a href="#">禁用</a>
<li><a href="javascript:;">禁用</a>
</li>
<li class="divider"></li>
<li><a href="#">删除</a>
<li><a href="javascript:;">删除</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="#">置顶</a>
<li><a href="javascript:;">置顶</a>
</li>
<li><a href="#" class="font-bold">修改</a>
<li><a href="javascript:;" class="font-bold">修改</a>
</li>
<li><a href="#">禁用</a>
<li><a href="javascript:;">禁用</a>
</li>
<li class="divider"></li>
<li><a href="#">删除</a>
<li><a href="javascript:;">删除</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="#">置顶</a>
<li><a href="javascript:;">置顶</a>
</li>
<li><a href="#" class="font-bold">修改</a>
<li><a href="javascript:;" class="font-bold">修改</a>
</li>
<li><a href="#">禁用</a>
<li><a href="javascript:;">禁用</a>
</li>
<li class="divider"></li>
<li><a href="#">删除</a>
<li><a href="javascript:;">删除</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="#">置顶</a>
<li><a href="javascript:;">置顶</a>
</li>
<li><a href="#" class="font-bold">修改</a>
<li><a href="javascript:;" class="font-bold">修改</a>
</li>
<li><a href="#">禁用</a>
<li><a href="javascript:;">禁用</a>
</li>
<li class="divider"></li>
<li><a href="#">删除</a>
<li><a href="javascript:;">删除</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="#">置顶</a>
<li><a href="javascript:;">置顶</a>
</li>
<li><a href="#" class="font-bold">修改</a>
<li><a href="javascript:;" class="font-bold">修改</a>
</li>
<li><a href="#">禁用</a>
<li><a href="javascript:;">禁用</a>
</li>
<li class="divider"></li>
<li><a href="#">删除</a>
<li><a href="javascript:;">删除</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="#">置顶</a>
<li><a href="javascript:;">置顶</a>
</li>
<li><a href="#" class="font-bold">修改</a>
<li><a href="javascript:;" class="font-bold">修改</a>
</li>
<li><a href="#">禁用</a>
<li><a href="javascript:;">禁用</a>
</li>
<li class="divider"></li>
<li><a href="#">删除</a>
<li><a href="javascript:;">删除</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="#">置顶</a>
<li><a href="javascript:;">置顶</a>
</li>
<li><a href="#" class="font-bold">修改</a>
<li><a href="javascript:;" class="font-bold">修改</a>
</li>
<li><a href="#">禁用</a>
<li><a href="javascript:;">禁用</a>
</li>
<li class="divider"></li>
<li><a href="#">删除</a>
<li><a href="javascript:;">删除</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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">默认</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>
<a class="btn btn-default btn-rounded" href="javascript:;">默认</a>
<a class="btn btn-primary btn-rounded" href="javascript:;">主要</a>
<a class="btn btn-success btn-rounded" href="javascript:;">成果</a>
<a class="btn btn-info btn-rounded" href="javascript:;">信息</a>
<a class="btn btn-warning btn-rounded" href="javascript:;">警告</a>
<a class="btn btn-danger btn-rounded" href="javascript:;">危险</a>
<a class="btn btn-danger btn-rounded btn-outline" href="javascript:;">危险</a>
<br/>
<br/>
<a class="btn btn-primary btn-rounded btn-block" href="#"><i class="fa fa-info-circle"></i> 圆角块级带图标按钮</a>
<a class="btn btn-primary btn-rounded btn-block" href="javascript:;"><i class="fa fa-info-circle"></i> 圆角块级带图标按钮</a>
</p>
</div>
</div>

View File

@ -14,13 +14,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项2</a>
</li>
</ul>
<a class="close-link">
@ -315,13 +315,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项2</a>
</li>
</ul>
<a class="close-link">

View File

@ -19,7 +19,7 @@
<div class="fileinput fileinput-new input-group" data-provides="fileinput">
<div class="form-control" data-trigger="fileinput"><i class="glyphicon glyphicon-file fileinput-exists"></i> <span class="fileinput-filename"></span></div>
<span class="input-group-addon btn btn-white btn-file"><span class="fileinput-new">选择文件</span><span class="fileinput-exists">更改</span><input type="file"></span>
<a href="#" class="input-group-addon btn btn-white fileinput-exists" data-dismiss="fileinput">清除</a>
<a href="javascript:;" class="input-group-addon btn btn-white fileinput-exists" data-dismiss="fileinput">清除</a>
</div>
</div>
@ -29,7 +29,7 @@
<div class="fileinput fileinput-new" data-provides="fileinput">
<span class="btn btn-white btn-file"><span class="fileinput-new">选择文件</span><span class="fileinput-exists">更改</span><input type="file" name="..."></span>
<span class="fileinput-filename"></span>
<a href="#" class="close fileinput-exists" data-dismiss="fileinput" style="float: none">&times;</a>
<a href="javascript:;" class="close fileinput-exists" data-dismiss="fileinput" style="float: none">&times;</a>
</div>
</div>
@ -40,7 +40,7 @@
<div class="fileinput-preview thumbnail" data-trigger="fileinput" style="width: 200px; height: 150px;"></div>
<div>
<span class="btn btn-white btn-file"><span class="fileinput-new">选择图片</span><span class="fileinput-exists">更改</span><input type="file"></span>
<a href="#" class="btn btn-white fileinput-exists" data-dismiss="fileinput">清除</a>
<a href="javascript:;" class="btn btn-white fileinput-exists" data-dismiss="fileinput">清除</a>
</div>
</div>
</div>
@ -55,7 +55,7 @@
<div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px;"></div>
<div>
<span class="btn btn-white btn-file"><span class="fileinput-new">选择图片</span><span class="fileinput-exists">更改</span><input type="file"></span>
<a href="#" class="btn btn-white fileinput-exists" data-dismiss="fileinput">清除</a>
<a href="javascript:;" class="btn btn-white fileinput-exists" data-dismiss="fileinput">清除</a>
</div>
</div>
</div>

View File

@ -14,13 +14,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项2</a>
</li>
</ul>
<a class="close-link">
@ -100,13 +100,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项2</a>
</li>
</ul>
<a class="close-link">
@ -116,16 +116,16 @@
</div>
<div class="ibox-content">
<div class="alert alert-success">
RuoYi是一个很棒的后台UI框架 <a class="alert-link" href="#">了解更多</a>.
RuoYi是一个很棒的后台UI框架 <a class="alert-link" href="javascript:;">了解更多</a>.
</div>
<div class="alert alert-info">
RuoYi是一个很棒的后台UI框架 <a class="alert-link" href="#">了解更多</a>.
RuoYi是一个很棒的后台UI框架 <a class="alert-link" href="javascript:;">了解更多</a>.
</div>
<div class="alert alert-warning">
RuoYi是一个很棒的后台UI框架 <a class="alert-link" href="#">了解更多</a>.
RuoYi是一个很棒的后台UI框架 <a class="alert-link" href="javascript:;">了解更多</a>.
</div>
<div class="alert alert-danger">
RuoYi是一个很棒的后台UI框架 <a class="alert-link" href="#">了解更多</a>.
RuoYi是一个很棒的后台UI框架 <a class="alert-link" href="javascript:;">了解更多</a>.
</div>
</div>
</div>
@ -138,13 +138,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项2</a>
</li>
</ul>
<a class="close-link">
@ -155,19 +155,19 @@
<div class="ibox-content">
<div class="alert alert-success alert-dismissable">
<button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
RuoYi是一个很棒的后台UI框架 <a class="alert-link" href="#">了解更多</a>.
RuoYi是一个很棒的后台UI框架 <a class="alert-link" href="javascript:;">了解更多</a>.
</div>
<div class="alert alert-info alert-dismissable">
<button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
RuoYi是一个很棒的后台UI框架 <a class="alert-link" href="#">了解更多</a>.
RuoYi是一个很棒的后台UI框架 <a class="alert-link" href="javascript:;">了解更多</a>.
</div>
<div class="alert alert-warning alert-dismissable">
<button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
RuoYi是一个很棒的后台UI框架 <a class="alert-link" href="#">了解更多</a>.
RuoYi是一个很棒的后台UI框架 <a class="alert-link" href="javascript:;">了解更多</a>.
</div>
<div class="alert alert-danger alert-dismissable">
<button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
RuoYi是一个很棒的后台UI框架 <a class="alert-link" href="#">了解更多</a>.
RuoYi是一个很棒的后台UI框架 <a class="alert-link" href="javascript:;">了解更多</a>.
</div>
</div>
</div>
@ -183,13 +183,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项2</a>
</li>
</ul>
<a class="close-link">

View File

@ -29,7 +29,7 @@
<li th:if="${tasks != null}" th:each="item : ${tasks}" class="warning-element">
[[${item.name}]]
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-white">[[${item.type}]]</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-white">[[${item.type}]]</a>
<i class="fa fa-clock-o"></i>
[[${item.date}]]
</div>

View File

@ -14,13 +14,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项2</a>
</li>
</ul>
<a class="close-link">

View File

@ -91,7 +91,7 @@
</div>
<div class="form-group">
<label class="font-noraml">分组</label>
<label class="font-noraml">分组</label>
<select class="form-control noselect2 selectpicker">
<optgroup label="--请选择开发语言--">
<option value="Java">Java</option>

View File

@ -23,56 +23,56 @@
<li class="warning-element">
加强过程管理,及时统计教育经费使用情况,做到底码清楚,
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-white">标签</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-white">标签</a>
<i class="fa fa-clock-o"></i> 2018.09.01
</div>
</li>
<li class="success-element">
支持财会人员的继续培训工作。
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-white">标记</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-white">标记</a>
<i class="fa fa-clock-o"></i> 2018.05.12
</div>
</li>
<li class="info-element">
协同教导处搞好助学金、减免教科书费的工作。
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-white">标记</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-white">标记</a>
<i class="fa fa-clock-o"></i> 2018.09.10
</div>
</li>
<li class="danger-element">
要求会计、出纳人员严格执行财务制度,遵守岗位职责,按时上报各种资料。
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-primary">确定</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-primary">确定</a>
<i class="fa fa-clock-o"></i> 2018.06.10
</div>
</li>
<li class="warning-element">
做好职工公费医疗工作,按时发放门诊费。
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-white">标签</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-white">标签</a>
<i class="fa fa-clock-o"></i> 2018.09.09
</div>
</li>
<li class="warning-element">
有计划地把课本复习三至五遍。
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-primary">确定</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-primary">确定</a>
<i class="fa fa-clock-o"></i> 2018.08.04
</div>
</li>
<li class="success-element">
看一本高质量的高中语法书
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-white">标记</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-white">标记</a>
<i class="fa fa-clock-o"></i> 2018.05.12
</div>
</li>
<li class="info-element">
选择一份较好的英语报纸,通过阅读提高英语学习效果。
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-white">标记</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-white">标记</a>
<i class="fa fa-clock-o"></i> 2018.09.10
</div>
</li>
@ -89,49 +89,49 @@
<li class="success-element">
全面、较深入地掌握我们“产品”的功能、特色和优势并做到应用自如。
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-white">标签</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-white">标签</a>
<i class="fa fa-clock-o"></i> 2018.09.01
</div>
</li>
<li class="success-element">
根据自己以前所了解的和从其他途径搜索到的信息录入客户资料150家。
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-white">标记</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-white">标记</a>
<i class="fa fa-clock-o"></i> 2018.05.12
</div>
</li>
<li class="warning-element">
锁定有意向客户20家。
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-white">标记</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-white">标记</a>
<i class="fa fa-clock-o"></i> 2018.09.10
</div>
</li>
<li class="warning-element">
力争完成销售指标。
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-white">标签</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-white">标签</a>
<i class="fa fa-clock-o"></i> 2018.09.09
</div>
</li>
<li class="info-element">
在总结和摸索中前进。
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-primary">确定</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-primary">确定</a>
<i class="fa fa-clock-o"></i> 2018.08.04
</div>
</li>
<li class="success-element">
不断学习行业知识、产品知识,为客户带来实用介绍内容
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-white">标记</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-white">标记</a>
<i class="fa fa-clock-o"></i> 2018.05.12
</div>
</li>
<li class="danger-element">
先友后单:与客户发展良好友谊,转换销售员角色,处处为客户着想
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-white">标记</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-white">标记</a>
<i class="fa fa-clock-o"></i> 2018.11.04
</div>
</li>
@ -148,35 +148,35 @@
<li class="info-element">
制定工作日程表
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-white">标记</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-white">标记</a>
<i class="fa fa-clock-o"></i> 2018.09.10
</div>
</li>
<li class="warning-element">
每天坚持打40个有效电话挖掘潜在客户
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-white">标签</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-white">标签</a>
<i class="fa fa-clock-o"></i> 2018.09.09
</div>
</li>
<li class="warning-element">
拜访客户之前要对该客户做全面的了解(客户的潜在需求、职位、权限以及个人性格和爱好)
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-white">标签</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-white">标签</a>
<i class="fa fa-clock-o"></i> 2018.09.09
</div>
</li>
<li class="warning-element">
提高自己电话营销技巧,灵活专业地与客户进行电话交流
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-primary">确定</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-primary">确定</a>
<i class="fa fa-clock-o"></i> 2018.08.04
</div>
</li>
<li class="success-element">
通过电话销售过程中了解各盛市的设备仪器使用、采购情况及相关重要追踪人
<div class="agile-detail">
<a href="#" class="pull-right btn btn-xs btn-white">标记</a>
<a href="javascript:;" class="pull-right btn btn-xs btn-white">标记</a>
<i class="fa fa-clock-o"></i> 2018.05.12
</div>
</li>

View File

@ -17,7 +17,7 @@
<h2>若依后台管理系统</h2>
<p>ruoyi是一个完全响应式基于Bootstrap3.3.7最新版本开发的扁平化主题她采用了主流的左右两栏式布局使用了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.7.5
<b>当前版本:</b>v4.7.9
</p>
<p>
<span class="label label-warning">免费开源</span>
@ -56,7 +56,7 @@
<h3>你好,若依 </h3>
<p>H+是一个完全响应式基于Bootstrap3.3.7最新版本开发的扁平化主题她采用了主流的左右两栏式布局使用了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.7.5
<b>当前版本:</b>v4.7.9
</p>
<p>
<span class="label label-warning">开源免费</span>

View File

@ -14,13 +14,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项2</a>
</li>
</ul>
<a class="close-link">
@ -273,13 +273,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项2</a>
</li>
</ul>
<a class="close-link">

View File

@ -14,8 +14,8 @@
<div class="ibox float-e-margins">
<div class="text-center float-e-margins p-md">
<span>打开/关闭颜色/背景或方向版本: </span>
<a href="#" class="btn btn-xs btn-primary" id="lightVersion">轻型版本 </a>
<a href="#" class="btn btn-xs btn-primary" id="darkVersion">黑色版本 </a>
<a href="javascript:;" class="btn btn-xs btn-primary" id="lightVersion">轻型版本 </a>
<a href="javascript:;" class="btn btn-xs btn-primary" id="darkVersion">黑色版本 </a>
</div>
<div id="ibox-content">
<div id="vertical-timeline" class="vertical-container light-timeline">
@ -28,7 +28,7 @@
<h2>会议</h2>
<p>上一年的销售业绩发布会。总结产品营销和销售趋势及销售的现状。
</p>
<a href="#" class="btn btn-sm btn-primary"> 更多信息</a>
<a href="javascript:;" class="btn btn-sm btn-primary"> 更多信息</a>
<span class="vertical-date">
今天 <br>
<small>2月3日</small>
@ -44,7 +44,7 @@
<div class="vertical-timeline-content">
<h2>给张三发送文档</h2>
<p>发送上年度《销售业绩报告》</p>
<a href="#" class="btn btn-sm btn-success"> 下载文档 </a>
<a href="javascript:;" class="btn btn-sm btn-success"> 下载文档 </a>
<span class="vertical-date">
今天 <br>
<small>2月3日</small>
@ -60,7 +60,7 @@
<div class="vertical-timeline-content">
<h2>喝咖啡休息</h2>
<p>喝咖啡啦,啦啦啦~~</p>
<a href="#" class="btn btn-sm btn-info">更多</a>
<a href="javascript:;" class="btn btn-sm btn-info">更多</a>
<span class="vertical-date"> 昨天 <br><small>2月2日</small></span>
</div>
</div>

View File

@ -181,7 +181,7 @@ $('#smartwizard').smartWizard({
enableURLhash: true, // Enable selection of the step based on url hash
transition: {
animation: 'none', // Effect on navigation, none/fade/slide-horizontal/slide-vertical/slide-swing
speed: '400', // Transion animation speed
speed: '400', // Transition animation speed
easing:'' // Transition animation easing. Not supported without a jQuery easing plugin
},
toolbarSettings: {

View File

@ -19,13 +19,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项2</a>
</li>
</ul>
<a class="close-link">

View File

@ -137,7 +137,7 @@
</div>
</div>
<th:block th:include="include :: footer" />
<script type="text/javascript">
<script th:inline="javascript">
var prefix = ctx + "demo/modal";
$("#button-confirm").click(function(){
@ -266,14 +266,14 @@
{
"alt": "默认头像",
"pid": 1, //图片id
"src": "/img/profile.jpg", //原图地址
"thumb": "/img/profile.jpg" //缩略图地址
"src": ctx + "img/profile.jpg", //原图地址
"thumb": ctx + "img/profile.jpg" //缩略图地址
},
{
"alt": "打赏",
"pid": 2, //图片id
"src": "/img/pay.png", //原图地址
"thumb": "/img/pay.png" //缩略图地址
"src": ctx + "img/pay.png", //原图地址
"thumb": ctx + "img/pay.png" //缩略图地址
}
]
};

View File

@ -63,8 +63,8 @@
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>');
actions.push('<a class="btn btn-success btn-xs" href="javascript:;"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs" href="javascript:;"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]

View File

@ -64,8 +64,8 @@
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>');
actions.push('<a class="btn btn-success btn-xs" href="javascript:;"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs" href="javascript:;"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]

View File

@ -63,8 +63,8 @@
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>');
actions.push('<a class="btn btn-success btn-xs" href="javascript:;"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs" href="javascript:;"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]

View File

@ -96,9 +96,9 @@
align: 'center',
formatter: function(value, row, index) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs" href="#" onclick="$.operate.edit(\'' + row.userId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-info btn-xs" href="#" onclick="$.operate.detail(\'' + row.userId + '\')"><i class="fa fa-search"></i>详细</a> ');
actions.push('<a class="btn btn-danger btn-xs" href="#" onclick="$.operate.remove(\'' + row.userId + '\')"><i class="fa fa-remove"></i>删除</a>');
actions.push('<a class="btn btn-success btn-xs" href="javascript:;" onclick="$.operate.edit(\'' + row.userId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-info btn-xs" href="javascript:;" onclick="$.operate.detail(\'' + row.userId + '\')"><i class="fa fa-search"></i>详细</a> ');
actions.push('<a class="btn btn-danger btn-xs" href="javascript:;" onclick="$.operate.remove(\'' + row.userId + '\')"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]

View File

@ -23,13 +23,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项2</a>
</li>
</ul>
<a class="close-link">

View File

@ -98,13 +98,13 @@
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项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="#">
<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:;">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
<li><a href="javascript:;">选项1</a>
</li>
<li><a href="#">选项2</a>
<li><a href="javascript:;">选项2</a>
</li>
</ul>
<a class="close-link">

View File

@ -79,8 +79,8 @@
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>');
actions.push('<a class="btn btn-success btn-xs" href="javascript:;"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs" href="javascript:;"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]

View File

@ -70,8 +70,8 @@
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>');
actions.push('<a class="btn btn-success btn-xs" href="javascript:;"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs" href="javascript:;"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]

View File

@ -0,0 +1,78 @@
<!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('表格保存状态')" />
</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" data-cookie="true" data-cookie-id-table="userTableId"></table>
</div>
</div>
</div>
<div th:include="include :: footer"></div>
<th:block th:include="include :: bootstrap-table-cookie-js" />
<script th:inline="javascript">
var prefix = ctx + "demo/table";
var datas = [[${@dict.getType('sys_normal_disable')}]];
$(function() {
var options = {
url: prefix + "/list",
search: true,
showSearch: false,
showRefresh: false,
showToggle: false,
columns: [{
field: 'state',
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="javascript:;"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs" href="javascript:;"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]
};
$.table.init(options);
});
</script>
</body>
</html>

View File

@ -9,7 +9,7 @@
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table" data-page-size="10"
data-show-custom-view="true" data-custom-view="customViewFormatter"
data-show-custom-view-button="true">
data-custom-view-default-view="true">
</table>
</div>
</div>
@ -94,8 +94,8 @@
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>');
actions.push('<a class="btn btn-success btn-xs" href="javascript:;"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs" href="javascript:;"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]

View File

@ -63,8 +63,8 @@
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>');
actions.push('<a class="btn btn-success btn-xs" href="javascript:;"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs" href="javascript:;"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]

View File

@ -65,8 +65,8 @@
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>');
actions.push('<a class="btn btn-success btn-xs" href="javascript:;"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs" href="javascript:;"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]

View File

@ -79,8 +79,8 @@
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>');
actions.push('<a class="btn btn-success btn-xs" href="javascript:;"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs" href="javascript:;"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
});

View File

@ -99,8 +99,8 @@
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>');
actions.push('<a class="btn btn-success btn-xs" href="javascript:;"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs" href="javascript:;"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]

View File

@ -74,8 +74,8 @@
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>');
actions.push('<a class="btn btn-success btn-xs" href="javascript:;"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs" href="javascript:;"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]

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