Merge branch 'weixin_guange' of https://git.trustie.net/jacknudt/trustieforge into weixin_guange

This commit is contained in:
cxt 2016-04-06 15:45:43 +08:00
commit 7cc98db541
5 changed files with 149 additions and 125 deletions

View File

@ -70,7 +70,7 @@
<div class="cl"></div> <div class="cl"></div>
</div> </div>
<div class="post-interactive"> <div class="post-interactive">
<div class="post-interactive-column c-grey2"><a href="javascript:void(0);" class="c-grey">回复 ({{act.reply_count}})</a></div> <div class="post-interactive-column c-grey2"><a href="javascript:void(0);" ng-href="#/course_discussion/{{act.act_id}}" class="c-grey">回复 ({{act.reply_count}})</a></div>
<div class="post-interactive-column c-grey2">赞 ({{act.activity_praise_count}})</div> <div class="post-interactive-column c-grey2">赞 ({{act.activity_praise_count}})</div>
</div> </div>
</div> </div>
@ -148,7 +148,7 @@
<div class="cl"></div> <div class="cl"></div>
</div> </div>
<div class="post-interactive"> <div class="post-interactive">
<div class="post-interactive-column c-grey2"><a href="javascript:void(0);" onclick="window.open('project_discussion.html?id=<!=activities[i].act_id!>');" class="c-grey"> 回复 (<!=activities[i].reply_count!>) </a></div> <div class="post-interactive-column c-grey2"><a href="javascript:void(0);" ng-href="#/project_discussion/{{act.act_id}}" class="c-grey"> 回复 (<!=activities[i].reply_count!>) </a></div>
<div class="post-interactive-column c-grey2">赞 (<!=activities[i].activity_praise_count!>)</div> <div class="post-interactive-column c-grey2">赞 (<!=activities[i].activity_praise_count!>)</div>
</div> </div>
</div> </div>

View File

@ -3,42 +3,40 @@
<div class="post-container"> <div class="post-container">
<div class="post-wrapper"> <div class="post-wrapper">
<div class="post-main"> <div class="post-main">
<div class="post-avatar fl"><img src="<!=discussion.user.img_url!>" width="45" height="45" class="border-radius" /></div> <div class="post-avatar fl"><img ng-src="{{discussion.user.img_url}}" width="45" height="45" class="border-radius" /></div>
<div class="post-title hidden mb5"><span class="c-grey3 f15 fb"><!=discussion.subject!></span></div> <div class="post-title hidden mb5"><span class="c-grey3 f15 fb">{{discussion.subject}}</span></div>
<div class="post-title hidden"><a herf="javascript:void(0);" class="mr10"><!=discussion.user.nickname!></a>to<a herf="javascript:void(0);" class="ml10"><!=discussion.course_project_name!>&nbsp;&nbsp;|&nbsp;&nbsp;课程问答区</a></div> <div class="post-title hidden"><a herf="javascript:void(0);" class="mr10">{{discussion.user.nickname}}</a>to<a herf="javascript:void(0);" class="ml10">{{discussion.course_project_name}}&nbsp;&nbsp;|&nbsp;&nbsp;课程问答区</a></div>
<div class="cl"></div> <div class="cl"></div>
<div class="post-content c-grey2 mt10" style="height:auto;"> <div class="post-content c-grey2 mt10" style="height:auto;">
<div class="post-all-content"><!:=discussion.content!></div> <div class="post-all-content" ng-bind-html="discussion.content|safeHtml"></div>
</div> </div>
<div class="cl"></div> <div class="cl"></div>
<span class="c-grey f13 mt10 fl"><!=discussion.created_on!></span> <span class="c-grey f13 mt10 fl">{{discussion.created_on}}</span>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
<div class="post-interactive border-bottom"> <div class="post-interactive border-bottom">
<div class="post-interactive-reply c-grey2">回复 <span class="reply-num">(<!=discussion.replies_count!>)</span></div> <div class="post-interactive-reply c-grey2">回复 <span class="reply-num">({{discussion.replies_count}})</span></div>
<div class="post-interactive-praise c-grey2"><span class="paise-text"></span><span class="praise-num">((<!=discussion.message_praise_count!>))</span></div> <div class="post-interactive-praise c-grey2"><span class="paise-text"></span><span class="praise-num">({{discussion.message_praise_count}})</span></div>
</div> </div>
<div id="all_course_message_reply"> <div id="all_course_message_reply">
<! for(var j = (discussion.message_children.length -1); j >= 0; --j){ !> <div class="post-reply-wrap border-bottom" ng-repeat="journal in discussion.message_children">
<div class="post-reply-wrap border-bottom">
<div class="post-reply-row"> <div class="post-reply-row">
<div class="post-reply-avatar fl"><img src="<!=discussion.message_children[j].user.img_url!>" width="45" height="45" class="border-radius" /></div> <div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
<div class="ml55"> <div class="ml55">
<div class="post-reply-user hidden"><!=discussion.message_children[j].user.realname!></div> <div class="post-reply-user hidden">{{journal.user.realname}}</div>
<div class="post-reply-content c-grey2 mb10"><!:=discussion.message_children[j].content!></div> <div class="post-reply-content c-grey2 mb10" ng-bind-html="journal.content|safeHtml"></div>
<div class="post-reply-date fl"><!=discussion.message_children[j].lasted_comment!></div> <div class="post-reply-date fl">{{journal.lasted_comment}}</div>
<div class="post-reply-trigger fr undis">回复</div> <div class="post-reply-trigger fr undis">回复</div>
</div> </div>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
</div> </div>
<! } !>
</div> </div>
<div class="post-input-wrap"> <div class="post-input-wrap">
<div class="post-reply-row"> <div class="post-reply-row">
<!--<div class="post-reply-avatar fl" id = "100"><img src="images/post-avatar.jpg" width="30" height="30" /></div>--> <!--<div class="post-reply-avatar fl"><img src="images/post-avatar.jpg" width="30" height="30" /></div>-->
<input type="text" class="post-reply-input" id="postInput" /> <input type="text" class="post-reply-input" id="postInput" ng-model="formData.comment" />
<input type="submit" value="回复" class="post-reply-submit fr mt10"/> <button ng-click="addIssueReply(formData)" class="post-reply-submit fr mt10">回复</button>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
</div> </div>

View File

@ -24,7 +24,7 @@
<div class="post-reply-avatar fl"><img ng-src="{{comments.author.img_url}}" width="45" height="45" class="border-radius" /></div> <div class="post-reply-avatar fl"><img ng-src="{{comments.author.img_url}}" width="45" height="45" class="border-radius" /></div>
<div class="ml55"> <div class="ml55">
<div class="post-reply-user hidden">{{comments.author.realname}}</div> <div class="post-reply-user hidden">{{comments.author.realname}}</div>
<div class="post-reply-content c-grey2 mb10">{{comments.comments}}</div> <div class="post-reply-content c-grey2 mb10" ng-bind-html="comments.comments|safeHtml"></div>
<div class="post-reply-date fl">{{comments.created_on}}</div> <div class="post-reply-date fl">{{comments.created_on}}</div>
<div class="post-reply-trigger fr undis">回复</div> <div class="post-reply-trigger fr undis">回复</div>
</div> </div>

View File

@ -1,89 +1,44 @@
<!DOCTYPE html>
<html>
<head>
<title>项目讨论区</title>
<meta charset='utf-8' />
<meta name="keywords" content="" />
<meta name="description" content="" />
<meta name="apple-mobile-web-app-capable" content="no">
<meta content='True' name='HandheldFriendly' />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
<link type="text/css" rel="stylesheet" href="/stylesheets/weui/weixin.css" />
</head>
<body>
<div id="p-discussion-container"></div>
<!-- 模板1开始可以使用scripttype设置为text/html来存放模板片段并且用id标示 --> <!-- 模板1开始可以使用scripttype设置为text/html来存放模板片段并且用id标示 -->
<script id="t:project-discussion" type="text/html">
<div class="post-container"> <div class="post-container">
<div class="post-wrapper"> <div class="post-wrapper">
<div class="post-main"> <div class="post-main">
<div class="post-avatar fl"><img src="<!=discussion.user.img_url!>" width="45" height="45" class="border-radius" /></div> <div class="post-avatar fl"><img ng-src="{{discussion.user.img_url}}" width="45" height="45" class="border-radius" /></div>
<div class="post-title hidden mb5"><span class="c-grey3 f15 fb"><!=discussion.subject!></span></div> <div class="post-title hidden mb5"><span class="c-grey3 f15 fb">{{discussion.subject}}</span></div>
<div class="post-title hidden"><a herf="javascript:void(0);" class="mr10"><!=discussion.user.nickname!></a>to<a herf="javascript:void(0);" class="ml10"><!=discussion.course_project_name!>&nbsp;&nbsp;|&nbsp;&nbsp;项目讨论</a></div> <div class="post-title hidden"><a herf="javascript:void(0);" class="mr10">{{discussion.user.nickname}}</a>to<a herf="javascript:void(0);" class="ml10">{{discussion.course_project_name}}&nbsp;&nbsp;|&nbsp;&nbsp;课程问答区</a></div>
<div class="cl"></div> <div class="cl"></div>
<div class="post-content c-grey2 mt10" style="height:auto;"> <div class="post-content c-grey2 mt10" style="height:auto;">
<div class="post-all-content"><!:=discussion.content!></div> <div class="post-all-content" ng-bind-html="discussion.content|safeHtml"></div>
</div> </div>
<div class="cl"></div> <div class="cl"></div>
<span class="c-grey f13 mt10 fl"><!=discussion.created_on!></span> <span class="c-grey f13 mt10 fl">{{discussion.created_on}}</span>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
<div class="post-interactive border-bottom"> <div class="post-interactive border-bottom">
<div class="post-interactive-reply c-grey2">回复 <span class="reply-num">(<!=discussion.replies_count!>)</span></div> <div class="post-interactive-reply c-grey2">回复 <span class="reply-num">({{discussion.replies_count}})</span></div>
<div class="post-interactive-praise c-grey2"><span class="paise-text"></span><span class="praise-num">()</span></div> <div class="post-interactive-praise c-grey2"><span class="paise-text"></span><span class="praise-num">({{discussion.message_praise_count}})</span></div>
</div> </div>
<div id="all_homework_reply"> <div id="all_course_message_reply">
<! for(var j = (homework.journals_for_messages.length - 1); j >= 0; --j){ !> <div class="post-reply-wrap border-bottom" ng-repeat="journal in discussion.message_children">
<div class="post-reply-wrap border-bottom">
<div class="post-reply-row"> <div class="post-reply-row">
<div class="post-reply-avatar fl"><img src="<!=discussion.message_children[j].user.img_url!>" width="45" height="45" class="border-radius" /></div> <div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
<div class="ml55"> <div class="ml55">
<div class="post-reply-user hidden"><!=discussion.message_children[j].user.realname!></div> <div class="post-reply-user hidden">{{journal.user.realname}}</div>
<div class="post-reply-content c-grey2 mb10"><!:=discussion.message_children[j].content!></div> <div class="post-reply-content c-grey2 mb10" ng-bind-html="journal.content|safeHtml"></div>
<div class="post-reply-date fl"><!=discussion.message_children[j].lasted_comment!></div> <div class="post-reply-date fl">{{journal.lasted_comment}}</div>
<div class="post-reply-trigger fr undis">回复</div> <div class="post-reply-trigger fr undis">回复</div>
</div> </div>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
</div> </div>
<! } !>
</div> </div>
<div class="post-input-wrap"> <div class="post-input-wrap">
<div class="post-reply-row"> <div class="post-reply-row">
<!--<div class="post-reply-avatar fl"><img src="images/post-avatar.jpg" width="30" height="30" /></div>--> <!--<div class="post-reply-avatar fl"><img src="images/post-avatar.jpg" width="30" height="30" /></div>-->
<input type="text" class="post-reply-input" id="postInput" /> <input type="text" class="post-reply-input" id="postInput" ng-model="formData.comment" />
<input type="submit" value="回复" class="post-reply-submit fr mt10" /> <button ng-click="addIssueReply(formData)" class="post-reply-submit fr mt10">回复</button>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</script>
<script id="t:homework-detail-reply" type="text/html">
<div class="post-reply-wrap border-bottom">
<div class="post-reply-row">
<div class="post-reply-avatar fl"><img src="<!=reply.user.img_url!>" width="45" height="45" class="border-radius" /></div>
<div class="ml55">
<div class="post-reply-user hidden"><!=reply.user.realname!></div>
<div class="post-reply-content c-grey2 mb10"><!:=reply.notes!></div>
<div class="post-reply-date fl"><!=reply.lasted_comment!></div>
</div>
<div class="cl"></div>
</div>
</div>
</script>
<script src="/javascripts/jquery-1.3.2.js"></script>
<script src="/javascripts/baiduTemplate.js"></script>
<script src="/javascripts/wechat/project_discussion.js"></script>
<script src="/javascripts/wechat/auth.js"></script>
<script src="/javascripts/wechat/homework_detail.js"></script>
</body>
</html>

View File

@ -1,19 +1,23 @@
var app = angular.module('wechat', ['ngRoute','ngCookies']); var app = angular.module('wechat', ['ngRoute','ngCookies']);
var apiUrl = 'http://localhost:3000/api/v1/'; var apiUrl = 'http://wechat.trustie.net/api/v1/';
var debug = true; //调试标志,如果在本地请置为true var debug = false; //调试标志,如果在本地请置为true
app.factory('auth', function($http,$routeParams, $cookies){ if(debug===true){
apiUrl = 'http://localhost:3000/api/v1/';
}
app.factory('auth', function($http,$routeParams, $cookies, $q){
var _openid = ''; var _openid = '';
if(debug===true){ if(debug===true){
_openid = "2"; _openid = "1";
} }
var getOpenId = function(cb) { var getOpenId = function() {
var deferred = $q.defer();
if (typeof _openid !== 'undefined' && _openid.length > 0) { if (typeof _openid !== 'undefined' && _openid.length > 0) {
cb(_openid); deferred.resolve(_openid);
return; } else {
}
var code = $routeParams.code; var code = $routeParams.code;
$http({ $http({
url: '/wechat/get_open_id', url: '/wechat/get_open_id',
@ -30,12 +34,12 @@ app.factory('auth', function($http,$routeParams, $cookies){
_openid = $cookies.get('openid'); _openid = $cookies.get('openid');
} }
} }
deferred.resolve(_openid);
cb(_openid);
}, function errorCallback(response) { }, function errorCallback(response) {
cb(null); deferred.reject(response);
}); });
}
return deferred.promise;
}; };
var openid = function(){ var openid = function(){
return _openid; return _openid;
@ -43,14 +47,28 @@ app.factory('auth', function($http,$routeParams, $cookies){
return {getOpenId: getOpenId, openid: openid}; return {getOpenId: getOpenId, openid: openid};
}); });
app.controller('ActivityController',function($scope, $http, auth){
$scope.replaceUrl = function(url){ app.factory('rms', function(){
var _saveStorage = {};
var save = function(key, value){
_saveStorage[key] = value;
};
var get = function(key){
return _saveStorage[key];
}
return {save: save, get: get};
});
app.controller('ActivityController',function($scope, $http, auth, rms){
$scope.repaceUrl = function(url){
return "http://www.trustie.net/" + url; return "http://www.trustie.net/" + url;
} }
console.log("ActivityController load"); console.log("ActivityController load");
$scope.activities = []; $scope.activities = rms.get("activities") || [];
$scope.page = 1; $scope.page = 1;
var loadActData = function(page){ var loadActData = function(page){
@ -61,17 +79,18 @@ app.controller('ActivityController',function($scope, $http, auth){
data: {openid: auth.openid(), page: page}, data: {openid: auth.openid(), page: page},
}).then(function successCallback(response) { }).then(function successCallback(response) {
$scope.activities = $scope.activities.concat(response.data.data); $scope.activities = $scope.activities.concat(response.data.data);
rms.save('activities', $scope.activities);
}, function errorCallback(response) { }, function errorCallback(response) {
}); });
} }
auth.getOpenId().then(
auth.getOpenId(function(oid){ function successCallback(response){
if(!oid){
alert("获取openid出错");
} else {
loadActData($scope.page); loadActData($scope.page);
}, function errorCallback(response) {
alert("获取openid出错:"+response);
} }
}); );
$scope.loadActData = loadActData; $scope.loadActData = loadActData;
}); });
@ -177,7 +196,7 @@ app.controller('CourseNoticeController', function($scope, $http, $routeParams, a
}, function errorCallback(response) { }, function errorCallback(response) {
}); });
} };
loadData($routeParams.id); loadData($routeParams.id);
@ -208,6 +227,50 @@ app.controller('CourseNoticeController', function($scope, $http, $routeParams, a
} }
}); });
app.controller('CourseDiscussionController', function($scope, $http, $routeParams, auth){
$scope.formData = {comment: ''};
var loadData = function(id){
$http({
method: 'GET',
url: apiUrl+ "messages/"+id,
}).then(function successCallback(response) {
console.log(response.data);
$scope.discussion = response.data.data;
}, function errorCallback(response) {
});
};
loadData($routeParams.id);
$scope.addIssueReply = function(data){
console.log(data.comment);
if(!data.comment || data.comment.length<=0){
return;
}
var userInfo = {
type: "Message",
content: data.comment,
openid: auth.openid(),
};
$http({
method: 'POST',
url: apiUrl+ "new_comment/"+$routeParams.id,
data: userInfo,
}).then(function successCallback(response) {
alert("提交成功");
$scope.formData = {comment: ''};
loadData($routeParams.id);
}, function errorCallback(response) {
});
}
});
app.filter('safeHtml', function ($sce) { app.filter('safeHtml', function ($sce) {
return function (input) { return function (input) {
return $sce.trustAsHtml(input); return $sce.trustAsHtml(input);
@ -232,6 +295,14 @@ app.config(['$routeProvider',function ($routeProvider) {
templateUrl: 'course_notice.html', templateUrl: 'course_notice.html',
controller: 'CourseNoticeController' controller: 'CourseNoticeController'
}) })
.when('/course_discussion/:id', {
templateUrl: 'course_discussion.html',
controller: 'CourseDiscussionController'
})
.when('/project_discussion/:id', {
templateUrl: 'project_discussion.html',
controller: 'CourseDiscussionController'
})
.otherwise({ .otherwise({
redirectTo: '/activities' redirectTo: '/activities'
}); });