页面权限基础功能、树形
This commit is contained in:
parent
4bd6c4581c
commit
816cb211e4
@ -2,13 +2,18 @@ package com.cdzy.staff.controller;
|
||||
|
||||
import com.cdzy.common.model.request.PageParam;
|
||||
import com.cdzy.common.model.response.JsonResult;
|
||||
import com.cdzy.staff.model.dto.EbikePermissionTreeNode;
|
||||
import com.cdzy.staff.model.entity.EbikePermission;
|
||||
import com.cdzy.staff.model.vo.EbikePermissionVo;
|
||||
import com.cdzy.staff.service.EbikePermissionService;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.core.util.StringUtil;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 系统权限表 控制层。
|
||||
@ -30,20 +35,20 @@ public class EbikePermissionController {
|
||||
* @return {@code true} 添加成功,{@code false} 添加失败
|
||||
*/
|
||||
@PostMapping("save")
|
||||
public JsonResult<?> save(@RequestBody EbikePermission ebikePermission) {
|
||||
ebikePermissionService.save(ebikePermission);
|
||||
public JsonResult<?> save(@RequestBody EbikePermissionVo ebikePermission) {
|
||||
ebikePermissionService.savePermission(ebikePermission);
|
||||
return JsonResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据主键删除系统权限表。
|
||||
*
|
||||
* @param id 主键
|
||||
* @param permissionId 主键
|
||||
* @return {@code true} 删除成功,{@code false} 删除失败
|
||||
*/
|
||||
@PostMapping("remove/{id}")
|
||||
public JsonResult<?> remove(@PathVariable Long id) {
|
||||
ebikePermissionService.removeById(id);
|
||||
@GetMapping("remove")
|
||||
public JsonResult<?> remove(@RequestParam("permissionId") Long permissionId) {
|
||||
ebikePermissionService.removeById(permissionId);
|
||||
return JsonResult.success();
|
||||
}
|
||||
|
||||
@ -54,8 +59,8 @@ public class EbikePermissionController {
|
||||
* @return {@code true} 更新成功,{@code false} 更新失败
|
||||
*/
|
||||
@PostMapping("update")
|
||||
public JsonResult<?> update(@RequestBody EbikePermission ebikePermission) {
|
||||
ebikePermissionService.updateById(ebikePermission);
|
||||
public JsonResult<?> update(@RequestBody EbikePermissionVo ebikePermission) {
|
||||
ebikePermissionService.updatePermission(ebikePermission);
|
||||
return JsonResult.success();
|
||||
}
|
||||
|
||||
@ -65,20 +70,22 @@ public class EbikePermissionController {
|
||||
* @return 所有数据
|
||||
*/
|
||||
@GetMapping("list")
|
||||
public JsonResult<?> list() {
|
||||
List<EbikePermission> list = ebikePermissionService.list();
|
||||
public JsonResult<?> list(@RequestParam("type")Integer type) {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
.eq("type", type, Objects.nonNull(type));
|
||||
List<EbikePermission> list = ebikePermissionService.list(queryWrapper);
|
||||
return JsonResult.success(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据系统权限表主键获取详细信息。
|
||||
*
|
||||
* @param id 系统权限表主键
|
||||
* @param permissionId 系统权限表主键
|
||||
* @return 系统权限表详情
|
||||
*/
|
||||
@GetMapping("getInfo/{id}")
|
||||
public JsonResult<?> getInfo(@PathVariable Long id) {
|
||||
EbikePermission ebikePermission = ebikePermissionService.getById(id);
|
||||
@GetMapping("getInfo")
|
||||
public JsonResult<?> getInfo(@RequestParam("permissionId") Long permissionId) {
|
||||
EbikePermission ebikePermission = ebikePermissionService.getById(permissionId);
|
||||
return JsonResult.success(ebikePermission);
|
||||
}
|
||||
|
||||
@ -89,9 +96,21 @@ public class EbikePermissionController {
|
||||
* @return 分页对象
|
||||
*/
|
||||
@GetMapping("page")
|
||||
public JsonResult<?> page(PageParam pageParam) {
|
||||
Page<EbikePermission> page = ebikePermissionService.page(pageParam.getPage());
|
||||
public JsonResult<?> page(PageParam pageParam,String name) {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create().like(EbikePermission::getName,name, StringUtil.hasText(name));
|
||||
Page<EbikePermission> page = ebikePermissionService.page(pageParam.getPage(),queryWrapper);
|
||||
return JsonResult.success(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有权限的树形结构。
|
||||
*
|
||||
* @return 树形结构
|
||||
*/
|
||||
@GetMapping("tree")
|
||||
public JsonResult<?> tree() {
|
||||
List<EbikePermissionTreeNode> list = ebikePermissionService.tree();
|
||||
return JsonResult.success(list);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,82 @@
|
||||
package com.cdzy.staff.model.dto;
|
||||
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 系统权限表 实体类。
|
||||
*
|
||||
* @author loves
|
||||
* @since 2025-09-04
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class EbikePermissionTreeNode implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Id
|
||||
private Long permissionId;
|
||||
|
||||
/**
|
||||
* 组件路径
|
||||
*/
|
||||
private String component;
|
||||
|
||||
/**
|
||||
* 菜单名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 类型:1-目录 2-页面 3-按钮
|
||||
*/
|
||||
private Integer type;
|
||||
|
||||
private Long createBy;
|
||||
|
||||
private LocalDateTime createTime;
|
||||
|
||||
private Long updateBy;
|
||||
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
private Boolean isDeleted;
|
||||
|
||||
/**
|
||||
* 路由路径
|
||||
*/
|
||||
private String path;
|
||||
|
||||
/**
|
||||
* 父级id
|
||||
*/
|
||||
private Long parentId;
|
||||
|
||||
/**
|
||||
* 图标
|
||||
*/
|
||||
private String svgIcon;
|
||||
|
||||
/**
|
||||
* 重定向路径
|
||||
*/
|
||||
private String redirect;
|
||||
|
||||
/**
|
||||
* 子集
|
||||
*/
|
||||
private List<EbikePermissionTreeNode> children;
|
||||
|
||||
}
|
||||
@ -1,18 +1,16 @@
|
||||
package com.cdzy.staff.model.entity;
|
||||
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import java.io.Serializable;
|
||||
import java.sql.Timestamp;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 系统权限表 实体类。
|
||||
*
|
||||
@ -29,7 +27,7 @@ public class EbikePermission implements Serializable {
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Id(keyType = KeyType.Auto)
|
||||
@Id
|
||||
private Long permissionId;
|
||||
|
||||
/**
|
||||
@ -49,11 +47,11 @@ public class EbikePermission implements Serializable {
|
||||
|
||||
private Long createBy;
|
||||
|
||||
private Timestamp createTime;
|
||||
private LocalDateTime createTime;
|
||||
|
||||
private Long updateBy;
|
||||
|
||||
private Timestamp updateTime;
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
private Boolean isDeleted;
|
||||
|
||||
@ -72,4 +70,9 @@ public class EbikePermission implements Serializable {
|
||||
*/
|
||||
private String svgIcon;
|
||||
|
||||
/**
|
||||
* 重定向路径
|
||||
*/
|
||||
private String redirect;
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,72 @@
|
||||
package com.cdzy.staff.model.vo;
|
||||
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 系统权限表 实体类。
|
||||
*
|
||||
* @author loves
|
||||
* @since 2025-09-04
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table("ebike_permission")
|
||||
public class EbikePermissionVo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long permissionId;
|
||||
|
||||
/**
|
||||
* 菜单标题
|
||||
*/
|
||||
@NotBlank(message = "菜单标题不能为空")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 类型:1-目录 2-页面 3-按钮
|
||||
*/
|
||||
@NotNull(message = "类型不能为空")
|
||||
private Integer type;
|
||||
|
||||
/**
|
||||
* 组件路径
|
||||
*/
|
||||
@NotBlank(message = "菜单标题不能为空")
|
||||
private String component;
|
||||
|
||||
/**
|
||||
* 路由路径
|
||||
*/
|
||||
@NotBlank(message = "菜单标题不能为空")
|
||||
private String path;
|
||||
|
||||
|
||||
/**
|
||||
* 图标
|
||||
*/
|
||||
private String svgIcon;
|
||||
|
||||
/**
|
||||
* 重定向路径
|
||||
*/
|
||||
private String redirect;
|
||||
|
||||
/**
|
||||
* 父级id
|
||||
*/
|
||||
private Long parentId;
|
||||
|
||||
}
|
||||
@ -1,8 +1,12 @@
|
||||
package com.cdzy.staff.service;
|
||||
|
||||
import com.cdzy.staff.model.dto.EbikePermissionTreeNode;
|
||||
import com.cdzy.staff.model.vo.EbikePermissionVo;
|
||||
import com.mybatisflex.core.service.IService;
|
||||
import com.cdzy.staff.model.entity.EbikePermission;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 系统权限表 服务层。
|
||||
*
|
||||
@ -11,4 +15,13 @@ import com.cdzy.staff.model.entity.EbikePermission;
|
||||
*/
|
||||
public interface EbikePermissionService extends IService<EbikePermission> {
|
||||
|
||||
void savePermission(EbikePermissionVo ebikePermission);
|
||||
|
||||
void updatePermission(EbikePermissionVo ebikePermission);
|
||||
|
||||
/**
|
||||
* 获取树形结构
|
||||
* @return 树形结构
|
||||
*/
|
||||
List<EbikePermissionTreeNode> tree();
|
||||
}
|
||||
|
||||
@ -41,6 +41,7 @@ public class EbikeOperatorServiceImpl extends ServiceImpl<EbikeOperatorMapper, E
|
||||
operatorOld.setOperatorName(ebikeOperator.getOperatorName());
|
||||
operatorOld.setAddress(ebikeOperator.getAddress());
|
||||
operatorOld.setContactPhone(ebikeOperator.getContactPhone());
|
||||
operatorOld.setUpdateBy(StpUtil.getLoginIdAsLong());
|
||||
ebikeOperatorMapper.update(operatorOld);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,11 +1,20 @@
|
||||
package com.cdzy.staff.service.impl;
|
||||
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.cdzy.staff.model.entity.EbikePermission;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import com.cdzy.common.ex.EbikeException;
|
||||
import com.cdzy.staff.mapper.EbikePermissionMapper;
|
||||
import com.cdzy.staff.model.dto.EbikePermissionTreeNode;
|
||||
import com.cdzy.staff.model.entity.EbikePermission;
|
||||
import com.cdzy.staff.model.vo.EbikePermissionVo;
|
||||
import com.cdzy.staff.service.EbikePermissionService;
|
||||
import com.cdzy.staff.utils.TreeUtil;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 系统权限表 服务层实现。
|
||||
*
|
||||
@ -13,6 +22,73 @@ import org.springframework.stereotype.Service;
|
||||
* @since 2025-08-07
|
||||
*/
|
||||
@Service
|
||||
public class EbikePermissionServiceImpl extends ServiceImpl<EbikePermissionMapper, EbikePermission> implements EbikePermissionService{
|
||||
public class EbikePermissionServiceImpl extends ServiceImpl<EbikePermissionMapper, EbikePermission> implements EbikePermissionService {
|
||||
|
||||
@Resource
|
||||
private EbikePermissionMapper ebikePermissionMapper;
|
||||
|
||||
@Override
|
||||
public void savePermission(EbikePermissionVo ebikePermission) {
|
||||
Long parentId = ebikePermission.getParentId();
|
||||
checkParent(parentId);
|
||||
EbikePermission permission = EbikePermission.builder()
|
||||
.name(ebikePermission.getName())
|
||||
.type(ebikePermission.getType())
|
||||
.path(ebikePermission.getPath())
|
||||
.component(ebikePermission.getComponent())
|
||||
.svgIcon(ebikePermission.getSvgIcon())
|
||||
.redirect(ebikePermission.getRedirect())
|
||||
.parentId(parentId)
|
||||
.createBy(StpUtil.getLoginIdAsLong())
|
||||
.build();
|
||||
ebikePermissionMapper.insert(permission);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePermission(EbikePermissionVo ebikePermission) {
|
||||
Long parentId = ebikePermission.getParentId();
|
||||
checkParent(parentId);
|
||||
EbikePermission permission = ebikePermissionMapper.selectOneById(ebikePermission.getPermissionId());
|
||||
if (permission == null) {
|
||||
throw new EbikeException("该页面/按钮不存在或已删除");
|
||||
}
|
||||
permission.setName(ebikePermission.getName());
|
||||
permission.setType(ebikePermission.getType());
|
||||
permission.setPath(ebikePermission.getPath());
|
||||
permission.setComponent(ebikePermission.getComponent());
|
||||
permission.setSvgIcon(ebikePermission.getSvgIcon());
|
||||
permission.setRedirect(ebikePermission.getRedirect());
|
||||
permission.setParentId(parentId);
|
||||
permission.setUpdateBy(StpUtil.getLoginIdAsLong());
|
||||
ebikePermissionMapper.update(permission);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<EbikePermissionTreeNode> tree() {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
.isNull(EbikePermission::getParentId);
|
||||
List<EbikePermissionTreeNode> first = ebikePermissionMapper.selectListByQueryAs(queryWrapper,EbikePermissionTreeNode.class);
|
||||
List<Long> firstIds = first.stream().map(EbikePermissionTreeNode::getPermissionId).toList();
|
||||
|
||||
queryWrapper.clear();
|
||||
queryWrapper.in(EbikePermission::getParentId,firstIds);
|
||||
List<EbikePermissionTreeNode> second = ebikePermissionMapper.selectListByQueryAs(queryWrapper,EbikePermissionTreeNode.class);
|
||||
List<Long> secondIds = second.stream().map(EbikePermissionTreeNode::getPermissionId).toList();
|
||||
|
||||
queryWrapper.clear();
|
||||
queryWrapper.in(EbikePermission::getParentId,secondIds);
|
||||
List<EbikePermissionTreeNode> third = ebikePermissionMapper.selectListByQueryAs(queryWrapper,EbikePermissionTreeNode.class);
|
||||
|
||||
TreeUtil.permissionTree(first,second,third);
|
||||
return first;
|
||||
}
|
||||
|
||||
private void checkParent(Long parentId) {
|
||||
if (parentId != null) {
|
||||
EbikePermission permission = ebikePermissionMapper.selectOneById(parentId);
|
||||
if (permission == null) {
|
||||
throw new EbikeException("所选父级不存在或已删除");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.cdzy.staff.service.impl;
|
||||
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import com.cdzy.common.ex.EbikeException;
|
||||
import com.cdzy.staff.mapper.EbikeOperatorMapper;
|
||||
import com.cdzy.staff.mapper.EbikeRoleMapper;
|
||||
@ -53,6 +54,7 @@ public class EbikeRoleServiceImpl extends ServiceImpl<EbikeRoleMapper, EbikeRole
|
||||
role.setRoleName(ebikeRole.getRoleName());
|
||||
role.setRoleCode(ebikeRole.getRoleCode());
|
||||
role.setDescription(ebikeRole.getDescription());
|
||||
role.setUpdateBy(StpUtil.getLoginIdAsLong());
|
||||
ebikeRoleMapper.update(role);
|
||||
}
|
||||
|
||||
|
||||
35
ebike-staff/src/main/java/com/cdzy/staff/utils/TreeUtil.java
Normal file
35
ebike-staff/src/main/java/com/cdzy/staff/utils/TreeUtil.java
Normal file
@ -0,0 +1,35 @@
|
||||
package com.cdzy.staff.utils;
|
||||
|
||||
import com.cdzy.staff.model.dto.EbikePermissionTreeNode;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @author attiya
|
||||
* @since 2025-09-05
|
||||
*/
|
||||
public class TreeUtil {
|
||||
|
||||
/**
|
||||
* 获取权限树形结构
|
||||
*
|
||||
* @param first 一级
|
||||
* @param second 二级
|
||||
* @param third 三级
|
||||
*/
|
||||
public static void permissionTree(List<EbikePermissionTreeNode> first, List<EbikePermissionTreeNode> second, List<EbikePermissionTreeNode> third) {
|
||||
buildTree(second, third);
|
||||
buildTree(first, second);
|
||||
}
|
||||
|
||||
public static void buildTree(List<EbikePermissionTreeNode> parent, List<EbikePermissionTreeNode> child) {
|
||||
parent.forEach(parentNode -> {
|
||||
Long nodeId = parentNode.getPermissionId();
|
||||
if (child != null && !child.isEmpty()) {
|
||||
List<EbikePermissionTreeNode> list = child.stream().filter(Objects::nonNull).filter(childNode -> Objects.equals(nodeId, childNode.getParentId())).toList();
|
||||
parentNode.setChildren(list);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user