Files
2026-06-09 00:01:15 +08:00

150 lines
9.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Work Log - 当前环境将线路管理菜单置顶(2026-06-08)
- 背景:
- 仓库代码已支持 `admin.power_lines` 菜单,但默认排序仍落在其他后台一级菜单之后。
- 用户要求在当前环境中让“线路管理”展示在后台菜单最前面。
- 本次处理:
- 当前环境数据库:
-`menus.code='admin.power_lines'``sort_order` 调整为 `0`
- 仓库代码:
- `api/app/services/seed_service.py`
- 将默认种子菜单中 `admin.power_lines``sort_order` 同步改为 `0`,避免后续补种回退。
- `MEMORY.md`
- 补充“线路管理默认置顶”的长期口径。
- 验证:
- 复核后台菜单排序后,`线路管理` 已位于一级菜单首位。
- 风险与关注点:
- 已登录后台的浏览器会话需要刷新页面后才会看到最新菜单顺序。
## Work Log - 放出后台剩余目录菜单并补齐保护(2026-06-08)
- 背景:
- 当前仓库默认菜单集合缺少 `admin.basic_data``admin.system_monitor``admin.system` 3 个目录菜单。
- `admin.fl_analysis` 已有完整页面,但旧权限映射与菜单保护集合仍未完全覆盖。
- 本次处理:
- `api/app/services/seed_service.py`
- 补齐上述 3 个目录菜单,并将其加入 `admin` 默认菜单绑定。
- `api/app/services/admin_service.py`
-`admin.system``admin.system_monitor``admin.basic_data``admin.fl_analysis``admin.fault_recurrence` 加入现代菜单删除保护集合。
- `api/app/services/legacy_admin_rbac_service.py`
-`admin.system``admin.system_monitor``admin.basic_data``admin.fl_analysis` 加入 legacy 受保护菜单集合。
- `api/app/services/legacy_authz_service.py`
- 补齐 `admin.fl_analysis` 的 legacy 权限映射。
- 验证:
- `git diff --check` 通过。
- `npm --workspace web exec tsc --noEmit` 通过。
- `npm --workspace web exec eslint src/app/admin/fl-analysis/page.tsx src/app/admin/fault-recurrence/page.tsx` 通过。
- Python 变更文件 AST 语法解析通过。
- 风险与关注点:
- `admin.basic_data``admin.system_monitor``admin.system` 仍为无 `path` 的目录菜单,只承担菜单树占位与分组作用。
## Work Log - 在共享后端镜像内置 Wine2026-06-08
- 背景:
- 新需求要求把 Wine 安装到 `fquiz-celery-worker`
- 当前仓库中 `celery-worker``api``celery-beat``flower` 复用同一个 `api/Dockerfile` / `${API_IMAGE}`,且后端已有 `/api/v1/wine/*` 直接探测与执行 Wine 的能力。
- 本次处理:
- `api/Dockerfile`
- 在系统依赖安装阶段加入 `wine`,并用 `command -v wine` 做镜像构建期存在性校验。
- `MEMORY.md`
- 将 Wine 口径从“运行环境自行安装”更新为“共享后端镜像已内置 Wine”。
- 验证:
- `python3 -c "import yaml; ..."` 解析 `deploy/dev-deploy/compose.yml``deploy/pro-deploy/compose.yml``.github/workflows/main.yml` 通过。
- `git diff --check` 通过。
- `python3 -m py_compile api/app/services/wine_service.py api/app/services/fl_analysis_external.py api/app/tasks/fl_analysis_tasks.py api/app/core/config.py` 通过。
- 当前执行环境无 `docker` 命令,未能本地实际跑 `docker compose build` / `docker compose config`
- 风险与关注点:
- 由于部署链路复用同一个后端镜像,本次会同时影响 `api/celery-worker/celery-beat/flower` 的基础镜像体积,而不只是 `celery-worker`
## Work Log - 修正 Wine 缺少 wine32 时的误报(2026-06-08
- 背景:
- 当前环境里 `wine --version` 会输出 `it looks like wine32 is missing`,但后端 `/api/v1/wine/status` 之前只按返回码判定,可能把半可用环境误报成“可用”。
- `ATP` 的 Wine 引擎状态也复用同一 Wine 二进制,存在同类误报风险。
- 本次处理:
- `api/app/services/wine_probe.py`
- 新增共享 Wine 探测 helper,统一将 `wine32 is missing` 识别为不可用状态。
- `api/app/services/wine_service.py`
- Wine 状态接口与测试执行前校验改为复用共享探测 helper。
- `api/app/services/atp_model_service.py`
- ATP Wine 引擎状态与执行前校验同步复用共享探测 helper。
- `api/Dockerfile`
- 构建阶段显式开启 `i386` 并安装 `wine32:i386`,避免镜像只装到半套 Wine 运行时。
- `api/tests/test_wine_probe.py`
- 新增针对 `wine32 is missing` 误报场景的最小单测。
- 验证:
- 变更前基线:`python3 -m pytest api/tests/test_fl_analysis_external.py``python3 -m pytest api/tests/test_fl_analysis_service.py` 因本地运行环境缺少 `pytest/sqlalchemy` 无法执行。
- 变更后执行:
- `python3 -m py_compile api/app/services/wine_probe.py api/app/services/wine_service.py api/app/services/atp_model_service.py api/tests/test_wine_probe.py` 通过。
- `./.venv/bin/python -m pytest api/tests/test_wine_probe.py` 通过(3 passed)。
- `git diff --check` 通过。
- 风险与关注点:
- 当前本地环境仍不具备完整后端依赖,无法直接回归所有 FastAPI/SQLAlchemy 相关测试;本次验证聚焦在 Wine 探测逻辑和语法层面。
## Work Log - 修复 ATP 文本上传中文乱码(2026-06-08
- 背景:
- `ATP文本转换与预览` 页面上传 `.atp/.txt` 文件时直接使用 `file.text()`,浏览器会按 UTF-8 解码。
- 现场 ATP 文件常见为 Windows 导出的 GBK/GB18030 文本,导致导入后编辑区和转换预览中的中文注释/名称乱码。
- 本次处理:
- `web/src/lib/text-file.ts`
- 新增前端文本解码工具,优先识别 BOM、兼容无 BOM 的 UTF-16,并在 UTF-8 严格解码失败时回退到 `GB18030`
- `web/src/app/admin/power-lines/atp-viewer/page.tsx`
- 上传 ATP 文本时改为基于 `arrayBuffer + TextDecoder` 自动判定编码,不再固定走 UTF-8。
- `web/src/lib/text-file.test.js`
- 补充最小测试,覆盖 `UTF-8``GB18030(兼容 GBK)`、无 BOM `UTF-16LE` 三类输入。
- 验证:
- 基线:`npm_config_cache=/tmp/npm-cache npm --workspace web exec tsc --noEmit` 通过;`npm_config_cache=/tmp/npm-cache npm --workspace web exec eslint src/app/admin/power-lines/atp-viewer/page.tsx` 通过。
- 修改后:
- `npm_config_cache=/tmp/npm-cache npm --workspace web exec tsc --noEmit`
- `npm_config_cache=/tmp/npm-cache npm --workspace web exec eslint src/app/admin/power-lines/atp-viewer/page.tsx src/lib/text-file.ts src/lib/text-file.test.js`
- `node --test web/src/lib/text-file.test.js`
- 风险与关注点:
- 已经以错误编码写入数据库的历史 ATP 文本不会被自动修复;本次修复只覆盖后续上传与预览入口。
## Work Log - 全局成功失败提示切换为右上角弹消息(2026-06-08)
- 背景:
- 后台多个页面仍把普通 CRUD 成功/失败提示渲染在页面顶部,占用列表与表单空间。
- 现有页面已经混用 Ant Design `message` 与顶部 `Alert`,交互不统一。
- 本次处理:
- `web/src/components/ui-antd.tsx`
- 为全局 Ant Design `message` 统一配置顶部偏移与默认停留时长。
- `web/src/app/globals.css`
-`message` 容器样式调整为右上角浮层展示。
- `web/src/hooks/use-toast-feedback.ts`
- 新增轻量 hook,用于把页面本地 `error/success` 状态统一转成右上角自动消失的提示。
- 后台页面:
- `users``system-params``wine-runner``lightning-currents``power-lines/atp-viewer`
- `roles``menus``files``tower-models``elevation``power-lines``fault-recurrence`
- 去掉顶部“操作成功/失败”提示条,改为右上角弹消息;保留权限不足、加载失败、解析提醒等需要常驻占位的 `Alert`
- 验证:
- 基线:
- 初次 `npm --workspace web exec tsc --noEmit --pretty false` 因当前环境缺少 `web/node_modules` 且默认 npm cache 不可写未能执行。
- 补装依赖后,基线 `NPM_CONFIG_CACHE=/tmp/fquiz-npm-cache npm --workspace web exec tsc --noEmit --pretty false` 通过。
- 修改后:
- `NPM_CONFIG_CACHE=/tmp/fquiz-npm-cache npm --workspace web exec tsc --noEmit --pretty false` 通过。
- `NPM_CONFIG_CACHE=/tmp/fquiz-npm-cache npm --workspace web exec eslint src/components/ui-antd.tsx src/hooks/use-toast-feedback.ts src/app/admin/users/page.tsx src/app/admin/system-params/page.tsx src/app/admin/wine-runner/page.tsx src/app/admin/lightning-currents/page.tsx src/app/admin/power-lines/atp-viewer/page.tsx src/app/admin/roles/page.tsx src/app/admin/menus/page.tsx src/app/admin/files/page.tsx src/app/admin/tower-models/page.tsx src/app/admin/elevation/page.tsx src/app/admin/power-lines/page.tsx src/app/admin/fault-recurrence/page.tsx`
- 仅剩仓库原有 warning`users`/`tower-models` 的 hooks 依赖与 `img` 提示),无新增 error。
- `git diff --check` 通过。
- 风险与关注点:
- 本次只统一“瞬时成功/失败反馈”;权限态、加载态、解析告警等长驻提示仍保留 `Alert`,属于有意设计,不是遗漏。