Greasy Fork

Greasy Fork is available in English.

聚水潭指定参数获取

获取聚水潭(erp321.com)网页中link_o_id(内部订单号)和 skuweight(克重值)的值自动复制或相加

当前为 2024-03-20 提交的版本,查看 最新版本

// ==UserScript==
// @name         聚水潭指定参数获取
// @namespace    https://rakurai.top
// @version      4.0.3
// @icon         http://107.173.89.17:8888/download?filename=/www/wwwroot/rakurai/title.ico
// @description  获取聚水潭(erp321.com)网页中link_o_id(内部订单号)和 skuweight(克重值)的值自动复制或相加
// @author       RakuRai
// @match        http://*/*
// @match        https://*/*
// @grant        GM_setClipboard
// @license MIT
// ==/UserScript==

// 以下的function为自动点击转正常
(function() {
    'use strict';

    // 获取所有符合条件的元素
    const elements = document.querySelectorAll('[onclick="ReverseOuterStatus(this)"]');

    // 循环点击元素
    elements.forEach((element, index) => {
        setTimeout(() => {
            element.click(); // 点击元素
        }, (index + 1) * 250); // 每隔0.2秒点击一个元素
    });
})();

(function() {
    'use strict';

    // 等待页面元素加载完成后再执行脚本
    window.addEventListener('load', function() {
        // 检查当前页面是否具有特定 id
        var epaasTabsWrap = document.getElementById('epaasTabsWrap');
        if (epaasTabsWrap) {
            // 创建一个输入框
            var inputElement = document.createElement('input');
            inputElement.type = 'text'; // 设置输入框类型为文本
            inputElement.placeholder = '粘贴克重相加处→'
            inputElement.style.width = '120px';
            inputElement.style.height = '35px';
            inputElement.style.position = 'fixed';
            inputElement.style.top = '0px';
            inputElement.style.border = '1px solid #ff008b';
            inputElement.style.left = '1370px'
            // 创建一个包含输入框的 div 元素
            var inputContainer = document.createElement('div');
            inputContainer.appendChild(inputElement);

            // 在 id="epaasTabsWrap" 的 div 下插入输入框
            epaasTabsWrap.appendChild(inputContainer);

            // 创建一个显示处理结果的输出框
            var outputElement = document.createElement('div');
            outputElement.style.position = 'fixed';
            outputElement.style.top = '0px';
            outputElement.style.left = '1500px';
            outputElement.style.padding = '10px';
            outputElement.style.height = '35px';
            outputElement.style.background = '#f2f3f5'; //
            outputElement.style.border = '0px solid #000';
            outputElement.style.color = '#ff008b'; // 黑色文字
            epaasTabsWrap.appendChild(outputElement);

            // 给输入框添加粘贴事件监听器
            inputElement.addEventListener('paste', function(event) {
                // 取消默认粘贴行为
                event.preventDefault();

                // 获取粘贴板上的文本
                var clipboardData = event.clipboardData || window.clipboardData;
                var pastedText = clipboardData.getData('text');

                console.log('粘贴的文本:', pastedText);

                // 使用正则表达式将文本中的非数字字符全部去除,并将",-"替换为"+"
                var cleanedText = pastedText.replace(/[^\d.-]/g, '');

                console.log('处理后的文本:', cleanedText);

                // 将处理后的文本按照 "-" 分割为数组,并逐个相加
                var numbers = cleanedText.split('-').filter(function(num) {
                    return num !== '';
                });

                var total = numbers.reduce(function(acc, val) {
                    return acc + parseFloat(val) || 0;
                }, 0);

                console.log('总和:', total);

                // 将结果显示在输出框中,保留两位小数
                outputElement.textContent = '总和:' + total.toFixed(2);
            });
        }
    });

    // 其他代码保持不变
    // ...
})();

// 另外的代码保持不变

(function() {
    'use strict';

    // 创建一个显示link_o_id数值的固定位置的元素
    var displayElementLeft = document.createElement('div');
    displayElementLeft.style.position = 'fixed';
    displayElementLeft.style.top = '0px';
    displayElementLeft.style.left = '130px';
    displayElementLeft.style.padding = '10px';
    displayElementLeft.style.background = '#FFFFFF'; // 红色背景
    displayElementLeft.style.opacity='0.6';//透明度
    displayElementLeft.style.border = '1px solid #000';
    displayElementLeft.style.display = 'none'; // 初始隐藏
    displayElementLeft.style.color = '#000000'; // 黑色文字
    document.body.appendChild(displayElementLeft);

    // 创建一个显示 skuweight 数值的固定位置的元素
    var displayElementRight = document.createElement('div');
    displayElementRight.style.position = 'fixed';
    displayElementRight.style.top = '0px';
    displayElementRight.style.right = '240px'; // 右上角
    displayElementRight.style.height = '20px';
    displayElementRight.style.width = '5%'; // 宽度设置为屏幕宽度的三分之一
    displayElementRight.style.padding = '10px';
    displayElementRight.style.background = '#ffffff'; // background color
    displayElementRight.style.border = '0px solid #000';
    displayElementRight.style.display = 'none'; // 初始隐藏
    displayElementRight.style.color = '#ff008b'; // 白色文字
    displayElementRight.style.zIndex = '9999'; // 显示在最上层
    document.body.appendChild(displayElementRight);

    // 存储已经获取到的 link_o_id 和 skuweight 数值,避免重复
    var processedIDs = {};
    var processedWeight = {};

    // 定义函数,用于更新显示的内容
    function updateDisplay() {
        // 找到所有包含 link_o_id 的文本
        var linkOIDMatches = document.body.textContent.matchAll(/link_o_id":(\d+)/g);

        // 存储 link_o_id 数值的数组
        var linkOIDValues = [];

        // 遍历所有匹配项并输出数值到左上角元素中
        for (const match of linkOIDMatches) {
            var linkOIDValue = match[1];
            // 检查该数值是否已经被处理过,如果没有,则添加到数组中并记录
            if (!processedIDs[linkOIDValue]) {
                linkOIDValues.push(linkOIDValue);
                processedIDs[linkOIDValue] = true;
                // 这里可以根据需要进行进一步操作,比如发送给后端,存储在本地等等
            }
        }

        // 如果获取到了 link_o_id 数值,则显示在左上角
        if (linkOIDValues.length > 0) {
            // 将 link_o_id 数值数组连接为一个字符串,每个数值后面加上逗号
            var outputTextLeft = linkOIDValues.join(",\n") + ",";
            // 将整个字符串复制到剪贴板
            GM_setClipboard(outputTextLeft);
            // 将字符串设置为输出框的内容
            displayElementLeft.textContent = outputTextLeft;
            // 显示输出框
            displayElementLeft.style.display = 'block';
        }

        // 获取所有具有指定 class 的元素
        var elements = document.querySelectorAll('.skuweight');

        // 存储数值的数组
        var weightValues = [];

        // 遍历每个元素
        elements.forEach(function(element) {
            // 获取当前元素的文本内容(即数值)
            var weightValue = parseFloat(element.textContent.trim());
            // 添加到存储数值的数组中
            weightValues.push(weightValue);
        });

        // 如果获取到了 skuweight 数值,则显示在右上角
        if (weightValues.length > 0) {
            // 计算数值的总和并保留小数点后两位
            var totalWeight = weightValues.reduce((acc, val) => acc + val, 0).toFixed(2);
            // 将 skuweight 数值总和显示在右上角
            var outputTextRight = "总克重:\n\n" + totalWeight;
            // 将字符串设置为输出框的内容
            displayElementRight.textContent = outputTextRight;
            // 显示输出框
            displayElementRight.style.display = 'block';
        }
    }

    // 在指定的节点上添加事件监听器,以便在数据加载时重新执行更新显示的内容的逻辑
    var targetNode = document.body;
    var config = { attributes: true, childList: true, subtree: true };
    var observer = new MutationObserver(function(mutationsList, observer) {
        updateDisplay();
    });
    observer.observe(targetNode, config);

})();