From ed4a4c4960aff1282f12554d0847b8a268a40c48 Mon Sep 17 00:00:00 2001
From: ShengLong <452591453@qq.com>
Date: Thu, 7 May 2026 10:48:21 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E8=AE=A2=E5=8D=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.claude/settings.local.json | 3 +-
.../diagnosis/components/PatientOrderList.vue | 150 ++++++++++++++++++
admin/src/views/tcm/diagnosis/edit.vue | 17 ++
.../lists/tcm/PrescriptionOrderLists.php | 39 ++++-
.../add_diagnosis_patient_orders_menu.sql | 22 +++
5 files changed, 227 insertions(+), 4 deletions(-)
create mode 100644 admin/src/views/tcm/diagnosis/components/PatientOrderList.vue
create mode 100644 server/sql/1.9.20260505/add_diagnosis_patient_orders_menu.sql
diff --git a/.claude/settings.local.json b/.claude/settings.local.json
index a9695518..7993c574 100644
--- a/.claude/settings.local.json
+++ b/.claude/settings.local.json
@@ -15,7 +15,8 @@
"Bash(npx eslint *)",
"Bash(git *)",
"Bash(tail -c 100000 /Users/long/.claude/projects/-Users-long-Work-zyt/7be9f770-afc3-497d-87a3-2ffa1fbe3fd1.jsonl)",
- "Read(//tmp/**)"
+ "Read(//tmp/**)",
+ "Bash(npx --no-install vue-tsc --noEmit)"
]
}
}
diff --git a/admin/src/views/tcm/diagnosis/components/PatientOrderList.vue b/admin/src/views/tcm/diagnosis/components/PatientOrderList.vue
new file mode 100644
index 00000000..7e77ad55
--- /dev/null
+++ b/admin/src/views/tcm/diagnosis/components/PatientOrderList.vue
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
+
+
+
+ ¥{{ formatAmount(row.amount) }}
+
+
+
+
+ {{ row.doctor_name || '—' }}
+
+
+
+
+ {{ row.assistant_name || '—' }}
+
+
+
+
+
+ {{ fulfillmentText(row.fulfillment_status) }}
+
+
+
+
+
+ {{ formatTime(row.create_time) }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/admin/src/views/tcm/diagnosis/edit.vue b/admin/src/views/tcm/diagnosis/edit.vue
index 12ed95cd..95c2daf2 100644
--- a/admin/src/views/tcm/diagnosis/edit.vue
+++ b/admin/src/views/tcm/diagnosis/edit.vue
@@ -638,6 +638,22 @@
+
+
+
+
+
+
['prescription_id', 'fulfillment_status', 'prescription_audit_status', 'payment_slip_audit_status'],
+ '=' => ['prescription_id', 'diagnosis_id', 'fulfillment_status', 'prescription_audit_status', 'payment_slip_audit_status'],
'%like%' => ['order_no'],
'between_time' => 'create_time',
];
@@ -96,6 +96,7 @@ class PrescriptionOrderLists extends BaseAdminDataLists implements ListsSearchIn
{
$this->applyDoctorAssistantFilters($query);
$this->applyPatientKeywordFilter($query);
+ $this->applyPatientIdFilter($query);
$this->applyExpressCompanyFilter($query);
$this->applyExpressKeywordFilter($query);
$this->applySupplyModeFilter($query);
@@ -395,6 +396,10 @@ class PrescriptionOrderLists extends BaseAdminDataLists implements ListsSearchIn
if ($diagIdsForAssist !== []) {
$assistantByDiag = Diagnosis::whereIn('id', $diagIdsForAssist)->whereNull('delete_time')->column('assistant_id', 'id');
}
+ $assistantIds = array_values(array_unique(array_filter(array_map('intval', array_values($assistantByDiag)))));
+ $assistantNames = $assistantIds !== []
+ ? \app\common\model\auth\Admin::whereIn('id', $assistantIds)->column('name', 'id')
+ : [];
foreach ($lists as &$item) {
PrescriptionOrderLogic::maskInternalCostIfNeeded($item, $this->adminInfo);
$pid = (int) ($item['id'] ?? 0);
@@ -410,11 +415,19 @@ class PrescriptionOrderLists extends BaseAdminDataLists implements ListsSearchIn
$this->adminInfo,
$assistantByDiag
);
-
+
// 添加创建人姓名
$creatorId = (int) ($item['creator_id'] ?? 0);
$item['creator_name'] = $creatorId > 0 ? ($creatorNames[$creatorId] ?? '') : '';
-
+
+ // 添加医助(来自诊单 assistant_id)
+ $diagIdForAssist = (int) ($item['diagnosis_id'] ?? 0);
+ $assistantIdForItem = (int) ($assistantByDiag[$diagIdForAssist] ?? 0);
+ $item['assistant_id'] = $assistantIdForItem;
+ $item['assistant_name'] = $assistantIdForItem > 0
+ ? ($assistantNames[$assistantIdForItem] ?? '')
+ : '';
+
// 添加开方人姓名、处方登记手机(与业务订单收货手机比对用)
$rxId = (int) ($item['prescription_id'] ?? 0);
$item['doctor_name'] = $rxId > 0 ? ($prescriptionCreators[$rxId]['doctor_name'] ?? '') : '';
@@ -745,6 +758,26 @@ class PrescriptionOrderLists extends BaseAdminDataLists implements ListsSearchIn
);
}
+ /**
+ * 按真实患者ID精确过滤(tcm_diagnosis.patient_id 是跨诊单的患者唯一ID)
+ * 用于诊单编辑抽屉「业务订单」tab 列出该患者所有诊单产生的处方业务订单。
+ */
+ private function applyPatientIdFilter($query): void
+ {
+ $patientId = (int) ($this->params['patient_id'] ?? 0);
+ if ($patientId <= 0) {
+ return;
+ }
+
+ $poTbl = (new PrescriptionOrder())->getTable();
+ $diagTbl = (new Diagnosis())->getTable();
+
+ $query->whereExists(
+ "SELECT 1 FROM `{$diagTbl}` dg WHERE dg.`id` = `{$poTbl}`.`diagnosis_id` "
+ . "AND dg.`delete_time` IS NULL AND dg.`patient_id` = {$patientId}"
+ );
+ }
+
/**
* 按快递单号 / 快递公司 模糊检索
*/
diff --git a/server/sql/1.9.20260505/add_diagnosis_patient_orders_menu.sql b/server/sql/1.9.20260505/add_diagnosis_patient_orders_menu.sql
new file mode 100644
index 00000000..1ad63e06
--- /dev/null
+++ b/server/sql/1.9.20260505/add_diagnosis_patient_orders_menu.sql
@@ -0,0 +1,22 @@
+# 诊单编辑抽屉「业务订单」tab:菜单按钮权限注册(2026-05-07)
+# 挂在「中医诊单」(perms=tcm.diagnosis/lists) 菜单下,按钮型权限节点:
+# tcm.diagnosis/patientOrders 在编辑诊单抽屉查看「业务订单」tab
+#
+# 说明:
+# - 此权限仅控制前端 tab 可见性。
+# - tab 内拉取数据复用 /tcm.prescriptionOrder/lists 接口,因此需同时分配
+# tcm.prescriptionOrder/lists 接口权限给目标角色,否则 tab 可见但列表为空/被拦截。
+
+SET @diag_menu_id := (SELECT id FROM zyt_system_menu WHERE perms = 'tcm.diagnosis/lists' LIMIT 1);
+
+INSERT INTO zyt_system_menu (
+ pid, type, name, icon, sort, perms, paths, component,
+ selected, params, is_cache, is_show, is_disable, create_time, update_time
+)
+SELECT
+ @diag_menu_id, 'A', '业务订单查看', '', 70,
+ 'tcm.diagnosis/patientOrders', '', '',
+ '', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
+FROM DUAL
+WHERE @diag_menu_id IS NOT NULL
+ AND NOT EXISTS (SELECT 1 FROM zyt_system_menu WHERE perms = 'tcm.diagnosis/patientOrders');
From 7a2f285442cbc7293eb799226b268076883c5a80 Mon Sep 17 00:00:00 2001
From: ShengLong <452591453@qq.com>
Date: Thu, 7 May 2026 10:50:37 +0800
Subject: [PATCH 2/2] 1
---
.../add_diagnosis_patient_orders_menu.sql | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename server/sql/{1.9.20260505 => 1.9.20260507}/add_diagnosis_patient_orders_menu.sql (100%)
diff --git a/server/sql/1.9.20260505/add_diagnosis_patient_orders_menu.sql b/server/sql/1.9.20260507/add_diagnosis_patient_orders_menu.sql
similarity index 100%
rename from server/sql/1.9.20260505/add_diagnosis_patient_orders_menu.sql
rename to server/sql/1.9.20260507/add_diagnosis_patient_orders_menu.sql