// ==UserScript==
// @name appendSALEORDER
// @namespace http://tampermonkey.net/
// @version 1.50
// @description 在'销售订单新增'增加功能
// @author fengxia
// @match http://122.13.25.247:8888/sales/orderPage.do
// @match http://47.107.106.156:8888/sales/orderPage.do
// @match http://47.107.106.156:8888/sales/orderPage.do?type=edit&id=*
// @match http://122.13.25.247:8888/sales/orderPage.do?type=edit&id=*
// @icon https://www.google.com/s2/favicons?sz=64&domain=25.247
// @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,products_model,products_newbuyprice
try {
json_array =((JSON.parse(res.responseText)).detail)['goodsInfo'];
// console.log(json_array.id)
products_id =json_array.id;
products_model = json_array.model;
products_newbuyprice = json_array.newbuyprice;
}
catch(err){
console.log(err)
}
// let customer_id = $('input[name="saleSwapOrder.customerid"]').val()
let customer_id = $('#sales-customer-orderAddPage-hidden').val()
let select_year = $('.new_div .tabs-selected span').html()
$('#products_price').val(products_newbuyprice)
$('#products_model').val(products_model)
queryHistoryPrice(customer_id,products_id,select_year )
};
}
});
})();
// 查找变量和绑定事件
function findAndBindEvents() {
const eg = elmGetter;
// module 给新增销售订单的单号元素添加重复订单查询监听
elmGetter.get('#sales-sourceid-orderAddPage').then(order => {
order.addEventListener("focusout", addListener,true);
});
// module 添加历史旧价查询窗口
elmGetter.each('#sales-dialog-orderAddPage-content', document, reply => {
var targetDiv = $('div.panel.window').filter("[style*='display: block;']");
var targetShadow = $('div.window-shadow').filter("[style*='display: block;']");
// console.log(targetDiv.css("top"));
const div_top = targetDiv.css("top")
// 获取屏幕的宽度
var screenWidth = window.screen.width;
// console.log(screenWidth)
if (screenWidth <= 1550) {
targetDiv.css("left","550px");
targetShadow.css("left","550px");
}
var newDiv =`
`
const currentYear = new Date().getFullYear();
const startYear = (currentYear - 5 < 2022) ? 2022 : (currentYear - 5);
// 生成年份的li元素
var tab_div = ""
var table_div=""
for (let year = startYear; year <= currentYear; year++) {
// 创建新的li元素
let liClass = ""; // li的class属性初始化为
let divstyle="display: none"
if (year === startYear) {
liClass += "tabs-last"; // 第一个li添加tabs-last类,第一个是2022年
}
if (year === currentYear) {
liClass += " tabs-first tabs-selected"; // 最后一个li添加tabs-first类
divstyle = "display: block"
}
tab_div +=`- ${year}
`;
table_div +=``;
}
newDiv=newDiv+tab_div+'
'+table_div+'
'
targetDiv.before(newDiv);//添加新div
var remove_div = $(".new_div");
targetDiv.find(".panel-tool-close").on('click', function() {//添加一个关闭窗口的函数
remove_div.remove(); // 移除新DIV
});
$('.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-orderDetailAddPage-hidden').val()
if (products_id!=''){
let customer_id = $('#sales-customer-orderAddPage-hidden').val()
let select_year = $('.new_div .tabs-selected span').html()
queryHistoryPrice(customer_id,products_id,select_year )
}
}});
return true;
});
}
// module 添加销售单单号重复查询
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);
}
}
// module 查询订单号重复
function QueryCustomerOrder(customer,order){
let xhr = new XMLHttpRequest();
let url = new URL(`http://${window.test}: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 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);
// console.log(sa2)
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 * -1,
price:returns_order[row_num].price,
sendnum:returns_order[row_num].enternum * -1,
checkprice: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 = `
${list_order[row_num].goodsid} |
${list_order[row_num].date} |
${list_order[row_num].unitnum} |
${list_order[row_num].price} |
${list_order[row_num].sendnum} |
${list_order[row_num].checkprice} |
` + tr_html;
x=++x;
}
if (Object.keys(list_order).length === 0){tr_html=`${products}无销售`}
let table_html = `
'
let div = $('.panel-body-noborder.layout-body.'+year);
$(div).html(table_html);
}
// 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");
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);
})
}