Erupt 项目搭建

创建Spring Boot项目

Maven依赖

Spring Boot版本为 2.7.10,erupt版本为 1.12.15

erupt版本要与Spring Boot版本适配,3.x.x版本Spring Boot暂不适用说是

    <properties>
        <erupt.version>1.12.15</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/plain
    enabled: true
  error:
    includeException: true
    includeStacktrace: ALWAYS
    includeMessage: ALWAYS

spring:
  #当 erupt.redisSession 为 true 时必须配置此项!
  redis:
    database: 0
    timeout: 10000
    host: 127.0.0.1
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/erupt?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: ****
  jpa:
    show-sql: false
    generate-ddl: true
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    database: mysql
    properties:
      hibernate:
        format_sql: false
  mail:
    username: xxxx@qq.com
    password: xxxxxxx
    host: smtp.qq.com
    properties:
      mail.smtp.ssl.auth: true
      mail.smtp.ssl.enable: true
      mail.smtp.ssl.required: true
  servlet:
    multipart:
      max-file-size: 100MB
      max-request-size: 100MB
  profiles:
    active: dev
  #避免依赖循环引用
#  main:
#    allow-circular-references: true

erupt-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: /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-attachment
    upload-path: D:/erupt-file/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: true
    upms:
      # 登录 session 时长(redisSession为true时有效)
      # redisSession 为 false 时控制有效期的方法:server.servlet.session.timeout
      expire-time-by-login: 60
      # 严格的角色菜单策略,如果非管理员用户拥有“角色管理权限”则仅能编辑已有权限的角色菜单
      strict-role-menu-legal: false

magic-api:
  web: /magic/web
  # 接口配置文件存放路径
  resource.location: D:/erupt-file/magic-script
  show-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",
    //高德地图 SecurityJsCode
    amapSecurityJsCode: "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为回调key
    demo: {
        //路由载入事件
        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

登录

默认有以下菜单栏

新建菜单

新建下级菜单(表格视图)

新建实体类

注意:类上三个注解不能少(@Erupt、@Entity、@Table)

实体类对应的表,数据库中如果没有,项目启动时会自动创建

实体类字段名为驼峰命名的字段在表中会转为“_”类型的字段名,例如:

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注解中过滤字段需为 表名.字段

EruptDao(CRUD)

默认的 CRUD,导入、导出

按上面的 新建下级菜单(表格视图)这种方法生成的页面,会默认拥有

  • 新增(实体类名@ADD)
  • 修改(实体类名@EDIT)
  • 删除(实体类名@DELETE)
  • 详情(实体类名@VIEW_DETAIL)

下面两个需手动加:

  • 导出(实体类名@EXPORT)
  • 导入(实体类名@IMPORTABLE)

 新增

修改

删除

详情

导出

导入


import xyz.erupt.jpa.dao.EruptDao;

    @Resource
    private EruptDao eruptDao;

类似 Mybatis-Plus 的用法

示例:

  • lambdaQuery 强类型限制,查询数据对应的实体类
  • eq 查询条件
  • limit 查询条数
  • list 返回 list 集合

                                                                Leslie Lee 随笔

Erupt 是一个快速开发企业级后台管理系统的开源框架,它提供了丰富的组件和工具,可以快速搭建出功能强大、易于维护的后台管理系统。其中,自定义按钮是 Erupt 非常实用的一个组件,可以自定义按钮的样式、文本、点击事件等属性,实现自定义的功能。下面是一个实现自定义按钮的示例: 首先,在 Erupt 的实体类中添加一个按钮属性: ```java @EruptField( views = @View(title = "操作", sortable = false), edit = @Edit(title = "操作"), search = @Search, actions = { @Action(title = "自定义按钮", name = "customButton") } ) private String button; public String getButton() { return button; } public void setButton(String button) { this.button = button; } ``` 这里使用了 `@Action` 注解来定义一个名为 "customButton" 的自定义按钮。 然后,在 Erupt面中添加按钮的 HTML 代码: ```html <div class="btn-group"> <button class="btn btn-success" onclick="erupt.handleButtonClick(this, 'customButton')">自定义按钮</button> </div> ``` 这里使用了 Bootstrap 框架的样式来渲染按钮,并且通过 `erupt.handleButtonClick` 函数来触发按钮的点击事件。 最后,在 Erupt 的 Controller 中处理按钮的点击事件: ```java @RequestMapping("/erupt/customButton") @ResponseBody public Object customButton() { // 处理按钮的点击事件,返回响应结果 return "自定义按钮被点击了"; } ``` 这里使用了 `@RequestMapping` 注解来定义按钮的访问路径,并在方法中处理按钮的点击事件。返回的响应结果将在面上显示出来。 这样就完成了自定义按钮的实现。你可以根据实际需求来定义按钮的样式、文本、点击事件等属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值