您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Formulario Helper para chamados.
- // ==UserScript==
- // @name Formulario Helper
- // @namespace http://tampermonkey.net/
- // @version 1.1
- // @description Formulario Helper para chamados.
- // @author ils94
- // @match https://atendimento-sao.tre-rn.jus.br/front/tracking.injector.php
- // @grant GM_setClipboard
- // @run-at document-idle
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- function criarModal() {
- const estilo = `
- #formModal {
- position: fixed;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
- background: white;
- padding: 20px;
- border: 2px solid #007bff;
- border-radius: 10px;
- z-index: 10000;
- box-shadow: 0 0 10px rgba(0,0,0,0.5);
- width: 300px;
- font-family: sans-serif;
- }
- #formModal input, #formModal select, #formModal textarea {
- width: 100%;
- margin-bottom: 10px;
- padding: 5px;
- font-size: 14px;
- box-sizing: border-box;
- }
- #formModal textarea {
- resize: vertical;
- min-height: 60px;
- max-height: 120px;
- }
- #formModal .linha-flex {
- display: flex;
- gap: 5px;
- align-items: stretch;
- }
- #formModal button {
- margin-top: 5px;
- padding: 8px;
- width: 100%;
- font-weight: bold;
- cursor: pointer;
- }
- #fecharModal {
- position: absolute;
- top: 5px;
- right: 10px;
- cursor: pointer;
- font-weight: bold;
- color: red;
- }
- `;
- const styleTag = document.createElement('style');
- styleTag.textContent = estilo;
- document.head.appendChild(styleTag);
- const modal = document.createElement('div');
- modal.id = 'formModal';
- modal.style.display = 'none';
- const {
- data,
- hora
- } = obterDataHoraAtual();
- modal.innerHTML = `
- <span id="fecharModal">X</span>
- <label>Data:</label><input id="data" value="${data}">
- <label>Hora:</label><input id="hora" value="${hora}">
- <label>Origem:</label>
- <select id="origem">
- <option value="COJE">COJE</option>
- <option value="SEDE">SEDE</option>
- </select>
- <label>Destino:</label>
- <select id="destino">
- <option value="SEDE">SEDE</option>
- <option value="COJE">COJE</option>
- </select>
- <label>Passageiros:</label><input id="passageiros" placeholder="NOME1, NOME2">
- <label>Prioridade:</label>
- <select id="prioridade">
- <option value="NORMAL">NORMAL</option>
- <option value="URGENTE">URGENTE</option>
- </select>
- <label>Necessidade Especial:</label><input id="especial" placeholder="NENHUMA">
- <label>Justificativa do Chamado:</label><textarea id="justificativa" placeholder="Digite a justificativa aqui..."></textarea>
- <button id="copiarTexto">Inserir</button>
- `;
- document.body.appendChild(modal);
- document.getElementById('fecharModal').onclick = () => modal.style.display = 'none';
- // Sincronizar selects de origem e destino
- const origemSelect = modal.querySelector('#origem');
- const destinoSelect = modal.querySelector('#destino');
- origemSelect.addEventListener('change', () => {
- destinoSelect.value = origemSelect.value === 'COJE' ? 'SEDE' : 'COJE';
- });
- destinoSelect.addEventListener('change', () => {
- origemSelect.value = destinoSelect.value === 'COJE' ? 'SEDE' : 'COJE';
- });
- document.getElementById('copiarTexto').onclick = () => {
- const especialInput = document.getElementById('especial').value.trim();
- const especialTexto = especialInput === '' ? 'NENHUMA' : especialInput;
- const justificativaInput = document.getElementById('justificativa').value.trim();
- const passageirosInput = document.getElementById('passageiros').value.trim();
- const passageirosTexto = passageirosInput === '' ? 'NENHUM' : passageirosInput;
- // Verifica se a justificativa está vazia
- if (justificativaInput === '') {
- alert('Por favor, preencha a Justificativa do Chamado.');
- return;
- }
- const texto = `
- DATA: ${document.getElementById('data').value}
- HORA: ${document.getElementById('hora').value}
- ORIGEM: ${document.getElementById('origem').value}
- DESTINO: ${document.getElementById('destino').value}
- NOME DOS PASSAGEIROS: ${passageirosTexto}
- PRIORIDADE: ${document.getElementById('prioridade').value}
- NECESSIDADE ESPECIAL: ${especialTexto}
- JUSTIFICATIVA DO CHAMADO: ${justificativaInput}
- `.trim().toUpperCase();
- // Função para tentar injetar o texto no editor TinyMCE
- function injectText() {
- let editorBody = null;
- const iframes = document.getElementsByTagName('iframe');
- for (let iframe of iframes) {
- try {
- const iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
- // Tenta encontrar o body com id="tinymce" e opcionalmente data-id="content793588473"
- const body = iframeDoc.querySelector('body#tinymce');
- if (body) {
- editorBody = body;
- break;
- }
- } catch (e) {
- console.error('Erro ao acessar iframe:', e);
- }
- }
- if (editorBody) {
- try {
- const formattedText = texto.replace(/\n/g, '<br>');
- editorBody.innerHTML = `<p>${formattedText}</p>`;
- return true;
- } catch (e) {
- console.error('Erro ao injetar texto no editor:', e);
- alert('Erro ao injetar texto no editor TinyMCE. O texto foi copiado para a área de transferência.');
- return false;
- }
- }
- return false;
- }
- // Tenta injetar o texto com tentativas a cada 100ms, até 5 segundos
- let attempts = 0;
- const maxAttempts = 50; // 5 segundos (50 * 100ms)
- const interval = setInterval(() => {
- if (injectText()) {
- clearInterval(interval);
- // Copiar para a área de transferência
- if (typeof GM_setClipboard !== 'undefined') {
- GM_setClipboard(texto);
- } else {
- navigator.clipboard.writeText(texto).then(() => alert('Copiado e injetado no editor!'));
- }
- document.getElementById('formModal').style.display = 'none';
- } else if (attempts >= maxAttempts) {
- clearInterval(interval);
- alert('Não foi possível encontrar o editor TinyMCE com id="tinymce". O texto foi copiado para a área de transferência.');
- // Copiar para a área de transferência mesmo se a injeção falhar
- if (typeof GM_setClipboard !== 'undefined') {
- GM_setClipboard(texto);
- } else {
- navigator.clipboard.writeText(texto).then(() => alert('Copiado para a área de transferência!'));
- }
- document.getElementById('formModal').style.display = 'none';
- }
- attempts++;
- }, 100);
- };
- }
- function criarBotao() {
- const doc = window.top.document; // documento da janela principal, não do iframe
- // Remove o botão se já existir
- const botaoExistente = doc.getElementById('botaoGerarSolicitacao');
- if (botaoExistente) botaoExistente.remove();
- const botao = doc.createElement('button');
- botao.id = 'botaoGerarSolicitacao';
- botao.textContent = 'Gerar Solicitação';
- botao.style.position = 'fixed';
- botao.style.bottom = '20px';
- botao.style.right = '20px';
- botao.style.padding = '10px 15px';
- botao.style.backgroundColor = '#007bff';
- botao.style.color = '#fff';
- botao.style.border = 'none';
- botao.style.borderRadius = '5px';
- botao.style.cursor = 'pointer';
- botao.style.zIndex = '9999';
- botao.onclick = () => doc.getElementById('formModal').style.display = 'block';
- doc.body.appendChild(botao);
- }
- function obterDataHoraAtual() {
- const agora = new Date();
- const data = agora.toLocaleDateString('pt-BR');
- const hora = agora.toLocaleTimeString('pt-BR', {
- hour: '2-digit',
- minute: '2-digit'
- });
- return {
- data,
- hora
- };
- }
- window.addEventListener('load', () => {
- criarModal();
- criarBotao();
- });
- })();