From b7b8a2077a32d0bfdf066abd73ee2d7b4678c57a Mon Sep 17 00:00:00 2001 From: florianfederspiel Date: Tue, 21 Jul 2026 21:40:07 +0200 Subject: [PATCH] =?UTF-8?q?KI-AGENT:=20Einklappbare=20Titelbereiche=20im?= =?UTF-8?q?=20Dokumenteneditor=20erg=C3=A4nzen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/pages/createDocument/edit/[[id]].vue | 51 ++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/frontend/pages/createDocument/edit/[[id]].vue b/frontend/pages/createDocument/edit/[[id]].vue index 54aface..2937290 100644 --- a/frontend/pages/createDocument/edit/[[id]].vue +++ b/frontend/pages/createDocument/edit/[[id]].vue @@ -91,6 +91,7 @@ const selectedProductcategorie = ref(null) const services = ref([]) const servicecategories = ref([]) const selectedServicecategorie = ref(null) +const collapsedTitleRowIds = ref(new Set()) const customers = ref([]) const contacts = ref([]) const contracts = ref([]) @@ -928,6 +929,45 @@ const getPositionAddMenuItems = (row) => [ })) ] +const toggleTitleSection = (rowId) => { + const nextCollapsedTitleRowIds = new Set(collapsedTitleRowIds.value) + + if (nextCollapsedTitleRowIds.has(rowId)) { + nextCollapsedTitleRowIds.delete(rowId) + } else { + nextCollapsedTitleRowIds.add(rowId) + } + + collapsedTitleRowIds.value = nextCollapsedTitleRowIds +} + +const hiddenDocumentRowIds = computed(() => { + const hiddenRowIds = new Set() + const collapsedTitleLevels = [] + + itemInfo.value.rows.forEach((row) => { + if (row.mode === 'title') { + const titleLevel = Math.min(Math.max(Number(row.titleLevel) || 1, 1), 3) + + while ( + collapsedTitleLevels.length > 0 + && collapsedTitleLevels[collapsedTitleLevels.length - 1] >= titleLevel + ) { + collapsedTitleLevels.pop() + } + + if (collapsedTitleLevels.length > 0) hiddenRowIds.add(row.id) + if (collapsedTitleRowIds.value.has(row.id)) collapsedTitleLevels.push(titleLevel) + } else if (collapsedTitleLevels.length > 0) { + hiddenRowIds.add(row.id) + } + }) + + return hiddenRowIds +}) + +const isDocumentRowHidden = (rowId) => hiddenDocumentRowIds.value.has(rowId) + const getFullWidthPositionColspan = () => deliveryNoteLikeDocumentTypes.includes(itemInfo.value.type) ? 5 : 8 const getTitlePositionColspan = () => deliveryNoteLikeDocumentTypes.includes(itemInfo.value.type) ? 4 : 7 @@ -2875,7 +2915,7 @@ const setRowData = async (row, service = {sellingPriceComposed: {}}, product = { @end="setPosNumbers" >