From d554837b16fb806f394dddc490c8db7155a4126e Mon Sep 17 00:00:00 2001 From: Rocka Date: Mon, 2 Mar 2020 15:11:47 +0800 Subject: [PATCH] renderer: Favorite: extract common parts as mixin --- src/renderer/page/Favorite/FavAlbums.vue | 30 +++---- src/renderer/page/Favorite/FavArtists.vue | 30 +++---- src/renderer/page/Favorite/FavDjRadios.vue | 31 +++---- src/renderer/page/Favorite/FavPlaylists.vue | 86 +++++++++----------- src/renderer/page/Favorite/FavVideos.vue | 27 +++--- src/renderer/page/Favorite/fetch-on-login.js | 20 +++++ 6 files changed, 107 insertions(+), 117 deletions(-) create mode 100644 src/renderer/page/Favorite/fetch-on-login.js diff --git a/src/renderer/page/Favorite/FavAlbums.vue b/src/renderer/page/Favorite/FavAlbums.vue index 200d3e10..62afb366 100644 --- a/src/renderer/page/Favorite/FavAlbums.vue +++ b/src/renderer/page/Favorite/FavAlbums.vue @@ -15,7 +15,8 @@ - + @@ -23,17 +24,19 @@ import { mapActions, mapState } from 'vuex'; import { getAlbumDetail } from '@/api/typed'; -import { SET_LOGIN_VALID } from '@/store/mutation-types'; import AlbumDetail from '@/components/AlbumDetail.vue'; import AvatarListItem from '@/components/AvatarListItem.vue'; import ListDetailLayout from '@/components/ListDetailLayout.vue'; +import { FetchOnLoginMixin } from './fetch-on-login'; + export default { + mixins: [FetchOnLoginMixin], data() { return { album: null, - listLoading: true, - detailLoading: true + listLoading: false, + detailLoading: false }; }, computed: { @@ -49,9 +52,11 @@ export default { this.detailLoading = false; }, async fetchData() { - this.listLoading = true; - await this.updateUserAlbums(); - this.listLoading = false; + if (this.user.albums.length <= 0) { + this.listLoading = true; + await this.updateUserAlbums(); + this.listLoading = false; + } const al = this.user.albums[0]; if (al && al.id) { this.loadAlbum(al.id); @@ -61,17 +66,6 @@ export default { this.loadAlbum(id); } }, - mounted() { - if (this.user.loginValid) { - this.fetchData(); - } else { - this.$store.subscribe(({ type, payload }) => { - if (type === SET_LOGIN_VALID && payload === true) { - this.fetchData(); - } - }); - } - }, components: { AlbumDetail, AvatarListItem, diff --git a/src/renderer/page/Favorite/FavArtists.vue b/src/renderer/page/Favorite/FavArtists.vue index de28b7bb..0f916dd3 100644 --- a/src/renderer/page/Favorite/FavArtists.vue +++ b/src/renderer/page/Favorite/FavArtists.vue @@ -15,7 +15,8 @@ - + @@ -23,20 +24,22 @@ import { mapActions, mapState } from 'vuex'; import { getArtistDetail } from '@/api/typed'; -import { SET_LOGIN_VALID } from '@/store/mutation-types'; import ArtistDetail from '@/components/ArtistDetail/ArtistDetail.vue'; import AvatarListItem from '@/components/AvatarListItem.vue'; import ListDetailLayout from '@/components/ListDetailLayout.vue'; +import { FetchOnLoginMixin } from './fetch-on-login'; + export default { + mixins: [FetchOnLoginMixin], data() { return { artist: { detail: null, hotSongs: [] }, - listLoading: true, - detailLoading: true + listLoading: false, + detailLoading: false }; }, computed: { @@ -52,9 +55,11 @@ export default { this.detailLoading = false; }, async fetchData() { - this.listLoading = true; - await this.updateUserArtists(); - this.listLoading = false; + if (this.user.artists.length <= 0) { + this.listLoading = true; + await this.updateUserArtists(); + this.listLoading = false; + } const ar = this.user.artists[0]; if (ar && ar.id) { this.loadArtist(ar.id); @@ -64,17 +69,6 @@ export default { this.loadArtist(id); } }, - mounted() { - if (this.user.loginValid) { - this.fetchData(); - } else { - this.$store.subscribe(({ type, payload }) => { - if (type === SET_LOGIN_VALID && payload === true) { - this.fetchData(); - } - }); - } - }, components: { ArtistDetail, AvatarListItem, diff --git a/src/renderer/page/Favorite/FavDjRadios.vue b/src/renderer/page/Favorite/FavDjRadios.vue index 9a4e301a..507e5234 100644 --- a/src/renderer/page/Favorite/FavDjRadios.vue +++ b/src/renderer/page/Favorite/FavDjRadios.vue @@ -15,25 +15,29 @@ - +