Goal模块

Goal 模块

#resource / typescript #type / howto #status / growing

[!info] related notes


Goal 模块的设计思路

Overview

核心职责:OKR 体系管理、战略层面的进度追踪、长期复盘。

  1. okr 式的目标管理,有关键结果,结束时间(支持无期限),可行性分析等
  2. 能够使用文件夹来层级管理目标,应该有系统文件夹(全部、已归档、已删除)
  3. 目标应该支持能够扩展的元数据,还有基础的 tags、createAt、updateAt、importanceLevel(contracts的shared已经有了) 等
  4. 应该有完整的生命周期管理(进行中、归档、已删除)
  5. 提醒设置,用户应该可以设定任务还剩多少天时进行提醒

服务

基础服务

  • 目标创建: 有目标的基础信息(名字、起止日期、重要性、可行性分析、所属文件夹等)、关键结果等
  • 目标节点(文件夹)创建获取: 文件夹的名字、图标、颜色;获取所有文件夹。
  • 目标获取:根据文件夹和生命周期筛选获取 (是直接进入页面就初始化获取所有目标,客户端筛选 还是 每次筛选都只从服务端 获取筛选结果? 筛选结果是不是可以缓存
  • 关键结果添加:除了一开始创建 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 模块相关的当日统计信息
  1. goal 模块、task 模块、reminder 模块的提醒功能需要依赖 schedule 模块,记得统一一下时间配置,应该是使用 cron 表达式
  2. 其他的

领域实体对象

聚合根对象:

  • 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%),让内容区域被可滚动标签包裹,在固定大小内滚动,始终有背景

问题:

  1. 这个 goal-review 为什么只占据了 100% 页面高度,内容已经超过了它,导致下滑后的区域没有背景了
    因为 height: 100% 是继承父元素的高度,如果父元素(比如 <body><html> 或上级 div)没有设置明确的高度(height: 100% 或 height: xxx px/vh),那么它的高度是由内容撑开的(auto),但不会超出父元素的高度。
    此时这个配置无效。

图表区

  1. 使用 echarts 库绘制图表来展示用户的目标完成信息

我是不是可以使用 echarts 的图表来更多得展示 目标完成情况信息给用户,让用户更好地复盘

将时间分为:

  • 6:00 - 12:00 早晨
  • 12:00 - 18:00 下午
  • 18:00 - 24:00 晚上
  • 24:00 - 6:00 凌晨

根据目标中的 record 数据中的时间来判断目标完成的时间段,并将其分类,统计出来,并绘制图表,帮助用户了解自己的高效率时间段

  1. 表现用户目标完成进度和时间进度的图表

首先是目标完成进度的图表,背景颜色则由时间进度(百分比)来填充,当时间进度超过目标完成进度的值到 danger_threshold 时,则将背景颜色设置为 danger_color(红),当时间进度超过目标完成进度的值到 warning_threshold 时,则将背景颜色设置为 warning_color(黄),当时间进度超过目标完成进度的值时,则将背景颜色设置为 safe_color(绿)。

可以使用甘特图,或者什么图比较好呢?
两个条形图

  1. 每个关键结果的进度体现 条形图

数据持久化

创建于 2025/1/1 更新于 2026/5/27