958 lines
27 KiB
HTML
958 lines
27 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title class="lang" key="device_setting">edit shift</title>
|
|
<link href="resources/plugins/bootstrap-3.3.0/css/bootstrap.min.css" rel="stylesheet"/>
|
|
<link href="resources/plugins/material-design-iconic-font-2.2.0/css/material-design-iconic-font.min.css" rel="stylesheet"/>
|
|
<link href="resources/plugins/bootstrap-table-1.17.0/bootstrap-table.min.css" rel="stylesheet"/>
|
|
<link href="resources/plugins/waves-0.7.5/waves.min.css" rel="stylesheet"/>
|
|
<link href="resources/plugins/jquery-confirm/jquery-confirm.min.css" rel="stylesheet"/>
|
|
<link href="resources/css/common.css" rel="stylesheet"/>
|
|
<link href="resources/css/diy.css" rel="stylesheet"/>
|
|
<style>
|
|
.tab {
|
|
display: none;
|
|
justify-content: center;
|
|
}
|
|
|
|
.tab.active {
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
align-items: center;
|
|
gap: 20px;
|
|
/*height: 90vh;*/
|
|
}
|
|
|
|
.tab-container {
|
|
display: none;
|
|
}
|
|
|
|
.tab-container.active {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
.tab-buttons {
|
|
display: flex;
|
|
}
|
|
|
|
.tab-buttons button {
|
|
background-color: #f1f1f1;
|
|
border: none;
|
|
outline: none;
|
|
cursor: pointer;
|
|
padding: 10px 20px;
|
|
transition: background-color 0.3s ease;
|
|
font-size: 16px;
|
|
font-weight: bold;
|
|
border-radius: 5px 5px 0 0;
|
|
margin-right: 10px;
|
|
}
|
|
|
|
.tab-buttons button.active {
|
|
background-color: #ccc;
|
|
}
|
|
|
|
|
|
.tab table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
font-family: Arial, sans-serif;
|
|
}
|
|
|
|
.tab th, .tab td {
|
|
padding: 10px;
|
|
text-align: left;
|
|
border-bottom: 1px solid #ddd;
|
|
}
|
|
#Schedule.tab table {
|
|
margin-bottom: 20px;
|
|
}
|
|
/* sc */
|
|
.xl655987
|
|
{padding-top:1px;
|
|
padding-right:1px;
|
|
padding-left:1px;
|
|
mso-ignore:padding;
|
|
color:black;
|
|
font-size:9.0pt;
|
|
font-weight:700;
|
|
font-style:normal;
|
|
text-decoration:none;
|
|
font-family:"Meiryo UI", serif;
|
|
mso-font-charset:0;
|
|
mso-number-format:General;
|
|
text-align:center;
|
|
vertical-align:middle;
|
|
border-top:.5pt solid black;
|
|
border-right:.5pt solid black;
|
|
border-bottom:.5pt solid black;
|
|
border-left:.5pt solid windowtext;
|
|
background:#7fcafa;
|
|
mso-pattern:black none;
|
|
white-space:nowrap;}
|
|
.xl665987
|
|
{padding-top:1px;
|
|
padding-right:1px;
|
|
padding-left:1px;
|
|
mso-ignore:padding;
|
|
color:windowtext;
|
|
font-size:8.0pt;
|
|
font-weight:400;
|
|
font-style:normal;
|
|
text-decoration:none;
|
|
font-family:"Meiryo UI", serif;
|
|
mso-font-charset:0;
|
|
mso-number-format:General;
|
|
text-align:center;
|
|
vertical-align:middle;
|
|
border-top:1.0pt solid green;
|
|
border-right:.5pt solid green;
|
|
border-bottom:1.0pt solid green;
|
|
border-left:.5pt solid green;
|
|
background:red;
|
|
mso-pattern:black none;
|
|
white-space:nowrap;}
|
|
.xl675987
|
|
{padding-top:1px;
|
|
padding-right:1px;
|
|
padding-left:1px;
|
|
mso-ignore:padding;
|
|
color:windowtext;
|
|
font-size:8.0pt;
|
|
font-weight:400;
|
|
font-style:normal;
|
|
text-decoration:none;
|
|
font-family:"Meiryo UI", serif;
|
|
mso-font-charset:0;
|
|
mso-number-format:"\@";
|
|
text-align:center;
|
|
vertical-align:middle;
|
|
border-top:1.0pt solid green;
|
|
border-right:.5pt solid green;
|
|
border-bottom:1.0pt solid green;
|
|
border-left:.5pt solid green;
|
|
background:#c5e5f9;
|
|
mso-pattern:black none;
|
|
white-space:nowrap;}
|
|
.xl685987
|
|
{padding-top:1px;
|
|
padding-right:1px;
|
|
padding-left:1px;
|
|
mso-ignore:padding;
|
|
color:windowtext;
|
|
font-size:8.0pt;
|
|
font-weight:400;
|
|
font-style:normal;
|
|
text-decoration:none;
|
|
font-family:"Meiryo UI", serif;
|
|
mso-font-charset:0;
|
|
mso-number-format:"\@";
|
|
text-align:center;
|
|
vertical-align:middle;
|
|
border-top:1.0pt solid green;
|
|
border-right:.5pt solid green;
|
|
border-bottom:1.0pt solid green;
|
|
border-left:.5pt solid green;
|
|
background:#f7f9fb;
|
|
mso-pattern:black none;
|
|
white-space:nowrap;}
|
|
.xl695987
|
|
{padding-top:1px;
|
|
padding-right:1px;
|
|
padding-left:1px;
|
|
mso-ignore:padding;
|
|
color:windowtext;
|
|
font-size:8.0pt;
|
|
font-weight:400;
|
|
font-style:normal;
|
|
text-decoration:none;
|
|
font-family:"Meiryo UI", serif;
|
|
mso-font-charset:0;
|
|
mso-number-format:General;
|
|
text-align:center;
|
|
vertical-align:middle;
|
|
border-top:1.0pt solid green;
|
|
border-right:.5pt solid green;
|
|
border-bottom:1.0pt solid green;
|
|
border-left:.5pt solid green;
|
|
background:#CCFFCC;
|
|
mso-pattern:black none;
|
|
white-space:nowrap;}
|
|
.xl705987
|
|
{padding-top:1px;
|
|
padding-right:1px;
|
|
padding-left:1px;
|
|
mso-ignore:padding;
|
|
color:black;
|
|
font-size:24.0pt;
|
|
font-weight:700;
|
|
font-style:normal;
|
|
text-decoration:none;
|
|
font-family:"Meiryo UI", serif;
|
|
mso-font-charset:0;
|
|
mso-number-format:General;
|
|
text-align:center;
|
|
vertical-align:middle;
|
|
background:#0d9bf7;
|
|
mso-pattern:black none;
|
|
white-space:nowrap;}
|
|
.xl715987
|
|
{padding-top:1px;
|
|
padding-right:1px;
|
|
padding-left:1px;
|
|
mso-ignore:padding;
|
|
color:black;
|
|
font-size:9.0pt;
|
|
font-weight:700;
|
|
font-style:normal;
|
|
text-decoration:none;
|
|
font-family:"Meiryo UI", serif;
|
|
mso-font-charset:0;
|
|
mso-number-format:General;
|
|
text-align:left;
|
|
vertical-align:middle;
|
|
border-top:.5pt solid black;
|
|
border-right:.5pt solid black;
|
|
border-bottom:.5pt solid black;
|
|
border-left:.5pt solid windowtext;
|
|
background:#7fcafa;
|
|
mso-pattern:black none;
|
|
white-space:nowrap;}
|
|
/* 考勤汇总表 */
|
|
.xl1518308
|
|
{padding-top:1px;
|
|
padding-right:1px;
|
|
padding-left:1px;
|
|
mso-ignore:padding;
|
|
color:black;
|
|
font-size:11.0pt;
|
|
font-weight:400;
|
|
font-style:normal;
|
|
text-decoration:none;
|
|
font-family:Arial, sans-serif;
|
|
mso-font-charset:0;
|
|
mso-number-format:General;
|
|
text-align:general;
|
|
vertical-align:bottom;
|
|
background:#7fcafa;
|
|
mso-pattern:auto;
|
|
white-space:nowrap;}
|
|
.xl6518308
|
|
{padding-top:1px;
|
|
padding-right:1px;
|
|
padding-left:1px;
|
|
mso-ignore:padding;
|
|
color:black;
|
|
font-size:9.0pt;
|
|
font-weight:700;
|
|
font-style:normal;
|
|
text-decoration:none;
|
|
font-family:"Meiryo UI", serif;
|
|
mso-font-charset:0;
|
|
mso-number-format:General;
|
|
text-align:center;
|
|
vertical-align:middle;
|
|
border-top:.5pt solid black;
|
|
border-right:.5pt solid black;
|
|
border-bottom:.5pt solid black;
|
|
border-left:.5pt solid windowtext;
|
|
background:#7fcafa;
|
|
mso-pattern:black none;
|
|
white-space:nowrap;}
|
|
.xl6618308
|
|
{padding-top:1px;
|
|
padding-right:1px;
|
|
padding-left:1px;
|
|
mso-ignore:padding;
|
|
color:black;
|
|
font-size:8.0pt;
|
|
font-weight:400;
|
|
font-style:normal;
|
|
text-decoration:none;
|
|
font-family:"Meiryo UI", serif;
|
|
mso-font-charset:0;
|
|
mso-number-format:"\@";
|
|
text-align:center;
|
|
vertical-align:middle;
|
|
border-top:1.0pt solid green;
|
|
border-right:.5pt solid green;
|
|
border-bottom:1.0pt solid green;
|
|
border-left:.5pt solid green;
|
|
background:#c5e5f9;
|
|
mso-pattern:black none;
|
|
white-space:nowrap;}
|
|
.xl6718308
|
|
{padding-top:1px;
|
|
padding-right:1px;
|
|
padding-left:1px;
|
|
mso-ignore:padding;
|
|
color:black;
|
|
font-size:8.0pt;
|
|
font-weight:400;
|
|
font-style:normal;
|
|
text-decoration:none;
|
|
font-family:"Meiryo UI", serif;
|
|
mso-font-charset:0;
|
|
mso-number-format:"\@";
|
|
text-align:center;
|
|
vertical-align:middle;
|
|
border-top:1.0pt solid green;
|
|
border-right:.5pt solid green;
|
|
border-bottom:1.0pt solid green;
|
|
border-left:.5pt solid green;
|
|
background:#f7f9fb;
|
|
mso-pattern:black none;
|
|
white-space:nowrap;}
|
|
.xl6818308
|
|
{padding-top:1px;
|
|
padding-right:1px;
|
|
padding-left:1px;
|
|
mso-ignore:padding;
|
|
color:black;
|
|
font-size:24.0pt;
|
|
font-weight:700;
|
|
font-style:normal;
|
|
text-decoration:none;
|
|
font-family:"Meiryo UI", serif;
|
|
mso-font-charset:0;
|
|
mso-number-format:General;
|
|
text-align:center;
|
|
vertical-align:middle;
|
|
background:#6ec2f8;
|
|
mso-pattern:black none;
|
|
white-space:nowrap;}
|
|
.xl6918308
|
|
{padding-top:1px;
|
|
padding-right:1px;
|
|
padding-left:1px;
|
|
mso-ignore:padding;
|
|
color:black;
|
|
font-size:6.0pt;
|
|
font-weight:700;
|
|
font-style:normal;
|
|
text-decoration:none;
|
|
font-family:"Meiryo UI", serif;
|
|
mso-font-charset:0;
|
|
mso-number-format:"\@";
|
|
text-align:left;
|
|
vertical-align:middle;
|
|
background:#6ec2f8;
|
|
mso-pattern:black none;
|
|
white-space:normal;}
|
|
.xl7018308
|
|
{padding-top:1px;
|
|
padding-right:1px;
|
|
padding-left:1px;
|
|
mso-ignore:padding;
|
|
color:black;
|
|
font-size:8.0pt;
|
|
font-weight:700;
|
|
font-style:normal;
|
|
text-decoration:none;
|
|
font-family:"Meiryo UI", serif;
|
|
mso-font-charset:0;
|
|
mso-number-format:General;
|
|
text-align:center;
|
|
vertical-align:middle;
|
|
border-top:1.0pt solid green;
|
|
border-right:.5pt solid green;
|
|
border-bottom:none;
|
|
border-left:.5pt solid green;
|
|
background:#99CCFF;
|
|
mso-pattern:black none;
|
|
white-space:normal;}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div id="createDialog" class="crudDialog" hidden>
|
|
<form>
|
|
<div class="form-group">
|
|
<label for="inputuserid" class="lang" key="UISTR_ENROLL_ID">user id</label>
|
|
<input id="inputuserid" class="form-control" type="text" oninput="validateEnrollid(this)">
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="inputstartdate" class="lang" key="UISTR_START">start</label>
|
|
<input id="inputstartdate" type="date" class="form-control">
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="inputenddate"class="lang" key="UISTR_END">end</label>
|
|
<input id="inputenddate" type="date" class="form-control">
|
|
</div>
|
|
<div class="form-group">
|
|
<div id="progress-bar" class="progress">
|
|
<div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;">
|
|
0%
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<div class="tab-container">
|
|
<div class="tab-buttons">
|
|
<button class="lang" key="UISTR_Report_DETAILS">Schedule</button>
|
|
<button class="lang" key="UISTR_MonthReport">Summary</button>
|
|
</div>
|
|
<div class="button-container">
|
|
<button class="optbtn lang" key="UISTR_PRINT" onclick="printActiveDiv()">Print</button>
|
|
</div>
|
|
</div>
|
|
<div id="Schedule" class="tab">
|
|
</div>
|
|
<div id="Summary" class="tab">
|
|
<table id="Summary_table" style='width:800pt'>
|
|
<col width=47 span=11 style='width:35pt'>
|
|
<col width=94 span=2 style='width:71pt'>
|
|
<tr height=43 style='height:32.25pt'>
|
|
<td colspan=13 class=xl6818308><span class="lang" key="UISTR_MonthReport">Summary</span></td>
|
|
</tr>
|
|
<tr height=24 style='height:18.2pt'>
|
|
<td colspan=13 class=xl6918308></td>
|
|
</tr>
|
|
<tr height=20 style='height:15.0pt'>
|
|
<td rowspan=2 class=xl6518308 ><span class="lang" key="UISTR_ENROLL_ID">ID</span></td>
|
|
<td rowspan=2 class=xl6518308><span class="lang" key="UISTR_UserName">username</span></td>
|
|
<td rowspan=2 class=xl6518308><span class="lang" key="UISTR_Department">dept.</span></td>
|
|
<td colspan=2 class=xl6518308 ><span class="lang" key="UISTR_Work_hours">work hours</span></td>
|
|
<td colspan=2 class=xl6518308 ><span class="lang" key="UISTR_Late_minutes">late minutes</span></td>
|
|
<td colspan=2 class=xl6518308 ><span class="lang" key="UISTR_Leave_minutes">leave minutes</span></td>
|
|
<td colspan=2 class=xl6518308 ><span class="lang" key="UISTR_OT_hours">ot hours</span></td>
|
|
<td rowspan=2 class=xl6518308 ><span class="lang" key="UISTR_Work_Dates">work dates</span></td>
|
|
<td rowspan=2 class=xl6518308 ><span class="lang" key="UISTR_Truancy">truancy</span></td>
|
|
</tr>
|
|
<tr height=20 style='height:15.0pt'>
|
|
<td class=xl6518308 ><span class="lang" key="UISTR_ATTNormal">normal</span></td>
|
|
<td class=xl6518308 ><span class="lang" key="UISTR_Actual">actual</span></td>
|
|
<td class=xl6518308 ><span class="lang" key="UISTR_TIMES">times</span></td>
|
|
<td class=xl6518308 ><span class="lang" key="UISTR_Minute">minute</span></td>
|
|
<td class=xl6518308 ><span class="lang" key="UISTR_TIMES">times</span></td>
|
|
<td class=xl6518308 ><span class="lang" key="UISTR_Minute">minute</span></td>
|
|
<td class=xl6518308 ><span class="lang" key="UISTR_ATTNormal">normal</span></td>
|
|
<td class=xl6518308 ><span class="lang" key="UISTR_Actual">actual</span></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<script src="resources/plugins/jquery.1.12.4.min.js"></script>
|
|
<script src="resources/plugins/bootstrap-3.3.0/js/bootstrap.min.js"></script>
|
|
<script src="resources/plugins/bootstrap-table-1.17.0/bootstrap-table.min.js"></script>
|
|
<script src="resources/plugins/waves-0.7.5/waves.min.js"></script>
|
|
<script src="resources/plugins/jquery-confirm/jquery-confirm.min.js"></script>
|
|
<script src="resources/plugins/jquery.cookie.js"></script>
|
|
<link href="resources/plugins/jquery-toastmessage/resources/css/jquery.toastmessage.css" rel="stylesheet"/>
|
|
<script src="resources/plugins/jquery-toastmessage/javascript/jquery.toastmessage.js"></script>
|
|
<script src="resources/js/notify.js"></script>
|
|
<script src="resources/js/lang.js"></script>
|
|
<script src="resources/js/common.js"></script>
|
|
<script src="resources/js/xlsx.full.min.js"></script>
|
|
<script>
|
|
let DI_USERID_FORMAT = parseInt($.cookie("USERID_FORMAT")) || 0;
|
|
const tabButtons = document.querySelectorAll('.tab-buttons button');
|
|
const tabs = document.querySelectorAll('.tab');
|
|
check_permission();
|
|
lang_load().then(() => {
|
|
getfromtodate();
|
|
}).catch(error => {
|
|
});
|
|
function convertEnrollId(strid) {
|
|
if (typeof strid === 'number') {
|
|
return strid > 0xFFFFFFFF ? strid.toString() : strid;
|
|
}
|
|
if (typeof strid === 'string' && /^\d+$/.test(strid) && DI_USERID_FORMAT != 2) {
|
|
const num = Number(strid);
|
|
return Number.isSafeInteger(num) ? num : strid;
|
|
}
|
|
return strid;
|
|
}
|
|
function set_report_input(data) {
|
|
// 创建表格元素
|
|
let table = document.createElement('table');
|
|
table.style.width = '800pt';
|
|
|
|
// 添加表格列宽
|
|
let colWidths = [47, 38, 47, 47, 47, 47, 42, 42, 66, 66, 66, 72];
|
|
for (let i = 0; i < colWidths.length; i++) {
|
|
let col = document.createElement('col');
|
|
col.style.width = colWidths[i] + 'pt';
|
|
table.appendChild(col);
|
|
}
|
|
|
|
// 添加表头
|
|
let thead = document.createElement('thead');
|
|
let tr = document.createElement('tr');
|
|
tr.height = 40;
|
|
let th = document.createElement('th');
|
|
th.colSpan = 13;
|
|
th.height = 40;
|
|
th.className = 'xl705987';
|
|
th.textContent = lang.UISTR_Report_DETAILS;
|
|
tr.appendChild(th);
|
|
thead.appendChild(tr);
|
|
|
|
tr = document.createElement('tr');
|
|
tr.height = 20;
|
|
th = document.createElement('th');
|
|
th.colSpan = 3;
|
|
th.height = 20;
|
|
th.className = 'xl715987';
|
|
th.textContent = lang.UISTR_ENROLL_ID+':'+data.enrollid;
|
|
tr.appendChild(th);
|
|
th = document.createElement('th');
|
|
th.colSpan = 10;
|
|
th.className = 'xl715987';
|
|
th.textContent =lang.UISTR_UserName+':'+data.name;
|
|
tr.appendChild(th);
|
|
thead.appendChild(tr);
|
|
|
|
tr = document.createElement('tr');
|
|
tr.height = 20;
|
|
th = document.createElement('th');
|
|
th.colSpan = 3;
|
|
th.height = 20;
|
|
th.className = 'xl655987';
|
|
th.textContent =lang.UISTR_Department+':'+data.department;
|
|
tr.appendChild(th);
|
|
th = document.createElement('th');
|
|
th.colSpan = 6;
|
|
th.className = 'xl655987';
|
|
th.textContent = lang.UISTR_UserShift+':'+data.shift;
|
|
tr.appendChild(th);
|
|
th = document.createElement('th');
|
|
th.colSpan = 4;
|
|
th.className = 'xl655987';
|
|
th.textContent =lang.UISTR_Holidaysdate+':'+data.date;
|
|
tr.appendChild(th);
|
|
thead.appendChild(tr);
|
|
|
|
tr = document.createElement('tr');
|
|
tr.height = 20;
|
|
th = document.createElement('th');
|
|
th.rowSpan = 2;
|
|
th.height = 40;
|
|
th.className = 'xl655987';
|
|
th.textContent = lang.UISTR_Holidaysdate;
|
|
tr.appendChild(th);
|
|
th = document.createElement('th');
|
|
th.rowSpan = 2;
|
|
th.className = 'xl655987';
|
|
th.textContent = lang.UISTR_WEEK;
|
|
tr.appendChild(th);
|
|
th = document.createElement('th');
|
|
th.colSpan = 2;
|
|
th.className = 'xl655987';
|
|
th.textContent = lang.UISTR_Section+'1';
|
|
tr.appendChild(th);
|
|
th = document.createElement('th');
|
|
th.colSpan = 2;
|
|
th.className = 'xl655987';
|
|
th.textContent = lang.UISTR_Section+'2';
|
|
tr.appendChild(th);
|
|
th = document.createElement('th');
|
|
th.colSpan = 2;
|
|
th.className = 'xl655987';
|
|
th.textContent =lang.UISTR_Section+'3';
|
|
tr.appendChild(th);
|
|
th = document.createElement('th');
|
|
th.colSpan = 2;
|
|
th.className = 'xl655987';
|
|
th.textContent = lang.UISTR_Work_hours;
|
|
tr.appendChild(th);
|
|
th = document.createElement('th');
|
|
th.rowSpan = 2;
|
|
th.className = 'xl655987';
|
|
th.textContent = lang.UISTR_OT_hours;
|
|
tr.appendChild(th);
|
|
th = document.createElement('th');
|
|
th.rowSpan = 2;
|
|
th.className = 'xl655987';
|
|
th.textContent = lang.UISTR_Late_minutes;
|
|
tr.appendChild(th);
|
|
th = document.createElement('th');
|
|
th.rowSpan = 2;
|
|
th.className = 'xl655987';
|
|
th.textContent = lang.UISTR_Leave_minutes;
|
|
tr.appendChild(th);
|
|
thead.appendChild(tr);
|
|
|
|
tr = document.createElement('tr');
|
|
tr.height = 20;
|
|
th = document.createElement('th');
|
|
th.className = 'xl655987';
|
|
th.textContent = lang.UISTR_ON_DUTY;
|
|
tr.appendChild(th);
|
|
th = document.createElement('th');
|
|
th.className = 'xl655987';
|
|
th.textContent = lang.UISTR_OFF_DUTY;
|
|
tr.appendChild(th);
|
|
th = document.createElement('th');
|
|
th.className = 'xl655987';
|
|
th.textContent = lang.UISTR_ON_DUTY;
|
|
tr.appendChild(th);
|
|
th = document.createElement('th');
|
|
th.className = 'xl655987';
|
|
th.textContent = lang.UISTR_OFF_DUTY;
|
|
tr.appendChild(th);
|
|
th = document.createElement('th');
|
|
th.className = 'xl655987';
|
|
th.textContent = lang.UISTR_ON_DUTY;
|
|
tr.appendChild(th);
|
|
th = document.createElement('th');
|
|
th.className = 'xl655987';
|
|
th.textContent = lang.UISTR_OFF_DUTY;
|
|
tr.appendChild(th);
|
|
th = document.createElement('th');
|
|
th.className = 'xl655987';
|
|
th.textContent = lang.UISTR_ATTNormal;
|
|
tr.appendChild(th);
|
|
th = document.createElement('th');
|
|
th.className = 'xl655987';
|
|
th.textContent = lang.UISTR_Actual;
|
|
tr.appendChild(th);
|
|
thead.appendChild(tr);
|
|
|
|
table.appendChild(thead);
|
|
|
|
// 添加表格数据
|
|
let tbody = document.createElement('tbody');
|
|
for (let i = 0; i < data.days.length; i++) {
|
|
let day = data.days[i];
|
|
let tr = document.createElement('tr');
|
|
tr.height = 20;
|
|
|
|
var vclassname=i%2==0?'xl685987':'xl675987'
|
|
|
|
let td = document.createElement('td');
|
|
td.height = 20;
|
|
td.className = vclassname;
|
|
td.textContent = day.day;
|
|
tr.appendChild(td);
|
|
|
|
td = document.createElement('td');
|
|
td.className = vclassname;
|
|
td.textContent = day.week;
|
|
tr.appendChild(td);
|
|
|
|
for (let j = 0; j < day.time.length; j++) {
|
|
td = document.createElement('td');
|
|
var vcolor=vclassname;
|
|
if(day.time[j].length !== 0){
|
|
if (day.flag[j] == 0 ){
|
|
vcolor='xl665987';
|
|
}
|
|
else if(day.flag[j]==2){
|
|
vcolor='xl695987';
|
|
}
|
|
}
|
|
td.className = vcolor;
|
|
td.textContent = day.time[j];
|
|
tr.appendChild(td);
|
|
}
|
|
|
|
td = document.createElement('td');
|
|
td.className = vclassname;
|
|
td.textContent = day.fatten;
|
|
tr.appendChild(td);
|
|
|
|
td = document.createElement('td');
|
|
td.className = vclassname;
|
|
td.textContent = day.fact_atten;
|
|
tr.appendChild(td);
|
|
|
|
td = document.createElement('td');
|
|
td.className = vclassname;
|
|
td.textContent = day.dayot;
|
|
tr.appendChild(td);
|
|
|
|
td = document.createElement('td');
|
|
td.className = vclassname;
|
|
td.textContent = day.daylate;
|
|
tr.appendChild(td);
|
|
|
|
td = document.createElement('td');
|
|
td.className = vclassname;
|
|
td.textContent = day.dayLeaveearly;
|
|
tr.appendChild(td);
|
|
|
|
tbody.appendChild(tr);
|
|
}
|
|
|
|
// 添加总计行
|
|
tr = document.createElement('tr');
|
|
tr.height = 20;
|
|
td = document.createElement('td');
|
|
td.colSpan = 8;
|
|
td.height = 20;
|
|
td.className = 'xl675987';
|
|
td.textContent = lang.UISTR_Summary+':';
|
|
tr.appendChild(td);
|
|
td = document.createElement('td');
|
|
td.className = 'xl675987';
|
|
td.textContent = data.work_hour;
|
|
tr.appendChild(td);
|
|
td = document.createElement('td');
|
|
td.className = 'xl675987';
|
|
td.textContent = data.atten_hour;
|
|
tr.appendChild(td);
|
|
td = document.createElement('td');
|
|
td.className = 'xl675987';
|
|
td.textContent = data.ot_hour;
|
|
tr.appendChild(td);
|
|
td = document.createElement('td');
|
|
td.className = 'xl675987';
|
|
td.textContent = data.late_minute;
|
|
tr.appendChild(td);
|
|
td = document.createElement('td');
|
|
td.className = 'xl675987';
|
|
td.textContent = data.leave_minute;
|
|
tr.appendChild(td);
|
|
tbody.appendChild(tr);
|
|
|
|
table.appendChild(tbody);
|
|
|
|
// 将表格添加到 DOM
|
|
let reportDiv = document.getElementById('Schedule');
|
|
reportDiv.appendChild(table);
|
|
}
|
|
let isDateUpdated = false;
|
|
function validateEnrollid(inputElement) {
|
|
let maxValue, maxLength;
|
|
switch(DI_USERID_FORMAT) {
|
|
case 0:
|
|
inputElement.value = inputElement.value.replace(/\D/g, '');
|
|
maxValue = 99999999;
|
|
maxLength = 8;
|
|
break;
|
|
|
|
case 1:
|
|
inputElement.value = inputElement.value.replace(/[^0-9]/g, '');
|
|
maxValue = BigInt('9223372036854775807');
|
|
maxLength = 19;
|
|
break;
|
|
case 2:
|
|
maxLength = 32;
|
|
break;
|
|
}
|
|
if (inputElement.value.length > maxLength) {
|
|
inputElement.value = inputElement.value.slice(0, maxLength);
|
|
}
|
|
if (DI_USERID_FORMAT !== 2) {
|
|
const numericValue = DI_USERID_FORMAT === 1 ?
|
|
BigInt(inputElement.value || 0) :
|
|
parseInt(inputElement.value || 0, 10);
|
|
|
|
if (numericValue > maxValue) {
|
|
inputElement.value = maxValue.toString();
|
|
}
|
|
}
|
|
}
|
|
function set_summary_input(data) {
|
|
const summarytable = document.getElementById('Summary_table');
|
|
const tableBody = summarytable.querySelector('tbody');
|
|
const rows = tableBody.rows;
|
|
const rowindex = rows.length;
|
|
const row = document.createElement('tr');
|
|
row.setAttribute('height', '15.0px');
|
|
const cssClass = rowindex % 2 === 0 ? 'xl6718308' : 'xl6618308';
|
|
row.innerHTML = `
|
|
<td class='${cssClass}' >${data.enrollid}</td>
|
|
<td class='${cssClass}' >${data.name}</td>
|
|
<td class='${cssClass}' >${data.department}</td>
|
|
<td class='${cssClass}' >${data.work_hour}</td>
|
|
<td class='${cssClass}' >${data.atten_hour}</td>
|
|
<td class='${cssClass}' >${data.late_times}</td>
|
|
<td class='${cssClass}' >${data.late_minute}</td>
|
|
<td class='${cssClass}' >${data.leave_times}</td>
|
|
<td class='${cssClass}' >${data.leave_minute}</td>
|
|
<td class='${cssClass}' >${data.std_ot_hour}</td>
|
|
<td class='${cssClass}' >${data.ot_hour}</td>
|
|
<td class='${cssClass}' >${data.work_days}</td>
|
|
<td class='${cssClass}' >${data.absent_days}</td>
|
|
`;
|
|
tableBody.appendChild(row);
|
|
// 只在第一次调用时更新日期部分
|
|
if (!isDateUpdated) {
|
|
const dateCell = summarytable.querySelector('tr:nth-child(2) td');
|
|
dateCell.textContent =lang.UISTR_Holidaysdate+':'+data.date;
|
|
isDateUpdated = true;
|
|
}
|
|
}
|
|
function get_userids(fromDate, toDate) {
|
|
let send = new Object();
|
|
send["password"] = $.cookie("pwd");
|
|
send["cmd"] = 'getuserids';
|
|
$.ajax({
|
|
url: debugserver + '/api',
|
|
type: 'POST',
|
|
contentType: "application/json",
|
|
dataType: "json",
|
|
data: JSON.stringify(send),
|
|
beforeSend: function() {
|
|
// 显示进度条
|
|
$('#progress-bar .progress-bar').css('width', '0%').attr('aria-valuenow', 0);
|
|
},
|
|
success: function(json) {
|
|
console.log("done", json);
|
|
let records = json.record;
|
|
let total = records.length;
|
|
let completed = 0;
|
|
for (let i = 0; i < records.length; i++){
|
|
let record = records[i];
|
|
report_get(fromDate, toDate, record, function() {
|
|
completed++;
|
|
let progress = (completed / total) * 100;
|
|
$('#progress-bar .progress-bar').css('width', progress + '%').attr('aria-valuenow', progress).text(Math.round(progress) + '%');
|
|
});
|
|
}
|
|
},
|
|
error: function(error) {
|
|
console.log("error::::", error);
|
|
}
|
|
});
|
|
}
|
|
function report_get(fromDate, toDate, enrollIdstr) {
|
|
let send = new Object()
|
|
send["password"] = $.cookie("pwd");
|
|
send["cmd"] = 'getreport';
|
|
if (enrollIdstr) {
|
|
send["enrollid"] = convertEnrollId(enrollIdstr);
|
|
}
|
|
if (fromDate) {
|
|
send["from"] = fromDate;
|
|
}
|
|
if (toDate) {
|
|
send["to"] = toDate;
|
|
}
|
|
console.log(send)
|
|
$.ajax({
|
|
url: debugserver+'/api',
|
|
type: 'POST',
|
|
contentType:"application/json",
|
|
dataType: "json",
|
|
data: JSON.stringify(send),
|
|
beforeSend: function() {
|
|
|
|
},
|
|
success: function(json){
|
|
console.log("done", json);
|
|
set_report_input(json);
|
|
set_summary_input(json);
|
|
const tabContainer = document.querySelector('.tab-container');
|
|
tabContainer.classList.add('active');
|
|
tabButtons[0].classList.add('active');
|
|
tabs[0].classList.add('active');
|
|
},
|
|
error: function(error){
|
|
console.log("error::::",error);
|
|
}
|
|
});
|
|
}
|
|
function getfromtodate() {
|
|
$.confirm({
|
|
type: 'blue',
|
|
animationSpeed: 300,
|
|
title: lang.UISTR_Report,
|
|
content: $('#createDialog').html(),
|
|
buttons: {
|
|
confirm: {
|
|
text: lang.UISTR_YES_OK,
|
|
btnClass: 'waves-effect waves-button',
|
|
action: function () {
|
|
let fromDate = this.$content.find('#inputstartdate').val();
|
|
let toDate = this.$content.find('#inputenddate').val();
|
|
let enrollIdstr = this.$content.find('#inputuserid').val();
|
|
if (enrollIdstr === '') {
|
|
get_userids(fromDate, toDate);
|
|
} else {
|
|
report_get(fromDate, toDate, enrollIdstr);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
tabButtons.forEach((button, index) => {
|
|
button.addEventListener('click', () => {
|
|
// Remove active class from all buttons and tabs
|
|
tabButtons.forEach(btn => btn.classList.remove('active'));
|
|
tabs.forEach(tab => tab.classList.remove('active'));
|
|
|
|
// Add active class to the clicked button and its corresponding tab
|
|
button.classList.add('active');
|
|
tabs[index].classList.add('active');
|
|
});
|
|
});
|
|
|
|
function printActiveDiv() {
|
|
// 获取当前激活的标签页
|
|
const activeTabs = document.querySelectorAll('.tab.active');
|
|
|
|
// 检查是否有激活的标签页
|
|
if (activeTabs.length > 0) {
|
|
// 获取激活标签页的内容
|
|
const activeTabContent = activeTabs[0].innerHTML;
|
|
|
|
// 获取当前激活的 button 文本
|
|
const activeButton = document.querySelector('.tab-buttons .active');
|
|
const activeButtonText = activeButton ? activeButton.textContent : 'Print Report';
|
|
|
|
// 创建新窗口用于打印
|
|
const printWindow = window.open('', 'Print Window', 'width=800,height=600');
|
|
printWindow.document.write(`
|
|
<html>
|
|
<head>
|
|
<title>${activeButtonText}</title>
|
|
<style>
|
|
/* 添加必要的样式 */
|
|
@media print {
|
|
* {
|
|
-webkit-print-color-adjust: exact;
|
|
color-adjust: exact;
|
|
}
|
|
body {
|
|
color: initial;
|
|
background-color: initial;
|
|
}
|
|
table {
|
|
border-collapse: collapse;
|
|
width: 100%;
|
|
margin-bottom: 20px;
|
|
}
|
|
th, td {
|
|
border: 1px solid #ddd;
|
|
padding: 8px;
|
|
background-color: inherit; // 重置单元格背景色为继承
|
|
}
|
|
th {
|
|
background-color: #f2f2f2;
|
|
}
|
|
td {
|
|
background-color: inherit; // 确保数据单元格的背景色正确打印
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
${activeTabContent}
|
|
</body>
|
|
</html>
|
|
`);
|
|
// 打印窗口
|
|
printWindow.document.close();
|
|
printWindow.print();
|
|
|
|
// 关闭打印窗口
|
|
printWindow.close();
|
|
} else {
|
|
console.log('没有找到激活的标签页。');
|
|
}
|
|
}
|
|
</script>
|
|
</body>
|
|
</html>
|