修改管理后台
This commit is contained in:
256
backend/controllers/menuController.js
Normal file
256
backend/controllers/menuController.js
Normal file
@@ -0,0 +1,256 @@
|
||||
/**
|
||||
* 菜单管理控制器
|
||||
* @file menuController.js
|
||||
* @description 处理菜单管理相关的请求
|
||||
*/
|
||||
|
||||
const { MenuPermission, Role } = require('../models');
|
||||
const { Op } = require('sequelize');
|
||||
const logger = require('../utils/logger');
|
||||
|
||||
/**
|
||||
* 获取所有菜单
|
||||
* @param {Object} req - 请求对象
|
||||
* @param {Object} res - 响应对象
|
||||
*/
|
||||
exports.getAllMenus = async (req, res) => {
|
||||
try {
|
||||
const { page = 1, pageSize = 10, search = '' } = req.query;
|
||||
const offset = (page - 1) * pageSize;
|
||||
const limit = parseInt(pageSize);
|
||||
|
||||
// 构建查询条件
|
||||
const whereCondition = {};
|
||||
if (search) {
|
||||
whereCondition[Op.or] = [
|
||||
{ menu_name: { [Op.like]: `%${search}%` } },
|
||||
{ menu_path: { [Op.like]: `%${search}%` } }
|
||||
];
|
||||
}
|
||||
|
||||
const { count, rows } = await MenuPermission.findAndCountAll({
|
||||
where: whereCondition,
|
||||
order: [['sort_order', 'ASC'], ['id', 'ASC']],
|
||||
offset,
|
||||
limit
|
||||
});
|
||||
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
data: {
|
||||
list: rows,
|
||||
pagination: {
|
||||
current: parseInt(page),
|
||||
pageSize: limit,
|
||||
total: count,
|
||||
pages: Math.ceil(count / limit)
|
||||
}
|
||||
},
|
||||
message: '获取菜单列表成功'
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('获取菜单列表失败:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '获取菜单列表失败',
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取菜单详情
|
||||
* @param {Object} req - 请求对象
|
||||
* @param {Object} res - 响应对象
|
||||
*/
|
||||
exports.getMenuById = async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
const menu = await MenuPermission.findByPk(id);
|
||||
|
||||
if (!menu) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
message: '菜单不存在'
|
||||
});
|
||||
}
|
||||
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
data: menu,
|
||||
message: '获取菜单详情成功'
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('获取菜单详情失败:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '获取菜单详情失败',
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 创建菜单
|
||||
* @param {Object} req - 请求对象
|
||||
* @param {Object} res - 响应对象
|
||||
*/
|
||||
exports.createMenu = async (req, res) => {
|
||||
try {
|
||||
const menuData = req.body;
|
||||
const menu = await MenuPermission.create(menuData);
|
||||
|
||||
res.status(201).json({
|
||||
success: true,
|
||||
data: menu,
|
||||
message: '菜单创建成功'
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('创建菜单失败:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '创建菜单失败',
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 更新菜单
|
||||
* @param {Object} req - 请求对象
|
||||
* @param {Object} res - 响应对象
|
||||
*/
|
||||
exports.updateMenu = async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
const updateData = req.body;
|
||||
|
||||
const menu = await MenuPermission.findByPk(id);
|
||||
if (!menu) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
message: '菜单不存在'
|
||||
});
|
||||
}
|
||||
|
||||
await menu.update(updateData);
|
||||
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
data: menu,
|
||||
message: '菜单更新成功'
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('更新菜单失败:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '更新菜单失败',
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除菜单
|
||||
* @param {Object} req - 请求对象
|
||||
* @param {Object} res - 响应对象
|
||||
*/
|
||||
exports.deleteMenu = async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
const menu = await MenuPermission.findByPk(id);
|
||||
if (!menu) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
message: '菜单不存在'
|
||||
});
|
||||
}
|
||||
|
||||
await menu.destroy();
|
||||
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
message: '菜单删除成功'
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('删除菜单失败:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '删除菜单失败',
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取角色的菜单权限
|
||||
* @param {Object} req - 请求对象
|
||||
* @param {Object} res - 响应对象
|
||||
*/
|
||||
exports.getRoleMenus = async (req, res) => {
|
||||
try {
|
||||
const { roleId } = req.params;
|
||||
|
||||
const role = await Role.findByPk(roleId);
|
||||
if (!role) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
message: '角色不存在'
|
||||
});
|
||||
}
|
||||
|
||||
// 获取角色的菜单权限
|
||||
const menus = await role.getMenuPermissions({
|
||||
order: [['sort_order', 'ASC'], ['id', 'ASC']]
|
||||
});
|
||||
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
data: menus,
|
||||
message: '获取角色菜单权限成功'
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('获取角色菜单权限失败:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '获取角色菜单权限失败',
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 设置角色的菜单权限
|
||||
* @param {Object} req - 请求对象
|
||||
* @param {Object} res - 响应对象
|
||||
*/
|
||||
exports.setRoleMenus = async (req, res) => {
|
||||
try {
|
||||
const { roleId } = req.params;
|
||||
const { menuIds } = req.body;
|
||||
|
||||
const role = await Role.findByPk(roleId);
|
||||
if (!role) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
message: '角色不存在'
|
||||
});
|
||||
}
|
||||
|
||||
// 设置菜单权限
|
||||
await role.setMenuPermissions(menuIds || []);
|
||||
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
message: '设置角色菜单权限成功'
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('设置角色菜单权限失败:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '设置角色菜单权限失败',
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user