diff --git a/apps/music/frontend/src/views/PlayerView.vue b/apps/music/frontend/src/views/PlayerView.vue index 7c752f3..fd29ae9 100644 --- a/apps/music/frontend/src/views/PlayerView.vue +++ b/apps/music/frontend/src/views/PlayerView.vue @@ -740,6 +740,10 @@ async function promptNewPlaylist() { } async function loadPiece(id) { + // 切歌前记下当前是否在播 + tab 在哪 —— 整理 notes / 看和弦谱 时不打扰 + const wasPlaying = !!(audioEl.value && !audioEl.value.paused && !audioEl.value.ended) + const stickyTab = activeTab.value // 保持用户当前看的 tab(如果新 piece 也有) + selected.value = null notesDraft.value = '' // 切歌清 AB Loop(rate 保留全局) @@ -757,15 +761,19 @@ async function loadPiece(id) { selected.value = p notesDraft.value = p.notes || '' selectedId.value = p.id + // tab 保持:sticky 在新 piece 也存在就用它,否则用第一个 const t = tabs.value - if (!t.find(x => x.key === activeTab.value)) { + if (t.find(x => x.key === stickyTab)) { + activeTab.value = stickyTab + } else { activeTab.value = t[0]?.key || 'lyrics' } await nextTick() const first = audioAttachments.value[0] if (first && audioEl.value) { audioEl.value.src = attUrl(first.id) - audioEl.value.play().catch(() => {}) + // 只有上一首在播才自动续播;暂停状态 / 第一次进入 → 只设源,等用户点 ▶ + if (wasPlaying) audioEl.value.play().catch(() => {}) } else if (audioEl.value) { audioEl.value.removeAttribute('src') audioEl.value.load()