feat: 项目组与项目业务归属及统计(第一期) #13

Open
opened 2026-11-02 06:45:11 +00:00 by cykj · 3 comments
Owner

目标与已确认边界

按项目组、项目统计细胞存储、科研捐赠、中试服务、基础实验。用户于本会话确认继续第一期方案。
项目组包含名称、负责人、成员、区域、医院、启停状态。区域医院仅为信息记录,不影响存储/捐赠业务选择、默认值、校验或权限。沿用现有业务权限和流程。

第一期范围

  • backend:项目组/成员/区域医院记录/项目管理,主单项目归属、转换继承、数量和状态统计、历史归属维护、审计及SQL迁移。
  • web-admin:项目组、项目、统计页面;预签约及四类业务的项目选择、筛选和详情。
  • mobile-oa-h5:已有预签约及存储/捐赠入口配套字段和回显。
  • mobile-h5:现有WebView入口联动验证,暂不新增业务模块。
    不包括项目预算、绩效分成、金额分摊、移动项目管理入口及服务启停。

设计建议(原型确认前不实施)

订单只保存project_id,项目归属一个组。普通成员选参与组的启用项目,代录权限单独校验;项目组身份不扩大业务查看权限。
项目产生业务后不直接换组。人员调组不搬动历史订单。已停用项目可回显,已有单据编辑无关字段时保留归属。历史数据可为空,新增必填在各入口同步后启用。
细胞存储覆盖预签约→协议;存储/捐赠互转继承归属。中试和基础实验在申请单关联,基础实验课题名称独立保留。关联链路的归属纠正统一审计,具体联动范围在实现规格明确。
统计正式存储协议、捐赠主单、中试申请、基础实验申请,预签约另列;展示按创建日期筛选的当前状态分布,不提供历史状态快照或跨业务去重总数。

验收条件

  1. 项目组/项目可维护启停,一人可加入多组,所有引用及查询租户隔离。
  2. 修改项目组区域医院不改变任何现有存储/捐赠业务数据和候选范围。
  3. 所有现有创建入口可保存/回显项目,后端拒绝非法和跨租户项目;未传项目的更新不清空旧值。
  4. 预签约转协议、存储/捐赠互转正确继承;人员变更不改变归属。
  5. 项目停用后历史业务正常查看,归属变更留痕且明确关联单据影响。
  6. 统计与有权查看的明细一致,避免联表和转换重复计数,未归属单据单列。
  7. 按各端规则执行测试、构建、审查及必要联动验证;不自行启停backend/web-admin。

当前阶段

基线V2.0=e9df9d65,工作区干净且远端同步。Agent测试。
已创建Figma原型文件,待制作与用户确认:https://www.figma.com/design/wOQLDAhr1gdlQEXnVaFO9S
视觉依据:Web Fresh Mint,system/unit列表、protocol/ProtocolFormDialog表单;移动沿用market现有表单与移动规范。

## 目标与已确认边界 按项目组、项目统计细胞存储、科研捐赠、中试服务、基础实验。用户于本会话确认继续第一期方案。 项目组包含名称、负责人、成员、区域、医院、启停状态。区域医院仅为信息记录,不影响存储/捐赠业务选择、默认值、校验或权限。沿用现有业务权限和流程。 ## 第一期范围 - backend:项目组/成员/区域医院记录/项目管理,主单项目归属、转换继承、数量和状态统计、历史归属维护、审计及SQL迁移。 - web-admin:项目组、项目、统计页面;预签约及四类业务的项目选择、筛选和详情。 - mobile-oa-h5:已有预签约及存储/捐赠入口配套字段和回显。 - mobile-h5:现有WebView入口联动验证,暂不新增业务模块。 不包括项目预算、绩效分成、金额分摊、移动项目管理入口及服务启停。 ## 设计建议(原型确认前不实施) 订单只保存project_id,项目归属一个组。普通成员选参与组的启用项目,代录权限单独校验;项目组身份不扩大业务查看权限。 项目产生业务后不直接换组。人员调组不搬动历史订单。已停用项目可回显,已有单据编辑无关字段时保留归属。历史数据可为空,新增必填在各入口同步后启用。 细胞存储覆盖预签约→协议;存储/捐赠互转继承归属。中试和基础实验在申请单关联,基础实验课题名称独立保留。关联链路的归属纠正统一审计,具体联动范围在实现规格明确。 统计正式存储协议、捐赠主单、中试申请、基础实验申请,预签约另列;展示按创建日期筛选的当前状态分布,不提供历史状态快照或跨业务去重总数。 ## 验收条件 1. 项目组/项目可维护启停,一人可加入多组,所有引用及查询租户隔离。 2. 修改项目组区域医院不改变任何现有存储/捐赠业务数据和候选范围。 3. 所有现有创建入口可保存/回显项目,后端拒绝非法和跨租户项目;未传项目的更新不清空旧值。 4. 预签约转协议、存储/捐赠互转正确继承;人员变更不改变归属。 5. 项目停用后历史业务正常查看,归属变更留痕且明确关联单据影响。 6. 统计与有权查看的明细一致,避免联表和转换重复计数,未归属单据单列。 7. 按各端规则执行测试、构建、审查及必要联动验证;不自行启停backend/web-admin。 ## 当前阶段 基线V2.0=e9df9d65,工作区干净且远端同步。Agent测试。 已创建Figma原型文件,待制作与用户确认:https://www.figma.com/design/wOQLDAhr1gdlQEXnVaFO9S 视觉依据:Web Fresh Mint,system/unit列表、protocol/ProtocolFormDialog表单;移动沿用market现有表单与移动规范。
cykj added the ai-in-progress label 2026-11-02 06:45:42 +00:00
Author
Owner

第一期可编辑 Figma 原型 v1 已准备,共 12 个页面/状态画板,待用户确认后进入 OpenSpec 规格与实现。

视觉依据:Web P01/P02/P09及Fresh Mint色值,移动品牌绿#0a9f6d。Figma已核查可编辑文本/框架/组件实例,未用整页图片代替;检查截图并修正横向容器高度,字体为Inter及Noto Sans SC中文回退,业务实现继续沿用系统字体栈。此为原型视觉检查,不代表业务功能验收。

原型明确区域医院仅资料记录,订单项目归属不改变原有业务区域医院;普通成员无自动扩大数据权限。关联链路归属变更候选方案为预览受影响单据并统一更正,全部引用须有权操作后才提交;待原型确认后细化规范。

当前分支codex/issue-13-project-statistics;基线e9df9d65e1524df3f58a82b9ef2eb212bcdd762f;worktree=/Users/wuzilong/.codex/worktrees/issue-13-project-statistics/zkxw。业务代码尚未修改;未执行业务测试或构建,未启停任何服务。原V2.0工作区保持干净。本阶段等待原型确认,不把超时作为用户批准。

第一期可编辑 Figma 原型 v1 已准备,共 12 个页面/状态画板,待用户确认后进入 OpenSpec 规格与实现。 - 项目组管理:https://www.figma.com/design/wOQLDAhr1gdlQEXnVaFO9S?node-id=3-17 - 项目管理:https://www.figma.com/design/wOQLDAhr1gdlQEXnVaFO9S?node-id=3-145 - 业务统计:https://www.figma.com/design/wOQLDAhr1gdlQEXnVaFO9S?node-id=3-253 - 统计明细:https://www.figma.com/design/wOQLDAhr1gdlQEXnVaFO9S?node-id=5-22 - 项目组表单:https://www.figma.com/design/wOQLDAhr1gdlQEXnVaFO9S?node-id=3-464 - 项目表单:https://www.figma.com/design/wOQLDAhr1gdlQEXnVaFO9S?node-id=3-508 - 业务归属字段:https://www.figma.com/design/wOQLDAhr1gdlQEXnVaFO9S?node-id=3-552 - 归属变更:https://www.figma.com/design/wOQLDAhr1gdlQEXnVaFO9S?node-id=3-583 - 移动375px:https://www.figma.com/design/wOQLDAhr1gdlQEXnVaFO9S?node-id=3-610 - 移动414px选择器:https://www.figma.com/design/wOQLDAhr1gdlQEXnVaFO9S?node-id=3-640 - 空值/加载失败/提交/历史停用状态:https://www.figma.com/design/wOQLDAhr1gdlQEXnVaFO9S?node-id=3-661 视觉依据:Web P01/P02/P09及Fresh Mint色值,移动品牌绿#0a9f6d。Figma已核查可编辑文本/框架/组件实例,未用整页图片代替;检查截图并修正横向容器高度,字体为Inter及Noto Sans SC中文回退,业务实现继续沿用系统字体栈。此为原型视觉检查,不代表业务功能验收。 原型明确区域医院仅资料记录,订单项目归属不改变原有业务区域医院;普通成员无自动扩大数据权限。关联链路归属变更候选方案为预览受影响单据并统一更正,全部引用须有权操作后才提交;待原型确认后细化规范。 当前分支codex/issue-13-project-statistics;基线e9df9d65e1524df3f58a82b9ef2eb212bcdd762f;worktree=/Users/wuzilong/.codex/worktrees/issue-13-project-statistics/zkxw。业务代码尚未修改;未执行业务测试或构建,未启停任何服务。原V2.0工作区保持干净。本阶段等待原型确认,不把超时作为用户批准。
cykj added ai-waiting-user and removed ai-in-progress labels 2026-11-02 06:55:35 +00:00
Author
Owner

用户已在当前会话明确选择“采用原型 v1,继续开发”,并补充“样式要参考其他界面的样式进行开发”。实施以现有同端组件和规范为样式依据,Figma确认布局与交互;不另造主题。开始OpenSpec规格与实现,默认Agent测试。

用户已在当前会话明确选择“采用原型 v1,继续开发”,并补充“样式要参考其他界面的样式进行开发”。实施以现有同端组件和规范为样式依据,Figma确认布局与交互;不另造主题。开始OpenSpec规格与实现,默认Agent测试。
cykj added ai-in-progress and removed ai-waiting-user labels 2026-11-02 07:00:56 +00:00
cykj added ai-waiting-user and removed ai-in-progress labels 2026-11-02 07:32:23 +00:00
Author
Owner

已按用户授权将服务切到任务 worktree,提交 0bddf38e52c97ee67c5e1134a6b5ba2c5911846c,分支 codex/issue-13-project-statistics。

真实 HTTP/MySQL 62 项断言通过;迁移首次新增、旧版兼容修正及重复执行通过。浏览器验证项目组和项目创建、Web与移动订单项目保存/回显、统计钻取、归属预览调整与审计;移动浏览器 375/414 尺寸验证通过。修复权限按钮不展示、明细弹窗筛选样式丢失、MySQL排序规则不兼容;定向测试与Web生产构建通过,独立审查无P1/P2。

用户于2026-11-02回复无真机调试环境,先保留任务版本供后续验收。微信真机WebView联动、集成候选验证、合并及环境恢复未完成。PR #14保持草稿、工单#13开放,不合并V2.0。任务服务、隔离库、worktree和environment资源保留。后续恢复需取得真机证据后再继续集成;不要连接原业务数据库自动迁移。

后续菜单调整已完成:用户要求新增“项目”大菜单,与市场、生产、质检平级,四项为项目组管理、项目管理、业务统计、历史归属维护。前后端菜单树、旧地址重定向和增量SQL已同步。两个合成租户重复迁移通过,保留叶子ID与角色授权,仅补新祖先,不影响移动根或市场-only角色。后端17项、Web5项测试、定向ESLint、Web构建通过,浏览器确认导航层级与旧地址跳转,独立审查无P1/P2。最新菜单截图 project-top-menu-qa.jpg。

列表样式反馈已处理:四个主列表及业务明细、关联预览、归属审计均补序号,分页按页码连续编号;业务统计、历史归属维护和明细弹窗检索按钮按全局样式右对齐。浏览器逐页/弹窗核验、Web5项测试、定向ESLint、生产构建和独立审查通过。截图 project-lists-polish-qa.jpg;真机待验收状态不变。

所属项目权限已独立:默认仅本人作为项目组负责人/有效成员所在组(多组并集);跨组需 project:project:all,角色配置入口为“项目 → 全部项目”,不自动授予现有角色。归属维护权限、普通管理员和单独项目负责人不能越过组范围;super_admin沿用系统全权限语义但限认证租户。后端同时限制候选、历史筛选及写入,原业务数据权限/历史回显/转换继承保留。为防止自行授予all,同步严格校验系统用户/角色/职位/菜单变更及质检金额专用角色授权的权限、目标租户和关联ID;角色菜单保存补齐祖先且拒绝断链/循环。升级需执行2026-11-02-project_all_permission.sql,并核对配置人员原有system:*:list权限。

追加验证:121项相关自动测试通过(含先失败后修复的越权回归);隔离MySQL/HTTP41项检查通过,3租户重复权限种子不自动授权,5类主单及移动创建越权拒绝,同会话授权/撤权生效,8条自行授权入口被拒绝。浏览器确认单独勾选全部项目并自动补祖先,截图project-all-permission-qa.jpg;最终测试成员恢复为组内范围。独立复审无P1/P2。字段一致性仍5项既有警告。本轮无前端源码变更,不重复构建;微信真机、集成验证及合并继续待办。

已按用户授权将服务切到任务 worktree,提交 0bddf38e52c97ee67c5e1134a6b5ba2c5911846c,分支 codex/issue-13-project-statistics。 - Web:http://127.0.0.1:3006/ - 后端健康:http://127.0.0.1:8000/health - 移动 OA:http://127.0.0.1:5178/oa-h5/market/specialist/presign - 数据库:独立本机 MySQL 5.7.24,13313 / issue13_qa;全部为合成数据,原业务库未修改。 - 运行来源:/Users/wuzilong/.codex/worktrees/issue-13-project-statistics/zkxw;应用配置 qa.env,原配置和进程记录见 runtime-processes.json(不含密钥)。 真实 HTTP/MySQL 62 项断言通过;迁移首次新增、旧版兼容修正及重复执行通过。浏览器验证项目组和项目创建、Web与移动订单项目保存/回显、统计钻取、归属预览调整与审计;移动浏览器 375/414 尺寸验证通过。修复权限按钮不展示、明细弹窗筛选样式丢失、MySQL排序规则不兼容;定向测试与Web生产构建通过,独立审查无P1/P2。 用户于2026-11-02回复无真机调试环境,先保留任务版本供后续验收。微信真机WebView联动、集成候选验证、合并及环境恢复未完成。PR #14保持草稿、工单#13开放,不合并V2.0。任务服务、隔离库、worktree和environment资源保留。后续恢复需取得真机证据后再继续集成;不要连接原业务数据库自动迁移。 后续菜单调整已完成:用户要求新增“项目”大菜单,与市场、生产、质检平级,四项为项目组管理、项目管理、业务统计、历史归属维护。前后端菜单树、旧地址重定向和增量SQL已同步。两个合成租户重复迁移通过,保留叶子ID与角色授权,仅补新祖先,不影响移动根或市场-only角色。后端17项、Web5项测试、定向ESLint、Web构建通过,浏览器确认导航层级与旧地址跳转,独立审查无P1/P2。最新菜单截图 project-top-menu-qa.jpg。 列表样式反馈已处理:四个主列表及业务明细、关联预览、归属审计均补序号,分页按页码连续编号;业务统计、历史归属维护和明细弹窗检索按钮按全局样式右对齐。浏览器逐页/弹窗核验、Web5项测试、定向ESLint、生产构建和独立审查通过。截图 project-lists-polish-qa.jpg;真机待验收状态不变。 所属项目权限已独立:默认仅本人作为项目组负责人/有效成员所在组(多组并集);跨组需 project:project:all,角色配置入口为“项目 → 全部项目”,不自动授予现有角色。归属维护权限、普通管理员和单独项目负责人不能越过组范围;super_admin沿用系统全权限语义但限认证租户。后端同时限制候选、历史筛选及写入,原业务数据权限/历史回显/转换继承保留。为防止自行授予all,同步严格校验系统用户/角色/职位/菜单变更及质检金额专用角色授权的权限、目标租户和关联ID;角色菜单保存补齐祖先且拒绝断链/循环。升级需执行2026-11-02-project_all_permission.sql,并核对配置人员原有system:*:list权限。 追加验证:121项相关自动测试通过(含先失败后修复的越权回归);隔离MySQL/HTTP41项检查通过,3租户重复权限种子不自动授权,5类主单及移动创建越权拒绝,同会话授权/撤权生效,8条自行授权入口被拒绝。浏览器确认单独勾选全部项目并自动补祖先,截图project-all-permission-qa.jpg;最终测试成员恢复为组内范围。独立复审无P1/P2。字段一致性仍5项既有警告。本轮无前端源码变更,不重复构建;微信真机、集成验证及合并继续待办。
cykj added ai-testing and removed ai-waiting-user labels 2026-11-02 07:36:15 +00:00
cykj added ai-waiting-user and removed ai-testing labels 2026-11-02 08:06:02 +00:00
cykj added ai-in-progress and removed ai-waiting-user labels 2026-11-02 08:14:25 +00:00
cykj added ai-waiting-user and removed ai-in-progress labels 2026-11-02 08:23:34 +00:00
cykj added ai-in-progress and removed ai-waiting-user labels 2026-11-02 08:24:38 +00:00
cykj added ai-waiting-user and removed ai-in-progress labels 2026-11-02 08:31:58 +00:00
cykj added ai-in-progress and removed ai-waiting-user labels 2026-11-02 08:46:09 +00:00
cykj added ai-waiting-user and removed ai-in-progress labels 2026-11-02 09:11:01 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: cykj/zkxw#13