var example = null; var pers = null; var form = null; let moreOptionsTimeout; let currentMenu = null; // 当前打开的菜单 let currentBtn = null; // 当前打开菜单的按钮 layui.use(['layer', 'form'], function () { var layer = layui.layer; form = layui.form; form.render(); form.verify(); pers = checkPermission(); init(); $("#searchBt").click(function () { example.ajax.reload(); }); $(document).ready(function () { getPro(); // 初始化时加载工程下拉列表 // 点击 .more-btn 显示/隐藏菜单 $(document).on('click', '.more-btn', function (e) { e.stopPropagation(); // 阻止事件冒泡到 document var $btn = $(this); var id = $btn.data('id'); var proId = $btn.data('pro-id'); var contractStatus = $btn.data('contract-status'); // 如果点击的是当前已打开菜单的按钮,则关闭它 if (currentBtn && currentBtn.is($btn) && currentMenu) { currentMenu.remove(); currentMenu = null; currentBtn = null; return; } // 移除旧菜单和样式 if (currentMenu) { currentMenu.remove(); } // 创建新的 moreOptions 菜单 var moreOptions = $("
"); if (contractStatus == 0) { moreOptions.append(buttonScopeAdjustView(id, proId, "", pers)); moreOptions.append(buttonContentAdjustView(id, "", pers)); moreOptions.append(buttonPeriodAdjustView(id, "", pers)); moreOptions.append(buttonPriceAdjustView(id, "", pers)); moreOptions.append(buttonProtocolTerminateView(id, "", pers)); moreOptions.append(buttonDelView(id, "", pers)); } moreOptions.append(buttonAdjustRecordView(id, "", pers)); $btn.after(moreOptions); // 插入到 .more-btn 后面 // 更新当前状态 currentMenu = moreOptions; currentBtn = $btn; }); // 点击文档空白处关闭菜单 $(document).on('click', function (e) { if (!$(e.target).closest('.more-btn, .more-options').length && currentMenu) { currentMenu.remove(); currentMenu = null; currentBtn = null; } }); // 更多按钮悬停效果 /*$(document).on('mouseenter', '.more-btn', function () { var $btn = $(this); var id = $btn.data('id'); var proId = $btn.data('proId'); var contractStatus = $btn.data('contractStatus'); // 清除之前的定时器 if (moreOptionsTimeout) clearTimeout(moreOptionsTimeout); // 如果已经存在就不重复创建 if ($btn.next('.more-options').length === 0) { var moreOptions = $("
"); // 添加各个功能按钮 moreOptions.append(buttonScopeAdjustView(id,proId, "", pers)); moreOptions.append(buttonContentAdjustView(id, "", pers)); moreOptions.append(buttonPeriodAdjustView(id, "", pers)); moreOptions.append(buttonPriceAdjustView(id, "", pers)); moreOptions.append(buttonAdjustRecordView(id, "", pers)); if(contractStatus == 0){ moreOptions.append(buttonProtocolTerminateView(id, "", pers)); } moreOptions.append(buttonDelView(id, "", pers)); $btn.after(moreOptions); // 插到 .more-btn 后面 } }); $(document).on('mouseleave', '.more-btn', function () { var $btn = $(this); startHideTimer($btn.next('.more-options')); }); // 鼠标进入 下拉菜单:不关闭 $(document).on('mouseenter', '.more-options', function () { if (moreOptionsTimeout) clearTimeout(moreOptionsTimeout); }); // 鼠标离开 下拉菜单:准备关闭 $(document).on('mouseleave', '.more-options', function () { startHideTimer($(this)); });*/ // 开始计时器用于关闭菜单 function startHideTimer($menu) { if (moreOptionsTimeout) clearTimeout(moreOptionsTimeout); moreOptionsTimeout = setTimeout(function () { $menu.remove(); }, 200); } }); }); //重置 $("#resetBt").click(function () { $("#proId").val(""); $("#contractCode").val(""); $("#subName").val(""); $("#partyUser").val(""); $("#teamName").val(""); // 重新渲染 select 下拉框 layui.form.render("select"); example.ajax.reload(); }); //查询 function init() { example = $('#dt-table').DataTable({ "searching": false, "processing": true, //加载数据时显示进度状态 "serverSide": true, "pagingType": "full_numbers", //首页|尾页 "language": { "url": ctxPath + "/js/plugin/datatables/Chinese.lang" }, "ajax": { "url": ctxPath + "/teamSmallBagDryTreaty/getList", "type": "post", "data": function (d) { d.proId = $("#proId").val(); d.contractCode = $("#contractCode").val(); d.subName = $("#subName").val(); d.partyUser = $("#partyUser").val(); d.teamName = $("#teamName").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]], // 设置每页显示数据量选项 "drawCallback": function () { // alert( '表格重绘了' ); var thisDataTable = $('#dt-table').DataTable(); $(".pagination").append("
  • " + "" + "确认
  • "); //点击按钮跳转指定页数 $('#dataTable-btn').click(function (e) { if ($("#changePage").val() && $("#changePage").val() > 0) { var redirectpage = $("#changePage").val() - 1; } else { var redirectpage = 0; } thisDataTable.page(redirectpage).draw('page'); }); //敲击回车键跳转指定页数 $("#changePage").keypress(function (e) { if (event.keyCode == 13) { if ($("#changePage").val() && $("#changePage").val() > 0) { var redirectpage = $("#changePage").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'l>", "columns": [ { "width": "5%", "orderable": false, data: function (row, type, set, meta) { var c = meta.settings._iDisplayStart + meta.row + 1; return c; } }, {"data": "contractCode", "orderable": false, "defaultContent": ""}, {"data": "proName", "orderable": false, "defaultContent": ""}, {"data": "subName", "orderable": false, "defaultContent": ""}, {"data": "teamName", "orderable": false, "defaultContent": ""}, {"data": "partyUser", "orderable": false, "defaultContent": ""}, { "data": "", "orderable": false, "defaultContent": "", "render": function (data, type, row) { var planStartTime = row['planStartTime']; var planEndTime = row['planEndTime']; return planStartTime + "~" + planEndTime; } }, {"data": "contractMoney", "orderable": false, "defaultContent": ""}, {"data": "contractDate", "orderable": false, "defaultContent": ""}, { "data": "", "orderable": false, "defaultContent": "", "render": function (data, type, row) { var contractStatus = row['contractStatus']; if (contractStatus == 1) { return "已终止"; } else if (contractStatus == 0) { return "生效中"; } } }, { "data": "", "defaultContent": "", "orderable": false, "width": "10%", "render": function (data, type, row) { var id = row['id']; var proId = row['proId']; var contractStatus = row['contractStatus']; var html = ''; html += buttonDetailView(id, "", pers); html += buttonMoreView(id,proId,contractStatus, "", pers); return html; } }, ], "order": [] //在栏目列上显示排序功能 }); } //添加数据 function insertTeamPackageload() { let index = layer.open({ title: ['包干合同模版预览', 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'], type: 2, content: 'teamPackageManageForm.html', area: ['90%', '90%'], maxmin: false, }); } // 详情按钮 function buttonDetailView(id, permission, pers) { if (permission != "") { if ($.inArray(permission, pers) < 0) { return ""; } } var btn = $(""); return btn.prop("outerHTML"); } /** * 详情 * */ function detailView(id) { layer.open({ title: ['详情', 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'], type: 2, content: 'teamPackageManageDetailForm.html', area: ['90%', '90%'], maxmin: false, btn: ['关闭'], success: function (layero, index) { var myIframe = window[layero.find('iframe')[0]['name']]; myIframe.selectDetail(id); //aaa()为子页面的方法 }, }); } // 更多按钮 function buttonMoreView(id,proId,contractStatus, permission, pers) { if (permission != "") { if ($.inArray(permission, pers) < 0) { return ""; } } var btn = $(""); return btn.prop("outerHTML"); } /** * 删除工程 * */ function delView(id) { closeView() layer.confirm("确定删除吗?", function () { $.ajax({ type: 'post', url: ctxPath + '/teamSmallBagDryTreaty/delData', data: {contractId: id}, dataType: 'json', success: function (data) { if (data.resMsg == "操作成功") { layer.alert('删除成功', {icon: 1}); example.ajax.reload(); // 刷新页面 } else { layer.msg(data.resMsg, {icon: 2}); example.ajax.reload(); // 刷新页面 } } }) }) } /** * 获取工程 * */ function getPro() { $("#proId").html(""); $.ajax({ type: 'post', url: ctxPath + '/totalProWorkloadManage/getProName', data: {}, async: false, success: function (data) { var html = ''; for (var i = 0; i < data.data.length; i++) { html += ''; } $("#proId").html(html); form.render(); //这里就是我们要渲染的地方了 } }) } //导出excel表格 function exportTeamPackage() { var proId = $("#proId").val(); var contractCode = $("#contractCode").val(); var subName = $("#subName").val(); var partyUser = $("#partyUser").val(); var teamName = $("#teamName").val(); var token = localStorage.getItem("token"); var loadingMsg = layer.msg('下载中,请稍候...', {icon: 16, scrollbar: false, time: 0}); var url = ctxPath + "/teamSmallBagDryTreaty/downloadExcel?proId=" + proId + "&contractCode=" + contractCode + "&subName=" + subName + "&partyUser=" + partyUser + "&teamName=" + teamName + "&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 buttonScopeAdjustView(id,proId, permission, pers) { if (permission != "") { if ($.inArray(permission, pers) < 0) { return ""; } } var btn = $(""); return btn.prop("outerHTML"); } // 作业内容调整按钮 function buttonContentAdjustView(id, permission, pers) { if (permission != "") { if ($.inArray(permission, pers) < 0) { return ""; } } var btn = $(""); return btn.prop("outerHTML"); } // 作业期限调整按钮 function buttonPeriodAdjustView(id, permission, pers) { if (permission != "") { if ($.inArray(permission, pers) < 0) { return ""; } } var btn = $(""); return btn.prop("outerHTML"); } // 协议价调整按钮 function buttonPriceAdjustView(id, permission, pers) { if (permission != "") { if ($.inArray(permission, pers) < 0) { return ""; } } var btn = $(""); return btn.prop("outerHTML"); } // 调整记录按钮 function buttonAdjustRecordView(id, permission, pers) { if (permission != "") { if ($.inArray(permission, pers) < 0) { return ""; } } var btn = $(""); return btn.prop("outerHTML"); } // 协议终止按钮 function buttonProtocolTerminateView(id, permission, pers) { if (permission != "") { if ($.inArray(permission, pers) < 0) { return ""; } } var btn = $(""); return btn.prop("outerHTML"); } // 删除按钮 function buttonDelView(id, permission, pers) { if (permission != "") { if ($.inArray(permission, pers) < 0) { return ""; } } var btn = $(""); return btn.prop("outerHTML"); } // 作业范围调整 function scopeAdjustView(id,proId) { closeView() localStorage.setItem("lumpSumContractId", id) localStorage.setItem("lumpSumProId", proId) localStorage.setItem("lumpSumType", "2") layer.open({ title: ['作业范围调整', 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'], type: 2, content: 'lumpSumAddList.html', area: ['90%', '90%'], maxmin: false, btn: ['确定','关闭'], yes: function (index, layero) { var formSubmit = layer.getChildFrame('form', index); var submitBtn = formSubmit.find("button[lay-filter='formDemo']"); if (submitBtn.length === 0) { console.error("未找到提交按钮"); return; } // 触发 click submitBtn.click(); }, }); } // 作业内容调整 function contentAdjustView(id) { closeView() layer.open({ title: ['作业内容调整', 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'], type: 2, content: 'contentAdjustForm.html', area: ['90%', '70%'], maxmin: false, btn: ['确定','关闭'], success: function (layero, index) { var myIframe = window[layero.find('iframe')[0]['name']]; myIframe.contentAdjustDetail(id); //aaa()为子页面的方法 }, yes: function (index, layero) { var formSubmit = layer.getChildFrame('form', index); var submited = formSubmit.find('button')[0]; submited.click(); }, }); } // 作业期限调整 function periodAdjustView(id) { closeView() layer.open({ title: ['作业期限调整', 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'], type: 2, content: 'periodAdjustForm.html', area: ['50%', '60%'], maxmin: false, btn: ['确定','关闭'], success: function (layero, index) { var myIframe = window[layero.find('iframe')[0]['name']]; myIframe.periodAdjustDetail(id); //aaa()为子页面的方法 }, yes: function (index, layero) { var formSubmit = layer.getChildFrame('form', index); var submited = formSubmit.find('button')[0]; submited.click(); }, }); } // 协议价调整 function priceAdjustView(id) { closeView() layer.open({ title: ['协议价调整', 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'], type: 2, content: 'priceAdjustForm.html', area: ['50%', '60%'], maxmin: false, btn: ['确定','关闭'], success: function (layero, index) { var myIframe = window[layero.find('iframe')[0]['name']]; myIframe.priceAdjustDetail(id); //aaa()为子页面的方法 }, yes: function (index, layero) { var formSubmit = layer.getChildFrame('form', index); var submited = formSubmit.find('button')[0]; submited.click(); }, }); } // 调整记录 function adjustRecordView(id) { closeView() localStorage.setItem("adjustRecordId", id) layer.open({ title: ['调整记录', 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'], type: 2, content: 'adjustRecordForm.html', area: ['90%', '90%'], maxmin: false, btn: ['关闭'], }); } // 协议终止 function protocolTerminateView(id) { closeView() layer.confirm("确定终止协议吗?", function () { $.ajax({ type: 'post', url: ctxPath + '/teamSmallBagDryTreaty/terminationData', data: {contractId: id}, dataType: 'json', success: function (data) { if (data.resMsg == "操作成功") { layer.alert('操作成功', {icon: 1}); example.ajax.reload(); // 刷新页面 } else { layer.msg(data.resMsg, {icon: 2}); example.ajax.reload(); // 刷新页面 } } }); }); } function closeView() { $('.more-options').remove(); // 或者使用 currentMenu.remove(); currentMenu = null; currentBtn = null; }