Files
vxe-table/examples/views/table/scroll/Merge.vue
2020-08-24 21:26:52 +08:00

189 lines
7.9 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="merge-cells"/> 或调用函数 <table-api-link prop="setMergeCells"/><table-api-link prop="setMergeCells"/> 来控制单元格的临时合并状态</p>
<vxe-table
border
resizable
show-overflow
show-header-overflow
export-config
show-footer
ref="xTable"
height="500"
:merge-cells="mergeCells"
:sort-config="{trigger: 'cell'}"
:merge-footer-items="mergeFooterItems"
:footer-method="footerMethod"
:loading="loading">
<vxe-table-column type="seq" width="100"></vxe-table-column>
<vxe-table-column field="name" title="Name" sortable width="200"></vxe-table-column>
<vxe-table-column field="id" title="ID" width="200"></vxe-table-column>
<vxe-table-column field="sex" title="Sex" width="200"></vxe-table-column>
<vxe-table-column field="rate" title="Rate" width="200"></vxe-table-column>
<vxe-table-column field="region" title="Region" width="200"></vxe-table-column>
<vxe-table-column field="time" title="Time" width="200"></vxe-table-column>
<vxe-table-column field="address" title="Address" width="300" show-overflow></vxe-table-column>
<vxe-table-column field="updateTime" title="UpdateTime" width="200"></vxe-table-column>
<vxe-table-column field="createTime" title="CreateTime" width="200"></vxe-table-column>
<vxe-table-column field="attr1" title="Attr1" width="200"></vxe-table-column>
<vxe-table-column field="attr2" title="Attr2" width="200"></vxe-table-column>
<vxe-table-column field="attr3" title="Attr3" width="200"></vxe-table-column>
<vxe-table-column field="attr4" title="Attr4" width="200"></vxe-table-column>
<vxe-table-column field="attr5" title="Attr5" width="200"></vxe-table-column>
<vxe-table-column field="attr6" title="Attr6" width="200"></vxe-table-column>
<vxe-table-column field="attr7" title="Attr7" width="200"></vxe-table-column>
<vxe-table-column field="attr8" title="Attr8" width="200"></vxe-table-column>
<vxe-table-column field="attr11" title="attr11" width="200"></vxe-table-column>
<vxe-table-column field="attr9" title="Attr9" width="200"></vxe-table-column>
<vxe-table-column field="attr10" title="attr10" width="200"></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>
</div>
</template>
<script>
import XEAjax from 'xe-ajax'
import hljs from 'highlight.js'
export default {
data () {
return {
loading: false,
mergeCells: [
{ row: 4, col: 2, rowspan: 2, colspan: 5 },
{ row: 30, col: 3, rowspan: 10, colspan: 1 },
{ row: 80, col: 4, rowspan: 30, colspan: 3 }
],
mergeFooterItems: [
{ row: 0, col: 1, rowspan: 1, colspan: 2 },
{ row: 0, col: 6, rowspan: 1, colspan: 2 },
{ row: 0, col: 14, rowspan: 2, colspan: 5 },
{ row: 1, col: 4, rowspan: 1, colspan: 8 }
],
demoCodes: [
`
<vxe-table
border
resizable
show-overflow
show-header-overflow
export-config
show-footer
ref="xTable"
height="500"
:merge-cells="mergeCells"
:sort-config="{trigger: 'cell'}"
:merge-footer-items="mergeFooterItems"
:footer-method="footerMethod"
:loading="loading">
<vxe-table-column type="seq" width="100"></vxe-table-column>
<vxe-table-column field="name" title="Name" sortable width="200"></vxe-table-column>
<vxe-table-column field="id" title="ID" width="200"></vxe-table-column>
<vxe-table-column field="sex" title="Sex" width="200"></vxe-table-column>
<vxe-table-column field="rate" title="Rate" width="200"></vxe-table-column>
<vxe-table-column field="region" title="Region" width="200"></vxe-table-column>
<vxe-table-column field="time" title="Time" width="200"></vxe-table-column>
<vxe-table-column field="address" title="Address" width="300" show-overflow></vxe-table-column>
<vxe-table-column field="updateTime" title="UpdateTime" width="200"></vxe-table-column>
<vxe-table-column field="createTime" title="CreateTime" width="200"></vxe-table-column>
<vxe-table-column field="attr1" title="Attr1" width="200"></vxe-table-column>
<vxe-table-column field="attr2" title="Attr2" width="200"></vxe-table-column>
<vxe-table-column field="attr3" title="Attr3" width="200"></vxe-table-column>
<vxe-table-column field="attr4" title="Attr4" width="200"></vxe-table-column>
<vxe-table-column field="attr5" title="Attr5" width="200"></vxe-table-column>
<vxe-table-column field="attr6" title="Attr6" width="200"></vxe-table-column>
<vxe-table-column field="attr7" title="Attr7" width="200"></vxe-table-column>
<vxe-table-column field="attr8" title="Attr8" width="200"></vxe-table-column>
<vxe-table-column field="attr11" title="attr11" width="200"></vxe-table-column>
<vxe-table-column field="attr9" title="Attr9" width="200"></vxe-table-column>
<vxe-table-column field="attr10" title="attr10" width="200"></vxe-table-column>
</vxe-table>
`,
`
export default {
data () {
return {
loading: false,
mergeCells: [
{ row: 4, col: 2, rowspan: 2, colspan: 5 },
{ row: 30, col: 3, rowspan: 10, colspan: 1 },
{ row: 80, col: 4, rowspan: 30, colspan: 3 }
],
mergeFooterItems: [
{ row: 0, col: 1, rowspan: 1, colspan: 2 },
{ row: 0, col: 6, rowspan: 1, colspan: 2 },
{ row: 0, col: 14, rowspan: 2, colspan: 5 },
{ row: 1, col: 4, rowspan: 1, colspan: 8 }
]
}
},
created () {
this.loadList(600)
},
methods: {
loadList (size) {
this.loading = true
XEAjax.mockList(size).then(data => {
// 使用函数式加载,阻断 vue 对大数据的监听
const xTable = this.$refs.xTable
const startTime = Date.now()
if (xTable) {
this.$refs.xTable.reloadData(data).then(() => {
this.$XModal.message({ message: \`渲染 \${size} 行,用时 \${Date.now() - startTime}毫秒\`, status: 'info' })
this.loading = false
})
}
})
},
footerMethod ({ columns }) {
return [
columns.map((column, index) => index),
columns.map((column, index) => 1000 + index)
]
}
}
}
`
]
}
},
created () {
this.loadList(600)
},
mounted () {
Array.from(this.$el.querySelectorAll('pre code')).forEach((block) => {
hljs.highlightBlock(block)
})
},
methods: {
loadList (size) {
this.loading = true
XEAjax.mockList(size).then(data => {
// 使用函数式加载,阻断 vue 对大数据的监听
const xTable = this.$refs.xTable
const startTime = Date.now()
if (xTable) {
this.$refs.xTable.reloadData(data).then(() => {
this.$XModal.message({ message: `渲染 ${size} 行,用时 ${Date.now() - startTime}毫秒`, status: 'info' })
this.loading = false
})
}
})
},
footerMethod ({ columns }) {
return [
columns.map((column, index) => index),
columns.map((column, index) => 1000 + index)
]
}
}
}
</script>