Studverwaltung: refactor from Tabulator5 to 6, reformat some date entries

This commit is contained in:
ma0068
2026-02-06 13:18:09 +01:00
parent 1cd332115b
commit e13a7069dc
18 changed files with 180 additions and 86 deletions
+1 -1
View File
@@ -7,7 +7,7 @@
'vue3' => true,
'primevue3' => true,
#'filtercomponent' => true,
'tabulator5' => true,
'tabulator6' => true,
'tinymce5' => true,
'phrases' => array(
'global',
@@ -64,6 +64,7 @@ export default {
),
ajaxResponse: (url, params, response) => response.data,
persistenceID: 'core-betriebsmittel',
selectableRows: true,
columns: [
{title: "Nummer", field: "nummer", width: 150},
{title: "PersonId", field: "person_id", visible: false},
@@ -30,8 +30,6 @@ export default {
personId: null,
layoutColumnsOnNewData: false,
height: '400',
selectable: 1,
selectableRangeMode: 'click',
}
},
methods: {
@@ -131,6 +129,8 @@ export default {
layout: 'fitDataStretchFrozen',
index: 'message_id',
persistenceID: 'core-message-2025112401',
selectableRows: 1,
selectableRowsRangeMode: 'click',
columns: [
{title: "subject", field: "subject", headerFilter: true},
{title: "body", field: "body", formatter: "html", visible: false, headerFilter: true},
@@ -54,6 +54,7 @@ export default {
height: '500',
index: 'anrechnung_id',
persistenceID: 'stv-details-anrechnungen-2025112401',
selectableRows: true,
columns: [
{title: "anrechnung_id", field: "anrechnung_id", visible: false},
{title: "lehrveranstaltung_id", field: "lehrveranstaltung_id", visible: false},
@@ -96,7 +96,19 @@ export default {
{title: "Akte Id", field: "akte_id", visible: false},
{title: this.$p.t('stv', 'archiv_title'), field: "titel"},
{title: this.$p.t('stv', 'archiv_description'), field: "bezeichnung"},
{title: this.$p.t('stv', 'archiv_creation_date'), field: "erstelltam"},
{title: this.$p.t('stv', 'archiv_creation_date'), field: "erstelltam",
formatter: function (cell) {
const dateStr = cell.getValue();
if (!dateStr) return "";
const date = new Date(dateStr);
return date.toLocaleString("de-DE", {
day: "2-digit",
month: "2-digit",
year: "numeric",
hour12: false
});
}},
{
title: this.$p.t('stv', 'archiv_signiert'),
field: "signiert",
@@ -117,7 +129,22 @@ export default {
crossElement: '<i class="fa fa-xmark text-danger"></i>'
},
},
{title: this.$p.t('stv', 'archiv_accepted_on_at'), field: "akzeptiertamum"},
{title: this.$p.t('stv', 'archiv_accepted_on_at'), field: "akzeptiertamum",
formatter: function (cell) {
const dateStr = cell.getValue();
if (!dateStr) return "";
const date = new Date(dateStr);
return date.toLocaleString("de-DE", {
day: "2-digit",
month: "2-digit",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
hour12: false
});
}},
{
title: this.$p.t('stv', 'archiv_gedruckt'),
field: "gedruckt",
@@ -20,7 +20,6 @@ export default {
listDocuments: [],
layoutColumnsOnNewData: false,
height: 300,
selectable: true,
}
},
computed: {
@@ -37,7 +36,8 @@ export default {
},
layout: 'fitDataStretchFrozen',
index: 'akte_id',
selectableRangeMode: 'click',
selectableRows: true,
selectableRowsRangeMode: 'click',
persistenceID: 'stv-details-accepted-2026020401',
columns: [
{title: "akte_id", field: "akte_id", visible: false},
@@ -19,8 +19,6 @@ export default {
return {
layoutColumnsOnNewData: false,
height: 300,
selectable: true,
selectableRangeMode: 'click',
listDocuments: [],
prestudentDocumentData: [],
}
@@ -35,8 +33,10 @@ export default {
studiengang_kz: this.studiengang_kz})
),
ajaxResponse: (url, params, response) => response.data,
persistenceID: 'stv-details-unaccepted-2026020401',
layout: 'fitDataStretchFrozen',
persistenceID: 'stv-details-unaccepted-2026020401',
selectableRows: true,
selectableRowsRangeMode: 'click',
columns: [
{title: "Dokument", field: "bezeichnung"},
{title: "Kurzbz", field: "dokument_kurzbz", visible: false},
@@ -135,48 +135,6 @@ export default {
},
tabulatorEvents() {
const events = [
/* {
event: 'tableBuilt',
handler: async() => {
await this.$p.loadCategory(['notiz','global','person']);
let cm = this.$refs.table.tabulator.columnManager;
cm.getColumnByField('kontakttypbeschreibung').component.updateDefinition({
title: this.$p.t('global', 'typ')
});
cm.getColumnByField('kontakt').component.updateDefinition({
title: this.$p.t('global', 'kontakt')
});
cm.getColumnByField('zustellung').component.updateDefinition({
title: this.$p.t('person', 'zustellung')
});
cm.getColumnByField('anmerkung').component.updateDefinition({
title: this.$p.t('global', 'anmerkung')
});
cm.getColumnByField('lastupdate').component.updateDefinition({
title: this.$p.t('notiz', 'letzte_aenderung')
});
cm.getColumnByField('name').component.updateDefinition({
title: this.$p.t('person', 'firma')
});
cm.getColumnByField('bezeichnung').component.updateDefinition({
title: this.$p.t('person', 'standort')
});
cm.getColumnByField('firma_id').component.updateDefinition({
title: this.$p.t('ui', 'firma_id')
});
cm.getColumnByField('kontakt_id').component.updateDefinition({
title: this.$p.t('ui', 'kontakt_id')
});
cm.getColumnByField('person_id').component.updateDefinition({
title: this.$p.t('person', 'person_id')
});
cm.getColumnByField('standort_id').component.updateDefinition({
title: this.$p.t('ui', 'standort_id')
});
}
}, */
{
event: 'tableBuilt',
handler: async() => {
@@ -127,8 +127,8 @@ export default {
ajaxResponse: (url, params, response) => response.data,
dataTree: true,
columns: this.tabulatorColumns,
selectable: true,
selectableRangeMode: 'click',
selectableRows: true,
selectableRowsRangeMode: 'click',
index: 'buchungsnr',
persistenceID: 'stv-details-konto'
};
@@ -39,8 +39,38 @@ export default {
{ field: 'lv_bezeichnung', title: this.$p.t('lehre/lehrveranstaltung') },
{ field: 'note_bezeichnung', title: this.$p.t('lehre/note') },
{ field: 'insertvon', title: this.$p.t('profil/mitarbeiterIn'), visible: false },
{ field: 'benotungsdatum', title: this.$p.t('stv/grades_gradingdate'), visible: false },
{ field: 'freigabedatum', title: this.$p.t('stv/grades_approvaldate'), visible: false },
{ field: 'benotungsdatum', title: this.$p.t('stv/grades_gradingdate'), visible: false,
formatter: function (cell) {
const dateStr = cell.getValue();
if (!dateStr) return "";
const date = new Date(dateStr);
return date.toLocaleString("de-DE", {
day: "2-digit",
month: "2-digit",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
hour12: false
});
}},
{ field: 'freigabedatum', title: this.$p.t('stv/grades_approvaldate'), visible: false,
formatter: function (cell) {
const dateStr = cell.getValue();
if (!dateStr) return "";
const date = new Date(dateStr);
return date.toLocaleString("de-DE", {
day: "2-digit",
month: "2-digit",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
hour12: false
});
}},
{ field: 'studiensemester_kurzbz', title: this.$p.t('lehre/studiensemester'), visible: false },
{ field: 'stg_bezeichnung', title: this.$p.t('lehre/studiengang'), visible: false },
{ field: 'note', title: this.$p.t('stv/grades_numericgrade'), visible: false },
@@ -49,8 +79,8 @@ export default {
],
layout: 'fitDataStretch',
height: '100%',
selectable: true,
selectableRangeMode: 'click',
selectableRows: true,
selectableRowsRangeMode: 'click',
persistenceID: 'stv-details-noten-repeater'
};
}
@@ -39,8 +39,38 @@ export default {
{ field: 'lehrveranstaltung_bezeichnung', title: this.$p.t('lehre/lehrveranstaltung') },
{ field: 'note_bezeichnung', title: this.$p.t('lehre/note') },
{ field: 'mitarbeiter_uid', title: this.$p.t('profil/mitarbeiterIn'), visible: false },
{ field: 'benotungsdatum', title: this.$p.t('stv/grades_gradingdate'), visible: false },
{ field: 'freigabedatum', title: this.$p.t('stv/grades_approvaldate'), visible: false },
{ field: 'benotungsdatum', title: this.$p.t('stv/grades_gradingdate'), visible: false,
formatter: function (cell) {
const dateStr = cell.getValue();
if (!dateStr) return "";
const date = new Date(dateStr);
return date.toLocaleString("de-DE", {
day: "2-digit",
month: "2-digit",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
hour12: false
});
}},
{ field: 'freigabedatum', title: this.$p.t('stv/grades_approvaldate'), visible: false,
formatter: function (cell) {
const dateStr = cell.getValue();
if (!dateStr) return "";
const date = new Date(dateStr);
return date.toLocaleString("de-DE", {
day: "2-digit",
month: "2-digit",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
hour12: false
});
}},
{ field: 'studiensemester_kurzbz', title: this.$p.t('lehre/studiensemester'), visible: false },
{ field: 'note', title: this.$p.t('stv/grades_numericgrade'), visible: false },
{ field: 'student_uid', title: this.$p.t('profil/studentIn'), visible: false },
@@ -49,8 +79,8 @@ export default {
],
layout: 'fitDataStretch',
height: '100%',
selectable: true,
selectableRangeMode: 'click',
selectableRows: true,
selectableRowsRangeMode: 'click',
persistenceID: 'stv-details-noten-teacher'
};
}
@@ -148,8 +148,38 @@ export default {
{ field: 'zeugnis', title: this.$p.t('stv/grades_zeugnis'), formatter: 'tickCross' },
{ field: 'lehrveranstaltung_bezeichnung', title: this.$p.t('lehre/lehrveranstaltung') },
gradeField,
{ field: 'uebernahmedatum', title: this.$p.t('stv/grades_takeoverdate'), visible: false },
{ field: 'benotungsdatum', title: this.$p.t('stv/grades_gradingdate'), visible: false },
{ field: 'uebernahmedatum', title: this.$p.t('stv/grades_takeoverdate'), visible: false,
formatter: function (cell) {
const dateStr = cell.getValue();
if (!dateStr) return "";
const date = new Date(dateStr);
return date.toLocaleString("de-DE", {
day: "2-digit",
month: "2-digit",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
hour12: false
});
}},
{ field: 'benotungsdatum', title: this.$p.t('stv/grades_gradingdate'), visible: false,
formatter: function (cell) {
const dateStr = cell.getValue();
if (!dateStr) return "";
const date = new Date(dateStr);
return date.toLocaleString("de-DE", {
day: "2-digit",
month: "2-digit",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
hour12: false
});
}},
{ field: 'studiensemester_kurzbz', title: this.$p.t('lehre/studiensemester'), visible: false },
{ field: 'note_number', title: this.$p.t('stv/grades_numericgrade'), visible: false, formatter: cell => cell.getData().note, tooltip: (evt, cell) => cell.getData().note },
{ field: 'lehrveranstaltung_id', title: this.$p.t('lehre/lehrveranstaltung_id'), visible: false },
@@ -218,8 +248,8 @@ export default {
columns,
height: '100%',
layout: 'fitDataStretchFrozen',
selectable: 1,
selectableRangeMode: 'click',
selectableRows: 1,
selectableRowsRangeMode: 'click',
persistenceID: 'stv-details-noten-zeugnis-2025112401',
persistence:{
columns: ["width", "visible", "frozen"]
@@ -15,7 +15,7 @@ export default{
layout: 'fitDataFill',
layoutColumnsOnNewData: false,
height: 'auto',
selectable: false
selectableRows: false
}
},
computed: {
@@ -25,7 +25,7 @@ export default{
ajaxRequestFunc: () => this.$api.call(ApiStvPrestudent.getHistoryPrestudents(this.personId)),
ajaxResponse: (url, params, response) => response.data,
//autoColumns: true,
persistenceID: 'stv-details-prestudent-history',
persistenceID: 'stv-details-prestudent-history-20260204',
columns:[
{title:"StSem", field:"studiensemester_kurzbz"},
{title:"Prio", field:"priorisierung"},
@@ -56,19 +56,23 @@ export default{
handler: async () => {
await this.$p.loadCategory(['lehre']);
let cm = this.$refs.table.tabulator.columnManager;
const setHeader = (field, text) => {
const col = this.$refs.table.tabulator.getColumn(field);
if (!col) return;
cm.getColumnByField('orgform_kurzbz').component.updateDefinition({
title: this.$p.t('lehre', 'organisationsform')
});
const el = col.getElement();
if (!el || !el.querySelector) return;
cm.getColumnByField('bezeichnung').component.updateDefinition({
title: this.$p.t('lehre', 'studienplan')
});
const titleEl = el.querySelector('.tabulator-col-title');
if (titleEl) {
titleEl.textContent = text;
}
};
setHeader('orgform_kurzbz', this.$p.t('lehre', 'organisationsform'));
setHeader('bezeichnung', this.$p.t('lehre', 'studienplan'));
setHeader('prestudent_id', this.$p.t('ui', 'prestudent_id'));
cm.getColumnByField('prestudent_id').component.updateDefinition({
title: this.$p.t('ui', 'prestudent_id')
});
}
}
];
@@ -208,7 +208,7 @@ export default{
layout: 'fitDataStretchFrozen',
layoutColumnsOnNewData: false,
height: 'auto',
selectable: false,
selectableRows: false,
index: 'statusId',
persistenceID: 'stv-multistatus-2025112401'
};
@@ -260,7 +260,7 @@ export default {
layout: 'fitDataStretchFrozen',
height: 'auto',
minHeight: '200',
selectable: 1,
selectableRows: 1,
index: 'projektarbeit_id',
persistence:{
columns: true, //persist column layout
@@ -120,8 +120,8 @@ export default {
layoutColumnsOnNewData: false,
height: 'auto',
minHeight: '100',
selectable: true,
selectable: 1,
selectableRows: true,
selectableRows: 1,
index: 'betreuer_id',
persistence:{
columns: true, //persist column layout
@@ -64,8 +64,21 @@ export default{
group: false,
page: false
},
selectableRows: true,
columns: [
{title: "Datum", field: "format_datum"},
{title: "Datum", field: "datum",
formatter: function (cell) {
const dateStr = cell.getValue();
if (!dateStr) return "";
const date = new Date(dateStr);
return date.toLocaleString("de-DE", {
day: "2-digit",
month: "2-digit",
year: "numeric",
hour12: false
});
}},
{title: "Lehrveranstaltung", field: "lehrveranstaltung_bezeichnung"},
{title: "Note", field: "note_bezeichnung"},
{title: "Anmerkung", field: "anmerkung"},
@@ -141,7 +154,7 @@ export default{
}
};
setHeader('format_datum', this.$p.t('global', 'datum'));
setHeader('datum', this.$p.t('global', 'datum'));
setHeader('lehrveranstaltung_bezeichnung', this.$p.t('lehre', 'lehrveranstaltung'));
setHeader('note_bezeichnung', this.$p.t('lehre', 'note'));
setHeader('anmerkung', this.$p.t('global', 'anmerkung'));
@@ -173,8 +173,8 @@ export default {
layout: 'fitDataStretch',
layoutColumnsOnNewData: false,
height: '100%',
selectable: true,
selectableRangeMode: 'click',
selectableRows: true,
selectableRowsRangeMode: 'click',
index: 'prestudent_id',
persistenceID: 'stv-list',
},