appendModel

append model in orderDetailAddPage

As of 2022-08-15. See the latest version.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

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

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

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

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

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         appendModel
// @namespace    http://tampermonkey.net/
// @version      3.02
// @description  append model in orderDetailAddPage
// @author       FengXia
// @match        http://47.107.106.156/*
// @icon
// @grant        none
// @license MIT
// @require https://greatest.deepsurf.us/scripts/448895-elementgetter%E5%BA%93/code/ElementGetter%E5%BA%93.js?version=1077494
// @require https://unpkg.com/[email protected]/dist/ajaxhook.min.js
// ==/UserScript==


(function() {
    const elmGetter = new ElementGetter();  //初始化ElementGetter
    let url_bool = false;   //网址判断变量
    ah.proxy({  //ajax hook
        //请求发起前进入
        onRequest: (config, handler) => {
            // console.log(config.url)
            if (config.url==='sales/getGoodsDetail.do'){    //判断xhr网址是否是获取新增订单商品
                url_bool =true;
            }
            handler.next(config);
        },
        //请求成功后进入
        onResponse: (response, handler) => {
            if (url_bool) { //
                // console.log(response.response);
                updateData(response.response);
                url_bool =false;
            }

            handler.next(response)
        }
    });

    //增加单据搜索
    elmGetter.get('input[name="saleorderid"]').then(input_order => {
        input_order.addEventListener("keypress", addSearch,true);
        // console.log(order);
    });

    // elmGetter.get('#sales-sourceid-orderAddPage').then(order => {
    //     order.addEventListener("focusout", addListener,true);
    //     // console.log(order);
    // });
    //给新增销售订单的单号元素添加监听
    elmGetter.each('#sales-sourceid-orderAddPage', document, order => {
        order.addEventListener("focusout", addListener,true);
        // console.log(order);
    });


    //给新增退货通知单的单号元素添加监听
    elmGetter.get('#sales-sourceid-rejectBillAddPage').then(out_order => {
        out_order.addEventListener("focusout", addListenerOutOrder,true);
        // console.log(out_order);
    });


    //订单添加规格
    elmGetter.each('#remark', document, add_model => {
        const table_tr=add_model.parentNode.parentNode;
        let model_string = `
<td>规格:</td>
<td><input id="products_model" class="len150 readonly" readonly="readonly" name="model" placeholder=""></td>
</tr>`
        addElement(table_tr,'#products_model',model_string,'beforeend')
    });


    //订单添加最新采购价
    elmGetter.each('#sales-loading-orderDetailAddPage', document, add_price => {
        const table = add_price.parentNode.parentNode;
        let price_string = `
<tr>
<td>最新采购价:</td>
<td><input id="products_price" class="len150 readonly" readonly="readonly" name="newstorageprice" placeholder="">
</td>
</tr>`
        addElement(table,'#products_price',price_string,'beforeend')
    });


    //销售单添加历史销售明细
    elmGetter.each('#sales-dialog-orderAddPage-content', document, add_history_price => {
        // console.log(add_history_price);
        const div = add_history_price.parentNode;
        div.style.width = '1201px'
        let div_string = `
<div class="panel window" id="addhistoryprice" style="width: 600px; left:601px">
<div class="panel-header panel-header-noborder window-header" style="width: 600px;">
<div class="panel-title" style="">商品历史价格</div>
</div>
<div class="easyui-layout layout easyui-fluid" data-options="fit:true" style="width: 600px; height: 424px;">
<div class="panel layout-panel layout-panel-center" style="width: 600px; left: 0px; top: 0px;">
<div data-options="region:'center',border:false" title="" class="panel-body panel-body-noheader panel-body-noborder layout-body" style="width: 600px; height: 424px;">
<table cellpadding="0" cellspacing="0">
<tbody>
<tr class="datagrid-header-row">
<td class="len120">日期</td>
<td class="len80">仓库</td>
<td class="len80">单位</td>
<td class="len100">数量</td>
<td class="len100">单价</td>
<td class="len120">金额</td>
</tr>
</tbody></table>
<table cellpadding="0" cellspacing="0">
<tbody id="table_row">
</tbody></table>
</div>
</div>
</div>
</div>
`
        addElement(div,'#addhistoryprice',div_string,'afterbegin')
    });

    //换货单添加历史销售明细
    elmGetter.each('#sales-dialog-swapOrderAddPage-content', document, add_history_swap => {
        // console.log(add_history_price);
        const div = add_history_swap.parentNode;
        div.style.width = '1201px'
        let div_string = `
<div class="panel window" id="addhistoryswap" style="width: 600px; left:601px">
<div class="panel-header panel-header-noborder window-header" style="width: 600px;">
<div class="panel-title" style="">商品历史价格</div>
</div>
<div class="easyui-layout layout easyui-fluid" data-options="fit:true" style="width: 600px; height: 424px;">
<div class="panel layout-panel layout-panel-center" style="width: 600px; left: 0px; top: 0px;">
<div data-options="region:'center',border:false" title="" class="panel-body panel-body-noheader panel-body-noborder layout-body" style="width: 600px; height: 424px;">
<table cellpadding="0" cellspacing="0">
<tbody>
<tr class="datagrid-header-row">
<td class="len120">日期</td>
<td class="len80">仓库</td>
<td class="len80">单位</td>
<td class="len100">数量</td>
<td class="len100">单价</td>
<td class="len120">金额</td>
</tr>
</tbody></table>
<table cellpadding="0" cellspacing="0">
<tbody id="table_row">
</tbody></table>
</div>
</div>
</div>
</div>
`
        addElement(div,'#addhistoryswap',div_string,'afterbegin')
    });

    //退货单添加历史销售明细
    elmGetter.each('#sales-dialog-rejectBillAddPage-content', document, add_history_reject => {
        // console.log(add_history_price);
        const div = add_history_reject.parentNode;
        div.style.width = '1201px';
        div.style.left='360px';
        let div_string = `
<div class="panel window" id="addhistoryreject" style="width: 600px; left:601px">
<div class="panel-header panel-header-noborder window-header" style="width: 600px;">
<div class="panel-title" style="">商品历史价格</div>
</div>
<div class="easyui-layout layout easyui-fluid" data-options="fit:true" style="width: 600px; height: 480px;">
<div class="panel layout-panel layout-panel-center" style="width: 600px; left: 0px; top: 0px;">
<div data-options="region:'center',border:false" title="" class="panel-body panel-body-noheader panel-body-noborder layout-body" style="width: 600px; height: 480px;">
<table cellpadding="0" cellspacing="0">
<tbody>
<tr class="datagrid-header-row">
<td class="len120">日期</td>
<td class="len80">仓库</td>
<td class="len80">单位</td>
<td class="len100">数量</td>
<td class="len100">单价</td>
<td class="len120">金额</td>
</tr>
</tbody></table>
<table cellpadding="0" cellspacing="0">
<tbody id="table_row">
</tbody></table>
</div>
</div>
</div>
</div>
`
        addElement(div,'#addhistoryreject',div_string,'afterbegin')
    });


    // 换货单添加最新采购价
    elmGetter.each('#sales-loading-swapOrderDetailAddPage', document, add_price => {
        const table = add_price.parentNode.parentNode;
        let price_string = `
<tr>
<td>最新采购价:</td>
<td><input id="products_price" class="len150 readonly" readonly="readonly" name="newstorageprice" placeholder="">
</td>
</tr>`
        addElement(table,'#products_price',price_string,'beforeend')
    });


    elmGetter.each('#button-commonquery', document, modifyaudit => {
        let model_string = `<a href="javaScript:void(0);" id="button-modifyaudit" 
    class="easyui-linkbutton button-list l-btn l-btn-small l-btn-plain"
    data-options="plain:true,iconCls:'button-audit'" style="" group="">
    <span class="l-btn-left l-btn-icon-left"><span class="l-btn-text">修改审核</span>
    <span class="l-btn-icon button-audit">&nbsp;</span></span></a>`
        addElement(modifyaudit,'#pbutton-modifyaudit',model_string,'beforebegin');
        let modify_button = document.querySelector('#button-modifyaudit');
        modify_button.addEventListener('click', addremark,true);
        // order.addEventListener("focusout", addListener,true);
        // console.log(order);
    });

})();


//添加元素
function addElement(element,element_id,add_string,add_mode){
    if(!document.querySelector(element_id)){
        element.insertAdjacentHTML(add_mode,add_string)
    }
}

// 查询订单号重复
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 updateData(xhr_string) {
    try {
        let xhrString = JSON.parse(xhr_string);
        let customer = document.querySelector('[id^="sales-customer-showid"] a');
        let model_string = xhrString.detail.goodsInfo.model;
        let products_price  = xhrString.detail.goodsInfo.newbuyprice;
        let products_string = xhrString.detail.goodsInfo.id;
        showCustomerSalesFlowList((customer?customer.innerText:
            document.querySelector('#sales-customer-showid-dispatchBillAddPage').innerText.substring(3)), products_string);
        document.querySelector('#products_model').setAttribute("placeholder", model_string);
        document.querySelector('#products_price').setAttribute("placeholder", products_price);
    } catch (err) {
        // console.log('err');
        return
    }
}

//销售核销添加搜索功能
function addSearch(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
}

// 查询销售情况流水明细
function showCustomerSalesFlowList(customer,products){
    let xhr = new XMLHttpRequest();
    let url = new URL('http://47.107.106.156:8888/report/finance/showCustomerSalesFlowList.do');
    let query_date = getIntervalDate();
    url.searchParams.set("businessdate1", "2022-03-01");
    url.searchParams.set("businessdate2", query_date.end_date);
    url.searchParams.set("goodsid", products);
    url.searchParams.set("salesuser", "");
    url.searchParams.set("batchno", "");
    url.searchParams.set("goodssort", "");
    url.searchParams.set("customerid", customer);
    url.searchParams.set("pcustomerid", "");
    url.searchParams.set("salesarea", "");
    url.searchParams.set("customersort","");
    url.searchParams.set("salesdept", "");
    url.searchParams.set("brandid", "");
    url.searchParams.set("orderid", "");
    url.searchParams.set("type", "");
    url.searchParams.set("invoice1", "1");
    url.searchParams.set("writeoff1","1");
    url.searchParams.set("invoice2", "1");
    url.searchParams.set("writeoff2", "1");
    url.searchParams.set("id", "");
    url.searchParams.set("storageid", "");
    url.searchParams.set("supplierid", "");
    url.searchParams.set("page", "1");
    url.searchParams.set("rows", "1000");
    // 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)
            let table_html = '';
            let table_parentNode = document.querySelector("#table_row");
            if (xhrString.total > 0){
                let row_data = xhrString.rows;
                let x = 1;  //用x取余来做斑马格
                for (let row_num in row_data){
                    table_html = `
<tr class="${(x%2 ==0) ?"datagrid-row-alt datagrid-row":"datagrid-row"}">
<td class="len120">${row_data[row_num].addtime}</td>
<td class="len80">${row_data[row_num].deliverystoragename}</td>
<td class="len80">${row_data[row_num].unitname}</td>
<td class="len100">${row_data[row_num].unitnum}</td>
<td class="len100">${row_data[row_num].price}</td>
<td class="len120">${row_data[row_num].taxamount}</td>
</tr>
` + table_html;
                    x=++x;
                }
            }
            table_parentNode.innerHTML=table_html;
            // alert(`Done, got ${xhr.response.length} bytes`); // response 是服务器响应
        }
    };

    xhr.onerror = function() {
        alert("Request failed");
    };
}


async function addremark(){
    let findSelect = document.querySelectorAll("div.datagrid-view2 tr.datagrid-row-selected");
    let order_num;
    let audit_num = 0;
    // let order_string='';
    let select_num = findSelect.length
    if (select_num >1) {
        let input_num = prompt('请输入');
        if (null === input_num){
            return
        } else {
            for (let i = 0; i < select_num - 1; i++) {
                // console.log(t[i]);
                order_num = findSelect[i].querySelector('[field="id"] div').innerHTML;
                // console.log(order_num)
                if (input_num) {
                    queryEditOrder(order_num, i, input_num)
                    // order_string = order_num + ',' + order_string;
                }
                // console.log(audit_num);
                await sleep(2500);
                auditOrder(order_num);
                // console.log(audit_num);

            }
        alert(`你选择了${findSelect.length - 1}张单`)
        }
    } else {
        alert(`没有选择单据`)
    }
}

function queryEditOrder(order_num,num,input_num){
    let xhr = new XMLHttpRequest();
    let timestamp = Date.parse( new Date());
    let url = new URL(`http://47.107.106.156:8888/sales/orderEditPage.do?id=${order_num}&_=${timestamp}`);

    // 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 parser = new DOMParser();
            let doc = parser.parseFromString(xhr.response, "text/html")
            // console.log(doc);
            let order_type = doc.querySelector('#sales-form-orderAddPage').action;
            if (order_type === 'http://47.107.106.156:8888/sales/sales/updateOrder.do') {
                let saleorder_id = doc.querySelector('[name="saleorder.id"]').value;
                let saleorder_businessdate = doc.querySelector('[name="saleorder.businessdate"]').value;
                let saleorder_urgentlevel = doc.querySelector('[name="saleorder.urgentlevel"] option[selected="selected"]').value;
                let saleorder_salestype = doc.querySelector('[name="saleorder.salestype"] option[selected="selected"]').value;
                let saleorder_status = doc.querySelector('[name="saleorder.status"]').value;
                let saleorder_customerid = doc.querySelector('[name="saleorder.customerid"]').value;
                let saleorder_salesuser = doc.querySelector('[name="saleorder.salesuser"]').value;
                let saleorder_storageid = doc.querySelector('[name="saleorder.storageid"]').value;
                let saleorder_salesdept = doc.querySelector('[name="saleorder.salesdept"]').value;
                let saleorder_sourceid = doc.querySelector('[name="saleorder.sourceid"]').value;
                let saleorder_remark = doc.querySelector('[name="saleorder.remark"]').value;
                let regexp = /[,]*此单为超级审核[,]*/g;
                saleorder_remark = `${input_num}-${num+1} ${saleorder_remark.replaceAll(regexp, "")}`;
                console.log(saleorder_remark);
                let lackGoodsjson = doc.querySelector('[name="lackGoodsjson"]').innerHTML;
                let saveaudit = doc.querySelector('[name="saveaudit"]').value;
                // let oldFromData = doc.querySelector('[name="oldFromData"]').value;
                let script_string = doc.scripts.item(0).text;
                let goodsjson = script_string.match(/\[{".*"}\]/);
                let from_date = {
                    'saleorder_id': saleorder_id,
                    'saleorder_businessdate': saleorder_businessdate,
                    'saleorder_status': saleorder_status,
                    'saleorder_customerid': saleorder_customerid,
                    'saleorder_salestype': saleorder_salestype,
                    'saleorder_urgentlevel': saleorder_urgentlevel,
                    'saleorder_storageid': saleorder_storageid,
                    'saleorder_salesdept': saleorder_salesdept,
                    'saleorder_salesuser': saleorder_salesuser,
                    'saleorder_sourceid': saleorder_sourceid,
                    'saleorder_remark': saleorder_remark,
                    'goodsjson': goodsjson,
                    'lackGoodsjson': lackGoodsjson,
                    'saveaudit': saveaudit,
                    // 'oldFromData':oldFromData,
                }
                // console.log(from_date);
                updateOrder(from_date)
            } else {
                alert(`${order_num}号单不能修改`)
            }

            // alert(`Done, got ${xhr.response.length} bytes`); // response 是服务器响应
        }
    };

    xhr.onerror = function() {
        alert("Request failed");
    };
}



function updateOrder(from_date){
    let xhr = new XMLHttpRequest();
    xhr.open('post', 'http://47.107.106.156:8888/sales/updateOrder.do');
// 必须在xhr.send()前设置
    xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
// data必须是这种表单数据格式的字符串;否则服务器接受到数据,按照表单数据格式解析,实际发送的不是表单格式的数据,将会解析不出来
    let data = `addType=real&saleorder.oldid=${from_date.saleorder_id}&saleorder.id=${from_date.saleorder_id}&saleorder.businessdate=${from_date.saleorder_businessdate}&saleorder.status=${from_date.saleorder_status}&saleorder.customerid=${from_date.saleorder_customerid}&saleorder.salestype=${from_date.saleorder_salestype}&saleorder.urgentlevel=${from_date.saleorder_urgentlevel}&saleorder.storageid=${from_date.saleorder_storageid}&saleorder.salesdept=${from_date.saleorder_salesdept}&saleorder.salesuser=${from_date.saleorder_salesuser}&saleorder.sourceid=${from_date.saleorder_sourceid}&saleorder.remark=${from_date.saleorder_remark}&goodsjson=${from_date.goodsjson}&lackGoodsjson=${from_date.lackGoodsjson}&saveaudit=${from_date.saveaudit}`;
    // console.log(encodeURI(data));
    xhr.send(encodeURI(data));
    xhr.onload = function() {
        if (xhr.status != 200) { // 分析响应的 HTTP 状态
            alert(`Error ${xhr.status}: ${xhr.statusText}`); // 例如 404: Not Found
        } else { // 显示结果
            // console.log(xhr.response)
            // auditOrder(from_date.saleorder_id)
            // alert(`Done, got ${xhr.response.length} bytes`); // response 是服务器响应
        }
    };

    xhr.onerror = function() {
        alert("Request failed");
    };
}


async function auditOrder(order_num){
    let xhr = new XMLHttpRequest();
    let url = new URL('http://47.107.106.156:8888/sales/auditOrder.do');
    url.searchParams.set('id', order_num);
    url.searchParams.set('type', '1');
    url.searchParams.set('model','supper');

    // 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.flag === 'true') {
                return 1
            } else {
                return 0
            }

        }
    };
    xhr.onerror = function() {
        alert("Request failed");
    };
}


function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}