Compare commits

...

26 Commits

Author SHA1 Message Date
thinkgem
0e5a9aeeda update README.md 2025-07-10 10:06:38 +08:00
thinkgem
b0e6ab234e 完善xss正则表达式,处理on前面是/的问题;完善beetl的xss格式化,默认使用非html文本处理 2025-07-09 13:37:41 +08:00
thinkgem
0e33e2a6a9 Recover 修改个人信息后跳转目标页面不对问题 2025-07-09 11:03:19 +08:00
thinkgem
d611238583 5.12.1 2025-07-08 00:30:29 +08:00
thinkgem
200c374dee 调整默认的允许重定向地址,只允许项目内部跳转 2025-07-08 00:22:58 +08:00
thinkgem
0408671952 禁用UEditor图片抓取器,对CMS模版查看的地址进行限定 2025-07-08 00:22:57 +08:00
thinkgem
c869dc037c 5.12.1 2025-07-07 18:29:23 +08:00
thinkgem
055d3036fb 新增 SHA-256 工具,使用 ShaUtils 替代 Sha1Utils 2025-07-07 08:56:11 +08:00
thinkgem
94d8dcff3f 代码生成模版,优化 useI18n 参数 2025-07-05 16:31:01 +08:00
thinkgem
3819fb1276 左树右表,切换树节点的时候定向到列表第一页 2025-07-04 15:00:47 +08:00
thinkgem
af42b315b2 代码生成使用简化请求路径时,api文件名中不含模块名。 2025-07-03 16:49:37 +08:00
thinkgem
6bc118efeb update yml 2025-07-03 14:01:02 +08:00
thinkgem
19e395ae1f 默认使用oracle ojdbc8驱动 2025-07-03 13:47:58 +08:00
thinkgem
bdbd616130 代码生成模版支持多级模块设置,如模块管理:ai-core;功能生成模块名:ai.core;新增几个模版参数:moduleMinus、modulePath、subModuleNameDot、subModulePath 2025-06-30 11:19:56 +08:00
thinkgem
b12a225768 修正beetl修改密码后再登录系统,没有跳转到首页问题 2025-06-30 11:18:50 +08:00
thinkgem
1ca6bfa942 生成模版优化 2025-06-27 17:18:19 +08:00
thinkgem
bf8b05a49e vue主键为输入框的时候,不验证主键重复问题 2025-06-27 17:13:31 +08:00
thinkgem
26587e106f ztree 当没有title数据的时候,使用name作为title显示 2025-06-27 09:22:12 +08:00
thinkgem
7317bc227e 增加 spring.cache.globalKeyNames 参数,指定哪些为全局缓存,节省资源 2025-06-23 09:37:40 +08:00
thinkgem
3392c66fd5 修正请求对象被回收提示 2025-06-21 19:30:34 +08:00
thinkgem
6c8e8b930b 新增vue前端模块代码生成模板 2025-06-18 11:03:33 +08:00
thinkgem
2e832ef693 代码优化 2025-06-10 11:46:47 +08:00
thinkgem
b10f9d36fb lint type 2025-06-08 10:42:32 +08:00
thinkgem
ae2d2ae76f 代码生成模板默认替换为 Monorepo 2025-06-08 10:38:34 +08:00
thinkgem
6d5cd49c19 增加ureport接口权限配置 2025-06-06 15:03:15 +08:00
thinkgem
6b7813beaf 增加JsonFormat条件防止出现类型转换问题 2025-06-05 13:04:34 +08:00
126 changed files with 741 additions and 474 deletions

View File

@@ -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/>
## 授权协议声明

View File

@@ -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>

View File

@@ -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";

View File

@@ -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)
);

View File

@@ -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 {
}

View 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);
}
}

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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];

View File

@@ -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];

View File

@@ -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));
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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>

View File

@@ -27,4 +27,5 @@
5.10.1
5.11.0
5.11.1
5.12.0
5.12.0
5.12.1

View File

@@ -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>

View File

@@ -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);
}

View File

@@ -35,4 +35,5 @@
5.10.1
5.11.0
5.11.1
5.12.0
5.12.0
5.12.1

View File

@@ -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(), {

View File

@@ -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);
}

View File

@@ -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>

View File

@@ -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;

View File

@@ -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:

View 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;
}

View File

@@ -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

View File

@@ -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>

View File

@@ -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

View File

@@ -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接口

View File

@@ -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;

View File

@@ -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" ?>

View File

@@ -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;

View File

@@ -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'){} %>]]>

View File

@@ -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'){} %>]]>

View File

@@ -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'){} %>]]>

View File

@@ -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'){} %>]]>

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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接口

View File

@@ -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;

View File

@@ -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" ?>

View File

@@ -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;

View File

@@ -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'){} %>]]>

View File

@@ -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'){} %>]]>

View File

@@ -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'){} %>]]>

View File

@@ -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'){} %>]]>

View File

@@ -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

View File

@@ -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
# /**

View File

@@ -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

View File

@@ -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
# /**

View File

@@ -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>

View File

@@ -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"?>

View File

@@ -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[

View File

@@ -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里进行覆盖该参数值。

View File

@@ -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>

View File

@@ -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><![CDATA[

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>deploy</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}-client/bin</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}-client/bin</filePath>
<fileName>deploy.bat</fileName>
<charset>GBK</charset>
<content><![CDATA[@echo off

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>deploy</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}-client/bin</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}-client/bin</filePath>
<fileName>deploy.sh</fileName>
<content><![CDATA[#!/bin/sh
# /**

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>package</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}-client/bin</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}-client/bin</filePath>
<fileName>package.bat</fileName>
<charset>GBK</charset>
<content><![CDATA[@echo off

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>package</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}-client/bin</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}-client/bin</filePath>
<fileName>package.sh</fileName>
<content><![CDATA[#!/bin/sh
# /**

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>pom</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}-client</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}-client</filePath>
<fileName>pom.xml</fileName>
<charset></charset>
<content><![CDATA[<?xml version="1.0" encoding="UTF-8"?>

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>package</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}-client/src/main/java/com/jeesite/modules/${@StringUtils.replace(moduleCode, '-', '/')}</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}-client/src/main/java/com/jeesite/modules/${@StringUtils.replace(moduleCode, '-', '/')}</filePath>
<fileName></fileName>
<content><![CDATA[

View File

@@ -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"?>

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>docker-build</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/bin</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/bin</filePath>
<fileName>docker-build.bat</fileName>
<charset>GBK</charset>
<content><![CDATA[@echo off

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>docker-build</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/bin</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/bin</filePath>
<fileName>docker-build.sh</fileName>
<content><![CDATA[#!/bin/sh
# /**

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>Dockerfile</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/bin/docker</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/bin/docker</filePath>
<fileName>Dockerfile</fileName>
<content><![CDATA[FROM docker.m.daocloud.io/openjdk:8
LABEL maintainer="ThinkGem@163.com"

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>package</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/bin</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/bin</filePath>
<fileName>package.bat</fileName>
<charset>GBK</charset>
<content><![CDATA[@echo off

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>package</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/bin</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/bin</filePath>
<fileName>package.sh</fileName>
<content><![CDATA[#!/bin/sh
# /**

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>run-tomcat</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/bin</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/bin</filePath>
<fileName>run-tomcat.bat</fileName>
<charset>GBK</charset>
<content><![CDATA[@echo off

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>run-tomcat</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/bin</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/bin</filePath>
<fileName>run-tomcat.sh</fileName>
<content><![CDATA[#!/bin/sh
# /**

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>run-web</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/bin</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/bin</filePath>
<fileName>run-web.bat</fileName>
<charset>GBK</charset>
<content><![CDATA[@echo off

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>run-web</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/bin</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/bin</filePath>
<fileName>run-web.sh</fileName>
<content><![CDATA[#!/bin/sh
# /**

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>erm</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/db</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/db</filePath>
<fileName>${moduleCode}.erm</fileName>
<content><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<diagram>

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>pom</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}</filePath>
<fileName>pom.xml</fileName>
<charset></charset>
<content><![CDATA[<?xml version="1.0" encoding="UTF-8"?>

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>package</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/src/main/java/com/jeesite/modules/${@StringUtils.replace(moduleCode, '-', '/')}</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/src/main/java/com/jeesite/modules/${@StringUtils.replace(moduleCode, '-', '/')}</filePath>
<fileName></fileName>
<content><![CDATA[

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>start-class</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/src/main/java/com/jeesite/modules</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/src/main/java/com/jeesite/modules</filePath>
<fileName>${@StringUtils.capCamelCase(moduleCode)}Application.java</fileName>
<content><![CDATA[
/**

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>bootstrap</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/src/main/resources/config</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/src/main/resources/config</filePath>
<fileName>bootstrap-elk.yml</fileName>
<content><![CDATA[

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>bootstrap</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/src/main/resources/config</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/src/main/resources/config</filePath>
<fileName>bootstrap-prod.yml</fileName>
<content><![CDATA[

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>bootstrap</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/src/main/resources/config</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/src/main/resources/config</filePath>
<fileName>bootstrap.yml</fileName>
<content><![CDATA[
#======================================#

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>logback-spring</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/src/main/resources/config</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/src/main/resources/config</filePath>
<fileName>logback-spring-elk.xml</fileName>
<content><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="false">

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>logback-spring</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/src/main/resources/config</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/src/main/resources/config</filePath>
<fileName>logback-spring-prod.xml</fileName>
<content><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="false">

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>logback-spring</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/src/main/resources/config</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/src/main/resources/config</filePath>
<fileName>logback-spring.xml</fileName>
<content><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="false">

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>static</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/src/main/resources/static/modules/${@StringUtils.replace(moduleCode, '-', '/')}</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/src/main/resources/static/modules/${@StringUtils.replace(moduleCode, '-', '/')}</filePath>
<fileName></fileName>
<content><![CDATA[

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>run-web</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/src/main/webapp/WEB-INF</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/src/main/webapp/WEB-INF</filePath>
<fileName>startup.bat</fileName>
<content><![CDATA[chcp 65001
@echo off

View File

@@ -3,7 +3,7 @@
No deletion without permission, or be held responsible to law. -->
<template>
<name>run-web</name>
<filePath>${baseDir}/${moduleCode}/${moduleCode}/src/main/webapp/WEB-INF</filePath>
<filePath>${baseDir}/${modulePath}/${moduleCode}/src/main/webapp/WEB-INF</filePath>
<fileName>startup.sh</fileName>
<content><![CDATA[#!/bin/sh
# /**

View File

@@ -0,0 +1,35 @@
<?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>README</name>
<filePath>${baseDir}/packages/${modulePath}</filePath>
<fileName>README.md</fileName>
<content><![CDATA[
- 官方网站:<https://jeesite.com>
- 使用文档:<https://jeesite.com/docs>
- 后端代码:<https://gitee.com/thinkgem/jeesite5>
- 前端代码:<https://gitee.com/thinkgem/jeesite-vue>
------
<div align="center">
如果你喜欢 JeeSite请给她一个 ⭐️ Star您的支持将是我们前行的动力。
</div>
------
- 问题反馈:<https://gitee.com/thinkgem/jeesite-vue/issues> [【新手必读】](https://gitee.com/thinkgem/jeesite5/issues/I18ARR)
- 需求收集:<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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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

View File

@@ -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接口

View File

@@ -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;
<% } %>
/**

View File

@@ -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[
<%

View File

@@ -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']}){ %>

View File

@@ -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(), {

View File

@@ -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>(
{

View File

@@ -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},
<%
}
}

View File

@@ -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