用上边的用户名、密码直接登录,erupt已经预先实现了完整的权限控等功能,而到这我们几乎是没写过什么代码的,都是框架封装好了的,菜单类数据全部从数据库动态获取,一个基础的后台管理系统就搭建完了,有点哇塞。
有趣的页面
那么问题来了?想要自定义页面怎么办?
开篇我们就说过erupt是零前端代码,全部基于Java注解开发的,接下来用Java注解写个简单页面体验下。
erupt有两个核心注解@Erupt,@EruptField
@Erupt注解修饰类,代表定义一个页面
@EruptField注解修饰字段,代表页面上显示的字段名
@Power注解控制是否操作按钮,增、删、改、查、导入、导出等
@Search注解表示字段为搜索条件
@Table注解表示页面取数据对应的表,如果不设置,页面第一次初始化的时候,会根据类字段值自动创建一张和类名一致的表名。
注解类型比较多,不一一列举了,更多的自己到官网瞅:https://www.erupt.xyz
下边我们定义一个Student类,加上@Erupt,@EruptField注解,这样页面和元素就算写完了,是不是有点颠覆认知。
/* * @Erupt注解修饰在类上,@EruptField注解修饰在字段上 * 其他注解均为Jpa注解 */ @Getter @Setter @Erupt(name = "学生表", power = @Power(importable = true, export = true) ) @Entity //@Table(name = "t_student") public class Student extends BaseModel { @EruptField( views = @View(title = "学生姓名"), edit = @Edit(title = "学生姓名", notNull = true, search = @Search(vague = true)) ) private String studentName; @EruptField( views = @View(title = "所属班级"), edit = @Edit(title = "所属班级", notNull = true) ) private String studentClass; @EruptField( views = @View(title = "学生年龄"), edit = @Edit(title = "学生年龄", notNull = true) ) private String studentAge; @Lob @EruptField( views = @View(title = "学生性别"), edit = @Edit(title = "学生性别", notNull = true) ) private String studentSex; @EruptField( views = @View(title = "考核状态"), edit = @Edit(title = "考核状态", notNull = true, boolType = @BoolType(trueText = "通过", falseText = "挂科"), search = @Search) ) private Boolean status; }但此时新创建的页面不会显示出来,还需要我们手动做一个映射关系,在菜单维护中自定义个菜单,类型值一定要为新建的 类名 Student。
保存刷新后会看到我们的新页面出现了,而且页面的功能很完整,基础操作、查询、导入、导出功能都自动实现了。
页面新增一个学生信息,对应的Student表也多了条记录,而这个持久化的过程完全由框架来做。
尽管Erupt 框架对前后端代码做了深度封装,但它提供了丰富灵活的自定义接口,来满足我们的个性化需求。
比如我们在录入新学生信息时,希望屏蔽名字为张三的同学,可以对页面按钮功能做代理dataProxy,实现自定义的逻辑,对哪个按钮代理就实现对应方法即可,如beforeAdd、afterAdd是对新增按钮的代理。
@Getter @Setter @Erupt(name = "学生表",dataProxy = {StudentDataProxy.class}, power = @Power(importable = true, export = true) ) @Entity //@Table(name = "t_student") public class Student extends BaseModel { } public class StudentDataProxy implements DataProxy<Student> { @Override public void beforeAdd(Student student) { //后台字段校验 if ("张三".equals(student.getStudentName())) { throw new EruptApiErrorTip("名称禁止为张三!"); } } @Override public void afterAdd(Student student) { } @Override public void afterUpdate(Student student) { } @Override public void afterDelete(Student student) { } }当我们在页面录入名字为张三的同学时,成功屏蔽。其他类似的功能还有很多,这里就不一一举例了,看文档看文档~