// ==UserScript==
// @name appendModel
// @namespace http://tampermonkey.net/
// @version 1.03
// @description append model in orderDetailAddPage
// @author FengXia
// @match http://47.107.106.156/*
// @icon
// @grant none
// @license MIT
// ==/UserScript==
// todo 增加时间
(function() {
let oldxhr=window.XMLHttpRequest;
function newobj(){}
let swap_string = `
<td>备注:</td>
<td>
<input type="text" style="width: 150px;" name="remark" id="remark" onfocus="frm_focus('remark');" onblur="frm_blur('remark');">
</td>
<td>规格:</td>
<td>
<input id="order_model" class="len150 readonly" readonly="readonly" name="model" placeholder="">
</td>
</tr>
<tr>
<td>最新采购价:</td>
<td><input id="order_price" class="len150 readonly" readonly="readonly" name="newstorageprice" placeholder="">
</td>
</tr>`;
let order_string = `
<td>备注:</td>
<td>
<input type="text" style="width: 150px;" name="remark" id="remark" onfocus="frm_focus('remark');" onblur="frm_blur('remark');">
</td>
<td>规格:</td><td><input id="order_model" class="len150 readonly" readonly="readonly" name="model" placeholder=""></td>
</tr>
<tr>
<td>最新采购价:</td>
<td><input id="order_price" class="len150 readonly" readonly="readonly" name="newstorageprice" placeholder="">
</td>
</tr>`;
let document_string;
let search_string = /(<td>备注)[\s\S]*(<\/tr>)$/gm;
let xhr_string = /^{"totalbox":.+,"total":.+,/g;
window.XMLHttpRequest=function(){
let tagetobk=new newobj();
tagetobk.oldxhr=new oldxhr();
let handle={
get: function(target, prop, receiver) {
if(prop==='oldxhr'){
return Reflect.get(target,prop);
}
if(typeof Reflect.get(target.oldxhr,prop)==='function')
{
if(Reflect.get(target.oldxhr,prop+'proxy')===undefined)
{
target.oldxhr[prop+'proxy']=(...funcargs)=> {
let result=target.oldxhr[prop].call(target.oldxhr,...funcargs)
// console.log('函数劫持获取结果',result)
return result;
}
}
return Reflect.get(target.oldxhr,prop+'proxy')
}
if(prop.indexOf('response')!==-1)
{
//console.log('属性劫持结果',Reflect.get(target.oldxhr,prop))
let inputblur =document.querySelector('input[name="saleorderid"]');
if (inputblur){
inputblur.addEventListener("keypress", fireFoxHandler, true);
}
let inputOrder =document.querySelector('#sales-sourceid-orderAddPage');
if (inputOrder){
inputOrder.addEventListener("focusout", AddListener,true);
}
let out_order =document.querySelector('#sales-sourceid-rejectBillAddPage');
if (out_order){
out_order.addEventListener("focusout", addListenerOutOrder,true);
}
if (!document.querySelector("#password")) {
document_string = Reflect.get(target.oldxhr, prop);
if (document_string.search("<form id=\"sales-form-orderDetailAddPage\">") != -1) {
document_string = document_string.replace(search_string, order_string);
return document_string;
} else if (document_string.search(" <form id=\"sales-form-swapOrderDetailAddPage\">") != -1) {
document_string = document_string.replace(search_string,swap_string);
return document_string;
} else if (document.querySelector('#order_price')) {
try {
let xhrString = JSON.parse(document_string);
let modelString = xhrString.detail.goodsInfo.model;
let newbuyprice = xhrString.detail.goodsInfo.newbuyprice;
document.querySelector('#order_price').setAttribute("placeholder", newbuyprice);
document.querySelector('#order_model').setAttribute("placeholder", modelString);
return Reflect.get(target.oldxhr, prop)
} catch (err) {
return Reflect.get(target.oldxhr, prop)
}
}
}
}
return Reflect.get(target.oldxhr,prop);
},
set(target, prop, value) {
return Reflect.set(target.oldxhr, prop, value);
},
has(target, key) {
debugger;
return Reflect.has(target.oldxhr,key);
}
}
let ret = new Proxy(tagetobk, handle);
return ret;
let ops=document.querySelector('#sales-form-orderDetailAddPage .ops');
}
})();
// 查询订单号重复
function QueryCustomerOrder(customer,order){
let xhr = new XMLHttpRequest();
let url = new URL('http://47.107.106.156:8888/sales/getOrderList.do');
let query_date = getIntervalDate();
url.searchParams.set('businessdate', query_date.start_date);
url.searchParams.set('businessdate1', query_date.end_date);
url.searchParams.set('id', '');
url.searchParams.set('salesdept', '');
url.searchParams.set('customerid', customer);
url.searchParams.set('status', '');
url.searchParams.set('sourceid', order);
url.searchParams.set('goodsid', '');
url.searchParams.set('printsign', '');
url.searchParams.set('queryprinttimes', '');
url.searchParams.set('urgentlevel', '');
url.searchParams.set('lineid', '');
url.searchParams.set('isstoragelock', '0');
url.searchParams.set('salesuserArrs', '');
url.searchParams.set('page', '1');
url.searchParams.set('rows', '200');
url.searchParams.set('sort', 'addtime');
url.searchParams.set('order', 'desc');
// 2. 配置它:从 URL /article/.../load GET-request
xhr.open('post', url);
// 3. 通过网络发送请求
xhr.send();
// 4. 当接收到响应后,将调用此函数
xhr.onload = function() {
if (xhr.status != 200) { // 分析响应的 HTTP 状态
alert(`Error ${xhr.status}: ${xhr.statusText}`); // 例如 404: Not Found
} else { // 显示结果
let xhrString = JSON.parse(xhr.response)
// console.log(xhrString)
if (xhrString.total > 0){
let i = 0;
let orderNo='';
for (; i < xhrString.rows.length;i++) {
if (xhrString.rows[i].status != '5'){
orderNo += `${xhrString.rows[i].id},`
}
}
if (orderNo){
alert( `有重复订单,订单号为${orderNo}`);
}
}
// alert(`Done, got ${xhr.response.length} bytes`); // response 是服务器响应
}
};
xhr.onerror = function() {
alert("Request failed");
};
}
function fireFoxHandler(evt){
if (evt.keyCode == 13){
let inputString =document.querySelector('input[name="saleorderid"]');
let alertString = document.querySelector('#alertTd')
let querySet = FormatString(inputString.value);
CheckString(querySet);
inputString.select();
}
}
function FormatString(inputString){
// console.log(inputString,inputString.length);
let regString,queryString,orderType;
if (inputString.length === 7){
regString = new RegExp('XD22'+inputString);
queryString = "td[field=\"orderid\"]";
orderType = 'sale';
} else if (inputString.length === 9){
regString = new RegExp(`THTZD-2022${inputString}`);
queryString = "td[field=\"id\"]";
orderType = 'out';
} else if (inputString.length === 8){
regString = new RegExp(`HHD-2022${inputString}`);
queryString = "td[field=\"sourceid\"]";
} else if (inputString.length === 11){
regString = new RegExp(`${inputString}`);
queryString = "td[field=\"orderid\"]";
orderType = 'sale';
}
let querySet = {
'regString':regString,
'queryString':queryString,
'orderType':orderType
}
return querySet
}
function CheckString(querySet,booleanH = true) {
if (querySet.regString){
let orderId = document.querySelectorAll(querySet.queryString);
let booleanSelect = false ;
let selectString = /datagrid-row-selected/;
let regH = /[^F]HHD-\d{8}-\d{3}/;
let orderString;
for (let num = 0;num< orderId.length;num++){
orderString = orderId[num].parentNode;
if (orderId[num].innerText.search(querySet.regString)>=0 && orderString.className.search(selectString) < 0){
orderString.click();
booleanSelect = true;
}
}
if (booleanSelect){
AddAlertTd('已经选择')
return
} else {
let orderString = querySet.regString.toString();
let newOrder = orderString.replace(/\//g,'')
let customer = document.querySelector('#account-customerid-salesInvoiceSourceQueryPage-hidden');
let temp =customer.getAttribute('object')
let customerTemp ='';
if (temp){
let customerString = JSON.parse(temp);
customerTemp =customerString.id;
}
if (querySet.orderType === 'sale'){
CheckSaleOrder(newOrder,customerTemp);
return
} else if (querySet.orderType === 'out'){
CheckOutOrder(newOrder,customerTemp);
return
}
}
} else {
AddAlertTd('请输入正确单号')
return
}
}
function AddAlertTd(alertString) {
let alertTd = document.querySelector('#alertTd');
if (alertTd) {
// console.log(alertTd.innerHTML);
alertTd.innerHTML =alertString;
} else {
let alertTr = document.querySelectorAll('form[id="account-form-query-salesInvoiceSouceBill"] tr');
let createTd = document.createElement("td");
createTd.innerHTML=`<font color="red" id="alertTd" >${alertString}</font>`
alertTr[2].appendChild(createTd);
}
}
function AddListener(){
let customerInput = document.querySelector('#sales-customer-showid-orderAddPage a');
let inputOrder = document.querySelector('#sales-sourceid-orderAddPage');
if (inputOrder.value){
QueryCustomerOrder(customerInput.innerText,inputOrder.value);
}
}
function addListenerOutOrder(){
let customer = document.querySelector('#sales-customer-showid-dispatchBillAddPage');
let out_order = document.querySelector('#sales-sourceid-rejectBillAddPage');
if (out_order.value){
console.log(customer.innerText.slice(3),out_order.value);
queryOutOrder(customer.innerText.slice(3),out_order.value);
}
}
function CheckSaleOrder(orderId,customer) {
let xhr = new XMLHttpRequest();
let url = new URL('http://47.107.106.156:8888/sales/getReceiptList.do');
let returnString;
let query_date = getIntervalDate()
url.searchParams.set('businessdate', '');
url.searchParams.set('businessdate1', '');
url.searchParams.set('id', orderId);
url.searchParams.set('customersort', '');
url.searchParams.set('detailOrder', '0');
url.searchParams.set('customerid', customer);
url.searchParams.set('indooruserid', '');
url.searchParams.set('salesuser', '');
url.searchParams.set('isinvoice', '-1');
url.searchParams.set('status', '');
url.searchParams.set('accounttype', '');
url.searchParams.set('salesarea', '');
url.searchParams.set('ispassdue', '');
url.searchParams.set('brandid', '');
url.searchParams.set('isbook', '');
url.searchParams.set('isledger', '');
url.searchParams.set('deliveryid', '');
url.searchParams.set('sourceid', '');
url.searchParams.set('goodsid', '');
url.searchParams.set('page', '1');
url.searchParams.set('rows', '100');
url.searchParams.set('sort', 'id');
url.searchParams.set('order', 'desc');
// 2. 配置它:从 URL /article/.../load GET-request
xhr.open('post', url);
// 3. 通过网络发送请求
xhr.send();
// 4. 当接收到响应后,将调用此函数
xhr.onload = function() {
if (xhr.status != 200) { // 分析响应的 HTTP 状态
alert(`Error ${xhr.status}: ${xhr.statusText}`); // 例如 404: Not Found
} else { // 显示结果
let xhrString = JSON.parse(xhr.response)
// console.log(xhrString)
if (xhrString.total > 0){
let rows = xhrString.rows;
if (rows[0].status === '4'){
AddAlertTd('已经核销');
return
}else if(rows[0].status === '2'){
AddAlertTd('未验收');
return
} else if(rows[0].isinvoice === '4' || rows[0].isinvoice === '1'){
AddAlertTd('已经申请抽单');
return
}else{
AddAlertTd('未出库');
return
}
} else {
AddAlertTd('请输入正确单号');
return
}
// alert(`Done, got ${xhr.response.length} bytes`); // response 是服务器响应
}
};
xhr.onerror = function() {
alert("Request failed");
};
return returnString
}
function CheckOutOrder(orderId,customer) {
let xhr = new XMLHttpRequest();
let url = new URL('http://47.107.106.156:8888/sales/getRejectBillList.do');
url.searchParams.set('businessdate', '');
url.searchParams.set('businessdate1', '');
url.searchParams.set('salesdept','');
url.searchParams.set('indooruserid', '');
url.searchParams.set('ysbusinessdate', '');
url.searchParams.set('ysbusinessdate1', '');
url.searchParams.set('isinvoice', '3');
url.searchParams.set('id', orderId);
url.searchParams.set('goodsid', '');
url.searchParams.set('billtype', '');
url.searchParams.set('isbook', '');
url.searchParams.set('customerid', customer);
url.searchParams.set('ysprintsign', '');
url.searchParams.set('queryysprinttimes', '0');
url.searchParams.set('isledger', '');
url.searchParams.set('status', '');
url.searchParams.set('page', '1');
url.searchParams.set('rows', '20');
url.searchParams.set('sort', 'addtime');
url.searchParams.set('order', 'desc');
// 2. 配置它:从 URL /article/.../load GET-request
xhr.open('post', url);
// 3. 通过网络发送请求
xhr.send();
// 4. 当接收到响应后,将调用此函数
xhr.onload = function() {
if (xhr.status != 200) { // 分析响应的 HTTP 状态
alert(`Error ${xhr.status}: ${xhr.statusText}`); // 例如 404: Not Found
} else { // 显示结果
let xhrString = JSON.parse(xhr.response)
// console.log(xhrString)
if (xhrString.total > 0){
let rows = xhrString.rows;
if (rows[0].isinvoice === '2'){
AddAlertTd('已经核销');
return
} else if (rows[0].isinvoice === '1'){
AddAlertTd('已经申请抽单');
return
}
} else {
AddAlertTd('未验收');
return
}
// alert(`Done, got ${xhr.response.length} bytes`); // response 是服务器响应
}
};
xhr.onerror = function() {
alert("Request failed");
};
}
// 查询退货单号重复
function queryOutOrder(customer,order_id){
let xhr = new XMLHttpRequest();
let url = new URL(' http://47.107.106.156:8888/sales/getRejectBillList.do');
let query_date = getIntervalDate();
url.searchParams.set('businessdate', query_date.start_date);
url.searchParams.set('businessdate1', query_date.end_date);
url.searchParams.set('storageid','');
url.searchParams.set('id','');
url.searchParams.set('confirmstatus','');
url.searchParams.set('goodsid','');
url.searchParams.set('billtype','');
url.searchParams.set('source','9');
url.searchParams.set('status','');
url.searchParams.set('sourceid','');
url.searchParams.set('printsign','');
url.searchParams.set('queryprinttimes','0');
url.searchParams.set('customerid',customer);
url.searchParams.set('page','1');
url.searchParams.set('rows','1000');
url.searchParams.set('sort','addtime');
url.searchParams.set('order','desc');
// 2. 配置它:从 URL /article/.../load GET-request
xhr.open('post', url);
// 3. 通过网络发送请求
xhr.send();
// 4. 当接收到响应后,将调用此函数
xhr.onload = function() {
if (xhr.status != 200) { // 分析响应的 HTTP 状态
alert(`Error ${xhr.status}: ${xhr.statusText}`); // 例如 404: Not Found
} else { // 显示结果
let xhrString = JSON.parse(xhr.response)
// console.log(xhrString)
if (xhrString.total > 0){
let i = 0;
let orderNo='';
for (; i < xhrString.rows.length;i++) {
if (xhrString.rows[i].remark === order_id || xhrString.rows[i].sourceid === order_id ){
orderNo += `${xhrString.rows[i].id},`
}
}
if (orderNo){
alert( `有重复单,单号为${orderNo}`);
}
}
// alert(`Done, got ${xhr.response.length} bytes`); // response 是服务器响应
}
};
xhr.onerror = function() {
alert("Request failed");
};
}
function getIntervalDate(){
let date = new Date();
let end_date = `${date.getFullYear()}-${(date.getMonth()+1).toString().padStart(2,"0")}-${date.getDate().toString().padStart(2,'0')}`;
date.setDate(date.getDate()-90);
let start_date = `${date.getFullYear()}-${date.getMonth().toString().padStart(2,"0")}-${date.getDate().toString().padStart(2,'0')}`;
let query_date ={
'start_date':start_date,
'end_date':end_date
}
return query_date
}