/** * BatchImportDialog - 类型定义 * @description 批量导入对话框组件的类型定义 */ /** * 导入状态类型 */ export type ImportStatus = "initial" | "uploaded" | "importing" | "success" | "error"; /** * 响应类型 * - json: 返回 JSON 格式的导入结果 * - blob: 返回文件(如带错误标注的 Excel) */ export type ResponseType = "json" | "blob"; /** * 导入接口函数类型 */ export type ImportApiFn = (formData: FormData) => Promise; /** * 自定义下载模板函数类型 */ export type DownloadTemplateFn = () => void | Promise; /** * BatchImportDialog Props */ export interface BatchImportDialogProps { /** * 对话框标题 * @default "批量导入" */ title?: string; /** * 对话框宽度 * @default 520 */ width?: number; /** * 图标 CDN 基础路径(用于加载 import.svg, excel.svg 等) * 需要以 / 结尾 * @example "https://cdn.example.com/assets/" */ iconBaseUrl?: string; /** * 第一步标题 * @default "第一步:请严格按照导入模板填写内容后导入,否则将新增失败!" */ stepOneTitle?: string; /** * 注意事项提示文案 * @default "注意:单次导入数据不得超过5000条,否则导入可能失败!" */ tips?: string; /** * 模板下载地址(CDN 地址) * 与 onDownloadTemplate 二选一,onDownloadTemplate 优先级更高 */ templateUrl?: string; /** * 下载模板的文件名 * 如果不提供,则使用 URL 中的文件名 * @example "客户导入模板.xlsx" */ templateFileName?: string; /** * 下载导入结果的文件名(不含扩展名和时间戳) * 如果不提供,则使用默认值 "导入结果" * @example "项目信息导入结果" */ resultFileName?: string; /** * 下载模板按钮文案 * @default "下载导入模板" */ templateButtonText?: string; /** * 自定义下载模板函数 * 优先级高于 templateUrl */ onDownloadTemplate?: DownloadTemplateFn; /** * 第二步标题 * @default "第二步:选择模板文件并开始导入" */ stepTwoTitle?: string; /** * 接受的文件类型 * @default ".xls,.xlsx" */ accept?: string; /** * 最大文件大小(MB) * @default 10 */ maxFileSize?: number; /** * 最大导入条数(用于提示文案) * @default 5000 */ maxRowCount?: number; /** * 导入接口函数(必填) * @param formData 包含 file 字段的表单数据 * @returns Promise */ importApi: ImportApiFn; /** * 额外的表单参数 * 会追加到 FormData 中一起提交 */ extraFormData?: Record; /** * 响应类型 * - json: 返回 JSON 格式的导入结果 * - blob: 返回文件(如带错误标注的 Excel) * @default "blob" */ responseType?: ResponseType; } /** * BatchImportDialog Emits */ export interface BatchImportDialogEmits { /** 导入成功事件 */ (e: "success", result: unknown): void; /** 导入失败事件 */ (e: "error", error: Error): void; /** 对话框关闭事件 */ (e: "close"): void; } /** * BatchImportDialog Expose */ export interface BatchImportDialogExpose { /** 打开对话框 */ open: () => void; /** 关闭对话框 */ close: () => void; /** 重置状态 */ reset: () => void; } /** * 上传状态枚举 */ export type BatchUploadRecordStatus = "uploading" | "paused" | "completed" | "error"; /** * 上传记录接口 */ export interface BatchUploadRecord { /** 唯一标识 */ id: string; /** 文件名 */ name: string; /** 文件大小(字节) */ size: number; /** 上传进度(0-100) */ progress: number; /** 上传状态 */ status: BatchUploadRecordStatus; }