Files
vxe-table/examples/views/table/tree/Icon.vue
2020-07-19 19:51:24 +08:00

260 lines
8.7 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="iconOpen"/>, <table-api-link prop="iconClose"/>} 局部替换默认的图标例如第三方图标库font-awesomeinconfont<br>
<span class="red">(树结构不支持大量数据如果数据量超过 500 请谨慎使用)</span>
</p>
<vxe-toolbar>
<template v-slot:buttons>
<vxe-button @click="getTreeExpansionEvent">获取已展开</vxe-button>
<vxe-button @click="$refs.xTree1.setAllTreeExpand(true)">展开所有</vxe-button>
<vxe-button @click="$refs.xTree1.clearTreeExpand()">关闭所有</vxe-button>
</template>
</vxe-toolbar>
<vxe-table
border
resizable
ref="xTree1"
:tree-config="{children: 'children', iconOpen: 'fa fa-minus-square-o', iconClose: 'fa fa-plus-square-o'}"
:data="tableData">
<vxe-table-column field="name" title="app.body.label.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
ref="xTree2"
:tree-config="{children: 'children', iconOpen: 'fa fa-minus-circle', iconClose: 'fa fa-plus-circle'}"
: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.xTree2.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[2] }}</code>
<code class="javascript">{{ demoCodes[3] }}</code>
<code class="css">{{ demoCodes[4] }}</code>
</pre>
<p class="tip">还可以通过 <table-api-link prop="tree-config"/>={<table-api-link prop="toggleMethod"/>} 方法实现展开与关闭的细节处理返回值用来决定是否允许继续执行</p>
<vxe-table
resizable
show-overflow
:tree-config="{children: 'children', toggleMethod: toggleTreeMethod}"
: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[5] }}</code>
<code class="javascript">{{ demoCodes[6] }}</code>
</pre>
</div>
</template>
<script>
import XEUtils from 'xe-utils'
import hljs from 'highlight.js'
export default {
data () {
return {
tableData: [],
demoCodes: [
`
<vxe-toolbar>
<template v-slot:buttons>
<vxe-button @click="getTreeExpansionEvent">获取已展开</vxe-button>
<vxe-button @click="$refs.xTree.setAllTreeExpand(true)">展开所有</vxe-button>
<vxe-button @click="$refs.xTree.clearTreeExpand()">关闭所有</vxe-button>
</template>
</vxe-toolbar>
<vxe-table
border
resizable
ref="xTree"
:tree-config="{children: 'children', iconOpen: 'fa fa-minus-square-o', iconClose: 'fa fa-plus-square-o'}"
:data="tableData">
<vxe-table-column field="name" title="app.body.label.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
},
methods: {
getTreeExpansionEvent () {
let treeExpandRecords = this.$refs.xTree.getTreeExpandRecords()
this.$XModal.alert(treeExpandRecords.length)
}
}
}
`,
`
<vxe-table
resizable
show-overflow
ref="xTree"
:tree-config="{children: 'children', iconOpen: 'fa fa-minus-circle', iconClose: 'fa fa-plus-circle'}"
: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
}
}
`,
`
.tree-node-icon {
width: 20px;
}
`,
`
<vxe-table
resizable
show-overflow
:tree-config="{children: 'children', toggleMethod: toggleTreeMethod}"
: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
},
methods: {
toggleTreeMethod ({ expanded, row }) {
if (expanded) {
if (row.date === '2019-10-22') {
this.$XModal.message({ id: 'openErr', message: '不允许展开', status: 'error' })
return false
}
} else {
if (row.date === '2019-03-04') {
this.$XModal.message({ id: 'closeErr', message: '不允许关闭', status: 'error' })
return false
}
}
return true
}
}
}
`
]
}
},
created () {
this.tableData = XEUtils.clone(window.MOCK_TREE_DATA_LIST, true)
},
mounted () {
Array.from(this.$el.querySelectorAll('pre code')).forEach((block) => {
hljs.highlightBlock(block)
})
},
methods: {
getTreeExpansionEvent () {
const treeExpandRecords = this.$refs.xTree1.getTreeExpandRecords()
this.$XModal.alert(treeExpandRecords.length)
},
toggleTreeMethod ({ expanded, row }) {
if (expanded) {
if (row.date === '2019-10-22') {
this.$XModal.message({ id: 'openErr', message: '不允许展开', status: 'error' })
return false
}
} else {
if (row.date === '2019-03-04') {
this.$XModal.message({ id: 'closeErr', message: '不允许关闭', status: 'error' })
return false
}
}
return true
}
}
}
</script>
<style scoped>
.tree-node-icon {
width: 20px;
}
</style>