You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

218 lines
7.9 KiB

1 month ago
import { toast } from '../../utils/extendApi'
import { getStorage, setStorage } from '../../utils/storage'
//导入ComponentWithStore方法
import { ComponentWithStore } from 'mobx-miniprogram-bindings'
import { userStore } from '../../stores/userstore'
import { configure } from 'mobx-miniprogram'
// pages/upteach/upteach.js
ComponentWithStore({
storeBindings: {
store: userStore,
fields: ['id', 'identify'],//从Store中获取id和identify存放在页面的data里
actions: []
},
data: {
LessonStatus: 0,
Roll_Method: 0,
Pick_Rule: [
'',
'积分低者概率up',
'与日期奇偶相同学号者概率up'
],
score: 0,
stu_no: '',
status_roll:0,//点名状态初始化为0
status_roll_string:'',//将status_roll转为文本
texts: [], // 存储从后端获取的数组
displayText: '', // 当前显示的文本(滚动时显示随机文本,停止时显示最终结果)
// finalResult: '', // 最终要显示的点名结果
animation: {}, // 动画数据
animationData: {}, // 动画实例
intervalId: null, // 动画定时器ID后面在轮询函数StartPolling函数中设置了另外一个定时器intervalId2
timeoutId: null, // 超时ID
LessonName:''
},
methods: {
onLoad:function(){
this.setData({
LessonName:getStorage('LessonName'),
status_roll:0
})
this.fetchTexts();
},
// <!-- 点击按钮触发事件向服务器发送请求更新该课程的上下课状态并变更LessionStatus值
OnLession() {
// 请求开始上课只发送LessionId让服务器去更新该课程的状态为上课中。调用函数成功则将本地的LessionStatus更新成1让按钮显示条件改变
wx.request({
url: `http://172.20.10.2:8600/teacher-api/teacher/classstart/${getStorage('LessonId')}`, // 请替换成
success: (res) => {
if (res.data != null && res.data.code === 200) {
toast({ title: '开始上课', icon: 'success' });
this.setData({
LessonStatus: 1,
})
} else {
console.error('上课失败,系统出错:', res.data);
toast({ title: '系统出错', icon: 'error' });
}
},
fail(err) {
console.error('上课请求失败:', err);
}
});
},
OffLession() {
// 请求结束上课只发送LessionId让服务器去更新该课程的状态为未上课。调用函数成功则将本地的LessionStatus更新成0让按钮显示条件改变
wx.request({
url: `http://172.20.10.2:8600/teacher-api/teacher/classend/${getStorage('LessonId')}`, // 请替换成实际的接口地址
method: 'GET',
success: (res) => {
if (res.data != null && res.data.code === 200) {
console.log('结束上课:', res.data);//'true' or 'false'
toast({ title: '结束上课', icon: 'success' });
this.setData({
LessonStatus: 0,
});
wx.switchTab({
url: '/pages/home/home',
})
//如果显示有问题的话使用set
} else {
console.error('结束上课请求失败,系统出错:', res.data);
toast({ title: '系统出错', icon: 'error' });
}
},
fail(err) {
console.error('上课请求失败:', err);
}
});
},
PickStudent() {
//进行抽点
this.setData({
Roll_Method: this.getRandomInt(1, 2) // 生成1到5之间的随机整数
});
console.log(this.data.Roll_Method); // 注意使用 this.data 来访问已设置的数据
wx.request({
url: `http://172.20.10.2:8600/student-api/student/classroll/${getStorage('LessonId')}/${this.data.Roll_Method}`, // 请替换成实际的接口地址
method: 'GET',
success: (res) => {
if (res.data != null && res.data.code === 200) {
console.log('抽点请求发送成功:', res.data);//'true' or 'false'
toast({ title: '抽点成功', icon: 'success' });
//点名结束,保留点名规则
this.setData({
stu_no: res.data.data,
status_roll: res.data.data
//保留学生学号
})
this.startScrolling()
// this.setData({
// LessionStatus: 0
// })
//如果显示有问题的话使用set
} else {
console.error('抽点请求发送失败,系统出错:', res.data);
toast({ title: '系统出错', icon: 'error' });
}
},
fail(err) {
console.error('抽点失败:', err);
}
});
},
//加分函数
AddScore() {
wx.request({
url: `http://172.20.10.2:8600/student-api/student/comment/${getStorage('LessonId')}/${this.data.stu_no}/${this.data.score}`, // 请替换成
success: (res) => {
if (res.data.code === 200) {
toast({ title: '加分成功', icon: 'success' });
this.setData({
stu_no: '' //置零
})
} else {
console.error('加分失败,系统出错:', res.data);
toast({ title: '加分失败,系统出错', icon: 'error' });
}
},
fail(err) {
console.error('请求失败:', err);
}
});
},
// 在页面的JS文件中定义函数
getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
},
handleInput: function (e) {
this.setData({
score: e.detail.value
})
},
fetchTexts: function () {
const self = this;
wx.request({
url: `http://172.20.10.2:8600/student-api/student/getnolist/${getStorage('LessonId')}`, // 替换为实际的后端API地址
method: 'GET',
success: function (res) {
if (res.data && res.data.code === 200 && Array.isArray(res.data.data)) {
self.setData({ texts: res.data.data });
} else {
console.error('从后端获取文本数组失败:', res);
}
},
fail: function (err) {
console.error('函数调用失败:', err);
}
});
},
startScrolling: function () {
const self = this;
const texts = this.data.texts;
if (texts.length === 0) return;
let currentIndex = Math.floor(Math.random() * texts.length); // 随机初始化当前索引
self.setData({ displayText: texts[currentIndex] });
this.data.intervalId = setInterval(function () {
currentIndex = (currentIndex + 1) % texts.length; // 更新索引
self.setData({ displayText: texts[currentIndex] }); // 更新显示的文本
}, 300); // 假设每300ms切换一次文本可以根据需要调整速度
// 设置一个超时,在指定时间后停止滚动
const autoStopTime = 3000; // 例如5秒后停止
this.data.timeoutId = setTimeout(function () {
self.stopScrollingAndShowResult();
}, autoStopTime);
},
//停止滚动
stopScrollingAndShowResult: function () {
clearInterval(this.data.intervalId); // 停止定时器
clearTimeout(this.data.timeoutId); // 清除超时设置,以防多次触发
const texts = this.data.texts;
const finalIndex = this.data.status_roll // 本地的roll值代表被抽中的学号
this.setData({
status_roll_string : this.data.status_roll.toString() ,
// finalResult: texts[finalIndex] // 存储最终结果如果需要后续使用和data{}配合使用
});
this.setData({
displayText: this.data.status_roll_string, // 更新显示文本为最终结果
})
},
}
})