mirror of
https://github.com/cool-team-official/cool-admin-vue.git
synced 2024-11-02 06:33:40 +08:00
109 lines
1.8 KiB
Vue
109 lines
1.8 KiB
Vue
|
<template>
|
||
|
<div class="cl-menu-tree">
|
||
|
<el-popover
|
||
|
ref="popover"
|
||
|
placement="bottom-start"
|
||
|
trigger="click"
|
||
|
popper-class="popper-menu-tree"
|
||
|
>
|
||
|
<el-input size="small" v-model="filterValue">
|
||
|
<i slot="prefix" class="el-input__icon el-icon-search"></i>
|
||
|
</el-input>
|
||
|
|
||
|
<el-tree
|
||
|
ref="tree"
|
||
|
node-key="menuId"
|
||
|
:data="treeList"
|
||
|
:props="props"
|
||
|
:highlight-current="true"
|
||
|
:expand-on-click-node="false"
|
||
|
:default-expanded-keys="expandedKeys"
|
||
|
:filter-node-method="filterNode"
|
||
|
@current-change="currentChange"
|
||
|
>
|
||
|
</el-tree>
|
||
|
</el-popover>
|
||
|
<el-input v-model="name" v-popover:popover readonly placeholder="请选择"></el-input>
|
||
|
</div>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
import { deepTree } from "cl-admin/utils";
|
||
|
|
||
|
export default {
|
||
|
name: "cl-menu-tree",
|
||
|
|
||
|
props: {
|
||
|
value: [Number, String]
|
||
|
},
|
||
|
|
||
|
data() {
|
||
|
return {
|
||
|
filterValue: "",
|
||
|
list: [],
|
||
|
props: {
|
||
|
label: "name",
|
||
|
children: "children"
|
||
|
},
|
||
|
expandedKeys: []
|
||
|
};
|
||
|
},
|
||
|
|
||
|
watch: {
|
||
|
filterValue(val) {
|
||
|
this.$refs.tree.filter(val);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
computed: {
|
||
|
name() {
|
||
|
const item = this.list.find((e) => e.id == this.value);
|
||
|
return item ? item.name : "一级菜单";
|
||
|
},
|
||
|
|
||
|
treeList() {
|
||
|
return deepTree(this.list);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
mounted() {
|
||
|
this.menuList();
|
||
|
},
|
||
|
|
||
|
methods: {
|
||
|
currentChange({ id }) {
|
||
|
this.$emit("input", id);
|
||
|
},
|
||
|
|
||
|
menuList() {
|
||
|
this.$service.system.menu.list().then((res) => {
|
||
|
let list = res.filter((e) => e.type != 2);
|
||
|
|
||
|
list.unshift({
|
||
|
name: "一级菜单",
|
||
|
id: null
|
||
|
});
|
||
|
|
||
|
this.list = list;
|
||
|
});
|
||
|
},
|
||
|
|
||
|
filterNode(value, data) {
|
||
|
if (!value) return true;
|
||
|
return data.name.indexOf(value) !== -1;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
</script>
|
||
|
|
||
|
<style lang="scss">
|
||
|
.popper-menu-tree {
|
||
|
width: 480px;
|
||
|
box-sizing: border-box;
|
||
|
|
||
|
.el-input {
|
||
|
margin-bottom: 10px;
|
||
|
}
|
||
|
}
|
||
|
</style>
|