1.前言
- 实际使用过程中,CRUD页面需要进行批量信息录入,所以需要一个excel导入的功能
- 可将导入和导出功能进行关联,导出的文件刚好作为导入的模板使用,减少维护量
- 权限管理:需要给导入操作绑定一个权限,前端用来展示隐藏按钮,后端用来进行接口权限验证
- 前端分解:导入 -> 解析 -> 表格展示 -> 确认提交
- 后端:新增导入接口,接收数组数据,进行批量新增,要做好重复验证
2.权限
- 新建CRUD模块菜单时,在自动生成权限环节,需要添加导入权限配置
- 已经存在的菜单可单独配置导入权限
3.前端
- 文件选择功能,按钮根据权限进行展示
- 利用文件域,选择excel文件并解析成JSON数据
- 封装展示组件,以弹窗形式进行表格展示,做好前端分页,表头固定
- 风险告知:页面红字展示数据有覆盖风险
- 表格提交:将事件推送至主页面,在主页面中进行提交
4.后端
- 接收前端的参数,做好数据过滤(白名单字段,特殊值类型转换,例如status的值由字符串转换成数字)
- 对于重复数据,让数据库引擎自动处理,不需要手动编写过滤代码
- 在 MySQL 下,Sequelize 不支持直接跳过重复数据,重复数据只能做更新处理
//忽略冲突行
{ ignoreDuplicates: true }(MySQL 8.0+)
//更新已有记录
{ updateOnDuplicate: ['field1', ...] }
- 数据校验失败,例如空值,结果只有一种,就是报错,无法通过配置的形式跳过,只能提前过滤出有误的数据
//手写非空判断逻辑
if(name == ''){}
//使用模型进行判断(推荐)
- 因数据量庞大,后端不提供准确的操作结果(新增条数,更新条数)