0.8.2 顶栏改走 resolveVue,撤掉 headerWidgets
headerWidgets 是往 userbar 里插组件的口子:VueAdmin 收一个组件数组、userbar 用 v-for 渲染。它绕开了本包唯一的覆盖机制(sources 路径后缀),等于给同一件事开了 第二条路——而且是条窄路,只能往那一处塞,插进去的东西也没法参与 userbar 自身的 布局与样式。 撤掉它,同时把真问题补上:userbar 之前根本不可覆盖(layout.vue 静态 import), 消费侧就算按约定放了 shrimp/components/userbar.vue 也会被静默忽略——这才是当初 需要 headerWidgets 的原因。现在 userbar 走 resolveVue,整条顶栏都能换。 代价:想改顶栏得整份重写内置那 92 行,不能只插一个部件。这是有意的,覆盖颗粒度 本来就停在入口级(README 那张表),不为单个部件开代理。 README 同步:补上 userbar 这一行,并写明表外路径会被静默忽略、不报错。
This commit is contained in:
@@ -53,8 +53,6 @@ export interface ShrimpAdminOptions {
|
||||
locales?: Record<string, any>
|
||||
/** 语言列表,默认 [{ 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)
|
||||
|
||||
@@ -43,15 +43,18 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, watch } from "vue";
|
||||
import { vueAdmin } from "../VueAdmin";
|
||||
import { ref, watch, defineAsyncComponent } from "vue";
|
||||
import { vueAdmin, resolveVue } from "../VueAdmin";
|
||||
import { type IMenuItem } from "../IShrimpType";
|
||||
import SideM from "./sideM.vue";
|
||||
import navMenu from "./navMenu.vue";
|
||||
import Topbar from "./topbar.vue";
|
||||
import Userbar from "./userbar.vue";
|
||||
import Logo from "./logo.vue";
|
||||
|
||||
// 顶栏走 resolveVue,消费侧放 shrimp/components/userbar.vue 即可整体替换。
|
||||
// 其余内置组件仍是静态 import——等真有人要覆盖再逐个放开,不预先把整棵树异步化。
|
||||
const Userbar = defineAsyncComponent(resolveVue("components/userbar.vue"));
|
||||
|
||||
// 初始化选中菜单
|
||||
let currentPath = vueAdmin.router.currentRoute.value.path;
|
||||
let pick = vueAdmin.getMenuIndex(currentPath);
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
<template>
|
||||
<div class="user-bar">
|
||||
<!-- 业务侧注入的顶栏部件(headerWidgets),按序渲染在语言切换左侧 -->
|
||||
<component :is="w" v-for="(w, i) in vueAdmin.headerWidgets" :key="i" />
|
||||
<LangSwitch class="panel-item" />
|
||||
<div class="panel-item" @click="screen">
|
||||
<el-icon><el-icon-full-screen /></el-icon>
|
||||
|
||||
Reference in New Issue
Block a user