280 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			280 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| // pages/lianxi/main.js
 | |
| const api = require("../../utils/request.js");
 | |
| var util = require('../../utils/util.js')
 | |
| Page({
 | |
| 
 | |
|   /**
 | |
|    * 页面的初始数据
 | |
|    */
 | |
|   data: {
 | |
|     tms:[],
 | |
|     tm_index: 0,
 | |
|     ctms:[],
 | |
|     domain:getApp().globalData.mediahost,
 | |
|   },
 | |
|   radioChange: function (e) {
 | |
|     var that = this
 | |
|     that.data.tm_current['user_answer'] = e.detail.value
 | |
|     that.data.tms[that.data.tm_index] = that.data.tm_current
 | |
|   },
 | |
|   checkboxChange: function (e) {
 | |
|     var that = this
 | |
|     that.data.tm_current['user_answer'] = e.detail.value
 | |
|     that.data.tms[that.data.tm_index] = that.data.tm_current
 | |
|   },
 | |
|   /**
 | |
|    * 生命周期函数--监听页面加载
 | |
|    */
 | |
|   onLoad: function () {
 | |
|     var that = this
 | |
|     try {
 | |
|       var value = wx.getStorageSync('examtest')
 | |
|       console.log(value)
 | |
|       if (value) {
 | |
|         for(var i=0;i<value.questions.length;i++){
 | |
|           if(value.questions[i].img){
 | |
|             value.questions[i].img = getApp().globalData.mediahost + value.questions[i].img
 | |
|           }
 | |
|         }
 | |
|         that.data.examtest = value
 | |
|         that.data.tms = value.questions
 | |
|         that.setData({
 | |
|           tm_total:value.questions.length
 | |
|         })
 | |
|         that.showTm(that.data.tm_index)
 | |
|       }
 | |
|     } catch (e) { wx.navigateBack({}) }
 | |
|     try {
 | |
|       const res = wx.getSystemInfoSync()
 | |
|       that.setData({
 | |
|         scrollHeight: res.windowHeight - 70
 | |
|       })
 | |
|     } catch (e) {
 | |
|     }
 | |
|     try {
 | |
|       var value = wx.getStorageSync('ctms')
 | |
|       if (value) {
 | |
|         that.data.ctms = value
 | |
|       }
 | |
|     } catch (e) { }
 | |
|     let mil = that.data.examtest.limit * 60 * 1000
 | |
|     let starttimes = (new Date()).getTime() //时间戳
 | |
|     let endtimes = starttimes + mil
 | |
|     that.data.starttimes = starttimes
 | |
|     that.data.endtimes = endtimes
 | |
|     getApp().globalData.timer = setInterval(function () {
 | |
|       that.startPass()
 | |
|     }, 1000)
 | |
|   },
 | |
|   /**
 | |
|    * 生命周期函数--监听页面初次渲染完成
 | |
|    */
 | |
|   onReady: function () {
 | |
| 
 | |
|   },
 | |
| 
 | |
|   /**
 | |
|    * 生命周期函数--监听页面显示
 | |
|    */
 | |
|   onShow: function () {
 | |
|     wx.hideHomeButton({})
 | |
|   },
 | |
| 
 | |
|   /**
 | |
|    * 生命周期函数--监听页面隐藏
 | |
|    */
 | |
|   onHide: function () {
 | |
| 
 | |
|   },
 | |
| 
 | |
|   /**
 | |
|    * 生命周期函数--监听页面卸载
 | |
|    */
 | |
|   onUnload: function () {
 | |
|     clearInterval(getApp().globalData.timer)
 | |
|     try {
 | |
|       wx.setStorageSync('ctms', this.data.ctms)
 | |
|     } catch (e) { }
 | |
|   },
 | |
| 
 | |
|   /**
 | |
|    * 页面相关事件处理函数--监听用户下拉动作
 | |
|    */
 | |
|   onPullDownRefresh: function () {
 | |
| 
 | |
|   },
 | |
| 
 | |
|   /**
 | |
|    * 页面上拉触底事件的处理函数
 | |
|    */
 | |
|   onReachBottom: function () {
 | |
| 
 | |
|   },
 | |
| 
 | |
|   /**
 | |
|    * 用户点击右上角分享
 | |
|    */
 | |
|   onShareAppMessage: function () {
 | |
| 
 | |
|   },
 | |
|   startPass: function () {
 | |
|     var mil = this.data.endtimes - (new Date()).getTime()
 | |
|     if (mil < 2000) {
 | |
|       clearInterval(getApp().globalData.timer)
 | |
|       this.handTest()
 | |
|     };
 | |
|     var temp = util.formatmil(mil);
 | |
|     this.setData({
 | |
|       countdown: temp,
 | |
|     });
 | |
| 
 | |
|   },
 | |
|   showTm: function (index) {
 | |
|     var that = this
 | |
|     var tm_current = that.data.tms[index]
 | |
|     that.setData({
 | |
|       'tm_index': index,
 | |
|       'tm_current': tm_current
 | |
|     })
 | |
|     that.showOptions()
 | |
|   },
 | |
|   panTi: function (tm_current) {
 | |
|     // 返回当前题目是否正确,得分多少
 | |
|     let is_right = false, score = 0
 | |
|     if (tm_current.type == '多选') {
 | |
|       if (tm_current.user_answer) {
 | |
|         if (tm_current.user_answer.sort().toString() == tm_current.right.sort().toString()) {
 | |
|           is_right = true
 | |
|           score = tm_current.total_score
 | |
|         }else{
 | |
|           for(var i=0;i<tm_current.user_answer.length;i++){
 | |
|             if(tm_current.right.indexOf(tm_current.user_answer[i])!=-1){
 | |
|               score = score + 1
 | |
|               if(score==2){
 | |
|                 break;
 | |
|               }
 | |
|             }else{
 | |
|               score = 0
 | |
|               break;
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       }
 | |
| 
 | |
|     } else {
 | |
|       if(tm_current.right == tm_current.user_answer){
 | |
|         is_right = true
 | |
|         score = tm_current.total_score
 | |
|       }
 | |
|     }
 | |
|     return {'is_right':is_right,'score':score}
 | |
|   },
 | |
|   next: function () {
 | |
|     var that = this
 | |
|     var tm_index = that.data.tm_index + 1
 | |
|     that.showTm(tm_index)
 | |
|   },
 | |
|   previous: function () {
 | |
|     var that = this
 | |
|     var tm_index = that.data.tm_index - 1
 | |
|     that.showTm(tm_index)
 | |
|   },
 | |
|   showOptions: function () {
 | |
|     let tm_current = this.data.tm_current
 | |
|     let options = []
 | |
|     for (let key in tm_current.options) {
 | |
|       let option = {}
 | |
|       option.key = key
 | |
|       option.value = tm_current.options[key]
 | |
|       if (tm_current.user_answer) {
 | |
|         if (key == tm_current.user_answer || tm_current.user_answer.indexOf(key) != -1) {
 | |
|           option.checked = true
 | |
|         }
 | |
|       } else {
 | |
|         option.checked = false
 | |
|       }
 | |
|       options.push(option)
 | |
|     }
 | |
|     this.setData({
 | |
|       options: options
 | |
|     })
 | |
|   },
 | |
|   sheet: function () {
 | |
|     wx.navigateTo({
 | |
|       url: 'sheet',
 | |
|     })
 | |
|   },
 | |
|   hand: function () {
 | |
|     var that = this
 | |
|     for (var i = 0, len = that.data.tms.length; i < len; i++) {
 | |
|       let tm = that.data.tms[i]
 | |
|       if (tm.user_answer == undefined || tm.length == 0){
 | |
|         wx.showModal({
 | |
|           title: '警告',
 | |
|           content: '答卷未完成,可点击答题卡复查!',
 | |
|           confirmText: "仍旧提交",
 | |
|           cancelText: "取消",
 | |
|           success: function (res) {
 | |
|             if (res.confirm) {
 | |
|               that.handTest()
 | |
|             }
 | |
|           }
 | |
|         })
 | |
|         return
 | |
|       }
 | |
|     }
 | |
|     wx.showModal({
 | |
|       content: '确定提交?',
 | |
|       confirmText: "确定",
 | |
|       cancelText: "取消",
 | |
|       success: function (res) {
 | |
|         if (res.confirm) {
 | |
|           that.handTest()
 | |
|         }
 | |
|       }
 | |
|     })
 | |
|   },
 | |
|   handTest: function (){
 | |
|     var that = this
 | |
|     clearInterval(getApp().globalData.timer)
 | |
|     wx.showLoading({
 | |
|       title: '正在判卷中...',
 | |
|       mask:true
 | |
|     })
 | |
|     let score = 0;
 | |
|     for (var i = 0, len = that.data.tms.length; i < len; i++) {
 | |
|       let tm_result = that.panTi(that.data.tms[i])
 | |
|       that.data.tms[i].is_right = tm_result.is_right
 | |
|       if (tm_result.is_right == false && that.data.tms[i].user_answer){
 | |
|         that.data.ctms.unshift(that.data.tms[i])
 | |
|           if (that.data.ctms.length > 40) {
 | |
|             that.data.ctms.length = 40
 | |
|           }
 | |
|       }
 | |
|       that.data.tms[i].score = tm_result.score
 | |
|       score = score + tm_result.score
 | |
|     }
 | |
|     that.data.examtest.score = score
 | |
|     if (score >= that.data.examtest.pass_score){
 | |
|       that.data.examtest.is_pass = true
 | |
|     }else{
 | |
|       that.data.examtest.is_pass = false
 | |
|     }
 | |
|     that.data.examtest.questions = that.data.tms
 | |
|     that.data.examtest.start_time = util.formatTime(new Date(that.data.starttimes))
 | |
|     that.data.examtest.end_time = util.formatTime(new Date())
 | |
|     that.data.examtest.took = Math.floor(((new Date()).getTime() - this.data.starttimes) / 1000)
 | |
|     api.request('/examtest/examtest/', 'POST', that.data.examtest).then(res => {
 | |
|       wx.hideLoading()
 | |
|       getApp().globalData.testData = res.data
 | |
|       try {
 | |
|         wx.removeStorageSync('examtest')
 | |
|       } catch (e) {
 | |
|       }
 | |
|       wx.redirectTo({
 | |
|         url: 'result',
 | |
|       })
 | |
|       
 | |
|     })
 | |
|   }
 | |
| }) |