Skip to content

导入功能

在本框架中引入了 Easy Excel 依赖(对 Apache POI进行了封装以及扩展),可以对数据进行导出操作(即写 Excel)。

EasyExcel 文档地址

  • @ExcelIgnore 忽略注解
  • @ExcelPropertyExcel导出/导入
  • 语法
参数描述注意事项
value字段描述(可以省略)
converter绑定一个转换器DictExcelConverter:字典转换器

注意

当使用converter时,需要配合@Dict注解一起使用 (告诉转换器需要转换哪个字典)。

  • @Dict 字典绑定
  • 语法
参数描述注意事项
value字段描述(可以省略)

TIP

  • 导出/导入/打印功能前端封装为公共组件table-import
  • 后端的4个接口地址有一定的规范:
    1. 模块名:其中的user可以理解为模块名,用来区分每个Controller的路由
    2. 权限符:system:模块名:import,system:模块名:export,system:模块名:print
    3. 接口路由:/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);
    }
}

导出/导入功能使用流程说明

步骤一:定义导出实体对象

SysUserExportVo

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 ;

步骤二:使用导出方法

SysUserController

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?"数据导入成功!":"数据导入失败!");
    }

步骤三:前端使用

index.vue

  • TableImport组件语法
参数描述示例
refref组件对象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

Released under the MIT License.