修复维护通知自适应布局与导航重复焦点

This commit is contained in:
cieanyau committed 2026-11-06 03:12:03 +08:00
1 parent a6b2bfd4dc
commit b4915d0ae5
12 files changed
+438 -49

No files matched your search

+53 -18
View File
@@ -137,6 +137,28 @@ var Ce = {
O = useRoute(),
k = useTheme_t(),
A = useSiteConfig_t();
// 固定层共用实际维护条高度,避免换行、字体加载或窗口变化后仍按单行常量占位。
const maintenanceBanner = ref(null);
const bannerHeight = ref(0);
let bannerObserver;
watch(
maintenanceBanner,
(element) => {
bannerObserver?.disconnect();
const measure = () => {
bannerHeight.value = element
? Math.ceil(element.getBoundingClientRect().height)
: 0;
};
measure();
if (element) {
bannerObserver = new ResizeObserver(measure);
bannerObserver.observe(element);
}
},
{ flush: "post" },
);
onBeforeUnmount(() => bannerObserver?.disconnect());
onMounted(() => {
(A.load().catch(() => {}),
w.isLoggedIn && !w.overview && w.fetchOverview().catch(() => {}),
@@ -548,6 +570,15 @@ var Ce = {
return (
useHead(() => ({
title: `${$.value.at(-1) || `会员中心`} - ${A.siteName.value}`,
// 通知 Teleport 在 body,变量发布到 html;Unhead 随布局卸载逐属性清理,不影响主题样式。
htmlAttrs: {
style: {
"--console-header-height": "56px",
"--console-banner-height": `${A.maintenance.value ? bannerHeight.value : 0}px`,
"--console-top-offset":
"calc(var(--console-header-height) + var(--console-banner-height))",
},
},
})),
// 导航、面包屑和账户/消息浮层来自同一布局状态;移动侧栏需保留焦点约束与滚动锁清理。
(e, r) => {
@@ -591,25 +622,29 @@ var Ce = {
: createCommentVNode(``, !0),
unref(A).maintenance.value
? (openBlock(),
createElementBlock(`div`, Ce, [
(r[6] ||= createElementVNode(
`i`,
{
class: `pi pi-exclamation-triangle`,
},
null,
-1,
)),
createElementVNode(
`span`,
null,
toDisplayString(
unref(A).config.value?.maintenance_mode_message ||
`站点维护中,部分功能可能不可用。`,
createElementBlock(
`div`,
{ ...Ce, ref: maintenanceBanner },
[
(r[6] ||= createElementVNode(
`i`,
{
class: `pi pi-exclamation-triangle`,
},
null,
-1,
)),
createElementVNode(
`span`,
null,
toDisplayString(
unref(A).config.value?.maintenance_mode_message ||
`站点维护中,部分功能可能不可用。`,
),
1,
),
1,
),
]))
],
))
: createCommentVNode(``, !0),
createElementVNode(
`aside`,