您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
亿赛通oa工时自动计算脚本 http://jsrun.net/2wsKp.js
// ==UserScript== // @name 亿赛通oa工时自动计算 // @namespace http://tampermonkey.net/ // @version 0.6.0 // @description 亿赛通oa工时自动计算脚本 http://jsrun.net/2wsKp.js // @author hangj // @match https://oa.esafenet.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=0.26 // @grant none // @require https://cdn.bootcdn.net/ajax/libs/dayjs/1.11.9/dayjs.min.js // ==/UserScript== ;(function () { 'use strict' let dataArray = [], dataArrayIds = new Set(); // 主入口,监听主页面加载 let timerId, isSelfChange = false ;(function mainFunc() { let main = document.querySelector('#themeLayoutRoute') if (main == null) { setTimeout(mainFunc, 500) } else { new MutationObserver((mutationsList, observer) => { if (isSelfChange == false) { isSelfChange = true clearTimeout(timerId) timerId = setTimeout(() => { new Promise((resolve, reject) => { const title = document.querySelector('.wea-new-top-title-breadcrumb') if (title.innerText.startsWith('个人考勤查询')) { title.innerText = '个人考勤查询^_^ by jackkke' Array.from(document.querySelectorAll('table > tbody > tr')) .map((tr) => spansToData(tr)) .filter((data) => data != null) .forEach((data) => dataArray.push(data)) resolve(dataArray) } else { reject('非考勤页面,结束') } }).then(result).catch((error) => console.error(error)).finally(() => (isSelfChange = false)) }, 2000) } }).observe(main, { childList: true, subtree: true }) } })() // 页面元素转对象 function spansToData(tr) { const spans = tr.querySelectorAll('span.wea-url') const date = spans[2].innerText let data = { date: date, week: spans[3].innerText, dept: spans[0].innerText, name: spans[1].innerText, er: spans[6].innerText, startTime: new Date(date + ' ' + spans[4].innerText), endTime: new Date(date + ' ' + spans[5].innerText) } data = Object.assign({}, data, { hour: dayjs(data.endTime).diff(dayjs(data.startTime), 'hour', true), month: dayjs(data.startTime).format('YYYY-MM'), isHolidayFlag: isHoliday(data.startTime), endTime: data.er !== '' ? dayjs(data.endTime).day(1).toDate() : data.endTime, shouldEndTimeDayjs: dayjs(data.startTime).add(data.isHolidayFlag ? 8 : 9.5, 'hour') }) tr.style['background-color'] = '' spans[6].innerText = '' spans[6].style['font-weight'] = 'bold' if (dayjs(data.endTime) > data.shouldEndTimeDayjs.valueOf()) { if (!data.isHolidayFlag && data.hour < 9.5) { spans[6].innerText = spans[6].innerText + '(' + data.hour.toFixed(2) + 'h)' tr.style['background-color'] = 'red' } } else { spans[6].innerText = spans[6].innerText + data.shouldEndTimeDayjs.format('(HH:mm:ss)') } if (!dataArrayIds.has(data.date)) { dataArrayIds.add(data.date) return data } } // 数据渲染到标题 function result(result) { const title = document.querySelector('.wea-new-top-title-breadcrumb') const groupedData2 = groupByKey(result, 'month', 'isHolidayFlag') let titleStr = '' for (const month in groupedData2) { const jiaqi = groupedData2[month][true] || [] const work = (groupedData2[month][false] || []).filter(o => dayjs(o.startTime) < dayjs().startOf('day') || o.hour >= 9.5) const total = [...jiaqi, ...work] if (total.length > 0 && work.length > 0) { var pjz = average(work.map(o => o.hour - 1.5)) var jqzz = sum(jiaqi.map(o => o.hour - 1.5)) var cqts = calculateWorkingDays(month) titleStr += month + ",总时长:" + sum(work.map(o => o.hour - 1.5)) + ",天数:" + work.length + ",平均:" + pjz + ",强度," + percentage(pjz, 8) + '%' + ",加班总计" + jqzz + ",应出勤天数:" + cqts + ",加班强度:" + percentage(jqzz, cqts * 8) + "%" + "\n" } } title.title = titleStr } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址