工时计算

计算加班时长

// ==UserScript==
// @name         工时计算
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  计算加班时长
// @author       秦大哥
// @match        http://oa.innovatech.net.cn:8000/com/yj/ScheduleRecord.jsp
// @icon         https://www.google.com/s2/favicons?sz=64&domain=innovatech.net.cn
// @require      https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js
// @license MIT
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    console.log('加载成功')

    $("tr:contains('人力资源'):last").append(`
            <td style="display:" id="icuLabel" class="fieldName"  colspan="1">加班时长</td>
            <td style="display:" id="" name="" _samepair="" class="field" colspan="1">
		    	<span id="icuTotalValue"></span>
		    </td>
         `)
    let trList = $("#reportList tr")
    let workList = []
    for(let i = 0;i<trList.length;i++){
        let tr = trList[i]
        if(i == 0){
            $(tr).append(`
                <td width="60px" nowrap="">周末</td>
                <td width="60px" nowrap="">非工作日</td>
                <td width="60px" nowrap="">加班时长(小时)</td>
                `)
        }else {
            //日期
            let dateStr = $($(tr).children()[2]).text()
            let date = new Date(dateStr)
            let currentDay = date.getDay()
            let isWeekend = currentDay === 6 || currentDay === 0
            let isHoliday = isWeekend
            console.log("before = "+ isHoliday)
            let storedValue = localStorage.getItem(dateStr)
            if(storedValue != null){
                isHoliday = storedValue == "true"
                console.log("after = "+ isHoliday)
            }
            $(tr).append(`<td width="60px" nowrap="">${isWeekend?"是":"否"}</td>`)
            let checkBox = $("<input/>").attr("type","checkbox").prop({"checked":isHoliday}).change(() =>{
                let checked = checkBox.prop("checked")
                localStorage.setItem(dateStr,checked)
                workList[i - 1].isHoliday = checked
                let newIcuValue = reCalRow(i - 1)
                $($(tr).find("#icuValue")).html(newIcuValue)
                let totalIcuValue = reCalTotalIcu()
                 $("#icuTotalValue").html(`${totalIcuValue}小时`)
            })

            let tdHoliday =$(`<td width="60px" nowrap=""></td>`).append(checkBox)
            $(tr).append(tdHoliday)
            console.log(`date=${date} ${isWeekend?'周末':'不是周末'}`)

            //上班时间
            let onWorkDateStr = $($(tr).children()[3]).text()
            let onWorkDate = new Date(`${dateStr} ${onWorkDateStr}`)
            //下班时间
            let offWorkDateStr = $($(tr).children()[4]).text()
            let offWorkDate = new Date(`${dateStr} ${offWorkDateStr}`)

            //加班时长
            let icuValue = 0
            if(!isHoliday && offWorkDateStr != "00:00"){
                console.log("in icu")
                let icuStartDate = new Date(`${dateStr} 18:30:00`)
                icuValue = (parseInt(offWorkDate - icuStartDate)/1000.0/60/60).toFixed(2)
            }else if(onWorkDateStr != "00:00" && offWorkDateStr != "00:00") {
                console.log("in icu")
                icuValue = (parseInt(offWorkDate - onWorkDate)/1000.0/60/60).toFixed(2)
            }
            if(icuValue < 0){
                icuValue = 0
            }
            $(`<td width="60px" id="icuValue" nowrap="">${icuValue}</td>`).appendTo(tr)

            workList.push({
                date:date,
                dateStr:dateStr,
                onWorkDate:onWorkDate,
                onWorkDateStr:onWorkDateStr,
                offWorkDate:offWorkDate,
                offWorkDateStr:offWorkDateStr,
                isHoliday:isHoliday,
                icuValue:icuValue
            })
        }
        let totalIcuValue = reCalTotalIcu()
        $("#icuTotalValue").html(`${totalIcuValue}小时`)

    }

    //重新计算单行加班时间
    function reCalRow(index){
        let work = workList[index]
        let icuValue = 0
        if(!work.isHoliday && work.offWorkDateStr != "00:00"){
            console.log("in icu")
            let icuStartDate = new Date(`${work.dateStr} 18:30:00`)
            icuValue = (parseInt(work.offWorkDate - icuStartDate)/1000.0/60/60).toFixed(2)
        }else if(work.onWorkDateStr != "00:00" && work.offWorkDateStr != "00:00") {
            console.log("in icu")
            icuValue = (parseInt(work.offWorkDate - work.onWorkDate)/1000.0/60/60).toFixed(2)
        }
        if(icuValue < 0){
            icuValue = 0
        }
        work.icuValue = icuValue
        return icuValue
    }

    //重新计算总时长
    function reCalTotalIcu(){
        let totalIcu = 0
        workList.forEach((item,index) =>{
            totalIcu += parseFloat(item.icuValue)
        })
        return totalIcu.toFixed(2)
    }



})();