Browse Source

[fix]

品质管理 制程检验
修改添加制程检验页面,按照新版prd重新设计页面及功能;
修改制程检验物料VO类,添加物料型号和已检验数字段;
修改制程检验导出类,去除工序名称字典注解;
修改制程检验详情页面,按照新版添加页面实现;
修改制程检验列表页面,修改搜索栏字段,列表字段添加审批相关;修改导出方法;
修改选择物料页面,添加物料型号、已检验数字段,设置列居中显示;
dev
王晓迪 3 months ago
parent
commit
86fe75f87d
  1. 6
      ruoyi-admin/src/main/java/com/ruoyi/quality/domain/VO/CheckoutMaterialVO.java
  2. 2
      ruoyi-admin/src/main/java/com/ruoyi/quality/domain/VO/CheckoutProcessExportVO.java
  3. 758
      ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/add.html
  4. 253
      ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/detail.html
  5. 190
      ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/manufacturingCheckout.html
  6. 23
      ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/materialSelect.html

6
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;

2
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;
/** 工序顺序 */

758
ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/add.html

@ -3,7 +3,30 @@
<head>
<th:block th:include="include :: header('新增品质管理制程检验')" />
<th:block th:include="include :: datetimepicker-css" />
<th:block th:include="include :: bootstrap-editable-css" />
</head>
<style>
.fixed-table-container {
border: 0px solid #ddd;
min-height: 140px;
}
.table-striped-two{
overflow: hidden;
scroll: auto;
}
.bordered-container {
/* 自动高度,根据内容自动调整 */
min-height: 0; /* 确保高度能收缩至内容高度 */
/* 自动宽度,对于块级元素已经是默认行为,但如果你想强调这一点或针对特定情况,可以显式声明 */
width: auto;
height: auto;
border: 1px dashed blue; /* 灰色边框,可根据需要调整颜色 */
/* 以下可选,根据需要添加,用于控制内外边距和布局 */
padding: 1rem;
box-sizing: border-box; /* 包含边框和内边距在宽度计算中 */
margin-bottom: 20px;
}
</style>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-manufacturingCheckout-add">
@ -28,17 +51,27 @@
<div class="container">
<div class="form-row">
<div class="btn-group-sm" id="toolbar" role="group">
<span>选择物料</span>
<a class="btn btn-success" onclick="insertRow()">
<i class="fa fa-plus"></i> 选择物料
</a>
</div>
</div>
<div class="row">
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
<table id="bootstrap-material-table"></table>
</div>
</div>
</div>
<div class="container mt-5">
<div class="btn-group-sm" style="margin-top: 10px;margin-bottom: 10px;">
<span>选择制程工序</span>
<a class="btn btn-success" onclick="insertCheckProcess()">
<i class="fa fa-plus"></i> 添加制程工序
</a>
</div>
<div id="contentArea" class="mt-3">
<!-- 初始内容可以在这里,例如一个列表项和一个表单 -->
</div>
</div>
</div>
@ -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);
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);
})
});
const combinedData = Object.assign({}, manufacturingCheckoutData, { checkoutMaterialList: materialDataList });
// 合并表单数据和表格数据
console.log(combinedData)
// 使用 JSON.stringify() 序列化数据
const jsonData = JSON.stringify(combinedData);
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('<option value="">请选择关联生产单号</option>');
//遍历返回的数据,添加下拉框的选项
$.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'
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',
formatter: function(value, row, index) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs" href="javascript:void(0)" onclick="checkoutReport(\'' + row.materialNo + '\')"><i class="fa fa-plus"></i>检验报告</a> ');
return actions.join('');
}
},
{
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 insertCheckProcess() {
var material = $("#bootstrap-material-table").bootstrapTable("getData");
if(material.length == 0){
$.modal.msgError("物料表格为空,请先选择物料");
return;
}
// 在父页面中定义处理函数
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();
curIndex ++;
var uniqueId = "unique_" + curIndex;
uniqueIdList.push(uniqueId);
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 newItem =
'<div class="container bordered-container" id="div_'+ uniqueId +'">' +
"<div class='col-sm-12 my-3'>" +
`<h5>制程工序${curIndex}</h5>` +
"<div class='col-sm-12 select-table table-striped'>" +
'<table class="table-container checkoutMaterial-edit-table" id="bootstrap-manufacturingProcess-table-'+uniqueId+'"></table>' +
"</div>" +
"</div>" +
"<div class='col-sm-12 move-right'>" +
"<h3>合格数</h3>\n" +
" <div class='row'>" +
" <div class='form-group col-sm-6'>" +
" <label class='col-sm-4 control-label is-required'>ok允收数:</label>" +
" <div class='col-sm-8'>" +
" <input id='okAcceptedNum' name='okAcceptedNum' oninput='okAcceptedHandler()' class='form-control' type='number' value='0' required>" +
" </div>" +
" </div>" +
" <div class='form-group col-sm-6'>" +
" <label class='col-sm-4 control-label'>ok报告图片:</label>" +
" <div class='col-sm-8'>" +
" <input name='okReportUrl' class='form-control' type='text'>" +
" </div>" +
" </div>" +
" </div>" +
" <div class='row'>" +
" <div class='form-group col-sm-6'>" +
" <label class='col-sm-4 control-label is-required'>特采/让步数:</label>" +
" <div class='col-sm-8'>" +
" <input id='specialConcessionsNum' name='specialConcessionsNum' oninput='okAcceptedHandler()' class='form-control' type='number' value='0' required>" +
" </div>" +
" </div>" +
" <div class='form-group col-sm-6'>" +
" <label class='col-sm-4 control-label'>特采报告图片:</label>" +
" <div class='col-sm-8'>" +
" <input name='specialReportUrl' class='form-control' type='text'>" +
" </div>\n" +
" </div>\n" +
" </div>"+
"</form>"+
"</div>" +
"<div class='col-sm-12 my-3'>" +
"<h5>不合格数</h5>" +
"<div class='form-row'> " +
"<a class='btn btn-success' onclick='insertUnqualifiedRow(\"#bootstrap-unqualifiedClass-table-" + uniqueId + "\")'>"+
"<i class='fa fa-plus'></i> 添加 " +"</a>" +
"</div>" +
'<div class="col-sm-12 select-table table-striped-two" id="unqualified_'+uniqueId+'">' +
'<table class="table-container checkoutMaterial-edit-table" id="bootstrap-unqualifiedClass-table-' + uniqueId + '"></table>' +
"</div>" +
"</div>" +
"</div>";
$("#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('<a class="btn btn-danger btn-xs" href="javascript:void(0)" onclick="removeProcess(\'' + uniqueId + '\')"><i class="fa fa-remove"></i>删除</a> ');
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('<a class="btn btn-success btn-xs" href="javascript:void(0)" ><i class="fa fa-plus"></i>上传</a> ');
// return actions.join('');
// }
},
{
title: '操作',
align: 'center',
formatter: function(value, row, index) {
var actions = [];
actions.push(`<a class="btn btn-danger btn-xs" href="javascript:void(0)" onclick="removeUnqualifiedClassRow('${row.unqualifiedClassId}', '${options2.id}','${row.processBadNum}')"><i class="fa fa-remove"></i>删除</a> `);
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 = `<select class="form-control" onchange="handleManufacturingProcessChange(this, ${index}, '${tableId}')">`;
selectHtml += '<option value=""' + (value === undefined || value === '' || value === null ? ' selected' : '') + '>所有</option>';
manufacturingProcessList.forEach(function (child) {
selectHtml += '<option value="' + child + '"' + (value === child ? ' selected' : '') + '>' + child + '</option>';
});
selectHtml += '</select>';
return selectHtml;
}
var unqualifiedRows = iframeWin.$('#bootstrap-unqualifiedClass-table-'+tableId).bootstrapTable('getData');
for (var i = 0; i < unqualifiedRows.length; i++) {
var row = unqualifiedRows[i];
// 获取 '不良分类' 列的 <select> 元素的当前值
var processBadClassificationValue = iframeWin.$('#bootstrap-unqualifiedClass-table-' + tableId + ' tbody tr:eq(' + i + ') select[name="processBadClassification"]').val();
var processBadGradeValue = iframeWin.$('#bootstrap-unqualifiedClass-table-' + tableId + ' tbody tr:eq(' + i + ') select[name="processBadGrade"]').val();
// 更新原始数据对象
row.processBadClassification = processBadClassificationValue;
row.processBadGrade = processBadGradeValue;
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);
}
});
}
}
// 删除物料的一行数据
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();
}
var unquilifiedClass = {
processBadClassification: row.processBadClassification,
processBadGrade: row.processBadGrade,
processBadNum: row.processBadNum,
//自定义制程检验名称的初始化函数
function manufacturingProcessNameFormatter(value, row, index,tableId){
var selectHtml = `<select class="form-control" onchange="onManufacturingProcessName(this, ${index}, '${tableId}')">`;
selectHtml += '<option value=""' + (value === undefined || value === '' ? ' selected' : '') + '>所有</option>';
processNameList.forEach(function (child) {
selectHtml += '<option value="' + child + '"' + (value === child ? ' selected' : '') + '>' + child + '</option>';
});
selectHtml += '</select>';
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('后端请求数据为空');
}
var processBadNum = Number(row.processBadNum);
if(!isNaN(processBadNum)){
processUnqualifiedNum += processBadNum;
},
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 = `<select class="form-control" onchange="onProcessBadClassification(this, ${index}, '${tableId}')">`;
selectHtml += '<option value=""' + (value === undefined || value === '' ? ' selected' : '') + '>所有</option>';
processBadClassificationDatas.forEach(function (child) {
selectHtml += '<option value="' + child.dictValue + '"' + (value === child.dictValue ? ' selected' : '') + '>' + child.dictLabel + '</option>';
});
// console.log("processQualifiedNum: "+processQualifiedNum);
// console.log("processUnqualifiedNum: "+processUnqualifiedNum);
var newData = {
processQualifiedNum: processQualifiedNum,
processUnqualifiedNum: processUnqualifiedNum,
selectHtml += '</select>';
return selectHtml;
}
updateRowByMaterialNo(materialNo,newData);
layer.close(index);
// 列中获取不良分类的下拉改变数据
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 = `<select class="form-control" onchange="onProcessBadGrade(this, ${index}, '${tableId}')">`;
selectHtml += '<option value=""' + (value === undefined || value === '' ? ' selected' : '') + '>所有</option>';
processBadGradeDatas.forEach(function (child) {
selectHtml += '<option value="' + child.dictValue + '"' + (value === child.dictValue ? ' selected' : '') + '>' + child.dictLabel + '</option>';
});
selectHtml += '</select>';
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});
}
/*检验报告*/
function checkoutReport(materialNo){
var makeNo = $('#makeNo').val(); //获取生产编号下拉框元素
var url = ctx + 'quality/manufacturingCheckout/checkoutReport/' + materialNo+'/'+makeNo;
var options = {
title: '制程检验报告',
url: url,
callBack: handleCheckoutReportData
//特采让步数监听函数
//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;
}
}
var tableData = $("#"+tableId).bootstrapTable('getData')[0];
tableData.processQualifiedNum = sum;
$("#"+tableId).bootstrapTable('updateRow', {index: 0, row: tableData});
}
//校验工序编号是否唯一
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
});
}
</script>
</body>
</html>

253
ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/detail.html

@ -5,6 +5,28 @@
<th:block th:include="include:: select2-css" />
<th:block th:include="include :: datetimepicker-css" />
</head>
<style>
.fixed-table-container {
border: 0px solid #ddd;
min-height: 140px;
}
.table-striped-two{
overflow: hidden;
scroll: auto;
}
.bordered-container {
/* 自动高度,根据内容自动调整 */
min-height: 0; /* 确保高度能收缩至内容高度 */
/* 自动宽度,对于块级元素已经是默认行为,但如果你想强调这一点或针对特定情况,可以显式声明 */
width: auto;
height: auto;
border: 1px dashed blue; /* 灰色边框,可根据需要调整颜色 */
/* 以下可选,根据需要添加,用于控制内外边距和布局 */
padding: 1rem;
box-sizing: border-box; /* 包含边框和内边距在宽度计算中 */
margin-bottom: 20px;
}
</style>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-manufacturingCheckout-edit" th:object="${qualityManufacturingCheckout}">
@ -34,6 +56,12 @@
</div>
</div>
</div>
<div class="container mt-5" style="margin-top: 10px;">
<div id="contentArea" class="mt-3">
<!-- 初始内容可以在这里,例如一个列表项和一个表单 -->
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include:: select2-js" />
@ -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('<a class="btn btn-success btn-xs" href="javascript:void(0)" onclick="checkoutReport(\'' + row.materialNo + '\')">检验报告</a> ');
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 =
'<div class="container bordered-container" id="div_'+ uniqueId +'">' +
"<div class='col-sm-12 my-3'>" +
`<h5>制程工序${curIndex}</h5>` +
"<div class='col-sm-12 select-table table-striped'>" +
'<table class="table-container checkoutMaterial-edit-table" id="bootstrap-manufacturingProcess-table-'+uniqueId+'"></table>' +
"</div>" +
"</div>" +
"<div class='col-sm-12 move-right'>" +
"<h3>合格数</h3>\n" +
" <div class='row'>" +
" <div class='form-group col-sm-6'>" +
" <label class='col-sm-4 control-label is-required'>ok允收数:</label>" +
" <div class='col-sm-8'>" +
` <input readonly id='okAcceptedNum' name='okAcceptedNum' oninput='okAcceptedHandler()' class='form-control' type='number' value='${process.okAcceptedNum}' required>` +
" </div>" +
" </div>" +
" <div class='form-group col-sm-6'>" +
" <label class='col-sm-4 control-label'>ok报告图片:</label>" +
" <div class='col-sm-8'>" +
" <input readonly name='okReportUrl' class='form-control' type='text'>" +
" </div>" +
" </div>" +
" </div>" +
" <div class='row'>" +
" <div class='form-group col-sm-6'>" +
" <label class='col-sm-4 control-label is-required'>特采/让步数:</label>" +
" <div class='col-sm-8'>" +
` <input readonly id='specialConcessionsNum' name='specialConcessionsNum' oninput='okAcceptedHandler()' class='form-control' type='number' value='${process.specialConcessionsNum}' required>` +
" </div>" +
" </div>" +
" <div class='form-group col-sm-6'>" +
" <label class='col-sm-4 control-label'>特采报告图片:</label>" +
" <div class='col-sm-8'>" +
" <input readonly name='specialReportUrl' class='form-control' type='text'>" +
" </div>\n" +
" </div>\n" +
" </div>"+
"</form>"+
"</div>" +
"<div class='col-sm-12 my-3'>" +
"<h5>不合格数</h5>" +
'<div class="col-sm-12 select-table table-striped-two" id="unqualified_'+uniqueId+'">' +
'<table class="table-container checkoutMaterial-edit-table" id="bootstrap-unqualifiedClass-table-' + uniqueId + '"></table>' +
"</div>" +
"</div>" +
"</div>";
$("#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);
}
</script>
</body>
</html>

190
ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/manufacturingCheckout.html

@ -18,12 +18,6 @@
<label>生产单号:</label>
<input type="text" name="makeNo"/>
</li>
<li class="select-time">
<label>检验时间:</label>
<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginCheckoutTime]"/>
<span>-</span>
<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endCheckoutTime]"/>
</li>
<li>
<label>料号:</label>
<input type="text" name="materialNo"/>
@ -32,6 +26,23 @@
<label>物料名称:</label>
<input type="text" name="materialName"/>
</li>
<li>
<label>录入人:</label>
<input type="text" name="createBy"/>
</li>
<li>
<label>审批状态:</label>
<select name="auditStatus" th:with="type=${@dict.getType('auditStatus')}">
<option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</li>
<li class="select-time">
<label>检验时间:</label>
<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginCheckoutTime]"/>
<span>-</span>
<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endCheckoutTime]"/>
</li>
<li class="select-time">
<label>录入时间:</label>
<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginCreateTime]"/>
@ -51,7 +62,7 @@
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="quality:manufacturingCheckout:add">
<i class="fa fa-plus"></i> 添加
</a>
<a class="btn btn-warning" onclick="exportExcel()" shiro:hasPermission="quality:manufacturingCheckout:export">
<a class="btn btn-success" onclick="exportExcel()" shiro:hasPermission="quality:manufacturingCheckout:export">
<i class="fa fa-download"></i> 导出
</a>
</div>
@ -61,10 +72,12 @@
</div>
</div>
<th:block th:include="include :: footer" />
<script th:src="@{/js/activiti.js}"></script>
<script th:inline="javascript">
var detailFlag = [[${@permission.hasPermi('quality:manufacturingCheckout:detail')}]];
var prefix = ctx + "quality/manufacturingCheckout";
var loginName = [[${@permission.getPrincipalProperty('loginName')}]];
$(function() {
var options = {
@ -84,48 +97,121 @@
field: 'manufacturingCheckoutId',
visible: false
},
{
title: '使用状态',
visible: false,
field: 'useStatus',
},
{
title: '当前任务名称',
visible: false,
field: 'taskName',
},
{
title: '流程实例ID',
visible: false,
field: 'instanceId',
},
{
title: '流程实例类型',
visible: false,
field: 'instanceType',
},
{
title: '流程实例提交ID',
visible: false,
field: 'submitInstanceId',
},
{
title: '申请标题',
visible: false,
field: 'applyTitle',
},
{
title: '申请人',
visible: false,
field: 'applyUser',
},
{
title: '流程恢复实例ID',
visible: false,
field: 'restoreInstanceId',
},
{
title: '流程作废实例ID',
visible: false,
field: 'cancelInstanceId',
},
{ title: '当前状态',field: 'taskStatus',align: 'center',
formatter: function(value, row, index) {
if(row.auditStatus!="1"&&value != "未启动"){
return '<span class="badge badge-danger">' + value + '</span>';
}
if(value === "未启动"){
return '<span class="badge badge-primary">' + value + '</span>';
}
return '<span class="badge badge-primary">' + value + '</span>';
}
},
{
title: '制程检验单号',
field: 'manufacturingCheckoutCode',
align: 'center',
},
{
title: '关联生产单号',
align: 'center',
field: 'makeNo',
},
{
title: '检验时间',
align: 'center',
field: 'checkoutTime',
},
{
title: '物料数合计',
field: 'materialTotal',
title: '料号',
align: 'center',
field: 'materialNo',
},
{
title: '物料名称',
align: 'center',
field: 'materialName',
},
{
title: '数量合计',
align: 'center',
field: 'numTotal',
},
{
title: '制程工序合格数',
align: 'center',
field: 'processQualifiedNum',
},
{
title: '制程工序不合格数',
align: 'center',
field: 'processUnqualifiedNum',
},
{
title: '录入人',
align: 'center',
field: 'createBy',
},
{
title: '录入时间',
align: 'center',
field: 'createTime',
},
{
title: '更新人',
align: 'center',
field: 'updateBy',
},
{
title: '上次更新时间',
align: 'center',
field: 'updateTime',
},
{
@ -133,70 +219,60 @@
align: 'center',
formatter: function(value, row, index) {
var actions = [];
// 有流程实例id
if (row.instanceId) {
// 有待办人展示审批按钮,
if (row.todoUserId) {
var todoUserIdList = row.todoUserId.split(",");
if(todoUserIdList.includes(loginName)){
var nodeName = row.taskName=='驳回调整'?' 调整申请':' 审批';
actions.push('<a class="btn btn-success btn-xs" href="javascript:void(0)" onclick="showVerifyDialog(\'' + prefix + '\',\'' + row.taskId + '\', \'' + row.taskName+"-"+row.instanceTypeName+"申请" + '\')"><i class="fa fa-edit"></i> '+nodeName+'</a> ');
}
}
// 审批历史
actions.push('<a class="btn btn-success btn-xs" href="javascript:void(0)" onclick="showHistoryDialog(\'' + row.instanceId + '\')"> 审批历史</a> ');
// 进度查看
actions.push('<a class="btn btn-success btn-xs" href="javascript:void(0)" onclick="showProcessImgDialog(\'' + row.instanceId + '\')"> 进度查看</a> ');
}
actions.push('<a class="btn btn-success btn-xs ' + detailFlag + '" href="javascript:void(0)" onclick="detail(\'' + row.manufacturingCheckoutCode + '\')"><i class="fa fa-edit"></i>详情</a> ');
return actions.join('');
var actionLinks = actions.join('');
return $.table.dropdownToggle(actionLinks);
}
}],
rowStyle: function (row, index) {
if (row.auditStatus=="0") {
// 如果审核状态为待审核,则设置为红色
return {css:{"color":"red"}};
}
// 否则使用默认样式
return {};
}
}]
};
$.table.init(options);
});
// 导出
function exportExcel(formId) {
// $.table.set();
var checkoutData = [];
var selections = $("#bootstrap-table").bootstrapTable("getSelections");
if(selections.length === 0){
// $.modal.alertWarning("请至少选择一条bom信息");
// return;
$.modal.confirm("确定导出所有制程检验吗?", function() {
var currentId = $.common.isEmpty(formId) ? $('form').attr('id') : formId;
var params = $("#bootstrap-table").bootstrapTable('getOptions');
var dataParam = $("#" + currentId).serializeArray();
dataParam.push({ "name": "orderByColumn", "value": params.sortName });
dataParam.push({ "name": "isAsc", "value": params.sortOrder });
function exportExcel() {
var ids = $.table.selectColumns("manufacturingCheckoutCode");
var dataParam = $("#formId").serializeArray();
let tipMsg = "确定导出当前所有数据吗?";
if ($.common.isNotEmpty(ids)) {
tipMsg = `确定导出 ${ids} 数据吗?`;
dataParam.push({ "name": "ids", "value": ids });
}
$.modal.confirm(tipMsg, function () {
$.modal.loading("正在导出数据,请稍后...");
$.post(prefix + '/exportAll', dataParam, function(result) {
if (result.code == web_status.SUCCESS) {
$.post( prefix + "/export", dataParam, function (result) {
if (result.code === web_status.SUCCESS) {
window.location.href = ctx + "common/download?fileName="+ encodeURI(result.msg) + "&delete=" + true;
} else if (result.code == web_status.WARNING) {
$.modal.alertWarning(result.msg)
} else {
$.modal.alertError(result.msg);
}
$.modal.closeLoading();
});
});
}else {
//·拼接单号
for(let i=0;i<selections.length;i++){
checkoutData.push(selections[i].manufacturingCheckoutCode);
}
$.modal.confirm("确定导出" + checkoutData + "吗?", function () {
var checkouts = JSON.stringify(checkoutData);
// console.log(bomNos);
$.modal.loading("正在导出数据,请稍后...");
var config = {
url: prefix + '/export',
type: "post",
dataType: "json",
contentType: "application/json;charset=utf-8",
data: checkouts,
success: function(result) {
console.log(result);
window.location.href = ctx + "common/download?fileName=" + encodeURI(result.msg) + "&delete=" + true;
$.modal.alertSuccess("导出成功!")
$.modal.closeLoading();
},
error: function (result){
$.modal.alertError(result.msg);
}
};
$.ajax(config)
// $.operate.saveJson(prefix + "/export", bomNos);
});
}
};
function detail(manufacturingCheckoutCode){
var url = ctx +'quality/manufacturingCheckout/detail/'+manufacturingCheckoutCode;
$.modal.open("制程检验详情",url);

23
ruoyi-admin/src/main/resources/templates/quality/manufacturingCheckout/materialSelect.html

@ -40,36 +40,49 @@
{
title: '料号',
field: 'materialNo',
align: 'center',
},
{
title: '图片',
align: 'center',
field: 'materialPhotourl',
},
{
title: '物料名称',
align: 'center',
field: 'materialName',
},
{
title: '类型',
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: '加工方式',
align: 'center',
field: 'materialProcessMethod',
formatter: function(value, row, index) {
return $.table.selectDictLabel(processMethodDatas, value);
@ -77,8 +90,14 @@
},
{
title: '订单数',
align: 'center',
field: 'makeTotal'
}
},
{
title: '已检验数',
align: 'center',
field: 'checkedNum'
},
]
};
$.table.init(options);

Loading…
Cancel
Save