try to take over the world!
// ==UserScript==
// @name 考勤时长统计
// @namespace http://tampermonkey.net/
// @version 0.2
// @description try to take over the world!
// @author You
// @match https://ehr.zbj.com/*
// @grant none
// ==/UserScript==
(function() {
var allTime = 0;
function Day(date, first, last, parent, rowspan) {
this.date = date;
this.first = first;
this.last = last;
this.parent = parent;
this.rowspan = rowspan;
// excute date
let dates = date.split('/');
this.year = +dates[0];
this.month = +dates[1] - 1;
this.day = +dates[2];
}
Day.prototype.isNormal = function() {
let td = document.createElement('td');
td.style.color = "red";
td.style.border = '1px solid';
td.rowSpan = this.rowspan;
if (!this.first || !this.last) {
td.innerHTML = '只打了一次卡';
this.parent.append(td);
return;
}
let last = sepTime(this.last);
let first = sepTime(this.first);
let duration = new Date(this.year, this.month, this.day, last.hour, last.second) - new Date(this.year, this.month, this.day, first.hour, first.second); //毫秒数
allTime += duration /(60*60*1000)
if (duration < (9*60*60*1000)) {
// 早退
td.innerHTML = '早退/旷工';
this.parent.append(td);
return;
}
td.style.color = "green";
td.innerHTML = '正常 + 时长' + duration/(60*60*1000) + '小时';
this.parent.append(td);
}
function sepTime(timeString) {
let times = timeString.split(':');
let hour = +times[0];
let second = +times[1];
return {
hour,
second
}
}
function getData() {
// 控制台上要审查元素后才能获取该dom, 原因不明。
var homeTable = document.getElementById('SG_ABS_EMP_DATA$scroll$0');
var targetTable = homeTable.querySelectorAll('.PSLEVEL1GRID')[0];
var targetTableTr = targetTable.querySelectorAll('tr');
let targetTableTrs = Array.from(targetTableTr);
let originData = [];
let datas = [];
targetTableTrs.forEach(tr => {
let tds = tr.querySelectorAll('td');
if(!tds.length) {
return false;
}
let date,
time;
date = tds[1].querySelectorAll('span')[0].innerHTML;
time = tds[2].querySelectorAll('span')[0].innerHTML;
originData.push({
parent: tr,
date,
time
});
});
// 组合数据 生成day实例, 并判断
originData.forEach(item => {
let dateObj = datas.find(o => {
return item.date == o.date;
});
if(dateObj) {
if(item.time > dateObj.first || item.time > dateObj.last) {
dateObj.last = item.time;
} else if(item.time < dateObj.first) {
dateObj.first = item.time;
}
dateObj.rowspan++;
} else {
item.first = item.time;
item.rowspan = 1;
datas.push(item);
}
});
datas.useLength = 0;
datas.forEach(day => {
if (day.last) {
datas.useLength++;
}
let dayInstance = new Day(day.date, day.first, day.last, day.parent, day.rowspan);
dayInstance.isNormal();
});
var av = document.createElement('div');
av.innerHTML = '日均时长:' + allTime/datas.useLength;
var all = document.createElement('div');
all.innerHTML = ' 总时长:' + allTime;
document.body.appendChild(av);
document.body.appendChild(all);
}
getData();
})();