fix: address Phase 7 review — move WS/theme init to App.vue, wire Queue component

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
saopig1andClaude Opus 4.6 committed 2026-03-30 01:02:42 +08:00
1 parent 41d9e88c8e
commit 5041a4f3f7
3 files changed
+17 -8

No files matched your search

+9 -1
View File
@@ -9,13 +9,21 @@
</template>
<script setup lang="ts">
import { computed } from 'vue';
import { computed, onMounted } from 'vue';
import { usePlayerStore } from './stores/player.js';
import { useWebSocket } from './composables/useWebSocket.js';
import Navbar from './components/Navbar.vue';
import Player from './components/Player.vue';
const playerStore = usePlayerStore();
const theme = computed(() => playerStore.theme);
const { connect } = useWebSocket();
onMounted(() => {
playerStore.loadTheme();
connect();
playerStore.fetchBots();
});
</script>
<style lang="scss">
+8 -1
View File
@@ -30,18 +30,25 @@
@input="onVolumeChange"
class="volume-slider"
/>
<button class="control-btn" @click="showQueue = !showQueue">
<Icon icon="mdi:playlist-music" />
</button>
<RouterLink to="/lyrics" class="control-btn lyrics-btn">
<Icon icon="mdi:microphone" />
</RouterLink>
</div>
<Queue :open="showQueue" @close="showQueue = false" />
</div>
</template>
<script setup lang="ts">
import { computed } from 'vue';
import { computed, ref } from 'vue';
import { Icon } from '@iconify/vue';
import { usePlayerStore } from '../stores/player.js';
import CoverArt from './CoverArt.vue';
import Queue from './Queue.vue';
const showQueue = ref(false);
const store = usePlayerStore();
const activeBot = computed(() => store.activeBot);
-6
View File
@@ -54,11 +54,9 @@ import { ref, onMounted } from 'vue';
import { Icon } from '@iconify/vue';
import axios from 'axios';
import { usePlayerStore } from '../stores/player.js';
import { useWebSocket } from '../composables/useWebSocket.js';
import CoverArt from '../components/CoverArt.vue';
const store = usePlayerStore();
const { connect } = useWebSocket();
interface Playlist {
id: string;
@@ -70,10 +68,6 @@ interface Playlist {
const playlists = ref<Playlist[]>([]);
onMounted(async () => {
store.loadTheme();
connect();
await store.fetchBots();
try {
const res = await axios.get('/api/music/recommend/playlists');
playlists.value = res.data.playlists;