364e688382
主要改动: backend 业务: - feat(error-codes): 统一错误码表 E1011/E1012 拆码 - E1011 AUTH_PASSWORD_WRONG: 本地密码错误 - E1012 AUTH_FIRST_LOGIN_PASSWORD_REQUIRED: 首次登录请先设置密码 - E1015 AUTH_OLD_PASSWORD_REQUIRED: 改密需要旧密码 - E1016 AUTH_OLD_PASSWORD_WRONG: 旧密码错误 - fix(agents): P0 降级放行时,如坐席已注册但未设密码,正确 raise 1012 (修复前会撞 1011 本地密码错误,与场景不符) - feat(approval): 审批模块 (T审批/A审批) - feat(config): approval_template_resource / approval_template_device 配置 - feat(main): /ready, /metrics, /version 端点(K8s 友好) backend 测试: - test(agents): 新增 test_agents.py — 3 个 Fix-4 降级登录测试 - 错误密码拒绝 - 缺密码拒绝 - 正确密码通过 pytest tests/test_agents.py → 3/3 通过 - test(conftest): 模块级 mock + slowapi 限流重置 + UTF-8 patch 解决 Windows pytest GBK 读 .env 失败 + 降级路径无法测试 仓库治理: - chore(gitignore): 排除 .workbuddy/memory/(workbuddy 本地记忆) - chore(docs): 重命名两份 IT 文档(前缀加智能区分版本) 部署与文档: - docs: RELEASE_NOTES_v0.5.0-beta.md / dashboard.html / 需求-发版预览页面 - docs: 部署、架构、PRD、安全、评审报告等同步 v0.5.0-beta - deploy-server: 打包脚本、nginx、docker-compose 版本号 bump 前端 (frontend-h5 / frontend-agent / frontend-admin / frontend-portal): - index.html / package.json 版本号与构建号 bump 自动验收(RELEASE_NOTES L100-104): - [x] pytest tests/test_agents.py -v → 3 passed - [x] grep Bs7ucT backend frontend-h5 frontend-agent → 无输出 - [x] grep AppException(101[123]) backend → 仅 1 处(登录场景 1012) - [ ] npm run build (frontend-h5 / frontend-agent) → 合并后跑 后续: 合并 feature/t-1-t4-merge → main,tag v0.5.0-beta
151 lines
7.7 KiB
HTML
151 lines
7.7 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>企微 IT 智能服务台 - 健康度仪表盘</title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<style>
|
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
body {
|
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
|
|
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
min-height: 100vh;
|
|
padding: 20px;
|
|
color: #333;
|
|
}
|
|
.container { max-width: 1400px; margin: 0 auto; }
|
|
h1 { color: white; margin-bottom: 20px; text-align: center; font-size: 2.2em; }
|
|
.timestamp { color: rgba(255,255,255,0.8); text-align: center; margin-bottom: 30px; }
|
|
.grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 20px; }
|
|
.card {
|
|
background: white; border-radius: 12px; padding: 24px;
|
|
box-shadow: 0 4px 20px rgba(0,0,0,0.08);
|
|
transition: transform 0.2s;
|
|
}
|
|
.card:hover { transform: translateY(-2px); }
|
|
.card h2 { font-size: 1.1em; color: #555; margin-bottom: 12px; }
|
|
.big-number { font-size: 2.4em; font-weight: bold; color: #667eea; }
|
|
.label { color: #888; font-size: 0.9em; }
|
|
.stat-row {
|
|
display: flex; justify-content: space-between;
|
|
padding: 6px 0; border-bottom: 1px solid #f0f0f0;
|
|
}
|
|
.stat-row:last-child { border: none; }
|
|
.badge {
|
|
display: inline-block; padding: 4px 10px;
|
|
border-radius: 20px; font-size: 0.85em; margin: 2px;
|
|
}
|
|
.badge.green { background: #d4edda; color: #155724; }
|
|
.badge.yellow { background: #fff3cd; color: #856404; }
|
|
.badge.red { background: #f8d7da; color: #721c24; }
|
|
.badge.blue { background: #d1ecf1; color: #0c5460; }
|
|
.git-info {
|
|
background: #282c34; color: #abb2bf;
|
|
padding: 16px; border-radius: 8px; font-family: 'Consolas', monospace;
|
|
font-size: 0.9em; line-height: 1.6;
|
|
}
|
|
.git-info .hash { color: #61afef; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<h1>🚀 企微 IT 智能服务台 - 健康度仪表盘</h1>
|
|
<div class="timestamp">生成时间: 2026-06-15 10:34:45</div>
|
|
|
|
<div class="grid">
|
|
<!-- 概览 -->
|
|
<div class="card">
|
|
<h2>📊 代码规模</h2>
|
|
<div class="big-number">25,199</div>
|
|
<div class="label">后端 Python 代码行</div>
|
|
<div style="margin-top: 12px;">
|
|
<div class="stat-row"><span>后端 Python 文件</span><strong>94</strong></div>
|
|
<div class="stat-row"><span>Admin 前端</span><strong>0 文件</strong></div>
|
|
<div class="stat-row"><span>Agent 前端</span><strong>0 文件</strong></div>
|
|
<div class="stat-row"><span>H5 前端</span><strong>0 文件</strong></div>
|
|
<div class="stat-row"><span>Portal 前端</span><strong>0 文件</strong></div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 文档统计 -->
|
|
<div class="card">
|
|
<h2>📚 文档</h2>
|
|
<div class="big-number">65</div>
|
|
<div class="label">文档总数</div>
|
|
<div style="margin-top: 12px;">
|
|
<div class="stat-row"><span>评审报告</span><strong>6</strong></div><div class="stat-row"><span>审计报告</span><strong>4</strong></div><div class="stat-row"><span>ADRs</span><strong>4</strong></div><div class="stat-row"><span>SOPs</span><strong>4</strong></div><div class="stat-row"><span>路线图</span><strong>3</strong></div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 风险状态 -->
|
|
<div class="card">
|
|
<h2>🛡️ 风险状态</h2>
|
|
<div class="big-number" style="color: #dc3545;">-66</div>
|
|
<div class="label">P0 遗留(需立即修)</div>
|
|
<div style="margin-top: 12px;">
|
|
<div class="stat-row"><span>P1 中危</span><span class="badge yellow">-66 待修</span></div>
|
|
<div class="stat-row"><span>P2 低危</span><span class="badge yellow">-66 待修</span></div>
|
|
<div class="stat-row"><span>M 中</span><span class="badge blue">-56 待修</span></div>
|
|
<div class="stat-row"><span>L 低</span><span class="badge blue">-61 待修</span></div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 脚本与测试 -->
|
|
<div class="card">
|
|
<h2>🛠️ 工具链</h2>
|
|
<div class="big-number">8</div>
|
|
<div class="label">自动化脚本</div>
|
|
<div style="margin-top: 12px;">
|
|
<div class="stat-row"><span>后端测试</span><strong>18 文件</strong></div>
|
|
<div class="stat-row"><span>安全审计</span><span class="badge green">✅ 已配</span></div>
|
|
<div class="stat-row"><span>API 文档</span><span class="badge green">✅ 已配</span></div>
|
|
<div class="stat-row"><span>备份脚本</span><span class="badge green">✅ 已配</span></div>
|
|
<div class="stat-row"><span>Pre-commit</span><span class="badge green">✅ 已配</span></div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Git 状态 -->
|
|
<div class="card" style="grid-column: span 2;">
|
|
<h2>📦 Git 状态</h2>
|
|
<div class="git-info">
|
|
<div>分支: <span class="hash">feature/t-1-t4-merge</span></div>
|
|
<div>提交数: <span class="hash">17</span></div>
|
|
<div>最近提交: <span class="hash">93ba41e feat: 瀹℃壒娴佺▼妯″潡 (T瀹℃壒A瀹℃壒)</span></div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 模块完成度 -->
|
|
<div class="card" style="grid-column: span 3;">
|
|
<h2>✅ 阶段完成度</h2>
|
|
<div style="display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; margin-top: 12px;">
|
|
<div style="text-align: center;">
|
|
<div class="big-number" style="font-size: 1.8em; color: #28a745;">66%</div>
|
|
<div class="label">阶段 1</div>
|
|
</div>
|
|
<div style="text-align: center;">
|
|
<div class="big-number" style="font-size: 1.8em; color: #ffc107;">0%</div>
|
|
<div class="label">阶段 2(转人工)</div>
|
|
</div>
|
|
<div style="text-align: center;">
|
|
<div class="big-number" style="font-size: 1.8em; color: #6c757d;">0%</div>
|
|
<div class="label">阶段 3(H5+WS)</div>
|
|
</div>
|
|
<div style="text-align: center;">
|
|
<div class="big-number" style="font-size: 1.8em; color: #6c757d;">规划中</div>
|
|
<div class="label">阶段 4(AI Wingman)</div>
|
|
</div>
|
|
<div style="text-align: center;">
|
|
<div class="big-number" style="font-size: 1.8em; color: #6c757d;">规划中</div>
|
|
<div class="label">阶段 5(自动化)</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div style="text-align: center; color: rgba(255,255,255,0.7); margin-top: 40px; font-size: 0.9em;">
|
|
企微 IT 智能服务台 · 健康度仪表盘 v1.0
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|