Commit a2038478 authored by 十三's avatar 十三

添加新版和旧版发货易预约接口

parent 2af25aa6
This source diff could not be displayed because it is too large. You can view the blob instead.
import { factoryContentUrls } from "../config"; import { factoryContentUrls,bookingV2Urls, bookingAppUrls } from "../config";
import { StartPrint, Print } from "../types"; import { StartPrint, Print, ACTION } from "../types";
// platform: PlatformCode,// 平台编码,淘系及其他平台订单模板的为0,拼多多订单的为1,京东订单的为2 // platform: PlatformCode,// 平台编码,淘系及其他平台订单模板的为0,拼多多订单的为1,京东订单的为2
const PlatfromsMap = new Map([ const PlatfromsMap = new Map([
...@@ -58,7 +58,52 @@ chrome.runtime.onMessage.addListener(function (message, sender, sendResponse) { ...@@ -58,7 +58,52 @@ chrome.runtime.onMessage.addListener(function (message, sender, sendResponse) {
}) })
// let port = chrome.runtime.connect({ name: "bgSendMessage" }) // let port = chrome.runtime.connect({ name: "bgSendMessage" })
// port.postMessage(message) // port.postMessage(message)
}else if (message.action === ACTION.BookingV2) {
// 从bg页面转发给厂家页面的content.js
chrome.tabs.query({
url: bookingV2Urls
}, function (tabs) {
tabs && tabs.forEach(tab => {
// chrome.tabs.sendMessage(tab.id!, message)
chrome.tabs.update(tab.id!, { active: true}, function(tab1) {});
chrome.tabs.sendMessage(tab.id!, { action: ACTION.BookingV2, value: message.value },res=>{
if(res){
sendResponse(res);
chrome.tabs.update(sender.tab!.id!, { active: true}, function(tab1) {});
}
})
})
if(tabs.length==0){
sendResponse({status:1,msg:"请打开新版发货易发货页面"});
}
})
// let port = chrome.runtime.connect({ name: "bgSendMessage" })
// port.postMessage(message)
}else if (message.action === ACTION.BookingApp) {
// 从bg页面转发给厂家页面的content.js
chrome.tabs.query({
url: bookingAppUrls
}, function (tabs) {
tabs && tabs.forEach(tab => {
// chrome.tabs.sendMessage(tab.id!, message)
chrome.tabs.sendMessage(tab.id!, { action: ACTION.BookingApp, value: message.value },res=>{
if(res)sendResponse(res);
})
})
if(tabs.length==0){
sendResponse({status:1,msg:"请打开旧版发货易发货页面"});
}
})
// let port = chrome.runtime.connect({ name: "bgSendMessage" })
// port.postMessage(message)
} }
return true;
}) })
// chrome.runtime.onConnect.addListener(function (msg) { // chrome.runtime.onConnect.addListener(function (msg) {
// console.log(msg, 'msgbg') // console.log(msg, 'msgbg')
......
export const factoryContentUrls = ["http://localhost:8082/*", "http://localhost:8083/*", "*://admin.rtxmdz.com/*", "*://*.rtxmdz.com/*"] export const factoryContentUrls = ["http://localhost:8082/*", "http://localhost:8083/*", "*://admin.rtxmdz.com/*", "*://*.rtxmdz.com/*"]
export const bookingV2Urls=["https://v2.fahuoyi.com/order/list","https://v2.fahuoyi.com/order/list*"]
export const bookingAppUrls=["https://app.fahuoyi.com/order/index"]
let domEle = {
inputOrderId: document.querySelector("#orderFilterPane > div > form > ul > li:nth-child(4) > input") as HTMLInputElement,
btnSearch: document.querySelector("#searchOrderButton") as HTMLButtonElement,
checkBoxSelectAll: document.querySelector("#orderTable > thead > tr > th:nth-child(1) > input[type=checkbox]") as HTMLInputElement,
btnPrint: document.querySelector("#printWaybillButton") as HTMLButtonElement,
selectWaybillTemplate: document.querySelector("#printWaybillDialog > div > div > div.modal-body > form > div:nth-child(2) > div > select") as HTMLSelectElement,
radioGetNewWaybill: document.querySelector("#printWaybillDialog > div > div > div.modal-body > form > div.form-group.get-waybill-no-method-radios > div > label:nth-child(1) > input[type=radio]") as HTMLInputElement,
inputWaybillNoOnly: document.querySelector("#printWaybillDialog > div > div > div.modal-body > form > div:nth-child(4) > div > div > label > input[type=checkbox]") as HTMLInputElement,
btnDialogPrint: document.querySelector("#printWaybillDialog > div > div > div.modal-footer > button.btn.btn-primary.print-button") as HTMLButtonElement,
modalResult: document.querySelector("#printEwaybillResultDialog") as HTMLDivElement,
tableResult: document.querySelector("#printEwaybillResultDialog > div > div > div.modal-body > div.result-table-container > table") as HTMLTableElement,
btnClose: document.querySelector("#printEwaybillResultDialog > div > div > div.modal-footer > button.btn.btn-default") as HTMLButtonElement,
}
async function booking(wayCompanyId: string, orderNo: string) {
domEle.inputOrderId.value = orderNo;
domEle.checkBoxSelectAll.checked = true;
domEle.btnSearch.click();
let result = {
status: 0,
msg: "",
data: [],
}
result = await waitOrder();
if (result.status > 0) {
return result;
}
domEle.checkBoxSelectAll.click();
domEle.btnPrint.click();
result = await waitDialog();
if (result.status > 0) {
return result;
}
for (let i = 0; i < domEle.selectWaybillTemplate.options.length; i++) {
if (domEle.selectWaybillTemplate.options[i].value == wayCompanyId) {
domEle.selectWaybillTemplate.selectedIndex = i;
domEle.radioGetNewWaybill.click();
if (domEle.inputWaybillNoOnly.checked == false) domEle.inputWaybillNoOnly.click();
domEle.btnDialogPrint.click();
result = await waitPrintResult();
if (result.status == 0) {
let printReslut: any = {
success: 0,
count: domEle.tableResult.rows.length,
fail: 0,
list: []
}
for (let rowIter = 0; rowIter < domEle.tableResult.rows.length; rowIter++) {
let rowResult = domEle.tableResult.rows[rowIter].cells[2].innerText;
let rowInfo = domEle.tableResult.rows[rowIter].cells[1].innerText;
let rowObject = {
info: rowInfo,
msg: rowResult,
success: 1,
}
if (rowResult.indexOf("打印失败") > -1) {
printReslut.fail++;
rowObject.success = 0;
} else {
printReslut.success++;
}
printReslut.list.push(rowObject)
}
result.data = printReslut;
console.log(result);
domEle.btnClose.click();
return result;
}
break;
}
}
result.msg = "未匹配快递单模板";
result.status = 3;
return result;
}
async function waitOrder() {
let result = {
status: 4,
msg: "获取订单超时",
data: [],
}
for (let i = 0; i < 10; i++) {
await delayDate(1000);
if (domEle.checkBoxSelectAll.checked != true) {
if (document.getElementsByClassName("not-order-found").length > 0) {
//无订单
result.status = 2;
result.msg = "无相关订单"
return result;
} else {
result.status = 0;
result.msg = ""
return result;
}
}
}
return result;
}
async function waitDialog() {
let result = {
status: 4,
msg: "获取打印按钮超时",
data: [],
}
for (let i = 0; i < 10; i++) {
await delayDate(1000);
if (domEle.btnDialogPrint.disabled == false) {
result.status = 0;
result.msg = ""
return result;
}
}
return result;
}
async function waitPrintResult() {
let result = {
status: 4,
msg: "获取打印结果超时",
data: [],
}
for (let i = 0; i < 10; i++) {
await delayDate(1000);
if (domEle.modalResult.className == 'modal fade sui-modal none in') {
result.status = 0;
result.msg = ""
return result;
}
}
return result;
}
function delayDate(time: number) {
return new Promise((resolve, reject) => {
setTimeout(() => {
//console.log(‘开始执行‘)
resolve("success");
}, time);
});
}
export default {
booking
}
\ No newline at end of file
import {PlatformCode} from "./index"
let domEle = {
divNav:document.getElementsByClassName("nav-link") as HTMLCollection,
inputOrderId: "#originalIds",
btnSearch: "#root > section > main > div > div > div > div.order-main > div.order-table-container > div.order-search-pane > div > div > div:nth-child(2) > button:nth-child(2)",
checkBoxSelectAll: "#root > section > main > div > div > div > div.order-main > div:nth-child(3) > div:nth-child(2) > div.bottom-operation-bar > span:nth-child(1) > label > span.ant-checkbox > input",
btnPrint: "#root > section > main > div > div > div > div.order-main > div:nth-child(3) > div:nth-child(2) > div.bottom-operation-bar > button.ant-btn.ant-btn-primary.ec-print-waybill-button.mr10",
modalTips:"ant-modal-confirm-title",
btnTipsConfirm:"ant-btn ant-btn-primary",
spanWaybillTemplate: ():any=>document.getElementsByClassName("ant-modal-body")[0].getElementsByClassName("ant-select-selector")[0] ,
divWaybillTemplateList: ():any=>document.getElementsByClassName("rc-virtual-list-holder-inner")[0] ,
radioGetNewWaybill: ():any=>document.querySelector(".ant-modal-body input.ant-radio-input") ,
inputWaybillNoOnly: ():any=>document.querySelector("#isGenerateWaybillNoOnly") ,
btnDialogPrint: ():any=>document.querySelector("div.ant-modal-footer button"),
modalResult: "#printEwaybillResultDialog",
tableResult: ():any=>document.querySelector("#ewaybill-result-table > div > div.ant-table-body > table"),
btnClose: ():any=>document.querySelector("div.ant-modal-footer button:nth-child(3)") ,
}
async function booking(waybillTemplateTitle: string, orderNo: string,shopId:string) {
let result = {
status: 4,
msg: "未找到店铺",
data: [],
}
for(let navIter=0;navIter<domEle.divNav.length;navIter++){
let aNav = domEle.divNav[navIter] as HTMLLinkElement;
if(aNav.href.indexOf(shopId)>-1){
result.status=0;
result.msg="";
if(aNav.className.indexOf("active")==-1){
aNav.click();
}
break;
}
}
if (result.status > 0) {
return result;
}
result = await waitOrder();
if (result.status > 0) {
return result;
}
changeReactInputValue(document.querySelector(domEle.inputOrderId),orderNo)
simulateMouseClick(document.querySelector(domEle.btnSearch));
result = await waitOrder();
if (result.status > 0) {
return result;
}
simulateMouseClick(document.querySelector(domEle.checkBoxSelectAll));
simulateMouseClick(document.querySelector(domEle.btnPrint));
await delayDate(500);
if(document.getElementsByClassName(domEle.modalTips).length>0){
simulateMouseClick(document.getElementsByClassName(domEle.btnTipsConfirm)[3]);
}
result = await waitDialog();
if (result.status > 0) {
return result;
}
simulateMouseClick(domEle.spanWaybillTemplate());
let waybillTemplateList= domEle.divWaybillTemplateList();
for (let i = 0; i < waybillTemplateList.childNodes.length; i++) {
let divItem = waybillTemplateList.childNodes[i] as any;
if (divItem.innerText == waybillTemplateTitle) {
simulateMouseClick(divItem);
simulateMouseClick(domEle.radioGetNewWaybill());
if (domEle.inputWaybillNoOnly().checked == false) simulateMouseClick(domEle.inputWaybillNoOnly());
if(!domEle.inputWaybillNoOnly().checked ){
result.status=5;
result.msg="未选择仅获取电子面单";
return result;
}
simulateMouseClick(domEle.btnDialogPrint());
result = await waitPrintResult();
if (result.status == 0) {
let printReslut: any = {
success: 0,
count: domEle.tableResult().rows.length-1,
fail: 0,
list: []
}
for (let rowIter = 1; rowIter < domEle.tableResult().rows.length; rowIter++) {
let rowResult = domEle.tableResult().rows[rowIter].cells[2].innerText;
let rowInfo = domEle.tableResult().rows[rowIter].cells[1].childNodes[0].childNodes[0].childNodes[1].textContent;
let rowObject = {
info: rowInfo,
msg: rowResult,
success: 1,
}
if (domEle.tableResult().rows[rowIter].cells[2].innerHTML.indexOf('class="text-error"') > -1) {
printReslut.fail++;
rowObject.success = 0;
} else {
printReslut.success++;
}
printReslut.list.push(rowObject)
}
result.data = printReslut;
console.log(result);
simulateMouseClick(domEle.btnClose());
return result;
}
break;
}
}
result.msg = "未匹配快递单模板";
result.status = 3;
return result;
}
async function waitOrder() {
let result = {
status: 4,
msg: "获取订单超时",
data: [],
}
for (let i = 0; i < 10; i++) {
await delayDate(1000);
let loadingMask = document.querySelector("#root > section > main > div > div > div > div.order-main > div.order-table-container > div.loading-mark-container > div") as any;
if (loadingMask.style.display=="none" ) {
if (document.querySelector("#root > section > main > div > div > div > div.order-main > div.order-table-container > div.loading-mark-container > table > tbody > tr > td > div > div.mb10 > p")) {
//无订单
result.status = 2;
result.msg = "无相关订单"
return result;
} else {
result.status = 0;
result.msg = ""
return result;
}
}
}
return result;
}
async function waitDialog() {
let result = {
status: 4,
msg: "获取打印按钮超时",
data: [],
}
for (let i = 0; i < 10; i++) {
await delayDate(1000);
if (document.getElementsByClassName("ant-modal-content").length) {
result.status = 0;
result.msg = ""
return result;
}
}
return result;
}
async function waitPrintResult() {
let result = {
status: 4,
msg: "获取打印结果超时",
data: [],
}
for (let i = 0; i < 10; i++) {
await delayDate(1000);
if (domEle.tableResult()) {
result.status = 0;
result.msg = ""
return result;
}
}
return result;
}
function delayDate(time: number) {
return new Promise((resolve, reject) => {
setTimeout(() => {
//console.log(‘开始执行‘)
resolve("success");
}, time);
});
}
function changeReactInputValue(inputDom:any,newText:string){
let lastValue = inputDom.value;
inputDom.value = newText;
let event = new Event('input', { bubbles: true });
// @ts-ignore
event.simulated = true;
let tracker = inputDom._valueTracker;
if (tracker) {
tracker.setValue(lastValue);
}
inputDom.dispatchEvent(event);
}
const mouseClickEvents = ['mousedown', 'click', 'mouseup'];
function simulateMouseClick(element:any){
mouseClickEvents.forEach(mouseEventType =>
element.dispatchEvent(
new MouseEvent(mouseEventType, {
view: window,
bubbles: true,
cancelable: true,
buttons: 1
})
)
);
}
export default {
booking
}
\ No newline at end of file
...@@ -3,14 +3,16 @@ ...@@ -3,14 +3,16 @@
import { message } from "antd"; import { message } from "antd";
import { Print, StartPrint } from "../types"; import { ACTION, Print, StartPrint } from "../types";
import BookingApp from "./bookingApp"
import BookingV2 from "./bookingV2"
export enum PlatformCode { export enum PlatformCode {
"淘系及其他平台订单模板" = 0, "淘系及其他平台订单模板" = 0,
"拼多多订单模板" = 1, "拼多多订单模板" = 1,
"京东订单模板" = 2 "京东订单模板" = 2
} }
console.log("inject");
type Params = { type Params = {
waybillNo: string // 运单号 waybillNo: string // 运单号
platform: PlatformCode, platform: PlatformCode,
...@@ -19,6 +21,10 @@ type Params = { ...@@ -19,6 +21,10 @@ type Params = {
orderNo: string// 订单号 orderNo: string// 订单号
wayCompanyId: string// 快递公司的Id wayCompanyId: string// 快递公司的Id
platform: PlatformCode,// 平台编码,淘系及其他平台订单模板的为0,拼多多订单的为1,京东订单的为2 platform: PlatformCode,// 平台编码,淘系及其他平台订单模板的为0,拼多多订单的为1,京东订单的为2
}& {
orderNo: string// 订单号
waybillTemplateTitle: string// 快递单模板
shopId: string,// 店铺Id
} }
interface Response { interface Response {
...@@ -183,7 +189,23 @@ const printWayBillByNew = function ({ orderNo, wayCompanyId, platform }: Pick<Pa ...@@ -183,7 +189,23 @@ const printWayBillByNew = function ({ orderNo, wayCompanyId, platform }: Pick<Pa
}) })
} }
// web页面通信
window.addEventListener("message",function(message:any){
if(message.data.action == ACTION.BookingApp){
chrome.runtime.sendMessage(message.data,(ret)=>{
window.postMessage({isResult:1,...ret},"*")
console.log("message ret:",ret);
})
}
if(message.data.action == ACTION.BookingV2){
chrome.runtime.sendMessage(message.data,(ret)=>{
window.postMessage({isResult:1,...ret},"*")
console.log("message ret:",ret);
})
}
})
//发货易页面 //发货易页面
chrome.runtime.onMessage.addListener(function (message: Message, sender, response) { chrome.runtime.onMessage.addListener(function (message: Message, sender, response) {
...@@ -197,8 +219,27 @@ chrome.runtime.onMessage.addListener(function (message: Message, sender, respons ...@@ -197,8 +219,27 @@ chrome.runtime.onMessage.addListener(function (message: Message, sender, respons
printWayBillByNew({ orderNo, wayCompanyId, platform }) printWayBillByNew({ orderNo, wayCompanyId, platform })
} }
} }
else if (message.action === ACTION.BookingV2) {
console.log("recive BookingV2",message);
let result=null;
(async () => {
result = await BookingV2.booking(message.value.waybillTemplateTitle,message.value.orderNo,message.value.shopId);
response(result);
})();
}
else if (message.action === ACTION.BookingApp) {
console.log("recive BookingApp",message);
hookConfirm();
let result=null;
(async () => {
result = await BookingApp.booking(message.value.wayCompanyId,message.value.orderNo);
response(result);
})();
}
return true;
}) })
// 拿到打印机 // 拿到打印机
...@@ -296,7 +337,21 @@ window.addEventListener("message", function (msg) { ...@@ -296,7 +337,21 @@ window.addEventListener("message", function (msg) {
} }
}) })
function hookConfirm(){
let temp = document.createElement("script")
temp.innerHTML = `
if(!convertMark){
_confirm = confirm;
confirm=function(msg){
console.log(msg);
return true;
}
var convertMark=true;
}
`
document.body.appendChild(temp)
}
function injectCustomjs() { function injectCustomjs() {
let temp = document.createElement("script") let temp = document.createElement("script")
......
...@@ -3,6 +3,13 @@ ...@@ -3,6 +3,13 @@
// // 让popup获取waybillTemplate // // 让popup获取waybillTemplate
// export const GetWaybillTemplate = "getWaybillTemplate" // export const GetWaybillTemplate = "getWaybillTemplate"
export enum ACTION{
BookingV2="BookingV2",
BookingApp="BookingApp"
}
export const StartPrint = "StartPrint" export const StartPrint = "StartPrint"
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
//旧版接口
let data={
action:"BookingApp",
value:{
wayCompanyId:1951963,// 运单号Id
orderNo:"2981762426824933917"//订单号
}
};
window.postMessage(data,"*")
//新版接口
let data={
action:"BookingV2",
value:{
waybillTemplateTitle:"【菜鸟】中通一联单 - tianpeng8888深圳布吉75512",//运单模板标题
orderNo:"2981762426824933917",//订单号
shopId:"27064"//店铺Id,抖店:27069,淘宝:27064,拼多多:27066,其他:27068
}
};
window.postMessage(data,"*")
// web页面获取结果监听
window.addEventListener("message",function(ev){
if(ev.data.isResult){
console.log("web",ev.data)
/* //返回结果说明
{
isResult:1,//结果标识
status:0,// 0为成功打印,但是不代表所有订单都获取到新单号
msg:"",// status>0时的错误原因
data:{
count:3,//查询到的订单数量
success:1,//获取单号成功的数量
fail:2,//获取单号失败的数量
list:[
{
info:"",//旧版接口返回订单地址;新版接口返回订单号
msg:"",//旧版接口成功:返回运单号,失败:返回原因;新版接口成功:未测试返回内容,失败:返回原因;
success:0,// 0:失败 1:成功
}
]
}
} */
}
})
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment