57fbdbf25a
Co-authored-by: multica-agent <github@multica.ai>
36 KiB
36 KiB
Work Log - 菜单管理页面一致性优化(FL-151)
-
背景:
- 菜单管理页需要继续对齐用户管理页的消息反馈、筛选表单、空态与表格滚动配置规范。
-
本次处理:
- 移除菜单管理页对
App.useApp()的依赖,创建、编辑、删除结果统一走error/successstate +useToastFeedback。 - 桌面筛选表单项由 Tailwind
min-w-*改为与用户管理页一致的style={{ width: ... }}。 - 表格空态
Empty属性顺序调整为image在前、description在后。 - 移除菜单表格
scroll.x,仅保留纵向滚动配置,与用户管理页保持一致。
- 移除菜单管理页对
-
验证:
- 基线:
npm --workspace web exec eslint src/app/admin/menus/page.tsx通过。 - 基线:
npm --workspace web exec tsc --noEmit通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/menus/page.tsx通过。 - 修改后:
npm --workspace web exec tsc --noEmit通过。
- 基线:
-
风险与关注点:
- 改动仅影响菜单管理页前端展示与提示机制,不改变菜单接口、字段结构或权限语义。
Follow-up - 菜单管理页 React Query 架构对齐(FL-151)
-
背景:
- 评审继续指出菜单管理页仍使用手动
useState+loadMenus数据管理,与用户管理页 React Query 架构不一致。
- 评审继续指出菜单管理页仍使用手动
-
本次处理:
- 菜单列表查询改为
useQuery,由menusQuery承接 loading、error、数据与 total。 - 创建、编辑、删除、启用/禁用改为
useMutation,并通过queryClient.refetchQueries刷新菜单数据。 activeKeyword统一命名为searchKeyword,移除手动loading/saving/menus/menuTotalstate。- 实时订阅改为
queryClient.invalidateQueries({ queryKey: ["admin.menus"] })。 - 错误反馈改为组合本地错误与
menusQuery.error后交给useToastFeedback。
- 菜单列表查询改为
-
验证:
- 基线:
npm --workspace web exec eslint src/app/admin/menus/page.tsx通过。 - 基线:
npm --workspace web exec tsc --noEmit通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/menus/page.tsx通过。 - 修改后:
npm --workspace web exec tsc --noEmit通过。
- 基线:
-
风险与关注点:
- 改动仅迁移菜单管理页前端数据管理架构,不改变
/api/v1/admin/menus*接口路径、请求字段或权限语义。
- 改动仅迁移菜单管理页前端数据管理架构,不改变
Follow-up - 菜单管理页细节一致性补齐(FL-151)
-
背景:
- 复查继续指出菜单管理页在筛选宽度、移动卡片间距、编辑弹窗标题、导入顺序、表格列类型、状态命名和筛选语义等细节上仍未完全对齐用户管理页。
-
本次处理:
- 菜单页 import 顺序调整为 React Query、Ant Design、Icons、
antd/es/table类型、Next Link、React hooks 的顺序。 - 表格列类型改为
ColumnsType<MenuItem>,并将columns从useMemo改为普通常量数组。 - 关键词输入 state 从
keyword改为keywordInput,桌面关键词宽度改为260px。 - 状态筛选改为
undefined表示“全部”,对齐用户页的statusFilter语义。 - 移动端卡片容器移除显式
mt-4,对齐用户页间距处理。 - 编辑菜单弹窗标题补充当前菜单名称和 ID;移动端删除确认改为下拉项内联
Modal.confirm。 - 权限变量定义顺序调整为先
canManage,后canRead。
- 菜单页 import 顺序调整为 React Query、Ant Design、Icons、
-
验证:
- 基线:
npm --workspace web exec eslint src/app/admin/menus/page.tsx通过。 - 基线:
npm --workspace web exec tsc --noEmit因既有src/app/admin/elevation-records/page.tsx类型错误失败,菜单页无报错。 - 修改后:
npm --workspace web exec eslint src/app/admin/menus/page.tsx通过。 - 修改后:
npm --workspace web exec tsc --noEmit --pretty false仍仅因既有src/app/admin/elevation-records/page.tsx类型错误失败,菜单页无报错。
- 基线:
-
风险与关注点:
- 改动仅涉及菜单管理页前端一致性细节,不改变后端接口、权限判断或菜单 CRUD 请求语义。
Work Log - 角色管理页对齐用户管理页规范(FL-152)
-
背景:
- 角色管理页需对齐用户管理页的后台列表页布局、移动卡片、操作区换行和反馈规范。
-
本次处理:
- 角色表格操作区改为与用户管理页一致的
Space wrap,避免小屏或窄列下按钮挤压。 - 角色移动卡片标题改为名称 + 编码横向信息结构,并补齐“角色编码 / 角色名称 / 菜单”字段网格,视觉和信息密度对齐用户移动卡片。
- 角色菜单多选保留现有接口与字段结构,不改动后端 RBAC 合约。
- 角色表格操作区改为与用户管理页一致的
-
验证:
- 基线:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/roles/page.tsx通过,仅用户页存在 1 条既有 unused eslint-disable warning。 - 修改后:
npm --workspace web exec eslint src/app/admin/roles/page.tsx --max-warnings=0通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/roles/page.tsx通过,仍仅用户页 1 条既有 warning。 - 修改后:
npm --workspace web exec tsc --noEmit通过。
- 基线:
-
风险与关注点:
- 改动仅影响角色管理页前端展示与交互排布,不改变接口路径、请求/响应字段、权限判断或角色 CRUD 语义。
Follow-up - 角色管理页细节一致性补齐(FL-152)
-
背景:
- 评审继续指出角色管理页在搜索文案、角色编码校验、移动端操作丰富度等方面仍与用户管理页存在细节差异。
-
本次处理:
- 搜索占位文案统一为“按角色编码/名称/菜单搜索”,对齐用户管理页“按...搜索”的表达方式。
- 新建角色表单新增角色编码格式校验、500ms 防抖重复检查和提交前重复检查,复用现有
/api/v1/admin/roles列表接口做精确 code 命中判断。 - 角色移动卡片更多菜单补齐“编辑”和“查看菜单”,删除仍使用
Modal.confirm,保持与用户卡片的操作入口组织方式一致。 - 确认角色 schema 仅包含
code/name/permission_codes/menu_ids,无status字段,因此未新增状态筛选器,避免引入未支持的数据模型语义。
-
验证:
- 基线:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/roles/page.tsx通过,仅用户页存在 1 条既有 unused eslint-disable warning。 - 修改后:
npm --workspace web exec eslint src/app/admin/roles/page.tsx --max-warnings=0通过。 - 修改后:
npm --workspace web exec tsc --noEmit通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/roles/page.tsx通过,仍仅用户页 1 条既有 warning。
- 基线:
-
风险与关注点:
- 角色编码重复检查依赖现有角色列表 keyword 查询做前端预检查;服务端创建接口和数据库唯一约束仍是最终一致性保护。
- 改动仅影响角色管理页前端,不改变后端接口、schema 或权限语义。
Work Log - 系统参数管理页一致性优化(FL-153)
-
背景:
- 系统参数管理页需要对齐用户管理页的列表布局、权限呈现、移动卡片、反馈校验与分页交互规范。
-
本次处理:
- 系统参数页新建入口改为仅
system_param.manage权限可见,保持只读权限下的页面呈现与实际操作权限一致。 - 表格配置对齐用户管理页:
tableLayout="fixed"、仅纵向滚动、空态属性顺序、加载态和分页最小 total 处理保持一致。 - 移动卡片状态 Tag 文案与颜色对齐用户管理页,并补齐 card view 数据累积的
requestAnimationFrame时序处理。 - 新建/编辑弹窗补齐
autoComplete="off"、字段长度规则、参数键防抖重复检查和提交前重复检查。 - 后端系统参数列表接口补齐
limit/offset查询参数并在 service 层实际分页,修复前端分页参数此前未生效的问题。 - 新增
api/tests/test_system_param_service.py覆盖系统参数列表分页与筛选后分页行为。
- 系统参数页新建入口改为仅
-
验证:
- 基线:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/system-params/page.tsx通过,仅用户页存在 1 条既有 unused eslint-disable warning。 - 基线:
npm --workspace web exec tsc --noEmit通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/system-params/page.tsx --max-warnings=0通过。 - 修改后:
npm --workspace web exec tsc --noEmit通过。 - 修改后:
python3 -m py_compile api/app/api/v1/system_params.py api/app/services/system_param_service.py api/tests/test_system_param_service.py通过。 - 修改后:
UV_PYTHON_INSTALL_DIR=/tmp/fquiz-uv-python uv run --cache-dir /tmp/fquiz-uv-cache --python 3.11 --with fastapi --with pydantic-settings --with sqlalchemy --with PyJWT --with argon2-cffi --with email-validator --with bcrypt -m unittest api.tests.test_system_param_service通过。
- 基线:
-
风险与关注点:
- 改动涉及系统参数列表接口分页契约,但不改变请求/响应字段结构、权限码或 CRUD 语义。
- 当前本机
python3为 3.7.9,不满足api/pyproject.toml的requires-python >=3.10;后端单测使用uv管理的 Python 3.11 环境验证。
Work Log - 系统消息页面一致性优化(FL-154)
-
背景:
- 系统消息页面需对齐用户管理页的后台列表页布局、动态表格高度、移动卡片视图和无限滚动交互。
-
本次处理:
- 系统消息页补齐表格 body 最小高度 CSS 钩子,动态
scroll.y对应的 CSS 变量现已生效。 - 移动端卡片视图改为与用户管理页一致的容器、空态、卡片视觉和字段网格样式,移除卡片字段内散落的内联间距。
- 移动卡片累积列表改为
requestAnimationFrame内更新,避免 React hooks lint 的同步 effect 更新错误;筛选切换直接重置卡片分页和累积数据。 - 系统消息列表 API 增加可选
message_type查询参数,服务端按类型/未读状态返回匹配items与total,保证移动端无限滚动的 total 与当前筛选一致;unread_count仍保持用户全局未读数。 - 补充系统消息服务层测试覆盖类型筛选后的 total 行为。
- 系统消息页补齐表格 body 最小高度 CSS 钩子,动态
-
验证:
- 基线:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/system-messages/page.tsx失败,系统消息页存在 2 个react-hooks/set-state-in-effect既有错误;用户页存在 1 条既有 unused eslint-disable warning。 - 基线:
npm --workspace web exec tsc --noEmit通过。 - 基线:
python -m pytest api/tests/test_system_message_service.py api/tests/test_system_message_schema.py因系统python缺少 pytest 无法执行。 - 修改后:
npm --workspace web exec eslint src/app/admin/system-messages/page.tsx --max-warnings=0通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/system-messages/page.tsx通过,仍仅用户页 1 条既有 warning。 - 修改后:
npm --workspace web exec tsc --noEmit通过。 - 修改后:
UV_CACHE_DIR=/tmp/fquiz-uv-cache UV_PYTHON_INSTALL_DIR=/tmp/fquiz-uv-python /home/jenkins/.local/bin/uv run --python 3.11 --with pytest --with fastapi --with pydantic-settings --with sqlalchemy --with PyJWT --with argon2-cffi --with email-validator --with python-multipart --with psycopg[binary] pytest api/tests/test_system_message_service.py api/tests/test_system_message_schema.py通过,4 passed,存在 1 条既有 SQLAlchemy relationship warning。
- 基线:
-
风险与关注点:
/api/v1/system-messages/me新增可选message_type参数,未传参时保持原列表语义;前端不再做本地类型过滤,分页 total 与服务端过滤结果一致。- 改动影响系统消息列表展示与筛选,不改变创建、删除、标记已读接口字段。
Work Log - 菜单管理页面最终细节对齐(FL-155)
-
背景:
- 菜单管理页需要补齐启用/禁用 mutation 组织、移动卡片字段列宽和加载完成提示条件三处细节,与用户管理页保持一致。
-
本次处理:
- 菜单启用/禁用移除独立
updateMenuStatusMutation,改为复用updateMenuMutation通过PATCH /api/v1/admin/menus/{menuId}提交{ status }。 .admin-menus-menu-card-field标签列宽从72px调整为64px。- 移动卡片“已加载全部”提示条件简化为
allLoadedMenus.length >= menuTotal && allLoadedMenus.length > 0。
- 菜单启用/禁用移除独立
-
验证:
- 基线:
npm --workspace web exec tsc --noEmit通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/menus/page.tsx --max-warnings=0通过。 - 修改后:
npm --workspace web exec tsc --noEmit通过。
- 基线:
-
风险与关注点:
- 改动仅影响菜单管理页前端数据 mutation 组织和移动端展示条件,不改变接口路径、请求/响应字段或权限语义。
Work Log - Worker监控页面一致性优化(FL-157)
-
背景:
- Worker监控页需对齐用户管理页的后台列表页外层卡片、筛选表单、表格空态、移动端卡片和反馈规范。
-
本次处理:
- Worker监控页外层容器改为与用户管理页一致的
page-cardflex 布局,筛选项改为固定宽度表单项,自动刷新与刷新操作收口到标题右侧。 - 桌面表格对齐用户页:启用
tableLayout="fixed"、统一 loading / pagination / Empty 写法,仅保留纵向动态滚动。 - 新增移动端卡片视图,按用户页卡片规范展示执行节点、状态、队列、并发/预取、任务统计、累计处理、注册任务和最近心跳。
- 错误反馈改为
useToastFeedback,并复用任务监控展示工具统一任务状态、来源、队列名、运行时长和 Flower 错误文案。 - Worker 任务明细抽屉保留原有分组和数据来源,仅统一表头文案、任务标签和空态。
- Worker监控页外层容器改为与用户管理页一致的
-
验证:
- 基线:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/workers/page.tsx通过,仅用户页存在 1 条既有 unused eslint-disable warning。 - 基线:
npm --workspace web exec tsc --noEmit通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/workers/page.tsx --max-warnings=0通过。 - 修改后:
npm --workspace web exec tsc --noEmit通过。
- 基线:
-
风险与关注点:
- 改动仅影响
/admin/workers前端展示与交互排布,不改变 Flower 代理接口路径、请求/响应字段或celery.read/celery.manage权限语义。
- 改动仅影响
Follow-up - Worker监控移动卡片间距对齐(FL-157)
-
背景:
- 复审指出
.admin-workers-card-view比.admin-users-card-view多了margin-top: 16px,导致移动端卡片视图顶部间距不一致。
- 复审指出
-
本次处理:
- 删除
.admin-workers-card-view的margin-top: 16px,使 Worker 监控移动端卡片容器与用户管理页完全一致。
- 删除
-
验证:
- 修改后:
git diff --check通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/workers/page.tsx --max-warnings=0通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/workers/page.tsx通过,仍仅用户页 1 条既有 unused eslint-disable warning。 - 修改后:
npm --workspace web exec tsc --noEmit未通过;失败均来自当前dev上未改动的src/app/admin/elevation-records/page.tsx类型错误,与本次 CSS 间距修复无关。
- 修改后:
-
风险与关注点:
- 改动仅移除 Worker 监控移动卡片容器的额外顶部间距,不影响接口、权限、表格、抽屉或数据筛选逻辑。
Work Log - 高程文件记录服务导入修复(FL-213)
-
背景:
- API 容器启动时报
elevation_file_record_service无法从elevation_service导入_build_dataset_or_400,导致容器反复重启。
- API 容器启动时报
-
本次处理:
- 移除
api/app/services/elevation_file_record_service.py中未使用且不存在的_build_dataset_or_400导入。 - 新增
api/tests/test_elevation_file_record_service_imports.py,用 AST 检查elevation_file_record_service从elevation_service导入的符号均在目标模块作用域存在,防止同类启动期 ImportError 回归。
- 移除
-
验证:
- 基线:
PYTHONPATH=api python3 -c 'from app.services import elevation_file_record_service'因本地未安装sqlalchemy提前失败;随后使用uv准备完整 API 依赖时耗时过长,未作为有效基线。 - 修改后:
python3 -m unittest api.tests.test_elevation_file_record_service_imports通过。 - 修改后:
python3 -m py_compile api/app/services/elevation_file_record_service.py api/app/services/elevation_service.py api/tests/test_elevation_file_record_service_imports.py通过。 - 修改后:
git diff --check通过。
- 基线:
-
风险与关注点:
- 改动仅删除未使用导入并补充静态回归测试,不改变高程文件记录接口、任务派发、分析或地形瓦片生成逻辑。
Work Log - 任务监控页面一致性优化(FL-156)
-
背景:
- 任务监控页需要按用户管理页的后台列表页规范补齐布局、筛选、反馈、空态、表格和移动端呈现一致性。
-
本次处理:
- 任务监控页接入
useMobileDetection,桌面保留表格视图,移动端切换为与用户管理页一致的卡片视图和字段网格。 - 错误提示由页面内
Alert改为useToastFeedback,对齐用户管理页的消息反馈方式。 - 桌面筛选表单项由 Tailwind
min-w-*改为固定style={{ width: ... }},并保持移动端纵向筛选。 - 表格配置补齐
tableLayout="fixed"、loading、统一空态属性顺序,并移除强制横向滚动,继续使用动态纵向滚动高度。 - 全局样式补齐任务监控页面卡片、移动卡片、暗色主题和字段列宽规范,与用户管理页保持一致。
- 补齐
webworkspace 的 Linux arm64 Tailwind/lightningcss 原生可选依赖锁定,并同步web/package-lock.json,修复当前 arm64 环境下npm run build:web缺少lightningcss.linux-arm64-gnu.node的构建问题。
- 任务监控页接入
-
验证:
- 基线:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/task-monitor/page.tsx通过,仅用户页存在 1 条既有 unused eslint-disable warning。 - 基线:
npm --workspace web exec tsc --noEmit通过。 - 基线:
node --experimental-strip-types web/src/lib/task-monitor-display.test.js通过,4 passed,存在既有 MODULE_TYPELESS_PACKAGE_JSON warning。 - 修改后:
npm --workspace web exec eslint src/app/admin/task-monitor/page.tsx --max-warnings=0通过。 - 修改后:
npm --workspace web exec tsc --noEmit通过。 - 修改后:
node --experimental-strip-types web/src/lib/task-monitor-display.test.js通过,4 passed,仍存在既有 MODULE_TYPELESS_PACKAGE_JSON warning。 - 修改后:
npm run build:web通过;过程中仍有既有 Next workspace root / middleware deprecation warning。
- 基线:
-
风险与关注点:
- 改动仅影响任务监控页前端展示、筛选布局、错误反馈和移动端呈现,不改变
/api/v1/admin/flower/*接口路径、请求/响应字段或权限语义。 web/package-lock.json此次同步了web/package.json已有依赖条目,变动较大但不改变业务代码。
- 改动仅影响任务监控页前端展示、筛选布局、错误反馈和移动端呈现,不改变
Follow-up - 任务监控页分页和空态细节对齐(FL-156)
-
背景:
- 复核发现任务监控页表格分页、移动卡片顶部间距和筛选空态文案仍与用户管理页存在细节差异。
-
本次处理:
- 任务监控页新增与用户管理页一致的表格分页 state,默认
pageSize调整为 20,并补齐current、total、onChange。 - 表格分页选项改为
[10, 20, 50, 100],showTotal改为读取筛选后的任务总数。 - 筛选项变更和重置筛选时将表格分页复位到第一页。
- 移除
.admin-task-monitor-card-view的margin-top: 16px,与.admin-users-card-view对齐。 - 表格和卡片筛选空态文案统一为“未找到符合筛选条件的任务。”。
- 任务监控页新增与用户管理页一致的表格分页 state,默认
-
验证:
- 基线:
npm --workspace web exec eslint src/app/admin/task-monitor/page.tsx --max-warnings=0通过。 - 基线:
npm --workspace web exec tsc --noEmit失败于既有src/app/admin/elevation-records/page.tsx类型错误。 - 修改后:
npm --workspace web exec eslint src/app/admin/task-monitor/page.tsx --max-warnings=0通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/task-monitor/page.tsx通过,仍仅用户页 1 条既有 unused eslint-disable warning。 - 修改后:
node --experimental-strip-types web/src/lib/task-monitor-display.test.js通过,4 passed,仍有既有 MODULE_TYPELESS_PACKAGE_JSON warning。 - 修改后:
npm run build:web编译通过但类型检查失败,失败点仍为既有src/app/admin/elevation-records/page.tsx的useAuth().api等类型错误。
- 基线:
-
风险与关注点:
- 改动仅影响任务监控页前端分页、筛选复位、空态文案和卡片间距,不改变接口、权限或任务数据转换逻辑。
Work Log - ATP 模型管理页面一致性优化(FL-158)
-
背景:
- ATP 模型管理页需要对齐用户管理页的反馈机制、表格分页、移动卡片和操作入口规范。
-
本次处理:
- ATP 模型页移除
App.useApp()与页面内Alert,统一改为error/successstate +useToastFeedback。 - ATP 资产列表接口补齐
limit/offset查询参数,服务层在筛选后分页并保持total为当前筛选总数。 - ATP 资产服务补齐
arrester_config的创建、更新与序列化,保证页面必填字段能被持久化和回显。 - 表格对齐用户管理页:
tableLayout="fixed"、仅纵向滚动、服务端分页、空态文案、状态 Tag 展示和操作列宽度。 - 移动端卡片对齐用户管理页:搜索表单布局、卡片标题状态、右上角编辑/更多菜单、字段网格、累积加载与已加载全部提示。
- 新增
test_list_assets_paginates_after_filtering覆盖 ATP 资产列表筛选后分页行为。
- ATP 模型页移除
-
验证:
- 基线:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/atp-models/page.tsx通过,仅存在用户页 1 条既有 unused eslint-disable warning;ATP 页有 6 条既有 warning。 - 基线:
npm --workspace web exec tsc --noEmit通过。 - 基线:
python3 -m py_compile api/app/api/v1/atp_assets.py api/app/services/atp_asset_service.py api/tests/test_atp_asset_service.py通过。 - 基线:
python3 -m pytest api/tests/test_atp_asset_service.py因系统 Python 缺少fastapi无法收集测试。 - 修改后:
npm --workspace web exec eslint src/app/admin/atp-models/page.tsx --max-warnings=0通过。 - 修改后:
npm --workspace web exec tsc --noEmit通过。 - 修改后:
python3 -m py_compile api/app/api/v1/atp_assets.py api/app/services/atp_asset_service.py api/tests/test_atp_asset_service.py通过。 - 修改后:
UV_CACHE_DIR=/tmp/fquiz-uv-cache UV_PYTHON_INSTALL_DIR=/tmp/fquiz-uv-python /home/jenkins/.local/bin/uv run --python 3.11 --with pytest --with fastapi --with pydantic-settings --with sqlalchemy --with PyJWT --with argon2-cffi --with email-validator --with python-multipart --with psycopg[binary] pytest api/tests/test_atp_asset_service.py通过,5 passed,存在 1 条既有 SQLAlchemy relationship warning。 - 修改后:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/atp-models/page.tsx通过,仍仅用户页 1 条既有 warning。
- 基线:
-
风险与关注点:
/api/v1/atp/assets新增可选limit/offset参数;未传参默认返回前 50 条,响应字段不变。- ATP 资产创建/更新现在会按既有 schema 持久化
arrester_config,修复此前前端提交但服务层丢弃该字段的问题。 - 改动不改变 ATP 模型删除、版本、运行接口字段或权限语义。
Follow-up - 角色管理页弹窗与分页细节对齐(FL-152)
-
背景:
- 评审继续指出角色管理页 Modal 宽度、分页 total 处理方式仍与用户管理页存在可消除的实现差异。
-
本次处理:
- 移除角色管理页 Modal 的
width={760},恢复 AntD 默认宽度,与用户管理页弹窗保持一致。 - 角色表格分页
total改为Math.max(rolesQuery.data?.roles_total ?? 0, 1),showTotal改为读取查询 total,与用户管理页现有实现一致。 - 复核角色卡片下拉菜单顺序,当前为“查看菜单 → 删除”,删除已在最后,无需额外调整。
- 移除角色管理页 Modal 的
-
验证:
- 修改后:
npm --workspace web exec eslint src/app/admin/roles/page.tsx --max-warnings=0通过。 - 修改后:
npm --workspace web exec tsc --noEmit通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/roles/page.tsx通过,仍仅用户页 1 条既有 unused eslint-disable warning。
- 修改后:
-
风险与关注点:
- 改动仅影响角色管理页前端弹窗尺寸和分页展示逻辑,不改变接口、schema、权限或 CRUD 语义。
Work Log - 系统日志页面一致性优化(FL-160)
-
背景:
- 系统日志页面需要严格对齐用户管理页的页面外层卡片、筛选表单、表格滚动和移动端卡片规范。
-
本次处理:
- 系统日志页外层容器改为与用户管理页一致的
min-h-0 flex-1页面结构,并补齐.admin-syslog-page-cardflex 布局样式。 - 桌面筛选表单项由 Tailwind
min-w-*改为固定style={{ width: 260 }},与用户管理页筛选布局口径一致。 - 表格配置补齐
tableLayout="fixed"、分页最小 total 处理,并移除横向滚动,仅保留动态纵向滚动。 - 移动端日志卡片补齐与用户卡片一致的卡片头、标题信息、字段网格、详情省略提示和卡片头部主题样式。
- 系统日志页外层容器改为与用户管理页一致的
-
验证:
- 基线:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/syslog/page.tsx通过,仅用户页存在 1 条既有 unused eslint-disable warning。 - 基线:
npm --workspace web exec tsc --noEmit通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/syslog/page.tsx --max-warnings=0通过。 - 修改后:
npm --workspace web exec tsc --noEmit通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/syslog/page.tsx通过,仍仅用户页 1 条既有 warning。
- 基线:
-
风险与关注点:
- 改动仅影响
/admin/syslog前端展示、筛选排布、表格滚动和移动卡片视觉,不改变/api/v1/admin/audit-logs接口路径、请求/响应字段或权限语义。
- 改动仅影响
Work Log - 杆塔模型管理页面一致性优化(FL-159)
-
背景:
- 杆塔模型管理页需要对齐用户管理页的列表布局、筛选分页、反馈提示、移动卡片和表格滚动规范。
-
本次处理:
- 杆塔模型列表接口补齐
limit/offset查询参数,service 层按筛选条件统计total后再分页返回items。 - 前端
/admin/tower-models列表请求改为由关键词、状态筛选和分页状态共同驱动,移动端无限滚动改为服务端分页累积数据。 - 成功/失败提示统一走
success/errorstate +useToastFeedback,移除页面内直接调用App.useApp().message的分散反馈方式。 - 表格对齐用户管理页:
tableLayout="fixed"、仅纵向滚动、180px 最小表格体高度、操作区Space wrap、状态 Tag 颜色统一为green/default。 - 移动卡片字段列宽从
72px调整为64px,模型图片预览缩略图切换为 AntDImage包装以消除页面级<img>lint 警告。 - 新增
api/tests/test_tower_model_service.py覆盖杆塔模型列表分页与筛选后分页行为。 - 为通过全量 Next build 类型门禁,同步补齐后台页面 AntD
Card包装组件的 ref 类型,并修正线路参数页少量 JSX 展示值类型。
- 杆塔模型列表接口补齐
-
验证:
- 基线:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/tower-models/page.tsx通过,存在用户页 1 条既有 unused eslint-disable warning 与塔模型页 1 条既有 no-img-element warning。 - 基线:
npm --workspace web exec tsc --noEmit --pretty false通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/tower-models/page.tsx --max-warnings=0通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/tower-models/page.tsx通过,仍仅用户页 1 条既有 warning。 - 修改后:
npm --workspace web exec tsc --noEmit --pretty false通过。 - 修改后:
UV_CACHE_DIR=/tmp/fquiz-uv-cache UV_PYTHON_INSTALL_DIR=/tmp/fquiz-uv-python /home/jenkins/.local/bin/uv run --python 3.11 --with fastapi --with pydantic-settings --with sqlalchemy --with PyJWT --with argon2-cffi --with email-validator --with python-multipart --with psycopg[binary] -m unittest api.tests.test_tower_model_service通过,存在 1 条既有 SQLAlchemy relationship warning。 - 修改后:
npm run build:web通过,仍输出既有 multiple lockfiles 与 middleware/proxy 迁移提示。
- 基线:
-
风险与关注点:
- 改动涉及
GET /api/v1/tower-models列表分页契约,未改变响应字段、CRUD 字段、权限码或图片上传/预览接口。
- 改动涉及
Follow-up - 系统日志筛选交互细节对齐(FL-160)
-
背景:
- 评审继续指出系统日志页仍保留“查询/重置筛选”按钮,和用户管理页的 500ms 防抖自动搜索模式不一致。
-
本次处理:
- 移除系统日志页桌面端和移动端的“查询”“重置筛选”按钮,筛选完全依赖输入框 500ms 防抖自动触发。
- 移动端保留多个筛选字段的 label,但移除按钮组,并将末尾表单项
marginBottom对齐为 0。 - 表格 loading 从
logsQuery.isFetching改为logsQuery.isLoading,对齐用户管理页初次加载态口径。 - 表格分页补齐
showSizeChanger: true与[10, 20, 50, 100],并让请求limit跟随分页 pageSize。 - 表格和移动卡片空态文案统一为“未找到符合筛选条件的日志记录。”。
-
验证:
- 基线:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/syslog/page.tsx通过,仅用户页存在 1 条既有 unused eslint-disable warning。 - 基线:
npm --workspace web exec tsc --noEmit --pretty false失败,失败点均在既有src/app/admin/elevation-records/page.tsx,与系统日志页无关。 - 修改后:
npm --workspace web exec eslint src/app/admin/syslog/page.tsx --max-warnings=0通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/syslog/page.tsx通过,仍仅用户页 1 条既有 warning。 - 修改后:
npm --workspace web exec tsc --noEmit --pretty false仍失败于既有src/app/admin/elevation-records/page.tsx。 - 修改后:
npm run build:web编译通过后在 TypeScript 阶段失败于同一既有src/app/admin/elevation-records/page.tsx:91。
- 基线:
-
风险与关注点:
- 改动仅影响
/admin/syslog前端筛选交互、分页展示和空态文案,不改变/api/v1/admin/audit-logs字段或权限语义。 - 当前 dev 分支存在 unrelated
elevation-recordsTypeScript 错误,会阻断全量tsc与next build。
- 改动仅影响
Follow-up - 系统参数状态修改交互对齐(FL-153)
-
背景:
- 复核指出系统参数页状态修改仍在编辑弹窗内完成,而用户管理页状态修改通过行内 Dropdown 独立完成。
-
本次处理:
- 系统参数编辑弹窗移除“状态”字段,编辑保存仅更新参数名称、参数值和说明。
- 表格行与移动卡片的更多菜单补齐“启用/禁用”独立操作,状态切换走单独 PATCH 请求和行级 loading。
- 新建参数仍默认创建为
enabled,保持原创建语义不变。
-
验证:
- 修改后:
npm --workspace web exec eslint src/app/admin/system-params/page.tsx --max-warnings=0通过。 - 修改后:
npm --workspace web exec tsc --noEmit通过。
- 修改后:
-
风险与关注点:
- 改动仅影响系统参数页前端交互组织方式,不改变后端接口字段、权限码或参数状态语义。
Work Log - 高程文件记录页构建修复(FL-212)
-
背景:
- CI 在
web/src/app/admin/elevation-records/page.tsxTypeScript 阶段失败,原因是页面仍按旧接口读取useAuth().api。
- CI 在
-
本次处理:
- 高程文件记录页请求链路改为使用当前
AuthContextValue暴露的fetchWithAuth。 - 将高程记录、线路列表、上传、删除、分析、地形生成、回填和预览请求统一对齐
/api/v1/...路径。 - 补齐页面内响应类型、错误处理 helper,并修正同页残留的 AntD
Card/Select.Option/ Cesium 预览 props 类型问题。
- 高程文件记录页请求链路改为使用当前
-
验证:
- 基线:
npm run build:web复现失败,错误为Property 'api' does not exist on type 'AuthContextValue'。 - 修改后:
npm --workspace web exec eslint src/app/admin/elevation-records/page.tsx --max-warnings=0通过。 - 修改后:
npm run build:web通过,仍仅输出既有 multiple lockfiles 与 middleware/proxy 迁移提示。
- 基线:
-
风险与关注点:
- 改动仅影响
/admin/elevation-records前端请求与类型适配,不改变后端接口字段、权限码或数据模型。
- 改动仅影响
Follow-up - 角色管理页分页交互与 effect 顺序对齐(FL-152)
-
背景:
- 评审继续指出角色管理页表格分页
onChange混入卡片视图状态更新,且清理 effect 顺序与用户管理页不同。
- 评审继续指出角色管理页表格分页
-
本次处理:
- 表格分页
onChange仅保留setPagination({ current: page, pageSize }),移除setCardViewPage(page)与setAllLoadedRoles([]),避免表格分页触发卡片视图状态更新。 - 将角色页 timeout cleanup effect 移到 resize/ResizeObserver effect 之前,对齐用户管理页 hook 排列。
- 复核角色卡片更多菜单,当前仍为“查看菜单 → 删除”,删除已位于最后,无需改动。
- 表格分页
-
验证:
- 基线:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/roles/page.tsx通过,仅用户页 1 条既有 unused eslint-disable warning。 - 基线:
npm --workspace web exec tsc --noEmit通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/roles/page.tsx --max-warnings=0通过。 - 修改后:
npm --workspace web exec tsc --noEmit通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/roles/page.tsx通过,仍仅用户页 1 条既有 unused eslint-disable warning。
- 基线:
-
风险与关注点:
- 改动仅影响角色管理页前端表格分页回调和 hook 组织顺序,不改变接口、schema、权限或 CRUD 语义。
Follow-up - 任务监控页移动端无限滚动对齐(FL-156)
-
背景:
- 复核指出任务监控页移动端卡片一次性渲染全部筛选任务,缺少与用户管理页一致的卡片分页累积、滚动加载和加载更多状态。
-
本次处理:
- 任务监控页补齐
cardViewPage、allLoadedTasks、isLoadingMore和pageCardRef,与用户管理页移动卡片基础设施对齐。 - 移动端卡片视图改为按当前 pageSize 分页累积渲染,滚动到卡片容器底部时自动追加下一页。
- 卡片视图补齐“加载更多...”指示器,并仅在已加载全部筛选任务时显示“已加载全部 X 条数据”。
- 筛选条件变更和重置筛选时同步重置表格分页、卡片页码、累积任务和加载更多状态。
- 移动端筛选
Form.Item的marginBottom统一调整为 0,对齐用户管理页表单样式口径。
- 任务监控页补齐
-
验证:
- 基线:
npm --workspace web exec eslint src/app/admin/task-monitor/page.tsx --max-warnings=0通过。 - 基线:
npm --workspace web exec tsc --noEmit通过。 - 修改后:
npm --workspace web exec eslint src/app/admin/task-monitor/page.tsx --max-warnings=0通过。 - 修改后:
npm --workspace web exec tsc --noEmit通过。 - 修改后:
node --experimental-strip-types web/src/lib/task-monitor-display.test.js通过,4 passed,仍有既有 MODULE_TYPELESS_PACKAGE_JSON warning。
- 基线:
-
风险与关注点:
- 任务监控数据仍来自既有 Flower 批量接口,本次只改变移动端前端渲染批次和滚动加载交互,不改变接口字段、权限或任务筛选规则。