fix: 解决下拉列表问题

This commit is contained in:
王天骄
2026-06-18 15:09:47 +08:00
parent 58c2764e06
commit bc324a4163
3 changed files with 78 additions and 6 deletions
+44 -2
View File
@@ -12,7 +12,22 @@
<section class="filter-bar case-review-filter">
<el-input v-model="filters.search" :prefix-icon="Search" clearable placeholder="搜索病例" @keyup.enter="handleSearch" />
<el-input v-model="filters.department" clearable placeholder="科室ID" @keyup.enter="handleSearch" />
<el-select
v-model="filters.department"
:loading="loadingDepartments"
clearable
filterable
placeholder="科室名称"
@change="handleSearch"
@visible-change="handleDepartmentVisibleChange"
>
<el-option
v-for="item in departmentOptions"
:key="item.id"
:label="item.name"
:value="String(item.id)"
/>
</el-select>
<el-button :icon="Search" type="primary" @click="handleSearch">查询</el-button>
<el-button :icon="Refresh" @click="resetFilters">重置</el-button>
</section>
@@ -269,6 +284,7 @@ import {
type CaseListItem,
type CasePublishStatus
} from '@/api/cases'
import { fetchMyDepartments, type DepartmentOption } from '@/api/users'
import { useAppStore } from '@/stores/app'
type ReviewCaseType = 'traditional' | 'teaching'
@@ -316,8 +332,10 @@ const appStore = useAppStore()
const loading = ref(false)
const publishing = ref(false)
const detailLoading = ref(false)
const loadingDepartments = ref(false)
const detailDrawerVisible = ref(false)
const cases = ref<CaseListItem[]>([])
const departmentOptions = ref<DepartmentOption[]>([])
const detailCase = ref<CaseListItem | null>(null)
const caseDetail = ref<unknown>(null)
const detailForm = reactive<ReviewCaseDetailForm>({
@@ -396,6 +414,27 @@ function resetFilters() {
loadReviewCases()
}
async function loadDepartmentOptions() {
if (!appStore.token || loadingDepartments.value || departmentOptions.value.length) {
return
}
try {
loadingDepartments.value = true
departmentOptions.value = await fetchMyDepartments(appStore.token)
} catch (error) {
ElMessage.error(error instanceof Error ? error.message : '获取科室列表失败')
} finally {
loadingDepartments.value = false
}
}
function handleDepartmentVisibleChange(visible: boolean) {
if (visible) {
loadDepartmentOptions()
}
}
async function openDetailDrawer(row: CaseListItem) {
if (!appStore.token) {
ElMessage.warning('缺少登录信息,请重新登录')
@@ -871,7 +910,10 @@ function formatDateTime(value: string) {
return value.replace('T', ' ').slice(0, 19)
}
onMounted(loadReviewCases)
onMounted(() => {
loadReviewCases()
loadDepartmentOptions()
})
</script>
<style scoped lang="scss">
+33 -2
View File
@@ -22,9 +22,40 @@
<el-option label="正常" :value="1" />
<el-option label="已发布" :value="2" />
</el-select>
<el-input v-if="canManageInstitution" v-model="filters.institution" clearable placeholder="机构ID" @keyup.enter="loadCases" />
<el-select
v-if="canManageInstitution"
v-model="filters.institution"
:loading="loadingInstitutions"
clearable
filterable
placeholder="机构名称"
@change="handleSearch"
@visible-change="handleInstitutionVisibleChange"
>
<el-option
v-for="item in institutionOptions"
:key="item.id"
:label="institutionOptionLabel(item)"
:value="String(item.id)"
/>
</el-select>
<template v-else>
<el-input v-model="filters.department" clearable placeholder="科室ID" @keyup.enter="loadCases" />
<el-select
v-model="filters.department"
:loading="loadingDepartments"
clearable
filterable
placeholder="科室名称"
@change="handleSearch"
@visible-change="handleDepartmentVisibleChange"
>
<el-option
v-for="item in departmentOptions"
:key="item.id"
:label="item.name"
:value="String(item.id)"
/>
</el-select>
<el-input v-model="filters.status" clearable placeholder="状态" @keyup.enter="loadCases" />
<el-select v-model="filters.osce_enabled" clearable placeholder="OSCE">
<el-option label="开启" value="true" />
+1 -2
View File
@@ -15,8 +15,7 @@
<section class="filter-bar relation-filter">
<el-input v-model="filters.search" :prefix-icon="Search" clearable placeholder="搜索师生姓名/手机号" @keyup.enter="loadRelations" />
<el-input v-model="filters.teacher" clearable placeholder="带教医生手机号" @keyup.enter="loadRelations" />
<el-input v-model="filters.student" clearable placeholder="学生手机号" @keyup.enter="loadRelations" />
<el-select v-model="filters.status" clearable placeholder="状态">
<el-option label="进行中" value="1" />
<el-option label="已结束" value="0" />