您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Индикативные цены - автопарсинг и отображение на вкладке "Сбыт"
// ==UserScript== // @name Virtomomica: IC // @namespace virtonomica // @description Индикативные цены - автопарсинг и отображение на вкладке "Сбыт" // @match http*://virtonomica.ru/*/main/unit/view/*/sale* // @version 2.2 // @author UnclWish // ==/UserScript== var run = function() { var win = (typeof(unsafeWindow) != 'undefined' ? unsafeWindow : top.window); var $ = win.$; //--------------------------------------------------------------------- // работа с локальным хранилищем //--------------------------------------------------------------------- /** * записать данные в локальнео хранилище, с проверкой ошибок */ function ToStorage(name, val) { try { window.localStorage.setItem(name, JSON.stringify(val)); } catch(e) { var out = "Ошибка добавления в локальное хранилище"; console.log(out); } } //--------------------------------------------------------------------- // end of работа с локальным хранилищем //--------------------------------------------------------------------- var wc_info = $("<div id=p_info></div>"); var ic_info = $("<div id=ic_info></div>"); // Проверим ссылку что это игровое поле var href = location.href; var realm = href.replace('https://virtonomica.ru/',''); realm = realm.substr(0,4); var country = $("div.title a[href*='/main/geo/regionlist/']").attr('href'); country = /(\d+)/.exec(country)[0]; var tm_info_link = `https://virtonomica.ru/${realm}/window/globalreport/tm/info`; var tm_api_link = `https://virtonomica.ru/api/${realm}/main/brandname/browse?pagesize=10000`; var ic_info_link = `https://virtonomica.ru/api/${realm}/main/geo/country/duty?app=adapter_vrt&format=html&country_id=423475&sort=category_name%2Fasc%2Cproduct_name%2Fasc&tpl=geo%2Fcountry%2Fduty`; var ic_api_link = `https://virtonomica.ru/api/${realm}/main/geo/country/duty?country_id=${country}`; var a1=$('div.title').text().trim(); if (a1.indexOf("Офис") == -1 ) return; //Выход если главная страница не нашей компании var title=$('#wrapper > div.metro_header > div > div.picture').attr('class'); if (title.search('unit-header-network') != -1) return; // Выход если Сеть коммуникационных вышек //console.log( href ); /*if (href.indexOf('countrydutylist') > 0) { //console.log('parsing....'); var wc_parsing = $("<li><div id=parsing style='float:left;cursor:pointer; color: white;'> <img title='Запомнить ИЦ' alt='Запомнить ИЦ' src='http://www.iconsearch.ru/uploads/icons/snowish/32x32/document-save-as.png'> </div>"); //var container = $('#topblock').next(); var container = $('li.la').parent(); //container = $("li:last", container).prev().parent(); container.append( wc_parsing ) ; $("table.list").before( wc_info ); $("#parsing").click( function() { var ic_array = new Object(); var table = $("table.list"); //console.log('table = ' + table.length); var tr = $("tr.odd, tr.even", table); //console.log('tr = ' + tr.length); for (var i=0; i<tr.length; i++){ var td = $("td > img", tr.eq(i) ); //console.log('td = ' + td.length); for(var j=0; j< td.length; j++){ var src = td.eq(j).attr('src'); //console.log( src ); var name = td.eq(j).parent().next().text(); //alert (name); //console.log( name ); var ic = td.eq(j).parent().next().next().next().next().text(); ic = parseFloat( ic.replace('$', '').replace(' ', '').replace(' ', '').replace(' ', '') ); //console.log( ic ); ic_array[ src ] = new Object(); ic_array[ src ].name = name; ic_array[ src ].ic = ic; } } //console.log( JSON.stringify( ic_array ) ); ToStorage('ic_array', ic_array ); $("#p_info").html("Запомнили значения ИЦ").css('color', 'green'); }); }*/ function num(num, x){ num = num.toFixed(2); var parts = num.split('.'); parts[0] = parts[0].substr(0, parts[0].length%3)+parts[0].substr(parts[0].length%3).replace(/(\d{3})/g,' \$1'); if (parts[0].length%4 == 0) parts[0] = parts[0].slice(1); if (x) return parts.join('.'); else return parts[0]; } function getICArray() { var ic_array = new Object(); $.ajax({ url: ic_api_link, async: false, //то самое плохое место с синхронными запросами. Зато работает без дополнительных проверок. Но лучше избегать, конечно. success: function(IC){ var ICdata = IC.data; for (var key in ICdata) { var name = ICdata[key].product_name; var ic = ICdata[key].min_cost; ic_array[name] = new Object(); //ic_array[code] = new Object(); ic_array[name].name = name; //ic_array[code].code = code; ic_array[name].ic = ic; //ic_array[code].vals = ic; } ToStorage('ic_array', ic_array); }, //ajaxError: //$("#v_info").append("<br>" + np + " - нет данных по объемам хранения. Если товар не ТМ, сохраните данные на странице по <a href=https://virtonomica.ru/"+realm+"/main/industry/unit_type/info/2011/volume>ссылке</a>").css('color', 'red') }); } function getICArray2() { var ic_array = new Object(); $.ajax({ url: ic_info_link, async: false, //то самое плохое место с синхронными запросами. Зато работает без дополнительных проверок. Но лучше избегать, конечно. success: function(data){ var table = $('.table', data); //console.log('table = ' + table.length); //alert ('table = ' + table.length); var tr = $("td", table); //console.log('tr = ' + tr.length); for (var i=1; i<tr.length; i+=5){ var th = $(tr.eq(i)); var td = $(tr.eq(i+3)); //var img = $("a", tr.eq(i) ); //var src = img.attr('href'); //for(var j=0; j< td.length; j++){ //var code = src.replace('https://virtonomica.ru/'+realm+'/main/product/info/',''); var name = th.text(); var ic = td.text(); var icm = 1; if (ic.search('K')>0) icm = 1000; if (ic.search('M')>0) icm = 1000000; ic = parseFloat(ic.replace('©', '').replace(' ','').replace(' ','').replace(/\u00A0/g, '')) * icm; ic = num (ic, false); ic_array[name] = new Object(); //ic_array[code] = new Object(); ic_array[name].name = name; //ic_array[code].code = code; ic_array[name].ic = ic; //ic_array[code].vals = ic; //} } ToStorage('ic_array', ic_array); }, //ajaxError: //$("#v_info").append("<br>" + np + " - нет данных по объемам хранения. Если товар не ТМ, сохраните данные на странице по <a href=https://virtonomica.ru/"+realm+"/main/industry/unit_type/info/2011/volume>ссылке</a>").css('color', 'red') }); } function getArrayTM() { var arrayTM = new Object(); $.ajax({ url: tm_api_link, async: false, //то самое плохое место с синхронными запросами. Зато работает без дополнительных проверок. Но лучше избегать, конечно. success: function(TM){ var TMdata = TM.data; //console.log(TMdata); for (var key in TMdata) { var symbolTM = TMdata[key].symbol; var nameTM = TMdata[key].name; var name = TMdata[key].product_name; arrayTM[symbolTM] = new Object(); //ic_array[code] = new Object(); arrayTM[symbolTM].name = name; //ic_array[code].code = code; arrayTM[symbolTM].nameTM = nameTM; //ic_array[code].vals = ic; } ToStorage('arrayTM', arrayTM ); }, //ajaxError: //$("#v_info").append("<br>" + np + " - нет данных по объемам хранения. Если товар не ТМ, сохраните данные на странице по <a href=https://virtonomica.ru/"+realm+"/main/industry/unit_type/info/2011/volume>ссылке</a>").css('color', 'red') }); } function getArrayTMold() { var arrayTM = new Object(); $.ajax({ url: tm_info_link, async: false, //то самое плохое место с синхронными запросами. Зато работает без дополнительных проверок. Но лучше избегать, конечно. success: function(data){ //var tmimg_data = $("td>img[src*='/img/products']",data); var table = $('#tm-list-browse > div.tm-listing > div:nth-child(1)',data); //console.log (table); var tmimg_data = $("div[class='item']",data); //console.log (tmimg_data); //var tm_data = $("td>img[src*='/img/products']",data).parent().next(); for (var i=0; i<tmimg_data.length; i++) { var tm_data = tmimg_data.eq(i).parent().next(); var code = tmimg_data.eq(i).attr('src'); //console.log(code); var tm_name = tm_data.text(); tm_name = tm_name.split('\n'); tm_name = tm_name[2].trim(); //np = tm_name; var name = tm_name; //console.log(name); arrayTM[name] = new Object(); arrayTM[code] = new Object(); arrayTM[name].name = name; arrayTM[name].code = code; arrayTM[code].name = name; } ToStorage('arrayTM', arrayTM ); }, //ajaxError: //$("#v_info").append("<br>" + np + " - нет данных по объемам хранения. Если товар не ТМ, сохраните данные на странице по <a href=https://virtonomica.ru/"+realm+"/main/industry/unit_type/info/2011/volume>ссылке</a>").css('color', 'red') }); } function UpdateICStorage() { // удаляем данные по объемам хранения и обновляем страницу window.localStorage.removeItem('ic_array'); getICArray(); location.reload(); } //console.log('start IC'); var UpdateIC = $('<button id=bsave>Обновить</button>').unbind('click').click(function() { UpdateICStorage(); }); $("table.grid").before(wc_info); $("#p_info").html("Вы можете обновить Индикативные цены, возможно они изменились ").css('color', 'blue').css('font-size', '10pt').append(UpdateIC); // Все остальные страницы var ic_array = JSON.parse(window.localStorage.getItem('ic_array')); if (ic_array == null ) { getICArray(); ic_array = JSON.parse(window.localStorage.getItem('ic_array')); } //console.log(arrayTM); //console.log(ic_array['Молоко'].ic); //$("#p_info").html("Не удалось получить значения ИЦ из локального хранилища").css('color', 'red'); //} else{ //$("#p_info").html( JSON.stringify( ic_array ) ); //} // сбыт if (href.indexOf('sale') > 0) { var table = $("table.grid"); //var tr = $("tr[class*='even'], tr[class*='odd'], tr[class*='selected']", table); var tr = $("tr[class]", table); //console.log('tr = ' + tr.length); for (var i=0; i<tr.length; i++){ var td = $("td > a > img", tr.eq(i)); //console.log (td.length); switch (td.length) { case 3: td = td.eq(2); break; case 2: td = td.eq(1); break; default: td = td.eq(0); break; } //if ( td.length == 2) td = td.eq(1); //else td = td.eq(0); //console.log("td= " + td.parent().html() ); var src = td.attr('src'); var symbol = src.replace('/img/products/',''); symbol = symbol.replace('.gif',''); //var id_item = td.parent(); //var id = /(\d+)/.exec(id_item.attr('href'))[0]; var name = td.attr('alt'); //if ((name).slice(-8) == "(устар.)") {name = name.replace(' (устар.)','')}; //console.log(id, id_item); //console.log(name, src, symbol); //Брендовые товары /*switch (src) { case "/img/products/vera/brand/lambardy.gif": src = "/img/products/showercubicle.gif"; break; case "/img/products/brand/krakow.gif": src = "/img/products/sausages.gif"; break; case "/img/products/vera/brand/abibas.gif": src = "/img/products/shoes.gif"; break; case "/img/products/vera/brand/v-times.gif": src = "/img/products/press.gif"; break; case "/img/products/vera/brand/0909/pbp.gif": src = "/img/products/instant.gif"; break; case "/img/products/vera/brand/vaz2106.gif": src = "/img/products/car.gif"; break; case "/img/products/brand/car_sedan_fr1.gif": src = "/img/products/car_sedan.gif"; break; case "/img/products/vera/brand/1466876.gif": src = "/img/products/car.gif"; break; case "/img/products/vera/brand/1916457.gif": src = "/img/products/sweet.gif"; break; }*/ //console.log (src); //console.log(ic_array); if (ic_array[name] == null) { //console.log('Похоже, ТМ', name); var arrayTM = JSON.parse(window.localStorage.getItem('arrayTM')); if (arrayTM == null ) { //console.log('Обновляем ТМ'); getArrayTM(); arrayTM = JSON.parse(window.localStorage.getItem('arrayTM')); } if (arrayTM[symbol] == null) { $("#p_info").append('<br>ИЦ товара "'+name+'" не найдена, возможно новый товар. Обновляем базу ИЦ...').css('color', 'red').css('font-size', '8pt'); //console.log('А нет, не ТМ', name); getICArray(); ic_array = JSON.parse(window.localStorage.getItem('ic_array')); if (ic_array[name] == null) { $("#p_info").append('<br>ИЦ товара "'+name+'" не найдена, возможно новый товар с ТМ. Обновляем базу ИЦ ТМ...').css('color', 'red').css('font-size', '8pt'); //console.log('Обновляем ИЦ', name); getArrayTM(); arrayTM = JSON.parse(window.localStorage.getItem('arrayTM')); name = arrayTM[symbol].name; //console.log(src, name); } } else name = arrayTM[symbol].name; //console.log(src, name); //$("#p_info").append("<br>" + td.attr('alt') + " - нет данных по ИЦ").css('color', 'red'); //continue; } var inp = $("input[name*='[price]']", tr.eq(i)); //if (inp.length == 3) inp = inp.eq(1); //console.log("inp = " + inp.length); inp.before( "ИЦ: " + ic_array[name].ic + "©<br>" ); //td.parent().next().next().next().next().next().before( "ИЦ: " + ic_array[src]['ic'] + "$<br>" ); } } //console.log('end IC'); }; if(window.top == window) { var script = document.createElement("script"); script.textContent = '(' + run.toString() + ')();'; document.documentElement.appendChild(script); }