GabrielRamison 2 mēneši atpakaļ
vecāks
revīzija
70445069b3

+ 2 - 2
dist/index.html

@@ -6,8 +6,8 @@
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1" />
     <link rel="icon" type="image/x-icon" href="/favicon.ico?v=2" />
     <title>ORÁCULO</title>
-    <script type="module" crossorigin src="/assets/index-BHulV6Wt.js"></script>
-    <link rel="stylesheet" crossorigin href="/assets/index-BTVrluxR.css">
+    <script type="module" crossorigin src="/assets/index-BAAztuye.js"></script>
+    <link rel="stylesheet" crossorigin href="/assets/index-C13ET8ov.css">
   </head>
   <body class="bg-background">
     <noscript>

+ 4 - 0
src/api/atendimentos.js

@@ -4,6 +4,10 @@ export function sincronizarAtendimentos(params = {}) {
   return apiFetch("/api/atendimentos/sync", { method: "POST", body: params });
 }
 
+export function sincronizarTodosAtendimentos(params = {}) {
+  return apiFetch("/api/atendimentos/sync-all", { method: "POST", body: params });
+}
+
 export function listarAtendimentos({ page = 1, pageSize = 20, setor, status } = {}) {
   const query = new URLSearchParams({ page: String(page), pageSize: String(pageSize) });
   if (setor) query.set("setor", setor);

+ 40 - 11
src/views/configuracoes/ConfiguracoesView.vue

@@ -4,18 +4,20 @@ import { useRouter } from "vue-router";
 import LayoutSistema from "../../layout/LayoutSistema.vue";
 import BotaoAlterarTema from "../../components/BotaoAlterarTema.vue";
 import { useAuth } from "../../composables/useAuth.js";
-import { sincronizarAtendimentos } from "../../api/atendimentos.js";
+import { sincronizarAtendimentos, sincronizarTodosAtendimentos } from "../../api/atendimentos.js";
 
 const router = useRouter();
 const { user } = useAuth();
 const isAdmin = computed(() => String(user.value?.Nivel) === "3");
 
 const sincronizando = ref(false);
+const importandoTudo = ref(false);
+const syncOcupado = computed(() => sincronizando.value || importandoTudo.value);
 const syncResultado = ref(null);
 const syncErro = ref("");
 
 async function sincronizarAgora() {
-  if (sincronizando.value) return;
+  if (syncOcupado.value) return;
   sincronizando.value = true;
   syncResultado.value = null;
   syncErro.value = "";
@@ -28,6 +30,20 @@ async function sincronizarAgora() {
   }
 }
 
+async function importarTudo() {
+  if (syncOcupado.value) return;
+  importandoTudo.value = true;
+  syncResultado.value = null;
+  syncErro.value = "";
+  try {
+    syncResultado.value = await sincronizarTodosAtendimentos();
+  } catch (err) {
+    syncErro.value = err?.message ?? "Falha ao importar";
+  } finally {
+    importandoTudo.value = false;
+  }
+}
+
 function irParaUsuarios() {
   router.push({ name: "usuarios" });
 }
@@ -125,19 +141,32 @@ function irParaUsuarios() {
                   </div>
                 </div>
               </div>
-              <button
-                type="button"
-                class="shrink-0 rounded-lg bg-primary px-4 py-2 text-sm font-semibold text-white shadow-sm hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-60"
-                :disabled="sincronizando"
-                @click="sincronizarAgora"
-              >
-                {{ sincronizando ? "Sincronizando..." : "Sincronizar" }}
-              </button>
+              <div class="flex shrink-0 items-center gap-2">
+                <button
+                  type="button"
+                  class="rounded-lg border border-gray-300 px-4 py-2 text-sm font-semibold text-gray-700 shadow-sm hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-60 dark:border-gray-600 dark:text-gray-200 dark:hover:bg-white/5"
+                  :disabled="syncOcupado"
+                  @click="importarTudo"
+                >
+                  {{ importandoTudo ? "Importando..." : "Importar tudo" }}
+                </button>
+                <button
+                  type="button"
+                  class="rounded-lg bg-primary px-4 py-2 text-sm font-semibold text-white shadow-sm hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-60"
+                  :disabled="syncOcupado"
+                  @click="sincronizarAgora"
+                >
+                  {{ sincronizando ? "Sincronizando..." : "Sincronizar" }}
+                </button>
+              </div>
             </div>
 
+            <div v-if="importandoTudo" class="mt-4 rounded-lg bg-blue-50 px-4 py-3 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300">
+              Importando todos os protocolos abertos — isso pode levar alguns minutos...
+            </div>
             <div v-if="syncResultado" class="mt-4 rounded-lg bg-green-50 px-4 py-3 text-xs text-green-800 dark:bg-green-900/30 dark:text-green-300">
               {{ syncResultado.importados }} de {{ syncResultado.processados }} protocolos importados
-              ({{ syncResultado.mensagens }} mensagens).
+              ({{ syncResultado.mensagens }} mensagens<span v-if="syncResultado.paginas">, {{ syncResultado.paginas }} páginas</span>).
               Total de protocolos abertos no chatbot: {{ syncResultado.total }}.
               <span v-if="syncResultado.erros?.length"> {{ syncResultado.erros.length }} com erro.</span>
             </div>