/** 组件支持的上传资源类别。 */ export type ShowtimeUploadKind = "image" | "video" | "file"; /** 上传组件维护的条目生命周期状态。 */ export type ShowtimeUploadItemStatus = "ready" | "cropping" | "queued" | "uploading" | "success" | "error" | "canceled"; /** 上传开始前可能产生的校验错误类别。 */ export type ShowtimeUploadErrorCode = "kind" | "accept" | "max-size" | "limit" | "upload" | "crop"; /** 通过 v-model 和插槽属性向外暴露的单个上传条目。 */ export interface ShowtimeUploadItem { /** 组件生成或业务方提供的稳定唯一标识。 */ id: string; /** 组件识别出的上传资源类别。 */ kind: ShowtimeUploadKind; /** 当前显示的文件名。 */ name: string; /** 本地文件大小,单位为字节。远程初始化条目可不传。 */ size?: number; /** 新选择的本地文件;远程初始化条目通常不传。 */ file?: File; /** 上传成功后由业务方返回的资源地址。 */ url?: string; /** 视频或其他资源可选的封面地址。 */ coverUrl?: string; /** 当前上传生命周期状态。 */ status: ShowtimeUploadItemStatus; /** 上传进度,范围为 0 到 100。 */ progress: number; /** 上传或裁剪失败时的错误文本。 */ error?: string; } /** 用户传入的上传方法需要返回的标准化结果。 */ export interface ShowtimeUploadResult { /** 上传完成后可访问的资源地址。 */ url: string; /** 可选的新文件名;传入后覆盖条目原文件名。 */ name?: string; /** 可选的封面资源地址。 */ coverUrl?: string; } /** 调用用户上传方法时传入的上下文。 */ export interface ShowtimeUploadContext { /** 请求开始时的条目快照,不可修改。 */ item: Readonly; /** 当前文件的识别类别。 */ kind: ShowtimeUploadKind; /** 取消请求使用的 AbortSignal。 */ signal: AbortSignal; /** 向组件报告 0 到 100 的上传进度。 */ onProgress: (progress: number) => void; } /** 由业务应用提供的统一上传回调。 */ export type ShowtimeUploadHandler = (file: File, context: ShowtimeUploadContext) => Promise; /** 按文件类别配置的类型和大小约束。 */ export interface ShowtimeUploadRule { /** 原生 input accept 配置,例如 image/png、image/* 或 .png。 */ accept?: string[]; /** 最大文件大小,单位为字节;不传时不限制大小。 */ maxSize?: number; } /** 以文件类别为键的可选规则集合。 */ export type ShowtimeUploadRules = Partial>; /** 图片裁剪行为;仅在 enabled 为 true 时显示裁剪弹层。 */ export interface ShowtimeUploadCropOptions { /** 是否启用图片裁剪。 */ enabled?: boolean; /** 固定裁剪比例;不传时可以自由裁剪。 */ aspectRatio?: number; /** 是否固定裁剪框的尺寸。 */ fixedBox?: boolean; /** 是否允许拖动裁剪框。 */ movable?: boolean; /** 输出图片格式。 */ outputType?: "png" | "jpeg" | "webp"; } /** 内置上传界面使用的条目布局。 */ export type ShowtimeUploadLayout = "auto" | "grid" | "list"; /** 组件发出的结构化失败信息。 */ export interface ShowtimeUploadError { /** 失败来源。 */ code: ShowtimeUploadErrorCode; /** 可直接展示的中文错误信息。 */ message: string; /** 校验或裁剪失败时对应的原始文件。 */ file?: File; /** 上传阶段失败时对应的条目。 */ item?: ShowtimeUploadItem; } /** ShowtimeUpload 对外提供的属性。 */ export interface ShowtimeUploadProps { /** 通过 v-model 维护的上传条目数组。 */ modelValue?: ShowtimeUploadItem[]; /** 业务方提供的上传实现;组件不会主动请求业务接口。 */ upload?: ShowtimeUploadHandler; /** * 允许选择的资源类别。 * * 未传入有效 rules 时生效;rules 包含有效类别键时,该键集合优先于此配置。 */ kinds?: ShowtimeUploadKind[]; /** * 按资源类别配置的 accept 和大小规则。 * * 传入至少一个有效类别键时,仅允许这些类别,未声明类别不会再补充默认规则。 */ rules?: ShowtimeUploadRules; /** 最多保留的条目数量。 */ limit?: number; /** 是否支持单次选择多个文件。 */ multiple?: boolean; /** 是否禁用选择和替换操作。 */ disabled?: boolean; /** 是否以只读方式展示已有条目。 */ readonly?: boolean; /** 选择后是否立即调用业务上传方法。 */ autoUpload?: boolean; /** 多文件模式下同时执行的上传请求数量上限;单文件模式固定为 1。 */ maxConcurrent?: number; /** 图片裁剪选项。 */ crop?: ShowtimeUploadCropOptions; /** 默认条目的展示布局。 */ layout?: ShowtimeUploadLayout; /** * 上传组件的强调色,支持任意有效 CSS 颜色值,例如 `#1677ff` 或 `rgb(22 119 255)`。 * * 该值会覆盖组件根节点的 `--showtime-upload-accent`,并由内置视图和插槽内容继承。 */ themeColor?: string; /** 默认文件选择入口的文字。 */ triggerLabel?: string; /** 是否显示内置的规则提示。 */ showTips?: boolean; /** 是否显示条目预览入口并允许打开预览。 */ previewEnabled?: boolean; } /** ShowtimeUpload 实例暴露给父组件的方法。 */ export interface ShowtimeUploadExpose { /** 打开原生文件选择器。 */ open: () => void; /** 清空全部条目,并终止正在执行的上传请求。 */ clear: () => void; /** 按 ID 移除指定条目。 */ remove: (id: string) => void; /** 重试失败或已取消的本地条目。 */ retry: (id: string) => void; /** 在关闭自动上传时,开始上传全部待上传条目。 */ uploadPending: () => void; /** 取消排队中或上传中的指定条目。 */ cancel: (id: string) => void; } /** 默认规则覆盖图片、视频、办公文档、PDF 和常见压缩包。 */ export declare const DEFAULT_SHOWTIME_UPLOAD_RULES: Required; /** 门面组件为可选基础属性提供的默认值。 */ export declare const DEFAULT_SHOWTIME_UPLOAD_PROPS: { kinds: () => ShowtimeUploadKind[]; limit: number; multiple: boolean; disabled: boolean; readonly: boolean; autoUpload: boolean; maxConcurrent: number; crop: () => ShowtimeUploadCropOptions; layout: ShowtimeUploadLayout; themeColor: string; triggerLabel: string; showTips: boolean; previewEnabled: boolean; };