var example = null; var pers = null; var form = null; layui.use(['layer', 'laydate', 'form'], function () { var layer = layui.layer; form = layui.form; var laydate = layui.laydate; form.render(); form.verify(); getProject(form); pers = checkPermission(); var minListDate = $('#hidMinListDate').val();//最小可选时间,例:1990-02-01 var maxListDate = $('#hidMaxListDate').val();//最大可选时间,例:2200-12-31 $('#startTime').val(getNowTime()); $('#endTime').val(getNowTime()); var begin = "#startTime", end = "#endTime";//开始时间选择框、结束时间选择框:文本框 var endChange = function (val, date) { if (date && date.year) begindate.config.max = { year: date.year, month: date.month - 1,//必须减1才是正确值 date: date.date, hours: date.hours, minutes: date.minutes, seconds: date.seconds }; else { var dateInit = new Date(maxListDate.replace(/-/g, "/")); begindate.config.max = { year: dateInit.getFullYear(), month: dateInit.getMonth(), date: dateInit.getDate(), hours: dateInit.getHours(), minutes: dateInit.getMinutes(), seconds: dateInit.getSeconds() }; } }; var beginChange = function (val, date) { if (date && date.year) enddate.config.min = { year: date.year, month: date.month - 1, date: date.date, hours: date.hours, minutes: date.minutes, seconds: date.seconds }; else { var dateInit = new Date(minListDate.replace(/-/g, "/")); enddate.config.min = { year: dateInit.getFullYear(), month: dateInit.getMonth(), date: dateInit.getDate(), hours: dateInit.getHours(), minutes: dateInit.getMinutes(), seconds: dateInit.getSeconds() }; } }; var enddate = laydate.render({ elem: end, format: 'yyyy-MM-dd', min: minListDate, max: maxListDate, btns: ['now', 'confirm'], done: endChange }); var begindate = laydate.render({ elem: begin, format: 'yyyy-MM-dd', min: minListDate, max: maxListDate, btns: ['now', 'confirm'], done: beginChange }); $("#searchBt").click(function () { var startTime = $("#startTime").val(); var endTime = $("#endTime").val(); var dateStart = new Date(startTime); var dateEnd = new Date(endTime); var difValue = (dateEnd - dateStart) / (1000 * 60 * 60 * 24); if ((startTime == '' && endTime != '') || (startTime != '' && endTime == '')) { return top.layer.msg('时间填写不完整', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); } var startDateTemp = startTime.split("-"); var endDateTemp = endTime.split("-"); var allStartDate = new Date(startDateTemp[0], startDateTemp[1], startDateTemp[2]); var allEndDate = new Date(endDateTemp[0], endDateTemp[1], endDateTemp[2]); if (allStartDate.getTime() > allEndDate.getTime()) { return top.layer.msg('时间选择不合理,请重新选择', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); } }); init(); $("#searchBt").click(function () { example.ajax.reload(); }); $("#updatenow").click(function () { var loadingMsg = layer.msg('数据库更新中,请稍候...', {icon: 16, scrollbar: false, time: 0}); let url,data,reason; let workHours = $('input[name="workHours"]:checked').val(); let unauditedCardReason = $('textarea[name="unauditedCardReason"]').val(); reason = unauditedCardReason; url = ctxPath + '/faceContrast/unauditedCard'; data = { idNumber:idNumber, name:name, proId:proId, teamId: teamId, subId: subId, currentDay:currentDay, workHours:workHours, unauditedCardReason:unauditedCardReason }; $.ajax({ type: "post", url: url, contentType: "application/json; charset=utf-8", data: JSON.stringify(data), dataType: "json", success: function (data) { layer.close(loadingMsg); // 关闭提示层 if (data.res === 1) { parent.layer.msg('操作成功', {icon: 1}); closePage(1); } else { parent.layer.msg( data.resMsg , {icon: 2}); } }, error: function (jqXHR, textStatus, errorThrown) { layer.close(loadingMsg); layer.msg('数据上传发生异常,请稍后重试', {icon: 16, scrollbar: false, time: 2000}); } }); if(reason){ let loadingMsg = layer.msg('数据上传中,请稍候...', {icon: 16, scrollbar: false, time: 0}); }else{ layer.msg("请填写原因"); } }) $("#download").click(function () { var token = localStorage.getItem("token"); var proId = $("#proId").val(); var status = $("#status").val(); var startTime = $("#startTime").val(); var endTime = $("#endTime").val(); var loadingMsg = layer.msg('下载中,请稍候...', {icon: 16, scrollbar: false, time: 0}); var url = ctxPath + "/faceContrast/exportWorkNumber?status=" + status + "&proId=" + proId+ "&startTime=" + startTime + "&endTime=" + endTime + "&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 = "现有/上班人数统计-"+ startTime +"-"+ endTime + ".xlsx"; // 文件名 }else { layer.msg('导出发生异常,请稍后重试', {icon: 16, scrollbar: false, time: 2000}); } a.click() window.URL.revokeObjectURL(url) }; xhr.send(); }); }); function init() { example = $('#dt-table').DataTable({ "searching": false, "paging": false, "processing": true, //加载数据时显示进度状态 "serverSide": true, "pagingType": "full_numbers", //首页|尾页 "language": { "url": ctxPath + "/js/plugin/datatables/Chinese.lang" }, "ajax": { "url": ctxPath + "/faceContrast/getWorkNumber", "type": "post", "data": function (d) { d.proId = $("#proId").val(); d.status = $("#status").val(); d.startTime = $("#startTime").val(); d.endTime = $("#endTime").val(); }, "dataSrc": function (json) { var data = json.data || []; // 按工程名称分组 var groupedData = {}; data.forEach(function(item) { if (!groupedData[item.proName]) { groupedData[item.proName] = []; } groupedData[item.proName].push(item); }); // 为每个分组添加合计行 var processedData = []; Object.keys(groupedData).forEach(function(proName) { var group = groupedData[proName]; var total = { entranceNum: 0, workNum: 0, restNum: 0, noWorkNum: 0, wgNum: 0, xbgNum: 0, einNum: 0, exitNum: 0, attendanceRate: 0 }; group.forEach(function(item) { total.entranceNum += parseInt(item.entranceNum) || 0; total.workNum += parseInt(item.workNum) || 0; total.restNum += parseInt(item.restNum) || 0; total.noWorkNum += parseInt(item.noWorkNum) || 0; total.wgNum += parseInt(item.wgNum) || 0; total.xbgNum += parseInt(item.xbgNum) || 0; total.einNum += parseInt(item.einNum) || 0; total.exitNum += parseInt(item.exitNum) || 0; }); // 计算考勤率 const numerator = total.workNum + total.restNum + total.xbgNum + total.wgNum; const denominator = total.entranceNum + total.einNum; total.attendanceRate = denominator > 0 ? ((numerator / denominator) * 100).toFixed(2) : '0.00'; // total.attendanceRate = group.length > 0 ? (total.workNum / total.entranceNum * 100).toFixed(2) : '0.00'; // 将分组数据添加到 processedData processedData = processedData.concat(group); // 添加合计行 if (group.length > 1) { // 只有数据量大于1才进行合计 processedData.push({ orgName: '', // proName: proName + ' 合计', proName: '合计', time: '', entranceNum: total.entranceNum, workNum: total.workNum, restNum: total.restNum, noWorkNum: total.noWorkNum, wgNum: total.wgNum, xbgNum: total.xbgNum, einNum: total.einNum, exitNum: total.exitNum, attendanceRate: total.attendanceRate + '%' }); } }); console.log('Processed Data:', processedData); // 添加这行日志 return processedData; }, "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": "orgName", "defaultContent": "", "width": "12%"}, {"data": "proName", "defaultContent": "", "width": "12%"}, {"data": "time","orderable": false, "defaultContent": "", "width": "5%"}, {"data": "entranceNum", "defaultContent": "", "width": "7%"}, {"data": "workNum", "defaultContent": "", "width": "7%"}, {"data": "restNum", "defaultContent": "", "width": "7%"}, // {"data": "noWorkNum", "defaultContent": "", "width": "7%"}, {"data": "wgNum", "defaultContent": "", "width": "7%"}, {"data": "xbgNum", "defaultContent": "", "width": "7%"}, {"data": "einNum", "defaultContent": "", "width": "7%"}, {"data": "exitNum", "defaultContent": "", "width": "7%"}, {"data": "attendanceRate", "defaultContent": "", "width": "7%"}, { "data": "", "defaultContent": "",width: '5%', "orderable": false, "render": function (data, type, row) { if (row.proName && row.proName.includes('合计')) { return ''; // 合计行不显示操作按钮 } var time = row['time']; var proId = row['proId']; var proName = row['proName']; var einNum=row['einNum']; var exitNum=row['exitNum']; var html = buttonCheckView(proId,proName,time,einNum,exitNum,"", pers); //cha看 return html; } }, ] , //在栏目列上显示排序功能 "order": [] //在栏目列上显示排序功能 }); } /** * 获取分公司 * */ function getCompanys(form) { $("#orgId").empty(); $.ajax({ type: 'POST', url: ctxPath + '/users/getOrgInfo', data: {}, dataType: 'json', success: function (data) { var str = ''; for (var i = 0; i < data.length; i++) { str += ''; } $("#orgId").html(str); form.render(); } }) } function buttonCheckView(proId,proName, time,einNum,exitNum, permission, pers) { if (permission != "") { if ($.inArray(permission, pers) < 0) { return ""; } } var btn = $(""); return btn.prop("outerHTML"); } //查看班组详情,工程查询页面 function checkView(proId,proName,time,einNum,exitNum) { localStorage.setItem("proId", proId); localStorage.setItem("proName", proName); localStorage.setItem("time", time); localStorage.setItem("einNum",einNum); localStorage.setItem("exitNum",exitNum); layer.open({ title: ['查看', 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'], type: 2, content: 'WorkNumberListByCurrentDay.html', area: ['95%', '95%'], maxmin: false }); } /** * 获取当日时间 */ function getNowTime() { var nowDate = new Date(); var year = nowDate.getFullYear(); var month = nowDate.getMonth() + 1 < 10 ? "0" + (nowDate.getMonth() + 1) : nowDate.getMonth() + 1; var day = nowDate.getDate() < 10 ? "0" + nowDate.getDate() : nowDate.getDate(); var dateStr = year + "-" + month + "-" + day; return dateStr; }