节点在线、应用在线、配置在线使用令牌查询
大石头 authored at 2021-12-16 19:49:30
6.69 KiB
Stardust
// src/main.ts
import { initApp } from '@newlifex/cube-vue/core/initApp';
import { registerLayout } from '@newlifex/cube-vue/core/composables/useLayout';
import router from '@newlifex/cube-vue/core/router';
import { resolvePageComponent } from '@newlifex/cube-vue/core/utils/menuRoutes';
// import CosmicLayout from './layouts/CosmicLayout/index.vue';
// import './layouts/CosmicLayout/variables.css';
import '@newlifex/cube-vue/core/global.css';
// 星尘设计系统:设计令牌 + Element 主题覆盖(独立 import,避免 PostCSS @import 相对路径解析异常)
import './design-system/tokens.css';
import './design-system/element-theme-override.css';
// 全局样式(仅 @tailwind 指令)
import './styles/global.css';
import StardustLayout from './layouts/StardustLayout/index.vue';
import './layouts/StardustLayout/variables.css';

// 全局激活暗色:element-theme-override.css 的 html.dark 块依赖此 class
document.documentElement.classList.add('dark');
// 调用链可视化隐藏页(根 Area / Monitors Area),catch-all 仅扫 **/index.vue,
// 且三级路由 /Trace/:id 不会被菜单注册,故手动 addRoute 兜底(参考 Doc/待迁移页面.md §3.6)。
// 注意:main.ts 位于 src/ 下,apps 目录与 src 同级,故相对路径为 ../apps/...
import TraceIndex from '../apps/stardust/src/views/Trace/index.vue';
import TraceDetail from '../apps/stardust/src/views/Trace/detail.vue';
import TraceGraph from '../apps/stardust/src/views/Trace/graph.vue';
import MonitorsTraceGraph from '../apps/stardust/src/views/Monitors/Trace/graph.vue';
// 星尘控制台 4 页空壳(待 A2 批次实现内容)
import StardustOverview from '../apps/stardust/src/views/Stardust/Overview.vue';
import StardustNodes from '../apps/stardust/src/views/Stardust/Nodes.vue';
// import StardustApps from '../apps/stardust/src/views/Stardust/Apps.vue';
import StardustSettings from '../apps/stardust/src/views/Stardust/Settings.vue';

// registerLayout(
//   {
//     id: 'cosmic',
//     label: '无界星图',
//     icon: '🌌',
//     description: '星图风格布局 · 星空背景 + 导航坞 + 曲速命令',
//     component: CosmicLayout,
//   },
//   false,
// );

// 星尘控制台布局:设为默认布局(第二参 true),这是应用的唯一入口布局。
registerLayout(
  {
    id: 'stardust',
    label: '星尘控制台',
    icon: '🌠',
    description: '星尘设计系统控制台布局',
    component: StardustLayout,
  },
  true,
);

initApp((app: any) => {
  // 首页默认重定向到星尘概览页,避免根路径空白
  router.addRoute({
    path: '/',
    name: 'HomeRedirect',
    redirect: '/stardust/overview',
  });

  // 隐藏菜单页 Detail 兜底:Deployment/AppPipelineRun 为 [Menu(40,false)],
  // 框架菜单路由不会注册 /Deployment/AppPipelineRun/<id> 三级路由,
  // 因此在此处手动注册动态路由,将其指向同一目录下的 index.vue,
  // 由 index.vue 根据 route.params.id 渲染 detail.vue 组件。
  router.addRoute({
    path: '/Deployment/AppPipelineRun/:id',
    name: 'AppPipelineRunDetail',
    component: resolvePageComponent('/Deployment/AppPipelineRun'),
    meta: { auth: true, title: '流水线运行详情' },
  });

  // —— 调用链可视化隐藏页兜底(§3.6:三级路由不被菜单注册,graph.vue 不被 glob 命中)——
  // Trace/Index:#/Trace/<traceId>(调用链树 + layout=detail 追踪明细),复用 index.vue
  router.addRoute({
    path: '/Trace/:id',
    name: 'TraceIndex',
    component: TraceIndex,
    meta: { auth: true, title: '调用链' },
  });
  // Trace/Detail:#/Trace/Detail?id=<traceId>
  router.addRoute({
    path: '/Trace/Detail',
    name: 'TraceDetail',
    component: TraceDetail,
    meta: { auth: true, title: '追踪明细' },
  });
  // Trace/Graph:#/Trace/Graph?traceId=<id>(文件名为 graph.vue,catch-all 不命中,必须手动注册)
  router.addRoute({
    path: '/Trace/Graph',
    name: 'TraceGraph',
    component: TraceGraph,
    meta: { auth: true, title: '调用链关系图' },
  });
  // Monitors/Trace/Graph:#/Monitors/Trace/Graph?traceId=<id>(同上,graph.vue 不命中 glob)
  router.addRoute({
    path: '/Monitors/Trace/Graph',
    name: 'MonitorsTraceGraph',
    component: MonitorsTraceGraph,
    meta: { auth: true, title: '调用链关系图' },
  });

  // —— AutoPage 详情页兜底:cube-vue 的 ViewResolver 不会自动注册 #/Area/Controller/:id
  // 三级详情路由(与 AppPipelineRun 同理),此处手动 addRoute 指向各业务目录的 detail.vue。
  // 节点详情需额外列出该节点部署的应用(AppDeployNode?nodeId)。
  router.addRoute({
    path: '/Nodes/Node/:id',
    name: 'NodeDetail',
    component: () => import('../apps/stardust/src/views/Nodes/Node/detail.vue'),
    meta: { auth: true, title: '节点详情' },
  });
  router.addRoute({
    path: '/Nodes/Node/Detail/:id',
    component: () => import('../apps/stardust/src/views/Nodes/Node/detail.vue'),
    meta: { auth: true, title: '节点详情' },
  });
  router.addRoute({
    path: '/Registry/App/:id',
    name: 'AppDetail',
    component: () => import('../apps/stardust/src/views/Registry/App/detail.vue'),
    meta: { auth: true, title: '应用详情' },
  });
  router.addRoute({
    path: '/Registry/App/Detail/:id',
    component: () => import('../apps/stardust/src/views/Registry/App/detail.vue'),
    meta: { auth: true, title: '应用详情' },
  });

  // —— 星尘控制台 4 页:手动 addRoute 注册(参考 Trace 先例),避免与 AutoPage 菜单树冲突 ——
  // 路由统一用小写 /stardust/*,与 SideBar.vue 的 router-link 及 beforeEach 守卫前缀一致。
  // main.ts 位于 src/ 下,apps 与 src 同级,故相对路径为 ../apps/...
  router.addRoute({
    path: '/stardust/overview',
    name: 'StardustOverview',
    component: StardustOverview,
    meta: { auth: true, title: '概览' },
  });
  router.addRoute({
    path: '/stardust/nodes',
    name: 'StardustNodes',
    component: StardustNodes,
    meta: { auth: true, title: '节点管理' },
  });
  router.addRoute({
    path: '/stardust/apps',
    name: 'StardustApps',
    component: () => import('../apps/stardust/src/views/Stardust/Apps.vue'),
    meta: { auth: true, title: '应用管理' },
  });
  router.addRoute({
    path: '/stardust/settings',
    name: 'StardustSettings',
    component: StardustSettings,
    meta: { auth: true, title: '设置' },
  });

  // 布局默认为 stardust(注册时已 setAsCurrent=true),不再做页面级布局切换。
  // 用户如需切回 cosmic 仍可通过布局切换器手动选择。

  // 兼容非菜单隐藏页访问时菜单高区:若后续需要,可再扩展此处兜底规则。
  void app;
});