detail.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <template>
  2. <view>
  3. <view class="video_play" v-if="videoInfo.video_src">
  4. <video id="myVideo" class="video_control" :src="videoInfo.video_src" @timeupdate="timeUpdate" :enable-progress-gesture="false" :enable-play-gesture="true"></video>
  5. </view>
  6. <view class="video_title">{{videoInfo.name}}</view>
  7. <view class="rich_text">
  8. <rich-text :nodes="videoInfo.content"></rich-text>
  9. </view>
  10. </view>
  11. </template>
  12. <script>
  13. export default {
  14. data() {
  15. return {
  16. videoInfo:{
  17. id:0,
  18. name:"",
  19. content:"",
  20. video_src:""
  21. },
  22. // 请求参数
  23. requestParam: {
  24. id: 0
  25. },
  26. isReqing:false,
  27. videoContext:null,
  28. }
  29. },
  30. onLoad(param) {
  31. // 参数接收
  32. this.requestParam.id = param.id;
  33. // #ifdef MP-WEIXIN
  34. //分享按钮
  35. uni.showShareMenu({
  36. withShareTicket: true,
  37. menus: ["shareAppMessage", "shareTimeline"],
  38. });
  39. // #endif
  40. },
  41. onShareAppMessage(obj) {
  42. return {
  43. title: `999智控终端平台\n${this.videoInfo.title}`,
  44. path: "/pages/video/detail?id=" + this.videoInfo.id,
  45. promise: new Promise((resolve, reject) => {
  46. this.$http.request("api/share_message/get_item", { item_id: this.videoInfo.id, pages: "/pages/video/detail" }).then((callback) => {
  47. console.log(callback, "api/share_message/get_item");
  48. let obj = {
  49. title: callback.data?.title == "" ? `999智控终端平台\n${this.videoInfo.title}` : callback.data.title,
  50. path: "/pages/video/detail?id=" + this.videoInfo.id,
  51. };
  52. if (callback.data?.image_url !== "") {
  53. obj.imageUrl = callback.data.image_url;
  54. }
  55. resolve(obj);
  56. });
  57. }),
  58. };
  59. },
  60. onReady: function (res) {
  61. },
  62. onShow() {
  63. // 如果存在产品ID的话
  64. if (this.requestParam.id > 0) {
  65. // 请求详情
  66. this.$http.request("api/video_course/get_detail", this.requestParam).then((re) => {
  67. // 成功渲染数据
  68. if (re.code == "success") {
  69. // 刷新数据
  70. this.videoInfo = re.data;
  71. // 获取视频容器的上下文
  72. this.videoContext = uni.createVideoContext('myVideo');
  73. // 暂停播放
  74. this.videoContext.stop();
  75. } else {
  76. if (re.code != "no_login") {
  77. uni.showModal({
  78. content: re.msg,
  79. showCancel: false,
  80. });
  81. }
  82. }
  83. });
  84. }
  85. },
  86. methods: {
  87. timeUpdate(event){
  88. // 播放到对应的
  89. if( event.detail.currentTime ){
  90. }
  91. }
  92. }
  93. }
  94. </script>
  95. <style lang="less">
  96. .video_play{
  97. width: 750rpx;
  98. display: block;
  99. font-size: 36rpx;
  100. overflow: hidden;
  101. font-weight: bold;
  102. line-height: 60rpx;
  103. background-color: #FFFFFF;
  104. .video_control{
  105. width: 750rpx;
  106. display: block;
  107. font-size: 36rpx;
  108. overflow: hidden;
  109. font-weight: bold;
  110. line-height: 60rpx;
  111. background-color: #FFFFFF;
  112. }
  113. }
  114. .video_title{
  115. width: 700rpx;
  116. display: block;
  117. font-size: 36rpx;
  118. overflow: hidden;
  119. font-weight: bold;
  120. line-height: 60rpx;
  121. padding: 0rpx 25rpx;
  122. padding-top: 60rpx;
  123. background-color: #FFFFFF;
  124. }
  125. .video_time{
  126. width: 700rpx;
  127. color: #999999;
  128. display: block;
  129. font-size: 26rpx;
  130. overflow: hidden;
  131. line-height: 40rpx;
  132. padding: 0rpx 25rpx;
  133. background-color: #FFFFFF;
  134. }
  135. .rich_text{
  136. width: 700rpx;
  137. display: block;
  138. overflow: hidden;
  139. font-size: 26rpx;
  140. margin: 0rpx auto;
  141. min-height: 800rpx;
  142. line-height: 50rpx;
  143. padding: 10rpx 25rpx;
  144. background-color: #FFFFFF;
  145. [alt] {
  146. //web_view图片
  147. max-width: 100%; // 避免图片超宽
  148. vertical-align: bottom; // 避免图片之间间隙
  149. }
  150. }
  151. .video_poster{
  152. width: 700rpx;
  153. display: block;
  154. overflow: hidden;
  155. margin: 6rpx auto;
  156. padding: 10rpx 25rpx;
  157. background-color: #FFFFFF;
  158. .poster_img{
  159. width: 700rpx;
  160. display: block;
  161. }
  162. }
  163. .read_total{
  164. width: 700rpx;
  165. color: #999999;
  166. display: block;
  167. font-size: 26rpx;
  168. overflow: hidden;
  169. line-height: 60rpx;
  170. padding: 0rpx 25rpx;
  171. margin-bottom: 122rpx;
  172. background-color: #FFFFFF;
  173. }
  174. .handle_box {
  175. left: 0rpx;
  176. width: 700rpx;
  177. height: 120rpx;
  178. display: block;
  179. position: fixed;
  180. overflow: hidden;
  181. padding: 20rpx 25rpx;
  182. background-color: #FFFFFF;
  183. bottom: var(--window-bottom);
  184. border-top: 2rpx solid #DDDDDD;
  185. .click_box{
  186. border: none;
  187. float: right;
  188. display: block;
  189. height: 120rpx;
  190. padding: 0rpx 0rpx;
  191. line-height: 120rpx;
  192. margin-right: 20rpx;
  193. font-size: 24rpx !important;
  194. background-color: transparent;
  195. .uni-icons{
  196. font-size: 36rpx !important;
  197. }
  198. }
  199. .click_box::after{
  200. border: none;
  201. background-color: transparent;
  202. }
  203. }
  204. </style>