From 4bc9b41d7ed6481ec005189ce44c845bdd8ff352 Mon Sep 17 00:00:00 2001 From: pg78ac9nr <2401677463@qq.com> Date: Thu, 10 Oct 2024 12:30:05 +0800 Subject: [PATCH] ADD file via upload --- 2.0 pages rollcall.js | 178 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 2.0 pages rollcall.js diff --git a/2.0 pages rollcall.js b/2.0 pages rollcall.js new file mode 100644 index 0000000..3074d31 --- /dev/null +++ b/2.0 pages rollcall.js @@ -0,0 +1,178 @@ +const db = wx.cloud.database(); +const app = getApp(); + +Page({ + data: { + students: [], + selectedStudent: null, + score: '' + }, + + onLoad: function() { + this.getStudents(); + }, +// 获取学生列表 +getStudents: function() { + const MAX_LIMIT = 20; + db.collection('students').count().then(res => { + const total = res.total; + const batchTimes = Math.ceil(total / MAX_LIMIT); + const tasks = []; + for (let i = 0; i < batchTimes; i++) { + const promise = db.collection('students').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get(); + tasks.push(promise); + } + Promise.all(tasks).then(results => { + const students = results.reduce((acc, cur) => { + return acc.concat(cur.data); + }, []); + this.setData({ + students: students + }); + app.globalData.students = students; + console.log('Students retrieved:', students); + }).catch(err => { + console.error('Failed to get students:', err); + wx.showToast({ + title: '获取学生信息失败', + icon: 'none' + }); + }); + }).catch(err => { + console.error('Failed to count students:', err); + wx.showToast({ + title: '获取学生数量失败', + icon: 'none' + }); + }); +}, + + + // 随机点名 +randomRollCall: function() { + const students = this.data.students; + if (students.length === 0) { + wx.showToast({ + title: '没有学生信息', + icon: 'none' + }); + return; + } + + const totalPoints = students.reduce((sum, student) => sum + Math.max(0, 10 - student.points), 0); + let randomPoint = Math.random() * totalPoints; + let cumulativePoint = 0; + + let selectedStudent = null; + for (const student of students) { + cumulativePoint += Math.max(0, 10 - student.points); + if (randomPoint <= cumulativePoint) { + selectedStudent = student; + break; + } + } + + if (selectedStudent) { + this.setData({ + selectedStudent: selectedStudent + }); + wx.showModal({ + title: '点名成功', + content: `点到的同学是:${selectedStudent.name} (${selectedStudent.id})`, + showCancel: false + }); + // 触发双倍积分事件 + this.triggerDoublePointsEvent(selectedStudent); + + // 更新积分 + this.updatePoints(1); // 到达课堂积分+1 + } else { + wx.showToast({ + title: '点名失败', + icon: 'none' + }); + } +}, + +// 触发双倍积分事件 +triggerDoublePointsEvent: function(student) { + const probability = 0.1; // 10%的概率触发双倍积分 + if (Math.random() < probability) { + this.setData({ + doublePoints: true + }); + wx.showToast({ + title: '双倍积分!', + icon: 'success' + }); + } else { + this.setData({ + doublePoints: false + }); + } +}, + +// 输入评分 +inputScore: function(e) { + this.setData({ + additionalScore: parseFloat(e.detail.value) + }); +}, + +// 更新积分 +updatePoints: function() { + const student = this.data.selectedStudent; + let score = 1; // 到达课堂积分+1 + + // 判断是否能准确重复所提问的问题 + if (this.data.questionRepeatedCorrectly) { + score += 0.5; + } else { + score -= 1; + } + + // 如果准确回答问题,输入要加的分数 + if (this.data.questionRepeatedCorrectly) { + score += this.data.additionalScore; + } + console.log('Updating student points:', student._id, student.points); // 调试 + // 如果触发双倍积分事件,积分加倍 + if (this.data.doublePoints) { + score *= 2; + } + + student.points += score; + + db.collection('students').doc(student._id).update({ + data: { + points: student.points + } + }).then(() => { + console.log('Student points updated successfully'); // 调试 + this.getStudents(); + wx.showToast({ + title: '评分成功', + icon: 'success' + }); + }).catch(err => { + console.error('Failed to update student points:', err); + wx.showToast({ + title: '评分失败', + icon: 'none' + }); + }); +}, + +// 设置回答问题的情况 +setQuestionRepeatedCorrectlyTrue: function() { + this.setData({ + questionRepeatedCorrectly: true + }); +}, + +setQuestionRepeatedCorrectlyFalse: function() { + this.setData({ + questionRepeatedCorrectly: false + }); +} +}); \ No newline at end of file