jcloud/dashboard_backup/src2/objects/generateRoutes.js
2025-12-28 00:20:10 +08:00

72 lines
1.8 KiB
JavaScript

import objects from './index.js';
export default function generateRoutes() {
let routes = [];
for (let objectType in objects) {
let object = objects[objectType];
if (object.list) {
let routeName = `${object.pagetype} List`;
object.list.routeName = routeName;
routes.push({
name: routeName,
path: object.list.route,
component: () => import('../pages/ListPage.vue'),
props: route => {
return { objectType, ...route.params };
}
});
}
if (object.detail) {
let children = object.detail.tabs.map(tab => {
const routeName = `${object.pagetype} Detail ${tab.label}`;
tab.routeName = routeName;
const nestedChildren = [];
// nested children shouldn't be added to the main children array
for (let route of tab.nestedChildrenRoutes || []) {
nestedChildren.push({
...route,
props: route => {
return { objectType, ...route.params };
}
});
}
return {
name: routeName,
path: tab.route,
component: () => import('../pages/DetailTab.vue'),
props: route => {
return { ...route.params };
},
redirect: nestedChildren.length ? { name: tab.redirectTo } : null,
children: nestedChildren
};
});
if (object.routes) {
for (let route of object.routes) {
children.push({
...route,
props: route => {
return { objectType, ...route.params };
}
});
}
}
object.detail.routeName = `${object.pagetype} Detail`;
routes.push({
name: object.detail.routeName,
path: object.detail.route,
component: () => import('../pages/DetailPage.vue'),
props: route => {
return { objectType, ...route.params };
},
redirect: children.length ? { name: children[0].name } : null,
children
});
}
}
return routes;
}