Files
accounting/server/routes/categories.js
2026-03-26 01:23:19 +08:00

91 lines
2.4 KiB
JavaScript
Executable File

const express = require('express');
const router = express.Router();
const { getDb } = require('../db');
// 获取所有分类
router.get('/', (req, res) => {
const db = getDb();
const { type } = req.query;
let sql = 'SELECT * FROM categories';
const params = [];
if (type) {
sql += ' WHERE type = ?';
params.push(type);
}
sql += ' ORDER BY sort_order ASC';
const categories = db.all(sql, ...params);
res.json(categories);
});
// 新增分类
router.post('/', (req, res) => {
const db = getDb();
const { name, type = 'expense', icon, sort_order = 0 } = req.body;
if (!name) {
return res.status(400).json({ error: '分类名称不能为空' });
}
try {
const result = db.run(
'INSERT INTO categories (name, type, icon, sort_order) VALUES (?, ?, ?, ?)',
name, type, icon, sort_order
);
const category = db.get('SELECT * FROM categories WHERE id = ?', result.lastInsertRowid);
res.status(201).json(category);
} catch (err) {
if (err.message.includes('UNIQUE')) {
return res.status(400).json({ error: '分类名称已存在' });
}
throw err;
}
});
// 修改分类
router.put('/:id', (req, res) => {
const db = getDb();
const { id } = req.params;
const { name, type, icon, sort_order } = req.body;
const existing = db.get('SELECT * FROM categories WHERE id = ?', parseInt(id));
if (!existing) {
return res.status(404).json({ error: '分类不存在' });
}
db.run(
'UPDATE categories SET name = ?, type = ?, icon = ?, sort_order = ? WHERE id = ?',
name || existing.name,
type || existing.type,
icon !== undefined ? icon : existing.icon,
sort_order !== undefined ? sort_order : existing.sort_order,
parseInt(id)
);
const updated = db.get('SELECT * FROM categories WHERE id = ?', parseInt(id));
res.json(updated);
});
// 删除分类
router.delete('/:id', (req, res) => {
const db = getDb();
const { id } = req.params;
const recordCount = db.get(
'SELECT COUNT(*) as count FROM records WHERE category_id = ?', parseInt(id)
);
if (recordCount.count > 0) {
return res.status(400).json({ error: '该分类下存在记录,无法删除' });
}
const result = db.run('DELETE FROM categories WHERE id = ?', parseInt(id));
if (result.changes === 0) {
return res.status(404).json({ error: '分类不存在' });
}
res.json({ message: '删除成功' });
});
module.exports = router;