[TOC]
这⾥使⽤ Element 的 Tree 树形控件组件。
// Element 官⽅示例:Tree 树形控件基础⽤法
:data=“data” :props=“defaultProps” @node-click=“handleNo
deClick”>
export default {
data() {
return {
data: [{
label: ‘⼀级 1’,
children: [{
label: ‘⼆级 1-1’,
children: [{
label: ‘三级 1-1-1’
}]
}]
}, {
label: ‘⼀级 2’,
children: [{
label: ‘⼆级 2-1’,
children: [{
label: ‘三级 2-1-1’
}]
}, {
label: ‘⼆级 2-2’,
children: [{
label: ‘三级 2-2-1’
}]
}]
}, {
label: ‘⼀级 3’,
children: [{
label: ‘⼆级 3-1’,
children: [{
label: ‘三级 3-1-1’
}]
}, {
label: ‘⼆级 3-2’,
children: [{
label: ‘三级 3-2-1’
}]
}]
}],
defaultProps: {
children: ‘children’,
label: ‘label’
}
};
},
methods: {
handleNodeClick(data) {
console.log(data);
}
}
};
引⼊到⻚⾯中,去除事件。
设置⼀个 Card 作为容器。
设置默认全部展开,使⽤ 组件的 default-expand-all 属性。
设置复选框展示,使⽤ 组件的 show-checkbox 属性。
data 代表树形图的数据,更改为 menus 避免混淆。
props 代表读取数据时,属性对应的功能,因为请求接⼝时,不是所有接⼝都⽤ label 表示标题,这时就可以设置 props 了。
class=“alloc-menu”>
:data=“menus”
:props=“defaultProps”
show-checkbox
default-expand-all
>
export default {
…
data () {
return {
menus: [ … ],
defaultProps: {
children: ‘children’,
label: ‘label’
}
}
}
}
下⾯请求所有菜单数据,接⼝地址。
// services/menu.js
…
// 获取所有菜单并按层级展示(注意,这是菜单功能,保存到 menu.js 中)
export const getMenuNodeList = () => {
return request({
method: ‘GET’,
url: ‘/boss/menu/getMenuNodeList’
})
}
引⼊并请求数据
// alloc-menu.vue
…
import { getMenuNodeList } from ‘@/services/menu’
…
created () {
// 加载所有菜单
this.loadMenus()
},
methods: {
async loadMenus () {
// 请求所有菜单数据
const { data } = await getMenuNodeList()
if (data.code === ‘000000’) {
console.log(data)
}
}
}
由于对应标题和层级的属性与默认名称不同,需要进⾏设置,同时 menus 中的默认数据也可以删除了。
// alloc-menu.vue
…
data () {
return {
menus: [],
defaultProps: {
children: ‘subMenuList’,
label: ‘name’
}
}
},
methods: {
async loadMenus () {
const { data } = await getMenuNodeList()
if (data.code === ‘000000’) {
// 绑定数据
this.menus = data.data
}
}
}