From 91624bf3de7a3511d142798a969a1e745aed25f8 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 17 Apr 2026 17:07:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/src/views/tcm/diagnosis/index.vue | 47 +++++++++++++++++-- .../app/adminapi/lists/tcm/DiagnosisLists.php | 32 +++++++++---- 2 files changed, 66 insertions(+), 13 deletions(-) diff --git a/admin/src/views/tcm/diagnosis/index.vue b/admin/src/views/tcm/diagnosis/index.vue index efb84732..df2e0871 100644 --- a/admin/src/views/tcm/diagnosis/index.vue +++ b/admin/src/views/tcm/diagnosis/index.vue @@ -7,12 +7,20 @@ {{ tab.label }} {{ dateCounts[tab.value] }} + + 待分配医助 + {{ pendingAssignCount }} +
@@ -575,7 +583,8 @@ const formData = reactive({ end_time: '', diagnosis_confirmed: '' as '' | '0' | '1', appointment_date: '' as string, - has_appointment: '' as '' | '0' | '1' + has_appointment: '' as '' | '0' | '1', + pending_assign: '' as '' | '1' }) const activeTab = ref('all') @@ -621,27 +630,39 @@ const dateTabs = computed(() => [ ]) const dateCounts = ref>({}) +const pendingAssignCount = ref(undefined) const handleDateTabClick = async (value: string) => { + formData.pending_assign = '' formData.appointment_date = value pager.page = 1 await getLists() fetchDateCounts() } -// 获取各日期挂号数量 +const handlePendingAssignTabClick = async () => { + formData.pending_assign = '1' + formData.appointment_date = '' + pager.page = 1 + await getLists() + fetchDateCounts() +} + +// 获取各日期挂号数量 + 待分配医助数量 const fetchDateCounts = async () => { try { - const [today, tomorrow, dayAfter] = await Promise.all([ + const [today, tomorrow, dayAfter, pending] = await Promise.all([ tcmDiagnosisLists({ appointment_date: todayStr.value, page_no: 1, page_size: 1 }), tcmDiagnosisLists({ appointment_date: tomorrowStr.value, page_no: 1, page_size: 1 }), - tcmDiagnosisLists({ appointment_date: dayAfterStr.value, page_no: 1, page_size: 1 }) + tcmDiagnosisLists({ appointment_date: dayAfterStr.value, page_no: 1, page_size: 1 }), + tcmDiagnosisLists({ pending_assign: 1, page_no: 1, page_size: 1 }) ]) dateCounts.value = { [todayStr.value]: today?.count ?? 0, [tomorrowStr.value]: tomorrow?.count ?? 0, [dayAfterStr.value]: dayAfter?.count ?? 0 } + pendingAssignCount.value = pending?.count ?? 0 } catch (e) { console.error('获取日期数量失败', e) } @@ -768,6 +789,7 @@ const handleReset = () => { formData.diagnosis_confirmed = '' formData.appointment_date = '' formData.has_appointment = '' + formData.pending_assign = '' pager.page = 1 getLists() fetchDateCounts() @@ -1494,6 +1516,21 @@ onUnmounted(() => { background: var(--el-color-primary); } } + + .chip-pending { + margin-left: 8px; + color: var(--el-color-warning); + background: var(--el-color-warning-light-9); + + &:hover { + background: var(--el-color-warning-light-8); + } + + &.active { + color: #fff; + background: var(--el-color-warning); + } + } } .search-row { diff --git a/server/app/adminapi/lists/tcm/DiagnosisLists.php b/server/app/adminapi/lists/tcm/DiagnosisLists.php index a372649a..67ad16cb 100644 --- a/server/app/adminapi/lists/tcm/DiagnosisLists.php +++ b/server/app/adminapi/lists/tcm/DiagnosisLists.php @@ -56,12 +56,16 @@ class DiagnosisLists extends BaseAdminDataLists implements ListsSearchInterface { // 获取当前管理员的角色ID $roleIds = AdminRole::where('admin_id', $this->adminId)->column('role_id'); - + + // 待分配医助筛选:assistant_id 为空或 0(放在最前面判断,便于跳过医助角色的自我过滤) + $pendingAssign = isset($this->params['pending_assign']) && (string) $this->params['pending_assign'] === '1'; + // 构建查询 $query = Diagnosis::where($this->searchWhere); - - // 如果是医助角色(role_id=2),只显示自己添加的患者 - if (in_array(2, $roleIds)) { + + // 如果是医助角色(role_id=2),只显示自己添加的患者; + // 但当前在查"待分配医助"时应放开,否则 NULL 记录永远不会匹配 assistant_id=adminId + if (in_array(2, $roleIds) && !$pendingAssign) { $query->where('assistant_id', $this->adminId); } @@ -74,6 +78,11 @@ class DiagnosisLists extends BaseAdminDataLists implements ListsSearchInterface }); } + // 待分配医助:assistant_id 为 NULL 或 0(使用 whereRaw 避免闭包 whereOr 歧义) + if ($pendingAssign) { + $query->whereRaw('(assistant_id IS NULL OR assistant_id = 0)'); + } + // 是否确认诊单:1=已确认 0=未确认 if (isset($this->params['diagnosis_confirmed']) && $this->params['diagnosis_confirmed'] !== '') { $confirmed = (int)$this->params['diagnosis_confirmed']; @@ -409,12 +418,14 @@ class DiagnosisLists extends BaseAdminDataLists implements ListsSearchInterface { // 获取当前管理员的角色ID $roleIds = AdminRole::where('admin_id', $this->adminId)->column('role_id'); - + + $pendingAssign = isset($this->params['pending_assign']) && (string) $this->params['pending_assign'] === '1'; + // 构建查询 $query = Diagnosis::where($this->searchWhere); - - // 如果是医助角色(role_id=2),只显示自己添加的患者 - if (in_array(2, $roleIds)) { + + // 如果是医助角色(role_id=2),只显示自己添加的患者;查"待分配医助"时放开 + if (in_array(2, $roleIds) && !$pendingAssign) { $query->where('assistant_id', $this->adminId); } @@ -427,6 +438,11 @@ class DiagnosisLists extends BaseAdminDataLists implements ListsSearchInterface }); } + // 待分配医助:assistant_id 为 NULL 或 0 + if ($pendingAssign) { + $query->whereRaw('(assistant_id IS NULL OR assistant_id = 0)'); + } + // 是否确认诊单 if (isset($this->params['diagnosis_confirmed']) && $this->params['diagnosis_confirmed'] !== '') { $confirmed = (int)$this->params['diagnosis_confirmed'];