fix(mobile): 修复登录页面始终显示医院选择

This commit is contained in:
2026-06-19 21:59:26 +08:00
parent 5b90a61484
commit 3bc8a85426

View File

@@ -2,7 +2,7 @@
<div class="login-page">
<div class="login-header">
<div class="logo">🏥</div>
<h1>HealthLink 移动护理</h1>
<h1>{{ currentTenantName || 'HealthLink 移动护理' }}</h1>
<p>医院信息管理系统</p>
</div>
<div class="login-form">
@@ -10,10 +10,11 @@
<label>用户名</label>
<input v-model="form.username" type="text" placeholder="请输入用户名" class="input" @blur="loadTenants" />
</div>
<div class="form-item" v-if="tenants.length > 0">
<label>租户</label>
<select v-model="form.tenantId" class="input">
<option v-for="t in tenants" :key="t.id" :value="t.id">{{ t.tenantName }}</option>
<div class="form-item">
<label>医院/租户</label>
<select v-model="form.tenantId" class="input" @change="onTenantChange">
<option value="">请选择医院</option>
<option v-for="t in tenantOptions" :key="t.value" :value="t.value">{{ t.label }}</option>
</select>
</div>
<div class="form-item">
@@ -25,6 +26,9 @@
</button>
<div v-if="errorMsg" class="error-msg">{{ errorMsg }}</div>
</div>
<div class="login-footer">
<span>{{ currentTenantName || 'HealthLink' }} v1.0</span>
</div>
</div>
</template>
@@ -37,24 +41,35 @@ import { authApi } from '../api'
const router = useRouter()
const loading = ref(false)
const errorMsg = ref('')
const tenants = ref([])
const form = ref({ username: '', password: '', tenantId: null })
const tenantOptions = ref([])
const currentTenantName = ref('')
const form = ref({ username: '', password: '', tenantId: '' })
const loadTenants = async () => {
if (!form.value.username) return
try {
const res = await authApi.getTenants(form.value.username)
if (res.code === 200 && res.data) {
tenants.value = res.data
if (res.data.length === 1) form.value.tenantId = res.data[0].id
tenantOptions.value = res.data.map(item => ({
label: item.tenantName,
value: item.id
}))
if (tenantOptions.value.length === 1) {
form.value.tenantId = tenantOptions.value[0].value
currentTenantName.value = tenantOptions.value[0].label
}
}
} catch (e) { console.error(e) }
}
const onTenantChange = () => {
const selected = tenantOptions.value.find(t => t.value === form.value.tenantId)
currentTenantName.value = selected ? selected.label : ''
}
const handleLogin = async () => {
if (!form.value.username) { errorMsg.value = '请输入用户名'; return }
if (!form.value.password) { errorMsg.value = '请输入密码'; return }
if (!form.value.tenantId && tenants.value.length > 0) { errorMsg.value = '请选择租户'; return }
loading.value = true
errorMsg.value = ''
@@ -85,7 +100,7 @@ const handleLogin = async () => {
.login-page { min-height: 100vh; background: linear-gradient(135deg, #1890ff 0%, #096dd9 100%); display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 20px; }
.login-header { text-align: center; color: #fff; margin-bottom: 40px; }
.logo { font-size: 60px; margin-bottom: 12px; }
.login-header h1 { font-size: 24px; margin: 0; }
.login-header h1 { font-size: 22px; margin: 0; }
.login-header p { font-size: 14px; opacity: 0.8; margin-top: 8px; }
.login-form { background: #fff; border-radius: 12px; padding: 24px; width: 100%; max-width: 360px; box-shadow: 0 4px 20px rgba(0,0,0,0.15); }
.form-item { margin-bottom: 16px; }
@@ -96,4 +111,5 @@ select.input { appearance: none; background: #fff url("data:image/svg+xml,%3Csvg
.login-btn { width: 100%; padding: 14px; background: #1890ff; color: #fff; border: none; border-radius: 8px; font-size: 18px; font-weight: 600; cursor: pointer; }
.login-btn:disabled { background: #91d5ff; }
.error-msg { color: #f5222d; text-align: center; margin-top: 12px; font-size: 14px; }
.login-footer { margin-top: 20px; color: rgba(255,255,255,0.6); font-size: 12px; }
</style>