前端
Change-Id: If55994fd11ad8d1f70a52e9c3bd53eded5f37544
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) => {