mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-24 10:22:18 +00:00
284 lines
7.8 KiB
JavaScript
284 lines
7.8 KiB
JavaScript
import FhcDashboard from '../../components/Dashboard/Dashboard.js';
|
|
import LvPlan from "../../components/Cis/LvPlan/Lehrveranstaltung.js";
|
|
import MyLvPlan from "../../components/Cis/LvPlan/MyLvPlan.js";
|
|
import Mylv from "../../components/Cis/Mylv/MyLv.js";
|
|
import Profil from "../../components/Cis/Profil/Profil.js";
|
|
import Raumsuche from "../../components/Cis/Raumsuche/Raumsuche.js";
|
|
import CmsNews from "../../components/Cis/Cms/News.js";
|
|
import CmsContent from "../../components/Cis/Cms/Content.js";
|
|
import Info from "../../components/Cis/Mylv/Semester/Studiengang/Lv/Info.js";
|
|
import RoomInformation, {DEFAULT_MODE_RAUMINFO_DESKTOP, DEFAULT_MODE_RAUMINFO_MOBILE} from "../../components/Cis/Mylv/RoomInformation.js";
|
|
import AbgabetoolStudent from "../../components/Cis/Abgabetool/AbgabetoolStudent.js";
|
|
import AbgabetoolMitarbeiter from "../../components/Cis/Abgabetool/AbgabetoolMitarbeiter.js";
|
|
import AbgabetoolAssistenz from "../../components/Cis/Abgabetool/AbgabetoolAssistenz.js";
|
|
import DeadlineOverview from "../../components/Cis/Abgabetool/DeadlineOverview.js";
|
|
import Studium from "../../components/Cis/Studium/Studium.js";
|
|
import StgOrgLvPlan from "../../components/Cis/LvPlan/StgOrg.js";
|
|
import OtherLvPlan from "../../components/Cis/LvPlan/OtherLvPlan.js";
|
|
import PaabgabeUebersicht from "../../components/Cis/ProjektabgabeUebersicht/ProjektabgabeUebersicht.js";
|
|
import Benotungstool from "../../components/Cis/Benotungstool/Benotungstool.js";
|
|
import Zeitsperren from "../../components/Cis/Zeitsperren/Zeitsperren.js";
|
|
import Compat from "../../components/Cis/Compat.js";
|
|
|
|
const ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.*?\/)/g, '') + FHC_JS_DATA_STORAGE_OBJECT.ci_router;
|
|
const isMobile = window.matchMedia("(max-width: 767px)").matches;
|
|
|
|
const router = VueRouter.createRouter({
|
|
history: VueRouter.createWebHistory(`/${ciPath}`),
|
|
routes: [
|
|
{
|
|
path: `/Cis/Compat/:mode(ci|legacy)/:path(.*)`,
|
|
name: 'Compat',
|
|
component: Compat,
|
|
props: (route) => {
|
|
return {
|
|
mode: route.params.mode,
|
|
path: route.params.path,
|
|
query_string: VueRouter.stringifyQuery(route.query)
|
|
};
|
|
}
|
|
},
|
|
{
|
|
path: `/Cis/Studium`,
|
|
name: 'Studium',
|
|
component: Studium,
|
|
props: true
|
|
},
|
|
{
|
|
path: `/Cis/Profil/View/:uid`,
|
|
name: 'ProfilView',
|
|
component: Profil,
|
|
props: true
|
|
},
|
|
{
|
|
path: `/Cis/Profil`,
|
|
name: 'Profil',
|
|
component: Profil,
|
|
props: true
|
|
},
|
|
{
|
|
path: `/Cis/Abgabetool/Student/:student_uid_prop?`,
|
|
name: 'AbgabetoolStudent',
|
|
component: AbgabetoolStudent,
|
|
props: true
|
|
},
|
|
{
|
|
path: `/Cis/Abgabetool/Mitarbeiter`,
|
|
name: 'AbgabetoolMitarbeiter',
|
|
component: AbgabetoolMitarbeiter,
|
|
props: true
|
|
},
|
|
{
|
|
path: `/Cis/Abgabetool/Assistenz/:stg_kz_prop?`,
|
|
name: 'AbgabetoolAssistenz',
|
|
component: AbgabetoolAssistenz,
|
|
props: true
|
|
},
|
|
{
|
|
path: `/Cis/Abgabetool/Deadlines/:person_uid_prop?`,
|
|
name: 'DeadlineOverview',
|
|
component: DeadlineOverview,
|
|
props: true
|
|
},
|
|
{
|
|
path: `/Cis/Raumsuche`,
|
|
name: 'Raumsuche',
|
|
component: Raumsuche,
|
|
props: true
|
|
},
|
|
{
|
|
path: `/Cis/ProjektabgabeUebersicht`,
|
|
name: 'PaabgabeUebersicht',
|
|
component: PaabgabeUebersicht,
|
|
props: true
|
|
},
|
|
{
|
|
path: `/Cis/Benotungstool/:lv_id?/:sem_kurzbz?`,
|
|
name: 'Benotungstool',
|
|
component: Benotungstool,
|
|
props: true
|
|
},
|
|
// Redirect old links to new format
|
|
{
|
|
path: "/CisVue/Cms/getRoomInformation/:ort_kurzbz",
|
|
name: "RoomInformationOld",
|
|
component: RoomInformation,
|
|
redirect: (to) => {
|
|
return { // redirect to longer Rauminfo url and map params
|
|
name: "RoomInformation",
|
|
params: { // in this case always populate other params since they are not optional
|
|
ort_kurzbz: to.params.ort_kurzbz,
|
|
mode: isMobile ? DEFAULT_MODE_RAUMINFO_MOBILE : DEFAULT_MODE_RAUMINFO_DESKTOP,
|
|
focus_date: new Date().toISOString().split("T")[0]
|
|
},
|
|
};
|
|
},
|
|
},
|
|
{
|
|
path: `/CisVue/Cms/getRoomInformation/:mode/:focus_date/:ort_kurzbz`,
|
|
name: 'RoomInformation',
|
|
component: RoomInformation,
|
|
props: (route) => { // validate and set mode/focus date if for some reason missing
|
|
const validModes = ["Month", "Week", "Day"];
|
|
|
|
// check mode string
|
|
const mode = route.params.mode &&
|
|
validModes.includes(route.params.mode.charAt(0).toUpperCase() + route.params.mode.slice(1).toLowerCase())
|
|
? route.params.mode.charAt(0).toUpperCase() + route.params.mode.slice(1).toLowerCase()
|
|
: (isMobile ? DEFAULT_MODE_RAUMINFO_MOBILE : DEFAULT_MODE_RAUMINFO_DESKTOP);
|
|
|
|
// default to today date if not provided
|
|
const d = new Date(route.params.focus_date)
|
|
const focus_date = !isNaN(d) ? route.params.focus_date : new Date().toISOString().split("T")[0];
|
|
|
|
// for consistency reasons format the props into one object but actually use a new name to we dont collide with
|
|
// existing viewData declaration written from codeigniter 3 into routerview tag
|
|
return {
|
|
propsViewData: {
|
|
mode,
|
|
focus_date,
|
|
ort_kurzbz: route.params.ort_kurzbz
|
|
}
|
|
};
|
|
},
|
|
beforeEnter: (to, from, next) => {
|
|
// missing mode or focus_date -> set defaults
|
|
if (!to.params.mode || !to.params.focus_date) {
|
|
next({
|
|
name: "RoomInformation",
|
|
params: {
|
|
mode: to.params.mode || DEFAULT_MODE_RAUMINFO,
|
|
focus_date: to.params.focus_date || new Date().toISOString().split("T")[0],
|
|
ort_kurzbz: route.params.ort_kurzbz
|
|
}
|
|
});
|
|
} else {
|
|
next();
|
|
}
|
|
}
|
|
},
|
|
{
|
|
path: `/CisVue/Cms/Content/:content_id`,
|
|
name: 'Content',
|
|
component: CmsContent,
|
|
props: true
|
|
},
|
|
{
|
|
path: `/CisVue/Cms/News`,
|
|
name: 'News',
|
|
component: CmsNews,
|
|
props: true
|
|
},
|
|
{
|
|
path: `/Cis/MyLv/:studiensemester?`,
|
|
name: 'MyLv',
|
|
component: Mylv,
|
|
props: true,
|
|
},
|
|
{
|
|
path: `/Cis/MyLv/Info/:studien_semester/:lehrveranstaltung_id`,
|
|
name: 'LvInfo',
|
|
component: Info,
|
|
props: true
|
|
},
|
|
// Redirect old links to new format
|
|
{
|
|
// only trigger on first param being numeric to avoid paths like "LvPlan/Month" entering here
|
|
path: "/Cis/LvPlan/:lv_id(\\d+)",
|
|
name: "LvPlanOld",
|
|
component: LvPlan,
|
|
redirect(to) {
|
|
const route = Vue.unref(router.currentRoute);
|
|
const { mode, focus_date } = route.params; // keep mode and focus_date if available
|
|
return { // redirect to longer LvPlan url and map params
|
|
name: "LvPlan",
|
|
params: {
|
|
mode,
|
|
focus_date,
|
|
lv_id: to.params.lv_id
|
|
},
|
|
};
|
|
},
|
|
},
|
|
{
|
|
path: `/Cis/LvPlan/:mode?/:focus_date?/:lv_id?`,
|
|
name: 'LvPlan',
|
|
component: LvPlan,
|
|
props(route) {
|
|
return {
|
|
propsViewData: route.params
|
|
};
|
|
}
|
|
},
|
|
{
|
|
path: `/Cis/MyLvPlan/:mode?/:focus_date?`,
|
|
name: 'MyLvPlan',
|
|
component: MyLvPlan,
|
|
props(route) {
|
|
return {
|
|
propsViewData: route.params
|
|
};
|
|
}
|
|
},
|
|
{
|
|
path: `/Cis/StgOrgLvPlan/:mode?/:focus_date?/:stgkz?/:sem?/:verband?/:gruppe?`,
|
|
name: 'StgOrgLvPlan',
|
|
component: StgOrgLvPlan,
|
|
props(route) {
|
|
return {
|
|
propsViewData: route.params
|
|
};
|
|
}
|
|
},
|
|
{
|
|
path: `/Cis/OtherLvPlan/:otherUid/:mode?/:focus_date?`,
|
|
name: "OtherLvPlan",
|
|
component: OtherLvPlan,
|
|
props(route) {
|
|
return {
|
|
propsViewData: route.params
|
|
};
|
|
}
|
|
},
|
|
{
|
|
path: `/Cis4`,
|
|
name: 'Cis4',
|
|
component: FhcDashboard,
|
|
props: {dashboard: 'CIS'},
|
|
},
|
|
{
|
|
path: `/`,
|
|
name: 'FhcDashboard',
|
|
component: FhcDashboard,
|
|
props: {dashboard: 'CIS'},
|
|
},
|
|
/*
|
|
* TODO(ma0080): 2026-07-06: commented out => check if needed
|
|
*
|
|
{
|
|
path: '/:pathMatch(.*)*',
|
|
name: 'Fallback',
|
|
component: FhcDashboard,
|
|
props: {dashboard: 'CIS'},
|
|
redirect: () => {
|
|
return {
|
|
name: "Cis4",
|
|
params: {
|
|
dashboard: 'CIS'
|
|
},
|
|
};
|
|
},
|
|
},
|
|
*/
|
|
{
|
|
path: `/Cis/Zeitsperren`,
|
|
name: 'Zeitsperren',
|
|
component: Zeitsperren,
|
|
props: true
|
|
},
|
|
]
|
|
});
|
|
|
|
export {
|
|
router
|
|
} |