parent
a7b05a8916
commit
4bc9b41d7e
@ -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
|
||||
});
|
||||
}
|
||||
});
|
Loading…
Reference in new issue