📁 項目結構簡述
ruoyi-flowable-plus
是基于 RuoYi 的擴展項目,使用:
- 后端:Spring Boot + MyBatis + Flowable
- 前端:Vue.js
📥 Excel 導入功能 Demo
以導入用戶數據為例,展示完整導入流程。
? 后端實現(Java)
1. Maven 依賴(pom.xml)
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version>
</dependency>
2. 控制器層(UserController.java)
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@PostMapping("/import")public AjaxResult importUser(@RequestParam("file") MultipartFile file) {try {List<User> userList = userService.importExcel(file.getInputStream());return AjaxResult.success("導入成功", userService.saveBatch(userList));} catch (Exception e) {return AjaxResult.error("導入失敗:" + e.getMessage());}}
}
3. 服務層(UserService.java)
@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public List<User> importExcel(InputStream inputStream) throws Exception {Workbook workbook = new XSSFWorkbook(inputStream);Sheet sheet = workbook.getSheetAt(0);List<User> list = new ArrayList<>();for (int i = 1; i <= sheet.getLastRowNum(); i++) {Row row = sheet.getRow(i);User user = new User();user.setUserName(getCellValue(row, 0));user.setNickName(getCellValue(row, 1));user.setEmail(getCellValue(row, 2));user.setPassword(getCellValue(row, 3));list.add(user);}return list;}private String getCellValue(Row row, int cellIndex) {Cell cell = row.getCell(cellIndex);if (cell == null) return "";return cell.toString();}public boolean saveBatch(List<User> list) {return userMapper.insertBatch(list) > 0;}
}
4. Mapper 層(UserMapper.java)
public interface UserMapper {int insertBatch(@Param("list") List<User> list);
}
5. Mapper XML(UserMapper.xml)
<insert id="insertBatch">INSERT INTO sys_user (user_name, nick_name, email, password)VALUES<foreach collection="list" item="item" separator=",">(#{item.userName}, #{item.nickName}, #{item.email}, #{item.password})</foreach>
</insert>
? 前端實現(Vue.js)
1. 頁面組件(user/import.vue)
<template><div><el-uploadaction="/api/user/import":headers="headers":on-success="handleSuccess":on-error="handleError":limit="1"accept=".xlsx,.xls"><el-button type="primary">導入Excel</el-button></el-upload></div>
</template><script>
export default {data() {return {headers: {Authorization: 'Bearer ' + this.$store.getters.token}};},methods: {handleSuccess(response) {this.$message.success("導入成功");console.log(response);},handleError(error) {this.$message.error("導入失敗:" + error.message);}}
};
</script>
🧪 示例 Excel 表格格式
用戶名 | 昵稱 | 郵箱 | 密碼 |
---|---|---|---|
admin | 管理員 | admin@example.com | 123456 |
user1 | 用戶1 | user1@example.com | 123456 |
? 總結
模塊 | 內容 |
---|---|
后端技術 | Spring Boot + MyBatis + Apache POI |
前端技術 | Vue + Element UI |
核心功能 | Excel 數據導入數據庫 |
示例實體 | User 對象 |
示例接口 | /user/import |
提示:如需集成到其他模塊(如部門、崗位、流程等),可復用此結構,僅需替換實體類和Mapper。