登录页修改

This commit is contained in:
wuyy 2026-05-26 09:22:21 +08:00
parent af6bf39cab
commit 6a7be0f67d
4 changed files with 172 additions and 132 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 473 KiB

View File

@ -1,95 +1,93 @@
<template>
<div class="login">
<el-form ref="loginRef" class="login-form" :model="loginForm" :rules="loginRules" :hide-required-asterisk="true">
<div class="login-header">
<div class="login-logo">
<img src="@/assets/images/logo_new.png" alt="系统Logo" />
</div>
<div class="login-split"></div>
<div class="login-title">
<h1>{{ oem.appname }}</h1>
<div class="login-container">
<div class="left_img"></div>
<div class="login-form">
<el-form ref="loginRef" :model="loginForm" :rules="loginRules" :hide-required-asterisk="true">
<div class="login-header">
<div class="login-logo">
<img src="@/assets/images/logo_new.png" alt="系统Logo" />
</div>
<div class="login-split"></div>
<div class="login-title">
<h1>{{ oem.appname }}</h1>
</div>
</div>
<!-- Tab切换容器 -->
<el-tabs v-model="activeName" type="card" @tab-click="handleClick" class="login-tabs">
<!-- 工号登录 Tab -->
<el-tab-pane label="账号密码登录" name="first">
<el-form-item label="医疗机构" prop="loginParam.loginYLJG" class="custom-select">
<el-select v-model="loginForm.loginParam.loginYLJG" placeholder="" style="width: 100%" class="no-border"
@change="handleChange">
<el-option v-for="item in selectOptions" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="用户工号" prop="username">
<el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="" class="no-border">
</el-input>
</el-form-item>
<el-form-item label="登录密码" prop="password">
<el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder=""
class="no-border" @keyup.enter="handleLogin">
</el-input>
</el-form-item>
<el-form-item prop="code" label="验 证 码 :" v-if="captchaEnabled">
<el-input v-model="loginForm.code" auto-complete="off" placeholder="" style="width: 53%"
class="no-border" @keyup.enter="handleLogin">
<template #prefix>
<svg-icon icon-class="validCode" class="el-input__icon input-icon" />
</template>
</el-input>
<div class="login-code">
<img :src="codeUrl" @click="getCode" class="login-code-img" />
</div>
</el-form-item>
<el-form-item style="width: 100%;">
<el-button :loading="loading" type="primary" class="login-btn" style="width: 100%;"
@click.prevent="handleLogin">
<span v-if="!loading">登 录</span>
<span v-else>登 录 中...</span>
</el-button>
<div style="float: right;" v-if="register">
<router-link class="link-type" :to="'/register'">立即注册</router-link>
</div>
</el-form-item>
</el-tab-pane>
<el-tab-pane label="扫码登录" name="second">
<div class="tab-placeholder">
<el-icon class="placeholder-icon">
<!-- <Sms /> -->
</el-icon>
<p>正在加载二维码...</p>
<el-button type="success" icon="wechat" class="wechat-login-btn">刷新二维码</el-button>
</div>
</el-tab-pane>
<el-tab-pane label="UKEY登录" name="third">
<div class="tab-placeholder">
<el-icon class="placeholder-icon">
<!-- <Wechat /> -->
</el-icon>
<p>UKEY登录功能开发中...</p>
</div>
</el-tab-pane>
</el-tabs>
</el-form>
<div class="el-login-footer">
<span>版权所有(R){{ oem.copyrightyear }} {{ oem.compay }} <br />
电话:{{ oem.phone }} E-mail:{{ oem.Email }} version:{{ oem.version }}</span>
</div>
</div>
<!-- Tab切换容器 -->
<el-tabs v-model="activeName" type="card" @tab-click="handleClick" class="login-tabs">
<!-- 工号登录 Tab -->
<el-tab-pane label="账号密码登录" name="first">
<el-form-item label="医疗机构:" prop="loginParam.loginYLJG" class="custom-select">
<el-select v-model="loginForm.loginParam.loginYLJG" placeholder="请选择医疗机构" style="width: 100%"
@change="handleChange">
<template #prefix>
<svg-icon icon-class="international" class="el-input__icon input-icon" />
</template>
<el-option v-for="item in selectOptions" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="用户工号:" prop="username">
<el-input v-model="loginForm.username" type="text" size="large" auto-complete="off" placeholder="账号">
<template #prefix>
<svg-icon icon-class="user" class="el-input__icon input-icon" />
</template>
</el-input>
</el-form-item>
<el-form-item label="登录密码:" prop="password">
<el-input v-model="loginForm.password" type="password" size="large" auto-complete="off" placeholder="密码"
@keyup.enter="handleLogin">
<template #prefix>
<svg-icon icon-class="password" class="el-input__icon input-icon" />
</template>
</el-input>
</el-form-item>
<el-form-item prop="code" label="验 证 码 :" v-if="captchaEnabled">
<el-input v-model="loginForm.code" size="large" auto-complete="off" placeholder="验证码" style="width: 53%"
@keyup.enter="handleLogin">
<template #prefix>
<svg-icon icon-class="validCode" class="el-input__icon input-icon" />
</template>
</el-input>
<div class="login-code">
<img :src="codeUrl" @click="getCode" class="login-code-img" />
</div>
</el-form-item>
<el-form-item style="width: 100%;">
<el-button :loading="loading" size="large" type="primary" class="login-btn" style="width: 100%;"
@click.prevent="handleLogin">
<span v-if="!loading">登 录</span>
<span v-else>登 录 中...</span>
</el-button>
<div style="float: right;" v-if="register">
<router-link class="link-type" :to="'/register'">立即注册</router-link>
</div>
</el-form-item>
</el-tab-pane>
<el-tab-pane label="扫码登录" name="second">
<div class="tab-placeholder">
<el-icon class="placeholder-icon">
<!-- <Sms /> -->
</el-icon>
<p>正在加载二维码...</p>
<el-button type="success" icon="wechat" class="wechat-login-btn">刷新二维码</el-button>
</div>
</el-tab-pane>
<el-tab-pane label="UKEY登录" name="third">
<div class="tab-placeholder">
<el-icon class="placeholder-icon">
<!-- <Wechat /> -->
</el-icon>
<p>UKEY登录功能开发中...</p>
</div>
</el-tab-pane>
</el-tabs>
</el-form>
<div class="el-login-footer">
<span>版权所有(R){{ oem.copyrightyear }} {{ oem.compay }} 电话:{{ oem.phone }} E-mail:{{ oem.Email }} version:{{
oem.version
}}</span>
</div>
</div>
</template>
@ -248,43 +246,65 @@ getCode();
.login {
position: relative;
height: 100vh;
background-image: url("../assets/images/login-background.jpg");
background: #02a5ff;
background-size: cover;
overflow: hidden;
}
.login-form {
.login-container {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: rgba(255, 255, 255, 0.4);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.9);
/* 关键1:替换固定百分比宽度为最大宽度+自适应,避免缩放时过度拉伸 */
width: clamp(800px, 70%, 1400px);
max-width: 1400px;
min-width: 800px;
height: 80vh;
min-height: 500px;
background: #fff;
display: flex;
border-radius: 12px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
width: 480px;
padding: 35px 35px 5px 35px;
overflow: hidden;
.el-input {
height: 40px;
.left_img {
background-image: url(../assets/images/login_left.png);
background-size: 100% 100%;
flex: 0 0 50%;
max-width: 50%;
height: 100%;
}
}
input {
height: 40px;
}
.login-form {
flex: 1;
min-width: 350px;
height: 100%;
padding: clamp(40px, 8%, 100px);
box-sizing: border-box;
.el-form-item:not(:last-child) {
border-bottom: 1px solid #ccc
}
.input-icon {
height: 39px;
width: 14px;
margin-left: 0px;
.no-border {
--el-input-border-color: transparent !important;
--el-input-hover-border-color: transparent !important;
--el-input-focus-border-color: transparent !important;
--el-select-input-border-color: transparent !important;
border-color: transparent !important;
}
.no-border :deep(.el-input__wrapper),
.no-border :deep(.el-select__wrapper) {
border: none !important;
box-shadow: none !important;
}
}
.login-code {
width: 33%;
height: 40px;
float: right;
img {
@ -296,17 +316,23 @@ getCode();
}
}
.login-btn {
background: linear-gradient(#00d3f9, #00b1f3);
border: none;
margin-top: 20px;
width: 100%;
height: 50px;
font-size: 16px;
}
.el-login-footer {
height: 40px;
line-height: 40px;
position: fixed;
bottom: 0;
line-height: 30px;
width: 100%;
text-align: center;
color: #fff;
color: #000;
font-family: Arial;
font-size: 12px;
letter-spacing: 1px;
margin-top: 30px;
}
/* Logo和标题样式 */
@ -314,11 +340,14 @@ getCode();
display: flex;
align-items: center;
margin-bottom: 30px;
/* 缩放时标题区域自适应 */
flex-wrap: nowrap;
}
.login-logo img {
height: 40px;
width: auto;
min-height: 30px;
}
.login-split {
@ -330,28 +359,40 @@ getCode();
.login-title h1 {
margin: 0;
font-size: 24px;
color: #1989fa;
font-size: clamp(18px, 2vw, 24px);
color: #000;
font-weight: 500;
}
/* Tab容器样式(修复冲突) */
/* Tab容器样式 */
.login-tabs {
width: 100%;
height: 350px;
height: clamp(280px, 70%, 350px);
min-height: 280px;
overflow: hidden;
border-radius: 8px;
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.1);
padding: 1px 10px 10px;
background: transparent;
:deep(.el-tabs__header) {
background: transparent;
margin: 0;
}
:deep(.el-tabs__nav) {
width: 100% !important;
}
:deep(.el-tabs__item) {
width: 33.33% !important;
&.is-active {
border-bottom: 2px solid #00d3f9 !important;
}
}
:deep(.el-tabs__nav-prev),
:deep(.el-tabs__nav-next) {
display: none !important; // 隐藏Tab左右箭头
@ -363,8 +404,7 @@ getCode();
}
.custom-select {
margin-top: 20px;
/* 可根据需求调整数值 */
margin-top: 30px;
}
/* Tab占位样式 */
@ -375,22 +415,20 @@ getCode();
justify-content: center;
padding: 40px 0;
color: #666;
height: calc(100% - 40px); // 适配Tab容器高度
/* 适配Tab容器高度,防止溢出 */
height: calc(100% - 40px);
.placeholder-icon {
font-size: 48px;
font-size: clamp(36px, 8vw, 48px);
/* 图标大小自适应 */
margin-bottom: 20px;
color: #ccc;
}
.wechat-login-btn {
margin-top: 20px;
width: 200px;
width: clamp(150px, 40%, 200px);
/* 按钮宽度自适应 */
}
}
/* 隐藏必填项星号 */
:deep(.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap .el-form-item__asterisk) {
display: none !important;
}
</style>

View File

@ -237,7 +237,7 @@ const rowHandle = (row) => {
{ title: '标本送检', time: row.sendPackTime },
{ title: '标本签收', time: row.signInTime },
{ title: '上机检验', time: row.operdatetime },
{ title: '结果审核', time: row.confirmtime },
{ title: '结果审核', time: row.reportTime },
]
}

View File

@ -58,7 +58,7 @@
</div>
<div class="leftMain_middle_right">
<div class="leftMain_middle_rightIn">
<h3>当日送检样本情况</h3>
<h3>当月标本全流程监控情况</h3>
<div class="biaoge biaoge_pai">
<div class="biaoge_paiIn">
<ul>
@ -223,6 +223,7 @@ const getEcharts1 = (data: any) => {
color: '#fff',
}
},
minInterval: 1,
axisTick: {
show: false
},
@ -362,7 +363,8 @@ const getEcharts3 = () => {
}],
yAxis: {
type: 'value',
name: '单位:个',
minInterval: 1,
axisLine: {
show: true,
symbol: ['none', 'arrow'],