fix(web): 控制台界面细节与 uhd_web 控件规范对齐

- 顶栏搜索移进右侧玻璃胶囊;输入框改淡玻璃(边线 0.46 → 0.16,悬停加深,聚焦 / 出错保留光晕)
- 新增 SegmentedControl(滑动 seg-thumb),替换站点、下载、订阅、文件、智能体列表及对话框里的实心选中块;Tabs 改为同一枚滑块
- 开关型按钮统一 outline + aria-pressed 选中外观;页头 / 工具栏次操作描边、图标钮描边圆;文件排序改 Select;下载总速度加标签
- 分页一页放得下时只留总数、空列表不渲染、按容器宽度收起按钮
- 运行状态存储区重排;智能体列表页与会话页共用外壳路由,标题与左栏不再重挂载
- 站点卡片「⋯」不再单独换行;设置导航、状态计数、多选条件改玻璃选中态

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-10-08 12:02:48 +08:00
1 parent 8ff1817845
commit c9b4ceb301
32 files changed
+753 -639

No files matched your search

+1
View File
@@ -23,3 +23,4 @@
- `EmptyState`:空态/建设中占位;`plain` 用于卡片内部。
- `StatusBadge`:`success | warning | destructive | neutral` 四种语气,必须带文字。
- `nav.ts`:12 个工作区的导航表,标题与说明同时供占位页使用。
- `SegmentedControl`(`components/ui/segmented.tsx`):单选分段,滑动的 `seg-thumb`;用法见 [ui-controls.md](ui-controls.md)「本项目(控制台)的落地」。
+2 -2
View File
@@ -123,9 +123,9 @@
- 侧栏的选中项由滑块(`seg-thumb`)承担主要形态,导航文字与 hover 保持清晰;分组展开、滚动和路由变化都会影响滑块位置。
- 控制台侧栏贴边,不做浮起卡片;右边不画硬分隔线,由 `pg-chrome-side` 给内侧细亮边、外侧细暗线和淡投影。分组小标题(概览、获取、整理、系统)保留:它们和菜单项不同名,是导航的分区。折叠开关在标志行:展开时在名称右侧,收起后标志悬停变为展开图标。
- 控制台顶栏与登录页顶栏不铺磨砂(磨砂栏会成为背景根,里面的玻璃糊不到页面),用页面底色渐隐托住标题;控制台右侧通知、智能体、日夜切换与账户收进一枚玻璃胶囊,胶囊里的按钮是平的(`bare`);登录页右侧只有日夜切换一颗,不套胶囊。
- 控制台顶栏与登录页顶栏不铺磨砂(磨砂栏会成为背景根,里面的玻璃糊不到页面),用页面底色渐隐托住标题;控制台右侧搜索、通知、智能体、日夜切换与账户收进一枚玻璃胶囊,胶囊里的按钮是平的(`bare`),搜索入口是胶囊里的一格平涂淡底,不套 `.field-glass`;登录页右侧只有日夜切换一颗,不套胶囊。
- 登录页只留标题(初始化和二次验证保留一句操作说明),整页居中一张卡,桌面与手机同一套;卡片是 `pg-slab auth-card`(底换成实在的磨砂 `--mat-auth-card-bg`,卡片、输入框、页面三层分得开)。
- 输入框、多行输入与下拉选择的触发器统一用 `.field-glass`(淡底 + 1px 实边,聚焦 / 展开时外线加深并带淡光晕,出错时红线;参数 `--mat-field-*`),由 `Input` / `Textarea` / `SelectTrigger` 挂上;原生 `<select>` 与长得像下拉的按钮也挂它。调用处只给尺寸和内边距,不再各写底色、边框、阴影。
- 输入框、多行输入与下拉选择的触发器统一用 `.field-glass`(淡底 + 1px 实边,悬停时边线加深一档,聚焦 / 展开时外线加深并带淡光晕,出错时红线加淡红光晕;参数 `--mat-field-*`)。本项目 2026-10-08 把日间边线从 0.46 调到 0.16、底换成半透明白(夜间边线 0.36 → 0.16):控制台的筛选条和搜索框很密,0.46 的边读成一圈黑框;靠聚焦与出错状态保证可辨认,与 uhd_web 的参数在这一处不同,由 `Input` / `Textarea` / `SelectTrigger` 挂上;原生 `<select>` 与长得像下拉的按钮也挂它。调用处只给尺寸和内边距,不再各写底色、边框、阴影。
- 改支付界面的样式时,要覆盖确认、二维码、错误与返回路径。套餐的优惠金额从价格推导,不写死。交易摘要用现有的 RemarkText 展示,不为排版改写后端摘要的含义。
主动使用 Taste 的触发条件和项目适配见前端规范。
+9
View File
@@ -20,6 +20,15 @@
两边的底、边、字色、投影都引用 `--mat-lens-*` / `--mat-pill-*`,改外观只改参数。弹窗底部的按钮行间距 12px(`gap-3`):按钮带外侧细线与光谱高光,8px 会挤在一起。放进玻璃胶囊里的按钮(控制台顶栏的通知、日夜切换、账户)用 `ghost`,不再自带玻璃。调用处只给布局(宽度、高度、间距、定位),不改圆角、底色、边框、投影和字色;不是 `<button>` 的元素(`Link`、`a`)用 `buttonVariants()` 拿同一套类名。分段标签、菜单行、列表行不算按钮,按各自控件规范;分页当前页、角标、选中的季 / 集 / 选项、日历选中日用静态的 `pill-selected`,不借主按钮样式;分段控件(侧栏、SegmentedTabs、求片页的分段)的滑块用 `seg-thumb`。放胶囊或分段控件的横向滚动容器加 `scroll-bleed`:`overflow-x-auto` 会连带裁掉纵向溢出,不加的话胶囊的阴影和描边会被切成直边。
### 本项目(控制台)的落地
- **单选分段**用 `SegmentedControl`([segmented.tsx](../../apps/web/app/components/ui/segmented.tsx)):筛选(全部 / 已启用 / 需要处理)、视图(卡片 / 列表 / 日历,只有图标时给 `title`)、分组(进行中 / 已完成)、对话框里的二选一 / 三选一。选中项由一枚滑动的 `seg-thumb` 承担,文字提一档,没有底轨、没有实心块;数量放 `count`,弱一档显示。radix `Tabs` 的 `TabsList` 用同一枚滑块(`useSlidingThumb`),页面级标签页不另写。横向放不下时外面包一层 `overflow-x-auto scroll-bleed`。
- **多选条件**(搜索结果的分辨率 / 站点、整理记录顶部的状态计数)是胶囊,选中用 `pill-selected`,不用分段控件。
- **开关型按钮**(批量、按作品分组、显示例行记录、显示隐藏文件)是 `variant="outline"` 加 `aria-pressed`,按下时 `.pill-secondary[aria-pressed="true"]` 给出与 `pill-selected` 相同的外观;分页的当前页同理(`aria-current="page"`)。不再用 `secondary` / `ghost` 切换表示开关。
- **页头与工具栏**:一屏一个主操作,其余是描边胶囊;工具栏里的图标按钮是描边圆钮(`variant="outline" size="icon-sm"`)。`ghost` 只留给行内文字动作(返回链接、表格行尾的「⋯」、卡片里的「详情」「清除选择」)和顶栏胶囊里的按钮。下拉一律用 `Select`,不用原生 `<select>`。
- **分页**(`Pagination`):一页放得下时只留「共 N 条」(超过最小档 10 条时保留每页条数),没有条目时不渲染;卡片网格下面传 `hideSingle`,一页时整块不显示。翻页按钮按容器宽度收起(`@container`),窄卡片里不折行。
- **顶栏搜索**在右侧玻璃胶囊的第一格(与 uhd_web 流媒体顶栏一致):桌面是平涂淡底胶囊加 Ctrl K 提示,手机只留图标,都打开命令面板。
右上角账户模块全站共用 `account-popover.tsx`:用户中心用头像 + 名字的胶囊,流媒体与测速用圆头像;菜单里是另外两块的跳转(当前所在的不列,流媒体与测速需有生效订阅)与退出登录。
其余控件仍分两处实现:门户原语在 `app/components/ui/`(shadcn 语义 token),流媒体控件在 `app/routes/stream/_sub/`、`app/routes/stream/player/controls.tsx`(浏览页 `content` / `wash`,播放器 `on-media` 族)。需要相同行为时各自实现。