// ==UserScript==
// @name 添加备注
// @namespace http://tampermonkey.net/
// @version 0.3
// @description 添加商品备注
// @author 大头肥猫
// @match https://fxg.jinritemai.com/ffa/morder/order/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=jinritemai.com
// @grant none
// @license MIT
// @require https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js
// @require https://unpkg.com/xlsx/dist/xlsx.full.min.js
// @require https://cdn.jsdelivr.net/npm/exceljs@4.4.0/dist/exceljs.min.js
// @require https://cdn.jsdelivr.net/npm/file-saver@2.0.5/dist/FileSaver.min.js
// @downloadURL https://update.greasyfork.icu/scripts/481037/%E6%B7%BB%E5%8A%A0%E5%A4%87%E6%B3%A8.user.js
// @updateURL https://update.greasyfork.icu/scripts/481037/%E6%B7%BB%E5%8A%A0%E5%A4%87%E6%B3%A8.meta.js
// ==/UserScript==
;(function () {
'use strict'
// Your code here...
waitForElementToAppear(
'.auxo-table-tbody',
() => {
if ($('#fileInput').length == 0) {
addButton('.index_batchOpWrap__paous')
}
},
2000
)
})()
const addButton = parent => {
const attrElement = $(parent)
const btn = $('')
const input = $('')
attrElement.append(input)
attrElement.append(btn)
input.css('margin-left', '10px')
btn.css('margin-left', '10px')
btn.click(event => {
event.stopPropagation()
event.preventDefault()
start()
})
}
const start = async () => {
let fileInput = $('#fileInput')[0]
if (fileInput.files.length > 0) {
let file = fileInput.files[0]
let reader = new FileReader()
reader.onload = function (e) {
let data = new Uint8Array(e.target.result)
let workbook = XLSX.read(data, { type: 'array' })
// 假设 Excel 文件只有一个表格,获取第一个表格的数据
let sheetName = workbook.SheetNames[0]
let worksheet = workbook.Sheets[sheetName]
// 解析数据
let jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 })
analyzeData(jsonData)
// 打印解析后的数据
console.log(jsonData)
}
reader.readAsArrayBuffer(file)
} else {
console.log('请选择Excel文件')
}
}
const analyzeData = jsonData => {
let keyMap = new Map()
let transitMap = new Map()
jsonData.forEach(item => {
const address = item[21]
const trackNum = item[18]
const transitWay = item[22] //0中转仓 1拼多多
if (address && trackNum) {
const orderId = address.match(/\d+/g) || ['']
if (keyMap.get(orderId[0])) {
keyMap.set(orderId[0], keyMap.get(orderId[0]) + ',' + trackNum)
} else {
keyMap.set(orderId[0], trackNum)
}
transitMap.set(orderId[0], transitWay)
}
})
setRemarks(keyMap, transitMap)
}
const setRemarks = async (keyMap, transitMap)=> {
const orderElements = Array.from($('.auxo-table-row-level-0'))
for (let i = 0; i < orderElements.length; i++) {
const element = orderElements[i]
const orderID = $(element).attr('data-row-key')
const remarkBtns = $('div[data-guide="flag"]')
const trackNum = keyMap.get(String(orderID), '')
if (trackNum && trackNum != '查询失败') {
console.log(orderID, trackNum, transitMap.get(String(orderID)))
remarkBtns[i].click()
const textAreaEle = $('#seller_words')
const textAreaValue = $('#seller_words').val()
const saveBtn = $('.auxo-modal-content .auxo-btn')[1]
const cancelBtn = $('.auxo-modal-content .auxo-btn')[0]
if (textAreaValue.search(trackNum) != -1) {
cancelBtn.click()
} else {
if (transitMap.get(String(orderID)) == 0) {
$('.auxo-radio-input[value="3"]').parent().click() //绿标
} else {
$('.auxo-radio-input[value="1"]').parent().click() //紫标
}
changeReactInputValue(textAreaEle[0], trackNum)
saveBtn.click()
}
await new Promise(resolve => setTimeout(resolve, 2000))
console.log('complete')
}
}
alert('已完成')
}
//调用下面这个函数可以给框架包装过的input框赋值
function changeReactInputValue(inputDom, newText) {
let lastValue = inputDom.value
inputDom.value = newText
let event = new Event('input', { bubbles: true })
event.simulated = true
let tracker = inputDom._valueTracker
if (tracker) {
tracker.setValue(lastValue)
}
inputDom.dispatchEvent(event)
}
// 检查某个元素是否出现
function waitForElementToAppear(elementSelector, callback, intervalMs) {
let checkInterval = setInterval(function () {
let element = $(elementSelector)
if (element.length > 0) {
callback(element)
// clearInterval(checkInterval)
}
}, intervalMs)
}