feat: MC Report System - MySQL + Express + Vanilla JS SPA
This commit is contained in:
46
backend/routes/settings.js
Normal file
46
backend/routes/settings.js
Normal file
@@ -0,0 +1,46 @@
|
||||
const express = require('express');
|
||||
const { query, getRow } = require('../db');
|
||||
const { authenticate, requireRole } = require('../middleware/auth');
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
router.get('/email-templates', authenticate, requireRole('owner','admin'), async (req, res) => {
|
||||
res.json(await query('SELECT * FROM email_templates ORDER BY id'));
|
||||
});
|
||||
|
||||
router.get('/email-templates/:code', authenticate, requireRole('owner','admin'), async (req, res) => {
|
||||
const t = await getRow('SELECT * FROM email_templates WHERE code = ?', [req.params.code]);
|
||||
if (!t) return res.status(404).json({ error: '模板不存在' });
|
||||
res.json(t);
|
||||
});
|
||||
|
||||
router.put('/email-templates/:code', authenticate, requireRole('owner','admin'), async (req, res) => {
|
||||
const { subject, body } = req.body;
|
||||
if (!subject||!body) return res.status(400).json({ error: '标题和内容不能为空' });
|
||||
const t = await getRow('SELECT * FROM email_templates WHERE code = ?', [req.params.code]);
|
||||
if (!t) return res.status(404).json({ error: '模板不存在' });
|
||||
await query('UPDATE email_templates SET subject = ?, body = ? WHERE code = ?', [subject, body, req.params.code]);
|
||||
await query("INSERT INTO audit_logs(user_id, username, action, entity_type, entity_id, details) VALUES (?,?,?,?,?,?)", [req.user.id, req.user.username, 'update_email_template', 'email_template', t.id, `更新模板: ${t.name}`]);
|
||||
res.json({ message: '模板更新成功' });
|
||||
});
|
||||
|
||||
router.get('/settings', authenticate, requireRole('owner','admin'), async (req, res) => {
|
||||
const rows = await query('SELECT k, v, label FROM settings ORDER BY k');
|
||||
const map = {};
|
||||
for (const r of rows) map[r.k] = { value: r.v, label: r.label };
|
||||
res.json(map);
|
||||
});
|
||||
|
||||
router.put('/settings', authenticate, requireRole('owner','admin'), async (req, res) => {
|
||||
const updates = req.body;
|
||||
if (!updates||typeof updates!=='object') return res.status(400).json({ error: '无效数据' });
|
||||
for (const [key, val] of Object.entries(updates)) {
|
||||
const v = typeof val === 'object' ? val.value : String(val);
|
||||
const l = typeof val === 'object' ? val.label : null;
|
||||
await query("INSERT INTO settings(k, v, label) VALUES (?,?,?) ON DUPLICATE KEY UPDATE v = VALUES(v)", [key, v, l]);
|
||||
}
|
||||
await query("INSERT INTO audit_logs(user_id, username, action, entity_type, entity_id, details) VALUES (?,?,?,?,?,?)", [req.user.id, req.user.username, 'update_settings', 'settings', 0, '更新系统设置']);
|
||||
res.json({ message: '设置已保存' });
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user