From bbd5fa2b21baf5c45986a95c3fcb8e33f60a37da Mon Sep 17 00:00:00 2001 From: pa Date: Sun, 9 Nov 2025 21:59:24 +0900 Subject: [PATCH] refactor: favorites tab --- src/components/NavMenu.vue | 64 +- src/plugin/router.js | 20 +- src/shared/utils/base/array.js | 14 +- src/stores/favorite.js | 203 +- src/stores/ui.js | 20 +- src/views/Favorites/Favorites.vue | 221 --- src/views/Favorites/FavoritesAvatar.vue | 1688 +++++++++++++++++ src/views/Favorites/FavoritesFriend.vue | 1040 ++++++++++ src/views/Favorites/FavoritesWorld.vue | 1544 +++++++++++++++ .../components/FavoritesAvatarItem.vue | 289 +-- .../FavoritesAvatarLocalHistoryItem.vue | 82 +- .../components/FavoritesAvatarTab.vue | 475 ----- .../components/FavoritesFriendItem.vue | 165 +- .../components/FavoritesFriendTab.vue | 133 -- .../components/FavoritesWorldItem.vue | 178 +- .../components/FavoritesWorldLocalItem.vue | 160 +- .../components/FavoritesWorldTab.vue | 532 ------ 17 files changed, 4987 insertions(+), 1841 deletions(-) delete mode 100644 src/views/Favorites/Favorites.vue create mode 100644 src/views/Favorites/FavoritesAvatar.vue create mode 100644 src/views/Favorites/FavoritesFriend.vue create mode 100644 src/views/Favorites/FavoritesWorld.vue delete mode 100644 src/views/Favorites/components/FavoritesAvatarTab.vue delete mode 100644 src/views/Favorites/components/FavoritesFriendTab.vue delete mode 100644 src/views/Favorites/components/FavoritesWorldTab.vue diff --git a/src/components/NavMenu.vue b/src/components/NavMenu.vue index 81a5a268..261eff68 100644 --- a/src/components/NavMenu.vue +++ b/src/components/NavMenu.vue @@ -47,11 +47,11 @@ :key="entry.label" type="button" class="nav-menu-popover__menu-item" - @click="handleSubmenuClick(entry.path, item.index)"> + @click="handleSubmenuClick(entry, item.index)"> {{ t(entry.label) }} @@ -250,7 +250,25 @@ { index: 'favorites', icon: 'ri-star-line', - tooltip: 'nav_tooltip.favorites' + tooltip: '', + title: 'nav_tooltip.favorites', + entries: [ + { + label: 'view.favorite.friends.header', + path: '/favorites/friends', + routeName: 'favorite-friends' + }, + { + label: 'view.favorite.worlds.header', + path: '/favorites/worlds', + routeName: 'favorite-worlds' + }, + { + label: 'view.favorite.avatars.header', + path: '/favorites/avatars', + routeName: 'favorite-avatars' + } + ] }, { index: 'social', @@ -258,9 +276,21 @@ tooltip: '', title: 'nav_tooltip.social', entries: [ - { label: 'nav_tooltip.friend_log', path: '/social/friend-log' }, - { label: 'nav_tooltip.friend_list', path: '/social/friend-list' }, - { label: 'nav_tooltip.moderation', path: '/social/moderation' } + { + label: 'nav_tooltip.friend_log', + path: '/social/friend-log', + routeName: 'friend-log' + }, + { + label: 'nav_tooltip.friend_list', + path: '/social/friend-list', + routeName: 'friend-list' + }, + { + label: 'nav_tooltip.moderation', + path: '/social/moderation', + routeName: 'moderation' + } ] }, @@ -301,7 +331,7 @@ storeToRefs(VRCXUpdaterStore); const { showVRCXUpdateDialog, updateProgressText, showChangeLogDialog } = VRCXUpdaterStore; const uiStore = useUiStore(); - const { notifiedMenus } = storeToRefs(uiStore); + const { notifiedMenus, lastVisitedSocialRoute, lastVisitedFavoritesRoute } = storeToRefs(uiStore); const { directAccessPaste } = useSearchStore(); const { sentryErrorReporting } = storeToRefs(useAdvancedSettingsStore()); const { setSentryErrorReporting } = useAdvancedSettingsStore(); @@ -358,11 +388,16 @@ } }; - const handleSubmenuClick = (path, index) => { - if (path) { - router.push(path); - navMenuRef.value?.updateActiveIndex(index); + const handleSubmenuClick = (entry, index) => { + if (!entry) { + return; } + if (entry.routeName) { + router.push({ name: entry.routeName }); + } else if (entry.path) { + router.push(entry.path); + } + navMenuRef.value?.updateActiveIndex(index); }; const handleSubMenuBeforeEnter = () => { @@ -372,10 +407,13 @@ }; const handleRouteChange = (index) => { + let targetName = index; if (index === 'social') { - index = 'friend-log'; + targetName = lastVisitedSocialRoute.value || 'friend-log'; + } else if (index === 'favorites') { + targetName = lastVisitedFavoritesRoute.value || 'favorite-friends'; } - router.push({ name: index }); + router.push({ name: targetName }); navMenuRef.value?.updateActiveIndex(index); }; diff --git a/src/plugin/router.js b/src/plugin/router.js index a1998cc7..b3cd13d6 100644 --- a/src/plugin/router.js +++ b/src/plugin/router.js @@ -1,7 +1,9 @@ import { createRouter, createWebHashHistory } from 'vue-router'; import Charts from './../views/Charts/Charts.vue'; -import Favorites from './../views/Favorites/Favorites.vue'; +import FavoritesAvatar from './../views/Favorites/FavoritesAvatar.vue'; +import FavoritesFriend from './../views/Favorites/FavoritesFriend.vue'; +import FavoritesWorld from './../views/Favorites/FavoritesWorld.vue'; import Feed from './../views/Feed/Feed.vue'; import FriendList from './../views/FriendList/FriendList.vue'; import FriendLocation from './../views/FriendLocation/FriendLocation.vue'; @@ -24,7 +26,21 @@ const routes = [ { path: '/game-log', name: 'game-log', component: GameLog }, { path: '/player-list', name: 'player-list', component: PlayerList }, { path: '/search', name: 'search', component: Search }, - { path: '/favorites', name: 'favorites', component: Favorites }, + { + path: '/favorites/friends', + name: 'favorite-friends', + component: FavoritesFriend + }, + { + path: '/favorites/worlds', + name: 'favorite-worlds', + component: FavoritesWorld + }, + { + path: '/favorites/avatars', + name: 'favorite-avatars', + component: FavoritesAvatar + }, { path: '/social/friend-log', name: 'friend-log', component: FriendLog }, { path: '/social/moderation', name: 'moderation', component: Moderation }, { path: '/notification', name: 'notification', component: Notification }, diff --git a/src/shared/utils/base/array.js b/src/shared/utils/base/array.js index 60c4b71f..4540c9cf 100644 --- a/src/shared/utils/base/array.js +++ b/src/shared/utils/base/array.js @@ -56,4 +56,16 @@ function moveArrayItem(array, fromIndex, toIndex) { array.splice(toIndex, 0, item); } -export { removeFromArray, arraysMatch, moveArrayItem }; +function replaceReactiveObject(target, source) { + for (const key in target) { + if (Object.prototype.hasOwnProperty.call(target, key)) { + delete target[key]; + } + } + + for (const key in source) { + target[key] = source[key]; + } +} + +export { removeFromArray, arraysMatch, moveArrayItem, replaceReactiveObject }; diff --git a/src/stores/favorite.js b/src/stores/favorite.js index 62eb72ae..046bccbb 100644 --- a/src/stores/favorite.js +++ b/src/stores/favorite.js @@ -3,7 +3,11 @@ import { ElMessage } from 'element-plus'; import { defineStore } from 'pinia'; import { useI18n } from 'vue-i18n'; -import { compareByName, removeFromArray } from '../shared/utils'; +import { + compareByName, + removeFromArray, + replaceReactiveObject +} from '../shared/utils'; import { database } from '../service/database'; import { favoriteRequest } from '../api'; import { processBulk } from '../service/request'; @@ -34,8 +38,6 @@ export const useFavoriteStore = defineStore('Favorite', () => { const cachedFavorites = reactive(new Map()); - const currentFavoriteTab = ref('friend'); - const cachedFavoriteGroups = ref({}); const isFavoriteGroupLoading = ref(false); @@ -72,11 +74,13 @@ export const useFavoriteStore = defineStore('Favorite', () => { const friendImportDialogVisible = ref(false); - const localWorldFavorites = ref({}); + const localWorldFavorites = reactive({}); - const localAvatarFavorites = ref({}); + const localAvatarFavorites = reactive({}); - const editFavoritesMode = ref(false); + const selectedFavoriteFriends = ref([]); + const selectedFavoriteWorlds = ref([]); + const selectedFavoriteAvatars = ref([]); const favoriteDialog = ref({ visible: false, @@ -113,22 +117,46 @@ export const useFavoriteStore = defineStore('Favorite', () => { return sorted; }); + watch( + favoriteFriends, + (list) => { + syncFavoriteSelection(list, selectedFavoriteFriends); + }, + { immediate: true } + ); + + watch( + favoriteWorlds, + (list) => { + syncFavoriteSelection(list, selectedFavoriteWorlds); + }, + { immediate: true } + ); + + watch( + favoriteAvatars, + (list) => { + syncFavoriteSelection(list, selectedFavoriteAvatars); + }, + { immediate: true } + ); + const localAvatarFavoriteGroups = computed(() => - Object.keys(localAvatarFavorites.value).sort() + Object.keys(localAvatarFavorites).sort() ); const localWorldFavoriteGroups = computed(() => - Object.keys(localWorldFavorites.value).sort() + Object.keys(localWorldFavorites).sort() ); const localWorldFavoritesList = computed(() => - Object.values(localWorldFavorites.value) + Object.values(localWorldFavorites) .flat() .map((fav) => fav.id) ); const localAvatarFavoritesList = computed(() => - Object.values(localAvatarFavorites.value) + Object.values(localAvatarFavorites) .flat() .map((fav) => fav.id) ); @@ -147,7 +175,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { }); const localWorldFavGroupLength = computed(() => (group) => { - const favoriteGroup = localWorldFavorites.value[group]; + const favoriteGroup = localWorldFavorites[group]; if (!favoriteGroup) { return 0; } @@ -155,13 +183,27 @@ export const useFavoriteStore = defineStore('Favorite', () => { }); const localAvatarFavGroupLength = computed(() => (group) => { - const favoriteGroup = localAvatarFavorites.value[group]; + const favoriteGroup = localAvatarFavorites[group]; if (!favoriteGroup) { return 0; } return favoriteGroup.length; }); + function syncFavoriteSelection(list, selectionRef) { + if (!Array.isArray(list)) { + selectionRef.value = []; + return; + } + const availableIds = new Set(list.map((item) => item.id)); + const filtered = selectionRef.value.filter((id) => + availableIds.has(id) + ); + if (filtered.length !== selectionRef.value.length) { + selectionRef.value = filtered; + } + } + watch( () => watchState.isLoggedIn, (isLoggedIn) => { @@ -177,7 +219,11 @@ export const useFavoriteStore = defineStore('Favorite', () => { state.favoriteFriends_ = []; state.favoriteWorlds_ = []; state.favoriteAvatars_ = []; - localAvatarFavorites.value = {}; + replaceReactiveObject(localWorldFavorites, {}); + replaceReactiveObject(localAvatarFavorites, {}); + selectedFavoriteFriends.value = []; + selectedFavoriteWorlds.value = []; + selectedFavoriteAvatars.value = []; favoriteDialog.value.visible = false; worldImportDialogVisible.value = false; avatarImportDialogVisible.value = false; @@ -353,8 +399,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { type, groupKey: favorite.$groupKey, ref: null, - name: '', - $selected: false + name: '' }; if (type === 'friend') { ref = userStore.cachedUsers.get(objectId); @@ -807,19 +852,6 @@ export const useFavoriteStore = defineStore('Favorite', () => { } } - function clearBulkFavoriteSelection() { - let ctx; - for (ctx of state.favoriteFriends_) { - ctx.$selected = false; - } - for (ctx of state.favoriteWorlds_) { - ctx.$selected = false; - } - for (ctx of state.favoriteAvatars_) { - ctx.$selected = false; - } - } - function showWorldImportDialog() { worldImportDialogVisible.value = true; } @@ -845,11 +877,11 @@ export const useFavoriteStore = defineStore('Favorite', () => { if (typeof ref === 'undefined') { return; } - if (!localWorldFavorites.value[group]) { - localWorldFavorites.value[group] = []; + if (!localWorldFavorites[group]) { + localWorldFavorites[group] = []; } - localWorldFavorites.value[group].unshift(ref); + localWorldFavorites[group].unshift(ref); database.addWorldToCache(ref); database.addWorldToFavorites(worldId, group); if ( @@ -876,7 +908,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { * @returns {boolean} */ function hasLocalWorldFavorite(worldId, group) { - const favoriteGroup = localWorldFavorites.value[group]; + const favoriteGroup = localWorldFavorites[group]; if (!favoriteGroup) { return false; } @@ -901,10 +933,10 @@ export const useFavoriteStore = defineStore('Favorite', () => { if (typeof ref === 'undefined') { return; } - if (!localAvatarFavorites.value[group]) { - localAvatarFavorites.value[group] = []; + if (!localAvatarFavorites[group]) { + localAvatarFavorites[group] = []; } - localAvatarFavorites.value[group].unshift(ref); + localAvatarFavorites[group].unshift(ref); database.addAvatarToCache(ref); database.addAvatarToFavorites(avatarId, group); if ( @@ -931,7 +963,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { * @returns {boolean} */ function hasLocalAvatarFavorite(avatarId, group) { - const favoriteGroup = localAvatarFavorites.value[group]; + const favoriteGroup = localAvatarFavorites[group]; if (!favoriteGroup) { return false; } @@ -981,25 +1013,21 @@ export const useFavoriteStore = defineStore('Favorite', () => { let i; // remove from cache if no longer in favorites const avatarIdRemoveList = new Set(); - const favoriteGroup = localAvatarFavorites.value[group]; + const favoriteGroup = localAvatarFavorites[group]; for (i = 0; i < favoriteGroup.length; ++i) { avatarIdRemoveList.add(favoriteGroup[i].id); } - delete localAvatarFavorites.value[group]; + delete localAvatarFavorites[group]; database.deleteAvatarFavoriteGroup(group); for (i = 0; i < localAvatarFavoriteGroups.value.length; ++i) { const groupName = localAvatarFavoriteGroups.value[i]; - if (!localAvatarFavorites.value[groupName]) { + if (!localAvatarFavorites[groupName]) { continue; } - for ( - let j = 0; - j < localAvatarFavorites.value[groupName].length; - ++j - ) { - const avatarId = localAvatarFavorites.value[groupName][j].id; + for (let j = 0; j < localAvatarFavorites[groupName].length; ++j) { + const avatarId = localAvatarFavorites[groupName][j].id; if (avatarIdRemoveList.has(avatarId)) { avatarIdRemoveList.delete(avatarId); break; @@ -1016,19 +1044,15 @@ export const useFavoriteStore = defineStore('Favorite', () => { ++i ) { const groupName = localAvatarFavoriteGroups.value[i]; - if ( - !localAvatarFavorites.value[groupName] || - group === groupName - ) { + if (!localAvatarFavorites[groupName] || group === groupName) { continue loop; } for ( let j = 0; - j < localAvatarFavorites.value[groupName].length; + j < localAvatarFavorites[groupName].length; ++j ) { - const avatarId = - localAvatarFavorites.value[groupName][j].id; + const avatarId = localAvatarFavorites[groupName][j].id; if (id === avatarId) { avatarInFavorites = true; break loop; @@ -1047,8 +1071,8 @@ export const useFavoriteStore = defineStore('Favorite', () => { if (!appearanceSettingsStore.sortFavorites) { for (let i = 0; i < localAvatarFavoriteGroups.value.length; ++i) { const group = localAvatarFavoriteGroups.value[i]; - if (localAvatarFavorites.value[group]) { - localAvatarFavorites.value[group].sort(compareByName); + if (localAvatarFavorites[group]) { + localAvatarFavorites[group].sort(compareByName); } } } @@ -1069,9 +1093,9 @@ export const useFavoriteStore = defineStore('Favorite', () => { }); return; } - localAvatarFavorites.value[newName] = localAvatarFavorites.value[group]; + localAvatarFavorites[newName] = localAvatarFavorites[group]; - delete localAvatarFavorites.value[group]; + delete localAvatarFavorites[group]; database.renameAvatarFavoriteGroup(newName, group); sortLocalAvatarFavorites(); } @@ -1090,8 +1114,8 @@ export const useFavoriteStore = defineStore('Favorite', () => { }); return; } - if (!localAvatarFavorites.value[group]) { - localAvatarFavorites.value[group] = []; + if (!localAvatarFavorites[group]) { + localAvatarFavorites[group] = []; } sortLocalAvatarFavorites(); } @@ -1138,7 +1162,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { groupsArr = ['Favorites']; } - localAvatarFavorites.value = localFavorites; + replaceReactiveObject(localAvatarFavorites, localFavorites); sortLocalAvatarFavorites(); } @@ -1150,7 +1174,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { */ function removeLocalAvatarFavorite(avatarId, group) { let i; - const favoriteGroup = localAvatarFavorites.value[group]; + const favoriteGroup = localAvatarFavorites[group]; for (i = 0; i < favoriteGroup.length; ++i) { if (favoriteGroup[i].id === avatarId) { favoriteGroup.splice(i, 1); @@ -1161,15 +1185,11 @@ export const useFavoriteStore = defineStore('Favorite', () => { let avatarInFavorites = false; for (i = 0; i < localAvatarFavoriteGroups.value.length; ++i) { const groupName = localAvatarFavoriteGroups.value[i]; - if (!localAvatarFavorites.value[groupName] || group === groupName) { + if (!localAvatarFavorites[groupName] || group === groupName) { continue; } - for ( - let j = 0; - j < localAvatarFavorites.value[groupName].length; - ++j - ) { - const id = localAvatarFavorites.value[groupName][j].id; + for (let j = 0; j < localAvatarFavorites[groupName].length; ++j) { + const id = localAvatarFavorites[groupName][j].id; if (id === avatarId) { avatarInFavorites = true; break; @@ -1208,25 +1228,21 @@ export const useFavoriteStore = defineStore('Favorite', () => { let i; // remove from cache if no longer in favorites const worldIdRemoveList = new Set(); - const favoriteGroup = localWorldFavorites.value[group]; + const favoriteGroup = localWorldFavorites[group]; for (i = 0; i < favoriteGroup.length; ++i) { worldIdRemoveList.add(favoriteGroup[i].id); } - delete localWorldFavorites.value[group]; + delete localWorldFavorites[group]; database.deleteWorldFavoriteGroup(group); for (i = 0; i < localWorldFavoriteGroups.value.length; ++i) { const groupName = localWorldFavoriteGroups.value[i]; - if (!localWorldFavorites.value[groupName]) { + if (!localWorldFavorites[groupName]) { continue; } - for ( - let j = 0; - j < localWorldFavorites.value[groupName].length; - ++j - ) { - const worldId = localWorldFavorites.value[groupName][j].id; + for (let j = 0; j < localWorldFavorites[groupName].length; ++j) { + const worldId = localWorldFavorites[groupName][j].id; if (worldIdRemoveList.has(worldId)) { worldIdRemoveList.delete(worldId); break; @@ -1243,8 +1259,8 @@ export const useFavoriteStore = defineStore('Favorite', () => { if (!appearanceSettingsStore.sortFavorites) { for (let i = 0; i < localWorldFavoriteGroups.value.length; ++i) { const group = localWorldFavoriteGroups.value[i]; - if (localWorldFavorites.value[group]) { - localWorldFavorites.value[group].sort(compareByName); + if (localWorldFavorites[group]) { + localWorldFavorites[group].sort(compareByName); } } } @@ -1265,9 +1281,9 @@ export const useFavoriteStore = defineStore('Favorite', () => { }); return; } - localWorldFavorites.value[newName] = localWorldFavorites.value[group]; + localWorldFavorites[newName] = localWorldFavorites[group]; - delete localWorldFavorites.value[group]; + delete localWorldFavorites[group]; database.renameWorldFavoriteGroup(newName, group); sortLocalWorldFavorites(); } @@ -1279,7 +1295,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { */ function removeLocalWorldFavorite(worldId, group) { let i; - const favoriteGroup = localWorldFavorites.value[group]; + const favoriteGroup = localWorldFavorites[group]; for (i = 0; i < favoriteGroup.length; ++i) { if (favoriteGroup[i].id === worldId) { favoriteGroup.splice(i, 1); @@ -1290,15 +1306,11 @@ export const useFavoriteStore = defineStore('Favorite', () => { let worldInFavorites = false; for (i = 0; i < localWorldFavoriteGroups.value.length; ++i) { const groupName = localWorldFavoriteGroups.value[i]; - if (!localWorldFavorites.value[groupName] || group === groupName) { + if (!localWorldFavorites[groupName] || group === groupName) { continue; } - for ( - let j = 0; - j < localWorldFavorites.value[groupName].length; - ++j - ) { - const id = localWorldFavorites.value[groupName][j].id; + for (let j = 0; j < localWorldFavorites[groupName].length; ++j) { + const id = localWorldFavorites[groupName][j].id; if (id === worldId) { worldInFavorites = true; break; @@ -1369,7 +1381,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { groupsArr = ['Favorites']; } - localWorldFavorites.value = localFavorites; + replaceReactiveObject(localWorldFavorites, localFavorites); sortLocalWorldFavorites(); } @@ -1388,11 +1400,8 @@ export const useFavoriteStore = defineStore('Favorite', () => { }); return; } - if (!localWorldFavorites.value[group]) { - localWorldFavorites.value[group] = []; - } - if (!localWorldFavoriteGroups.value.includes(group)) { - localWorldFavoriteGroups.value.push(group); + if (!localWorldFavorites[group]) { + localWorldFavorites[group] = []; } sortLocalWorldFavorites(); } @@ -1466,10 +1475,11 @@ export const useFavoriteStore = defineStore('Favorite', () => { localWorldFavoriteGroups, groupedByGroupKeyFavoriteFriends, - currentFavoriteTab, + selectedFavoriteFriends, + selectedFavoriteWorlds, + selectedFavoriteAvatars, localWorldFavGroupLength, localAvatarFavGroupLength, - editFavoritesMode, initFavorites, applyFavorite, @@ -1477,7 +1487,6 @@ export const useFavoriteStore = defineStore('Favorite', () => { refreshFavorites, applyFavoriteGroup, refreshFavoriteAvatars, - clearBulkFavoriteSelection, showWorldImportDialog, showAvatarImportDialog, showFriendImportDialog, diff --git a/src/stores/ui.js b/src/stores/ui.js index aa47d036..5b8ded08 100644 --- a/src/stores/ui.js +++ b/src/stores/ui.js @@ -24,6 +24,14 @@ export const useUiStore = defineStore('Ui', () => { const notifiedMenus = ref([]); const shiftHeld = ref(false); const trayIconNotify = ref(false); + const socialRouteNames = ['friend-log', 'friend-list', 'moderation']; + const favoriteRouteNames = [ + 'favorite-friends', + 'favorite-worlds', + 'favorite-avatars' + ]; + const lastVisitedSocialRoute = ref(socialRouteNames[0]); + const lastVisitedFavoritesRoute = ref(favoriteRouteNames[0]); watch( () => watchState.isLoggedIn, @@ -50,10 +58,16 @@ export const useUiStore = defineStore('Ui', () => { () => router.currentRoute.value.name, (routeName) => { if (routeName) { - removeNotify(routeName); - if (routeName === 'notification') { + const name = String(routeName); + removeNotify(name); + if (name === 'notification') { notificationStore.unseenNotifications = []; } + if (socialRouteNames.includes(name)) { + lastVisitedSocialRoute.value = name; + } else if (favoriteRouteNames.includes(name)) { + lastVisitedFavoritesRoute.value = name; + } } } ); @@ -82,6 +96,8 @@ export const useUiStore = defineStore('Ui', () => { return { notifiedMenus, shiftHeld, + lastVisitedSocialRoute, + lastVisitedFavoritesRoute, notifyMenu, removeNotify diff --git a/src/views/Favorites/Favorites.vue b/src/views/Favorites/Favorites.vue deleted file mode 100644 index e6d8f2c2..00000000 --- a/src/views/Favorites/Favorites.vue +++ /dev/null @@ -1,221 +0,0 @@ - - - - - diff --git a/src/views/Favorites/FavoritesAvatar.vue b/src/views/Favorites/FavoritesAvatar.vue new file mode 100644 index 00000000..30485d1a --- /dev/null +++ b/src/views/Favorites/FavoritesAvatar.vue @@ -0,0 +1,1688 @@ + + + + + diff --git a/src/views/Favorites/FavoritesFriend.vue b/src/views/Favorites/FavoritesFriend.vue new file mode 100644 index 00000000..009dee3e --- /dev/null +++ b/src/views/Favorites/FavoritesFriend.vue @@ -0,0 +1,1040 @@ + + + + + diff --git a/src/views/Favorites/FavoritesWorld.vue b/src/views/Favorites/FavoritesWorld.vue new file mode 100644 index 00000000..c03d6137 --- /dev/null +++ b/src/views/Favorites/FavoritesWorld.vue @@ -0,0 +1,1544 @@ + + + + + diff --git a/src/views/Favorites/components/FavoritesAvatarItem.vue b/src/views/Favorites/components/FavoritesAvatarItem.vue index 6f3c0713..9aabc915 100644 --- a/src/views/Favorites/components/FavoritesAvatarItem.vue +++ b/src/views/Favorites/components/FavoritesAvatarItem.vue @@ -1,132 +1,126 @@