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