44 :class =" {
55 'is-mobile': isMobile,
66 'mobile-more-open': mobileMoreOpen,
7+ 'video-refresh-visible': showVideoRefresh,
78 'is-immersive': isImmersivePage
89 }"
910 >
1011 <div class =" fixed-header" >
1112 <Header v-if =" ! isMobile " />
12- <div v-else class =" mobile-top-bar" :class =" { 'home-theme-visible': showHomeThemeToggle }" >
13+ <div v-else class =" mobile-top-bar" :class =" { 'home-theme-visible': showHomeThemeToggle, 'video-refresh-visible': showVideoRefresh }" >
1314 <button v-if =" showMobileBack" class =" mobile-icon-btn" type =" button" title =" 返回" @click =" goBack" >
1415 <span class =" mobile-back-icon" >‹</span >
1516 </button >
2526 <button v-if =" showHomeThemeToggle" class =" mobile-icon-btn mobile-theme-toggle" type =" button" :title =" themeToggleTitle" @click =" toggleTheme" >
2627 <span class =" mobile-theme-text" >{{ resolvedTheme === THEME_MODE.DARK ? '浅' : '深' }}</span >
2728 </button >
29+ <button v-if =" showVideoRefresh" class =" mobile-icon-btn mobile-refresh-btn" type =" button" title =" 刷新点播" @click =" refreshVideoPage" >
30+ <span class =" mobile-refresh-icon" >↻</span >
31+ </button >
2832 <button class =" mobile-search-pill" type =" button" title =" 搜索" @click =" goSearch" >
2933 <svg class =" mobile-action-icon" ><use href =" #icon-sousuo" ></use ></svg >
3034 <span >搜索</span >
@@ -207,6 +211,7 @@ export default defineComponent({
207211 const showMobileBottomNav = computed (() => route .meta ? .showBottomNav !== false && ! isImmersivePage .value );
208212 const showMobileBack = computed (() => isImmersivePage .value || route .name === ' SearchAggregation' );
209213 const showHomeThemeToggle = computed (() => route .name === ' Home' );
214+ const showVideoRefresh = computed (() => route .name === ' Video' );
210215 const mobileTitle = computed (() => route .meta ? .title || ' DrPlayer' );
211216 const mobileSubtitle = computed (() => {
212217 if (route .name === ' Home' ) return ' 影视、直播、阅读与工具' ;
@@ -261,6 +266,10 @@ export default defineComponent({
261266
262267 const isRouteActive = (routeName ) => route .name === routeName;
263268
269+ const refreshVideoPage = () => {
270+ window .dispatchEvent (new CustomEvent (' reloadSource' , { detail: { source: ' mobile-header' } }));
271+ };
272+
264273 const goBack = () => {
265274 if (window .history .length > 1 ) {
266275 router .back ();
@@ -319,6 +328,7 @@ export default defineComponent({
319328 isImmersivePage,
320329 showMobileBottomNav,
321330 showMobileBack,
331+ showVideoRefresh,
322332 showHomeThemeToggle,
323333 mobileTitle,
324334 mobileSubtitle,
@@ -333,6 +343,7 @@ export default defineComponent({
333343 themeToggleTitle,
334344 THEME_MODE ,
335345 toggleTheme,
346+ refreshVideoPage,
336347 onClickMenuItem,
337348 onSiderCollapse,
338349 closeMobileMore,
@@ -563,7 +574,8 @@ export default defineComponent({
563574 background: var (-- dp- bg- shell);
564575}
565576
566- .mobile - top- bar .home - theme- visible {
577+ .mobile - top- bar .home - theme- visible,
578+ .mobile - top- bar .video - refresh- visible {
567579 grid- template- columns: 40px minmax (0 , 1fr ) 36px minmax (84px , auto) 40px ;
568580}
569581
@@ -602,6 +614,17 @@ export default defineComponent({
602614 box- shadow: inset 0 0 0 1px rgba (255 , 255 , 255 , 0.45 );
603615}
604616
617+ .mobile - refresh- btn {
618+ border: 1px solid var (-- dp- border- subtle);
619+ color: var (-- dp- primary- readable);
620+ font- weight: 800 ;
621+ }
622+
623+ .mobile - refresh- icon {
624+ font- size: 19px ;
625+ line- height: 1 ;
626+ }
627+
605628.mobile - theme- toggle {
606629 border: 1px solid var (-- dp- border- subtle);
607630 color: var (-- dp- primary- readable);
0 commit comments