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 } this.$emit('click', item), 'update:openKeys': val => { this.localOpenKeys = val } } }} openKeys={this.localOpenKeys}> { list }
) } }