修改管理后台

This commit is contained in:
shenquanyi
2025-09-12 20:08:42 +08:00
parent 39d61c6f9b
commit 80a24c2d60
286 changed files with 75316 additions and 9452 deletions

View File

@@ -0,0 +1,251 @@
/**
* 操作日志集成示例
* @file operation-log-integration.js
* @description 展示如何在现有控制器中集成操作日志记录
*/
const { createOperationLogger } = require('../middleware/operationLogger');
// 示例1: 用户管理控制器集成操作日志
const userControllerWithLogs = {
// 创建用户 - 集成操作日志
createUser: [
// 操作日志中间件
createOperationLogger({
moduleName: '用户管理',
tableName: 'users',
getRecordId: (req, res) => res.body?.data?.id || null,
getOperationDesc: (req, res) => `创建用户: ${req.body.username}`,
getOldData: () => null,
getNewData: (req, res) => res.body?.data || null
}),
// 原有的创建用户逻辑
async (req, res) => {
try {
// 创建用户逻辑
const user = await User.create(req.body);
res.json({
success: true,
data: user,
message: '用户创建成功'
});
} catch (error) {
res.status(500).json({
success: false,
message: '用户创建失败',
error: error.message
});
}
}
],
// 更新用户 - 集成操作日志
updateUser: [
createOperationLogger({
moduleName: '用户管理',
tableName: 'users',
getRecordId: (req, res) => req.params.id,
getOperationDesc: (req, res) => `更新用户: ${req.body.username || req.params.id}`,
getOldData: async (req, res) => {
// 获取更新前的数据
const oldUser = await User.findByPk(req.params.id);
return oldUser ? oldUser.toJSON() : null;
},
getNewData: (req, res) => res.body?.data || req.body
}),
async (req, res) => {
try {
const user = await User.findByPk(req.params.id);
if (!user) {
return res.status(404).json({
success: false,
message: '用户不存在'
});
}
await user.update(req.body);
res.json({
success: true,
data: user,
message: '用户更新成功'
});
} catch (error) {
res.status(500).json({
success: false,
message: '用户更新失败',
error: error.message
});
}
}
],
// 删除用户 - 集成操作日志
deleteUser: [
createOperationLogger({
moduleName: '用户管理',
tableName: 'users',
getRecordId: (req, res) => req.params.id,
getOperationDesc: (req, res) => `删除用户: ${req.params.id}`,
getOldData: async (req, res) => {
// 获取删除前的数据
const oldUser = await User.findByPk(req.params.id);
return oldUser ? oldUser.toJSON() : null;
},
getNewData: () => null
}),
async (req, res) => {
try {
const user = await User.findByPk(req.params.id);
if (!user) {
return res.status(404).json({
success: false,
message: '用户不存在'
});
}
await user.destroy();
res.json({
success: true,
message: '用户删除成功'
});
} catch (error) {
res.status(500).json({
success: false,
message: '用户删除失败',
error: error.message
});
}
]
};
// 示例2: 农场管理控制器集成操作日志
const farmControllerWithLogs = {
// 创建农场 - 集成操作日志
createFarm: [
createOperationLogger({
moduleName: '农场管理',
tableName: 'farms',
getRecordId: (req, res) => res.body?.data?.id || null,
getOperationDesc: (req, res) => `创建农场: ${req.body.name}`,
getOldData: () => null,
getNewData: (req, res) => res.body?.data || null
}),
async (req, res) => {
try {
const farm = await Farm.create(req.body);
res.json({
success: true,
data: farm,
message: '农场创建成功'
});
} catch (error) {
res.status(500).json({
success: false,
message: '农场创建失败',
error: error.message
});
}
}
]
};
// 示例3: 批量操作日志记录
const batchOperationLogger = createBatchOperationLogger([
{
moduleName: '用户管理',
tableName: 'users',
getRecordId: (req, res) => req.params.id,
getOperationDesc: (req, res) => `批量操作用户: ${req.params.id}`,
getOldData: () => null,
getNewData: (req, res) => res.body
},
{
moduleName: '权限管理',
tableName: 'user_roles',
getRecordId: (req, res) => req.params.id,
getOperationDesc: (req, res) => `更新用户角色: ${req.params.id}`,
getOldData: () => null,
getNewData: (req, res) => req.body.roles
}
]);
// 示例4: 在Express路由中使用
const express = require('express');
const router = express.Router();
// 用户路由
router.post('/users',
createOperationLogger({
moduleName: '用户管理',
tableName: 'users',
getRecordId: (req, res) => res.body?.data?.id || null,
getOperationDesc: (req, res) => `创建用户: ${req.body.username}`,
getOldData: () => null,
getNewData: (req, res) => res.body?.data || null
}),
userControllerWithLogs.createUser[1] // 实际的控制器函数
);
router.put('/users/:id',
createOperationLogger({
moduleName: '用户管理',
tableName: 'users',
getRecordId: (req, res) => req.params.id,
getOperationDesc: (req, res) => `更新用户: ${req.body.username || req.params.id}`,
getOldData: async (req, res) => {
const oldUser = await User.findByPk(req.params.id);
return oldUser ? oldUser.toJSON() : null;
},
getNewData: (req, res) => res.body?.data || req.body
}),
userControllerWithLogs.updateUser[1]
);
router.delete('/users/:id',
createOperationLogger({
moduleName: '用户管理',
tableName: 'users',
getRecordId: (req, res) => req.params.id,
getOperationDesc: (req, res) => `删除用户: ${req.params.id}`,
getOldData: async (req, res) => {
const oldUser = await User.findByPk(req.params.id);
return oldUser ? oldUser.toJSON() : null;
},
getNewData: () => null
}),
userControllerWithLogs.deleteUser[1]
);
module.exports = {
userControllerWithLogs,
farmControllerWithLogs,
batchOperationLogger,
router
};
/**
* 使用说明:
*
* 1. 在需要记录操作日志的控制器方法前添加 createOperationLogger 中间件
* 2. 配置中间件参数:
* - moduleName: 模块名称(如:用户管理、农场管理)
* - tableName: 数据表名users、farms
* - getRecordId: 获取记录ID的函数
* - getOperationDesc: 获取操作描述的函数
* - getOldData: 获取操作前数据的函数(可选)
* - getNewData: 获取操作后数据的函数(可选)
*
* 3. 操作日志会自动记录以下信息:
* - 操作用户信息从req.user获取
* - 操作类型CREATE/UPDATE/DELETE
* - 操作描述
* - 数据变化(操作前后的数据)
* - 请求信息IP、URL、方法等
* - 响应信息(状态码、执行时间等)
*
* 4. 对于批量操作,可以使用 createBatchOperationLogger 记录多个操作
*/