签入版本
This commit is contained in:
@@ -1,77 +1,45 @@
|
||||
# 9.11 Excel 导入导出组件
|
||||
# 9.12 Excel 导入导出组件
|
||||
|
||||
:::tip 概述
|
||||
本节介绍前端项目中的 Excel 导入导出组件,包括导入组件(ImportExcel)和导出功能(Export2Excel)的使用方法。
|
||||
Excel 能力分前后端两半:后端 excelize 读写([7.4 数据导入导出](/zh/tools/excel.html)),前端 Excel/importFile 组件承担交互与浏览器侧解析,downloadFile 工具负责落盘。
|
||||
:::
|
||||
|
||||
## 导入组件
|
||||
## 前端组件
|
||||
|
||||
```vue
|
||||
<template>
|
||||
<el-button @click="handleImport">导入</el-button>
|
||||
<ImportExcel @success="onImportSuccess" />
|
||||
</template>
|
||||
| 组件/工具 | 职责 |
|
||||
|---|---|
|
||||
| Excel | 基于 xlsx 库的前端解析/生成(纯前端表格处理场景) |
|
||||
| importFile | 导入交互:选文件 → 上传到模块导入接口 → 展示结果汇总 |
|
||||
| utils/downloadFile | 拿到导出 URL 后触发浏览器下载 |
|
||||
|
||||
<script setup>
|
||||
import ImportExcel from '@/components/Excel/src/ImportExcel.vue';
|
||||
## 导入流(对接后端 Import 契约)
|
||||
|
||||
const onImportSuccess = (data) => {
|
||||
// data 为解析后的数组,每项是对象
|
||||
console.log(data);
|
||||
};
|
||||
</script>
|
||||
```text
|
||||
点击导入 → importFile 选择 xls/xlsx
|
||||
→ FormData 提交 POST /{模块}/import(UnmarshalBody 契约)
|
||||
→ 后端逐行校验写入
|
||||
→ 前端展示 ResMsg 提示语 + 失败原因列表( Reasons 含行号)
|
||||
```
|
||||
|
||||
## 导出功能
|
||||
## 导出流(对接后端 Export 契约)
|
||||
|
||||
```typescript
|
||||
import { jsonToSheetXlsx } from '@/components/Excel/src/Export2Excel';
|
||||
|
||||
const handleExport = () => {
|
||||
jsonToSheetXlsx({
|
||||
data: tableData.value,
|
||||
header: {
|
||||
name: '名称',
|
||||
typeText: '类型',
|
||||
statusText: '状态',
|
||||
createTime: '创建时间',
|
||||
},
|
||||
filename: '导出数据.xlsx',
|
||||
});
|
||||
};
|
||||
```text
|
||||
点击导出 → 带当前查询条件 GET /{模块}/export
|
||||
→ 后端过滤写出 xlsx,返回文件 URL
|
||||
→ downloadFile 触发下载
|
||||
```
|
||||
|
||||
## 后端导出对接
|
||||
导出条件与列表分页同参数——"所见即所导"。
|
||||
|
||||
```typescript
|
||||
// 调用后端导出接口,返回文件 URL
|
||||
const handleExport = async () => {
|
||||
const url = await exampleExport(searchParams.value);
|
||||
// 下载文件
|
||||
window.open(url);
|
||||
};
|
||||
```
|
||||
## 导入模板
|
||||
|
||||
## 导入模板下载
|
||||
模板经文件模板管理([6.21](/zh/modules/file-template.html))下载(ByCode 接口),列头与后端解析顺序一致——改模板要同步改解析代码。
|
||||
|
||||
```typescript
|
||||
// 下载导入模板
|
||||
const handleDownloadTemplate = async () => {
|
||||
const url = await exampleExportTemplate();
|
||||
window.open(url);
|
||||
};
|
||||
```
|
||||
## 约定
|
||||
|
||||
## 导入导出注意事项
|
||||
- 大文件导入无事务逐行写,失败行不影响成功行(结果汇总呈现)
|
||||
- 前端 Excel 组件不替代后端导入(后端校验才是边界),只做轻量场景补充
|
||||
|
||||
| 场景 | 说明 |
|
||||
|------|------|
|
||||
| 大数据量导出 | 后端自动分批导出,避免内存溢出 |
|
||||
| 导入模板 | 第一行为表头,第二行起为数据 |
|
||||
| 字段映射 | 后端 `headerMap` 配置表头与字段的对应关系 |
|
||||
| 枚举翻译 | 导入时自动将文本转为枚举值,导出时自动将枚举值转为文本 |
|
||||
## 相关
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [数据导入导出](/zh/tools/excel.html)
|
||||
- [上传配置详解](/zh/tools/upload-config.html)
|
||||
- [7.4 数据导入导出](/zh/tools/excel.html)
|
||||
|
||||
Reference in New Issue
Block a user