From bf2aaac3b16f352990be3fb0d6745bc4a3887a4f Mon Sep 17 00:00:00 2001 From: educoder_weapp Date: Sun, 20 Oct 2019 16:19:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E8=A1=A5=E4=BA=86=E4=B8=80=E4=BA=9Bbu?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 6 +- app.json | 2 +- model/class.js | 16 +---- model/grade.js | 2 - model/presence.js | 23 +++++++ model/studentclassmap.js | 14 +++- pages/classes/classes.js | 6 +- pages/classroom/classroom.js | 121 ++++++++++++++++++--------------- pages/classroom/classroom.wxml | 3 +- 9 files changed, 114 insertions(+), 79 deletions(-) diff --git a/app.js b/app.js index ccedb93..d325da7 100644 --- a/app.js +++ b/app.js @@ -1,7 +1,7 @@ //app.js //导入leancloud库,与后台交互 const AV = require('./lib/av-live-query-weapp-min'); - +const login = require("./model/user"); //初始化 AV.init({ appId: 'eVHYNBdT5D2lDxNj5jtJXsWT-MdYXbMMI', @@ -17,5 +17,9 @@ App({ }, onLaunch () { console.log('App.onLaunch()'); + login().then((user) => { + console.log(user); + console.log(AV.User.current()); + }); } }); \ No newline at end of file diff --git a/app.json b/app.json index aad6154..cd58d30 100644 --- a/app.json +++ b/app.json @@ -1,5 +1,6 @@ { "pages": [ + "pages/classes/classes", "pages/index/index", "pages/config/config", "pages/https/https", @@ -8,7 +9,6 @@ "pages/game/game", "pages/shouquan/shouquan", "pages/outside/outside", - "pages/classes/classes", "pages/classroom/classroom" ], "window": { diff --git a/model/class.js b/model/class.js index b8d0e97..2e47aca 100644 --- a/model/class.js +++ b/model/class.js @@ -20,21 +20,9 @@ class Class extends AV.Object{ this.remove(user.id); } } - enter() { - this.leave(); - console.log("class.enter"); - console.log(AV.User.current()); - this._presence = new Presence({ - user: AV.User.current(), - class: this - }); - this._presence.save(); + set_asking(status){ + return this._presence.set("isasking", status).save() } - leave() { - if (this._presence != null) { - this._presence.destroy(); - } - } present_students() { var query = new AV.Query("Presence"); //query.equalTo("class", this._class.id); diff --git a/model/grade.js b/model/grade.js index 53d936b..d88fa83 100644 --- a/model/grade.js +++ b/model/grade.js @@ -14,11 +14,9 @@ class Grade extends AV.Object { set student(value){ this.set("student". value); } - get class() { return this.get('class'); } - set class(value){ this.set("class", value); } diff --git a/model/presence.js b/model/presence.js index a7add19..6e5ae65 100644 --- a/model/presence.js +++ b/model/presence.js @@ -19,6 +19,29 @@ class Presence extends AV.Object{ get isasking(){ return this.get("isasking"); } + get present(){ + return this.get("present"); + } + set present(value){ + this.set("present", value); + } + get mark() { + return this.get('done'); + } + set mark(value) { + this.set('mark', value); + } + add_mark(value) { + this.increment(value); + } + enter(){ + console.log("presence.enter"); + console.log(this); + this.set("present", true).save().catch(error=>console.error(error.message)); + } + leave(){ + this.set("present", false).save() + } } AV.Object.register(Presence, "Presence"); diff --git a/model/studentclassmap.js b/model/studentclassmap.js index ccecdda..79dbbb3 100644 --- a/model/studentclassmap.js +++ b/model/studentclassmap.js @@ -14,4 +14,16 @@ class StudentClassMap extends AV.Object{ set user(value){ this.set("user", value); } -} \ No newline at end of file + get mark() { + return this.get('done'); + } + set mark(value) { + this.set('mark', value); + } + add_mark(value) { + this.increment(value); + } +} + +AV.Object.register(StudentClassMap, "StudentClassMap"); +module.exports=StudentClassMap; \ No newline at end of file diff --git a/pages/classes/classes.js b/pages/classes/classes.js index cfca575..1bc8b10 100644 --- a/pages/classes/classes.js +++ b/pages/classes/classes.js @@ -10,7 +10,6 @@ const getDataForRender = class_ => ({ }); Page({ - /** 页面的初始数据data,用于与.wxlm文件绑定 classes: 课程列表 type: Array @@ -37,10 +36,7 @@ Page({ * 生命周期函数--监听页面加载 */ onLoad: function (options) { - login().then((user)=>{ - console.log(user); - console.log(AV.User.current()); - }); + }, /** diff --git a/pages/classroom/classroom.js b/pages/classroom/classroom.js index 8952d3d..2e9ebcf 100644 --- a/pages/classroom/classroom.js +++ b/pages/classroom/classroom.js @@ -15,9 +15,13 @@ Page({ student.isasking :0:没有提问,1:提问,2:请回答 */ presence: null, + origin_presences: [], students: [], class: null, + presences : [], class_id: null, + asking_presence: null, + my_presence: null, data: { //以下数据的同步由该代码文件实现,数据的呈现由classroom.wxml实现 students: [], // 该课程所有的学生, 元素类型见上文中的student @@ -38,88 +42,95 @@ Page({ sco3: function () { //打3分的函数 }, - ask: function () { + ask: function (event) { //学生提问的函数 + console.log(event); + set_asking() }, - rep: function () { + rep: function (event) { + console.log(event); //点这个学生要回答他问题的函数 }, + set_asking: function(userid, status){ + this.asking_present = this.presents.filter(present=>present.get("user").id==userid)[0]; + this.asking_present.isasking = status; + this.asking_present.save(); + }, + add_mark: function(mark){ + if(this.asking_present==null){ + console.warn("没有选择学生"); + }else{ + user = this.asking_present.get("user"); + studentClassMap = this.studentClassMaps.filter(studentClassMap=>studentClassMap.get("user")) + } + }, - pull_present: function(){ + pull_presence: 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])=>{ + set_presence = this.set_presence.bind(this); + return AV.Promise.all([query.find().then(set_presence), query.subscribe()]).then(([presents, subscription])=>{ this.PresentSubscription = subscription; if(this.presentUnbind) this.presentUnbind(); - this.presentUnbind = bind(subscription, presents, set_present); + this.presentUnbind = bind(subscription, presents, set_presence); }).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]); + set_presence: function(presences){ + console.log("set_presence"); + console.log(presences); + this.presences = presences; + students = this.presences.map((presence)=>{ + student = presence.get("user"); + if(student.get("username")==null){ + students = this.students.filter(stu=>stu.id==student.id) + if(students.length==1){ + student = students[0]; }else{ - student.set("ispresent",false); - student.set("isasking", 0); + student.fetch(); } - - return student; - }) - this.setData(jsonify({students})); - return presents; + } + student.set("ispresent", presence.get("present")); + student.set("isasking",presence.get("isasking")); + student.set("mark", presence.get("mark")) + if(student.id==AV.User.current().id){ + this.my_presence = presence; + } + return student; + }); + this.students = students; + console.log(students); + this.setData(jsonify({students})); + return presences; }, fetch_class: function(class_id){ this.class = AV.Object.createWithoutData("Class_", class_id); + //this.class.include("teacher"); return this.class.fetch().then((class_) => { //console.log(this.class); + teacher = this.class.get("teacher"); + console.log("fetch_class"); + //console.log(teacher); + if(typeof teacher.toJson == "function"){ + teacher = teacher.toJson() + } this.setData({ class_name: this.class.get("name"), - class_id: this.class.get("objectId") + class_id: this.class.get("objectId"), + teacher: teacher }); }).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.setData({current_user: AV.User.current()}); 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)); + this.fetch_class.bind(this)(this.class_id).then(this.pull_presence.bind(this)).then((presences)=>{this.origin_presences=presences, this.my_presence.enter()}); console.log("onLoad"); }, @@ -137,14 +148,16 @@ Page({ console.log("onShow"); console.log("enter class when onShow"); console.log(AV.User.current()); - this.class.enter(); + if(this.my_presence){ + this.my_presence.enter(); + } }, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { - this.class.leave(); + this.my_presence.leave(); console.log("onHide"); }, @@ -152,7 +165,7 @@ Page({ * 生命周期函数--监听页面卸载 */ onUnload: function () { - this.class.leave(); + this.my_presence.leave(); console.log("onUnload"); this.PresentSubscription.unsubscribe(); this.presentUnbind(); @@ -162,7 +175,7 @@ Page({ * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { - this.pull_present.bind(this)(); + this.pull_presence.bind(this)(); }, /** diff --git a/pages/classroom/classroom.wxml b/pages/classroom/classroom.wxml index 705d2de..64e8bbe 100644 --- a/pages/classroom/classroom.wxml +++ b/pages/classroom/classroom.wxml @@ -4,6 +4,7 @@ + {{student.username}} {{student.username}} @@ -11,7 +12,7 @@ {{student.username}} - {{student.username}} +