// ==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 // @downloadURL none // ==/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); })();