Files
meida/docs/美搭配与美学诊断-UI规范.md
T

212 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 美搭 —— 试衣间 v2 / 发型页 v2 / 美学诊断 UI 设计规范
> 版本 v1.0(2026-09-02)。范围:试衣间改版、发型页改版、美学诊断落地页与填写页(均为新增/重设计)。
> 开发照本文执行,不再另行口头约定;与现有页面冲突处以本文为准。
> 基线代码:core/Theme.ets、pages/HomePage.ets、pages/HairDesignPage.ets、pages/TryonPage.ets。
## 0. 现状勘误与落点
- `pages/FittingRoomPage.ets` **不存在**。试衣间现状是 `pages/TryonPage.ets`:三槽上传表单(全身照/上衣/裤子)+ 提示词 + 生成等待,非 v2 目标形态。
- 试衣间 v2 建议新建 `pages/FittingRoomPage.ets` 承载衣橱网格形态;旧 TryonPage 在 v2 验收通过前保留,首页入口卡切换指向。
- 发型页 v2 就地改造 `pages/HairDesignPage.ets`,保留:点按对比、人脸授权弹层(components/f2/FacePhotoConsent)、结果落盘(filesDir/results)。
- 美学诊断两页新建:`pages/DiagnosisLandingPage.ets`、`pages/DiagnosisFormPage.ets`。
- 滚轮选择器先例:`pages/ReportCreatePage.ets` 的 `getUIContext().showTextPickerDialog({ range, selected, canLoop:false })`,身高/体重直接复用此交互。
## 1. 色板 Token
一级来源 `core/Theme.ets`,页面内禁止再散落硬编码主色;下表「新增」色仅落地页 hero 与中性灰,收口于 Theme.ets 补常量。
| Token | 值 | 用途 | 使用页面 |
|---|---|---|---|
| COLOR_PRIMARY(现有) | #C2185B | 主按钮、选中态、强调文字、下划线 Tab、删除外的红字错误提示沿用 | 全部 |
| COLOR_PRIMARY_SOFT(现有) | #F7E3EA | 次级按钮底、选中浅底 | 全部 |
| COLOR_TEXT_PRIMARY(现有) | #222222 | 标题/正文 | 全部 |
| COLOR_TEXT_SECONDARY(现有) | #8A9099 | 辅助说明、次级文字 | 全部 |
| COLOR_TEXT_DISABLED(新增收口) | #C2C7CE | 禁用文字、占位箭头(现散落 HomePage,收进 Theme) | 全部 |
| COLOR_PAGE_BG(新增收口) | #F5F6F8 | 页面底色(现各页各自定义,收进 Theme) | 全部 |
| COLOR_DIVIDER(新增收口) | #E5E7EB | 分隔线、chip 描边 | 全部 |
| COLOR_IMAGE_BG(新增收口) | #EDEFF3 | 图片占位底 / 未选中段底 | 试衣间、发型 |
| COLOR_BLACK_CAPSULE(新增) | #1A1A1A | 「试穿」胶囊按钮、品类 chip 选中态(黑底白字) | 试衣间 |
| COLOR_BADGE_BG(新增) | 0x99000000(黑 60% 透明) | 图上角标(模特/删除/原图|效果图)底 | 试衣间、发型 |
| COLOR_DIAG_HERO_TOP(新增) | #7C4DFF | 美学诊断落地页 hero 渐变起点 | 仅落地页 |
| COLOR_DIAG_HERO_BOTTOM(新增) | #5E35B1 | 落地页 hero 渐变终点 | 仅落地页 |
| COLOR_ERROR(新增收口) | #C0392B | 错误文案(HairDesignPage 已硬编码,收进 Theme) | 全部 |
**裁决说明**:参考站紫调(#7C4DFF→#5E35B1)与 App 主色玫红 #C2185B 不同系。仅落地页 hero 使用独立紫渐变(与 AI 顾问紫 #6C5CE7 同为点缀系、不冲突);落地页其余元素、CTA 按钮、其余三页一律走玫红主色,不跟紫。
## 2. 基础尺度(四页统一)
- 页面左右边距 16;卡片内边距 14~16;列表/网格间距 12;同类元素组内间距 8。
- 圆角:大卡片 16、图片卡/小卡 12、胶囊(按钮/chip)=高度一半、角标圆形。
- 字号字重:页大标题 26 Bold;区块标题 16 Medium;正文/行标签 14 Regular;辅助/品类小字 12;角标/步骤标签 11。
- 主按钮统一:宽 100%-32(或吸底减边距)、高 48、圆角 24、底 COLOR_PRIMARY、白字 16 Medium;禁用态底 #E5E7EB、字 #C2C7CE。
- 图片一律 `ImageFit.Cover`;加载中占位底 COLOR_IMAGE_BG + LoadingProgress(色 COLOR_PRIMARY,36vp)。
## 3. 页面一:试衣间 v2(FittingRoomPage)
```
┌──────────────────────────────┐
│ ‹ 返回 试衣间 │ 顶栏:白底,高48,标题17 Medium
├──────────────────────────────┤
│ ┌──────────────────────────┐ │ 预览区:高=屏45%(≥320vp)
│ │[模特] ╲ │ │ 图片 Cover,圆角16,边距16
│ │ ┌────┐ │ │ 左上角标「模特」:黑60%胶囊,
│ │ │试穿 │ │ │ 白字12,内边距8×12,距边12
│ │ └────┘ │ │ 「试穿」:黑胶囊#1A1A1A 白字14,
│ │ ╱ │ │ 右缘悬浮垂直居中,距右16
│ └──────────────────────────┘ │ 点图=生成后原图/效果切换(沿用)
├──────────────────────────────┤
│ 我的衣橱 │ Tab 行:仅1个Tab;选中16 Medium
│ ───── │ 主色+3vp下划线(圆角2);占位留扩展
├──────────────────────────────┤
│ (全部)(上衣)(下装)(连衣裙)(外套)(套装)→ │ 品类条:横向Scroll,高32
├──────────────────────────────┤
│ ┌────────┐ ┌────────┐ │ 双列网格:列距12 行距12
│ │图 Cover│ │图 Cover│ [×] │ 服装卡:白底圆角12
│ │ │ │ │ │ 图 aspectRatio 3:4 Cover
│ │名称 │ │名称 │ │ 名称13 Medium 主色文,单行截断
│ │品类小字│ │品类小字│ │ 品类11 Secondary
│ └────────┘ └────────┘ │ 删除角标:右上20×20圆 黑60%
├──────────────────────────────┤
│ 空态: (空衣橱插图区) │ 空态居中:图标44 Disabled色
│ 衣橱还是空的 │ 标题14 Primary + 副文案12 Secondary
│ [ 从相册选一件衣服 ] │ 大按钮:主色 高48 圆角24
└──────────────────────────────┘
```
状态:生成中→预览区 Loading+状态文案(沿用 TryonPage 计时/挽留口径);服装卡点击=选中试穿(描边 2vp COLOR_PRIMARY);删除角标点击需二次确认弹窗(「移除这件衣服?」取消/移除)。
## 4. 页面二:发型页 v2(HairDesignPage 改造)
```
┌──────────────────────────────┐
│ ‹ 返回 发型设计 │ 顶栏同上
├──────────────────────────────┤
│ ┌────────────┐ ┌────────────┐│ 双图区:两图等宽,高=屏40%
│ │ 原图 │ │ 效果图 ││ (≥240vp),间距12,圆角12
│ │[原图|效果图]│ │ ││ 左下小角标标注当前显示态:
│ └────────────┘ └────────────┘│ 黑60%胶囊白字11;点右图切换对比
│ 相册 拍照 │ 入口文字链 12 Primary(沿用)
├──────────────────────────────┤
│ ╭──────╮──────╮ │ 性别分段控件:容器COLOR_IMAGE_BG
│ │ 女生 │ 男生 │ │ 圆角18 内边距2;选中段主色底
│ ╰──────╯──────╯ │ 白字圆角16,未选透明底深字13
├──────────────────────────────┤
│ 选择发型(点选即试戴) │ 三列网格沿用现状(不动)
│ ▣ ▣ ▣ / ▣ ▣ ▣ / ▣ ▣ ▣ │ 选中描边2vp主色(沿用)
├──────────────────────────────┤
│ 发色 ● ● ● ● ● ● ● ● │ 8色圆点:32vp圆,名称11在点下
│ 自然黑 深棕 栗色 蜜茶… │ 选中:外环2vp COLOR_PRIMARY
├──────────────────────────────┤
│ 强度 ────●──────── 0.9 │ 行:标签12 Secondary+Slider+值
├──────────────────────────────┤
│ [ 应用发色 ] │ 吸底主按钮(白底条+顶分隔线)
└──────────────────────────────┘
```
变化点:①发色由文字 chip 改为「圆点+名称」竖排小项(色值沿用 PRESET_COLORS 8 组 RGB);②「应用发色」由滚动区内改为吸底;③无结果时发色/强度区整体隐藏(沿用),按钮禁用态见 §2。上次结果卡、三态(加载/空/失败)、人脸授权弹层全部沿用不动。
## 5. 页面三:美学诊断落地页(DiagnosisLandingPage)
```
┌──────────────────────────────┐
│ ██████ 紫渐变 hero █████████ │ hero:#7C4DFF→#5E35B1 线性渐变
│ │ 高=屏38%,圆角16(四周留边16)
│ 个人形象风格分析报告 │ 大标题 白 26 Bold,左上角内边距24
│ 5 分钟,看清你的穿衣风格 │ 副标 白85% 13
├──────────────────────────────┤
│ 你的穿衣困扰 │ 区块标题16 Medium
│ ┌──────────────────────────┐ │ 清单卡:白底圆角12 内边距16
│ │ ● 不知道自己适合什么风格 │ │ 5 行,行高≥40,行间8
│ │ ● 衣柜很多衣服却不会搭 │ │ 每行:主色圆点8vp+文字14
│ │ ● 穿显胖/显黑,不敢尝试 │ │
│ │ ● 想改变却没有方向 │ │
│ │ ● 每次出门搭配浪费时间 │ │
│ └──────────────────────────┘ │
│ 如何生成你的报告 │ 区块标题16 Medium
│ ①┄②┄③┄④ │ 横向步骤条:4步等宽
│ 测一测 分析 生成 报告 │ 圆点28vp(当前主色底白字/未选
│ │ IMAGE_BG底Secondary字),连线
│ │ 2vp #E5E7EB,标签11居中
├──────────────────────────────┤
│ [ 马上体验 ] │ 吸底 CTA:主色玫红(非紫)高48
└──────────────────────────────┘
```
CTA 点击 → router 跳 DiagnosisFormPage。hero 为该页专属装饰,报告页/表单页不出现紫渐变。
## 6. 页面四:美学诊断填写页(DiagnosisFormPage)
```
┌──────────────────────────────┐
│ ‹ 返回 形象信息 │ 顶栏同上
├──────────────────────────────┤
│ 基本信息 │ 区块标题16 Medium,上边距16
│ ┌──────────────────────────┐ │ 分组卡:白底圆角12 内边距16
│ │ 性别 [男 | 女] │ │ 行高52,行间分隔线0.5vp
│ │ 出生日期 1995-06-01 ›│ 分段控件复用§4;未选占位
│ │ 身高 165 cm ›│ 「请选择」Secondary色
│ │ 体重 55 kg ›│ 行:标签14左,值14右+›Disabled
│ │ 职业 请输入 ›│ 文本框右对齐无边框,占位同上
│ └──────────────────────────┘ │
│ 信息仅用于生成你的个人报告, │ 隐私说明:11 Secondary,左对齐
│ 不会对外展示或共享。 │ 卡下边距8
│ │ 中部留白(后续扩展题目区)
├──────────────────────────────┤
│ [ 下一步 ] │ 吸底主按钮:主色 高48
└──────────────────────────────┘
```
- 滚轮口径(全部复用 showTextPickerDialog,canLoop:false):出生日期 range 为「1950~2010 年」年份单列或 YYYY-MM 串(开发定,先例一致即可);身高 100~250 整数 cm,默认 165;体重 25~300 整数 kg,默认 55;已有值从当前值滚起(沿用 ReportCreatePage 的 clamp 写法)。
- 校验:性别/出生日期/身高/体重必填,职业可空;缺失字段红字 12 COLOR_ERROR 行下提示 + 汇总条「请完成:…」并滚动到首个缺失项(沿用 ReportCreatePage 口径);「下一步」全部合法后才可跳转结果流程。
## 7. 组件清单(新建,一律独立文件、@Component 导出)
| 组件 | 建议文件 | 复用方 |
|---|---|---|
| CategoryChip 品类 chip | components/f2/CategoryChip.ets | 试衣间 v2 |
| ClothCard 服装卡(图+名称+品类+删除角标) | components/f2/ClothCard.ets | 试衣间 v2 |
| CapsuleButton 黑胶囊(试穿) | components/f2/CapsuleButton.ets | 试衣间 v2 |
| Segment 分段控件(两枚胶囊,参数 items/selected) | components/f2/Segment.ets | 发型页、诊断表单 |
| ColorDot 发色圆点+名称 | components/f2/ColorDot.ets | 发型页 |
| StepBar 横向步骤条 | components/f3/StepBar.ets | 诊断落地页 |
| FormRow 表单行(标签+值/控件+箭头+错误行) | components/f3/FormRow.ets | 诊断表单(ReportCreatePage 后续可迁) |
放置依据:f2=试衣间/发型域(FacePhotoConsent 已在此),f3=报告域(诊断归报告旅程)。通用基础件(Segment、FormRow)先放域内,出现第二域复用时再上收 core/。
## 8. 文案表(原文照抄,开发不得改写)
| 位置 | 文案 |
|---|---|
| 试衣间·页标题 | 试衣间 |
| 试衣间·图上角标 | 模特 |
| 试衣间·悬浮按钮 | 试穿 |
| 试衣间·Tab | 我的衣橱 |
| 试衣间·品类 chips | 全部 / 上衣 / 下装 / 连衣裙 / 外套 / 套装 |
| 试衣间·空态标题/副文/按钮 | 衣橱还是空的 / 从相册挑一件,马上试穿效果 / 从相册选一件衣服 |
| 试衣间·删除确认 | 移除这件衣服? / 取消 / 移除 |
| 发型页·双图角标 | 原图 / 效果图 |
| 发型页·分段控件 | 女生 / 男生 |
| 发型页·区块标题 | 选择发型(点选即试戴) / 换个发色 / 强度 |
| 发型页·主按钮 | 应用发色(生成中→生成中…) |
| 发型页·图下提示 | 请使用本人照片,上传即确认不侵犯他人肖像权 |
| 落地页·大标题/副标 | 个人形象风格分析报告 / 5 分钟,看清你的穿衣风格 |
| 落地页·区块标题 | 你的穿衣困扰 / 如何生成你的报告 |
| 落地页·困扰 5 条 | 不知道自己适合什么风格 / 衣柜很多衣服却不会搭 / 穿显胖显黑,不敢尝试 / 想改变却没有方向 / 每次出门搭配浪费时间 |
| 落地页·步骤条 | 测一测 / 分析 / 生成 / 报告 |
| 落地页·CTA | 马上体验 |
| 表单页·页标题/区块 | 形象信息 / 基本信息 |
| 表单页·行标签 | 性别 / 出生日期 / 身高 / 体重 / 职业 |
| 表单页·分段 | 男 / 女;占位:请选择 / 请输入 |
| 表单页·隐私说明 | 信息仅用于生成你的个人报告,不会对外展示或共享。 |
| 表单页·主按钮 | 下一步 |
| 表单页·缺失汇总 | 请完成:性别、出生日期…(动态拼接) |
## 9. 验收清单(逐条可勾)
1. 四页主色唯一来源 Theme.ets;落地页外无紫色,除 #1A1A1A 胶囊外无新增散落色值。
2. 试衣间 v2:预览区约占屏 45%、双列网格、空态引导按钮、品类条横向可滚且选中黑底白字。
3. 发型页 v2:双图+对比、分段控件、8 色圆点+名称、强度滑杆、吸底「应用发色」;旧三态与授权弹层行为不回归。
4. 落地页:紫渐变 hero、5 条困扰卡、4 步步骤条、吸底「马上体验」跳填写页。
5. 填写页:分组白卡表单、三个滚轮范围正确(100-250 / 25-300 / 年份)、必填校验+汇总条+滚动定位、隐私说明可见。