// ==UserScript==
// @name 添加备注
// @namespace http://tampermonkey.net/
// @version 0.1
// @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 none
// ==/UserScript==
;(function () {
'use strict'
// Your code here...
waitForElementToAppear(
'.auxo-table-tbody',
() => {
if ($('#fileInput').length == 0) {
addButton('.index_batchOpWrap__paous')
}
if ($('.copy-img').length == 0) {
addImageBtn()
}
},
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)
// 打印解析后的数据
}
reader.readAsArrayBuffer(file)
} else {
console.log('请选择Excel文件')
setRemarks()
}
// const btn = $('div[data-guide="flag"]').eq(0)
// btn.trigger('click')
// await new Promise(resolve => setTimeout(resolve, 1000))
// changeReactInputValue($('#seller_words')[0], '123')
}
const analyzeData = jsonData => {
let keyMap = new Map()
jsonData.forEach(item => {
if (item[20] && item[17]) {
const orderId = item[20].match(/\d+/g) || ['']
const trackNum = item[17]
keyMap.set(orderId[0], trackNum)
}
})
setRemarks(keyMap)
}
const setRemarks = async keyMap => {
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)
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) {
cancelBtn.click()
} else {
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)
}