Files
zkxw/openspec/changes/project-business-statistics/tasks.md
T
zlwu 29f9866a24 feat(project): group assignment records by business type
Add four business tabs and identifying fields so users can locate orders before assigning projects. Introduce a permission-scoped detail query with child EXISTS searches and batched enrichment, preserving statistics and assignment writes.

Approved Figma v2; independent source review completed. Tests authored but not executed under the user self-test arrangement. Related to issue #13.
2026-11-04 14:14:50 +08:00

8.6 KiB
Raw Blame History

项目业务归属实施计划

目标: 实现工单 #13 已批准的项目归属与数量/状态统计。 架构: 新管理模块统一校验与统计;现有业务显式接入;前端复用已有样式。 技术栈: FastAPI/SQLAlchemy/Pydantic、Vue3/Element Plus、Vue3/Vant。

2026-11-04 历史归属维护四业务 tab

用户已明确“采用原型 v2,继续开发”,继续按用户自测与先合入 V2.0 再测试的指令交付;本轮不运行测试、构建或浏览器业务验收,不关闭工单。

  • 核对四类业务真实字段、现有样式和权限,完成 Figma v2 及用户确认。
  • 新增归属维护专用读取接口:四类主单、业务关键词、同租户有效子表匹配和分页后批量资料读取;统计及移动契约不变。
  • 实现四 tab、各业务识别列、关键词首位、状态语义、固定操作、筛选重置及过时响应防护。
  • 编写 5 个后端回归用例供后续运行;独立源码审查未发现新增 P1/P2,Git 差异核对通过。本轮未执行测试/构建或浏览器验收。
  • 提交推送、PR 合入 V2.0 并同步主目录,回写待用户测试的提交、入口和覆盖点,保留工单及任务环境。

2026-11-04 菜单增加项目管理分组

用户明确指定层级:项目 → 项目管理 → 项目组管理 / 项目管理 / 业务统计 / 历史归属维护。仅重组现有菜单配置,复用市场三级导航,不新增业务页面或修改页面样式。沿用用户自测及先合入 V2.0 再测试的安排,工单保持开放。

  • 同步 Web sqxp.ts 与后端 menu.py,新增 menu:project:management 目录,保留四个页面名称、组件和权限码。
  • staticRoutes.ts 兼容两代旧地址,保留 query 与 hash。
  • 新增 2026-11-04-project_management_group.sql,保留叶子 ID 与角色授权,仅补新祖先;全部项目权限仍独立挂在项目一级下,更新 README 顺序。
  • 独立源码审查未发现 P1/P2,Git 差异核对通过;用户测试模式未运行测试或构建。
  • 提交续接 PR、合入 V2.0、同步主目录;备份并更新已确认测试库菜单,交付用户验收。

以下为此前阶段历史记录;其中待合并等状态已由 2026-11-04 用户明确先合并再测试的指令取代。

用户追加所属项目权限要求:将跨组选择从归属维护权限分离为 project:project:all(全部项目),默认仅项目组负责人/有效成员所在组内项目;Web与移动共用后端范围校验。

  • 在 backend/tests/test_project_selection_permissions.py 增加成员/多组/无组、独立全部项目权限、多角色及职位继承、撤权、跨租户和越权提交用例,先执行确认失败。
  • 在 backend/app/services/project_management.py 统一候选范围,赋值校验改用独立权限;筛选仍叠加原订单数据范围,历史回显与转换继承保持原有规则。
  • 增加幂等 docs/sql/migrations/2026-11-02-project_all_permission.sql,在项目一级节点下提供可分配的“全部项目”功能权限,不给现有角色自动授权;同步设计、规格及后端部署入口。
  • 封堵实际验收发现的权限自授入口:系统用户/角色/职位/菜单变更接口检查对应严格管理权限,目标与引用按租户校验;角色菜单保存补齐祖先、拒绝断链/循环。backend/tests/test_project_permission_administration.py 覆盖拒绝、允许、租户和祖先边界。
  • 运行项目权限与现有归属回归、字段一致性检查;隔离 MySQL 验证迁移和 HTTP 权限边界、浏览器角色配置与下拉框;独立审查后提交推送,继续保留待真机验收状态。

用户追加菜单调整:新增与市场/生产/质检平级的“项目”,四个项目管理入口迁入其中。沿用现有顶部导航组件及视觉样式,不新增业务页面。实施顺序:前后端菜单树同步 → 增量菜单迁移(保留叶子 ID/角色授权、补齐新祖先)→ 隔离 MySQL 幂等与角色边界验证 → 浏览器导航/旧地址跳转及构建验收。仍保留待真机验收、不合并的交付状态。

菜单调整验收:两租户 MySQL 迁移各重复执行通过,四子页/原 ID/祖先权限/无额外授权/移动根不变/无重复均核对;后端17项、Web5项测试和定向 ESLint 通过,Web生产构建通过。浏览器确认项目平级、市场移除四菜单及旧地址携带查询参数跳转;独立审查无P1/P2。

列表样式补齐:四个主列表及业务明细、关联预览、归属审计表格增加序号,分页列表按页码连续编号;业务统计、历史归属维护及业务明细的检索按钮复用全局样式右对齐。浏览器逐页和弹窗检查通过,Web5项测试、定向 ESLint、生产构建及独立源码审查通过;仍保留待真机验收状态。

  • 读取完整工单、确认范围与Figma v1,创建隔离分支。
  • 固定 design.md 接口契约;按文件边界划分任务。
  • 后端新模块:先写 tenant/member/disabled/statistics/assignment 链路测试,运行确认失败;实现 models/project_management.py、services/project_management.py、api/project_management.py、增量SQL及菜单种子;运行测试验证。
  • 既有后端接入:四主表 project_id、创建/更新 Schema、CRUD、移动服务、转换继承、列表筛选、名称回显;补多入口和转换回归测试。
  • Web:新增 api/project-management.ts、共享 ProjectSelect.vue、四管理页面/路由/权限;接入五类主单表单列表详情;使用现有全局样式;验证组件数据映射及构建。
  • 移动OA:已有预签约和存储/捐赠选择、提交、列表/详情;使用现有市场组件及请求工具;测试无项目、历史停用、失败重试、不清空旧值,运行构建。
  • 契约联调:逐项核对 Create/Update/CRUD/ORM/返回/前端字段,运行字段一致性检查并区分既有失败。
  • 独立规格审查、代码质量审查;修复并复验,记录未完成的迁移、运行环境及真机验证。
  • 核对目标分支,完成实际验收及集成验证后提交推送、PR、合并V2.0、同步主目录、回写关单;未满足条件不合并。

预期命令:PYTHONPATH=backend SECRET_KEY=<测试专用随机值> backend/venv/bin/python -m pytest backend/tests/test_project_management.py backend/tests/test_project_assignment_integration.py;python backend/scripts/check_field_consistency.py;pnpm --dir web-admin build;npm --prefix mobile-oa-h5 run build。虚拟环境实际复用主目录已安装解释器,测试数据库通过环境显式隔离。

当前验证:新增后端 44 项、移动市场前端 353 项、Web 5 项通过;Web/移动生产构建通过。 较大范围后端回归 357 通过、3 个既有失败(缺失历史迁移、运费子行软删除、旧测试 SimpleNamespace refresh);原 HEAD 已复现后两项,缺文件与仓库现状一致。 Web 类型检查基线和改动版均 413 条诊断,无新增文件/错误码组合;字段一致性检查为 5 项既有警告。以上不代表全仓测试通过。 独立源码审查已修复并复核来源链保护、并发引用检查、统计聚合、历史候选及空筛选条件,无剩余 P1/P2。 用户于 2026-11-02 明确授权自行切换服务,任务版本已在独立 MySQL 5.7.24 合成库运行,原业务数据库未修改。真实 HTTP/MySQL 62 项断言通过,覆盖五类主单新增、三种转换继承、四业务统计、租户/权限、并发归属冲突及审计;结构与菜单迁移重复执行通过,另验证首次 ADD 与旧迁移修正。 浏览器已验收项目组/项目创建、Web/移动预签约关联保存、统计钻取及归属维护;375/414 宽度移动 H5 操作通过。验收中修复前端按钮权限机制、明细弹窗全局样式作用域及 MySQL 关联列排序规则。独立复审无 P1/P2。 仍缺微信真机 WebView 联动、集成候选环境验证及合并后运行环境恢复;不能以移动浏览器模拟尺寸代替真机验收,当前不标记完成或合并。

所属项目权限追加验收:121项相关测试通过;测试先复现跨组及授权配置旁路再修复。隔离MySQL/HTTP共41项检查通过(29项项目/迁移+12项授权闭环),含3租户幂等种子、不自动授予角色、5类主单越权拒绝、移动创建拒绝、同会话授权/撤权、8条自授入口拒绝;浏览器确认角色管理可独立勾选全部项目且保存补祖先。独立复审无P1/P2。字段一致性仍为5项既有警告;本轮无前端源码变更,不重复前端构建,微信真机及集成验收继续待办。