From 5b34a226bdb3b5f95e98b01d50106671b3e4bd51 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Tue, 17 Feb 2026 11:09:54 +0100 Subject: [PATCH 1/2] verbandsbaum nur toggeln und nicht automatisch selektieren --- public/css/components/primevue.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/css/components/primevue.css b/public/css/components/primevue.css index ac1950334..97b918011 100644 --- a/public/css/components/primevue.css +++ b/public/css/components/primevue.css @@ -3578,6 +3578,12 @@ transition: box-shadow 0.15s; margin-right: 0.5rem; } + +.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler > svg, +.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler > svg * { + pointer-events: none; +} + .p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler:enabled:hover { color: #495057; border-color: transparent; From 2f51f18447a0634ddea49419e842e7243821c287 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Tue, 17 Feb 2026 11:16:44 +0100 Subject: [PATCH 2/2] studierende in die gruppe ziehen ohne vorheriges selektieren --- .../Stv/Studentenverwaltung/List.js | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/public/js/components/Stv/Studentenverwaltung/List.js b/public/js/components/Stv/Studentenverwaltung/List.js index 045326ae6..4b69b6571 100644 --- a/public/js/components/Stv/Studentenverwaltung/List.js +++ b/public/js/components/Stv/Studentenverwaltung/List.js @@ -128,6 +128,7 @@ export default { if (row.getData().bnaktiv === false) { row.getElement().classList.add('text-black','text-opacity-50','fst-italic'); } + row.getElement().draggable = true }, ajaxRequestFunc: (url, config, params) => { @@ -179,6 +180,10 @@ export default { { event: 'rowClick', handler: this.handleRowClick // TODO(chris): this should be in the filter component + }, + { + event: 'rowMouseDown', + handler: this.handleMouseDown } ], focusObj: null, // TODO(chris): this should be in the filter component @@ -187,7 +192,8 @@ export default { count: 0, filteredcount: 0, selectedcount: 0, - currentEndpoint: null + currentEndpoint: null, + dragSource: [] } }, computed: { @@ -203,7 +209,9 @@ export default { + ': ' + (this.count || 0) + ''; }, selectedDragObject() { - return this.selected.map(item => { + let items = this.dragSource?.length ? this.dragSource : this.selected; + + return items.map(item => { let type, id; if (item.uid) { type = 'student'; @@ -328,15 +336,6 @@ export default { this.selectedcount = data.length; this.lastSelected = this.selected; this.$emit('update:selected', data); - - // set selected elements draggable - const tableEl = this.$refs.table?.$refs?.table; - if (tableEl) { - const oldDragables = tableEl.querySelectorAll('[draggable]'); - for (const draggable of oldDragables) - draggable.removeAttribute('draggable'); - } - rows.forEach(row => row.getElement().draggable = true); }, autoSelectRows(data) { if (this.lastSelected) { @@ -404,6 +403,7 @@ export default { this.$refs.table.tabulator.setData(endpoint.url, params, method); }, dragCleanup(evt) { + this.dragSource = []; if (evt.dataTransfer.dropEffect == 'none') return; // aborted or wrong target @@ -471,7 +471,16 @@ export default { if (el != this.focusObj) this.changeFocus(this.focusObj, el); } - } + }, + handleMouseDown(e, row) + { + let data = row.getData(); + let id = data.uid ?? data.prestudent_id ?? data.person_id; + + const isAlreadySelected = this.selected?.some(row => (row.uid ?? row.prestudent_id ?? row.person_id) === id); + + this.dragSource = (isAlreadySelected && this.selected?.length) ? this.selected : [data]; + }, }, // TODO(chris): focusin, focusout, keydown and tabindex should be in the filter component // TODO(chris): filter component column chooser has no accessibilty features