router.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import express from 'express';
  2. import multer from 'multer';
  3. import * as XLSX from 'xlsx';
  4. const router = express.Router();
  5. const upload = multer({ storage: multer.memoryStorage() });
  6. // 批量导入接口
  7. router.post('/import', upload.single('file'), (req: any, res: any) => {
  8. try {
  9. if (!req.file) {
  10. return res.status(400).json({ code: 400, message: 'No file uploaded' });
  11. }
  12. // 读取 Excel 文件
  13. const workbook = XLSX.read(req.file.buffer, { type: 'buffer' });
  14. // 获取第一个工作表
  15. const sheetName = workbook.SheetNames[0];
  16. const worksheet = workbook.Sheets[sheetName];
  17. // 转换为 JSON
  18. const jsonData = XLSX.utils.sheet_to_json(worksheet);
  19. res.json({
  20. code: 200,
  21. message: 'Import successful',
  22. data: jsonData,
  23. count: jsonData.length
  24. });
  25. } catch (error: any) {
  26. console.error('Import error:', error);
  27. res.status(500).json({ code: 500, message: 'Import failed', error: error.message });
  28. }
  29. });
  30. // 批量导出接口
  31. router.get('/export', (req: any, res: any) => {
  32. try {
  33. // 模拟数据 (实际应从数据库获取)
  34. const data = [
  35. { id: 1, name: 'Alice', email: 'alice@example.com', role: 'admin' },
  36. { id: 2, name: 'Bob', email: 'bob@example.com', role: 'user' },
  37. { id: 3, name: 'Charlie', email: 'charlie@example.com', role: 'user' }
  38. ];
  39. // 创建工作簿和工作表
  40. const workbook = XLSX.utils.book_new();
  41. const worksheet = XLSX.utils.json_to_sheet(data);
  42. // 将工作表添加到工作簿
  43. XLSX.utils.book_append_sheet(workbook, worksheet, 'Users');
  44. // 生成 Buffer
  45. const buffer = XLSX.write(workbook, { type: 'buffer', bookType: 'xlsx' });
  46. // 设置响应头
  47. res.setHeader('Content-Disposition', 'attachment; filename="export.xlsx"');
  48. res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  49. // 发送文件
  50. res.send(buffer);
  51. } catch (error: any) {
  52. console.error('Export error:', error);
  53. res.status(500).json({ code: 500, message: 'Export failed', error: error.message });
  54. }
  55. });
  56. export default router;