<template>
<div>
<Card class="tableCard">
<Table
:columns="columns"
border
row-key="planItemCod"
height="410"
:data="dataList"
>
<!-- 计划金额 -->
<template slot-scope="{ row, index }" slot="itemDesc">
<Form :ref="'itemDesc' + row.uuid" :model="row" class="tableInputLong">
<FormItem
prop="itemDesc"
:rules="{
required: true,
message: ' ',
trigger: 'blur',
pattern: /.+/,
}"
style="margin-top: 11px; margin-left: 20%"
>
<span v-if="!row.itemDescDisabled" class="ruleIcon"></span>
<div style="position: relative">
<Input
:disabled="row.itemDescDisabled"
v-model="row.itemDesc"
class="input-right"
:class="{
'check-input': row.itemDescRed,
'check-table': row.itemDescChange,
}"
:ref="'itemDesc' + index.toString()"
@on-blur="itemDescBlur(row, index)"
@on-focus="itemDescFocus(row, index)"
/>
<span class="showWarnMessageTable" v-show="row.itemDescRed"
>请输入正确描述</span
>
</div>
</FormItem>
</Form>
</template>
</Table>
</Card>
</div>
</template>
<script>
import axios from "axios";
import app from "@/config/app";
export default {
name: "",
data() {
return {
columns: [
{
title: "项目编号",
key: "itemCod",
align: "center",
width: 150,
resizable: true,
render: (h, params) => {
let typeData = params.row.itemCod;
return h(
"div",
{
style: {
textAlign: "left",
},
},
typeData
);
},
},
{
title: "项目",
key: "itemNam",
align: "left",
width: 500,
tree: true,
resizable: true,
},
{
title: "计划描述",
slot: "itemDesc",
align: "center",
resizable: true,
},
],
dataList: [],
},
},
created() {
this.getTreeTable();
},
mounted(){},
method() {
this.$net.send({
server: xxx,
data: { msgid: '', XXX: 'xxx' },
})
.then((data) => {
if (data.code === "200") {
this.dataList = data.data;
this.dataList[0].itemNam = "合计";
this.getTableDis();
}
});
},
getTableDis() {
this.dataList.forEach((item) => {
item._showChildren = true;
recursiveAddDisabledFlag(item);
});
function recursiveAddDisabledFlag(node) {
if (node.children && node.children.length > 0) {
node.children.forEach((child) => {
recursiveAddDisabledFlag(child);
});
node._showChildren = true;
node.itemDescDisabled = true;
} else {
node.itemDescDisabled = false;
}
}
},
itemDescBlur(row, index) {
if ( !row.itemDescAmt) {
row.itemDescRed = false;
} else {
row.itemDesc = "";
this.dataList[index].itemDesc = "";
row.itemDescRed = true;
}
this.updateNodeAmount(this.dataList, row.itemCod,row.fundSite, row.itemDesc);
},
sumMoneyMain(items) {
let sumMoney = 0;
items.forEach((item) => {
this.sumMoneyToItsParent(item);
sumMoney = accAdd(sumMoney, replaceComma(item.itemDesc) || 0);
});
return sumMoney;
},
sumMoneyToItsParent(item) {
let sumMoney = 0;
if (item.children && item.children.length > 0) {
item.children.forEach((childItem) => {
this.sumMoneyToItsParent(childItem);
if (childItem.planAmt == null) childItem.itemDesc= "";
if (childItem.fundSite == item.fundSite) {
sumMoney = accAdd(sumMoney, replaceComma(childItem.itemDesc) || 0);
} else {
sumMoney = accSub(sumMoney, replaceComma(childItem.itemDesc) || 0);
}
});
item.itemDesc= moneyFormat(sumMoney);
}
},
updateNodeAmount(nodes, targetNodeId, fundSite, newItemDesc) {
nodes.forEach((node) => {
if (node.itemCod === targetNodeId) {
node.itemDesc= newItemDesc;
node.fundSite = fundSite;
return;
} else if (node.children && node.children.length > 0) {
this.updateNodeAmount(node.children, targetNodeId, fundSite, newItemDesc);
}
});
},
planAmtFocus(row, index) {
if (row.itemDesc) {
}
},
}
</script>