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: `