2025-12-29 03:06:49 +08:00
|
|
|
|
// eslint-disable-next-line
|
|
|
|
|
|
import { UserLayout, BasicLayout, BlankLayout } from '@/layouts'
|
|
|
|
|
|
|
|
|
|
|
|
export const asyncRouterMap = [
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/',
|
|
|
|
|
|
name: 'index',
|
|
|
|
|
|
component: BasicLayout,
|
|
|
|
|
|
meta: { title: 'menu.home' },
|
|
|
|
|
|
redirect: '/dashboard',
|
|
|
|
|
|
children: [
|
|
|
|
|
|
// 仪表盘
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/dashboard',
|
|
|
|
|
|
name: 'Dashboard',
|
|
|
|
|
|
component: () => import('@/views/dashboard'),
|
|
|
|
|
|
meta: { title: 'menu.dashboard', keepAlive: true, icon: 'dashboard', permission: ['dashboard'] }
|
|
|
|
|
|
},
|
2026-01-24 23:26:26 +08:00
|
|
|
|
// 全球金融面板
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/global-market',
|
|
|
|
|
|
name: 'GlobalMarket',
|
|
|
|
|
|
component: () => import('@/views/global-market'),
|
|
|
|
|
|
meta: { title: 'menu.dashboard.globalMarket', keepAlive: true, icon: 'global', permission: ['dashboard'] }
|
|
|
|
|
|
},
|
2025-12-29 03:06:49 +08:00
|
|
|
|
// AI 分析
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/ai-analysis/:pageNo([1-9]\\d*)?',
|
|
|
|
|
|
name: 'Analysis',
|
|
|
|
|
|
component: () => import('@/views/ai-analysis'),
|
|
|
|
|
|
meta: { title: 'menu.dashboard.analysis', keepAlive: false, icon: 'thunderbolt', permission: ['dashboard'] }
|
|
|
|
|
|
},
|
|
|
|
|
|
// 指标分析
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/indicator-analysis',
|
|
|
|
|
|
name: 'Indicator',
|
|
|
|
|
|
component: () => import('@/views/indicator-analysis'),
|
|
|
|
|
|
meta: { title: 'menu.dashboard.indicator', keepAlive: true, icon: 'line-chart', permission: ['dashboard'] }
|
|
|
|
|
|
},
|
|
|
|
|
|
// 交易助手
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/trading-assistant',
|
|
|
|
|
|
name: 'TradingAssistant',
|
|
|
|
|
|
component: () => import('@/views/trading-assistant'),
|
|
|
|
|
|
meta: { title: 'menu.dashboard.tradingAssistant', keepAlive: true, icon: 'robot', permission: ['dashboard'] }
|
|
|
|
|
|
},
|
2026-01-12 22:36:10 +08:00
|
|
|
|
// 资产监测
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/portfolio',
|
|
|
|
|
|
name: 'Portfolio',
|
|
|
|
|
|
component: () => import('@/views/portfolio'),
|
|
|
|
|
|
meta: { title: 'menu.dashboard.portfolio', keepAlive: true, icon: 'fund', permission: ['dashboard'] }
|
|
|
|
|
|
},
|
2026-01-14 05:29:55 +08:00
|
|
|
|
// 系统设置 (admin only)
|
2025-12-29 19:05:17 +08:00
|
|
|
|
{
|
|
|
|
|
|
path: '/settings',
|
|
|
|
|
|
name: 'Settings',
|
|
|
|
|
|
component: () => import('@/views/settings'),
|
2026-01-14 05:29:55 +08:00
|
|
|
|
meta: { title: 'menu.settings', keepAlive: false, icon: 'setting', permission: ['admin'] }
|
|
|
|
|
|
},
|
|
|
|
|
|
// 用户管理 (admin only)
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/user-manage',
|
|
|
|
|
|
name: 'UserManage',
|
|
|
|
|
|
component: () => import('@/views/user-manage'),
|
|
|
|
|
|
meta: { title: 'menu.userManage', keepAlive: false, icon: 'team', permission: ['admin'] }
|
|
|
|
|
|
},
|
|
|
|
|
|
// 个人中心
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/profile',
|
|
|
|
|
|
name: 'Profile',
|
|
|
|
|
|
component: () => import('@/views/profile'),
|
|
|
|
|
|
meta: { title: 'menu.myProfile', keepAlive: false, icon: 'user', permission: ['dashboard'] }
|
2026-01-24 23:26:26 +08:00
|
|
|
|
},
|
|
|
|
|
|
// 官方社区(keepAlive disabled intentionally for iframe page)
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/indicator-community',
|
|
|
|
|
|
name: 'IndicatorCommunity',
|
|
|
|
|
|
component: () => import('@/views/indicator-community'),
|
|
|
|
|
|
meta: { title: 'menu.dashboard.community', keepAlive: false, icon: 'shop', permission: ['dashboard'] }
|
2025-12-29 03:06:49 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// other
|
|
|
|
|
|
/*
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/other',
|
|
|
|
|
|
name: 'otherPage',
|
|
|
|
|
|
component: PageView,
|
|
|
|
|
|
meta: { title: '其他组件', icon: 'slack', permission: [ 'dashboard' ] },
|
|
|
|
|
|
redirect: '/other/icon-selector',
|
|
|
|
|
|
children: [
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/other/icon-selector',
|
|
|
|
|
|
name: 'TestIconSelect',
|
|
|
|
|
|
component: () => import('@/views/other/IconSelectorView'),
|
|
|
|
|
|
meta: { title: 'IconSelector', icon: 'tool', keepAlive: true, permission: [ 'dashboard' ] }
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/other/list',
|
|
|
|
|
|
component: RouteView,
|
|
|
|
|
|
meta: { title: '业务布局', icon: 'layout', permission: [ 'support' ] },
|
|
|
|
|
|
redirect: '/other/list/tree-list',
|
|
|
|
|
|
children: [
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/other/list/tree-list',
|
|
|
|
|
|
name: 'TreeList',
|
|
|
|
|
|
component: () => import('@/views/other/TreeList'),
|
|
|
|
|
|
meta: { title: '树目录表格', keepAlive: true }
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/other/list/edit-table',
|
|
|
|
|
|
name: 'EditList',
|
|
|
|
|
|
component: () => import('@/views/other/TableInnerEditList'),
|
|
|
|
|
|
meta: { title: '内联编辑表格', keepAlive: true }
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/other/list/user-list',
|
|
|
|
|
|
name: 'UserList',
|
|
|
|
|
|
component: () => import('@/views/other/UserList'),
|
|
|
|
|
|
meta: { title: '用户列表', keepAlive: true }
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/other/list/role-list',
|
|
|
|
|
|
name: 'RoleList',
|
|
|
|
|
|
component: () => import('@/views/other/RoleList'),
|
|
|
|
|
|
meta: { title: '角色列表', keepAlive: true }
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/other/list/system-role',
|
|
|
|
|
|
name: 'SystemRole',
|
|
|
|
|
|
component: () => import('@/views/role/RoleList'),
|
|
|
|
|
|
meta: { title: '角色列表2', keepAlive: true }
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/other/list/permission-list',
|
|
|
|
|
|
name: 'PermissionList',
|
|
|
|
|
|
component: () => import('@/views/other/PermissionList'),
|
|
|
|
|
|
meta: { title: '权限列表', keepAlive: true }
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
*/
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '*',
|
|
|
|
|
|
redirect: '/404',
|
|
|
|
|
|
hidden: true
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 基础路由
|
|
|
|
|
|
* @type { *[] }
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const constantRouterMap = [
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/user',
|
|
|
|
|
|
component: UserLayout,
|
|
|
|
|
|
redirect: '/user/login',
|
|
|
|
|
|
hidden: true,
|
|
|
|
|
|
children: [
|
|
|
|
|
|
{
|
|
|
|
|
|
path: 'login',
|
|
|
|
|
|
name: 'login',
|
|
|
|
|
|
component: () => import(/* webpackChunkName: "user" */ '@/views/user/Login')
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
path: '/404',
|
|
|
|
|
|
component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404')
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|