bug 514 537 538 540 543

This commit is contained in:
Ranyunqiao
2026-05-18 17:44:15 +08:00
parent 4972ca64da
commit 0e974129eb
12 changed files with 512 additions and 396 deletions

View File

@@ -386,7 +386,7 @@
:disabled="viewStatus == 'view'"
v-model="scope.row.itemQuantityDisplay"
placeholder=""
@change="(value) => handleItemQuantityChange(scope.row, value)"
@input="(value) => handleItemQuantityChange(scope.row, value)"
:class="{ 'error-border': scope.row.error }"
/>
</div>
@@ -971,6 +971,10 @@ function handleItemQuantityChange(row, value) {
quantityTemp = value;
}
row.totalPrice = ((row.price * quantityTemp) / row.partPercent).toFixed(2);
// 数量变更后重置保存标记,允许重新提交
row.isSave = false;
// 同步更新底部合计金额
handleTotalAmount();
}
function handelApply() {
@@ -1262,128 +1266,108 @@ function editBatchTransfer(index) {
}
function handleSave(row, index) {
rowList.value = [];
if (route.query.supplyBusNo) {
// 编辑
forms.purchaseinventoryList.map((row, index) => {
if (row) {
proxy.$refs['receiptHeaderRef'].validate((valid) => {
if (valid) {
proxy.$refs['formRef'].validate((valid) => {
if (valid) {
if (row.unitCode == row.unitList.minUnitCode) {
row.itemQuantity = forms.purchaseinventoryList[index].olditemQuantity
? forms.purchaseinventoryList[index].olditemQuantity
: forms.purchaseinventoryList[index].itemQuantity;
} else {
row.itemQuantity = forms.purchaseinventoryList[index].itemMaxQuantity
? forms.purchaseinventoryList[index].itemMaxQuantity
: forms.purchaseinventoryList[index].itemQuantity;
}
// let rows = JSON.parse(JSON.stringify(row))
// delete rows.itemMaxQuantity
if (row.unitCode == row.unitCode_dictText) {
if (row.unitCode_dictText == row.unitList.minUnitCode_dictText) {
row.unitCode = row.unitList.minUnitCode;
} else {
row.unitCode = row.unitList.unitCode;
row.unitCode_dictText = row.unitList.unitCode_dictText;
}
}
if (row.unitCode == row.unitList.unitCode) {
row.unitCode_dictText = row.unitList.unitCode_dictText;
} else if (row.unitCode == row.unitList.minUnitCode) {
row.unitCode_dictText = row.unitList.minUnitCode_dictText;
}
if (!forms.purchaseinventoryList[index].price || forms.purchaseinventoryList[index].price <= 0) {
proxy.$message.warning('调拨单价不能为空或为0请检查');
return;
}
forms.purchaseinventoryList[index].totalPrice =
forms.purchaseinventoryList[index].price * forms.purchaseinventoryList[index].itemQuantity;
rowList.value.push(JSON.parse(JSON.stringify(row)));
if (
rowList._rawValue &&
rowList._rawValue.length == forms.purchaseinventoryList.length
) {
addTransferProducts(rowList._rawValue);
}
}
});
}
});
}
});
} else {
//新增
form.purchaseinventoryList.map((row, index) => {
if (row) {
proxy.$refs['receiptHeaderRef'].validate((valid) => {
if (valid) {
proxy.$refs['formRef'].validate((valid) => {
if (valid) {
let rows = JSON.parse(JSON.stringify(row));
delete rows.itemMaxQuantity;
if (rows.unitCode == rows.unitList.minUnitCode) {
rows.itemQuantity = form.purchaseinventoryList[index].olditemQuantity
? form.purchaseinventoryList[index].olditemQuantity
: form.purchaseinventoryList[index].itemQuantity;
} else {
rows.itemQuantity = form.purchaseinventoryList[index].itemMaxQuantity
? form.purchaseinventoryList[index].itemMaxQuantity
: form.purchaseinventoryList[index].itemQuantity;
}
if (rows.unitCode == rows.unitCode_dictText) {
if (rows.unitCode_dictText == rows.unitList.minUnitCode_dictText) {
rows.unitCode = rows.unitList.minUnitCode;
} else {
rows.unitCode = rows.unitList.unitCode;
rows.unitCode_dictText = rows.unitList.unitCode_dictText;
}
}
if (rows.unitCode == rows.unitList.unitCode) {
rows.unitCode_dictText = rows.unitList.unitCode_dictText;
} else if (rows.unitCode == rows.unitList.minUnitCode) {
rows.unitCode_dictText = rows.unitList.minUnitCode_dictText;
}
if (!form.purchaseinventoryList[index].price || form.purchaseinventoryList[index].price <= 0) {
proxy.$message.warning('调拨单价不能为空或为0请检查');
return;
}
form.purchaseinventoryList[index].totalPrice =
form.purchaseinventoryList[index].price * form.purchaseinventoryList[index].itemQuantity;
rowList.value.push(JSON.parse(JSON.stringify(rows)));
if (
rowList._rawValue &&
rowList._rawValue.length == form.purchaseinventoryList.length
) {
addTransferProducts(rowList._rawValue);
}
}
});
}
});
}
});
// 过滤出未保存的行,已保存的行不重复提交
const listToCheck = route.query.supplyBusNo
? forms.purchaseinventoryList
: form.purchaseinventoryList;
const unsavedList = listToCheck.filter(item => !item.isSave);
if (unsavedList.length === 0) {
proxy.$modal.msgWarning('所有行均已保存,无需重复提交');
return;
}
// 先校验表头
proxy.$refs['receiptHeaderRef'].validate((headerValid) => {
if (!headerValid) return;
// 逐行校验(避免异步回调导致重复提交)
const rowsToSave = [];
for (let i = 0; i < form.purchaseinventoryList.length; i++) {
const r = form.purchaseinventoryList[i];
if (!r) continue;
// 跳过已保存的行,避免重复提交导致预扣减库存叠加
if (r.isSave) continue;
// 校验当前行的必填字段
let rowValid = true;
for (const prop of ['name', 'unitCode']) {
const formRef = proxy.$refs['formRef'];
if (formRef && formRef.validateField) {
formRef.validateField(`purchaseinventoryList.${i}.${prop}`, (valid) => {
if (valid) rowValid = false;
});
}
}
if (!rowValid) {
proxy.$modal.msgWarning('第' + (i + 1) + '行数据不完整,请检查');
return;
}
// 单价校验
if (!r.price || r.price <= 0) {
proxy.$modal.msgWarning('第' + (i + 1) + '行调拨单价不能为空或为0');
return;
}
// 单位处理
const rowData = route.query.supplyBusNo
? JSON.parse(JSON.stringify(forms.purchaseinventoryList[i]))
: JSON.parse(JSON.stringify(r));
delete rowData.itemMaxQuantity;
if (rowData.unitCode == rowData.unitList?.minUnitCode) {
rowData.itemQuantity = r.olditemQuantity || r.itemQuantity;
} else {
rowData.itemQuantity = r.itemMaxQuantity || r.itemQuantity;
}
if (rowData.unitCode == rowData.unitCode_dictText) {
if (rowData.unitCode_dictText == rowData.unitList?.minUnitCode_dictText) {
rowData.unitCode = rowData.unitList.minUnitCode;
} else {
rowData.unitCode = rowData.unitList.unitCode;
rowData.unitCode_dictText = rowData.unitList.unitCode_dictText;
}
}
if (rowData.unitCode == rowData.unitList?.unitCode) {
rowData.unitCode_dictText = rowData.unitList.unitCode_dictText;
} else if (rowData.unitCode == rowData.unitList?.minUnitCode) {
rowData.unitCode_dictText = rowData.unitList.minUnitCode_dictText;
}
// 计算总价
r.totalPrice = r.price * rowData.itemQuantity;
rowsToSave.push(rowData);
}
// 所有行校验通过,一次性提交
if (rowsToSave.length > 0) {
addTransferProducts(rowsToSave);
}
});
}
function addTransferProducts(rowList) {
addTransferProduct(JSON.parse(JSON.stringify(rowList))).then((res) => {
// 当前行没有id视为首次新增
// if (!row.id) {
// data.isAdding = false; // 允许新增下一行
// }
if (res.data) {
proxy.$message.success('保存成功!');
let newIdIndex = 0;
form.purchaseinventoryList.map((row, index) => {
form.purchaseinventoryList[index].id = res.data[index];
// 只有未保存的行才会拿到新 id和提交顺序一致
if (!row.isSave && res.data[newIdIndex]) {
form.purchaseinventoryList[index].id = res.data[newIdIndex];
newIdIndex++;
}
form.purchaseinventoryList[index].isSave = true;
});
if (route.query.supplyBusNo) {
// 编辑
let newIdIdx = 0;
forms.purchaseinventoryList.map((row, index) => {
forms.purchaseinventoryList[index].id = res.data[index];
if (!row.isSave && res.data[newIdIdx]) {
forms.purchaseinventoryList[index].id = res.data[newIdIdx];
newIdIdx++;
}
forms.purchaseinventoryList[index].isSave = true;
});
}