You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

3.7 KiB

Changelog: 修复时间轴资源导入错误

日期: 2026-01-26
类型: Bug 修复
影响范围: 时间轴资源轨道


问题描述

在重构剧本资源数据结构后(RFC 132),timeline.ts 仍然从旧的 ./resources 导入 getResourceById 函数,导致 404 错误:

GET http://localhost:6160/src/mocks/resources.ts?t=1769394078482 net::ERR_ABORTED 404 (Not Found)

修复内容

1. 更新导入路径

修改文件: client/src/mocks/timeline.ts

// ❌ 旧的导入
import { getResourceById } from './resources';

// ✅ 新的导入
import { getResourceById } from './project-resources';

2. 当前数据流

分镜 (storyboard)
  └─ resources.characters[].resourceId
      └─ 项目素材 (project_resources)
          └─ 显示在时间轴资源轨道

业务逻辑说明

当前实现(临时方案)

分镜直接引用项目素材 ID:

// storyboards.ts
{
  id: 'storyboard_001',
  resources: {
    characters: [
      { resourceId: '018e1234-5678-7abc-8def-200000000001', displayOrder: 0 }
    ]
  }
}

// timeline.ts 查询素材
const resource = getResourceById('018e1234-5678-7abc-8def-200000000001');
// 返回:孙悟空-青年形象1

理想实现(未来改进)

分镜应该引用标签,标签再关联素材:

分镜 (storyboard)
  └─ resources.characters[].tagId (引用标签)
      └─ 标签 (screenplay_element_tags)
          └─ 项目素材 (project_resources.elementTagId)
              └─ 显示在时间轴资源轨道

优势

  1. 更符合业务逻辑(分镜选择角色的某个状态,如"孙悟空-青年")
  2. 支持标签切换(如从"青年"切换到"少年")
  3. 自动使用标签的默认素材(isDefault = true

未来改进计划

Phase 1: 数据结构调整(下周)

修改 storyboard.resources 结构:

// 当前结构
resources: {
  characters: [
    { resourceId: string, displayOrder: number }
  ]
}

// 目标结构
resources: {
  characters: [
    { 
      tagId: string,           // 引用标签(如 "tag_char_002" = 孙悟空-青年)
      resourceId?: string,     // 可选:覆盖默认素材
      displayOrder: number 
    }
  ]
}

Phase 2: Timeline 查询逻辑调整

// 当前逻辑
storyboard.resources.characters?.forEach((charRef) => {
  const resource = getResourceById(charRef.resourceId);
  // ...
});

// 目标逻辑
storyboard.resources.characters?.forEach((charRef) => {
  // 1. 通过 tagId 查询标签
  const tag = getTagById(charRef.tagId);
  
  // 2. 获取素材(优先使用指定的,否则使用默认的)
  const resource = charRef.resourceId 
    ? getResourceById(charRef.resourceId)
    : getDefaultResourceForTag(charRef.tagId);
  
  // 3. 显示在时间轴
  // ...
});

Phase 3: UI 交互改进

  1. 分镜编辑器:选择角色时,显示标签选择器(如"孙悟空-少年"、"孙悟空-青年")
  2. 时间轴:右键点击资源,可以切换标签或更换素材
  3. 属性面板:显示当前使用的标签和素材信息

相关文档

测试验证

  • 时间轴页面加载正常
  • 资源轨道显示正常
  • 分镜资源数据结构调整(待实施)
  • Timeline 查询逻辑调整(待实施)

变更日期: 2026-01-26
修复人员: AI Assistant
审核状态: 待审核