ADD file via upload

1.0
pg78ac9nr 2 months ago
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…
Cancel
Save