diff --git a/components.d.ts b/components.d.ts index b6817ad..6c86794 100644 --- a/components.d.ts +++ b/components.d.ts @@ -23,6 +23,7 @@ declare module 'vue' { NPopover: typeof import('naive-ui')['NPopover'] NScrollbar: typeof import('naive-ui')['NScrollbar'] NSlider: typeof import('naive-ui')['NSlider'] + NSpin: typeof import('naive-ui')['NSpin'] NSwitch: typeof import('naive-ui')['NSwitch'] NTooltip: typeof import('naive-ui')['NTooltip'] PlayBottom: typeof import('./src/components/common/PlayBottom.vue')['default'] diff --git a/package.json b/package.json index ae49fd9..72359bb 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "eslint-plugin-vue": "^9.21.1", "eslint-plugin-vue-scoped-css": "^2.7.2", "lodash": "^4.17.21", - "naive-ui": "^2.34.4", + "naive-ui": "^2.38.2", "postcss": "^7.0.36", "prettier": "^3.2.5", "remixicon": "^4.2.0", diff --git a/src/App.vue b/src/App.vue index a059d87..18855c3 100644 --- a/src/App.vue +++ b/src/App.vue @@ -3,7 +3,9 @@ - + + + diff --git a/src/api/home.ts b/src/api/home.ts index 44ba9fd..ce20cc0 100644 --- a/src/api/home.ts +++ b/src/api/home.ts @@ -1,4 +1,6 @@ +import { IData } from '@/type'; import { IAlbumNew } from '@/type/album'; +import { IDayRecommend } from '@/type/day_recommend'; import { IRecommendMusic } from '@/type/music'; import { IPlayListSort } from '@/type/playlist'; import { IHotSearch, ISearchKeyword } from '@/type/search'; @@ -39,6 +41,11 @@ export const getRecommendMusic = (params: IRecommendMusicParams) => { return request.get('/personalized/newsong', { params }); }; +// 获取每日推荐 +export const getDayRecommend = () => { + return request.get>('/recommend/songs'); +}; + // 获取最新专辑推荐 export const getNewAlbum = () => { return request.get('/album/newest'); diff --git a/src/components/MusicList.vue b/src/components/MusicList.vue index 0e3422b..a6493db 100644 --- a/src/components/MusicList.vue +++ b/src/components/MusicList.vue @@ -10,7 +10,7 @@ v-for="(item, index) in songList" :key="item.id" :class="setAnimationClass('animate__bounceInUp')" - :style="setAnimationDelay(index, 100)" + :style="setAnimationDelay(index, 50)" > diff --git a/src/components/RecommendSinger.vue b/src/components/RecommendSinger.vue index 01b9117..360dce3 100644 --- a/src/components/RecommendSinger.vue +++ b/src/components/RecommendSinger.vue @@ -3,11 +3,34 @@
+
+
+
每日推荐列表
+ +
+

+ {{ item.name }} +
+

+
+
+
+
{{ item.musicSize }}首
@@ -16,34 +39,58 @@
-
{{ item.name }}
-
{{ item.name }}
+
{{ item.name }}
+
{{ item.name }}
+ + diff --git a/src/views/list/index.vue b/src/views/list/index.vue index 2c36675..4b9ef77 100644 --- a/src/views/list/index.vue +++ b/src/views/list/index.vue @@ -2,12 +2,15 @@ import { useRoute } from 'vue-router'; import { getListByCat, getListDetail, getRecommendList } from '@/api/list'; -import PlayBottom from '@/components/common/PlayBottom.vue'; import MusicList from '@/components/MusicList.vue'; import type { IRecommendItem } from '@/type/list'; import type { IListDetail } from '@/type/listDetail'; import { formatNumber, getImgUrl, setAnimationClass, setAnimationDelay } from '@/utils'; +defineOptions({ + name: 'List', +}); + const recommendList = ref(); const showMusic = ref(false); @@ -82,7 +85,6 @@ watch(
{{ item.name }}
- { loadLogin(); }); +const timerRef = ref(null); + const loadLogin = async () => { - const qrKey = await getQrKey(); - const key = qrKey.data.data.unikey; - const { data } = await createQr(key); - qrUrl.value = data.data.qrimg; - timerIsQr(key); + try { + const qrKey = await getQrKey(); + const key = qrKey.data.data.unikey; + const { data } = await createQr(key); + qrUrl.value = data.data.qrimg; + + const timer = timerIsQr(key); + // 添加对定时器的引用,以便在出现错误时可以清除 + timerRef.value = timer as any; + } catch (error) { + console.error('加载登录信息时出错:', error); + } }; +// 使用 ref 来保存定时器,便于在任何地方清除它 + const timerIsQr = (key: string) => { const timer = setInterval(async () => { - const { data } = await checkQr(key); + try { + const { data } = await checkQr(key); - if (data.code === 800) { - clearInterval(timer); - } - if (data.code === 803) { - // 将token存入localStorage - localStorage.setItem('token', data.cookie); - const user = await getUserDetail(); - store.state.user = user.data.profile; - message.success('登录成功'); + if (data.code === 800) { + clearInterval(timer); + timerRef.value = null; + } + if (data.code === 803) { + localStorage.setItem('token', data.cookie); + const user = await getUserDetail(); + store.state.user = user.data.profile; + message.success('登录成功'); - await getLoginStatus().then((res) => { - console.log(res); - }); - clearInterval(timer); - setTimeout(() => { + clearInterval(timer); + timerRef.value = null; router.push('/user'); - }, 1000); + } + } catch (error) { + console.error('检查二维码状态时出错:', error); + // 在出现错误时清除定时器 + clearInterval(timer); + timerRef.value = null; } - }, 5000); + }, 2000); + + return timer; }; // 是否扫码登陆 diff --git a/src/views/lyric/index.vue b/src/views/lyric/index.vue index 3ba9312..c333f3e 100644 --- a/src/views/lyric/index.vue +++ b/src/views/lyric/index.vue @@ -48,6 +48,10 @@