index.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. import {
  2. formatSeconds
  3. } from '../../../utils/util.js'
  4. let app = getApp()
  5. let mulSelect = 3
  6. Page({
  7. data: {
  8. list: [],
  9. redo: false,
  10. preList:["A","B","C", "D","E","F"],
  11. info:{},
  12. id:0,
  13. timer: null,
  14. doTime: 0,
  15. remainTime: 0,
  16. remainTimeStr: '',
  17. modalShow: false,
  18. result: {},
  19. startTime: "",
  20. timeOutShow: false
  21. },
  22. onLoad: function(options) {
  23. let groupId = +options.id||3
  24. let redo = !!options.redo;
  25. this.setData({redo})
  26. let method = redo?'Exam.examreStart':'Exam.examStart';
  27. let _this = this
  28. let oindex = [2,3,1]
  29. app.formPost(method, {groupId}).then(res => {
  30. if (res.code ==200) {
  31. let {startTime, info, list} = res.data;
  32. let duration = info.duration
  33. list = list.map(item=>{
  34. delete( item["select"])
  35. return item
  36. }).sort( (i,j) =>{
  37. return oindex.indexOf(i.type) > oindex.indexOf(j.type)?1:-1;
  38. })
  39. console.log( list.map( item=>{ return item.type}) )
  40. wx.setNavigationBarTitle({
  41. title: info.title+'-模拟考试'
  42. })
  43. _this.setData({
  44. list: list,
  45. info: info,
  46. startTime: startTime,
  47. remainTime: duration
  48. });
  49. _this.timeReduce()
  50. }
  51. })
  52. },
  53. timeReduce() {
  54. let _this = this
  55. let timer = setInterval(function() {
  56. let remainTime = _this.data.remainTime
  57. if (remainTime <= 0) {
  58. _this.timeOut()
  59. } else {
  60. _this.setData({
  61. remainTime: remainTime - 1,
  62. remainTimeStr: formatSeconds(remainTime),
  63. doTime: _this.data.doTime + 1
  64. });
  65. }
  66. }, 1000)
  67. _this.setData({
  68. timer: timer
  69. });
  70. },
  71. onUnload() {
  72. clearInterval(this.data.timer)
  73. },
  74. returnRecord() {
  75. let id = this.data.id;
  76. wx.navigateTo({
  77. url: `/pages/exam/read/index?id=${id}`
  78. })
  79. },
  80. timeOut() {
  81. clearInterval(this.data.timer)
  82. this.setData({
  83. timeOutShow: true
  84. });
  85. },
  86. radioChange( e ){
  87. let index = e.currentTarget.dataset.index;
  88. let list = this.data.list
  89. list[index].select = +e.detail.value
  90. console.log("select", index, list[index].select )
  91. this.setData( {list} );
  92. },
  93. checkboxChange( e ){
  94. let index = e.currentTarget.dataset.index;
  95. let list = this.data.list
  96. list[index].select = +e.detail.value.sort().join("")
  97. console.log("select", index, list[index].select)
  98. this.setData( {list} );
  99. },
  100. formSubmit: function(e) {
  101. let _this = this
  102. let force = this.data.remainTime < 3;
  103. let isFinish = true;
  104. wx.showLoading({
  105. title: '提交中',
  106. mask: true
  107. })
  108. let info = this.data.info;
  109. let param ={};
  110. param.groupId = info.groupId;
  111. param.paperId = info.paperId;
  112. param.answers = [];
  113. param.result = [];
  114. param.correct = 0;
  115. param.counter = this.data.list.length
  116. param.groupName = info.title;
  117. param.useTime = this.data.doTime
  118. param.duration = info.duration
  119. param.startTime = this.data.startTime;
  120. let errIds = [];
  121. for( let i=0; i< this.data.list.length; i++){
  122. let item = this.data.list[i];
  123. param.answers.push( item.answerId );
  124. param.result.push( item.select || 0);
  125. if( item.select == item.result){
  126. param.correct += 1
  127. }else{
  128. errIds.push( item.answerId)
  129. }
  130. if( !item.select ) isFinish = false
  131. }
  132. // if( !isFinish && !force){
  133. // app.message("还未完成", 'error')
  134. // wx.hideLoading()
  135. // return
  136. // }
  137. param.result = param.result.join(",")
  138. param.answers = param.answers.join(",")
  139. param.errors = errIds.join(",")
  140. param.isRedo = this.data.redo?1:0;
  141. app.formPost('Exam.ExamSubmit', param).then(res => {
  142. if (res.code === 200) {
  143. _this.setData({
  144. id: res.data.id,
  145. modalShow: true,
  146. result:param,
  147. });
  148. if (this.data.timer) {
  149. clearInterval(this.data.timer)
  150. }
  151. } else {
  152. app.message(res.msg, 'error')
  153. }
  154. wx.hideLoading()
  155. })
  156. }
  157. })