试验管理

This commit is contained in:
lSun 2024-07-31 12:19:10 +08:00
parent 5c180f1e69
commit 99dc4b0baa
5 changed files with 702 additions and 7 deletions

View File

@ -306,11 +306,32 @@ function basisAdd() {
// 创建新的div元素
var newDiv = document.createElement('div');
newDiv.className = 'layui-inline basis';
newDiv.innerHTML = `
if(count!=2){
if (count % 2 === 0) {
newDiv.innerHTML = `
<label class="layui-form-label" style="padding: 9px 2px;"><i style="padding: 0 10px;">*</i></label>
<div class="layui-input-inline" id="basisName-${count}">
</div>
`;
} else {
newDiv.innerHTML = `
<label class="layui-form-label"><i style="padding: 0 10px;">*</i></label>
<div class="layui-input-inline" id="basisName-${count}">
</div>
`;
}
}else{
newDiv.innerHTML = `
<label class="layui-form-label"><i style="padding: 0 10px;">*</i></label>
<div class="layui-input-inline" id="basisName-${count}">
</div>
`;
}
// newDiv.innerHTML = `
// <label class="layui-form-label"><i style="padding: 0 10px;">*</i>试验依据</label>
// <div class="layui-input-inline" id="basisName-${count}">
// </div>
// `;
// 将新div插入到现有元素之后
var parent = devElems[count - 2].parentNode;
parent.insertBefore(newDiv, parent.querySelector('.btn-box'));

View File

@ -293,11 +293,29 @@ function basisAdd() {
// 创建新的div元素
var newDiv = document.createElement('div');
newDiv.className = 'layui-inline basis';
newDiv.innerHTML = `
if(count!=2){
if (count % 2 === 0) {
newDiv.innerHTML = `
<label class="layui-form-label" style="padding: 9px 2px;"><i style="padding: 0 10px;">*</i></label>
<div class="layui-input-inline" id="basisName-${count}">
</div>
`;
} else {
newDiv.innerHTML = `
<label class="layui-form-label"><i style="padding: 0 10px;">*</i></label>
<div class="layui-input-inline" id="basisName-${count}">
</div>
`;
}
}else{
newDiv.innerHTML = `
<label class="layui-form-label"><i style="padding: 0 10px;">*</i></label>
<div class="layui-input-inline" id="basisName-${count}">
</div>
`;
}
// 将新div插入到现有元素之后
var parent = devElems[count - 2].parentNode;
parent.insertBefore(newDiv, parent.querySelector('.btn-box'));

View File

@ -0,0 +1,654 @@
let form, layer, dtree, util, idParam, phoneParam, selectInput, laydate, table;
let arr = ['background', 'web', 'mobile', 'wx'];
let background, web, mobile, wx;
let data = [], appResList = [];
// 角色下拉选
let roleList;
let orgData;
var cols = []; // 初始化为空,因为我们将动态构建表头
function setParams(params) {
idParam = JSON.parse(params).id;
layui.config({
base: "../../../../js/layui-v2.6.8/dtree/", //此处路径请自行处理, 可以使用绝对路径
}).extend({
dtree: 'dtree',
selectInput: 'selectInput/selectInput'
}).use(['form', 'layer', 'dtree', 'util', 'selectInput', 'laydate', 'table'], function () {
layer = layui.layer;
laydate = layui.laydate;
form = layui.form;
util = layui.util;
dtree = layui.dtree;
selectInput = layui.selectInput;
table = layui.table;
laydate.render({
elem: '#devContractDate'
});
if (idParam) {
getTestById();
}
//设备类别
// getDicts("dev_code",'devTypeName',"","设备类别",30);
getDevCode()
//试验地点
getDicts("sy_local",'experLocal',"","试验地点",30);
//试验设备列表
// getDevList("devName-1" ,"","试验设备列表",30);
//设备名称
getDevList("experDevName" ,"","设备名称",30);
//试验依据
getDicts("sy_basis",'basisName-1',"","试验依据",30);
form.on('submit(formData)', function (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)
});
}
//设备类别
function getDevCode(){
let url = dataUrl + '/sys/select/getDicts';
let obj = {
'code':'dev_code'
}
let params = {
encryptedData: encryptCBC(JSON.stringify(obj))
}
ajaxRequest(url, "POST", params, false, function () {
}, function (result) {
if (result.code === 200) {
setSelectValue(result.data, 'devCode');
} else {
layer.alert(result.msg, {icon: 2})
}
}, function (xhr) {
error(xhr)
});
}
/*下拉选表单赋值*/
function setSelectValue(list, selectName) {
let html = '<option value="" selected>请选择</option>';
$.each(list, function (index, item) {
html += '<option value="' + item.value + '">' + item.name + '</option>';
})
$('#' + selectName).empty().append(html);
layui.form.render();
}
function getDicts(code,id,value,name,maxlength){
let url = dataUrl + '/sys/select/getDicts';
let obj = {
'code':code
}
let params = {
encryptedData: encryptCBC(JSON.stringify(obj))
}
ajaxRequest(url, "POST", params, false, function () {
}, function (result) {
if (result.code === 200) {
getSelect(result.data, id,value,name,maxlength);
} else {
layer.alert(result.msg, {icon: 2})
}
}, function (xhr) {
error(xhr)
});
}
//试验设备列表
function getDevList(id,value,name,maxlength) {
let url = dataUrl + '/sys/select/getDevices';
ajaxRequest(url, "POST", null, false, function () {
}, function (result) {
if (result.code === 200) {
let formattedData = result.data.map(({devName, devId}) => ({name: devName, value: devId}));
getSelect(formattedData, id,value,name,maxlength);
} else {
layer.alert(result.msg, {icon: 2})
}
}, function (xhr) {
error(xhr)
});
}
//新增标题
function titleAdd() {
// 获取当前已有的'dev'类元素
var devElems = document.querySelectorAll('.info');
var count = devElems.length +1 ;
// 创建新的div元素
var newDiv = document.createElement('div');
newDiv.className = 'info';
newDiv.style.marginTop = '2%';
newDiv.style.display='flex';
newDiv.style.flexDirection='column';
newDiv.style.border='1px solid #ccc';
newDiv.innerHTML = `
<div style="display: flex;">
<input lay-verify="required" type="text" class="layui-input" id="experTypeName-${count}" name="experTypeName-${count}" placeholder="请输入名称" style="border: 0px" maxlength="30" />
<input lay-verify="required" type="text" class="layui-input" id="amount-${count}" name="amount-${count}" placeholder="请输入金额" style="border: 0px" maxlength="6" />
<button class="layui-btn layui-btn-norma save" onclick="itemNameAdd(${count})" title="新增子标题">+</button>
<button class="layui-btn layui-btn-primary cancel" onclick="itemNameDel(${count})" title="删除子标题">-</button>
</div>
<div style="display: flex;width: 100%;overflow: auto;" class="subtitle-${count}">
<input lay-verify="required" placeholder="请输入名称" class="layui-input-dev" id="itemName-${count}-1" name="itemName-${count}-1" maxlength="30" >
</div>
`;
// 将新div插入到现有'dev'元素之后
var parent = devElems[count - 2].parentNode;
parent.insertBefore(newDiv, parent.querySelector('.btn-box'));
}
//删除标题
function titleDel() {
// 获取所有的'dev'类元素
var devElems = document.querySelectorAll('.info');
var count = devElems.length;
// 检查是否至少保留一个'dev'元素
if (count > 1) {
// 删除最后一个'dev'元素
devElems[count - 1].remove();
} else {
layer.msg('至少保留一个试验设备信息');
}
}
//新增子标题
function itemNameAdd(num) {
// 获取包含 input 元素的 div
var divElement = document.querySelector('.subtitle-'+num);
// 获取所有 input 元素
var inputs = divElement.querySelectorAll('input');
// 初始化最大 id 为0
var maxId = 0;
// 遍历所有 input 元素,找出最大的 id
inputs.forEach(function(input) {
var idParts = input.id.split('-');
if (idParts[0] === 'itemName' && !isNaN(idParts[1])) {
var idNum = parseInt(idParts[2], 10);
if (idNum > maxId) {
maxId = idNum;
}
}
});
// 创建一个新的 input 元素id为下一个数字
var newInput = document.createElement('input');
newInput.type = 'text';
newInput.setAttribute('lay-verify', 'required');
newInput.className = 'layui-input-dev';
newInput.placeholder = '请输入名称';
newInput.id = 'itemName-'+num+'-' + (maxId + 1);
newInput.name = 'itemName-'+num+'-' + (maxId + 1);
newInput.maxLength='30';
// 将新的 input 元素追加到 div 中
divElement.appendChild(newInput);
}
//删除子标题
function itemNameDel(num) {
// 获取包含 input 元素的 div
var divElement = document.querySelector('.subtitle-'+num);
// 获取所有的 input 元素
var inputs = divElement.querySelectorAll('input');
// 检查是否有超过一个 input 元素
if (inputs.length > 1) {
// 获取最后一个 input 元素
var lastInput = inputs[inputs.length - 1];
// 删除最后一个 input 元素
divElement.removeChild(lastInput);
}else{
layer.msg('至少保留一个子标题');
}
}
//新增试验设备列表
/*function devAdd() {
// 获取当前已有的'dev'类元素
var devElems = document.querySelectorAll('.dev');
var count = devElems.length +1 ;
// 创建新的div元素
var newDiv = document.createElement('div');
newDiv.className = 'layui-inline dev';
newDiv.innerHTML = `
<div class="layui-input-inline" id="devName-${count}">
</div>
`;
// 将新div插入到现有'dev'元素之后
var parent = devElems[count - 2].parentNode;
parent.insertBefore(newDiv, parent.querySelector('.btn-box'));
getDevList("devName-"+count,"","试验设备列表",30);
}*/
//删除试验设备列表
/*function devDel() {
// 获取所有的'dev'类元素
var devElems = document.querySelectorAll('.dev');
var count = devElems.length;
// 检查是否至少保留一个'dev'元素
if (count > 1) {
// 删除最后一个'dev'元素
devElems[count - 1].remove();
} else {
layer.msg('至少保留一个试验设备信息');
}
}*/
//新增试验依据
function basisAdd() {
// 获取当前已有的类元素
var devElems = document.querySelectorAll('.basis');
var count = devElems.length+1;
// 创建新的div元素
var newDiv = document.createElement('div');
newDiv.className = 'layui-inline basis';
if(count!=2){
if (count % 2 === 0) {
newDiv.innerHTML = `
<label class="layui-form-label" style="padding: 9px 17px;"><i style="padding: 0 10px;">*</i></label>
<div class="layui-input-inline" id="basisName-${count}">
</div>
`;
} else {
newDiv.innerHTML = `
<label class="layui-form-label"><i style="padding: 0 10px;">*</i></label>
<div class="layui-input-inline" id="basisName-${count}">
</div>
`;
}
}else{
newDiv.innerHTML = `
<label class="layui-form-label"><i style="padding: 0 10px;">*</i></label>
<div class="layui-input-inline" id="basisName-${count}">
</div>
`;
}
// 将新div插入到现有元素之后
var parent = devElems[count - 2].parentNode;
parent.insertBefore(newDiv, parent.querySelector('.btn-box'));
getDicts("sy_basis","basisName-" + count,"","试验依据",30);
}
//删除试验依据
function basisDel() {
// 获取所有类元素
var devElems = document.querySelectorAll('.basis');
var count = devElems.length;
if (count > 1) {
// 删除最后一个
devElems[count - 1].remove();
} else {
layer.msg('至少保留一个试验依据');
}
}
function saveData2() {
$('#formSubmit').trigger('click')
}
function saveData(data) {
//获取试验设备列表
// var devList = convertToDevList(data.field);
//试验依据列表
var yjList = convertToYjList(data.field);
//主要设备
var mainDevList = [{
"devTypeCode": "",
"devTypeName": "",
"experDevName": data.field["experDevName"],
"experDevModule": data.field["experDevModule"],
"experDevCode": data.field["experDevCode"],
"devContractDate": data.field["devContractDate"],
"experId": null
}];
//获取试验项内容列表
var items = convertToItems(data.field);
// 获取select元素
var selectElement = document.getElementById('devCode');
// 获取选中的option
var selectedOption = selectElement.options[selectElement.selectedIndex];
// 读取option的value和text
var value = selectedOption.value;
var text = selectedOption.text;
let paramsData = {
'yjList':yjList,
// 'devList':devList,
'mainDevList':mainDevList,
'items':items,
}
let obj = {
'id': data.field["id"],
'devTypeCode': value,
'devTypeName': text,
'devModule': data.field["devModule"],
'experLocalCode':'',
'experLocal': data.field["experLocal"],
'paramsData':paramsData
}
let loadingMsg = layer.msg('数据上传中,请稍候...', {icon: 16, scrollbar: false, time: 0});
let url = dataUrl + "/experimentStandard/addData";
let params = obj;
if(params.id !=""){
url = dataUrl + "/experimentStandard/editData";
}
params={
encryptedData:encryptCBC(JSON.stringify(params))
}
ajaxRequest(url, "POST", params, true, function () {
$('.save').addClass("layui-btn-disabled").attr("disabled", true);
$('.cancel').addClass("layui-btn-disabled").attr("disabled", true);
}, function (result) {
layer.close(loadingMsg); // 关闭提示层
if (result.code === 200) {
closePage(1);
parent.layer.msg(result.msg, {icon: 1});
} else {
layer.alert(result.msg, {icon: 2})
$('.save').removeClass("layui-btn-disabled").attr("disabled", false);
$('.cancel').removeClass("layui-btn-disabled").attr("disabled", false);
}
}, function (xhr) {
layer.close(loadingMsg); // 关闭提示层
$('.save').removeClass("layui-btn-disabled").attr("disabled", false);
$('.cancel').removeClass("layui-btn-disabled").attr("disabled", false);
error(xhr)
});
}
/*function convertToDevList(obj){
return Object.entries(obj)
.filter(([key, value]) => key.startsWith('devName-'))
.map(([key, value]) => ({
devTypeCode: "",
devTypeName: "", // 如果需要,可以在这里使用 key 或 value
devName: value,
devId: null
}));
}*/
function convertToYjList(obj){
return Object.entries(obj)
.filter(([key, value]) => key.startsWith('basisName-'))
.map(([key, value]) => ({
basisName: value,
}));
}
function convertToItems(obj){
var dataField = obj;
var items = [];
// 先收集所有的 experTypeName 键名,以便知道有多少个试验项
var experTypeNames = Object.keys(dataField).filter(key => key.startsWith('experTypeName-'));
var experTypeCount = experTypeNames.length;
// 预创建试验项对象,先不填充数据
for (let i = 0; i < experTypeCount; i++) {
items.push({
"experTypeCode": "",
"experTypeName": "",
"experNum": 0, // 将会在后面设置
"itemsSort": i + 1,
"amount": "",
"item": []
});
}
// 填充数据
experTypeNames.forEach(key => {
const experTypeIndex = key.split('-')[1];
const item = items[experTypeIndex - 1];
item.experTypeName = dataField[key];
item.amount = dataField['amount-' + experTypeIndex];
});
// 填充 itemName 数据
Object.keys(dataField).forEach(key => {
if (key.startsWith('itemName-')) {
const parts = key.split('-');
const experTypeIndex = parts[1];
const itemIndex = parts[2];
const itemNum = parseInt(itemIndex);
const itemName = dataField[key];
// 找到对应的试验项并添加试验项内容
items[experTypeIndex - 1].item.push({
"itemName": itemName,
"itemNum": itemNum
});
}
});
// 设置 experNum 为 item 数组的长度
items.forEach(item => {
item.experNum = item.item.length;
});
// 按照 itemsSort 排序
items.sort((a, b) => a.itemsSort - b.itemsSort);
return items;
}
function getTestById() {
let loadingMsg = layer.msg("数据加载中,请稍候...", {icon: 16, scrollbar: false, time: 0,});
let url = dataUrl + "/experimentStandard/viewData";
let params = {
id: idParam
}
params={
encryptedData:encryptCBC(JSON.stringify(params))
}
ajaxRequest(url, "POST", params, true, function () {
}, function (result) {
layer.close(loadingMsg); // 关闭提示层
if (result.code === 200) {
setFormData(result.data);
} else if (result.code === 500) {
layer.alert(result.msg, {icon: 2})
}
}, function (xhr) {
layer.close(loadingMsg); // 关闭提示层
error(xhr)
});
}
function setFormData(data) {
if (data) {
$('#id').val(data.id);
//设备类别
// getDicts("dev_code",'devTypeName',data.devTypeName,"设备类别",30);
$('#devCode option[value=' + data.devTypeCode + ']').attr('selected', true)
//设备规格
$('#devModule').val(data.devModule)
//试验地点
getDicts("sy_local",'experLocal',data.experLocal,"试验地点",30);
//试验设备列表
/*for (let i = 0; i < data.deviceVos.length; i++) {
var k = i+1;
if(k>1){
devAdd()
}
getDevList("devName-"+k ,data.deviceVos[i].devName,"试验设备列表",30);
}*/
//设备名称
getDevList("experDevName" ,data.mainDeviceVos[0].experDevName,"设备名称",30);
//设备型号
$('#experDevModule').val(data.mainDeviceVos[0].experDevModule)
//设备编号
$('#experDevCode').val(data.mainDeviceVos[0].experDevCode)
//合同生效日期
$('#devContractDate').val(data.mainDeviceVos[0].devContractDate)
//试验依据
for (let i = 0; i < data.basisVos.length; i++) {
var k = i+1;
if(k>1){
basisAdd()
}
getDicts("sy_basis",'basisName-'+k,data.basisVos[i].basisName,"试验依据",30);
}
//试验项信息
console.log(data);
console.log(data.configItemsVos);
for (let i = 0; i < data.configItemsVos.length; i++) {
var k = i+1;
//标题大于1
if(k>1){
// 新增一个标题
titleAdd();
}else{
}
// 循环判断子标题
for (let j = 0; j < data.configItemsVos[i].itemList.length; j++){
var kk = j+1;
//子标题大于1
if(kk>1){
//新增一个子标题
itemNameAdd(k);
}
}
}
// 赋值
data.configItemsVos.forEach((item, index) => {
const experTypeNameInput = document.getElementById(`experTypeName-${index + 1}`);
const amountInput = document.getElementById(`amount-${index + 1}`);
const subtitleContainer = document.querySelector(`.subtitle-${index + 1}`);
// 设置主标题和金额输入框的值
experTypeNameInput.value = item.experTypeName;
amountInput.value = item.amount;
// 清空现有的子标题输入框
while (subtitleContainer.firstChild) {
subtitleContainer.removeChild(subtitleContainer.firstChild);
}
// 添加子标题输入框
item.itemList.forEach((subItem, subIndex) => {
const inputElement = document.createElement('input');
inputElement.type = 'text';
inputElement.classList.add('layui-input-dev');
inputElement.setAttribute('lay-verify', 'required');
inputElement.setAttribute('placeholder', '请输入名称');
inputElement.setAttribute('name', `itemName-${index + 1}-${subIndex + 1}`);
inputElement.id = `itemName-${index + 1}-${subIndex + 1}`;
inputElement.value = subItem.itemName;
subtitleContainer.appendChild(inputElement);
});
});
// if(data.configItemsVos.length>1){
// for (let i = 0; i < data.configItemsVos.length; i++) {
//
// }
// }else{
// if(data.configItemsVos[0].itemList.length>2){
// for (let i = 0; i < data.configItemsVos[0].itemList.length; i++){
// var divElement = document.querySelector('.subtitle-1');
// // 创建一个新的 input 元素id为下一个数字
// var newInput = document.createElement('input');
// newInput.type = 'text';
// newInput.setAttribute('lay-verify', 'required');
// newInput.className = 'layui-input-dev';
// newInput.placeholder = '请输入名称';
// newInput.vlue = data.configItemsVos[0].itemList[i].itemName;
// newInput.id = 'itemName-1'+'-' + (3 + i);
// newInput.name = 'itemName-1'+'-' + (3 + i);
// // 将新的 input 元素追加到 div 中
// divElement.appendChild(newInput);
// }
// }else{
// for(let i = 0; i < data.configItemsVos[0].itemList.length; i++){
//
// }
// // $('#itemName-1-1').val(data.items[0].item.)
// // $('#itemName-1-2').val(data.items[0].item.devContractDate)
// }
// }
layui.form.render();
}
}
// 关闭页面
function closePage(type) {
let index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引
parent.layer.close(index); //再执行关闭
if (type === 1) {
parent.reloadData()
}
}

View File

@ -137,10 +137,12 @@
<div class="layui-input-inline" id="basisName-1">
</div>
</div>
<div class="btn-box">
<button class="layui-btn layui-btn-norma save" onclick="basisAdd()" title="新增试验依据">+</button>
<button class="layui-btn layui-btn-primary cancel" onclick="basisDel()" title="删除试验依据">-</button>
</div>
</div>
<div class="btn-box">
<button class="layui-btn layui-btn-norma save" onclick="basisAdd()" title="新增试验依据">+</button>
<button class="layui-btn layui-btn-primary cancel" onclick="basisDel()" title="删除试验依据">-</button>
</div>
<div style="width: 98%;margin-top: 2%;margin-left: 1%" >

View File

@ -179,6 +179,6 @@
<button class="layui-btn layui-btn-primary cancel" onclick="closePage()">取消</button>
</div>
</body>
<script src="../../../../js/basis/tools/child/addTestStandards.js" charset="UTF-8" type="text/javascript"></script>
<script src="../../../../js/basis/tools/child/checkTestStandards.js" charset="UTF-8" type="text/javascript"></script>
<script src="../../../../js/basis/tools/child/select.js" charset="UTF-8" type="text/javascript"></script>
</html>