# 咔碰 · 全项目交互文档 V4

> 2026-11-03 实现更新：注册与基础资料已接入 PostgreSQL；配置 DATABASE_URL 后启动自动事务迁移 users，本期实际 1 张业务表，全闭环目标仍 10 张。会话摘要、资料草稿、真实照片引用保存在同一用户行；本地照片二进制保存于受控持久目录。下文早期“文件存储 / PostgreSQL 未接入 / 照片占位 / 重启丢失会话”的描述为历史状态，以 [注册与资料持久化方案](../registration-profile-design.md) 及 [开发说明](../../develop/auth.md) 为准。真实微信授权与短信服务不因本地测试而视为已接入。

版本日期：2026-11-04。本文整合 V1、V2 及截至本日确认的全部交互修改，补齐参考图中的注册流程，并统一注册、编辑、公开资料的数据与展示规则，可作为产品、设计、客户端和服务端的交接基线。登录页在微信授权下增加手机号注册/登录；原型验证码任意填写即可通过。V4 是目标交互方案；原型仅用内存中的本地示例状态演示，不代表小程序业务、注册、定位、审核、推荐、消息、支付或认证服务已经实现。刷新后演示状态可重置，定位和注册演示不真实采集用户资料或坐标。人物、匹配分和对话均为示例。V1、V2 交付保持不变。

## 1. 当前版本与信息架构

本版本统一纳入：微信手机号登录与手机号唯一用户；心动档案已整体删除，由我的和编辑资料的语音收集入口替代；咔贝 / 积分及后台配置签到奖励；极简周历签到与充值；约会军师与取消；约会中防误触报警及独立设备权限；资料分享与举报屏蔽。配套[功能说明](feature-guide.html)按模块列出用户能力与正式接入边界，[本次更新总览](trust-board.html)可直接对照页面。

| 一级入口 | 二级页面 / 流程 | 核心用途 |
| --- | --- | --- |
| 发现 | 每日推荐生成过渡、推荐资料、完整资料流、今日浏览记录、筛选、契合分析、共同点、推荐耗尽 | 认识推荐对象、喜欢 / 不喜欢、邀请见面、会员推广 |
| 社区 | 推荐、关注、动态详情、发布动态 | 浏览生活动态、互动与表达 |
| 喜欢 | 消息、喜欢我的、会话 | 查看已解锁消息和喜欢自己的对象；从列表邀请见面 |
| 邀请 | 新邀约、计划、计划详情、AI 军师、约会中安全卡片、报警确认、安全记录、接受 / 发起意向弹窗、结果页 | 回应邀请、准备见面和约会安全 |
| 我的 | 个人中心、咔贝 / 积分、签到、咔贝充值、预览主页、编辑资料、生活照管理、语音完善资料、认证中心、三类认证、设置 | 管理资产、完善个人资料和认证 |
| 公共流程 | 登录、18 步注册、图片预览、单页会员方案与订阅、加载 / 空 / 错误状态 | 复用跨入口能力 |

继承 V2 的替换规则：喜欢页移除“我喜欢的”列表，改为“消息 / 喜欢我的”；消息不再占用邀请页子 Tab。邀请页只保留“新邀约 / 计划”。不另保留旧入口造成重复。喜欢状态仍属于用户关系数据，可在今日浏览记录与资料操作中呈现。

## 2. 全局布局、公共标题栏与导航

### 2.1 公共标题栏

使用统一的左 / 中 / 右结构，组件化参数至少包含：`visible`、`title`、`leftSlot`、`centerSlot`、`rightSlot`、`background`、`color`、`showBack`。各区可接入业务组件；中部按页面几何中心对齐，不随左右内容数量漂移。左中右内容超出各自区域时截断或折叠，不互相覆盖。

`visible=false` 时整个业务标题栏及其占位同时收起；系统状态安全区仍保留。返回按钮按真实导航栈返回，深链无上级页面时回到所属 Tab。标题栏参数不改变页面返回路径与权限规则。

小程序目标实现使用自定义导航，去掉重复的小程序原生文字标题，只保留一层业务标题。微信系统胶囊、系统状态栏由宿主提供，不能当作业务元素移除。真实布局应根据宿主胶囊坐标和设备安全区计算，设计图中的胶囊为占位示意。正式组件使用 slot / 受控组件，不能把外部输入直接作为 HTML 渲染。

发现页左侧依次放置“浏览记录”和“筛选”两个图标，分别提供语义名称和至少 44 × 44 pt 点击区。其它页面按上下文提供返回 / 标题 / 业务操作。可选标题栏收起时，不留下空白顶栏。

### 2.2 五个底部 Tab

固定顺序：发现、社区、喜欢、邀请、我的。一级入口统一由“邀约”更名为“邀请”；二级“新邀约”“接受邀约”及业务状态文案沿用原语义。对应图标：星环爱心、双气泡、爱心、日历、人物。使用用户提供的两套图源，激活态采用紫色深描边与更清晰的填色，未激活采用灰色描边。底部名称独立渲染，不使用原图内“推荐 / 心动 / 计划”等旧文字。

Tab 点击保留各 Tab 的子栏目、滚动位置和已加载内容；再次点击当前 Tab 不触发破坏性重置。二级页默认隐藏 Tab，返回恢复来源上下文。消息未读数在“喜欢”Tab 提示，新邀约未读数在“邀请”Tab 提示；数量以服务端状态为准。

### 2.3 视觉与通用操作

基准画布 390 × 844 pt，单屏高清输出 1170 × 2532 px；长图按同宽延伸。主文字深紫、主操作紫色、喜欢粉色，保留 V1 圆角卡片体系。正文在真实设备适配系统字号；关键信息不只靠颜色表达。

浮动操作区和 Tab 均为固定区域，内容底部必须预留其高度与安全区，使最后一条内容可以完整滚入可见区。弹窗开启后锁住背景滚动，关闭后恢复原位置。系统键盘出现时输入区与提交按钮保持可见，退出编辑提示未保存内容。

## 3. 统一个人资料组件

### 3.1 输入与职责

所有“查看对方资料”和“预览我的主页”使用同一资料展示组件。组件接收 `profileId`、`entryContext`、`showActionBar`、`advanceOnDecision`、返回目标、滚动恢复信息与用户关系状态。资料渲染、照片 / 文字缺省、认证徽章、动态和图片预览保持一致；交互由入口上下文配置，不能复制多套资料页后各自修改。

| 入口 / 上下文 | 底部三操作 | 喜欢 / 不喜欢成功后 | 返回行为 |
| --- | --- | --- | --- |
| 发现推荐 | 显示 | 移出当前对象并写入今日浏览记录，切到下一人，全部处理后显示推荐耗尽 | 保留发现 Tab |
| 今日浏览记录 | 显示 | 停留当前对象，更新关系状态和提示；不切换下一人 | 返回今日列表原位置并同步右侧标记 |
| 喜欢我的 → 查看资料 | 隐藏 | 不提供该组操作 | 返回喜欢我的原位置；邀请从列表按钮发起 |
| 新邀约 → 查看资料 | 隐藏 | 不提供该组操作 | 返回原邀约卡片，接受 / 婉拒在邀约卡片操作 |
| 计划 → 查看资料 | 隐藏 | 不提供该组操作 | 返回原计划详情 |
| 我的 → 预览主页 | 隐藏 | 不提供该组操作 | 返回个人中心 / 编辑来源 |
| 社区头像 / 动态作者、消息头像等其它资料入口 | 隐藏（V4 默认） | 不提供该组操作 | 返回原动态 / 会话并保留位置 |

后三类以外的其它入口采用只读资料策略，避免未知入口自动暴露推荐决策。未来若需要不同操作，应新增明确的上下文配置并补充验收。

### 3.2 资料展示顺序与字段

头部固定展示保存顺序的 P1，头图没有轮播、自动切换、左右切图箭头或分页圆点；同一对象上下滚动、返回和查看详情时不切换头图。仅发现执行喜欢 / 不喜欢成功并进入下一个推荐对象时，头图更新为该对象的 P1。头部展示姓名、匹配度、年龄 / 星座 / 距离标签，基础信息网格展示出生年份、身高 / 体重、现居 / 籍贯、学历 / 学校、职业、年收入（可跳过）、婚姻状态，随后展示实名 / 学历 / 工作认证结果。基础字段为空时隐藏该项，不显示“undefined”、无意义分隔符或伪造值；不以未填写推断未婚、收入、认证通过等信息。

文字章节统一采用以下 7 个字段和顺序：自我介绍、家庭背景、兴趣爱好、家庭观、我为什么单身、期待的另一半、理想的生活。它们替换 V1 的“爱情观 / 理想的另一半 / 期待的生活”等不统一命名。发现及统一资料页的“我的动态”按实际发布时间倒序（同日仍按时分秒排序）。左侧浅灰圆角日期块上方显示大号日、下方显示“月数+月”；右侧展示正文、图片、话题与互动。排序后的最近一条动态始终在上方显示“YYYY年”（含当前年份），年份标题上方展示贯穿内容区的浅灰分割线；后续年份变化时同样展示年份与分割线，同年不重复年份标题。年份与月日按北京时间判断。无动态隐藏整个章节。原型使用本地示例数据，不代表动态服务已接入。

### 3.3 六张生活照穿插算法

基础资料上传的生活照按用户保存的顺序记为 P1–P6，P1 固定用于头图，不在正文重复展示；从“家庭背景”描述之后开始插入 P2，后续依次插入 P3–P6，不把 6 张全部堆在资料顶部。

| 顺序槽位 | 文本块（非空才显示） | 紧随图片（存在才显示） |
| --- | --- | --- |
| 1 / 18 | 自我介绍 | 无额外图片（P1 已用于固定头图） |
| 2 / 18 | 家庭背景 | P2 |
| 3 / 18 | 兴趣爱好 | P3 |
| 4 / 18 | 家庭观 | P4 |
| 5 / 18 | 我为什么单身 | P5 |
| 6 / 18 | 期待的另一半 | P6 |
| 7 / 18 | 理想的生活 | 无额外图片 |

每个文本与图片独立判断：空文本不显示标题、卡片和占位，但同槽位图片若存在仍展示；缺图片不留空白，但同槽位文字照常显示。不能因为一个字段缺失把后续照片重新绑定到不同槽位，也不能因缺文丢弃图片。按槽位依次展平有效块，统一段间距。全部缺失时只显示可用基础资料和动态。

历史存量用户可能不足 6 张，浏览端兼容缺图；编辑端保存必须满足 6 张，见第 10 节。照片点击进入大图预览，支持按已存在的生活照顺序滑动；失败显示可重试的图片占位，不以失效图片 URL 当作“未上传”。头图就是 P1，不另占生活照数量。资料头图本身固定；点击图片打开的独立大图预览可按现有照片顺序查看，不改变资料页 P1，不在返回后改为刚预览的图片。

### 3.4 底部操作组件

三个按钮依次为“不喜欢”“邀请见面”“喜欢”。左右圆形按钮直径为 54px，与邀请按钮等高；不喜欢保持白底粉叉，边框使用 disable 灰色（`--disabled-gray: #e5e5ea`）；喜欢使用粉色背景（`--pink: #ff4f86`）、白色心形，图标水平垂直居中，无边框。中间“邀请见面”为高 54px、最小宽 144px 的胶囊按钮，使用从上到下由深至浅的主色渐变背景（`#7160cf` → `#a394e5`）、白色文字，无边框，文字前展示提供的白色手写 hello 图标。三个按钮对齐中线，文字按钮宽度足以容纳四字，无换行；正常、按下、禁用、提交中均有明确视觉态。

喜欢 / 不喜欢记录成功后才执行入口约定的后续动作，提交中锁定整组，避免重复点按。失败不跳人、保留当前资料、提示重试。已喜欢对象再次点击喜欢采用幂等写入，成功后仍按入口规则处理：发现推荐必须切换下一人，今日浏览资料必须停留当前对象；不能只提示“已喜欢”而阻止推荐前进。推荐服务去重属于正式目标能力，即使队列出现已喜欢的重复资料，也不改变这一交互规则。历史里的“不喜欢”记录决策并将当前喜欢关系更新为未喜欢，停留页面；返回列表同步标记。

“邀请见面”只打开对当前对象的弹窗，关闭 / 成功发送均不自动喜欢、不自动消耗下一推荐。发起邀请成功后，该对象已有进行中的邀约时展示“已邀请”及计划入口，禁止重复创建同一进行中邀约。

## 4. 发现、筛选与今日浏览记录

### 4.1 每日推荐生成与队列

每日首次进入符合推荐资格的账号时，展示全屏「正在为你生成今日推荐」。冷启动和回前台共用判定。当前账号最近一次成功刷新的业务日期与服务端北京时间自然日不一致，或尚无成功记录时，进入过渡并刷新。当天已成功则恢复队列、筛选和进度。首次登录先完成登录、基础资料及可跳过的语音引导。当天若有签到弹窗，关闭或领取后继续指定目标，无指定目标时进入发现并判定刷新。服务端同账号同日复用已发布批次，成功返回空结果也完成当天刷新。切换账号后独立判定。

过渡页按[动画原型](index.html#recommend-generating)呈现。使用浅粉背景、星芒核心、粉色旋转轨道、浮动资料卡和底部波浪。标题与步骤区保留参考稿的排版，等待期间隐藏业务 Tab。步骤动画提供等待反馈，服务端确认成功后才切换到【发现】，避免固定播放时长阻塞已完成的请求。附件中的演示计时仅用于原型。启用减少动态效果时保留静态主体及加载状态。

生成成功且有可展示候选时，发现直接展示第一位。当天没有新批次且存在仍有效的未处理旧批次时，显示旧批次的候选，沿用原推荐时间。成功但无候选时显示发现空态。请求失败或超时显示重试并保留已有队列。返回操作结束本次等待，回到上一个可用页面或发现的空态，下一次进入可重新请求。失败和返回均不写当天成功标记。

用户向下滚动查看资料。喜欢或不喜欢成功后，将当前对象从待浏览队列移除并写入今日浏览记录，下一位从资料顶部展示。保留当前筛选条件。提交失败停留当前对象并提示重试。邀请见面保留当前对象。

筛选恢复 V1 交互：城市使用 chips 选项，年龄使用 18–60 岁双端范围选择器，身高使用 100–230 cm 双端范围选择器，学历与婚姻状态使用 chips。底部固定“重置 / 应用筛选”两个操作，保留 V1 的选项与范围布局，不沿用 V2 的简化筛选。编辑期间为草稿，点击“应用筛选”应用条件并请求新队列；返回 / 取消不改变原条件。“重置”恢复默认草稿，需要点击应用才生效。范围值需上下界合法，未选条件按不限处理。请求失败保留草稿与原队列，不覆盖成空结果。

待浏览队列全部处理成功后进入【推荐耗尽】，同日再进恢复该状态。筛选无结果时提供调整筛选和恢复默认推荐。生成后起初无候选时显示发现空态，服务端失败时提供重试。

### 4.2 今日浏览记录

标题「浏览记录」，辅助文案「仅展示今日已浏览的人 · 仅自己可见」。按北京时间 00:00 至次日 00:00 展示账号当日的记录。跨日进入或从后台恢复后刷新列表。

发现推荐在喜欢或不喜欢成功后写入。社区、喜欢我的、邀约等入口在实际打开并成功展示他人资料时写入。只预加载、未成功显示及本人预览的资料均不产生记录。

列表按最后浏览时间倒序，显示头像、姓名、基础摘要、最近浏览时间、右侧关系标记。右侧明确区分“已喜欢”（粉色心形 + 文字）和“未喜欢”（空心 / 灰色心形 + 文字），不只用时间或箭头代替标记。标记是当前关系状态，不是浏览那一刻的历史快照。

点击整行进入统一资料组件的 `history` 上下文：底部三操作可见，喜欢 / 不喜欢后都停留当前对象；返回列表保留滚动位置、同步喜欢状态。当天重复浏览不新增第二行。无记录显示“今天还没有浏览记录”和“去发现”；列表加载失败可重试，不能清空已有可用缓存。记录中的对象下架 / 注销 / 不可见时显示资料不可用，返回仍可用，不继续展示缓存敏感资料。

## 5. 社区与动态

社区保留“推荐 / 关注”流与各自滚动位置。卡片包含作者、发布时间、文本、图片、话题与互动数量。作者头像进入统一只读资料；图片进入预览；点击内容进入动态详情。点赞提交中防重复，失败恢复原状态并提示。评论输入不能为空，失败保留内容并支持重试；数量以成功服务端响应更新。

2026-11-11 实施细则：推荐保留会员横幅与浮动发布入口，按发布时间与 ID 倒序分页展示公开动态；关注仅查询已关注作者的公开动态，“我的动态”可查看本人私密记录。卡片不得填充虚构计数，关注与点赞均为可取消、幂等的目标状态操作，不对本人显示关注。作者入口复用公开资料白名单，隐藏发现底部三按钮，实际展示后记录浏览。详情保留“全部评论”、评论作者/时间/回复与底部固定输入；空白评论不可发，1–500 字，回复明确对象且可取消，失败保留输入和幂等标识。评论分页加载，回复平铺于同一动态，不建立无限嵌套。网络失败保留可用列表，账号切换清理缓存；私密、屏蔽、停用状态不可经配图或互动绕过。原型示例人物与互动数量仅用于设计展示，正式页面读取真实服务端数据。分享按平台实际能力反馈，不将模拟提示视为已分享。

发布页沿用文字最多 500 字、照片、话题、位置与可见范围结构。用户取消选择图片不丢失已选图片；上传进度与失败分别标记。发布中禁用重复提交；失败保留草稿；成功返回来源流并插入本人动态。退出未发布内容时提示“继续编辑 / 保存草稿 / 放弃”。上传数量上限、媒体审核、可见范围枚举与发布权限属于正式实施待确认项，原型不代表发布服务开放。

## 6. 喜欢页与消息

### 6.1 消息列表

喜欢页默认展示“消息”，另一个子 Tab 为“喜欢我的”。不再展示“我喜欢的”列表。消息列表显示对方头像、姓名、最后消息摘要、时间、未读数；按最后活动时间排序。2026-11-05 样式回退：沿用改动前的行布局、消息时间、未读角标及锁定行样式，不以统一的状态说明替代消息摘要，不新增右侧聊天/日历操作图标；点击去向仍按首次有效赴约开始时间判断。点击已解锁会话进入聊天，阅读后更新未读数。头像进入只读资料，返回恢复会话位置。

双方首个有效、双方同版本确认的见面计划到达服务端认定的开始时间（server_now >= meeting_at）后即可聊天；不等待实际到场、见面完成或人工核验。开始前在消息列表点击对方会话进入对应见面计划，达到开始时间后进入现有聊天页。互相喜欢、接受意向及客户端自报到场均不提前授权。未确认或开始前取消的计划不授予资格，屏蔽、停用及访问权限仍优先检查。 未开始行沿用现有对象头像、摘要与锁定样式，整行点击展示见面计划；开始后沿用现有聊天布局，不新增聊天页面。无会话或无有效计划时显示真实空态/不可用说明。

聊天页包括消息时间分组、对方 / 本人气泡、输入与发送。空白文本不可发送；发送中、成功、失败可重试分别展示。重试使用相同消息客户端标识以防重复。断网保留输入，恢复后拉取新消息和会话权限。正式媒体消息与撤回能力若未定义，不应在实现中默认承诺。

### 6.2 喜欢我的

列表项显示头像、姓名、基础摘要与“邀请见面”按钮。点击卡片进入统一资料组件 `admirers` 上下文，无底部三按钮；返回原位置。点击“邀请见面”只触发该按钮，不冒泡打开资料，直接弹出意向选择组件，并明确对方姓名。

按钮状态：可邀请、提交中、已邀请 / 查看新邀约、不可邀请（例如资料不可用）。发起成功后列表关系不删除，按钮更新并支持查看新邀约。无喜欢我的时显示空态；分页加载失败保留已加载项。禁止在这一栏目重新引入“我喜欢的”列表。

## 7. 邀请见面 / 接受邀约共用弹窗

### 7.1 入口和结构

发起入口：发现操作组、今日浏览资料操作组、喜欢我的列表按钮、共同点页明确邀请入口。接受入口：邀请 → 新邀约 → 接受。均复用同一底部弹窗，模式分别为 `invite` / `accept`，包含对象摘要、系统推荐时间段、系统推荐意向地点、已选计数、取消 / 关闭、主提交按钮。

标题分别为“邀请见面”“接受邀约”。提示统一为“请至少选择 3 个时间段和 3 个意向地点”。每个时间显示日期、星期、完整开始–结束时间，每个地点显示名称、区域和必要地址摘要。所有候选由系统提供，不允许前端随意输入一个未验证的时间 / 地点充数。

### 7.2 多选校验

时间和地点均为多选，**各至少 3 项，不设 V1 的恰好 3 项上限**。选择 4、5 项及更多可用候选均有效。计数显示“已选 N 个，至少 3 个”，不用“3 / 3”暗示上限。再次点击已选项取消；取消导致任一类不足 3 时主按钮立即禁用，并在对应分区提示缺少数量。

提交条件：对方有效、模式有效、系统候选加载成功、有效时间 ID 去重后至少 3、有效地点 ID 去重后至少 3、无上传 / 提交中状态。仅客户端变更样式不构成有效选择，服务端必须重新校验候选、归属、时效、数量与关系权限。

候选不足 3 项时展示“可选项不足，请刷新或稍后再试”，不允许跳过最低数量。过期时段不可选择；打开期间过期或候选失效，提交前刷新校验并突出失效项，保留仍有效选择，要求补足。失败不清空用户选择。重新进入同一尚未提交的对象和模式可恢复草稿，草稿不跨对象共用。

### 7.3 关闭、提交与结果

点击遮罩 / 关闭，在无选择时直接关闭；已有选择时保留当前会话草稿，返回原页面原滚动位置。切换对象前提示保留 / 放弃当前草稿，避免替错人发送。底部按钮分别为“发送邀请”“确认接受”；发起点击后先展示咔贝扣款确认弹窗（见 §7.4），接受本轮不新增收费。提交中禁用关闭外的重复动作，发生超时先查询提交结果，避免重试创建重复邀约。

发起成功：展示“邀请已发送”、所选时间 / 地点实际数量、“待对方确认”，提供“查看新邀约”和“返回来源”。接受成功：展示“已接受邀约”、双方下一步说明与“待确认”，提供“查看新邀约”。两种成功页不可混用文案。原型仅本地演示，不真正向他人发送消息。

接受同样至少选择 3 个时间段 + 3 个地点，并非只从对方三项中勾一个。对方意向可以作为参考标注；最终匹配 / 排期由正式业务规则决定，不能仅因双方提交即显示一个虚构的最终时间地点。

### 7.4 发起邀约扣款弹窗

沿用现有浅色遮罩、圆角确认卡、紫色主按钮：标题“确认发起邀约”，展示对象与意向数量、余额、原价与应付咔贝。有有效折扣时原价用删除线，后面展示折扣价；无折扣不制造划线价。原价、折扣、报价版本/ID与有效期均由后台发布配置经服务端返回，前端不造价。

足额主按钮“确认并支付 N 咔贝”；不足主按钮“去充值”，次操作“暂不发起”。去充值保留草稿及来源，返回刷新报价和余额，用户再次主动确认才扣款。关闭不扣、失败留选择、处理中防重复；超时先查询，变价/过期重新确认，不以客户端余额判断作为支付凭证。发起创建、扣减和消费流水同事务、同作用域幂等，失败全回滚；接受不收费。成功取消计划退原实付咔贝或向原付款账户新发1张券；拒绝/未成计划过期及争议归还另定，不自动套用。

## 8. 邀请：新邀约与计划

### 8.1 新邀约

新邀约只展示收到且待回应的邀请及已发待对方接受项；只有单方接受的记录保留在此栏。双方均已接受后，同一邀约立即移出新邀约并归入计划，时间地点未定显示待安排。统一按最新编辑时间 `updatedAt` 倒序，不按收发方向置顶；相同时间由稳定ID作次序，分页、刷新与编辑后均维持该规则。收到项展示接受/婉拒，已发待对方确认卡片不展示任何操作按钮，仅一行“X 个时间意向 · X 个地点意向”，不展开时间地点明细；点击整卡进入对方资料，返回恢复列表位置，不误显示接受自己的邀请。卡片包括对象、最近编辑时间及精简意向摘要；收到待回应项保留接受/婉拒/查看资料按钮。查看资料进入 `incoming` 上下文，不显示三操作。接受打开第 7 节弹窗；婉拒要求轻量确认，提交失败保留卡片，成功后移出待处理列表并给反馈。过期 / 已被取消的邀请置为不可回应，刷新后同步状态。

### 8.2 计划列表与状态

计划展示双方均已接受的同一邀约：已排期记录在前，按约见时间 `meetingAt` 倒序及稳定ID排序，最近编辑时间和状态不改变其顺序，约会中不单独置顶；尚未排期的记录在其后独立展示待安排分组，组内按 `updatedAt` 倒序及稳定ID排序。单方待接受仍留在新邀约，同一ID不同时存在于两栏。时间地点未定不虚构，接受不代替同版安排确认；正式服务端按同一分组排序规则返回分页游标。

| 状态 | 用户可见含义 | 可用操作 / 后续 |
| --- | --- | --- |
| 待安排 | 双方已接受，时间地点尚未确定 | 查看计划/资料；不提前开放军师、聊天或依赖排期的24小时取消 |
| 待赴约 | 正式流程已生成且双方同版本确认时间地点 | 查看安排 / 资料、和军师聊天；距开始超过24小时可确认取消，24小时内含边界不可取消 |
| 约会中 | 服务端确认当前约会处于进行中 | 卡片内举报直达对应对象举报页，一键报警进入既有安全记录页，不进入独立约会中详情；防误触确认、独立授权的安全记录；达到首次有效赴约开始时间即可真人聊天，不等待完成 |
| 已完成 | 服务端确认成功赴约 | 查看记录；满足权限后进入消息 |
| 已婉拒 / 已取消 / 已过期 | 邀约已结束且不可继续原流程 | 查看状态说明；不显示接受按钮 |
| 安排异常 / 无共同选项 | 意向已收集但尚无可行安排 | 展示原因与重新选择入口（正式排期规则确认后开放） |

计划详情“查看资料”进入 `plan` 上下文，无底部三操作。已确定时间地点才展示确认态详情，否则展示待确认及所选意向，不虚构排期结果。V1 中“我已到达 → 聊天”的直接演示不应成为生产权限逻辑；首次有效双确认计划的开始时间由服务端判定聊天资格；到场、完成和爽约/争议另有业务规则，取消按24小时边界执行。

### 8.3 见面计划页与 AI 军师（2026-10-24 更新）

待赴约详情按“对象与状态 → 时间地点 → 到达第一次赴约开始时间，即可开始聊天 → 内嵌赴约指引”顺序展示。指引包含见面前核对安排、到达后按有效方式确认、第一次有效赴约开始时即可到消息聊天，见面后继续。原“查看赴约指引”不再作为计划详情的操作按钮，旧指引路由仅兼容已有索引。

底部主按钮为“和军师聊天”，下方为弱化文字按钮“取消赴约”；距开始不足或恰好24小时时，该弱操作置灰并显示不可取消原因；指引内容可滚动，底部留白避免被两个按钮遮挡。

军师聊天在成功赴约前可用，绑定当前 plan_id 与对方 user_id，不能因查看其他对象资料而串人。展示 AI 身份、当前见面对象与计划、可提问的示例、消息输入。可问对方公开兴趣、开场话题和见面建议；公开资料事实与军师建议分开标识。未公开信息、私密画像、联系方式和聊天记录不提供，不推断对方意愿或关系结果。军师内容不发送给对方，也不授权真人聊天。返回计划再进入保留同一计划会话记录；不同计划会话隔离。

本次原型提供固定示例回复，未接真实模型；正式实现需使用权限过滤后的公开资料快照，禁止将原始访谈、匹配专用或仅自己可见的资料送入该对话。正式聊天提供发送中、失败重试、不重复发送与会话不可用状态；输入仅按文本安全展示。

### 8.4 取消赴约

仅在服务端确认 server_now < meeting_at - 24 小时的有效计划上，点击弱化按钮后弹出“确认取消这次赴约？”；说明本次安排结束且不授予新的聊天资格，提供主操作“保留计划”和次操作“确认取消”。保留不改变任何状态。提交中禁用重复操作，成功后详情和计划列表同步“已取消”，隐藏本计划军师与取消入口，提供返回列表。失败保留原计划并展示重试；遇到计划已完成或已取消时刷新服务端状态。

原型取消仅更新本地演示状态，不发送通知。正式服务端必须校验计划归属、当前可取消状态及版本，事务处理并幂等，按通知规则告知双方；当 server_now >= meeting_at - 24 小时（含恰好24小时、24小时内及已经开始）拒绝用户取消；在进入弹窗和提交时都复核。未排期意向不套用此时间限制，走各自撤回/婉拒规则。成功取消约会计划时，按原支付来源归还至原付款账户：咔贝支付退回原订单实际支付数量的咔贝，不按原标价或当前价格计算；免费约见券支付向原账户发放1张新的免费约见券，旧已使用券不恢复。取消人和原付款人不同时仍只归还原付款账户。取消状态、余额/券权益与退款/新券流水同事务提交，失败全部回滚；同一原消费及取消业务键只归还一次，超时先查询，不能重复退款或重复发券。原消费流水不可改删。已在更早首次有效赴约开始时获得的聊天资格不因后续计划取消撤回；异常运营处理独立权限、理由及记录，不能通过改系统时间绕过。

## 9. 会员：单页订阅

### 9.1 推荐完成与会员入口

最后一位推荐对象处理成功后，发现展示本轮推荐完成状态，保留Tab，提供了解会员、调整筛选和去社区；不因网络失败或筛选零结果触发付费引导，不强制订阅。我的、设置、社区广告和推荐完成入口直接打开同一个 `membership` 页面，返回实际来源并保留位置。

### 9.2 方案与权益

一个页面展示免费 / 月度 / 季度选择卡，切换后原位展示完整权益、价格、周期、条款及订阅按钮；不再经过独立推广页和方案确认页。旧 `subscribe` 路由兼容到 `membership`，侧栏与导出不再出现第二订阅页面。

| 方案 | 定价 | 权益 |
| --- | --- | --- |
| 免费版 | 免费 | 基础匹配推荐每日10位；免费AI军师；免费回看；查看谁对你心动 |
| 月度会员 | ¥198 / 月 | 智能匹配升级每日20位；个性化条件筛选匹配；更多次数AI军师；更多签到积分和咔贝；优先推荐曝光；每月免费10张约见券；专属客服支持 |
| 季度会员 | ¥458 / 季 | 月度会员全部权益；约见优先安排；每月1次免费身份认证；1v1专属匹配顾问；优先体验新功能 |

付费方案继承免费版能力；“查看谁对你心动”是免费权益，不再作为月度专属权益。免费版按本次用户给出的四项清单展示。AI军师更多次数、签到具体奖励、约见券发放和可用规则读取后台配置，不擅自承诺固定AI次数或无限使用。价格采用用户本次确认的月度198、季度458，不展示参考图中与价格不一致的节省金额。

### 9.3 同页确认与反馈

服务协议与订阅说明在同页展开，默认不勾选；确认条款后才可点击当前方案订阅。支付处理中禁止重复操作及切换方案，取消和失败在同页反馈，可保留方案重试；成功同页展示已开通的演示状态，并联动会员签到示例。免费方案没有支付按钮，也不会主动降级现有会员。

原型不创建真实订单、不扣款、不自动续费。正式产品需服务端验证价格、有效期、可售状态，按支付回调幂等授予权益；结果未知先查询订单，客户端成功提示不能作为开通依据。自动续费如提供须明确显示方式、另行授权与取消入口，取消后当前有效周期继续享有权益；未确定续费方式不直接启用真实扣款。

## 10. 我的、编辑资料与六张生活照

### 10.1 个人中心与预览

我的保留头像 / 昵称、资料完成度、编辑资料、预览主页、语音完善资料、认证中心、我的动态、会员推广入口和列表中的“设置”。删除昵称右侧的设置图标及其点击入口，不留下透明热区；设置仍由下方列表项进入。“我的动态”不显示数量、条数或类似“12 条”的尾注，箭头仍可进入本人动态列表。完成度应由已填写字段计算，不用固定示例数字。预览使用同一资料组件 `self` 上下文，隐藏底部三操作，不允许对自己喜欢或邀请。编辑草稿预览需标明“预览未保存内容”，退出预览返回编辑草稿。

### 10.2 编辑字段

注册和编辑共用第 13.1 节的字段定义、枚举、校验与草稿结构。编辑进入时回填最近一次成功保存的个人资料；后续修改成功后更新同一字段和全部展示入口，不另外维护“注册资料”和“编辑资料”两份值。基础字段分成昵称、性别、生日、身高、体重、现居地、籍贯、学历、学校、职业、年收入（可跳过）、婚姻状态、恋爱目标等独立控件。生日不与年龄并填，年龄由生日派生；身高和体重分别选择；现居与籍贯分别选择；学历与学校分别输入。缺省不以虚构默认值自动提交。性别登记成功后只读，错误更正引导客服，不提供随意切换。

| 文本字段 | 长度上限 | 展示规则 |
| --- | --- | --- |
| 自我介绍 | 1000 字 | 非空展示；空白字符不计为有效内容 |
| 家庭背景 | 1000 字 | 非空展示 |
| 兴趣爱好 | 1000 字 | 非空展示 |
| 家庭观 | 1000 字 | 非空展示 |
| 我为什么单身 | 1000 字 | 非空展示 |
| 期待的另一半 | 1000 字 | 非空展示 |
| 理想的生活 | 1000 字 | 非空展示 |

各字段采用独立多行输入框，显示标题、占位说明与实时计数，按 Unicode 码点计数，超限保留全文并显示字段提示、阻止提交。文本可留空，浏览时不展示空段。保存前去除首尾空白并检查长度，不能静默截断用户粘贴的长文。历史个性问答、语音来源与上述七段资料在同一用户聚合中保持语义分区，不能把题目答案或标签自动覆盖自我介绍；如以后提供生成介绍，应先预览并由用户明确采用。

### 10.3 生活照管理

编辑页提供 2 行 × 3 列的六个固定槽位，序号对应资料流 P1–P6。每格有缩略图、上传进度与“上传 / 更换”操作，支持长按拖拽排序，拖动中显示原位占位与目标序号，释放后更新草稿的固定槽位；桌面键盘用户可用“前移 / 后移”按钮获得等效排序。提示“必须上传 6 张生活照；第 1 张作为固定头图，从家庭背景后依次展示其余照片”。不再使用“最多 6 张”的旧提示。

保存条件：6 个槽位均有有效且上传成功的图片，且没有待上传 / 上传中 / 失败项；少于 6 张时定位到照片区，显示“还需上传 N 张生活照”。替换时先预览新图并上传，成功后才替换旧图引用；取消选择、上传失败或断网时保留旧图。重排先更新草稿顺序，保存成功后才影响公开资料。删除 / 腾空可在草稿中进行，最终保存仍需补齐 6 张。

超大、格式不支持、读取失败等按单图提示；用户可以重试该图或重新选择，无需重传成功项。关闭权限时给出系统授权指引，拒绝后回到草稿。图片尺寸 / 格式 / 大小阈值在正式资源规范确定前使用配置项，不把示例阈值硬编码为产品承诺。

### 10.4 保存与退出

保存中禁用重复提交；成功后同步个人中心、预览及推荐侧展示数据。失败保留全部文本、照片引用与顺序，允许重试。退出未保存编辑弹出“保留草稿 / 放弃修改 / 继续编辑”：保留草稿后离开，同会话再次进入时提示并恢复草稿；放弃修改恢复最近已保存值；继续编辑关闭弹窗并留在当前表单。原型草稿仅同会话内存保留，不承诺刷新后持久化。草稿不自动公开，公开资料仅在保存成功后更新。服务端保存需原子校验照片数量、字段长度与图片归属，避免只保存了文本却丢失照片顺序。

## 11. 语音完善资料入口

基础资料 18 步全部校验并保存成功后，进入语音收集介绍页，提供主操作“开始语音收集”和弱操作“暂时跳过”；进入介绍页不申请麦克风权限，只有用户主动开始才申请。跳过不撤销基础资料完成、不标记语音完成、不阻断使用；跳过或完成后恢复此前目标，无目标回发现。基础资料未完成时，语音入口先引导补齐基础资料，不创建访谈或申请麦克风。

已登录且基础资料完成、语音尚未完成时，在发现、社区、喜欢、邀请、我的五个一级 Tab 的内容顶部（公共标题栏下、业务内容前）展示非阻断提示“完善语音资料，让我们更了解你”；未开始操作为“开始语音收集”，进行中/暂停/异常恢复为“继续语音收集”。提示参与正常布局，不遮挡内容、不重复叠加，不强加到二级页面；切 Tab、重新登录及刷新按当前账号服务端状态恢复。点击开始或继续进入同一语音流程，返回保留原 Tab/子栏目/滚动位置；我的卡片与编辑资料入口继续保留。跳过后提示仍保留，只有服务端确认语音已完成才隐藏；状态查询失败不伪造完成、不自动请求权限。

我的卡片与编辑资料提供“语音完善资料”，基础资料完成后进入同一智能球采集流程。没有访谈时进入开始介绍；有未完成内容时可继续当前问题或暂停状态；完成后可补充。入口显示真实的已处理主题进度，不再显示旧 11 题答题进度。

旧心动档案总览、所有题目、完成页面和入口已移除；旧 portrait / question 深链统一回到语音开始页，不再保留可作答问卷。恋爱目标仍是基础资料的一份生效值；语音提出冲突时保留未采纳候选，不为歧义强制追问，也不直接覆盖。

语音不是新的注册门槛，不替代六张生活照和手动编辑。七个页面、权限、跳过和异常恢复规则详见第 18 节。后端最少表设计见 [算法数据库设计](../algorithm-database-design.md)，相关内容按用户聚合分区保存，不按页面拆表。

## 12. 实名、学历、工作认证

### 12.1 认证中心与统一状态

认证中心分别展示实名认证、学历认证、工作认证，状态独立：未开始、草稿、待授权、提交中、审核中、已通过、未通过、需补充、服务不可用。未通过提供用户可理解的原因和“修改后重试”，已通过展示结果与认证时间（如有）。资料页仅展示认证结果，不公开证件号码、原件、活体素材或内部审核原因。

本轮补充的是完整目标交互。**原型不接收或保存真实证件、活体视频、学历证明、在职材料**；上传与授权使用示例素材 / 模拟状态并明确标注。正式开放前需接通合规的数据处理、审核和权限方案，不能将演示的“已通过”写入生产认证状态。

### 12.2 实名认证流程

认证说明（用途、所需材料、展示范围） → 真实姓名 / 证件类型与号码 → 证件正反面上传（按所选证件要求） → 活体服务授权与单独确认 → 活体检测 → 确认提交 → 审核中 → 已通过 / 失败重试。

用户在授权前可阅读用途与处理说明，勾选项默认不勾。拒绝活体授权返回待授权状态，保留非敏感草稿；不以拒绝为审核失败。输入格式错误就地提示；证件读取失败可重新拍摄；相机权限拒绝提供设置引导。活体取消、失败、超时各有原因与重试入口，重复尝试限制由正式供应商与服务端决定。显示号码时脱敏，返回页面不在 URL 或日志中暴露原文。

### 12.3 学历认证流程

认证说明 → 学校、学历层次、毕业年份等必要信息 → 按指定要求上传学历证明 → 阅读材料处理授权 → 确认提交 → 审核中 → 已通过 / 需补充 / 未通过。

信息缺失定位到字段；证明上传失败保留已填写信息；审核不通过展示可修改项，重新提交生成新的审核版本但保留审计记录。可支持的学历类型、境外学历、在读状态和证明校验方式由正式业务确认，设计稿不虚构官方查验结果。

### 12.4 工作认证流程

认证说明 → 工作单位、职位与必要的工作信息 → 上传在职证明等系统指定材料 → 阅读材料处理授权 → 确认提交 → 审核中 → 已通过 / 需补充 / 未通过。

不要求把单位证明原件展示给其它用户。证明类型、时效、非传统就业方式和单位名称公开范围需正式确认。单位 / 职位等基础资料字段与认证材料字段应区分，修改公开职业不自动篡改已通过的审核材料；关键认证信息变更需重新审核。

### 12.5 草稿、提交与异常

三种流程均支持未完成草稿恢复，但敏感材料本地缓存、有效期与加密策略须正式确定，不能默认无限保留。已选素材退出前提示继续 / 放弃；提交中锁定重复点击，超时查询结果，不盲目再提交。成功仅指“已提交审核”，不得立即展示“已认证”；审核通过由服务端确认。审核中不允许篡改本次材料，可查看状态；需要补充时只开放指定字段与重传入口。

失败区分表单错误、授权拒绝、上传失败、供应商不可用、审核不通过与网络错误。服务不可用保留可安全恢复的草稿并提示稍后再试。撤回材料、认证失效、账号注销后删除等动作应接正式政策，未确认前不能假设实现。

## 13. 注册、登录、设置与其它公共流程

### 13.1 注册：18 步流程

本版删除独立的“确认你的心动资料”页面。第 18 步为“更多爱好”，可不选择，点击“完成填写”后直接校验并保存前面所有资料；成功显示基础资料完成反馈，之后进入可跳过的语音介绍；跳过或语音完成后恢复原目标，无目标回发现。无额外资料核对或二次提交步骤。保存失败留在第 18 步并保留草稿。

登录成功后，未完成资料登记的账户进入注册向导，已完成账户进入原目标。公共标题栏显示返回、标题与步骤进度；每步有明确的“下一步”，不因点选选项立即跳走。返回保留当前有效草稿；同会话选择“稍后继续”后恢复已有注册草稿与上次步骤。最终“完成注册”前对全部必填、枚举与照片重新校验，失败定位到对应步骤，成功才将基础资料标记为完成并进入可跳过的语音介绍，跳过或完成后恢复原目标，无目标回发现。原型的注册资料和进度仅内存演示，刷新不承诺恢复；正式草稿恢复能力由账户服务实现。

| 步骤 | 页面 / 输入 | 完成条件与交互 |
| --- | --- | --- |
| 1 / 18 | 性别 | 按参考图提供选择，说明登记后不可随意修改；提交本步前可修正，最终登记后编辑只读，更正找客服 |
| 2 / 18 | 昵称 | 2–20 字，首尾空白去除后校验；错误就地提示 |
| 3 / 18 | 生日 | 日期选择器，年 / 月 / 日；不要求另填年龄，年龄由生日按完整周岁派生；无效日期和未来日期不可确认 |
| 4 / 18 | 身高 | 独立数值选择器，单位 cm；示例配置 100–230，整数步进 1；确认才写入草稿 |
| 5 / 18 | 体重 | 独立数值选择器，单位 kg；示例配置 30–200，步进 0.5；确认才写入草稿 |
| 6 / 18 | 现居地 | 省 / 市 / 区三级选择器；可选“使用当前定位”，授权及解析后让用户确认，不静默替换 |
| 7 / 18 | 籍贯 | 单独省 / 市 / 区三级选择器；不随现居变更而联动覆盖，保持独立存储 |
| 8 / 18 | 学历 | 固定枚举单选：大专 / 本科 / 硕士 / 博士 / 其他 |
| 9 / 18 | 学校 | 自由文本 0–100 字，可跳过；与学历分开输入，不由学历选项伪造学校 |
| 10 / 18 | 职业 | 独立文本，可跳过；与工作认证分开，不因填职业标记认证通过；具体长度依正式配置 |
| 11 / 18 | 年收入 | 可跳过的区间单选：5万以下、5–10万、10–20万、20–30万、30–50万、50–100万、100万以上（人民币 / 年，区间下限含、上限不含）。取消保留旧值，确定写入草稿；跳过清空为未知，不按零收入处理 |
| 12 / 18 | 婚姻状态 | 必选单选，依次为未婚、短婚未育、离异带孩、离异、丧偶；注册与编辑共用，不根据其它字段猜测默认值 |
| 13 / 18 | 恋爱目标 | 必选单选，只有一个生效字段：短期内希望结婚 / 认真交往，合适时考虑结婚 / 先认真谈一场恋爱 / 还在探索中 |
| 14 / 18 | 六张生活照 | 2 × 3 固定槽位，恰好 6 张全部上传成功才可继续；支持删除后点击 + 上传和长按拖动排序；P1 为头图；小程序重新进入注册流程时从空照片槽开始，保留其他填写内容 |
| 15 / 18 | 我喜欢 | 兴趣 chips 多选，至少 2 项、最多 4 项；实时计数，少于下限不可下一步，超过上限提示而不替换旧选择 |
| 16 / 18 | 我是怎样的人 | 人物标签 chips 多选，至少 2 项、最多 3 项；保留本人标签语义，不与对象偏好混写 |
| 17 / 18 | 更多爱好 | 图文网格 0–20 项，可不选，保存并继续 |
| 18 / 18 | 写下你的生活与期待 | 自我介绍、家庭背景、兴趣爱好、家庭观、我为什么单身、期待的另一半、理想的生活；七段均可空，每项最多 1000 字；完成填写统一校验保存，成功进入可跳过的语音介绍 |

本版生日、身高和体重使用独立选择器，点击取消或遮罩均不改变进入前原值。身高 100–230 cm、体重 30–200 kg 及其步进是可配置的演示范围，正式边界需产品确认后同步注册与编辑；不可将显示中的示例滚轮值视为用户已确认输入。生日对应完整周岁 18–80 岁是本版可配置的演示范围，不构成法律或正式准入结论；正式年龄准入与日期起止范围需另行确认，本稿不从参考图“19–29 岁”推断准入上限。

现居与籍贯均存储明确地区层级与地区码，不用自由文本冒充已选区县。省变更后清除不再合法的市 / 区，市变更后清除不合法区县；确认需有有效完整层级。用户选择当前定位前说明用途；取消、拒绝、超时、定位不可用或解析失败均保留原值，允许继续手动选择。定位返回结果待用户确认后才更新现居，不写入籍贯。原型地区联动仅提供上海、江苏、浙江、广东、北京、重庆、四川的示例数据；正式实现需接入完整且版本一致的省市区库。原型定位仅演示授权与示例地址确认，不获取真实坐标。

基础必填为性别、昵称、生日、身高、体重、现居地、籍贯、学历、婚姻状态、恋爱目标；学校与职业可选。七段文字在注册最后一步填写，之后可在「我的 → 编辑资料」继续修改：每项上限 1000 字，均可空。照片必须 6 张，不继承参考图右上角的“跳过”；不得把默认样图计为真实上传成功。七段文字、更多爱好允许留空；我喜欢与我是怎样的人按本版数量下限校验。

注册不再展示故事问答页，也不提供新增问答入口。七段文字与资料编辑复用同一份草稿和公开生效值，输入保留同会话草稿，返回不丢失，清空表示删除；兴趣标签和语音来源不得自动覆盖公开文字。旧问答仅为兼容历史数据保留，不转写为新文字。

注册与编辑共用资料 schema。新注册账户的实名、学历、工作认证初始均为“未认证”，不会继承样例账户徽章；原有样例账户的认证结果只作示例。新注册账户无动态时整段隐藏“我的动态”，不造出示例动态。最终完成 / 后续保存均原子校验字段和照片顺序；提交中禁用重复点击，失败保留草稿并允许重试，结果未知先查询。任何未保存草稿不刷新公开主页；成功后个人中心、统一资料组件、头图 P1、正文 P2–P6、注册 / 编辑回填同步更新。涉及公开资料变更后的认证状态是否重审按正式规则处理，不伪造已通过。

### 13.2 注册参考图映射

本轮 15 张 HEIC 均只作为界面与交互参考；图片内“可跳过生活照”“填写年龄”等与本轮明确要求冲突的细节不采纳。未提供单独截图的昵称、体重、学历、学校、职业、年收入（可跳过）、婚姻状态和确认步骤，沿用统一标题栏与表单视觉补齐。

| 参考文件 | 参考内容 | V4 处理 |
| --- | --- | --- |
| IMG_2026.HEIC | 性别选择，选择后不可更改提示 | 第 1 步；最终登记后只读，支持客服更正路径 |
| IMG_2027.HEIC | 年龄滚动选项 | 第 3 步改为生日日期选择器，年龄派生，不存独立年龄 |
| IMG_2028.HEIC | 身高数值列表 | 第 4 步数值选择器，显示 cm |
| IMG_2032.HEIC | 现居地、定位当前城市 | 第 6 步省市区选择 + 可选定位确认 |
| IMG_2033.HEIC | 家乡、搜索候选 | 第 7 步独立籍贯省市区选择，不默认与现居同步 |
| IMG_2034.HEIC | 恋爱目标四项 | 第 12 步；使用基础资料唯一的关系目标枚举 |
| IMG_2035.HEIC | 六格生活照上传 | 第 14 步强制恰好 6 张，不提供跳过；增加拖拽排序 |
| IMG_2036.HEIC | 个性问答“我的亮点” | 历史参考；2026-11-12 移除注册故事问答页，不再实现此入口 |
| IMG_2037.HEIC | 个性问答“我的灵魂” | 历史参考；2026-11-12 移除注册故事问答页，不再实现此入口 |
| IMG_2038.HEIC | 个性问答“我的热爱” | 历史参考；2026-11-12 移除注册故事问答页，不再实现此入口 |
| IMG_2039.HEIC | 我喜欢兴趣 chips，2–4 项 | 第 15 步主参考 |
| IMG_2040.HEIC | 我是怎样的人，2–3 项 | 第 16 步主参考 |
| IMG_2041.HEIC | 我是怎样的人下半段 | 与 IMG_2040 同一页的滚动延续，不增新步骤 |
| IMG_2042.HEIC | 我喜欢兴趣列表下半段 | 与 IMG_2039 同一页的滚动 / 重复参考，不增新步骤 |
| IMG_2043.HEIC | 更多爱好图文网格，20 项上限 | 第 16 步，0–20 项，可跳过 |

### 13.3 登录、设置与其它公共能力

当前阶段优先保证微信小程序端样式，遵循[小程序优先准则](../design-principles.md)。顶部「登录 / 注册」按文字自然宽度排列，间距 24px，选中项深色加粗、下方 18 × 3px 紫色短线；清除微信原生 button 默认边框，下划线不得复用原生边框伪元素。登录方式仍使用浅紫选中态的双按钮。以开发者工具或真机视觉验收为准。

小程序使用微信手机号授权登录。登录页在该按钮下提供「手机号注册/登录」。进入后默认是登录，顶部用与邀约「新邀约 / 计划」相同的文字下划线切换，登录在左、注册在右。注册填写手机号、密码和验证码，并先获取验证码。手机号直接作为账号，不另设账号名。密码登录填写手机号和密码，也可以使用已注册手机号的验证码登录。密码为 8–20 位，且同时包含字母和数字。手机号为大陆 11 位，规范化后仍唯一对应一个用户 ID。已注册的手机号不能再次注册；未注册手机号不能用验证码登录。同号再次登录回到原用户。换手机号视为另一用户，不迁移资料；同微信换号按新号码登录，不同微信同号仍是原用户。OpenID 不能代替本次手机号验证建立新会话。账号注册成功与基础资料登记完成分别判断。登录页展示脱敏号码，过期回到主动授权，退出撤销当前会话且不立即静默重登。

未登录允许的浏览范围由正式权限配置决定；喜欢、邀请、发布、消息、保存个人资料等需要账户的行为先进入登录，成功后回到原目标并要求用户确认继续，不自动补发邀请 / 发布等外部动作。登录注册页的用户协议与隐私政策默认勾选，可手动取消；取消后不能发起微信授权，也不能在手机号页面获取验证码或提交。登录页按参考图使用白底、浅紫圆角爱心、咔碰与 A REAL CONNECTION 品牌区、双行介绍、微信手机号授权按钮、其下的「手机号注册/登录」及协议区域。协议勾选只控制页面选择状态，不自动授予系统权限。用户主动点击微信登录按钮时，通过 getPhoneNumber 与 agreePrivacyAuthorization 处理系统隐私同意及手机号授权，保留拒绝与重试流程。隐私检查独立于认证服务初始化，失败提供重试。拒绝微信手机号授权返回原页面，用户可以继续允许的浏览。

原型获取验证码不发送短信，任意非空内容都可以通过。示例账号（手机号）13800138261、密码 clara123 只存在于原型，视为资料已完成，默认登录后进入发现。若当天未签到，先展示签到，关闭或领取后继续。由其他入口显式发起的登录返回该入口。小程序和 H5 在本地开发启用短信 mock 后，按本稿提供手机号注册、密码登录和验证码登录；生产环境当前仅开放微信手机号授权和已设密码账号的密码登录。密码摘要在用户记录上，验证码不落库、不发短信，获取后任意非空内容可以通过。注册成功且基础资料未完成时进入 18 步填写；已完成的账户进入「我的」。未完成资料的账户再次登录时，恢复该用户已保存的资料草稿。短信通道仍未接入。

设置保留账号与安全、隐私、通知、帮助反馈、协议 / 隐私政策、关于与退出登录。设置入口内容缺失时不能使用无反馈的假跳转。退出登录需要确认，退出后清除本账户会话权限与敏感草稿；公共视觉配置可保留。删除账号和通知权限另接对应流程；更换号码即换用户，不提供保留原用户 ID 的换绑。

契合分析和共同点沿用 V1 展示结构：资料中的匹配度可进入维度说明，再进入共同点与见面建议；数值 / 理由在原型中均为示例，不承诺算法真实性。若实际无数据则隐藏分数入口，不显示伪造百分比。

## 14. 客户端与服务端数据交接要点

以下是职责和数据语义要求，不限定 API URL 或存储实现。正式接口可沿用项目既有响应结构。

| 对象 | 必要语义 | 一致性要求 |
| --- | --- | --- |
| 资料 | 用户 ID、基础信息、7 段文字、有序 P1–P6、注册标签、认证结果、动态 | 注册 / 编辑 / 所有公开入口同源；年龄从生日派生；P1 头图固定；公开字段与审核材料分离 |
| 推荐批次 | 批次 ID、对象顺序、游标、是否耗尽、筛选快照 | 请求失败不冒充耗尽；处理成功才移动游标 |
| 今日浏览 | 当前用户、被浏览用户、业务日期、最后浏览时间 | 当日去重；喜欢标记读取当前关系 |
| 关系决策 | 对象、喜欢 / 不喜欢、来源、幂等标识 | 成功后更新关系；按入口决定导航，不由 API 决定跳页 |
| 邀约草稿 | 对象、模式、时间 ID 集、地点 ID 集 | 不同对象分离；保留选择；提交重新校验至少各 3 项 |
| 邀约 / 计划 | 邀约 ID、双方、状态、双方意向、最终安排（可空） | 状态转换由服务端控制，重复提交幂等 |
| 会话 / 消息 | 会话 ID、解锁权限、消息 ID、未读、发送状态 | 服务端校验权限；客户端成功提示不授予权限 |
| 编辑草稿 | 字段、照片槽位及上传状态、草稿版本 | 正式保存全部校验；失败保留草稿，图片替换成功才换旧引用 |
| 画像答案 | 题目 ID / 版本、答案、更新时间、已答数 | 第 1 题与恋爱目标同源；其余不自动覆盖基础资料或注册标签；跳过不生成虚假答案 |
| 注册草稿 | 18 步进度、字段版本、照片上传状态、七段公开文字与标签 | 返回保留草稿；最终完整校验后才标记注册完成；示例原型仅内存保存 |
| 认证 | 类型、申请版本、状态、可展示结果、可修改原因 | 原材料受限；服务端审核结果权威 |
| 会员 / 订单 | 方案 ID / 版本、价格、期限、权益、支付与生效状态 | 未确认配置不售卖；支付结果与权益状态分开 |

所有提交需校验登录身份、资源归属、字段格式、数量、状态合法性并防重复；展示文本按纯文本处理。非公开材料不能出现在公开资料接口、分享卡片、分析事件和异常日志里。客户端以用户可理解的错误提示呈现，服务端记录不含敏感原文的诊断标识。

## 15. 通用状态与边界验收

| 场景 | 必须呈现的状态与恢复方式 |
| --- | --- |
| 首次加载 / 分页 | 骨架或明确加载；保留已有内容；失败可原位重试 |
| 无数据 | 区分筛选空、无今日记录、无喜欢我的、无消息、无邀约、无计划 |
| 资料失效 | 清晰说明不可查看，提供返回；不暴露缓存原件 |
| 重复点击 | 提交中锁定；服务端幂等；结果未知先查询 |
| 网络失败 | 保留当前人、所选意向、文本和可恢复草稿，不自动跳页 |
| 上传失败 | 单图错误可重试；替换失败保留旧图；少于 6 张不可保存 |
| 返回 / 恢复 | 恢复列表位置、子 Tab、筛选、对象；跨日刷新今日记录 |
| 权限拒绝 | 明确拒绝的是相机 / 相册 / 活体 / 登录；提供适合的重新尝试路径 |
| 输入超限 | 显示字段内计数和原因；不静默截断；焦点移到错误项 |
| 未保存退出 | 提示继续 / 放弃或支持的草稿选项，不无声丢内容 |
| 候选过期 | 保留有效选择，标记失效项并要求补足，不提交失效 ID |
| 审核 / 支付异步 | 处理中可查看状态；以服务端为准，不立即伪造成功 |

## 16. 逐项验收清单

1. 只有一层可选业务标题栏；左中右组件可替换，中部居中；收起不占位；宿主胶囊安全区不被遮挡。五个 Tab 名称和图标双态正确。
2. 北京时间跨日后首次进入显示推荐过渡，成功后展示首人、空态或可续看的原批次，同日重开保留进度。跨日旧请求返回时重新检查当天状态。今日浏览在回前台时清掉昨日条目，同日重复浏览只保留一条，返回列表同步状态与位置。
3. 发现底部文案为“邀请见面”，有背景色，与左右按钮同高度、同端部圆角；三操作不遮挡资料末尾。
4. 发现点喜欢和不喜欢均在成功后进入下一人，已喜欢对象再次喜欢也须幂等成功后进入下一人，失败停留；历史进入执行同样操作成功后仍停留当前对象。
5. P1 为固定头图，同一对象头图没有切换；自介之后无图，家庭背景后 P2、兴趣后 P3、家庭观后 P4、单身后 P5、另一半后 P6、理想生活后无图；缺文缺图独立省略且不移槽。
6. 喜欢页仅有消息 / 喜欢我的；喜欢我的列表邀请按钮可直接打开弹窗，点卡片则进入无操作组资料。
7. 邀请与接受均要求时间至少 3、地点至少 3；2+3 不可提交、3+2 不可提交、3+3 可提交、4+5 可提交；取消后不足立即禁用；第 4 项不报上限错误。
8. 一级入口名为“邀请”，页面只有新邀约 / 计划；消息从喜欢页进入；计划状态、未定安排和已确定安排不混用。
9. 新邀约、计划查看资料、我的预览和喜欢我的查看资料均不显示三操作；返回来源正确；所有入口使用同一资料渲染。
10. 推荐处理完最后一人进入推广终页；零筛选结果和错误态不误进推广。会员入口直接进入同页方案与订阅，可返回来源；价格月度198/季度458，支付反馈均为本地演示，不产生真实扣款或授予真实会员状态。
11. 注册和编辑均必须恰好 6 张有效生活照；5 张不能完成 / 保存；第 7 张不增加槽位。拖拽 / 前移后移重排只更新草稿，保存后 P1 与公开正文顺序同步；替换失败旧图仍在。七个文本输入齐全且长度上限正确。
12. 旧问卷的题库、作答状态、所有页面与入口均不存在；我的和编辑资料可进入同一语音流程，旧题深链回到语音开始页；支持重答、跳过、暂停、恢复及提前完成。
13. 三种认证各有说明、表单、授权、提交、审核、通过 / 失败重试；拒绝授权不变成认证通过；原型不会接收真实敏感材料。
14. 加载、空态、断网、重复提交、资料失效、过期选项、上传失败、返回与未保存退出均有反馈和恢复路径。
15. 注册 18 步可前进 / 返回并回填；生日日期控件、身高和体重各自数值控件、现居和籍贯各自省市区控件、学历枚举和学校文本均单独可操作；取消选择不改原值，定位拒绝不阻断手动选择。
16. 最后一步“写下你的生活与期待”点击“完成填写”即完整校验并保存基础资料，不再出现“确认你的心动资料”页面；更多爱好可留空，基础必填与 6 张图片校验失败不可完成；保存成功进入可跳过的语音介绍；跳过或完成后恢复原目标、无目标回发现，语音未完成时一级 Tab 顶部保留引导。编辑后成功保存刷新所有资料入口，失败保持旧公开值和编辑草稿。
17. 我喜欢限制 2–4 项、我是怎样的人 2–3 项、更多爱好 0–20 项可跳过，七段文字每项不超 1000 字。恋爱目标只维护一份生效值；语音候选、历史问答及注册标签保持语义分区，不按题目拆表。
18. V1 筛选 chips、年龄 / 身高双范围和重置 / 应用正确；返回不应用，重置仅改草稿。我的昵称右侧无设置图标或热区，我的动态无条数，列表设置可进入。

19. 会员方案、条款与订阅反馈在同页完成，月度198/季度458及免费10位/月度20位权益正确；安全权限同页双开关、按钮位置颜色已互换。我的和编辑资料可进入语音收集，旧心动档案所有页面与入口已删除；旧题深链回到语音开始页。
20. 我的展示咔贝 / 积分及充值入口；登录未签自动弹，7日递增与轮回、断签重置、会员加赠、同日幂等符合后台配置。
21. 充值100元起，1元兑换1咔贝；新邀约按最新编辑时间倒序，计划按约见时间倒序，等待确认归新邀约，约会中不置顶、不新增详情流程。周签到两行八格、今日合并两格；过去未签置灰并标记；积分/咔贝名称与数值不拆行，连续奖励文案与到账计算一致。
22. 约会中安全卡片可进入报警确认；短按不拨号，长按后需再次确认；拒绝设备权限不阻断电话，记录停止/离页/退后台释放。
23. 资料底部小程序分享与举报/屏蔽覆盖所有来源；举报原因两列、必选一项；本人不举报自己，屏蔽不能经切换上下文绕过，分享不含草稿与私密内容。

## 17. 正式实施前需要确定的业务决策

这些是上线配置与系统决策，不阻塞设计稿的本地演示；不得以原型默认值代替正式确认。

| 决策 | 必须明确的内容 |
| --- | --- |
| 会员方案 | 实际价格、币种、可售期限、权益清单、推荐额度影响、续费 / 退款 / 到期策略、运营文案与可售人群 |
| 支付 | 微信 / 宿主允许的支付路径、订单与回调、对账、幂等、支付后权益同步、取消和失败处理 |
| 推荐批次 | 每日 / 每批数量、刷新时机、去重周期、筛选重置是否获得新批次、会员推广触发与频控 |
| 浏览数据 | 业务日时区、服务端保留期限、注销与清除规则、浏览记录隐私范围 |
| 邀约与排期 | 候选来源、候选有效期、双方意向如何匹配、无交集处理、确认人、超时、撤销 / 取消24小时边界 / 婉拒 / 重发限制及未排期撤回规则 |
| 赴约与消息 | 到达和完成的判定、双方确认、爽约 / 争议处理、首次有效赴约开始时授权、屏蔽/停用限制及可见历史；非到场核验前置 |
| 认证审核 | 实名 / 活体供应商、学历和工作审核方式、接受材料、字段最小化、审核 SLA、申诉、有效期、重试限制 |
| 材料保护 | 授权文案、敏感草稿缓存策略、加密与权限、保存和删除期限、供应商处理边界、证件与活体素材的退出清理 |
| 图片与内容 | 图片大小 / 格式 / 分辨率、审核状态和公开策略、社区上传上限、文本审核、举报与屏蔽 |
| 画像与匹配 | 语音题库与来源字段、公开可见范围、五维评分配置、解释与用户修改及撤回方式 |
| 账号权限 | 未登录可浏览范围、登录恢复路径、基础字段必填规则及性别更正机制、隐私 / 通知 / 注销真实流程 |
| 注册配置 | 正式年龄准入、生日可选范围、身高 / 体重数值边界与步进、地区码版本、职业 / 婚姻枚举、定位精度与权限说明、昵称与学校长度、个性题库和标签运营配置 |

设计交付验收以本文件与 V4 原型、高清图相互核对；若原型局部交互仍是演示提示，正式开发仍需实现本文件中的校验、状态与服务端边界。不能据本设计交付推断生产功能、审核或支付已经上线。


## 18. 智能球语音收集

本节按最新精简要求替代此前 21 页语音流程。当前原型只保留 7 个页面/状态；不改变注册、六张生活照、三类认证和真人聊天解锁规则。

### 18.1 入口、声明与系统权限

基础资料填写成功后先进入可跳过的 voice-start；我的、编辑资料与一级 Tab 顶部提示也进入同一流程，基础资料未完成时先补齐。新访谈进入 voice-start；已有未完成内容可回到当前问题或暂停状态。保留当前返回来源，结束或稍后继续后回到来源页面，不强制跳往其他入口。

开始介绍页移除六主题卡片、文字替代入口和长提示。保留标题、智能球视觉、主按钮，以及短声明：“点击开始即同意使用本次语音完善个人画像与匹配。你可以随时暂停、跳过或结束。”

点击“开始语音完善”直接请求系统/浏览器麦克风权限，不先进入“用途与保留选择”或模拟授权页。采集、文本整理与保存及匹配等功能选择预设开启；访谈语音文件不留存，无逐项勾选和中间确认。系统权限由系统控制，不能通过默认选择绕过；拒绝、无设备和设备占用有明确重试/稍后继续入口。

当前原型真实请求麦克风权限后立即停止所有 tracks；不创建录音、不识别、不上传、不调用模型。访谈页保留唯一短标识“交互演示，不录音或上传”，移动端同样可见。系统已允许权限时可能直接进入，不一定每次出现弹窗。

### 18.2 7 个页面与智能球

| 页面 / 状态 | 路由 | 主要操作 |
| --- | --- | --- |
| 开始介绍 | voice-start | 简短声明；开始语音收集才请求权限，暂时跳过恢复目标/发现 |
| 主题提问 | voice-interview | 下部智能球，轻触开始；跳过/提前结束为小文字操作 |
| 语音收集 | voice-recording | 智能球流动与呼吸动效，轻触暂停，回答完毕直接下一题 |
| 已暂停 | voice-paused | 智能球低频缓动并显示暂停态，轻触继续；可稍后继续 |
| 麦克风异常 | voice-permission-denied | 拒绝/无设备/占用/不支持环境说明，重新授权 |
| 连接或识别异常 | voice-recovery | 保留当前问题及进度，重试或稍后继续 |
| 采集完成 | voice-done | 展示结果（原型为示例画像摘要），返回原目标/来源，无目标回发现 |

主体问题常驻，展示当前主题与已处理主题数。启用实时识别的小程序在题目下方展示当前回答文本，识别中的文本随回调更新；暂停时保留已完成的片段，重新回答清空当前题内容，切换题目不带入上一题文本。沿用现有页面和操作，不增加转写确认页。智能球三态有明确文字及可访问名称；暂停动效明显弱于收集态，不暗示仍在录音。支持系统“减少动态效果”设置。

正式目标以 questions.md 的十四类主题为覆盖范围，一次可只处理部分主题，每类最多两道系统问题，已有回答覆盖的内容不重复问；不想生育时跳过后续养育安排。不为歧义强制追问，不把跳过/未定当不限。当前原型仍使用10个主问题、6个可选话题与六主题的预设演示顺序，这是演示数据，不表示十四类服务端策略已实现；本轮未改变页面、题库演示或视觉布局。

### 18.3 删除的页面与自动整理

删除用途与保留选择、独立授权演示、文字替代、转写与示例回答、纠正原话、转写核对、画像勾选、用途选择、主页草稿对照、独立恢复与离开保留选择等中间流程，导航和高清图索引不再展示它们。旧语音路由统一回到开始页。

回答完毕直接下一题；主线完成或先到这里直接结束并整理。正式产品由服务端保留证据、来源版本、未知和歧义状态，不为歧义强制澄清，只采纳有明确依据的部分；每类最多两道系统问题，任何可选核对也计入预算，恢复不重置，不能因为移除确认页而伪造“用户已确认”。默认功能选择不等于自动发布或覆盖既有公开资料，不授权模型训练。

再次打开按账号进度跳过已收集题，进入未收集的问题。有未提交的当前题转写时可继续处理该题。跳过和未保存的题目之后仍可补答。结果页有未收集题时提供“继续收集”，全部收集后只保留返回操作。重新打开和展示结果均不自动申请麦克风。原型用示例回答演示此规则，小程序当前保存题号进度，转写文字限当前页面会话。

原型的“回答完毕”填入对应题库预设演示内容并标记 source=demo；完成页明确为“示例画像摘要”。这些内容不作为真实用户自述、不进入有效匹配投影，也不改写注册、照片、认证或公开主页。状态仅本次页面会话，刷新重置。

### 18.4 异常与恢复

权限请求中防重复；切页或退出后，晚到的授权结果释放设备且不能把用户拉回访谈。网络中断保留当前问题和已有回答；重试不重复记录上一题。暂停、返回和稍后继续停止收集态；系统未授权时重新请求，不以原型变量替代真实权限。

原型只演示设备授权与页面状态，正式录音、语音识别、静音判断、服务端存储及模型接入另行实现。新版产品路径不再要求逐段转写确认；已有接口文档的 complete 前置约定须随实现同步修订，保持事实来源与不确定性，不能将默认功能同意当作识别准确证明。

### 18.5 智能球视觉优化（2026-10-25）

智能球调整为接近 iPhone Siri 的小尺寸彩色光晕：操作球直径 72px，介绍页装饰球 76px；采用浅色中心及蓝、紫、粉、暖色流光边缘，移除大面积实心紫球和宽外圈。收集中保留轻呼吸与流光，暂停时降低饱和度并弱化动效；触控与减少动态效果支持保留。


## 19. 我的资产、每日签到与咔贝充值

### 19.1 我的资产

个人中心新增双余额卡：咔贝、积分。咔贝旁提供“充值”入口，卡片右侧提供“每日签到 / 今日已签到”。余额由服务端账户资产返回，签到或充值成功后同步刷新。我的页面使用第 11 节的语音完善入口。

### 19.2 极简签到弹窗

登录完成且账户资料已齐全时检查签到。新用户先完成基础资料并处理可跳过的语音介绍。当天未签到自动弹窗，关闭或领取后继续原目标，无指定目标时进入发现的每日推荐流程。当天已签直接继续。关闭不领取，仍可从我的页进入。弹窗去掉标题上方装饰图标。签到按周一至周日展示：四列两行、八个网格单位，今日横向合并两格，其余六日各一格；今日置首突出，其余日期按星期排序。每个奖励条目按“积分 +5”“咔贝 +2”展示，名称与数值不拆行，今日合并格中两类奖励并排展示；其他小格中每类奖励各占一行。过去日期置灰，实际领取显示已签到，过去漏签显示“未签到”，未来显示待签到。方块组上方文案为“连续签到 xx 天　连续奖励 +xx积分，+xx咔贝”，展示相对当轮第1天基础奖励的加赠，未有加赠时显示0；奖励条目已含加赠，不重复累计。周内展示与连续奖励的7日轮回分别计算，领取历史独立保存，不能用连续周期天数推断过去已签到。会员用“♛ 会员加赠”标记，底部仅保留“7 天一轮 · 断签重计”。点击后按钮显示领取中并禁用；成功原位展示勾选和已得奖励，点击“收下啦”关闭；失败保留领取资格并支持重试。

以服务端业务日期（Asia/Shanghai）计日，同一账户同一天限领一次。连续签到第 1–7 天两类奖励分别递增，第 8 天回到第 1 天；漏签后下次从第 1 天开始，不倒扣已有余额。普通用户、会员分别读取后台配置的 7 天咔贝 / 积分奖励表，会员每天两类奖励均高于普通用户。会员身份以领取时服务端认定为准；同日升级会员不重复发放、不补差。已领取时应展示实际到账记录，不随之后配置变化而改写。

配置包括版本、生效日期、普通 / 会员各 7 天奖励及有效状态；服务端校验整数范围、递增与会员加赠约束。配置加载失败只显示重试，不使用本地默认数值发奖。服务端以账户 + 业务日期唯一约束原子写入签到记录与两类资产流水，客户端仅同步结果；超时结果未知先查询当日记录再重试。配置更新不追溯已领取奖励。退出登录清空当前账户视图，切换账号重新加载资产及签到记录。

交互原型中的日期、会员身份、余额和奖励均为本地演示数据；奖励表用于模拟后台配置响应，尚未接入实际配置接口，不代表正式赠送标准。

### 19.3 咔贝充值

我的 → 咔贝旁“充值” → 独立充值页。100人民币对应100咔贝，最低100元起充，统一1元=1咔贝。展示当前余额、100/200/300/500/1000/2000元六档、等额咔贝及应付金额；选择档位后更新底部微信支付按钮。支付中禁用重复提交及切换档位；成功展示到账咔贝并返回我的刷新余额，积分不变。原型所有价格、到账和支付结果仅供演示，不发起扣款。

正式档位读取后台上架配置，后端强制最低100元及人民币/咔贝1:1约束，不能通过前端篡改绕过。后端创建订单时校验档位有效性与金额，不接受客户端自报价格；微信支付签名回调校验后按订单号幂等入账。客户端返回成功不能直接增加余额。取消支付和失败保留选择可重试；结果未知、应用退出或回调延迟时查询订单状态，再决定恢复支付或展示到账。生产充值能力需按实际小程序支付可用范围接入。

### 19.4 验证证据

`checkin.tests.cjs` 验证普通与会员奖励表、同日幂等、断签重置、7 日轮回、日期及溢出校验；先运行缺失模块的失败测试，再实现规则，规则行覆盖率 98.25%。`checkin.e2e.cjs` 验证资产卡、极简签到、会员加赠、登录自动弹、充值档位选择与演示到账、积分不变及配置失败重试。原型不连接真实支付、资产或签到后端。


## 20. 约会安全、资料分享与举报屏蔽

### 20.1 约会中的安全卡片

计划列表的约会中卡片内并列“举报”和“一键报警”：举报直接进入对应对象举报页，一键报警进入现有安全记录页，不提供“查看约会”或整卡跳转，不单独增加约会中详情与流程；待赴约、已完成、已取消状态不展示此卡片入口。本地以 Emma 记录演示约会中状态，正常按约见时间排序，不将待赴约直接视为约会中。安全中心内报警电话和安全记录独立，任一权限状态都不能阻断拨号。

防误触流程：点击入口 → 展示当前约会与报警电话 → 长按2秒 → 再次确认拨打 → 正式产品唤起系统拨号确认。松手不足2秒、移出按钮、失焦、退后台或返回取消当前长按；中途离开必须重新长按。不能将唤起拨号等同于报警成功或警方接警，也不能承诺自动传送位置、证据或自动通知对方。原型不拨打110，只展示“未实际拨号”的状态。正式部署按所在地返回适用紧急号码，不由客户端任意输入号码。

安全中心当前按钮布局：顶部使用统一紫色主按钮“开启安全记录 / 停止记录”，下方安全记录卡片内为红色“一键报警”（背景色 `#c3272b`）。顶部短提示说明开启可能唤起摄像头和麦克风。点击开启进入一个 `safety-permissions` 页面，以两个独立开关承载摄像头、麦克风用途和选择，不再分为两页。切换只修改本次授权草稿，不自动记录，取消或返回不提交；至少开启一项后点击“开始记录”才生效。正式设备系统权限仍须按实际结果校验，开关不能伪装系统已授权；允许部分权限仅使用已允许能力，两项均拒绝不开始记录。权限拒绝不影响报警，正式接入时由用户主动前往设置恢复，不能循环强制授权。显著展示记录状态及停止按钮；停止、离开安全中心、退后台或页面卸载都应停止采集并释放设备。系统调用失败、权限撤回、设备被占用或存储失败时应立即结束相应记录，展示失败及可用求助入口，不伪装仍在采集。当前演示只保存会话内状态，不调用摄像头/麦克风、不生成或上传媒体。

生产接入前，权限、音视频告知、保存位置、保留期限、删除入口及严格访问控制需由正式服务定义并显示给用户。资料分享、举报接口均不得自动包含安全记录；上传应额外获得明确授权，后端仅允许访问本人关联约会及本人记录。

### 20.2 资料页底部操作

所有资料入口复用统一组件，在完整资料内容底部追加浅灰整行按钮“介绍给朋友”，分享图标位于文字左侧；其下为居中、低强调的“举报/屏蔽”。本人资料保留公开资料分享，不显示针对自己的举报/屏蔽。原有推荐喜欢/跳过/邀请操作保留。

分享：点击“介绍给朋友” → 咔碰小程序卡片预览 → 分享小程序给朋友 → 通过小程序打开该对象公开资料。分享类型为微信小程序，不再提供生成图片卡、海报或网页分享选项。正式微信宿主使用原生小程序分享能力，载荷包括 `title`、`path`、`imageUrl`，以用户ID绑定公开资料落地路径；接收者未登录可先完成登录再返回原目标。分享对象绑定入口用户ID，姓名、年龄、头像只读已保存公开资料，不带未保存草稿、联系方式、内部画像或约会信息。私密、已屏蔽、被删除、被停用或撤回公开的资料不允许分享；分享链接落地时服务端再次鉴权，不依赖分享时的可见状态。原型仅生成小程序分享的本地预览，不向好友发消息；取消或预览不声称已发送。

举报：点击举报/屏蔽 → 举报 → 选择原因 → 可填300字具体描述 → 提交 → 结果页。页面参考用户截图：标题栏“举报”，对象提示，提示语“请选择你要举报的事项类型：”，两列平铺原因按钮；选中原因使用品牌色实底，下方为“具体描述：”输入区。原因固定为头像非本人或无法看清正面、内容乱填/虚假资料、资料透露联系方式、垃圾营销广告、婚托/饭托/酒托等、色情低俗/诈骗等、聊天内容不适/骚扰（仅限本平台内聊天）、其他。原因必选，用户输入转义显示，正式提交由服务端确认并处理防重复、失败重试和频率限制。原型只展示本地结果。

屏蔽：点击举报/屏蔽 → 屏蔽此人 → 二次确认。确认后该对象的资料互动、分享和邀请被拦截，可在屏蔽状态页主动解除；当前资料来源和对象ID分开处理，不能因切到本人主页后绕过屏蔽。正式接入需同步推荐、喜欢、消息及邀请查询过滤，保留必要的安全举报入口和约会记录，不自动取消既有计划或删除证据。屏蔽不是报警，也不保证对方无法通过其他渠道联系。

### 20.3 验证

`checkin.e2e.cjs` 覆盖无顶部图标、两行八格、今日合并、所有星期位置、周切换、漏签及已领历史；`date-safety.e2e.cjs` 先验证缺少报警入口的失败，再验证防误触、取消、拨号演示、权限允许/拒绝、部分能力与离页停止；`profile-social.e2e.cjs` 覆盖全资料入口、分享、举报、屏蔽与目标隔离。所有外部行为为本地示例。


最新卡片规则：待赴约计划统一使用列表首张卡片的白底、细边框样式；正在约会卡片左侧为举报，右侧一键报警进入现有安全记录功能，安全记录页的报警按钮再进入原防误触求助流程。约会卡片举报绑定当前对象，提交或返回后恢复计划列表位置。


## 21. 长期设计准则与数据方案

**数据库表要最小数量的设计，尽量避免分多个表进行数据表述。** 同主体资料优先合表、字段语义分区，持续增长记录逐条保存；新增表须说明具体原因。最新全闭环目标为 10 表，目标算法为固定条件白名单、整体画像向量召回、Jev 双向语义判断及代码聚合排序；它们属于后续目标设计，不代表本次认证已经创建这些表或实现推荐算法。详见 [产品需求](../requirements.md)、[算法数据库设计](../algorithm-database-design.md) 和 [固定准则](../design-principles.md)。


### 21.1 语音与推荐目标同步（2026-11-02）

保留七个语音页面和我的/编辑入口，补充基础资料完成后的可跳过引导及一级 Tab 顶部未完成提示，不恢复旧问卷，不增加转写核对、用途勾选或逐项确认页。每类最多两道系统问题，不要求一次覆盖十四类；跳过和提前结束有效，不为歧义强制追问。原型及小程序当前仍为设备/页面和预设回答示例，尚未实现服务端题数预算、真实录音提取、固定条件、向量、Jev 及七天推荐。

正式目标逐条保存原话及 summary，并在用户行汇总画像；固定十四类条件由代码校验，未映射内容保留文字。语义召回及双向评估与精确硬筛分工，不把相似度或分数展示为成功概率。推荐记录展示推荐日期，发布起168小时到期；每日先清理再排除有效记录，仅最终入选计已推荐，与邀请及真实浏览分开。具体 Schema、规则和验收由需求与算法文档统一定义，本次不改变原型的演示行为。


### 21.2 语音仅转写为文本（2026-11-02）

正式目标在每轮回答结束后直接用支持语音输入的大模型转写，只保存最终文本、summary 和来源；不保留录音，不提供回放，不新增原声保留选项。临时录音在成功、失败、取消、超时、退出及异常恢复时清理；无已存文本的失败回答需重答，已保存文本按幂等恢复。开始说明中的保存指文本及派生结果，不是录音留存；不改变当前原型“不录音、不上传”的演示边界。

### 基础资料生活照排序（2026-11-03）

第 14 步保持两行三列的固定 P1–P6 布局，上传和删除只改变所选槽位。按住已上传照片的六点手柄拖动时，照片跟随手指，目标槽高亮。松手到已有照片的槽位时互换，到空槽时移动，P1 为头图。不显示文字“前移 / 后移”按钮。每张已上传照片右上角固定 × 删除图标，点击仅删除该图；已上传图片不响应点击上传，删除后点击空槽 + 重新上传。取消拖动或落在六个槽位之外保持原位置。上传、保存中禁用排序和删除。排序保留在草稿，沿用下一步的保存机制。客户端已实现；微信开发者工具 / 真机触控和视觉验收仍待完成。

2026-11-04 照片上传库存恢复：PHOTO_LIMIT 时不再要求用户先保存。弹出“清理待保存照片”，明确告知将清理历史和其他编辑页未保存照片，其他页面可能需重新上传；用户可取消。确认后在同次上传事务中保留当前页选中引用、正式资料及服务端草稿，清理其余本人库存并重试上传。保持原有 12 张库存上限与六张提交要求，不自动清理其他编辑中的照片。


### 21.3 匹配与交互数据库映射（2026-11-04）

完整链路见[匹配算法设计](../matching-algorithm-design.md)，字段与交互事务矩阵见[算法数据库设计第5.6节](../algorithm-database-design.md#56-对照交互的数据字典与待实施扩展)。基础资料仍取注册/编辑的同一生效值；语音回答只存逐条文本，用户行汇总画像与固定条件，整体摘要不替代原文。数值硬筛通过双方结构化字段完成，不要求把身高/年龄插进自我描述。发现筛选只有应用才生效，重置只改草稿，取消不改旧值；与长期必须条件共同执行，不静默放宽。

语音开始/继续、预算、跳过/重答和异常恢复按当前七状态投影到voice_state及voice_answers，不新增中间确认页；原型仍为演示。推荐发布计入七天记录。当前发现与浏览的写入规则见 §4，邀请保留当前推荐对象。公开资料、私有匹配文本和原始回答分别按白名单读取。现有PostgreSQL users实际1表，本轮仅补目标数据设计，未执行语音/匹配扩展迁移。

## 2026-11-05：基础资料后的可跳过语音收集与顶部引导

基础资料 18 步全部校验并保存成功后，进入语音收集介绍页，提供主操作“开始语音收集”和弱操作“暂时跳过”；进入介绍页不申请麦克风权限，只有用户主动开始才申请。跳过不撤销基础资料完成、不标记语音完成、不阻断使用；跳过或完成后恢复此前目标，无目标回发现。基础资料未完成时，语音入口先引导补齐基础资料，不创建访谈或申请麦克风。

已登录且基础资料完成、语音尚未完成时，在发现、社区、喜欢、邀请、我的五个一级 Tab 的内容顶部（公共标题栏下、业务内容前）展示非阻断提示“完善语音资料，让我们更了解你”；未开始操作为“开始语音收集”，进行中/暂停/异常恢复为“继续语音收集”。提示参与正常布局，不遮挡内容、不重复叠加，不强加到二级页面；切 Tab、重新登录及刷新按当前账号服务端状态恢复。点击开始或继续进入同一语音流程，返回保留原 Tab/子栏目/滚动位置；我的卡片与编辑资料入口继续保留。跳过后提示仍保留，只有服务端确认语音已完成才隐藏；状态查询失败不伪造完成、不自动请求权限。

语音完成状态与基础资料完成独立，复用目标 users.voice_state 的有界状态，不新增提醒表或语音完成表。未开始、跳过、进行中、暂停及异常均不能冒充完成；用户主动提前结束且至少已有一条有效、已保存的回答时，可由服务端确认本次采集完成并隐藏提示，不要求问满十四类或补齐未知信息；全部跳过、没有任何有效表达或回答尚未保存时仍属未完成，不能仅因进入完成页写 completed。跳过整段引导不同于跳过当前题；恢复不重置每类最多两道系统问题的预算。原型演示完成不写入真实账号完成状态。

验收：资料保存失败不跳转；跳过可正常使用；五 Tab 顶部只出现一份提示，开始/继续与账号真实状态一致；完成后所有 Tab 同步隐藏；恢复、切号和迟到响应不串账号。新流程为现行设计目标，客户端实现与真实语音服务仍须按开发任务验收。

## 23. 2026-11-05 消息、收费邀约与后台联动

新的聊天门槛替代旧“成功赴约后”规则：时间取服务端、安排取双方同版确认的首个有效计划；开始前点击消息行显示计划，开始时及之后进入聊天。开始前改期重新计算、取消不授权；已经取得的双方聊天资格不因后续邀约改期或取消倒退。前后台恢复与临界时间刷新权限，不信任客户端修改时间。

后台界面见 [后台交互设计](../admin-interaction-design.md)。其报价发布控制发起扣款弹窗；取消限制与聊天开始规则由服务端固定校验，不能由运营将客户本机倒计时当权威。后台、本地原型、真实小程序和真实扣款服务分别验证。


## 2026-11-06 取消归还交互

成功取消约会计划时，按原支付来源归还至原付款账户：咔贝支付退回原订单实际支付数量的咔贝，不按原标价或当前价格计算；免费约见券支付向原账户发放1张新的免费约见券，旧已使用券不恢复。取消人和原付款人不同时仍只归还原付款账户。取消状态、余额/券权益与退款/新券流水同事务提交，失败全部回滚；同一原消费及取消业务键只归还一次，超时先查询，不能重复退款或重复发券。原消费流水不可改删。

原24小时规则保持：仅 server_now < meeting_at - 24小时允许普通用户取消，恰好24小时及之后不可取消，也不能触发本取消归还。此规则仅确定已排期计划成功取消的处理；邀约被拒、未成计划就过期、争议/运营例外仍按各自待定政策，不自动套用。新券有效期、适用范围及券/咔贝消费优先级由正式配置与产品策略明确，不擅自继承旧券期限或承诺永久有效。

可取消弹窗在计划信息与两操作之间显示归还提示：“按原实付N咔贝退回原付款账户”或“向原账户新发1张免费约见券”；保留计划不扣/不退，确认期间禁重复。成功详情与列表同步取消，并明确对应到账/发券结果；归还失败保留原状态，超时展示结果未知并先查同一取消结果。不能先展示已取消再让用户另点退款，也不能把新券描述为恢复原券。金额、来源及收款账户归属由服务端提供；原型只改本地示例，不等于真实入账。


## 2026-11-06 双方接受后归入约会计划

发起成功只代表发起方接受，仍在“新邀约”等待回应。对方完成接受意向提交后，双方已接受的同一邀约ID立即从“新邀约”移除，在“计划”中仅展示一次；失败不迁移，重复提交不重复建卡。未排期时显示“待安排”及时间/地点待安排，结果页主按钮为“查看约会计划”。

计划保留已排期记录的meetingAt倒序；待安排分组在后，按updatedAt倒序和稳定ID排序。双方接受不等于双方同版本确认排期，不提前开放真人聊天、军师或依赖确定排期的普通取消入口；既有24小时取消、原付款归还及首个有效计划到点聊天规则不变。原型旧排期与新待安排按不同ID隔离，遇到同人并列场景明确标注独立历史示例。

本次原型为本地状态演示；真实服务应以同一date_invitations状态及版本原子派生互斥列表，不另建计划或迁移记录。新规则的单元与失败/重复/账号重置E2E为invitation-acceptance.tests.cjs和invitation-acceptance.e2e.cjs；四态图见mutual-acceptance-board.html。


### 2026-11-12 我的动态图片陈列

动态图片按数量排列：1 张沿用大图；2 张一行两列；3 张一行三列；4 张为 2+2；5 张为 2+3；6 张为 3+3；7 张为 2+2+3；8 张为 2+3+3；9 张为 3+3+3。多图每行等宽方形裁切，保留图片顺序与预览；仅整组四个外角圆角，内部接缝不倒角。

### 2026-11-12 注册末步公开文字同步

移除“用几个小故事认识你”。前 10 步不变，11 年收入（可跳过）、12 婚姻、13 目标、14 照片、15 兴趣、16 性格、17 更多爱好、18 七段公开文字。末页复用资料编辑多行输入、实时计数和 每项 1000 字上限，七项可空；保存前后使用同一份 public_texts，不新增表，不从旧问答或语音自动生成。保存成功再进入可跳过语音介绍。

### 注册表达与候选扩展（2026-11-12）

七段公开文字统一每项最多 1000 字、均可选填；逐项占位提示提供 2–3 个具体方向，注册与编辑使用同一文案，超限保留全文并禁止提交。兴趣、性格、更多爱好分别保留原有 26 / 19 / 24 项并新增 20 项，候选总数为 46 / 39 / 44；选择数量规则保持兴趣 2–4、性格 2–3、更多爱好 0–20 项，新增候选不改变旧值含义。

七段占位提示（注册与编辑完全复用）：

| 字段 | 占位提示 |
| --- | --- |
| 自我介绍 | 可以聊聊你的性格特点、日常生活节奏，以及朋友眼中的你。 |
| 家庭背景 | 可以聊聊家庭相处氛围、家人带给你的影响，以及你喜欢的相处方式。无需填写家人姓名、联系方式或具体住址。 |
| 兴趣爱好 | 可以聊聊常做的兴趣活动、最近的新爱好，以及想和另一半一起体验的事。 |
| 家庭观 | 可以聊聊你看重的家庭氛围、家务分工想法，以及遇到分歧时希望怎样沟通。 |
| 我为什么单身 | 可以聊聊你目前的生活状态、对关系的思考，以及希望以怎样的节奏认识一个人。不必分享不想公开的经历。 |
| 期待的另一半 | 可以聊聊你欣赏的性格品质、期待的沟通方式，以及希望共同培养的兴趣。 |
| 理想的生活 | 可以聊聊理想的日常节奏、工作与生活的平衡，以及想一起实现的小计划。 |


### 2026-11-12 品牌 Logo 更新

登录页与基础资料开始页统一使用用户最新提供的 logo(2).svg（192 × 192，顶部中间浅绿线条缩短版）品牌图形（深蓝、浅紫与浅绿碰撞标志），保留原始配色、透明背景、完整画布与等比缩放，不再使用旧心形作为品牌标志。客户端源文件为 `client/src/static/logo.svg`，小程序使用同源透明 PNG `client/src/static/logo.png`；现行原型使用 `assets/logo.svg`。原有外框、文案和流程保持，喜欢、会员等业务心形图标不变。小程序构建检查与真机视觉验收分别记录，不能以原型截图代替真机验收。


### 2026-11-12 图片放大预览水印

所有点击图片进入的放大预览统一在实际图片右下角展示「品牌 Logo + 咔碰App」水印：包含自己 / 对方资料照、资料动态、社区列表 / 详情和发布前预览。原始上传图片与列表缩略图不改写。使用原色 Logo、白色 13px 半粗文字，Logo 27px；深色半透明底，右 / 下距图片边缘 12px。图片完整等比显示，水印随图片缩放，不能停留在屏幕黑底角落。支持多图切换、当前图定位、双指缩放、关闭返回、加载失败重试；缩放时先还原再切换图片。预览地址仅在内存临时传递，不放入路由参数或持久存储。当前自定义预览不提供原生长按保存，不暴露绕过水印的原图保存入口。原型使用双击演示缩放、按钮 / 方向键切图；小程序实际手势与视觉仍须开发者工具 / 真机验收。


## 资料图片加载补充 2026-11-12

状态：首阶段实现已完成，真机视觉与弱网性能待验收。[状态演示](cache-loading-board.html) 从原型侧栏可达，示意不替换现行资料页面。推荐、今日浏览和社区资料复用相同版本照片；文字与已就绪图片逐步展示。单图 loading 保留原槽位；单图 error 显示“图片加载失败，点击重试”，仅重试该图；不得因一图失败隐藏其余生活照。点击重试不产生喜欢/浏览等新业务动作。资料不可查看时隐藏全部旧图片并使用既有不可查看反馈；退出/换号不得闪现上一账户图片。成功态保持原图尺寸、布局、裁切、水印、顺序与返回位置。完整规则见 [方案 §5](../cache-design.md)。


### 缓存改造首阶段实现状态 2026-11-12

推荐、今日浏览和社区资料已接统一会话图片缓存；生活照失败保留原位置并显示“图片加载失败，点击重试”，重试不重下成功图；图片解码失败清除该图引用。重新进入与前后台恢复先确认查看资格，租约最长30秒，到期隐藏再校验；不可查看时复用“此资料暂不可用”反馈。成功态布局、顺序和水印保持原规范。状态演示仅用于交互说明；原生小程序构建验证与浏览器联调不等于真机视觉或弱网验收。预览当前复用card图片，1600像素preview变体UI仍待接入。


2026-11-12 手机号登录注册流程修复：登录页始终保留「手机号注册/登录」入口；手机号页默认登录，登录在左、注册在右，保留密码/验证码登录切换。模拟短信开关只控制开发模拟提示，不隐藏业务入口或阻止切换。注册仍填写手机号、密码、验证码；验证码登录仍要求已注册号码。短信未接入时明确提示暂不可获取，并显示服务端错误；生产继续禁止模拟认证。原型为交互演示，不代表真实短信已接入。


2026-11-12 登录页入口调整：登录页协议区域下方不再展示首次使用提示或独立的完善注册资料入口；用户通过微信手机号授权或手机号注册/登录完成登录后，基础资料未完成时继续进入填写流程。


2026-11-12 七段文字提示样式：七段文字输入框的 placeholder 仅保留具体填写方向，移除末尾“选填，最多1000字。”；提示字号为 13px（小程序注册页 26rpx），行高为 1.8。注册与编辑资料共用此规则，仍允许留空、每段上限 1000 字，并保留独立字数计数。

### 2026-11-12 年收入可选步骤

基础资料在现有职业 / 工作信息步骤之后、婚姻状态之前增加第 11 步“你的年收入”，总计 18 步。复用底部单选选择器，区间为 5万以下、5–10万、10–20万、20–30万、30–50万、50–100万、100万以上，单位人民币 / 年，区间下限含、上限不含。初始不预选；取消保留旧值，确定才写入草稿。可不选择直接继续，也可点击“跳过”清空该值后进入婚姻状态。空值表示未提供，不推断为零收入，不阻断基础资料完成；编辑资料可再次选择。字段 `annual_income` 与基础资料同源保存，不新增表；本次不新增公开主页展示。旧草稿需按流程版本迁移，避免步骤错位；小程序照片重新进入规则顺延至第 14 步。

### 2026-11-12 真实匹配账号与每日回执一致性

真实登录后发现及今日浏览使用当前会话接口，不受开发原型开关切回固定示例人物。服务端男女互荐规则与客户端响应检查一致：当前账号或候选性别缺失、无效、同性时不展示批次，使用现有错误态及重试入口。无会话示例仅用于原型演示。

每日成功日期使用服务端 `refresh_date`，旧批次继续使用原 `recommendation_date` 和到期时间。空结果也完成当日刷新，同日恢复以读取恢复进度，失败不消耗刷新资格，跨账号响应不得更新状态。推荐展示／预加载不写今日浏览；喜欢或不喜欢成功时服务端原子写入浏览时间后推进，失败停留原对象。其他入口保留成功展示后记录浏览。页面布局、按钮顺序和错误态保持现行稿。

真实综合分沿用资料身份区的分数胶囊位置，文案为“匹配参考 X.X”，身份区下方以现有说明文字样式展示“信息覆盖率 Y%；分数仅供排序参考。”两值须同时有效；否则不显示分数及覆盖率行。原型示例百分比保留演示身份，不用于真实账号。无五维证据时不生成分数。


## 2026-11-12 语音文本保存与语义开关

真实录音完成后将最终转写提交服务端，保存失败保留当前文字并可按原幂等键重试，不提前切题。重答使用新回答版本并使旧派生画像失效。只有至少一条有效文本已保存且完成接口确认后才进入正式完成状态、隐藏一级Tab提示；全题号齐全不代替服务端确认，零回答结束不冒充完成。完成说明为“回答文字已保存。本页只显示这次的转写。”，不新增页面、不宣称语义分析成功。新增画像和Embedding默认关闭，后台发布开启前不调用供应商；真实推荐不存在双方有效评分时保持无百分比。
