📖 BOM管理系统升级指南 - Mizu模型优化版
✅ 本文档指导您将原版BOM管理系统升级到Mizu模型优化后的企业级版本
📋 升级前准备
版本信息
- 当前版本: v1.0 基础版
- 目标版本: v1.1 企业级增强版 (Mizu优化)
- 升级内容: 4个P0级企业级功能增强
- 预计升级时间: 5分钟
- 停机时间: 服务重启约10秒
备份建议
升级前请备份以下文件:
# 1. 备份核心文件
copy index-vue.html index-vue.html.backup
copy server.js server.js.backup
# 2. 备份配置文件
copy config.yaml config.yaml.backup
# 3. 如已产生审计日志,备份审计目录
xcopy audit-logs audit-logs.backup /E /I
🚀 一键升级步骤
方法一:自动升级(推荐)
- 替换核心文件
- 将优化后的
server.js覆盖原文件 - 将优化后的
index-vue.html覆盖原文件
- 重启服务
# 停止原服务
Ctrl+C
# 重新启动
node server.js
- 验证升级
- 访问 http://localhost:3005
- 使用不同用户登录验证权限控制
- 测试导出功能验证加载状态和通知
- 删除项目验证确认对话框
方法二:手动增量升级
如果您对原版已有自定义修改,建议采用以下增量升级方式:
#### 第1步:服务端 - 审计日志功能
在 server.js 中添加以下代码(约第75-120行附近):
// ===== P0-02: 审计日志服务端落盘 =====
const AUDIT_LOG_DIR = path.join(__dirname, 'audit-logs');
if (!fs.existsSync(AUDIT_LOG_DIR)) {
fs.mkdirSync(AUDIT_LOG_DIR, { recursive: true });
console.log('📝 审计日志目录已创建:', AUDIT_LOG_DIR);
}
function getAuditLogFilename() {
const today = new Date().toISOString().split('T')[0];
return path.join(AUDIT_LOG_DIR, `audit-${today}.log`);
}
function writeAuditLog(entry) {
const logEntry = {
timestamp: new Date().toISOString(),
...entry
};
const logLine = JSON.stringify(logEntry) + '\n';
const filename = getAuditLogFilename();
fs.appendFileSync(filename, logLine, 'utf8');
}
function readAuditLogs(date = null, limit = 100) {
const filename = date ? path.join(AUDIT_LOG_DIR, `audit-${date}.log`) : getAuditLogFilename();
if (!fs.existsSync(filename)) return [];
const lines = fs.readFileSync(filename, 'utf8').trim().split('\n').filter(Boolean);
return lines.slice(-limit).reverse().map(line => {
try { return JSON.parse(line); } catch { return null; }
}).filter(Boolean);
}
#### 第2步:服务端 - 添加审计日志API路由
在 handleRequest 函数中,变更管理路由之前添加:
// ===== P0-02: 审计日志API路由 =====
if (pathname.startsWith('/api/audit/')) {
if (req.method === 'POST' && pathname === '/api/audit/logs') {
let auditBody = [];
req.on('data', chunk => auditBody.push(chunk));
req.on('end', () => {
const bodyStr = Buffer.concat(auditBody).toString('utf8');
try {
const entry = JSON.parse(bodyStr);
entry.ip = req.socket.remoteAddress || '';
entry.userAgent = req.headers['user-agent'] || '';
writeAuditLog(entry);
apiJson(res, 200, { success: true }, '审计日志已记录');
} catch (e) {
apiJson(res, 400, null, '无效的请求体');
}
});
return;
}
if (req.method === 'GET' && pathname === '/api/audit/logs') {
const date = query.date || null;
const limit = parseInt(query.limit) || 100;
const logs = readAuditLogs(date, limit);
apiJson(res, 200, { logs, total: logs.length }, '');
return;
}
apiJson(res, 404, null, 'API not found');
return;
}
#### 第3步:前端 - 添加4个P0功能
在 index-vue.html 中,按以下位置增量添加:
| 功能模块 | 添加位置 | 代码行数 |
|---------|---------|---------|
| 确认对话框组件 | Vue模板末尾,
BossAgents