导入功能优化

This commit is contained in:
lihao 2026-01-12 16:21:16 +08:00
parent b8f40498df
commit 77d3b9899c
1 changed files with 66 additions and 26 deletions

View File

@ -1,7 +1,7 @@
/*YInZLc9/kvMC1mGq3o4LwAszAXwVlsNyvp/9X8WPLW8=*/
import React, { Component } from 'react';
import { ajax, createPage, base, high } from 'nc-lightapp-front';
import { ajax, createPage, base, high,toast } from 'nc-lightapp-front';
import backBtnClick from './btnClicks/back_BtnClick';
import checkAddLine from './btnClicks/checkAddline';
import checkDeleteLine from './btnClicks/checkDeleteLine';
@ -161,10 +161,20 @@ class SaleInvoiceCard extends Component {
}
let formData = new FormData();
let dome = document.querySelector("#fileInfo");
let olddate = this.props.cardTable.getAllData(this.tableId)
let olddate = this.props.cardTable.getAllData(this.tableId);
formData.append('imgFile', dome.files[0]);
// headers['Content-Type'] = 'multipart/form-data'
formData.append('states', states);
formData.append('states', states);vsrctype
let srcids = [];
let vsrctype = [];
for(let i=0;i<olddate.rows.length;i++){
srcids.push(olddate.rows[i].values.csrcid.value);
vsrctype.push(olddate.rows[i].values.vsrctype.value);
}
formData.append('srcids', srcids);
formData.append('vsrctype', vsrctype);
// 存储超出分配的物料信息
let excessMaterials = "";
ajax({
url: '/nccloud/so/saleinvoice/SaleInvoiceNumImport.do',
data: formData,
@ -172,34 +182,64 @@ class SaleInvoiceCard extends Component {
success: (res) => {
console.log("成功")
if (res.data.isSuccess == "Y") {
for(let row of res.data.data){
let taxPrice=row.taxPrice;
let materialCode=row.materialCode;
for(let row of res.data.data){
let taxPrice = row.taxPrice;
let materialCode = row.materialCode;
let rowNumber = row.rowNumber;
let matchQuantity = parseFloat(row.matchQuantity) || 0;
let remaining = matchQuantity;
// 筛选匹配的行(物料编码+含税单价)
let matchedRows = [];
for(let i=0;i<olddate.rows.length;i++){
//物料编码
let cmaterialvid = olddate.rows[i].values.cmaterialvid.display;
// 含税单价
let nqtorigtaxprice = olddate.rows[i].values.nqtorigtaxprice.value;
if(cmaterialvid == materialCode && parseFloat(taxPrice)==parseFloat(nqtorigtaxprice)){
this.props.cardTable.setValByKeyAndIndex("saleinvoice_b", i, "vbdef18", { value: row.matchQuantity })
}
let nnum =parseFloat(olddate.rows[i].values.nnum.value);
for(let tsrow of res.data.tsdata){
if(olddate.rows[i].values.csrcid.value == tsrow.srcid){
let taxPriceInt = Math.trunc(parseFloat(taxPrice) || 0); // 去除小数部分,保留整数位
let tableTaxPriceInt = Math.trunc(parseFloat(nqtorigtaxprice) || 0);
if(cmaterialvid == materialCode && taxPriceInt == tableTaxPriceInt && nnum >0){
matchedRows.push({
index: i,
row: olddate.rows[i],
nnum: parseFloat(olddate.rows[i].values.nnum.value) || 0,
date: tsrow.ts // 日期字段,需按实际字段名调整
});
}
}
}
}
// 无匹配行
if(matchedRows.length == 0){
excessMaterials += "EXCEL第"+rowNumber+"行 物料编码【"+materialCode+"】(含税单价:"+taxPrice+"):需分配"+matchQuantity+",无匹配库存\n";
continue;
}
// 按日期升序排序(早日期在前)
matchedRows.sort(function(a,b){
return new Date(a.date) - new Date(b.date);
});
// 分配数量
let allocatedTotal = 0;
for(let j=0;j<matchedRows.length;j++){
if(remaining <= 0) break;
let currentRow = matchedRows[j];
let allocateNum = Math.min(remaining, currentRow.nnum);
// 设置分配数量
this.props.cardTable.setValByKeyAndIndex("saleinvoice_b", currentRow.index, "vbdef18", { value: allocateNum });
allocatedTotal += allocateNum;
remaining -= allocateNum;
}
// 处理超出部分
if(remaining > 0){
excessMaterials += "EXCEL第"+rowNumber+"行 物料编码【"+materialCode+"】(含税单价:"+taxPrice+"):需分配"+matchQuantity+",实际分配"+allocatedTotal+",超出"+remaining+"\n";
}
// for (let bvo of olddate.rows) {
// //物料编码
// let cmaterialvid = bvo.values.cmaterialvid.display;
// // 含税单价
// let nqtorigtaxprice = bvo.values.nqtorigtaxprice.value;
// if(cmaterialvid == materialCode && parseFloat(taxPrice)==parseFloat(nqtorigtaxprice)){
// this.props.cardTable.setValByKeyAndIndex("saleinvoice_b", 1, "vbdef18", { value: row.matchQuantity })
// }
// }
}
// 提示超出信息
if(excessMaterials != ""){
toast({ color: 'danger', content: "以下物料分配数量超出可用库存:\n"+excessMaterials });;
// alert(excessMaterials);
}
}
// let id = this.props.getUrlParam(PRIMARY_KEY.id);
// this.onRefresh();
}
})
// 置空,不然重复导入同名不会执行