From b82a5a464f35248d09abb4f78738b0acd9731409 Mon Sep 17 00:00:00 2001 From: Nelson <1475262689@qq.com> Date: Fri, 10 Jul 2026 14:34:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=8D=E6=9E=84=E5=AD=A6=E5=91=98?= =?UTF-8?q?=E7=AB=AF=E7=99=BB=E5=BD=95=E9=A1=B5=E9=9D=A2=E2=80=94=E2=80=94?= =?UTF-8?q?=E4=B8=93=E4=B8=9A=E7=A7=BB=E5=8A=A8=E7=AB=AFH5=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E4=BD=93=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LoginPanel.vue 完全重写: - 品牌标题区:绿色圆角图标+主标题+副标题+装饰盾牌 - 表单卡片:白色圆角卡片承载手机号+短信验证码 - 图形验证码按需弹出:点击发送验证码时弹出模态弹窗 - 用户协议:自定义checkbox+协议弹窗(Tab切换) - 倒计时持久化:localStorage按手机号存储,刷新不重置 - Toast提示:发送成功/失败/登录错误 - 辅助入口:收不到验证码/登录遇到问题弹窗 - 底部安全说明:盾牌图标+信任提示 - 输入过滤:只允许数字,16px字号防iOS缩放 - 响应式:最大420px居中,safe-area适配 styles.css:移除旧登录样式,保留全局基础 --- .../user-client/src/components/LoginPanel.vue | 1244 +++++++++++++++-- .../apps/user-client/src/styles.css | 162 +-- 2 files changed, 1163 insertions(+), 243 deletions(-) diff --git a/ai_knowledge_base_v2/apps/user-client/src/components/LoginPanel.vue b/ai_knowledge_base_v2/apps/user-client/src/components/LoginPanel.vue index 47c9eec..e75e1bf 100644 --- a/ai_knowledge_base_v2/apps/user-client/src/components/LoginPanel.vue +++ b/ai_knowledge_base_v2/apps/user-client/src/components/LoginPanel.vue @@ -1,145 +1,1221 @@ + + diff --git a/ai_knowledge_base_v2/apps/user-client/src/styles.css b/ai_knowledge_base_v2/apps/user-client/src/styles.css index 39c2054..a9202d7 100644 --- a/ai_knowledge_base_v2/apps/user-client/src/styles.css +++ b/ai_knowledge_base_v2/apps/user-client/src/styles.css @@ -51,167 +51,11 @@ button { color: #557066; } +/* ── 登录页使用组件内 scoped 样式,全局仅保留基础重置 ── */ .login-panel { height: 100%; - padding: 72px 24px 24px; - display: flex; - flex-direction: column; - gap: 18px; - background: linear-gradient(180deg, #ffffff 0%, #f3faf7 100%); -} - -.brand-mark { - width: 56px; - height: 56px; - display: grid; - place-items: center; - border-radius: 16px; - background: #0f8b6f; - color: #ffffff; - font-weight: 800; - letter-spacing: 0; -} - -.login-panel h1 { - margin: 10px 0 0; - font-size: 28px; - line-height: 1.2; -} - -.login-panel p { - margin: 0 0 18px; - color: #5f746c; -} - -.login-panel label { - display: grid; - gap: 8px; - color: #40524b; - font-size: 14px; -} - -.login-panel input, -.composer textarea { - width: 100%; - border: 1px solid #cad8d2; - border-radius: 14px; - background: #ffffff; - color: #17211d; - outline: none; -} - -.login-panel input { - height: 48px; - padding: 0 14px; -} - -.login-panel input:focus, -.composer textarea:focus { - border-color: #0f8b6f; - box-shadow: 0 0 0 3px rgba(15, 139, 111, 0.12); -} - -.code-row { - display: grid; - grid-template-columns: minmax(0, 1fr) 92px; - gap: 10px; -} - -.captcha-row { - display: grid; - grid-template-columns: minmax(0, 1fr) 128px; - gap: 10px; -} - -.captcha-image { - height: 48px; - padding: 0; - overflow: hidden; - border: 1px solid #cad8d2; - border-radius: 14px; - background: #ffffff; -} - -.captcha-image img { - width: 100%; - height: 100%; - display: block; - object-fit: cover; -} - -.captcha-image span { - color: #5f746c; - font-size: 13px; -} - -.primary, -.secondary, -.send-btn, -.stop-btn, -.new-session-btn { - border: 0; - border-radius: 14px; - font-weight: 700; -} - -.primary { - height: 50px; - margin-top: 8px; - background: #0f8b6f; - color: #ffffff; -} - -.secondary { - background: #e5f3ef; - color: #0f735d; -} - -button:disabled { - cursor: not-allowed; - opacity: 0.52; -} - -.form-tip { - min-height: 20px; - color: #657970; - font-size: 13px; -} - -.dialog-mask { - position: absolute; - inset: 0; - z-index: 20; - display: grid; - place-items: center; - padding: 24px; - background: rgba(12, 24, 20, 0.42); -} - -.dialog-box { - width: min(100%, 320px); - padding: 22px; - border-radius: 18px; - background: #ffffff; - box-shadow: 0 18px 48px rgba(15, 31, 26, 0.22); -} - -.dialog-box strong { - display: block; - color: #17211d; - font-size: 18px; - line-height: 1.35; -} - -.dialog-box p { - margin: 10px 0 18px; - color: #51655d; - font-size: 14px; - line-height: 1.7; -} - -.dialog-box .primary { - width: 100%; - margin-top: 0; + overflow-y: auto; + -webkit-overflow-scrolling: touch; } .topbar {