From 8610c5c35b7de98fb254922ea70629c104143be8 Mon Sep 17 00:00:00 2001 From: 消逝 <1425768167@qq.com> Date: 星期四, 11 七月 2024 15:18:13 +0800 Subject: [PATCH] 退出登录 --- src/views/home/components/user-panel/index.vue | 219 +++++++++++++++++++++++++++++++++--------------------- 1 files changed, 132 insertions(+), 87 deletions(-) diff --git a/src/views/home/components/user-panel/index.vue b/src/views/home/components/user-panel/index.vue index c6220f2..f6b415c 100644 --- a/src/views/home/components/user-panel/index.vue +++ b/src/views/home/components/user-panel/index.vue @@ -1,124 +1,169 @@ <template> - <div class="user-panel max-w-sm min-w-96 h-fit"> - <el-card class="card"> - <div class="panel-content flex flex-col items-center"> - <!-- 瀛︾敓淇℃伅 --> - <div class="avatar-container w-40 h-40 rounded-full overflow-hidden" @click="quit()"> - <div class="avatar-content" v-if="userInfo.imagePath"> - <img :src="userInfo.imagePath" class="avatar-img" alt=""> - </div> - <div class="avatar-content" :style="{backgroundColor: getColor}" v-else> - <div class="name text-5xl font-bold text-white">{{ getFirstName }}</div> - </div> - </div> + <div class="user-panel max-w-sm min-w-96 h-fit"> + <el-card class="card"> + <div class="panel-content flex flex-col items-center"> + <!-- 瀛︾敓淇℃伅 --> + <el-dropdown> + <div + class="avatar-container w-40 h-40 rounded-full overflow-hidden el-dropdown-link" + @click="stateClick()" + > + <div + class="avatar-content" + v-if="userInfo.imagePath" + > + <img + :src="userInfo.imagePath" + class="avatar-img" + alt="" + /> + </div> + <div + class="avatar-content" + :style="{ backgroundColor: getColor }" + v-else + > + <div class="name text-5xl font-bold text-white"> + {{ getFirstName }} + </div> + </div> + </div> + <template #dropdown> + <el-dropdown-menu> + <el-dropdown-item>淇敼瀵嗙爜</el-dropdown-item> + <el-dropdown-item>涓汉涓績</el-dropdown-item> + <el-dropdown-item @click="quit()" + >閫�鍑虹櫥褰�</el-dropdown-item + > + </el-dropdown-menu> + </template> + </el-dropdown> - <div class="name-container text-lg font-bold mt-5 mb-2"> - {{ userInfo.realName }} - </div> + <div class="name-container text-lg font-bold mt-5 mb-2"> + {{ userInfo.realName }} + </div> - <div class="department-container text-base mb-10"> - {{ userInfo.userName }} - </div> - <!-- 瀛︾敓閫夐」 --> - <div class="tool-container grid grid-cols-3 gap-10"> - <div class="tool-item text-center cursor-pointer" v-for="item in toolList" @click="toolClick(item)"> - <div class="tool-icon mb-1"> - <img :src="item.iconPath" class="width-img" alt=""> + <div class="department-container text-base mb-10"> + {{ userInfo.userName }} + </div> + <!-- 瀛︾敓閫夐」 --> + <div class="tool-container grid grid-cols-3 gap-10"> + <div + class="tool-item text-center cursor-pointer" + v-for="item in toolList" + @click="toolClick(item)" + > + <div class="tool-icon mb-1"> + <img + :src="item.iconPath" + class="width-img" + alt="" + /> + </div> + <div class="tool-title"> + {{ item.title }} + </div> + </div> + </div> </div> - <div class="tool-title"> - {{ item.title }} - </div> - </div> - </div> - - </div> - </el-card> - </div> + </el-card> + </div> </template> <script setup> -import { ref, computed } from 'vue'; -import randomColor from '@/utils/randomColor.js'; -import { useRouter } from 'vue-router'; -import { storeToRefs } from 'pinia'; -import { useUserStore } from '@/store/index.js'; -import { logout } from '@/api/modules/user.js'; +import { ref, computed } from "vue"; +import randomColor from "@/utils/randomColor.js"; +import { useRouter } from "vue-router"; +import { storeToRefs } from "pinia"; +import { useUserStore } from "@/store/index.js"; +import { logout } from "@/api/modules/user.js"; const userStore = useUserStore(); -const { userInfo } = storeToRefs(userStore - -) - - +const { userInfo } = storeToRefs(userStore); const router = useRouter(); // 鑾峰彇鍒楄〃 const toolList = ref([ - { - id: 1, - title: '鍦ㄧ嚎鍩硅', - iconPath: new URL('@/assets/icons/icon1.png', import.meta.url).href, - path: '/train' - }, - { - id: 2, - title: '鎴戠殑鑰冭瘯', - iconPath: new URL('@/assets/icons/icon2.png', import.meta.url).href, - path: '/exam-list' - }, - { - id: 3, - title: '鎴戠殑鎴愮哗', - iconPath: new URL('@/assets/icons/icon2.png', import.meta.url).href, - path: '/grade-list' - }, + { + id: 1, + title: "鍦ㄧ嚎鍩硅", + iconPath: new URL("@/assets/icons/icon1.png", import.meta.url).href, + path: "/train", + }, + { + id: 2, + title: "鎴戠殑鑰冭瘯", + iconPath: new URL("@/assets/icons/icon2.png", import.meta.url).href, + path: "/exam-list", + }, + { + id: 3, + title: "鎴戠殑鎴愮哗", + iconPath: new URL("@/assets/icons/icon2.png", import.meta.url).href, + path: "/grade-list", + }, ]); // 鑾峰彇棰滆壊 const getColor = computed(() => { - return randomColor(); + return randomColor(); }); // 鑾峰彇鐢ㄦ埛淇℃伅 const getFirstName = computed(() => { - return userInfo.value.realName && userInfo.value.realName[0]; + return userInfo.value.realName && userInfo.value.realName[0]; }); // 鐐瑰嚮浜嬩欢 const toolClick = (item) => { - if (item.path) { - router.push(item.path); - } -} + if (item.path) { + router.push(item.path); + } +}; + +// 鐢ㄦ埛閫夐」 +const dropdownRef = ref(); // 閫�鍑虹櫥褰� const quit = () => { - logout().then(() =>{ - router.push('/login').then(()=>{ - userStore.setUserInfo(null) - localStorage.clear("user") + logout() + .then(() => { + router.push("/login").then(() => { + userStore.setUserInfo(null); + localStorage.clear("user"); + }); }) - }).catch((err) =>{ - console.log("閫�鍑虹櫥褰曞け璐�,澶辫触鍘熷洜;",err) - }) -} + .catch((err) => { + console.log("閫�鍑虹櫥褰曞け璐�,澶辫触鍘熷洜;", err); + }); +}; </script> <style lang="scss" scoped> - - .card { - border-radius: 30px; + border-radius: 30px; } .avatar-content { - width: 100%; - height: 100%; - display: flex; - justify-content: center; - align-items: center; + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; } .avatar-img { - width: 100%; - height: 100%; - object-fit: cover; + width: 100%; + height: 100%; + object-fit: cover; } -</style> \ No newline at end of file +.avatar-container { + cursor: pointer; + color: var(--el-color-primary); + display: flex; + align-items: center; +} +.example-showcase .el-dropdown-link { + cursor: pointer; + color: var(--el-color-primary); + display: flex; + align-items: center; +} +</style> -- Gitblit v1.8.0