vue 请问怎么递归处理这个数据,感谢哥哥们解答 ?

表格里数据有 n 多条,如果发生额和第一条数据的需收金额相等,就全部被第一条数据拆分,不再向下递归,否则就递归拆分剩余金额。

vue 请问怎么递归处理这个数据,感谢哥哥们解答 ?

table 表格数据:

detailData: [

{

feeType: '租金',

amountReceivableIncludTax: 55,

billStatus: 22,

needCharge: 300

},

{

feeType: '租金',

amountReceivableIncludTax: 99,

billStatus: 1,

needCharge: 200

},

{

feeType: '租金',

amountReceivableIncludTax: 9,

billStatus: 1,

needCharge: 100

}

],

表格 columns:

columns: [

{

title: '费用类型',

align: 'center',

dataIndex: 'feeType'

},

{

title: '应收金额',

align: 'center',

dataIndex: 'amountReceivableIncludTax'

},

{

title: '已结清',

align: 'center',

dataIndex: 'billStatus'

},

{

title: '需收金额',

align: 'center',

dataIndex: 'needCharge'

},

{

title: '流水拆分匹配',

align: 'center',

dataIndex: 'flowMatchData',

scopedSlots: { customRender: 'flowMatchData' }

}

],

页面表格

<a-table bordered :data-source="detailData" :columns="columns">

<!-- 流水拆分匹配 -->

<template slot="flowMatchData" slot-scope="text, record, index">

<a-input

v-model="record.flowMatchData"

placeholder="0.00"

@blur="handleFlowMatch(record, index)"

/>

</template>

</a-table>


回答:

看到@hfhan 给答案了,不过我还补充完整了,加上了校验,与列表的计算。

<div class="form-box">

<a-input-number

v-model.number="flowMatchData"

:max="maxFlowMatchData"

></a-input-number>

</div>

<a-table bordered :data-source="detailData" :columns="columns">

<!-- 流水拆分匹配 -->

<template slot="flowMatchData" slot-scope="text, record, index">

<a-input-number

v-model="record.flowMatchData"

placeholder="0.00"

:max="record.maxFlowMatchData"

@blur="handleFlowMatch(record, index)"

/>

</template>

</a-table>

computed: {

// 变化就计算

maxFlowMatchData() {

return this.detailData.reduce((pv, cv) => {

return pv + (cv.needCharge || 0);

}, 0);

},

},

watch: {

// 监听变化,变化后计算

flowMatchData() {

this.handleCalc(this.flowMatchData, 0);

},

},

methods: {

handleFlowMatch(r, idx) {

// 线上计算已有量

let currentV = 0;

for (let i = 0; i <= idx; i++) {

currentV += this.detailData[i].flowMatchData;

}

// 向下计算余量

const surplusV = this.flowMatchData - currentV;

this.handleCalc(surplusV, idx + 1);

},

// flowMatchData 输入的发生额

handleCalc(flowMatchData, index = 0) {

//

let _flowMatchData = flowMatchData;

// 循环计算一下

this.detailData.forEach((item, i) => {

// 如果大雨 i的 就忽略 向下计算 上方的忽略

if (index > i) {

return;

}

let v = _flowMatchData;

// 计算是否计算完毕

if (_flowMatchData >= item.needCharge) {

v = item.needCharge;

_flowMatchData -= item.needCharge;

} else {

_flowMatchData = 0;

}

// 写入最大与当前

this.$set(item, "flowMatchData", v);

this.$set(item, "maxFlowMatchData", v);

});

},

},


回答:

watch: {

price(val){

let index = 0

let item = this.detailData[index]

while(val > 0 && item){

let num = Math.min(val, item.needCharge || 0)

item.flowMatchData = num

val -= num

item = this.detailData[++index]

}

}

}

以上是 vue 请问怎么递归处理这个数据,感谢哥哥们解答 ? 的全部内容, 来源链接: utcz.com/p/932822.html

回到顶部