From 13e7a4c6022ce1cb5cf81f054f26737d322c8ea4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=BB=84=E8=87=AA=E8=BE=BE?= <980324341@qq.com>
Date: Sat, 5 Sep 2026 12:26:30 +0800
Subject: [PATCH] =?UTF-8?q?task-14(=E5=A3=B3=E5=B1=82/=E8=B7=AF=E7=94=B1):?=
=?UTF-8?q?=20=E5=AE=9E=E7=8E=B0=E4=BE=A7=E8=BE=B9=E6=A0=8F=E6=8A=98?=
=?UTF-8?q?=E5=8F=A0=E4=B8=8E=E7=AA=84=E5=B1=8F=E8=A1=8C=E4=B8=BA=E5=8F=8A?=
=?UTF-8?q?=E5=81=8F=E5=A5=BD=E6=8C=81=E4=B9=85=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
sidebar-collapse 提供阈值/宽高常量、toggle、localStorage 偏好读写(失败容忍)、
initialCollapsed(持久化优先,窄屏自动收起);AdminLayout 接入并持久化折叠状态。
---
admin-frontend-vue/src/layout/AdminLayout.vue | 20 +++-
.../src/layout/sidebar-collapse.ts | 56 +++++++++++
admin-frontend-vue/tests/task-14.test.ts | 93 +++++++++++++++++++
3 files changed, 167 insertions(+), 2 deletions(-)
create mode 100644 admin-frontend-vue/src/layout/sidebar-collapse.ts
create mode 100644 admin-frontend-vue/tests/task-14.test.ts
diff --git a/admin-frontend-vue/src/layout/AdminLayout.vue b/admin-frontend-vue/src/layout/AdminLayout.vue
index 9519949c..a3ad28ff 100644
--- a/admin-frontend-vue/src/layout/AdminLayout.vue
+++ b/admin-frontend-vue/src/layout/AdminLayout.vue
@@ -12,11 +12,27 @@ import {
shouldShowEmptyMenu,
} from '@/layout/empty-state'
import GlobalErrorContainer from '@/layout/GlobalErrorContainer.vue'
+import { initialCollapsed, toggleCollapsed, writeCollapsePreference } from '@/layout/sidebar-collapse'
const route = useRoute()
const router = useRouter()
const session = useAdminSessionStore()
-const collapsed = ref(false)
+const collapsed = ref(readInitialCollapse())
+
+function readInitialCollapse(): boolean {
+ const storage = typeof window !== 'undefined' ? window.localStorage : null
+ const width = typeof window !== 'undefined' ? window.innerWidth : 0
+ return initialCollapsed(width, storage)
+}
+
+function setCollapsed(value: boolean): void {
+ collapsed.value = value
+ if (typeof window !== 'undefined') writeCollapsePreference(window.localStorage, value)
+}
+
+function toggleSidebar(): void {
+ setCollapsed(toggleCollapsed(collapsed.value))
+}
const activePath = computed(() => route.path)
const menuEntries = computed(() => toSidebarEntries(session.menuTree))
@@ -65,7 +81,7 @@ async function signOut() {
-