ElAdmin 快速开发框架个人笔记

角色权限用户管理

  • 编辑角色
    数据权限的三个选项:
    全部数据权限 无数据权限限制
    本级数据权限 限制只能看到本部门数据
    自定义数据权限 可根据实际需要选择部门控制数据权限
数据交互流程
  • 接口访问控制:
@Log(description = "test")
@PutMapping(value = "/test")
@PreAuthorize("hasAnyRole('admin','menu:edit')")
public ResponseEntity update(@Validated @RequestBody Menu resources){
    // 略
}

接口表示用户拥有 admin、menu:edit 权限中的任意一个就能能访问update方法,如果方法不加@preAuthorize注解,意味着所有用户都需要带上有效的 token 后能访问 update 方法。由于admin 拥有所有权限 所以在进行拦截时 有必要进行抽象 所以需要对其进行抽取 检查是否有admin 是的话就放行 不是的话就找到它的权限

通用查询

1、创建一个查询类 QueryCriteria
2、在控制器中使用
3. Service 中查询

@Override
// @Cacheable
public Object queryAll(UserQueryCriteria criteria, Pageable pageable) {
    Page<User> page = userRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
    return PageUtil.toPage(page.map(userMapper::toDto));
}
缓存注解

@CacheConfig:主要用于配置该类中会用到的一些共用的缓存配置
@Cacheable:主要方法的返回值将被加入缓存。在查询时,会先从缓存中获取,若不存在才再发起对数据库的访问。
@CachePut:主要用于数据新增和修改操作
@CacheEvict:配置于函数上,通常用在删除方法上,用来从缓存中移除相应数据。

异常封装

封装了 BadRequestException,用于处理通用的异常
(1) 实体不存在: EntityNotFoundException
(2) 实体已存在:EntityExistException
全局异常拦截: GlobalExceptionHandler
用法:
/ 通用异常
throw new BadRequestException(“发生了异常”);
// 通用异常,使用自定义状态码
throw new BadRequestException(HttpStatus.OK, “发送了异常”);
// 实体存在异常
throw new EntityExistException(User.class, “email”, “elunez@qq.com”);
// 实体不存在异常
throw new EntityNotFoundException(User.class, “userName”, “test”);

系统日志

本系统使用 AOP 方式记录用户操作日志,只需要在 controller 的方法上使用 @Log("") 注解,就可以将用户操作记录到数据库,

@Log("新增用户")
@PostMapping(value = "/users")
public ResponseEntity create(@Validated @RequestBody User resources){
    checkLevel(resources);
    return new ResponseEntity(userService.create(resources),HttpStatus.CREATED);
}
定时任务

使用步骤:

  • 编写任务处理类
@Slf4j
@Component
public class TestTask {
    public void run(){ log.info("执行成功");  }
    public void run1(String str){ log.info("执行成功,参数为: {}" + str); }
}
  • 页面创建定时任务
    Bean名称:Spring Bean名称,如: testTask
    方法名称:对应后台任务方法名称 方法参数:对应后台任务方法名称值,没有可不填
    cron表达式:可查询官方cron表达式介绍
    状态:是否启动定时任务
  • 代码生成:
    模块名称:这个顾名思义就是模块的名称 生成代码的总文件夹名
    至于包下:这个的意思是生成的代码放到哪个包里面 生成文件夹名下的位置 类似与包名
    前端路径:前端代码生成的路径 前端代码的绝对路径
    是否覆盖:危险操作,需谨慎
查询方法的调用 实现类 JPA 的综合动态查询

public Map<String,Object> queryAll(SOrderQueryCriteria criteria, Pageable pageable){// 这里用 Predicate 封装了查询条件     传入lambda 表达式 根据查询条件进行封装  进而由 JpaSpecificationExecutor  执行分页查询结果 得到 结果集  totle: totalElements:[{},{}]
    // root 是一个 操作查询条件的  用它来拼装具体的查询实体
	Page<SOrder> page = sOrderRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
    // 得到的page对象 用工具类转换成map 然后传到页面  sOrderMapper::toDto  意思是调用 sOrderMapper 的 toDto方法  将实体类的  SOrder 转化为DTO  
    // 双冒号是jdk8的一个重要方法   意为 调用  sOrderMapper 里面的  toDto 方法  把 page 转换为: SOrderDto
    Page<SOrderDto> map = page.map(sOrderMapper::toDto);
    // 将DTO 转换为  map 
    Map<String, Object> pageResult = PageUtil.toPage(map);
    return pageResult;
}
系统基类

eladmin-common -> me.zhengjie.base
异步线程池
eladmin-system -> me.zhengjie.config.AsyncTaskExecutePool
线程池工具类
eladmin-system -> me.zhengjie.config.ThreadPoolExecutorUtil
使用方式:
private final static ThreadPoolExecutor executor = ThreadPoolExecutorUtil.getPoll();

系统工具

common 模块的util
ElAdminConstant:系统常用常量定义
EncryptUtils:加密工具,包括对称加密解密,md5加盐加密
FileUtil:文件工具类
PageUtil:分页工具类
RequestHolder:随时获取 HttpServletRequest
SecurityUtils:获取当前用户
SpringContextHolder:随时获取bean
StringUtils:字符串工具类
ThrowableUtil:异常工具,获取堆栈信息
ValidationUtil:验证工具
#目录如下

表格设置

设置show-overflow-tooltip为true使row中的文字有省略提示

  <el-table-column :width="flexColumnWidth(column)" :show-overflow-tooltip="true" v-for="column in tableData.columns" :key="column" :label="customLabel(column)" :prop="column">
引入js

import moment from ‘moment’

引入CSS
  • js校验:
    邮箱:
    { type: ‘email’, message: ‘请输入正确的邮箱地址’, trigger: ‘blur’ }

  • 时间处理: 数据库 是 datetime 实体类这么写
    /** 添加时间 */
    @Column(name = “import_time”)
    @CreationTimestamp // 这个注解是必须的 否则就会报错
    private Timestamp importTime;

  • 隐藏列 v-if=‘show’

  • 栅栏架构:

<el-row type="flex" class="row-bg">
  <el-col :span="6">  
  </el-col>
  <el-col :span="6">
  </el-col>
</el-row>
vue 的分割线
<el-divider></el-divider>
部署:nginx 配置示例
#eladmin  behind
	server {
    listen 80;
    server_name 192.168.186.129;
    location / {
        proxy_pass http://127.0.0.1:8000; #这里的端口记得改成项目对应的哦
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        }
    }

	#eladmin front
	server
   	 {
        listen 8013;
        server_name 192.168.186.129;
        index index.html index.htm;
        root  /usr/local/webserver/nginx/dist;  #dist上传的路径
        error_page 404 /index.html; #这个配置,预防页面刷新后跳转到404页面
   	 } 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃早餐的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值