// ==UserScript== // @name dxm // @namespace https://greasyfork.org/zh-CN/scripts/462551 // @version 1.5 // @description 统计当前订单件数 & 针对区域定价的报关金额进行批量填充 // @author Huang // @match https://www.dianxiaomi.com/order/* // @icon https://www.google.com/s2/favicons?sz=64&domain=dianxiaomi.com // @grant GM_addStyle // @license MIT // @downloadURL none // ==/UserScript== (function () { 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") } } class Summary { constructor() { this.compute() } // 统计订单件数 compute () { let titleRows = document.querySelectorAll('.goodsId') const len = titleRows.length if (len == 0) return for (let titleRow of titleRows) { let contentRow = titleRow.nextElementSibling let numBoxes = contentRow.querySelectorAll('[class^="circularSpan"]') let sum = 0 for (let numBox of numBoxes) { let num = parseInt(numBox.textContent) sum += num } titleRow.insertAdjacentHTML("beforeend", `

${sum}件

`) } } } class Declare { static finalDeclareValues = [] 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() setTimeout(() => { executeBatchCustom(1) // https://www.dianxiaomi.com/static/js/orderIndex.js?v=vh72.03 4708行 // $("#orderbatchCustomsInfo").customModal("hide") $('a[data-close="modal"]').click() }, 1000) }) } // 准备要在报关列表用到的数据 static prepareData () { let t = [], that = this $(`input[name='packageId']`).each(function () { if ($(this).prop('checked')) { let eleList = $(this).closest('tr').next().children().eq(0).find('tr') if (eleList.length == 1) {//当前订单只有一件时以订单总金额为准 let singlePrice = $(eleList[0]).closest('td').next().text().replace(/[^0-9.]/g, "") t.push(singlePrice) } else { eleList.each((i, e) => t.push($(e).find("p:contains('USD')").text().replace(/[^0-9.]/g, ""))) } 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) }) } } jQuery.ajaxPrefilter(function (options, originalOptions, jqXHR) { const { url } = options const keywords = ['list.htm', 'splitList.htm', 'mergeList.htm', 'searchPackage.htm'] for (const curURL of keywords) { jqXHR.done(function (data) { if (!data) return Declare.init() if (url.includes(curURL)) setTimeout(() => { new Summary() }, 50) if (url.includes('showBatchCustoms.htm')) setTimeout(function () { Declare.fillValues() }, 50) }) } }) let css = ` h3.total-num { color: red; position: absolute; left: 250px; top: 7px; font-size:14px; } #orderListTable tr.goodsId { position: relative; } ` GM_addStyle(css) })()