Files
sionrui/openspec/changes/refactor-task-management/specs/digital-human-task/spec.md
2025-12-21 22:24:16 +08:00

11 KiB
Raw Blame History

ADDED Requirements

Requirement: 数字人任务列表显示

数字人任务管理系统 SHALL 提供任务列表页面,用于查看和管理所有数字人生成任务。

页面规范:

  • 路径:/system/task-management/digital-human-task
  • 布局:使用任务中心的左右分栏布局
  • 功能:显示、筛选、搜索、操作数字人任务

Scenario: 显示数字人任务列表

  • WHEN 用户访问 /system/task-management/digital-human-task
  • THEN 显示数字人任务列表页面
  • AND 左侧导航中「数字人视频任务」项高亮
  • AND 右侧显示任务列表表格

Requirement: 任务列表表格列定义

数字人任务列表 SHALL 显示以下列信息:

列定义:

  • ID任务唯一标识
  • 任务名称:用户设定的任务名称
  • 视频文件:原始视频文件信息
  • 文案内容:输入的文本内容(支持截断显示)
  • 音色:使用的音色配置
  • 状态任务当前状态pending/running/success/failed
  • 进度任务完成百分比0-100
  • 创建时间:任务创建的时间
  • 操作:可执行的操作按钮

Scenario: 显示任务列表数据

  • WHEN 任务列表加载完成
  • THEN 表格显示所有任务的基本信息
  • AND 文案内容列使用 ellipsis 截断过长文本
  • AND 状态列使用彩色标签显示
  • AND 进度列显示进度条和百分比

Requirement: 任务状态管理

数字人任务 SHALL 支持以下状态:

状态定义:

  • pending:等待处理
  • running:处理中
  • success:已完成
  • failed:失败
  • canceled:已取消

Scenario: 显示任务状态

  • WHEN 渲染任务列表中的状态列
  • THEN 根据任务状态显示对应颜色的标签
  • AND 状态标签文本为中文描述
  • AND 状态颜色映射:
    • pending灰色
    • running蓝色带动画效果
    • success绿色
    • failed红色
    • canceled橙色

Requirement: 任务操作功能

数字人任务列表 SHALL 支持以下操作:

操作定义:

  • 预览:查看生成结果视频
  • 下载:下载生成的视频文件
  • 删除:删除任务记录
  • 取消:取消正在运行的任务
  • 重试:重新执行失败的任务

Scenario: 显示操作按钮

  • WHEN 渲染任务列表中的操作列
  • THEN 根据状态显示对应的任务操作按钮
  • AND 按钮显示规则:
    • 所有任务:预览、删除
    • pending/running 任务:取消
    • success 任务:下载
    • failed 任务:重试

Scenario: 执行预览操作

  • WHEN 用户点击「预览」按钮
  • THEN 弹出视频预览窗口
  • AND 窗口显示生成的结果视频
  • AND 提供关闭按钮

Scenario: 执行下载操作

  • WHEN 用户点击「下载」按钮
  • THEN 开始下载生成的视频文件
  • AND 文件名为「数字人视频_{任务ID}_{时间戳}.mp4」

Scenario: 执行删除操作

  • WHEN 用户点击「删除」按钮
  • THEN 弹出确认对话框
  • AND 用户确认后删除任务
  • AND 删除后刷新列表

Scenario: 执行取消操作

  • WHEN 用户点击「取消」按钮
  • THEN 调用取消 API
  • AND 任务状态变更为 canceled
  • AND 停止状态轮询

Scenario: 执行重试操作

  • WHEN 用户点击「重试」按钮
  • THEN 调用重试 API
  • AND 任务状态变更为 pending
  • AND 重新开始状态轮询

Requirement: 筛选和搜索功能

数字人任务列表 SHALL 支持以下筛选条件:

筛选条件:

  • 任务状态:下拉选择(全部/待处理/处理中/已完成/失败)
  • 任务名称:文本搜索(支持模糊匹配)
  • 创建时间:日期范围选择

Scenario: 按状态筛选

  • WHEN 用户选择任务状态下拉框
  • THEN 列表自动刷新,只显示对应状态的任务
  • AND 选择「全部状态」时显示所有任务

Scenario: 按名称搜索

  • WHEN 用户在搜索框输入关键词
  • AND 按下回车键或点击搜索按钮
  • THEN 列表自动刷新,只显示名称包含关键词的任务
  • AND 搜索支持模糊匹配

Scenario: 按时间范围筛选

  • WHEN 用户选择日期范围
  • THEN 列表自动刷新,只显示创建时间在范围内的任务
  • AND 日期格式为「YYYY-MM-DD」

Requirement: 分页功能

数字人任务列表 SHALL 支持分页显示。

分页规范:

  • 每页条数:支持 10/20/50/100 条选项
  • 页码跳转:支持输入页码直接跳转
  • 显示信息:显示「共 X 条记录,第 Y/Z 页」

Scenario: 分页导航

  • WHEN 任务数量超过每页显示条数
  • THEN 表格底部显示分页组件
  • AND 用户可以切换页码
  • AND 用户可以切换每页条数

Requirement: 自动状态轮询

数字人任务列表 SHALL 自动轮询正在运行的任务状态。

轮询规范:

  • 轮询间隔5 秒
  • 轮询范围:只轮询 status 为 pending 或 running 的任务
  • 页面隐藏:暂停轮询
  • 组件销毁:停止轮询

Scenario: 自动轮询任务状态

  • WHEN 页面显示且有待处理/处理中的任务
  • THEN 每 5 秒发起一次 API 请求
  • AND 获取任务最新状态
  • AND 更新页面显示

Scenario: 页面隐藏时暂停轮询

  • WHEN 用户切换到其他页面或最小化浏览器
  • THEN 暂停状态轮询
  • AND 页面重新可见时恢复轮询

Scenario: 任务完成时停止轮询

  • WHEN 轮询发现任务状态变为 success/failed/canceled
  • THEN 从轮询列表中移除该任务
  • AND 当所有任务都完成时,停止轮询

Requirement: API 集成

数字人任务列表 SHALL 集成以下 API

API 端点:

  • getDigitalHumanTaskPage:分页获取任务列表
  • getDigitalHumanTask:获取任务详情
  • cancelTask:取消任务
  • retryTask:重试任务
  • deleteTask:删除任务

Scenario: 加载任务列表

  • WHEN 页面初始加载或筛选条件变化
  • THEN 调用 getDigitalHumanTaskPage(params)
  • AND 解析返回数据并更新表格显示

Scenario: 获取任务详情

  • WHEN 用户点击预览按钮
  • THEN 调用 getDigitalHumanTask(taskId)
  • AND 根据返回数据显示预览内容

Scenario: 取消任务

  • WHEN 用户点击取消按钮
  • THEN 调用 cancelTask(taskId)
  • AND 更新任务状态为 canceled
  • AND 停止该任务的轮询

Scenario: 重试任务

  • WHEN 用户点击重试按钮
  • THEN 调用 retryTask(taskId)
  • AND 更新任务状态为 pending
  • AND 重新开始轮询

Scenario: 删除任务

  • WHEN 用户确认删除任务
  • THEN 调用 deleteTask(taskId)
  • AND 从列表中移除该任务
  • AND 停止该任务的轮询

Requirement: 数据模型映射

数字人任务列表 SHALL 使用以下数据模型:

数据模型(基于 TikDigitalHumanTaskDO

interface DigitalHumanTask {
  id: number                    // 任务ID
  taskName: string             // 任务名称
  videoFileId: number          // 视频文件ID
  videoUrl: string             // 视频文件URL
  inputText: string            // 输入文本
  voiceId: string              // 音色ID
  speechRate: number           // 语速
  emotion?: string             // 情感(可选)
  instruction?: string         // 指令(可选)
  status: string               // 任务状态
  progress: number             // 进度百分比
  currentStep?: string         // 当前步骤(可选)
  resultVideoUrl?: string      // 结果视频URL可选
  errorMessage?: string        // 错误信息(可选)
  createTime: string           // 创建时间
  finishTime?: string          // 完成时间(可选)
}

Scenario: 映射 API 数据

  • WHEN API 返回任务数据
  • THEN 将数据映射为本地数据模型
  • AND 处理可选字段的空值情况
  • AND 格式化时间字段

Requirement: 错误处理

数字人任务列表 SHALL 提供完善的错误处理机制。

错误处理规范:

  • API 调用失败:显示错误提示和重试按钮
  • 网络异常:显示网络异常提示
  • 操作失败:显示具体错误信息
  • 空数据状态:显示「暂无数据」提示

Scenario: API 调用失败

  • WHEN 获取任务列表时 API 返回错误
  • THEN 显示错误提示信息
  • AND 提供「重试」按钮
  • AND 用户点击重试后重新发起请求

Scenario: 网络异常

  • WHEN 网络连接中断
  • THEN 显示网络异常提示
  • AND 自动检测网络恢复
  • AND 网络恢复后提示用户刷新页面

Scenario: 操作失败

  • WHEN 执行任务操作时失败
  • THEN 显示具体错误信息
  • AND 提供重试选项
  • AND 不关闭对话框(如果适用)

Scenario: 空数据状态

  • WHEN 任务列表为空
  • THEN 显示「暂无数字人任务」提示
  • AND 提供「去创建」按钮(如适用)

Requirement: 加载状态显示

数字人任务列表 SHALL 显示适当的加载状态。

加载状态规范:

  • 初始加载:显示骨架屏或加载动画
  • 数据刷新:显示表格 loading 状态
  • 操作进行:显示按钮 loading 状态

Scenario: 初始加载状态

  • WHEN 页面首次加载
  • THEN 显示骨架屏或加载动画
  • AND 加载完成后显示实际内容

Scenario: 数据刷新状态

  • WHEN 筛选条件变化或分页切换
  • THEN 表格显示 loading 状态
  • AND 加载完成后更新表格数据

Scenario: 操作进行状态

  • WHEN 用户执行操作(取消、重试、删除)
  • THEN 对应的按钮显示 loading 状态
  • AND 操作完成后恢复正常状态

Requirement: 响应式适配

数字人任务列表 SHALL 支持响应式设计。

适配规范:

  • 桌面端:显示所有列
  • 平板端:隐藏部分次要列
  • 移动端:使用卡片布局或横向滚动

Scenario: 平板端适配

  • WHEN 在平板设备上访问任务列表
  • THEN 隐藏「视频文件」和「音色」列
  • AND 保留核心列ID、任务名称、状态、进度、操作

Scenario: 移动端适配

  • WHEN 在手机设备上访问任务列表
  • THEN 使用卡片布局显示任务信息
  • AND 每个卡片包含任务的核心信息和操作按钮
  • OR 表格使用横向滚动显示所有列

Requirement: 性能优化

数字人任务列表 SHALL 实施性能优化措施。

优化措施:

  • 搜索防抖:搜索输入 300ms 后执行
  • 虚拟滚动:数据量 > 1000 条时启用
  • 内存管理:及时清理定时器和事件监听器
  • 图片懒加载:视频缩略图懒加载

Scenario: 搜索防抖

  • WHEN 用户在搜索框输入内容
  • THEN 等待 300ms 无输入后执行搜索
  • AND 避免频繁的 API 调用

Scenario: 虚拟滚动

  • WHEN 任务列表数据量超过 1000 条
  • THEN 启用虚拟滚动功能
  • AND 只渲染可见区域的行
  • AND 提升大数据量时的渲染性能