173 lines
4.8 KiB
Vue
173 lines
4.8 KiB
Vue
<script>
|
|
/* eslint no-console:0 */
|
|
import Tree, { TreeNode } from '../index'
|
|
import '../assets/index.less'
|
|
import { gData, getRadioSelectKeys } from './util'
|
|
import '../../vc-dialog/assets/index.less'
|
|
import Modal from '../../vc-dialog'
|
|
import BaseMixin from '../../_util/BaseMixin'
|
|
|
|
export default {
|
|
mixins: [BaseMixin],
|
|
data () {
|
|
return {
|
|
// expandedKeys: getFilterExpandedKeys(gData, ['0-0-0-key']),
|
|
expandedKeys: ['0-0-0-key'],
|
|
autoExpandParent: true,
|
|
// checkedKeys: ['0-0-0-0-key', '0-0-1-0-key', '0-1-0-0-key'],
|
|
checkedKeys: ['0-0-0-key'],
|
|
checkStrictlyKeys: { checked: ['0-0-1-key'], halfChecked: [] },
|
|
selectedKeys: [],
|
|
treeData: [],
|
|
visible: false,
|
|
multiple: true,
|
|
}
|
|
},
|
|
methods: {
|
|
onExpand (expandedKeys) {
|
|
console.log('onExpand', arguments)
|
|
// if not set autoExpandParent to false, if children expanded, parent can not collapse.
|
|
// or, you can remove all expanded chilren keys.
|
|
this.setState({
|
|
expandedKeys,
|
|
autoExpandParent: false,
|
|
})
|
|
},
|
|
onCheck (checkedKeys) {
|
|
this.setState({
|
|
checkedKeys,
|
|
})
|
|
},
|
|
onCheckStrictly (checkedKeys, /* extra*/) {
|
|
console.log(arguments)
|
|
// const { checkedNodesPositions } = extra;
|
|
// const pps = filterParentPosition(checkedNodesPositions.map(i => i.pos));
|
|
// console.log(checkedNodesPositions.filter(i => pps.indexOf(i.pos) > -1).map(i => i.node.key));
|
|
const cks = {
|
|
checked: checkedKeys.checked || checkedKeys,
|
|
halfChecked: [`0-0-${parseInt(Math.random() * 3, 10)}-key`],
|
|
}
|
|
this.setState({
|
|
// checkedKeys,
|
|
checkStrictlyKeys: cks,
|
|
// checkStrictlyKeys: checkedKeys,
|
|
})
|
|
},
|
|
onSelect (selectedKeys, info) {
|
|
console.log('onSelect', selectedKeys, info)
|
|
this.setState({
|
|
selectedKeys,
|
|
})
|
|
},
|
|
onRbSelect (selectedKeys, info) {
|
|
let _selectedKeys = selectedKeys
|
|
if (info.selected) {
|
|
_selectedKeys = getRadioSelectKeys(gData, selectedKeys, info.node.eventKey)
|
|
}
|
|
this.setState({
|
|
selectedKeys: _selectedKeys,
|
|
})
|
|
},
|
|
onClose () {
|
|
this.setState({
|
|
visible: false,
|
|
})
|
|
},
|
|
handleOk () {
|
|
this.setState({
|
|
visible: false,
|
|
})
|
|
},
|
|
showModal () {
|
|
this.setState({
|
|
expandedKeys: ['0-0-0-key', '0-0-1-key'],
|
|
checkedKeys: ['0-0-0-key'],
|
|
visible: true,
|
|
})
|
|
// simulate Ajax
|
|
setTimeout(() => {
|
|
this.setState({
|
|
treeData: [...gData],
|
|
})
|
|
}, 2000)
|
|
},
|
|
triggerChecked () {
|
|
this.setState({
|
|
checkedKeys: [`0-0-${parseInt(Math.random() * 3, 10)}-key`],
|
|
})
|
|
},
|
|
},
|
|
|
|
render () {
|
|
const loop = data => {
|
|
return data.map((item) => {
|
|
if (item.children) {
|
|
return (
|
|
<TreeNode
|
|
key={item.key} title={item.title}
|
|
disableCheckbox={item.key === '0-0-0-key'}
|
|
>
|
|
{loop(item.children)}
|
|
</TreeNode>
|
|
)
|
|
}
|
|
return <TreeNode key={item.key} title={item.title} />
|
|
})
|
|
}
|
|
// console.log(getRadioSelectKeys(gData, this.selectedKeys));
|
|
return (<div style={{ padding: '0 20px' }}>
|
|
<h2>dialog</h2>
|
|
<button class='btn btn-primary' onClick={this.showModal}>show dialog</button>
|
|
<Modal
|
|
title='TestDemo' visible={this.visible}
|
|
onOk={this.handleOk} onClose={this.onClose}
|
|
>
|
|
{this.treeData.length ? (
|
|
<Tree
|
|
checkable class='dialog-tree'
|
|
onExpand={this.onExpand} expandedKeys={this.expandedKeys}
|
|
autoExpandParent={this.autoExpandParent}
|
|
onCheck={this.onCheck} checkedKeys={this.checkedKeys}
|
|
>
|
|
{loop(this.treeData)}
|
|
</Tree>
|
|
) : 'loading...'}
|
|
</Modal>
|
|
|
|
<h2>controlled</h2>
|
|
<Tree
|
|
checkable
|
|
onExpand={this.onExpand} expandedKeys={this.expandedKeys}
|
|
autoExpandParent={this.autoExpandParent}
|
|
onCheck={this.onCheck} checkedKeys={this.checkedKeys}
|
|
onSelect={this.onSelect} selectedKeys={this.selectedKeys}
|
|
>
|
|
{loop(gData)}
|
|
</Tree>
|
|
<button onClick={this.triggerChecked}>trigger checked</button>
|
|
|
|
<h2>checkStrictly</h2>
|
|
<Tree
|
|
checkable multiple={this.multiple} defaultExpandAll
|
|
onExpand={this.onExpand} expandedKeys={this.expandedKeys}
|
|
onCheck={this.onCheckStrictly}
|
|
checkedKeys={this.checkStrictlyKeys}
|
|
checkStrictly
|
|
>
|
|
{loop(gData)}
|
|
</Tree>
|
|
|
|
<h2>radio's behavior select (in the same level)</h2>
|
|
<Tree
|
|
multiple defaultExpandAll
|
|
onSelect={this.onRbSelect}
|
|
selectedKeys={getRadioSelectKeys(gData, this.selectedKeys) }
|
|
>
|
|
{loop(gData)}
|
|
</Tree>
|
|
</div>)
|
|
},
|
|
}
|
|
|
|
</script>
|