docs: update dev-log - SystemManager 拆分(useLdapManagement Hook)

This commit is contained in:
attacker committed 2026-06-17 07:08:33 +08:00
1 parent 019a9d13f3
commit a501229cb3
1 file changed
+29
+29
View File
@@ -1489,3 +1489,32 @@ cd ~/devops/aiops
- ExcelServerImport.tsx(549) 属导入向导,可提取步骤组件 - ExcelServerImport.tsx(549) 属导入向导,可提取步骤组件
- sidebar.tsx(689行) 为 shadcn 标准 UI 组件,context 已提取,剩余无需拆分 - sidebar.tsx(689行) 为 shadcn 标准 UI 组件,context 已提取,剩余无需拆分
- 后端 sql_audit.go(435行) 属已移除菜单死代码(保留不拆) - 后端 sql_audit.go(435行) 属已移除菜单死代码(保留不拆)
## 2026-06-17 自动推进(cron)— SystemManager 拆分(自定义 Hook 模式)
- **任务**: 拆分 SystemManager.tsx(569行->308行),提取 `useLdapManagement` 自定义 Hook 封装全部 LDAP 状态与业务逻辑
- **背景**: dev-log 上次建议优先拆 SystemManager.tsx(569行) — 系统管理真实业务组件。SystemManager 作为 4-tab 容器(用户管理/角色权限/操作审计/系统设置),其中 LDAP 相关状态占 70%+ 代码量(34 个 useState + 14 个 handler + 50 行 settingsTabProps 透传对象),是典型的"胖状态容器"反模式
- **拆分方案(自定义 Hook 提取 — 首次使用此模式)**:
- `frontend/src/components/system/useLdapManagement.ts` — **新建**(336行):提取所有 LDAP 状态 + handler 为自定义 Hook。包含三大块:① LDAP 配置管理(loadLdapConfig/handleLdapSave/handleLdapTest)② LDAP 账号管理(loadLdapOUs/loadLdapOUUsers/handleCreateOU/handleCreateLDAPUser/handleDeleteLDAPEntry/openEditLdapUser/handleUpdateLdapUser/handleLdapUserTest)③ LDAP 用户导入(loadLdapUsers/handleLdapImport/loadImportDialogData)。持有 `importing` 状态(CSV+LDAP 共用)。构造 `settingsTabProps` 对象返回给 SystemSettingsTab。接受 `onUsersChanged` 回调在导入后刷新用户列表
- `frontend/src/components/system/SystemManager.tsx` — 主组件从 569 行降至 308 行(-261, -46%);移除 34 个 LDAP useState 声明 + 14 个 LDAP handler 函数 + 50 行 settingsTabProps 对象,替换为 `const ldap = useLdapManagement(loadUsers)` 一行;CSV 批量导入改用 `ldap.setImporting()`;保留用户 CRUD(openCreate/openEdit/handleSubmit/handleDelete)+ CSV 解析(handleCsvUpload/handleBatchImport)+ 4-Tab 容器布局
- **关键技术点**: Hook 调用必须在 `loadUsers` 定义之后(避免 TDZ — `const ldap = useLdapManagement(loadUsers)` 引用了尚未初始化的 `loadUsers` const);Hook 内部调用 `useConfirm()` 处理删除确认
- **结果**:
- npx tsc --noEmit 零错误 ✅
- npm run build 通过(3.16s) ✅
- ./run.sh restart 后 /health 正常 + 前端 200 ✅
- API 验证:/admin/users 返回 total=9, /admin/ldap-config 返回 LDAP 配置(host=8.217.205.92) ✅
- 浏览器验证 /system(系统管理):
- 用户管理 Tab:9 个用户完整渲染(admin/ops01/ops02/dev01/dev02/testuser1/testimport/lisi/wangwu),含来源标识(本地/LDAP)+状态徽章+最后登录时间
- 系统设置 Tab:LDAP 配置从 hook 的 loadLdapConfig() 正确加载(host=8.217.205.92, base_dn=dc=opsx,dc=vip),安全设置/审计设置/会话设置/系统信息卡片正常渲染
- LDAP 导入弹窗:OU 下拉(根/devops/test) + 5 个 LDAP 用户(zhangsan/lisi/wangwu/logan/testa)正确加载,多选 checkbox 正常
- console 零 JS 错误 ✅
- grep 确认 useLdapManagement 仅被 SystemManager.tsx 引用
- git push 成功 (commit 019a9d1) ✅
- **下一步建议**:
- SystemManager(308) 已降至安全区间。前端剩余接近上限的组件: TopologyView.tsx(576)、ExcelServerImport.tsx(549)、AIAlertAnalyzer.tsx(541)、LogManager.tsx(514)
- TopologyView.tsx(576) 拖拽+SVG 逻辑复杂,拆分需谨慎保留拖拽状态机
- TraceManager.tsx(620)/GrafanaDashboard.tsx(616) 属优雅降级组件(无后端),拆分价值低于真实业务组件
- LogManager.tsx(514) 属已移除菜单(日志能力)的死代码,可考虑直接删除
- sidebar.tsx(689行) 为 shadcn 标准 UI 组件,context 已提取,剩余无需拆分
- 后端 sql_audit.go(435行) 属已移除菜单死代码(保留不拆)