perf: 路由重构
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
// Read more: https://github.com/soybeanjs/elegant-router
|
// Read more: https://github.com/soybeanjs/elegant-router
|
||||||
|
|
||||||
import type { RouteComponent } from "vue-router";
|
import type { RouteComponent } from "vue-router";
|
||||||
import type { LastLevelRouteKey, RouteLayout } from "@elegant-router/types";
|
import type { RouteLayout } from "@elegant-router/types";
|
||||||
|
|
||||||
import BaseLayout from "@/layouts/base-layout/index.vue";
|
import BaseLayout from "@/layouts/base-layout/index.vue";
|
||||||
import BlankLayout from "@/layouts/blank-layout/index.vue";
|
import BlankLayout from "@/layouts/blank-layout/index.vue";
|
||||||
@@ -13,29 +13,3 @@ export const layouts: Record<RouteLayout, RouteComponent | (() => Promise<RouteC
|
|||||||
base: BaseLayout,
|
base: BaseLayout,
|
||||||
blank: BlankLayout,
|
blank: BlankLayout,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const views: Record<LastLevelRouteKey, RouteComponent | (() => Promise<RouteComponent>)> = {
|
|
||||||
403: () => import("@/views/_builtin/403/index.vue"),
|
|
||||||
404: () => import("@/views/_builtin/404/index.vue"),
|
|
||||||
500: () => import("@/views/_builtin/500/index.vue"),
|
|
||||||
login: () => import("@/views/_builtin/login/index.vue"),
|
|
||||||
about: () => import("@/views/about/index.vue"),
|
|
||||||
"function_hide-child_one": () => import("@/views/function/hide-child/one/index.vue"),
|
|
||||||
"function_hide-child_three": () => import("@/views/function/hide-child/three/index.vue"),
|
|
||||||
"function_hide-child_two": () => import("@/views/function/hide-child/two/index.vue"),
|
|
||||||
"function_multi-tab": () => import("@/views/function/multi-tab/index.vue"),
|
|
||||||
function_request: () => import("@/views/function/request/index.vue"),
|
|
||||||
"function_super-page": () => import("@/views/function/super-page/index.vue"),
|
|
||||||
function_tab: () => import("@/views/function/tab/index.vue"),
|
|
||||||
"function_toggle-auth": () => import("@/views/function/toggle-auth/index.vue"),
|
|
||||||
home: () => import("@/views/home/index.vue"),
|
|
||||||
manage_dept: () => import("@/views/manage/dept/index.vue"),
|
|
||||||
manage_dict: () => import("@/views/manage/dict/index.vue"),
|
|
||||||
manage_menu: () => import("@/views/manage/menu/index.vue"),
|
|
||||||
manage_post: () => import("@/views/manage/post/index.vue"),
|
|
||||||
manage_role: () => import("@/views/manage/role/index.vue"),
|
|
||||||
manage_route: () => import("@/views/manage/route/index.vue"),
|
|
||||||
"manage_user-detail": () => import("@/views/manage/user-detail/[id].vue"),
|
|
||||||
manage_user: () => import("@/views/manage/user/index.vue"),
|
|
||||||
"user-center": () => import("@/views/user-center/index.vue"),
|
|
||||||
};
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ export const generatedRoutes: GeneratedRoute[] = [
|
|||||||
{
|
{
|
||||||
name: '403',
|
name: '403',
|
||||||
path: '/403',
|
path: '/403',
|
||||||
component: 'layout.blank$view.403',
|
component: 'layout.blank$view._builtin_403',
|
||||||
meta: {
|
meta: {
|
||||||
title: '403',
|
title: '403',
|
||||||
i18nKey: 'route.403',
|
i18nKey: 'route.403',
|
||||||
@@ -20,7 +20,7 @@ export const generatedRoutes: GeneratedRoute[] = [
|
|||||||
{
|
{
|
||||||
name: '404',
|
name: '404',
|
||||||
path: '/404',
|
path: '/404',
|
||||||
component: 'layout.blank$view.404',
|
component: 'layout.blank$view._builtin_404',
|
||||||
meta: {
|
meta: {
|
||||||
title: '404',
|
title: '404',
|
||||||
i18nKey: 'route.404',
|
i18nKey: 'route.404',
|
||||||
@@ -31,7 +31,7 @@ export const generatedRoutes: GeneratedRoute[] = [
|
|||||||
{
|
{
|
||||||
name: '500',
|
name: '500',
|
||||||
path: '/500',
|
path: '/500',
|
||||||
component: 'layout.blank$view.500',
|
component: 'layout.blank$view._builtin_500',
|
||||||
meta: {
|
meta: {
|
||||||
title: '500',
|
title: '500',
|
||||||
i18nKey: 'route.500',
|
i18nKey: 'route.500',
|
||||||
@@ -42,7 +42,7 @@ export const generatedRoutes: GeneratedRoute[] = [
|
|||||||
{
|
{
|
||||||
name: 'about',
|
name: 'about',
|
||||||
path: '/about',
|
path: '/about',
|
||||||
component: 'layout.base$view.about',
|
component: 'layout.base$view._builtin_about',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'about',
|
title: 'about',
|
||||||
i18nKey: 'route.about',
|
i18nKey: 'route.about',
|
||||||
@@ -171,7 +171,7 @@ export const generatedRoutes: GeneratedRoute[] = [
|
|||||||
{
|
{
|
||||||
name: 'home',
|
name: 'home',
|
||||||
path: '/home',
|
path: '/home',
|
||||||
component: 'layout.base$view.home',
|
component: 'layout.base$view._builtin_home',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'home',
|
title: 'home',
|
||||||
i18nKey: 'route.home',
|
i18nKey: 'route.home',
|
||||||
@@ -182,7 +182,7 @@ export const generatedRoutes: GeneratedRoute[] = [
|
|||||||
{
|
{
|
||||||
name: 'login',
|
name: 'login',
|
||||||
path: '/login/:module(pwd-login|code-login|register|reset-pwd|bind-wechat)?',
|
path: '/login/:module(pwd-login|code-login|register|reset-pwd|bind-wechat)?',
|
||||||
component: 'layout.blank$view.login',
|
component: 'layout.blank$view._builtin_login',
|
||||||
props: true,
|
props: true,
|
||||||
meta: {
|
meta: {
|
||||||
title: 'login',
|
title: 'login',
|
||||||
@@ -191,106 +191,6 @@ export const generatedRoutes: GeneratedRoute[] = [
|
|||||||
hideInMenu: true
|
hideInMenu: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: 'manage',
|
|
||||||
path: '/manage',
|
|
||||||
component: 'layout.base',
|
|
||||||
meta: {
|
|
||||||
title: 'manage',
|
|
||||||
i18nKey: 'route.manage',
|
|
||||||
icon: 'carbon:cloud-service-management',
|
|
||||||
order: 9,
|
|
||||||
roles: ['R_ADMIN']
|
|
||||||
},
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
name: 'manage_dept',
|
|
||||||
path: '/manage/dept',
|
|
||||||
component: 'view.manage_dept',
|
|
||||||
meta: {
|
|
||||||
title: 'manage_dept',
|
|
||||||
i18nKey: 'route.manage_dept'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'manage_dict',
|
|
||||||
path: '/manage/dict',
|
|
||||||
component: 'view.manage_dict',
|
|
||||||
meta: {
|
|
||||||
title: 'manage_dict',
|
|
||||||
i18nKey: 'route.manage_dict'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'manage_menu',
|
|
||||||
path: '/manage/menu',
|
|
||||||
component: 'view.manage_menu',
|
|
||||||
meta: {
|
|
||||||
title: 'manage_menu',
|
|
||||||
i18nKey: 'route.manage_menu',
|
|
||||||
icon: 'material-symbols:route',
|
|
||||||
order: 3,
|
|
||||||
roles: ['R_ADMIN'],
|
|
||||||
keepAlive: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'manage_post',
|
|
||||||
path: '/manage/post',
|
|
||||||
component: 'view.manage_post',
|
|
||||||
meta: {
|
|
||||||
title: 'manage_post',
|
|
||||||
i18nKey: 'route.manage_post'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'manage_role',
|
|
||||||
path: '/manage/role',
|
|
||||||
component: 'view.manage_role',
|
|
||||||
meta: {
|
|
||||||
title: 'manage_role',
|
|
||||||
i18nKey: 'route.manage_role',
|
|
||||||
icon: 'carbon:user-role',
|
|
||||||
order: 2,
|
|
||||||
roles: ['R_SUPER']
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'manage_route',
|
|
||||||
path: '/manage/route',
|
|
||||||
component: 'view.manage_route',
|
|
||||||
meta: {
|
|
||||||
title: 'manage_route',
|
|
||||||
i18nKey: 'route.manage_route'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'manage_user',
|
|
||||||
path: '/manage/user',
|
|
||||||
component: 'view.manage_user',
|
|
||||||
meta: {
|
|
||||||
title: 'manage_user',
|
|
||||||
i18nKey: 'route.manage_user',
|
|
||||||
icon: 'ic:round-manage-accounts',
|
|
||||||
order: 1,
|
|
||||||
roles: ['R_ADMIN']
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'manage_user-detail',
|
|
||||||
path: '/manage/user-detail/:id',
|
|
||||||
component: 'view.manage_user-detail',
|
|
||||||
props: true,
|
|
||||||
meta: {
|
|
||||||
title: 'manage_user-detail',
|
|
||||||
i18nKey: 'route.manage_user-detail',
|
|
||||||
hideInMenu: true,
|
|
||||||
roles: ['R_ADMIN'],
|
|
||||||
activeMenu: 'manage_user'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: 'user-center',
|
name: 'user-center',
|
||||||
path: '/user-center',
|
path: '/user-center',
|
||||||
|
|||||||
@@ -11,26 +11,22 @@ import type { RouteMap, RouteKey, RoutePath } from '@elegant-router/types';
|
|||||||
* transform elegant const routes to vue routes
|
* transform elegant const routes to vue routes
|
||||||
* @param routes elegant const routes
|
* @param routes elegant const routes
|
||||||
* @param layouts layout components
|
* @param layouts layout components
|
||||||
* @param views view components
|
|
||||||
*/
|
*/
|
||||||
export function transformElegantRoutesToVueRoutes(
|
export function transformElegantRoutesToVueRoutes(
|
||||||
routes: ElegantConstRoute[],
|
routes: ElegantConstRoute[],
|
||||||
layouts: Record<string, RouteComponent | (() => Promise<RouteComponent>)>,
|
layouts: Record<string, RouteComponent | (() => Promise<RouteComponent>)>,
|
||||||
views: Record<string, RouteComponent | (() => Promise<RouteComponent>)>
|
|
||||||
) {
|
) {
|
||||||
return routes.flatMap(route => transformElegantRouteToVueRoute(route, layouts, views));
|
return routes.flatMap(route => transformElegantRouteToVueRoute(route, layouts ));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* transform elegant route to vue route
|
* transform elegant route to vue route
|
||||||
* @param route elegant const route
|
* @param route elegant const route
|
||||||
* @param layouts layout components
|
* @param layouts layout components
|
||||||
* @param views view components
|
|
||||||
*/
|
*/
|
||||||
function transformElegantRouteToVueRoute(
|
function transformElegantRouteToVueRoute(
|
||||||
route: ElegantConstRoute,
|
route: ElegantConstRoute,
|
||||||
layouts: Record<string, RouteComponent | (() => Promise<RouteComponent>)>,
|
layouts: Record<string, RouteComponent | (() => Promise<RouteComponent>)>,
|
||||||
views: Record<string, RouteComponent | (() => Promise<RouteComponent>)>
|
|
||||||
) {
|
) {
|
||||||
const LAYOUT_PREFIX = 'layout.';
|
const LAYOUT_PREFIX = 'layout.';
|
||||||
const VIEW_PREFIX = 'view.';
|
const VIEW_PREFIX = 'view.';
|
||||||
@@ -48,7 +44,7 @@ function transformElegantRouteToVueRoute(
|
|||||||
throw new Error(`Layout component "${layout}" not found`);
|
throw new Error(`Layout component "${layout}" not found`);
|
||||||
}
|
}
|
||||||
|
|
||||||
return layout;
|
return layouts[layout];
|
||||||
}
|
}
|
||||||
|
|
||||||
function isView(component: string) {
|
function isView(component: string) {
|
||||||
@@ -57,12 +53,14 @@ function transformElegantRouteToVueRoute(
|
|||||||
|
|
||||||
function getViewName(component: string) {
|
function getViewName(component: string) {
|
||||||
const view = component.replace(VIEW_PREFIX, '');
|
const view = component.replace(VIEW_PREFIX, '');
|
||||||
|
debugger
|
||||||
if(!views[view]) {
|
const v = findView(view)
|
||||||
|
console.log(v)
|
||||||
|
if(!v) {
|
||||||
throw new Error(`View component "${view}" not found`);
|
throw new Error(`View component "${view}" not found`);
|
||||||
}
|
}
|
||||||
|
|
||||||
return view;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
function isFirstLevelRoute(item: ElegantConstRoute) {
|
function isFirstLevelRoute(item: ElegantConstRoute) {
|
||||||
@@ -97,51 +95,47 @@ function transformElegantRouteToVueRoute(
|
|||||||
if (component) {
|
if (component) {
|
||||||
if (isSingleLevelRoute(route)) {
|
if (isSingleLevelRoute(route)) {
|
||||||
const { layout, view } = getSingleLevelRouteComponent(component);
|
const { layout, view } = getSingleLevelRouteComponent(component);
|
||||||
|
|
||||||
const singleLevelRoute: RouteRecordRaw = {
|
const singleLevelRoute: RouteRecordRaw = {
|
||||||
path,
|
path,
|
||||||
component: layouts[layout],
|
component: layout,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
name,
|
name,
|
||||||
path: '',
|
path: '',
|
||||||
component: views[view],
|
component: view,
|
||||||
...rest
|
...rest
|
||||||
} as RouteRecordRaw
|
} as RouteRecordRaw
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
return [singleLevelRoute];
|
return [singleLevelRoute];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isLayout(component)) {
|
if (isLayout(component)) {
|
||||||
const layoutName = getLayoutName(component);
|
vueRoute.component = getLayoutName(component);
|
||||||
|
|
||||||
vueRoute.component = layouts[layoutName];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isView(component)) {
|
if (isView(component)) {
|
||||||
const viewName = getViewName(component);
|
vueRoute.component = getViewName(component);
|
||||||
|
|
||||||
vueRoute.component = views[viewName];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
console.error(`Error transforming route "${route.name}": ${error.toString()}`);
|
console.error(`Error transforming route "${route.name}": ${error.toString()}`);
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// add redirect to child
|
// add redirect to child
|
||||||
if (children?.length && !vueRoute.redirect) {
|
if (children?.length && !vueRoute.redirect) {
|
||||||
vueRoute.redirect = {
|
vueRoute.redirect = {
|
||||||
name: children[0].name
|
name: children[0].name
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (children?.length) {
|
if (children?.length) {
|
||||||
const childRoutes = children.flatMap(child => transformElegantRouteToVueRoute(child, layouts, views));
|
const childRoutes = children.flatMap(child => transformElegantRouteToVueRoute(child, layouts));
|
||||||
|
|
||||||
if(isFirstLevelRoute(route)) {
|
if(isFirstLevelRoute(route)) {
|
||||||
vueRoute.children = childRoutes;
|
vueRoute.children = childRoutes;
|
||||||
@@ -155,6 +149,34 @@ function transformElegantRouteToVueRoute(
|
|||||||
return vueRoutes;
|
return vueRoutes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**匹配views里面所有的.vue或.tsx文件 */
|
||||||
|
const views = import.meta.glob('./../../views/**/*.{vue,tsx}');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查找页面模块
|
||||||
|
*
|
||||||
|
* 查找 `/views/system/menu/index.vue` 或 `/views/system/menu/index.tsx`
|
||||||
|
*
|
||||||
|
* 参数值为 `system/menu/index`
|
||||||
|
*
|
||||||
|
* @param dirName 组件路径
|
||||||
|
* @returns 路由懒加载函数
|
||||||
|
*/
|
||||||
|
function findView(dirName: string) {
|
||||||
|
for (const dir in views) {
|
||||||
|
let viewDirName = '';
|
||||||
|
const component = dir.match(/views\/(.+)\.(vue|tsx)/);
|
||||||
|
if (component && component.length === 3) {
|
||||||
|
viewDirName = component[1];
|
||||||
|
}
|
||||||
|
viewDirName = viewDirName.replaceAll("/", "_").replace("_index", "")
|
||||||
|
if ( viewDirName === dirName) {
|
||||||
|
return () => views[dir]();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return () => import("@/views/_builtin/404/index.vue");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* map of route name and route path
|
* map of route name and route path
|
||||||
*/
|
*/
|
||||||
@@ -181,15 +203,6 @@ const routeMap: RouteMap = {
|
|||||||
"function_toggle-auth": "/function/toggle-auth",
|
"function_toggle-auth": "/function/toggle-auth",
|
||||||
"home": "/home",
|
"home": "/home",
|
||||||
"login": "/login/:module(pwd-login|code-login|register|reset-pwd|bind-wechat)?",
|
"login": "/login/:module(pwd-login|code-login|register|reset-pwd|bind-wechat)?",
|
||||||
"manage": "/manage",
|
|
||||||
"manage_dept": "/manage/dept",
|
|
||||||
"manage_dict": "/manage/dict",
|
|
||||||
"manage_menu": "/manage/menu",
|
|
||||||
"manage_post": "/manage/post",
|
|
||||||
"manage_role": "/manage/role",
|
|
||||||
"manage_route": "/manage/route",
|
|
||||||
"manage_user": "/manage/user",
|
|
||||||
"manage_user-detail": "/manage/user-detail/:id",
|
|
||||||
"user-center": "/user-center"
|
"user-center": "/user-center"
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -198,6 +211,7 @@ const routeMap: RouteMap = {
|
|||||||
* @param name route name
|
* @param name route name
|
||||||
*/
|
*/
|
||||||
export function getRoutePath<T extends RouteKey>(name: T) {
|
export function getRoutePath<T extends RouteKey>(name: T) {
|
||||||
|
console.log(name)
|
||||||
return routeMap[name];
|
return routeMap[name];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { CustomRoute } from '@elegant-router/types';
|
import type { CustomRoute } from '@elegant-router/types';
|
||||||
import { layouts, views } from '../elegant/imports';
|
import { layouts } from '../elegant/imports';
|
||||||
import { transformElegantRoutesToVueRoutes } from '../elegant/transform';
|
import { transformElegantRoutesToVueRoutes } from '../elegant/transform';
|
||||||
|
|
||||||
export const ROOT_ROUTE: CustomRoute = {
|
export const ROOT_ROUTE: CustomRoute = {
|
||||||
@@ -15,7 +15,7 @@ export const ROOT_ROUTE: CustomRoute = {
|
|||||||
const NOT_FOUND_ROUTE: CustomRoute = {
|
const NOT_FOUND_ROUTE: CustomRoute = {
|
||||||
name: 'not-found',
|
name: 'not-found',
|
||||||
path: '/:pathMatch(.*)*',
|
path: '/:pathMatch(.*)*',
|
||||||
component: 'layout.blank$view.404',
|
component: 'layout.blank$view._builtin_404',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'not-found',
|
title: 'not-found',
|
||||||
constant: true
|
constant: true
|
||||||
@@ -27,5 +27,5 @@ const builtinRoutes: CustomRoute[] = [ROOT_ROUTE, NOT_FOUND_ROUTE];
|
|||||||
|
|
||||||
/** create builtin vue routes */
|
/** create builtin vue routes */
|
||||||
export function createBuiltinVueRoutes() {
|
export function createBuiltinVueRoutes() {
|
||||||
return transformElegantRoutesToVueRoutes(builtinRoutes, layouts, views);
|
return transformElegantRoutesToVueRoutes(builtinRoutes, layouts);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import type { CustomRoute, ElegantConstRoute, ElegantRoute } from '@elegant-router/types';
|
import type { ElegantConstRoute } from '@elegant-router/types';
|
||||||
import { generatedRoutes } from '../elegant/routes';
|
import { generatedRoutes } from '../elegant/routes';
|
||||||
import { layouts, views } from '../elegant/imports';
|
import { layouts } from '../elegant/imports';
|
||||||
import { transformElegantRoutesToVueRoutes } from '../elegant/transform';
|
import { transformElegantRoutesToVueRoutes } from '../elegant/transform';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -8,7 +8,7 @@ import { transformElegantRoutesToVueRoutes } from '../elegant/transform';
|
|||||||
*
|
*
|
||||||
* @link https://github.com/soybeanjs/elegant-router?tab=readme-ov-file#custom-route
|
* @link https://github.com/soybeanjs/elegant-router?tab=readme-ov-file#custom-route
|
||||||
*/
|
*/
|
||||||
const customRoutes: CustomRoute[] = [
|
const customRoutes: any[] = [
|
||||||
{
|
{
|
||||||
name: 'exception',
|
name: 'exception',
|
||||||
path: '/exception',
|
path: '/exception',
|
||||||
@@ -23,7 +23,7 @@ const customRoutes: CustomRoute[] = [
|
|||||||
{
|
{
|
||||||
name: 'exception_403',
|
name: 'exception_403',
|
||||||
path: '/exception/403',
|
path: '/exception/403',
|
||||||
component: 'view.403',
|
component: 'view._builtin_403',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'exception_403',
|
title: 'exception_403',
|
||||||
i18nKey: 'route.exception_403',
|
i18nKey: 'route.exception_403',
|
||||||
@@ -33,7 +33,7 @@ const customRoutes: CustomRoute[] = [
|
|||||||
{
|
{
|
||||||
name: 'exception_404',
|
name: 'exception_404',
|
||||||
path: '/exception/404',
|
path: '/exception/404',
|
||||||
component: 'view.404',
|
component: 'view._builtin_404',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'exception_404',
|
title: 'exception_404',
|
||||||
i18nKey: 'route.exception_404',
|
i18nKey: 'route.exception_404',
|
||||||
@@ -43,7 +43,7 @@ const customRoutes: CustomRoute[] = [
|
|||||||
{
|
{
|
||||||
name: 'exception_500',
|
name: 'exception_500',
|
||||||
path: '/exception/500',
|
path: '/exception/500',
|
||||||
component: 'view.500',
|
component: 'view._builtin_500',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'exception_500',
|
title: 'exception_500',
|
||||||
i18nKey: 'route.exception_500',
|
i18nKey: 'route.exception_500',
|
||||||
@@ -56,9 +56,9 @@ const customRoutes: CustomRoute[] = [
|
|||||||
|
|
||||||
/** create routes when the auth route mode is static */
|
/** create routes when the auth route mode is static */
|
||||||
export function createStaticRoutes() {
|
export function createStaticRoutes() {
|
||||||
const constantRoutes: ElegantRoute[] = [];
|
const constantRoutes: any[] = [];
|
||||||
|
|
||||||
const authRoutes: ElegantRoute[] = [];
|
const authRoutes: any[] = [];
|
||||||
|
|
||||||
[...customRoutes, ...generatedRoutes].forEach(item => {
|
[...customRoutes, ...generatedRoutes].forEach(item => {
|
||||||
if (item.meta?.constant) {
|
if (item.meta?.constant) {
|
||||||
@@ -80,5 +80,5 @@ export function createStaticRoutes() {
|
|||||||
* @param routes Elegant routes
|
* @param routes Elegant routes
|
||||||
*/
|
*/
|
||||||
export function getAuthVueRoutes(routes: ElegantConstRoute[]) {
|
export function getAuthVueRoutes(routes: ElegantConstRoute[]) {
|
||||||
return transformElegantRoutesToVueRoutes(routes, layouts, views);
|
return transformElegantRoutesToVueRoutes(routes, layouts);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import type { AxiosRequestConfig } from 'axios';
|
import type { AxiosRequestConfig } from 'axios';
|
||||||
import { useAuthStore } from '@/store/modules/auth';
|
import { useAuthStore } from '@/store/modules/auth';
|
||||||
import { localStg } from '@/utils/storage';
|
import { localStg } from '@/utils/storage';
|
||||||
import { fetchRefreshToken } from '../api';
|
import { fetchRefreshToken } from '../api/auth';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* refresh token
|
* refresh token
|
||||||
|
|||||||
@@ -2,12 +2,12 @@ import { computed, ref, shallowRef } from 'vue';
|
|||||||
import type { RouteRecordRaw } from 'vue-router';
|
import type { RouteRecordRaw } from 'vue-router';
|
||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
import { useBoolean } from '@sa/hooks';
|
import { useBoolean } from '@sa/hooks';
|
||||||
import type { CustomRoute, ElegantConstRoute, LastLevelRouteKey, RouteKey, RouteMap } from '@elegant-router/types';
|
import type { CustomRoute, ElegantConstRoute, LastLevelRouteKey, RouteKey } from '@elegant-router/types';
|
||||||
import { SetupStoreId } from '@/enum';
|
import { SetupStoreId } from '@/enum';
|
||||||
import { router } from '@/router';
|
import { router } from '@/router';
|
||||||
import { createStaticRoutes, getAuthVueRoutes } from '@/router/routes';
|
import { createStaticRoutes, getAuthVueRoutes } from '@/router/routes';
|
||||||
import { ROOT_ROUTE } from '@/router/routes/builtin';
|
import { ROOT_ROUTE } from '@/router/routes/builtin';
|
||||||
import { getRouteName, getRoutePath } from '@/router/elegant/transform';
|
import { getRoutePath } from '@/router/elegant/transform';
|
||||||
import { useAppStore } from '../app';
|
import { useAppStore } from '../app';
|
||||||
import { useAuthStore } from '../auth';
|
import { useAuthStore } from '../auth';
|
||||||
import { useTabStore } from '../tab';
|
import { useTabStore } from '../tab';
|
||||||
@@ -17,7 +17,6 @@ import {
|
|||||||
getCacheRouteNames,
|
getCacheRouteNames,
|
||||||
getGlobalMenusByAuthRoutes,
|
getGlobalMenusByAuthRoutes,
|
||||||
getSelectedMenuKeyPathByKey,
|
getSelectedMenuKeyPathByKey,
|
||||||
isRouteExistByRouteName,
|
|
||||||
sortRoutesByOrder,
|
sortRoutesByOrder,
|
||||||
transformMenuToSearchMenus,
|
transformMenuToSearchMenus,
|
||||||
updateLocaleOfGlobalMenus
|
updateLocaleOfGlobalMenus
|
||||||
@@ -30,14 +29,6 @@ export const useRouteStore = defineStore(SetupStoreId.Route, () => {
|
|||||||
const { bool: isInitConstantRoute, setBool: setIsInitConstantRoute } = useBoolean();
|
const { bool: isInitConstantRoute, setBool: setIsInitConstantRoute } = useBoolean();
|
||||||
const { bool: isInitAuthRoute, setBool: setIsInitAuthRoute } = useBoolean();
|
const { bool: isInitAuthRoute, setBool: setIsInitAuthRoute } = useBoolean();
|
||||||
|
|
||||||
/**
|
|
||||||
* Auth route mode
|
|
||||||
*
|
|
||||||
* It recommends to use static mode in the development environment, and use dynamic mode in the production
|
|
||||||
* environment, if use static mode in development environment, the auth routes will be auto generated by plugin
|
|
||||||
* "@elegant-router/vue"
|
|
||||||
*/
|
|
||||||
const authRouteMode = ref(import.meta.env.VITE_AUTH_ROUTE_MODE);
|
|
||||||
|
|
||||||
/** Home route key */
|
/** Home route key */
|
||||||
const routeHome = ref('home');
|
const routeHome = ref('home');
|
||||||
@@ -129,16 +120,6 @@ export const useRouteStore = defineStore(SetupStoreId.Route, () => {
|
|||||||
addCacheRoutes(routeKey);
|
addCacheRoutes(routeKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Re cache routes by route keys
|
|
||||||
*
|
|
||||||
* @param routeKeys
|
|
||||||
*/
|
|
||||||
async function reCacheRoutesByKeys(routeKeys: RouteKey[]) {
|
|
||||||
for await (const key of routeKeys) {
|
|
||||||
await reCacheRoutesByKey(key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Global breadcrumbs */
|
/** Global breadcrumbs */
|
||||||
const breadcrumbs = computed(() => getBreadcrumbsByRoute(router.currentRoute.value, menus.value));
|
const breadcrumbs = computed(() => getBreadcrumbsByRoute(router.currentRoute.value, menus.value));
|
||||||
@@ -184,19 +165,15 @@ export const useRouteStore = defineStore(SetupStoreId.Route, () => {
|
|||||||
|
|
||||||
/** Init auth route */
|
/** Init auth route */
|
||||||
async function initAuthRoute() {
|
async function initAuthRoute() {
|
||||||
if (authRouteMode.value === 'static') {
|
await initStaticAuthRoute();
|
||||||
await initStaticAuthRoute();
|
await initDynamicAuthRoute();
|
||||||
} else {
|
|
||||||
await initDynamicAuthRoute();
|
|
||||||
}
|
|
||||||
|
|
||||||
tabStore.initHomeTab();
|
tabStore.initHomeTab();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Init static auth route */
|
/** Init static auth route */
|
||||||
async function initStaticAuthRoute() {
|
async function initStaticAuthRoute() {
|
||||||
const { authRoutes: staticAuthRoutes } = createStaticRoutes();
|
const { authRoutes: staticAuthRoutes } = createStaticRoutes();
|
||||||
|
debugger
|
||||||
if (authStore.isStaticSuper) {
|
if (authStore.isStaticSuper) {
|
||||||
addAuthRoutes(staticAuthRoutes);
|
addAuthRoutes(staticAuthRoutes);
|
||||||
} else {
|
} else {
|
||||||
@@ -213,13 +190,13 @@ export const useRouteStore = defineStore(SetupStoreId.Route, () => {
|
|||||||
/** Init dynamic auth route */
|
/** Init dynamic auth route */
|
||||||
async function initDynamicAuthRoute() {
|
async function initDynamicAuthRoute() {
|
||||||
const { data: routes, error } = await doGetUserRoutes();
|
const { data: routes, error } = await doGetUserRoutes();
|
||||||
|
debugger
|
||||||
if (!error) {
|
if (!error) {
|
||||||
addAuthRoutes(routes);
|
addAuthRoutes(routes);
|
||||||
|
|
||||||
handleAuthRoutes();
|
handleAuthRoutes();
|
||||||
|
|
||||||
setRouteHome('manage_role');
|
setRouteHome('home');
|
||||||
|
|
||||||
handleUpdateRootRouteRedirect('manage_role');
|
handleUpdateRootRouteRedirect('manage_role');
|
||||||
|
|
||||||
@@ -284,28 +261,6 @@ export const useRouteStore = defineStore(SetupStoreId.Route, () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get is auth route exist
|
|
||||||
*
|
|
||||||
* @param routePath Route path
|
|
||||||
*/
|
|
||||||
async function getIsAuthRouteExist(routePath: RouteMap[RouteKey]) {
|
|
||||||
const routeName = getRouteName(routePath);
|
|
||||||
|
|
||||||
if (!routeName) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (authRouteMode.value === 'static') {
|
|
||||||
const { authRoutes: staticAuthRoutes } = createStaticRoutes();
|
|
||||||
return isRouteExistByRouteName(routeName, staticAuthRoutes);
|
|
||||||
}
|
|
||||||
|
|
||||||
const { data } = await fetchIsRouteExist(routeName);
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get selected menu key path
|
* Get selected menu key path
|
||||||
*
|
*
|
||||||
@@ -335,14 +290,12 @@ export const useRouteStore = defineStore(SetupStoreId.Route, () => {
|
|||||||
updateGlobalMenusByLocale,
|
updateGlobalMenusByLocale,
|
||||||
cacheRoutes,
|
cacheRoutes,
|
||||||
reCacheRoutesByKey,
|
reCacheRoutesByKey,
|
||||||
reCacheRoutesByKeys,
|
|
||||||
breadcrumbs,
|
breadcrumbs,
|
||||||
initConstantRoute,
|
initConstantRoute,
|
||||||
isInitConstantRoute,
|
isInitConstantRoute,
|
||||||
initAuthRoute,
|
initAuthRoute,
|
||||||
isInitAuthRoute,
|
isInitAuthRoute,
|
||||||
setIsInitAuthRoute,
|
setIsInitAuthRoute,
|
||||||
getIsAuthRouteExist,
|
|
||||||
getSelectedMenuKeyPath,
|
getSelectedMenuKeyPath,
|
||||||
getSelectedMenuMetaByKey
|
getSelectedMenuMetaByKey
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -20,12 +20,7 @@ export function initThemeSettings() {
|
|||||||
|
|
||||||
const settings = localStg.get('themeSettings') || themeSettings;
|
const settings = localStg.get('themeSettings') || themeSettings;
|
||||||
|
|
||||||
const isOverride = localStg.get('overrideThemeFlag') === BUILD_TIME;
|
Object.assign(settings, overrideThemeSettings);
|
||||||
|
|
||||||
if (!isOverride) {
|
|
||||||
Object.assign(settings, overrideThemeSettings);
|
|
||||||
localStg.set('overrideThemeFlag', BUILD_TIME);
|
|
||||||
}
|
|
||||||
|
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|||||||
107
src/typings/elegant-router.d.ts
vendored
107
src/typings/elegant-router.d.ts
vendored
@@ -11,70 +11,26 @@ declare module "@elegant-router/types" {
|
|||||||
*/
|
*/
|
||||||
export type RouteLayout = "base" | "blank";
|
export type RouteLayout = "base" | "blank";
|
||||||
|
|
||||||
/**
|
|
||||||
* route map
|
|
||||||
*/
|
|
||||||
export type RouteMap = {
|
|
||||||
"root": "/";
|
|
||||||
"not-found": "/:pathMatch(.*)*";
|
|
||||||
"exception": "/exception";
|
|
||||||
"exception_403": "/exception/403";
|
|
||||||
"exception_404": "/exception/404";
|
|
||||||
"exception_500": "/exception/500";
|
|
||||||
"403": "/403";
|
|
||||||
"404": "/404";
|
|
||||||
"500": "/500";
|
|
||||||
"about": "/about";
|
|
||||||
"function": "/function";
|
|
||||||
"function_hide-child": "/function/hide-child";
|
|
||||||
"function_hide-child_one": "/function/hide-child/one";
|
|
||||||
"function_hide-child_three": "/function/hide-child/three";
|
|
||||||
"function_hide-child_two": "/function/hide-child/two";
|
|
||||||
"function_multi-tab": "/function/multi-tab";
|
|
||||||
"function_request": "/function/request";
|
|
||||||
"function_super-page": "/function/super-page";
|
|
||||||
"function_tab": "/function/tab";
|
|
||||||
"function_toggle-auth": "/function/toggle-auth";
|
|
||||||
"home": "/home";
|
|
||||||
"login": "/login/:module(pwd-login|code-login|register|reset-pwd|bind-wechat)?";
|
|
||||||
"manage": "/manage";
|
|
||||||
"manage_dept": "/manage/dept";
|
|
||||||
"manage_dict": "/manage/dict";
|
|
||||||
"manage_menu": "/manage/menu";
|
|
||||||
"manage_post": "/manage/post";
|
|
||||||
"manage_role": "/manage/role";
|
|
||||||
"manage_route": "/manage/route";
|
|
||||||
"manage_user": "/manage/user";
|
|
||||||
"manage_user-detail": "/manage/user-detail/:id";
|
|
||||||
"user-center": "/user-center";
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* route key
|
* route key
|
||||||
*/
|
*/
|
||||||
export type RouteKey = keyof RouteMap;
|
export type RouteKey = string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* route path
|
* route path
|
||||||
*/
|
*/
|
||||||
export type RoutePath = RouteMap[RouteKey];
|
export type RoutePath = string;
|
||||||
|
export type RouteMap =Record<string,string>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* custom route key
|
* custom route key
|
||||||
*/
|
*/
|
||||||
export type CustomRouteKey = Extract<
|
export type CustomRouteKey = string;
|
||||||
RouteKey,
|
|
||||||
| "root"
|
|
||||||
| "not-found"
|
|
||||||
| "exception"
|
|
||||||
| "exception_403"
|
|
||||||
| "exception_404"
|
|
||||||
| "exception_500"
|
|
||||||
>;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the generated route key
|
* the generated route key
|
||||||
*/
|
*/
|
||||||
export type GeneratedRouteKey = Exclude<RouteKey, CustomRouteKey>;
|
export type GeneratedRouteKey = Exclude<RouteKey, CustomRouteKey>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -90,7 +46,9 @@ declare module "@elegant-router/types" {
|
|||||||
| "home"
|
| "home"
|
||||||
| "login"
|
| "login"
|
||||||
| "manage"
|
| "manage"
|
||||||
|
| "user"
|
||||||
| "user-center"
|
| "user-center"
|
||||||
|
| "uui"
|
||||||
>;
|
>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -106,32 +64,7 @@ declare module "@elegant-router/types" {
|
|||||||
/**
|
/**
|
||||||
* the last level route key, which has the page file
|
* the last level route key, which has the page file
|
||||||
*/
|
*/
|
||||||
export type LastLevelRouteKey = Extract<
|
export type LastLevelRouteKey = string
|
||||||
RouteKey,
|
|
||||||
| "403"
|
|
||||||
| "404"
|
|
||||||
| "500"
|
|
||||||
| "login"
|
|
||||||
| "about"
|
|
||||||
| "function_hide-child_one"
|
|
||||||
| "function_hide-child_three"
|
|
||||||
| "function_hide-child_two"
|
|
||||||
| "function_multi-tab"
|
|
||||||
| "function_request"
|
|
||||||
| "function_super-page"
|
|
||||||
| "function_tab"
|
|
||||||
| "function_toggle-auth"
|
|
||||||
| "home"
|
|
||||||
| "manage_dept"
|
|
||||||
| "manage_dict"
|
|
||||||
| "manage_menu"
|
|
||||||
| "manage_post"
|
|
||||||
| "manage_role"
|
|
||||||
| "manage_route"
|
|
||||||
| "manage_user-detail"
|
|
||||||
| "manage_user"
|
|
||||||
| "user-center"
|
|
||||||
>;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the custom last level route key
|
* the custom last level route key
|
||||||
@@ -190,7 +123,7 @@ declare module "@elegant-router/types" {
|
|||||||
type SingleLevelRoute<K extends SingleLevelRouteKey = SingleLevelRouteKey> = K extends string
|
type SingleLevelRoute<K extends SingleLevelRouteKey = SingleLevelRouteKey> = K extends string
|
||||||
? Omit<ElegantConstRoute, 'children'> & {
|
? Omit<ElegantConstRoute, 'children'> & {
|
||||||
name: K;
|
name: K;
|
||||||
path: RouteMap[K];
|
path: string;
|
||||||
component: `layout.${RouteLayout}$view.${K}`;
|
component: `layout.${RouteLayout}$view.${K}`;
|
||||||
}
|
}
|
||||||
: never;
|
: never;
|
||||||
@@ -201,18 +134,18 @@ declare module "@elegant-router/types" {
|
|||||||
type LastLevelRoute<K extends GeneratedRouteKey> = K extends LastLevelRouteKey
|
type LastLevelRoute<K extends GeneratedRouteKey> = K extends LastLevelRouteKey
|
||||||
? Omit<ElegantConstRoute, 'children'> & {
|
? Omit<ElegantConstRoute, 'children'> & {
|
||||||
name: K;
|
name: K;
|
||||||
path: RouteMap[K];
|
path: string;
|
||||||
component: `view.${K}`;
|
component: `view.${K}`;
|
||||||
}
|
}
|
||||||
: never;
|
: never;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the center level route
|
* the center level route
|
||||||
*/
|
*/
|
||||||
type CenterLevelRoute<K extends GeneratedRouteKey> = K extends CenterLevelRouteKey
|
type CenterLevelRoute<K extends GeneratedRouteKey> = K extends CenterLevelRouteKey
|
||||||
? Omit<ElegantConstRoute, 'component'> & {
|
? Omit<ElegantConstRoute, 'component'> & {
|
||||||
name: K;
|
name: K;
|
||||||
path: RouteMap[K];
|
path: string;
|
||||||
children: (CenterLevelRoute<GetChildRouteKey<K>> | LastLevelRoute<GetChildRouteKey<K>>)[];
|
children: (CenterLevelRoute<GetChildRouteKey<K>> | LastLevelRoute<GetChildRouteKey<K>>)[];
|
||||||
}
|
}
|
||||||
: never;
|
: never;
|
||||||
@@ -223,19 +156,19 @@ declare module "@elegant-router/types" {
|
|||||||
type MultiLevelRoute<K extends FirstLevelRouteNotSingleKey = FirstLevelRouteNotSingleKey> = K extends string
|
type MultiLevelRoute<K extends FirstLevelRouteNotSingleKey = FirstLevelRouteNotSingleKey> = K extends string
|
||||||
? ElegantConstRoute & {
|
? ElegantConstRoute & {
|
||||||
name: K;
|
name: K;
|
||||||
path: RouteMap[K];
|
path: string;
|
||||||
component: `layout.${RouteLayout}`;
|
component: `layout.${RouteLayout}`;
|
||||||
children: (CenterLevelRoute<GetChildRouteKey<K>> | LastLevelRoute<GetChildRouteKey<K>>)[];
|
children: (CenterLevelRoute<GetChildRouteKey<K>> | LastLevelRoute<GetChildRouteKey<K>>)[];
|
||||||
}
|
}
|
||||||
: never;
|
: never;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the custom first level route
|
* the custom first level route
|
||||||
*/
|
*/
|
||||||
type CustomSingleLevelRoute<K extends CustomFirstLevelRouteKey = CustomFirstLevelRouteKey> = K extends string
|
type CustomSingleLevelRoute<K extends CustomFirstLevelRouteKey = CustomFirstLevelRouteKey> = K extends string
|
||||||
? Omit<ElegantConstRoute, 'children'> & {
|
? Omit<ElegantConstRoute, 'children'> & {
|
||||||
name: K;
|
name: K;
|
||||||
path: RouteMap[K];
|
path: string;
|
||||||
component?: `layout.${RouteLayout}$view.${LastLevelRouteKey}`;
|
component?: `layout.${RouteLayout}$view.${LastLevelRouteKey}`;
|
||||||
}
|
}
|
||||||
: never;
|
: never;
|
||||||
@@ -246,7 +179,7 @@ declare module "@elegant-router/types" {
|
|||||||
type CustomLastLevelRoute<K extends CustomRouteKey> = K extends CustomLastLevelRouteKey
|
type CustomLastLevelRoute<K extends CustomRouteKey> = K extends CustomLastLevelRouteKey
|
||||||
? Omit<ElegantConstRoute, 'children'> & {
|
? Omit<ElegantConstRoute, 'children'> & {
|
||||||
name: K;
|
name: K;
|
||||||
path: RouteMap[K];
|
path: string;
|
||||||
component?: `view.${LastLevelRouteKey}`;
|
component?: `view.${LastLevelRouteKey}`;
|
||||||
}
|
}
|
||||||
: never;
|
: never;
|
||||||
@@ -257,7 +190,7 @@ declare module "@elegant-router/types" {
|
|||||||
type CustomCenterLevelRoute<K extends CustomRouteKey> = K extends CustomCenterLevelRouteKey
|
type CustomCenterLevelRoute<K extends CustomRouteKey> = K extends CustomCenterLevelRouteKey
|
||||||
? Omit<ElegantConstRoute, 'component'> & {
|
? Omit<ElegantConstRoute, 'component'> & {
|
||||||
name: K;
|
name: K;
|
||||||
path: RouteMap[K];
|
path: string;
|
||||||
children: (CustomCenterLevelRoute<GetChildRouteKey<K>> | CustomLastLevelRoute<GetChildRouteKey<K>>)[];
|
children: (CustomCenterLevelRoute<GetChildRouteKey<K>> | CustomLastLevelRoute<GetChildRouteKey<K>>)[];
|
||||||
}
|
}
|
||||||
: never;
|
: never;
|
||||||
@@ -269,7 +202,7 @@ declare module "@elegant-router/types" {
|
|||||||
K extends string
|
K extends string
|
||||||
? ElegantConstRoute & {
|
? ElegantConstRoute & {
|
||||||
name: K;
|
name: K;
|
||||||
path: RouteMap[K];
|
path: string;
|
||||||
component: `layout.${RouteLayout}`;
|
component: `layout.${RouteLayout}`;
|
||||||
children: (CustomCenterLevelRoute<GetChildRouteKey<K>> | CustomLastLevelRoute<GetChildRouteKey<K>>)[];
|
children: (CustomCenterLevelRoute<GetChildRouteKey<K>> | CustomLastLevelRoute<GetChildRouteKey<K>>)[];
|
||||||
}
|
}
|
||||||
@@ -278,7 +211,7 @@ declare module "@elegant-router/types" {
|
|||||||
/**
|
/**
|
||||||
* the custom route
|
* the custom route
|
||||||
*/
|
*/
|
||||||
type CustomRoute = CustomSingleLevelRoute | CustomMultiLevelRoute;
|
type CustomRoute = CustomSingleLevelRoute | CustomMultiLevelRoute | any;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the generated route
|
* the generated route
|
||||||
|
|||||||
3
src/typings/global.d.ts
vendored
3
src/typings/global.d.ts
vendored
@@ -20,6 +20,3 @@ interface Document {
|
|||||||
interface ImportMeta {
|
interface ImportMeta {
|
||||||
readonly env: Env.ImportMeta;
|
readonly env: Env.ImportMeta;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Build time of the project */
|
|
||||||
declare const BUILD_TIME: string;
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ const pkgJson: PkgJson = {
|
|||||||
devDependencies: Object.entries(devDependencies).map(item => transformVersionData(item))
|
devDependencies: Object.entries(devDependencies).map(item => transformVersionData(item))
|
||||||
};
|
};
|
||||||
|
|
||||||
const latestBuildTime = BUILD_TIME;
|
const latestBuildTime = "----";
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import type {} from 'ant-design-vue';
|
|
||||||
import { generatedRoutes } from '@/router/elegant/routes';
|
|
||||||
import { $t } from '@/locales';
|
import { $t } from '@/locales';
|
||||||
import type { MenuModelType } from './form';
|
import type { MenuModelType } from './form';
|
||||||
import { formRules, menuStatusOptions, menuTypeOptions, resetAddForm } from './form';
|
import { formRules, menuStatusOptions, menuTypeOptions, resetAddForm } from './form';
|
||||||
@@ -30,24 +28,6 @@ const title = computed(() => {
|
|||||||
return titles[props.operateType];
|
return titles[props.operateType];
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO: 根据菜单类型动态加载组件路径、目录类型只允许选择带有子元素的,菜单类型只允许选择没有子元素的
|
|
||||||
const componentOptions = computed(() => {
|
|
||||||
const excludePaths = ['/404', '/403', '/500'];
|
|
||||||
function transformRoutes(routes: any[]): any[] {
|
|
||||||
return routes.filter(route => {
|
|
||||||
if (route.children) {
|
|
||||||
route.children = transformRoutes(route.children);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (!route.hideInMenu && !excludePaths.includes(route.path) && !route.path.startsWith('/login')) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return transformRoutes(generatedRoutes);
|
|
||||||
});
|
|
||||||
|
|
||||||
watch(visible, val => {
|
watch(visible, val => {
|
||||||
if (val) {
|
if (val) {
|
||||||
@@ -95,10 +75,6 @@ async function getTreeData() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleTreeSelect(node: any) {
|
|
||||||
model.value.component = node.component;
|
|
||||||
model.value.name = node.name;
|
|
||||||
}
|
|
||||||
|
|
||||||
getTreeData();
|
getTreeData();
|
||||||
</script>
|
</script>
|
||||||
@@ -139,20 +115,9 @@ getTreeData();
|
|||||||
</ARadioGroup>
|
</ARadioGroup>
|
||||||
</AFormItem>
|
</AFormItem>
|
||||||
<AFormItem v-if="model.menuType !== 'F'" label="菜单路径" name="path">
|
<AFormItem v-if="model.menuType !== 'F'" label="菜单路径" name="path">
|
||||||
<div>
|
path <AInput v-model:value="model.path" />
|
||||||
<!-- @vue-ignore -->
|
component <AInput v-model:value="model.component" />
|
||||||
<ATreeSelect
|
name <AInput v-model:value="model.name" />
|
||||||
v-if="model.isFrame === '1'"
|
|
||||||
v-model:value="model.path"
|
|
||||||
show-search
|
|
||||||
:field-names="{ value: 'path', label: 'path' }"
|
|
||||||
allow-clear
|
|
||||||
:tree-data="componentOptions"
|
|
||||||
tree-node-filter-prop="label"
|
|
||||||
@select="(_val, node) => handleTreeSelect(node)"
|
|
||||||
/>
|
|
||||||
<AInput v-else v-model:value="model.path" />
|
|
||||||
</div>
|
|
||||||
</AFormItem>
|
</AFormItem>
|
||||||
<AFormItem v-if="model.menuType === 'C'" label="隐藏菜单" name="hideInMenu">
|
<AFormItem v-if="model.menuType === 'C'" label="隐藏菜单" name="hideInMenu">
|
||||||
<ASwitch v-model:checked="model.hideInMenu" checked-value="0" un-checked-value="1" />
|
<ASwitch v-model:checked="model.hideInMenu" checked-value="0" un-checked-value="1" />
|
||||||
|
|||||||
0
src/views/uui/kv/index.vue
Normal file
0
src/views/uui/kv/index.vue
Normal file
Reference in New Issue
Block a user