From 1e07c5903fcf9ff2ae666f833851ee7238ecacc4 Mon Sep 17 00:00:00 2001 From: Sakurasan <26715255+Sakurasan@users.noreply.github.com> Date: Sun, 30 Aug 2026 01:35:10 +0800 Subject: [PATCH] redesign: site-wide UI/UX overhaul per web-interface-guidelines - unified design system: focus-visible rings, reduced-motion, color-scheme, theme persistence, tightened emerald radius tokens (checkbox circle bug) - redesigned all pages: Home/Login/Signup/404, dashboard shell, Overview hero (time-based gradient), list pages with empty states, form modals, detail pages - role-scoped navigation: console menu vs admin console with cross-switch entries, Chinese route titles and breadcrumbs - theme switcher (light/dark/auto) via composables/theme, home + dashboard - state-driven dropdowns (touch-safe logout), menu divider pointer-events fix - btn-primary unified to black-on-white / white-on-black per theme - update REFACTOR_PLAN.md (increments 2-6) --- REFACTOR_PLAN.md | 56 +++ frontend/index.html | 12 + frontend/src/components/common/Pagination.vue | 52 +-- frontend/src/components/common/TagInput.vue | 4 +- frontend/src/components/common/Toast.vue | 36 +- .../components/dashboard/BreadcrumbHeader.vue | 84 ++-- frontend/src/components/dashboard/Sidebar.vue | 99 ++-- frontend/src/composables/theme.ts | 60 +++ frontend/src/layouts/DashboardLayout.vue | 259 ++++++---- frontend/src/styles/main.css | 80 ++++ frontend/src/utils/router_menu.ts | 128 ++--- frontend/src/views/Home.vue | 224 +++++---- frontend/src/views/auth/Login.vue | 154 +++--- frontend/src/views/auth/Signup.vue | 89 ++-- frontend/src/views/dashboard/KeyNew.vue | 330 ++++++------- frontend/src/views/dashboard/KeyView.vue | 204 ++++---- frontend/src/views/dashboard/Keys.vue | 254 +++++----- frontend/src/views/dashboard/Overview.vue | 255 +++++----- frontend/src/views/dashboard/Profile.vue | 441 ++++++++---------- frontend/src/views/dashboard/Settings.vue | 305 +++++------- frontend/src/views/dashboard/TokenNew.vue | 247 +++++----- frontend/src/views/dashboard/Tokens.vue | 151 +++--- frontend/src/views/dashboard/User.vue | 268 ++++++----- frontend/src/views/dashboard/UserNew.vue | 281 +++++------ frontend/src/views/dashboard/UserView.vue | 373 +++++++-------- frontend/src/views/error/NotFound.vue | 66 +-- 26 files changed, 2189 insertions(+), 2323 deletions(-) create mode 100644 frontend/src/composables/theme.ts diff --git a/REFACTOR_PLAN.md b/REFACTOR_PLAN.md index 8bda6b2..f32229d 100644 --- a/REFACTOR_PLAN.md +++ b/REFACTOR_PLAN.md @@ -228,3 +228,59 @@ src/ - `frontend/README.md` 补充开发文档(启动方式、环境变量表)。 - 验证:后端 8080 + Vite 5173 同时运行,`curl http://localhost:5173/` 返回 SPA 页面;经 5173 代理的 `POST /api/auth/login` 返回后端真实校验 JSON、`GET /api/auth/passkey/begin` 返回 200,代理链路完整。 - 说明:这是构建基础设施改动,触及 `cmd/openteam/main.go` 一行 embed 指令;后端业务逻辑零改动。生产构建流程不受影响(Docker 内 dist 由前端阶段提供)。 + +### 增量 2 — 全站 UI/UX 重设计(web-design-guidelines)✅ + +依据:Vercel Web Interface Guidelines(`~/.agents/skills/web-design-guidelines` 拉取的最新规则集)。先对全部页面截图建立基线,再逐页重写模板;**业务逻辑、接口调用、路由全部未动**。 + +- 设计系统基础(`styles/main.css` + `index.html`): + - 深浅色 `color-scheme` 跟随主题;``;内联脚本恢复上次主题(不再每次刷新回 emerald)。 + - 全局 `:focus-visible` 焦点环、`touch-action: manipulation`、`prefers-reduced-motion` 全局降级、`.modal-box` 防滚动穿透。 + - 覆写 emerald 主题圆角令牌(默认 selector 圆角 1rem 使小复选框渲染成正圆的 bug)。 +- 壳层:侧栏启用 daisyUI 5 `menu-active` 高亮 + sticky;顶栏重排(侧栏开关带 aria-pressed、主题切换持久化 localStorage、用户菜单头像+用户名);主区限宽 max-w-6xl。 +- 页面模式统一:`面包屑 + 大标题 → 描述 + 主操作 → 卡片内容`;列表页统一工具栏/表格/空状态/分页(空数据隐藏分页);表单统一分区标题、label/控件绑定、required 标记、示例占位符、提交按钮 spinner。 +- 主要变更: + - Overview:深色渐变横幅改为品牌 primary→secondary 渐变;信息卡由 badge 滥用改为 dl 键值布局(仅角色/状态保留 badge);时间 tabular-nums。 + - Tokens/Keys/Users 列表:空状态(图标+文案+CTA)、行操作按钮 aria-label、状态筛选改为带计数的下拉、移除两个死的 Filter 输入框、批量操作菜单重排。 + - 弹窗表单(TokenNew/KeyNew/UserNew):去掉 min-h-screen 包裹,适配弹窗容器。 + - 详情页(KeyView/UserView):头像+徽章头部、分区表单、tokens 表格;加载态明确。 + - Profile/Settings:分区卡片(基本信息/密码/Passkeys/关联账号),提交加 spinner。 + - Login/Signup:实体主按钮、内联错误 alert(role=alert)、autocomplete(username/current-password/new-password)、死链"Forgot password?"移除、密码不一致内联提示。 + - Home:导航栏 Star 徽标 + Open Dashboard 主 CTA,hero 文案重写,endpoint 复制组加 label,图片补尺寸。 + - 404:品牌化布局 + 具体文案("doesn't exist or has been moved")。 + - Toast:`aria-live="polite"` + toast-top/end 定位;Pagination:join 样式 + Showing x–y of z + tabular-nums。 +- 顺带修复:DashboardLayout `if (!userInfo)` 恒真导致刷新后头部用户名丢失(改为 `!authStore.user`)。 +- 验证:`pnpm build`(vue-tsc 严格检查)通过;本地起前后端后逐页浏览器截图回归(Users/Overview/Tokens/新建弹窗/Keys 空状态/Profile/404/Home/Login)视觉与交互正常;复选框圆角修复经计算样式确认(16px→8px)。 +- 已知取舍:破坏性操作沿用原生 `confirm()`(满足"需确认"要求,后续可换主题化 modal);列表筛选/分页尚未同步到 URL query(指南建议,列为后续项);"Forgot password?" 为死链已移除。 +- 补充(维护者反馈):Overview 横幅恢复**随时间段变化的配色**(原版行为),四段式与新版式协调——深夜 slate-900→indigo-950、早晨 sky-600→amber-400、白天 blue-600→cyan-400、夜晚 slate-900→indigo-950;白色文字置于渐变左侧深色端保证对比度。顺带修复原版问候语 bug:0-6 点原显示"早上好",现对齐四段为"夜深了"。 + +### 增量 3 — 主题切换(浅色 / 深色 / 自动)✅ + +- 新增 `src/composables/theme.ts`:偏好三态 `light | dark | auto`(浅色映射品牌 emerald 主题),localStorage 持久化(key `theme`),auto 模式监听 `prefers-color-scheme` 实时跟随系统切换;模块级单例状态,主页与仪表盘共享。 +- `index.html` 内联脚本同步三态逻辑(含 auto 解析),首屏不闪烁。 +- 主页导航栏与仪表盘顶栏均提供主题下拉(太阳/月亮/显示器图标随当前偏好变化,当前项 `menu-active` 高亮);仪表盘原先的二态硬切换按钮升级为同一三选下拉,避免两套主题逻辑互相覆盖。 +- 默认偏好为 `auto`(首次访问跟随系统);旧存储值 `emerald` 不再有效,自动回落 auto。 +- 验证:`pnpm build` 通过;浏览器实测浅色↔深色↔自动即时生效、`data-theme` 与 localStorage 值正确、刷新后保持、auto 按系统深色解析为 dark;主页与仪表盘主题共享一致。 + +### 增量 4 — 导航栏按角色分区重设计(参考维护者提供的双栏设计稿)✅ + +- 信息架构对齐设计稿:导航拆为**控制台**(所有用户:仪表盘 / API 密钥 / 账户设置)与**管理后台**(role ≥ 10:用户管理 / 渠道管理)两个区域,按当前路由区域(`/dashboard/manager/*`)切换显示;底部互切入口——控制台区显示「管理后台 →」(仅管理员),后台区显示「← 返回控制台」。 +- `router_menu.ts` 重写:弃用递归菜单生成器,改为显式两套菜单数组;路由 meta 标题中文化(仪表盘 / API 密钥 / 用户管理 / 渠道管理 / 账户设置等)。 +- `BreadcrumbHeader` 增加路由路径→中文标题映射,面包屑与页面标题随之中文化(此前按英文路径段拼接)。 +- 与设计稿的差异(页面对应关系):API 密钥→个人 Tokens 页;渠道管理→上游 Provider Keys 页;设计稿中的用量明细/用量统计/模型定价/系统配置暂无对应页面,未做死链,留作后续功能。 +- 验证:`pnpm build` 通过;浏览器实测 admin 视角(控制台菜单 + 底部管理后台入口 → 后台菜单 + 返回控制台,高亮正确)与普通用户视角(注册 member 账号实测:仅控制台菜单,管理后台入口数量为 0);中文面包屑生效。 +- 补充(维护者反馈):「API 密钥」菜单项与页面标题改名为 **API Keys**;面包屑重设计——废弃路径段拼接,改为按路由名显式定义层级:顶级页面(仪表盘/API Keys/账户设置)不显示面包屑仅保留标题,管理后台列表页显示「管理后台」一级,详情页显示「管理后台 / 列表页」两级(末级为当前页标题),标题统一取自定义 title 或路由 meta.title。 +- 补充(交互收尾):移动端抽屉在路由切换后自动收起(router.afterEach);顶栏主题/个人下拉为焦点展开型,选择后主动移除焦点收起菜单,个人菜单按钮补 aria-expanded 语义。注:DashboardLayout 模板含维护者手动增强的个人菜单(身份信息头 + 管理后台入口),脚本已按模板对齐(handleMenuAction / isAdminUser)。 + +### 增量 5 — 个人下拉修复与触屏可用性(维护者反馈)✅ + +- 问题 1(内容不对):身份信息行的 `email || '@username'` 回退会显示伪社交句柄,且已在管理后台时仍显示「管理后台」入口。修复:第二行仅在存在邮箱时显示邮箱、有显示名时显示 `@用户名`、否则不显示;名称行追加角色徽章(Root/Admin/User);「管理后台」入口在后台区域隐藏(`isAdminUser && !isAdminArea`)。 +- 问题 2(手机点退出无反应):daisyUI CSS 下拉依赖焦点展开,触屏点击菜单项时按钮失焦、下拉先于 click 关闭导致点击落空。修复:主题与个人下拉改为**状态驱动**(`dropdown-open` class + `v-if` 遮罩点击关闭 + Escape 关闭 + 路由切换关闭),互斥打开;主页主题下拉同步修复。 +- 验证:`pnpm build` 通过;桌面实测下拉内容(root + Root 徽章 + @admin,菜单项完整);移动端 390px 实测点「退出登录」成功跳转 /login 且 token 清除;随后已恢复 admin 会话与桌面视口。 +- 补充(维护者反馈):个人下拉内的 `
` 分割线被 daisyUI menu 的通用子元素样式选中(cursor: pointer + hover 背景,可点击),已为其 li 加 `pointer-events-none select-none`,实测恢复默认光标且不可交互。 + +### 增量 6 — 主按钮统一黑白配色(维护者反馈)✅ + +- 背景:daisyUI dark 主题的 primary 为紫色,普通主按钮(btn-primary)在深色模式下显示为紫底。 +- 方案:`main.css` 覆写 `.btn-primary` 的 daisyUI 颜色变量(`--btn-color` / `--btn-fg`)——浅色主题黑底白字(#171717/#fff,hover 纯黑)、深色主题白底黑字(#fff/#171717,hover 浅灰)。仅影响 btn-primary;success/error/warning/outline/ghost 等特殊按钮与链接、开关、焦点环均保持原样。 +- 验证:`pnpm build` 通过;浏览器实测深色(白底黑字 New Token)与浅色(黑底白字 Log In)两种主题,特殊按钮未受影响;已恢复维护者的 auto 主题偏好与 admin 会话。 diff --git a/frontend/index.html b/frontend/index.html index b97f27f..3dfcc62 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,19 @@ + + OpenTeam +
diff --git a/frontend/src/components/common/Pagination.vue b/frontend/src/components/common/Pagination.vue index 13ab156..9d82cf7 100644 --- a/frontend/src/components/common/Pagination.vue +++ b/frontend/src/components/common/Pagination.vue @@ -1,14 +1,14 @@