diff --git a/README.md b/README.md index 02b7be2..e7e7133 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ app.mount('#app') └── src/shrimp/ 消费侧目录,可任意命名 ├── components/ │ ├── login.vue 覆盖框架内置 login 页 - │ ├── topbar.vue 覆盖顶栏 + │ ├── layout.vue 覆盖整体布局壳 │ └── fields/ │ └── FieldRelativeTime.vue 注册字段类型 relativeTime └── module/ @@ -52,34 +52,83 @@ app.mount('#app') └── orders.vue 子模块,parent=user ``` -### 框架内置 slot(可覆盖,suffix 列表) +### 覆盖颗粒度只在 3 个入口 -``` -components/login.vue components/404.vue components/layout.vue -components/logo.vue components/navMenu.vue components/sideM.vue -components/topbar.vue components/userbar.vue -components/ShrimpLangSwitch.vue components/ShrimpPowerTree.vue -components/ShrimpTable.vue components/ShrimpEditDrawer.vue -components/ShrimpFilterDrawer.vue components/ShrimpFilterTrigger.vue -components/ShrimpSearchInput.vue -components/fields/Field{String,Boolean,Date,Json,Number,Password,Relation,Select,Tab,Textarea,RelativeTime}.vue -``` +框架内 .vue 之间的 peer 引用是**硬编码静态 import**,override 颗粒度就停在下面这 3 类入口,不会一路传递下去: + +| 入口 | 后缀 | 说明 | +| --- | --- | --- | +| **router targets** | `components/login.vue`、`components/layout.vue`、`components/404.vue` | vue-router 三个根级路由组件 | +| **module routes** | `module/.vue`、`module//.vue` | 走 `registerRoute` 的业务模块/子模块 | +| **field registry** | `components/fields/Field.vue` | 字段类型注册表(文件名首字母小写 = type 键) | + +想换更细的部件(比如 layout 里的 topbar)就在消费侧的 `layout.vue` 自己组装 — 框架不再代理任何 peer 切换。 ### 字段类型注册 `components/fields/Field.vue` 自动注册类型 ``(首字母小写): -| 文件 | type 注册键 | -| ------------------------ | ------------------ | -| `FieldString.vue` | `string` | -| `FieldRelativeTime.vue` | `relativeTime` | +| 文件 | type 注册键 | +| -------------------------- | ---------------- | +| `FieldString.vue` | `string` | +| `FieldRelativeTime.vue` | `relativeTime` | | 你自己的 `FieldMyType.vue` | `myType` | -后端 moduleInfo 里 `field.type === 'myType'` 时就用你这个组件。 +后端 moduleInfo 里 `field.type === 'myType'` 时就用你这个组件。内置类型: `string` / `boolean` / `date` / `json` / `number` / `password` / `relation` / `select` / `tab` / `textarea` / `relativeTime`。 ### 业务模块 -`components/X.vue` 命中 `moduleKey === 'X'` 的路由,自动作为内容页。子表用嵌套目录(`module//.vue`)。 +`module/.vue` 命中 `moduleKey === ''` 的路由,自动作为内容页。子表用嵌套目录(`module//.vue`)。 + +### 例子: 覆盖 login 页 + +```vue + + + + +``` + +只要文件落在 `src/shrimp/components/login.vue`,被 `sources` 的 glob 扫到,框架的 `/login` 路由就会用你这份替换内置版本。 ## 消费的契约