Goal模块
Goal 模块
[!info] related notes
Goal 模块的设计思路
Overview
核心职责:OKR 体系管理、战略层面的进度追踪、长期复盘。
- okr 式的目标管理,有关键结果,结束时间(支持无期限),可行性分析等
- 能够使用文件夹来层级管理目标,应该有系统文件夹(全部、已归档、已删除)
- 目标应该支持能够扩展的元数据,还有基础的 tags、createAt、updateAt、importanceLevel(contracts的shared已经有了) 等
- 应该有完整的生命周期管理(进行中、归档、已删除)
- 提醒设置,用户应该可以设定任务还剩多少天时进行提醒
服务
基础服务
- 目标创建: 有目标的基础信息(名字、起止日期、重要性、可行性分析、所属文件夹等)、关键结果等
- 目标节点(文件夹)创建获取: 文件夹的名字、图标、颜色;获取所有文件夹。
- 目标获取:根据文件夹和生命周期筛选获取 (是直接进入页面就初始化获取所有目标,客户端筛选 还是 每次筛选都只从服务端 获取筛选结果? 筛选结果是不是可以缓存)
- 关键结果添加:除了一开始创建 goal 时初始化的 key-result,后续也可以给 goal 添加 key-result。关键结果应该支持多种计算方式
- 关键结果进度管理统计(goal-record的创建): 每次 key-result 完成时,用户可以添加一条相应的记录(对应的目标、关键结果、一次记录值),记录应该不允许删除,可以添加负值。
- 复盘记录的增查
复杂业务服务
- goal 模块和 task 模块的 联动: 正常的 goal(okr)中每一个 key-result 就是一个todo,每次完成就在goal里面 添加记录。 联动就是 可以创建一个 task-template,然后让 其 绑定一个 key-result(包含记录值、备注),每次完成对应的 task-instance,就发出事件通知, goal 模块监听到后自动添加 record 记录。 实现 把 所有的 goal 都 转化成 task,用户只需要关注 goal 的主要目标、时间数据,以及 task 具体任务展示的 todo。
- 专注周期:当有多个任务,但是当前必须(只需要)关注某几个任务(冲刺阶段)时,使用该功能(选择专注目标,根据所选目标自动计算专注时间-专注目标到期或者完成),就能暂时隐藏其他任务,只显示专注任务,减少干扰,此时 task 模块中的绑定了隐藏任务的 todo 也应该暂时隐藏。
- 目标复盘: 用户可以在任务过程中随时复盘 以及 目标完成或到期后进行 最终复盘。此时需要提供可视化图标、多种数据(目标完成状况、时间进度、完成度等)供用户复盘,还有复盘表格、复盘评分。
- 目标提醒: 用户可以设置目标在剩余 多少时间时 进行提醒。应该需要和 schedule 和 reminder 模块联动。
- 每日总结功能: 提供 goal 模块相关的当日统计信息
- goal 模块、task 模块、reminder 模块的提醒功能需要依赖 schedule 模块,记得统一一下时间配置,应该是使用 cron 表达式
- 其他的
领域实体对象
聚合根对象:
- goal
- goal-folder
- focus-session
实体对象:
- key-result
- goal-record
- gemini 建议设计为独立聚合根
- 理由: 记录是“追加型”数据,数量可能很大。如果放在
Goal内部,每次添加记录都要加载整个Goal对象,性能较差。让GoalRecord指向GoalId,通过领域事件更新Goal的统计数据更合适。 - 决定:应该还是放在实体,单个 goal 的记录应该在 几百个,应该不算多
值对象:
- goal-period
- goal-importance(重要性维度)
- feasibility-analysis(可行性分析 VO)
- review-content(复盘数据,包含评分、总结文本)
主进程
渲染进程
UI、数据转换、前端业务逻辑
应该有页面(views)和组件(components)
目标管理页面、目标详情页、关键结果详情页、记录创建表单
目标创建表单、目标卡片、关键结果创建表单、
goalDirs 中应该默认有 全部、已删除、已归档 三个文件夹,并且 全部 文件夹一直显示并显示在文件夹列表最上方 已删除 和 已归档 文件夹在有数据时显示并显示在最下方
presentation
review
布局
上方 header 显示标题和按钮,并固定在顶部。
中间 sections 显示图表和自我诊断表单。
想到两种布局方案:
让它(#goal-review 容器)最小占据 100 %,但当内容超出时,随内容增加大小。
或者说(#goal-review 容器 就占据 100%),让内容区域被可滚动标签包裹,在固定大小内滚动,始终有背景
问题:
- 这个 goal-review 为什么只占据了 100% 页面高度,内容已经超过了它,导致下滑后的区域没有背景了
因为height: 100%是继承父元素的高度,如果父元素(比如<body>或<html>或上级 div)没有设置明确的高度(height: 100% 或 height: xxx px/vh),那么它的高度是由内容撑开的(auto),但不会超出父元素的高度。
此时这个配置无效。
图表区
- 使用 echarts 库绘制图表来展示用户的目标完成信息
我是不是可以使用 echarts 的图表来更多得展示 目标完成情况信息给用户,让用户更好地复盘
将时间分为:
- 6:00 - 12:00 早晨
- 12:00 - 18:00 下午
- 18:00 - 24:00 晚上
- 24:00 - 6:00 凌晨
根据目标中的 record 数据中的时间来判断目标完成的时间段,并将其分类,统计出来,并绘制图表,帮助用户了解自己的高效率时间段
- 表现用户目标完成进度和时间进度的图表
首先是目标完成进度的图表,背景颜色则由时间进度(百分比)来填充,当时间进度超过目标完成进度的值到 danger_threshold 时,则将背景颜色设置为 danger_color(红),当时间进度超过目标完成进度的值到 warning_threshold 时,则将背景颜色设置为 warning_color(黄),当时间进度超过目标完成进度的值时,则将背景颜色设置为 safe_color(绿)。
可以使用甘特图,或者什么图比较好呢?
两个条形图
- 每个关键结果的进度体现 条形图