feat(music): 添加音乐状态获取功能并优化音乐列表展示

- 新增 getMusicStatus API 接口,用于获取音乐的收藏和点赞状态
- 在音乐列表、歌单详情、搜索结果等页面中集成音乐状态获取功能
- 优化音乐播放器,主动获取并更新音乐状态
- 为每首歌曲添加收藏和点赞状态字段
This commit is contained in:
ikmkj
2025-07-26 00:02:03 +08:00
parent 4435315acf
commit 439d4b7588
11 changed files with 205 additions and 27 deletions

View File

@@ -286,7 +286,7 @@ import { ref, computed, watch, nextTick } from 'vue'
import { useRouter } from 'vue-router'
import { usePlayerStore } from '../stores/player'
import { useUserStore } from '../stores/user'
import { processMusicUrl, toggleCollectMusic } from '../api/music'
import { processMusicUrl, toggleCollectMusic, getMusicStatus } from '../api/music'
import { ElMessage } from 'element-plus'
const router = useRouter()
@@ -490,9 +490,9 @@ const toggleCollect = async () => {
try {
const res = await toggleCollectMusic(currentMusic.value.id)
if (res.code === 200) {
// 更新收藏状态
currentMusic.value.isCollected = !currentMusic.value.isCollected
ElMessage.success(currentMusic.value.isCollected ? '收藏成功' : '已取消收藏')
// 直接使用后端返回的最新状态
playerStore.updateCurrentMusicStatus({ collected: res.data });
ElMessage.success(res.message || (res.data ? '收藏成功' : '已取消收藏'))
} else {
ElMessage.error(res.message || '操作失败')
}
@@ -637,9 +637,9 @@ const scrollToActiveLyric = async () => {
}
}
// 监听当前音乐变化处理音乐URL
// 监听当前音乐变化处理音乐URL和状态
watch(currentMusic, (newMusic) => {
if (newMusic && newMusic.url) {
if (newMusic && newMusic.id) {
// 处理音乐URL
const processedUrl = processMusicUrl(newMusic.url)
if (processedUrl !== newMusic.url) {
@@ -654,9 +654,21 @@ watch(currentMusic, (newMusic) => {
}
}
// 确保收藏状态字段存在
if (newMusic.isCollected === undefined) {
newMusic.isCollected = newMusic.collected || false
// 主动获取最新的收藏和点赞状态
if (userStore.isLoggedIn) {
getMusicStatus(newMusic.id).then(res => {
if (res.code === 200 && res.data) {
playerStore.updateCurrentMusicStatus({
collected: res.data.collected,
liked: res.data.liked
});
}
}).catch(err => {
console.error("获取播放器音乐状态失败:", err);
});
} else {
// 未登录则重置状态
playerStore.updateCurrentMusicStatus({ collected: false, liked: false });
}
// 重置歌词索引和元素引用