var table = "erp_returnorder"; var childTable = "erp_returnorder_dtl"; var sysid = getQueryVariable("sysid"); var $form = $("#iform"); var $main = $form.find(".main"); var $warehouse = $main.find(`#${table}_warehouse_id`); var $supplier = $main.find(`#${table}_supplier_id`); var $contract = $main.find(`#${table}_related_ordernum`); var $isContract = $("input[field='is_contract'][value='1']"); var relatedName = ""; var formData = window.initItems; function initData() { LoadData(); BindFunc(); } // 加载数据 function LoadData() { if (window.taskid === '') { loadBaseInfo(); setTimeout(function () { $warehouse.find("option:eq(0)").prop("selected", true).trigger("chosen:updated"); loadSupplier($warehouse.val()); }, 1000) } else { formData.createtime = JsonDateToDate(formData.createtime).Format('yyyy-MM-dd'); formData.happen_time = JsonDateToDate(formData.happen_time).Format('yyyy-MM-dd'); $("#erp_returnorder_createtime").val(formData.createtime); $("#erp_returnorder_happen_time").val(formData.happen_time); loadSupplier(formData.warehouse_id, function () { $supplier.val(formData.supplier_id).trigger("chosen:updated"); }); loadContract(formData.supplier_id, function () { $contract.val(formData.related_ordernum).trigger("chosen:updated"); }); } changeRelatedName(); } // 绑定事件 function BindFunc() { setTimeout(function () { bindDropDownTitle($warehouse.attr("id")); }, 1000) // 选择仓库事件 $warehouse.change(function () { bindDropDownTitle(this.id); loadSupplier(this.value); }) // 选择供应商事件 $supplier.change(function () { bindDropDownTitle(this.id); loadContract(this.value); }) // 选择合同事件 $contract.change(function () { bindDropDownTitle(this.id); //清空物品明细 $("#girdtable tr.body").remove(); $(".subtradd_js").click(); //loadMaterial(this.value); }) // 是否关联合同 $main.find("input[field='is_contract']").change(function () { loadContract($supplier.val()); changeRelatedName() }) BindChildFunc($("#girdtable")); function bindDropDownTitle(id) { var $drown = $(`#${id}_chosen`); var text = $drown.find("span").text(); $drown.attr("title", text); } } function BindChildFunc($sel) { //打开物料选择 $sel.find(`input[name="${childTable}.materielinfo_code"]`).bind('click', function (i, r) { this.setAttribute("autocomplete", "off");//移除自动提示 getmaterielinfo(this) }); //计算数量价格 $sel.find(`input[name='${childTable}.return_count'],input[name='${childTable}.price_tax']`).bind('blur', function (i, r) { var $row = $(this).closest('tr'); computeAmount($row) }); $sel.find(`select[name='${childTable}.taxrate']`).bind('change', function (i, r) { var $row = $(this).closest('tr'); computeAmount($row) }); } var selectedTd = null; //物品选择 var getmaterielinfo = function (obj) { var warehouse_id = $warehouse.val(); if (!warehouse_id) { parent.layer.alert('请选择仓库', { icon: 5 }); return; } var supplier_id = $supplier.val(); if (!supplier_id) { parent.layer.alert('请选择供应商', { icon: 5 }); return; } var contract_id = $contract.val(); if (!contract_id) { parent.layer.alert('请选择' + relatedName, { icon: 5 }); return; } selectedTd = obj; layer.open({ type: 2, title: '资源库', shadeClose: true, shade: 0.4, area: ['90%', '90%'], content: `/Article/ReturnOfMaterial?WareHouseId=${warehouse_id}&supplierId=${supplier_id}&contractCode=${contract_id}&isContract=${$isContract.prop("checked")}` }); } // 选中物品明细 var setReturnMaterialInfo = function (entity) { var isRepeat = false;// 是否重复添加 $(`input[name="${childTable}.materielinfo_code"]`).each(function (i, input) { if (input.value.length > 0 && input.value == entity.materielinfo_code) { isRepeat = true; layer.alert("该物品" + entity.material_name + "(" + entity.specification +")已存在明细中,无需重复添加"); } }) if (selectedTd != null && !isRepeat) { var $tr = $(selectedTd).closest("tr"); BindData($tr, entity); $tr.find("[field='taxrate']").trigger("chosen:updated"); computeAmount($tr); setInputTitle($tr); layer.closeAll(); } } // 初次加载页面事件 function loadBaseInfo() { Ajax("/Erp_ReturnOrder/getBaseData", { sysid: sysid }, success, error) function success(data) { data.createtime = JsonDateToDate(data.createtime).Format('yyyy-MM-dd'); data.happen_time = JsonDateToDate(data.happen_time).Format('yyyy-MM-dd'); data.title = `退货单(${data.CurrentUserName})`; BindData($main, data); $(`input[field='is_contract'][value='${data.is_contract}']`).prop("checked", true); } function error(msg) { console.log(msg) } } // 加载供应商列表 function loadSupplier(warehouseId, callback) { $supplier.empty(); $contract.empty(); Ajax("/Erp_ReturnOrder/GetSupplierByWarehouse", { warehouseId }, success); function success(data) { bindDropDown($supplier, data, callback); } } // 加载合同列表 function loadContract(supplieId, callback) { $contract.empty(); Ajax("/Erp_ReturnOrder/GetContractByWarehouseSupplier", { warehouseId: $warehouse.val(), supplieId, isContract: $isContract.prop("checked")}, success); function success(data) { bindDropDown($contract, data, callback); } } // 加载物料列表 function loadMaterial(contractCode) { Ajax("/Erp_ReturnOrder/GetEffectiveInorderDtlList", { WareHouseId: $warehouse.val(), supplierId: $supplier.val(), contractCode }, success); function success(data) { BindMaterial(data); } } createMethod = function ($row) { BindChildFunc($row) } deleteMethod = function () { computeTotalPrice(); } SaveCallback = SubmitCallback = function (data) { if (!data.Result && data.Remark) { var obj = JSON.parse(data.Remark); var $row = $("#girdtable").find(`input[field='materielinfo_code'][title='${obj.materielinfo_code}']`).closest("tr"); BindData($row, obj); } } // 绑定物料列表 function BindMaterial(list) { if (!list || list.length == 0) return; var $trs = renderGirdtableByData($children, list); $(".grid").empty().append($trs); setPowerChild(); page.bind(); BindChildFunc($trs); computeTotalPrice(); setInputTitle($trs); } // 绑定业务数据 function BindData($sel, data) { if (!data) return; $sel.find("input,select").each(function (i, input) { var field = input.getAttribute("field"); if (isEmpty(data[field])) return; if (input.type == 'radio') { $main.find('input[field="' + field + '"][value="' + data[field] + '"]').prop("checked", true); } else { input.value = data[field]; } }) } // 绑定下拉列表 function bindDropDown($sel, options, callback) { $sel.empty(); var str = options.map(item => ``); $sel.append(str); $sel.val(""); $sel.trigger("chosen:updated"); if (typeof callback === "function") callback() } //计算小计 function computeAmount($row) { var count = $row.find(`input[name='${childTable}.return_count']`).val(); var price_tax = $row.find(`input[name='${childTable}.price_tax']`).val(); var taxrate = $row.find(`select[name='${childTable}.taxrate']`).val(); count = parseFloat(count) || 0; price_tax = parseFloat(price_tax) || 0; taxrate = parseFloat(taxrate) || 0; taxrate = accDiv(taxrate, 100); // 含税小计 var amount_tax = accMul(parseFloat(count), parseFloat(price_tax)); $row.find(`input[name='${childTable}.amount_tax']`).val(amount_tax); // 不含税小计 var amount_notax = computeTaxrate(amount_tax, taxrate); $row.find(`input[name='${childTable}.amount_notax']`).val(amount_notax); // 不含税单价 var price_notax = count == 0 ? price_tax : accDiv(amount_notax, count); $row.find(`input[name='${childTable}.price_notax']`).val(price_notax); computeTotalPrice(); } //计算总金额 function computeTotalPrice() { var totalPrice = 0; $(`input[name='${childTable}.amount_tax']`).each(function (i, item) { var price = parseFloat(item.value); totalPrice = accAdd(totalPrice, price); }) if (isNaN(totalPrice)) totalPrice = 0; $(`#${table}_money`).val(totalPrice); } // 发送请求 function Ajax(url, data, success, error, type) { type = type || "get"; $.ajax({ url: url, data: data, async: false, cache: false, type: type, dataType: "json", success: function (data) { success(data) }, error: function (msg) { if (typeof error === "function") error(msg) } }); } //获取href里面的参数 function getQueryVariable (parameter) { var query = window.location.search.substring(1); var vars = query.split("&"); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split("="); if (pair[0] === parameter) { return pair[1]; } } return ""; } // 计算税率 function computeTaxrate(amount, taxrate) { //不含税合计 = 含税合计 - (含税合计 / (1 + 税率) * 税率) var step = accDiv(amount, accAdd(1, taxrate)); var result = accSub(amount, accMul(step, taxrate)); return result } // function setInputTitle($sel) { $sel.find("input").each(function (i, input) { input.setAttribute("title", input.value); }) $sel.find("select").each(function (i, input) { var text = $(input).find("option:selected").text(); input.setAttribute("title", text); }) $sel.find("input").bind("change", function () { this.setAttribute("title", this.value); }) $sel.find("select").bind("change", function () { var text = $(this).find("option:selected").text(); this.setAttribute("title", text); }) } function changeRelatedName() { var isContract = $isContract.prop("checked"); relatedName = isContract ? "合同单号" : "采购订单号"; $("#erp_returnorder_related_ordernum").parent().prev().text(relatedName); } function isEmpty(value) { return typeof value === "undefined" || typeof value === "null" || value === ""; } /** * 乘法 * @param arg1 * @param arg2 * @returns {Number} */ function accMul(arg1, arg2) { var m = 0, s1 = arg1.toString(), s2 = arg2.toString(); try { m += s1.split(".")[1].length } catch (e) { } try { m += s2.split(".")[1].length } catch (e) { } return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m) } /** * 加法 * @param arg1 * @param arg2 * @returns {Number} */ function accAdd(arg1, arg2) { var r1, r2, m, c; try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 } try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 } c = Math.abs(r1 - r2); m = Math.pow(10, Math.max(r1, r2)) if (c > 0) { var cm = Math.pow(10, c); if (r1 > r2) { arg1 = Number(arg1.toString().replace(".", "")); arg2 = Number(arg2.toString().replace(".", "")) * cm; } else { arg1 = Number(arg1.toString().replace(".", "")) * cm; arg2 = Number(arg2.toString().replace(".", "")); } } else { arg1 = Number(arg1.toString().replace(".", "")); arg2 = Number(arg2.toString().replace(".", "")); } return (arg1 + arg2) / m } /** * 减法 * @param arg1 * @param arg2 * @returns */ function accSub(arg1, arg2) { var r1, r2, m, n; try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 } try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 } m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度 n = (r1 >= r2) ? r1 : r2; return ((arg1 * m - arg2 * m) / m).toFixed(n); } /** * 除法 * @param arg1 * @param arg2 * @returns {Number} */ function accDiv(arg1, arg2) { var t1 = 0, t2 = 0, r1, r2; try { t1 = arg1.toString().split(".")[1].length } catch (e) { } try { t2 = arg2.toString().split(".")[1].length } catch (e) { } with (Math) { r1 = Number(arg1.toString().replace(".", "")) r2 = Number(arg2.toString().replace(".", "")) return (r1 / r2) * pow(10, t2 - t1); } }