var example = null; var pers = null; var form,layer = null; function receiveParamsContract(params) { console.log("通过函数接收到的参数:", params) let id = params.id; let proId = params.proId; $("#id").val(id); $("#proId").val(proId); layui.use(['layer', 'form'], function () { layer = layui.layer; form = layui.form; pers = checkPermission(); //工序桩位下拉选 getGxs(proId,form) //小包干合同详情 getDetailByXbg(id) //小包干合同详情-工序桩位查询 initPositionTable(id); //小包干合同详情-人员信息 initStaffTable(id); //小包干合同详情- 修改记录 initRecordTable(id); }); }; function getDetailByXbg(id) { $.ajax({ type: 'get', url: smz_ht_url + '/dataCount/getDetailByXbg', data: { id: id }, async: false, success: function (data) { if(data.res==1 || data.res=="1" ){ let l = data.succeed; let workerCost = "技工:" + l.technicianWorkload + "普工:" + l.generalWorkerWorkload; $("#workerCost").text(workerCost); let num = l.technicianWorkload * l.technicianCost + l.generalWorkerWorkload * l.generalWorkerCost; let workload = l.technicianWorkload + "*" + l.technicianCost + "+" + l.generalWorkerWorkload + "*" + l.generalWorkerCost +"=" + num; $("#workload").text(workload); $("#contractCode").text(l.contractCode); $("#subName").text(l.subName); $("#partyUser").text(l.partyUser); $("#teamName").text(l.teamName); $("#contractMoney").text(l.contractMoney); $("#gxNum").text(l.gxNum); $("#contractDate").text(l.contractDate); if(l.contractStatus==1){ $("#contractStatus").text("终止"); }else{ $("#contractStatus").text("生效中"); } $("#attDayNum").text(l.attDayNum); $("#proName").text(l.proName); $("#totalNum").text(l.totalNum); $("#dateRange").text(l.dateRange); } }, error: function (err) { console.log("获取小包干合同详情列表出错:", err); } }); } function downloadContract(){ var contractId = $("#id").val(); var loadingIndex = layer.load(2, {shade: [0.3, '#000']}); $.ajax({ type: 'GET', url: smz_ht_url + '/teamSmallBagDryTreaty/downloadContract', data: { contractId: contractId, downloadType: "1" }, xhrFields: { responseType: 'blob' // 关键:设置响应类型为blob }, beforeSend: function(xhr) { var token = localStorage.getItem("smz-token"); if (token) { xhr.setRequestHeader('Authorization', 'Bearer ' + token); } }, success: function(data, textStatus, xhr) { layer.close(loadingIndex); // 获取文件名 var contentDisposition = xhr.getResponseHeader('Content-Disposition'); var filename = 'contract.pdf'; if (contentDisposition) { var filenameMatch = contentDisposition.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/); if (filenameMatch && filenameMatch[1]) { filename = filenameMatch[1].replace(/['"]/g, ''); try { filename = decodeURIComponent(filename); } catch (e) { // 解码失败使用原文件名 } } } // 创建下载链接 var url = window.URL.createObjectURL(data); var a = document.createElement('a'); a.href = url; a.download = filename; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); document.body.removeChild(a); layer.msg('下载成功'); }, error: function(xhr, textStatus, errorThrown) { layer.close(loadingIndex); } }); } var recordData = [ { "changeType": "作业范围", "beforeContent": "xxxxxxxxxxxxxxx", "afterContent": "xxxxxxxxxxxxxxx", "operator": "孙亮", "operateTime": "2025-05-06 10:20", "id": "1" }, { "changeType": "作业期限", "beforeContent": "计划开始备定作业日期:2025年06月10日\n计划结束备定作业日期:2026年06月10日", "afterContent": "计划开始备定作业日期:2025年06月12日\n计划结束备定作业日期:2026年06月11日", "operator": "孙亮", "operateTime": "2025-05-05 10:20", "id": "2" }, { "changeType": "作业范围", "beforeContent": "xxxxxxxxxxxxxxx", "afterContent": "xxxxxxxxxxxxxxx", "operator": "孙亮", "operateTime": "2025-05-06 10:20", "id": "3" }, { "changeType": "作业期限", "beforeContent": "计划开始备定作业日期:2025年06月10日\n计划结束备定作业日期:2026年06月10日", "afterContent": "计划开始备定作业日期:2025年06月12日\n计划结束备定作业日期:2026年06月11日", "operator": "孙亮", "operateTime": "2025-05-05 10:20", "id": "4" }, { "changeType": "作业范围", "beforeContent": "xxxxxxxxxxxxxxx", "afterContent": "xxxxxxxxxxxxxxx", "operator": "孙亮", "operateTime": "2025-05-06 10:20", "id": "5" }, { "changeType": "作业期限", "beforeContent": "计划开始备定作业日期:2025年06月10日\n计划结束备定作业日期:2026年06月10日", "afterContent": "计划开始备定作业日期:2025年06月12日\n计划结束备定作业日期:2026年06月11日", "operator": "孙亮", "operateTime": "2025-05-05 10:20", "id": "6" }, { "changeType": "作业范围", "beforeContent": "xxxxxxxxxxxxxxx", "afterContent": "xxxxxxxxxxxxxxx", "operator": "孙亮", "operateTime": "2025-05-06 10:20", "id": "7" }, { "changeType": "作业期限", "beforeContent": "计划开始备定作业日期:2025年06月10日\n计划结束备定作业日期:2026年06月10日", "afterContent": "计划开始备定作业日期:2025年06月12日\n计划结束备定作业日期:2026年06月11日", "operator": "孙亮", "operateTime": "2025-05-05 10:20", "id": "8" }, { "changeType": "作业范围", "beforeContent": "xxxxxxxxxxxxxxx", "afterContent": "xxxxxxxxxxxxxxx", "operator": "孙亮", "operateTime": "2025-05-06 10:20", "id": "9" }, { "changeType": "作业期限", "beforeContent": "计划开始备定作业日期:2025年06月10日\n计划结束备定作业日期:2026年06月10日", "afterContent": "计划开始备定作业日期:2025年06月12日\n计划结束备定作业日期:2026年06月11日", "operator": "孙亮", "operateTime": "2025-05-05 10:20", "id": "10" } ]; var positionTable, staffTable, recordTable; // 初始化岗位信息表格 function initPositionTable(id) { positionTable = $('#position-table').DataTable({ "searching": false, "processing": true, "serverSide": true, "pagingType": "full_numbers", "language": { "url": "../../../../js/plugin/datatables/Chinese.lang" }, "ajax": { "url": smz_ht_url + "/dataCount/getDetailGxListByXbg", "type": "POST", "data": function (d) { d.id = id; d.gxId = $("#gxId").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 = smz_ht_url + '/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]], "drawCallback": function() { var thisDataTable = $('#position-table').DataTable(); $("#position-table_wrapper .pagination").append("
  • " + "" + "确认
  • "); $('#dataTable-btn-position').click(function (e) { if ($("#changePagePosition").val() && $("#changePagePosition").val() > 0) { var redirectpage = $("#changePagePosition").val() - 1; } else { var redirectpage = 0; } thisDataTable.page(redirectpage).draw('page'); }); $("#changePagePosition").keypress(function (e) { if(event.keyCode==13){ if ($("#changePagePosition").val() && $("#changePagePosition").val() > 0) { var redirectpage = $("#changePagePosition").val() - 1; } else { var redirectpage = 0; } thisDataTable.page(redirectpage).draw('page'); } }); }, "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'>", "columns": [ { width: '40px', "orderable": false, data: function (row, type, set, meta) { var c = meta.settings._iDisplayStart + meta.row + 1; return c; } }, {"data": "gxName", "orderable": false, 'width': '120px'}, {"data": "gxZw", "orderable": false, 'width': '80px'}, {"data": "attPersonNum", "orderable": false, 'width': '80px'}, {"data": "attDayNum", "orderable": false, 'width': '80px'}, {"data": "attUserName", "orderable": false, 'width': '150px'}, { "data": "", 'width': '80px', "defaultContent": "", "orderable": false, "render": function (data, type, row) { var id = row['gxId']; var html = ''; return html } } ], "order": [] }); } /** * 小包干工序桩位详情 * */ function gxView(id) { var height = '85%'; var width = '91%'; var index = parent.layer.open({ title: ['小包干工序桩位详情','color:#3B70A1;background-color:#E8ECEB;font-size:20px'], type: 2, content: 'gxStatView.html', area: [width, height], maxmin: false, btn: ['关闭'], success: function (layero, index) { // 延迟执行,确保 iframe 完全加载 setTimeout(() => { var iframe = layero.find("iframe")[0] if (iframe && iframe.contentWindow && iframe.contentWindow.receiveParamsGx) { iframe.contentWindow.receiveParamsGx({ id: id, }) } }, 100) } }); } // 初始化人员信息表格 function initStaffTable(id) { staffTable = $('#staff-table').DataTable({ "searching": false, "processing": true, "serverSide": true, "pagingType": "full_numbers", "language": { "url": "../../../../js/plugin/datatables/Chinese.lang" }, "ajax": { "url": smz_ht_url + "/dataCount/getDetailPersonListByXbg", "type": "POST", "data": function (d) { d.id = id; d.userName = $("#userName").val(); d.entryAndExitStatus = $("#entryAndExitStatus").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 = smz_ht_url + '/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]], "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'>", "drawCallback": function() { var thisDataTable = $('#staff-table').DataTable(); $("#staff-table_wrapper .pagination").append("
  • " + "" + "确认
  • "); $('#dataTable-btn-staff').click(function (e) { if ($("#changePageStaff").val() && $("#changePageStaff").val() > 0) { var redirectpage = $("#changePageStaff").val() - 1; } else { var redirectpage = 0; } thisDataTable.page(redirectpage).draw('page'); }); $("#changePageStaff").keypress(function (e) { if(event.keyCode==13){ if ($("#changePageStaff").val() && $("#changePageStaff").val() > 0) { var redirectpage = $("#changePageStaff").val() - 1; } else { var redirectpage = 0; } thisDataTable.page(redirectpage).draw('page'); } }); }, "columns": [ { "width": '40px', "orderable": false, data: function (row, type, set, meta) { var c = meta.settings._iDisplayStart + meta.row + 1; return c; } }, {"data": "userName", "orderable": false, 'width': '80px'}, {"data": "phone", "orderable": false, 'width': '120px'}, {"data": "postName", "orderable": false, 'width': '120px'}, {"data": "attDayNum", "orderable": false, 'width': '80px'}, {"data": "gxNum", "orderable": false, 'width': '80px'}, {"data": "entryAndExitStatus", "orderable": false, 'width': '80px'}, { "data": "", 'width': '80px', "defaultContent": "", "orderable": false, "render": function (data, type, row) { // var idCard = row['idCard']; // var html = ''; var html = ""; return html } } ], "order": [] }); } /** * 小包干人员详情 * */ function personnelView(item) { let idCard = item.idCard var height = '85%'; var width = '91%'; var index = parent.layer.open({ title: ['小包干人员详情','color:#3B70A1;background-color:#E8ECEB;font-size:20px'], type: 2, content: 'personnelStatView.html', area: [width, height], maxmin: false, btn: ['关闭'], success: function (layero, index) { // 延迟执行,确保 iframe 完全加载 setTimeout(() => { var iframe = layero.find("iframe")[0] if (iframe && iframe.contentWindow && iframe.contentWindow.receiveParamsPersonnel) { iframe.contentWindow.receiveParamsPersonnel({ idCard: idCard, }) } }, 100) } }); } // 初始化修改记录表格 function initRecordTable(id) { recordTable = $('#record-table').DataTable({ "searching": false, "processing": true, "serverSide": true, "pagingType": "full_numbers", "language": { "url": "../../../../js/plugin/datatables/Chinese.lang" }, "ajax": { "url": smz_ht_url + "/dataCount/getDetailUpdateRecordList", "type": "POST", "data": function (d) { d.id = id; d.operType = $("#operType").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 = smz_ht_url + '/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]], "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'>", "drawCallback": function() { var thisDataTable = $('#record-table').DataTable(); $("#record-table_wrapper .pagination").append("
  • " + "" + "确认
  • "); $('#dataTable-btn-record').click(function (e) { if ($("#changePageRecord").val() && $("#changePageRecord").val() > 0) { var redirectpage = $("#changePageRecord").val() - 1; } else { var redirectpage = 0; } thisDataTable.page(redirectpage).draw('page'); }); $("#changePageRecord").keypress(function (e) { if(event.keyCode==13){ if ($("#changePageRecord").val() && $("#changePageRecord").val() > 0) { var redirectpage = $("#changePageRecord").val() - 1; } else { var redirectpage = 0; } thisDataTable.page(redirectpage).draw('page'); } }); }, "columns": [ { width: '40px', "orderable": false, data: function (row, type, set, meta) { var c = meta.settings._iDisplayStart + meta.row + 1; return c; } }, {"data": "", "orderable": false, 'width': '100px', "render": function (data, type, row) { var types = row['type']; if (types == 1) { return "作业范围"; } else if (types == 2) { return "作业内容"; } else if (types == 3) { return "作业期限"; } else if (types == 4) { return "协议价"; } } }, {"data": "", "orderable": false, 'width': '200px', "render": function (data, type, row) { try { const beforeData = JSON.parse(row.beforeData || '{}'); const t = row.type; if (t == 2 && beforeData.gxInfo) { // 作业内容 - 更改前 return beforeData.gxInfo.replace(/\n/g, '
    '); } else if (t == 3 && isValidTimestamp(beforeData.plan_start_time) && isValidTimestamp(beforeData.plan_end_time)) { // 作业期限 - 更改前 return `开始时间: ${timestampToDateString(beforeData.plan_start_time)}
    结束时间: ${timestampToDateString(beforeData.plan_end_time)}`; } else if (t == 4 && beforeData.contract_money) { // 协议价 - 更改前 return `小写金额: ${beforeData.contract_money}
    大写金额: ${beforeData.contract_money_max || ''} `; } else if (t == 1 && Array.isArray(beforeData.gxList)) { // // 工序桩位 - 更改前 // let html = ''; // beforeData.gxList.forEach(item => { // html += `包干工序: ${item.gxName}
    桩位: ${item.gxZw}

    `; // }); // return html || '无变更'; // 工序桩位 - 更改前 (按工序分组) const groupedData = {}; beforeData.gxList.forEach(item => { if (!groupedData[item.gxName]) { groupedData[item.gxName] = []; } groupedData[item.gxName].push(item.gxZw); }); let html = ''; Object.keys(groupedData).forEach(gxName => { html += `${gxName}:${groupedData[gxName].join(',')}
    `; }); return html || '无变更'; } else { return '暂无数据'; } } catch (e) { console.error("beforeData 解析失败", e); return '解析失败'; } } }, {"data": "", "orderable": false, 'width': '200px', "render": function (data, type, row) { try { const afterData = JSON.parse(row.afterData || '{}'); const t = row.type; if (t == 2 && afterData.gxInfo) { // 作业内容 - 更改后 return afterData.gxInfo.replace(/\n/g, '
    '); } else if (t == 3 && afterData.plan_start_time && afterData.plan_end_time) { // 作业期限 - 更改后 return `开始时间: ${timestampToDateString(afterData.plan_start_time)}
    结束时间: ${timestampToDateString(afterData.plan_end_time)}`; } else if (t == 4 && afterData.contract_money) { // 协议价 - 更改后 return `小写金额: ${afterData.contract_money}
    大写金额: ${afterData.contract_money_max || ''}`; } else if (t == 1 && Array.isArray(afterData.gxList)) { // // 工序桩位 - 更改后 // let html = ''; // afterData.gxList.forEach(item => {html += `包干工序: ${item.gxName}
    桩位: ${item.gxZw}

    `;}); // return html || '无变更'; // 工序桩位 - 更改后 (按工序分组) const groupedData = {}; afterData.gxList.forEach(item => { if (!groupedData[item.gxName]) { groupedData[item.gxName] = []; } groupedData[item.gxName].push(item.gxZw); }); let html = ''; Object.keys(groupedData).forEach(gxName => { html += `${gxName}:${groupedData[gxName].join(',')}
    `; }); return html || '无变更'; } else { return '暂无数据'; } } catch (e) { console.error("afterData 解析失败", e); return '解析失败'; } } }, {"data": "operUser", "orderable": false, 'width': '80px'}, {"data": "operTime", "orderable": false, 'width': '120px'} ], "order": [] }); } // 判断是否为有效时间戳(数字且大于0) function isValidTimestamp(ts) { return typeof ts === 'number' && ts > 0 && !isNaN(ts); } // 时间戳转 yyyy-MM-dd 字符串 function timestampToDateString(timestamp) { const date = new Date(parseInt(timestamp)); const year = date.getFullYear(); const month = ('0' + (date.getMonth() + 1)).slice(-2); const day = ('0' + date.getDate()).slice(-2); return `${year}-${month}-${day}`; } // 搜索功能 function searchPosition() { positionTable.ajax.reload(); } function resetPosition() { $('#gxId').val(''); // 重新渲染 select 下拉框 layui.form.render("select"); positionTable.ajax.reload(); } function exportPosition() { var id = $('#id').val(); var gxId = $('#gxId').val(); var token = localStorage.getItem("smz-token"); var loadingMsg = layer.msg('下载中,请稍候...', {icon: 16, scrollbar: false, time: 0}); var url = smz_ht_url + "/dataCount/downloadDetailGxListByXbg?id=" + id +"&gxId=" + gxId + "&token=" + token; var xhr = new XMLHttpRequest(); xhr.open("get", url, true); xhr.responseType = "blob"; // 转换流 xhr.onload = function () { layer.close(loadingMsg); if (this.status === 200) { var blob = this.response; var a = document.createElement("a"); var url = window.URL.createObjectURL(blob); a.href = url; a.download = "小包干合同详情-工序桩位导出列表.xlsx"; // 文件名 }else { layer.msg('发生异常,请稍后重试', {icon: 16, scrollbar: false, time: 2000}); } a.click() window.URL.revokeObjectURL(url) }; xhr.send(); } function searchStaff() { staffTable.ajax.reload(); } function resetStaff() { $('#userName').val(''); $('#entryAndExitStatus').val(''); staffTable.ajax.reload(); } function exportStaff() { var id = $('#id').val(); var entryAndExitStatus = $('#entryAndExitStatus').val(); var userName = $('#userName').val(); var token = localStorage.getItem("smz-token"); var loadingMsg = layer.msg('下载中,请稍候...', {icon: 16, scrollbar: false, time: 0}); var url = smz_ht_url + "/dataCount/downloadDetailPersonByXbgExcel?id=" + id +"&entryAndExitStatus=" + entryAndExitStatus +"&userName=" + userName + "&token=" + token; var xhr = new XMLHttpRequest(); xhr.open("get", url, true); xhr.responseType = "blob"; // 转换流 xhr.onload = function () { layer.close(loadingMsg); if (this.status === 200) { var blob = this.response; var a = document.createElement("a"); var url = window.URL.createObjectURL(blob); a.href = url; a.download = "小包干合同详情-人员信息导出.xlsx"; // 文件名 }else { layer.msg('发生异常,请稍后重试', {icon: 16, scrollbar: false, time: 2000}); } a.click() window.URL.revokeObjectURL(url) }; xhr.send(); } function searchRecord() { recordTable.ajax.reload(); } function resetRecord() { $('#operType').val(''); recordTable.ajax.reload(); } function exportRecord() { var id = $('#id').val(); var operType = $('#operType').val(); var token = localStorage.getItem("smz-token"); var loadingMsg = layer.msg('下载中,请稍候...', {icon: 16, scrollbar: false, time: 0}); var url = smz_ht_url + "/dataCount/downloadDetailUpdateRecordExcel?id=" + id +"&operType=" + operType + "&token=" + token; var xhr = new XMLHttpRequest(); xhr.open("get", url, true); xhr.responseType = "blob"; // 转换流 xhr.onload = function () { layer.close(loadingMsg); if (this.status === 200) { var blob = this.response; var a = document.createElement("a"); var url = window.URL.createObjectURL(blob); a.href = url; a.download = "工序桩位.xlsx"; // 文件名 }else { layer.msg('发生异常,请稍后重试', {icon: 16, scrollbar: false, time: 2000}); } a.click() window.URL.revokeObjectURL(url) }; xhr.send(); }