个人主页跳转,通知移入登录后显示

main
lee-zt 1 week ago
parent d3158ec4f9
commit 95a38a1c0e

@ -32,23 +32,27 @@
</ul> </ul>
</div> </div>
<router-link to="/feedback" class="nav-btn">反馈站</router-link> <router-link to="/feedback" class="nav-btn">反馈站</router-link>
<router-link to="/notificationlist" class="nav-btn">通知</router-link>
</div> </div>
<!-- 登录/注册按钮 --> <!-- 登录/注册按钮 -->
<div class="nav-section"> <div class="nav-section">
<button v-if="!isLoggedIn" @click="showModal" class="login-btn">/</button> <button v-if="!isLoggedIn" @click="showModal" class="login-btn">/</button>
<div v-else class="user-avatar" @mouseenter="showDropdown" @mouseleave="hideDropdown"> <div v-else class="user-menu">
<img :src="userInfo.avatar || defaultAvatar" alt="用户头像" class="avatar-img" /> <router-link to="/notificationlist" class="nav-btn">通知</router-link>
<!-- 悬浮板块 --> <div class="user-avatar" @mouseenter="showDropdown" @mouseleave="hideDropdown">
<div class="user-dropdown-menu" v-show="isDropdownVisible"> <img :src="userInfo.avatar || defaultAvatar" alt="用户头像" class="avatar-img" />
<p class="user-name">{{ userInfo.userName }}</p> <!-- 悬浮板块 -->
<div class="button-container"> <div class="user-dropdown-menu" v-show="isDropdownVisible">
<button @click="goToProfile" class="dropdown-btn">个人中心</button> <p class="user-name">{{ userInfo.userName }}</p>
<button @click="logout" class="dropdown-btn">退出登录</button> <div class="button-container">
<button @click="goToProfile" class="dropdown-btn">个人中心</button>
<button @click="logout" class="dropdown-btn">退出登录</button>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<!-- 登录/注册模态框组件仅在 isModalVisible true 时显示 --> <!-- 登录/注册模态框组件仅在 isModalVisible true 时显示 -->
@ -56,14 +60,14 @@
</header> </header>
</template> </template>
<script setup name="Header"> <script lang="js" setup name="Header">
import { ref, computed } from 'vue'; import { ref, computed } from 'vue';
import { useUserStore } from '@/stores/user.js'; import { useUserStore } from '@/stores/user.js';
import LoginRegisterModal from './LoginRegisterModal.vue'; import LoginRegisterModal from './LoginRegisterModal.vue';
import { useRouter } from 'vue-router';
// //
const userStore = useUserStore(); const userStore = useUserStore();
const router = useRouter();
// //
const isModalVisible = ref(false); const isModalVisible = ref(false);
const isDropdownVisible = ref(false); const isDropdownVisible = ref(false);
@ -87,7 +91,7 @@ const colleges = ref([
]); ]);
// //
const defaultAvatar = '@/assets/default-avatar/boy_4.png'; const defaultAvatar = require("@/assets/default-avatar/boy_4.png");
// //
const isLoggedIn = computed(() => userStore.isLoggedIn); const isLoggedIn = computed(() => userStore.isLoggedIn);
@ -103,12 +107,13 @@ const hideModal = () => {
}; };
const goToProfile = () => { const goToProfile = () => {
// router.push({name: 'UserPage',params: { userId: userInfo.value.userid }});
//window.location.href = '/profile'; isDropdownVisible.value = false; //
}; };
const logout = () => { const logout = () => {
userStore.logout(); userStore.logout();
router.push({ name: 'Home' }); //
isDropdownVisible.value = false; // isDropdownVisible.value = false; //
}; };
@ -116,7 +121,6 @@ let showTimer = null; // 用于控制显示的定时器
let hideTimer = null; // let hideTimer = null; //
const showDropdown = () => { const showDropdown = () => {
console.log('showDropdown');
clearTimeout(hideTimer); // clearTimeout(hideTimer); //
showTimer = setTimeout(() => { showTimer = setTimeout(() => {
isDropdownVisible.value = true; // 0.5 isDropdownVisible.value = true; // 0.5
@ -316,6 +320,13 @@ const hideDropdown = () => {
color: #6fbd87; color: #6fbd87;
background: #f0f0f0; background: #f0f0f0;
} }
.user-menu{
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
}
.avatar-img { .avatar-img {
width: 35px; width: 35px;
height: 35px; height: 35px;

@ -183,7 +183,8 @@ async function sendCode() {
function Login1() { function Login1() {
userStore.login({ userStore.login({
avatar:require('@/assets/default-avatar/boy_1.png'), avatar:require('@/assets/default-avatar/boy_1.png'),
userName: '珈人一号' userName: '珈人一号',
userid:1
}); });
emit('LoginSuccess'); emit('LoginSuccess');
} }
@ -212,9 +213,10 @@ async function login() {
userStore.login({ userStore.login({
avatar: '/assets/default-avatar/boy_1.png', avatar: '/assets/default-avatar/boy_1.png',
userName: '珈人一号' userName: '珈人一号',
userid:1
}); });
emit('LoginSuccess'); //
ElMessage({ ElMessage({
message: '登录成功', message: '登录成功',
type: 'success', type: 'success',

@ -28,7 +28,7 @@ const routes = [
component: PostDetail component: PostDetail
}, },
{ {
path: '/user', path: '/user/:userId',
name: 'UserPage', name: 'UserPage',
component: UserPage component: UserPage
}, },

@ -6,6 +6,7 @@ export const useUserStore = defineStore('user', {
userInfo: { userInfo: {
avatar: '', // 用户头像 URL avatar: '', // 用户头像 URL
username: '', // 用户名 username: '', // 用户名
userid: 0, // 用户 ID
}, },
}), }),
actions: { actions: {
@ -15,7 +16,7 @@ export const useUserStore = defineStore('user', {
}, },
logout() { logout() {
this.isLoggedIn = false; this.isLoggedIn = false;
this.userInfo = { avatar: '', username: '' }; this.userInfo = { avatar: '', username: '' , userid: 0 };
}, },
}, },
}); });
Loading…
Cancel
Save