@quicktvui/ai 1.0.9 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. package/package.json +1 -1
  2. package/rules/.clinerules +1 -0
  3. package/rules/.cursorrules +1 -0
  4. package/rules/.github/copilot-instructions.md +1 -0
  5. package/rules/.source/hellotv/PROJECT-README.md +52 -0
  6. package/rules/.source/hellotv/app.d.ts +11 -0
  7. package/rules/.source/hellotv/package.json +146 -0
  8. package/rules/.source/hellotv/scripts/build-apk.ts +12 -0
  9. package/rules/.source/hellotv/scripts/build.ts +35 -0
  10. package/rules/.source/hellotv/scripts/dev.ts +12 -0
  11. package/rules/.source/hellotv/scripts/pack.ts +24 -0
  12. package/rules/.source/hellotv/scripts/process.ts +37 -0
  13. package/rules/.source/hellotv/scripts/quicktvui-webpack.android.ts +187 -0
  14. package/rules/.source/hellotv/scripts/quicktvui-webpack.dev.ts +147 -0
  15. package/rules/.source/hellotv/scripts/webpack-watch.ts +24 -0
  16. package/rules/.source/hellotv/src/App.vue +192 -0
  17. package/rules/.source/hellotv/src/api/my/index.ts +198 -0
  18. package/rules/.source/hellotv/src/api/user/impl-user.ts +52 -0
  19. package/rules/.source/hellotv/src/api/user/qr-code-mock.ts +2 -0
  20. package/rules/.source/hellotv/src/api/user/request-url.ts +11 -0
  21. package/rules/.source/hellotv/src/api/user/user-manager.ts +258 -0
  22. package/rules/.source/hellotv/src/app.scss +8 -0
  23. package/rules/.source/hellotv/src/assets/component-media/ic_media_btn_pause.png +0 -0
  24. package/rules/.source/hellotv/src/assets/component-media/ic_media_btn_play.png +0 -0
  25. package/rules/.source/hellotv/src/assets/component-media/ic_media_menu_setting_focused.png +0 -0
  26. package/rules/.source/hellotv/src/assets/component-media/ic_media_menu_setting_normal.png +0 -0
  27. package/rules/.source/hellotv/src/assets/component-media/ic_media_menu_xuanji_focused.png +0 -0
  28. package/rules/.source/hellotv/src/assets/component-media/ic_media_menu_xuanji_normal.png +0 -0
  29. package/rules/.source/hellotv/src/assets/component-media/ic_media_ok_focused.png +0 -0
  30. package/rules/.source/hellotv/src/assets/component-media/ic_media_ok_selected.png +0 -0
  31. package/rules/.source/hellotv/src/assets/detail/ic_collect_focused.png +0 -0
  32. package/rules/.source/hellotv/src/assets/detail/ic_collect_normal.png +0 -0
  33. package/rules/.source/hellotv/src/assets/detail/ic_full_focused.png +0 -0
  34. package/rules/.source/hellotv/src/assets/detail/ic_full_normal.png +0 -0
  35. package/rules/.source/hellotv/src/assets/detail/ic_info_focused.png +0 -0
  36. package/rules/.source/hellotv/src/assets/detail/ic_info_normal.png +0 -0
  37. package/rules/.source/hellotv/src/assets/detail/ic_introduction_bg.png +0 -0
  38. package/rules/.source/hellotv/src/assets/detail/ic_media_list_item_normal.png +0 -0
  39. package/rules/.source/hellotv/src/assets/detail/ic_media_list_item_selected.png +0 -0
  40. package/rules/.source/hellotv/src/assets/detail/ic_media_player_pause.png +0 -0
  41. package/rules/.source/hellotv/src/assets/detail/ic_media_player_placeholder.png +0 -0
  42. package/rules/.source/hellotv/src/assets/detail/ic_media_player_play.png +0 -0
  43. package/rules/.source/hellotv/src/assets/detail/ic_vip_focused.png +0 -0
  44. package/rules/.source/hellotv/src/assets/detail/ic_vip_normal.png +0 -0
  45. package/rules/.source/hellotv/src/assets/detail/skeleton.png +0 -0
  46. package/rules/.source/hellotv/src/assets/filter/ic_empty.png +0 -0
  47. package/rules/.source/hellotv/src/assets/filter/ic_filter_focused.png +0 -0
  48. package/rules/.source/hellotv/src/assets/filter/ic_filter_normal.png +0 -0
  49. package/rules/.source/hellotv/src/assets/filter/ic_filter_selected.png +0 -0
  50. package/rules/.source/hellotv/src/assets/filter/ic_left_focused.png +0 -0
  51. package/rules/.source/hellotv/src/assets/filter/ic_left_normal.png +0 -0
  52. package/rules/.source/hellotv/src/assets/filter/ic_left_selected.png +0 -0
  53. package/rules/.source/hellotv/src/assets/history/ic_delete.png +0 -0
  54. package/rules/.source/hellotv/src/assets/history/ic_empty.png +0 -0
  55. package/rules/.source/hellotv/src/assets/home/bg_history_item.png +0 -0
  56. package/rules/.source/hellotv/src/assets/home/bg_shadow.png +0 -0
  57. package/rules/.source/hellotv/src/assets/home/ic_4k_logo.png +0 -0
  58. package/rules/.source/hellotv/src/assets/home/ic_4k_play_focused.png +0 -0
  59. package/rules/.source/hellotv/src/assets/home/ic_4k_subtitle_normal.png +0 -0
  60. package/rules/.source/hellotv/src/assets/home/ic_arrow_focused.png +0 -0
  61. package/rules/.source/hellotv/src/assets/home/ic_arrow_normal.png +0 -0
  62. package/rules/.source/hellotv/src/assets/home/ic_exit_corner.png +0 -0
  63. package/rules/.source/hellotv/src/assets/home/ic_exit_header.png +0 -0
  64. package/rules/.source/hellotv/src/assets/home/ic_play.png +0 -0
  65. package/rules/.source/hellotv/src/assets/live/bg-error.png +0 -0
  66. package/rules/.source/hellotv/src/assets/live/bg-play-info.png +0 -0
  67. package/rules/.source/hellotv/src/assets/live/ic-arrow-left.png +0 -0
  68. package/rules/.source/hellotv/src/assets/live/ic-arrow-right.png +0 -0
  69. package/rules/.source/hellotv/src/assets/live/ic-back.png +0 -0
  70. package/rules/.source/hellotv/src/assets/live/ic-change.png +0 -0
  71. package/rules/.source/hellotv/src/assets/live/ic-corner-vip-tips.png +0 -0
  72. package/rules/.source/hellotv/src/assets/live/ic-corner-vip.png +0 -0
  73. package/rules/.source/hellotv/src/assets/live/ic-key.png +0 -0
  74. package/rules/.source/hellotv/src/assets/live/ic-loading-error.png +0 -0
  75. package/rules/.source/hellotv/src/assets/live/ic-menu-ext-arrow.png +0 -0
  76. package/rules/.source/hellotv/src/assets/live/ic-menu-ext.png +0 -0
  77. package/rules/.source/hellotv/src/assets/live/ic-menu.png +0 -0
  78. package/rules/.source/hellotv/src/assets/live/ic-mine.png +0 -0
  79. package/rules/.source/hellotv/src/assets/live/ic-network-error.png +0 -0
  80. package/rules/.source/hellotv/src/assets/live/ic-ok.png +0 -0
  81. package/rules/.source/hellotv/src/assets/live/ic-playing.png +0 -0
  82. package/rules/.source/hellotv/src/assets/live/ic-playing2.png +0 -0
  83. package/rules/.source/hellotv/src/assets/live/ic-playing3.png +0 -0
  84. package/rules/.source/hellotv/src/assets/live/ic-service.png +0 -0
  85. package/rules/.source/hellotv/src/assets/live/ic_live_broadcast.png +0 -0
  86. package/rules/.source/hellotv/src/assets/live/ic_live_broadcast_focused.png +0 -0
  87. package/rules/.source/hellotv/src/assets/my/ic_collect_focus.png +0 -0
  88. package/rules/.source/hellotv/src/assets/my/ic_collect_normal.png +0 -0
  89. package/rules/.source/hellotv/src/assets/my/ic_order_focus.png +0 -0
  90. package/rules/.source/hellotv/src/assets/my/ic_order_normal.png +0 -0
  91. package/rules/.source/hellotv/src/assets/my/ic_record_focus.png +0 -0
  92. package/rules/.source/hellotv/src/assets/my/ic_record_normal.png +0 -0
  93. package/rules/.source/hellotv/src/assets/my/ic_user.png +0 -0
  94. package/rules/.source/hellotv/src/assets/my/ic_vip_normal.png +0 -0
  95. package/rules/.source/hellotv/src/assets/search/ic_back.png +0 -0
  96. package/rules/.source/hellotv/src/assets/search/ic_back_focused.png +0 -0
  97. package/rules/.source/hellotv/src/assets/search/ic_clear.png +0 -0
  98. package/rules/.source/hellotv/src/assets/search/ic_clear_dark.png +0 -0
  99. package/rules/.source/hellotv/src/assets/search/ic_clear_focused.png +0 -0
  100. package/rules/.source/hellotv/src/assets/search/ic_search.png +0 -0
  101. package/rules/.source/hellotv/src/assets/top-view/ic_logo.png +0 -0
  102. package/rules/.source/hellotv/src/assets/top-view/ic_top_search_focused.png +0 -0
  103. package/rules/.source/hellotv/src/assets/top-view/ic_top_search_normal.png +0 -0
  104. package/rules/.source/hellotv/src/assets/top-view/ic_top_user_focused.png +0 -0
  105. package/rules/.source/hellotv/src/assets/top-view/ic_top_user_normal.png +0 -0
  106. package/rules/.source/hellotv/src/components/bg-animation.scss +14 -0
  107. package/rules/.source/hellotv/src/components/bg-animation.vue +176 -0
  108. package/rules/.source/hellotv/src/components/btn-pack-view.vue +172 -0
  109. package/rules/.source/hellotv/src/components/btn-pack.scss +53 -0
  110. package/rules/.source/hellotv/src/components/grid-item-horizontal.vue +203 -0
  111. package/rules/.source/hellotv/src/components/grid-item-vertical.vue +201 -0
  112. package/rules/.source/hellotv/src/components/media/build-data/media-config.ts +4 -0
  113. package/rules/.source/hellotv/src/components/media/build-data/media-control-adapter.ts +378 -0
  114. package/rules/.source/hellotv/src/components/media/build-data/media-imp.ts +44 -0
  115. package/rules/.source/hellotv/src/components/media/view/media-loading-component.vue +50 -0
  116. package/rules/.source/hellotv/src/components/media/view/media-loading-view.vue +154 -0
  117. package/rules/.source/hellotv/src/components/media/view/media-manager-view.vue +931 -0
  118. package/rules/.source/hellotv/src/components/media/view/media-menu-detail-item.vue +42 -0
  119. package/rules/.source/hellotv/src/components/media/view/media-menu-detail-view.vue +109 -0
  120. package/rules/.source/hellotv/src/components/media/view/media-menu-icon-item.vue +43 -0
  121. package/rules/.source/hellotv/src/components/media/view/media-menu-text-item.vue +27 -0
  122. package/rules/.source/hellotv/src/components/media/view/media-menu-view.vue +88 -0
  123. package/rules/.source/hellotv/src/components/media/view/media-player-view.vue +408 -0
  124. package/rules/.source/hellotv/src/components/media/view/scss/media-loading.scss +51 -0
  125. package/rules/.source/hellotv/src/components/media/view/scss/media-manager.scss +79 -0
  126. package/rules/.source/hellotv/src/components/media/view/scss/media-menu.scss +114 -0
  127. package/rules/.source/hellotv/src/components/media/view/scss/media-player.scss +6 -0
  128. package/rules/.source/hellotv/src/components/qt-tabs-component.ts +268 -0
  129. package/rules/.source/hellotv/src/components/qt-ul-component.ts +792 -0
  130. package/rules/.source/hellotv/src/components/top-view.scss +38 -0
  131. package/rules/.source/hellotv/src/components/top-view.vue +114 -0
  132. package/rules/.source/hellotv/src/config/README.md +22 -0
  133. package/rules/.source/hellotv/src/config/build-config.ts +22 -0
  134. package/rules/.source/hellotv/src/config/private-theme-config.ts +21 -0
  135. package/rules/.source/hellotv/src/config/public-config.scss +16 -0
  136. package/rules/.source/hellotv/src/config/test.scss +45 -0
  137. package/rules/.source/hellotv/src/config/theme-config.ts +51 -0
  138. package/rules/.source/hellotv/src/main.ts +45 -0
  139. package/rules/.source/hellotv/src/pages/activity/adapter/config.ts +37 -0
  140. package/rules/.source/hellotv/src/pages/activity/adapter/index.ts +849 -0
  141. package/rules/.source/hellotv/src/pages/activity/adapter/interface.ts +173 -0
  142. package/rules/.source/hellotv/src/pages/activity/api/index.ts +36 -0
  143. package/rules/.source/hellotv/src/pages/activity/api/interface.ts +11 -0
  144. package/rules/.source/hellotv/src/pages/activity/api/request-url.ts +10 -0
  145. package/rules/.source/hellotv/src/pages/activity/components/item/focus-change-img-item.vue +40 -0
  146. package/rules/.source/hellotv/src/pages/activity/components/item/inner-out-title-item.vue +59 -0
  147. package/rules/.source/hellotv/src/pages/activity/components/item/no-title-item.vue +45 -0
  148. package/rules/.source/hellotv/src/pages/activity/components/item/placeholder-item.vue +25 -0
  149. package/rules/.source/hellotv/src/pages/activity/index.vue +219 -0
  150. package/rules/.source/hellotv/src/pages/activity/scss/index.scss +46 -0
  151. package/rules/.source/hellotv/src/pages/activity/scss/item.scss +69 -0
  152. package/rules/.source/hellotv/src/pages/detail/adapter/index.ts +317 -0
  153. package/rules/.source/hellotv/src/pages/detail/adapter/interface.ts +150 -0
  154. package/rules/.source/hellotv/src/pages/detail/adapter/media-player.ts +378 -0
  155. package/rules/.source/hellotv/src/pages/detail/api/index.ts +77 -0
  156. package/rules/.source/hellotv/src/pages/detail/api/request-url.ts +8 -0
  157. package/rules/.source/hellotv/src/pages/detail/components/media-player/collapse/media-collapse-definition.vue +192 -0
  158. package/rules/.source/hellotv/src/pages/detail/components/media-player/collapse/media-collapse-list-item.vue +108 -0
  159. package/rules/.source/hellotv/src/pages/detail/components/media-player/collapse/media-collapse-media-series.vue +349 -0
  160. package/rules/.source/hellotv/src/pages/detail/components/media-player/collapse/media-collapse-order.vue +194 -0
  161. package/rules/.source/hellotv/src/pages/detail/components/media-player/collapse/media-collapse-speed.vue +192 -0
  162. package/rules/.source/hellotv/src/pages/detail/components/media-player/index.vue +404 -0
  163. package/rules/.source/hellotv/src/pages/detail/components/media-player/media-player-small-view.vue +382 -0
  164. package/rules/.source/hellotv/src/pages/detail/components/media-player/media-player-view.vue +1099 -0
  165. package/rules/.source/hellotv/src/pages/detail/components/recommend-item.vue +167 -0
  166. package/rules/.source/hellotv/src/pages/detail/components/section/basic-section.vue +218 -0
  167. package/rules/.source/hellotv/src/pages/detail/components/section/config.ts +6 -0
  168. package/rules/.source/hellotv/src/pages/detail/components/section/header-section.vue +15 -0
  169. package/rules/.source/hellotv/src/pages/detail/components/section/item/button-menu.vue +259 -0
  170. package/rules/.source/hellotv/src/pages/detail/components/section/item/media-introduction.vue +238 -0
  171. package/rules/.source/hellotv/src/pages/detail/components/section/item/media-series.vue +308 -0
  172. package/rules/.source/hellotv/src/pages/detail/components/section/item/player-placeholder.vue +88 -0
  173. package/rules/.source/hellotv/src/pages/detail/index.vue +571 -0
  174. package/rules/.source/hellotv/src/pages/detail/scss/index.scss +22 -0
  175. package/rules/.source/hellotv/src/pages/detail-full-player/components/media-player/full-player-loading.vue +78 -0
  176. package/rules/.source/hellotv/src/pages/detail-full-player/components/media-player/full-player-menu-view.vue +803 -0
  177. package/rules/.source/hellotv/src/pages/detail-full-player/components/media-player/full-player-view.vue +219 -0
  178. package/rules/.source/hellotv/src/pages/detail-full-player/index.vue +101 -0
  179. package/rules/.source/hellotv/src/pages/detail-full-player/scss/full-player-view.scss +6 -0
  180. package/rules/.source/hellotv/src/pages/detail-full-screen/adapter/index.ts +0 -0
  181. package/rules/.source/hellotv/src/pages/detail-full-screen/adapter/interface.ts +133 -0
  182. package/rules/.source/hellotv/src/pages/detail-full-screen/api/index.ts +77 -0
  183. package/rules/.source/hellotv/src/pages/detail-full-screen/api/request-url.ts +8 -0
  184. package/rules/.source/hellotv/src/pages/detail-full-screen/components/media-info.vue +263 -0
  185. package/rules/.source/hellotv/src/pages/detail-full-screen/components/media-player.vue +42 -0
  186. package/rules/.source/hellotv/src/pages/detail-full-screen/components/media-series-section.vue +26 -0
  187. package/rules/.source/hellotv/src/pages/detail-full-screen/components/recommend-item.vue +167 -0
  188. package/rules/.source/hellotv/src/pages/detail-full-screen/index.vue +163 -0
  189. package/rules/.source/hellotv/src/pages/detail-full-screen/scss/index.scss +41 -0
  190. package/rules/.source/hellotv/src/pages/device-info/index.vue +106 -0
  191. package/rules/.source/hellotv/src/pages/device-info/scss/device-info.scss +49 -0
  192. package/rules/.source/hellotv/src/pages/filter/README.md +66 -0
  193. package/rules/.source/hellotv/src/pages/filter/adapter/index.ts +180 -0
  194. package/rules/.source/hellotv/src/pages/filter/adapter/interface.ts +111 -0
  195. package/rules/.source/hellotv/src/pages/filter/api/index.ts +38 -0
  196. package/rules/.source/hellotv/src/pages/filter/api/interface.ts +44 -0
  197. package/rules/.source/hellotv/src/pages/filter/api/request-url.ts +8 -0
  198. package/rules/.source/hellotv/src/pages/filter/components/content/index.vue +469 -0
  199. package/rules/.source/hellotv/src/pages/filter/components/content/list-item-record.vue +16 -0
  200. package/rules/.source/hellotv/src/pages/filter/components/content/list-item.vue +78 -0
  201. package/rules/.source/hellotv/src/pages/filter/components/expand/index.vue +83 -0
  202. package/rules/.source/hellotv/src/pages/filter/components/sidebar/index.vue +81 -0
  203. package/rules/.source/hellotv/src/pages/filter/components/sidebar/list-item-filter-title.vue +78 -0
  204. package/rules/.source/hellotv/src/pages/filter/components/sidebar/list-item-filter.vue +68 -0
  205. package/rules/.source/hellotv/src/pages/filter/components/sidebar/list-item-line.vue +11 -0
  206. package/rules/.source/hellotv/src/pages/filter/components/sidebar/list-item-text.vue +43 -0
  207. package/rules/.source/hellotv/src/pages/filter/components/sidebar/list-item-title.vue +14 -0
  208. package/rules/.source/hellotv/src/pages/filter/config.ts +10 -0
  209. package/rules/.source/hellotv/src/pages/filter/expand-sidebar-contents.vue +203 -0
  210. package/rules/.source/hellotv/src/pages/filter/scss/filter-content-list-item.scss +42 -0
  211. package/rules/.source/hellotv/src/pages/filter/scss/filter-content.scss +60 -0
  212. package/rules/.source/hellotv/src/pages/filter/scss/filter-expand.scss +30 -0
  213. package/rules/.source/hellotv/src/pages/filter/scss/filter-sidebar.scss +45 -0
  214. package/rules/.source/hellotv/src/pages/filter/scss/filter.scss +21 -0
  215. package/rules/.source/hellotv/src/pages/filter/sidebar-contents.vue +145 -0
  216. package/rules/.source/hellotv/src/pages/filter/single-contents.vue +61 -0
  217. package/rules/.source/hellotv/src/pages/history/adapter/index.ts +51 -0
  218. package/rules/.source/hellotv/src/pages/history/adapter/interface.ts +22 -0
  219. package/rules/.source/hellotv/src/pages/history/api/index.ts +54 -0
  220. package/rules/.source/hellotv/src/pages/history/api/interface.ts +41 -0
  221. package/rules/.source/hellotv/src/pages/history/api/request-url.ts +10 -0
  222. package/rules/.source/hellotv/src/pages/history/components/confirm-dialog.vue +155 -0
  223. package/rules/.source/hellotv/src/pages/history/config.ts +8 -0
  224. package/rules/.source/hellotv/src/pages/history/index-raw.vue +540 -0
  225. package/rules/.source/hellotv/src/pages/history/index.vue +431 -0
  226. package/rules/.source/hellotv/src/pages/history/mock.ts +32 -0
  227. package/rules/.source/hellotv/src/pages/history/scss/history-raw.scss +181 -0
  228. package/rules/.source/hellotv/src/pages/history/scss/history.scss +148 -0
  229. package/rules/.source/hellotv/src/pages/home/adapter/exit/home-exit-adapter.ts +20 -0
  230. package/rules/.source/hellotv/src/pages/home/adapter/exit/home-exit-imp.ts +13 -0
  231. package/rules/.source/hellotv/src/pages/home/adapter/media/create-home-player-interceptor.ts +50 -0
  232. package/rules/.source/hellotv/src/pages/home/adapter/media/home-media-imp.ts +74 -0
  233. package/rules/.source/hellotv/src/pages/home/adapter/tab-bar/tab-bar-adapter.ts +151 -0
  234. package/rules/.source/hellotv/src/pages/home/adapter/tab-bar/tab-bar-config.ts +17 -0
  235. package/rules/.source/hellotv/src/pages/home/adapter/tab-bar/tab-bar-imp.ts +53 -0
  236. package/rules/.source/hellotv/src/pages/home/adapter/tab-bar/tab-bar-item-type.ts +6 -0
  237. package/rules/.source/hellotv/src/pages/home/adapter/tab-content/tab-content-adapter.ts +1304 -0
  238. package/rules/.source/hellotv/src/pages/home/adapter/tab-content/tab-content-config.ts +30 -0
  239. package/rules/.source/hellotv/src/pages/home/adapter/tab-content/tab-content-imp.ts +173 -0
  240. package/rules/.source/hellotv/src/pages/home/adapter/tab-content/tab-content-item-type.ts +17 -0
  241. package/rules/.source/hellotv/src/pages/home/api/index.ts +157 -0
  242. package/rules/.source/hellotv/src/pages/home/api/interface.ts +56 -0
  243. package/rules/.source/hellotv/src/pages/home/api/request-url.ts +22 -0
  244. package/rules/.source/hellotv/src/pages/home/components/exit-dialog.vue +148 -0
  245. package/rules/.source/hellotv/src/pages/home/components/media/bg-player.vue +440 -0
  246. package/rules/.source/hellotv/src/pages/home/components/nav-bar/bar-img-item.vue +39 -0
  247. package/rules/.source/hellotv/src/pages/home/components/nav-bar/bar-text-item.vue +100 -0
  248. package/rules/.source/hellotv/src/pages/home/components/tab-content/bg-player-cell-list-item-img.vue +54 -0
  249. package/rules/.source/hellotv/src/pages/home/components/tab-content/bg-player-cell-list-item-text.vue +67 -0
  250. package/rules/.source/hellotv/src/pages/home/components/tab-content/cell-list-player-item.vue +74 -0
  251. package/rules/.source/hellotv/src/pages/home/components/tab-content/cell-player-item.vue +40 -0
  252. package/rules/.source/hellotv/src/pages/home/components/tab-content/focus-change-img-item.vue +41 -0
  253. package/rules/.source/hellotv/src/pages/home/components/tab-content/history-item.vue +362 -0
  254. package/rules/.source/hellotv/src/pages/home/components/tab-content/inner-out-title-item.vue +60 -0
  255. package/rules/.source/hellotv/src/pages/home/components/tab-content/no-title-item.vue +46 -0
  256. package/rules/.source/hellotv/src/pages/home/components/tab-content/placeholder-item.vue +25 -0
  257. package/rules/.source/hellotv/src/pages/home/components/tab-content/short-video/short-video-section-item.vue +80 -0
  258. package/rules/.source/hellotv/src/pages/home/components/tab-content/short-video/short-video-section.vue +70 -0
  259. package/rules/.source/hellotv/src/pages/home/components/tab-content/small-4k/small-four-section.vue +76 -0
  260. package/rules/.source/hellotv/src/pages/home/components/tab-content/world-4k/world-four-section-item.vue +90 -0
  261. package/rules/.source/hellotv/src/pages/home/components/tab-content/world-4k/world-four-section.vue +57 -0
  262. package/rules/.source/hellotv/src/pages/home/components/waterfall-tabs.vue +1307 -0
  263. package/rules/.source/hellotv/src/pages/home/index.vue +117 -0
  264. package/rules/.source/hellotv/src/pages/home/scss/bar-img-item.scss +11 -0
  265. package/rules/.source/hellotv/src/pages/home/scss/bar-text-item.scss +80 -0
  266. package/rules/.source/hellotv/src/pages/home/scss/base.scss +8 -0
  267. package/rules/.source/hellotv/src/pages/home/scss/bg-player-cell-list-item.scss +24 -0
  268. package/rules/.source/hellotv/src/pages/home/scss/bg-player.scss +50 -0
  269. package/rules/.source/hellotv/src/pages/home/scss/cell-player-item.scss +24 -0
  270. package/rules/.source/hellotv/src/pages/home/scss/exit-dialog.scss +89 -0
  271. package/rules/.source/hellotv/src/pages/home/scss/focus-change-img-item.scss +12 -0
  272. package/rules/.source/hellotv/src/pages/home/scss/home.scss +32 -0
  273. package/rules/.source/hellotv/src/pages/home/scss/inner-out-title-item.scss +24 -0
  274. package/rules/.source/hellotv/src/pages/home/scss/no-title-item.scss +15 -0
  275. package/rules/.source/hellotv/src/pages/home/scss/placeholder-item.scss +14 -0
  276. package/rules/.source/hellotv/src/pages/home/scss/short-video-section.scss +59 -0
  277. package/rules/.source/hellotv/src/pages/home/scss/small-four-section.scss +14 -0
  278. package/rules/.source/hellotv/src/pages/home/scss/waterfall-tabs.scss +50 -0
  279. package/rules/.source/hellotv/src/pages/home/scss/world-four-section.scss +106 -0
  280. package/rules/.source/hellotv/src/pages/introduction/index.vue +227 -0
  281. package/rules/.source/hellotv/src/pages/live/components/menu/first-list-item-icon-text.vue +35 -0
  282. package/rules/.source/hellotv/src/pages/live/components/menu/first-list-item-img.vue +16 -0
  283. package/rules/.source/hellotv/src/pages/live/components/menu/first-list-item-text.vue +16 -0
  284. package/rules/.source/hellotv/src/pages/live/components/menu/index.vue +266 -0
  285. package/rules/.source/hellotv/src/pages/live/components/menu/second-list-item.vue +80 -0
  286. package/rules/.source/hellotv/src/pages/live/components/menu/third-list-item.vue +68 -0
  287. package/rules/.source/hellotv/src/pages/live/components/player/index.vue +168 -0
  288. package/rules/.source/hellotv/src/pages/live/components/player/player-error.vue +48 -0
  289. package/rules/.source/hellotv/src/pages/live/components/player/player-loading.vue +50 -0
  290. package/rules/.source/hellotv/src/pages/live/components/player/player-tips.vue +125 -0
  291. package/rules/.source/hellotv/src/pages/live/components/player/tips-icon-text.vue +27 -0
  292. package/rules/.source/hellotv/src/pages/live/css/menu.css +109 -0
  293. package/rules/.source/hellotv/src/pages/live/css/player.css +56 -0
  294. package/rules/.source/hellotv/src/pages/live/index.vue +128 -0
  295. package/rules/.source/hellotv/src/pages/live/mock/index.ts +263 -0
  296. package/rules/.source/hellotv/src/pages/live/types/index.ts +42 -0
  297. package/rules/.source/hellotv/src/pages/login/index.vue +116 -0
  298. package/rules/.source/hellotv/src/pages/login/scss/login.scss +61 -0
  299. package/rules/.source/hellotv/src/pages/m-test.vue +84 -0
  300. package/rules/.source/hellotv/src/pages/my/README.md +87 -0
  301. package/rules/.source/hellotv/src/pages/my/index.vue +177 -0
  302. package/rules/.source/hellotv/src/pages/my/my-data-manager.ts +606 -0
  303. package/rules/.source/hellotv/src/pages/my/my-templates.vue +24 -0
  304. package/rules/.source/hellotv/src/pages/my/poster/index.vue +98 -0
  305. package/rules/.source/hellotv/src/pages/my/poster/my-card2.vue +90 -0
  306. package/rules/.source/hellotv/src/pages/my/poster/my-icon-title-col.vue +72 -0
  307. package/rules/.source/hellotv/src/pages/my/poster/my-icon-title-row.vue +72 -0
  308. package/rules/.source/hellotv/src/pages/my/poster/my-info.vue +50 -0
  309. package/rules/.source/hellotv/src/pages/my/poster/my-user.vue +126 -0
  310. package/rules/.source/hellotv/src/pages/play-test.vue +95 -0
  311. package/rules/.source/hellotv/src/pages/search/README.md +57 -0
  312. package/rules/.source/hellotv/src/pages/search/adapter/index.ts +285 -0
  313. package/rules/.source/hellotv/src/pages/search/adapter/interface.ts +60 -0
  314. package/rules/.source/hellotv/src/pages/search/api/index.ts +100 -0
  315. package/rules/.source/hellotv/src/pages/search/api/interface.ts +64 -0
  316. package/rules/.source/hellotv/src/pages/search/api/request-url.ts +20 -0
  317. package/rules/.source/hellotv/src/pages/search/components/search-content-tabs.vue +153 -0
  318. package/rules/.source/hellotv/src/pages/search/components/search-content.vue +282 -0
  319. package/rules/.source/hellotv/src/pages/search/components/search-keyboard.vue +252 -0
  320. package/rules/.source/hellotv/src/pages/search/components/search-keyword-grid.vue +85 -0
  321. package/rules/.source/hellotv/src/pages/search/components/search-keyword.vue +346 -0
  322. package/rules/.source/hellotv/src/pages/search/config.ts +10 -0
  323. package/rules/.source/hellotv/src/pages/search/scss/search-content.scss +130 -0
  324. package/rules/.source/hellotv/src/pages/search/scss/search-keyboard.scss +91 -0
  325. package/rules/.source/hellotv/src/pages/search/scss/search-keyword-grid.scss +30 -0
  326. package/rules/.source/hellotv/src/pages/search/scss/search-keyword.scss +104 -0
  327. package/rules/.source/hellotv/src/pages/search/scss/search.scss +18 -0
  328. package/rules/.source/hellotv/src/pages/search/three-columns.vue +164 -0
  329. package/rules/.source/hellotv/src/pages/search/two-columns.vue +128 -0
  330. package/rules/.source/hellotv/src/pages/tabs-test.vue +339 -0
  331. package/rules/.source/hellotv/src/pages/webview/load-web-view.vue +44 -0
  332. package/rules/.source/hellotv/src/routes.ts +142 -0
  333. package/rules/.source/hellotv/src/tools/common.ts +18 -0
  334. package/rules/.source/hellotv/src/tools/format-date.ts +16 -0
  335. package/rules/.source/hellotv/src/tools/index.ts +58 -0
  336. package/rules/.source/hellotv/src/tools/launch.ts +339 -0
  337. package/rules/.source/hellotv/src/tools/request/index.ts +206 -0
  338. package/rules/.source/hellotv/src/tools/request/interface.ts +64 -0
  339. package/rules/.source/hellotv/src/typings/shims-vue.d.ts +6 -0
  340. package/rules/.source/hellotv/src/vue.config.js +3 -0
  341. package/rules/.source/hellotv/tsconfig.json +34 -0
  342. package/rules/.windsurfrules +1 -0
  343. package/rules/AGENTS.md +1 -0
  344. package/rules/CLAUDE.md +1 -0
  345. package/rules/GEMINI.md +1 -0
@@ -0,0 +1,1099 @@
1
+ <template>
2
+ <qt-view
3
+ class="media-player-view-root"
4
+ name="mediaRoot"
5
+ :focusable="false"
6
+ :style="{ width: playerWidth, height: playerHeight }"
7
+ >
8
+ <!-- media-player-view -->
9
+ <qt-view
10
+ class="media-player-view"
11
+ :visible="isFullWindow"
12
+ :focusable="false"
13
+ >
14
+ <!-- 顶部条 -->
15
+ <qt-view
16
+ class="media-player-view-title"
17
+ v-if="isFullWindow && isTitleBarShowing"
18
+ :gradientBackground="{ colors: ['#E6000000', '#00000000'] }"
19
+ >
20
+ <qt-text
21
+ class="media-player-view-title-text"
22
+ :focusable="false"
23
+ :fontSize="30"
24
+ :text="mediaTitle"
25
+ />
26
+ </qt-view>
27
+ <!-- 底部进度条 -->
28
+ <qt-view
29
+ class="media-player-view-bottom"
30
+ v-if="isFullWindow && isProgressShowing"
31
+ >
32
+ <!-- 进度条背景渐变 -->
33
+ <qt-view
34
+ class="media-player-view-bottom-bg"
35
+ v-if="isFullWindow && isProgressShowing"
36
+ :gradientBackground="{ colors: ['#00000000', '#E6000000'] }"
37
+ />
38
+ <!-- 底部进度条 -->
39
+ <qt-column
40
+ class="media-player-view-state-progress"
41
+ v-show="isProgressShowing"
42
+ >
43
+ <!-- 播放状态 -->
44
+ <div class="media-player-view-img">
45
+ <img
46
+ :visible="!isPlayerPlaying"
47
+ :focusable="false"
48
+ :src="playIcon"
49
+ postDelay="100"
50
+ />
51
+ <img
52
+ :visible="isPlayerPlaying"
53
+ :focusable="false"
54
+ :src="pauseIcon"
55
+ postDelay="100"
56
+ />
57
+ </div>
58
+
59
+ <!-- 播放进度 -->
60
+ <qt-row class="media-player-view-progress" :autofocus="true">
61
+ <qt-text
62
+ class="media-player-view-progress-text"
63
+ :focusable="false"
64
+ gravity="center"
65
+ :fontSize="30"
66
+ :text="progress"
67
+ />
68
+
69
+ <qt-seek-bar
70
+ class="media-player-view-seekbar"
71
+ ref="seekBarRef"
72
+ name="seekBar"
73
+ :blockFocusDirections="['left', 'right', 'up']"
74
+ :color="{ startColor: '#FFFFFF', endColor: '#FFFFFF' }"
75
+ :nextFocusName="{ left: 'seekBar' }"
76
+ :visible="isFullWindow && isProgressShowing"
77
+ @onSeekStart="onSeekBarSeekStart"
78
+ @onSeekStop="onSeekBarSeekStop"
79
+ @focus="onSeekbarFocusChanged"
80
+ :focusable="true"
81
+ />
82
+
83
+ <qt-text
84
+ class="media-player-view-progress-text"
85
+ :focusable="false"
86
+ gravity="center"
87
+ :fontSize="30"
88
+ :text="duration"
89
+ />
90
+ </qt-row>
91
+ <!-- 下一个按钮-->
92
+ <div
93
+ class="media-player-view-next"
94
+ :focusable="true"
95
+ name="nextButton"
96
+ :nextFocusName="{
97
+ up: 'seekBar',
98
+ down: 'nextButton',
99
+ right: 'nextButton',
100
+ left: 'nextButton',
101
+ }"
102
+ :visible="mediaSeriesVisible"
103
+ @click="onNextButtonClicked"
104
+ @focus="onNextButtonFocusChanged"
105
+ >
106
+ <div
107
+ class="media-player-view-next-text-focus"
108
+ showOnState="focused"
109
+ duplicateParentState
110
+ :gradientBackground="{
111
+ colors: ThemeConfig.btnGradientFocusColor,
112
+ cornerRadius: 8,
113
+ orientation: 6,
114
+ }"
115
+ ></div>
116
+ <qt-text
117
+ class="media-player-view-next-text"
118
+ gravity="center"
119
+ typeface="bold"
120
+ duplicateParentState
121
+ :fontSize="30"
122
+ text="下一个"
123
+ focusScale="1.1"
124
+ />
125
+ </div>
126
+ </qt-column>
127
+ </qt-view>
128
+ <!-- 底部菜单 -->
129
+ <qt-view
130
+ :visible="isFullWindow && isMenuShowing"
131
+ class="media-player-view-menu"
132
+ >
133
+ <qt-view
134
+ v-if="isFullWindow && isMenuShowing"
135
+ class="media-player-view-menu-bg"
136
+ :gradientBackground="{ colors: ['#00000000', '#E6000000'] }"
137
+ />
138
+ <!-- 折叠面板 -->
139
+ <qt-collapse
140
+ ref="mediaCollapseRef"
141
+ :visible="isFullWindow && isMenuShowing"
142
+ v-if="mediaCollapseMenuInit"
143
+ :descendantFocusability="isFullWindow && isMenuShowing ? 1 : 2"
144
+ class="media-player-collapse"
145
+ >
146
+ <media-collapse-order
147
+ ref="mediaCollapseOrderRef"
148
+ :blockFocusDirections="['left', 'right', 'down', 'up']"
149
+ name="mediaCollapseOrder"
150
+ @onCollapseItemFocused="onCollapseItemOrderFocused"
151
+ @onCollapseItemClicked="onCollapseItemOrderClicked"
152
+ />
153
+ <media-collapse-speed
154
+ ref="mediaCollapseSpeedRef"
155
+ :blockFocusDirections="['left', 'right', 'up']"
156
+ name="mediaCollapseSpeed"
157
+ @onCollapseItemFocused="onCollapseItemSpeedFocused"
158
+ @onCollapseItemClicked="onCollapseItemSpeedClicked"
159
+ />
160
+ <media-collapse-definition
161
+ ref="mediaCollapseDefinitionRef"
162
+ :blockFocusDirections="['left', 'right']"
163
+ name="mediaCollapseDefinition"
164
+ @onCollapseItemFocused="onCollapseItemDefinitionFocused"
165
+ @onCollapseItemClicked="onCollapseItemDefinitionClicked"
166
+ />
167
+ <media-collapse-media-series
168
+ v-if="mediaListVisible"
169
+ ref="mediaCollapseMediaSeriesRef"
170
+ :blockFocusDirections="['left', 'right', 'down']"
171
+ name="mediaCollapseMediaSeries"
172
+ @onMediaSeriesGroupItemFocus="onMediaSeriesGroupItemFocus"
173
+ @onMediaSeriesItemFocus="onMediaSeriesItemFocus"
174
+ @onMediaSeriesItemClick="onMediaSeriesItemClick"
175
+ />
176
+ </qt-collapse>
177
+ </qt-view>
178
+ </qt-view>
179
+ <!-- loading -->
180
+ <qt-view
181
+ class="media-player-loading"
182
+ :focusable="false"
183
+ ref="mediaPlayerLoadingRef"
184
+ name="loadingRoot"
185
+ :fillParent="true"
186
+ :visible="showLoading"
187
+ :style="{ width: playerWidth, height: playerHeight }"
188
+ >
189
+ <qt-loading-view :style="{ width: 100, height: 100 }" />
190
+ </qt-view>
191
+ </qt-view>
192
+ </template>
193
+
194
+ <script setup lang="ts" name="MediaPlayerView">
195
+ import { ref, watch, onMounted, nextTick, onUnmounted } from "vue";
196
+ import {
197
+ ESKeyCode,
198
+ ESKeyEvent,
199
+ ESLogLevel,
200
+ toast,
201
+ useESEventBus,
202
+ useESLog,
203
+ } from "@extscreen/es3-core";
204
+ import {
205
+ ESIPlayerManager,
206
+ ESMediaItem,
207
+ ESMediaItemList,
208
+ } from "@extscreen/es3-player-manager";
209
+ import {
210
+ ESPlayerAspectRatio,
211
+ ESPlayerDecode,
212
+ ESPlayerDefinition,
213
+ ESPlayerInterceptError,
214
+ ESPlayerInterceptResult,
215
+ ESPlayerPlayMode,
216
+ ESPlayerRate,
217
+ ESPlayerWindowType,
218
+ } from "@extscreen/es3-player";
219
+ import {
220
+ QTISeekBar,
221
+ QTICollapse,
222
+ QTCollapse,
223
+ QTListViewItem,
224
+ } from "@quicktvui/quicktvui3";
225
+ import {
226
+ IMedia,
227
+ IMediaPlayerViewState,
228
+ IMediaItem,
229
+ IMediaCollapseItemListView,
230
+ IMediaCollapseMediaSeriesView,
231
+ } from "../../adapter/interface";
232
+ import BuildConfig from "../../../../config/build-config";
233
+ import ThemeConfig from "../../../../config/theme-config";
234
+ import { s_to_hs } from "../../../../tools/format-date";
235
+ import {
236
+ buildPlayModeList,
237
+ buildDefinitionList,
238
+ buildPlayRateList,
239
+ buildCollapseMenu,
240
+ getPlayModeIndex,
241
+ getDefinitionIndex,
242
+ getPlayRateIndex,
243
+ } from "../../adapter/media-player";
244
+ import playIcon from "../../../../assets/detail/ic_media_player_play.png";
245
+ import pauseIcon from "../../../../assets/detail/ic_media_player_pause.png";
246
+ import MediaCollapseOrder from "./collapse/media-collapse-order.vue";
247
+ import MediaCollapseSpeed from "./collapse/media-collapse-speed.vue";
248
+ import MediaCollapseDefinition from "./collapse/media-collapse-definition.vue";
249
+ import MediaCollapseMediaSeries from "./collapse/media-collapse-media-series.vue";
250
+
251
+ const TAG = "MediaPlayerView";
252
+ let enabled = true;
253
+ let player: ESIPlayerManager;
254
+ const log = useESLog();
255
+ const eventBus = useESEventBus();
256
+
257
+ let media: IMedia;
258
+ let playingMediaItem: ESMediaItem;
259
+ const playerWidth = ref<number>(0);
260
+ const playerHeight = ref<number>(0);
261
+ const showPlaceholder = ref<boolean>(true);
262
+ const isFullWindow = ref<boolean>(false);
263
+ let showLoading = ref(false);
264
+ const isTitleBarShowing = ref<boolean>(true);
265
+ const mediaTitle = ref<string>("");
266
+ const viewState = ref<number>(1);
267
+ let dismissTimer: any = -1;
268
+ const isMediaAuthError = ref<boolean>(false);
269
+
270
+ //-------------------------进度条----------------------------
271
+ const isProgressShowing = ref<boolean>(false);
272
+ let isPlayerPlaying = ref<boolean>(false);
273
+ const seekBarRef = ref<QTISeekBar>();
274
+ let progress = ref<string>("00:00");
275
+ let duration = ref<string>("00:00");
276
+ seekBarRef.value?.setSeekBarMode(1);
277
+ seekBarRef.value?.setProgressHeight(5);
278
+ seekBarRef.value?.setProgressRadius(100);
279
+ let isSeeking = false;
280
+ let nextButtonFocused = false;
281
+ const mediaSeriesVisible = ref<boolean>(true);
282
+
283
+ //-------------------------菜单----------------------------
284
+ const mediaCollapseMenuInit = ref<boolean>(false);
285
+ const dataMap = new Map<number, Array<IMediaItem>>();
286
+ const mediaListVisible = ref<boolean>(true);
287
+ const mediaCollapseOrderRef = ref<IMediaCollapseItemListView>();
288
+ const mediaCollapseSpeedRef = ref<IMediaCollapseItemListView>();
289
+ const mediaCollapseDefinitionRef = ref<IMediaCollapseItemListView>();
290
+ const mediaCollapseMediaSeriesRef = ref<IMediaCollapseMediaSeriesView>();
291
+ const mediaCollapseRef = ref<QTICollapse>();
292
+ const isMenuShowing = ref<boolean>(false);
293
+ let collapseItemIndex = 0;
294
+ let collapseItemList: any = [];
295
+ let collapse: QTCollapse;
296
+ let mediaListGroupItemFocused = false;
297
+ let playModeList: Array<ESPlayerPlayMode>;
298
+ let playMode: ESPlayerPlayMode;
299
+ let definitionList: Array<ESPlayerDefinition>;
300
+ let definition: ESPlayerDefinition;
301
+ let rateList: Array<ESPlayerRate>;
302
+ let rate: ESPlayerRate;
303
+ let decodeList: Array<ESPlayerDecode>;
304
+
305
+ //------------------进度条 callback-----------------------------------
306
+ const onSeekBarSeekStart = (progress) => {
307
+ isSeeking = true;
308
+ };
309
+ const onSeekBarSeekStop = (progress) => {
310
+ isSeeking = false;
311
+ if (player && progress >= 0) {
312
+ player.seekTo(progress);
313
+ }
314
+ };
315
+ const onSeekbarFocusChanged = () => {};
316
+ const onNextButtonClicked = () => {
317
+ if (player) player.playNextMedia();
318
+ };
319
+ const onNextButtonFocusChanged = (e) => {
320
+ nextButtonFocused = e.isFocused;
321
+ log.e(TAG, "onNextButtonFocusChanged nextButtonFocused" + nextButtonFocused);
322
+ };
323
+ const initSeekBar = () => {
324
+ seekBarRef.value?.setSeekBarMode(1);
325
+ seekBarRef.value?.setProgressHeight(12);
326
+ seekBarRef.value?.setProgressRadius(6);
327
+ seekBarRef.value?.setThumbWidth(60);
328
+ seekBarRef.value?.setThumbHeight(60);
329
+ seekBarRef.value?.setLeftThumbUrl(
330
+ "http://extcdn.hsrc.tv/extend_screen/images/default/ic_1905_thumb.png",
331
+ );
332
+ seekBarRef.value?.setLeftThumbInactivatedDrawable({
333
+ colors: ["#00000000", "#00000000"],
334
+ cornerRadius: 4,
335
+ });
336
+ };
337
+ onMounted(() => {
338
+ initSeekBar();
339
+ eventBus.on("onMediaListItemLoad", onMediaListItemLoad);
340
+ });
341
+ onUnmounted(() => {
342
+ eventBus.off("onMediaListItemLoad", onMediaListItemLoad);
343
+ });
344
+ //--------------------------------菜单----------------------------------
345
+ watch(
346
+ () => [mediaCollapseRef.value] as const,
347
+ ([instance], [oldInstance]) => {
348
+ if (instance) {
349
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
350
+ log.e(TAG, "----watch---initCollapseMenu----->>>>>", oldInstance);
351
+ }
352
+ collapse = buildCollapseMenu(mediaListVisible.value);
353
+ collapseItemIndex = collapse.defaultIndex ?? 0;
354
+ collapseItemList = collapse.itemList;
355
+ mediaCollapseRef.value?.init(collapse);
356
+ initCollapseOrderMenu();
357
+ initCollapseSpeedMenu();
358
+ initCollapseDefinitionMenu();
359
+ initCollapseMediaSeries();
360
+ }
361
+ },
362
+ { flush: "post" },
363
+ );
364
+ const initCollapseMenu = () => {
365
+ mediaCollapseMenuInit.value = true;
366
+ };
367
+ const onMediaListItemLoad = (page: number, mediaList: Array<IMediaItem>) => {
368
+ if (mediaCollapseMenuInit.value) {
369
+ nextTick(() => {
370
+ mediaCollapseMediaSeriesRef.value?.setListData(page - 1, mediaList);
371
+ });
372
+ } else {
373
+ initCollapseMenu();
374
+ dataMap.set(page - 1, mediaList);
375
+ }
376
+ };
377
+ //播放顺序
378
+ const initCollapseOrderMenu = () => {
379
+ if (mediaCollapseMenuInit.value) {
380
+ nextTick(() => {
381
+ if (playModeList && playModeList.length > 0) {
382
+ let data = buildPlayModeList(playModeList);
383
+ if (!mediaListVisible.value) data.pop();
384
+ mediaCollapseOrderRef.value?.setListData(data);
385
+ }
386
+ setCollapseItemOrderSelected();
387
+ });
388
+ }
389
+ };
390
+ const setCollapseItemOrderSelected = () => {
391
+ nextTick(() => {
392
+ if (playModeList) {
393
+ let index = getPlayModeIndex(playMode, playModeList);
394
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
395
+ log.e(
396
+ TAG,
397
+ "-------getPlayModeIndex-------->>>>>",
398
+ playMode,
399
+ playModeList,
400
+ index,
401
+ );
402
+ }
403
+ if (index > -1) {
404
+ if (!mediaListVisible.value) index = 0;
405
+ mediaCollapseOrderRef.value?.setItemSelected(index);
406
+ }
407
+ }
408
+ });
409
+ };
410
+ const onCollapseItemOrderFocused = () => {
411
+ mediaListGroupItemFocused = false;
412
+ };
413
+ const onCollapseItemOrderClicked = (index: number, item: QTListViewItem) => {
414
+ if (playMode == item.mode) return;
415
+ player?.setPlayMediaListMode(item.mode);
416
+ };
417
+ // 清晰度相关
418
+ const initCollapseDefinitionMenu = () => {
419
+ if (mediaCollapseMenuInit.value) {
420
+ nextTick(() => {
421
+ if (definitionList) {
422
+ mediaCollapseDefinitionRef.value?.setListData(
423
+ buildDefinitionList(definitionList),
424
+ );
425
+ }
426
+ setCollapseItemDefinitionSelected();
427
+ });
428
+ }
429
+ };
430
+ const setCollapseItemDefinitionSelected = () => {
431
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
432
+ log.d(
433
+ TAG,
434
+ "-------setCollapseItemDefinitionSelected-----清晰度-->>>>",
435
+ definitionList,
436
+ definition,
437
+ );
438
+ }
439
+ if (definitionList) {
440
+ const index = getDefinitionIndex(definition, definitionList);
441
+ if (index > -1) {
442
+ mediaCollapseDefinitionRef.value?.setItemSelected(index);
443
+ }
444
+ }
445
+ };
446
+ const onCollapseItemDefinitionFocused = () => {
447
+ mediaListGroupItemFocused = false;
448
+ };
449
+ const onCollapseItemDefinitionClicked = (
450
+ index: number,
451
+ item: QTListViewItem,
452
+ ) => {
453
+ if (definition == item.definition) return;
454
+ player?.setDefinition(item.definition);
455
+ };
456
+ // 倍速相关
457
+ const initCollapseSpeedMenu = () => {
458
+ if (mediaCollapseMenuInit.value) {
459
+ nextTick(() => {
460
+ if (rateList) {
461
+ mediaCollapseSpeedRef.value?.setListData(buildPlayRateList(rateList));
462
+ }
463
+ setCollapseItemSpeedSelected();
464
+ });
465
+ }
466
+ };
467
+ const setCollapseItemSpeedSelected = () => {
468
+ if (rateList) {
469
+ const index = getPlayRateIndex(rate, rateList);
470
+ if (index > -1) {
471
+ mediaCollapseSpeedRef.value?.setItemSelected(index);
472
+ }
473
+ }
474
+ };
475
+ const onCollapseItemSpeedFocused = () => {
476
+ mediaListGroupItemFocused = false;
477
+ };
478
+ const onCollapseItemSpeedClicked = (index: number, item: QTListViewItem) => {
479
+ if (rate == item.rate) return;
480
+ player?.setPlayRate(item.rate);
481
+ };
482
+ // 选集相关
483
+ const initCollapseMediaSeries = () => {
484
+ if (mediaCollapseMenuInit.value) {
485
+ nextTick(() => {
486
+ if (media) {
487
+ mediaCollapseMediaSeriesRef.value?.init(media);
488
+ }
489
+ if (dataMap.size > 0) {
490
+ dataMap.forEach(function (mediaList: Array<IMediaItem>, page: number) {
491
+ mediaCollapseMediaSeriesRef.value?.setListData(page, mediaList);
492
+ });
493
+ dataMap.clear();
494
+ }
495
+ setCollapseItemMediaListSelected();
496
+ });
497
+ }
498
+ };
499
+ const setCollapseItemMediaListSelected = () => {
500
+ if (playingMediaItem) {
501
+ const index = playingMediaItem.index;
502
+ if (index > -1) {
503
+ mediaCollapseMediaSeriesRef.value?.setItemSelected(index);
504
+ }
505
+ }
506
+ };
507
+ const onMediaSeriesGroupItemFocus = (index: number) => {
508
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
509
+ log.e(TAG, "---选集----onMediaSeriesGroupItemFocus------>>>>>", index);
510
+ }
511
+ mediaListGroupItemFocused = true;
512
+ };
513
+ const onMediaSeriesItemFocus = (index: number) => {
514
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
515
+ log.e(TAG, "----选集---onMediaSeriesItemFocus------>>>>>", index);
516
+ }
517
+ mediaListGroupItemFocused = false;
518
+ };
519
+ const onMediaSeriesItemClick = (index: number, item: QTListViewItem) => {
520
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
521
+ log.e(TAG, "-------onMediaSeriesItemClick------>>>>>", index, item);
522
+ }
523
+ player?.stop();
524
+ player?.playMediaById(item.id);
525
+ };
526
+ //************************播放器************************
527
+ const isPlayerViewStateMenu = () => {
528
+ return IMediaPlayerViewState.MEDIA_PLAYER_VIEW_STATE_MENU === viewState.value;
529
+ };
530
+ const isPlayerViewStateDismiss = () => {
531
+ return (
532
+ IMediaPlayerViewState.MEDIA_PLAYER_VIEW_STATE_DISMISS === viewState.value
533
+ );
534
+ };
535
+ const isPlayerViewStateProgress = () => {
536
+ return (
537
+ IMediaPlayerViewState.MEDIA_PLAYER_VIEW_STATE_PROGRESS === viewState.value
538
+ );
539
+ };
540
+ const setPlayerViewStateDismiss = () => {
541
+ const lastViewState = viewState.value;
542
+ viewState.value = IMediaPlayerViewState.MEDIA_PLAYER_VIEW_STATE_DISMISS;
543
+ initPlayerViewState(lastViewState);
544
+ };
545
+ const setPlayerViewStateProgress = () => {
546
+ const lastViewState = viewState.value;
547
+ viewState.value = IMediaPlayerViewState.MEDIA_PLAYER_VIEW_STATE_PROGRESS;
548
+ initPlayerViewState(lastViewState);
549
+ };
550
+ function setPlayerViewStateDismissDelay(delay: number) {
551
+ clearTimeout(dismissTimer);
552
+ dismissTimer = setTimeout(() => {
553
+ setPlayerViewStateDismiss();
554
+ }, delay);
555
+ }
556
+ const initPlayerViewState = (lastViewState: number) => {
557
+ switch (viewState.value) {
558
+ case IMediaPlayerViewState.MEDIA_PLAYER_VIEW_STATE_DISMISS:
559
+ isTitleBarShowing.value = false;
560
+ isMenuShowing.value = false;
561
+ isProgressShowing.value = false;
562
+ mediaListGroupItemFocused = false;
563
+ if (lastViewState == IMediaPlayerViewState.MEDIA_PLAYER_VIEW_STATE_MENU) {
564
+ mediaCollapseRef.value?.collapse();
565
+ collapseItemIndex = collapse.defaultIndex ?? 0;
566
+ }
567
+ break;
568
+ case IMediaPlayerViewState.MEDIA_PLAYER_VIEW_STATE_MENU:
569
+ isMenuShowing.value = true;
570
+ isProgressShowing.value = false;
571
+ if (!mediaCollapseMenuInit.value) {
572
+ initCollapseMenu();
573
+ }
574
+ mediaCollapseRef.value?.expandItem(collapseItemIndex);
575
+ break;
576
+ case IMediaPlayerViewState.MEDIA_PLAYER_VIEW_STATE_PROGRESS:
577
+ isMenuShowing.value = false;
578
+ isTitleBarShowing.value = true;
579
+ isProgressShowing.value = true;
580
+ mediaListGroupItemFocused = false;
581
+ if (lastViewState == IMediaPlayerViewState.MEDIA_PLAYER_VIEW_STATE_MENU) {
582
+ mediaCollapseRef.value?.collapse();
583
+ collapseItemIndex = collapse.defaultIndex ?? 0;
584
+ }
585
+ break;
586
+ }
587
+ if (
588
+ viewState.value !== IMediaPlayerViewState.MEDIA_PLAYER_VIEW_STATE_DISMISS
589
+ ) {
590
+ setPlayerViewStateDismissDelay(5000);
591
+ }
592
+ };
593
+ const setPlayerViewStateMenu = () => {
594
+ const lastViewState = viewState.value;
595
+ viewState.value = IMediaPlayerViewState.MEDIA_PLAYER_VIEW_STATE_MENU;
596
+ initPlayerViewState(lastViewState);
597
+ };
598
+ const getId = (): string => {
599
+ return "MediaPlayerSmallView";
600
+ };
601
+ const setEnabled = (value: boolean): void => {
602
+ enabled = value;
603
+ };
604
+ const isEnabled = (): boolean => {
605
+ return enabled;
606
+ };
607
+ const setPlayerManager = (value: ESIPlayerManager): void => {
608
+ player = value;
609
+ };
610
+ const getPlayerManager = (): ESIPlayerManager => {
611
+ return player;
612
+ };
613
+
614
+ const onPlayerInterceptSuccess = (value: ESPlayerInterceptResult): void => {
615
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
616
+ log.e(TAG, "-------onPlayerInterceptSuccess----ccc---->>>>>", value);
617
+ }
618
+ isMediaAuthError.value = false;
619
+ };
620
+ const onPlayerInterceptError = (value: ESPlayerInterceptError): void => {
621
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
622
+ log.e(TAG, "-------onPlayerInterceptError----ccc---->>>>>", value);
623
+ }
624
+ isMediaAuthError.value = true;
625
+ };
626
+ const onPlayerPrepared = (): void => {
627
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
628
+ log.e(TAG, "-------onPlayerPrepared-------->>>>>");
629
+ }
630
+ };
631
+ const onPlayerBufferStart = (): void => {
632
+ showLoading.value = true;
633
+ };
634
+ const onPlayerBufferEnd = (): void => {
635
+ showLoading.value = false;
636
+ };
637
+ const onPlayerPlaying = (): void => {
638
+ isPlayerPlaying.value = true;
639
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
640
+ log.e(TAG, "-------onPlayerPlaying-------->>>>>");
641
+ }
642
+ showLoading.value = false;
643
+ };
644
+ const onPlayerProgressChanged = (p: number): void => {
645
+ if (isSeeking) {
646
+ return;
647
+ }
648
+ seekBarRef.value?.setProgress(p);
649
+ progress.value = s_to_hs(Math.floor(p / 1000));
650
+ };
651
+ const onPlayerDurationChanged = (d: number): void => {
652
+ if (isSeeking) {
653
+ return;
654
+ }
655
+ seekBarRef.value?.setMaxProgress(d);
656
+ duration.value = s_to_hs(Math.floor(d / 1000));
657
+ };
658
+ const onPlayerPaused = (): void => {
659
+ isPlayerPlaying.value = false;
660
+ };
661
+ const onPlayerDefinitionListChanged = (
662
+ list: Array<ESPlayerDefinition>,
663
+ ): void => {
664
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
665
+ log.e(TAG, "-------onPlayerDefinitionListChanged-----清晰度--->>>>>", list);
666
+ }
667
+ definitionList = list;
668
+ initCollapseDefinitionMenu();
669
+ };
670
+ const onPlayerDefinitionChanged = (d: ESPlayerDefinition): void => {
671
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
672
+ log.e(TAG, "-------onPlayerDefinitionChanged-----清晰度--->>>>>", d);
673
+ }
674
+ definition = d;
675
+ setCollapseItemDefinitionSelected();
676
+ };
677
+ const onPlayerPlayRateListChanged = (list: Array<ESPlayerRate>): void => {
678
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
679
+ log.e(TAG, "-------onPlayerPlayRateListChanged-------->>>>>", list);
680
+ }
681
+ rateList = BuildConfig.isLowEndDev ? [ESPlayerRate.ES_PLAYER_RATE_1] : list;
682
+ initCollapseSpeedMenu();
683
+ };
684
+ const onPlayerPlayRateChanged = (r: ESPlayerRate): void => {
685
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
686
+ log.e(TAG, "-------onPlayerPlayRateChanged-------->>>>>", r);
687
+ }
688
+ rate = r;
689
+ setCollapseItemSpeedSelected();
690
+ };
691
+ const onPlayerDecodeListChanged = (list: Array<ESPlayerDecode>): void => {
692
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
693
+ log.e(TAG, "-------onPlayerDecodeListChanged-------->>>>>", list);
694
+ }
695
+ decodeList = list;
696
+ };
697
+ const onPlayerDecodeChanged = (d: ESPlayerDecode): void => {
698
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
699
+ log.e(TAG, "-------onPlayerDecodeChanged-------->>>>>", d);
700
+ }
701
+ };
702
+ const onPlayerAspectRatioListChanged = (
703
+ list: Array<ESPlayerAspectRatio>,
704
+ ): void => {
705
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
706
+ log.e(TAG, "-------onPlayerAspectRatioListChanged-------->>>>>", list);
707
+ }
708
+ };
709
+ const onPlayerAspectRatioChanged = (a: ESPlayerAspectRatio): void => {
710
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
711
+ log.e(TAG, "-------onPlayerAspectRatioChanged-------->>>>>", a);
712
+ }
713
+ };
714
+ const onPlayerPlayMediaListModeListChanged = (
715
+ modeList: Array<ESPlayerPlayMode>,
716
+ ): void => {
717
+ const filterModeList: Array<any> = [];
718
+ if (modeList && modeList.length) {
719
+ for (let i = 0; i < modeList.length; i++) {
720
+ let mode: ESPlayerPlayMode = modeList[i];
721
+ if (
722
+ mode == ESPlayerPlayMode.ES_PLAYER_PLAY_MODE_REPEAT ||
723
+ mode == ESPlayerPlayMode.ES_PLAYER_PLAY_MODE_LOOP
724
+ ) {
725
+ filterModeList.push(mode);
726
+ }
727
+ }
728
+ }
729
+ playModeList = filterModeList;
730
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
731
+ log.e(TAG, "-------onPlayerPlayModeListChanged-------->>>>>", modeList);
732
+ }
733
+ if (mediaListVisible.value) initCollapseOrderMenu();
734
+ };
735
+ const onPlayerPlayMediaListModeChanged = (mode: ESPlayerPlayMode): void => {
736
+ playMode = mode;
737
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
738
+ log.e(TAG, "-------onPlayerPlayModeChanged-------->>>>>", mode);
739
+ }
740
+ setCollapseItemOrderSelected();
741
+ };
742
+ const onPlayerPlayMediaList = (playList: ESMediaItemList): void => {
743
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
744
+ log.d(TAG, "-----------onPlayerPlayMediaList------------->>>>", playList);
745
+ }
746
+ media = playList.media;
747
+ mediaListVisible.value = media.itemList.enable;
748
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
749
+ log.d(
750
+ TAG,
751
+ "-----------onPlayerPlayMediaList------------->>>>",
752
+ mediaListVisible.value,
753
+ media.itemList.enable,
754
+ );
755
+ }
756
+ };
757
+ const onPlayerPlayMedia = (mediaItem: ESMediaItem): void => {
758
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
759
+ log.d(TAG, "-----------onPlayerPlayMedia------------->>>>", mediaItem);
760
+ }
761
+ playingMediaItem = mediaItem;
762
+ if (mediaItem) {
763
+ mediaTitle.value = mediaItem.title;
764
+ }
765
+ showLoading.value = false;
766
+ setCollapseItemMediaListSelected();
767
+ };
768
+ const onPlayerNoMediaCanPlay = (): void => {};
769
+ const onPlayerWindowTypeChanged = (windowType: ESPlayerWindowType): void => {
770
+ showPlaceholder.value =
771
+ windowType == ESPlayerWindowType.ES_PLAYER_WINDOW_TYPE_SMALL;
772
+ isFullWindow.value =
773
+ windowType == ESPlayerWindowType.ES_PLAYER_WINDOW_TYPE_FULL;
774
+ switch (windowType) {
775
+ case ESPlayerWindowType.ES_PLAYER_WINDOW_TYPE_FLOAT:
776
+ break;
777
+ case ESPlayerWindowType.ES_PLAYER_WINDOW_TYPE_SMALL:
778
+ break;
779
+ case ESPlayerWindowType.ES_PLAYER_WINDOW_TYPE_FULL:
780
+ initPlayerViewState(1);
781
+ break;
782
+ }
783
+ };
784
+ const onPlayerWindowSizeChanged = (width: number, height: number): void => {
785
+ playerWidth.value = width;
786
+ playerHeight.value = height;
787
+ };
788
+ const onPlayerRelease = (): void => {
789
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
790
+ log.d(TAG, "-----------onPlayerRelease------------->>>>");
791
+ }
792
+ mediaCollapseMediaSeriesRef.value?.release();
793
+ mediaCollapseMenuInit.value = false;
794
+ };
795
+ const onPlayerReset = (): void => {
796
+ if (log.isLoggable(ESLogLevel.DEBUG)) {
797
+ log.d(TAG, "-----------onPlayerReset------------->>>>");
798
+ }
799
+ };
800
+ const onKeyDown = (keyEvent: ESKeyEvent): boolean => {
801
+ if (player.getWindowType() != ESPlayerWindowType.ES_PLAYER_WINDOW_TYPE_FULL) {
802
+ return false;
803
+ }
804
+ switch (keyEvent.keyCode) {
805
+ case ESKeyCode.ES_KEYCODE_DPAD_CENTER:
806
+ case ESKeyCode.ES_KEYCODE_ENTER:
807
+ if (isPlayerViewStateDismiss()) {
808
+ setPlayerViewStateProgress();
809
+ }
810
+ if (isPlayerViewStateProgress()) {
811
+ if (isPlayerPlaying.value) {
812
+ player.pause();
813
+ isPlayerPlaying.value = false;
814
+ } else {
815
+ player.start(0);
816
+ isPlayerPlaying.value = true;
817
+ }
818
+ return true;
819
+ }
820
+ case ESKeyCode.ES_KEYCODE_DPAD_LEFT:
821
+ case ESKeyCode.ES_KEYCODE_DPAD_RIGHT:
822
+ if (isPlayerViewStateDismiss()) {
823
+ setPlayerViewStateProgress();
824
+ return true;
825
+ }
826
+ if (isPlayerViewStateProgress()) {
827
+ if (isPlayerViewStateProgress() && seekBarRef.value?.isFocused()) {
828
+ seekBarRef.value?.startSeek(
829
+ keyEvent.keyCode === ESKeyCode.ES_KEYCODE_DPAD_RIGHT,
830
+ );
831
+ }
832
+ return true;
833
+ }
834
+ break;
835
+ case ESKeyCode.ES_KEYCODE_MENU:
836
+ if (!isPlayerViewStateMenu()) {
837
+ setPlayerViewStateMenu();
838
+ return true;
839
+ }
840
+ break;
841
+ case ESKeyCode.ES_KEYCODE_DPAD_UP:
842
+ if (isPlayerViewStateMenu()) {
843
+ if (!mediaListGroupItemFocused) {
844
+ if (collapseItemIndex - 1 >= 0) {
845
+ collapseItemIndex--;
846
+ mediaCollapseRef.value?.expandItem(collapseItemIndex);
847
+ }
848
+ }
849
+ }
850
+
851
+ break;
852
+ case ESKeyCode.ES_KEYCODE_DPAD_DOWN:
853
+ if (nextButtonFocused) {
854
+ if (!isPlayerViewStateMenu()) {
855
+ setPlayerViewStateMenu();
856
+ nextButtonFocused = false;
857
+ return true;
858
+ }
859
+ return true;
860
+ }
861
+ if (isPlayerViewStateDismiss()) {
862
+ setPlayerViewStateMenu();
863
+ return true;
864
+ }
865
+ if (isPlayerViewStateMenu()) {
866
+ if (collapseItemIndex + 1 < collapseItemList.length) {
867
+ collapseItemIndex++;
868
+ mediaCollapseRef.value?.expandItem(collapseItemIndex);
869
+ }
870
+ }
871
+ break;
872
+ }
873
+ return true;
874
+ };
875
+ const onKeyUp = (keyEvent: ESKeyEvent): boolean => {
876
+ if (player.getWindowType() != ESPlayerWindowType.ES_PLAYER_WINDOW_TYPE_FULL) {
877
+ return false;
878
+ }
879
+ setPlayerViewStateDismissDelay(5000);
880
+ switch (keyEvent.keyCode) {
881
+ case ESKeyCode.ES_KEYCODE_DPAD_LEFT:
882
+ case ESKeyCode.ES_KEYCODE_DPAD_RIGHT:
883
+ if (isPlayerViewStateProgress() && seekBarRef.value?.isFocused()) {
884
+ seekBarRef.value?.stopSeek();
885
+ }
886
+ isSeeking = false;
887
+ return true;
888
+ }
889
+ return true;
890
+ };
891
+ const onBackPressed = (): boolean => {
892
+ if (player.getWindowType() != ESPlayerWindowType.ES_PLAYER_WINDOW_TYPE_FULL) {
893
+ return false;
894
+ }
895
+ if (
896
+ isMediaAuthError.value &&
897
+ player.getWindowType() == ESPlayerWindowType.ES_PLAYER_WINDOW_TYPE_FULL
898
+ ) {
899
+ player.setSmallWindow();
900
+ return true;
901
+ }
902
+ if (!isPlayerPlaying.value) {
903
+ isPlayerPlaying.value = true;
904
+ player.start(0);
905
+ return true;
906
+ }
907
+ if (isPlayerViewStateMenu() || isPlayerViewStateProgress()) {
908
+ setPlayerViewStateDismiss();
909
+ return true;
910
+ }
911
+ if (
912
+ player &&
913
+ player.getWindowType() == ESPlayerWindowType.ES_PLAYER_WINDOW_TYPE_FULL
914
+ ) {
915
+ player.setSmallWindow();
916
+ return true;
917
+ }
918
+ return false;
919
+ };
920
+
921
+ defineExpose({
922
+ showPlaceholder,
923
+ isFullWindow,
924
+ getId,
925
+ setEnabled,
926
+ isEnabled,
927
+ setPlayerManager,
928
+ getPlayerManager,
929
+ onPlayerInterceptSuccess,
930
+ onPlayerInterceptError,
931
+ onPlayerPrepared,
932
+ onPlayerBufferStart,
933
+ onPlayerBufferEnd,
934
+ onPlayerPlaying,
935
+ onPlayerProgressChanged,
936
+ onPlayerDurationChanged,
937
+ onPlayerPaused,
938
+ onPlayerDefinitionListChanged,
939
+ onPlayerDefinitionChanged,
940
+ onPlayerPlayRateListChanged,
941
+ onPlayerPlayRateChanged,
942
+ onPlayerDecodeListChanged,
943
+ onPlayerDecodeChanged,
944
+ onPlayerAspectRatioListChanged,
945
+ onPlayerAspectRatioChanged,
946
+ onPlayerPlayMediaListModeListChanged,
947
+ onPlayerPlayMediaListModeChanged,
948
+ onPlayerPlayMediaList,
949
+ onPlayerPlayMedia,
950
+ onPlayerNoMediaCanPlay,
951
+ onPlayerWindowTypeChanged,
952
+ onPlayerWindowSizeChanged,
953
+ onPlayerRelease,
954
+ onPlayerReset,
955
+ onKeyDown,
956
+ onKeyUp,
957
+ onBackPressed,
958
+ });
959
+ </script>
960
+
961
+ <style lang="scss" scoped>
962
+ .media-player-view-root {
963
+ background-color: transparent;
964
+ .media-player-view {
965
+ width: 1920px;
966
+ height: 1080px;
967
+ background-color: transparent;
968
+ //顶部条
969
+ .media-player-view-title {
970
+ background-color: transparent;
971
+ .media-player-view-title-text {
972
+ width: 1740px;
973
+ height: 50px;
974
+ font-size: 44px;
975
+ font-weight: 400;
976
+ color: white;
977
+ margin-left: 90px;
978
+ margin-top: 50px;
979
+ }
980
+ }
981
+ //底部进度条
982
+ .media-player-view-bottom {
983
+ width: 1920px;
984
+ height: 700px;
985
+ background-color: transparent;
986
+ position: absolute;
987
+ bottom: 0;
988
+ left: 0;
989
+ align-items: flex-start;
990
+ justify-content: flex-end;
991
+ .media-player-view-bottom-bg {
992
+ width: 1920px;
993
+ height: 700px;
994
+ background-color: transparent;
995
+ position: absolute;
996
+ bottom: 0;
997
+ left: 0;
998
+ }
999
+ //进度条
1000
+ .media-player-view-state-progress {
1001
+ align-items: flex-start;
1002
+ justify-content: flex-end;
1003
+ background-color: transparent;
1004
+ .media-player-view-img {
1005
+ width: 80px;
1006
+ height: 80px;
1007
+ margin-left: 90px;
1008
+ margin-bottom: 14px;
1009
+ > img {
1010
+ position: absolute;
1011
+ width: 80px;
1012
+ height: 80px;
1013
+ }
1014
+ }
1015
+ .media-player-view-progress {
1016
+ width: 1740px;
1017
+ height: 60px;
1018
+ display: flex;
1019
+ align-items: center;
1020
+ justify-content: center;
1021
+ margin-bottom: 25px;
1022
+ margin-left: 90px;
1023
+ .media-player-view-progress-text {
1024
+ width: 100px;
1025
+ height: 60px;
1026
+ font-size: 30px;
1027
+ font-weight: 400;
1028
+ color: white;
1029
+ }
1030
+ .media-player-view-seekbar {
1031
+ width: 1512px;
1032
+ height: 60px;
1033
+ margin-left: 20px;
1034
+ margin-right: 20px;
1035
+ }
1036
+ }
1037
+ .media-player-view-next {
1038
+ width: 130px;
1039
+ height: 60px;
1040
+ margin-left: 90px;
1041
+ margin-bottom: 40px;
1042
+ background-color: rgba(255, 255, 255, 0.2);
1043
+ border-radius: 8px;
1044
+ display: flex;
1045
+ align-items: center;
1046
+ justify-content: center;
1047
+ focus-background-color: #fff5f5f5;
1048
+ .media-player-view-next-text-focus {
1049
+ width: 130px;
1050
+ height: 60px;
1051
+ background-color: transparent;
1052
+ border-radius: 8px;
1053
+ position: absolute;
1054
+ }
1055
+ .media-player-view-next-text {
1056
+ width: 130px;
1057
+ height: 60px;
1058
+ font-size: 30px;
1059
+ font-weight: 400;
1060
+ color: white;
1061
+ focus-color: #000;
1062
+ }
1063
+ }
1064
+ }
1065
+ }
1066
+ //底部菜单
1067
+ .media-player-view-menu {
1068
+ width: 1920px;
1069
+ height: 700px;
1070
+ background-color: transparent;
1071
+ position: absolute;
1072
+ bottom: 0;
1073
+ left: 0;
1074
+ align-items: flex-start;
1075
+ justify-content: flex-end;
1076
+ .media-player-view-menu-bg {
1077
+ width: 1920px;
1078
+ height: 640px;
1079
+ position: absolute;
1080
+ left: 0;
1081
+ background-color: transparent;
1082
+ }
1083
+ .media-player-collapse {
1084
+ width: 1920px;
1085
+ height: 640px;
1086
+ position: absolute;
1087
+ left: 0;
1088
+ background-color: transparent;
1089
+ }
1090
+ }
1091
+ }
1092
+ .media-player-loading {
1093
+ background-color: transparent;
1094
+ position: absolute;
1095
+ align-items: center;
1096
+ justify-content: center;
1097
+ }
1098
+ }
1099
+ </style>