72 lines
2.5 KiB
JavaScript
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;
|