const COMENTARIO = 0; const CONCLUSAO_DEV = 1; const CONCLUSAO_QA = 2; var editorInstanceComment; function editarDescricao() { cancelComments('divEditorComentario'); cancelComments('divEditorConclusaoDEV'); cancelComments('divEditorConclusaoQA'); const descricao = $('.containterContentDescricao').html(); // manipular os containers $('.containterContentDescricao').addClass('d-none'); $('#divEditor').removeClass('d-none'); // carregar e estilizar o editor const editor = carregarEditorToastUI('editor', 'auto'); editor.setHTML(descricao); // $('#editor').attr('style', 'width: 100% !important; text-align: start !important; height: 350px !important;'); // manipular os botões $('#btnEditarDesc').addClass('d-none'); $("#btnSalvarDesc").removeClass('d-none'); $("#btnCancelarDesc").removeClass('d-none'); // Adicionando eventos para usar a instância do editor $('#btnCancelarDesc').off('click').on('click', function () { cancelarDescricao(); }); $('#btnSalvarDesc').off('click').on('click', function () { salvarDescricao(editor); }); } function cancelarDescricao() { // manipular os containers $('.containterContentDescricao').removeClass('d-none'); $('#divEditor').addClass('d-none'); // manipular os botões $('#btnEditarDesc').removeClass('d-none'); $("#btnSalvarDesc").addClass('d-none'); $("#btnCancelarDesc").addClass('d-none'); } function salvarDescricao(editor) { const novaDescricao = editor.getHTML(); const idDemanda = $('#idDemanda').val(); $.ajax({ type: "POST", url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=updateDescription`, data: { id: idDemanda, descricao: novaDescricao, }, success: function (data) { const obj = JSON.parse(data); if (obj.erro == 1) { OpenToastV2('Erro', 'Ocorreu um erro ao tentar atualizar a descrição da demanda.', 'error'); return; } OpenToastV2('Successo', 'Descrição atualizada com sucesso!', 'success'); $('.containterContentDescricao').html(novaDescricao); // manipular os containers $('.containterContentDescricao').removeClass('d-none'); $('#divEditor').addClass('d-none') // manipular os botões $('#btnEditarDesc').removeClass('d-none'); $("#btnSalvarDesc").addClass('d-none'); $("#btnCancelarDesc").addClass('d-none'); } }) } function updateQA(idQA) { const idDemanda = $('#idDemanda').val(); $.ajax({ type: "POST", url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=updateQA`, data: { id: idDemanda, qaID: idQA, }, success: function (data) { const obj = JSON.parse(data); if (obj.erro == 1) { OpenToastV2('Erro', 'Ocorreu um erro ao adicionar um(a) QA.', 'error'); return; } // Remove o button "+" com os colaboradores $('#addQA').remove(); $('#qaAtual').remove(); // Add um novo QA const dataOBJ = obj.data; const fotoQA = (dataOBJ.foto_qa_responsavel) ? URL_ARQUIVOS + '/' + dataOBJ.foto_qa_responsavel : DEFAULT_PICTURE; const nomeQA = dataOBJ.nome_qa_responsavel; var qa = ''; qa += `
`; qa += ` Foto Usuário`; qa += ` ${nomeQA}`; qa += `
`; $('#cardQA').append(qa); $('#inputIdQAResponsavel').val(idQA); ensureCommentContainer('containerComentarioComBotoesQA', idQA, 'qa'); setTimeout(() => { $('#iconTrocarQA').removeClass('d-none'); $(`#checkbox-trocar-qa-${idQA}`).prop('checked', true); }, 200); OpenToastV2('Successo', obj.msg, 'success'); updateJobListing(); saveGeneralLogV2( 'demandas', idDemanda, `Definiu ${nomeQA} como QA responsável`, 'Atualizado', '#ee9696', '#f9ebeb', 'ri-user-add-line', null, 0, (() => { if ($('#nav-log-tab').hasClass('active')) { getLogs(); } }) ); } }); } function updateDeveloper(idDeveloper) { const idDemanda = $('#idDemanda').val(); $.ajax({ type: "POST", url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=updateDeveloper`, data: { id: idDemanda, developerID: idDeveloper, }, success: function (data) { const obj = JSON.parse(data); if (obj.erro == 1) { OpenToastV2('Erro', 'Ocorreu um erro ao adicionar um(a) programador.', 'error'); return; } // Remove o button "+" com os colaboradores $('#addProgramador').remove(); $('#programadorAtual').remove(); // Add um novo Programador const dataOBJ = obj.data; const fotoProgramador = (dataOBJ.foto_programador_responsavel) ? URL_ARQUIVOS + '/' + dataOBJ.foto_programador_responsavel : DEFAULT_PICTURE; const nomeProgramador = dataOBJ.nome_programador_responsavel; var pr = ''; pr += `
`; pr += ` Foto Usuário`; pr += ` ${nomeProgramador}`; pr += `
`; $('#cardProgramador').append(pr); $('#inputIdDevResponsavel').val(idDeveloper); ensureCommentContainer('containerComentarioComBotoesDEV', idDeveloper, 'dev'); setTimeout(() => { $('#iconTrocarProgramador').removeClass('d-none'); $(`#checkbox-trocar-programador-${idDeveloper}`).prop('checked', true); }, 200); OpenToastV2('Successo', obj.msg, 'success'); updateJobListing(); saveGeneralLogV2( 'demandas', idDemanda, `Definiu ${nomeProgramador} como programador(a) responsável`, 'Atualizado', '#4e8cff', '#e7f0ff', 'ri-user-add-line', null, 0, (() => { if ($('#nav-log-tab').hasClass('active')) { getLogs(); } }) ); } }); } function updateClassification(classificationID) { const idDemanda = $('#idDemanda').val(); $.ajax({ type: "POST", url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=updateClassification`, data: { id: idDemanda, classificationID: classificationID, }, success: function (data) { const obj = JSON.parse(data); if (obj.erro == 1) { OpenToastV2('Erro', 'Ocorreu um erro ao mudar a classificação da demanda.', 'error'); return; } const dataOBJ = obj.data; $('#spanDescClassificacao').text(dataOBJ.descricao); saveGeneralLogV2( 'demandas', idDemanda, `Mudou a classificação para ${dataOBJ.descricao}`, 'Atualizado', '#05c6e2', '#d8f9fe', 'ri-price-tag-3-line', null, 0, (() => { if ($('#nav-log-tab').hasClass('active')) { getLogs(); } }) ); } }); } function updateLabels(labelID, marked) { const idDemanda = $('#idDemanda').val(); $.ajax({ type: "POST", url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=updateLabels`, data: { id: idDemanda, labelID: labelID, marked: (!marked) ? 0 : 1, }, success: function (data) { const obj = JSON.parse(data); if (obj.erro == 1) { OpenToastV2('Erro', 'Ocorreu um erro ao adicionar e/ou remover uma etiqueta.', 'error'); return; } if (marked) { // adiciona etiqueta na listagem const objData = obj.data; var etiqueta = ''; etiqueta += ``; etiqueta += ` ${objData.titulo}`; etiqueta += ``; $('.etiquetas-lista-demanda').append(etiqueta); } else { // remove etiqueta da listagem $(`#etiqueta-${labelID}`).remove(); } } }); } async function addAnexos(files) { ShowLoad(); const idDemanda = $('#idDemanda').val(); const cnpjEmpresa = $('#inputCNPJEmpresa').val().replace(/\D/g, ''); const arquivos = Array.from(files); try { const uploads = arquivos.map(file => sendFiles(file, cnpjEmpresa, 0, 'file', true), ); const responses = await Promise.all(uploads); const filesId = responses.filter(r => r && r.id_arquivo).map(r => Number(r.id_arquivo)); $.ajax({ type: "POST", url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=addFiles`, data: { id: idDemanda, filesId: filesId, }, success: function (data) { const obj = JSON.parse(data); if (obj.erro == 1) { OpenToastV2('Erro', 'Ocorreu um erro ao vincular um arquivo anexado na Demanda.', 'error'); return; } filesId.map((fileId) => { saveGeneralLogV2( 'demandas', idDemanda, `Adicionou um anexo`, 'Anexo', '#ff9800', '#fff3e6', 'ri-attachment-2', fileId, 0, (() => { if ($('#nav-log-tab').hasClass('active')) { getLogs(); } }) ); }); const objData = obj.data; objData.map((anexo) => { const file = buildDivFileJob(anexo); $('#listagemAnexos').prepend(file); if ($('#aPageModalSemHeader').length) { const fileID = anexo.id; const ext = anexo.extensao.toLowerCase(); const nomeArquivo = anexo.nome_arquivo; const urlFile = URL_ARQUIVOS + anexo.caminho_curto; addImageTextPreviewInComment(fileID, nomeArquivo, ext, urlFile, true, true); } }); OpenToastV2('Sucesso!', 'Arquivo(s) anexado(s) com sucesso.', 'success'); } }) } catch (err) { OpenToastV2('Erro Upload', 'Erro ao realizar upload.', 'error'); } finally { HideLoad(); } } function removerAnexo(fileId) { bootbox.confirm({ title: "Exclusão", message: "Deseja realmente excluir o anexo desta demanda?", closeButton: false, buttons: { cancel: { label: ' Cancelar' }, confirm: { label: ' Confirmar' } }, callback: result => { if (result) { const idDemanda = $('#idDemanda').val(); $.ajax({ type: "POST", url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=removeFile`, data: { id: idDemanda, fileId: fileId, }, success: function (data) { const obj = JSON.parse(data); if (obj.erro == 1) { OpenToastV2('Erro', 'Ocorreu um erro ao remover o anexo vinculado a demanda.', 'error'); return; } $(`#anexo-${fileId}`).remove(); deleteFiles(fileId); // remove arquivo do servidor. OpenToastV2('Sucesso!', 'Arquivo removido com sucesso!', 'success'); } }) } } }); } function editFilename(fileId) { const titleFile = $(`#titulo-anexo-${fileId}`); const currentNameFile = titleFile.html(); titleFile.empty(); var edit = ``; edit += ``; edit += ``; titleFile.append(edit); setFocusAtTheEndOfTheInput(`#input-file-${fileId}`); } function saveFilename(fileID) { ShowLoad(); const titleFile = $(`#titulo-anexo-${fileID}`); const newFilename = $(`#input-file-${fileID}`).val(); titleFile.empty(); titleFile.append(newFilename); $.ajax({ type: "POST", url: `/${URL_BASE}App/DAO/Arquivos/Arquivos.class.php?method=updateFilename`, data: { fileID, newFilename, }, success: function (data) { const obj = JSON.parse(data); if (obj.erro == 1) { OpenToastV2('Erro', 'Ocorreu um erro ao alterar o nome do arquivo.', 'error'); return; } HideLoad(); } }) } function getAnexosById() { const idDemanda = $('#idDemanda').val(); $.ajax({ type: "POST", url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=getFilesById`, data: { id: idDemanda, }, success: function (data) { const obj = JSON.parse(data); if (obj.erro == 1) { OpenToastV2('Erro', 'Ocorreu um erro ao buscar os anexos vinculado a demanda.', 'error'); return; } const objData = obj.data; objData.map((anexo) => { const file = buildDivFileJob(anexo); $('#listagemAnexos').prepend(file); }); } }); } function downloadAnexo(url, nome) { var link = document.createElement("a"); link.href = url; link.download = nome; link.target = '_blank'; link.click(); } function buildWriteComments(divEditor, editor, comentario = null, idComentario = 0) { cancelarDescricao(); cancelComments(divEditor); // manipular os containers $('.containerContentComentario').addClass('d-none'); $(`#${divEditor}`).removeClass('d-none'); // carregar e estilizar o editor editorInstanceComment = carregarEditorToastUI(editor, '200px', { customImageButton: true, removeDefaultImage: true, onCustomImageClick: () => { const idDemanda = $('#idDemanda').val(); handleClickSelectFilesFromEditor(idDemanda); } }); editorInstanceComment.setHTML(''); if (comentario) { editorInstanceComment.setHTML(comentario); } $(`#${editor}`).attr('style', 'width: 100% !important; text-align: start !important; height: 200px !important; margin-top: 10px !important;'); $(`#${editor} .toastui-editor`).attr('style', 'min-height: 100px !important;'); $('.btnSalvarComentario').removeClass('d-none'); $('.btnCancelarComentario').removeClass('d-none'); $('.btnCancelarComentario').off('click').on('click', function () { cancelComments(divEditor) }); $('.btnSalvarComentario').off('click').on('click', function () { saveComments(divEditor, editorInstanceComment, idComentario); }); return editorInstanceComment; } function cancelComments(divEditor) { // manipular os containers $(`#${divEditor}`).addClass('d-none'); $('.containerContentComentario').removeClass('d-none'); $('.btnSalvarComentario').addClass('d-none'); $('.btnCancelarComentario').addClass('d-none'); editorInstanceComment = null; } function saveComments(divEditor, editor, idComentario = 0) { const comentario = editor.getHTML(); const idDemanda = $('#idDemanda').val(); const tipo = (divEditor == 'divEditorComentario') ? COMENTARIO : (divEditor == 'divEditorConclusaoDEV') ? CONCLUSAO_DEV : CONCLUSAO_QA; const nav = (divEditor == 'divEditorComentario') ? 'nav-comentarios' : (divEditor == 'divEditorConclusaoDEV') ? 'nav-conclusao-dev' : 'nav-conclusao-qa'; const list = (divEditor == 'divEditorComentario') ? 'listaComentarios' : (divEditor == 'divEditorConclusaoDEV') ? 'listaConclusaoDEV' : 'listaConclusaoQA'; const editorID = (divEditor == 'divEditorComentario') ? 'editorComentario' : (divEditor == 'divEditorConclusaoDEV') ? 'editorConclusaoDEV' : 'editorConclusaoQA'; $.ajax({ type: "POST", url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=saveComment`, data: { id: idDemanda, comentario: comentario, tipo: tipo, idComentario: idComentario, }, success: function (data) { const obj = JSON.parse(data); const session = getDataSession(); if (obj.erro == 1) { OpenToastV2('Erro', 'Ocorreu um erro ao tentar adicionar um comentário.', 'error'); return; } $(`#${nav} .skeleton_comentario`).remove(); const objData = obj.data; if (!objData) { const currentComment = editor.getHTML(); $(`#texto-comentario-${idComentario}`).empty(); $(`#texto-comentario-${idComentario}`).html(currentComment); } else { const fotoUsuario = (objData.src_foto_usuario) ? URL_ARQUIVOS + objData.src_foto_usuario : DEFAULT_PICTURE; const nomeUsuario = objData.nome_usuario; var comentario = ''; comentario += `
`; comentario += `
`; comentario += `
`; comentario += ` Foto Usuário`; comentario += ` ${nomeUsuario}`; comentario += ` Agora mesmo ${(objData.user_edicao) ? '(editado)' : ''}`; comentario += `
`; if (objData.user_insercao == session.id) { comentario += `
`; comentario += ` `; comentario += ` `; comentario += `
`; } comentario += `
`; comentario += `
`; comentario += ` ${objData.comentario}` comentario += `
`; comentario += `
`; if ($('#semComentario').length) { $(`#semComentario`).remove(); } $(`#${list}`).prepend(comentario); } OpenToastV2('Sucesso', 'Comentário salvo com sucesso!', 'success'); cancelComments(divEditor); } }); } function editComment(id, divEditor, editorID) { _GET('App/Controller/Query/get.controller.php', { table_name: 'comentarios_demanda', condition: `AND id = ${id}` }).done(data => { const objData = JSON.parse(data)[0]; buildWriteComments(divEditor, editorID, objData.comentario, id); }); } function getCommentsById(type) { const idDemanda = $('#idDemanda').val(); const list = (type == COMENTARIO) ? 'listaComentarios' : (type == CONCLUSAO_DEV) ? 'listaConclusaoDEV' : 'listaConclusaoQA'; const divEditor = (type == COMENTARIO) ? 'divEditorComentario' : (type == CONCLUSAO_DEV) ? 'divEditorConclusaoDEV' : 'divEditorConclusaoQA'; const editorID = (divEditor == 'divEditorComentario') ? 'editorComentario' : (divEditor == 'divEditorConclusaoDEV') ? 'editorConclusaoDEV' : 'editorConclusaoQA'; $.ajax({ type: "POST", url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=getCommentsById`, data: { id: idDemanda, tipo: type, }, success: function (data) { const obj = JSON.parse(data); $(`#${list}`).empty(); if (obj.erro == 1) { OpenToastV2('Erro', 'Ocorreu um erro ao buscar os comentários da demanda.', 'error'); return; } const objData = obj.data; if (objData.length <= 0) { var div = ``; div += '
'; div += ' '; div += ' Nenhum comentário por aqui'; div += '
'; $(`#${list}`).html(div); } objData.map((comment) => { const fotoUsuario = (comment.src_foto_usuario) ? URL_ARQUIVOS + comment.src_foto_usuario : DEFAULT_PICTURE; const nomeUsuario = comment.nome_usuario; var comentario = ''; comentario += `
`; comentario += `
`; comentario += `
`; comentario += ` Foto Usuário`; comentario += ` ${nomeUsuario}`; comentario += ` ${tempoRelativo(comment.data_insercao)} ${(comment.user_edicao) ? '(editado)' : ''}`; comentario += `
`; if (comment.user_insercao == session.id) { comentario += `
`; comentario += ` `; comentario += ` `; comentario += `
`; } comentario += `
`; comentario += `
`; comentario += ` ${comment.comentario}` comentario += `
`; comentario += `
`; $(`#${list}`).prepend(comentario); }); adicionarBotaoCopiar(); bindFancyboxToEditorImagePreview(); } }); } function getLogs() { const idDemanda = $('#idDemanda').val(); $.ajax({ type: "POST", url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=getLogsById`, data: { originID: idDemanda, }, success: function (data) { const obj = JSON.parse(data); if (obj.erro == 1) { OpenToastV2('Erro', 'Ocorreu um erro ao buscar os logs da demanda.', 'error'); return; } $(`#listaLogDemanda`).empty(); const objData = obj.data; objData.map((item) => { const styleBadgeAndIcon = `style="background-color: ${item.secondary_color} !important; color: ${item.primary_color} !important; border: 1px solid ${item.primary_color} !important;"`; var log = ``; log += `
`; log += `
`; log += ` `; log += `
`; log += `
`; log += `
`; log += ` ${item.nome_usuario}`; log += ` ${item.titulo_badge}`; log += `
`; log += `
`; log += ` ${item.registro}`; if (item.id_arquivo) { log += `
${item.nome_arquivo}
`; } log += `
`; log += `
`; log += ` ${tempoRelativo(item.data_registro)}`; log += `
`; log += `
`; log += `
`; $(`#listaLogDemanda`).prepend(log); }); } }); } /** * Função para garantir que o container de comentário exista apenas para os responsável * @param {string} idContainer * @param {number} idResponsibleUser * @param {qa | dev} type */ function ensureCommentContainer(containerID, responsibleUserID, type) { const session = getDataSession(); if ($(`#${containerID}`).length && responsibleUserID != session.id) { $(`#${containerID}`).remove(); return; } if (!$(`#${containerID}`).length && responsibleUserID == session.id) { const divEditor = (type == 'dev') ? 'divEditorConclusaoDEV' : 'divEditorConclusaoQA'; const editorID = (type == 'dev') ? 'editorConclusaoDEV' : 'editorConclusaoQA'; const containerListWithCommentID = (type == 'dev') ? 'containerListaComComentarioDEV' : 'containerListaComComentarioQA'; var container = ``; container += `
`; container += `
`; container += `
`; container += `
`; container += `
`; container += ` Adicione um comentário...`; container += `
`; container += `
`; container += ` `; container += ` `; container += `
`; container += `
`; $(`#${containerListWithCommentID}`).append(container); } } /** * ::begin:: Funções para construir eventos usado na modal de Ações da Demanda * ::begin:: Funções para construir eventos usado na modal de Ações da Demanda */ function buildEventsUpdateQA() { $(document).off('change', '.checkboxAddQA').on('change', '.checkboxAddQA', function () { if ($(this).is(':checked')) { $('.checkboxAddQA').not(this).prop('checked', false); updateQA($(this).val()); } else { $(this).prop('checked', true); } }); $(document).off('change', '.checkboxTrocarQA').on('change', '.checkboxTrocarQA', function () { if ($(this).is(':checked')) { $('.checkboxTrocarQA').not(this).prop('checked', false); updateQA($(this).val()); } else { $(this).prop('checked', true); } }); } function buildEventsUpdateDEV() { $(document).off('change', '.checkboxAddProgramador').on('change', '.checkboxAddProgramador', function () { if ($(this).is(':checked')) { $('.checkboxAddProgramador').not(this).prop('checked', false); updateDeveloper($(this).val()); } else { $(this).prop('checked', true); } }); $(document).off('change', '.checkboxTrocarProgramador').on('change', '.checkboxTrocarProgramador', function () { if ($(this).is(':checked')) { $('.checkboxTrocarProgramador').not(this).prop('checked', false); updateDeveloper($(this).val()); } else { $(this).prop('checked', true); } }); } function buildEventsUpdateLabels() { $(document).off('change', '.checkboxEtiqueta').on('change', '.checkboxEtiqueta', function () { const id = $(this).val(); const marcado = $(this).is(':checked'); updateLabels(id, marcado); }); } function buildEventsClickTabComments() { $('#nav-comentarios-tab').on('click', () => { cancelComments('divEditorComentario'); getCommentsById(COMENTARIO); }); $('#nav-conclusao-dev-tab').on('click', () => { cancelComments('divEditorConclusaoDEV'); getCommentsById(CONCLUSAO_DEV); }); $('#nav-conclusao-qa-tab').on('click', () => { cancelComments('divEditorConclusaoQA'); getCommentsById(CONCLUSAO_QA); }); } function buildEventsClickTabLogs() { $('#nav-log-tab').on('click', () => { getLogs(); }); } function buildEventsDragAndDropFiles() { let dragCounter = 0; const overlay = $('#dragOverlayDemanda'); const inputFile = $('#inputAnexos'); // Remove apenas eventos desse módulo $(document).off('.dragDemanda'); overlay.off('.dragDemanda'); // Detecta entrada de arquivo na tela $(document).on('dragenter.dragDemanda', function (e) { e.preventDefault(); if (e.originalEvent.dataTransfer.types.includes("Files")) { dragCounter++; overlay.addClass('dragging'); } }); $(document).on('dragleave.dragDemanda', function () { dragCounter--; if (dragCounter <= 0) { overlay.removeClass('dragging'); dragCounter = 0; } }); $(document).on('dragover.dragDemanda', function (e) { e.preventDefault(); }); // Drop somente no overlay overlay.on('drop.dragDemanda', function (e) { e.preventDefault(); dragCounter = 0; overlay.removeClass('dragging'); const files = e.originalEvent.dataTransfer.files; if (files.length > 0) { inputFile[0].files = files; addAnexos(files); } }); } function buildEventsInputFile() { $('#inputAnexos').on('change', function () { const arquivos = this.files; addAnexos(arquivos); }); } function buildEventsUpdateClassification() { $(document).off('change', '.checkboxMudarClassificacao').on('change', '.checkboxMudarClassificacao', function () { if ($(this).is(':checked')) { $('.checkboxMudarClassificacao').not(this).prop('checked', false); updateClassification($(this).val()); } else { $(this).prop('checked', true); } }); } function buildEventsUpdateStatus() { $(document).off('change', '.checkboxMudarStatus').on('change', '.checkboxMudarStatus', function () { if ($(this).is(':checked')) { $('.checkboxMudarStatus').not(this).prop('checked', false); const idDemanda = $('#idDemanda').val(); const payload = { jobID: idDemanda, newStatusID: $(this).val(), } changeStatus(payload); } else { $(this).prop('checked', true); } }); } function buildEventsDoubleClickDescription() { $('.containterContentDescricao').on('dblclick', () => { editarDescricao(); }) } function buildEventsClickTitleJOB() { const containerTitleJOB = $('#containerTituloDemanda'); containerTitleJOB.on('click', () => { const titleJOB = $('#tituloDemanda'); if ($('#containerTituloDemanda #iptTituloDemanda').length) { return; } $('span #nomeProjeto').remove(); const currentTitle = titleJOB.text().trim(); containerTitleJOB.empty(); var input = ``; containerTitleJOB.append(input); setFocusAtTheEndOfTheInput('#iptTituloDemanda'); // Fazer expandir conforme digita $(document).on('input', '#iptTituloDemanda', function () { this.style.height = 'auto'; this.style.height = this.scrollHeight + 'px'; }); const textarea = $('#iptTituloDemanda'); textarea.css('height', 'auto'); textarea.css('height', textarea[0].scrollHeight + 'px'); verificarMaximoCaracteres('iptTituloDemanda', LIMITE_CARACTERES_TITULO_DEMANDA); buildEventsUpdateJOB(currentTitle); }); } function buildEventsUpdateJOB(oldTitle) { const inputTitle = $('#iptTituloDemanda'); const containerTitleJOB = $('#containerTituloDemanda'); const jobID = $('#idDemanda').val(); const projectName = $('#inputNomeProjeto').val(); function submitTitle() { const newTitle = inputTitle.val().trim(); if (!newTitle) { OpenToastV2('Erro', 'Preencha o título da demanda antes de salvar-la.', 'error'); setFocusAtTheEndOfTheInput('#iptTituloDemanda'); return; } var title = ''; title += `${projectName}: `; title += `${(oldTitle == newTitle) ? oldTitle : newTitle}`; if (oldTitle == newTitle) { containerTitleJOB.html(title); return; } $.ajax({ type: "POST", url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=updateTitleJOB`, data: { id: jobID, newTitle: newTitle, }, success: function (data) { const obj = JSON.parse(data); if (obj.erro == 1) { OpenToastV2('Erro', 'Ocorreu um erro ao tentar atualizar o título da demanda.', 'error'); return; } containerTitleJOB.html(title); updateJobListing(); } }); } // Quando perde o foco inputTitle.on('blur', function () { submitTitle(); }); // Quando aperta Enter inputTitle.on('keydown', function (e) { if (e.key === 'Enter') { e.preventDefault(); // evita submit de form submitTitle(); $(this).blur(); // força sair do foco } }); } function buildEventsPasteImageToModal() { const modal = $('#aBodyPageModal'); // ajuste para o container real da sua modal modal.on('paste', function (e) { const activeElement = document.activeElement; // 🚫 Se estiver dentro do Toast UI Editor, deixa ele tratar normalmente if ($(activeElement).closest('.toastui-editor-defaultUI').length) { return; } const items = (e.originalEvent.clipboardData || e.clipboardData).items; if (!items) return; for (let i = 0; i < items.length; i++) { const item = items[i]; if (item.type.indexOf('image') !== -1) { e.preventDefault(); const blob = item.getAsFile(); const file = new File( [blob], `image.webp`, { type: blob.type } ); addAnexos([file]); break; } } }); } /** * ::end:: Funções para construir eventos usado na modal de Ações da Demanda * ::end:: Funções para construir eventos usado na modal de Ações da Demanda */ function generateAndCopyLinkJob(jobID) { const baseUrlChamado = `https://movetask.com.br/Demandas/lista?id=${jobID}`; // const baseUrlChamado = `http://localhost/MoveTask/01/Demandas/lista?id=${jobID}`; // const baseUrlChamado = `https://test.appg3.com.br/movetask/Demandas/lista?id=${jobID}`; navigator.clipboard.writeText(baseUrlChamado).then(() => { OpenToastV2('Link Copiado', `O link da demanda Nº ${formatarNumeroChamado(jobID)} foi copiado com sucesso.`, 'success'); }).catch(err => { OpenToastV2('Erro ao Copiar', `Não foi possível copiar o link da demanda Nº ${formatarNumeroChamado(jobID)}.`, 'error'); }); } function addImageTextPreviewInComment( fileID, filename, ext, urlFile, closePageModal = false, useImageTag = false ) { if (closePageModal) { ClosePageModalSemHeader(); } var nameFile = ``; if ($(`#titulo-anexo-${fileID}`).length) { nameFile = $(`#titulo-anexo-${fileID}`).text(); } else { nameFile = decodeURIComponent(filename); } const tipo = getFileTypeFancybox(ext); const navComentario = $('#nav-comentarios-tab'); const navConclusaoDev = $('#nav-conclusao-dev-tab'); const navConclusaoQA = $('#nav-conclusao-qa-tab'); let divEditor = ''; let editorID = ''; // 1. Montar atributos Fancybox let fancyAttrs = ''; switch (tipo) { case 'image': fancyAttrs = `data-fancybox="galeria" data-type="image"`; break; case 'video': fancyAttrs = `data-fancybox="galeria" data-type="html5video"`; break; case 'download': fancyAttrs = ''; break; } // 2. Montar conteúdo interno do let innerContent = nameFile; if (useImageTag && tipo === 'image') { innerContent = ` ${nameFile} `; } const linkImgPreview = ` ${innerContent} `; // 3. Descobrir qual editor está ativo if (navComentario.hasClass('active')) { divEditor = 'divEditorComentario'; editorID = 'editorComentario'; } else if (navConclusaoDev.hasClass('active')) { divEditor = 'divEditorConclusaoDEV'; editorID = 'editorConclusaoDEV'; } else if (navConclusaoQA.hasClass('active')) { divEditor = 'divEditorConclusaoQA'; editorID = 'editorConclusaoQA'; } // 4. Se editor ainda não estiver montado if ($(`#${divEditor}`).hasClass('d-none')) { buildWriteComments(divEditor, editorID); editorInstanceComment.setHTML(linkImgPreview); bindFancyboxToEditorImagePreview(); return; } const currentHTML = editorInstanceComment.getHTML(); editorInstanceComment.setHTML( currentHTML + `

${linkImgPreview}

` ); bindFancyboxToEditorImagePreview(); } function handleClickSelectFilesFromEditor(jobID) { PageModalSemHeader(`/${URL_BASE}App/View/Pages/Demandas/include/modal/selecionar_arquivos_editor.php?jobID=${jobID}`, true, 700); } function handleClickAttachFileViaLink() { const linkFile = $('#inputLinkFileAnexar').val(); if (!linkFile) { OpenToastV2('Erro', 'Por favor, insira um link antes de enviar.', 'error'); return; } const ext = getImageExtension(linkFile); if (ext) { const navComentario = $('#nav-comentarios-tab'); const navConclusaoDev = $('#nav-conclusao-dev-tab'); const navConclusaoQA = $('#nav-conclusao-qa-tab'); let divEditor = ''; let editorID = ''; let fancyAttrs = `data-fancybox="galeria" data-type="image"`; let innerContent = ` Arquivo enviado via link `; const linkImgPreview = ` ${innerContent} `; if (navComentario.hasClass('active')) { divEditor = 'divEditorComentario'; editorID = 'editorComentario'; } else if (navConclusaoDev.hasClass('active')) { divEditor = 'divEditorConclusaoDEV'; editorID = 'editorConclusaoDEV'; } else if (navConclusaoQA.hasClass('active')) { divEditor = 'divEditorConclusaoQA'; editorID = 'editorConclusaoQA'; } if ($(`#${divEditor}`).hasClass('d-none')) { buildWriteComments(divEditor, editorID); editorInstanceComment.setHTML(linkImgPreview); bindFancyboxToEditorImagePreview(); return; } const currentHTML = editorInstanceComment.getHTML(); editorInstanceComment.setHTML( currentHTML + `

${linkImgPreview}

` ); bindFancyboxToEditorImagePreview(); ClosePageModalSemHeader(); } }