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

子系统怎么定义、什么时候注册
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 里同名字段。没写的字段保留前一个子系统的值。
评论
加载评论中…