changes to support studiensemester_kurz as part of the url

This commit is contained in:
Harald Bamberger
2025-08-01 12:22:27 +02:00
parent 247de82e81
commit 472fceaf62
4 changed files with 218 additions and 42 deletions
+110 -5
View File
@@ -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'
});
+76 -26
View File
@@ -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: `
<div class="stv">
@@ -231,7 +281,7 @@ export default {
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" :aria-label="$p.t('ui/schliessen')"></button>
</div>
<stv-verband @select-verband="onSelectVerband" class="col" style="height:0%"></stv-verband>
<stv-studiensemester :default="defaultSemester" @changed="studiensemesterChanged"></stv-studiensemester>
<stv-studiensemester v-model:studiensemester-kurzbz="studiensemesterKurzbz" @update:studiensemester-kurzbz="studiensemesterChanged"></stv-studiensemester>
</nav>
<main class="col-md-8 ms-sm-auto col-lg-9 col-xl-10">
<vertical-split>
@@ -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;
@@ -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);
},