Files
vxe-table/examples/views/table/edit/DataCount.vue
xuliangzhan b77b4ee571 内部优化
2019-11-23 00:43:46 +08:00

137 lines
4.5 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="index" 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', attrs: {type: 'number'}}"></vxe-table-column>
<vxe-table-column field="number" title="数量" :edit-render="{name: 'input', attrs: {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 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="index" 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', attrs: {type: 'number'}}"></vxe-table-column>
<vxe-table-column field="number" title="数量" :edit-render="{name: 'input', attrs: {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 this.$utils.toNumber(row.amount) * this.$utils.toNumber(row.number)
},
countAllAmount (data) {
let count = 0
data.forEach(row => {
count += this.countAmount(row)
})
return count
},
footerMethod ({ columns, data }) {
return [
columns.map((column, columnIndex) => {
if (columnIndex === 0) {
return '合计'
}
if (columnIndex === 3) {
return \`\${this.$utils.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 this.$utils.toNumber(row.amount) * this.$utils.toNumber(row.number)
},
countAllAmount (data) {
let count = 0
data.forEach(row => {
count += this.countAmount(row)
})
return count
},
footerMethod ({ columns, data }) {
return [
columns.map((column, columnIndex) => {
if (columnIndex === 0) {
return '合计'
}
if (columnIndex === 3) {
return `${this.$utils.sum(data, 'number')}`
} else if (columnIndex === 4) {
return `${this.countAllAmount(data)}`
}
return '-'
})
]
}
}
}
</script>