Skip to content

Feature: 文本节点

一句话目标

用户在文本节点中编写和编辑富文本内容,并可通过 AI 生成文本填充到编辑器。

行为约束

约束 1:富文本编辑

前置条件: 文本节点已创建 行为: 用户在富文本编辑器中输入和格式化文本(标题、加粗、斜体、列表、删除线) 后置条件: 内容防抖回写到节点数据

约束 2:AI 文本生成

前置条件: 用户已输入 prompt,节点状态为 idle 行为: 用户点击生成按钮,调用 generateText API 后置条件: 生成结果填充到编辑器内容区,节点状态变为 done

约束 3:生成失败保持用户输入

前置条件: AI 生成请求失败(网络错误或 API 错误) 行为: 节点状态变为 error,显示 toast 错误提示 后置条件: prompt 和现有编辑器内容保持不变

约束 4:变体选择

前置条件: 文本节点已创建 行为: 用户可选择变体数量(1/2/4),作为生成参数传递 后置条件: 生成请求携带 variations 参数

约束 5:模型选择

前置条件: 模型列表已加载 行为: 用户可在下拉菜单中切换文本生成模型 后置条件: 后续生成使用新选择的模型

状态机

idle ──[点击生成]-→ generating ──[成功]-→ done
                        └──[失败]-→ error
done ──[修改 prompt/模型]-→ idle
error ──[修改重试]-→ idle
状态编辑器生成按钮Prompt
idle可编辑可用可编辑
generating只读禁用只读
done显示结果,可继续编辑可用可编辑
error保持原内容可用保持原输入

Acceptance Criteria

  • [x] AC-01:富文本编辑器支持标题、加粗、斜体、列表、删除线格式
  • [x] AC-02:编辑内容防抖回写到节点数据(300ms)
  • [x] AC-03:点击生成后,节点进入 generating 状态,按钮禁用
  • [x] AC-04:生成成功后,结果填充到编辑器,状态变为 done
  • [x] AC-05:生成失败后,prompt 和内容不丢失,状态变为 error
  • [x] AC-06:可选择变体数量 1/2/4
  • [x] AC-07:可切换文本生成模型
  • [x] AC-08:组件卸载时 abort 进行中的请求

BDD Scenarios

gherkin
Feature: 文本节点

  Scenario: 使用富文本工具栏格式化文本
    Given 一个文本节点已创建
    When 用户输入文字并点击加粗按钮
    Then 选中文字变为加粗样式
    And 内容以 HTML 保存到节点数据

  Scenario: AI 生成文本并填充
    Given 一个文本节点处于 idle 状态
    And 已输入 prompt "写一段产品介绍"
    When 用户点击生成按钮
    Then 节点状态变为 generating
    And 生成按钮变为禁用
    When AI 生成成功返回
    Then 编辑器内容被替换为生成结果
    And 节点状态变为 done

  Scenario: 生成失败时保持用户输入
    Given 一个文本节点已输入 prompt "测试文本"
    And 编辑器中有已编辑的内容
    When AI 生成请求失败
    Then 节点状态变为 error
    And 编辑器内容保持不变
    And prompt 输入保持 "测试文本"

TDD 单元测试要点

针对 useTextEditor composable:

  • [x] 初始化后 editor 实例存在
  • [x] 输入内容后 300ms 调用 onUpdate 回调
  • [x] 外部内容更新时同步到编辑器(不触发循环更新)

Out of Scope

  • 复制全部内容按钮(延后)
  • 全屏编辑模式(延后)
  • 上游节点内容作为生成上下文(P0,待实现,见 data-flow spec)