# 需求文档:admin-web 后台重构优化 ## 简介 将现有 admin-web 系统管理后台从 18 个页面 / 11 个一级菜单重组为 7 个一级菜单模块,新增运行状态仪表盘、触发器统一管理、数据库健康监控等功能,废弃 LogViewer 页面,采用新老页面交替开发策略,逐步完成迁移。 ## 术语表 - **Admin_Web**:系统管理后台前端应用,位于 `apps/admin-web/`,面向开发者和运维人员 - **Dashboard**:运行状态仪表盘,重组后的默认首页,聚合系统运行状况 - **ETL_Task_Module**:ETL 任务管理模块,合并原 TaskConfig、TaskManager、ETLStatus 三个页面为 Tab 视图 - **MiniApp_Task_Module**:小程序任务管理模块,原"任务引擎"改名,包含定时任务、转移日志、待审核任务、参数管理 - **Trigger_Module**:触发器管理模块,统一展示和管理三套触发器数据源 - **Trigger_Unified_View**:触发器统一视图,在"全部"Tab 中聚合 biz.trigger_jobs、biz.ai_trigger_jobs、scheduled_tasks 三张表的数据 - **DB_Health_Monitor**:数据库健康监控组件,检测 4 个数据库(etl_feiqiu / test_etl_feiqiu / zqyy_app / test_zqyy_app)的连接池、大小、慢查询 - **Archived_Page**:已归档页面,测试通过后移入 `_archived/` 目录且菜单不再显示的旧页面 - **Trigger_Config_PATCH_API**:新增的后端 PATCH 接口,用于编辑 trigger_config 中的 cron_expression 和 interval_seconds - **E2E_Test**:端到端测试,使用 Playwright 编写,每个新页面必须配套 ## 需求 ### 需求 1:侧边栏菜单重组 **用户故事:** 作为开发者/运维人员,我希望侧边栏菜单从 11 个一级项重组为 7 个一级项,以便更高效地导航和管理后台功能。 #### 验收标准 1. THE Admin_Web SHALL 将侧边栏菜单重组为以下 7 个一级菜单项:运行状态、ETL 任务管理、小程序任务管理、触发器管理、租户管理员、系统设置、日志调试 2. THE Admin_Web SHALL 将"运行状态"菜单项设置为侧边栏第一项,并作为登录后的默认路由 3. THE Admin_Web SHALL 在"ETL 任务管理"菜单下提供 3 个 Tab:任务配置、任务管理、ETL 状态 4. THE Admin_Web SHALL 将原"任务引擎"菜单改名为"小程序任务管理",保留 4 个子项:定时任务、转移日志、待审核任务、参数管理 5. THE Admin_Web SHALL 在"触发器管理"菜单下提供 4 个 Tab:全部、业务、AI、ETL 6. THE Admin_Web SHALL 在"系统设置"菜单下包含环境配置页面和触发器配置跳转入口 7. THE Admin_Web SHALL 在"日志调试"菜单下包含 3 个子项:DevTrace(全链路日志)、AI 调用明细、数据库查看器 8. THE Admin_Web SHALL 保持"租户管理员"作为独立一级菜单,功能不变 9. WHEN 用户登录成功后,THE Admin_Web SHALL 自动导航到运行状态(仪表盘)页面 ### 需求 2:运行状态仪表盘 **用户故事:** 作为开发者/运维人员,我希望登录后看到一个聚合仪表盘,以便一目了然地掌握系统整体运行状况。 #### 验收标准 1. THE Dashboard SHALL 聚合展示以下内容区块:OpsPanel 运维面板内容、数据库健康监控、AI Dashboard 内容、AI 调度状态摘要 2. THE Dashboard SHALL 提供跳转链接,点击后分别导航到 ETL 任务管理的"ETL 状态"Tab 和触发器管理的"触发器状态"Tab 3. THE DB_Health_Monitor SHALL 检测以下 4 个数据库的健康状态:etl_feiqiu、test_etl_feiqiu、zqyy_app、test_zqyy_app 4. THE DB_Health_Monitor SHALL 展示每个数据库的连接池状态、数据库大小、慢查询信息 5. IF 某个数据库不存在或无法连接,THEN THE DB_Health_Monitor SHALL 将该数据库标记为"未连接"状态,而非抛出错误 6. THE Dashboard SHALL 复用原 OpsPanel 组件的服务状态、Git 状态、系统资源等内容 7. THE Dashboard SHALL 复用原 AIDashboard 组件的统计卡片、趋势图、预算进度等内容 8. THE Dashboard SHALL 展示 AI 调度状态的摘要信息(今日触发数、成功率、最近错误) ### 需求 3:ETL 任务管理模块 **用户故事:** 作为开发者/运维人员,我希望将 ETL 相关的三个页面合并为一个 Tab 视图,以便在同一页面内切换任务配置、任务管理和 ETL 状态。 #### 验收标准 1. THE ETL_Task_Module SHALL 将原 TaskConfig、TaskManager、ETLStatus 三个页面合并为同一路由下的 3 个 Tab 2. THE ETL_Task_Module SHALL 将"任务配置"Tab 的功能与原 TaskConfig 页面保持一致,包括 Flow 选择、任务勾选、参数设置、CLI 预览、执行/入队 3. THE ETL_Task_Module SHALL 将"任务管理"Tab 的功能与原 TaskManager 页面保持一致,包括队列管理、执行历史、实时日志流 4. THE ETL_Task_Module SHALL 将"ETL 状态"Tab 的功能与原 ETLStatus 页面保持一致,包括数据游标监控和最近执行记录 5. WHEN 用户切换 Tab 时,THE ETL_Task_Module SHALL 保持各 Tab 的状态不丢失(如筛选条件、滚动位置) ### 需求 4:触发器统一管理模块 **用户故事:** 作为开发者/运维人员,我希望在一个统一视图中查看所有触发器的运行状态,以便快速定位调度问题。 #### 验收标准 1. THE Trigger_Unified_View SHALL 在"全部"Tab 中聚合展示来自三个数据源的触发器:biz.trigger_jobs(业务触发器)、biz.ai_trigger_jobs(AI 事件链)、scheduled_tasks(ETL 调度) 2. THE Trigger_Unified_View SHALL 为每个触发器展示以下统一字段:名称、类型标签(业务/AI/ETL)、触发条件、状态(运行中/空闲/错误/禁用)、上次执行时间、下次执行时间、最近错误 3. THE Trigger_Unified_View SHALL 在"全部"Tab 中仅提供只读查看,不提供编辑功能 4. THE Trigger_Module SHALL 在"业务"Tab 中展示 biz.trigger_jobs 的 4 个业务触发器,并支持编辑 trigger_config 中的 cron_expression 和 interval_seconds 5. THE Trigger_Module SHALL 在"AI"Tab 中展示 biz.ai_trigger_jobs 的 AI 事件链触发器,并提供 AI 手动操作功能(重跑、缓存失效、批量执行、告警管理) 6. THE Trigger_Module SHALL 在"ETL"Tab 中展示 scheduled_tasks 的 ETL 调度任务 7. WHEN 用户在"业务"Tab 中编辑触发器配置时,THE Trigger_Module SHALL 仅允许修改 cron_expression 和 interval_seconds 两个字段 8. THE Trigger_Module SHALL 不提供编辑历史记录功能 ### 需求 5:触发器配置编辑后端 API **用户故事:** 作为开发者/运维人员,我希望通过管理后台直接编辑触发器的 cron 表达式和间隔秒数,以便无需直接操作数据库即可调整调度策略。 #### 验收标准 1. THE Trigger_Config_PATCH_API SHALL 提供 PATCH /api/trigger-jobs/{id}/config 端点,接受 cron_expression 和 interval_seconds 的部分更新 2. WHEN 请求体包含 cron_expression 字段时,THE Trigger_Config_PATCH_API SHALL 更新 trigger_config JSON 中的 cron_expression 值,并重新计算 next_run_at 3. WHEN 请求体包含 interval_seconds 字段时,THE Trigger_Config_PATCH_API SHALL 更新 trigger_config JSON 中的 interval_seconds 值,并重新计算 next_run_at 4. IF cron_expression 格式不符合 5 字段 cron 语法,THEN THE Trigger_Config_PATCH_API SHALL 返回 HTTP 422 错误及描述性错误信息 5. IF interval_seconds 小于 1,THEN THE Trigger_Config_PATCH_API SHALL 返回 HTTP 422 错误及描述性错误信息 6. THE Trigger_Config_PATCH_API SHALL 要求 JWT 认证,与现有 trigger-jobs 端点保持一致的鉴权策略 7. WHEN 更新成功时,THE Trigger_Config_PATCH_API SHALL 返回更新后的完整 trigger_job 信息 ### 需求 6:数据库健康监控后端 API **用户故事:** 作为开发者/运维人员,我希望仪表盘能实时展示数据库健康状态,以便及时发现连接池耗尽或慢查询等问题。 #### 验收标准 1. THE Admin_Web SHALL 提供 GET /api/admin/db-health 端点,返回 4 个数据库的健康状态 2. THE Admin_Web SHALL 为每个数据库返回以下指标:连接池活跃连接数、连接池空闲连接数、数据库大小(MB)、慢查询数量(最近 1 小时内执行时间超过 1 秒的查询) 3. IF 某个数据库无法连接,THEN THE Admin_Web SHALL 返回该数据库的状态为 "disconnected",其余指标为 null,而非返回 HTTP 错误 4. THE Admin_Web SHALL 要求 JWT 认证访问数据库健康端点 ### 需求 7:AI 内容拆分重组 **用户故事:** 作为开发者/运维人员,我希望 AI 相关功能按使用场景分散到对应模块中,以便在合适的上下文中使用 AI 功能。 #### 验收标准 1. THE Dashboard SHALL 包含原 AIDashboard 页面的运行总览内容(统计卡片、趋势图、饼图、预算进度、告警列表) 2. THE Dashboard SHALL 包含原 AITriggerJobs 页面的调度状态摘要信息 3. THE Trigger_Module SHALL 在"AI"Tab 中包含原 AIOperations 页面的手动操作功能(重跑、缓存失效、批量执行、告警管理) 4. THE Admin_Web SHALL 将原 AIRunLogs 页面(AI 调用明细)移入"日志调试"模块下 5. WHEN 用户从仪表盘的 AI 调度状态摘要点击"查看详情"时,THE Admin_Web SHALL 导航到触发器管理的"AI"Tab ### 需求 8:LogViewer 废弃 **用户故事:** 作为开发者/运维人员,我不再需要独立的 LogViewer 页面,因为 ETL 任务管理模块已提供实时日志功能。 #### 验收标准 1. THE Admin_Web SHALL 从侧边栏菜单中移除 LogViewer(/log-viewer)入口 2. THE Admin_Web SHALL 从路由配置中移除 /log-viewer 路由 3. WHEN 用户直接访问 /log-viewer 路径时,THE Admin_Web SHALL 重定向到 ETL 任务管理页面 4. THE Admin_Web SHALL 将 LogViewer.tsx 源文件移入 `_archived/` 目录 ### 需求 9:新老页面交替开发策略 **用户故事:** 作为开发者,我希望采用渐进式迁移策略,以便在不影响现有功能的前提下逐步完成重构。 #### 验收标准 1. THE Admin_Web SHALL 使用目标路由开发新页面,不修改老页面的路由和功能 2. WHEN 新页面的 E2E 测试全部通过后,THE Admin_Web SHALL 将对应的老页面源文件移入 `_archived/` 目录 3. THE Admin_Web SHALL 在老页面移入 `_archived/` 后,从侧边栏菜单中移除对应的老菜单项 4. THE Admin_Web SHALL 为每个新页面编写 Playwright E2E 测试,测试内容包含页面渲染验证和数据库查询校验数据正确性 5. THE Admin_Web SHALL 将 E2E 测试按合理批次切割,每个测试文件的执行时间控制在 Playwright 默认超时范围内 ### 需求 10:默认路由与导航 **用户故事:** 作为开发者/运维人员,我希望登录后直接看到系统运行状态,以便第一时间了解系统健康状况。 #### 验收标准 1. WHEN 用户登录成功后,THE Admin_Web SHALL 将默认路由从 "/" (TaskConfig) 变更为 "/dashboard"(运行状态仪表盘) 2. WHEN 用户访问根路径 "/" 时,THE Admin_Web SHALL 重定向到 "/dashboard" 3. THE Admin_Web SHALL 在侧边栏中高亮当前所在模块对应的菜单项 4. WHEN 用户在 Tab 视图内切换 Tab 时,THE Admin_Web SHALL 更新 URL 查询参数以反映当前 Tab,支持浏览器前进/后退导航 ### 需求 11:明确排除范围 **用户故事:** 作为开发者,我需要明确本次重构的边界,以便聚焦于前端重组工作。 #### 验收标准 1. THE Admin_Web SHALL 不修改后端业务逻辑(除新增 PATCH API 和数据库健康 API 外) 2. THE Admin_Web SHALL 不修改 tenant-admin 租户管理后台的任何功能 3. THE Admin_Web SHALL 不修改小程序端的任何功能 4. THE Admin_Web SHALL 不变更现有权限模型(JWT 认证方式和角色体系保持不变) 5. THE Admin_Web SHALL 保持所有现有 API 接口的向后兼容性