diff --git a/src/renderer/api/music.ts b/src/renderer/api/music.ts index 505f108..a53e0cb 100644 --- a/src/renderer/api/music.ts +++ b/src/renderer/api/music.ts @@ -24,3 +24,13 @@ export const getParsingMusicUrl = (id: number) => { } return requestMusic.get('/music', { params: { id } }); }; + +// 收藏歌曲 +export const likeSong = (id: number, like: boolean = true) => { + return request.get('/like', { params: { id, like } }); +}; + +// 获取用户喜欢的音乐列表 +export const getLikedList = () => { + return request.get('/likelist'); +}; diff --git a/src/renderer/store/index.ts b/src/renderer/store/index.ts index e2718e9..2d34a1a 100644 --- a/src/renderer/store/index.ts +++ b/src/renderer/store/index.ts @@ -5,6 +5,7 @@ import homeRouter from '@/router/home'; import type { SongResult } from '@/type/music'; import { applyTheme, getCurrentTheme, ThemeType } from '@/utils/theme'; import { isElectron } from '@/utils'; +import { likeSong, getLikedList } from '@/api/music'; // 默认设置 const defaultSettings = { @@ -102,15 +103,25 @@ const mutations = { localStorage.setItem('appSettings', JSON.stringify(setData)); } }, - addToFavorite(state: State, songId: number) { - if (!state.favoriteList.includes(songId)) { - state.favoriteList = [songId, ...state.favoriteList]; - localStorage.setItem('favoriteList', JSON.stringify(state.favoriteList)); + async addToFavorite(state: State, songId: number) { + try { + await likeSong(songId, true); + if (!state.favoriteList.includes(songId)) { + state.favoriteList = [songId, ...state.favoriteList]; + localStorage.setItem('favoriteList', JSON.stringify(state.favoriteList)); + } + } catch (error) { + console.error('收藏歌曲失败:', error); } }, - removeFromFavorite(state: State, songId: number) { - state.favoriteList = state.favoriteList.filter((id) => id !== songId); - localStorage.setItem('favoriteList', JSON.stringify(state.favoriteList)); + async removeFromFavorite(state: State, songId: number) { + try { + await likeSong(songId, false); + state.favoriteList = state.favoriteList.filter((id) => id !== songId); + localStorage.setItem('favoriteList', JSON.stringify(state.favoriteList)); + } catch (error) { + console.error('取消收藏歌曲失败:', error); + } }, togglePlayMode(state: State) { state.playMode = (state.playMode + 1) % 3; @@ -145,6 +156,22 @@ const actions = { }, initializeTheme({ state }: { state: State }) { applyTheme(state.theme); + }, + async initializeFavoriteList({ state }: { state: State }) { + try { + const res = await getLikedList(); + if (res.data?.ids) { + state.favoriteList = res.data.ids.reverse(); + localStorage.setItem('favoriteList', JSON.stringify(state.favoriteList)); + } + } catch (error) { + console.error('获取收藏列表失败:', error); + // 如果获取失败,使用本地存储的数据 + const localFavoriteList = localStorage.getItem('favoriteList'); + if (localFavoriteList) { + state.favoriteList = JSON.parse(localFavoriteList); + } + } } }; diff --git a/src/renderer/views/favorite/index.vue b/src/renderer/views/favorite/index.vue index 91480a0..879d0a6 100644 --- a/src/renderer/views/favorite/index.vue +++ b/src/renderer/views/favorite/index.vue @@ -54,7 +54,7 @@ const scrollbarRef = ref(); // 无限滚动相关 const pageSize = 16; const currentPage = ref(1); - + const props = defineProps({ isComponent: { type: Boolean, @@ -64,10 +64,9 @@ const props = defineProps({ // 获取当前页的收藏歌曲ID const getCurrentPageIds = () => { - const reversedList = [...favoriteList.value]; const startIndex = (currentPage.value - 1) * pageSize; const endIndex = startIndex + pageSize; - return reversedList.slice(startIndex, endIndex); + return favoriteList.value.slice(startIndex, endIndex); }; // 获取收藏歌曲详情 @@ -120,6 +119,7 @@ const handleScroll = (e: any) => { }; onMounted(() => { + store.dispatch('initializeFavoriteList'); getFavoriteSongs(); });