基于代码生成器的低代码平台,超越传统商业平台!前后端分离架构SpringBoot 2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT。强大的代码生成器让前后端代码一键生成,无需写任何代码! 引领新低代码开发模式OnlineCoding->代码生成->手工MERGE,帮助Java项目解决70%重复工作,让开发更关注业务,既能快速提高开发效率,帮助公司节省成本,同时又不失灵活性。

Overview

JEECG

JEECG BOOT 低代码开发平台(前后端分离版本)

当前最新版本: 2.4.2(发布日期:2021-01-26)

AUR GitHub stars GitHub forks

项目介绍:

Java Low Code Platform for Enterprise web applications

JeecgBoot 是一款基于代码生成器的低代码开发平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生成器让前后端代码一键生成,实现低代码开发! JeecgBoot 引领新的低代码开发模式(OnlineCoding-> 代码生成器-> 手工MERGE), 帮助解决Java项目70%的重复工作,让开发更多关注业务。既能快速提高效率,节省研发成本,同时又不失灵活性!

JeecgBoot 提供了一系列低代码模块,实现在线开发真正的零代码:Online表单开发、Online报表、报表配置能力、在线图表设计、大屏设计、移动配置能力、表单设计器、在线设计流程、流程自动化配置、插件能力(可插拔)等等!

JEECG宗旨是: 简单功能由OnlineCoding配置实现,做到零代码开发;复杂功能由代码生成器生成进行手工Merge 实现低代码开发,既保证了智能又兼顾灵活;实现了低代码开发的同时又支持灵活编码,解决了当前低代码产品普遍不灵活的弊端!

JEECG业务流程: 采用工作流来实现、扩展出任务接口,供开发编写业务逻辑,表单提供多种解决方案: 表单设计器、online配置表单、编码表单。同时实现了流程与表单的分离设计(松耦合)、并支持任务节点灵活配置,既保证了公司流程的保密性,又减少了开发人员的工作量。

适用项目

Jeecg-Boot低代码开发平台,可以应用在任何J2EE项目的开发中,尤其适合SAAS项目、企业信息管理系统(MIS)、内部办公系统(OA)、企业资源计划系统(ERP)、客户关系管理系统(CRM)等,其半智能手工Merge的开发方式,可以显著提高开发效率70%以上,极大降低开发成本。

技术文档

交流互动

为什么选择JEECG-BOOT?

  • 1.采用最新主流前后分离框架(Springboot+Mybatis+antd),容易上手; 代码生成器依赖性低,灵活的扩展能力,可快速实现二次开发;
  • 2.支持微服务SpringCloud Alibaba(Nacos、Gateway、Sentinel、Skywarking),提供切换机制支持单体和微服务自由切换
  • 3.开发效率高,采用代码生成器,单表、树列表、一对多、一对一等数据模型,增删改查功能一键生成,菜单配置直接使用;
  • 4.代码生成器提供强大模板机制,支持自定义模板,目前提供四套风格模板(单表两套、树模型一套、一对多三套)
  • 5.代码生成器非常智能,在线业务建模、在线配置、所见即所得支持23种类控件,一键生成前后端代码,大幅度提升开发效率,不再为重复工作发愁。
  • 6.低代码能力:Online在线表单(无需编码,通过在线配置表单,实现表单的增删改查,支持单表、树、一对多、一对一等模型,实现人人皆可编码)
  • 7.低代码能力:Online在线报表(无需编码,通过在线配置方式,实现数据报表,可以快速抽取数据,减轻开发压力,实现人人皆可编码)
  • 8.低代码能力:Online在线图表(无需编码,通过在线配置方式,实现曲线图,柱状图,数据报表等,支持自定义排版布局,实现人人皆可编码)
  • 9.封装完善的用户、角色、菜单、组织机构、数据字典、在线定时任务等基础功能,支持访问授权、按钮权限、数据权限等功能
  • 10.常用共通封装,各种工具类(定时任务,短信接口,邮件发送,Excel导入导出等),基本满足80%项目需求
  • 11.简易Excel导入导出,支持单表导出和一对多表模式导出,生成的代码自带导入导出功能
  • 12.集成简易报表工具,图像报表和数据导出非常方便,可极其方便的生成图形报表、pdf、excel、word等报表;
  • 13.采用前后分离技术,页面UI风格精美,针对常用组件做了封装:时间、行表格控件、截取显示控件、报表组件,编辑器等等
  • 14.查询过滤器:查询功能自动生成,后台动态拼SQL追加查询条件;支持多种匹配方式(全匹配/模糊查询/包含查询/不匹配查询);
  • 15.数据权限(精细化数据权限控制,控制到行级,列表级,表单字段级,实现不同人看不同数据,不同人对同一个页面操作不同字段
  • 16.页面校验自动生成(必须输入、数字校验、金额校验、时间空间等);
  • 17.支持SAAS服务模式,提供SaaS多租户架构方案。
  • 18.分布式文件服务,集成minio、阿里OSS等优秀的第三方,提供便捷的文件上传与管理,同时也支持本地存储。
  • 19.主流数据库兼容,一套代码完全兼容Mysql、Postgresql、Oracle三大主流数据库。
  • 20.集成工作流activiti,并实现了只需在页面配置流程转向,可极大的简化bpm工作流的开发;用bpm的流程设计器画出了流程走向,一个工作流基本就完成了,只需写很少量的java代码;
  • 21.低代码能力:在线流程设计,采用开源Activiti流程引擎,实现在线画流程,自定义表单,表单挂靠,业务流转
  • 22.多数据源:及其简易的使用方式,在线配置数据源配置,便捷的从其他数据抓取数据;
  • 23.提供单点登录CAS集成方案,项目中已经提供完善的对接代码
  • 24.低代码能力:表单设计器,支持用户自定义表单布局,支持单表,一对多表单、支持select、radio、checkbox、textarea、date、popup、列表、宏等控件
  • 25.专业接口对接机制,统一采用restful接口方式,集成swagger-ui在线接口文档,Jwt token安全验证,方便客户端对接
  • 26.接口安全机制,可细化控制接口授权,非常简便实现不同客户端只看自己数据等控制
  • 27.高级组合查询功能,在线配置支持主子表关联查询,可保存查询历史
  • 28.提供各种系统监控,实时跟踪系统运行情况(监控 Redis、Tomcat、jvm、服务器信息、请求追踪、SQL监控)
  • 29.消息中心(支持短信、邮件、微信推送等等)
  • 30.集成Websocket消息通知机制
  • 31.移动自适应效果优秀,提供APP发布方案:
  • 32.支持多语言,提供国际化方案;
  • 33.数据变更记录日志,可记录数据每次变更内容,通过版本对比功能查看历史变化
  • 34.平台UI强大,实现了移动自适应
  • 35.平台首页风格,提供多种组合模式,支持自定义风格
  • 36.提供简单易用的打印插件,支持谷歌、火狐、IE11+ 等各种浏览器
  • 37.示例代码丰富,提供很多学习案例参考
  • 38.采用maven分模块开发方式
  • 39.支持菜单动态路由
  • 40.权限控制采用 RBAC(Role-Based Access Control,基于角色的访问控制)
  • 41.提供新行编辑表格JVXETable,轻松满足各种复杂ERP布局,拥有更高的性能、更灵活的扩展、更强大的功能

技术架构:

开发环境

  • 语言:Java 8

  • IDE(JAVA): IDEA / Eclipse安装lombok插件

  • IDE(前端): WebStorm 或者 IDEA

  • 依赖管理:Maven

  • 数据库:MySQL5.7+ & Oracle 11g & Sqlserver2017

  • 缓存:Redis

后端

  • 基础框架:Spring Boot 2.3.5.RELEASE

  • 微服务框架: Spring Cloud Alibaba 2.2.3.RELEASE

  • 持久层框架:Mybatis-plus 3.4.1

  • 安全框架:Apache Shiro 1.7.0,Jwt 3.11.0

  • 微服务技术栈:Spring Cloud Alibaba、Nacos、Gateway、Sentinel、Skywarking

  • 数据库连接池:阿里巴巴Druid 1.1.22

  • 缓存框架:redis

  • 日志打印:logback

  • 其他:fastjson,poi,Swagger-ui,quartz, lombok(简化代码)等。

前端

功能模块

├─系统管理
│  ├─用户管理
│  ├─角色管理
│  ├─菜单管理
│  ├─权限设置(支持按钮权限、数据权限)
│  ├─表单权限(控制字段禁用、隐藏)
│  ├─部门管理
│  ├─我的部门(二级管理员)
│  └─字典管理
│  └─分类字典
│  └─系统公告
│  └─职务管理
│  └─通讯录
│  └─多租户管理
├─消息中心
│  ├─消息管理
│  ├─模板管理
├─代码生成器(低代码)
│  ├─代码生成器功能(一键生成前后端代码,生成后无需修改直接用,绝对是后端开发福音)
│  ├─代码生成器模板(提供4套模板,分别支持单表和一对多模型,不同风格选择)
│  ├─代码生成器模板(生成代码,自带excel导入导出)
│  ├─查询过滤器(查询逻辑无需编码,系统根据页面配置自动生成)
│  ├─高级查询器(弹窗自动组合查询条件)
│  ├─Excel导入导出工具集成(支持单表,一对多 导入导出)
│  ├─平台移动自适应支持
├─系统监控
│  ├─Gateway路由网关
│  ├─性能扫描监控
│  │  ├─监控 Redis
│  │  ├─Tomcat
│  │  ├─jvm
│  │  ├─服务器信息
│  │  ├─请求追踪
│  │  ├─磁盘监控
│  ├─定时任务
│  ├─系统日志
│  ├─消息中心(支持短信、邮件、微信推送等等)
│  ├─数据日志(记录数据快照,可对比快照,查看数据变更情况)
│  ├─系统通知
│  ├─SQL监控
│  ├─swagger-ui(在线接口文档)
│─报表示例
│  ├─曲线图
│  └─饼状图
│  └─柱状图
│  └─折线图
│  └─面积图
│  └─雷达图
│  └─仪表图
│  └─进度条
│  └─排名列表
│  └─等等
│─大屏模板
│  ├─作战指挥中心大屏
│  └─物流服务中心大屏
│─常用示例
│  ├─自定义组件
│  ├─对象存储(对接阿里云)
│  ├─JVXETable示例(各种复杂ERP布局示例)
│  ├─单表模型例子
│  └─一对多模型例子
│  └─打印例子
│  └─一对多TAB例子
│  └─内嵌table例子
│  └─常用选择组件
│  └─异步树table
│  └─接口模拟测试
│  └─表格合计示例
│  └─异步树列表示例
│  └─一对多JEditable
│  └─JEditable组件示例
│  └─图片拖拽排序
│  └─图片翻页
│  └─图片预览
│  └─PDF预览
│  └─分屏功能
│─封装通用组件	
│  ├─行编辑表格JEditableTable
│  └─省略显示组件
│  └─时间控件
│  └─高级查询
│  └─用户选择组件
│  └─报表组件封装
│  └─字典组件
│  └─下拉多选组件
│  └─选人组件
│  └─选部门组件
│  └─通过部门选人组件
│  └─封装曲线、柱状图、饼状图、折线图等等报表的组件(经过封装,使用简单)
│  └─在线code编辑器
│  └─上传文件组件
│  └─验证码组件
│  └─树列表组件
│  └─表单禁用组件
│  └─等等
│─更多页面模板
│  ├─各种高级表单
│  ├─各种列表效果
│  └─结果页面
│  └─异常页面
│  └─个人页面
├─高级功能
│  ├─系统编码规则
│  ├─提供单点登录CAS集成方案
│  ├─提供APP发布方案
│  ├─集成Websocket消息通知机制
├─Online在线开发(低代码)
│  ├─Online在线表单 - 功能已开放
│  ├─Online代码生成器 - 功能已开放
│  ├─Online在线报表 - 功能已开放
│  ├─Online在线图表(暂不开源)
│  ├─Online图表模板配置(暂不开源)
│  ├─Online布局设计(暂不开源)
│  ├─多数据源管理 - 功能已开放
├─积木报表设计器(低代码)
│  ├─打印设计器
│  ├─数据报表设计
│  ├─图形报表设计(支持echart)
│  ├─大屏设计器(暂不开源)
│─流程模块功能 (暂不开源)
│  ├─流程设计器
│  ├─在线表单设计
│  └─我的任务
│  └─历史流程
│  └─历史流程
│  └─流程实例管理
│  └─流程监听管理
│  └─流程表达式
│  └─我发起的流程
│  └─我的抄送
│  └─流程委派、抄送、跳转
│  └─。。。
└─其他模块
   └─更多功能开发中。。
   

微服务整体解决方案(2.4+版本)

1、服务注册和发现 Nacos √

2、统一配置中心 Nacos √

3、路由网关 gateway(三种加载方式) √

4、分布式 http feign √

5、熔断和降级 Sentinel √

6、分布式文件 Minio、阿里OSS √

7、统一权限控制 JWT + Shiro √

8、服务监控 SpringBootAdmin√

9、链路跟踪 Skywarking 参考文档

10、消息中间件 RabbitMQ √

11、分布式任务 xxl-job √

12、分布式事务 Seata

13、分布式日志 elk + kafa

14、支持 docker-compose、k8s、jenkins

15、CAS 单点登录 √

16、路由限流 √

微服务架构图

微服务架构图

Jeecg Boot 产品功能蓝图

功能蓝图

后台开发环境和依赖

  • java
  • maven
  • jdk8
  • mysql
  • redis
  • 数据库脚本:jeecg-boot/db/jeecgboot-mysql-5.7.sql
  • 默认登录账号: admin/123456

前端开发环境和依赖

项目下载和运行

  • 拉取项目代码
git clone https://github.com/zhangdaiscott/jeecg-boot.git
cd  jeecg-boot/ant-design-jeecg-vue
  1. 安装node.js
  2. 切换到ant-design-jeecg-vue文件夹下
# 安装yarn
npm install -g yarn

# 下载依赖
yarn install

# 启动
yarn run serve

# 编译项目
yarn run build

# Lints and fixes files
yarn run lint

系统效果

大屏模板

输入图片说明

输入图片说明

PC端

输入图片说明 输入图片说明 输入图片说明 输入图片说明 输入图片说明

在线接口文档

输入图片说明 输入图片说明

报表

输入图片说明 输入图片说明 输入图片说明 输入图片说明 输入图片说明

流程

输入图片说明 输入图片说明 输入图片说明 输入图片说明

手机端

PAD端

其他说明

  • 项目使用的 vue-cli3, 请更新您的 cli

  • 关闭 Eslint (不推荐) 移除 package.jsoneslintConfig 整个节点代码

  • 修改 Ant Design 配色,在文件 vue.config.js 中,其他 less 变量覆盖参考 ant design 官方说明

  css: {
    loaderOptions: {
      less: {
        modifyVars: {
          /* less 变量覆盖,用于自定义 ant design 主题 */

          'primary-color': '#F5222D',
          'link-color': '#F5222D',
          'border-radius-base': '4px',
        },
        javascriptEnabled: true,
      }
    }
  }

附属文档

备注

@vue/cli 升级后,eslint 规则更新了。由于影响到全部 .vue 文件,需要逐个验证。既暂时关闭部分原本不验证的规则,后期维护时,在逐步修正这些 rules

捐赠

如果觉得还不错,请作者喝杯咖啡吧

Comments
  • 建议加入saas多租户模式

    建议加入saas多租户模式

    使用mybatis plus多租户 SQL 解析器, 在MybatisPlusConfig中

    //需要注入的字段 private static final String SYSTEM_TENANT_ID = "within_code";

    //忽略不需要注入的表
    private static final List<String> IGNORE_TENANT_TABLES = Lists.newArrayList("provider");
    

    分页插件方法里面加入

    // SQL解析处理拦截:增加租户处理回调。 TenantSqlParser tenantSqlParser = new TenantSqlParser() .setTenantHandler(new TenantHandler() {

                    @Override
                    public Expression getTenantId() {
                        // 从当前系统上下文中取出当前请求的内码,通过解析器注入到SQL中。
                        Long currentWithinCode = apiContext.getCurrentProviderId();
                        if (null == currentWithinCode) {
                            throw new RuntimeException("从当前系统上下文中取出当前请求的内码为空。");
                        }
                        return new LongValue(currentWithinCode);
                    }
    
                    @Override
                    public String getTenantIdColumn() {
                        return SYSTEM_TENANT_ID;
                    }
    
                    @Override
                    public boolean doTableFilter(String tableName) {
                        // 忽略掉一些表:如租户表(provider)本身不需要执行这样的处理。
                        return IGNORE_TENANT_TABLES.stream().anyMatch((e) -> e.equalsIgnoreCase(tableName));
                    }
                });
        paginationInterceptor.setSqlParserList(Lists.newArrayList(tenantSqlParser));
    
    opened by wjxjasin 42
  • 感觉目前项目提供的能力比较弱,我希望有的功能

    感觉目前项目提供的能力比较弱,我希望有的功能

    1、统一单点登录平台、提供oauth接口,必须可以集群部署、session分布式存储、提供管理界面可以管理客户端,支持不同的业务子系统登录主题定制 2、cms内容管理系统,支持多站点、集群部署、支持全站静态化、能够前后端分离最好、支持自定义栏目、自定义模型模板、支持插件式开发 3、支持统一管理多个子系统的菜单权限 4、监控系统:数据库监控、机器监控、应用监控、流量监控、调用链监控、redis监控、druid监控 5、独立的消息系统,客户端支持同步、异步发送消息到消息系统,邮件、短信、微信等等、提供管理界面,查看发送记录、发送状态、调用量监控、队列堆积,需要保证mq的可靠消息必达,发送失败重试3次,3次仍然失败通知调用端发送失败,支持流量控制(限制客户端发送速度) 6、统一的日志平台、多个系统统一发送日志给日志平台,日志平台可以搜索日志、查看、过滤日志,业务子系统支持动态修改日志级别 7、提供统一的存储系统接口,支持fastdfs、ftp、local file、阿里云oss 、七牛云等云存储平台

    opened by calebzhao 41
  • jeecg-boot 243 online同步数据库报错

    jeecg-boot 243 online同步数据库报错

    版本号:

    2.4.3

    问题描述:

    安装开源jeecg-boot 2.4.3 本地使用,online在线表单保存后不能同步到数据库

    截图&代码:

    image image

    报错信息
    
    2021-04-08 16:32:05.721 [http-nio-8080-exec-9] INFO  org.jeecg.modules.online.cgform.service.impl.e:303 - ==判断表是否存在消耗时间16毫秒
    2021-04-08 16:32:05.738 [http-nio-8080-exec-9] INFO  org.jeecg.modules.online.config.b.c:74 - <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    	<class name="test_kk" table="test_kk" optimistic-lock="version">
    						<id name="id" type="java.lang.String" length="36" unsaved-value="null">
    							<generator class="uuid" />
    						</id>
    					
    					<property name="create_by"
    								type="java.lang.String"
     access="property">
    						<column name="create_by" 
    							                               
    length="50"
    							
    							not-null="false" unique="false">
    							<comment>创建人</comment>
    						</column>
    					</property>
    					<property name="create_time"
    									type="java.util.Date"
     access="property">
    						<column name="create_time" 
    							                               
    length="20"
    							
    							not-null="false" unique="false">
    							<comment>创建日期</comment>
    						</column>
    					</property>
    					<property name="update_by"
    								type="java.lang.String"
     access="property">
    						<column name="update_by" 
    							                               
    length="50"
    							
    							not-null="false" unique="false">
    							<comment>更新人</comment>
    						</column>
    					</property>
    					<property name="update_time"
    									type="java.util.Date"
     access="property">
    						<column name="update_time" 
    							                               
    length="20"
    							
    							not-null="false" unique="false">
    							<comment>更新日期</comment>
    						</column>
    					</property>
    					<property name="sys_org_code"
    								type="java.lang.String"
     access="property">
    						<column name="sys_org_code" 
    							                               
    length="64"
    							
    							not-null="false" unique="false">
    							<comment>所属部门</comment>
    						</column>
    					</property>
    					<property name="name"
    								type="java.lang.String"
     access="property">
    						<column name="name" 
    							                               
    length="32"
    							
    							not-null="false" unique="false">
    							<comment>名字</comment>
    						</column>
    					</property>
    	</class>
    
    
    
    
    
    
    </hibernate-mapping>
    2021-04-08 16:32:05.765 [http-nio-8080-exec-9] ERROR org.jeecg.modules.online.cgform.b.a:485 - null
    java.lang.NullPointerException: null
    	at java.util.Hashtable.put(Hashtable.java:459)
    	at java.util.Hashtable.putAll(Hashtable.java:523)
    	at org.hibernate.boot.registry.StandardServiceRegistryBuilder.applySettings(StandardServiceRegistryBuilder.java:276)
    	at org.jeecg.modules.online.config.b.c.a(DbTableProcess.java:111)
    	at org.jeecg.modules.online.cgform.service.impl.e.doDbSynch(OnlCgformHeadServiceImpl.java:347)
    	at org.jeecg.modules.online.cgform.service.impl.e$$FastClassBySpringCGLIB$$1.invoke(<generated>)
    	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:687)
    	at org.jeecg.modules.online.cgform.service.impl.e$$EnhancerBySpringCGLIB$$1.doDbSynch(<generated>)
    	at org.jeecg.modules.online.cgform.b.a.h(OnlCgformApiController.java:482)
    	at org.jeecg.modules.online.cgform.b.a$$FastClassBySpringCGLIB$$1.invoke(<generated>)
    	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
    	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
    	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)
    	at org.jeecg.modules.online.cgform.b.a$$EnhancerBySpringCGLIB$$1.h(<generated>)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
    	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
    	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
    	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
    	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
    	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
    	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
    	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
    	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
    	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
    	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
    	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
    	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
    	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
    	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
    	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
    	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
    	at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:450)
    	at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
    	at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
    	at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
    	at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)
    	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
    	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:92)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at com.github.xiaoymin.knife4j.spring.filter.ProductionSecurityFilter.doFilter(ProductionSecurityFilter.java:53)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at com.github.xiaoymin.knife4j.spring.filter.SecurityBasicAuthFilter.doFilter(SecurityBasicAuthFilter.java:90)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:88)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    	at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
    	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
    	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
    	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Thread.java:745)
    2021-04-08 16:32:05.781 [http-nio-8080-exec-9] ERROR o.jeecg.common.exception.JeecgBootExceptionHandler:57 - null
    java.lang.NullPointerException: null
    	at org.jeecg.modules.online.cgform.util.b.a(CgformUtil.java:2278)
    	at org.jeecg.modules.online.cgform.b.a.h(OnlCgformApiController.java:486)
    	at org.jeecg.modules.online.cgform.b.a$$FastClassBySpringCGLIB$$1.invoke(<generated>)
    	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
    	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
    	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)
    	at org.jeecg.modules.online.cgform.b.a$$EnhancerBySpringCGLIB$$1.h(<generated>)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
    	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
    	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
    	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
    	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
    	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
    	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
    	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
    	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
    	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
    	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
    	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
    	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
    	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
    	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
    	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
    	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
    	at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:450)
    	at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
    	at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
    	at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
    	at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)
    	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
    	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:92)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at com.github.xiaoymin.knife4j.spring.filter.ProductionSecurityFilter.doFilter(ProductionSecurityFilter.java:53)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at com.github.xiaoymin.knife4j.spring.filter.SecurityBasicAuthFilter.doFilter(SecurityBasicAuthFilter.java:90)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:88)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    	at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
    	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
    	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
    	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Thread.java:745)
    
    
    

    友情提示: 未按格式要求发帖,会直接删掉。

    opened by wan84 32
  • JeecgBoot 吐槽大会

    JeecgBoot 吐槽大会

    JeecgBoot 吐槽大会

    不吐不快,请大家尽情吐槽!!! 我们会虚心学习,思考你的意见,改进项目 让其更加优秀,让你用起来更加的舒心。。。

    吐槽点

    • JeecgBoot 存在的bug、缺陷、不好用的地方
    • JeecgBoot 存在功能比较弱的地方、功能不够完善不够强大,需要改进优化的地方
    • JeecgBoot 没有的功能(你觉得你需要的功能)、或者你有更好的想法
    • JeecgBoot 缺少文档、视频或者那些地方资料过少

    吐槽方法

    • 在此issue回复帖子即可
    • 给项目点赞,点击右上方的Star
    opened by zhangdaiscott 25
  • 单体升级微服务,启动nacos报错

    单体升级微服务,启动nacos报错

    版本号:3.4.3
    前端版本:vue3版
    问题描述:单体升级微服务,前面都是按照文档操作,启动nacos报错
    截图&代码:

    2022-11-01 00:22:23.822 ERROR 159676 --- [ main] c.a.n.c.l.StartingApplicationListener : Startup errors :

    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'clusterController' defined in URL [jar:file:/C:/Users/lishixun/.m2/repository/org/jeecgframework/nacos/nacos-naming/2.0.4/nacos-naming-2.0.4.jar!/com/alibaba/nacos/naming/controllers/ClusterController.class]: Unsatisfied dependency expressed through constructor parameter 2; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'clusterOperatorV2Impl' defined in URL [jar:file:/C:/Users/lishixun/.m2/repository/org/jeecgframework/nacos/nacos-naming/2.0.4/nacos-naming-2.0.4.jar!/com/alibaba/nacos/naming/core/ClusterOperatorV2Impl.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'namingMetadataOperateService' defined in URL [jar:file:/C:/Users/lishixun/.m2/repository/org/jeecgframework/nacos/nacos-naming/2.0.4/nacos-naming-2.0.4.jar!/com/alibaba/nacos/naming/core/v2/metadata/NamingMetadataOperateService.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.naming.core.v2.metadata.NamingMetadataOperateService]: Constructor threw exception; nested exception is com.alibaba.nacos.core.distributed.raft.exception.JRaftException: java.io.IOException: Failed to bind at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:797) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:227) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1356) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1203) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)

    友情提示(为了提高issue处理效率):

    • 未按格式要求发帖,会被直接删掉;
    • 描述过于简单或模糊,导致无法处理的,会被直接删掉;
    • 请自己初判问题描述是否清楚,是否方便我们调查处理;
    • 针对问题请说明是Online在线功能(需说明用的主题模板),还是生成的代码功能;
    opened by 378680487 23
  • 动态路由的带参

    动态路由的带参

    版本号:

    version:2.1.0(发布日期:20190826)

    问题描述:

    在菜单管理中如技术文档里边所说,填写 /UserInfo/:id , 并在页面中使用 <router-link :to="{name:'UserInfo', params: {id:id}}">查看</router-link>
    点击按钮跳转会到 / ,并不会跳转到 /UserInfo/123456 ,提示 [vue-router] Route with name 'UserInfo' does not exist 。 使用 <router-link :to="'UserInfo/'+id" />查看</router-link> 就可以。 在Vue DevTools中检查发现,UserInfo 对应的是 Name 是 UserInfo-@id

    截图&代码:

    2 使用 <router-link :to="{name:'UserInfo', params: {id:id}}">查看</router-link>
    3 使用 <router-link :to="'UserInfo/'+id" />查看</router-link> 4

    vue@^2.6.10 @vue/cli@^3.8.0 vue-router@^3.0.1

    2019年10月25日更新,

    使用 :to="'UserInfo/'+id" 点击多个查看用户后,会创建多个用户资料标签,并且没有激活的方法,来重新获取用户 ID。

    👉 修改 : 菜单管理中,最后不添加 /:id , 使用 :to="{name:'UserInfo', params: {id:id}}" 直接传参开的标签可以获得 ID,之后也不会再创建一个新标签。

    opened by yogwang 19
  • Online表单开发,点保存无响应

    Online表单开发,点保存无响应

    版本号:

    3.2.0

    前端版本:vue3版?还是 vue2版?

    vue2

    问题描述:

    在online表单开发时,选择表,点击编辑,再点击保存时,没响应,但是新增并同步数据都没问题。

    截图&代码:

    2 3

    友情提示(为了提高issue处理效率):

    • 未按格式要求发帖,会被直接删掉;
    • 描述过于简单或模糊,导致无法处理的,会被直接删掉;
    • 请自己初判问题描述是否清楚,是否方便我们调查处理;
    • 针对问题请说明是Online在线功能(需说明用的主题模板),还是生成的代码功能;
    opened by XiaoBiaoYin 17
  • 代码生成器JeecgOneGUI有bug

    代码生成器JeecgOneGUI有bug

    版本号:

    3.4.1

    前端版本:

    3.4.0 vue3版

    vue3版?还是vue2版?请说明清楚

    问题描述:

    使用JeecgOneGUI逆向生成代码,报错,生成失败。

    我把配置改为和这个差不多,还是提示成功,没生成代码。 https://github.com/jeecgboot/jeecg-boot/blob/master/jeecg-module-system/jeecg-system-start/src/main/resources/jeecg/jeecg_config.properties

    截图&代码:

    其中这个jar包是存在的:/Users/lxh/.m2/repository/org/jeecgframework/boot/jeecg-system-biz/3.4.0/jeecg-system-biz-3.4.0.jar

    23:48:13.426 [AWT-EventQueue-0] ERROR org.jeecgframework.codegenerate.generate.impl.a.a - java.io.FileNotFoundException: file:/Users/lxh/.m2/repository/org/jeecgframework/boot/jeecg-system-biz/3.4.0/jeecg-system-biz-3.4.0.jar!/jeecg/code-template/one does not exist.
    java.io.FileNotFoundException: file:/Users/lxh/.m2/repository/org/jeecgframework/boot/jeecg-system-biz/3.4.0/jeecg-system-biz-3.4.0.jar!/jeecg/code-template/one does not exist.
    	at freemarker.cache.FileTemplateLoader$1.run(FileTemplateLoader.java:123)
    	at freemarker.cache.FileTemplateLoader$1.run(FileTemplateLoader.java:119)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at freemarker.cache.FileTemplateLoader.<init>(FileTemplateLoader.java:119)
    	at freemarker.cache.FileTemplateLoader.<init>(FileTemplateLoader.java:98)
    	at org.jeecgframework.codegenerate.generate.util.b.a(FreemarkerHelper.java:34)
    	at org.jeecgframework.codegenerate.generate.impl.a.a.a(BaseCodeGenerate.java:225)
    	at org.jeecgframework.codegenerate.generate.impl.a.a.a(BaseCodeGenerate.java:77)
    	at org.jeecgframework.codegenerate.generate.impl.a.a.a(BaseCodeGenerate.java:61)
    	at org.jeecgframework.codegenerate.generate.impl.a.a.a(BaseCodeGenerate.java:47)
    	at org.jeecgframework.codegenerate.generate.impl.CodeGenerateOne.generateCodeFile(CodeGenerateOne.java:139)
    	at org.jeecgframework.codegenerate.window.CodeWindow$1.actionPerformed(CodeWindow.java:189)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    	at java.awt.Component.processMouseEvent(Component.java:6533)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    	at java.awt.Component.processEvent(Component.java:6298)
    	at java.awt.Container.processEvent(Container.java:2236)
    	at java.awt.Component.dispatchEventImpl(Component.java:4889)
    	at java.awt.Container.dispatchEventImpl(Container.java:2294)
    	at java.awt.Component.dispatchEvent(Component.java:4711)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    	at java.awt.Container.dispatchEventImpl(Container.java:2280)
    	at java.awt.Window.dispatchEventImpl(Window.java:2746)
    	at java.awt.Component.dispatchEvent(Component.java:4711)
    	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    	at java.awt.EventQueue.access$500(EventQueue.java:97)
    	at java.awt.EventQueue$3.run(EventQueue.java:709)
    	at java.awt.EventQueue$3.run(EventQueue.java:703)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
    	at java.awt.EventQueue$4.run(EventQueue.java:731)
    	at java.awt.EventQueue$4.run(EventQueue.java:729)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
    23:48:13.426 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.a.a - -------classpath-------file:/Users/lxh/.m2/repository/org/jeecgframework/boot/jeecg-system-biz/3.4.0/jeecg-system-biz-3.4.0.jar!/jeecg/code-template/one
    23:48:13.426 [AWT-EventQueue-0] INFO org.jeecgframework.codegenerate.generate.impl.CodeGenerateOne -  ----- jeecg-boot ---- generate  code  success =======> 表名:
    

    templatepath=/时,报错string index out of range image

    #code_generate_project_path
    project_path=/Users/lxh/Desktop
    
    #bussi_package[User defined]
    bussi_package=org.jeecg.modules.a
    #default code path
    #source_root_package=src
    #webroot_package=WebRoot
    #maven code path
    source_root_package=src.main.java
    webroot_package=src.main.webapp
    #ftl resource url
    templatepath=/
    system_encoding=utf-8
    #db Table id [User defined]
    db_table_id=id
    #db convert flag[true/false]
    db_filed_convert=true
    #page Search Field num [User defined]
    page_search_filed_num=1
    #page_filter_fields
    page_filter_fields=create_time,create_by,update_time,update_by
    exclude_table=act_,ext_act_,design_,onl_,sys_,qrtz_
    

    templatepath=/jeecg时,提示成功,/Users/lxh/Desktop目录下却啥也没生成。建议在控制台打出生成code的具体位置

    AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.database.DbReadTableUtil - 读取表成功
    11:37:10.066 [AWT-EventQueue-0] INFO org.jeecgframework.codegenerate.database.DbReadTableUtil -  connect databaseName : jeecg-boot
    11:37:10.102 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.database.DbReadTableUtil - columnt.getFieldName() -------------updateTime
    11:37:10.103 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.database.DbReadTableUtil - 读取表成功
    11:37:10.148 [AWT-EventQueue-0] INFO org.jeecgframework.codegenerate.generate.impl.CodeGenerateOne - load template data: {primaryKeyPolicy=java.lang.String, serialVersionUID=2113997999283996242, entityPackage=ums, entityName=UmsSysIp, primaryKeyField=id, columns=[{"fieldDbName":"BUSINESS_ID","fieldName":"businessId","filedComment":"业务id","fieldType":"varchar","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"*","charmaxLength":"32","precision":"null","scale":"null","nullable":"N","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"MD5","fieldName":"md5","filedComment":"md5(ip+model+system+platform)","fieldType":"varchar","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"32","precision":"null","scale":"null","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"DEVICE_ID","fieldName":"deviceId","filedComment":"设备id","fieldType":"varchar","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"32","precision":"null","scale":"null","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"VISIT_COUNT","fieldName":"visitCount","filedComment":"访问次数","fieldType":"int","fieldDbType":"int","classType":"inputxt","classType_row":"","optionType":"n","charmaxLength":"null","precision":"10","scale":"0","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"TYPE","fieldName":"type","filedComment":"ip类型:1-am,2-idea","fieldType":"tinyint","fieldDbType":"tinyint","classType":"inputxt","classType_row":"","optionType":"n","charmaxLength":"null","precision":"3","scale":"0","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"IP","fieldName":"ip","filedComment":"用户ip","fieldType":"varchar","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"64","precision":"null","scale":"null","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"COUNTRY","fieldName":"country","filedComment":"ip对应的国家","fieldType":"varchar","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"32","precision":"null","scale":"null","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"BROWSER","fieldName":"browser","filedComment":"用户使用的浏览器","fieldType":"varchar","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"16","precision":"null","scale":"null","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"PROVINCE","fieldName":"province","filedComment":"ip对应的省份","fieldType":"varchar","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"32","precision":"null","scale":"null","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"CITY","fieldName":"city","filedComment":"ip对应的城市","fieldType":"varchar","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"32","precision":"null","scale":"null","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"COUNTY","fieldName":"county","filedComment":"ip对应的县城","fieldType":"varchar","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"32","precision":"null","scale":"null","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"OPERATOR","fieldName":"operator","filedComment":"ip对应的运营商","fieldType":"varchar","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"8","precision":"null","scale":"null","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"ZIPCODE","fieldName":"zipcode","filedComment":"ip对应的邮编","fieldType":"varchar","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"8","precision":"null","scale":"null","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"AREACODE","fieldName":"areacode","filedComment":"ip对应的区号","fieldType":"varchar","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"8","precision":"null","scale":"null","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"MODEL","fieldName":"model","filedComment":"设备型号(PC、MOBILE)","fieldType":"varchar","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"16","precision":"null","scale":"null","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"SYSTEM","fieldName":"system","filedComment":"操作系统名称及版本(如Android 10、Mac 10.15.7、window10等)","fieldType":"varchar","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"16","precision":"null","scale":"null","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"PLATFORM","fieldName":"platform","filedComment":"客户端平台,值域为:ios、android、mac(3.1.10+)、windows(3.1.10+)、linux(3.1.10+)","fieldType":"varchar","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"32","precision":"null","scale":"null","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}], tableVo={"tableName":"ums_sys_ip","ftlDescription":"ip和设备系统信息","primaryKeyPolicy":"uuid","sequenceCode":"","entityPackage":"ums","entityName":"UmsSysIp","fieldRowNum":"1","searchFieldNum":"1","fieldRequiredNum":"4"}, originalColumns=[{"fieldDbName":"ID","fieldName":"id","filedComment":"主键id","fieldType":"java.lang.String","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"*","charmaxLength":"32","precision":"","scale":"","nullable":"N","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"BUSINESS_ID","fieldName":"businessId","filedComment":"业务id","fieldType":"java.lang.String","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"*","charmaxLength":"32","precision":"","scale":"","nullable":"N","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"MD5","fieldName":"md5","filedComment":"md5(ip+model+system+platform)","fieldType":"java.lang.String","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"32","precision":"","scale":"","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"DEVICE_ID","fieldName":"deviceId","filedComment":"设备id","fieldType":"java.lang.String","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"32","precision":"","scale":"","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"VISIT_COUNT","fieldName":"visitCount","filedComment":"访问次数","fieldType":"java.lang.Integer","fieldDbType":"int","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"","precision":"10","scale":"0","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"TYPE","fieldName":"type","filedComment":"ip类型:1-am,2-idea","fieldType":"java.lang.Integer","fieldDbType":"tinyint","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"","precision":"3","scale":"0","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"IP","fieldName":"ip","filedComment":"用户ip","fieldType":"java.lang.String","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"64","precision":"","scale":"","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"COUNTRY","fieldName":"country","filedComment":"ip对应的国家","fieldType":"java.lang.String","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"32","precision":"","scale":"","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"BROWSER","fieldName":"browser","filedComment":"用户使用的浏览器","fieldType":"java.lang.String","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"16","precision":"","scale":"","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"PROVINCE","fieldName":"province","filedComment":"ip对应的省份","fieldType":"java.lang.String","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"32","precision":"","scale":"","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"CITY","fieldName":"city","filedComment":"ip对应的城市","fieldType":"java.lang.String","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"32","precision":"","scale":"","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"COUNTY","fieldName":"county","filedComment":"ip对应的县城","fieldType":"java.lang.String","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"32","precision":"","scale":"","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"OPERATOR","fieldName":"operator","filedComment":"ip对应的运营商","fieldType":"java.lang.String","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"8","precision":"","scale":"","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"ZIPCODE","fieldName":"zipcode","filedComment":"ip对应的邮编","fieldType":"java.lang.String","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"8","precision":"","scale":"","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"AREACODE","fieldName":"areacode","filedComment":"ip对应的区号","fieldType":"java.lang.String","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"8","precision":"","scale":"","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"MODEL","fieldName":"model","filedComment":"设备型号(PC、MOBILE)","fieldType":"java.lang.String","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"16","precision":"","scale":"","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"SYSTEM","fieldName":"system","filedComment":"操作系统名称及版本(如Android 10、Mac 10.15.7、window10等)","fieldType":"java.lang.String","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"16","precision":"","scale":"","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"PLATFORM","fieldName":"platform","filedComment":"客户端平台,值域为:ios、android、mac(3.1.10+)、windows(3.1.10+)、linux(3.1.10+)","fieldType":"java.lang.String","fieldDbType":"varchar","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"32","precision":"","scale":"","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"CREATE_TIME","fieldName":"createTime","filedComment":"createTime","fieldType":"java.util.Date","fieldDbType":"datetime","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"","precision":"","scale":"","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}, {"fieldDbName":"UPDATE_TIME","fieldName":"updateTime","filedComment":"updateTime","fieldType":"java.util.Date","fieldDbType":"datetime","classType":"inputxt","classType_row":"","optionType":"","charmaxLength":"","precision":"","scale":"","nullable":"Y","fieldLength":"null","fieldHref":"null","fieldValidType":"null","fieldDefault":"null","fieldShowType":"null","fieldOrderNum":"null","isKey":"null","isShow":"null","isShowList":"null","isQuery":"null","uploadnum":"null","defaultVal":"null","sort":"N","readonly":"N","queryMode":"null","dictField":"null","dictTable":"null","dictText":"null"}], bussiPackage=org.jeecg.modules.a, tableName=ums_sys_ip}
    11:37:10.149 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.a.a - ----templatePath-----------------/jeecg
    11:37:10.149 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.a.a - ----stylePath-----------------null
    11:37:10.149 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.impl.a.a - --------generate----projectPath--------/Users/lxh/Desktop
    11:37:10.149 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.a.a - -------classpath-------/Users/lxh/Desktop/coding/jeecg-boot/jeecg-module-system/jeecg-system-start/target/classes/jeecg
    11:37:10.149 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.a.a - -------classpath-------/Users/lxh/Desktop/coding/jeecg-boot/jeecg-module-system/jeecg-system-start/target/classes/jeecg
    11:37:10.149 [AWT-EventQueue-0] INFO org.jeecgframework.codegenerate.generate.impl.a.a -   load template from templateRootDir = '/Users/lxh/Desktop/coding/jeecg-boot/jeecg-module-system/jeecg-system-start/target/classes/jeecg',stylePath ='null',  out GenerateRootDir:/Users/lxh/Desktop
    11:37:10.149 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.util.a - ---------dir------------path: /Users/lxh/Desktop/coding/jeecg-boot/jeecg-module-system/jeecg-system-start/target/classes/jeecg -- isHidden --: false -- isDirectory --: true
    11:37:10.149 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.util.a - ---------dir------------path: /Users/lxh/Desktop/coding/jeecg-boot/jeecg-module-system/jeecg-system-start/target/classes/jeecg/jeecg_config.properties -- isHidden --: false -- isDirectory --: false
    11:37:10.149 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.util.a - ---------dir------------path: /Users/lxh/Desktop/coding/jeecg-boot/jeecg-module-system/jeecg-system-start/target/classes/jeecg/jeecg_database.properties -- isHidden --: false -- isDirectory --: false
    11:37:10.149 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.impl.a.a - ----srcFiles----size-----------2
    11:37:10.149 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.impl.a.a - ----srcFiles----list------------[/Users/lxh/Desktop/coding/jeecg-boot/jeecg-module-system/jeecg-system-start/target/classes/jeecg/jeecg_config.properties, /Users/lxh/Desktop/coding/jeecg-boot/jeecg-module-system/jeecg-system-start/target/classes/jeecg/jeecg_database.properties]
    11:37:10.149 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.impl.a.a - -------templateRootDir--/Users/lxh/Desktop/coding/jeecg-boot/jeecg-module-system/jeecg-system-start/target/classes/jeecg
    11:37:10.149 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.impl.a.a - -------srcFile--/Users/lxh/Desktop/coding/jeecg-boot/jeecg-module-system/jeecg-system-start/target/classes/jeecg/jeecg_config.properties
    11:37:10.149 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.impl.a.a - -------templateFile--jeecg_config.properties
    11:37:10.149 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.a.a - -------classpath-------/Users/lxh/Desktop/coding/jeecg-boot/jeecg-module-system/jeecg-system-start/target/classes/jeecg
    11:37:10.149 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.util.b -  FileTemplateLoader[] size 1
    11:37:10.149 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.util.b -  templateRootDirs templateName /
    11:37:10.149 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.util.b -  FileTemplateLoader /Users/lxh/Desktop/coding/jeecg-boot/jeecg-module-system/jeecg-system-start/target/classes/jeecg
    11:37:10.150 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.impl.a.a - -------outputFilepath--jeecg_config.properties
    11:37:10.150 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.impl.a.a - -------templateRootDir--/Users/lxh/Desktop/coding/jeecg-boot/jeecg-module-system/jeecg-system-start/target/classes/jeecg
    11:37:10.150 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.impl.a.a - -------srcFile--/Users/lxh/Desktop/coding/jeecg-boot/jeecg-module-system/jeecg-system-start/target/classes/jeecg/jeecg_database.properties
    11:37:10.150 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.impl.a.a - -------templateFile--jeecg_database.properties
    11:37:10.150 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.a.a - -------classpath-------/Users/lxh/Desktop/coding/jeecg-boot/jeecg-module-system/jeecg-system-start/target/classes/jeecg
    11:37:10.150 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.util.b -  FileTemplateLoader[] size 1
    11:37:10.150 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.util.b -  templateRootDirs templateName /
    11:37:10.150 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.util.b -  FileTemplateLoader /Users/lxh/Desktop/coding/jeecg-boot/jeecg-module-system/jeecg-system-start/target/classes/jeecg
    11:37:10.150 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.impl.a.a - -------outputFilepath--jeecg_database.properties
    11:37:10.150 [AWT-EventQueue-0] DEBUG org.jeecgframework.codegenerate.generate.a.a - -------classpath-------/Users/lxh/Desktop/coding/jeecg-boot/jeecg-module-system/jeecg-system-start/target/classes/jeecg
    11:37:10.150 [AWT-EventQueue-0] INFO org.jeecgframework.codegenerate.generate.impl.CodeGenerateOne -  ----- jeecg-boot ---- generate  code  success =======> 表名:ums_sys_ip 
    
    

    友情提示(为了提高issue处理效率):

    • 未按格式要求发帖,会被直接删掉;
    • 描述过于简单或模糊,导致无法处理的,会被直接删掉;
    • 请自己初判问题描述是否清楚,是否方便我们调查处理;
    • 针对问题请说明是Online在线功能(需说明用的主题模板),还是生成的代码功能;
    opened by hdtopku 16
  • 导出图片到Excel,按照官方文档,导出报错

    导出图片到Excel,按照官方文档,导出报错

    版本号:

    2.2.1

    问题描述:

    导出图片到excel,按照官方文档设置后,导出报空指针异常,原因是imgbasepath 一直是空

    截图&代码:

    package org.jeecg.modules.waste.sign.entity;

    import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.util.Date; import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.format.annotation.DateTimeFormat; import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecg.common.aspect.annotation.Dict; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors;

    /**

    • @Description: 签到记录表

    • @Author: jeecg-boot

    • @Date: 2020-09-09

    • @Version: V1.0 */ @Data @TableName("sign_record") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) @ApiModel(value="sign_record对象", description="签到记录表") public class SignRecord implements Serializable { private static final long serialVersionUID = 1L;

      /*主键/ @TableId(type = IdType.ASSIGN_ID) @ApiModelProperty(value = "主键") private java.lang.String id; /*创建人/ @ApiModelProperty(value = "创建人") private java.lang.String createBy; /*创建日期/ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "创建日期") private java.util.Date createTime; /*更新人/ @ApiModelProperty(value = "更新人") private java.lang.String updateBy; /*更新日期/ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "更新日期") private java.util.Date updateTime; /*所属部门/ @ApiModelProperty(value = "所属部门") private java.lang.String sysOrgCode; /*公司名称/ @Excel(name = "公司名称", width = 15) @ApiModelProperty(value = "公司名称") private java.lang.String company; /*承诺人/ // @Excel(name = "承诺人", width = 15) @ApiModelProperty(value = "承诺人") private java.lang.String signUser; /*承诺人签名/ @Excel(name = "承诺人签名", width = 15,type = 2) @ApiModelProperty(value = "承诺人签名") private java.lang.String signPic; /*身份证正面/ @Excel(name = "身份证正面", width = 15) @ApiModelProperty(value = "身份证正面") private java.lang.String signPic1; /*身份证反面/ @Excel(name = "身份证反面", width = 15) @ApiModelProperty(value = "身份证反面") private java.lang.String signPic2; /*联系电话/ @Excel(name = "联系电话", width = 15) @ApiModelProperty(value = "联系电话") private java.lang.String signPhone; /*身份证号/ @Excel(name = "身份证号", width = 15) @ApiModelProperty(value = "身份证号") private java.lang.String signCard; /*模板/ @Excel(name = "模板", width = 15) @ApiModelProperty(value = "模板") private java.lang.String formId; }

    2020-09-27 20:02:33.459 [http-nio-8088-exec-4] ERROR o.j.poi.excel.export.ExcelExportServer:193 - null java.lang.NullPointerException: null at org.jeecgframework.poi.excel.export.base.ExcelExportBase.createImageCell(ExcelExportBase.java:207) at org.jeecgframework.poi.excel.export.base.ExcelExportBase.createCells(ExcelExportBase.java:120) at org.jeecgframework.poi.excel.export.ExcelExportServer.createSheet(ExcelExportServer.java:168) at org.jeecgframework.poi.excel.ExcelExportUtil.exportExcel(ExcelExportUtil.java:67) at org.jeecgframework.poi.excel.view.JeecgEntityExcelView.renderMergedOutputModel(JeecgEntityExcelView.java:69) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1370) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1116) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897) at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.github.xiaoymin.swaggerbootstrapui.filter.SecurityBasicAuthFilter.doFilter(SecurityBasicAuthFilter.java:84) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.github.xiaoymin.swaggerbootstrapui.filter.ProductionSecurityFilter.doFilter(ProductionSecurityFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387) at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:117) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:106) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) 2020-09-27 20:02:33.488 [http-nio-8088-exec-4] ERROR o.a.c.c.C.[.[.[/jeecg-boot].[dispatcherServlet]:175 - Servlet.service() for servlet [dispatcherServlet] in context with path [/jeecg-boot] threw exception [Request processing failed; nested exception is org.jeecgframework.poi.exception.excel.ExcelExportException: Excel导出错误] with root cause org.jeecgframework.poi.exception.excel.ExcelExportException: Excel导出错误 image image

    友情提示: 未按格式要求发帖,会直接删掉。

    opened by Domain711 16
  • autopoi版本1.3与2.0.1导出问题

    autopoi版本1.3与2.0.1导出问题

    版本号:

    Jeecg Boot Version: 2.1.1 Spring Boot Version: 2.1.3.RELEASE (v2.1.3.RELEASE) autopoi:1.3 OR 2.0.1

    问题描述:

    同一份查询数据在导出的时候报null异常 在1.2.2版本没有问题 先前也一直怀疑是自己的查询数据有问题,但是经过求证后1.2.2是可用的

    截图&代码:

    2021-06-19 21:45:05.242 [http-nio-9999-exec-1] ERROR o.j.poi.excel.export.ExcelExportServer:203 - null java.lang.reflect.InvocationTargetException: null at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.jeecgframework.poi.excel.export.ExcelExportServer.createSheet(ExcelExportServer.java:135) at org.jeecgframework.poi.excel.ExcelExportUtil.exportExcel(ExcelExportUtil.java:67) at org.jeecgframework.poi.excel.view.JeecgEntityExcelView.renderMergedOutputModel(JeecgEntityExcelView.java:69) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1370) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1116) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897) at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.github.xiaoymin.swaggerbootstrapui.filter.SecurityBasicAuthFilter.doFilter(SecurityBasicAuthFilter.java:84) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.github.xiaoymin.swaggerbootstrapui.filter.ProductionSecurityFilter.doFilter(ProductionSecurityFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387) at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:117) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:106) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.CellStyle.setAlignment(Lorg/apache/poi/ss/usermodel/HorizontalAlignment;)V at org.jeecgframework.poi.excel.export.styler.ExcelExportStylerDefaultImpl.stringNoneStyle(ExcelExportStylerDefaultImpl.java:67) at org.jeecgframework.poi.excel.export.styler.AbstractExcelExportStyler.createStyles(AbstractExcelExportStyler.java:42) at org.jeecgframework.poi.excel.export.styler.ExcelExportStylerDefaultImpl.(ExcelExportStylerDefaultImpl.java:29) ... 90 common frames omitted 2021-06-19 21:45:05.248 [http-nio-9999-exec-1] ERROR o.a.c.c.C.[.[.[/yuns].[dispatcherServlet]:175 - Servlet.service() for servlet [dispatcherServlet] in context with path [/yuns] threw exception [Request processing failed; nested exception is org.jeecgframework.poi.exception.excel.ExcelExportException: Excel导出错误] with root cause java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.CellStyle.setAlignment(Lorg/apache/poi/ss/usermodel/HorizontalAlignment;)V at org.jeecgframework.poi.excel.export.styler.ExcelExportStylerDefaultImpl.stringNoneStyle(ExcelExportStylerDefaultImpl.java:67) at org.jeecgframework.poi.excel.export.styler.AbstractExcelExportStyler.createStyles(AbstractExcelExportStyler.java:42) at org.jeecgframework.poi.excel.export.styler.ExcelExportStylerDefaultImpl.(ExcelExportStylerDefaultImpl.java:29) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.jeecgframework.poi.excel.export.ExcelExportServer.createSheet(ExcelExportServer.java:135) at org.jeecgframework.poi.excel.ExcelExportUtil.exportExcel(ExcelExportUtil.java:67) at org.jeecgframework.poi.excel.view.JeecgEntityExcelView.renderMergedOutputModel(JeecgEntityExcelView.java:69) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1370) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1116) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897) at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.github.xiaoymin.swaggerbootstrapui.filter.SecurityBasicAuthFilter.doFilter(SecurityBasicAuthFilter.java:84) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.github.xiaoymin.swaggerbootstrapui.filter.ProductionSecurityFilter.doFilter(ProductionSecurityFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387) at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:117) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:106) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)

    友情提示: 未按格式要求发帖,会直接删掉。

    opened by Fnckerpoi 15
  • swagger 报token失效问题

    swagger 报token失效问题

    版本号:2.2.1
    问题描述:

    swagger测试接口,已把url加入ShiroConfig.java 仍然包token失效,重启过项目

    是否因为我改了包名?

    请问下图,jeecg.shiro.excludeUrls 是何值是否需要更改 image

    截图&代码:

    image image

    友情提示: 未按格式要求发帖,会直接删掉。

    opened by Linyuxujun 15
  • 积木报表块循环不能嵌套循环显示,比如需要显示每个用户的个人信息和项目

    积木报表块循环不能嵌套循环显示,比如需要显示每个用户的个人信息和项目

    版本号:

    积木报表

    前端版本:vue3版?还是 vue2版?

    vue2版

    问题描述:

    积木报表不能嵌套循环显示,比如需要显示每个用户的个人信息和项目

    截图&代码:

    友情提示(为了提高issue处理效率):

    • 未按格式要求发帖,会被直接删掉;
    • 描述过于简单或模糊,导致无法处理的,会被直接删掉;
    • 请自己初判问题描述是否清楚,是否方便我们调查处理;
    • 针对问题请说明是Online在线功能(需说明用的主题模板),还是生成的代码功能;
    opened by QD2011 0
  • excel导出可以增加权限控制吗

    excel导出可以增加权限控制吗

    版本号:

    2.4.2

    前端版本:vue3版?还是 vue2版?

    vue2版

    问题描述:

    excel导出时可以和像表格列表的字段通过简单权限配置就可以控制是否显示该字段

    截图&代码:

    像列表的字段权限配置 1

    1.Excel注解新增一个权限的属性 @Excel增加权限标识

    2.使用@Excel 2

    友情提示(为了提高issue处理效率):

    • 未按格式要求发帖,会被直接删掉;
    • 描述过于简单或模糊,导致无法处理的,会被直接删掉;
    • 请自己初判问题描述是否清楚,是否方便我们调查处理;
    • 针对问题请说明是Online在线功能(需说明用的主题模板),还是生成的代码功能;
    opened by 0xCoding 0
  • Spring Framework RFD漏洞(CVE-2020-5398)

    Spring Framework RFD漏洞(CVE-2020-5398)

    版本号:jeecg-boot 3.1
    问题描述:Spring Framework RFD漏洞(CVE-2020-5398) 升级<spring-framework.version>5.3.24</spring-framework.version> 为5.3.24后还是存在此问题,这是还需要升级什么包吗
    截图&代码:
    image

    友情提示(为了提高issue处理效率):

    • 未按格式要求发帖,会被直接删掉;
    • 描述过于简单或模糊,导致无法处理的,会被直接删掉;
    • 请自己初判问题描述是否清楚,是否方便我们调查处理;
    • 针对问题请说明是Online在线功能(需说明用的主题模板),还是生成的代码功能;
    opened by finn93 0
  • 附表(TAB)(一对多) 页面调用不了树形的下拉框 只能调用非树形的下拉框

    附表(TAB)(一对多) 页面调用不了树形的下拉框 只能调用非树形的下拉框

    版本号:3.4.0(发布日期:20220725)
    前端版本:vue2
    问题描述:

    第一个问题:附表(TAB)(一对多)页面调用不了树形的下拉框 只能调用非树形的下拉框 第二个问题:附表(TAB)(一对多)页面返回不了字典的对应属性 _dicttext 像这种无法正确的返回

    截图&代码:

    友情提示(为了提高issue处理效率):

    • 未按格式要求发帖,会被直接删掉;
    • 描述过于简单或模糊,导致无法处理的,会被直接删掉;
    • 请自己初判问题描述是否清楚,是否方便我们调查处理;
    • 针对问题请说明是Online在线功能(需说明用的主题模板),还是生成的代码功能;
    opened by xnhel 0
  • j-vxe-table的type: JVXETypes.select时候,给options赋值的时候,页面不能刷新是为啥呀???

    j-vxe-table的type: JVXETypes.select时候,给options赋值的时候,页面不能刷新是为啥呀???

    版本号:
    前端版本:vue3版?还是 vue2版?
    问题描述:
    截图&代码:

    友情提示(为了提高issue处理效率):

    • 未按格式要求发帖,会被直接删掉;
    • 描述过于简单或模糊,导致无法处理的,会被直接删掉;
    • 请自己初判问题描述是否清楚,是否方便我们调查处理;
    • 针对问题请说明是Online在线功能(需说明用的主题模板),还是生成的代码功能;
    opened by xiaohuang-123 0
  • 在线表单不能自定义显示序号

    在线表单不能自定义显示序号

    版本号:

    3.4.4

    前端版本:vue2版
    问题描述:

    表单应添加序号自定义显示字段,且目前主键设置无法显示

    截图&代码:

    image

    友情提示(为了提高issue处理效率):

    • 未按格式要求发帖,会被直接删掉;
    • 描述过于简单或模糊,导致无法处理的,会被直接删掉;
    • 请自己初判问题描述是否清楚,是否方便我们调查处理;
    • 针对问题请说明是Online在线功能(需说明用的主题模板),还是生成的代码功能;
    opened by colaliu1 0
Releases(v3.4.4)
  • v3.4.4(Nov 21, 2022)

    升级日志

    修复了系列bug,进一步保障现有版本的稳定,vue3做了vite3升级,低代码模块新增亮点功能。

    一、Vue3前端问题修复

    • 切换pnpm安装依赖
    • 升级到vite3
    • 系统UI美化
    • 图标本地化,内网也不影响图片渲染
    • 修复在消息中心,信息模板中编码为空提示重复问题
    • 修复Antd3升级问题,导致所有功能表单的下拉搜索框搜索无效issues/218
    • 修复Antd3升级问题,导致表格分页选择失效 issues/4185
    • 【重要性能问题】解决点击online功能测试,重新加载首页问题 issues/I5XBZF
    • 字段校验问题,一进入表单就校验
    • vue3 最新版 online报表 参数不生效
    • 必填的form的validate校验反过来了issues/4189
    • 所有功能表单的下拉搜索框搜索无效issues/218
    • JDictSelectTag选择显示有问题issues/226
    • JSelectMultiple搜索问题issues/227
    • "version": "3.4.3" 换肤功能无效issues/236
    • online表单开发,没有数据,提示token失效issues/4132
    • vue3版本,online在线表单,新增页面无法显示联动控件issues/4008
    • 部门管理员能获取系统全部角色issues/4122
    • v-deep报警信息issues/143
    • clearSubRows时报错TypeErrorissues/166
    • online表单开发代码生成选择Vue3风格,生成的代码却是vue2的issues/4151
    • GUI代码生成器issues/4150
    • basic table 增加伸缩列issues/185
    • basic table 增加伸缩列issues/I5571O
    • online表单-数据库属性,字段拖拽排序时,无法成功。issues/191
    • 前端启动报类型找不到issues/200
    • online表单生成的预览之后放在菜单表单里面不可以用issues/201
    • 打包到服务器上,定时任务点“立即执行“报错issues/204
    • online开发,使用部门选择组件时,多个默认参数时,仍然有问题。点击“确认”按钮,没反应issues/4166
    • 列设置功能不能拖拽列issues/181
    • 下拉搜索,使用动态字典,在线页面不报错,生成的代码报错issues/183
    • 配置聚合路由的地址时,报系统已存在该值的错误。issues/176
    • 平台用户登录失败锁定用户issues/4109
    • VUE3 3.4.3版本 online报表参数无效issues/225
    • Online JTreeSelect控件changeOptions方法未生效issues/4173
    • online在线表单生成,附表形式表单没有联动组件或省市区组件issues/194
    • JFormContainer组件禁用时无法下载文件issues/224
    • 用户编辑中所属部门与负责部门不显示部门名称,只显示departIdsissues/163
    • ERP风格下列设置问题issues/127
    • online代码生成Tab风格,新增数据中的字表tab页面错乱issues/4117
    • 配置下级菜单为隐藏路由后,二级菜单无法点击,并且显示了三角符号issues/4013
    • online报表可以实现用“张 ”来模糊查询而不是“张* ”issues/I5VC3M
    • 部门选择组件中,在online中多个扩展参数时,存储字段变更为部门编码时,表单无法实现issues/I5V6L3
    • online报表字典配置列使用sql字典形式不能实现下拉框issues/I5JCIV
    • 空指针异常issues/I5M2QM
    • 在线表单时间组件条件样式问题issues/I5RWTV
    • 菜单问题issues/I5JJTL
    • 带参数的路由菜单点击右上角刷新报错issues/I5VXTW
    • RangePicker日期选择器异常issues/I5X0J0
    • 新版本打开online功能测试重新进入平台issues/I5XBZF
    • Online表单开发自己录入的属性保存不了issues/I5W9BW
    • 用户管理权限部门很多全选保存后导致编辑按钮消失issues/3972
    • BasicTable 调用插入函数 默认插入两条记录issues/136
    • JVxeTable默认行数无效issues/4019
    • 标签页样式更多下拉显示样式错乱问题issues/169
    • JEditableTable组件,当数据超过9条,不显示issues/I5IGXC
    • jvxetoolbar的bugissues/I5E385
    • online报表导出功能,"合计"行无法识别负数issues/I5LL7W
    • [JVxeTable] setValues 必须传递数组issues/I5RAXT
    • 接入钉钉登录,提交开始报错issues/I5WRIN
    • autopoi导入时报错issues/4144

    二、后端问题修复

    • Apache Shiro 身份认证绕过漏洞 issues/4222
    • online报表参数无效 【jeecgboot-vue3/issues/225】
    • vue3代码生成器模板优化
    • 修复了一些已知安全漏洞
    • 修复使用带命名空间启动网关swagger看不到接口文档
    • 修复 Monitor 无法使用--spring.profiles.active 方式,使用配置文件
    • 修复yml文件格式不规范导致的打包启动问题
    • nacos log4j 是2.13.3版本版本,存在漏洞
    • 修复 labelWidth 设置无效的问题,默认宽度设置去掉,改成自适应
    • 默认排序字段逻辑兼容处理
    • 上传接口对文件类型进行限制,避免恶意脚本上传攻击风险
    • online表单开发代码生成选择Vue3风格,生成的代码却是vue2的 issues/4151
    • CVE-2022-2647问题修复issues/4096
    • Excel导入 带公式的时候精度丢失issues/3369
    • check存在sql注入漏洞issues/4129
    • deleteRecycleBin is affected by sql injectionissues/4125
    • putRecycleBin is affected by sql injectionissues/4126
    • 企业微信官方通讯录同步接口调整issues/4058
    • queryTableData is affected by sql injectionissues/4128
    • 这里有几处没有换成预编译,但个人建议修复issues/4127
    • exlce模板导出如果模板中有多个合并单元格的循环表格,第二个表格读取错误issues/4142
    • 第三方登录字典没有缓存issues/3998
    • 乐观锁报错v3.2.0,需要加注解issues/3847
    • oss外链经过转编码后,部分无效issues/4023
    • 包分离模式部署运行时,在线生成代码失败(已提供修改意见)issues/4084
    • 微服务@Dict注解显示commonApi异常NoSuchBeanDefinitionExceptionissues/4192
    • 阿里云OSS上传失败,却返回前端上传成功issues/I5JOXL
    • 在线表单Oracle环境下同步数据库报错issues/I5KJUJ
    • 菜单批量删除问题:主菜单及其菜单一起选中删除报错(实际已删除)issues/I5LCXS
    • 单体升级微服务最新版本3.4.3,启动jeecg-demo-cloud-start失败issues/4190
    • 代码生成时判断del_flag存在自动生成逻辑删除代码issues/4196
    • 代码生成默认生成的菜单SQL中 is_leaf 字段为1,导致该菜单下的权限子菜单不可见 #4242

    三、低代码模块升级

    • 支持关联记录和他表字段控件
    • 支持三级联动控件
    • online报表查询支持字典下拉搜索控件
    • online报表查询,字符串类型默认支持模糊查询,不需要输入*
    • online代码生成,支持选择那种前端代码生成(vue3\vue2\vue3原生)
    Source code(tar.gz)
    Source code(zip)
  • v3.4.3(Oct 28, 2022)

    版本:v3.4.3 | 2022-10-18

    升级日志

    VUE3版本低代码模块首个全功能稳定版,online表单、online报表专项升级,新增很多亮点功能。 提醒:此版本的online后台与vue2 UI不兼容,vue2暂时不要升级后台。

    升级SQL

    ALTER TABLE `onl_cgform_field`
    MODIFY COLUMN `field_show_type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '表单控件类型' AFTER `dict_text`;
    
    ALTER TABLE `onl_cgform_field` 
    ADD COLUMN `db_is_persist` tinyint(1) NULL COMMENT '是否需要同步数据库字段, 1是0否' AFTER `db_is_null`;
    update onl_cgform_field set db_is_persist = 1;
    

    Online表单

    • 代码生成支持在线预览代码
    • 支持表单右侧评论区(留言、历史、附件)
    • online子表支持弹出表单维护
    • 修复BasicTable的自定义列不显示问题
    • 支持js增强
    • 新版online表单详情查看效果
    • 优化简化Online对接积木报表使用体验,列表添加打印按钮
    • 修复Online日期控件遮挡问题
    • 支持popup
    • online下拉框优化 兼容数据字典配置
    • online表单列表,操作列支持固定到最左侧
    • online表单样式优化,label超出4个字符 省略显示

    Online报表

    • online报表,查询条件样式优化
    • online报表,路由参数和动态参数 查询结果不生效
    • online报表,jdbc连接地址漏洞问题
    • Online报表新增选中导出

    修复 issues

    • 在线报表的sql中使用mysql的limit解析报错 issues/#4072
    • 在线报表不支持子查询,解析报错 issues/#4040
    • Online报表功能涉及子查询操作会产生SQL解析错误issues/I5M1DD
    • Online表单列表,自定义显示字段问题issues/I5HZ60
    • 列表列展示问题issues/#110
    • AUTO在线表单进入功能测试之后一直卡在功能测试界面issues/#I5E7YX
    • online按钮授权不允许删除,造成”操作栏“详情查看没有了issues/#I5GXS3
    • online表单子页面js增强化报错issues/#I5FRVI
    • Online表单对接积木报表issues/#3887
    • js增强,将表单中的单价和数量相乘得到总价issues/#3980
    • JS增强,内置列表增强方法不生效issues/#3976
    • 版本更新后,online下拉搜索框问题没解决issues/#I5IG3G
    • 3.0版本Online表单开发表单问题issues/#3354
    • 在线设计 double类型 精度问题issues/#I5B20H
    • online表单开发,强制同步后索引丢失issues/#3693
    • online表单开发中,导入EXCEL时,必填校验逻辑不完善issues/#3778
    • TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string or an instance of URL. Received undefined#158
    • 锁定屏幕功能报错 issues/I5TCGE
    • JVxeTypes.selectDictSearch sync问题 issues/I5QRT8
    • vue3的 在线报表开发,动态参数无效 #140
    • 代码出错 issues/I5UMML
    • 左侧动态菜单怎么做国际化处理 issues/I5N2PN
    • 头部“密码修改”菜单,因代码中接口url少了一个斜杠导致请求错误issues/I5V187
    • doMultiFieldsOrder() 多字段排序方法存在问题 issues/I5FJU6

    版本:v3.4.3-GA | 2022-10-28

    升级日志

    此部分为近两周内修复和发布的新功能。

    重磅低代码新功能

    • online表单,支持关联记录和他表字段控件
    • online表单,支持三级联动控件
    • online代码生成,支持选择那种前端代码生成(vue3\vue2\vue3原生)
    • 支持任意弹表单(钻取)
    • online报表查询,支持字典下拉搜索控件
    • online报表查询,字符串类型默认支持模糊查询,不需要输入*

    修复严重Bug

    • 解决点击online功能测试,重新加载首页问题 issues/I5XBZF
    • 访问online表单开发菜单,提示token失效 #4132
    • 解决带参数的路由菜单点击右上角刷新报错
    • 用户添加按钮看不见问题
    • online代码生成选择Vue3风格,生成的代码却是vue2的 #4151
    • GUI代码生成器报错 #4150
    • vue3版本,online在线表单,新增页面无法显示联动控件 #4008
    • 解决标签页样式更多下拉显示样式错乱问题
    Source code(tar.gz)
    Source code(zip)
  • v3.4.2(Sep 27, 2022)

    升级日志

    重点升级ant-design-vue到3.2.12、升级vite等前端依赖;优化基础功能、修复bug等;本次未升级online相关功能。

    Vue3 UI升级

    • 升级ant-design-vue到3.2.12、升级vite等前端依赖
    • 升级antd3后,moment全部替换为dayjs
    • websocket功能优化
    • 表单支持右侧嵌入评论区、附件区
    • 代码格式化调整
    • 自动检查vue3, 自动切换vue3库表
    • 菜单列表支持通过菜单名模糊查询
    • 支持年度控件
    • 同步vben部分代码
    • 升级antd3后一系列兼容改造工作
    • 表单label支持自定义显示字数,超长截取显示
    • Table表格自定义排序字段例子(角色列表)
    • 用户设置上传头像不生效解决
    • Table的全屏功能有问题,默认关闭
    • 系统通知,未读的排到最上面
    • 编译后主题色切换不生效黑屏的问题
    • 系统通知图标,没有随着主题色变
    • 修复labelWidth设置无效的问题
    • form表单label宽度支持设置,默认去掉一些表单的宽度设置,默认自适应

    升级and3后兼容问题(遇到请修改)

    • Table废弃了 slots 插槽,需要修改写法(目前老用法可以继续用,会有警告)
    • Form.tem只能收集一个表单项的数据,如果有多个表单项,会导致收集搭乱(item里面有多个元素,会报警告)
    • antd3采用dayjs替换掉了moment,升级需要搜索moment换成dayjs(dayjs与moment语法差不多,替换不难)
    • 针对Table废弃slots 插槽和Form.tem只能一个表单项,代码尚未改造完,虽然有警告,但不影响使用(antd3做了兼容)
    • Tabs的动画默认没有了,如果出现问题,需要加上animated参数
    • 样式更名.ant-tabs-bar —> .ant-tabs-nav
    • 下拉类型的SelectTypes更名为SelectValue
    • 更多升级日志见 从 ant-design-vue 2.x 版本升级到 ant-design-vue 3.x 版本
    • form表单label宽度设置问题修复,如表单宽度效果有问题,可以去掉宽度设置

    新功能升级

    • 新版系统通知风格(支持直接打开业务单)
    • 消息模板新增Markdown类型
    • 在线文件存储,文档预览文档采用pdf模式预览
    • 钉钉和企业微信推送支持markdown格式
    • Swagger2文档,token保存问题
    • 文件存储minio上传失败,提示错误不准确(禁止特殊文件类型上传)
    • 重构系统通知WebSocket代码,简化逻辑
    • 新建部门的ID规则改造为IdWorker
    • jdbc连接地址漏洞问题修复
    • /actuator/ shiro默认不排除,有漏洞风险

    修复bug

    Source code(tar.gz)
    Source code(zip)
  • v3.4.0(Aug 9, 2022)

    当前版本:v3.4.0 | 2022-08-06

    升级日志

    微服务重构专项升级,简化优化微服务架构,让微服务使用更加方便。

    主要改造点

    优化点解决

    • 1 解决原微服务模块,自定义nacos配置不方便
    • 2 解决原微服务模块,自定义数据源不方便
    • 3 nacos配置下放到每个模块,加上import方式,集成更灵活
    • 4 解决切换微服务不方便,要手工改很多东西
    • 5 原微服务结构不清晰,有点乱
    • 6 存在本地配置和nacos冲突问题
    • 7 Dockerfile存在缺陷
    • 8 gateway走自己的nacos配置,原来太冗余太重
    • 9 jeecg-boot-starter拆分出来,让项目更简单,降低入门难度
    • 10 默认不引入jeecg-cloud-test示例项目,降低入门难度
    • 11 文档升级,各个功能集成更加简单(import带来的好处)

    微服务文档

    微服务技术栈

    • 基础框架:Spring Boot 2.6.6

    • 微服务框架: Spring Cloud Alibaba 2021.0.1.0

    • 持久层框架:MybatisPlus 3.5.1

    • 报表工具: JimuReport 1.5.2

    • 安全框架:Apache Shiro 1.8.0,Jwt 3.11.0

    • 微服务技术栈:Spring Cloud Alibaba、Nacos、Gateway、Sentinel、Skywalking

    • 数据库连接池:阿里巴巴Druid 1.1.22

    • 日志打印:logback

    • 其他:autopoi, fastjson,poi,Swagger-ui,quartz, lombok(简化代码)等。

    微服务解决方案

    1、服务注册和发现 Nacos

    2、统一配置中心 Nacos

    3、路由网关 gateway(三种加载方式)

    4、分布式 http feign

    5、熔断降级限流 Sentinel

    6、分布式文件 Minio、阿里OSS

    7、统一权限控制 JWT + Shiro

    8、服务监控 SpringBootAdmin

    9、链路跟踪 Skywalking 参考文档

    10、消息中间件 RabbitMQ

    11、分布式任务 xxl-job

    12、分布式事务 Seata

    13、分布式日志 elk + kafka

    14、支持 docker-compose、k8s、jenkins

    15、CAS 单点登录

    16、路由限流

    微服务架构图

    微服务架构图

    Source code(tar.gz)
    Source code(zip)
  • v3.3.0(Aug 6, 2022)

    升级日志

    不兼容的升级点:Websocket安全加强,增加 token 校验、接口签名拦截器的时间戳改造、System模块重构大。平滑升级有难度,请仔细对比修改日志。

    重点升级

    • websocket安全加强,增加token校验
    • 【签名改造】 解决X-TIMESTAMP时区问题
    • System模块开展代码p3c规范扫描大重构
    • 升级代码生成器,支持生成权限注解和菜单的SQL
    • vue2弹窗支持任意拖动位置
    • 微服务模式下,多租户不支持问题修复
    • 模板消息重构,提供全局统一推送接口(支持钉钉、企业微信、邮件、短信、系统消息)
    • 提供数据脱敏注解
    • 发现的SQL漏洞修复
    • Vue3前端与后台版本号同步,功能也已经全部同步

    后台问题

    Vue2前端

    • online在线生成小问题issues/3420
    • 通过Online表单开发后,数据达到57万后,导出的excel中提示超时issues/I4JRE8
    • 代码生成app页面没有此jsissues/I4WFGF
    • character '@' that cannot start any tokenissues/I4XI00
    • vue有些页面报错,但是在线演示的却没有issues/I4X63V
    • JeecgBoot一对多示例,表单删除issues/I4VYOC
    • 项目运行起来后前端访问列表页下的角色列表和用户列表报错issues/3472
    • 给新建用户赋予角色的逻辑漏洞issues/3461
    • 启动的时候提示信息issues/I52HJC
    • 单标签页模式下,打开外部链接 报错误 “这是最后一页,不能再关闭了啦”issues/3546
    • 用户为上级 负责部门下拉框选项的数据没有数据,需要从普通切换到上级才能有数据issues/I52Z8Z
    • 富文本编辑器在服务器图片上传是相对路径issues/I4BCC3
    • j-vxe-table点击事件冲突问题issues/I54E2M
    • 部门用户可以有 admin权限的问题issues/3806
    • JTreeSelect树形下拉框(异步加载) 自定义查询条件 查询结果问题issues/3709
    • 下拉搜索框条件过滤issues/I5DAPN
    • 内嵌子表风格bugissues/3800

    Vue3前端

    • 代码编辑器默认样式改成idea风格
    • 支持企业微信/钉钉 oauth2登录
    • 角色支持首页配置
    • 我的消息--全部已读等接口报错issues/3420
    • JTreeSelect 下拉树自定义组件 查询不到数据issues/96
    • online配置部门选择后编辑,查看数据应该显示部门名称,不是部门代码issues/I5F3P4
    • 前端升级到vue3后,从企业微信和钉钉的工作台免登入失败issues/I5BG1I
    • Online对接积木报表后不显示打印按钮issues/3843
    • JVxeTypes.upload 文件上传的时候,触发不了编辑issues/I5FTO6
    • 是否支持OAuth2登录issues/I5DJZ8
    • 附表问题控件类型问题issues/3854
    • 列表查看详情,富文本不能下拉issues/I5ABAO
    • 顶部菜单混合模式 分割菜单点击 导航无法显示issues/I5BIPO

    Autopoi

    • [issues/I4PU45] @excel里面新增属性fixedIndex
    • 导入字典替换需要将---替换成_,不然数据库会存
    • mybatis-plus升级 时间字段变成了jdk8的LocalDateTime,导致格式化失败
    • AutoPOI (Excel工具)==>excel根据模板导出功能issues/3687
    • AutoPoi excel导入 ImportParams 中没有startSheetIndex参数issues/I57UPC
    • autopoi模板导出Excel功能,#fe: 横向遍历不好用issues/3328
    Source code(tar.gz)
    Source code(zip)
  • v3.2.0(Jun 4, 2022)

    项目介绍

    JeecgBoot是一款企业级的低代码平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT 支持微服务。强大的代码生成器让前后端代码一键生成! JeecgBoot引领低代码开发模式(OnlineCoding-> 代码生成-> 手工MERGE), 帮助解决Java项目70%的重复工作,让开发更多关注业务。既能快速提高效率,节省成本,同时又不失灵活性!

    当前版本:v3.2.0 | 2022-04-25

    源码下载

    技术文档

    升级日志

    此版本重构很大,重点升级了SpringBoot、SpringCloudAlibaba、MybatisPlus到最新版、重构了微服务模块,同时针对代码做了规范优化。

    重点升级

    • 升级springboot 2.6.6
    • 升级spring-cloud-alibaba 2021.1
    • 升级mybatisplus 3.5.1
    • 重构sentinel模块,支持持久化到nacos
    • 重构gateway模块,熔断限流降级切换为sentinel
    • 代码规范大重构
    • 解决代码生成器不支持路径含中文或空格问题

    解决微服务bug

    • gateway,在网关路由页面如何设置路由条件Header issues/I52J6R
    • 网关刷新问题#I442RS
    • 微服务下Knife4j每次重新部署jar时,都要重启gateway服务才能显示成功#3185
    • 微服务版,定时任务中,通过openfeign调用其他服务,报错tocken失效#I523YP
    • 微服务之间的feign调用,如何免登录,同时又不会被暴露网关#I4Z69G
    • 微服务框架下的定时任务和字典项查询无权限#2662
    • 异步线程中调用openFeign访问远程服务,子线程的header中偶尔出现取不到token的情况#I4Q7FY
    • 微服务都是在内网环境中,只有网关会暴露公网,服务调用不鉴权#2539
    • 切换微服后,被调用服务要求鉴权怎么办#2171
    • 微服务 springcloud版本漏洞#I52U2F

    Issues处理

    • 代码生成列表页面的图片支持点击放大预览功能
    • 【安全机制加强】字典接口、online报表等敏感接口加字段限制 AbstractQueryBlackListHandler
    • 敏感操作加操作日志,便于追踪
    • swagger接口返回值,显示的是object问题代码调整
    • poi导入问题#I4PU45
    • 查询条件的值为等号= bug#3443
    • 当搜索框里只输入 * 时,后台索引越界#3382
    • 分子字典树前端代码生成错误#I4SKUS
    • java 增强导入类异常#3479
    • 订单流水号#I4W3XN
    • 代码生成app页面没有此js#I4WFGF
    • 3.1版本 online表单Datetime通过日期查询报错#3489
    • Shiro安全漏洞提示#3498
    • 浏览器显示乱码问题#I4YH95
    • /sys/user/list接口使用部门departId查询用户时没有权限报错#I4XTYB
    • 模板管理发送消息出现NullPointerException错误#3512
    • 刷新页面redis中原有token未过期时会创建一个新token存放至redis中#I4YY7I
    • 国产数据库适配异常#3543
    • 启动项目在bean初始化之前,报了警告多个PropertySourcesPlaceholderConfigurer重复注入#I50IJ6
    • service调用service,代码逻辑缺陷#I52JSM
    • Nacos 1.4.1 依然存在权限绕过的漏洞#3507
    • 启动报错:Cannot resolve com.sun:tools:1.8.0#3596
    • 升级springboot2.6后不支持达梦数据库#I52KAU
    • 微信扫码登录,绑定未验证手机验证码,存在安全隐患#3555
    • vue2代码生成的vue3代码中,data.ts文件里,componentProps后面少一个逗号#I4ZRF3

    为什么选择 JeecgBoot?

    开源界“小普元”超越传统商业平台。引领低代码开发模式(OnlineCoding-> 代码生成器 -> 手工MERGE),低代码开发同时又支持灵活编码, 可以帮助解决Java项目70%的重复工作,让开发更多关注业务。既能快速提高开发效率,节省成本,同时又不失灵活性。

    • 采用最新主流前后分离框架(SpringBoot+Mybatis-plus+Ant-Design+Vue),容易上手; 代码生成器依赖性低,灵活的扩展能力,可灵活实现二次开发;
    • 开发效率很高,采用代码生成器,单表数据模型和一对多(父子表)、树列表等数据模型,增删改查功能自动生成,菜单配置直接使用(前端代码和后端代码都一键生成);
    • 代码生成器提供强大模板机制,支持自定义模板风格。目前提供四套风格模板(单表两套、一对多两套)
    • 封装完善的用户、角色、菜单、组织机构、数据字典、在线定时任务等基础功能。强大的权限机制,支持访问授权、按钮权限、数据权限、表单权限等
    • 零代码在线开发能力,在线配置表单、在线配置报表、在线配置图表、在线设计表单
    • 常用共通封装,各种工具类(定时任务,短信接口,邮件发送,Excel导入导出等),基本满足80%项目需求
    • 简易Excel导入导出,支持单表导出和一对多表模式导出,生成的代码自带导入导出功能
    • 集成简易报表工具,图像报表和数据导出非常方便,可极其方便的生成图形报表、pdf、excel、word等报表;
    • 采用前后分离技术,页面UI精美,针对常用组件做了封装:时间、行表格控件、截取显示控件、报表组件,编辑器等等
    • 查询过滤器:查询功能自动生成,后台动态拼SQL追加查询条件;支持多种匹配方式(全匹配/模糊查询/包含查询/不匹配查询);
    • 数据权限(精细化数据权限控制,控制到行级,列表级,表单字段级,实现不同人看不同数据,不同人对同一个页面操作不同字段
    • 在线配置报表(无需编码,通过在线配置方式,实现曲线图,柱状图,数据等报表)
    • 页面校验自动生成(必须输入、数字校验、金额校验、时间空间等);
    • 提供单点登录CAS集成方案,项目中已经提供完善的对接代码
    • 表单设计器,支持用户自定义表单布局,支持单表,一对多表单、支持select、radio、checkbox、textarea、date、popup、列表、宏等控件
    • 专业接口对接机制,统一采用restful接口方式,集成swagger-ui在线接口文档,Jwt token安全验证,方便客户端对接
    • 接口安全机制,可细化控制接口授权,非常简便实现不同客户端只看自己数据等控制
    • 高级组合查询功能,在线配置支持主子表关联查询,可保存查询历史
    • 提供各种系统监控,实时跟踪系统运行情况(监控 Redis、Tomcat、jvm、服务器信息、请求追踪、SQL监控)
    • 消息中心(支持短信、邮件、微信推送等等)
    • 集成Websocket消息通知机制
    • 提供APP发布方案:
    • 支持多语言,提供国际化方案;
    • 数据变更记录日志,可记录数据每次变更内容,通过版本对比功能查看历史变化
    • 平台UI强大,实现了移动自适应
    • 平台首页风格,提供多种组合模式,支持自定义风格
    • 提供简单易用的打印插件,支持谷歌、IE浏览器等各种浏览器
    • 示例代码丰富,提供很多学习案例参考
    • 采用maven分模块开发方式
    • 支持菜单动态路由
    • 权限控制采用 RBAC(Role-Based Access Control,基于角色的访问控制)

    系统功能模块

    ├─系统管理
    │  ├─用户管理
    │  ├─角色管理
    │  ├─菜单管理
    │  ├─权限设置(支持按钮权限、数据权限)
    │  ├─表单权限(控制字段禁用、隐藏)
    │  ├─部门管理
    │  ├─我的部门(二级管理员)
    │  └─字典管理
    │  └─分类字典
    │  └─系统公告
    │  └─职务管理
    │  └─通讯录
    │  └─多租户管理
    ├─Online在线开发(低代码)
    │  ├─Online在线表单 - 功能已开放
    │  ├─Online代码生成器 - 功能已开放
    │  ├─Online在线报表 - 功能已开放
    │  ├─Online在线图表(暂不开源)
    │  ├─Online图表模板配置(暂不开源)
    │  ├─Online布局设计(暂不开源)
    │  ├─多数据源管理 - 功能已开放
    ├─积木报表设计器(低代码)
    │  ├─打印设计器 - 功能已开放
    │  ├─数据报表设计 - 功能已开放
    │  ├─图形报表设计(支持Echart) - 功能已开放
    │  ├─大屏设计器(暂不开源)
    ├─消息中心
    │  ├─消息管理
    │  ├─模板管理
    ├─代码生成器(低代码)
    │  ├─代码生成器功能(一键生成前后端代码,生成后无需修改直接用,绝对是后端开发福音)
    │  ├─代码生成器模板(提供4套模板,分别支持单表和一对多模型,不同风格选择)
    │  ├─代码生成器模板(生成代码,自带excel导入导出)
    │  ├─查询过滤器(查询逻辑无需编码,系统根据页面配置自动生成)
    │  ├─高级查询器(弹窗自动组合查询条件)
    │  ├─Excel导入导出工具集成(支持单表,一对多 导入导出)
    │  ├─平台移动自适应支持
    ├─系统监控
    │  ├─Gateway路由网关
    │  ├─性能扫描监控
    │  │  ├─监控 Redis
    │  │  ├─Tomcat
    │  │  ├─jvm
    │  │  ├─服务器信息
    │  │  ├─请求追踪
    │  │  ├─磁盘监控
    │  ├─定时任务
    │  ├─系统日志
    │  ├─消息中心(支持短信、邮件、微信推送等等)
    │  ├─数据日志(记录数据快照,可对比快照,查看数据变更情况)
    │  ├─系统通知
    │  ├─SQL监控
    │  ├─swagger-ui(在线接口文档)
    │─报表示例
    │  ├─曲线图
    │  └─饼状图
    │  └─柱状图
    │  └─折线图
    │  └─面积图
    │  └─雷达图
    │  └─仪表图
    │  └─进度条
    │  └─排名列表
    │  └─等等
    │─大屏模板
    │  ├─作战指挥中心大屏
    │  └─物流服务中心大屏
    │─常用示例
    │  ├─自定义组件
    │  ├─对象存储(对接阿里云)
    │  ├─JVXETable示例(各种复杂ERP布局示例)
    │  ├─单表模型例子
    │  └─一对多模型例子
    │  └─打印例子
    │  └─一对多TAB例子
    │  └─内嵌table例子
    │  └─常用选择组件
    │  └─异步树table
    │  └─接口模拟测试
    │  └─表格合计示例
    │  └─异步树列表示例
    │  └─一对多JEditable
    │  └─JEditable组件示例
    │  └─图片拖拽排序
    │  └─图片翻页
    │  └─图片预览
    │  └─PDF预览
    │  └─分屏功能
    │─封装通用组件	
    │  ├─行编辑表格JEditableTable
    │  └─省略显示组件
    │  └─时间控件
    │  └─高级查询
    │  └─用户选择组件
    │  └─报表组件封装
    │  └─字典组件
    │  └─下拉多选组件
    │  └─选人组件
    │  └─选部门组件
    │  └─通过部门选人组件
    │  └─封装曲线、柱状图、饼状图、折线图等等报表的组件(经过封装,使用简单)
    │  └─在线code编辑器
    │  └─上传文件组件
    │  └─验证码组件
    │  └─树列表组件
    │  └─表单禁用组件
    │  └─等等
    │─更多页面模板
    │  ├─各种高级表单
    │  ├─各种列表效果
    │  └─结果页面
    │  └─异常页面
    │  └─个人页面
    ├─高级功能
    │  ├─系统编码规则
    │  ├─提供单点登录CAS集成方案
    │  ├─提供APP发布方案
    │  ├─集成Websocket消息通知机制
    │─流程模块功能 (暂不开源)
    │  ├─流程设计器
    │  ├─在线表单设计
    │  └─我的任务
    │  └─历史流程
    │  └─历史流程
    │  └─流程实例管理
    │  └─流程监听管理
    │  └─流程表达式
    │  └─我发起的流程
    │  └─我的抄送
    │  └─流程委派、抄送、跳转
    │  └─。。。
    └─其他模块
       └─更多功能开发中。。
    

    系统截图

    PC端

    手机端

    PAD端

    报表效果

    大屏效果

    欢迎吐槽,欢迎star~

    Source code(tar.gz)
    Source code(zip)
  • v3.1.0(Mar 16, 2022)

    升级日志

    此版本历经两个月的打版测试工作,是一个阶段性重要的稳定版本,重点巩固了vue2版本功能,加强了国产数据库兼容和大数据的支撑 (后续工作会针对vue3开展,vue2的前端进入稳定期)

    重点升级

    • 达梦数据库深度测试,兼容工作
    • Postgres数据库深度测试,兼容工作
    • 代码生成器,支持uniapp端列表和表单生成
    • 严重安全漏洞修复
    • 前端集成qiankun,支持微前端开发
    • 新增分库分表示例和分布式事务示例代码
    • 前端添加config配置文件,支持打包部署后修改配置
    • 进一步重构调整后台接口,vue3兼容工作
    • 积木报表、autopoi升级到最新版
    • 代码生成器模板升级,增加vue3的支持
    • Online报表支持大数据导出,分sheet
    • Online表单java增强重构,拆分独立导入增强接口
    • 系统管理等基础模块,一系列细节优化
    • 反馈的issue问题处理

    功能升级

    • 添加扫码登录逻辑
    • 分类字典导入错误信息处理
    • 我的部门系列问题优化
    • 通知公告列表查询优化
    • 枚举首页设置,支持顺序权重
    • 同步到本地的部门,子部门的机构类型不对
    • 定时任务功能导出,导出人写死了
    • 修复企业微信、钉钉工号同步失败的问题
    • 自定义树查询条件查不出数据
    • @dict注解支持 dicttable 设置where条件
    • 代码生成一对多TAB,时间组件有遮挡
    • 升级autopoi版本、解决Log4j2爆雷漏洞问题
    • 为了支持模块单独启动,引用system模块的类改成懒加载@Lazy
    • 针对接口字典翻译,新增注解方式@AutoDict
    • 树表单功能测试无法删除数据
    • 新增示例:表格合计新的写法
    • 固定tinymce版本号,解决富文本框JEditor,属性设置下拉选层级显示问题
    • JEditableTable,slot新增buildProps参数
    • 菜单搜索里点击跳转的菜单,无法将Token信息传递过去
    • 通讯录 选中某个部门查询部门人员,想再取消选中查全部,无法取消
    • 前端密码控件可以查看密码
    • 磁盘监控没有加载效果
    • 退出登录体验不好
    • 数据规则,选择自定义SQL 规则值无法输入空格
    • issues/3331 SQL injection vulnerability
    • online单表不允许设置外键给提醒
    • online菜单如果配置成一级菜单 权限查询不到
    • online报表带参数的菜单配置数据权限无效
    • online表单字段db类型,区分年月日和年月日时分秒
    • online表单默认字段排序规则改造
    • online表单导入,校验不起作用
    • Online表单,部门选择、用户选择、多行文本优化禁用效果
    • Online表单一对多子表,没有按钮权限
    • Online表单一对多tab风格,最大化,高度有问题
    • online自定义按钮未激活状态下,sql/JAVA增强列表显示出问题
    • Online报表查询 会出现java.lang.OutOfMemoryError: Java heap space

    Issues处理

    Source code(tar.gz)
    Source code(zip)
  • v3.0.0(Dec 7, 2021)

    升级日志

    迎接VUE3到来的衔接版本,后台为VUE3兼容做了一些优化和升级工作,并彻底重构了Online查询逻辑,支持更多数据库含国产和解决SQL漏洞问题。Vue3.0新版研发工作进入尾声,2022年将是JeecgBoot的VUE3里程碑元年。

    严重Bug修复

    • Online三级联动组件,列表翻译有问题
    • Online表单权限控制页面打开报错 I4E0NO
    • Online功能测试详情里的ID隐藏
    • Online表单重复rowKey属性定义,导致IE11不兼容
    • Online js增强点击无效 #2912
    • WebMvcConfiguration升级,后端将long转为string后,导致分页报错和时间类型等问题 #3058 #3057 #3051 #3041 I4BNGY
    • 升级mybatisPlus后,多租户插件导致SqlServer兼容问题,sql解析多了一个字段column #2915

    低代码升级

    • 升级积木报表到最新版本 1.4.0
    • 升级代码生成器,支持vue3页面的生成,vue3版本即将出炉!
    • 升级Minidao 支持配置多数据源
    • 为了VU3新版UI出炉,后端做了兼容性改造(相关请求、代码生成器、生成器模板、权限接口等)
    • 重构Online表单、Online报表查询逻辑,兼容更多数据库(包括国产数据库)
    • 重构Online表单同步逻辑,兼容更多数据库(包括国产数据库)
    • 解决Online表单和Online报表的查询SQL注入漏洞问题
    • Online表单java增强新增http模式
    • Online表单关联查询问题,只勾选一个附表,结果生成了两个附表的sql
    • Online报表配置SQL解析,不支持 “ >= ”
    • Online子表增加组件textarea
    • Online 用户组件,支持唯一校验
    • Online存在服务器目录遍历漏洞,限制只有admin用户才有权限 #3060
    • online单表加入外键修改失败问题 I4BXOH I49F81
    • Online报表支持安全模式配置,数据源选择在安全模式下为必填
    • 【Online表单】修复ERP风格不能保存的问题
    • 【Online报表】字典和href互斥
    • online表单,附表用户选择组件支持属性 {“multiSelect”:false}
    • 前端地域翻译写法简化
    • JVXETable新增后台查询三级联动示例
    • JVXETable新增多级联动
    • ShiroToken验证异常AuthorizationException不能被Spring统一拦截(过滤器异常)I40JKA
    • 代码生成器一对多,子表组件支持选择部门、选择用户控件生成
    • Online表单支持自定义弹出表单宽度
    • 升级Mysql驱动包,解决MySQL JDBC XXE漏洞(CVE-2021-2471)

    Issues修复

    • Online表单对接积木报表接口参数不匹配问题 #3106 #3072 #2994
    • 授权首页菜单后,自定义首页功能不生效 #3069
    • 第三方APP消息测试问题 “字段太长,超出数据库字段的长度” 解决方案 #2898
    • SQL to parse以后与sqlserver不兼容 #2915
    • online java 增强当设置的增强过多时,显示异常 #2880
    • online文本太长时,会遮挡页面 issues/I44F0R
    • oline在线内嵌子表主表与附表,设置扩展参数限制宽度不起作用 #2881
    • online点击详情,出现id,好难看 #2922
    • 升级2.4.6后Online表单开发无法使用“一对多”的“ERP主题” I468JY
    • JVXETable联动展示与选择BUG #2867
    • 2.4.6 钉钉人员同步时手机号未能正确同步 I471XE
    • 微服务版集成企业微信单点登录 #2959
    • JEditable 下子表 addBefore()方法,在其中自定义调用其他方法不生效如何解决 #2939
    • 字段label设置过长被遮盖怎么解决? #3046
    • Online表单,两个在线表单tab之间切换,产生多余查询 #3016
    • 在线表单功能,内嵌主题“高级查询”按钮权限设置完不起作用 #3020
    • 自定义按钮如何选多条数据?? #3032
    • online表单用户组件控件类型 支持唯一性校验规则 #2949
    • online在线表单加载字典错误导致页面崩溃 #I49F4F
    • 在多数据源管理,添加新数据源时mysql5.7和Postgresql冲突 #2918
    • 数据库脚本中,sys_dict_item表“数据库类型”的item_value值重复问题 #2914
    • JTreeSelect在树结构没有子节点的情况下依然显示展开箭头 #2885
    • 扩展配置的弹窗宽度和默认全屏对 内嵌子表 和 TAB主题 无效 I46AQR
    • Online报表配置-SQL解析,不支持 “ >= ” #2985
    • 同步钉钉人员到本地错误 #2990
    • ShiroToken验证异常AuthorizationException不能被Spring统一拦截(过滤器异常)#I40JKA
    • 联动组件显示问题 #3084
    • 导入定时任务,并不会被启动和调度,需要手动点击启动,才会加入调度任务中 #2986
    • Online表单如果是附表,控件类型选项缺少了多行文本、富文本框等 #2948
    • 【Online表单开发】移除表单,没有删除关联表数据 #2988
    • 省市三级联动列表无法显示 I48I0E -【2.4.6】在线开发的排序存在打开新页面tab而带前面tab页有点击过排序字段会导致报错 I47FEZ
    • JEditableTable 表头多选框如何默认选中 I49IE7
    • 消息队列中报微服务Feign异常 I49ENE
    • Online在线表单保存失败问题 I49F81
    • online表单权限控制页面打开报错 I4E0NO
    • 附表部门、用户控件有问题 #3088
    • autopoi模板导出,赋值的方法建议增加空判断或抛出异常说明。 #3005
    • jpopup 表格key重复BUG #3121
    • oracle路由网关新增小bug I4EV2J
    • Online 存在SQL注入问题 #3075
    • online 报表中类型配置为日期(yyyy-MM-dd ),但是实际展示为日期时间格式(yyyy-MM-dd HH:mm:ss) #3042
    • online表单,附表用户选择器{"multiSelect":false}不生效,单表可以生效 #3036
    • 字典表翻译注解缓存未更新 #3061
    • 附表控件类型没有时间控件 I4C854
    • online报表查询条件配置了数据字典情况下首次选择下拉框的值,查询后,无法清空查询值 I4C23E
    • websocket报错 I4C0MU
    • 网关动态更新路由报错 I4C5QR
    • 微服务下路由网关删除或禁用某项,仍可以从网关路由到对应的服务中 I47DEM
    • 路由网关禁用Demo配置后,系统仍可以通过网关路由到Demo服务。I49457

    Online重构兼容数据库

    • mysql 、mariadb 、oracle 、db2 、h2 、hsql 、sqlite 、postgresql 、sqlserver
    • 达梦数据库 、虚谷数据库 、人大金仓 、南大通用
    • Phoenix 、presto 、Gauss 、Firebird、clickhouse 、 OceanBase
    Source code(tar.gz)
    Source code(zip)
  • v2.4.6(Aug 25, 2021)

    升级日志

    主要四大方面优化: Online表单功能强化、数据库兼容优化、性能优化、底层依赖升级

    新功能升级

    • 新增微服务模块 jeecg-cloud-sentinel
    • 新增OAuth2登录,支持企业微信和钉钉的静默授权
    • 新增在线用户监控,支持踢掉功能
    • 支持自定义首页,通过枚举方式配置
    • 升级代码生成器兼容更多数据库
    • 升级Online报表分页功能,兼容更多数据库
    • 升级在线数据源配置,支持更多数据库
    • Online表单,支持按用户授权
    • Online表单,部门、人员选择组件支持自定义存储显示字段
    • Online表单,支持与积木报表对接
    • Online表单,支持多字段排序
    • Online表单,支持关联查询和关联列表展示
    • Online表单,sql增强支持选中多条数据
    • 字典拦截器性能优化,将循环查询改造成一次性查询
    • @Dict 字典翻译时,增加redis缓存
    • 进一步优化前端,压缩online js lib减少1M
    • 解决IE兼容问题
    • 去掉durid广告
    • 接口签名密钥串移到配置文件里
    • SQL注入漏洞处理
    • 查询过滤器,值为逗号、空格报错
    • 多租户配置升级
    • 工具类hutool缩减依赖,只引用必须模块
    • Demo模块默认改成多租户示例
    • 代码生成器数据库配置不支持密码加密
    • 主键策略修改 IdType.ID_WORKER_STR --> IdType.ASSIGN_ID
    • gateway默认走database、增加swagger关闭配置

    支持数据库

    Online报表兼容
    • mysql 、mariadb 、oracle 、db2 、h2 、hsql 、sqlite 、postgresql 、sqlserver
    • 达梦数据库 、虚谷数据库 、人大金仓 、南大通用
    • Phoenix 、presto 、Gauss 、Firebird、clickhouse 、 OceanBase
    Online表单兼容
    • mysql 、mariadb 、oracle 、postgresql 、sqlserver 、达梦数据库
    代码生成器兼容
    • mysql、mariadb、sqlserver、oracle、postgresql、sqlite、polardb、clickhouse、edb
    • 达梦数据库、人大金仓数据库、华为高斯、derby

    升级底层依赖

    • jimureport-spring-boot-starter 1.3.4-beta >> 1.3.78
    • autopoi 1.3.2 >> 1.3.5
    • jeewx-api 1.4.3 >> 1.4.5
    • codegenerate 1.3.2 >> 1.3.6
    • mybatis-plus 3.4.1 >> 3.4.3.1
    • knife4j-spring-boot-starter:2.0.8 --> 2.0.9
    • fastjson 1.2.75 >> 1.2.76
    • redisson 3.13.6 >> 3.16.1

    Issues修复

    • 修改头像modal #2593
    • 2.4.5升级后出现后端排序报错 #2639
    • JS增强怎么实现点击一个表单的列表页面的自定义按钮弹出另一个表单的新增页面呢?#2580
    • 分类字典修改后不自动刷新内容#I3TO07
    • JS增强根据条件怎么限制不让编辑和删除呢?#2592
    • 列表页面限制删除没效果!限制编辑有用 #I3V547
    • online表单中,下拉多选框控件无法查询 #I3N16Y
    • 从2.4.3更新后online表单开发,js增强使用beforeEdit方法,编辑点击无效,删除beforeEdit即可恢复 #2647
    • DictAspect字典解析性能问题 #I3IB91
    • online表单控件 用户选择控件 #2619
    • 关于 token 命名问题 #2232
    • online表单数据源配置,数据库类型识别错误 #2671
    • online表单数据源配置,不支持数据库密码加密 #2672
    • 2.4.5前台定时任务无法翻页 #2666
    • 部门查询问题 #I3UD06
    • 定时任务, 数量超过12个时分页失效 #I3Y1G5
    • 多租户服务端对请求头校验 #2598
    • JeecgListMixin.js 中loadData没有对request超时做处理 #2584
    • 前端用户选择单选无法置空的问题 #2610
    • 关于OL排列逻辑的小建议 #1785
    • online在线表单新增字段时,焦点不会自动定位到最新行数据 #2511
    • 【online表单开发】新增数据库字段时,顺序可否放在ID的后面,而不是所属部门的后面 #1823
    • pgsql 数据库 代码生成,配置 之后 取得表是public下面的 #2101
    • postgresql 模式问题 #2656
    • 数据库改成postgresql后,导入数据库表无法使用 #I3VN62
    • online表单中主从表权限相互影响 #2680
    • Online 报表配置中,报表SQL语句是多行的时候没法全选SQL语句 #2674
    • 自动任务cron表达式生成的问题 #2696
    • 2.4.5企业微信中应用中是否可以设置自动登录 #I3Z8SE
    • Sign 签名校验失败 #2728
    • jeecgboot采用达蒙数据库后,online代码生成模块配置数据库连接无法连接 #2725
    • 前端发现BUG #I3ZL4T
    • 最新代码在开发环境无法在ie11上打开 #2812
    • 关于postgresql数据源连接问题 #2747
    • JEditableTable.formTypes.upload组件,显示错误 #2691
    • 前端省市县组件太旧了,有部分县区没有维护进去 #I40MGS
    • AutoPOI中@EXCEL注解参数没有 #I3ZE9E
    • 已冻结的租户下的用户依然可以登陆 #2796
    • 删除租户时,未验证租户是否已被引用 #2795
    • JVxeTable用loadNewData问题 #2784
    • JS增强,beforeDelete无效 #I42OAU
    • IE11打开登录页,无法正常显示,一直转圈 #2841
    • 前端省市县组件太旧了,有部分县区没有维护进去 #I40MGS
    • 省市区组件内容缺少 #I4074O
    • 代码优化和规范(ExcelImportServer.class) #2783
    • 多租户安全问题 #2814
    • 导入mixins缺少加载中的动画,数据量比较大时,导入进行中没有反应,建议加上this.loading = true进行控制 #I3O4YL
    • 根据数据权限前缀获取允许导出的表格字段查询,期望查询是一条数据,应用户有两个角色,查出两个角色 #I3ZKGU
    • beforeDelete无效 #2815
    • 2.4.5 online内嵌子表,设置按时间范围查询时,日期选择框叠加 #2764
    • 请问,online表单设置按钮,绑定JAVA增强或SQL增强,无法多选,只能一次选一条 #2766
    • sql增强问题,如果操作多行,例如截图中,多选后,可以激活多行被勾选的数据。 #2743
    • 在jeecg中如何使用自定义按钮,选中一行或多行数据后,打印jimu单据,未找到教程,请大佬指点 #2739
    • 登录系统,系统管理-系统通告-新增-“标题”处存在存储型XSS #I40W1W
    • 钉钉同步到本地的人员没有状态,导致同步之后无法登录 #I3ZC2L
    • nacos修改了端口号不生效,启动时候还是默认端口8848 #2819
    • 使用autopoi导入提示缺少方法 #2868
    • JPopup组件在modal中使用报错 #2729
    • 2.4.5 没有用记管理没有同步钉钉功能 I44JE9
    • mybatis plus 3.4.1版本 @SqlParser 注解过时,近期有考虑升级到mybatis plus 3.4.3吗? #2840
    • 在线报表导出的合计数据与页面上显示的不一致 #2852
    • BusinessException能否前端提示异常信息 #I42UOQ
    • 第三方APP消息测试问题 “字段太长,超出数据库字段的长度” 解决方案 #2898
    Source code(tar.gz)
    Source code(zip)
  • v2.4.5(Jun 29, 2021)

    升级日志

    此版本无缝集成了钉钉和企业微信,实现了用户与部门的同步、公告和系统消息推送支持推送到钉钉和企业微信,快速建立与第三方APP的互通

    新功能升级
    • 无缝集成钉钉,实现用户和部门同步,公告和系统消息推送支持推送到钉钉
    • 无缝集成企业微信,实现用户和部门同步,公告和系统消息推送支持推送到企业微信
    • 钉钉和企业微信消息推送,支持普通文本和图文两种类型
    • Online新增支持按照部门进行权限授权
    • Online导入功能支持校验规则,友好提示成功多少行失败多少行
    • Online图表、Online报表、Online报表加缓存,提升低代码性能
    • Online popup支持单选和多选设置
    • 代码生成器生成popup只支持单选和多选配置
    • Online表字典下拉支持异步搜索
    • 优化微服务应用下存在表字段需要字典翻译时加载缓慢问题
    • 提供新的部门管理列表,支持异步加载数据
    • 定时任务支持一个类,开启多个定时任务
    • 【页面改造】登录、注册相关代码改成v-model绑定模式
    • 【页面改造】其他改造成v-model的代码(常见案例、通讯录、定时任务、校验规则、填值规则)
    • 【页面改造】 登录页面拆分重构优化
    • JVXETable 支持默认出现输入框选项配置
    • 积木报表升级到最新版本
    • 查询过滤器,支持多字段排序
    • Online报表 sql解析把大写字母变成小写的了,导致查询没有结果
    Issues修复
    • HW21-0499 表字典接口存在SQL注入漏洞,增加签名拦截器
    • online表单数据源配置,数据库类型识别错误 #2671
    • online表单数据源配置,不支持数据库密码加密 #2672
    • 【gitee/I3HTFI】自定义树控件的表单里的外键直接显示id不显示name
    • 解决issue#2639 2.4.5升级后出现后端排序报错
    • 自定义树控件在代码生成显示问题#2507
    • redis-cluster集群模式在开启密码时启动报NOAUTH Authentication required错误 issues/I3QNIC
    • autopoi增加新属性show=true issues/I3RPDM
    • 视图给自定义按钮添加sql增强后,sql语句生效,但再次进入sql增强页面,sql语句无法显示,也就无法修改 issues/I3SP1K
    • online,下拉搜索框无法在表单提交页面使用 issues/I1VW3E
    • JS增强根据条件怎么限制不让编辑和删除呢?#2592
    • redis配置max-active为0后,前端启动时读取不到验证码#2428
    • autopoi导入excel 如果单元格被设置边框,即使没有内容也会被当做是一条数据导入#2484
    • excel 导入时,小数点后的数据会丢失 #2555
    • 自定义树控件的表单里的外键直接显示id不显示name的问题issues/I3HTFI
    • online在线表单缓存与数据库不一致的问题#2561
    • j-upload 组件无法接收父组件传值#2529
    • cron表达式解析失败#2569
    • 【报表设计器】地图使用静态数据无变化#2528
    • JEditableTable,当 type=popup 时,popup里面的数据排序问题 #2545
    • JEditableTable的setValues方法,被赋值的列如果为file、upload类型,会提示找不到当前列 issues/I3OKKH
    • JVxeTable组件的拖拽排序功能异常 #2551
    • Online内嵌风格子表访问授权问题修复
    • Online组合报表无法选择图表(分页问题)
    • Online表单同步数据库报错 Could not parse mapping document: null
    • Oracle数据库原类型是nvarchar2 但是同步后变成varchar2
    • Excel 导入注解name包含下划线抛出空指针异常 #2004
    • 用户名称检查有安全漏洞,可以字典猜测破解密码 #2362
    • Nginx会忽略租户tenant_id,建议把下划线改成-号 issues/I38V6W
    • BindingResult无法使用 #2219
    • nacos分组配置问题 #2355
    • 积木报表sql数据集,带参条件解析错误 #2306
    • 升级2.4.3后,微服务网关路由更新bug issues/I3CNED
    • OnLine报表ref属性链接页面,由于在调用页面翻页,导致被ref的页面为空,其实是有数据的 #2315
    • 打成jar 使用 -Dfile.encoding=utf-8启动控制台和日志文件乱码 I3AVHC
    • 微服务模式部署下,nacos的账户密码如果不使用默认提供的nacos/nacos,会导致gateway读取路由信息失败 #2375
    • JImageUpload组件单张无法预览 #2382
    • online报表配置如何实现多租户 issues/I3CL75
    • 用户管理模块新增、编辑接口事务不一致,会导致脏数据产生 #1812
    • FormTypes.popup重复点击会将子表值置空 #2117
    • 日志里把具体的文件加上吧 issues/I3BJDQ
    • minio上传文件,文件名包含点的时候拼接文件名有问题 issues/I3CLFL
    • 一对多代码生成(ERP模板)生成的子表实体ApiModel注释中value为附表名称 #2365
    • Online表单无法按部门授权 #2342
    • redis监控的token获取了2次不同的值,导致后台报错 #2405
    • 关于多租户的数据权限配置问题 #2425
    • 打开报表设计器报错 #2438
    • 代码生成器导入数据库表错误 #2456
    • macOS 环境 SnowflakeIdWorker#generateId 初始化时空指针#184
    • online报表,给某一列设置合计属性后,每页会多出一条空行,导致分页总数合计不对,还会导致ref子页中的数据每页都加一个空行 #2390
    • 内嵌子表导入异常 issues/I3ESNH
    • JEditableTable 查看时,内容过长显示有问题 #2435
    • JEditableTable 当 type: FormTypes.popup,时 能不能向组件内传参数 issues/I3BXH3
    • 配置minio上传,遇到没有后缀的文件名会报错 #2434
    • JVXETable在列表popup是否支持传参? issues/I3J1UY
    • 通过扩展参数设置popup是否支持多选,Jpopup.vue未使用扩展参数issues/I3IA7Z
    • ONLINE表单 修改添加 没有数据的时候,sql异常 issues/I3HTON
    • online表单开发查询配置下拉搜索框,placeholder会出现‘请选择qq’ #2500
    • JVXETable获取当前行,row参数出现undefined #2501
    • online 表单,选中行,操作后,选中行让然存在,需要手动点清空issues/I3FLJ3
    • 不支持mariaDB数据库,近期会考虑支持吗issues/I3QID1
    • 文件上传建议可根据当前业务类型分类文件 #2531
    • 提交一个在线代码生成的bug issues/I3EL13
    • 账号安全问题 #2449
    • 请教为什么要限制同个任务类名 #2460
    • JDictSelectTag选择后不能触发验证 #2472
    • 附件下载的文件报400 issues/I3NQQW
    • 代码生成树表haschild存在问题,为什么不在add时就给haschild赋值为0#2558
    Source code(tar.gz)
    Source code(zip)
  • v2.4.3(Apr 6, 2021)

    升级日志

    此版本为优化易用版,重点重构了前端和代码生成器模板,将Form升级为FormModel支持双向绑定简化前端;另外优化了微服务的使用模式,提供简易机制,进一步降低了微服务的使用难度;

    前端升级
    • 重构前端大部分页面,将表单升级为FormModel模式(涉及常见案例、系统管理等)
    • 重构代码生成器全部模板,生成的表单默认为FormModel模式
    • 新增示例:一对多JVxeTable
    • 新增示例:JVXETable 省市县联动
    • Online表单,高级查询按钮布局问题
    • Online视图,恢复支持JS增强等功能
    • 登录密码错误修改验证码
    后台升级
    • 进一步简化微服务开发模式,提供一系列的简易工具
    • 单体和微服务 docker compose 脚本优化
    • 代码生成器的数据库配置,改造默认走平台的配置
    • Excel多sheet导出导入例子
    • 升级autopoi到1.3版本,poi升级到4.1.2
    • 升级jimureport到1.2.1-RC版本,低代码报表优化
    • 提供单体和微服务模块自动创建骨架archetype
    • 登录后清除redis中验证码
    • 重复check接口,sql注入检查
    • 代码生成器,开关组件进一步优化
    • 积木报表支持系统变量
    • Excel图片导出报错,本地upload情况下,ImageBasePath未设置
    • TomcatServletWebServerFactory重复注册问题处理
    • 支持达梦数据库
    • 取消jeecg-boot-starter-redis模块,合并到core中
    • 消息推送采用redis发布订阅模式,支持集群
    • nacos server本地化采用jar方式启动,简化开发省掉nacos的安装
    • 删除jeecg-cloud-example,合并到jeecg-cloud-system-start
    • 修改xxljob执行器默认端口,防止默认9999端口冲突
    • 集成xxl-job-2.2.0之后,注解没有删掉,导致启动报端口冲突
    • 进一步优化重构分布式锁
    • 新增几个单元测试类
    Issues处理
    • Excel 导入注解name包含下划线抛出空指针异常 #2004
    • 导出图片到Excel,按照官方文档,导出报错 #1811
    • 账号登录安全问题 #2207
    • excel 导出分隔符问题 #1126
    • 模板导出功能,#fe: 横向遍历怎么用不了呢 {{#fe:maplist t.xxx}} 是这样格式吧? #2139
    • Autopoi的@Excel注解 disctTable、dicCode dicText 导出解析不成功 #2158
    • SQL注入漏洞 #2201
    • 建议优化Online表单开发代码生成器不能成功生成代码的错误日志 #2234
    • 积木报表API请求获得不到查询条件 I2NXEV
    • 字典导入window下能可 linux部署得环境下出错 I35AUG
    • 绕过验证码漏洞 #2227
    • pop选择器列主键问题 I29P9Q
    • 最后一页中分页删除问题 #2239
    • 集成xxl-job-2.2.0之后,注解没有删掉,导致启动报端口冲突 #2228
    • 常见案例=>JVXETable示例(NEW)=>普通示例页面下高级示例 前端页面报错误! #2134
    • 在数据库 mysql8.0.15 上报错 #2268
    • 微服务Feign调用Provider报错Token为空的问题 #2263
    • 教程里关于feign调用拿不到token的问题 #2244
    • swagger密码访问不生效 #2253
    • online报表中字段类型为长整形时,合计的显示能否不加.00,数值类型的时候加上.00 #2279
    • feign 动态创建client,拦截器执行多次 #2275
    • 有个小Bug I3854N
    • feign调用 500错误 I37PFB
    • 微服务化后-cloud-demo项目导出无法和字典关联 I37PNL
    • FeignConfig重复 #2286
    • 部门管理员添加上级用户时缺失负责部门列 I2SDU1
    • 批量导入部门以后,不能追加下一级部门 #2245
    • 关于测边菜单遮挡内容问题详细说明 #2255
    • 屏幕适配 #2224
    • Online表单开发功能,附表外键配置非主表主键问题 #2281
    • 用online报表配置设计的报表,每页会多出一条空行,导致分页总数合计不对 #2242
    • 数据量大时导出不能自动分批#2243
    • 部门表太大导致的问题 #2204
    • 请求url里面带分号,绕过token校验 #2256
    • 字典【是否启用】按钮会错误的保存状态 #2311
    • 微服务部署下代码生成失效,单体模式下代码生成可用 #2324
    • system服务和demo服务有办法同时使用xxl-job吗 #2313
    • PermissionDataAspect.filterUrl() 方法有代码bug #2325
    • 省市区组件无限递归 #2335
    Source code(tar.gz)
    Source code(zip)
  • v2.4.2(Mar 4, 2021)

    升级日志

    此版本为深度测试版本,历经一个月的集中测试,主要修复已知bug和强化功能,重点升级了代码生成器、集成了积木报表,提供在线报表设计工具。积木报表: http://jimureport.com/plan

    代码生成器升级
    • 数据库兼容性深度测试、简化生成代码、丰富组件的支持
    • 支持自定义树生成组件生成
    • 支持高级查询的下拉多选、下拉搜索的生成
    • 在oracle下代码生成报错处理
    • ERP风格 子表配置唯一校验,输入时报错
    • 一对多代码生成,子表未清空子表数据(导致数据混乱问题)
    • 支持更多校验规则生成
    • 大字段Blob类型支持强化
    • 简化生成的VUE代码,自定义组件改成全局注册
    • 生成目录选择缓存失效问题
    后台功能升级
    • 集成了积木报表JimuReport
    • 重构分布式锁模块
    • 升级minio版本到8.0.3
    • 升级autpoi版本到1.2.5
    • 解决第三方登录justauth新版依赖 okhttp版本冲突--
    • 上传文件名中文转字母逻辑删掉
    • 支持逗号的等于查询 如(下拉多选)
    • SpringBoot监控请求Httptrace不见处理
    • sysUser中rel_tenant_ids为空时,可能导致MybatisPlusConfig中出现空指针异常
    • 【高级查询】 oracle 日期等于查询报错
    • 导入Excel校验类FieldPresenceUtil 迁移到autopoi中
    • 【单元测试】新增几个单元测试类
    • 消息推送Websocket加入redis发布订阅功能,支持集群
    • 字典数据值维护功能,添加重复校验
    • sys_gateway_route表字段persist 命名不规范修改
    • 【分类字典】子节点全部删除后,父节点仍然显示+ 点开后无子节点问题
    • 日志保存失败,导致业务操作也失败问题
    • 多数据源配置,多增加了几种数据库类型
    • 职位功能导入失败处理
    前端UI升级
    • 删除无用的组件,简化代码
    • 自定义组件改成全局注册,省去了组件手工引入
    • 升级ant-design-vue到最新1.7.2
    • CardList列表加载不出来处理
    • 消除路由编辑界面添加path报错
    • 用户编辑头像为空的情况下,无法改头像
    • 系统公告,查看均可编辑保存成功修改
    • 上传组件样式问题修复
    • 数据字典禁用和正常区别开,添加背景颜色
    • 退出登录清空缓存的用户信息
    • 【严重问题】首页的系统设置没了
    • 省市区组件导致切换页面浏览器报错
    • 唯一校验为空页面出现异常代码问题
    • popup支持带逗号查询
    • 下拉搜索性能优化,支持指定页数查询
    • 高级查询popup支持多选
    • JVxeTable匹配删除按钮权限控制报错
    • JVxeTable新增组件 选择用户选择部门
    • 字典常用js方法改成全局注册$initDictOptions$filterMultiDictText$filterDictText$filterDictTextByCache
    • 错误处理Error in render: "TypeError: Cannot read property 'style' of undefined"
    • 首页风格,暗黑风格还原
    低代码功能升级
    • Online表单一对一支持设置默认值
    • Online表单提交之前新增 beforeSubmit方法
    • Online功能测试,行编辑组件默认换成JVxeTable(支持切换)
    • Online视图支持唯一校验规则
    • Online视图去除增强配置按钮
    • Online 树形列表支持滚动条
    • Online功能测试数据默认排序改成id
    • Online popup支持翻页多选
    • Online文件上传上传失败提示并删除无效预览
    • 【Online表单】校验字段-验证规则 6-16位数字实际可输入18位数字 单表及行编辑
    • 【Online表单权限】行编辑的问题,一对多子表,子表'新增' '删除' 按钮未控制
    • 【Online】sql增强 java增强配置页面修改成列表方式
    • 【Online】行编辑组件JVxeTable, 日期、时间控件长度修改
    • 【Online】报表排序bug优化
    • 【Online】树形列表bug修改后,还是显示原来值 暂时去掉缓存
    • 【Online】表单行编辑组件,支持选择人、选择部门等组件
    • 【Online报表】sqlserver下配置oracle多数据源,时间查询报错
    Issues处理
    • 【online】2.4版本更新后子表onlChange方法不生效 #2059
    • Jackson配置WRITE_NUMBERS_AS_STRINGS 之后,页面崩溃,精度丢失问题没法解决#2075
    • 2.4Redis工具存入key,value取不出来 #2071
    • 2.4 表单js增强 主表修改子表无法进入return语句块中 issues/I2818V
    • 代码生成器bug反馈 issues/I256ZE
    • online表单生成视图超过2个报错#2080
    • 前端增加用户模块 密码的校验规则没有生效#2063
    • 2.4在线表单导入配置java增强,不会抛出异常,即使导入不成功也不会。#2070
    • 注册用户总是提示“手机验证码错误” #2081
    • 当用户单租户多部门时存在未setTenant的BUG #2053
    • 设置菜单消失#2079
    • 2,4版本问题如果url中有包括中文(已编码),就报400 Bad Request #2069
    • j-search-select-tag 使用下拉搜索框 加载字典数据 因数据太多 选择点击时 慢 甚至卡死 请求优化方案 #1924
    • popup多行错位 #2093
    • 列表自定义项,弹出的popover会随columns的个数及title长度而不合理地变宽#2030
    • 生成的表单复制到项目内,如果菜单配置为一级菜单后,各一级菜单切换时,页面刷新有问题#1843
    • 首页点击其他菜单跳转页面时,2个页面会出现同时出现的问题 #1893
    • 附表如何添加部门、用户等基础资料的选择 #2118
    • MySQL 8 persist关键字问题报错 #2140
    • 于SpringBoot 请求参数包含 [] 特殊符号 返回400状态#1795
    • 上传图片报错#2090
    • 正式环境Redis的keys问题 #1778
    • 高级查询组件中无法关闭popup#2099
    • Online控件默认值表达式 使用 系统上下文变量 有bugissues/I28TH9
    • 代码生成器 生成的一对多表单关闭modal 后没有重置子表数据 点击新增后 会显示上一次编辑的表单数据issues/I29E6M
    • hutool包冲突 issues/I2CFAS
    • 后端省市区ProvinceCityArea读取json文件bug #2179
    • 系统通知,报错#2153
    • 2.4版 jeecg-boot-module-demo下的SampleTest测试运行不起来 #2216
    • 建议sys_gateway_route表字段persist修改一下issues/I281X6
    • online 代码生成的vue页面和online功能测试中的不一致。在功能测试中商品分类是树状下拉框,生成代码后变成input框了。 #2044
    • 列表自定义项,弹出的popover会随columns的个数及title长度而不合理地变宽 #2030
    • 2.4版本在线生成主附表 生成有误 issues/I29ZGO

    如果你是老版本JeecgBoot,也需要积木报表,可以手工集成 ,参考文档 http://report.jeecg.com/2078875

    Source code(tar.gz)
    Source code(zip)
  • v2.4.1(Dec 17, 2020)

    严重问题

    • 系统设置菜单消失 #2079
    • 2,4版本问题如果url中有包括中文(已编码),就报400 Bad Request #2069
    • 解决前端增加用户模块 密码的校验规则没有生效 #2063
    • 解决QRTZ_*表区分大小写的问题
    • 通知公告发送指定人,admin收不到信息
    • 解决SqlServer下online表单普通同步,会删除了表,未保留数据
    • gateway路由采用database方式加载,失败问题解决
    • 解决oracle数据库,代码生成报错的问题
    • 解决性能监控(请求追踪、tomcat信息)菜单,打开报错的问题

    升级代码生成器

    • 支持自定义下拉树的生成
    • oracle下 三级联动配置了,导致生成报错
    • 高级查询支持下拉搜索和下拉多选
    • 树表单支持更多的控件生成

    其他问题

    • 单体和微服务启动类,加注释说明
    • system微服务启动类更名,方便区分单机和微服务
    • 解决2.4版本JVxeTable更新后子表onlChange方法不生效 #2059
    • 上传文件中文文件名转为拼音、Long类型精度丢失问题 issues/I24KXI、达梦数据库兼容修改
    • demo示例设置展示列效果优化
    • Failed to execute 'getComputedStyle' on 'Window
    • 字典明细禁用样式
    • 上传图片组件大小不一致问题
    • 注册用户总是提示“手机验证码错误” #2081
    • 接口测试支持更多请求方式
    • 菜单删除确认按钮样式变形问题
    • 示例模板优化TableInnerEditList.vue
    • 当用户单租户多部门时存在未setTenant的BUG #2053
    • 增量升级脚步语法错误修复
    Source code(tar.gz)
    Source code(zip)
  • 2.4.0(Dec 1, 2020)

    升级日志

    此版本重构很大,重点升级了微服务模块,完善了微服务所需的各个组件,实现了微服务方案落地( 新版可一秒变微服务); 同时代码生成器也做了重点升级,更加智能; 另外后台所有请求统一了前缀,代码重构较大、 前端代码目录和启动模式也做了较大修改, 所以升级会出现不兼容情况,请注意!!! 单体切换为微服务文档 2.4+ http://doc.jeecg.com/2043906

    微服务升级
    • 升级SpringCloud到Hoxton.SR8版本
    • 升级SpringCloudAlibaba到2.2.3.RELEASE版本。
    • 提供更简单的微服务和单体切换机制,1秒切换。
    • 提供丰富的启动Starter:xxl-job分布式定时任务、Redisson分布式锁、rabbitmq消息队列、消息总线等
    • 路由网关升级:支持三种模式加载路由配置(yml、nacos、database)
    • 路由网关升级:支持熔断/降级/限流全局配置
    • 配置中心升级:默认采用nacos作为配置中心,简化配置
    • 提供服务监控模块
    • 提供微服务示例代码模块
    • 路由配置界面换了新界面,操作更方便
    代码生成器升级
    • 支持默认值生成
    • 支持高级查询的生成
    • 支持禁用状态(只读)生成
    • 支持上传图片和上传文件控制数量
    • 支持表单列数设置生成
    • 默认单表、一对多、树支持详情页面的生成
    • Online popup支持翻页多选
    • 支持开关控件的生成
    Online低代码升级
    • Online报表支持合计功能
    • Online报表支持多表头设置
    • Online表单导出支持高级查询
    • Online表单同步数据库,支持数据库密码加密
    • Online表单上传文件图片控件,支持上传个数设置
    • Popup组件,支持编码方式传递动态参数
    • Online表单功能测试,行编辑表格换成JVxeTable提升性能
    • Online报表配置界面,换成JVxeTable提升性能
    • Online表单恢复大组件(富文本、MD编辑器、代码编辑器)支持
    • Online表单依赖JS进一步压缩变小
    平台架构升级
    • 前端改造成多环境配置(启动配置模式变了)
    • 前端代码目录结构做了调整,代码更清晰易懂
    • 在线swagger文档换为knife4j,UI更漂亮功能更强大
    • 在线数据源和平台数据源,密码支持加密设置
    • 第三方登录做重构,支持一个用户对应多个第三方账户
    • 重构请求,system模块所有请求统一以/sys/开头,demo模块统一以/mock开头
    • 系统框架中的安全漏洞问题加强
    • 升级底层依赖
    • springboot => 2.3.5.RELEASE
    • mybatis-plus 3.3.2 => 3.4.1
    • druid 1.1.17 => 1.1.22
    • jwt 3.7.0 => 3.11.0
    • shiro 1.5.3 => 1.7.0
    • fastjson 1.2.72 => 1.2.75
    • mysql-connector-java 8.0.20=>8.0.21
    • dynamic-datasource-spring-boot-starter=> 3.2.0
    • autopoi => 1.2.2
    Issues处理
    • 谷歌浏览器,JEditableTable输入校验提示框位置偏移 #2005
    • 同步数据库,对于一些关键字的表名 实际并没有创建成功 #1977
    • 选择部门弹出框超出屏幕 #1995
    • 【BUG】两个online报表之间跳转。排序后排序条件未清空造成报错 #1822
    • JEditaTable,子表默认添加一条数据,addDefaultRowNum设置无效 #1930
    • AutoPOI(Excel工具)一对多导出needMerge 有某条数据对应数量小于2时报错 #1840
    • Excel导出断点查了到的是一个date类型的字段(XXtime)没有赋值 issues/I249JF
    • 一对多导出报错 issues/I1YH6B
    • 省市区组件校验必填配置无效 #1902
    • Long类型精度丢失问题 issues/I24KXI
    • online下拉多选框,搜索时只字典code进行搜索不能通过字典text搜索 issues/I1WMHB
    • 组件 JSelectDepart.vue不是默认id时新内容编辑问题issues/I247X2
    • 控件默认值是“#{sysUserName}”,但是功能测试时控件没有默认值issues/I1QEMS
    • ERP模板界面,如果超时,点击重新登录,无法跳转到登录界面issues/I1PQ0W
    • 在线表单开发中数据表的某一字段的默认值设为#{sysUserName}时,无法获取到值。issues/1639
    • 控件默认值#{sysUserName}无法显示issues/1544
    • Online表单开发,点击“新增”按钮,是否树:选择是,页面控制台报错 issues/I1BHXG
    • 2.2.1的ERP模板不可用 issues/I1OAM9
    • 关于在线开发中的表单开发和报表配置的问题issuse/I1NV8M
    • Bug:2.2.1版本 Online排序功能失效issues/1450
    • 下载最新开源代码,本地测试,online表单开发,勾上“是否排序”,页面无排序功能issues/I1N6Z1
    • controller方法参数列表中带有HttpServletRequest类型参数,执行完成后,保存日志报错issues/1394
    • Bug:如果请求参数有request,@AutoLog自动日志 会报异常issues/1413
    • radis缓存未更新 导致 修改主表,子表关联数据未更新issues/1436
    • 登录登出日志没有记录人员issues/I1NBZO
    • Online表单开发,建议增加时间控件issues/1362
    • online前端模板变量有误issues/1470
    • 内嵌子表单显示字段越多,多选框及其序号宽度也会增加issues/1442
    • 建议:优化架构issues/1377
    • 自定义组件,建议支持多条件查询issues/1433
    • popup多选的问题issues/I1OERG
    • components文件夹Table组件showPagination参数问题issues/1467
    • 富文本组件在tab页面切换的时候失效issues/1462
    • 定时任务调用 SysBaseApiImpl.addLog 记录日志报错issues/1472
    • 建议升级shiro依赖 Apach Shiro官方披露其cookie持久化参数rememberMe加密算法存在漏洞issues/1473
    • Apache Shiro权限绕过issues/1516
    • 优化建议:/thirdLogin/{source}/callback 接口在签名校验失败时返回失败的标识码issues/1441
    • online表单如何指定字段进行排序 或是否支持多个字段进行排序 issues/1411
    • 子表怎么修改控件长度issues/I1P2UM
    • JEditableTable.vue卡顿原因之一buildPropsissues/1177
    • JEditableTable 用 slot的形式绑定一个JTreeSelect 如何实现双向绑定issues/984
    • 谷歌浏览器开发者模式下,点击屏幕调试后左侧菜单栏收起,且折叠图标失效issues/1584
    • 前端问题issues/1602
    • 漏洞:其他部门可以新增管理员角色issues/1538
    • jar 包上传到服务器后 autopoi 读取不到excel模版文件issues/1505
    • 左侧菜单栏缩放窗口后无法显示issues/1498
    • 怎么对表格和编辑表格的表头进行自定义样式修改issues/I1RBGF
    • online-导入数据库表issues/I1R43G
    • 顶部导航,偶尔会无法显示收起按钮issues/I1FKIP
    • side menu响应式有bugissues/1619
    • 高级查询构造器条件值是下拉框并且下拉框项目较多时检错报错issues/1517
    • 自定义控件: j-image-upload 问题issues/I1PRAE
    • 数据权限为,单位A到Z的人员只能增删查改自己单位的录入的数据,单位A到Z的上级甲可以查看单位A的数据并修改。sys_org_code会更新到更新人所属部门issues/I1PRTU
    • 支持自定义sql 查询条件 引入#{sys_user_code} 等用户查询条件 能否匹配上权限数据issues/1547
    • 配置数据权限为包含时,条件为多个时,sql语句报错issues/1541
    • 【bug】postgresql 查看已删除用户类型错误issues/1642
    • 前端切换标签不会保存原有状态及数据issues/1369
    • 导出excel实体反射,时间格式转换错误issues/1573
    • 表单开发页面bugissues/I1RMJA
    • 加入多租户管理后数据表无法正常更新issues/1640
    • 表单主附表设计issues/1481
    • 配置字段href,跳转页面issues/I1QP0Y
    • excel中的数据使用函数计算的列导入报错 Cannot get a text value from a numeric formula cell.issues/I1QDHN
    • 如果进行在线表单开发的一对多对多的设计?issues/I1PEB2
    • 登录页面错别字issues/993
    • 在线文档中不能支持对List的入参 issues/1246
    • online表单开发 填写表明时只要数据库中有一个库中存在这个表就会提示表名已存在issues/I1TWWK
    • online 表单开发 表明已经存在issues/I1TWOO
    • Online表单开发,普通同步报错issues/1565
    • Online表单开发(表名已存在)issues/1665
    • 前端页面放开个人页后console报错issues/1577
    • 跨域问题issues/I1TAAP
    • eidtTable的值改变事件issues/I1N3H1
    • 2.2.1版本bug,默认主题父子表生成的代码,如果先点击编辑,后点击新增,新增页面明细上会有之前编辑页面上的数据issues/1454
    • JS增强获取表单字段为undefinedissues/1388
    • 表格合计功能bugissues/1399
    • radis缓存未更新 导致 修改主表,子表关联数据未更新issues/1436
    • JSelectBizComponent 组件存在bugissues/1425
    • online表单下拉选择,校验字段,字典Table 写上where条件后,在线测试没问题,生成代码后,出现sql注入问题issues/1423
    • JEditableTable样式问题issues/I1LNK6
    • Result.okissues/1487
    • 隶属多个部门,登录页面输入正确,点击登录后,弹出部门选择,不选,直接刷新网页,直接进入dashboard了issues/1449
    • 二级下拉联动组件 一级只出来一个值issues/1652
    • 多租户环境下,导入无法获取租户idissues/1647
    • 消息模板建议使用freemarkderissues/1610
    • online开发href跳转到其他表单对应的详情页issues/1480
    • v2.2.0版本,按钮type为danger时,看不到文字issues/1286
    • 后台报空指针issues/I1OAY9
    • 按钮/权限issues/I1OUGU
    • Online配置的菜单,怎么查看操作日志issues/I1MQLC
    • JEditableTable样式问题issues/I1LNK6
    • 聚合路由错误issues/1444
    • 数据字典项 Redis 缓存冲突issues/1522
    • dictText名称解析报错,想问下这个问题如何解决,需要解析的表是单表(树)issues/1634
    • 消息模板类型建议添加PushPlusissues/1611
    • 怎么添加清除功能issues/I1QYF2
    • JeecgBootExceptionHandler无法捕获AuthenticationExceptiony异常issues/I17UAS
    • 如果是tomcat部署项目的话,系统监控-》性能监控-》tomcat信息查询不到issues/I181YO
    • idea运行服务,Tomcat监控信息session值为0issues/I1C44Z
    • JEditableTable帮助文档没有更新(找不到FormTypes.file)issues/I1OL4S
    • edit表格加的插槽怎么做表单验证,或者自带的FormTypes.input怎么做自定义事件issues/I1OVFB
    • online表单下拉选择,校验字段,字典Table 写上where条件后,在线测试没问题,生成代码后,出现sql注入问题issues/1423
    • editTable使用问题issues/I1M48Q
    • 登录系统之后,用户如果没有权限,会直接进入404,这个怎么能设置登录进来只能默认打开的只有首页?issues/I1O6D1
    • online表单开发,生成主附表,配置菜单+auto,无权限访问(操作)issues/I1PEXA
    • 实体内有多个表字典注解的时候报错,导致翻译失败issues/1534
    • AutoPoi多表头导出,会多出一列空白列issues/1513
    • tinymce第一次打开正常,页面切换后再切换回来内容空白且无法编辑issues/1507
    • 抽屉式界面下方有一点奇怪的显示issues/1532
    • 头部菜单样式,右上角图标颜色重合issues/I1RJ1Y
    • 弹窗全屏组件issues/I1TL8O
    • 【bug】in 类型多值查询 不适配postgresql issues/1671
    • QueryGenerator.installMplus()未处理@TableField(exist = false)导致构建查询出现column "xxx" does not existissues/1680
    • Online在线表单开发,在查询配置中勾选“是否启用”,将会取消选中“页面配置”中的是否查询选项issues/1669
    • online表单开发功能问题issues/1654
    • online开发 popup 怎么显示名称 存储IDissues/1335
    • 返回值问题:this.$refs.editableTable.getValuesSync()issues/1675
    • that.changeOptions在表单初始化的时候无法初始化下拉框数据issues/I1TGVX
    • JAVA访问权限控制 无法使用的问题issues/1740
    • online表单开发的权限控制使用报错issues/1733
    • online表单开发中权限控制的勾选框没反应issues/1741
    • 找不到jeecg-cloud-module在其子目录config下有两个配置文件 issues/1754
    • 切换微服务后无法使用Online相关功能issues/1760
    • 自定义组件-用户多选组件自定义查询条件问题issues/1718
    • 缺少表结构eoa_mailbox_infoissues/I1VN0E
    • 数据导出信息与列表字段控制逻辑不一致issues/I1M4FZ
    • jeecg-cloud-application-beta.yml有配置重复问题issues/1775
    • JPopup 是否支持动态参数?issues/1772
    • Mybatis-plus的IdType配置问题issues/1789
    • [popup相关]如何实现带动态参数的报表在popup中使用issues/1666
    • 当进入登录页时,有一定几率出现验证码错误issues/1714
    • 大屏设计下的两个示例没有样式和JSissues/1799
    • online表单开发-同步数据库异常issues/I1WDT5
    • 选取职务名称出现全选issues/1753
    • 切换导航模式,导致菜单栏丢失issues/1763
    • TableField引起的QueryGenerator.initQueryWrapper()生成sql语句where 字段没有替换issues/1750
    • 登入生成token的小bugissues/I1XOVS
    • 部门选择框bugissues/I1X4DT
    • SYS_USERS_CACHE_JWT 缓存用户jwt,部门或人员信息变更时没有更新对应的缓存issues/I1XOD6
    • 内嵌子表风格列表页面;点击加号后操作下面错位如果把操作那里的fixed:"right",注释掉就没有问题;但是锁定操作就没有了;我感觉应该能完善下issues/I1WHR0
    • vue前端 /public/index.html js路径问题 (小bug)issues/1844
    • 内嵌子表风格生成的代码,子表数据不显示issues/1782
    • 切换tab会刷新页面issues/I1TFQT
    • 拦截器冲突 ,更新失效问题issues/I1SMY7
    • 内嵌子表主题(一对多) 生成 菜单 问题issues/1769
    • 360浏览器兼容模式IE11内核完全进不去,一直处于加载状态issues/1862
    • 路由缓存问题issues/842
    • OL一对多 移除或删除附表后主表生成代码报错--表信息加载失败issues/1773
    • 菜单是否缓存路由问题issues/I1Y0K6
    • j-image-upload图片组件单张图片详情回显空白issues/1810
    • 【popup】如何控制popup只能选择一条记录issues/1866
    • 切换导航模式,导致菜单栏丢失issues/1763
    • 左侧菜单栏缩放窗口后无法显示issues/1498
    • 使用前端缓存keep-alive造成的bugissues/827
    • 导出参数没有高级查询参数issues/1860
    • 官方代码中没有找到【queryAllAuth】【queryUserAuth】相关代码issues/1879
    • 模糊查询通配符问题issues/1820
    • 详情时图片显示不了issues/1779
    • 左侧边栏收缩,右侧界面不能上下滚动issues/1835
    • 如何实现JEditableTable中的POPUP 弹窗记录多选 issues/1885
    • dict_item中的item_value如果存在_字典会失效issues/1854
    • 导入Excel,随便一个Excel都能被导入issues/1756
    • sql注入 issues/1887
    • 前端页面改变浏览器窗口大小后,菜单展开按钮失效,无法展开菜单,无法操作issues/1913
    • j-image-upload控件循环图片不显示issues/1882
    • 职位/部门选择器, buttons设为false,disabled为true时,还可以点击修改issues/1876
    • 建议升级swagger-bootstrap-ui依赖版本issues/1856
    • 按部门选择用户控件问题issues/1871
    • 怎么配置测试环境和生产环境啊issues/1815
    • 所有页面都设置了缓存路由,在已打开的tab中来回切换不会刷新页面,但是新打开一个tab页面,就会刷新其他已经打开的tab页面issues/I1QLKP
    • 切换微服务定时任务有问题issues/1824
    • 数据库同步失败issues/1945
    • 系统中使用popup插件数据不刷新,需要点击查询或者刷新才可以,请问是有地方可以配置或者在哪里改?issues/1749
    • 菜单收缩为图标模式时,右侧区域滚动失效 issues/1932
    • 通配符问题 issues/1952
    • sql server数据库,表存在判断方法有问题issues/1929
    • js增强附表内置方法调用问题 issues/1819
    • 切换微服务定时任务有问题issues/1824
    • Online表单配置了下拉多选,将改字段作为查询条件查不到数据。issues/I23JY5
    Source code(tar.gz)
    Source code(zip)
  • v2.3.0(Nov 27, 2020)

  • 2.3.0(Oct 30, 2020)

    升级日志

    里程碑SpringCloud微服务版,支持单体和微服务自由切换;提供新行编辑表格JVXETable,轻松满足各种复杂ERP布局,拥有更高的性能、更灵活的扩展、更强大的功能。 单体升级为微服务文档: http://doc.jeecg.com/1867450

    重大功能
    • 1、JAVA后端项目重构,提供轻松切换微服务SpringCloud方案,支持单体和微服务自由切换,十分钟搞定
    • 2、Online表单权限配置智能化,让权限授权更加简单易用。
    • 3、 新行编辑表格组件 JVXETable 推出,更强大的性能、支持灵活自定义组件,支持各种复杂业务场景,支持各种复杂布局,轻松满足ERP项目复杂布局要求、提供各种复杂布局场景示例。
    • 4、Token安全漏洞严重问题解决
    平台优化升级
    • JAVA后端结构改造支持微服务,增加SpringCloud Alibaba支持,支持微服务和单体自由切换

    • swagger接口返回结果支持泛型

    • JVXETable新列行编辑表格组件,并提供多套JVXETable示例

    • 升级mysql驱动依赖

    • 登录登出日志记录人员

    • 实体类主键策略修改,IdType.ID_WORKER_STR全部改为IdType.ASSIGN_ID

    • 提供服务器端docker发布脚步,docker-compose-server.xml

    • 【代码生成器】新增一套模板:一对多tab风格

    • 【代码生成器】树列表支持条件查询,支持批量删除

    • 【代码生成器】生成代码支持按列排序

    • 【日志改造】日志按模块类型记录信息

    • Apache Shiro漏洞问题解决、代码生成器升级依赖

    • 用户管理,逻辑删除字段类型是int,带引号会导致数据库不兼容处理

    • swagger-ui 保持登录状态修改了,放开Swagger-ui

    • 消息推送采用模板消息freemarker解析模板

    • 用户表增加设备id,支持uniapp移动端消息推送

    • 开源反馈多租户系列问题处理

    • 行编辑示例合计功能bug修改

    • 【gitee#I1N3H1】eidtTable的值改变事件

    • JSelectBizComponent组件切换页数值问题修复

    • 增加下拉搜索字典项监听改变事件

    • 左侧菜单栏缩放窗口后无法显示 issues#1498

    • 修复路由传参的值传送到jinput框被前后各截取了一位 #1336

    • [LOWCOD-774]切换顶部模式显示问题

    • popup 支持翻页多选bug

    • 登录文字写错修正

    ONLINE 优化升级
    • Online 一对多ERP风格权限存在问题
    • Online操作加一些操作日志
    • Online字典表加权限控制机制逻辑
    • Online导入表单功能,排除那些表前缀支持配置
    • Online权限改造,更加简单易用
    • Online 树列表删除时删除子节点数据
    • Online 表单,只修改字段的默认值,执行同步不会变更数据库逻辑修复
    • Online 表单添加loaded事件
    • Online 视图按钮权限问题
    • Online 新增处理子表是否只读
    • Online 表单子表唯一校验支持
    • Online 子表支持修改控件长度 【gitee/I1P2UM】
    • Online菜单权限 内嵌风格 逻辑缺失
    • Online 数据权限问题 in查询问题LOWCOD-782
    • Online表单开发,普通同步报错 LOWCOD-830
    • Online 新增时间字段控件
    • Online 查询默认值未生效修复
    • Online href 跳转页面支持参数接收
    Issues处理
    • 控件默认值是“#{sysUserName}”,但是功能测试时控件没有默认值issues/I1QEMS
    • ERP模板界面,如果超时,点击重新登录,无法跳转到登录界面issues/I1PQ0W
    • 在线表单开发中数据表的某一字段的默认值设为#{sysUserName}时,无法获取到值。issues/1639
    • 控件默认值#{sysUserName}无法显示issues/1544
    • Online表单开发,点击“新增”按钮,是否树:选择是,页面控制台报错 issues/I1BHXG
    • 2.2.1的ERP模板不可用 issues/I1OAM9
    • 关于在线开发中的表单开发和报表配置的问题issuse/I1NV8M
    • Bug:2.2.1版本 Online排序功能失效issues/1450
    • 下载最新开源代码,本地测试,online表单开发,勾上“是否排序”,页面无排序功能issues/I1N6Z1
    • controller方法参数列表中带有HttpServletRequest类型参数,执行完成后,保存日志报错issues/1394
    • Bug:如果请求参数有request,@AutoLog自动日志 会报异常issues/1413
    • radis缓存未更新 导致 修改主表,子表关联数据未更新issues/1436
    • 登录登出日志没有记录人员issues/I1NBZO
    • Online表单开发,建议增加时间控件issues/1362
    • online前端模板变量有误issues/1470
    • 内嵌子表单显示字段越多,多选框及其序号宽度也会增加issues/1442
    • 建议:优化架构issues/1377
    • 自定义组件,建议支持多条件查询issues/1433
    • popup多选的问题issues/I1OERG
    • components文件夹Table组件showPagination参数问题issues/1467
    • 富文本组件在tab页面切换的时候失效issues/1462
    • 定时任务调用 SysBaseApiImpl.addLog 记录日志报错issues/1472
    • 建议升级shiro依赖 Apach Shiro官方披露其cookie持久化参数rememberMe加密算法存在漏洞issues/1473
    • Apache Shiro权限绕过issues/1516
    • 优化建议:/thirdLogin/{source}/callback 接口在签名校验失败时返回失败的标识码issues/1441
    • online表单如何指定字段进行排序 或是否支持多个字段进行排序 issues/1411
    • 子表怎么修改控件长度issues/I1P2UM
    • JEditableTable.vue卡顿原因之一buildPropsissues/1177
    • JEditableTable 用 slot的形式绑定一个JTreeSelect 如何实现双向绑定issues/984
    • 谷歌浏览器开发者模式下,点击屏幕调试后左侧菜单栏收起,且折叠图标失效issues/1584
    • 前端问题issues/1602
    • 漏洞:其他部门可以新增管理员角色issues/1538
    • jar 包上传到服务器后 autopoi 读取不到excel模版文件issues/1505
    • 左侧菜单栏缩放窗口后无法显示issues/1498
    • 怎么对表格和编辑表格的表头进行自定义样式修改issues/I1RBGF
    • online-导入数据库表issues/I1R43G
    • 顶部导航,偶尔会无法显示收起按钮issues/I1FKIP
    • side menu响应式有bugissues/1619
    • 高级查询构造器条件值是下拉框并且下拉框项目较多时检错报错issues/1517
    • 自定义控件: j-image-upload 问题issues/I1PRAE
    • 数据权限为,单位A到Z的人员只能增删查改自己单位的录入的数据,单位A到Z的上级甲可以查看单位A的数据并修改。sys_org_code会更新到更新人所属部门issues/I1PRTU
    • 支持自定义sql 查询条件 引入#{sys_user_code} 等用户查询条件 能否匹配上权限数据issues/1547
    • 配置数据权限为包含时,条件为多个时,sql语句报错issues/1541
    • 【bug】postgresql 查看已删除用户类型错误issues/1642
    • 前端切换标签不会保存原有状态及数据issues/1369
    • 导出excel实体反射,时间格式转换错误issues/1573
    • 表单开发页面bugissues/I1RMJA
    • 加入多租户管理后数据表无法正常更新issues/1640
    • 表单主附表设计issues/1481
    • 配置字段href,跳转页面issues/I1QP0Y
    • excel中的数据使用函数计算的列导入报错 Cannot get a text value from a numeric formula cell.issues/I1QDHN
    • 如果进行在线表单开发的一对多对多的设计?issues/I1PEB2
    • 登录页面错别字issues/993
    • 在线文档中不能支持对List的入参 issues/1246
    • online表单开发 填写表明时只要数据库中有一个库中存在这个表就会提示表名已存在issues/I1TWWK
    • online 表单开发 表明已经存在issues/I1TWOO
    • Online表单开发,普通同步报错issues/1565
    • Online表单开发(表名已存在)issues/1665
    • 前端页面放开个人页后console报错issues/1577
    • 跨域问题issues/I1TAAP
    • eidtTable的值改变事件issues/I1N3H1
    • 2.2.1版本bug,默认主题父子表生成的代码,如果先点击编辑,后点击新增,新增页面明细上会有之前编辑页面上的数据issues/1454
    • JS增强获取表单字段为undefinedissues/1388
    • 表格合计功能bugissues/1399
    • radis缓存未更新 导致 修改主表,子表关联数据未更新issues/1436
    • JSelectBizComponent 组件存在bugissues/1425
    • online表单下拉选择,校验字段,字典Table 写上where条件后,在线测试没问题,生成代码后,出现sql注入问题issues/1423
    • JEditableTable样式问题issues/I1LNK6
    • Result.okissues/1487
    • 隶属多个部门,登录页面输入正确,点击登录后,弹出部门选择,不选,直接刷新网页,直接进入dashboard了issues/1449
    • 二级下拉联动组件 一级只出来一个值issues/1652
    • 多租户环境下,导入无法获取租户idissues/1647
    • 消息模板建议使用freemarkderissues/1610
    • online开发href跳转到其他表单对应的详情页issues/1480
    • v2.2.0版本,按钮type为danger时,看不到文字issues/1286
    • 后台报空指针issues/I1OAY9
    • 按钮/权限issues/I1OUGU
    • Online配置的菜单,怎么查看操作日志issues/I1MQLC
    • JEditableTable样式问题issues/I1LNK6
    • 聚合路由错误issues/1444
    • 数据字典项 Redis 缓存冲突issues/1522
    • dictText名称解析报错,想问下这个问题如何解决,需要解析的表是单表(树)issues/1634
    • 消息模板类型建议添加PushPlusissues/1611
    • 怎么添加清除功能issues/I1QYF2
    • JeecgBootExceptionHandler无法捕获AuthenticationExceptiony异常issues/I17UAS
    • 如果是tomcat部署项目的话,系统监控-》性能监控-》tomcat信息查询不到issues/I181YO
    • idea运行服务,Tomcat监控信息session值为0issues/I1C44Z
    • JEditableTable帮助文档没有更新(找不到FormTypes.file)issues/I1OL4S
    • edit表格加的插槽怎么做表单验证,或者自带的FormTypes.input怎么做自定义事件issues/I1OVFB
    • online表单下拉选择,校验字段,字典Table 写上where条件后,在线测试没问题,生成代码后,出现sql注入问题issues/1423
    • editTable使用问题issues/I1M48Q
    • 登录系统之后,用户如果没有权限,会直接进入404,这个怎么能设置登录进来只能默认打开的只有首页?issues/I1O6D1
    • online表单开发,生成主附表,配置菜单+auto,无权限访问(操作)issues/I1PEXA
    • 实体内有多个表字典注解的时候报错,导致翻译失败issues/1534
    • AutoPoi多表头导出,会多出一列空白列issues/1513
    • tinymce第一次打开正常,页面切换后再切换回来内容空白且无法编辑issues/1507
    • 抽屉式界面下方有一点奇怪的显示issues/1532
    • 头部菜单样式,右上角图标颜色重合issues/I1RJ1Y
    • 弹窗全屏组件issues/I1TL8O
    • 【bug】in 类型多值查询 不适配postgresql issues/1671
    • QueryGenerator.installMplus()未处理@TableField(exist = false)导致构建查询出现column "xxx" does not existissues/1680
    • Online在线表单开发,在查询配置中勾选“是否启用”,将会取消选中“页面配置”中的是否查询选项issues/1669
    • online表单开发功能问题issues/1654
    • online开发 popup 怎么显示名称 存储IDissues/1335
    • 返回值问题:this.$refs.editableTable.getValuesSync()issues/1675
    • that.changeOptions在表单初始化的时候无法初始化下拉框数据issues/I1TGVX
    Source code(tar.gz)
    Source code(zip)
  • v2.2.1(Sep 13, 2020)

    升级日志

    此版本为稳定版本,主要修复2.2版本的已发现Bug和优化功能,同时提交了多租户支持代码。

    功能优化
    • 新功能: 多租户代码提交,平台默认支持多租户
    • 新功能: JeecgCloud微服务版本对应的路由网关配置页面提交
    • 新功能: 新增图片剪切示例代码
    • docker部署改造,换成docker-compose方式
    • 升级底层依赖到最新 mybatis-plus、fastjson、autopoi、hutool-all
    • 代码生成器,列表支持详情页面(表单拆分module、form方便对接流程)
    • 代码生成器,组件完善,表单支持多列生成(根据online配置生成)
    • 代码生成器,弹窗module宽度根据online列数适配
    • 代码生成器,抽屉表单样式优化
    • 代码生成器,生成的列表,操作列默认没固定
    • 优化定时任务功能
    • 系统右上角,加一个清理缓存功能
    • 分类字典导入导出
    • 行编辑 JEditabletable性能优化
    • 优化前端打包js文件太大问题(减小online依赖大小,暂时取消online的富文本和markdown的支持)
    版本升级不兼容
    • Antdv1.6.2版本全屏写法不兼容(暂未提交升级,提前兼容)
    • Popup 迁移代码位置,需要考虑兼容写法
    Issues修复
    • Online报表导出功能,只能导出前10条记录 #1339
    • 前端打包js文件太大(7M),造成第一次访问速度太慢(60秒以上) #1343
    • OnLine表单-在附表使用不是主表的ID做外键的情况下,内嵌子表主题,无法显示正常,其他主题正常 #I1GN28
    • 在线开发,使用下拉搜索框的话,生成代码查询条件为普通输入框 #I1C4A9
    • 在线开发,表生成视图后有几个bug #1344
    • 在线报表,导出信息不全 #1230
    • Online在线表单设置 树结构表查询条件无法生成 issues/I1K5MY
    • 单表树生成代码后编辑节点的字典字段,单击确定后列表不会刷新该字段 issues/I1LRSD
    • 单表树如果表中有字典,无法翻译字典issues/I1LRSC
    • online表单开发,勾上“是否排序”,页面无排序功能issues/I1N6Z1
    • 在线报表配置生成的页面,点击导出按钮,导出的结果是当前页数据(默认是10条)#1196
    • Online在线表单时间选择组件无法选择,浏览器报错 #1307
    • erp 主题 编辑附表数据消失 #I1HF0G
    • online 基础篇-SQL增强部分变量可用的问题 #1154
    • Online表单主题选择“ERP主题(一对多)”时时间字段不能弹出时间供选择 #1405
    • mybatis-plus升级到3.3.2 #1317
    • 恢复markdown编辑器 #1250
    • jEditableTable中jpopup弹窗回填下拉字典值的时候,下拉字典未能成功赋值 #1141
    • jEditabletable组件中jpopup清空当前值,未能同时清空携带返回回填的其他值 #1137
    • JEditableTable.vue卡顿原因之一buildProps #1177
    • JEditTable下使用slot模式下,JSearchSelectTag无法选中。#1095
    • JS命名错误 #1381
    • popup生成代码后多选失效 #1373
    • 首页修改主题颜色后左侧导航首页字体还是默认蓝色字体 #1057
    • 在角色选择器上添加@change事件,会导致触发两次事件 #1086
    • 前端页面有告警:Warning: [antdv: LocaleProvider] #1204
    • 找回密码时短信验证码存Redis没有设置过期时间,造成之后都无法发送验证码 #1199
    • 日历控件无法使用 #1218
    • Cacheable(value = CacheConstant.SYS_DICT_TABLE_CACHE)缓存并没有起作用 #1182
    • JAreaLinkage 省市区选择组件数据回填间隔失效#1183
    • 部门选择组件自定义返回值,数据无法回填 #1163
    • 前端自定义组件JCategorySelect 无法开启多选功能,开启后多选功能无效 #I1HZZZ
    • 表单风格问题 #1277
    • 第三方登录失败 #1247
    • 如何去掉左侧导航栏中的“首页” #I1J75V
    • 最新版本select dict组件有问题 #1262
    • 登录代码验证用户是否注销有bug,if条件永远为false #1240
    • 系统通告选人bug #1265
    • 关于富文本菜单栏按钮文字找不到问题 #1309
    • Tinymce富文本bug #1268
    • a-tabs下的a-tab-pane中有富文本组件j-editor,切换tab页签后j-editor内容会消失 #1258
    • 前端HeaderNotice.vue,websocketclose方法不存在 #1285
    • 系统设置-主题色Bug #1281
    • 前端页面右上的退出登录按钮Bug #1259
    • j-dict-select-tag不显示placeholder的文字 #I1IJ1T
    • markdown编辑器显示格式有问题 在线开发 #1314
    • 上传附件名带 # 号等,被url解析,无法下载,部门选择器能否增加父子关联prop #1327
    • 上传文件出现: The temporary upload location is not valid. #1320
    • 用户表 org_code字段内容有的是A05A04A03,有的却是“财务部”导致数据权限过滤失败 #1296
    • 标签下划线颜色不随主题改变. 这个问题和#1057一样,但是在color.less中添加了代码还是不行 #1361
    • 查询用户时,用orgCode显示部门名称,造成在保存的时候用名字覆盖掉了部门的编码 #I1IWOH
    • 翘首期待 JPopup 组件的开源 #I1G5YS
    • JCodeEditor组件在modal里使用时,光标选择内容 显示的不对 #1222
    • MiniArea 组件属性传递 大小写错误 #1301
    • 常见案例中一对多示例添加子表时,删除存在BUG #1354
    • 定时任务ui建议新增一个立即运行一次定时任务的功能,方便开发调试 #1015
    • Excel按模板导出有Bug #1136
    • 导入死循环bug #1364
    • 上传图片,当关掉页面再次进入上传页,图片中+图标消失 #1358
    • 读取空白excel死循环,生产环境直接CPU100% #15
    • Bug Found: org.jeecgframework.poi.util.PoiElUtil.isTrue: #11
    • 一对多表单校验bug #1360
    • WAR部署,WebSocketConfig注入 bean 失败异常;注掉WebSocketConfig类下代码后正常启动; #1133
    • war包部署失败 #1147
    • 一个用户有多个部门,但是只能分配一个部门角色,新角色进来,旧角色会被删除 #1164
    • 上传组件J-upload设置单个文件上传 #1165
    • 附表数据修改后消失 #I1HFR8
    • 第三方登录bug #I1G4X9
    • 升级到该版本后,登录页面的验证码无法正常加载 #1228
    • tabs组件,使用卡片样式失效 #1170
    • JUpload fileList[a].response不存在 #1229
    • autopoi 1.1.2 三元表达式,数字对比的bug #1427
    • autopoi1.1.2 只有一行数据时,会导致崩溃. #1428

    为什么选择 JeecgBoot?

    开源界“小普元”超越传统商业企业级开发平台。引领新的开发模式(Online Coding- > 代码生成器 - > 手工MERGE智能开发), 可以帮助解决Java项目70%的重复工作,让开发更多关注业务逻辑。既能快速提高开发效率,帮助公司节省人力成本,同时又不失灵活性。

    • 采用最新主流前后分离框架(SpringBoot+Mybatis-plus+Ant-Design+Vue),容易上手; 代码生成器依赖性低,灵活的扩展能力,可灵活实现二次开发;
    • 开发效率很高,采用代码生成器,单表数据模型和一对多(父子表)、树列表等数据模型,增删改查功能自动生成,菜单配置直接使用(前端代码和后端代码都一键生成);
    • 代码生成器提供强大模板机制,支持自定义模板风格。目前提供四套风格模板(单表两套、一对多两套)
    • 封装完善的用户、角色、菜单、组织机构、数据字典、在线定时任务等基础功能。强大的权限机制,支持访问授权、按钮权限、数据权限、表单权限等
    • 零代码在线开发能力,在线配置表单、在线配置报表、在线配置图表、在线设计表单
    • 常用共通封装,各种工具类(定时任务,短信接口,邮件发送,Excel导入导出等),基本满足80%项目需求
    • 简易Excel导入导出,支持单表导出和一对多表模式导出,生成的代码自带导入导出功能
    • 集成简易报表工具,图像报表和数据导出非常方便,可极其方便的生成图形报表、pdf、excel、word等报表;
    • 采用前后分离技术,页面UI精美,针对常用组件做了封装:时间、行表格控件、截取显示控件、报表组件,编辑器等等
    • 查询过滤器:查询功能自动生成,后台动态拼SQL追加查询条件;支持多种匹配方式(全匹配/模糊查询/包含查询/不匹配查询);
    • 数据权限(精细化数据权限控制,控制到行级,列表级,表单字段级,实现不同人看不同数据,不同人对同一个页面操作不同字段
    • 在线配置报表(无需编码,通过在线配置方式,实现曲线图,柱状图,数据等报表)
    • 页面校验自动生成(必须输入、数字校验、金额校验、时间空间等);
    • 提供单点登录CAS集成方案,项目中已经提供完善的对接代码
    • 表单设计器,支持用户自定义表单布局,支持单表,一对多表单、支持select、radio、checkbox、textarea、date、popup、列表、宏等控件
    • 专业接口对接机制,统一采用restful接口方式,集成swagger-ui在线接口文档,Jwt token安全验证,方便客户端对接
    • 接口安全机制,可细化控制接口授权,非常简便实现不同客户端只看自己数据等控制
    • 高级组合查询功能,在线配置支持主子表关联查询,可保存查询历史
    • 提供各种系统监控,实时跟踪系统运行情况(监控 Redis、Tomcat、jvm、服务器信息、请求追踪、SQL监控)
    • 消息中心(支持短信、邮件、微信推送等等)
    • 集成Websocket消息通知机制
    • 提供APP发布方案:
    • 支持多语言,提供国际化方案;
    • 数据变更记录日志,可记录数据每次变更内容,通过版本对比功能查看历史变化
    • 平台UI强大,实现了移动自适应
    • 平台首页风格,提供多种组合模式,支持自定义风格
    • 提供简单易用的打印插件,支持谷歌、IE浏览器等各种浏览器
    • 示例代码丰富,提供很多学习案例参考
    • 采用maven分模块开发方式
    • 支持菜单动态路由
    • 权限控制采用 RBAC(Role-Based Access Control,基于角色的访问控制)
    Source code(tar.gz)
    Source code(zip)
  • 2.2.0(Jul 9, 2020)

    升级日志

    此版本重构大,历经一个月的版本测试和稳定工作,新增功能较多 ,升级会出现不兼容的情况。

    升级不兼容
    • 1、升级 ant-design-vue 到最新版本 1.5.2,会导致使用disabled的组件不可用(需要全局替换disabled 为readOnly;另外原来readOnly不允许全小写)
    • 2、JSearchSelectTag.vue行编辑的popup传参做了修改,需要全局替换 orgFieldse 为 orgFields
    • 3、 项目删除了sass,全部换成 less,其中涉及/deep/语法得改造
    • 4、 Online表单的填值规则用法修改了 见文档
    较大改造
    • 登录的时候一次性加载系统字典,进行前端缓存,减少ajax重复请求
    • 修改定时任务quartz配置
    • logback-spring.xml配置不按照日期和大小生成新日志文件问题修复
    • vue-cli3 编译打包进行zip压缩优化
    • 根据index.html页面window._CONFIG['domianURL'],指定 axios的 baseURL(所以vue的代理没有用了)
    • JEditableTable重构,新增获取值时应该把临时id去掉、行编辑修改不直接更改数据源的ID
    • Online模块重点优化升级、Online代码生成器重点优化升级
    • 修复上个版本三个较大问题:行编辑组件存在严重bug、上传支持minio和阿里云切换存在遗漏、Online表单存在较大问题
    ONLINE升级
    • Online访问权限控制实现,如果online表单配置了菜单,则用户需要授权才能访问此表单
    • Online表单新增组件: 省市区地域组件、开关组件、三级联动(级联下拉)组件、markdown组件
    • Online表单弹窗宽度,根据不同的列数显示不同的宽度,实现更好的效果
    • Online 树表单功能一系列优化,比如数据列新增添加下级按钮功能、添加下级不自动展开列表等问题
    • Online JS增强编辑器支持放大,同时JS代码变更,增加版本记忆功能,方便追踪历史
    • Online JS增强支持lodash工具
    • Online控件 默认值表达式功能 见文档
    • Online 增加Excel导入导出转换器配置,针对各种控件的导入导出做了统一处理
    • Online 列表字段排序支持配置
    • Online同步数据库,数据库兼容性优化(mysql、oracle11g、SqlServer2017)
    • Online功能列表,高级查询优化,丰富控件的支持(新增:用户选择、部门选择、时间等)
    • Online表单配置,类型Text、date、Blob的字段长度默认设置为0
    • Online自定义button,支持位置自定义(支持右侧和下方)
    • Online表单列表,列表显示那些字段,支持用户个性化设置
    • Online表单删除和移除逻辑优化,防止未同步情况下删除报错
    • Online上传逻辑重构,针对单表、一对多行操作,都支持图片和文件上传,同时支持三种模式(minio、阿里云、本地存储)
    • Online上传逻辑重构, 行编辑模式,支持图片顺序修改
    • Online上传逻辑重构,在列表页面支持图片和文件的展示
    • Online表单索引同步逻辑重构,同时支持选择多个字段,组合索引设置
    • Online表单 excel导出实现数据权限逻辑
    • Online表单列表强制列不换行,自动出现超出滚定条,支持移动端自适应(单表、树和ERP等模型都已修改)
    • Online表单管理列表,回车查询和列表左右拖动移动自适应问题
    • Online表单附表序号必填
    • Online表名加校验不能全是数字,自动trim空格
    • Online 一对多tab必填校验不通过,添加友好提醒
    • Online表单控件默认值示例
    • Online一对多内嵌子表风格,高级查询不好用,过滤不了数据处理
    • Online表单 自定义校验规则正则,录入不成功问题处理
    • Online表单设置不分页,排序后又分页了问题处理
    • Online表单,下拉搜索组件,表字典配置加条件,下拉值出不来问题处理
    • Online表单,一对一子表,下拉选择、时间等组件被遮挡问题处理
    • Online表单树模型和一对多ERP模板支持href
    • Online 报表支持上下文变量表达式
    • Online 报表实现数据权限逻辑
    • Online 报表新增拖动字段顺序
    • Online 报表列表,sql过长截取显示
    • Online 报表,popup回车查询
    • Online表单auto页面弹窗改成JModule;online表单移动自适应;
    Online代码生成器升级

    后期重点维护ONLINE模式的代码生成器,GUI模式逐步弃用。

    • 新增内嵌Table代码生成器模板
    • 升级代码生成器依赖,支持返回生成结果&支持服务器端生成代码config
    • 代码生成器列表,列表自适应优化,支持移动效果(强制列不换行,不过有弊端,见文档
    • 实体生成,自动带着swagger 注解(支持单表、一对多等模型)
    • 代码生成器,列表移动自适应样式修改
    • 生成后的代码导入导出bug修复
    • online树代码生成器模板,直接删除一级分类会导致列表乱
    • ERP代码生成器模板升级,子表支持导入导出
    • ERP风格代码生成器模板问题(导入导入路径错误、swagger注解问题)
    • 代码生成器,校验为空的话不生成,简化生成的代码
    • 代码生成器,支持子表校验生成
    • 树形列表代码生成器优化,添加子节点
    • 修复bug: online字典未配置,代码生成器报错问题
    • 生成的实体字段excel注解,针对系统标准字段,创建人、创建时间等字段不生成
    • 生成的表单弹窗统一更换为j-modal,支持放大缩小全屏
    • 代码生成,popup参数大小写 驼峰问题修复
    • 生成的表单控件类型更丰富,新支持控件:markdown、省市区地域、密码、下拉搜索
    • 生成的列表查询区域,控件支持加强,新支持控件:省市区地域、下拉搜索、popup、选择用户、选择部门
    平台基础升级
    • 针对auto隐藏路由菜单,实现自动授权,简化online菜单的授权
    • IDE中找不到sun.misc.BASE64Encoder jar包问题
    • 删掉作废获取所有用户角色列表接口,接口有性能问题
    • 在我的消息里点击已读以后,首页上面的通知红点并没有同步更改问题修复
    • 用户与部门取消关联删除关联关系bug修改
    • 部门导入未刷新redis缓存
    • 修复SysPermissionMapper.xml 的SQL语句不兼容SQLServer的问题
    • 在线动态数据源代码重构
    • 【二级管理员】部门修改、删除权限时关联删除部门角色数据
    • 【二级管理员】我的部门,选中部门只能看当前部门下的角色
    • 我的消息支持模糊查询
    • 常用示例-对象存储文件上传优化
    • 用户相关功能,sql写法不兼容其他数据库问题修复
    • 图片上传组件修改
    • 导入功能优化,提示准确导入成功失败信息,涉及功能 用户、角色、部门、字典、定时任务等
    • 增加生产环境禁用swagger-ui配置
    • 第三方登录代码集成
    • 系统公告优化
    • MockController 返回json数据,utf-8格式化,防止中文乱码
    • 部门删除后删除部门角色等关联
    • 分类字典支持选择数据,添加下级分类
    UI组件升级
    • 升级 ant-design-vue 为最新版本 1.5.2
    • 登录验证码获取失败的时候,不显示空白
    • 升级 ant-design-vue,JModal切换全屏按钮因ant升级错位问题修复
    • 简化 j-modal 的相关代码
    • 封装常用组件示例;JInput新增当 type 变化的时候重新计算值
    • markdown集成
    • 富文本支持minio上传
    • 选择用户组件列表样式错位;Ellipsis.vue 优化
    • JModal移动端全屏效果
    • 高级查询只有在 in 模式下才能多选
    • 自定义选择用户组件JSelectMultiUser的宽度和截取显示长度
    • 行编辑 JEditableTable移动自适应效果;
    • JEditableTable重构 行编辑新增合计功能
    • JEditableTable重构 行编辑Popup请求数量过多(加缓存机制)
    • JEditableTable重构,行编辑InputNumber扩展支持输入小数和负数
    • JEditableTable.vue disable模式禁用添加删除按钮
    • JEditableTable行编辑, popup返回值,时间赋值有问题
    • JEditableTable行编辑,日期控件显示错位问题
    • 高级查询移动自适应效果;
    • 高级查询保存的同时也要保存匹配方式(支持and or)
    • 高级查询混入统一修改
    • 高级查询选择用户组件时,点开用户弹框不选择用户,直接关掉用户弹框,再次点击弹框时,无法点开问题
    • 高级查询组件支持,新支持组件,选择人、选择部门、popup、时间等
    • JPopup支持多选
    • JPopup返回值null问题
    • JPopup列表数据不刷新问题
    • JSearchSelectTag.vue匹配不上数字值问题
    • JSelectUserByDep 根据部门选择人组件bug
    • JTreeDict.vue 分类字典组件 清空不了问题
    • 常用示例,新增搜索下拉 JSearchSelectTag.vue例子
    • 常用示例,新增如何关闭当前页面例子
    • 常用示例,省市区三级联动的例子
    • 常用示例,增加字典下拉多选组件示例
    • 示例demo,关于图片的做统一优化
    Issues处理
    • Online表单开发,点击“新增”按钮,是否树:选择是,页面控制台报错 issues/I1BHXG
    • online form表单项能否支持配置有级联关系的内容 #948
    • 全局拦截异常错误的提醒文字 #768
    • 建议:城市级联选择组件 #905
    • 表单配置中检验字段配置href,报表中该配置字段无法看到链接 #961
    • SysUserMapper.xml查询脚本数据兼容问题 #962
    • 在线表单 提示 ButtonExpHandler is not defined #957
    • online表单中添加自定义按钮无法显示 #973
    • online报表不支持按照登录用户过滤数据 #934
    • 点击新增或者编辑按钮弹框宽度的设置问题 #974
    • online报表配置中使用系统参数,报错 I1AWNM
    • online增强SQL变量取数为null,#{sys.sys_date} 还有#{sys.sys_time} #999
    • 一个主表,多个付表。1对多。保存后,某些从表行项目内容保存成功,单重新打开数据表现丢失。 #997
    • /online/cgform/api/exportXls/{code}接口问题 #1012
    • 打成jar包,访问不到代码生成器模板 #1010
    • online表单开发,打包后模板找不到 #865
    • 已生成的代码,子表最下下行添加合计行底部固定问题 #936
    • 下拉搜索框在编辑时下拉name无法带过来 #971
    • 建议autoPoi升级,优化数据返回List Map格式下的复合表头导出excel的体验 #873
    • 配置 Href 跳转,并没有显示为超链接 #1020
    • 首次打开一对多表单,JEditableTable的addDefaultRowNum属性不生效 #1003
    • autopoi 双表头问题 #862
    • 应该是权限管理bug #110
    • 在线 的online报表报错 #1029
    • online代码生成器树形表单父节点字段名称问题 issues/I1ABGV
    • 点击j-popup,里面有数据,如果选择同名的数据,文本框为空 #1044
    • 关于table列宽可拖动问题 #1054
    • 单表数据导出多表头 auto 的Excel注解 groupName属性#1053
    • 在线报表和在线online的问题 #1030
    • J-pop组件 #1043
    • 2.1.4 日志管理---没有记录查询接口参数 #1070
    • 服务器日志超过设置的MaxFileSize时 #1130
    • online 表单中,在 附表中存在上传图片组件,点击上传图片并提交,显示提交失败 #1074
    • online表单js增强修改从表控件值问题 #1051
    • 重复代理问题 #994
    • 系统使用的日志包有问题 #887
    • 使用sqlserver数据库,用户管理查询出错 #1140
    • 主表和从表 一对一关系表单 TypeError: Cannot read property 'getAll' of undefined #1129
    • ERP表单附表数据编辑后消失 issues/I1DN3B
    • 多表的erp模式生成的子表,表单没有导入导出功能 issues/I1BB2U
    • 用edge打开首页,整个页面动不了,控制台console打出很多错误 issues/I189B5
    • 官方的快速开发平台主子表对IE11不兼容 issues/I17LEE
    • 360兼容模式 修改为你说的js之后;单表的数据兼容可以;主子表的不加载;错误如下 issues/I17H8L
    • Online表单开发,点击“新增”按钮,是否树:选择是,页面控制台报错 issues/I1BHXG
    Source code(tar.gz)
    Source code(zip)
  • v2.1.4(Sep 13, 2020)

    升级日志

    此版本重构大,新增功能较多 ,升级会出现不兼容的情况。

    新功能
    • 新增系统编码生成规则功能
    • 新增系统编码校验规则功能
    • 新增多数据源配置功能
    • 新增部门二级管理员功能(支持自定义部门角色,分配部门权限等高级功能)
    • 支持在线文档预览
    • Online报表支持多数据源配置
    • Online报表支持SQL字典
    • Online报表支持href跳转
    • Online表单支持跳转href
    • Online 支持erp风格列表
    • 系统消息改造,支持与业务对接
    • Online代码生成器模板,增加swagger 注解生成
    • Online 代码生成器模板,针对列表的移动自适应样式更改
    • Online代码生成器模板,支持Excel导出注解字典转换生成(单表、树、一对多)
    • 字典管理列表,增加刷新缓存功能
    • 新增图片上传组件 JImageUpload.vue
    • 封装 JModal 组件,自带全屏功能,自带锁定body滚动功能
    • 常用示例新增了几个示例
    优化功能
    • Online代码生成器模板结构重构,结构更清晰
    • 重构文件上传逻辑,上传三种方式文件上传# 本地:local\Minio:minio\阿里云:alioss
    • 重构静态资源访问服务(合并图片访问和文件下载地址) staticDomainURL
    • JEditableTable 行编辑兼容IE
    • 菜单展开优化
    • 通讯录功能优化
    • 用户管理新增回收站功能
    • 改造组织机构,支持设置部门的上级领导
    • 一级菜单的子菜单全部是隐藏路由,则一级菜单不显示
    • Online 修复下拉搜索表字典参数配置有误时会导致页面崩溃的问题
    • JEditableTable 行编辑修复获取不到元素的BUG
    • 【严重bug】JDictSelectUtil 下拉字段设置为数字类型,控件出不来解决
    • 改造字典标签,支持数字类型值
    • mybatis更改配置,返回类型为Map,显示null对应的字段
    Issues处理
    • 报表功能:字段href设置之后,点击字段不能跳转#783 issues/783
    • 使用JeecgOneGUI 在MySQL8 代码生成,实体内的顺序不一致和表设置顺序不一致#839issues/839
    • 2.1.3版本顶部顶部导航栏菜单搜索无法打开外链菜单#843issues/843
    • 统计报表/布局统计报表 档案统计显示不全#851 issues/851
    • 路由缓存问题#842 issues/842
    • 用户选择器,选择部门后,没有分页功能,切换页大小又会查询所有用户#779 issues/779
    • 子表附件上传;必填时不提示 issues/I17L6I
    • 前端Excel导出文件为TXT格式#881 issues/881
    • online表单在线生成代码时,字段设置为数据字典时,前端必填项校验失效#570 issues/570
    • 在线开发,代码生成功能生成的vue页面,数据的校验失效#702 issues/702
    • 日期工具类线程不安全#871 issues/871
    • 关于Online菜单配置问题#917 issues/917
    • 我从数据库里面添加的数据字典数据;在页面加载不出来添加的数据字典 issues/I11PD4
    • 2.1.3 online报表配置没有数据源选择 issues/I17OYD
    • online表单中js增强中form中show()方法不识别that#922 issues/922
    • 2.1.3.RELEASE 版本,打成jar包不可用导入功能不可用#899 issues/899
    • AUTO在线报表,配置参数后导出报错#927 issues/927
    • 用户修改密码接口Bug#932 issues/932
    • 手机端访问,点击搜索框变形后无背景颜色导致看不见#895 issues/895
    • online表单开发是否可以增加一个erp风格的选项,像一对多代码生成里的那样。#824 ssues/824
    • Online表单自定义表单的导入问题#772 issues/772
    • online表单开发,主附表模式修改表名后代码生成无法正常使用的bug#870 issues/870
    • 关于部门管理的改进提议#775 issues/775
    • 角色维护-编辑角色所属的用户时,弹出框的姓名检索的是用户名,检索字段错误 issues/I19HWQ
    • 2.1.3 online报表配置没有数据源选择 issues/I17OYD
    • Online表单权限配置问题#749 issues/749
    • online表单自定义树控件无法查询#892 issues/892
    版本升级不兼容
    • 1、静态资源访问服务URL改造(图片访问和文件下载合并为一个请求)
    • 2、DateUtils 时间工具类改造,用法变了
    • 3、系统表改动较多
    • 4、online代码生成器目录重构
    Source code(tar.gz)
    Source code(zip)
  • v2.1.3(Sep 13, 2020)

    升级日志

    新增功能
    • 开放online报表功能,在线配置sql实现数据列表
    • 新增大屏数据模板示例
    • 新增两套首页风格,供开发选择
    • 首页顶部导航栏添加搜索菜单功能 #740
    • Online代码生成器,新增一对多ERP风格模板
    • Online表单支持高级查询,支持主子表
    • Online代码生成器,校验未生成问题(暂时只改了单表)
    • Online代码生成器,一对多模板中存在错误gutter属性问题 #753
    • Online表单部门选择的使用问题 #785
    • 高级查询器组件重构,按钮自动生成,支持主子表查询(此处升级有点不兼容,注意升级后手工删除原来自定义的按钮)
    • 重构分类字典编码生成,采用系统统一的编码规则生成 #650
    • 重构部门编码生成,采用系统统一的编码规则生成
    • 角色功能列表强化,可以查看编辑用户、取消用户 #707
    • 增加通过消息中心模板发送系统消息接口、消息中心邮件实现类支持html格式邮件
    • 重构系统消息通知,统一采用模板中心定义的模板进行推送(方便用户自定义公告格式)
    • 重构查询过滤器,解决SqlServer不支持中文查询
    • 一对多行编辑组件JEditableTable.vue,做一系列优化
    1. 行编辑,选择组件宽度调整
    2. 行编辑上传组件BUG修复
    3. 新增下载功能
    4. 下拉错位问题解决
    5. 新增唯一校验
    6. 新增移动整行、插入行功能
    修复BUG
    • 删除角色后未清理角色与用户的关联关系 issues/I162SJ
    • mybatis拦截器获取用户写法问题,导致定时任务报错#795
    • JSelectBizComponent功能优化,解决分页选择丢失问题
    • j-input会将空值传到后台生成查询条件问题 issues/I160XD
    • JSelectUserByDep组件bug issues/I16634
    • 富文本编辑器增加超链接
    • 打印页面字体模糊问题解决
    • 前端defaultSettings配置关闭多页签模式无效 #730
    • 消息中心模板类型,增加”系统“
    • 自定义了首页主题颜色src/defaultSettings.js,但是首页顶部颜色没有变
    • 模板消息发布、系统公告发布,页面优化
    • 职务管理菜单错乱 issues/I13SMX
    • 关于下拉框错位的问题 #790

    为什么选择 JeecgBoot?

    开源界“小普元”超越传统商业企业级开发平台。引领新的开发模式(Online Coding- > 代码生成器 - > 手工MERGE智能开发), 可以帮助解决Java项目70%的重复工作,让开发更多关注业务逻辑。既能快速提高开发效率,帮助公司节省人力成本,同时又不失灵活性。

    • 采用最新主流前后分离框架(SpringBoot+Mybatis-plus+Ant-Design+Vue),容易上手; 代码生成器依赖性低,灵活的扩展能力,可灵活实现二次开发;
    • 开发效率很高,采用代码生成器,单表数据模型和一对多(父子表)、树列表等数据模型,增删改查功能自动生成,菜单配置直接使用(前端代码和后端代码都一键生成);
    • 代码生成器提供强大模板机制,支持自定义模板风格。目前提供四套风格模板(单表两套、一对多两套)
    • 封装完善的用户、角色、菜单、组织机构、数据字典、在线定时任务等基础功能。强大的权限机制,支持访问授权、按钮权限、数据权限、表单权限等
    • 零代码在线开发能力,在线配置表单、在线配置报表、在线配置图表、在线设计表单
    • 常用共通封装,各种工具类(定时任务,短信接口,邮件发送,Excel导入导出等),基本满足80%项目需求
    • 简易Excel导入导出,支持单表导出和一对多表模式导出,生成的代码自带导入导出功能
    • 集成简易报表工具,图像报表和数据导出非常方便,可极其方便的生成图形报表、pdf、excel、word等报表;
    • 采用前后分离技术,页面UI精美,针对常用组件做了封装:时间、行表格控件、截取显示控件、报表组件,编辑器等等
    • 查询过滤器:查询功能自动生成,后台动态拼SQL追加查询条件;支持多种匹配方式(全匹配/模糊查询/包含查询/不匹配查询);
    • 数据权限(精细化数据权限控制,控制到行级,列表级,表单字段级,实现不同人看不同数据,不同人对同一个页面操作不同字段
    • 在线配置报表(无需编码,通过在线配置方式,实现曲线图,柱状图,数据等报表)
    • 页面校验自动生成(必须输入、数字校验、金额校验、时间空间等);
    • 提供单点登录CAS集成方案,项目中已经提供完善的对接代码
    • 表单设计器,支持用户自定义表单布局,支持单表,一对多表单、支持select、radio、checkbox、textarea、date、popup、列表、宏等控件
    • 专业接口对接机制,统一采用restful接口方式,集成swagger-ui在线接口文档,Jwt token安全验证,方便客户端对接
    • 接口安全机制,可细化控制接口授权,非常简便实现不同客户端只看自己数据等控制
    • 高级组合查询功能,在线配置支持主子表关联查询,可保存查询历史
    • 提供各种系统监控,实时跟踪系统运行情况(监控 Redis、Tomcat、jvm、服务器信息、请求追踪、SQL监控)
    • 消息中心(支持短信、邮件、微信推送等等)
    • 集成Websocket消息通知机制
    • 提供APP发布方案:
    • 支持多语言,提供国际化方案;
    • 数据变更记录日志,可记录数据每次变更内容,通过版本对比功能查看历史变化
    • 平台UI强大,实现了移动自适应
    • 平台首页风格,提供多种组合模式,支持自定义风格
    • 提供简单易用的打印插件,支持谷歌、IE浏览器等各种浏览器
    • 示例代码丰富,提供很多学习案例参考
    • 采用maven分模块开发方式
    • 支持菜单动态路由
    • 权限控制采用 RBAC(Role-Based Access Control,基于角色的访问控制)
    Source code(tar.gz)
    Source code(zip)
  • v2.1.2(Sep 13, 2020)

    升级日志

    新增功能
    • 新增编码自动生成规则功能(填值规则)
    • Online在线开发-页面属性-支持填值规则用法 issues/I12K77
    • 重构云存储,只保留阿里云
    • 数据权限逻辑编码不规范重构,项目存在相同包名和类名解决 #722
    • Online表单功能测试缺陷 #481
    • JEditableTable组件增加一些小功能 #621
    • JSelectDepart部门选择组件,支持自定义返回字段值
    • JSelectMultiUser用户选择组件,支持自定义返回字段值 issues/I15700
    • JEditableTable行编辑表格,新增支持下拉可搜索,下拉选项可禁用
    • 支持禁用混入的created,自定义带参数查询列表数据
    • 提供ElasticsearchTemplate集成工具类
    • 升级JSuperQuery组件高级查询器,支持下拉字典、popup组件、选择人、选择部门等查询条件
    • 升级打印组件,解决兼容问题
    • 升级Online表单组件,支持更多控件选择
    修复BUG
    • Shrio权限注解无效问题处理 issues/I15A4K
    • 用户选择组件 选中一个用户后,显示了两个用户
    • 系统通告新增公告bug(more工具栏不消失) #663
    • MybatisInterceptor不更新updateBy,updateTime问题 #686
    • 切换部门当前用户信息未更新 #663
    • 更新指定字段时报错 #516
    • 登陆返回前端的数据有密码和盐 #643
    • 职务查询时出现错误,表sys_position字段定义与mysql关键字冲突 #697
    • SpringBoot开启压缩配置错误解决#718
    • Postgresql驱动配置不正确 groupId 应该是 org.postgresql #694
    • 代码生成器检查数据表是否存在大小写问题处理(For Linux and Mac) #716
    Source code(tar.gz)
    Source code(zip)
  • v2.1.1(Sep 13, 2020)

    升级日志

    Online功能
    • 重点:Online代码生成器升级,根据online配置控件生成对应代码。支持更多控件生成:下拉搜索、富文本、popup、分类树控件等等
    • 重点:Online在线开发升级,兼容更多数据库mysql\oracle\sqlserver\postgreSql等等,加强对大字段blob类型支持
    • Online 代码生成器升级,online一对多生成 popup不好用解决
    • Online 代码生成器升级,主子表模型,生成的代码子表的分页不是真实的分页解决 issues/I12MY4
    • Online 表单配置,校验规则不支持取消问题处理
    • Online Java增强、SQL增强增加校验,不允许为空
    • Online 表单配置,是否分页、是否带checkbox 增加配置支持
    • Online 新增复制表单功能
    • Online 表单配置字段增加校验,限制字段名不可重复、不可使用数据库关键字
    • Online 表单校验规则: 支持自定义规则、增加金额校验规则
    • Online 表单一对多模型,排序为空保存不上的问题 #524
    • Online 列表支持左右拖动配置 issues/I12F4F
    • Online Popup支持多选
    • Online 部门选择多选
    • Online 文件类型下载问题处理 【bug】
    • Online表单从数据导入后text类型转换错误 #557
    • Online表单开发-单表类型-同步数据库失败-sqlserver库 #629
    • Online表单字段校验 唯一校验 问题 #585
    • postgres数据库下测试在线表单报错 #464
    • Online代码生成,导入功能抛出异常 #477
    • Online表单功能测试缺陷 #481
    后端功能
    • 新增功能: 职务管理、个人通讯录管理
    • 登录添加校验码
    • 数据字典增加回收站功能
    • 新增ElasticSearch相关Util类
    • 升级代码生成器,单表代码生成,支持更多控件更丰富
    • 升级代码生成器模板,简化代码让代码更简洁美观 issues/476
    • 升级代码生成器模板,主键策略改成分布式算法 IdType.ID_WORKER_STR
    • 升级代码生成器模板,列表支持绑定回车事件查询
    • 代码生成器 sqlserver 注释中文乱码处理 #510
    • Excel导出,支持选中数据进行导出
    • Excel导出,支持自定义导出字段 #147
    • 【数据权限】查询过滤器改造升级,支持外部手工编码设置数据权限 #532
    • 【数据权限】数据权限配置多个,引发异常处理 issues/528
    • Redis后台连接不成功,登录增加友好提示
    • 模糊查询bug处理,增加专门的模糊查询前端组件
    • 增加统一的token校验工具类
    • Sql数据库兼容问题处理 #445
    • 统一异常提示信息,增加友好提示
    • 邮箱服务器,配置文件化
    • 字段太长,超出数据库字段的长度(统一异常捕获)
    • 增加Dockerfile文件
    • 关于使用Quzrtz 开启线程任务 #465
    • websockt心跳检测,断开重连
    • 支持配置文件方式yml方式,排除拦截器过滤拦截URL
    • 增加阿里云对象存储例子
    • 点击添加已有用户失败修复#512
    • 增加外链菜单切换模式,支持打开新网页和在当前首页打开 #428
    • 系统菜单列表异步加载,提高效率
    • 打印mybatis sql日志格式调整
    • 升级fastjson 修复拒绝服务器安全漏洞
    • 组织机构增加类型,区分岗位和组织机构
    • 菜单排序序号字段改成浮点型,更灵活
    • 【系统通知】新建用户,不看过期系统通知消息
    • 【系统通知】发送指定对象只能在一个分页里面,不能叠加 #513
    • 分类字典编码改成自动生成
    • 解决bug 添加一级部门时机构编码永远是A01的问题
    • 获取用户通用接口加入redis缓存机制,减少频繁访问数据库
    • shiro拦截器判断token是否有效,获取用户信息方法增加redis缓存机制,提供系统性能\重构重置密码和修改密码逻辑(增加重置用户缓存注解)
    • 重构登录权限缓存代码,更换为集成shiro-redis缓存
    • 重构系统缓存key命名,更规范些
    • spring boot 运行单元测试时,websocket报错解决
    • 解决每次请求,都重写redis中token缓存问题(提高系统性能)
    • 导入组织机构,重置缓存
    • 角色导入Excel新增唯一校验
    • 分页查询方法当pageSize大于500的时候只能查询500条数据#583
    • 角色配置数据权限的问题 #521
    • 关于使用Quzrtz 开启线程任务 #465
    • 定时任务新增表单form重置问题 issues/I11M34
    前端功能
    • JTreeSelect支持过滤数据,支持多选功能#533 #409
    • 编译主题颜色已生效,但是还在一直转圈,显示主题正在编译 #463
    • 选择用户控件,选择用户后点击删除X 可以删除选择的内容
    • JSearchSelectTag、JMultiSelectTag 支持清除功能
    • 修改系统功能,支持回车查询
    • 多标签页模式bug #430
    • JEditableTable 行编辑控件升级
    • 用户选择组件,改成显示用户真实名字,保存用户id(账号)
    • 通过部门选择用户组件重构,支持设置单选模式、支持显示名字保存IDS
    • 定时任务新增表单form重置 issues/I11M34
    • 系统发送通知 用户多选失败 #513
    • 支持模糊查询控件 JInput.vue #414
    • 常用示例,范围查询例子
    • 常见案例-一对多table示例-机票信息-新增和编辑里的选择日期后没有在日期框里显示 #505
    • 首页tab区域右键“关闭其他”导致两个首页,问题处理
    • 角色配置数据权限的问题 #521
    • 新增右键tab刷新当前页面功能
    • 解决【bug】常用示例,内嵌例子展开报错问题
    • issue/592 fix window.less.modifyVars is not a function
    • 解决,角色授权时选择父子关联,当子菜单取消选中时,父级菜单也关联取消了,导致整个菜单未授权问题
    • 高级查询组件,支持查询条件保存历史
    • 高级查询组件,支持下拉选择字典值查询 #441
    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(Sep 13, 2020)

    升级日志

    重大亮点功能
    • 开放Oline在线表单功能(支持单表、一对多、树)
    • 开放Oline在线代码生成器(功能更强大,更智能)
    • 提供单点登录集成cas的代码支持
    • 提供Websocket 消息推送机制,改造系统公告
    • 提供手机APP发布方案 issues#352
    后端功能
    • Spring boot 2 上传文件大小配置
    • 新增方法,根据Token获取用户信息-
    • 注册短信接口异常,增加提醒
    • 定时任务更改cron表达式控件,优化表达式选择控件
    • 发短信接口秘钥配置,统一到配置文件中
    • 阿里监控设置不限制本地访问
    • 升级mybatisplus版本号
    • 支持redis增加名字空间分开过期时间
    • 我的消息后台报错 Parameter 'announcementSendModel' not found #265 处理
    • 日志操作添加类型
    • 上传大文件后台捕获异常,提示前端
    • redis里面的json不可以读 问题修改
    • 解决token失效,控制台多次打印日志
    • 切换部门,首页客户端存储部门信息未更新
    • 代码不规范改造,部分代码/system/全部改成/sys/开头
    • 批量删除部门添加提示,同时删除所有下属部门 issues#335
    • 批量更新报错处理 issues#IZA3Q
    • 访问后台根路径默认跳转swagger的接口页面、swagger取消密码
    • swagger设置全局token,解决接口需要token验证的问题
    • 分类字典页面显示错误 issues#377
    • 生成部门组织树的逻辑问题 issues#374
    • 增加CAS单点登录支持代码
    • ShiroRealm.jwtTokenRefresh方法内判断token是否过期优化 issues#405
    • 短信验证码,直接放result返回前端了 issues#391
    • mapper文件优化以便能更好支持多租户扩展 issues#404
    • 短信通用方法重构 issues#398
    • 集成websocket,消息消息提醒采用websocket方案
    • 系统通告管理优化
    • mapper文件中select语句字段别名用单引号导致不兼容postgresql,抛异常 issues#426
    • 解决Swagger2 异常NumberFormatException
    • 分类字典逻辑,SQL数据库兼容问题解决
    • oracle下nclob类型字段转换报错问题解决,ClobProxyImpl cannot be cast to oracle.sql.CLOB问题处理
    前端功能
    • 增加表格合计示例
    • 增加JEditableTable三级联动示例
    • 增加JEditableTable禁用字段示例
    • 简化前端域名配置
    • 增加vue.config.js配置,生产环境去掉console.log,减少浏览器内存占用
    • 部门管理bug 修复 issues#300issues#309
    • 登录校验bug、首页访问统计去掉多余的方法
    • 登录首页点击忘记密码样式乱了 issues#290
    • 登录时交互出的问题 issues#319
    • 用户注册校验账号和手机号是否存在,接口更好排除权限拦截器
    • 公告最大化、操作日志添加操作类型
    • 批量删除部门添加提示 issues#335
    • Jupload组件不能清空上次结果bug修复issues#326
    • Online表单校验字段:支持输入、增加金额
    • JEditableTable 行编辑表格新增拖拽排序
    • j-editable-table列表中数据字典列如何配合DictSelectUtil.js函数,实现自动显示字典文本 issues#253
    • 一对多JEditable弹窗里表格信息的日期显示不全 issues#243
    • 登录密码加密逻辑,暂时注释掉
    • 字典数据加载请求,增加缓存机制,提高系统性能
    • 分类字典页面显示错误issues#377
    • 磁盘监控功能BUG
    • Logo根据主题颜色变化而变化
    • 点击登录按钮禁用机制,防止网速慢多次点击登录
    • 修复公告编辑框不清除问题
    • JEditableTable 三级联动示例
    • JEditableTable新增普通表格合计示例
    • JEditableTable修复行编辑表格默认0行时报错
    • JEditableTable 支持新增获取行号
    • 前端a-input-number标签的BUG issues#394
    • 前端a-select标签使用有问题,模糊搜索不对 issues#425
    • 24小时制问题 issues#434
    Source code(tar.gz)
    Source code(zip)
  • v2.0.2(Sep 13, 2020)

    升级日志

    修复功能
    • 我的部门录入用户bug处理 issues#202
    • 请求监控列表,ms单位问题修复 issues#132
    • 一对多示例功能,表单添加多张图片只显示一张问题处理 issues#103
    • 用户管理,改成逻辑删除
    • 首页统计报表优化
    • 菜单页面优化,菜单管理添加子菜单、顺序验证修复、菜单路由、前端组件为必选
    • 公告页面优化,postgres数据库兼容问题修正
    • 公告功能查询为空时,需要加判断,不然拼接sql会报错 issues#254
    • 系统管理-角色管理-添加/编辑加入校验,防止输入超过数据库限定字符长度信息,对用户友好提示
    • 部门管理、角色维护编辑时以及添加时问题修复
    • 部门管理,添加子部门按钮放出来,减少误解
    • 部门管理、角色维护编辑时以及添加时问题修复
    • 字典组件SQL注入风险处理
    • 启动项目,邮箱报错彻底解决 issues#225
    • 单表生成时,如果表字段过少,vue页面会出错处理 issues#234
    • 表格列表,字典字段排序问题处理 issues#244
    • sys_log中request_param的字段过短问题 issues#214
    • del_flag代码不规范问题 issues#169
    • 聚合路由问题修复,提供使用文档 issues#150
    • 登陆安全问题 issues#195
    • 解决继承实体无法翻译字典文本问题
    • RedisConfig keyGenerator问题 issues#75
    • 权限类规范及ngalin菜单优化
    • 代码常量引用不规范的,重构统一常量文件引用
    • 导出功能excel导出未带登录人名字修复
    新功能
    • 前端项目升级依赖版本号:antv/data-set、ant-design-vue、vue、eslint、less、vue-template-compiler
    • 【新功能】用户注册功能实现
    • 【新功能】用户重置密码功能实现
    • 【新功能】用户手机号登录实现
    • 【新功能】分类字典(支持多层级)
    • 【权限升级】支持数据表格列权控制,及支持自定义列选择显示
    • 字典翻译注解@ Dict,支持多值翻译
    • 菜单升级,路由支持是否缓存配置
    • 提供国际化改造方案 issues#210
    • 动态数据源版本升级
    • 升级mybatis-plus版本3.1.2,支持逻辑删除注解@TableLogic
    • 增加工具 hutool
    • 代码生成器模板规范,进一步规范精简代码,导入支持批量插入数据库
    • 示例demo主键改成ID_WORKER_STR,后续系统ID规则全部切换为ID_WORKER_STR
    • 阿里规约检查扫描调整部分代码
    • 树形列表示例demo
    自定义组件
    • 新增corn表达式生成组件
    • JMultiSelectTag组件升级,父组件动态改变dictOptions值时,子组件更新下拉列表的值
    • JEditableTable功能增强,支持hidden类型、默认值显示错误
    • 字典组件支持表字典带条件
    • 新增JTreeSelect树形下拉框组件 (异步加载)
    • 新增JTreeDict 分类字典树形下拉组件
    • 新增异步加载树TABLE组件 JTreeTable
    • 新增表单禁用专用组件 JFormContainer
    • 新增图形验证码组件 JGraphicCode
    Source code(tar.gz)
    Source code(zip)
Owner
JEECG开源社区
专注技术开源,打造开源的企业级快速开发平台—JEECG(获得CSDN专家访谈,ITEYE访谈、连续五年中国最火TOP5、十大优秀开源项目等)、免费微信管家平台—JeeWx 捷微(微信开发商大会第一名)
JEECG开源社区
SpringBoot SpringSecurity Jpa mybatis-plus websocket Redis camunda Vue3 Vite ant-design VbenAdmin vxe-table bpmn.js

SpringBoot SpringSecurity Jpa mybatis-plus websocket Redis camunda Vue3 Vite ant-design VbenAdmin vxe-table bpmn.js

zsvg 16 Dec 13, 2022
A personal blog based on Vue+SpringBoot+MySql+Redis+Shiro+JWT

项目:Vue-SpringBoot-PersonalBlog 个人博客网址:http://www.huchao.vip/blogs CSDN:毛_三月 介绍 一个基于SpringBoot + Vue+MybatisPlus+Shiro+JWT+Redis开发的前后端分离博客项目,带有超级详细开发文档

Chao. Hu 26 Dec 20, 2022
Guns基于SpringBoot 2,致力于做更简洁的后台管理系统,完美整合springmvc + shiro + mybatis-plus + beetl!Guns项目代码简洁,注释丰富,上手容易,同时Guns包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块),可以直接作为一个后台管理系统的脚手架!

Guns基于Spring Boot2,致力于做更简洁的后台管理系统。包含系统管理,代码生成,多数据库适配,SSO单点登录,工作流,短信,邮件发送,OAuth2登录,任务调度,持续集成,docker部署等功。支持Spring Cloud Alibaba微服务。社区活跃,版本迭代快,加群免费技术支持。

冯硕楠 3.6k Jan 5, 2023
Hcode Online Judge(HOJ):An open source online judge system base on SpringBoot, Springcloud Alibaba and Vue.js !

Hcode Online Judge(HOJ) 前言 基于前后端分离,分布式架构的在线测评平台(hoj),前端使用vue,后端主要使用springboot,redis,mysql,nacos等技术。 在线Demo:https://hdoi.cn 在线文档:https://www.hcode.top/

Himit_ZH 179 Dec 31, 2022
The ANT HAL Service functions as a JNI wrapper for the ANT HAL.

Android ANT HAL Service v.4.0.0 - 25 Aug 2014 The ANT HAL Service functions as a JNI wrapper for the ANT HAL. The ANT Hal Service provides the messagi

Project Kaleidoscope 0 Jun 11, 2022
基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统

平台简介 芋道,一套全部开源的企业级的快速开发平台,毫无保留给个人及企业免费使用。 有任何问题,或者想要的功能,可以在 Issues 中提给艿艿。 前端采用 vue-element-admin。 后端采用 Spring Boot、MySQL、Redis。 权限认证使用 Spring Security

芋道源码 8.2k Jan 1, 2023
springboot 框架与其它组件结合如 jpa、mybatis、websocket、security、shiro、cache等

致歉 由于自己懒以及身体对issuse 解决的不及时。请大家以后提issuse 的时候写清楚 模块名 比如“springboot-SpringSecurity4” 和问题,我会抽时间抓紧解决。 springboot-SpringSecurity0 包含两部分代码: 第一是 博客 springboot

abel 5.9k Jan 5, 2023
一个小而美的低代码全栈开发平台,一键生成后端api接口+前端页面代码+在线接口文档,节省50%的前后端开发的工作量。基于springboot +mybatis+spring security+vue 技术栈

YOMA [toc] 一个小而美的低代码全栈开发平台,一键生成后端api接口+前端页面代码+在线接口文档,节省50%的前后端开发的工作量,平台代码100%开源。平台适用于企业信息化、政务、中小型互联网等项目 平台采用前后端分离架构,基于如下流行的开源框架,易上手+便于后期维护 后端:https://

Shihao Ma 149 Dec 9, 2022
🎧 Vue + SpringBoot + MyBatis 音乐网站

?? Vue + SpringBoot + MyBatis 音乐网站

尹宏伟 3.4k Dec 31, 2022
Spring Boot Refresh Token using JWT example - Expire and Renew JWT Token

Spring Boot Refresh Token with JWT example Build JWT Refresh Token in the Java Spring Boot Application. You can know how to expire the JWT, then renew

null 152 Dec 28, 2022
参考 DDD/Clean Architecture 设计理念,整合 Spring Boot/Spring Security/Mybatis Plus/Vavr 的 Spring Realworld 应用案例

Demo · 更多项目 · 参考资料 ms-spring-ddd-examples Unified Domain-driven Layered Architecture for MicroService Apps,试图探索一套切实可行的应用架构规范,可以复制、可以理解、可以落地、可以控制复杂性的指导

王下邀月熊 19 Sep 23, 2022
以教学为目的的电商系统。包含ToB复杂业务、互联网高并发业务、缓存应用;DDD、微服务指导。模型驱动、数据驱动。了解大型服务进化路线,编码技巧、学习Linux,性能调优。Docker/k8s助力、监控、日志收集、中间件学习。前端技术、后端实践等。主要技术:SpringBoot+JPA+Mybatis-plus+Antd+Vue3。

简介 bcMall 是一个以教学为目的的电商系统。bcMall将为你展现一个典型的系统演进过程,所使用的主流技术完全开放。 它包含ToB复杂业务、互联网高并发业务、缓存应用;DDD、微服务指导。模型驱动、数据驱动。了解大型服务进化路线,编码技巧、学习Linux,性能调优。Docker/k8s助力、监

xjjdog 411 Jan 3, 2023
基于RuoYi-Vue集成 Lombok+Mybatis-Plus+Undertow+knife4j+Hutool+Feign 重写所有原生业务 定期与RuoYi-Vue同步

平台简介 RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 分布式集群 场景升级 定期与 RuoYi-Vue 同步 集成 Lock4j dynamic-datasource 等分布式场景解决方案 集成 Mybatis-Plus Lombok Hutool 等便捷开发工具 适配重写相关业

CrazyLionLi 110 Jan 4, 2023
A web application to generate Java source code with spring-boot and mybatis-plus

A web application to generate Java source code with spring-boot and mybatis-plus. Also, The class of Domain,Mapper,XML of Mapper Interface,Service,Controller are included. You can change the data source what you want to generate for your project in app running without restart this code -generator application.

Weasley 3 Aug 29, 2022
基于SpringCloud2.1的微服务开发脚手架,整合了spring-security-oauth2、nacos、feign、sentinel、springcloud-gateway等。服务治理方面引入elasticsearch、skywalking、springboot-admin、zipkin等,让项目开发快速进入业务开发,而不需过多时间花费在架构搭建上。持续更新中

快速开始 先决条件 首先本机先要安装以下环境,建议先学习了解springboot和springcloud基础知识。 git java8 maven 开发环境搭建 linux和mac下可在项目根目录下执行 ./install.sh 快速搭建开发环境。如要了解具体的步骤,请看如下文档。 具体步骤如下:

zhoutaoo 7.9k Jan 6, 2023
Aplicación Java tipo Ant con conexión a BD SQLite y CRUD.

CRUD-Java-Netbeans-TDEA Aplicación Java tipo Ant con conexión a BD SQLite y CRUD. Este proyecto es para el curso Desarrollo de Software 2 en el Tecnol

Daniel Felipe A.M. 11 Dec 16, 2022
Auto-Unit-Test-Case-Generator automatically generates high-level code-coverage JUnit test suites for Java, widely used within the ANT Group.

中文README传送门 What is Auto-Unit-Test-Case-Generator Auto-Unit-Test-Case-Generator generates JUnit test suites for Java class just as its name. During te

TRaaS 108 Dec 22, 2022