Files
wecom_it_smart_desk/docs/dashboard.html
T
Simon 364e688382 chore(release): v0.5.0-beta 发版准备
主要改动:

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
2026-06-15 14:14:58 +08:00

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>