前言
基于对应专栏前一篇继续写,实现eladmin的CRUD功能。假设已经将redis、后台、前端都正产启动了。
创建数据表
先新建一个数据表,基于最前面几篇介绍javamail获取邮箱简历,创建一个表,维护所有相关的邮箱账号密码,方便定时任务逐个邮箱获取邮件。
创建的表email_account:
其中,创建日期和更新日期使用了datetime格式,框架支持自动生成这两个数据;添加了是否删除代码,不使用物理删除形式,所以框架生成的删除功能需要都改成更新(is_delete字段更新为1)。
生成代码
左侧目录系统工具–代码生成,点开以后可以看到上面创建的数据表email_account,点击配置。
配置页面有上下两部分,上面是字段的配置,下面是的生成的配置。
字段配置中:
字段描述:从数据库读取的备注,如果数据库维护的好,这里就省事了
列表:列表要查询展示哪些字段,比如不展示更新时间和是否删除,则直接取消勾选
表单:添加和编辑的时候对应的字段,我取消掉了主键、两个时间、删除标志
表单类型:查询条件是输入框还是日期框等情况
查询方式:精准查询、模糊查询等
日期注解:创建时候、更新时候是否更新字段
关联字段:使用配置好的字段数据,这个后面再单独介绍
生成配置:
作者名称:会显示在代码注释里,作者是谁
模块名称:就是自己Module的名称
置于包下:生成代码对应的包名
接口名称:生成的swagger会使用这个名称显示
前端路径:可以找到自己前端代码,看下要放到哪里,一般是views下新建一个目录,我使用的是 /Users/admin/Documents/workspace/eladmin-web/src/views/xingchenlie/basedata/
去表前缀:可以为空
是否覆盖:选择否,因为生成代码的时候,前端vue文件命名都是index.vue,如果多个文件放到views下同一个文件夹中,需要把后面的手动重命名,所以不要覆盖,不然之前的就没了
填写完成后点击保存,然后看到字段配置上方绿色按钮是生成&保存,点击。然后返回到代码生成列表,点击下载。
代码移动
生成代码压缩包解压后又两个文件夹,分别对应前端和后端代码。
前端代码:如果配置的时候填写的路径没有文件,那么前端代码可以不用管了,因为刷新前端代码会发现文件已经自动生成了。但是这里有个问题,如果配置的文件夹(本例是views下的xingchenglie/basedata/)已经有了index.vue,那么这个文件就没有办法自动生成,需要从代码里找到index.vue重命名,比如emailAccount.vue,然后复制到对应项目文件夹中。
其他的文件,诸如调用的js等都会自动生成。
后端代码:一步步点开,从java下目录点击后复制(如果没有修改包名,文件夹名称就是me),然后粘贴到项目的src/main/java文件夹中。
如果已经有这个包了,只要没有java文件,提示是否覆盖的时候直接点是。复制后代码样式:
代码移动完成后,前端的无需重启,会自动刷新部署上;后端Java的需要重启一下。必须重启,不然配置的菜单也不能访问。
配置菜单
左侧目录系统管理–菜单管理
点击添加,先给自己的业务添加一个目录,名称用招聘管理,然后点击确定。
在已经创建的目录里面再添加个菜单,名称就用邮箱账号。其中组件路径输入的是生成代码修改过的vue文件位置,比如本例的是xingchenglie/basedata/emailAccount,如果没有修改过文件名,那么应该是xingchenlie/basedata/index
角色授权
左侧目录的系统管理–角色管理,点击超级管理员的,然后左右菜单树打开,将邮箱账号的勾选上。并点击保存。
完成后退出重新登录,或者直接刷新网页,可以看到左侧多出来了对应的功能目录。点击后效果如下
代码调整
因为本例没有使用物理删除,所以删除部分的代码需要进行修改,改为编辑的逻辑(is_delete修改为1)。如果没有这种逻辑的直接略过本部分。
1、me.zhengjie.xingchenlie.basedata.service.dto.EmailAccountQueryCriteria.java
增加请求参数is_delete=0,这样查询出来的都是没有删除的数据。
package me.zhengjie.xingchenlie.basedata.service.dto;
import lombok.Data;
import java.util.List;
import me.zhengjie.annotation.Query;
/**
* @author lootaa
* @date 2022-05-08
**/
@Data
public class EmailAccountQueryCriteria{
/** 模糊 */
@Query(type = Query.Type.INNER_LIKE)
private String account;
/** 精确 */
@Query
private Integer isDelete = 0;
}
2、me.zhengjie.xingchenlie.basedata.domain.EmailAccount.EmailAccountServiceImpl
修改添加(is_delete赋值为0)、删除(使用更新逻辑)方法
@Override
@Transactional(rollbackFor = Exception.class)
public EmailAccountDto create(EmailAccount resources) {
Snowflake snowflake = IdUtil.createSnowflake(1, 1);
resources.setZid(snowflake.nextId());
resources.setIsDelete(0);
return emailAccountMapper.toDto(emailAccountRepository.save(resources));
}
@Override
public void deleteAll(Long[] ids) {
for (Long zid : ids) {
// emailAccountRepository.deleteById(zid);
EmailAccount emailAccount = emailAccountRepository.findById(zid).orElseGet(EmailAccount::new);
emailAccount.setIsDelete(1);
emailAccountRepository.save(emailAccount);
}
}
代码调整后需要重启后台。
最终实现
可以实现数据的CRUD导出等操作,其中样式如果不美观可以对vue文件进行调整。