index.js 3.9 KB

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