下载数
Change-Id: Id3c07b7d57de7f92e2f550306cf339a0c892fc6d
diff --git a/src/views/torrent/TorrentDetailView.vue b/src/views/torrent/TorrentDetailView.vue
index 28af1f6..8b1c8fd 100644
--- a/src/views/torrent/TorrentDetailView.vue
+++ b/src/views/torrent/TorrentDetailView.vue
@@ -95,17 +95,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">{{ torrentInfo.finishes }}</span>
- <span class="stat-label">完成</span>
+ <span class="stat-number">{{ peerStats.downloads }}</span>
+ <span class="stat-label">总下载</span>
</div>
</div>
@@ -344,7 +344,8 @@
const torrentFiles = ref([])
const peerStats = ref({
seeders: 0,
- leechers: 0
+ leechers: 0,
+ downloads: 0
})
const seedersList = ref([])
@@ -399,6 +400,9 @@
// 获取用户活动数据(如果有相关API)
await fetchPeerStats(infoHash)
+ // 获取下载数
+ await fetchDownloadCount(infoHash)
+
// 获取评论(如果有相关API)
await fetchComments(infoHash)
} else {
@@ -464,6 +468,18 @@
}
}
+ 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
@@ -533,6 +549,15 @@
}
)
+ // 检查响应类型是否为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) {
@@ -556,7 +581,41 @@
ElMessage.success('种子文件下载完成')
} catch (error) {
console.error('下载失败:', error)
- ElMessage.error(error.response?.data?.message || '下载失败,请稍后重试')
+ // 根据错误类型显示不同的错误信息
+ 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)
} finally {
downloading.value = false
}