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

62 lines
8.6 KiB
Markdown
Raw 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.
# 项目业务归属实施计划
**目标:** 实现工单 #13 已批准的项目归属与数量/状态统计。
**架构:** 新管理模块统一校验与统计;现有业务显式接入;前端复用已有样式。
**技术栈:** FastAPI/SQLAlchemy/Pydantic、Vue3/Element Plus、Vue3/Vant。
## 2026-11-04 历史归属维护四业务 tab
用户已明确“采用原型 v2,继续开发”,继续按用户自测与先合入 V2.0 再测试的指令交付;本轮不运行测试、构建或浏览器业务验收,不关闭工单。
- [x] 核对四类业务真实字段、现有样式和权限,完成 Figma v2 及用户确认。
- [x] 新增归属维护专用读取接口:四类主单、业务关键词、同租户有效子表匹配和分页后批量资料读取;统计及移动契约不变。
- [x] 实现四 tab、各业务识别列、关键词首位、状态语义、固定操作、筛选重置及过时响应防护。
- [x] 编写 5 个后端回归用例供后续运行;独立源码审查未发现新增 P1/P2,Git 差异核对通过。本轮未执行测试/构建或浏览器验收。
- [ ] 提交推送、PR 合入 V2.0 并同步主目录,回写待用户测试的提交、入口和覆盖点,保留工单及任务环境。
## 2026-11-04 菜单增加项目管理分组
用户明确指定层级:项目 → 项目管理 → 项目组管理 / 项目管理 / 业务统计 / 历史归属维护。仅重组现有菜单配置,复用市场三级导航,不新增业务页面或修改页面样式。沿用用户自测及先合入 V2.0 再测试的安排,工单保持开放。
- [x] 同步 Web `sqxp.ts` 与后端 `menu.py`,新增 `menu:project:management` 目录,保留四个页面名称、组件和权限码。
- [x] `staticRoutes.ts` 兼容两代旧地址,保留 query 与 hash。
- [x] 新增 `2026-11-04-project_management_group.sql`,保留叶子 ID 与角色授权,仅补新祖先;全部项目权限仍独立挂在项目一级下,更新 README 顺序。
- [x] 独立源码审查未发现 P1/P2,Git 差异核对通过;用户测试模式未运行测试或构建。
- [ ] 提交续接 PR、合入 V2.0、同步主目录;备份并更新已确认测试库菜单,交付用户验收。
以下为此前阶段历史记录;其中待合并等状态已由 2026-11-04 用户明确先合并再测试的指令取代。
用户追加所属项目权限要求:将跨组选择从归属维护权限分离为 `project:project:all`(全部项目),默认仅项目组负责人/有效成员所在组内项目;Web与移动共用后端范围校验。
- [x] 在 `backend/tests/test_project_selection_permissions.py` 增加成员/多组/无组、独立全部项目权限、多角色及职位继承、撤权、跨租户和越权提交用例,先执行确认失败。
- [x] 在 `backend/app/services/project_management.py` 统一候选范围,赋值校验改用独立权限;筛选仍叠加原订单数据范围,历史回显与转换继承保持原有规则。
- [x] 增加幂等 `docs/sql/migrations/2026-11-02-project_all_permission.sql`,在项目一级节点下提供可分配的“全部项目”功能权限,不给现有角色自动授权;同步设计、规格及后端部署入口。
- [x] 封堵实际验收发现的权限自授入口:系统用户/角色/职位/菜单变更接口检查对应严格管理权限,目标与引用按租户校验;角色菜单保存补齐祖先、拒绝断链/循环。`backend/tests/test_project_permission_administration.py` 覆盖拒绝、允许、租户和祖先边界。
- [x] 运行项目权限与现有归属回归、字段一致性检查;隔离 MySQL 验证迁移和 HTTP 权限边界、浏览器角色配置与下拉框;独立审查后提交推送,继续保留待真机验收状态。
用户追加菜单调整:新增与市场/生产/质检平级的“项目”,四个项目管理入口迁入其中。沿用现有顶部导航组件及视觉样式,不新增业务页面。实施顺序:前后端菜单树同步 → 增量菜单迁移(保留叶子 ID/角色授权、补齐新祖先)→ 隔离 MySQL 幂等与角色边界验证 → 浏览器导航/旧地址跳转及构建验收。仍保留待真机验收、不合并的交付状态。
菜单调整验收:两租户 MySQL 迁移各重复执行通过,四子页/原 ID/祖先权限/无额外授权/移动根不变/无重复均核对;后端17项、Web5项测试和定向 ESLint 通过,Web生产构建通过。浏览器确认项目平级、市场移除四菜单及旧地址携带查询参数跳转;独立审查无P1/P2。
列表样式补齐:四个主列表及业务明细、关联预览、归属审计表格增加序号,分页列表按页码连续编号;业务统计、历史归属维护及业务明细的检索按钮复用全局样式右对齐。浏览器逐页和弹窗检查通过,Web5项测试、定向 ESLint、生产构建及独立源码审查通过;仍保留待真机验收状态。
- [x] 读取完整工单、确认范围与Figma v1,创建隔离分支。
- [x] 固定 design.md 接口契约;按文件边界划分任务。
- [x] 后端新模块:先写 tenant/member/disabled/statistics/assignment 链路测试,运行确认失败;实现 models/project_management.py、services/project_management.py、api/project_management.py、增量SQL及菜单种子;运行测试验证。
- [x] 既有后端接入:四主表 project_id、创建/更新 Schema、CRUD、移动服务、转换继承、列表筛选、名称回显;补多入口和转换回归测试。
- [x] Web:新增 api/project-management.ts、共享 ProjectSelect.vue、四管理页面/路由/权限;接入五类主单表单列表详情;使用现有全局样式;验证组件数据映射及构建。
- [x] 移动OA:已有预签约和存储/捐赠选择、提交、列表/详情;使用现有市场组件及请求工具;测试无项目、历史停用、失败重试、不清空旧值,运行构建。
- [x] 契约联调:逐项核对 Create/Update/CRUD/ORM/返回/前端字段,运行字段一致性检查并区分既有失败。
- [x] 独立规格审查、代码质量审查;修复并复验,记录未完成的迁移、运行环境及真机验证。
- [ ] 核对目标分支,完成实际验收及集成验证后提交推送、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项既有警告;本轮无前端源码变更,不重复前端构建,微信真机及集成验收继续待办。