From 0ea4efdc43885d35a43093248349c96dd4ecf744 Mon Sep 17 00:00:00 2001 From: florianfederspiel Date: Tue, 2 Jun 2026 16:23:27 +0200 Subject: [PATCH] Scan aus der Dateienseite starten --- backend/src/routes/instanceAgentGateway.ts | 18 +- frontend/components/FileScanModal.vue | 297 +++++++++++++++++++++ frontend/pages/files/index.vue | 15 ++ 3 files changed, 328 insertions(+), 2 deletions(-) create mode 100644 frontend/components/FileScanModal.vue diff --git a/backend/src/routes/instanceAgentGateway.ts b/backend/src/routes/instanceAgentGateway.ts index b707b2b..95e2259 100644 --- a/backend/src/routes/instanceAgentGateway.ts +++ b/backend/src/routes/instanceAgentGateway.ts @@ -44,6 +44,20 @@ const pickFileTargets = (target: unknown) => { ) } +const readFileFolder = (target: unknown) => { + if (!target || typeof target !== "object" || Array.isArray(target)) return null + + const folder = (target as Record).folder + return typeof folder === "string" && folder.trim() ? folder.trim() : null +} + +const readFileType = (target: unknown) => { + if (!target || typeof target !== "object" || Array.isArray(target)) return null + + const type = (target as Record).type + return typeof type === "string" && type.trim() ? type.trim() : null +} + export default async function instanceAgentGatewayRoutes(server: FastifyInstance) { await server.register(multipart, { limits: { fileSize: 100 * 1024 * 1024 }, @@ -206,8 +220,8 @@ export default async function instanceAgentGatewayRoutes(server: FastifyInstance content: fileBuffer, contentType: data.mimetype || "application/pdf", }, - null, - null, + readFileFolder(job.target), + readFileType(job.target), { ...pickFileTargets(job.target), createdBy: job.requestedBy, diff --git a/frontend/components/FileScanModal.vue b/frontend/components/FileScanModal.vue new file mode 100644 index 0000000..3ba55d2 --- /dev/null +++ b/frontend/components/FileScanModal.vue @@ -0,0 +1,297 @@ + + + diff --git a/frontend/pages/files/index.vue b/frontend/pages/files/index.vue index 396366a..ee60d5a 100644 --- a/frontend/pages/files/index.vue +++ b/frontend/pages/files/index.vue @@ -2,6 +2,7 @@ import {ref, computed, watch, onMounted, onUnmounted} from 'vue'; import DocumentDisplayModal from "~/components/DocumentDisplayModal.vue"; import DocumentUploadModal from "~/components/DocumentUploadModal.vue"; +import FileScanModal from "~/components/FileScanModal.vue"; import dayjs from "dayjs"; // --- Services & Stores --- @@ -329,6 +330,17 @@ const showFile = (fileId) => { }) } +const openScanModal = () => { + modal.open(FileScanModal, { + scanData: { + folder: currentFolder.value?.id, + type: currentFolder.value?.standardFiletype, + typeEnabled: currentFolder.value?.standardFiletype ? currentFolder.value?.standardFiletypeIsOptional : true + }, + onScanFinished: setupPage + }) +} + const isDialogOpen = computed(() => createFolderModalOpen.value || renameModalOpen.value) defineShortcuts({ @@ -412,6 +424,9 @@ const syncdokubox = async () => { @click="modal.open(DocumentUploadModal, { fileData: { folder: currentFolder?.id,type: currentFolder?.standardFiletype, typeEnabled: currentFolder?.standardFiletype ? currentFolder?.standardFiletypeIsOptional : true }, onUploadFinished: setupPage })"> Datei + + Scan + Ordner