Files
nxxmdata/backend/routes/system.js
2025-09-12 20:08:42 +08:00

431 lines
11 KiB
JavaScript

/**
* 系统管理路由
* @file system.js
* @description 处理系统配置和菜单权限管理请求
*/
const express = require('express');
const { body } = require('express-validator');
const { verifyToken, checkRole } = require('../middleware/auth');
const systemController = require('../controllers/systemController');
const router = express.Router();
/**
* @swagger
* tags:
* name: System
* description: 系统管理相关接口
*/
/**
* @swagger
* /api/system/configs:
* get:
* summary: 获取系统配置列表
* tags: [System]
* security:
* - bearerAuth: []
* parameters:
* - in: query
* name: category
* schema:
* type: string
* description: 配置分类
* - in: query
* name: is_public
* schema:
* type: boolean
* description: 是否公开配置
* responses:
* 200:
* description: 获取成功
* 401:
* description: 未授权
* 403:
* description: 权限不足
*/
router.get('/configs', verifyToken, checkRole(['admin']), systemController.getSystemConfigs);
/**
* @swagger
* /api/system/configs/public:
* get:
* summary: 获取公开系统配置
* tags: [System]
* security:
* - bearerAuth: []
* responses:
* 200:
* description: 获取成功
*/
router.get('/configs/public', verifyToken, systemController.getPublicConfigs);
/**
* @swagger
* /api/system/configs/categories:
* get:
* summary: 获取配置分类列表
* tags: [System]
* security:
* - bearerAuth: []
* responses:
* 200:
* description: 获取成功
*/
router.get('/configs/categories', verifyToken, checkRole(['admin']), systemController.getConfigCategories);
/**
* @swagger
* /api/system/configs:
* post:
* summary: 创建系统配置
* tags: [System]
* security:
* - bearerAuth: []
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* required:
* - config_key
* - config_value
* properties:
* config_key:
* type: string
* description: 配置键名
* config_value:
* description: 配置值
* category:
* type: string
* description: 配置分类
* description:
* type: string
* description: 配置描述
* is_public:
* type: boolean
* description: 是否公开
* is_editable:
* type: boolean
* description: 是否可编辑
* sort_order:
* type: integer
* description: 排序顺序
* responses:
* 201:
* description: 创建成功
* 400:
* description: 参数错误
* 401:
* description: 未授权
* 403:
* description: 权限不足
*/
router.post('/configs',
verifyToken,
checkRole(['admin']),
[
body('config_key').notEmpty().withMessage('配置键名不能为空'),
body('config_value').exists().withMessage('配置值不能为空')
],
systemController.createSystemConfig
);
/**
* @swagger
* /api/system/configs/{id}:
* put:
* summary: 更新系统配置
* tags: [System]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: 配置ID
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* config_value:
* description: 配置值
* description:
* type: string
* description: 配置描述
* responses:
* 200:
* description: 更新成功
* 400:
* description: 参数错误
* 401:
* description: 未授权
* 403:
* description: 权限不足
* 404:
* description: 配置不存在
*/
router.put('/configs/:id',
verifyToken,
checkRole(['admin']),
[
body('config_value').exists().withMessage('配置值不能为空')
],
systemController.updateSystemConfig
);
/**
* @swagger
* /api/system/configs/{id}:
* delete:
* summary: 删除系统配置
* tags: [System]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: 配置ID
* responses:
* 200:
* description: 删除成功
* 401:
* description: 未授权
* 403:
* description: 权限不足
* 404:
* description: 配置不存在
*/
router.delete('/configs/:id', verifyToken, checkRole(['admin']), systemController.deleteSystemConfig);
/**
* @swagger
* /api/system/configs/batch:
* put:
* summary: 批量更新系统配置
* tags: [System]
* security:
* - bearerAuth: []
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* required:
* - configs
* properties:
* configs:
* type: array
* items:
* type: object
* properties:
* config_key:
* type: string
* config_value:
* description: 配置值
* responses:
* 200:
* description: 更新成功
* 400:
* description: 参数错误
* 401:
* description: 未授权
* 403:
* description: 权限不足
*/
router.put('/configs/batch',
verifyToken,
checkRole(['admin']),
[
body('configs').isArray().withMessage('configs必须是数组')
],
systemController.batchUpdateConfigs
);
/**
* @swagger
* /api/system/configs/{id}/reset:
* post:
* summary: 重置系统配置到默认值
* tags: [System]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: 配置ID
* responses:
* 200:
* description: 重置成功
* 401:
* description: 未授权
* 403:
* description: 权限不足
* 404:
* description: 配置不存在
*/
router.post('/configs/:id/reset', verifyToken, checkRole(['admin']), systemController.resetSystemConfig);
/**
* @swagger
* /api/system/menus:
* get:
* summary: 获取菜单权限列表
* tags: [System]
* security:
* - bearerAuth: []
* responses:
* 200:
* description: 获取成功
* 401:
* description: 未授权
* 403:
* description: 权限不足
*/
router.get('/menus', verifyToken, checkRole(['admin']), systemController.getMenuPermissions);
/**
* @swagger
* /api/system/menus/user:
* get:
* summary: 获取用户可访问菜单
* tags: [System]
* security:
* - bearerAuth: []
* responses:
* 200:
* description: 获取成功
* 401:
* description: 未授权
* 404:
* description: 用户不存在
*/
router.get('/menus/user', verifyToken, systemController.getUserMenus);
/**
* @swagger
* /api/system/menus/{id}:
* put:
* summary: 更新菜单权限
* tags: [System]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: 菜单ID
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* menu_name:
* type: string
* description: 菜单名称
* menu_path:
* type: string
* description: 菜单路径
* required_roles:
* type: array
* items:
* type: string
* description: 所需角色
* required_permissions:
* type: array
* items:
* type: string
* description: 所需权限
* icon:
* type: string
* description: 菜单图标
* sort_order:
* type: integer
* description: 排序顺序
* is_visible:
* type: boolean
* description: 是否可见
* is_enabled:
* type: boolean
* description: 是否启用
* description:
* type: string
* description: 菜单描述
* responses:
* 200:
* description: 更新成功
* 400:
* description: 参数错误
* 401:
* description: 未授权
* 403:
* description: 权限不足
* 404:
* description: 菜单不存在
*/
router.put('/menus/:id',
verifyToken,
checkRole(['admin']),
[
body('menu_name').optional().notEmpty().withMessage('菜单名称不能为空'),
body('required_roles').optional().isArray().withMessage('所需角色必须是数组'),
body('required_permissions').optional().isArray().withMessage('所需权限必须是数组')
],
systemController.updateMenuPermission
);
/**
* @swagger
* /api/system/stats:
* get:
* summary: 获取系统统计信息
* tags: [System]
* security:
* - bearerAuth: []
* responses:
* 200:
* description: 获取成功
* 401:
* description: 未授权
* 403:
* description: 权限不足
*/
router.get('/stats', verifyToken, checkRole(['admin']), systemController.getSystemStats);
/**
* @swagger
* /api/system/init:
* post:
* summary: 初始化系统配置
* tags: [System]
* security:
* - bearerAuth: []
* responses:
* 200:
* description: 初始化成功
* 401:
* description: 未授权
* 403:
* description: 权限不足
*/
router.post('/init', verifyToken, checkRole(['admin']), systemController.initializeSystem);
module.exports = router;