Nowpick replace 999+ with actual deliverNum

Request a specific URL, replace 999+ with actual data from the response, and show job info in a toast with delay

目前為 2024-07-25 提交的版本,檢視 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Nowpick replace 999+ with actual deliverNum
// @namespace    http://tampermonkey.net/
// @version      1.0.1
// @license      MIT
// @description  Request a specific URL, replace 999+ with actual data from the response, and show job info in a toast with delay
// @author       aspen138
// @match        *://nowpick.nowcoder.com/w/hrconsole/job-manage*
// @grant        GM_xmlhttpRequest
// @grant        GM_addStyle
// @require      https://update.greasyfork.org/scripts/462234/1322684/Message.js
// ==/UserScript==



// key: "getDeliverNum",
// value: function(t) {
//     if (1 === t.showStatus)
//         return "- -";
//     var e = t.inviteSuccessCnt + t.initiativeDeliverCnt;
//     return e > 999 ? "999+" : e
// }



(function() {
    'use strict';

    window.QMSG_GLOBALS = {
        DEFAULTS: {
            showClose: true,
            autoClose: false,
            timeout: 3600 * 1000 // ms
        }
    }

    const name = "JobUpdater";

    function toast(s, error = false) {
        if (error) {
            Qmsg.error(`[${name}] ${s}`);
            console.error(`[${name}] ${s}`);
        } else {
            Qmsg.success(`[${name}] ${s}`);
            console.log(`[${name}] ${s}`);
        }
    }

    // Function to show a toast message
    function showToast(message) {
        toast(" " + message, false); // Display
    }

    // Function to escape special characters in CSS selectors
    function escapeCSSSelector(selector) {
        return selector.replace(/([!"#$%&'()*+,.\/:;<=>?@[\\\]^`{|}~])/g, '\\$1');
    }

    // Function to replace the '999+' value with actual data
    function replaceValues(jobName, unProcessCount) {
        const jobTitleElements = document.querySelectorAll('.job-title-name');
        jobTitleElements.forEach(el => {
            if (el.textContent.trim() === jobName) {
                //console.log("equal! el.textContent.trim()=",el.textContent.trim());
                const jobInfoParent = el.closest('.job-info').parentElement.parentElement;
                //console.log("jobInfoParent=",jobInfoParent);
                const unProcessElement = jobInfoParent.querySelector('.tw-font-semibold');
                //console.log("unProcessElement=",unProcessElement);
                //console.log("unProcessElement.textContent.trim()=",unProcessElement.textContent.trim());
                if (unProcessElement && unProcessElement.textContent.trim() === '999+') {
                    unProcessElement.textContent = unProcessCount;
                    showToast(`Updated job "${jobName}" with deliverNum: ${unProcessCount}`);
                }
            }
        });
    }

    // Function to delay the update
    function delayUpdate(summaryDetailList) {
        setTimeout(() => {
            summaryDetailList.forEach(job => {
                var deliverNum=job.unProcessCount+job.successCount+job.failCount+job.unDetermined+job.writtenInterviewCount;
                replaceValues(job.jobName, deliverNum);
            });
        }, 5000); // 5 seconds delay
    }

    // Capture the URL and make the request
    GM_xmlhttpRequest({
        method: "GET",
        url: "https://nowpick.nowcoder.com/h/resume-deliver/summary",
        onload: function(response) {
            //console.log("response=",response);
            if (response.status === 200) {
                try {
                    const jsonResponse = JSON.parse(response.responseText);
                    if (jsonResponse.data && jsonResponse.data.summaryDetailList) {
                        const summaryDetailList = jsonResponse.data.summaryDetailList;
                        //console.log("summaryDetailList=",summaryDetailList);
                        delayUpdate(summaryDetailList);
                    } else {
                        showToast("Unexpected response format");
                    }
                } catch (e) {
                    showToast("Failed to parse JSON response");
                }
            } else {
                showToast("Error: " + response.statusText);
            }
        },
        onerror: function(response) {
            showToast("Request failed: " + response.statusText);
        }
    });
})();