Skip to content

BizImport 数据导入 ​

统一的批量数据导入组件(原 BizImportButton「一键导入按钮」与 BizImportWizard「高级导入向导」合并而来),按 mode 切换两条通道:

  • mode="quick"(默认,标准模板):一键导入——下载模板 → 选择文件(类型 / 大小校验)→ 上传导入 → 结果弹窗(成功 / 失败条数、失败明细表格 + 明细 csv 下载)。适合模板固定、直接整表上传的场景。
  • mode="wizard"(异构模板):三步向导——① 上传(拖拽 + 模板下载 + 行数上限校验)→ ② 列映射(表头自动匹配 label / aliases、persist-key 本地记忆映射)→ ③ 数据预览(必填校验 + 错误行红标 + 异常原因列,服务端错误经 setErrors 回填)。适合用户模板列名五花八门、需要人工对列的场景。

组件零接口:模板下载(template-url / template-request)、导入执行(request)、文件解析(parse-request)全部由业务注入,组件不含任何业务接口与解析依赖。

quick 基础用法 ​

默认 mode="quick":下载模板 → 选择文件(.xls/.xlsx/.csv、≤10MB)→ 自动上传 → 结果弹窗(成功/失败条数 + 失败明细 csv 下载)
mode="quick"(默认):request 注入导入实现(入参原始 File,resolve 结构化结果);template-request 注入模板下载(resolve Blob),也可用 template-url 直链。导入完成自动弹结果反馈。

quick 会员批量导入 ​

CRM 会员批量场景:csv / xlsx 双格式、单文件 ≤ 2MB;导入完成自动弹结果反馈,重复手机号按「先到先得」保留并给出冲突行号
CRM 场景:csv / xlsx 双格式、单文件 ≤ 2MB;导入 resolve 部分失败结果(successCount / failCount / failRows),重复手机号按「先到先得」保留并给出冲突行号。

quick 失败明细下载 ​

影响在售商品 1,243 个;结果弹窗内「下载失败明细」导出 csv(\ufeff 防 Excel 乱码),修正后重导
调价场景:导入前模板确认影响面(1,243 个商品),结果弹窗给出红线拦截行(售价低于成本),「下载失败明细」导出 csv(\ufeff 防 Excel 乱码)逐行修正后重导。

模板下载注入 ​

quick:template-url 直链(不占接口)
wizard:template-request 文件流(接口生成模板)
0
上传文件
0
列映射
0
数据预览
拖拽文件到此处,或点击选择
支持 .csv 文件,单次最多 1000 行
template-request 优先级高于 template-url;两通道注入其一即出现「下载模板」入口
两通道通用:template-url 直链(点击直接下载,不占接口)或 template-request 文件流(接口生成,优先级更高),注入其一即出现「下载模板」入口。

wizard 三步全流程 ​

0
上传文件
0
列映射
0
数据预览
拖拽文件到此处,或点击选择
支持 .csv 文件,单次最多 1000 行
考勤导入场景:CSV 解析注入 + 示例文件生成下载。示例数据刻意覆盖三种映射情况:表头与字段同名直接匹配、别名匹配(员工编号→工号)、需手工映射(上班打卡→上班时间);并含一行缺必填(姓名)的脏数据在预览页红标。

列映射记忆(persist-key) ​

0
上传文件
0
列映射
0
数据预览
拖拽文件到此处,或点击选择
支持 .csv 文件,单次最多 1000 行
上传 A:「货号 / 库存数量」命中 aliases 自动匹配(绿标),「销售单价」需手工映射到「售价」,点下一步即写入本地记忆; 再次上传 A 或 B(两份都含「销售单价」列):售价下拉已自动带出上次的选择(记忆命中不显示绿标)。记忆键为 biz-import:demo-goods-import,可点「清除记忆」复位
手工映射过的列名按字段写入 localStorage(键 biz-import:<persist-key>),再次导入含同列名的文件自动带出,免重选;命中记忆不显示「自动匹配」绿标。可随时清除记忆复位。

服务端错误回填(setErrors) ​

BizModal 纯展示壳(show-confirm=false)内嵌向导;提交后服务端校验失败的行经 setErrors 回填预览页红标 + 异常原因列。

错误行在线修正(editable) ​

editable 开启后,第三步预览页异常行的单元格直接变为输入框:改完即时重算校验(必填本地即时、该行服务端错误随编辑清除),全部通过即可直接导入——免去「下载失败明细改文件重传」的往返。

行数上限拦截 ​

0
上传文件
0
列映射
0
数据预览
拖拽文件到此处,或点击选择
支持 .csv 文件,单次最多 3 行
max-rows 超限文件解析后直接拦截报错(防一次导入拖垮服务),请拆分文件再传。

事件链路日志 ​

quick:选错类型 / 超限 → error;成功 → success
选非 csv 或大于 1MB 的文件触发 error
wizard:解析完成 → parsed;确认导入 → submit 下载示例 CSV
0
上传文件
0
列映射
0
数据预览
拖拽文件到此处,或点击选择
支持 .csv 文件,单次最多 1000 行
事件时间线(最新在前,保留 12 条)
暂无事件——左侧选一个超大 / 非法文件触发 error,右侧走完三步触发 parsed / submit
quick 通道 error(类型 / 大小校验拦截)与 success(导入完成),wizard 通道 parsed(解析完成回传原始表头与行)与 submit(确认导入映射行)全事件时间线。

与表格页联动 ​

导入结果确认后,success 事件里重新查询列表,新导入行带「本次导入」标签
库存导入场景:success 事件里重新查询列表,新导入行打「本次导入」标签——导入与列表刷新的标准联动姿势。

后端异步任务(大数据量) ​

点击「模拟选择文件」注入 CSV 触发流程:提交任务 → 进度条(已处理 / 总行数)→ partial 终态弹出结果(支持服务端 fail-file-url 直链下载失败明细);开启开关后走 failed 剧本;处理中「后台运行」仅停前端轮询,不打断服务端任务。

mode="async":task-request 提交文件创建任务 → task-poll 轮询进度(percent / 已处理 / 总行数)→ 终态弹结果(partial 也弹,支持服务端 fail-file-url 失败明细直链下载)。「后台运行」仅停前端轮询不打断服务端任务,task-complete 携带任务 id 可登记进任务中心。

Props ​

属性名类型默认值适用 mode说明
mode'quick' | 'wizard' | 'async''quick'全部导入模式:quick 一键导入 / wizard 三步向导 / async 后端异步任务
request(file: File) => Promise<BizImportResult>—quick(必传)导入实现,resolve 后自动弹结果反馈
task-request(file: File) => Promise<string>—async(必传)提交文件创建任务,resolve 任务 id
task-poll(taskId) => Promise<BizImportTaskStatus>—async(必传)轮询任务状态,直到终态(success / partial / failed)
poll-intervalnumber1500async轮询间隔(ms),轮询瞬时失败自动下个间隔重试
acceptstring'.xls,.xlsx,.csv'全部接受的文件类型(逗号分隔扩展名)
template-urlstring—全部模板直链,点击「下载模板」直接下载
template-request() => Promise<Blob>—全部模板下载实现(接口文件流),优先级高于 template-url
max-sizenumber10quick / async单文件大小上限(MB),超限拦截并触发 error
button-textstring'导入'quick / async按钮文案
result-titlestring'导入结果'quick / async结果弹窗标题
fieldsBizImportField[]—wizard(必传)目标字段(列映射左侧固定项)
parse-request(file) => Promise<BizImportParseResult>—wizard(必传)文件解析注入(SheetJS 等,组件零解析依赖)
persist-keystring—wizard列映射记忆 localStorage 键(缺省不记忆)
max-rowsnumber1000wizard单次导入行数上限,超限解析后拦截
editablebooleanfalsewizard预览页异常行单元格在线修正(即时重算校验,修正值随 submit 一并提交)
submit-loadingbooleanfalsewizard「确认导入」按钮 loading(业务提交期间锁定)

quick / async 通道 size / type / plain / round 等按钮语义属性经 attrs 透传内部按钮,其余 attrs 透传内部 el-upload;wizard 通道 attrs 落根元素。

BizImportResult ​

{ successCount: number; failCount: number; failRows?: { row: number; reason: string }[] }

BizImportTaskStatus ​

字段类型说明
status'processing' | 'success' | 'partial' | 'failed'任务状态(前两者为终态外的处理中)
percentnumber进度百分比 0-100(缺省走不确定进度动画)
processed / totalnumber已处理 / 总行数(进度弹窗展示)
resultBizImportResult终态结果(success / partial)
failFileUrlstring服务端失败明细文件直链(优先于 result.failRows 的 csv 下载)
messagestring任务失败说明(failed)

BizImportField ​

属性类型说明
keystring字段标识(提交行的键)
labelstring显示名(自动匹配优先项)
requiredboolean必填(映射必选 + 预览非空校验)
aliasesstring[]表头别名(自动匹配)

BizImportParseResult ​

{ headers: string[]; rows: Array<Record<string, unknown>> }(键为原始表头名,解析实现由业务注入)

Events ​

事件名参数适用 mode说明
success(result: BizImportResult)quick / async导入成功(已弹出结果反馈;async 为终态 success / partial)
error(error: unknown)quick / async校验不通过 / request reject / async 任务终态 failed
task-complete(taskId, status: BizImportTaskStatus)async任务终态(含任务 id,供登记任务中心)
parsed(result: BizImportParseResult)wizard文件解析完成(原始表头与行,可做服务端预检)
submit(rows: Array<Record<string, unknown>>)wizard确认导入(已通过校验的映射行,键为 fields.key)

Slots ​

插槽名说明
—无自定义插槽(quick 按钮文案用 button-text 控制,wizard 步骤结构固定)

Expose ​

属性/方法适用 mode说明
open()两条通道主动打开文件选择(quick:等同点击导入按钮;wizard:第一步拖拽区)
setErrors(errors: Record<number, string[]>)wizard服务端校验错误回填(行号 → 原因列表),预览页红标展示
reset()两条通道重置(wizard:回第一步并清空文件 / 映射 / 错误;quick:清空结果反馈状态)
getMappedRows(): Array<Record<string, unknown>>wizard当前映射行(含未通过校验的行,供业务自行处理)