diff --git a/public/js/apps/Studentenverwaltung.js b/public/js/apps/Studentenverwaltung.js index bef605a10..a4dafc5bc 100644 --- a/public/js/apps/Studentenverwaltung.js +++ b/public/js/apps/Studentenverwaltung.js @@ -26,14 +26,119 @@ const ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.* const router = VueRouter.createRouter({ history: VueRouter.createWebHistory(), routes: [ - { path: `/${ciPath}/studentenverwaltung`, component: FhcStudentenverwaltung }, - { path: `/${ciPath}/studentenverwaltung/prestudent/:prestudent_id`, component: FhcStudentenverwaltung }, - { path: `/${ciPath}/studentenverwaltung/prestudent/:prestudent_id/:tab`, component: FhcStudentenverwaltung }, - { path: `/${ciPath}/studentenverwaltung/student/:id`, component: FhcStudentenverwaltung }, - { path: `/${ciPath}/studentenverwaltung/person/:person_id`, component: FhcStudentenverwaltung } + { + name: 'index', + path: `/${ciPath}/studentenverwaltung`, + component: FhcStudentenverwaltung + }, + { + name: 'studiensemester', + path: `/${ciPath}/studentenverwaltung/:studiensemester_kurzbz`, + component: FhcStudentenverwaltung, + props: (route) => { + return { + url_studiensemester_kurzbz: route.params.studiensemester_kurzbz + }; + }, + beforeEnter: (to, from, next) => { + const isSemester = /^[WS]S\d{4}$/.test(to.params.studiensemester_kurzbz); + if (!isSemester) { + return next({name: 'index'}); + } + next(); + } + }, + { + path: `/${ciPath}/studentenverwaltung/:studiensemester_kurzbz/prestudent/:prestudent_id`, + component: FhcStudentenverwaltung, + props: (route) => { + return { + url_studiensemester_kurzbz: route.params.studiensemester_kurzbz, + url_mode: 'prestudent', + url_prestudent_id: route.params.prestudent_id + }; + }, + beforeEnter: (to, from, next) => { + const isSemester = /^[WS]S\d{4}$/.test(to.params.studiensemester_kurzbz); + if (!isSemester) { + return next({name: 'index'}); + } + next(); + } + }, + { + path: `/${ciPath}/studentenverwaltung/:studiensemester_kurzbz/prestudent/:prestudent_id/:tab`, + component: FhcStudentenverwaltung, + props: (route) => { + return { + url_studiensemester_kurzbz: route.params.studiensemester_kurzbz, + url_mode: 'prestudent', + url_prestudent_id: route.params.prestudent_id, + url_tab: route.params.tab + }; + }, + beforeEnter: (to, from, next) => { + const isSemester = /^[WS]S\d{4}$/.test(to.params.studiensemester_kurzbz); + if (!isSemester) { + return next({name: 'index'}); + } + next(); + } + }, + { + path: `/${ciPath}/studentenverwaltung/:studiensemester_kurzbz/student/:id`, + component: FhcStudentenverwaltung, + props: (route) => { + return { + url_studiensemester_kurzbz: route.params.studiensemester_kurzbz, + url_mode: 'student', + url_student_id: route.params.id + }; + }, + beforeEnter: (to, from, next) => { + const isSemester = /^[WS]S\d{4}$/.test(to.params.studiensemester_kurzbz); + if (!isSemester) { + return next({name: 'index'}); + } + next(); + } + }, + { + path: `/${ciPath}/studentenverwaltung/:studiensemester_kurzbz/person/:person_id`, + component: FhcStudentenverwaltung, + props: (route) => { + return { + url_studiensemester_kurzbz: route.params.studiensemester_kurzbz, + url_mode: 'person', + url_prestudent_id: route.params.person_id + }; + }, + beforeEnter: (to, from, next) => { + const isSemester = /^[WS]S\d{4}$/.test(to.params.studiensemester_kurzbz); + if (!isSemester) { + return next({name: 'index'}); + } + next(); + } + }, + { + path: '/:pathMatch(.*)*', + redirect: { + name: 'index' + } + } ] }); +router.afterEach((to, from, failure) => { + console.log('vue router afterEach: ' + to.params.studiensemester_kurzbz); + if (to.params.studiensemester_kurzbz) { + document.title = to.params.studiensemester_kurzbz + ' - Studierendenverwaltung FH-Complete'; + } else { + document.title = 'Studierendenverwaltung FH-Complete'; + } +}); + const app = Vue.createApp({ name: 'StudentenverwaltungApp' }); diff --git a/public/js/components/Stv/Studentenverwaltung.js b/public/js/components/Stv/Studentenverwaltung.js index 34622f406..c6f271a50 100644 --- a/public/js/components/Stv/Studentenverwaltung.js +++ b/public/js/components/Stv/Studentenverwaltung.js @@ -85,9 +85,7 @@ export default { student: { defaultaction: { type: "link", - action: function(data) { - return FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/studentenverwaltung/student/' + data.uid; - } + action: this.buildStudentSearchResultLink }, childactions: [ ] @@ -95,9 +93,7 @@ export default { prestudent: { defaultaction: { type: "link", - action: function(data) { - return FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/studentenverwaltung/prestudent/' + data.prestudent_id; - } + action: this.buildPrestudentSearchResultLink }, childactions: [ ] @@ -113,20 +109,61 @@ export default { } } }, + watch: { + '$attrs.url_studiensemester_kurzbz': function (newVal, oldVal) { + if (newVal !== oldVal) { + this.studiensemesterKurzbz = newVal; + this.$refs.stvList.updateUrl(); + this.$refs.details.reload(); + } + }, + '$attrs.url_mode': function () { + this.handlePersonUrl(); + } + }, methods: { + buildPrestudentSearchResultLink(data) { + return FHC_JS_DATA_STORAGE_OBJECT.app_root + + FHC_JS_DATA_STORAGE_OBJECT.ci_router + + '/studentenverwaltung' + + '/' + this.studiensemesterKurzbz + + '/prestudent/' + + data.prestudent_id; + }, + buildStudentSearchResultLink(data) { + return FHC_JS_DATA_STORAGE_OBJECT.app_root + + FHC_JS_DATA_STORAGE_OBJECT.ci_router + + '/studentenverwaltung' + + '/' + this.studiensemesterKurzbz + + '/student/' + + data.uid; + }, onSelectVerband( {link, studiengang_kz}) { let urlpath = String(link); if (!urlpath.match(/\/prestudent/)) { - urlpath = this.studiensemesterKurzbz + '/' + urlpath; + urlpath = 'CURRENT_SEMESTER' + '/' + urlpath; } this.studiengangKz = studiengang_kz; this.$refs.stvList.updateUrl( ApiStv.students.verband(urlpath) - ); + ); + this.$router.push({ + name: 'studiensemester', + params: { + studiensemester_kurzbz: this.studiensemesterKurzbz + } + }); }, studiensemesterChanged(v) { this.studiensemesterKurzbz = v; + + this.$router.push({ + params: { + studiensemester_kurzbz: v + } + }); + this.$refs.stvList.updateUrl(); this.$refs.details.reload(); }, @@ -135,9 +172,38 @@ export default { }, searchfunction(params) { return this.$api.call(ApiSearchbar.search(params)); + }, + handlePersonUrl() { + if (this.$route.params.id) { + this.$refs.stvList.updateUrl( + ApiStv.students.uid(this.$route.params.id, 'CURRENT_SEMESTER'), + true + ); + } else if (this.$route.params.prestudent_id) { + this.$refs.stvList.updateUrl( + ApiStv.students.prestudent(this.$route.params.prestudent_id, 'CURRENT_SEMESTER'), + true + ); + } else if (this.$route.params.person_id) { + this.$refs.stvList.updateUrl( + ApiStv.students.person(this.$route.params.person_id, 'CURRENT_SEMESTER'), + true + ); + } } }, created() { + if (!this.$attrs?.url_studiensemester_kurzbz) { + this.$router.replace({ + name: 'studiensemester', + params: { + studiensemester_kurzbz: this.defaultSemester + } + }); + } else { + this.studiensemesterKurzbz = this.$attrs.url_studiensemester_kurzbz; + } + this.$api .call(ApiStv.kontakt.address.getNations()) .then(result => { @@ -199,23 +265,7 @@ export default { mounted() { //Test manu Systemerror //FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto = 'ma0068@technikum-wien.at';this.$fhcAlert.handleSystemError(1); - if (this.$route.params.id) { - this.$refs.stvList.updateUrl( - ApiStv.students.uid(this.$route.params.id, this.studiensemesterKurzbz), - true - ); - } else if (this.$route.params.prestudent_id) { - this.$refs.stvList.updateUrl( - ApiStv.students.prestudent(this.$route.params.prestudent_id, this.studiensemesterKurzbz), - true - ); - } else if (this.$route.params.person_id) { - this.$refs.stvList.updateUrl( - ApiStv.students.person(this.$route.params.person_id, this.studiensemesterKurzbz), - true - ); - } - + this.handlePersonUrl(); }, template: `
@@ -231,7 +281,7 @@ export default {
- +
diff --git a/public/js/components/Stv/Studentenverwaltung/List.js b/public/js/components/Stv/Studentenverwaltung/List.js index c5f7a07c0..5de57bf77 100644 --- a/public/js/components/Stv/Studentenverwaltung/List.js +++ b/public/js/components/Stv/Studentenverwaltung/List.js @@ -8,9 +8,16 @@ export default { CoreFilterCmpt, ListNew }, - inject: [ - 'lists' - ], + inject: { + 'lists': { + from: 'lists', + required: true + }, + currentSemester: { + from: 'currentSemester', + required: true + } + }, props: { selected: Array, studiengangKz: Number, @@ -155,7 +162,8 @@ export default { filterKontoMissingCounter: undefined, count: 0, filteredcount: 0, - selectedcount: 0 + selectedcount: 0, + currentEndpointRawUrl: '' } }, methods: { @@ -192,13 +200,21 @@ export default { if( endpoint === undefined ) { - endpoint = { url: '' }; + endpoint = {url: this.currentEndpointRawUrl}; } else if( endpoint.url === undefined ) { - endpoint.url = ''; + endpoint.url = this.currentEndpointRawUrl; + } else + { + this.currentEndpointRawUrl = endpoint.url; } + endpoint.url = endpoint.url.replace( + 'CURRENT_SEMESTER', + encodeURIComponent(this.currentSemester) + ); + const params = {}, filter = {}; if (this.filterKontoCount0) filter.konto_count_0 = this.filterKontoCount0; diff --git a/public/js/components/Stv/Studentenverwaltung/Studiensemester.js b/public/js/components/Stv/Studentenverwaltung/Studiensemester.js index c52d584fd..32b0a831d 100644 --- a/public/js/components/Stv/Studentenverwaltung/Studiensemester.js +++ b/public/js/components/Stv/Studentenverwaltung/Studiensemester.js @@ -2,12 +2,12 @@ import {CoreRESTClient} from '../../../RESTClient.js'; export default { emits: [ - 'changed' + 'update:studiensemesterKurzbz' ], props: { - default: { + studiensemesterKurzbz: { type: String, - default: '' + required: true } }, data() { @@ -68,7 +68,7 @@ export default { }) .then(() => { this.loading = false; - this.$emit('changed', this.list[this.current]); + this.$emit('update:studiensemesterKurzbz', this.list[this.current]); }) .catch(error => { this.current = fallback; @@ -77,6 +77,11 @@ export default { }); } }, + watch: { + 'studiensemesterKurzbz': function () { + this.current = this.list.indexOf(this.studiensemesterKurzbz); + } + }, created() { CoreRESTClient .get('components/stv/studiensemester') @@ -84,7 +89,7 @@ export default { .then(result => { this.list = result.map(el => el.studiensemester_kurzbz); this.loading = false; - this.current = this.list.indexOf(this.default); + this.current = this.list.indexOf(this.studiensemesterKurzbz); }) .catch(this.$fhcAlert.handleSystemError); },