import { Menu, Icon, Input } from 'ant-design-vue'
const { Item, ItemGroup, SubMenu } = Menu
const { Search } = Input
export default {
name: 'MenuTree',
props: {
dataSource: {
type: Array,
required: true
},
openKeys: {
type: Array,
default: () => []
},
search: {
type: Boolean,
default: false
}
},
created () {
this.localOpenKeys = this.openKeys.slice(0)
},
data () {
return {
localOpenKeys: []
}
},
methods: {
handlePlus (item) {
this.$emit('add', item)
},
handleMinus (item) {
this.$emit('minus', item)
},
renderSearch () {
return (
)
},
renderIcon (icon) {
return icon && () || null
},
renderMenuItem (item) {
return (
-
{ this.renderIcon(item.icon) }
{ item.title }
this.handlePlus(item) } }}>
this.handleMinus(item) } }}>
)
},
renderItem (item) {
return item.children ? this.renderSubItem(item, item.key) : this.renderMenuItem(item, item.key)
},
renderItemGroup (item) {
const childrenItems = item.children.map(o => {
return this.renderItem(o, o.key)
})
return (
-
{ this.renderIcon(item.icon) }
{ item.title }
this.handlePlus(item) } }}>
this.handleMinus(item) } }}>
{ childrenItems }
)
},
renderSubItem (item, key) {
const childrenItems = item.children && item.children.map(o => {
return this.renderItem(o, o.key)
})
const title = (
{ this.renderIcon(item.icon) }
{ item.title }
this.handlePlus(item) } }}>
this.handleMinus(item) } }}>
)
// if (item.group) {
// return this.renderItemGroup(item)
// }
// titleClick={this.handleTitleClick(item)}
return (
{ title }
{ childrenItems }
)
}
},
render () {
const { dataSource, search } = this.$props
// this.localOpenKeys = openKeys.slice(0)
const list = dataSource.map(item => {
return this.renderItem(item)
})
return (
{ search ? this.renderSearch() : null }
)
}
}