试验管理

This commit is contained in:
lSun 2024-07-25 16:21:47 +08:00
parent e9e44f4866
commit 2c40bd6d68
6 changed files with 124 additions and 31 deletions

View File

@ -339,6 +339,7 @@ function saveData(data) {
//试验依据列表 //试验依据列表
var yjList = convertToYjList(data.field); var yjList = convertToYjList(data.field);
var experDevList = convertToExperDevList(data.field); var experDevList = convertToExperDevList(data.field);
console.log(experDevList)
//主要设备 //主要设备
var mainDevList = [{ var mainDevList = [{
@ -465,6 +466,7 @@ function convertToExperDevList(originalData){
deviceIds.forEach(deviceId => { deviceIds.forEach(deviceId => {
// 使用deviceId来构建键名 // 使用deviceId来构建键名
const devIdKey = `devId-${deviceId}`; const devIdKey = `devId-${deviceId}`;
const departmentIdKey = `departmentId-${deviceId}`;
const devCodeKey = `devCode-${deviceId}`; const devCodeKey = `devCode-${deviceId}`;
const manufacturerKey = `manufacturer-${deviceId}`; const manufacturerKey = `manufacturer-${deviceId}`;
const manufactureDateKey = `manufactureDate-${deviceId}`; const manufactureDateKey = `manufactureDate-${deviceId}`;
@ -480,6 +482,7 @@ function convertToExperDevList(originalData){
// 创建设备信息对象 // 创建设备信息对象
const deviceItem = { const deviceItem = {
devId: originalData[devIdKey], devId: originalData[devIdKey],
departmentId: originalData[departmentIdKey],
devCode: originalData[devCodeKey], devCode: originalData[devCodeKey],
manufacturer: originalData[manufacturerKey], manufacturer: originalData[manufacturerKey],
manufactureDate: originalData[manufactureDateKey], manufactureDate: originalData[manufactureDateKey],
@ -683,9 +686,10 @@ function generateHeaders(data) {
firstLevelHeader.colSpan = item.itemList.length; firstLevelHeader.colSpan = item.itemList.length;
firstLevelHeader.classList.add('center-aligned'); firstLevelHeader.classList.add('center-aligned');
// firstLevelHeader.textContent = `${item.experTypeName} - ${item.amount}`; // firstLevelHeader.textContent = `${item.experTypeName} - ${item.amount}`;
firstLevelHeader.innerHTML=`<div style="display: flex;width: 100%;" > firstLevelHeader.innerHTML=`
<input type="text" class="layui-input " title="${item.experTypeName}" readonly id="experTypeName-${counter}" name="experTypeName-${counter}" value="${item.experTypeName}" readonly style="border: 0px !important;width: 80%" /> ${item.experTypeName} - ${item.amount}
<input type="text" class="layui-input " title="${item.amount}" readonly id="amount-${counter}" name="amount-${counter}" readonly value="${item.amount}" style="border: 0px !important;width: 20%" /> <input type="hidden" class="layui-input " id="experTypeName-${counter}" name="experTypeName-${counter}" value="${item.experTypeName}" />
<input type="hidden" class="layui-input " id="amount-${counter}" name="amount-${counter}" readonly value="${item.amount}" />
</div>`; </div>`;
thead.rows[0].appendChild(firstLevelHeader); thead.rows[0].appendChild(firstLevelHeader);
@ -693,9 +697,9 @@ function generateHeaders(data) {
item.itemList.forEach(subItem => { item.itemList.forEach(subItem => {
const secondLevelHeader = document.createElement('th'); const secondLevelHeader = document.createElement('th');
secondLevelHeader.classList.add('center-aligned'); secondLevelHeader.classList.add('center-aligned');
secondLevelHeader.innerHTML=`<div style="display: flex;width: 100%;overflow: auto;"> secondLevelHeader.innerHTML=`
<input class="layui-input" readonly title="${subItem.itemName}" id="itemName-${counter}-${totalCols}" name="itemName-${counter}-${totalCols}" value="${subItem.itemName}" style="border: 0px !important;"> ${subItem.itemName}
</div> <input type="hidden" class="layui-input" id="itemName-${counter}-${totalCols}" name="itemName-${counter}-${totalCols}" value="${subItem.itemName}" >
` `
// secondLevelHeader.textContent = subItem.itemName; // secondLevelHeader.textContent = subItem.itemName;
secondRow.appendChild(secondLevelHeader); secondRow.appendChild(secondLevelHeader);
@ -723,14 +727,15 @@ function generateRows(data,sampleDeviceVos){
const row = document.createElement('tr'); const row = document.createElement('tr');
row.innerHTML = ` row.innerHTML = `
<input type="hidden" id="devId-${idCounter}" name="devId-${idCounter}" value="${sampleDeviceVos[i].id}"> <input type="hidden" id="devId-${idCounter}" name="devId-${idCounter}" value="${sampleDeviceVos[i].id}">
<input type="hidden" id="departmentId-${idCounter}" name="departmentId-${idCounter}" value="${sampleDeviceVos[i].departmentId}">
<td class="table-cell-wide">${idCounter}</td> <td class="table-cell-wide">${idCounter}</td>
<td class="table-cell-wide"><input style="border: 0px !important;" id="devCode-${idCounter}" readonly class="layui-input" name="devCode-${idCounter}" value="${sampleDeviceVos[i].devCode}" /></td> <td class="table-cell-wide"><input style="border: 0px !important;" id="devCode-${idCounter}" readonly class="layui-input" name="devCode-${idCounter}" value="${sampleDeviceVos[i].devCode}" /></td>
<td class="table-cell-wide"><input id="manufacturer-${idCounter}" lay-verify="required" class="layui-input" name="manufacturer-${idCounter}" /></td> <td class="table-cell-wide"><input maxlength="30" id="manufacturer-${idCounter}" lay-verify="required" class="layui-input" name="manufacturer-${idCounter}" /></td>
<td class="table-cell-wide"><input id="manufactureDate-${idCounter}" lay-verify="required" class="layui-input" name="manufactureDate-${idCounter}" readonly /></td> <td class="table-cell-wide"><input id="manufactureDate-${idCounter}" lay-verify="required" class="layui-input" name="manufactureDate-${idCounter}" readonly /></td>
<td class="table-cell-wide"><input id="devModule-${idCounter}" lay-verify="required" class="layui-input" name="devModule-${idCounter}" /></td> <td class="table-cell-wide"><input maxlength="30" id="devModule-${idCounter}" lay-verify="required" class="layui-input" name="devModule-${idCounter}" /></td>
<td class="table-cell-wide"><input id="devStatus-${idCounter}" lay-verify="required" class="layui-input" name="devStatus-${idCounter}" /></td> <td class="table-cell-wide"><input maxlength="30" id="devStatus-${idCounter}" lay-verify="required" class="layui-input" name="devStatus-${idCounter}" /></td>
<td class="table-cell-wide"><input id="amounts-${idCounter}" lay-verify="required" class="layui-input" name="amounts-${idCounter}" /></td> <td class="table-cell-wide"><input maxlength="6" id="amounts-${idCounter}" type="text" lay-affix="number" oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\\..*)\\./g, '$1')" min="0" lay-verify="required" class="layui-input" name="amounts-${idCounter}" /></td>
<td class="table-cell-wide"><input id="remarks-${idCounter}" lay-verify="required" class="layui-input" name="remarks-${idCounter}" /></td> <td class="table-cell-wide"><input maxlength="60" id="remarks-${idCounter}" lay-verify="required" class="layui-input" name="remarks-${idCounter}" /></td>
`; `;
// 遍历itemList的长度而不是itemList本身以匹配表头的列数 // 遍历itemList的长度而不是itemList本身以匹配表头的列数
for (let i = 0; i < columns; i++) { for (let i = 0; i < columns; i++) {
@ -741,6 +746,7 @@ function generateRows(data,sampleDeviceVos){
input.id = `devData-${idCounter}-${i + 1}`; input.id = `devData-${idCounter}-${i + 1}`;
input.name = `devData-${idCounter}-${i + 1}`; input.name = `devData-${idCounter}-${i + 1}`;
input.classList.add('layui-input'); input.classList.add('layui-input');
input.maxLength='30';
input.setAttribute('lay-verify', 'required'); input.setAttribute('lay-verify', 'required');
td.appendChild(input); td.appendChild(input);
row.appendChild(td); row.appendChild(td);

View File

@ -77,6 +77,8 @@ function initTable(dataList, limit, page) {
templet: function (d) { templet: function (d) {
var testResult=""; var testResult="";
var html = ''; var html = '';
var sampleList = JSON.stringify(d.sampleList);
if(d.sampleList.length>0){
for (let i = 0; i < d.sampleList.length; i++) { for (let i = 0; i < d.sampleList.length; i++) {
if (d.sampleList[i].testResult == "合格") { if (d.sampleList[i].testResult == "合格") {
@ -84,16 +86,17 @@ function initTable(dataList, limit, page) {
testResult = d.sampleList[i].testResult testResult = d.sampleList[i].testResult
} }
} }
// sampleList = JSON.stringify(d.sampleList);
}
if(testResult=="不合格"){ if(testResult=="不合格"){
// 添加包裹元素并应用类 // 添加包裹元素并应用类
html += "<span class='layui-show-details' style='color: #F39268; cursor: pointer'>" + html += "<span class='layui-show-details' onmouseover='getMouseover("+ sampleList +")' onmouseout='getMouseout()' style='color: #F39268; cursor: pointer'>" +
"<i data-details='" + JSON.stringify(d) + "'></i>" + // 注意这里是字符串形式
d.sampleQuantity + d.sampleQuantity +
"</span>"; "</span>";
}else{ }else{
// 添加包裹元素并应用类 // 添加包裹元素并应用类
html += "<span class='layui-show-details' style='color: #2A6EDF; cursor: pointer'>" + html += "<span class='layui-show-details' onmouseover='getMouseover("+ sampleList +")' onmouseout='getMouseout()' style='color: #2A6EDF; cursor: pointer'>" +
"<i data-details='" + JSON.stringify(d) + "'></i>" + // 注意这里是字符串形式
d.sampleQuantity + d.sampleQuantity +
"</span>"; "</span>";
@ -137,9 +140,12 @@ function initTable(dataList, limit, page) {
{title: "原始记录", unresize: true, width: 300, align: "center", {title: "原始记录", unresize: true, width: 300, align: "center",
templet: function (d) { templet: function (d) {
var html = ''; var html = '';
let search="<a class=\"layui-icon \" style='cursor:pointer;' title='查看' style=\"color: blue;\" onclick=\"checkData('" + d.experId + "','" + d.sampleId + "','"+ d.devTypeCode+"')\">查看</a>"; let search ="";
if(d.status != "待试验"){
search="<a class=\"layui-icon layui-icon-search\" title='查看' style=\"color: blue;\" onclick=\"checkData('" + d.experId + "','" + d.sampleId + "','"+ d.devTypeCode+"')\"></a>";
}
if (d.status == "待试验" || d.status == "待提交" || d.status == "审阅不通过" || d.status == "审核不通过" || d.status == "审批不通过") { if (d.status == "待试验" || d.status == "待提交" || d.status == "审阅不通过" || d.status == "审核不通过" || d.status == "审批不通过") {
let edit="<a class=\"layui-icon \" style='cursor:pointer;' title='编制' style=\"color: blue;\" onclick=\"addData('" + d.experId + "','" + d.sampleId + "','"+ d.devTypeCode+"')\">编制</a>"; let edit="<a class=\"layui-icon layui-icon-edit\" title='编制' style=\"color: blue;\" onclick=\"addData('" + d.experId + "','" + d.sampleId + "','"+ d.devTypeCode+"')\"></a>";
html=search+edit; html=search+edit;
} else { } else {
html=search; html=search;
@ -158,6 +164,52 @@ function initTable(dataList, limit, page) {
}); });
} }
var devOpenIndex='';
function getMouseover(data){
// console.log(data)
// openIframeTable(data)
var html = '<table class="layui-table" lay-skin="line" lay-size="sm" style="width: 100%;">' +
'<thead>' +
'<tr>' +
'<th>序号</th>' +
'<th>设备编号</th>' +
'<th>试验结果</th>'+
'</tr>'+
'</thead>'
html += '<tbody>';
if (data.length>0){
for (let i = 0; i < data.length; i++){
html += '<tr>' +
'<td>' + (i+1) + '</td>' +
'<td title="'+ data[i].devCode +'" style="cursor: pointer;" >' + data[i].devCode + '</td>' +
'<td title="'+ data[i].testResult +'" style="cursor: pointer;">' + data[i].testResult + '</td>' +
'</tr>';
}
}else{
html += '<tr>' +
'<td colspan="3" style="text-align: center">暂无数据</td>' +
'</tr>';
}
html += '</tbody>';
html += '</table>';
devOpenIndex = layer.open({
type: 0,
title: '设备信息',
area: ['300px', '300px'],
content: html,
btn: ['关闭'],
yes: function (index, layero) {
layer.close(index);
}
});
}
function getMouseout(){
// alert("鼠标移出");
// layer.close(devOpenIndex);
}
// 获取参数 // 获取参数
function getReqParams(page, limit, type) { function getReqParams(page, limit, type) {

View File

@ -121,6 +121,7 @@ function setTableData(data){
const rowNumber = index + 1; const rowNumber = index + 1;
// 赋值 // 赋值
$(`#devId-${rowNumber}`).val(item.id); $(`#devId-${rowNumber}`).val(item.id);
$(`#departmentId-${rowNumber}`).val(item.departmentId);
$(`#devCode-${rowNumber}`).val(item.devCode); $(`#devCode-${rowNumber}`).val(item.devCode);
$(`#manufacturer-${rowNumber}`).val(item.manufacturer); $(`#manufacturer-${rowNumber}`).val(item.manufacturer);
$(`#manufactureDate-${rowNumber}`).val(item.manufactureDate); $(`#manufactureDate-${rowNumber}`).val(item.manufactureDate);

View File

@ -127,7 +127,7 @@ function initTable(dataList, limit, page) {
},*/ },*/
{title: "操作", unresize: true, width: 300, align: "center", {title: "操作", unresize: true, width: 300, align: "center",
templet: function (d) { templet: function (d) {
return '<a href="#" style="color: blue;" onclick="testClick(\'' + d.id + '\',\''+d.customNum+'\')">试验</a>'; return '<a href="#" class="layui-icon layui-icon-set-sm" style="color: blue;cursor:pointer;" title="试验" onclick="testClick(\'' + d.id + '\',\''+d.customNum+'\')"></a>';
} }
}, },
], ],
@ -242,6 +242,7 @@ function query() {
} }
function reloadData() { function reloadData() {
temp_all_list.splice(0,temp_all_list.length)
pages(pageNum, limitSize); pages(pageNum, limitSize);
} }

View File

@ -51,6 +51,39 @@ function setParams(params) {
saveData(data); saveData(data);
}); });
var ins = selectInput.getInstance("#experDevName");
// 监听select 选择事件
ins.on('itemSelect(experDevName)', function(obj) {
var devId=JSON.stringify(ins.getValue().value).replace(/"/g, '');
getEcho(devId);
});
});
}
//下拉选回显
function getEcho(devId){
let url = dataUrl + '/sys/select/getDevices';
let obj = {
'id':devId
}
let params = {
encryptedData: encryptCBC(JSON.stringify(obj))
}
ajaxRequest(url, "POST", params, false, function () {
}, function (result) {
if (result.code === 200) {
console.log(result.data)
if(result.data.length>0){
$('#experDevModule').val(result.data[0].devModule);
$('#experDevCode').val(result.data[0].devCode);
$('#devContractDate').val(result.data[0].contractDate);
}
} else {
layer.alert(result.msg, {icon: 2})
}
}, function (xhr) {
error(xhr)
}); });
} }

View File

@ -201,18 +201,18 @@
<table class="layui-table" id="dynamicTable"> <table class="layui-table" id="dynamicTable">
<thead > <thead >
<tr> <tr>
<th style="width: 240px !important;" rowspan="2" class="center-aligned ">编号</th> <th rowspan="2" class="center-aligned ">编号</th>
<th style="width: 240px !important;" rowspan="2" class="center-aligned ">客户自编号</th> <th rowspan="2" class="center-aligned ">客户自编号</th>
<th style="width: 240px !important;" colspan="3" class="center-aligned ">样品信息</th> <th colspan="3" class="center-aligned ">样品信息</th>
<th style="width: 240px !important;" rowspan="2" class="center-aligned ">外观状态</th> <th rowspan="2" class="center-aligned ">外观状态</th>
<th style="width: 240px !important;" rowspan="2" class="center-aligned ">金额</th> <th rowspan="2" class="center-aligned ">金额</th>
<th style="width: 240px !important;" rowspan="2" class="center-aligned ">备注</th> <th rowspan="2" class="center-aligned ">备注</th>
</tr> </tr>
<tr> <tr>
<th style="width: 240px !important;" class="center-aligned ">生产厂家</th> <th class="center-aligned ">生产厂家</th>
<th style="width: 240px !important;" class="center-aligned ">生产日期</th> <th class="center-aligned ">生产日期</th>
<th style="width: 240px !important;" class="center-aligned ">规格型号</th> <th class="center-aligned ">规格型号</th>
</tr> </tr>
</thead> </thead>