上周已更新完用户信息列表以及登录性能,明天抽空将角色信息列表以及角色调配做完了。和小伙伴们分享一下劳动成果,后续会持续更新商品治理的信息~

先展现一下效果图

这是一个角色列表信息,性能包含新增角色、编辑角色、调配角色

点击最左侧开展按钮能够看到角色上面的权限,能够对权限进行删除以及调配权限性能

这里是调配权限的页面,通过element-ui 外面的tree进行数据绑定显示

好啦,性能已实现,最初献上的代码片段~

<template>  <div>    <!-- 面包屑导航区域-->    <el-breadcrumb separator-class="el-icon-arrow-right">      <el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>      <el-breadcrumb-item>权限治理</el-breadcrumb-item>      <el-breadcrumb-item>角色列表</el-breadcrumb-item>    </el-breadcrumb>    <!-- 卡片视图 -->    <el-card>      <!-- 增加角色按钮区域 -->      <el-row>        <el-col>          <el-button type="primary" @click="addDialogVisible = true"            >增加角色</el-button          >        </el-col>      </el-row>      <!-- 角色列表区域 -->      <el-table :data="roleList" border stripe>        <!-- 开展列 -->        <el-table-column type="expand">          <template slot-scope="scope">            <el-row              v-for="(item1, i1) in scope.row.children"              :key="item1.id"              :class="['bdbottom', i1 === 0 ? 'bdtop' : '', 'vcenter']"            >              <!-- 渲染一级权限 -->              <el-col :span="5">                <el-tag closable @close="removeRoleById(scope.row, item1.id)">{{                  item1.authName                }}</el-tag>                <i class="el-icon-caret-right"></i>              </el-col>              <!-- 渲染二级和三级权限 -->              <el-col :span="19">                <!-- 通过for循环嵌套渲染二级权限 -->                <el-row                  :class="[i2 === 0 ? '' : 'bdtop', 'vcenter']"                  v-for="(item2, i2) in item1.children"                  :key="item2.id"                >                  <el-col :span="6">                    <el-tag                      type="success"                      closable                      @close="removeRoleById(scope.row, item2.id)"                      >{{ item2.authName }}</el-tag                    >                    <i class="el-icon-caret-right"></i>                  </el-col>                  <!-- 渲染三级权限 -->                  <el-col :span="18">                    <el-tag                      closable                      @close="removeRoleById(scope.row, item3.id)"                      type="warning"                      v-for="(item3, i3) in item2.children"                      :key="item3.id"                    >                      {{ item3.authName }}                    </el-tag>                  </el-col>                </el-row>              </el-col>            </el-row>          </template>        </el-table-column>        <!-- 索引列 -->        <el-table-column type="index"></el-table-column>        <el-table-column label="角色名称" prop="roleName"></el-table-column>        <el-table-column label="角色形容" prop="roleDesc"></el-table-column>        <el-table-column label="操作" width="300px">          <template slot-scope="scope">            <el-button              size="mini"              type="primary"              icon="el-icon-edit"              @click="editRoleForm(scope.row.id)"              >编辑</el-button            >            <el-button size="mini" type="danger" icon="el-icon-delete"              >删除</el-button            >            <el-button              size="mini"              type="warning"              icon="el-icon-setting"              @click="showSetRightDialog(scope.row)"              >调配权限</el-button            >          </template>        </el-table-column>      </el-table>    </el-card>    <!--增加用户的对话框-->    <el-dialog      title="增加用户"      :visible.sync="addDialogVisible"      width="50%"      @close="addDialogClosed"    >      <!--主体区域-->      <el-form        :model="addForm"        :rules="addFormRules"        ref="addFormRef"        label-width="80px"      >        <el-form-item label="角色id" prop="roleId">          <el-input v-model="addForm.roleId"></el-input>        </el-form-item>        <el-form-item label="角色名称" prop="roleName">          <el-input v-model="addForm.roleName"></el-input>        </el-form-item>        <el-form-item label="角色形容" prop="roleDesc">          <el-input v-model="addForm.roleDesc"></el-input>        </el-form-item>      </el-form>      <!--底部区域-->      <span slot="footer" class="dialog-footer">        <el-button @click="addDialogVisible = false">取 消</el-button>        <el-button type="primary" @click="addRole">确 定</el-button>      </span>    </el-dialog>    <!-- 编辑用户对话框 -->    <el-dialog      title="编辑用户"      :visible.sync="editDialogVisible"      width="50%"      @close="editDialogClosed"    >      <!-- 主题区域 -->      <el-form        :model="editForm"        :rules="editFormRules"        ref="editFormRef"        label-width="80px"      >        <el-form-item label="角色id" prop="roleId">          <el-input v-model="editForm.roleId"></el-input>        </el-form-item>        <el-form-item label="角色名称" prop="roleName">          <el-input v-model="editForm.roleName"></el-input>        </el-form-item>        <el-form-item label="角色形容" prop="roleDesc">          <el-input v-model="editForm.roleDesc"></el-input>        </el-form-item>      </el-form>      <!-- 底部区域 -->      <span slot="footer" class="dialog-footer">        <el-button @click="editDialogVisible = false">取 消</el-button>        <el-button type="primary" @click="editRole">确 定</el-button>      </span>    </el-dialog>    <!-- 调配权限对话框 -->    <el-dialog      title="调配权限"      :visible.sync="setRightDialogVisible"      width="50%"      @close="setRightDialogClosed"    >      <!-- 树形控件 -->      <el-tree        :data="rightsList"        :props="treeProps"        show-checkbox        node-key="id"        :default-expand-all="true"        :default-checked-keys="defKeys"        ref="treeRef"      ></el-tree>      <span slot="footer" class="dialog-footer">        <el-button @click="setRightDialogVisible = false">取 消</el-button>        <el-button          type="primary"          @click="allotRights"          >确 定</el-button        >      </span>    </el-dialog>  </div></template><script>export default {  data() {    return {      // 所有角色的列表数据      roleList: [],      // 增加角色数据区域      addForm: {        roleId: '',        roleName: '',        roleDesc: ''      },      addDialogVisible: false,      addFormRules: {        roleId: [{ required: true, message: '请输出角色id', trigger: 'blur' }],        roleName: [          { required: true, message: '请输出角色名称', trigger: 'blur' }        ]      },      // 批改角色数据区域      editForm: {},      editDialogVisible: false,      editFormRules: {        roleId: [{ required: true, message: '请输出角色id', trigger: 'blur' }],        roleName: [          { required: true, message: '请输出角色名称', trigger: 'blur' }        ]      },      // 管制调配权限对话框的显示和暗藏      setRightDialogVisible: false,      // 所有权限数据      rightsList: [],      // 树形控件的属性绑定对象      treeProps: {        label: 'authName',        children: 'children'      },      // 默认选中数组的ID值      defKeys: [],      // 以后行将调配权限的角色id      roleId:''    }  },  created() {    this.getRolesList()  },  methods: {    async getRolesList() {      const { data: res } = await this.$http.get('roles')      if (res.meta.status !== 200) {        return this.$message.error('获取角色列表失败')      }      this.roleList = res.data      this.$message.success('获取角色列表胜利')    },    // 监听增加角色敞开事件    addDialogClosed() {      // 重置表单      this.$refs.addFormRef.resetFields()    },    // 增加角色    addRole() {      this.$refs.addFormRef.validate(async valid => {        if (!valid) return        const { data: res } = await this.$http.post('roles', this.addForm)        if (res.meta.status !== 201) return this.$message.error('增加权限失败')        // 增加胜利        this.$message.success(res.meta.msg)        // 暗藏弹出框        this.addDialogVisible = false        // 刷新用户列表        this.getRolesList()      })    },    // 监听批改角色敞开事件    editDialogClosed() {      // 重置表单      this.$refs.editFormRef.resetFields()    },    // 依据ID获取编辑内容    async editRoleForm(id) {      const { data: res } = await this.$http.get('roles/' + id)      if (res.meta.status !== 200) {        return this.$message.error('获取角色信息失败')      }      console.log(res.data)      // 获取胜利      this.$message.success('获取角色信息胜利')      // 获取的信息在页面显示      this.editForm = res.data      // 显示弹框      this.editDialogVisible = true    },    // 批改角色提交    editRole() {      this.$refs.editFormRef.validate(async valid => {        if (!valid) return        // 校验胜利,提交表单        const { data: res } = await this.$http.put(          'roles/' + parseInt(this.editForm.id),          {            roleId: parseInt(this.editForm.roleId),            roleName: this.editForm.roleName,            roleDesc: this.editForm.roleDesc          }        )        if (res.meta.status !== 200) return this.$message.error(res.meta.msg)        this.$message.success('批改胜利')        // 敞开弹框        this.editDialogVisible = false        // 刷新列表        this.getRolesList()      })    },    // 依据ID删除对应的权限    async removeRoleById(role, rightId) {      // 弹框提醒用户是否删除      const confirmResult = await this.$confirm(        '此操作将永恒删除该文件, 是否持续?',        '提醒',        {          confirmButtonText: '确定',          cancelButtonText: '勾销',          type: 'warning'        }      ).catch(error => error)      if (confirmResult !== 'confirm') {        return this.$message.info('勾销了删除')      }      // 发动删除申请      const { data: res } = await this.$http.delete(        `roles/${role.id}/rights/${rightId}`      )      if (res.meta.status !== 200) {        this.$message.error(res.meta.msg)      }      // 删除胜利,刷新列表      // this.getRolesList()      // 从新赋值权限即可,无需整个列表刷新      role.children = res.data    },    // 展现调配权限的对话框    async showSetRightDialog(role) {      this.roleId = role.id      // 获取所有权限数据      const { data: res } = await this.$http.get('rights/tree')      if (res.meta.status !== 200) {        this.$message.error(res.meta.msg)      }      // 获取胜利      this.rightsList = res.data      // 递归获取三级节点的id      this.getLeafKeys(role, this.defKeys)      this.setRightDialogVisible = true    },    // 通过递归的模式,获取角色下所有的三级权限的id,    // 并保留到defKeys中    getLeafKeys(node, arr) {      // 如果以后node 节点不蕴含children 则是三级节点      if (!node.children) {        return arr.push(node.id)      }      // 递归      node.children.forEach(item => this.getLeafKeys(item, arr))    },    // 监听对话框敞开事件    setRightDialogClosed() {      // 清空数组      this.defKeys = []    },    // 点击为权限调配权限    async allotRights() {      const keys = [        // 获取开展的id        ...this.$refs.treeRef.getCheckedKeys(),        // 获取半开展的id        ...this.$refs.treeRef.getHalfCheckedKeys()      ]      const idStr = keys.join(',')      const {data : res} = await this.$http.post(`roles/${this.roleId}/rights`,{rids:idStr})      if (res.meta.status !== 200) {        return this.$message.error('调配权限失败')      }      // 调配胜利      this.$message.success('调配权限胜利')      // 刷新列表      this.getRolesList()      // 暗藏dialog      this.setRightDialogVisible = false    }  }}</script><style lang="less" scoped>.el-tag {  margin: 7px;}.bdtop {  border-top: 1px solid #eee;}.bdbottom {  border-bottom: 1px solid #eee;}.vcenter {  display: flex;  align-items: center;}</style>