@sl-material/sl-import 1.0.0-beta0 → 1.0.0-beta10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -174,14 +174,15 @@ const handleImport = async () => {
174
174
 
175
175
  所有上传相关配置统一放在 `uploadConfig` 对象中:
176
176
 
177
- | 参数 | 类型 | 默认值 | 说明 |
178
- | --------------- | ------------------------------------- | ----------- | ----------------------- |
179
- | `autoUpload` | `boolean` | `false` | 是否立即上传文件 |
180
- | `multiple` | `boolean` | `false` | 是否支持多文件上传 |
181
- | `maxFiles` | `number` | `10` | 最大文件数量 |
182
- | `maxFileSize` | `number` | `104857600` | 单文件最大大小(100MB) |
183
- | `customUpload` | `(file, onProgress?) => Promise<any>` | - | 自定义上传函数 |
184
- | `chunkedUpload` | `ChunkUploadStrategy` | - | 分片上传策略配置 |
177
+ | 参数 | 类型 | 默认值 | 说明 |
178
+ | ---------------- | ----------------------------------------------- | ----------- | ----------------------- |
179
+ | `autoUpload` | `boolean` | `false` | 是否立即上传文件 |
180
+ | `multiple` | `boolean` | `false` | 是否支持多文件上传 |
181
+ | `maxFiles` | `number` | `10` | 最大文件数量 |
182
+ | `maxFileSize` | `number` | `104857600` | 单文件最大大小(100MB) |
183
+ | `customUpload` | `(file, context?, onProgress?) => Promise<any>` | - | 自定义上传函数 |
184
+ | `chunkedUpload` | `ChunkUploadStrategy` | - | 分片上传策略配置 |
185
+ | `confirmLoading` | `boolean` | `true` | 确定按钮 loading 控制 |
185
186
 
186
187
  ##### 分片上传策略 (ChunkUploadStrategy)
187
188
 
@@ -193,6 +194,19 @@ interface ChunkUploadStrategy {
193
194
  }
194
195
  ```
195
196
 
197
+ ##### 文件操作上下文
198
+
199
+ `customUpload` 函数的第三个参数,提供基本的文件操作能力:
200
+
201
+ ```typescript
202
+ interface Context {
203
+ /** 当前文件列表 */
204
+ fileList: FileUploadItem[];
205
+ /** 删除指定索引的文件 */
206
+ removeFile: (index: number) => void;
207
+ }
208
+ ```
209
+
196
210
  #### 回调函数
197
211
 
198
212
  | 参数 | 类型 | 说明 |
@@ -303,6 +317,70 @@ ImportDialog.open({
303
317
  });
304
318
  ```
305
319
 
320
+ ### 使用文件操作功能
321
+
322
+ ```typescript
323
+ import { ImportDialog, TemplateTypeEnum } from "@sl-material/sl-import";
324
+
325
+ ImportDialog.open({
326
+ title: "导入数据",
327
+ templateType: TemplateTypeEnum.BASE,
328
+ uploadConfig: {
329
+ autoUpload: false,
330
+ customUpload: async (file, context) => {
331
+ // 如果文件数量超过限制,删除第一个文件
332
+ if (context.fileList.length > 5) {
333
+ context.removeFile(0);
334
+ console.log("已删除第一个文件");
335
+ }
336
+
337
+ // 正常上传逻辑(可选择是否使用进度回调)
338
+ const formData = new FormData();
339
+ formData.append("file", file);
340
+
341
+ const response = await fetch("/api/upload", {
342
+ method: "POST",
343
+ body: formData,
344
+ });
345
+
346
+ return response.json();
347
+ },
348
+ },
349
+ });
350
+ ```
351
+
352
+ ### 不使用进度回调的简化写法
353
+
354
+ ```typescript
355
+ ImportDialog.open({
356
+ title: "导入数据",
357
+ templateType: TemplateTypeEnum.BASE,
358
+ uploadConfig: {
359
+ autoUpload: false,
360
+ customUpload: async (file, context, _onProgress) => {
361
+ // 检查当前文件列表
362
+ console.log("当前文件列表:", context.fileList);
363
+
364
+ // 如果文件数量超过限制,删除第一个文件
365
+ if (context.fileList.length > 5) {
366
+ context.removeFile(0);
367
+ }
368
+
369
+ // 简单上传,不处理进度
370
+ const formData = new FormData();
371
+ formData.append("file", file);
372
+
373
+ const response = await fetch("/api/upload", {
374
+ method: "POST",
375
+ body: formData,
376
+ });
377
+
378
+ return response.json();
379
+ },
380
+ },
381
+ });
382
+ ```
383
+
306
384
  ### 延迟上传(点击确定时上传)
307
385
 
308
386
  ```typescript
@@ -311,6 +389,7 @@ ImportDialog.open({
311
389
  templateType: TemplateTypeEnum.BASE,
312
390
  uploadConfig: {
313
391
  autoUpload: false, // 默认值,点击确定时上传
392
+ confirmLoading: true, // 显示确定按钮 loading(默认)
314
393
  customUpload: async (file, onProgress) => {
315
394
  // 上传逻辑
316
395
  },
@@ -323,6 +402,26 @@ ImportDialog.open({
323
402
  });
324
403
  ```
325
404
 
405
+ ### 禁用确定按钮 Loading
406
+
407
+ ```typescript
408
+ ImportDialog.open({
409
+ title: "导入数据",
410
+ templateType: TemplateTypeEnum.BASE,
411
+ uploadConfig: {
412
+ autoUpload: false,
413
+ confirmLoading: false, // 不显示确定按钮 loading
414
+ customUpload: async (file, onProgress) => {
415
+ // 上传逻辑
416
+ },
417
+ },
418
+ onConfirm: async (data) => {
419
+ console.log("上传结果:", data.files);
420
+ return { success: true };
421
+ },
422
+ });
423
+ ```
424
+
326
425
  ### 分片上传(立即上传)
327
426
 
328
427
  ```typescript
package/index.d.ts CHANGED
@@ -438,7 +438,12 @@ export declare interface UploadConfig {
438
438
  /** 单文件最大大小(字节),默认 100MB */
439
439
  maxFileSize?: number;
440
440
  /** 自定义上传函数(普通上传时使用)主要用于自定义上传参数 */
441
- customUpload?: (file: File, onProgress?: (progress: number) => void) => Promise<any>;
441
+ customUpload?: (file: File, context?: {
442
+ /** 当前文件列表 */
443
+ fileList: FileUploadItem[];
444
+ /** 删除指定索引的文件 */
445
+ removeFile: (index: number) => void;
446
+ }, onProgress?: (progress: number) => void) => Promise<any>;
442
447
  /**
443
448
  * 分片上传配置
444
449
  * 配置此项后自动启用分片上传(仅单文件模式生效)
@@ -451,6 +456,13 @@ export declare interface UploadConfig {
451
456
  * 适用于 customUpload 和 chunkedUpload
452
457
  */
453
458
  autoUpload?: boolean;
459
+ /**
460
+ * 确定按钮 loading 控制
461
+ * - true: 点击确定时显示 loading 状态(默认)
462
+ * - false: 点击确定时不显示 loading 状态
463
+ * 主要用于延迟上传场景,控制上传过程中的 UI 反馈
464
+ */
465
+ confirmLoading?: boolean;
454
466
  }
455
467
 
456
468
  export { }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sl-material/sl-import",
3
- "version": "1.0.0-beta0",
3
+ "version": "1.0.0-beta10",
4
4
  "description": "导入组件 - 支持批量导入文件,提供多种模板配置",
5
5
  "main": "./sl-import.cjs.js",
6
6
  "module": "./sl-import.es.js",