From 9245c1339abc1d43d6069a2258fd150136aa7b9f Mon Sep 17 00:00:00 2001 From: "3371392206@qq.com" <3371392206@qq.com> Date: Mon, 21 Sep 2026 23:20:59 +0800 Subject: [PATCH] =?UTF-8?q?refactor(admin):=20=E6=8A=8A=E5=8D=95=E6=96=87?= =?UTF-8?q?=E4=BB=B6=20admin.html=20(1075=20=E8=A1=8C)=20=E6=8B=86?= =?UTF-8?q?=E6=88=90=E5=A4=9A=E9=A1=B5=20SPA,URL=20=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E5=88=87=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原 admin.html 是 1075 行的单文件 SPA:登录/仪表盘/音色/设置 4 个面板 挤在一个 Vue 实例里 tab 切换(login -> app shell -> 3 个 section)。 文件太大,样式 + script + template 混在一起,改一个面板要 scroll 整页找位置。 拆分后: router/admin.html 5.4 KB Dashboard (重定向目标,默认页) router/admin-login.html 2.1 KB 登录页 (无 sidebar) router/admin-voices.html 13.3 KB 音色管理 + Add modal router/admin-settings.html 14.1 KB 系统设置 router/admin.css 19.8 KB 共享样式 (4 个页面 + admin-shell.js 共用) router/admin-shell.js 6.9 KB 共享:http client (401 自动清 key)、toast 系统、 login helper、sidebar 渲染、format helpers 最大的页面 14 KB,平均 10 KB,各页只负责自己逻辑。 技术细节: - 栈保持: Vue 3 + Axios 走 CDN,纯静态 HTML,零构建 - URL 路由: /admin /admin/login /admin/voices /admin/settings, router.go 加 4 条 ServeFile 路由 + 2 条静态资源路由 (/admin/admin.css /admin/admin-shell.js) - 抽 serveAdmin(body []byte) http.HandlerFunc helper 避免 4 段重复 - 鉴权: 各页 onMounted 检 sessionStorage.ttsAdminKey,无则 location.href 跳 /admin/login;http client 401 响应拦截器清 key,下个请求被跳到 login - Sidebar 一致: shell.js mountShell({activeNav, overview, voiceCount, ...}) 渲染