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.
317 lines
8.9 KiB
317 lines
8.9 KiB
// 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");
|
|
const Message = require("../../model/message");
|
|
const Grade = require("../../model/grade");
|
|
const Presence = require("../../model/presence");
|
|
const app = getApp();
|
|
|
|
Page({
|
|
students: [],
|
|
presences: [],
|
|
my_presence: null,
|
|
data: {
|
|
course: null,
|
|
loading: true,
|
|
students: [],
|
|
select_stu_login:"",
|
|
message_text: "",
|
|
messages: [],
|
|
show_conversation: true
|
|
},
|
|
enter_mark_detail({currentTarget:{dataset}}){
|
|
wx.navigateTo({
|
|
url: '../mark_detail/mark_detail?course_id='+this.course_id,
|
|
})
|
|
},
|
|
pull_messages: function(){
|
|
let query = new AV.Query("Message");
|
|
query.equalTo("edu_course_id", this.course_id);
|
|
const set_messages = this.set_messages.bind(this);
|
|
return AV.Promise.all([query.find().then(set_messages), query.subscribe()]).then(([messages, subscription]) => {
|
|
this.messageSubscription = subscription;
|
|
if (this.messageUnbind) this.messageUnbind();
|
|
this.messageUnbind = bind(subscription, messages, set_messages);
|
|
}).catch(error => console.error(error.message));
|
|
},
|
|
set_messages: function(messages){
|
|
console.log("set_messages");
|
|
messages = messages.map(message=>{
|
|
let sender_login = message.edu_account_login;
|
|
let senders_ = this.students.filter(student=>student.login==sender_login)
|
|
if(senders_.length==1){
|
|
message.set("sender_name", senders_[0]["name"]);
|
|
}
|
|
return message;
|
|
})
|
|
console.log(jsonify({ messages }));
|
|
this.setData(jsonify({messages}));
|
|
return messages;
|
|
},
|
|
send_message:function(event){
|
|
let {message_text} = this.data;
|
|
if(message_text.trim()==""){return;}
|
|
let message = new Message({
|
|
text: message_text,
|
|
edu_account_login: this.current_user.login,
|
|
edu_course_id: this.course_id,
|
|
sender_name: this.current_user.real_name||"未命名",
|
|
});
|
|
message.save().then(()=>{
|
|
this.setData({message_text: ""});
|
|
console.log("send_message")
|
|
}).catch(console.error);
|
|
},
|
|
close_conversation: function(event){
|
|
console.log("close conversation");
|
|
console.log(event);
|
|
this.setData({show_conversation: false});
|
|
this.messageSubscription.unsubscribe();
|
|
this.messageUnbind();
|
|
},
|
|
update_message:function({detail:{value}}){
|
|
this.setData({message_text: value});
|
|
},
|
|
select_stu: function(event){
|
|
let login = event.currentTarget.dataset.login;
|
|
console.log(event);
|
|
this.setData({select_stu_login: login});
|
|
console.log(this.data.select_stu_login);
|
|
},
|
|
set_isasking: function(event){
|
|
let login = event.currentTarget.dataset.login;
|
|
let status = event.currentTarget.dataset.status;
|
|
console.log("set_isasking");
|
|
let asking_presence = this.presences.filter(presence=>presence.get("edu_account_login")==login)[0];
|
|
console.log(asking_presence);
|
|
asking_presence.isasking = status;
|
|
wx.showLoading({
|
|
title: '请稍候',
|
|
});
|
|
asking_presence.save().then(()=>{
|
|
wx.hideLoading();
|
|
}, ()=>{
|
|
wx.hideLoading();
|
|
wx.showToast({
|
|
title: '操作失败',
|
|
icon: "none"
|
|
})
|
|
});
|
|
},
|
|
add_mark: function(event){
|
|
console.log("add_mark");
|
|
let login = event.currentTarget.dataset.login;
|
|
let mark = event.currentTarget.dataset.mark;
|
|
console.log(this.presences);
|
|
let presence = this.presences.filter(presence => presence.get("edu_account_login") == login)[0];
|
|
if(presence==null){
|
|
console.warn("没有学生Presence");
|
|
presence = new Presence({
|
|
edu_account_login: login,
|
|
edu_course_id: this.course_id,
|
|
present: false,
|
|
mark: 0
|
|
})
|
|
}
|
|
presence.increment("mark", mark);
|
|
var grade = new Grade();
|
|
console.log(grade);
|
|
grade.edu_account_login = login;
|
|
grade.edu_course_id = this.course_id;
|
|
grade.mark = mark;
|
|
presence.save().then(()=>{grade.save()}).then(()=>{
|
|
wx.showToast({
|
|
title: '操作成功',
|
|
icon:"none"
|
|
})
|
|
}
|
|
).catch(console.error);
|
|
},
|
|
|
|
pull_presence: function(){
|
|
let query = new AV.Query("Presence");
|
|
query.equalTo("edu_course_id", this.course_id);
|
|
const set_presence = this.set_presence.bind(this);
|
|
return AV.Promise.all([query.find().then(set_presence), query.subscribe()]).then(([presences, subscription])=>{
|
|
this.presenceSubscription = subscription;
|
|
if(this.presenceUnbind) this.presenceUnbind();
|
|
console.log("show set_presence");
|
|
console.log(presences);
|
|
console.log(set_presence);
|
|
this.presenceUnbind = bind(subscription, presences, set_presence);
|
|
})
|
|
},
|
|
set_presence: function(presences){
|
|
this.presences = presences;
|
|
console.log("set_presence");
|
|
console.log(presences);
|
|
//console.log("Set_presence");
|
|
//console.log(this);
|
|
let students = this.students.concat().map(student=>{
|
|
student["mark"]=0;
|
|
student["isasking"]=0;
|
|
student["present"]=false;
|
|
return student;
|
|
});//拷贝
|
|
for(var presence of presences){
|
|
let student_login = presence.get("edu_account_login");
|
|
if(presence.edu_account_login==this.current_user.login){
|
|
this.my_presence = presence;
|
|
}
|
|
for(var i=0;i<students.length;i++){
|
|
if(students[i].login==student_login){
|
|
students[i]["present"] = presence.present;
|
|
students[i]["isasking"] = presence.isasking;
|
|
students[i]["mark"] = presence.mark;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
console.log(students);
|
|
this.setData({students: students});
|
|
return presences;
|
|
},
|
|
|
|
/**new api below: */
|
|
pull_course: function(){
|
|
return app.client.get_course_info({course_id: this.course_id})
|
|
.then(res=>{
|
|
this.setData({course: res.data});
|
|
wx.setNavigationBarTitle({
|
|
title: this.data.course.name
|
|
})
|
|
}).catch(console.error);
|
|
},
|
|
pull_students: function(){
|
|
return app.client.get_course_students({course_id: this.course_id})
|
|
.then(res=>{
|
|
this.students = res.data.students;
|
|
}).catch(console.error);
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面加载
|
|
*/
|
|
onLoad: function (options) {
|
|
this.course_id = options.id;
|
|
this.current_user = app.client.current_user;
|
|
wx.showLoading({
|
|
title: '加载中',
|
|
});
|
|
this.pull_course();
|
|
this.pull_students()
|
|
.then(()=>{
|
|
this.pull_presence()
|
|
.then(() => {
|
|
if (this.my_presence == null) {
|
|
this.my_presence = new Presence({
|
|
edu_account_login: this.current_user.login,
|
|
edu_course_id: this.course_id,
|
|
present: true
|
|
});
|
|
this.my_presence.save();
|
|
}else{
|
|
this.my_presence.enter();
|
|
}
|
|
})
|
|
.then(() => {
|
|
wx.hideLoading();
|
|
this.setData({ loading: false });
|
|
})
|
|
.catch(error => {
|
|
console.error(error);
|
|
wx.hideLoading();
|
|
wx.showToast({
|
|
title: '加载失败,请刷新重试',
|
|
icon: "none"
|
|
})
|
|
});
|
|
});
|
|
|
|
this.pull_messages();
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面初次渲染完成
|
|
*/
|
|
onReady: function () {
|
|
console.log("onReady");
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面显示
|
|
*/
|
|
onShow: function () {
|
|
console.log("onShow");
|
|
if(this.my_presence){
|
|
console.log("enter class when onShow");
|
|
this.my_presence.enter();
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面隐藏
|
|
*/
|
|
onHide: function () {
|
|
this.my_presence.leave();
|
|
console.log("onHide");
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面卸载
|
|
*/
|
|
onUnload: function () {
|
|
this.my_presence.leave();
|
|
console.log("onUnload");
|
|
this.presenceSubscription.unsubscribe();
|
|
this.presenceUnbind();
|
|
this.messageSubscription.unsubscribe();
|
|
this.messageUnbind();
|
|
},
|
|
|
|
/**
|
|
* 页面相关事件处理函数--监听用户下拉动作
|
|
*/
|
|
onPullDownRefresh: function () {
|
|
this.pull_course();
|
|
this.pull_students()
|
|
.then(()=>{
|
|
this.pull_presence().then(() => {
|
|
if (this.my_presence == null) {
|
|
this.my_presence = new Presence({
|
|
edu_account_login: this.current_user.login,
|
|
edu_course_id: this.course_id,
|
|
present: true
|
|
});
|
|
this.my_presence.save();
|
|
} else {
|
|
this.my_presence.enter();
|
|
}
|
|
}).then(()=>{
|
|
this.setData({loading: false});
|
|
}).catch(error => {
|
|
console.error(error);
|
|
wx.showToast({
|
|
title: '加载失败,请刷新重试',
|
|
icon: "none"
|
|
})
|
|
});
|
|
});
|
|
this.pull_messages();
|
|
},
|
|
|
|
/**
|
|
* 页面上拉触底事件的处理函数
|
|
*/
|
|
onReachBottom: function () {
|
|
|
|
},
|
|
|
|
/**
|
|
* 用户点击右上角分享
|
|
*/
|
|
onShareAppMessage: function () {
|
|
console.log("onShareAppMessage");
|
|
}
|
|
}); |