Files
2025-10-09 08:46:09 +02:00

96 lines
2.8 KiB
JavaScript

import PluginsPhrasen from '../../plugins/Phrasen.js';
import {setScrollbarWidth} from "../../helpers/CssVarCalcHelpers.js";
const app = Vue.createApp({
name: 'DocumentsApp',
data() {
return {
inscriptiontable: null,
inscriptiontableFilters: {},
studienerfolgsbestaetigungtable: null,
studienerfolgsbestaetigungtableFilters: {},
abschlussdokumentetable: null
};
},
computed: {
inscriptiontableFilter() {
const filter = [];
for (var k in this.inscriptiontableFilters)
if (this.inscriptiontableFilters[k])
filter.push({
field: k,
type: '=',
value: this.inscriptiontableFilters[k]
});
return filter;
},
inscriptiontableEmpty() {
// NOTE(chris): empty result on filter
if (this.inscriptiontableFilters.Stsem)
return this.$p.t('tools', 'studienbeitragFuerSSNochNichtBezahlt', {stsem: this.inscriptiontableFilters.Stsem});
if (this.inscriptiontableFilters.Stg)
return this.$p.t('tools', 'studienbeitragFuerStgNochNichtBezahlt', {stsem: this.inscriptiontableFilters.Stg});
return this.$p.t('tools', 'studienbeitragNochNichtBezahlt');
},
studienerfolgsbestaetigungtableFilter() {
const filter = [];
for (var k in this.studienerfolgsbestaetigungtableFilters)
if (this.studienerfolgsbestaetigungtableFilters[k])
filter.push({
field: k,
type: '=',
value: this.studienerfolgsbestaetigungtableFilters[k]
});
return filter;
}
},
methods: {
changeFilter(table, field, evt) {
this[table + 'Filters'][field] = evt.target.value;
this[table].clearFilter();
if (this[table + 'Filter'].length)
this[table].setFilter(this[table + 'Filter']);
}
},
mounted() {
this.inscriptiontable = new Tabulator(this.$refs.inscriptiontable, {
layout: 'fitDataStretch',
placeholder: this.$p.t('tools', 'studienbeitragNochNichtBezahlt')
});
this.studienerfolgsbestaetigungtable = new Tabulator(this.$refs.studienerfolgsbestaetigungtable, {
layout: 'fitDataStretch'
});
this.abschlussdokumentetable = new Tabulator(this.$refs.abschlussdokumentetable, {
layout: 'fitDataStretch',
placeholder: this.$p.t('tools', 'nochKeineAbschlussdokumenteVorhanden')
});
// NOTE(chris): empty result on filter
const div = Vue.h(
'div',
{
class: 'position-absolute top-0 left-0 w-100 h-100 d-flex justify-content-center align-items-center fw-bold text-muted'
},
[
this.inscriptiontableEmpty
]
);
this.inscriptiontable.on('dataSorted', (sorters, rows) => {
if (!rows.length) {
div.children = [this.inscriptiontableEmpty];
Vue.render(div, this.inscriptiontable.element.querySelector('.tabulator-tableholder'));
} else {
Vue.render(null, this.inscriptiontable.element.querySelector('.tabulator-tableholder'));
}
});
}
});
FhcApps.makeExtendable(app);
setScrollbarWidth();
app.use(PluginsPhrasen);
app.mount('#content');