2020-08-27 17:18:57 +08:00

290 lines
11 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="tree-page article">
<h1>Tree 树形控件</h1>
<h2>概述</h2>
<p>文件夹组织架构生物分类国家地区等等世间万物的大多数结构都是树形结构使用树控件可以完整展现其中的层级关系并具有展开收起选择等交互功能</p>
<h2>代码示例</h2>
<Row class="panel">
<Cell class="son-panel" span="12">
<div class="panel-case">
<Tree :data="data" @on-select-change="select">
</Tree>
</div>
<div class="panel-header">
<span>基础用法</span>
</div>
<div class="panel-desc">
<p>最简单的用法展示可勾选可选中默认展开等功能</p>
</div>
</Cell>
<div class="panel-split">
</div>
<Cell class="son-panel" span="12">
<div class="code">
<markdown1></markdown1>
</div>
</Cell>
</Row>
<Row class="panel">
<Cell class="son-panel" span="12">
<div class="panel-case">
<Tree :data="data" multiple :inline="false" @on-check-change="check"></Tree>
</div>
<div class="panel-header">
<span>多选 + 非inline展示</span>
</div>
<div class="panel-desc">
<p>设置multiple则Tree组件是多选的则出现checkbox框设置inline为false则底层节点垂直排列非横向排列</p>
</div>
</Cell>
<div class="panel-split">
</div>
<Cell class="son-panel" span="12">
<div class="code">
<markdown2></markdown2>
</div>
</Cell>
</Row>
<Row class="panel">
<Cell class="son-panel" span="12">
<div class="panel-case">
<Tree :data="data2" multiple :load-data="loadData" @on-check-change="check"></Tree>
</div>
<div class="panel-header">
<span>基础用法</span>
</div>
<div class="panel-desc">
<p>最简单的用法展示可勾选可选中默认展开等功能</p>
</div>
</Cell>
<div class="panel-split">
</div>
<Cell class="son-panel" span="12">
<div class="code">
</div>
</Cell>
</Row>
<Row class="panel">
<Cell class="son-panel" span="12">
<div class="panel-case">
<Tree ref="tree" :data="data" @on-select-change="select">
<template slot-scope="{node, root}">
<contextmenu :data="actions" @on-choose="doAction(node,arguments)">
<span > {{ node.name }} </span>
</contextmenu>
</template>
</Tree>
</div>
<div class="panel-header">
<span>自定义节点内容</span>
</div>
<div class="panel-desc">
<p>通过slot-scope自定义节点内容包含两个字段当前节点node(object)和跟节点root(object)</p>
</div>
</Cell>
<div class="panel-split">
</div>
<Cell class="son-panel" span="12">
<div class="code">
<markdown1></markdown1>
</div>
</Cell>
</Row>
<h2>API</h2>
<h3>Tree props</h3>
<section>
<table>
<thead>
<tr>
<th style="text-align:left">属性</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">类型</th>
<th style="text-align:left">默认值</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">data</td>
<td style="text-align:left">可嵌套的节点属性的数组生成 tree 的数据</td>
<td style="text-align:left">Array</td>
<td style="text-align:left">[]</td>
</tr>
<tr>
<td style="text-align:left">multiple</td>
<td style="text-align:left">是否支持多选</td>
<td style="text-align:left">Boolean</td>
<td style="text-align:left">false</td>
</tr>
<tr>
<td style="text-align:left">inline</td>
<td style="text-align:left">底层节点是否横向排列</td>
<td style="text-align:left">Boolean</td>
<td style="text-align:left">true</td>
</tr>
</tbody>
</table>
</section>
<h3>Tree events</h3>
<section>
<table>
<thead>
<tr>
<th style="text-align:left">事件名</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">返回值</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">on-select-change</td>
<td style="text-align:left">点击树节点时触发</td>
<td style="text-align:left">当前已选中的节点</td>
</tr>
<tr>
<td style="text-align:left">on-check-change</td>
<td style="text-align:left">点击复选框时触发</td>
<td style="text-align:left">当前已勾选节点的数组</td>
</tr>
</tbody>
</table>
</section>
<h3>Node props</h3>
<section>
<table>
<thead>
<tr>
<th style="text-align:left">属性</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">类型</th>
<th style="text-align:left">默认值</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">name</td>
<td style="text-align:left">节点名称</td>
<td style="text-align:left">String</td>
<td style="text-align:left">null</td>
</tr>
<tr>
<td style="text-align:left">expand</td>
<td style="text-align:left">是否展开子节点</td>
<td style="text-align:left">Boolean</td>
<td style="text-align:left">false</td>
</tr>
<tr>
<td style="text-align:left">selected</td>
<td style="text-align:left">是否选中子节点</td>
<td style="text-align:left">Boolean</td>
<td style="text-align:left">false</td>
</tr>
<tr>
<td style="text-align:left">checked</td>
<td style="text-align:left">是否勾选(如果勾选子节点也会全部勾选)</td>
<td style="text-align:left">Boolean</td>
<td style="text-align:left">false</td>
</tr>
<tr>
<td style="text-align:left">children</td>
<td style="text-align:left">子节点属性数组</td>
<td style="text-align:left">Array</td>
<td style="text-align:left">null</td>
</tr>
</tbody>
</table>
</section>
</div>
</template>
<script type="text/ecmascript-6">
import markdown1 from './md/tree1.md'
import markdown2 from './md/tree2.md'
export default {
components: {
markdown1, markdown2
},
data: function () {
return {
data: [{
name: 'Jiangsu',
code: 'js',
expand: true,
children: [{
name: 'Nanjing',
code: 'nj',
selected: true
}, {
name: 'Suzhou',
code: 'sz',
children: [{
name: 'Wujiang',
code: 'wj'
}, {
name: 'Changshu',
code: 'cs'
}]
}]
}, {
name: 'Yunnan',
code: 'yn'
}, {
name: 'Fujian',
code: 'fj'
}],
data2: [],
actions: [ '增加子节点', '删除节点', '复制节点']
}
},
mounted() {
setTimeout(()=>{
this.data2 = [{
name: 'parent',
children: []
}]
}, 3000)
},
methods: {
check: function (data) {
console.log(data)
},
select: function (data) {
console.log(data)
},
loadData(item, callback) {
setTimeout(() => {
const data = [
{
name: 'children',
children: []
},
{
name: 'children',
children: []
}
];
callback(data);
}, 1000);
},
doAction(node, [data, index]){
if(index === 0){
this.$refs.tree.addNode(node, {
name: "test",
code: "111",
})
}
if(index === 1){
this.$refs.tree.removeNode(node)
}
}
}
}
</script>