// ==UserScript== // @name rejectorder // @namespace https://scriptcat.org/zh-CN/script-show-page/3815 // @version 0.5 // @description 在'退货通知单'增加功能,对外版本 // @author fengxia // @match http://122.13.25.247:8888/sales/rejectBill.do // @match http://47.107.106.156:8888/sales/rejectBill.do // @match http://47.107.106.156:8888/sales/rejectBill.do?type=edit&id=* // @match http://122.13.25.247:8888/sales/rejectBill.do?type=edit&id=* // @icon data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDEiIGhlaWdodD0iNDEiIHZpZXdCb3g9IjAgMCA0MSA0MSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBzdHJva2Utd2lkdGg9IjEuNSIgY2xhc3M9ImgtNiB3LTYiIHJvbGU9ImltZyI+PHRpdGxlPkNoYXRHUFQ8L3RpdGxlPjx0ZXh0IHg9Ii05OTk5IiB5PSItOTk5OSI+Q2hhdEdQVDwvdGV4dD48cGF0aCBkPSJNMzcuNTMyNCAxNi44NzA3QzM3Ljk4MDggMTUuNTI0MSAzOC4xMzYzIDE0LjA5NzQgMzcuOTg4NiAxMi42ODU5QzM3Ljg0MDkgMTEuMjc0NCAzNy4zOTM0IDkuOTEwNzYgMzYuNjc2IDguNjg2MjJDMzUuNjEyNiA2LjgzNDA0IDMzLjk4ODIgNS4zNjc2IDMyLjAzNzMgNC40OTg1QzMwLjA4NjQgMy42Mjk0MSAyNy45MDk4IDMuNDAyNTkgMjUuODIxNSAzLjg1MDc4QzI0Ljg3OTYgMi43ODkzIDIzLjcyMTkgMS45NDEyNSAyMi40MjU3IDEuMzYzNDFDMjEuMTI5NSAwLjc4NTU3NSAxOS43MjQ5IDAuNDkxMjY5IDE4LjMwNTggMC41MDAxOTdDMTYuMTcwOCAwLjQ5NTA0NCAxNC4wODkzIDEuMTY4MDMgMTIuMzYxNCAyLjQyMjE0QzEwLjYzMzUgMy42NzYyNCA5LjM0ODUzIDUuNDQ2NjYgOC42OTE3IDcuNDc4MTVDNy4zMDA4NSA3Ljc2Mjg2IDUuOTg2ODYgOC4zNDE0IDQuODM3NyA5LjE3NTA1QzMuNjg4NTQgMTAuMDA4NyAyLjczMDczIDExLjA3ODIgMi4wMjgzOSAxMi4zMTJDMC45NTY0NjQgMTQuMTU5MSAwLjQ5ODkwNSAxNi4yOTg4IDAuNzIxNjk4IDE4LjQyMjhDMC45NDQ0OTIgMjAuNTQ2NyAxLjgzNjEyIDIyLjU0NDkgMy4yNjggMjQuMTI5M0MyLjgxOTY2IDI1LjQ3NTkgMi42NjQxMyAyNi45MDI2IDIuODExODIgMjguMzE0MUMyLjk1OTUxIDI5LjcyNTYgMy40MDcwMSAzMS4wODkyIDQuMTI0MzcgMzIuMzEzOEM1LjE4NzkxIDM0LjE2NTkgNi44MTIzIDM1LjYzMjIgOC43NjMyMSAzNi41MDEzQzEwLjcxNDEgMzcuMzcwNCAxMi44OTA3IDM3LjU5NzMgMTQuOTc4OSAzNy4xNDkyQzE1LjkyMDggMzguMjEwNyAxNy4wNzg2IDM5LjA1ODcgMTguMzc0NyAzOS42MzY2QzE5LjY3MDkgNDAuMjE0NCAyMS4wNzU1IDQwLjUwODcgMjIuNDk0NiA0MC40OTk4QzI0LjYzMDcgNDAuNTA1NCAyNi43MTMzIDM5LjgzMjEgMjguNDQxOCAzOC41NzcyQzMwLjE3MDQgMzcuMzIyMyAzMS40NTU2IDM1LjU1MDYgMzIuMTExOSAzMy41MTc5QzMzLjUwMjcgMzMuMjMzMiAzNC44MTY3IDMyLjY1NDcgMzUuOTY1OSAzMS44MjFDMzcuMTE1IDMwLjk4NzQgMzguMDcyOCAyOS45MTc4IDM4Ljc3NTIgMjguNjg0QzM5Ljg0NTggMjYuODM3MSA0MC4zMDIzIDI0LjY5NzkgNDAuMDc4OSAyMi41NzQ4QzM5Ljg1NTYgMjAuNDUxNyAzOC45NjM5IDE4LjQ1NDQgMzcuNTMyNCAxNi44NzA3Wk0yMi40OTc4IDM3Ljg4NDlDMjAuNzQ0MyAzNy44ODc0IDE5LjA0NTkgMzcuMjczMyAxNy42OTk0IDM2LjE1MDFDMTcuNzYwMSAzNi4xMTcgMTcuODY2NiAzNi4wNTg2IDE3LjkzNiAzNi4wMTYxTDI1LjkwMDQgMzEuNDE1NkMyNi4xMDAzIDMxLjMwMTkgMjYuMjY2MyAzMS4xMzcgMjYuMzgxMyAzMC45Mzc4QzI2LjQ5NjQgMzAuNzM4NiAyNi41NTYzIDMwLjUxMjQgMjYuNTU0OSAzMC4yODI1VjE5LjA1NDJMMjkuOTIxMyAyMC45OThDMjkuOTM4OSAyMS4wMDY4IDI5Ljk1NDEgMjEuMDE5OCAyOS45NjU2IDIxLjAzNTlDMjkuOTc3IDIxLjA1MiAyOS45ODQyIDIxLjA3MDcgMjkuOTg2NyAyMS4wOTAyVjMwLjM4ODlDMjkuOTg0MiAzMi4zNzUgMjkuMTk0NiAzNC4yNzkxIDI3Ljc5MDkgMzUuNjg0MUMyNi4zODcyIDM3LjA4OTIgMjQuNDgzOCAzNy44ODA2IDIyLjQ5NzggMzcuODg0OVpNNi4zOTIyNyAzMS4wMDY0QzUuNTEzOTcgMjkuNDg4OCA1LjE5NzQyIDI3LjcxMDcgNS40OTgwNCAyNS45ODMyQzUuNTU3MTggMjYuMDE4NyA1LjY2MDQ4IDI2LjA4MTggNS43MzQ2MSAyNi4xMjQ0TDEzLjY5OSAzMC43MjQ4QzEzLjg5NzUgMzAuODQwOCAxNC4xMjMzIDMwLjkwMiAxNC4zNTMyIDMwLjkwMkMxNC41ODMgMzAuOTAyIDE0LjgwODggMzAuODQwOCAxNS4wMDczIDMwLjcyNDhMMjQuNzMxIDI1LjExMDNWMjguOTk3OUMyNC43MzIxIDI5LjAxNzcgMjQuNzI4MyAyOS4wMzc2IDI0LjcxOTkgMjkuMDU1NkMyNC43MTE1IDI5LjA3MzYgMjQuNjk4OCAyOS4wODkzIDI0LjY4MjkgMjkuMTAxMkwxNi42MzE3IDMzLjc0OTdDMTQuOTA5NiAzNC43NDE2IDEyLjg2NDMgMzUuMDA5NyAxMC45NDQ3IDM0LjQ5NTRDOS4wMjUwNiAzMy45ODExIDcuMzg3ODUgMzIuNzI2MyA2LjM5MjI3IDMxLjAwNjRaTTQuMjk3MDcgMTMuNjE5NEM1LjE3MTU2IDEyLjA5OTggNi41NTI3OSAxMC45MzY0IDguMTk4ODUgMTAuMzMyN0M4LjE5ODg1IDEwLjQwMTMgOC4xOTQ5MSAxMC41MjI4IDguMTk0OTEgMTAuNjA3MVYxOS44MDhDOC4xOTM1MSAyMC4wMzc4IDguMjUzMzQgMjAuMjYzOCA4LjM2ODIzIDIwLjQ2MjlDOC40ODMxMiAyMC42NjE5IDguNjQ4OTMgMjAuODI2NyA4Ljg0ODYzIDIwLjk0MDRMMTguNTcyMyAyNi41NTQyTDE1LjIwNiAyOC40OTc5QzE1LjE4OTQgMjguNTA4OSAxNS4xNzAzIDI4LjUxNTUgMTUuMTUwNSAyOC41MTczQzE1LjEzMDcgMjguNTE5MSAxNS4xMTA3IDI4LjUxNiAxNS4wOTI0IDI4LjUwODJMNy4wNDA0NiAyMy44NTU3QzUuMzIxMzUgMjIuODYwMSA0LjA2NzE2IDIxLjIyMzUgMy41NTI4OSAxOS4zMDQ2QzMuMDM4NjIgMTcuMzg1OCAzLjMwNjI0IDE1LjM0MTMgNC4yOTcwNyAxMy42MTk0Wk0zMS45NTUgMjAuMDU1NkwyMi4yMzEyIDE0LjQ0MTFMMjUuNTk3NiAxMi40OTgxQzI1LjYxNDIgMTIuNDg3MiAyNS42MzMzIDEyLjQ4MDUgMjUuNjUzMSAxMi40Nzg3QzI1LjY3MjkgMTIuNDc2OSAyNS42OTI4IDEyLjQ4MDEgMjUuNzExMSAxMi40ODc5TDMzLjc2MzEgMTcuMTM2NEMzNC45OTY3IDE3Ljg0OSAzNi4wMDE3IDE4Ljg5ODIgMzYuNjYwNiAyMC4xNjEzQzM3LjMxOTQgMjEuNDI0NCAzNy42MDQ3IDIyLjg0OSAzNy40ODMyIDI0LjI2ODRDMzcuMzYxNyAyNS42ODc4IDM2LjgzODIgMjcuMDQzMiAzNS45NzQzIDI4LjE3NTlDMzUuMTEwMyAyOS4zMDg2IDMzLjk0MTUgMzAuMTcxNyAzMi42MDQ3IDMwLjY2NDFDMzIuNjA0NyAzMC41OTQ3IDMyLjYwNDcgMzAuNDczMyAzMi42MDQ3IDMwLjM4ODlWMjEuMTg4QzMyLjYwNjYgMjAuOTU4NiAzMi41NDc0IDIwLjczMjggMzIuNDMzMiAyMC41MzM4QzMyLjMxOSAyMC4zMzQ4IDMyLjE1NCAyMC4xNjk4IDMxLjk1NSAyMC4wNTU2Wk0zNS4zMDU1IDE1LjAxMjhDMzUuMjQ2NCAxNC45NzY1IDM1LjE0MzEgMTQuOTE0MiAzNS4wNjkgMTQuODcxN0wyNy4xMDQ1IDEwLjI3MTJDMjYuOTA2IDEwLjE1NTQgMjYuNjgwMyAxMC4wOTQzIDI2LjQ1MDQgMTAuMDk0M0MyNi4yMjA2IDEwLjA5NDMgMjUuOTk0OCAxMC4xNTU0IDI1Ljc5NjMgMTAuMjcxMkwxNi4wNzI2IDE1Ljg4NThWMTEuOTk4MkMxNi4wNzE1IDExLjk3ODMgMTYuMDc1MyAxMS45NTg1IDE2LjA4MzcgMTEuOTQwNUMxNi4wOTIxIDExLjkyMjUgMTYuMTA0OCAxMS45MDY4IDE2LjEyMDcgMTEuODk0OUwyNC4xNzE5IDcuMjUwMjVDMjUuNDA1MyA2LjUzOTAzIDI2LjgxNTggNi4xOTM3NiAyOC4yMzgzIDYuMjU0ODJDMjkuNjYwOCA2LjMxNTg5IDMxLjAzNjQgNi43ODA3NyAzMi4yMDQ0IDcuNTk1MDhDMzMuMzcyMyA4LjQwOTM5IDM0LjI4NDIgOS41Mzk0NSAzNC44MzM0IDEwLjg1MzFDMzUuMzgyNiAxMi4xNjY3IDM1LjU0NjQgMTMuNjA5NSAzNS4zMDU1IDE1LjAxMjhaTTE0LjI0MjQgMjEuOTQxOUwxMC44NzUyIDE5Ljk5ODFDMTAuODU3NiAxOS45ODkzIDEwLjg0MjMgMTkuOTc2MyAxMC44MzA5IDE5Ljk2MDJDMTAuODE5NSAxOS45NDQxIDEwLjgxMjIgMTkuOTI1NCAxMC44MDk4IDE5LjkwNThWMTAuNjA3MUMxMC44MTA3IDkuMTgyOTUgMTEuMjE3MyA3Ljc4ODQ4IDExLjk4MTkgNi41ODY5NkMxMi43NDY2IDUuMzg1NDQgMTMuODM3NyA0LjQyNjU5IDE1LjEyNzUgMy44MjI2NEMxNi40MTczIDMuMjE4NjkgMTcuODUyNCAyLjk5NDY0IDE5LjI2NDkgMy4xNzY3QzIwLjY3NzUgMy4zNTg3NiAyMi4wMDg5IDMuOTM5NDEgMjMuMTAzNCA0Ljg1MDY3QzIzLjA0MjcgNC44ODM3OSAyMi45MzcgNC45NDIxNSAyMi44NjY4IDQuOTg0NzNMMTQuOTAyNCA5LjU4NTE3QzE0LjcwMjUgOS42OTg3OCAxNC41MzY2IDkuODYzNTYgMTQuNDIxNSAxMC4wNjI2QzE0LjMwNjUgMTAuMjYxNiAxNC4yNDY2IDEwLjQ4NzcgMTQuMjQ3OSAxMC43MTc1TDE0LjI0MjQgMjEuOTQxOVpNMTYuMDcxIDE3Ljk5OTFMMjAuNDAxOCAxNS40OTc4TDI0LjczMjUgMTcuOTk3NVYyMi45OTg1TDIwLjQwMTggMjUuNDk4M0wxNi4wNzEgMjIuOTk4NVYxNy45OTkxWiIgZmlsbD0iY3VycmVudENvbG9yIj48L3BhdGg+PC9zdmc+ // @require https://scriptcat.org/lib/513/2.1.0/ElementGetter.js // @require https://scriptcat.org/lib/637/1.4.6/ajaxHooker.js // @grant none // ==/UserScript== (function() { 'use strict'; let re_url = /(\b25[0-5]|\b2[0-4][0-9]|\b[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}/; let temp_url = window.location.href; window.site_url; window.test = re_url.exec(temp_url)[0]; // 调用函数 查找变量和绑定事件 findAndBindEvents() // createTbaleTd() ajaxHooker.hook(request => { // console.log(request.url) if (request.url === 'sales/getGoodsDetail.do') { request.response = res => { let json_array,products_id try { json_array =((JSON.parse(res.responseText)).detail)['goodsInfo']; // console.log(json_array.id) products_id =json_array.id; } catch(err){ console.log(err) } // let customer_id = $('input[name="saleSwapOrder.customerid"]').val() let customer_id = $('#sales-customer-rejectBillAddPage-hidden').val() let select_year = $('.new_div .tabs-selected span').html() queryHistoryPrice(customer_id,products_id,select_year ) }; } }); })(); // 查找变量和绑定事件 function findAndBindEvents() { const eg = elmGetter; // module 添加历史旧价查询窗口 elmGetter.each('#sales-dialog-rejectBillAddPage-content', document, reject => { // console.log("ok"); // var targetDiv = reject.parentNode; // var targetDiv = $('#sales-dialog-rejectBillAddPage-content') var targetDiv = $('div.panel.window').filter("[style*='display: block;']"); var targetShadow = $('div.window-shadow').filter("[style*='display: block;']"); const div_top = targetDiv.css("top"); // console.log(div_top); var screenWidth = window.screen.width; // console.log(screenWidth) if (screenWidth <= 1550) { targetDiv.css("left","450px"); targetShadow.css("left","450px"); } var newDiv =`
'+table_div+second_div+'
' // const parser = new DOMParser(); // const doc = parser.parseFromString(newDiv, 'text/html'); targetDiv.before(newDiv);//添加新div var remove_div = $(".new_div"); var remove_second_div = $(".second_div") targetDiv.find(".panel-tool-close").on('click', function() {//添加一个关闭窗口的函数 remove_div.remove(); // 移除新DIV remove_second_div.remove(); }); $('.new_div .tabs li').on('click', function() {//给新的分页添加切换效果 // 检查当前选中的标签 if (!$(this).hasClass('tabs-selected')) { var index = $(this).index(); var div_table = $('.new_div .panel-body-noborder.layout-body'); div_table.css("display", "none"); div_table.eq(index).css("display", "block"); // 移除其他标签的选中状态 $('.tabs li').removeClass('tabs-selected'); // 添加选中状态到当前标签 $(this).addClass('tabs-selected'); let products_id = $('#sales-goodsId-billDetailAddPage-hidden').val() // console.log(products_id) if (products_id!=''){ let customer_id = $('#sales-customer-rejectBillAddPage-hidden').val() let select_year = $('.new_div .tabs-selected span').html() queryHistoryPrice(customer_id,products_id,select_year ) } }}); return true; }); } // 日期函数 function getIntervalDate(year){ let start_date,end_date if (year){ start_date = `${year}-01-01`; end_date = `${year}-12-31`; } else if(typeof year == 'undefined') { let date = new Date(); end_date = `${date.getFullYear()}-${(date.getMonth()+1).toString().padStart(2,"0")}-${date.getDate().toString().padStart(2,'0')}`; date.setDate(date.getDate()-90); 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 } // 查询历史旧价 async function queryHistoryPrice(customer,products,year){ let user = new Object(); let list_order = []; let returns_order=await showCustomerSalesFlowList(customer,products,year); // let sale_order=await showSalesOrderTrackReportData(customer,products,year); for (let row_num in returns_order){ user = { // 一个对象 goodsid:returns_order[row_num].goodsid, date: returns_order[row_num].businessdate, unitnum:returns_order[row_num].enternum===0?returns_order[row_num].outnum:returns_order[row_num].enternum*-1, price:returns_order[row_num].price, }; list_order.push(user) } // for (let row_num in sale_order){ // if (sale_order[row_num].ordernum > 0) { // user = { // 一个对象 // goodsid:sale_order[row_num].goodsid, // date: sale_order[row_num].businessdate, // unitnum: sale_order[row_num].initsendnum, // price: sale_order[row_num].dispatchprice, // sendnum: sale_order[row_num].sendnum === undefined?'未出库':sale_order[row_num].sendnum, // checkprice: sale_order[row_num].checkprice === undefined?'未验收':sale_order[row_num].checkprice, // }; // list_order.push(user) // } // } // list_order.sort(function(a,b){ // // Turn your strings into dates, and then subtract them // // to get a value that is either negative, positive, or zero. // return new Date(a.date)-new Date(b.date); // }); //console.log(list_order) //console.log(Object.keys(list_order).length === 0) let tr_html = ''; let x = 1; //用x取余来做斑马格 for (let row_num in list_order){ tr_html = tr_html+` ${list_order[row_num].goodsid} ${list_order[row_num].date} ${list_order[row_num].unitnum} ${list_order[row_num].price} ` x=++x; } if (Object.keys(list_order).length === 0){tr_html=`${products}无销售`} let table_html = `
编码 日期 数量 单价
`+ tr_html+'
' let div = $('.panel-body-noborder.layout-body.'+year); $(div).html(table_html); countunitnum(list_order) } // module 根据出入库流水账退货单数据 function showCustomerSalesFlowList(customer,products,year){ return new Promise((resolve, reject) => { let xhr = new XMLHttpRequest(); let query_date = getIntervalDate(year); // let url = new URL(`http://${window.test}:8888/report/finance/showCustomerSalesFlowList.do`); let url = new URL(`http://${window.test}:8888/report/storage/showInOutFlowListData.do`); url.searchParams.set("businessdate1", query_date.start_date); url.searchParams.set("businessdate2", query_date.end_date); url.searchParams.set("id", ""); url.searchParams.set("brandid", ""); url.searchParams.set("goodsid", products); url.searchParams.set("billtype", ["1","5"]); url.searchParams.set("supplierid", ""); url.searchParams.set("customerid", customer); url.searchParams.set("storageid", ""); url.searchParams.set("customersort",""); url.searchParams.set("audituserid", ""); url.searchParams.set("page", "1"); url.searchParams.set("rows", "1000"); url.searchParams.set("sort", "businessdate"); 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("2"); resolve(xhrString.rows) // alert(`Done, got ${xhr.response.length} bytes`); // response 是服务器响应 } }; xhr.onerror = function() { alert("Request failed"); }; }) } // 通过查询订单追踪明细表获取订单数据 function showSalesOrderTrackReportData(customer,products,year){ return new Promise((resolve, reject) => { let xhr = new XMLHttpRequest(); let url = new URL(`http://${window.test}:8888/report/sales/showSalesOrderTrackReportData.do`); let query_date = getIntervalDate(year); url.searchParams.set("businessdate1", query_date.start_date); url.searchParams.set("businessdate2", query_date.end_date); url.searchParams.set("id",""); url.searchParams.set("brandid",""); url.searchParams.set("goodsid", products); url.searchParams.set("customerid",customer); url.searchParams.set("checkstatus",""); url.searchParams.set("salesuser",""); url.searchParams.set("pcustomerid",""); url.searchParams.set("indooruserid",""); url.searchParams.set("sourceid",""); url.searchParams.set("goodssort",""); // url.searchParams.set("oldFromData", {"businessdate1":query_date.start_date,"businessdate2":query_date.end_date,"id":"","brandid":"","goodsid":"","customerid":"","checkstatus":"","salesuser":"","pcustomerid":"","indooruserid":"","sourceid":"","goodssort":""}); url.searchParams.set("page", "1"); url.searchParams.set("rows", "1000"); url.searchParams.set("sort", "businessdate"); url.searchParams.set("order", "asc"); // 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("1"); resolve(xhrString.rows) // alert(`Done, got ${xhr.response.length} bytes`); // response 是服务器响应 } }; xhr.onerror = function() { alert("Request failed"); }; }) } function createTbaleTd(){ elmGetter.each('#remark', document, add_model => { const table_tr=add_model.closest('tr'); const table_tbody=add_model.closest('tbody'); let model_string = ` 规格: ` table_tr.insertAdjacentHTML('beforeend', model_string); let price_string = ` 最新采购价: ` table_tbody.insertAdjacentHTML('beforeend', price_string); }) } function countunitnum(data){ const amountGroups = {}; // 2. 遍历所有行,计算金额并分组 data.forEach(item => { // 假设item有price和quantity属性 const quantity = item.unitnum; const amount = item.price; // 按金额分组并累加数量 if (!amountGroups[amount]) { amountGroups[amount] = 0; } amountGroups[amount] += quantity; }); let result = "不同单价的数量总和:
"; for (const [amount, totalQuantity] of Object.entries(amountGroups)) { result += `单价 ${amount}: 数量总和 = ${totalQuantity}
`; } $('#second_reject').html(result); // 4. 显示结果 // console.log(result); }