亿赛通oa工时自动计算

亿赛通oa工时自动计算脚本 http://jsrun.net/2wsKp.js

目前为 2023-04-23 提交的版本。查看 最新版本

// ==UserScript==
// @name         亿赛通oa工时自动计算
// @namespace    http://tampermonkey.net/
// @version      0.4.1
// @description  亿赛通oa工时自动计算脚本 http://jsrun.net/2wsKp.js
// @author       hangj
// @match        http://192.168.0.26:8080/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=0.26
// @grant        none
// ==/UserScript==
(function () {
  'use strict';
  let count = 0

  // 计算平均值
  function average(nums) {
    return nums.length === 0 ? 0 : (nums.reduce((a, b) => a + b) / nums.length).toFixed(2)
  }

  // 计算总值
  function sum(nums) {
    return nums.length === 0 ? 0 : nums.reduce((a, b) => a + b).toFixed(2)
  }

  // 计算百分比
  function percentage(num, total) {
    return (num === 0 || total === 0) ? 0 : Math.round(num / total * 10000) / 100.00
  }

  // spans 解析读取转data
  function spansToData(spans) {
    console.log(spans[4].innerText)
    console.log(spans[5].innerText)
    const data = {}
    data.date = spans[2].innerText
    data.week = spans[3].innerText
    data.dept = spans[0].innerText
    data.name = spans[1].innerText
    data.er = spans[6].innerText
    data.startTime = new Date(data.date + " " + spans[4].innerText)
    data.endTime = new Date(data.date + " " + spans[5].innerText)
    if (data.er !== "") {
      data.endTime.setTime(data.endTime.getTime() + 1000 * 60 * 60 * 24)
    }
    data.hour = parseInt(data.endTime - data.startTime + "") / 1000 / 60 / 60
    const startDay = new Date();
    const endTime = new Date(data.startTime.getTime() + 1000 * 60 * 60 * 9.5);
    if (startDay > endTime) {
      if (data.hour < 9.5) {
        spans[1].innerText = data.week + " " + data.hour.toFixed(2) + "h"
        spans[1].style.color = 'red'
      }
    } else {
      spans[5].innerText = spans[5].innerText + "(" + endTime.getHours() + ":" + endTime.getMinutes() + ":" + endTime.getSeconds() + ")"
    }
    console.log(data)
    return data
  }

  // 显示名称、所有数据、true 本月 false 上月 undefined 所有
  function createHtml(name, value, moreMonth) {
    const dayStartDate = new Date(new Date().toLocaleDateString())
    const dayStartTime = dayStartDate.getTime()
    dayStartDate.setDate(1)
    const monthStartTime = dayStartDate.getTime()
    const filterValue = value.filter(o => {
      const time = o.startTime.getTime()
      let monthFlag = true
      if (moreMonth !== undefined) {
        monthFlag = moreMonth ? (time >= monthStartTime) : (time < monthStartTime)
      }
      return monthFlag && time < dayStartTime && o.hour > 8.5
    }).map(o => o.hour)
    const val = average(filterValue)
    return "总时长:" + sum(filterValue) + ",天数:" + filterValue.length + "," + name + ":" + val + ",符合率:" + percentage(val, 9.5) + "%\n"
  }

  // 亿赛通
  function estJob() {
    if (count < 4) {
      const title = document.querySelector(".wea-new-top-title-breadcrumb");
      const trs = document.querySelectorAll("table > tbody > tr")
      if (title != null && title.innerText === "个人考勤查询" && trs.length > 0) {
        let dataArray = []
        trs.forEach(tr => {
          dataArray.push(spansToData(tr.querySelectorAll("span.wea-url")))
        })
        const currM = createHtml("当月平均时长", dataArray, true)
        const preM = createHtml("之前平均时长", dataArray, false)
        const allM = createHtml("历史平均时长", dataArray, undefined)
        title.title = currM + preM + allM
        title.innerText = title.innerText + "^_^ by jackkke"
      } else {
        count = count + 1
        setTimeout(estJob, 1000)
      }
    }
  }

  // 程序入口
  estJob()
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址