Files
zyt/.trellis/tasks/archive/2026-05/05-07-diagnosis-business-order-no-data-scope/prd.md
T

42 lines
2.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.
# 诊单编辑业务订单 tab 去除数据权限
## Goal
修正「编辑诊单」对话框中的“业务订单”tab:获取订单数据时不再受业务订单列表页的数据权限限制,只要订单与当前诊单患者相关,就应展示出来。
## What I verified
- 前端组件是 [admin/src/views/tcm/diagnosis/components/PatientOrderList.vue](/Users/long/Work/zyt/admin/src/views/tcm/diagnosis/components/PatientOrderList.vue),直接调用 `prescriptionOrderLists`
- 路由仍是 `GET /tcm.prescriptionOrder/lists`,控制器 [server/app/adminapi/controller/tcm/PrescriptionOrderController.php](/Users/long/Work/zyt/server/app/adminapi/controller/tcm/PrescriptionOrderController.php) 只是透传给 `PrescriptionOrderLists`
- 真正的权限过滤在 [server/app/adminapi/lists/tcm/PrescriptionOrderLists.php](/Users/long/Work/zyt/server/app/adminapi/lists/tcm/PrescriptionOrderLists.php)
- `applyCreatorOrOwnPrescriptionVisibility()`
- `applyDataScopeForPrescriptionOrder()`
- 当前诊单 tab 已经按 `patient_id` 过滤,且支持 `diagnosis_id` 精确过滤,因此即使跳过列表权限,也仍然只会落在“当前患者/当前诊单关联订单”的安全范围内。
## Decision
- 不新增独立接口,继续复用 `/tcm.prescriptionOrder/lists`
- 仅为“诊单编辑业务订单 tab”增加一个显式场景参数,例如 `scene=diagnosis_edit`
- 只有在该场景下,`PrescriptionOrderLists` 才跳过业务订单列表页的两层权限过滤。
- 其它页面继续保持原有权限逻辑,不改行为。
## Requirements
- 前端业务订单 tab 请求列表时附带场景参数,标记这是诊单编辑页内的患者订单查询。
- 后端列表类识别该场景后,不执行:
- 创建人/开方人可见性过滤
- 数据范围过滤
- 后端仍保留患者/诊单过滤逻辑,不允许无条件返回全量订单。
- 原订单管理页、统计页、其它依赖 `/tcm.prescriptionOrder/lists` 的页面行为不变。
## Acceptance Criteria
- 打开任意诊单编辑页,“业务订单”tab 可以看到该患者实际关联的业务订单,不因当前登录人不是订单创建人或不在数据范围内而丢失数据。
- 切换“仅本诊单”时,只显示当前诊单关联的业务订单。
- 业务订单主列表页权限行为不变。
- 不新增新的权限点,不修改现有 tab 显隐权限。
## Risks
- 如果跳过权限的判断条件不够收敛,可能误影响订单管理页;因此必须使用显式场景参数,不要靠 `patient_id`/`diagnosis_id` 猜测场景。