diff --git a/src/router/index.ts b/src/router/index.ts index 4997a1c..915ec8c 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -6,13 +6,13 @@ const router = createRouter({ routes: [ { path: '/login', - name: 'login', + name: 'Login', component: () => import('../views/LoginView.vue'), meta: { requiresAuth: false } }, { path: '/register', - name: 'register', + name: 'Register', component: () => import('../views/RegisterView.vue'), meta: { requiresAuth: false } }, diff --git a/src/views/LoginView.vue b/src/views/LoginView.vue index b22765d..3bf2461 100644 --- a/src/views/LoginView.vue +++ b/src/views/LoginView.vue @@ -171,7 +171,7 @@ diff --git a/src/views/RegisterView.vue b/src/views/RegisterView.vue index f646431..eb8d7c4 100644 --- a/src/views/RegisterView.vue +++ b/src/views/RegisterView.vue @@ -186,6 +186,43 @@ 已有账号? 立即登录 + + + +
+
+
+ +
+ 请完成安全验证 +
+ + + +
+ + 请向右滑动完成验证 +
+
+
@@ -193,7 +230,7 @@ @@ -640,4 +712,167 @@ const sendEmailCode = async () => { margin-top: 10px; } } + +/* 滑块验证码样式 */ +.slider-container { + padding: 0; + text-align: center; +} + +.slider-header { + display: flex; + align-items: center; + justify-content: center; + gap: 15px; + margin-bottom: 35px; + color: #303133; + font-size: 18px; + font-weight: 500; +} + +.slider-text { + margin-top: 20px; + color: #909399; + font-size: 14px; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; +} + +.custom-slider { + padding: 10px; + background: #f8f9fa; + border-radius: 25px; + box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.08); +} + +:deep(.el-slider__runway) { + height: 50px; + background-color: white; + border-radius: 25px; + transition: all 0.3s; + box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.06); +} + +:deep(.el-slider__bar) { + height: 50px; + background: linear-gradient(90deg, + rgba(64, 158, 255, 0.9), + rgba(103, 194, 58, 0.9) + ); + backdrop-filter: blur(4px); + border-radius: 25px; + transition: all 0.3s; + box-shadow: 0 4px 12px rgba(103, 194, 58, 0.25); +} + +:deep(.el-slider__button-wrapper) { + width: 50px; + height: 50px; + top: 0; + transition: all 0.3s; +} + +:deep(.el-slider__button) { + width: 50px; + height: 50px; + border: none; + background: linear-gradient(135deg, #409eff, #36cfc9, #67c23a); + background-size: 200% 200%; + animation: gradient 3s ease infinite; + display: flex; + align-items: center; + justify-content: center; + box-shadow: 0 4px 15px rgba(64, 158, 255, 0.4); + transition: all 0.3s; +} + +@keyframes gradient { + 0% { background-position: 0% 50%; } + 50% { background-position: 100% 50%; } + 100% { background-position: 0% 50%; } +} + +:deep(.el-slider__button:hover) { + transform: scale(1.08); + box-shadow: 0 6px 20px rgba(64, 158, 255, 0.5); +} + +:deep(.el-slider__button .el-icon) { + font-size: 24px; + color: #fff; + transition: all 0.3s; + filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2)); +} + +@keyframes success-pulse { + 0% { + box-shadow: 0 0 0 0 rgba(103, 194, 58, 0.6); + } + 70% { + box-shadow: 0 0 0 15px rgba(103, 194, 58, 0); + } + 100% { + box-shadow: 0 0 0 0 rgba(103, 194, 58, 0); + } +} + +:deep(.el-slider__bar[style*="100%"]) { + background: linear-gradient(90deg, #67c23a, #95de64); + animation: success-pulse 2s infinite; +} + +:deep(.slider-dialog) { + border-radius: 20px; + overflow: hidden; + box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15); +} + +:deep(.slider-dialog .el-dialog__header) { + margin: 0; + padding: 20px 24px; + background: #f8f9fa; + border-bottom: 1px solid #ebeef5; + position: relative; + overflow: hidden; +} + +:deep(.slider-dialog .el-dialog__header::before) { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 3px; + background: linear-gradient(90deg, #409eff, #67c23a); +} + +:deep(.slider-dialog .el-dialog__title) { + font-size: 18px; + font-weight: 600; + color: #303133; +} + +:deep(.slider-dialog .el-dialog__body) { + padding: 40px; +} + +.shield-icon { + width: 64px; + height: 64px; + background: linear-gradient(135deg, #e6f3ff, #f0f9eb); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + color: #409EFF; + box-shadow: 0 4px 12px rgba(64, 158, 255, 0.15); + animation: float 3s ease-in-out infinite; +} + +@keyframes float { + 0%, 100% { transform: translateY(0); } + 50% { transform: translateY(-6px); } +}