@model string
@{
Layout = null;
}
<!DOCTYPE html>
<html lang="zh-Hans">
<head>
<title>登录 - 认证中心</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="@Url.Content("~/css/global.css")" asp-append-version="true"/>
</head>
<body>
<div class="container">
<div class="header">
<h1>登录认证中心</h1>
<p>欢迎回来,请输入您的账户信息</p>
</div>
<form method="post" autocomplete="on" data-submit-loading="true">
<div class="input-section">
<label class="input-label" for="account">账号</label>
<div class="input-wrapper">
<input
id="account"
name="account"
type="text"
class="text-input"
placeholder="请输入账号或邮箱"
autocomplete="username"
required
autofocus
/>
</div>
</div>
<div class="input-section">
<label class="input-label" for="password">密码</label>
<div class="input-wrapper">
<input
id="password"
name="password"
type="password"
class="text-input"
placeholder="请输入密码"
autocomplete="current-password"
required
/>
<button type="button" class="toggle-visibility" onclick="togglePassword()" aria-label="显示或隐藏密码">显示</button>
</div>
</div>
<div class="input-section">
<label class="input-label" for="pinCode">PIN码(如已启用双因素)</label>
<div class="input-wrapper">
<input
id="pinCode"
name="pinCode"
type="text"
class="pin-input"
placeholder="6位PIN码(可选)"
inputmode="numeric"
pattern="[0-9]{6}"
maxlength="6"
autocomplete="one-time-code"
/>
</div>
</div>
<div class="checkbox-row">
<label class="checkbox-left" for="remember">
<input type="checkbox" id="remember" name="remember" value="true" />
记住我
</label>
<a class="link-right" href="#" onclick="return false;">忘记密码?</a>
</div>
@if (TempData["Msg"] is string message)
{
@if (message.Contains("密码修改成功"))
{
<div class="success-message">
@message
</div>
}
else if (message.Contains("已被禁用"))
{
<div class="error-message account-disabled">
@message
</div>
}
else
{
<div class="error-message">
@message
</div>
}
}
else if (Context.Request.Query["msg"] == "security-stamp-expired")
{
<div class="warning-message">
您的密码已在其他设备上修改,为了安全起见,请重新登录
</div>
}
else if (Context.Request.Query["msg"] == "account-disabled")
{
<div class="error-message account-disabled">
<strong>⚠️ 账户已被禁用</strong>
<p>您的账户已被禁用,无法登录。如有疑问,请联系管理员。</p>
</div>
}
else if (Context.Request.Query["msg"] == "user-not-found")
{
<div class="error-message">
用户不存在或验证失败,请重新登录
</div>
}
else if (Context.Request.Query["msg"] == "auth-error")
{
<div class="error-message">
认证过程出错,请重新登录
</div>
}
<input type="hidden" name="returnUrl" value="@Model"/>
<button type="submit" class="submit-button" data-loading-text="登录中...">登录</button>
</form>
<div class="footer">
<p>为保障账户安全,建议开启双因素验证</p>
</div>
</div>
<script src="@Url.Content("~/js/ui-components.js")" asp-append-version="true"></script>
<script src="@Url.Content("~/js/signin.js")" asp-append-version="true"></script>
</body>
</html>