import express from 'express'; import multer from 'multer'; import * as XLSX from 'xlsx'; const router = express.Router(); const upload = multer({ storage: multer.memoryStorage() }); // 批量导入接口 router.post('/import', upload.single('file'), (req: any, res: any) => { try { if (!req.file) { return res.status(400).json({ code: 400, message: 'No file uploaded' }); } // 读取 Excel 文件 const workbook = XLSX.read(req.file.buffer, { type: 'buffer' }); // 获取第一个工作表 const sheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[sheetName]; // 转换为 JSON const jsonData = XLSX.utils.sheet_to_json(worksheet); res.json({ code: 200, message: 'Import successful', data: jsonData, count: jsonData.length }); } catch (error: any) { console.error('Import error:', error); res.status(500).json({ code: 500, message: 'Import failed', error: error.message }); } }); // 批量导出接口 router.get('/export', (req: any, res: any) => { try { // 模拟数据 (实际应从数据库获取) const data = [ { id: 1, name: 'Alice', email: 'alice@example.com', role: 'admin' }, { id: 2, name: 'Bob', email: 'bob@example.com', role: 'user' }, { id: 3, name: 'Charlie', email: 'charlie@example.com', role: 'user' } ]; // 创建工作簿和工作表 const workbook = XLSX.utils.book_new(); const worksheet = XLSX.utils.json_to_sheet(data); // 将工作表添加到工作簿 XLSX.utils.book_append_sheet(workbook, worksheet, 'Users'); // 生成 Buffer const buffer = XLSX.write(workbook, { type: 'buffer', bookType: 'xlsx' }); // 设置响应头 res.setHeader('Content-Disposition', 'attachment; filename="export.xlsx"'); res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); // 发送文件 res.send(buffer); } catch (error: any) { console.error('Export error:', error); res.status(500).json({ code: 500, message: 'Export failed', error: error.message }); } }); export default router;