index.js 3.6 KB

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