diff --git a/web/src/App.tsx b/web/src/App.tsx index 8956856..57a04d6 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -4,6 +4,7 @@ import { Navigate, Route, Routes } from 'react-router-dom' import { appRoutes, type AppRoute } from './appRoutes' import { Layout } from './components/Layout' import { RequireAdmin, RequireAuth } from './components/RequireAuth' +import { ReaderMiniPlayer } from './pages/reader/ReaderMiniPlayer' const LoginPage = lazy(() => import('./pages/LoginPage').then((m) => ({ default: m.LoginPage }))) const ReaderRoutes = lazy(() => import('./pages/reader/ReaderRoutes').then((m) => ({ default: m.default }))) @@ -93,6 +94,8 @@ export default function App() { } /> + {/* 听书迷你条:播放引擎常驻,离开阅读页后仍可从这里控制 */} + ) diff --git a/web/src/pages/reader/ReaderAudioPanel.tsx b/web/src/pages/reader/ReaderAudioPanel.tsx index ff37f13..836e82f 100644 --- a/web/src/pages/reader/ReaderAudioPanel.tsx +++ b/web/src/pages/reader/ReaderAudioPanel.tsx @@ -1,28 +1,12 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react' -import toast from 'react-hot-toast' -import { - ChevronLeft, - ChevronRight, - Gauge, - ListMusic, - Loader2, - Pause, - Play, - Scissors, - Timer, - X, -} from 'lucide-react' +import { ChevronLeft, ChevronRight, Gauge, ListMusic, Loader2, Pause, Play, Scissors, Timer, X } from 'lucide-react' import { Virtuoso, type VirtuosoHandle } from 'react-virtuoso' -import type { ReaderChapter } from '../../api/reader' -import { - AUDIO_CREDITS_MAX, - AUDIO_SPEEDS, - AUDIO_TIMERS, - useReaderSettingsStore, -} from '../../stores/readerSettings' +import { useReaderAudioStore } from '../../stores/readerAudio' +import { AUDIO_CREDITS_MAX, AUDIO_SPEEDS, AUDIO_TIMERS } from '../../stores/readerSettings' import { buildChapterGroups, chapterGroupIndexOf } from '../../utils/chapterGroups' import { readerCoverSrc } from '../../utils/readerCover' +import { getReaderAudioEngine } from './readerAudioEngine' // 音频播放面板(仿 legado AudioPlayActivity / AudioPlayService transport 行): // hls.js 播 m3u8,