From e846ecdfa1d8b96185abbff04be5b1344c172c61 Mon Sep 17 00:00:00 2001 From: molong Date: Tue, 27 Jan 2026 23:01:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/style/auth.scss | 356 ++++++++++++++++++++ src/layouts/other/404.vue | 535 ++++++++++-------------------- src/layouts/other/empty.vue | 403 +++++++++------------- src/pages/login/index.vue | 264 +++++++++------ src/pages/login/resetPassword.vue | 244 +++++++------- src/pages/login/userRegister.vue | 226 +++++++------ 6 files changed, 1112 insertions(+), 916 deletions(-) create mode 100644 src/assets/style/auth.scss diff --git a/src/assets/style/auth.scss b/src/assets/style/auth.scss new file mode 100644 index 0000000..f594d23 --- /dev/null +++ b/src/assets/style/auth.scss @@ -0,0 +1,356 @@ +// Auth Pages - Warm Tech Theme +// Warm color palette with tech-inspired design + +:root { + --auth-primary: #ff6b35; + --auth-primary-light: #ff8c5a; + --auth-primary-dark: #e55a2b; + --auth-secondary: #ffb347; + --accent-orange: #ffa500; + --accent-coral: #ff7f50; + --accent-amber: #ffc107; + + --bg-gradient-start: #fff5f0; + --bg-gradient-end: #ffe8dc; + --card-bg: rgba(255, 255, 255, 0.95); + + --text-primary: #2d1810; + --text-secondary: #6b4423; + --text-muted: #a67c52; + + --border-color: #ffd4b8; + --shadow-color: rgba(255, 107, 53, 0.15); + + --success: #28a745; + --warning: #ffc107; + --error: #dc3545; + + --tech-blue: #007bff; + --tech-purple: #6f42c1; +} + +.auth-container { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + background: linear-gradient(135deg, var(--bg-gradient-start) 0%, var(--bg-gradient-end) 100%); + position: relative; + overflow: hidden; + + // Tech pattern background + &::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-image: + radial-gradient(circle at 20% 50%, rgba(255, 107, 53, 0.03) 0%, transparent 50%), + radial-gradient(circle at 80% 20%, rgba(255, 179, 71, 0.05) 0%, transparent 40%), + radial-gradient(circle at 40% 80%, rgba(255, 127, 80, 0.04) 0%, transparent 40%); + pointer-events: none; + } + + // Animated tech elements + &::after { + content: ''; + position: absolute; + width: 600px; + height: 600px; + background: radial-gradient(circle, rgba(255, 107, 53, 0.08) 0%, transparent 70%); + border-radius: 50%; + top: -200px; + right: -200px; + animation: float 20s ease-in-out infinite; + pointer-events: none; + } +} + +@keyframes float { + 0%, + 100% { + transform: translate(0, 0); + } + 50% { + transform: translate(-50px, 50px); + } +} + +.auth-card { + width: 100%; + max-width: 440px; + background: var(--card-bg); + backdrop-filter: blur(20px); + border-radius: 24px; + padding: 48px 40px; + box-shadow: + 0 20px 60px var(--shadow-color), + 0 8px 24px rgba(0, 0, 0, 0.08); + position: relative; + z-index: 1; + margin: 20px; + + // Tech accent line + &::before { + content: ''; + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + width: 80px; + height: 4px; + background: linear-gradient(90deg, var(--auth-primary), var(--auth-secondary)); + border-radius: 0 0 4px 4px; + } +} + +.auth-header { + text-align: center; + margin-bottom: 40px; + + .auth-title { + font-size: 28px; + font-weight: 700; + color: var(--text-primary); + margin-bottom: 8px; + background: linear-gradient(135deg, var(--auth-primary-dark), var(--auth-primary)); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + } + + .auth-subtitle { + font-size: 14px; + color: var(--text-secondary); + line-height: 1.6; + } +} + +.auth-form { + .ant-form-item { + margin-bottom: 24px; + } + + .ant-input { + border-radius: 12px; + border: 1px solid var(--border-color); + transition: all 0.3s ease; + box-shadow: 0 2px 8px rgba(255, 107, 53, 0.08); + + &:hover { + border-color: var(--auth-primary-light); + box-shadow: 0 4px 16px rgba(255, 107, 53, 0.15); + } + + &:focus, + &.ant-input-focused { + border-color: var(--auth-primary); + box-shadow: 0 4px 16px rgba(255, 107, 53, 0.15); + } + } + + .ant-input-affix-wrapper { + border-radius: 12px; + border: 1px solid var(--border-color); + transition: all 0.3s ease; + box-shadow: 0 2px 8px rgba(255, 107, 53, 0.08); + + &:hover { + border-color: var(--auth-primary-light); + box-shadow: 0 4px 16px rgba(255, 107, 53, 0.15); + } + + &:focus, + &.ant-input-affix-wrapper-focused { + border-color: var(--auth-primary); + box-shadow: 0 4px 16px rgba(255, 107, 53, 0.15); + } + + .ant-input { + border: none; + box-shadow: none; + } + } + + .ant-input-prefix { + color: var(--auth-primary); + font-size: 18px; + margin-right: 8px; + } + + .ant-input-suffix { + color: var(--text-muted); + } + + .ant-btn { + height: 48px; + font-size: 16px; + font-weight: 600; + border-radius: 12px; + transition: all 0.3s ease; + + &.ant-btn-primary { + background: linear-gradient(135deg, var(--auth-primary), var(--auth-primary-dark)); + border: none; + box-shadow: 0 8px 24px rgba(255, 107, 53, 0.35); + + &:hover { + background: linear-gradient(135deg, var(--auth-primary-light), var(--auth-primary)); + transform: translateY(-2px); + box-shadow: 0 12px 32px rgba(255, 107, 53, 0.45); + } + + &:active { + transform: translateY(0); + } + } + } +} + +.auth-links { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 24px; + + .remember-me { + .ant-checkbox-inner { + border-radius: 4px; + border-color: var(--border-color); + } + + .ant-checkbox-wrapper { + color: var(--text-secondary); + font-size: 14px; + } + + &.ant-checkbox-wrapper-checked { + .ant-checkbox-inner { + background-color: var(--auth-primary); + border-color: var(--auth-primary); + } + } + } + + .forgot-password { + color: var(--auth-primary); + font-size: 14px; + text-decoration: none; + transition: color 0.3s ease; + + &:hover { + color: var(--auth-primary-dark); + } + } +} + +.auth-divider { + display: flex; + align-items: center; + margin: 32px 0; + color: var(--text-muted); + font-size: 13px; + + &::before, + &::after { + content: ''; + flex: 1; + height: 1px; + background: var(--border-color); + } + + span { + padding: 0 16px; + } +} + +.auth-footer { + text-align: center; + margin-top: 24px; + + .auth-footer-text { + color: var(--text-secondary); + font-size: 14px; + + .auth-link { + color: var(--auth-primary); + text-decoration: none; + font-weight: 600; + margin-left: 4px; + transition: color 0.3s ease; + + &:hover { + color: var(--auth-primary-dark); + } + } + } +} + +.tech-decoration { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + pointer-events: none; + overflow: hidden; + + .tech-circle { + position: absolute; + border: 2px solid rgba(255, 107, 53, 0.1); + border-radius: 50%; + animation: pulse 4s ease-in-out infinite; + } + + .tech-circle:nth-child(1) { + width: 300px; + height: 300px; + top: -150px; + left: -150px; + animation-delay: 0s; + } + + .tech-circle:nth-child(2) { + width: 200px; + height: 200px; + bottom: -100px; + right: -100px; + animation-delay: 1s; + } + + .tech-circle:nth-child(3) { + width: 150px; + height: 150px; + bottom: 20%; + left: -75px; + animation-delay: 2s; + } +} + +@keyframes pulse { + 0%, + 100% { + opacity: 0.3; + transform: scale(1); + } + 50% { + opacity: 0.6; + transform: scale(1.05); + } +} + +// Responsive design +@media (max-width: 768px) { + .auth-card { + padding: 40px 24px; + margin: 16px; + } + + .auth-header { + .auth-title { + font-size: 24px; + } + } +} diff --git a/src/layouts/other/404.vue b/src/layouts/other/404.vue index e076afb..8ea30db 100644 --- a/src/layouts/other/404.vue +++ b/src/layouts/other/404.vue @@ -1,401 +1,228 @@ - - - diff --git a/src/layouts/other/empty.vue b/src/layouts/other/empty.vue index bdf1bc8..74fe604 100644 --- a/src/layouts/other/empty.vue +++ b/src/layouts/other/empty.vue @@ -1,288 +1,211 @@ - - - diff --git a/src/pages/login/index.vue b/src/pages/login/index.vue index 4ecd397..4c1c221 100644 --- a/src/pages/login/index.vue +++ b/src/pages/login/index.vue @@ -1,131 +1,201 @@ - - diff --git a/src/pages/login/resetPassword.vue b/src/pages/login/resetPassword.vue index e4ba215..ad33bf1 100644 --- a/src/pages/login/resetPassword.vue +++ b/src/pages/login/resetPassword.vue @@ -1,156 +1,164 @@ - - diff --git a/src/pages/login/userRegister.vue b/src/pages/login/userRegister.vue index b6544d6..1c4b77d 100644 --- a/src/pages/login/userRegister.vue +++ b/src/pages/login/userRegister.vue @@ -1,149 +1,161 @@ - -