const express = require('express'); const db = require('../db-sqlite'); const { authenticate } = require('../middleware/auth'); module.exports = function(app) { const router = express.Router(); router.get('/', authenticate, async (req, res) => { try { const { status } = req.query; let query = 'SELECT id, user_id, project_id, amount, description, status, created_at, updated_at FROM advances'; const params = []; if (status) { query += ' WHERE status = ?'; params.push(status); } query += ' ORDER BY created_at DESC'; const advancesResult = await db.query(query, params); const advances = advancesResult.rows; res.json({ success: true, data: advances, count: advances.length }); } catch (error) { console.error('获取预支款列表失败:', error); res.status(500).json({ success: false, message: '获取预支款列表失败' }); } }); router.get('/:id', authenticate, async (req, res) => { try { const { id } = req.params; const advanceResult = await db.query('SELECT id, user_id, project_id, amount, description, status, created_at, updated_at FROM advances WHERE id = ?', [id]); if (advanceResult.rows.length === 0) { return res.status(404).json({ success: false, message: '预支款不存在' }); } const advance = advanceResult.rows[0]; res.json({ success: true, data: advance }); } catch (error) { console.error('获取预支款详情失败:', error); res.status(500).json({ success: false, message: '获取预支款详情失败' }); } }); router.post('/', authenticate, async (req, res) => { try { const { user_id, project_id, amount, description } = req.body; if (!user_id || !project_id || !amount) { return res.status(400).json({ success: false, message: '用户ID、项目ID和金额为必填项' }); } const result = await db.query( 'INSERT INTO advances (user_id, project_id, amount, description, status, created_at, updated_at) VALUES (?, ?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)', [user_id, project_id, amount, description || '', 'pending'] ); const newAdvanceResult = await db.query('SELECT id, user_id, project_id, amount, description, status, created_at, updated_at FROM advances WHERE id = ?', [result.lastID]); const newAdvance = newAdvanceResult.rows[0]; console.log(`预支款创建成功,由 ${req.user.username} 操作`); res.json({ success: true, data: newAdvance }); } catch (error) { console.error('创建预支款失败:', error); res.status(500).json({ success: false, message: '创建预支款失败' }); } }); router.put('/:id', authenticate, async (req, res) => { try { const { id } = req.params; const { amount, description } = req.body; await db.query( 'UPDATE advances SET amount = ?, description = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?', [amount, description, id] ); const updatedAdvanceResult = await db.query('SELECT id, user_id, project_id, amount, description, status, created_at, updated_at FROM advances WHERE id = ?', [id]); const updatedAdvance = updatedAdvanceResult.rows[0]; res.json({ success: true, data: updatedAdvance }); } catch (error) { console.error('更新预支款信息失败:', error); res.status(500).json({ success: false, message: '更新预支款信息失败' }); } }); router.delete('/:id', authenticate, async (req, res) => { try { const { id } = req.params; const existingAdvance = await db.query('SELECT id FROM advances WHERE id = ?', [id]); if (existingAdvance.rows.length === 0) { return res.status(404).json({ success: false, message: '预支款不存在' }); } await db.query('DELETE FROM advances WHERE id = ?', [id]); res.json({ success: true, message: '预支款删除成功' }); } catch (error) { console.error('删除预支款失败:', error); res.status(500).json({ success: false, message: '删除预支款失败' }); } }); router.post('/:id/submit', authenticate, async (req, res) => { try { const { id } = req.params; await db.query( 'UPDATE advances SET status = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?', ['submitted', id] ); const updatedAdvanceResult = await db.query('SELECT id, user_id, project_id, amount, description, status, created_at, updated_at FROM advances WHERE id = ?', [id]); const updatedAdvance = updatedAdvanceResult.rows[0]; console.log(`预支款 ${id} 提交成功,由 ${req.user.username} 操作`); res.json({ success: true, data: updatedAdvance }); } catch (error) { console.error('提交预支款失败:', error); res.status(500).json({ success: false, message: '提交预支款失败' }); } }); router.post('/:id/withdraw', authenticate, async (req, res) => { try { const { id } = req.params; await db.query( 'UPDATE advances SET status = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?', ['pending', id] ); const updatedAdvanceResult = await db.query('SELECT id, user_id, project_id, amount, description, status, created_at, updated_at FROM advances WHERE id = ?', [id]); const updatedAdvance = updatedAdvanceResult.rows[0]; console.log(`预支款 ${id} 撤回成功,由 ${req.user.username} 操作`); res.json({ success: true, data: { updatedAdvance, message: '预支款已撤回' } }); } catch (error) { console.error('撤回预支款失败:', error); res.status(500).json({ success: false, message: '撤回预支款失败' }); } }); router.post('/:id/approve', authenticate, async (req, res) => { try { const { id } = req.params; await db.query( 'UPDATE advances SET status = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?', ['approved', id] ); const updatedAdvanceResult = await db.query('SELECT id, user_id, project_id, amount, description, status, created_at, updated_at FROM advances WHERE id = ?', [id]); const updatedAdvance = updatedAdvanceResult.rows[0]; console.log(`预支款 ${id} 审批通过成功,由 ${req.user.username} 操作`); res.json({ success: true, data: updatedAdvance }); } catch (error) { console.error('审批通过预支款失败:', error); res.status(500).json({ success: false, message: '审批通过预支款失败' }); } }); router.post('/:id/reject', authenticate, async (req, res) => { try { const { id } = req.params; await db.query( 'UPDATE advances SET status = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?', ['rejected', id] ); const updatedAdvanceResult = await db.query('SELECT id, user_id, project_id, amount, description, status, created_at, updated_at FROM advances WHERE id = ?', [id]); const updatedAdvance = updatedAdvanceResult.rows[0]; console.log(`预支款 ${id} 审批拒绝成功,由 ${req.user.username} 操作`); res.json({ success: true, data: updatedAdvance }); } catch (error) { console.error('审批拒绝预支款失败:', error); res.status(500).json({ success: false, message: '审批拒绝预支款失败' }); } }); app.use('/api/advances', router); };