实战13 分配角色

目录

1、分配角色思路

2、分配角色回显接口实现

3、分配角色回显前端实现

3.1 编写前端api脚本代码

3.2 编写分配角色窗口代码 

 3.3 编写分配角色回显脚本代码

4、分配角色后端接口

4.1 UserRoleDTO

4.2 UserMapper

4.3 UserMapper.xml

4.4 UserService

4.5 UserServiceImpl

4.6 UserController

5、分配角色前端实现

5.1 前端API脚本

5.2 分配角色窗口确认事件


1、分配角色思路

2、分配角色回显接口实现

RoleMapper

    /*** 根据用户ID查询该用户拥有的角色ID* @param userId* @return*/@Select("select role_id from `sys_user_role` where user_id = #{userId}")List<Long> findRoleIdByUserId(Long userId);

RoleService

    /*** 根据用户ID查询该用户拥有的角色ID* @param userId* @return*/List<Long> findRoleIdByUserId(Long userId);

RoleServiceImpl

    /*** 根据用户ID查询该用户拥有的角色ID** @param userId* @return*/@Overridepublic List<Long> findRoleIdByUserId(Long userId) {return baseMapper.findRoleIdByUserId(userId);}

UserController

/*** 获取分配角色列表* @param roleQueryVo* @return*/@GetMapping("/getRoleListForAssign")@PreAuthorize("hasAuthority('sys:user:assign')")public Result getRoleListForAssign(RoleQueryVo roleQueryVo){//创建分页对象IPage<Role> page = new Page<Role>(roleQueryVo.getPageNo(), roleQueryVo.getPageSize());//调用查询方法roleService.findRoleListByUserId(page,roleQueryVo);//返回数据return Result.ok(page);}/*** 根据用户ID查询该用户拥有的角色列表* @param userId* @return*/@GetMapping("/getRoleByUserId/{userId}")@PreAuthorize("hasAuthority('sys:user:assign')")public Result getRoleByUserId(@PathVariable Long userId){//调用根据用户ID查询该用户拥有的角色ID的方法List<Long> roleIds = roleService.findRoleIdByUserId(userId);return Result.ok(roleIds);}

3、分配角色回显前端实现

3.1 编写前端api脚本代码

3.2 编写分配角色窗口代码 

 <!-- 分配角色窗口 --><system-dialog:title="assignDialog.title":height="assignDialog.height":width="assignDialog.width":visible="assignDialog.visible"@onClose="onAssignClose"@onConfirm="onAssignConfirm"><div slot="content"><!-- 分配角色数据列表 --><el-tableref="assignRoleTable":data="assignRoleList"borderstripe:height="assignHeight"style="width: 100%; margin-bottom: 10px"@selection-change="handleSelectionChange"><el-table-column type="selection" width="55" align="center"></el-table-column><el-table-column prop="roleCode" label="角色编码"/><el-table-column prop="roleName" label="角色名称"/><el-table-column prop="remark" label="角色备注"/></el-table><!-- 分页工具栏 --><el-pagination@size-change="assignSizeChange"@current-change="assignCurrentChange":current-page.sync="roleVo.pageNo":page-sizes="[10, 20, 30, 40, 50]":page-size="roleVo.pageSize"layout="total, sizes, prev, pager, next, jumper":total="roleVo.total"background></el-pagination></div></system-dialog>

 3.3 编写分配角色回显脚本代码

 /*** 打开分配角色*/async assignRole(row){//防止回显出现问题this.selectedIds = [];this.selectedUserId = "";//被分配用户的idthis.selectedUserId = row.id;//显示窗口this.assignDialog.visible = true;//设置标题this.assignDialog.title = `给【${row.realName}】分配角色`;//查询当前登录用户的所有角色信息await this.getAssignRoleList();//获取当前被分配用户的IDlet params = {userId: row.id,};//发送根据用户ID查询角色列表的请求let res = await userApi.getRoleIdByUserId(params);//如果存在数据if (res.success && res.data){//将查询到的角色ID列表交给选中角色数组this.selectedIds = res.data;//循环遍历this.selectedIds.forEach((key) => {this.assignRoleList.forEach((item) => {if (item.id === key) {this.$refs.assignRoleTable.toggleRowSelection(item, true);}});});}},/*** 查询当前登录用户的所有角色信息*/async getAssignRoleList(pageNo = 1, pageSize = 10) {//给用户ID赋值this.roleVo.userId = this.$store.getters.userId;this.roleVo.pageNo = pageNo;this.roleVo.pageSize = pageSize;//发送查询请求let res = await userApi.getAssignRoleList(this.roleVo);//判断是否成功if (res.success) {//角色列表赋值this.assignRoleList = res.data.records;//角色总数量赋值this.roleVo.total = res.data.total;}},/*** 分配角色取消事件*/onAssignClose(){//隐藏窗口this.assignDialog.visible = false;},/*** 分配角色确认事件*/async onAssignConfirm(){//判断用户是否有选中角色if (this.selectedIds.length === 0) {this.$message.warning("请选择要分配的角色!");return;}let params = {userId: this.selectedUserId,roleIds: this.selectedIds,};//发送请求let res = await userApi.assignRoleSave(params);//判断是否成功if (res.success) {this.$message.success(res.message);//关闭窗口this.assignDialog.visible = false;} else {this.$message.error(res.message);}},/*** 当每页数量发生变化时触发该事件*/assignSizeChange(size){this.roleVo.pageSize = size; //将每页显示的数量交给成员变量this.getAssignRoleList(this.roleVo.pageNo, size);},/*** 当页码发生变化时触发该事件*/assignCurrentChange(page){this.roleVo.pageNo = page;//调用查询方法this.getAssignRoleList(page, this.roleVo.pageSize);},/*** 当点击多选框时触发该事件*/handleSelectionChange(rows){// let roleIds = [];// //循环遍历选中的角色ID// for (let i = 0; i < rows.length; i++) {//   //将当前选中的角色ID放到数组中//   roleIds.push(rows[i].id);// }// //将选中的角色ID交给成员变量// this.selectedIds = roleIds;this.selectedIds = rows.map(item => item.id);//等同于上述代码}

4、分配角色后端接口

4.1 UserRoleDTO

package com.cizhu.dto;import lombok.Data;import java.util.List;/*** @author bingo* @description 用于给用户分配角色时保存选中的角色数据* @date 2022-11-09*/
@Data
public class UserRoleDTO {private Long userId;private List<Long> roleIds;
}

4.2 UserMapper

    /*** 保存用户角色关系* @param userId* @param roleIds* @return*/int saveUserRole(Long userId, List<Long> roleIds);

4.3 UserMapper.xml

    <insert id="saveUserRole">insert into sys_user_role(user_id,role_id) values<foreach collection="roleIds" item="item" index="index" separator=",">(#{userId},#{item})</foreach></insert>

4.4 UserService

   /*** 分配角色* @param userId* @param roleIds* @return*/boolean saveUserRole(Long userId, List<Long> roleIds);

4.5 UserServiceImpl

    /*** 分配角色** @param userId* @param roleIds* @return*/@Override@Transactional(rollbackFor = RuntimeException.class)public boolean saveUserRole(Long userId, List<Long> roleIds) {//删除该用户对应的角色信息baseMapper.deleteUserRole(userId);//保存用户角色信息return baseMapper.saveUserRole(userId,roleIds)>0;}

4.6 UserController

/*** 分配角色* @param userRoleDTO* @return*/@PostMapping("/saveUserRole")@PreAuthorize("hasAuthority('sys:user:assign')")public Result saveUserRole(@RequestBody UserRoleDTO userRoleDTO){if (userService.saveUserRole(userRoleDTO.getUserId(),userRoleDTO.getRoleIds())) {return Result.ok().message("角色分配成功");}return Result.error().message("角色分配失败");}

5、分配角色前端实现

5.1 前端API脚本

5.2 分配角色窗口确认事件

/*** 当点击多选框时触发该事件*/handleSelectionChange(rows){// let roleIds = [];// //循环遍历选中的角色ID// for (let i = 0; i < rows.length; i++) {//   //将当前选中的角色ID放到数组中//   roleIds.push(rows[i].id);// }// //将选中的角色ID交给成员变量// this.selectedIds = roleIds;this.selectedIds = rows.map(item => item.id);//等同于上述代码}
/*** 分配角色确认事件*/async onAssignConfirm(){//判断用户是否有选中角色if (this.selectedIds.length === 0) {this.$message.warning("请选择要分配的角色!");return;}let params = {userId: this.selectedUserId,roleIds: this.selectedIds,};//发送请求let res = await userApi.assignRoleSave(params);//判断是否成功if (res.success) {this.$message.success(res.message);//关闭窗口this.assignDialog.visible = false;} else {this.$message.error(res.message);}},

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.Net实现新闻添加查询(三层架构,含照片)

目录 演示功能&#xff1a; 点击启动生成页面 点击搜索模糊查询 点击添加跳转新界面 ​编辑 点击Button添加 步骤&#xff1a; 1、建文件 ​编辑 2、添加引用关系 3、根据数据库中的列写Models下的XueshengModels类 4、DAL下的DBHelper&#xff08;对数据库进行操作…

【温故而知新】探讨下对vue的mixin的理解

一、什么是mixin Mixin是一个开放性网络基础设施,它允许开发者通过API集成和使用区块链技术。Mixin提供了一种安全、快速和便捷的方式来创建和管理资产,并支持即时交易和转账。Mixin还提供了开发者工具和SDK,使开发者可以构建各种应用和服务,从而实现更多的功能和创新。总…

vue3+elementPlus:el-drawer新增修改弹窗复用

在el-drawer的属性里设置:title属性&#xff0c;和重置函数 //html<!-- 弹窗 --><el-drawerv-model"drawer":title"title":size"505":direction"direction":before-close"handleClose"><el-formlabel-posit…

数据挖掘(作业3

任务一 对以下数据集使用K均值聚类算法&#xff1a; 1&#xff09;观察实验结果是否符合预期&#xff1b; 2&#xff09;利用SSE标准确定K值&#xff1b; 3&#xff09;自行调参并观察对聚类结果的影响。 注意&#xff1a;需要把类别信息去掉。 “tutorial3_Data Explorat…

HTTP代理服务器:Go语言下的“网络翻译官”

开场白&#xff1a;在这个全球化的网络时代&#xff0c;有时我们需要一个“翻译官”来帮助不同系统、不同语言进行交流。今天&#xff0c;我们就来探讨如何使用Go语言&#xff0c;轻松实现这样一个角色——HTTP代理服务器&#xff0c;让我们的网络请求更加畅通无阻&#xff01;…

JSON.stringify()

一、定义 JSON.stringify() 是一个 JavaScript 内置函数&#xff0c;用于将 JavaScript 对象或值转换为 JSON 字符串 二、语法 JSON.stringify(value, replacer, space); value&#xff1a;要转换为 JSON 字符串的 JavaScript 对象或值。 eplacer&#xff08;可选&#xff0…

模式识别与机器学习-无监督学习-聚类

无监督学习-聚类 监督学习&无监督学习K-meansK-means聚类的优点&#xff1a;K-means的局限性&#xff1a;解决方案&#xff1a; 高斯混合模型&#xff08;Gaussian Mixture Models&#xff0c;GMM&#xff09;多维高斯分布的概率密度函数&#xff1a;高斯混合模型&#xff…

Qt+opencv 视频分解为图片

最近遇到一些售前提供的BUG&#xff0c;但是他们提供的是录像视频&#xff0c;因为处理显示速度比较快&#xff0c;因此很难找到出现问题的位置。需要反复播放&#xff0c;自己编写了一个视频分解成图片这样就可以一张图一张图的对比&#xff0c;方便查看。 开发环境 qtopenv…

Flutter 疑难杂症集合

一. Flutter集成uni小程序sdk 1. 手机连接电脑测试打开uni小程序没问题&#xff0c;打包成apk后debug编译下的apk也没问题&#xff0c;但就是release编译的apk包打不开小程序。 报错情景&#xff1a;点击后页面会闪现一下黑色的背景&#xff0c;然后又跳转回了点击之前的页面。…

LeetCode 热题 100——1.两数之和

1. 两数之和 提示 简单 18.1K 相关企业 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在…

c语言用四种方式求解成绩之中最高分和最低分的差值

文章目录 一&#xff0c;题目二&#xff0c;方法1&#xff0c;方法一2&#xff0c;方法二3&#xff0c;方法三4&#xff0c;方法四 三&#xff0c;示例结果 一&#xff0c;题目 最高分最低分之差 输入n个成绩&#xff0c;换行输出n个成绩中最高分数和最低分数的差 输入 : 两行…

linux | pause函数 、alarm函数、signal函数

//直接上demo #include <stdio.h> #include <unistd.h> #include <signal.h> #include <cerrno>void signalrm_fn(int sig) {printf("alarm!\n");alarm(2);return; } int main(void) {//信号触发函数 &#xff0c;当该线程触发到SIGALRM信号…

信息网络协议基础-IPv6协议

文章目录 概述为什么引入IP服务模型IPv4的可扩展性问题解决方法***CIDR(Classless Inter-Domain Routing, 无类别域间寻路)前缀汇聚***前缀最长匹配***NAT(网络地址转换)存在的问题解决方案路由表配置***局限性IPv6协议头标IPv6地址表示前缀类型单播地址链路局部地址(Link-Loca…

浅谈WPF之ToolTip工具提示

在日常应用中&#xff0c;当鼠标放置在某些控件上时&#xff0c;都会有相应的信息提示&#xff0c;从软件易用性上来说&#xff0c;这是一个非常友好的功能设计。那在WPF中&#xff0c;如何进行控件信息提示呢&#xff1f;这就是本文需要介绍的ToolTip【工具提示】内容&#xf…

k8s 的YAML文件详解

一、yaml文件简介 Kubernetes只支持YAML和JSON格式创建资源对象&#xff0c;JSON格式用于接口之间消息的传递&#xff0c;适用于开发&#xff1b;YAML格式用于配置和管理&#xff0c;适用于云平台管理&#xff0c;YAML是一种简洁的非标记性语言。 1&#xff09;yaml的语法规则&…

自动备份B站Up主最新视频到百度网盘的Python脚本详解

自动备份B站Up主最新视频脚本详解&#xff08;Win和Linux有些不同&#xff09; 前言&#xff1a; 次篇文章启发于某些大胆的UP主&#xff08;老马&#xff09;的多次被封&#xff0c;并被下架一些视频。有些人并不能及时观看到&#xff0c;故写一个脚本自动下载最新视频。 &am…

中小企业运营难题:CRM系统为您解决!

​CRM如何帮助中小企业解决业务与团队之间的问题&#xff1f;它可以帮助企业获取潜在客户、数据储存管理、建立标准化流程、减少客户流失、促进客户沟通等。客户关系管理的核心理念要以客户为最主要的资源&#xff0c;提供全面的客户服务&#xff0c;满足客户要求&#xff0c;实…

【信息安全原理】——入侵检测与网络欺骗(学习笔记)

&#x1f4d6; 前言&#xff1a;在网络安全防护领域&#xff0c;防火墙是保护网络安全的一种最常用的设备。网络管理员希望通过在网络边界合理使用防火墙&#xff0c;屏蔽源于外网的各类网络攻击。但是&#xff0c;防火墙由于自身的种种限制&#xff0c;并不能阻止所有攻击行为…

C++构建简单静态库实例(cmakelist)

一、开发实例 通过cmake构建静态开发实例如下: 1.1 代码目录 代码目录结构如下: 1.2 代码内容 1.2.1 CMakeLists.txt # CMake 最低版本要求 cmake_minimum_required(VERSION 3.10)# 项目名称 project(mylib)# 添加源文件 set(SOURCE_FILESsrc/mylib

每日一题(LeetCode)----二叉树-- 二叉树的右视图

每日一题(LeetCode)----二叉树-- 二叉树的右视图 1.题目&#xff08;199. 二叉树的右视图&#xff09; 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,nu…