diff --git a/Tampermonkey_email.js b/Tampermonkey_email.js index e69de29..439951a 100644 --- a/Tampermonkey_email.js +++ b/Tampermonkey_email.js @@ -0,0 +1,129 @@ +// ==UserScript== +// @name Плашка оператора (Новые договоры) +// @namespace http://192.168.254.38/ +// @version 1.0.0 +// @description Показывает плашку с именем оператора из папки "Новые договоры" +// @author yasu +// @match https://admin2.gtn.ru/diagnostics/index.php?*search=* +// @grant GM_xmlhttpRequest +// @connect 192.168.254.38 +// @updateURL http://192.168.254.38:8766/script.user.js +// @downloadURL http://192.168.254.38:8766/script.user.js +// ==/UserScript== + +(function() { + 'use strict'; + + const BANNER_ID = 'contract-operator-banner'; + let bannerShownOnThisPage = false; + + function getContractNumberFromUrl() { + const url = window.location.href; + const match = url.match(/[?&]search=(\d+)/); + return match ? match[1] : null; + } + + function checkBanner(contractNumber, callback) { + GM_xmlhttpRequest({ + method: 'GET', + url: `http://192.168.254.38:8766/get-banner?contract=${contractNumber}`, + timeout: 5000, + onload: function(response) { + try { + callback(null, JSON.parse(response.responseText)); + } catch(e) { + callback(e, null); + } + }, + onerror: callback, + ontimeout: function() { callback(new Error('Timeout'), null); } + }); + } + + function closeBanner(contractNumber, callback) { + GM_xmlhttpRequest({ + method: 'POST', + url: 'http://192.168.254.38:8766/close-banner', + headers: { 'Content-Type': 'application/json' }, + data: JSON.stringify({ contract_number: contractNumber }), + timeout: 5000, + onload: function() { callback(null); }, + onerror: callback + }); + } + + function formatDate(dateString) { + if (!dateString) return ''; + const parts = dateString.split(' '); + if (parts.length < 2) return dateString; + const dateParts = parts[0].split('-'); + if (dateParts.length === 3) { + return `${dateParts[2]}.${dateParts[1]}.${dateParts[0]} ${parts[1].substring(0, 5)}`; + } + return dateString; + } + + function showBanner(operatorName, contractNumber, receivedDate) { + const oldBanner = document.getElementById(BANNER_ID); + if (oldBanner) oldBanner.remove(); + + const banner = document.createElement('div'); + banner.id = BANNER_ID; + banner.style.cssText = ` + position: fixed; + top: 10px; + right: 10px; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + color: white; + padding: 12px 18px; + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0,0,0,0.2); + z-index: 99999; + font-family: Arial, sans-serif; + font-size: 14px; + cursor: pointer; + min-width: 200px; + border-left: 3px solid #ffd700; + `; + + banner.innerHTML = ` +