现在有一个需要,从表格中选择一条数据,为一条账单,点击账单拆分按钮,打开拆分dialog,携带账单id,账单金额,计费周期;初始化dialog接收数据,两个el-date-picker分别展示计费开始时间,计费结束时间,文字展示可拆分金额(带过来总金额);现需求:可以对该账单进行多次拆分,并在dialog中展示出来,拆分为多条账单时,金额总和等于原始金额,每一条都展示自己所选时间,输入的金额并展示;最后将id,拆分多条的list用接口传给后端
时间: 2023-10-02 19:13:59 浏览: 46
好的,下面是实现该需求的代码:
1. 表格中选择一条数据,并点击账单拆分按钮时,需要在方法中获取当前选择的账单信息,并打开拆分dialog,代码如下:
```html
<el-table
:data="tableData"
@row-click="handleRowClick">
<!-- 省略表格列配置 -->
</el-table>
<el-button @click="openSplitDialog">账单拆分</el-button>
```
```javascript
export default {
data() {
return {
tableData: [], // 表格数据
selectedBill: null, // 当前选择的账单信息
splitDialogVisible: false // 拆分dialog的可见状态
}
},
methods: {
handleRowClick(row) {
// 保存当前选择的账单信息
this.selectedBill = row
},
openSplitDialog() {
// 打开拆分dialog
this.splitDialogVisible = true
}
}
}
```
2. 拆分dialog的初始化需要展示账单信息,代码如下:
```html
<el-dialog
v-model="splitDialogVisible"
title="账单拆分"
width="50%">
<el-form :model="splitForm">
<el-form-item label="账单编号:">{{ selectedBill.id }}</el-form-item>
<el-form-item label="账单金额:">{{ selectedBill.amount }}</el-form-item>
<el-form-item label="计费周期:">{{ selectedBill.period }}</el-form-item>
<el-form-item label="可拆分金额:">{{ splitForm.remainingAmount }}</el-form-item>
<el-form-item label="计费开始时间:">
<el-date-picker v-model="splitForm.startDate" type="date"></el-date-picker>
</el-form-item>
<el-form-item label="计费结束时间:">
<el-date-picker v-model="splitForm.endDate" type="date"></el-date-picker>
</el-form-item>
</el-form>
</el-dialog>
```
```javascript
export default {
data() {
return {
selectedBill: null, // 当前选择的账单信息
splitForm: { // 拆分表单数据
startDate: null, // 计费开始时间
endDate: null, // 计费结束时间
amount: null, // 输入的金额
remainingAmount: null // 剩余可拆分金额
}
}
},
watch: {
selectedBill(newVal) {
// 当账单信息变化时,更新剩余可拆分金额
this.splitForm.remainingAmount = newVal.amount
}
}
}
```
3. 对于拆分多次的情况,可以使用一个数组来存储每次拆分后的账单信息,每次在el-table中展示该数组中的所有账单信息即可。代码如下:
```html
<el-table :data="splitBills">
<!-- 省略表格列配置 -->
</el-table>
```
```javascript
export default {
data() {
return {
splitBills: [] // 拆分后的账单信息列表
}
},
methods: {
addSplitBill() {
// 添加新的拆分账单
const newBill = {
startDate: this.splitForm.startDate,
endDate: this.splitForm.endDate,
amount: this.splitForm.amount
}
this.splitBills.push(newBill)
// 更新剩余可拆分金额
this.splitForm.remainingAmount -= newBill.amount
},
removeSplitBill(index) {
// 移除指定位置的拆分账单
const bill = this.splitBills[index]
this.splitBills.splice(index, 1)
// 更新剩余可拆分金额
this.splitForm.remainingAmount += bill.amount
}
}
}
```
4. 最后,在点击保存按钮时,将原始账单id和拆分后的账单信息列表一起发送给后端即可。代码如下:
```html
<el-button type="primary" @click="submitSplitBills">保存</el-button>
```
```javascript
export default {
methods: {
submitSplitBills() {
// 构造请求参数
const params = {
id: this.selectedBill.id,
bills: this.splitBills
}
// 发送请求到后端
axios.post('/api/split-bills', params).then(response => {
// 处理接口返回值
// ...
})
}
}
}
```
希望以上代码对您有所帮助!