Erupt 项目搭建
创建Spring Boot项目
Maven依赖
Spring Boot版本为 2.7.10,erupt版本为 1.12.14
erupt版本要与Spring Boot版本适配,3.x.x版本Spring Boot暂不适用说是
<properties><erupt.version>1.12.14</erupt.version></properties>
<dependencies><!--tomcat--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency><!--test测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--MySql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version><scope>runtime</scope></dependency><!--核心管理模块--><dependency><groupId>xyz.erupt</groupId><artifactId>erupt-admin</artifactId><version>${erupt.version}</version></dependency><!--后台WEB界面--><dependency><groupId>xyz.erupt</groupId><artifactId>erupt-web</artifactId><version>${erupt.version}</version></dependency><!-- ****** 以下模块不需要可以去掉 ****** --><!--erupt-cloud 云节点分布式控制模块--><dependency><groupId>xyz.erupt</groupId><artifactId>erupt-cloud-server</artifactId><version>${erupt.version}</version></dependency><!--任务管理模块--><dependency><groupId>xyz.erupt</groupId><artifactId>erupt-job</artifactId><version>${erupt.version}</version></dependency><!--代码生成器模块--><dependency><groupId>xyz.erupt</groupId><artifactId>erupt-generator</artifactId><version>${erupt.version}</version></dependency><!--服务监控模块--><dependency><groupId>xyz.erupt</groupId><artifactId>erupt-monitor</artifactId><version>${erupt.version}</version></dependency><!--在线接口开发--><dependency><groupId>xyz.erupt</groupId><artifactId>erupt-magic-api</artifactId><version>${erupt.version}</version></dependency><!--自定义页面模块--><dependency><groupId>xyz.erupt</groupId><artifactId>erupt-tpl</artifactId><version>${erupt.version}</version></dependency><!--element-ui--><dependency><groupId>xyz.erupt</groupId><artifactId>erupt-tpl-ui.element-ui</artifactId><version>${erupt.version}</version></dependency><!--velocity--><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version></dependency></dependencies>
xxxApplication启动类添加注解
import org.springframework.boot.autoconfigure.domain.EntityScan;
import xyz.erupt.core.annotation.EruptScan;@EruptScan
@EntityScan
main方法中加入下列代码,启动后自动打开指定页面
try {System.setProperty("java.awt.headless", "false");Desktop.getDesktop().browse(new URI("http://localhost:8088"));} catch (Exception ignore) {}
yml参数配置
server:port: 8081# 启用 gzip 压缩compression:mime-types: application/javascript,text/css,application/json,application/xml,text/html,text/xml,text/plainenabled: trueerror:includeException: trueincludeStacktrace: ALWAYSincludeMessage: ALWAYSspring:#当 erupt.redisSession 为 true 时必须配置此项!redis:database: 0timeout: 10000host: 127.0.0.1datasource:url: jdbc:mysql://127.0.0.1:3306/erupt?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaiusername: rootpassword: ****jpa:show-sql: falsegenerate-ddl: truedatabase-platform: org.hibernate.dialect.MySQL5InnoDBDialectdatabase: mysqlproperties:hibernate:format_sql: falsemail:username: xxxx@qq.compassword: xxxxxxxhost: smtp.qq.comproperties:mail.smtp.ssl.auth: truemail.smtp.ssl.enable: truemail.smtp.ssl.required: trueservlet:multipart:max-file-size: 100MBmax-request-size: 100MBprofiles:active: dev#避免依赖循环引用
# main:
# allow-circular-references: trueerupt-app:# 登录失败几次,需要验证码verifyCodeCount: 2# 是否开启水印,1.12.0 及以上版本支持water-mark: true# 登录失败几次出现验证码,值为0时表示一直需要登录验证码verify-code-count: 2# 登录密码是否加密传输,特殊场景如:LDAP登录可关闭该功能获取密码明文pwd-transfer-encrypt: true# 是否开启密码重置功能,关闭后前端会屏蔽所有重置密码的入口适用于 ldap 等场景,1.12.7 及以上版本支持reset-pwd: true# 多语言配置locales: ["zh-CN", // 简体中文"zh-TW", // 繁体中文"en-US", // English"fr-FR", // En français"ja-JP", // 日本語"ko-KR", // 한국어"ru-RU", // русск"es-ES" // español]# 自定义登录页路径,1.10.6 及以上版本支持,支持http网络路径
# login-page-path: /customer-login.html
erupt:# 是否开启csrf防御csrf-inspect: true# 开启redis方式存储session,默认false,开启后需在配置文件中添加redis配置(同 Spring Boot)redis-session: false# redis session是否自动续期,1.10.8及以上版本支持redis-session-refresh: false# 附件上传存储路径, 默认路径为:/opt/erupt-attachmentupload-path: D:/erupt/annex# 是否保留上传文件原始名称keep-upload-file-name: false# 项目初始化方式,NONE 不执行初始化代码、EVERY 每次启动都进行初始化、FILE 通过标识文件判断是否需要初始化init-method-enum: file# 默认语言,1.12.3 及以上版本支持default-locales: zh-CN# 是否开启任务调度(导入erupt-job时有效)job.enable: true# 是否开启日志采集,开启后可在系统日志中查看实时日志 1.12.14 及以上版本支持log-track: true# 日志采集最大暂存行数 1.12.14 及以上版本支持log-track-cache-size: 1000# 是否记录操作日志,默认true,该功能开启后可在【系统管理 → 操作日志】中查看操作日志security:record-operate-log: trueupms:# 登录 session 时长(redisSession为true时有效)# redisSession 为 false 时控制有效期的方法:server.servlet.session.timeoutexpire-time-by-login: 60# 严格的角色菜单策略,如果非管理员用户拥有“角色管理权限”则仅能编辑已有权限的角色菜单strict-role-menu-legal: falsemagic-api:web: /magic/web# 接口配置文件存放路径resource.location: D:/erupt/magic-scriptshow-url: false
数据库配置
根据所用数据库类型选择MySQL、SQLServer等进行配置
建立一个数据库(erupt),其他名也行,暂时不用建表,项目启动会自动建立多个基础表
首页配置(home.html)
手动创建,位置:/resources/public/home.html
<!DOCTYPE html>
<html lang="en">
<head><title>home</title><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1" name="viewport">
</head>
<style>body {/* 设置背景图片 */background-image: url('login-img-BlackSilk.jpg');/* 背景图片覆盖整个元素 */background-size: cover;/* 背景图片不重复 */background-repeat: no-repeat;/* 背景图片居中显示 */background-position: center;/* 可选:设置背景图片固定,滚动页面时不移动 */background-attachment: fixed;/* 可选:设置边距,根据需要调整 */margin: 0;padding: 0;/* 确保整个页面都有背景图片 */height: 100vh; /* 视口高度 */width: 100vw; /* 视口宽度,但通常不需要设置,因为body默认就是100%宽度 */}
</style>
<body>
</body>
</html>
前端配置(app.js)
手动创建,位置:/resources/public/app.js
window.eruptSiteConfig = {//erupt接口地址,在前后端分离时指定domain: "",//附件地址,一般情况下不需要指定,如果自定义对象存储空间,则需在此指定附件资源访问地址fileDomain: "",//登录页中间标题title: "風華絕代",//登录页中间标题描述desc: "風華絕代-Leslie",//是否展示版权信息copyright: true,//自定义版权内容,1.12.8及以上版本支持,值可以是方法也可以是字符串copyrightTxt: function() {return "風華絕代-Cheung Kowk Wing"},//高德地图 api key,使用地图组件须指定此属性,amapKey获取地址:https://lbs.amap.com (服务平台为:Web端(JS API))amapKey: "xxxx",//高德地图 SecurityJsCodeamapSecurityJsCode: "xxxxx",//登录页logo路径logoPath: "log-Leslie.jpg",//登录后左上角logo旁边的文字logoText: "風華絕代",//注册页地址,会在登录页面增加一个链接 (仅是一个链接,需要自定义实际样式)registerPage: "",//自定义导航栏按钮,配置后将会出现在页面右上角r_tools: [{text: "自定义功能按钮",icon: "fa-eercast",mobileHidden: true,click: function (event) {alert("Function button");}}],//登录成功事件 1.12.3 及以上版本移动至window.eruptEvent中声明login: function(user){},//注销事件 1.12.3 及以上版本移动至window.eruptEvent中声明logout: function(user){}
};//路由回调函数
window.eruptRouterEvent = {//key表示要监听的路由切换地址,为url hash地址最后一段//例如:http://www.erupt.xyz:9999/#/build/table/demo中demo为回调keydemo: {//路由载入事件load: function (e) {},//路由退出事件unload: function (e) {}},//$ 为全路径通配符,在任何路由切换时都会执行load与unload事件$: {load: function (e) {},unload: function (e) {}}
};//erupt生命周期函数
window.eruptEvent = {//页面加载完成后回调startup: function () {},//登录成功login: function(user){},//注销事件logout: function(user){}
}
前端样式(app.css)
手动创建,位置:/resources/public/app.css
/* 例:修改登录页样式 */
layout-passport > .container {background-position: center !important;background-repeat: repeat !important;background-size: cover !important;background-color: #fff !important;background-image: url(login-img-BlackSilk.jpg) !important;/*background-image: url(https://www.erupt.xyz/demo/login-bg.svg) !important;*/
}
启动项目
访问地址:localhost:8081
默认账号:erupt
默认密码:erupt
登录
默认有以下菜单栏
新建菜单
新建下级菜单(表格视图)
新建实体类
实体类对应的表,数据库中如果没有,项目启动时会自动创建
实体类字段名为驼峰命名的字段在表中会转为“_”类型的字段名,例如:
recommendedLevel ==> recommended_level
import xyz.erupt.annotation.Erupt;
import xyz.erupt.annotation.EruptField;
import xyz.erupt.annotation.sub_field.Edit;
import xyz.erupt.annotation.sub_field.EditType;
import xyz.erupt.annotation.sub_field.View;
import xyz.erupt.annotation.sub_field.ViewType;
import xyz.erupt.annotation.sub_field.sub_edit.AttachmentType;
import xyz.erupt.annotation.sub_field.sub_edit.ChoiceType;
import xyz.erupt.annotation.sub_field.sub_edit.VL;
import xyz.erupt.upms.model.base.HyperModel;import javax.persistence.Entity;
import javax.persistence.Table;/*** @Package_Name * @Author * @TIME* @Version*/
@Erupt(name = "風華"
)
@Table(name = "leslie")
@Entity
public class Leslie extends HyperModel {@EruptField(views = {@View(title = "名称")},edit = @Edit(title = "名称", notNull = true))private String name;@EruptField(views = {@View(title = "年龄")},edit = @Edit(title = "年龄", notNull = true))private Integer age;@EruptField(views = {@View(title = "相片", type = ViewType.IMAGE)},edit = @Edit(title = "相片", notNull = true, type = EditType.ATTACHMENT,attachmentType = @AttachmentType(type = AttachmentType.Type.IMAGE)))private String image;@EruptField(views = @View(title = "实力"),edit = @Edit(title = "实力", notNull = true, type = EditType.CHOICE,choiceType = @ChoiceType(vl = {@VL(value = "0", label = "不是man"),@VL(value = "10", label = "失败的man"),@VL(value = "20", label = "成功的man"),@VL(value = "30", label = "嚣张的man")})))private Integer recommendedLevel;
}
注解
@Erupt 类注解
使用方法:添加在类上
排序OrderBy
布局定义 @Layout
权限控制 @Power
控制erupt类能力,包括:新增、修改、删除、导入、导出等
数据过滤 @Filter
树形展示 @Tree
暂时没弄明白
左树右表 @LinkTree
@Erupt(name = "Erupt",linkTree = @LinkTree(field = "tree") //field 的值为类中支持树组件字段
)
public class EruptTest extends BaseModel {@ManyToOne@JoinColumn(name = "parent")//如果 linkTree 配置中 dependNode 值为 true 可以不声明 @EruptField 新增时会自动填充当前选择的树节点@EruptField(views = @View(title = "树节点选择", column = "name"),//title-显示名称,column-实际值,实体类的字段edit = @Edit(title = "树节点选择", type = EditType.REFERENCE_TREE,referenceTreeType = @ReferenceTreeType(pid = "parent.id", expandLevel = 1)))private Tree tree;//另一个实体类,字段名与linkTree注解里的对应}
效果示例
代码:
页面效果
数据钻取 @Drill (无需外键,低耦合一对多)
暂时没整明白
@EruptField 字段注解
@View
@View → type参照
@Edit
@Edit → type参照
逻辑删除
添加注解@Filter、@SQLDelete
import org.hibernate.annotations.SQLDelete;
import xyz.erupt.annotation.sub_erupt.Filter;
@Filter:对数据进行过滤,只显示未删除的
@SQLDelete:覆盖删除语句,改为修改 deleted 字段实现逻辑删除
添加实体类字段
private Date deleteTime;private Boolean deleted = false;
注意事项:
1、项目启动生成的表,没有这两个字段
2、这时候配置逻辑删除后,项目启动后表中自动生成对应字段,但是查询时后报错,需要将表中数据的 deleted 字段值设为 0(0-false,1-true)
3、@Filter注解中过滤字段需为 表名.字段
Leslie Lee 随笔
相关文章:

Erupt 项目搭建
创建Spring Boot项目 Maven依赖 Spring Boot版本为 2.7.10,erupt版本为 1.12.14 erupt版本要与Spring Boot版本适配,3.x.x版本Spring Boot暂不适用说是 <properties><erupt.version>1.12.14</erupt.version></properties> <…...

HarmonyOS Next 系列之列表下拉刷新和触底加载更多数据实现(十一)
系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现(一) HarmonyOS Next 系列之验证码输入组件实现(二) HarmonyOS Next 系列之底部标签栏TabBar实现(三) HarmonyOS Next 系列之HTTP请求封装和Token…...

比特位的计算
给你一个整数 n ,对于 0 < i < n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n 1 的数组 ans 作为答案。 示例 1: 输入:n 2 输出:[0,1,1] 解释: 0 --> 0 1 --> …...

SQLAlchemy 学习笔记
通信类型:AF_INET 协议家族一般是表示TCP通信的SOC_STREAM和UDP通信的SOCK_DGRAM。对于TCP通信,建立socket连接,: s socket.socket(socket.AF_INET, socket.SOCK_STREAM)连接socket, s.connect((host,port))socket通信…...

Linux内核分析(调度类和调度实体)
文章目录 前言一、调度类1. stop_sched_class2. dl_sched_class3. rt_sched_class4. fair_sched_class5. idle_sched_class总结 二、调度类中的操作函数三、调度实体 前言 调度是操作系统内核的一个关键职责,它涉及到如何合理分配CPU时间给不同的进程或线程。在Lin…...
用输入输出流(I/O)流,递归复制和删除多级文件
一、(I/O)流递归复制一个文件 第一种: else if语句过多,看起来冗余,优点:多级文件一次性复制完整 import java.io.*;//数据源:src/main/java/day15_8_13/haha //目标;src/main/java/LaJi pub…...

kafka监控工具EFAK
kafka监控工具(EFAK) 1、下载2、解压3、配置3.1、安装数据库,需要mysql是,并创建ke数据库3.2、修改配置文件 4、启动4.1、启动zookeeper4.2、启动kafka4.3、启动EFAK 5、访问http://ip:8048 github地址:https://github…...

Page与自定义Components生命周期
自定义组件 自定义组件一般可以用component,装饰,在结构体里面用build方法定义UI,或者用builder装饰一个方法,来作为自定义组件的构造方法 而页面page一般用Entry,和component结合起来使用 页面生命周期方法: onPageShow:页面每次显示时触发 onPageHid…...

Chain of Thought (CoT) 系列论文:大模型思维链,提升 LLM 的推理能力
文章目录 1. COT:Chain of Thought1. 研究背景2. CoT的原理3. CoT Prompt 1. COT:Chain of Thought COT 是 2022.01 由 google 提出的针对提升 LLM 的推理能力的 Prompt Engineering 方法。 paper: Chain-of-Thought Prompting Elicits Re…...
已解决:java.net.BindException: 地址已在使用
1. 问题描述 java.net.BindException: 地址已在使用 是一种常见的网络异常,通常在服务器程序尝试绑定到一个已经被占用的端口或地址时出现。具体的异常信息可能如下: java.net.BindException: Address already in use: JVM_Bind或 java.net.BindExcep…...
看书标记【数据科学:R语言实战 8】
看书标记——R语言 Chapter 8 数据可视化——绘图8.1 功能包8.2 散点图8.2.1 回归线8.2.2 lowess线条8.2.3 scatterplot函数8.2.4 Scatterplot矩阵1.splom——展示矩阵数据2.cpairs——绘图矩阵图 8.2.5 密度散点图 8.3 直方图和条形图8.3.1 条形图8.3.2 直方图 8.3.3 ggplot28…...

STM32标准库学习笔记-1.基础知识
STM32介绍: STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器。 ARM的含义: 公司名称:ARM公司成立于1990年,全称是Advanced RISC Machines(RISC:Reduced Instruction Set Computer 精简指令集计算机 相对应有C…...

Nginx:高效HTTP服务器与反向代理
Nginx:高效HTTP服务器与反向代理 1、核心特点2、应用场景 💖The Begin💖点点关注,收藏不迷路💖 Nginx,一个开源的HTTP服务器与反向代理工具,因其高性能、低资源消耗而备受推崇。以下是Nginx的几…...
vue3二次封装element-puls
将表单的通用信息给设置出来 如: label 的提示信息 , type 的类型 // 定义表单的配置项 const formConfig{ formItems:[ { type:"input", label:"用户ID", placeholder:"请输入用户ID" } ] } 页面配置如 <template v-for"(it…...
在CentOS 7上安装Apache Tomcat 8的方法
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 介绍 Apache Tomcat 是一个用于提供 Java 应用程序的 Web 服务器和 Servlet 容器。Tomcat 是由 Apache 软件基金会发布的 Java Servlet…...

深入理解分布式事务中的三阶段提交(3PC),什么是3PC,3PC原理是怎样?3PC的优化?
在上一篇文章中,我们详细介绍了分布式事务中的两阶段提交,以及知道了两阶段提交存在一定的问题 深入理解分布式事务中的两阶段提交(2PC),什么是2PC,2PC原理是怎样?2PC有没有什么问题࿱…...

这款新的 AI 工具会消灭 ChatGPT 吗?
随着大型语言模型 (LLM) 的出现,ChatGPT迅速成为全球计算机用户的家喻户晓的名字。这款由 OpenAI 设计的深度学习聊天机器人以知识宝库而闻名——一部互联网百科全书。 继ChatGPT的脚步之后,许多其他生成式AI工具也纷纷涌现。 2023 年 3 月,一…...
谷粒商城实战笔记-214~219-商城业务-认证服务-验证码防刷校验
文章目录 一,验证码防刷校验1,第三方服务提供发送短信的接口2,登录服务提供给前端的接口 二,215-商城业务-认证服务-一步一坑的注册页环境三,商城业务-认证服务-异常机制四,217-商城业务-认证服务-MD5&…...
在华为服务器的openEuler系统中适配Pytorch调用NPU
服务器架构:aarch64 yolov7 和 mindyolo 二选一即可,yolov7是基于pytorch,mindyolo是基于mindspore 本文档基于CANN8.0RC3 , 刚发布比较新,如果有问题,可将CANN版本降低 导读 资料首页:https://www.hiasce…...

MVCC工作原理深入解析
一、事务概述 mysql事务是指一组命令操作,在执行过程中用来保证要么全部成功,要么全部失败。事务是由引擎层面来支持的,MyISM引擎不支持事务,InnoDB引擎支持事务。 事务具有ACID四大特性 原子性(Atomicity࿰…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...

JDK 17 序列化是怎么回事
如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...

【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
Java多线程实现之Runnable接口深度解析
Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...