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'];