diff --git a/README-EN.md b/README-EN.md index 493f342b5..27821864f 100644 --- a/README-EN.md +++ b/README-EN.md @@ -69,10 +69,13 @@ Jeecg-Boot AI low code platform can be applied in the development of any J2EE pr Starts the project ----------------------------------- -- [Development Environment setup](https://help.jeecg.com/java/setup/tools) -- [IDEA Quick start](https://help.jeecg.com/java/setup/idea/startup) -- [Docker Quick start](https://help.jeecg.com/java/docker/quick) +> Default account password: admin/123456 +- [Development Environment setup](https://help.jeecg.com/java/setup/tools) +- [IDEA Quick start(single model)](https://help.jeecg.com/java/setup/idea/startup) +- [Docker Quick start(single model)](https://help.jeecg.com/java/docker/quick) +- [IDEA Quick start(microservices model)](https://help.jeecg.com/java/springcloud/switchcloud/monomer) +- [Docker Quick start(microservices model)](https://help.jeecg.com/java/docker/quickcloud) Technical documentation diff --git a/README.md b/README.md index 827655bfb..6985c22a1 100644 --- a/README.md +++ b/README.md @@ -66,18 +66,22 @@ JeecgBoot低代码平台,可以应用在任何J2EE项目的开发中,支持 启动项目 ----------------------------------- -- [开发环境搭建](https://help.jeecg.com/java/setup/tools) -- [IDEA启动前后端项目](https://help.jeecg.com/java/setup/idea/startup) -- [Docker一键启动前后端](https://help.jeecg.com/java/docker/quick) +> 默认账号密码: admin/123456 +- [开发环境搭建](https://help.jeecg.com/java/setup/tools) +- [IDEA启动前后端(单体模式)](https://help.jeecg.com/java/setup/idea/startup) +- [Docker一键启动(单体模式)](https://help.jeecg.com/java/docker/quick) +- [IDEA启动前后端(微服务方式)](https://help.jeecg.com/java/springcloud/switchcloud/monomer) +- [Docker一键启动(微服务方式)](https://help.jeecg.com/java/docker/quickcloud) 技术文档 ----------------------------------- - 官方网站: [http://www.jeecg.com](http://www.jeecg.com) -- 入门指南: [快速入门](http://www.jeecg.com/doc/quickstart) | [开发文档](https://help.jeecg.com) | [AI应用使用手册](https://help.jeecg.com/aigc) | [技术博客](https://jeecg.blog.csdn.net) -- 技术支持: [反馈问题](https://github.com/jeecgboot/JeecgBoot/issues/new?template=bug_report.md) | [视频教程](http://jeecg.com/doc/video) | [低代码体验一分钟](https://jeecg.blog.csdn.net/article/details/106079007) +- 在线演示: [平台演示](https://boot3.jeecg.com) | [APP演示](https://jeecg.com/appIndex) +- 入门指南: [快速入门](http://www.jeecg.com/doc/quickstart) | [代码生成使用](https://help.jeecg.com/java/codegen/online) | [开发文档](https://help.jeecg.com) | [AI应用手册](https://help.jeecg.com/aigc) | [视频教程](http://jeecg.com/doc/video) +- 技术支持: [反馈问题](https://github.com/jeecgboot/JeecgBoot/issues/new?template=bug_report.md) | [低代码体验一分钟](https://jeecg.blog.csdn.net/article/details/106079007) - QQ交流群 : 964611995、⑩716488839(满)、⑨808791225(满)、其他(满) @@ -196,12 +200,6 @@ JeecgBoot平台提供了一套完善的AI应用管理系统模块,是一套类 ## 微服务解决方案 -> 微服务方式快速启动 -> - [单体快速切换微服务](https://help.jeecg.com/java/springcloud/switchcloud/monomer) -> - [Docker一键启动微服务前后端](https://help.jeecg.com/java/docker/quickcloud) - - - - 1、服务注册和发现 Nacos √ - 2、统一配置中心 Nacos √ - 3、路由网关 gateway(三种加载方式) √ diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysTenantController.java b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysTenantController.java index 7efcd5993..3811b7310 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysTenantController.java +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysTenantController.java @@ -412,8 +412,11 @@ public class SysTenantController { */ @PutMapping("/invitationUserJoin") @RequiresPermissions("system:tenant:invitation:user") - public Result invitationUserJoin(@RequestParam("ids") String ids,@RequestParam("phone") String phone){ - sysTenantService.invitationUserJoin(ids,phone); + public Result invitationUserJoin(@RequestParam("ids") String ids,@RequestParam(value = "phone", required = false) String phone, @RequestParam(value = "username", required = false) String username){ + if(oConvertUtils.isEmpty(phone) && oConvertUtils.isEmpty(username)){ + return Result.error("手机号和用户账号不能同时为空!"); + } + sysTenantService.invitationUserJoin(ids,phone,username); return Result.ok("邀请用户成功"); } diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysPermissionMapper.xml b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysPermissionMapper.xml index d59347601..a72450303 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysPermissionMapper.xml +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysPermissionMapper.xml @@ -28,15 +28,16 @@ ,icon ,is_leaf FROM sys_permission - WHERE 1=1 - - - AND parent_id = #{parentId,jdbcType=VARCHAR} - - - AND parent_id is null - - + + + + parent_id = #{parentId,jdbcType=VARCHAR} + + + parent_id is null + + + @@ -212,7 +213,7 @@ - SELECT p.* FROM sys_permission p WHERE exists( diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/model/TreeModel.java b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/model/TreeModel.java index c2da973a8..51f5e8c1a 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/model/TreeModel.java +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/model/TreeModel.java @@ -22,7 +22,7 @@ public class TreeModel implements Serializable { private String slotTitle; - private boolean isLeaf; + private Boolean isLeaf; private String icon; @@ -54,11 +54,11 @@ public class TreeModel implements Serializable { this.title = title; } - public boolean getIsLeaf() { + public Boolean getIsLeaf() { return isLeaf; } - public void setIsLeaf(boolean isLeaf) { + public void setIsLeaf(Boolean isLeaf) { this.isLeaf = isLeaf; } diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysTenantService.java b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysTenantService.java index f4c79aaad..12b42e04b 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysTenantService.java +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysTenantService.java @@ -49,8 +49,9 @@ public interface ISysTenantService extends IService { * 邀请用户加入租户,通过手机号 * @param ids * @param phone + * @param username */ - void invitationUserJoin(String ids, String phone); + void invitationUserJoin(String ids, String phone,String username); /** * 请离用户(租户) diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysTenantServiceImpl.java b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysTenantServiceImpl.java index 4b7d47598..007586b3f 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysTenantServiceImpl.java +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysTenantServiceImpl.java @@ -104,15 +104,27 @@ public class SysTenantServiceImpl extends ServiceImpl 导出 导入 <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'button'> preIcon="ant-design:${btn.buttonIcon}" >${btn.buttonName} @@ -303,7 +303,7 @@ ifShow: !!record.bpmStatus && record.bpmStatus !== '1', } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -339,7 +339,7 @@ auth: '${entityPackage}:${tableName}:delete' } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -378,7 +378,7 @@ <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='button'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei index 263176761..56538c6dd 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei @@ -107,7 +107,7 @@ }; <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='form'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei index 838bae596..1ed5193be 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei @@ -110,7 +110,7 @@ 导出 导入 <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'button'> preIcon="ant-design:${btn.buttonIcon}" >${btn.buttonName} @@ -368,7 +368,7 @@ ifShow: !!record.bpmStatus && record.bpmStatus !== '1', } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -404,7 +404,7 @@ auth: '${entityPackage}:${tableName}:delete' } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -484,7 +484,7 @@ <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='button'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3Native/components/${entityName}Modal.vuei b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3Native/components/${entityName}Modal.vuei index ce21b6e52..3a09ae289 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3Native/components/${entityName}Modal.vuei +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3Native/components/${entityName}Modal.vuei @@ -77,7 +77,7 @@ visible.value = false; } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='form'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei index 6e434fa53..bbc4b2dfc 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei @@ -38,7 +38,7 @@ 导出 导入 <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'button'> preIcon="${btn.buttonIcon}" >${btn.buttonName} @@ -447,7 +447,7 @@ ifShow: !!record.bpmStatus && record.bpmStatus !== '1', } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -483,7 +483,7 @@ auth: '${entityPackage}:${tableName}:delete' } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -544,7 +544,7 @@ <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='button'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei index ad13ce7cb..799c43e7d 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei @@ -157,7 +157,7 @@ }; <#if buttonList?size gt 0> -<#list buttonList?sort_by('orderNum') as btn> +<#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='form'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei index 972f2d04d..519eb27f9 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei @@ -120,7 +120,7 @@ 导出 导入 <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'button'> preIcon="ant-design:${btn.buttonIcon}" >${btn.buttonName} @@ -518,7 +518,7 @@ ifShow: !!record.bpmStatus && record.bpmStatus !== '1', } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -559,7 +559,7 @@ auth: '${entityPackage}:${tableName}:delete' } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -597,7 +597,7 @@ } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='button'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei index 6c3b6d87e..99566158b 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei @@ -33,7 +33,7 @@ 导出 导入 <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'button'> preIcon="ant-design:${btn.buttonIcon}" >${btn.buttonName} @@ -349,7 +349,7 @@ ifShow: !!record.bpmStatus && record.bpmStatus !== '1', } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -384,7 +384,7 @@ auth: '${entityPackage}:${tableName}:delete' } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -443,7 +443,7 @@ <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='button'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei index 93cbf7cff..e1173a6d9 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei @@ -106,7 +106,7 @@ } }; <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='form'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei index 4a9a7aa86..35afec027 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei @@ -114,7 +114,7 @@ 导出 导入 <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'button'> preIcon="ant-design:${btn.buttonIcon}" >${btn.buttonName} @@ -389,7 +389,7 @@ ifShow: !!record.bpmStatus && record.bpmStatus !== '1', }, <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -426,7 +426,7 @@ auth: '${entityPackage}:${tableName}:delete' } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -464,7 +464,7 @@ } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='button'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/components/${entityName}Modal.vuei b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/components/${entityName}Modal.vuei index 0a1d91c96..3597dd7c0 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/components/${entityName}Modal.vuei +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/components/${entityName}Modal.vuei @@ -79,7 +79,7 @@ } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='form'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei index fc81d44f7..030031759 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei @@ -46,7 +46,7 @@ 导出 导入 <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'button'> preIcon="${btn.buttonIcon}" >${btn.buttonName} @@ -356,7 +356,7 @@ ifShow: !!record.bpmStatus && record.bpmStatus !== '1', } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -392,7 +392,7 @@ auth: '${entityPackage}:${tableName}:delete' } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -451,7 +451,7 @@ <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='button'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei index c7e89a75b..88f5f25ad 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei @@ -252,7 +252,7 @@ }; <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='form'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei index 32feb1b01..8af1ca2dd 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei @@ -32,7 +32,7 @@ 导出 导入 <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'button'> preIcon="${btn.buttonIcon}" >${btn.buttonName} @@ -330,7 +330,7 @@ ifShow: !!record.bpmStatus && record.bpmStatus !== '1', } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -366,7 +366,7 @@ auth: '${entityPackage}:${tableName}:delete' } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -425,7 +425,7 @@ <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='button'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei index 60acb8269..ebce307e2 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei @@ -251,7 +251,7 @@ }; <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='form'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei index 6199e829c..d8b161e49 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei @@ -113,7 +113,7 @@ 导出 导入 <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'button'> preIcon="${btn.buttonIcon}" >${btn.buttonName} @@ -364,7 +364,7 @@ ifShow: !!record.bpmStatus && record.bpmStatus !== '1', } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -401,7 +401,7 @@ } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -441,7 +441,7 @@ <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='button'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/components/${entityName}Modal.vuei b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/components/${entityName}Modal.vuei index f1e8a0ac6..87eebac51 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/components/${entityName}Modal.vuei +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/components/${entityName}Modal.vuei @@ -59,7 +59,7 @@ closeModal(); } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='form'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); @@ -75,7 +75,7 @@ handleSubmit, submitSuccess, <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='form'> handle${btn.buttonCode?cap_first}, diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei index 8aa9bcc47..79864c79f 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei @@ -32,7 +32,7 @@ 导出 导入 <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'button'> preIcon="${btn.buttonIcon}" >${btn.buttonName} @@ -329,7 +329,7 @@ ifShow: !!record.bpmStatus && record.bpmStatus !== '1', } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -365,7 +365,7 @@ auth: '${entityPackage}:${tableName}:delete' } <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle == 'link'> ,{ label: '${btn.buttonName}', @@ -424,7 +424,7 @@ <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='button'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei index 937a5f4bf..9b52722d0 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei @@ -286,7 +286,7 @@ }; <#if buttonList?size gt 0> - <#list buttonList?sort_by('orderNum') as btn> + <#list buttonList?filter(it -> it.orderNum?? && it.orderNum != null)?sort_by("orderNum") as btn> <#if btn.buttonStyle=='form'> function handle${btn.buttonCode?cap_first}(){ createMessage.info('点击了${btn.buttonName}按钮,对应的业务逻辑需自行实现!'); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml index a49fbaa93..e39f5bea0 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml +++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml @@ -25,6 +25,9 @@ management: include: metrics,httpexchanges,jeecghttptrace spring: +# main: +# # 启动加速 (建议开发环境,开启后flyway自动升级失效) +# lazy-initialization: true flyway: # 是否启用flyway enabled: true @@ -46,7 +49,7 @@ spring: mail.smtp.writetimeout: 10000 # 写入超时(毫秒) mail.smtp.auth: true smtp.ssl.enable: true - mail.debug: true # 启用调试模式(查看详细日志) +# mail.debug: true # 启用调试模式(查看详细日志) ## quartz定时任务,采用数据库方式 quartz: job-store-type: jdbc @@ -180,8 +183,8 @@ mybatis-plus: # 默认数据库表下划线命名 table-underline: true configuration: - # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 - #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl +# # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 +# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 返回类型为Map,显示null对应的字段 call-setters-on-nulls: true #jeecg专用配置 @@ -294,6 +297,7 @@ logging: org.springframework.context.support.PostProcessorRegistrationDelegate: error org.flywaydb: debug org.jeecg.modules.system.mapper: info + org.jeecg.modules.demo.test.mapper: info #swagger knife4j: #开启增强配置 diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/jeecg/jeecg_config.properties b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/jeecg/jeecg_config.properties index 44618ab82..6ccf6881c 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/jeecg/jeecg_config.properties +++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/jeecg/jeecg_config.properties @@ -1,9 +1,10 @@ -#code_generate_project_path -project_path=E:\\workspace\\jeecg-boot -#bussi_package[User defined] +# Module path to generate in the backend Java project +project_path=F:\\gitcode\\JeecgBoot\\jeecg-boot\\jeecg-boot-module\\jeecg-module-demo +## Path to generate in the frontend VUE3 project +#ui_project_path=F:\\gitcode\\1jeecg-boot-github\\jeecgboot-vue3 +# Business package path bussi_package=org.jeecg.modules.demo - #default code path #source_root_package=src #webroot_package=WebRoot diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/logback-spring.xml b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/logback-spring.xml index acad24b3d..6b9558ed7 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/logback-spring.xml +++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/logback-spring.xml @@ -69,9 +69,11 @@ + + \ No newline at end of file diff --git a/jeecg-boot/pom.xml b/jeecg-boot/pom.xml index f466c651d..287d4cfbc 100644 --- a/jeecg-boot/pom.xml +++ b/jeecg-boot/pom.xml @@ -71,8 +71,8 @@ 2.0.4 3.2.3 4.5.0 - 1.4.9 - 1.4.14 + 1.5.1 + 1.4.15 8.5.7 1.4.0 1.6.1 @@ -443,6 +443,10 @@ druid com.alibaba + + autopoi + org.jeecgframework + @@ -459,6 +463,10 @@ autopoi-web org.jeecgframework + + autopoi + org.jeecgframework + @@ -472,6 +480,16 @@ org.jeecgframework.jimureport jimubi-spring-boot3-starter ${jimubi-spring-boot-starter.version} + + + autopoi-web + org.jeecgframework + + + autopoi + org.jeecgframework + + diff --git a/jeecgboot-vue3/.eslintrc.js b/jeecgboot-vue3/.eslintrc.js index 5fcac9eb6..0e59a86af 100644 --- a/jeecgboot-vue3/.eslintrc.js +++ b/jeecgboot-vue3/.eslintrc.js @@ -25,6 +25,7 @@ module.exports = defineConfig({ 'plugin:jest/recommended', ], rules: { + 'prettier/prettier': 'off', // 彻底关闭 prettier 校验规则 'vue/script-setup-uses-vars': 'error', '@typescript-eslint/ban-ts-ignore': 'off', '@typescript-eslint/explicit-function-return-type': 'off', @@ -67,8 +68,8 @@ module.exports = defineConfig({ { html: { void: 'always', - normal: 'never', - component: 'always', + normal: 'any', + component: 'any', }, svg: 'always', math: 'always', diff --git a/jeecgboot-vue3/prettier.config.js b/jeecgboot-vue3/prettier.config.js index f16d8104b..4b07f914b 100644 --- a/jeecgboot-vue3/prettier.config.js +++ b/jeecgboot-vue3/prettier.config.js @@ -15,6 +15,6 @@ module.exports = { requirePragma: false, proseWrap: 'never', htmlWhitespaceSensitivity: 'strict', - endOfLine: 'auto', + endOfLine: 'auto', // 自动处理换行符(LF/CRLF) rangeStart: 0, }; diff --git a/jeecgboot-vue3/src/components/Form/src/BasicForm.vue b/jeecgboot-vue3/src/components/Form/src/BasicForm.vue index e7070e662..2991ed9c2 100644 --- a/jeecgboot-vue3/src/components/Form/src/BasicForm.vue +++ b/jeecgboot-vue3/src/components/Form/src/BasicForm.vue @@ -61,6 +61,7 @@ import { useDesign } from '/@/hooks/web/useDesign'; import dayjs from 'dayjs'; import { useDebounceFn } from '@vueuse/core'; + import { isFunction, isObject } from '/@/utils/is'; export default defineComponent({ name: 'BasicForm', @@ -145,9 +146,17 @@ if (defaultValue && dateItemType.includes(component)) { //update-begin---author:wangshuai ---date:20230410 for:【issues/435】代码生成的日期控件赋默认值报错------------ let valueFormat:string = ""; - if(componentProps){ + // update-begin--author:liaozhiyang---date:20250818---for:【issues/8683】DatePicker组件的componentProps使用函数形式时初始值获取不对 + if(isObject(componentProps)) { valueFormat = componentProps?.valueFormat; + } else if (isFunction(componentProps)) { + try { + // @ts-ignore + valueFormat = componentProps({schema, tableAction: props.tableAction, formModel})?.valueFormat; + } catch (error) { + } } + // update-end--author:liaozhiyang---date:20250818---for【issues/8683】DatePicker组件的componentProps使用函数形式时初始值获取不对 if(!valueFormat){ console.warn("未配置valueFormat,可能导致格式化错误!"); } diff --git a/jeecgboot-vue3/src/components/JVxeCustom/src/hooks/useFileCell.ts b/jeecgboot-vue3/src/components/JVxeCustom/src/hooks/useFileCell.ts index 4a8bcc310..ca15c998c 100644 --- a/jeecgboot-vue3/src/components/JVxeCustom/src/hooks/useFileCell.ts +++ b/jeecgboot-vue3/src/components/JVxeCustom/src/hooks/useFileCell.ts @@ -57,6 +57,7 @@ export function useFileCell(props, fileType: UploadTypeEnum, options?) { ...originColumn.value.props, maxCount: maxCount.value, fileType: fileType, + action: originColumn.value.action ?? void 0, }); } diff --git a/jeecgboot-vue3/src/components/Table/src/components/TableAction.vue b/jeecgboot-vue3/src/components/Table/src/components/TableAction.vue index 5044212d6..6409d52fb 100644 --- a/jeecgboot-vue3/src/components/Table/src/components/TableAction.vue +++ b/jeecgboot-vue3/src/components/Table/src/components/TableAction.vue @@ -7,12 +7,12 @@ diff --git a/jeecgboot-vue3/src/components/Table/src/components/editable/EditableCell.vue b/jeecgboot-vue3/src/components/Table/src/components/editable/EditableCell.vue index 71cef02a6..7b0b4d1b6 100644 --- a/jeecgboot-vue3/src/components/Table/src/components/editable/EditableCell.vue +++ b/jeecgboot-vue3/src/components/Table/src/components/editable/EditableCell.vue @@ -100,7 +100,14 @@ }); const getComponentProps = computed(() => { - const compProps = props.column?.editComponentProps ?? {}; + let compProps; + // update-begin--author:liaozhiyang---date:20250818---for:【issues/8680】editComponentProps可接受一个函数传入record + if (isFunction(props.column?.editComponentProps)) { + compProps = props.column?.editComponentProps(props.record); + } else { + compProps = props.column?.editComponentProps ?? {}; + } + // update-end--author:liaozhiyang---date:20250818---for:【issues/8680】editComponentProps可接受一个函数传入record const component = unref(getComponent); const apiSelectProps: Recordable = {}; if (component === 'ApiSelect') { diff --git a/jeecgboot-vue3/src/components/Table/src/components/settings/ColumnSetting.vue b/jeecgboot-vue3/src/components/Table/src/components/settings/ColumnSetting.vue index 458f40f21..6448ea348 100644 --- a/jeecgboot-vue3/src/components/Table/src/components/settings/ColumnSetting.vue +++ b/jeecgboot-vue3/src/components/Table/src/components/settings/ColumnSetting.vue @@ -222,14 +222,18 @@ checkSelect.value = !!values.rowSelection; }); // update-begin--author:liaozhiyang---date:20240724---for:【issues/6908】多语言无刷新切换时,BasicColumn和FormSchema里面的值不能正常切换 - watch([localeStore, getColumnsRef], () => { + watch([localeStore], () => { const columns = getColumns(); plainOptions.value = columns; plainSortOptions.value = columns; cachePlainOptions.value = columns; }); // update-end--author:liaozhiyang---date:20240724---for:【issues/6908】多语言无刷新切换时,BasicColumn和FormSchema里面的值不能正常切换 - + // update-begin--author:liaozhiyang---date:20250813---for:【issues/8529】setColumns将原本隐藏的列展示后,列配置里却没有勾选该列 + watch([getColumnsRef], () => { + init(); + }); + // update-end--author:liaozhiyang---date:20250813---for:【issues/8529】setColumns将原本隐藏的列展示后,列配置里却没有勾选该列 function getColumns() { const ret: Options[] = []; // update-begin--author:liaozhiyang---date:20250403---for:【issues/7996】表格列组件取消所有或者只勾选中间,显示非预期 diff --git a/jeecgboot-vue3/src/components/Table/src/hooks/useCustomSelection.tsx b/jeecgboot-vue3/src/components/Table/src/hooks/useCustomSelection.tsx index 38c6fa7a9..2f9a76d08 100644 --- a/jeecgboot-vue3/src/components/Table/src/hooks/useCustomSelection.tsx +++ b/jeecgboot-vue3/src/components/Table/src/hooks/useCustomSelection.tsx @@ -348,6 +348,9 @@ export function useCustomSelection( onSelectChild(record, checked); updateSelected(record, checked); onSelectParent(record, checked); + // update-begin--author:liaozhiyang---date:20250813---for:【issues/8690】BasicTable的rowSelection新增onSelect方法 + propsRef.value.rowSelection?.onSelect?.(toRaw(record), checked, toRaw(selectedRows.value)); + // update-end--author:liaozhiyang---date:20250813---for:【issues/8690】BasicTable的rowSelection新增onSelect方法 emitChange(); } diff --git a/jeecgboot-vue3/src/components/Table/src/types/table.ts b/jeecgboot-vue3/src/components/Table/src/types/table.ts index 8cc12fb51..117d85257 100644 --- a/jeecgboot-vue3/src/components/Table/src/types/table.ts +++ b/jeecgboot-vue3/src/components/Table/src/types/table.ts @@ -25,7 +25,7 @@ export interface TableRowSelection extends ITableRowSelection { * Callback executed when select/deselect one row * @type Function */ - onSelect?: (record: T, selected: boolean, selectedRows: Object[], nativeEvent: Event) => any; + onSelect?: (record: T, selected: boolean, selectedRows: Object[]) => any; /** * Callback executed when select/deselect all rows @@ -459,7 +459,9 @@ export interface BasicColumn extends ColumnProps { editRow?: boolean; editable?: boolean; editComponent?: ComponentType; - editComponentProps?: Recordable; + // update-begin--author:liaozhiyang---date:20250818---for:【issues/8680】editComponentProps可接受一个函数传入record + editComponentProps?: Recordable | ((record: Recordable) => Recordable); + // update-end--author:liaozhiyang---date:20250818---for:【issues/8680】editComponentProps可接受一个函数传入record editRule?: boolean | ((text: string, record: Recordable) => Promise); editValueMap?: (value: any) => string; onEditRow?: () => void; diff --git a/jeecgboot-vue3/src/components/jeecg/JVxeTable/src/hooks/useData.ts b/jeecgboot-vue3/src/components/jeecg/JVxeTable/src/hooks/useData.ts index 38f3f2938..985258da6 100644 --- a/jeecgboot-vue3/src/components/jeecg/JVxeTable/src/hooks/useData.ts +++ b/jeecgboot-vue3/src/components/jeecg/JVxeTable/src/hooks/useData.ts @@ -54,8 +54,16 @@ export function useData(props: JVxeTableProps): JVxeDataProps { // 暂时关闭左右虚拟滚动 enabled: false, }, - radioConfig: { highlight: true }, - checkboxConfig: { highlight: true }, + radioConfig: { + // 保留勾选状态 + reserve: true, + highlight: true, + }, + checkboxConfig: { + // 保留勾选状态 + reserve: true, + highlight: true, + }, mouseConfig: { selected: false }, keyboardConfig: { // 删除键功能 diff --git a/jeecgboot-vue3/src/components/jeecg/JVxeTable/src/hooks/useFinallyProps.ts b/jeecgboot-vue3/src/components/jeecg/JVxeTable/src/hooks/useFinallyProps.ts index 38969291a..42ac4c7e5 100644 --- a/jeecgboot-vue3/src/components/jeecg/JVxeTable/src/hooks/useFinallyProps.ts +++ b/jeecgboot-vue3/src/components/jeecg/JVxeTable/src/hooks/useFinallyProps.ts @@ -1,4 +1,4 @@ -import { unref, computed } from 'vue'; +import { unref, computed, ref, watch, nextTick } from 'vue'; import { merge } from 'lodash-es'; import { isArray } from '/@/utils/is'; import { useAttrs } from '/@/hooks/core/useAttrs'; @@ -40,6 +40,16 @@ export function useFinallyProps(props: JVxeTableProps, data: JVxeDataProps, meth }); return events; }); + + // update-begin--author:sunjianlei---date:20250804---for:【issues/8593】修复列改变后内容不刷新 + const vxeColumnsRef = ref([]) + watch(data.vxeColumns, async () => { + vxeColumnsRef.value = [] + await nextTick() + vxeColumnsRef.value = data.vxeColumns.value + }, {immediate: true}) + // update-end----author:sunjianlei---date:20250804---for:【issues/8593】修复列改变后内容不刷新 + // vxe 最终 props const vxeProps = computed(() => { // update-begin--author:liaozhiyang---date:20240417---for:【QQYUN-8785】online表单列位置的id未做限制,拖动其他列到id列上面,同步数据库时报错 @@ -77,7 +87,8 @@ export function useFinallyProps(props: JVxeTableProps, data: JVxeDataProps, meth size: props.size, loading: false, disabled: props.disabled, - columns: unref(data.vxeColumns), + // columns: unref(data.vxeColumns), + columns: vxeColumnsRef.value, editRules: unref(vxeEditRules), height: props.height === 'auto' ? null : props.height, maxHeight: props.maxHeight, diff --git a/jeecgboot-vue3/src/components/jeecg/OnLine/hooks/usePopBiz.ts b/jeecgboot-vue3/src/components/jeecg/OnLine/hooks/usePopBiz.ts index f172d23b0..41c774686 100644 --- a/jeecgboot-vue3/src/components/jeecg/OnLine/hooks/usePopBiz.ts +++ b/jeecgboot-vue3/src/components/jeecg/OnLine/hooks/usePopBiz.ts @@ -765,7 +765,8 @@ export function usePopBiz(ob, tableRef?) { if (props.param) { Object.keys(props.param).map((key) => { let str = props.param[key]; - if (key in queryParam) { + //【issues/8426】解决JPopup组件传参不能接收 + if (key in queryParam.value) { if (str && str.startsWith("'") && str.endsWith("'")) { str = str.substring(1, str.length - 1); } diff --git a/jeecgboot-vue3/src/hooks/system/useListPage.ts b/jeecgboot-vue3/src/hooks/system/useListPage.ts index b2d8036fa..1871c8447 100644 --- a/jeecgboot-vue3/src/hooks/system/useListPage.ts +++ b/jeecgboot-vue3/src/hooks/system/useListPage.ts @@ -16,7 +16,10 @@ interface ListPageOptions { // 样式作用域范围 designScope?: string; // 【必填】表格参数配置 - tableProps: TableProps; + tableProps: TableProps & { + // 添加 defSort 类型定义 + defSort?: DefSort; + }; // 是否分页 pagination?: boolean; // 导出配置 @@ -46,6 +49,11 @@ interface IDoRequestOptions { clearSelection?: boolean; } +interface DefSort { + column: string; + order: 'asc' | 'desc'; +} + /** * listPage页面公共方法 * @@ -85,8 +93,17 @@ export function useListPage(options: ListPageOptions) { //update-end-author:taoyan date:20220507 for: erp代码生成 子表 导出报错,原因未知- //update-begin-author:liusq date:20230410 for:[/issues/409]导出功能没有按排序结果导出,设置导出默认排序,创建时间倒序 - if(!paramsForm?.column){ - Object.assign(paramsForm,{column:'createTime',order:'desc'}); + // 获取表格的默认排序 + const { defSort } = options?.tableProps ?? {}; + if (defSort && !paramsForm?.column) { + // 使用类型断言确保 defSort 类型正确 + Object.assign(paramsForm, { + column: (defSort as DefSort).column, + order: (defSort as DefSort).order, + }); + } else if (!paramsForm?.column) { + // 如果没有默认排序,则使用创建时间倒序 + Object.assign(paramsForm, { column: 'createTime', order: 'desc' }); } //update-begin-author:liusq date:20230410 for: [/issues/409]导出功能没有按排序结果导出,设置导出默认排序,创建时间倒序 diff --git a/jeecgboot-vue3/src/layouts/default/header/MultipleHeader.vue b/jeecgboot-vue3/src/layouts/default/header/MultipleHeader.vue index 50e190640..a329398c8 100644 --- a/jeecgboot-vue3/src/layouts/default/header/MultipleHeader.vue +++ b/jeecgboot-vue3/src/layouts/default/header/MultipleHeader.vue @@ -141,10 +141,11 @@ .@{prefix-cls} { transition: width 0.2s; flex: 0 0 auto; - - &--dark { - margin-left: -1px; - } + // update-begin--author:liaozhiyang---date:20250818---for:【issues/8709】LayoutContent样式多出1px + // &--dark { + // margin-left: -1px; + // } + // update-end--author:liaozhiyang---date:20250818---for:【issues/8709】LayoutContent样式多出1px &--fixed { position: fixed; diff --git a/jeecgboot-vue3/src/layouts/default/header/index.less b/jeecgboot-vue3/src/layouts/default/header/index.less index 08604877c..a7a0adc68 100644 --- a/jeecgboot-vue3/src/layouts/default/header/index.less +++ b/jeecgboot-vue3/src/layouts/default/header/index.less @@ -7,7 +7,9 @@ display: flex; height: @header-height; padding: 0; - margin-left: -1px; + // update-begin--author:liaozhiyang---date:20250818---for:【issues/8709】LayoutContent样式多出1px + // margin-left: -1px; + // update-end--author:liaozhiyang---date:20250818---for:【issues/8709】LayoutContent样式多出1px line-height: @header-height; color: @white; background-color: @white; @@ -170,7 +172,9 @@ &--dark { background-color: @header-dark-bg-color !important; // border-bottom: 1px solid @border-color-base; - border-left: 1px solid @border-color-base; + // update-begin--author:liaozhiyang---date:20250818---for:【issues/8709】LayoutContent样式多出1px + // border-left: 1px solid @border-color-base; + // update-end--author:liaozhiyang---date:20250818---for:【issues/8709】LayoutContent样式多出1px .@{header-prefix-cls}-logo { &:hover { diff --git a/jeecgboot-vue3/src/layouts/default/index.vue b/jeecgboot-vue3/src/layouts/default/index.vue index c8fe28cba..b0cbbd850 100644 --- a/jeecgboot-vue3/src/layouts/default/index.vue +++ b/jeecgboot-vue3/src/layouts/default/index.vue @@ -86,7 +86,9 @@ &-main { width: 100%; - margin-left: 1px; + // update-begin--author:liaozhiyang---date:20250818---for:【issues/8709】LayoutContent样式多出1px + // margin-left: 1px; + // update-end--author:liaozhiyang---date:20250818---for:【issues/8709】LayoutContent样式多出1px } } diff --git a/jeecgboot-vue3/src/views/demo/jeecg/JeecgComponents.vue b/jeecgboot-vue3/src/views/demo/jeecg/JeecgComponents.vue index 5cd80c5ad..dab36b5b6 100644 --- a/jeecgboot-vue3/src/views/demo/jeecg/JeecgComponents.vue +++ b/jeecgboot-vue3/src/views/demo/jeecg/JeecgComponents.vue @@ -21,6 +21,24 @@ + + diff --git a/jeecgboot-vue3/src/views/demo/jeecg/jeecgComponents.data.ts b/jeecgboot-vue3/src/views/demo/jeecg/jeecgComponents.data.ts index a848dfd1e..3d9930396 100644 --- a/jeecgboot-vue3/src/views/demo/jeecg/jeecgComponents.data.ts +++ b/jeecgboot-vue3/src/views/demo/jeecg/jeecgComponents.data.ts @@ -626,6 +626,42 @@ export const schemas: FormSchema[] = [ span: 12, }, }, + { + field: 'pop2', + component: 'Input', + label: 'JPopup带参数示例', + helpMessage: ['插槽模式'], + slot: 'JPopup2', + colProps: { + span: 12, + }, + }, + { + field: 'pop2', + component: 'JEllipsis', + label: '选中值', + colProps: { + span: 12, + }, + }, + { + field: 'pop3', + component: 'Input', + label: 'JPopup带查询条件参数示例', + helpMessage: ['插槽模式'], + slot: 'JPopup3', + colProps: { + span: 12, + }, + }, + { + field: 'pop3', + component: 'JEllipsis', + label: '选中值', + colProps: { + span: 12, + }, + }, { field: 'JInputPop', component: 'JInputPop', diff --git a/jeecgboot-vue3/src/views/sys/login/LoginSelect.vue b/jeecgboot-vue3/src/views/sys/login/LoginSelect.vue index 975b05027..2e19446ee 100644 --- a/jeecgboot-vue3/src/views/sys/login/LoginSelect.vue +++ b/jeecgboot-vue3/src/views/sys/login/LoginSelect.vue @@ -146,11 +146,11 @@ let multi_depart = loginResult.multi_depart; //0:无部门 1:一个部门 2:多个部门 if (multi_depart == 0) { - notification.warn({ - message: '提示', - description: `您尚未归属部门,请确认账号信息`, - duration: 3, - }); + // notification.warn({ + // message: '提示', + // description: `您尚未归属部门,请确认账号信息`, + // duration: 3, + // }); isMultiDepart.value = false; } else if (multi_depart == 2) { isMultiDepart.value = true; diff --git a/jeecgboot-vue3/src/views/system/tenant/components/TenantInviteUserModal.vue b/jeecgboot-vue3/src/views/system/tenant/components/TenantInviteUserModal.vue index dfa81b1f8..15e21cbbb 100644 --- a/jeecgboot-vue3/src/views/system/tenant/components/TenantInviteUserModal.vue +++ b/jeecgboot-vue3/src/views/system/tenant/components/TenantInviteUserModal.vue @@ -19,21 +19,43 @@ export default defineComponent({ const title = ref('邀请成员'); const [registerForm, { resetFields, validate }] = useForm({ schemas: [ + { + label: '邀请方式', + field: 'invitedMode', + component: 'RadioButtonGroup', + defaultValue: 1, + componentProps: { + options: [ + { label: '手机号', value: 1 }, + { label: '用户账号', value: 2 }, + ], + }, + }, { label: '手机号', field: 'phone', component: 'Input', - dynamicRules: () => { - return [ - { required: true, message: '请填写手机号' }, - { pattern: /^1[3456789]\d{9}$/, message: '手机号码格式有误' }, - ]; + ifShow: ({ values }) => values.invitedMode === 1, + dynamicRules: ({ values }) => { + return values.invitedMode === 1 + ? [ + { required: true, message: '请填写手机号' }, + { pattern: /^1[3456789]\d{9}$/, message: '手机号码格式有误' }, + ] + : [{ pattern: /^1[3456789]\d{9}$/, message: '手机号码格式有误' }]; + }, + }, + { + field: 'user', + component: 'Input', + label: '用户账号', + ifShow: ({ values }) => values.invitedMode === 2, + dynamicRules: ({ values }) => { + return values.invitedMode === 2 ? [{ required: true, message: '请输入用户账号' }] : []; }, }, ], showActionButtonGroup: false, - labelCol: { span: 24 }, - wrapperCol: { span: 24 }, }); //表单赋值 const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => { @@ -47,7 +69,7 @@ export default defineComponent({ */ async function handleSubmit() { let values = await validate(); - emit('inviteOk',values.phone); + emit('inviteOk', values.phone, values.user); closeModal(); } diff --git a/jeecgboot-vue3/src/views/system/tenant/index.vue b/jeecgboot-vue3/src/views/system/tenant/index.vue index 6a150dc4a..03980b219 100644 --- a/jeecgboot-vue3/src/views/system/tenant/index.vue +++ b/jeecgboot-vue3/src/views/system/tenant/index.vue @@ -156,12 +156,16 @@ /** * 用户选择回调事件 * @param options - * @param value + * @param phone + * @param userSelectId */ - async function handleInviteUserOk(value) { + async function handleInviteUserOk(phone, username) { //update-begin---author:wangshuai ---date:20230314 for:【QQYUN-4605】后台的邀请谁加入租户,没办法选不是租户下的用户------------ - if (value) { - await invitationUserJoin({ ids: selectedRowKeys.value.join(','), phone: value }); + if (phone) { + await invitationUserJoin({ ids: selectedRowKeys.value.join(','), phone: phone }); + } + if (username) { + await invitationUserJoin({ ids: selectedRowKeys.value.join(','), username: username }); } //update-end---author:wangshuai ---date:20230314 for:【QQYUN-4605】后台的邀请谁加入租户,没办法选不是租户下的用户------------ } diff --git a/jeecgboot-vue3/src/views/system/tenant/my/MyTenantList.vue b/jeecgboot-vue3/src/views/system/tenant/my/MyTenantList.vue index 39fe2c3c6..b4b8c1612 100644 --- a/jeecgboot-vue3/src/views/system/tenant/my/MyTenantList.vue +++ b/jeecgboot-vue3/src/views/system/tenant/my/MyTenantList.vue @@ -1,6 +1,6 @@