From 00c2211271886f144b137e95152280972b6c76ea Mon Sep 17 00:00:00 2001 From: wc24 Date: Tue, 11 Aug 2026 12:18:48 +0800 Subject: [PATCH] =?UTF-8?q?0.8.2=20=E9=A1=B6=E6=A0=8F=E6=94=B9=E8=B5=B0=20?= =?UTF-8?q?resolveVue,=E6=92=A4=E6=8E=89=20headerWidgets?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit headerWidgets 是往 userbar 里插组件的口子:VueAdmin 收一个组件数组、userbar 用 v-for 渲染。它绕开了本包唯一的覆盖机制(sources 路径后缀),等于给同一件事开了 第二条路——而且是条窄路,只能往那一处塞,插进去的东西也没法参与 userbar 自身的 布局与样式。 撤掉它,同时把真问题补上:userbar 之前根本不可覆盖(layout.vue 静态 import), 消费侧就算按约定放了 shrimp/components/userbar.vue 也会被静默忽略——这才是当初 需要 headerWidgets 的原因。现在 userbar 走 resolveVue,整条顶栏都能换。 代价:想改顶栏得整份重写内置那 92 行,不能只插一个部件。这是有意的,覆盖颗粒度 本来就停在入口级(README 那张表),不为单个部件开代理。 README 同步:补上 userbar 这一行,并写明表外路径会被静默忽略、不报错。 --- README.md | 9 +++++---- package-lock.json | 4 ++-- package.json | 2 +- src/VueAdmin.ts | 6 ------ src/components/layout.vue | 9 ++++++--- src/components/userbar.vue | 2 -- 6 files changed, 14 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 4202af9..4ac6cdb 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ shrimp-admin 是**源码 ship**(.ts + .vue 直接发),不带构建产物,由消 "type": "module", "scripts": { "dev": "vite", "build": "vite build" }, "dependencies": { - "shrimp-admin": "git+http://git.zeromvc.com/wc24/shrimp-admin.git#v0.7.10", + "shrimp-admin": "git+http://git.zeromvc.com/wc24/shrimp-admin.git#v0.8.2", // ⚠️ 不能删 —— 下面 6 个是 shrimp-admin 的 peerDependencies, // 必须由消费侧显式装进自己的 dependencies,不能指望 npm 提升碰巧能 import 到 @@ -168,17 +168,18 @@ Vite dev 默认用 **esbuild** 把 node_modules 里的裸导入预打包成 `nod └── orders.vue 子模块,parent=user ``` -### 覆盖颗粒度只在 3 个入口 +### 覆盖颗粒度只在这几个入口 -框架内 .vue 之间的 peer 引用是**硬编码静态 import**,override 颗粒度就停在下面这 3 类入口,不会一路传递下去: +框架内 .vue 之间的 peer 引用是**硬编码静态 import**,override 颗粒度就停在下面这几类入口,不会一路传递下去: | 入口 | 后缀 | 说明 | | --- | --- | --- | | **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 键) | +| **顶栏** | `components/userbar.vue` | 右上角那一条(语言、全屏、用户菜单),整体替换 | -想换更细的部件(比如 layout 里的 topbar)就在消费侧的 `layout.vue` 自己组装 — 框架不再代理任何 peer 切换。 +**表里没有的路径不会被覆盖,而且不报错**——写了个 `components/topbar.vue` 放进 sources,框架照样用内置那份,页面正常打开、你的文件被静默忽略。想换更细的部件就在消费侧的 `layout.vue` 里自己组装,框架不代理 peer 切换。 ### 字段类型注册 diff --git a/package-lock.json b/package-lock.json index 556e1ec..f642575 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "shrimp-admin", - "version": "0.1.0", + "version": "0.8.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "shrimp-admin", - "version": "0.1.0", + "version": "0.8.2", "dependencies": { "shrimp-server": "git+http://git.zeromvc.com/wc24/shrimp-server.git#v0.5.0" }, diff --git a/package.json b/package.json index 865ebdc..04a6272 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "shrimp-admin", - "version": "0.8.1", + "version": "0.8.2", "private": true, "description": "Shrimp 框架前端 — 消费 ShrimpServer + ShrimpTable 契约的经典 Vue3 + Element Plus 实现", "main": "src/index.ts", diff --git a/src/VueAdmin.ts b/src/VueAdmin.ts index 525711b..082e448 100644 --- a/src/VueAdmin.ts +++ b/src/VueAdmin.ts @@ -53,8 +53,6 @@ export interface ShrimpAdminOptions { locales?: Record /** 语言列表,默认 [{ lang: 'zh-cn', name: '简体中文' }] */ langList?: { lang: string; name: string }[] - /** 顶栏(userbar)自定义组件,按序渲染在语言切换左侧。业务侧注入全局头部小部件(如终端商户选择器) */ - headerWidgets?: Component[] } // ============== 源注册表 ============== @@ -167,9 +165,6 @@ export class VueAdmin extends ShrimpClient { state = reactive({ isMobile: false }) - /** 顶栏自定义组件(由 createShrimpAdmin 的 headerWidgets 注入),userbar 按序渲染 */ - headerWidgets: Component[] = [] - private _token: string | null = null get token() { return this._token } set token(value: string | null) { @@ -202,7 +197,6 @@ export class VueAdmin extends ShrimpClient { super() this.config = opts.config this.langList = opts.langList || [{ lang: 'zh-cn', name: '简体中文' }] - this.headerWidgets = opts.headerWidgets || [] if (opts.sources) { Object.assign(externalSources, opts.sources) diff --git a/src/components/layout.vue b/src/components/layout.vue index 81e029e..53207b6 100644 --- a/src/components/layout.vue +++ b/src/components/layout.vue @@ -43,15 +43,18 @@