From 86fe75f87d8f99218f3cc441faae1da1eb464b9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=99=93=E8=BF=AA?= <2596750866@qq.com> Date: Wed, 4 Dec 2024 14:20:38 +0800 Subject: [PATCH] =?UTF-8?q?[fix]=20=E5=93=81=E8=B4=A8=E7=AE=A1=E7=90=86=20?= =?UTF-8?q?=E5=88=B6=E7=A8=8B=E6=A3=80=E9=AA=8C=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=B6=E7=A8=8B=E6=A3=80=E9=AA=8C=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=EF=BC=8C=E6=8C=89=E7=85=A7=E6=96=B0=E7=89=88prd?= =?UTF-8?q?=E9=87=8D=E6=96=B0=E8=AE=BE=E8=AE=A1=E9=A1=B5=E9=9D=A2=E5=8F=8A?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=9B=20=E4=BF=AE=E6=94=B9=E5=88=B6?= =?UTF-8?q?=E7=A8=8B=E6=A3=80=E9=AA=8C=E7=89=A9=E6=96=99VO=E7=B1=BB?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E7=89=A9=E6=96=99=E5=9E=8B=E5=8F=B7?= =?UTF-8?q?=E5=92=8C=E5=B7=B2=E6=A3=80=E9=AA=8C=E6=95=B0=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=EF=BC=9B=20=E4=BF=AE=E6=94=B9=E5=88=B6=E7=A8=8B=E6=A3=80?= =?UTF-8?q?=E9=AA=8C=E5=AF=BC=E5=87=BA=E7=B1=BB=EF=BC=8C=E5=8E=BB=E9=99=A4?= =?UTF-8?q?=E5=B7=A5=E5=BA=8F=E5=90=8D=E7=A7=B0=E5=AD=97=E5=85=B8=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=EF=BC=9B=20=E4=BF=AE=E6=94=B9=E5=88=B6=E7=A8=8B?= =?UTF-8?q?=E6=A3=80=E9=AA=8C=E8=AF=A6=E6=83=85=E9=A1=B5=E9=9D=A2=EF=BC=8C?= =?UTF-8?q?=E6=8C=89=E7=85=A7=E6=96=B0=E7=89=88=E6=B7=BB=E5=8A=A0=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E5=AE=9E=E7=8E=B0=EF=BC=9B=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=88=B6=E7=A8=8B=E6=A3=80=E9=AA=8C=E5=88=97=E8=A1=A8=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=EF=BC=8C=E4=BF=AE=E6=94=B9=E6=90=9C=E7=B4=A2=E6=A0=8F?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=EF=BC=8C=E5=88=97=E8=A1=A8=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=A1=E6=89=B9=E7=9B=B8=E5=85=B3=EF=BC=9B?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=BC=E5=87=BA=E6=96=B9=E6=B3=95=EF=BC=9B?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=E9=80=89=E6=8B=A9=E7=89=A9=E6=96=99?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=EF=BC=8C=E6=B7=BB=E5=8A=A0=E7=89=A9=E6=96=99?= =?UTF-8?q?=E5=9E=8B=E5=8F=B7=E3=80=81=E5=B7=B2=E6=A3=80=E9=AA=8C=E6=95=B0?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=EF=BC=8C=E8=AE=BE=E7=BD=AE=E5=88=97=E5=B1=85?= =?UTF-8?q?=E4=B8=AD=E6=98=BE=E7=A4=BA=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../quality/domain/VO/CheckoutMaterialVO.java | 6 + .../domain/VO/CheckoutProcessExportVO.java | 2 +- .../quality/manufacturingCheckout/add.html | 778 ++++++++++++++---- .../quality/manufacturingCheckout/detail.html | 253 +++++- .../manufacturingCheckout.html | 206 +++-- .../manufacturingCheckout/materialSelect.html | 23 +- 6 files changed, 1023 insertions(+), 245 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/quality/domain/VO/CheckoutMaterialVO.java b/ruoyi-admin/src/main/java/com/ruoyi/quality/domain/VO/CheckoutMaterialVO.java index 6e2585aa..83b9b798 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/quality/domain/VO/CheckoutMaterialVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/quality/domain/VO/CheckoutMaterialVO.java @@ -36,6 +36,12 @@ public class CheckoutMaterialVO extends BaseEntity { @Excel(name = "物料描述") private String materialDescribe; + /**物料型号*/ + private String materialModel; + + //已检验数 + private Integer checkedNum; + /** 物料加工方式 */ @Excel(name = "物料加工方式") private String materialProcessMethod; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/quality/domain/VO/CheckoutProcessExportVO.java b/ruoyi-admin/src/main/java/com/ruoyi/quality/domain/VO/CheckoutProcessExportVO.java index f2499b4b..bf23003c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/quality/domain/VO/CheckoutProcessExportVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/quality/domain/VO/CheckoutProcessExportVO.java @@ -41,7 +41,7 @@ public class CheckoutProcessExportVO { private String workshopName; /** 制程工序名称 */ - @Excel(name = "工序名称",sort = 9,dictType = "manufacturing_process_name") + @Excel(name = "工序名称",sort = 9) private String manufacturingProcessName; /** 工序顺序 */ diff --git a/ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/add.html b/ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/add.html index edd3a787..f390c8d0 100644 --- a/ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/add.html +++ b/ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/add.html @@ -3,7 +3,30 @@ + +
@@ -28,19 +51,29 @@
-
- 选择物料 - - 选择物料 - -
+ 选择物料 + + 选择物料 +
-
+
+ +
+
+ 选择制程工序 + + 添加制程工序 + +
+
+ +
+
@@ -50,7 +83,15 @@ var prefix = ctx + "quality/manufacturingCheckout"; var checkoutProcessList = []; var materialProcessList = []; + var uniqueIdList = []; var processMethodDatas = [[${@dict.getType('processMethod')}]]; + var materialTypeDatas = [[${@category.getChildByCode('materialType')}]]; + var manufacturingProcessNameDatas = [[${@dict.getType('manufacturing_process_name')}]]; + var processBadClassificationDatas = [[${@dict.getType('process_bad_classification')}]]; + var processBadGradeDatas = [[${@dict.getType('process_bad_grade')}]]; + var manufacturingProcessList = []; + var processNameList = []; + var curIndex = 0; $("#form-manufacturingCheckout-add").validate({ focusCleanup: true }); @@ -62,48 +103,54 @@ obj[item.name] = item.value; return obj; }, {}); - // 获取bootstrap-table的数据,这里假设你使用bootstrap-table的API获取所有数据 - var table = $('#bootstrap-table').bootstrapTable('getData'); + var table = $('#bootstrap-material-table').bootstrapTable('getData'); // 检查表格数据是否为空 if (table.length===0){ $.modal.alertWarning("请至少添加一条物料数据后再保存!"); return; } - // console.log(table); - // 将表数据转换成与complaintNoticeData格式一致的数组 - var materialDataList = table.map(function(item) { - // 根据实际字段名调整 - return { - "materialNo": item.materialNo, // 假设id对应materialId - "materialPhotourl": item.materialPhotourl, // 假设quantity是物料数量字段 - "materialName": item.materialName, - "materialType": item.materialType, - "materialUnit": item.materialUnit, - "materialBrand": item.materialBrand, - "materialDescribe": item.materialDescribe, - "materialProcessMethod": item.materialProcessMethod, - "makeTotal": item.makeTotal, - "checkedNum": item.checkedNum, - "currentCheckoutNum": item.currentCheckoutNum, - "processQualifiedNum":item.processQualifiedNum, - "processUnqualifiedNum":item.processUnqualifiedNum - // ...其他字段 - }; - }); - materialDataList.forEach(function(item) { - item.materialProcessList = []; - materialProcessList.forEach(function (process){ - if(process.materialNo === item.materialNo){ - item.materialProcessList.push(process); - } - }) - }); - const combinedData = Object.assign({}, manufacturingCheckoutData, { checkoutMaterialList: materialDataList }); - // 合并表单数据和表格数据 - console.log(combinedData) - // 使用 JSON.stringify() 序列化数据 - const jsonData = JSON.stringify(combinedData); + var checkOutNum = table[0].currentCheckoutNum; + //未检验数 + var unCheckNum = Number(table[0].makeTotal)-Number(table[0].checkedNum); + if(checkOutNum == ''||checkOutNum == null + ||checkOutNum == undefined||checkOutNum === 0){ + $.modal.alertWarning("物料本次检验数为空!"); + return; + } + if(checkOutNum > unCheckNum){ + $.modal.alertWarning("物料本次检验数超出未检验数,请检查!"); + return; + } + var checkOutMaterial = table[0]; + var qualityManufacturingCheckout = { + makeNo: $("#makeNo").val(), + checkoutTime: $("input[name='checkoutTime']").val(), + materialNo: table[0].materialNo, + materialName: table[0].materialName + } + + $(".bordered-container").each(function (index,container){ + var tableId = "bootstrap-manufacturingProcess-table-"+uniqueIdList[index]; + var unqualifiedTableId = "bootstrap-unqualifiedClass-table-"+uniqueIdList[index]; + var processDatas = $("#"+tableId).bootstrapTable("getData")[0]; + + var okAcceptedNum = $(container).find("input[name='okAcceptedNum']").val(); + var specialConcessionsNum = $(container).find("input[name='specialConcessionsNum']").val(); + processDatas.okAcceptedNum = okAcceptedNum; + processDatas.specialConcessionsNum = specialConcessionsNum; + var unqualifiedClassList = $("#"+unqualifiedTableId).bootstrapTable("getData"); + if(unqualifiedClassList <= 0){ + $.modal.alertWarning("工序"+processDatas.manufacturingProcessCode+"不合格分类为空,请检查!"); + return; + } + processDatas.unqualifiedClassList = unqualifiedClassList; + materialProcessList.push(processDatas); + }) + checkOutMaterial.materialProcessList = materialProcessList; + qualityManufacturingCheckout.checkoutMaterial = checkOutMaterial; + + const jsonData = JSON.stringify(qualityManufacturingCheckout); // 发送 AJAX 请求到后端接口 $.operate.saveJson(prefix + "/add", jsonData); } @@ -114,8 +161,6 @@ autoclose: true }); - /*加载所有的关联生产单号*/ - loadAllMakeNos(); /*加载所有的关联生产单号*/ function loadAllMakeNos(){ var url = ctx + 'system/makeorder/getAllMakeNos'; @@ -126,9 +171,7 @@ success: function (data){ if (data && Array.isArray(data)){ var selectElement = $('#makeNo'); //获取生产编号下拉框元素 - //清空下拉框现有选项 selectElement.empty(); - // 添加默认选项(如果需要) selectElement.append(''); //遍历返回的数据,添加下拉框的选项 $.each(data,function (index,item){ @@ -144,46 +187,63 @@ //物料信息展示列表 $(function() { + loadAllMakeNos(); var options = { + id: "bootstrap-material-table", modalName: "选择物料", showSearch: false, showRefresh: false, showToggle: false, showColumns: false, + height: 40, pagination: false, // 设置不分页 - columns: [{ - checkbox: true - }, + columns: [ { title: '料号', field: 'materialNo', + align: 'center', }, { title: '图片', + align: 'center', field: 'materialPhotourl', }, { title: '物料名称', + align: 'center', field: 'materialName', }, { title: '物料类型', + align: 'center', field: 'materialType', + formatter: function(value, row, index) { + return $.table.selectCategoryLabel(materialTypeDatas, value); + } + }, + { + title: '物料型号', + align: 'center', + field: 'materialModel', }, { title: '描述', + align: 'center', field: 'materialDescribe', }, { title: '品牌', + align: 'center', field: 'materialBrand', }, { title: '单位', + align: 'center', field: 'materialUnit', }, { - title: '物料加工方式', + title: '加工方式', + align: 'center', field: 'materialProcessMethod', formatter: function(value, row, index) { return $.table.selectDictLabel(processMethodDatas, value); @@ -191,34 +251,37 @@ }, { title: '订单数', + align: 'center', field: 'makeTotal', }, { title: '已检验数', + align: 'center', field: 'checkedNum', }, { title: '本次检验数', + align: 'center', field: 'currentCheckoutNum', editable: { - type:'text' - } - }, - { - title: '制程检验报告', - align: 'center', - formatter: function(value, row, index) { - var actions = []; - actions.push('检验报告 '); - return actions.join(''); + type:'text', + mode:'inline', + validate: function (v) { + if (!v) return '数量不能为空'; + if (isNaN(v)) return '数量必须是数字'; + var checkNum = parseInt(v); + if (checkNum < 0) return '数量必须是正整数'; + } } }, { title: '工序合格数', + align: 'center', field: 'processQualifiedNum', }, { title: '工序不合格数', + align: 'center', field: 'processUnqualifiedNum', }, { @@ -233,13 +296,19 @@ ] }; $.table.init(options); - }) + selectProcessCode(); + }); /*选择物料按钮*/ function insertRow() { + var material = $("#bootstrap-material-table").bootstrapTable("getData"); + if(material.length>0){ + $.modal.msgError("每次只能添加一个物料,请先删除当前物料"); + return; + } var selectedMakeNo = $("#makeNo").val(); if (!selectedMakeNo) { - $.modal.alertWarning("请先选择生产单号。"); + $.modal.alertWarning("请先选择生产单号"); return; } var encodedMakeNo = encodeURIComponent(selectedMakeNo); @@ -254,11 +323,9 @@ function doSubmit(index, layero,uniqueId){ - console.log(uniqueId); var iframeWin = window[layero.find('iframe')[0]['name']]; var rowData = iframeWin.$('#bootstrap-materialSelect-table').bootstrapTable('getSelections')[0]; - console.log("rowData: "+rowData); - $("#bootstrap-table").bootstrapTable('insertRow', { + $("#bootstrap-material-table").bootstrapTable('insertRow', { index:1, row: { materialNo:rowData.materialNo, @@ -268,9 +335,13 @@ materialDescribe: rowData.materialDescribe, materialBrand: rowData.materialBrand, materialUnit: rowData.materialUnit, + materialModel: rowData.materialModel, materialProcessMethod: rowData.materialProcessMethod, makeTotal:rowData.makeTotal, - currentCheckoutNum: "" + checkedNum: rowData.checkedNum, + currentCheckoutNum: "", + processQualifiedNum: 0, + processUnqualifiedNum: 0, } }) layer.close(index); @@ -291,102 +362,509 @@ } } } - // 逻辑删除前端的一行数据 - function removeRow(materialNo){ - $("#bootstrap-table").bootstrapTable('remove', { - field: 'materialNo', - values: materialNo - }) - } - // 在父页面中定义处理函数 - function handleCheckoutReportData(index, layero){ - var iframeWin = window[layero.find('iframe')[0]['name']]; - var processQualifiedNum = 0; - var processUnqualifiedNum = 0; - var materialNo = iframeWin.$('#form-checkoutReport-add').find('input[name="materialNo"]').val(); - var materialName = iframeWin.$('#form-checkoutReport-add').find('input[name="materialName"]').val(); - var uniqueIdString = iframeWin.$('#uniqueIdList').val(); - var uniqueIdList = uniqueIdString.split(','); - console.log(uniqueIdList); - iframeWin.$('.container.bordered-container').each(function(index, tableElement) { - var tableId = uniqueIdList[index]; - var $processTable = iframeWin.$('#bootstrap-manufacturingProcess-table-'+tableId); - var rows = $processTable.bootstrapTable('getData'); - var manufacturingProcessCode = $processTable.find('select[name="manufacturingProcessCode"]').val(); + //新增制程工序模块 + function insertCheckProcess() { - var okAcceptedNum = iframeWin.$('#form-manfa-'+tableId).find('input[name="okAcceptedNum"]').val(); - okAcceptedNum = Number(okAcceptedNum); - var specialConcessionsNum = iframeWin.$('#form-manfa-'+tableId).find('input[name="specialConcessionsNum"]').val(); - specialConcessionsNum = Number(specialConcessionsNum); - if (!isNaN(processQualifiedNum) && !isNaN(okAcceptedNum) && !isNaN(specialConcessionsNum)) { - processQualifiedNum = processQualifiedNum + okAcceptedNum + specialConcessionsNum; - console.log(processQualifiedNum); - } else { - console.log("One or more variables is not a valid number."); - } - var materialProcess = { - materialNo: materialNo, - materialName: materialName, - manufacturingProcessCode: manufacturingProcessCode, - manufacturingProcessName: rows[0].manufacturingProcessName, - deviceName: rows[0].deviceName, - deviceModelCode: rows[0].deviceModelCode, - processSequence: rows[0].processSequence, - workshopName: rows[0].workshopName, - modName: rows[0].modName, - processInspectionItem: rows[0].processInspectionItem, - okAcceptedNum: okAcceptedNum, - specialConcessionsNum: specialConcessionsNum, - unqualifiedClassList: [] - }; + var material = $("#bootstrap-material-table").bootstrapTable("getData"); + if(material.length == 0){ + $.modal.msgError("物料表格为空,请先选择物料"); + return; + } - var unqualifiedRows = iframeWin.$('#bootstrap-unqualifiedClass-table-'+tableId).bootstrapTable('getData'); - for (var i = 0; i < unqualifiedRows.length; i++) { - var row = unqualifiedRows[i]; - // 获取 '不良分类' 列的 " + + " " + + " " + + "
" + + " " + + "
" + + " " + + "
" + + "
" + + " " + + "
" + + "
" + + " " + + "
" + + " " + + "
" + + "
" + + "
" + + " " + + "
" + + " " + + "
\n" + + "
\n" + + "
"+ + ""+ + "" + + "
" + + "
不合格数
" + + "
" + + ""+ + " 添加 " +"" + + "
" + + '
' + + '
' + + "
" + + "
" + + ""; + $("#contentArea").append(newItem); + var bootstarpId = "bootstrap-manufacturingProcess-table-" + uniqueId; + var options1 = { + id:bootstarpId, + showSearch: false, + showRefresh: false, + showToggle: false, + showColumns: false, + pagination: false, // 设置不分页 + modalName: "选择制程工序", + height:30, + columns: [ + { + title: '制程工序编号', + field: 'manufacturingProcessCode', + align: 'center', + formatter: function (value, row, index) { + var tableId = bootstarpId; + return initProcessCodeSelector(value,row,index,tableId); + } + }, + { + title: '制程工序名称', + align: 'center', + field: 'manufacturingProcessName', + formatter:function (value, row, index) { + var tableId = bootstarpId; + return manufacturingProcessNameFormatter(value,row,index,tableId); + } + }, + { + title: '设备名称', + align: 'center', + field: 'deviceName', + }, + { + title: '设备型号', + align: 'center', + field: 'deviceModelCode', + }, + { + title: '工序顺序', + align: 'center', + field: 'processSequence', + }, + { + title: '车间名称', + align: 'center', + field: 'workshopName', + }, + { + title: '零件名称', + align: 'center', + field: 'modName', + }, + { + title: '工序检验项目', + align: 'center', + field: 'processInspectionItem', + }, + { + title: '操作', + align: 'center', + formatter: function(value, row, index) { + var actions = []; + actions.push('删除 '); + return actions.join(''); + } + }, + ], + }; + $.table.init(options1); + //初始化不合格分类表格 + var unqualifiedTableId = 'bootstrap-unqualifiedClass-table-' + uniqueId; + var options2 = { + id:'bootstrap-unqualifiedClass-table-' + uniqueId, + showSearch: false, + showRefresh: false, + showToggle: false, + showColumns: false, + height: 40, + pagination: false, // 设置不分页 + modalName: "添加不合格分类", + columns: [ + { + title: '不合格分类Id', + field: 'unqualifiedClassId', + visible: false, + }, + { + title: '不良分类', + align: 'center', + field: 'processBadClassification', + formatter:function (value, row, index) { + return processBadClassificationFormatter(value,row,index,unqualifiedTableId); + } + }, + { + title: '不良等级', + align: 'center', + field: 'processBadGrade', + formatter:function (value, row, index) { + return processBadGradeFormatter(value,row,index,unqualifiedTableId); + } + }, + { + title: '不良数量', + align: 'center', + field: 'processBadNum', + editable: { + type:'text', + mode:'inline', + validate: function (v) { + if (!v) return '数量不能为空'; + if (isNaN(v)) return '数量必须是数字'; + var checkNum = parseInt(v); + if (checkNum < 0) return '数量必须是正整数'; + } + } + }, + { + title: '报告', + align: 'center', + field: 'processBadPhotourl', + editable:true + // formatter: function(value, row, index) { + // var actions = []; + // actions.push('上传 '); + // return actions.join(''); + // } + }, + { + title: '操作', + align: 'center', + formatter: function(value, row, index) { + var actions = []; + actions.push(`删除 `); + return actions.join(''); + } + }, + ], + onEditableSave: function (field, row, oldValue, $el) { + updateUnqualifiedNum(); + } + }; + $.table.init(options2); + $(".fixed-table-container","#unqualified_" + uniqueId).css("min-height","200px"); + $("#bootstrap-manufacturingProcess-table-" +uniqueId ).bootstrapTable('insertRow', { + index: 1, + row: { + manufacturingProcessCode: '', + manufacturingProcessName: '', + deviceName: '', + deviceModelCode: '', + processSequence: '', + workshopName: '', + modName: '' + } + }); + }; + function insertUnqualifiedRow(tableId) { + var $table = $(tableId); // 使用传入的ID获取表格实例 + var newRow = { + unqualifiedClassId: 'UC_' + new Date().getTime(), // 示例生成唯一ID + processBadClassification: '', + processBadGrade: '', + processBadNum: '', + processBadPhotourl: '', + }; + $table.bootstrapTable('append', newRow); + } + //查询所有的制程工序编号 + function selectProcessCode(){ + $.ajax({ + url: ctx + 'quality/manufacturingCheckout/getProcessCodeList', + type: "post", + dataType: "json", + success: function (res) { + if (res.rows.length > 0) { + var processData = res.rows; + processData.forEach(function (process){ + manufacturingProcessList.push(process.manufacturingProcessCode); + processNameList.push(process.manufacturingProcessName); + }) + }else { + $.modal.error("数据为空"); + } + } + }); + } + // 重新初始化下拉框列表 + function initProcessCodeSelector(value, row, index,tableId) { + var selectHtml = `'; + return selectHtml; + } - // 更新原始数据对象 - row.processBadClassification = processBadClassificationValue; - row.processBadGrade = processBadGradeValue; - var unquilifiedClass = { - processBadClassification: row.processBadClassification, - processBadGrade: row.processBadGrade, - processBadNum: row.processBadNum, + function handleManufacturingProcessChange(selectElement,index, tableId) { + var selectedValue = $(selectElement).val(); + if(checkCodeUnique(selectedValue)){ + $.modal.msgError("该工序已添加,请重新选择"); + clearProcessTable(index,tableId); + return; + } + if (selectedValue) { + $.ajax({ + url: ctx + 'quality/manufacturingProcess/getProcessByCode/' + selectedValue, + method: 'GET', + dataType: 'json', + success: function (response) { + if (response.data) { + var newData = response.data; + var newRowData = { + manufacturingProcessCode: selectedValue || '', + manufacturingProcessName: newData.manufacturingProcessName || '', + deviceName: newData.deviceName || '', + deviceModelCode: newData.deviceModelCode || '', + processSequence: newData.processSequence || '', + workshopName: newData.workshopName || '', + modName: newData.modName || '', + processInspectionItem: newData.processInspectionItem || '', + }; + // 使用Bootstrap Table的updateRow方法更新表格数据,注意这里使用传入的索引 + $('#' + tableId).bootstrapTable('updateRow', { + index: index, // 使用传递进来的索引 + row: newRowData + }); + } else { + $.modal.msgError('后端请求数据为空'); + console.error('后端请求数据为空'); + } + }, + error: function (xhr, status, error) { + console.error('请求出错:', status, ", ", error); } - var processBadNum = Number(row.processBadNum); - if(!isNaN(processBadNum)){ - processUnqualifiedNum += processBadNum; + }); + } + } + // 删除物料的一行数据 + function removeRow(materialNo){ + $("#bootstrap-material-table").bootstrapTable('remove', { + field: 'materialNo', + values: materialNo + }) + } + //刪除制程检验工序 + function removeProcess(uniqueId){ + $("#div_"+uniqueId).remove(); + // 从 uniqueIdList 中移除 uniqueId + var index = uniqueIdList.indexOf(uniqueId); + if (index > -1) { + uniqueIdList.splice(index, 1); + } + } + //删除不良分类 + function removeUnqualifiedClassRow(unqualifiedClassId,tableId,processBadNum) { + $("#"+tableId).bootstrapTable('remove', { + field: 'unqualifiedClassId', + values: unqualifiedClassId + }); + //物料主表减去不良数 + updateUnqualifiedNum(); + } + + //自定义制程检验名称的初始化函数 + function manufacturingProcessNameFormatter(value, row, index,tableId){ + var selectHtml = `'; + return selectHtml; + } + function onManufacturingProcessName(selectElement, rowIndex,tableId) { + var manufacturingProcessNameValue = $(selectElement).val(); + if(checkNameUnique(manufacturingProcessNameValue)){ + $.modal.msgError("该工序已添加,请重新选择"); + clearProcessTable(rowIndex,tableId); + return; + } + if (manufacturingProcessNameValue) { + $.ajax({ + url: ctx + 'quality/manufacturingProcess/getProcessByName', + method: 'GET', + dataType: 'json', + data:{manufacturingProcessName: manufacturingProcessNameValue}, + success: function(response) { + if (response.data) { + var newData = response.data; + var newRowData = { + manufacturingProcessCode: newData.manufacturingProcessCode || '', + manufacturingProcessName: manufacturingProcessNameValue || '', + deviceName: newData.deviceName || '', + deviceModelCode: newData.deviceModelCode || '', + processSequence: newData.processSequence || '', + workshopName: newData.workshopName || '', + modName: newData.modName || '', + processInspectionItem: newData.processInspectionItem || '', + }; + // 使用Bootstrap Table的updateRow方法更新表格数据,注意这里使用传入的索引 + $('#' + tableId).bootstrapTable('updateRow', { + index: rowIndex, // 使用传递进来的索引 + row: newRowData + }); + } else { + console.error('后端请求数据为空'); + } + }, + error: function(xhr, status, error) { + console.error('请求出错:', status, ", ", error); } - materialProcess.unqualifiedClassList.push(unquilifiedClass); - console.log(materialProcess); - } - materialProcessList.push(materialProcess); + }); + } + } + // 自定义不良分类的初始化函数 + function processBadClassificationFormatter(value, row, index,tableId) { + var selectHtml = `'; + return selectHtml; + } + // 列中获取不良分类的下拉改变数据 + function onProcessBadClassification(selectElement, rowIndex, tableId) { + var processBadClassificationValue = $(selectElement).val(); + var tableData = $("#"+tableId).bootstrapTable('getData'); + var newRow = tableData[rowIndex]; // 获取当前行数据 + // 更新行数据 + newRow.processBadClassification = processBadClassificationValue; + $("#"+tableId).bootstrapTable('updateRow', {index: rowIndex, row: newRow}); + } + // 自定义不良等级的格式化函数 + function processBadGradeFormatter(value, row, index, tableId) { + var selectHtml = `'; + return selectHtml; + } + // 列中获取不良等级的下拉改变数据 + function onProcessBadGrade(selectElement, rowIndex,tableId) { + var processBadGradeValue = $(selectElement).val(); + var tableData = $("#"+tableId).bootstrapTable('getData'); + var newRow = tableData[rowIndex]; // 获取当前行数据 + // 重新渲染成本小类的设备名称列 + // 更新行数据 + newRow.processBadGrade = processBadGradeValue; + $("#"+tableId).bootstrapTable('updateRow', {index: rowIndex, row: newRow}); + } + + //特采让步数监听函数 + //OK允收数监听函数 + function okAcceptedHandler(){ + var tableId = "bootstrap-material-table"; + const okInputs = $("input[name='okAcceptedNum']"); + const specialInputs = $("input[name='specialConcessionsNum']"); + let sum = 0; + // 遍历所有输入框 + for (let i = 0; i < okInputs.length; i++) { + const value = parseInt(okInputs[i].value); + const specialValue = parseInt(specialInputs[i].value); + if (!isNaN(value)&&!isNaN(specialValue)) { + sum = sum + value + specialValue; + } } - updateRowByMaterialNo(materialNo,newData); - layer.close(index); + var tableData = $("#"+tableId).bootstrapTable('getData')[0]; + tableData.processQualifiedNum = sum; + $("#"+tableId).bootstrapTable('updateRow', {index: 0, row: tableData}); } - /*检验报告*/ - function checkoutReport(materialNo){ - var makeNo = $('#makeNo').val(); //获取生产编号下拉框元素 - var url = ctx + 'quality/manufacturingCheckout/checkoutReport/' + materialNo+'/'+makeNo; - var options = { - title: '制程检验报告', - url: url, - callBack: handleCheckoutReportData + //校验工序编号是否唯一 + function checkCodeUnique(selectedCode){ + var processCodeList = []; + $(".bordered-container").each(function (index,container){ + var tableId = "bootstrap-manufacturingProcess-table-"+uniqueIdList[index]; + var processDatas = $("#"+tableId).bootstrapTable("getData")[0]; + processCodeList.push(processDatas.manufacturingProcessCode); + }) + return processCodeList.includes(selectedCode); + } + //校验工序名称是否唯一 + function checkNameUnique(selectedName){ + var processNameList = []; + $(".bordered-container").each(function (index,container){ + var tableId = "bootstrap-manufacturingProcess-table-"+uniqueIdList[index]; + var processDatas = $("#"+tableId).bootstrapTable("getData")[0]; + processNameList.push(processDatas.manufacturingProcessName); + }) + return processNameList.includes(selectedName); + } + //清空检验工序表格 + function clearProcessTable(rowIndex,tableId){ + var newRowData = { + manufacturingProcessCode: '', + manufacturingProcessName: '', + deviceName: '', + deviceModelCode: '', + processSequence: '', + workshopName: '', + modName: '', + processInspectionItem: '', }; - $.modal.openOptions(options); + $('#' + tableId).bootstrapTable('updateRow', { + index: rowIndex, + row: newRowData + }); + } + //更新物料表格工序不合格数 + function updateUnqualifiedNum(){ + var unqualifiedNum = 0; + uniqueIdList.forEach(function (uniqueId){ + var unqualifiedTableId = "bootstrap-unqualifiedClass-table-" + uniqueId; + var unqualifyList = $("#"+unqualifiedTableId).bootstrapTable("getData"); + if(unqualifyList.length>0){ + unqualifyList.forEach(function (unqualify){ + unqualifiedNum += Number(unqualify.processBadNum == ''?0:unqualify.processBadNum); + }); + } + }) + var newRow = { + processUnqualifiedNum: unqualifiedNum, + } + $('#bootstrap-material-table').bootstrapTable('updateRow', { + index: 0, + row: newRow + }); } + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/detail.html b/ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/detail.html index dc4e8a8a..7ae1cd61 100644 --- a/ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/detail.html +++ b/ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/detail.html @@ -5,6 +5,28 @@ +
@@ -34,6 +56,12 @@
+ +
+
+ +
+
@@ -44,7 +72,13 @@ var makeNo = [[${qualityManufacturingCheckout.makeNo}]]; var prefix = ctx + "quality/manufacturingCheckout"; var processMethodDatas = [[${@dict.getType('processMethod')}]]; + var materialTypeDatas = [[${@category.getChildByCode('materialType')}]]; + var processBadClassificationDatas = [[${@dict.getType('process_bad_classification')}]]; + var processBadGradeDatas = [[${@dict.getType('process_bad_grade')}]]; + var checkoutMaterial = qualityManufacturingCheckout.checkoutMaterial; + var processList = checkoutMaterial.materialProcessList; $("#form-manufacturingCheckout-edit").validate({focusCleanup: true }); + var curIndex = 0; //物料信息展示列表 $(function() { $('#makeNo').val(makeNo); @@ -54,42 +88,57 @@ showRefresh: false, showToggle: false, showColumns: false, + height: 40, pagination: false, // 设置不分页 queryParams: queryParams, modalName: "选择物料", - columns: [{ - checkbox: true - }, + columns: [ { title: '料号', field: 'materialNo', + align: 'center', }, { title: '图片', + align: 'center', field: 'materialPhotourl', }, { title: '物料名称', + align: 'center', field: 'materialName', }, { title: '物料类型', + align: 'center', field: 'materialType', }, + { + title: '物料型号', + align: 'center', + field: 'materialModel', + formatter: function(value, row, index) { + return $.table.selectCategoryLabel(materialTypeDatas, value); + } + }, { title: '描述', + align: 'center', field: 'materialDescribe', }, { title: '品牌', + align: 'center', field: 'materialBrand', }, { title: '单位', + align: 'center', field: 'materialUnit', }, { - title: '物料加工方式', + title: '加工方式', + align: 'center', field: 'materialProcessMethod', formatter: function(value, row, index) { return $.table.selectDictLabel(processMethodDatas, value); @@ -97,41 +146,200 @@ }, { title: '订单数', + align: 'center', field: 'makeTotal', }, { title: '已检验数', + align: 'center', field: 'checkedNum', }, { title: '本次检验数', - field: 'currentCheckoutNum', - editable: { - type:'text' - } - }, - { - title: '制程检验报告', align: 'center', - formatter: function(value, row, index) { - var actions = []; - actions.push('检验报告 '); - return actions.join(''); - } + field: 'currentCheckoutNum', }, { title: '工序合格数', + align: 'center', field: 'processQualifiedNum', }, { title: '工序不合格数', + align: 'center', field: 'processUnqualifiedNum', }, ] }; $.table.init(options); + + processList.forEach(function (process){ + insertCheckProcess(process); + }) }) + //新增制程工序模块 + function insertCheckProcess(process) { + curIndex ++; + var uniqueId = "unique_" + curIndex; + + var newItem = + '
' + + "
" + + `
制程工序${curIndex}
` + + "
" + + '
' + + "
" + + "
" + + "
" + + "

合格数

\n" + + "
" + + "
" + + " " + + "
" + + ` ` + + "
" + + "
" + + "
" + + " " + + "
" + + " " + + "
" + + "
" + + "
" + + "
" + + "
" + + " " + + "
" + + ` ` + + "
" + + "
" + + "
" + + " " + + "
" + + " " + + "
\n" + + "
\n" + + "
"+ + ""+ + "
" + + "
" + + "
不合格数
" + + '
' + + '
' + + "
" + + "
" + + "
"; + $("#contentArea").append(newItem); + var bootstarpId = "bootstrap-manufacturingProcess-table-" + uniqueId; + var processList = []; + processList.push(process); + console.log(processList); + var unQualifiedList = process.unqualifiedClassList; + var options1 = { + id:bootstarpId, + showSearch: false, + showRefresh: false, + showToggle: false, + showColumns: false, + pagination: false, // 设置不分页 + modalName: "制程工序", + data: processList, + height:30, + columns: [ + { + title: '制程工序编号', + field: 'manufacturingProcessCode', + align: 'center', + }, + { + title: '制程工序名称', + align: 'center', + field: 'manufacturingProcessName', + }, + { + title: '设备名称', + align: 'center', + field: 'deviceName', + }, + { + title: '设备型号', + align: 'center', + field: 'deviceModelCode', + }, + { + title: '工序顺序', + align: 'center', + field: 'processSequence', + }, + { + title: '车间名称', + align: 'center', + field: 'workshopName', + }, + { + title: '零件名称', + align: 'center', + field: 'modName', + }, + { + title: '工序检验项目', + align: 'center', + field: 'processInspectionItem', + }, + ], + }; + $.table.init(options1); + //初始化不合格分类表格 + var unqualifiedTableId = 'bootstrap-unqualifiedClass-table-' + uniqueId; + var options2 = { + id:'bootstrap-unqualifiedClass-table-' + uniqueId, + showSearch: false, + showRefresh: false, + showToggle: false, + showColumns: false, + height: 40, + data: unQualifiedList, + pagination: false, // 设置不分页 + modalName: "添加不合格分类", + columns: [ + { + title: '不合格分类Id', + field: 'unqualifiedClassId', + visible: false, + }, + { + title: '不良分类', + align: 'center', + field: 'processBadClassification', + formatter: function(value, row, index) { + return $.table.selectDictLabel(processBadClassificationDatas, value); + } + }, + { + title: '不良等级', + align: 'center', + field: 'processBadGrade', + formatter: function(value, row, index) { + return $.table.selectDictLabel(processBadGradeDatas, value); + } + }, + { + title: '不良数量', + align: 'center', + field: 'processBadNum', + }, + { + title: '报告', + align: 'center', + field: 'processBadPhotourl', + }, + ] + }; + $.table.init(options2); + $(".fixed-table-container","#unqualified_" + uniqueId).css("min-height","200px"); + }; + function queryParams(params) { var curParams = { // 传递参数查询参数 @@ -139,11 +347,6 @@ }; return curParams; } - function submitHandler() { - if ($.validate.form()) { - $.operate.save(prefix + "/detail", $('#form-manufacturingCheckout-edit').serialize()); - } - } $("input[name='checkoutTime']").datetimepicker({ format: "yyyy-mm-dd", @@ -152,12 +355,8 @@ }); - /*检验报告*/ - function checkoutReport(materialNo){ - var manufacturingCheckoutCode = $('#manufacturingCheckoutCode').val(); //获取制程检验单编号 - var url = ctx + 'quality/manufacturingCheckout/checkoutReportDetail/' + materialNo+'/'+manufacturingCheckoutCode; - $.modal.open("制程检验报告",url); - } + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/manufacturingCheckout.html b/ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/manufacturingCheckout.html index 00006c15..cc924a32 100644 --- a/ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/manufacturingCheckout.html +++ b/ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/manufacturingCheckout.html @@ -18,12 +18,6 @@ -
  • - - - - - -
  • @@ -32,6 +26,23 @@
  • +
  • + + +
  • +
  • + + +
  • +
  • + + + - + +
  • @@ -51,7 +62,7 @@ 添加 - + 导出 @@ -61,10 +72,12 @@ +