搭建页面结构
<template><div class="permission-container"><div class="app-container"><!-- 表格 --><el-card><div style="text-align: right; margin-bottom: 20px"><el-button type="primary" size="small">添加权限</el-button></div><el-table border><el-table-column label="名称" /><el-table-column label="标识" /><el-table-column label="描述" /><el-table-column label="操作"><template><el-button type="text">添加</el-button><el-button type="text">编辑</el-button><el-button type="text">删除</el-button></template></el-table-column></el-table></el-card></div></div></template>
import request from '@/utils/request'// 获取权限列表export function getPermissionList(params) {return request({url: '/sys/permission',params})}// 新增权限export function addPermission(data) {return request({url: '/sys/permission',method: 'post',data})}// 更新权限export function updatePermission(data) {return request({url: `/sys/permission/${data.id}`,method: 'put',data})}// 删除权限export function delPermission(id) {return request({url: `/sys/permission/${id}`,method: 'delete'})}// 获取权限详情export function getPermissionDetail(id) {return request({url: `/sys/permission/${id}`})}
获取数据
import { getPermissionList } from '@/api/permission'import transTree from '@/utils/transTree'export default {data() {return {list: []}},mounted () {this.getList()},methods: {async getList() {const res = await getPermissionList()this.list = transTree(res.data)}}}
树形图渲染
导入之前封装的函数,查看elemnet文档发现 当前行数据有 children字段时 被视为树形数据
row-key="id"绑定属性会渲染出来属性结构
<el-table :data="list" row-key="id" border>
添加功能
这里数据不是很多,用弹层组件直接使用 将绑定的默认值变为number类型的 需要加 : 不加就是字符串加上就是识别类型
<el-dialog :visible="showDialog" title="弹层标题" @close="showDialog = false"><el-form label-width="100px"><el-form-item label="权限名称"><el-input /></el-form-item><el-form-item label="权限标识"><el-input /></el-form-item><el-form-item label="权限描述"><el-input /></el-form-item><el-form-item label="权限启用"><el-switchactive-text="启用"active-value="1"inactive-text="不启用"inactive-value="0"/></el-form-item></el-form><template #footer><div style="text-align: right;"><el-button @click="showDialog = false">取消</el-button><el-button type="primary">确定</el-button></div></template></el-dialog>
给弹层绑定数据
<el-dialog :visible="showDialog" title="弹层标题" @close="showDialog = false"><!-- 表单内容 --><el-form label-width="100px"><el-form-item label="权限名称"><el-input v-model="formData.name" /></el-form-item><el-form-item label="权限标识"><el-input v-model="formData.code" /></el-form-item><el-form-item label="权限描述"><el-input v-model="formData.description" /></el-form-item><el-form-item label="权限启用"><el-switchv-model="formData.enVisible"active-text="启用"active-value="1"inactive-text="不启用"inactive-value="0"/></el-form-item></el-form><template #footer><div style="text-align: right;"><el-button @click="showDialog = false">取消</el-button><el-button type="primary">确定</el-button></div></template></el-dialog><script>import { getPermissionList } from '@/api/permission'import transTree from '@/utils/transTree'export default {data() {return {showDialog: false,formData: {enVisible: '0', // 开启name: '', // 名称code: '', // 权限标识description: '', // 描述type: '', // 类型pid: '' // 添加到哪个节点下}}}}</script>
功能
最上方法的添加 与 表格中的添加不同 type用来区别 pid 两个地方使用同一个函数 传入不同的参数来区别 一个函数需要多个传参的时候 建议写成对象形式 函数形参解构赋值 对象参数写法可以无视参数顺序
// 最上方的添加<el-button @click="add({pid:'',type:1})">添加权限</el-button>// 表格中的添加<el-button type="text" @click="add({pid:row.id,type:2})">添加</el-button>add({ pid, type }) {this.showDialog = truethis.formData.pid = pidthis.formData.type = type},
methods: {async getList() {const res = await getPermissionList()this.list = transTree(res.data)},add({ pid, type }) {this.showDialog = truethis.formData.pid = pidthis.formData.type = type},closeDialog() {this.showDialog = falsethis.formData = {enVisible: 1, // 开启name: '', // 名称code: '', // 权限标识description: '', // 描述type: '', // 类型pid: '' // 添加到哪个节点下}},async confim () {await addPermission(this.formData)this.$message.success('新增权限成功')// 重新获取列表this.getList()// 关闭弹层this.closeDialog()},}
删除功能
根据id删除
async deletePer(id) {try {await delPermission(id)this.$message.success('删除权限点成功')this.getList()} catch (error) {this.$message.error(error)}}
编辑功能
async editor(id) {const { data } = await getPermissionDetail(id)this.formData = datathis.showDialog = true}
async confim () {if (this.formData.id) {await updatePermission(this.formData)} else {await addPermission(this.formData)}this.$message.success(`${this.formData.id ? '修改' : '新增'}权限成功`)// 重新获取列表this.getList()// 关闭弹层this.closeDialog()},
按钮权限
如果是二级页面 不能继续添加 需要隐藏掉添加按钮 给 添加按钮
v-if用当前行的数据里面type来做判断
v-if="row.type === 1"
