Files
api-debug/server/routes/settings.js
jason 96bdc292bb Initial commit: API Debug Tool
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 04:32:35 +08:00

72 lines
2.5 KiB
JavaScript

const express = require('express');
const router = express.Router();
const db = require('../db');
const auth = require('../middleware/auth');
router.use(auth);
const DEFAULT_CATEGORIES = ['旗舰版PP', '旗舰版ATS', '标品ATS', '标品PP', '国际版ATS'];
const DEFAULT_MODULES = ['组织接口', '职位职务接口', '人事接口', '假勤接口', '薪酬接口', '绩效接口', '自定义分组接口', 'BI 报表接口'];
async function getSetting(key, defaults) {
const [[row]] = await db.query('SELECT value FROM settings WHERE `key` = ?', [key]);
if (!row) return defaults;
try {
const extra = JSON.parse(row.value);
// 合并:默认值在前,自定义值去重追加
return [...defaults, ...extra.filter(v => !defaults.includes(v))];
} catch { return defaults; }
}
// 获取所有设置
router.get('/', async (req, res) => {
try {
const [categories, modules] = await Promise.all([
getSetting('categories', DEFAULT_CATEGORIES),
getSetting('modules', DEFAULT_MODULES),
]);
res.json({
categories,
modules,
defaultCategories: DEFAULT_CATEGORIES,
defaultModules: DEFAULT_MODULES,
});
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// 更新分类(仅保存自定义项,默认项不入库)
router.put('/categories', async (req, res) => {
try {
const { items } = req.body; // 完整列表(含默认+自定义)
const extra = items.filter(v => !DEFAULT_CATEGORIES.includes(v));
await db.query(
'INSERT INTO settings (`key`, value) VALUES (?, ?) ON DUPLICATE KEY UPDATE value = ?',
['categories', JSON.stringify(extra), JSON.stringify(extra)]
);
res.json({ message: 'OK' });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// 更新业务模块
router.put('/modules', async (req, res) => {
try {
const { items } = req.body;
const extra = items.filter(v => !DEFAULT_MODULES.includes(v));
await db.query(
'INSERT INTO settings (`key`, value) VALUES (?, ?) ON DUPLICATE KEY UPDATE value = ?',
['modules', JSON.stringify(extra), JSON.stringify(extra)]
);
res.json({ message: 'OK' });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
module.exports = router;
module.exports.DEFAULT_CATEGORIES = DEFAULT_CATEGORIES;
module.exports.DEFAULT_MODULES = DEFAULT_MODULES;