From db1ff0268b55ee5ec77975ee84782969fa8cae9f Mon Sep 17 00:00:00 2001 From: JEECG <445654970@qq.com> Date: Tue, 19 Aug 2025 22:58:12 +0800 Subject: [PATCH] Squashed commit of the following: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit b7519d71992b644f6c17643169959983c8d92669 Author: JEECG <445654970@qq.com> Date: Tue Aug 19 15:18:52 2025 +0800 中文乱码 commit 81ba07c853d18115d2bacb1f940b60e209fc0a4b Author: JEECG <445654970@qq.com> Date: Tue Aug 19 15:09:21 2025 +0800 增加代码生成用法文档 commit 92ed296e634f427a6d9dbe47636dc50aa5e80de0 Author: JEECG <445654970@qq.com> Date: Tue Aug 19 14:04:22 2025 +0800 【issues/8709】LayoutContent样式多出1px commit c2aff84914750c20659e93b9bf6ca92a1308e29f Author: JEECG <445654970@qq.com> Date: Tue Aug 19 14:04:09 2025 +0800 【issues/8683】DatePicker组件的componentProps使用函数形式时初始值获取不对 commit e002cd3bf3861111c1619b28490251a36c2985de Author: JEECG <445654970@qq.com> Date: Tue Aug 19 14:03:51 2025 +0800 【issues/8680】editComponentProps 可接受一个函数传入record commit 1de07ff3ffa5fb77fa972c76f7daf9073f058915 Author: JEECG <445654970@qq.com> Date: Tue Aug 19 14:03:32 2025 +0800 -- author:liaozhiyang---date:20250813--for:【issues/8690】BasicTable的rowSelection新增onSelect方法 --- commit 35852d41f1582010cf4c97ebdf23d17b412873cd Author: JEECG <445654970@qq.com> Date: Tue Aug 19 14:03:04 2025 +0800 jvxeTable表格切换disabled属性时,相邻的两个枚举下拉,如果值是一样的,但是label不一样,会把第二个下拉的显示值渲染到第一个下拉中 #8593 commit a2cb1d9f25fbcd03711515008b901f3ad6f25819 Author: JEECG <445654970@qq.com> Date: Tue Aug 19 14:00:01 2025 +0800 【issues/8529】setColumns将原本隐藏的列展示后,列配置里却没有勾选该列 commit 2002af54d0ec9128debaf1eccb5afb0f677f0c14 Author: JEECG <445654970@qq.com> Date: Tue Aug 19 13:59:42 2025 +0800 JVxeTypes.image组件action字段只能定义第1张图片的上传接口,后面图片的接口还是使用公共上传接口 #8628 commit 89747403a2c16314746c952665569aa9335425d4 Author: JEECG <445654970@qq.com> Date: Tue Aug 19 13:59:28 2025 +0800 JVxeTable组件全选翻页后会被取消选中 #8630 commit 3db0995c3f0bb3b1825fe7989721a6ed1e0b41c1 Author: JEECG <445654970@qq.com> Date: Tue Aug 19 11:23:19 2025 +0800 [代码生成]前端代码支持直接生成到前端项目、菜单sql会自动生成到start项目的flyway目录 commit 950621dd88dab3d365585abafde4317be15df6c2 Author: JEECG <445654970@qq.com> Date: Mon Aug 18 23:04:59 2025 +0800 升级代码生成器,一键生成代码,vue3代码会生成到前端项目、菜单升级sql自动迁移到flyway目录重启自动执行(不需要手工迁移前端代码和手工执行升级sql) commit 033cf51d69a96177fbb3bc4a5706e5da9792c57c Author: JEECG <445654970@qq.com> Date: Mon Aug 18 23:04:52 2025 +0800 升级代码生成器,一键生成代码,vue3代码会生成到前端项目、菜单升级sql自动迁移到flyway目录重启自动执行(不需要手工迁移前端代码和手工执行升级sql) commit fb9f367517e6671efd1f7e40dee67f05251154a6 Author: JEECG <445654970@qq.com> Date: Mon Aug 18 23:02:53 2025 +0800 代码生成,online自定义按钮无排序报错 commit b2da45d80399c9e5aa7ec962a91c4b532e0bb95d Author: JEECG <445654970@qq.com> Date: Mon Aug 18 16:23:22 2025 +0800 演示地址 commit 2840f0d325427db82ef71b8576cc78f1e1d9117f Author: JEECG <445654970@qq.com> Date: Mon Aug 18 15:37:10 2025 +0800 默认账号密码 commit 6ace7eae8a5b0831317ba994b3ac1c18efe19aa6 Author: JEECG <445654970@qq.com> Date: Sun Aug 17 15:11:45 2025 +0800 开发环境关闭日志生成,项目启动快;生产环境请按需打开注释 commit 3d88147c59e679017f0f89de77ba762c7e0d004e Author: JEECG <445654970@qq.com> Date: Thu Aug 14 23:03:46 2025 +0800 调整微服务启动文档 commit ba0052d4522775abcae78c4053a12408e78ac895 Author: JEECG <445654970@qq.com> Date: Wed Aug 13 13:55:13 2025 +0800 支持lazy-initialization启动,项目大了后启动会更快 commit 69fca254f05646ea2c38892a8d97d37d687f4147 Author: JEECG <445654970@qq.com> Date: Wed Aug 13 11:47:27 2025 +0800 补充注释 commit b3de5961991e6cb81207bacf8bda827fba659bb7 Author: JEECG <445654970@qq.com> Date: Wed Aug 13 11:47:16 2025 +0800 彻底关闭 prettier 校验规则 commit f46273d15e9d37e9cbe897ea86cdbb44f3b1221e Author: JEECG <445654970@qq.com> Date: Wed Aug 13 10:26:23 2025 +0800 设置ESLint 的 vue/html-self-closing 自闭合标签警告配置 commit 0fe258dbc2743c2b123690c6b6efd4ee85fb9977 Author: JEECG <445654970@qq.com> Date: Wed Aug 13 09:26:16 2025 +0800 修复 onExportXls defSort 不生效问题 #7570 commit de7f23c5555eedadce01b093618c6f9aa82a646c Merge: d97e56b2 444c7140 Author: JEECG Date: Wed Aug 13 09:20:31 2025 +0800 Merge pull request #8496 from lileiAimee/developer 解决TableAction中自定义图标颜色不起作用的问题 commit d97e56b2f0a225a055902b30dec430c7af1fb791 Author: JEECG <445654970@qq.com> Date: Tue Aug 12 19:08:43 2025 +0800 多租户模式下系统系统会给租户默认增加上测试的角色菜单,但是后台获取菜单时异常,无法打开相关页面 #8667 commit c868496b78c048d9fe98fb57b7904b8ea69f04f4 Author: JEECG <445654970@qq.com> Date: Tue Aug 12 19:02:49 2025 +0800 映射警告 commit c5150baa69a764d826742c813ba461c9aa13f2db Author: JEECG <445654970@qq.com> Date: Tue Aug 12 18:18:34 2025 +0800 支持通过用户账号邀请加入租户 commit 3d9f59c69b3f7c0bbef3f733f055d6da4b79c2c0 Author: JEECG <445654970@qq.com> Date: Tue Aug 12 18:17:55 2025 +0800 邀请用户加入租户,支持通过用户账号 commit 420d6db3fbf7351f1cf1a40d7b357b3172c1ec38 Author: JEECG <445654970@qq.com> Date: Tue Aug 12 18:06:20 2025 +0800 登录用户没有部门,不提示警告 commit 473a626039561ebc9b313f841043b0bbfc1e250c Author: JEECG <445654970@qq.com> Date: Tue Aug 12 14:10:02 2025 +0800 增加JPopup组件带参数示例 commit 0308b0597ce99b4cd073557302f652df266c0cb6 Author: JEECG <445654970@qq.com> Date: Tue Aug 12 14:08:18 2025 +0800 【issues/8426】解决JPopup组件传参不能接收 commit 2191f5d48c54abbe89af8fd60df1c27b18b06f93 Author: JEECG <445654970@qq.com> Date: Mon Aug 11 22:43:07 2025 +0800 调整位置 commit 1158b0b6e76b1fea6da46376ee6ba753273ef073 Author: JEECG <445654970@qq.com> Date: Mon Aug 11 22:30:39 2025 +0800 升级seata到1.7.0;升级dynamic-datasource-spring-boot-starter到3.5.2 commit ead2cef1f474f401fed6eb97fc161b4d08c05609 Author: JEECG <445654970@qq.com> Date: Mon Aug 11 18:47:48 2025 +0800 支持多字段默认排序defSort数组、解决多列排序无效 #8659 commit 83bb0a0a6a4aba255e81294d5355ec0872eb79bc Author: JEECG <445654970@qq.com> Date: Mon Aug 11 18:47:43 2025 +0800 支持多字段默认排序defSort数组 commit b474e9e5a54d366cfc496baa3e1dc648025f55ac Author: JEECG <445654970@qq.com> Date: Sun Aug 10 17:06:01 2025 +0800 开发环境安装 commit 422373e300b633a70ddf4a875bf508e473522992 Author: JEECG <445654970@qq.com> Date: Sun Aug 10 16:30:13 2025 +0800 提供JeecgBoot 运行环境python检查脚本 commit 1cf11a4c2aa53c1a0567dbe556436552555d6266 Author: JEECG <445654970@qq.com> Date: Sat Aug 9 09:41:57 2025 +0800 提供jeecgboot-oracle11g.dmp commit 925f1637844eb0a158a7e78f544b93aff66c1644 Author: JEECG <445654970@qq.com> Date: Fri Aug 8 22:07:24 2025 +0800 引入jeecg-boot-starter-job依赖启动报错 #8694 commit d01c1d7d477473b2250d0b4d3a2d35b939b9e210 Author: JEECG <445654970@qq.com> Date: Thu Aug 7 15:41:21 2025 +0800 支持lazy-initialization commit 3576b549458d877f3e3ae3f61ffd55f3d64b10d4 Author: JEECG <445654970@qq.com> Date: Thu Aug 7 15:36:51 2025 +0800 升级积木报表和积木BI到最新版v2.1.2 commit 444c7140f6b67a51a633dbbbeddcf7e3fbf26924 Author: lileiAimee <345697385@qq.com> Date: Wed Jun 25 09:55:07 2025 +0800 解决TableAction中自定义图标颜色不起作用的问题 # Conflicts: # README-EN.md # README.md # jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/pom.xml # jeecg-boot/pom.xml --- README-EN.md | 9 +++-- README.md | 20 +++++----- .../controller/SysTenantController.java | 7 +++- .../system/mapper/xml/SysPermissionMapper.xml | 21 +++++----- .../jeecg/modules/system/model/TreeModel.java | 6 +-- .../system/service/ISysTenantService.java | 3 +- .../service/impl/SysTenantServiceImpl.java | 24 +++++++++--- .../vue3/${entityName}List.vuei | 8 ++-- .../vue3/components/${entityName}Modal.vuei | 2 +- .../vue3Native/${entityName}List.vuei | 8 ++-- .../components/${entityName}Modal.vuei | 2 +- .../vue3/${entityName}List.vuei | 8 ++-- .../vue3/components/${entityName}Modal.vuei | 2 +- .../vue3Native/${entityName}List.vuei | 8 ++-- .../vue3/${entityName}List.vuei | 8 ++-- .../vue3/components/${entityName}Modal.vuei | 2 +- .../vue3Native/${entityName}List.vuei | 8 ++-- .../components/${entityName}Modal.vuei | 2 +- .../vue3/${entityName}List.vuei | 8 ++-- .../vue3/components/${entityName}Modal.vuei | 2 +- .../vue3/${entityName}List.vuei | 8 ++-- .../vue3/components/${entityName}Modal.vuei | 2 +- .../vue3Native/${entityName}List.vuei | 8 ++-- .../components/${entityName}Modal.vuei | 4 +- .../vue3/${entityName}List.vuei | 8 ++-- .../vue3/components/${entityName}Modal.vuei | 2 +- .../src/main/resources/application-dev.yml | 10 +++-- .../resources/jeecg/jeecg_config.properties | 9 +++-- .../src/main/resources/logback-spring.xml | 4 +- jeecg-boot/pom.xml | 22 ++++++++++- jeecgboot-vue3/.eslintrc.js | 5 ++- jeecgboot-vue3/prettier.config.js | 2 +- .../src/components/Form/src/BasicForm.vue | 11 +++++- .../JVxeCustom/src/hooks/useFileCell.ts | 1 + .../Table/src/components/TableAction.vue | 4 +- .../src/components/editable/EditableCell.vue | 9 ++++- .../src/components/settings/ColumnSetting.vue | 8 +++- .../Table/src/hooks/useCustomSelection.tsx | 3 ++ .../src/components/Table/src/types/table.ts | 6 ++- .../jeecg/JVxeTable/src/hooks/useData.ts | 12 +++++- .../JVxeTable/src/hooks/useFinallyProps.ts | 15 +++++++- .../jeecg/OnLine/hooks/usePopBiz.ts | 3 +- .../src/hooks/system/useListPage.ts | 23 +++++++++-- .../layouts/default/header/MultipleHeader.vue | 9 +++-- .../src/layouts/default/header/index.less | 8 +++- jeecgboot-vue3/src/layouts/default/index.vue | 4 +- .../src/views/demo/jeecg/JeecgComponents.vue | 18 +++++++++ .../views/demo/jeecg/jeecgComponents.data.ts | 36 ++++++++++++++++++ .../src/views/sys/login/LoginSelect.vue | 10 ++--- .../components/TenantInviteUserModal.vue | 38 +++++++++++++++---- .../src/views/system/tenant/index.vue | 12 ++++-- .../views/system/tenant/my/MyTenantList.vue | 36 +++++++++++++++--- .../src/views/system/tenant/tenant.data.ts | 22 +++++------ 53 files changed, 374 insertions(+), 156 deletions(-) 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 @@