parent
4d03f53a91
commit
0ae21cc29d
@ -0,0 +1,25 @@
|
||||
module.exports = (subscription, initialStats, onChange) => {
|
||||
let stats = [...initialStats]
|
||||
const remove = value => {
|
||||
stats = stats.filter(target => target.id !== value.id)
|
||||
return onChange(stats)
|
||||
}
|
||||
const upsert = value => {
|
||||
let existed = false;
|
||||
stats = stats.map(target => (target.id === value.id ? ((existed = true), value) : target))
|
||||
if (!existed) stats = [value, ...stats]
|
||||
return onChange(stats)
|
||||
}
|
||||
subscription.on('create', upsert)
|
||||
subscription.on('update', upsert)
|
||||
subscription.on('enter', upsert)
|
||||
subscription.on('leave', remove)
|
||||
subscription.on('delete', remove)
|
||||
return () => {
|
||||
subscription.off('create', upsert)
|
||||
subscription.off('update', upsert)
|
||||
subscription.off('enter', upsert)
|
||||
subscription.off('leave', remove)
|
||||
subscription.off('delete', remove)
|
||||
}
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
const AV = require('../lib/av-live-query-weapp-min');
|
||||
const Presence = require("./presence")
|
||||
|
||||
class Class extends AV.Object{
|
||||
get name(){
|
||||
return this.get("name");
|
||||
}
|
||||
set name(value){
|
||||
this.set("name", value);
|
||||
}
|
||||
get students(){
|
||||
|
||||
}
|
||||
add_student(user){
|
||||
|
||||
}
|
||||
del_student(user){
|
||||
let students = this.get("students");
|
||||
if(user.id in students){
|
||||
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();
|
||||
}
|
||||
leave() {
|
||||
if (this._presence != null) {
|
||||
this._presence.destroy();
|
||||
}
|
||||
}
|
||||
present_students() {
|
||||
var query = new AV.Query("Presence");
|
||||
//query.equalTo("class", this._class.id);
|
||||
let students = query.find();
|
||||
console.log(students);
|
||||
return students;
|
||||
}
|
||||
}
|
||||
|
||||
AV.Object.register(Class, "Class_");
|
||||
module.exports = Class;
|
@ -0,0 +1,43 @@
|
||||
const AV = require('../lib/av-live-query-weapp-min');
|
||||
|
||||
//数据储存模板--分数
|
||||
class Grade extends AV.Object {
|
||||
get mark() {
|
||||
return this.get('done');
|
||||
}
|
||||
set mark(value) {
|
||||
this.set('mark', value);
|
||||
}
|
||||
get student(){
|
||||
return this.get("student");
|
||||
}
|
||||
set student(value){
|
||||
this.set("student". value);
|
||||
}
|
||||
|
||||
get class() {
|
||||
return this.get('class');
|
||||
}
|
||||
|
||||
set class(value){
|
||||
this.set("class", value);
|
||||
}
|
||||
get content(){
|
||||
return this.get("content");
|
||||
}
|
||||
set content(value) {
|
||||
this.set('content', value);
|
||||
}
|
||||
get date(){
|
||||
return this.get("date");
|
||||
}
|
||||
set date(value){
|
||||
this.set("date", value)
|
||||
}
|
||||
add_mark(value){
|
||||
this.increment(value);
|
||||
}
|
||||
}
|
||||
|
||||
AV.Object.register(Grade, 'Grade');
|
||||
module.exports = Grade;
|
@ -0,0 +1,25 @@
|
||||
const AV = require('../lib/av-live-query-weapp-min');
|
||||
|
||||
class Presence extends AV.Object{
|
||||
set user(value){
|
||||
this.set("user", value);
|
||||
}
|
||||
get user(){
|
||||
return this.get("user");
|
||||
}
|
||||
set class(value){
|
||||
this.set("class", value);
|
||||
}
|
||||
get class(){
|
||||
return this.get("class");
|
||||
}
|
||||
set isasking(value){
|
||||
this.set("isasking", value);
|
||||
}
|
||||
get isasking(){
|
||||
return this.get("isasking");
|
||||
}
|
||||
}
|
||||
|
||||
AV.Object.register(Presence, "Presence");
|
||||
module.exports = Presence;
|
@ -0,0 +1,17 @@
|
||||
const AV = require("../..//lib/av-live-query-weapp-min")
|
||||
|
||||
|
||||
class StudentClassMap extends AV.Object{
|
||||
get class(){
|
||||
return this.get("class");
|
||||
}
|
||||
set class(value){
|
||||
this.set("class", value);
|
||||
}
|
||||
get user(){
|
||||
return this.get("user");
|
||||
}
|
||||
set user(value){
|
||||
this.set("user", value);
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
const AV = require("../lib/av-live-query-weapp-min")
|
||||
|
||||
function login() {
|
||||
return AV.Promise.resolve(AV.User.current()).then(user =>
|
||||
user ? (user.isAuthenticated().then(authed => authed ? user : null)) : null
|
||||
).then(user => user ? user : AV.User.loginWithWeapp({
|
||||
preferUnionId: true,
|
||||
})).catch(error => console.error(error.message));
|
||||
}
|
||||
|
||||
module.exports = login;
|
@ -0,0 +1,4 @@
|
||||
{
|
||||
"usingComponents": {},
|
||||
"enablePullDownRefresh": true
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
<!--
|
||||
所有的页面数据见同目录classes.js中Page.data定义部分
|
||||
classes: 课程列表 type: Array
|
||||
元素class: 课程信息 class.objectId 唯一
|
||||
class.objectId 唯一键
|
||||
class.name 课程名称
|
||||
-->
|
||||
<view class="class-list">
|
||||
<block wx:for="{{classes}}" wx:for-item="class" wx:key="objectId">
|
||||
<view class="flex-wrap classroom" data-class_id="{{class.objectId}}" data-class_name="{{class.name}}" bindtap="enter_class">
|
||||
<text>{{class.name}}</text>
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
@ -0,0 +1,28 @@
|
||||
.header {
|
||||
height: 54px;
|
||||
align-items: center;
|
||||
background-color: #FFF;
|
||||
}
|
||||
|
||||
.class-list {
|
||||
padding: 4px 6px 48px;
|
||||
}
|
||||
|
||||
.classroom {
|
||||
font-size: 18px;
|
||||
height: 30px;
|
||||
padding: 10px 12px;
|
||||
overflow: hidden;
|
||||
align-items: center;
|
||||
background-color: #fff;
|
||||
margin: 1px 0;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.classroom text {
|
||||
white-space: nowrap;
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
line-height: 17px;
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
{
|
||||
"usingComponents": {},
|
||||
"enablePullDownRefresh": true
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
<!--pages/classroom/classroom.wxml-->
|
||||
<view class="index">
|
||||
<view class="grid-celll">
|
||||
<view class="grid-view">
|
||||
<view class="grid-cell" wx:for="{{students}}" wx:for-item="student" wx:key="objectId" bindtap="rep">
|
||||
<view wx:if="{{student.isasking==0}}">
|
||||
</view>
|
||||
<view wx:elif="{{student.isasking==1}}">
|
||||
<text class="reed">{{student.username}}</text>
|
||||
</view>
|
||||
<view wx:elif="{{student.isasking==2}}">
|
||||
<text class="gre">{{student.username}}</text>
|
||||
</view>
|
||||
<text>{{student.username}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- -->
|
||||
<view wx:if="{{current_user.objectId==teacher.objectId}}">
|
||||
<view class="sco">
|
||||
<button bindtap="ask">提问</button>
|
||||
</view>
|
||||
</view>
|
||||
<view wx:else>
|
||||
<button data-id='{{students.username}}' bindtap="sco1">打1分</button>
|
||||
<button data-id='{{students.username}}' bindtap="sco2">打2分</button>
|
||||
<button data-id='{{students.username}}' bindtap="sco3">打3分</button>
|
||||
</view>
|
||||
</view>
|
@ -1,3 +1,3 @@
|
||||
{
|
||||
"navigationBarTitleText": "腾讯云实验室"
|
||||
"navigationBarTitleText": "积分教室"
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
const isPlainObject = target =>
|
||||
target &&
|
||||
target.toString() == '[object Object]' &&
|
||||
Object.getPrototypeOf(target) == Object.prototype;
|
||||
const _jsonify = target => {
|
||||
if (target && typeof target.toJSON === 'function') return target.toJSON();
|
||||
if (Array.isArray(target)) return target.map(_jsonify);
|
||||
return target;
|
||||
};
|
||||
|
||||
exports.jsonify = target =>
|
||||
isPlainObject(target)
|
||||
? Object.keys(target).reduce(
|
||||
(result, key) => ({
|
||||
...result,
|
||||
[key]: _jsonify(target[key])
|
||||
}),
|
||||
{}
|
||||
)
|
||||
: _jsonify(target);
|
Loading…
Reference in new issue