|
| 1 | +# 移动端设置首页重做 · 设计文档 |
| 2 | + |
| 3 | +> **版本:** 1.0 |
| 4 | +> **日期:** 2026-05-17 |
| 5 | +> **状态:** Draft(待评审) |
| 6 | +> **作者:** Codex |
| 7 | +
|
| 8 | +--- |
| 9 | + |
| 10 | +## 0. 文档说明 |
| 11 | + |
| 12 | +### 0.1 目标 |
| 13 | + |
| 14 | +重做移动端设置首页,修复当前首页混入旧版大圆角卡片语言、版心挤压和层级失衡的问题,让移动端首页重新回到与 PC 端一致的产品语气。 |
| 15 | + |
| 16 | +本轮重点不是扩展设置能力,而是把移动端首页从“带说明区的独立大卡片列表”改成“紧凑分组式设置目录页”。 |
| 17 | + |
| 18 | +### 0.2 本轮范围 |
| 19 | + |
| 20 | +本轮只覆盖移动端设置首页根页面,即用户进入 `/settings` 且尚未进入任何具体分区时的界面。 |
| 21 | + |
| 22 | +包含: |
| 23 | + |
| 24 | +- 首页信息重排 |
| 25 | +- 首页 DOM 结构调整 |
| 26 | +- 首页视觉语言重做 |
| 27 | +- 首页回归测试与 UI preview 调整 |
| 28 | + |
| 29 | +不包含: |
| 30 | + |
| 31 | +- 任意设置详情页的结构重做 |
| 32 | +- 设置项业务逻辑变更 |
| 33 | +- 桌面端设置页结构改动 |
| 34 | +- 主题 token 体系重构 |
| 35 | + |
| 36 | +### 0.3 现状与问题 |
| 37 | + |
| 38 | +当前移动端首页主要由以下结构组成: |
| 39 | + |
| 40 | +- `packages/web/src/features/settings/components/settings-page.tsx` |
| 41 | + - `renderMobileRoot()` 由 `settings-mobile-root-hero + settings-mobile-list + settings-mobile-item` 组成 |
| 42 | +- `packages/web/src/styles/components.css` |
| 43 | + - 移动端首页使用独立大卡片条目、说明型 hero 和较重的圆角/渐变 |
| 44 | + |
| 45 | +当前问题集中在四点: |
| 46 | + |
| 47 | +1. 首页视觉语言与 PC 端设置页脱节 |
| 48 | +2. 每个入口都是独立大卡片,移动端出现旧样式的“泡泡感” |
| 49 | +3. 说明型 hero 占用首屏空间,但没有提供真正必要的信息 |
| 50 | +4. 条目和页边距的组合让页面产生“左窄右挤”的压缩观感 |
| 51 | + |
| 52 | +--- |
| 53 | + |
| 54 | +## 1. 设计目标与非目标 |
| 55 | + |
| 56 | +### 1.1 设计目标 |
| 57 | + |
| 58 | +- 去掉移动端首页的旧版大圆角卡片感 |
| 59 | +- 首页风格向用户确认的 `B` 方向收敛,即更接近原生设置目录页的阅读节奏 |
| 60 | +- 同时保留当前产品的工具型克制语气,而不是复制系统设置样式 |
| 61 | +- 通过更紧凑的分组和连续行结构,让移动端与 PC 端设置页共享同一套层级逻辑 |
| 62 | +- 保持现有导航状态机和设置分区能力不变,降低改动风险 |
| 63 | + |
| 64 | +### 1.2 非目标 |
| 65 | + |
| 66 | +- 不在本轮引入新的设置分区 |
| 67 | +- 不在首页增加展开、折叠、搜索、筛选等额外交互 |
| 68 | +- 不处理详情页的大规模视觉统一 |
| 69 | +- 不重构 `settings-page.tsx` 的整体导航模型 |
| 70 | + |
| 71 | +--- |
| 72 | + |
| 73 | +## 2. 方案选择 |
| 74 | + |
| 75 | +### 2.1 方案 A:工具面板式扁平入口列表 |
| 76 | + |
| 77 | +去掉 hero,把所有入口做成一组扁平行,强调工具页感。 |
| 78 | + |
| 79 | +优点: |
| 80 | + |
| 81 | +- 与桌面端语言最接近 |
| 82 | +- 改造成本较低 |
| 83 | + |
| 84 | +缺点: |
| 85 | + |
| 86 | +- 更像压缩版 PC 面板,不够贴近移动端浏览节奏 |
| 87 | +- 容易做得过于硬朗 |
| 88 | + |
| 89 | +### 2.2 方案 B:紧凑分组式目录页 |
| 90 | + |
| 91 | +使用移动端原生设置页式的分组目录结构,但控制圆角、边框和密度,使其仍属于当前产品语言。 |
| 92 | + |
| 93 | +优点: |
| 94 | + |
| 95 | +- 最符合用户选定方向 |
| 96 | +- 可读性最好,能直接解决首页挤压和层级混乱 |
| 97 | +- 便于后续将详情页逐步统一到同一语言 |
| 98 | + |
| 99 | +缺点: |
| 100 | + |
| 101 | +- 需要重新组织信息层级 |
| 102 | +- 需要调整现有测试和 preview 捕获点 |
| 103 | + |
| 104 | +### 2.3 方案 C:混合式首页 |
| 105 | + |
| 106 | +保留一个高频入口区,再加分组目录列表。 |
| 107 | + |
| 108 | +优点: |
| 109 | + |
| 110 | +- 便于突出高频项 |
| 111 | + |
| 112 | +缺点: |
| 113 | + |
| 114 | +- 首页会出现双层规则,体系复杂度上升 |
| 115 | +- 当前只有四个主分区,收益有限 |
| 116 | + |
| 117 | +### 2.4 结论 |
| 118 | + |
| 119 | +本轮采用 **方案 B:紧凑分组式目录页**。 |
| 120 | + |
| 121 | +原因: |
| 122 | + |
| 123 | +- 用户已明确选择 `B` |
| 124 | +- 当前问题本质是首页被旧卡片样式劫持,而不是缺少视觉强调 |
| 125 | +- 首页信息量不大,最适合用简洁分组目录承载,而不是继续堆入口卡片 |
| 126 | + |
| 127 | +--- |
| 128 | + |
| 129 | +## 3. 信息架构 |
| 130 | + |
| 131 | +### 3.1 首页层级 |
| 132 | + |
| 133 | +移动端设置首页保留三层结构: |
| 134 | + |
| 135 | +1. 系统已有移动端页头 |
| 136 | +2. 分组标题 |
| 137 | +3. 分组内连续入口行 |
| 138 | + |
| 139 | +移除内容: |
| 140 | + |
| 141 | +- `settings-mobile-root-hero` |
| 142 | +- 首页说明型文案区域 |
| 143 | +- 首页强调型首屏模块 |
| 144 | + |
| 145 | +### 3.2 分组与排序 |
| 146 | + |
| 147 | +首页分为两个分组: |
| 148 | + |
| 149 | +1. `工作区与运行` |
| 150 | + - `通用` |
| 151 | + - `Providers` |
| 152 | + |
| 153 | +2. `界面与交互` |
| 154 | + - `外观` |
| 155 | + - `快捷键` |
| 156 | + |
| 157 | +排序原则: |
| 158 | + |
| 159 | +- 先放功能配置,再放偏个性化和习惯类设置 |
| 160 | +- 让用户进入设置后的第一屏更偏“操作/运行相关” |
| 161 | + |
| 162 | +### 3.3 文案策略 |
| 163 | + |
| 164 | +- 首页条目以主标签为主 |
| 165 | +- 副文案从“默认展示所有项”调整为“仅在确有必要时显示” |
| 166 | +- 本轮默认保留轻量提示,但允许只对信息量更高的项显示副文案 |
| 167 | + |
| 168 | +实现上不要求新增文案 key;优先复用现有 `getMobileSectionHintKey()` 返回的提示文案,并根据新布局决定是否对全部分区渲染提示 |
| 169 | + |
| 170 | +--- |
| 171 | + |
| 172 | +## 4. 视觉与交互设计 |
| 173 | + |
| 174 | +### 4.1 页面框架 |
| 175 | + |
| 176 | +- 保留现有 `MobilePageHeader` |
| 177 | +- 内容区直接进入分组列表 |
| 178 | +- 内容区左右 gutter 使用统一移动端页面基线,不再额外制造首页专属挤压 |
| 179 | + |
| 180 | +结果应表现为: |
| 181 | + |
| 182 | +- 页面外部留白稳定 |
| 183 | +- 分组之间有呼吸感 |
| 184 | +- 分组内部连续、紧凑 |
| 185 | + |
| 186 | +### 4.2 分组容器 |
| 187 | + |
| 188 | +每个分组使用单一连续容器承载,不再把条目渲染成彼此分离的大卡片。 |
| 189 | + |
| 190 | +容器规范: |
| 191 | + |
| 192 | +- 轻量底色 |
| 193 | +- 1 层弱边框 |
| 194 | +- 中小圆角,建议落在 `10px - 12px` |
| 195 | +- 不使用明显浮起阴影 |
| 196 | + |
| 197 | +设计意图: |
| 198 | + |
| 199 | +- 保留可识别的“分组块” |
| 200 | +- 去掉旧版独立卡片的鼓起感 |
| 201 | +- 让移动端更接近 PC 的克制面板语言 |
| 202 | + |
| 203 | +### 4.3 入口行 |
| 204 | + |
| 205 | +每个入口为连续列表中的一行,而不是一张独立卡片。 |
| 206 | + |
| 207 | +行项规范: |
| 208 | + |
| 209 | +- 行高建议 `56px - 64px` |
| 210 | +- 组内行与行之间使用分隔线 |
| 211 | +- 行本体不单独描边、不单独做渐变卡面、不单独做阴影 |
| 212 | +- 点击整行进入详情页 |
| 213 | + |
| 214 | +这会替代现有 `.settings-mobile-item` 的大卡片结构。 |
| 215 | + |
| 216 | +### 4.4 图标与箭头 |
| 217 | + |
| 218 | +- 图标保留,但缩到辅助层级 |
| 219 | +- 图标底板建议 `32px - 36px` |
| 220 | +- 图标底板使用中小圆角,不得回到大软胶囊样式 |
| 221 | +- 右箭头保留为导航暗示,但视觉权重弱于标题 |
| 222 | + |
| 223 | +### 4.5 文本层级 |
| 224 | + |
| 225 | +- 标题为主,一行解决 |
| 226 | +- 副文案弱化为辅助信息 |
| 227 | +- 如果某项副文案对首页贡献低,可在实现中省略,以保持目录页紧凑度 |
| 228 | + |
| 229 | +### 4.6 交互状态 |
| 230 | + |
| 231 | +首页只承担目录跳转职责,不新增复杂交互。 |
| 232 | + |
| 233 | +状态规范: |
| 234 | + |
| 235 | +- `hover/press` 使用轻量底色或边框变化 |
| 236 | +- 不使用浮起动画表达按压 |
| 237 | +- 分组标题不参与交互 |
| 238 | +- 进入详情页的现有导航行为保持不变 |
| 239 | + |
| 240 | +### 4.7 与 PC 对齐的规则 |
| 241 | + |
| 242 | +移动端首页需要与 PC 端共享以下语气: |
| 243 | + |
| 244 | +- 不使用说明型 hero |
| 245 | +- 不使用旧版大圆角独立卡片 |
| 246 | +- 不使用重渐变和过强的材质感 |
| 247 | +- 保留清晰分组、克制边框和明确导航性 |
| 248 | + |
| 249 | +这不是把 PC 缩放到手机上,而是让两端在“信息层级和面板语气”上属于同一产品。 |
| 250 | + |
| 251 | +--- |
| 252 | + |
| 253 | +## 5. 实现设计 |
| 254 | + |
| 255 | +### 5.1 涉及文件 |
| 256 | + |
| 257 | +- `packages/web/src/features/settings/components/settings-page.tsx` |
| 258 | +- `packages/web/src/styles/components.css` |
| 259 | +- `packages/web/src/features/settings/components/settings-page.test.tsx` |
| 260 | +- `packages/web/src/ui-preview/scenes/page-scenes.tsx` |
| 261 | +- `packages/web/src/ui-preview/scene-metadata.ts` |
| 262 | + |
| 263 | +### 5.2 JSX 调整策略 |
| 264 | + |
| 265 | +保留当前状态机和跳转逻辑: |
| 266 | + |
| 267 | +- `navigationState` |
| 268 | +- `shouldShowMobileRoot` |
| 269 | +- `setNavigationState({ kind: "detail", section: id })` |
| 270 | + |
| 271 | +只重写移动端首页根结构: |
| 272 | + |
| 273 | +- 移除 `settings-mobile-root-hero` |
| 274 | +- 将单一列表改为带分组的结构 |
| 275 | +- 继续复用 `availableSections` / section metadata / icon semantic |
| 276 | + |
| 277 | +必要时新增轻量的首页分组映射,但不改变 `SettingsSection` 模型本身。 |
| 278 | + |
| 279 | +### 5.3 CSS 调整策略 |
| 280 | + |
| 281 | +移除或废弃旧移动端首页视觉规则: |
| 282 | + |
| 283 | +- `.settings-mobile-root-hero` |
| 284 | +- `.settings-mobile-root-hero__eyebrow` |
| 285 | +- `.settings-mobile-root-hero__body` |
| 286 | +- 现有以独立大卡片为核心的 `.settings-mobile-item` 规则 |
| 287 | + |
| 288 | +新增规则目标: |
| 289 | + |
| 290 | +- 首页分组容器 |
| 291 | +- 分组标题 |
| 292 | +- 连续行列表 |
| 293 | +- 行项图标、文本和箭头布局 |
| 294 | +- 更克制的移动端圆角和边框密度 |
| 295 | + |
| 296 | +### 5.4 兼容性要求 |
| 297 | + |
| 298 | +- 不破坏现有移动端详情页展示 |
| 299 | +- 不影响桌面端设置页 |
| 300 | +- 不改变 section id、翻译 key 和跳转逻辑 |
| 301 | +- 不依赖新的设计 token 才能完成本轮 |
| 302 | + |
| 303 | +--- |
| 304 | + |
| 305 | +## 6. 测试与回归保护 |
| 306 | + |
| 307 | +### 6.1 单元/组件测试 |
| 308 | + |
| 309 | +更新或补充 `settings-page.test.tsx`,覆盖以下行为: |
| 310 | + |
| 311 | +- 移动端首页仍渲染全部设置入口 |
| 312 | +- 首页入口顺序与新分组设计一致 |
| 313 | +- 点击入口后仍能进入对应详情页 |
| 314 | +- 旧 hero 结构不再存在 |
| 315 | +- 新分组结构存在 |
| 316 | + |
| 317 | +### 6.2 UI Preview |
| 318 | + |
| 319 | +保留 `settings-mobile-root` scene,用于移动端首页截图回归。 |
| 320 | + |
| 321 | +需要同步检查: |
| 322 | + |
| 323 | +- `page-scenes.tsx` 中 scene 是否仍能稳定渲染首页态 |
| 324 | +- `scene-metadata.ts` 中 capture selector 是否仍指向稳定的首页主体 |
| 325 | + |
| 326 | +如果旧 selector 依赖 `.settings-mobile-list`,则应改为新首页根容器或更稳定的分组列表容器。 |
| 327 | + |
| 328 | +### 6.3 手工验证重点 |
| 329 | + |
| 330 | +- 中文环境下首页文案是否拥挤 |
| 331 | +- 移动端首页左右 gutter 是否恢复正常 |
| 332 | +- 分组外层和组内行项的圆角层级是否明显小于当前大卡片风格 |
| 333 | +- 从首页进入详情页、再返回首页时状态是否正常 |
| 334 | + |
| 335 | +--- |
| 336 | + |
| 337 | +## 7. 风险与约束 |
| 338 | + |
| 339 | +### 7.1 主要风险 |
| 340 | + |
| 341 | +- DOM 结构变更可能导致现有测试选择器和 preview 捕获点失效 |
| 342 | +- 如果副文案保留过多,首页仍可能显得松散 |
| 343 | +- 如果分组容器和行项圆角没有拉开层级,仍会残留卡片感 |
| 344 | + |
| 345 | +### 7.2 风险控制 |
| 346 | + |
| 347 | +- 优先保持状态逻辑不变,只改首页结构与样式 |
| 348 | +- 让“组容器圆角”和“行项自身无卡片化边界”形成明确区分 |
| 349 | +- 用 scene capture 和组件测试双重保护首页回归 |
| 350 | + |
| 351 | +--- |
| 352 | + |
| 353 | +## 8. 验收标准 |
| 354 | + |
| 355 | +完成后应满足以下标准: |
| 356 | + |
| 357 | +- 移动端设置首页不再出现说明型 hero |
| 358 | +- 首页入口不再是独立大圆角大卡片 |
| 359 | +- 首页视觉密度明显收紧,消除“左窄右挤”的观感 |
| 360 | +- 首页风格更接近原生设置目录页,但仍与 PC 端工具面板语言一致 |
| 361 | +- 现有进入详情页和返回逻辑保持正常 |
| 362 | +- 自动化测试和 UI preview 回归链路完成更新 |
0 commit comments