/** * 文件读取结果类型 * @description "dataUrl"代表base64格式的字符串,"file"代表JS的File对象 */ export declare type ResultType = "dataUrl" | "file"; /** * 读取后的文件条目 */ export interface SelectedFileItem { /** 文件名称 */ name: string; /** MIME类型 */ type: string; /** 二进制文件 */ file?: File; /** Base64格式字符串 */ content?: string; [key: string]: any; } /** 已上传文件列表条目 */ export interface UploadedFileListItem { /** 预览图片的地址 */ url: string; /** 文件名称 */ name: string; /** 文件大小,单位:byte */ size?: number; /** 上传时间,格式:yyyy-MM-dd HH:mm:ss */ createTime?: string; /** 上下文数据 */ rawData?: any; } /** * 文件选择参数 * @description * 调用文件选择服务时,允许传入一些额外的参数 * 需要传递什么参数是由自定义的文件选择方法实现决定的,一般情况下此参数可以为空 */ export interface FileSelectionParam { /** * 允许上传的文件类型 * @description * 组件会为本参数提供默认值 * 默认值来源:组件的accept参数 */ accept?: string; /** * 是否启用文件多选 * @description * 组件会为本参数提供默认值 * 默认值来源:组件的multiple参数 */ multiple?: boolean; /** * 文件内容类型 * @description * 组件会为本参数提供默认值 * 默认值来源:组件的resultType参数 * 不强制要求自定义文件选择方法将文件转化为本字段指定的格式,因为本组件会在最后统一处理 */ resultType?: ResultType; /** * 单个文件的大小限制(单位:byte) * @description * 组件会为本参数提供默认值 * 默认值来源:组件的maxSize参数(当该值等于-1时,表示不限制大小) */ maxSize?: number; /** * 最大文件数量 * @description * 组件会为本参数提供默认值 * 默认值来源:组件的maxCount参数(当该值等于-1时,表示不限制数量) */ maxCount?: number; /** * 已上传文件的数量 * @description * 组件会为本参数提供默认值 * 默认值来源:组件的fileList参数的数组长度 */ uploadedFileCount?: number; /** * 单次多选文件的最大数量 * @description 用于配置本地文件选择方式,如果该值大于 (maxCount - uploadedFileCount) 则不生效 */ maxMultiSelectionCount?: number; /** 其它的自定义选项 */ [key: string]: any; } /** * 文本国际化配置 * @description 目前仅支持简体中文、繁体中文、英文 */ export interface TextI18nConfig { /** 简体中文 */ "zh-CHS"?: string; /** 繁体中文 */ "zh-CHT"?: string; /** 英文 */ "en"?: string; /** 其它语言 */ [otherLang: string]: string | undefined; } /** * 当前语言 * @description 目前仅支持简体中文、繁体中文、英文 */ export declare type CurrentLanguage = "zh-CHS" | "zh-CHT" | "en" | string; /** 文件选择方式标识 */ export declare type FileSelectionMethodKey = "FromAlbum" | "TakePhoto" | "FromLocalFile" | "TakeVideo" | string; /** * 文件选择方式配置项 * @description * 框架已经实现了一些默认的文件选择方式,对于这些框架内置的实现(包括:从相册选择、拍照、本地文件、拍视频),仅需要传入一个key即可 * 如果对默认的实现不满,或者需要适配新的平台,也可以通过name、handler等字段实现自定义的上传方式 */ export interface FileSelectionMethod { /** 选择方式的标识 */ key: FileSelectionMethodKey; /** 选择方式的显示名称 */ name?: string; /** * 显示名称的国际化配置 * @description 如果当前语言可以在本配置中找到,则优先展示从本配置中取得的值,如果找不到则缺省显示`name`字段配置的值 */ nameI18n?: TextI18nConfig; /** 选择方式的默认实现 */ handler?: (param: FileSelectionParam, currentLang: CurrentLanguage) => Promise; /** * 多平台文件选择自定义实现 * @description * 当选项被触发时,将会首先查看本字段,如果本字段非空,则会依次调用test方法,当test返回真值时调用其对应的handler方法进行文件选择 * 如果本字段为空,则将调用handler方法,如果handler字段也为空则调用框架提供的默认实现 */ multiPlatformHandlers?: MultiPlatformFileSelectionHandler[]; /** * 自定义选项 * @description 将作为形参传递给文件选择方法 */ options?: Record; } export interface MultiPlatformFileSelectionHandler { /** * 测试本方法是否支持当前平台 * @returns 方法是否支持当前平台 */ test: () => boolean | Promise; /** 选择方式的实现 */ handler: (param: FileSelectionParam, currentLang: CurrentLanguage) => Promise; } /** 文件操作标识 */ export declare type FileActionKey = "Preview" | "Download" | "Delete" | string; /** 文件操作配置项 */ export interface FileAction { /** 文件操作的标识 */ key: FileActionKey; /** 文件操作的显示名称 */ name?: string | ((item: UploadedFileListItem, currentLang: CurrentLanguage) => string); /** * 显示名称的国际化配置 * @description 如果`name`字段中配置了回调方法,则优先使用`name`字段,否则优先使用本字段中的值 */ nameI18n?: TextI18nConfig; /** * 文件操作的实现方法 * @param item 文件条目 * @param index 本条目在文件列表中的下标 * @param options 自定义选项 * @param currentLang 当前语言,可用于国际化 */ handler?: (item: UploadedFileListItem, index: number, options: Record, currentLang: CurrentLanguage) => void; /** * 是否禁用该选项 * @description 默认不禁用,当回调方法返回true或非空字符串时禁用,返回的字符串将被作为提示显示在名称下方,具有比tip更高的优先级 * @param item 被选中的文件条目 * @param readonly 组件是否处于只读状态 * @param options 自定义选项 * @param currentLang 当前语言,可用于国际化 */ disabled?: boolean | ((item: UploadedFileListItem, readonly: boolean, options: Record, currentLang: CurrentLanguage) => boolean | string); /** * 是否可见 * @description 默认可见,仅当返回false时不可见 * @param item 被选中的文件条目 * @param readonly 组件是否处于只读状态 * @param options 自定义选项 * @param currentLang 当前语言,可用于国际化 */ visible?: boolean | ((item: UploadedFileListItem, readonly: boolean, options: Record, currentLang: CurrentLanguage) => boolean); /** * 显示在操作名称下方的一行提示文本 * @description 可选,根据当前文件条目返回一条自定义提示信息 * @param item 被选中的文件条目 * @param options 自定义选项 * @param currentLang 当前语言,可用于国际化 */ tip?: (item: UploadedFileListItem, options: Record, currentLang: CurrentLanguage) => string; /** * 自定义选项 * @description 将作为形参传递给文件操作方法 */ options?: Record; } /** * 附件行的上下文数据 * @description * 是移动端框架对 UploadedFileListItem.rawData 的格式要求 * 如果要使用 mobile-command-service 中内置的预览和下载实现,rawData 中必须有 attachmentId 和 rootId 字段 */ export interface AttachmentRawData { /** 附件ID */ attachmentId: string; /** 文件服务器根目录 */ rootId: string; /** 实体数据 */ entityData: any; } /** 从相册选择文件-自定义选项 */ export interface SelectFileFromAlbumParam extends FileSelectionParam { /** 从相册选择的图片质量(默认值:100)*/ albumQuality?: number; /** 目标宽度 默认值:1000 */ targetWidth?: number; /** 目标高度 默认值:1000 */ targetHeight?: number; } /** 通过拍照获取文件-自定义选项 */ export interface TakePhotoParam extends FileSelectionParam { /** 拍照的图片质量 默认值:100 */ photoQuality?: number; /** 目标宽度 默认值:1000 */ targetWidth?: number; /** 目标高度 默认值:1000 */ targetHeight?: number; } /** 通过拍视频获取文件-自定义选项 */ export interface TakeVideoParam extends FileSelectionParam { /** 视频ID 默认通过uuid随机生成,将作为视频的名称(不要加后缀) */ videoId?: string | (() => string); /** * 视频长度(单位:秒)默认值:20 * @description 在[云上协同]生效,在[云+]不生效 */ videoTime?: number; } /** 文件在线预览-自定义选项 */ export interface FilePreviewOptions { /** * 指定允许预览的文件类型 * @description * 是一个由文件类型到该类型文件后缀名数组的映射,默认值如下 * ``` json * { * "word": ["doc", "docx", "wps"], * "excel": ["xls", "xlsx", "et"], * "ppt": ["ppt", "pptx"], * "pdf": ["pdf"], * "txt": ["txt"], * "image": ["jpg", "jpeg", "png", "gif", "bmp"] * } * ``` * 内置的预览实现仅支持默认值中的这些文件类型,一般情况下,不要设置本字段 */ allowedType?: { [fileType: string]: string[]; }; /** * 预览文件大小限制 * @description * 文件大小超过指定限制后无法预览,只能下载,maxSize的单位是MB,fileType必须与allowedType中的key对应 * 本参数没有默认值,示例如下 * ``` json * [ * { "fileType": "word", "maxSize": 20 }, * { "fileType": "excel", "maxSize": 10 }, * { "fileType": "ppt", "maxSize": 30 }, * { "fileType": "pdf", "maxSize": 30 }, * { "fileType": "txt", "maxSize": 15 }, * { "fileType": "image", "maxSize": 15 } * ] * ``` */ sizeLimit?: { fileType: string; maxSize: number; }[]; } /** * 待解决问题 * 1. 短视频时长限制,仅在[云上协同]平台生效,在[云+]不生效 * 2. 在[云+]录制一个长时间的视频,将由于内存问题导致闪退 * 3. 在[云上协同]平台,图片预览的效果较差,具体表现为:缩放时标题栏也会随着图片缩放 * 4. accept参数仅在h5上有效,在android环境不起效 */