微步下班倒计时

下班

目前為 2023-08-15 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         微步下班倒计时
// @namespace    http://tampermonkey.net/
// @version      2023年8月15日12点24分
// @description  下班
// @author       wwsuixin
// @match        https://x.threatbook.com/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=threatbook.com
// @grant        none
// ==/UserScript==

(function () {

    window.onload = setTimeout(click_item, 500);
    function click_item() {
        var xpath = '//*[@id="app"]/div[1]/div[1]/div[2]/div[6]/div[2]';

        var element = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

        var 自定义div = document.createElement('div');

        if (element) {
            自定义div.innerHTML = '<div id="自定义divid" style="color: red; font-size: 16px; font-weight: bold; font-family: 楷体;">    <div id="已经工作divid">🕢 已经工作:<span id="已经工作小时id">xx</span> 小时 <span id="已经工作分钟id">xx</span> 分钟 <span            id="已经工作秒id">xx</span> 秒</div>    <div id="距离下班divid">🕙 距离下班: <span id="距离下班小时id">xx</span> 小时 <span id="距离下班分钟id">xx</span> 分钟 <span            id="距离下班秒id">xx</span> 秒</div>    <div id="今日收入divid"> 💰 今日收入:<span id="今日已收入id">xx</span>/<span id="今日总收入id">xx</span> </div>    <div id="进度条">        <div id="进度条divid"            style="margin-top: 5px;display:inline;float:left;width: 76%;height: 10px;border: 1px solid #565656; background: white; position: relative;">            <div id="实时进度条divid"                style="position: absolute; left: 0; top: 0; z-index: 2; height: 10px; width: 100%; font-weight: bold; font-family: Georgia; clip: rect(0px, 0, 10px, 0px); background: #ff0000;">                0%</div>        </div>        <div style="display:inline;float:left;width: 2%;">  </div>        <div id="进度条数值divid" style="display:inline;float:left;width: 22%;">0%</div>    </div></div>';
            element.appendChild(自定义div);

            // 执行上面的代码
            let 下班时间 = new Date();
            下班时间.setHours(22, 0, 0, 0);
            let 上班时间 = new Date();
            上班时间.setHours(8, 30, 0, 0);
            let 当日工资 = 10000

            let 进度条数值divid = document.getElementById("进度条数值divid");
            let 进度条divid = document.getElementById("进度条divid");
            let 实时进度条divid = document.getElementById("实时进度条divid");
            let 已经工作divid = document.getElementById("已经工作divid");
            let 距离下班divid = document.getElementById("距离下班divid");
            let 已经工作小时id = document.getElementById("已经工作小时id");
            let 已经工作分钟id = document.getElementById("已经工作分钟id");
            let 已经工作秒id = document.getElementById("已经工作秒id");
            let 距离下班小时id = document.getElementById("距离下班小时id");
            let 距离下班分钟id = document.getElementById("距离下班分钟id");
            let 距离下班秒id = document.getElementById("距离下班秒id");
            let 今日收入divid = document.getElementById("今日收入divid");
            let 今日已收入id = document.getElementById("今日已收入id");
            let 今日总收入id = document.getElementById("今日总收入id");
            今日总收入id.textContent = 当日工资;

            setInterval(function () {
                let 当前时间 = new Date();
                let 距离上班时间间隔 = 当前时间 - 上班时间;
                let days = Math.floor(距离上班时间间隔 / (1000 * 60 * 60 * 24));
                let hours = Math.floor((距离上班时间间隔 % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
                let minutes = Math.floor((距离上班时间间隔 % (1000 * 60 * 60)) / (1000 * 60));
                let seconds = Math.floor((距离上班时间间隔 % (1000 * 60)) / 1000);
                已经工作小时id.textContent = hours;
                已经工作分钟id.textContent = minutes;
                已经工作秒id.textContent = seconds;

                let 距离下班时间间隔 = 下班时间 - 当前时间;
                let 提示信息 = "";

                if (距离下班时间间隔 < 0) {
                    距离下班divid.textContent = "🕙 警告:工作时间已经结束!";
                } else {
                    let days = Math.floor(距离下班时间间隔 / (1000 * 60 * 60 * 24));
                    let hours = Math.floor((距离下班时间间隔 % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
                    let minutes = Math.floor((距离下班时间间隔 % (1000 * 60 * 60)) / (1000 * 60));
                    let seconds = Math.floor((距离下班时间间隔 % (1000 * 60)) / 1000);
                    距离下班小时id.textContent = hours.toString();
                    距离下班分钟id.textContent = minutes.toString();
                    距离下班秒id.textContent = seconds.toString();
                }

                let 已收入 = 0
                if (距离下班时间间隔 < 0) {
                    已收入 = 当日工资
                    今日收入divid.textContent = "💰 今日收入:" + 当日工资 + "/" + 当日工资 + "(加班也没钱)";
                } else {
                    const 需工作时间 = 下班时间 - 上班时间;
                    const 需工作秒数 = 需工作时间 / 1000;
                    const 每秒收入 = 当日工资 / 需工作秒数;
                    const 上班总秒数 = 距离上班时间间隔 / 1000
                    已收入 = (上班总秒数 * 每秒收入).toFixed(4)
                    今日已收入id.textContent = 已收入;
                }
                const 当前进度 = ((已收入 / 当日工资) * 100).toFixed(2)
                进度条更新(进度条divid, 实时进度条divid, 进度条数值divid, 当前进度)

            }, 1000);
        } else {
            setTimeout(click_item, 300) //300 毫秒
        }
    }

    function 进度条更新(进度条divid, 实时进度条divid, 进度条数值divid, 当前进度) {
        // 获取总进度条的宽度
        var allWidth = parseInt(getStyle(进度条divid, 'width'));
        // 设定内层两个div的文字内容一样
        console.log(当前进度)
        进度条数值divid.innerHTML = 当前进度 + '%';
        // 修改clip的的宽度值
        实时进度条divid.style.clip = 'rect(0px, ' + 当前进度 / 100 * allWidth + 'px, 10px, 0px)';

        // 获取当前元素的属性值
        function getStyle(obj, attr) {
            // 兼容IE
            if (obj.currentStyle) {
                return obj.currentStyle[attr];
            } else {
                // 第二个参数为false是通用的写法,目的是为了兼容老版本
                return getComputedStyle(obj, false)[attr];
            }
        }
    }
})();