From 1dbc6ed10458201d22e7f47a7da36f75f0ebf257 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Tue, 02 Jun 2026 13:35:58 +0800
Subject: [PATCH] ``` feat(layout): 添加退出登录功能
---
src/styles/login.scss | 95 ++++++++++++++++++++++++-------
src/views/layout/index.vue | 60 +++++++++++++++++++
2 files changed, 133 insertions(+), 22 deletions(-)
diff --git a/src/styles/login.scss b/src/styles/login.scss
index e616f24..f2e6f61 100644
--- a/src/styles/login.scss
+++ b/src/styles/login.scss
@@ -2,6 +2,7 @@
height: 100%;
margin: 0;
padding: 0;
+ overflow: hidden;
}
.login-container {
@@ -9,24 +10,29 @@
align-items: center;
justify-content: center;
position: relative;
- width: 100%;
- height: 100%;
+ width: 100vw;
+ height: 100vh;
background-image: url("/images/pro-bg.png");
background-size: cover;
background-position: center;
+ min-width: 320px;
+ min-height: 480px;
}
.login-weaper {
display: flex;
- width: 800px;
+ width: 90%;
+ max-width: 800px;
+ min-width: 320px;
box-shadow: -4px 5px 20px rgba(0, 0, 0, 0.3);
border-radius: 8px;
overflow: hidden;
+ margin: 20px;
}
.login-left,
.login-border {
- min-height: 450px;
+ min-height: 400px;
display: flex;
align-items: center;
}
@@ -45,24 +51,24 @@
.login-time {
position: absolute;
- top: 30px;
- left: 30px;
+ top: 20px;
+ left: 20px;
color: rgba(255, 255, 255, 0.9);
font-weight: 300;
- font-size: 16px;
+ font-size: clamp(12px, 2vw, 16px);
}
.login-left .img {
- width: 120px;
- margin-bottom: 20px;
+ width: clamp(80px, 25vw, 120px);
+ margin-bottom: 15px;
}
.login-left .title {
text-align: center;
color: #fff;
font-weight: 400;
- letter-spacing: 3px;
- font-size: 22px;
+ letter-spacing: 2px;
+ font-size: clamp(16px, 4vw, 22px);
margin: 0;
}
@@ -71,7 +77,7 @@
border-bottom-right-radius: 8px;
background-color: #fff;
width: 55%;
- padding: 40px 30px;
+ padding: 30px;
box-sizing: border-box;
}
@@ -83,16 +89,16 @@
color: #333;
margin-bottom: 8px;
font-weight: 500;
- font-size: 20px;
+ font-size: clamp(16px, 4vw, 20px);
text-align: center;
letter-spacing: 2px;
}
.login-title-child {
color: #999;
- margin-bottom: 30px;
+ margin-bottom: 25px;
font-weight: 300;
- font-size: 12px;
+ font-size: clamp(10px, 2.5vw, 12px);
text-align: center;
letter-spacing: 1px;
}
@@ -101,16 +107,19 @@
margin: 0;
.el-form-item {
- margin-bottom: 20px;
+ margin-bottom: 18px;
}
.el-input {
+ width: 100%;
+
input {
- padding: 12px 15px;
+ padding: clamp(10px, 3vw, 12px) clamp(12px, 3vw, 15px);
border: 1px solid #e4e7ed;
border-radius: 6px;
- font-size: 14px;
+ font-size: clamp(12px, 3vw, 14px);
transition: border-color 0.3s;
+ box-sizing: border-box;
&:focus {
border-color: #409eff;
@@ -121,7 +130,7 @@
.el-input__prefix {
i {
color: #909399;
- font-size: 16px;
+ font-size: clamp(14px, 3vw, 16px);
}
}
@@ -136,11 +145,11 @@
.login-submit {
width: 100%;
- height: 42px;
+ height: clamp(36px, 8vw, 42px);
background: linear-gradient(135deg, #409eff 0%, #67b8ff 100%);
border: none;
border-radius: 6px;
- font-size: 16px;
+ font-size: clamp(14px, 3vw, 16px);
letter-spacing: 2px;
color: #fff;
cursor: pointer;
@@ -154,4 +163,48 @@
&:active {
opacity: 0.8;
}
+}
+
+@media screen and (max-width: 640px) {
+ .login-weaper {
+ flex-direction: column;
+ width: 95%;
+ }
+
+ .login-left,
+ .login-border {
+ width: 100%;
+ min-height: auto;
+ border-radius: 0;
+ }
+
+ .login-left {
+ border-top-left-radius: 8px;
+ border-top-right-radius: 8px;
+ padding: 25px 20px;
+ }
+
+ .login-border {
+ border-bottom-left-radius: 8px;
+ border-bottom-right-radius: 8px;
+ padding: 25px 20px;
+ }
+
+ .login-time {
+ position: static;
+ margin-bottom: 15px;
+ text-align: center;
+ }
+}
+
+@media screen and (max-height: 500px) {
+ .login-weaper {
+ transform: scale(0.9);
+ }
+}
+
+@media screen and (max-height: 450px) {
+ .login-weaper {
+ transform: scale(0.85);
+ }
}
\ No newline at end of file
diff --git a/src/views/layout/index.vue b/src/views/layout/index.vue
index b6ae075..c3f2650 100644
--- a/src/views/layout/index.vue
+++ b/src/views/layout/index.vue
@@ -10,6 +10,10 @@
-->
<template>
<div class="wrapper">
+ <div class="logout-btn" @click="handleLogout">
+ <i class="el-icon-logout"></i>
+ <span>退出登录</span>
+ </div>
<map-box ref="modalForm" :curMap="curMap" @getsearchSKValList="getsearchSKValList($event)">
<!-- 主体内容区域 -->
<div slot="mainContent" class="main-content" id="MainContent">
@@ -134,6 +138,7 @@
<script>
import { getSignSituationList, getExamScoreList, getExamList, getLatestExam } from "@/api/home/index"
+import { logout } from "@/api/user"
import { EventBus } from "@/utils/EventBus"
@@ -453,6 +458,28 @@
handleVideoClose () {
this.$store.commit("SET_ISSHOWVIDEODIALOG", false)
+ },
+
+ handleLogout () {
+ this.$confirm('确定要退出登录吗?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ }).then(() => {
+ logout().then(() => {
+ this.$store.commit('SET_TOKEN', '')
+ this.$store.commit('SET_USER_INFO', {})
+ localStorage.removeItem('token')
+ localStorage.removeItem('userInfo')
+ this.$router.push({ path: '/login' })
+ }).catch(() => {
+ this.$store.commit('SET_TOKEN', '')
+ this.$store.commit('SET_USER_INFO', {})
+ localStorage.removeItem('token')
+ localStorage.removeItem('userInfo')
+ this.$router.push({ path: '/login' })
+ })
+ }).catch(() => {})
}
}
}
@@ -463,7 +490,38 @@
position: relative;
width: 100vw;
height: 100vh;
- // border: 1px solid white;
+
+ .logout-btn {
+ position: fixed;
+ top: 20px;
+ right: 20px;
+ z-index: 9999;
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ padding: 10px 20px;
+ background: rgba(255, 255, 255, 0.15);
+ border: 1px solid rgba(255, 255, 255, 0.3);
+ border-radius: 25px;
+ color: #fff;
+ font-size: 14px;
+ cursor: pointer;
+ transition: all 0.3s ease;
+
+ &:hover {
+ background: rgba(255, 255, 255, 0.25);
+ border-color: rgba(255, 255, 255, 0.5);
+ transform: translateY(-2px);
+ }
+
+ &:active {
+ transform: translateY(0);
+ }
+
+ i {
+ font-size: 16px;
+ }
+ }
#MainContent {
position: absolute;
--
Gitblit v1.9.3