系列文章目录
若依框架学习(前后端分离)——(win11部署docker redis)
若依框架学习(前后端分离)——(redis 浅学)
若依框架学习(前后端分离)——(启动)
若依框架学习(前后端分离)——(登录代码学习篇)
前言
前面已经学习了关于登录的几个方法,具体有验证码的实现,登录验证,用户权限角色信息,用户路由建立等等。下面来学习具体用户管理涉及到的代码部分。
一、流程
加载vue页面——>请求后台数据处理
created() {
this.getList();//获取上图中用户信息表
this.getDeptTree();//获取上图中公司架构组织
this.getConfigKey("sys.user.initPassword").then(response => {
this.initPassword = response.msg;
});
},
二、getlist方法获取用户信息
1.用户分页
methods: {
/** 查询用户列表 */
getList() {
this.loading = true;//加载效果
listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.userList = response.rows;
this.total = response.total;
this.loading = false;
}
);
},
// 查询用户列表
export function listUser(query) {
return request({
url: '/system/user/list',
method: 'get',
params: query
})
}
/**
* 获取用户列表
*/
@PreAuthorize("@ss.hasPermi('system:user:list')")//这里注解是用来做权限判断的
@GetMapping("/list")
public TableDataInfo list(SysUser user)
{
startPage();//设置分页
List<SysUser> list = userService.selectUserList(user);
return getDataTable(list);
}
使用继承于PageHelper的PageUtils实现分页
PageHelper 中的 reasonable 对参数进行逻辑处理,保证参数的正确性,
pageNum = 0/-1,会自动pageNum = 1
2.用户数据查询
/**
* 根据条件分页查询用户列表
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@Override
@DataScope(deptAlias = "d", userAlias = "u")//给表设置别名的
public List<SysUser> selectUserList(SysUser user)
{
return userMapper.selectUserList(user);
}
三、selectDeptTreeList方法获取部门树
(1)查出所有的部门数据
(2)组装成树状结构
/**
* 获取部门树列表
*/
@PreAuthorize("@ss.hasPermi('system:user:list')")
@GetMapping("/deptTree")
public AjaxResult deptTree(SysDept dept)
{
return success(deptService.selectDeptTreeList(dept));
}
/**
* 查询部门树结构信息
*
* @param dept 部门信息
* @return 部门树信息集合
*/
@Override
public List<TreeSelect> selectDeptTreeList(SysDept dept)
{
List<SysDept> depts = SpringUtils.getAopProxy(this).selectDeptList(dept);
return buildDeptTreeSelect(depts);
}
/**
* 构建前端所需要树结构
*
* @param depts 部门列表
* @return 树结构列表
*/
@Override
public List<SysDept> buildDeptTree(List<SysDept> depts)
{
List<SysDept> returnList = new ArrayList<SysDept>();
List<Long> tempList = depts.stream().map(SysDept::getDeptId).collect(Collectors.toList());
for (SysDept dept : depts)
{
// 如果是顶级节点, 遍历该父节点的所有子节点
if (!tempList.contains(dept.getParentId()))
{
recursionFn(depts, dept);
returnList.add(dept);
}
}
if (returnList.isEmpty())
{
returnList = depts;
}
return returnList;
}
/**
* 构建前端所需要下拉树结构
*
* @param depts 部门列表
* @return 下拉树结构列表
*/
@Override
public List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts)
{
List<SysDept> deptTrees = buildDeptTree(depts);
return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList());//更改泛型 前端不需要的信息不要 构造函数映射赋值
}
1、先找到顶级节点,找到它的子节点
2、遍历顶级节点的子节点,再找到它的子节点
/**
* 递归列表
*/
private void recursionFn(List<SysDept> list, SysDept t)
{
// 得到子节点列表
List<SysDept> childList = getChildList(list, t);
t.setChildren(childList);
for (SysDept tChild : childList)
{
if (hasChild(list, tChild))
{
recursionFn(list, tChild);
}
}
}
总结
本文简单介绍了用户数据加载,分页,查询,部门树建立功能。