append model in orderDetailAddPage
当前为
// ==UserScript== // @name appendModel // @namespace http://tampermonkey.net/ // @version 2.01 // @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') }); })(); //添加元素 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"); }; }