Skip to content

Latest commit

 

History

History
322 lines (298 loc) · 22.2 KB

File metadata and controls

322 lines (298 loc) · 22.2 KB

4. 模块一:日记/随笔记录模块

4.1. 主记录界面 (Journal Entry Screen)

4.1.1. 界面初始化与布局

  • 需求ID: JN-001
  • 功能模块: 日记记录
  • 功能点: 主记录界面加载与核心布局
  • 前置条件: 用户已登录App,并进入主记录Tab页。
  • 功能详述:
    • 顶部导航栏:
      1. 左侧显示“搜索”图标按钮。
      2. 中间显示当前日期,格式为“YYYY年M月D日”,默认为“今天”。点击后触发 [流程 JN-1.6]
      3. 右侧显示“历史记录”或“日历”图标按钮,用于切换至日历视图。
    • 内容区域:
      1. AI回复区: 位于日期下方,用于展示AI对当日记录的回复。若当日无记录,则此区域为空或显示引导性内容。
      2. 记录列表区: 以时间倒序展示用户当天的所有条目(Entry)。
    • 底部输入栏 (Input Bar): 固定在页面底部。
      1. 左侧为“语音输入”图标按钮。
      2. 中间为多行文本输入框 [UITextView]
      3. 右侧为“扩展功能”图标按钮(如“+”号)。

4.1.2. 文本输入功能

  • 需求ID: JN-002
  • 功能模块: 日记记录
  • 功能点: 文本输入与键盘交互
  • 前置条件: 用户位于主记录界面。
  • 交互逻辑与规则:
    1. 触发: 用户点击底部输入栏中的文本输入框。
    2. 系统响应:
      • 立即调用系统键盘,键盘从底部平滑弹出。
      • 动画效果: 整个页面视图(包括顶导、内容区、输入栏)不跳转,而是作为一个整体,平滑向上移动至键盘顶部。移动距离等于键盘高度。
      • 输入框获得焦点,光标闪烁。
    3. 状态说明:
      • 默认状态: 输入框内显示占位符文本(Placeholder Text),如“说说今天发生了什么...”。
      • 输入状态: 用户开始输入后,占位符文本消失。输入框根据内容自动增高,最多增高至预设的6行高度。超过6行后,输入框高度不再变化,内容可上下滚动。
      • 长文本模式: 当输入内容超过3行时,输入框右上角出现“展开”图标。点击后,进入一个沉浸式全屏编辑页面,底部输入栏和顶部导航栏暂时隐藏,仅保留必要的“完成”和“返回”操作,便于用户专注写作。
    4. 边界条件与异常处理:
      • 单条条目最大字数限制为5000字(含标点、emoji)。当达到上限时,键盘无法继续输入,并弹出一个Toast提示:“最多可输入5000字”。

4.1.3. 语音输入功能

  • 需求ID: JN-003
  • 功能模块: 日记记录
  • 功能点: 语音转文字输入
  • 前置条件: 用户位于主记录界面。
  • 交互逻辑与规则 (Happy Path):
    1. 触发: 用户点击底部输入栏左侧的“语音”图标(初始状态为麦克风样式)。
    2. 系统响应 (权限检查): 首次点击,系统会请求麦克风访问权限。
    3. UI变化:
      • 权限获取成功后,页面底部输入栏区域转变为“录音中”状态。
      • 原“语音”图标变为“停止”图标(如方块样式)。
      • 页面出现录音动效(如声波纹、呼吸光晕)和计时器,格式为 MM:SS
    4. 实时转写:
      • 系统开始录音,并实时将音频流发送至语音识别服务。
      • 识别服务返回的文字实时流式出现在输入框中,让用户即时看到反馈。
    5. 结束录音:
      • 触发方式1: 用户主动点击“停止”图标。
      • 触发方式2: 录音达到最大时长(如60秒)自动停止。
    6. 文本润色:
      • 录音结束后,系统将最终识别的完整文本进行AI润色处理(自动添加标点、修正错别字、去除语气词等)。
      • 润色后的最终文本替换掉输入框中的实时转写文本。
    7. UI恢复: 录音动效和计时器消失,输入栏恢复为初始的文本输入状态。用户可对转写后的文字进行手动编辑。
  • 边界条件与异常处理:
    1. 权限拒绝:
      • 首次拒绝: 用户在系统弹窗中选择“不允许”。系统需弹出一个Toast提示:“无法使用语音输入,请在系统设置中开启麦克风权限”。
      • 已拒绝状态下再次点击: 直接弹出一个Modal确认框,内容为“需要麦克风权限才能进行语音输入”,提供两个按钮:【取消】和【去设置】。点击【去设置】则跳转至App的系统权限设置页。
    2. 网络异常: 在录音过程中若网络断开,应立即停止录音,并弹出Toast提示:“网络连接失败,请检查后重试”。已在本地的录音数据应被丢弃,输入框内容清空。
    3. 识别失败: 若语音服务返回错误或无法识别,Toast提示:“抱歉,没听清楚,请再说一次”。

4.1.4. 扩展功能与图片上传

  • 需求ID: JN-004
  • 功能模块: 日记记录
  • 功能点: 上传图片/拍照
  • 前置条件: 用户位于主记录界面。
  • 交互逻辑与规则:
    1. 触发: 用户点击底部输入栏右侧的“+”图标。
    2. 系统响应: 从屏幕底部弹出一个半屏面板(Action Sheet),提供选项:【相册】、【拍照】。
    3. 选择【相册】:
      • 调用系统相册,支持多选,单次最多选择9张。
      • 选择图片后,图片缩略图会出现在输入框的上方区域,形成一个图片预览队列。
      • 每张缩略图右上角有关闭按钮“x”,可单张移除。
      • 缩略图上应有上传状态指示(等待上传、上传中动效、上传成功、上传失败的红色感叹号)。
    4. 选择【拍照】:
      • 调用系统相机。拍照完成后,图片自动加入图片预览队列。
    5. 上传失败处理:
      • 若某张图片上传失败,其缩略图上会显示红色感叹号。
      • 点击该缩略图,弹窗提示“上传失败”,并提供【重试】和【删除】两个操作。
    6. 支持Live Photo: 上传的Live Photo在预览时应有特殊角标标识。在记录详情页查看时,支持长按播放。

4.1.5. 条目(Entry)的发送与展示

  • 需求ID: JN-005
  • 功能模块: 日记记录
  • 功能点: 提交记录并进行AI分析
  • 交互逻辑与规则:
    1. 触发: 用户完成内容输入后(文本和/或图片),点击键盘上的“发送”或界面上独立的“发布”按钮。
    2. 前端行为 (假写):
      • 内容(文本+图片)立即以“发送中”的状态出现在内容区域的记录列表顶部。这提供了即时反馈,避免用户等待。
      • 本地输入框清空,图片预览队列清空,输入栏恢复初始状态。
    3. 后台异步处理:
      • 客户端将数据包(文本、图片URL)发送至服务器。
      • 服务器进行以下处理:
        • 事件提取与概括: 概括出1-3个核心事件。
        • 情绪识别: 为每个事件及整个条目判断情绪(积极/中立/消极)。
        • 自动打标: 根据内容匹配0-3个标签(默认库:“学习工作”、“社交”、“健康”)。
    4. 数据回传与UI更新:
      • 服务器处理完成后,将结构化数据(事件、情绪、标签)返回给客户端。
      • 客户端更新对应条目的UI,将“发送中”状态取消,并动态渲染出AI生成的标签(以胶囊样式显示在条目下方)。
  • 边界条件与异常处理:
    • 发送失败: 若因网络等问题发送失败,该条“假写”的条目需变为“发送失败”状态,并提供一个明显的“重试”按钮。用户点击重试后,重新执行发送流程。
    • 内容安全审核: 发送的内容需经过后台敏感词和内容安全审核。若审核不通过,该条目应对用户本人可见但标记为“内容违规,仅自己可见”,或直接删除并通知用户。

4.1.6. 标签交互与编辑

  • 需求ID: JN-006
  • 功能模块: 日记记录
  • 功能点: 查看和修改AI生成的标签
  • 前置条件: 用户的一条条目已被AI成功处理并展示了标签。
  • 交互逻辑与规则:
    1. 触发: 用户点击某条目下方的一个标签胶囊。
    2. 系统响应: 弹出一个底部动作面板(Bottom Sheet)。
    3. 面板内容:
      • 标题:“修改标签”。
      • 标签列表: 以列表形式展示用户所有可用的标签(免费用户仅3个默认标签;付费用户包含自定义标签)。当前标签应有高亮或“✓”标记。
      • 操作按钮: 列表底部提供“删除此标签”按钮。
    4. 用户操作:
      • 切换标签: 用户点击列表中的另一个标签,面板收起,原标签胶囊替换为新选择的标签。
      • 删除标签: 用户点击“删除此标签”,面板收起,该标签胶囊直接消失。
  • 标签管理入口 (付费功能):
    1. 在上述底部动作面板的右上角,为付费用户提供一个“管理”入口。
    2. 点击“管理”,跳转至【标签管理页】。该页面支持新增、编辑、删除自定义标签。总数上限为10个。此处的增删改结果会同步影响所有标签选择列表。

5. 模块二:AI洞察卡片模块 (AI Insight Cards)

用户故事: 作为一名用户,我希望能定期收到关于我情绪和行为的总结报告,帮我了解自己最近的状态,就像有一个专属的心理分析师,并能管理我想看到的洞察类型。

5.1. 洞察卡片主界面

5.1.1. 页面初始化与布局

  • 需求ID: AI-001
  • 功能模块: AI洞察
  • 功能点: 主界面加载与卡片布局
  • 前置条件: 用户进入“洞察”Tab页。
  • 功能详述:
    1. 加载状态: 首次进入或下拉刷新时,页面应显示骨架屏(Skeleton Screen),模拟卡片的基本轮廓,提升加载体验。
    2. 布局:
      • 采用竖向全屏卡片轮播的交互形式。屏幕一次只展示一张卡片,用户通过上下滑动来切换不同的洞察主题。
      • 屏幕右侧边缘应有小圆点指示器,高亮显示当前卡片的位置,并告知用户总卡片数。
      • 页面右上角固定显示“设置”图标,点击后跳转至 [5.2. 洞察管理页]
    3. 空状态:
      • 场景: 当所有洞察卡片(包括系统默认和用户自定义的)都因数据不足而无法生成时,或被用户全部删除时。
      • UI呈现: 页面中央显示空状态插画,并附文案:“暂无洞察报告。持续记录一周,AI将为你生成第一份专属洞察。”,并提供一个【开始记录】的按钮,点击后跳转至主记录界面。

5.1.2. 系统默认洞察卡片

  • 需求ID: AI-002
  • 功能模块: AI洞察
  • 功能点: 系统默认卡片的生成逻辑与展示
  • 数据逻辑与规则:
    1. 卡片一:每日寄语 (Daily Affirmation)
      • 更新时机: 每日首次打开App时在后台生成,或进入洞察页时触发检查。
      • 数据源: 用户前一天(00:00-23:59)的所有记录。
      • 生成逻辑:
        • 有记录: AI分析前一日的主要情绪。若偏积极,则生成鼓励和肯定的寄语;若偏消极,则生成共情和安慰的寄语;若中立,则生成引导性或启发性的寄语。
        • 无记录: 从预设的通用鼓励语库中随机抽取一条进行展示。
      • UI展示: 卡片上仅显示该段寄语。
    2. 卡片二:每周情绪地图 (Weekly Emotion Map)
      • 更新时机: 每周一凌晨 5:00 AM 后,用户首次进入洞察页时触发生成。
      • 数据源: 过去一个自然周(周一至周日)的所有记录。
      • 生成逻辑:
        • 统计周期内所有事件的积极、中立、消极情绪数量。
        • 生成可视化图表(如环形图或情绪曲线图)展示情绪分布。
        • AI生成一段不超过150字的摘要,解读情绪波动趋势,并点出情绪最高的和最低的一天。
      • 数据不足: 若周期内有效事件少于3个,则该卡片不生成,提示“本周记录较少,无法生成情绪地图”。
    3. 卡片三:每周感恩清单 (Weekly Gratitude List)
      • 更新时机 & 数据源: 同“每周情绪地图”。
      • 生成逻辑:
        • 从周期内所有被标记为“积极情绪”的事件中,挑选出3-5个最具代表性的事件。
        • 以清单(List)的形式进行摘要展示。
      • 数据不足: 若周期内积极事件少于1个,则该卡片不生成。

5.1.3. 卡片交互:展开与分享

  • 需求ID: AI-003
  • 功能模块: AI洞察
  • 功能点: 查看卡片详情与分享
  • 交互逻辑与规则:
    1. 触发: 用户在任意一张洞察卡片上点击“查看全文”按钮或卡片主体区域。
    2. 系统响应:
      • 动画效果: 卡片在当前页面以平滑动画向下展开,推出完整内容。背景可做模糊或变暗处理,突出内容主体。
      • 样式: 展开后的内容采用“信件”或“报告”的精致样式,增强仪式感。
    3. 分享/保存功能:
      • 在展开后的视图底部,提供【分享/保存为图片】按钮。
      • 点击后,客户端将当前展开的完整内容(包括图表和文字)渲染成一张设计好的长图。
      • 弹出系统分享面板,用户可选择将图片保存至本地相册或分享至其他社交平台。
      • 权限处理: 首次保存需请求相册写入权限。若被拒绝,应有相应提示。

5.2. 洞察管理页

5.2.1. 页面布局与权限差异

  • 需求ID: AI-004
  • 功能模块: AI洞察
  • 功能点: 洞察主题管理
  • 前置条件: 用户在洞察主界面点击“设置”图标。
  • 功能详述:
    1. 布局:
      • 页面以列表形式展示所有洞察主题。
      • 列表项支持拖拽排序(仅限付费用户对自定义主题操作)。
      • 付费用户: 页面右上角显示【新增洞察】按钮。
      • 免费用户: 无【新增洞察】按钮。
    2. 列表项:
      • 每个列表项显示洞察主题的名称和更新频率(如“每周情绪地图 - 每周更新”)。
      • 系统默认洞察有特殊标识,且不可编辑名称。
      • 用户自定义洞察可进行编辑和删除操作。

5.2.2. 管理操作

  • 需求ID: AI-005
  • 功能模块: AI洞察
  • 功能点: 新增、编辑、删除、排序洞察
  • 交互逻辑与规则:
    1. 删除/隐藏 (所有用户):
      • 在系统默认洞察项上左滑,出现“删除”按钮。
      • 点击“删除”,弹窗确认:“确认后,该洞察将不再为你生成。你可以在设置中恢复。”
      • 确认后,该洞察主题在主界面消失。管理页中可提供“已隐藏的洞察”列表用于恢复。
    2. 新增洞察 (付费用户):
      • 点击【新增洞察】按钮,进入【洞察配置页】。
      • 配置项:
        • 时间范围(必选): 提供单选项 每日 / 每周 / 每月
        • 洞察提示词(必填): 一个文本输入框,引导用户输入想分析的问题,如“帮我分析本周的工作压力来源和积极时刻”。
      • 点击“保存”,创建成功后返回管理列表,新主题出现在列表顶部。
    3. 编辑/删除/排序 (付费用户):
      • 编辑: 点击自定义洞察项,进入【洞察配置页】进行修改。
      • 删除: 左滑出现“删除”按钮,点击后弹窗二次确认。
      • 排序: 长按自定义洞察项,列表进入排序模式,用户可拖拽调整其在主界面的展示顺序。系统默认洞察的顺序固定。

6. 模块三:标签追踪模块 (Tag Tracking)

用户故事: 我想知道我在“工作”、“社交”等不同方面的具体情绪表现,看看哪个领域带给我更多积极或消极的情绪,并了解我的关注点分布。

6.1. 追踪看板主界面

6.1.1. 页面初始化与状态处理

  • 需求ID: TT-001
  • 功能模块: 标签追踪
  • 功能点: 看板加载与空状态处理
  • 前置条件: 用户进入“追踪”Tab页。
  • 功能详述:
    1. 加载状态: 进入页面时,各图表区域应显示加载中动效。
    2. 初始空状态 (新用户):
      • 场景: 用户总记录条目数少于 N 条(例如 N=5),或使用时长少于 M 天(例如 M=3),不足以生成有意义的图表。
      • UI呈现: 页面不显示复杂图表,而是展示一个引导性的卡片或页面,文案:“这里是你的个人情绪看板。持续记录,AI将为你可视化你的情绪变化和生活焦点。” 并附有【去记录】的CTA按钮。
    3. 布局:
      • 顶部: 提供【周视图】/【月视图】的分段控件 (Segmented Control),默认选中【周视图】。
      • 中部: 提供横向滚动的Tab栏,用于切换不同标签的数据视图。
      • 底部: 根据所选Tab展示对应的可视化图表。

6.1.2. Tab栏与视图切换

  • 需求ID: TT-002
  • 功能模块: 标签追踪
  • 功能点: 时间与标签维度的切换
  • 交互逻辑与规则:
    1. 时间视图切换:
      • 点击【周视图】/【月视图】,页面所有图表的数据周期随之切换,并伴有平滑的刷新动画。
    2. 标签Tab栏:
      • Tab构成: 第一个Tab固定为【全部】。后续Tab为用户的所有标签(免费用户3个,付费用户最多13个)。
      • 权限限制: 免费用户仅可点击【全部】和另外1个指定标签(如“健康”)进行查看,其他标签Tab置灰,并有“皇冠”角标,点击后提示“升级会员可追踪更多标签”。付费用户可查看所有标签。
      • 切换Tab: 点击不同标签Tab,下方图表内容动态更新,展示该标签下的专属数据。

6.2. 可视化图表与交互

6.2.1. 【全部】Tab下的图表

  • 需求ID: TT-003
  • 功能模块: 标签追踪
  • 功能点: 宏观数据概览
  • 图表一:记录热力图 (Activity Heatmap)
    • 数据逻辑: 统计所选周期内(周/月)每一天的记录条目数或总字数。
    • UI呈现: 类似GitHub贡献图的日历格子。格子颜色深度与记录量正相关,颜色梯度应清晰定义(如0条=灰色,1-2条=浅绿,...,10+条=深绿)。
    • 交互: 点击任一有记录的格子,弹出一个小浮层(Popover),显示具体日期和当天的记录条数/字数。
  • 图表二:标签气泡图 (Tag Bubble Chart)
    • 数据逻辑: 统计周期内,每个标签关联的事件总数。
    • UI呈现: 不同大小和颜色的圆形气泡聚集在一起。气泡面积与事件数成正比。气泡上显示标签名。
    • 交互: 点击某个气泡,可高亮该气泡,并在图表下方显示该标签的具体事件数和情绪占比简报。

6.2.2. 各标签Tab下的图表

  • 需求ID: TT-004
  • 功能模块: 标签追踪
  • 功能点: 细分标签数据洞察
  • 图表一:情绪占比横条图 (Emotion Distribution Bar)
    • 数据逻辑: 统计周期内,当前标签下所有事件的积极、中立、消极情绪数量,并计算百分比。
    • UI呈现: 一根分段式的横向柱状图,不同颜色代表不同情绪。条形长度代表各项占比。
    • 交互 (下钻): 点击横条图的任一情绪区段(如“积极”),页面跳转或以下钻形式,进入一个列表页,该列表展示了此标签下所有“积极”情绪的事件记录原文。
  • 图表二:情绪变化曲线图 (Emotion Trend Curve)
    • 数据逻辑:
      • 以天为单位,计算每日的“情绪得分”。
      • 得分公式: 当日该标签下的积极事件数 / 当日该标签下的总事件数。结果为0到1之间的小数。
      • 特殊处理: 若当日该标签下无任何事件,得分为0。若当日有纯情绪记录,积极计为1,消极计为0。
    • UI呈现: 一条平滑的曲线图,X轴为日期,Y轴为情绪得分(0-1)。曲线下方可有渐变色填充。
    • 交互: 长按曲线上某一点,可显示该点的具体日期和情绪得分。

7. 模块四:闪光时刻模块 (Flash Moments)

用户故事: 我希望应用能主动帮我回顾那些快乐的瞬间,尤其是在我情绪低落时,能有一个地方快速找到慰藉和力量。

7.1. 闪光时刻内容流

7.1.1. 内容聚合与展示

  • 需求ID: HL-001
  • 功能模块: 闪光时刻
  • 功能点: 积极事件的聚合与展示
  • 前置条件: 用户进入“闪光”Tab页或首页的“闪光时刻”模块。
  • 数据逻辑与规则:
    1. 数据源: 筛选用户所有记录中,被AI判定为“积极情绪”的条目 (Entry)。
    2. 排序: 默认按时间倒序排列。
    3. UI呈现:
      • 采用瀑布流或卡片列表的形式。
      • 每个卡片代表一个“闪光时刻”。
      • 卡片内展示该条记录的文本摘要(如前50个字)和所有图片(若有)。

7.1.2. 卡片交互

  • 需求ID: HL-002
  • 功能模块: 闪光时刻
  • 功能点: 查看闪光时刻详情
  • 交互逻辑与规则:
    1. 点击文本区域:
      • 触发卡片的原地展开动画,显示该条记录的全部文字内容。
      • 展开后,卡片底部出现【分享】按钮。点击后可将这段文字以图片或文本形式分享出去。
    2. 点击图片区域:
      • 若只有一张图,直接进入大图预览模式。
      • 若有多张图,进入一个沉浸式的图片浏览器,支持左右滑动切换图片,双指缩放查看,并可将单张图片保存至本地相册