导入功能
在本框架中引入了 Easy Excel 依赖(对 Apache POI进行了封装以及扩展),可以对数据进行导出操作(即写 Excel)。
@ExcelIgnore
忽略注解@ExcelProperty
Excel导出/导入- 语法
参数 | 描述 | 注意事项 |
---|---|---|
value | 字段描述 | (可以省略) |
converter | 绑定一个转换器 | DictExcelConverter:字典转换器 |
注意
当使用converter
时,需要配合@Dict
注解一起使用 (告诉转换器需要转换哪个字典)。
@Dict
字典绑定- 语法
参数 | 描述 | 注意事项 |
---|---|---|
value | 字段描述 | (可以省略) |
TIP
- 导出/导入/打印功能前端封装为公共组件table-import
- 后端的4个接口地址有一定的规范:
- 模块名:其中的
user
可以理解为模块名,用来区分每个Controller
的路由 - 权限符:
system:模块名:import
,system:模块名:export
,system:模块名:print
- 接口路由:
/importTemplate
,/export
,/import
,/print
保持固定路由 :::Demo【重要点击查看】
- 模块名:其中的
java
@Slf4j
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("user")
public class SysUserController extends BaseController {
private final SysUserService baseService;
/**
* 模版下载
*/
@SaCheckPermission("system:user:import")
@PostMapping("/importTemplate")
public void importTemplate(HttpServletResponse response) throws IOException {
ExcelUtil.download(response, SysUserExportVo.class, "系统用户");
}
/**
* 导出系统用户
*/
@SaCheckPermission("system:user:export")
@PostMapping("/export")
public void export(SysUserBo user, PageQuery pageQuery,HttpServletResponse response) throws IOException {
List<SysUserVo> list= baseService.selectPageUserList(user, pageQuery).getRows();
List<SysUserExportVo> data= MapstructUtil.convert(list,SysUserExportVo.class);
ExcelUtil.export(response, SysUserExportVo.class, "系统用户",data);
}
/**
* 导入系统用户
* @param file 模版文件
*/
@Transactional
@SaCheckPermission("system:user:import")
@PostMapping("/import")
public R<Boolean> imports(@RequestParam("file") MultipartFile file) throws Exception {
Set<SysUserExportVo> list= ExcelUtil.imports(file, SysUserExportVo.class);
Boolean state= baseService.imports(list);
return R.ok(state,state?"数据导入成功!":"数据导入失败!");
}
/**
* 打印系统用户
* @param user 查询条件
* @param pageQuery 分页条件
*/
@Transactional
@SaCheckPermission("system:user:print")
@PostMapping("/print")
public R<PrintObject<SysUserVo>> print(SysUserBo user, PageQuery pageQuery) throws Exception {
List<SysUserVo> list= baseService.selectPageUserList(user, pageQuery).getRows();
List<SysUserExportVo> data= MapstructUtil.convert(list,SysUserExportVo.class);
PrintObject<SysUserExportVo> printObject= new PrintObject<SysUserExportVo>()
.setTitle("系统用户")
.setData(data);
return R.response(Boolean.TRUE,printObject);
}
}
导出/导入功能使用流程说明
步骤一:定义导出实体对象
java
/**
* 用户账号
*/
@ExcelProperty("用户账号")
@PrintColumn(title = "用户账号", type = PrintTypeEnum.TEXT)
private String userName;
/**
* 用户昵称
*/
@ExcelProperty(value = "用户昵称")
@PrintColumn(title = "用户昵称", type = PrintTypeEnum.TEXT)
private String nickName;
/**
* 状态
*/
@ExcelProperty(value ="状态",converter = DictExcelConverter.class)
@Dict("SYS_STATE")
private Integer status ;
步骤二:使用导出方法
java
/**
* 模版下载
*/
@SaCheckPermission("system:user:import")
@PostMapping("/importTemplate")
public void importTemplate(HttpServletResponse response) throws IOException {
ExcelUtil.download(response, SysUserExportVo.class, "系统用户");
}
/**
* 导入系统用户
* @param file 模版文件
*/
@Transactional
@SaCheckPermission("system:user:import")
@PostMapping("/import")
public R<Boolean> imports(@RequestParam("file") MultipartFile file) throws Exception {
Set<SysUserExportVo> list= ExcelUtil.imports(file, SysUserExportVo.class);
Boolean state= baseService.imports(list);
return R.ok(state,state?"数据导入成功!":"数据导入失败!");
}
步骤三:前端使用
- TableImport组件语法
参数 | 描述 | 示例 |
---|---|---|
ref | ref组件对象 | tableImportRef |
model-name | 模块名称 | 系统用户 |
model | 模块父级路由 | user |
:key | 组件key强制刷新 | |
:param | 搜索参数 | |
@close | 组件关闭事件 | |
@insert | 新增功能 |
html
<!-- 新增/导入/导出/打印 -->
<TableImport
ref="tableImportRef"
model-name="系统用户"
model="user"
:key="componentKey"
:param="state.tableData.param"
@close="componentKey = generateUUID()"
@insert="onOpenInsert"
/>
ts
<script setup lang="ts" name="systemUser">
//随机数
import { generateUUID } from "/@/utils/tool";
//Table 工具组件
const TableImport = defineAsyncComponent(() => import("/@/components/table-import/index.vue"));
// Table绑定对象
const tableImportRef = ref();
// 组件Key
const componentKey = ref(generateUUID());
// 参数
const state = reactive<SysUserState>({
tableData: {
data: [],
total: 0,
loading: false,
param: {
pageNum: 1,
pageSize: 10,
userName: "",
},
}
});
// 监听打开新增事件
const onOpenInsert = (type: string) => {
//新增 Dialog 页面
userDialogRef.value.openDialog(type);
};
</script>
模版下载
- 导入数据,需要按照系统提供的模版文件进行填充数据才能进行数据匹配
导入操作
- 下载模版
- 填写数据后进行上传即可
- 导入功能支持 "系统字典" 的逆翻译,
例如
性别:男-> 1 、状态: 正常-> 0 等。
- 导入操作未进行数据的核验,目前只做了数据的解析,具体拿到数据的操作业务,可以自己完善 imports 。