Compare commits

..

194 Commits

Author SHA1 Message Date
thinkgem
b8162c5d69 update 2022-06-30 17:58:16 +08:00
thinkgem
dce899c3f4 laydate lang 2022-06-30 17:56:19 +08:00
thinkgem
26d8ae7486 Merge branch 'v5.temp' into v5.0_dev
# Conflicts:
#	modules/core/src/main/java/com/jeesite/modules/sys/web/LoginController.java
2022-06-27 11:25:34 +08:00
thinkgem
4c26dd9abf 机构类型条件按需添加 2022-06-27 08:46:44 +08:00
thinkgem
67063a6dd7 增加微服务模块代码生成的启动脚本 2022-06-24 09:52:40 +08:00
thinkgem
0a123a137b update 2022-06-21 09:25:41 +08:00
thinkgem
8c7540f838 update 2022-06-21 09:25:18 +08:00
thinkgem
a9e728f3a6 省去设置一些IDE警告 2022-06-16 15:02:06 +08:00
thinkgem
6a2655b7e1 去掉类上的事务注解 2022-06-06 23:51:40 +08:00
thinkgem
7a4499640c 新增DAO批量更新语句,动态ExecutorType指定,新增 defaultBatchSize 批量分批默认大小设定 2022-06-06 23:41:05 +08:00
thinkgem
e03991b347 本地分页代码优化,如果总共就1页,则直接返回。 2022-06-06 11:39:28 +08:00
thinkgem
f470fcfdfd update 2022-06-06 11:36:46 +08:00
thinkgem
208fbb7320 黑暗主题优化 2022-06-02 22:41:54 +08:00
thinkgem
9dc50ca0d9 登录页增加黑暗主题切换 2022-05-31 16:18:06 +08:00
thinkgem
1e21b15201 升级 shardingsphere 5.1.1 2022-05-31 15:39:52 +08:00
thinkgem
5f61c98b49 保持shardingsphere属性key 2022-05-31 12:05:19 +08:00
thinkgem
63dc0f8935 增加smtpPort 2022-05-31 11:24:37 +08:00
thinkgem
6e0632b694 新增黑暗主题 2022-05-27 15:29:34 +08:00
thinkgem
5090fd0d44 优化mime获取,优化因第三方包里包含mine.types导致加载不正确 2022-05-26 10:24:47 +08:00
thinkgem
109919d715 update 2022-05-26 10:18:42 +08:00
thinkgem
02c635c8af update 2022-05-26 10:18:04 +08:00
thinkgem
21a94f701d update 2022-05-24 22:27:56 +08:00
thinkgem
9f2f393d3f 添加@Api中文注释 2022-05-24 22:27:36 +08:00
thinkgem
8fd22731f8 update 2022-05-24 21:11:36 +08:00
卓源软件
0c477d19df 已经登录的账号,正常返回登录失败信息,方便前端判断 2022-05-18 12:35:25 +00:00
thinkgem
d19d9f0bfe 已经登录的账号,正常返回登录失败信息,方便前端判断 2022-05-18 19:57:17 +08:00
thinkgem
a99b658ba7 update script 2022-05-18 09:07:18 +08:00
thinkgem
630af59c3b 新增顶部菜单自动折叠到更多下拉菜单 2022-05-17 12:02:11 +08:00
thinkgem
441fea32fb DiffDataUtils 差异比较工具,新增 DiffOptions 差异比较选项,自定义包含和排除等设置 2022-05-15 11:43:09 +08:00
卓源软件
cb8a4d2f73 增加分离端接口需要的数据 2022-05-14 01:38:26 +00:00
thinkgem
f5031e51ac 增加返回给分离端一些需要的参数数据 2022-05-13 18:26:00 +08:00
thinkgem
0840bb590d update 2022-05-13 18:25:13 +08:00
thinkgem
42341583ed 切换租户条件改为权限方式,有租户管理权限的既有切换租户权限 2022-05-13 18:24:22 +08:00
thinkgem
ab1f973765 update 2022-05-09 11:57:20 +08:00
thinkgem
4ae255ae45 mybatis spring 2.0.7 2022-05-08 16:20:26 +08:00
thinkgem
22751ae9e8 代码优化 2022-05-08 16:20:10 +08:00
thinkgem
4154cc5328 Dao接口增加条件开关注解,增加 user.enabled 开关用户角色菜单相关功能 2022-05-07 14:00:38 +08:00
thinkgem
edd04b116b 细节优化 2022-05-06 14:12:53 +08:00
thinkgem
d8138e7098 update README.md 2022-05-06 09:07:53 +08:00
thinkgem
c0078030f4 update 2022-05-05 20:00:01 +08:00
thinkgem
faa2cdb3b3 root pom 2022-05-05 17:14:14 +08:00
thinkgem
537ed1f0ea 移除空白元素 2022-05-05 13:52:49 +08:00
thinkgem
a516967393 spring boot 2.5.13 shiro 1.9.0 等等 2022-05-05 12:08:03 +08:00
thinkgem
39d42657e4 update log 2022-05-05 11:47:34 +08:00
thinkgem
9d295eda35 点击右上角【Star】收藏本软件 ^_^ 2022-05-03 23:58:57 +08:00
thinkgem
7484c990d7 在线用户根据用户名排序 2022-05-01 23:38:42 +08:00
thinkgem
b704cdc55b 搜索框切换状态后立即查询,不用点击查询按钮 2022-05-01 23:37:39 +08:00
thinkgem
b16d6bd4bd maven plugin update 2022-04-30 11:16:41 +08:00
thinkgem
858b04ff75 系统管理员 to 租户管理员 2022-04-29 15:11:03 +08:00
thinkgem
c5eded94c0 提交的数据 to 请求数据 2022-04-28 22:14:48 +08:00
thinkgem
5c39029c62 ie下缓存问题 2022-04-26 15:07:23 +08:00
thinkgem
c06e83f3b2 租户模式初始化库程序优化 2022-04-26 12:57:41 +08:00
thinkgem
91f41a886f servlet-api to common 2022-04-26 10:44:44 +08:00
thinkgem
6dce23a32f 配置参数和脚本优化 2022-04-24 22:16:16 +08:00
thinkgem
93a09be05d 新增H2数据库快速体验项目 2022-04-24 12:09:56 +08:00
thinkgem
07e705fee7 docker脚本优化 2022-04-24 11:36:38 +08:00
thinkgem
a612ce1acb ApiApplication 2022-04-24 11:35:10 +08:00
thinkgem
401f5d0efd 补充Cloud的Docker代码生成脚本 2022-04-24 11:33:59 +08:00
thinkgem
46f508ea38 访问日志输出优化 2022-04-24 11:29:32 +08:00
thinkgem
6257b8ace7 日志输出信息优化 2022-04-23 00:09:49 +08:00
thinkgem
b31364a794 TimeUtils 新增多语言参数,formatDateAgo 重命名为 formatTime 2022-04-22 19:22:52 +08:00
thinkgem
a0d6ef9097 代码优化 2022-04-21 23:12:20 +08:00
thinkgem
ddc67f0189 update 2022-04-21 18:52:40 +08:00
thinkgem
1cbb9c8c4f update 2022-04-21 18:51:18 +08:00
thinkgem
0bcf6e8921 优化参数配置 2022-04-19 20:47:53 +08:00
thinkgem
318c751ec2 docker 2022-04-19 18:28:40 +08:00
thinkgem
5398f57fe1 新增是否启用默认 Servlet 映射(启用后可访问 webapp 下的静态资源) 2022-04-19 11:12:30 +08:00
thinkgem
1054c544bf update README.md 2022-04-18 17:07:50 +08:00
thinkgem
8ff65b3b26 update 2022-04-18 17:07:23 +08:00
thinkgem
1e8f06c019 bulid -> build 2022-04-18 11:13:48 +08:00
thinkgem
320f891278 remove map file 2022-04-15 17:34:16 +08:00
thinkgem
4163d48838 支持springboot带减号的key写法,自动转换为驼峰格式。 2022-04-13 20:43:26 +08:00
thinkgem
35834e1e8d 无数据源的情况下忽略 2022-04-11 10:32:29 +08:00
thinkgem
3d3ec2a152 5.0.2 2022-04-11 10:30:20 +08:00
thinkgem
627cd062c6 spring boot 2.5.12 2022-04-01 11:26:46 +08:00
thinkgem
d5098e7ed2 update 2022-03-31 20:50:26 +08:00
thinkgem
f1317888fb 新增vue的bpm生成模板 2022-03-30 16:08:38 +08:00
thinkgem
e4b2866c4d spring boot 2.5.11 2022-03-29 22:04:07 +08:00
thinkgem
efab785f1b 弹窗美化 2022-03-29 22:03:47 +08:00
thinkgem
a5ce5cd56b update 2022-03-25 13:52:28 +08:00
thinkgem
e6b69fa5e0 update 2022-03-21 10:39:30 +08:00
thinkgem
032d6a525a 增加一些线程池个性化参数 2022-03-20 14:41:29 +08:00
thinkgem
2a02d43c05 多线程优化为线程池 2022-03-20 14:30:20 +08:00
thinkgem
c0a7443ede update readme 2022-03-17 09:41:06 +08:00
thinkgem
d7608663db shiro.sso.encryptKeyDateFormat 2022-03-16 15:24:51 +08:00
thinkgem
e3bafc4ac8 update 2022-03-16 14:27:45 +08:00
thinkgem
0b1cfba5c3 script update 2022-03-15 21:40:25 +08:00
thinkgem
f27728a647 update 2022-03-14 11:37:28 +08:00
thinkgem
bfcc0a8a97 新增属性获取 getPropertyToLong 方法。 2022-03-13 19:55:08 +08:00
thinkgem
e1e80b57bd 登录和未登录的session超时时间分开;deviceType 设备类型,默认 pc
;新增孤立会话集群模式Quartz清理;微服务情况下可关闭孤立会话清理任务,只需开启core服务即可;在线用户游客列表,删除还未来得及清理的已超时会话;在线人数统计,增加缓存3分钟的数据,节省服务器资源
2022-03-12 09:49:29 +08:00
thinkgem
195bc56c3d 5.0.1 2022-03-11 11:57:27 +08:00
thinkgem
01a078864a update 2022-03-10 18:57:56 +08:00
thinkgem
f599959962 spring boot 2.5.10 2022-03-09 17:33:16 +08:00
thinkgem
0650ff2dde layer 3.5 laydate 5.0 2022-03-09 17:16:31 +08:00
thinkgem
6e26d9677b remove old jquery 2022-03-09 17:06:41 +08:00
thinkgem
51b630f963 管理界面默认关联查询附属部门 2022-03-09 17:02:32 +08:00
thinkgem
ace080f67f 增加子表生成模板的后端验证注解 2022-03-08 21:25:03 +08:00
thinkgem
6751a4f92f 取消webuploader上传超时参数 #I4WP8B 2022-03-08 17:00:11 +08:00
thinkgem
41aaca5b20 无关紧要 2022-03-03 15:48:04 +08:00
thinkgem
3730a5fe4c 增加 demoMode 参数返回。 2022-03-03 15:46:17 +08:00
thinkgem
23d221b88e 强化类型 2022-02-28 22:11:14 +08:00
thinkgem
0901144fb4 IdWorker 增加 -DworkerId -DdatacenterId 参数 2022-02-28 17:48:21 +08:00
thinkgem
005b0079ca update 2022-02-28 17:46:13 +08:00
thinkgem
96cf2a3aaf 增加app模块引用 2022-02-23 12:44:06 +08:00
thinkgem
18fcbfb11e 增加环境配置例子 spring.profiles.active: prod 2022-02-23 12:43:30 +08:00
thinkgem
21579f705a 优化树结构图标间距字体等 2022-02-22 14:22:57 +08:00
thinkgem
6655214eb2 新增专为分离端提供的接口Web服务 2022-02-21 16:20:38 +08:00
thinkgem
3aef4ad672 增加表格行高及各项细节风格优化 2022-02-21 12:05:58 +08:00
thinkgem
630b28f452 反序列化遇到异常时忽略 2022-02-21 10:56:21 +08:00
thinkgem
00ff5288f1 zTree 增加字体大小,增加边距。 2022-02-21 10:50:29 +08:00
thinkgem
2cd649e009 增加 apiMode 参数,开启后,关闭 登录和主页面 视图。 2022-02-20 17:16:30 +08:00
thinkgem
701c178d83 排序过滤优化,只允许特定字符。 2022-02-17 23:16:12 +08:00
thinkgem
f4d8d6772a 点击右上角【Star】收藏本软件 ^_^ 2022-02-17 22:02:53 +08:00
thinkgem
958d019cd5 主题优化改进 2022-02-16 20:56:35 +08:00
thinkgem
2272f36588 update readme 2022-02-16 10:35:23 +08:00
thinkgem
4bbb63a4b6 增加过滤关键字 2022-02-16 10:05:46 +08:00
thinkgem
3719e62fb6 !23 修正中文拼音首字母空数组判断字符串不是中文字符,会返回空数组,需要判断 2022-02-15 15:18:21 +08:00
thinkgem
57e172802d 新增2套主题风格 2022-02-14 19:57:59 +08:00
thinkgem
53ceb352e0 update readme 2022-02-14 16:28:37 +08:00
thinkgem
9e2e122128 update readme 2022-02-14 10:55:21 +08:00
thinkgem
a0b5957d25 Apache 2.0、无用户数限制 2022-02-11 15:14:52 +08:00
thinkgem
6d179000df update readme 2022-02-10 00:41:08 +08:00
thinkgem
64b490183e update demo 2022-02-09 11:51:28 +08:00
thinkgem
333ca9b78b tomcat 9.0.58 2022-02-09 00:01:14 +08:00
thinkgem
840af32ba3 增加vue文件上传模板 2022-02-07 20:54:30 +08:00
thinkgem
fb24ef1a7b update 2022-01-24 23:20:26 +08:00
thinkgem
3b7b16e08c 5.0.0 2022-01-21 21:49:05 +08:00
thinkgem
ecab037d71 修正多主键时,少生成一个逗号问题。https://gitee.com/thinkgem/jeesite-vue/issues/I4QY3P 2022-01-15 22:28:41 +08:00
thinkgem
77a2d6ea66 修正表单页getTitle未动态生效问题 #I4QXTJ 2022-01-15 21:47:01 +08:00
thinkgem
c1f0f8e581 update cms script 2022-01-11 19:04:50 +08:00
thinkgem
c6d8d6e1ac update cms script 2022-01-11 19:04:36 +08:00
thinkgem
b2c8bb07e4 新增系统管理员管理默认角色不能取消提示 2022-01-11 17:06:31 +08:00
thinkgem
37091b1a58 jsqlparser 4.3 2022-01-03 23:23:39 +08:00
thinkgem
3af98f56de 增加Cloud版的Vue模板 2022-01-02 23:07:15 +08:00
thinkgem
d5c95c3acc 代码生成器增加前端生成基础路径 2021-12-31 12:59:51 +08:00
thinkgem
45b2c6ae95 代码生成器增加前端生成基础路径并简化参数调用 2021-12-31 12:55:16 +08:00
thinkgem
6de1f82511 代码生成器增加前端生成基础路径 2021-12-31 12:45:42 +08:00
thinkgem
b6762cacd0 添加Vue子表生成模板 2021-12-30 23:33:11 +08:00
thinkgem
364752f876 update 2021-12-30 23:24:15 +08:00
thinkgem
8c1386d71f update 2021-12-30 23:23:54 +08:00
thinkgem
53734b1849 update 2021-12-30 09:46:10 +08:00
thinkgem
1c508b8c3b remove filter css 2021-12-29 15:56:14 +08:00
thinkgem
1a02335645 细节处理 2021-12-29 14:17:05 +08:00
thinkgem
4aa69607ee 支持jdk17 2021-12-28 22:12:14 +08:00
jeesite
1decb82081 左树右表的树结构增加异步支持参数 2021-12-28 14:12:27 +08:00
jeesite
b2a43e3cef 所有treeData接口增加parentCode参数,获取一级数据。 2021-12-28 14:06:38 +08:00
jeesite
3c00e7dee1 树节点展开优化,默认展开2级,但大于10个节点的不展开 2021-12-28 10:42:10 +08:00
jeesite
28e3e4a20e Redis超时时间长一点 2021-12-27 17:12:52 +08:00
thinkgem
6cf828ab44 升级MyBatis3.5.9 2021-12-27 17:12:26 +08:00
thinkgem
aec3f28af8 激活菜单圆润风格。主题整体美化,标准14字号,色调细节。 2021-12-27 10:23:15 +08:00
thinkgem
b355f62d49 Apache License Version 2.0 2021-12-27 10:01:30 +08:00
jeesite
cbb7667779 useI18n路径分隔符使用点 2021-12-26 11:15:31 +08:00
thinkgem
edbe454a73 验证码字体小一点 2021-12-21 10:14:56 +08:00
thinkgem
6b8cbe0bad docker-build 2021-12-21 10:11:21 +08:00
thinkgem
dddf34e3aa update 2021-12-19 22:13:04 +08:00
thinkgem
e49d6f25af log4j-api 2.17.0 2021-12-18 22:18:01 +08:00
jeesite
5a62f9d38d 代码优化 2021-12-18 16:00:09 +08:00
thinkgem
f07973c7c7 update 2021-12-17 16:44:04 +08:00
thinkgem
4edfd359cf log4j-api 2.16.0 2021-12-17 15:12:01 +08:00
thinkgem
319c6f533a 升级脚本更新 2021-12-17 15:08:00 +08:00
thinkgem
0b8ad07f37 update 2021-12-14 16:51:54 +08:00
thinkgem
8b4fa39916 update 2021-12-14 16:51:06 +08:00
thinkgem
fb7c4cd68d layer优化msg弹窗,超时时间比较长的加关闭创建按钮,全屏消息的增宽显示更多内容。 2021-12-14 16:48:24 +08:00
Mark
fe95d79c9c 生成的vue表单添加默认值 2021-12-10 21:40:12 +08:00
thinkgem
9d128e42fa 当超过设置最大选择长度时,自动关闭下拉框 2021-12-09 23:14:03 +08:00
thinkgem
da54dbfe41 update 2021-12-03 21:35:11 +08:00
thinkgem
f195e1f120 update 2021-12-03 20:49:03 +08:00
thinkgem
09ca6c68a9 代码优化 2021-11-30 23:43:02 +08:00
thinkgem
77d1fde546 增加vue生成模板 2021-11-30 17:13:52 +08:00
thinkgem
a9fccbb40f 暂时去掉simpleupload因为ie下有问题。 2021-11-29 12:44:04 +08:00
thinkgem
3c769e17e1 vue 2021-11-29 12:26:12 +08:00
thinkgem
1fe1067930 防登录信息过长攻击 2021-11-29 11:51:22 +08:00
thinkgem
90de804cf3 增加树表的左树右表生成模板 2021-11-29 11:50:01 +08:00
thinkgem
f5d5b16a16 代码优化 2021-11-26 11:41:04 +08:00
thinkgem
f5fa369b97 代码优化 2021-11-23 13:48:23 +08:00
thinkgem
aebdb2b567 Tab页签增加关闭全部功能;Tab增加图标;字体均调整为14号;侧边栏选项稍微高一点 2021-11-22 20:22:03 +08:00
thinkgem
6f85d699fd 优化生成模板 2021-11-22 20:04:26 +08:00
thinkgem
4199a689fb 微服务环境下日志存不上的问题 2021-11-22 20:00:19 +08:00
thinkgem
2a7784555c 增加 LDAP 配置参数例子 2021-11-19 13:49:02 +08:00
thinkgem
50811f8f0c 优化部门树查询用户接口 2021-11-19 13:48:18 +08:00
thinkgem
dd850c88a0 代码优化 2021-11-19 13:46:20 +08:00
thinkgem
611cd1cdc8 点击右上角【Star】收藏本软件 ^_^ 2021-11-16 15:21:33 +08:00
thinkgem
bf2e686df1 升级一些依赖 2021-11-16 13:22:20 +08:00
thinkgem
6c84e153b1 代码生成多选字段验证时的问题 2021-11-16 11:18:51 +08:00
thinkgem
81634a4ee4 去掉 apache fileupload 的依赖,及其他不常用依赖 2021-11-16 10:19:29 +08:00
thinkgem
dbc0161c93 部门树的用户查询增加 userIdPrefix 参数 2021-11-16 09:44:22 +08:00
thinkgem
7fbb65a93c 访问日志类型增加选项卡快捷操作 2021-11-15 16:16:10 +08:00
thinkgem
0322127a74 升级注意!角色编码和岗位编码增加viewCode,在开启租户模式的时候roleCode格式为corpCode_viewCode,可能会影响到直接使用roleCode判断权限的业务代码。treeData接口返回viewCode数据 2021-11-15 15:50:45 +08:00
thinkgem
eb9c84a2d9 mybatis 3.5.7、druid 1.2.8 2021-11-10 12:23:25 +08:00
thinkgem
08cd366d1f 代码优化 ctrlPermi 2021-11-09 12:28:45 +08:00
thinkgem
817f8e032d Raw 2021-11-04 16:33:45 +08:00
thinkgem
eed65d732a 新增 extend_json 扩展字段,方便存储元数据; 2021-11-04 15:29:31 +08:00
thinkgem
a929eb13e6 编码和登录账号的消息增加到i18n 2021-11-04 12:55:17 +08:00
thinkgem
9e25ba658c employeePosts 参数数组转换为字符串,逗号分隔。 2021-11-03 21:33:15 +08:00
414 changed files with 26122 additions and 27086 deletions

View File

@@ -4,8 +4,8 @@
</p>
<h3 align="center" style="margin:30px 0 30px;font-weight:bold;font-size:30px;">快速开发平台 - Spring Boot</h3>
<p align="center">
<a href="https://jeesite.com/docs/upgrade/" target="__blank"><img alt="JeeSite-V4.6" src="https://img.shields.io/badge/JeeSite-V4.6-success.svg"></a>
<a href="https://spring.io/projects/spring-boot#learn" target="__blank"><img alt="SpringBoot-2.7" src="https://img.shields.io/badge/SpringBoot-2.7-blue.svg"></a>
<a href="https://jeesite.com/docs/upgrade/" target="__blank"><img alt="JeeSite-V5.0" src="https://img.shields.io/badge/JeeSite-V5.0-success.svg"></a>
<a href="https://spring.io/projects/spring-boot#learn" target="__blank"><img alt="SpringBoot-2.5" src="https://img.shields.io/badge/SpringBoot-2.5-blue.svg"></a>
<a href="https://gitee.com/thinkgem/jeesite4/stargazers" target="__blank"><img alt="star" src="https://gitee.com/thinkgem/jeesite4/badge/star.svg?theme=dark"></a>
<a href="https://gitee.com/thinkgem/jeesite4/members" target="__blank"><img alt="fork" src="https://gitee.com/thinkgem/jeesite4/badge/fork.svg?theme=dark"></a>
</p>
@@ -41,9 +41,7 @@ JeeSite 功能全,知识点非常多,也非常少。因为她使用的都是
JeeSite 是一个低代码开发平台具有较高的封装度、扩展性封装不是限制你去做一些事情而是在便捷的同时也具有较好的扩展性在不具备一些功能的情况下JeeSite 提供了扩展接口,提供了原生调用方法。
大家都在用 Spring也在学习 Spring 的优点Spring 提供了较好的扩展性,可又有多少人去修改它的源代码呢,退一步说,大家去修改了 Spring 的源码反而会对未来升级造成很大困扰您说不是呢这样的例子很多所以不要纠结我们非常注重这一点JeeSite 也一样具备强大的扩展性。
为什么说 JeeSite 比较易于学习JeeSite 很好的把握了设计的 “度”,避免过度设计的情况。过度设计是在产品设计过程中忽略了产品和用户的实际需求,反而带来了不必要的复杂性,而忽略了系统的学习、开发和维护成本。
大家都在用 Spring也在学习 Spring 的优点Spring 提供了较好的扩展性,可又有多少人去修改它的源代码呢,退一步说,大家去修改了 Spring 的源码反而会对未来升级造成很大困扰您说不是呢这样的例子很多所以不要纠结我们非常注重这一点JeeSite 也一样具备强大的扩展性。
* 至今 JeeSite 平台架构已经非常稳定。
* JeeSite 精益求精,用心打磨每一个细节。
@@ -53,14 +51,12 @@ JeeSite 是一个低代码开发平台,具有较高的封装度、扩展性,
## 技术选型
* 主框架Spring Boot 2.7、Spring Framework 5.3、Apache Shiro 1.11、J2Cache
* 主框架Spring Boot 2.5、Spring Framework 5.3、Apache Shiro 1.9、J2Cache
* 持久层Apache MyBatis 3.5、Hibernate Validator 6.2、Alibaba Druid 1.2
* 视图层Spring MVC 5.3、Beetl 3.3替换JSP、Bootstrap 3.3、AdminLTE 2.4
* 前端组件jQuery 3.5、jqGrid 4.7、layer 3.5、zTree 3.5、jQuery Validation
* 分离前端版Node.js、TypeScript、Vue3、Vite、Ant Design Vue、Vue Vben Admin
* 支持 IE9 及以上版本及其他所有现代浏览器,如:谷歌浏览器、火狐浏览器、国产浏览器 等
* 工作流引擎Flowable 6.6、符合 BPMN 规范、在线流程设计器、中国式流程、退回、撤回、自由流
* Bootstrap 版 支持 IE9 及以上版本及其他所有现代浏览器,如:谷歌、火狐、国产浏览器 等
* Vue3 版 支持现代浏览器,如:谷歌 Chrome 86+、火狐、国产浏览器 等
* 技术选型(详细):<http://jeesite.com/docs/technology/>
* JeeSite Vue<https://gitee.com/thinkgem/jeesite-vue>
@@ -74,12 +70,11 @@ JeeSite 是一个低代码开发平台,具有较高的封装度、扩展性,
## 生态系统
* 分布式微服务Spring Cloud<https://gitee.com/thinkgem/jeesite4-cloud>
* Flowable业务流程引擎BPM<http://jeesite.com/docs/bpm/>
* 分布式微服务系统Spring Cloud<https://gitee.com/thinkgem/jeesite4-cloud>
* JFlow工作流引擎<https://gitee.com/thinkgem/jeesite4-jflow> <http://ccflow.org>
* 内容管理模块CMS<https://gitee.com/thinkgem/jeesite4/tree/v5.3/modules/cms>
* Flowable业务流程模块BPM<http://jeesite.com/docs/bpm/>
* 内容管理模块CMS<https://gitee.com/thinkgem/jeesite4-cms>
* 手机端移动端:<https://gitee.com/thinkgem/jeesite4-uniapp>
* PC客户端程序<https://gitee.com/thinkgem/jeesite-client>
* Vue3分离版本<https://gitee.com/thinkgem/jeesite-vue>
## 快速体验
@@ -91,13 +86,21 @@ JeeSite 是一个低代码开发平台,具有较高的封装度、扩展性,
### 本地运行
1. 环境准备:`JDK 1.8 or 11、17``Maven 3.6+`、使用 `MySQL 5.7 or 8.0` 数据库、[其它数据库](https://jeesite.com/docs/technology/#_8、已支持数据库)
2. 下载源码:<https://gitee.com/thinkgem/jeesite4/repository/archive/v4.6.zip> 并解压
2. 下载源码:<https://gitee.com/thinkgem/jeesite4/repository/archive/v5.0_dev.zip> 并解压
3. 打开文件:`/web/src/main/resources/config/application.yml` 配置JDBC连接
4. 执行脚本:`/web/bin/init-data.bat` 初始化数据库
5. 执行脚本:`/web/bin/run-tomcat.bat` 启动服务即可
6. 浏览器访问:<http://127.0.0.1:8980/js/> 账号 system 密码 admin
7. 部署常见问题:<https://jeesite.com/docs/faq/>
### 快速运行
1. 环境准备:`JDK 1.8 or 11、17``Maven 3.6+`、无需准备数据库(使用内嵌 H2 DB
2. 下载源码:<https://gitee.com/thinkgem/jeesite4/repository/archive/v5.0_dev.zip> 并解压
3. 执行脚本:`/web-fast/bin/run-tomcat.bat` 启动服务即可(自动初始化库)
4. 浏览器访问:<http://127.0.0.1:8980/js/> 账号 system 密码 admin
5. 部署常见问题:<https://jeesite.com/docs/faq/>
### 容器运行
- 拉取 Docker 镜像:
@@ -121,52 +124,34 @@ thinkgem/jeesite-web && docker logs -f jeesite-web
* 菜单和按钮权限:<https://jeesite.com/docs/permi-shiro/>
* 强大的数据权限:<https://jeesite.com/docs/service-datascope/#数据权限>
* 表结构数据字典:<https://jeesite.com/docs/code-gen/#表结构数据字典>
* 表单组件封装:<https://jeesite.com/docs/views-beetl/>
* 持久层设计:<https://jeesite.com/docs/dao-mybatis/>
* JS脚本工具<https://jeesite.com/docs/jeesite-js/>
* 后端工具:<https://jeesite.com/docs/sys-utils/>
* 表单组件:<https://jeesite.com/docs/views-beetl/>
* 表格组件:<https://jeesite.com/docs/datagrid/>
* js工具<https://jeesite.com/docs/jeesite-js/>
## 专题文章
* 自定义主题:<https://jeesite.com/docs/custom-views/>
* 国际化多语言:<https://jeesite.com/docs/i18n-locale/>
* 接口文档:<https://jeesite.com/docs/mobile-rest-api/>
* BPM工作流引擎<https://jeesite.com/docs/bpm/>
* 用户类型:<https://jeesite.com/docs/user-type/>
* 消息推送<https://jeesite.com/docs/msg-push-use/>
* 树表结构设计<https://jeesite.com/docs/tree-table-use/>
* 单点登录:<https://jeesite.com/docs/sso-cas/>
* 在线任务调度<https://jeesite.com/docs/job/>
* 国际化<https://jeesite.com/docs/i18n-locale/>
* 对象存储:<https://jeesite.com/docs/oss-client/>
* 大屏设计器:<https://jeesite.com/docs/visual/>
* 报表设计器:<https://jeesite.com/docs/ureport/>
* 文件在线预览:<https://jeesite.com/docs/filepreview/>
* 报表设计器:<https://jeesite.com/docs/ureport/>
* 大屏设计器:<https://jeesite.com/docs/visual/>
* 三员管理员:<https://jeesite.com/docs/manager3/>
* 在线作业调度:<https://jeesite.com/docs/job/>
* 消息推送:<https://jeesite.com/docs/msg-push-use/>
* 手机端框架:<https://jeesite.com/docs/uniapp/>
* 统一认证服务:<https://jeesite.com/docs/oauth2-server/>
* 树表结构设计:<https://jeesite.com/docs/tree-table-use/>
## 云服务架构
* 多租户、SaaS服务<https://jeesite.com/docs/saas-corp-use/>
* 集群、负载均衡、高可用:<https://jeesite.com/docs/cluster/>
* Spring Cloud 微服务<https://jeesite.com/docs/springcloud/>
* Spring Cloud<https://jeesite.com/docs/springcloud/>
* 分布式事务 Seata<https://jeesite.com/docs/springcloud-seata/>
* 读写分离、分库分表:<https://jeesite.com/docs/sharding/>
## 前后分离版
* Vue 版介绍:<https://jeesite.com/docs/jeesite-vue/>
* Vue 安装部署:<https://jeesite.com/docs/vue-install-deploy/>
* Vue 参数配置:<https://jeesite.com/docs/vue-settings/>
* Vue 前端权限:<https://jeesite.com/docs/vue-auth/>
* Vue 源码解析:<https://jeesite.com/docs/vue-crud-view/>
* Vue 表单组件:<https://jeesite.com/docs/vue-basic-form/>
* Vue 表格组件:<https://jeesite.com/docs/vue-basic-table/>
* Vue 常用组件:<https://jeesite.com/docs/vue-comp/>
* Vue 图标组件:<https://jeesite.com/docs/vue-icon/>
* Vue 国际化多语言:<https://jeesite.com/docs/vue-i18n/>
* Vue 样式库:<https://jeesite.com/docs/vue-style/>
## 授权协议声明
@@ -184,7 +169,7 @@ thinkgem/jeesite-web && docker logs -f jeesite-web
## 技术服务与支持
* 没有资金的支撑就很难得到发展,特别是一个好的产品,如果 JeeSite 帮助了您,请为我们点赞。支持我们,您可以获得更多回馈,我们会把公益事业做的更好,开放更多资源,回报社区和社会请给我们一些动力吧,在此非常感谢已支持我们的朋友!
* 没有资金的支撑就很难得到发展,特别是一个好的产品,如果 JeeSite 帮助了您,请为我们点赞。支持我们,您可以得到一些回报,有了这些我们会把公益事业做的更好,回报社区和社会请给我们一些动力吧,在此非常感谢已支持我们的朋友!
* **联系我们**:请访问技术支持服务页面:<https://jeesite.com/docs/support/>
## 今后如何升级?

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId>
<version>4.7.0-SNAPSHOT</version>
<version>5.0.2-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
@@ -34,7 +34,7 @@
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>${commons-text.version}</version>
<version>${commons-text.version}</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
@@ -48,7 +48,7 @@
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>${commons-beanutils.version}</version>
<version>${commons-beanutils.version}</version>
</dependency>
<!-- Java serialization -->
@@ -194,6 +194,11 @@
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
@@ -238,6 +243,7 @@
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework</groupId>

View File

@@ -6,6 +6,8 @@ package com.jeesite.common.idgen;
import java.util.Random;
import org.apache.commons.lang3.StringUtils;
/**
* 来自于twitter项目snowflake的id产生方案全局唯一时间有序。
* 64位ID (42(毫秒)+5(机器ID)+5(业务编码)+12(重复累加))
@@ -42,23 +44,39 @@ public class IdWorker {
private final long datacenterId;
public IdWorker(long workerId, long datacenterId) {
if (workerId > maxWorkerId || workerId < 0) {
if (workerId == -1){
this.workerId = new Random().nextInt((int)maxWorkerId);
}else{
String wid = System.getProperty("workerId");
if (StringUtils.isNotBlank(wid)) {
try {
workerId = Integer.parseInt(wid);
} catch (Exception e) {
throw new IllegalArgumentException(
"worker Id can't be greater than %d or less than 0");
"jvm param -DworkerId can't be greater than %d or less than 0");
}
}
String dcid = System.getProperty("datacenterId");
if (StringUtils.isNotBlank(dcid)) {
try {
workerId = Integer.parseInt(dcid);
} catch (Exception e) {
throw new IllegalArgumentException(
"jvm param -DdatacenterId can't be greater than %d or less than 0");
}
}
if (workerId == -1){
workerId = new Random().nextInt((int)maxWorkerId);
}
if (datacenterId == -1){
datacenterId = new Random().nextInt((int)maxDatacenterId);
}
if (workerId > maxWorkerId || workerId < 0) {
throw new IllegalArgumentException(
"worker Id can't be greater than %d or less than 0");
}else{
this.workerId = workerId;
}
if (datacenterId > maxDatacenterId || datacenterId < 0) {
if (datacenterId == -1){
this.datacenterId = new Random().nextInt((int)maxDatacenterId);
}else{
throw new IllegalArgumentException(
"datacenter Id can't be greater than %d or less than 0");
}
throw new IllegalArgumentException(
"datacenter Id can't be greater than %d or less than 0");
}else{
this.datacenterId = datacenterId;
}

View File

@@ -4,8 +4,11 @@
*/
package com.jeesite.common.io;
import com.alibaba.fastjson.parser.ParserConfig;
import com.jeesite.common.lang.StringUtils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.springframework.boot.env.OriginTrackedMapPropertySource;
import org.springframework.boot.env.PropertiesPropertySourceLoader;
import org.springframework.boot.env.YamlPropertySourceLoader;
@@ -13,10 +16,8 @@ import org.springframework.core.Ordered;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import com.alibaba.fastjson.parser.ParserConfig;
import com.jeesite.common.lang.StringUtils;
/**
* 配置文件加载Boot
@@ -39,11 +40,7 @@ public class PropertyLoader implements org.springframework.boot.env.PropertySour
List<PropertySource<?>> propertySources = new ArrayList<>();
if (!isLoadJeeSitePropertySource) {
isLoadJeeSitePropertySource = true;
try {
ParserConfig.getGlobalInstance().setSafeMode(true); // 开启 FastJSON 安全模式
} catch (Exception ignored) {
// 兼容 fastjson2 的调用,不返回异常
}
ParserConfig.getGlobalInstance().setSafeMode(true); // 开启 FastJSON 安全模式
Properties properties = PropertiesUtils.getInstance().getProperties();
propertySources.add(new OriginTrackedMapPropertySource("jeesite", properties));
} else {

View File

@@ -171,7 +171,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
return ObjectUtils.serializeFst(object);
}
} catch (Exception e) {
logger.error("serialize: {}", e.getMessage(), e);
logger.error("serialize: {}", e.getMessage());
}
return null;
}
@@ -214,7 +214,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
}
long totalTime = System.currentTimeMillis() - beginTime;
if (totalTime > 30000){
logger.warn(object.getClass() + " serialize time: " + TimeUtils.formatDateAgo(totalTime));
logger.warn(object.getClass() + " serialize time: " + TimeUtils.formatTime(totalTime));
}
return bytes;
}
@@ -240,7 +240,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
}
long totalTime = System.currentTimeMillis() - beginTime;
if (totalTime > 30000 && object != null){
logger.warn(object.getClass() + " unserialize time: " + TimeUtils.formatDateAgo(totalTime));
logger.warn(object.getClass() + " unserialize time: " + TimeUtils.formatTime(totalTime));
}
return object;
}
@@ -248,7 +248,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
private static ThreadLocal<FSTConfiguration> fstConfiguration =
new NamedThreadLocal<FSTConfiguration>("FSTConfiguration") {
@Override
public FSTConfiguration initialValue() {
public FSTConfiguration initialValue() {
return FSTConfiguration.createDefaultConfiguration();
}
};
@@ -266,7 +266,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
byte[] bytes = fstConfiguration.get().asByteArray(object);
long totalTime = System.currentTimeMillis() - beginTime;
if (totalTime > 30000){
logger.warn(object.getClass() + " fst serialize time: " + TimeUtils.formatDateAgo(totalTime));
logger.warn(object.getClass() + " fst serialize time: " + TimeUtils.formatTime(totalTime));
}
return bytes;
}
@@ -284,7 +284,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
Object object = fstConfiguration.get().asObject(bytes);
long totalTime = System.currentTimeMillis() - beginTime;
if (totalTime > 30000 && object != null){
logger.warn(object.getClass() + " fst unserialize time: " + TimeUtils.formatDateAgo(totalTime));
logger.warn(object.getClass() + " fst unserialize time: " + TimeUtils.formatTime(totalTime));
}
return object;
}

View File

@@ -13,10 +13,31 @@ import java.util.Date;
*/
public class TimeUtils {
public static final String[] CN = new String[] {"毫秒", "", "", "", ""};
public static final String[] EN = new String[] {" millisecond ", " second", " minute", " hour", " day"};
public static final String[] AGO_CN = new String[] {"刚刚", "秒前", "分钟前", "小时前", "天前"};
public static final String[] AGO_EN = new String[] {"just now", " seconds ago", " minutes ago", " hours ago", " days ago"};
/**
* 将毫秒数转换为xx天xx时xx分xx秒v5.1 替换为 formatTime
*/
@Deprecated
public static String formatDateAgo(long millisecond) {
return formatTime(millisecond, CN);
}
/**
* 将毫秒数转换为xx天xx时xx分xx秒
*/
public static String formatDateAgo(long millisecond) {
public static String formatTime(long millisecond) {
return formatTime(millisecond, CN);
}
/**
* 将毫秒数转换为xx天xx时xx分xx秒
*/
public static String formatTime(long millisecond, String[] lang) {
long ms = millisecond;
int ss = 1000;
int mi = ss * 60;
@@ -28,19 +49,19 @@ public class TimeUtils {
long second = (ms - day * dd - hour * hh - minute * mi) / ss;
StringBuilder sb = new StringBuilder();
if (ms >= 0 && ms < 1000) {
sb.append(ms).append("毫秒");
sb.append(ms).append(lang[0]);
} else {
if (day > 0) {
sb.append(day).append("");
sb.append(day).append(lang[4]);
}
if (hour > 0) {
sb.append(hour).append("");
sb.append(hour).append(lang[3]);
}
if (minute > 0) {
sb.append(minute).append("");
sb.append(minute).append(lang[2]);
}
if (second > 0) {
sb.append(second).append("");
sb.append(second).append(lang[1]);
}
}
return sb.toString();
@@ -57,32 +78,39 @@ public class TimeUtils {
* 将过去的时间转为为刚刚xx秒xx分钟xx小时前、xx天前大于3天的显示日期
*/
public static String formatTimeAgo(Date dateTime) {
return formatTimeAgo(dateTime, AGO_CN);
}
/**
* 将过去的时间转为为刚刚xx秒xx分钟xx小时前、xx天前大于3天的显示日期
*/
public static String formatTimeAgo(Date dateTime, String[] lang) {
String interval = null;
// 得出的时间间隔是毫秒
long time = System.currentTimeMillis() - dateTime.getTime();
// 如果时间间隔小于10秒则显示“刚刚”time/10得出的时间间隔的单位是秒
if (time / 1000 < 10 && time / 1000 >= 0) {
interval = "刚刚";
interval = lang[0];
}
// 如果时间间隔大于24小时则显示多少天前
else if (time / 3600000 < 24 * 4 && time / 3600000 >= 24) {
int d = (int) (time / (3600000 * 24));// 得出的时间间隔的单位是天
interval = d + "天前";
interval = d + lang[4];
}
// 如果时间间隔小于24小时则显示多少小时前
else if (time / 3600000 < 24 && time / 3600000 >= 1) {
int h = (int) (time / 3600000);// 得出的时间间隔的单位是小时
interval = h + "小时前";
interval = h + lang[3];
}
// 如果时间间隔小于60分钟则显示多少分钟前
else if (time / 60000 < 60 && time / 60000 >= 1) {
int m = (int) ((time % 3600000) / 60000);// 得出的时间间隔的单位是分钟
interval = m + "分钟前";
interval = m + lang[2];
}
// 如果时间间隔小于60秒则显示多少秒前
else if (time / 1000 < 60 && time / 1000 >= 10) {
int se = (int) ((time % 60000) / 1000);
interval = se + "秒前";
interval = se + lang[1];
}
// 大于3天的则显示正常的时间但是不显示秒
else {

View File

@@ -0,0 +1,172 @@
/**
* Copyright (c) 2005-2012 springside.org.cn
*
* Licensed under the Apache License, Version 2.0 (the "License");
*/
package com.jeesite.common.mapper;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Collection;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.namespace.QName;
import com.jeesite.common.lang.ExceptionUtils;
import com.jeesite.common.lang.StringUtils;
import com.jeesite.common.reflect.ReflectUtils;
/**
* 使用Jaxb2.0实现XML<->Java Object的Mapper.
*
* 在创建时需要设定所有需要序列化的Root对象的Class.
* 特别支持Root对象是Collection的情形.
*
* @author calvin
* @version 2013-01-15
*/
@SuppressWarnings("rawtypes")
public class JaxbMapper {
private static ConcurrentMap<Class, JAXBContext> jaxbContexts = new ConcurrentHashMap<Class, JAXBContext>();
/**
* Java Object->Xml without encoding.
*/
public static String toXml(Object root) {
Class clazz = ReflectUtils.getUserClass(root);
return toXml(root, clazz, null);
}
/**
* Java Object->Xml with encoding.
*/
public static String toXml(Object root, String encoding) {
Class clazz = ReflectUtils.getUserClass(root);
return toXml(root, clazz, encoding);
}
/**
* Java Object->Xml with encoding.
*/
public static String toXml(Object root, Class clazz, String encoding) {
try {
StringWriter writer = new StringWriter();
createMarshaller(clazz, encoding).marshal(root, writer);
return writer.toString();
} catch (JAXBException e) {
throw ExceptionUtils.unchecked(e);
}
}
/**
* Java Collection->Xml without encoding, 特别支持Root Element是Collection的情形.
*/
public static String toXml(Collection<?> root, String rootName, Class clazz) {
return toXml(root, rootName, clazz, null);
}
/**
* Java Collection->Xml with encoding, 特别支持Root Element是Collection的情形.
*/
public static String toXml(Collection<?> root, String rootName, Class clazz, String encoding) {
try {
CollectionWrapper wrapper = new CollectionWrapper();
wrapper.collection = root;
JAXBElement<CollectionWrapper> wrapperElement = new JAXBElement<CollectionWrapper>(new QName(rootName),
CollectionWrapper.class, wrapper);
StringWriter writer = new StringWriter();
createMarshaller(clazz, encoding).marshal(wrapperElement, writer);
return writer.toString();
} catch (JAXBException e) {
throw ExceptionUtils.unchecked(e);
}
}
/**
* Xml->Java Object.
*/
@SuppressWarnings("unchecked")
public static <T> T fromXml(String xml, Class<T> clazz) {
try {
StringReader reader = new StringReader(xml);
return (T) createUnmarshaller(clazz).unmarshal(reader);
} catch (JAXBException e) {
throw ExceptionUtils.unchecked(e);
}
}
/**
* 创建Marshaller并设定encoding(可为null).
* 线程不安全需要每次创建或pooling。
*/
public static Marshaller createMarshaller(Class clazz, String encoding) {
try {
JAXBContext jaxbContext = getJaxbContext(clazz);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
if (StringUtils.isNotBlank(encoding)) {
marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
}
return marshaller;
} catch (JAXBException e) {
throw ExceptionUtils.unchecked(e);
}
}
/**
* 创建UnMarshaller.
* 线程不安全需要每次创建或pooling。
*/
public static Unmarshaller createUnmarshaller(Class clazz) {
try {
JAXBContext jaxbContext = getJaxbContext(clazz);
return jaxbContext.createUnmarshaller();
} catch (JAXBException e) {
throw ExceptionUtils.unchecked(e);
}
}
protected static JAXBContext getJaxbContext(Class clazz) {
if (clazz == null){
throw new RuntimeException("'clazz' must not be null");
}
JAXBContext jaxbContext = jaxbContexts.get(clazz);
if (jaxbContext == null) {
try {
jaxbContext = JAXBContext.newInstance(clazz, CollectionWrapper.class);
jaxbContexts.putIfAbsent(clazz, jaxbContext);
} catch (JAXBException ex) {
// throw new HttpMessageConversionException("Could not instantiate JAXBContext for class [" + clazz
// + "]: " + ex.getMessage(), ex);
throw new RuntimeException("Could not instantiate JAXBContext for class [" + clazz
+ "]: " + ex.getMessage(), ex);
}
}
return jaxbContext;
}
/**
* 封装Root Element 是 Collection的情况.
*/
public static class CollectionWrapper {
@XmlAnyElement
protected Collection<?> collection;
}
}

View File

@@ -32,7 +32,6 @@ import com.fasterxml.jackson.databind.introspect.Annotated;
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
import com.fasterxml.jackson.databind.util.JSONPObject;
//import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
import com.jeesite.common.collect.ListUtils;
import com.jeesite.common.io.PropertiesUtils;
import com.jeesite.common.lang.DateUtils;

View File

@@ -116,7 +116,7 @@ public class VideoUtils {
log.error("视频剪切图片失败", e);
}
}
log.debug("视频剪切图片" + (statusTemp ? "成功" : "失败") + ",用时:" + TimeUtils.formatDateAgo(System.currentTimeMillis() - startTime));
log.debug("视频剪切图片" + (statusTemp ? "成功" : "失败") + ",用时:" + TimeUtils.formatTime(System.currentTimeMillis() - startTime));
return statusTemp;
}
@@ -142,7 +142,7 @@ public class VideoUtils {
}
log.debug("删除临时文件");
FileUtils.deleteFile(tempFile);
log.debug("视频转换" + (statusTemp ? "成功" : "失败") + ",用时:" + TimeUtils.formatDateAgo(System.currentTimeMillis() - startTime));
log.debug("视频转换" + (statusTemp ? "成功" : "失败") + ",用时:" + TimeUtils.formatTime(System.currentTimeMillis() - startTime));
return statusTemp;
}

View File

@@ -15,7 +15,7 @@ import com.jeesite.common.io.PropertiesUtils;
* 发送电子邮件
*/
public class EmailUtils {
private final static Logger logger = LoggerFactory.getLogger(EmailUtils.class);
/**
@@ -42,10 +42,10 @@ public class EmailUtils {
*/
@Deprecated
public static boolean send(String fromAddress, String fromPassword, String fromHostName,
String sslOnConnect, String sslSmtpPort, String toAddress, String subject, String content) {
String sslOnConnect, String sslSmtpPort, String toAddress, String subject, String content) {
return send(fromAddress, fromPassword, fromHostName, 25, sslOnConnect, sslSmtpPort, toAddress, subject, content);
}
/**
* 发送邮件
* @param toAddress 接收地址
@@ -54,7 +54,7 @@ public class EmailUtils {
* @return
*/
public static boolean send(String fromAddress, String fromPassword, String fromHostName, Integer smtpPort,
String sslOnConnect, String sslSmtpPort, String toAddress, String subject, String content) {
String sslOnConnect, String sslSmtpPort, String toAddress, String subject, String content) {
try {
HtmlEmail htmlEmail = new HtmlEmail();
// 发送地址
@@ -82,7 +82,7 @@ public class EmailUtils {
// 其他信息
htmlEmail.setCharset(EncodeUtils.UTF_8);
// 发送
htmlEmail.send();
return true;
@@ -91,10 +91,10 @@ public class EmailUtils {
}
return false;
}
// public static void main(String[] args) {
// EmailUtils.send("jeesite_demo@163.com", "jeesitedemo1234", "smtp.163.com",
// "false", "465", "jeesite_demo@163.com", "测试邮件", "测试<b>邮件</b>的内容");
// }
}

View File

@@ -288,7 +288,10 @@ abstract class VFS {
// Try each implementation class until a valid one is found
VFS vfs = null;
for (int i = 0; vfs == null || !vfs.isValid(); i++) {
for (int i = 0; true; i++) {
if (!(vfs == null || !vfs.isValid())) {
break;
}
Class<? extends VFS> impl = impls.get(i);
try {
vfs = impl.getDeclaredConstructor().newInstance();
@@ -302,7 +305,7 @@ abstract class VFS {
}
}
log.debug("Using VFS adapter " + vfs.getClass().getName());
log.debug("Using VFS adapter " + vfs == null ? null : vfs.getClass().getName());
return VFS.instance = vfs;
}

View File

@@ -143,7 +143,7 @@ public class PinyinUtils {
if (input == null){
return null;
}
char[] c = input.toCharArray();
char c[] = input.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] == '\u3000') {
c[i] = ' ';
@@ -156,6 +156,7 @@ public class PinyinUtils {
// public static void main(String[] args) {
// String str = "你好123🅻🅾🆅🅴、世界abc,~!#$_Sdf-";
// String str = "你好123世界abc,~!#$_Sdf-";
// System.out.println(getFirstSpell(str));
// System.out.println(getFirstSpell(str, false));
// System.out.println(getFullSpell(str));

View File

@@ -26,8 +26,8 @@ import com.jeesite.common.ueditor.define.State;
public class BinaryUploader {
public static final State save(HttpServletRequest request,
Map<String, Object> conf) {
Map<String, Object> conf) {
String contentType = request.getContentType();
if (!("POST".equals(request.getMethod()) && contentType != null
&& contentType.startsWith("multipart/"))) {
@@ -83,22 +83,22 @@ public class BinaryUploader {
if (storageState != null && storageState.isSuccess()) {
int actionCode = ((Integer) conf.get("actionCode")).intValue();
String ctx = request.getContextPath(); // ThinkGem 修正上传图片后返回无contextpath问题
// 上传图片后,进行图片压缩
if (actionCode == ActionMap.UPLOAD_IMAGE){
// 如果开启了压缩图片
if ((Boolean)conf.get("imageCompressEnable")){
Integer maxWidth = (Integer)conf.get("imageCompressBorder");
ImageUtils.thumbnails(new File(physicalPath), maxWidth, -1, null);
}
}
// 上传成功后 转换格式 按照新的视频格式 返回前台 ThinkGem
else if(actionCode == ActionMap.UPLOAD_VIDEO){
final VideoUtils v = new VideoUtils(physicalPath);
// 先截图
// 先截图
if (v.cutPic()){
// 开启进程,在转换视频文件
Thread thread = new Thread("video-convert") {
@@ -113,21 +113,21 @@ public class BinaryUploader {
}
};
thread.setDaemon(true);
thread.start();
thread.start();
storageState.putInfo("url", ctx + PathFormat.format(savePath) + "." + v.getOutputFileExtension());
storageState.putInfo("type", "." + v.getOutputFileExtension());
storageState.putInfo("original", originFileName +"."+ v.getInputFileExtension());
// Ueditor编辑器上传文件完成后调用事件
StorageManager.uploadFileSuccess(physicalPath, storageState);
return storageState;
}
}
storageState.putInfo("url", ctx + PathFormat.format(savePath));
storageState.putInfo("type", suffix);
storageState.putInfo("original", originFileName + suffix);
// UEditor上传文件成功后调用事件
StorageManager.uploadFileSuccess(physicalPath, storageState);
}
@@ -143,5 +143,5 @@ public class BinaryUploader {
return list.contains(type);
}
}

View File

@@ -30,11 +30,11 @@ public class IdcardUtils extends StringUtils {
"62", "63", "64", "65", "71", "81", "82", "91" };
/** 每位加权因子 */
public static final int[] power = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9,
public static final int power[] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9,
10, 5, 8, 4, 2 };
/** 第18位校检码 */
public static final String[] verifyCode = { "1", "0", "X", "9", "8", "7",
public static final String verifyCode[] = { "1", "0", "X", "9", "8", "7",
"6", "5", "4", "3", "2" };
/** 最低年限 */
public static final int MIN = 1930;
@@ -272,7 +272,7 @@ public class IdcardUtils extends StringUtils {
if (card.length() != 8 && card.length() != 9 && idCard.length() != 10) {
return null;
}
if (idCard.matches("^[a-zA-Z][0-9]{9}$")) { // 台湾
if (idCard.matches("^[a-zA-Z][0-9]{9}$")) {
info[0] = "台湾";
System.out.println("11111");
String char2 = idCard.substring(1, 2);
@@ -289,10 +289,10 @@ public class IdcardUtils extends StringUtils {
return info;
}
info[2] = validateTWCard(idCard) ? "true" : "false";
} else if (idCard.matches("^[1|5|7][0-9]{6}\\(?[0-9A-Z]\\)?$")) { // 澳门
} else if (idCard.matches("^[1|5|7][0-9]{6}\\(?[0-9A-Z]\\)?$")) {
info[0] = "澳门";
info[1] = "N";
} else if (idCard.matches("^[A-Z]{1,2}[0-9]{6}\\(?[0-9A]\\)?$")) { // 香港
} else if (idCard.matches("^[A-Z]{1,2}[0-9]{6}\\(?[0-9A]\\)?$")) {
info[0] = "香港";
info[1] = "N";
info[2] = validateHKCard(idCard) ? "true" : "false";

View File

@@ -97,7 +97,6 @@ public class ExcelExport implements Closeable{
* 构造函数
* @param title 表格标题,传“空值”,表示无标题
* @param cls 实体对象通过annotation.ExportField获取标题
* @param type 导出类型1:导出数据)
*/
public ExcelExport(String title, Class<?> cls){
this(title, cls, Type.EXPORT);

View File

@@ -0,0 +1,235 @@
/**
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
* No deletion without permission, or be held responsible to law.
*/
package com.jeesite.common.utils.excel;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xssf.eventusermodel.XSSFReader;
import org.apache.poi.xssf.model.SharedStringsTable;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
/**
* Excel超大数据读取抽象Excel2007读取器excel2007的底层数据结构是xml文件采用SAX的事件驱动的方法解析
* xml需要继承DefaultHandler在遇到文件内容时事件会触发这种做法可以大大降低 内存的耗费,特别使用于大数据量的文件。
* @version 2014-9-2
*/
public abstract class ExcelReader extends DefaultHandler {
// 共享字符串表
private SharedStringsTable sst;
// 上一次的内容
private String lastContents;
private boolean nextIsString;
private int sheetIndex = -1;
private List<String> rowList = new ArrayList<String>();
// 当前行
private int curRow = 0;
// 当前列
private int curCol = 0;
// 日期标志
private boolean dateFlag;
// 数字标志
private boolean numberFlag;
private boolean isTElement;
/**
* 遍历工作簿中所有的电子表格
* @param filename
* @throws Exception
*/
public void process(String filename) throws Exception {
OPCPackage pkg = OPCPackage.open(filename);
XSSFReader r = new XSSFReader(pkg);
SharedStringsTable sst = r.getSharedStringsTable();
XMLReader parser = fetchSheetParser(sst);
Iterator<InputStream> sheets = r.getSheetsData();
while (sheets.hasNext()) {
curRow = 0;
sheetIndex++;
InputStream sheet = sheets.next();
InputSource sheetSource = new InputSource(sheet);
parser.parse(sheetSource);
sheet.close();
}
}
/**
* 只遍历一个电子表格其中sheetId为要遍历的sheet索引从1开始1-3
* @param filename
* @param sheetId
* @throws Exception
*/
public void process(String filename, int sheetId) throws Exception {
OPCPackage pkg = OPCPackage.open(filename);
XSSFReader r = new XSSFReader(pkg);
SharedStringsTable sst = r.getSharedStringsTable();
XMLReader parser = fetchSheetParser(sst);
// 根据 rId# 或 rSheet# 查找sheet
InputStream sheet2 = r.getSheet("rId" + sheetId);
sheetIndex++;
InputSource sheetSource = new InputSource(sheet2);
parser.parse(sheetSource);
sheet2.close();
}
public XMLReader fetchSheetParser(SharedStringsTable sst)
throws SAXException {
XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
this.sst = sst;
parser.setContentHandler(this);
return parser;
}
@Override
public void startElement(String uri, String localName, String name,
Attributes attributes) throws SAXException {
// System.out.println("startElement: " + localName + ", " + name + ", " + attributes);
// c => 单元格
if ("c".equals(name)) {
// 如果下一个元素是 SST 的索引则将nextIsString标记为true
String cellType = attributes.getValue("t");
if ("s".equals(cellType)) {
nextIsString = true;
} else {
nextIsString = false;
}
// 日期格式
String cellDateType = attributes.getValue("s");
if ("1".equals(cellDateType)) {
dateFlag = true;
} else {
dateFlag = false;
}
String cellNumberType = attributes.getValue("s");
if ("2".equals(cellNumberType)) {
numberFlag = true;
} else {
numberFlag = false;
}
}
// 当元素为t时
if ("t".equals(name)) {
isTElement = true;
} else {
isTElement = false;
}
// 置空
lastContents = "";
}
@Override
public void endElement(String uri, String localName, String name)
throws SAXException {
// System.out.println("endElement: " + localName + ", " + name);
// 根据SST的索引值的到单元格的真正要存储的字符串
// 这时characters()方法可能会被调用多次
if (nextIsString) {
try {
int idx = Integer.parseInt(lastContents);
lastContents = new XSSFRichTextString(sst.getEntryAt(idx))
.toString();
} catch (Exception e) {
}
}
// t元素也包含字符串
if (isTElement) {
String value = lastContents.trim();
rowList.add(curCol, value);
curCol++;
isTElement = false;
// v => 单元格的值如果单元格是字符串则v标签的值为该字符串在SST中的索引
// 将单元格内容加入rowlist中在这之前先去掉字符串前后的空白符
} else if ("v".equals(name)) {
String value = lastContents.trim();
value = "".equals(value) ? " " : value;
try {
// 日期格式处理
if (dateFlag) {
Date date = HSSFDateUtil.getJavaDate(Double.valueOf(value));
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
value = dateFormat.format(date);
}
// 数字类型处理
if (numberFlag) {
BigDecimal bd = new BigDecimal(value);
value = bd.setScale(3, BigDecimal.ROUND_UP).toString();
}
} catch (Exception e) {
// 转换失败仍用读出来的值
}
rowList.add(curCol, value);
curCol++;
} else {
// 如果标签名称为 row ,这说明已到行尾,调用 optRows() 方法
if ("row".equals(name)) {
getRows(sheetIndex + 1, curRow, rowList);
rowList.clear();
curRow++;
curCol = 0;
}
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// 得到单元格内容的值
lastContents += new String(ch, start, length);
}
/**
* 获取行数据回调
* @param sheetIndex
* @param curRow
* @param rowList
*/
public abstract void getRows(int sheetIndex, int curRow, List<String> rowList);
// /**
// * 测试方法
// */
// public static void main(String[] args) throws Exception {
//
// String file = "E:/销售数据导入.xlsx";
//
// ExcelReader reader = new ExcelReader() {
// @Override
// public void getRows(int sheetIndex, int curRow, List<String> rowList) {
//
// System.out.println("Sheet:" + sheetIndex + ", Row:" + curRow + ", Data:" +rowList);
//
// }
// };
// reader.process(file, 1);
//
// }
}

View File

@@ -0,0 +1,343 @@
/**
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
* No deletion without permission, or be held responsible to law.
*/
package com.jeesite.common.utils.excel;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
import java.util.Calendar;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
import org.apache.poi.hssf.util.CellReference;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
* Excel超大数据写入抽象excel2007读入器先构建.xlsx一张模板改写模板中的sheet.xml,
* 使用这种方法 写入.xlsx文件不需要太大的内存
* @version 2014-9-2
*/
public abstract class ExcelWriter {
private SpreadsheetWriter sw;
/**
* 写入电子表格的主要流程
*
* @param fileName
* @throws Exception
*/
@SuppressWarnings("resource")
public void process(String fileName) throws Exception {
// 建立工作簿和电子表格对象
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet("sheet1");
// 持有电子表格数据的xml文件名 例如 /xl/worksheets/sheet1.xml
String sheetRef = sheet.getPackagePart().getPartName().getName();
// 保存模板
FileOutputStream os = new FileOutputStream("template.xlsx");
wb.write(os);
os.close();
// 生成xml文件
File tmp = File.createTempFile("sheet", ".xml");
Writer fw = new FileWriter(tmp);
sw = new SpreadsheetWriter(fw);
generate();
fw.close();
// 使用产生的数据替换模板
File templateFile = new File("template.xlsx");
FileOutputStream out = new FileOutputStream(fileName);
substitute(templateFile, tmp, sheetRef.substring(1), out);
out.close();
// 删除文件之前调用一下垃圾回收器,否则无法删除模板文件
System.gc();
// 删除临时模板文件
if (templateFile.isFile() && templateFile.exists()) {
templateFile.delete();
}
}
/**
* 类使用者应该使用此方法进行写操作
*
* @throws Exception
*/
public abstract void generate() throws Exception;
public void beginSheet() throws IOException {
sw.beginSheet();
}
public void insertRow(int rowNum) throws IOException {
sw.insertRow(rowNum);
}
public void createCell(int columnIndex, String value) throws IOException {
sw.createCell(columnIndex, value, -1);
}
public void createCell(int columnIndex, double value) throws IOException {
sw.createCell(columnIndex, value, -1);
}
public void endRow() throws IOException {
sw.endRow();
}
public void endSheet() throws IOException {
sw.endSheet();
}
/**
*
* @param zipfile the template file
* @param tmpfile the XML file with the sheet data
* @param entry the name of the sheet entry to substitute, e.g. xl/worksheets/sheet1.xml
* @param out the stream to write the result to
*/
private static void substitute(File zipfile, File tmpfile, String entry,
OutputStream out) throws IOException {
ZipFile zip = null;
ZipOutputStream zos = null;
InputStream is = null;
try{
zip = new ZipFile(zipfile);
zos = new ZipOutputStream(out);
@SuppressWarnings("unchecked")
Enumeration<ZipEntry> en = (Enumeration<ZipEntry>) zip.entries();
while (en.hasMoreElements()) {
ZipEntry ze = en.nextElement();
if (!ze.getName().equals(entry)) {
zos.putNextEntry(new ZipEntry(ze.getName()));
InputStream is2 = null;
try{
is2 = zip.getInputStream(ze);
copyStream(is2, zos);
}finally {
if (is2 != null){
is2.close();
}
}
}
}
zos.putNextEntry(new ZipEntry(entry));
is = new FileInputStream(tmpfile);
copyStream(is, zos);
}finally {
if (is != null){
is.close();
}
if (zos != null){
zos.close();
}
if (zip != null){
zip.close();
}
}
}
private static void copyStream(InputStream in, OutputStream out)
throws IOException {
byte[] chunk = new byte[1024];
int count;
while ((count = in.read(chunk)) >= 0) {
out.write(chunk, 0, count);
}
}
/**
* 在写入器中写入电子表格
*
*/
public static class SpreadsheetWriter {
private final Writer _out;
private int _rownum;
private static String LINE_SEPARATOR = System
.getProperty("line.separator");
public SpreadsheetWriter(Writer out) {
_out = out;
}
public void beginSheet() throws IOException {
_out.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ "<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">");
_out.write("<sheetData>" + LINE_SEPARATOR);
}
public void endSheet() throws IOException {
_out.write("</sheetData>");
_out.write("</worksheet>");
}
/**
* 插入新行
*
* @param rownum
* 以0开始
*/
public void insertRow(int rownum) throws IOException {
_out.write("<row r=\"" + (rownum + 1) + "\">" + LINE_SEPARATOR);
this._rownum = rownum;
}
/**
* 插入行结束标志
*/
public void endRow() throws IOException {
_out.write("</row>" + LINE_SEPARATOR);
}
/**
* 插入新列
*
* @param columnIndex
* @param value
* @param styleIndex
* @throws IOException
*/
public void createCell(int columnIndex, String value, int styleIndex)
throws IOException {
String ref = new CellReference(_rownum, columnIndex)
.formatAsString();
_out.write("<c r=\"" + ref + "\" t=\"inlineStr\"");
if (styleIndex != -1) {
_out.write(" s=\"" + styleIndex + "\"");
}
_out.write(">");
_out.write("<is><t>" + encoderXML(value) + "</t></is>");
_out.write("</c>");
}
public void createCell(int columnIndex, String value)
throws IOException {
createCell(columnIndex, value, -1);
}
public void createCell(int columnIndex, double value, int styleIndex)
throws IOException {
String ref = new CellReference(_rownum, columnIndex)
.formatAsString();
_out.write("<c r=\"" + ref + "\" t=\"n\"");
if (styleIndex != -1) {
_out.write(" s=\"" + styleIndex + "\"");
}
_out.write(">");
_out.write("<v>" + value + "</v>");
_out.write("</c>");
}
public void createCell(int columnIndex, double value)
throws IOException {
createCell(columnIndex, value, -1);
}
public void createCell(int columnIndex, Calendar value, int styleIndex)
throws IOException {
createCell(columnIndex, DateUtil.getExcelDate(value, false),
styleIndex);
}
}
// XML Encode
private static final String[] xmlCode = new String[256];
static {
// Special characters
xmlCode['\''] = "'";
xmlCode['\"'] = "\""; // double quote
xmlCode['&'] = "&"; // ampersand
xmlCode['<'] = "<"; // lower than
xmlCode['>'] = ">"; // greater than
}
/**
* <p>
* Encode the given text into xml.
* </p>
*
* @param string the text to encode
* @return the encoded string
*/
public static String encoderXML(String string) {
if (string == null) {
return "";
}
int n = string.length();
char character;
String xmlchar;
StringBuffer buffer = new StringBuffer();
// loop over all the characters of the String.
for (int i = 0; i < n; i++) {
character = string.charAt(i);
// the xmlcode of these characters are added to a StringBuffer
// one by one
try {
xmlchar = xmlCode[character];
if (xmlchar == null) {
buffer.append(character);
} else {
buffer.append(xmlCode[character]);
}
} catch (ArrayIndexOutOfBoundsException aioobe) {
buffer.append(character);
}
}
return buffer.toString();
}
// /**
// * 测试方法
// */
// public static void main(String[] args) throws Exception {
//
// String file = "E:/测试导出数据.xlsx";
//
// ExcelWriter writer = new ExcelWriter() {
// @Override
// public void generate() throws Exception {
//
// // 电子表格开始
// this.beginSheet();
//
// for (int rownum = 0; rownum < 100; rownum++) {
// // 插入新行
// this.insertRow(rownum);
//
// // 建立新单元格,索引值从0开始,表示第一列
// this.createCell(0, "第 " + rownum + " 行");
// this.createCell(1, 34343.123456789);
// this.createCell(2, "23.67%");
// this.createCell(3, "12:12:23");
// this.createCell(4, "2014-10-11 12:12:23");
// this.createCell(5, "true");
// this.createCell(6, "false");
//
// // 结束行
// this.endRow();
// }
//
// // 电子表格结束
// this.endSheet();
// }
// };
// writer.process(file);
// }
}

View File

@@ -24,7 +24,7 @@ public class MoneyType implements FieldType {
* 获取对象值(导入)
*/
@Override
public Object getValue(String val) {
public Object getValue(String val) {
return val == null ? StringUtils.EMPTY : StringUtils.replace(val, ",", StringUtils.EMPTY);
}
@@ -32,7 +32,7 @@ public class MoneyType implements FieldType {
* 获取对象值(导出)
*/
@Override
public String setValue(Object val) {
public String setValue(Object val) {
return val == null ? StringUtils.EMPTY : nf.format(val);
}
@@ -40,7 +40,7 @@ public class MoneyType implements FieldType {
* 获取对象值格式(导出)
*/
@Override
public String getDataFormat() {
public String getDataFormat() {
return "0.00";
}

View File

@@ -164,7 +164,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.sidebar-menu {padding:0 8px 0 7px;}
.sidebar-menu li>a>.pull-right-container {left:0;}
.sidebar-menu .treeview-item.active > a {color:#1890ff;background-color:#e7f4ff;border-right:0;border-radius:6px;}
.sidebar-menu .treeview-item.active>a {color:#1890ff;background-color:#e7f4ff;border-right:0;border-radius:6px;}
.content-wrapper, .right-side, body {background-color:#f0f2f5;}
@@ -189,7 +189,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.select2-container--default .select2-results__option--highlighted[aria-selected],
.wup_container .placeholder .webuploader-pick {background-color:#1890ff!important;border-color:#1890ff;}
.form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#1890ff;}
.form-unit {border-bottom: 1px solid #eee;}
.form-unit {border-bottom:1px solid #eee;}
.box-main>.box-header {border-bottom-color:#eeeeee;}
.box-main>.box-header .box-title .fa {color:#1890ff;}

View File

@@ -228,3 +228,6 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {background:#f5f5f5;}
.ui-jqgrid tr.ui-state-highlight.ui-row-ltr td {background-color:#ecf9ff;}
/* .ui-jqgrid tr.ui-row-ltr td {border-right:0!important;} 解开注释,可去除表格单元格的竖边框线 */
.ui-jqgrid .ui-jqgrid-frozen .ui-jqgrid-htable th div {height:46px!important;}
.ui-jqgrid .ui-jqgrid-htable th div {padding:15px 0 15px 2px;}
.ui-jqgrid tr.jqgrow td {height: 49px;}

View File

@@ -164,7 +164,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.sidebar-menu {padding:0 8px 0 7px;}
.sidebar-menu li>a>.pull-right-container {left:0;}
.sidebar-menu .treeview-item.active > a {color:#2a50ec;background-color:#edf2fc;border-right:0;border-radius:6px;}
.sidebar-menu .treeview-item.active>a {color:#2a50ec;background-color:#edf2fc;border-right:0;border-radius:6px;}
.content-wrapper, .right-side, body {background-color:#f0f2f5;}
@@ -189,7 +189,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.select2-container--default .select2-results__option--highlighted[aria-selected],
.wup_container .placeholder .webuploader-pick {background-color:#1e5edb!important;border-color:#1e5edb!important;}
.form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#1e5edb;}
.form-unit {border-bottom: 1px solid #eee;}
.form-unit {border-bottom:1px solid #eee;}
.box-main>.box-header {border-bottom-color:#eeeeee;}
.box-main>.box-header .box-title .fa {color:#1e5edb;}

View File

@@ -228,3 +228,6 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {background:#f5f5f5;}
.ui-jqgrid tr.ui-state-highlight.ui-row-ltr td {background-color:#f0f5ff;}
/* .ui-jqgrid tr.ui-row-ltr td {border-right:0!important;} 解开注释,可去除表格单元格的竖边框线 */
.ui-jqgrid .ui-jqgrid-frozen .ui-jqgrid-htable th div {height:46px!important;}
.ui-jqgrid .ui-jqgrid-htable th div {padding:15px 0 15px 2px;}
.ui-jqgrid tr.jqgrow td {height: 49px;}

View File

@@ -289,6 +289,9 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {background:#222;}
.ui-jqgrid tr.ui-state-highlight.ui-row-ltr td {background-color:#1f1f1f;}
/* .ui-jqgrid tr.ui-row-ltr td {border-right:0!important;} 解开注释,可去除表格单元格的竖边框线 */
.ui-jqgrid .ui-jqgrid-frozen .ui-jqgrid-htable th div {height:46px!important;}
.ui-jqgrid .ui-jqgrid-htable th div {padding:15px 0 15px 2px;}
.ui-jqgrid tr.jqgrow td {height: 49px;}
.ui-jqgrid .frozen-left th.ui-th-ltr, .ui-jqgrid .frozen-left tr.ui-row-ltr td {border-right-color:#333}
.ui-jqgrid .frozen-right th.ui-th-ltr, .ui-jqgrid .frozen-right tr.ui-row-ltr td {border-left-color:#333}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -1,752 +0,0 @@
/*!
* jQuery Migrate - v1.4.1 - 2016-05-19
* Copyright jQuery Foundation and other contributors
*/
(function( jQuery, window, undefined ) {
// See http://bugs.jquery.com/ticket/13335
// "use strict";
jQuery.migrateVersion = "1.4.1";
var warnedAbout = {};
// List of warnings already given; public read only
jQuery.migrateWarnings = [];
// Set to true to prevent console output; migrateWarnings still maintained
// jQuery.migrateMute = false;
// Show a message on the console so devs know we're active
//if ( window.console && window.console.log ) {
// window.console.log( "JQMIGRATE: Migrate is installed" +
// ( jQuery.migrateMute ? "" : " with logging active" ) +
// ", version " + jQuery.migrateVersion );
//}
// Set to false to disable traces that appear with warnings
if ( jQuery.migrateTrace === undefined ) {
jQuery.migrateTrace = true;
}
// Forget any warnings we've already given; public
jQuery.migrateReset = function() {
warnedAbout = {};
jQuery.migrateWarnings.length = 0;
};
function migrateWarn( msg) {
var console = window.console;
if ( !warnedAbout[ msg ] ) {
warnedAbout[ msg ] = true;
jQuery.migrateWarnings.push( msg );
if ( console && console.warn && !jQuery.migrateMute ) {
console.warn( "JQMIGRATE: " + msg );
if ( jQuery.migrateTrace && console.trace ) {
console.trace();
}
}
}
}
function migrateWarnProp( obj, prop, value, msg ) {
if ( Object.defineProperty ) {
// On ES5 browsers (non-oldIE), warn if the code tries to get prop;
// allow property to be overwritten in case some other plugin wants it
try {
Object.defineProperty( obj, prop, {
configurable: true,
enumerable: true,
get: function() {
migrateWarn( msg );
return value;
},
set: function( newValue ) {
migrateWarn( msg );
value = newValue;
}
});
return;
} catch( err ) {
// IE8 is a dope about Object.defineProperty, can't warn there
}
}
// Non-ES5 (or broken) browser; just set the property
jQuery._definePropertyBroken = true;
obj[ prop ] = value;
}
if ( document.compatMode === "BackCompat" ) {
// jQuery has never supported or tested Quirks Mode
migrateWarn( "jQuery is not compatible with Quirks Mode" );
}
var attrFn = jQuery( "<input/>", { size: 1 } ).attr("size") && jQuery.attrFn,
oldAttr = jQuery.attr,
valueAttrGet = jQuery.attrHooks.value && jQuery.attrHooks.value.get ||
function() { return null; },
valueAttrSet = jQuery.attrHooks.value && jQuery.attrHooks.value.set ||
function() { return undefined; },
rnoType = /^(?:input|button)$/i,
rnoAttrNodeType = /^[238]$/,
rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
ruseDefault = /^(?:checked|selected)$/i;
// jQuery.attrFn
migrateWarnProp( jQuery, "attrFn", attrFn || {}, "jQuery.attrFn is deprecated" );
jQuery.attr = function( elem, name, value, pass ) {
var lowerName = name.toLowerCase(),
nType = elem && elem.nodeType;
if ( pass ) {
// Since pass is used internally, we only warn for new jQuery
// versions where there isn't a pass arg in the formal params
if ( oldAttr.length < 4 ) {
migrateWarn("jQuery.fn.attr( props, pass ) is deprecated");
}
if ( elem && !rnoAttrNodeType.test( nType ) &&
(attrFn ? name in attrFn : jQuery.isFunction(jQuery.fn[name])) ) {
return jQuery( elem )[ name ]( value );
}
}
// Warn if user tries to set `type`, since it breaks on IE 6/7/8; by checking
// for disconnected elements we don't warn on $( "<button>", { type: "button" } ).
if ( name === "type" && value !== undefined && rnoType.test( elem.nodeName ) && elem.parentNode ) {
migrateWarn("Can't change the 'type' of an input or button in IE 6/7/8");
}
// Restore boolHook for boolean property/attribute synchronization
if ( !jQuery.attrHooks[ lowerName ] && rboolean.test( lowerName ) ) {
jQuery.attrHooks[ lowerName ] = {
get: function( elem, name ) {
// Align boolean attributes with corresponding properties
// Fall back to attribute presence where some booleans are not supported
var attrNode,
property = jQuery.prop( elem, name );
return property === true || typeof property !== "boolean" &&
( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
name.toLowerCase() :
undefined;
},
set: function( elem, value, name ) {
var propName;
if ( value === false ) {
// Remove boolean attributes when set to false
jQuery.removeAttr( elem, name );
} else {
// value is true since we know at this point it's type boolean and not false
// Set boolean attributes to the same name and set the DOM property
propName = jQuery.propFix[ name ] || name;
if ( propName in elem ) {
// Only set the IDL specifically if it already exists on the element
elem[ propName ] = true;
}
elem.setAttribute( name, name.toLowerCase() );
}
return name;
}
};
// Warn only for attributes that can remain distinct from their properties post-1.9
if ( ruseDefault.test( lowerName ) ) {
migrateWarn( "jQuery.fn.attr('" + lowerName + "') might use property instead of attribute" );
}
}
return oldAttr.call( jQuery, elem, name, value );
};
// attrHooks: value
jQuery.attrHooks.value = {
get: function( elem, name ) {
var nodeName = ( elem.nodeName || "" ).toLowerCase();
if ( nodeName === "button" ) {
return valueAttrGet.apply( this, arguments );
}
if ( nodeName !== "input" && nodeName !== "option" ) {
migrateWarn("jQuery.fn.attr('value') no longer gets properties");
}
return name in elem ?
elem.value :
null;
},
set: function( elem, value ) {
var nodeName = ( elem.nodeName || "" ).toLowerCase();
if ( nodeName === "button" ) {
return valueAttrSet.apply( this, arguments );
}
if ( nodeName !== "input" && nodeName !== "option" ) {
migrateWarn("jQuery.fn.attr('value', val) no longer sets properties");
}
// Does not return so that setAttribute is also used
elem.value = value;
}
};
var matched, browser,
oldInit = jQuery.fn.init,
oldFind = jQuery.find,
oldParseJSON = jQuery.parseJSON,
rspaceAngle = /^\s*</,
rattrHashTest = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,
rattrHashGlob = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g,
// Note: XSS check is done below after string is trimmed
rquickExpr = /^([^<]*)(<[\w\W]+>)([^>]*)$/;
// $(html) "looks like html" rule change
jQuery.fn.init = function( selector, context, rootjQuery ) {
var match, ret;
if ( selector && typeof selector === "string" ) {
if ( !jQuery.isPlainObject( context ) &&
(match = rquickExpr.exec( jQuery.trim( selector ) )) && match[ 0 ] ) {
// This is an HTML string according to the "old" rules; is it still?
if ( !rspaceAngle.test( selector ) ) {
migrateWarn("$(html) HTML strings must start with '<' character");
}
if ( match[ 3 ] ) {
migrateWarn("$(html) HTML text after last tag is ignored");
}
// Consistently reject any HTML-like string starting with a hash (gh-9521)
// Note that this may break jQuery 1.6.x code that otherwise would work.
if ( match[ 0 ].charAt( 0 ) === "#" ) {
migrateWarn("HTML string cannot start with a '#' character");
jQuery.error("JQMIGRATE: Invalid selector string (XSS)");
}
// Now process using loose rules; let pre-1.8 play too
// Is this a jQuery context? parseHTML expects a DOM element (#178)
if ( context && context.context && context.context.nodeType ) {
context = context.context;
}
if ( jQuery.parseHTML ) {
return oldInit.call( this,
jQuery.parseHTML( match[ 2 ], context && context.ownerDocument ||
context || document, true ), context, rootjQuery );
}
}
}
ret = oldInit.apply( this, arguments );
// Fill in selector and context properties so .live() works
if ( selector && selector.selector !== undefined ) {
// A jQuery object, copy its properties
ret.selector = selector.selector;
ret.context = selector.context;
} else {
ret.selector = typeof selector === "string" ? selector : "";
if ( selector ) {
ret.context = selector.nodeType? selector : context || document;
}
}
return ret;
};
jQuery.fn.init.prototype = jQuery.fn;
jQuery.find = function( selector ) {
var args = Array.prototype.slice.call( arguments );
// Support: PhantomJS 1.x
// String#match fails to match when used with a //g RegExp, only on some strings
if ( typeof selector === "string" && rattrHashTest.test( selector ) ) {
// The nonstandard and undocumented unquoted-hash was removed in jQuery 1.12.0
// First see if qS thinks it's a valid selector, if so avoid a false positive
try {
document.querySelector( selector );
} catch ( err1 ) {
// Didn't *look* valid to qSA, warn and try quoting what we think is the value
selector = selector.replace( rattrHashGlob, function( _, attr, op, value ) {
return "[" + attr + op + "\"" + value + "\"]";
} );
// If the regexp *may* have created an invalid selector, don't update it
// Note that there may be false alarms if selector uses jQuery extensions
try {
document.querySelector( selector );
migrateWarn( "Attribute selector with '#' must be quoted: " + args[ 0 ] );
args[ 0 ] = selector;
} catch ( err2 ) {
migrateWarn( "Attribute selector with '#' was not fixed: " + args[ 0 ] );
}
}
}
return oldFind.apply( this, args );
};
// Copy properties attached to original jQuery.find method (e.g. .attr, .isXML)
var findProp;
for ( findProp in oldFind ) {
if ( Object.prototype.hasOwnProperty.call( oldFind, findProp ) ) {
jQuery.find[ findProp ] = oldFind[ findProp ];
}
}
// Let $.parseJSON(falsy_value) return null
jQuery.parseJSON = function( json ) {
if ( !json ) {
migrateWarn("jQuery.parseJSON requires a valid JSON string");
return null;
}
return oldParseJSON.apply( this, arguments );
};
jQuery.uaMatch = function( ua ) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
/(webkit)[ \/]([\w.]+)/.exec( ua ) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
/(msie) ([\w.]+)/.exec( ua ) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
// Don't clobber any existing jQuery.browser in case it's different
if ( !jQuery.browser ) {
matched = jQuery.uaMatch( navigator.userAgent );
browser = {};
if ( matched.browser ) {
browser[ matched.browser ] = true;
browser.version = matched.version;
}
// Chrome is Webkit, but Webkit is also Safari.
if ( browser.chrome ) {
browser.webkit = true;
} else if ( browser.webkit ) {
browser.safari = true;
}
jQuery.browser = browser;
}
// Warn if the code tries to get jQuery.browser
migrateWarnProp( jQuery, "browser", jQuery.browser, "jQuery.browser is deprecated" );
// jQuery.boxModel deprecated in 1.3, jQuery.support.boxModel deprecated in 1.7
jQuery.boxModel = jQuery.support.boxModel = (document.compatMode === "CSS1Compat");
migrateWarnProp( jQuery, "boxModel", jQuery.boxModel, "jQuery.boxModel is deprecated" );
migrateWarnProp( jQuery.support, "boxModel", jQuery.support.boxModel, "jQuery.support.boxModel is deprecated" );
jQuery.sub = function() {
function jQuerySub( selector, context ) {
return new jQuerySub.fn.init( selector, context );
}
jQuery.extend( true, jQuerySub, this );
jQuerySub.superclass = this;
jQuerySub.fn = jQuerySub.prototype = this();
jQuerySub.fn.constructor = jQuerySub;
jQuerySub.sub = this.sub;
jQuerySub.fn.init = function init( selector, context ) {
var instance = jQuery.fn.init.call( this, selector, context, rootjQuerySub );
return instance instanceof jQuerySub ?
instance :
jQuerySub( instance );
};
jQuerySub.fn.init.prototype = jQuerySub.fn;
var rootjQuerySub = jQuerySub(document);
migrateWarn( "jQuery.sub() is deprecated" );
return jQuerySub;
};
// The number of elements contained in the matched element set
jQuery.fn.size = function() {
migrateWarn( "jQuery.fn.size() is deprecated; use the .length property" );
return this.length;
};
var internalSwapCall = false;
// If this version of jQuery has .swap(), don't false-alarm on internal uses
if ( jQuery.swap ) {
jQuery.each( [ "height", "width", "reliableMarginRight" ], function( _, name ) {
var oldHook = jQuery.cssHooks[ name ] && jQuery.cssHooks[ name ].get;
if ( oldHook ) {
jQuery.cssHooks[ name ].get = function() {
var ret;
internalSwapCall = true;
ret = oldHook.apply( this, arguments );
internalSwapCall = false;
return ret;
};
}
});
}
jQuery.swap = function( elem, options, callback, args ) {
var ret, name,
old = {};
if ( !internalSwapCall ) {
migrateWarn( "jQuery.swap() is undocumented and deprecated" );
}
// Remember the old values, and insert the new ones
for ( name in options ) {
old[ name ] = elem.style[ name ];
elem.style[ name ] = options[ name ];
}
ret = callback.apply( elem, args || [] );
// Revert the old values
for ( name in options ) {
elem.style[ name ] = old[ name ];
}
return ret;
};
// Ensure that $.ajax gets the new parseJSON defined in core.js
jQuery.ajaxSetup({
converters: {
"text json": jQuery.parseJSON
}
});
var oldFnData = jQuery.fn.data;
jQuery.fn.data = function( name ) {
var ret, evt,
elem = this[0];
// Handles 1.7 which has this behavior and 1.8 which doesn't
if ( elem && name === "events" && arguments.length === 1 ) {
ret = jQuery.data( elem, name );
evt = jQuery._data( elem, name );
if ( ( ret === undefined || ret === evt ) && evt !== undefined ) {
migrateWarn("Use of jQuery.fn.data('events') is deprecated");
return evt;
}
}
return oldFnData.apply( this, arguments );
};
var rscriptType = /\/(java|ecma)script/i;
// Since jQuery.clean is used internally on older versions, we only shim if it's missing
if ( !jQuery.clean ) {
jQuery.clean = function( elems, context, fragment, scripts ) {
// Set context per 1.8 logic
context = context || document;
context = !context.nodeType && context[0] || context;
context = context.ownerDocument || context;
migrateWarn("jQuery.clean() is deprecated");
var i, elem, handleScript, jsTags,
ret = [];
jQuery.merge( ret, jQuery.buildFragment( elems, context ).childNodes );
// Complex logic lifted directly from jQuery 1.8
if ( fragment ) {
// Special handling of each script element
handleScript = function( elem ) {
// Check if we consider it executable
if ( !elem.type || rscriptType.test( elem.type ) ) {
// Detach the script and store it in the scripts array (if provided) or the fragment
// Return truthy to indicate that it has been handled
return scripts ?
scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :
fragment.appendChild( elem );
}
};
for ( i = 0; (elem = ret[i]) != null; i++ ) {
// Check if we're done after handling an executable script
if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) {
// Append to fragment and handle embedded scripts
fragment.appendChild( elem );
if ( typeof elem.getElementsByTagName !== "undefined" ) {
// handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration
jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript );
// Splice the scripts into ret after their former ancestor and advance our index beyond them
ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
i += jsTags.length;
}
}
}
}
return ret;
};
}
var eventAdd = jQuery.event.add,
eventRemove = jQuery.event.remove,
eventTrigger = jQuery.event.trigger,
oldToggle = jQuery.fn.toggle,
oldLive = jQuery.fn.live,
oldDie = jQuery.fn.die,
oldLoad = jQuery.fn.load,
ajaxEvents = "ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",
rajaxEvent = new RegExp( "\\b(?:" + ajaxEvents + ")\\b" ),
rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,
hoverHack = function( events ) {
if ( typeof( events ) !== "string" || jQuery.event.special.hover ) {
return events;
}
if ( rhoverHack.test( events ) ) {
migrateWarn("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'");
}
return events && events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
};
// Event props removed in 1.9, put them back if needed; no practical way to warn them
if ( jQuery.event.props && jQuery.event.props[ 0 ] !== "attrChange" ) {
jQuery.event.props.unshift( "attrChange", "attrName", "relatedNode", "srcElement" );
}
// Undocumented jQuery.event.handle was "deprecated" in jQuery 1.7
if ( jQuery.event.dispatch ) {
migrateWarnProp( jQuery.event, "handle", jQuery.event.dispatch, "jQuery.event.handle is undocumented and deprecated" );
}
// Support for 'hover' pseudo-event and ajax event warnings
jQuery.event.add = function( elem, types, handler, data, selector ){
if ( elem !== document && rajaxEvent.test( types ) ) {
migrateWarn( "AJAX events should be attached to document: " + types );
}
eventAdd.call( this, elem, hoverHack( types || "" ), handler, data, selector );
};
jQuery.event.remove = function( elem, types, handler, selector, mappedTypes ){
eventRemove.call( this, elem, hoverHack( types ) || "", handler, selector, mappedTypes );
};
jQuery.each( [ "load", "unload", "error" ], function( _, name ) {
jQuery.fn[ name ] = function() {
var args = Array.prototype.slice.call( arguments, 0 );
// If this is an ajax load() the first arg should be the string URL;
// technically this could also be the "Anything" arg of the event .load()
// which just goes to show why this dumb signature has been deprecated!
// jQuery custom builds that exclude the Ajax module justifiably die here.
if ( name === "load" && typeof args[ 0 ] === "string" ) {
return oldLoad.apply( this, args );
}
migrateWarn( "jQuery.fn." + name + "() is deprecated" );
args.splice( 0, 0, name );
if ( arguments.length ) {
return this.bind.apply( this, args );
}
// Use .triggerHandler here because:
// - load and unload events don't need to bubble, only applied to window or image
// - error event should not bubble to window, although it does pre-1.7
// See http://bugs.jquery.com/ticket/11820
this.triggerHandler.apply( this, args );
return this;
};
});
jQuery.fn.toggle = function( fn, fn2 ) {
// Don't mess with animation or css toggles
if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) {
return oldToggle.apply( this, arguments );
}
migrateWarn("jQuery.fn.toggle(handler, handler...) is deprecated");
// Save reference to arguments for access in closure
var args = arguments,
guid = fn.guid || jQuery.guid++,
i = 0,
toggler = function( event ) {
// Figure out which function to execute
var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
// Make sure that clicks stop
event.preventDefault();
// and execute the function
return args[ lastToggle ].apply( this, arguments ) || false;
};
// link all the functions, so any of them can unbind this click handler
toggler.guid = guid;
while ( i < args.length ) {
args[ i++ ].guid = guid;
}
return this.click( toggler );
};
jQuery.fn.live = function( types, data, fn ) {
migrateWarn("jQuery.fn.live() is deprecated");
if ( oldLive ) {
return oldLive.apply( this, arguments );
}
jQuery( this.context ).on( types, this.selector, data, fn );
return this;
};
jQuery.fn.die = function( types, fn ) {
migrateWarn("jQuery.fn.die() is deprecated");
if ( oldDie ) {
return oldDie.apply( this, arguments );
}
jQuery( this.context ).off( types, this.selector || "**", fn );
return this;
};
// Turn global events into document-triggered events
jQuery.event.trigger = function( event, data, elem, onlyHandlers ){
if ( !elem && !rajaxEvent.test( event ) ) {
migrateWarn( "Global events are undocumented and deprecated" );
}
return eventTrigger.call( this, event, data, elem || document, onlyHandlers );
};
jQuery.each( ajaxEvents.split("|"),
function( _, name ) {
jQuery.event.special[ name ] = {
setup: function() {
var elem = this;
// The document needs no shimming; must be !== for oldIE
if ( elem !== document ) {
jQuery.event.add( document, name + "." + jQuery.guid, function() {
jQuery.event.trigger( name, Array.prototype.slice.call( arguments, 1 ), elem, true );
});
jQuery._data( this, name, jQuery.guid++ );
}
return false;
},
teardown: function() {
if ( this !== document ) {
jQuery.event.remove( document, name + "." + jQuery._data( this, name ) );
}
return false;
}
};
}
);
jQuery.event.special.ready = {
setup: function() {
if ( this === document ) {
migrateWarn( "'ready' event is deprecated" );
}
}
};
var oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack,
oldFnFind = jQuery.fn.find;
jQuery.fn.andSelf = function() {
migrateWarn("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()");
return oldSelf.apply( this, arguments );
};
jQuery.fn.find = function( selector ) {
var ret = oldFnFind.apply( this, arguments );
ret.context = this.context;
ret.selector = this.selector ? this.selector + " " + selector : selector;
return ret;
};
// jQuery 1.6 did not support Callbacks, do not warn there
if ( jQuery.Callbacks ) {
var oldDeferred = jQuery.Deferred,
tuples = [
// action, add listener, callbacks, .then handlers, final state
[ "resolve", "done", jQuery.Callbacks("once memory"),
jQuery.Callbacks("once memory"), "resolved" ],
[ "reject", "fail", jQuery.Callbacks("once memory"),
jQuery.Callbacks("once memory"), "rejected" ],
[ "notify", "progress", jQuery.Callbacks("memory"),
jQuery.Callbacks("memory") ]
];
jQuery.Deferred = function( func ) {
var deferred = oldDeferred(),
promise = deferred.promise();
deferred.pipe = promise.pipe = function( /* fnDone, fnFail, fnProgress */ ) {
var fns = arguments;
migrateWarn( "deferred.pipe() is deprecated" );
return jQuery.Deferred(function( newDefer ) {
jQuery.each( tuples, function( i, tuple ) {
var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
// deferred.done(function() { bind to newDefer or newDefer.resolve })
// deferred.fail(function() { bind to newDefer or newDefer.reject })
// deferred.progress(function() { bind to newDefer or newDefer.notify })
deferred[ tuple[1] ](function() {
var returned = fn && fn.apply( this, arguments );
if ( returned && jQuery.isFunction( returned.promise ) ) {
returned.promise()
.done( newDefer.resolve )
.fail( newDefer.reject )
.progress( newDefer.notify );
} else {
newDefer[ tuple[ 0 ] + "With" ](
this === promise ? newDefer.promise() : this,
fn ? [ returned ] : arguments
);
}
});
});
fns = null;
}).promise();
};
deferred.isResolved = function() {
migrateWarn( "deferred.isResolved is deprecated" );
return deferred.state() === "resolved";
};
deferred.isRejected = function() {
migrateWarn( "deferred.isRejected is deprecated" );
return deferred.state() === "rejected";
};
if ( func ) {
func.call( deferred, deferred );
}
return deferred;
};
}
})( jQuery, window );

File diff suppressed because one or more lines are too long

View File

@@ -1,58 +1,43 @@
/**
@Name: layer
**/
html #layuicss-layer{display:none;position:absolute;width:1989px;}
/* *html{background-image: url(about:blank); background-attachment: fixed;} */
html #layuicss-layer{display: none; position: absolute; width: 1989px;}
/* common */
.layui-layer-shade, .layui-layer{position:fixed; _position:absolute; pointer-events: auto;}
.layui-layer-shade{top:0; left:0; width:100%; height:100%; _height:expression(document.body.offsetHeight+"px");}
.layui-layer{-webkit-overflow-scrolling: touch;}
.layui-layer{top:150px; left: 0; margin:0; padding:0; background-color:#fff; -webkit-background-clip: content; border-radius: 3px; box-shadow: 1px 1px 50px rgba(0,0,0,.3);}
.layui-layer-shade, .layui-layer{position:fixed;_position:absolute;pointer-events:auto;}
.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px");}
.layui-layer{-webkit-overflow-scrolling:touch;}
.layui-layer{top:150px;left:0;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;border-radius:3px;box-shadow:1px 1px 50px rgba(0,0,0,.3);}
.layui-layer-close{position:absolute;}
.layui-layer-content{position:relative; overflow: hidden;}
.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-content{position:relative;overflow:hidden;}
.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-btn a{display:inline-block;*display:inline;*zoom:1;vertical-align:top;}
.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;}
.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;}
/* 动画 */
.layer-anim{-webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-animation-duration:.3s; animation-duration:.3s;}
.layer-anim{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s;}
@-webkit-keyframes layer-bounceIn { /* 默认 */
0% {opacity: 0; -webkit-transform: scale(.5); transform: scale(.5)}
100% {opacity: 1; -webkit-transform: scale(1); transform: scale(1)}
@-webkit-keyframes layer-bounceIn {
0% {opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}
100% {opacity:1;-webkit-transform:scale(1);transform:scale(1)}
}
@keyframes layer-bounceIn {
0% {opacity: 0; -webkit-transform: scale(.5); -ms-transform: scale(.5); transform: scale(.5)}
100% {opacity: 1; -webkit-transform: scale(1); -ms-transform: scale(1); transform: scale(1)}
0% {opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}
100% {opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}
}
.layer-anim-00{-webkit-animation-name: layer-bounceIn;animation-name: layer-bounceIn}
.layer-anim-00{-webkit-animation-name:layer-bounceIn;animation-name:layer-bounceIn}
@-webkit-keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:layer-zoomInDown;animation-name:layer-zoomInDown}
@-webkit-keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:layer-fadeInUpBig;animation-name:layer-fadeInUpBig}
@-webkit-keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:layer-zoomInLeft;animation-name:layer-zoomInLeft}
@-webkit-keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg);transform:translateX(0px) rotate(0deg)}}@keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg);-ms-transform:translateX(0px) rotate(0deg);transform:translateX(0px) rotate(0deg)}}.layer-anim-04{-webkit-animation-name:layer-rollIn;animation-name:layer-rollIn}
@keyframes layer-fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:layer-fadeIn;animation-name:layer-fadeIn}
@-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}}
/* 标题栏 */
.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: 15px; 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-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:20px;*right:0;top:20px;font-size:0;line-height:initial;}
.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:19px;font-size:12px;_overflow:hidden;}
.layui-layer-setwin .layui-layer-min{display:none!important}
.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#888;cursor:pointer;_overflow:hidden;}
.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA;}
@@ -62,130 +47,109 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
.layui-layer-setwin .layui-layer-maxmin:hover{background-size:19px;}
.layui-layer-setwin .layui-layer-close1{background:url(close.svg) center;cursor:pointer;}
.layui-layer-setwin .layui-layer-close1:hover{background-size:19px;}
.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{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-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: 3px; font-weight:400; cursor:pointer; text-decoration: none;}
.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-l{text-align: left;}
.layui-layer-btn-c{text-align: center;}
.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:3px;font-weight:400;cursor:pointer;text-decoration:none;}
.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-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-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:29px;left:22px;_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-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-page .layui-layer-content{position:relative; overflow:auto;}
.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:30px 30px 30px 70px;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%; border-radius: 3px;}
.layui-layer-iframe iframe{display:block;width:100%;border-radius:3px;}
.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-tips{background: none; box-shadow:none; border:none;}
.layui-layer-tips .layui-layer-content{position: relative; overflow:visible; line-height: 22px; min-width: 12px; padding: 8px 15px; font-size: 12px; _float:left; border-radius: 3px; 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;}
.layui-layer-tips i.layui-layer-TipsG{ position:absolute; width:0; height:0; border-width:8px; border-color:transparent; border-style:dashed; *overflow:hidden;}
.layui-layer-tips i.layui-layer-TipsT, .layui-layer-tips i.layui-layer-TipsB{left:5px; border-right-style:solid; border-right-color: #000;}
.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-tips{background:none;box-shadow:none;border:none;}
.layui-layer-tips .layui-layer-content{position:relative;overflow:visible;line-height:22px;min-width:12px;padding:8px 15px;font-size:12px;_float:left;border-radius:3px;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;}
.layui-layer-tips i.layui-layer-TipsG{ position:absolute; width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden;}
.layui-layer-tips i.layui-layer-TipsT, .layui-layer-tips i.layui-layer-TipsB{left:5px;border-right-style:solid;border-right-color:#000;}
.layui-layer-tips i.layui-layer-TipsT{bottom:-8px;}
.layui-layer-tips i.layui-layer-TipsB{top:-8px;}
.layui-layer-tips i.layui-layer-TipsR, .layui-layer-tips i.layui-layer-TipsL{top: 5px; border-bottom-style:solid; border-bottom-color: #000;}
.layui-layer-tips i.layui-layer-TipsR, .layui-layer-tips i.layui-layer-TipsL{top:5px;border-bottom-style:solid;border-bottom-color:#000;}
.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;}
.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 a{background: #fff; border-color: #E9E7E7; color: #333;}
.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 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-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;}
/**
@Name: layer拓展样式
*/
.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-btn{padding-top: 0;}
.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-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{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-tabmain{line-height:24px;clear:both;}
.layui-layer-tabmain .layui-layer-tabli{display:none;}
.layui-layer-tabmain .layui-layer-tabli.layui-this{display: block;}
.layui-layer-tabmain .layui-layer-tabli.layui-this{display:block;}
/* photo模式 */
.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{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;}
.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 *{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;}
/* 关闭动画 */
@-webkit-keyframes layer-bounceOut {
100% {opacity: 0; -webkit-transform: scale(.7); transform: scale(.7)}
30% {-webkit-transform: scale(1.05); transform: scale(1.05)}
0% {-webkit-transform: scale(1); transform: scale(1);}
100% {opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}
30% {-webkit-transform:scale(1.05);transform:scale(1.05)}
0% {-webkit-transform:scale(1);transform:scale(1);}
}
@keyframes layer-bounceOut {
100% {opacity: 0; -webkit-transform: scale(.7); -ms-transform: scale(.7); transform: scale(.7);}
30% {-webkit-transform: scale(1.05); -ms-transform: scale(1.05); transform: scale(1.05);}
0% {-webkit-transform: scale(1); -ms-transform: scale(1);transform: scale(1);}
100% {opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7);}
30% {-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05);}
0% {-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);}
}
.layer-anim-close{-webkit-animation-name: layer-bounceOut; animation-name: layer-bounceOut; -webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-animation-duration:.2s; animation-duration:.2s;}
.layer-anim-close{-webkit-animation-name:layer-bounceOut;animation-name:layer-bounceOut;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s;}
/* @media screen and (max-width: 1100px) { 没有标题的时候,关闭按钮显示不全 */
/* .layui-layer-iframe{overflow-y: auto; -webkit-overflow-scrolling: touch;} */
/* } */
/* ThinkGem */
.layui-layer-title {font-weight:bold;font-size:15px;background:#fff;height:45px;line-height:45px;}
.layui-layer-title {font-size:16px;background:#fff;height:57px;line-height:57px;}
.layui-layer-page .layui-layer-content {overflow-x:hidden;}
.layui-layer-page .layui-layer-content .form-file{padding-top:4px;}
.layui-layer-page .layui-layer-btn, .layui-layer-iframe .layui-layer-btn {
padding-top:3px;padding-bottom:10px;}
.layui-layer-btn .layui-layer-btn0{border-color:#367fa9;background-color:#367fa9;}
.layui-layer-btn a {height:auto;padding:0 12px;font-size:13px;background-color:#f4f4f4;}
.layui-layer.toast-top-full-width {min-width: 60%;}
.layui-layer-page .layui-layer-btn, .layui-layer-iframe .layui-layer-btn {padding-top:3px;padding-bottom:10px;}
.layui-layer-btn .layui-layer-btn0{border-color:#1e5edb;background-color:#1e5edb;}
.layui-layer-btn a {height:auto;padding:1px 14px;font-size:14px;background-color:#f4f4f4;}
.layui-layer.toast-top-full-width {min-width:60%;}
.skin-dark .layui-layer {background:#1a1a1a;color:#ddd;}
.skin-dark .layui-layer-title {background:#262626;border-bottom-color:#484848;color:#bcbcbc;}

View File

@@ -12,7 +12,7 @@
<category_index>0</category_index>
<zoom>1.0</zoom>
<x>0</x>
<y>7</y>
<y>0</y>
<default_color>
<r>128</r>
<g>128</g>
@@ -775,6 +775,22 @@
<physical_name>extend_i4</physical_name>
<type>decimal(p)</type>
</word>
<word>
<id>80cd53da9d5a1b19676537e590e20fa2793e902c</id>
<length>1000</length>
<decimal>null</decimal>
<array>false</array>
<array_dimension>null</array_dimension>
<unsigned>false</unsigned>
<zerofill>false</zerofill>
<binary>false</binary>
<args></args>
<char_semantics>false</char_semantics>
<description></description>
<logical_name>扩展 JSON</logical_name>
<physical_name>extend_json</physical_name>
<type>varchar(n)</type>
</word>
<word>
<id>ad6f9eff50476669df62b7601cbc3a2e0c905d36</id>
<length>500</length>
@@ -1256,7 +1272,7 @@
<type>varchar(n)</type>
</word>
<word>
<id>63772c051414452204e91e8d0dabd1dbfd640326</id>
<id>5887f9db78a9ebc7b23b9a163c6f68100257c0e5</id>
<length>767</length>
<decimal>null</decimal>
<array>false</array>
@@ -1896,7 +1912,7 @@
<type>decimal(p)</type>
</word>
<word>
<id>8f1564e5646071de508d4325f3cc7f62bdeede16</id>
<id>49ec595ac14253d7d25479f6f8c8a94da5a8ca13</id>
<length>767</length>
<decimal>null</decimal>
<array>false</array>
@@ -1912,7 +1928,7 @@
<type>nvarchar(n)</type>
</word>
<word>
<id>be17e27c1f73fe128f00468cc83953077b7e00a9</id>
<id>16c9c333062ea3614d2e044803b872676c8a5377</id>
<length>10</length>
<decimal>null</decimal>
<array>false</array>
@@ -1928,7 +1944,7 @@
<type>decimal(p)</type>
</word>
<word>
<id>b0bd388c14e5b2bbab9590f5247961a7edd9eb3b</id>
<id>a886757c87fb1e04c5f84b6a802e129baaec2ca6</id>
<length>767</length>
<decimal>null</decimal>
<array>false</array>
@@ -2282,7 +2298,7 @@
</color>
<connections>
<relation>
<id>b3360c18b956528f86538657fb259817fab21f34</id>
<id>bf0ac4b1588841d8f855c9d1030b492190b31adb</id>
<source>7f024bd90eec8d89290f4db163b3ea077d6ce26d</source>
<target>e9faab162f8d6a9f4bed0be95c9dbb56647656e1</target>
<source_xp>-1</source_xp>
@@ -2314,7 +2330,7 @@
<normal_column>
<id>7b648ef7efea218657b3201e0a0318986ff5e8cb</id>
<referenced_column>0d993b7470d7bde3d20e9c7f24d1811518cf44cc</referenced_column>
<relation>b3360c18b956528f86538657fb259817fab21f34</relation>
<relation>bf0ac4b1588841d8f855c9d1030b492190b31adb</relation>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -4622,7 +4638,7 @@
</color>
<connections>
<relation>
<id>221fc0bc73b3badd39d437e05f24a752587a8a48</id>
<id>86d964debc4ef630dc9ec2e2115ee2a2927df3d2</id>
<source>388faee80ae30bf2d261c383395ea538ac65d139</source>
<target>a64b64022c5b291e365f8bc84c6dcadd1a69b93f</target>
<source_xp>-1</source_xp>
@@ -4654,7 +4670,7 @@
<normal_column>
<id>a1ea205b23430d5e2419ab6fc7b81e6a1063b163</id>
<referenced_column>eb5d114785c793115e222f88cbce9d6cda0f1543</referenced_column>
<relation>221fc0bc73b3badd39d437e05f24a752587a8a48</relation>
<relation>86d964debc4ef630dc9ec2e2115ee2a2927df3d2</relation>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -4929,7 +4945,7 @@
</color>
<connections>
<relation>
<id>8b10442357d1561bb946b77f486c97d2673bde4b</id>
<id>1f10e7900c8bbfe93ffd36ad7cc6f8d8f0c7a2e0</id>
<source>02c2487dc0cf00bec5bb12635a6b2eaca8dce45b</source>
<target>7f024bd90eec8d89290f4db163b3ea077d6ce26d</target>
<source_xp>-1</source_xp>
@@ -5028,7 +5044,7 @@
<normal_column>
<id>f86eb0e3c56d958c2d1ee2c0ea77353b01b89973</id>
<referenced_column>f51ed54a54f6cd6b1d74072be62c808f6848470c</referenced_column>
<relation>8b10442357d1561bb946b77f486c97d2673bde4b</relation>
<relation>1f10e7900c8bbfe93ffd36ad7cc6f8d8f0c7a2e0</relation>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -5599,7 +5615,7 @@
</color>
<connections>
<relation>
<id>102c612ebec0dcaf6a4a4270ed4683aea7346293</id>
<id>f2b951b9ecd59350e7e2b1dbdc3bdaf651981042</id>
<source>7f024bd90eec8d89290f4db163b3ea077d6ce26d</source>
<target>388faee80ae30bf2d261c383395ea538ac65d139</target>
<source_xp>-1</source_xp>
@@ -5664,7 +5680,7 @@
<normal_column>
<id>dde1496bcd5d55330967cc24f53513e102a163c0</id>
<referenced_column>0d993b7470d7bde3d20e9c7f24d1811518cf44cc</referenced_column>
<relation>102c612ebec0dcaf6a4a4270ed4683aea7346293</relation>
<relation>f2b951b9ecd59350e7e2b1dbdc3bdaf651981042</relation>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -6382,7 +6398,7 @@
<referenced_complex_unique_key>null</referenced_complex_unique_key>
</relation>
<relation>
<id>52c8c967a2f0edf6dd988a9bb4cb00d6da008195</id>
<id>6917f16fcd1f020c33c9058293719d194ef610c6</id>
<source>7f024bd90eec8d89290f4db163b3ea077d6ce26d</source>
<target>18893974755ff1a6dc89f298885d6b0d571a8c7b</target>
<source_xp>-1</source_xp>
@@ -6447,7 +6463,7 @@
<normal_column>
<id>835faef487ae6874a525a8cb8ba19825f93091aa</id>
<referenced_column>0d993b7470d7bde3d20e9c7f24d1811518cf44cc</referenced_column>
<relation>52c8c967a2f0edf6dd988a9bb4cb00d6da008195</relation>
<relation>6917f16fcd1f020c33c9058293719d194ef610c6</relation>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -8596,6 +8612,39 @@
<decimal_size>0</decimal_size>
</sequence>
</normal_column>
<normal_column>
<word_id>80cd53da9d5a1b19676537e590e20fa2793e902c</word_id>
<id>42c5d8f490f69b93e77698efa030ca23988ae696</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
<physical_name></physical_name>
<type>varchar(n)</type>
<constraint></constraint>
<default_value></default_value>
<auto_increment>false</auto_increment>
<foreign_key>false</foreign_key>
<not_null>false</not_null>
<primary_key>false</primary_key>
<unique_key>false</unique_key>
<character_set></character_set>
<collation></collation>
<sequence>
<name></name>
<schema></schema>
<increment></increment>
<min_value></min_value>
<max_value></max_value>
<start></start>
<cache></cache>
<nocache>false</nocache>
<cycle>false</cycle>
<order>false</order>
<description></description>
<data_type></data_type>
<decimal_size>0</decimal_size>
</sequence>
</normal_column>
</columns>
</column_group>
<column_group>
@@ -8636,7 +8685,7 @@
</sequence>
</normal_column>
<normal_column>
<word_id>63772c051414452204e91e8d0dabd1dbfd640326</word_id>
<word_id>5887f9db78a9ebc7b23b9a163c6f68100257c0e5</word_id>
<id>e8d877396943acfec73023dba2c1c6e3d7802d62</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8669,7 +8718,7 @@
</sequence>
</normal_column>
<normal_column>
<word_id>be17e27c1f73fe128f00468cc83953077b7e00a9</word_id>
<word_id>16c9c333062ea3614d2e044803b872676c8a5377</word_id>
<id>23f973124aedd0244533f4e7b3b103c548b966be</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8702,7 +8751,7 @@
</sequence>
</normal_column>
<normal_column>
<word_id>b0bd388c14e5b2bbab9590f5247961a7edd9eb3b</word_id>
<word_id>a886757c87fb1e04c5f84b6a802e129baaec2ca6</word_id>
<id>984d5eac2b3221118a61655e4a5a49c78e0f0151</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8801,7 +8850,7 @@
</sequence>
</normal_column>
<normal_column>
<word_id>8f1564e5646071de508d4325f3cc7f62bdeede16</word_id>
<word_id>49ec595ac14253d7d25479f6f8c8a94da5a8ca13</word_id>
<id>618194ebfc8c6c42efcef3a4af0b8054f6af209b</id>
<description></description>
<unique_key_name></unique_key_name>

View File

@@ -63,6 +63,7 @@ CREATE TABLE js_cms_article_data
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (id)
);
@@ -136,6 +137,7 @@ CREATE TABLE js_cms_category
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (category_code)
);

View File

@@ -63,6 +63,7 @@ CREATE TABLE js_cms_article_data
extend_d2 datetime,
extend_d3 datetime,
extend_d4 datetime,
extend_json varchar(1000),
PRIMARY KEY (id)
);
@@ -136,6 +137,7 @@ CREATE TABLE js_cms_category
extend_d2 datetime,
extend_d3 datetime,
extend_d4 datetime,
extend_json varchar(1000),
PRIMARY KEY (category_code)
);

View File

@@ -63,6 +63,7 @@ CREATE TABLE [js_cms_article_data]
[extend_d2] datetime,
[extend_d3] datetime,
[extend_d4] datetime,
[extend_json] varchar(1000),
PRIMARY KEY ([id])
);
@@ -136,6 +137,7 @@ CREATE TABLE [js_cms_category]
[extend_d2] datetime,
[extend_d3] datetime,
[extend_d4] datetime,
[extend_json] varchar(1000),
PRIMARY KEY ([category_code])
);

View File

@@ -64,6 +64,7 @@ CREATE TABLE js_cms_article_data
extend_d2 datetime COMMENT '扩展 Date 2',
extend_d3 datetime COMMENT '扩展 Date 3',
extend_d4 datetime COMMENT '扩展 Date 4',
extend_json varchar(1000) COMMENT '扩展 JSON',
PRIMARY KEY (id)
) COMMENT = '文章详情表';
@@ -137,6 +138,7 @@ CREATE TABLE js_cms_category
extend_d2 datetime COMMENT '扩展 Date 2',
extend_d3 datetime COMMENT '扩展 Date 3',
extend_d4 datetime COMMENT '扩展 Date 4',
extend_json varchar(1000) COMMENT '扩展 JSON',
PRIMARY KEY (category_code)
) COMMENT = '栏目表';

View File

@@ -63,6 +63,7 @@ CREATE TABLE js_cms_article_data
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar2(1000),
PRIMARY KEY (id)
);
@@ -136,6 +137,7 @@ CREATE TABLE js_cms_category
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar2(1000),
PRIMARY KEY (category_code)
);
@@ -373,6 +375,7 @@ COMMENT ON COLUMN js_cms_article_data.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN js_cms_article_data.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN js_cms_article_data.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN js_cms_article_data.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN js_cms_article_data.extend_json IS '扩展 JSON';
COMMENT ON TABLE js_cms_article_posid IS '文章推荐位';
COMMENT ON COLUMN js_cms_article_posid.article_id IS '内容编号';
COMMENT ON COLUMN js_cms_article_posid.postid IS '推荐位置1轮播图 2首页推荐 3栏目页面';
@@ -430,6 +433,7 @@ COMMENT ON COLUMN js_cms_category.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN js_cms_category.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN js_cms_category.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN js_cms_category.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN js_cms_category.extend_json IS '扩展 JSON';
COMMENT ON TABLE js_cms_category_role IS '栏目与角色关联表';
COMMENT ON COLUMN js_cms_category_role.category_code IS '栏目编码';
COMMENT ON COLUMN js_cms_category_role.role_code IS '角色编码';

View File

@@ -63,6 +63,7 @@ CREATE TABLE js_cms_article_data
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (id)
) WITHOUT OIDS;
@@ -136,6 +137,7 @@ CREATE TABLE js_cms_category
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (category_code)
) WITHOUT OIDS;
@@ -373,6 +375,7 @@ COMMENT ON COLUMN js_cms_article_data.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN js_cms_article_data.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN js_cms_article_data.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN js_cms_article_data.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN js_cms_article_data.extend_json IS '扩展 JSON';
COMMENT ON TABLE js_cms_article_posid IS '文章推荐位';
COMMENT ON COLUMN js_cms_article_posid.article_id IS '内容编号';
COMMENT ON COLUMN js_cms_article_posid.postid IS '推荐位置1轮播图 2首页推荐 3栏目页面';
@@ -430,6 +433,7 @@ COMMENT ON COLUMN js_cms_category.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN js_cms_category.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN js_cms_category.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN js_cms_category.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN js_cms_category.extend_json IS '扩展 JSON';
COMMENT ON TABLE js_cms_category_role IS '栏目与角色关联表';
COMMENT ON COLUMN js_cms_category_role.category_code IS '栏目编码';
COMMENT ON COLUMN js_cms_category_role.role_code IS '角色编码';

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId>
<version>4.7.0-SNAPSHOT</version>
<version>5.0.2-SNAPSHOT</version>
<relativePath>../../parent/pom.xml</relativePath>
</parent>

View File

@@ -16,8 +16,8 @@ import com.jeesite.modules.cms.entity.Article;
@MyBatisDao
public interface ArticleDao extends CrudDao<Article> {
long updateExpiredWeight(Article article);
public long updateExpiredWeight(Article article);
long updateHitsAddOne(String id);
public long updateHitsAddOne(String id);
}

View File

@@ -4,6 +4,13 @@
*/
package com.jeesite.modules.cms.entity;
import java.util.Date;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jeesite.common.entity.BaseEntity;
import com.jeesite.common.entity.DataEntity;
@@ -13,11 +20,6 @@ import com.jeesite.common.mybatis.annotation.Table;
import com.jeesite.common.mybatis.mapper.query.QueryType;
import com.jeesite.modules.cms.utils.CmsUtils;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
/**
* 文章表Entity
* @author 长春叭哥、ThinkGem
@@ -43,12 +45,7 @@ import java.util.Date;
@Column(name = "word_count", attrName = "wordCount", label = "字数", comment = "字数不包含html"),
@Column(name = "custom_content_view", attrName = "customContentView", label = "自定义内容视图"),
@Column(name = "view_config", attrName = "viewConfig", label = "视图配置"),
@Column(name="status", attrName="status", label="状态", isUpdate=false),
@Column(name="create_by", attrName="createBy", label="创建者", isUpdate=true),
@Column(name="create_date", attrName="createDate", label="创建时间", isUpdate=false, isQuery=false),
@Column(name="update_by", attrName="updateBy", label="更新者", isUpdate=true),
@Column(name="update_date", attrName="updateDate", label="更新时间", isUpdate=true, isQuery=false),
@Column(name="remarks", attrName="remarks", label="备注信息", queryType=QueryType.LIKE),
@Column(includeEntity = DataEntity.class),
@Column(includeEntity = BaseEntity.class),
}, joinTable = {
@JoinTable(entity = Category.class, alias = "c",
@@ -86,13 +83,12 @@ public class Article extends DataEntity<Article> {
private Integer wordCount; // 字数不包含html
private String customContentView; // 自定义内容视图
private String viewConfig; // 视图配置
private ArticleData articleData; //文章副表
private Boolean isQueryArticleData; // 是否查询文章内容
private Date beginDate; // 开始时间
private Date endDate; // 结束时间
private Boolean isQueryArticleData; // 是否查询文章内容
public Article() {
super();
//this.weight = 0;
@@ -227,6 +223,8 @@ public class Article extends DataEntity<Article> {
this.hits = hits;
}
public Integer getHitsPlus() {
return hitsPlus;
}
@@ -277,18 +275,6 @@ public class Article extends DataEntity<Article> {
this.articleData = articleData;
}
/**
* 是否查询文章内容
* @return
*/
public Boolean getIsQueryArticleData() {
return isQueryArticleData;
}
public void setIsQueryArticleData(Boolean isQueryArticleData) {
this.isQueryArticleData = isQueryArticleData;
}
public Date getBeginDate() {
return beginDate;
}
@@ -305,6 +291,20 @@ public class Article extends DataEntity<Article> {
this.endDate = endDate;
}
/**
* 是否查询文章内容
* @return
*/
public Boolean getIsQueryArticleData() {
return isQueryArticleData;
}
public void setIsQueryArticleData(Boolean isQueryArticleData) {
this.isQueryArticleData = isQueryArticleData;
}
public String getUrl() {
return CmsUtils.getUrlDynamic(this);
}

View File

@@ -79,7 +79,7 @@ public class ArticleService extends CrudService<ArticleDao, Article> {
/**
* 查询分页数据
* @param article 查询条件
* @param article page 分页对象
* @param article.page 分页对象
* @return
*/
@Override

View File

@@ -4,17 +4,18 @@
*/
package com.jeesite.modules.cms.service;
import java.util.List;
import org.apache.commons.text.StringEscapeUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.jeesite.common.lang.StringUtils;
import com.jeesite.common.service.TreeService;
import com.jeesite.modules.cms.dao.CategoryDao;
import com.jeesite.modules.cms.entity.Category;
import com.jeesite.modules.cms.utils.CmsUtils;
import com.jeesite.modules.file.utils.FileUploadUtils;
import org.apache.commons.text.StringEscapeUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* 栏目表Service

View File

@@ -4,6 +4,14 @@
*/
package com.jeesite.modules.cms.utils;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import org.springframework.ui.Model;
import com.jeesite.common.cache.CacheUtils;
import com.jeesite.common.collect.ListUtils;
import com.jeesite.common.config.Global;
@@ -18,12 +26,6 @@ import com.jeesite.modules.cms.entity.Site;
import com.jeesite.modules.cms.service.ArticleService;
import com.jeesite.modules.cms.service.CategoryService;
import com.jeesite.modules.cms.service.SiteService;
import org.springframework.ui.Model;
import javax.servlet.ServletContext;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* CmsUtils
@@ -189,7 +191,7 @@ public class CmsUtils {
* @param siteCode 站点编号
* @param categoryCode 分类编号
* @param number 获取数目
* @param params 预留参数,例: key1:'value1', key2:'value2' ...<br>
* @param param 预留参数,例: key1:'value1', key2:'value2' ...<br>
* posid : 推荐位1首页焦点图2栏目页文章推荐<br>
* image : 文章图片1有图片的文章<br>
* isQueryArticleData : 是否查询文章详情信息,查询会影响效率<br>

View File

@@ -4,6 +4,22 @@
*/
package com.jeesite.modules.cms.web;
import java.io.IOException;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.jeesite.common.config.Global;
import com.jeesite.common.entity.Page;
import com.jeesite.common.lang.StringUtils;
@@ -17,20 +33,6 @@ import com.jeesite.modules.cms.service.CategoryService;
import com.jeesite.modules.cms.service.FileTempleteService;
import com.jeesite.modules.cms.utils.CmsUtils;
import com.jeesite.modules.sys.utils.UserUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* 文章表Controller

View File

@@ -4,6 +4,20 @@
*/
package com.jeesite.modules.cms.web;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.jeesite.common.collect.ListUtils;
import com.jeesite.common.collect.MapUtils;
import com.jeesite.common.config.Global;
@@ -19,20 +33,6 @@ import com.jeesite.modules.cms.utils.CmsUtils;
import com.jeesite.modules.sys.entity.Office;
import com.jeesite.modules.sys.utils.DictUtils;
import com.jeesite.modules.sys.utils.UserUtils;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
* 栏目表Controller
@@ -252,7 +252,7 @@ public class CategoryController extends BaseController {
* @param isShowCode 是否显示编码true or 1显示在左侧2显示在右侧false or null不显示
* @return
*/
@RequiresPermissions(value = {"cms:category:view", "cms:article:view"}, logical = Logical.OR)
@RequiresPermissions("cms:category:view")
@RequestMapping(value = "treeData")
@ResponseBody
public List<Map<String, Object>> treeData(String siteCode, String module, String excludeCode, Boolean isAll, String isShowCode) {

View File

@@ -4,27 +4,37 @@
*/
package com.jeesite.modules.cmsfront.web;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.jeesite.common.collect.ListUtils;
import com.jeesite.common.config.Global;
import com.jeesite.common.entity.Page;
import com.jeesite.common.lang.ObjectUtils;
import com.jeesite.common.lang.StringUtils;
import com.jeesite.common.web.BaseController;
import com.jeesite.modules.cms.entity.*;
import com.jeesite.modules.cms.entity.Article;
import com.jeesite.modules.cms.entity.ArticleData;
import com.jeesite.modules.cms.entity.Category;
import com.jeesite.modules.cms.entity.Comment;
import com.jeesite.modules.cms.entity.Site;
import com.jeesite.modules.cms.service.ArticleService;
import com.jeesite.modules.cms.service.CategoryService;
import com.jeesite.modules.cms.service.CommentService;
import com.jeesite.modules.cms.utils.CmsUtils;
import com.jeesite.modules.sys.utils.ValidCodeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
/**
* 网站Controller

View File

@@ -62,7 +62,7 @@ public class FrontSearchController extends BaseController{
parmas.put("siteCode", siteCode);
}
page = articleService.searchPage(page, q, qand, qnot, bd, ed, parmas);
page.setPageInfo("匹配结果,共耗时 " + TimeUtils.formatDateAgo(System.currentTimeMillis() - start) + "");
page.setPageInfo("匹配结果,共耗时 " + TimeUtils.formatTime(System.currentTimeMillis() - start) + "");
model.addAttribute("page", page);
}

View File

@@ -0,0 +1,322 @@
/* Create Tables */
-- 文章表
CREATE TABLE ${_prefix}cms_article
(
id varchar(64) NOT NULL,
category_code varchar(64) NOT NULL,
module_type varchar(50),
title vargraphic(255) NOT NULL,
href vargraphic(1000),
color varchar(50),
image vargraphic(1000),
keywords vargraphic(500),
description vargraphic(500),
weight decimal(10) DEFAULT 0,
weight_date timestamp,
source char(1),
copyfrom vargraphic(255),
hits decimal(20) DEFAULT 0,
hits_plus numeric(10),
hits_minus numeric(10),
word_count numeric(10),
custom_content_view varchar(255),
view_config vargraphic(1000),
status char(1) DEFAULT '0' NOT NULL,
create_by varchar(64) NOT NULL,
create_date timestamp NOT NULL,
update_by varchar(64) NOT NULL,
update_date timestamp NOT NULL,
remarks vargraphic(500),
corp_code varchar(64) DEFAULT '0' NOT NULL,
corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL,
PRIMARY KEY (id)
);
-- 文章详情表
CREATE TABLE ${_prefix}cms_article_data
(
id varchar(64) NOT NULL,
content clob,
relation varchar(1000),
is_can_comment char(1),
extend_s1 vargraphic(500),
extend_s2 vargraphic(500),
extend_s3 vargraphic(500),
extend_s4 vargraphic(500),
extend_s5 vargraphic(500),
extend_s6 vargraphic(500),
extend_s7 vargraphic(500),
extend_s8 vargraphic(500),
extend_i1 decimal(19),
extend_i2 decimal(19),
extend_i3 decimal(19),
extend_i4 decimal(19),
extend_f1 decimal(19,4),
extend_f2 decimal(19,4),
extend_f3 decimal(19,4),
extend_f4 decimal(19,4),
extend_d1 timestamp,
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (id)
);
-- 文章推荐位
CREATE TABLE ${_prefix}cms_article_posid
(
article_id varchar(64) NOT NULL,
postid char(1) NOT NULL
);
-- 文章与标签关系
CREATE TABLE ${_prefix}cms_article_tag
(
article_id varchar(64) NOT NULL,
tag_name vargraphic(200) NOT NULL
);
-- 栏目表
CREATE TABLE ${_prefix}cms_category
(
category_code varchar(64) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names vargraphic(767) NOT NULL,
category_name vargraphic(100) NOT NULL,
site_code varchar(64) NOT NULL,
module_type varchar(50),
image varchar(255),
href varchar(255),
target varchar(20),
keywords vargraphic(500),
description vargraphic(500),
in_menu char(1),
in_list char(1),
show_modes char(1),
is_need_audit char(1),
is_can_comment char(1),
custom_list_view varchar(255),
custom_content_view varchar(255),
view_config vargraphic(1000),
status char(1) DEFAULT '0' NOT NULL,
create_by varchar(64) NOT NULL,
create_date timestamp NOT NULL,
update_by varchar(64) NOT NULL,
update_date timestamp NOT NULL,
remarks vargraphic(500),
extend_s1 vargraphic(500),
extend_s2 vargraphic(500),
extend_s3 vargraphic(500),
extend_s4 vargraphic(500),
extend_s5 vargraphic(500),
extend_s6 vargraphic(500),
extend_s7 vargraphic(500),
extend_s8 vargraphic(500),
extend_i1 decimal(19),
extend_i2 decimal(19),
extend_i3 decimal(19),
extend_i4 decimal(19),
extend_f1 decimal(19,4),
extend_f2 decimal(19,4),
extend_f3 decimal(19,4),
extend_f4 decimal(19,4),
extend_d1 timestamp,
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (category_code)
);
-- 栏目与角色关联表
CREATE TABLE ${_prefix}cms_category_role
(
category_code varchar(64) NOT NULL,
role_code varchar(64) NOT NULL,
ctrl_type varchar(32),
PRIMARY KEY (category_code, role_code)
);
-- 文章评论表
CREATE TABLE ${_prefix}cms_comment
(
id varchar(64) NOT NULL,
category_code varchar(64) NOT NULL,
article_id varchar(64) NOT NULL,
parent_id varchar(64),
article_title vargraphic(255) NOT NULL,
content vargraphic(255) NOT NULL,
name vargraphic(50),
ip varchar(100),
create_by varchar(64),
create_date timestamp NOT NULL,
audit_user_code varchar(64),
audit_date timestamp,
audit_comment vargraphic(200),
hits_plus numeric(10),
hits_minus numeric(10),
status char(1) NOT NULL,
corp_code varchar(64) DEFAULT '0' NOT NULL,
corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL,
PRIMARY KEY (id)
);
-- 留言板表
CREATE TABLE ${_prefix}cms_guestbook
(
id varchar(64) NOT NULL,
type char(1) NOT NULL,
content varchar(255) NOT NULL,
name varchar(100) NOT NULL,
email varchar(100) NOT NULL,
phone varchar(100) NOT NULL,
workunit varchar(100) NOT NULL,
ip varchar(100) NOT NULL,
create_by varchar(64),
create_date timestamp,
re_user_code varchar(64),
re_date timestamp,
re_content varchar(100),
status char(1) NOT NULL,
corp_code varchar(64) DEFAULT '0' NOT NULL,
corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL,
PRIMARY KEY (id)
);
-- 内容举报表
CREATE TABLE ${_prefix}cms_report
(
id varchar(64) NOT NULL,
report_source char(1),
report_content vargraphic(500),
report_url vargraphic(1000),
report_type char(1),
report_cause vargraphic(500),
PRIMARY KEY (id)
);
-- 站点表
CREATE TABLE ${_prefix}cms_site
(
site_code varchar(64) NOT NULL,
site_name vargraphic(100) NOT NULL,
site_sort decimal(10),
title vargraphic(100) NOT NULL,
logo vargraphic(1000),
domain vargraphic(500),
keywords vargraphic(500),
description vargraphic(500),
theme vargraphic(500),
copyright vargraphic(1000),
custom_index_view varchar(500),
status char(1) DEFAULT '0' NOT NULL,
create_by varchar(64) NOT NULL,
create_date timestamp NOT NULL,
update_by varchar(64) NOT NULL,
update_date timestamp NOT NULL,
remarks vargraphic(500),
PRIMARY KEY (site_code)
);
-- 内容标签
CREATE TABLE ${_prefix}cms_tag
(
tag_name vargraphic(200) NOT NULL,
clicknum numeric(10) NOT NULL,
PRIMARY KEY (tag_name)
);
-- 访问日志表
CREATE TABLE ${_prefix}cms_visit_log
(
id varchar(64) NOT NULL,
request_url vargraphic(1000),
request_url_host varchar(128),
source_referer vargraphic(1000),
source_referer_host varchar(128),
source_type char(1),
search_engine varchar(200),
search_word vargraphic(200),
remote_addr varchar(50),
user_agent vargraphic(500),
user_language varchar(32),
user_screen_size varchar(32),
user_device varchar(32),
user_os_name varchar(32),
user_browser varchar(32),
user_browser_version varchar(16),
unique_visit_id varchar(64),
visit_date char(8),
visit_time timestamp,
is_new_visit char(1),
first_visit_time decimal(20),
prev_remain_time decimal(20),
total_remain_time decimal(20),
site_code varchar(64),
site_name vargraphic(100),
category_code varchar(64),
category_name vargraphic(100),
content_id varchar(64),
content_title vargraphic(255),
visit_user_code varchar(100),
visit_user_name varchar(100),
corp_code varchar(64) DEFAULT '0' NOT NULL,
corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL,
PRIMARY KEY (id)
);
/* Create Indexes */
CREATE INDEX idx_cms_article_cb ON ${_prefix}cms_article (create_by);
CREATE INDEX idx_cms_article_cc ON ${_prefix}cms_article (category_code);
CREATE INDEX idx_cms_article_corp_code ON ${_prefix}cms_article (corp_code);
CREATE INDEX idx_cms_article_status ON ${_prefix}cms_article (status);
CREATE INDEX idx_cms_article_ud ON ${_prefix}cms_article (update_date);
CREATE INDEX idx_cms_article_weight ON ${_prefix}cms_article (weight);
CREATE INDEX idx_cms_category_pc ON ${_prefix}cms_category (parent_code);
CREATE INDEX idx_cms_category_ts ON ${_prefix}cms_category (tree_sort);
CREATE INDEX idx_cms_category_status ON ${_prefix}cms_category (status);
CREATE INDEX idx_cms_category_tss ON ${_prefix}cms_category (tree_sorts);
CREATE INDEX idx_cms_comment_catc ON ${_prefix}cms_comment (category_code);
CREATE INDEX idx_cms_comment_ai ON ${_prefix}cms_comment (article_id);
CREATE INDEX idx_cms_comment_cc ON ${_prefix}cms_comment (corp_code);
CREATE INDEX idx_cms_comment_status ON ${_prefix}cms_comment (status);
CREATE INDEX idx_cms_guestbook_cc ON ${_prefix}cms_guestbook (corp_code);
CREATE INDEX idx_cms_guestbook_status ON ${_prefix}cms_guestbook (status);
CREATE INDEX idx_cms_guestbook_type ON ${_prefix}cms_guestbook (type);
CREATE INDEX idx_cms_site_status ON ${_prefix}cms_site (status);
CREATE INDEX cms_visit_log_cc ON ${_prefix}cms_visit_log (category_code);
CREATE INDEX cms_visit_log_ci ON ${_prefix}cms_visit_log (content_id);
CREATE INDEX cms_visit_log_fvt ON ${_prefix}cms_visit_log (first_visit_time);
CREATE INDEX cms_visit_log_inv ON ${_prefix}cms_visit_log (is_new_visit);
CREATE INDEX cms_visit_log_ra ON ${_prefix}cms_visit_log (remote_addr);
CREATE INDEX cms_visit_log_sc ON ${_prefix}cms_visit_log (site_code);
CREATE INDEX cms_visit_log_uvid ON ${_prefix}cms_visit_log (unique_visit_id);
CREATE INDEX cms_visit_log_vd ON ${_prefix}cms_visit_log (visit_date);
CREATE INDEX cms_visit_log_vt ON ${_prefix}cms_visit_log (visit_time);
CREATE INDEX idx_cms_visit_log_corpc ON ${_prefix}cms_visit_log (corp_code);

View File

@@ -8,30 +8,30 @@ CREATE TABLE ${_prefix}cms_article
id varchar(64) NOT NULL,
category_code varchar(64) NOT NULL,
module_type varchar(50),
title vargraphic(255) NOT NULL,
href vargraphic(1000),
title varchar(255) NOT NULL,
href varchar(1000),
color varchar(50),
image vargraphic(1000),
keywords vargraphic(500),
description vargraphic(500),
image varchar(1000),
keywords varchar(500),
description varchar(500),
weight decimal(10) DEFAULT 0,
weight_date timestamp,
weight_date datetime,
source char(1),
copyfrom vargraphic(255),
copyfrom varchar(255),
hits decimal(20) DEFAULT 0,
hits_plus numeric(10),
hits_minus numeric(10),
word_count numeric(10),
custom_content_view varchar(255),
view_config vargraphic(1000),
view_config varchar(1000),
status char(1) DEFAULT '0' NOT NULL,
create_by varchar(64) NOT NULL,
create_date timestamp NOT NULL,
create_date datetime NOT NULL,
update_by varchar(64) NOT NULL,
update_date timestamp NOT NULL,
remarks vargraphic(500),
update_date datetime NOT NULL,
remarks varchar(500),
corp_code varchar(64) DEFAULT '0' NOT NULL,
corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL,
corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL,
PRIMARY KEY (id)
);
@@ -43,14 +43,14 @@ CREATE TABLE ${_prefix}cms_article_data
content clob,
relation varchar(1000),
is_can_comment char(1),
extend_s1 vargraphic(500),
extend_s2 vargraphic(500),
extend_s3 vargraphic(500),
extend_s4 vargraphic(500),
extend_s5 vargraphic(500),
extend_s6 vargraphic(500),
extend_s7 vargraphic(500),
extend_s8 vargraphic(500),
extend_s1 varchar(500),
extend_s2 varchar(500),
extend_s3 varchar(500),
extend_s4 varchar(500),
extend_s5 varchar(500),
extend_s6 varchar(500),
extend_s7 varchar(500),
extend_s8 varchar(500),
extend_i1 decimal(19),
extend_i2 decimal(19),
extend_i3 decimal(19),
@@ -59,10 +59,11 @@ CREATE TABLE ${_prefix}cms_article_data
extend_f2 decimal(19,4),
extend_f3 decimal(19,4),
extend_f4 decimal(19,4),
extend_d1 timestamp,
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_d1 datetime,
extend_d2 datetime,
extend_d3 datetime,
extend_d4 datetime,
extend_json varchar(1000),
PRIMARY KEY (id)
);
@@ -79,7 +80,7 @@ CREATE TABLE ${_prefix}cms_article_posid
CREATE TABLE ${_prefix}cms_article_tag
(
article_id varchar(64) NOT NULL,
tag_name vargraphic(200) NOT NULL
tag_name varchar(200) NOT NULL
);
@@ -93,15 +94,15 @@ CREATE TABLE ${_prefix}cms_category
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names vargraphic(767) NOT NULL,
category_name vargraphic(100) NOT NULL,
tree_names varchar(767) NOT NULL,
category_name varchar(100) NOT NULL,
site_code varchar(64) NOT NULL,
module_type varchar(50),
image varchar(255),
href varchar(255),
target varchar(20),
keywords vargraphic(500),
description vargraphic(500),
keywords varchar(500),
description varchar(500),
in_menu char(1),
in_list char(1),
show_modes char(1),
@@ -109,21 +110,21 @@ CREATE TABLE ${_prefix}cms_category
is_can_comment char(1),
custom_list_view varchar(255),
custom_content_view varchar(255),
view_config vargraphic(1000),
view_config varchar(1000),
status char(1) DEFAULT '0' NOT NULL,
create_by varchar(64) NOT NULL,
create_date timestamp NOT NULL,
create_date datetime NOT NULL,
update_by varchar(64) NOT NULL,
update_date timestamp NOT NULL,
remarks vargraphic(500),
extend_s1 vargraphic(500),
extend_s2 vargraphic(500),
extend_s3 vargraphic(500),
extend_s4 vargraphic(500),
extend_s5 vargraphic(500),
extend_s6 vargraphic(500),
extend_s7 vargraphic(500),
extend_s8 vargraphic(500),
update_date datetime NOT NULL,
remarks varchar(500),
extend_s1 varchar(500),
extend_s2 varchar(500),
extend_s3 varchar(500),
extend_s4 varchar(500),
extend_s5 varchar(500),
extend_s6 varchar(500),
extend_s7 varchar(500),
extend_s8 varchar(500),
extend_i1 decimal(19),
extend_i2 decimal(19),
extend_i3 decimal(19),
@@ -132,10 +133,11 @@ CREATE TABLE ${_prefix}cms_category
extend_f2 decimal(19,4),
extend_f3 decimal(19,4),
extend_f4 decimal(19,4),
extend_d1 timestamp,
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_d1 datetime,
extend_d2 datetime,
extend_d3 datetime,
extend_d4 datetime,
extend_json varchar(1000),
PRIMARY KEY (category_code)
);
@@ -157,20 +159,20 @@ CREATE TABLE ${_prefix}cms_comment
category_code varchar(64) NOT NULL,
article_id varchar(64) NOT NULL,
parent_id varchar(64),
article_title vargraphic(255) NOT NULL,
content vargraphic(255) NOT NULL,
name vargraphic(50),
article_title varchar(255) NOT NULL,
content varchar(255) NOT NULL,
name varchar(50),
ip varchar(100),
create_by varchar(64),
create_date timestamp NOT NULL,
create_date datetime NOT NULL,
audit_user_code varchar(64),
audit_date timestamp,
audit_comment vargraphic(200),
audit_date datetime,
audit_comment varchar(200),
hits_plus numeric(10),
hits_minus numeric(10),
status char(1) NOT NULL,
corp_code varchar(64) DEFAULT '0' NOT NULL,
corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL,
corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL,
PRIMARY KEY (id)
);
@@ -187,13 +189,13 @@ CREATE TABLE ${_prefix}cms_guestbook
workunit varchar(100) NOT NULL,
ip varchar(100) NOT NULL,
create_by varchar(64),
create_date timestamp,
create_date datetime,
re_user_code varchar(64),
re_date timestamp,
re_date datetime,
re_content varchar(100),
status char(1) NOT NULL,
corp_code varchar(64) DEFAULT '0' NOT NULL,
corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL,
corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL,
PRIMARY KEY (id)
);
@@ -203,10 +205,10 @@ CREATE TABLE ${_prefix}cms_report
(
id varchar(64) NOT NULL,
report_source char(1),
report_content vargraphic(500),
report_url vargraphic(1000),
report_content varchar(500),
report_url varchar(1000),
report_type char(1),
report_cause vargraphic(500),
report_cause varchar(500),
PRIMARY KEY (id)
);
@@ -215,22 +217,22 @@ CREATE TABLE ${_prefix}cms_report
CREATE TABLE ${_prefix}cms_site
(
site_code varchar(64) NOT NULL,
site_name vargraphic(100) NOT NULL,
site_name varchar(100) NOT NULL,
site_sort decimal(10),
title vargraphic(100) NOT NULL,
logo vargraphic(1000),
domain vargraphic(500),
keywords vargraphic(500),
description vargraphic(500),
theme vargraphic(500),
copyright vargraphic(1000),
title varchar(100) NOT NULL,
logo varchar(1000),
domain varchar(500),
keywords varchar(500),
description varchar(500),
theme varchar(500),
copyright varchar(1000),
custom_index_view varchar(500),
status char(1) DEFAULT '0' NOT NULL,
create_by varchar(64) NOT NULL,
create_date timestamp NOT NULL,
create_date datetime NOT NULL,
update_by varchar(64) NOT NULL,
update_date timestamp NOT NULL,
remarks vargraphic(500),
update_date datetime NOT NULL,
remarks varchar(500),
PRIMARY KEY (site_code)
);
@@ -238,7 +240,7 @@ CREATE TABLE ${_prefix}cms_site
-- 内容标签
CREATE TABLE ${_prefix}cms_tag
(
tag_name vargraphic(200) NOT NULL,
tag_name varchar(200) NOT NULL,
clicknum numeric(10) NOT NULL,
PRIMARY KEY (tag_name)
);
@@ -248,15 +250,15 @@ CREATE TABLE ${_prefix}cms_tag
CREATE TABLE ${_prefix}cms_visit_log
(
id varchar(64) NOT NULL,
request_url vargraphic(1000),
request_url varchar(1000),
request_url_host varchar(128),
source_referer vargraphic(1000),
source_referer varchar(1000),
source_referer_host varchar(128),
source_type char(1),
search_engine varchar(200),
search_word vargraphic(200),
search_word varchar(200),
remote_addr varchar(50),
user_agent vargraphic(500),
user_agent varchar(500),
user_language varchar(32),
user_screen_size varchar(32),
user_device varchar(32),
@@ -265,21 +267,21 @@ CREATE TABLE ${_prefix}cms_visit_log
user_browser_version varchar(16),
unique_visit_id varchar(64),
visit_date char(8),
visit_time timestamp,
visit_time datetime,
is_new_visit char(1),
first_visit_time decimal(20),
prev_remain_time decimal(20),
total_remain_time decimal(20),
site_code varchar(64),
site_name vargraphic(100),
site_name varchar(100),
category_code varchar(64),
category_name vargraphic(100),
category_name varchar(100),
content_id varchar(64),
content_title vargraphic(255),
content_title varchar(255),
visit_user_code varchar(100),
visit_user_name varchar(100),
corp_code varchar(64) DEFAULT '0' NOT NULL,
corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL,
corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL,
PRIMARY KEY (id)
);

View File

@@ -63,6 +63,7 @@ CREATE TABLE [${_prefix}cms_article_data]
[extend_d2] datetime,
[extend_d3] datetime,
[extend_d4] datetime,
[extend_json] varchar(1000),
PRIMARY KEY ([id])
);
@@ -136,6 +137,7 @@ CREATE TABLE [${_prefix}cms_category]
[extend_d2] datetime,
[extend_d3] datetime,
[extend_d4] datetime,
[extend_json] varchar(1000),
PRIMARY KEY ([category_code])
);

View File

@@ -64,6 +64,7 @@ CREATE TABLE ${_prefix}cms_article_data
extend_d2 datetime COMMENT '扩展 Date 2',
extend_d3 datetime COMMENT '扩展 Date 3',
extend_d4 datetime COMMENT '扩展 Date 4',
extend_json varchar(1000) COMMENT '扩展 JSON',
PRIMARY KEY (id)
) COMMENT = '文章详情表';
@@ -137,6 +138,7 @@ CREATE TABLE ${_prefix}cms_category
extend_d2 datetime COMMENT '扩展 Date 2',
extend_d3 datetime COMMENT '扩展 Date 3',
extend_d4 datetime COMMENT '扩展 Date 4',
extend_json varchar(1000) COMMENT '扩展 JSON',
PRIMARY KEY (category_code)
) COMMENT = '栏目表';

View File

@@ -63,6 +63,7 @@ CREATE TABLE ${_prefix}cms_article_data
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar2(1000),
PRIMARY KEY (id)
);
@@ -136,6 +137,7 @@ CREATE TABLE ${_prefix}cms_category
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar2(1000),
PRIMARY KEY (category_code)
);
@@ -373,6 +375,7 @@ COMMENT ON COLUMN ${_prefix}cms_article_data.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_json IS '扩展 JSON';
COMMENT ON TABLE ${_prefix}cms_article_posid IS '文章推荐位';
COMMENT ON COLUMN ${_prefix}cms_article_posid.article_id IS '内容编号';
COMMENT ON COLUMN ${_prefix}cms_article_posid.postid IS '推荐位置1轮播图 2首页推荐 3栏目页面';
@@ -430,6 +433,7 @@ COMMENT ON COLUMN ${_prefix}cms_category.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN ${_prefix}cms_category.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN ${_prefix}cms_category.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN ${_prefix}cms_category.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN ${_prefix}cms_category.extend_json IS '扩展 JSON';
COMMENT ON TABLE ${_prefix}cms_category_role IS '栏目与角色关联表';
COMMENT ON COLUMN ${_prefix}cms_category_role.category_code IS '栏目编码';
COMMENT ON COLUMN ${_prefix}cms_category_role.role_code IS '角色编码';

View File

@@ -63,6 +63,7 @@ CREATE TABLE ${_prefix}cms_article_data
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (id)
) WITHOUT OIDS;
@@ -136,6 +137,7 @@ CREATE TABLE ${_prefix}cms_category
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (category_code)
) WITHOUT OIDS;
@@ -373,6 +375,7 @@ COMMENT ON COLUMN ${_prefix}cms_article_data.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_json IS '扩展 JSON';
COMMENT ON TABLE ${_prefix}cms_article_posid IS '文章推荐位';
COMMENT ON COLUMN ${_prefix}cms_article_posid.article_id IS '内容编号';
COMMENT ON COLUMN ${_prefix}cms_article_posid.postid IS '推荐位置1轮播图 2首页推荐 3栏目页面';
@@ -430,6 +433,7 @@ COMMENT ON COLUMN ${_prefix}cms_category.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN ${_prefix}cms_category.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN ${_prefix}cms_category.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN ${_prefix}cms_category.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN ${_prefix}cms_category.extend_json IS '扩展 JSON';
COMMENT ON TABLE ${_prefix}cms_category_role IS '栏目与角色关联表';
COMMENT ON COLUMN ${_prefix}cms_category_role.category_code IS '栏目编码';
COMMENT ON COLUMN ${_prefix}cms_category_role.role_code IS '角色编码';

View File

@@ -0,0 +1,6 @@
ALTER TABLE ${_prefix}cms_category
ADD extend_json varchar(1000);
ALTER TABLE ${_prefix}cms_article_data
ADD extend_json varchar(1000);

View File

@@ -0,0 +1,6 @@
ALTER TABLE `${_prefix}cms_category`
ADD COLUMN extend_json varchar(1000) COMMENT '扩展 JSON';
ALTER TABLE `${_prefix}cms_article_data`
ADD COLUMN extend_json varchar(1000) COMMENT '扩展 JSON';

View File

@@ -0,0 +1,6 @@
ALTER TABLE ${_prefix}cms_category ADD extend_json varchar2(1000);
COMMENT ON COLUMN ${_prefix}cms_category.extend_json IS '扩展 JSON';
ALTER TABLE ${_prefix}cms_article_data ADD extend_json varchar2(1000);
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_json IS '扩展 JSON';

View File

@@ -0,0 +1,6 @@
ALTER TABLE ${_prefix}cms_category ADD COLUMN extend_json varchar(1000);
COMMENT ON COLUMN ${_prefix}cms_category.extend_json IS '扩展 JSON';
ALTER TABLE ${_prefix}cms_article_data ADD COLUMN extend_json varchar(1000);
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_json IS '扩展 JSON';

View File

@@ -8,13 +8,6 @@
4.2.2
4.2.3
4.3.0
4.3.1
4.3.2
4.3.3
4.4.0
4.4.1
4.5.0
4.6.0
4.6.1
4.6.2
4.7.0
5.0.0
5.0.1
5.0.2

View File

@@ -2,23 +2,15 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jeesite.modules.cms.dao.ArticleDao">
<!-- 查询数据 -->
<select id="findList" resultType="Article">
<!-- 查询数据
<select id="findList" resultType="CmsArticle">
SELECT ${sqlMap.column.toSql()}
<if test="isQueryArticleData">,
ad.content AS "articleData.content",
ad.relation AS "articleData.relation",
ad.is_can_comment AS "articleData.isCanComment"
</if>
FROM ${sqlMap.table.toSql()}
<if test="isQueryArticleData">
JOIN ${_prefix}cms_article_data ad ON ad.id = a.id
</if>
<where>
${sqlMap.where.toSql()}
</where>
ORDER BY ${sqlMap.order.toSql()}
</select>
</select> -->
<update id="updateExpiredWeight">
update ${_prefix}cms_article SET weight = 0

View File

@@ -1,4 +1,4 @@
body{padding-top:50px;font-size:15px;background:#f7f8f9;}
body{padding-top:50px;font-size:14px;}
body>.navbar{-webkit-transition:background-color .3s ease-in;transition:background-color .3s ease-in}
@media (min-width:768px){
body>.navbar-transparent{background-color:transparent}
@@ -51,34 +51,20 @@ footer p{clear:left;margin-bottom:0}
#banner{margin-bottom:2em;text-align:center}
}
.breadcrumb {border-radius:8px;background:transparent;padding:0;margin:2px 15px 21px 15px;}
.jumbotron {background:#fff;margin:48px auto;border:1px solid #ededed;box-shadow:0 1px 4px 0 rgb(0 0 0 / 5%);border-radius:8px!important;}
.jumbotron h1, .jumbotron .h1 {font-size:43px;margin: 0 0 30px;}
.jumbotron .btn-sm {font-size:17px;}
.panel {border-radius:8px}
.panel-heading {border-radius:8px 8px 0 0}
.panel-footer {border-radius:0 0 8px 8px}
.panel-title {font-size:18px;}
.panel-title small .more {padding-top:4px;font-size:14px}
.jumbotron {background:#f1f1f1;margin:48px auto;}
.panel-title small .more {padding-top:4px;}
.nav-search {margin-top:9px;}
.nav-search .form-control {height:30px;padding:5px;}
.nav-search .btn {height:31px;padding:5px 10px;}
.main {background:#fff;box-shadow:0 1px 4px 0 rgb(0 0 0 / 8%);border-radius:0 0 8px 8px;padding:20px 10px;margin:0 -1px}
.main-list {border-radius:8px;}
.main-right::before {content:'';border-left:1px solid #e6e6e6;position:absolute;height:100%;left:-20px;}
.article-list {padding:5px;margin:0;}
.article-list li {list-style:none;padding:8px 0;}
.article-view {border-radius:8px;padding:30px 50px;}
.article-title {color:#333;font-size:30px;text-align:center;border-bottom:1px solid #ddd;padding:15px 20px 20px 20px;margin-bottom:30px;}
.article-info {border-top:1px solid #ddd;padding:10px;margin:30px 0 0;}
.article-desc {padding:8px 10px 8px;margin:10px 20px 20px 35px;font-size:14px;}
.article-content {padding-top:20px;}
.article-title {color:#555555;font-size:20px;text-align:center;border-bottom:1px solid #ddd;padding:15px 20px 20px 20px;margin-bottom:30px;}
.article-info {border-top:1px solid #ddd;padding:10px;margin:25px 0 0;}
.article-desc {padding:8px 10px 8px;margin:10px 20px 20px 35px;font-size:13px;}
.article-content {padding-top:10px;}
.pagination {margin:8px 0;display:block;/* text-align:center; */font-size:13px;} /* .pagination .controls a{border:0;} */
.pagination>li>a, .pagination>li>span {min-width:37px;text-align:center;padding:6px;border:1px solid #ddd;background:transparent;/* border-radius:3px; */}

View File

@@ -143,7 +143,7 @@
</div>
</div>
</div>
<!--<div class="col-xs-6">
<div class="col-xs-6">
<div class="form-group">
<label class="control-label col-sm-4">${text('推荐位')}</label>
<div class="col-sm-8">
@@ -162,14 +162,14 @@
<#form:select path="state" dictType="sys_status" blankOption="true" class="form-control" />
</div>
</div>
</div>-->
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="control-label col-sm-4" title="${text('可修改发布时间,不填则使用当前时间')}">
${text('发布时间')} <i class="fa icon-question"></i></label>
<div class="col-sm-8">
<#form:input path="createDate" readonly="true" maxlength="20" class="form-control laydate"
dataFormat="datetime" data-type="datetime" data-format="yyyy-MM-dd HH:mm"/>
<#form:input path="createDate" readonly="true" maxlength="20" class="form-control Wdate"
dataFormat="datetime" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm',isShowClear:false});"/>
</div>
</div>
</div>
@@ -208,7 +208,7 @@
</div>
</div>
</div>
<#form:extend collapsed="true" pathPrefix="articleData"/>
<#form:extend collapsed="true" />
<div class="box-footer">
<div class="row">
<div class="col-sm-offset-2 col-sm-10">

View File

@@ -42,7 +42,7 @@
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-sm">${text('查询')}</button>
<button type="reset" class="btn btn-default btn-sm isQuick">${text('重置')}</button>
<button type="reset" class="btn btn-default btn-sm">${text('重置')}</button>
</div>
</#form:form>
<table id="dataGrid"></table>

View File

@@ -58,7 +58,7 @@
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-sm">${text('查询')}</button>
<button type="reset" class="btn btn-default btn-sm isQuick">${text('重置')}</button>
<button type="reset" class="btn btn-default btn-sm">${text('重置')}</button>
</div>
</#form:form>
<table id="dataGrid"></table>

View File

@@ -73,17 +73,15 @@ var setting = {
}, tree, loadTree = function() {
js.ajaxSubmit("${ctx}/cms/category/treeData?___t="
+ new Date().getTime(), { }, function(data) {
tree = $.fn.zTree.init($("#tree"), setting, data);//.expandAll(true);
// 展开第一级节点
var nodes = tree.getNodesByParam("level", 0);
for (var i = 0; i < nodes.length; i++) {
tree.expandNode(nodes[i], true, false, false);
tree = $.fn.zTree.init($("#tree"), setting, data);
var level = -1, nodes;
while (++level <= 1) {
nodes = tree.getNodesByParam("level", level);
if (nodes.length > 10) { break; }
for(var i=0; i<nodes.length; i++) {
tree.expandNode(nodes[i], true, false, false);
}
}
// 展开第二级节点
// nodes = tree.getNodesByParam("level", 1);
// for(var i=0; i<nodes.length; i++) {
// tree.expandNode(nodes[i], true, false, false);
// }
}, null, null, js.text('loading.message'));
};
loadTree();

View File

@@ -1,18 +1,18 @@
<% layout('/layouts/default.html', {title: '文章评论表管理', libs: ['dataGrid']}){ %>
<div class="main-content">
<div class="box box-main">
<div class="box-header">
<div class="box-title">
<i class="fa fa-list-alt"></i> ${text('文章评论表管理')}
</div>
<div class="box-tools pull-right">
<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
<% if(hasPermi('cms:comment:edit')){ %>
<a href="${ctx}/cms/comment/form" class="btn btn-default btnTool" title="${text('新增文章评论表')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
<% } %>
</div>
</div>
<div class="box-body">
<% layout('/layouts/default.html', {title: '文章评论表管理', libs: ['dataGrid']}){ %>
<div class="main-content">
<div class="box box-main">
<div class="box-header">
<div class="box-title">
<i class="fa fa-list-alt"></i> ${text('文章评论表管理')}
</div>
<div class="box-tools pull-right">
<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
<% if(hasPermi('cms:comment:edit')){ %>
<a href="${ctx}/cms/comment/form" class="btn btn-default btnTool" title="${text('新增文章评论表')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
<% } %>
</div>
</div>
<div class="box-body">
<#form:form id="searchForm" model="${comment}" action="${ctx}/cms/comment/listData" method="post" class="form-inline hide"
data-page-no="${parameter.pageNo}" data-page-size="${parameter.pageSize}" data-order-by="${parameter.orderBy}">
<div class="form-group">
@@ -95,56 +95,56 @@
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-sm">${text('查询')}</button>
<button type="reset" class="btn btn-default btn-sm isQuick">${text('重置')}</button>
<button type="reset" class="btn btn-default btn-sm">${text('重置')}</button>
</div>
</#form:form>
<table id="dataGrid"></table>
<div id="dataGridPage"></div>
</div>
</div>
</div>
<% } %>
<script>
// 初始化DataGrid对象
$('#dataGrid').dataGrid({
searchForm: $("#searchForm"),
columnModel: [
{header:'${text('栏目编码')}', name:'categoryCode', index:'a.category_code', width:150, align:"left", frozen:true, formatter: function(val, obj, row, act){
return '<a href="${ctx}/cms/comment/form?id='+row.id+'" class="btnList" data-title="${text('编辑文章评论表')}">'+(val||row.id)+'</a>';
}},
{header:'${text('内容编号')}', name:'articleId', index:'a.article_id', width:150, align:"left"},
{header:'${text('父级评论')}', name:'parentId', index:'a.parent_id', width:150, align:"left"},
{header:'${text('内容标题')}', name:'articleTitle', index:'a.article_title', width:150, align:"left"},
{header:'${text('评论内容')}', name:'content', index:'a.content', width:150, align:"left"},
{header:'${text('评论姓名')}', name:'name', index:'a.name', width:150, align:"left"},
{header:'${text('评论IP')}', name:'ip', index:'a.ip', width:150, align:"left"},
{header:'${text('创建时间')}', name:'createDate', index:'a.create_date', width:150, align:"center"},
{header:'${text('审核人')}', name:'auditUserCode', index:'a.audit_user_code', width:150, align:"left"},
{header:'${text('审核时间')}', name:'auditDate', index:'a.audit_date', width:150, align:"center"},
{header:'${text('审核意见')}', name:'auditComment', index:'a.audit_comment', width:150, align:"left"},
{header:'${text('支持数')}', name:'hitsPlus', index:'a.hits_plus', width:150, align:"center"},
{header:'${text('反对数')}', name:'hitsMinus', index:'a.hits_minus', width:150, align:"center"},
{header:'${text('状态')}', name:'status', index:'a.status', width:150, align:"center", formatter: function(val, obj, row, act){
return js.getDictLabel(${@DictUtils.getDictListJson('sys_search_status')}, val, '${text('未知')}', true);
}},
{header:'${text('操作')}', name:'actions', width:120, formatter: function(val, obj, row, act){
var actions = [];
<% if(hasPermi('cms:comment:edit')){ %>
actions.push('<a href="${ctx}/cms/comment/form?id='+row.id+'" class="btnList" title="${text('编辑文章评论表')}"><i class="fa fa-pencil"></i></a>&nbsp;');
if (row.status == Global.STATUS_NORMAL){
actions.push('<a href="${ctx}/cms/comment/disable?id='+row.id+'" class="btnList" title="${text('停用文章评论表')}" data-confirm="${text('确认要停用该文章评论表吗')}"><i class="glyphicon glyphicon-ban-circle"></i></a>&nbsp;');
}
if (row.status == Global.STATUS_DISABLE){
actions.push('<a href="${ctx}/cms/comment/enable?id='+row.id+'" class="btnList" title="${text('启用文章评论表')}" data-confirm="${text('确认要启用该文章评论表吗')}"><i class="glyphicon glyphicon-ok-circle"></i></a>&nbsp;');
}
actions.push('<a href="${ctx}/cms/comment/delete?id='+row.id+'" class="btnList" title="${text('删除文章评论表')}" data-confirm="${text('确认要删除该文章评论表吗')}"><i class="fa fa-trash-o"></i></a>&nbsp;');
<% } %>
return actions.join('');
}}
],
// 加载成功后执行事件
ajaxSuccess: function(data){
}
});
<table id="dataGrid"></table>
<div id="dataGridPage"></div>
</div>
</div>
</div>
<% } %>
<script>
// 初始化DataGrid对象
$('#dataGrid').dataGrid({
searchForm: $("#searchForm"),
columnModel: [
{header:'${text('栏目编码')}', name:'categoryCode', index:'a.category_code', width:150, align:"left", frozen:true, formatter: function(val, obj, row, act){
return '<a href="${ctx}/cms/comment/form?id='+row.id+'" class="btnList" data-title="${text('编辑文章评论表')}">'+(val||row.id)+'</a>';
}},
{header:'${text('内容编号')}', name:'articleId', index:'a.article_id', width:150, align:"left"},
{header:'${text('父级评论')}', name:'parentId', index:'a.parent_id', width:150, align:"left"},
{header:'${text('内容标题')}', name:'articleTitle', index:'a.article_title', width:150, align:"left"},
{header:'${text('评论内容')}', name:'content', index:'a.content', width:150, align:"left"},
{header:'${text('评论姓名')}', name:'name', index:'a.name', width:150, align:"left"},
{header:'${text('评论IP')}', name:'ip', index:'a.ip', width:150, align:"left"},
{header:'${text('创建时间')}', name:'createDate', index:'a.create_date', width:150, align:"center"},
{header:'${text('审核人')}', name:'auditUserCode', index:'a.audit_user_code', width:150, align:"left"},
{header:'${text('审核时间')}', name:'auditDate', index:'a.audit_date', width:150, align:"center"},
{header:'${text('审核意见')}', name:'auditComment', index:'a.audit_comment', width:150, align:"left"},
{header:'${text('支持数')}', name:'hitsPlus', index:'a.hits_plus', width:150, align:"center"},
{header:'${text('反对数')}', name:'hitsMinus', index:'a.hits_minus', width:150, align:"center"},
{header:'${text('状态')}', name:'status', index:'a.status', width:150, align:"center", formatter: function(val, obj, row, act){
return js.getDictLabel(${@DictUtils.getDictListJson('sys_search_status')}, val, '${text('未知')}', true);
}},
{header:'${text('操作')}', name:'actions', width:120, formatter: function(val, obj, row, act){
var actions = [];
<% if(hasPermi('cms:comment:edit')){ %>
actions.push('<a href="${ctx}/cms/comment/form?id='+row.id+'" class="btnList" title="${text('编辑文章评论表')}"><i class="fa fa-pencil"></i></a>&nbsp;');
if (row.status == Global.STATUS_NORMAL){
actions.push('<a href="${ctx}/cms/comment/disable?id='+row.id+'" class="btnList" title="${text('停用文章评论表')}" data-confirm="${text('确认要停用该文章评论表吗')}"><i class="glyphicon glyphicon-ban-circle"></i></a>&nbsp;');
}
if (row.status == Global.STATUS_DISABLE){
actions.push('<a href="${ctx}/cms/comment/enable?id='+row.id+'" class="btnList" title="${text('启用文章评论表')}" data-confirm="${text('确认要启用该文章评论表吗')}"><i class="glyphicon glyphicon-ok-circle"></i></a>&nbsp;');
}
actions.push('<a href="${ctx}/cms/comment/delete?id='+row.id+'" class="btnList" title="${text('删除文章评论表')}" data-confirm="${text('确认要删除该文章评论表吗')}"><i class="fa fa-trash-o"></i></a>&nbsp;');
<% } %>
return actions.join('');
}}
],
// 加载成功后执行事件
ajaxSuccess: function(data){
}
});
</script>

View File

@@ -47,7 +47,7 @@
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-sm">${text('查询')}</button>
<button type="reset" class="btn btn-default btn-sm isQuick">${text('重置')}</button>
<button type="reset" class="btn btn-default btn-sm">${text('重置')}</button>
</div>
</#form:form>
<table id="dataGrid"></table>

View File

@@ -41,7 +41,7 @@
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-sm">${text('查询')}</button>
<button type="reset" class="btn btn-default btn-sm isQuick">${text('重置')}</button>
<button type="reset" class="btn btn-default btn-sm">${text('重置')}</button>
</div>
</#form:form>
<table id="dataGrid"></table>

View File

@@ -55,16 +55,14 @@ var setting = {
}
}, tree, loadTree = function() {
js.ajaxSubmit("${ctx}/cms/template/treeData?___t=" + new Date().getTime(), function(data) {
tree = $.fn.zTree.init($("#tree"), setting, data);//.expandAll(true);
// 展开第一级节点
var nodes = tree.getNodesByParam("level", 0);
for (var i = 0; i < nodes.length; i++) {
tree.expandNode(nodes[i], true, false, false);
}
// 展开第二级节点
nodes = tree.getNodesByParam("level", 1);
for (var i = 0; i < nodes.length; i++) {
tree.expandNode(nodes[i], true, false, false);
tree = $.fn.zTree.init($("#tree"), setting, data);
var level = -1, nodes;
while (++level <= 1) {
nodes = tree.getNodesByParam("level", level);
if (nodes.length > 10) { break; }
for(var i=0; i<nodes.length; i++) {
tree.expandNode(nodes[i], true, false, false);
}
}
}, null, null, js.text('loading.message'));
};

View File

@@ -54,7 +54,7 @@
<div class="form-group">
<button type="submit" class="btn btn-primary btn-sm">${text('查询')}</button>
<button type="reset" class="btn btn-default btn-sm isQuick">${text('重置')}</button>
<button type="reset" class="btn btn-default btn-sm">${text('重置')}</button>
</div>
</#form:form>
<table id="dataGrid"></table>

View File

@@ -19,6 +19,7 @@
href="${ctx}/list-${c.categoryCode}">${c.categoryName}</a></li>
</#html:if>
</#html:foreach>
<li><a href="http://jeesite.com" target="_blank">官方网站</a></li>
<li><a href="http://s.jeesite.com" target="_blank">技术服务</a></li>
<li id="siteSwitch" class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#" title="站点">子站切换 <span class="caret"></span></a>
@@ -35,7 +36,7 @@
</ul>
</li> -->
</ul>
<ul class="nav navbar-nav navbar-right hidden-xs hidden-sm">
<ul class="nav navbar-nav navbar-right">
<form class="navbar-form navbar-left nav-search" action="${ctx}/search">
<div class="form-group">
<input type="text" name="q" class="form-control" placeholder="全站搜索...">

View File

@@ -1,7 +1,7 @@
<% layout('layouts/default.html', {title: '列表页面', libs: []}){ %>
<% include('include/banner.html'){} %>
<div class="row main main-list">
<div class="col-sm-2 col-xs-12 main-left">
<div class="row">
<div class="col-xs-2">
<h4>栏目列表</h4>
<ul class="article-list">
<#html:foreach items="${qmark(categoryList! != null, categoryList!, categoryList(site.siteCode, category.parentCode, 50, ''))}" var="category,status">
@@ -9,7 +9,7 @@
</#html:foreach>
</ul>
</div>
<div class="col-sm-10 col-xs-12 main-right">
<div class="col-xs-10">
<h4>${category.categoryName}</h4>
<#html:if test="${page! != null && category.moduleType == 'article'}">
<ul class="article-list">

View File

@@ -1,7 +1,7 @@
<% layout('layouts/default.html', {title: '列表页面', libs: []}){ %>
<% include('include/banner.html'){} %>
<div class="row main main-list">
<div class="col-sm-2 col-xs-12 main-left">
<div class="row">
<div class="col-xs-2">
<h4>栏目列表</h4>
<ul class="article-list">
<#html:foreach items="${qmark(categoryList! != null, categoryList!, categoryList(site.siteCode, category.parentCode, 50, ''))}" var="category,status">
@@ -9,7 +9,7 @@
</#html:foreach>
</ul>
</div>
<div class="col-sm-10 col-xs-12 main-right">
<div class="col-xs-10">
<h4>${category.categoryName}</h4>
<div class="row"><br/>
<#html:foreach items="${qmark(categoryList! != null, categoryList!, [])}" var="category,status">

View File

@@ -1,6 +1,6 @@
<% layout('layouts/default.html', {title: '站点地图', libs: []}){ %>
<style type="text/css">
h2 {padding-left:10px;text-align:center;}
h2 {padding-left:10px;}
h3.title {padding:5px 5px;margin:15px 8px 10px;}
dl.map{border:1px solid #ddd;border-top:0;margin:10px 8px 8px;}
dl.map dt{border-top:1px solid #ddd;padding:10px 15px;} dl.map dd{margin:20px 30px 30px;}
@@ -8,7 +8,7 @@
dl.map span:hover{border:1px solid #bbb;background:#f1f1f1;}
dl.map span a:hover{text-decoration:none;color:#333;}
</style>
<div class="row main">
<div class="row">
<h2>站点地图</h2>
<#html:foreach items="${siteList()}" var="site">
<h3 class="title breadcrumb">${site.siteName}</h3>

View File

@@ -37,7 +37,7 @@ $(function(){
laydate.render({elem:'#ed', type:'date', format:'yyyy-MM-dd'});
});
</script>
<div class="row main">
<div class="row">
<form id="searchForm" method="get" class="search">
<input type="hidden" id="pageNo" name="pageNo" value="${page.pageNo!}"/>
<input type="hidden" id="t" name="t" value="${isNotBlank(t)?t:'article'}"/>

View File

@@ -1,6 +1,6 @@
<% layout('layouts/default.html', {title:'文章查看',libs: []}){ %>
<% include('include/banner.html'){} %>
<div class="row main article-view">
<div class="row article-view">
<h3 class="article-title">${article.title}</h3>
<blockquote class="article-desc">摘要:${article.description}</blockquote>
<div class="article-content uparse">${article.articleData.content}</div>

File diff suppressed because it is too large Load Diff

View File

@@ -19,6 +19,7 @@ CREATE TABLE js_gen_table
function_name_simple vargraphic(50),
function_author vargraphic(50),
gen_base_dir vargraphic(1000),
gen_front_dir vargraphic(1000),
options vargraphic(1000),
create_by varchar(64) NOT NULL,
create_date timestamp NOT NULL,
@@ -121,6 +122,7 @@ CREATE TABLE js_sys_company
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (company_code)
);
@@ -198,6 +200,7 @@ CREATE TABLE js_sys_dict_data
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (dict_code)
);
@@ -313,6 +316,27 @@ CREATE TABLE js_sys_file_upload
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (id)
);
-- 系统健康检查
CREATE TABLE js_sys_health_check
(
id varchar(64) NOT NULL,
server_name vargraphic(50),
server_url vargraphic(500),
lic_version vargraphic(10),
heart_time timestamp,
timeout decimal(10),
state char(1),
status char(1) DEFAULT '0' NOT NULL,
create_by varchar(64) NOT NULL,
create_date timestamp NOT NULL,
update_by varchar(64) NOT NULL,
update_date timestamp NOT NULL,
remarks vargraphic(500),
PRIMARY KEY (id)
);
@@ -423,6 +447,8 @@ CREATE TABLE js_sys_menu
is_show char(1) NOT NULL,
sys_code varchar(64) NOT NULL,
module_codes varchar(500) NOT NULL,
component varchar(500),
params varchar(500),
status char(1) DEFAULT '0' NOT NULL,
create_by varchar(64) NOT NULL,
create_date timestamp NOT NULL,
@@ -449,6 +475,7 @@ CREATE TABLE js_sys_menu
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (menu_code)
);
@@ -637,6 +664,7 @@ CREATE TABLE js_sys_office
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (office_code)
);
@@ -645,6 +673,7 @@ CREATE TABLE js_sys_office
CREATE TABLE js_sys_post
(
post_code varchar(64) NOT NULL,
view_code varchar(100),
post_name varchar(100) NOT NULL,
post_type varchar(100),
post_sort decimal(10),
@@ -665,6 +694,7 @@ CREATE TABLE js_sys_role
(
role_code varchar(64) NOT NULL,
role_name varchar(100) NOT NULL,
view_code varchar(100),
role_type varchar(100),
role_sort decimal(10),
is_sys char(1),
@@ -699,6 +729,7 @@ CREATE TABLE js_sys_role
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (role_code)
);
@@ -785,6 +816,7 @@ CREATE TABLE js_sys_user
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (user_code)
);

View File

@@ -19,6 +19,7 @@ CREATE TABLE js_gen_table
function_name_simple varchar(50),
function_author varchar(50),
gen_base_dir varchar(1000),
gen_front_dir varchar(1000),
options varchar(1000),
create_by varchar(64) NOT NULL,
create_date datetime NOT NULL,
@@ -121,6 +122,7 @@ CREATE TABLE js_sys_company
extend_d2 datetime,
extend_d3 datetime,
extend_d4 datetime,
extend_json varchar(1000),
PRIMARY KEY (company_code)
);
@@ -198,6 +200,7 @@ CREATE TABLE js_sys_dict_data
extend_d2 datetime,
extend_d3 datetime,
extend_d4 datetime,
extend_json varchar(1000),
PRIMARY KEY (dict_code)
);
@@ -313,6 +316,27 @@ CREATE TABLE js_sys_file_upload
extend_d2 datetime,
extend_d3 datetime,
extend_d4 datetime,
extend_json varchar(1000),
PRIMARY KEY (id)
);
-- 系统健康检查
CREATE TABLE js_sys_health_check
(
id varchar(64) NOT NULL,
server_name varchar(50),
server_url varchar(500),
lic_version varchar(10),
heart_time datetime,
timeout decimal(10),
state char(1),
status char(1) DEFAULT '0' NOT NULL,
create_by varchar(64) NOT NULL,
create_date datetime NOT NULL,
update_by varchar(64) NOT NULL,
update_date datetime NOT NULL,
remarks varchar(500),
PRIMARY KEY (id)
);
@@ -423,6 +447,8 @@ CREATE TABLE js_sys_menu
is_show char(1) NOT NULL,
sys_code varchar(64) NOT NULL,
module_codes varchar(500) NOT NULL,
component varchar(500),
params varchar(500),
status char(1) DEFAULT '0' NOT NULL,
create_by varchar(64) NOT NULL,
create_date datetime NOT NULL,
@@ -449,6 +475,7 @@ CREATE TABLE js_sys_menu
extend_d2 datetime,
extend_d3 datetime,
extend_d4 datetime,
extend_json varchar(1000),
PRIMARY KEY (menu_code)
);
@@ -637,6 +664,7 @@ CREATE TABLE js_sys_office
extend_d2 datetime,
extend_d3 datetime,
extend_d4 datetime,
extend_json varchar(1000),
PRIMARY KEY (office_code)
);
@@ -645,6 +673,7 @@ CREATE TABLE js_sys_office
CREATE TABLE js_sys_post
(
post_code varchar(64) NOT NULL,
view_code varchar(100),
post_name varchar(100) NOT NULL,
post_type varchar(100),
post_sort decimal(10),
@@ -665,6 +694,7 @@ CREATE TABLE js_sys_role
(
role_code varchar(64) NOT NULL,
role_name varchar(100) NOT NULL,
view_code varchar(100),
role_type varchar(100),
role_sort decimal(10),
is_sys char(1),
@@ -699,6 +729,7 @@ CREATE TABLE js_sys_role
extend_d2 datetime,
extend_d3 datetime,
extend_d4 datetime,
extend_json varchar(1000),
PRIMARY KEY (role_code)
);
@@ -785,6 +816,7 @@ CREATE TABLE js_sys_user
extend_d2 datetime,
extend_d3 datetime,
extend_d4 datetime,
extend_json varchar(1000),
PRIMARY KEY (user_code)
);

View File

@@ -19,6 +19,7 @@ CREATE TABLE [js_gen_table]
[function_name_simple] nvarchar(50),
[function_author] nvarchar(50),
[gen_base_dir] nvarchar(1000),
[gen_front_dir] nvarchar(1000),
[options] nvarchar(1000),
[create_by] varchar(64) NOT NULL,
[create_date] datetime NOT NULL,
@@ -121,6 +122,7 @@ CREATE TABLE [js_sys_company]
[extend_d2] datetime,
[extend_d3] datetime,
[extend_d4] datetime,
[extend_json] varchar(1000),
PRIMARY KEY ([company_code])
);
@@ -198,6 +200,7 @@ CREATE TABLE [js_sys_dict_data]
[extend_d2] datetime,
[extend_d3] datetime,
[extend_d4] datetime,
[extend_json] varchar(1000),
PRIMARY KEY ([dict_code])
);
@@ -313,6 +316,27 @@ CREATE TABLE [js_sys_file_upload]
[extend_d2] datetime,
[extend_d3] datetime,
[extend_d4] datetime,
[extend_json] varchar(1000),
PRIMARY KEY ([id])
);
-- 系统健康检查
CREATE TABLE [js_sys_health_check]
(
[id] varchar(64) NOT NULL,
[server_name] nvarchar(50),
[server_url] nvarchar(500),
[lic_version] nvarchar(10),
[heart_time] datetime,
[timeout] decimal(10),
[state] char(1),
[status] char(1) DEFAULT '0' NOT NULL,
[create_by] varchar(64) NOT NULL,
[create_date] datetime NOT NULL,
[update_by] varchar(64) NOT NULL,
[update_date] datetime NOT NULL,
[remarks] nvarchar(500),
PRIMARY KEY ([id])
);
@@ -423,6 +447,8 @@ CREATE TABLE [js_sys_menu]
[is_show] char(1) NOT NULL,
[sys_code] varchar(64) NOT NULL,
[module_codes] varchar(500) NOT NULL,
[component] varchar(500),
[params] varchar(500),
[status] char(1) DEFAULT '0' NOT NULL,
[create_by] varchar(64) NOT NULL,
[create_date] datetime NOT NULL,
@@ -449,6 +475,7 @@ CREATE TABLE [js_sys_menu]
[extend_d2] datetime,
[extend_d3] datetime,
[extend_d4] datetime,
[extend_json] varchar(1000),
PRIMARY KEY ([menu_code])
);
@@ -637,6 +664,7 @@ CREATE TABLE [js_sys_office]
[extend_d2] datetime,
[extend_d3] datetime,
[extend_d4] datetime,
[extend_json] varchar(1000),
PRIMARY KEY ([office_code])
);
@@ -645,6 +673,7 @@ CREATE TABLE [js_sys_office]
CREATE TABLE [js_sys_post]
(
[post_code] varchar(64) NOT NULL,
[view_code] varchar(100),
[post_name] varchar(100) NOT NULL,
[post_type] varchar(100),
[post_sort] decimal(10),
@@ -665,6 +694,7 @@ CREATE TABLE [js_sys_role]
(
[role_code] varchar(64) NOT NULL,
[role_name] varchar(100) NOT NULL,
[view_code] varchar(100),
[role_type] varchar(100),
[role_sort] decimal(10),
[is_sys] char(1),
@@ -699,6 +729,7 @@ CREATE TABLE [js_sys_role]
[extend_d2] datetime,
[extend_d3] datetime,
[extend_d4] datetime,
[extend_json] varchar(1000),
PRIMARY KEY ([role_code])
);
@@ -785,6 +816,7 @@ CREATE TABLE [js_sys_user]
[extend_d2] datetime,
[extend_d3] datetime,
[extend_d4] datetime,
[extend_json] varchar(1000),
PRIMARY KEY ([user_code])
);

View File

@@ -20,6 +20,7 @@ CREATE TABLE js_gen_table
function_name_simple varchar(50) COMMENT '生成功能名(简写)',
function_author varchar(50) COMMENT '生成功能作者',
gen_base_dir varchar(1000) COMMENT '生成基础路径',
gen_front_dir varchar(1000) COMMENT '生成前端路径',
options varchar(1000) COMMENT '其它生成选项',
create_by varchar(64) NOT NULL COMMENT '创建者',
create_date datetime NOT NULL COMMENT '创建时间',
@@ -122,6 +123,7 @@ CREATE TABLE js_sys_company
extend_d2 datetime COMMENT '扩展 Date 2',
extend_d3 datetime COMMENT '扩展 Date 3',
extend_d4 datetime COMMENT '扩展 Date 4',
extend_json varchar(1000) COMMENT '扩展 JSON',
PRIMARY KEY (company_code)
) COMMENT = '公司表';
@@ -199,6 +201,7 @@ CREATE TABLE js_sys_dict_data
extend_d2 datetime COMMENT '扩展 Date 2',
extend_d3 datetime COMMENT '扩展 Date 3',
extend_d4 datetime COMMENT '扩展 Date 4',
extend_json varchar(1000) COMMENT '扩展 JSON',
PRIMARY KEY (dict_code)
) COMMENT = '字典数据表';
@@ -314,10 +317,31 @@ CREATE TABLE js_sys_file_upload
extend_d2 datetime COMMENT '扩展 Date 2',
extend_d3 datetime COMMENT '扩展 Date 3',
extend_d4 datetime COMMENT '扩展 Date 4',
extend_json varchar(1000) COMMENT '扩展 JSON',
PRIMARY KEY (id)
) COMMENT = '文件上传表';
-- 系统健康检查
CREATE TABLE js_sys_health_check
(
id varchar(64) NOT NULL COMMENT '编号',
server_name varchar(50) COMMENT '系统节点名称',
server_url varchar(500) COMMENT '系统节点地址',
lic_version varchar(10) COMMENT '系统许可版本',
heart_time datetime COMMENT '最后心跳时间',
timeout decimal(10) COMMENT '超时时间',
state char(1) COMMENT '服务状态',
status char(1) DEFAULT '0' NOT NULL COMMENT '状态0正常 1删除 2停用',
create_by varchar(64) NOT NULL COMMENT '创建者',
create_date datetime NOT NULL COMMENT '创建时间',
update_by varchar(64) NOT NULL COMMENT '更新者',
update_date datetime NOT NULL COMMENT '更新时间',
remarks varchar(500) COMMENT '备注信息',
PRIMARY KEY (id)
) COMMENT = '系统健康检查';
-- 作业调度表
CREATE TABLE js_sys_job
(
@@ -424,6 +448,8 @@ CREATE TABLE js_sys_menu
is_show char(1) NOT NULL COMMENT '是否显示1显示 0隐藏',
sys_code varchar(64) NOT NULL COMMENT '归属系统default:主导航菜单、mobileApp:APP菜单',
module_codes varchar(500) NOT NULL COMMENT '归属模块(多个用逗号隔开)',
component varchar(500) COMMENT '组件路径',
params varchar(500) COMMENT '组件参数',
status char(1) DEFAULT '0' NOT NULL COMMENT '状态0正常 1删除 2停用',
create_by varchar(64) NOT NULL COMMENT '创建者',
create_date datetime NOT NULL COMMENT '创建时间',
@@ -450,6 +476,7 @@ CREATE TABLE js_sys_menu
extend_d2 datetime COMMENT '扩展 Date 2',
extend_d3 datetime COMMENT '扩展 Date 3',
extend_d4 datetime COMMENT '扩展 Date 4',
extend_json varchar(1000) COMMENT '扩展 JSON',
PRIMARY KEY (menu_code)
) COMMENT = '菜单表';
@@ -638,6 +665,7 @@ CREATE TABLE js_sys_office
extend_d2 datetime COMMENT '扩展 Date 2',
extend_d3 datetime COMMENT '扩展 Date 3',
extend_d4 datetime COMMENT '扩展 Date 4',
extend_json varchar(1000) COMMENT '扩展 JSON',
PRIMARY KEY (office_code)
) COMMENT = '组织机构表';
@@ -646,6 +674,7 @@ CREATE TABLE js_sys_office
CREATE TABLE js_sys_post
(
post_code varchar(64) NOT NULL COMMENT '岗位编码',
view_code varchar(100) COMMENT '岗位代码',
post_name varchar(100) NOT NULL COMMENT '岗位名称',
post_type varchar(100) COMMENT '岗位分类(高管、中层、基层)',
post_sort decimal(10) COMMENT '岗位排序(升序)',
@@ -666,6 +695,7 @@ CREATE TABLE js_sys_role
(
role_code varchar(64) NOT NULL COMMENT '角色编码',
role_name varchar(100) NOT NULL COMMENT '角色名称',
view_code varchar(100) COMMENT '角色代码',
role_type varchar(100) COMMENT '角色分类(高管、中层、基层、其它)',
role_sort decimal(10) COMMENT '角色排序(升序)',
is_sys char(1) COMMENT '系统内置1是 0否',
@@ -700,6 +730,7 @@ CREATE TABLE js_sys_role
extend_d2 datetime COMMENT '扩展 Date 2',
extend_d3 datetime COMMENT '扩展 Date 3',
extend_d4 datetime COMMENT '扩展 Date 4',
extend_json varchar(1000) COMMENT '扩展 JSON',
PRIMARY KEY (role_code)
) COMMENT = '角色表';
@@ -786,6 +817,7 @@ CREATE TABLE js_sys_user
extend_d2 datetime COMMENT '扩展 Date 2',
extend_d3 datetime COMMENT '扩展 Date 3',
extend_d4 datetime COMMENT '扩展 Date 4',
extend_json varchar(1000) COMMENT '扩展 JSON',
PRIMARY KEY (user_code)
) COMMENT = '用户表';

View File

@@ -19,6 +19,7 @@ CREATE TABLE js_gen_table
function_name_simple nvarchar2(50),
function_author nvarchar2(50),
gen_base_dir nvarchar2(1000),
gen_front_dir nvarchar2(1000),
options nvarchar2(1000),
create_by varchar2(64) NOT NULL,
create_date timestamp NOT NULL,
@@ -121,6 +122,7 @@ CREATE TABLE js_sys_company
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar2(1000),
PRIMARY KEY (company_code)
);
@@ -198,6 +200,7 @@ CREATE TABLE js_sys_dict_data
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar2(1000),
PRIMARY KEY (dict_code)
);
@@ -313,6 +316,27 @@ CREATE TABLE js_sys_file_upload
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar2(1000),
PRIMARY KEY (id)
);
-- 系统健康检查
CREATE TABLE js_sys_health_check
(
id varchar2(64) NOT NULL,
server_name nvarchar2(50),
server_url nvarchar2(500),
lic_version nvarchar2(10),
heart_time timestamp,
timeout number(10),
state char(1),
status char(1) DEFAULT '0' NOT NULL,
create_by varchar2(64) NOT NULL,
create_date timestamp NOT NULL,
update_by varchar2(64) NOT NULL,
update_date timestamp NOT NULL,
remarks nvarchar2(500),
PRIMARY KEY (id)
);
@@ -423,6 +447,8 @@ CREATE TABLE js_sys_menu
is_show char(1) NOT NULL,
sys_code varchar2(64) NOT NULL,
module_codes varchar2(500) NOT NULL,
component varchar2(500),
params varchar2(500),
status char(1) DEFAULT '0' NOT NULL,
create_by varchar2(64) NOT NULL,
create_date timestamp NOT NULL,
@@ -449,6 +475,7 @@ CREATE TABLE js_sys_menu
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar2(1000),
PRIMARY KEY (menu_code)
);
@@ -637,6 +664,7 @@ CREATE TABLE js_sys_office
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar2(1000),
PRIMARY KEY (office_code)
);
@@ -645,6 +673,7 @@ CREATE TABLE js_sys_office
CREATE TABLE js_sys_post
(
post_code varchar2(64) NOT NULL,
view_code varchar2(100),
post_name varchar2(100) NOT NULL,
post_type varchar2(100),
post_sort number(10),
@@ -665,6 +694,7 @@ CREATE TABLE js_sys_role
(
role_code varchar2(64) NOT NULL,
role_name varchar2(100) NOT NULL,
view_code varchar2(100),
role_type varchar2(100),
role_sort number(10),
is_sys char(1),
@@ -699,6 +729,7 @@ CREATE TABLE js_sys_role
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar2(1000),
PRIMARY KEY (role_code)
);
@@ -785,6 +816,7 @@ CREATE TABLE js_sys_user
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar2(1000),
PRIMARY KEY (user_code)
);
@@ -956,6 +988,7 @@ COMMENT ON COLUMN js_gen_table.function_name IS '生成功能名';
COMMENT ON COLUMN js_gen_table.function_name_simple IS '生成功能名(简写)';
COMMENT ON COLUMN js_gen_table.function_author IS '生成功能作者';
COMMENT ON COLUMN js_gen_table.gen_base_dir IS '生成基础路径';
COMMENT ON COLUMN js_gen_table.gen_front_dir IS '生成前端路径';
COMMENT ON COLUMN js_gen_table.options IS '其它生成选项';
COMMENT ON COLUMN js_gen_table.create_by IS '创建者';
COMMENT ON COLUMN js_gen_table.create_date IS '创建时间';
@@ -1040,6 +1073,7 @@ COMMENT ON COLUMN js_sys_company.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN js_sys_company.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN js_sys_company.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN js_sys_company.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN js_sys_company.extend_json IS '扩展 JSON';
COMMENT ON TABLE js_sys_company_office IS '公司部门关联表';
COMMENT ON COLUMN js_sys_company_office.company_code IS '公司编码';
COMMENT ON COLUMN js_sys_company_office.office_code IS '机构编码';
@@ -1099,6 +1133,7 @@ COMMENT ON COLUMN js_sys_dict_data.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN js_sys_dict_data.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN js_sys_dict_data.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN js_sys_dict_data.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN js_sys_dict_data.extend_json IS '扩展 JSON';
COMMENT ON TABLE js_sys_dict_type IS '字典类型表';
COMMENT ON COLUMN js_sys_dict_type.id IS '编号';
COMMENT ON COLUMN js_sys_dict_type.dict_name IS '字典名称';
@@ -1178,6 +1213,21 @@ COMMENT ON COLUMN js_sys_file_upload.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN js_sys_file_upload.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN js_sys_file_upload.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN js_sys_file_upload.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN js_sys_file_upload.extend_json IS '扩展 JSON';
COMMENT ON TABLE js_sys_health_check IS '系统健康检查';
COMMENT ON COLUMN js_sys_health_check.id IS '编号';
COMMENT ON COLUMN js_sys_health_check.server_name IS '系统节点名称';
COMMENT ON COLUMN js_sys_health_check.server_url IS '系统节点地址';
COMMENT ON COLUMN js_sys_health_check.lic_version IS '系统许可版本';
COMMENT ON COLUMN js_sys_health_check.heart_time IS '最后心跳时间';
COMMENT ON COLUMN js_sys_health_check.timeout IS '超时时间';
COMMENT ON COLUMN js_sys_health_check.state IS '服务状态';
COMMENT ON COLUMN js_sys_health_check.status IS '状态0正常 1删除 2停用';
COMMENT ON COLUMN js_sys_health_check.create_by IS '创建者';
COMMENT ON COLUMN js_sys_health_check.create_date IS '创建时间';
COMMENT ON COLUMN js_sys_health_check.update_by IS '更新者';
COMMENT ON COLUMN js_sys_health_check.update_date IS '更新时间';
COMMENT ON COLUMN js_sys_health_check.remarks IS '备注信息';
COMMENT ON TABLE js_sys_job IS '作业调度表';
COMMENT ON COLUMN js_sys_job.job_name IS '任务名称';
COMMENT ON COLUMN js_sys_job.job_group IS '任务组名';
@@ -1258,6 +1308,8 @@ COMMENT ON COLUMN js_sys_menu.weight IS '菜单权重';
COMMENT ON COLUMN js_sys_menu.is_show IS '是否显示1显示 0隐藏';
COMMENT ON COLUMN js_sys_menu.sys_code IS '归属系统default:主导航菜单、mobileApp:APP菜单';
COMMENT ON COLUMN js_sys_menu.module_codes IS '归属模块(多个用逗号隔开)';
COMMENT ON COLUMN js_sys_menu.component IS '组件路径';
COMMENT ON COLUMN js_sys_menu.params IS '组件参数';
COMMENT ON COLUMN js_sys_menu.status IS '状态0正常 1删除 2停用';
COMMENT ON COLUMN js_sys_menu.create_by IS '创建者';
COMMENT ON COLUMN js_sys_menu.create_date IS '创建时间';
@@ -1284,6 +1336,7 @@ COMMENT ON COLUMN js_sys_menu.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN js_sys_menu.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN js_sys_menu.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN js_sys_menu.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN js_sys_menu.extend_json IS '扩展 JSON';
COMMENT ON TABLE js_sys_module IS '模块表';
COMMENT ON COLUMN js_sys_module.module_code IS '模块编码';
COMMENT ON COLUMN js_sys_module.module_name IS '模块名称';
@@ -1430,8 +1483,10 @@ COMMENT ON COLUMN js_sys_office.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN js_sys_office.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN js_sys_office.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN js_sys_office.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN js_sys_office.extend_json IS '扩展 JSON';
COMMENT ON TABLE js_sys_post IS '员工岗位表';
COMMENT ON COLUMN js_sys_post.post_code IS '岗位编码';
COMMENT ON COLUMN js_sys_post.view_code IS '岗位代码';
COMMENT ON COLUMN js_sys_post.post_name IS '岗位名称';
COMMENT ON COLUMN js_sys_post.post_type IS '岗位分类(高管、中层、基层)';
COMMENT ON COLUMN js_sys_post.post_sort IS '岗位排序(升序)';
@@ -1446,6 +1501,7 @@ COMMENT ON COLUMN js_sys_post.corp_name IS '租户名称';
COMMENT ON TABLE js_sys_role IS '角色表';
COMMENT ON COLUMN js_sys_role.role_code IS '角色编码';
COMMENT ON COLUMN js_sys_role.role_name IS '角色名称';
COMMENT ON COLUMN js_sys_role.view_code IS '角色代码';
COMMENT ON COLUMN js_sys_role.role_type IS '角色分类(高管、中层、基层、其它)';
COMMENT ON COLUMN js_sys_role.role_sort IS '角色排序(升序)';
COMMENT ON COLUMN js_sys_role.is_sys IS '系统内置1是 0否';
@@ -1480,6 +1536,7 @@ COMMENT ON COLUMN js_sys_role.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN js_sys_role.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN js_sys_role.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN js_sys_role.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN js_sys_role.extend_json IS '扩展 JSON';
COMMENT ON TABLE js_sys_role_data_scope IS '角色数据权限表';
COMMENT ON COLUMN js_sys_role_data_scope.role_code IS '控制角色编码';
COMMENT ON COLUMN js_sys_role_data_scope.ctrl_type IS '控制类型';
@@ -1548,6 +1605,7 @@ COMMENT ON COLUMN js_sys_user.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN js_sys_user.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN js_sys_user.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN js_sys_user.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN js_sys_user.extend_json IS '扩展 JSON';
COMMENT ON TABLE js_sys_user_data_scope IS '用户数据权限表';
COMMENT ON COLUMN js_sys_user_data_scope.user_code IS '控制用户编码';
COMMENT ON COLUMN js_sys_user_data_scope.ctrl_type IS '控制类型';

View File

@@ -19,6 +19,7 @@ CREATE TABLE js_gen_table
function_name_simple varchar(50),
function_author varchar(50),
gen_base_dir varchar(1000),
gen_front_dir varchar(1000),
options varchar(1000),
create_by varchar(64) NOT NULL,
create_date timestamp NOT NULL,
@@ -121,6 +122,7 @@ CREATE TABLE js_sys_company
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (company_code)
) WITHOUT OIDS;
@@ -198,6 +200,7 @@ CREATE TABLE js_sys_dict_data
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (dict_code)
) WITHOUT OIDS;
@@ -313,6 +316,27 @@ CREATE TABLE js_sys_file_upload
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (id)
) WITHOUT OIDS;
-- 系统健康检查
CREATE TABLE js_sys_health_check
(
id varchar(64) NOT NULL,
server_name varchar(50),
server_url varchar(500),
lic_version varchar(10),
heart_time timestamp,
timeout decimal(10),
state char(1),
status char(1) DEFAULT '0' NOT NULL,
create_by varchar(64) NOT NULL,
create_date timestamp NOT NULL,
update_by varchar(64) NOT NULL,
update_date timestamp NOT NULL,
remarks varchar(500),
PRIMARY KEY (id)
) WITHOUT OIDS;
@@ -423,6 +447,8 @@ CREATE TABLE js_sys_menu
is_show char(1) NOT NULL,
sys_code varchar(64) NOT NULL,
module_codes varchar(500) NOT NULL,
component varchar(500),
params varchar(500),
status char(1) DEFAULT '0' NOT NULL,
create_by varchar(64) NOT NULL,
create_date timestamp NOT NULL,
@@ -449,6 +475,7 @@ CREATE TABLE js_sys_menu
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (menu_code)
) WITHOUT OIDS;
@@ -637,6 +664,7 @@ CREATE TABLE js_sys_office
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (office_code)
) WITHOUT OIDS;
@@ -645,6 +673,7 @@ CREATE TABLE js_sys_office
CREATE TABLE js_sys_post
(
post_code varchar(64) NOT NULL,
view_code varchar(100),
post_name varchar(100) NOT NULL,
post_type varchar(100),
post_sort decimal(10),
@@ -665,6 +694,7 @@ CREATE TABLE js_sys_role
(
role_code varchar(64) NOT NULL,
role_name varchar(100) NOT NULL,
view_code varchar(100),
role_type varchar(100),
role_sort decimal(10),
is_sys char(1),
@@ -699,6 +729,7 @@ CREATE TABLE js_sys_role
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (role_code)
) WITHOUT OIDS;
@@ -785,6 +816,7 @@ CREATE TABLE js_sys_user
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
extend_json varchar(1000),
PRIMARY KEY (user_code)
) WITHOUT OIDS;
@@ -956,6 +988,7 @@ COMMENT ON COLUMN js_gen_table.function_name IS '生成功能名';
COMMENT ON COLUMN js_gen_table.function_name_simple IS '生成功能名(简写)';
COMMENT ON COLUMN js_gen_table.function_author IS '生成功能作者';
COMMENT ON COLUMN js_gen_table.gen_base_dir IS '生成基础路径';
COMMENT ON COLUMN js_gen_table.gen_front_dir IS '生成前端路径';
COMMENT ON COLUMN js_gen_table.options IS '其它生成选项';
COMMENT ON COLUMN js_gen_table.create_by IS '创建者';
COMMENT ON COLUMN js_gen_table.create_date IS '创建时间';
@@ -1040,6 +1073,7 @@ COMMENT ON COLUMN js_sys_company.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN js_sys_company.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN js_sys_company.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN js_sys_company.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN js_sys_company.extend_json IS '扩展 JSON';
COMMENT ON TABLE js_sys_company_office IS '公司部门关联表';
COMMENT ON COLUMN js_sys_company_office.company_code IS '公司编码';
COMMENT ON COLUMN js_sys_company_office.office_code IS '机构编码';
@@ -1099,6 +1133,7 @@ COMMENT ON COLUMN js_sys_dict_data.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN js_sys_dict_data.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN js_sys_dict_data.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN js_sys_dict_data.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN js_sys_dict_data.extend_json IS '扩展 JSON';
COMMENT ON TABLE js_sys_dict_type IS '字典类型表';
COMMENT ON COLUMN js_sys_dict_type.id IS '编号';
COMMENT ON COLUMN js_sys_dict_type.dict_name IS '字典名称';
@@ -1178,6 +1213,21 @@ COMMENT ON COLUMN js_sys_file_upload.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN js_sys_file_upload.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN js_sys_file_upload.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN js_sys_file_upload.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN js_sys_file_upload.extend_json IS '扩展 JSON';
COMMENT ON TABLE js_sys_health_check IS '系统健康检查';
COMMENT ON COLUMN js_sys_health_check.id IS '编号';
COMMENT ON COLUMN js_sys_health_check.server_name IS '系统节点名称';
COMMENT ON COLUMN js_sys_health_check.server_url IS '系统节点地址';
COMMENT ON COLUMN js_sys_health_check.lic_version IS '系统许可版本';
COMMENT ON COLUMN js_sys_health_check.heart_time IS '最后心跳时间';
COMMENT ON COLUMN js_sys_health_check.timeout IS '超时时间';
COMMENT ON COLUMN js_sys_health_check.state IS '服务状态';
COMMENT ON COLUMN js_sys_health_check.status IS '状态0正常 1删除 2停用';
COMMENT ON COLUMN js_sys_health_check.create_by IS '创建者';
COMMENT ON COLUMN js_sys_health_check.create_date IS '创建时间';
COMMENT ON COLUMN js_sys_health_check.update_by IS '更新者';
COMMENT ON COLUMN js_sys_health_check.update_date IS '更新时间';
COMMENT ON COLUMN js_sys_health_check.remarks IS '备注信息';
COMMENT ON TABLE js_sys_job IS '作业调度表';
COMMENT ON COLUMN js_sys_job.job_name IS '任务名称';
COMMENT ON COLUMN js_sys_job.job_group IS '任务组名';
@@ -1258,6 +1308,8 @@ COMMENT ON COLUMN js_sys_menu.weight IS '菜单权重';
COMMENT ON COLUMN js_sys_menu.is_show IS '是否显示1显示 0隐藏';
COMMENT ON COLUMN js_sys_menu.sys_code IS '归属系统default:主导航菜单、mobileApp:APP菜单';
COMMENT ON COLUMN js_sys_menu.module_codes IS '归属模块(多个用逗号隔开)';
COMMENT ON COLUMN js_sys_menu.component IS '组件路径';
COMMENT ON COLUMN js_sys_menu.params IS '组件参数';
COMMENT ON COLUMN js_sys_menu.status IS '状态0正常 1删除 2停用';
COMMENT ON COLUMN js_sys_menu.create_by IS '创建者';
COMMENT ON COLUMN js_sys_menu.create_date IS '创建时间';
@@ -1284,6 +1336,7 @@ COMMENT ON COLUMN js_sys_menu.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN js_sys_menu.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN js_sys_menu.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN js_sys_menu.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN js_sys_menu.extend_json IS '扩展 JSON';
COMMENT ON TABLE js_sys_module IS '模块表';
COMMENT ON COLUMN js_sys_module.module_code IS '模块编码';
COMMENT ON COLUMN js_sys_module.module_name IS '模块名称';
@@ -1430,8 +1483,10 @@ COMMENT ON COLUMN js_sys_office.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN js_sys_office.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN js_sys_office.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN js_sys_office.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN js_sys_office.extend_json IS '扩展 JSON';
COMMENT ON TABLE js_sys_post IS '员工岗位表';
COMMENT ON COLUMN js_sys_post.post_code IS '岗位编码';
COMMENT ON COLUMN js_sys_post.view_code IS '岗位代码';
COMMENT ON COLUMN js_sys_post.post_name IS '岗位名称';
COMMENT ON COLUMN js_sys_post.post_type IS '岗位分类(高管、中层、基层)';
COMMENT ON COLUMN js_sys_post.post_sort IS '岗位排序(升序)';
@@ -1446,6 +1501,7 @@ COMMENT ON COLUMN js_sys_post.corp_name IS '租户名称';
COMMENT ON TABLE js_sys_role IS '角色表';
COMMENT ON COLUMN js_sys_role.role_code IS '角色编码';
COMMENT ON COLUMN js_sys_role.role_name IS '角色名称';
COMMENT ON COLUMN js_sys_role.view_code IS '角色代码';
COMMENT ON COLUMN js_sys_role.role_type IS '角色分类(高管、中层、基层、其它)';
COMMENT ON COLUMN js_sys_role.role_sort IS '角色排序(升序)';
COMMENT ON COLUMN js_sys_role.is_sys IS '系统内置1是 0否';
@@ -1480,6 +1536,7 @@ COMMENT ON COLUMN js_sys_role.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN js_sys_role.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN js_sys_role.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN js_sys_role.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN js_sys_role.extend_json IS '扩展 JSON';
COMMENT ON TABLE js_sys_role_data_scope IS '角色数据权限表';
COMMENT ON COLUMN js_sys_role_data_scope.role_code IS '控制角色编码';
COMMENT ON COLUMN js_sys_role_data_scope.ctrl_type IS '控制类型';
@@ -1548,6 +1605,7 @@ COMMENT ON COLUMN js_sys_user.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN js_sys_user.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN js_sys_user.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN js_sys_user.extend_d4 IS '扩展 Date 4';
COMMENT ON COLUMN js_sys_user.extend_json IS '扩展 JSON';
COMMENT ON TABLE js_sys_user_data_scope IS '用户数据权限表';
COMMENT ON COLUMN js_sys_user_data_scope.user_code IS '控制用户编码';
COMMENT ON COLUMN js_sys_user_data_scope.ctrl_type IS '控制类型';

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId>
<version>4.7.0-SNAPSHOT</version>
<version>5.0.2-SNAPSHOT</version>
<relativePath>../../parent/pom.xml</relativePath>
</parent>
@@ -17,12 +17,16 @@
<url>http://jeesite.com</url>
<inceptionYear>2013-Now</inceptionYear>
<properties>
</properties>
<dependencies>
<!-- MySQL -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Oracle 11g -->

View File

@@ -6,10 +6,12 @@ package com.jeesite.autoconfigure.sys;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.jeesite.common.mybatis.MyBatisFactoryBean;
import com.jeesite.modules.msg.service.MsgInnerService;
import com.jeesite.modules.sys.service.AreaService;
import com.jeesite.modules.sys.service.CompanyService;
import com.jeesite.modules.sys.service.EmpUserService;
@@ -32,6 +34,7 @@ import com.jeesite.modules.sys.service.support.PostServiceSupport;
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnBean(MyBatisFactoryBean.class)
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
public class SysAutoConfiguration {
@Bean
@@ -76,4 +79,10 @@ public class SysAutoConfiguration {
return new PostServiceSupport();
}
@Bean
@ConditionalOnMissingBean
public MsgInnerService msgInnerService(){
return new MsgInnerService();
}
}

View File

@@ -4,19 +4,19 @@
*/
package com.jeesite.common.shiro.filter;
import com.jeesite.common.lang.ExceptionUtils;
import com.jeesite.common.lang.StringUtils;
import com.jeesite.common.shiro.realm.BaseAuthorizingRealm;
import com.jeesite.modules.sys.utils.UserUtils;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.util.WebUtils;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jeesite.common.lang.ExceptionUtils;
import com.jeesite.common.lang.StringUtils;
import com.jeesite.common.shiro.realm.BaseAuthorizingRealm;
/**
* CAS过滤器
@@ -25,15 +25,12 @@ import javax.servlet.http.HttpServletResponse;
*/
@SuppressWarnings("deprecation")
public class CasFilter extends org.apache.shiro.cas.CasFilter {
private BaseAuthorizingRealm authorizingRealm;
/**
* 登录成功调用事件
*/
@Override
protected boolean onLoginSuccess(AuthenticationToken token, Subject subject, ServletRequest request, ServletResponse response) throws Exception {
authorizingRealm.onLoginSuccess(UserUtils.getLoginInfo(), (HttpServletRequest)request);
return FormFilter.onLoginSuccess((HttpServletRequest)request, (HttpServletResponse)response);
}
@@ -69,7 +66,7 @@ public class CasFilter extends org.apache.shiro.cas.CasFilter {
}
public void setAuthorizingRealm(BaseAuthorizingRealm authorizingRealm) {
this.authorizingRealm = authorizingRealm;
}
}

View File

@@ -372,6 +372,7 @@ public class FormFilter extends org.apache.shiro.web.filter.authc.FormAuthentica
}
data.put("result", "login");
data.put("demoMode", Global.isDemoMode());
return data;
}
@@ -423,6 +424,7 @@ public class FormFilter extends org.apache.shiro.web.filter.authc.FormAuthentica
}
data.put("result", Global.FALSE);
data.put("demoMode", Global.isDemoMode());
return data;
}

View File

@@ -4,14 +4,15 @@
*/
package com.jeesite.common.shiro.filter;
import com.jeesite.common.config.Global;
import com.jeesite.common.lang.StringUtils;
import org.apache.shiro.web.filter.AccessControlFilter;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.apache.shiro.web.filter.AccessControlFilter;
import com.jeesite.common.config.Global;
import com.jeesite.common.lang.StringUtils;
/**
* 内部系统访问过滤器
* @author ThinkGem
@@ -28,7 +29,7 @@ public class InnerFilter extends AccessControlFilter {
"shiro.innerFilterAllowRemoteAddrs", "127.0.0.1"), ",");
}
if (prefixes != null && request instanceof HttpServletRequest){
String ip = request.getRemoteAddr();
String ip = ((HttpServletRequest)request).getRemoteAddr();
for (String prefix : prefixes){
result = StringUtils.startsWithIgnoreCase(ip, StringUtils.trim(prefix));
if (result){

View File

@@ -73,7 +73,7 @@ public class AuthorizingRealm extends BaseAuthorizingRealm {
* @return 16位salt密钥 + 40位hash密码
*/
@Override
public String encryptPassword(String plainPassword) {
public String encryptPassword(String plainPassword) {
String plain = EncodeUtils.decodeHtml(plainPassword);
byte[] salt = Sha1Utils.genSalt(SALT_SIZE);
byte[] hashPassword = Sha1Utils.sha1(plain.getBytes(), salt, HASH_INTERATIONS);

View File

@@ -4,6 +4,22 @@
*/
package com.jeesite.common.shiro.realm;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.validation.ValidationException;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.cas.CasToken;
import org.jasig.cas.client.authentication.AttributePrincipal;
import org.jasig.cas.client.validation.Assertion;
import org.jasig.cas.client.validation.Cas20ServiceTicketValidator;
import org.jasig.cas.client.validation.TicketValidationException;
import org.jasig.cas.client.validation.TicketValidator;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import com.jeesite.common.codec.EncodeUtils;
import com.jeesite.common.collect.MapUtils;
import com.jeesite.common.lang.ObjectUtils;
@@ -19,20 +35,6 @@ import com.jeesite.modules.sys.service.EmpUserService;
import com.jeesite.modules.sys.service.UserService;
import com.jeesite.modules.sys.utils.LogUtils;
import com.jeesite.modules.sys.utils.UserUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.cas.CasToken;
import org.jasig.cas.client.authentication.AttributePrincipal;
import org.jasig.cas.client.validation.Assertion;
import org.jasig.cas.client.validation.Cas20ServiceTicketValidator;
import org.jasig.cas.client.validation.TicketValidationException;
import org.jasig.cas.client.validation.TicketValidator;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import javax.servlet.http.HttpServletRequest;
import javax.validation.ValidationException;
import java.util.Map;
/**
* 系统认证授权实现类
@@ -179,11 +181,20 @@ public class CasAuthorizingRealm extends BaseAuthorizingRealm {
@Override
public void onLoginSuccess(LoginInfo loginInfo, HttpServletRequest request) {
super.onLoginSuccess(loginInfo, request);
// 单点登录登出句柄登录时注入session在这之前必须获取下授权信息
String ticket = loginInfo.getParam("ticket");
casOutHandler.recordSession(request, ticket);
//System.out.print("__sid: "+request.getSession().getId());
//System.out.println(" == "+UserUtils.getSession().getId());
// 更新登录IP、时间、会话ID等
User user = UserUtils.get(loginInfo.getId());
getUserService().updateUserLoginInfo(user);
// 记录用户登录日志
LogUtils.saveLog(user, ServletUtils.getRequest(), "系统登录", Log.TYPE_LOGIN_LOGOUT);
}
@Override

View File

@@ -4,12 +4,12 @@
*/
package com.jeesite.common.utils.excel.fieldtype;
import java.util.List;
import com.jeesite.common.lang.StringUtils;
import com.jeesite.modules.sys.entity.Area;
import com.jeesite.modules.sys.utils.AreaUtils;
import java.util.List;
/**
* 字段类型转换
* @author ThinkGem
@@ -28,7 +28,7 @@ public class AreaType implements FieldType {
* 获取对象值(导入)
*/
@Override
public Object getValue(String val) {
public Object getValue(String val) {
for (Area e : list){
if (StringUtils.trimToEmpty(val).equals(e.getAreaName())){
return e;

View File

@@ -28,7 +28,7 @@ public class OfficeType implements FieldType {
* 获取对象值(导入)
*/
@Override
public Object getValue(String val) {
public Object getValue(String val) {
for (Office e : list){
if (StringUtils.trimToEmpty(val).equals(e.getOfficeName())){
return e;
@@ -41,7 +41,7 @@ public class OfficeType implements FieldType {
* 设置对象值(导出)
*/
@Override
public String setValue(Object val) {
public String setValue(Object val) {
if (val != null && ((Office)val).getOfficeName() != null){
return ((Office)val).getOfficeName();
}

View File

@@ -32,7 +32,7 @@ public class PostListType implements FieldType {
* 获取对象值(导入)
*/
@Override
public Object getValue(String val) {
public Object getValue(String val) {
List<String> list = new ArrayList<String>();
for (String s : StringUtils.split(val, ",")) {
for (Post e : postList) {
@@ -48,7 +48,7 @@ public class PostListType implements FieldType {
* 设置对象值(导出)
*/
@Override
public String setValue(Object val) {
public String setValue(Object val) {
if (val != null) {
@SuppressWarnings("unchecked")
List<Post> postList = (List<Post>) val;

View File

@@ -32,7 +32,7 @@ public class RoleListType implements FieldType {
* 获取对象值(导入)
*/
@Override
public Object getValue(String val) {
public Object getValue(String val) {
List<String> list = new ArrayList<String>();
for (String s : StringUtils.split(val, ",")) {
for (Role e : roleList) {
@@ -48,7 +48,7 @@ public class RoleListType implements FieldType {
* 设置对象值(导出)
*/
@Override
public String setValue(Object val) {
public String setValue(Object val) {
if (val != null) {
@SuppressWarnings("unchecked")
List<Role> roleList = (List<Role>) val;

View File

@@ -18,6 +18,7 @@ import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSource
import org.apache.shiro.web.filter.InvalidRequestFilter;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -52,6 +53,7 @@ import com.jeesite.common.shiro.web.WebSecurityManager;
*/
@SuppressWarnings("deprecation")
@Configuration(proxyBeanMethods = false)
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
public class ShiroConfig {
/**

View File

@@ -10,7 +10,7 @@ import org.springframework.web.servlet.config.annotation.DefaultServletHandlerCo
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 是否启用默认 Servlet 映射(启用后可访问 webapp 下的静态资源访问
* 是否启用默认 Servlet 映射(启用后可访问 webapp 下的静态资源)
* @author ThinkGem
* @version 2022年4月18日
*/

View File

@@ -4,20 +4,14 @@
*/
package com.jeesite.modules.config.web;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import com.alibaba.druid.util.Utils;
import com.jeesite.common.web.http.ServletUtils;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
/**
* Druid 配置
@@ -50,19 +44,7 @@ public class DruidStatConfig {
@Bean
public ServletRegistrationBean<StatViewServlet> druidServlet() {
ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>();
bean.setServlet(new StatViewServlet(){
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String requestURI = request.getRequestURI();
if (requestURI.endsWith("/druid/js/common.js")) {
String text = Utils.readFromResource("support/http/resources/js/common.js");
text = text.replaceAll("<a.*?banner\"></a><br/>", "JeeSite 数据监控, ");
ServletUtils.renderString(response, text, "text/javascript;charset=UTF-8");
return;
}
super.service(request, response);
}
});
bean.setServlet(new StatViewServlet());
bean.addUrlMappings("/druid/*");
return bean;
}

View File

@@ -7,6 +7,7 @@ package com.jeesite.modules.msg.dao;
import com.jeesite.common.dao.CrudDao;
import com.jeesite.common.mybatis.annotation.MyBatisDao;
import com.jeesite.modules.msg.entity.MsgInner;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
/**
* 内部消息DAO接口
@@ -14,6 +15,7 @@ import com.jeesite.modules.msg.entity.MsgInner;
* @version 2019-03-12
*/
@MyBatisDao
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
public interface MsgInnerDao extends CrudDao<MsgInner> {
}

View File

@@ -7,6 +7,7 @@ package com.jeesite.modules.msg.dao;
import com.jeesite.common.dao.CrudDao;
import com.jeesite.common.mybatis.annotation.MyBatisDao;
import com.jeesite.modules.msg.entity.MsgInnerRecord;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
/**
* 内部消息发送记录表DAO接口
@@ -14,6 +15,7 @@ import com.jeesite.modules.msg.entity.MsgInnerRecord;
* @version 2019-03-12
*/
@MyBatisDao
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
public interface MsgInnerRecordDao extends CrudDao<MsgInnerRecord> {
/**

View File

@@ -23,7 +23,6 @@ import com.jeesite.modules.sys.entity.User;
import com.jeesite.modules.sys.service.EmpUserService;
import io.netty.util.concurrent.DefaultThreadFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
@@ -38,7 +37,6 @@ import java.util.concurrent.TimeUnit;
* @author ThinkGem
* @version 2019-03-12
*/
@Service
public class MsgInnerService extends CrudService<MsgInnerDao, MsgInner> {
@Autowired
@@ -62,8 +60,7 @@ public class MsgInnerService extends CrudService<MsgInnerDao, MsgInner> {
/**
* 查询分页数据
* @param msgInner 查询条件
* @param msgInner.page 分页对象
* @param msgInner 查询条件.page 分页对象
* @return
*/
@Override
@@ -190,7 +187,7 @@ public class MsgInnerService extends CrudService<MsgInnerDao, MsgInner> {
if (Global.TRUE.equals(Global.getProperty("msg.realtime.enabled"))){
msgPushThreadPool.submit(new Runnable() {
@Override
public void run() {
public void run() {
try{
MsgPushUtils.getMsgPushTask().execute();
}catch(Exception ex){

View File

@@ -9,6 +9,7 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
@@ -33,6 +34,7 @@ import com.jeesite.modules.msg.service.MsgInnerService;
*/
@Controller
@RequestMapping(value = "${adminPath}/msg/msgInner")
@ConditionalOnProperty(name={"user.enabled","web.core.enabled"}, havingValue="true", matchIfMissing=true)
public class MsgInnerController extends BaseController {
@Autowired

View File

@@ -7,6 +7,7 @@ package com.jeesite.modules.sys.dao;
import com.jeesite.common.dao.TreeDao;
import com.jeesite.common.mybatis.annotation.MyBatisDao;
import com.jeesite.modules.sys.entity.Area;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
/**
* 行政区划DAO接口
@@ -14,6 +15,7 @@ import com.jeesite.modules.sys.entity.Area;
* @version 2017-03-22
*/
@MyBatisDao
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
public interface AreaDao extends TreeDao<Area> {
}

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