- 需求ID: JN-001
- 功能模块: 日记记录
- 功能点: 主记录界面加载与核心布局
- 前置条件: 用户已登录App,并进入主记录Tab页。
- 功能详述:
- 顶部导航栏:
- 左侧显示“搜索”图标按钮。
- 中间显示当前日期,格式为“YYYY年M月D日”,默认为“今天”。点击后触发 [流程 JN-1.6]。
- 右侧显示“历史记录”或“日历”图标按钮,用于切换至日历视图。
- 内容区域:
- AI回复区: 位于日期下方,用于展示AI对当日记录的回复。若当日无记录,则此区域为空或显示引导性内容。
- 记录列表区: 以时间倒序展示用户当天的所有条目(Entry)。
- 底部输入栏 (Input Bar): 固定在页面底部。
- 左侧为“语音输入”图标按钮。
- 中间为多行文本输入框
[UITextView]。 - 右侧为“扩展功能”图标按钮(如“+”号)。
- 顶部导航栏:
- 需求ID: JN-002
- 功能模块: 日记记录
- 功能点: 文本输入与键盘交互
- 前置条件: 用户位于主记录界面。
- 交互逻辑与规则:
- 触发: 用户点击底部输入栏中的文本输入框。
- 系统响应:
- 立即调用系统键盘,键盘从底部平滑弹出。
- 动画效果: 整个页面视图(包括顶导、内容区、输入栏)不跳转,而是作为一个整体,平滑向上移动至键盘顶部。移动距离等于键盘高度。
- 输入框获得焦点,光标闪烁。
- 状态说明:
- 默认状态: 输入框内显示占位符文本(Placeholder Text),如“说说今天发生了什么...”。
- 输入状态: 用户开始输入后,占位符文本消失。输入框根据内容自动增高,最多增高至预设的6行高度。超过6行后,输入框高度不再变化,内容可上下滚动。
- 长文本模式: 当输入内容超过3行时,输入框右上角出现“展开”图标。点击后,进入一个沉浸式全屏编辑页面,底部输入栏和顶部导航栏暂时隐藏,仅保留必要的“完成”和“返回”操作,便于用户专注写作。
- 边界条件与异常处理:
- 单条条目最大字数限制为5000字(含标点、emoji)。当达到上限时,键盘无法继续输入,并弹出一个Toast提示:“最多可输入5000字”。
- 需求ID: JN-003
- 功能模块: 日记记录
- 功能点: 语音转文字输入
- 前置条件: 用户位于主记录界面。
- 交互逻辑与规则 (Happy Path):
- 触发: 用户点击底部输入栏左侧的“语音”图标(初始状态为麦克风样式)。
- 系统响应 (权限检查): 首次点击,系统会请求麦克风访问权限。
- UI变化:
- 权限获取成功后,页面底部输入栏区域转变为“录音中”状态。
- 原“语音”图标变为“停止”图标(如方块样式)。
- 页面出现录音动效(如声波纹、呼吸光晕)和计时器,格式为
MM:SS。
- 实时转写:
- 系统开始录音,并实时将音频流发送至语音识别服务。
- 识别服务返回的文字实时流式出现在输入框中,让用户即时看到反馈。
- 结束录音:
- 触发方式1: 用户主动点击“停止”图标。
- 触发方式2: 录音达到最大时长(如60秒)自动停止。
- 文本润色:
- 录音结束后,系统将最终识别的完整文本进行AI润色处理(自动添加标点、修正错别字、去除语气词等)。
- 润色后的最终文本替换掉输入框中的实时转写文本。
- UI恢复: 录音动效和计时器消失,输入栏恢复为初始的文本输入状态。用户可对转写后的文字进行手动编辑。
- 边界条件与异常处理:
- 权限拒绝:
- 首次拒绝: 用户在系统弹窗中选择“不允许”。系统需弹出一个Toast提示:“无法使用语音输入,请在系统设置中开启麦克风权限”。
- 已拒绝状态下再次点击: 直接弹出一个Modal确认框,内容为“需要麦克风权限才能进行语音输入”,提供两个按钮:【取消】和【去设置】。点击【去设置】则跳转至App的系统权限设置页。
- 网络异常: 在录音过程中若网络断开,应立即停止录音,并弹出Toast提示:“网络连接失败,请检查后重试”。已在本地的录音数据应被丢弃,输入框内容清空。
- 识别失败: 若语音服务返回错误或无法识别,Toast提示:“抱歉,没听清楚,请再说一次”。
- 权限拒绝:
- 需求ID: JN-004
- 功能模块: 日记记录
- 功能点: 上传图片/拍照
- 前置条件: 用户位于主记录界面。
- 交互逻辑与规则:
- 触发: 用户点击底部输入栏右侧的“+”图标。
- 系统响应: 从屏幕底部弹出一个半屏面板(Action Sheet),提供选项:【相册】、【拍照】。
- 选择【相册】:
- 调用系统相册,支持多选,单次最多选择9张。
- 选择图片后,图片缩略图会出现在输入框的上方区域,形成一个图片预览队列。
- 每张缩略图右上角有关闭按钮“x”,可单张移除。
- 缩略图上应有上传状态指示(等待上传、上传中动效、上传成功、上传失败的红色感叹号)。
- 选择【拍照】:
- 调用系统相机。拍照完成后,图片自动加入图片预览队列。
- 上传失败处理:
- 若某张图片上传失败,其缩略图上会显示红色感叹号。
- 点击该缩略图,弹窗提示“上传失败”,并提供【重试】和【删除】两个操作。
- 支持Live Photo: 上传的Live Photo在预览时应有特殊角标标识。在记录详情页查看时,支持长按播放。
- 需求ID: JN-005
- 功能模块: 日记记录
- 功能点: 提交记录并进行AI分析
- 交互逻辑与规则:
- 触发: 用户完成内容输入后(文本和/或图片),点击键盘上的“发送”或界面上独立的“发布”按钮。
- 前端行为 (假写):
- 内容(文本+图片)立即以“发送中”的状态出现在内容区域的记录列表顶部。这提供了即时反馈,避免用户等待。
- 本地输入框清空,图片预览队列清空,输入栏恢复初始状态。
- 后台异步处理:
- 客户端将数据包(文本、图片URL)发送至服务器。
- 服务器进行以下处理:
- 事件提取与概括: 概括出1-3个核心事件。
- 情绪识别: 为每个事件及整个条目判断情绪(积极/中立/消极)。
- 自动打标: 根据内容匹配0-3个标签(默认库:“学习工作”、“社交”、“健康”)。
- 数据回传与UI更新:
- 服务器处理完成后,将结构化数据(事件、情绪、标签)返回给客户端。
- 客户端更新对应条目的UI,将“发送中”状态取消,并动态渲染出AI生成的标签(以胶囊样式显示在条目下方)。
- 边界条件与异常处理:
- 发送失败: 若因网络等问题发送失败,该条“假写”的条目需变为“发送失败”状态,并提供一个明显的“重试”按钮。用户点击重试后,重新执行发送流程。
- 内容安全审核: 发送的内容需经过后台敏感词和内容安全审核。若审核不通过,该条目应对用户本人可见但标记为“内容违规,仅自己可见”,或直接删除并通知用户。
- 需求ID: JN-006
- 功能模块: 日记记录
- 功能点: 查看和修改AI生成的标签
- 前置条件: 用户的一条条目已被AI成功处理并展示了标签。
- 交互逻辑与规则:
- 触发: 用户点击某条目下方的一个标签胶囊。
- 系统响应: 弹出一个底部动作面板(Bottom Sheet)。
- 面板内容:
- 标题:“修改标签”。
- 标签列表: 以列表形式展示用户所有可用的标签(免费用户仅3个默认标签;付费用户包含自定义标签)。当前标签应有高亮或“✓”标记。
- 操作按钮: 列表底部提供“删除此标签”按钮。
- 用户操作:
- 切换标签: 用户点击列表中的另一个标签,面板收起,原标签胶囊替换为新选择的标签。
- 删除标签: 用户点击“删除此标签”,面板收起,该标签胶囊直接消失。
- 标签管理入口 (付费功能):
- 在上述底部动作面板的右上角,为付费用户提供一个“管理”入口。
- 点击“管理”,跳转至【标签管理页】。该页面支持新增、编辑、删除自定义标签。总数上限为10个。此处的增删改结果会同步影响所有标签选择列表。
用户故事: 作为一名用户,我希望能定期收到关于我情绪和行为的总结报告,帮我了解自己最近的状态,就像有一个专属的心理分析师,并能管理我想看到的洞察类型。
- 需求ID: AI-001
- 功能模块: AI洞察
- 功能点: 主界面加载与卡片布局
- 前置条件: 用户进入“洞察”Tab页。
- 功能详述:
- 加载状态: 首次进入或下拉刷新时,页面应显示骨架屏(Skeleton Screen),模拟卡片的基本轮廓,提升加载体验。
- 布局:
- 采用竖向全屏卡片轮播的交互形式。屏幕一次只展示一张卡片,用户通过上下滑动来切换不同的洞察主题。
- 屏幕右侧边缘应有小圆点指示器,高亮显示当前卡片的位置,并告知用户总卡片数。
- 页面右上角固定显示“设置”图标,点击后跳转至 [5.2. 洞察管理页]。
- 空状态:
- 场景: 当所有洞察卡片(包括系统默认和用户自定义的)都因数据不足而无法生成时,或被用户全部删除时。
- UI呈现: 页面中央显示空状态插画,并附文案:“暂无洞察报告。持续记录一周,AI将为你生成第一份专属洞察。”,并提供一个【开始记录】的按钮,点击后跳转至主记录界面。
- 需求ID: AI-002
- 功能模块: AI洞察
- 功能点: 系统默认卡片的生成逻辑与展示
- 数据逻辑与规则:
- 卡片一:每日寄语 (Daily Affirmation)
- 更新时机: 每日首次打开App时在后台生成,或进入洞察页时触发检查。
- 数据源: 用户前一天(00:00-23:59)的所有记录。
- 生成逻辑:
- 有记录: AI分析前一日的主要情绪。若偏积极,则生成鼓励和肯定的寄语;若偏消极,则生成共情和安慰的寄语;若中立,则生成引导性或启发性的寄语。
- 无记录: 从预设的通用鼓励语库中随机抽取一条进行展示。
- UI展示: 卡片上仅显示该段寄语。
- 卡片二:每周情绪地图 (Weekly Emotion Map)
- 更新时机: 每周一凌晨 5:00 AM 后,用户首次进入洞察页时触发生成。
- 数据源: 过去一个自然周(周一至周日)的所有记录。
- 生成逻辑:
- 统计周期内所有事件的积极、中立、消极情绪数量。
- 生成可视化图表(如环形图或情绪曲线图)展示情绪分布。
- AI生成一段不超过150字的摘要,解读情绪波动趋势,并点出情绪最高的和最低的一天。
- 数据不足: 若周期内有效事件少于3个,则该卡片不生成,提示“本周记录较少,无法生成情绪地图”。
- 卡片三:每周感恩清单 (Weekly Gratitude List)
- 更新时机 & 数据源: 同“每周情绪地图”。
- 生成逻辑:
- 从周期内所有被标记为“积极情绪”的事件中,挑选出3-5个最具代表性的事件。
- 以清单(List)的形式进行摘要展示。
- 数据不足: 若周期内积极事件少于1个,则该卡片不生成。
- 卡片一:每日寄语 (Daily Affirmation)
- 需求ID: AI-003
- 功能模块: AI洞察
- 功能点: 查看卡片详情与分享
- 交互逻辑与规则:
- 触发: 用户在任意一张洞察卡片上点击“查看全文”按钮或卡片主体区域。
- 系统响应:
- 动画效果: 卡片在当前页面以平滑动画向下展开,推出完整内容。背景可做模糊或变暗处理,突出内容主体。
- 样式: 展开后的内容采用“信件”或“报告”的精致样式,增强仪式感。
- 分享/保存功能:
- 在展开后的视图底部,提供【分享/保存为图片】按钮。
- 点击后,客户端将当前展开的完整内容(包括图表和文字)渲染成一张设计好的长图。
- 弹出系统分享面板,用户可选择将图片保存至本地相册或分享至其他社交平台。
- 权限处理: 首次保存需请求相册写入权限。若被拒绝,应有相应提示。
- 需求ID: AI-004
- 功能模块: AI洞察
- 功能点: 洞察主题管理
- 前置条件: 用户在洞察主界面点击“设置”图标。
- 功能详述:
- 布局:
- 页面以列表形式展示所有洞察主题。
- 列表项支持拖拽排序(仅限付费用户对自定义主题操作)。
- 付费用户: 页面右上角显示【新增洞察】按钮。
- 免费用户: 无【新增洞察】按钮。
- 列表项:
- 每个列表项显示洞察主题的名称和更新频率(如“每周情绪地图 - 每周更新”)。
- 系统默认洞察有特殊标识,且不可编辑名称。
- 用户自定义洞察可进行编辑和删除操作。
- 布局:
- 需求ID: AI-005
- 功能模块: AI洞察
- 功能点: 新增、编辑、删除、排序洞察
- 交互逻辑与规则:
- 删除/隐藏 (所有用户):
- 在系统默认洞察项上左滑,出现“删除”按钮。
- 点击“删除”,弹窗确认:“确认后,该洞察将不再为你生成。你可以在设置中恢复。”
- 确认后,该洞察主题在主界面消失。管理页中可提供“已隐藏的洞察”列表用于恢复。
- 新增洞察 (付费用户):
- 点击【新增洞察】按钮,进入【洞察配置页】。
- 配置项:
- 时间范围(必选): 提供单选项
每日 / 每周 / 每月。 - 洞察提示词(必填): 一个文本输入框,引导用户输入想分析的问题,如“帮我分析本周的工作压力来源和积极时刻”。
- 时间范围(必选): 提供单选项
- 点击“保存”,创建成功后返回管理列表,新主题出现在列表顶部。
- 编辑/删除/排序 (付费用户):
- 编辑: 点击自定义洞察项,进入【洞察配置页】进行修改。
- 删除: 左滑出现“删除”按钮,点击后弹窗二次确认。
- 排序: 长按自定义洞察项,列表进入排序模式,用户可拖拽调整其在主界面的展示顺序。系统默认洞察的顺序固定。
- 删除/隐藏 (所有用户):
用户故事: 我想知道我在“工作”、“社交”等不同方面的具体情绪表现,看看哪个领域带给我更多积极或消极的情绪,并了解我的关注点分布。
- 需求ID: TT-001
- 功能模块: 标签追踪
- 功能点: 看板加载与空状态处理
- 前置条件: 用户进入“追踪”Tab页。
- 功能详述:
- 加载状态: 进入页面时,各图表区域应显示加载中动效。
- 初始空状态 (新用户):
- 场景: 用户总记录条目数少于 N 条(例如 N=5),或使用时长少于 M 天(例如 M=3),不足以生成有意义的图表。
- UI呈现: 页面不显示复杂图表,而是展示一个引导性的卡片或页面,文案:“这里是你的个人情绪看板。持续记录,AI将为你可视化你的情绪变化和生活焦点。” 并附有【去记录】的CTA按钮。
- 布局:
- 顶部: 提供【周视图】/【月视图】的分段控件 (Segmented Control),默认选中【周视图】。
- 中部: 提供横向滚动的Tab栏,用于切换不同标签的数据视图。
- 底部: 根据所选Tab展示对应的可视化图表。
- 需求ID: TT-002
- 功能模块: 标签追踪
- 功能点: 时间与标签维度的切换
- 交互逻辑与规则:
- 时间视图切换:
- 点击【周视图】/【月视图】,页面所有图表的数据周期随之切换,并伴有平滑的刷新动画。
- 标签Tab栏:
- Tab构成: 第一个Tab固定为【全部】。后续Tab为用户的所有标签(免费用户3个,付费用户最多13个)。
- 权限限制: 免费用户仅可点击【全部】和另外1个指定标签(如“健康”)进行查看,其他标签Tab置灰,并有“皇冠”角标,点击后提示“升级会员可追踪更多标签”。付费用户可查看所有标签。
- 切换Tab: 点击不同标签Tab,下方图表内容动态更新,展示该标签下的专属数据。
- 时间视图切换:
- 需求ID: TT-003
- 功能模块: 标签追踪
- 功能点: 宏观数据概览
- 图表一:记录热力图 (Activity Heatmap)
- 数据逻辑: 统计所选周期内(周/月)每一天的记录条目数或总字数。
- UI呈现: 类似GitHub贡献图的日历格子。格子颜色深度与记录量正相关,颜色梯度应清晰定义(如0条=灰色,1-2条=浅绿,...,10+条=深绿)。
- 交互: 点击任一有记录的格子,弹出一个小浮层(Popover),显示具体日期和当天的记录条数/字数。
- 图表二:标签气泡图 (Tag Bubble Chart)
- 数据逻辑: 统计周期内,每个标签关联的事件总数。
- UI呈现: 不同大小和颜色的圆形气泡聚集在一起。气泡面积与事件数成正比。气泡上显示标签名。
- 交互: 点击某个气泡,可高亮该气泡,并在图表下方显示该标签的具体事件数和情绪占比简报。
- 需求ID: TT-004
- 功能模块: 标签追踪
- 功能点: 细分标签数据洞察
- 图表一:情绪占比横条图 (Emotion Distribution Bar)
- 数据逻辑: 统计周期内,当前标签下所有事件的积极、中立、消极情绪数量,并计算百分比。
- UI呈现: 一根分段式的横向柱状图,不同颜色代表不同情绪。条形长度代表各项占比。
- 交互 (下钻): 点击横条图的任一情绪区段(如“积极”),页面跳转或以下钻形式,进入一个列表页,该列表展示了此标签下所有“积极”情绪的事件记录原文。
- 图表二:情绪变化曲线图 (Emotion Trend Curve)
- 数据逻辑:
- 以天为单位,计算每日的“情绪得分”。
- 得分公式:
当日该标签下的积极事件数 / 当日该标签下的总事件数。结果为0到1之间的小数。 - 特殊处理: 若当日该标签下无任何事件,得分为0。若当日有纯情绪记录,积极计为1,消极计为0。
- UI呈现: 一条平滑的曲线图,X轴为日期,Y轴为情绪得分(0-1)。曲线下方可有渐变色填充。
- 交互: 长按曲线上某一点,可显示该点的具体日期和情绪得分。
- 数据逻辑:
用户故事: 我希望应用能主动帮我回顾那些快乐的瞬间,尤其是在我情绪低落时,能有一个地方快速找到慰藉和力量。
- 需求ID: HL-001
- 功能模块: 闪光时刻
- 功能点: 积极事件的聚合与展示
- 前置条件: 用户进入“闪光”Tab页或首页的“闪光时刻”模块。
- 数据逻辑与规则:
- 数据源: 筛选用户所有记录中,被AI判定为“积极情绪”的条目 (Entry)。
- 排序: 默认按时间倒序排列。
- UI呈现:
- 采用瀑布流或卡片列表的形式。
- 每个卡片代表一个“闪光时刻”。
- 卡片内展示该条记录的文本摘要(如前50个字)和所有图片(若有)。
- 需求ID: HL-002
- 功能模块: 闪光时刻
- 功能点: 查看闪光时刻详情
- 交互逻辑与规则:
- 点击文本区域:
- 触发卡片的原地展开动画,显示该条记录的全部文字内容。
- 展开后,卡片底部出现【分享】按钮。点击后可将这段文字以图片或文本形式分享出去。
- 点击图片区域:
- 若只有一张图,直接进入大图预览模式。
- 若有多张图,进入一个沉浸式的图片浏览器,支持左右滑动切换图片,双指缩放查看,并可将单张图片保存至本地相册
- 点击文本区域: