commit
0a899550b5
@ -0,0 +1,19 @@
|
||||
module Mobile
|
||||
module Entities
|
||||
class CourseGroup < Grape::Entity
|
||||
include Redmine::I18n
|
||||
include ApplicationHelper
|
||||
include ApiHelper
|
||||
def self.course_group_expose(f)
|
||||
expose f do |u,opt|
|
||||
if u.is_a?(Hash) && u.key?(f)
|
||||
u[f]
|
||||
end
|
||||
end
|
||||
end
|
||||
expose :id
|
||||
expose :name
|
||||
expose :users, using: Mobile::Entities::User
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,5 @@
|
||||
class AddQrcodeExpiretimeToCourses < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :courses, :qrcode_expiretime, :integer, :default => 0
|
||||
end
|
||||
end
|
@ -0,0 +1,5 @@
|
||||
class AddQrcodeExpiretimeToProjects < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :projects, :qrcode_expiretime, :integer, :default => 0
|
||||
end
|
||||
end
|
@ -0,0 +1,20 @@
|
||||
<div class="post-container">
|
||||
<div loading-spinner></div>
|
||||
<div class="class-detail-name"><span class="course-name-width hidden inline-block">分班管理</span></div>
|
||||
|
||||
<div ng-repeat="group in groups">
|
||||
<div class="member-banner f13 c-grey3" ng-class="{'mt10':!$first}">{{group.name+"("+group.users.length+")"}}</div>
|
||||
<div class="class-member-row f13 c-grey3" ng-repeat="user in group.users">
|
||||
<img ng-src="{{user.img_url}}" width="30" height="30" class="fl ml10 img-circle" /><span class="fl ml10 mt5">{{user.realname == "" ? user.name : user.realname}}</span><img ng-src="/images/wechat/{{user.gender==0 ? 'male' : 'female'}}.png" width="15" class="fl ml10 mt5" />
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="course.is_member" class="bottom-tab-wrap mt10">
|
||||
<a ng-show="course.current_user_is_teacher" ng-click="goEditGroup()" class="weixin-tab link-blue2 border-top">编辑</a>
|
||||
</div>
|
||||
|
||||
<div ng-show="tip_1" class="blue-title">{{tip_1}}</div>
|
||||
|
||||
<my-alert message="alertService.message" title="alertService.title" visible="alertService.visible" cb="alertService.cb"></my-alert>
|
||||
</div>
|
@ -0,0 +1,34 @@
|
||||
<div class="post-container">
|
||||
<div loading-spinner></div>
|
||||
<div ng-show="current_course" class="post-container" style="padding-bottom:50px;">
|
||||
<div class="blue-title">欢迎加入班级</div>
|
||||
<div class="class-detail-row f13 c-grey3"><img ng-src="{{current_course.img_url}}" class="fl ml10 img-circle mt4" width="30" height="30"><span class="fl mt10 ml10 ng-binding">{{course.syllabus_title}}<font ng-if="course.syllabus_title != null" class="fb" style="height:18px; line-height:18px; vertical-align:top; margin:0 3px;">·</font>{{current_course.name}}</span><div class="cl"></div> </div>
|
||||
<div class="course-list-row f13 c-grey3 mt10"><span class="fl ml15">选择分班</span></div>
|
||||
<ul class="class-list f13 c-grey3">
|
||||
<li ng-class="{'border-bottom-none':groups.length == 0}"><span class="fl ml10 class-list-name hidden">暂无</span><span ng-click="selectGroup(0)" class="login-box fr mr10 mt12 img-circle" ng-class="[{'checked': selectid == 0}]"></span></li>
|
||||
|
||||
<div ng-repeat="group in groups">
|
||||
<li ng-class="{'border-bottom-none':$last}"><span class="fl ml10 class-list-name hidden">{{group.course_group.name}}</span><span ng-click="selectGroup(group.course_group.id)" class="login-box fr mr10 mt12 img-circle" ng-class="[{'checked': selectid == group.course_group.id}]"></span></li>
|
||||
<!--<li class="border-bottom-none"><span class="fl ml10 class-list-name hidden">分班2</span><span class="login-box fr mr10 mt12 img-circle" ng-class="['login-box', 'fr', 'mr10', 'mt12', {'checked': student}]"></span></li>-->
|
||||
</div>
|
||||
</ul>
|
||||
|
||||
<div class="f12 c-grey6 mt10 ml15">
|
||||
<span class="f13 c-grey3">提示</span>
|
||||
<ul class="mb15 mt5 ml10 new-tip">
|
||||
<li><span class="project-intro-dot">•</span>该班级存在分班信息,请选择属于您的小班</li>
|
||||
<li><span class="project-intro-dot">•</span>老师可以在班级的成员管理页,对所有成员进行修改</li>
|
||||
<li><span class="project-intro-dot">•</span>学生可以在班级的我的同学页,对自己进行修改</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="bottom-tab-wrap mt10">
|
||||
<a ng-click="cancel()" ng-click="cancel()" class="weixin-tab c-grey border-top">跳过</a>
|
||||
<a ng-click="confirm()" ng-click="joinClass()" class="weixin-tab link-blue2 border-top">确认</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="tip_1" class="blue-title">{{tip_1}}</div>
|
||||
|
||||
<my-alert message="alertService.message" title="alertService.title" visible="alertService.visible" cb="alertService.cb"></my-alert>
|
||||
</div>
|
@ -0,0 +1,28 @@
|
||||
<div class="post-container">
|
||||
<div loading-spinner></div>
|
||||
<div class="post-container" style="padding-bottom:50px;">
|
||||
<div class="blue-title">我的信息</div>
|
||||
<div class="class-detail-row f13 c-grey3"><img ng-src="{{current_edit_member.user.img_url}}" class="fl ml10 img-circle mt4" width="30" height="30"><span class="fl mt10 ml10 ng-binding">{{current_edit_member.user.realname == "" ? current_edit_member.user.name : current_edit_member.user.realname}}</span><img ng-src="/images/wechat/{{current_edit_member.user.gender==0 ? 'male' : 'female'}}.png" class="fl ml10 mt10" width="15"><div class="cl"></div> </div>
|
||||
<div class="course-list-row f13 c-grey3 mt10"><span class="fl ml15">角色</span></div>
|
||||
<div class="f13 ml35 mt10 c-grey3">学生</div>
|
||||
<div class="course-list-row f13 c-grey3 mt10"><span class="fl ml15">选择分班</span></div>
|
||||
<ul class="class-list f13 c-grey3">
|
||||
<li ng-class="{'border-bottom-none':groups.length == 0}"><span class="fl ml10 class-list-name hidden">暂无</span><span ng-click="selectGroup(0)" class="login-box fr mr10 mt12 img-circle" ng-class="[{'checked': selectid == 0}]"></span></li>
|
||||
|
||||
<div ng-repeat="group in groups">
|
||||
<li ng-class="{'border-bottom-none':$last}"><span class="fl ml10 class-list-name hidden">{{group.course_group.name}}</span><span ng-click="selectGroup(group.course_group.id)" class="login-box fr mr10 mt12 img-circle" ng-class="[{'checked': selectid == group.course_group.id}]"></span></li>
|
||||
<!--<li class="border-bottom-none"><span class="fl ml10 class-list-name hidden">分班2</span><span class="login-box fr mr10 mt12 img-circle" ng-class="['login-box', 'fr', 'mr10', 'mt12', {'checked': student}]"></span></li>-->
|
||||
</div>
|
||||
</ul>
|
||||
|
||||
<div class="bottom-tab-wrap mt10">
|
||||
<a href="javascript:void(0);" ng-click="cancel()" class="weixin-tab c-grey border-top">取消</a>
|
||||
<a href="javascript:void(0);" ng-click="confirm()" class="weixin-tab link-blue2 border-top">确定</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="tip_1" class="blue-title">{{tip_1}}</div>
|
||||
<div ng-show="tip_2" class="blue-title">{{tip_2}}</div>
|
||||
|
||||
<my-alert message="alertService.message" title="alertService.title" visible="alertService.visible" cb="alertService.cb"></my-alert>
|
||||
</div>
|
After Width: | Height: | Size: 197 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.1 KiB |
@ -0,0 +1,48 @@
|
||||
app.controller('ClassGroupController', ['$scope', 'config','$http', 'auth','$location','$routeParams','alertService','rms','common','$timeout', function($scope, config, $http, auth, $location, $routeParams,alertService,rms,common,$timeout){
|
||||
// common.checkLogin();
|
||||
|
||||
$scope.replaceUrl = function(url){
|
||||
return url;
|
||||
};
|
||||
|
||||
var vm = $scope;
|
||||
var courseid = $routeParams.id;
|
||||
vm.alertService = alertService.create();
|
||||
|
||||
if(!vm.course){
|
||||
$http.get(config.apiUrl+ 'courses/'+courseid+"?token="+auth.token()).then(
|
||||
function(response) {
|
||||
console.log(response.data);
|
||||
if (response.data.status == 0){
|
||||
vm.course = response.data.data;
|
||||
console.log("courses");
|
||||
console.log(response.data.data);
|
||||
}
|
||||
else{
|
||||
vm.alertService.showMessage('提示', response.data.message);
|
||||
}
|
||||
if(!vm.course){
|
||||
vm.tip_1 = "该班级不存在或已被删除";
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
$http.get(config.apiUrl + 'courses/course_groups_withstudent/'+courseid+'?token='+auth.token()).then(
|
||||
function(response) {
|
||||
console.log("groups=");
|
||||
console.log(response);
|
||||
if(response.data.status == 0) {
|
||||
vm.groups = response.data.data;
|
||||
}
|
||||
else{
|
||||
vm.groups = [];
|
||||
}
|
||||
});
|
||||
|
||||
vm.goEditGroup = function(){
|
||||
$location.path("/edit_class_group").search({id: courseid});
|
||||
}
|
||||
|
||||
}]);
|
@ -0,0 +1,136 @@
|
||||
|
||||
|
||||
app.controller('EditClassGroupController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms','common', function($scope, $http, auth, config, alertService, $location,$routeParams, rms,common){
|
||||
var vm = $scope;
|
||||
var courseid = $routeParams.id;
|
||||
vm.alertService = alertService.create();
|
||||
vm.alertService_2 = alertService.create();
|
||||
|
||||
if(!vm.course){
|
||||
$http.get(config.apiUrl+ 'courses/'+courseid+"?token="+auth.token()).then(
|
||||
function(response) {
|
||||
console.log(response.data);
|
||||
if (response.data.status == 0){
|
||||
vm.course = response.data.data;
|
||||
console.log("courses");
|
||||
console.log(response.data.data);
|
||||
}
|
||||
else{
|
||||
vm.alertService.showMessage('提示', response.data.message);
|
||||
}
|
||||
if(!vm.course){
|
||||
vm.tip_1 = "该班级不存在或已被删除";
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
$http.get(config.apiUrl + 'courses/course_groups/'+courseid+'?token='+auth.token()).then(
|
||||
function(response) {
|
||||
console.log("groups=");
|
||||
console.log(response);
|
||||
if(response.data.status == 0) {
|
||||
vm.groups = response.data.data;
|
||||
for(var i in vm.groups){
|
||||
vm.groups[i].tmpname = vm.groups[i].course_group.name;
|
||||
}
|
||||
}
|
||||
else{
|
||||
vm.groups = [];
|
||||
}
|
||||
});
|
||||
|
||||
vm.addGroup = function(){
|
||||
vm.groups.push({tmpname:""});
|
||||
};
|
||||
|
||||
vm.deleteGroup = function(index){
|
||||
var group = vm.groups[index];
|
||||
if(group.course_group){
|
||||
vm.alertService_2.showMessage('提示', '您确定要删除该分班吗?', function() {
|
||||
$http.post(config.apiUrl+'courses/delete_coursegroup', {
|
||||
token: auth.token(),
|
||||
id: courseid,
|
||||
course_group_id:group.course_group.id
|
||||
}).then(function(response){
|
||||
console.log(response);
|
||||
if(response.data.status == 0){
|
||||
vm.alertService.showMessage('提示', "删除成功!",function(){
|
||||
vm.groups.splice(index, 1);
|
||||
});
|
||||
} else {
|
||||
vm.alertService.showMessage('提示', response.data.message);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
} else {
|
||||
vm.groups.splice(index, 1);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
vm.newGroup = function (frm, groups) {
|
||||
frm.$setSubmitted();
|
||||
console.log(groups);
|
||||
|
||||
if(!frm.$valid){
|
||||
console.log(frm.$error);
|
||||
return;
|
||||
}
|
||||
|
||||
if(vm.groups.length == 0){
|
||||
$location.path("/class").search({id: courseid,tag:1});
|
||||
return;
|
||||
}
|
||||
//不能有相同名称的分班
|
||||
for(var i=0;i< vm.groups.length-1;i++) {
|
||||
for (var j=i+1;j<vm.groups.length;j++){
|
||||
if(vm.groups[i].tmpname == vm.groups[j].tmpname){
|
||||
vm.alertService.showMessage('提示', "分班名称不能重复!");
|
||||
return;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var add_groups = [];
|
||||
var modify_groups = [];
|
||||
|
||||
for(var i in vm.groups){
|
||||
var group = vm.groups[i];
|
||||
if(!group.course_group){
|
||||
add_groups.push(group.tmpname);
|
||||
}
|
||||
else if(group.tmpname != group.course_group.name){
|
||||
modify_groups.push({id:group.course_group.id,name:group.tmpname});
|
||||
}
|
||||
}
|
||||
|
||||
if(add_groups.length == 0 && modify_groups.length == 0){
|
||||
vm.alertService.showMessage('提示', "保存分班成功!",function(){
|
||||
$location.path("/class").search({id: courseid,tag:1});
|
||||
return;
|
||||
});
|
||||
}
|
||||
|
||||
//编辑分班
|
||||
$http.post(config.apiUrl+'courses/edit_coursegroup', {
|
||||
token: auth.token(),
|
||||
id: courseid,
|
||||
add_groups: add_groups,
|
||||
modify_groups: modify_groups
|
||||
}).then(function(response){
|
||||
console.log(response);
|
||||
if(response.data.status == 0){
|
||||
vm.alertService.showMessage('提示', "保存分班成功!",function(){
|
||||
$location.path("/class").search({id: courseid,tag:1});
|
||||
});
|
||||
} else {
|
||||
vm.alertService.showMessage('提示', response.data.message,function(){
|
||||
$location.path("/class").search({id: courseid,tag:1});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}] );
|
@ -0,0 +1,83 @@
|
||||
|
||||
|
||||
app.controller('JoinClassGroupController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms','wx','common', function($scope, $http, auth, config, alertService, $location,$routeParams, rms,wx,common){
|
||||
var vm = $scope;
|
||||
|
||||
var course_id = $routeParams.id;
|
||||
vm.alertService = alertService.create();
|
||||
vm.selectid = null;
|
||||
|
||||
$http.get(config.apiUrl+ 'courses/'+course_id+"?token="+auth.token()).then(
|
||||
function(response) {
|
||||
console.log(response.data);
|
||||
if (response.data.status == 0){
|
||||
vm.current_course = response.data.data;
|
||||
console.log("courses=");
|
||||
console.log(response.data.data);
|
||||
if(vm.current_course){
|
||||
$http.get(config.apiUrl + 'courses/course_groups/'+course_id+'?token='+auth.token()).then(
|
||||
function(response) {
|
||||
console.log("groups=");
|
||||
console.log(response);
|
||||
if(response.data.status == 0) {
|
||||
vm.groups = response.data.data;
|
||||
}
|
||||
else{
|
||||
vm.groups = [];
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
else{
|
||||
vm.alertService.showMessage('提示', response.data.message);
|
||||
}
|
||||
if(!vm.current_course){
|
||||
vm.tip_1 = "该班级不存在或已被删除";
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
vm.selectGroup = function(id){
|
||||
vm.selectid = id;
|
||||
};
|
||||
|
||||
|
||||
vm.cancel = function(){
|
||||
rms.save('syllabuses',[]);
|
||||
$location.path("/class_list");
|
||||
};
|
||||
|
||||
vm.confirm = function(){
|
||||
if(vm.selectid == null){
|
||||
vm.alertService.showMessage('提示', "请选择分班!");
|
||||
return;
|
||||
}
|
||||
|
||||
if(vm.selectid == 0){
|
||||
rms.save('syllabuses',[]);
|
||||
$location.path("/class_list");
|
||||
return;
|
||||
}
|
||||
|
||||
//加入分班
|
||||
$http.post(config.apiUrl+'courses/user_join_coursegroup', {
|
||||
token: auth.token(),
|
||||
id: course_id,
|
||||
course_group_id:vm.selectid
|
||||
}).then(function(response){
|
||||
console.log(response);
|
||||
if(response.data.status == 0){
|
||||
vm.alertService.showMessage('提示', "选择分班成功!",function(){
|
||||
rms.save('syllabuses',[]);
|
||||
$location.path("/class_list");
|
||||
});
|
||||
} else {
|
||||
vm.alertService.showMessage('提示', response.data.message,function(){
|
||||
rms.save('syllabuses',[]);
|
||||
$location.path("/class_list");
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
}] );
|
@ -0,0 +1,117 @@
|
||||
|
||||
|
||||
app.controller('SelectMyCourseGroupController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms','common', function($scope, $http, auth, config, alertService, $location,$routeParams, rms,common){
|
||||
// common.checkLogin();
|
||||
|
||||
var vm = $scope;
|
||||
|
||||
vm.current_review_member = rms.get('current_review_member');
|
||||
|
||||
vm.alertService = alertService.create();
|
||||
|
||||
vm.tip_1 = "";
|
||||
vm.tip_2 = "";
|
||||
|
||||
var course_id = $routeParams.id;
|
||||
var user_id = $routeParams.user_id;
|
||||
vm.selectid = null;
|
||||
if(!vm.current_course){
|
||||
$http.get(config.apiUrl+ 'courses/'+course_id+"?token="+auth.token()).then(
|
||||
function(response) {
|
||||
console.log(response.data);
|
||||
if (response.data.status == 0){
|
||||
vm.current_course = response.data.data;
|
||||
console.log("courses");
|
||||
console.log(response.data.data);
|
||||
}
|
||||
else{
|
||||
vm.alertService.showMessage('提示', response.data.message);
|
||||
}
|
||||
if(!vm.current_course){
|
||||
vm.tip_1 = "该班级不存在或已被删除";
|
||||
}
|
||||
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
if(!vm.current_edit_member){
|
||||
$http.post(config.apiUrl+'courses/get_member_info', {
|
||||
token: auth.token(),
|
||||
id: course_id,
|
||||
user_id:user_id
|
||||
}).then(function(response){
|
||||
if(response.data.status!=0){
|
||||
vm.alertService.showMessage('提示', response.data.message,function(){
|
||||
$location.path("/class").search({id: course_id,tag:1});
|
||||
});
|
||||
} else {
|
||||
console.log(response);
|
||||
course_id = response.data.course_id;
|
||||
vm.current_edit_member = response.data.member_info;
|
||||
vm.current_roles_id = vm.current_edit_member.roles_id;
|
||||
vm.selectid = response.data.course_group_id;
|
||||
vm.course_group_id = vm.selectid;
|
||||
|
||||
for(var i in vm.current_roles_id){
|
||||
if(vm.current_roles_id[i] == 10){
|
||||
vm.student = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(!vm.student){
|
||||
vm.tip_2 = "您不是该班级的学生!";
|
||||
}
|
||||
else{
|
||||
$http.get(config.apiUrl + 'courses/course_groups/'+course_id+'?token='+auth.token()).then(
|
||||
function(response) {
|
||||
console.log("groups=");
|
||||
console.log(response);
|
||||
if(response.data.status == 0) {
|
||||
vm.groups = response.data.data;
|
||||
}
|
||||
else{
|
||||
vm.groups = [];
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
vm.cancel = function(){
|
||||
window.history.back();
|
||||
};
|
||||
|
||||
vm.confirm = function(){
|
||||
if(vm.course_group_id == vm.selectid){
|
||||
$location.path("/class").search({id: course_id,tag:1});
|
||||
return;
|
||||
}
|
||||
|
||||
//加入分班
|
||||
$http.post(config.apiUrl+'courses/user_edit_coursegroup', {
|
||||
token: auth.token(),
|
||||
id: course_id,
|
||||
course_group_id:vm.selectid,
|
||||
user_id:user_id
|
||||
}).then(function(response){
|
||||
console.log(response);
|
||||
if(response.data.status == 0){
|
||||
vm.alertService.showMessage('提示', "修改分班成功!",function(){
|
||||
$location.path("/class").search({id: course_id,tag:1});
|
||||
|
||||
});
|
||||
} else {
|
||||
vm.alertService.showMessage('提示', response.data.message,function(){
|
||||
$location.path("/class").search({id: course_id,tag:1});
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
vm.selectGroup = function(id){
|
||||
vm.selectid = id;
|
||||
};
|
||||
|
||||
}] );
|
@ -0,0 +1,22 @@
|
||||
/**
|
||||
* Created by ttang on 2016/9/20.
|
||||
*/
|
||||
app.directive('imgPreview',["$timeout",'wx',function(timer,wx){
|
||||
return{
|
||||
restrict: 'A',
|
||||
scope: {},
|
||||
link: function(scope, element){
|
||||
timer(function(){
|
||||
var srcList = [];
|
||||
$.each($(".post-all-content img"),function(i,item){
|
||||
if(item.src){
|
||||
srcList.push(item.src);
|
||||
$(item).click(function(e){
|
||||
wx.previewImage({current:this.src,urls:srcList});
|
||||
});
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
}]);
|
Loading…
Reference in new issue