Compare commits
26 Commits
v5.12.0.sp
...
v5.12.1.sp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0e5a9aeeda | ||
|
|
b0e6ab234e | ||
|
|
0e33e2a6a9 | ||
|
|
d611238583 | ||
|
|
200c374dee | ||
|
|
0408671952 | ||
|
|
c869dc037c | ||
|
|
055d3036fb | ||
|
|
94d8dcff3f | ||
|
|
3819fb1276 | ||
|
|
af42b315b2 | ||
|
|
6bc118efeb | ||
|
|
19e395ae1f | ||
|
|
bdbd616130 | ||
|
|
b12a225768 | ||
|
|
1ca6bfa942 | ||
|
|
bf8b05a49e | ||
|
|
26587e106f | ||
|
|
7317bc227e | ||
|
|
3392c66fd5 | ||
|
|
6c8e8b930b | ||
|
|
2e832ef693 | ||
|
|
b10f9d36fb | ||
|
|
ae2d2ae76f | ||
|
|
6d5cd49c19 | ||
|
|
6b7813beaf |
68
README.md
68
README.md
@@ -112,6 +112,7 @@
|
||||
* 内置功能:<https://jeesite.com/docs/function/>
|
||||
* 目录结构:<https://jeesite.com/docs/catalog/>
|
||||
* 架构特点:<https://jeesite.com/docs/feature/>
|
||||
* 参数配置:<https://jeesite.com/docs/config/>
|
||||
* 开发规范:<https://jeesite.com/docs/standard/>
|
||||
* 代码生成:<https://jeesite.com/docs/code-gen/>
|
||||
|
||||
@@ -133,8 +134,8 @@
|
||||
|
||||
### 在线演示
|
||||
|
||||
1. 全栈版地址:<http://demo.jeesite.com>
|
||||
2. Vue3分离版地址:<http://vue.jeesite.com>
|
||||
1. 分离版地址:<https://vue.jeesite.com>
|
||||
2. 经典版地址:<https://demo.jeesite.com>
|
||||
|
||||
### 本地运行
|
||||
|
||||
@@ -146,10 +147,11 @@
|
||||
6. 浏览器访问:<http://127.0.0.1:8980/js> 账号 system 密码 admin
|
||||
7. 部署常见问题:<https://jeesite.com/docs/faq/>
|
||||
8. 分离端安装:<https://jeesite.com/docs/vue-install-deploy/>
|
||||
9. 分离端常见问题:<https://jeesite.com/docs/vue-faq/>
|
||||
|
||||
### 快速运行
|
||||
|
||||
1. 环境准备:`JDK 1.8 or 11、17`、`Maven 3.6+`、无需准备数据库(使用内嵌 H2 DB、Vue资源包)
|
||||
1. 环境准备:`JDK 1.8 or 11、17`、`Maven 3.6+`、无需准备数据库(使用内嵌 H2 DB、包含 Vue 和 全栈双版本)
|
||||
2. 下载源码:<https://gitee.com/thinkgem/jeesite5/repository/archive/v5.9.zip> 并解压
|
||||
3. 执行脚本:`/web-fast/bin/run-tomcat.bat` 启动服务即可(自动初始化库)
|
||||
4. Vue分离版本地址:<http://127.0.0.1:8980/vue/login>
|
||||
@@ -159,7 +161,7 @@
|
||||
|
||||
### 容器运行
|
||||
|
||||
- 拉取 Docker 镜像(演示使用,JeeSite版本较久):
|
||||
- 拉取 Docker 镜像(JeeSite版本不是最新):
|
||||
```sh
|
||||
docker pull thinkgem/jeesite-web
|
||||
```
|
||||
@@ -169,31 +171,50 @@ docker run --name jeesite-web -p 8980:8980 -d --restart unless-stopped \
|
||||
-v ~/:/data thinkgem/jeesite-web && docker logs -f jeesite-web
|
||||
```
|
||||
- 浏览器访问:<http://127.0.0.1:8980/js/> 账号 system 密码 admin
|
||||
- 分离端安装:<https://jeesite.com/docs/vue-install-deploy/>
|
||||
|
||||
### 开发环境
|
||||
|
||||
1. 部署运行文档:<https://jeesite.com/docs/install-deploy/>
|
||||
2. 部署常见问题:<https://jeesite.com/docs/faq/>
|
||||
3. 分离端安装:<https://jeesite.com/docs/vue-install-deploy/>
|
||||
3. 分离端运行文档:<https://jeesite.com/docs/vue-install-deploy/>
|
||||
4. 分离端常见问题:<https://jeesite.com/docs/vue-faq/>
|
||||
|
||||
## 技术文章
|
||||
|
||||
* 菜单和按钮权限:<https://jeesite.com/docs/permi-shiro/>
|
||||
* 强大的数据权限:<https://jeesite.com/docs/service-datascope/#数据权限>
|
||||
* 表结构数据字典:<https://jeesite.com/docs/code-gen/#表结构数据字典>
|
||||
* 持久层设计:<https://jeesite.com/docs/dao-mybatis/>
|
||||
* 后端工具:<https://jeesite.com/docs/sys-utils/>
|
||||
* 库表生成、代码生成:https://jeesite.com/docs/code-gen/>
|
||||
* 菜单权限、按钮权限:<https://jeesite.com/docs/permi-shiro/>
|
||||
* 数据权限、库事务:<https://jeesite.com/docs/service-datascope/#数据权限>
|
||||
* 表结构、数据字典:<https://jeesite.com/docs/code-gen/#表结构数据字典>
|
||||
* 持久层框架、SQL:<https://jeesite.com/docs/dao-mybatis/>
|
||||
* 后端常用工具:<https://jeesite.com/docs/sys-utils/>
|
||||
|
||||
**分离版**
|
||||
|
||||
* 版本介绍:<https://jeesite.com/docs/jeesite-vue/>
|
||||
* 源码解析:<https://jeesite.com/docs/vue-crud-view/>
|
||||
* 表单组件:<https://jeesite.com/docs/vue-basic-form/>
|
||||
* 表格组件:<https://jeesite.com/docs/vue-basic-table/>
|
||||
* 参数配置:<https://jeesite.com/docs/vue-settings/>
|
||||
* 常用组件:<https://jeesite.com/docs/vue-comp/>
|
||||
* 前端权限:<https://jeesite.com/docs/vue-auth/>
|
||||
* 图标组件:<https://jeesite.com/docs/vue-icon/>
|
||||
* 前端样式库:<https://jeesite.com/docs/vue-style/>
|
||||
* 多语言国际化:<https://jeesite.com/docs/vue-i18n/>
|
||||
|
||||
**经典版**
|
||||
|
||||
* 表单组件:<https://jeesite.com/docs/views-beetl/>
|
||||
* 表格组件:<https://jeesite.com/docs/datagrid/>
|
||||
* js工具:<https://jeesite.com/docs/jeesite-js/>
|
||||
* 常用工具:<https://jeesite.com/docs/jeesite-js/>
|
||||
* 自定义主题:<https://jeesite.com/docs/custom-views/>
|
||||
|
||||
## 专题文章
|
||||
|
||||
* 自定义主题:<https://jeesite.com/docs/custom-views/>
|
||||
* 国际化多语言:<https://jeesite.com/docs/i18n-locale/>
|
||||
* 接口文档:<https://jeesite.com/docs/mobile-rest-api/>
|
||||
* 系统接口文档:<https://jeesite.com/docs/mobile-rest-api/>
|
||||
* 多语言国际化:<https://jeesite.com/docs/i18n-locale/>
|
||||
* BPM工作流引擎:<https://jeesite.com/docs/bpm/>
|
||||
* CMS内容管理:<https://jeesite.com/docs/cms/>
|
||||
* AI知识库助手:<https://jeesite.com/docs/cms-ai/>
|
||||
* 用户类型:<https://jeesite.com/docs/user-type/>
|
||||
* 消息推送:<https://jeesite.com/docs/msg-push-use/>
|
||||
* 单点登录:<https://jeesite.com/docs/sso-cas/>
|
||||
@@ -214,20 +235,9 @@ docker run --name jeesite-web -p 8980:8980 -d --restart unless-stopped \
|
||||
* Spring Cloud 微服务:<https://jeesite.com/docs/springcloud/>
|
||||
* 分布式事务 Seata:<https://jeesite.com/docs/springcloud-seata/>
|
||||
* 读写分离、分库分表:<https://jeesite.com/docs/sharding/>
|
||||
|
||||
## 前后分离版
|
||||
|
||||
* Vue 版介绍:<https://jeesite.com/docs/jeesite-vue/>
|
||||
* Vue 安装部署:<https://jeesite.com/docs/vue-install-deploy/>
|
||||
* Vue 参数配置:<https://jeesite.com/docs/vue-settings/>
|
||||
* Vue 前端权限:<https://jeesite.com/docs/vue-auth/>
|
||||
* Vue 源码解析:<https://jeesite.com/docs/vue-crud-view/>
|
||||
* Vue 表单组件:<https://jeesite.com/docs/vue-basic-form/>
|
||||
* Vue 表格组件:<https://jeesite.com/docs/vue-basic-table/>
|
||||
* Vue 常用组件:<https://jeesite.com/docs/vue-comp/>
|
||||
* Vue 图标组件:<https://jeesite.com/docs/vue-icon/>
|
||||
* Vue 国际化多语言:<https://jeesite.com/docs/vue-i18n/>
|
||||
* Vue 样式库:<https://jeesite.com/docs/vue-style/>
|
||||
* 监控系统集成:<https://jeesite.com/docs/webadmin/>
|
||||
* 追踪系统集成:<https://jeesite.com/docs/skywalking/>
|
||||
* ELK日志收集:<https://jeesite.com/docs/elk-log/>
|
||||
|
||||
## 授权协议声明
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>5.12.0-SNAPSHOT</version>
|
||||
<version>5.12.1-SNAPSHOT</version>
|
||||
<relativePath>../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ import java.security.*;
|
||||
public class DigestUtils {
|
||||
|
||||
public static final String SHA1 = "SHA-1";
|
||||
public static final String SHA256 = "SHA-256";
|
||||
public static final String MD5 = "MD5";
|
||||
public static final String SM3 = "SM3";
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@ public class EncodeUtils {
|
||||
private static final List<Pattern> xssPatterns = ListUtils.newArrayList(
|
||||
Pattern.compile("(<\\s*(script|link|style|iframe)([\\s\\S]*?)(>|<\\/\\s*\\1\\s*>))|(</\\s*(script|link|style|iframe)\\s*>)", Pattern.CASE_INSENSITIVE),
|
||||
Pattern.compile("\\s*(href|src)\\s*=\\s*(\"\\s*(javascript|vbscript):[^\"]+\"|'\\s*(javascript|vbscript):[^']+'|(javascript|vbscript):[^\\s]+)\\s*(?=>)", Pattern.CASE_INSENSITIVE),
|
||||
Pattern.compile("\\s*on[a-z]+\\s*=\\s*(\"[^\"]+\"|'[^']+'|[^\\s]+)\\s*(?=>)", Pattern.CASE_INSENSITIVE),
|
||||
Pattern.compile("\\s*/?\\s*on[a-zA-Z]+\\s*=\\s*(['\"]?)(.*?)\\1(?=\\s|>|/>)", Pattern.CASE_INSENSITIVE),
|
||||
Pattern.compile("(eval\\((.*?)\\)|expression\\((.*?)\\))", Pattern.CASE_INSENSITIVE),
|
||||
Pattern.compile("^(javascript:|vbscript:)", Pattern.CASE_INSENSITIVE)
|
||||
);
|
||||
|
||||
@@ -4,79 +4,11 @@
|
||||
*/
|
||||
package com.jeesite.common.codec;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
/**
|
||||
* SHA-1 加密工具类,散列加密,不可逆加密
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public class Sha1Utils {
|
||||
|
||||
/**
|
||||
* 生成随机的 Byte[] 作为 salt 密钥.
|
||||
* @param numBytes byte数组的大小
|
||||
*/
|
||||
public static byte[] genSalt(int numBytes) {
|
||||
return DigestUtils.genSalt(numBytes);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成随机的 Byte[] 作为 salt 密钥,返回 HEX 值
|
||||
* @param numBytes byte 数组的大小
|
||||
*/
|
||||
public static String genSaltString(int numBytes) {
|
||||
return DigestUtils.genSaltString(numBytes);
|
||||
}
|
||||
|
||||
/**
|
||||
* 对输入字符串进行 SHA-1 散列.
|
||||
*/
|
||||
public static byte[] sha1(byte[] input) {
|
||||
return DigestUtils.digest(input, DigestUtils.SHA1, null, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 对输入字符串进行 SHA-1 散列.
|
||||
*/
|
||||
public static String sha1(String input) {
|
||||
return EncodeUtils.encodeHex(sha1(input.getBytes(StandardCharsets.UTF_8)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 对输入字符串进行 SHA-1 散列.
|
||||
*/
|
||||
public static byte[] sha1(byte[] input, byte[] salt) {
|
||||
return DigestUtils.digest(input, DigestUtils.SHA1, salt, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 对输入字符串进行 SHA-1 散列.
|
||||
*/
|
||||
public static String sha1(String data, String salt) {
|
||||
return EncodeUtils.encodeHex(sha1(data.getBytes(StandardCharsets.UTF_8), EncodeUtils.decodeHex(salt)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 对输入字符串进行 SHA-1 散列.
|
||||
*/
|
||||
public static byte[] sha1(byte[] input, byte[] salt, int iterations) {
|
||||
return DigestUtils.digest(input, DigestUtils.SHA1, salt, iterations);
|
||||
}
|
||||
|
||||
/**
|
||||
* 对输入字符串进行 SHA-1 散列.
|
||||
*/
|
||||
public static String sha1(String input, String salt, int iterations) {
|
||||
return EncodeUtils.encodeHex(sha1(input.getBytes(StandardCharsets.UTF_8), EncodeUtils.decodeHex(salt), iterations));
|
||||
}
|
||||
|
||||
/**
|
||||
* 对文件进行 SHA-1 散列.
|
||||
*/
|
||||
public static byte[] sha1(InputStream input) throws IOException {
|
||||
return DigestUtils.digest(input, DigestUtils.SHA1);
|
||||
}
|
||||
@Deprecated
|
||||
public class Sha1Utils extends ShaUtils {
|
||||
|
||||
}
|
||||
|
||||
131
common/src/main/java/com/jeesite/common/codec/ShaUtils.java
Normal file
131
common/src/main/java/com/jeesite/common/codec/ShaUtils.java
Normal file
@@ -0,0 +1,131 @@
|
||||
/**
|
||||
* 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 java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
/**
|
||||
* SHA-1 和 SHA-256 加密工具类,散列加密,不可逆加密
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public class ShaUtils {
|
||||
|
||||
/**
|
||||
* 生成随机的 Byte[] 作为 salt 密钥.
|
||||
* @param numBytes byte数组的大小
|
||||
*/
|
||||
public static byte[] genSalt(int numBytes) {
|
||||
return DigestUtils.genSalt(numBytes);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成随机的 Byte[] 作为 salt 密钥,返回 HEX 值
|
||||
* @param numBytes byte 数组的大小
|
||||
*/
|
||||
public static String genSaltString(int numBytes) {
|
||||
return DigestUtils.genSaltString(numBytes);
|
||||
}
|
||||
|
||||
/**
|
||||
* 对输入字符串进行 SHA-1 散列.
|
||||
*/
|
||||
public static byte[] sha1(byte[] input) {
|
||||
return DigestUtils.digest(input, DigestUtils.SHA1, null, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 对输入字符串进行 SHA-1 散列.
|
||||
*/
|
||||
public static String sha1(String input) {
|
||||
return EncodeUtils.encodeHex(sha1(input.getBytes(StandardCharsets.UTF_8)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 对输入字符串进行 SHA-1 散列.
|
||||
*/
|
||||
public static byte[] sha1(byte[] input, byte[] salt) {
|
||||
return DigestUtils.digest(input, DigestUtils.SHA1, salt, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 对输入字符串进行 SHA-1 散列.
|
||||
*/
|
||||
public static String sha1(String data, String salt) {
|
||||
return EncodeUtils.encodeHex(sha1(data.getBytes(StandardCharsets.UTF_8), EncodeUtils.decodeHex(salt)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 对输入字符串进行 SHA-1 散列.
|
||||
*/
|
||||
public static byte[] sha1(byte[] input, byte[] salt, int iterations) {
|
||||
return DigestUtils.digest(input, DigestUtils.SHA1, salt, iterations);
|
||||
}
|
||||
|
||||
/**
|
||||
* 对输入字符串进行 SHA-1 散列.
|
||||
*/
|
||||
public static String sha1(String input, String salt, int iterations) {
|
||||
return EncodeUtils.encodeHex(sha1(input.getBytes(StandardCharsets.UTF_8), EncodeUtils.decodeHex(salt), iterations));
|
||||
}
|
||||
|
||||
/**
|
||||
* 对文件进行 SHA-1 散列.
|
||||
*/
|
||||
public static byte[] sha1(InputStream input) throws IOException {
|
||||
return DigestUtils.digest(input, DigestUtils.SHA1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 对输入字符串进行 SHA-256 散列.
|
||||
*/
|
||||
public static byte[] sha256(byte[] input) {
|
||||
return DigestUtils.digest(input, DigestUtils.SHA256, null, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 对输入字符串进行 SHA-256 散列.
|
||||
*/
|
||||
public static String sha256(String input) {
|
||||
return EncodeUtils.encodeHex(sha256(input.getBytes(StandardCharsets.UTF_8)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 对输入字符串进行 SHA-256 散列.
|
||||
*/
|
||||
public static byte[] sha256(byte[] input, byte[] salt) {
|
||||
return DigestUtils.digest(input, DigestUtils.SHA256, salt, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 对输入字符串进行 SHA-256 散列.
|
||||
*/
|
||||
public static String sha256(String data, String salt) {
|
||||
return EncodeUtils.encodeHex(sha256(data.getBytes(StandardCharsets.UTF_8), EncodeUtils.decodeHex(salt)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 对输入字符串进行 SHA-256 散列.
|
||||
*/
|
||||
public static byte[] sha256(byte[] input, byte[] salt, int iterations) {
|
||||
return DigestUtils.digest(input, DigestUtils.SHA256, salt, iterations);
|
||||
}
|
||||
|
||||
/**
|
||||
* 对输入字符串进行 SHA-256 散列.
|
||||
*/
|
||||
public static String sha256(String input, String salt, int iterations) {
|
||||
return EncodeUtils.encodeHex(sha256(input.getBytes(StandardCharsets.UTF_8), EncodeUtils.decodeHex(salt), iterations));
|
||||
}
|
||||
|
||||
/**
|
||||
* 对文件进行 SHA-256 散列.
|
||||
*/
|
||||
public static byte[] sha256(InputStream input) throws IOException {
|
||||
return DigestUtils.digest(input, DigestUtils.SHA256);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -79,47 +79,15 @@ public class JsonMapper extends ObjectMapper {
|
||||
.getProperty("lang.defaultTimeZone", "GMT+08:00")));
|
||||
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) {
|
||||
JsonFormat jf = am.getAnnotation(JsonFormat.class);
|
||||
if (jf != null && StringUtils.containsAnyIgnoreCase(jf.pattern(), pattern)) {
|
||||
return new JeeSiteJsonSerializer(jf.pattern());
|
||||
}
|
||||
return new JeeSiteJsonSerializer(null);
|
||||
}
|
||||
} else if (a instanceof AnnotatedClass) {
|
||||
@@ -132,13 +100,13 @@ public class JsonMapper extends ObjectMapper {
|
||||
@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) {
|
||||
AnnotatedElement m = am.getAnnotated();
|
||||
JsonFormat jf = m.getAnnotation(JsonFormat.class);
|
||||
if (jf != null && StringUtils.containsAnyIgnoreCase(jf.pattern(), pattern)) {
|
||||
return new JeeSiteJsonDeserializer(jf.pattern());
|
||||
}
|
||||
return new JeeSiteJsonDeserializer(null);
|
||||
}
|
||||
} else if (a instanceof AnnotatedClass) {
|
||||
@@ -152,6 +120,38 @@ public class JsonMapper extends ObjectMapper {
|
||||
return this;
|
||||
}
|
||||
|
||||
private static final String[] pattern = new String[] {"yyyy", "MM", "dd", "HH", "mm", "ss", "SSS"};
|
||||
private static final 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private static final 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启将空值转换为空字符串
|
||||
* @author ThinkGem
|
||||
|
||||
@@ -47,24 +47,31 @@ public class LocaleUtils {
|
||||
if (context != null){
|
||||
return context;
|
||||
}
|
||||
Locale locale;
|
||||
TimeZone timeZone;
|
||||
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();
|
||||
}
|
||||
};
|
||||
if (context != null){
|
||||
locale = context.getLocale();
|
||||
timeZone = context.getTimeZone();
|
||||
} else {
|
||||
locale = Locale.getDefault();
|
||||
timeZone = TimeZone.getDefault();
|
||||
}
|
||||
context = new TimeZoneAwareLocaleContext() {
|
||||
@Override
|
||||
public Locale getLocale() {
|
||||
return locale;
|
||||
}
|
||||
@Override
|
||||
public TimeZone getTimeZone() {
|
||||
return timeZone;
|
||||
}
|
||||
};
|
||||
setTimeZoneAwareLocaleContext(context);
|
||||
return context;
|
||||
}
|
||||
|
||||
@@ -435,7 +435,7 @@
|
||||
},
|
||||
getNodeTitle: function(setting, node) {
|
||||
var t = setting.data.key.title === "" ? setting.data.key.name : setting.data.key.title;
|
||||
return "" + node[t];
|
||||
return "" + (node[t] || node[setting.data.key.name]);
|
||||
},
|
||||
getNodes: function(setting) {
|
||||
return data.getRoot(setting)[setting.data.key.children];
|
||||
|
||||
@@ -434,7 +434,7 @@
|
||||
},
|
||||
getNodeTitle: function(setting, node) {
|
||||
var t = setting.data.key.title === "" ? setting.data.key.name : setting.data.key.title;
|
||||
return "" + node[t];
|
||||
return "" + (node[t] || node[setting.data.key.name]);
|
||||
},
|
||||
getNodes: function(setting) {
|
||||
return data.getRoot(setting)[setting.data.key.children];
|
||||
|
||||
@@ -14,37 +14,49 @@ import com.jeesite.common.codec.EncodeUtils;
|
||||
public class EncodeUtilsTest {
|
||||
|
||||
public static void main(String[] args) {
|
||||
EncodeUtils.xssFilter("1 你好 <script>alert(document.cookie)</script>我还在。");
|
||||
EncodeUtils.xssFilter("2 你好 <strong>加粗文字</strong>我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->3 你好 \"><strong>加粗文字</strong>我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->4 你好 <iframe src=\"abcdef\"></iframe><strong>加粗文字</strong>我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->5 你好 <iframe src=\"abcdef\"/><strong>加粗文字</strong>我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->6 你好 <iframe src=\"abcdef\"><strong>加粗文字</strong>我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->7 你好 <script type=\"text/javascript\">alert(document.cookie)</script>我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->8 你好 <script\n type=\"text/javascript\">\nalert(document.cookie)\n</script>我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->9 你好 <script src='' onerror='alert(document.cookie)'></script>我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->10 你好 <script type=text/javascript>alert()我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->11 你好 <script>alert(document.cookie)</script>我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->12 你好 <script>window.location='url'我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->13 你好 </script></iframe>我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->14 你好 eval(abc)我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->15 你好 expression(abc)我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->16 你好 <img src='abc.jpg' onerror='location='';alert(document.cookie);'></img>我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->17 你好 <img src='abc.jpg' onerror='alert(document.cookie);'/>我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->18 你好 <img src='abc.jpg' onerror='alert(document.cookie);'>我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->19 你好 <a onload='alert(\"abc\")'>hello</a>我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->20 你好 <a href=\"/abc\">hello</a>我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->21 你好 <a href='/abc'>hello</a>我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->22 你好 <a href='vbscript:alert(\"abc\");'>hello</a>我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->23 你好 <a href='javascript:alert(\"abc\");'>hello</a>我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->24 你好 ?abc=def&hello=123&world={\"a\":1}我还在。");
|
||||
EncodeUtils.xssFilter("<!--HTML-->25 你好 ?abc=def&hello=123&world={'a':1}我还在。");
|
||||
EncodeUtils.sqlFilter("1 你好 select * from xxx where abc=def and 1=1我还在。");
|
||||
EncodeUtils.sqlFilter("2 你好 insert into xxx values(1,2,3,4,5)我还在。");
|
||||
EncodeUtils.sqlFilter("3 你好 delete from xxx我还在。");
|
||||
EncodeUtils.sqlFilter("4 a.audit_result asc,case when 1 like case when length(database())=6 then 1 else exp(111) end then 1 else 1/0 end", "orderBy");
|
||||
EncodeUtils.sqlFilter("5 if(1=2,1,SLEEP(10)), if(mid(database(),{},1)=\\\"{}\\\",a.id,a.login_name)", "orderBy");
|
||||
EncodeUtils.sqlFilter("6 a.audit_result asc, b.audit_result2 desc, b.AuditResult3 desc", "orderBy");
|
||||
int i = 0;
|
||||
xssFilter(i++, "你好 <script>alert(document.cookie)</script>我还在。");
|
||||
xssFilter(i++, "你好 <strong>加粗文字</strong>我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 \"><strong>加粗文字</strong>我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 <iframe src=\"abcdef\"></iframe><strong>加粗文字</strong>我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 <iframe src=\"abcdef\"/><strong>加粗文字</strong>我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 <iframe src=\"abcdef\"><strong>加粗文字</strong>我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 <script type=\"text/javascript\">alert(document.cookie)</script>我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 <script\n type=\"text/javascript\">\nalert(document.cookie)\n</script>我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 <script src='' onerror='alert(document.cookie)'></script>我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 <script type=text/javascript>alert()我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 <script>alert(document.cookie)</script>我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 <script>window.location='url'我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 </script></iframe>我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 eval(abc)我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 expression(abc)我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 <img src='abc.jpg' onerror='location='';alert(document.cookie);'></img>我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 <img src='abc.jpg' onerror='alert(document.cookie);'/>我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 <img src='abc.jpg' onerror='alert(document.cookie);'>我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 <a onload='alert(\"abc\")'>hello</a>我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 <a href=\"/abc\">hello</a>我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 <a href='/abc'>hello</a>我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 <a href='vbscript:alert(\"abc\");'>hello</a>我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 <a href='javascript:alert(\"abc\");'>hello</a>我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 ?abc=def&hello=123&world={\"a\":1}我还在。");
|
||||
xssFilter(i++, "<!--HTML-->你好 ?abc=def&hello=123&world={'a':1}我还在。");
|
||||
xssFilter(i++, "<!--HTML-->\"><svg/ONLOAD=confirm(3) />");
|
||||
sqlFilter(i++, "你好 select * from xxx where abc=def and 1=1我还在。", "common");
|
||||
sqlFilter(i++, "你好 insert into xxx values(1,2,3,4,5)我还在。", "common");
|
||||
sqlFilter(i++, "你好 delete from xxx我还在。", "common");
|
||||
sqlFilter(i++, "a.audit_result asc,case when 1 like case when length(database())=6 then 1 else exp(111) end then 1 else 1/0 end", "orderBy");
|
||||
sqlFilter(i++, "if(1=2,1,SLEEP(10)), if(mid(database(),{},1)=\\\"{}\\\",a.id,a.login_name)", "orderBy");
|
||||
sqlFilter(i++, "a.audit_result asc, b.audit_result2 desc, b.AuditResult3 desc", "orderBy");
|
||||
}
|
||||
|
||||
private static void xssFilter(int num, String text) {
|
||||
String text2 = EncodeUtils.xssFilter(text);
|
||||
System.out.println(num + ". " + text + "\t ==> \t" + text2 + "\t ==> \t" + text.equals(text2));
|
||||
}
|
||||
|
||||
private static void sqlFilter(int num, String text, String source) {
|
||||
String text2 = EncodeUtils.sqlFilter(text, source);
|
||||
System.out.println(num + ". " + text + "\t ==> \t" + text2 + "\t ==> \t" + text.equals(text2));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,28 +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.Sha1Utils;
|
||||
|
||||
/**
|
||||
* SHA-1 加密工具类,散列加密,不可逆加密
|
||||
* @author ThinkGem
|
||||
* @version 2024-07-22
|
||||
*/
|
||||
public class Sha1UtilsTest {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
String s = "Hello word! 你好,中文!";
|
||||
System.out.println(s);
|
||||
|
||||
String salt = Sha1Utils.genSaltString(8);
|
||||
System.out.println(salt);
|
||||
String data = Sha1Utils.sha1(s, salt);
|
||||
System.out.println(data);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/**
|
||||
* 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.ShaUtils;
|
||||
|
||||
/**
|
||||
* SHA-1 加密工具类,散列加密,不可逆加密
|
||||
* @author ThinkGem
|
||||
* @version 2024-07-22
|
||||
*/
|
||||
public class ShaUtilsTest {
|
||||
|
||||
public static final int HASH_ITERATIONS = 1024;
|
||||
public static final int SALT_SIZE = 8;
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
String s = "Hello word! 你好,中文!";
|
||||
System.out.println(s);
|
||||
|
||||
String salt = ShaUtils.genSaltString(SALT_SIZE);
|
||||
System.out.println(salt);
|
||||
String data = ShaUtils.sha1(s, salt, HASH_ITERATIONS);
|
||||
System.out.println(data);
|
||||
|
||||
String salt2 = ShaUtils.genSaltString(SALT_SIZE);
|
||||
System.out.println(salt2);
|
||||
String data2 = ShaUtils.sha256(s, salt2, HASH_ITERATIONS);
|
||||
System.out.println(data2);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>5.12.0-SNAPSHOT</version>
|
||||
<version>5.12.1-SNAPSHOT</version>
|
||||
<relativePath>../../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -27,4 +27,5 @@
|
||||
5.10.1
|
||||
5.11.0
|
||||
5.11.1
|
||||
5.12.0
|
||||
5.12.0
|
||||
5.12.1
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>5.12.0-SNAPSHOT</version>
|
||||
<version>5.12.1-SNAPSHOT</version>
|
||||
<relativePath>../../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -4,16 +4,16 @@
|
||||
*/
|
||||
package com.jeesite.modules.cms.utils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.springframework.core.io.Resource;
|
||||
|
||||
import com.jeesite.common.collect.ListUtils;
|
||||
import com.jeesite.common.collect.SetUtils;
|
||||
import com.jeesite.common.io.ResourceUtils;
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
import com.jeesite.modules.cms.entity.FileTemplete;
|
||||
import org.springframework.core.io.Resource;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 模板文件公共类库
|
||||
@@ -26,7 +26,10 @@ public class FileTempleteUtils {
|
||||
* 获取模版文件
|
||||
* @param fileName
|
||||
*/
|
||||
public static FileTemplete getFileTempleteByResource(String fileName) throws IOException {
|
||||
public static FileTemplete getFileTempleteByResource(String fileName) {
|
||||
if (!StringUtils.startsWith(fileName, "views/modules/cmsfront")) {
|
||||
fileName = "views/modules/cmsfront/themes/default/index.html";
|
||||
}
|
||||
Resource resource = ResourceUtils.getResource(fileName);
|
||||
return new FileTemplete(resource, fileName);
|
||||
}
|
||||
|
||||
@@ -35,4 +35,5 @@
|
||||
5.10.1
|
||||
5.11.0
|
||||
5.11.1
|
||||
5.12.0
|
||||
5.12.0
|
||||
5.12.1
|
||||
@@ -41,7 +41,7 @@ var setting = {view:{selectedMulti:false},data:{key:{title:"title"},simpleData:{
|
||||
tree.expandNode(treeNode);
|
||||
//win.$('button[type=reset]').click();
|
||||
win.$('#categoryCode').val(treeNode.id);
|
||||
win.page();
|
||||
win.page(1);
|
||||
}}
|
||||
}, tree, loadTree = function(){
|
||||
js.ajaxSubmit(setting.async.url+"?___t="+new Date().getTime(), {
|
||||
|
||||
@@ -58,13 +58,13 @@ var setting = {
|
||||
&& ((src.indexOf("article") > 0 && adminUrl.indexOf("article") > 0)
|
||||
|| (src.indexOf("link") > 0 && adminUrl.indexOf("link") > 0))){
|
||||
var win = ifr[0].contentWindow, conts = ifr.contents();
|
||||
conts.find('input[type=reset]').click();
|
||||
//conts.find('input[type=reset]').click();
|
||||
conts.find('#categoryCode').val(treeNode.id);
|
||||
conts.find('#outline').val(adminUrl.indexOf("outline=true") != -1); // 文章模型是否显示大纲视图
|
||||
conts.find('#fileDown').val(adminUrl.indexOf("fileDown=true") != -1); // 链接模型是否是下载栏目
|
||||
var caption = conts.find('.portlet-title .caption');
|
||||
caption.html(caption.find('i').prop("outerHTML") + " " + treeNode.name);
|
||||
win.page();
|
||||
win.page(1);
|
||||
}else{
|
||||
$('#mainFrame').attr("src", adminUrl);
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>5.12.0-SNAPSHOT</version>
|
||||
<version>5.12.1-SNAPSHOT</version>
|
||||
<relativePath>../../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -30,19 +30,19 @@
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- Oracle 11g -->
|
||||
<!-- Oracle 11g
|
||||
<dependency>
|
||||
<groupId>com.oracle</groupId>
|
||||
<artifactId>ojdbc6</artifactId>
|
||||
<version>11.2.0.3</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<!-- Oracle 12c 及以上版本
|
||||
</dependency> -->
|
||||
<!-- Oracle 12c 及以上版本 -->
|
||||
<dependency>
|
||||
<groupId>com.oracle.database.jdbc</groupId>
|
||||
<artifactId>ojdbc8</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency> -->
|
||||
</dependency>
|
||||
|
||||
<!-- SqlServer 2008
|
||||
<dependency>
|
||||
|
||||
@@ -6,7 +6,7 @@ package com.jeesite.common.shiro.realm;
|
||||
|
||||
import com.jeesite.common.codec.EncodeUtils;
|
||||
import com.jeesite.common.codec.SM3Utils;
|
||||
import com.jeesite.common.codec.Sha1Utils;
|
||||
import com.jeesite.common.codec.ShaUtils;
|
||||
import com.jeesite.common.config.Global;
|
||||
import com.jeesite.common.shiro.authc.FormToken;
|
||||
import com.jeesite.common.utils.SpringUtils;
|
||||
@@ -31,7 +31,6 @@ import javax.servlet.http.HttpServletRequest;
|
||||
*/
|
||||
public class AuthorizingRealm extends BaseAuthorizingRealm {
|
||||
|
||||
public static final String HASH_ALGORITHM = "SHA-1";
|
||||
public static final int HASH_ITERATIONS = 1024;
|
||||
public static final int SALT_SIZE = 8;
|
||||
|
||||
@@ -89,7 +88,7 @@ public class AuthorizingRealm extends BaseAuthorizingRealm {
|
||||
String data = SM3Utils.sm3(plain, salt, HASH_ITERATIONS);
|
||||
return salt + data;
|
||||
}
|
||||
String data = Sha1Utils.sha1(plain, salt, HASH_ITERATIONS);
|
||||
String data = ShaUtils.sha1(plain, salt, HASH_ITERATIONS);
|
||||
return salt + data;
|
||||
}
|
||||
|
||||
@@ -108,7 +107,7 @@ public class AuthorizingRealm extends BaseAuthorizingRealm {
|
||||
String data = SM3Utils.sm3(plain, salt, HASH_ITERATIONS);
|
||||
return password.equals(salt + data);
|
||||
}
|
||||
String data = Sha1Utils.sha1(plain, salt, HASH_ITERATIONS);
|
||||
String data = ShaUtils.sha1(plain, salt, HASH_ITERATIONS);
|
||||
return password.equals(salt + data);
|
||||
}catch(Exception e){
|
||||
return false;
|
||||
|
||||
@@ -72,13 +72,14 @@ public class ActionEnter {
|
||||
state = new Uploader(request, conf).doExec();
|
||||
break;
|
||||
case ActionMap.CATCH_IMAGE:
|
||||
if (Global.isDemoMode()) {
|
||||
state = new BaseState(false, "演示模式,不允许操作!");
|
||||
break;
|
||||
}
|
||||
conf = configManager.getConfig(actionCode);
|
||||
String[] list = this.request.getParameterValues((String) conf.get("fieldName"));
|
||||
state = new ImageHunter(request, conf).capture(list);
|
||||
// if (Global.isDemoMode()) {
|
||||
// state = new BaseState(false, "演示模式,不允许操作!");
|
||||
// break;
|
||||
// }
|
||||
// conf = configManager.getConfig(actionCode);
|
||||
// String[] list = this.request.getParameterValues((String) conf.get("fieldName"));
|
||||
// state = new ImageHunter(request, conf).capture(list);
|
||||
state = new BaseState(false, "该功能暂不提供支持");
|
||||
break;
|
||||
case ActionMap.LIST_IMAGE:
|
||||
case ActionMap.LIST_FILE:
|
||||
|
||||
@@ -40,13 +40,13 @@ import java.util.stream.Collectors;
|
||||
*/
|
||||
@Controller
|
||||
@RequestMapping(value = "${adminPath}/sys/module")
|
||||
@ConditionalOnProperty(name="web.core.enabled", havingValue="true", matchIfMissing=true)
|
||||
@ConditionalOnProperty(name={"config.enabled","web.core.enabled"}, havingValue="true", matchIfMissing=true)
|
||||
@ApiIgnore
|
||||
public class ModuleController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private ModuleService moduleService;
|
||||
|
||||
|
||||
/**
|
||||
* 获取数据
|
||||
* @param moduleCode
|
||||
@@ -56,7 +56,7 @@ public class ModuleController extends BaseController {
|
||||
public Module get(String moduleCode, boolean isNewRecord) {
|
||||
return moduleService.get(moduleCode, isNewRecord);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询列表
|
||||
* @param module
|
||||
@@ -70,7 +70,7 @@ public class ModuleController extends BaseController {
|
||||
model.addAttribute("module", module);
|
||||
return "modules/sys/moduleList";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询列表
|
||||
* @param module
|
||||
@@ -83,7 +83,7 @@ public class ModuleController extends BaseController {
|
||||
@ResponseBody
|
||||
public Page<Module> listData(Module module, HttpServletRequest request, HttpServletResponse response) {
|
||||
module.setPage(new Page<>(request, response));
|
||||
Page<Module> page = moduleService.findPage(module);
|
||||
Page<Module> page = moduleService.findPage(module);
|
||||
return page;
|
||||
}
|
||||
|
||||
|
||||
@@ -92,6 +92,10 @@ spring:
|
||||
cache:
|
||||
# 缓存及会话共享(专业版)
|
||||
isClusterMode: false
|
||||
# 给缓存Key增加数据源名称前缀 v5.6.1
|
||||
keyPrefixWithDsName: false
|
||||
# 指定全局Key,不加DsName前缀,当keyPrefixWithDsName设置为true的时有效(cacheName:key|*)v5.12.1
|
||||
globalKeyNames: sysCache:configMap,sysCache:moduleMap,sysCache:areaAllList
|
||||
# 清理全部缓存按钮所清理的缓存列表
|
||||
clearNames: sysCache,corpCache,userCache,roleCache,fileUploadCache,msgPcPoolCache,cmsCache,bpmFormCache
|
||||
# 用户缓存
|
||||
@@ -504,7 +508,7 @@ shiro:
|
||||
#allowReferers: http://127.0.0.1,http://localhost
|
||||
|
||||
# 允许重定向的地址,不设置为全部允许,设置this只允许本项目内部跳转,多个用逗号隔开,例如:this,http://*.jeesite.com
|
||||
#allowRedirects: ~
|
||||
allowRedirects: this
|
||||
|
||||
# 是否在登录后生成新的Session(默认false)
|
||||
isGenerateNewSessionAfterLogin: false
|
||||
@@ -546,6 +550,8 @@ shiro:
|
||||
/oauth2/authorize = user
|
||||
/druid/** = perms[sys:state:druid]
|
||||
/bpm/modeler/** = perms[bpm:modeler]
|
||||
/ureport/designer/** = perms[ureport]
|
||||
/ureport/datasource/** = perms[ureport]
|
||||
${adminPath}/login-cas = cas
|
||||
${adminPath}/login-ldap = ldap
|
||||
${adminPath}/login = authc
|
||||
|
||||
@@ -293,5 +293,13 @@
|
||||
<template>module_cloud/web/pom.xml</template>
|
||||
<template>module_cloud/pom.xml</template>
|
||||
</category>
|
||||
<category value="module_vue" label="生成前端模块代码(Vue)">
|
||||
<template>module_vue/api/api.xml</template>
|
||||
<template>module_vue/views/views.xml</template>
|
||||
<template>module_vue/index.ts.xml</template>
|
||||
<template>module_vue/package.json.xml</template>
|
||||
<template>module_vue/README.md.xml</template>
|
||||
<template>module_vue/tsconfig.json.xml</template>
|
||||
</category>
|
||||
</moduleTplCategory>
|
||||
</config>
|
||||
@@ -3,10 +3,10 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>controller</name>
|
||||
<filePath>${baseDir}/src/main/java/${packagePath}/${moduleName}/web/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}/src/main/java${packagePath}${modulePath}/web${subModulePath}</filePath>
|
||||
<fileName>${ClassName}Controller.java</fileName>
|
||||
<content><![CDATA[
|
||||
package ${packageName}.${moduleName}.web${isNotEmpty(subModuleName)?'.'+subModuleName:''};
|
||||
package ${packageName}.${moduleName}.web${subModuleNameDot};
|
||||
|
||||
<% if (table.isTreeEntity){ %>
|
||||
import java.util.Map;
|
||||
@@ -51,11 +51,11 @@ import com.alibaba.fastjson.JSONValidator;
|
||||
import com.jeesite.common.codec.EncodeUtils;
|
||||
<% } %>
|
||||
import com.jeesite.common.web.BaseController;
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
|
||||
import ${packageName}.${moduleName}.entity${subModuleNameDot}.${ClassName};
|
||||
<% for (child in table.childList){ %>
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${@StringUtils.cap(child.className)};
|
||||
import ${packageName}.${moduleName}.entity${subModuleNameDot}.${@StringUtils.cap(child.className)};
|
||||
<% } %>
|
||||
import ${packageName}.${moduleName}.service${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName}Service;
|
||||
import ${packageName}.${moduleName}.service${subModuleNameDot}.${ClassName}Service;
|
||||
|
||||
/**
|
||||
* ${functionName}Controller
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>dao</name>
|
||||
<filePath>${baseDir}/src/main/java/${packagePath}/${moduleName}/dao/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}/src/main/java${packagePath}${modulePath}/dao${subModulePath}</filePath>
|
||||
<fileName>${ClassName}Dao.java</fileName>
|
||||
<content><![CDATA[
|
||||
package ${packageName}.${moduleName}.dao${isNotEmpty(subModuleName)?'.'+subModuleName:''};
|
||||
package ${packageName}.${moduleName}.dao${subModuleNameDot};
|
||||
|
||||
import com.jeesite.common.dao.${table.isTreeEntity?'Tree':'Crud'}Dao;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
|
||||
import ${packageName}.${moduleName}.entity${subModuleNameDot}.${ClassName};
|
||||
|
||||
/**
|
||||
* ${functionName}DAO接口
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>entity</name>
|
||||
<filePath>${baseDir}/src/main/java/${packagePath}/${moduleName}/entity/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}/src/main/java${packagePath}${modulePath}/entity${subModulePath}</filePath>
|
||||
<fileName>${ClassName}.java</fileName>
|
||||
<content><![CDATA[
|
||||
package ${packageName}.${moduleName}.entity${isNotBlank(subModuleName)?'.'+subModuleName:''};
|
||||
@@ -179,7 +179,7 @@ import com.jeesite.common.utils.excel.annotation.ExcelFields;
|
||||
} %>"
|
||||
)
|
||||
public class ${ClassName} extends ${toBoolean(table.optionMap['isBpmForm'])?(table.isTreeEntity?'BpmTree':'Bpm'):table.isTreeEntity?'Tree':'Data'}Entity<${ClassName}> {
|
||||
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
<%
|
||||
isExtend = false;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>mapper</name>
|
||||
<filePath>${baseDir}/src/main/resources/mappings/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}/src/main/resources/mappings/${lastPackageName}${modulePath}${subModulePath}</filePath>
|
||||
<fileName>${ClassName}Dao.xml</fileName>
|
||||
<content><![CDATA[
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>service</name>
|
||||
<filePath>${baseDir}/src/main/java/${packagePath}/${moduleName}/service/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}/src/main/java${packagePath}${modulePath}/service${subModulePath}</filePath>
|
||||
<fileName>${ClassName}Service.java</fileName>
|
||||
<content><![CDATA[
|
||||
package ${packageName}.${moduleName}.service${isNotEmpty(subModuleName)?'.'+subModuleName:''};
|
||||
package ${packageName}.${moduleName}.service${subModuleNameDot};
|
||||
|
||||
import java.util.List;
|
||||
<% if (table.childList.~size > 0){ %>
|
||||
@@ -17,8 +17,8 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.jeesite.common.entity.Page;
|
||||
import com.jeesite.common.service.${table.isTreeEntity?'Tree':'Crud'}Service;
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
|
||||
import ${packageName}.${moduleName}.dao${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName}Dao;
|
||||
import ${packageName}.${moduleName}.entity${subModuleNameDot}.${ClassName};
|
||||
import ${packageName}.${moduleName}.dao${subModuleNameDot}.${ClassName}Dao;
|
||||
<% if(toBoolean(table.optionMap['isBpmForm'])){ %>
|
||||
import java.util.Map;
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
@@ -32,8 +32,8 @@ import com.jeesite.common.service.ServiceException;
|
||||
import com.jeesite.modules.file.utils.FileUploadUtils;
|
||||
<% } %>
|
||||
<% for (child in table.childList){ %>
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${@StringUtils.cap(child.className)};
|
||||
import ${packageName}.${moduleName}.dao${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${@StringUtils.cap(child.className)}Dao;
|
||||
import ${packageName}.${moduleName}.entity${subModuleNameDot}.${@StringUtils.cap(child.className)};
|
||||
import ${packageName}.${moduleName}.dao${subModuleNameDot}.${@StringUtils.cap(child.className)}Dao;
|
||||
<% } %>
|
||||
<% if(toBoolean(table.optionMap['isImportExport'])){ %>
|
||||
import com.jeesite.common.config.Global;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>viewForm</name>
|
||||
<filePath>${baseDir}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}/src/main/resources/views/${lastPackageName}${modulePath}${subModulePath}</filePath>
|
||||
<fileName>${className}Form.html</fileName>
|
||||
<content><![CDATA[
|
||||
<% include('/templates/modules/gen/view/viewForm.html'){} %>]]>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>viewIndex</name>
|
||||
<filePath>${baseDir}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}/src/main/resources/views/${lastPackageName}${modulePath}${subModulePath}</filePath>
|
||||
<fileName>${className}Index.html</fileName>
|
||||
<content><![CDATA[
|
||||
<% include('/templates/modules/gen/view/viewIndex.html'){} %>]]>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>viewList</name>
|
||||
<filePath>${baseDir}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}/src/main/resources/views/${lastPackageName}${modulePath}${subModulePath}</filePath>
|
||||
<fileName>${className}List.html</fileName>
|
||||
<content><![CDATA[
|
||||
<% include('/templates/modules/gen/view/viewList.html'){} %>]]>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>viewSelect</name>
|
||||
<filePath>${baseDir}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}/src/main/resources/views/${lastPackageName}${modulePath}${subModulePath}</filePath>
|
||||
<fileName>${className}Select.html</fileName>
|
||||
<content><![CDATA[
|
||||
<% include('/templates/modules/gen/view/viewSelect.html'){} %>]]>
|
||||
|
||||
@@ -3,15 +3,15 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>api</name>
|
||||
<filePath>${baseDir}/${moduleName}-client/src/main/java/${packagePath}/${moduleName}/api/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}${modulePath}-client/src/main/java${packagePath}${modulePath}/api${subModulePath}</filePath>
|
||||
<fileName>${ClassName}ServiceApi.java</fileName>
|
||||
<content><![CDATA[
|
||||
package ${packageName}.${moduleName}.api${isNotEmpty(subModuleName)?'.'+subModuleName:''};
|
||||
package ${packageName}.${moduleName}.api${subModuleNameDot};
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
import com.jeesite.common.service.rest.${table.isTreeEntity?'Tree':'Crud'}ServiceRest;
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
|
||||
import ${packageName}.${moduleName}.entity${subModuleNameDot}.${ClassName};
|
||||
|
||||
/**
|
||||
* ${functionName}API
|
||||
|
||||
@@ -3,15 +3,15 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>client</name>
|
||||
<filePath>${baseDir}/${moduleName}-client/src/main/java/${packagePath}/${moduleName}/client/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}${modulePath}-client/src/main/java${packagePath}${modulePath}/client${subModulePath}</filePath>
|
||||
<fileName>${ClassName}ServiceClient.java</fileName>
|
||||
<content><![CDATA[
|
||||
package ${packageName}.${moduleName}.client${isNotEmpty(subModuleName)?'.'+subModuleName:''};
|
||||
package ${packageName}.${moduleName}.client${subModuleNameDot};
|
||||
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
|
||||
import com.jeesite.modules.cloud.feign.condition.ConditionalOnNotCurrentApplication;
|
||||
import ${packageName}.${moduleName}.api${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName}ServiceApi;
|
||||
import ${packageName}.${moduleName}.api${subModuleNameDot}.${ClassName}ServiceApi;
|
||||
|
||||
/**
|
||||
* ${functionName}API
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>controller</name>
|
||||
<filePath>${baseDir}/${moduleName}/src/main/java/${packagePath}/${moduleName}/web/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}${modulePath}/src/main/java${packagePath}${modulePath}/web${subModulePath}</filePath>
|
||||
<fileName>${ClassName}Controller.java</fileName>
|
||||
<content><![CDATA[
|
||||
package ${packageName}.${moduleName}.web${isNotEmpty(subModuleName)?'.'+subModuleName:''};
|
||||
package ${packageName}.${moduleName}.web${subModuleNameDot};
|
||||
|
||||
<% if (table.isTreeEntity){ %>
|
||||
import java.util.Map;
|
||||
@@ -51,11 +51,11 @@ import com.alibaba.fastjson.JSONValidator;
|
||||
import com.jeesite.common.codec.EncodeUtils;
|
||||
<% } %>
|
||||
import com.jeesite.common.web.BaseController;
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
|
||||
import ${packageName}.${moduleName}.entity${subModuleNameDot}.${ClassName};
|
||||
<% for (child in table.childList){ %>
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${@StringUtils.cap(child.className)};
|
||||
import ${packageName}.${moduleName}.entity${subModuleNameDot}.${@StringUtils.cap(child.className)};
|
||||
<% } %>
|
||||
import ${packageName}.${moduleName}.service${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName}Service;
|
||||
import ${packageName}.${moduleName}.service${subModuleNameDot}.${ClassName}Service;
|
||||
|
||||
import io.seata.spring.annotation.GlobalTransactional;
|
||||
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>dao</name>
|
||||
<filePath>${baseDir}/${moduleName}/src/main/java/${packagePath}/${moduleName}/dao/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}${modulePath}/src/main/java${packagePath}${modulePath}/dao${subModulePath}</filePath>
|
||||
<fileName>${ClassName}Dao.java</fileName>
|
||||
<content><![CDATA[
|
||||
package ${packageName}.${moduleName}.dao${isNotEmpty(subModuleName)?'.'+subModuleName:''};
|
||||
package ${packageName}.${moduleName}.dao${subModuleNameDot};
|
||||
|
||||
import com.jeesite.common.dao.${table.isTreeEntity?'Tree':'Crud'}Dao;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
|
||||
import ${packageName}.${moduleName}.entity${subModuleNameDot}.${ClassName};
|
||||
|
||||
/**
|
||||
* ${functionName}DAO接口
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>entity</name>
|
||||
<filePath>${baseDir}/${moduleName}-client/src/main/java/${packagePath}/${moduleName}/entity/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}${modulePath}-client/src/main/java${packagePath}${modulePath}/entity${subModulePath}</filePath>
|
||||
<fileName>${ClassName}.java</fileName>
|
||||
<content><![CDATA[
|
||||
package ${packageName}.${moduleName}.entity${isNotBlank(subModuleName)?'.'+subModuleName:''};
|
||||
@@ -179,7 +179,7 @@ import com.jeesite.common.utils.excel.annotation.ExcelFields;
|
||||
} %>"
|
||||
)
|
||||
public class ${ClassName} extends ${toBoolean(table.optionMap['isBpmForm'])?(table.isTreeEntity?'BpmTree':'Bpm'):table.isTreeEntity?'Tree':'Data'}Entity<${ClassName}> {
|
||||
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
<%
|
||||
isExtend = false;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>mapper</name>
|
||||
<filePath>${baseDir}/${moduleName}/src/main/resources/mappings/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}${modulePath}/src/main/resources/mappings/${lastPackageName}${modulePath}${subModulePath}</filePath>
|
||||
<fileName>${ClassName}Dao.xml</fileName>
|
||||
<content><![CDATA[
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>service</name>
|
||||
<filePath>${baseDir}/${moduleName}/src/main/java/${packagePath}/${moduleName}/service/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}${modulePath}/src/main/java${packagePath}${modulePath}/service${subModulePath}</filePath>
|
||||
<fileName>${ClassName}Service.java</fileName>
|
||||
<content><![CDATA[
|
||||
package ${packageName}.${moduleName}.service${isNotEmpty(subModuleName)?'.'+subModuleName:''};
|
||||
package ${packageName}.${moduleName}.service${subModuleNameDot};
|
||||
|
||||
import java.util.List;
|
||||
<% if (table.childList.~size > 0){ %>
|
||||
@@ -18,9 +18,9 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.jeesite.common.entity.Page;
|
||||
import com.jeesite.common.service.${table.isTreeEntity?'Tree':'Crud'}Service;
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
|
||||
import ${packageName}.${moduleName}.dao${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName}Dao;
|
||||
import ${packageName}.${moduleName}.api${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName}ServiceApi;
|
||||
import ${packageName}.${moduleName}.entity${subModuleNameDot}.${ClassName};
|
||||
import ${packageName}.${moduleName}.dao${subModuleNameDot}.${ClassName}Dao;
|
||||
import ${packageName}.${moduleName}.api${subModuleNameDot}.${ClassName}ServiceApi;
|
||||
<% if(toBoolean(table.optionMap['isBpmForm'])){ %>
|
||||
import java.util.Map;
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
@@ -34,8 +34,8 @@ import com.jeesite.common.service.ServiceException;
|
||||
import com.jeesite.modules.file.utils.FileUploadUtils;
|
||||
<% } %>
|
||||
<% for (child in table.childList){ %>
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${@StringUtils.cap(child.className)};
|
||||
import ${packageName}.${moduleName}.dao${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${@StringUtils.cap(child.className)}Dao;
|
||||
import ${packageName}.${moduleName}.entity${subModuleNameDot}.${@StringUtils.cap(child.className)};
|
||||
import ${packageName}.${moduleName}.dao${subModuleNameDot}.${@StringUtils.cap(child.className)}Dao;
|
||||
<% } %>
|
||||
<% if(toBoolean(table.optionMap['isImportExport'])){ %>
|
||||
import com.jeesite.common.config.Global;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>viewForm</name>
|
||||
<filePath>${baseDir}/${moduleName}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}${modulePath}/src/main/resources/views/${lastPackageName}${modulePath}${subModulePath}</filePath>
|
||||
<fileName>${className}Form.html</fileName>
|
||||
<content><![CDATA[
|
||||
<% include('/templates/modules/gen/view/viewForm.html'){} %>]]>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>viewIndex</name>
|
||||
<filePath>${baseDir}/${moduleName}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}${modulePath}/src/main/resources/views/${lastPackageName}${modulePath}${subModulePath}</filePath>
|
||||
<fileName>${className}Index.html</fileName>
|
||||
<content><![CDATA[
|
||||
<% include('/templates/modules/gen/view/viewIndex.html'){} %>]]>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>viewList</name>
|
||||
<filePath>${baseDir}/${moduleName}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}${modulePath}/src/main/resources/views/${lastPackageName}${modulePath}${subModulePath}</filePath>
|
||||
<fileName>${className}List.html</fileName>
|
||||
<content><![CDATA[
|
||||
<% include('/templates/modules/gen/view/viewList.html'){} %>]]>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>viewSelect</name>
|
||||
<filePath>${baseDir}/${moduleName}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}${modulePath}/src/main/resources/views/${lastPackageName}${modulePath}${subModulePath}</filePath>
|
||||
<fileName>${className}Select.html</fileName>
|
||||
<content><![CDATA[
|
||||
<% include('/templates/modules/gen/view/viewSelect.html'){} %>]]>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>deploy</name>
|
||||
<filePath>${baseDir}/${moduleCode}/bin</filePath>
|
||||
<filePath>${baseDir}/${modulePath}/bin</filePath>
|
||||
<fileName>deploy.bat</fileName>
|
||||
<charset>GBK</charset>
|
||||
<content><![CDATA[@echo off
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>deploy</name>
|
||||
<filePath>${baseDir}/${moduleCode}/bin</filePath>
|
||||
<filePath>${baseDir}/${modulePath}/bin</filePath>
|
||||
<fileName>deploy.sh</fileName>
|
||||
<content><![CDATA[#!/bin/sh
|
||||
# /**
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>package</name>
|
||||
<filePath>${baseDir}/${moduleCode}/bin</filePath>
|
||||
<filePath>${baseDir}/${modulePath}/bin</filePath>
|
||||
<fileName>package.bat</fileName>
|
||||
<charset>GBK</charset>
|
||||
<content><![CDATA[@echo off
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>package</name>
|
||||
<filePath>${baseDir}/${moduleCode}/bin</filePath>
|
||||
<filePath>${baseDir}/${modulePath}/bin</filePath>
|
||||
<fileName>package.sh</fileName>
|
||||
<content><![CDATA[#!/bin/sh
|
||||
# /**
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>erm</name>
|
||||
<filePath>${baseDir}/${moduleCode}/db</filePath>
|
||||
<filePath>${baseDir}/${modulePath}/db</filePath>
|
||||
<fileName>${moduleCode}.erm</fileName>
|
||||
<content><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
|
||||
<diagram>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>pom</name>
|
||||
<filePath>${baseDir}/${moduleCode}</filePath>
|
||||
<filePath>${baseDir}/${modulePath}</filePath>
|
||||
<fileName>pom.xml</fileName>
|
||||
<charset></charset>
|
||||
<content><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>package</name>
|
||||
<filePath>${baseDir}/${moduleCode}/src/main/java/com/jeesite/modules/${@StringUtils.replace(moduleCode, '-', '/')}</filePath>
|
||||
<filePath>${baseDir}/${modulePath}/src/main/java/com/jeesite/modules/${@StringUtils.replace(moduleCode, '-', '/')}</filePath>
|
||||
<fileName></fileName>
|
||||
<content><![CDATA[
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>jeesite</name>
|
||||
<filePath>${baseDir}/${moduleCode}/src/main/resources/config</filePath>
|
||||
<filePath>${baseDir}/${modulePath}/src/main/resources/config</filePath>
|
||||
<fileName>jeesite-${moduleCode}.yml</fileName>
|
||||
<content><![CDATA[
|
||||
# 温馨提示:不建议直接修改此文件,为了平台升级方便,建议将需要修改的参数值,复制到application.yml里进行覆盖该参数值。
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>versions</name>
|
||||
<filePath>${baseDir}/${moduleCode}/src/main/resources/db/upgrade/${moduleCode}</filePath>
|
||||
<filePath>${baseDir}/${modulePath}/src/main/resources/db/upgrade/${moduleCode}</filePath>
|
||||
<fileName>versions</fileName>
|
||||
<content><![CDATA[${module.currentVersion}]]>
|
||||
</content>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>static</name>
|
||||
<filePath>${baseDir}/${moduleCode}/src/main/resources/static/modules/${@StringUtils.replace(moduleCode, '-', '/')}</filePath>
|
||||
<filePath>${baseDir}/${modulePath}/src/main/resources/static/modules/${@StringUtils.replace(moduleCode, '-', '/')}</filePath>
|
||||
<fileName></fileName>
|
||||
<content><
|
||||
- 需求收集:<https://gitee.com/thinkgem/jeesite-vue/issues/new>
|
||||
- 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="220" height="220">
|
||||
</p>
|
||||
|
||||
]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>api</name>
|
||||
<filePath>${baseDir}/packages/${modulePath}/api</filePath>
|
||||
<fileName></fileName>
|
||||
<content><![CDATA[
|
||||
|
||||
]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>index</name>
|
||||
<filePath>${baseDir}/packages/${modulePath}</filePath>
|
||||
<fileName>index.ts</fileName>
|
||||
<content><![CDATA[
|
||||
|
||||
]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>package</name>
|
||||
<filePath>${baseDir}/packages/${modulePath}</filePath>
|
||||
<fileName>package.json</fileName>
|
||||
<content><![CDATA[
|
||||
{
|
||||
"name": "@jeesite/${moduleCode}",
|
||||
"version": "${module.currentVersion}",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"type:check": "vue-tsc --noEmit --skipLibCheck",
|
||||
"uninstall": "rimraf node_modules",
|
||||
"update": "ncu -u"
|
||||
},
|
||||
"dependencies": {
|
||||
"qs": "6.14.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/qs": "6.9.18"
|
||||
},
|
||||
"homepage": "https://jeesite.com",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://gitee.com/thinkgem/jeesite-vue.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://gitee.com/thinkgem/jeesite-vue/issues"
|
||||
},
|
||||
"author": {
|
||||
"name": "ThinkGem",
|
||||
"email": "thinkgem@163.com",
|
||||
"url": "https://gitee.com/thinkgem"
|
||||
}
|
||||
}
|
||||
|
||||
]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>tsconfig</name>
|
||||
<filePath>${baseDir}/packages/${modulePath}</filePath>
|
||||
<fileName>tsconfig.json</fileName>
|
||||
<content><![CDATA[
|
||||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"@jeesite/${moduleCode}/*": ["./*"]
|
||||
}
|
||||
},
|
||||
"include": [
|
||||
"./**/*.ts",
|
||||
"./**/*.tsx",
|
||||
"./**/*.vue"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"vite.config.ts",
|
||||
"_lib",
|
||||
"dist"
|
||||
]
|
||||
}
|
||||
|
||||
]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>views</name>
|
||||
<filePath>${baseDir}/packages/${modulePath}/views</filePath>
|
||||
<fileName></fileName>
|
||||
<content><![CDATA[
|
||||
|
||||
]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -3,10 +3,10 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>controller</name>
|
||||
<filePath>${baseDir}/src/main/java/${packagePath}/${moduleName}/web/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}/src/main/java${packagePath}${modulePath}/web${subModulePath}</filePath>
|
||||
<fileName>${ClassName}Controller.java</fileName>
|
||||
<content><![CDATA[
|
||||
package ${packageName}.${moduleName}.web${isNotEmpty(subModuleName)?'.'+subModuleName:''};
|
||||
package ${packageName}.${moduleName}.web${subModuleNameDot};
|
||||
|
||||
<% if (table.isTreeEntity){ %>
|
||||
import java.util.List;
|
||||
@@ -36,11 +36,11 @@ import com.jeesite.modules.sys.utils.UserUtils;
|
||||
import com.jeesite.common.entity.Page;
|
||||
<% } %>
|
||||
import com.jeesite.common.web.BaseController;
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
|
||||
import ${packageName}.${moduleName}.entity${subModuleNameDot}.${ClassName};
|
||||
<% for (child in table.childList){ %>
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${@StringUtils.cap(child.className)};
|
||||
import ${packageName}.${moduleName}.entity${subModuleNameDot}.${@StringUtils.cap(child.className)};
|
||||
<% } %>
|
||||
import ${packageName}.${moduleName}.service${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName}Service;
|
||||
import ${packageName}.${moduleName}.service${subModuleNameDot}.${ClassName}Service;
|
||||
|
||||
/**
|
||||
* ${functionName}Controller
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>dao</name>
|
||||
<filePath>${baseDir}/src/main/java/${packagePath}/${moduleName}/dao/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}/src/main/java${packagePath}${modulePath}/dao${subModulePath}</filePath>
|
||||
<fileName>${ClassName}Dao.java</fileName>
|
||||
<content><![CDATA[
|
||||
package ${packageName}.${moduleName}.dao${isNotEmpty(subModuleName)?'.'+subModuleName:''};
|
||||
package ${packageName}.${moduleName}.dao${subModuleNameDot};
|
||||
|
||||
import com.jeesite.common.dao.${table.isTreeEntity?'Tree':'Query'}Dao;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
|
||||
import ${packageName}.${moduleName}.entity${subModuleNameDot}.${ClassName};
|
||||
|
||||
/**
|
||||
* ${functionName}DAO接口
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>service</name>
|
||||
<filePath>${baseDir}/src/main/java/${packagePath}/${moduleName}/service/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}/src/main/java${packagePath}${modulePath}/service${subModulePath}</filePath>
|
||||
<fileName>${ClassName}Service.java</fileName>
|
||||
<content><![CDATA[
|
||||
package ${packageName}.${moduleName}.service${isNotEmpty(subModuleName)?'.'+subModuleName:''};
|
||||
package ${packageName}.${moduleName}.service${subModuleNameDot};
|
||||
|
||||
import java.util.List;
|
||||
<% if (table.childList.~size > 0){ %>
|
||||
@@ -16,11 +16,11 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import com.jeesite.common.entity.Page;
|
||||
import com.jeesite.common.service.${table.isTreeEntity?'Tree':'Query'}Service;
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
|
||||
import ${packageName}.${moduleName}.dao${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName}Dao;
|
||||
import ${packageName}.${moduleName}.entity${subModuleNameDot}.${ClassName};
|
||||
import ${packageName}.${moduleName}.dao${subModuleNameDot}.${ClassName}Dao;
|
||||
<% for (child in table.childList){ %>
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${@StringUtils.cap(child.className)};
|
||||
import ${packageName}.${moduleName}.dao${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${@StringUtils.cap(child.className)}Dao;
|
||||
import ${packageName}.${moduleName}.entity${subModuleNameDot}.${@StringUtils.cap(child.className)};
|
||||
import ${packageName}.${moduleName}.dao${subModuleNameDot}.${@StringUtils.cap(child.className)}Dao;
|
||||
<% } %>
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>viewForm</name>
|
||||
<filePath>${baseDir}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}/src/main/resources/views/${lastPackageName}${modulePath}${subModulePath}</filePath>
|
||||
<fileName>${className}Form.html</fileName>
|
||||
<content><![CDATA[
|
||||
<%
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>viewList</name>
|
||||
<filePath>${baseDir}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<filePath>${baseDir}/src/main/resources/views/${lastPackageName}${modulePath}${subModulePath}</filePath>
|
||||
<fileName>${className}List.html</fileName>
|
||||
<content><![CDATA[
|
||||
\<% layout('/layouts/default.html', {title: '${functionNameSimple}查询', libs: ['dataGrid']}){ %>
|
||||
|
||||
@@ -50,7 +50,7 @@ var setting = {view:{selectedMulti:false},data:{key:{title:"title"},simpleData:{
|
||||
win.$('#${pk.attrName}').val(treeNode.id);
|
||||
<% } %>
|
||||
<% } %>
|
||||
win.page();
|
||||
win.page(1);
|
||||
}}
|
||||
}, tree, loadTree = function(){
|
||||
js.ajaxSubmit(setting.async.url+"?___t="+new Date().getTime(), {
|
||||
|
||||
@@ -3,26 +3,27 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>vueApi</name>
|
||||
<filePath>${frontDir}/src/api/${moduleName}/${subModuleName}</filePath>
|
||||
<fileName>${className}.ts</fileName>
|
||||
<filePath>${frontDir}/packages${modulePath}/api${modulePath}${subModulePath}</filePath>
|
||||
<fileName>${funName}.ts</fileName>
|
||||
<content><![CDATA[
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
* No deletion without permission, or be held responsible to law.
|
||||
* @author ${functionAuthor}
|
||||
*/
|
||||
import { defHttp } from '/@/utils/http/axios';
|
||||
import { useGlobSetting } from '/@/hooks/setting';
|
||||
import { defHttp } from '@jeesite/core/utils/http/axios';
|
||||
import { useGlobSetting } from '@jeesite/core/hooks/setting';
|
||||
<% if(table.isTreeEntity){ %>
|
||||
import { TreeDataModel, TreeModel } from '/@/api/model/baseModel';
|
||||
import { TreeDataModel, TreeModel } from '@jeesite/core/api/model/baseModel';
|
||||
<% }else if(isNotBlank(table.optionMap['leftTreeRightTableUrl'])){ %>
|
||||
import { BasicModel, Page, TreeDataModel } from '/@/api/model/baseModel';
|
||||
import { BasicModel, Page, TreeDataModel } from '@jeesite/core/api/model/baseModel';
|
||||
<% }else{ %>
|
||||
import { BasicModel, Page } from '/@/api/model/baseModel';
|
||||
import { BasicModel, Page } from '@jeesite/core/api/model/baseModel';
|
||||
<% } %>
|
||||
<% if(toBoolean(table.optionMap['isImportExport'])){ %>
|
||||
import { UploadApiResult } from '/@/api/sys/upload';
|
||||
import { UploadFileParams } from '/#/axios';
|
||||
import { UploadApiResult } from '@jeesite/core/api/sys/upload';
|
||||
import { UploadFileParams } from '@jeesite/types/axios';
|
||||
import { AxiosProgressEvent } from 'axios';
|
||||
|
||||
const { ctxPath, adminPath } = useGlobSetting();
|
||||
<% }else{ %>
|
||||
@@ -100,7 +101,7 @@ export const ${className}Save = (params?: any, data?: ${ClassName} | any) =>
|
||||
|
||||
export const ${className}ImportData = (
|
||||
params: UploadFileParams,
|
||||
onUploadProgress: (progressEvent: ProgressEvent) => void,
|
||||
onUploadProgress: (progressEvent: AxiosProgressEvent) => void,
|
||||
) =>
|
||||
defHttp.uploadFile<UploadApiResult>(
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>vueForm</name>
|
||||
<filePath>${frontDir}/src/views/${urlPrefix}</filePath>
|
||||
<filePath>${frontDir}/packages${modulePath}/views/${urlPrefix}</filePath>
|
||||
<fileName>form.vue</fileName>
|
||||
<content><![CDATA[
|
||||
<% var modalOrDrawer = @StringUtils.contains(table.tplCategory, '_modal') ? 'Modal' : 'Drawer'; %>
|
||||
@@ -57,13 +57,13 @@
|
||||
</template>
|
||||
<script lang="ts" setup name="${compNamePrefix}Form">
|
||||
import { ref, unref, computed } from 'vue';
|
||||
import { useI18n } from '/@/hooks/web/useI18n';
|
||||
import { useMessage } from '/@/hooks/web/useMessage';
|
||||
import { router } from '/@/router';
|
||||
import { Icon } from '/@/components/Icon';
|
||||
import { BasicForm, FormSchema, useForm } from '/@/components/Form';
|
||||
import { Basic${modalOrDrawer}, use${modalOrDrawer}Inner } from '/@/components/${modalOrDrawer}';
|
||||
import { ${ClassName}, ${className}Save, ${className}Form<% if(table.isTreeEntity){ %>, ${className}TreeData<% } %> } from '/@/api/${moduleName}${isNotEmpty(subModuleName)?'/'+subModuleName:''}/${className}';
|
||||
import { useI18n } from '@jeesite/core/hooks/web/useI18n';
|
||||
import { useMessage } from '@jeesite/core/hooks/web/useMessage';
|
||||
import { router } from '@jeesite/core/router';
|
||||
import { Icon } from '@jeesite/core/components/Icon';
|
||||
import { BasicForm, FormSchema, useForm } from '@jeesite/core/components/Form';
|
||||
import { Basic${modalOrDrawer}, use${modalOrDrawer}Inner } from '@jeesite/core/components/${modalOrDrawer}';
|
||||
import { ${ClassName}, ${className}Save, ${className}Form<% if(table.isTreeEntity){ %>, ${className}TreeData<% } %> } from '@jeesite/${moduleMinus}/api${modulePath}${subModulePath}/${funName}';
|
||||
<%
|
||||
var userselectExists = false;
|
||||
var officeselectExists = false;
|
||||
@@ -84,16 +84,16 @@
|
||||
}
|
||||
%>
|
||||
<% if(userselectExists || officeselectExists) { %>
|
||||
import { officeTreeData } from '/@/api/sys/office';
|
||||
import { officeTreeData } from '@jeesite/core/api/sys/office';
|
||||
<% } %>
|
||||
<% if(companyselectExists) { %>
|
||||
import { companyTreeData } from '/@/api/sys/company';
|
||||
import { companyTreeData } from '@jeesite/core/api/sys/company';
|
||||
<% } %>
|
||||
<% if(areaselectExists) { %>
|
||||
import { areaTreeData } from '/@/api/sys/area';
|
||||
import { areaTreeData } from '@jeesite/core/api/sys/area';
|
||||
<% } %>
|
||||
<% if(toBoolean(table.optionMap['isBpmForm'])){ %>
|
||||
import { BpmButton } from '/@/components/Bpm';
|
||||
import { BpmButton } from '@jeesite/bpm/components/Bpm';
|
||||
<% } %>
|
||||
<% for (child in table.childList){ %>
|
||||
import Form${@StringUtils.cap(child.classNameSimple)}List from './form${@StringUtils.cap(child.classNameSimple)}List.vue';
|
||||
@@ -101,7 +101,7 @@
|
||||
|
||||
const emit = defineEmits(['success', 'register']);
|
||||
|
||||
const { t } = useI18n('${moduleName}${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${className}');
|
||||
const { t } = useI18n('${moduleName}${subModuleNameDot}.${funName}');
|
||||
const { showMessage } = useMessage();
|
||||
const { meta } = unref(router.currentRoute);
|
||||
const record = ref<${ClassName}>({} as ${ClassName});
|
||||
@@ -491,7 +491,7 @@ for (c in table.columnList){
|
||||
<%
|
||||
for (c in table.columnList){
|
||||
if (c.isPk == '1' || c.showType == 'hidden'){ %>
|
||||
${c.attrName}: record.value.${c.attrName},
|
||||
${c.attrName}: record.value.${c.attrName} || data.${c.attrName},
|
||||
<%
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>vueFormChildList</name>
|
||||
<filePath>${frontDir}/src/views/${urlPrefix}</filePath>
|
||||
<filePath>${frontDir}/packages${modulePath}/views/${urlPrefix}</filePath>
|
||||
<fileName>form${@StringUtils.cap(table.classNameSimple)}List.vue</fileName>
|
||||
<content><![CDATA[
|
||||
<!--
|
||||
@@ -23,10 +23,10 @@
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue';
|
||||
import { useI18n } from '/@/hooks/web/useI18n';
|
||||
import { Icon } from '/@/components/Icon';
|
||||
import { BasicTable, BasicColumn, useTable } from '/@/components/Table';
|
||||
import { ${ParentClassName} } from '/@/api/${moduleName}${isNotEmpty(subModuleName)?'/'+subModuleName:''}/${parentClassName}';
|
||||
import { useI18n } from '@jeesite/core/hooks/web/useI18n';
|
||||
import { Icon } from '@jeesite/core/components/Icon';
|
||||
import { BasicTable, BasicColumn, useTable } from '@jeesite/core/components/Table';
|
||||
import { ${ParentClassName} } from '@jeesite/${moduleMinus}/api${modulePath}${subModulePath}/${parentClassName}';
|
||||
<%
|
||||
var userselectExists = false;
|
||||
var officeselectExists = false;
|
||||
@@ -47,16 +47,16 @@
|
||||
}
|
||||
%>
|
||||
<% if(userselectExists || officeselectExists) { %>
|
||||
import { officeTreeData } from '/@/api/sys/office';
|
||||
import { officeTreeData } from '@jeesite/core/api/sys/office';
|
||||
<% } %>
|
||||
<% if(companyselectExists) { %>
|
||||
import { companyTreeData } from '/@/api/sys/company';
|
||||
import { companyTreeData } from '@jeesite/core/api/sys/company';
|
||||
<% } %>
|
||||
<% if(areaselectExists) { %>
|
||||
import { areaTreeData } from '/@/api/sys/area';
|
||||
import { areaTreeData } from '@jeesite/core/api/sys/area';
|
||||
<% } %>
|
||||
|
||||
const { t } = useI18n('${moduleName}${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${className}');
|
||||
const { t } = useI18n('${moduleName}${subModuleNameDot}.${funName}');
|
||||
const record = ref<${ParentClassName}>({} as ${ParentClassName});
|
||||
|
||||
const tableColumns: BasicColumn[] = [
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user