您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
亿赛通oa工时自动计算脚本 http://jsrun.net/2wsKp.js
当前为
// ==UserScript== // @name 亿赛通oa工时自动计算 // @namespace http://tampermonkey.net/ // @version 0.4 // @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) { const data = {} data.date = spans[0].innerText data.week = spans[1].innerText data.dept = spans[2].innerText data.name = spans[3].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() + ")" } 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 estGarbageCulture() { 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(estGarbageCulture, 1000) } } } // 程序入口 estGarbageCulture() })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址