| | |
| | | } |
| | | |
| | | .login-submit { |
| | | width: 100%; |
| | | display: inline-flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | font-size: 16px; |
| | | font-weight: 600; |
| | | border-radius: 16px; |
| | | margin-top: 6px; |
| | | box-shadow: 0 14px 24px rgba(46, 115, 223, 0.28); |
| | | } |
| | | |
| | | .login-actions { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 12px; |
| | | margin-top: 6px; |
| | | } |
| | | |
| | | .login-actions .el-button { |
| | | width: 100%; |
| | | margin-left: 0; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .login-passkey { |
| | | display: inline-flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | border-radius: 16px; |
| | | border-color: rgba(71, 110, 162, 0.24); |
| | | color: #26496a; |
| | | background: rgba(245, 249, 255, 0.96); |
| | | } |
| | | |
| | | .login-passkey-tip { |
| | | margin-top: 12px; |
| | | color: #7b8c9d; |
| | | font-size: 12px; |
| | | line-height: 1.7; |
| | | } |
| | | |
| | | .tools-dialog .el-dialog, |
| | |
| | | <div class="login-subtitle">{{ text('login.subtitle', '请输入账号和密码进入系统。') }}</div> |
| | | </div> |
| | | <div class="login-body"> |
| | | <el-form ref="loginForm" class="login-form" :model="loginForm" :rules="loginRules" @submit.native.prevent> |
| | | <el-form ref="loginForm" class="login-form" :model="loginForm" :rules="loginRules" :validate-on-rule-change="false" @submit.native.prevent> |
| | | <el-form-item prop="mobile"> |
| | | <el-input v-model.trim="loginForm.mobile" :placeholder="text('login.username', '账号')" clearable @keyup.enter.native="handleLogin"> |
| | | <i slot="prefix" class="el-input__icon el-icon-user"></i> |
| | |
| | | <i slot="prefix" class="el-input__icon el-icon-lock"></i> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-button class="login-submit" type="primary" :loading="loginLoading" @click="handleLogin"> |
| | | {{ text('login.submit', '登录') }} |
| | | </el-button> |
| | | <div class="login-actions"> |
| | | <el-button class="login-submit" type="primary" :loading="loginLoading" @click="handleLogin"> |
| | | {{ text('login.submit', '登录') }} |
| | | </el-button> |
| | | <el-button class="login-passkey" plain :loading="passkeyLoading" @click="handlePasskeyLogin"> |
| | | {{ text('login.passkey.submit', '通行密钥登录') }} |
| | | </el-button> |
| | | </div> |
| | | <div class="login-passkey-tip"> |
| | | {{ text('login.passkey.tip', '支持使用设备生物识别或安全密钥登录。可先输入账号缩小凭证范围,留空则尝试发现式登录。') }} |
| | | </div> |
| | | </el-form> |
| | | </div> |
| | | </section> |
| | |
| | | append-to-body> |
| | | <div class="mfa-tip">{{ text('login.mfa.tip', '账号密码已通过,请输入身份验证器中的 6 位动态验证码后继续登录。') }}</div> |
| | | <div class="mfa-account">{{ text('login.mfa.currentAccount', '当前账号:') }}<strong>{{ mfaPending.username || loginForm.mobile || '--' }}</strong></div> |
| | | <el-form ref="mfaForm" :model="mfaForm" :rules="mfaRules" label-width="82px" size="small" @submit.native.prevent> |
| | | <el-form ref="mfaForm" :model="mfaForm" :rules="mfaRules" :validate-on-rule-change="false" label-width="82px" size="small" @submit.native.prevent> |
| | | <el-form-item :label="text('login.mfa.codeLabel', '验证码')" prop="code"> |
| | | <el-input v-model.trim="mfaForm.code" maxlength="6" :placeholder="text('login.mfa.codePlaceholder', '请输入6位动态码')" @keyup.enter.native="handleMfaLogin"></el-input> |
| | | </el-form-item> |
| | |
| | | <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script> |
| | | <script type="text/javascript" src="../static/js/tools/md5.js"></script> |
| | | <script type="text/javascript" src="../static/js/common.js"></script> |
| | | <script type="text/javascript" src="../static/js/webauthn-utils.js"></script> |
| | | <script type="text/javascript" src="../static/vue/js/vue.min.js"></script> |
| | | <script type="text/javascript" src="../static/vue/element/element.js"></script> |
| | | <script type="text/javascript" src="../static/js/login/login.js?v=20260311_login_mfa"></script> |
| | | <script type="text/javascript" src="../static/js/login/login.js?v=20260311_login_passkey"></script> |
| | | </html> |