6.8 KiB
6.8 KiB
工作日志 — 2026-05-21
Admin Starter 全栈搭建
概览
从空壳脚手架搭建完整的知习 Admin 企业后台管理系统,前后端总计 7 个阶段。
前端(admin-projects)— 7 阶段
Stage 1:基础设施
- 安装
dayjs、echarts、echarts-for-react - 新建
src/types/admin.ts— AdminUser, DashboardStats, AuditLog, TrendPoint 类型 - 新建
src/types/api.ts— PaginatedResult, PaginationParams, ApiError - 新建
src/constants/roles.ts— 角色名映射、层级判断hasRole() - 新建
src/services/token-store.ts— localStorage 读写 - 新建
src/services/http-client.ts— Fetch 封装(401 自动刷新队列) - 新建
src/services/admin-api.ts— 类型化 API 函数(login/logout/dashboard/users/audit) - 新建
src/services/mock-data.ts— DEV 模式 Dashboard / 审计日志 mock 数据 - 配置
@/路径别名(vite.config.ts + tsconfig.app.json)
Stage 2:认证体系重构
- 新建
src/hooks/use-auth-query.ts— useAdminUserQuery / useLoginMutation / useLogoutMutation - 重构
AuthContext— 改为消费 React Query hooks,新增hasPermission(role)
Stage 3:布局与路由
- 新建
PageLoading— 路由懒加载 Spin - 新建
PermissionGuard— 角色不足重定向 /403 - 新建
config/menu.tsx— 集中式菜单树,带角色过滤filterMenuByRole() - 新建
routes/index.tsx— 路由配置 + React.lazy 懒加载 - 新建
AdminLayout— 环境标识 Tag、角色过滤菜单、面包屑、用户下拉(含角色显示) - 新建错误页:403 / 404 / 500(antd Result)
- 重构
App.tsx— 懒加载 + PermissionGuard + Suspense + 404 catch-all - 删除旧
MainLayout.tsx
Stage 4:共享组件库(7 个)
| 组件 | 说明 |
|---|---|
| StatusTag | 彩色状态标签,支持自定义 statusMap |
| EmptyState | 空状态占位,带可选操作按钮 |
| DetailDrawer | 侧滑详情抽屉(560px,loading 态) |
| ConfirmDangerModal | 高危确认弹窗(需输入名称二次确认) |
| EChartsChartContainer | 图表容器(Card + loading/empty 态) |
| MetricCard | 指标卡(数值 + 趋势箭头 + loading) |
| AuditLogTable | 审计日志 ProTable(预设列 + 详情抽屉) |
Stage 5:页面
- Dashboard — 4 MetricCard + 2 ECharts(日活/AI 调用趋势)+ AuditLogTable
- UserManagement — ProTable(搜索/筛选/详情抽屉/删除确认)
- Login — 左右分栏设计(浅蓝渐变品牌面板 + 白色表单区)
Stage 6:后端 API
新建 3 个 NestJS 模块:
- AdminDashboardModule —
GET /admin-api/dashboard/stats(聚合统计 + 30 天趋势) - AdminUsersModule — CRUD
/admin-api/admin-users(分页/搜索/角色筛选,SUPER_ADMIN 守卫) - AdminAuditLogModule —
GET /admin-api/audit-logs(分页/用户/操作/日期筛选)
Prisma Schema:AdminAuditLog 新增 adminUser 反向关系。
Stage 7:收尾
- index.html title → "知习 Admin"
- index.css 替换为 admin 最小重置
- 删除 Vite 模板遗留资源(hero.png, react.svg, vite.svg)
- 修复 TS 6
baseUrldeprecation - 更新 README.md(技术栈/目录结构/认证流程/角色体系)
- 新增 CHANGELOG.md
Bug 修复
1. structuredClone React 19 兼容性
- 现象:
/audit等页面白屏 - 根因:
AdminLayout对包含 React 元素的菜单数据使用structuredClone,React 19 内部 Symbol 无法被结构化克隆:DataCloneError: Symbol(react.transitional.element) could not be cloned - 修复:
filterMenuByRole内部用 spread 创建新对象,不需要 deep clone,直接移除structuredClone调用
2. echarts-for-react CJS/ESM 互操作
- 现象:Dashboard 报错
Element type is invalid: expected a string but got: object - 根因:
echarts-for-react/lib/core是 CJS 产物,default export 在 Vite ESM 环境下解析失败 - 修复:改用
echarts-for-react/esm/core
3. Login 页面样式优化
- 左侧面板从深蓝黑渐变
#001529→ 改为浅蓝色#e6f4ff → #bae0ff → primary - 去掉 DEV 环境标签
- 去掉装饰性统计数字
- 副标题改为"企业知识管理中台"
4. MetricCard 高度不一致
- 修复:Card 加
height: '100%'配合 Row flex 等高 - 恢复 antd 默认紧凑 padding
- 趋势区不强制占位
5. AuditLogTable 分页边距
- 去掉
cardProps: { bodyStyle: { padding: 0 } } - 标题改用 ProTable
headerTitle属性 - 恢复 ProTable Card 默认内边距
6. 杂项
- AuthGuard Spin
tip属性警告 → 移除 useRef<ActionType>需要初始值 → 改为useRef<ActionType>(undefined)AdminRoles装饰器参数需用 enum 值而非字符串字面量
当前状态
前端
- TypeScript 编译 ✅
- Vite 生产构建 ✅
- 所有路由可访问,权限守卫生效
- Mock 数据在 DEV 模式下正常回退(Dashboard + AuditLog)
后端
- NestJS 编译 ✅
- Prisma 模型就绪(AdminUser + AdminSession + AdminAuditLog 含关系)
- 3 个新模块已注册到 app.module.ts
- 待部署到生产并跑 migration
待做
- Admin API 部署到 8核32G 生产服务器
- Prisma migrate(AdminAuditLog 新增 adminUser 关系)
- 前后端联调验证
- Dashboard 真实数据验证
- 管理员 CRUD 端到端测试
Agent View 工作流配置(实验 → 废弃)
创建
- 根目录 CLAUDE.md +
.claude/agents/下 6 个 Agent 配置 - 5 个子项目各创建 CLAUDE.md + AI_xxx_WORKSPACE.md
startup-plan/agent-config/备份目录- 设计完整工作流:任务分级、文件所有权、Review 触发、错误回滚、提交后归档
问题
- Agent View 实测无法使用
- 文档冗余:README.md + CLAUDE.md + WORKSPACE 三层重叠
清理
- 删除所有 Agent 配置、CLAUDE.md、AI_WORKSPACE.md
- 删除
startup-plan/agent-config/ - 还原各 README 中 "For AI Agents" 章节
- 推送所有仓库
devops-projects 仓库
- 新建
devops-projects/目录 - 从
startup-plan/凭据配置/迁移服务器凭据 - 创建
devops-projects/README.md - 推送到
wangdl/devops-projects
Hermes Agent 部署(4核4G 轻量云)
| 项目 | 值 |
|---|---|
| 镜像 | nousresearch/hermes-agent:latest |
| 模型 | deepseek-v4-flash |
| Provider | DeepSeek 官方 API |
| Thinking | reasoning_effort: max |
| 内网地址 | http://10.2.0.7:9119 |
| 持久化 | sleep infinity 保活 + --restart unless-stopped |
踩坑记录
- 容器交互模式无 TTY 立即退出 →
sleep infinity保活 - Dashboard 需
HERMES_DASHBOARD=true开启 - 内网访问需同时开 Lighthouse 防火墙 + iptables(lo 回环规则不覆盖 eth0)
- Gitea push 需用
ssh://git@git.longde.cloud:2222格式认证为 repo 所有者