// pages/rollCall/rollCall.js const db = wx.cloud.database(); Page({ data: { students: [], currentStudent: null, score: '', effects: [ { name: '+0分', value: 0, type: 'add' }, { name: '+1分', value: 1, type: 'add' }, { name: '+2分', value: 2, type: 'add' }, { name: '+3分', value: 3, type: 'add' }, { name: '+4分', value: 4, type: 'add' }, { name: '+5分', value: 5, type: 'add' }, { name: '-1分', value: -1, type: 'add' }, { name: '-2分', value: -2, type: 'add' }, { name: '积分乘2', value: 2, type: 'multiply' }, { name: '积分除2', value: 0.5, type: 'divide' } ], page: 1, pageSize: 10, hasMore: true }, loadAllStudents: function() { const that = this; const loadNextPage = function() { const studentsCollection = db.collection('users'); studentsCollection.skip((that.data.page - 1) * that.data.pageSize).limit(that.data.pageSize).get({ success: res => { if (res.data.length === 0) { that.setData({ hasMore: false }); return; } let newStudents = that.data.students.concat(res.data); that.setData({ students: newStudents, page: that.data.page + 1 }); // 如果还有更多数据,继续加载下一页 if (that.data.hasMore) { loadNextPage(); } }, fail: err => { console.error('学生数据加载失败:', err); } }); }; loadNextPage(); }, onLoad: function() { this.loadAllStudents(); }, // 按积分加权随机点名 weightedRandomRollCall: function() { const students = this.data.students; if (students.length === 0) { wx.showToast({ title: '没有可点名的学生', icon: 'none', duration: 2000 }); return; } const weights = students.map(student => 1 / (student.score + 1)); const totalWeight = weights.reduce((sum, weight) => sum + weight, 0); const randomWeight = Math.random() * totalWeight; let cumulativeWeight = 0; let selectedStudent = null; for (let i = 0; i < weights.length; i++) { cumulativeWeight += weights[i]; if (cumulativeWeight >= randomWeight) { selectedStudent = students[i]; break; } } if (selectedStudent) { this.setData({ currentStudent: selectedStudent }); console.log(this.data.currentStudent) wx.showToast({ title: `点到:${selectedStudent.name}`, icon: 'none', duration: 2000 }); } else { wx.showToast({ title: '未抽到学生', icon: 'none', duration: 2000 }); } }, // 用户输入分数 inputScore: function(e) { this.setData({ score: e.detail.value }); }, // 更新分数 updatescore: function() { let db = wx.cloud.database() let userCollection = db.collection('users') const xuehao = this.data.currentStudent.num; const inputScore = this.data.score; if (!xuehao || inputScore === '') { wx.showToast({ title: '信息不完整', icon: 'none', duration: 2000 }); return; } const newScore = parseFloat(this.data.currentStudent.score) + parseFloat(inputScore); userCollection.where({ num: xuehao }).update({ data: { score: newScore } }).then(res => { console.log('更新成功'); wx.showToast({ title: '分数更新成功', icon: 'success', duration: 2000 }); }).catch(err => { console.log('更新失败', err); }) }, addHalfScore: function() { if (this.data.currentStudent) { this.updateStudentScore(0.5); } else { wx.showToast({ title: '请先随机点名一个学生', icon: 'none', duration: 2000 }); } }, addoneScore: function() { if (this.data.currentStudent) { this.updateStudentScore(1); } else { wx.showToast({ title: '请先随机点名一个学生', icon: 'none', duration: 2000 }); } }, addoneandhalfScore: function() { if (this.data.currentStudent) { this.updateStudentScore(1.5); } else { wx.showToast({ title: '请先随机点名一个学生', icon: 'none', duration: 2000 }); } }, addtwoScore: function() { if (this.data.currentStudent) { this.updateStudentScore(2); } else { wx.showToast({ title: '请先随机点名一个学生', icon: 'none', duration: 2000 }); } }, addtwoandhalfScore: function() { if (this.data.currentStudent) { this.updateStudentScore(2.5); } else { wx.showToast({ title: '请先随机点名一个学生', icon: 'none', duration: 2000 }); } }, addthreeScore: function() { if (this.data.currentStudent) { this.updateStudentScore(3); } else { wx.showToast({ title: '请先随机点名一个学生', icon: 'none', duration: 2000 }); } }, subtractOneScore: function() { if (this.data.currentStudent) { this.updateStudentScore(-1); } else { wx.showToast({ title: '请先随机点名一个学生', icon: 'none', duration: 2000 }); } }, // 更新选中学生的分数 updateStudentScore: function(amount) { const newScore = parseFloat(this.data.currentStudent.score) + amount; const studentId = this.data.currentStudent._id; const userCollection = db.collection('users'); userCollection.doc(studentId).update({ data: { score: newScore } }).then(res => { console.log('分数更新成功'); wx.showToast({ title: '分数更新成功', icon: 'success', duration: 2000 }); this.setData({ currentStudent: {...this.data.currentStudent, score: newScore.toString()} }); }).catch(err => { console.error('分数更新失败', err); wx.showToast({ title: '分数更新失败', icon: 'none', duration: 2000 }); }); }, applyEffect: function() { if (!this.data.currentStudent) { wx.showToast({ title: '请先随机点名一个学生', icon: 'none', duration: 2000 }); return; } const effect = this.data.effects[Math.floor(Math.random() * this.data.effects.length)]; this.setData({ effect: effect }); let newScore; switch (effect.type) { case 'add': newScore = parseFloat(this.data.currentStudent.score) + effect.value; break; case 'multiply': newScore = parseFloat(this.data.currentStudent.score) * effect.value; break; case 'divide': if (this.data.currentStudent.score === 0) { wx.showToast({ title: '分数不能为0', icon: 'none', duration: 2000 }); return; } newScore = parseFloat(this.data.currentStudent.score) * effect.value; break; default: newScore = this.data.currentStudent.score; } const studentId = this.data.currentStudent._id; const userCollection = db.collection('users'); userCollection.doc(studentId).update({ data: { score: newScore } }).then(res => { console.log('分数更新成功'); wx.showToast({ title: `应用效果:${effect.name}`, icon: 'success', duration: 2000 }); this.setData({ currentStudent: {...this.data.currentStudent, score: newScore.toString()} }); }).catch(err => { console.error('分数更新失败', err); wx.showToast({ title: '分数更新失败', icon: 'none', duration: 2000 }); }); }, //刷新 refreshData: function() { this.loadStudents1(); }, // 加载学生数据 loadStudents1: function() { const studentsCollection = db.collection('users'); studentsCollection.get({ success: res => { if (res.data.length === 0) { wx.showToast({ title: '没有学生数据', icon: 'none', duration: 2000 }); return; } this.setData({ students: res.data, currentStudent: null, effect: null }); }, fail: err => { console.error('学生数据加载失败:', err); } }); }, goBack: function() { wx.navigateTo({ url: '/pages/teacherHomePage/teacherHomePage' }); } });