Compare commits

...

148 Commits

Author SHA1 Message Date
thinkgem
9ce3eb94fa 4.6.2 2023-03-27 18:11:20 +08:00
thinkgem
83de9b91c0 spring boot 2.7.10 2023-03-25 12:49:35 +08:00
thinkgem
3f2f00b6f6 update README.md 2023-03-17 15:41:46 +08:00
thinkgem
6beec711b6 update 2023-03-16 20:19:22 +08:00
thinkgem
0352fff7e6 增加子表编辑的另一种实现例子 2023-03-16 19:19:35 +08:00
thinkgem
9dc99927b3 update sysDesktop.html 2023-03-15 16:59:17 +08:00
thinkgem
d7d5ef01ed CMS网站主题优化 2023-03-07 13:50:27 +08:00
thinkgem
53abddef44 CMS网站主题优化 2023-03-07 11:26:00 +08:00
thinkgem
fe17f43f3a 同步更新 2023-03-06 11:26:27 +08:00
thinkgem
4090a655e9 点击重置按钮即查询 2023-03-06 11:19:59 +08:00
thinkgem
a660a8e912 jeesite client 2023-03-05 22:00:54 +08:00
thinkgem
22e1a6d7ea update 2023-03-05 22:00:22 +08:00
thinkgem
2abe3348fb 分页的输入框,用户说太隐蔽了,所以增加边框提示;分页输入框增加宽度自适应;优化返回无效页码的提示信息。 2023-02-22 19:42:25 +08:00
thinkgem
8d7c499321 代码优化 2023-02-21 10:02:41 +08:00
thinkgem
7ad0379066 修正CAS中央认证服务退出后,没有退出客户端的问题 2023-02-21 10:02:23 +08:00
thinkgem
da5dbdf23b update README.md 2023-02-07 11:53:05 +08:00
thinkgem
4866a13365 Merge remote-tracking branch 'origin/v4.temp' into v4.temp 2023-02-07 11:50:07 +08:00
thinkgem
9d4f849371 4.6.1 2023-02-07 11:49:56 +08:00
thinkgem
5dd679eb24 update DaoMapperTest.java 2023-02-02 23:17:25 +08:00
thinkgem
f788cb7e78 update README.md 2023-01-31 15:25:34 +08:00
thinkgem
9ec99230ad update 2023-01-31 15:25:13 +08:00
thinkgem
9c390d7cb1 mybatis 3.5.11 2023-01-29 14:16:03 +08:00
thinkgem
28aef61cea spring boot 2.7.8、shiro 1.11.0 2023-01-23 22:47:48 +08:00
thinkgem
15ae96b04a update 2022-12-30 15:29:20 +08:00
thinkgem
a8764cf247 copyrightYear: 2023 2022-12-30 11:25:09 +08:00
thinkgem
e5842b42f4 remove JaxbMapper.java 2022-12-23 10:41:57 +08:00
thinkgem
4d7a40d30f update 2022-12-20 23:29:02 +08:00
thinkgem
fe18621aa9 4.6.0 2022-11-08 14:10:09 +08:00
thinkgem
a029e6d56a mybatis 3.5.10、jsqlparser 4.5、druid 1.2.11 2022-11-08 11:11:31 +08:00
thinkgem
73f64ca648 update config 2022-11-02 16:55:08 +08:00
thinkgem
63e3bd03b4 update 2022-11-02 16:54:15 +08:00
thinkgem
4103bf1d6a 微服务情况下 emputils.get 有时候没有数据问题 2022-11-02 16:36:51 +08:00
thinkgem
7a33736d43 spring boot 2.7 2022-10-19 18:30:18 +08:00
thinkgem
298d1adbba commons-text 1.10.0 2022-10-14 17:01:20 +08:00
thinkgem
9be2959d7d update 2022-10-13 23:29:56 +08:00
thinkgem
0fad02369b beetl 3.10 2022-10-13 23:29:33 +08:00
thinkgem
548a747e19 shiro 1.10.0 2022-10-13 11:13:56 +08:00
thinkgem
e2101b438f next 2022-09-30 10:12:00 +08:00
thinkgem
bbcb4b937d 排除子表实体的Excel注解 2022-09-19 11:55:31 +08:00
thinkgem
bcde73efed fix 7z 2022-09-08 18:14:49 +08:00
thinkgem
a6ddb4ed16 fastjson noneautotype 2022-09-02 17:41:47 +08:00
thinkgem
59fbee7a2f deprecated jaxbMapper 2022-09-01 18:41:58 +08:00
thinkgem
4ff93c1553 update README.md 2022-08-24 17:27:56 +08:00
thinkgem
e00dda642a 修复因黑暗主题导致的新建后显示角色编码问题 2022-08-18 11:23:40 +08:00
thinkgem
60971ac312 日志记录创建时间增加秒 2022-08-11 00:02:45 +08:00
thinkgem
6bcd2a28c4 细节微调 2022-08-09 16:43:59 +08:00
thinkgem
4a6c15d56a update README.md 2022-08-09 11:03:40 +08:00
thinkgem
35ad27a702 清理无用注释 2022-08-08 21:09:02 +08:00
thinkgem
97351bc3df 支持OSS对象存储的文件预览 2022-08-08 12:31:14 +08:00
thinkgem
4015073943 update 2022-08-06 11:27:06 +08:00
thinkgem
bdcabc1281 replace ad 2022-08-05 16:30:39 +08:00
thinkgem
e0a653a1df 重命名ur是sql关键词,导致jsqlparser不能解析 2022-08-02 10:30:27 +08:00
thinkgem
ea851e4c72 代码优化 2022-08-01 09:03:31 +08:00
thinkgem
ee8ec1dd3d spring boot 2.6.10 2022-07-22 14:49:15 +08:00
thinkgem
34e326aff6 新增左树右表和导入导出代码生成模板 2022-07-12 16:38:42 +08:00
thinkgem
e9864f0270 update 2022-07-12 15:47:18 +08:00
thinkgem
69a6c77cf0 spring boot 2.6.9 mybatis-spring 2.0.7 shiro 1.9.1 2022-07-04 22:40:32 +08:00
thinkgem
da1b45b9f2 update 2022-06-30 17:58:10 +08:00
thinkgem
8062f0273d laydate lang 2022-06-30 17:56:33 +08:00
thinkgem
a656de1601 机构类型条件按需添加 2022-06-27 08:47:22 +08:00
thinkgem
9ccde22b15 增加微服务模块代码生成的启动脚本 2022-06-24 09:52:07 +08:00
thinkgem
8951a3f07f update 2022-06-21 09:27:05 +08:00
thinkgem
a4f9c5332c update 2022-06-21 09:26:44 +08:00
thinkgem
91319555f6 新增DAO批量更新语句,动态ExecutorType指定 2022-06-09 14:22:51 +08:00
thinkgem
51cbd7b945 本地分页代码优化,如果总共就1页,则直接返回。 2022-06-06 11:39:23 +08:00
thinkgem
8c6cc33a09 update 2022-06-06 11:36:40 +08:00
thinkgem
c11de8fc8e format 2022-06-06 10:20:14 +08:00
thinkgem
b4bddb3246 去掉类上的事务注解 2022-06-02 22:42:09 +08:00
thinkgem
b925cd71a1 黑暗主题优化 2022-05-31 17:17:15 +08:00
thinkgem
a38894ab63 登录页增加黑暗主题切换 2022-05-31 16:17:26 +08:00
thinkgem
718510a795 升级 shardingsphere 5.1.1 2022-05-31 15:40:12 +08:00
thinkgem
c248f1ec04 保持shardingsphere属性key 2022-05-31 12:04:22 +08:00
thinkgem
9c640a6433 增加smtpPort 2022-05-31 11:24:06 +08:00
thinkgem
a65abc3457 新增黑暗主题 2022-05-27 17:00:44 +08:00
thinkgem
559733bb61 新增黑暗主题 2022-05-27 15:34:41 +08:00
thinkgem
9b702b0297 update 2022-05-27 15:05:26 +08:00
thinkgem
5f3f2009a2 druid 1.2.10 2022-05-26 10:25:20 +08:00
thinkgem
b4ddab035a 优化mime获取,优化因第三方包里包含mine.types导致加载不正确 2022-05-26 10:24:38 +08:00
thinkgem
986ff8befe update 2022-05-26 10:23:13 +08:00
thinkgem
071aa747c8 4.5.0 升级到 spring boot 2.6.8 2022-05-24 21:04:57 +08:00
thinkgem
03592947d4 update script 2022-05-18 09:06:53 +08:00
thinkgem
6443d6b409 新增顶部菜单自动折叠到更多下拉菜单 2022-05-17 12:02:00 +08:00
thinkgem
13a38aea97 4.4.2 start 2022-05-13 23:42:31 +08:00
thinkgem
6861ba125e 代码优化 2022-05-08 16:19:09 +08:00
thinkgem
07905c1e82 细节优化 2022-05-06 14:12:42 +08:00
thinkgem
f454f252dc update README.md 2022-05-06 09:07:19 +08:00
thinkgem
3f429e96f6 Merge remote-tracking branch 'origin-github/v4.4_dev' into v4.4_dev 2022-05-05 20:18:41 +08:00
thinkgem
0fb1e9dab9 update 2022-05-05 20:00:15 +08:00
thinkgem
24007dd6b1 root pom 2022-05-05 17:13:53 +08:00
thinkgem
5c4a6257f3 移除空白元素 2022-05-05 13:52:46 +08:00
thinkgem
c5f1feafae spring boot 2.5.13 shiro 1.9.0 等等 2022-05-05 12:06:33 +08:00
thinkgem
2633d6b06d remove commons-fileupload 2022-05-05 11:19:48 +08:00
thinkgem
79a002684e 4.4.1 2022-05-05 11:15:48 +08:00
thinkgem
8ad30622a9 点击右上角【Star】收藏本软件 ^_^ 2022-05-03 23:58:58 +08:00
thinkgem
21bf3bc06c maven plugin update 2022-04-30 11:16:47 +08:00
thinkgem
554e9cea74 系统管理员 to 租户管理员 2022-04-28 22:17:04 +08:00
thinkgem
2e3de8a7dd ie下缓存问题 2022-04-26 15:07:11 +08:00
thinkgem
17b4d2ad90 配置参数和脚本优化 2022-04-24 23:41:36 +08:00
thinkgem
c98de5cea9 update README.md 2022-04-24 11:25:37 +08:00
thinkgem
d4d0dbc408 日志信息优化 2022-04-24 11:08:51 +08:00
thinkgem
b9c3d3d0c6 补充Cloud的Docker代码生成脚本 2022-04-24 11:08:03 +08:00
thinkgem
ed91d35624 日志输出信息优化 2022-04-22 22:05:52 +08:00
thinkgem
76e77fcdb2 update 2022-04-21 18:52:14 +08:00
thinkgem
a4f2a370e3 优化参数配置 2022-04-19 18:27:51 +08:00
thinkgem
b98af679d1 update 2022-04-19 18:21:25 +08:00
thinkgem
1e29444854 update README.md 2022-04-19 11:20:03 +08:00
thinkgem
a892da8369 新增是否启用默认 Servlet 映射(启用后可访问 webapp 下的静态资源访问) 2022-04-18 11:10:42 +08:00
thinkgem
8ed7e4c4e7 remove map file 2022-04-15 17:33:09 +08:00
thinkgem
f5fe75ea69 支持springboot带减号的key写法,自动转换为驼峰格式。 2022-04-14 12:03:31 +08:00
thinkgem
50b5334214 4.4.1 2022-04-13 17:16:13 +08:00
thinkgem
998943ddc3 spring boot 2.5.12 2022-04-01 11:33:39 +08:00
thinkgem
d2f3597a3b update 2022-03-31 11:56:59 +08:00
thinkgem
f4019907b5 update 2022-03-21 10:39:24 +08:00
thinkgem
dd41a04b10 增加一些线程池个性化参数 2022-03-20 14:41:27 +08:00
thinkgem
87e8352418 多线程优化为线程池 2022-03-20 14:11:35 +08:00
thinkgem
41da9ef5cb 4.4.0 2022-03-16 22:30:11 +08:00
thinkgem
09fe0921a6 4.4.0 2022-03-16 21:51:37 +08:00
thinkgem
aaf969187d update readme 2022-03-16 17:55:29 +08:00
thinkgem
a37f235089 shiro.sso.encryptKeyDateFormat 2022-03-16 15:18:19 +08:00
thinkgem
62df9b5a9e update 2022-03-16 14:27:48 +08:00
thinkgem
36192ad56c 4.4.0 2022-03-15 21:44:18 +08:00
thinkgem
5186bc45c0 script update 2022-03-15 21:39:32 +08:00
thinkgem
35c710c748 4.4.0 2022-03-15 21:37:33 +08:00
thinkgem
433077e453 update 2022-03-14 11:37:20 +08:00
thinkgem
1dec607c8a 新增属性获取 getPropertyToLong 方法。 2022-03-13 19:55:06 +08:00
thinkgem
18cca069c1 登录和未登录的session超时时间分开;deviceType 设备类型,默认 pc
;新增孤立会话集群模式Quartz清理;微服务情况下可关闭孤立会话清理任务,只需开启core服务即可;在线用户游客列表,删除还未来得及清理的已超时会话;在线人数统计,增加缓存3分钟的数据,节省服务器资源
2022-03-12 09:23:07 +08:00
thinkgem
ab1481f6c7 update 2022-03-12 09:13:36 +08:00
thinkgem
581b40437e update 2022-03-10 18:59:03 +08:00
thinkgem
3c16183130 spring boot 2.5.10 2022-03-09 21:28:47 +08:00
thinkgem
682f0c87ff 管理界面默认关联查询附属部门 2022-03-09 17:32:12 +08:00
thinkgem
544a9953f6 增加子表生成模板的后端验证注解 2022-03-08 21:06:39 +08:00
thinkgem
55dd0773d3 取消webuploader上传超时参数 #I4WP8B 2022-03-08 17:01:43 +08:00
thinkgem
4bf24feb6e update 2022-02-28 15:48:30 +08:00
thinkgem
6e40602563 Merge remote-tracking branch 'remotes/origin/master' into v4.next 2022-02-22 22:40:36 +08:00
卓源软件
338c756714 update README.md. 2022-02-22 14:39:29 +00:00
thinkgem
89c6bc3a43 start 4.3.4 2022-02-22 20:55:42 +08:00
thinkgem
10a3a04dfa 优化树结构图标间距字体等 2022-02-22 14:22:32 +08:00
thinkgem
70e5a407fd 反序列化遇到异常时忽略 2022-02-21 10:56:16 +08:00
thinkgem
7414d655ae shadeClose default 2022-02-20 22:01:05 +08:00
thinkgem
7c16b21232 排序过滤优化,只允许特定字符。 2022-02-17 23:15:54 +08:00
thinkgem
7a46c63a43 点击右上角【Star】收藏本软件 ^_^ 2022-02-17 22:02:43 +08:00
thinkgem
325117dc89 主题优化改进 2022-02-17 15:11:57 +08:00
thinkgem
ac0b809003 主题优化改进 2022-02-16 15:33:30 +08:00
thinkgem
b931a96ec2 update readme 2022-02-16 10:34:49 +08:00
thinkgem
834f245a7b update readme 2022-02-16 10:31:59 +08:00
thinkgem
0ada1f3b2b 增加过滤关键字 2022-02-16 10:05:29 +08:00
卓源软件
e14f535016 !23 修正中文拼音首字母空数组判断
Merge pull request !23 from zhouinfo/master
2022-02-15 07:14:11 +00:00
zhouinfo
2e26ccf33b 修正中文拼音首字母空数组判断
字符串不是中文字符,会返回空数组,需要判断
2022-02-15 06:53:57 +00:00
255 changed files with 5305 additions and 7879 deletions

View File

@@ -1,14 +1,23 @@
### 该问题是怎么引起的?
### 是什么问题、该问题是怎么引起的?
1.
### 重现步骤、期望结果、截图、代码
### 重现步骤
### 报错信息
1.
```
这里贴你的代码块
```
### 实际结果、报错信息、截图
```
1.
```
这里贴错误信息
```
### 环境版本:
- JDK版本1.8、11、17
- 浏览器版本Chrome xx、Firefox xx、IE xx
- 平台版本JeeSite 4.x.x、5.x.xpom.xml里查看

11
LICENSE
View File

@@ -211,14 +211,13 @@
更不要,全局替换源代码中的 jeesite 或 ThinkGem 等字样,否则你将违反本协议条款承担责任。
4. 您若套用本软件的一些代码或功能参考,请保留源文件中的版权和作者,需要在您的软件介绍明显位置
说明出处,举例:本软件基于 JeeSite 快速开发平台并附带链接http://jeesite.com
5. 请知悉社区版用户数不可超过100个最大允许20个用户同时在线不含匿名
6. 无限制版下载:<https://gitee.com/thinkgem/jeesite4/tree/v4.1_dev/>
7. 任何基于本软件而产生的一切法律纠纷和责任,均于我司无关
8. 如果你对本软件有改进,希望可以贡献给我们,共同进步
9. 本项目已申请软件著作权,请尊重开源,感谢阅读。
5. 任何基于本软件而产生的一切法律纠纷和责任,均于我司无关
6. 如果你对本软件有改进,希望可以贡献给我们,共同进步。
7. 本项目已申请软件著作权,请尊重开源,感谢阅读
8. 本版本无用户数限制,无在线人数限制
版权所有:济南卓源软件有限公司
官方网址http://jeesite.com
技术服务http://s.jeesite.com
联系我们http://s.jeesite.com

105
README.md
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.3" src="https://img.shields.io/badge/JeeSite-V4.3-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://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://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>
@@ -25,7 +25,7 @@
## 平台介绍
JeeSite 快速开发平台,不仅仅是一个后台开发框架,它是一个企业级快速开发解决方案,后端基于经典组合 Spring Boot、Shiro、MyBatis前端采用 Beetl、Bootstrap、AdminLTE 经典开发模式,或者分离版 Vue3、Vite、Ant Design Vue、TypeScript、Vben Admin 最先进技术栈。提供在线代码生成功能,包括模块如组织机构、角色用户、菜单及按钮授权、数据权限、系统参数、内容管理、工作流等。采用松耦合设计微内核和插件架构模块增减便捷界面无刷新一键换肤众多账号安全设置密码策略文件在线预览消息推送多元化第三方登录在线定时任务配置支持集群支持SAAS支持多数据源支持读写分离、分库分表支持微服务应用。
JeeSite 快速开发平台,不仅仅是一个后台开发框架,它是一个企业级快速开发解决方案,后端基于经典组合 Spring Boot、Shiro、MyBatis前端采用 Beetl、Bootstrap、AdminLTE 经典开发模式,或者分离版 Vue3、Vite、Ant Design Vue、TypeScript、Vben Admin 最先进技术栈。提供在线代码生成功能,可自动创建业务模块工程和微服务模块工程,自动生成前端代码和后端代码;包括功能模块如组织机构、角色用户、菜单及按钮授权、数据权限、系统参数、内容管理、工作流等。采用松耦合设计微内核和插件架构模块增减便捷界面无刷新一键换肤众多账号安全设置密码策略文件在线预览消息推送多元化第三方登录在线定时任务配置支持集群支持SAAS支持多数据源支持读写分离、分库分表支持微服务应用。
JeeSite 快速开发平台的主要目的是能够让初级的研发人员快速的开发出复杂的业务功能,中高级人员有时间做一些更有用的事情。让开发者注重专注业务,其余有平台来封装技术细节,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安全质量。
@@ -41,7 +41,9 @@ JeeSite 功能全,知识点非常多,也非常少。因为她使用的都是
JeeSite 是一个低代码开发平台具有较高的封装度、扩展性封装不是限制你去做一些事情而是在便捷的同时也具有较好的扩展性在不具备一些功能的情况下JeeSite 提供了扩展接口,提供了原生调用方法。
大家都在用 Spring也在学习 Spring 的优点Spring 提供了较好的扩展性,可又有多少人去修改它的源代码呢,退一步说,大家去修改了 Spring 的源码,反而会对未来升级造成很大困扰,您说不是呢?这样的例子很多,所以不要纠结,我们非常注重着一块JeeSite 也一样具备强大的扩展性。
大家都在用 Spring也在学习 Spring 的优点Spring 提供了较好的扩展性,可又有多少人去修改它的源代码呢,退一步说,大家去修改了 Spring 的源码,反而会对未来升级造成很大困扰,您说不是呢?这样的例子很多,所以不要纠结,我们非常注重这一点JeeSite 也一样具备强大的扩展性。
为什么说 JeeSite 比较易于学习JeeSite 很好的把握了设计的 “度”,避免过度设计的情况。过度设计是在产品设计过程中忽略了产品和用户的实际需求,反而带来了不必要的复杂性,而忽略了系统的学习、开发和维护成本。
* 至今 JeeSite 平台架构已经非常稳定。
* JeeSite 精益求精,用心打磨每一个细节。
@@ -51,19 +53,16 @@ JeeSite 是一个低代码开发平台,具有较高的封装度、扩展性,
## 技术选型
* 主框架Spring Boot 2.5、Spring Framework 5.3、Apache Shiro 1.8、J2Cache
* 主框架Spring Boot 2.7、Spring Framework 5.3、Apache Shiro 1.11、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
* 支持 IE9 及以上版本及其他所有现代浏览器,如:谷歌浏览器、火狐浏览器、国产浏览器 等
* 分离前端版Node.js、TypeScript、Vue3、Vite、Ant Design Vue、Vue Vben Admin
* 工作流引擎Flowable 6.6、符合 BPMN 规范、在线流程设计器、中国式流程、退回、撤回、自由流
* Bootstrap 版 支持 IE9 及以上版本及其他所有现代浏览器,如:谷歌、火狐、国产浏览器 等
* Vue3 版 支持现代浏览器,如:谷歌 Chrome 86+、火狐、国产浏览器 等
* 技术选型(详细):<http://jeesite.com/docs/technology/>
疑问:为什么不使用 Bootstrap、AdminLTE 最新版?
1. 前端发展迅速,向下兼容性是前端最大的弊端,会造成升级 JeeSite 变的困难,无法做到平滑升级。
2. 其实 JeeSite 一直为前端组件做相应升级,满足各种需求场景,可以达到相应的效果,并向下兼容。
3. 为了兼容 IE 浏览器2020 年浏览器国内市场份额分析,还是有一定的 IE 占有率。
4. JeeSite 也提供了更先进的**分离端版本**<http://jeesite.com/docs/jeesite-vue/>
* JeeSite Vue<https://gitee.com/thinkgem/jeesite-vue>
## 更多介绍
@@ -75,31 +74,43 @@ JeeSite 是一个低代码开发平台,具有较高的封装度、扩展性,
## 生态系统
* 分布式微服务系统Spring Cloud<https://gitee.com/thinkgem/jeesite4-cloud>
* 分布式微服务Spring Cloud<https://gitee.com/thinkgem/jeesite4-cloud>
* Flowable业务流程引擎BPM<http://jeesite.com/docs/bpm/>
* JFlow工作流引擎<https://gitee.com/thinkgem/jeesite4-jflow> <http://ccflow.org>
* Flowable业务流程模块BPM<http://jeesite.com/docs/bpm/>
* 内容管理模块CMS<https://gitee.com/thinkgem/jeesite4-cms>
* 内容管理模块CMS<https://gitee.com/thinkgem/jeesite4/tree/v5.3/modules/cms>
* 手机端移动端:<https://gitee.com/thinkgem/jeesite4-uniapp>
* Vue3分离版本<http://jeesite.com/docs/jeesite-vue/>
* PC客户端程序<https://gitee.com/thinkgem/jeesite-client>
* Vue3分离版本<https://gitee.com/thinkgem/jeesite-vue>
## 快速体验
### 在线演示
1. 地址:<http://demo.jeesite.com/>
2. 账号system
3. 密码admin
### 本地运行
1. 环境准备:`JDK 1.8 or 11、17``Maven 3.6+``MySQL 5.7 or 8.0`[支持更多数据库](https://jeesite.com/docs/technology/#8已支持数据库)
2. 执行命令:`git clone https://gitee.com/thinkgem/jeesite4.git` 下载源码master分支
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> 并解压
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/>
### 容器运行
- 拉取 Docker 镜像:
```
docker pull thinkgem/jeesite-web
```
- 启动脚本:
```
docker run -d -p 8980:8980 --name jeesite-web -v /data:/data \
thinkgem/jeesite-web && docker logs -f jeesite-web
```
- 浏览器访问:<http://127.0.0.1:8980/js/> 账号 system 密码 admin
### 开发环境
1. 部署运行文档:<https://jeesite.com/docs/install-deploy/>
@@ -110,35 +121,52 @@ JeeSite 是一个低代码开发平台,具有较高的封装度、扩展性,
* 菜单和按钮权限:<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/tree-table-use/>
* 单点登录:<https://jeesite.com/docs/sso-cas/>
* 国际化:<https://jeesite.com/docs/i18n-locale/>
* 对象存储:<https://jeesite.com/docs/oss-client/>
* 文件在线预览:<https://jeesite.com/docs/filepreview/>
* 报表设计器:<https://jeesite.com/docs/ureport/>
* 大屏设计器:<https://jeesite.com/docs/visual/>
* 三员管理员:<https://jeesite.com/docs/3manager/>
* 在线作业调度:<https://jeesite.com/docs/job/>
* 消息推送:<https://jeesite.com/docs/msg-push-use/>
* 单点登录:<https://jeesite.com/docs/sso-cas/>
* 在线任务调度:<https://jeesite.com/docs/job/>
* 对象存储:<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/manager3/>
* 手机端框架:<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/>
* 分布式事务 LCN<https://jeesite.com/docs/springcloud-lcn/>
* 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/>
## 授权协议声明
@@ -149,15 +177,14 @@ JeeSite 是一个低代码开发平台,具有较高的封装度、扩展性,
更不要,全局替换源代码中的 jeesite 或 ThinkGem 等字样,否则你将违反本协议条款承担责任。
4. 您若套用本软件的一些代码或功能参考,请保留源文件中的版权和作者,需要在您的软件介绍明显位置
说明出处,举例:本软件基于 JeeSite 快速开发平台并附带链接http://jeesite.com
5. 请知悉社区版用户数不可超过100个最大允许20个用户同时在线不含匿名
6. 无限制版下载:<https://gitee.com/thinkgem/jeesite4/tree/v4.1_dev/>
7. 任何基于本软件而产生的一切法律纠纷和责任,均于我司无关
8. 如果你对本软件有改进,希望可以贡献给我们,共同进步
9. 本项目已申请软件著作权,请尊重开源,感谢阅读。
5. 任何基于本软件而产生的一切法律纠纷和责任,均于我司无关
6. 如果你对本软件有改进,希望可以贡献给我们,共同进步。
7. 本项目已申请软件著作权,请尊重开源,感谢阅读
8. 本版本无用户数限制,无在线人数限制
## 技术服务与支持
* 没有资金的支撑就很难得到发展,特别是一个好的产品,如果 JeeSite 帮助了您,请为我们点赞。支持我们,您可以得到一些回报,有了这些我们会把公益事业做的更好,回报社区和社会请给我们一些动力吧,在此非常感谢已支持我们的朋友!
* 没有资金的支撑就很难得到发展,特别是一个好的产品,如果 JeeSite 帮助了您,请为我们点赞。支持我们,您可以获得更多回馈,我们会把公益事业做的更好,开放更多资源,回报社区和社会请给我们一些动力吧,在此非常感谢已支持我们的朋友!
* **联系我们**:请访问技术支持服务页面:<https://jeesite.com/docs/support/>
## 今后如何升级?

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId>
<version>4.3.3-SNAPSHOT</version>
<version>4.6.2-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
@@ -17,17 +17,25 @@
<url>http://jeesite.com</url>
<inceptionYear>2013-Now</inceptionYear>
<properties>
</properties>
<dependencies>
<!-- Servlet Api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- Apache Commons -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>${commons-text.version}</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
@@ -37,28 +45,11 @@
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>${commons-beanutils.version}</version>
<version>${commons-beanutils.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>${commons-text.version}</version>
</dependency>
<!-- Apache Zip Tools
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>${ant.version}</version>
</dependency> -->
<!-- Java serialization -->
<dependency>
@@ -88,23 +79,6 @@
<version>${fastjson.version}</version>
</dependency>
<!-- Java xml
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>${dom4j.version}</version>
</dependency> -->
<!-- jdk11 JAXB module
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
</dependency> -->
<!-- XPath xml -->
<dependency>
<groupId>jaxen</groupId>
@@ -123,13 +97,6 @@
<artifactId>httpclient</artifactId>
</dependency>
<!-- Jsoup HTTP
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>${jsoup.version}</version>
</dependency> -->
<!-- Email -->
<dependency>
<groupId>org.apache.commons</groupId>
@@ -294,19 +261,9 @@
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
</plugins>
</build>
<developers>
<developer>
<id>thinkgem</id>

View File

@@ -74,15 +74,15 @@ public class DesUtils {
String encData = "";
List firstKeyBt = null, secondKeyBt = null, thirdKeyBt = null;
int firstLength = 0, secondLength = 0, thirdLength = 0;
if (firstKey != null && !firstKey.equals("")) {
if (firstKey != null && !"".equals(firstKey)) {
firstKeyBt = getKeyBytes(firstKey);
firstLength = firstKeyBt.size();
}
if (secondKey != null && !secondKey.equals("")) {
if (secondKey != null && !"".equals(secondKey)) {
secondKeyBt = getKeyBytes(secondKey);
secondLength = secondKeyBt.size();
}
if (thirdKey != null && !thirdKey.equals("")) {
if (thirdKey != null && !"".equals(thirdKey)) {
thirdKeyBt = getKeyBytes(thirdKey);
thirdLength = thirdKeyBt.size();
}
@@ -91,7 +91,7 @@ public class DesUtils {
if (leng < 4) {
int[] bt = strToBt(data);
int[] encByte = null;
if (firstKey != null && !firstKey.equals("") && secondKey != null && !secondKey.equals("") && thirdKey != null && !firstKey.equals("")) {
if (firstKey != null && !"".equals(firstKey) && secondKey != null && !"".equals(secondKey) && thirdKey != null && !"".equals(firstKey)) {
int[] tempBt;
int x, y, z;
tempBt = bt;
@@ -106,7 +106,7 @@ public class DesUtils {
}
encByte = tempBt;
} else {
if (firstKey != null && !firstKey.equals("") && secondKey != null && !secondKey.equals("")) {
if (firstKey != null && !"".equals(firstKey) && secondKey != null && !"".equals(secondKey)) {
int[] tempBt;
int x, y;
tempBt = bt;
@@ -118,7 +118,7 @@ public class DesUtils {
}
encByte = tempBt;
} else {
if (firstKey != null && !firstKey.equals("")) {
if (firstKey != null && !"".equals(firstKey)) {
int[] tempBt;
int x = 0;
tempBt = bt;
@@ -138,7 +138,7 @@ public class DesUtils {
String tempData = data.substring(i * 4 + 0, i * 4 + 4);
int[] tempByte = strToBt(tempData);
int[] encByte = null;
if (firstKey != null && !firstKey.equals("") && secondKey != null && !secondKey.equals("") && thirdKey != null && !thirdKey.equals("")) {
if (firstKey != null && !"".equals(firstKey) && secondKey != null && !"".equals(secondKey) && thirdKey != null && !"".equals(thirdKey)) {
int[] tempBt;
int x, y, z;
tempBt = tempByte;
@@ -153,7 +153,7 @@ public class DesUtils {
}
encByte = tempBt;
} else {
if (firstKey != null && !firstKey.equals("") && secondKey != null && !secondKey.equals("")) {
if (firstKey != null && !"".equals(firstKey) && secondKey != null && !"".equals(secondKey)) {
int[] tempBt;
int x, y;
tempBt = tempByte;
@@ -165,7 +165,7 @@ public class DesUtils {
}
encByte = tempBt;
} else {
if (firstKey != null && !firstKey.equals("")) {
if (firstKey != null && !"".equals(firstKey)) {
int[] tempBt;
int x;
tempBt = tempByte;
@@ -182,7 +182,7 @@ public class DesUtils {
String remainderData = data.substring(iterator * 4 + 0, leng);
int[] tempByte = strToBt(remainderData);
int[] encByte = null;
if (firstKey != null && !firstKey.equals("") && secondKey != null && !secondKey.equals("") && thirdKey != null && !thirdKey.equals("")) {
if (firstKey != null && !"".equals(firstKey) && secondKey != null && !"".equals(secondKey) && thirdKey != null && !"".equals(thirdKey)) {
int[] tempBt;
int x, y, z;
tempBt = tempByte;
@@ -197,7 +197,7 @@ public class DesUtils {
}
encByte = tempBt;
} else {
if (firstKey != null && !firstKey.equals("") && secondKey != null && !secondKey.equals("")) {
if (firstKey != null && !"".equals(firstKey) && secondKey != null && !"".equals(secondKey)) {
int[] tempBt;
int x, y;
tempBt = tempByte;
@@ -209,7 +209,7 @@ public class DesUtils {
}
encByte = tempBt;
} else {
if (firstKey != null && !firstKey.equals("")) {
if (firstKey != null && !"".equals(firstKey)) {
int[] tempBt;
int x;
tempBt = tempByte;
@@ -237,15 +237,15 @@ public class DesUtils {
String decStr = "";
List firstKeyBt = null, secondKeyBt = null, thirdKeyBt = null;
int firstLength = 0, secondLength = 0, thirdLength = 0;
if (firstKey != null && !firstKey.equals("")) {
if (firstKey != null && !"".equals(firstKey)) {
firstKeyBt = getKeyBytes(firstKey);
firstLength = firstKeyBt.size();
}
if (secondKey != null && !secondKey.equals("")) {
if (secondKey != null && !"".equals(secondKey)) {
secondKeyBt = getKeyBytes(secondKey);
secondLength = secondKeyBt.size();
}
if (thirdKey != null && !thirdKey.equals("")) {
if (thirdKey != null && !"".equals(thirdKey)) {
thirdKeyBt = getKeyBytes(thirdKey);
thirdLength = thirdKeyBt.size();
}
@@ -261,7 +261,7 @@ public class DesUtils {
intByte[j] = Integer.parseInt(strByte.substring(j, j + 1));
}
int[] decByte = null;
if (firstKey != null && !firstKey.equals("") && secondKey != null && !secondKey.equals("") && thirdKey != null && !thirdKey.equals("")) {
if (firstKey != null && !"".equals(firstKey) && secondKey != null && !"".equals(secondKey) && thirdKey != null && !"".equals(thirdKey)) {
int[] tempBt;
int x, y, z;
tempBt = intByte;
@@ -276,7 +276,7 @@ public class DesUtils {
}
decByte = tempBt;
} else {
if (firstKey != null && !firstKey.equals("") && secondKey != null && !secondKey.equals("")) {
if (firstKey != null && !"".equals(firstKey) && secondKey != null && !"".equals(secondKey)) {
int[] tempBt;
int x, y, z;
tempBt = intByte;
@@ -288,7 +288,7 @@ public class DesUtils {
}
decByte = tempBt;
} else {
if (firstKey != null && !firstKey.equals("")) {
if (firstKey != null && !"".equals(firstKey)) {
int[] tempBt;
int x, y, z;
tempBt = intByte;
@@ -382,37 +382,37 @@ public class DesUtils {
*/
public String bt4ToHex(String binary) {
String hex = "";
if (binary.equalsIgnoreCase("0000")) {
if ("0000".equalsIgnoreCase(binary)) {
hex = "0";
} else if (binary.equalsIgnoreCase("0001")) {
} else if ("0001".equalsIgnoreCase(binary)) {
hex = "1";
} else if (binary.equalsIgnoreCase("0010")) {
} else if ("0010".equalsIgnoreCase(binary)) {
hex = "2";
} else if (binary.equalsIgnoreCase("0011")) {
} else if ("0011".equalsIgnoreCase(binary)) {
hex = "3";
} else if (binary.equalsIgnoreCase("0100")) {
} else if ("0100".equalsIgnoreCase(binary)) {
hex = "4";
} else if (binary.equalsIgnoreCase("0101")) {
} else if ("0101".equalsIgnoreCase(binary)) {
hex = "5";
} else if (binary.equalsIgnoreCase("0110")) {
} else if ("0110".equalsIgnoreCase(binary)) {
hex = "6";
} else if (binary.equalsIgnoreCase("0111")) {
} else if ("0111".equalsIgnoreCase(binary)) {
hex = "7";
} else if (binary.equalsIgnoreCase("1000")) {
} else if ("1000".equalsIgnoreCase(binary)) {
hex = "8";
} else if (binary.equalsIgnoreCase("1001")) {
} else if ("1001".equalsIgnoreCase(binary)) {
hex = "9";
} else if (binary.equalsIgnoreCase("1010")) {
} else if ("1010".equalsIgnoreCase(binary)) {
hex = "A";
} else if (binary.equalsIgnoreCase("1011")) {
} else if ("1011".equalsIgnoreCase(binary)) {
hex = "B";
} else if (binary.equalsIgnoreCase("1100")) {
} else if ("1100".equalsIgnoreCase(binary)) {
hex = "C";
} else if (binary.equalsIgnoreCase("1101")) {
} else if ("1101".equalsIgnoreCase(binary)) {
hex = "D";
} else if (binary.equalsIgnoreCase("1110")) {
} else if ("1110".equalsIgnoreCase(binary)) {
hex = "E";
} else if (binary.equalsIgnoreCase("1111")) {
} else if ("1111".equalsIgnoreCase(binary)) {
hex = "F";
}
@@ -426,51 +426,51 @@ public class DesUtils {
*/
public String hexToBt4(String hex) {
String binary = "";
if (hex.equalsIgnoreCase("0")) {
if ("0".equalsIgnoreCase(hex)) {
binary = "0000";
} else if (hex.equalsIgnoreCase("1")) {
} else if ("1".equalsIgnoreCase(hex)) {
binary = "0001";
}
if (hex.equalsIgnoreCase("2")) {
if ("2".equalsIgnoreCase(hex)) {
binary = "0010";
}
if (hex.equalsIgnoreCase("3")) {
if ("3".equalsIgnoreCase(hex)) {
binary = "0011";
}
if (hex.equalsIgnoreCase("4")) {
if ("4".equalsIgnoreCase(hex)) {
binary = "0100";
}
if (hex.equalsIgnoreCase("5")) {
if ("5".equalsIgnoreCase(hex)) {
binary = "0101";
}
if (hex.equalsIgnoreCase("6")) {
if ("6".equalsIgnoreCase(hex)) {
binary = "0110";
}
if (hex.equalsIgnoreCase("7")) {
if ("7".equalsIgnoreCase(hex)) {
binary = "0111";
}
if (hex.equalsIgnoreCase("8")) {
if ("8".equalsIgnoreCase(hex)) {
binary = "1000";
}
if (hex.equalsIgnoreCase("9")) {
if ("9".equalsIgnoreCase(hex)) {
binary = "1001";
}
if (hex.equalsIgnoreCase("A")) {
if ("A".equalsIgnoreCase(hex)) {
binary = "1010";
}
if (hex.equalsIgnoreCase("B")) {
if ("B".equalsIgnoreCase(hex)) {
binary = "1011";
}
if (hex.equalsIgnoreCase("C")) {
if ("C".equalsIgnoreCase(hex)) {
binary = "1100";
}
if (hex.equalsIgnoreCase("D")) {
if ("D".equalsIgnoreCase(hex)) {
binary = "1101";
}
if (hex.equalsIgnoreCase("E")) {
if ("E".equalsIgnoreCase(hex)) {
binary = "1110";
}
if (hex.equalsIgnoreCase("F")) {
if ("F".equalsIgnoreCase(hex)) {
binary = "1111";
}
return binary;

View File

@@ -31,8 +31,9 @@ import com.jeesite.common.lang.StringUtils;
* 2.自制的base62 编码
* 3.Commons-Lang的xml/html escape
* 4.JDK提供的URLEncoder
* @author calvin
* @version 2013-01-15
* 5、XSS、SQL、orderBy 过滤器
* @author calvin、ThinkGem
* @version 2022-2-17
*/
public class EncodeUtils {
@@ -270,7 +271,7 @@ public class EncodeUtils {
}
if (logger.isInfoEnabled() && !value.equals(oriValue)){
logger.info("xssFilter: {} <=<=<= {} source: {}", value, text,
request != null ? request.getRequestURL() : StringUtils.EMPTY);
request != null ? request.getRequestURL() : "common");
}
return value;
}
@@ -279,16 +280,18 @@ public class EncodeUtils {
// 预编译SQL过滤正则表达式
private static Pattern sqlPattern = Pattern.compile(
"(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|((extractvalue|updatexml)([\\s]*?)\\()|"
+ "(\\b(select|update|and|or|delete|insert|trancate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute|case when|sleep|union|load_file)\\b)",
"(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|((extractvalue|updatexml|if|mid|database|rand|user)([\\s]*?)\\()|"
+ "(\\b(select|update|and|or|delete|insert|trancate|char|into|substr|ascii|declare|exec|count|master|into|"
+ "drop|execute|case when|sleep|union|load_file)\\b)",
Pattern.CASE_INSENSITIVE);
private static Pattern orderByPattern = Pattern.compile("[a-z0-9_\\.\\, ]*", Pattern.CASE_INSENSITIVE);
/**
* SQL过滤防止注入传入参数输入有select相关代码替换空。
* @author ThinkGem
*/
public static String sqlFilter(String text){
return sqlFilter(text, null);
return sqlFilter(text, "common");
}
/**
* SQL过滤防止注入传入参数输入有select相关代码替换空。
@@ -297,9 +300,16 @@ public class EncodeUtils {
public static String sqlFilter(String text, String source){
if (text != null){
String value = text;
Matcher matcher = sqlPattern.matcher(value);
if (matcher.find()) {
value = matcher.replaceAll(StringUtils.EMPTY);
if ("orderBy".equals(source)) {
Matcher matcher = orderByPattern.matcher(value);
if (!matcher.matches()) {
value = StringUtils.EMPTY;
}
} else {
Matcher matcher = sqlPattern.matcher(value);
if (matcher.find()) {
value = matcher.replaceAll(StringUtils.EMPTY);
}
}
if (logger.isWarnEnabled() && !value.equals(text)){
logger.info("sqlFilter: {} <=<=<= {} source: {}", value, text, source);
@@ -310,38 +320,38 @@ public class EncodeUtils {
return null;
}
public static void main(String[] args) {
int i = 0;
// xssFilter((++i)+"你好<script>alert(document.cookie)</script>我还在。");
// xssFilter((++i)+"你好,<strong>加粗文字</strong>我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好,\"><strong>加粗文字</strong>我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好<iframe src=\"abcdef\"></iframe><strong>加粗文字</strong>我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好<iframe src=\"abcdef\"/><strong>加粗文字</strong>我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好,<iframe src=\"abcdef\"><strong>加粗文字</strong>我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好<script type=\"text/javascript\">alert(document.cookie)</script>我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好<script\n type=\"text/javascript\">\nalert(document.cookie)\n</script>我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好<script src='' onerror='alert(document.cookie)'></script>我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好<script type=text/javascript>alert()我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好<script>alert(document.cookie)</script>我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好,<script>window.location='url'我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好,</script></iframe>我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好eval(abc)我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好xpression(abc)我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好<img src='abc.jpg' onerror='location='';alert(document.cookie);'></img>我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好<img src='abc.jpg' onerror='alert(document.cookie);'/>我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好,<img src='abc.jpg' onerror='alert(document.cookie);'>我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好<a onload='alert(\"abc\")'>hello</a>我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好<a href=\"/abc\">hello</a>我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好<a href='/abc'>hello</a>我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好<a href='vbscript:alert(\"abc\");'>hello</a>我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好,<a href='javascript:alert(\"abc\");'>hello</a>我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好?abc=def&hello=123&world={\"a\":1}我还在。");
// xssFilter("<!--HTML-->"+(++i)+"你好,?abc=def&hello=123&world={'a':1}我还在。");
sqlFilter((++i)+"你好select * from xxx where abc=def and 1=1我还在。");
sqlFilter((++i)+"你好insert into xxx values(1,2,3,4,5)我还在。");
sqlFilter((++i)+"你好delete from xxx我还在。");
sqlFilter((++i)+"你好a.audit_result asc,case when 1 like case when length(database())=6 then 1 else exp(11111111111111111) end then 1 else 1/0 end");
sqlFilter((++i)+"你好if(1=2,1,SLEEP(10))");
}
// public static void main(String[] args) {
// xssFilter("1 你好 <script>alert(document.cookie)</script>我还在。");
// xssFilter("2 你好 <strong>加粗文字</strong>我还在。");
// xssFilter("<!--HTML-->3 你好 \"><strong>加粗文字</strong>我还在。");
// xssFilter("<!--HTML-->4 你好 <iframe src=\"abcdef\"></iframe><strong>加粗文字</strong>我还在。");
// xssFilter("<!--HTML-->5 你好 <iframe src=\"abcdef\"/><strong>加粗文字</strong>我还在。");
// xssFilter("<!--HTML-->6 你好 <iframe src=\"abcdef\"><strong>加粗文字</strong>我还在。");
// xssFilter("<!--HTML-->7 你好 <script type=\"text/javascript\">alert(document.cookie)</script>我还在。");
// xssFilter("<!--HTML-->8 你好 <script\n type=\"text/javascript\">\nalert(document.cookie)\n</script>我还在。");
// xssFilter("<!--HTML-->9 你好 <script src='' onerror='alert(document.cookie)'></script>我还在。");
// xssFilter("<!--HTML-->10 你好 <script type=text/javascript>alert()我还在。");
// xssFilter("<!--HTML-->11 你好 <script>alert(document.cookie)</script>我还在。");
// xssFilter("<!--HTML-->12 你好 <script>window.location='url'我还在。");
// xssFilter("<!--HTML-->13 你好 </script></iframe>我还在。");
// xssFilter("<!--HTML-->14 你好 eval(abc)我还在。");
// xssFilter("<!--HTML-->15 你好 xpression(abc)我还在。");
// xssFilter("<!--HTML-->16 你好 <img src='abc.jpg' onerror='location='';alert(document.cookie);'></img>我还在。");
// xssFilter("<!--HTML-->17 你好 <img src='abc.jpg' onerror='alert(document.cookie);'/>我还在。");
// xssFilter("<!--HTML-->18 你好 <img src='abc.jpg' onerror='alert(document.cookie);'>我还在。");
// xssFilter("<!--HTML-->19 你好 <a onload='alert(\"abc\")'>hello</a>我还在。");
// xssFilter("<!--HTML-->20 你好 <a href=\"/abc\">hello</a>我还在。");
// xssFilter("<!--HTML-->21 你好 <a href='/abc'>hello</a>我还在。");
// xssFilter("<!--HTML-->22 你好 <a href='vbscript:alert(\"abc\");'>hello</a>我还在。");
// xssFilter("<!--HTML-->23 你好 <a href='javascript:alert(\"abc\");'>hello</a>我还在。");
// xssFilter("<!--HTML-->24 你好 ?abc=def&hello=123&world={\"a\":1}我还在。");
// xssFilter("<!--HTML-->25 你好 ?abc=def&hello=123&world={'a':1}我还在。");
// sqlFilter("1 你好 select * from xxx where abc=def and 1=1我还在。");
// sqlFilter("2 你好 insert into xxx values(1,2,3,4,5)我还在。");
// sqlFilter("3 你好 delete from xxx我还在。");
// sqlFilter("4 a.audit_result asc,case when 1 like case when length(database())=6 then 1 else exp(111) end then 1 else 1/0 end", "orderBy");
// sqlFilter("5 if(1=2,1,SLEEP(10)), if(mid(database(),{},1)=\\\"{}\\\",a.id,a.login_name)", "orderBy");
// sqlFilter("6 a.audit_result asc, b.audit_result2 desc, b.AuditResult3 desc", "orderBy");
// }
}

View File

@@ -4,23 +4,14 @@
*/
package com.jeesite.common.collect;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
import org.apache.commons.beanutils.PropertyUtils;
import com.jeesite.common.callback.MethodCallback;
import com.jeesite.common.lang.ObjectUtils;
import com.jeesite.common.lang.StringUtils;
import com.jeesite.common.reflect.ReflectUtils;
import org.apache.commons.beanutils.PropertyUtils;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* List工具类
@@ -346,27 +337,38 @@ public class ListUtils extends org.apache.commons.collections.ListUtils {
* @author ThinkGem
*/
public static <T> void pageList(List<T> list, int pageSize, MethodCallback pageCallback){
if (list != null && list.size() > 0){
if (list == null || pageSize == 0) {
return;
}
int count = list.size(), pageNo = 1;
int totalPage = (count + pageSize - 1) / pageSize;
while(true){
int count = list.size();
// 执行回调,分页后的数据
List<T> pageList = getPageList(list, pageNo, pageSize, totalPage);
if (pageList.size() > 0){
pageCallback.execute(pageList, pageNo, pageSize, totalPage);
}
// 如果为最后一页,则跳出循环
if (pageNo >= totalPage){
break;
}
// 页数加一继续下一页
pageNo++;
if (count == 0) {
return;
}
if (count <= pageSize) {
pageCallback.execute(list, 1, pageSize, 1);
return;
}
int pageNo = 1, totalPage = (count + pageSize - 1) / pageSize;
while(true){
// 执行回调,分页后的数据
List<T> pageList = getPageList(list, pageNo, pageSize, totalPage);
if (pageList.size() > 0){
pageCallback.execute(pageList, pageNo, pageSize, totalPage);
}
// 如果为最后一页,则跳出循环
if (pageNo >= totalPage){
break;
}
// 页数加一继续下一页
pageNo++;
}
}

View File

@@ -655,7 +655,12 @@ public class FileUtils extends org.apache.commons.io.FileUtils {
*/
public static String getContentType(String fileName) {
if (mimetypesFileTypeMap == null){
mimetypesFileTypeMap = new MimetypesFileTypeMap();
try {
mimetypesFileTypeMap = new MimetypesFileTypeMap(ResourceUtils
.getResourceFileStream("/META-INF/jeesite.mime.types"));
}catch (IOException e) {
mimetypesFileTypeMap = new MimetypesFileTypeMap();
}
}
return mimetypesFileTypeMap.getContentType(fileName);
}

View File

@@ -126,7 +126,7 @@ public class PropertiesUtils {
YamlPropertiesFactoryBean bean = new YamlPropertiesFactoryBean();
bean.setResources(resource);
for (Map.Entry<Object,Object> entry : bean.getObject().entrySet()){
properties.put(ObjectUtils.toString(entry.getKey()),
properties.put(getStandardKey(ObjectUtils.toString(entry.getKey())),
ObjectUtils.toString(entry.getValue()));
}
configSet.add(location);
@@ -181,7 +181,7 @@ public class PropertiesUtils {
return value;
}
}
String value = properties.getProperty(key);
String value = properties.getProperty(getStandardKey(key));
if (value != null){
Matcher m = p1.matcher(value);
while(m.find()) {
@@ -209,7 +209,7 @@ public class PropertiesUtils {
/**
* 获取配置文件中Boolean类型的值取不到从System.getProperty获取取不到返回空。
* @return 获取不到返回空defValue默认值
* @return 获取不到返回空defValue默认值如果结果为非布尔类型则返回false
*/
public Boolean getPropertyToBoolean(String key, String defValue) {
return ObjectUtils.toBoolean(getProperty(key, defValue));
@@ -217,12 +217,44 @@ public class PropertiesUtils {
/**
* 获取配置文件中Integer类型的值取不到从System.getProperty获取取不到返回空。
* @return 获取不到返回空defValue默认值
* @return 获取不到返回空defValue默认值如果结果为非数值类型则返回0
*/
public Integer getPropertyToInteger(String key, String defValue) {
return ObjectUtils.toInteger(getProperty(key, defValue));
}
/**
* 获取配置文件中Long类型的值取不到从System.getProperty获取取不到返回空。
* @return 获取不到返回空defValue默认值如果结果为非数值类型则返回0
*/
public Long getPropertyToLong(String key, String defValue) {
return ObjectUtils.toLong(getProperty(key, defValue));
}
/**
* 获取标准key去减号并将后一个字母转换为大写
* @author Think Gem
*/
private String getStandardKey(String key) {
if (key.startsWith("spring.shardingsphere.")) {
return key;
}
StringBuilder sb = new StringBuilder();
boolean upperCase = false;
for (int i = 0; i < key.length(); i++) {
char c = key.charAt(i);
if (c == '-') {
upperCase = true;
} else if (upperCase) {
sb.append(Character.toUpperCase(c));
upperCase = false;
} else {
sb.append(c);
}
}
return sb.toString();
}
/**
* 设置环境属性
* @param environment

View File

@@ -42,6 +42,9 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
}
try {
String str = val.toString();
if (StringUtils.isBlank(str)) {
return 0D;
}
if (StringUtils.contains(str, "*")) {
Double number = null, d = null;
for (String s : StringUtils.split(str, "*")) {
@@ -161,11 +164,16 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
* @return
*/
public static byte[] serialize(Object object) {
if (isJavaSerialize) {
return ObjectUtils.serializeJava(object);
}else {
return ObjectUtils.serializeFst(object);
try {
if (isJavaSerialize) {
return ObjectUtils.serializeJava(object);
}else {
return ObjectUtils.serializeFst(object);
}
} catch (Exception e) {
logger.error("serialize: {}", e.getMessage(), e);
}
return null;
}
/**
@@ -174,11 +182,16 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
* @return
*/
public static Object unserialize(byte[] bytes) {
if (isJavaSerialize) {
return ObjectUtils.unserializeJava(bytes);
}else {
return ObjectUtils.unserializeFst(bytes);
try {
if (isJavaSerialize) {
return ObjectUtils.unserializeJava(bytes);
}else {
return ObjectUtils.unserializeFst(bytes);
}
} catch (Exception e) {
logger.error("unserialize: {}", e.getMessage());
}
return null;
}
/**
@@ -197,10 +210,10 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
oos.writeObject(object);
bytes = baos.toByteArray();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
long totalTime = System.currentTimeMillis() - beginTime;
if (totalTime > 3000){
if (totalTime > 30000){
logger.warn(object.getClass() + " serialize time: " + TimeUtils.formatDateAgo(totalTime));
}
return bytes;
@@ -222,11 +235,11 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
ObjectInputStream ois = new ObjectInputStream(bais);) {
object = ois.readObject();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
long totalTime = System.currentTimeMillis() - beginTime;
if (totalTime > 3000 && object != null){
if (totalTime > 30000 && object != null){
logger.warn(object.getClass() + " unserialize time: " + TimeUtils.formatDateAgo(totalTime));
}
return object;
@@ -234,7 +247,8 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
private static ThreadLocal<FSTConfiguration> fstConfiguration =
new NamedThreadLocal<FSTConfiguration>("FSTConfiguration") {
public FSTConfiguration initialValue() {
@Override
public FSTConfiguration initialValue() {
return FSTConfiguration.createDefaultConfiguration();
}
};
@@ -251,7 +265,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
long beginTime = System.currentTimeMillis();
byte[] bytes = fstConfiguration.get().asByteArray(object);
long totalTime = System.currentTimeMillis() - beginTime;
if (totalTime > 3000){
if (totalTime > 30000){
logger.warn(object.getClass() + " fst serialize time: " + TimeUtils.formatDateAgo(totalTime));
}
return bytes;
@@ -269,7 +283,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
long beginTime = System.currentTimeMillis();
Object object = fstConfiguration.get().asObject(bytes);
long totalTime = System.currentTimeMillis() - beginTime;
if (totalTime > 3000 && object != null){
if (totalTime > 30000 && object != null){
logger.warn(object.getClass() + " fst unserialize time: " + TimeUtils.formatDateAgo(totalTime));
}
return object;

View File

@@ -76,7 +76,7 @@ public class WorkDayUtils {
* @return
*/
public String getChineseWeek(Calendar date) {
final String dayNames[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
final String[] dayNames = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
int dayOfWeek = date.get(Calendar.DAY_OF_WEEK);
// System.out.println(dayNames[dayOfWeek - 1]);
return dayNames[dayOfWeek - 1];

View File

@@ -1,172 +0,0 @@
/**
* 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,7 @@ 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.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
import com.jeesite.common.collect.ListUtils;
import com.jeesite.common.io.PropertiesUtils;
import com.jeesite.common.lang.DateUtils;
@@ -222,15 +222,15 @@ public class JsonMapper extends ObjectMapper {
return this;
}
/**
* 支持使用Jaxb的Annotation使得POJO上的annotation不用与Jackson耦合。
* 默认会先查找jaxb的annotation如果找不到再找jackson的。
*/
public JsonMapper enableJaxbAnnotation() {
JaxbAnnotationModule module = new JaxbAnnotationModule();
this.registerModule(module);
return this;
}
// /**
// * 支持使用Jaxb的Annotation使得POJO上的annotation不用与Jackson耦合。
// * 默认会先查找jaxb的annotation如果找不到再找jackson的。
// */
// public JsonMapper enableJaxbAnnotation() {
// JaxbAnnotationModule module = new JaxbAnnotationModule();
// this.registerModule(module);
// return this;
// }
/**
* 取出Mapper做进一步的设置或使用其他序列化API.

View File

@@ -170,7 +170,7 @@ public class VideoUtils {
command.add(getFfmpegFile());
command.add("-i");
command.add(inputFile);
if ((imgFileExtension.toLowerCase()).equals("gif")) {
if ("gif".equals(imgFileExtension.toLowerCase())) {
command.add("-vframes");
command.add("30");
command.add("-f");

View File

@@ -20,9 +20,6 @@ public class EmailUtils {
/**
* 发送邮件
* @param toAddress 接收地址
* @param subject 标题
* @param content 内容
* @return
*/
public static boolean send(String toAddress, String subject, String content) {
@@ -30,9 +27,23 @@ public class EmailUtils {
String fromAddress = props.getProperty("msg.email.fromAddress");
String fromPassword = props.getProperty("msg.email.fromPassword");
String fromHostName = props.getProperty("msg.email.fromHostName");
Integer smtpPort = props.getPropertyToInteger("msg.email.smtpPort", "25");
String sslOnConnect = props.getProperty("msg.email.sslOnConnect", "false");
String sslSmtpPort = props.getProperty("msg.email.sslSmtpPort");
return send(fromAddress, fromPassword, fromHostName, sslOnConnect, sslSmtpPort, toAddress, subject, content);
return send(fromAddress, fromPassword, fromHostName, smtpPort, sslOnConnect, sslSmtpPort, toAddress, subject, content);
}
/**
* 发送邮件
* @param toAddress 接收地址
* @param subject 标题
* @param content 内容
* @return
*/
@Deprecated
public static boolean send(String fromAddress, String fromPassword, String fromHostName,
String sslOnConnect, String sslSmtpPort, String toAddress, String subject, String content) {
return send(fromAddress, fromPassword, fromHostName, 25, sslOnConnect, sslSmtpPort, toAddress, subject, content);
}
/**
@@ -42,7 +53,7 @@ public class EmailUtils {
* @param content 内容
* @return
*/
public static boolean send(String fromAddress, String fromPassword, String fromHostName,
public static boolean send(String fromAddress, String fromPassword, String fromHostName, Integer smtpPort,
String sslOnConnect, String sslSmtpPort, String toAddress, String subject, String content) {
try {
HtmlEmail htmlEmail = new HtmlEmail();
@@ -50,8 +61,10 @@ public class EmailUtils {
htmlEmail.setFrom(fromAddress);
// 密码校验
htmlEmail.setAuthentication(fromAddress, fromPassword);
// 发送服务器协议
// 发送服务器主机名
htmlEmail.setHostName(fromHostName);
// 发送服务器端口
htmlEmail.setSmtpPort(smtpPort);
// SSL
if ("true".equals(sslOnConnect)) {

View File

@@ -2227,7 +2227,7 @@ public class DiffMatchPatch {
if (m.group(2).length() == 0) {
patch.start1--;
patch.length1 = 1;
} else if (m.group(2).equals("0")) {
} else if ("0".equals(m.group(2))) {
patch.length1 = 0;
} else {
patch.start1--;
@@ -2238,7 +2238,7 @@ public class DiffMatchPatch {
if (m.group(4).length() == 0) {
patch.start2--;
patch.length2 = 1;
} else if (m.group(4).equals("0")) {
} else if ("0".equals(m.group(4))) {
patch.length2 = 0;
} else {
patch.start2--;

View File

@@ -52,7 +52,7 @@ public class PinyinUtils {
if (arr[i] > 128) {
try {
String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[i], Static.defaultFormat);
if (temp != null) {
if (temp != null && temp.length > 0) {
pybf.append(temp[0].charAt(0));
}else{
pybf.append(String.valueOf(arr[i]));
@@ -123,7 +123,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] == ' ') {
c[i] = '\u3000';
@@ -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] = ' ';
@@ -155,7 +155,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

@@ -10,15 +10,9 @@ import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.jeesite.common.codec.EncodeUtils;
import com.jeesite.common.image.ImageUtils;
import com.jeesite.common.io.FileUtils;
import com.jeesite.common.media.VideoUtils;
@@ -32,55 +26,33 @@ import com.jeesite.common.ueditor.define.State;
public class BinaryUploader {
public static final State save(HttpServletRequest request,
Map<String, Object> conf) {
FileItemStream fileStream = null; // 原始上传
MultipartFile fileStream2 = null; // Spring MVC 上传
boolean isAjaxUpload = request.getHeader("X-Requested-With") != null;
if (!ServletFileUpload.isMultipartContent(request)) {
Map<String, Object> conf) {
String contentType = request.getContentType();
if (!("POST".equals(request.getMethod()) && contentType != null
&& contentType.startsWith("multipart/"))) {
return new BaseState(false, AppInfo.NOT_MULTIPART_CONTENT);
}
ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
if ( isAjaxUpload ) {
upload.setHeaderEncoding( EncodeUtils.UTF_8 );
}
try {
FileItemIterator iterator = upload.getItemIterator(request);
while (iterator.hasNext()) {
fileStream = iterator.next();
if (!fileStream.isFormField()) {
MultipartFile file = null;
if (request instanceof MultipartHttpServletRequest){
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
Iterator<String> it = multiRequest.getFileNames();
while (it.hasNext()) {
MultipartFile f = multiRequest.getFile(it.next());
if (f != null && !f.isEmpty() && f.getOriginalFilename() != null) {
file = f;
}
break;
}
fileStream = null;
}
if (fileStream == null) {
// 原始上传无文件则检查是否是Spring MVC上传 ThinkGem
MultipartFile file = null;
if (request instanceof MultipartHttpServletRequest){
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
Iterator<String> it = multiRequest.getFileNames();
while (it.hasNext()) {
file = multiRequest.getFile(it.next());
break;
}
}
if (file != null && !file.isEmpty() && file.getOriginalFilename() != null) {
fileStream2 = file;
}
}
if (fileStream == null && fileStream2 == null) {
if (file == null) {
return new BaseState(false, AppInfo.NOTFOUND_UPLOAD_DATA);
}
String savePath = (String) conf.get("savePath");
String originFileName = fileStream != null ? fileStream.getName() : fileStream2.getOriginalFilename();
String originFileName = file.getOriginalFilename();
String suffix = FileType.getSuffixByFilename(originFileName);
originFileName = originFileName.substring(0,
@@ -97,29 +69,36 @@ public class BinaryUploader {
String physicalPath = FileUtils.path((String) conf.get("rootPath") + savePath);
InputStream is = fileStream != null ? fileStream.openStream() : fileStream2.getInputStream();
State storageState = StorageManager.saveFileByInputStream(is, physicalPath, maxSize);
is.close();
InputStream is = null;
State storageState = null;
try {
is = file.getInputStream();
storageState = StorageManager.saveFileByInputStream(is, physicalPath, maxSize);
} finally {
if (is != null) {
is.close();
}
}
if (storageState.isSuccess()) {
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") {
@@ -134,28 +113,26 @@ 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);
}
return storageState;
} catch (FileUploadException e) {
return new BaseState(false, AppInfo.PARSE_REQUEST_ERROR);
} catch (IOException e) {
return new BaseState(false, AppInfo.IO_ERROR);
}
@@ -166,5 +143,5 @@ public class BinaryUploader {
return list.contains(type);
}
}

View File

@@ -24,17 +24,17 @@ public class IdcardUtils extends StringUtils {
public static final int CHINA_ID_MAX_LENGTH = 18;
/** 省、直辖市代码表 */
public static final String cityCode[] = { "11", "12", "13", "14", "15",
public static final String[] cityCode = { "11", "12", "13", "14", "15",
"21", "22", "23", "31", "32", "33", "34", "35", "36", "37", "41",
"42", "43", "44", "45", "46", "50", "51", "52", "53", "54", "61",
"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;
@@ -177,7 +177,7 @@ public class IdcardUtils extends StringUtils {
}
String[] cardval = validateIdCard10(card);
if (cardval != null) {
if (cardval[2].equals("true")) {
if ("true".equals(cardval[2])) {
return true;
}
}
@@ -276,10 +276,10 @@ public class IdcardUtils extends StringUtils {
info[0] = "台湾";
System.out.println("11111");
String char2 = idCard.substring(1, 2);
if (char2.equals("1")) {
if ("1".equals(char2)) {
info[1] = "M";
System.out.println("MMMMMMM");
} else if (char2.equals("2")) {
} else if ("2".equals(char2)) {
info[1] = "F";
System.out.println("FFFFFFF");
} else {
@@ -361,7 +361,7 @@ public class IdcardUtils extends StringUtils {
sum = sum + Integer.valueOf(c + "") * iflag;
iflag--;
}
if (end.toUpperCase().equals("A")) {
if ("A".equals(end.toUpperCase())) {
sum = sum + 10;
} else {
sum = sum + Integer.valueOf(end);

View File

@@ -168,7 +168,7 @@ public abstract class ExcelReader extends DefaultHandler {
// 将单元格内容加入rowlist中在这之前先去掉字符串前后的空白符
} else if ("v".equals(name)) {
String value = lastContents.trim();
value = value.equals("") ? " " : value;
value = "".equals(value) ? " " : value;
try {
// 日期格式处理
if (dateFlag) {
@@ -188,7 +188,7 @@ public abstract class ExcelReader extends DefaultHandler {
curCol++;
} else {
// 如果标签名称为 row ,这说明已到行尾,调用 optRows() 方法
if (name.equals("row")) {
if ("row".equals(name)) {
getRows(sheetIndex + 1, curRow, rowList);
rowList.clear();
curRow++;

View File

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

View File

@@ -464,7 +464,7 @@ public class BookMark {
// Get the first node and catch it's reference for return if
// the first child node is a style node (w:rPr).
childNode = parentNode.getFirstChild();
if (childNode != null && childNode.getNodeName().equals("w:rPr")) {
if (childNode != null && "w:rPr".equals(childNode.getNodeName())) {
styleNode = childNode;
} else {
// If the first node was not a style node and there are other

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -145,7 +145,8 @@
border-bottom-left-radius: 0;
}
.main-footer {
border-top-color: #d2d6de;
border-top-color: #e5e5e5;
border-radius: 4px;
}
.skin-blue.layout-top-nav .main-header > .logo {
background-color: #2A579A;

View File

@@ -144,7 +144,8 @@
border-bottom-left-radius: 0;
}
.main-footer {
border-top-color: #d2d6de;
border-top-color: #e5e5e5;
border-radius: 4px;
}
.skin-blue.layout-top-nav .main-header > .logo {
background-color: #2A579A;

View File

@@ -150,7 +150,8 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
border-bottom-left-radius: 0;
}
.main-footer {
border-top-color: #d2d6de;
border-top-color: #e5e5e5;
border-radius: 4px;
}
.skin-blue.layout-top-nav .main-header > .logo {
background-color: #1890ff;
@@ -167,6 +168,17 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.content-wrapper, .right-side, body {background-color:#f0f2f5;}
/* 页签-经典风格 */
.tabpanel_mover li {height:26px;padding:1px 16px 2px 3px;margin:6px 0 6px 6px;border:1px solid #e4e4e4;border-radius:3px;background:#fff;}
.tabpanel_mover li.active {background-color:#3aa0ff;box-shadow:0 0 5px #e6e6e6;}
.tabpanel_mover li.active div {color:#fff;}
.tabpanel_mover li .closer {font:11px/1 FontAwesome;top:6px;right:2px;background:none;opacity:0.7;}
.tabpanel_mover li .closer:before {content:"\f00d";}
.tabpanel_mover li .closer:hover {background:none;-moz-transform:scale(1.2);-webkit-transform:scale(1.2);
-o-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2);color:#d30606;}
.tabpanel_mover li.active .closer:hover {color:#fff;opacity:0.9;}
.tabpanel_tab_content {background-color:#fafafa;border-bottom-color:#eeeeee;overflow:visible;}
.btn-primary, .btn-primary:hover, .btn-primary:active,
.btn-primary.hover, .btn-primary.focus, .btn-primary:focus,
.btn-primary.active.focus, .btn-primary.active:focus, .btn-primary.active:hover,
@@ -179,31 +191,6 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#1890ff;}
.form-unit {border-bottom: 1px solid #eee;}
.tabpanel_mover li {height:26px;padding:1px 16px 2px 3px;margin:6px 0 6px 6px;border:1px solid #e4e4e4;border-radius:3px;background:#fff;}
.tabpanel_mover li.active {background-color:#3aa0ff;box-shadow:0 0 5px #e6e6e6;}
.tabpanel_mover li.active div {color:#fff;}
.tabpanel_mover li .closer {font:11px/1 FontAwesome;top:6px;right:2px;background:none;opacity:0.7;}
.tabpanel_mover li .closer:before {content:"\f00d";}
.tabpanel_mover li .closer:hover {background:none;-moz-transform: scale(1.2);-webkit-transform: scale(1.2);
-o-transform: scale(1.2);-ms-transform: scale(1.2);transform: scale(1.2);color:#d30606;}
.tabpanel_mover li.active .closer:hover {color:#fff;opacity:0.9;}
.tabpanel_tab_content {background-color:#fafafa;border-bottom-color:#eeeeee;overflow:visible;}
/* .tabpanel_mover li {background:#fff;border-right:1px solid #eee;padding:8px 16px 8px 5px;}
.tabpanel_mover li.active {background-color:#fff;border-bottom:3px solid #3aa0ff;}
.tabpanel_mover li.active div {color:#0975d9;}
.tabpanel_mover li .closer {background:none;font:11px/1 FontAwesome;opacity:0.7;}
.tabpanel_mover li .closer:before {content:"\f00d";}
.tabpanel_mover li .closer:hover {background:none;-moz-transform: scale(1.2);-webkit-transform: scale(1.2);
-o-transform: scale(1.2);-ms-transform: scale(1.2);transform: scale(1.2);color:#d30606;}
.tabpanel_tab_content {background-color:#fafafa;border-bottom-color:#eeeeee;overflow:visible;} 替换上面 tab 样式,改变 tab 风格。*/
/* .main-content {padding:10px;}
.ui-layout-container {padding:10px;}
.ui-layout-resizer {background:transparent;}
.ui-layout-pane {box-shadow:0 0 5px #e0e0e0;}
.ui-layout-pane>.main-content {padding:0;}
.ui-layout-content>.wrapper>.main-content {padding:0;}
.box-main,.nav-main{border-radius:3px;box-shadow:0 0 5px #e0e0e0;} 解开注释,可给内容页面,添加内边距样式 */
.box-main>.box-header {border-bottom-color:#eeeeee;}
.box-main>.box-header .box-title .fa {color:#1890ff;}
.nav-tabs-custom>.nav-tabs>li.active {border-top-color:#3aa0ff;}

View File

@@ -150,7 +150,8 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
border-bottom-left-radius: 0;
}
.main-footer {
border-top-color: #d2d6de;
border-top-color: #e5e5e5;
border-radius: 4px;
}
.skin-blue.layout-top-nav .main-header > .logo {
background-color: #1890ff;
@@ -163,43 +164,15 @@ 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;}
.btn-primary, .btn-primary:hover, .btn-primary:active,
.btn-primary.hover, .btn-primary.focus, .btn-primary:focus,
.btn-primary.active.focus, .btn-primary.active:focus, .btn-primary.active:hover,
.btn-primary:active.focus, .btn-primary:active:focus, .btn-primary:active:hover,
.open>.dropdown-toggle.btn-primary.focus, .open>.dropdown-toggle.btn-primary:focus,
.open>.dropdown-toggle.btn-primary:hover, .layui-layer-btn .layui-layer-btn0,
.select2-container--default .select2-selection--multiple .select2-selection__choice,
.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;}
.box-main>.box-header {border-bottom-color:#eeeeee;}
.box-main>.box-header .box-title .fa {color:#1890ff;}
.nav-tabs-custom>.nav-tabs>li.active {border-top-color:#3aa0ff;}
.form-control:focus,.select2-container--default.select2-container--focus .select2-selection--multiple,
.select2-container--default .select2-search--dropdown .select2-search__field,
.select2-container--default.select2-container--focus .select2-selection--single,
.select2-container--default.select2-container--focus .select2-selection--multiple {border-color:#40a9ff!important;box-shadow:0 0 0 2px rgba(24,144,255,.2);}
.table thead tr, .ui-jqgrid-htable thead tr, .ui-jqgrid-hdiv, .ui-jqgrid-hbox {background-color:#f6f6f6;}
.ui-jqgrid .ui-jqgrid-htable th.ui-th-column-header, .ui-jqgrid .ui-jqgrid-htable th.ui-th-column,
.ui-jqgrid .ui-jqgrid-labels th, .ui-jqgrid .ui-widget-content, .ui-jqgrid tr.ui-row-ltr td,
.ui-jqgrid tr.ui-row-rtl td, .ui-jqgrid tr.ui-row-ltr td:last-child {border-color:#eaeaea;}
.ui-state-hover td, .ui-widget-content .ui-state-hover td, .ui-widget-header .ui-state-hover td,
.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;} 解开注释,可去除表格单元格的竖边框线 */
/* 内容页面,内边距风格 */
.content-wrapper, .right-side, body, iframe {background-color:#f0f2f5;}
.ui-layout-container, .main-content {padding:15px 15px 13px 15px;}
.ui-layout-resizer {background:transparent;}
.ui-layout-pane>.main-content {padding:0;}
.ui-layout-content>.wrapper>.main-content {padding:0;}
.box-main,.nav-main,.ui-layout-pane{border-radius:5px;}
/* 页签添加内边距 */
.content-wrapper, .tabpanel_content, .tabpanel_content .html_content, body {background-color:#f0f2f5;}
.box-main, .nav-main, .ui-layout-pane, iframe {border-radius:5px;}
.tabpanel_content .html_content {padding:14px 14px 13px 15px;}
.tabpanel_tab_content {border-bottom:0;}
.ui-layout-resizer {background:none;}
.content {padding:0!important}
/* 页签-无界风格 */
.tabpanel_mover li {height:26px;padding:2px 16px 2px 3px;margin:11px 0 0px 9px;border:0;border-radius:4px;background:#fff;}
@@ -212,20 +185,8 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
-o-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2);color:#d30606;}
.tabpanel_mover li.active .closer:hover {color:#fff;opacity:0.9;}
.tabpanel_tab_content {background-color:transparent;border-bottom-color:#eeeeee;overflow:visible;}
.tabpanel_tab_content .tabpanel_left_scroll, .tabpanel_tab_content .tabpanel_right_scroll {top:10px;}
.tabpanel_tab_content .tabpanel_left_scroll, .tabpanel_tab_content .tabpanel_right_scroll {top:12px;}
.tabpanel_tab_content .tabpanel_mover {margin:0 5px;}
.tabpanel_content .html_content {margin-top:-1px;}
/* 页签-经典风格
.tabpanel_mover li {height:26px;padding:1px 16px 2px 3px;margin:6px 0 6px 6px;border:1px solid #e4e4e4;border-radius:3px;background:#fff;}
.tabpanel_mover li.active {background-color:#3aa0ff;box-shadow:0 0 5px #e6e6e6;}
.tabpanel_mover li.active div {color:#fff;}
.tabpanel_mover li .closer {font:11px/1 FontAwesome;top:6px;right:2px;background:none;opacity:0.7;}
.tabpanel_mover li .closer:before {content:"\f00d";}
.tabpanel_mover li .closer:hover {background:none;-moz-transform:scale(1.2);-webkit-transform:scale(1.2);
-o-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2);color:#d30606;}
.tabpanel_mover li.active .closer:hover {color:#fff;opacity:0.9;}
.tabpanel_tab_content {background-color:#fafafa;border-bottom-color:#eeeeee;overflow:visible;} */
/* 页签-下划线风格
.tabpanel_mover li {background:#fff;border:0;padding:5px 16px 5px 3px;}
@@ -239,3 +200,31 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.tabpanel_tab_content {height:32px;line-height:32px;border:0;background-color:#fff;overflow:visible;}
.tabpanel_tab_content .tabpanel_move_content {min-height:32px;}
.tabpanel_tab_content .tabpanel_left_scroll, .tabpanel_tab_content .tabpanel_right_scroll {top:4px;} */
.btn-primary, .btn-primary:hover, .btn-primary:active,
.btn-primary.hover, .btn-primary.focus, .btn-primary:focus,
.btn-primary.active.focus, .btn-primary.active:focus, .btn-primary.active:hover,
.btn-primary:active.focus, .btn-primary:active:focus, .btn-primary:active:hover,
.open>.dropdown-toggle.btn-primary.focus, .open>.dropdown-toggle.btn-primary:focus,
.open>.dropdown-toggle.btn-primary:hover, .layui-layer-btn .layui-layer-btn0,
.select2-container--default .select2-selection--multiple .select2-selection__choice,
.select2-container--default .select2-results__option--highlighted[aria-selected],
.wup_container .placeholder .webuploader-pick {background-color:#1890ff!important;border-color:#1890ff!important;}
.form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#1890ff;}
.form-unit {border-bottom:1px solid #eee;}
.box-main>.box-header {border-bottom-color:#eeeeee;}
.box-main>.box-header .box-title .fa {color:#1890ff;}
.nav-tabs-custom>.nav-tabs>li.active {border-top-color:#3aa0ff;}
.form-control:focus,.select2-container--default.select2-container--focus .select2-selection--multiple,
.select2-container--default .select2-search--dropdown .select2-search__field,
.select2-container--default.select2-container--focus .select2-selection--single,
.select2-container--default.select2-container--focus .select2-selection--multiple {border-color:#40a9ff!important;box-shadow:0 0 0 2px rgba(24,144,255,.2);}
.table thead tr, .ui-jqgrid-htable thead tr, .ui-jqgrid-hdiv, .ui-jqgrid-hbox {background-color:#fafafa;}
.ui-jqgrid .ui-jqgrid-labels th, .ui-jqgrid tr.ui-row-ltr td, .ui-jqgrid tr.ui-row-rtl td, .ui-jqgrid tr.ui-row-ltr td:last-child,
.ui-jqgrid .ui-jqgrid-htable th.ui-th-column-header, .ui-jqgrid .ui-jqgrid-htable th.ui-th-column,
.ui-jqgrid.ui-widget-content, .ui-jqgrid .ui-widget-content {border-color:#f0f0f0;}
.ui-state-hover td, .ui-widget-content .ui-state-hover td, .ui-widget-header .ui-state-hover td,
.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;} 解开注释,可去除表格单元格的竖边框线 */

View File

@@ -150,7 +150,8 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
border-bottom-left-radius: 0;
}
.main-footer {
border-top-color: #d2d6de;
border-top-color: #e5e5e5;
border-radius: 4px;
}
.skin-blue.layout-top-nav .main-header > .logo {
background-color: #1e5edb;
@@ -167,6 +168,17 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.content-wrapper, .right-side, body {background-color:#f0f2f5;}
/* 页签-经典风格 */
.tabpanel_mover li {height:26px;padding:1px 16px 2px 3px;margin:6px 0 6px 6px;border:1px solid #e4e4e4;border-radius:3px;background:#fff;}
.tabpanel_mover li.active {background-color:#1e5edb;box-shadow:0 0 5px #e6e6e6;}
.tabpanel_mover li.active div {color:#fff;}
.tabpanel_mover li .closer {font:11px/1 FontAwesome;top:6px;right:2px;background:none;opacity:0.7;}
.tabpanel_mover li .closer:before {content:"\f00d";}
.tabpanel_mover li .closer:hover {background:none;-moz-transform:scale(1.2);-webkit-transform:scale(1.2);
-o-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2);color:#d30606;}
.tabpanel_mover li.active .closer:hover {color:#fff;opacity:0.9;}
.tabpanel_tab_content {background-color:#fafafa;border-bottom-color:#eeeeee;overflow:visible;}
.btn-primary, .btn-primary:hover, .btn-primary:active,
.btn-primary.hover, .btn-primary.focus, .btn-primary:focus,
.btn-primary.active.focus, .btn-primary.active:focus, .btn-primary.active:hover,
@@ -179,31 +191,6 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#1e5edb;}
.form-unit {border-bottom: 1px solid #eee;}
.tabpanel_mover li {height:26px;padding:1px 16px 2px 3px;margin:6px 0 6px 6px;border:1px solid #e4e4e4;border-radius:3px;background:#fff;}
.tabpanel_mover li.active {background-color:#1e5edb;box-shadow:0 0 5px #e6e6e6;}
.tabpanel_mover li.active div {color:#fff;}
.tabpanel_mover li .closer {font:11px/1 FontAwesome;top:6px;right:2px;background:none;opacity:0.7;}
.tabpanel_mover li .closer:before {content:"\f00d";}
.tabpanel_mover li .closer:hover {background:none;-moz-transform: scale(1.2);-webkit-transform: scale(1.2);
-o-transform: scale(1.2);-ms-transform: scale(1.2);transform: scale(1.2);color:#d30606;}
.tabpanel_mover li.active .closer:hover {color:#fff;opacity:0.9;}
.tabpanel_tab_content {background-color:#fafafa;border-bottom-color:#eeeeee;overflow:visible;}
/* .tabpanel_mover li {background:#fff;border-right:1px solid #eee;padding:8px 16px 8px 5px;}
.tabpanel_mover li.active {background-color:#fff;border-bottom:3px solid #1e5edb;}
.tabpanel_mover li.active div {color:#0975d9;}
.tabpanel_mover li .closer {background:none;font:11px/1 FontAwesome;opacity:0.7;}
.tabpanel_mover li .closer:before {content:"\f00d";}
.tabpanel_mover li .closer:hover {background:none;-moz-transform: scale(1.2);-webkit-transform: scale(1.2);
-o-transform: scale(1.2);-ms-transform: scale(1.2);transform: scale(1.2);color:#d30606;}
.tabpanel_tab_content {background-color:#fafafa;border-bottom-color:#eeeeee;overflow:visible;} 替换上面 tab 样式,改变 tab 风格。*/
/* .main-content {padding:10px;}
.ui-layout-container {padding:10px;}
.ui-layout-resizer {background:transparent;}
.ui-layout-pane {box-shadow:0 0 5px #e0e0e0;}
.ui-layout-pane>.main-content {padding:0;}
.ui-layout-content>.wrapper>.main-content {padding:0;}
.box-main,.nav-main{border-radius:3px;box-shadow:0 0 5px #e0e0e0;} 解开注释,可给内容页面,添加内边距样式 */
.box-main>.box-header {border-bottom-color:#eeeeee;}
.box-main>.box-header .box-title .fa {color:#1e5edb;}
.nav-tabs-custom>.nav-tabs>li.active {border-top-color:#1e5edb;}

View File

@@ -150,7 +150,8 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
border-bottom-left-radius: 0;
}
.main-footer {
border-top-color: #d2d6de;
border-top-color: #e5e5e5;
border-radius: 4px;
}
.skin-blue.layout-top-nav .main-header > .logo {
background-color: #1e5edb;
@@ -163,50 +164,15 @@ 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;}
.btn-primary, .btn-primary:hover, .btn-primary:active,
.btn-primary.hover, .btn-primary.focus, .btn-primary:focus,
.btn-primary.active.focus, .btn-primary.active:focus, .btn-primary.active:hover,
.btn-primary:active.focus, .btn-primary:active:focus, .btn-primary:active:hover,
.open>.dropdown-toggle.btn-primary.focus, .open>.dropdown-toggle.btn-primary:focus,
.open>.dropdown-toggle.btn-primary:hover, .layui-layer-btn .layui-layer-btn0,
.select2-container--default .select2-selection--multiple .select2-selection__choice,
.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;}
/* .main-content {padding:10px;}
.ui-layout-container {padding:10px;}
.ui-layout-resizer {background:transparent;}
.ui-layout-pane {box-shadow:0 0 5px #e0e0e0;}
.ui-layout-pane>.main-content {padding:0;}
.ui-layout-content>.wrapper>.main-content {padding:0;}
.box-main,.nav-main{border-radius:3px;box-shadow:0 0 5px #e0e0e0;} 解开注释,可给内容页面,添加内边距样式 */
.box-main>.box-header {border-bottom-color:#eeeeee;}
.box-main>.box-header .box-title .fa {color:#1e5edb;}
.nav-tabs-custom>.nav-tabs>li.active {border-top-color:#1e5edb;}
.form-control:focus,.select2-container--default.select2-container--focus .select2-selection--multiple,
.select2-container--default .select2-search--dropdown .select2-search__field,
.select2-container--default.select2-container--focus .select2-selection--single,
.select2-container--default.select2-container--focus .select2-selection--multiple {border-color:#557bfa!important;box-shadow:0 0 0 2px rgba(24,80,236,.2);}
.table thead tr, .ui-jqgrid-htable thead tr, .ui-jqgrid-hdiv, .ui-jqgrid-hbox {background-color:#f6f6f6;}
.ui-jqgrid .ui-jqgrid-htable th.ui-th-column-header, .ui-jqgrid .ui-jqgrid-htable th.ui-th-column,
.ui-jqgrid .ui-jqgrid-labels th, .ui-jqgrid .ui-widget-content, .ui-jqgrid tr.ui-row-ltr td,
.ui-jqgrid tr.ui-row-rtl td, .ui-jqgrid tr.ui-row-ltr td:last-child {border-color:#eaeaea;}
.ui-state-hover td, .ui-widget-content .ui-state-hover td, .ui-widget-header .ui-state-hover td,
.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;} 解开注释,可去除表格单元格的竖边框线 */
/* 内容页面,内边距风格 */
.content-wrapper, .right-side, body, iframe {background-color:#f0f2f5;}
.ui-layout-container, .main-content {padding:15px 15px 13px 15px;}
.ui-layout-resizer {background:transparent;}
.ui-layout-pane>.main-content {padding:0;}
.ui-layout-content>.wrapper>.main-content {padding:0;}
.box-main,.nav-main,.ui-layout-pane{border-radius:5px;}
/* 页签添加内边距 */
.content-wrapper, .tabpanel_content, .tabpanel_content .html_content, body {background-color:#f0f2f5;}
.box-main, .nav-main, .ui-layout-pane, iframe {border-radius:5px;}
.tabpanel_content .html_content {padding:14px 14px 13px 15px;}
.tabpanel_tab_content {border-bottom:0;}
.ui-layout-resizer {background:none;}
.content {padding:0!important}
/* 页签-无界风格 */
.tabpanel_mover li {height:26px;padding:2px 16px 2px 3px;margin:11px 0 0px 9px;border:0;border-radius:4px;background:#fff;}
@@ -219,20 +185,8 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
-o-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2);color:#d30606;}
.tabpanel_mover li.active .closer:hover {color:#fff;opacity:0.9;}
.tabpanel_tab_content {background-color:transparent;border-bottom-color:#eeeeee;overflow:visible;}
.tabpanel_tab_content .tabpanel_left_scroll, .tabpanel_tab_content .tabpanel_right_scroll {top:10px;}
.tabpanel_tab_content .tabpanel_left_scroll, .tabpanel_tab_content .tabpanel_right_scroll {top:12px;}
.tabpanel_tab_content .tabpanel_mover {margin:0 5px;}
.tabpanel_content .html_content {margin-top:-1px;}
/* 页签-经典风格
.tabpanel_mover li {height:26px;padding:1px 16px 2px 3px;margin:6px 0 6px 6px;border:1px solid #e4e4e4;border-radius:3px;background:#fff;}
.tabpanel_mover li.active {background-color:#1e5edb;box-shadow:0 0 5px #e6e6e6;}
.tabpanel_mover li.active div {color:#fff;}
.tabpanel_mover li .closer {font:11px/1 FontAwesome;top:6px;right:2px;background:none;opacity:0.7;}
.tabpanel_mover li .closer:before {content:"\f00d";}
.tabpanel_mover li .closer:hover {background:none;-moz-transform:scale(1.2);-webkit-transform:scale(1.2);
-o-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2);color:#d30606;}
.tabpanel_mover li.active .closer:hover {color:#fff;opacity:0.9;}
.tabpanel_tab_content {background-color:#fafafa;border-bottom-color:#eeeeee;overflow:visible;} */
/* 页签-下划线风格
.tabpanel_mover li {background:#fff;border:0;padding:5px 16px 5px 3px;}
@@ -246,3 +200,31 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.tabpanel_tab_content {height:32px;line-height:32px;border:0;background-color:#fff;overflow:visible;}
.tabpanel_tab_content .tabpanel_move_content {min-height:32px;}
.tabpanel_tab_content .tabpanel_left_scroll, .tabpanel_tab_content .tabpanel_right_scroll {top:4px;} */
.btn-primary, .btn-primary:hover, .btn-primary:active,
.btn-primary.hover, .btn-primary.focus, .btn-primary:focus,
.btn-primary.active.focus, .btn-primary.active:focus, .btn-primary.active:hover,
.btn-primary:active.focus, .btn-primary:active:focus, .btn-primary:active:hover,
.open>.dropdown-toggle.btn-primary.focus, .open>.dropdown-toggle.btn-primary:focus,
.open>.dropdown-toggle.btn-primary:hover, .layui-layer-btn .layui-layer-btn0,
.select2-container--default .select2-selection--multiple .select2-selection__choice,
.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;}
.box-main>.box-header {border-bottom-color:#eeeeee;}
.box-main>.box-header .box-title .fa {color:#1e5edb;}
.nav-tabs-custom>.nav-tabs>li.active {border-top-color:#1e5edb;}
.form-control:focus,.select2-container--default.select2-container--focus .select2-selection--multiple,
.select2-container--default .select2-search--dropdown .select2-search__field,
.select2-container--default.select2-container--focus .select2-selection--single,
.select2-container--default.select2-container--focus .select2-selection--multiple {border-color:#557bfa!important;box-shadow:0 0 0 2px rgba(24,80,236,.2);}
.table thead tr, .ui-jqgrid-htable thead tr, .ui-jqgrid-hdiv, .ui-jqgrid-hbox {background-color:#fafafa;}
.ui-jqgrid .ui-jqgrid-labels th, .ui-jqgrid tr.ui-row-ltr td, .ui-jqgrid tr.ui-row-rtl td, .ui-jqgrid tr.ui-row-ltr td:last-child,
.ui-jqgrid .ui-jqgrid-htable th.ui-th-column-header, .ui-jqgrid .ui-jqgrid-htable th.ui-th-column,
.ui-jqgrid.ui-widget-content, .ui-jqgrid .ui-widget-content {border-color:#f0f0f0;}
.ui-state-hover td, .ui-widget-content .ui-state-hover td, .ui-widget-header .ui-state-hover td,
.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;} 解开注释,可去除表格单元格的竖边框线 */

View File

@@ -0,0 +1,329 @@
/*
* http://jeesite.com
*/
a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sortable {
color: #42a4e0;
}
.main-header .navbar {
background: #1a1a1a;
}
.main-header .navbar .nav > li > a {
color: #b9b9b9;
}
.main-header .navbar .nav > li > a:hover,
.main-header .navbar .nav > li > a:active,
.main-header .navbar .nav > li > a:focus,
.main-header .navbar .nav .open > a,
.main-header .navbar .nav .open > a:hover,
.main-header .navbar .nav .open > a:focus,
.main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.3);
color: #f6f6f6;
}
.main-header .navbar .sidebar-toggle {
color: #ffffff;
}
.main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.3);
}
.main-header .navbar .sidebar-toggle {
color: #fff;
}
.main-header .navbar .sidebar-toggle:hover {
background-color: #367fa9;
}
@media (max-width: 767px) {
.main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.main-header .navbar .dropdown-menu li a {
color: #fff;
}
.main-header .navbar .dropdown-menu li a:hover {
background: #367fa9;
}
}
.main-header .logo {
background-color: transparent;
color: #fff;
border-bottom: 0 solid transparent;
}
.main-header .logo:hover {
background-color: #000;
}
.main-header li.user-header {
background-color: #000;
}
.content-header {
background: transparent;
}
.sidebar,
.left-side {
background-color: #1a1a1a;
}
.content-wrapper,
.main-footer {
border-left: 1px solid #303030;
}
.user-panel > .info,
.user-panel > .info > a {
color: #eee;
}
.sidebar-menu > li {
-webkit-transition: border-left-color 0.3s ease;
-o-transition: border-left-color 0.3s ease;
transition: border-left-color 0.3s ease;
}
.sidebar-menu > li.header {
color: #848484;
background: #1a1a1a;
}
.sidebar-menu > li > a {
border-left: 3px solid transparent;
font-weight: 600;
}
.sidebar-menu > li:hover > a,
.sidebar-menu > li.active > a {
color: #cccccc;
background: #1a1a1a;
}
.sidebar-menu > li.active {
border-left-color: #1e5edb;
}
.sidebar-menu > li.active > a {
font-weight: 600;
}
.sidebar-menu > li.menu-open > a,
.sidebar-menu > li > .treeview-menu {
background: #1a1a1a;
}
.sidebar a {
color: #d3d3d3;
}
.sidebar a:hover {
text-decoration: none;
}
.treeview-menu > li > a {
color: #d3d3d3;
}
.treeview-menu > li.active > a,
.treeview-menu > li > a:hover {
color: #fff;
}
.sidebar-form {
border-radius: 3px;
border: 1px solid #d2d6de;
margin: 10px 10px;
}
.sidebar-form input[type="text"],
.sidebar-form .btn {
box-shadow: none;
background-color: #303030;
border: 1px solid transparent;
height: 35px;
}
.sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.sidebar-form input[type="text"]:focus,
.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #303030;
color: #666;
}
.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.main-footer {
border-top-color: #303030;
border-radius: 4px;
background-color: #1a1a1a;
color: #ddd;
}
.skin-blue.layout-top-nav .main-header > .logo {
background-color: #1e5edb;
color: #fff;
border-bottom: 0 solid transparent;
}
.skin-blue.layout-top-nav .main-header > .logo:hover {
background-color: #3b8ab8;
}
.sidebar-menu {padding:0 8px 0 7px;}
.sidebar-menu li>a>.pull-right-container {left:0;}
.sidebar-menu .treeview-item.active>a {color: #fff;background-color:#2975bc;border-right:0;border-radius:6px;}
/* 页签添加内边距 */
.content-wrapper, .tabpanel_content, .tabpanel_content .html_content, body {background-color:#000;}
.box-main, .nav-main, .ui-layout-pane, iframe {border-radius:5px;}
.tabpanel_content .html_content {padding:14px 14px 13px 15px;}
.tabpanel_tab_content {border-bottom:0;}
.ui-layout-resizer {background:none;}
.content {padding:0!important}
/* 页签-无界风格 */
.tabpanel_mover li {height:26px;padding:2px 16px 2px 3px;margin:11px 0 0px 9px;border:0;border-radius:4px;background:#1a1a1a;}
.tabpanel_mover li .title {padding-left:0;text-align:center;color:#ddd;}
.tabpanel_mover li.active {background-color:#2975bc;}
.tabpanel_mover li.active div {color:#fff;}
.tabpanel_mover li .closer {font:11px/1 FontAwesome;top:6px;right:4px;background:none;opacity:0.7;}
.tabpanel_mover li .closer:before {content:"\f00d";}
.tabpanel_mover li .closer:hover {background:none;-moz-transform:scale(1.2);-webkit-transform:scale(1.2);
-o-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2);color:#d30606;}
.tabpanel_mover li.active .closer:hover {color:#fff;opacity:0.9;}
.tabpanel_tab_content {background-color:transparent;border-bottom-color:#eeeeee;overflow:visible;}
.tabpanel_tab_content .tabpanel_left_scroll, .tabpanel_tab_content .tabpanel_right_scroll {top:12px;}
.tabpanel_tab_content .tabpanel_mover {margin:0 5px;}
/* 页签-下划线风格
.tabpanel_mover li {background:#fff;border:0;padding:5px 16px 5px 3px;}
.tabpanel_mover li .title {padding-left:0;text-align:center;}
.tabpanel_mover li.active {background-color:#fff;border-bottom:2px solid #3aa0ff;}
.tabpanel_mover li.active div {color:#0975d9;}
.tabpanel_mover li .closer {background:none;font:11px/1 FontAwesome;opacity:0.6;right:3px;top:10px;}
.tabpanel_mover li .closer:before {content:"\f00d";}
.tabpanel_mover li .closer:hover {background:none;-moz-transform: scale(1.2);-webkit-transform: scale(1.2);
-o-transform: scale(1.2);-ms-transform: scale(1.2);transform: scale(1.2);color:#d30606;}
.tabpanel_tab_content {height:32px;line-height:32px;border:0;background-color:#fff;overflow:visible;}
.tabpanel_tab_content .tabpanel_move_content {min-height:32px;}
.tabpanel_tab_content .tabpanel_left_scroll, .tabpanel_tab_content .tabpanel_right_scroll {top:4px;} */
#page-loading {color:#ddd;border-color:#505050;background:#343434;padding:7px}
::-webkit-scrollbar {background:#2a2a2a;}
::-webkit-scrollbar-thumb {background:#6a6a6a;}
.btn-default {background-color:#323232;border-color:#323232;color:#b5b5b5;}
.btn-default.active, .btn-default:active {background-color:#3e3e3e;border-color:#3e3e3e;color:#dfdfdf;}
.btn-default:hover, .btn-default:active, .btn-default.hover, .btn-default:focus,
.btn-default.active.focus, .btn-default.active:focus, .btn-default.active:hover, .btn-default:active.focus,
.btn-default:active:focus, .btn-default:active:hover, .open>.dropdown-toggle.btn-default.focus,
.open>.dropdown-toggle.btn-default:focus, .open>.dropdown-toggle.btn-default:hover {
background-color:#3e3e3e;border-color:#3e3e3e;color:#eee;}
.input-group-btn .btn, .treeSearchInput button, .treeSearchInput button:hover, .treeSearchInput button:focus {
background-color:#1a1a1a;border-color:#3c3c3c;color:#ddd;}
.treeExpandCollapse, .treeExpandCollapse a {background-color:#1a1a1a;color:#8d8d8d;}
.btn-primary, .btn-primary:hover, .btn-primary:active,
.btn-primary.hover, .btn-primary.focus, .btn-primary:focus,
.btn-primary.active.focus, .btn-primary.active:focus, .btn-primary.active:hover,
.btn-primary:active.focus, .btn-primary:active:focus, .btn-primary:active:hover,
.open>.dropdown-toggle.btn-primary.focus, .open>.dropdown-toggle.btn-primary:focus,
.open>.dropdown-toggle.btn-primary:hover, .layui-layer-btn .layui-layer-btn0,
.select2-container--default .select2-selection--multiple .select2-selection__choice,
.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:#2975bc;}
.form-unit {border-bottom:1px solid #4e4e4e;}
.form-inline .form-more {background-color:#1a1a1a;border-bottom-color:#393939;}
.form-control, .input-group .input-group-addon, input, select, textarea, pre {background-color:#1a1a1a;border-color:#414141!important;color:#ddd}
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {background-color:#2a2a2a;}
.select2-container .select2-selection--single, .select2-container .select2-selection--multiple,
.select2-container--default .select2-selection--single, .select2-selection .select2-selection--single,
.select2-container--default .select2-selection--multiple {background-color:#1a1a1a!important;border-color:#383838;color:#ddd}
.select2-container--default .select2-selection--single .select2-selection__rendered {color:#ddd}
.treeselect .form-control, .form-control.laydate {background-color:#1a1a1a!important;color:#ddd}
.select2-dropdown {background-color:#1a1a1a;border-color:#414141!important;color:#ddd;}
.select2-container--default .select2-results__option[aria-selected=true] {background-color:#3c3c3c;color:#ddd;}
.navbar-custom-menu>.navbar-nav>li>.dropdown-menu,
.main-header .navbar .dropdown-menu li.divider {background-color:#1a1a1a;border-color:#414141!important;}
.main-header .navbar .dropdown-menu li a {color:#ddd!important;}
.main-header .navbar .dropdown-menu li a:hover {background: #4c4c4c!important;}
.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a {border-color:#414141!important;}
.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4 {color:#ddd!important;}
.navbar-nav>.messages-menu>.dropdown-menu>li.header,.main-header .navbar .dropdown-menu li a,
.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a, .navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,
.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a {background-color:#1a1a1a!important;border-color:#414141!important;color:#c6c6c6!important;}
.error-page > .error-content, .error-page > .copyright {color:#9d9d9d;}
.sort-highlight, .tags-input {background:#262626;border-color:#4e4e4e;}
.todo-list>li {background:#262626;color:#ddd;border-left-color:#4e4e4e;}
.alert-default {background:#1a1a1a;border-color:#3c3c3c;color:#7c7c7c;}
.strength .strength_meter {border-color:#3c3c3c!important;}
.bg-teal-gradient {background:#34b3b3!important;}
.info-box {background:#1a1a1a;color:#ddd;}
.box, .nav-tabs-custom {background:#1a1a1a!important;color:#ddd!important;box-shadow:none;}
.box-trees {background:#2a2a2a!important;}
.box-header, .nav-tabs-custom>.nav-tabs>li.header {color:#c8c8c8;}
.box-header.with-border {border-bottom-color:#3a3a3a;}
.box-footer {background-color:#282828;border-top:#3c3c3c;}
.box-footer .knob-label {background:#282828;color:#ddd;}
.box-main>.box-header, .nav-main>.nav-tabs {border-bottom-color:#3a3a3a;color:#ddd}
.nav-tabs>li.active>a, .nav-tabs>li.active>a:focus, .nav-tabs>li.active>a:hover {border-bottom-color:#1a1a1a;}
.nav-tabs-custom>.tab-content {background-color:#1a1a1a;color:#ddd;}
.nav-tabs-custom>.nav-tabs {border-bottom-color:#3a3a3a;}
.nav-tabs-custom>.nav-tabs>li>a {color:#8d8d8d;}
.nav-tabs-custom>.nav-tabs>li.active>a {border-right-color:#3a3a3a;border-left-color:#3a3a3a;}
.nav-tabs-custom>.nav-tabs>li.active>a, .nav-tabs-custom>.nav-tabs>li.active:hover>a {background-color:#1a1a1a;color:#ddd;}
.nav-tabs-custom>.nav-tabs>li:first-of-type.active>a,
.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type.active>a {border-left-color:#3a3a3a;}
.nav-main>.nav-tabs>li>a:hover {color:#ddd;}
.box-main>.box-header .box-title .fa {color:#2975bc;}
.nav-tabs-custom>.nav-tabs>li.active {border-top-color:#3aa0ff;}
.nav-main>.nav-tabs.pull-right>li:first-of-type.active>a {border-color:#3c3c3c;}
.form-control:focus,.select2-container--default.select2-container--focus .select2-selection--multiple,
.select2-container--default .select2-search--dropdown .select2-search__field,
.select2-container--default.select2-container--focus .select2-selection--single,
.select2-container--default.select2-container--focus .select2-selection--multiple {border-color:#40a9ff!important;box-shadow:0 0 0 2px rgba(24,144,255,.2);}
.table thead tr, .ui-jqgrid-htable thead tr, .ui-jqgrid-hdiv, .ui-jqgrid-hbox {background-color: #1f1f1f;color:#b3b3b3;}
.table>thead>tr>th, .table>tbody>tr>th, .table>tfoot>tr>th, .table>thead>tr>td, .table>tbody>tr>td, .table>tfoot>tr>td {border-color:#3e3e3e;}
.table-striped>tbody>tr:nth-of-type(odd) {background-color:#262626;}
.table-hover>tbody>tr:hover>td, .table-hover>tbody>tr:hover>th {background-color:#323232;}
.ui-jqgrid .ui-jqgrid-labels th, .ui-jqgrid tr.ui-row-ltr td, .ui-jqgrid tr.ui-row-rtl td, .ui-jqgrid tr.ui-row-ltr td:last-child,
.ui-jqgrid .ui-jqgrid-htable th.ui-th-column-header, .ui-jqgrid .ui-jqgrid-htable th.ui-th-column,
.ui-jqgrid.ui-widget-content, .ui-jqgrid .ui-widget-content {border-color:#333;}
.ui-state-hover td, .ui-widget-content .ui-state-hover td, .ui-widget-header .ui-state-hover td,
.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 .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}
.ui-jqgrid tr.jqgroup td, .ui-jqgrid tr.footrow td, .ui-jqgrid tr.jqfoot td {background:#323232;}
.ui-jqgrid .actions .moreItems {background:#1a1a1a;border-color:#3c3c3c;box-shadow:none;}
.ui-jqgrid .actions .moreItems a {color:#ddd;}
.ui-jqgrid .editgrid tr.ui-state-hover.ui-row-ltr td,
.ui-jqgrid .editgrid tr.ui-state-highlight.ui-row-ltr td {background-color:#1a1a1a!important;}
.ui-jqgrid .ui-priority-secondary {background-color:#111;}
.ui-widget-content {background-color:#1a1a1a;}
.pagination>li>a, .pagination>li>span {background:#262626;color:#ddd;border-color:#525252;}
.pagination>li>a:focus, .pagination>li>a:hover, .pagination>li>span:focus, .pagination>li>span:hover,
.pagination>.active>a, .pagination>.active>a:focus, .pagination>.active>a:hover, .pagination>.active>span,
.pagination>.active>span:focus, .pagination>.active>span:hover {background:#3aa0ff;color:#fff;border-color:#3aa0ff;}
.pagination>.disabled>a, .pagination>.disabled>a:focus, .pagination>.disabled>a:hover, .pagination>.disabled>span,
.pagination>.disabled>span:focus, .pagination>.disabled>span:hover {background:#262626;color:#747474;border-color:#525252;}
.table-form input, .table-form select, .table-form textarea,
.table-form .form-control, .table-form .select2-selection,
.table-form .form-control:focus, .table-form .select2-container--default.select2-container--focus .select2-selection--single,
.table-form .select2-container--default.select2-container--focus .select2-selection--multiple {border-bottom-color:#494949}
.table-form .ui-jqgrid tr.ui-row-ltr td input,
.table-form .ui-jqgrid tr.ui-row-ltr td select,
.table-form .ui-jqgrid tr.ui-row-ltr td textarea,
.table-form .ui-jqgrid tr.ui-state-highlight.ui-row-ltr td,
.table-form .ui-jqgrid tr.ui-state-highlight.ui-row-ltr td input,
.table-form .ui-jqgrid tr.ui-state-highlight.ui-row-ltr td select,
.table-form .ui-jqgrid tr.ui-state-highlight.ui-row-ltr td textarea,
.table-form .ui-jqgrid tr.ui-row-ltr.ui-priority-secondary td input,
.table-form .ui-jqgrid tr.ui-row-ltr.ui-priority-secondary td select,
.table-form .ui-jqgrid tr.ui-row-ltr.ui-priority-secondary td textarea,
.table-form .ui-jqgrid tr.ui-state-highlight.ui-row-ltr.ui-priority-secondary td,
.table-form .ui-jqgrid tr.ui-state-highlight.ui-row-ltr.ui-priority-secondary td input,
.table-form .ui-jqgrid tr.ui-state-highlight.ui-row-ltr.ui-priority-secondary td select,
.table-form .ui-jqgrid tr.ui-state-highlight.ui-row-ltr.ui-priority-secondary td textarea {color:#ddd!important;}
.table-form .ui-jqgrid tr.ui-state-highlight {background-color:#1a1a1a!important;}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -24,4 +24,7 @@
.icheckbox_minimal-grey,
.iradio_minimal-grey {background-image:url(grey@2x.png);
-webkit-background-size:200px 20px;background-size:200px 20px;}
}
}
.skin-dark .icheckbox_minimal-grey,
.skin-dark .iradio_minimal-grey {background-image:url(dark.png);}

View File

@@ -2,12 +2,12 @@
zTree Style 3.4 author: Hunter.z、ThinkGem
-------------------------------------*/
.ztree * {padding:0;margin:0;font-size:13px;}
.ztree {margin:0;padding:5px;color:#333}
.ztree li{padding:0;margin:0;list-style:none;line-height:21px;text-align:left;white-space:nowrap;outline:0}
.ztree * {padding:0;margin:0;}
.ztree {margin:0;padding:0 5px;color:#333}
.ztree li{padding:3px 0;margin:0;list-style:none;line-height:21px;text-align:left;white-space:nowrap;outline:0}
.ztree li ul{ margin:0;padding:0 0 0 18px}
.ztree li a {padding-right:3px;margin:0;cursor:pointer;height:23px;color:#333;background-color: transparent;text-decoration:none;display: inline-block;vertical-align: middle;}
.ztree li a {padding-right:3px;margin:0;cursor:pointer;height:23px;color:#333;background-color:transparent;text-decoration:none;display:inline-block;vertical-align:middle;}
.ztree li a:hover {text-decoration:underline}
.ztree li a.curSelectedNode {padding-top:0px;background-color:#e5e5e5;color:black;height:23px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
.ztree li a.curSelectedNode_Edit {padding-top:0px;background-color:#e5e5e5;color:black;height:23px;border:1px #666 solid;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
@@ -17,77 +17,82 @@ zTree Style 3.4 author: Hunter.z、ThinkGem
.ztree li a.tmpTargetNode_next {}
.ztree li a input.rename {height:14px;width:80px;padding:0;margin:0;
font-size:12px;border:1px #7EC4CC solid;*border:0px}
.ztree li span {line-height:23px;margin-right:2px}
.ztree li span.button {line-height:0;margin:0;width:21px;height:21px;display: inline-block;vertical-align:middle;
border:0 none;cursor: pointer;outline:none;}
.ztree li span {line-height:23px;margin-right:4px}
.ztree li span.button {line-height:0;margin:0;width:21px;height:21px;display:inline-block;vertical-align:middle;
border:0 none;cursor:pointer;outline:none;}
.ztree li span.button.ico_loading{margin-right:2px;background:url(./img/loading.gif) no-repeat scroll 0 0 transparent;vertical-align:top;*vertical-align:middle}
ul.tmpTargetzTree {background-color:#FFE6B0;opacity:0.8;filter:alpha(opacity=80)}
span.tmpzTreeMove_arrow {width:16px;height:21px;display: inline-block;padding:0;margin:2px 0 0 1px;border:0 none;position:absolute;
background-color:transparent;background-repeat:no-repeat;background-attachment: scroll;}
span.tmpzTreeMove_arrow {width:16px;height:21px;display:inline-block;padding:0;margin:2px 0 0 1px;border:0 none;position:absolute;
background-color:transparent;background-repeat:no-repeat;background-attachment:scroll;}
ul.ztree.zTreeDragUL {margin:0;padding:0;position:absolute;width:auto;height:auto;overflow:hidden;background-color:#cfcfcf;border:1px #00B83F dotted;opacity:0.8;filter:alpha(opacity=80)}
.zTreeMask {z-index:10000;background-color:#cfcfcf;opacity:0.0;filter:alpha(opacity=0);position:absolute}
/* 树搜索相关 */
.treeSearchInput {padding:13px 0 0 20px;}
.treeSearchInput label {padding:5px 0 3px 0;font-size:13px;font-weight:normal;vertical-align:middle;}
.treeSearchInput {padding:12px 0 0 20px;}
.treeSearchInput label {padding:4px 0 3px 0;font-weight:normal;vertical-align:middle;}
.treeSearchInput input {width:140px;vertical-align:middle;line-height:24px;height:26px;border:1px solid #aaa;padding:0 4px;border-radius:4px;}
.treeSearchInput button {border:1px solid #aaa;vertical-align:middle;height:26px;height:26px\9;font-size:13px;background:#efefef;padding:0 8px;}
.treeShowHideButton {position:absolute;right:8px;top:-3px;font-size:12px;color:#333;z-index:3;}
.treeSearchInput button {border:1px solid #aaa;vertical-align:middle;height:26px;height:26px\9;background:#efefef;padding:0 8px;}
.treeShowHideButton {position:absolute;right:8px;top:-3px;color:#333;z-index:3;}
.treeShowHideButton label {cursor:pointer;}
.treeExpandCollapse {float:right;margin:6px 5px;padding:5px;font-size:12px;color:#333;position:relative;z-index:2;background:#fff;}
.treeExpandCollapse {float:right;margin:6px 5px;padding:5px;color:#333;position:relative;z-index:2;background:#fff;}
.treeExpandCollapse a {text-decoration:none;color:#333}
.treeselect.ztree {padding:10px 20px;}
/* 字体图标风格 */
.ztree * {box-sizing:content-box;}
.ztree li li {padding-left:9px;}
.ztree li ul.line {content:"";border-left:1px dotted #aaa;top:0px;left:0px;margin-top:-2px;padding-top:2px;}
/* .ztree li ul.line {content:"";border-left:1px dotted #aaa;top:0px;left:0px;margin-top:0;padding-top:2px;} */
.ztree li ul {position:relative;background:none;margin-left:9px;padding-left:0;}
.ztree li ul.line {background:none;}
.ztree li .noline_open + a + ul:before {border-left:none;}
.ztree li .noline_open + a + ul li:before {border-top:none;}
.ztree li a {height:26px;padding-left:3px;}
.ztree li span {height:26px;margin-left:4px;}
.ztree li a {height:26px;line-height:25px;padding-left:3px;}
.ztree li span {height:26px;margin-left:6px;}
.ztree li span.node_name {margin-right:6px;}
.ztree li span.button.switch,
.ztree li span.button.chk,
.ztree li a span.button,
.ztree li span.button[class$="Page"] {position:relative;width:18px;height:22px;background:none;background-position:center center !important;padding:2px 0;
.ztree li span.button[class$="Page"] {position:relative;width:18px;height:18px;background:none;background-position:center center !important;padding:0;
display:inline-block;font:normal normal normal 15px/1 FontAwesome;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}
.ztree li span.button[class$="Page"] {width:15px;}
.ztree li a span.button[style="width:0px;height:0px;"]:before,
.ztree li a span.button[style^="background"]:before {content:"";}
.ztree li span.button.roots_docu, .ztree li span.button.center_docu, .ztree li span.button.bottom_docu {position:relative;height:24px;padding:0;}
.ztree li span.button.roots_docu:before {content:"";display:block;width:18px;height:11px;border-left:1px dotted #aaa;position:absolute;top:10px;left:9px;}
.ztree li span.button.roots_docu:after {content:"";display:block;width:9px;height:0;border-top:1px dotted #aaa;position:absolute;top:10px;left:9px;}
.ztree li span.button.center_docu:before {content:"";display:block;width:0;height:25px;border-left:1px dotted #aaa;position:absolute;top:-3px;left:9px;}
.ztree li span.button.center_docu:after {content:"";display:block;width:9px;height:0;border-top:1px dotted #aaa;position:absolute;top:10px;left:9px;}
.ztree li span.button.bottom_docu:before {content:"";display:block;width:0;height:12px;border-left:1px dotted #aaa;position:absolute;top:-3px;left:9px;}
.ztree li span.button.bottom_docu:after {content:"";display:block;width:9px;height:0;border-top:1px dotted #aaa;position:absolute;top:10px;left:9px;}
.ztree li span.button:before {display:block;line-height:20px;text-align:left;padding-left:4px;color:#666;}
/* .ztree li span.button.roots_docu:before {content:"";display:block;width:18px;height:11px;border-left:1px dotted #aaa;position:absolute;top:12px;left:11px;} */
/* .ztree li span.button.roots_docu:after {content:"";display:block;width:7px;height:0;border-top:1px dotted #aaa;position:absolute;top:12px;left:11px;} */
/* .ztree li span.button.center_docu:before {content:"";display:block;width:0;height:31px;border-left:1px dotted #aaa;position:absolute;top:-5px;left:11px;} */
/* .ztree li span.button.center_docu:after {content:"";display:block;width:7px;height:0;border-top:1px dotted #aaa;position:absolute;top:12px;left:12px;} */
/* .ztree li span.button.bottom_docu:before {content:"";display:block;width:0;height:16px;border-left:1px dotted #aaa;position:absolute;top:-5px;left:11px;} */
/* .ztree li span.button.bottom_docu:after {content:"";display:block;width:7px;height:0;border-top:1px dotted #aaa;position:absolute;top:12px;left:11px;} */
.ztree li span.button:before {display:block;text-align:left;padding-left:2px;color:#666;line-height:16px;}
.ztree li span.button.root_open:before,
.ztree li span.button.roots_open:before,
.ztree li span.button.center_open:before,
.ztree li span.button.bottom_open:before,
.ztree li span.button.noline_open:before {content:"\f147";}
.ztree li span.button.noline_open:before,
.ztree li span.button.root_close:before,
.ztree li span.button.roots_close:before,
.ztree li span.button.center_close:before,
.ztree li span.button.bottom_close:before,
.ztree li span.button.noline_close:before {content:"\f196";}
.ztree li span.button.noline_close:before {content:"\f0da";position:absolute;top:1px;left:3px;transition:transform 0.3s;transform:scale(0.83333333) rotate(0deg);}
.ztree li span.button.root_open:before,
.ztree li span.button.roots_open:before,
.ztree li span.button.center_open:before,
.ztree li span.button.bottom_open:before,
.ztree li span.button.noline_open:before {transform:scale(0.83333333) rotate(90deg);}
.ztree li span.button.chk.checkbox_true_full:before,
.ztree li span.button.chk.checkbox_true_disable:before,
.ztree li span.button.chk.checkbox_true_full_focus:before {content:"\f046";}
.ztree li span.button.chk.checkbox_true_full_focus:before {content:"\f046";line-height:19px;}
.ztree li span.button.chk.checkbox_false_full:before,
.ztree li span.button.chk.checkbox_false_disable:before,
.ztree li span.button.chk.checkbox_false_full_focus:before {content:"\f096";}
.ztree li span.button.chk.checkbox_false_full_focus:before {content:"\f096";line-height:19px;}
.ztree li span.button.chk.checkbox_true_part:before,
.ztree li span.button.chk.checkbox_true_part_focus:before {content:"\f14a";}
.ztree li span.button.chk.checkbox_true_part_focus:before {content:"\f14a";line-height:19px;}
.ztree li span.button.chk.checkbox_false_part:before,
.ztree li span.button.chk.checkbox_false_part_focus:before {content:"\f096";}
.ztree li span.button.chk.checkbox_false_part_focus:before {content:"\f096";line-height:19px;}
.ztree li span.button.chk.radio_true_full:before,
.ztree li span.button.chk.radio_true_disable:before,
.ztree li span.button.chk.radio_true_full_focus:before {content:"\f05d";}
@@ -111,3 +116,8 @@ ul.ztree.zTreeDragUL {margin:0;padding:0;position:absolute;width:auto;height:aut
.ztree li span.button.chk[class$="focus"]:before {font-weight:bold;}
.ztree li span.button.chk[class$="disable"]:before {color:#aaa;}
.ztree li a.curSelectedNode, .ztree li a.tmpTargetNode_inner {height:26px;}
.skin-dark .ztree li a {color:#ddd}
.skin-dark .ztree li span.button:before {color:#aaa}
.skin-dark .ztree li a.curSelectedNode {background-color:#2975bc;color:#eee;}
.skin-dark .ztree li a.curSelectedNode span.button:before {color:#eee;}

View File

@@ -1251,7 +1251,7 @@
,showBottom: true //是否显示底部栏
,isPreview: true //是否显示值预览
,btns: ['clear', 'now', 'confirm'] //右下角显示的按钮,会按照数组顺序排列
,lang: 'cn' //语言只支持cn/en即中文和英文
,lang: window.lang || 'zh_CN' //语言只支持cn/en即中文和英文
,theme: 'default' //主题
,position: null //控件定位方式定位, 默认absolute支持fixed/absolute/static
,calendar: false //是否开启公历重要节日,仅支持中文版
@@ -1266,7 +1266,7 @@
var that = this
,options = that.config
,text = {
cn: {
zh_CN: {
weeks: ['日', '一', '二', '三', '四', '五', '六']
,time: ['时', '分', '秒']
,timeTips: '选择时间'
@@ -1303,7 +1303,7 @@
,preview: 'The selected result'
}
};
return text[options.lang] || text['cn'];
return text[options.lang] || text['zh_CN'];
};
//初始准备

View File

@@ -169,3 +169,19 @@ html #layuicss-laydate{display: none; position: absolute; width: 1989px;}
.laydate-theme-grid .laydate-year-list>li{height: 43px; line-height: 43px;}
.laydate-theme-grid .laydate-month-list>li{height: 71px; line-height: 71px;}
.skin-dark .layui-laydate,
.skin-dark .layui-laydate-hint,
.skin-dark .layui-laydate-list,
.skin-dark .layui-laydate-footer span,
.skin-dark .laydate-time-list li ol {background:#1a1a1a;border-color:#484848;color:#ddd;}
.skin-dark .layui-laydate-header {border-bottom-color:#484848;}
.skin-dark .layui-laydate-footer {border-top-color:#484848;}
.skin-dark .layui-laydate-content th {color:#9c9c9c;}
.skin-dark .layui-laydate-content td {color:#aaa;}
.skin-dark .layui-laydate-content .laydate-day-prev,
.skin-dark .layui-laydate-content .laydate-day-next {color:#5a5a5a}
.skin-dark .layui-laydate-footer span {background:transparent;}
.skin-dark .layui-laydate-content td:hover,
.skin-dark .layui-laydate-list li:hover,
.skin-dark .laydate-footer-btns span {background-color:#444;border-color:#444;color:#b5b5b5;}
.skin-dark .layui-laydate .laydate-btns-confirm {background-color:#139ce0;border-color:#139ce0;color:#fff;}

View File

@@ -749,7 +749,7 @@ Class.pt.callback = function(){
layero.find('.'+ doms[7]).on('click', cancel);
//点遮罩关闭
if(config.shadeClose){
if(config.shadeClose || config.shadeClose == undefined){
that.shadeo.on('click', function(){
layer.close(that.index);
});

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="close" width="18" height="18" preserveAspectRatio="xMidYMid meet" viewBox="0 0 1024 1024"><path fill="#666" d="m563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8L295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512L196.9 824.9A7.95 7.95 0 0 0 203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1l216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z"></path></svg>

After

Width:  |  Height:  |  Size: 560 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="full-1" width="18" height="18" preserveAspectRatio="xMidYMid meet" viewBox="0 0 1024 1024"><path d="M290 236.4l43.9-43.9a8.01 8.01 0 0 0-4.7-13.6L169 160c-5.1-.6-9.5 3.7-8.9 8.9L179 329.1c.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L370 423.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L290 236.4zm352.7 187.3c3.1 3.1 8.2 3.1 11.3 0l133.7-133.6l43.7 43.7a8.01 8.01 0 0 0 13.6-4.7L863.9 169c.6-5.1-3.7-9.5-8.9-8.9L694.8 179c-6.6.8-9.4 8.9-4.7 13.6l43.9 43.9L600.3 370a8.03 8.03 0 0 0 0 11.3l42.4 42.4zM845 694.9c-.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L654 600.3a8.03 8.03 0 0 0-11.3 0l-42.4 42.3a8.03 8.03 0 0 0 0 11.3L734 787.6l-43.9 43.9a8.01 8.01 0 0 0 4.7 13.6L855 864c5.1.6 9.5-3.7 8.9-8.9L845 694.9zm-463.7-94.6a8.03 8.03 0 0 0-11.3 0L236.3 733.9l-43.7-43.7a8.01 8.01 0 0 0-13.6 4.7L160.1 855c-.6 5.1 3.7 9.5 8.9 8.9L329.2 845c6.6-.8 9.4-8.9 4.7-13.6L290 787.6L423.7 654c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.4z" fill="#666"></path></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="full-2" width="18" height="18" preserveAspectRatio="xMidYMid meet" viewBox="0 0 1024 1024"><path d="M391 240.9c-.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L200 146.3a8.03 8.03 0 0 0-11.3 0l-42.4 42.3a8.03 8.03 0 0 0 0 11.3L280 333.6l-43.9 43.9a8.01 8.01 0 0 0 4.7 13.6L401 410c5.1.6 9.5-3.7 8.9-8.9L391 240.9zm10.1 373.2L240.8 633c-6.6.8-9.4 8.9-4.7 13.6l43.9 43.9L146.3 824a8.03 8.03 0 0 0 0 11.3l42.4 42.3c3.1 3.1 8.2 3.1 11.3 0L333.7 744l43.7 43.7A8.01 8.01 0 0 0 391 783l18.9-160.1c.6-5.1-3.7-9.4-8.8-8.8zm221.8-204.2L783.2 391c6.6-.8 9.4-8.9 4.7-13.6L744 333.6L877.7 200c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.3a8.03 8.03 0 0 0-11.3 0L690.3 279.9l-43.7-43.7a8.01 8.01 0 0 0-13.6 4.7L614.1 401c-.6 5.2 3.7 9.5 8.8 8.9zM744 690.4l43.9-43.9a8.01 8.01 0 0 0-4.7-13.6L623 614c-5.1-.6-9.5 3.7-8.9 8.9L633 783.1c.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L824 877.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L744 690.4z" fill="#666"></path></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -28,12 +28,12 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
.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)}
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}
@@ -53,14 +53,15 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
.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-setwin .layui-layer-min cite{position:absolute; width:14px; height:2px; left:0; top:50%; margin-top:-1px; background-color:#2E2D3C; cursor:pointer; _overflow:hidden;}
.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA; }
.layui-layer-setwin .layui-layer-max{background-position:-32px -40px;}
.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px;}
.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px;}
.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px;}
.layui-layer-setwin .layui-layer-close1{background-position: 1px -40px; cursor: pointer;}
.layui-layer-setwin .layui-layer-close1:hover{opacity:0.7;}
.layui-layer-setwin .layui-layer-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;}
.layui-layer-setwin .layui-layer-max{background:url(full-1.svg) center;}
.layui-layer-setwin .layui-layer-max:hover{background-size:19px;}
.layui-layer-setwin .layui-layer-maxmin{background:url(full-2.svg) center;}
.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:hover{ background-position:-180px -31px;}
@@ -98,7 +99,7 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
.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; 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-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;}
@@ -161,14 +162,14 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
/* 关闭动画 */
@-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;}
@@ -181,7 +182,11 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
.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;}
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%;}
.skin-dark .layui-layer {background:#1a1a1a;color:#ddd;}
.skin-dark .layui-layer-title {background:#262626;border-bottom-color:#484848;color:#bcbcbc;}
.skin-dark .layui-layer-btn a {background-color:#444;border-color:#444;color:#b5b5b5;}

View File

@@ -48,46 +48,3 @@ JeeSite CMS 内容管理模块
## 在线文档
* <http://docs.jeesite.com>
## 授权协议声明
1. 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款。
2. 不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。
3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议、版权声明和其他原作者
规定需要包含的说明(请尊重原作者的著作权,不要删除或修改文件中的`Copyright``@author`信息)
更不要,全局替换源代码中的 jeesite 或 ThinkGem 等字样,否则你将违反本协议条款承担责任。
4. 您若套用本软件的一些代码或功能参考,请保留源文件中的版权和作者,需要在您的软件介绍明显位置
说明出处,举例:本软件基于 JeeSite 快速开发平台并附带链接http://jeesite.com
5. 任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
6. 如果你对本软件有改进,希望可以贡献给我们,共同进步。
7. 本项目已申请软件著作权,请尊重开源,感谢阅读。
8. 本版本无用户数限制,无在线人数限制。
## 技术服务与支持
* 没有资金的支撑就很难得到发展,特别是一个好的产品,如果 JeeSite 帮助了您,请为我们点赞。支持我们,您可以得到一些回报,有了这些我们会把公益事业做的更好,回报社区和社会,请给我们一些动力吧,在此非常感谢已支持我们的朋友!
* **联系我们**:请访问技术支持服务页面:<https://jeesite.com/docs/support/>
## 今后如何升级?
尽量不修改 web 项目以外的源码项目,如 jeesite-common、jeesite-modele-core如果修改了请 Pull Requests 上来,否则代码与官方不同步,可能会将对你的日后升级增加难度。
如果您修改了依赖模块代码,也没关系,这时你需要利用 Git 版本控制工具,与官方仓库代码进行同步,合并代码即可。
每个版本升级,我们都会附带详细更新日志:<https://jeesite.com/docs/upgrade/>
在这里,你可以看到 JeeSite 新增哪些新功能和改进,在每个版本下都有对应升级方法。
如果跨版本升级,可以将版本号直接修改为最新版本,然后去看每个版本的升级方法,修改对应业务。
# Git 全局设置技巧
```
1、提交检出均不转换换行符
git config --global core.autocrlf false
2、拒绝提交包含混合换行符的文件
git config --global core.safecrlf true
```

View File

@@ -1257,7 +1257,7 @@
</word>
<word>
<id>63772c051414452204e91e8d0dabd1dbfd640326</id>
<length>1000</length>
<length>767</length>
<decimal>null</decimal>
<array>false</array>
<array_dimension>null</array_dimension>
@@ -1897,7 +1897,7 @@
</word>
<word>
<id>8f1564e5646071de508d4325f3cc7f62bdeede16</id>
<length>1000</length>
<length>767</length>
<decimal>null</decimal>
<array>false</array>
<array_dimension>null</array_dimension>
@@ -1929,7 +1929,7 @@
</word>
<word>
<id>b0bd388c14e5b2bbab9590f5247961a7edd9eb3b</id>
<length>1000</length>
<length>767</length>
<decimal>null</decimal>
<array>false</array>
<array_dimension>null</array_dimension>

View File

@@ -88,12 +88,12 @@ CREATE TABLE js_cms_category
(
category_code varchar(64) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names vargraphic(1000) NOT NULL,
tree_names vargraphic(767) NOT NULL,
category_name vargraphic(100) NOT NULL,
site_code varchar(64) NOT NULL,
module_type varchar(50),

View File

@@ -88,12 +88,12 @@ CREATE TABLE js_cms_category
(
category_code varchar(64) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names varchar(1000) NOT NULL,
tree_names varchar(767) NOT NULL,
category_name varchar(100) NOT NULL,
site_code varchar(64) NOT NULL,
module_type varchar(50),

View File

@@ -88,12 +88,12 @@ CREATE TABLE [js_cms_category]
(
[category_code] varchar(64) NOT NULL,
[parent_code] varchar(64) NOT NULL,
[parent_codes] varchar(1000) NOT NULL,
[parent_codes] varchar(767) NOT NULL,
[tree_sort] decimal(10) NOT NULL,
[tree_sorts] varchar(1000) NOT NULL,
[tree_sorts] varchar(767) NOT NULL,
[tree_leaf] char(1) NOT NULL,
[tree_level] decimal(4) NOT NULL,
[tree_names] nvarchar(1000) NOT NULL,
[tree_names] nvarchar(767) NOT NULL,
[category_name] nvarchar(100) NOT NULL,
[site_code] varchar(64) NOT NULL,
[module_type] varchar(50),

View File

@@ -89,12 +89,12 @@ CREATE TABLE js_cms_category
(
category_code varchar(64) NOT NULL COMMENT '栏目编码',
parent_code varchar(64) NOT NULL COMMENT '父级编号',
parent_codes varchar(1000) NOT NULL COMMENT '所有父级编号',
parent_codes varchar(767) NOT NULL COMMENT '所有父级编号',
tree_sort decimal(10) NOT NULL COMMENT '排序号(升序)',
tree_sorts varchar(1000) NOT NULL COMMENT '所有排序号',
tree_sorts varchar(767) NOT NULL COMMENT '所有排序号',
tree_leaf char(1) NOT NULL COMMENT '是否最末级',
tree_level decimal(4) NOT NULL COMMENT '层次级别',
tree_names varchar(1000) NOT NULL COMMENT '全节点名',
tree_names varchar(767) NOT NULL COMMENT '全节点名',
category_name varchar(100) NOT NULL COMMENT '栏目名称',
site_code varchar(64) NOT NULL COMMENT '站点编码',
module_type varchar(50) COMMENT '模块类型',

View File

@@ -88,12 +88,12 @@ CREATE TABLE js_cms_category
(
category_code varchar2(64) NOT NULL,
parent_code varchar2(64) NOT NULL,
parent_codes varchar2(1000) NOT NULL,
parent_codes varchar2(767) NOT NULL,
tree_sort number(10) NOT NULL,
tree_sorts varchar2(1000) NOT NULL,
tree_sorts varchar2(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level number(4) NOT NULL,
tree_names nvarchar2(1000) NOT NULL,
tree_names nvarchar2(767) NOT NULL,
category_name nvarchar2(100) NOT NULL,
site_code varchar2(64) NOT NULL,
module_type varchar2(50),

View File

@@ -88,12 +88,12 @@ CREATE TABLE js_cms_category
(
category_code varchar(64) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names varchar(1000) NOT NULL,
tree_names varchar(767) NOT NULL,
category_name varchar(100) NOT NULL,
site_code varchar(64) NOT NULL,
module_type varchar(50),

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId>
<version>4.3.3-SNAPSHOT</version>
<version>4.6.2-SNAPSHOT</version>
<relativePath>../../parent/pom.xml</relativePath>
</parent>
@@ -16,10 +16,6 @@
<url>http://jeesite.com</url>
<inceptionYear>2013-Now</inceptionYear>
<properties>
</properties>
<dependencies>
<dependency>
@@ -30,12 +26,6 @@
</dependencies>
<build>
<plugins>
</plugins>
</build>
<developers>
<developer>
<id>thinkgem</id>

View File

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

View File

@@ -4,13 +4,6 @@
*/
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;
@@ -20,6 +13,11 @@ 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
@@ -45,7 +43,12 @@ import com.jeesite.modules.cms.utils.CmsUtils;
@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(includeEntity = DataEntity.class),
@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 = BaseEntity.class),
}, joinTable = {
@JoinTable(entity = Category.class, alias = "c",
@@ -83,12 +86,13 @@ 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;
@@ -223,8 +227,6 @@ public class Article extends DataEntity<Article> {
this.hits = hits;
}
public Integer getHitsPlus() {
return hitsPlus;
}
@@ -275,6 +277,18 @@ 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;
}
@@ -291,20 +305,6 @@ 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

@@ -4,15 +4,6 @@
*/
package com.jeesite.modules.cms.service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.jeesite.common.collect.ListUtils;
import com.jeesite.common.config.Global;
import com.jeesite.common.entity.Page;
@@ -27,6 +18,19 @@ import com.jeesite.modules.cms.entity.Category;
import com.jeesite.modules.cms.utils.CmsUtils;
import com.jeesite.modules.file.utils.FileUploadUtils;
import com.jeesite.modules.sys.utils.UserUtils;
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.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* 文章表Service
@@ -34,11 +38,14 @@ import com.jeesite.modules.sys.utils.UserUtils;
* @version 2020-7-24
*/
@Service
@Transactional(readOnly = true)
public class ArticleService extends CrudService<ArticleDao, Article> {
@Autowired
private ArticleDataDao articleDataDao;
private static ExecutorService updateExpiredWeightThreadPool = new ThreadPoolExecutor(5, 20,
60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(),
new DefaultThreadFactory("cms-update-expired-weight"));
/**
* 获取单条数据
@@ -72,19 +79,17 @@ public class ArticleService extends CrudService<ArticleDao, Article> {
/**
* 查询分页数据
* @param article 查询条件
* @param article.page 分页对象
* @param article page 分页对象
* @return
*/
@Override
public Page<Article> findPage(Article article) {
Thread thread = new Thread("cms-update-expired-weight") {
updateExpiredWeightThreadPool.submit(new Runnable() {
@Override
public void run() {
updateExpiredWeight(article);
}
};
thread.setDaemon(true);
thread.start();
});
return super.findPage(article);
}
@@ -112,7 +117,7 @@ public class ArticleService extends CrudService<ArticleDao, Article> {
* @param article
* @author ThinkGem
*/
@Transactional(readOnly = false)
@Transactional
public void updateExpiredWeight(Article article) {
// 更新过期的权重间隔为“6”个小时
Date updateExpiredWeightDate = CmsUtils.getCache("updateExpiredWeightDateByArticle");
@@ -129,7 +134,7 @@ public class ArticleService extends CrudService<ArticleDao, Article> {
* @param article
*/
@Override
@Transactional(readOnly = false)
@Transactional
public void save(Article article) {
Global.assertDemoMode();
// 设置内容状态
@@ -169,7 +174,7 @@ public class ArticleService extends CrudService<ArticleDao, Article> {
* @param article
*/
@Override
@Transactional(readOnly = false)
@Transactional
public void updateStatus(Article article) {
super.updateStatus(article);
}
@@ -177,7 +182,7 @@ public class ArticleService extends CrudService<ArticleDao, Article> {
/**
* 获取文章获取文章并点击数加一
*/
@Transactional(readOnly = false)
@Transactional
public void updateHitsAddOne(String id) {
dao.updateHitsAddOne(id);
}
@@ -187,7 +192,7 @@ public class ArticleService extends CrudService<ArticleDao, Article> {
* @param article
*/
@Override
@Transactional(readOnly = false)
@Transactional
public void delete(Article article) {
super.delete(article);
}

View File

@@ -4,18 +4,17 @@
*/
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
@@ -23,7 +22,6 @@ import com.jeesite.modules.file.utils.FileUploadUtils;
* @version 2020-7-24
*/
@Service
@Transactional(readOnly = true)
public class CategoryService extends TreeService<CategoryDao, Category> {
/**
@@ -59,7 +57,7 @@ public class CategoryService extends TreeService<CategoryDao, Category> {
* @param category
*/
@Override
@Transactional(readOnly = false)
@Transactional
public void save(Category category) {
if (StringUtils.isNotBlank(category.getViewConfig())){
category.setViewConfig(StringEscapeUtils.unescapeHtml4(category.getViewConfig()));
@@ -85,7 +83,7 @@ public class CategoryService extends TreeService<CategoryDao, Category> {
* @param category
*/
@Override
@Transactional(readOnly = false)
@Transactional
public void updateStatus(Category category) {
super.updateStatus(category);
}
@@ -95,7 +93,7 @@ public class CategoryService extends TreeService<CategoryDao, Category> {
* @param category
*/
@Override
@Transactional(readOnly = false)
@Transactional
public void delete(Category category) {
super.delete(category);
}

View File

@@ -19,7 +19,6 @@ import com.jeesite.modules.file.utils.FileUploadUtils;
* @version 2020-7-24
*/
@Service
@Transactional(readOnly=true)
public class CommentService extends CrudService<CommentDao, Comment> {
/**
@@ -48,7 +47,7 @@ public class CommentService extends CrudService<CommentDao, Comment> {
* @param comment
*/
@Override
@Transactional(readOnly=false)
@Transactional
public void save(Comment comment) {
super.save(comment);
// 保存上传图片
@@ -62,7 +61,7 @@ public class CommentService extends CrudService<CommentDao, Comment> {
* @param comment
*/
@Override
@Transactional(readOnly=false)
@Transactional
public void updateStatus(Comment comment) {
super.updateStatus(comment);
}
@@ -72,7 +71,7 @@ public class CommentService extends CrudService<CommentDao, Comment> {
* @param comment
*/
@Override
@Transactional(readOnly=false)
@Transactional
public void delete(Comment comment) {
super.delete(comment);
}

View File

@@ -23,7 +23,6 @@ import com.jeesite.modules.sys.entity.DictData;
* @version 2020-7-7
*/
@Service
@Transactional(readOnly = true)
public class FileTempleteService {
// public List<String> getTempleteContent(String prefix) throws IOException {

View File

@@ -19,7 +19,6 @@ import com.jeesite.modules.file.utils.FileUploadUtils;
* @version 2020-7-24
*/
@Service
@Transactional(readOnly=true)
public class ReportService extends CrudService<ReportDao, Report> {
/**
@@ -48,7 +47,7 @@ public class ReportService extends CrudService<ReportDao, Report> {
* @param report
*/
@Override
@Transactional(readOnly=false)
@Transactional
public void save(Report report) {
super.save(report);
// 保存上传图片
@@ -62,7 +61,7 @@ public class ReportService extends CrudService<ReportDao, Report> {
* @param report
*/
@Override
@Transactional(readOnly=false)
@Transactional
public void updateStatus(Report report) {
super.updateStatus(report);
}
@@ -72,7 +71,7 @@ public class ReportService extends CrudService<ReportDao, Report> {
* @param report
*/
@Override
@Transactional(readOnly=false)
@Transactional
public void delete(Report report) {
super.delete(report);
}

View File

@@ -20,7 +20,6 @@ import com.jeesite.modules.file.utils.FileUploadUtils;
* @version 2020-7-24
*/
@Service
@Transactional(readOnly = true)
public class SiteService extends CrudService<SiteDao, Site> {
/**
@@ -49,7 +48,7 @@ public class SiteService extends CrudService<SiteDao, Site> {
* @param site
*/
@Override
@Transactional(readOnly = false)
@Transactional
public void save(Site site) {
super.save(site);
CmsUtils.removeCache("siteList");
@@ -62,7 +61,7 @@ public class SiteService extends CrudService<SiteDao, Site> {
* @param site
*/
@Override
@Transactional(readOnly = false)
@Transactional
public void updateStatus(Site site) {
super.updateStatus(site);
}
@@ -72,7 +71,7 @@ public class SiteService extends CrudService<SiteDao, Site> {
* @param site
*/
@Override
@Transactional(readOnly = false)
@Transactional
public void delete(Site site) {
super.delete(site);
}
@@ -82,7 +81,7 @@ public class SiteService extends CrudService<SiteDao, Site> {
* @param site
* @param isRe
*/
@Transactional(readOnly = false)
@Transactional
public void delete(Site site, Boolean isRe) {
site.setStatus(isRe != null && isRe ? Site.STATUS_NORMAL : Site.STATUS_DELETE);
super.delete(site);

View File

@@ -18,7 +18,6 @@ import com.jeesite.modules.cms.entity.Tag;
* @version 2020-7-24
*/
@Service
@Transactional(readOnly=true)
public class TagService extends CrudService<TagDao, Tag> {
/**
@@ -47,7 +46,7 @@ public class TagService extends CrudService<TagDao, Tag> {
* @param tag
*/
@Override
@Transactional(readOnly=false)
@Transactional
public void save(Tag tag) {
super.save(tag);
}
@@ -57,7 +56,7 @@ public class TagService extends CrudService<TagDao, Tag> {
* @param tag
*/
@Override
@Transactional(readOnly=false)
@Transactional
public void updateStatus(Tag tag) {
super.updateStatus(tag);
}
@@ -67,7 +66,7 @@ public class TagService extends CrudService<TagDao, Tag> {
* @param tag
*/
@Override
@Transactional(readOnly=false)
@Transactional
public void delete(Tag tag) {
super.delete(tag);
}

View File

@@ -19,7 +19,6 @@ import com.jeesite.modules.file.utils.FileUploadUtils;
* @version 2020-7-24
*/
@Service
@Transactional(readOnly=true)
public class VisitLogService extends CrudService<VisitLogDao, VisitLog> {
/**
@@ -48,7 +47,7 @@ public class VisitLogService extends CrudService<VisitLogDao, VisitLog> {
* @param visitLog
*/
@Override
@Transactional(readOnly=false)
@Transactional
public void save(VisitLog visitLog) {
super.save(visitLog);
// 保存上传图片
@@ -62,7 +61,7 @@ public class VisitLogService extends CrudService<VisitLogDao, VisitLog> {
* @param visitLog
*/
@Override
@Transactional(readOnly=false)
@Transactional
public void updateStatus(VisitLog visitLog) {
super.updateStatus(visitLog);
}
@@ -72,7 +71,7 @@ public class VisitLogService extends CrudService<VisitLogDao, VisitLog> {
* @param visitLog
*/
@Override
@Transactional(readOnly=false)
@Transactional
public void delete(VisitLog visitLog) {
super.delete(visitLog);
}

View File

@@ -4,14 +4,6 @@
*/
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;
@@ -26,6 +18,12 @@ 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
@@ -191,7 +189,7 @@ public class CmsUtils {
* @param siteCode 站点编号
* @param categoryCode 分类编号
* @param number 获取数目
* @param param 预留参数,例: key1:'value1', key2:'value2' ...<br>
* @param params 预留参数,例: key1:'value1', key2:'value2' ...<br>
* posid : 推荐位1首页焦点图2栏目页文章推荐<br>
* image : 文章图片1有图片的文章<br>
* isQueryArticleData : 是否查询文章详情信息,查询会影响效率<br>

View File

@@ -4,22 +4,6 @@
*/
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;
@@ -33,6 +17,20 @@ 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,20 +4,6 @@
*/
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;
@@ -33,6 +19,20 @@ 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,12 +252,12 @@ public class CategoryController extends BaseController {
* @param isShowCode 是否显示编码true or 1显示在左侧2显示在右侧false or null不显示
* @return
*/
@RequiresPermissions("cms:category:view")
@RequiresPermissions(value = {"cms:category:view", "cms:article:view"}, logical = Logical.OR)
@RequestMapping(value = "treeData")
@ResponseBody
public List<Map<String, Object>> treeData(String siteCode, String module, String extCode, Boolean isAll, String isShowCode) {
public List<Map<String, Object>> treeData(String siteCode, String module, String excludeCode, Boolean isAll, String isShowCode) {
List<Map<String, Object>> mapList = ListUtils.newArrayList();
List<Category> categoryList = null;
List<Category> list = null;
Category category = new Category();
// 站点条件
if (StringUtils.isNotBlank(siteCode)) {
@@ -273,31 +273,35 @@ public class CategoryController extends BaseController {
if (!(isAll != null && isAll)) {
categoryService.addDataScopeFilter(category);
}
categoryList = categoryService.findList(category);
// 处理转换数据并返回ztree支持的格式
for (int i = 0; i < categoryList.size(); i++) {
Category e = categoryList.get(i);
if (extCode == null || (extCode != null && !extCode.equals(e.getId()) && e.getParentCodes().indexOf("," + extCode + ",") == -1)) {
Map<String, Object> map = MapUtils.newHashMap();
map.put("id", e.getId());
map.put("pId", e.getParent() != null ? e.getParent().getId() : 0);
if ("true".equals(isShowCode) || "1".equals(isShowCode)) {
map.put("name", "(" + e.getCategoryCode() + ")" + e.getCategoryName());
} else if ("2".equals(isShowCode)) {
map.put("name", e.getCategoryName() + "(" + e.getCategoryCode() + ")");
} else {
map.put("name", e.getCategoryName());
list = categoryService.findList(category);
for (int i = 0; i < list.size(); i++) {
Category e = list.get(i);
// 过滤非正常的数据
if (!Category.STATUS_NORMAL.equals(e.getStatus())){
continue;
}
// 过滤被排除的编码(包括所有子级)
if (StringUtils.isNotBlank(excludeCode)){
if (e.getId().equals(excludeCode)){
continue;
}
map.put("title", e.getCategoryName() + " [" + DictUtils.getDictLabel(e.getModuleType(), "cms_module", "公共模型") + "]");
map.put("module", e.getModuleType());
map.put("showModes", e.getShowModes());
// 是否仅获取可管理的栏目,指定 true 或 false
String adminUrl = e.getAdminUrl();
if (!"none".equals(adminUrl)) {
map.put("adminUrl", "".equals(adminUrl) ? "none" : adminUrl);
mapList.add(map);
if (e.getParentCodes().contains("," + excludeCode + ",")){
continue;
}
}
Map<String, Object> map = MapUtils.newHashMap();
map.put("id", e.getId());
map.put("pId", e.getParent() != null ? e.getParent().getId() : 0);
map.put("name", StringUtils.getTreeNodeName(isShowCode, e.getCategoryCode(), e.getCategoryName()));
map.put("title", e.getCategoryName() + " [" + DictUtils.getDictLabel(e.getModuleType(), "cms_module", "公共模型") + "]");
map.put("module", e.getModuleType());
map.put("showModes", e.getShowModes());
// 是否仅获取可管理的栏目,指定 true 或 false
String adminUrl = e.getAdminUrl();
if (!"none".equals(adminUrl)) {
map.put("adminUrl", "".equals(adminUrl) ? "none" : adminUrl);
mapList.add(map);
}
}
return mapList;
}

View File

@@ -4,37 +4,27 @@
*/
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.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.entity.*;
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
@@ -310,8 +300,8 @@ public class FrontController extends BaseController {
/**
* 内容评论
*/
@RequestMapping(value = "comment", method = RequestMethod.GET)
public String comment(Comment comment, String theme, HttpServletRequest request, HttpServletResponse response,
@RequestMapping(value = "comment-{theme}", method = RequestMethod.GET)
public String comment(Comment comment, @PathVariable String theme, HttpServletRequest request, HttpServletResponse response,
Model model) {
Page<Comment> page = new Page<Comment>(request, response);
Comment c = new Comment();

View File

@@ -88,12 +88,12 @@ CREATE TABLE ${_prefix}cms_category
(
category_code varchar(64) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names vargraphic(1000) NOT NULL,
tree_names vargraphic(767) NOT NULL,
category_name vargraphic(100) NOT NULL,
site_code varchar(64) NOT NULL,
module_type varchar(50),

View File

@@ -88,12 +88,12 @@ CREATE TABLE [${_prefix}cms_category]
(
[category_code] varchar(64) NOT NULL,
[parent_code] varchar(64) NOT NULL,
[parent_codes] varchar(1000) NOT NULL,
[parent_codes] varchar(767) NOT NULL,
[tree_sort] decimal(10) NOT NULL,
[tree_sorts] varchar(1000) NOT NULL,
[tree_sorts] varchar(767) NOT NULL,
[tree_leaf] char(1) NOT NULL,
[tree_level] decimal(4) NOT NULL,
[tree_names] nvarchar(1000) NOT NULL,
[tree_names] nvarchar(767) NOT NULL,
[category_name] nvarchar(100) NOT NULL,
[site_code] varchar(64) NOT NULL,
[module_type] varchar(50),

View File

@@ -89,12 +89,12 @@ CREATE TABLE ${_prefix}cms_category
(
category_code varchar(64) NOT NULL COMMENT '栏目编码',
parent_code varchar(64) NOT NULL COMMENT '父级编号',
parent_codes varchar(1000) NOT NULL COMMENT '所有父级编号',
parent_codes varchar(767) NOT NULL COMMENT '所有父级编号',
tree_sort decimal(10) NOT NULL COMMENT '排序号(升序)',
tree_sorts varchar(1000) NOT NULL COMMENT '所有排序号',
tree_sorts varchar(767) NOT NULL COMMENT '所有排序号',
tree_leaf char(1) NOT NULL COMMENT '是否最末级',
tree_level decimal(4) NOT NULL COMMENT '层次级别',
tree_names varchar(1000) NOT NULL COMMENT '全节点名',
tree_names varchar(767) NOT NULL COMMENT '全节点名',
category_name varchar(100) NOT NULL COMMENT '栏目名称',
site_code varchar(64) NOT NULL COMMENT '站点编码',
module_type varchar(50) COMMENT '模块类型',

View File

@@ -88,12 +88,12 @@ CREATE TABLE ${_prefix}cms_category
(
category_code varchar2(64) NOT NULL,
parent_code varchar2(64) NOT NULL,
parent_codes varchar2(1000) NOT NULL,
parent_codes varchar2(767) NOT NULL,
tree_sort number(10) NOT NULL,
tree_sorts varchar2(1000) NOT NULL,
tree_sorts varchar2(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level number(4) NOT NULL,
tree_names nvarchar2(1000) NOT NULL,
tree_names nvarchar2(767) NOT NULL,
category_name nvarchar2(100) NOT NULL,
site_code varchar2(64) NOT NULL,
module_type varchar2(50),

View File

@@ -88,12 +88,12 @@ CREATE TABLE ${_prefix}cms_category
(
category_code varchar(64) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names varchar(1000) NOT NULL,
tree_names varchar(767) NOT NULL,
category_name varchar(100) NOT NULL,
site_code varchar(64) NOT NULL,
module_type varchar(50),

View File

@@ -10,4 +10,10 @@
4.3.0
4.3.1
4.3.2
4.3.3
4.3.3
4.4.0
4.4.1
4.5.0
4.6.0
4.6.1
4.6.2

View File

@@ -2,15 +2,23 @@
<!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="CmsArticle">
<!-- 查询数据 -->
<select id="findList" resultType="Article">
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:14px;}
body{padding-top:50px;font-size:15px;background:#f7f8f9;}
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,20 +51,34 @@ footer p{clear:left;margin-bottom:0}
#banner{margin-bottom:2em;text-align:center}
}
.jumbotron {background:#f1f1f1;margin:48px auto;}
.panel-title small .more {padding-top:4px;}
.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}
.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-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;}
.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;}
.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

@@ -77,12 +77,11 @@
<label class="control-label col-sm-4" title="${text('数值越大排序越靠前,可设置权重过期时间')}。">
${text('权重/排序')} <i class="fa icon-question"></i></label>
<div class="col-sm-8">
<div class="form-inline">
<div class="form-inline m0">
<#form:input path="weight" class="form-control width-90 digits" maxlength="10"/> &nbsp;
<#form:checkbox id="weightTop" label="${text('置顶')}" value="${article.weight==9999 ?'1' : ''}"
class="form-control" style="vertical-align:middle;"/>
</div>
<span class="help-block">&nbsp;</span>
</div>
</div>
</div>
@@ -144,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">
@@ -163,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 Wdate"
dataFormat="datetime" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm',isShowClear:false});"/>
<#form:input path="createDate" readonly="true" maxlength="20" class="form-control laydate"
dataFormat="datetime" data-type="datetime" data-format="yyyy-MM-dd HH:mm"/>
</div>
</div>
</div>
@@ -209,7 +208,7 @@
</div>
</div>
</div>
<#form:extend collapsed="true" />
<#form:extend collapsed="true" pathPrefix="articleData"/>
<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">${text('重置')}</button>
<button type="reset" class="btn btn-default btn-sm isQuick">${text('重置')}</button>
</div>
</#form:form>
<table id="dataGrid"></table>
@@ -70,7 +70,7 @@ $('#dataGrid').dataGrid({
// {header:'${text("备注信息")}', name:'remarks', index:'a.remarks', width:150, align:"left"},
{header:'${text("操作")}', name:'actions', width:150, formatter: function(val, obj, row, act){
var actions = [];
<% if(hasPermi('cms:article:edit')){ %>
//<% if(hasPermi('cms:article:edit')){ %>
actions.push('<a href="${ctx}/cms/article/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/article/disable?id='+row.id+'" class="btnList" title="${text("停用文章")}" data-confirm="${text("确认要停用该文章吗?")}"><i class="glyphicon glyphicon-ban-circle"></i></a>&nbsp;');
@@ -82,7 +82,7 @@ $('#dataGrid').dataGrid({
if (row.status == Global.STATUS_NORMAL){
actions.push('<a href="${ctxFront}/view-'+row.category.categoryCode+'-'+row.id+'" target="_blank" title="${text("预览文章")}"><i class="fa fa-globe"></i></a>&nbsp;');
}
<% } %>
//<% } %>
return actions.join('');
}}
],

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">${text('重置')}</button>
<button type="reset" class="btn btn-default btn-sm isQuick">${text('重置')}</button>
</div>
</#form:form>
<table id="dataGrid"></table>
@@ -87,7 +87,7 @@ $('#dataGrid').dataGrid({
}},
{header:'${text("操作")}', name:'actions', width:150, formatter: function(val, obj, row, act){
var actions = [];
<% if(hasPermi('cms:category:edit')){ %>
//<% if(hasPermi('cms:category:edit')){ %>
actions.push('<a href="${ctx}/cms/category/form?categoryCode='+row.categoryCode+'" class="btnList" title="${text("编辑栏目表")}"><i class="fa fa-pencil"></i></a>&nbsp;');
if (row.status == Global.STATUS_NORMAL){
actions.push('<a href="${ctx}/cms/category/disable?categoryCode='+row.categoryCode+'" class="btnList" title="${text("停用栏目表")}" data-confirm="${text("确认要停用该栏目表吗?")}"><i class="glyphicon glyphicon-ban-circle"></i></a>&nbsp;');
@@ -100,7 +100,7 @@ $('#dataGrid').dataGrid({
if (row.status == Global.STATUS_NORMAL){
actions.push('<a href="${ctxFront}/list-'+row.categoryCode+'" target="_blank" title="${text("访问栏目")}"><i class="fa fa-globe"></i></a>&nbsp;');
}
<% } %>
//<% } %>
return actions.join('');
}}
],

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">${text('重置')}</button>
<button type="reset" class="btn btn-default btn-sm isQuick">${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

@@ -13,43 +13,43 @@
</div>
</div>
<div class="box-body">
<#form:form id="searchForm" model="${report}" action="${ctx}/cms/report/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">
<label class="control-label">${text('举报来源')}</label>
<div class="control-inline">
<#form:input path="reportSource" maxlength="1" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('举报内容')}</label>
<div class="control-inline">
<#form:input path="reportContent" maxlength="500" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('举报的URL')}</label>
<div class="control-inline">
<#form:input path="reportUrl" maxlength="1000" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('举报类型')}</label>
<div class="control-inline">
<#form:input path="reportType" maxlength="1" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('举报原因')}</label>
<div class="control-inline">
<#form:input path="reportCause" maxlength="500" class="form-control width-120"/>
</div>
</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">${text('重置')}</button>
</div>
</#form:form>
<#form:form id="searchForm" model="${report}" action="${ctx}/cms/report/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">
<label class="control-label">${text('举报来源')}</label>
<div class="control-inline">
<#form:input path="reportSource" maxlength="1" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('举报内容')}</label>
<div class="control-inline">
<#form:input path="reportContent" maxlength="500" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('举报的URL')}</label>
<div class="control-inline">
<#form:input path="reportUrl" maxlength="1000" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('举报类型')}</label>
<div class="control-inline">
<#form:input path="reportType" maxlength="1" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('举报原因')}</label>
<div class="control-inline">
<#form:input path="reportCause" maxlength="500" class="form-control width-120"/>
</div>
</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>
</div>
</#form:form>
<table id="dataGrid"></table>
<div id="dataGridPage"></div>
</div>
@@ -70,7 +70,7 @@ $('#dataGrid').dataGrid({
{header:'${text('举报原因')}', name:'reportCause', index:'a.report_cause', width:150, align:"left"},
{header:'${text('操作')}', name:'actions', width:120, formatter: function(val, obj, row, act){
var actions = [];
<% if(hasPermi('cms:report:edit')){ %>
//<% if(hasPermi('cms:report:edit')){ %>
actions.push('<a href="${ctx}/cms/report/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/report/disable?id='+row.id+'" class="btnList" title="${text('停用内容举报表')}" data-confirm="${text('确认要停用该内容举报表吗')}"><i class="glyphicon glyphicon-ban-circle"></i></a>&nbsp;');
@@ -79,7 +79,7 @@ $('#dataGrid').dataGrid({
actions.push('<a href="${ctx}/cms/report/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/report/delete?id='+row.id+'" class="btnList" title="${text('删除内容举报表')}" data-confirm="${text('确认要删除该内容举报表吗')}"><i class="fa fa-trash-o"></i></a>&nbsp;');
<% } %>
//<% } %>
return actions.join('');
}}
],

View File

@@ -13,37 +13,37 @@
</div>
</div>
<div class="box-body">
<#form:form id="searchForm" model="${site}" action="${ctx}/cms/site/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">
<label class="control-label">${text('站点名称')}</label>
<div class="control-inline">
<#form:input path="siteName" maxlength="100" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('站点标题')}</label>
<div class="control-inline">
<#form:input path="title" maxlength="100" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('站点域名')}</label>
<div class="control-inline">
<#form:input path="domain" maxlength="500" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('状态')}</label>
<div class="control-inline width-90">
<#form:select path="status" dictType="sys_search_status" blankOption="true" class="form-control"/>
</div>
</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">${text('重置')}</button>
</div>
</#form:form>
<#form:form id="searchForm" model="${site}" action="${ctx}/cms/site/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">
<label class="control-label">${text('站点名称')}</label>
<div class="control-inline">
<#form:input path="siteName" maxlength="100" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('站点标题')}</label>
<div class="control-inline">
<#form:input path="title" maxlength="100" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('站点域名')}</label>
<div class="control-inline">
<#form:input path="domain" maxlength="500" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('状态')}</label>
<div class="control-inline width-90">
<#form:select path="status" dictType="sys_search_status" blankOption="true" class="form-control"/>
</div>
</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>
</div>
</#form:form>
<table id="dataGrid"></table>
<div id="dataGridPage"></div>
</div>
@@ -69,7 +69,7 @@ $('#dataGrid').dataGrid({
{header:'${text("创建时间")}', name:'createDate', index:'a.create_date', width:150, align:"center"},
{header:'${text("操作")}', name:'actions', width:150, formatter: function(val, obj, row, act){
var actions = [];
<% if(hasPermi('cms:site:edit')){ %>
//<% if(hasPermi('cms:site:edit')){ %>
actions.push('<a href="${ctx}/cms/site/form?siteCode='+row.siteCode+'" class="btnList" title="${text("编辑站点")}"><i class="fa fa-pencil"></i></a>&nbsp;');
if (row.status == Global.STATUS_NORMAL){
actions.push('<a href="${ctx}/cms/site/disable?siteCode='+row.siteCode+'" class="btnList" title="${text("停用站点")}" data-confirm="${text("确认要停用该站点吗?")}"><i class="glyphicon glyphicon-ban-circle"></i></a>&nbsp;');
@@ -81,7 +81,7 @@ $('#dataGrid').dataGrid({
if (row.status == Global.STATUS_NORMAL){
actions.push('<a href="${ctxFront}/index-'+row.siteCode+'" target="_blank" title="${text("访问站点")}"><i class="fa fa-globe"></i></a>&nbsp;');
}
<% } %>
//<% } %>
return actions.join('');
}}
],

View File

@@ -13,50 +13,50 @@
</div>
</div>
<div class="box-body">
<#form:form id="searchForm" model="${visitLog}" action="${ctx}/cms/visitLog/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">
<label class="control-label">${text('请求的URL地址')}</label>
<div class="control-inline">
<#form:input path="requestUrl" maxlength="1000" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('受访域名')}</label>
<div class="control-inline">
<#form:input path="requestUrlHost" maxlength="128" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('来源页面/上一个页面')}</label>
<div class="control-inline">
<#form:input path="sourceReferer" maxlength="1000" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('来源域名')}</label>
<div class="control-inline">
<#form:input path="sourceRefererHost" maxlength="128" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('搜索的关键词')}</label>
<div class="control-inline">
<#form:input path="searchWord" maxlength="200" class="form-control width-120"/>
</div>
</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">${text('重置')}</button>
</div>
</#form:form>
<#form:form id="searchForm" model="${visitLog}" action="${ctx}/cms/visitLog/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">
<label class="control-label">${text('请求的URL地址')}</label>
<div class="control-inline">
<#form:input path="requestUrl" maxlength="1000" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('受访域名')}</label>
<div class="control-inline">
<#form:input path="requestUrlHost" maxlength="128" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('来源页面/上一个页面')}</label>
<div class="control-inline">
<#form:input path="sourceReferer" maxlength="1000" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('来源域名')}</label>
<div class="control-inline">
<#form:input path="sourceRefererHost" maxlength="128" class="form-control width-120"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('搜索的关键词')}</label>
<div class="control-inline">
<#form:input path="searchWord" maxlength="200" class="form-control width-120"/>
</div>
</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>
</div>
</#form:form>
<table id="dataGrid"></table>
<div id="dataGridPage"></div>
</div>
@@ -91,7 +91,7 @@ $('#dataGrid').dataGrid({
{header:'${text('操作')}', name:'actions', width:120, formatter: function(val, obj, row, act){
var actions = [];
<% if(hasPermi('cms:visitLog:edit')){ %>
//<% if(hasPermi('cms:visitLog:edit')){ %>
actions.push('<a href="${ctx}/cms/visitLog/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/visitLog/disable?id='+row.id+'" class="btnList" title="${text('停用访问日志表')}" data-confirm="${text('确认要停用该访问日志表吗')}"><i class="glyphicon glyphicon-ban-circle"></i></a>&nbsp;');
@@ -100,7 +100,7 @@ $('#dataGrid').dataGrid({
actions.push('<a href="${ctx}/cms/visitLog/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/visitLog/delete?id='+row.id+'" class="btnList" title="${text('删除访问日志表')}" data-confirm="${text('确认要删除该访问日志表吗')}"><i class="fa fa-trash-o"></i></a>&nbsp;');
<% } %>
//<% } %>
return actions.join('');
}}
],

View File

@@ -11,5 +11,5 @@
<meta content="width=device-width, initial-scale=1, user-scalable=1" name="viewport"/>
<title>${(isNotBlank(title!) ? title! + ' - ' : '') + @Global.getConfig('productName')}</title>
<script src="${ctxPath}/global.min.js?ctx=${ctx}"></script>
<script src="${ctxStatic}/jquery/jquery-1.12.4.min.js"></script>
<script src="${ctxStatic}/jquery/jquery-migrate-1.4.1.min.js"></script>
<script src="${ctxStatic}/jquery/jquery-3.5.0.min.js"></script>
<script src="${ctxStatic}/jquery/jquery-migrate-3.2.0.min.js"></script>

View File

@@ -19,7 +19,6 @@
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>
@@ -36,7 +35,7 @@
</ul>
</li> -->
</ul>
<ul class="nav navbar-nav navbar-right">
<ul class="nav navbar-nav navbar-right hidden-xs hidden-sm">
<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">
<div class="col-xs-2">
<div class="row main main-list">
<div class="col-sm-2 col-xs-12 main-left">
<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-xs-10">
<div class="col-sm-10 col-xs-12 main-right">
<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">
<div class="col-xs-2">
<div class="row main main-list">
<div class="col-sm-2 col-xs-12 main-left">
<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-xs-10">
<div class="col-sm-10 col-xs-12 main-right">
<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;}
h2 {padding-left:10px;text-align:center;}
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">
<div class="row main">
<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">
<div class="row main">
<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 article-view">
<div class="row main 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>

View File

@@ -2713,7 +2713,7 @@
</word>
<word>
<id>63772c051414452204e91e8d0dabd1dbfd640326</id>
<length>1000</length>
<length>767</length>
<decimal>null</decimal>
<array>false</array>
<array_dimension>null</array_dimension>
@@ -3897,7 +3897,7 @@
</word>
<word>
<id>f48d759281e0da56d3e82430c3489d1276418f61</id>
<length>1000</length>
<length>767</length>
<decimal>null</decimal>
<array>false</array>
<array_dimension>null</array_dimension>
@@ -3929,7 +3929,7 @@
</word>
<word>
<id>b0bd388c14e5b2bbab9590f5247961a7edd9eb3b</id>
<length>1000</length>
<length>767</length>
<decimal>null</decimal>
<array>false</array>
<array_dimension>null</array_dimension>

View File

@@ -60,12 +60,12 @@ CREATE TABLE js_sys_area
(
area_code varchar(100) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names varchar(1000) NOT NULL,
tree_names varchar(767) NOT NULL,
area_name vargraphic(100) NOT NULL,
area_type char(1),
status char(1) DEFAULT '0' NOT NULL,
@@ -83,12 +83,12 @@ CREATE TABLE js_sys_company
(
company_code varchar(64) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names varchar(1000) NOT NULL,
tree_names varchar(767) NOT NULL,
view_code varchar(100) NOT NULL,
company_name vargraphic(200) NOT NULL,
full_name vargraphic(200) NOT NULL,
@@ -156,12 +156,12 @@ CREATE TABLE js_sys_dict_data
(
dict_code varchar(64) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names varchar(1000) NOT NULL,
tree_names varchar(767) NOT NULL,
dict_label vargraphic(100) NOT NULL,
dict_value varchar(100) NOT NULL,
dict_icon varchar(100),
@@ -405,12 +405,12 @@ CREATE TABLE js_sys_menu
(
menu_code varchar(64) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names varchar(1000) NOT NULL,
tree_names varchar(767) NOT NULL,
menu_name varchar(100) NOT NULL,
menu_type char(1) NOT NULL,
menu_href varchar(1000),
@@ -594,12 +594,12 @@ CREATE TABLE js_sys_office
(
office_code varchar(64) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names varchar(1000) NOT NULL,
tree_names varchar(767) NOT NULL,
view_code varchar(100) NOT NULL,
office_name vargraphic(100) NOT NULL,
full_name varchar(200) NOT NULL,

View File

@@ -60,12 +60,12 @@ CREATE TABLE js_sys_area
(
area_code varchar(100) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names varchar(1000) NOT NULL,
tree_names varchar(767) NOT NULL,
area_name varchar(100) NOT NULL,
area_type char(1),
status char(1) DEFAULT '0' NOT NULL,
@@ -83,12 +83,12 @@ CREATE TABLE js_sys_company
(
company_code varchar(64) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names varchar(1000) NOT NULL,
tree_names varchar(767) NOT NULL,
view_code varchar(100) NOT NULL,
company_name varchar(200) NOT NULL,
full_name varchar(200) NOT NULL,
@@ -156,12 +156,12 @@ CREATE TABLE js_sys_dict_data
(
dict_code varchar(64) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names varchar(1000) NOT NULL,
tree_names varchar(767) NOT NULL,
dict_label varchar(100) NOT NULL,
dict_value varchar(100) NOT NULL,
dict_icon varchar(100),
@@ -405,12 +405,12 @@ CREATE TABLE js_sys_menu
(
menu_code varchar(64) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names varchar(1000) NOT NULL,
tree_names varchar(767) NOT NULL,
menu_name varchar(100) NOT NULL,
menu_type char(1) NOT NULL,
menu_href varchar(1000),
@@ -594,12 +594,12 @@ CREATE TABLE js_sys_office
(
office_code varchar(64) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names varchar(1000) NOT NULL,
tree_names varchar(767) NOT NULL,
view_code varchar(100) NOT NULL,
office_name varchar(100) NOT NULL,
full_name varchar(200) NOT NULL,

View File

@@ -60,12 +60,12 @@ CREATE TABLE [js_sys_area]
(
[area_code] varchar(100) NOT NULL,
[parent_code] varchar(64) NOT NULL,
[parent_codes] varchar(1000) NOT NULL,
[parent_codes] varchar(767) NOT NULL,
[tree_sort] decimal(10) NOT NULL,
[tree_sorts] varchar(1000) NOT NULL,
[tree_sorts] varchar(767) NOT NULL,
[tree_leaf] char(1) NOT NULL,
[tree_level] decimal(4) NOT NULL,
[tree_names] varchar(1000) NOT NULL,
[tree_names] varchar(767) NOT NULL,
[area_name] nvarchar(100) NOT NULL,
[area_type] char(1),
[status] char(1) DEFAULT '0' NOT NULL,
@@ -83,12 +83,12 @@ CREATE TABLE [js_sys_company]
(
[company_code] varchar(64) NOT NULL,
[parent_code] varchar(64) NOT NULL,
[parent_codes] varchar(1000) NOT NULL,
[parent_codes] varchar(767) NOT NULL,
[tree_sort] decimal(10) NOT NULL,
[tree_sorts] varchar(1000) NOT NULL,
[tree_sorts] varchar(767) NOT NULL,
[tree_leaf] char(1) NOT NULL,
[tree_level] decimal(4) NOT NULL,
[tree_names] varchar(1000) NOT NULL,
[tree_names] varchar(767) NOT NULL,
[view_code] varchar(100) NOT NULL,
[company_name] nvarchar(200) NOT NULL,
[full_name] nvarchar(200) NOT NULL,
@@ -156,12 +156,12 @@ CREATE TABLE [js_sys_dict_data]
(
[dict_code] varchar(64) NOT NULL,
[parent_code] varchar(64) NOT NULL,
[parent_codes] varchar(1000) NOT NULL,
[parent_codes] varchar(767) NOT NULL,
[tree_sort] decimal(10) NOT NULL,
[tree_sorts] varchar(1000) NOT NULL,
[tree_sorts] varchar(767) NOT NULL,
[tree_leaf] char(1) NOT NULL,
[tree_level] decimal(4) NOT NULL,
[tree_names] varchar(1000) NOT NULL,
[tree_names] varchar(767) NOT NULL,
[dict_label] nvarchar(100) NOT NULL,
[dict_value] varchar(100) NOT NULL,
[dict_icon] varchar(100),
@@ -405,12 +405,12 @@ CREATE TABLE [js_sys_menu]
(
[menu_code] varchar(64) NOT NULL,
[parent_code] varchar(64) NOT NULL,
[parent_codes] varchar(1000) NOT NULL,
[parent_codes] varchar(767) NOT NULL,
[tree_sort] decimal(10) NOT NULL,
[tree_sorts] varchar(1000) NOT NULL,
[tree_sorts] varchar(767) NOT NULL,
[tree_leaf] char(1) NOT NULL,
[tree_level] decimal(4) NOT NULL,
[tree_names] varchar(1000) NOT NULL,
[tree_names] varchar(767) NOT NULL,
[menu_name] varchar(100) NOT NULL,
[menu_type] char(1) NOT NULL,
[menu_href] varchar(1000),
@@ -594,12 +594,12 @@ CREATE TABLE [js_sys_office]
(
[office_code] varchar(64) NOT NULL,
[parent_code] varchar(64) NOT NULL,
[parent_codes] varchar(1000) NOT NULL,
[parent_codes] varchar(767) NOT NULL,
[tree_sort] decimal(10) NOT NULL,
[tree_sorts] varchar(1000) NOT NULL,
[tree_sorts] varchar(767) NOT NULL,
[tree_leaf] char(1) NOT NULL,
[tree_level] decimal(4) NOT NULL,
[tree_names] varchar(1000) NOT NULL,
[tree_names] varchar(767) NOT NULL,
[view_code] varchar(100) NOT NULL,
[office_name] nvarchar(100) NOT NULL,
[full_name] varchar(200) NOT NULL,

View File

@@ -61,12 +61,12 @@ CREATE TABLE js_sys_area
(
area_code varchar(100) NOT NULL COMMENT '区域编码',
parent_code varchar(64) NOT NULL COMMENT '父级编号',
parent_codes varchar(1000) NOT NULL COMMENT '所有父级编号',
parent_codes varchar(767) NOT NULL COMMENT '所有父级编号',
tree_sort decimal(10) NOT NULL COMMENT '排序号(升序)',
tree_sorts varchar(1000) NOT NULL COMMENT '所有排序号',
tree_sorts varchar(767) NOT NULL COMMENT '所有排序号',
tree_leaf char(1) NOT NULL COMMENT '是否最末级',
tree_level decimal(4) NOT NULL COMMENT '层次级别',
tree_names varchar(1000) NOT NULL COMMENT '全节点名',
tree_names varchar(767) NOT NULL COMMENT '全节点名',
area_name varchar(100) NOT NULL COMMENT '区域名称',
area_type char(1) COMMENT '区域类型',
status char(1) DEFAULT '0' NOT NULL COMMENT '状态0正常 1删除 2停用',
@@ -84,12 +84,12 @@ CREATE TABLE js_sys_company
(
company_code varchar(64) NOT NULL COMMENT '公司编码',
parent_code varchar(64) NOT NULL COMMENT '父级编号',
parent_codes varchar(1000) NOT NULL COMMENT '所有父级编号',
parent_codes varchar(767) NOT NULL COMMENT '所有父级编号',
tree_sort decimal(10) NOT NULL COMMENT '排序号(升序)',
tree_sorts varchar(1000) NOT NULL COMMENT '所有排序号',
tree_sorts varchar(767) NOT NULL COMMENT '所有排序号',
tree_leaf char(1) NOT NULL COMMENT '是否最末级',
tree_level decimal(4) NOT NULL COMMENT '层次级别',
tree_names varchar(1000) NOT NULL COMMENT '全节点名',
tree_names varchar(767) NOT NULL COMMENT '全节点名',
view_code varchar(100) NOT NULL COMMENT '公司代码',
company_name varchar(200) NOT NULL COMMENT '公司名称',
full_name varchar(200) NOT NULL COMMENT '公司全称',
@@ -157,12 +157,12 @@ CREATE TABLE js_sys_dict_data
(
dict_code varchar(64) NOT NULL COMMENT '字典编码',
parent_code varchar(64) NOT NULL COMMENT '父级编号',
parent_codes varchar(1000) NOT NULL COMMENT '所有父级编号',
parent_codes varchar(767) NOT NULL COMMENT '所有父级编号',
tree_sort decimal(10) NOT NULL COMMENT '排序号(升序)',
tree_sorts varchar(1000) NOT NULL COMMENT '所有排序号',
tree_sorts varchar(767) NOT NULL COMMENT '所有排序号',
tree_leaf char(1) NOT NULL COMMENT '是否最末级',
tree_level decimal(4) NOT NULL COMMENT '层次级别',
tree_names varchar(1000) NOT NULL COMMENT '全节点名',
tree_names varchar(767) NOT NULL COMMENT '全节点名',
dict_label varchar(100) NOT NULL COMMENT '字典标签',
dict_value varchar(100) NOT NULL COMMENT '字典键值',
dict_icon varchar(100) COMMENT '字典图标',
@@ -406,12 +406,12 @@ CREATE TABLE js_sys_menu
(
menu_code varchar(64) NOT NULL COMMENT '菜单编码',
parent_code varchar(64) NOT NULL COMMENT '父级编号',
parent_codes varchar(1000) NOT NULL COMMENT '所有父级编号',
parent_codes varchar(767) NOT NULL COMMENT '所有父级编号',
tree_sort decimal(10) NOT NULL COMMENT '排序号(升序)',
tree_sorts varchar(1000) NOT NULL COMMENT '所有排序号',
tree_sorts varchar(767) NOT NULL COMMENT '所有排序号',
tree_leaf char(1) NOT NULL COMMENT '是否最末级',
tree_level decimal(4) NOT NULL COMMENT '层次级别',
tree_names varchar(1000) NOT NULL COMMENT '全节点名',
tree_names varchar(767) NOT NULL COMMENT '全节点名',
menu_name varchar(100) NOT NULL COMMENT '菜单名称',
menu_type char(1) NOT NULL COMMENT '菜单类型1菜单 2权限 3开发',
menu_href varchar(1000) COMMENT '链接',
@@ -595,12 +595,12 @@ CREATE TABLE js_sys_office
(
office_code varchar(64) NOT NULL COMMENT '机构编码',
parent_code varchar(64) NOT NULL COMMENT '父级编号',
parent_codes varchar(1000) NOT NULL COMMENT '所有父级编号',
parent_codes varchar(767) NOT NULL COMMENT '所有父级编号',
tree_sort decimal(10) NOT NULL COMMENT '排序号(升序)',
tree_sorts varchar(1000) NOT NULL COMMENT '所有排序号',
tree_sorts varchar(767) NOT NULL COMMENT '所有排序号',
tree_leaf char(1) NOT NULL COMMENT '是否最末级',
tree_level decimal(4) NOT NULL COMMENT '层次级别',
tree_names varchar(1000) NOT NULL COMMENT '全节点名',
tree_names varchar(767) NOT NULL COMMENT '全节点名',
view_code varchar(100) NOT NULL COMMENT '机构代码',
office_name varchar(100) NOT NULL COMMENT '机构名称',
full_name varchar(200) NOT NULL COMMENT '机构全称',

View File

@@ -60,12 +60,12 @@ CREATE TABLE js_sys_area
(
area_code varchar2(100) NOT NULL,
parent_code varchar2(64) NOT NULL,
parent_codes varchar2(1000) NOT NULL,
parent_codes varchar2(767) NOT NULL,
tree_sort number(10) NOT NULL,
tree_sorts varchar2(1000) NOT NULL,
tree_sorts varchar2(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level number(4) NOT NULL,
tree_names varchar2(1000) NOT NULL,
tree_names varchar2(767) NOT NULL,
area_name nvarchar2(100) NOT NULL,
area_type char(1),
status char(1) DEFAULT '0' NOT NULL,
@@ -83,12 +83,12 @@ CREATE TABLE js_sys_company
(
company_code varchar2(64) NOT NULL,
parent_code varchar2(64) NOT NULL,
parent_codes varchar2(1000) NOT NULL,
parent_codes varchar2(767) NOT NULL,
tree_sort number(10) NOT NULL,
tree_sorts varchar2(1000) NOT NULL,
tree_sorts varchar2(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level number(4) NOT NULL,
tree_names varchar2(1000) NOT NULL,
tree_names varchar2(767) NOT NULL,
view_code varchar2(100) NOT NULL,
company_name nvarchar2(200) NOT NULL,
full_name nvarchar2(200) NOT NULL,
@@ -156,12 +156,12 @@ CREATE TABLE js_sys_dict_data
(
dict_code varchar2(64) NOT NULL,
parent_code varchar2(64) NOT NULL,
parent_codes varchar2(1000) NOT NULL,
parent_codes varchar2(767) NOT NULL,
tree_sort number(10) NOT NULL,
tree_sorts varchar2(1000) NOT NULL,
tree_sorts varchar2(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level number(4) NOT NULL,
tree_names varchar2(1000) NOT NULL,
tree_names varchar2(767) NOT NULL,
dict_label nvarchar2(100) NOT NULL,
dict_value varchar2(100) NOT NULL,
dict_icon varchar2(100),
@@ -405,12 +405,12 @@ CREATE TABLE js_sys_menu
(
menu_code varchar2(64) NOT NULL,
parent_code varchar2(64) NOT NULL,
parent_codes varchar2(1000) NOT NULL,
parent_codes varchar2(767) NOT NULL,
tree_sort number(10) NOT NULL,
tree_sorts varchar2(1000) NOT NULL,
tree_sorts varchar2(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level number(4) NOT NULL,
tree_names varchar2(1000) NOT NULL,
tree_names varchar2(767) NOT NULL,
menu_name varchar2(100) NOT NULL,
menu_type char(1) NOT NULL,
menu_href varchar2(1000),
@@ -594,12 +594,12 @@ CREATE TABLE js_sys_office
(
office_code varchar2(64) NOT NULL,
parent_code varchar2(64) NOT NULL,
parent_codes varchar2(1000) NOT NULL,
parent_codes varchar2(767) NOT NULL,
tree_sort number(10) NOT NULL,
tree_sorts varchar2(1000) NOT NULL,
tree_sorts varchar2(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level number(4) NOT NULL,
tree_names varchar2(1000) NOT NULL,
tree_names varchar2(767) NOT NULL,
view_code varchar2(100) NOT NULL,
office_name nvarchar2(100) NOT NULL,
full_name varchar2(200) NOT NULL,

View File

@@ -60,12 +60,12 @@ CREATE TABLE js_sys_area
(
area_code varchar(100) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names varchar(1000) NOT NULL,
tree_names varchar(767) NOT NULL,
area_name varchar(100) NOT NULL,
area_type char(1),
status char(1) DEFAULT '0' NOT NULL,
@@ -83,12 +83,12 @@ CREATE TABLE js_sys_company
(
company_code varchar(64) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names varchar(1000) NOT NULL,
tree_names varchar(767) NOT NULL,
view_code varchar(100) NOT NULL,
company_name varchar(200) NOT NULL,
full_name varchar(200) NOT NULL,
@@ -156,12 +156,12 @@ CREATE TABLE js_sys_dict_data
(
dict_code varchar(64) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names varchar(1000) NOT NULL,
tree_names varchar(767) NOT NULL,
dict_label varchar(100) NOT NULL,
dict_value varchar(100) NOT NULL,
dict_icon varchar(100),
@@ -405,12 +405,12 @@ CREATE TABLE js_sys_menu
(
menu_code varchar(64) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names varchar(1000) NOT NULL,
tree_names varchar(767) NOT NULL,
menu_name varchar(100) NOT NULL,
menu_type char(1) NOT NULL,
menu_href varchar(1000),
@@ -594,12 +594,12 @@ CREATE TABLE js_sys_office
(
office_code varchar(64) NOT NULL,
parent_code varchar(64) NOT NULL,
parent_codes varchar(1000) NOT NULL,
parent_codes varchar(767) NOT NULL,
tree_sort decimal(10) NOT NULL,
tree_sorts varchar(1000) NOT NULL,
tree_sorts varchar(767) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level decimal(4) NOT NULL,
tree_names varchar(1000) NOT NULL,
tree_names varchar(767) NOT NULL,
view_code varchar(100) NOT NULL,
office_name varchar(100) NOT NULL,
full_name varchar(200) NOT NULL,

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