搭建页面结构
<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-switch
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>
给弹层绑定数据
<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-switch
v-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 = true
this.formData.pid = pid
this.formData.type = type
},
methods: {
async getList() {
const res = await getPermissionList()
this.list = transTree(res.data)
},
add({ pid, type }) {
this.showDialog = true
this.formData.pid = pid
this.formData.type = type
},
closeDialog() {
this.showDialog = false
this.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 = data
this.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"