index.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. //index.js
  2. //获取应用实例
  3. const app = getApp()
  4. Page({
  5. data: {
  6. spinShow: false,
  7. buyModel:false,
  8. code_url:'',
  9. system: "",
  10. userInfo:{},
  11. info:{},
  12. onPlay: false,
  13. item:{},
  14. courseId:0,
  15. mediaList: []
  16. },
  17. onLoad: function( options ){
  18. let courseId = +options.courseId||35;
  19. this.setData({courseId})
  20. app.getSystemInfo( system=>{
  21. this.setData({system})
  22. })
  23. //
  24. app.getUserInfo( userInfo =>{
  25. this.setData({userInfo})
  26. this.loadData( courseId )
  27. })
  28. },
  29. loadData: function( courseId ) {
  30. let param ={ courseId}
  31. app.formPost('Study.GetWxCourseInfo', param).then(res => {
  32. if( res.code == 200){
  33. let {info, list} = res.data
  34. wx.setNavigationBarTitle({
  35. title: info.name
  36. })
  37. this.setData({info, mediaList: list})
  38. }
  39. })
  40. },
  41. onReady(res) {
  42. this.videoContext = wx.createVideoContext('myVideo')
  43. },
  44. gotoExam(){
  45. let courseId = this.data.courseId
  46. wx.navigateTo({
  47. url: `/pages/study/exam/index?courseId=${courseId}`,
  48. })
  49. },
  50. // 拖动快进
  51. timeUpdate( e ){
  52. let that = this;
  53. let item = this.data.item
  54. var position = item.position
  55. var currentTime = parseInt(e.detail.currentTime)
  56. if( currentTime - position < 1 || item.isFinish ){
  57. return
  58. }
  59. //
  60. if( currentTime - position > 5 ){
  61. let videoContext = wx.createVideoContext('myVideo');
  62. videoContext.seek( position )
  63. wx.showToast({
  64. title: '未完整看完该视频,不能快进',
  65. icon: 'none',
  66. duration: 2000,
  67. })
  68. return;
  69. }else{
  70. item.position= currentTime
  71. }
  72. if( item.position - item.prev_tick > 4 ){
  73. item.prev_tick = item.position;
  74. // 前一秒完成
  75. if( item.prev_tick >= e.detail.duration ){
  76. item.isFinish = 1
  77. }
  78. this.doTick( item )
  79. }
  80. that.setData({item})
  81. },
  82. doTick( item ){
  83. let param = {
  84. id: item.id,
  85. isFinish: item.isFinish||0,
  86. position: item.position,
  87. }
  88. let mediaList = this.data.mediaList;
  89. app.formPost('study.tick', param).then( res => {
  90. if( res.code == 200){
  91. item.isFinish = res.data.isFinish
  92. if( !res.data.skip ){
  93. item.position = res.data.position;
  94. }
  95. mediaList[item.index] = item;
  96. this.setData( {item, mediaList} );
  97. }
  98. })
  99. },
  100. playMedia( e ){
  101. let index = e.currentTarget.dataset.index;
  102. let mediaList = this.data.mediaList
  103. let item = mediaList[index];
  104. item.index = index;
  105. item.prev_tick = item.position
  106. wx.pageScrollTo({
  107. scrollTop: 0,
  108. duration: 1000
  109. })
  110. if( item.url ){
  111. this.setData({onPlay: true, item})
  112. return;
  113. }
  114. app.formPost('study.GetMedia', {id:item.id}).then( res => {
  115. if( res.code == 200){
  116. item.url = res.data
  117. mediaList[index] = item;
  118. this.setData({onPlay: true, item, mediaList})
  119. }
  120. });
  121. },
  122. doWxPay( data ){
  123. let that = this
  124. wx.requestPayment({
  125. timeStamp: data.timeStamp,
  126. nonceStr: data.nonceStr,
  127. package: data.package,
  128. signType: data.signType,
  129. paySign: data.paySign,
  130. success: function (event) {
  131. wx.showModal({
  132. title: '支付成功',
  133. showCancel: false,
  134. content: '本次共支付费用¥'+(data.fee/100)+'元'+ `\n\n试卷更新可能延迟,请耐心等待`,
  135. success(res) {
  136. that.indexLoad()
  137. }
  138. })
  139. }
  140. })
  141. },
  142. startWxpay(e){
  143. let groupId = +e.currentTarget.dataset.id
  144. let system = this.data.system
  145. app.formPost('User.PayExam', {groupId, system}).then(res => {
  146. if (res.code === 200) {
  147. if( res.data.payType=="free" ){
  148. this.indexLoad()
  149. }else if (res.data.payType=="qrcode"){
  150. this.setData({info: res.data, buyModel:true})
  151. }else{
  152. this.doWxPay( res.data )
  153. }
  154. }
  155. })
  156. }
  157. })