appendModel

append model in orderDetailAddPage

目前為 2022-07-05 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         appendModel
// @namespace    http://tampermonkey.net/
// @version      1.00
// @description  append model in orderDetailAddPage
// @author       FengXia
// @match        http://47.107.106.156/*
// @icon
// @grant        none
// @license MIT
// ==/UserScript==

(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);
                    }
                    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_string.search(xhr_string) != -1) {
                        try {
                            let xhrString = JSON.parse(document_string);
                            let modelString =xhrString.detail.goodsInfo.model;
                            let newstorageprice = xhrString.detail.goodsInfo.newstorageprice;
                            document.querySelector('#order_price').setAttribute("placeholder",newstorageprice);
                            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');
    url.searchParams.set('businessdate', '');
    url.searchParams.set('businessdate1', '');
    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;
    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');
    url.searchParams.set('businessdate','');
    url.searchParams.set('businessdate1','');
    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");
    };
}