// 采购相关路由 const express = require('express'); const { authMiddleware } = require('../middleware/auth'); const db = require('../db'); const router = express.Router(); router.get('/rooms/:roomId/purchases', authMiddleware, (req, res) => { const purchases = db.prepare('SELECT * FROM purchases WHERE room_id = ? ORDER BY created_at DESC').all(req.params.roomId); res.json(purchases); }); router.get('/purchases/:id', authMiddleware, (req, res) => { const pur = db.prepare('SELECT * FROM purchases WHERE id = ?').get(req.params.id); if (!pur) return res.status(404).json({ error: '未找到' }); const history = db.prepare('SELECT * FROM purchase_history WHERE purchase_id = ? ORDER BY id ASC').all(req.params.id); const attachments = db.prepare('SELECT * FROM purchase_attachments WHERE purchase_id = ?').all(req.params.id); res.json({ ...pur, history, attachments }); }); router.get('/summary', authMiddleware, (req, res) => { const username = req.user.username; const isAdmin = req.user.isAdmin; let rooms; if (isAdmin) { rooms = db.prepare('SELECT id, name FROM rooms').all(); } else { rooms = db.prepare("SELECT id, name FROM rooms WHERE white_list = '' OR (',' || white_list || ',' LIKE ?)").all(`%,${username},%`); } const summary = rooms.map(room => { const stats = db.prepare('SELECT COUNT(*) as count, SUM(amount) as total FROM purchases WHERE room_id = ?').get(room.id); return { room_id: room.id, room_name: room.name, purchase_count: stats.count || 0, total_amount: stats.total || 0 }; }); res.json(summary); }); router.get('/rooms/:roomId/purchases/export', authMiddleware, (req, res) => { const purchases = db.prepare('SELECT * FROM purchases WHERE room_id = ?').all(req.params.roomId); let csv = '时间,事项,数量,单价,金额,邮费,付款方式,发票类型,状态,申请人,备注\n'; purchases.forEach(p => { csv += `${p.created_at},"${p.item||''}",${p.quantity},${p.unit_price},${p.amount},${p.freight},"${p.payment_method||''}","${p.invoice_type||''}","${p.status}","${p.applicant}","${p.remarks||''}"\n`; }); res.setHeader('Content-Type', 'text/csv; charset=utf-8'); res.setHeader('Content-Disposition', `attachment; filename="purchases-${req.params.roomId}.csv"`); res.send('\uFEFF' + csv); }); module.exports = router;