百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

《若依ruoyi》第三十一章:Ruoyi用户管理功能代码逻辑拆解四

ztj100 2025-07-23 19:27 29 浏览 0 评论

继续上一篇文章进行功能代码拆解

1、岗位和角色下拉框实现

<el-col :span="12">
  <el-form-item label="岗位">
    <el-select v-model="form.postIds" multiple placeholder="请选择岗位">
      <el-option
        v-for="item in postOptions"
        :key="item.postId"
        :label="item.postName"
        :value="item.postId"
        :disabled="item.status == 1"
      ></el-option>
    </el-select>
  </el-form-item>
</el-col>
<el-col :span="12">
  <el-form-item label="角色">
    <el-select v-model="form.roleIds" multiple placeholder="请选择角色">
      <el-option
        v-for="item in roleOptions"
        :key="item.roleId"
        :label="item.roleName"
        :value="item.roleId"
        :disabled="item.status == 1"
      ></el-option>
    </el-select>
  </el-form-item>
</el-col>

如上述代码,岗位的下拉数据源是postOptions。

v-for="item in postOptions":循环postOptions对象,展示的内容是:label="item.roleName",key值是:key="item.roleId"。展示结果如下图。

roleOptions是角色列表数据,实现方式跟岗位逻辑一样。



角色对应的数据库表:

CREATE TABLE `sys_role` (
  `role_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '角色ID',
  `role_name` varchar(30) NOT NULL COMMENT '角色名称',
  `role_key` varchar(100) NOT NULL COMMENT '角色权限字符串',
  `role_sort` int(4) NOT NULL COMMENT '显示顺序',
  `data_scope` char(1) DEFAULT '1' COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
  `menu_check_strictly` tinyint(1) DEFAULT '1' COMMENT '菜单树选择项是否关联显示',
  `dept_check_strictly` tinyint(1) DEFAULT '1' COMMENT '部门树选择项是否关联显示',
  `status` char(1) NOT NULL COMMENT '角色状态(0正常 1停用)',
  `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`role_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='角色信息表';

岗位对应的数据库表:

CREATE TABLE `sys_post` (
  `post_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '岗位ID',
  `post_code` varchar(64) NOT NULL COMMENT '岗位编码',
  `post_name` varchar(50) NOT NULL COMMENT '岗位名称',
  `post_sort` int(4) NOT NULL COMMENT '显示顺序',
  `status` char(1) NOT NULL COMMENT '状态(0正常 1停用)',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`post_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='岗位信息表';

2、岗位和角色数据来源,通过API接口获取

用户点击新增按钮的时候,调用接口获取岗位和角色数据,代码片段如下:

/** 新增按钮操作 */
handleAdd() {
  this.reset();
  getUser().then(response => {
    this.postOptions = response.posts;
    this.roleOptions = response.roles;
    this.open = true;
    this.title = "添加用户";
    this.form.password = this.initPassword;
  });
},
// 查询用户详细
export function getUser(userId) {
  return request({
    url: '/system/user/' + parseStrEmpty(userId),
    method: 'get'
  })
}

3、java 后端接口实现

/**
 * 根据用户编号获取详细信息
 */
@PreAuthorize("@ss.hasPermi('system:user:query')")
@GetMapping(value = { "/", "/{userId}" })
public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
{
    userService.checkUserDataScope(userId);
    AjaxResult ajax = AjaxResult.success();
    List<SysRole> roles = roleService.selectRoleAll();
    ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
    ajax.put("posts", postService.selectPostAll());
    if (StringUtils.isNotNull(userId))
    {
        SysUser sysUser = userService.selectUserById(userId);
        ajax.put(AjaxResult.DATA_TAG, sysUser);
        ajax.put("postIds", postService.selectPostListByUserId(userId));
        ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList()));
    }
    return ajax;
}

调用sys_role和sys_post这两张表数据,并返回。

请求接口:
http://localhost:1024/dev-api/system/user/

响应数据:

{
	"msg": "操作成功",
	"code": 200,
	"roles": [
		{
			"createBy": null,
			"createTime": "2023-06-14 14:17:39",
			"updateBy": null,
			"updateTime": null,
			"remark": "普通角色",
			"roleId": 2,
			"roleName": "普通角色",
			"roleKey": "common",
			"roleSort": 2,
			"dataScope": "2",
			"menuCheckStrictly": true,
			"deptCheckStrictly": true,
			"status": "0",
			"delFlag": "0",
			"flag": false,
			"menuIds": null,
			"deptIds": null,
			"permissions": null,
			"admin": false
		}
	],
	"posts": [
		{
			"createBy": "admin",
			"createTime": "2023-06-14 14:17:39",
			"updateBy": null,
			"updateTime": null,
			"remark": "",
			"postId": 1,
			"postCode": "ceo",
			"postName": "董事长",
			"postSort": 1,
			"status": "0",
			"flag": false
		},
		{
			"createBy": "admin",
			"createTime": "2023-06-14 14:17:39",
			"updateBy": null,
			"updateTime": null,
			"remark": "",
			"postId": 2,
			"postCode": "se",
			"postName": "项目经理",
			"postSort": 2,
			"status": "0",
			"flag": false
		},
		{
			"createBy": "admin",
			"createTime": "2023-06-14 14:17:39",
			"updateBy": null,
			"updateTime": null,
			"remark": "",
			"postId": 3,
			"postCode": "hr",
			"postName": "人力资源",
			"postSort": 3,
			"status": "0",
			"flag": false
		},
		{
			"createBy": "admin",
			"createTime": "2023-06-14 14:17:39",
			"updateBy": null,
			"updateTime": null,
			"remark": "",
			"postId": 4,
			"postCode": "user",
			"postName": "普通员工",
			"postSort": 4,
			"status": "0",
			"flag": false
		}
	]
}

#头条家时光#

未来计划

1、ruoyi非分离版本拆解

2、ruoyi-vue-pro:讲解工作流

3、ruoyi-vue-pro:支付模块,电商模块

4、基于ruoyi-vue-pro项目开发

5、JEECG低代码开发平台

请关注我,本星球会持续推出更多的开源项目代码解析,如有更好的意见请留言回复或者私信。

相关推荐

Linux集群自动化监控系统Zabbix集群搭建到实战

自动化监控系统...

systemd是什么如何使用_systemd/system

systemd是什么如何使用简介Systemd是一个在现代Linux发行版中广泛使用的系统和服务管理器。它负责启动系统并管理系统中运行的服务和进程。使用管理服务systemd可以用来启动、停止、...

Linux服务器日常巡检脚本分享_linux服务器监控脚本

Linux系统日常巡检脚本,巡检内容包含了,磁盘,...

7,MySQL管理员用户管理_mysql 管理员用户

一、首次设置密码1.初始化时设置(推荐)mysqld--initialize--user=mysql--datadir=/data/3306/data--basedir=/usr/local...

Python数据库编程教程:第 1 章 数据库基础与 Python 连接入门

1.1数据库的核心概念在开始Python数据库编程之前,我们需要先理解几个核心概念。数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它就像一个电子化的文件柜,能让我们高效...

Linux自定义开机自启动服务脚本_linux添加开机自启动脚本

设置WGCloud开机自动启动服务init.d目录下新建脚本在/etc/rc.d/init.d新建启动脚本wgcloudstart.sh,内容如下...

linux系统启动流程和服务管理,带你进去系统的世界

Linux启动流程Rhel6启动过程:开机自检bios-->MBR引导-->GRUB菜单-->加载内核-->init进程初始化Rhel7启动过程:开机自检BIOS-->M...

CentOS7系统如何修改主机名_centos更改主机名称

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言本文将讲解CentOS7系统如何修改主机名。...

前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令

在Linux服务器管理中,SSH(SecureShell)是远程操作的核心工具。以下是SSH终端操作的常用命令和技巧,涵盖连接、文件操作、系统管理等场景:一、SSH连接服务器1.基本连接...

Linux开机自启服务完全指南:3步搞定系统服务管理器配置

为什么需要配置开机自启?想象一下:电商服务器重启后,MySQL和Nginx没自动启动,整个网站瘫痪!这就是为什么开机自启是Linux运维的必备技能。自启服务能确保核心程序在系统启动时自动运行,避免人工...

Kubernetes 高可用(HA)集群部署指南

Kubernetes高可用(HA)集群部署指南本指南涵盖从概念理解、架构选择,到kubeadm高可用部署、生产优化、监控备份和运维的全流程,适用于希望搭建稳定、生产级Kubernetes集群...

Linux项目开发,你必须了解Systemd服务!

1.Systemd简介...

Linux系统systemd服务管理工具使用技巧

简介:在Linux系统里,systemd就像是所有进程的“源头”,它可是系统中PID值为1的进程哟。systemd其实是一堆工具的组合,它的作用可不止是启动操作系统这么简单,像后台服务...

Red Hat Enterprise Linux 10 安装 Kubernetes (K8s) 集群及高级管理

一、前言...

Linux下NetworkManager和network的和平共处

简介我们在使用CentoOS系统时偶尔会遇到配置都正确但network启动不了的问题,这问题经常是由NetworkManager引起的,关闭NetworkManage并取消开机启动network就能正...

取消回复欢迎 发表评论: