| 
									
										
										
										
											2025-10-10 17:30:49 +08:00
										 |  |  | const express = require('express'); | 
					
						
							|  |  |  | const { getDB } = require('../database'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const router = express.Router(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | router.get('/', async (req, res) => { | 
					
						
							|  |  |  |   try { | 
					
						
							|  |  |  |     const { page = 1, limit = 10, search = '' } = req.query; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // 确保参数为有效数字
 | 
					
						
							|  |  |  |     const pageNum = Math.max(1, parseInt(page) || 1); | 
					
						
							|  |  |  |     const limitNum = Math.max(1, Math.min(100, parseInt(limit) || 10)); // 限制最大100条
 | 
					
						
							|  |  |  |     const offset = Math.max(0, (pageNum - 1) * limitNum); | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     console.log('分页参数:', { pageNum, limitNum, offset, search }); | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     let whereClause = 'WHERE 1=1'; | 
					
						
							|  |  |  |     const params = []; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     if (search) { | 
					
						
							| 
									
										
										
										
											2025-10-14 16:27:00 +08:00
										 |  |  |       whereClause += ' AND amount LIKE ?'; | 
					
						
							| 
									
										
										
										
											2025-10-10 17:30:49 +08:00
										 |  |  |       params.push(`%${search}%`); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // 获取总数
 | 
					
						
							|  |  |  |     const countQuery = `SELECT COUNT(*) as total FROM withdrawal ${whereClause}`; | 
					
						
							|  |  |  |     const [countResult] = await getDB().execute(countQuery, params); | 
					
						
							|  |  |  |     const total = countResult[0].total; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // 获取商品列表
 | 
					
						
							|  |  |  |     const query = `
 | 
					
						
							|  |  |  |       SELECT id, user_id, amount, status, time | 
					
						
							|  |  |  |       FROM withdrawal | 
					
						
							|  |  |  |       ${whereClause} | 
					
						
							|  |  |  |       ORDER BY time DESC | 
					
						
							|  |  |  |       LIMIT ${limitNum} OFFSET ${offset} | 
					
						
							|  |  |  |     `;
 | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // 确保参数数组正确传递
 | 
					
						
							|  |  |  |     const queryParams = [...params]; | 
					
						
							|  |  |  |     console.log('Query params:', queryParams, 'Query:', query); | 
					
						
							|  |  |  |     const [withdrawals] = await getDB().execute(query, queryParams); | 
					
						
							|  |  |  |     res.json({ | 
					
						
							|  |  |  |       success: true, | 
					
						
							|  |  |  |       data: { | 
					
						
							|  |  |  |         withdrawals, | 
					
						
							|  |  |  |         pagination: { | 
					
						
							|  |  |  |           page: pageNum, | 
					
						
							|  |  |  |           limit: limitNum, | 
					
						
							|  |  |  |           total, | 
					
						
							|  |  |  |           pages: Math.ceil(total / limitNum) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } catch (error) { | 
					
						
							|  |  |  |     console.error('获取提现列表失败:', error); | 
					
						
							|  |  |  |     res.status(500).json({ success: false, message: '获取提现列表失败' }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | });//获取记录
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | router.post('/:id/approve', async (req, res) => { | 
					
						
							|  |  |  |   try { | 
					
						
							|  |  |  |     const { id } = req.params; | 
					
						
							|  |  |  |     const query = `
 | 
					
						
							|  |  |  |       UPDATE withdrawal | 
					
						
							|  |  |  |       SET status = 'success' | 
					
						
							|  |  |  |       WHERE id = ? | 
					
						
							|  |  |  |     `;
 | 
					
						
							|  |  |  |     const queryParams = [id]; | 
					
						
							|  |  |  |     const [result] = await getDB().execute(query, queryParams); | 
					
						
							|  |  |  |     if (result.affectedRows === 0) { | 
					
						
							|  |  |  |       return res.status(404).json({ success: false, message: '提现记录不存在' }); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     res.json({ | 
					
						
							|  |  |  |       success: true, | 
					
						
							|  |  |  |       data: { | 
					
						
							|  |  |  |         id, | 
					
						
							|  |  |  |         status: 'success' | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } catch (error) { | 
					
						
							|  |  |  |     console.error('创建提现记录失败:', error); | 
					
						
							|  |  |  |     res.status(500).json({ success: false, message: '创建提现记录失败' }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | });//通过记录
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | router.post('/:id/reject', async (req, res) => { | 
					
						
							|  |  |  |   try { | 
					
						
							|  |  |  |     const { id } = req.params; | 
					
						
							|  |  |  |     const query = `
 | 
					
						
							|  |  |  |       UPDATE withdrawal | 
					
						
							|  |  |  |       SET status = 'canceled' | 
					
						
							|  |  |  |       WHERE id = ? | 
					
						
							|  |  |  |     `;
 | 
					
						
							|  |  |  |     const queryParams = [id]; | 
					
						
							|  |  |  |     const [result] = await getDB().execute(query, queryParams); | 
					
						
							|  |  |  |     if (result.affectedRows === 0) { | 
					
						
							|  |  |  |       return res.status(404).json({ success: false, message: '提现记录不存在' }); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     res.json({ | 
					
						
							|  |  |  |       success: true, | 
					
						
							|  |  |  |       data: { | 
					
						
							|  |  |  |         id, | 
					
						
							|  |  |  |         status: 'canceled' | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } catch (error) { | 
					
						
							|  |  |  |     console.error('创建提现记录失败:', error); | 
					
						
							|  |  |  |     res.status(500).json({ success: false, message: '创建提现记录失败' }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | });//拒绝记录
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | router.post('/', async (req, res) => { | 
					
						
							|  |  |  |   try { | 
					
						
							|  |  |  |     const { userId, amount } = req.body; | 
					
						
							|  |  |  |     if (!userId || !amount) { | 
					
						
							|  |  |  |       return res.status(400).json({ success: false, message: '用户ID和金额是必填项' }); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     const query = `
 | 
					
						
							|  |  |  |       INSERT INTO withdrawal (user_id, amount, status, time) | 
					
						
							|  |  |  |       VALUES (?, ?, ?, NOW()) | 
					
						
							|  |  |  |     `;
 | 
					
						
							|  |  |  |     const queryParams = [userId, amount, 'pending']; | 
					
						
							|  |  |  |     const [result] = await getDB().execute(query, queryParams); | 
					
						
							|  |  |  |     if (result.affectedRows === 0) { | 
					
						
							|  |  |  |       return res.status(404).json({ success: false, message: '提现记录不存在' }); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     res.json({ | 
					
						
							|  |  |  |       success: true, | 
					
						
							|  |  |  |       data: { | 
					
						
							|  |  |  |         id: result.insertId, | 
					
						
							|  |  |  |         user_id: userId, | 
					
						
							|  |  |  |         amount, | 
					
						
							|  |  |  |         status: 'pending' | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } catch (error) { | 
					
						
							|  |  |  |     console.error('更新提现记录失败:', error); | 
					
						
							|  |  |  |     res.status(500).json({ success: false, message: '更新提现记录失败' }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = router; |