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.

181 lines
5.0 KiB

5 years ago
// pages/classroom/classroom.js
const AV = require("../../lib/av-live-query-weapp-min")
const { jsonify } = require('../../utils/leancloudutils');
const bind = require("../../lib/live-query-binding")
Page({
/**
页面的初始数据
students: 该课程所有的学生
元素student
student.objectId 该学生的主键唯一
student.username 学生的用户名是唯一就像微信号一样
student.name 学生的姓名
student.present 是否出席
student.isasking :0:没有提问,1:提问,2:请回答
*/
presence: null,
students: [],
class: null,
class_id: null,
data: {
//以下数据的同步由该代码文件实现数据的呈现由classroom.wxml实现
students: [], // 该课程所有的学生, 元素类型见上文中的student
current_user: null, //目前登陆的用户,类型为对象属性有objectIdusername, name
teacher: null,
//该课程教员,类型为对象
//请在进入界面时判断用户是否为教员以给与权限或更改界面
//属性如下objectId, username, name
class_name: "", //课程名称
class_id: "", //该课程的主键(编号)
},
sco1: function () {
//打1分的函数
},
sco2: function () {
//打2分的函数
},
sco3: function () {
//打3分的函数
},
ask: function () {
//学生提问的函数
},
rep: function () {
//点这个学生要回答他问题的函数
},
5 years ago
pull_present: function(){
var query = new AV.Query("Presence");
//console.log(this.class);
query.equalTo("class", this.class);
query.include("user");
set_present = this.set_present.bind(this);
return AV.Promise.all([query.find().then(set_present), query.subscribe()]).then(([presents, subscription])=>{
this.PresentSubscription = subscription;
if(this.presentUnbind) this.presentUnbind();
this.presentUnbind = bind(subscription, presents, set_present);
}).catch(error=> console.error(error.message));
},
set_present: function(presents){
//console.log("set_present");
//console.log(presents);
var is_asking={};
var present_stu_ids = presents.map((present)=>{
user = present.get("user");
is_asking[user.id]=present.get("isasking");
return user.id;
});
students = this.students.map((student)=>{
if(present_stu_ids.indexOf(student.id)>-1){
student.set("ispresent",true);
student.set("isasking", is_asking[student.id]);
}else{
student.set("ispresent",false);
student.set("isasking", 0);
}
return student;
})
this.setData(jsonify({students}));
return presents;
},
fetch_class: function(class_id){
this.class = AV.Object.createWithoutData("Class_", class_id);
return this.class.fetch().then((class_) => {
//console.log(this.class);
this.setData({
class_name: this.class.get("name"),
class_id: this.class.get("objectId")
});
}).catch(error=>console.error(error.message))
},
fetch_students: function(){
//console.log("fetch_students");
var query = new AV.Query("StudentClassMap");
query.equalTo("class", this.class);
query.include("user");
//console.log("fetch_students2")
return query.find();
},
set_students: function(studentClassMaps){
//console.log("set_students");
var students = []
studentClassMaps.forEach((scm, idx, a)=>{
console.log(a);
students.push(scm.get("user"));
});
this.students = students;
console.log("this.students");
console.log(students);
this.setData(jsonify((students)));
return students;
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
this.class_id = options.class_id;
//this.class = AV.Object.createWithoutData("Class_", this.class_id);
this.fetch_class.bind(this)(this.class_id).then(this.fetch_students).then(this.set_students.bind(this)).then(this.pull_present.bind(this));
console.log("onLoad");
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
console.log("onReady");
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
console.log("onShow");
console.log("enter class when onShow");
console.log(AV.User.current());
this.class.enter();
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
this.class.leave();
console.log("onHide");
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
this.class.leave();
console.log("onUnload");
this.PresentSubscription.unsubscribe();
this.presentUnbind();
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
this.pull_present.bind(this)();
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
console.log("onShareAppMessage");
}
})