1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- function handleOriginRoute(route, idx, basePath) {
- const fullPath = basePath === null ? route.path : basePath + '/' + (route.path || 'index')
- const filePath = fullPath.replaceAll(/\/\:\w+/g, '')
- // basePath === null ? route.path : basePath + '/' + (route.path.replaceAll(/\/\:\w+/g, '') || 'index')
- const children = route?.children?.map((child, idy) => handleOriginRoute(child, idy, fullPath))
- const routeName = route.name ?? filePath.replaceAll('/', '-').toUpperCase()
- return ({
- path: route.path,
- name: routeName,
- props: /\/\:\w+/.test(basePath + '/' + route.path),
- meta: Object.assign({
- hidden: false,
- // ['tab', 'single'].includes(route?.plop?.type) || route?.children?.length === 1,
- breadcrumb: ['tab'].includes(route?.plop?.type),
- sort: idx,
- }, route.meta ?? null),
- plop: {
- ...route?.plop,
- filePath,
- fullPath,
- props: fullPath.match(/(?<=\/\:)\w+/g),
- routeName,
- children: children?.map(child => {
- const { name, meta: { title } } = child.redirect ? child.children.find(({ name }) => name === child.redirect.name) : child
- // ?.map(({ name, meta: { title } }) => ({ name, title }))
- return {
- name,
- title
- }
- }),
- template: route?.plop?.type ?? (route?.plop?.url ? 'index' : 'multi')
- },
- component: `___() => import('~/pages${filePath}.vue')___`,
- children,
- redirect: Array.isArray(children) ? ({ name: children[0].name }) : null
- })
- }
- export function origin2target(originRoutes) {
- const res = originRoutes.map((originRoute, idx) => handleOriginRoute(originRoute, idx, null))
- return res
- //[{ path: '/', redirect: res[0].path, meta: { hidden: true, sort: -1 } }].concat(res)
- }
|