0
点赞
收藏
分享

微信扫一扫

权限控制-用户管理

爱情锦囊 2022-06-01 阅读 105

后端

修改 UserController 添加对应的 CRUD 以及分批角色,删除用户要把对应的角色与用户的关系表数据也紧接着删除掉,代码如下

,如下编写的业务就是 RBAC 了,我就快速的贴代码了,重点是在后面的 Jwt + Security + OAuth2 的知识点

/**
 * <p>
 * 用户表 前端控制器
 * </p>
 *
 * @author BNTang
 * @since 2021-04-21
 */
@RestController
@RequestMapping(&quot;/service_auth/admin/user&quot;)
@Api(tags&nbsp;=&nbsp;&quot;用户组&quot;)
public&nbsp;class&nbsp;UserController&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;@Resource
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;UserService&nbsp;userService;

&nbsp;&nbsp;&nbsp;&nbsp;@Resource
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;RoleService&nbsp;roleService;

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * <b>
     * 获取管理用户,分页列表
     * </b>
     */
&nbsp;&nbsp;&nbsp;&nbsp;@ApiOperation(value&nbsp;=&nbsp;&quot;获取管理用户,分页列表&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;@GetMapping(&quot;/getUserList/{page}/{limit}&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ResponseResult&nbsp;index(@PathVariable&nbsp;Long&nbsp;page,&nbsp;@PathVariable&nbsp;Long&nbsp;limit,&nbsp;User&nbsp;userQueryVo)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPage&lt;User&gt;&nbsp;pageParam&nbsp;=&nbsp;new&nbsp;Page&lt;&gt;(page,&nbsp;limit);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QueryWrapper&lt;User&gt;&nbsp;queryWrapper&nbsp;=&nbsp;new&nbsp;QueryWrapper&lt;&gt;();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!StringUtils.isEmpty(userQueryVo.getOpenId()))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;queryWrapper.like(&quot;open_id&quot;,&nbsp;userQueryVo.getOpenId());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPage&lt;User&gt;&nbsp;pageModel&nbsp;=&nbsp;userService.page(pageParam,&nbsp;queryWrapper);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ResponseResult.ok()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.data(&quot;items&quot;,&nbsp;pageModel.getRecords())
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.data(&quot;total&quot;,&nbsp;pageModel.getTotal());
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * <b>
     * 新增管理用户
     * </b>
     */
&nbsp;&nbsp;&nbsp;&nbsp;@ApiOperation(value&nbsp;=&nbsp;&quot;新增管理用户&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;@PostMapping(&quot;/saveUser&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ResponseResult&nbsp;save(@RequestBody&nbsp;User&nbsp;user)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setPassword(Md5.encrypt(user.getPassword()));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userService.save(user);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ResponseResult.ok();
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * <b>
     * 修改管理用户
     * </b>
     */
&nbsp;&nbsp;&nbsp;&nbsp;@ApiOperation(value&nbsp;=&nbsp;&quot;修改管理用户&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;@PostMapping(&quot;/updateUser&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ResponseResult&nbsp;updateById(@RequestBody&nbsp;User&nbsp;user)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setPassword(Md5.encrypt(user.getPassword()));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userService.updateById(user);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ResponseResult.ok();
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * <b>
     * 删除管理用户
     * </b>
     */
&nbsp;&nbsp;&nbsp;&nbsp;@ApiOperation(value&nbsp;=&nbsp;&quot;删除管理用户&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;@PostMapping(&quot;/removeUser/{id}&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ResponseResult&nbsp;remove(@PathVariable&nbsp;String&nbsp;id)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userService.removeById(id);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ResponseResult.ok();
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * <b>
     * 批量删除用户
     * </b>
     */
&nbsp;&nbsp;&nbsp;&nbsp;@ApiOperation(value&nbsp;=&nbsp;&quot;批量删除用户&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;@PostMapping(&quot;/batchRemoveUser&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ResponseResult&nbsp;batchRemove(@RequestBody&nbsp;List&lt;String&gt;&nbsp;idList)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userService.removeByIds(idList);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ResponseResult.ok();
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * <b>
     * 根据用户id查询用户
     * </b>
     */
&nbsp;&nbsp;&nbsp;&nbsp;@ApiOperation(value&nbsp;=&nbsp;&quot;根据用户id查询用户&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;@GetMapping(&quot;/getUserById/{id}&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ResponseResult&nbsp;getUser(@PathVariable&nbsp;String&nbsp;id)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ResponseResult.ok().data(&quot;user&quot;,&nbsp;userService.getById(id));
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * <b>
     * 根据用户ID获取角色数据
     * </b>
     */
&nbsp;&nbsp;&nbsp;&nbsp;@ApiOperation(value&nbsp;=&nbsp;&quot;根据用户ID获取角色数据&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;@GetMapping(&quot;/getUserRoleData/{userId}&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ResponseResult&nbsp;toAssign(@PathVariable&nbsp;String&nbsp;userId)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ResponseResult.ok().data(roleService.findRoleByUserId(userId));
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * <b>
     * 根据用户ID分配用户角色
     * </b>
     */
&nbsp;&nbsp;&nbsp;&nbsp;@ApiOperation(value&nbsp;=&nbsp;&quot;根据用户ID分配用户角色&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;@PostMapping(&quot;/doAssignRole&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ResponseResult&nbsp;doAssign(@RequestParam&nbsp;String&nbsp;userId,&nbsp;@RequestParam&nbsp;String[]&nbsp;roleId)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;roleService.saveUserRoleRelationShip(userId,&nbsp;roleId);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ResponseResult.ok();
&nbsp;&nbsp;&nbsp;&nbsp;}
}

紧接着修改 ​​RoleService​​ 接口,添加如下方法

权限控制-用户管理_ide

/**
 * <p>
 * 角色 服务类
 * </p>
 *
 * @author BNTang
 * @since 2021-04-21
 */
public&nbsp;interface&nbsp;RoleService&nbsp;extends&nbsp;IService&lt;Role&gt;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * <b>
     * 根据用户ID获取角色数据
     * </b>
     *
     * @param userId 用户ID
     * @return 角色数据
     */
&nbsp;&nbsp;&nbsp;&nbsp;Map&lt;String,&nbsp;Object&gt;&nbsp;findRoleByUserId(String&nbsp;userId);

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * <b>
     * 根据用户ID分配用户角色
     * </b>
     *
     * @param userId 用户ID
     * @param roleId 角色ID
     */
&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;saveUserRoleRelationShip(String&nbsp;userId,&nbsp;String[]&nbsp;roleId);
}

修改 RoleServiceImpl

/**
 * <p>
 * 角色 服务实现类
 * </p>
 *
 * @author BNTang
 * @since 2021-04-21
 */
@Service
public&nbsp;class&nbsp;RoleServiceImpl&nbsp;extends&nbsp;ServiceImpl&lt;RoleMapper,&nbsp;Role&gt;&nbsp;implements&nbsp;RoleService&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;@Resource
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;UserRoleService&nbsp;userRoleService;

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * <b>
     * 根据用户ID获取角色数据
     * </b>
     */
&nbsp;&nbsp;&nbsp;&nbsp;@Override
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Map&lt;String,&nbsp;Object&gt;&nbsp;findRoleByUserId(String&nbsp;userId)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 1.查询出所有的角色
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;Role&gt;&nbsp;allRoles&nbsp;=&nbsp;baseMapper.selectList(null);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 2.当前用户选中的角色有哪些
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QueryWrapper&lt;UserRole&gt;&nbsp;queryWrapper&nbsp;=&nbsp;new&nbsp;QueryWrapper&lt;UserRole&gt;()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.eq(&quot;user_id&quot;,&nbsp;userId)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.select(&quot;role_id&quot;);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 获取到当前用户所在的角色关系
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;UserRole&gt;&nbsp;userRoleList&nbsp;=&nbsp;userRoleService.list(queryWrapper);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 取出所有的roleId 放到一个集合当中
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;String&gt;&nbsp;roleIds&nbsp;=&nbsp;userRoleList.stream().map(UserRole::getRoleId).collect(Collectors.toList());

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 根据角色id,取出所有的角色对象
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;Role&gt;&nbsp;userRoles&nbsp;=&nbsp;new&nbsp;ArrayList&lt;&gt;();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;allRoles.forEach(role&nbsp;-&gt;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(roleIds.contains(role.getId()))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userRoles.add(role);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&lt;String,&nbsp;Object&gt;&nbsp;roleMap&nbsp;=&nbsp;new&nbsp;HashMap&lt;&gt;(2);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 用户的角色
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;roleMap.put(&quot;assignRoles&quot;,&nbsp;userRoles);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 所有的角色
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;roleMap.put(&quot;allRolesList&quot;,&nbsp;allRoles);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;roleMap;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * <b>
     * 根据用户ID分配用户角色
     * </b>
     */
&nbsp;&nbsp;&nbsp;&nbsp;@Override
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;saveUserRoleRelationShip(String&nbsp;userId,&nbsp;String[]&nbsp;roleId)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 1.删除原来角色与用户之间的关系
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userRoleService.remove(new&nbsp;QueryWrapper&lt;UserRole&gt;().eq(&quot;user_id&quot;,&nbsp;userId));

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 2.重新建立关系
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;UserRole&gt;&nbsp;userRoleArrayList&nbsp;=&nbsp;Stream.of(roleId).map(role&nbsp;-&gt;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UserRole&nbsp;userRole&nbsp;=&nbsp;new&nbsp;UserRole();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userRole.setUserId(userId);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userRole.setRoleId(role);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;userRole;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}).collect(Collectors.toList());

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 3.批量保存关系
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userRoleService.saveBatch(userRoleArrayList);
&nbsp;&nbsp;&nbsp;&nbsp;}
}

移动之前 server_video 微服务当中的 AppConfig,目的为了就是其它微服务如果也需要用到分页的配置和逻辑删除就不用再继续写冗余的配置文件内容了,我们的 server_auth 模块中有分页查询用户逻辑删除用户等等,但是 video 微服务当中也需要这样大家都是 server 的子服务就都会有对应的配置内容了

权限控制-用户管理_Project_02

修改 ​​gateway​​ 配置 server_auth 的网关服务转发规则,修改 gateway 的 application.yml

- id: service-auth
  uri: lb://service-auth
  predicates:
    - Path=/service_auth/**

配置逻辑删除和属性的自动填充如下,每个实体类都自己加一下,不然你也可以按照报错自行排查问题

权限控制-用户管理_json_03

前端

修改路由文件 index.js 在路由当中添加路由

权限控制-用户管理_Project_04

内容如下

权限控制-用户管理_Project_05

{
&nbsp;&nbsp;path:&nbsp;&#39;/auth',
&nbsp;&nbsp;component:&nbsp;Layout,
&nbsp;&nbsp;redirect:&nbsp;&#39;/auth/user/list&#39;,
&nbsp;&nbsp;name:&nbsp;&#39;权限管理&#39;,
&nbsp;&nbsp;meta:&nbsp;{title:&nbsp;&#39;权限管理&#39;,&nbsp;icon:&nbsp;&#39;tree&#39;},
&nbsp;&nbsp;children:&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path:&nbsp;&#39;user/list&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&#39;用户管理&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;component:&nbsp;()&nbsp;=&gt;&nbsp;import(&#39;@/views/video/auth/user/list&#39;),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;meta:&nbsp;{title:&nbsp;&#39;用户管理&#39;}
&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path:&nbsp;&#39;user/add&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&#39;用户添加&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;component:&nbsp;()&nbsp;=&gt;&nbsp;import(&#39;@/views/video/auth/user/form&#39;),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;meta:&nbsp;{title:&nbsp;&#39;用户添加&#39;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hidden:&nbsp;true
&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path:&nbsp;&#39;user/update/:id&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&#39;用户修改&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;component:&nbsp;()&nbsp;=&gt;&nbsp;import(&#39;@/views/video/auth/user/form&#39;),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;meta:&nbsp;{title:&nbsp;&#39;用户修改&#39;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hidden:&nbsp;true
&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path:&nbsp;&#39;user/role/:id&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&#39;用户角色&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;component:&nbsp;()&nbsp;=&gt;&nbsp;import(&#39;@/views/video/auth/user/roleForm&#39;),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;meta:&nbsp;{title:&nbsp;&#39;用户角色&#39;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hidden:&nbsp;true
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;]
},

在 api 包中添加 user.js 编写请求方法内容如下

权限控制-用户管理_Project_06

import&nbsp;request&nbsp;from&nbsp;&#39;@/utils/request&#39;;

const&nbsp;api_name&nbsp;=&nbsp;&#39;/service_auth/admin/user&#39;;

export&nbsp;default&nbsp;{
&nbsp;&nbsp;// 获取用户分页数据
&nbsp;&nbsp;getPageList(page,&nbsp;limit,&nbsp;searchObj)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;request({
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;`${api_name}/getUserList/${page}/${limit}`,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method:&nbsp;&#39;get&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// url查询字符串或表单键值对
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;params:&nbsp;searchObj
&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;},
&nbsp;&nbsp;// 根据用户id查询用户
&nbsp;&nbsp;getUserById(id)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;request({
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;`${api_name}/getUserById/${id}`,
      method: 'get'
    });
  },
  // 保存用户
  save(user) {
    return request({
      url: `${api_name}/saveUser`,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method:&nbsp;&#39;post&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data:&nbsp;user
&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;},
&nbsp;&nbsp;// 更新用户
&nbsp;&nbsp;updateById(user)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;request({
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;`${api_name}/updateUser`,
      method: 'post',
      data: user
    });
  },
  // 根据用户id查询用户下角色信息
  getAssign(userId) {
    return request({
      url: `${api_name}/getUserRoleData/${userId}`,
      method: 'get'
    });
  },
  // 保存用户角色信息
  saveAssign(userId, roleId) {
    return request({
      url: `${api_name}/doAssignRole`,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method:&nbsp;&#39;post&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;params:&nbsp;{userId,&nbsp;roleId}
&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;},
&nbsp;&nbsp;// 删除用户
&nbsp;&nbsp;removeById(id)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;request({
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;`${api_name}/removeUser/${id}`,
      method: 'post'
    });
  },
  // 批量删除用户
  removeRows(idList) {
    return request({
      url: `${api_name}/batchRemoveUser`,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method:&nbsp;&#39;post&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data:&nbsp;idList
&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;}
}

都是之前写过的,我直接贴代码如下,如下是 ​​list.vue​​ 的内容

权限控制-用户管理_数据_07

<template>
  <div class="app-container">
    <!--查询表单-->
    <el-form :inline="true" class="demo-form-inline">
      <el-form-item>
        <el-input v-model="searchObj.username" placeholder="用户名"/>
      </el-form-item>
      <el-button type="primary" icon="el-icon-search" @click="fetchData()">查询</el-button>
      <el-button type="default" @click="resetData()">清空</el-button>
    </el-form>
    <!-- 工具条 -->
    <div>
      <el-button type="danger" size="mini" @click="addUser()">添加</el-button>
      <el-button type="danger" size="mini" @click="removeRows()">批量删除</el-button>
    </div>
    <!--用户列表 -->
    <el-table
      v-loading="listLoading"
      :data="list"
      stripe
      style="width: 100%"
      @selection-change="handleSelectionChange">
      <el-table-column
        type="selection"
        width="55"/>
      <el-table-column
        label="序号"
        width="70"
        align="center">
        <template slot-scope="scope">
          {{ (page - 1) * limit + scope.$index + 1 }}
        </template>
      </el-table-column>
      <el-table-column prop="openId" label="用户名" align="center"/>
      <el-table-column prop="nickName" label="用户昵称" align="center"/>
      <el-table-column label="操作" align="center">
        <template slot-scope="scope">
          <router-link :to="'/auth/user/role/'+scope.row.id">
            <el-button type="success" size="mini">绑定角色</el-button>
          </router-link>
          &nbsp;
          <router-link :to="'/auth/user/update/'+scope.row.id">
            <el-button type="primary" size="mini">修改</el-button>
          </router-link>
          &nbsp;
          <el-button type="danger" @click="removeDataById(scope.row.id)" size="mini">删除</el-button>
        </template>
      </el-table-column>
    </el-table>

    <!-- 分页组件 -->
    <el-pagination
      :current-page="page"
      :total="total"
      :page-size="limit"
      :page-sizes="[5, 10, 20, 30, 40, 50, 100]"
      style="padding: 30px 0; text-align: center;"
      layout="sizes, prev, pager, next, jumper, ->, total, slot"
      @current-change="fetchData"
      @size-change="changeSize"
    />
  </div>
</template>
<script>
import user from '@/api/video/auth/user';

export default {
  name: "list",
  data() {
    return {
      // 数据是否正在加载
      listLoading: true,

      // 用户列表
      list: null,

      // 数据库中的总记录数
      total: 0,

      // 默认页码
      page: 1,

      // 每页记录数
      limit: 10,

      // 查询条件的表单对象
      searchObj: {},

      // 批量选择中选择的记录列表
      multipleSelection: []
    }
  },
  created() {
    // 加载页面数据
    this.fetchData();
  },
  methods: {
    // 当页码发生改变的时候
    changeSize(size) {
      this.limit = size;
      this.fetchData(1);
    },
    addUser() {
      // 添加用户,跳转到添加路由
      this.$router.push({path: '/auth/user/add'});
    },
    // 加载用户数据
    fetchData(page = 1) {
      this.page = page;
      user.getPageList(this.page, this.limit, this.searchObj).then(
        response => {
          this.list = response.data.items;
          this.total = response.data.total;

          // 数据加载并绑定成功
          this.listLoading = false;
        }
      );
    },
    // 重置查询表单
    resetData() {
      this.searchObj = {};
      this.fetchData();
    },
    // 根据id删除数据
    removeDataById(id) {
      this.$confirm('此操作将永久删除该记录, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        // 点击确定,远程调用ajax
        return user.removeById(id);
      }).then((response) => {

        // 重新加载列表
        this.fetchData(this.page);
        if (response.success) {
          this.$message({
            type: 'success',
            message: response.message
          })
        }
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      })
    },
    // 当表格复选框选项发生变化的时候触发
    handleSelectionChange(selection) {
      this.multipleSelection = selection;
    },
    // 批量删除
    removeRows() {
      if (this.multipleSelection.length === 0) {
        this.$message({
          type: 'warning',
          message: '请选择要删除的记录!'
        })
        return;
      }
      this.$confirm('此操作将永久删除该记录, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        let idList = [];
        this.multipleSelection.forEach(item => {
          idList.push(item.id);
        });

        // 调用api
        return user.removeRows(idList);
      }).then((response) => {
        this.fetchData(this.page)
        if (response.success) {
          this.$message({
            type: 'success',
            message: response.message
          })
        }
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        })
      });
    }
  }
}
</script>

<style scoped>

</style>

添加与更新页面,​​form.vue​​ 内容如下

权限控制-用户管理_Project_08

&lt;template&gt;
&nbsp;&nbsp;&lt;div&nbsp;class=&quot;app-container&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;el-form&nbsp;ref=&quot;user&quot;&nbsp;:model=&quot;user&quot;&nbsp;:rules=&quot;validateRules&quot;&nbsp;label-width=&quot;120px&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;el-form-item&nbsp;label=&quot;用户名&quot;&nbsp;prop=&quot;username&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;el-input&nbsp;v-model=&quot;user.openId&quot;/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/el-form-item>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;el-form-item&nbsp;label=&quot;用户昵称&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;el-input&nbsp;v-model=&quot;user.nickName&quot;/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/el-form-item>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;el-form-item&nbsp;v-if=&quot;!user.id&quot;&nbsp;label=&quot;用户密码&quot;&nbsp;prop=&quot;password&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;el-input&nbsp;v-model=&quot;user.password&quot;/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/el-form-item>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;el-form-item&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;el-button&nbsp;:disabled=&quot;saveBtnDisabled&quot;&nbsp;type=&quot;primary&quot;&nbsp;@click=&quot;saveOrUpdate&quot;&gt;保存&lt;/el-button>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/el-form-item>
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/el-form>
&nbsp;&nbsp;&lt;/div>
&lt;/template>
&lt;script&gt;
import&nbsp;userApi&nbsp;from&nbsp;&#39;@/api/video/auth/user&#39;;

const&nbsp;defaultForm&nbsp;=&nbsp;{
&nbsp;&nbsp;openId:&nbsp;&#39;&#39;,
&nbsp;&nbsp;nickName:&nbsp;&#39;&#39;,
&nbsp;&nbsp;password:&nbsp;&#39;&#39;
}
const&nbsp;validatePass&nbsp;=&nbsp;(rule,&nbsp;value,&nbsp;callback)&nbsp;=&gt;&nbsp;{
&nbsp;&nbsp;if&nbsp;(value.length&nbsp;&lt;&nbsp;6)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;callback(new&nbsp;Error(&#39;密码不能小于6位&#39;));
&nbsp;&nbsp;}&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;callback();
&nbsp;&nbsp;}
}

export&nbsp;default&nbsp;{
&nbsp;&nbsp;name:&nbsp;&quot;form&quot;,
&nbsp;&nbsp;data()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user:&nbsp;defaultForm,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 保存按钮是否禁用,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saveBtnDisabled:&nbsp;false,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validateRules:&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;openId:&nbsp;[{required:&nbsp;true,&nbsp;trigger:&nbsp;&#39;blur&#39;,&nbsp;message:&nbsp;&#39;用户名必须输入&#39;}],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password:&nbsp;[{required:&nbsp;true,&nbsp;trigger:&nbsp;&#39;blur&#39;,&nbsp;validator:&nbsp;validatePass}]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;},
&nbsp;&nbsp;// 监听器
&nbsp;&nbsp;watch:&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;// 路由变化
&nbsp;&nbsp;&nbsp;&nbsp;$route(to,&nbsp;from)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.init();
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;},
&nbsp;&nbsp;// 生命周期方法(在路由切换,组件不变的情况下不会被调用)
&nbsp;&nbsp;created()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;this.init();
&nbsp;&nbsp;},
&nbsp;&nbsp;methods:&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;// 表单初始化
&nbsp;&nbsp;&nbsp;&nbsp;init()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this.$route.params&nbsp;&amp;&amp;&nbsp;this.$route.params.id)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;id&nbsp;=&nbsp;this.$route.params.id;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.fetchDataById(id);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 对象拓展运算符:拷贝对象,而不是赋值对象的引用
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.user&nbsp;=&nbsp;{...defaultForm};
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;saveOrUpdate()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.$refs.user.validate(valid&nbsp;=&gt;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(valid)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 防止表单重复提交
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.saveBtnDisabled&nbsp;=&nbsp;true;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!this.user.id)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.saveData();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.updateData();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;// 新增用户
&nbsp;&nbsp;&nbsp;&nbsp;saveData()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userApi.save(this.user).then(response&nbsp;=&gt;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// debugger
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(response.success)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.$message({
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type:&nbsp;&#39;success&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message:&nbsp;response.message
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.$router.push({path:&nbsp;&#39;/auth/user/list&#39;});
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;// 根据id更新记录
&nbsp;&nbsp;&nbsp;&nbsp;updateData()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// teacher数据的获取
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userApi.updateById(this.user).then(response&nbsp;=&gt;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(response.success)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.$message({
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type:&nbsp;&#39;success&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message:&nbsp;response.message
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.$router.push({path:&nbsp;&#39;/auth/user/list&#39;});
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;// 根据id查询记录
&nbsp;&nbsp;&nbsp;&nbsp;fetchDataById(id)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userApi.getUserById(id).then(response&nbsp;=&gt;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.user&nbsp;=&nbsp;response.data.user;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}
}
&lt;/script>

&lt;style&nbsp;scoped&gt;

&lt;/style>

绑定角色的选择页面,​​roleForm.vue​​ 内容如下

权限控制-用户管理_json_09

<template>
  <div class="app-container">
    <el-checkbox :indeterminate="isIndeterminate"
                 v-model="checkAll"
                 @change="handleCheckAllChange">全选
    </el-checkbox>

    <div style="margin: 15px 0;"></div>
    <el-checkbox-group v-model="checkedRoles" @change="handlecheckedRolesChange">
      <el-checkbox v-for="role in roles"
                   :label="role.id"
                   :key="role.id">
        {{ role.roleName }}
      </el-checkbox>
    </el-checkbox-group>
    <br>
    <el-button :disabled="saveBtnDisabled" type="primary" @click="update">保存</el-button>
  </div>
</template>

<script>

import userApi from '@/api/video/auth/user';

export default {
  name: "roleForm",
  data() {
    return {
      // 是否全部选中
      checkAll: false,

      // 已选中列表
      checkedRoles: [],

      // 所有的角色
      roles: [],

      isIndeterminate: true,
      userId: '',

      // 保存按钮是否禁用
      saveBtnDisabled: false
    };
  },
  created() {
    this.init();
  },
  methods: {
    init() {
      if (this.$route.params && this.$route.params.id) {
        // 获取用户id
        this.userId = this.$route.params.id;

        // 查询用户
        this.getById(this.userId);
      }
    },
    getById(userId) {
      userApi.getAssign(userId).then(response => {
        // 获取用户角色
        let jsonObj = response.data.assignRoles;

        // 设置角色选中状态
        this.checkedRoles = this.getJsonToList(jsonObj, "id");
        this.roles = response.data.allRolesList;
      })
    },
    // 把 json 数据转成 string 再转成对象,根据 Key 获取value数据
    getJsonToList(json, key) {
      // 把JSON字符串转成对象
      let list = JSON.parse(JSON.stringify(json));
      let strText = [];

      // 遍历这个集合对象,获取key的值
      for (let i = 0; i < list.length; i++) {
        strText.push(list[i][key]);
      }
      return strText;
    },
    // 全选
    handleCheckAllChange(val) {
      this.checkedRoles = val ? this.roles : [];
      this.isIndeterminate = false;
    },
    // 切换角色
    handlecheckedRolesChange(value) {
      let checkedCount = value.length;
      this.checkAll = checkedCount === this.roles.length;
      this.isIndeterminate = checkedCount > 0 && checkedCount < this.roles.length;
    },
    // 更新提交
    update() {
      // 防止表单重复提交
      this.saveBtnDisabled = true;

      let ids = this.checkedRoles.join(",");

      //修改权限
      userApi.saveAssign(this.userId, ids).then(response => {
        if (response.success) {
          this.$message({
            type: 'success',
            message: '保存成功'
          });
          this.$router.push({path: '/auth/user/list'});
        }
      });
    }
  }
};
</script>

自行启动项目进行测试我自己已经测试过了


举报

相关推荐

0 条评论