|
@ -49,9 +49,9 @@ |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="form-group"> |
|
|
<div class="form-group"> |
|
|
<label class="col-sm-4 control-label">美元汇率:</label> |
|
|
<label class="col-sm-4 control-label is-required">美元汇率:</label> |
|
|
<div class="col-sm-8"> |
|
|
<div class="col-sm-8"> |
|
|
<input name="usdTax" id="usdTax_add" class="form-control" type="number" placeholder="美元对人民币汇率"> |
|
|
<input name="usdTax" id="usdTax_add" class="form-control" type="number" placeholder="美元对人民币汇率" required> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="form-group"> |
|
|
<div class="form-group"> |
|
@ -124,7 +124,7 @@ |
|
|
<a class="btn btn-success" onclick="insertRow()"> |
|
|
<a class="btn btn-success" onclick="insertRow()"> |
|
|
<i class="fa fa-plus"></i> 添加物料 |
|
|
<i class="fa fa-plus"></i> 添加物料 |
|
|
</a> |
|
|
</a> |
|
|
<a class="btn btn-danger multiple disabled" onclick="insertNRow()"> |
|
|
<a class="btn btn-danger multiple" onclick="insertNoMaterialNoRow()"> |
|
|
<i class="fa fa-remove"></i> 添加无料号物料 |
|
|
<i class="fa fa-remove"></i> 添加无料号物料 |
|
|
</a> |
|
|
</a> |
|
|
</div> |
|
|
</div> |
|
@ -255,6 +255,43 @@ |
|
|
commonCurrency = $("#commonCurrency_add option:selected").val(); |
|
|
commonCurrency = $("#commonCurrency_add option:selected").val(); |
|
|
console.log("commonCurrency",commonCurrency); |
|
|
console.log("commonCurrency",commonCurrency); |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//添加收款明细 |
|
|
|
|
|
function insertNoMaterialNoRow() { |
|
|
|
|
|
// 生成一个简单的唯一标识,这里使用时间戳作为示例 |
|
|
|
|
|
var uniqueId = new Date().getTime(); |
|
|
|
|
|
// 创建一个新行数据模板,这里仅为示例,具体根据表格列来定义 |
|
|
|
|
|
var newRow = { |
|
|
|
|
|
materialId:uniqueId, |
|
|
|
|
|
materialCode: "", |
|
|
|
|
|
materialName: "", |
|
|
|
|
|
materialType: "", |
|
|
|
|
|
describe: "", |
|
|
|
|
|
brand: "", |
|
|
|
|
|
unit: "", |
|
|
|
|
|
processMethod: "", |
|
|
|
|
|
photoUrl: "", |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
// 使用Bootstrap Table的API插入新行 |
|
|
|
|
|
$('#bootstrap-sub-table-quoteChild').bootstrapTable('append', newRow); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// // 逻辑删除收款凭证前端的一行数据 |
|
|
|
|
|
// function removeRow(receivablesRecordsId){ |
|
|
|
|
|
// console.log(receivablesRecordsId); |
|
|
|
|
|
// // 直接使用 receivablesRecordsId 值进行删除操作 |
|
|
|
|
|
// $("#bootstrap-receivablesVoucher-table").bootstrapTable('remove', { |
|
|
|
|
|
// field: 'receivablesRecordsId', |
|
|
|
|
|
// values: receivablesRecordsId |
|
|
|
|
|
// }); |
|
|
|
|
|
// } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$(function() { |
|
|
$(function() { |
|
|
var options = { |
|
|
var options = { |
|
|
id:'bootstrap-sub-table-quoteChild', |
|
|
id:'bootstrap-sub-table-quoteChild', |
|
@ -333,21 +370,6 @@ |
|
|
|
|
|
|
|
|
{title: '国内税率',field: 'countTax',align: 'center',}, |
|
|
{title: '国内税率',field: 'countTax',align: 'center',}, |
|
|
{ title: '美元汇率',field: 'usdTax', align: 'center',}, |
|
|
{ title: '美元汇率',field: 'usdTax', align: 'center',}, |
|
|
{field: 'materialNum',align: 'center',title: '物料的数量', |
|
|
|
|
|
editable:{ |
|
|
|
|
|
type : 'text', |
|
|
|
|
|
mode: 'inline', |
|
|
|
|
|
title : '物料的数量', |
|
|
|
|
|
validate : function(value) { |
|
|
|
|
|
if (!value) { |
|
|
|
|
|
return '用量不能为空'; |
|
|
|
|
|
} |
|
|
|
|
|
if (isNaN(value)) { |
|
|
|
|
|
return '用量必须为数字'; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
}, |
|
|
|
|
|
{ title: '物料的不含税单价(RMB)', |
|
|
{ title: '物料的不含税单价(RMB)', |
|
|
field: 'materialNoRmb', |
|
|
field: 'materialNoRmb', |
|
|
align: 'center', |
|
|
align: 'center', |
|
@ -376,6 +398,24 @@ |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
|
|
|
{ title: '物料的含税单价(RMB)',field: 'materialRmb',align: 'center',}, |
|
|
|
|
|
{field: 'materialNum',align: 'center',title: '物料的数量', |
|
|
|
|
|
editable:{ |
|
|
|
|
|
type : 'text', |
|
|
|
|
|
mode: 'inline', |
|
|
|
|
|
title : '物料的数量', |
|
|
|
|
|
validate : function(value) { |
|
|
|
|
|
if (!value) { |
|
|
|
|
|
return '用量不能为空'; |
|
|
|
|
|
} |
|
|
|
|
|
if (isNaN(value)) { |
|
|
|
|
|
return '用量必须为数字'; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
}, |
|
|
|
|
|
{title: '物料的不含税总价(RMB)',field: 'materialNoRmbSum',align: 'center',}, |
|
|
|
|
|
{ title: '物料的含税总价(RMB)',field: 'materialRmbSum',align: 'center',}, |
|
|
{title: '物料的不含税单价(美元)', |
|
|
{title: '物料的不含税单价(美元)', |
|
|
field: 'materialNoUsd', |
|
|
field: 'materialNoUsd', |
|
|
align: 'center', |
|
|
align: 'center', |
|
@ -407,9 +447,6 @@ |
|
|
{ title: '物料的含税单价(美元)',field: 'materialUsd',align: 'center',}, |
|
|
{ title: '物料的含税单价(美元)',field: 'materialUsd',align: 'center',}, |
|
|
{ title: '物料的含税总价(美元)',field: 'materialUsdSum', align: 'center',}, |
|
|
{ title: '物料的含税总价(美元)',field: 'materialUsdSum', align: 'center',}, |
|
|
{ title: '物料的不含税总价(美元)',field: 'materialNoUsdSum',align: 'center',}, |
|
|
{ title: '物料的不含税总价(美元)',field: 'materialNoUsdSum',align: 'center',}, |
|
|
{ title: '物料的含税总价(RMB)',field: 'materialRmb',align: 'center',}, |
|
|
|
|
|
{ title: '物料的含税总价(RMB)',field: 'materialNoRmbSum',align: 'center',}, |
|
|
|
|
|
{title: '物料的不含税总价(RMB)',field: 'materialRmbSum',align: 'center',}, |
|
|
|
|
|
{field: 'createBy', align: 'center',title: '录入人',visible: false}, |
|
|
{field: 'createBy', align: 'center',title: '录入人',visible: false}, |
|
|
{field: 'createTime',align: 'center',title: '录入时间',visible: false}, |
|
|
{field: 'createTime',align: 'center',title: '录入时间',visible: false}, |
|
|
{field: 'updateBy',align: 'center',title: '更新人',visible: false}, |
|
|
{field: 'updateBy',align: 'center',title: '更新人',visible: false}, |
|
@ -427,45 +464,75 @@ |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
], |
|
|
], |
|
|
onEditableSave:function(field, row, oldValue, $el){ |
|
|
|
|
|
var commonCurrency1 = $("#commonCurrency_add option:selected").val(); |
|
|
onClickCell: function(field, value, row, $element) { |
|
|
var rmb1 = $("#rmbTax_add").val(); |
|
|
// 根据物料号是否存在决定是否允许编辑 |
|
|
if (rmb1 =='' || rmb1== null){ |
|
|
if (field !== 'index' && field !== 'materialCode' && field !== 'photoUrl' && field !== 'operation') { |
|
|
rmb1 = 0; |
|
|
var isEditable = !row.materialCode; // 如果物料号不存在,则允许编辑 |
|
|
}else{ |
|
|
// 判断是否已有编辑框,避免重复打开 |
|
|
rmb1 = $("#rmbTax_add").val(); |
|
|
if (isEditable && !$element.find('.editable-input').length) { |
|
|
} |
|
|
// 模拟开启编辑 |
|
|
var rmb = parseFloat(rmb1); |
|
|
var input = $('<input type="text" class="form-control editable-input" value="' + value + '">'); |
|
|
var usd = $("#usdTax_add").val(); |
|
|
$element.empty().append(input); |
|
|
if (usd =='' || usd== null){ |
|
|
input.focus(); |
|
|
usd = 0; |
|
|
input.blur(function() { |
|
|
}else{ |
|
|
// 用户离开输入框时,手动保存编辑值并关闭编辑状态 |
|
|
usd = parseFloat(usd); |
|
|
var newValue = input.val(); |
|
|
|
|
|
// 这里你需要添加代码来实际更新表格数据和关闭编辑状态 |
|
|
|
|
|
row[field] = newValue; // 更新数据模型 |
|
|
|
|
|
$element.text(newValue).removeClass('editing'); |
|
|
|
|
|
}); |
|
|
|
|
|
$element.addClass('editing'); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
console.log(commonCurrency1); |
|
|
}, |
|
|
if(commonCurrency1 == 1){ |
|
|
|
|
|
row.materialNoRmb = parseFloat(row.materialNoRmb).toFixed(2); |
|
|
onEditableSave: function(field, row, oldValue, $el) { |
|
|
row.materialRmb = parseFloat(row.materialNoRmb * parseFloat(1 + rmb)).toFixed(2); |
|
|
var commonCurrency1 = $("#commonCurrency_add option:selected").val(); |
|
|
row.materialNoRmbSum = parseFloat(row.materialNum * parseFloat(row.materialNoRmb)).toFixed(2); |
|
|
//把上面输入的百分比国内汇率由整数转换成小数 |
|
|
row.materialRmbSum = parseFloat(row.materialRmb * row.materialNum).toFixed(2); |
|
|
var rmbRateInput = parseFloat($("#rmbTax_add").val()) || 0; |
|
|
row.materialNoUsd = parseFloat(row.materialNoRmb / usd).toFixed(2); |
|
|
var rmbRate = rmbRateInput / 100; // 将输入的百分比转换为小数 |
|
|
row.materialNoUsdSum = parseFloat(row.materialNum * row.materialNoUsd).toFixed(2); |
|
|
rmbRate = parseFloat(rmbRate.toFixed(2)); // 确保rmbRate转换为两位小数的浮点数 |
|
|
row.materialUsd = parseFloat(row.materialNoUsd).toFixed(2); |
|
|
var usdRate = parseFloat($("#usdTax_add").val()) || 0; |
|
|
row.materialUsdSum = parseFloat(row.materialNum * row.materialUsd).toFixed(2); |
|
|
|
|
|
|
|
|
var testMaterialNum = parseFloat(row.materialNum) || 0; |
|
|
|
|
|
|
|
|
|
|
|
console.log("rmbRate:",rmbRate) |
|
|
|
|
|
console.log("usdRate:",usdRate) |
|
|
|
|
|
|
|
|
|
|
|
console.log("testMaterialNum:",testMaterialNum) |
|
|
|
|
|
// // 确保计算使用的是正确的数值类型 |
|
|
|
|
|
// var noTaxValue = field === 'materialNoRmb' ? parseFloat(row.materialNoRmb) : parseFloat(row.materialNoUsd); |
|
|
|
|
|
// |
|
|
|
|
|
// // 计算不含税价格 |
|
|
|
|
|
// var noTaxPrice = noTaxValue.toFixed(2); |
|
|
|
|
|
|
|
|
|
|
|
// 根据选择的货币类型计算其他值 |
|
|
|
|
|
if (commonCurrency1 === '1') { |
|
|
|
|
|
// RMB为基准货币 |
|
|
|
|
|
row.materialRmb = (parseFloat(row.materialNoRmb) * (1 + rmbRate)).toFixed(2); |
|
|
|
|
|
row.materialRmbSum = (parseFloat(row.materialRmb) * testMaterialNum).toFixed(2); |
|
|
|
|
|
row.materialNoRmbSum = (parseFloat(row.materialNoRmb) * testMaterialNum).toFixed(2); |
|
|
|
|
|
row.materialNoUsd = (parseFloat(row.materialNoRmb) / usdRate).toFixed(2); |
|
|
|
|
|
row.materialUsd = row.materialNoUsd; // 保持一致,除非有特别的计算逻辑 |
|
|
|
|
|
row.materialUsdSum = (parseFloat(row.materialUsd) * testMaterialNum).toFixed(2); |
|
|
|
|
|
row.materialNoUsdSum = (parseFloat(row.materialNoUsd) * testMaterialNum).toFixed(2); |
|
|
|
|
|
} else if (commonCurrency1 === '2') { |
|
|
|
|
|
// USD为基准货币 |
|
|
|
|
|
row.materialUsd = row.materialNoUsd |
|
|
|
|
|
row.materialUsdSum = (parseFloat(row.materialUsd) * testMaterialNum).toFixed(2); |
|
|
|
|
|
row.materialNoUsdSum = (parseFloat(row.materialNoUsd) * testMaterialNum).toFixed(2); |
|
|
|
|
|
row.materialNoRmb = (parseFloat(row.materialNoUsd) * usdRate).toFixed(2); |
|
|
|
|
|
row.materialRmb = (parseFloat(row.materialNoRmb) * (1 + rmbRate)).toFixed(2); |
|
|
|
|
|
row.materialNoRmbSum = (parseFloat(row.materialNoRmb) * testMaterialNum).toFixed(2); |
|
|
|
|
|
row.materialRmbSum = (parseFloat(row.materialRmb) * testMaterialNum).toFixed(2); |
|
|
} |
|
|
} |
|
|
else if( commonCurrency1 == 2){ |
|
|
|
|
|
row.materialNoUsd = parseFloat(row.materialNoUsd).toFixed(2); |
|
|
// 确保getTotalAmount函数存在且正确引用 |
|
|
row.materialUsd = parseFloat(row.materialNoUsd).toFixed(2); |
|
|
if (typeof getTotalAmount === 'function') { |
|
|
row.materialUsdSum = parseFloat(row.materialNum * row.materialUsd).toFixed(2); |
|
|
getTotalAmount(); |
|
|
row.materialNoUsdSum = parseFloat(row.materialNoUsd * row.materialNum).toFixed(2); |
|
|
|
|
|
row.materialNoRmb = parseFloat(row.materialNoUsd * usd).toFixed(2); |
|
|
|
|
|
row.materialRmb = parseFloat(row.materialNoRmb * (1 + rmb)).toFixed(2); |
|
|
|
|
|
row.materialNoRmbSum = parseFloat(row.materialNoRmb * row.materialNum).toFixed(2); |
|
|
|
|
|
row.materialRmbSum = parseFloat(row.materialRmb * row.materialNum).toFixed(2); |
|
|
|
|
|
} |
|
|
} |
|
|
getTotalAmount() |
|
|
} |
|
|
}, |
|
|
|
|
|
}; |
|
|
}; |
|
|
$.table.init(options); |
|
|
$.table.init(options); |
|
|
}); |
|
|
}); |
|
@ -548,10 +615,18 @@ |
|
|
$.modal.alertWarning("请先选择客户"); |
|
|
$.modal.alertWarning("请先选择客户"); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if ($("#usdTax_add").val() == null || $("#usdTax_add").val() == '') { |
|
|
|
|
|
$.modal.alertWarning("请输入美元汇率"); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if ($("#rmbTax_add").val() == null || $("#rmbTax_add").val() == '') { |
|
|
if ($("#rmbTax_add").val() == null || $("#rmbTax_add").val() == '') { |
|
|
$.modal.alertWarning("请先选择输入国内的税率"); |
|
|
$.modal.alertWarning("请输入国内的税率"); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var url = ctx + "erp/material/select"; |
|
|
var url = ctx + "erp/material/select"; |
|
|
var options = { |
|
|
var options = { |
|
|
title: '选择料号', |
|
|
title: '选择料号', |
|
@ -573,96 +648,148 @@ |
|
|
autoclose: true |
|
|
autoclose: true |
|
|
}); |
|
|
}); |
|
|
//计算金额 |
|
|
//计算金额 |
|
|
|
|
|
// function getTotalAmount() { |
|
|
|
|
|
// // 获取表格数据 |
|
|
|
|
|
// const data = $("#bootstrap-sub-table-quoteChild").bootstrapTable('getData', true); |
|
|
|
|
|
// // 初始化汇总对象,减少代码重复并提高清晰度 |
|
|
|
|
|
// const sums = { |
|
|
|
|
|
// enterprise: "", // 用于拼接物料名称和数量 |
|
|
|
|
|
// enterpriseSum: 0, // 物料总数量 |
|
|
|
|
|
// currencies: { |
|
|
|
|
|
// noRmb: { total: 0, single: 0 }, // 非人民币数量与总金额 |
|
|
|
|
|
// rmb: { total: 0, single: 0 }, // 人民币 |
|
|
|
|
|
// noUsd: { total: 0, single: 0 }, // 非美元 |
|
|
|
|
|
// usd: { total: 0, single: 0 } // 美元 |
|
|
|
|
|
// } |
|
|
|
|
|
// }; |
|
|
|
|
|
// // 遍历数据进行计算 |
|
|
|
|
|
// for (let i = 0; i < data.length; i++) { |
|
|
|
|
|
// const item = data[i]; |
|
|
|
|
|
// // 拼接物料信息 |
|
|
|
|
|
// sums.enterprise += "" + item.materialName + ": 数量 : " + item.materialNum; |
|
|
|
|
|
// sums.enterpriseSum += parseFloat(item.materialNum); // 累加物料数量 |
|
|
|
|
|
// // 分别累加各货币的单个金额和总金额 |
|
|
|
|
|
// ['noRmb', 'rmb', 'noUsd', 'usd'].forEach(currency => { |
|
|
|
|
|
// sums.currencies[currency].single += parseFloat(item['material' + [currency] ]); |
|
|
|
|
|
// sums.currencies[currency].total += parseFloat(item['material' + [currency] + 'Sum']); |
|
|
|
|
|
// }); |
|
|
|
|
|
// } |
|
|
|
|
|
// updateFormValues(sums); |
|
|
|
|
|
// } |
|
|
|
|
|
// function updateFormValues(sums) { |
|
|
|
|
|
// // 物料合计与数量合计没有在sums中直接给出,这里假设它们需要单独处理或已存在于页面其他部分 |
|
|
|
|
|
// $("#enterprise_add").val(sums.enterprise); |
|
|
|
|
|
// $("#enterpriseSum_add").val(sums.enterpriseSum); |
|
|
|
|
|
// |
|
|
|
|
|
// // 更新不含税单价和总价 |
|
|
|
|
|
// $("#noRmb_add").val(sums.currencies.noRmb.single); |
|
|
|
|
|
// $("#noRmbSum_add").val(sums.currencies.noRmb.total); |
|
|
|
|
|
// |
|
|
|
|
|
// $("#rmb_add").val(sums.currencies.rmb.single); |
|
|
|
|
|
// $("#rmbSum_add").val(sums.currencies.rmb.total); |
|
|
|
|
|
// |
|
|
|
|
|
// $("#noUsd_add").val(sums.currencies.noUsd.single); |
|
|
|
|
|
// $("#noUsdSum_add").val(sums.currencies.noUsd.total); |
|
|
|
|
|
// |
|
|
|
|
|
// $("#usd_add").val(sums.currencies.usd.single); |
|
|
|
|
|
// $("#usdSum_add").val(sums.currencies.usd.total); |
|
|
|
|
|
// } |
|
|
|
|
|
// $(document).ready(function() { |
|
|
|
|
|
// // 监听货币选项变化 |
|
|
|
|
|
// $("#commonCurrency_add").on("change", function() { |
|
|
|
|
|
// var isEditable = $(this).val() === "1"; |
|
|
|
|
|
// var fieldName = ""; |
|
|
|
|
|
// var materialColumnCells = $('#bootstrap-sub-table-quoteChild tbody tr td [field=" '+ fieldName+' "]'); |
|
|
|
|
|
// // 根据是否可编辑,添加或移除xEditable |
|
|
|
|
|
// materialColumnCells.each(function() { |
|
|
|
|
|
// var cell = $(this); |
|
|
|
|
|
// var currentValue = cell.text().trim(); // 获取当前单元格的值 |
|
|
|
|
|
// |
|
|
|
|
|
// if (isEditable) { |
|
|
|
|
|
// // 如果允许编辑且尚未添加xEditable |
|
|
|
|
|
// if (!cell.hasClass('editable')) { |
|
|
|
|
|
// cell.addClass('editable'); // 添加标记类,以便跟踪状态 |
|
|
|
|
|
// cell.editable({ |
|
|
|
|
|
// type: 'text', |
|
|
|
|
|
// pk: cell.closest('tr').data('id'), // 假设每行有唯一ID |
|
|
|
|
|
// title: '物料的数量', |
|
|
|
|
|
// validate: function(value) { |
|
|
|
|
|
// if (!value) return '金额不能为空'; |
|
|
|
|
|
// if (isNaN(value)) return '金额必须为数字'; |
|
|
|
|
|
// return true; |
|
|
|
|
|
// }, |
|
|
|
|
|
// success: function(response, newValue) { |
|
|
|
|
|
// // 成功后的回调,这里可以根据需要处理服务器响应 |
|
|
|
|
|
// } |
|
|
|
|
|
// }); |
|
|
|
|
|
// } |
|
|
|
|
|
// } else { |
|
|
|
|
|
// // 如果不允许编辑且已添加了xEditable |
|
|
|
|
|
// if (cell.hasClass('editable')) { |
|
|
|
|
|
// cell.removeClass('editable'); |
|
|
|
|
|
// // 这里简化处理,实际中可能需要更复杂的逻辑来销毁xEditable实例 |
|
|
|
|
|
// cell.off('.editable'); // 移除xEditable绑定的事件 |
|
|
|
|
|
// cell.text(currentValue); // 还原原始文本 |
|
|
|
|
|
// } |
|
|
|
|
|
// } |
|
|
|
|
|
// }); |
|
|
|
|
|
// }); |
|
|
|
|
|
// |
|
|
|
|
|
// // 初始化时触发一次,根据默认状态设置可编辑性 |
|
|
|
|
|
// $("#commonCurrency_add").trigger("change"); |
|
|
|
|
|
// }); |
|
|
function getTotalAmount() { |
|
|
function getTotalAmount() { |
|
|
// 获取表格数据 |
|
|
var getData = $("#bootstrap-sub-table-quoteChild").bootstrapTable('getData'); |
|
|
const data = $("#bootstrap-sub-table-quoteChild").bootstrapTable('getData', true); |
|
|
var enterprise = 0; |
|
|
// 初始化汇总对象,减少代码重复并提高清晰度 |
|
|
var enterpriseSum = 0; |
|
|
const sums = { |
|
|
var noRmb = 0; |
|
|
enterprise: "", // 用于拼接物料名称和数量 |
|
|
var rmb = 0; |
|
|
enterpriseSum: 0, // 物料总数量 |
|
|
var noRmbSum = 0; |
|
|
currencies: { |
|
|
var rmbSum = 0; |
|
|
noRmb: { total: 0, single: 0 }, // 非人民币数量与总金额 |
|
|
var noUsd = 0; |
|
|
rmb: { total: 0, single: 0 }, // 人民币 |
|
|
var usd = 0; |
|
|
noUsd: { total: 0, single: 0 }, // 非美元 |
|
|
var noUsdSum = 0; |
|
|
usd: { total: 0, single: 0 } // 美元 |
|
|
var usdSum = 0; |
|
|
} |
|
|
|
|
|
}; |
|
|
|
|
|
// 遍历数据进行计算 |
|
|
|
|
|
for (let i = 0; i < data.length; i++) { |
|
|
|
|
|
const item = data[i]; |
|
|
|
|
|
// 拼接物料信息 |
|
|
|
|
|
sums.enterprise += "" + item.materialName + ": 数量 : " + item.materialNum; |
|
|
|
|
|
sums.enterpriseSum += parseFloat(item.materialNum); // 累加物料数量 |
|
|
|
|
|
// 分别累加各货币的单个金额和总金额 |
|
|
|
|
|
['noRmb', 'rmb', 'noUsd', 'usd'].forEach(currency => { |
|
|
|
|
|
sums.currencies[currency].single += parseFloat(item['material' + [currency] ]); |
|
|
|
|
|
sums.currencies[currency].total += parseFloat(item['material' + [currency] + 'Sum']); |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
|
|
|
updateFormValues(sums); |
|
|
|
|
|
} |
|
|
|
|
|
function updateFormValues(sums) { |
|
|
|
|
|
// 物料合计与数量合计没有在sums中直接给出,这里假设它们需要单独处理或已存在于页面其他部分 |
|
|
|
|
|
$("#enterprise_add").val(sums.enterprise); |
|
|
|
|
|
$("#enterpriseSum_add").val(sums.enterpriseSum); |
|
|
|
|
|
|
|
|
|
|
|
// 更新不含税单价和总价 |
|
|
// 计算企业数量和物料数量总和 |
|
|
$("#noRmb_add").val(sums.currencies.noRmb.single); |
|
|
enterprise = getData.length; // 直接获取数据长度 |
|
|
$("#noRmbSum_add").val(sums.currencies.noRmb.total); |
|
|
enterpriseSum = getData.reduce((sum, item) => sum + (parseInt(item.materialNum) || 0), 0); |
|
|
|
|
|
|
|
|
$("#rmb_add").val(sums.currencies.rmb.single); |
|
|
// 先累加数值,toFixed在累加后应用以避免精度损失 |
|
|
$("#rmbSum_add").val(sums.currencies.rmb.total); |
|
|
for (let i = 0; i < getData.length; i++) { |
|
|
|
|
|
noRmb += parseFloat(getData[i].materialNoRmb) || 0; |
|
|
|
|
|
rmb += parseFloat(getData[i].materialRmb) || 0; |
|
|
|
|
|
noRmbSum += parseFloat(getData[i].materialNoRmbSum) || 0; |
|
|
|
|
|
rmbSum += parseFloat(getData[i].materialRmbSum) || 0; |
|
|
|
|
|
noUsd += parseFloat(getData[i].materialNoUsd) || 0; |
|
|
|
|
|
usd += parseFloat(getData[i].materialUsd) || 0; |
|
|
|
|
|
noUsdSum += parseFloat(getData[i].materialNoUsdSum) || 0; |
|
|
|
|
|
usdSum += parseFloat(getData[i].materialUsdSum) || 0; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
$("#noUsd_add").val(sums.currencies.noUsd.single); |
|
|
// 将累加的结果格式化为两位小数 |
|
|
$("#noUsdSum_add").val(sums.currencies.noUsd.total); |
|
|
noRmb = noRmb.toFixed(2); |
|
|
|
|
|
rmb = rmb.toFixed(2); |
|
|
|
|
|
noRmbSum = noRmbSum.toFixed(2); |
|
|
|
|
|
rmbSum = rmbSum.toFixed(2); |
|
|
|
|
|
noUsd = noUsd.toFixed(2); |
|
|
|
|
|
usd = usd.toFixed(2); |
|
|
|
|
|
noUsdSum = noUsdSum.toFixed(2); |
|
|
|
|
|
usdSum = usdSum.toFixed(2); |
|
|
|
|
|
|
|
|
$("#usd_add").val(sums.currencies.usd.single); |
|
|
// 设置表单输入值 |
|
|
$("#usdSum_add").val(sums.currencies.usd.total); |
|
|
$("input[name='enterprise']").val(enterprise); |
|
|
|
|
|
$("input[name='enterpriseSum']").val(enterpriseSum); |
|
|
|
|
|
$("input[name='noRmb']").val(noRmb); |
|
|
|
|
|
$("input[name='noRmbSum']").val(noRmbSum); |
|
|
|
|
|
$("input[name='rmb']").val(rmb); |
|
|
|
|
|
$("input[name='rmbSum']").val(rmbSum); |
|
|
|
|
|
$("input[name='noUsd']").val(noUsd); |
|
|
|
|
|
$("input[name='noUsdSum']").val(noUsdSum); |
|
|
|
|
|
$("input[name='usd']").val(usd); |
|
|
|
|
|
$("input[name='usdSum']").val(usdSum); |
|
|
} |
|
|
} |
|
|
$(document).ready(function() { |
|
|
|
|
|
// 监听货币选项变化 |
|
|
|
|
|
$("#commonCurrency_add").on("change", function() { |
|
|
|
|
|
var isEditable = $(this).val() === "1"; |
|
|
|
|
|
var fieldName = ""; |
|
|
|
|
|
var materialColumnCells = $('#bootstrap-sub-table-quoteChild tbody tr td [field=" '+ fieldName+' "]'); |
|
|
|
|
|
// 根据是否可编辑,添加或移除xEditable |
|
|
|
|
|
materialColumnCells.each(function() { |
|
|
|
|
|
var cell = $(this); |
|
|
|
|
|
var currentValue = cell.text().trim(); // 获取当前单元格的值 |
|
|
|
|
|
|
|
|
|
|
|
if (isEditable) { |
|
|
|
|
|
// 如果允许编辑且尚未添加xEditable |
|
|
|
|
|
if (!cell.hasClass('editable')) { |
|
|
|
|
|
cell.addClass('editable'); // 添加标记类,以便跟踪状态 |
|
|
|
|
|
cell.editable({ |
|
|
|
|
|
type: 'text', |
|
|
|
|
|
pk: cell.closest('tr').data('id'), // 假设每行有唯一ID |
|
|
|
|
|
title: '物料的数量', |
|
|
|
|
|
validate: function(value) { |
|
|
|
|
|
if (!value) return '金额不能为空'; |
|
|
|
|
|
if (isNaN(value)) return '金额必须为数字'; |
|
|
|
|
|
return true; |
|
|
|
|
|
}, |
|
|
|
|
|
success: function(response, newValue) { |
|
|
|
|
|
// 成功后的回调,这里可以根据需要处理服务器响应 |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
// 如果不允许编辑且已添加了xEditable |
|
|
|
|
|
if (cell.hasClass('editable')) { |
|
|
|
|
|
cell.removeClass('editable'); |
|
|
|
|
|
// 这里简化处理,实际中可能需要更复杂的逻辑来销毁xEditable实例 |
|
|
|
|
|
cell.off('.editable'); // 移除xEditable绑定的事件 |
|
|
|
|
|
cell.text(currentValue); // 还原原始文本 |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
// 初始化时触发一次,根据默认状态设置可编辑性 |
|
|
|
|
|
$("#commonCurrency_add").trigger("change"); |
|
|
|
|
|
}); |
|
|
|
|
|
</script> |
|
|
</script> |
|
|
</body> |
|
|
</body> |
|
|
</html> |
|
|
</html> |