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࿰…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...