element 表格的第一行中有件数,零散数,总数量和包装数量,在表格中新增数据时,输入件数,零散数后自动计算总数,如果输入的新零散数大于第一条数据的零散数,就将件数减去对应的数量
时间: 2023-12-08 20:03:43 浏览: 27
你可以使用 Element UI 表格的 `table-column` 组件的 `render` 函数,在单元格中自定义输入框和计算逻辑。具体实现步骤如下:
1. 定义表格数据和列信息:
```vue
<template>
<el-table :data="tableData">
<el-table-column label="件数" prop="pieces"></el-table-column>
<el-table-column label="零散数" prop="scattered">
<template slot-scope="{ row }">
<el-input v-model="row.scattered" @input="handleInput(row)"></el-input>
</template>
</el-table-column>
<el-table-column label="总数量" prop="total"></el-table-column>
<el-table-column label="包装数量" prop="pack"></el-table-column>
</el-table>
</template>
<script>
export default {
data() {
return {
tableData: [
{
pieces: 10,
scattered: 20,
total: 30,
pack: 10
}
]
};
},
methods: {
handleInput(row) {
const scattered = parseInt(row.scattered);
const originScattered = parseInt(this.tableData[0].scattered);
const pieces = parseInt(this.tableData[0].pieces);
const pack = parseInt(this.tableData[0].pack);
let total = scattered + pieces * pack;
if (scattered > originScattered) {
total -= (scattered - originScattered);
}
row.total = total;
}
}
};
</script>
```
2. 在表格的 `table-column` 中,使用 `slot-scope` 属性传递当前的行数据对象,然后在 `render` 函数中自定义输入框,绑定 `v-model` 双向绑定数据,并注册 `@input` 事件,在事件处理函数中计算总数量并更新到当前行的 `total` 字段中。
3. 在 `handleInput` 方法中,首先将输入的零散数转换为整数类型,并获取第一行数据的件数、零散数和包装数量。然后计算总数量,如果输入的零散数大于第一行数据的零散数,就将件数减去两者差值对应的数量。
4. 最后将计算得到的总数量更新到当前行数据的 `total` 字段中,这样表格就会自动更新显示。
需要注意的是,为了保证计算的正确性,第一行数据中的件数和零散数必须是数字类型,否则需要在计算前进行类型转换。