chore: sync workspace updates

This commit is contained in:
chengkai3
2026-04-26 09:00:49 +08:00
parent db81bf41fc
commit ba21ed8550
81 changed files with 5944 additions and 13514 deletions
+434
View File
@@ -16,3 +16,437 @@
- 风险与影响:
- 仅影响后台左侧导航展示文案,不涉及菜单权限、路由与接口逻辑。
## Work Log - 打包镜像并发布更新(2026-04-26)
- 背景:
- 用户要求执行“打包镜像并发布更新”。
- 本次执行:
- `docker compose build`
- `docker compose up -d`
- 验证:
- `docker compose ps``api/web/celery/db/redis/minio` 均为 Up`api/db/redis` healthy。
- `docker compose logs --tail=80 api`Uvicorn 启动完成,`GET /health` 返回 200。
- `docker compose logs --tail=80 web`Next.js Ready。
- `curl -fsS http://127.0.0.1:8000/health`:返回 `{"status":"ok","service":"fquiz-api","version":"0.1.0"}`
- `curl -I -fsS http://127.0.0.1:3000/`:返回 `HTTP/1.1 200 OK`
- 风险与影响:
- 本次为镜像重建与容器滚动重启,存在短时服务切换窗口;未执行数据库结构变更。
## Work Log - 下线收件箱、提示词管理、代码评审与 Git管理(2026-04-26
- 背景:
- 用户要求删除“收件箱、提示词管理、代码评审、Git管理”功能。
- 本次改动:
- 前端:
- 删除后台页面入口:
- `web/src/app/admin/inbox/page.tsx`
- `web/src/app/admin/prompt/page.tsx`
- `web/src/app/admin/system-message/page.tsx`
- `web/src/app/admin/code-review/page.tsx`
- `web/src/app/admin/git-desktop/page.tsx`
- `web/src/app/admin/page.tsx` 删除对应后台首页卡片。
- `web/src/app/admin/menus/page.tsx` 删除对应受保护菜单编码。
- `web/src/types/auth.ts` 删除系统消息/提示词管理相关类型。
- 后端:
- 删除提示词管理 API、schema、service、model
- `api/app/api/v1/system_messages.py`
- `api/app/schemas/system_message.py`
- `api/app/services/system_message_service.py`
- `api/app/models/system_message.py`
- `api/app/api/router.py` 取消 `/api/v1/admin/system-messages*` 路由挂载。
- `api/app/core/database.py``api/app/models/__init__.py` 取消 `system_message` 模型导入。
- `api/app/services/seed_service.py` 删除默认权限、默认菜单和 admin 菜单绑定。
- `api/app/services/admin_service.py``api/app/services/legacy_admin_rbac_service.py``api/app/services/legacy_authz_service.py` 将四个历史菜单编码纳入已下线过滤,避免存量菜单继续展示。
- `api/app/services/topic_registry.py` 删除 `admin.system-messages` 订阅规则。
- 验证:
- `python3 -m py_compile api/app/api/router.py api/app/core/database.py api/app/models/__init__.py api/app/services/seed_service.py api/app/services/admin_service.py api/app/services/legacy_admin_rbac_service.py api/app/services/legacy_authz_service.py api/app/services/topic_registry.py` -> 通过。
- `npm --workspace web exec tsc --noEmit --pretty false` -> 通过(清理 `.next` 后复跑)。
- `npx eslint src/app/admin/page.tsx src/app/admin/menus/page.tsx src/types/auth.ts` -> 通过。
- `npm run build:web` -> 通过,构建路由列表已不再包含 `/admin/inbox``/admin/prompt``/admin/system-message``/admin/code-review``/admin/git-desktop`
- `git diff --check`(命中文件)-> 通过。
- `npx @ant-design/cli lint src/app/admin/page.tsx --format json`:默认 npx cache 报 `ENOTEMPTY`;改用 `/tmp` 独立 cache 后命令长时间无返回,已终止卡住进程,未得到有效 AntD CLI lint 结果。
- 风险与影响:
- 本次仅下线入口、路由、默认权限/菜单和提示词管理执行链路,不执行数据库 drop;存量 `system_messages` 表如果已存在,会作为历史数据保留。
- `admin.system_message``admin.inbox``admin.code_review``admin.git_desktop` 被保留在 removed/disabled 集合中,仅用于过滤历史菜单。
## Work Log - 文件管理页去掉左侧挂载点(2026-04-26)
- 背景:
- 用户要求:文件管理仅会有本地/SFTP/S3 三种后端,不会出现多挂载点场景,去掉左侧挂载点。
- 本次改动(最小闭环):
- `web/src/app/admin/files/page.tsx`
- 删除左侧“挂载点”卡片与挂载点列表按钮组。
- 删除前端挂载点切换状态与逻辑(`mountCode``handleSelectMount`)。
- 文件列表查询改为仅按 `path` 拉取,由后端返回 `current_mount` 作为当前挂载上下文。
- 保留文件操作接口参数 `mount_code`,统一使用当前响应中的 `current_mount.code`
- 验证:
- `npm --workspace web exec tsc --noEmit --pretty false` -> 通过。
- 风险与影响:
- 前端不再支持多挂载点手动切换;若后续恢复多挂载点产品形态,需要补回挂载点切换入口。
- 后端接口与数据模型未改动,仍兼容多挂载点能力。
## Work Log - 任务监控功能彻底收口(2026-04-26)
- 背景:
- 用户要求“补充任务监控功能”并“彻底收口”。
- 本次改动:
- 后端接口对齐 Celery 监控语义:
- `api/app/api/v1/task_monitor.py`
- 查询参数统一为 `task_limit` / `history_limit`
- 权限校验统一为 `celery.read` / `celery.manage`
- 移除旧的需求/待办聚合参数与依赖(`risk_limit` / `stale_hours`)。
- 前端页面按 Celery schema 重写:
- `web/src/app/admin/task-monitor/page.tsx`
- 请求参数改为 `task_limit` / `history_limit`
- 页面展示改为 Worker / Queue / Task 三块监控表格。
- 统计卡片改为在线 Worker、总并发、队列待处理、采样任务数。
- 状态分布改为任务状态桶(`STARTED/RECEIVED/SCHEDULED/...`)。
- 页面权限改为 `celery.read` / `celery.manage`
- 后台首页入口口径同步:
- `web/src/app/admin/page.tsx`
- “任务监控”卡片文案改为 Celery 监控描述。
- 可见权限改为 `celery.read` / `celery.manage`
- 验证:
- `npm --workspace web exec tsc --noEmit --pretty false` -> 通过。
- `python3 -m compileall api/app/api/v1/task_monitor.py api/app/services/task_monitor_service.py api/app/schemas/task_monitor.py` -> 通过。
- 风险与影响:
- 任务监控口径从“需求/待办风险聚合”切换为“Celery 运行态监控”;若历史调用仍传 `risk_limit/stale_hours`,将不再生效。
- 页面和接口权限都已切至 `celery.*`,需要对应角色具备 Celery 权限才可访问。
## Work Log - 任务监控补齐 Celery 队列积压与历史状态(2026-04-26)
- 背景:
- 用户确认“任务监控要监控 Celery 队列和任务状态”,需要从方案落到可运行实现。
- 本次补齐:
- 后端 `api/app/services/task_monitor_service.py`
- `inspect.active/reserved/scheduled/active_queues/stats/ping` 聚合 Worker 与实时任务。
- Broker 为 Redis 时按队列执行 `LLEN`,输出真实 `pending_count`(不再用 reserved/scheduled 近似值)。
- Result backend 为 Redis 时扫描 `celery-task-meta-*`,补齐 `SUCCESS/FAILURE/RETRY/REVOKED` 历史状态。
- 任务明细按状态优先级 + 时间排序,支持 `task_limit/history_limit`
- 接口与权限:
- `api/app/api/v1/task_monitor.py` 改为 `task_limit/history_limit` 参数。
- 权限校验统一为 `celery.read` / `celery.manage`
- 权限映射与菜单:
- `api/app/services/seed_service.py` 增加 `celery.read/celery.manage`,并将 `admin.task_monitor` 权限改为 `celery.read`
- `api/app/services/legacy_authz_service.py` 同步 `admin.task_monitor -> celery.*` 映射。
- 前端 `web/src/app/admin/task-monitor/page.tsx`
- 展示 Worker/Queue/Task 三块监控视图;
- 自动刷新、任务上限、历史扫描上限可配置;
- 状态 Tag 与失败摘要展示。
- 验证:
- `python3 -m py_compile api/app/schemas/task_monitor.py api/app/services/task_monitor_service.py api/app/api/v1/task_monitor.py api/app/services/seed_service.py api/app/services/legacy_authz_service.py` -> 通过。
- `npm --workspace web exec tsc --noEmit --pretty false` -> 通过。
- 风险与影响:
- Redis 扫描历史任务采用 `SCAN` + 限流(`history_limit * 20`)策略;历史量极大时仅展示采样窗口内数据。
- 当前未新增 DB 持久化索引,历史任务名称在 result backend 未携带时会显示为 `-`
## Work Log - 移除后台页面顶部标题与描述信息(2026-04-26)
- 背景:
- 用户要求去掉所有后台页面顶部的标题和描述信息(例如“线路管理”“按角色权限访问当前模块,完成查询、维护、协作与操作留痕”)。
- 本次改动(最小闭环):
- `web/src/app/admin/layout.tsx`
- 删除后台壳层内容区顶部公共信息块(Breadcrumb + 页面标题 + 页面描述)。
- 同步清理对应的 breadcrumb/title 计算逻辑与无用导入。
- 验证:
- `npm --workspace web exec tsc --noEmit --pretty false` -> 通过。
- 风险与影响:
- 仅影响后台页面顶部展示,不涉及页面业务逻辑、接口、权限与路由行为。
## Work Log - 下线 AI/编排/MCP/模型/API测试/知识集/图谱/需求/日程功能(2026-04-26
- 背景:
- 用户要求删除“AI 聊天、编排管理、MCP管理、模型管理、API测试、知识集管理、流程图、思维导图、需求管理、日程管理”功能。
- 本次改动:
- 前端入口与页面删除:
- 删除 `/admin/chat``/admin/agent``/admin/orchestration``/admin/mcp-server``/admin/models``/admin/api-tester``/admin/files``/admin/knowledge-set``/admin/mermaid-mgr``/admin/mindmap``/admin/requirements``/admin/schedule` 对应页面文件。
- `web/src/app/admin/page.tsx` 删除对应后台首页卡片,仅保留用户/角色/菜单/系统参数/任务监控/线路/雷电/系统日志/Wine 执行器。
- `web/src/app/admin/menus/page.tsx` 删除已下线菜单的前端受保护编码。
- `web/src/types/auth.ts` 删除 File/Model/TokenUsage/Chat/MindMap/Mermaid/Requirement/Todo 等已下线前端 DTO 类型。
- 后端公开 API 下线:
- `api/app/api/router.py` 取消挂载 chat/admin-files/calendar/mermaid/mindmap/requirements/todos/project_requirement 等路由。
- 删除对应 route/schema/service/model 文件:chat、file_storage、mermaid、mind_map;删除 public requirements/todos/calendar/project_requirement API。
- `api/app/api/v1/admin.py` 删除模型管理与模型路由管理端点。
- 默认权限/菜单收口:
- `api/app/services/seed_service.py` 删除 `chat.use``file.*``model.*``requirement.*``todo.*` 默认权限,删除对应默认菜单与 admin 绑定。
- `api/app/services/admin_service.py``legacy_admin_rbac_service.py``legacy_authz_service.py` 将已下线菜单编码放入 removed/disabled 过滤集合,屏蔽存量菜单。
- `api/app/services/topic_registry.py` 删除已下线模块订阅规则。
- 任务监控适配:
- `/admin/task-monitor` 保留,但口径固定为 Celery Worker/Queue/Task 监控,不再读取需求/待办数据。
- `api/app/services/model_service.py` 保留内部模型注册/路由基础设施,但移除已下线 `/api/v1/admin/models*` 刷新提示,并将 topic 改为内部 `model.registry`
- 验证:
- `python3 -m compileall api/app` -> 通过。
- `npm --workspace web exec tsc --noEmit --pretty false` -> 通过(删除 `.next` 后复跑,避免旧路由类型缓存)。
- `npx eslint src/app/admin/page.tsx src/app/admin/menus/page.tsx src/app/admin/task-monitor/page.tsx src/types/auth.ts` -> 通过。
- `npm run build:web` -> 通过;构建路由列表仅保留 `/admin``/admin/users``/admin/roles``/admin/menus``/admin/system-params``/admin/task-monitor``/admin/power-lines``/admin/lightning-currents``/admin/lightning-distribution``/admin/syslog``/admin/wine-runner`
- `git diff --check` -> 通过。
- 风险与影响:
- 本次不执行数据库 drop;历史表和历史数据保留。
- 本机 Python 与 `.venv` 均缺少 FastAPI`PYTHONPATH=api python -c "from app.api.router import api_router"` 无法作为导入验证;已用 `compileall` 覆盖语法级后端检查。
- 模型注册表/路由表仍保留给内部 LLM 网关与寿命倒计时等内部能力使用,但后台模型管理/API 测试页面和 admin API 已移除。
## Work Log - 打包镜像并发布功能下线更新(2026-04-26)
- 背景:
- 用户要求“打包镜像并发布更新”。
- 本次执行:
- `docker compose build`
- `fquiz-api``fquiz-web``fquiz-celery-worker``fquiz-celery-beat` 构建完成。
- Web 镜像构建阶段 `next build` 通过,路由列表仅保留当前有效后台模块。
- `docker compose up -d`
- 重建并启动 `api/web/celery-worker/celery-beat`
- `db/redis/minio` 继续复用运行中容器。
- 验证:
- `docker compose ps`
- `fquiz-api` Up 且 healthy。
- `fquiz-web` Up。
- `fquiz-celery-worker` Up。
- `fquiz-celery-beat` Up。
- `fquiz-db``fquiz-redis` healthy。
- `curl -fsS http://127.0.0.1:8000/health` -> `{"status":"ok","service":"fquiz-api","version":"0.1.0"}`
- `curl -I -fsS http://127.0.0.1:3000/` -> `HTTP/1.1 200 OK`
- `docker compose logs --tail=120 api`Uvicorn 启动完成,`/health` 返回 200。
- `docker compose logs --tail=100 web`Next.js Ready。
- `docker compose logs --tail=80 celery-worker`worker 连接 Redis 并 ready。
- `docker compose logs --tail=80 celery-beat`beat 启动完成。
- OpenAPI 运行态检查:`/api/v1/chat``/api/v1/admin/files``/api/v1/calendar``/api/v1/mermaids``/api/v1/mindmap``/api/v1/requirements``/api/v1/todos``/api/project/requirement``/api/v1/admin/models``/api/v1/admin/model-routes` 均无匹配。
- 风险与影响:
- 发布过程重启了 API、Web、Celery Worker、Celery Beat,存在短时服务切换窗口。
- Celery Worker 日志仍有 root 用户运行的既有安全警告,服务状态正常但后续生产化可考虑设置非 root 用户。
## Work Log - 还原文件管理模块(2026-04-26
- 背景:
- 用户要求恢复系统文件管理模块,并延续此前“单挂载点交互”约束。
- 本次改动:
- 恢复文件管理核心代码:
- `api/app/api/v1/admin_files.py`
- `api/app/models/file_storage.py`
- `api/app/schemas/file_storage.py`
- `api/app/services/file_service.py`
- `api/app/services/storage_driver.py`
- `web/src/app/admin/files/page.tsx`
- 恢复后端接线:
- `api/app/api/router.py` 重新挂载 `admin_files_router`
- `api/app/models/__init__.py``api/app/core/database.py` 重新注册 `file_storage` 模型。
- 恢复权限/菜单/订阅口径:
- `api/app/services/seed_service.py` 恢复 `file.read`/`file.manage``admin.files` 菜单、默认存储后端与挂载 seed。
- `api/app/services/legacy_authz_service.py` 恢复 `admin.files` 权限映射与 synthetic legacy menu。
- `api/app/services/topic_registry.py` 恢复 `admin.files` topic 订阅规则。
- `api/app/services/admin_service.py` / `legacy_admin_rbac_service.py` 恢复 `admin.files` 为受保护菜单,并从 removed/disabled 过滤中放开。
- `web/src/app/admin/menus/page.tsx` 恢复 `admin.files` 为前端受保护菜单。
- `web/src/app/admin/page.tsx` 恢复“文件管理”入口卡片。
- `web/src/types/auth.ts` 恢复文件管理相关类型定义。
- 文件管理页面按单挂载点收口:
- 去掉左侧挂载点列表与挂载切换状态,仅保留当前挂载上下文下的目录浏览与文件操作。
- 验证:
- `python3 -m compileall api/app/api/router.py api/app/api/v1/admin_files.py api/app/core/database.py api/app/models/__init__.py api/app/models/file_storage.py api/app/schemas/file_storage.py api/app/services/file_service.py api/app/services/storage_driver.py api/app/services/seed_service.py api/app/services/topic_registry.py api/app/services/legacy_authz_service.py api/app/services/legacy_admin_rbac_service.py api/app/services/admin_service.py` -> 通过。
- `npm --workspace web exec tsc --noEmit --pretty false` -> 通过。
- `npm --workspace web exec eslint src/app/admin/files/page.tsx src/app/admin/page.tsx src/app/admin/menus/page.tsx src/types/auth.ts --max-warnings=0` -> 通过。
- 风险与影响:
- 现有仓库仍包含大量其他未提交改动;本次仅在文件管理恢复相关文件完成闭环,未触及其他下线模块恢复。
- 若现网数据库已经移除历史 `menu`/`role_menu_rela` 数据,需要重启后触发 seed 才能自动补齐 `admin.files` 菜单和默认挂载。
## Work Log - ATP 仿真模型管理一期落地(2026-04-26)
- 背景:
- 用户确认按“ATPDraw 产物版本管理 + ATP 引擎调用”方案实现。
- 本次改动:
- 后端新增 ATP 模块(模型/版本/运行):
- 新增数据模型:
- `api/app/models/atp_model.py`
- `atp_model`(模型台账)
- `atp_model_version`(版本与产物元数据)
- `atp_simulation_run`(仿真运行记录)
- 新增 schema
- `api/app/schemas/atp_model.py`
- 新增服务:
- `api/app/services/atp_model_service.py`
- 模型 CRUD、版本管理、激活版本、运行记录查询
- ATP 引擎状态检查与同步执行落库(支持 `wine/native`
- 新增 API
- `api/app/api/v1/atp_models.py`
- 路由前缀:`/api/v1/atp/models`
- 关键端点:
- `GET /engine/status`
- `GET/POST/PATCH/DELETE /`
- `GET/POST/PATCH /{model_id}/versions*`
- `POST /{model_id}/versions/{version_id}/activate`
- `GET/POST /{model_id}/runs*`
- 后端接线与权限菜单:
- `api/app/api/router.py` 挂载 ATP 路由。
- `api/app/core/config.py` 新增 ATP 引擎配置:
- `atp_engine_mode`
- `atp_engine_executable`
- `atp_storage_root`
- `atp_engine_workdir`
- `atp_engine_default_timeout_seconds`
- `atp_engine_max_timeout_seconds`
- `api/app/models/__init__.py``api/app/core/database.py` 注册 ATP 模型。
- `api/app/services/seed_service.py` 新增权限:
- `atp.read` / `atp.manage` / `atp.run`
- 新增默认菜单 `admin.atp_models``/admin/power-lines/atp-viewer`
- `api/app/services/legacy_authz_service.py``legacy_admin_rbac_service.py``admin_service.py``topic_registry.py` 同步 ATP 菜单权限映射、受保护菜单与订阅主题(`admin.atp-models`)。
- 前端 ATP 页面升级:
- `web/src/app/admin/power-lines/atp-viewer/page.tsx`
- 从“纯查看器”升级为“模型台账 + 版本管理 + 仿真运行 + 文本转换预览”四块。
- 支持模型创建/编辑/删除、版本创建/激活、版本加载回编辑区、运行任务执行与日志查看。
- 保留 ATP 文本解析与 maxGraph 渲染能力。
- `web/src/types/auth.ts` 增加 ATP 模块类型定义。
- `web/src/app/admin/page.tsx` ATP 卡片升级为“ATP模型管理”,权限切到 `atp.*`
- `web/src/app/admin/power-lines/page.tsx` 线路页入口文案改为“ATP模型管理”,并按 `atp.*` 权限显示。
- `web/src/app/admin/menus/page.tsx` 新增 `admin.atp_models` 受保护菜单码。
- 验证:
- 后端:
- `python3 -m compileall api/app` -> 通过。
- 前端:
- `npm --workspace web exec tsc --noEmit --pretty false` -> 通过。
- `npm --workspace web exec eslint src/app/admin/power-lines/atp-viewer/page.tsx src/app/admin/page.tsx src/app/admin/menus/page.tsx src/types/auth.ts --max-warnings=0` -> 通过。
- `npm run build:web` -> 通过;路由包含 `/admin/power-lines/atp-viewer`
- 风险与影响:
- ATP 运行为同步执行(请求内完成),长耗时任务会占用 API worker;后续可升级为 Celery 异步执行。
- `atp_engine_executable` 默认值仅为占位,实际运行需按部署环境配置可执行 ATP 引擎路径。
## Work Log - 线路管理地图专题化为线路走向图(2026-04-26)
- 背景:
- 用户要求“线路管理页面的图用于展示线路在地图上的分布走向,不要通用地图功能”。
- 本次改动(A 方案,最小闭环):
- `web/src/components/power-line-cesium-map.tsx`
- Cesium Viewer 改为专题化初始化:显式 `baseLayer: false`,关闭 `skyBox/skyAtmosphere`,弱化通用地图能力。
- 保留线路业务核心可视化:按杆塔 `seq_no` 连线、杆塔点位、起点/终点标识。
- 新增线路走向专题控件:`按风险着色``显示塔号``居中重置`
- 新增走向统计信息:有效坐标数、缺失坐标数、断点段数、线路估算长度(Haversine)。
- 对缺失坐标导致的序号断档按分段折线绘制,避免误连成单条连续线路。
- `web/src/app/admin/power-lines/page.tsx`
- 视图切换文案由“地图”改为“走向图”。
- 当前视图状态文案同步改为“走向图”。
- 验证:
- `npm --workspace web exec tsc --noEmit --pretty false` -> 通过。
- 风险与影响:
- 本次仅修改前端展示逻辑,不涉及后端接口、权限、路由与数据库结构。
- 因专题化禁用了默认底图,视觉上会更偏“线路走向专题视图”;若后续需要叠加真实底图,应单独评估并显式配置地图源。
## Work Log - 打包镜像并发布线路走向图更新(2026-04-26)
- 背景:
- 用户要求执行“打包镜像并发布更新”。
- 本次执行:
- `docker compose build`
- `docker compose up -d`
- 验证:
- `docker compose ps``api/web/celery-worker/celery-beat/db/redis/minio` 均为 `Up``api/db/redis` healthy。
- `curl -fsS http://127.0.0.1:8000/health`:返回 `{"status":"ok","service":"fquiz-api","version":"0.1.0"}`
- `curl -I -fsS http://127.0.0.1:3000/`:返回 `HTTP/1.1 200 OK`
- `docker compose logs --tail=120 api`Uvicorn 启动完成,`/health` 返回 200。
- `docker compose logs --tail=100 web`Next.js Ready。
- `docker compose logs --tail=80 celery-worker`worker 连接 Redis 并 ready(保留 root 运行警告)。
- `docker compose logs --tail=80 celery-beat`beat 启动完成。
- 风险与影响:
- 本次为镜像重建与容器重启,存在短时服务切换窗口。
- `celery-worker` 仍以 root 运行,功能可用但生产化建议后续切换为非 root 用户。
## Work Log - ATP 文本转 JSON 并用 maxGraph 查看(2026-04-26
- 背景:
- 用户要求开发“ATP 转 JSON,然后给 maxGraph 渲染”的查看能力,重点是展示,不涉及仿真。
- 本次改动(前端最小闭环):
- 新增依赖:
- `web/package.json` 增加 `@maxgraph/core`
- 新增 ATP 解析能力:
- `web/src/lib/atp/types.ts`:定义 ATP 图 JSON 结构(nodes/edges/stats/warnings)。
- `web/src/lib/atp/parse-atp-text.ts`:实现 ATP 文本解析器(支持常见 `R1 BUS_A BUS_B 10``BUS_A BUS_B R 10` 两类行格式)。
- `web/src/lib/atp/sample.ts`:提供可直接试跑的 ATP 示例文本。
- 新增 maxGraph 只读渲染组件:
- `web/src/components/atp-maxgraph-viewer.tsx`:渲染节点/正交连线,支持适配视图与缩放,不提供编辑能力。
- 新增业务页面:
- `web/src/app/admin/power-lines/atp-viewer/page.tsx`:提供上传 ATP 文本、转换 JSON、JSON 预览、maxGraph 图形查看、导出 JSON。
- 增加入口:
- `web/src/app/admin/power-lines/page.tsx`:在“线路管理”卡片增加 `ATP查看器` 入口按钮。
- `web/src/app/admin/page.tsx`:后台首页新增 `ATP查看器` 卡片入口(沿用线路模块权限)。
- 验证:
- `npm --workspace web exec tsc --noEmit --pretty false` -> 通过。
- `cd web && npx eslint src/components/atp-maxgraph-viewer.tsx src/lib/atp/parse-atp-text.ts src/lib/atp/types.ts src/lib/atp/sample.ts src/app/admin/power-lines/atp-viewer/page.tsx` -> 通过。
- 构建产物确认:`web/.next/server/app/admin/power-lines/atp-viewer/page.js` 与相关 `rsc/html` 已生成。
- 风险与影响:
- 解析器当前是“查看优先”的通用文本解析,不覆盖 ATP/ATPDraw 全量语法;复杂模型卡、控制卡可能被忽略并进入 warnings。
- 本次不涉及后端 API/数据库改动,不影响现有线路与雷电业务接口。
## Work Log - 雷电模块补齐地面倾角计算链路(2026-04-26)
- 背景:
- 用户要求按“高程+坐标+3x3 邻域(Horn)”方案改造雷电分布统计中的地形倾角能力。
- 本次改动:
- 后端 schema 与响应扩展:
- `api/app/schemas/lightning.py`
- 新增 `LightningTowerTerrainMetrics`
- 新增 `LightningTowerTerrainComputeRequest/Response`
- `LightningTowerBufferStatsResponse` 增加 `terrain_metrics`
- 新增 `dem_grid_m` 的 3x3 校验
- 后端服务能力补齐:
- `api/app/services/lightning_service.py`
- 补齐 Horn 梯度、坡向、邻域坡度统计、分位数、线路方向纵横坡、质量评分、角差/方向导数等辅助函数。
- 新增 `compute_tower_terrain_metrics(...)`,支持:
- 基于 3x3 DEM 计算倾角/坡向/纵横坡/起伏量/暴露指数
- 可选按权限持久化到 `power_line_tower.raw_extra_json.terrain_metrics`
- `get_tower_buffer_stats(...)` 增加地形指标读取与风险修正(地形暴露指数参与 Ng 风险权重)
- 后端 API 新增:
- `api/app/api/v1/lightning.py`
- 新增 `POST /api/v1/lightning-currents/stats/tower-terrain`
- 权限:读权限可计算,`persist=true``tower.manage``lightning.manage`(或 admin
- 前端类型与展示:
- `web/src/types/auth.ts`
- 新增 `LightningTowerTerrainMetrics`
- 新增 `LightningTowerTerrainComputeRequest/Response`
- 扩展 `LightningTowerBufferStatsResponse.terrain_metrics`
- `web/src/app/admin/lightning-currents/page.tsx`
- 杆塔缓冲区结果区新增地形字段展示:倾角、坡向、暴露指数、纵/横坡、质量等级/评分、DEM 分辨率与来源
- 验证:
- `python3 -m py_compile api/app/services/lightning_service.py api/app/api/v1/lightning.py api/app/schemas/lightning.py` -> 通过。
- `npm --workspace web exec tsc --noEmit --pretty false` -> 通过。
- 风险与影响:
- 当前计算输入 DEM 由调用方提供(3x3 高程矩阵),尚未接入自动 DEM 切片检索;生产精度仍依赖上游 DEM 分辨率与采样质量。
- 杆塔缓冲区风险等级已引入地形暴露权重,可能导致部分杆塔风险分级相对旧口径发生变化。