import { BaseEntity, AITextEntity, RoleEntity, TagEntity, SceneEntity, VideoSegmentEntity } from './Entities'; /** * 可编辑项类型枚举 */ export enum ItemType { /** 文本 */ TEXT, /** 图片 */ IMAGE, /** 视频 */ VIDEO, } /** * 可编辑项抽象基类 */ export abstract class EditItem { /** 被包装的实体 */ entity!: T; /** 编辑元数据 */ metadata: Record; /**禁用编辑 */ disableEdit!: boolean; /** 类型 */ abstract type: ItemType; constructor( entity: T, metadata: Record = {} ) { this.metadata = metadata; this.setEntity(entity); } /** * 设置元数据 */ setMetadata(metadata: Record): void { this.metadata = metadata; } /** * 更新实体 */ setEntity(entity: T): void { this.entity = entity; this.disableEdit = entity.disableEdit; } } /** * AI文本可编辑项 */ export class TextItem extends EditItem { type: ItemType.TEXT = ItemType.TEXT; constructor( entity: AITextEntity, metadata: Record = {} ) { super(entity, metadata); } } /** * 角色可编辑项 */ export class RoleItem extends EditItem { type: ItemType.IMAGE = ItemType.IMAGE; constructor( entity: RoleEntity, metadata: Record = {} ) { super(entity, metadata); } } /** * 标签可编辑项 */ export class TagItem extends EditItem { type: ItemType.TEXT = ItemType.TEXT; constructor( entity: TagEntity, metadata: Record = {} ) { super(entity, metadata); } } /** * 场景可编辑项 */ export class SceneItem extends EditItem { type: ItemType.IMAGE = ItemType.IMAGE; constructor( entity: SceneEntity, metadata: Record = {} ) { super(entity, metadata); } } /** * 视频片段可编辑项 */ export class VideoSegmentItem extends EditItem { type: ItemType = ItemType.IMAGE; constructor( entity: VideoSegmentEntity, metadata: Record = {} ) { super(entity, metadata); } /** * 更新为视频状态 */ updateToVideoStatus(): void { this.type = ItemType.VIDEO; } }