import { createRouter, createWebHistory } from 'vue-router'; import BattleRanking from '../views/BattleRanking.vue'; // 首页组件 import AdminPanel from '../views/AdminPanel.vue'; // 管理员面板组件 import { musicPlayer } from '../utils/musicPlayer'; // 音乐播放器实例 import { getMusicConfig } from '../services/configService'; // 音乐配置读取服务 // 路由配置 const routes = [ { path: '/', name: 'BattleRanking', component: BattleRanking, meta: { title: '百日大战排行榜' } }, { path: '/admin', name: 'AdminPanel', component: AdminPanel, meta: { title: '管理员面板' } }, { // 404路由:未匹配路径重定向到首页 path: '/:pathMatch(.*)*', redirect: '/' } ]; // 创建路由实例 const router = createRouter({ history: createWebHistory(), routes }); // 路由守卫:页面切换时控制音乐状态 router.beforeEach(async (to, from, next) => { // 1. 进入管理员页面:强制暂停+静音 if (to.path.startsWith('/admin')) { musicPlayer.pause(); // 暂停音乐 musicPlayer.setMuted(true); // 强制静音(管理员页面始终无声音) next(); return; } // 2. 进入首页:按配置播放/暂停 if (to.path === '/') { try { const musicConfig = await getMusicConfig(); // 读取音乐配置 if (musicConfig.enabled) { // 初始化音乐路径+开关状态 musicPlayer.initMusicConfig(musicConfig.filePath, musicConfig.enabled); musicPlayer.setMuted(false); // 首页取消静音 musicPlayer.play(); // 播放音乐 } else { musicPlayer.pause(); // 开关关闭则暂停 } } catch (error) { console.error('首页音乐配置读取失败:', error); musicPlayer.pause(); } } // 3. 进入其他页面:暂停音乐 if (to.path !== '/' && !to.path.startsWith('/admin')) { musicPlayer.pause(); } // 4. 设置页面标题(可选增强) if (to.meta.title) { document.title = to.meta.title; } next(); }); export default router;