文档目录
glen
· 预计阅读 1 分钟

子系统怎么定义、什么时候注册

本文导航
子系统怎么定义、什么时候注册

子系统怎么定义、什么时候注册

import { defineSubsystem } from "@bit-labs.cn/owl-ui";

export const orderUi = defineSubsystem({
  name: "order",
  routes: [],
  viewModules: import.meta.glob("./views/**/*.{vue,tsx}"),
  viewModulesPathPrefix: "/order",
  menuContributions: [],
  install(app) {
    // 注册这个子系统自己的组件或指令
  }
});

defineSubsystem 不做校验,只返回你传入的对象。校验发生在使用时:路径对不上就是空白页,父菜单名对不上就是控制台一条 warning。

字段

字段 作用
name 唯一标识。没写 viewModulesPathPrefix 时,前缀回退成 /${name}
routes 静态路由,格式和框架 router/modules 一样。菜单全由后端返回时可以空着
viewModules 懒加载组件表,通常是 import.meta.glob
viewModulesPathPrefix 把 glob 键里的 ./views 换成这个前缀
menuContributions 按父路由 name 追加子菜单
locales { "zh-CN": {...}, en: {...} }
login 只替换登录页已有槽位,不改布局
install 可以是 async。框架在公开配置读完之后 await 它

注册时机

registerSubsystems 在 createApp 之前执行。它会:

  • 把 ./views/... 重写成 {prefix}/...,放进全局视图表;
  • 把菜单贡献追加到一个列表,等动态菜单回来再合并;
  • 登录定制按字段浅合并,数组里靠后的子系统覆盖靠前的。

所以宿主这样写:

await createFlexAdmin({
  subsystems: [adminUi, orderUi]
});

orderUi 的登录定制会盖过 adminUi 里同名字段。没写的字段保留前一个子系统的值。

评论

加载评论中…

上一篇 子系统 下一篇 视图模块和路径前缀

BitLabs © 2026 · 论坛讨论 · 博客长文 · 文档手册