video.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <template>
  2. <view class="safety-video">
  3. <view class="video-title">安全驾驶培训视频</view>
  4. <video
  5. class="video-content"
  6. id="myVideo"
  7. src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/2minute-demo.mp4"
  8. @error="videoErrorCallback"
  9. controls
  10. >
  11. </video>
  12. <view>
  13. <view v-if="!videoUnlocked" class="video-status">
  14. <view>
  15. <!-- todo 图标不对 -->
  16. <image v-if="globalImages" :src="globalImages + 'imgs/jianyi.png'" style="width: 24rpx;height: 28rpx;"></image>
  17. <text style="margin-left: 16rpx;">视频未完成</text>
  18. </view>
  19. <view>禁止快进</view>
  20. </view>
  21. <view v-else class="video-status">
  22. <view>
  23. <image v-if="globalImages" :src="globalImages + 'imgs/dui.png'" style="width: 24rpx;height: 28rpx;"></image>
  24. <text style="margin-left: 16rpx;">视频已完成</text>
  25. </view>
  26. <view>禁止快进</view>
  27. </view>
  28. </view>
  29. <u-card padding="32" full :showHead="false">
  30. <view slot="body">
  31. <view style="display: flex;justify-content: space-between;align-items: center;color: #1F2937;">
  32. <view>安全考核</view>
  33. <view><u-button type="error" plain size="mini" disabled>未开始</u-button></view>
  34. </view>
  35. <view style="display: flex;justify-content: space-between;align-items: center;margin: 24rpx 0;color: #333333;">
  36. <view>
  37. <view style="color: #6B7280">及格分数</view>
  38. <view>100分</view>
  39. </view>
  40. <view>
  41. <view style="color: #6B7280">题目数量</view>
  42. <view>10题</view>
  43. </view>
  44. <view>
  45. <view style="color: #6B7280">考试时长</view>
  46. <view>15分钟</view>
  47. </view>
  48. </view>
  49. <view style="margin: 8rpx 0;">
  50. <u-button type="primary" @click="navgo('/my/safety/exam')">
  51. {{ videoUnlocked ? '开始考试' : '完成视频后解锁考试' }}
  52. </u-button>
  53. </view>
  54. </view>
  55. </u-card>
  56. <u-card padding="32" full :showHead="false">
  57. <view slot="body">
  58. <view style="color: #1F2937;margin-bottom: 8rpx;">
  59. 考试须知
  60. </view>
  61. <view>
  62. <view style="display: flex;align-items: center;margin: 16rpx 0;">
  63. <image v-if="globalImages" :src="globalImages + 'imgs/dui.png'" style="width: 28rpx;height: 28rpx;"></image>
  64. <text style="margin-left: 16rpx;color: #4B5563;">观看完整培训视频后方可参加考试</text>
  65. </view>
  66. <view style="display: flex;align-items: center;margin: 16rpx 0;">
  67. <image v-if="globalImages" :src="globalImages + 'imgs/dui.png'" style="width: 28rpx;height: 28rpx;"></image>
  68. <text style="margin-left: 16rpx;color: #4B5563;">考试共10题,答对10题为通过</text>
  69. </view>
  70. <view style="display: flex;align-items: center;margin: 16rpx 0;">
  71. <image v-if="globalImages" :src="globalImages + 'imgs/dui.png'" style="width: 28rpx;height: 28rpx;"></image>
  72. <text style="margin-left: 16rpx;color: #4B5563;">答错题目需重新作答,直至全部正确</text>
  73. </view>
  74. <view style="display: flex;align-items: center;margin: 16rpx 0;">
  75. <image v-if="globalImages" :src="globalImages + 'imgs/dui.png'" style="width: 28rpx;height: 28rpx;"></image>
  76. <text style="margin-left: 16rpx;color: #4B5563;">考试期间不可退出,否则视为放弃</text>
  77. </view>
  78. </view>
  79. </view>
  80. </u-card>
  81. </view>
  82. </template>
  83. <script>
  84. import { waitForGlobalImages } from '@/utils/globalImageLoader'
  85. export default {
  86. data() {
  87. return {
  88. globalImages: null,
  89. videoUnlocked: true,
  90. arr: [],
  91. token: '',
  92. }
  93. },
  94. onLoad(e) {
  95. waitForGlobalImages().then((path) => {
  96. this.globalImages = path
  97. })
  98. },
  99. onShow() {
  100. this.token = this.$queue.getData('token')
  101. },
  102. methods: {
  103. navgo(e) {
  104. // #ifdef MP-WEIXIN
  105. if (uni.getStorageSync('sendMsg')) {
  106. uni.requestSubscribeMessage({
  107. tmplIds: this.arr,
  108. success(re) {
  109. // console.log(re,'**********')
  110. var datas = JSON.stringify(re);
  111. if (datas.indexOf("accept") != -1) {
  112. console.log(re)
  113. }
  114. },
  115. fail: (res) => {
  116. console.log(res)
  117. }
  118. })
  119. }
  120. // #endif
  121. let that = this
  122. if (that.token) {
  123. uni.navigateTo({
  124. url: e
  125. })
  126. } else {
  127. uni.navigateTo({
  128. url: '/pages/login/login'
  129. })
  130. }
  131. },
  132. },
  133. }
  134. </script>
  135. <style lang="scss">
  136. .safety-video {
  137. width: 100%;
  138. position: relative;
  139. padding: 16rpx 32rpx;
  140. box-sizing: border-box;
  141. .video-title {
  142. font-size: 32rpx;
  143. line-height: 56rpx;
  144. font-weight: 400;
  145. }
  146. .video-content {
  147. width: 100%;
  148. margin: 20rpx 0;
  149. border-top-left-radius: 16rpx;
  150. border-top-right-radius: 16rpx;
  151. }
  152. .video-status {
  153. display: flex;
  154. justify-content: space-between;
  155. font-size: 28rpx;
  156. line-height: 40rpx;
  157. }
  158. }
  159. </style>