导航栏修改
Change-Id: Id3cd4794407eb29625429f78f053907a751f1fa0
diff --git a/src/components/Navbar.vue b/src/components/Navbar.vue
new file mode 100644
index 0000000..32d31d4
--- /dev/null
+++ b/src/components/Navbar.vue
@@ -0,0 +1,169 @@
+<template>
+ <div class="navbar">
+ <router-link to="/home" class="navbar-brand">PT Tracker</router-link>
+ <div class="navbar-nav">
+ <router-link to="/home" class="navbar-item">首页</router-link>
+ <router-link to="/torrents" class="navbar-item">种子</router-link>
+ <router-link to="/forum" class="navbar-item">论坛</router-link>
+ <el-dropdown @command="handleUserCommand">
+ <span class="navbar-user">
+ <el-avatar :size="32" :src="userAvatar">
+ {{ username.charAt(0).toUpperCase() }}
+ </el-avatar>
+ <span class="username">{{ username }}</span>
+ <el-icon><ArrowDown /></el-icon>
+ </span>
+ <template #dropdown>
+ <el-dropdown-menu>
+ <el-dropdown-item command="profile">
+ <el-icon><User /></el-icon>
+ 个人资料
+ </el-dropdown-item>
+ <el-dropdown-item command="settings">
+ <el-icon><Setting /></el-icon>
+ 设置
+ </el-dropdown-item>
+ <el-dropdown-item divided command="logout">
+ <el-icon><SwitchButton /></el-icon>
+ 退出登录
+ </el-dropdown-item>
+ </el-dropdown-menu>
+ </template>
+ </el-dropdown>
+ </div>
+ </div>
+</template>
+
+<script>
+import { computed } from 'vue'
+import { useStore } from 'vuex'
+import { useRouter } from 'vue-router'
+import { ElMessageBox } from 'element-plus'
+import {
+ ArrowDown,
+ User,
+ Setting,
+ SwitchButton
+} from '@element-plus/icons-vue'
+
+export default {
+ name: 'Navbar',
+ components: {
+ ArrowDown,
+ User,
+ Setting,
+ SwitchButton
+ },
+ setup() {
+ const store = useStore()
+ const router = useRouter()
+
+ const username = computed(() => store.getters['auth/username'])
+ const userAvatar = computed(() => store.getters['auth/avatar'])
+
+ const handleUserCommand = async (command) => {
+ switch (command) {
+ case 'profile':
+ router.push('/profile')
+ break
+ case 'settings':
+ router.push('/settings')
+ break
+ case 'logout':
+ try {
+ await ElMessageBox.confirm('确定要退出登录吗?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ await store.dispatch('auth/logout')
+ router.push('/login')
+ } catch (error) {
+ if (error !== 'cancel') {
+ console.error('退出登录失败:', error)
+ }
+ }
+ break
+ }
+ }
+
+ return {
+ username,
+ userAvatar,
+ handleUserCommand
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+.navbar {
+ background: #fff;
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0 24px;
+ position: sticky;
+ top: 0;
+ z-index: 1000;
+}
+
+.navbar-brand {
+ font-size: 20px;
+ font-weight: 700;
+ color: #409eff;
+ text-decoration: none;
+}
+
+.navbar-nav {
+ display: flex;
+ align-items: center;
+ gap: 24px;
+}
+
+.navbar-item {
+ color: #606266;
+ text-decoration: none;
+ font-weight: 500;
+ transition: color 0.3s;
+
+ &:hover {
+ color: #409eff;
+ }
+}
+
+.navbar-user {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ cursor: pointer;
+ padding: 8px;
+ border-radius: 6px;
+ transition: background-color 0.3s;
+
+ &:hover {
+ background-color: #f5f7fa;
+ }
+
+ .username {
+ font-weight: 500;
+ color: #303133;
+ }
+}
+
+@media (max-width: 768px) {
+ .navbar {
+ padding: 0 16px;
+
+ .navbar-nav {
+ gap: 16px;
+ }
+
+ .navbar-user .username {
+ display: none;
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue
index 7a728b1..f339463 100644
--- a/src/views/HomeView.vue
+++ b/src/views/HomeView.vue
@@ -1,39 +1,7 @@
<template>
<div class="home-page">
<!-- 导航栏 -->
- <div class="navbar">
- <router-link to="/home" class="navbar-brand">PT Tracker</router-link>
- <div class="navbar-nav">
- <router-link to="/home" class="navbar-item">首页</router-link>
- <router-link to="/torrents" class="navbar-item">种子</router-link>
- <router-link to="/forum" class="navbar-item">论坛</router-link>
- <el-dropdown @command="handleUserCommand">
- <span class="navbar-user">
- <el-avatar :size="32" :src="userAvatar">
- {{ username.charAt(0).toUpperCase() }}
- </el-avatar>
- <span class="username">{{ username }}</span>
- <el-icon><ArrowDown /></el-icon>
- </span>
- <template #dropdown>
- <el-dropdown-menu>
- <el-dropdown-item command="profile">
- <el-icon><User /></el-icon>
- 个人资料
- </el-dropdown-item>
- <el-dropdown-item command="settings">
- <el-icon><Setting /></el-icon>
- 设置
- </el-dropdown-item>
- <el-dropdown-item divided command="logout">
- <el-icon><SwitchButton /></el-icon>
- 退出登录
- </el-dropdown-item>
- </el-dropdown-menu>
- </template>
- </el-dropdown>
- </div>
- </div>
+ <Navbar />
<!-- 主内容区 -->
<div class="main-content">
@@ -171,6 +139,7 @@
</template>
<script>
+import Navbar from '@/components/Navbar.vue'
import { ref, computed, onMounted, onUnmounted } from 'vue'
import { useRouter } from 'vue-router'
import { useStore } from 'vuex'
@@ -202,7 +171,8 @@
Star,
Search,
ChatDotRound,
- CircleCheck
+ CircleCheck,
+ Navbar
},
setup() {
const router = useRouter()
diff --git a/src/views/forum/ForumView.vue b/src/views/forum/ForumView.vue
index 22345e6..28cdff2 100644
--- a/src/views/forum/ForumView.vue
+++ b/src/views/forum/ForumView.vue
@@ -1,5 +1,6 @@
<template>
<div class="forum-page">
+ <Navbar />
<div class="page-container">
<!-- 论坛头部 -->
<div class="forum-header">
@@ -269,9 +270,13 @@
QuestionFilled,
Bell
} from '@element-plus/icons-vue'
+import Navbar from '@/components/Navbar.vue'
export default {
name: 'ForumView',
+ components:{
+ Navbar
+ },
setup() {
const router = useRouter()
const topicFormRef = ref(null)
diff --git a/src/views/torrent/TorrentsView.vue b/src/views/torrent/TorrentsView.vue
index 736c92d..f930025 100644
--- a/src/views/torrent/TorrentsView.vue
+++ b/src/views/torrent/TorrentsView.vue
@@ -1,5 +1,6 @@
<template>
<div class="torrents-page">
+ <Navbar />
<div class="page-header">
<h1>种子资源</h1>
<div class="header-actions">
@@ -166,9 +167,13 @@
Document
} from '@element-plus/icons-vue'
import { searchTorrents, getCategories } from '@/api/torrent'
+import Navbar from '@/components/Navbar.vue'
export default {
name: 'TorrentsView',
+ components:{
+ Navbar
+ },
setup() {
const router = useRouter()
const route = useRoute()
diff --git a/src/views/torrent/UploadView.vue b/src/views/torrent/UploadView.vue
index 9807cd1..490a138 100644
--- a/src/views/torrent/UploadView.vue
+++ b/src/views/torrent/UploadView.vue
@@ -1,5 +1,6 @@
<template>
<div class="upload-page">
+ <Navbar />
<div class="upload-container">
<h2>上传种子</h2>
@@ -102,9 +103,12 @@
import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
import { uploadTorrent, getCategories, getTags } from '@/api/torrent'
-
+import Navbar from '@/components/Navbar.vue'
export default {
name: 'UploadView',
+ components: {
+ Navbar
+ },
setup() {
const router = useRouter()
const uploadFormRef = ref(null)