chore: initial import

This commit is contained in:
2026-04-19 14:05:40 +08:00
commit 89e9eae36e
81 changed files with 37363 additions and 0 deletions
+73
View File
@@ -0,0 +1,73 @@
const express = require('express');
const router = express.Router();
const db = require('../db');
const { verifyToken, isSystemAdmin } = require('../middleware/auth');
// 获取所有操作说明列表
router.get('/descriptions', verifyToken, isSystemAdmin, async (req, res) => {
try {
const result = await db.query('SELECT DISTINCT description FROM audit_logs WHERE description IS NOT NULL AND description != \'\' ORDER BY description');
res.json(result.rows.map(row => row.description));
} catch (err) {
console.error(err);
res.status(500).json({ message: '服务器错误' });
}
});
// 获取系统日志 (超管 + 维护员)
router.get('/', verifyToken, isSystemAdmin, async (req, res) => {
const { page = 1, limit = 20, username, startDate, endDate, description } = req.query;
const offset = (page - 1) * limit;
let query = 'SELECT * FROM audit_logs WHERE 1=1';
let countQuery = 'SELECT COUNT(*) FROM audit_logs WHERE 1=1';
const params = [];
if (username) {
query += ` AND (username ILIKE $${params.length + 1} OR real_name ILIKE $${params.length + 1})`;
countQuery += ` AND (username ILIKE $${params.length + 1} OR real_name ILIKE $${params.length + 1})`;
params.push(`%${username}%`);
}
if (startDate) {
query += ` AND created_at >= $${params.length + 1}`;
countQuery += ` AND created_at >= $${params.length + 1}`;
params.push(startDate);
}
if (endDate) {
// 结束日期通常需要加一天或者设为当天的 23:59:59,这里假设前端传的是日期字符串
// 简单处理:如果传的是 YYYY-MM-DD,则数据库比较时会自动转为 00:00:00,所以可能需要处理
// 这里假设前端传的是完整时间或者后端直接比较
query += ` AND created_at <= $${params.length + 1}`;
countQuery += ` AND created_at <= $${params.length + 1}`;
params.push(endDate);
}
if (description) {
query += ` AND description = $${params.length + 1}`;
countQuery += ` AND description = $${params.length + 1}`;
params.push(description);
}
query += ` ORDER BY created_at DESC LIMIT $${params.length + 1} OFFSET $${params.length + 2}`;
try {
const countRes = await db.query(countQuery, params);
const total = parseInt(countRes.rows[0].count);
const result = await db.query(query, [...params, limit, offset]);
res.json({
logs: result.rows,
total,
page: parseInt(page),
totalPages: Math.ceil(total / limit)
});
} catch (err) {
console.error(err);
res.status(500).json({ message: '服务器错误' });
}
});
module.exports = router;