From 679089eda92e13cfcf93170970ceb2fd554ef6c3 Mon Sep 17 00:00:00 2001 From: alger Date: Tue, 29 Jul 2025 22:19:34 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=9F=B3=E9=87=8F?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=B8=8D=E5=90=8C=E6=AD=A5=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixed(#331): 软件存在两套音量调整逻辑,快捷键调整和音量条调整音量不一致 --- src/renderer/components/player/PlayBar.vue | 17 ++++----- src/renderer/store/modules/player.ts | 41 +++++++++++++++++++++- src/renderer/utils/appShortcuts.ts | 14 +++----- 3 files changed, 50 insertions(+), 22 deletions(-) diff --git a/src/renderer/components/player/PlayBar.vue b/src/renderer/components/player/PlayBar.vue index d3781f9..ff437b3 100644 --- a/src/renderer/components/player/PlayBar.vue +++ b/src/renderer/components/player/PlayBar.vue @@ -123,7 +123,7 @@ @@ -245,27 +245,22 @@ const formatTooltip = (value: number) => { return `${secondToMinute(value)} / ${secondToMinute(allTime.value)}`; }; -// 音量条 -const audioVolume = ref( - localStorage.getItem('volume') ? parseFloat(localStorage.getItem('volume') as string) : 1 -); +// 音量条 - 使用 playerStore 的统一音量管理 const getVolumeIcon = computed(() => { // 0 静音 ri-volume-mute-line 0.5 ri-volume-down-line 1 ri-volume-up-line - if (audioVolume.value === 0) { + if (playerStore.volume === 0) { return 'ri-volume-mute-line'; } - if (audioVolume.value <= 0.5) { + if (playerStore.volume <= 0.5) { return 'ri-volume-down-line'; } return 'ri-volume-up-line'; }); const volumeSlider = computed({ - get: () => audioVolume.value * 100, + get: () => playerStore.volume * 100, set: (value) => { - localStorage.setItem('volume', (value / 100).toString()); - audioService.setVolume(value / 100); - audioVolume.value = value / 100; + playerStore.setVolume(value / 100); } }); diff --git a/src/renderer/store/modules/player.ts b/src/renderer/store/modules/player.ts index 028e58a..9a4a6ac 100644 --- a/src/renderer/store/modules/player.ts +++ b/src/renderer/store/modules/player.ts @@ -411,6 +411,9 @@ export const usePlayerStore = defineStore('player', () => { // 播放速度状态 const playbackRate = ref(parseFloat(getLocalStorageItem('playbackRate', '1.0'))); + // 音量状态管理 + const volume = ref(parseFloat(getLocalStorageItem('volume', '1'))); + // 清空播放列表 const clearPlayAll = async () => { audioService.pause(); @@ -1439,6 +1442,35 @@ export const usePlayerStore = defineStore('player', () => { } }; + // 音量管理方法 + const setVolume = (newVolume: number) => { + // 确保音量值在0-1范围内 + const normalizedVolume = Math.max(0, Math.min(1, newVolume)); + volume.value = normalizedVolume; + + // 保存到localStorage + localStorage.setItem('volume', normalizedVolume.toString()); + + // 应用到音频服务 + audioService.setVolume(normalizedVolume); + }; + + const getVolume = () => { + return volume.value; + }; + + const increaseVolume = (step: number = 0.1) => { + const newVolume = Math.min(1, volume.value + step); + setVolume(newVolume); + return newVolume; + }; + + const decreaseVolume = (step: number = 0.1) => { + const newVolume = Math.max(0, volume.value - step); + setVolume(newVolume); + return newVolume; + }; + return { play, isPlay, @@ -1491,6 +1523,13 @@ export const usePlayerStore = defineStore('player', () => { setPlayListDrawerVisible, handlePause, playbackRate, - setPlaybackRate + setPlaybackRate, + + // 音量管理 + volume, + setVolume, + getVolume, + increaseVolume, + decreaseVolume }; }); diff --git a/src/renderer/utils/appShortcuts.ts b/src/renderer/utils/appShortcuts.ts index e553593..e15caf1 100644 --- a/src/renderer/utils/appShortcuts.ts +++ b/src/renderer/utils/appShortcuts.ts @@ -96,11 +96,8 @@ export async function handleShortcutAction(action: string) { showToast(t('player.playBar.next'), 'ri-skip-forward-line'); break; case 'volumeUp': - // 从localStorage获取当前音量 - const currentVolumeUp = parseFloat(localStorage.getItem('volume') || '1'); - if (currentVolumeUp < 1) { - const newVolume = Math.min(1, currentVolumeUp + 0.1); - await audioService.setVolume(newVolume); + if (playerStore.getVolume() < 1) { + const newVolume = playerStore.increaseVolume(0.1); showToast( `${t('player.playBar.volume')}${Math.round(newVolume * 100)}%`, 'ri-volume-up-line' @@ -108,11 +105,8 @@ export async function handleShortcutAction(action: string) { } break; case 'volumeDown': - // 从localStorage获取当前音量 - const currentVolumeDown = parseFloat(localStorage.getItem('volume') || '1'); - if (currentVolumeDown > 0) { - const newVolume = Math.max(0, currentVolumeDown - 0.1); - await audioService.setVolume(newVolume); + if (playerStore.getVolume() > 0) { + const newVolume = playerStore.decreaseVolume(0.1); showToast( `${t('player.playBar.volume')}${Math.round(newVolume * 100)}%`, 'ri-volume-down-line'