From 9eb17fd978e52e967221862042c4b42c98f21753 Mon Sep 17 00:00:00 2001 From: alger Date: Mon, 6 Jan 2025 22:03:50 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20=E4=BC=98=E5=8C=96=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E5=A4=B1=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/preload/index.d.ts | 1 + src/renderer/App.vue | 4 -- .../components/common/UpdateModal.vue | 2 +- src/renderer/layout/components/SearchBar.vue | 5 +- src/renderer/store/index.ts | 27 +++++--- src/renderer/utils/request.ts | 33 +++++++++- src/renderer/views/set/index.vue | 46 ++++++------- src/renderer/views/user/index.vue | 66 ++++++++++++------- 8 files changed, 118 insertions(+), 66 deletions(-) diff --git a/src/preload/index.d.ts b/src/preload/index.d.ts index f272f39..5d3ed40 100644 --- a/src/preload/index.d.ts +++ b/src/preload/index.d.ts @@ -14,5 +14,6 @@ declare global { restart: () => void; unblockMusic: (id: number, data: any) => Promise; }; + $message:any } } diff --git a/src/renderer/App.vue b/src/renderer/App.vue index 86da091..cb72b56 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -32,10 +32,6 @@ onMounted(() => { 'setMenus', homeRouter.filter((item) => item.meta.isMobile) ); - console.log( - 'qqq ', - homeRouter.filter((item) => item.meta.isMobile) - ); } }); diff --git a/src/renderer/components/common/UpdateModal.vue b/src/renderer/components/common/UpdateModal.vue index 0dadbb3..8c7cec2 100644 --- a/src/renderer/components/common/UpdateModal.vue +++ b/src/renderer/components/common/UpdateModal.vue @@ -70,7 +70,7 @@ const store = useStore() // 添加计算属性 const showUpdateModalState = computed({ get: () => store.state.showUpdateModal, - set: (val) => store.commit('SET_SHOW_UPDATE_MODAL', val) + set: (val) => store.commit('setShowUpdateModal', val) }) // 替换原来的 watch diff --git a/src/renderer/layout/components/SearchBar.vue b/src/renderer/layout/components/SearchBar.vue index a34cc6b..a6e2cb2 100644 --- a/src/renderer/layout/components/SearchBar.vue +++ b/src/renderer/layout/components/SearchBar.vue @@ -199,8 +199,7 @@ const selectItem = async (key: string) => { switch (key) { case 'logout': logout().then(() => { - store.state.user = null; - localStorage.clear(); + store.commit('logout'); router.push('/login'); }); break; @@ -241,7 +240,7 @@ const checkForUpdates = async () => { const toGithubRelease = () => { if (updateInfo.value.hasUpdate) { - store.commit('SET_SHOW_UPDATE_MODAL', true) + store.commit('setShowUpdateModal', true) } else { window.open('https://github.com/algerkong/AlgerMusicPlayer/releases', '_blank'); } diff --git a/src/renderer/store/index.ts b/src/renderer/store/index.ts index 0f1b36a..9c3d54c 100644 --- a/src/renderer/store/index.ts +++ b/src/renderer/store/index.ts @@ -126,8 +126,13 @@ const mutations = { state.theme = state.theme === 'dark' ? 'light' : 'dark'; applyTheme(state.theme); }, - SET_SHOW_UPDATE_MODAL(state, value) { + setShowUpdateModal(state, value) { state.showUpdateModal = value + }, + logout(state: State) { + state.user = null; + localStorage.removeItem('user'); + localStorage.removeItem('token'); } }; @@ -153,18 +158,20 @@ const actions = { }, 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)); + if(state.user && localStorage.getItem('token')){ + const res = await getLikedList(); + if (res.data?.ids) { + state.favoriteList = res.data.ids.reverse(); + localStorage.setItem('favoriteList', JSON.stringify(state.favoriteList)); + } + }else{ + const localFavoriteList = localStorage.getItem('favoriteList'); + if (localFavoriteList) { + state.favoriteList = JSON.parse(localFavoriteList); + } } } catch (error) { console.error('获取收藏列表失败:', error); - // 如果获取失败,使用本地存储的数据 - const localFavoriteList = localStorage.getItem('favoriteList'); - if (localFavoriteList) { - state.favoriteList = JSON.parse(localFavoriteList); - } } } }; diff --git a/src/renderer/utils/request.ts b/src/renderer/utils/request.ts index 71fe3dc..0e79938 100644 --- a/src/renderer/utils/request.ts +++ b/src/renderer/utils/request.ts @@ -1,8 +1,14 @@ import axios, { InternalAxiosRequestConfig } from 'axios'; import { isElectron } from '.'; +import store from '@/store'; +import { createDiscreteApi } from 'naive-ui' + + +const { notification } = createDiscreteApi( + ['notification'] +) let setData: any = null; - const getSetData = ()=>{ if (window.electron) { setData = window.electron.ipcRenderer.sendSync('get-store-value', 'set'); @@ -74,6 +80,7 @@ request.interceptors.response.use( return response; }, async (error) => { + console.log('error',error) const config = error.config as CustomAxiosRequestConfig; // 如果没有配置,直接返回错误 @@ -81,6 +88,30 @@ request.interceptors.response.use( return Promise.reject(error); } + // 处理 301 状态码 + if (error.response?.status === 301) { + // 使用 store mutation 清除用户信息 + store.commit('logout'); + + // 如果还可以重试,则重新发起请求 + if (config.retryCount === undefined || config.retryCount < MAX_RETRIES) { + config.retryCount = (config.retryCount || 1) + 1; + console.log(`301 状态码,清除登录信息后重试第 ${config.retryCount} 次`); + notification.error({ + content: '登录状态失效,请重新登录', + meta: '请重新登录', + duration: 2500, + keepAliveOnHover: true + }) + + // 延迟重试 + await new Promise((resolve) => setTimeout(resolve, RETRY_DELAY)); + + // 重新发起请求 + return request(config); + } + } + // 检查是否还可以重试 if (config.retryCount !== undefined && config.retryCount < MAX_RETRIES) { config.retryCount++; diff --git a/src/renderer/views/set/index.vue b/src/renderer/views/set/index.vue index fc8b7b3..fb7e5c1 100644 --- a/src/renderer/views/set/index.vue +++ b/src/renderer/views/set/index.vue @@ -112,6 +112,27 @@ 前往github +
+
+
音质设置
+
选择音乐播放音质(VIP)
+
+ +
关闭行为
@@ -129,6 +150,7 @@ style="width: 160px" />
+
重启
@@ -168,27 +190,7 @@ />
-
-
-
音质设置
-
选择音乐播放音质(VIP)
-
- -
+
{ }; const openReleasePage = () => { - store.commit('SET_SHOW_UPDATE_MODAL', true) + store.commit('setShowUpdateModal', true) }; const selectDownloadPath = async () => { diff --git a/src/renderer/views/user/index.vue b/src/renderer/views/user/index.vue index 23e9db6..c57603d 100644 --- a/src/renderer/views/user/index.vue +++ b/src/renderer/views/user/index.vue @@ -89,7 +89,7 @@