电商后台管理系统之权限管理页面实现

372 阅读2分钟

1. 创建组件Rights.vue

导入路由,rights是home下面的子页面,所以导入home的子路由规则;

{
    path: '/home',
    component: Home,
    redirect: '/welcome',
    children: [
      { path: '/welcome', component: Welcome },
      { path: '/users', component: User },
      { path: '/rights', component: Rights }
    ]
  }

2. 然后是页面的布局

首先导入面包屑导航组件<el-card class="box-card"> 响应的数据类型根据API文档可以知道是list类型;所以在行为区写上:对应的list数据,然后在created()里面渲染页面,根据生命周期钩子来的,因为在beforeCreate还不能拿到后台响应的数据,在created的时候已经拿到了,所以在created钩子渲染页面

data(){
    return {
      rightsList:[]
    }
  },
  created () {
    this.getRightsList()
  },
  methods: {
    async getRightsList () {
      const { data: res } = await this.$http.get('rights/list')
      if (res.meta.status !== 200) {
        return this.$message.error('获取权限列表失败')
      }
      this.rightsList = res.data
    }
  }

3.使用element ui的带边框的表格展示从后台获取到的数据

通过 <el-table-column type="index" label="序号"></el-table-column>给表格每行添加序号1 2 3... type="index",然后又使用element ui的Tag标签美化权限等级:在权限等级那一列因为要自定义形式所以通过插槽的形式去做

<el-table-column
      prop="level"
      label="权限等级">
      <template v-slot:default="slotProps">
        <el-tag v-if="slotProps.row.level==='0'">一级标签</el-tag>
        <el-tag type="success" v-if="slotProps.row.level==='1'">二级标签</el-tag>
        <el-tag type="warning" v-if="slotProps.row.level==='2'">三级标签</el-tag>
      </template>
    </el-table-column>

4. 创建用户角色列表展示页Roles.vue

跟之前的步骤完全类似,重复功能按照之前的步骤去做就好了,这里重点在一级,二级,三级展开,使用三层for循坏搭配栅格系统el-row el-col,在删除的时候,删除之后只要把role.children更新就可以了,role.children=res.data

5. 树型组件的使用Tree树形控件

<el-tree :data="data" :props="defaultProps" 
  @node-click="handleNodeClick"></el-tree>
<el-tree
  :data="rightsList"
  :props="treeProps"
  show-checkbox
  node-key="id"
  default-expand-all
  :default-checked-keys="defKeys"
  ></el-tree>
  //在data里面写
   rightsList: [],
      treeProps: {
        label: 'authName',
        children: 'children'
      }

里面的rightsList表示数据,treeProps表示按哪个属性分下级,show-checkbox表示复选框,default-expand-all表示默认展开所有,default-checked-keys表示选中默认已有的权限,defKeys是数组,里面存放三级权限的id,使用递归获得这个三级权限id,关闭对话框的时候需要清空defKeys数组

 @click="showSetRightDialog(slotProps.row)"
 async showSetRightDialog (role) {
     ...
      this.getLeafKeys(role, this.defKeys)
    },
getLeafKeys (node, arr) {
      // 如果node节点不包含children属性则是三级节点
      if (!node.children) {
        return arr.push(node.id)
      }
      node.children.forEach((item) => {
        return this.getLeafKeys(item, arr)
      })
    }

把复选框选中的角色权限添加到角色身上 利用element ui树形组件的方法 :getCheckedKeys getHalfCheckedKeys后者可以获取到半选中节点

6.提交代码