当前位置: 首页 > news >正文

vue3:十四、角色权限管理-表格引入-树形表格

一、实现效果

主要实现了角色权限的表格数据展示,实现了树形效果

1、权限管理页面

2、权限管理表单页面 

 

二、基本搭建

1、创建权限页面

在views中创建新文件RoleView.vue

2、修改路由

在router/index.js中增加一个role权限管理页面的路由

3、导航页面修改

将权限管理写入导航页的菜单项

三、基本数据操作

1、官网参考

Table 表格 | Element Plus

表格中找到树形数据与懒加载

 参照文档可知,当提供的表格数据含有childern字段,并且表格有属性row-key即可完成渲染

2、写入apifox接口请求

(1)查询全部列表

新建接口

新建接口/role/list

新建期望

期望返回数据
{"code": 1,"msg": "成功","data": [{name:"超级管理员",id:1,pid:0,edit:false,del:false,children:[{name:"二级管理员1",id:2,pid:1,children:[{name:"三级管理员1",id:21,pid:2},{name:"三级管理员2",id:22,pid:2 }]},{name:"二级管理员2",id:3,pid:1,children:[{name:"三级管理员3",id:31,pid:3},{name:"三级管理员4",id:32,pid:3}]},{name:"二级管理员3",id:4,pid:1,children:[{name:"三级管理员5",id:41,pid:4]}]}]
}

(2)新增角色

新建接口

新建接口/role/add,并写入需要传递的参数名称,父权限id,需要的权限数组

新建期望

(3)编辑角色

新建接口

新建接口/role/edit,并且传递修改行的id以及修改的数据name名称、pid父角色id、arrays角色权限数组

新建期望

(4)删除角色

新建接口

新建接口/role/del,并传递删除行的id

新建期望

四、核心实现

1、将树形核心字段写入表格组件

在表格中的el-table中写入字段row-key="id" :根据id进行判断进行树形结构设置,default-expand-all:默认展开

2、将树形row-key的值设置为变量

在表格标签中的row-key中写入变量threeRowKey

在参数中,写入threeRowKey,并设置默认值为id(这里需要由父页面提供参数值)

3、角色页面表格实现

(1)定义表格列

根据之前的分类管理也买你,写入角色信息的列信息,包含角色名称,角色ID,父角色ID

//定义表格列
const columns = [{ label: '角色名称', field: 'name', width: 200},{ label: '角色ID', field: 'id', width: 120},{label: '父角色ID', field: 'pid', width: 120,temp: (row, index) => { return row.pid ? `<b>${row.pid}</b>` : '—' },}
]

(2)写入接口路径

包含全部列信息,新增,修改,删除

// 写入表格请求路径
const apiUrl = {list: '/role/list',add: '/role/add',edit: '/role/edit',del: '/role/del'
}

(3)引入表格

在页面中引入表格组件

import Tables from "@/components/Table.vue"; //引入表格

(4)表格组件写入

写入表格组件,并携带路径参数,表头数组,禁止显示分页,禁止分页,

<template><Tables :apiUrl="apiUrl" :showPage="false" :showSearch="false" :columns="columns"></Tables>
</template>

(5)解决箭头和文字不在一行显示问题

目前实现的效果,出现错位的样式

修改样式效果

(6)目前效果展示

由下图可知,已经实现

4、表单实现

表单中的父角色的数据需要从表格组件中的全部角色获取,每一个都可以作为父角色

(1)表格组件-表格数据的传递

getDataCallback() ↓
getData( (data) => { emit("update:tableData", data); } )↓
getData中的post(...) 发起请求↓
收到响应 res.code == 1↓
tableData.value = res.data↓
执行 callback(res.data)↓
emit("update:tableData", res.data) → 父组件监听到事件并接收数据

getDataCallback方法 
const getDataCallback = () => {getData((data) => {emit("update:tableData", data);})
}

直接调用了 getData(...),并传入了一个匿名函数 (data) => { ... }

  • 这里将一个函数作为参数传给了 getData
  • 这个函数就是所谓的callback(回调函数)。
  • getData 执行完毕,并且从后端接口获取到数据后,会执行这个 callback 函数,并把数据传进去。

getData方法 
const getData = (callback) => {// ...post(props.apiUrl.list, { data: searchField }).then(res => {

相关文章:

  • Github超19k+ strar的实时协同编辑的开源框架yjs
  • PrimeVue菜单组件深度解析:构建高效能的Web导航系统
  • Java-System工具类深度解析
  • spring+tomcat 用户每次发请求,tomcat 站在线程的角度是如何处理用户请求的,spinrg的bean 是共享的吗
  • 腾讯2025年校招笔试真题手撕(三)
  • 并发编程之并发容器类
  • 解码AI教育革命的核心价值链:算法、神经界面与数字基建
  • SC3000智能相机-自动存图
  • Basic concepts for seismic source - Finite fault model
  • 佰力博科技与您探讨半导体电阻测试常用的一些方法
  • React 与 TypeScript 极客园移动端
  • 旋转编码器计次 红外对射传感器计次小实验及其相关库函数详解 (江协科技)
  • 《洞察因果本质:解锁智能体大模型精准预测的底层逻辑》
  • torch.gather()和torch.sort
  • Human DiO-LDL,绿色荧光标记人源低密度脂蛋白,研究细胞内吞
  • vscode include总是报错
  • 印度语言指令驱动的无人机导航!UAV-VLN:端到端视觉语言导航助力无人机自主飞行
  • nltk-英文句子分词+词干化
  • 如何顺利地将应用程序从 Android 转移到Android
  • 微服务架构中的 RabbitMQ:异步通信与服务解耦(一)
  • 施工企业资质等级划分/处理器优化软件
  • 南京市规划建设展览馆网站/官网站内推广内容
  • 设计类网站/舆情服务公司
  • 域名备案好了后怎么做网站/关键词优化排名费用
  • 长春网络公司/seo网站关键词优化软件
  • 哈尔滨网站建设服务公司/合肥seo外包平台