Compare commits
356 Commits
v5.12.0.sp
...
v5.9.1.spr
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
00d3995bd4 | ||
|
|
ab801bd9cc | ||
|
|
d71ad5e140 | ||
|
|
e7177d7f65 | ||
|
|
8fba82935b | ||
|
|
7d9b643edf | ||
|
|
2f74e04645 | ||
|
|
1e723aae04 | ||
|
|
330a2977eb | ||
|
|
8167fff4bc | ||
|
|
6c3ecdac63 | ||
|
|
874a4465ea | ||
|
|
c3e07cd96c | ||
|
|
509ab88fee | ||
|
|
edce962f2c | ||
|
|
01f599db82 | ||
|
|
518b386637 | ||
|
|
586a6adf97 | ||
|
|
495da42f2b | ||
|
|
b353477793 | ||
|
|
4d3dd85a1c | ||
|
|
d7b4c2494d | ||
|
|
0abd8cbd5a | ||
|
|
9355576fad | ||
|
|
f979005e2f | ||
|
|
f65c6e0ab5 | ||
|
|
dbafe28918 | ||
|
|
ec47a71e16 | ||
|
|
4b566084e3 | ||
|
|
a4ecd765d4 | ||
|
|
f3ea863e76 | ||
|
|
7787d7ce0a | ||
|
|
3cfef3c57e | ||
|
|
8a10f1679a | ||
|
|
f80e1b6c3a | ||
|
|
49393124ac | ||
|
|
8e9b9043aa | ||
|
|
a210e7f621 | ||
|
|
9cf4cd30a2 | ||
|
|
60d6b9c1cf | ||
|
|
b499bb951b | ||
|
|
da91070c30 | ||
|
|
8fd7fcb489 | ||
|
|
cad2ff85ef | ||
|
|
8bbd343af4 | ||
|
|
7b4499135b | ||
|
|
da954bf68d | ||
|
|
6b428bcb50 | ||
|
|
1d94e4511d | ||
|
|
91b6344479 | ||
|
|
35a32ce799 | ||
|
|
768c162150 | ||
|
|
f6e598d225 | ||
|
|
5084ac39cf | ||
|
|
ea5e164a4e | ||
|
|
fcc53684cd | ||
|
|
c53b52f932 | ||
|
|
5f104fce87 | ||
|
|
a15fb508f9 | ||
|
|
89d785f04c | ||
|
|
09b1505120 | ||
|
|
6561862aae | ||
|
|
e4335eb840 | ||
|
|
5e5111523d | ||
|
|
ad893798a5 | ||
|
|
414f44c338 | ||
|
|
237ee91644 | ||
|
|
c0b42921ec | ||
|
|
3394ddcc03 | ||
|
|
bfd128f6bd | ||
|
|
1263b18724 | ||
|
|
e942c70553 | ||
|
|
3d63ccba2f | ||
|
|
7b20b3cc0e | ||
|
|
0caf88a0bc | ||
|
|
5e933119f3 | ||
|
|
b4f3e6b6a2 | ||
|
|
e4fc9057b3 | ||
|
|
dd3e52a8ca | ||
|
|
e81e548f92 | ||
|
|
616e2f45cb | ||
|
|
de312d3ec6 | ||
|
|
41456b8965 | ||
|
|
afe32c5abe | ||
|
|
31349430b6 | ||
|
|
11747540ad | ||
|
|
a8ad781197 | ||
|
|
a8353b654b | ||
|
|
66b4932d9d | ||
|
|
b50e6005da | ||
|
|
5567e96d65 | ||
|
|
865986da28 | ||
|
|
13d8b8390a | ||
|
|
cc0794c3fc | ||
|
|
0a29bed4ad | ||
|
|
5a4c03332a | ||
|
|
fa6b887ed2 | ||
|
|
d3da625f72 | ||
|
|
c70889eedd | ||
|
|
6c62d191c5 | ||
|
|
2900fb0ce2 | ||
|
|
7597dcd572 | ||
|
|
3430d160bf | ||
|
|
ae63df2d55 | ||
|
|
668042ca1a | ||
|
|
3eef280ade | ||
|
|
f83e3f5e7f | ||
|
|
92870be96e | ||
|
|
a3a7bd0230 | ||
|
|
d0eba614bd | ||
|
|
7f42e99070 | ||
|
|
867ba3933c | ||
|
|
149ca55246 | ||
|
|
15c180440f | ||
|
|
8053457e17 | ||
|
|
9f952f1b5b | ||
|
|
66740854f6 | ||
|
|
ecb31bf21a | ||
|
|
2e8cc49dfa | ||
|
|
97ef1fdec1 | ||
|
|
9decf2ed58 | ||
|
|
54b9d85b0d | ||
|
|
1d1eda1f0a | ||
|
|
65ed0fa550 | ||
|
|
15c440be0a | ||
|
|
dbc4eb9bed | ||
|
|
beb3285a51 | ||
|
|
1b74cbe4ba | ||
|
|
3fde0742aa | ||
|
|
71ea34ec0e | ||
|
|
41f1675c2b | ||
|
|
57deb501ba | ||
|
|
e806f67b9f | ||
|
|
dc80b74c79 | ||
|
|
a3b4a1fc7d | ||
|
|
660c045965 | ||
|
|
5c54c1aae4 | ||
|
|
132ff7a58d | ||
|
|
d26d86805a | ||
|
|
de601181df | ||
|
|
cdd95e1ad5 | ||
|
|
da33d8781b | ||
|
|
6529177a6b | ||
|
|
391e20d6f8 | ||
|
|
4042b8cace | ||
|
|
cde338b7c2 | ||
|
|
03f5b373f6 | ||
|
|
586ee75d4a | ||
|
|
9ef6140be0 | ||
|
|
56fbc4d52a | ||
|
|
2f315cd39a | ||
|
|
66e5bff947 | ||
|
|
21c8fe15b7 | ||
|
|
49506fc10e | ||
|
|
57d767226a | ||
|
|
0a9007793a | ||
|
|
c82b83492d | ||
|
|
6e3a1476ca | ||
|
|
7abd08f04e | ||
|
|
11168f4356 | ||
|
|
6d0d134ea2 | ||
|
|
ac17706fc7 | ||
|
|
0e82478fad | ||
|
|
f7344d4736 | ||
|
|
137080b3c0 | ||
|
|
2bf621c0cf | ||
|
|
59e0a80b37 | ||
|
|
77d4247449 | ||
|
|
04028745ad | ||
|
|
9b9e7a85a6 | ||
|
|
a0db2ed70a | ||
|
|
5dd59473a3 | ||
|
|
6bd9f8179a | ||
|
|
59e3745580 | ||
|
|
9164fe2dc6 | ||
|
|
70f26006da | ||
|
|
9332517f39 | ||
|
|
b53789818d | ||
|
|
cc0f5fedb8 | ||
|
|
7696692ad9 | ||
|
|
ddaaca6be8 | ||
|
|
96bd62a375 | ||
|
|
b9f6b93bbe | ||
|
|
4df4f822bc | ||
|
|
45b8595122 | ||
|
|
03a031360c | ||
|
|
c222ab29ff | ||
|
|
ff58e4f05c | ||
|
|
0e95a41edc | ||
|
|
680a3f2a8c | ||
|
|
aa904c5763 | ||
|
|
293821d0ab | ||
|
|
bcedc006e1 | ||
|
|
be9326d671 | ||
|
|
debc349810 | ||
|
|
40cab1f49e | ||
|
|
14365a6e76 | ||
|
|
6cf4bebebf | ||
|
|
7914b18e20 | ||
|
|
d0fd74fa51 | ||
|
|
000fadeb95 | ||
|
|
d7c9138a31 | ||
|
|
5e4608d486 | ||
|
|
9415356b20 | ||
|
|
73a93b2721 | ||
|
|
d93b0c4814 | ||
|
|
81154d7cfb | ||
|
|
21215850e4 | ||
|
|
1b4a7523f8 | ||
|
|
68291c61da | ||
|
|
be19b92e82 | ||
|
|
0b6f5e285a | ||
|
|
2f83793638 | ||
|
|
11cc857de7 | ||
|
|
fe076d7caf | ||
|
|
5db33072ac | ||
|
|
5813875d6e | ||
|
|
1c4ce3842a | ||
|
|
4f722ea1d7 | ||
|
|
05bdaad7aa | ||
|
|
af06033521 | ||
|
|
a54344950b | ||
|
|
392dc80617 | ||
|
|
a32f6b67f5 | ||
|
|
e343bd7ba7 | ||
|
|
0deacd54bb | ||
|
|
33df1fa37c | ||
|
|
faba69ca6d | ||
|
|
0b7eb4138e | ||
|
|
bdfba55a82 | ||
|
|
aea8eb2241 | ||
|
|
f8cf61e02f | ||
|
|
8a765082cf | ||
|
|
abb86ed422 | ||
|
|
de4dc8542b | ||
|
|
e3c1f4f860 | ||
|
|
f91b714349 | ||
|
|
31da0c637e | ||
|
|
93181c921d | ||
|
|
231b8308c6 | ||
|
|
1e0c073bb4 | ||
|
|
e250b23084 | ||
|
|
2d78175001 | ||
|
|
4f4bbac861 | ||
|
|
758c66e5a5 | ||
|
|
025007203c | ||
|
|
ac32d2f061 | ||
|
|
d1973adfba | ||
|
|
ae0745954d | ||
|
|
fbf952247d | ||
|
|
a07cb38dab | ||
|
|
d00f4b6d25 | ||
|
|
cecec315d4 | ||
|
|
95f7987d22 | ||
|
|
8d87b4142c | ||
|
|
e32c87d009 | ||
|
|
d931e0f03a | ||
|
|
2f80eadd26 | ||
|
|
601205144f | ||
|
|
fe5d61e4a6 | ||
|
|
934821e8d4 | ||
|
|
20d2cd7408 | ||
|
|
dc6f361891 | ||
|
|
de03b43367 | ||
|
|
5f208ab60f | ||
|
|
9888d2f901 | ||
|
|
137c523267 | ||
|
|
d4936ac085 | ||
|
|
bcbdb18e15 | ||
|
|
d828879568 | ||
|
|
bfd767f65b | ||
|
|
25a41bd105 | ||
|
|
1e6779a473 | ||
|
|
fcb42bfda9 | ||
|
|
128690bd2a | ||
|
|
51542c11ed | ||
|
|
98876b588e | ||
|
|
00487c463d | ||
|
|
66b4f61f18 | ||
|
|
8dbbf13520 | ||
|
|
80dcbc7bce | ||
|
|
cdebf586d5 | ||
|
|
396464feda | ||
|
|
3e3176fc63 | ||
|
|
810ad853e3 | ||
|
|
270afadccc | ||
|
|
4beb86c2ea | ||
|
|
7c22be7a54 | ||
|
|
37dd13061c | ||
|
|
0b4cadf163 | ||
|
|
7934e40586 | ||
|
|
4e1b7bf17a | ||
|
|
739a07f0da | ||
|
|
5b619ce6dc | ||
|
|
6f49a9b5eb | ||
|
|
4208223617 | ||
|
|
dff27dc659 | ||
|
|
81cb9dcbba | ||
|
|
7fa294c450 | ||
|
|
5db4986d91 | ||
|
|
d91feb0659 | ||
|
|
440bb920b7 | ||
|
|
95fb0a5764 | ||
|
|
cc5a1f3a0e | ||
|
|
e51e1c1cd7 | ||
|
|
9c8cfa3f53 | ||
|
|
7750fb14b9 | ||
|
|
2ffd3bb7bb | ||
|
|
3a1b6314a1 | ||
|
|
924e035074 | ||
|
|
b2654d3044 | ||
|
|
2cfe47fcd0 | ||
|
|
520dd4694b | ||
|
|
48eb91d65b | ||
|
|
23941a4fb9 | ||
|
|
42065195ec | ||
|
|
9ca999a90a | ||
|
|
a445e43fbb | ||
|
|
c47398295b | ||
|
|
539ec80a3b | ||
|
|
f0814f45d9 | ||
|
|
9032d2f98d | ||
|
|
e6ce5206a4 | ||
|
|
f63a2757b6 | ||
|
|
90ccacbb38 | ||
|
|
47a4bd31a7 | ||
|
|
84df35df1b | ||
|
|
4ee9342f2d | ||
|
|
f6d1d18781 | ||
|
|
df3af9d059 | ||
|
|
4b2bbff887 | ||
|
|
59bd70328a | ||
|
|
2070c33c34 | ||
|
|
99625753ec | ||
|
|
5ce8523702 | ||
|
|
a76371e508 | ||
|
|
7659fa0e7d | ||
|
|
d9ea710e9b | ||
|
|
3271bb3afc | ||
|
|
b371d685d4 | ||
|
|
f18682a3a9 | ||
|
|
cce67cf0ad | ||
|
|
b919e68dad | ||
|
|
ca0adaeeed | ||
|
|
9b228d7808 | ||
|
|
171194cb6b | ||
|
|
07e2fe4955 | ||
|
|
64d694f025 | ||
|
|
f558bf356d | ||
|
|
aff67ed8fb | ||
|
|
b3b5d53763 | ||
|
|
74f72fb2b8 | ||
|
|
8e81648bdd | ||
|
|
bc0a9f7f80 | ||
|
|
023743bbe9 | ||
|
|
4638656f5d |
13
LICENSE
13
LICENSE
@@ -206,16 +206,15 @@
|
||||
|
||||
1. 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款。
|
||||
2. 不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。
|
||||
3. 在使用本软件时,由于它集成了众多第三方开源软件,请共同遵守这些开源软件的使用许可条款规定。
|
||||
4. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议、版权声明和其他原作者
|
||||
3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议、版权声明和其他原作者
|
||||
规定需要包含的说明(请尊重原作者的著作权,不要删除或修改文件中的`Copyright`和`@author`信息)
|
||||
更不要,全局替换源代码中的 jeesite 或 ThinkGem 等字样,否则你将违反本协议条款承担责任。
|
||||
5. 您若套用本软件的一些代码或功能参考,请保留源文件中的版权和作者,需要在您的软件介绍明显位置
|
||||
4. 您若套用本软件的一些代码或功能参考,请保留源文件中的版权和作者,需要在您的软件介绍明显位置
|
||||
说明出处,举例:本软件基于 JeeSite 快速开发平台,并附带链接:http://jeesite.com
|
||||
6. 任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
|
||||
7. 如果你对本软件有改进,希望可以贡献给我们,共同进步。
|
||||
8. 本项目已申请软件著作权,请尊重开源,感谢阅读。
|
||||
9. 无用户数限制,无在线人数限制,放心使用。
|
||||
5. 任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
|
||||
6. 如果你对本软件有改进,希望可以贡献给我们,共同进步。
|
||||
7. 本项目已申请软件著作权,请尊重开源,感谢阅读。
|
||||
8. 无用户数限制,无在线人数限制,放心使用。
|
||||
|
||||
版权所有:济南卓源软件有限公司
|
||||
|
||||
|
||||
85
README.md
85
README.md
@@ -2,15 +2,12 @@
|
||||
<p align="center">
|
||||
<img alt="JeeSite" src="https://jeesite.com/assets/images/logo.png" width="120" height="120" style="margin-bottom: 10px;">
|
||||
</p>
|
||||
<h3 align="center" style="margin:30px 0 30px;font-weight:bold;font-size:30px;">快速开发平台 - Spring Boot</h3>
|
||||
<h3 align="center" style="margin:30px 0 30px;font-weight:bold;font-size:30px;">快速开发平台 - Spring Boot 3</h3>
|
||||
<p align="center">
|
||||
<a href="https://spring.io/projects/spring-boot" target="__blank"><img alt="SpringBoot-V2.7/3.4" src="https://img.shields.io/badge/SpringBoot-V2.7/3.4-blue.svg"></a>
|
||||
<a href="https://v3.cn.vuejs.org/" target="__blank"><img alt="TypeScript-Vue3" src="https://img.shields.io/badge/TypeScript-Vue3-green.svg"></a>
|
||||
<a href="https://jeesite.com/docs/upgrade/" target="__blank"><img alt="JeeSite-V5.x" src="https://img.shields.io/badge/JeeSite-V5.x-success.svg"></a>
|
||||
<a href="https://gitee.com/thinkgem/jeesite5" target="__blank"><img alt="star" src="https://gitee.com/thinkgem/jeesite5/badge/star.svg?theme=dark"></a>
|
||||
<a href="https://gitee.com/thinkgem/jeesite-vue" target="__blank"><img alt="star" src="https://gitee.com/thinkgem/jeesite-vue/badge/star.svg?theme=dark"></a>
|
||||
<a href="https://gitee.com/thinkgem/jeesite" target="__blank"><img alt="star" src="https://gitee.com/thinkgem/jeesite/badge/star.svg?theme=gvp"></a>
|
||||
<a href="https://gitcode.com/thinkgem/jeesite" target="__blank"><img alt="star" src="https://gitcode.com/thinkgem/jeesite/star/badge.svg"></a>
|
||||
<a href="https://jeesite.com/docs/upgrade/" target="__blank"><img alt="JeeSite-5.9" src="https://img.shields.io/badge/JeeSite-V5.9-success.svg"></a>
|
||||
<a href="https://spring.io/projects/spring-boot#learn" target="__blank"><img alt="SpringBoot-2.7/3.2" src="https://img.shields.io/badge/SpringBoot-2.7/3.2-blue.svg"></a>
|
||||
<a href="https://gitee.com/thinkgem/jeesite5/stargazers" target="__blank"><img alt="star" src="https://gitee.com/thinkgem/jeesite5/badge/star.svg?theme=dark"></a>
|
||||
<a href="https://gitee.com/thinkgem/jeesite-vue/stargazers" target="__blank"><img alt="star" src="https://gitee.com/thinkgem/jeesite-vue/badge/star.svg?theme=dark"></a>
|
||||
</p>
|
||||
|
||||
------
|
||||
@@ -27,40 +24,28 @@
|
||||
* 使用文档:<https://jeesite.com/docs>
|
||||
* 问题反馈:<http://jeesite.net> [【新手必读】](https://gitee.com/thinkgem/jeesite5/issues/I18ARR)
|
||||
* 需求收集:<https://gitee.com/thinkgem/jeesite5/issues/new>
|
||||
* 联系我们:<http://s.jeesite.com>
|
||||
* QQ 群:`127515876`、`209330483`、`223507718`、`709534275`、`730390092`、`1373527`、`183903863(外包)`
|
||||
* 微信群:添加客服微信 <http://s.jeesite.com> 邀请您进群
|
||||
* 关注微信公众号,了解最新动态:
|
||||
|
||||
<p style="padding-left:40px">
|
||||
<img alt="JeeSite微信公众号" src="https://jeesite.com/assets/images/mp.png" width="200">
|
||||
</p>
|
||||
|
||||
* QQ 群:`127515876`、`209330483`、`223507718`、`709534275`、`730390092`、`1373527`、`183903863(外包)`
|
||||
* 微信群:如果二维码过期,请尝试刷新图片,或者添加客服微信 jeesitex 邀请您进群
|
||||
|
||||
<p style="padding-left:40px"><a href="https://jeesite.com/assets/images/wxg_cur.png" target="_blank">
|
||||
<img alt="JeeSite微信群" src="https://jeesite.com/assets/images/wxg_cur.png" width="200"/></a>
|
||||
</p>
|
||||
|
||||
* 源码仓库地址:
|
||||
[Gitee](https://gitee.com/thinkgem/jeesite5)、
|
||||
[GitCode](https://gitcode.com/thinkgem/jeesite5)、
|
||||
[GitHub](https://github.com/thinkgem/jeesite5)
|
||||
* 分离版源码仓库地址:
|
||||
[Gitee](https://gitee.com/thinkgem/jeesite-vue)、
|
||||
[GitCode](https://gitcode.com/thinkgem/jeesite-vue)、
|
||||
[GitHub](https://github.com/thinkgem/jeesite-vue)
|
||||
* 源码合集仓库地址:
|
||||
[GVP](https://gitee.com/thinkgem/jeesite/tree/v5.springboot3)、
|
||||
[G-Star](https://gitcode.com/thinkgem/jeesite/overview?ref=v5.springboot3)、
|
||||
[GitHub](https://github.com/thinkgem/jeesite/tree/v5.springboot3)
|
||||
* 源码仓库地址1:<https://gitee.com/thinkgem/jeesite5>
|
||||
* 源码仓库地址2:<https://github.com/thinkgem/jeesite5>
|
||||
* 源码仓库地址3:<https://gitcode.com/thinkgem/jeesite5>
|
||||
* 分离版前端源码仓库地址1:<https://gitee.com/thinkgem/jeesite-vue>
|
||||
* 分离版前端源码仓库地址2:<https://github.com/thinkgem/jeesite-vue>
|
||||
* 分离版前端源码仓库地址3:<https://gitcode.com/thinkgem/jeesite-vue>
|
||||
|
||||
## 平台介绍
|
||||
|
||||
* JeeSite 快速开发平台,低代码,轻量级,不仅仅是一个后台开发框架,它是一个企业级快速开发解决方案,后端基于经典组合 Spring Boot、Shiro、MyBatis,前端采用分离版 Vue3、Vite、Ant Design Vue、TypeScript、Vben Admin 最先进技术栈,或者 Beetl、Bootstrap、AdminLTE 经典开发模式。
|
||||
* JeeSite 快速开发平台,不仅仅是一个后台开发框架,它是一个企业级快速开发解决方案,后端基于经典组合 Spring Boot、Shiro、MyBatis,前端采用 Beetl、Bootstrap、AdminLTE 经典开发模式,或者分离版 Vue3、Vite、Ant Design Vue、TypeScript、Vben Admin 最先进技术栈。
|
||||
|
||||
* 提供在线数据源管理、数据表建模、代码生成等功能,可自动创建业务模块代码工程和微服务模块代码工程,自动生成前端代码和后端代码;包括核心功能模块如:组织机构、用户、角色、岗位、管理员、权限审计、菜单及按钮权限、数据权限、模块管理、系统参数、字典管理、系统监控、数据监控等;扩展功能如:工作流引擎、内容管理、消息推送、单点登录、第三方登录、在线作业调度、对象存储、可视化数据大屏、报表设计器、在线文件预览、国际化、全文检索、统一认证服务等。
|
||||
|
||||
* 本平台采用松耦合设计,真正的轻量级,微内核,快速部署,插件架构,模块增减便捷,支持扩展 SaaS 架构、集群部署、读写分离、分库分表、Spring Cloud 微服务架构;并内置了众多账号安全设置、密码策略、系统访问限制等安全解决方案,支持等保评测。
|
||||
* 本平台采用松耦合设计,微内核和插件架构,模块增减便捷,支持集群,支持 SaaS 架构,支持读写分离、分库分表、Spring Cloud 微服务架构;并内置了众多账号安全设置、密码策略、系统访问限制等安全解决方案,支持等保评测。
|
||||
|
||||
* 本平台专注于为初级研发人员提供强大的支持,使他们能够高效、快速地开发出复杂的业务功能,同时为中高级人员腾出宝贵的时间,专注于更具战略性和创新性的任务。我们致力于让开发者能够全心投入业务逻辑中,而将繁琐的技术细节交由平台来封装处理。这不仅降低了技术实现的难度,还确保了系统架构的稳定性和安全性,进而帮助企业节省人力成本、缩短项目周期,并提高整体软件的安全性和质量。
|
||||
|
||||
@@ -76,7 +61,7 @@
|
||||
|
||||
* JeeSite 非常易于二次开发,可控性高,整体架构清晰、技术稳定而先进、源代码书写规范、经典技术会的人多、易于维护、易于扩展、安全稳定。
|
||||
|
||||
* JeeSite 功能全,知识点非常多,也非常少。因为她使用的都是一些通用的技术,通俗的设计风格,大多数基础知识点,多数人都能掌握,所以每一个 JeeSite 的功能点都非常容易掌握。只要您学会使用这些功能和组件的应用,就可以顺利地完成系统开发了。
|
||||
* JeeSite 功能全,知识点非常多,也非常少。因为她使用的都是一些通用的技术,通俗的设计风格,大多数基础知识点,多数人都能掌握,所以每一个 JeeSite 的功能点都非常容易掌握。只要您学会使用这些功能和组件的应用,就可以顺利的完成系统开发了。
|
||||
|
||||
* JeeSite 是一个低代码开发平台,具有较高的封装度、扩展性,封装不是限制您去做一些事情,而是在便捷的同时,也具有较好的扩展性,在不具备一些功能的情况下,JeeSite 提供了扩展接口,提供了原生调用方法。
|
||||
|
||||
@@ -95,17 +80,17 @@
|
||||
|
||||
## 技术选型
|
||||
|
||||
* 主框架:Spring Boot 2.7、Spring Framework 5.3、Apache Shiro 1.12、J2Cache
|
||||
* 持久层:Apache MyBatis 3.5、Hibernate Validator 6.2、Alibaba Druid 1.2
|
||||
* 视图层:Spring MVC 5.3、Beetl 3.10(替换JSP)、Bootstrap 3.3、AdminLTE 2.4
|
||||
* 主框架:Spring Boot 3.1、Spring Framework 6.0、Apache Shiro 2.0、J2Cache
|
||||
* 持久层:Apache MyBatis 3.5、Hibernate Validator 8.0、Alibaba Druid 1.2
|
||||
* 视图层:Spring MVC 6.0、Beetl 3.10(替换JSP)、Bootstrap 3.3、AdminLTE 2.4
|
||||
* 前端组件:jQuery 3.7、jqGrid 4.7、layer 3.5、zTree 3.5、jQuery Validation
|
||||
* 分离前端版:Node.js、TypeScript、Vue3、Vite、Ant Design Vue、Vue Vben Admin
|
||||
* 工作流引擎:Flowable 6.6、符合 BPMN 规范、在线流程设计器、中国式流程、退回、撤回、自由流
|
||||
* Bootstrap 版 支持 IE10 及以上版本及其他所有现代浏览器,如:谷歌、火狐、国产浏览器 等
|
||||
* 工作流引擎:Flowable 7.0、符合 BPMN 规范、在线流程设计器、中国式流程、退回、撤回、自由流
|
||||
* Bootstrap 版 支持 IE9 及以上版本及其他所有现代浏览器,如:谷歌、火狐、国产浏览器 等
|
||||
* Vue3 版 支持现代浏览器,如:谷歌 Chrome 86+、火狐、国产浏览器 等
|
||||
* 技术选型(详细):<http://jeesite.com/docs/technology/>
|
||||
* JeeSite Vue 版本:<https://gitee.com/thinkgem/jeesite-vue>
|
||||
* Spring Boot 3.x 版本:<https://gitee.com/thinkgem/jeesite5/tree/v5.springboot3>
|
||||
* Spring Boot 2.x 版本:<https://gitee.com/thinkgem/jeesite5/tree/v5.9>
|
||||
|
||||
## 更多介绍
|
||||
|
||||
@@ -138,8 +123,8 @@
|
||||
|
||||
### 本地运行
|
||||
|
||||
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/jeesite5/repository/archive/v5.9.zip> 并解压
|
||||
1. 环境准备:`JDK 17+`、`Maven 3.8+`、使用 `MySQL 5.7 or 8.x` 数据库、[其它数据库](https://jeesite.com/docs/technology/#_8、已支持数据库)
|
||||
2. 下载源码:<https://gitee.com/thinkgem/jeesite5/repository/archive/v5.springboot3.zip> 并解压
|
||||
3. 打开文件:`/web/src/main/resources/config/application.yml` 配置JDBC连接
|
||||
4. 执行脚本:`/web/bin/init-data.bat` 初始化数据库
|
||||
5. 执行脚本:`/web/bin/run-tomcat.bat` 启动服务即可
|
||||
@@ -149,8 +134,8 @@
|
||||
|
||||
### 快速运行
|
||||
|
||||
1. 环境准备:`JDK 1.8 or 11、17`、`Maven 3.6+`、无需准备数据库(使用内嵌 H2 DB、Vue资源包)
|
||||
2. 下载源码:<https://gitee.com/thinkgem/jeesite5/repository/archive/v5.9.zip> 并解压
|
||||
1. 环境准备:`JDK 17+`、`Maven 3.8+`、无需准备数据库(使用内嵌 H2 DB、Vue资源包)
|
||||
2. 下载源码:<https://gitee.com/thinkgem/jeesite5/repository/archive/v5.springboot3.zip> 并解压
|
||||
3. 执行脚本:`/web-fast/bin/run-tomcat.bat` 启动服务即可(自动初始化库)
|
||||
4. Vue分离版本地址:<http://127.0.0.1:8980/vue/login>
|
||||
5. 全栈版本地址:<http://127.0.0.1:8980/a/login>
|
||||
@@ -233,22 +218,20 @@ docker run --name jeesite-web -p 8980:8980 -d --restart unless-stopped \
|
||||
|
||||
1. 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款。
|
||||
2. 不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。
|
||||
3. 在使用本软件时,由于它集成了众多第三方开源软件,请共同遵守这些开源软件的使用许可条款规定。
|
||||
4. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议、版权声明和其他原作者
|
||||
3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议、版权声明和其他原作者
|
||||
规定需要包含的说明(请尊重原作者的著作权,不要删除或修改文件中的`Copyright`和`@author`信息)
|
||||
更不要,全局替换源代码中的 jeesite 或 ThinkGem 等字样,否则你将违反本协议条款承担责任。
|
||||
5. 您若套用本软件的一些代码或功能参考,请保留源文件中的版权和作者,需要在您的软件介绍明显位置
|
||||
4. 您若套用本软件的一些代码或功能参考,请保留源文件中的版权和作者,需要在您的软件介绍明显位置
|
||||
说明出处,举例:本软件基于 JeeSite 快速开发平台,并附带链接:http://jeesite.com
|
||||
6. 任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
|
||||
7. 如果你对本软件有改进,希望可以贡献给我们,共同进步。
|
||||
8. 本项目已申请软件著作权,请尊重开源,感谢阅读。
|
||||
9. 无用户数限制,无在线人数限制,放心使用。
|
||||
5. 任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
|
||||
6. 如果你对本软件有改进,希望可以贡献给我们,共同进步。
|
||||
7. 本项目已申请软件著作权,请尊重开源,感谢阅读。
|
||||
8. 无用户数限制,无在线人数限制,放心使用。
|
||||
|
||||
## 技术支持与服务
|
||||
## 技术服务与支持
|
||||
|
||||
* 本软件免费,我们也提供了相应的收费服务,因为:
|
||||
* 没有资金的支撑就很难得到发展,特别是一个好的产品,如果 JeeSite 帮助了您,请为我们点赞。支持我们,您可以获得更多回馈,我们会把公益事业做的更好,开放更多资源,回报社区和社会。请给我们一些动力吧,在此非常感谢已支持我们的朋友!
|
||||
* **联系我们**:请访问技术支持与服务页面:<http://s.jeesite.com>
|
||||
* **联系我们**:请访问技术支持服务页面:<https://jeesite.com/docs/support/>
|
||||
|
||||
## 今后如何升级?
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>5.12.0-SNAPSHOT</version>
|
||||
<version>5.9.1.springboot3-SNAPSHOT</version>
|
||||
<relativePath>../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
|
||||
<!-- Servlet Api -->
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
<groupId>jakarta.servlet</groupId>
|
||||
<artifactId>jakarta.servlet-api</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
@@ -46,13 +46,6 @@
|
||||
<version>${commons-io.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Java serialization -->
|
||||
<dependency>
|
||||
<groupId>de.ruedigermoeller</groupId>
|
||||
<artifactId>fst</artifactId>
|
||||
<version>${fst.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Jackson json -->
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
@@ -249,11 +242,6 @@
|
||||
<artifactId>spring-web</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-webmvc</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot</artifactId>
|
||||
|
||||
@@ -15,7 +15,7 @@ import org.apache.commons.text.StringEscapeUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLDecoder;
|
||||
import java.net.URLEncoder;
|
||||
@@ -154,7 +154,7 @@ public class EncodeUtils {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
return URLEncoder.encode(part, StringUtils.isNotBlank(encoding) ? encoding : EncodeUtils.UTF_8);
|
||||
return URLEncoder.encode(part, encoding);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
throw ExceptionUtils.unchecked(e);
|
||||
}
|
||||
@@ -175,7 +175,7 @@ public class EncodeUtils {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
return URLDecoder.decode(part, StringUtils.isNotBlank(encoding) ? encoding : EncodeUtils.UTF_8);
|
||||
return URLDecoder.decode(part, encoding);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
throw ExceptionUtils.unchecked(e);
|
||||
}
|
||||
@@ -226,6 +226,7 @@ public class EncodeUtils {
|
||||
// 如果开始不是HTML,XML,JOSN格式,则再进行HTML的 "、<、> 转码。
|
||||
if (!StringUtils.startsWithIgnoreCase(value, "<!--HTML-->") // HTML
|
||||
&& !StringUtils.startsWithIgnoreCase(value, "<?xml ") // XML
|
||||
&& !StringUtils.contains(value, "id=\"FormHtml\"") // JFlow
|
||||
&& !(StringUtils.startsWith(value, "{") && StringUtils.endsWith(value, "}")) // JSON Object
|
||||
&& !(StringUtils.startsWith(value, "[") && StringUtils.endsWith(value, "]")) // JSON Array
|
||||
){
|
||||
@@ -266,8 +267,7 @@ public class EncodeUtils {
|
||||
"(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|((extractvalue|updatexml|if|mid|database|rand|user)([\\s]*?)\\()"
|
||||
+ "|(\\b(select|update|and|or|delete|insert|trancate|substr|ascii|declare|exec|count|master|into"
|
||||
+ "|drop|execute|case when|sleep|union|load_file)\\b)", Pattern.CASE_INSENSITIVE);
|
||||
private static final Pattern simplePattern = Pattern.compile("[a-z0-9_\\.\\, ]*", Pattern.CASE_INSENSITIVE);
|
||||
private static final Pattern columnNamePattern = Pattern.compile("[a-z0-9_\\.`\"\\[\\]]*", Pattern.CASE_INSENSITIVE);
|
||||
private static final Pattern orderByPattern = Pattern.compile("[a-z0-9_\\.\\, ]*", Pattern.CASE_INSENSITIVE);
|
||||
|
||||
/**
|
||||
* SQL过滤,防止注入,传入参数输入有select相关代码,替换空。
|
||||
@@ -284,13 +284,8 @@ public class EncodeUtils {
|
||||
public static String sqlFilter(String text, String source){
|
||||
if (text != null){
|
||||
String value = text;
|
||||
if (StringUtils.inString(source, "simple", "orderBy")) {
|
||||
Matcher matcher = simplePattern.matcher(value);
|
||||
if (!matcher.matches()) {
|
||||
value = StringUtils.EMPTY;
|
||||
}
|
||||
} else if (StringUtils.inString(source, "columnName")) {
|
||||
Matcher matcher = columnNamePattern.matcher(value);
|
||||
if ("orderBy".equals(source)) {
|
||||
Matcher matcher = orderByPattern.matcher(value);
|
||||
if (!matcher.matches()) {
|
||||
value = StringUtils.EMPTY;
|
||||
}
|
||||
@@ -309,27 +304,4 @@ public class EncodeUtils {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 对邮箱和手机号进行安全处理
|
||||
private static final Pattern emailPattern = Pattern.compile("([\\w\\W]?)([\\w\\W]+)([\\w\\W])(@[\\w\\W]+)");
|
||||
private static final Pattern mobilePattern = Pattern.compile("(\\d{3})(\\d+)(\\d{3})");
|
||||
|
||||
/**
|
||||
* 手机号码进行掩码处理
|
||||
*/
|
||||
public static String mobileMask(String mobile){
|
||||
if (StringUtils.isBlank(mobile)){
|
||||
return mobile;
|
||||
}
|
||||
return mobilePattern.matcher(mobile).replaceAll("$1****$3");
|
||||
}
|
||||
|
||||
/**
|
||||
* 对电子邮箱进行掩码处理
|
||||
*/
|
||||
public static String emailMask(String email){
|
||||
if (StringUtils.isBlank(email)){
|
||||
return email;
|
||||
}
|
||||
return emailPattern.matcher(email).replaceAll("$1****$3$4");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,185 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
* No deletion without permission, or be held responsible to law.
|
||||
*/
|
||||
package com.jeesite.common.codec;
|
||||
|
||||
import com.jeesite.common.io.PropertiesUtils;
|
||||
|
||||
import javax.crypto.BadPaddingException;
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.IllegalBlockSizeException;
|
||||
import javax.crypto.NoSuchPaddingException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.*;
|
||||
import java.security.spec.InvalidKeySpecException;
|
||||
import java.security.spec.PKCS8EncodedKeySpec;
|
||||
import java.security.spec.X509EncodedKeySpec;
|
||||
|
||||
/**
|
||||
* RSA 加密解密工具类,非对称加密
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public class RsaUtils {
|
||||
|
||||
private static final String RSA = "RSA";
|
||||
private static final String algorithm = "SHA256withRSA";
|
||||
private static final boolean STORE_BASE64 = PropertiesUtils.getInstance()
|
||||
.getPropertyToBoolean("encrypt.storeBase64", "false");
|
||||
|
||||
/**
|
||||
* 生成 RSA 秘钥对
|
||||
*/
|
||||
public static String[] genKeys() {
|
||||
try {
|
||||
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(RSA);
|
||||
keyPairGenerator.initialize(1024);
|
||||
KeyPair keyPair = keyPairGenerator.generateKeyPair();
|
||||
PublicKey publicKey = keyPair.getPublic();
|
||||
PrivateKey privateKey = keyPair.getPrivate();
|
||||
return new String[]{
|
||||
EncodeUtils.encodeBase64(publicKey.getEncoded()),
|
||||
EncodeUtils.encodeBase64(privateKey.getEncoded()),
|
||||
};
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 将 Base64 公钥串,转化为公钥对象
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public static PublicKey toPublicKey(String publicKey) {
|
||||
try {
|
||||
KeyFactory keyFactory = KeyFactory.getInstance(RSA);
|
||||
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(EncodeUtils.decodeBase64(publicKey));
|
||||
return keyFactory.generatePublic(publicKeySpec);
|
||||
} catch (InvalidKeySpecException | NoSuchAlgorithmException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 将 Base64 私钥串,转化为私钥对象
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public static PrivateKey toPrivateKey(String privateKey) {
|
||||
try {
|
||||
KeyFactory keyFactory = KeyFactory.getInstance(RSA);
|
||||
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(EncodeUtils.decodeBase64(privateKey));
|
||||
return keyFactory.generatePrivate(pkcs8EncodedKeySpec);
|
||||
} catch (InvalidKeySpecException | NoSuchAlgorithmException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 公钥加密
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public static byte[] encode(byte[] input, PublicKey publicKey) {
|
||||
try {
|
||||
Cipher encryptCipher = Cipher.getInstance(RSA);
|
||||
encryptCipher.init(Cipher.ENCRYPT_MODE, publicKey);
|
||||
return encryptCipher.doFinal(input);
|
||||
} catch (InvalidKeyException | NoSuchPaddingException | IllegalBlockSizeException |
|
||||
NoSuchAlgorithmException | BadPaddingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 公钥加密
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public static String encode(String input, PublicKey publicKey) {
|
||||
if (STORE_BASE64) {
|
||||
return EncodeUtils.encodeBase64(encode(input.getBytes(StandardCharsets.UTF_8), publicKey));
|
||||
}
|
||||
return EncodeUtils.encodeHex(encode(input.getBytes(StandardCharsets.UTF_8), publicKey));
|
||||
}
|
||||
|
||||
/**
|
||||
* 私钥解密
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public static byte[] decode(byte[] input, PrivateKey privateKey) {
|
||||
return decodeImpl(input, privateKey);
|
||||
}
|
||||
|
||||
private static byte[] decodeImpl(byte[] input, PrivateKey privateKey) {
|
||||
try {
|
||||
Cipher decryptCipher = Cipher.getInstance(RSA);
|
||||
decryptCipher.init(Cipher.DECRYPT_MODE, privateKey);
|
||||
return decryptCipher.doFinal(input);
|
||||
} catch (InvalidKeyException | NoSuchPaddingException | IllegalBlockSizeException |
|
||||
NoSuchAlgorithmException | BadPaddingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 私钥解密
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public static String decode(String input, PrivateKey privateKey) {
|
||||
if (STORE_BASE64) {
|
||||
return new String(decode(EncodeUtils.decodeBase64(input), privateKey), StandardCharsets.UTF_8);
|
||||
}
|
||||
return new String(decode(EncodeUtils.decodeHex(input), privateKey), StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
/**
|
||||
* 私钥签名
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public static byte[] sign(byte[] input, PrivateKey privateKey) {
|
||||
try {
|
||||
Signature sig = Signature.getInstance(algorithm);
|
||||
sig.initSign(privateKey);
|
||||
sig.update(input);
|
||||
return sig.sign();
|
||||
} catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 私钥签名
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public static String sign(String input, PrivateKey privateKey) {
|
||||
if (STORE_BASE64) {
|
||||
return EncodeUtils.encodeBase64(sign(input.getBytes(StandardCharsets.UTF_8), privateKey));
|
||||
}
|
||||
return EncodeUtils.encodeHex(sign(input.getBytes(StandardCharsets.UTF_8), privateKey));
|
||||
}
|
||||
|
||||
/**
|
||||
* 公钥验签
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public static boolean verify(byte[] input, PublicKey publicKey, byte[] signature) {
|
||||
try {
|
||||
Signature sig = Signature.getInstance(algorithm);
|
||||
sig.initVerify(publicKey);
|
||||
sig.update(input);
|
||||
return sig.verify(signature);
|
||||
} catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 公钥验签
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public static boolean verify(String input, PublicKey publicKey, String signature) {
|
||||
if (STORE_BASE64) {
|
||||
return verify(input.getBytes(StandardCharsets.UTF_8), publicKey, EncodeUtils.decodeBase64(signature));
|
||||
}
|
||||
return verify(input.getBytes(StandardCharsets.UTF_8), publicKey, EncodeUtils.decodeHex(signature));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -7,6 +7,9 @@ package com.jeesite.common.io;
|
||||
import com.jeesite.common.codec.EncodeUtils;
|
||||
import com.jeesite.common.collect.ListUtils;
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
import jakarta.servlet.ServletOutputStream;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import net.sf.jmimemagic.Magic;
|
||||
import net.sf.jmimemagic.MagicMatch;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
@@ -15,9 +18,6 @@ import org.slf4j.LoggerFactory;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
|
||||
import javax.activation.MimetypesFileTypeMap;
|
||||
import javax.servlet.ServletOutputStream;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.*;
|
||||
import java.util.Enumeration;
|
||||
import java.util.List;
|
||||
|
||||
@@ -103,9 +103,5 @@ public class IOUtils extends org.apache.commons.io.IOUtils {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public IOUtils() {
|
||||
// empty
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,6 +4,7 @@
|
||||
*/
|
||||
package com.jeesite.common.io;
|
||||
|
||||
import com.jeesite.common.codec.EncodeUtils;
|
||||
import com.jeesite.common.collect.SetUtils;
|
||||
import com.jeesite.common.lang.ObjectUtils;
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
@@ -16,8 +17,6 @@ import org.springframework.core.io.Resource;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
@@ -36,10 +35,10 @@ public class PropertiesUtils {
|
||||
|
||||
// 默认加载的文件,可通过继承覆盖(若有相同Key,优先加载后面的)
|
||||
public static final String[] DEFAULT_CONFIG_FILE = new String[]{
|
||||
"classpath:config/application.yml", "classpath:application.yml",
|
||||
"classpath:config/bootstrap.yml", "classpath:bootstrap.yml",
|
||||
"file:config/application.yml", "file:application.yml",
|
||||
"file:config/bootstrap.yml", "file:bootstrap.yml",
|
||||
"classpath:application.yml", "classpath:config/application.yml",
|
||||
"classpath:bootstrap.yml", "classpath:config/bootstrap.yml",
|
||||
"file:application.yml", "file:config/application.yml",
|
||||
"file:bootstrap.yml", "file:config/bootstrap.yml",
|
||||
};
|
||||
|
||||
private static final Logger logger = PropertiesUtils.initLogger();
|
||||
@@ -65,7 +64,9 @@ public class PropertiesUtils {
|
||||
//configSet.add("classpath:config/jeesite.yml");
|
||||
// 获取全局设置默认的配置文件(以下是支持环境配置的属性文件)
|
||||
Set<String> set = SetUtils.newLinkedHashSet();
|
||||
set.addAll(Arrays.asList(DEFAULT_CONFIG_FILE));
|
||||
for (String configFile : DEFAULT_CONFIG_FILE){
|
||||
set.add(configFile);
|
||||
}
|
||||
// 获取 spring.config.location 外部自定义的配置文件
|
||||
String customConfigs = System.getProperty("spring.config.location");
|
||||
if (StringUtils.isNotBlank(customConfigs)){
|
||||
@@ -80,7 +81,7 @@ public class PropertiesUtils {
|
||||
}
|
||||
}
|
||||
// 获取 spring.profiles.active 活动环境名称的配置文件
|
||||
String[] configFiles = set.toArray(new String[0]);
|
||||
String[] configFiles = set.toArray(new String[set.size()]);
|
||||
String profiles = System.getProperty("spring.profiles.active");
|
||||
if (StringUtils.isBlank(profiles)){
|
||||
PropertiesUtils propsTemp = new PropertiesUtils(configFiles);
|
||||
@@ -100,7 +101,7 @@ public class PropertiesUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
configFiles = configSet.toArray(new String[0]);
|
||||
configFiles = configSet.toArray(new String[configSet.size()]);
|
||||
logger.debug("Trying: {}", (Object)configFiles);
|
||||
INSTANCE = new PropertiesUtils(configFiles);
|
||||
}
|
||||
@@ -114,11 +115,12 @@ public class PropertiesUtils {
|
||||
Resource resource = ResourceUtils.getResource(location);
|
||||
if (resource.exists()){
|
||||
if (location.endsWith(".properties")){
|
||||
try (InputStreamReader is = new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8)){
|
||||
try (InputStreamReader is = new InputStreamReader(resource.getInputStream(), EncodeUtils.UTF_8)){
|
||||
properties.load(is);
|
||||
configSet.add(location);
|
||||
} catch (IOException e) {
|
||||
logger.error("Load {} failure.", location, e);
|
||||
System.err.println("Load " + location + " failure.");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
else if (location.endsWith(".yml")){
|
||||
@@ -131,7 +133,8 @@ public class PropertiesUtils {
|
||||
}
|
||||
configSet.add(location);
|
||||
} catch (Exception e) {
|
||||
logger.error("Load {} failure.", location, e);
|
||||
System.err.println("Load " + location + " failure.");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -171,7 +174,7 @@ public class PropertiesUtils {
|
||||
private static final Pattern p1 = Pattern.compile("\\$\\{.*?\\}");
|
||||
|
||||
/**
|
||||
* 获取属性值,取不到从System.getProperty和System.getenv获取,都取不到返回null
|
||||
* 获取属性值,取不到从System.getProperty()获取,都取不到返回null
|
||||
*/
|
||||
public String getProperty(String key) {
|
||||
if (environment != null){
|
||||
@@ -193,10 +196,9 @@ public class PropertiesUtils {
|
||||
String systemProperty = System.getProperty(key);
|
||||
if (systemProperty != null) {
|
||||
return systemProperty;
|
||||
}else{
|
||||
return System.getenv(key);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -313,6 +315,7 @@ public class PropertiesUtils {
|
||||
|
||||
/**
|
||||
* 设置环境属性
|
||||
* @param environment
|
||||
*/
|
||||
public static void setEnvironment(Environment environment) {
|
||||
PropertiesUtils.environment = environment;
|
||||
|
||||
@@ -4,11 +4,10 @@
|
||||
*/
|
||||
package com.jeesite.common.lang;
|
||||
|
||||
import com.jeesite.common.utils.LocaleUtils;
|
||||
import org.apache.commons.lang3.time.FastDateFormat;
|
||||
|
||||
import java.lang.management.ManagementFactory;
|
||||
import java.text.ParsePosition;
|
||||
import java.text.ParseException;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
@@ -18,14 +17,14 @@ import java.util.Date;
|
||||
* @version 2017-1-4
|
||||
*/
|
||||
public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
||||
|
||||
|
||||
private static final String[] parsePatterns = {
|
||||
"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM-dd HH", "yyyy-MM",
|
||||
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM/dd HH", "yyyy/MM",
|
||||
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM.dd HH", "yyyy.MM",
|
||||
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM.dd HH", "yyyy.MM",
|
||||
"yyyy年MM月dd日", "yyyy年MM月dd日 HH时mm分ss秒", "yyyy年MM月dd日 HH时mm分", "yyyy年MM月dd日 HH时", "yyyy年MM月",
|
||||
"yyyyMMdd", "yyyyMM", "yyyy", "yyyy-MM-dd'T'HH:mm:ss'Z'"};
|
||||
|
||||
"yyyyMMdd", "yyyyMM", "yyyy"};
|
||||
|
||||
/**
|
||||
* 得到日期字符串 ,转换格式(yyyy-MM-dd)
|
||||
*/
|
||||
@@ -46,12 +45,15 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
||||
public static String formatDate(Date date, String pattern) {
|
||||
String formatDate = null;
|
||||
if (date != null){
|
||||
// if (StringUtils.isNotBlank(pattern)) {
|
||||
// formatDate = DateFormatUtils.format(date, pattern);
|
||||
// } else {
|
||||
// formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");
|
||||
// }
|
||||
if (StringUtils.isBlank(pattern)) {
|
||||
pattern = "yyyy-MM-dd";
|
||||
}
|
||||
// formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");
|
||||
formatDate = FastDateFormat.getInstance(pattern,
|
||||
LocaleUtils.getTimeZone(), LocaleUtils.getLocale()).format(date);
|
||||
formatDate = FastDateFormat.getInstance(pattern).format(date);
|
||||
}
|
||||
return formatDate;
|
||||
}
|
||||
@@ -75,8 +77,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
||||
*/
|
||||
public static String getDate(String pattern) {
|
||||
// return DateFormatUtils.format(new Date(), pattern);
|
||||
return FastDateFormat.getInstance(pattern,
|
||||
LocaleUtils.getTimeZone(), LocaleUtils.getLocale()).format(new Date());
|
||||
return FastDateFormat.getInstance(pattern).format(new Date());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -87,12 +88,11 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
||||
* @return
|
||||
*/
|
||||
public static String getDate(String pattern, int amont, int type) {
|
||||
Calendar calendar = Calendar.getInstance(LocaleUtils.getTimeZone(), LocaleUtils.getLocale());
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(new Date());
|
||||
calendar.add(type, amont);
|
||||
// return DateFormatUtils.format(calendar.getTime(), pattern);
|
||||
return FastDateFormat.getInstance(pattern,
|
||||
LocaleUtils.getTimeZone(), LocaleUtils.getLocale()).format(calendar.getTime());
|
||||
return FastDateFormat.getInstance(pattern).format(calendar.getTime());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -138,43 +138,17 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期型字符串转化为日期对象,使用默认格式集
|
||||
* 日期型字符串转化为日期 格式 see to DateUtils#parsePatterns
|
||||
*/
|
||||
public static Date parseDate(Object str) {
|
||||
if (str == null){
|
||||
return null;
|
||||
}
|
||||
String dateStr = str.toString();
|
||||
if (StringUtils.isBlank(dateStr)){
|
||||
try {
|
||||
return parseDate(str.toString(), parsePatterns);
|
||||
} catch (ParseException e) {
|
||||
return null;
|
||||
}
|
||||
return parseDate(dateStr, parsePatterns);
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期型字符串转化为日期对象,指定日期解析格式
|
||||
*/
|
||||
public static Date parseDate(final String str, final String... parsePatterns) {
|
||||
// try {
|
||||
// return DateUtils.parseDate(str, Locale.getDefault(), parsePatterns);
|
||||
// } catch (ParseException e) {
|
||||
// return null;
|
||||
// }
|
||||
ParsePosition pos = new ParsePosition(0);
|
||||
Calendar calendar = Calendar.getInstance(LocaleUtils.getTimeZone(), LocaleUtils.getLocale());
|
||||
for (final String parsePattern : parsePatterns) {
|
||||
FastDateFormat format = FastDateFormat.getInstance(parsePattern);
|
||||
calendar.clear();
|
||||
try {
|
||||
if (format.parse(str, pos, calendar) && pos.getIndex() == str.length()) {
|
||||
return calendar.getTime();
|
||||
}
|
||||
} catch (final IllegalArgumentException ignored) {
|
||||
// leniency is preventing calendar from being set
|
||||
}
|
||||
pos.setIndex(0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -254,7 +228,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
||||
* @return
|
||||
*/
|
||||
public static int getWeekOfYear(Date date){
|
||||
Calendar cal = Calendar.getInstance(LocaleUtils.getTimeZone(), LocaleUtils.getLocale());
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(date);
|
||||
return cal.get(Calendar.WEEK_OF_YEAR);
|
||||
}
|
||||
@@ -268,7 +242,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
||||
if (date == null){
|
||||
return null;
|
||||
}
|
||||
Calendar calendar = Calendar.getInstance(LocaleUtils.getTimeZone(), LocaleUtils.getLocale());
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(date);
|
||||
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||
calendar.set(Calendar.MINUTE, 0);
|
||||
@@ -286,7 +260,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
||||
if (date == null){
|
||||
return null;
|
||||
}
|
||||
Calendar calendar = Calendar.getInstance(LocaleUtils.getTimeZone(), LocaleUtils.getLocale());
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(date);
|
||||
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
||||
calendar.set(Calendar.MINUTE, 59);
|
||||
@@ -341,9 +315,5 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
||||
}
|
||||
return new Date[]{beginDate, endDate};
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public DateUtils() {
|
||||
// empty
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
*/
|
||||
package com.jeesite.common.lang;
|
||||
|
||||
import javax.servlet.RequestDispatcher;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.RequestDispatcher;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
@@ -28,8 +28,6 @@ public class ExceptionUtils {
|
||||
ex = (Throwable) request.getAttribute("exception");
|
||||
} else if (request.getAttribute(RequestDispatcher.ERROR_EXCEPTION) != null) {
|
||||
ex = (Throwable) request.getAttribute(RequestDispatcher.ERROR_EXCEPTION);
|
||||
} else if (request.getAttribute("org.springframework.web.servlet.DispatcherServlet.EXCEPTION") != null) {
|
||||
ex = (Throwable) request.getAttribute("org.springframework.web.servlet.DispatcherServlet.EXCEPTION");
|
||||
}
|
||||
return ex;
|
||||
}
|
||||
@@ -37,19 +35,16 @@ public class ExceptionUtils {
|
||||
public static String getExceptionMessage(Throwable ex){
|
||||
String message = null;
|
||||
Throwable e = ex;
|
||||
while (true) {
|
||||
if (e == null) {
|
||||
while (true){
|
||||
if (e == null){
|
||||
break;
|
||||
}
|
||||
if (StringUtils.startsWith(e.getMessage(), "msg:")) {
|
||||
if (StringUtils.startsWith(e.getMessage(), "msg:")){
|
||||
message = StringUtils.replace(e.getMessage(), "msg:", "");
|
||||
} else if ("com.jeesite.common.service.ServiceException".equals(e.getClass().getName())){
|
||||
break;
|
||||
}else if ("com.jeesite.common.service.ServiceException"
|
||||
.equals(e.getClass().getName())){
|
||||
message = e.getMessage();
|
||||
}
|
||||
if (StringUtils.isNotBlank(message)){
|
||||
if (e.getSuppressed() != null && e.getCause() != null){
|
||||
ex.addSuppressed(e.getCause());
|
||||
}
|
||||
break;
|
||||
}
|
||||
e = e.getCause();
|
||||
|
||||
@@ -119,9 +119,5 @@ public class NumberUtils extends org.apache.commons.lang3.math.NumberUtils {
|
||||
}
|
||||
return df.format(data);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public NumberUtils() {
|
||||
// empty
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -5,11 +5,9 @@
|
||||
package com.jeesite.common.lang;
|
||||
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.nustaq.serialization.FSTConfiguration;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.core.NamedThreadLocal;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
@@ -25,13 +23,13 @@ import java.lang.reflect.InvocationTargetException;
|
||||
public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(ObjectUtils.class);
|
||||
private static final boolean isJavaSerialize;
|
||||
|
||||
private static final boolean isJavaSerialize;
|
||||
|
||||
static {
|
||||
String[] ver = StringUtils.split(System.getProperty("java.version"), StringUtils.DOT);
|
||||
isJavaSerialize = ver.length > 0 && Integer.parseInt(ver[0]) > 1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 转换为 Double 类型
|
||||
*/
|
||||
@@ -73,37 +71,14 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
|
||||
* 转换为 Long 类型
|
||||
*/
|
||||
public static Long toLong(final Object val) {
|
||||
if (val == null) {
|
||||
return 0L;
|
||||
}
|
||||
try {
|
||||
String str = val.toString();
|
||||
if (StringUtils.isBlank(str)) {
|
||||
return 0L;
|
||||
}
|
||||
if (StringUtils.contains(str, "*")) {
|
||||
Long number = null, d = null;
|
||||
for (String s : StringUtils.split(str, "*")) {
|
||||
d = Long.parseLong(StringUtils.trim(s));
|
||||
if (number == null) {
|
||||
number = d;
|
||||
} else {
|
||||
number *= d;
|
||||
}
|
||||
}
|
||||
return number;
|
||||
}
|
||||
return Long.parseLong(StringUtils.trim(str));
|
||||
} catch (Exception e) {
|
||||
return 0L;
|
||||
}
|
||||
return toDouble(val).longValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换为 Integer 类型
|
||||
*/
|
||||
public static Integer toInteger(final Object val) {
|
||||
return toLong(val).intValue();
|
||||
return toDouble(val).intValue();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -176,7 +151,8 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
|
||||
return null;
|
||||
}
|
||||
byte[] bytes = ObjectUtils.serialize(source);
|
||||
return ObjectUtils.unserialize(bytes);
|
||||
Object target = ObjectUtils.unserialize(bytes);
|
||||
return target;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -186,11 +162,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
|
||||
*/
|
||||
public static byte[] serialize(Object object) {
|
||||
try {
|
||||
if (isJavaSerialize) {
|
||||
return ObjectUtils.serializeJava(object);
|
||||
}else {
|
||||
return ObjectUtils.serializeFst(object);
|
||||
}
|
||||
return ObjectUtils.serializeJava(object);
|
||||
} catch (Exception e) {
|
||||
logger.error("serialize: {}", e.getMessage());
|
||||
}
|
||||
@@ -204,11 +176,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
|
||||
*/
|
||||
public static Object unserialize(byte[] bytes) {
|
||||
try {
|
||||
if (isJavaSerialize) {
|
||||
return ObjectUtils.unserializeJava(bytes);
|
||||
}else {
|
||||
return ObjectUtils.unserializeFst(bytes);
|
||||
}
|
||||
return ObjectUtils.unserializeJava(bytes);
|
||||
} catch (Exception e) {
|
||||
logger.error("unserialize: {}", e.getMessage());
|
||||
}
|
||||
@@ -265,50 +233,50 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
|
||||
}
|
||||
return object;
|
||||
}
|
||||
|
||||
private static ThreadLocal<FSTConfiguration> fstConfiguration =
|
||||
new NamedThreadLocal<FSTConfiguration>("FSTConfiguration") {
|
||||
@Override
|
||||
public FSTConfiguration initialValue() {
|
||||
return FSTConfiguration.createDefaultConfiguration();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* FST 序列化对象
|
||||
* @param object
|
||||
* @return
|
||||
*/
|
||||
public static byte[] serializeFst(Object object) {
|
||||
if (object == null){
|
||||
return null;
|
||||
}
|
||||
long beginTime = System.currentTimeMillis();
|
||||
byte[] bytes = fstConfiguration.get().asByteArray(object);
|
||||
long totalTime = System.currentTimeMillis() - beginTime;
|
||||
if (totalTime > 30000){
|
||||
logger.warn(object.getClass() + " fst serialize time: " + TimeUtils.formatTime(totalTime));
|
||||
}
|
||||
return bytes;
|
||||
}
|
||||
|
||||
/**
|
||||
* FST 反序列化对象
|
||||
* @param bytes
|
||||
* @return
|
||||
*/
|
||||
public static Object unserializeFst(byte[] bytes) {
|
||||
if (bytes == null){
|
||||
return null;
|
||||
}
|
||||
long beginTime = System.currentTimeMillis();
|
||||
Object object = fstConfiguration.get().asObject(bytes);
|
||||
long totalTime = System.currentTimeMillis() - beginTime;
|
||||
if (totalTime > 30000 && object != null){
|
||||
logger.warn(object.getClass() + " fst unserialize time: " + TimeUtils.formatTime(totalTime));
|
||||
}
|
||||
return object;
|
||||
}
|
||||
// private static ThreadLocal<FSTConfiguration> fstConfiguration =
|
||||
// new NamedThreadLocal<FSTConfiguration>("FSTConfiguration") {
|
||||
// @Override
|
||||
// public FSTConfiguration initialValue() {
|
||||
// return FSTConfiguration.createDefaultConfiguration();
|
||||
// }
|
||||
// };
|
||||
//
|
||||
// /**
|
||||
// * FST 序列化对象
|
||||
// * @param object
|
||||
// * @return
|
||||
// */
|
||||
// public static byte[] serializeFst(Object object) {
|
||||
// if (object == null){
|
||||
// return null;
|
||||
// }
|
||||
// long beginTime = System.currentTimeMillis();
|
||||
// byte[] bytes = fstConfiguration.get().asByteArray(object);
|
||||
// long totalTime = System.currentTimeMillis() - beginTime;
|
||||
// if (totalTime > 30000){
|
||||
// logger.warn(object.getClass() + " fst serialize time: " + TimeUtils.formatTime(totalTime));
|
||||
// }
|
||||
// return bytes;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * FST 反序列化对象
|
||||
// * @param bytes
|
||||
// * @return
|
||||
// */
|
||||
// public static Object unserializeFst(byte[] bytes) {
|
||||
// if (bytes == null){
|
||||
// return null;
|
||||
// }
|
||||
// long beginTime = System.currentTimeMillis();
|
||||
// Object object = fstConfiguration.get().asObject(bytes);
|
||||
// long totalTime = System.currentTimeMillis() - beginTime;
|
||||
// if (totalTime > 30000 && object != null){
|
||||
// logger.warn(object.getClass() + " fst unserialize time: " + TimeUtils.formatTime(totalTime));
|
||||
// }
|
||||
// return object;
|
||||
// }
|
||||
|
||||
// private static Pool<Kryo> kryoPool = new Pool<Kryo>(true, false, 8) {
|
||||
// protected Kryo create() {
|
||||
@@ -363,9 +331,5 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
|
||||
// inputPool.free(input);
|
||||
// }
|
||||
// }
|
||||
|
||||
@Deprecated
|
||||
public ObjectUtils() {
|
||||
// empty
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -415,9 +415,5 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public StringUtils() {
|
||||
// empty
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,9 +9,9 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include;
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.core.JsonParser.Feature;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.*;
|
||||
import com.fasterxml.jackson.databind.introspect.Annotated;
|
||||
import com.fasterxml.jackson.databind.introspect.AnnotatedClass;
|
||||
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
|
||||
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
|
||||
import com.fasterxml.jackson.databind.module.SimpleModule;
|
||||
@@ -20,7 +20,6 @@ import com.jeesite.common.codec.EncodeUtils;
|
||||
import com.jeesite.common.collect.ListUtils;
|
||||
import com.jeesite.common.io.PropertiesUtils;
|
||||
import com.jeesite.common.lang.DateUtils;
|
||||
import org.apache.commons.lang3.LocaleUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -28,6 +27,7 @@ import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.AnnotatedElement;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -52,102 +52,61 @@ public class JsonMapper extends ObjectMapper {
|
||||
}
|
||||
|
||||
public JsonMapper() {
|
||||
// 日志类型格式化处理
|
||||
this.setLocaleTimeZoneDateFormat();
|
||||
// Spring ObjectMapper 初始化配置,支持 @JsonView
|
||||
new Jackson2ObjectMapperBuilder().configure(this);
|
||||
// 为Null时不序列化
|
||||
this.setSerializationInclusion(Include.NON_NULL);
|
||||
// 允许单引号
|
||||
this.configure(Feature.ALLOW_SINGLE_QUOTES, true);
|
||||
// 允许不带引号的字段名称
|
||||
this.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
|
||||
// 遇到空值处理为空串
|
||||
// 设置默认时区
|
||||
this.setDefaultTimeZone();
|
||||
// 设置默认日期格式
|
||||
this.setDefaultDateFormat();
|
||||
// 遇到空值处理为空串
|
||||
this.enabledNullValueToEmpty();
|
||||
// 设置输入时忽略在JSON字符串中存在但Java对象实际没有的属性
|
||||
this.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
|
||||
// Spring ObjectMapper 初始化配置,支持 @JsonView
|
||||
new Jackson2ObjectMapperBuilder().configure(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* 日志类型格式化处理
|
||||
* 开启日期类型默认格式化
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public JsonMapper setLocaleTimeZoneDateFormat(){
|
||||
this.setLocale(LocaleUtils.toLocale(PropertiesUtils.getInstance()
|
||||
.getProperty("lang.defaultLocale", "zh_CN")));
|
||||
public JsonMapper setDefaultTimeZone(){
|
||||
this.setTimeZone(TimeZone.getTimeZone(PropertiesUtils.getInstance()
|
||||
.getProperty("lang.defaultTimeZone", "GMT+08:00")));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启日期类型默认格式化
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public JsonMapper setDefaultDateFormat(){
|
||||
this.setDateFormat(new SimpleDateFormat(PropertiesUtils.getInstance()
|
||||
.getProperty("web.json.defaultDateFormat", "yyyy-MM-dd HH:mm:ss")));
|
||||
this.setAnnotationIntrospector(new JacksonAnnotationIntrospector() {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private final String[] pattern = new String[] {"yyyy", "MM", "dd", "HH", "mm", "ss", "SSS"};
|
||||
class JeeSiteJsonSerializer extends JsonSerializer<Date> {
|
||||
private final String pattern;
|
||||
private JeeSiteJsonSerializer(String pattern) {
|
||||
this.pattern = pattern;
|
||||
}
|
||||
@Override
|
||||
public void serialize(Date value, JsonGenerator gen, SerializerProvider provider) throws IOException {
|
||||
if (value != null){
|
||||
if (StringUtils.isNotBlank(pattern)) {
|
||||
gen.writeString(DateUtils.formatDate(value, pattern));
|
||||
} else {
|
||||
gen.writeString(DateUtils.formatDateTime(value));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
class JeeSiteJsonDeserializer extends JsonDeserializer<Date> {
|
||||
private final String pattern;
|
||||
private JeeSiteJsonDeserializer(String pattern) {
|
||||
this.pattern = pattern;
|
||||
}
|
||||
@Override
|
||||
public Date deserialize(JsonParser parser, DeserializationContext context) throws IOException {
|
||||
if (StringUtils.isNotBlank(pattern)) {
|
||||
return DateUtils.parseDate(parser.getText(), pattern);
|
||||
} else {
|
||||
return DateUtils.parseDate(parser.getText());
|
||||
}
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public Object findSerializer(Annotated a) {
|
||||
if (a instanceof AnnotatedMethod) {
|
||||
AnnotatedElement m = a.getAnnotated();
|
||||
JsonFormat jf = m.getAnnotation(JsonFormat.class);
|
||||
if (jf != null && StringUtils.containsAnyIgnoreCase(jf.pattern(), pattern)) {
|
||||
return new JeeSiteJsonSerializer(jf.pattern());
|
||||
}
|
||||
AnnotatedMethod am = (AnnotatedMethod) a;
|
||||
if (am.getRawReturnType() == Date.class) {
|
||||
return new JeeSiteJsonSerializer(null);
|
||||
}
|
||||
} else if (a instanceof AnnotatedClass) {
|
||||
if (a.getRawType() == Date.class) {
|
||||
return new JeeSiteJsonSerializer(null);
|
||||
if (jf != null) {
|
||||
return new JsonSerializer<Date>(){
|
||||
@Override
|
||||
public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
|
||||
if (value != null){
|
||||
jgen.writeString(DateUtils.formatDate(value, jf.pattern()));
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
return super.findSerializer(a);
|
||||
}
|
||||
@Override
|
||||
public Object findDeserializer(Annotated a) {
|
||||
if (a instanceof AnnotatedMethod) {
|
||||
AnnotatedElement m = a.getAnnotated();
|
||||
JsonFormat jf = m.getAnnotation(JsonFormat.class);
|
||||
if (jf != null && StringUtils.containsAnyIgnoreCase(jf.pattern(), pattern)) {
|
||||
return new JeeSiteJsonDeserializer(jf.pattern());
|
||||
}
|
||||
AnnotatedMethod am = (AnnotatedMethod) a;
|
||||
if (am.getParameterCount() > 0 && am.getParameterType(0).getRawClass() == Date.class) {
|
||||
return new JeeSiteJsonDeserializer(null);
|
||||
}
|
||||
} else if (a instanceof AnnotatedClass) {
|
||||
if (a.getRawType() == Date.class) {
|
||||
return new JeeSiteJsonDeserializer(null);
|
||||
}
|
||||
}
|
||||
return super.findDeserializer(a);
|
||||
}
|
||||
});
|
||||
return this;
|
||||
}
|
||||
@@ -162,7 +121,7 @@ public class JsonMapper extends ObjectMapper {
|
||||
public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
|
||||
jgen.writeString(StringUtils.EMPTY);
|
||||
}
|
||||
});
|
||||
});
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -193,7 +152,7 @@ public class JsonMapper extends ObjectMapper {
|
||||
try {
|
||||
return this.writeValueAsString(object);
|
||||
} catch (IOException e) {
|
||||
logger.warn("write to json string error: {}", object, e);
|
||||
logger.warn("write to json string error:" + object, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -207,7 +166,7 @@ public class JsonMapper extends ObjectMapper {
|
||||
try {
|
||||
return this.writerWithView(jsonView).writeValueAsString(object);
|
||||
} catch (IOException e) {
|
||||
logger.warn("write to json string error: {}", object, e);
|
||||
logger.warn("write to json string error:" + object, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -223,8 +182,8 @@ public class JsonMapper extends ObjectMapper {
|
||||
* 反序列化POJO或简单Collection如List<String>.
|
||||
* 如果JSON字符串为Null或"null"字符串, 返回Null.
|
||||
* 如果JSON字符串为"[]", 返回空集合.
|
||||
* 如需反序列化复杂Collection如List<MyBean>, 请使用fromJson(String, Class)
|
||||
* @see #fromJson(String, Class)
|
||||
* 如需反序列化复杂Collection如List<MyBean>, 请使用fromJson(String,JavaType)
|
||||
* @see #fromJson(String, JavaType)
|
||||
*/
|
||||
public <T> T fromJsonString(String jsonString, Class<T> clazz) {
|
||||
if (StringUtils.isEmpty(jsonString) || "<CLOB>".equals(jsonString)) {
|
||||
@@ -233,7 +192,7 @@ public class JsonMapper extends ObjectMapper {
|
||||
try {
|
||||
return this.readValue(jsonString, clazz);
|
||||
} catch (IOException e) {
|
||||
logger.warn("parse json string error: {}", jsonString, e);
|
||||
logger.warn("parse json string error:" + jsonString, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -250,7 +209,7 @@ public class JsonMapper extends ObjectMapper {
|
||||
try {
|
||||
return (T) this.readValue(jsonString, javaType);
|
||||
} catch (IOException e) {
|
||||
logger.warn("parse json string error: {}", jsonString, e);
|
||||
logger.warn("parse json string error:" + jsonString, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -271,8 +230,10 @@ public class JsonMapper extends ObjectMapper {
|
||||
public <T> T update(String jsonString, T object) {
|
||||
try {
|
||||
return (T) this.readerForUpdating(object).readValue(jsonString);
|
||||
} catch (JsonProcessingException e) {
|
||||
logger.warn("update json string:" + jsonString + " to object:" + object + " error.", e);
|
||||
} catch (Exception e) {
|
||||
logger.warn("update json string: {} to object: {} error.", jsonString, object, e);
|
||||
logger.warn("update json string:" + jsonString + " to object:" + object + " error.", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import com.jeesite.common.codec.EncodeUtils;
|
||||
import com.jeesite.common.io.PropertiesUtils;
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
|
||||
public class IpUtils {
|
||||
|
||||
|
||||
@@ -77,6 +77,7 @@ public class ReflectUtils {
|
||||
//Method method = getAccessibleMethodByName(object, methodName, 0);
|
||||
//if (method == null) { return; }
|
||||
//Class<?> returnType = method.getReturnType();
|
||||
System.out.println(object.getClass());
|
||||
MethodAccess ma = MethodAccess.get(object.getClass());
|
||||
Class<?> returnType = ma.getReturnTypes()[ma.getIndex(methodName)];
|
||||
childObj = returnType.getDeclaredConstructor().newInstance();
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.jeesite.common.utils;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
@@ -9,10 +11,11 @@ import java.util.Map;
|
||||
|
||||
/**
|
||||
* 身份证工具类
|
||||
*
|
||||
* @author June
|
||||
* @version 2010-06-17
|
||||
* @version 1.0, 2010-06-17
|
||||
*/
|
||||
public class IdcardUtils {
|
||||
public class IdcardUtils extends StringUtils {
|
||||
|
||||
/** 中国公民身份证号码最小长度。 */
|
||||
public static final int CHINA_ID_MIN_LENGTH = 15;
|
||||
|
||||
@@ -1,93 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
* No deletion without permission, or be held responsible to law.
|
||||
*/
|
||||
package com.jeesite.common.utils;
|
||||
|
||||
import com.jeesite.common.io.PropertiesUtils;
|
||||
import com.jeesite.common.web.http.ServletUtils;
|
||||
import org.springframework.context.i18n.TimeZoneAwareLocaleContext;
|
||||
import org.springframework.core.NamedThreadLocal;
|
||||
import org.springframework.web.servlet.LocaleContextResolver;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.Locale;
|
||||
import java.util.TimeZone;
|
||||
|
||||
/**
|
||||
* 本地化工具
|
||||
* @author ThinkGem
|
||||
* @version 2025-05-21
|
||||
*/
|
||||
public class LocaleUtils {
|
||||
|
||||
private static final Boolean LANG_ENABLED = PropertiesUtils.getInstance().getPropertyToBoolean("lang.enabled", "false");
|
||||
private static final ThreadLocal<TimeZoneAwareLocaleContext> timeZoneAwareLocaleContext = new NamedThreadLocal<>("TimeZoneAwareLocaleContext");
|
||||
private static LocaleContextResolver localeResolver;
|
||||
|
||||
/**
|
||||
* 获取当前 Locale 对象,获取顺序:请求 -> 会话 -> Cookie -> lang.defaultLocale
|
||||
*/
|
||||
public static Locale getLocale() {
|
||||
return getTimeZoneAwareLocaleContext().getLocale();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前 TimeZone 对象,获取顺序:请求 -> 会话 -> Cookie -> lang.defaultTimeZone
|
||||
*/
|
||||
public static TimeZone getTimeZone() {
|
||||
return getTimeZoneAwareLocaleContext().getTimeZone();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 TimeZoneAwareLocaleContext
|
||||
*/
|
||||
public static TimeZoneAwareLocaleContext getTimeZoneAwareLocaleContext() {
|
||||
TimeZoneAwareLocaleContext context = timeZoneAwareLocaleContext.get();
|
||||
if (context != null){
|
||||
return context;
|
||||
}
|
||||
if (LANG_ENABLED && localeResolver != null){
|
||||
HttpServletRequest request = ServletUtils.getRequest();
|
||||
if (request != null){
|
||||
context = (TimeZoneAwareLocaleContext)localeResolver.resolveLocaleContext(request);
|
||||
}
|
||||
}
|
||||
if (context == null){
|
||||
context = new TimeZoneAwareLocaleContext() {
|
||||
@Override
|
||||
public Locale getLocale() {
|
||||
return Locale.getDefault();
|
||||
}
|
||||
@Override
|
||||
public TimeZone getTimeZone() {
|
||||
return TimeZone.getDefault();
|
||||
}
|
||||
};
|
||||
}
|
||||
setTimeZoneAwareLocaleContext(context);
|
||||
return context;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置 TimeZoneAwareLocaleContext
|
||||
*/
|
||||
public static void setTimeZoneAwareLocaleContext(TimeZoneAwareLocaleContext context) {
|
||||
timeZoneAwareLocaleContext.set(context);
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理本地线程对象(请求结束时调用)
|
||||
*/
|
||||
public static void removeTimeZoneAwareLocaleContext() {
|
||||
timeZoneAwareLocaleContext.remove();
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置 LocaleContextResolver
|
||||
*/
|
||||
public static void setLocaleResolver(LocaleContextResolver localeResolver) {
|
||||
LocaleUtils.localeResolver = localeResolver;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -23,7 +23,7 @@ import org.apache.poi.xssf.usermodel.XSSFRichTextString;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.*;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
* No deletion without permission, or be held responsible to law.
|
||||
*/
|
||||
package com.jeesite.common.utils.excel.fieldtype;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
|
||||
/**
|
||||
* BigDecimal类型转换
|
||||
* @author ThinkGem
|
||||
* @version 2020-3-5
|
||||
* @example fieldType = BigDecimalType.class
|
||||
*/
|
||||
public class BigDecimalType implements FieldType {
|
||||
|
||||
/**
|
||||
* 获取对象值(导入)
|
||||
*/
|
||||
@Override
|
||||
public Object getValue(String val) {
|
||||
return new BigDecimal(val);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取对象值(导出)
|
||||
*/
|
||||
@Override
|
||||
public String setValue(Object val) {
|
||||
return val == null ? StringUtils.EMPTY : val.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取对象值格式(导出)
|
||||
*/
|
||||
@Override
|
||||
public String getDataFormat() {
|
||||
return "0.00";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -7,9 +7,9 @@ package com.jeesite.common.web;
|
||||
import com.jeesite.common.codec.EncodeUtils;
|
||||
import com.jeesite.common.io.PropertiesUtils;
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
import javax.servlet.http.Cookie;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.Cookie;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* Cookie工具类
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
package com.jeesite.common.web.http;
|
||||
|
||||
import com.jeesite.common.io.PropertiesUtils;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* 统一包装结果输出类:{ code: 200, msg: "", data: {} | [] }
|
||||
|
||||
@@ -12,15 +12,14 @@ import com.jeesite.common.lang.ExceptionUtils;
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
import com.jeesite.common.mapper.JsonMapper;
|
||||
import com.jeesite.common.mapper.XmlMapper;
|
||||
import jakarta.servlet.ServletRequest;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.apache.commons.lang3.Validate;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.util.AntPathMatcher;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
@@ -58,11 +57,6 @@ public class ServletUtils {
|
||||
// 是否打印错误信息参数到视图页面(生产环境关闭)
|
||||
private static final Boolean PRINT_ERROR_INFO = PROPS.getPropertyToBoolean("error.page.printErrorInfo", "true");
|
||||
|
||||
// 允许重定向的地址,不设置为全部允许,设置this只允许本项目内部跳转,多个用逗号隔开,例如:this,http://*.jeesite.com
|
||||
private static final String[] ALLOW_REDIRECTS = PROPS.getPropertyToArray("shiro.allowRedirects", "");
|
||||
private static final Boolean SCHEME_HTTPS = PROPS.getPropertyToBoolean("server.schemeHttps", "false");
|
||||
private static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
|
||||
|
||||
/**
|
||||
* 获取当前请求对象
|
||||
* web.xml: <listener><listener-class>
|
||||
@@ -390,15 +384,10 @@ public class ServletUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前请求的域名(含端口)
|
||||
* @author ThinkGem
|
||||
* 获取请求的域名(含端口)
|
||||
*/
|
||||
public static String getThisDomain(HttpServletRequest request) {
|
||||
String url = request.getRequestURL().toString();
|
||||
public static String getRequestDomain(String url) {
|
||||
String scheme = StringUtils.substringBefore(url, "://");
|
||||
if (SCHEME_HTTPS && StringUtils.equals(scheme, "http")) {
|
||||
scheme = "https";
|
||||
}
|
||||
String domain = StringUtils.substringAfter(url, "://");
|
||||
if (StringUtils.contains(domain, "/")) {
|
||||
domain = StringUtils.substringBefore(domain, "/");
|
||||
@@ -406,28 +395,6 @@ public class ServletUtils {
|
||||
return scheme + "://" + domain;
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证地址是否允许重定向
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public static boolean isAllowRedirects(HttpServletRequest request, String url) {
|
||||
if (ALLOW_REDIRECTS == null || ALLOW_REDIRECTS.length == 0) {
|
||||
return true;
|
||||
}
|
||||
boolean allow = false;
|
||||
for (String pattern : ALLOW_REDIRECTS) {
|
||||
String p = StringUtils.trim(pattern);
|
||||
if ("this".equals(p)) {
|
||||
p = getThisDomain(request);
|
||||
}
|
||||
if (PATH_MATCHER.match(p + "/**", url)){
|
||||
allow = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return allow;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得请求参数值
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*/
|
||||
package com.jeesite.common.web.http;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
|
||||
import eu.bitwalker.useragentutils.Browser;
|
||||
import eu.bitwalker.useragentutils.DeviceType;
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
* http://jeesite.com
|
||||
*/
|
||||
a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sortable {
|
||||
color:#1677ff;
|
||||
color:#1890ff;
|
||||
}
|
||||
.main-header .navbar {
|
||||
background: #1677ff;
|
||||
background: -webkit-gradient(linear, left bottom, right top, color-stop(0, #2684f5), color-stop(1, #1677ff));
|
||||
background: -ms-linear-gradient(left, #2684f5, #1677ff);
|
||||
background: -moz-linear-gradient(left top, #2684f5 0%, #1677ff 100%);
|
||||
background: -o-linear-gradient(#1677ff, #2684f5);
|
||||
background: #1890ff;
|
||||
background: -webkit-gradient(linear, left bottom, right top, color-stop(0, #2684f5), color-stop(1, #1890ff));
|
||||
background: -ms-linear-gradient(left, #2684f5, #1890ff);
|
||||
background: -moz-linear-gradient(left top, #2684f5 0%, #1890ff 100%);
|
||||
background: -o-linear-gradient(#1890ff, #2684f5);
|
||||
}
|
||||
.main-header .navbar .nav > li > a {
|
||||
color: #ffffff;
|
||||
@@ -54,10 +54,10 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
border-bottom: 0 solid transparent;
|
||||
}
|
||||
.main-header .logo:hover {
|
||||
background-color: #1677ff;
|
||||
background-color: #1890ff;
|
||||
}
|
||||
.main-header li.user-header {
|
||||
background-color: #1677ff;
|
||||
background-color: #1890ff;
|
||||
}
|
||||
.content-header {
|
||||
background: transparent;
|
||||
@@ -93,7 +93,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
background: #ffffff;
|
||||
}
|
||||
.sidebar-menu > li.active {
|
||||
border-left-color: #1677ff;
|
||||
border-left-color: #1890ff;
|
||||
}
|
||||
.sidebar-menu > li.active > a {
|
||||
font-weight: 600;
|
||||
@@ -154,7 +154,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
border-radius: 4px;
|
||||
}
|
||||
.skin-blue.layout-top-nav .main-header > .logo {
|
||||
background-color: #1677ff;
|
||||
background-color: #1890ff;
|
||||
color: #ffffff;
|
||||
border-bottom: 0 solid transparent;
|
||||
}
|
||||
@@ -164,7 +164,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
|
||||
.sidebar-menu {padding:0 8px 0 7px;}
|
||||
.sidebar-menu li>a>.pull-right-container {left:0;}
|
||||
.sidebar-menu .treeview-item.active>a {color:#1677ff;background-color:#e7f4ff;border-right:0;border-radius:6px;}
|
||||
.sidebar-menu .treeview-item.active>a {color:#1890ff;background-color:#e7f4ff;border-right:0;border-radius:6px;}
|
||||
|
||||
.content-wrapper, .right-side, body {background-color:#f0f2f5;}
|
||||
|
||||
@@ -189,13 +189,12 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
.select2-container--default .select2-results__option--highlighted[aria-selected],
|
||||
.pagination>.active>a, .pagination>.active>a:focus, .pagination>.active>a:hover,
|
||||
.pagination>.active>span, .pagination>.active>span:focus, .pagination>.active>span:hover,
|
||||
.wup_container .placeholder .webuploader-pick {background-color:#1677ff!important;border-color:#1677ff;}
|
||||
.form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#1677ff;}
|
||||
.wup_container .placeholder .webuploader-pick {background-color:#1890ff!important;border-color:#1890ff;}
|
||||
.form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#1890ff;}
|
||||
.form-unit {border-bottom:1px solid #eee;}
|
||||
.form-unit:before {background-color:#1677ff;}
|
||||
|
||||
.box-main>.box-header {border-bottom-color:#eeeeee;}
|
||||
.box-main>.box-header .box-title .fa {color:#1677ff;}
|
||||
.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,
|
||||
|
||||
@@ -2,37 +2,17 @@
|
||||
* http://jeesite.com
|
||||
*/
|
||||
a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sortable {
|
||||
color:#1677ff;
|
||||
color:#1890ff;
|
||||
}
|
||||
.main-header .navbar {
|
||||
background: #1677ff;
|
||||
background: -webkit-gradient(linear, left bottom, right top, color-stop(0, #2684f5), color-stop(1, #1677ff));
|
||||
background: -ms-linear-gradient(left, #2684f5, #1677ff);
|
||||
background: -moz-linear-gradient(left top, #2684f5 0%, #1677ff 100%);
|
||||
background: -o-linear-gradient(#1677ff, #2684f5);
|
||||
background: #1890ff;
|
||||
background: -webkit-gradient(linear, left bottom, right top, color-stop(0, #2684f5), color-stop(1, #1890ff));
|
||||
background: -ms-linear-gradient(left, #2684f5, #1890ff);
|
||||
background: -moz-linear-gradient(left top, #2684f5 0%, #1890ff 100%);
|
||||
background: -o-linear-gradient(#1890ff, #2684f5);
|
||||
}
|
||||
.main-header .navbar .nav > li > a {
|
||||
color: #ffffff;
|
||||
margin: 4.5px 2px 0;
|
||||
padding: 10px 13px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
.main-header .navbar .nav > li > a > i {
|
||||
font-size: 16px;
|
||||
vertical-align: bottom;
|
||||
line-height: 20px;
|
||||
}
|
||||
.navbar-nav>.user-menu>.dropdown-menu {
|
||||
margin-top: 7px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
.navbar-nav .treeview-menu,
|
||||
.navbar-custom-menu>.navbar-nav>li>.dropdown-menu {
|
||||
margin-top: 5px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
.navbar-nav .treeview-menu a {
|
||||
border-radius: 6px;
|
||||
}
|
||||
.main-header .navbar .nav > li > a:hover,
|
||||
.main-header .navbar .nav > li > a:active,
|
||||
@@ -74,10 +54,10 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
border-bottom: 0 solid transparent;
|
||||
}
|
||||
.main-header .logo:hover {
|
||||
background-color: #1677ff;
|
||||
background-color: #1890ff;
|
||||
}
|
||||
.main-header li.user-header {
|
||||
background-color: #1677ff;
|
||||
background-color: #1890ff;
|
||||
}
|
||||
.content-header {
|
||||
background: transparent;
|
||||
@@ -113,7 +93,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
background: #ffffff;
|
||||
}
|
||||
.sidebar-menu > li.active {
|
||||
border-left-color: #1677ff;
|
||||
border-left-color: #1890ff;
|
||||
}
|
||||
.sidebar-menu > li.active > a {
|
||||
font-weight: 600;
|
||||
@@ -174,7 +154,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
border-radius: 4px;
|
||||
}
|
||||
.skin-blue.layout-top-nav .main-header > .logo {
|
||||
background-color: #1677ff;
|
||||
background-color: #1890ff;
|
||||
color: #ffffff;
|
||||
border-bottom: 0 solid transparent;
|
||||
}
|
||||
@@ -184,12 +164,12 @@ 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:#1677ff;background-color:#e7f4ff;border-right:0;border-radius:6px;}
|
||||
.sidebar-menu .treeview-item.active>a {color:#1890ff;background-color:#e7f4ff;border-right:0;border-radius:6px;}
|
||||
|
||||
/* 页签添加内边距 */
|
||||
.content-wrapper, .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:12px 14px 12px 15px;}
|
||||
.tabpanel_content .html_content {padding:13px 14px 13px 15px;}
|
||||
.tabpanel_tab_content {border-bottom:0;}
|
||||
.ui-layout-resizer {background:none;}
|
||||
.content {padding:0!important}
|
||||
@@ -231,13 +211,12 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
.select2-container--default .select2-results__option--highlighted[aria-selected],
|
||||
.pagination>.active>a, .pagination>.active>a:focus, .pagination>.active>a:hover,
|
||||
.pagination>.active>span, .pagination>.active>span:focus, .pagination>.active>span:hover,
|
||||
.wup_container .placeholder .webuploader-pick {background-color:#1677ff!important;border-color:#1677ff!important;}
|
||||
.form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#1677ff;}
|
||||
.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;}
|
||||
.form-unit:before {background-color:#1677ff;}
|
||||
|
||||
.box-main>.box-header {border-bottom-color:#eeeeee;}
|
||||
.box-main>.box-header .box-title .fa {color:#1677ff;}
|
||||
.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,
|
||||
@@ -256,6 +235,3 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
.ui-jqgrid .ui-jqgrid-frozen .ui-jqgrid-htable th div {height:46px!important;}
|
||||
.ui-jqgrid .ui-jqgrid-htable th div {padding:15px 0 15px 2px;}
|
||||
.ui-jqgrid tr.jqgrow td {height: 49px;}
|
||||
.table-form .ui-jqgrid .ui-jqgrid-frozen .ui-jqgrid-htable th div {height:36px!important;}
|
||||
.table-form .ui-jqgrid .ui-jqgrid-htable th div {padding:9px 0 8px 2px;}
|
||||
.table-form .ui-jqgrid tr.jqgrow td {height: 39px;}
|
||||
|
||||
@@ -192,7 +192,6 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
.wup_container .placeholder .webuploader-pick {background-color:#1e5edb!important;border-color:#1e5edb!important;}
|
||||
.form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#1e5edb;}
|
||||
.form-unit {border-bottom:1px solid #eee;}
|
||||
.form-unit:before {background-color:#1e5edb;}
|
||||
|
||||
.box-main>.box-header {border-bottom-color:#eeeeee;}
|
||||
.box-main>.box-header .box-title .fa {color:#1e5edb;}
|
||||
@@ -200,7 +199,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
.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(5, 88, 255, 0.06);}
|
||||
.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-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,
|
||||
|
||||
@@ -13,26 +13,6 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
}
|
||||
.main-header .navbar .nav > li > a {
|
||||
color: #ffffff;
|
||||
margin: 4.5px 2px 0;
|
||||
padding: 10px 13px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
.main-header .navbar .nav > li > a > i {
|
||||
font-size: 16px;
|
||||
vertical-align: bottom;
|
||||
line-height: 20px;
|
||||
}
|
||||
.navbar-nav .treeview-menu,
|
||||
.navbar-nav>.user-menu>.dropdown-menu {
|
||||
margin-top: 7px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
.navbar-custom-menu>.navbar-nav>li>.dropdown-menu {
|
||||
margin-top: 5px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
.navbar-nav .treeview-menu a {
|
||||
border-radius: 6px;
|
||||
}
|
||||
.main-header .navbar .nav > li > a:hover,
|
||||
.main-header .navbar .nav > li > a:active,
|
||||
@@ -189,7 +169,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
/* 页签添加内边距 */
|
||||
.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:12px 14px 12px 15px;}
|
||||
.tabpanel_content .html_content {padding:13px 14px 13px 15px;}
|
||||
.tabpanel_tab_content {border-bottom:0;}
|
||||
.ui-layout-resizer {background:none;}
|
||||
.content {padding:0!important}
|
||||
@@ -234,7 +214,6 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
.wup_container .placeholder .webuploader-pick {background-color:#1e5edb!important;border-color:#1e5edb!important;}
|
||||
.form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#1e5edb;}
|
||||
.form-unit {border-bottom:1px solid #eee;}
|
||||
.form-unit:before {background-color:#1e5edb;}
|
||||
|
||||
.box-main>.box-header {border-bottom-color:#eeeeee;}
|
||||
.box-main>.box-header .box-title .fa {color:#1e5edb;}
|
||||
@@ -242,7 +221,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
.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(5, 88, 255, 0.06);}
|
||||
.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,
|
||||
@@ -256,6 +235,3 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
.ui-jqgrid .ui-jqgrid-frozen .ui-jqgrid-htable th div {height:46px!important;}
|
||||
.ui-jqgrid .ui-jqgrid-htable th div {padding:15px 0 15px 2px;}
|
||||
.ui-jqgrid tr.jqgrow td {height: 49px;}
|
||||
.table-form .ui-jqgrid .ui-jqgrid-frozen .ui-jqgrid-htable th div {height:36px!important;}
|
||||
.table-form .ui-jqgrid .ui-jqgrid-htable th div {padding:9px 0 8px 2px;}
|
||||
.table-form .ui-jqgrid tr.jqgrow td {height: 39px;}
|
||||
|
||||
@@ -167,7 +167,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
/* 页签添加内边距 */
|
||||
.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:12px 14px 12px 15px;}
|
||||
.tabpanel_content .html_content {padding:13px 14px 13px 15px;}
|
||||
.tabpanel_tab_content {border-bottom:0;}
|
||||
.ui-layout-resizer {background:none;}
|
||||
.content {padding:0!important}
|
||||
@@ -203,7 +203,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
::-webkit-scrollbar {background:#2a2a2a;}
|
||||
::-webkit-scrollbar-thumb {background:#6a6a6a;}
|
||||
|
||||
.btn-default {background-color:#323232;border-color:#323232;color:#b5b5b5;} .btn-default i {color:#dfdfdf;}
|
||||
.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,
|
||||
@@ -227,7 +227,6 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
.wup_container .placeholder .webuploader-pick {background-color:#3aa0ff!important;border-color:#3aa0ff!important;}
|
||||
.form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#2975bc;}
|
||||
.form-unit {border-bottom:1px solid #4e4e4e;}
|
||||
.form-unit:before {background-color:#2975bc;}
|
||||
|
||||
.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}
|
||||
@@ -297,9 +296,6 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
.ui-jqgrid .ui-jqgrid-frozen .ui-jqgrid-htable th div {height:46px!important;}
|
||||
.ui-jqgrid .ui-jqgrid-htable th div {padding:15px 0 15px 2px;}
|
||||
.ui-jqgrid tr.jqgrow td {height: 49px;}
|
||||
.table-form .ui-jqgrid .ui-jqgrid-frozen .ui-jqgrid-htable th div {height:36px!important;}
|
||||
.table-form .ui-jqgrid .ui-jqgrid-htable th div {padding:9px 0 8px 2px;}
|
||||
.table-form .ui-jqgrid tr.jqgrow td {height: 39px;}
|
||||
|
||||
.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;}
|
||||
|
||||
170
common/src/main/resources/static/jquery-ztree/3.5/log v3.x.txt
Normal file
170
common/src/main/resources/static/jquery-ztree/3.5/log v3.x.txt
Normal file
@@ -0,0 +1,170 @@
|
||||
=ZTree v3.x (JQuery Tree插件) 更新日志=
|
||||
|
||||
<font color="red">为了更好的优化及扩展zTree, 因此决定升级为v3.x,并且对之前的v2.x不兼容,会有很多结构上的修改,对此深感无奈与抱歉,请大家谅解。</font>
|
||||
<font color="red">
|
||||
|
||||
具体修改内容可参考:
|
||||
|
||||
* [http://www.ztree.me/v3/api.php zTree v3.0 API 文档]
|
||||
|
||||
* [http://www.ztree.me/v3/demo.php#_101 zTree v3.0 Demo 演示]
|
||||
|
||||
* [http://www.ztree.me/v3/faq.php#_101 zTree v3.0 常见问题]
|
||||
|
||||
</font>
|
||||
|
||||
<font color=#041594>
|
||||
*2013.03.11* v3.5.12
|
||||
* 【修改】由于 jquery 1.9 中移除 event.srcElement 导致的 js 报错的bug。
|
||||
* 【修改】在异步加载模式下,使用 moveNode 方法,且 moveType != "inner" 时,也会导致 targetNode 自动加载子节点的 bug
|
||||
* 【修改】对已经显示的节点(nochecked=true)使用 showNodes 或 showNode 方法后,导致勾选框出现的bug。
|
||||
* 【修改】对已经隐藏的节点(nochecked=false)使用 hideNodes 或 hideNode 方法后,导致勾选框消失的bug。
|
||||
* 【修改】getNodesByParamFuzzy 支持 大小写模糊。
|
||||
* 【修改】className 结构,提取 _consts.className.BUTTON / LEVEL / ICO_LOADING / SWITCH,便于快速修改 css 冲突。
|
||||
例如:与 WordPress 产生冲突后,直接修改 core 中的 "button" 和 "level" 即可。 Issue: https://github.com/zTree/zTree_v3/issues/2
|
||||
|
||||
*2013.01.28* v3.5.02
|
||||
* 【增加】setting.check.chkDisabledInherit 属性,用于设置 chkDisabled 在初始化时子节点是否可以继承父节点的 chkDisabled 属性
|
||||
* 【删除】内部 noSel 方法,使用 selectstart事件 和 "-moz-user-select"样式 处理禁止 节点文字被选择的功能
|
||||
* 【修改】不兼容 jQuery 1.9 的bug
|
||||
* 【修改】onDrop 的触发规则,保证异步加载模式下,可以在延迟加载结束后触发,避免 onDrop 中被拖拽的节点是已经更新后的数据。
|
||||
* 【修改】setChkDisabled 方法,增加 inheritParent, inheritChildren 参数设置是否让父子节点继承 disabled
|
||||
* 【修改】异步加载时 拼接参数的方法,由 string 修改为 json 对象
|
||||
* 【修正】1-2-3 3级节点时,如果 2级节点 全部设置为 nocheck 或 chkDisabled后,勾选3级节点时,1级节点的半勾选状态错误的 bug
|
||||
* 【修改】Demo: checkbox_nocheck.html & checkbox_chkDisabled.html;
|
||||
* 【修改】Demo: edit_super.html,增加 showRenameBtn & showRemoveBtn 的演示
|
||||
* 【修改】Demo: asyncForAll, 将 post 修改为 get;为了避免由于 IE10 的 bug 造成的客户端 以及 服务端崩溃
|
||||
IE10 ajax Post 无法提交参数的bug (http://bugs.jquery.com/ticket/12790)
|
||||
|
||||
*2012.12.21* v3.5.01
|
||||
* 【优化】clone 方法
|
||||
* 【修正】对于初始化无 children 属性的父节点进行 reAsyncChildNodes 操作时出错的 bug
|
||||
* 【修正】beforeRename 回调中使用 cancelEditName 方法后,再 return false 导致无法重新进行编辑的 bug
|
||||
* 【修正】exedit 扩展包让 setting.data.key.url 失效的 bug
|
||||
* 【修正】setting.check.autoCheckTrigger 设置为 true 时,onCheck 回调缺少 event 参数的 bug
|
||||
* 【修正】singlepath.html Demo 中的 bug
|
||||
|
||||
*2012.11.20* v3.5
|
||||
* 【优化】原先的 clone 方法 (特别感谢:愚人码头)
|
||||
* 【修改】隐藏父节点后,使用 expandAll 方法导致 父节点展开的 bug
|
||||
* 【修改】使用 jQuery v1.7 以上时,设置 zTree 容器 ul 隐藏(visibility: hidden;)后, 调用 selectNode 导致 IE 浏览器报错 Can't move focus 的 bug
|
||||
* 【修改】正在异步加载时,执行 destory 或 init 方法后,异步加载的节点影响新树的 bug
|
||||
* 【修改】方法 reAsyncChildNodes 在 refresh 的时候未清空内部 cache 导致内存泄露 的 bug
|
||||
* 【修改】批量节点拖拽到其他父节点内(inner)时,导致顺序反转 的 bug
|
||||
* 【修改】对于 使用 html格式的 节点无法触发 双击事件 的 bug
|
||||
* 【修改】onCheck 回调中的 event ,保证与触发事件中的 event 一致
|
||||
* 【修改】异步加载时,在 onNodeCreated 中执行 selectNode 后,导致节点折叠的 bug
|
||||
* 【修改】API 中 dataFilter 的参数名称 childNodes -> responseData
|
||||
* 【修改】API 中 iconSkin 的 举例内容
|
||||
* 【修改】API 中 chkDisabled 的说明
|
||||
* 【修改】Demo 中 index.html 内的 loadReady 重复绑定问题
|
||||
|
||||
*2012.09.03* v3.4
|
||||
* 【增加】 Demo —— OutLook 样式的左侧菜单
|
||||
* 【增加】清空 zTree 的方法 $.fn.zTree.destory(treeId) & zTree.destory()
|
||||
|
||||
* 【修改】core核心文件内 _eventProxy 方法中获取 tId 的方法,提高 DOM 的灵活性
|
||||
* 【修改】初始化时 多层父节点的 checkbox 半选状态计算错误的 bug
|
||||
* 【修改】同时选中父、子节点后,利用 getSelectedNodes 获取选中节点并利用 removeNode 删除时报错的 bug
|
||||
* 【修改】treeNode.chkDisabled / nocheck 属性,支持字符串格式的 "false"/"true"
|
||||
* 【修改】异步加载模式下无法利用 server 返回 xml 并且 在 dataFilter 中继续处理的 bug
|
||||
* 【修改】title 只允许设置为 string 类型值的问题。 修正后允许设置为 number 类型的值
|
||||
* 【修改】zId 计数规则 & Cache 保存,减少 IE9 的 bug 造成的内存泄漏
|
||||
* 【修改】API 页面搜索功能导致 IE 崩溃的 bug
|
||||
|
||||
*2012.07.16* v3.3
|
||||
* 【增加】扩展库 exhide -- 节点隐藏功能
|
||||
|
||||
* 【修改】getNodesByFilter 方法,添加 invokeParam 自定义参数
|
||||
* 【修改】拖拽中测试代码未删除,导致出现黄颜色的 iframe 遮罩层的 bug
|
||||
* 【修改】延迟加载方法 对于使用 expandAll 进行全部展开时,导致 onNodeCreated 回调 和 addDiyDom 方法触发过早的 bug
|
||||
* 【修改】使用 moveNode 移动尚未生成 DOM 的节点时,视图会出现异常的 bug
|
||||
* 【修改】删除节点后,相关节点的 isFirstNode 属性未重置的 bug
|
||||
* 【修改】getPreNode(),getNextNode() 方法在对于特殊情况时计算错误的 bug
|
||||
* 【修改】设置 title 之后,如果重新将 title 内容设置为空后,会导致无法更新 title 的 bug
|
||||
* 【修改】针对 setting.check.chkStyle=="radio" && setting.check.radioType=="all" 的情况时,getTreeCheckedNodes方法优化,找到一个结果就 break
|
||||
* 【修改】zTreeObj.getCheckedNodes(false) 在 radioType = "all" 时计算错误的 bug
|
||||
* 【修改】完善 API 中 beforeDrop / onDrop 的关于 treeId 的说明
|
||||
|
||||
*2012.05.13* v3.2
|
||||
* 【增加】setting.data.key.url 允许修改 treeNode.url 属性
|
||||
* 【增加】getNodesByFilter(filter, isSingle) 方法
|
||||
* 【增加】"与其他 DOM 拖拽互动" 的 Demo (http://www.ztree.me/v3/demo.php#_511)
|
||||
* 【增加】"异步加载模式下全部展开" 的 Demo (http://www.ztree.me/v3/demo.php#_512)
|
||||
|
||||
* 【修改】代码结构,将 addNodes、removeNode、removeChildNodes 方法 和 beforeRemove、onRemove 回调 转移到 core 内
|
||||
* 【修改】IE7的环境下无子节点的父节点反复展开出现多余空行的 bug
|
||||
* 【修改】异步加载时,如果出现网络异常等,会导致 图标显示错误的 bug
|
||||
* 【修改】dataFilter中 return null 导致异常 的 bug
|
||||
* 【修改】removeChildNodes 方法清空子节点后,无法正常添加节点的 bug
|
||||
* 【修改】moveNode 后节点中的自定义元素的事件丢失的 bug
|
||||
* 【修改】moveNode 方法中设置 isSilent = true 时,如果移动到已展开的 父节点后,出现异常的 bug
|
||||
* 【修改】onClick/onDrag/onDrop 回调中 event 不是原始 event 的 bug
|
||||
* 【修改】onDrop 回调中 当拖拽无效时,无法获得 treeNodes 的 bug
|
||||
* 【修改】onDrop 无法判断拖拽是 移动还是复制的问题
|
||||
* 【修改】未开启异步加载模式时,拖拽节点到子节点为空的父节点内时 出现异常 的 bug
|
||||
* 【修改】拖拽过程中,反复在 父节点图标上划动时,会出现停顿的 bug
|
||||
(需要css 结构—— button -> span.button)
|
||||
|
||||
* 【修改】拖拽操作时箭头 与 targetNode 背景之间的细节现实问题,便于用户拖拽时更容易区分 prev、next 和 inner 操作
|
||||
* 【修改】拖拽操作时IE6/7 下 在 节点<a> 右侧 10px 内会导致 targetNode = root 的 bug
|
||||
* 【修改】编辑模式下 默认的编辑按钮、删除按钮点击后,如果相应的 before 回调 return false 时会触发 onClick 回调的 bug
|
||||
|
||||
*2012.02.14* v3.1
|
||||
* 【增加】ajax 的参数 setting.async.contentType ,让提交参数适用于 json 数据提交 (主要适用于 .Net 的开发)。
|
||||
* 【增加】setting.edit.editNameSelectAll, 用于设定编辑节点名称时初次显示 input 后 text 内容为全选
|
||||
* 【修改】异步加载 规则,不再仅仅依靠父节点的子节点数来判定,增加内部属性 zAsync,保证默认状态下父节点及时无子节点也只能异步加载一次,除非使用 reAsyncChildNodes 方法强行控制异步加载。
|
||||
* 【修改】放大浏览器后导致 界面出现多余连接线的bug (需要更新:icon 图标和 css )
|
||||
* 【修改】在编辑状态,如果节点名超过编辑框宽度,左右键在框内不起作用的bug(IE 6 7 8 出现)
|
||||
CSS 中 filter:alpha(opacity=80) 造成的,应该是 ie 的 bug,需要更新 css 文件
|
||||
* 【修改】title 设置后,如果属性不存在,则默认为 title 为空,便于数据容错和用户灵活使用
|
||||
* 【修改】editName 方法如果针对尚未展开的 父节点,会导致该父节点自动展开的 bug
|
||||
* 【修改】title 中存在标签时导致 title 显示异常的bug(例如:蓝色字22%"'`<input/>`)
|
||||
|
||||
*2012.01.10* v3.0
|
||||
* 【增加】setting.check.autoCheckTrigger 默认值 false,可以设置联动选中时是否触发事件回调函数
|
||||
* 【增加】setting.callback.beforeEditName 回调函数,以保证用户可以捕获点击编辑按钮的事件
|
||||
* 【增加】treeNode.chkDisabled 属性,显示 checkbox 但是用户无法修改 checkbox 状态,并且该 checkbox 会影响父节点的 checkbox 的半选状态
|
||||
* 【增加】setting.check.nocheckInherit 属性,用户设置子节点继承 nocheck 属性,用于批量初始化节点,不适用于已经显示的节点
|
||||
* 【增加】setting.edit.drag.autoExpandTrigger 默认值 false,可以设置自动展开、折叠操作时是否触发事件回调函数
|
||||
* 【增加】setting.view.nameIsHTML 默认值 false,允许用户对 name 设置 DOM 对象
|
||||
* 【增加】treeNode.click 属性的说明文档
|
||||
* 【增加】treeObj.setChkDisabled 方法用于设置 checkbox / radio disabled 状态
|
||||
* 【增加】treeNode.halfCheck 属性,用于强制设定节点的半选状态
|
||||
|
||||
* 【修改】异步加载 & 编辑功能 共存时,拖拽节点 或 增加节点 导致 ie 上报错的 bug (apply 方法引起)
|
||||
* 【修改】zTreeStyle 样式冲突
|
||||
* 【修改】setting.data.key.title 默认值设置为 "",初始化时自动赋值为 setting.data.key.name 这样可避免希望 title 与 name 一致的用户反复设置参数
|
||||
* 【修改】点击叶子节点的连接线会触发 expand 事件的 bug
|
||||
* 【修改】IE 下 点击叶子节点连线会出现虚线框的 bug
|
||||
* 【修改】updateNode 导致 checkbox 半选状态错误的 bug
|
||||
* 【修改】checkNode 方法实现 toggle 操作, 取消 expandAll 方法的 toggle 操作
|
||||
* 【修改】zTree 内鼠标移动会抢页面上 input 内的焦点的 bug
|
||||
* 【修改】beforeRename / onRename 的触发方式——即使名称内容未改变也会触发,便于用户配合 beforeEditName 捕获编辑状态的结束,赋予用户更多调整规则的权利
|
||||
* 【修改】与 easyUI 共存时无法拖拽的bug
|
||||
* 【修改】beforeRename 在 Firefox 下如果利用 alert,会触发两次的 bug
|
||||
* 【修改】checkNode/expandNode/removeNode 方法,默认不触发回调函数,恢复 v2.6 的默认状态,同时增加 callbackFlag 参数,设置为 true 时,可以触发回调函数
|
||||
* 【修改】IE9下“根据参数查找节点”的Demo 报错:行14 重新声明常量属性(Demo 自身的问题,定义了history变量)
|
||||
* 【修改】初始化 zTree 时 onNodeCreated 事件回调函数中无法 用 getZTreeObj 获取 zTree 对象的 bug
|
||||
* 【修改】setting.edit.drag.prev / next / inner 参数,增加被拖拽的节点集合
|
||||
* 【修改】异步加载模式下,otherParam 使用Array数组会出错的 bug。例如: ["id", "1", "name", "test"]
|
||||
* 【修改】FireFox 下多棵树拖拽异常的 bug
|
||||
* 【修改】exedit 中调用 excheck库的方法时没有进行容错处理,导致如果只加入 exedit 而没有 excheck的时候,会出现 js 错误
|
||||
* 【修改】显示 checkbox 的 zTree 在编辑模式下,移动节点不会更新父节点半选状态的 bug
|
||||
* 【修改】treeNode.childs --> children; treeObject.removeChilds --> removeChildNodes; setting.data.key.childs --> children(英文不好惹的祸!抱歉了!)
|
||||
* 【修改】onRemove 回调中得到的 treeNode 还可以查找 preNode、nextNode 的bug。 修正后,getPreNode 和 getNextNode 都返回 null; 为了便于查找父节点,getParentNode 仍保留
|
||||
* 【修改】简单数据模式下,如果 id 与 pId 的值相同会导致该节点无法正常加载的 bug
|
||||
* 【修改】移动或删除中间节点会导致最后一个节点连接线图标变小的 bug
|
||||
|
||||
*2011.09.05* v3.0 beta
|
||||
* 【修改】zTree 的 js 代码架构全面修改,并且拆分
|
||||
* 【修改】zTree 的 css 样式全面修改,对浏览器可以更好地兼容,同时解决了以前1个像素差的问题
|
||||
* 【优化】采用延迟加载技术,一次性加载大数据量的节点性能飞速提升
|
||||
* 【增加】支持多节点同时选中、拖拽
|
||||
* 【增加】checkNode、checkAllNodes 等多种方法
|
||||
* 【增加】IE6 自动取消动画展开、折叠的功能
|
||||
* 【修正】异步加载 & 编辑模式 能够更完美的共存
|
||||
* 【修正】setting 配置更加合理,并且增加了若干项配置参数
|
||||
* 【修正】treeNode 节点数据的属性更加合理,并且增加了一些方法
|
||||
* 【修正】拖拽操作更加灵活方便,更容易制定自己的规则
|
||||
* 【修正】其他若干修改,详细对比请参考 url:[http://www.ztree.me/v3/faq.php#_101 zTree v3.0 常见问题]
|
||||
@@ -1,46 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
* No deletion without permission, or be held responsible to law.
|
||||
*/
|
||||
package com.jeesite.test.codec;
|
||||
|
||||
import com.jeesite.common.codec.EncodeUtils;
|
||||
import com.jeesite.common.codec.RsaUtils;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.PrivateKey;
|
||||
import java.security.PublicKey;
|
||||
|
||||
/**
|
||||
* RSA 加密解密工具类,非对称加密
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public class RsaUtilsTest {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
String s = "Hello word! 你好,中文!";
|
||||
System.out.println(s);
|
||||
|
||||
String[] keys = RsaUtils.genKeys();
|
||||
System.out.println("公钥:" + keys[0]);
|
||||
PublicKey publicKey = RsaUtils.toPublicKey(keys[0]);
|
||||
System.out.println("私钥:" + keys[1]);
|
||||
PrivateKey privateKey = RsaUtils.toPrivateKey(keys[1]);
|
||||
|
||||
byte[] data = RsaUtils.encode(s.getBytes(), publicKey);
|
||||
String dataString = EncodeUtils.encodeBase64(data);
|
||||
System.out.println("加密数据:" + dataString);
|
||||
|
||||
byte[] data2 = RsaUtils.decode(data, privateKey);
|
||||
String dataString2 = new String(data2, StandardCharsets.UTF_8);
|
||||
System.out.println("解密数据:" + dataString2);
|
||||
|
||||
byte[] sign = RsaUtils.sign(s.getBytes(), privateKey);
|
||||
System.out.println("数据签名:" + EncodeUtils.encodeBase64(sign));
|
||||
|
||||
boolean b = RsaUtils.verify(s.getBytes(), publicKey, sign);
|
||||
System.out.println("数据验签:" + b);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -18,7 +18,6 @@ public class DateUtilsTest {
|
||||
|
||||
public static void main(String[] args) throws ParseException {
|
||||
System.out.println(DateUtils.formatDate(DateUtils.parseDate("2023/3/6")));
|
||||
System.out.println(DateUtils.formatDateTime(DateUtils.parseDate("2023-3-6 12:30:15")));
|
||||
System.out.println(DateUtils.getDate("yyyy年MM月dd日 E"));
|
||||
long time = new Date().getTime()-DateUtils.parseDate("2023-11-19").getTime();
|
||||
System.out.println(time/(24*60*60*1000));
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
* No deletion without permission, or be held responsible to law.
|
||||
*/
|
||||
package com.jeesite.test.lang;
|
||||
|
||||
import com.jeesite.common.lang.ObjectUtils;
|
||||
|
||||
import java.text.ParseException;
|
||||
|
||||
/**
|
||||
* 对象操作工具测试类
|
||||
* @author ThinkGem
|
||||
* @version 2025-02-05
|
||||
*/
|
||||
public class ObjectUtilsTest {
|
||||
|
||||
public static void main(String[] args) throws ParseException {
|
||||
String str = "1738746499603094500";
|
||||
System.out.println(ObjectUtils.toDouble(str));
|
||||
System.out.println(ObjectUtils.toFloat(str));
|
||||
System.out.println(ObjectUtils.toLong(str));
|
||||
System.out.println(ObjectUtils.toInteger(str));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -8,7 +8,6 @@ import com.jeesite.common.collect.ListUtils;
|
||||
import com.jeesite.common.collect.MapUtils;
|
||||
import com.jeesite.common.mapper.JsonMapper;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -31,7 +30,6 @@ public class JsonMapperTest {
|
||||
map.put("pId", 1);
|
||||
map.put("name", "你好");
|
||||
map.put("open", true);
|
||||
map.put("date", new Date());
|
||||
list.add(map);
|
||||
String json = JsonMapper.toJson(list);
|
||||
System.out.println(json);
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
* No deletion without permission, or be held responsible to law.
|
||||
*/
|
||||
package com.jeesite.test.web.http;
|
||||
|
||||
import com.jeesite.common.web.http.HttpClientUtils;
|
||||
|
||||
/**
|
||||
* HTTP客户端测试工具类(支持HTTPS)
|
||||
* @author ThinkGem
|
||||
* @version 2017-3-27
|
||||
*/
|
||||
public class HttpClientUtilsTest {
|
||||
|
||||
public static void main(String[] args) {
|
||||
String content = HttpClientUtils.get("https://jeesite.com");
|
||||
System.out.println(content);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -329,7 +329,7 @@
|
||||
</word>
|
||||
<word>
|
||||
<id>a63e3fda50530388ba263296184d8a6919a75791</id>
|
||||
<length>4000</length>
|
||||
<length>1000</length>
|
||||
<decimal>null</decimal>
|
||||
<array>false</array>
|
||||
<array_dimension>null</array_dimension>
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE js_app_comment
|
||||
update_date timestamp NOT NULL,
|
||||
remarks vargraphic(500),
|
||||
create_by_name varchar(200),
|
||||
device_info varchar(4000),
|
||||
device_info varchar(1000),
|
||||
reply_date date,
|
||||
reply_content vargraphic(500),
|
||||
reply_user_code varchar(64),
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE js_app_comment
|
||||
update_date datetime NOT NULL,
|
||||
remarks varchar(500),
|
||||
create_by_name varchar(200),
|
||||
device_info varchar(4000),
|
||||
device_info varchar(1000),
|
||||
reply_date date,
|
||||
reply_content varchar(500),
|
||||
reply_user_code varchar(64),
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE [js_app_comment]
|
||||
[update_date] datetime NOT NULL,
|
||||
[remarks] nvarchar(500),
|
||||
[create_by_name] varchar(200),
|
||||
[device_info] varchar(4000),
|
||||
[device_info] varchar(1000),
|
||||
[reply_date] date,
|
||||
[reply_content] nvarchar(500),
|
||||
[reply_user_code] varchar(64),
|
||||
|
||||
@@ -17,7 +17,7 @@ CREATE TABLE js_app_comment
|
||||
update_date datetime NOT NULL COMMENT '更新时间',
|
||||
remarks varchar(500) COMMENT '备注信息',
|
||||
create_by_name varchar(200) COMMENT '提问人员姓名',
|
||||
device_info varchar(4000) COMMENT '设备信息',
|
||||
device_info varchar(1000) COMMENT '设备信息',
|
||||
reply_date date COMMENT '回复时间',
|
||||
reply_content varchar(500) COMMENT '回复意见',
|
||||
reply_user_code varchar(64) COMMENT '回复人员',
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE js_app_comment
|
||||
update_date timestamp NOT NULL,
|
||||
remarks nvarchar2(500),
|
||||
create_by_name varchar2(200),
|
||||
device_info varchar2(4000),
|
||||
device_info varchar2(1000),
|
||||
reply_date date,
|
||||
reply_content nvarchar2(500),
|
||||
reply_user_code varchar2(64),
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE js_app_comment
|
||||
update_date timestamp NOT NULL,
|
||||
remarks varchar(500),
|
||||
create_by_name varchar(200),
|
||||
device_info varchar(4000),
|
||||
device_info varchar(1000),
|
||||
reply_date date,
|
||||
reply_content varchar(500),
|
||||
reply_user_code varchar(64),
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>5.12.0-SNAPSHOT</version>
|
||||
<version>5.9.1.springboot3-SNAPSHOT</version>
|
||||
<relativePath>../../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
Binary file not shown.
@@ -4,16 +4,18 @@
|
||||
*/
|
||||
package com.jeesite.modules.app.entity;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
|
||||
import jakarta.validation.constraints.Size;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.jeesite.common.entity.DataEntity;
|
||||
import com.jeesite.common.mybatis.annotation.Column;
|
||||
import com.jeesite.common.mybatis.annotation.Table;
|
||||
import com.jeesite.common.mybatis.mapper.query.QueryType;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.Size;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* APP意见反馈Entity
|
||||
* @author ThinkGem
|
||||
@@ -24,14 +26,13 @@ import java.util.Date;
|
||||
@Column(name="category", attrName="category", label="问题分类"),
|
||||
@Column(name="content", attrName="content", label="问题和意见"),
|
||||
@Column(name="contact", attrName="contact", label="联系方式"),
|
||||
@Column(includeEntity=DataEntity.class),
|
||||
@Column(name="create_by_name", attrName="createByName", label="提问人员姓名", queryType=QueryType.LIKE),
|
||||
@Column(name="device_info", attrName="deviceInfo", label="设备信息"),
|
||||
@Column(name="reply_date", attrName="replyDate", label="回复时间"),
|
||||
@Column(name="reply_content", attrName="replyContent", label="回复意见"),
|
||||
@Column(name="reply_user_code", attrName="replyUserCode", label="回复人员"),
|
||||
@Column(name="reply_user_name", attrName="replyUserName", label="回复人员姓名", queryType=QueryType.LIKE),
|
||||
@Column(name="status", attrName="status", label="状态", isUpdate=true), // save时,允许更新status字段
|
||||
@Column(includeEntity=DataEntity.class),
|
||||
}, orderBy="a.create_date DESC"
|
||||
)
|
||||
public class AppComment extends DataEntity<AppComment> {
|
||||
@@ -83,7 +84,7 @@ public class AppComment extends DataEntity<AppComment> {
|
||||
this.contact = contact;
|
||||
}
|
||||
|
||||
@Size(min=0, max=4000, message="设备信息长度不能超过 4000 个字符")
|
||||
@Size(min=0, max=1000, message="设备信息长度不能超过 1000 个字符")
|
||||
public String getDeviceInfo() {
|
||||
return deviceInfo;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ package com.jeesite.modules.app.entity;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import javax.validation.constraints.Size;
|
||||
import jakarta.validation.constraints.Size;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.jeesite.common.entity.DataEntity;
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
*/
|
||||
package com.jeesite.modules.app.web;
|
||||
|
||||
import com.jeesite.common.config.Global;
|
||||
import com.jeesite.common.entity.Page;
|
||||
import com.jeesite.common.web.BaseController;
|
||||
import com.jeesite.modules.app.entity.AppComment;
|
||||
import com.jeesite.modules.app.service.AppCommentService;
|
||||
import java.util.Date;
|
||||
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -20,9 +20,11 @@ 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.util.Date;
|
||||
import com.jeesite.common.config.Global;
|
||||
import com.jeesite.common.entity.Page;
|
||||
import com.jeesite.common.web.BaseController;
|
||||
import com.jeesite.modules.app.entity.AppComment;
|
||||
import com.jeesite.modules.app.service.AppCommentService;
|
||||
|
||||
/**
|
||||
* APP意见反馈Controller
|
||||
@@ -95,6 +97,7 @@ public class AppCommentController extends BaseController {
|
||||
}
|
||||
}
|
||||
appCommentService.save(appComment);
|
||||
appCommentService.updateStatus(appComment);
|
||||
return renderResult(Global.TRUE, text("保存意见成功!"));
|
||||
}
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
*/
|
||||
package com.jeesite.modules.app.web;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE ${_prefix}app_comment
|
||||
update_date timestamp NOT NULL,
|
||||
remarks vargraphic(500),
|
||||
create_by_name varchar(200),
|
||||
device_info varchar(4000),
|
||||
device_info varchar(1000),
|
||||
reply_date date,
|
||||
reply_content vargraphic(500),
|
||||
reply_user_code varchar(64),
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE ${_prefix}app_comment
|
||||
update_date datetime NOT NULL,
|
||||
remarks varchar(500),
|
||||
create_by_name varchar(200),
|
||||
device_info varchar(4000),
|
||||
device_info varchar(1000),
|
||||
reply_date date,
|
||||
reply_content varchar(500),
|
||||
reply_user_code varchar(64),
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE [${_prefix}app_comment]
|
||||
[update_date] datetime NOT NULL,
|
||||
[remarks] nvarchar(500),
|
||||
[create_by_name] varchar(200),
|
||||
[device_info] varchar(4000),
|
||||
[device_info] varchar(1000),
|
||||
[reply_date] date,
|
||||
[reply_content] nvarchar(500),
|
||||
[reply_user_code] varchar(64),
|
||||
|
||||
@@ -17,7 +17,7 @@ CREATE TABLE ${_prefix}app_comment
|
||||
update_date datetime NOT NULL COMMENT '更新时间',
|
||||
remarks varchar(500) COMMENT '备注信息',
|
||||
create_by_name varchar(200) COMMENT '提问人员姓名',
|
||||
device_info varchar(4000) COMMENT '设备信息',
|
||||
device_info varchar(1000) COMMENT '设备信息',
|
||||
reply_date date COMMENT '回复时间',
|
||||
reply_content varchar(500) COMMENT '回复意见',
|
||||
reply_user_code varchar(64) COMMENT '回复人员',
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE ${_prefix}app_comment
|
||||
update_date timestamp NOT NULL,
|
||||
remarks nvarchar2(500),
|
||||
create_by_name varchar2(200),
|
||||
device_info varchar2(4000),
|
||||
device_info varchar2(1000),
|
||||
reply_date date,
|
||||
reply_content nvarchar2(500),
|
||||
reply_user_code varchar2(64),
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE ${_prefix}app_comment
|
||||
update_date timestamp NOT NULL,
|
||||
remarks varchar(500),
|
||||
create_by_name varchar(200),
|
||||
device_info varchar(4000),
|
||||
device_info varchar(1000),
|
||||
reply_date date,
|
||||
reply_content varchar(500),
|
||||
reply_user_code varchar(64),
|
||||
|
||||
@@ -21,10 +21,4 @@
|
||||
5.8.0
|
||||
5.8.1
|
||||
5.9.0
|
||||
5.9.1
|
||||
5.9.2
|
||||
5.10.0
|
||||
5.10.1
|
||||
5.11.0
|
||||
5.11.1
|
||||
5.12.0
|
||||
5.9.1
|
||||
@@ -160,7 +160,7 @@
|
||||
</div>
|
||||
<% } %>
|
||||
<script>
|
||||
$("#inputForm").validate({
|
||||
$('#inputForm').validate({
|
||||
submitHandler: function(form){
|
||||
js.ajaxSubmitForm($(form), function(data){
|
||||
js.showMessage(data.message);
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
<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('app:appComment:edit')){ %>
|
||||
<a href="${ctx}/app/appComment/form" class="btn btn-primary btnTool" title="${text('新增意见')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
|
||||
<a href="${ctx}/app/appComment/form" class="btn btn-default btnTool" title="${text('新增意见')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
|
||||
<% } %>
|
||||
<a href="#" class="btn-setting" id="btnSetting" title="${text('设置')}"><i class="fa icon-settings"></i></a>
|
||||
<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
@@ -82,11 +82,11 @@ $('#dataGrid').dataGrid({
|
||||
{header:'${text("操作")}', name:'actions', width:120, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
//# if(hasPermi('app:appComment:edit')){
|
||||
actions.push('<a href="${ctx}/app/appComment/form?id='+row.id+'" class="btnList" title="${text("编辑意见")}"><i class="fa icon-note"></i></a> ');
|
||||
actions.push('<a href="${ctx}/app/appComment/form?id='+row.id+'" class="btnList" title="${text("编辑意见")}"><i class="fa fa-pencil"></i></a> ');
|
||||
if (row.status == Global.STATUS_NORMAL){
|
||||
actions.push('<a href="${ctx}/app/appComment/disable?id='+row.id+'" class="btnList" title="${text("停用意见")}" data-confirm="${text("确认要停用该意见吗?")}"><i class="fa icon-ban"></i></a> ');
|
||||
actions.push('<a href="${ctx}/app/appComment/disable?id='+row.id+'" class="btnList" title="${text("停用意见")}" data-confirm="${text("确认要停用该意见吗?")}"><i class="glyphicon glyphicon-ban-circle"></i></a> ');
|
||||
} else if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="${ctx}/app/appComment/enable?id='+row.id+'" class="btnList" title="${text("启用意见")}" data-confirm="${text("确认要启用该意见吗?")}"><i class="fa icon-check"></i></a> ');
|
||||
actions.push('<a href="${ctx}/app/appComment/enable?id='+row.id+'" class="btnList" title="${text("启用意见")}" data-confirm="${text("确认要启用该意见吗?")}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
}
|
||||
actions.push('<a href="${ctx}/app/appComment/delete?id='+row.id+'" class="btnList" title="${text("删除意见")}" data-confirm="${text("确认要删除该意见吗?")}"><i class="fa fa-trash-o"></i></a> ');
|
||||
//# }
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
</div>
|
||||
<% } %>
|
||||
<script>
|
||||
$("#inputForm").validate({
|
||||
$('#inputForm').validate({
|
||||
submitHandler: function(form){
|
||||
js.ajaxSubmitForm($(form), function(data){
|
||||
js.showMessage(data.message);
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
<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('app:appUpgrade:edit')){ %>
|
||||
<a href="${ctx}/app/appUpgrade/form" class="btn btn-primary btnTool" title="${text('新增版本')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
|
||||
<a href="${ctx}/app/appUpgrade/form" class="btn btn-default btnTool" title="${text('新增版本')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
|
||||
<% } %>
|
||||
<a href="#" class="btn-setting" id="btnSetting" title="${text('设置')}"><i class="fa icon-settings"></i></a>
|
||||
<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
@@ -82,11 +82,11 @@ $('#dataGrid').dataGrid({
|
||||
{header:'${text("操作")}', name:'actions', width:120, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
//# if(hasPermi('app:appUpgrade:edit')){
|
||||
actions.push('<a href="${ctx}/app/appUpgrade/form?id='+row.id+'" class="btnList" title="${text("编辑版本")}"><i class="fa icon-note"></i></a> ');
|
||||
actions.push('<a href="${ctx}/app/appUpgrade/form?id='+row.id+'" class="btnList" title="${text("编辑版本")}"><i class="fa fa-pencil"></i></a> ');
|
||||
if (row.status == Global.STATUS_NORMAL){
|
||||
actions.push('<a href="${ctx}/app/appUpgrade/disable?id='+row.id+'" class="btnList" title="${text("停用版本")}" data-confirm="${text("确认要停用该版本吗?")}"><i class="fa icon-ban"></i></a> ');
|
||||
actions.push('<a href="${ctx}/app/appUpgrade/disable?id='+row.id+'" class="btnList" title="${text("停用版本")}" data-confirm="${text("确认要停用该版本吗?")}"><i class="glyphicon glyphicon-ban-circle"></i></a> ');
|
||||
} else if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="${ctx}/app/appUpgrade/enable?id='+row.id+'" class="btnList" title="${text("启用版本")}" data-confirm="${text("确认要启用该版本吗?")}"><i class="fa icon-check"></i></a> ');
|
||||
actions.push('<a href="${ctx}/app/appUpgrade/enable?id='+row.id+'" class="btnList" title="${text("启用版本")}" data-confirm="${text("确认要启用该版本吗?")}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
}
|
||||
actions.push('<a href="${ctx}/app/appUpgrade/delete?id='+row.id+'" class="btnList" title="${text("删除版本")}" data-confirm="${text("确认要删除该版本吗?")}"><i class="fa fa-trash-o"></i></a> ');
|
||||
//# }
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>5.12.0-SNAPSHOT</version>
|
||||
<version>5.9.1.springboot3-SNAPSHOT</version>
|
||||
<relativePath>../../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -24,12 +24,6 @@
|
||||
<artifactId>jeesite-module-core</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-configuration-processor</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
||||
Binary file not shown.
@@ -13,9 +13,9 @@ 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 jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
@@ -61,7 +61,7 @@ import java.util.Date;
|
||||
@Column(name = "site_code"),
|
||||
@Column(name = "site_name"),
|
||||
})
|
||||
}, orderBy = "a.weight DESC, a.update_date DESC"
|
||||
}, orderBy = "a.update_date DESC", extWhereKeys = "dsfCategory"
|
||||
)
|
||||
public class Article extends DataEntity<Article> {
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*/
|
||||
package com.jeesite.modules.cms.entity;
|
||||
|
||||
import javax.validation.constraints.Size;
|
||||
import jakarta.validation.constraints.Size;
|
||||
|
||||
import com.jeesite.common.entity.DataEntity;
|
||||
import com.jeesite.common.entity.Extend;
|
||||
|
||||
@@ -14,8 +14,8 @@ 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.Size;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -28,28 +28,23 @@ import java.util.List;
|
||||
@Column(name = "category_code", attrName = "categoryCode", label = "栏目编码", isPK = true),
|
||||
@Column(name = "category_name", attrName = "categoryName", label = "栏目名称", queryType = QueryType.LIKE, isTreeName = true),
|
||||
@Column(name = "site_code", attrName = "site.siteCode", label = "站点编码", queryType = QueryType.EQ),
|
||||
@Column(name = "module_type", attrName = "moduleType", label = "模块类型"),
|
||||
@Column(name = "image", attrName = "image", label = "栏目图片"),
|
||||
@Column(name = "href", attrName = "href", label = "链接"),
|
||||
@Column(name = "target", attrName = "target", label = "目标"),
|
||||
@Column(name = "keywords", attrName = "keywords", label = "关键字"),
|
||||
@Column(name = "description", attrName = "description", label = "描述"),
|
||||
@Column(name = "in_menu", attrName = "inMenu", label = "是否在导航中显示"),
|
||||
@Column(name = "in_list", attrName = "inList", label = "是否在分类页中显示列表"),
|
||||
@Column(name = "module_type", attrName = "moduleType", label = "模块类型"), @Column(name = "image", attrName = "image", label = "栏目图片"),
|
||||
@Column(name = "href", attrName = "href", label = "链接"), @Column(name = "target", attrName = "target", label = "目标"),
|
||||
@Column(name = "keywords", attrName = "keywords", label = "关键字"), @Column(name = "description", attrName = "description", label = "描述"),
|
||||
@Column(name = "in_menu", attrName = "inMenu", label = "是否在导航中显示"), @Column(name = "in_list", attrName = "inList", label = "是否在分类页中显示列表"),
|
||||
@Column(name = "show_modes", attrName = "showModes", label = "展现模式"),
|
||||
@Column(name = "is_need_audit", attrName = "isNeedAudit", label = "是否需要审核"),
|
||||
@Column(name = "is_can_comment", attrName = "isCanComment", label = "是否允许评论"),
|
||||
@Column(name = "custom_list_view", attrName = "customListView", label = "自定义列表视图"),
|
||||
@Column(name = "custom_content_view", attrName = "customContentView", label = "自定义内容视图"),
|
||||
@Column(name = "view_config", attrName = "viewConfig", label = "视图配置"),
|
||||
@Column(includeEntity = DataEntity.class),
|
||||
@Column(name = "view_config", attrName = "viewConfig", label = "视图配置"), @Column(includeEntity = DataEntity.class),
|
||||
@Column(includeEntity = Extend.class, attrName = "extend"),
|
||||
}, joinTable = {
|
||||
@JoinTable(entity = Site.class, alias = "s",
|
||||
on = "s.site_code = a.site_code", columns = {
|
||||
@Column(name = "site_name"),
|
||||
})
|
||||
}, orderBy = "a.tree_sorts, a.category_code"
|
||||
}, orderBy = "a.tree_sorts, a.category_code", extWhereKeys = "dsfCategory"
|
||||
)
|
||||
public class Category extends TreeEntity<Category> {
|
||||
|
||||
@@ -114,14 +109,6 @@ public class Category extends TreeEntity<Category> {
|
||||
this.categoryCode = categoryCode;
|
||||
}
|
||||
|
||||
public String getCategoryCode_like() {
|
||||
return sqlMap().getWhere().getValue("category_code", QueryType.LIKE);
|
||||
}
|
||||
|
||||
public void setCategoryCode_like(String categoryCode) {
|
||||
sqlMap().getWhere().and("category_code", QueryType.LIKE, categoryCode);
|
||||
}
|
||||
|
||||
@NotBlank(message = "栏目名称不能为空")
|
||||
@Size(min = 0, max = 100, message = "栏目名称长度不能超过 100 个字符")
|
||||
public String getCategoryName() {
|
||||
|
||||
@@ -6,10 +6,10 @@ package com.jeesite.modules.cms.entity;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
|
||||
import javax.validation.constraints.Size;
|
||||
import jakarta.validation.constraints.Size;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.jeesite.common.entity.BaseEntity;
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*/
|
||||
package com.jeesite.modules.cms.entity;
|
||||
|
||||
import javax.validation.constraints.Size;
|
||||
import jakarta.validation.constraints.Size;
|
||||
|
||||
import com.jeesite.common.entity.DataEntity;
|
||||
import com.jeesite.common.mybatis.annotation.Column;
|
||||
|
||||
@@ -14,8 +14,8 @@ import com.jeesite.modules.cms.utils.CmsUtils;
|
||||
import com.jeesite.modules.sys.utils.CorpUtils;
|
||||
import com.jeesite.modules.sys.utils.UserUtils;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.Size;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -29,7 +29,7 @@ import java.util.List;
|
||||
@Column(name = "site_sort", attrName = "siteSort", label = "站点排序号"),
|
||||
@Column(name = "title", attrName = "title", label = "站点标题", queryType = QueryType.LIKE),
|
||||
@Column(name = "logo", attrName = "logo", label = "站点Logo"),
|
||||
@Column(name = "domain_name", attrName = "domain", label = "站点域名", queryType = QueryType.LIKE),
|
||||
@Column(name = "domain_name", attrName = "domain", label = "站点域名"),
|
||||
@Column(name = "keywords", attrName = "keywords", label = "关键字"),
|
||||
@Column(name = "description", attrName = "description", label = "描述"),
|
||||
@Column(name = "theme", attrName = "theme", label = "主题"),
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*/
|
||||
package com.jeesite.modules.cms.entity;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
|
||||
import com.jeesite.common.entity.DataEntity;
|
||||
import com.jeesite.common.mybatis.annotation.Column;
|
||||
|
||||
@@ -6,7 +6,7 @@ package com.jeesite.modules.cms.entity;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import javax.validation.constraints.Size;
|
||||
import jakarta.validation.constraints.Size;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.jeesite.common.entity.BaseEntity;
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
* No deletion without permission, or be held responsible to law.
|
||||
*/
|
||||
package com.jeesite.modules.cms.properties.properties;
|
||||
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
|
||||
/**
|
||||
* CmsProperties
|
||||
* @author ThinkGem
|
||||
* @version 2022-4-10
|
||||
*/
|
||||
@ConfigurationProperties(prefix = "cms")
|
||||
public class CmsProperties {
|
||||
|
||||
private PageCache pageCache = new PageCache();
|
||||
|
||||
public static class PageCache {
|
||||
|
||||
/**
|
||||
* 是否开启页面静态化缓存
|
||||
*/
|
||||
private Boolean enabled = false;
|
||||
|
||||
/**
|
||||
* 缓存名称标识
|
||||
*/
|
||||
private String cacheName = "cmsPageCache";
|
||||
|
||||
/**
|
||||
* 拦截的网页地址
|
||||
*/
|
||||
private String urlPatterns = "${frontPath}/*";
|
||||
|
||||
/**
|
||||
* 只静态化 .html 后缀的网页
|
||||
*/
|
||||
private String urlSuffixes = ".html";
|
||||
|
||||
public Boolean getEnabled() {
|
||||
return enabled;
|
||||
}
|
||||
|
||||
public void setEnabled(Boolean enabled) {
|
||||
this.enabled = enabled;
|
||||
}
|
||||
|
||||
public String getCacheName() {
|
||||
return cacheName;
|
||||
}
|
||||
|
||||
public void setCacheName(String cacheName) {
|
||||
this.cacheName = cacheName;
|
||||
}
|
||||
|
||||
public String getUrlPatterns() {
|
||||
return urlPatterns;
|
||||
}
|
||||
|
||||
public void setUrlPatterns(String urlPatterns) {
|
||||
this.urlPatterns = urlPatterns;
|
||||
}
|
||||
|
||||
public String getUrlSuffixes() {
|
||||
return urlSuffixes;
|
||||
}
|
||||
|
||||
public void setUrlSuffixes(String urlSuffixes) {
|
||||
this.urlSuffixes = urlSuffixes;
|
||||
}
|
||||
}
|
||||
|
||||
public PageCache getPageCache() {
|
||||
return pageCache;
|
||||
}
|
||||
|
||||
public void setPageCache(PageCache pageCache) {
|
||||
this.pageCache = pageCache;
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@ import com.jeesite.modules.cms.service.CategoryService;
|
||||
import com.jeesite.modules.cms.service.SiteService;
|
||||
import org.springframework.ui.Model;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
import jakarta.servlet.ServletContext;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -27,8 +27,8 @@ 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 jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ import com.jeesite.modules.cms.entity.Site;
|
||||
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.entity.Office;
|
||||
import com.jeesite.modules.sys.utils.DictUtils;
|
||||
import org.apache.shiro.authz.annotation.Logical;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
@@ -28,7 +29,6 @@ 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 java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -52,23 +52,10 @@ public class CategoryController extends BaseController {
|
||||
* 获取数据
|
||||
*/
|
||||
@ModelAttribute
|
||||
public Category get(String categoryCode, boolean isNewRecord, HttpServletRequest request) {
|
||||
if (StringUtils.endsWith(request.getRequestURI(), "listData")) {
|
||||
return new Category();
|
||||
}
|
||||
public Category get(String categoryCode, boolean isNewRecord) {
|
||||
return categoryService.get(categoryCode, isNewRecord);
|
||||
}
|
||||
|
||||
/**
|
||||
* 管理主页
|
||||
*/
|
||||
@RequiresPermissions("cms:category:view")
|
||||
@RequestMapping(value = "index")
|
||||
public String index(Category category, Model model) {
|
||||
model.addAttribute("category", category);
|
||||
return "modules/cms/categoryIndex";
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询列表
|
||||
*/
|
||||
@@ -91,18 +78,17 @@ public class CategoryController extends BaseController {
|
||||
@ResponseBody
|
||||
public List<Category> listData(Category category) {
|
||||
if (StringUtils.isBlank(category.getParentCode())) {
|
||||
category.setParentCode(Category.ROOT_CODE);
|
||||
category.setParentCode(Office.ROOT_CODE);
|
||||
}
|
||||
if (StringUtils.isBlank(category.getSite().getSiteCode())) {
|
||||
category.setSite(new Site(Site.getCurrentSiteCode()));
|
||||
}
|
||||
if (StringUtils.isNotBlank(category.getCategoryCode())
|
||||
|| StringUtils.isNotBlank(category.getCategoryCode_like())
|
||||
|| StringUtils.isNotBlank(category.getCategoryName())
|
||||
|| StringUtils.isNotBlank(category.getRemarks())) {
|
||||
category.setParentCode(null);
|
||||
List<Category> list = null;
|
||||
if (StringUtils.isNotBlank(category.getCategoryCode())) {
|
||||
list = ListUtils.newArrayList(get(category.getCategoryCode(), false));
|
||||
} else {
|
||||
list = categoryService.findList(category);
|
||||
}
|
||||
List<Category> list = categoryService.findList(category);
|
||||
return list;
|
||||
}
|
||||
|
||||
@@ -226,7 +212,7 @@ public class CategoryController extends BaseController {
|
||||
public String disable(Category category) {
|
||||
Category where = new Category();
|
||||
where.setStatus(Category.STATUS_NORMAL);
|
||||
where.setParentCodes_rightLike(category.getParentCodes() + category.getId() + ",");
|
||||
where.setParentCodes("," + category.getId() + ",");
|
||||
long count = categoryService.findCount(where);
|
||||
if (count > 0) {
|
||||
return renderResult(Global.FALSE, text("该栏目表包含未停用的子栏目表!"));
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
*/
|
||||
package com.jeesite.modules.cms.web;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
*/
|
||||
package com.jeesite.modules.cms.web;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
@@ -24,8 +24,8 @@ 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 jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
|
||||
@@ -21,8 +21,8 @@ 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 jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -6,8 +6,8 @@ package com.jeesite.modules.cmsfront.web;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
|
||||
## 重要提示(Tip):
|
||||
|
||||
## 请勿在该配置文件中添加其它任何配置(添加也不会生效)。
|
||||
## 该文件,仅仅是为了让 jeesite-cms.yml 文件,
|
||||
## 在 IDEA 中有一个自动完成及帮助提示,并无其它用意。
|
||||
## 参数配置请在 jeesite-cms.yml 文件中添加。
|
||||
|
||||
spring:
|
||||
config:
|
||||
import:
|
||||
- classpath:config/jeesite-cms.yml
|
||||
@@ -12,10 +12,10 @@ IMPORT_PACKAGE_cms=\
|
||||
#FNP.strutil = org.beetl.ext.fn.StringUtil
|
||||
|
||||
##内置的格式化函数
|
||||
#FT.dateFormat = com.jeesite.common.beetl.ext.format.DateFormat
|
||||
#FT.dateFormat = org.beetl.ext.format.DateFormat
|
||||
|
||||
##内置的默认格式化函数
|
||||
#FTC.java.util.Date = com.jeesite.common.beetl.ext.format.DateFormat
|
||||
#FTC.java.util.Date = org.beetl.ext.format.DateFormat
|
||||
|
||||
## 标签类
|
||||
#TAG.include= org.beetl.ext.tag.IncludeTag
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
cms:
|
||||
pageCache:
|
||||
# 是否开启页面静态化缓存
|
||||
enabled: false
|
||||
#enabled: true
|
||||
# 缓存名称标识
|
||||
cacheName: cmsPageCache
|
||||
# 拦截的网页地址
|
||||
|
||||
@@ -29,10 +29,4 @@
|
||||
5.8.0
|
||||
5.8.1
|
||||
5.9.0
|
||||
5.9.1
|
||||
5.9.2
|
||||
5.10.0
|
||||
5.10.1
|
||||
5.11.0
|
||||
5.11.1
|
||||
5.12.0
|
||||
5.9.1
|
||||
@@ -4,10 +4,6 @@ body>.navbar{-webkit-transition:background-color .3s ease-in;transition:backgrou
|
||||
body>.navbar-transparent{background-color:transparent}
|
||||
body>.navbar-transparent .navbar-nav>.open>a{background-color:transparent!important}
|
||||
}
|
||||
h1,.h1{font-size:26px}
|
||||
h2,.h2{font-size:24px}
|
||||
h3,.h3{font-size:22px}
|
||||
p{margin:5px 0 10px;line-height:1.75;}
|
||||
#home{padding-top:0}
|
||||
#home .navbar-brand{padding:13.5px 15px 12.5px}
|
||||
#home .navbar-brand>img{display:inline;margin:0 10px;height:100%}
|
||||
@@ -84,7 +80,7 @@ footer p{clear:left;margin-bottom:0}
|
||||
.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:10px;}
|
||||
.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; */}
|
||||
|
||||
@@ -1210,7 +1210,7 @@
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h4 class="modal-title">Modal title</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
@@ -1255,7 +1255,7 @@
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h4 class="modal-title">Source Code</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
|
||||
@@ -6,10 +6,10 @@
|
||||
<i class="fa icon-note"></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>
|
||||
<a href="${ctxFront}/index" target="_blank" class="btn btn-default" title="${text('访问站点')}"><i class="fa fa-globe"></i> ${text('访问网站')}</a>
|
||||
<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
|
||||
<% if(hasPermi('cms:article:edit')){ %>
|
||||
<a href="${ctx}/cms/article/form" onclick="$(this).data('href', this.href+'?category.categoryCode='+$('#categoryCode').val())" class="btn btn-primary btnTool" title="${text('新增文章')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
|
||||
<a href="${ctx}/cms/article/form" onclick="$(this).data('href', this.href+'?category.categoryCode='+$('#categoryCode').val())" class="btn btn-default btnTool" title="${text('新增文章')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -71,12 +71,12 @@ $('#dataGrid').dataGrid({
|
||||
{header:'${text("操作")}', name:'actions', width:150, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
//# if(hasPermi('cms:article:edit')){
|
||||
actions.push('<a href="${ctx}/cms/article/form?id='+row.id+'" class="btnList" title="${text("编辑文章")}"><i class="fa icon-note"></i></a> ');
|
||||
actions.push('<a href="${ctx}/cms/article/form?id='+row.id+'" class="btnList" title="${text("编辑文章")}"><i class="fa fa-pencil"></i></a> ');
|
||||
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="fa icon-ban"></i></a> ');
|
||||
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> ');
|
||||
}
|
||||
if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="${ctx}/cms/article/enable?id='+row.id+'" class="btnList" title="${text("启用文章")}" data-confirm="${text("确认要启用该文章吗?")}"><i class="fa icon-check"></i></a> ');
|
||||
actions.push('<a href="${ctx}/cms/article/enable?id='+row.id+'" class="btnList" title="${text("启用文章")}" data-confirm="${text("确认要启用该文章吗?")}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
}
|
||||
actions.push('<a href="${ctx}/cms/article/delete?id='+row.id+'" class="btnList" title="${text("删除文章")}" data-confirm="${text("确认要删除该文章吗?")}"><i class="fa fa-trash-o"></i></a> ');
|
||||
if (row.status == Global.STATUS_NORMAL){
|
||||
|
||||
@@ -1,78 +0,0 @@
|
||||
<% layout('/layouts/default.html', {title: '栏目管理', libs: ['layout','zTree']}){ %>
|
||||
<div class="ui-layout-west">
|
||||
<div class="main-content">
|
||||
<div class="box box-main">
|
||||
<div class="box-header">
|
||||
<div class="box-title">
|
||||
<i class="fa icon-grid"></i> ${text('栏目导航')}
|
||||
</div>
|
||||
<div class="box-tools pull-right">
|
||||
<% if(hasPermi('bpm:bpmCategory:edit')){ %>
|
||||
<button type="button" class="btn btn-box-tool addTabPage" data-href="${ctx}/cms/category/list" title="${text('栏目管理')}"><i class="fa fa-edit"></i></button>
|
||||
<% } %>
|
||||
<button type="button" class="btn btn-box-tool" id="btnExpand" title="${text('展开')}" style="display:none;"><i class="fa fa-chevron-up"></i></button>
|
||||
<button type="button" class="btn btn-box-tool" id="btnCollapse" title="${text('折叠')}"><i class="fa fa-chevron-down"></i></button>
|
||||
<button type="button" class="btn btn-box-tool" id="btnRefresh" title="${text('刷新')}"><i class="fa fa-refresh"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui-layout-content">
|
||||
<div id="tree" class="ztree"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui-layout-center">
|
||||
<iframe id="mainFrame" name="mainFrame" class="ui-layout-content p0"
|
||||
src="${ctx}/cms/category/list"></iframe>
|
||||
</div>
|
||||
<% } %>
|
||||
<script>
|
||||
//# // 初始化布局
|
||||
$('body').layout({
|
||||
west__initClosed: $(window).width() <= 767, // 是否默认关闭
|
||||
west__size: 190
|
||||
});
|
||||
//# // 主页框架
|
||||
var win = $("#mainFrame")[0].contentWindow;
|
||||
//# // 树结构初始化加载
|
||||
var setting = {view:{selectedMulti:false},data:{key:{title:"title"},simpleData:{enable:true}},
|
||||
async:{enable:true,autoParam:["id=parentCode"],url:"${ctx}/cms/category/treeData"},
|
||||
callback:{onClick:function(event, treeId, treeNode){
|
||||
tree.expandNode(treeNode);
|
||||
//win.$('button[type=reset]').click();
|
||||
win.$('#categoryCode').val(treeNode.id);
|
||||
win.page();
|
||||
}}
|
||||
}, tree, loadTree = function(){
|
||||
js.ajaxSubmit(setting.async.url+"?___t="+new Date().getTime(), {
|
||||
parentCode:'${parameter.parentCode!}'}, function(data){
|
||||
tree = $.fn.zTree.init($("#tree"), setting, data);
|
||||
var level = -1, nodes;
|
||||
while (++level <= 1) {
|
||||
nodes = tree.getNodesByParam("level", level);
|
||||
if (nodes.length > 10) { break; }
|
||||
for(var i=0; i<nodes.length; i++) {
|
||||
tree.expandNode(nodes[i], true, false, false);
|
||||
}
|
||||
}
|
||||
}, null, null, js.text('loading.message'));
|
||||
};loadTree();
|
||||
//# // 工具栏按钮绑定
|
||||
$('#btnExpand').click(function(){
|
||||
tree.expandAll(true);
|
||||
$(this).hide();
|
||||
$('#btnCollapse').show();
|
||||
});
|
||||
$('#btnCollapse').click(function(){
|
||||
tree.expandAll(false);
|
||||
$(this).hide();
|
||||
$('#btnExpand').show();
|
||||
});
|
||||
$('#btnRefresh').click(function(){
|
||||
loadTree();
|
||||
});
|
||||
//调用子页分页函数
|
||||
function page(){
|
||||
win.page();
|
||||
}
|
||||
</script>
|
||||
@@ -24,7 +24,7 @@
|
||||
<a href="#" class="btn btn-default" id="btnExpandTreeNode" title="${text('展开一级')}"><i class="fa fa-angle-double-down"></i>${text('展开')}</a>
|
||||
<a href="#" class="btn btn-default" id="btnCollapseTreeNode" title="${text('折叠全部')}"><i class="fa fa-angle-double-up"></i> ${text('折叠')}</a> <%
|
||||
if(hasPermi('cms:category:edit')){ %>
|
||||
<a href="${ctx}/cms/category/form?site.siteCode=${category.site.siteCode}" class="btn btn-primary btnTool" title="${text('新增栏目')}"><i class="fa fa-plus"></i>${text('新增')}</a>
|
||||
<a href="${ctx}/cms/category/form?site.siteCode=${category.site.siteCode}" class="btn btn-default btnTool" title="${text('栏目添加')}"><i class="fa fa-plus"></i>${text('新增')}</a>
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -32,35 +32,28 @@
|
||||
<#form:form id="searchForm" model="${category}" action="${ctx}/cms/category/listData" method="post" class="form-inline "
|
||||
data-page-no="${parameter.pageNo}" data-page-size="${parameter.pageSize}" data-order-by="${parameter.orderBy}">
|
||||
<#form:hidden path="site.siteCode" maxlength="64" class="form-control width-120" />
|
||||
<#form:hidden path="categoryCode" />
|
||||
<div class="form-group">
|
||||
<label class="control-label">${text('编码')}:</label>
|
||||
<label class="control-label">${text('栏目名称')}:</label>
|
||||
<div class="control-inline">
|
||||
<#form:input path="categoryCode_like" maxlength="100" class="form-control width-90" />
|
||||
<#form:input path="categoryName" maxlength="100" class="form-control width-120" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label">${text('名称')}:</label>
|
||||
<label class="control-label">${text('模块类型')}:</label>
|
||||
<div class="control-inline">
|
||||
<#form:input path="categoryName" maxlength="100" class="form-control width-90" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label">${text('模型')}:</label>
|
||||
<div class="control-inline width-90">
|
||||
<#form:select path="moduleType" dictType="cms_module_type" blankOption="true" class="form-control" />
|
||||
<#form:input path="moduleType" maxlength="50" class="form-control width-120" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label">${text('状态')}:</label>
|
||||
<div class="control-inline width-90">
|
||||
<div class="control-inline width-120">
|
||||
<#form:select path="status" dictType="sys_search_status" blankOption="true" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label">${text('备注')}:</label>
|
||||
<label class="control-label">${text('备注信息')}:</label>
|
||||
<div class="control-inline">
|
||||
<#form:input path="remarks" maxlength="500" class="form-control width-90" />
|
||||
<#form:input path="remarks" maxlength="500" class="form-control width-120" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -81,40 +74,31 @@ $('#dataGrid').dataGrid({
|
||||
{header:'${text("名称")}', name:'categoryName', index:'a.category_name', width:250, align:"left", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '( '+row.categoryCode+' ) '+'<a href="${ctx}/cms/category/form?categoryCode='+row.categoryCode+'" class="btnList" data-title="${text("编辑栏目表")}">'+(val||row.id)+'</a>';
|
||||
}},
|
||||
{header:'${text("模型")}', name:'moduleType', index:'a.module_type', width:100, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel("#{@DictUtils.getDictListJson('cms_module_type')}", val, '未知', true);
|
||||
}},
|
||||
{header:'${text("排序")}', name:'treeSort', index:'a.tree_sort', width:60, align:"center"},
|
||||
{header:'${text("模型")}', name:'moduleType', index:'a.module_type', width:100, align:"center"},
|
||||
{header:'${text("排序")}', name:'treeSort', index:'a.tree_sort', width:50, align:"center"},
|
||||
{header:'${text("导航栏目")}', name:'inMenu', index:'a.in_menu', width:80, fixed:true, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel("#{@DictUtils.getDictListJson('sys_show_hide')}", val, '未知', true);
|
||||
}},
|
||||
{header:'${text("栏目列表")}', name:'inList', index:'a.in_list', width:80, fixed:true, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel("#{@DictUtils.getDictListJson('sys_show_hide')}", val, '未知', true);
|
||||
}},
|
||||
{header:'${text("展现方式")}', name:'showModes', index:'a.show_modes', width:90, fixed:true, align:"center", formatter: function(val, obj, row, act){
|
||||
{header:'${text("展现方式")}', name:'showModes', index:'a.show_modes', width:150, fixed:true, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel("#{@DictUtils.getDictListJson('cms_show_modes')}", val, '未知', true);
|
||||
}},
|
||||
{header:'${text("状态")}', name:'status', index:'a.status', width:90, fixed:true, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel("#{@DictUtils.getDictListJson('sys_status')}", val, '未知', true);
|
||||
}},
|
||||
{header:'${text("备注")}', name:'remarks', index:'a.remarks', width:100, align:"left"},
|
||||
{header:'${text("操作")}', name:'actions', width:210, formatter: function(val, obj, row, act){
|
||||
{header:'${text("操作")}', name:'actions', width:150, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
//# if(hasPermi('cms:category:edit')){
|
||||
actions.push('<a href="${ctx}/cms/category/form?categoryCode='+row.categoryCode+'" class="btnList" title="${text("编辑栏目表")}"><i class="fa icon-note"></i></a> ');
|
||||
actions.push('<a href="${ctx}/cms/category/form?categoryCode='+row.categoryCode+'" class="btnList" title="${text("编辑栏目表")}"><i class="fa fa-pencil"></i></a> ');
|
||||
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="fa icon-ban"></i></a> ');
|
||||
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> ');
|
||||
}
|
||||
if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="${ctx}/cms/category/enable?categoryCode='+row.categoryCode+'" class="btnList" title="${text("启用栏目表")}" data-confirm="${text("确认要启用该栏目表吗?")}"><i class="fa icon-check"></i></a> ');
|
||||
actions.push('<a href="${ctx}/cms/category/enable?categoryCode='+row.categoryCode+'" class="btnList" title="${text("启用栏目表")}" data-confirm="${text("确认要启用该栏目表吗?")}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
}
|
||||
actions.push('<a href="${ctx}/cms/category/delete?categoryCode='+row.categoryCode+'" class="btnList" title="${text("删除栏目表")}" data-confirm="${text("确认要删除该栏目表及所有子栏目表吗?")}" data-deltreenode="'+row.id+'"><i class="fa fa-trash-o"></i></a> ');
|
||||
actions.push('<a href="${ctx}/cms/category/form?parentCode='+row.id+'&site.siteCode=${category.site.siteCode}" class="btnList" title="${text("新增下级栏目表")}"><i class="fa icon-plus"></i></a> ');
|
||||
actions.push('<a href="${ctx}/cms/category/form?parentCode='+row.id+'&site.siteCode=${category.site.siteCode}" class="btnList" title="${text("新增下级栏目表")}"><i class="fa fa-plus-square"></i></a> ');
|
||||
//# if(hasPermi('cms:category:rebuildIndex')){
|
||||
actions.push('<a href="${ctx}/cms/category/rebuildIndex?categoryCode='+row.categoryCode+'" class="btnList" title="${text("重建该栏目索引")}" data-confirm="${text("确认重建该栏目文章索引吗")}?"><i class="fa fa-crosshairs"></i></a> ');
|
||||
//# }
|
||||
//# if(hasPermi('cms:category:rebuildVectorStore')){
|
||||
actions.push('<a href="${ctx}/cms/category/rebuildVectorStore?categoryCode='+row.categoryCode+'" class="btnList" title="${text("重建该栏目向量数据库")}" data-confirm="${text("确认重建该栏目文章向量数据库吗")}?"><i class="fa fa-database"></i></a> ');
|
||||
actions.push('<a href="${ctx}/cms/category/rebuildIndex?categoryCode='+row.categoryCode+'" class="btnList" title="${text("重建该栏目索引")}" data-confirm="${text("确认重建该栏目下文章索引吗")}?"><i class="fa fa-crosshairs"></i></a> ');
|
||||
//# }
|
||||
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> ');
|
||||
@@ -125,13 +109,10 @@ $('#dataGrid').dataGrid({
|
||||
],
|
||||
treeGrid: true, // 启用树结构表格
|
||||
defaultExpandLevel: 0, // 默认展开的层次
|
||||
expandNodeClearPostData: 'categoryCode,categoryName,siteCode,moduleType,image,href,target,keywords,description,inMenu,inList,showModes,isNeedAudit,isCanComment,customListView,customContentView,viewConfig,status,remarks,', // 展开节点清理请求参数数据(一般设置查询条件的字段属性,否则在查询后,不能展开子节点数据)
|
||||
expandNodeClearPostData: 'categoryName,siteCode,moduleType,image,href,target,keywords,description,inMenu,inList,showModes,isNeedAudit,isCanComment,customListView,customContentView,viewConfig,status,remarks,', // 展开节点清理请求参数数据(一般设置查询条件的字段属性,否则在查询后,不能展开子节点数据)
|
||||
//# // 加载成功后执行事件
|
||||
ajaxSuccess: function(data){
|
||||
if ($('#categoryCode').val() != ''){
|
||||
$('#categoryCode').val('');
|
||||
$('#btnExpandTreeNode').click();
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@@ -173,7 +173,7 @@
|
||||
</div>
|
||||
<% } %>
|
||||
<script>
|
||||
$("#inputForm").validate({
|
||||
$('#inputForm').validate({
|
||||
submitHandler: function(form){
|
||||
js.ajaxSubmitForm($(form), function(data){
|
||||
js.showMessage(data.message);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<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-primary btnTool" title="${text('新增文章评论表')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
|
||||
<a href="${ctx}/cms/comment/form" class="btn btn-default btnTool" title="${text('新增文章评论表')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -130,12 +130,12 @@ $('#dataGrid').dataGrid({
|
||||
{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 icon-note"></i></a> ');
|
||||
actions.push('<a href="${ctx}/cms/comment/form?id='+row.id+'" class="btnList" title="${text('编辑文章评论表')}"><i class="fa fa-pencil"></i></a> ');
|
||||
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="fa icon-ban"></i></a> ');
|
||||
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> ');
|
||||
}
|
||||
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="fa icon-check"></i></a> ');
|
||||
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> ');
|
||||
}
|
||||
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> ');
|
||||
//# }
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
</div>
|
||||
<% } %>
|
||||
<script>
|
||||
$("#inputForm").validate({
|
||||
$('#inputForm').validate({
|
||||
submitHandler: function(form){
|
||||
js.ajaxSubmitForm($(form), function(data){
|
||||
js.showMessage(data.message);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<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:report:edit')){ %>
|
||||
<a href="${ctx}/cms/report/form" class="btn btn-primary btnTool" title="${text('新增内容举报表')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
|
||||
<a href="${ctx}/cms/report/form" class="btn btn-default btnTool" title="${text('新增内容举报表')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -71,12 +71,12 @@ $('#dataGrid').dataGrid({
|
||||
{header:'${text('操作')}', name:'actions', width:120, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
//# if(hasPermi('cms:report:edit')){
|
||||
actions.push('<a href="${ctx}/cms/report/form?id='+row.id+'" class="btnList" title="${text('编辑内容举报表')}"><i class="fa icon-note"></i></a> ');
|
||||
actions.push('<a href="${ctx}/cms/report/form?id='+row.id+'" class="btnList" title="${text('编辑内容举报表')}"><i class="fa fa-pencil"></i></a> ');
|
||||
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="fa icon-ban"></i></a> ');
|
||||
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> ');
|
||||
}
|
||||
if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="${ctx}/cms/report/enable?id='+row.id+'" class="btnList" title="${text('启用内容举报表')}" data-confirm="${text('确认要启用该内容举报表吗?')}"><i class="fa icon-check"></i></a> ');
|
||||
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> ');
|
||||
}
|
||||
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> ');
|
||||
//# }
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<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:site:edit')){ %>
|
||||
<a href="${ctx}/cms/site/form" class="btn btn-primary btnTool" title="${text('新增站点')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
|
||||
<a href="${ctx}/cms/site/form" class="btn btn-default btnTool" title="${text('新增站点')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -67,23 +67,20 @@ $('#dataGrid').dataGrid({
|
||||
return js.getDictLabel("#{@DictUtils.getDictListJson('sys_search_status')}", val, '${text("未知")}', true);
|
||||
}},
|
||||
{header:'${text("创建时间")}', name:'createDate', index:'a.create_date', width:150, align:"center"},
|
||||
{header:'${text("操作")}', name:'actions', width:183, formatter: function(val, obj, row, act){
|
||||
{header:'${text("操作")}', name:'actions', width:150, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
//# if(hasPermi('cms:site:edit')){
|
||||
actions.push('<a href="${ctx}/cms/site/form?siteCode='+row.siteCode+'" class="btnList" title="${text("编辑站点")}"><i class="fa icon-note"></i></a> ');
|
||||
actions.push('<a href="${ctx}/cms/site/form?siteCode='+row.siteCode+'" class="btnList" title="${text("编辑站点")}"><i class="fa fa-pencil"></i></a> ');
|
||||
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="fa icon-ban"></i></a> ');
|
||||
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> ');
|
||||
}
|
||||
if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="${ctx}/cms/site/enable?siteCode='+row.siteCode+'" class="btnList" title="${text("启用站点")}" data-confirm="${text("确认要启用该站点吗?")}"><i class="fa icon-check"></i></a> ');
|
||||
actions.push('<a href="${ctx}/cms/site/enable?siteCode='+row.siteCode+'" class="btnList" title="${text("启用站点")}" data-confirm="${text("确认要启用该站点吗?")}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
}
|
||||
actions.push('<a href="${ctx}/cms/site/delete?siteCode='+row.siteCode+'" class="btnList" title="${text("删除站点")}" data-confirm="${text("确认要删除该站点吗?")}"><i class="fa fa-trash-o"></i></a> ');
|
||||
//# if(hasPermi('cms:site:rebuildIndex')){
|
||||
actions.push('<a href="${ctx}/cms/site/rebuildIndex?siteCode='+row.siteCode+'" class="btnList" title="${text("重建该站点索引")}" data-confirm="${text("确认重建该站点文章索引吗")}?"><i class="fa fa-crosshairs"></i></a> ');
|
||||
//# }
|
||||
//# if(hasPermi('cms:site:rebuildVectorStore')){
|
||||
actions.push('<a href="${ctx}/cms/site/rebuildVectorStore?siteCode='+row.siteCode+'" class="btnList" title="${text("重建该站点向量数据库")}" data-confirm="${text("确认重建该站点文章向量数据库吗")}?"><i class="fa fa-database"></i></a> ');
|
||||
//# }
|
||||
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> ');
|
||||
}
|
||||
|
||||
@@ -351,7 +351,7 @@
|
||||
</div>
|
||||
<% } %>
|
||||
<script>
|
||||
$("#inputForm").validate({
|
||||
$('#inputForm').validate({
|
||||
submitHandler: function(form){
|
||||
js.ajaxSubmitForm($(form), function(data){
|
||||
js.showMessage(data.message);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<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:visitLog:edit')){ %>
|
||||
<a href="${ctx}/cms/visitLog/form" class="btn btn-primary btnTool" title="${text('新增访问日志表')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
|
||||
<a href="${ctx}/cms/visitLog/form" class="btn btn-default btnTool" title="${text('新增访问日志表')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
|
||||
<% } %> -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -92,12 +92,12 @@ $('#dataGrid').dataGrid({
|
||||
{header:'${text('操作')}', name:'actions', width:120, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
//# if(hasPermi('cms:visitLog:edit')){
|
||||
actions.push('<a href="${ctx}/cms/visitLog/form?id='+row.id+'" class="btnList" title="${text('编辑访问日志表')}"><i class="fa icon-note"></i></a> ');
|
||||
actions.push('<a href="${ctx}/cms/visitLog/form?id='+row.id+'" class="btnList" title="${text('编辑访问日志表')}"><i class="fa fa-pencil"></i></a> ');
|
||||
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="fa icon-ban"></i></a> ');
|
||||
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> ');
|
||||
}
|
||||
if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="${ctx}/cms/visitLog/enable?id='+row.id+'" class="btnList" title="${text('启用访问日志表')}" data-confirm="${text('确认要启用该访问日志表吗?')}"><i class="fa icon-check"></i></a> ');
|
||||
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> ');
|
||||
}
|
||||
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> ');
|
||||
//# }
|
||||
|
||||
@@ -25,7 +25,7 @@ if (message != ''){
|
||||
function page(n,s){
|
||||
$("#pageNo").val(n);
|
||||
$("#pageSize").val(s);
|
||||
$("#searchForm").submit();
|
||||
$('#searchForm').submit();
|
||||
return false;
|
||||
}
|
||||
function sel(th, val){
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,31 +2,6 @@
|
||||
|
||||
/* Create Tables */
|
||||
|
||||
-- 业务分类
|
||||
CREATE TABLE js_biz_category
|
||||
(
|
||||
category_code varchar(64) NOT NULL,
|
||||
view_code varchar(500),
|
||||
category_name varchar(64) NOT NULL,
|
||||
parent_code varchar(64) NOT NULL,
|
||||
parent_codes varchar(767) NOT NULL,
|
||||
tree_sort decimal(10) NOT NULL,
|
||||
tree_sorts varchar(767) NOT NULL,
|
||||
tree_leaf char(1) NOT NULL,
|
||||
tree_level decimal(4) NOT NULL,
|
||||
tree_names varchar(767) NOT NULL,
|
||||
status char(1) DEFAULT '0' NOT NULL,
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date timestamp NOT NULL,
|
||||
update_by varchar(64) NOT NULL,
|
||||
update_date timestamp NOT NULL,
|
||||
remarks vargraphic(500),
|
||||
corp_code varchar(64) DEFAULT '0' NOT NULL,
|
||||
corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL,
|
||||
PRIMARY KEY (category_code)
|
||||
);
|
||||
|
||||
|
||||
-- 代码生成表
|
||||
CREATE TABLE js_gen_table
|
||||
(
|
||||
@@ -104,6 +79,31 @@ CREATE TABLE js_sys_area
|
||||
);
|
||||
|
||||
|
||||
-- 业务分类
|
||||
CREATE TABLE js_biz_category
|
||||
(
|
||||
category_code varchar(64) NOT NULL,
|
||||
view_code varchar(500),
|
||||
category_name varchar(64) NOT NULL,
|
||||
parent_code varchar(64) NOT NULL,
|
||||
parent_codes varchar(767) NOT NULL,
|
||||
tree_sort decimal(10) NOT NULL,
|
||||
tree_sorts varchar(767) NOT NULL,
|
||||
tree_leaf char(1) NOT NULL,
|
||||
tree_level decimal(4) NOT NULL,
|
||||
tree_names varchar(767) NOT NULL,
|
||||
status char(1) DEFAULT '0' NOT NULL,
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date timestamp NOT NULL,
|
||||
update_by varchar(64) NOT NULL,
|
||||
update_date timestamp NOT NULL,
|
||||
remarks vargraphic(500),
|
||||
corp_code varchar(64) DEFAULT '0' NOT NULL,
|
||||
corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL,
|
||||
PRIMARY KEY (category_code)
|
||||
);
|
||||
|
||||
|
||||
-- 公司表
|
||||
CREATE TABLE js_sys_company
|
||||
(
|
||||
@@ -492,21 +492,6 @@ CREATE TABLE js_sys_menu
|
||||
);
|
||||
|
||||
|
||||
-- 菜单数据权限
|
||||
CREATE TABLE js_sys_menu_data_scope
|
||||
(
|
||||
id varchar(64) NOT NULL,
|
||||
role_code varchar(64) NOT NULL,
|
||||
menu_code varchar(64) NOT NULL,
|
||||
rule_name varchar(100),
|
||||
rule_type char(1),
|
||||
rule_config clob,
|
||||
status char(1),
|
||||
remarks vargraphic(500),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
-- 模块表
|
||||
CREATE TABLE js_sys_module
|
||||
(
|
||||
@@ -782,8 +767,7 @@ CREATE TABLE js_sys_role_data_scope
|
||||
ctrl_type varchar(20) NOT NULL,
|
||||
ctrl_data varchar(64) NOT NULL,
|
||||
ctrl_permi varchar(64) NOT NULL,
|
||||
menu_code varchar(64) DEFAULT '0' NOT NULL,
|
||||
PRIMARY KEY (role_code, ctrl_type, ctrl_data, ctrl_permi, menu_code)
|
||||
PRIMARY KEY (role_code, ctrl_type, ctrl_data, ctrl_permi)
|
||||
);
|
||||
|
||||
|
||||
@@ -950,8 +934,6 @@ CREATE INDEX idx_sys_menu_sc ON js_sys_menu (sys_code);
|
||||
CREATE INDEX idx_sys_menu_is ON js_sys_menu (is_show);
|
||||
CREATE INDEX idx_sys_menu_mcs ON js_sys_menu (module_codes);
|
||||
CREATE INDEX idx_sys_menu_wt ON js_sys_menu (weight);
|
||||
CREATE INDEX idx_sys_menu_ds_mc ON js_sys_menu_data_scope (menu_code);
|
||||
CREATE INDEX idx_sys_menu_ds_rc ON js_sys_menu_data_scope (role_code);
|
||||
CREATE INDEX idx_sys_module_status ON js_sys_module (status);
|
||||
CREATE INDEX idx_sys_msg_inner_cb ON js_sys_msg_inner (create_by);
|
||||
CREATE INDEX idx_sys_msg_inner_status ON js_sys_msg_inner (status);
|
||||
|
||||
@@ -2,31 +2,6 @@
|
||||
|
||||
/* Create Tables */
|
||||
|
||||
-- 业务分类
|
||||
CREATE TABLE js_biz_category
|
||||
(
|
||||
category_code varchar(64) NOT NULL,
|
||||
view_code varchar(500),
|
||||
category_name varchar(64) NOT NULL,
|
||||
parent_code varchar(64) NOT NULL,
|
||||
parent_codes varchar(767) NOT NULL,
|
||||
tree_sort decimal(10) NOT NULL,
|
||||
tree_sorts varchar(767) NOT NULL,
|
||||
tree_leaf char(1) NOT NULL,
|
||||
tree_level decimal(4) NOT NULL,
|
||||
tree_names varchar(767) NOT NULL,
|
||||
status char(1) DEFAULT '0' NOT NULL,
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date datetime NOT NULL,
|
||||
update_by varchar(64) NOT NULL,
|
||||
update_date datetime NOT NULL,
|
||||
remarks varchar(500),
|
||||
corp_code varchar(64) DEFAULT '0' NOT NULL,
|
||||
corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL,
|
||||
PRIMARY KEY (category_code)
|
||||
);
|
||||
|
||||
|
||||
-- 代码生成表
|
||||
CREATE TABLE js_gen_table
|
||||
(
|
||||
@@ -104,6 +79,31 @@ CREATE TABLE js_sys_area
|
||||
);
|
||||
|
||||
|
||||
-- 业务分类
|
||||
CREATE TABLE js_biz_category
|
||||
(
|
||||
category_code varchar(64) NOT NULL,
|
||||
view_code varchar(500),
|
||||
category_name varchar(64) NOT NULL,
|
||||
parent_code varchar(64) NOT NULL,
|
||||
parent_codes varchar(767) NOT NULL,
|
||||
tree_sort decimal(10) NOT NULL,
|
||||
tree_sorts varchar(767) NOT NULL,
|
||||
tree_leaf char(1) NOT NULL,
|
||||
tree_level decimal(4) NOT NULL,
|
||||
tree_names varchar(767) NOT NULL,
|
||||
status char(1) DEFAULT '0' NOT NULL,
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date datetime NOT NULL,
|
||||
update_by varchar(64) NOT NULL,
|
||||
update_date datetime NOT NULL,
|
||||
remarks varchar(500),
|
||||
corp_code varchar(64) DEFAULT '0' NOT NULL,
|
||||
corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL,
|
||||
PRIMARY KEY (category_code)
|
||||
);
|
||||
|
||||
|
||||
-- 公司表
|
||||
CREATE TABLE js_sys_company
|
||||
(
|
||||
@@ -492,21 +492,6 @@ CREATE TABLE js_sys_menu
|
||||
);
|
||||
|
||||
|
||||
-- 菜单数据权限
|
||||
CREATE TABLE js_sys_menu_data_scope
|
||||
(
|
||||
id varchar(64) NOT NULL,
|
||||
role_code varchar(64) NOT NULL,
|
||||
menu_code varchar(64) NOT NULL,
|
||||
rule_name varchar(100),
|
||||
rule_type char(1),
|
||||
rule_config clob,
|
||||
status char(1),
|
||||
remarks varchar(500),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
-- 模块表
|
||||
CREATE TABLE js_sys_module
|
||||
(
|
||||
@@ -782,8 +767,7 @@ CREATE TABLE js_sys_role_data_scope
|
||||
ctrl_type varchar(20) NOT NULL,
|
||||
ctrl_data varchar(64) NOT NULL,
|
||||
ctrl_permi varchar(64) NOT NULL,
|
||||
menu_code varchar(64) DEFAULT '0' NOT NULL,
|
||||
PRIMARY KEY (role_code, ctrl_type, ctrl_data, ctrl_permi, menu_code)
|
||||
PRIMARY KEY (role_code, ctrl_type, ctrl_data, ctrl_permi)
|
||||
);
|
||||
|
||||
|
||||
@@ -950,8 +934,6 @@ CREATE INDEX idx_sys_menu_sc ON js_sys_menu (sys_code);
|
||||
CREATE INDEX idx_sys_menu_is ON js_sys_menu (is_show);
|
||||
CREATE INDEX idx_sys_menu_mcs ON js_sys_menu (module_codes);
|
||||
CREATE INDEX idx_sys_menu_wt ON js_sys_menu (weight);
|
||||
CREATE INDEX idx_sys_menu_ds_mc ON js_sys_menu_data_scope (menu_code);
|
||||
CREATE INDEX idx_sys_menu_ds_rc ON js_sys_menu_data_scope (role_code);
|
||||
CREATE INDEX idx_sys_module_status ON js_sys_module (status);
|
||||
CREATE INDEX idx_sys_msg_inner_cb ON js_sys_msg_inner (create_by);
|
||||
CREATE INDEX idx_sys_msg_inner_status ON js_sys_msg_inner (status);
|
||||
@@ -1017,25 +999,6 @@ CREATE INDEX idx_sys_user_cc ON js_sys_user (corp_code);
|
||||
|
||||
/* Comments */
|
||||
|
||||
COMMENT ON TABLE js_biz_category IS '业务分类';
|
||||
COMMENT ON COLUMN js_biz_category.category_code IS '流程分类';
|
||||
COMMENT ON COLUMN js_biz_category.view_code IS '分类代码';
|
||||
COMMENT ON COLUMN js_biz_category.category_name IS '分类名称';
|
||||
COMMENT ON COLUMN js_biz_category.parent_code IS '父级编号';
|
||||
COMMENT ON COLUMN js_biz_category.parent_codes IS '所有父级编号';
|
||||
COMMENT ON COLUMN js_biz_category.tree_sort IS '排序号(升序)';
|
||||
COMMENT ON COLUMN js_biz_category.tree_sorts IS '所有排序号';
|
||||
COMMENT ON COLUMN js_biz_category.tree_leaf IS '是否最末级';
|
||||
COMMENT ON COLUMN js_biz_category.tree_level IS '层次级别';
|
||||
COMMENT ON COLUMN js_biz_category.tree_names IS '全节点名';
|
||||
COMMENT ON COLUMN js_biz_category.status IS '状态(0正常 1删除 2停用)';
|
||||
COMMENT ON COLUMN js_biz_category.create_by IS '创建者';
|
||||
COMMENT ON COLUMN js_biz_category.create_date IS '创建时间';
|
||||
COMMENT ON COLUMN js_biz_category.update_by IS '更新者';
|
||||
COMMENT ON COLUMN js_biz_category.update_date IS '更新时间';
|
||||
COMMENT ON COLUMN js_biz_category.remarks IS '备注信息';
|
||||
COMMENT ON COLUMN js_biz_category.corp_code IS '租户代码';
|
||||
COMMENT ON COLUMN js_biz_category.corp_name IS '租户名称';
|
||||
COMMENT ON TABLE js_gen_table IS '代码生成表';
|
||||
COMMENT ON COLUMN js_gen_table.table_name IS '表名';
|
||||
COMMENT ON COLUMN js_gen_table.class_name IS '实体类名称';
|
||||
@@ -1095,6 +1058,25 @@ COMMENT ON COLUMN js_sys_area.create_date IS '创建时间';
|
||||
COMMENT ON COLUMN js_sys_area.update_by IS '更新者';
|
||||
COMMENT ON COLUMN js_sys_area.update_date IS '更新时间';
|
||||
COMMENT ON COLUMN js_sys_area.remarks IS '备注信息';
|
||||
COMMENT ON TABLE js_biz_category IS '业务分类';
|
||||
COMMENT ON COLUMN js_biz_category.category_code IS '流程分类';
|
||||
COMMENT ON COLUMN js_biz_category.view_code IS '分类代码';
|
||||
COMMENT ON COLUMN js_biz_category.category_name IS '分类名称';
|
||||
COMMENT ON COLUMN js_biz_category.parent_code IS '父级编号';
|
||||
COMMENT ON COLUMN js_biz_category.parent_codes IS '所有父级编号';
|
||||
COMMENT ON COLUMN js_biz_category.tree_sort IS '排序号(升序)';
|
||||
COMMENT ON COLUMN js_biz_category.tree_sorts IS '所有排序号';
|
||||
COMMENT ON COLUMN js_biz_category.tree_leaf IS '是否最末级';
|
||||
COMMENT ON COLUMN js_biz_category.tree_level IS '层次级别';
|
||||
COMMENT ON COLUMN js_biz_category.tree_names IS '全节点名';
|
||||
COMMENT ON COLUMN js_biz_category.status IS '状态(0正常 1删除 2停用)';
|
||||
COMMENT ON COLUMN js_biz_category.create_by IS '创建者';
|
||||
COMMENT ON COLUMN js_biz_category.create_date IS '创建时间';
|
||||
COMMENT ON COLUMN js_biz_category.update_by IS '更新者';
|
||||
COMMENT ON COLUMN js_biz_category.update_date IS '更新时间';
|
||||
COMMENT ON COLUMN js_biz_category.remarks IS '备注信息';
|
||||
COMMENT ON COLUMN js_biz_category.corp_code IS '租户代码';
|
||||
COMMENT ON COLUMN js_biz_category.corp_name IS '租户名称';
|
||||
COMMENT ON TABLE js_sys_company IS '公司表';
|
||||
COMMENT ON COLUMN js_sys_company.company_code IS '公司编码';
|
||||
COMMENT ON COLUMN js_sys_company.view_code IS '公司代码';
|
||||
@@ -1393,15 +1375,6 @@ COMMENT ON COLUMN js_sys_menu.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_sys_menu.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_sys_menu.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_sys_menu.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_sys_menu_data_scope IS '菜单数据权限';
|
||||
COMMENT ON COLUMN js_sys_menu_data_scope.id IS '编号';
|
||||
COMMENT ON COLUMN js_sys_menu_data_scope.role_code IS '角色编码';
|
||||
COMMENT ON COLUMN js_sys_menu_data_scope.menu_code IS '菜单编码';
|
||||
COMMENT ON COLUMN js_sys_menu_data_scope.rule_name IS '规则名称';
|
||||
COMMENT ON COLUMN js_sys_menu_data_scope.rule_type IS '规则类型(1 角色数据范围 2自定义条件规则 3自定义SQL)';
|
||||
COMMENT ON COLUMN js_sys_menu_data_scope.rule_config IS '规则配置(JSON)';
|
||||
COMMENT ON COLUMN js_sys_menu_data_scope.status IS '状态(0正常 1删除 2停用)';
|
||||
COMMENT ON COLUMN js_sys_menu_data_scope.remarks IS '备注信息';
|
||||
COMMENT ON TABLE js_sys_module IS '模块表';
|
||||
COMMENT ON COLUMN js_sys_module.module_code IS '模块编码';
|
||||
COMMENT ON COLUMN js_sys_module.module_name IS '模块名称';
|
||||
@@ -1578,7 +1551,7 @@ COMMENT ON COLUMN js_sys_role.is_sys IS '系统内置(1是 0否)';
|
||||
COMMENT ON COLUMN js_sys_role.is_show IS '是否显示';
|
||||
COMMENT ON COLUMN js_sys_role.user_type IS '用户类型(employee员工 member会员)';
|
||||
COMMENT ON COLUMN js_sys_role.desktop_url IS '桌面地址(仪表盘地址)';
|
||||
COMMENT ON COLUMN js_sys_role.data_scope IS '数据范围(0未设置 1全部数据 2自定义数据)';
|
||||
COMMENT ON COLUMN js_sys_role.data_scope IS '数据范围设置(0未设置 1全部数据 2自定义数据)';
|
||||
COMMENT ON COLUMN js_sys_role.biz_scope IS '适应业务范围(不同的功能,不同的数据权限支持)';
|
||||
COMMENT ON COLUMN js_sys_role.sys_codes IS '包含系统(多个用逗号隔开)';
|
||||
COMMENT ON COLUMN js_sys_role.status IS '状态(0正常 1删除 2停用)';
|
||||
@@ -1615,7 +1588,6 @@ COMMENT ON COLUMN js_sys_role_data_scope.role_code IS '控制角色编码';
|
||||
COMMENT ON COLUMN js_sys_role_data_scope.ctrl_type IS '控制类型';
|
||||
COMMENT ON COLUMN js_sys_role_data_scope.ctrl_data IS '控制数据';
|
||||
COMMENT ON COLUMN js_sys_role_data_scope.ctrl_permi IS '控制权限';
|
||||
COMMENT ON COLUMN js_sys_role_data_scope.menu_code IS '菜单编码';
|
||||
COMMENT ON TABLE js_sys_role_menu IS '角色与菜单关联表';
|
||||
COMMENT ON COLUMN js_sys_role_menu.role_code IS '角色编码';
|
||||
COMMENT ON COLUMN js_sys_role_menu.menu_code IS '菜单编码';
|
||||
|
||||
@@ -2,31 +2,6 @@
|
||||
|
||||
/* Create Tables */
|
||||
|
||||
-- 业务分类
|
||||
CREATE TABLE [js_biz_category]
|
||||
(
|
||||
[category_code] varchar(64) NOT NULL,
|
||||
[view_code] varchar(500),
|
||||
[category_name] varchar(64) NOT NULL,
|
||||
[parent_code] varchar(64) NOT NULL,
|
||||
[parent_codes] varchar(767) NOT NULL,
|
||||
[tree_sort] decimal(10) NOT NULL,
|
||||
[tree_sorts] varchar(767) NOT NULL,
|
||||
[tree_leaf] char(1) NOT NULL,
|
||||
[tree_level] decimal(4) NOT NULL,
|
||||
[tree_names] varchar(767) NOT NULL,
|
||||
[status] char(1) DEFAULT '0' NOT NULL,
|
||||
[create_by] varchar(64) NOT NULL,
|
||||
[create_date] datetime NOT NULL,
|
||||
[update_by] varchar(64) NOT NULL,
|
||||
[update_date] datetime NOT NULL,
|
||||
[remarks] nvarchar(500),
|
||||
[corp_code] varchar(64) DEFAULT '0' NOT NULL,
|
||||
[corp_name] nvarchar(100) DEFAULT 'JeeSite' NOT NULL,
|
||||
PRIMARY KEY ([category_code])
|
||||
);
|
||||
|
||||
|
||||
-- 代码生成表
|
||||
CREATE TABLE [js_gen_table]
|
||||
(
|
||||
@@ -104,6 +79,31 @@ CREATE TABLE [js_sys_area]
|
||||
);
|
||||
|
||||
|
||||
-- 业务分类
|
||||
CREATE TABLE [js_biz_category]
|
||||
(
|
||||
[category_code] varchar(64) NOT NULL,
|
||||
[view_code] varchar(500),
|
||||
[category_name] varchar(64) NOT NULL,
|
||||
[parent_code] varchar(64) NOT NULL,
|
||||
[parent_codes] varchar(767) NOT NULL,
|
||||
[tree_sort] decimal(10) NOT NULL,
|
||||
[tree_sorts] varchar(767) NOT NULL,
|
||||
[tree_leaf] char(1) NOT NULL,
|
||||
[tree_level] decimal(4) NOT NULL,
|
||||
[tree_names] varchar(767) NOT NULL,
|
||||
[status] char(1) DEFAULT '0' NOT NULL,
|
||||
[create_by] varchar(64) NOT NULL,
|
||||
[create_date] datetime NOT NULL,
|
||||
[update_by] varchar(64) NOT NULL,
|
||||
[update_date] datetime NOT NULL,
|
||||
[remarks] nvarchar(500),
|
||||
[corp_code] varchar(64) DEFAULT '0' NOT NULL,
|
||||
[corp_name] nvarchar(100) DEFAULT 'JeeSite' NOT NULL,
|
||||
PRIMARY KEY ([category_code])
|
||||
);
|
||||
|
||||
|
||||
-- 公司表
|
||||
CREATE TABLE [js_sys_company]
|
||||
(
|
||||
@@ -492,21 +492,6 @@ CREATE TABLE [js_sys_menu]
|
||||
);
|
||||
|
||||
|
||||
-- 菜单数据权限
|
||||
CREATE TABLE [js_sys_menu_data_scope]
|
||||
(
|
||||
[id] varchar(64) NOT NULL,
|
||||
[role_code] varchar(64) NOT NULL,
|
||||
[menu_code] varchar(64) NOT NULL,
|
||||
[rule_name] varchar(100),
|
||||
[rule_type] char(1),
|
||||
[rule_config] text,
|
||||
[status] char(1),
|
||||
[remarks] nvarchar(500),
|
||||
PRIMARY KEY ([id])
|
||||
);
|
||||
|
||||
|
||||
-- 模块表
|
||||
CREATE TABLE [js_sys_module]
|
||||
(
|
||||
@@ -782,8 +767,7 @@ CREATE TABLE [js_sys_role_data_scope]
|
||||
[ctrl_type] varchar(20) NOT NULL,
|
||||
[ctrl_data] varchar(64) NOT NULL,
|
||||
[ctrl_permi] varchar(64) NOT NULL,
|
||||
[menu_code] varchar(64) DEFAULT '0' NOT NULL,
|
||||
PRIMARY KEY ([role_code], [ctrl_type], [ctrl_data], [ctrl_permi], [menu_code])
|
||||
PRIMARY KEY ([role_code], [ctrl_type], [ctrl_data], [ctrl_permi])
|
||||
);
|
||||
|
||||
|
||||
@@ -950,8 +934,6 @@ CREATE INDEX [idx_sys_menu_sc] ON [js_sys_menu] ([sys_code]);
|
||||
CREATE INDEX [idx_sys_menu_is] ON [js_sys_menu] ([is_show]);
|
||||
CREATE INDEX [idx_sys_menu_mcs] ON [js_sys_menu] ([module_codes]);
|
||||
CREATE INDEX [idx_sys_menu_wt] ON [js_sys_menu] ([weight]);
|
||||
CREATE INDEX [idx_sys_menu_ds_mc] ON [js_sys_menu_data_scope] ([menu_code]);
|
||||
CREATE INDEX [idx_sys_menu_ds_rc] ON [js_sys_menu_data_scope] ([role_code]);
|
||||
CREATE INDEX [idx_sys_module_status] ON [js_sys_module] ([status]);
|
||||
CREATE INDEX [idx_sys_msg_inner_cb] ON [js_sys_msg_inner] ([create_by]);
|
||||
CREATE INDEX [idx_sys_msg_inner_status] ON [js_sys_msg_inner] ([status]);
|
||||
|
||||
@@ -3,31 +3,6 @@ SET SESSION FOREIGN_KEY_CHECKS=0;
|
||||
|
||||
/* Create Tables */
|
||||
|
||||
-- 业务分类
|
||||
CREATE TABLE js_biz_category
|
||||
(
|
||||
category_code varchar(64) NOT NULL COMMENT '流程分类',
|
||||
view_code varchar(500) COMMENT '分类代码',
|
||||
category_name varchar(64) NOT NULL COMMENT '分类名称',
|
||||
parent_code varchar(64) NOT NULL COMMENT '父级编号',
|
||||
parent_codes varchar(767) NOT NULL COMMENT '所有父级编号',
|
||||
tree_sort decimal(10) 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(767) NOT NULL COMMENT '全节点名',
|
||||
status char(1) DEFAULT '0' NOT NULL COMMENT '状态(0正常 1删除 2停用)',
|
||||
create_by varchar(64) NOT NULL COMMENT '创建者',
|
||||
create_date datetime NOT NULL COMMENT '创建时间',
|
||||
update_by varchar(64) NOT NULL COMMENT '更新者',
|
||||
update_date datetime NOT NULL COMMENT '更新时间',
|
||||
remarks varchar(500) COMMENT '备注信息',
|
||||
corp_code varchar(64) DEFAULT '0' NOT NULL COMMENT '租户代码',
|
||||
corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL COMMENT '租户名称',
|
||||
PRIMARY KEY (category_code)
|
||||
) COMMENT = '业务分类';
|
||||
|
||||
|
||||
-- 代码生成表
|
||||
CREATE TABLE js_gen_table
|
||||
(
|
||||
@@ -105,6 +80,31 @@ CREATE TABLE js_sys_area
|
||||
) COMMENT = '行政区划';
|
||||
|
||||
|
||||
-- 业务分类
|
||||
CREATE TABLE js_biz_category
|
||||
(
|
||||
category_code varchar(64) NOT NULL COMMENT '流程分类',
|
||||
view_code varchar(500) COMMENT '分类代码',
|
||||
category_name varchar(64) NOT NULL COMMENT '分类名称',
|
||||
parent_code varchar(64) NOT NULL COMMENT '父级编号',
|
||||
parent_codes varchar(767) NOT NULL COMMENT '所有父级编号',
|
||||
tree_sort decimal(10) 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(767) NOT NULL COMMENT '全节点名',
|
||||
status char(1) DEFAULT '0' NOT NULL COMMENT '状态(0正常 1删除 2停用)',
|
||||
create_by varchar(64) NOT NULL COMMENT '创建者',
|
||||
create_date datetime NOT NULL COMMENT '创建时间',
|
||||
update_by varchar(64) NOT NULL COMMENT '更新者',
|
||||
update_date datetime NOT NULL COMMENT '更新时间',
|
||||
remarks varchar(500) COMMENT '备注信息',
|
||||
corp_code varchar(64) DEFAULT '0' NOT NULL COMMENT '租户代码',
|
||||
corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL COMMENT '租户名称',
|
||||
PRIMARY KEY (category_code)
|
||||
) COMMENT = '业务分类';
|
||||
|
||||
|
||||
-- 公司表
|
||||
CREATE TABLE js_sys_company
|
||||
(
|
||||
@@ -493,21 +493,6 @@ CREATE TABLE js_sys_menu
|
||||
) COMMENT = '菜单表';
|
||||
|
||||
|
||||
-- 菜单数据权限
|
||||
CREATE TABLE js_sys_menu_data_scope
|
||||
(
|
||||
id varchar(64) NOT NULL COMMENT '编号',
|
||||
role_code varchar(64) NOT NULL COMMENT '角色编码',
|
||||
menu_code varchar(64) NOT NULL COMMENT '菜单编码',
|
||||
rule_name varchar(100) COMMENT '规则名称',
|
||||
rule_type char(1) COMMENT '规则类型(1 角色数据范围 2自定义条件规则 3自定义SQL)',
|
||||
rule_config text COMMENT '规则配置(JSON)',
|
||||
status char(1) COMMENT '状态(0正常 1删除 2停用)',
|
||||
remarks varchar(500) COMMENT '备注信息',
|
||||
PRIMARY KEY (id)
|
||||
) COMMENT = '菜单数据权限';
|
||||
|
||||
|
||||
-- 模块表
|
||||
CREATE TABLE js_sys_module
|
||||
(
|
||||
@@ -740,7 +725,7 @@ CREATE TABLE js_sys_role
|
||||
is_show char(1) DEFAULT '1' COMMENT '是否显示',
|
||||
user_type varchar(16) COMMENT '用户类型(employee员工 member会员)',
|
||||
desktop_url varchar(255) COMMENT '桌面地址(仪表盘地址)',
|
||||
data_scope char(1) COMMENT '数据范围(0未设置 1全部数据 2自定义数据)',
|
||||
data_scope char(1) COMMENT '数据范围设置(0未设置 1全部数据 2自定义数据)',
|
||||
biz_scope varchar(255) COMMENT '适应业务范围(不同的功能,不同的数据权限支持)',
|
||||
sys_codes varchar(500) COMMENT '包含系统(多个用逗号隔开)',
|
||||
status char(1) DEFAULT '0' NOT NULL COMMENT '状态(0正常 1删除 2停用)',
|
||||
@@ -783,8 +768,7 @@ CREATE TABLE js_sys_role_data_scope
|
||||
ctrl_type varchar(20) NOT NULL COMMENT '控制类型',
|
||||
ctrl_data varchar(64) NOT NULL COMMENT '控制数据',
|
||||
ctrl_permi varchar(64) NOT NULL COMMENT '控制权限',
|
||||
menu_code varchar(64) DEFAULT '0' NOT NULL COMMENT '菜单编码',
|
||||
PRIMARY KEY (role_code, ctrl_type, ctrl_data, ctrl_permi, menu_code)
|
||||
PRIMARY KEY (role_code, ctrl_type, ctrl_data, ctrl_permi)
|
||||
) COMMENT = '角色数据权限表';
|
||||
|
||||
|
||||
@@ -951,8 +935,6 @@ CREATE INDEX idx_sys_menu_sc ON js_sys_menu (sys_code ASC);
|
||||
CREATE INDEX idx_sys_menu_is ON js_sys_menu (is_show ASC);
|
||||
CREATE INDEX idx_sys_menu_mcs ON js_sys_menu (module_codes ASC);
|
||||
CREATE INDEX idx_sys_menu_wt ON js_sys_menu (weight ASC);
|
||||
CREATE INDEX idx_sys_menu_ds_mc ON js_sys_menu_data_scope (menu_code ASC);
|
||||
CREATE INDEX idx_sys_menu_ds_rc ON js_sys_menu_data_scope (role_code ASC);
|
||||
CREATE INDEX idx_sys_module_status ON js_sys_module (status ASC);
|
||||
CREATE INDEX idx_sys_msg_inner_cb ON js_sys_msg_inner (create_by ASC);
|
||||
CREATE INDEX idx_sys_msg_inner_status ON js_sys_msg_inner (status ASC);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user