diff --git a/src/views/torrent/TorrentDetailView.vue b/src/views/torrent/TorrentDetailView.vue
index 8b1c8fd..046c00b 100644
--- a/src/views/torrent/TorrentDetailView.vue
+++ b/src/views/torrent/TorrentDetailView.vue
@@ -1,5 +1,4 @@
 <template>
-  <Navbar />
   <div class="torrent-detail-page">
     <div class="page-container">
       <!-- 加载状态 -->
@@ -95,17 +94,17 @@
               </div>
               
               <div class="torrent-stats">
-                <!-- <div class="stat-item seeders">
+                <div class="stat-item seeders">
                   <span class="stat-number">{{ peerStats.seeders }}</span>
                   <span class="stat-label">做种</span>
-                </div> -->
-                <!-- <div class="stat-item leechers">
+                </div>
+                <div class="stat-item leechers">
                   <span class="stat-number">{{ peerStats.leechers }}</span>
                   <span class="stat-label">下载</span>
-                </div> -->
+                </div>
                 <div class="stat-item downloads">
-                  <span class="stat-number">{{ peerStats.downloads }}</span>
-                  <span class="stat-label">总下载</span>
+                  <span class="stat-number">{{ torrentInfo.finishes }}</span>
+                  <span class="stat-label">完成</span>
                 </div>
               </div>
               
@@ -310,12 +309,10 @@
   Like
 } from '@element-plus/icons-vue'
 import axios from 'axios'
-import Navbar from '@/components/Navbar.vue'
 
 export default {
   name: 'TorrentDetailView',
   components: {
-    Navbar,
     ArrowLeft,
     Download,
     Star,
@@ -344,8 +341,7 @@
     const torrentFiles = ref([])
     const peerStats = ref({
       seeders: 0,
-      leechers: 0,
-      downloads: 0
+      leechers: 0
     })
     
     const seedersList = ref([])
@@ -400,9 +396,6 @@
           // 获取用户活动数据（如果有相关API）
           await fetchPeerStats(infoHash)
           
-          // 获取下载数
-          await fetchDownloadCount(infoHash)
-          
           // 获取评论（如果有相关API）
           await fetchComments(infoHash)
         } else {
@@ -468,18 +461,6 @@
       }
     }
     
-    const fetchDownloadCount = async (infoHash) => {
-      try {
-        const response = await axios.get(`/api/torrent/${infoHash}/downloads`)
-        if (response.status === 200) {
-          peerStats.value.downloads = response.data
-        }
-      } catch (error) {
-        console.error('获取下载数失败:', error)
-        peerStats.value.downloads = 0
-      }
-    }
-    
     const fetchComments = async (infoHash) => {
       try {
         // 这里应该调用获取评论的API
@@ -549,15 +530,6 @@
           }
         )
         
-        // 检查响应类型是否为JSON（表示发生了错误）
-        const contentType = response.headers['content-type'];
-        if (contentType && contentType.includes('application/json')) {
-          // 将blob转换为json以读取错误信息
-          const errorText = await response.data.text();
-          const errorData = JSON.parse(errorText);
-          throw new Error(errorData.message || '下载失败');
-        }
-
         // 从响应头中获取文件名，如果没有则使用默认格式
         let fileName = response.headers?.['content-disposition']?.split('filename=')[1]
         if (!fileName) {
@@ -581,41 +553,7 @@
         ElMessage.success('种子文件下载完成')
       } catch (error) {
         console.error('下载失败:', error)
-        // 根据错误类型显示不同的错误信息
-        let errorMessage = '下载失败，请稍后重试';
-        
-        if (error.response) {
-          const status = error.response.status;
-          const data = error.response.data;
-          
-          switch(status) {
-            case 401:
-              errorMessage = '认证失败，请检查登录状态或passkey是否正确';
-              break;
-            case 403:
-              if (data.message?.includes('share ratio')) {
-                errorMessage = '分享率不足，无法下载';
-              } else if (data.message?.includes('torrent:download_review')) {
-                errorMessage = '该种子正在审核中，您没有权限下载';
-              } else {
-                errorMessage = '您没有权限下载此种子';
-              }
-              break;
-            case 404:
-              if (data.message?.includes('torrent not registered')) {
-                errorMessage = '该种子未在服务器注册';
-              } else if (data.message?.includes('file are missing')) {
-                errorMessage = '种子文件丢失，请联系管理员';
-              } else {
-                errorMessage = '种子不存在';
-              }
-              break;
-            default:
-              errorMessage = data.message || '下载失败，请稍后重试';
-          }
-        }
-        
-        ElMessage.error(errorMessage)
+        ElMessage.error(error.response?.data?.message || '下载失败，请稍后重试')
       } finally {
         downloading.value = false
       }
diff --git a/src/views/torrent/TorrentsView.vue b/src/views/torrent/TorrentsView.vue
index 20d5dd0..34af25d 100644
--- a/src/views/torrent/TorrentsView.vue
+++ b/src/views/torrent/TorrentsView.vue
@@ -1,6 +1,6 @@
 <template>
-  <Navbar />
   <div class="torrents-page">
+    <Navbar />
     <div class="page-header">
       <h1>种子资源</h1>
       <div class="header-actions">
@@ -106,23 +106,23 @@
           </template>
         </el-table-column>
         
-        <!-- <el-table-column label="做种" width="80" align="center">
+        <el-table-column label="做种" width="80" align="center">
           <template #default="{ row }">
             <span class="seeders">{{ row.seeders || 0 }}</span>
           </template>
-        </el-table-column> -->
+        </el-table-column>
         
         <el-table-column label="下载" width="80" align="center">
           <template #default="{ row }">
-            <span class="downloads">{{ row.downloadCount || 0 }}</span>
+            <span class="leechers">{{ row.leechers || 0 }}</span>
           </template>
         </el-table-column>
         
-        <!-- <el-table-column label="完成" width="80" align="center">
+        <el-table-column label="完成" width="80" align="center">
           <template #default="{ row }">
             <span>{{ row.downloads || 0 }}</span>
           </template>
-        </el-table-column> -->
+        </el-table-column>
         
         <el-table-column label="操作" width="120" align="center">
           <template #default="{ row }">
@@ -168,7 +168,6 @@
 } from '@element-plus/icons-vue'
 import { searchTorrents, getCategories } from '@/api/torrent'
 import Navbar from '@/components/Navbar.vue'
-import axios from 'axios'
 
 export default {
   name: 'TorrentsView',
@@ -208,30 +207,20 @@
       fetchTorrents()
     })
     
-    const fetchDownloadCount = async (torrent) => {
-      try {
-        const response = await axios.get(`/api/torrent/${torrent.infoHash}/downloads`)
-        if (response.status === 200) {
-          torrent.downloadCount = response.data
-        }
-      } catch (error) {
-        console.error('获取下载数失败:', error)
-        torrent.downloadCount = 0
-      }
-    }
-    
     const fetchTorrents = async () => {
       loading.value = true
       try {
         if (selectedCategory.value) {
+          // 使用 GET 请求
           const response = await fetch(`/api/torrent/search?category=${selectedCategory.value}`)
-          .then(res => res.json())
+        .then(res => res.json())
 
           torrents.value = response.torrents || []
           totalCount.value = response.totalElements || 0
           totalPages.value = response.totalPages || 1
 
         } else {
+          // 使用 POST 请求（搜索）
           const searchParams = {
             keyword: searchQuery.value || '',
             page: currentPage.value - 1,
@@ -245,11 +234,6 @@
           totalPages.value = response.totalPages || 1
         }
 
-        // 为每个种子获取下载数
-        for (const torrent of torrents.value) {
-          await fetchDownloadCount(torrent)
-        }
-
       } catch (error) {
         console.error('获取种子列表失败:', error)
         ElMessage.error('获取种子列表失败')
@@ -303,87 +287,9 @@
       router.push(`/torrent/${row.infoHash}`)
     }
     
-    const handleDownload = async (row) => {
-      try {
-        const response = await axios.get(
-          `/api/torrent/download/${row.infoHash}`,
-          { 
-            responseType: 'blob',
-            // 如果需要传递passkey，可以在这里添加params
-            params: {
-              // passkey: userStore.passkey // 如果你有用户store存储passkey
-            }
-          }
-        )
-        
-        // 检查响应类型是否为JSON（表示发生了错误）
-        const contentType = response.headers['content-type'];
-        if (contentType && contentType.includes('application/json')) {
-          // 将blob转换为json以读取错误信息
-          const errorText = await response.data.text();
-          const errorData = JSON.parse(errorText);
-          throw new Error(errorData.message || '下载失败');
-        }
-
-        // 从响应头中获取文件名，如果没有则使用默认格式
-        let fileName = response.headers?.['content-disposition']?.split('filename=')[1]
-        if (!fileName) {
-          // 使用默认的文件名格式
-          fileName = `${row.title}.torrent`
-        } else {
-          // 解码文件名
-          fileName = decodeURIComponent(fileName)
-        }
-        
-        // 创建下载链接
-        const url = window.URL.createObjectURL(new Blob([response.data], { type: 'application/x-bittorrent' }))
-        const link = document.createElement('a')
-        link.href = url
-        link.download = fileName
-        document.body.appendChild(link)
-        link.click()
-        document.body.removeChild(link)
-        window.URL.revokeObjectURL(url)
-        
-        ElMessage.success('种子文件下载完成')
-      } catch (error) {
-        console.error('下载失败:', error)
-        // 根据错误类型显示不同的错误信息
-        let errorMessage = '下载失败，请稍后重试';
-        
-        if (error.response) {
-          const status = error.response.status;
-          const data = error.response.data;
-          
-          switch(status) {
-            case 401:
-              errorMessage = '认证失败，请检查登录状态或passkey是否正确';
-              break;
-            case 403:
-              if (data.message?.includes('share ratio')) {
-                errorMessage = '分享率不足，无法下载';
-              } else if (data.message?.includes('torrent:download_review')) {
-                errorMessage = '该种子正在审核中，您没有权限下载';
-              } else {
-                errorMessage = '您没有权限下载此种子';
-              }
-              break;
-            case 404:
-              if (data.message?.includes('torrent not registered')) {
-                errorMessage = '该种子未在服务器注册';
-              } else if (data.message?.includes('file are missing')) {
-                errorMessage = '种子文件丢失，请联系管理员';
-              } else {
-                errorMessage = '种子不存在';
-              }
-              break;
-            default:
-              errorMessage = data.message || '下载失败，请稍后重试';
-          }
-        }
-        
-        ElMessage.error(errorMessage)
-      }
+    const handleDownload = (row) => {
+      ElMessage.success(`开始下载: ${row.title || row.name}`)
+      // 这里实现下载逻辑
     }
     
     const handleSizeChange = (size) => {
diff --git a/src/views/torrent/UploadView.vue b/src/views/torrent/UploadView.vue
index 72b7638..9807cd1 100644
--- a/src/views/torrent/UploadView.vue
+++ b/src/views/torrent/UploadView.vue
@@ -1,5 +1,4 @@
 <template>
-  <Navbar />
   <div class="upload-page">
     <div class="upload-container">
       <h2>上传种子</h2>
@@ -103,12 +102,9 @@
 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)
