From 99dc4b0baa291e88c9e460c0059583a3ab7a6b0f Mon Sep 17 00:00:00 2001 From: lSun <15893999301@qq.com> Date: Wed, 31 Jul 2024 12:19:10 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=95=E9=AA=8C=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/basis/standard/child/testForm.js | 23 +- .../js/basis/tools/child/addTestStandards.js | 20 +- .../basis/tools/child/checkTestStandards.js | 654 ++++++++++++++++++ .../basic/tools/child/addTestStandards.html | 10 +- .../basic/tools/child/checkTestStandards.html | 2 +- 5 files changed, 702 insertions(+), 7 deletions(-) create mode 100644 src/main/resources/static/js/basis/tools/child/checkTestStandards.js diff --git a/src/main/resources/static/js/basis/standard/child/testForm.js b/src/main/resources/static/js/basis/standard/child/testForm.js index 7f06ce4..be325bb 100644 --- a/src/main/resources/static/js/basis/standard/child/testForm.js +++ b/src/main/resources/static/js/basis/standard/child/testForm.js @@ -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 = ` + +
+
+ `; + } else { + newDiv.innerHTML = `
`; + } + }else{ + newDiv.innerHTML = ` + +
+
+ `; + } + // newDiv.innerHTML = ` + // + //
+ //
+ // `; // 将新div插入到现有元素之后 var parent = devElems[count - 2].parentNode; parent.insertBefore(newDiv, parent.querySelector('.btn-box')); diff --git a/src/main/resources/static/js/basis/tools/child/addTestStandards.js b/src/main/resources/static/js/basis/tools/child/addTestStandards.js index c8a36c9..cfd11a9 100644 --- a/src/main/resources/static/js/basis/tools/child/addTestStandards.js +++ b/src/main/resources/static/js/basis/tools/child/addTestStandards.js @@ -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 = ` + +
+
+ `; + } else { + newDiv.innerHTML = `
`; + } + }else{ + newDiv.innerHTML = ` + +
+
+ `; + } + + // 将新div插入到现有元素之后 var parent = devElems[count - 2].parentNode; parent.insertBefore(newDiv, parent.querySelector('.btn-box')); diff --git a/src/main/resources/static/js/basis/tools/child/checkTestStandards.js b/src/main/resources/static/js/basis/tools/child/checkTestStandards.js new file mode 100644 index 0000000..13606d4 --- /dev/null +++ b/src/main/resources/static/js/basis/tools/child/checkTestStandards.js @@ -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 = ''; + $.each(list, function (index, item) { + html += ''; + }) + $('#' + 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插入到现有'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插入到现有'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 = ` + +
+
+ `; + } else { + newDiv.innerHTML = ` + +
+
+ `; + } + }else{ + newDiv.innerHTML = ` + +
+
+ `; + } + + + // 将新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() + } +} \ No newline at end of file diff --git a/src/main/resources/static/pages/basic/tools/child/addTestStandards.html b/src/main/resources/static/pages/basic/tools/child/addTestStandards.html index cdc0bf3..e5d235d 100644 --- a/src/main/resources/static/pages/basic/tools/child/addTestStandards.html +++ b/src/main/resources/static/pages/basic/tools/child/addTestStandards.html @@ -137,10 +137,12 @@
-
- - -
+ + + +
+ +
diff --git a/src/main/resources/static/pages/basic/tools/child/checkTestStandards.html b/src/main/resources/static/pages/basic/tools/child/checkTestStandards.html index c7cd452..b3d5777 100644 --- a/src/main/resources/static/pages/basic/tools/child/checkTestStandards.html +++ b/src/main/resources/static/pages/basic/tools/child/checkTestStandards.html @@ -179,6 +179,6 @@
- + \ No newline at end of file