@quicktvui/ai 1.0.9 → 1.1.1

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 (348) hide show
  1. package/README.md +31 -0
  2. package/USAGE.md +22 -7
  3. package/package.json +1 -1
  4. package/rules/.clinerules +1 -0
  5. package/rules/.cursorrules +1 -0
  6. package/rules/.docs/zh-CN/guide/ai/ai-assistant.md +16 -6
  7. package/rules/.github/copilot-instructions.md +1 -0
  8. package/rules/.source/hellotv/PROJECT-README.md +52 -0
  9. package/rules/.source/hellotv/app.d.ts +11 -0
  10. package/rules/.source/hellotv/package.json +146 -0
  11. package/rules/.source/hellotv/scripts/build-apk.ts +12 -0
  12. package/rules/.source/hellotv/scripts/build.ts +35 -0
  13. package/rules/.source/hellotv/scripts/dev.ts +12 -0
  14. package/rules/.source/hellotv/scripts/pack.ts +24 -0
  15. package/rules/.source/hellotv/scripts/process.ts +37 -0
  16. package/rules/.source/hellotv/scripts/quicktvui-webpack.android.ts +187 -0
  17. package/rules/.source/hellotv/scripts/quicktvui-webpack.dev.ts +147 -0
  18. package/rules/.source/hellotv/scripts/webpack-watch.ts +24 -0
  19. package/rules/.source/hellotv/src/App.vue +192 -0
  20. package/rules/.source/hellotv/src/api/my/index.ts +198 -0
  21. package/rules/.source/hellotv/src/api/user/impl-user.ts +52 -0
  22. package/rules/.source/hellotv/src/api/user/qr-code-mock.ts +2 -0
  23. package/rules/.source/hellotv/src/api/user/request-url.ts +11 -0
  24. package/rules/.source/hellotv/src/api/user/user-manager.ts +258 -0
  25. package/rules/.source/hellotv/src/app.scss +8 -0
  26. package/rules/.source/hellotv/src/assets/component-media/ic_media_btn_pause.png +0 -0
  27. package/rules/.source/hellotv/src/assets/component-media/ic_media_btn_play.png +0 -0
  28. package/rules/.source/hellotv/src/assets/component-media/ic_media_menu_setting_focused.png +0 -0
  29. package/rules/.source/hellotv/src/assets/component-media/ic_media_menu_setting_normal.png +0 -0
  30. package/rules/.source/hellotv/src/assets/component-media/ic_media_menu_xuanji_focused.png +0 -0
  31. package/rules/.source/hellotv/src/assets/component-media/ic_media_menu_xuanji_normal.png +0 -0
  32. package/rules/.source/hellotv/src/assets/component-media/ic_media_ok_focused.png +0 -0
  33. package/rules/.source/hellotv/src/assets/component-media/ic_media_ok_selected.png +0 -0
  34. package/rules/.source/hellotv/src/assets/detail/ic_collect_focused.png +0 -0
  35. package/rules/.source/hellotv/src/assets/detail/ic_collect_normal.png +0 -0
  36. package/rules/.source/hellotv/src/assets/detail/ic_full_focused.png +0 -0
  37. package/rules/.source/hellotv/src/assets/detail/ic_full_normal.png +0 -0
  38. package/rules/.source/hellotv/src/assets/detail/ic_info_focused.png +0 -0
  39. package/rules/.source/hellotv/src/assets/detail/ic_info_normal.png +0 -0
  40. package/rules/.source/hellotv/src/assets/detail/ic_introduction_bg.png +0 -0
  41. package/rules/.source/hellotv/src/assets/detail/ic_media_list_item_normal.png +0 -0
  42. package/rules/.source/hellotv/src/assets/detail/ic_media_list_item_selected.png +0 -0
  43. package/rules/.source/hellotv/src/assets/detail/ic_media_player_pause.png +0 -0
  44. package/rules/.source/hellotv/src/assets/detail/ic_media_player_placeholder.png +0 -0
  45. package/rules/.source/hellotv/src/assets/detail/ic_media_player_play.png +0 -0
  46. package/rules/.source/hellotv/src/assets/detail/ic_vip_focused.png +0 -0
  47. package/rules/.source/hellotv/src/assets/detail/ic_vip_normal.png +0 -0
  48. package/rules/.source/hellotv/src/assets/detail/skeleton.png +0 -0
  49. package/rules/.source/hellotv/src/assets/filter/ic_empty.png +0 -0
  50. package/rules/.source/hellotv/src/assets/filter/ic_filter_focused.png +0 -0
  51. package/rules/.source/hellotv/src/assets/filter/ic_filter_normal.png +0 -0
  52. package/rules/.source/hellotv/src/assets/filter/ic_filter_selected.png +0 -0
  53. package/rules/.source/hellotv/src/assets/filter/ic_left_focused.png +0 -0
  54. package/rules/.source/hellotv/src/assets/filter/ic_left_normal.png +0 -0
  55. package/rules/.source/hellotv/src/assets/filter/ic_left_selected.png +0 -0
  56. package/rules/.source/hellotv/src/assets/history/ic_delete.png +0 -0
  57. package/rules/.source/hellotv/src/assets/history/ic_empty.png +0 -0
  58. package/rules/.source/hellotv/src/assets/home/bg_history_item.png +0 -0
  59. package/rules/.source/hellotv/src/assets/home/bg_shadow.png +0 -0
  60. package/rules/.source/hellotv/src/assets/home/ic_4k_logo.png +0 -0
  61. package/rules/.source/hellotv/src/assets/home/ic_4k_play_focused.png +0 -0
  62. package/rules/.source/hellotv/src/assets/home/ic_4k_subtitle_normal.png +0 -0
  63. package/rules/.source/hellotv/src/assets/home/ic_arrow_focused.png +0 -0
  64. package/rules/.source/hellotv/src/assets/home/ic_arrow_normal.png +0 -0
  65. package/rules/.source/hellotv/src/assets/home/ic_exit_corner.png +0 -0
  66. package/rules/.source/hellotv/src/assets/home/ic_exit_header.png +0 -0
  67. package/rules/.source/hellotv/src/assets/home/ic_play.png +0 -0
  68. package/rules/.source/hellotv/src/assets/live/bg-error.png +0 -0
  69. package/rules/.source/hellotv/src/assets/live/bg-play-info.png +0 -0
  70. package/rules/.source/hellotv/src/assets/live/ic-arrow-left.png +0 -0
  71. package/rules/.source/hellotv/src/assets/live/ic-arrow-right.png +0 -0
  72. package/rules/.source/hellotv/src/assets/live/ic-back.png +0 -0
  73. package/rules/.source/hellotv/src/assets/live/ic-change.png +0 -0
  74. package/rules/.source/hellotv/src/assets/live/ic-corner-vip-tips.png +0 -0
  75. package/rules/.source/hellotv/src/assets/live/ic-corner-vip.png +0 -0
  76. package/rules/.source/hellotv/src/assets/live/ic-key.png +0 -0
  77. package/rules/.source/hellotv/src/assets/live/ic-loading-error.png +0 -0
  78. package/rules/.source/hellotv/src/assets/live/ic-menu-ext-arrow.png +0 -0
  79. package/rules/.source/hellotv/src/assets/live/ic-menu-ext.png +0 -0
  80. package/rules/.source/hellotv/src/assets/live/ic-menu.png +0 -0
  81. package/rules/.source/hellotv/src/assets/live/ic-mine.png +0 -0
  82. package/rules/.source/hellotv/src/assets/live/ic-network-error.png +0 -0
  83. package/rules/.source/hellotv/src/assets/live/ic-ok.png +0 -0
  84. package/rules/.source/hellotv/src/assets/live/ic-playing.png +0 -0
  85. package/rules/.source/hellotv/src/assets/live/ic-playing2.png +0 -0
  86. package/rules/.source/hellotv/src/assets/live/ic-playing3.png +0 -0
  87. package/rules/.source/hellotv/src/assets/live/ic-service.png +0 -0
  88. package/rules/.source/hellotv/src/assets/live/ic_live_broadcast.png +0 -0
  89. package/rules/.source/hellotv/src/assets/live/ic_live_broadcast_focused.png +0 -0
  90. package/rules/.source/hellotv/src/assets/my/ic_collect_focus.png +0 -0
  91. package/rules/.source/hellotv/src/assets/my/ic_collect_normal.png +0 -0
  92. package/rules/.source/hellotv/src/assets/my/ic_order_focus.png +0 -0
  93. package/rules/.source/hellotv/src/assets/my/ic_order_normal.png +0 -0
  94. package/rules/.source/hellotv/src/assets/my/ic_record_focus.png +0 -0
  95. package/rules/.source/hellotv/src/assets/my/ic_record_normal.png +0 -0
  96. package/rules/.source/hellotv/src/assets/my/ic_user.png +0 -0
  97. package/rules/.source/hellotv/src/assets/my/ic_vip_normal.png +0 -0
  98. package/rules/.source/hellotv/src/assets/search/ic_back.png +0 -0
  99. package/rules/.source/hellotv/src/assets/search/ic_back_focused.png +0 -0
  100. package/rules/.source/hellotv/src/assets/search/ic_clear.png +0 -0
  101. package/rules/.source/hellotv/src/assets/search/ic_clear_dark.png +0 -0
  102. package/rules/.source/hellotv/src/assets/search/ic_clear_focused.png +0 -0
  103. package/rules/.source/hellotv/src/assets/search/ic_search.png +0 -0
  104. package/rules/.source/hellotv/src/assets/top-view/ic_logo.png +0 -0
  105. package/rules/.source/hellotv/src/assets/top-view/ic_top_search_focused.png +0 -0
  106. package/rules/.source/hellotv/src/assets/top-view/ic_top_search_normal.png +0 -0
  107. package/rules/.source/hellotv/src/assets/top-view/ic_top_user_focused.png +0 -0
  108. package/rules/.source/hellotv/src/assets/top-view/ic_top_user_normal.png +0 -0
  109. package/rules/.source/hellotv/src/components/bg-animation.scss +14 -0
  110. package/rules/.source/hellotv/src/components/bg-animation.vue +176 -0
  111. package/rules/.source/hellotv/src/components/btn-pack-view.vue +172 -0
  112. package/rules/.source/hellotv/src/components/btn-pack.scss +53 -0
  113. package/rules/.source/hellotv/src/components/grid-item-horizontal.vue +203 -0
  114. package/rules/.source/hellotv/src/components/grid-item-vertical.vue +201 -0
  115. package/rules/.source/hellotv/src/components/media/build-data/media-config.ts +4 -0
  116. package/rules/.source/hellotv/src/components/media/build-data/media-control-adapter.ts +378 -0
  117. package/rules/.source/hellotv/src/components/media/build-data/media-imp.ts +44 -0
  118. package/rules/.source/hellotv/src/components/media/view/media-loading-component.vue +50 -0
  119. package/rules/.source/hellotv/src/components/media/view/media-loading-view.vue +154 -0
  120. package/rules/.source/hellotv/src/components/media/view/media-manager-view.vue +931 -0
  121. package/rules/.source/hellotv/src/components/media/view/media-menu-detail-item.vue +42 -0
  122. package/rules/.source/hellotv/src/components/media/view/media-menu-detail-view.vue +109 -0
  123. package/rules/.source/hellotv/src/components/media/view/media-menu-icon-item.vue +43 -0
  124. package/rules/.source/hellotv/src/components/media/view/media-menu-text-item.vue +27 -0
  125. package/rules/.source/hellotv/src/components/media/view/media-menu-view.vue +88 -0
  126. package/rules/.source/hellotv/src/components/media/view/media-player-view.vue +408 -0
  127. package/rules/.source/hellotv/src/components/media/view/scss/media-loading.scss +51 -0
  128. package/rules/.source/hellotv/src/components/media/view/scss/media-manager.scss +79 -0
  129. package/rules/.source/hellotv/src/components/media/view/scss/media-menu.scss +114 -0
  130. package/rules/.source/hellotv/src/components/media/view/scss/media-player.scss +6 -0
  131. package/rules/.source/hellotv/src/components/qt-tabs-component.ts +268 -0
  132. package/rules/.source/hellotv/src/components/qt-ul-component.ts +792 -0
  133. package/rules/.source/hellotv/src/components/top-view.scss +38 -0
  134. package/rules/.source/hellotv/src/components/top-view.vue +114 -0
  135. package/rules/.source/hellotv/src/config/README.md +22 -0
  136. package/rules/.source/hellotv/src/config/build-config.ts +22 -0
  137. package/rules/.source/hellotv/src/config/private-theme-config.ts +21 -0
  138. package/rules/.source/hellotv/src/config/public-config.scss +16 -0
  139. package/rules/.source/hellotv/src/config/test.scss +45 -0
  140. package/rules/.source/hellotv/src/config/theme-config.ts +51 -0
  141. package/rules/.source/hellotv/src/main.ts +45 -0
  142. package/rules/.source/hellotv/src/pages/activity/adapter/config.ts +37 -0
  143. package/rules/.source/hellotv/src/pages/activity/adapter/index.ts +849 -0
  144. package/rules/.source/hellotv/src/pages/activity/adapter/interface.ts +173 -0
  145. package/rules/.source/hellotv/src/pages/activity/api/index.ts +36 -0
  146. package/rules/.source/hellotv/src/pages/activity/api/interface.ts +11 -0
  147. package/rules/.source/hellotv/src/pages/activity/api/request-url.ts +10 -0
  148. package/rules/.source/hellotv/src/pages/activity/components/item/focus-change-img-item.vue +40 -0
  149. package/rules/.source/hellotv/src/pages/activity/components/item/inner-out-title-item.vue +59 -0
  150. package/rules/.source/hellotv/src/pages/activity/components/item/no-title-item.vue +45 -0
  151. package/rules/.source/hellotv/src/pages/activity/components/item/placeholder-item.vue +25 -0
  152. package/rules/.source/hellotv/src/pages/activity/index.vue +219 -0
  153. package/rules/.source/hellotv/src/pages/activity/scss/index.scss +46 -0
  154. package/rules/.source/hellotv/src/pages/activity/scss/item.scss +69 -0
  155. package/rules/.source/hellotv/src/pages/detail/adapter/index.ts +317 -0
  156. package/rules/.source/hellotv/src/pages/detail/adapter/interface.ts +150 -0
  157. package/rules/.source/hellotv/src/pages/detail/adapter/media-player.ts +378 -0
  158. package/rules/.source/hellotv/src/pages/detail/api/index.ts +77 -0
  159. package/rules/.source/hellotv/src/pages/detail/api/request-url.ts +8 -0
  160. package/rules/.source/hellotv/src/pages/detail/components/media-player/collapse/media-collapse-definition.vue +192 -0
  161. package/rules/.source/hellotv/src/pages/detail/components/media-player/collapse/media-collapse-list-item.vue +108 -0
  162. package/rules/.source/hellotv/src/pages/detail/components/media-player/collapse/media-collapse-media-series.vue +349 -0
  163. package/rules/.source/hellotv/src/pages/detail/components/media-player/collapse/media-collapse-order.vue +194 -0
  164. package/rules/.source/hellotv/src/pages/detail/components/media-player/collapse/media-collapse-speed.vue +192 -0
  165. package/rules/.source/hellotv/src/pages/detail/components/media-player/index.vue +404 -0
  166. package/rules/.source/hellotv/src/pages/detail/components/media-player/media-player-small-view.vue +382 -0
  167. package/rules/.source/hellotv/src/pages/detail/components/media-player/media-player-view.vue +1099 -0
  168. package/rules/.source/hellotv/src/pages/detail/components/recommend-item.vue +167 -0
  169. package/rules/.source/hellotv/src/pages/detail/components/section/basic-section.vue +218 -0
  170. package/rules/.source/hellotv/src/pages/detail/components/section/config.ts +6 -0
  171. package/rules/.source/hellotv/src/pages/detail/components/section/header-section.vue +15 -0
  172. package/rules/.source/hellotv/src/pages/detail/components/section/item/button-menu.vue +259 -0
  173. package/rules/.source/hellotv/src/pages/detail/components/section/item/media-introduction.vue +238 -0
  174. package/rules/.source/hellotv/src/pages/detail/components/section/item/media-series.vue +308 -0
  175. package/rules/.source/hellotv/src/pages/detail/components/section/item/player-placeholder.vue +88 -0
  176. package/rules/.source/hellotv/src/pages/detail/index.vue +571 -0
  177. package/rules/.source/hellotv/src/pages/detail/scss/index.scss +22 -0
  178. package/rules/.source/hellotv/src/pages/detail-full-player/components/media-player/full-player-loading.vue +78 -0
  179. package/rules/.source/hellotv/src/pages/detail-full-player/components/media-player/full-player-menu-view.vue +803 -0
  180. package/rules/.source/hellotv/src/pages/detail-full-player/components/media-player/full-player-view.vue +219 -0
  181. package/rules/.source/hellotv/src/pages/detail-full-player/index.vue +101 -0
  182. package/rules/.source/hellotv/src/pages/detail-full-player/scss/full-player-view.scss +6 -0
  183. package/rules/.source/hellotv/src/pages/detail-full-screen/adapter/index.ts +0 -0
  184. package/rules/.source/hellotv/src/pages/detail-full-screen/adapter/interface.ts +133 -0
  185. package/rules/.source/hellotv/src/pages/detail-full-screen/api/index.ts +77 -0
  186. package/rules/.source/hellotv/src/pages/detail-full-screen/api/request-url.ts +8 -0
  187. package/rules/.source/hellotv/src/pages/detail-full-screen/components/media-info.vue +263 -0
  188. package/rules/.source/hellotv/src/pages/detail-full-screen/components/media-player.vue +42 -0
  189. package/rules/.source/hellotv/src/pages/detail-full-screen/components/media-series-section.vue +26 -0
  190. package/rules/.source/hellotv/src/pages/detail-full-screen/components/recommend-item.vue +167 -0
  191. package/rules/.source/hellotv/src/pages/detail-full-screen/index.vue +163 -0
  192. package/rules/.source/hellotv/src/pages/detail-full-screen/scss/index.scss +41 -0
  193. package/rules/.source/hellotv/src/pages/device-info/index.vue +106 -0
  194. package/rules/.source/hellotv/src/pages/device-info/scss/device-info.scss +49 -0
  195. package/rules/.source/hellotv/src/pages/filter/README.md +66 -0
  196. package/rules/.source/hellotv/src/pages/filter/adapter/index.ts +180 -0
  197. package/rules/.source/hellotv/src/pages/filter/adapter/interface.ts +111 -0
  198. package/rules/.source/hellotv/src/pages/filter/api/index.ts +38 -0
  199. package/rules/.source/hellotv/src/pages/filter/api/interface.ts +44 -0
  200. package/rules/.source/hellotv/src/pages/filter/api/request-url.ts +8 -0
  201. package/rules/.source/hellotv/src/pages/filter/components/content/index.vue +469 -0
  202. package/rules/.source/hellotv/src/pages/filter/components/content/list-item-record.vue +16 -0
  203. package/rules/.source/hellotv/src/pages/filter/components/content/list-item.vue +78 -0
  204. package/rules/.source/hellotv/src/pages/filter/components/expand/index.vue +83 -0
  205. package/rules/.source/hellotv/src/pages/filter/components/sidebar/index.vue +81 -0
  206. package/rules/.source/hellotv/src/pages/filter/components/sidebar/list-item-filter-title.vue +78 -0
  207. package/rules/.source/hellotv/src/pages/filter/components/sidebar/list-item-filter.vue +68 -0
  208. package/rules/.source/hellotv/src/pages/filter/components/sidebar/list-item-line.vue +11 -0
  209. package/rules/.source/hellotv/src/pages/filter/components/sidebar/list-item-text.vue +43 -0
  210. package/rules/.source/hellotv/src/pages/filter/components/sidebar/list-item-title.vue +14 -0
  211. package/rules/.source/hellotv/src/pages/filter/config.ts +10 -0
  212. package/rules/.source/hellotv/src/pages/filter/expand-sidebar-contents.vue +203 -0
  213. package/rules/.source/hellotv/src/pages/filter/scss/filter-content-list-item.scss +42 -0
  214. package/rules/.source/hellotv/src/pages/filter/scss/filter-content.scss +60 -0
  215. package/rules/.source/hellotv/src/pages/filter/scss/filter-expand.scss +30 -0
  216. package/rules/.source/hellotv/src/pages/filter/scss/filter-sidebar.scss +45 -0
  217. package/rules/.source/hellotv/src/pages/filter/scss/filter.scss +21 -0
  218. package/rules/.source/hellotv/src/pages/filter/sidebar-contents.vue +145 -0
  219. package/rules/.source/hellotv/src/pages/filter/single-contents.vue +61 -0
  220. package/rules/.source/hellotv/src/pages/history/adapter/index.ts +51 -0
  221. package/rules/.source/hellotv/src/pages/history/adapter/interface.ts +22 -0
  222. package/rules/.source/hellotv/src/pages/history/api/index.ts +54 -0
  223. package/rules/.source/hellotv/src/pages/history/api/interface.ts +41 -0
  224. package/rules/.source/hellotv/src/pages/history/api/request-url.ts +10 -0
  225. package/rules/.source/hellotv/src/pages/history/components/confirm-dialog.vue +155 -0
  226. package/rules/.source/hellotv/src/pages/history/config.ts +8 -0
  227. package/rules/.source/hellotv/src/pages/history/index-raw.vue +540 -0
  228. package/rules/.source/hellotv/src/pages/history/index.vue +431 -0
  229. package/rules/.source/hellotv/src/pages/history/mock.ts +32 -0
  230. package/rules/.source/hellotv/src/pages/history/scss/history-raw.scss +181 -0
  231. package/rules/.source/hellotv/src/pages/history/scss/history.scss +148 -0
  232. package/rules/.source/hellotv/src/pages/home/adapter/exit/home-exit-adapter.ts +20 -0
  233. package/rules/.source/hellotv/src/pages/home/adapter/exit/home-exit-imp.ts +13 -0
  234. package/rules/.source/hellotv/src/pages/home/adapter/media/create-home-player-interceptor.ts +50 -0
  235. package/rules/.source/hellotv/src/pages/home/adapter/media/home-media-imp.ts +74 -0
  236. package/rules/.source/hellotv/src/pages/home/adapter/tab-bar/tab-bar-adapter.ts +151 -0
  237. package/rules/.source/hellotv/src/pages/home/adapter/tab-bar/tab-bar-config.ts +17 -0
  238. package/rules/.source/hellotv/src/pages/home/adapter/tab-bar/tab-bar-imp.ts +53 -0
  239. package/rules/.source/hellotv/src/pages/home/adapter/tab-bar/tab-bar-item-type.ts +6 -0
  240. package/rules/.source/hellotv/src/pages/home/adapter/tab-content/tab-content-adapter.ts +1304 -0
  241. package/rules/.source/hellotv/src/pages/home/adapter/tab-content/tab-content-config.ts +30 -0
  242. package/rules/.source/hellotv/src/pages/home/adapter/tab-content/tab-content-imp.ts +173 -0
  243. package/rules/.source/hellotv/src/pages/home/adapter/tab-content/tab-content-item-type.ts +17 -0
  244. package/rules/.source/hellotv/src/pages/home/api/index.ts +157 -0
  245. package/rules/.source/hellotv/src/pages/home/api/interface.ts +56 -0
  246. package/rules/.source/hellotv/src/pages/home/api/request-url.ts +22 -0
  247. package/rules/.source/hellotv/src/pages/home/components/exit-dialog.vue +148 -0
  248. package/rules/.source/hellotv/src/pages/home/components/media/bg-player.vue +440 -0
  249. package/rules/.source/hellotv/src/pages/home/components/nav-bar/bar-img-item.vue +39 -0
  250. package/rules/.source/hellotv/src/pages/home/components/nav-bar/bar-text-item.vue +100 -0
  251. package/rules/.source/hellotv/src/pages/home/components/tab-content/bg-player-cell-list-item-img.vue +54 -0
  252. package/rules/.source/hellotv/src/pages/home/components/tab-content/bg-player-cell-list-item-text.vue +67 -0
  253. package/rules/.source/hellotv/src/pages/home/components/tab-content/cell-list-player-item.vue +74 -0
  254. package/rules/.source/hellotv/src/pages/home/components/tab-content/cell-player-item.vue +40 -0
  255. package/rules/.source/hellotv/src/pages/home/components/tab-content/focus-change-img-item.vue +41 -0
  256. package/rules/.source/hellotv/src/pages/home/components/tab-content/history-item.vue +362 -0
  257. package/rules/.source/hellotv/src/pages/home/components/tab-content/inner-out-title-item.vue +60 -0
  258. package/rules/.source/hellotv/src/pages/home/components/tab-content/no-title-item.vue +46 -0
  259. package/rules/.source/hellotv/src/pages/home/components/tab-content/placeholder-item.vue +25 -0
  260. package/rules/.source/hellotv/src/pages/home/components/tab-content/short-video/short-video-section-item.vue +80 -0
  261. package/rules/.source/hellotv/src/pages/home/components/tab-content/short-video/short-video-section.vue +70 -0
  262. package/rules/.source/hellotv/src/pages/home/components/tab-content/small-4k/small-four-section.vue +76 -0
  263. package/rules/.source/hellotv/src/pages/home/components/tab-content/world-4k/world-four-section-item.vue +90 -0
  264. package/rules/.source/hellotv/src/pages/home/components/tab-content/world-4k/world-four-section.vue +57 -0
  265. package/rules/.source/hellotv/src/pages/home/components/waterfall-tabs.vue +1307 -0
  266. package/rules/.source/hellotv/src/pages/home/index.vue +117 -0
  267. package/rules/.source/hellotv/src/pages/home/scss/bar-img-item.scss +11 -0
  268. package/rules/.source/hellotv/src/pages/home/scss/bar-text-item.scss +80 -0
  269. package/rules/.source/hellotv/src/pages/home/scss/base.scss +8 -0
  270. package/rules/.source/hellotv/src/pages/home/scss/bg-player-cell-list-item.scss +24 -0
  271. package/rules/.source/hellotv/src/pages/home/scss/bg-player.scss +50 -0
  272. package/rules/.source/hellotv/src/pages/home/scss/cell-player-item.scss +24 -0
  273. package/rules/.source/hellotv/src/pages/home/scss/exit-dialog.scss +89 -0
  274. package/rules/.source/hellotv/src/pages/home/scss/focus-change-img-item.scss +12 -0
  275. package/rules/.source/hellotv/src/pages/home/scss/home.scss +32 -0
  276. package/rules/.source/hellotv/src/pages/home/scss/inner-out-title-item.scss +24 -0
  277. package/rules/.source/hellotv/src/pages/home/scss/no-title-item.scss +15 -0
  278. package/rules/.source/hellotv/src/pages/home/scss/placeholder-item.scss +14 -0
  279. package/rules/.source/hellotv/src/pages/home/scss/short-video-section.scss +59 -0
  280. package/rules/.source/hellotv/src/pages/home/scss/small-four-section.scss +14 -0
  281. package/rules/.source/hellotv/src/pages/home/scss/waterfall-tabs.scss +50 -0
  282. package/rules/.source/hellotv/src/pages/home/scss/world-four-section.scss +106 -0
  283. package/rules/.source/hellotv/src/pages/introduction/index.vue +227 -0
  284. package/rules/.source/hellotv/src/pages/live/components/menu/first-list-item-icon-text.vue +35 -0
  285. package/rules/.source/hellotv/src/pages/live/components/menu/first-list-item-img.vue +16 -0
  286. package/rules/.source/hellotv/src/pages/live/components/menu/first-list-item-text.vue +16 -0
  287. package/rules/.source/hellotv/src/pages/live/components/menu/index.vue +266 -0
  288. package/rules/.source/hellotv/src/pages/live/components/menu/second-list-item.vue +80 -0
  289. package/rules/.source/hellotv/src/pages/live/components/menu/third-list-item.vue +68 -0
  290. package/rules/.source/hellotv/src/pages/live/components/player/index.vue +168 -0
  291. package/rules/.source/hellotv/src/pages/live/components/player/player-error.vue +48 -0
  292. package/rules/.source/hellotv/src/pages/live/components/player/player-loading.vue +50 -0
  293. package/rules/.source/hellotv/src/pages/live/components/player/player-tips.vue +125 -0
  294. package/rules/.source/hellotv/src/pages/live/components/player/tips-icon-text.vue +27 -0
  295. package/rules/.source/hellotv/src/pages/live/css/menu.css +109 -0
  296. package/rules/.source/hellotv/src/pages/live/css/player.css +56 -0
  297. package/rules/.source/hellotv/src/pages/live/index.vue +128 -0
  298. package/rules/.source/hellotv/src/pages/live/mock/index.ts +263 -0
  299. package/rules/.source/hellotv/src/pages/live/types/index.ts +42 -0
  300. package/rules/.source/hellotv/src/pages/login/index.vue +116 -0
  301. package/rules/.source/hellotv/src/pages/login/scss/login.scss +61 -0
  302. package/rules/.source/hellotv/src/pages/m-test.vue +84 -0
  303. package/rules/.source/hellotv/src/pages/my/README.md +87 -0
  304. package/rules/.source/hellotv/src/pages/my/index.vue +177 -0
  305. package/rules/.source/hellotv/src/pages/my/my-data-manager.ts +606 -0
  306. package/rules/.source/hellotv/src/pages/my/my-templates.vue +24 -0
  307. package/rules/.source/hellotv/src/pages/my/poster/index.vue +98 -0
  308. package/rules/.source/hellotv/src/pages/my/poster/my-card2.vue +90 -0
  309. package/rules/.source/hellotv/src/pages/my/poster/my-icon-title-col.vue +72 -0
  310. package/rules/.source/hellotv/src/pages/my/poster/my-icon-title-row.vue +72 -0
  311. package/rules/.source/hellotv/src/pages/my/poster/my-info.vue +50 -0
  312. package/rules/.source/hellotv/src/pages/my/poster/my-user.vue +126 -0
  313. package/rules/.source/hellotv/src/pages/play-test.vue +95 -0
  314. package/rules/.source/hellotv/src/pages/search/README.md +57 -0
  315. package/rules/.source/hellotv/src/pages/search/adapter/index.ts +285 -0
  316. package/rules/.source/hellotv/src/pages/search/adapter/interface.ts +60 -0
  317. package/rules/.source/hellotv/src/pages/search/api/index.ts +100 -0
  318. package/rules/.source/hellotv/src/pages/search/api/interface.ts +64 -0
  319. package/rules/.source/hellotv/src/pages/search/api/request-url.ts +20 -0
  320. package/rules/.source/hellotv/src/pages/search/components/search-content-tabs.vue +153 -0
  321. package/rules/.source/hellotv/src/pages/search/components/search-content.vue +282 -0
  322. package/rules/.source/hellotv/src/pages/search/components/search-keyboard.vue +252 -0
  323. package/rules/.source/hellotv/src/pages/search/components/search-keyword-grid.vue +85 -0
  324. package/rules/.source/hellotv/src/pages/search/components/search-keyword.vue +346 -0
  325. package/rules/.source/hellotv/src/pages/search/config.ts +10 -0
  326. package/rules/.source/hellotv/src/pages/search/scss/search-content.scss +130 -0
  327. package/rules/.source/hellotv/src/pages/search/scss/search-keyboard.scss +91 -0
  328. package/rules/.source/hellotv/src/pages/search/scss/search-keyword-grid.scss +30 -0
  329. package/rules/.source/hellotv/src/pages/search/scss/search-keyword.scss +104 -0
  330. package/rules/.source/hellotv/src/pages/search/scss/search.scss +18 -0
  331. package/rules/.source/hellotv/src/pages/search/three-columns.vue +164 -0
  332. package/rules/.source/hellotv/src/pages/search/two-columns.vue +128 -0
  333. package/rules/.source/hellotv/src/pages/tabs-test.vue +339 -0
  334. package/rules/.source/hellotv/src/pages/webview/load-web-view.vue +44 -0
  335. package/rules/.source/hellotv/src/routes.ts +142 -0
  336. package/rules/.source/hellotv/src/tools/common.ts +18 -0
  337. package/rules/.source/hellotv/src/tools/format-date.ts +16 -0
  338. package/rules/.source/hellotv/src/tools/index.ts +58 -0
  339. package/rules/.source/hellotv/src/tools/launch.ts +339 -0
  340. package/rules/.source/hellotv/src/tools/request/index.ts +206 -0
  341. package/rules/.source/hellotv/src/tools/request/interface.ts +64 -0
  342. package/rules/.source/hellotv/src/typings/shims-vue.d.ts +6 -0
  343. package/rules/.source/hellotv/src/vue.config.js +3 -0
  344. package/rules/.source/hellotv/tsconfig.json +34 -0
  345. package/rules/.windsurfrules +1 -0
  346. package/rules/AGENTS.md +1 -0
  347. package/rules/CLAUDE.md +1 -0
  348. package/rules/GEMINI.md +1 -0
@@ -0,0 +1,80 @@
1
+ <template>
2
+ <qt-view
3
+ class="menu-body-list-item"
4
+ style="width: 400px"
5
+ :type="1"
6
+ :focusable="true"
7
+ eventFocus
8
+ eventClick
9
+ >
10
+ <!-- 角标 -->
11
+ <qt-image
12
+ showIf="${isVip}"
13
+ class="menu-body-list-item-corner"
14
+ :src="icCornerVip"
15
+ :postDelay="100"
16
+ :focusable="false"
17
+ ></qt-image>
18
+ <!-- 主体 -->
19
+ <qt-view
20
+ style="
21
+ background-color: transparent;
22
+ flex-direction: row;
23
+ align-items: center;
24
+ "
25
+ :focusable="false"
26
+ duplicateParentState
27
+ >
28
+ <qt-text
29
+ class="menu-body-list-item-text"
30
+ style="width: 110px; height: 52px"
31
+ text="${id}"
32
+ gravity="center"
33
+ :focusable="false"
34
+ duplicateParentState
35
+ ></qt-text>
36
+ <qt-view
37
+ style="width: 270px; background-color: transparent"
38
+ :focusable="false"
39
+ duplicateParentState
40
+ >
41
+ <qt-text
42
+ class="menu-body-list-item-text"
43
+ style="width: 270px; height: 40px; font-size: 32px; line-height: 40px"
44
+ text="${name}"
45
+ gravity="center|start"
46
+ :focusable="false"
47
+ :lines="1"
48
+ :ellipsizeMode="2"
49
+ duplicateParentState
50
+ ></qt-text>
51
+ <qt-text
52
+ class="menu-body-list-item-text"
53
+ style="width: 230px; height: 40px; font-size: 24px"
54
+ text="${program}"
55
+ gravity="center|start"
56
+ :focusable="false"
57
+ :lines="1"
58
+ :ellipsizeMode="4"
59
+ :horizontalFadingEdgeEnabled="true"
60
+ :fadingEdgeLength="10"
61
+ duplicateParentState
62
+ ></qt-text>
63
+ </qt-view>
64
+ </qt-view>
65
+ <!-- 播放图标 -->
66
+ <play-mark
67
+ showIf="${isPlaying}"
68
+ class="menu-body-list-item-playmark"
69
+ :markColor="'#FFFFFF'"
70
+ :gap="-1"
71
+ :focusable="false"
72
+ />
73
+ </qt-view>
74
+ </template>
75
+
76
+ <script setup lang="ts">
77
+ import icCornerVip from "../../../../assets/live/ic-corner-vip.png";
78
+ </script>
79
+
80
+ <style scoped src="../../css/menu.css"></style>
@@ -0,0 +1,68 @@
1
+ <template>
2
+ <qt-view
3
+ class="menu-body-list-item"
4
+ style="width: 380px"
5
+ :type="1"
6
+ :focusable="true"
7
+ >
8
+ <qt-view
9
+ style="background-color: transparent"
10
+ :focusable="false"
11
+ duplicateParentState
12
+ >
13
+ <qt-text
14
+ class="menu-body-list-item-text"
15
+ style="width: 296px; font-size: 32px; height: 52px"
16
+ text="${program}"
17
+ gravity="center|start"
18
+ :focusable="false"
19
+ :lines="1"
20
+ :ellipsizeMode="4"
21
+ :horizontalFadingEdgeEnabled="true"
22
+ :fadingEdgeLength="10"
23
+ duplicateParentState
24
+ ></qt-text>
25
+ <qt-view
26
+ style="
27
+ background-color: transparent;
28
+ flex-direction: row;
29
+ align-items: center;
30
+ "
31
+ :focusable="false"
32
+ duplicateParentState
33
+ >
34
+ <qt-text
35
+ class="menu-body-list-item-text"
36
+ style="width: 154px; height: 40px; font-size: 24px"
37
+ text="${time}"
38
+ gravity="center|start"
39
+ :focusable="false"
40
+ duplicateParentState
41
+ ></qt-text>
42
+ <qt-text
43
+ class="menu-body-list-item-text"
44
+ style="width: 96px; height: 40px; font-size: 24px"
45
+ text="${tips}"
46
+ gravity="center|start"
47
+ :focusable="false"
48
+ duplicateParentState
49
+ ></qt-text>
50
+ </qt-view>
51
+ </qt-view>
52
+ <play-mark
53
+ showIf="${isPlaying}"
54
+ style="
55
+ width: 20px;
56
+ height: 20px;
57
+ position: absolute;
58
+ right: 14px;
59
+ bottom: 20px;
60
+ "
61
+ :markColor="'#FFFFFF'"
62
+ :gap="-1"
63
+ :focusable="false"
64
+ />
65
+ </qt-view>
66
+ </template>
67
+
68
+ <style scoped src="../../css/menu.css"></style>
@@ -0,0 +1,168 @@
1
+ <template>
2
+ <qt-view class="player">
3
+ <!-- 播放器 -->
4
+ <ESPlayerManager
5
+ ref="playerManager"
6
+ :playerList="playerListRef"
7
+ :initPlayerWindowType="2"
8
+ @onPlayerBufferStart="onPlayerBufferStart"
9
+ @onPlayerBufferEnd="onPlayerBufferEnd"
10
+ @onPlayerPlaying="onPlayerPlaying"
11
+ @onPlayerError="onPlayerError"
12
+ />
13
+ <!-- 加载中 -->
14
+ <player-loading :visibility="showLoading ? 'visible' : 'invisible'" />
15
+ <!-- 播放失败 -->
16
+ <player-error :visibility="playError ? 'visible' : 'invisible'" />
17
+ <!-- 切台提示 -->
18
+ <player-tips
19
+ :visibility="showTips ? 'visible' : 'invisible'"
20
+ ref="tipsRef"
21
+ />
22
+ </qt-view>
23
+ </template>
24
+
25
+ <script setup lang="ts">
26
+ import { ref, watch, markRaw, nextTick } from "vue";
27
+ import { Native } from "@extscreen/es3-vue";
28
+ import { ESKeyEvent, ESKeyCode, useESEventBus } from "@extscreen/es3-core";
29
+ import {
30
+ ESPlayerManager,
31
+ ESIPlayerManager,
32
+ ESMediaItem,
33
+ } from "@extscreen/es3-player-manager";
34
+ import { ESPlayerPlayMode } from "@extscreen/es3-player";
35
+ import { ESVideoPlayer } from "@extscreen/es3-video-player";
36
+ import playerLoading from "./player-loading.vue";
37
+ import playerError from "./player-error.vue";
38
+ import playerTips from "./player-tips.vue";
39
+
40
+ const emits = defineEmits(["closeMenu"]);
41
+
42
+ const eventBus = useESEventBus();
43
+
44
+ const showLoading = ref(false);
45
+ watch(
46
+ () => showLoading.value,
47
+ (b) => {
48
+ if (b) {
49
+ Native.callNative("ESNetworkSpeedModule", "showNetSpeed");
50
+ } else {
51
+ Native.callNative("ESNetworkSpeedModule", "stopNetSpeed");
52
+ }
53
+ },
54
+ );
55
+
56
+ const playError = ref(false);
57
+ const playerManager = ref<ESIPlayerManager>();
58
+ const playerListRef = ref([markRaw(ESVideoPlayer)]);
59
+ const tipsRef = ref();
60
+ const showTips = ref(false);
61
+
62
+ let mediaList: ESMediaItem[] = [];
63
+ let curPlayIndex: number = 0;
64
+
65
+ function init(params: { mediaList: [] }) {
66
+ mediaList = params.mediaList;
67
+ // 初始化播放器
68
+ showLoading.value = true;
69
+ playerManager.value?.initialize();
70
+ playerManager.value?.setPlayMediaListMode(
71
+ ESPlayerPlayMode.ES_PLAYER_PLAY_MODE_LOOP,
72
+ );
73
+ playerManager.value?.playMediaList({ index: 0, list: mediaList });
74
+ }
75
+
76
+ let isPaused = false;
77
+ function resume() {
78
+ if (isPaused) {
79
+ isPaused = false;
80
+ playerManager.value?.start(0);
81
+ // resume 会导致页面闪
82
+ // playerManager.value?.resume()
83
+ }
84
+ }
85
+
86
+ function pause() {
87
+ if (!isPaused) {
88
+ isPaused = true;
89
+ playerManager.value?.pause();
90
+ }
91
+ }
92
+
93
+ function stop() {
94
+ playerManager.value?.stop();
95
+ }
96
+
97
+ let showTipsTimer: any = -1;
98
+ function setPlayInfo(playIndex: number) {
99
+ const nextMedia = mediaList[playIndex];
100
+ tipsRef.value?.setPlayInfo({
101
+ channelId: nextMedia.channelId,
102
+ channelName: nextMedia.channelName,
103
+ isVip: nextMedia.isVip,
104
+ program: nextMedia.program,
105
+ nextProgram: nextMedia.nextProgram,
106
+ });
107
+ nextTick(() => {
108
+ clearTimeout(showTipsTimer);
109
+ showTips.value = true;
110
+ showTipsTimer = setTimeout(() => (showTips.value = false), 10000);
111
+ });
112
+ }
113
+
114
+ function playMediaByIndex(index: number) {
115
+ if (index != curPlayIndex) {
116
+ showTips.value = false;
117
+ showLoading.value = true;
118
+ playError.value = false;
119
+ playerManager.value?.playMediaByIndex(index);
120
+ }
121
+ emits("closeMenu");
122
+ setPlayInfo(index);
123
+ }
124
+
125
+ function onPlayerBufferStart() {
126
+ showLoading.value = true;
127
+ }
128
+
129
+ function onPlayerBufferEnd() {
130
+ showLoading.value = false;
131
+ }
132
+
133
+ function onPlayerPlaying() {
134
+ showLoading.value = false;
135
+ curPlayIndex = playerManager.value?.getPlayingMediaIndex() || 0;
136
+ setPlayInfo(curPlayIndex);
137
+ eventBus.emit("setPlayIndex", curPlayIndex);
138
+ }
139
+
140
+ function onPlayerError() {
141
+ showLoading.value = false;
142
+ playError.value = true;
143
+ playerManager.value?.stop();
144
+ }
145
+
146
+ function onKeyDown(keyEvent: ESKeyEvent) {
147
+ let playIndex = playerManager.value?.getPlayingMediaIndex() || 0;
148
+ switch (keyEvent.keyCode) {
149
+ case ESKeyCode.ES_KEYCODE_DPAD_UP:
150
+ playMediaByIndex(--playIndex < 0 ? mediaList.length - 1 : playIndex);
151
+ break;
152
+ case ESKeyCode.ES_KEYCODE_DPAD_DOWN:
153
+ playMediaByIndex(++playIndex >= mediaList.length ? 0 : playIndex);
154
+ break;
155
+ }
156
+ }
157
+
158
+ defineExpose({ init, resume, pause, stop, playMediaByIndex, onKeyDown });
159
+ </script>
160
+
161
+ <style scoped>
162
+ .player {
163
+ width: 1920px;
164
+ height: 1080px;
165
+ background-color: transparent;
166
+ position: absolute;
167
+ }
168
+ </style>
@@ -0,0 +1,48 @@
1
+ <template>
2
+ <qt-view class="player-error">
3
+ <qt-text
4
+ class="player-error-text"
5
+ style="width: 226px"
6
+ text="播放失败 请按"
7
+ gravity="center"
8
+ ></qt-text>
9
+ <qt-image
10
+ style="
11
+ width: 46px;
12
+ height: 46px;
13
+ margin-top: 4px;
14
+ margin-left: 4px;
15
+ margin-right: 4px;
16
+ "
17
+ :src="icKey"
18
+ ></qt-image>
19
+ <qt-text
20
+ class="player-error-text"
21
+ style="width: 216px"
22
+ text="切换其他节目"
23
+ gravity="center"
24
+ ></qt-text>
25
+ </qt-view>
26
+ </template>
27
+
28
+ <script setup lang="ts">
29
+ import icKey from "../../../../assets/live/ic-key.png";
30
+ </script>
31
+
32
+ <style scoped>
33
+ .player-error {
34
+ width: 1920px;
35
+ height: 1080px;
36
+ background-color: #0b0f10;
37
+ position: absolute;
38
+ flex-direction: row;
39
+ align-items: center;
40
+ justify-content: center;
41
+ }
42
+
43
+ .player-error-text {
44
+ height: 46px;
45
+ color: #ffffff;
46
+ font-size: 36px;
47
+ }
48
+ </style>
@@ -0,0 +1,50 @@
1
+ <template>
2
+ <qt-view class="player-loading">
3
+ <qt-loading-view style="width: 100px; height: 100px"></qt-loading-view>
4
+ <qt-text
5
+ class="player-loading-text"
6
+ :text="netSpeed"
7
+ gravity="center"
8
+ ></qt-text>
9
+ </qt-view>
10
+ </template>
11
+
12
+ <script setup lang="ts">
13
+ import { ref, onMounted, onUnmounted } from "vue";
14
+ import { EventBus } from "@extscreen/es3-vue";
15
+
16
+ const netSpeed = ref("0.0KB/s 正在缓冲...");
17
+
18
+ onMounted(() => {
19
+ EventBus.$on("NetSpeed", onNetWorkTipChanged);
20
+ });
21
+ onUnmounted(() => {
22
+ EventBus.$off("NetSpeed");
23
+ });
24
+
25
+ function onNetWorkTipChanged(e) {
26
+ const mb = Number(e.speedMbps);
27
+ const kb = Number(e.speedKbps);
28
+ netSpeed.value = (mb >= 1 ? mb + "MB/s" : kb + "KB/s") + " 正在缓冲...";
29
+ }
30
+ </script>
31
+
32
+ <style scoped>
33
+ .player-loading {
34
+ width: 1920px;
35
+ height: 1080px;
36
+ background-color: #0b0f10;
37
+ position: absolute;
38
+ align-items: center;
39
+ justify-content: center;
40
+ }
41
+
42
+ .player-loading-text {
43
+ width: 260px;
44
+ height: 30px;
45
+ background-color: transparent;
46
+ margin-top: 35px;
47
+ color: rgba(255, 255, 255, 0.5);
48
+ font-size: 24px;
49
+ }
50
+ </style>
@@ -0,0 +1,125 @@
1
+ <template>
2
+ <qt-view
3
+ class="player-tips"
4
+ :gradientBackground="{
5
+ colors: ['#FF2C2C2C', '#FF0F1518'],
6
+ orientation: 0,
7
+ cornerRadius: 30,
8
+ }"
9
+ >
10
+ <!-- 角标 -->
11
+ <qt-image
12
+ v-show="playInfo.isVip"
13
+ class="player-tips-corner"
14
+ :src="icCornerVipTips"
15
+ ></qt-image>
16
+ <qt-view class="player-tips-left">
17
+ <qt-text
18
+ class="player-tips-text"
19
+ style="width: 234px; height: 120px; color: #ffffff; font-size: 100px"
20
+ :text="playInfo.channelId"
21
+ typeface="bold"
22
+ gravity="center"
23
+ ></qt-text>
24
+ <qt-text
25
+ class="player-tips-text"
26
+ style="width: 234px; font-size: 26px"
27
+ :text="playInfo.channelName"
28
+ gravity="center"
29
+ :lines="1"
30
+ :ellipsizeMode="2"
31
+ :select="true"
32
+ ></qt-text>
33
+ </qt-view>
34
+ <qt-view class="player-tips-right">
35
+ <qt-view class="player-tips-right-box" style="margin-bottom: 8px">
36
+ <qt-text
37
+ class="player-tips-text"
38
+ style="height: 48px; color: #ffffff; font-size: 38px"
39
+ :text="playInfo.program"
40
+ gravity="center|start"
41
+ :lines="1"
42
+ :ellipsizeMode="3"
43
+ :select="true"
44
+ :horizontalFadingEdgeEnabled="true"
45
+ :fadingEdgeLength="10"
46
+ ></qt-text>
47
+ <qt-text
48
+ class="player-tips-text"
49
+ style="width: 106px; font-size: 28px"
50
+ text="14:13"
51
+ gravity="center|end"
52
+ ></qt-text>
53
+ </qt-view>
54
+ <qt-view class="player-tips-right-box">
55
+ <qt-text
56
+ class="player-tips-text"
57
+ :text="playInfo.nextProgram"
58
+ gravity="center|start"
59
+ :lines="1"
60
+ :ellipsizeMode="3"
61
+ :select="true"
62
+ :horizontalFadingEdgeEnabled="true"
63
+ :fadingEdgeLength="10"
64
+ ></qt-text>
65
+ <qt-text
66
+ class="player-tips-text"
67
+ style="width: 106px"
68
+ text="16:30"
69
+ gravity="center|end"
70
+ ></qt-text>
71
+ </qt-view>
72
+ <qt-view class="player-tips-line"></qt-view>
73
+ <qt-view style="flex-direction: row; justify-content: space-between">
74
+ <tipsIconText
75
+ :icon="icOk"
76
+ :text="'频道导航'"
77
+ :textStyle="{ width: '88px' }"
78
+ />
79
+ <tipsIconText
80
+ :icon="icChange"
81
+ :text="'上下换台'"
82
+ :textStyle="{ width: '88px' }"
83
+ />
84
+ <tipsIconText
85
+ :icon="icArrowRight"
86
+ :text="'开通服务'"
87
+ :textStyle="{ width: '88px' }"
88
+ />
89
+ </qt-view>
90
+ </qt-view>
91
+ </qt-view>
92
+ </template>
93
+
94
+ <script setup lang="ts">
95
+ import { ref } from "vue";
96
+ import tipsIconText from "./tips-icon-text.vue";
97
+ import icCornerVipTips from "../../../../assets/live/ic-corner-vip-tips.png";
98
+ import icOk from "../../../../assets/live/ic-ok.png";
99
+ import icChange from "../../../../assets/live/ic-change.png";
100
+ import icArrowRight from "../../../../assets/live/ic-arrow-right.png";
101
+
102
+ type PlayInfo = {
103
+ channelId: string;
104
+ channelName: string;
105
+ isVip: boolean;
106
+ program: string;
107
+ nextProgram: string;
108
+ };
109
+
110
+ const playInfo = ref<PlayInfo>({
111
+ channelId: "",
112
+ channelName: "",
113
+ isVip: false,
114
+ program: "",
115
+ nextProgram: "",
116
+ });
117
+
118
+ function setPlayInfo(obj: PlayInfo) {
119
+ playInfo.value = obj;
120
+ }
121
+
122
+ defineExpose({ setPlayInfo });
123
+ </script>
124
+
125
+ <style scoped src="../../css/player.css"></style>
@@ -0,0 +1,27 @@
1
+ <template>
2
+ <qt-view style="flex-direction: row; align-items: center">
3
+ <qt-image
4
+ style="width: 28px; height: 28px; margin-right: 9px"
5
+ :src="props.icon"
6
+ ></qt-image>
7
+ <qt-text
8
+ class="player-tips-text"
9
+ :style="props.textStyle"
10
+ :text="props.text"
11
+ gravity="center|start"
12
+ ></qt-text>
13
+ </qt-view>
14
+ </template>
15
+
16
+ <script setup lang="ts">
17
+ const props = defineProps({
18
+ icon: String,
19
+ text: {
20
+ type: String,
21
+ default: "",
22
+ },
23
+ textStyle: Object,
24
+ });
25
+ </script>
26
+
27
+ <style scoped src="../../css/player.css"></style>
@@ -0,0 +1,109 @@
1
+ .menu {
2
+ width: 1920px;
3
+ height: 1080px;
4
+ background-color: transparent;
5
+ position: absolute;
6
+ }
7
+
8
+ .menu-body {
9
+ width: 1126px;
10
+ height: 1080px;
11
+ background-color: transparent;
12
+ flex-direction: row;
13
+ }
14
+
15
+ .menu-body-list {
16
+ width: 300px;
17
+ height: 1080px;
18
+ background-color: #1b1b1b99;
19
+ }
20
+
21
+ .menu-body-list-item {
22
+ width: 240px;
23
+ height: 108px;
24
+ background-color: transparent;
25
+ border-radius: 20px;
26
+ align-items: center;
27
+ justify-content: center;
28
+ focus-background-color: #3098ffff;
29
+ }
30
+
31
+ .menu-body-list-item-img {
32
+ width: 151px;
33
+ height: 37px;
34
+ background-color: transparent;
35
+ }
36
+
37
+ .menu-body-list-item-text {
38
+ width: 240px;
39
+ height: 108px;
40
+ background-color: transparent;
41
+ color: rgba(255, 255, 255, 0.7);
42
+ font-size: 36px;
43
+ focus-color: #ffffff;
44
+ select-color: #3098ffff;
45
+ }
46
+
47
+ .menu-body-list-item-icon {
48
+ width: 30px;
49
+ height: 38px;
50
+ background-color: transparent;
51
+ margin-right: 5px;
52
+ }
53
+
54
+ .menu-body-list-item-corner {
55
+ width: 60px;
56
+ height: 40px;
57
+ background-color: transparent;
58
+ position: absolute;
59
+ top: -6px;
60
+ left: 0.01px;
61
+ }
62
+
63
+ .menu-body-list-item-playmark {
64
+ width: 20px;
65
+ height: 20px;
66
+ background-color: transparent;
67
+ position: absolute;
68
+ right: 19px;
69
+ bottom: 26px;
70
+ }
71
+
72
+ .menu-body-list-nodata {
73
+ width: 300px;
74
+ height: 52px;
75
+ background-color: transparent;
76
+ color: #ffffff;
77
+ font-size: 36px;
78
+ }
79
+
80
+ .menu-body-ext {
81
+ width: 132px;
82
+ height: 1080px;
83
+ background-color: transparent;
84
+ }
85
+
86
+ .menu-back {
87
+ width: 293px;
88
+ height: 52px;
89
+ background-color: transparent;
90
+ flex-direction: row;
91
+ align-items: center;
92
+ justify-content: center;
93
+ position: absolute;
94
+ right: 100px;
95
+ bottom: 80px;
96
+ }
97
+
98
+ .menu-back span {
99
+ font-size: 36px;
100
+ color: #ffffff;
101
+ }
102
+
103
+ .menu-back-icon {
104
+ width: 35px;
105
+ height: 35px;
106
+ margin-top: 4px;
107
+ margin-left: 2px;
108
+ margin-right: 2px;
109
+ }