var example = null; var pers = null; var form = null; var lumpSumContractId = localStorage.getItem("lumpSumContractId"); var lumpSumType = localStorage.getItem("lumpSumType"); var gxListArr=[]; var selectedGxListInParent = [];// 父页面存储已选数据 var deletedGxList = []; // 用于存储被删除的数据 layui.use(['layer', 'laydate', 'form'], function () { form = layui.form; form.render(); form.verify(); pers = checkPermission(); $(document).ready(function() { init(); // 初始化表格 }); $("#searchBt").click(function () { example.ajax.reload(); }); //重置 $("#resetBt").click(function () { $("#gxName").val(""); $("#pilePosition").val(""); gxListArr=[]; selectedGxListInParent = [];// 父页面存储已选数据 example.ajax.reload(); }); form.on('submit(formDemo)', function (data) { const table = $('#dt-table').DataTable(); const rowsData = table.rows().data().toArray(); // 获取所有行数据 if (rowsData.length === 0) { layer.msg("没有可保存的数据", { icon: 2, time: 2000 }); return; } const gxList = rowsData.map(row => ({ gxId: row.gxId, // 表格行中的 id 字段作为 gxId gxName: row.gx, // 包干工序字段 gxZw: row.pilePosition // 桩位字段 })); // 构造最终对象 const submitData = { id: lumpSumContractId, // 转换为整数 type: "1", gxList: gxList }; // 提交到后端 $.ajax({ url: ctxPath + "/teamSmallBagDryTreaty/operContract", // 替换为你的实际接口 type: 'POST', contentType: 'application/json', data: JSON.stringify(submitData), success: function (res) { if (res.res === 1) { layer.msg("保存成功", { icon: 1, time: 2000 }); setTimeout("reloading()", 2001); } else { layer.msg(res.resMsg || "保存失败", { icon: 2, time: 2000 }); } }, error: function (xhr, status, error) { console.error("保存失败:", error); layer.msg("网络错误,请重试", { icon: 5, time: 2000 }); } }); return false; // 阻止表单刷新页面 }); }); function init() { example = $('#dt-table').DataTable({ "searching": false, // 禁用搜索 "processing": true, // 加载数据时显示进度状态 "serverSide": false, 'scrollY': "640px", 'scroller': true, 'scrollCollapse': true, 'deferRender': true, "language": { "url": ctxPath + "/js/plugin/datatables/Chinese.lang" }, "ajax": { "url": ctxPath + "/commonSelect/getGxPilePositions", "type": "get", "dataSrc": function (res) { if (res.res === 1) { return res.obj; // 使用 obj 作为数据源 } else { layer.msg(res.resMsg || '数据加载失败'); return []; } }, "data": function (d) { d.contractId = lumpSumContractId; d.type = lumpSumType; d.gxName = $("#gxName").val(); d.pilePosition = $("#pilePosition").val(); }, "error": function (xhr, textStatus, errorThrown) { var msg = xhr.responseText; console.log(msg); var response = JSON.parse(msg); var code = response.code; var message = response.message; if (code == 400) { layer.msg(message); } else if (code == 401) { localStorage.removeItem("token"); layer.msg("token过期,请先登录", {shift: -1, time: 1000}, function () { location.href = ctxPath + '/login.html'; }); } else if (code == 403) { console.log("未授权:" + message); layer.msg('未授权'); } else if (code == 500) { console.log('系统错误:' + message); } } }, "lengthMenu": [ [10, 20, 50], [10, 20, 50] ], // 设置每页显示数据量选项 "paging": false, // 禁用分页 "ordering": false, // 禁用排序 "drawCallback": function() { // 这里可以根据需要进行额外的处理 }, "dom": "<'dt-toolbar'r>t<'dt-toolbar-footer'<'col-sm-4 col-xs-4 hidden-xs'i><'col-xs-8 col-sm-8' p v>><'dt-table-length'l>", "columns": [ { "width": "5%", "orderable": false, data: function (row, type, set, meta) { var c = meta.settings._iDisplayStart + meta.row + 1; return c; } }, { "data": "gx", "width": "5%", "defaultContent": "" // 如果字段缺失,默认显示空字符串 }, { "data": "pilePosition", "width": "6%", "defaultContent": "" // 如果字段缺失,默认显示空字符串 }, { "data": "", "defaultContent": "", "orderable": false, "width": "10%", "render": function (data, type, row) { var id = row['id']; var gx = row['gx']; var gxId = row['gxId']; var pilePosition = row['pilePosition']; var clockStatus = row['clockStatus']; var html = ''; if (clockStatus == 1){ html += '不可操作'; }else{ html += buttonDelView(id, "", pers); } return html; } }, ], "order": [] // 在栏目列上显示排序功能 }); } function buttonDelView(id, permission, pers) { if (permission != "") { if ($.inArray(permission, pers) < 0) { return ""; } } var btn = $(""); return btn.prop("outerHTML"); } /** * 删除工程 * */ function delView(id) { layer.confirm("确定删除吗?", function (index) { const table = $('#dt-table').DataTable(); // 遍历所有行,找到匹配 id 的行并删除 table.rows().every(function () { const data = this.data(); if(data){ if (data.id == id) { // 从 selectedGxListInParent 中移除对应的项 selectedGxListInParent = selectedGxListInParent.filter(item => item.gxId !== data.id); table.row(this.index()).remove().draw(); // 删除该行并重绘表格 } } }); layer.close(index); // 关闭确认框 }) } /** * 新增选择包干工序及桩位 */ function lumpSumAdd(){ localStorage.setItem("lumpSumType", "1") // 获取当前表格中所有数据 const table = $('#dt-table').DataTable(); const allData = table.rows().data().toArray(); let index = layer.open({ title: ['选择包干工序及桩位', 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'], type: 2, content: 'lumpSumAddForm.html', area: ['90%', '90%'], maxmin: false, btn: ['确定','关闭'], success: function(layero, index){ var myIframe = window[layero.find('iframe')[0]['name']]; var fnc = myIframe.receiveDataFromParent(JSON.stringify(selectedGxListInParent)); //aaa()为子页面的方法 }, yes: function (index, layero) { // 获取弹出层中的form表单元素 var formSubmit = layer.getChildFrame('form', index); var submited = formSubmit.find('button')[1]; submited.click(); }, }); } function receiveDataFromChild(gxList,resultStrings) { selectedGxListInParent = JSON.parse(gxList); // 更新父页面缓存 console.log('收到子页面数据:', gxList); console.log('收到子页面数据groupedData:', resultStrings); const cleaned = JSON.parse(resultStrings).map(item => item.replace(/\s+/g, '')); // 第二步:处理每一项,生成标准化格式 const formatted = cleaned.map(item => { // 使用正则提取工序名 和 桩位列表 const nameMatch = item.match(/^([\u4e00-\u9fa5]+)(?:工序)/); const pileMatch = item.match(/桩位(.*)/); if (!nameMatch || !pileMatch) return item; const gxName = nameMatch[1]; // 工序名 let piles = pileMatch[1]; // 桩位字符串 // 去重 + 排序(可选) const uniquePiles = [...new Set(piles.split(','))].filter(Boolean).join(','); // 返回标准格式 return `${gxName}工序${uniquePiles}桩位`; }); if(formatted.length > 0){ $("#gxList").val("1"); } gxListArr = formatGxList(gxList); selectedGxList(gxListArr) } function selectedGxList(gxListArr) { const table = $('#dt-table').DataTable(); // 清除之前追加的数据 table.rows().every(function () { const data = this.data(); if (data.added) { table.row(this.index()).remove(); } }); // 遍历数据并追加到表格 gxListArr.forEach(item => { // 构造一行数据对象,对应 columns 定义的字段 const rowData = { id: item.gxId, gx: item.gxName, pilePosition: item.gxZw, gxId: item.gxId, clockStatus: 0 // 新增项默认可操作 }; // 检查是否已存在相同 id 的记录,避免重复添加 const existingRows = table.rows().data(); let exists = false; for (let i = 0; i < existingRows.length; i++) { if (existingRows[i].id === rowData.id) { exists = true; break; } } if (!exists) { table.row.add(rowData).draw(); // 追加新行 } }); } function formatGxList(gxListStr) { try { const parsed = JSON.parse(gxListStr); console.log('格式化后的数据:', parsed) return parsed.map(item => ({ gxId: item.gxId.trim(), // 直接取并去空格 gxName: item.gxName.trim(), gxZw: item.gxZw.trim() })); } catch (e) { console.error("JSON 解析失败", e); return []; } } function reloading() { var index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引 parent.layer.close(index); //再执行关闭 window.parent.location.reload(); }