// ==UserScript== // @name dxm // @namespace https://greasyfork.org/zh-CN/scripts/462551 // @version 2.64 // @author Huang // @description 统计当前订单件数 & 针对区域定价的报关金额进行批量填充 // @license MIT // @icon https://www.google.com/s2/favicons?sz=64&domain=dianxiaomi.com // @match https://www.dianxiaomi.com/order/* // @grant GM_addStyle // @run-at document-start // @downloadURL https://update.greasyfork.icu/scripts/462551/dxm.user.js // @updateURL https://update.greasyfork.icu/scripts/462551/dxm.meta.js // ==/UserScript== (t=>{if(typeof GM_addStyle=="function"){GM_addStyle(t);return}const o=document.createElement("style");o.textContent=t,document.head.append(o)})(" h3.total-num{color:#007bff;position:absolute;left:200px;top:7px;font-size:13px}#orderListTable tr.goodsId{position:relative}.operation-btns{position:absolute;left:300px;top:4px}.operation-btns a{color:#28a745;font-size:13px;margin-right:20px}#dxmOrderDetailDiv{display:none}.total-count{color:red;line-height:30px;font-size:13px;margin-left:10px}.pkg-types{color:gray;line-height:30px;font-size:13px;margin-left:10px} "); (function () { 'use strict'; var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value); class Utils { // 模拟input static tEvent(b, a) { if (b) { window.newhtmlevents = window.newhtmlevents || document.createEvent("HTMLEvents"); newhtmlevents.initEvent(a, true, true); return b.dispatchEvent(newhtmlevents); } } static simulateInput(ele, val) { this.tEvent(ele, "click"); this.tEvent(ele, "input"); ele.value = val; this.tEvent(ele, "keyup"); this.tEvent(ele, "change"); this.tEvent(ele, "blur"); } static htmlParser(htmlString) { let parser = new DOMParser(); let doc = parser.parseFromString(htmlString, "text/html"); return doc; } static isGpsrCountry(countryCode) { const countries = ["奥地利", "比利时", "保加利亚", "塞浦路斯", "克罗地亚", "捷克共和国", "丹麦", "爱沙尼亚", "芬兰", "法国", "德国", "希腊", "匈牙利", "爱尔兰", "意大利", "拉脱维亚", "立陶宛", "卢森堡", "马耳他", "荷兰", "波兰", "葡萄牙", "罗马尼亚", "斯洛伐克", "斯洛文尼亚", "西班牙", "瑞典"]; return countries.includes(countryCode); } /** * 从URL中提取指定键的查询参数值。 * @param {string} url - 包含查询参数的URL。 * @param {string} key - 要提取值的查询参数键。 * @returns {string|null} - 指定键的查询参数值,如果不存在则返回null。 */ static getUrlKeyValuePairs(url, key) { const pairs = {}; const parts = url.split("?")[1].split("&"); for (const part of parts) { const [key2, value] = part.split("="); pairs[key2] = value; } return pairs[key] || null; } static isiPad() { const ua = navigator.userAgent; const platform = navigator.platform; if (/iPad/i.test(ua) || platform === "iPad") { return true; } return platform === "MacIntel" && navigator.maxTouchPoints > 1; } } const _Declare = class _Declare { static init() { $(document).off("click", `a[onclick="showBatchCustoms();"]`); $(document).on("click", `a[onclick="showBatchCustoms();"]`, () => { _Declare.prepareData(); }); _Declare.applyTrackingDirect(); } static applyTrackingDirect() { $(`button[onclick="batchMoveProcessed();"]`).each(function() { $(this).attr("onclick", null); }); $(document).off("click", "[id^='moveProcessBtn']"); $(document).on("click", "[id^='moveProcessBtn']", () => { let isCheckedAnyone = $(`#showSelCheckboxNum`).length > 0; if (!isCheckedAnyone) { $.fn.message({ type: "error", msg: "请至少选择一个订单ya" }); return; } _Declare.prepareData(); showBatchCustoms(); }); } // 准备要在报关列表用到的数据 static prepareData() { let t = [], that = this, _reg = /[^0-9.]/g; $(`input[name='packageId']`).each(function() { if ($(this).prop("checked")) { let common = $(this).closest("tr").next().children(); const isJIT = $(this).closest("tr").next()[0].getAttribute("data-platform").includes("Choice"); if (!isJIT) { let eleList = common.eq(0).find("tr"); let rightPrice = common.eq(1).text().replace(_reg, ""); rightPrice = Number(rightPrice); let singleItem = eleList.length == 1; if (singleItem) { let leftPrice = eleList.find("p:contains('USD')").text().replace(_reg, ""); leftPrice = Number(leftPrice); let finalPrice = leftPrice < rightPrice ? leftPrice : rightPrice; t.push(finalPrice); } else { eleList.each((i, e) => t.push($(e).find("p:contains('USD')").text().replace(_reg, ""))); } } that.finalDeclareValues = t; } }); } static fillValues() { let that = this; const [chsName, engName, weight] = ["狗衣服", "Dog Clothes", 50]; $(`input[name="declaredValues"]`).each(function(index) { Utils.simulateInput($(this).get(0), that.finalDeclareValues[index]); }); $(`input[name="nameChs"]`).each(function(index) { if ($(this).val() == "") Utils.simulateInput($(this).get(0), chsName); }); $(`input[name="nameEns"]`).each(function(index) { if ($(this).val() == "") Utils.simulateInput($(this).get(0), engName); }); $(`input[name="weights"]`).each(function(index) { let curVal = $(this).val(); if (curVal == "" || curVal == 0) Utils.simulateInput($(this).get(0), weight); }); } }; __publicField(_Declare, "finalDeclareValues", []); let Declare = _Declare; class Summary { constructor(url) { this.curURL = url; if (Utils.isiPad() === false) { this.compute(); } this.total(); this.packageTypes(); this.addGpsrTag(); } /** * 判断当前url是否可以追踪物流信息。 * @returns {boolean} - 如果可以追踪物流信息,则返回true,否则返回false。 */ ifCanTrack() { let ifTargetURL = this.curURL.includes("list.htm"); if (ifTargetURL) { let state = Utils.getUrlKeyValuePairs(this.curURL, "state"); if (state === "shipped") { return true; } return false; } return false; } // 统计订单件数 compute() { let titleRows = document.querySelectorAll(".goodsId"); titleRows.forEach((titleRow) => { let total = 0; let nextElement = titleRow.nextElementSibling; this.addFreightAndTrackElements(nextElement, titleRow); while (nextElement && !nextElement.classList.contains("goodsId")) { let numBoxes = nextElement.querySelectorAll('[class^="circularSpan"]'); for (let numBox of numBoxes) { let num = parseInt(numBox.textContent); total += num; } nextElement = nextElement.nextElementSibling; } titleRow.insertAdjacentHTML("beforeend", `