152 lines
7.0 KiB
JavaScript
152 lines
7.0 KiB
JavaScript
// ==UserScript==
|
|
// @name 管易小助手
|
|
// @namespace http://tampermonkey.net/
|
|
// @version 0.2
|
|
// @description 管易ERP 批量操作工具
|
|
// @author MiaoWoo
|
|
// @match http*://www.guanyierp.com/**
|
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=guanyierp.com
|
|
// @grant none
|
|
// ==/UserScript==
|
|
|
|
(function () {
|
|
'use strict'
|
|
let toolHtml = `<span class="help-center-title tc" style="color: #4caf50;">管易小助手</span>`
|
|
let tool = document.createElement("div")
|
|
tool.className = "flex flex-column flex-y-center justcenter hand tmall-time ant-popover-hidden"
|
|
tool.innerHTML = toolHtml
|
|
document.querySelector('.help-center').parentNode.appendChild(tool)
|
|
tool.onclick = () => {
|
|
toolPage.className = toolPage.className ? '' : 'ant-popover-hidden'
|
|
}
|
|
|
|
let toolPageHtml = `
|
|
<style>
|
|
.ms-controller {
|
|
visibility: hidden;
|
|
}
|
|
</style>
|
|
<div :controller="gy" class="ant-popover ant-popover-placement-left ms-controller" style="left: 955px; top: 425px; transform-origin: 395.375px 50%;">
|
|
<div class="ant-popover-content">
|
|
<div class="ant-popover-arrow"><span class="ant-popover-arrow-content"></span></div>
|
|
<div class="ant-popover-inner" role="tooltip">
|
|
<div class="ant-popover-inner-content">
|
|
<h2 :click="log">管易小助手</h2>
|
|
<h3 :if="@loading" :text="loadingText">加载中 请稍候...</h3>
|
|
<div :if="!@loading">
|
|
<label style="font-size: 13px">选择配置类型</label>
|
|
<br>
|
|
<span :for="el in @configTypes"><input type="checkbox" :attr="{ value: el.value }" ms-duplex="@configType"/>{{el.name}}</span>
|
|
<br>
|
|
<label style="font-size: 13px">选择过滤规则</label>
|
|
<br>
|
|
<span :for="el in @filterRules"><input type="radio" :attr="{ value: el.value }" ms-duplex="@filterRule"/>{{el.name}}</span>
|
|
<br>
|
|
<br>
|
|
<label style="font-size: 13px">修改仓库: </label>
|
|
<select :duplex="@warehouse" class="form-control">
|
|
<option value="">请选择仓库</option>
|
|
<option :for="el in @warehouses" :attr="{ value: el.id }">{{el.name}}</option>
|
|
</select>
|
|
<button type="button" class="btn btn-default" :click="@modifyWarehouse">
|
|
修改
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
`
|
|
let toolPage = document.createElement("div")
|
|
toolPage.id = "gytool"
|
|
toolPage.style = "position: absolute; top: 0px; left: 0px; width: 100%;"
|
|
toolPage.className = 'ant-popover-hidden'
|
|
toolPage.innerHTML = toolPageHtml
|
|
document.body.appendChild(toolPage)
|
|
async function api(method, url, body = null, contentType = "application/json; charset=UTF-8") {
|
|
return await fetch(url, {
|
|
"headers": {
|
|
"accept": "*/*",
|
|
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8",
|
|
"content-type": contentType,
|
|
"x-requested-with": "XMLHttpRequest"
|
|
},
|
|
"referrer": "http://www.guanyierp.com/tc/delivery/delivery_wave",
|
|
"referrerPolicy": "strict-origin-when-cross-origin",
|
|
"body": body,
|
|
"method": method,
|
|
"mode": "cors",
|
|
"credentials": "include"
|
|
}).then(r => r.json())
|
|
}
|
|
fetch('https://fastly.jsdelivr.net/npm/avalon2@2.2.10/dist/avalon.min.js')
|
|
.then(r => r.text()).then(source => {
|
|
var header = document.getElementsByTagName("head").item(0)
|
|
var avalonJs = document.createElement("script")
|
|
avalonJs.language = "javascript"
|
|
avalonJs.type = "text/javascript"
|
|
avalonJs.id = 'avalonJs'
|
|
avalonJs.defer = true
|
|
avalonJs.text = source
|
|
header.appendChild(avalonJs)
|
|
let main = avalon.define({
|
|
$id: 'gy',
|
|
loading: true,
|
|
loadingText: '执行中 请稍候...',
|
|
warehouses: [],
|
|
warehouse: '',
|
|
filterRules: [
|
|
{ name: '仅胶带(名称带A)', value: "1" },
|
|
],
|
|
filterRule: '1',
|
|
configTypes: [
|
|
{ name: '热销订单', value: "1" },
|
|
{ name: '一单一件', value: "2" },
|
|
{ name: '一单一品', value: "3" },
|
|
{ name: '一单多品', value: "4" },
|
|
],
|
|
configType: ["3", "4"],
|
|
log: function () {
|
|
console.log(main)
|
|
},
|
|
init: async function () {
|
|
await main.initWarehouse()
|
|
tool.className = "flex flex-column flex-y-center justcenter hand tmall-time"
|
|
main.loading = false
|
|
},
|
|
initWarehouse: async function () {
|
|
let warehouses = await api('GET', 'http://www.guanyierp.com/info/warehouse/data/all?_dc=' + Date.now() + '&page=1&start=0&limit=25')
|
|
main.warehouses = warehouses.map((warehouse) => { return { id: warehouse.id, name: warehouse.name } })
|
|
},
|
|
modifyWarehouse: async function () {
|
|
if (!main.warehouse) {
|
|
return alert("请选择需要修改的仓库.")
|
|
}
|
|
main.loading = true
|
|
let tasks = []
|
|
for (const configType of main.configType) {
|
|
let configs = await api('POST',
|
|
'http://www.guanyierp.com/wave/wave_config/list?_dc=' + Date.now(),
|
|
'configType=' + configType,
|
|
"application/x-www-form-urlencoded; charset=UTF-8"
|
|
)
|
|
// configs = configs.filter(c => c.configName.indexOf('测试') != -1)
|
|
configs = configs.filter(c => c.autoRun)
|
|
if (main.configRule == "1") {
|
|
configs = configs.filter(c => c.configName.indexOf('A') != -1)
|
|
}
|
|
configs.forEach(c => {
|
|
c.waveConfigContentInfo.warehouseIds = [main.warehouse]
|
|
tasks.push(api('POST', 'http://www.guanyierp.com/wave/wave_config/update', JSON.stringify(c)))
|
|
})
|
|
}
|
|
let result = await Promise.allSettled(tasks)
|
|
console.log(result)
|
|
alert('批量修改仓库完成 共计 ' + result.length + ' 个配置')
|
|
main.loading = false
|
|
}
|
|
})
|
|
main.init()
|
|
})
|
|
})()
|