Files
vxe-table/examples/views/table/advanced/Span.vue
xuliangzhan c4239ec7ae update
2019-07-18 19:12:35 +08:00

195 lines
6.1 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>合并列通过参数 <table-api-link prop="span-method"/></p>
<p>使用 $rowIndex 获取渲染中的行索引rowIndex 指向真实数据的行索引可以根据不同场景使用</p>
<vxe-table
border
show-overflow
height="400"
:span-method="colspanMethod"
:data.sync="tableData">
<vxe-table-column type="index" width="60"></vxe-table-column>
<vxe-table-column field="name" title="Name" sortable></vxe-table-column>
<vxe-table-column field="role" title="Role" sortable></vxe-table-column>
<vxe-table-column field="sex" title="Sex"></vxe-table-column>
<vxe-table-column field="age" title="Age"></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>合并行</p>
<vxe-table
border
height="400"
:span-method="rowspanMethod"
:data.sync="tableData">
<vxe-table-column type="index" width="60"></vxe-table-column>
<vxe-table-column field="key" title="Key"></vxe-table-column>
<vxe-table-column field="content" title="Translate"></vxe-table-column>
<vxe-table-column field="language" title="Language" :filters="[{label: '中文', value: 'zh_CN'}, {label: 'English', value: 'en_US'}]"></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>
</div>
</template>
<script>
import hljs from 'highlight.js'
export default {
data () {
return {
tableData: [],
demoCodes: [
`
<vxe-table
border
height="400"
:span-method="colspanMethod"
:data.sync="tableData">
<vxe-table-column type="index" width="60"></vxe-table-column>
<vxe-table-column field="name" title="Name" sortable></vxe-table-column>
<vxe-table-column field="role" title="Role" sortable></vxe-table-column>
<vxe-table-column field="sex" title="Sex"></vxe-table-column>
<vxe-table-column field="age" title="Age"></vxe-table-column>
</vxe-table>
`,
`
export default {
data () {
return {
tableData: []
}
},
created () {
this.tableData = window.MOCK_DATA_LIST.slice(0, 20)
},
methods: {
colspanMethod ({ row, rowIndex, column, columnIndex, data }) {
if (rowIndex % 2 === 0) {
if (columnIndex === 2) {
return {
rowspan: 1,
colspan: 2
}
} else if (columnIndex === 3) {
return {
rowspan: 0,
colspan: 0
}
}
}
}
}
}
`,
`
<vxe-table
border
height="400"
:span-method="rowspanMethod"
:data.sync="tableData">
<vxe-table-column type="index" width="60"></vxe-table-column>
<vxe-table-column field="key" title="Key"></vxe-table-column>
<vxe-table-column field="content" title="Translate"></vxe-table-column>
<vxe-table-column field="language" title="Language" :filters="[{label: '中文', value: 'zh_CN'}, {label: 'English', value: 'en_US'}]"></vxe-table-column>
</vxe-table>
`,
`
export default {
data () {
return {
tableData: []
}
},
created () {
this.tableData = window.MOCK_DATA_LIST.slice(0, 20)
},
methods: {
// 通用行合并函数(将相同多列数据合并为一行)
rowspanMethod ({ row, $rowIndex, column, data }) {
let fields = ['key']
let cellValue = row[column.property]
if (cellValue && fields.includes(column.property)) {
let prevRow = data[$rowIndex - 1]
let nextRow = data[$rowIndex + 1]
if (prevRow && prevRow[column.property] === cellValue) {
return { rowspan: 0, colspan: 0 }
} else {
let countRowspan = 1
while (nextRow && nextRow[column.property] === cellValue) {
nextRow = data[++countRowspan + $rowIndex]
}
if (countRowspan > 1) {
return { rowspan: countRowspan, colspan: 1 }
}
}
}
}
}
}
`
]
}
},
created () {
let list = window.MOCK_DATA_LIST.slice(0, 20)
this.tableData = list
},
mounted () {
Array.from(this.$el.querySelectorAll('pre code')).forEach((block) => {
hljs.highlightBlock(block)
})
},
methods: {
colspanMethod ({ row, rowIndex, column, columnIndex, data }) {
if (rowIndex % 2 === 0) {
if (columnIndex === 2) {
return {
rowspan: 1,
colspan: 2
}
} else if (columnIndex === 3) {
return {
rowspan: 0,
colspan: 0
}
}
}
},
// 通用行合并函数(将相同多列数据合并为一行)
rowspanMethod ({ row, $rowIndex, column, data }) {
let fields = ['key']
let cellValue = row[column.property]
if (cellValue && fields.includes(column.property)) {
let prevRow = data[$rowIndex - 1]
let nextRow = data[$rowIndex + 1]
if (prevRow && prevRow[column.property] === cellValue) {
return { rowspan: 0, colspan: 0 }
} else {
let countRowspan = 1
while (nextRow && nextRow[column.property] === cellValue) {
nextRow = data[++countRowspan + $rowIndex]
}
if (countRowspan > 1) {
return { rowspan: countRowspan, colspan: 1 }
}
}
}
}
}
}
</script>