Files
vxe-table/examples/views/table/edit/DataCount.vue
2020-03-30 19:05:46 +08:00

130 lines
4.3 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-column-api-link prop="slot"/>插槽实时 或者 <table-column-api-link prop="formatter"/> 格式化内容值改变时自动计算联动的行数据如果是用原生输入框可以通过添加 <table-column-api-link prop="immediate"/> 启用实时运算</p>
<vxe-table
border
resizable
show-footer
:data="tableData"
:footer-method="footerMethod"
:edit-config="{trigger: 'click', mode: 'cell'}">
<vxe-table-column type="seq" width="60"></vxe-table-column>
<vxe-table-column field="name" title="书名" :edit-render="{name: 'input'}"></vxe-table-column>
<vxe-table-column field="amount" title="单价" :edit-render="{name: '$input', props: {type: 'number'}}"></vxe-table-column>
<vxe-table-column field="number" title="数量" :edit-render="{name: '$input', props: {type: 'number'}}"></vxe-table-column>
<vxe-table-column title="总价">
<template v-slot="{ row }">
<span>{{ countAmount(row) }} </span>
</template>
</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 XEUtils from 'xe-utils'
import hljs from 'highlight.js'
export default {
data () {
return {
tableData: [
{ name: 'vxe-table 从入门到放弃', amount: 80, number: 5 },
{ name: 'JavaScript 权威指南', amount: 40, number: 3 },
{ name: 'Vue 入门到精通', amount: 90, number: 9 },
{ name: '深入现代 JavaScript 应用开发', amount: 60, number: 1 }
],
demoCodes: [
`
<vxe-table
border
resizable
show-footer
:data="tableData"
:footer-method="footerMethod"
:edit-config="{trigger: 'click', mode: 'cell'}">
<vxe-table-column type="seq" width="60"></vxe-table-column>
<vxe-table-column field="name" title="书名" :edit-render="{name: 'input'}"></vxe-table-column>
<vxe-table-column field="amount" title="单价" :edit-render="{name: '$input', props: {type: 'number'}}"></vxe-table-column>
<vxe-table-column field="number" title="数量" :edit-render="{name: '$input', props: {type: 'number'}}"></vxe-table-column>
<vxe-table-column title="总价">
<template v-slot="{ row }">
<span>{{ countAmount(row) }} 元</span>
</template>
</vxe-table-column>
</vxe-table>
`,
`
export default {
data () {
return {
tableData: []
}
},
methods: {
countAmount (row) {
return XEUtils.multiply(row.amount, row.number)
},
countAllAmount (data) {
return XEUtils.sum(data.map(row => this.countAmount(row)))
},
footerMethod ({ columns, data }) {
return [
columns.map((column, columnIndex) => {
if (columnIndex === 0) {
return '合计'
}
if (columnIndex === 3) {
return \`\${XEUtils.sum(data, 'number')}\`
} else if (columnIndex === 4) {
return \`\${this.countAllAmount(data)}\`
}
return '-'
})
]
}
}
}
`
]
}
},
mounted () {
Array.from(this.$el.querySelectorAll('pre code')).forEach((block) => {
hljs.highlightBlock(block)
})
},
methods: {
countAmount (row) {
return XEUtils.multiply(row.amount, row.number)
},
countAllAmount (data) {
return XEUtils.sum(data.map(row => this.countAmount(row)))
},
footerMethod ({ columns, data }) {
return [
columns.map((column, columnIndex) => {
if (columnIndex === 0) {
return '合计'
}
if (columnIndex === 3) {
return `${XEUtils.sum(data, 'number')}`
} else if (columnIndex === 4) {
return `${this.countAllAmount(data)}`
}
return '-'
})
]
}
}
}
</script>