Files
vxe-table/examples/views/table/tree/Line.vue
xuliangzhan 5036d8f808 内部优化
2019-11-29 16:52:05 +08:00

266 lines
8.5 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>
<p class="tip">
树表格通过配置 <table-api-link prop="tree-config"/>={<table-api-link prop="line"/>: true} 属性来开启树节点连接线<br>
<span class="red">开启渲染节点线将会下降渲染性能具体取决于数据量</span>
</p>
<vxe-table
resizable
show-overflow
highlight-hover-row
:tree-config="{children: 'children', line: true}"
:data="tableData">
<vxe-table-column field="name" title="Name" tree-node></vxe-table-column>
<vxe-table-column field="size" title="Size"></vxe-table-column>
<vxe-table-column field="type" title="Type"></vxe-table-column>
<vxe-table-column field="date" title="Date"></vxe-table-column>
</vxe-table>
<p class="demo-code">{{ $t('app.body.button.showCode') }}</p>
<pre>
<code class="xml">{{ demoCodes[0] }}</code>
<code class="javascript">{{ demoCodes[1] }}</code>
</pre>
<p class="tip">复选框</p>
<vxe-table
resizable
show-overflow
highlight-hover-row
highlight-current-row
size="medium"
:tree-config="{children: 'children', line: true}"
:checkbox-config="{labelField: 'name'}"
:data="tableData">
<vxe-table-column type="checkbox" title="Name" width="280" tree-node></vxe-table-column>
<vxe-table-column field="size" title="Size"></vxe-table-column>
<vxe-table-column field="type" title="Type"></vxe-table-column>
<vxe-table-column field="date" title="Date"></vxe-table-column>
</vxe-table>
<p class="demo-code">{{ $t('app.body.button.showCode') }}</p>
<pre>
<code class="xml">{{ demoCodes[2] }}</code>
<code class="javascript">{{ demoCodes[3] }}</code>
</pre>
<p class="tip">自定义图标通过设置 <table-api-link prop="tree-config"/>={<table-api-link prop="iconOpen"/>, <table-api-link prop="iconClose"/>} 局部替换默认的图标</p>
<vxe-table
resizable
show-overflow
highlight-hover-row
size="small"
:radio-config="{labelField: 'name'}"
:tree-config="{children: 'children', line: true, iconOpen: 'fa fa-minus-square-o', iconClose: 'fa fa-plus-square-o'}"
:data="tableData">
<vxe-table-column type="radio" title="Name" tree-node></vxe-table-column>
<vxe-table-column field="size" title="Size"></vxe-table-column>
<vxe-table-column field="type" title="Type"></vxe-table-column>
<vxe-table-column field="date" title="Date"></vxe-table-column>
</vxe-table>
<p class="demo-code">{{ $t('app.body.button.showCode') }}</p>
<pre>
<code class="xml">{{ demoCodes[4] }}</code>
<code class="javascript">{{ demoCodes[5] }}</code>
</pre>
<p class="tip">更多自定义</p>
<vxe-table
resizable
show-overflow
highlight-hover-row
ref="xTree"
size="mini"
:checkbox-config="{labelField: 'name'}"
:tree-config="{children: 'children', line: true, iconOpen: 'fa fa-minus-square-o', iconClose: 'fa fa-plus-square-o'}"
:data="tableData">
<vxe-table-column type="checkbox" title="Name" tree-node>
<template v-slot="{ row }">
<span>
<template v-if="row.children && row.children.length">
<i class="tree-node-icon fa" :class="$refs.xTree.isTreeExpandByRow(row) ? 'fa-folder-open-o' : 'fa-folder-o'"></i>
</template>
<template v-else>
<i class="tree-node-icon fa fa-file-o"></i>
</template>
<span>{{ row.name }}</span>
</span>
</template>
</vxe-table-column>
<vxe-table-column field="size" title="Size"></vxe-table-column>
<vxe-table-column field="type" title="Type"></vxe-table-column>
<vxe-table-column field="date" title="Date"></vxe-table-column>
</vxe-table>
<p class="demo-code">{{ $t('app.body.button.showCode') }}</p>
<pre>
<code class="xml">{{ demoCodes[6] }}</code>
<code class="javascript">{{ demoCodes[7] }}</code>
<code class="css">{{ demoCodes[8] }}</code>
</pre>
</div>
</template>
<script>
import hljs from 'highlight.js'
export default {
data () {
return {
tableData: [],
demoCodes: [
`
<vxe-table
resizable
show-overflow
highlight-hover-row
:tree-config="{children: 'children', line: true}"
:data="tableData">
<vxe-table-column field="name" title="Name" tree-node></vxe-table-column>
<vxe-table-column field="size" title="Size"></vxe-table-column>
<vxe-table-column field="type" title="Type"></vxe-table-column>
<vxe-table-column field="date" title="Date"></vxe-table-column>
</vxe-table>
`,
`
export default {
data () {
return {
tableData: []
}
},
created () {
this.tableData = window.MOCK_TREE_DATA_LIST.slice(0)
}
}
`,
`
<vxe-table
resizable
show-overflow
highlight-hover-row
highlight-current-row
size="medium"
:tree-config="{children: 'children', line: true}"
:checkbox-config="{labelField: 'name'}"
:data="tableData">
<vxe-table-column type="checkbox" title="Name" width="280" tree-node></vxe-table-column>
<vxe-table-column field="size" title="Size"></vxe-table-column>
<vxe-table-column field="type" title="Type"></vxe-table-column>
<vxe-table-column field="date" title="Date"></vxe-table-column>
</vxe-table>
`,
`
export default {
data () {
return {
tableData: []
}
},
created () {
this.tableData = window.MOCK_TREE_DATA_LIST.slice(0)
}
}
`,
`
<vxe-table
resizable
show-overflow
highlight-hover-row
size="small"
:radio-config="{labelField: 'name'}"
:tree-config="{children: 'children', line: true, iconOpen: 'fa fa-minus-square-o', iconClose: 'fa fa-plus-square-o'}"
:data="tableData">
<vxe-table-column type="radio" title="Name" tree-node></vxe-table-column>
<vxe-table-column field="size" title="Size"></vxe-table-column>
<vxe-table-column field="type" title="Type"></vxe-table-column>
<vxe-table-column field="date" title="Date"></vxe-table-column>
</vxe-table>
`,
`
export default {
data () {
return {
tableData: []
}
},
created () {
this.tableData = window.MOCK_TREE_DATA_LIST.slice(0)
}
}
`,
`
<vxe-table
resizable
show-overflow
highlight-hover-row
ref="xTree"
size="mini"
:tree-config="{children: 'children', line: true, iconOpen: 'fa fa-minus-square-o', iconClose: 'fa fa-plus-square-o'}"
:data="tableData">
<vxe-table-column field="name" title="Name" tree-node>
<template v-slot="{ row }">
<span>
<template v-if="row.children && row.children.length">
<i class="tree-node-icon fa" :class="$refs.xTree.isTreeExpandByRow(row) ? 'fa-folder-open-o' : 'fa-folder-o'"></i>
</template>
<template v-else>
<i class="tree-node-icon fa fa-file-o"></i>
</template>
<span>{{ row.name }}</span>
</span>
</template>
</vxe-table-column>
<vxe-table-column field="size" title="Size"></vxe-table-column>
<vxe-table-column field="type" title="Type"></vxe-table-column>
<vxe-table-column field="date" title="Date"></vxe-table-column>
</vxe-table>
`,
`
export default {
data () {
return {
tableData: []
}
},
created () {
this.tableData = window.MOCK_TREE_DATA_LIST.slice(0)
}
}
`,
`
.tree-node-icon {
width: 16px;
text-align: center;
}
`
]
}
},
created () {
this.tableData = this.$utils.clone(window.MOCK_TREE_DATA_LIST, true)
},
mounted () {
Array.from(this.$el.querySelectorAll('pre code')).forEach((block) => {
hljs.highlightBlock(block)
})
}
}
</script>
<style scoped>
.tree-node-icon {
width: 18px;
text-align: center;
}
</style>