Browse Source
修改添加采购订单页面,以选择采购计划单号改为已供应商 新增用于测试采购订单审核前端页面,按照新版prd调整 修改采购订单前端列表页面:新增冻结最右侧一列;操作栏调整为统一样式,表头调整为统一样式;新增测试 打开采购订单审核页面前端方法和按钮 采购订单Controller层新增 测试打开采购订单审核页面后端接口;新增 采购订单审核页面采购信息列表后端接口 采购订单子表新增 根据采购订单号查询采购订单子表后端接口dev
liuxiaoxu
6 days ago
7 changed files with 242 additions and 564 deletions
@ -1,619 +1,230 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.w3.org/1999/xhtml"> |
|||
<head> |
|||
<th:block th:include="include :: header('采购主管审核')" /> |
|||
<th:block th:include="include :: select2-css" /> |
|||
<style> |
|||
.fixed-table-container { |
|||
border: 0px solid #ddd; |
|||
min-height: 110px; |
|||
} |
|||
</style> |
|||
<th:block th:include="include :: header('副总经理审核')" /> |
|||
</head> |
|||
<body class="white-bg"> |
|||
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> |
|||
<form class="form-horizontal m" id="form-purchaseOrder-fzjl" th:object="${formData}"> |
|||
<input name="purchaseOrderId" th:field="*{purchaseOrderId}" type="hidden"> |
|||
<input name="purchaseOrderCode" th:field="*{purchaseOrderCode}" type="hidden"> |
|||
<input name="taskId" th:field="*{taskId}" type="hidden"> |
|||
<input name="taskName" th:field="*{taskName}" type="hidden"> |
|||
<input name="instanceId" th:field="*{instanceId}" type="hidden"> |
|||
<input name="instanceType" th:field="*{instanceType}" type="hidden"> |
|||
<input type="hidden" name="p_COM_comment" /> |
|||
<div class="form-group" hidden="hidden"> |
|||
<label class="col-sm-6 control-label">申请人:</label> |
|||
<div class="col-sm-6"> |
|||
<input name="applyUser" th:field="*{applyUser}" class="form-control" type="text" disabled> |
|||
</div> |
|||
</div> |
|||
<div class="form-group" hidden="hidden"> |
|||
<label class="col-sm-6 control-label">申请时间:</label> |
|||
<div class="col-sm-6"> |
|||
<div class="input-group date"> |
|||
<input name="applyTime" th:value="${#dates.format(formData.applyTime, 'yyyy-MM-dd HH:mm')}" class="form-control" type="text" disabled> |
|||
<span class="input-group-addon" disabled><i class="fa fa-calendar"></i></span> |
|||
<form class="form form-horizontal m-t" id="form-purchaseOrder-fzjl" th:object="${purchaseOrder}"> |
|||
<!-- 已选择采购计划单号--> |
|||
<div class="container"> |
|||
<div class="row"> |
|||
<div class="col-12"> |
|||
<h3 class="mb-4">已选择采购计划单号:</h3> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="form-group" hidden="hidden"> |
|||
<label class="col-sm-6 control-label">标题:</label> |
|||
<div class="col-sm-6"> |
|||
<input name="title" th:field="*{applyTitle}" class="form-control" type="text" disabled> |
|||
</div> |
|||
</div> |
|||
<div class="col-xs-12"> |
|||
<label class="col-sm-4 control-label">已选择采购计划:</label> |
|||
<div class="col-sm-7"> |
|||
<input id="purchasePlanCodes" name="purchasePlanCode" class="form-control" type="text" disabled/> |
|||
|
|||
<div class="form-group row"> |
|||
<label for="purchasePlanCode" class="col-sm-2 control-label">已选择采购计划单号:</label> |
|||
<div class="col-sm-10"> |
|||
<input id="purchasePlanCode" name="purchasePlanCodes" th:field="*{purchasePlanCode}" class="form-control" type="text" readonly> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="container"> |
|||
<ul class="nav nav-tabs" role="tablist"> |
|||
<li role="presentation" ><a href="#supplierModel" aria-controls="supplierModel" role="tab" data-toggle="tab">按供应商展示</a></li> |
|||
<li role="presentation" class="active"><a href="#purchasePlanModel" aria-controls="purchasePlanModel" role="tab" data-toggle="tab">按采购计划展示</a></li> |
|||
</ul> |
|||
|
|||
<div class="tab-content"> |
|||
<div role="tabpanel" class="tab-pane " id="supplierModel"> |
|||
<div class="container" id="supplierMaterial"> |
|||
|
|||
</div> |
|||
<!-- 已选择供应商--> |
|||
<div class="container"> |
|||
<div class="row"> |
|||
<div class="col-12"> |
|||
<h3 class="mb-4">已选择供应商:</h3> |
|||
</div> |
|||
</div> |
|||
<div class="form-group row"> |
|||
<label for="supplierCode" class="col-sm-2 control-label">供应商ID:</label> |
|||
<div class="col-sm-2"> |
|||
<input id="supplierCode" th:field="*{supplierCode}" name="supplierCode" class="form-control" type="text" readonly> |
|||
</div> |
|||
<div role="tabpanel" class="tab-pane active" id="purchasePlanModel"> |
|||
<div class="container" id="purchasePlanMaterial"> |
|||
|
|||
</div> |
|||
<label for="supplierName" class="col-sm-2 control-label">供应商名称:</label> |
|||
<div class="col-sm-2"> |
|||
<input id="supplierName" th:field="*{supplierName}" name="supplierName" class="form-control" type="text" readonly> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!--公司收货信息--> |
|||
<div class="container"> |
|||
<div class="row"><h4 class="card-header">公司地址:</h4></div> |
|||
<div class="col-xs-6"> |
|||
<label for="stockNo" class="col-sm-6 col-form-label">仓库ID:</label> |
|||
<div class="col-sm-5"> |
|||
<select class="form-control" name="stockNo" id="stockNo" disabled ></select> |
|||
<div class="row"> |
|||
<div class="col-12"> |
|||
<h3 class="mb-4">公司收货信息:</h3> |
|||
</div> |
|||
</div> |
|||
<div class="col-xs-6"> |
|||
<label for="stockName" class="col-sm-6 col-form-label">仓库名称:</label> |
|||
<div class="col-sm-5"> |
|||
<input type="text" class="form-control" name="stockName" id="stockName" disabled/> |
|||
<div class="form-group row"> |
|||
|
|||
<label for="stockNo" class="col-sm-2 control-label">仓库ID:</label> |
|||
<div class="col-sm-2"> |
|||
<input id="stockNo" th:field="*{stockNo}" name="stockNo" class="form-control" type="text" readonly> |
|||
</div> |
|||
</div> |
|||
<div class="col-xs-6"> |
|||
<label for="stockContact" class="col-sm-6 col-form-label">收货人:</label> |
|||
<div class="col-sm-5"> |
|||
<input type="text" name="stockContact" class="form-control" id="stockContact" disabled /> |
|||
<label for="stockName" class="col-sm-2 control-label">仓库名称:</label> |
|||
<div class="col-sm-2"> |
|||
<input id="stockName" th:field="*{stockName}" name="stockName" class="form-control" type="text" readonly> |
|||
</div> |
|||
</div> |
|||
<div class="col-xs-6"> |
|||
<label for="stockPhone" class="col-sm-6 col-form-label">收货电话:</label> |
|||
<div class="col-sm-5"> |
|||
<input type="text" name="stockPhone" class="form-control" id="stockPhone" placeholder="请输入收货电话" disabled /> |
|||
|
|||
<div class="form-group row"> |
|||
<label for="receivePerson" class="col-sm-2 control-label">收货人:</label> |
|||
<div class="col-sm-2"> |
|||
<input id="receivePerson" th:field="*{receivePerson}" name="receivePerson" class="form-control" type="text" readonly> |
|||
</div> |
|||
</div> |
|||
<div class="col-xs-6"> |
|||
<label for="stockAddress" class="col-sm-6 col-form-label">详细地址:</label> |
|||
<div class="col-sm-5"> |
|||
<textarea class="form-control" name="stockAddress" id="stockAddress" disabled></textarea> |
|||
|
|||
<label for="receivePersonPhone" class="col-sm-2 control-label">收货电话:</label> |
|||
<div class="col-sm-2"> |
|||
<input id="receivePersonPhone" th:field="*{receivePersonPhone}" name="receivePersonPhone" class="form-control" type="text" readonly> |
|||
</div> |
|||
|
|||
<label for="receiveAddress" class="col-sm-2 control-label">收货地址:</label> |
|||
<div class="col-sm-2"> |
|||
<input id="receiveAddress" th:field="*{receiveAddress}" name="receiveAddress" class="form-control" type="text" readonly> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!--采购信息--> |
|||
<div class="container"> |
|||
<div class="row"><h4 class="card-header">订单合计:</h4></div> |
|||
<div class="col-xs-6"> |
|||
<label for="purchaseMaterialSum" class="col-sm-6 col-form-label">物料合计:</label> |
|||
<div class="col-sm-5"> |
|||
<input type="text" class="form-control" id="purchaseMaterialSum" disabled /> |
|||
</div> |
|||
</div> |
|||
<div class="col-xs-6"> |
|||
<label for="purchaseSum" class="col-sm-6 col-form-label">采购合计:</label> |
|||
<div class="col-sm-5"> |
|||
<input type="text" class="form-control" id="purchaseSum" disabled /> |
|||
</div> |
|||
</div> |
|||
<div class="col-xs-6"> |
|||
<label for="purchaseNoRmbSum" class="col-sm-5 col-form-label">不含税采购总价:</label> |
|||
<div class="col-sm-6"> |
|||
<input type="text" class="form-control" id="purchaseNoRmbSum" disabled /> |
|||
<div class="row"> |
|||
<div class="col-12"> |
|||
<h3 class="mb-4">采购信息:</h3> |
|||
</div> |
|||
</div> |
|||
<div class="col-xs-6"> |
|||
<label for="purchaseRmbSum" class="col-sm-5 col-form-label">含税采购总价:</label> |
|||
<div class="col-sm-6"> |
|||
<input type="text" class="form-control" id="purchaseRmbSum" disabled /> |
|||
<div class="form-group row"> |
|||
<div class="col-sm-12 select-table table-striped"> |
|||
<table id="purchaseChild-bootstrap-table"></table> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="form-group"> |
|||
<label class="col-sm-3 control-label is-required" for="fzjlVerifyApproved">审批意见:</label> |
|||
<div class="col-sm-6"> |
|||
<select name="p_B_fzjlVerifyApproved" id="fzjlVerifyApproved" class="form-control" required> |
|||
<option value=""></option> |
|||
<option value="true">同意</option> |
|||
<option value="false">拒绝</option> |
|||
</select> |
|||
</div> |
|||
</div> |
|||
<div class="form-group"> |
|||
<label class="col-sm-6 control-label">批注:</label> |
|||
<div class="col-sm-6"> |
|||
<textarea name="comment" class="form-control"></textarea> |
|||
</div> |
|||
</div> |
|||
|
|||
</form> |
|||
|
|||
|
|||
</div> |
|||
<th:block th:include="include :: footer" /> |
|||
<th:block th:include="include :: select2-js" /> |
|||
<script th:src="@{/js/activiti.js}"></script> |
|||
<script th:inline="javascript"> |
|||
var prefix = ctx + "purchase/purchaseOrder"; |
|||
var purchaseOrder = [[${formData}]]; |
|||
var purchaseOrder = [[${purchaseOrder}]]; |
|||
var materialTypeDatas = [[${@category.getChildByCode('materialType')}]]; |
|||
var auditStatusDatas = [[${@dict.getType('auditStatus')}]]; |
|||
var sysUnitClassDatas = [[${@dict.getType('sys_unit_class')}]]; |
|||
var processMethodDatas = [[${@dict.getType('processMethod')}]]; |
|||
var warehouseDeptDatas = [[${@dict.getType('warehouseDept')}]]; |
|||
var loginName = [[${@permission.getPrincipalProperty('loginName')}]]; |
|||
|
|||
|
|||
$("#form-purchaseOrder-fzjl").validate({focusCleanup: true}); |
|||
var purchasePlanChildList = []; |
|||
var purchasePlanCodes = []; |
|||
var formId = "form-purchaseOrder-fzjl"; |
|||
//根据物料物料数量添加物料分类表,自动生成类似的表单对象 |
|||
//初始根据采购计划单,涉及到物料做分类表 |
|||
//根据采购计划单,获取物料信息,自动生成物料的供应商分类表 |
|||
//获取表单的id; |
|||
var materialList = []; |
|||
var tableIdList = []; |
|||
var $supplierForm; |
|||
var tableDatas = []; |
|||
//获取采购计划单的物料信息 |
|||
// 假设qualityOrderCode已经定义或者可以通过某种方式获取到 |
|||
$(function() { |
|||
// 初始化时默认加载仓库ID列表 |
|||
// 假设purchaseOrderCode已经定义或者可以通过某种方式获取到 |
|||
var purchaseOrderCode = [[${formData.purchaseOrderCode}]]; // 这里需要实际赋值,比如从前端某个地方读取 |
|||
var purchaseOrderId = [[${formData.purchaseOrderId}]]; |
|||
loadWarehouseCodes(); |
|||
//物料合计 = 物料实际采购数合计,不含税总价,含税采购总价不为null的情况可以合计物料,否则跳过 |
|||
$("#purchaseMaterialSum").val(purchaseOrder.materialSum); |
|||
//采购数量合计 |
|||
$('#purchaseSum').val(purchaseOrder.materialSum); |
|||
//采购不含税总价 |
|||
$('#purchaseNoRmbSum').val(purchaseOrder.noRmbSum); |
|||
//采购含税总价 |
|||
$('#purchaseRmbSum').val(purchaseOrder.rmbSum); |
|||
// 初始化表格,假设purchasePlanChildList已定义并包含了需要处理的数据 |
|||
$.getJSON(prefix + "/editPurchaserOrder/" + purchaseOrderId, function(data) { |
|||
$("#purchasePlanCodes").val(data.data.purchasePlanCodes); |
|||
var datas = data.data.purchasePlanChildList; |
|||
purchasePlanChildList = datas; |
|||
var supplierCodes = data.data.supplierCodes; |
|||
var supplierMaterials = {}; |
|||
datas.forEach(function(item) { |
|||
var supplierCode = item.supplierCode; |
|||
var materialCode = item.materialCode; |
|||
// 如果供应商还没有在对象中,就创建一个新的对象 |
|||
if (!supplierMaterials[supplierCode]) {supplierMaterials[supplierCode] = {};} |
|||
// 如果该物料还没有在供应商的对象中,就添加它 |
|||
if (!supplierMaterials[supplierCode][materialCode]) { |
|||
supplierMaterials[supplierCode][materialCode] = { |
|||
...item, materialNum: 0 // 初始化数量为0 |
|||
}; |
|||
} |
|||
supplierMaterials[supplierCode][materialCode].materialNum += item.materialNum; |
|||
}); |
|||
for (var supplierCode in supplierMaterials) { |
|||
if (supplierMaterials.hasOwnProperty(supplierCode)) { |
|||
var supplierData = Object.values(supplierMaterials[supplierCode]); |
|||
createTableForSupplier(supplierCode, supplierData); |
|||
} |
|||
} |
|||
|
|||
//按照物料的维度查看采购订单信息 |
|||
// 初始化表格 |
|||
// 假设purchasePlanChildList已定义并包含了需要处理的数据 |
|||
//物料列表 |
|||
purchasePlanChildList.forEach(function (material, index) { |
|||
var tableId = 'materialCode-' + index; |
|||
var materialTable = "bootstrap-table_" + tableId; |
|||
tableIdList.push(tableId); |
|||
// 创建物料信息的容器 |
|||
var $tableWrapper = $('<div id="material-' + tableId + '""></div>'); |
|||
// 将整个物料信息容器添加到页面 |
|||
$('#purchasePlanMaterial').append($tableWrapper); |
|||
var uniqueSuppliers = []; |
|||
////如果物料相同,则添加供应商信息,并对比现在的关系采购计划关联单号是否有包含,没有添加。有则不添加 |
|||
material.purchaseOrderChildSupplierList.forEach(supplier => { |
|||
const key = `${supplier.supplierCode}_${supplier.materialCode}`; |
|||
if (!uniqueSuppliers.map(s => `${s.supplierCode}_${s.materialCode}`).includes(key)) { |
|||
uniqueSuppliers.push(supplier); |
|||
} |
|||
}); |
|||
// 添加关联销售订单号信息 |
|||
// 创建表格的容器 |
|||
var $headerDiv = |
|||
$('<div class="row">' + |
|||
'<div class="col-xs-12">' + |
|||
'<h3>' + |
|||
'<span><strong>物料 ' + (index + 1) + ': </strong><strong>关联订单号: </strong></span><span class="correlationCodes" id="correlateion-' + tableId + ' ">' + material.purchasePlanCorrelationCode + '</span>' + |
|||
'</h3>' + |
|||
'<div class="col-sm-12">' + |
|||
'<table class="table-materialCode" id="' + materialTable + '">' + '<table/>' + |
|||
'</div>' + |
|||
'</div>' + |
|||
'</div>'); |
|||
$tableWrapper.append($headerDiv); |
|||
//创建物料库存容器 |
|||
var $stockWrapper = $('<div class="row"><div class="inventory-count " id=" inventory-count-' + tableId + '">'+ |
|||
'<span><strong>可用库存数:</strong></span>'+'<span id="stock-count-' + tableId + '">10 </span>'+'<span>注:含其他订单待领取的库存,仅供参考,请以实际为准.</span>'+ |
|||
'</div></div>'); |
|||
$tableWrapper.append($stockWrapper); |
|||
var materialObj = { |
|||
purchasePlanCode: material.purchasePlanCode, materialCode: material.materialCode, |
|||
photoUrl: material.materialPhotourl, materialName: material.materialName, |
|||
materialType: material.materialType, describe: material.materialDescribe, |
|||
brand: material.materiaBrand, processMethod: material.materialProcessMethod, |
|||
unit: material.materialUnit, warehouseDept:material.warehouseDept, |
|||
materialNum: material.materialNum, |
|||
}; |
|||
var materialData = [materialObj]; |
|||
materialList.push(material); |
|||
tables(materialTable, materialData); |
|||
|
|||
var supplierCode = material.supplierCode; |
|||
if (supplierCodes.includes(supplierCode)) { |
|||
var supplierInfo = $('#supplierInfo_' + tableId); |
|||
if (supplierInfo.length === 0) { |
|||
var $supplierInfo = $('<div class="supplier-card " style="height: 20px;" id="supplierInfo_' + tableId + '"></div>'); |
|||
$tableWrapper.append($supplierInfo); |
|||
} |
|||
var supplierData = material.purchaseOrderChildSupplierList; |
|||
supplierData.forEach(function (supplier) { |
|||
var supplierCode = supplier.supplierCode; |
|||
}); |
|||
} |
|||
|
|||
//如果物料下的供应商为空,则不需要添加供应商信息,并在容器中添加一个提示信息:暂无供应商信息,请先添加供应商信息。 |
|||
if (material.purchaseOrderChildSupplierList.length <= 0) { |
|||
var $noSupplierDiv = $('<div class="no-supplier">暂无供应商信息,请先添加供应商信息。</div>'); |
|||
$tableWrapper.append($noSupplierDiv); |
|||
} |
|||
else{ |
|||
// 循环处理每个供应商的信息 |
|||
uniqueSuppliers.forEach(function (supplier, supplierIndex) { |
|||
//如果供应商相同,则不需要再次添加供应商信息 |
|||
// 卡片样式容器,用于包裹每个供应商的信息 |
|||
// 构建供应商信息头部 |
|||
var $headerContent = |
|||
$( '<div class="card-header supplier_card" id = "supplier-' + tableId + '_' + supplierIndex + '" xmlns="http://www.w3.org/1999/html">' + |
|||
'<div class="row">' + |
|||
'<div class="crad-text">'+ |
|||
'<span><strong>供应商 ' + (supplierIndex + 1) + ': </strong></span>' + '<span class="supplierCode">' + supplier.supplierCode + '</span>' + '-' + '<span class="supplierName">' + supplier.supplierName + '</span>' + |
|||
'-最新不含税采购价: ' +'<span id="supplierMaterialNoRmb-' + tableId + '" class="supplierMaterialNoRmb"></strong>' + supplier.materialRealNoRmb +'</strong></span>'+ |
|||
' RMB 最新含税采购价: ' +'<span class="supplierMaterialRmb"><strong>' + supplier.materialRealRmb + '</strong> RMB </span>' + |
|||
'<span class="supplierPurchasePlanCode" hidden="hidden" >' + material.planCodes + '</span>' + |
|||
'<span class="supplierCorrelationCode" hidden="hidden" >' + material.correlationCode + '</span>' + |
|||
'<span class="supplierPurchaseQuoteCode" hidden="hidden" >' + supplier.purchaseQuoteCode + '</span>' + |
|||
'</div>' + |
|||
'</div>' + |
|||
'<div class="row">' + |
|||
'<div class="col-xs-6 form-group">' + |
|||
'<label class="col-sm-4"> 实际采购数: </label>' + |
|||
'<div class ="col-sm-6">' + |
|||
'<input type="text" name="materialNum" value="' + supplier.materialRealNum + '" class="form-control supplierMaterialNum actualPurchaseNum" id="actualPurchaseNum_' + tableId + '" disabled>' + |
|||
'</div>' + |
|||
'</div>' + |
|||
'<div class="col-xs-6 form-group">' + |
|||
'<label class="col-sm-4">计划交付时间: </label>' + |
|||
'<div class ="col-sm-6">' + |
|||
'<div class="input-group date"> ' + |
|||
'<input type="text" name="deliveryTime" value="' + supplier.deliveryTime + '" text="' + supplier.deliveryTime + '" class="form-control supplierDeliveryTime" id="deliveryTime_' + tableId + '" disabled >' + |
|||
'<span class="input-group-addon"><i class="fa fa-calendar"></i></span>' + |
|||
'</div> ' + |
|||
'</div>' + |
|||
'</div>' + |
|||
'</div>' + |
|||
'</div>'); |
|||
if (supplier.supplierCode != undefined && supplier.supplierCode != '' && supplier.supplierCode != null) { |
|||
$supplierInfo.append($headerContent); |
|||
// 构建供应商信息下的输入表单 |
|||
$supplierForm = $('<div class="card-body" id="card_body_' + tableId + '"></div>'); |
|||
// 实际采购数输入框 |
|||
// 其他表单项可以根据需要类似添加 |
|||
$supplierInfo.append($supplierForm); |
|||
}else{ |
|||
var $noSupplierDiv = $('<div class="no-supplier">暂无供应商信息,请先添加供应商信息。</div>'); |
|||
$supplierInfo.append($noSupplierDiv); |
|||
} |
|||
}); |
|||
$tableWrapper.append($supplierInfo); |
|||
} |
|||
tableSetup($supplierInfo, tableId); |
|||
}); |
|||
// 给实际采购数的输入框绑定事件处理器 |
|||
$('.actualPurchaseNum').off('keyup').on('keyup', function(event) { |
|||
if (event.keyCode === 13) { |
|||
var $supplierInfo = $(this).closest('.supplier-card'); |
|||
var $supplierCard = $(this).closest('.supplier_card'); |
|||
var crad = $supplierInfo.attr('id'); |
|||
var tableId = crad.split('_')[1]; |
|||
var purchaseNum = parseFloat($(this).val()) || 0; |
|||
var noRmbPrice = parseFloat($(this).find('.supplierMaterialNoRmb').text().trim()) || 0; |
|||
var rmbPrice = parseFloat($(this).find('.supplierMaterialRmb').text().trim()) || 0; |
|||
var materialIndex = tableId.split('-')[1]; |
|||
// 确保实际采购数不超过计划采购数 |
|||
var maxPurchaseNum = parseFloat(materialList[materialIndex].materialNum); |
|||
// if (purchaseNum > maxPurchaseNum) { |
|||
// purchaseNum = maxPurchaseNum; |
|||
// $(this).val(maxPurchaseNum); |
|||
// } |
|||
//物料所有的供应商的采购数加起来超出了materialList[materialIndex].materialNum,就提示超出计划采购数 |
|||
let actualPurchaseNum = 0; |
|||
$supplierCard.find('.actualPurchaseNum').each(function () { |
|||
actualPurchaseNum += parseInt($(this).val()) || 0; |
|||
}); |
|||
if (actualPurchaseNum > maxPurchaseNum) { |
|||
actualPurchaseNum - maxPurchaseNum; |
|||
} |
|||
// 更新供应商采购总价 |
|||
$supplierInfo.find('.supplierPurchaseTotal').val(parseFloat(Number(purchaseNum * noRmbPrice).toFixed(2))); |
|||
if (rmbPrice) { |
|||
$supplierInfo.find('.supplierPurchaseTotalRmb').val(parseFloat(Number(purchaseNum * rmbPrice).toFixed(2))); |
|||
} |
|||
function submitHandler() { |
|||
if ($.validate.form()) { |
|||
if ($('textarea[name="comment"]').val()) { |
|||
$('input[name="p_COM_comment"]').val($('textarea[name="comment"]').val()); |
|||
} |
|||
var taskId = [[${taskId}]]; |
|||
$.operate.save(prefix + "/complete/" + taskId, $('#form-purchaseOrder-fzjl').serialize()); |
|||
} |
|||
} |
|||
|
|||
|
|||
// 如果采购数量大于0,则显示供应商采购总价 |
|||
if (purchaseNum > 0) { |
|||
$supplierInfo.find('.supplierPurchaseTotal').removeClass('hidden'); |
|||
$supplierInfo.find('.supplierPurchaseTotalRmb').removeClass('hidden'); |
|||
} else { |
|||
// 否则隐藏供应商采购总价 |
|||
$supplierInfo.find('.supplierPurchaseTotal').addClass('hidden'); |
|||
$supplierInfo.find('.supplierPurchaseTotalRmb').addClass('hidden'); |
|||
} |
|||
|
|||
recalculateTotals(tableId); // 重新计算当前物料的合计 |
|||
} |
|||
}); |
|||
// 定义一个函数来重新计算当前物料的合计 |
|||
// 初始化总计 |
|||
purchasePlanChildList.forEach(function (material, index) {recalculateTotals('materialCode-' + index);}); |
|||
}); |
|||
}); |
|||
function createTableForSupplier(supplierCode, supplierData) { |
|||
var tableId = 'bootstrap-table-' + supplierCode.replace(/[^a-z0-9]/gi, '_').toLowerCase(); |
|||
tableDatas.push(tableId); |
|||
var $tableWrapper = $('<div class="table-responsive"></div>'); |
|||
// 确保supplierData至少有一条记录,并从中提取供应商详细信息 |
|||
var supplierInfo = supplierData.length > 0 ? supplierData[0] : {}; // 默认为空对象,以防数据不存在 |
|||
// 构建含有额外供应商信息的标题字符串 |
|||
var headerTitle = '供应商: ' + supplierCode + ' - ' + supplierInfo.supplierName; |
|||
var $header = $('<h4>' + headerTitle + '</h4>'); |
|||
var $table = $('<table id="' + tableId + '" class="table table-striped table-bordered"></table>'); |
|||
$table.bootstrapTable({ |
|||
data: supplierData, |
|||
columns: [ |
|||
{ checkbox: false, visible: false }, |
|||
{ title: '供应商ID', field: 'supplierCode', visible: false }, |
|||
{ title: '料号', field: 'materialCode' }, |
|||
{ title: '图片', field: 'materialPhotoUrl', formatter: function(value, row, index) { |
|||
return $.table.imageView(value); |
|||
} |
|||
|
|||
$(function() { |
|||
var options = { |
|||
id: "purchaseChild-bootstrap-table", |
|||
url: prefix + "/selectOrderChildMaterialList", |
|||
queryParams: queryParams, |
|||
showSearch: false, |
|||
showRefresh: false, |
|||
showToggle: false, |
|||
showColumns:false, |
|||
modalName: "选择物料", |
|||
columns: [{checkbox: true}, |
|||
{ |
|||
title: '采购计划子表id', |
|||
field: 'purchasePlanChildId', |
|||
visible: false |
|||
}, |
|||
{ |
|||
title: '料号', |
|||
field: 'materialNo', |
|||
}, |
|||
{ title: '物料名称', field: 'materialName' }, |
|||
{ title: '物料类型', field: 'materialType', align: 'center', formatter: function(value, row, index) { |
|||
{ |
|||
title: '物料名称', |
|||
field: 'materialName', |
|||
}, |
|||
{ |
|||
title: '物料类型', |
|||
field: 'materialType', |
|||
formatter: function(value, row, index) { |
|||
return $.table.selectCategoryLabel(materialTypeDatas, value); |
|||
} |
|||
}, |
|||
{ title: '物料描述', field: 'materialDescribe' }, |
|||
{ title: '品牌', field: 'materialBrand' }, |
|||
{ title: '加工类型', field: 'materialProcessMethod', align: 'center', formatter: function(value, row, index) { |
|||
return $.table.selectDictLabel(processMethodDatas, value); |
|||
} |
|||
{ |
|||
title: '描述', |
|||
field: 'materialDescribe', |
|||
}, |
|||
{ title: '单位', field: 'materialUnit', align: 'center' }, |
|||
{ title: '入库部门', field: 'warehouseDept', align: 'center', formatter: function(value, row, index) { |
|||
return $.table.selectDictLabel(warehouseDeptDatas, value); |
|||
} |
|||
|
|||
{ |
|||
title: '品牌', |
|||
field: 'materialBrand', |
|||
}, |
|||
{ title: '计划采购数', field: 'materialNum' }, |
|||
{ title: '币种', field: '' }, |
|||
{ title: '不含税采购价', field: 'materialNoRmb' }, |
|||
{ title: '含税采购价', field: 'materialRmb' }, |
|||
{ title: '实际采购数', field: 'materialRealNum"' }, |
|||
{ title: '实际不含税采购金额', field: 'materialRealNoRmb' }, |
|||
{ title: '实际含税采购金额', field: 'materialRealRmb' }, |
|||
{ title: '已入库数', field: 'actualHasArrivedNum' }, |
|||
] |
|||
}); |
|||
$tableWrapper.append($header).append($table); |
|||
$('#supplierMaterial').append($tableWrapper); |
|||
} |
|||
// 新增函数:重新计算某物料的采购数量合计、不含税采购总价和含税采购总价 |
|||
function recalculateTotals(tableId) { |
|||
var $tableWrapper = $('#material-' + tableId); |
|||
var totalNoRmb = 0; |
|||
var totalRmb = 0; |
|||
var totalActualPurchase = 0; |
|||
var $suplierInfo = $tableWrapper.find('.supplier-card'); |
|||
//获取所有物料表中供应商列表数据,实际采购数合计,不含税总价,含税采购总价 |
|||
$suplierInfo.find('.supplier_card').each(function() { |
|||
let purchaseNum = parseFloat($(this).find('.actualPurchaseNum').val()) || 0; |
|||
let noRmbPrice = parseFloat($(this).find('.supplierMaterialNoRmb').text().trim()) || 0; |
|||
let rmbPrice = parseFloat($(this).find('.supplierMaterialRmb').text().trim()) || 0; |
|||
totalNoRmb += purchaseNum * noRmbPrice; |
|||
totalRmb += purchaseNum * rmbPrice; |
|||
totalActualPurchase = totalActualPurchase + purchaseNum; |
|||
}); |
|||
//物料的实际采购数合计 |
|||
$('#materialAmountSum_' + tableId).val(parseFloat(totalActualPurchase.toFixed(2))); |
|||
//物料的实际不含税采购总价: |
|||
$('#materialNoRmbSum_' + tableId).val(parseFloat(totalNoRmb.toFixed(2))); |
|||
//物料的实际含税总价: |
|||
$('#materialRmbSum_' + tableId).val(parseFloat(totalRmb.toFixed(2))); |
|||
// 采购物料合计 |
|||
materialActualPurchaseSum(); |
|||
} |
|||
function materialActualPurchaseSum(){ |
|||
var totalNoRmb = 0; |
|||
var totalRmb = 0; |
|||
var totalActualPurchase = 0; |
|||
var materialAmount = 0; |
|||
tableIdList.forEach(function (material, index) { |
|||
var tableId = tableIdList[index]; |
|||
var $tableWrapper = $('#material-' + tableId); |
|||
//采购合计 = 所有物料的采购数量合计 |
|||
//采购不含税总价 = 所有物料的不含税总价合计 |
|||
//采购含税总价 = 所有物料的含税总价合计 |
|||
//查询物料表下吗整合的物料的实际采购数合计,物料的实际不含税采购总价,物料的实际含税总价 |
|||
var supplierInfo = $tableWrapper.find('#supplierInfo_' + tableId ); |
|||
let purchaseNum = parseInt(supplierInfo.find('.actualPurchaseTotalSum').val()) || 0; |
|||
let noRmbPrice = parseFloat(supplierInfo.find('.actualPurchaseTotal').val()) || 0; |
|||
let rmbPrice = parseFloat(supplierInfo.find('.actualPurchaseTotalTax').val()) || 0; |
|||
if (purchaseNum > 0) { |
|||
materialAmount += 1; |
|||
} |
|||
totalActualPurchase += purchaseNum; |
|||
totalNoRmb += noRmbPrice; |
|||
totalRmb += rmbPrice; |
|||
}); |
|||
//物料合计 = 物料实际采购数合计,不含税总价,含税采购总价不为null的情况可以合计物料,否则跳过 |
|||
$("#purchaseMaterialSum").val(parseFloat(materialAmount.toFixed(2))); |
|||
//采购数量合计 |
|||
$('#purchaseSum').val(parseFloat(totalActualPurchase.toFixed(2))); |
|||
//采购不含税总价 |
|||
$('#purchaseNoRmbSum').val(parseFloat(totalNoRmb.toFixed(2))); |
|||
//采购含税总价 |
|||
$('#purchaseRmbSum').val(parseFloat(totalRmb.toFixed(2))); |
|||
} |
|||
function tableSetup(element, tableId) { |
|||
var $totalSection = $( |
|||
'<div class="card">' + |
|||
'<div class="card-body" class="supplierTotal_' + tableId + '">' + |
|||
'<div class="col-xs-4">' + |
|||
'<label for="actualPurchaseTotal" class="col-sm-5">实际采购数合计:</label>' + |
|||
'<div class="col-sm-6">' + |
|||
'<input type="number" name="materialAmountSum" class="form-control actualPurchaseTotalSum" id="materialAmountSum_' + tableId + '" disabled>' + |
|||
'</div>' + |
|||
'</div>' + |
|||
'<div class="col-xs-4">' + |
|||
'<label for="actualPurchaseTotal" class="col-sm-5">不含税采购总价:</label>' + |
|||
'<div class="col-sm-6">' + |
|||
'<input type="number" name="materialNoRmbSum" class="form-control actualPurchaseTotal" id="materialNoRmbSum_' + tableId + '" disabled>' + |
|||
'</div>' + |
|||
'</div>' + |
|||
'<div class="col-xs-4">' + |
|||
'<label for="actualPurchaseTotalTax" class="col-sm-5">含税采购总价:</label>' + |
|||
'<div class="col-sm-6">' + |
|||
'<input type="number" name="materialRmbSum" class="form-control actualPurchaseTotalTax" id="materialRmbSum_' + tableId + '" disabled>' + |
|||
'</div>' + |
|||
'</div>' + |
|||
'</div>'+ |
|||
'</div>'); |
|||
element.append($totalSection); |
|||
} |
|||
// 创建表格并添加到页面 |
|||
function tables(tableId, data) { |
|||
$('#' + tableId).bootstrapTable({ |
|||
showExport: false, |
|||
showFooter: false, |
|||
showSearch: false, |
|||
showRefresh: false, |
|||
showColumns: false, |
|||
showToggle: false, |
|||
data: data, |
|||
height: 70, |
|||
columns: [ |
|||
{checkbox: false}, |
|||
{title: '料号', field: 'materialCode'}, |
|||
{title: '图片', field: 'photoUrl', formatter: function (value, row, index) { |
|||
return $.table.imageView(value); |
|||
{ |
|||
title: '单位', |
|||
field: 'materialUnit', |
|||
formatter: function(value, row, index) { |
|||
return $.table.selectDictLabel(sysUnitClassDatas, value); |
|||
} |
|||
}, |
|||
{title: '物料名称', field: 'materialName'}, |
|||
{title: '物料类型', field: 'materialType', align: 'center', formatter: function (value, row, index) { |
|||
return $.table.selectCategoryLabel(materialTypeDatas, value); |
|||
} |
|||
{ |
|||
title: '型号', |
|||
field: 'materialModel', |
|||
}, |
|||
{title: '物料描述', field: 'describe'}, |
|||
{title: '品牌', field: 'brand'}, |
|||
{title: '加工类型', field: 'processMethod', align: 'center', formatter: function (value, row, index) { |
|||
{ |
|||
title: '加工方式', |
|||
field: 'materialProcessMethod', |
|||
formatter: function(value, row, index) { |
|||
return $.table.selectDictLabel(processMethodDatas, value); |
|||
} |
|||
}, |
|||
{title: '单位', field: 'unit', align: 'center', }, |
|||
{title: '入库部门', field: 'warehouseDept', align: 'center', formatter: function (value, row, index) { |
|||
return $.table.selectDictLabel(warehouseDeptDatas, value); |
|||
}}, |
|||
{title: '计划采购数', field: 'materialNum'}, |
|||
], |
|||
}); |
|||
} |
|||
|
|||
// 加载仓库Id列表函数 |
|||
$("#form-cgjl-edit").validate({focusCleanup: true}); |
|||
//open打开时,模态框foot下新增审核通过和审核拒绝按钮 |
|||
//获取仓库相关信息Select2,根据仓库ID查询仓库名称 |
|||
function loadWarehouseCodes() { |
|||
var url = ctx + 'stock/stockInfo/getAllWarehouseCode'; |
|||
$.ajax({ |
|||
type: 'GET', // 请求类型 |
|||
url: url, // 后端接口URL |
|||
dataType: 'json', // 预期服务器返回的数据类型 |
|||
success: function(data) { |
|||
if (data && Array.isArray(data)) { |
|||
var selectElement = $('#stockNo'); // 获取仓库编号下拉框元素 |
|||
selectElement.empty();// 清空下拉框现有选项 |
|||
$.each(data, function(index, item) { |
|||
selectElement.append('<option value="' + item.stockNO + '">' + item.stockNO + '</option>'); |
|||
}); // 遍历返回的数据,添加为下拉框的选项 |
|||
selectElement.val(purchaseOrder.stockNo).trigger('change'); |
|||
} else { |
|||
$.modal.errMsg("数据为空"); |
|||
} |
|||
} |
|||
}); |
|||
} |
|||
$('#stockNo').on('change', function() { |
|||
var selectedWarehouseCode = $(this).val(); // 获取选中的仓库ID |
|||
if (selectedWarehouseCode) { |
|||
// 发起Ajax请求获取仓库名称 |
|||
$.ajax({ |
|||
type: 'GET', |
|||
url: ctx +'stock/stockInfo/getStockNameByWarehouseCode/' + selectedWarehouseCode, |
|||
dataType: 'json', // 假设返回的数据格式是JSON |
|||
success: function(data) { |
|||
console.log(data); |
|||
// 将获取到的仓库名称填充到输入框 |
|||
if(data.data == null){ |
|||
// 如果返回的数据有问题,可以给出提示或处理 |
|||
$.modal.alertWarning('未能获取到仓库名称!'); |
|||
} |
|||
$('input[name="stockName"]').val(data.data.stockName); |
|||
$('input[name="stockAddress"]').val(data.data.stockAddr); |
|||
$('input[name="stockContact"]').val(data.data.stockManager); |
|||
$('input[name="stockPhone"]').val(data.data.stockManagerPhone); |
|||
|
|||
{ |
|||
title: '计划采购数', |
|||
field: 'planPurchaseNum', |
|||
}, |
|||
error: function(jqXHR, textStatus, errorThrown) { |
|||
console.error('Error:', textStatus, errorThrown); |
|||
$.modal.alertWarning('查询仓库名称时发生错误!'); |
|||
} |
|||
}); |
|||
} |
|||
else {$('input[name="warehouseName"]').val('');}// 如果没有选择仓库ID,清空仓库名称输入框 |
|||
{ |
|||
title: '实际采购数', |
|||
field: 'actualPurchaseNum', |
|||
}, |
|||
{ |
|||
title: '共享库存占用数', |
|||
field: 'sharedInventoryOccupancyNum', |
|||
}, |
|||
{ |
|||
title: '不含税总价', |
|||
field: 'materialNoRmbSum', |
|||
}, |
|||
{ |
|||
title: '含税总价', |
|||
field: 'materialRmbSum', |
|||
}, |
|||
{ |
|||
title: '交付时间', |
|||
field: 'planDeliveryTime', |
|||
}, |
|||
], |
|||
}; |
|||
$.table.init(options); |
|||
}); |
|||
function submitHandler() { |
|||
if ($.validate.form()) { |
|||
if ($('textarea[name="comment"]').val()) { |
|||
$('input[name="p_COM_comment"]').val($('textarea[name="comment"]').val()); |
|||
} |
|||
var taskId = [[${taskId}]]; |
|||
$.operate.save(prefix + "/complete/" + taskId, $('#form-purchaseOrder-fzjl').serialize()); |
|||
} |
|||
|
|||
|
|||
function queryParams(params){ |
|||
|
|||
var curParams = { |
|||
purchaseOrderCode : purchaseOrder.purchaseOrderCode |
|||
}; |
|||
return curParams |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
</script> |
|||
</body> |
|||
</html> |
Loading…
Reference in new issue