您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Перевод статусов списка заказов Megagroup.ru
// ==UserScript== // @name Perevod // @namespace http://tampermonkey.net/ // @version 1.0.1.1 // @description Перевод статусов списка заказов Megagroup.ru // @author DIMASSS // @match https://cp21.megagroup.ru/my/s3/data/menu/edit.php* // @grant none // @require https://openuserjs.org/src/libs/sizzle/GM_config.js // @grant GM_getValue // @grant GM_setValue // ==/UserScript== (function() { 'use strict'; var crawl = localStorage.getItem('perevod_is_working'); console.log("-----SCRIPT START-------"); //------------------waitForKeyElements------------------ /*--- waitForKeyElements(): A utility function, for Greasemonkey scripts, that detects and handles AJAXed content. Usage example: waitForKeyElements ( "div.comments" , commentCallbackFunction ); //--- Page-specific function to do what we want when the node is found. function commentCallbackFunction (jNode) { jNode.text ("This comment changed by waitForKeyElements()."); } IMPORTANT: This function requires your script to have loaded jQuery. */ function waitForKeyElements( selectorTxt /* Required: The jQuery selector string that specifies the desired element(s). */, actionFunction /* Required: The code to run when elements are found. It is passed a jNode to the matched element. */, bWaitOnce /* Optional: If false, will continue to scan for new elements even after the first match is found. */, iframeSelector /* Optional: If set, identifies the iframe to search. */ ) { var targetNodes, btargetsFound; if (typeof iframeSelector == "undefined") targetNodes = $(selectorTxt); else targetNodes = $(iframeSelector) .contents() .find(selectorTxt); if (targetNodes && targetNodes.length > 0) { btargetsFound = true; /*--- Found target node(s). Go through each and act if they are new. */ targetNodes.each(function() { var jThis = $(this); var alreadyFound = jThis.data("alreadyFound") || false; if (!alreadyFound) { //--- Call the payload function. var cancelFound = actionFunction(jThis); if (cancelFound) btargetsFound = false; else jThis.data("alreadyFound", true); } }); } else { btargetsFound = false; } //--- Get the timer-control variable for this selector. var controlObj = waitForKeyElements.controlObj || {}; var controlKey = selectorTxt.replace(/[^\w]/g, "_"); var timeControl = controlObj[controlKey]; //--- Now set or clear the timer as appropriate. if (btargetsFound && bWaitOnce && timeControl) { //--- The only condition where we need to clear the timer. clearInterval(timeControl); delete controlObj[controlKey]; } else { //--- Set a timer, if needed. if (!timeControl) { timeControl = setInterval(function() { waitForKeyElements( selectorTxt, actionFunction, bWaitOnce, iframeSelector ); }, 300); controlObj[controlKey] = timeControl; } } waitForKeyElements.controlObj = controlObj; } //------------------/waitForKeyElements------------------ //------------------Navigate------------------ function Navigate (text) { // text="888888888888888"; console.log('-search go: ' + text); //alert(window.location.href); var url=window.location.href; if (url.indexOf("search_text") === -1) { url = [url.slice(0, url.indexOf("order_date_from")-1), "&search_text="+ text, url.slice(url.indexOf("order_date_from")-1)].join(''); } else { url=url.replace(/(search_text)(.+?)(?=order_date_from)/, "$1="+text+"&"); } //url=url.replace(/search_text=.*&order_date_from/, 'search_text=' + text + '&order_date_from') // alert(url); console.log('searching: ' + url); window.location.href = url; // window.location.assign(url); document.location.reload(true); //exit(); } //------------------/Navigate------------------ //------------------eventFire------------------ function eventFire(el, etype){ if (el.fireEvent) { el.fireEvent('on' + etype); } else { var evObj = document.createEvent('Events'); evObj.initEvent(etype, true, false); el.dispatchEvent(evObj); } } //------------------/eventFire------------------ //------------------set_status------------------ function set_status(status_to,numb) { //-------------- console.log("params: "+status_to+", "+numb) var items; //document.querySelector("#shop2_orders_container") items = document.getElementsByClassName("view order-number"); var index; for (var j = 0; j < items.length; j++) { console.log("ITEMS textContent "); var temp = items[j].textContent.trim(); temp = temp.split("(")[0]; temp = temp.trim(); console.log(temp ); console.log("comparing -"+temp+"- with -"+numb+'-'); if (temp == numb) { index=j; } } console.log("index is " + index); if (index == undefined) { return 'NOT_found'; //alert("Критическая ошибка! index == undefined заказ " + numb + "НЕ переведён!!!!!!"); /* crawl = '0'; localStorage.setItem('perevod_is_working','2'); document.location.reload(true);*/ } //----------------- //console.log("searching" + status_to); var textToFind = status_to; var result ; var dd = document.querySelectorAll("#order_status_style"); //var dd = document.getElementById('order_status_style'); //alert("danger zone 1"); if (dd[index-1] != null) { for (var i = 0; i < dd[index-1].options.length; i++) { if (dd[index-1].options[i].text === textToFind) { dd[index-1].selectedIndex = i; break; } } //alert("danger zone 2"); var element = document.querySelectorAll("#order_status_style"); //alert(element.length); //var element = document.querySelectorAll("#order_status_style"); if ("createEvent" in document) { var evt = document.createEvent("HTMLEvents"); evt.initEvent("change", false, true); //RETURN ME!!!! element[index-1].dispatchEvent(evt); //element[index].dispatchEvent(evt); } else { //RETURN ME!!!! element[index-1].fireEvent("onchange"); //element[index].fireEvent("onchange"); } //alert("success"); result="good"; } else result="NOT_found"; console.log("result" + result); return result; } //------------------/set_status------------------ //------------------msToTime------------------ function msToTime(duration,short=0) { var milliseconds = parseInt((duration % 1000) / 100), seconds = Math.floor((duration / 1000) % 60), minutes = Math.floor((duration / (1000 * 60)) % 60), hours = Math.floor((duration / (1000 * 60 * 60)) % 24); hours = (hours < 10) ? "0" + hours : hours; minutes = (minutes < 10) ? "0" + minutes : minutes; seconds = (seconds < 10) ? "0" + seconds : seconds; if(short==0) return hours + " ч. " + minutes + " мин. " + seconds + " сек. "; else return seconds + " сек. " + milliseconds + " мил."; } //------------------/msToTime------------------ //JUST FINISHED if (crawl == '2') { //DO SMTH WITH RESULTS crawl = 0; var src_nums_array = localStorage.getItem('perevod_nomera_src').split('\n'); var tmp = localStorage.getItem('res_array'); //console.log(tmp); if (tmp.charAt(0) == ',') { tmp = tmp.slice(0, 0) + tmp.slice(1); } var final_results_array =tmp.split(','); var i; var concatenated_result = ""; var good = 0; var not_f = 0; var undef = 0; for (i=0;i<src_nums_array.length; i++) { if (final_results_array[i] == 'good') good++; if (final_results_array[i] == 'NOT_found') not_f++; if (final_results_array[i] == 'undefined') undef++; concatenated_result+=src_nums_array[i] + ": " + final_results_array[i]+"\r\n"; } //alert(concatenated_result); //console.log(concatenated_result); var fstart_date = localStorage.getItem('start_date'); var finish_gmc = new GM_configStruct( { 'id': 'RESULTS', // The id used for this instance of finish_gmc 'title': 'РЕЗУЛЬТАТЫ за ' + msToTime( new Date().getTime() - fstart_date) + ": good(" + good + "), notf(" + not_f +"), undef(" + undef +")", // Panel Title 'fields': // Fields object { 'from': // This is the id of the field {'labelPos': 'above', 'label': 'Переводили ИЗ статуса', // Appears next to field 'type': 'text', // Makes this setting a text field 'default': 'ТРЕК ПРИСВОЕН' // Default value if user doesn't change it }, 'to': // This is the id of the field {'labelPos': 'above', 'label': 'Переводили В статус', // Appears next to field 'type': 'text', // Makes this setting a text field 'default': 'ПОЛУЧЕН' // Default value if user doesn't change it }, 'nomera': { 'label': 'Результаты перевода', 'type': 'textarea', 'default': '12312' // ,'title': 'Введите номера заказов каждый с новой строки' } } ,'events': { 'init': function() { this.set('from', localStorage.getItem('perevod_from')); this.set('to', localStorage.getItem('perevod_to')); this.set('nomera', concatenated_result); }, 'close': function(){ localStorage.setItem('perevod_is_working','0'); crawl = 0; } } }); finish_gmc.open(); //uncomment if fails //final_results_array = []; //localStorage.setItem('res_array', ""); //alert("res_array:" + final_results_array); //alert("localStorage res_array:" + localStorage.getItem('res_array')); } //MAKE CRAWL if (crawl == '1') {console.log("We are Working"); //INIT VALS BEFORE FOUND ELEMENT var res_array = localStorage.getItem('res_array', res_array).split(","); var nums_array = localStorage.getItem('perevod_nomera').split("\n"); var status_to = localStorage.getItem('perevod_to'); var current = nums_array.shift(); var time_label_text = ""; if(res_array.length == '1') //this is first one { //var today = ; //var time = + ":" + + ":" + ; localStorage.setItem('start_date', new Date().getTime()); //alert(new Date().getTime() + " set"); /*localStorage.setItem('start_minutes',today.getMinutes()); localStorage.setItem('start_seconds',today.getSeconds()); localStorage.setItem('start_mseconds',today.getMilliseconds()); */ } //TIME CALCULATION if (res_array.length >= '2') //means 2 or more, divide current time and started. { var start_date = localStorage.getItem('start_date'); var for_one = Math.abs( ( new Date().getTime() - start_date ) / (res_array.length-1) ); time_label_text = "Осталось: " + msToTime(for_one*nums_array.length) + ", сред. " + msToTime(for_one,1) + ", прошло " + msToTime( new Date().getTime() - start_date); $('body').before(time_label_text).show(); } // //STOP BUTTON if (!$('#perevod-settings-test').length > 0) { // var btn_CANCEL = document.createElement("button"); btn_CANCEL.innerHTML = "CANCEL"; btn_CANCEL.title = "Нажмите чтобы CANCEL."; btn_CANCEL.className = "s3-btn without-margin"; btn_CANCEL.id="perevod-CANCEL"; btn_CANCEL.style.margin = "0px 20px 0px 0px"; $("body").before(btn_CANCEL); btn_CANCEL.addEventListener("click", function () { // LOOP STOP crawl = 2; localStorage.setItem('perevod_is_working','2'); document.location.reload(true); }); } /* $.when(Preloader.hide()).done({ // the code here will be executed when all four ajax requests resolve. // a1, a2, a3 and a4 are lists of length 3 containing the response text, // status, and jqXHR object for each of the four ajax calls respectively. let_work }); setTimeout(function () { if (newState == -1) { alert('VIDEO HAS STOPPED'); } }, 5000); */ /* setTimeout(function () { }, 1000); *///#filter_psp waitForKeyElements(".s3-preloader-hide", let_work); /*$( document ).ajaxComplete(function(event,xhr,settings) { alert(Object.values(settings)); }); */ // window.addEventListener('load', (event) => { // }); function let_work() { //alert("its hidden"); console.log("-all loaded, continuing"); //if (res_array == null) { res_array = "[]";} res_array.push(set_status(status_to,current)); localStorage.setItem('res_array', res_array.join(',')); console.log("--set_status worked for first elem"); localStorage.setItem('perevod_nomera',nums_array.join('\n')); if (nums_array.length > 0) { Navigate (nums_array[0]); } else { //alert("nums_array.length > 0\r\n"+nums_array); crawl = '0'; localStorage.setItem('perevod_is_working','2'); document.location.reload(true); } } } //MAKE INIT if (crawl == '0' || crawl == 'NULL' || crawl == null) {console.log("We are Not working"); var settings_gmc = new GM_configStruct( { 'id': 'MyConfig', // The id used for this instance of GM_config 'title': 'Настройки перевода статусов', // Panel Title 'fields': // Fields object { 'from': // This is the id of the field {'labelPos': 'above', 'label': 'ИЗ статуса', // Appears next to field 'type': 'text', // Makes this setting a text field 'default': 'ТРЕК ПРИСВОЕН' // Default value if user doesn't change it }, 'to': // This is the id of the field {'labelPos': 'above', 'label': 'В статус', // Appears next to field 'type': 'text', // Makes this setting a text field 'default': 'ПОЛУЧЕН' // Default value if user doesn't change it }, 'nomera': { 'label': 'Номера заказов', 'type': 'textarea', 'default': 'some text' // ,'title': 'Введите номера заказов каждый с новой строки' } } ,'events': { 'init': function() { localStorage.setItem('res_array', '[]'); var f_from = localStorage.getItem('perevod_from'); if(f_from == null) f_from= ""; var f_to = localStorage.getItem('perevod_to'); if(f_to == null) f_to= ""; this.set('from', f_from); this.set('to', f_to); var nums_string_1 = localStorage.getItem('perevod_nomera'); var nums_string; if(nums_string_1 == null) {nums_string= "[]"; } else {nums_string = localStorage.getItem('perevod_nomera').replace(',' , '\n'); } this.set('nomera', localStorage.getItem('perevod_nomera_src')); //this.set('nomera', "32006"); }, 'save': function(){ localStorage.setItem('perevod_from', this.get('from')); localStorage.setItem('perevod_to', this.get('to')); localStorage.setItem('res_array', ""); //var str = '\r\n' + GM_config.get('nomera') + '\r\n'; //var str = GM_config.get('nomera'); //var array = str.split("\n"); localStorage.setItem('perevod_nomera', this.get('nomera')); localStorage.setItem('perevod_nomera_src', this.get('nomera')); //alert("perevod_nomera set like" + this.get('nomera')); } } /* */ }); //SETTINGS BUTTON if (!$('#perevod-settings').length > 0) { // var btn_open_settings = document.createElement("button"); btn_open_settings.innerHTML = "Установки перевода"; btn_open_settings.title = "Нажмите чтобы устанвить параметры."; btn_open_settings.className = "s3-btn without-margin"; btn_open_settings.id="perevod-settings"; btn_open_settings.style.margin = "0px 20px 0px 0px"; $("body").before(btn_open_settings); btn_open_settings.addEventListener("click", function () { settings_gmc.open(); }); } //START BUTTON if (!$('#perevod-start').length > 0) { var btn_start = document.createElement("button"); btn_start.innerHTML = "start"; btn_start.title = "Нажмите чтобы поехать."; btn_start.className = "s3-btn without-margin"; btn_start.id="perevod-start"; btn_start.style.margin = "0px 20px 0px 0px"; $("body").before(btn_start); btn_start.addEventListener("click", function () { var res_array = ['1','2']; res_array.length = 0; localStorage.setItem('res_array', res_array.join(',')); localStorage.setItem('perevod_nomera', settings_gmc.get('nomera')); // LOOP localStorage.setItem('perevod_is_working','1'); var str = settings_gmc.get('nomera'); var array = str.split("\n"); console.log("starting! search ("+ array[0]+") "); Navigate(array[0]); }); } //TEST BUTTON var btn_test = document.createElement("button"); btn_test.innerHTML = "test"; btn_test.title = "Нажмите чтобы поехать."; btn_test.className = "s3-btn without-margin"; btn_test.id="perevod-test"; btn_test.style.margin = "0px 20px 0px 0px"; // $("body").before(btn_test); btn_test.addEventListener("click", function () { //TESTCODE // END TESTCODE }); } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址