Files
gamer/server/routes/records.js
T
lizhilunandClaude Opus 4.6 9126348d1b fix: 修复分页和缓存相关bug
- 前端: 移除无限滚动,改为一次性加载全部数据
- 前端: monthly-records接口添加limit=1000参数
- 前端: 修复edit-modal.js中loadListData调用参数
- 后端: 修复stats.js中getCached函数Promise处理
- 后端: 修复records.js各接口正确传递limit参数
- 后端: 修复partner-records SQL参数数量问题
- 统一版本号强制浏览器刷新缓存

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 22:12:11 +08:00

136 lines
4.6 KiB
JavaScript

const express = require('express');
const db = require('../db');
const { getMonthRange } = require('../utils/helpers');
const router = express.Router();
// 新增记录
router.post('/', (req, res) => {
const { type, category, amount, quantity, unit_price, rebate, boss, partner, source, destination, note, created_at } = req.body;
const stmt = db.prepare(`
INSERT INTO records (user_id, type, category, amount, quantity, unit_price, rebate, boss, partner, source, destination, note, created_at)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
`);
const result = stmt.run(req.user.id, type, category, amount, quantity || null, unit_price || null, rebate || null, boss || null, partner || null, source || null, destination || null, note || null, created_at || new Date().toISOString());
res.json({ id: result.lastInsertRowid });
});
// 通用分页查询函数
function queryPagedRecords(userId, year, month, options) {
const { page = 1, limit = 20 } = options;
const offset = (Number(page) - 1) * Number(limit);
const { startDate, endDate } = getMonthRange(year, month);
let whereClause = `user_id = ? AND DATE(created_at, 'localtime') >= ? AND DATE(created_at, 'localtime') < ?`;
const params = [userId, startDate, endDate];
if (options.category) {
whereClause += ` AND category = ?`;
params.push(options.category);
}
if (options.type) {
whereClause += ` AND type = ?`;
params.push(options.type);
}
if (options.excludeCategories && options.excludeCategories.length > 0) {
whereClause += ` AND category NOT IN (${options.excludeCategories.map(() => '?').join(',')})`;
params.push(...options.excludeCategories);
}
const total = db.prepare(
`SELECT COUNT(*) as count FROM records WHERE ${whereClause}`
).get(...params).count;
const records = db.prepare(
`SELECT * FROM records WHERE ${whereClause} ORDER BY created_at DESC LIMIT ? OFFSET ?`
).all(...params, Number(limit), offset);
return { records, total, page: Number(page), limit: Number(limit) };
}
// 接单列表
router.get('/orders', (req, res) => {
const result = queryPagedRecords(req.user.id, req.query.year, req.query.month, {
category: '接单',
page: req.query.page,
limit: req.query.limit
});
res.json(result);
});
// 红包及其他收入列表
router.get('/other-income', (req, res) => {
const result = queryPagedRecords(req.user.id, req.query.year, req.query.month, {
type: 'income',
excludeCategories: ['接单', '派单'],
page: req.query.page,
limit: req.query.limit
});
res.json(result);
});
// 红包收入列表
router.get('/red-envelope', (req, res) => {
const result = queryPagedRecords(req.user.id, req.query.year, req.query.month, {
type: 'income',
category: '红包收入',
page: req.query.page,
limit: req.query.limit
});
res.json(result);
});
// 奶茶收入列表
router.get('/milk-tea', (req, res) => {
const result = queryPagedRecords(req.user.id, req.query.year, req.query.month, {
type: 'income',
category: '奶茶',
page: req.query.page,
limit: req.query.limit
});
res.json(result);
});
// 派单列表
router.get('/dispatches', (req, res) => {
const result = queryPagedRecords(req.user.id, req.query.year, req.query.month, {
category: '派单',
page: req.query.page,
limit: req.query.limit
});
res.json(result);
});
// 获取记录列表
router.get('/', (req, res) => {
const { type, page = 1, limit = 20 } = req.query;
const offset = (page - 1) * limit;
let sql = 'SELECT * FROM records WHERE user_id = ?';
const params = [req.user.id];
if (type) {
sql += ' AND type = ?';
params.push(type);
}
sql += ' ORDER BY created_at DESC LIMIT ? OFFSET ?';
params.push(Number(limit), Number(offset));
res.json(db.prepare(sql).all(...params));
});
// 更新记录
router.put('/:id', (req, res) => {
const { quantity, unit_price, rebate, amount, boss, partner, source, destination, note, created_at } = req.body;
db.prepare(`
UPDATE records SET quantity = ?, unit_price = ?, rebate = ?, amount = ?, boss = ?, partner = ?, source = ?, destination = ?, note = ?, created_at = ?
WHERE id = ? AND user_id = ?
`).run(quantity || null, unit_price || null, rebate || null, amount, boss || null, partner || null, source || null, destination || null, note || null, created_at || null, req.params.id, req.user.id);
res.json({ success: true });
});
// 删除记录
router.delete('/:id', (req, res) => {
db.prepare('DELETE FROM records WHERE id = ? AND user_id = ?').run(req.params.id, req.user.id);
res.json({ success: true });
});
module.exports = router;