Files
vxe-table/examples/views/table/base/AutoHeight.vue
xuliangzhan 6fa5ed72d8 更新文档
2020-06-03 17:52:31 +08:00

275 lines
9.8 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">
当一个表格需要铺满父容器时这个功能将非常有用<br>
通过设置 <table-api-link prop="height"/>=auto表格会相对于父容器的高度去铺满但是只会在数据重新加载时才会计算<br>
还可以根据不同场景添加 <table-api-link prop="sync-resize"/>属性监听 <table-api-link prop="auto-resize"/>父元素监听这样就只需要通过样式控制父容器高度就可以实现响应式表格
</p>
<div style="width: 100%; height: 300px">
<vxe-table
border
height="auto"
:data="tableData">
<vxe-table-column type="seq" width="60"></vxe-table-column>
<vxe-table-column field="name" title="Name"></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-column field="address" title="Address" show-overflow></vxe-table-column>
</vxe-table>
</div>
<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>
<div style="height: 500px">
<vxe-table
border
height="40%"
:data="tableData">
<vxe-table-column type="seq" width="60"></vxe-table-column>
<vxe-table-column field="name" title="Name"></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-column field="address" title="Address" show-overflow></vxe-table-column>
</vxe-table>
<vxe-table
border
height="60%"
:data="tableData">
<vxe-table-column type="seq" width="60" fixed="left"></vxe-table-column>
<vxe-table-column field="name" title="Name" width="300"></vxe-table-column>
<vxe-table-column field="sex" title="Sex" width="300"></vxe-table-column>
<vxe-table-column field="age" title="Age" width="300"></vxe-table-column>
<vxe-table-column field="date13" title="Date" width="300"></vxe-table-column>
<vxe-table-column field="address" title="Address" width="200" fixed="right" show-overflow></vxe-table-column>
</vxe-table>
</div>
<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="auto-resize"/> 响应式就可以自动跟随父容器宽高动态变化</p>
<vxe-toolbar>
<template v-slot:buttons>
<vxe-button @click="tableHeight = 300">修改300px</vxe-button>
<vxe-button @click="tableHeight = 500">修改500px</vxe-button>
<vxe-button @click="tableHeight = 800">修改800px</vxe-button>
</template>
</vxe-toolbar>
<div :style="{height: `${tableHeight}px`}">
<vxe-table
border
auto-resize
show-footer
height="auto"
:footer-method="footerMethod"
:data="tableData">
<vxe-table-column type="seq" width="60" fixed="left"></vxe-table-column>
<vxe-table-column field="name" title="Name" width="300"></vxe-table-column>
<vxe-table-column field="sex" title="Sex" width="300"></vxe-table-column>
<vxe-table-column field="age" title="Age" width="300"></vxe-table-column>
<vxe-table-column field="date13" title="Date" width="300"></vxe-table-column>
<vxe-table-column field="address" title="Address" width="200" fixed="right" show-overflow></vxe-table-column>
</vxe-table>
</div>
<p class="demo-code">{{ $t('app.body.button.showCode') }}</p>
<pre>
<code class="xml">{{ demoCodes[4] }}</code>
<code class="javascript">{{ demoCodes[5] }}</code>
</pre>
</div>
</template>
<script>
import XEUtils from 'xe-utils'
import hljs from 'highlight.js'
export default {
data () {
return {
tableHeight: 300,
tableData: [],
demoCodes: [
`
<div style="width: 100%; height: 300px">
<vxe-table
border
height="auto"
:data="tableData">
<vxe-table-column type="seq" width="60"></vxe-table-column>
<vxe-table-column field="name" title="Name"></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-column field="address" title="Address" show-overflow></vxe-table-column>
</vxe-table>
</div>
`,
`
export default {
data () {
return {
tableData: []
}
},
created () {
this.tableData = window.MOCK_DATA_LIST.slice(0, 20)
}
}
`,
`
<div style="height: 500px">
<vxe-table
border
height="40%"
:data="tableData">
<vxe-table-column type="seq" width="60"></vxe-table-column>
<vxe-table-column field="name" title="Name"></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-column field="address" title="Address" show-overflow></vxe-table-column>
</vxe-table>
<vxe-table
border
height="60%"
:data="tableData">
<vxe-table-column type="seq" width="60" fixed="left"></vxe-table-column>
<vxe-table-column field="name" title="Name" width="300"></vxe-table-column>
<vxe-table-column field="sex" title="Sex" width="300"></vxe-table-column>
<vxe-table-column field="age" title="Age" width="300"></vxe-table-column>
<vxe-table-column field="date13" title="Date" width="300"></vxe-table-column>
<vxe-table-column field="address" title="Address" width="200" fixed="right" show-overflow></vxe-table-column>
</vxe-table>
</div>
`,
`
export default {
data () {
return {
tableData: []
}
},
created () {
this.tableData = window.MOCK_DATA_LIST.slice(0, 20)
}
}
`,
`
<vxe-toolbar>
<template v-slot:buttons>
<vxe-button @click="tableHeight = 300">修改300px</vxe-button>
<vxe-button @click="tableHeight = 500">修改500px</vxe-button>
<vxe-button @click="tableHeight = 800">修改800px</vxe-button>
</template>
</vxe-toolbar>
<div :style="{height: \`\${tableHeight}px\`}">
<vxe-table
border
auto-resize
show-footer
height="auto"
:footer-method="footerMethod"
:data="tableData">
<vxe-table-column type="seq" width="60" fixed="left"></vxe-table-column>
<vxe-table-column field="name" title="Name" width="300"></vxe-table-column>
<vxe-table-column field="sex" title="Sex" width="300"></vxe-table-column>
<vxe-table-column field="age" title="Age" width="300"></vxe-table-column>
<vxe-table-column field="date13" title="Date" width="300"></vxe-table-column>
<vxe-table-column field="address" title="Address" width="200" fixed="right" show-overflow></vxe-table-column>
</vxe-table>
</div>
`,
`
export default {
data () {
return {
tableHeight: 300,
tableData: []
}
},
created () {
this.tableData = window.MOCK_DATA_LIST.slice(0, 20)
},
methods: {
footerMethod ({ columns, data }) {
const means = []
const sums = []
columns.forEach((column, columnIndex) => {
if (columnIndex === 0) {
means.push('平均')
sums.push('和值')
} else {
let meanCell = null
let sumCell = null
switch (column.property) {
case 'age':
case 'rate':
meanCell = parseInt(XEUtils.mean(data, column.property))
sumCell = XEUtils.sum(data, column.property)
break
}
means.push(meanCell)
sums.push(sumCell)
}
})
// 返回一个二维数组的表尾合计
return [means, sums]
}
}
}
`
]
}
},
created () {
this.tableData = window.MOCK_DATA_LIST.slice(0, 20)
},
mounted () {
Array.from(this.$el.querySelectorAll('pre code')).forEach((block) => {
hljs.highlightBlock(block)
})
},
methods: {
footerMethod ({ columns, data }) {
const means = []
const sums = []
columns.forEach((column, columnIndex) => {
if (columnIndex === 0) {
means.push('平均')
sums.push('和值')
} else {
let meanCell = null
let sumCell = null
switch (column.property) {
case 'age':
case 'rate':
meanCell = parseInt(XEUtils.mean(data, column.property))
sumCell = XEUtils.sum(data, column.property)
break
}
means.push(meanCell)
sums.push(sumCell)
}
})
// 返回一个二维数组的表尾合计
return [means, sums]
}
}
}
</script>