| 1 | /** |
| 2 | * MaterialSelectionModal - 类型定义 |
| 3 | * 素材选择器弹窗的类型定义 |
| 4 | */ |
| 5 | |
| 6 | import type { MediaGroup, MediaItem } from '@/api/materials/material.types' |
| 7 | |
| 8 | /** |
| 9 | * 媒体类型 |
| 10 | */ |
| 11 | export type MediaType = 'video' | 'img' |
| 12 | |
| 13 | /** |
| 14 | * 素材选择器弹窗属性 |
| 15 | */ |
| 16 | export interface MaterialSelectionModalProps { |
| 17 | /** 弹窗是否打开 */ |
| 18 | open: boolean |
| 19 | /** 弹窗状态改变回调 */ |
| 20 | onOpenChange: (open: boolean) => void |
| 21 | /** |
| 22 | * 允许的媒体类型 |
| 23 | * - 单个类型:'video' 或 'img' |
| 24 | * - 多个类型:['video', 'img'] 同时支持视频和图片 |
| 25 | * 注意:图片支持多选,视频仅单选 |
| 26 | */ |
| 27 | mediaTypes: MediaType | MediaType[] |
| 28 | /** 选中回调:图片返回数组,视频返回单个 */ |
| 29 | onSelect: (media: MediaItem | MediaItem[]) => void |
| 30 | } |
| 31 | |
| 32 | /** |
| 33 | * 分组卡片属性 |
| 34 | */ |
| 35 | export interface GroupCardProps { |
| 36 | /** 分组数据 */ |
| 37 | group: MediaGroup |
| 38 | /** 点击回调 */ |
| 39 | onClick: (group: MediaGroup) => void |
| 40 | } |
| 41 | |
| 42 | /** |
| 43 | * 可选择媒体卡片属性 |
| 44 | */ |
| 45 | export interface SelectableMediaCardProps { |
| 46 | /** 媒体数据 */ |
| 47 | media: MediaItem |
| 48 | /** 是否选中 */ |
| 49 | selected: boolean |
| 50 | /** 是否为多选模式 */ |
| 51 | multiSelect: boolean |
| 52 | /** 点击回调 */ |
| 53 | onClick: (media: MediaItem) => void |
| 54 | } |
| 55 | |
| 56 | // 重新导出类型供外部使用 |
| 57 | export type { MediaGroup, MediaItem } |
| 58 |