feat(music): 添加音乐状态获取功能并优化音乐列表展示
- 新增 getMusicStatus API 接口,用于获取音乐的收藏和点赞状态 - 在音乐列表、歌单详情、搜索结果等页面中集成音乐状态获取功能 - 优化音乐播放器,主动获取并更新音乐状态 - 为每首歌曲添加收藏和点赞状态字段
This commit is contained in:
@@ -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 });
|
||||
}
|
||||
|
||||
// 重置歌词索引和元素引用
|
||||
|
||||
Reference in New Issue
Block a user