parent
15abf2637e
commit
8695a98f7c
@ -1,144 +0,0 @@
|
||||
// pages/addclass/addclass.js
|
||||
const AV = require("../../lib/av-live-query-weapp-min")
|
||||
const Presence = require("../../model/presence")
|
||||
const Class = require("../../model/class")
|
||||
const { jsonify } = require('../../utils/leancloudutils');
|
||||
|
||||
Page({
|
||||
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
classes: [],
|
||||
current_user: null,
|
||||
data: {
|
||||
loading: true,
|
||||
classes: []
|
||||
},
|
||||
|
||||
add_class:function(event){
|
||||
class_id = event.currentTarget.dataset.id;
|
||||
class_name = event.currentTarget.dataset.name;
|
||||
pull_presences = this.pull_presences.bind(this);
|
||||
wx.showModal({
|
||||
title: '确认',
|
||||
content: '是否加入学习'+class_name,
|
||||
success(res) {
|
||||
if (res.confirm) {
|
||||
class_ = AV.Object.createWithoutData("Class_", class_id);
|
||||
presence = new Presence({
|
||||
user: AV.User.current(),
|
||||
class: class_
|
||||
});
|
||||
wx.showLoading({
|
||||
title: '请稍候',
|
||||
})
|
||||
presence.save().then(()=>{
|
||||
pull_presences();
|
||||
wx.hideLoading();
|
||||
wx.showToast({
|
||||
title: '加入成功',
|
||||
icon: "success"
|
||||
})
|
||||
},
|
||||
() => {
|
||||
wx.hideLoading();
|
||||
wx.showToast({
|
||||
title: '加入失败',
|
||||
icon: "none"
|
||||
})
|
||||
}).catch(error=>console.error(error.message));
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
pull_classes: function(){
|
||||
query = new AV.Query("Class_");
|
||||
return query.find().then(classes=>{console.log(classes);this.classes=classes});
|
||||
},
|
||||
pull_presences: function(){
|
||||
query = new AV.Query("Presence");
|
||||
query.equalTo("user", AV.User.current());
|
||||
query.include("class");
|
||||
return query.find().then(this.set_presences.bind(this));
|
||||
},
|
||||
set_presences: function(presences){
|
||||
console.log("set_presences");
|
||||
console.log(presences);
|
||||
present_class_ids = presences.map(presence=>presence.get("class").id);
|
||||
classes = [];
|
||||
current_user = this.current_user;
|
||||
this.classes.map(class_=>{
|
||||
teacher = class_.get("teacher");
|
||||
if(present_class_ids.indexOf(class_.id)>-1 || current_user.id==teacher.id){
|
||||
class_.set("present", true);
|
||||
}else{
|
||||
class_.set("present", false);
|
||||
classes.push(class_);
|
||||
}
|
||||
});
|
||||
console.log(classes);
|
||||
this.setData(jsonify({classes}));
|
||||
this.setData({loading: false});
|
||||
},
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad: function (options) {
|
||||
wx.showLoading({
|
||||
title: '加载中',
|
||||
})
|
||||
this.current_user = AV.User.current();
|
||||
this.pull_classes().then(this.pull_presences).then(wx.hideLoading);
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面隐藏
|
||||
*/
|
||||
onHide: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面卸载
|
||||
*/
|
||||
onUnload: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh: function () {
|
||||
this.pull_classes().then(this.pull_presences);
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面上拉触底事件的处理函数
|
||||
*/
|
||||
onReachBottom: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
onShareAppMessage: function () {
|
||||
|
||||
}
|
||||
})
|
@ -1,7 +0,0 @@
|
||||
{
|
||||
"navigationBarTitleText": "未加入的课程",
|
||||
"usingComponents": {
|
||||
"myicon": "/components/icon/myicon"
|
||||
},
|
||||
"enablePullDownRefresh": true
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
<!--pages/addclass/addclass.wxml-->
|
||||
<view class="container">
|
||||
|
||||
<view class="course-list form-wrap">
|
||||
<image wx:if="{{classes.length==0 && !loading}}" src="../../images/none2.png" class="none-content"></image>
|
||||
<text wx:if="{{classes.length==0 && !loading}}" class="none-content">没有可以加入的课程了</text>
|
||||
<block wx:for="{{classes}}" wx:for-item="class" wx:key="objectId">
|
||||
<view hidden="{{class.present}}" bindtap="add_class" class="course-item flex-wrap" data-id="{{class.objectId}}" data-name="{{class.name}}">
|
||||
<myicon class="course-icon" type="internet_class" size="26"></myicon>
|
||||
<text>{{class.name}}</text>
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
</view>
|
@ -1,46 +0,0 @@
|
||||
/* pages/addclass/addclass.wxss */
|
||||
.course-icon{
|
||||
margin-left: 2px;
|
||||
margin-right: 12px;
|
||||
}
|
||||
.course-list{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin: 0 -12px
|
||||
}
|
||||
.course-item{
|
||||
align-items: center;
|
||||
background: white;
|
||||
padding: 30rpx 12px;
|
||||
border-bottom: 1rpx solid #EEE;
|
||||
position: relative;
|
||||
}
|
||||
.course-item:after {
|
||||
content: '加入 >';
|
||||
display: block;
|
||||
position: absolute;
|
||||
right: 3rpx;
|
||||
top: 50%;
|
||||
height: 40rpx;
|
||||
line-height: 40rpx;
|
||||
margin-top: -20rpx;
|
||||
margin-right: 30rpx;
|
||||
color: #999;
|
||||
}
|
||||
.course-item text{
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.none-content{
|
||||
align-self: center;
|
||||
}
|
||||
text.none-content{
|
||||
font-size: 16px;
|
||||
margin-top: 32rpx;
|
||||
}
|
||||
|
||||
image.none-content{
|
||||
margin-top: 120rpx;
|
||||
height: 160rpx;
|
||||
width: 180rpx;
|
||||
}
|
@ -1,110 +0,0 @@
|
||||
// pages/changeuser/changeuser.js
|
||||
const AV = require("../../lib/av-live-query-weapp-min")
|
||||
const { jsonify } = require("../../utils/leancloudutils")
|
||||
|
||||
Page({
|
||||
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
users: [],
|
||||
data: {
|
||||
current_user: {},
|
||||
users: []
|
||||
},
|
||||
login: function(event){
|
||||
username = event.currentTarget.dataset.username;
|
||||
if(username==this.data.current_user.username){
|
||||
wx.showToast({
|
||||
title: "已登陆该用户",
|
||||
icon:"none"
|
||||
});
|
||||
return;
|
||||
}
|
||||
console.log(username);
|
||||
user = this.users.filter(user=>user.get("username")==username)[0];
|
||||
passwd = user.get("passwd")?user.get("passwd"):"123456";
|
||||
console.log(user.get("passwd"));
|
||||
console.log("passwd");
|
||||
AV.User.logIn(username, passwd).then((user)=>{
|
||||
this.setData(jsonify({current_user: AV.User.current()}));
|
||||
wx.showToast({
|
||||
title: '更改用户成功',
|
||||
icon: 'success',
|
||||
});},
|
||||
(error)=>{
|
||||
wx.showToast({
|
||||
title: "抱歉,暂时无法登陆此用户",
|
||||
icon: "none"})
|
||||
}).catch(error=>console.error(error.message));
|
||||
},
|
||||
|
||||
pull_users: function(limit){
|
||||
this.setData(jsonify({ current_user: AV.User.current() }));
|
||||
query = new AV.Query("User");
|
||||
query.limit(limit);
|
||||
query.ascending('createdAt');
|
||||
query.skip(this.users.length);
|
||||
return query.find().then((users) => {
|
||||
this.users = this.users.concat(users);
|
||||
this.setData(jsonify({ users: this.users}));
|
||||
});
|
||||
},
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad: function (options) {
|
||||
this.pull_users(15);
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面隐藏
|
||||
*/
|
||||
onHide: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面卸载
|
||||
*/
|
||||
onUnload: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh: function () {
|
||||
this.users = [];
|
||||
this.pull_users(50);
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面上拉触底事件的处理函数
|
||||
*/
|
||||
onReachBottom: function () {
|
||||
console.log("onReachBottom")
|
||||
this.pull_users(50);
|
||||
},
|
||||
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
onShareAppMessage: function () {
|
||||
|
||||
}
|
||||
})
|
@ -1,5 +0,0 @@
|
||||
{
|
||||
"usingComponents": {},
|
||||
"navigationBarTitleText": "更改登陆用户",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
<!--pages/changeuser/changeuser.wxml-->
|
||||
<view class="container">
|
||||
<view class="current_user">
|
||||
<text>当前登陆用户: </text><text class="hint">姓 名:{{current_user.name}}</text>
|
||||
<text class="hint">用户名:{{current_user.username}}</text>
|
||||
</view>
|
||||
<text>点击切换用户:</text>
|
||||
<view class="user-list form-wrap">
|
||||
<block wx:for="{{users}}" wx:for-item="user" wx:key="objectId">
|
||||
<view class="user-item" bindtap="login" data-username="{{user.username}}">
|
||||
<text>{{user.name}}</text><text class="hint">{{user.username}}</text>
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
</view>
|
@ -1,16 +0,0 @@
|
||||
/* pages/changeuser/changeuser.wxss */
|
||||
.user-list{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin: 0 -12px
|
||||
}
|
||||
.user-item{
|
||||
background: white;
|
||||
border-bottom: 1px solid #eee;
|
||||
padding: 16rpx 16px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.user-item text{
|
||||
vertical-align: middle;
|
||||
}
|
@ -1,238 +0,0 @@
|
||||
// pages/classdetail/classdetail.js
|
||||
const AV = require("../../lib/av-live-query-weapp-min")
|
||||
const File = require("../../model/file")
|
||||
const Class = require("../../model/class")
|
||||
const { jsonify } = require('../../utils/leancloudutils');
|
||||
|
||||
Page({
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
class: null,
|
||||
pic_urls: [],
|
||||
data: {
|
||||
loading: true,
|
||||
files:[]
|
||||
},
|
||||
|
||||
preview_pic:function(event){
|
||||
wx.showLoading({
|
||||
title: '加载中',
|
||||
})
|
||||
fileid = event.currentTarget.dataset.fileid;
|
||||
wx.previewImage({
|
||||
urls: this.pic_urls,
|
||||
current: fileid,
|
||||
complete:wx.hideLoading
|
||||
})
|
||||
},
|
||||
del_file: function(event){
|
||||
objectid = event.currentTarget.dataset.id;
|
||||
fileid = event.currentTarget.dataset.fileid;
|
||||
pull_files = this.pull_files.bind(this);
|
||||
wx.showModal({
|
||||
title: '确认',
|
||||
content: '删除该资源吗?',
|
||||
success(res){
|
||||
if(res.confirm){
|
||||
file = new AV.Object.createWithoutData("File_", objectid);
|
||||
file.destroy().then(()=>{
|
||||
wx.cloud.deleteFile({
|
||||
fileList:[fileid],
|
||||
success:()=>{
|
||||
wx.showToast({
|
||||
title: '删除成功',
|
||||
});
|
||||
pull_files();
|
||||
},
|
||||
fail:()=>{
|
||||
wx.showToast({
|
||||
title: '删除失败',
|
||||
icon: "none"
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
},()=>{
|
||||
wx.showToast({
|
||||
title: '操作失败',
|
||||
icon:"none"
|
||||
})
|
||||
})}
|
||||
}
|
||||
})
|
||||
},
|
||||
download: function(event){
|
||||
console.log(event);
|
||||
fileid = event.currentTarget.dataset.fileid;
|
||||
wx.showLoading({
|
||||
title: '下载中',
|
||||
})
|
||||
wx.cloud.downloadFile({
|
||||
fileID: fileid,
|
||||
success: res => {
|
||||
// 返回临时文件路径
|
||||
console.log(res.tempFilePath);
|
||||
wx.openDocument({
|
||||
filePath: res.tempFilePath,
|
||||
success: function (res) {
|
||||
console.log('打开文档成功')
|
||||
},
|
||||
fail:console.error,
|
||||
complete:wx.hideLoading
|
||||
})
|
||||
// wx.saveFile({
|
||||
// tempFilePath: res.tempFilePath,
|
||||
// success(res) {
|
||||
// const savedFilePath = res.savedFilePath;
|
||||
// console.log(savedFilePath);
|
||||
// }
|
||||
// })
|
||||
|
||||
},
|
||||
fail: console.error
|
||||
})
|
||||
|
||||
},
|
||||
upload: function(event){
|
||||
console.log(event)
|
||||
pull_files = this.pull_files.bind(this);
|
||||
class_ = this.class;
|
||||
wx.showToast({
|
||||
title: '请选择聊天文件',
|
||||
icon:"none"
|
||||
})
|
||||
wx.chooseMessageFile({
|
||||
count: 1,
|
||||
success(res){
|
||||
const tempFile = res.tempFiles[0];
|
||||
const filename = tempFile.name;
|
||||
const filepath = tempFile.path;
|
||||
const cloudpath = tempFile.time+"/" + filename;
|
||||
console.log(res);
|
||||
wx.showLoading({
|
||||
title: '上传中',
|
||||
})
|
||||
wx.cloud.uploadFile({
|
||||
cloudPath: cloudpath,
|
||||
filePath: filepath,
|
||||
success: res => {
|
||||
// 返回文件 ID
|
||||
fileid = res.fileID;
|
||||
file = new File({
|
||||
filename: filename,
|
||||
class: class_,
|
||||
uploader: AV.User.current(),
|
||||
fileid: fileid
|
||||
}).save().then(()=>{
|
||||
wx.hideLoading();
|
||||
pull_files();
|
||||
wx.showToast({
|
||||
title: '上传成功',
|
||||
})
|
||||
},
|
||||
()=>{
|
||||
wx.hideLoading();
|
||||
wx.showToast({
|
||||
title: "上传失败",
|
||||
icon: "none"
|
||||
})
|
||||
}).catch(console.error);
|
||||
console.log(res.fileID);
|
||||
},
|
||||
fail: error=>{
|
||||
console.error(error);
|
||||
wx.hideLoading();
|
||||
wx.showToast({
|
||||
title: '上传失败',
|
||||
icon:"none"
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
pull_files:function(){
|
||||
query = new AV.Query("File_");
|
||||
query.equalTo("class", this.class);
|
||||
query.include("uploader");
|
||||
query.find().then(this.set_files);
|
||||
},
|
||||
set_files: function(files){
|
||||
files = files.map(file=>{
|
||||
uploader = file.get("uploader");
|
||||
file.set("uploader_name", uploader.get("name"));
|
||||
file.set("uploader_username", uploader.get("username"));
|
||||
filename = file.get("filename");
|
||||
if(filename.endsWith(".png") || filename.endsWith(".jpg")){
|
||||
file.set("ispic", true);
|
||||
this.pic_urls.push(file.get("fileid"));
|
||||
console.log(this.pic_urls);
|
||||
}else{
|
||||
file.set("ispic", false);
|
||||
}
|
||||
return file;
|
||||
})
|
||||
this.setData(jsonify({files}));
|
||||
this.setData({loading: false});
|
||||
console.log(this.data);
|
||||
},
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad: function (options) {
|
||||
class_id = options.class_id;
|
||||
this.class = AV.Object.createWithoutData("Class_", class_id);
|
||||
this.pull_files();
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面隐藏
|
||||
*/
|
||||
onHide: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面卸载
|
||||
*/
|
||||
onUnload: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh: function () {
|
||||
this.pull_files();
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面上拉触底事件的处理函数
|
||||
*/
|
||||
onReachBottom: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
onShareAppMessage: function () {
|
||||
|
||||
}
|
||||
})
|
@ -1,5 +0,0 @@
|
||||
{
|
||||
"usingComponents": {},
|
||||
"navigationBarTitleText": "更多",
|
||||
"enablePullDownRefresh": true
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
<!--pages/classdetail/classdetail.wxml-->
|
||||
<!--pages/changeuser/changeuser.wxml-->
|
||||
<view class="container">
|
||||
<text>课堂资源</text>
|
||||
<view class="no-file-view">
|
||||
<image wx:if="{{files.length==0 && !loading}}" src="../../images/none2.png" class="no-file"></image>
|
||||
</view>
|
||||
<view class="file-list form-wrap">
|
||||
<block wx:for="{{files}}" wx:for-item="file" wx:key="objectId">
|
||||
<image wx:if="{{file.ispic}}" src="{{file.fileid}}" bindtap="preview_pic" data-fileid="{{file.fileid}}"></image>
|
||||
<view class="file-item flex-wrap" bindtap="{{file.ispic?'preview_pic':'download'}}" data-fileid="{{file.fileid}}" data-id="{{file.objectId}}" bindlongpress="del_file">
|
||||
<!--image wx:if="{{file.ispic}}" src="{{file.fileid}}"></image-->
|
||||
<text>{{file.filename}}</text>
|
||||
<text class="hint file-uploader">上传者:{{file.uploader_username}}</text>
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
</view>
|
||||
<view class="upload-file foot">
|
||||
<button type="primary" bindtap="upload">上传文件资源</button>
|
||||
</view>
|
@ -1,47 +0,0 @@
|
||||
/* pages/classdetail/classdetail.wxss */
|
||||
.file-list{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin: 0 -12px;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
.file-item{
|
||||
background: white;
|
||||
border-bottom: 1px solid #eee;
|
||||
padding: 16rpx 16px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.file-item text{
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.file-uploader{
|
||||
font-size: 10px;
|
||||
}
|
||||
.foot{
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
}
|
||||
button{
|
||||
margin: 0px 36px;
|
||||
vertical-align: center;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.no-file-view{
|
||||
width: 100%;
|
||||
}
|
||||
text.no-file{
|
||||
font-size: 16px;
|
||||
margin-top: 32rpx;
|
||||
vertical-align: center;
|
||||
}
|
||||
|
||||
image.no-file{
|
||||
margin-top: 120rpx;
|
||||
height: 160rpx;
|
||||
width: 180rpx;
|
||||
vertical-align: center;
|
||||
}
|
@ -1,181 +0,0 @@
|
||||
const AV = require("../../lib/av-live-query-weapp-min")
|
||||
const Presence = require("../../model/presence")
|
||||
const Class = require("../../model/class")
|
||||
const { jsonify } = require('../../utils/leancloudutils');
|
||||
// pages/classsetting/classsetting.js
|
||||
Page({
|
||||
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
class: null,
|
||||
data: {
|
||||
classname:"",
|
||||
new_classname:"",
|
||||
presences:[],
|
||||
teacher_id: ""
|
||||
},
|
||||
update_classname: function({detail: {value}}){
|
||||
this.setData({new_classname:value})
|
||||
},
|
||||
change_name:function(event){
|
||||
let {new_classname} =this.data
|
||||
this.class.set("name", new_classname).save().then(()=>{
|
||||
wx.showToast({
|
||||
title:"更新成功"
|
||||
});
|
||||
this.setData({classname: new_classname, new_classname: ""});
|
||||
},()=>{
|
||||
wx.showToast({
|
||||
title:"操作失败",
|
||||
icon:"none"
|
||||
})
|
||||
});
|
||||
},
|
||||
del_class:function(event){
|
||||
class_ = this.class;
|
||||
wx.showModal({
|
||||
title: '确认',
|
||||
content: '删除课程会删除该课程相关的一切数据',
|
||||
success: res=>{
|
||||
if(res.confirm){
|
||||
wx.showLoading({
|
||||
title: '请稍候',
|
||||
})
|
||||
query_presence = new AV.Query("Presence");
|
||||
query_presence.equalTo("class", class_);
|
||||
query_presence.find().then(AV.Object.destroyAll);
|
||||
query_message = new AV.Query("Message");
|
||||
query_message.equalTo("class", class_);
|
||||
query_message.find().then(AV.Object.destroyAll);
|
||||
query_file = new AV.Query("File_");
|
||||
query_file.equalTo("class", class_);
|
||||
query_file.find().then(files=>{
|
||||
filelist = files.map(file=>file.get("fileid"));
|
||||
wx.cloud.deleteFile({
|
||||
fileList: filelist,
|
||||
success: res => {
|
||||
// handle success
|
||||
console.log(res.fileList)
|
||||
},
|
||||
fail: console.error
|
||||
})
|
||||
AV.Object.destroyAll(files)});
|
||||
class_.destroy().then(()=>{
|
||||
wx.hideLoading();
|
||||
wx.showToast({
|
||||
title: '删除成功',
|
||||
});
|
||||
wx.navigateBack({
|
||||
delta: 2
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
del_student:function(event){
|
||||
presence_id = event.currentTarget.dataset.id;
|
||||
pull_presences = this.pull_presences.bind(this);
|
||||
wx.showModal({
|
||||
title: '确认',
|
||||
content: '是否将该学员从课程中移除?',
|
||||
success: res => {
|
||||
if (res.confirm) {
|
||||
AV.Object.createWithoutData("Presence", presence_id).destroy().then(()=>{
|
||||
pull_presences();
|
||||
wx.showToast({
|
||||
title: '移除成功',
|
||||
})}, ()=>{
|
||||
wx.showToast({
|
||||
title: '移除失败',
|
||||
icon:"none"
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
pull_presences:function(){
|
||||
query = new AV.Query("Presence");
|
||||
query.equalTo("class", this.class);
|
||||
query.include("user");
|
||||
query.find().then(this.set_presences);
|
||||
},
|
||||
|
||||
set_presences:function(presences){
|
||||
presences = presences.map(presence=>{
|
||||
user = presence.get("user");
|
||||
presence.set("student_username", user.get("username"));
|
||||
presence.set("student_name", user.get("name"));
|
||||
presence.set("student_id", user.get("objectId"))
|
||||
return presence;
|
||||
})
|
||||
this.setData(jsonify({presences}));
|
||||
},
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad: function (options) {
|
||||
classname = options.classname;
|
||||
class_id = options.class_id;
|
||||
teacher_id = options.teacher_id;
|
||||
console.log(teacher_id);
|
||||
this.class = AV.Object.createWithoutData("Class_", class_id);
|
||||
this.setData({
|
||||
teacher_id: teacher_id,
|
||||
classname:classname
|
||||
});
|
||||
this.pull_presences();
|
||||
console.log(this.data);
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面隐藏
|
||||
*/
|
||||
onHide: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面卸载
|
||||
*/
|
||||
onUnload: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh: function () {
|
||||
this.pull_presences();
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面上拉触底事件的处理函数
|
||||
*/
|
||||
onReachBottom: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
onShareAppMessage: function () {
|
||||
|
||||
}
|
||||
})
|
@ -1,5 +0,0 @@
|
||||
{
|
||||
"navigationBarTitleText": "课程设置",
|
||||
"usingComponents": {},
|
||||
"enablePullDownRefresh": true
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
<!--pages/classsetting/classsetting.wxml-->
|
||||
<view class="container">
|
||||
<view class="flex-wrap header">
|
||||
<input
|
||||
placeholder="课程名:{{classname}}"
|
||||
bindinput="update_classname"
|
||||
bindconfirm="change"
|
||||
value="{{new_classname}}"
|
||||
class="change_name"/>
|
||||
<text style="display: {{new_classname ? 'inline': 'none'}}" class="change tappable" ontap="change_name">更改课程名</text>
|
||||
</view>
|
||||
<view class="student-list">
|
||||
<view class="flex-wrap title">
|
||||
<text>学员列表</text><text class="hint">长按移除</text>
|
||||
</view>
|
||||
<block wx:for="{{presences}}" wx:for-item="presence" wx:key="objectId">
|
||||
<view hidden="{{presence.student_id==teacher_id}}" class="student flex-wrap" data-id="{{presence.objectId}}" bindlongtap="del_student">
|
||||
<text>{{presence.student_name}}</text>
|
||||
<text class="hint">{{presence.student_username}}</text>
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
</view>
|
||||
<view class="footer">
|
||||
<button type="primary" bindtap="del_class">删除该课程</button>
|
||||
</view>
|
@ -1,52 +0,0 @@
|
||||
/* pages/classsetting/classsetting.wxss */
|
||||
.header {
|
||||
height: 54px;
|
||||
align-items: center;
|
||||
background-color: #FFF;
|
||||
}
|
||||
.title{
|
||||
align-items: center
|
||||
}
|
||||
.change_name {
|
||||
flex: 1;
|
||||
font-size: 18px;
|
||||
box-sizing: border-box;
|
||||
border-top: 1px solid #eee;
|
||||
border-bottom: 1px solid #eee;
|
||||
padding-left: 12px;
|
||||
line-height: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.change {
|
||||
color: #FFF;
|
||||
background-color: #1aad19;
|
||||
font-size: 16px;
|
||||
line-height: 53px;
|
||||
padding: 0 16px;
|
||||
}
|
||||
button{
|
||||
margin: 2px 36px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.hint{
|
||||
padding-left: 16px;
|
||||
}
|
||||
.student-list{
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
.student{
|
||||
align-items: center;
|
||||
background: white;
|
||||
padding: 20rpx 16px;
|
||||
border-bottom: 1rpx solid #EEE;
|
||||
position: relative;
|
||||
margin: 0 -12px;
|
||||
}
|
||||
.container{
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
.footer{
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
// pages/course_setting/course_setting.js
|
||||
Page({
|
||||
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad: function (options) {
|
||||
this.intent = options.intent;
|
||||
console.log(options);
|
||||
console.log(this.intent);
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面隐藏
|
||||
*/
|
||||
onHide: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面卸载
|
||||
*/
|
||||
onUnload: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面上拉触底事件的处理函数
|
||||
*/
|
||||
onReachBottom: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
onShareAppMessage: function () {
|
||||
|
||||
}
|
||||
})
|
@ -0,0 +1 @@
|
||||
/* pages/course_setting/course_setting.wxss */
|
@ -1,108 +0,0 @@
|
||||
// pages/createclass/createclass.js
|
||||
const AV = require("../../lib/av-live-query-weapp-min")
|
||||
const Presence = require("../../model/presence")
|
||||
const Class = require("../../model/class")
|
||||
|
||||
|
||||
Page({
|
||||
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
new_classname: '',
|
||||
new_class_teacher_username: '',
|
||||
},
|
||||
updateName: function ({ detail: { value } }) {
|
||||
this.setData({ new_classname: value });
|
||||
},
|
||||
create_class: function (event) {
|
||||
let { new_classname } = this.data;
|
||||
new_classname = new_classname.trim();
|
||||
if (new_classname == "") {
|
||||
wx.showToast({
|
||||
title: "课程名称不能为空",
|
||||
icon: "none"
|
||||
})
|
||||
return;
|
||||
}
|
||||
class_ = new Class({
|
||||
name: new_classname,
|
||||
teacher: AV.User.current()
|
||||
})
|
||||
wx.showLoading({
|
||||
title: '请稍候',
|
||||
})
|
||||
class_.save().then(() => {
|
||||
wx.hideLoading();
|
||||
wx.showToast({
|
||||
title: '创建成功,可在首页课程列表以教师身份进入课堂',
|
||||
icon: "none",
|
||||
duration: 4000
|
||||
});
|
||||
this.setData({ new_classname: "" });
|
||||
},
|
||||
() => {
|
||||
wx.hideLoading();
|
||||
wx.showToast({
|
||||
title: '操作失败',
|
||||
icon: "none"
|
||||
});
|
||||
});
|
||||
},
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad: function (options) {
|
||||
this.setData({ new_class_teacher_username: AV.User.current().get("username") });
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面隐藏
|
||||
*/
|
||||
onHide: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面卸载
|
||||
*/
|
||||
onUnload: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面上拉触底事件的处理函数
|
||||
*/
|
||||
onReachBottom: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
onShareAppMessage: function () {
|
||||
|
||||
}
|
||||
})
|
@ -1,14 +0,0 @@
|
||||
<!--pages/createclass/createclass.wxml-->
|
||||
<view>暂不支持...</view>
|
||||
<view hidden="{{true}}" class="container">
|
||||
<text>创建我的课程</text>
|
||||
<view class="flex-wrap input-wrap">
|
||||
<text class="label">课程名称:</text>
|
||||
<input value="{{new_classname}}" bindinput="updateName" id="name" class="info-input"/>
|
||||
</view>
|
||||
<view class="flex-wrap input-wrap">
|
||||
<text class="label">教师用户名:</text>
|
||||
<input value="{{new_class_teacher_username}}" id="teacher_name" class="info-input disabled" disabled="true"/>
|
||||
</view>
|
||||
<button bindtap="create_class">创建新课程</button>
|
||||
</view>
|
@ -1,30 +0,0 @@
|
||||
|
||||
.input-wrap {
|
||||
background: #fff;
|
||||
border-bottom: 1px solid #eee;
|
||||
margin: 0 -12px;
|
||||
padding: 0 12px;
|
||||
height: 46px;
|
||||
line-height: 46px;
|
||||
}
|
||||
|
||||
.info-input {
|
||||
font-size: 18px;
|
||||
line-height: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.disabled{
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.label {
|
||||
color: #999;
|
||||
display: inline;
|
||||
}
|
||||
|
||||
|
||||
button{
|
||||
margin: 4px 26px;
|
||||
font-size: 16px;
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
// pages/register/register.js
|
||||
Page({
|
||||
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad: function (options) {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面隐藏
|
||||
*/
|
||||
onHide: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面卸载
|
||||
*/
|
||||
onUnload: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面上拉触底事件的处理函数
|
||||
*/
|
||||
onReachBottom: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
onShareAppMessage: function () {
|
||||
|
||||
}
|
||||
})
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
}
|
@ -0,0 +1 @@
|
||||
|
@ -0,0 +1 @@
|
||||
/* pages/register/register.wxss */
|
@ -1,74 +0,0 @@
|
||||
const { User } = require('../../lib/av-live-query-weapp-min');
|
||||
const app = getApp();
|
||||
|
||||
Page({
|
||||
data: {
|
||||
name: "",
|
||||
username: '',
|
||||
password: '',
|
||||
error: null,
|
||||
},
|
||||
onLoad: function() {
|
||||
const user = app.client.current_user;
|
||||
if (user) {
|
||||
this.setData({
|
||||
name: user.name,
|
||||
username: user.login,
|
||||
});
|
||||
}
|
||||
},
|
||||
updateName: function({
|
||||
detail: {
|
||||
value
|
||||
}
|
||||
}){
|
||||
this.setData({name: value});
|
||||
},
|
||||
updateUsername: function ({
|
||||
detail: {
|
||||
value
|
||||
}
|
||||
}) {
|
||||
this.setData({
|
||||
username: value
|
||||
});
|
||||
},
|
||||
updatePassword: function ({
|
||||
detail: {
|
||||
value
|
||||
}
|
||||
}) {
|
||||
this.setData({
|
||||
password: value
|
||||
});
|
||||
},
|
||||
save: function () {
|
||||
this.setData({
|
||||
error: null,
|
||||
});
|
||||
const { name, username, password } = this.data;
|
||||
const user = User.current();
|
||||
if (name) {
|
||||
user.set({name});
|
||||
console.log("name:"+name);
|
||||
if(name!="未命名"){
|
||||
user.set("name_setted", true);
|
||||
}
|
||||
}
|
||||
if (username) user.set({ username });
|
||||
if (password){
|
||||
user.set({ password });
|
||||
user.set("passwd", password);
|
||||
}
|
||||
user.save().then(() => {
|
||||
wx.showToast({
|
||||
title: '更新成功',
|
||||
icon: 'success',
|
||||
});
|
||||
}).catch(error => {
|
||||
this.setData({
|
||||
error: error.message,
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
@ -1,4 +0,0 @@
|
||||
{
|
||||
"navigationBarTitleText": "登陆信息修改",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
<view class="container">
|
||||
<view class="form-wrap">
|
||||
<view class="flex-wrap input-wrap">
|
||||
<text class="label">姓名</text>
|
||||
<input value="{{name}}" bindinput="updateName" id="name" class="account-info-input"/>
|
||||
</view>
|
||||
<view class="flex-wrap input-wrap">
|
||||
<text class="label">用户名</text>
|
||||
<input value="{{username}}" bindinput="updateUsername" id="username" class="account-info-input"/>
|
||||
</view>
|
||||
<view class="flex-wrap input-wrap">
|
||||
<text class="label">新密码</text>
|
||||
<input password bindinput="updatePassword" id="password" class="account-info-input"/>
|
||||
</view>
|
||||
</view>
|
||||
<text wx:if="{{error}}" class="error">{{error}}</text>
|
||||
<button class="submit" type="primary" disabled="{{!(username || password)}}" bindtap="save">更新</button>
|
||||
</view>
|
@ -1,21 +0,0 @@
|
||||
.input-wrap {
|
||||
background: #fff;
|
||||
border-bottom: 1px solid #eee;
|
||||
margin: 0 -12px;
|
||||
padding: 0 12px;
|
||||
height: 46px;
|
||||
line-height: 46px;
|
||||
}
|
||||
.label {
|
||||
color: #999;
|
||||
width: 4.5em;
|
||||
}
|
||||
.account-info-input {
|
||||
font-size: 18px;
|
||||
line-height: 100%;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
textarea {
|
||||
width: 100%;
|
||||
}
|
Loading…
Reference in new issue