Merge branch 'cxt_course' into develop
This commit is contained in:
commit
b6c4c6a68c
|
@ -30,6 +30,4 @@ vendor/cache
|
|||
/public/files
|
||||
/tags
|
||||
/config/initializers/gitlab_config.rb
|
||||
/config/wechat.yml
|
||||
/config/menu.yml
|
||||
1234567
|
||||
|
|
|
@ -98,6 +98,7 @@ module Mobile
|
|||
end
|
||||
expose :act_type #缺陷/作业/讨论区/留言等类型
|
||||
expose :act_id
|
||||
expose :id
|
||||
expose :container_type #课程/项目/博客/个人
|
||||
expose :author, using: Mobile::Entities::User do |a, opt| #用户信息
|
||||
if a.is_a? ::UserActivity
|
||||
|
|
|
@ -304,7 +304,7 @@ class CoursesController < ApplicationController
|
|||
|
||||
@render_file = 'new_member_list'
|
||||
@score_sort_by = "desc"
|
||||
@sort_type = "score"
|
||||
@sort_type = params[:sort_type] ? params[:sort_type] : "score"
|
||||
@canShowCode = User.current.allowed_to?(:as_teacher,@course) && params[:role] != '1'
|
||||
@role = params[:role].nil? ? '2':params[:role]
|
||||
@is_remote = true
|
||||
|
@ -319,7 +319,7 @@ class CoursesController < ApplicationController
|
|||
if @course.open_student == 1 || User.current.member_of_course?(@course)
|
||||
@subPage_title = l :label_student_list
|
||||
page = params[:page].nil? ? 0 : (params['page'].to_i - 1)
|
||||
@all_members = student_homework_score(0,page, 10,@score_sort_by)
|
||||
@all_members = student_homework_score(0,page, 10,@score_sort_by,@sort_type)
|
||||
@members = @all_members
|
||||
else
|
||||
render_403
|
||||
|
|
|
@ -304,7 +304,7 @@ class MessagesController < ApplicationController
|
|||
|
||||
@content = "> #{ll(Setting.default_language, :text_user_wrote, @message.author)}\n> "
|
||||
@temp = Message.new
|
||||
@temp.content = "<blockquote>#{ll(Setting.default_language, :text_user_wrote, @message.author)} <br/>#{@message.content.html_safe}</blockquote>".html_safe
|
||||
@temp.content = "<blockquote>#{ll(Setting.default_language, :text_user_wrote, @message.author.show_name)} <br/>#{@message.content.html_safe}</blockquote>".html_safe
|
||||
end
|
||||
|
||||
def preview
|
||||
|
|
|
@ -154,12 +154,7 @@ class WechatsController < ActionController::Base
|
|||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
### controller method
|
||||
|
||||
|
||||
module Controllers
|
||||
def get_open_id
|
||||
begin
|
||||
|
@ -193,6 +188,8 @@ class WechatsController < ActionController::Base
|
|||
openid: openid,
|
||||
user: user
|
||||
)
|
||||
ws = WechatService.new
|
||||
ws.binding_succ_notice(user.id, "您已成功绑定Trustie平台", user.login, format_time(Time.now))
|
||||
render :json => {status:0, msg: "绑定成功"}
|
||||
rescue Exception=>e
|
||||
render :json => {status: -1, msg: e.message}
|
||||
|
@ -207,6 +204,19 @@ class WechatsController < ActionController::Base
|
|||
render 'wechats/login', layout: 'base_wechat'
|
||||
end
|
||||
|
||||
def user_activities
|
||||
session[:wechat_code] = params[:code] if params[:code]
|
||||
code = params[:code] || session[:wechat_code]
|
||||
openid = get_openid_from_code(code)
|
||||
@wechat_user = user_binded?(openid)
|
||||
unless @wechat_user
|
||||
redirect_to login_wechat_path
|
||||
return
|
||||
end
|
||||
|
||||
render 'wechats/user_activities', layout: nil
|
||||
end
|
||||
|
||||
private
|
||||
def get_openid_from_code(code)
|
||||
openid = session[:wechat_openid]
|
||||
|
@ -228,39 +238,10 @@ class WechatsController < ActionController::Base
|
|||
uw = UserWechat.where(openid: openid).first
|
||||
end
|
||||
|
||||
def user_activity(user)
|
||||
@user = user
|
||||
shield_project_ids = ShieldActivity.where("container_type='User' and container_id=#{@user.id} and shield_type='Project'").map(&:shield_id)
|
||||
shield_course_ids = ShieldActivity.where("container_type='User' and container_id=#{@user.id} and shield_type='Course'").map(&:shield_id)
|
||||
@page = params[:page] ? params[:page].to_i + 1 : 0
|
||||
user_project_ids = (@user.projects.visible.map{|project| project.id}-shield_project_ids).empty? ? "(-1)" : "(" + (@user.projects.visible.map{|project| project.id}-shield_project_ids).join(",") + ")"
|
||||
user_course_ids = (@user.courses.visible.map{|course| course.id}-shield_course_ids).empty? ? "(-1)" : "(" + (@user.courses.visible.map{|course| course.id}-shield_course_ids).join(",") + ")"
|
||||
course_types = "('Message','News','HomeworkCommon','Poll','Course')"
|
||||
project_types = "('Message','Issue','Project')"
|
||||
principal_types = "JournalsForMessage"
|
||||
|
||||
blog_ids = "("+@user.blog.id.to_s+","+((User.watched_by(@user.id).count == 0 )? '0' :User.watched_by(@user.id).map{|u| u.blog.id}.join(','))+")"
|
||||
@user_activities = UserActivity.where("(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types})" +
|
||||
"or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types}) "+
|
||||
"or (container_type = 'Principal' and act_type= '#{principal_types}' and container_id = #{@user.id}) " +
|
||||
"or (container_type = 'Blog' and act_type= 'BlogComment' and container_id in #{blog_ids})").order('updated_at desc').limit(10).offset(@page * 10)
|
||||
|
||||
|
||||
end
|
||||
|
||||
def process_activity(user_activity)
|
||||
act= user_activity.act
|
||||
case user_activity.container_type.to_s
|
||||
when 'Course'
|
||||
when 'Project'
|
||||
case user_activity.act_type.to_s
|
||||
when 'Issue'
|
||||
[act.project.name.to_s+" | 项目问题", act.subject.to_s, url_to_avatar(act.author),"http://wechat.trustie.net/app.html#/issue/#{act.id}"]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
include Controllers
|
||||
|
||||
|
|
|
@ -77,16 +77,16 @@ class BlogComment < ActiveRecord::Base
|
|||
end
|
||||
|
||||
#博客回复微信模板消息
|
||||
def blog_wechat_message
|
||||
ws = WechatService.new
|
||||
if self.parent_id.nil?
|
||||
self.author.watcher_users.each do |watcher|
|
||||
content = strip_html self.author.try(:realname) + " 发表了博客:" + self.title.html_safe, 200
|
||||
ws.message_update_template watcher.id, "blog_comment", self.id, "#{l(:label_new_blog_template)}", content, format_time(self.created_at)
|
||||
end
|
||||
else
|
||||
content = strip_html self.content.html_safe, 200
|
||||
ws.comment_template self.parent.author_id, "blog_comment", self.parent_id, "#{l(:label_blog_comment_template)}", self.author.try(:realname), format_time(self.created_at), content
|
||||
end
|
||||
end
|
||||
# def blog_wechat_message
|
||||
# ws = WechatService.new
|
||||
# if self.parent_id.nil?
|
||||
# self.author.watcher_users.each do |watcher|
|
||||
# content = strip_html self.author.try(:realname) + " 发表了博客:" + self.title.html_safe, 200
|
||||
# ws.message_update_template watcher.id, "blog_comment", self.id, "#{l(:label_new_blog_template)}", content, format_time(self.created_at)
|
||||
# end
|
||||
# else
|
||||
# content = strip_html self.content.html_safe, 200
|
||||
# ws.comment_template self.parent.author_id, "blog_comment", self.parent_id, "#{l(:label_blog_comment_template)}", self.author.try(:realname), format_time(self.created_at), content
|
||||
# end
|
||||
# end
|
||||
end
|
||||
|
|
|
@ -41,15 +41,15 @@ class Comment < ActiveRecord::Base
|
|||
after_destroy :down_course_score
|
||||
|
||||
def act_as_system_message
|
||||
ws = WechatService.new
|
||||
#ws = WechatService.new
|
||||
if self.commented.course
|
||||
if self.author_id != self.commented.author_id
|
||||
self.course_messages << CourseMessage.new(:user_id => self.commented.author_id, :course_id => self.commented.course.id, :viewed => false)
|
||||
count = ShieldWechatMessage.where("container_type='User' and container_id=#{self.commented.author_id} and shield_type='Course' and shield_id=#{self.commented.course.id}").count
|
||||
if count == 0
|
||||
content = strip_html self.comments.html_safe, 200
|
||||
ws.comment_template self.commented.author_id, "course_notice", self.id, "#{l(:label_notice_comment_template)}", self.author.try(:realname), format_time(self.created_on), content
|
||||
end
|
||||
# count = ShieldWechatMessage.where("container_type='User' and container_id=#{self.commented.author_id} and shield_type='Course' and shield_id=#{self.commented.course.id}").count
|
||||
# if count == 0
|
||||
# content = strip_html self.comments.html_safe, 200
|
||||
# ws.comment_template self.commented.author_id, "course_notice", self.id, "#{l(:label_notice_comment_template)}", self.author.try(:realname), format_time(self.created_on), content
|
||||
# end
|
||||
end
|
||||
else # 项目相关
|
||||
if self.author_id != self.commented.author_id
|
||||
|
|
|
@ -63,7 +63,7 @@ class HomeworkCommon < ActiveRecord::Base
|
|||
count = ShieldWechatMessage.where("container_type='User' and container_id=#{m.user_id} and shield_type='Course' and shield_id=#{self.course_id}").count
|
||||
if count == 0
|
||||
ws = WechatService.new
|
||||
ws.homework_template(m.user_id, "homework", self.id, "#{l(:label_new_homework_template)}", self.course.name, self.name.html_safe, self.end_time.to_s + " 23:59:59")
|
||||
ws.homework_message_notice(m.user_id, "homework", self.id, "#{m.user.show_name},#{l(:label_new_homework_template)}:", self.course.name, "新作业:"+ self.name.html_safe, "作业内容请点击“详情”查看。")
|
||||
end
|
||||
# end
|
||||
end
|
||||
|
@ -108,15 +108,15 @@ class HomeworkCommon < ActiveRecord::Base
|
|||
end
|
||||
|
||||
#修改作业后发送微信模板消息
|
||||
def wechat_message
|
||||
self.course.members.each do |member|
|
||||
count = ShieldWechatMessage.where("container_type='User' and container_id=#{member.user_id} and shield_type='Course' and shield_id=#{self.course_id}").count
|
||||
if count == 0
|
||||
ws = WechatService.new
|
||||
ws.homework_template(member.user_id, "homework", self.id, "#{l(:label_update_homework_template)}", self.course.name, self.name.html_safe, self.end_time.to_s + " 23:59:59")
|
||||
end
|
||||
end
|
||||
end
|
||||
# def wechat_message
|
||||
# self.course.members.each do |member|
|
||||
# count = ShieldWechatMessage.where("container_type='User' and container_id=#{member.user_id} and shield_type='Course' and shield_id=#{self.course_id}").count
|
||||
# if count == 0
|
||||
# ws = WechatService.new
|
||||
# ws.homework_template(member.user_id, "homework", self.id, "#{l(:label_update_homework_template)}", self.course.name, self.name.html_safe, self.end_time.to_s + " 23:59:59")
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
|
||||
delegate :language_name, :language, :to => :homework_detail_programing
|
||||
|
||||
|
|
|
@ -160,27 +160,27 @@ class Issue < ActiveRecord::Base
|
|||
unless self.author_id == self.assigned_to_id
|
||||
self.forge_messages << ForgeMessage.new(:user_id => self.assigned_to_id, :project_id => self.project_id, :viewed => false)
|
||||
end
|
||||
self.project.members.each do |m|
|
||||
count = ShieldWechatMessage.where("container_type='User' and container_id=#{m.user_id} and shield_type='Project' and shield_id=#{self.project_id}").count
|
||||
if m.user_id != self.author_id && count == 0
|
||||
ws = WechatService.new
|
||||
str = " 有新缺陷了: "
|
||||
case self.tracker_id
|
||||
when 1
|
||||
str = " 有新缺陷了: "
|
||||
when 2
|
||||
str = " 有新功能了: "
|
||||
when 3
|
||||
str = " 有新支持了: "
|
||||
when 4
|
||||
str = " 有新任务了: "
|
||||
when 5
|
||||
str = " 有新周报了: "
|
||||
end
|
||||
content = strip_html self.project.name + str + self.subject.html_safe, 200
|
||||
ws.message_update_template m.user_id, "issues", self.id, "#{l(:label_new_issue_template)}", content, format_time(self.created_on)
|
||||
end
|
||||
end
|
||||
# self.project.members.each do |m|
|
||||
# count = ShieldWechatMessage.where("container_type='User' and container_id=#{m.user_id} and shield_type='Project' and shield_id=#{self.project_id}").count
|
||||
# if m.user_id != self.author_id && count == 0
|
||||
# ws = WechatService.new
|
||||
# str = " 有新缺陷了: "
|
||||
# case self.tracker_id
|
||||
# when 1
|
||||
# str = " 有新缺陷了: "
|
||||
# when 2
|
||||
# str = " 有新功能了: "
|
||||
# when 3
|
||||
# str = " 有新支持了: "
|
||||
# when 4
|
||||
# str = " 有新任务了: "
|
||||
# when 5
|
||||
# str = " 有新周报了: "
|
||||
# end
|
||||
# content = strip_html self.project.name + str + self.subject.html_safe, 200
|
||||
# ws.message_update_template m.user_id, "issues", self.id, "#{l(:label_new_issue_template)}", content, format_time(self.created_on)
|
||||
# end
|
||||
# end
|
||||
if self.tracker_id == 5
|
||||
self.project.members.each do |m|
|
||||
if m.roles.first.to_s.include?("Manager") && m.user_id != self.author_id && m.user_id != self.assigned_to_id
|
||||
|
|
|
@ -238,11 +238,11 @@ class Journal < ActiveRecord::Base
|
|||
end
|
||||
|
||||
#缺陷回复微信模板消息
|
||||
def issue_wechat_message
|
||||
if !self.notes.nil? && self.notes.gsub(' ','') != ''
|
||||
ws = WechatService.new
|
||||
content = strip_html self.notes.html_safe, 200
|
||||
ws.comment_template self.issue.author_id, "issues", self.journalized_id, "#{l(:label_issue_comment_template)}", self.user.try(:realname), format_time(self.created_on), content
|
||||
end
|
||||
end
|
||||
# def issue_wechat_message
|
||||
# if !self.notes.nil? && self.notes.gsub(' ','') != ''
|
||||
# ws = WechatService.new
|
||||
# content = strip_html self.notes.html_safe, 200
|
||||
# ws.comment_template self.issue.author_id, "issues", self.journalized_id, "#{l(:label_issue_comment_template)}", self.user.try(:realname), format_time(self.created_on), content
|
||||
# end
|
||||
# end
|
||||
end
|
||||
|
|
|
@ -259,24 +259,24 @@ class JournalsForMessage < ActiveRecord::Base
|
|||
if self.m_parent_id.nil?
|
||||
if self.user_id != self.jour.user_id
|
||||
self.course_messages << CourseMessage.new(:user_id => self.jour.user_id,:course_id => self.jour.course.id, :viewed => false)
|
||||
count = ShieldWechatMessage.where("container_type='User' and container_id=#{self.jour.user_id} and shield_type='Course' and shield_id=#{self.jour.course_id}").count
|
||||
if count == 0
|
||||
ws = WechatService.new
|
||||
#content = truncate(strip_tags(self.notes.to_s), length: 200)
|
||||
content = strip_html self.notes.html_safe, 200
|
||||
ws.comment_template self.jour.user_id, "homework", self.jour_id, "#{l(:label_homework_comment_template)}", self.user.try(:realname), format_time(self.created_on), content
|
||||
end
|
||||
# count = ShieldWechatMessage.where("container_type='User' and container_id=#{self.jour.user_id} and shield_type='Course' and shield_id=#{self.jour.course_id}").count
|
||||
# if count == 0
|
||||
# ws = WechatService.new
|
||||
# #content = truncate(strip_tags(self.notes.to_s), length: 200)
|
||||
# content = strip_html self.notes.html_safe, 200
|
||||
# ws.comment_template self.jour.user_id, "homework", self.jour_id, "#{l(:label_homework_comment_template)}", self.user.try(:realname), format_time(self.created_on), content
|
||||
# end
|
||||
end
|
||||
else
|
||||
if self.user_id != self.parent.user_id
|
||||
self.course_messages << CourseMessage.new(:user_id => self.parent.user_id,:course_id => self.jour.course.id, :viewed => false)
|
||||
count = ShieldWechatMessage.where("container_type='User' and container_id=#{self.parent.user_id} and shield_type='Course' and shield_id=#{self.jour.course_id}").count
|
||||
if count == 0
|
||||
ws = WechatService.new
|
||||
#content = truncate(strip_tags(self.notes.to_s), length: 200)
|
||||
content = strip_html self.notes.html_safe, 200
|
||||
ws.comment_template self.parent.user_id, "homework", self.jour_id, "#{l(:label_new_second_comment_template)}", self.user.try(:realname), format_time(self.created_on), content
|
||||
end
|
||||
# count = ShieldWechatMessage.where("container_type='User' and container_id=#{self.parent.user_id} and shield_type='Course' and shield_id=#{self.jour.course_id}").count
|
||||
# if count == 0
|
||||
# ws = WechatService.new
|
||||
# #content = truncate(strip_tags(self.notes.to_s), length: 200)
|
||||
# content = strip_html self.notes.html_safe, 200
|
||||
# ws.comment_template self.parent.user_id, "homework", self.jour_id, "#{l(:label_new_second_comment_template)}", self.user.try(:realname), format_time(self.created_on), content
|
||||
# end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -293,7 +293,7 @@ class JournalsForMessage < ActiveRecord::Base
|
|||
if self.user_id != self.jour_id # 过滤自己给自己的留言消息
|
||||
receivers << self.jour
|
||||
content = strip_html self.notes, 200
|
||||
ws.message_update_template self.jour_id, "journal_for_message", self.id, "#{l(:label_new_journals_template)}", content, format_time(self.created_on)
|
||||
ws.journal_notice self.jour_id, "journal_for_message", self.id, "#{l(:label_new_journals_template)}", self.user.show_name, format_time(self.created_on),content
|
||||
end
|
||||
else # 留言回复
|
||||
reply_to = User.find(self.reply_id)
|
||||
|
@ -303,8 +303,8 @@ class JournalsForMessage < ActiveRecord::Base
|
|||
if self.user_id != self.parent.jour_id && self.reply_id != self.parent.jour_id # 给东家发信息,如果回复的对象是东家则不发
|
||||
receivers << self.parent.jour
|
||||
end
|
||||
content = strip_html self.notes, 200
|
||||
ws.comment_template self.reply_id, "journal_for_message", self.parent.id, "#{l(:label_journals_comment_template)}", self.user.try(:realname), format_time(self.created_on), content
|
||||
#content = strip_html self.notes, 200
|
||||
#ws.comment_template self.reply_id, "journal_for_message", self.parent.id, "#{l(:label_journals_comment_template)}", self.user.try(:realname), format_time(self.created_on), content
|
||||
end
|
||||
receivers.each do |r|
|
||||
self.user_feedback_messages << UserFeedbackMessage.new(:user_id => r.id, :journals_for_message_id => self.id, :journals_for_message_type => "Principal", :viewed => false)
|
||||
|
|
|
@ -258,28 +258,28 @@ class Message < ActiveRecord::Base
|
|||
# 主贴项目成员都能收到
|
||||
# 回帖:帖子的发布人收到
|
||||
def act_as_system_message
|
||||
ws = WechatService.new
|
||||
#ws = WechatService.new
|
||||
if self.course
|
||||
if self.parent_id.nil? # 主贴
|
||||
self.course.members.includes(:user).each do |m|
|
||||
if self.author.allowed_to?(:as_teacher, self.course) && m.user_id != self.author_id # 老师 自己的帖子不给自己发送消息
|
||||
#self.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => self.board.course_id, :viewed => false)
|
||||
count = ShieldWechatMessage.where("container_type='User' and container_id=#{m.user_id} and shield_type='Course' and shield_id=#{self.course.id}").count
|
||||
if count == 0
|
||||
content = strip_html self.subject, 200
|
||||
ws.topic_publish_template m.user_id, "course_discussion", self.id, "#{l(:label_course_topic_template)}", content, self.author.try(:realname), format_time(self.created_on)
|
||||
end
|
||||
# count = ShieldWechatMessage.where("container_type='User' and container_id=#{m.user_id} and shield_type='Course' and shield_id=#{self.course.id}").count
|
||||
# if count == 0
|
||||
# content = strip_html self.subject, 200
|
||||
# ws.topic_publish_template m.user_id, "course_discussion", self.id, "#{l(:label_course_topic_template)}", content, self.author.try(:realname), format_time(self.created_on)
|
||||
# end
|
||||
end
|
||||
end
|
||||
else # 回帖
|
||||
parent_author_id = Message.find(self.parent_id).author_id
|
||||
if parent_author_id != self.author_id # 只针对主贴回复,回复自己的帖子不发消息
|
||||
self.course_messages << CourseMessage.new(:user_id => parent_author_id, :course_id => self.board.course_id, :viewed => false)
|
||||
count = ShieldWechatMessage.where("container_type='User' and container_id=#{parent_author_id} and shield_type='Course' and shield_id=#{self.board.course_id}").count
|
||||
if count == 0
|
||||
content = strip_html self.content.html_safe, 200
|
||||
ws.comment_template parent_author_id, "course_discussion", self.parent_id, "#{l(:label_topic_comment_template)}", self.author.try(:realname), format_time(self.created_on), content
|
||||
end
|
||||
# count = ShieldWechatMessage.where("container_type='User' and container_id=#{parent_author_id} and shield_type='Course' and shield_id=#{self.board.course_id}").count
|
||||
# if count == 0
|
||||
# content = strip_html self.content.html_safe, 200
|
||||
# ws.comment_template parent_author_id, "course_discussion", self.parent_id, "#{l(:label_topic_comment_template)}", self.author.try(:realname), format_time(self.created_on), content
|
||||
# end
|
||||
end
|
||||
end
|
||||
elsif self.project # 项目相关
|
||||
|
@ -287,22 +287,22 @@ class Message < ActiveRecord::Base
|
|||
self.project.members.includes(:user).each do |m|
|
||||
if m.user_id != self.author_id
|
||||
#self.forge_messages << ForgeMessage.new(:user_id => m.user_id, :project_id => self.board.project_id, :viewed => false)
|
||||
count = ShieldWechatMessage.where("container_type='User' and container_id=#{m.user_id} and shield_type='Project' and shield_id=#{self.project.id}").count
|
||||
if count == 0
|
||||
content = strip_html self.subject, 200
|
||||
ws.topic_publish_template m.user_id, "project_discussion", self.id, "#{l(:label_project_topic_template)}", content, self.author.try(:realname), format_time(self.created_on)
|
||||
end
|
||||
# count = ShieldWechatMessage.where("container_type='User' and container_id=#{m.user_id} and shield_type='Project' and shield_id=#{self.project.id}").count
|
||||
# if count == 0
|
||||
# content = strip_html self.subject, 200
|
||||
# ws.topic_publish_template m.user_id, "project_discussion", self.id, "#{l(:label_project_topic_template)}", content, self.author.try(:realname), format_time(self.created_on)
|
||||
# end
|
||||
end
|
||||
end
|
||||
else # 回帖
|
||||
parent_author_id = Message.find(self.parent_id).author_id
|
||||
if parent_author_id != self.author_id # 只针对主贴回复,回复自己的帖子不发消息
|
||||
self.forge_messages << ForgeMessage.new(:user_id => parent_author_id, :project_id => self.board.project_id, :viewed => false)
|
||||
count = ShieldWechatMessage.where("container_type='User' and container_id=#{parent_author_id} and shield_type='Project' and shield_id=#{self.board.project_id}").count
|
||||
if count == 0
|
||||
content = strip_html self.content.html_safe, 200
|
||||
ws.comment_template parent_author_id, "project_discussion", self.parent_id, "#{l(:label_topic_comment_template)}", self.author.try(:realname), format_time(self.created_on), content
|
||||
end
|
||||
# count = ShieldWechatMessage.where("container_type='User' and container_id=#{parent_author_id} and shield_type='Project' and shield_id=#{self.board.project_id}").count
|
||||
# if count == 0
|
||||
# content = strip_html self.content.html_safe, 200
|
||||
# ws.comment_template parent_author_id, "project_discussion", self.parent_id, "#{l(:label_topic_comment_template)}", self.author.try(:realname), format_time(self.created_on), content
|
||||
# end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -174,7 +174,7 @@ class News < ActiveRecord::Base
|
|||
if count == 0
|
||||
ws = WechatService.new
|
||||
content = strip_html self.author.try(:realname) + " 发布了通知:" + self.title.html_safe, 200
|
||||
ws.message_update_template m.user_id, "course_notice", self.id, "#{l(:label_new_notice_template)}", content, format_time(self.created_on)
|
||||
ws.class_notice m.user_id, "course_notice", self.id, "#{l(:label_new_notice_template)}", self.course.name, self.author.show_name, format_time(self.created_on), content, "点击查看通知详情"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -110,4 +110,144 @@ class WechatService
|
|||
Rails.logger.info "send over. #{req}"
|
||||
end
|
||||
end
|
||||
|
||||
def two_keys_template(openid, template_id, type, id, first, key1, key2, remark="")
|
||||
data = {
|
||||
touser:openid,
|
||||
template_id:template_id,
|
||||
url:"https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{Setting.protocol}://#{Setting.host_name}/assets/wechat/app.html#/#{type}/#{id}?response_type=code&scope=snsapi_base&state=123#wechat_redirect",
|
||||
topcolor:"#FF0000",
|
||||
data:{
|
||||
first: {
|
||||
value:first,
|
||||
color:"#707070"
|
||||
},
|
||||
keyword1:{
|
||||
value:key1,
|
||||
color:"#707070"
|
||||
},
|
||||
keyword2:{
|
||||
value:key2,
|
||||
color:"#707070"
|
||||
},
|
||||
remark:{
|
||||
value:remark,
|
||||
color:"#707070"
|
||||
}
|
||||
}
|
||||
}
|
||||
data
|
||||
end
|
||||
|
||||
def four_keys_template(openid, template_id, type, id, first, key1, key2, key3, key4, remark="")
|
||||
data = {
|
||||
touser:openid,
|
||||
template_id:template_id,
|
||||
url:"https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{Setting.protocol}://#{Setting.host_name}/assets/wechat/app.html#/#{type}/#{id}?response_type=code&scope=snsapi_base&state=123#wechat_redirect",
|
||||
topcolor:"#FF0000",
|
||||
data:{
|
||||
first: {
|
||||
value:first,
|
||||
color:"#707070"
|
||||
},
|
||||
keyword1:{
|
||||
value:key1,
|
||||
color:"#707070"
|
||||
},
|
||||
keyword2:{
|
||||
value:key2,
|
||||
color:"#707070"
|
||||
},
|
||||
keyword3:{
|
||||
value:key3,
|
||||
color:"#707070"
|
||||
},
|
||||
keyword4:{
|
||||
value:key4,
|
||||
color:"#707070"
|
||||
},
|
||||
remark:{
|
||||
value:remark,
|
||||
color:"#707070"
|
||||
}
|
||||
}
|
||||
}
|
||||
data
|
||||
end
|
||||
|
||||
def binding_succ_notice(user_id, first, key1, key2)
|
||||
uw = UserWechat.where(user_id: user_id).first
|
||||
unless uw.nil?
|
||||
data = {
|
||||
touser:uw.openid,
|
||||
template_id:Wechat.config.binding_succ_notice,
|
||||
url:"https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{Setting.protocol}://#{Setting.host_name}/wechat/user_activities&response_type=code&scope=snsapi_base&state=123#wechat_redirect",
|
||||
topcolor:"#FF0000",
|
||||
data:{
|
||||
first: {
|
||||
value:first,
|
||||
color:"#707070"
|
||||
},
|
||||
keyword1:{
|
||||
value:key1,
|
||||
color:"#707070"
|
||||
},
|
||||
keyword2:{
|
||||
value:key2,
|
||||
color:"#707070"
|
||||
},
|
||||
remark:{
|
||||
value:"绑定成功后可使用微信查看Trustie平台最新动态",
|
||||
color:"#707070"
|
||||
}
|
||||
}
|
||||
}
|
||||
begin
|
||||
req = Wechat.api.template_message_send Wechat::Message.to(uw.openid).template(data)
|
||||
rescue Exception => e
|
||||
Rails.logger.error "[homework] ===> #{e}"
|
||||
end
|
||||
Rails.logger.info "send over. #{req}"
|
||||
end
|
||||
end
|
||||
|
||||
def journal_notice(user_id, type, id, first, key1, key2, remark="")
|
||||
uw = UserWechat.where(user_id: user_id).first
|
||||
unless uw.nil?
|
||||
data = two_keys_template uw.openid,Wechat.config.journal_notice, type, id, first, key1, key2, remark
|
||||
begin
|
||||
req = Wechat.api.template_message_send Wechat::Message.to(uw.openid).template(data)
|
||||
rescue Exception => e
|
||||
Rails.logger.error "[homework] ===> #{e}"
|
||||
end
|
||||
Rails.logger.info "send over. #{req}"
|
||||
end
|
||||
end
|
||||
|
||||
def homework_message_notice(user_id, type, id, first, key1, key2, remark="")
|
||||
uw = UserWechat.where(user_id: user_id).first
|
||||
unless uw.nil?
|
||||
data = two_keys_template uw.openid,Wechat.config.homework_message_notice, type, id, first, key1, key2, remark
|
||||
begin
|
||||
req = Wechat.api.template_message_send Wechat::Message.to(uw.openid).template(data)
|
||||
rescue Exception => e
|
||||
Rails.logger.error "[homework] ===> #{e}"
|
||||
end
|
||||
Rails.logger.info "send over. #{req}"
|
||||
end
|
||||
end
|
||||
|
||||
def class_notice(user_id, type, id, first, key1, key2, key3, key4, remark="")
|
||||
uw = UserWechat.where(user_id: user_id).first
|
||||
unless uw.nil?
|
||||
data = four_keys_template uw.openid,Wechat.config.class_notice, type, id, first, key1, key2, key3, key4, remark
|
||||
begin
|
||||
req = Wechat.api.template_message_send Wechat::Message.to(uw.openid).template(data)
|
||||
rescue Exception => e
|
||||
Rails.logger.error "[homework] ===> #{e}"
|
||||
end
|
||||
Rails.logger.info "send over. #{req}"
|
||||
end
|
||||
end
|
||||
|
||||
end
|
|
@ -1,6 +1,11 @@
|
|||
<% unless contributor_course_scor(course.id).count == 0 %>
|
||||
<ul class="rankList">
|
||||
<h4>课程活跃度
|
||||
<h4>
|
||||
<% if (User.current.logged? && course.open_student == 1) || (User.current.member_of_course?(course)) || User.current.admin? %>
|
||||
<%= link_to "课程活跃度", course_member_path(course, :role => 2, :sort_type => 'act_score'), :class => '' %>
|
||||
<% else %>
|
||||
课程活跃度
|
||||
<% end %>
|
||||
<a class="contributor_course" onmouseover ="message_titile_show2($(this),event)" onmouseout ="message_titile_hide2($(this))" style="cursor: pointer; position:relative;">积分规则</a>
|
||||
</h4>
|
||||
<div class="numIntro undis" style="cursor:pointer;">
|
||||
|
|
|
@ -1,7 +1,12 @@
|
|||
<% hero_homework_scores = hero_homework_score(course, "desc") %>
|
||||
<% unless hero_homework_scores.map(&:score).detect{|s| s.to_i != 0}.nil? %>
|
||||
<ul class="rankList">
|
||||
<h4><span>课程英雄榜</span>
|
||||
<h4>
|
||||
<% if (User.current.logged? && course.open_student == 1) || (User.current.member_of_course?(course)) || User.current.admin? %>
|
||||
<%= link_to "课程英雄榜", course_member_path(course, :role => 2), :class => '' %>
|
||||
<% else %>
|
||||
<span>课程英雄榜</span>
|
||||
<% end %>
|
||||
<a class="contributor_course" onmouseover ="message_titile_show2($(this),event)" onmouseout ="message_titile_hide2($(this))" style="cursor:pointer;">积分规则</a></h4>
|
||||
<div style="cursor:pointer;" class="numIntro undis">
|
||||
<div class="hero-degree-rule">积分规则<br/>
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<div class="ping_distop f14">
|
||||
<!-- <a style=" font-weight:bold; color:#15bccf; margin-right:30px; background:none;" target="_blank" href="#">gugu01</a> -->
|
||||
<span>
|
||||
<%= link_to "#{journal.user.show_name}(#{journal.user.login})", user_path(journal.user),:class => 'c_blue fb fl mb10 f14', :target => "_blank"%>
|
||||
<%= link_to journal.user.show_name, user_path(journal.user),:class => 'c_blue fb fl mb10 f14', :target => "_blank"%>
|
||||
</span>
|
||||
<span class="c_grey fr f14">
|
||||
<%= format_time(journal.created_on) %>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
<li class="ml10" style="padding-right: 15px;"><span class="fontGrey6 fb">学号</span></li>
|
||||
<li style="padding-right: 55px; margin-left: 160px;"><span class="fontGrey6 fb">分班</span></li>
|
||||
<li class="st_list_score ml10">
|
||||
<%= link_to '作业积分', member_score_sort_course_path(:sort_type => 'score', :sort_by => (@score_sort_by == "desc" ? "asc" : "desc"), :group_id => (@group ? @group.id : 0),:search_name => (@search_name ? @search_name : nil)) ,:result => members,method: 'get', remote: true, :class => 'ml25'%>
|
||||
<%= link_to '英雄榜', member_score_sort_course_path(:sort_type => 'score', :sort_by => (@score_sort_by == "desc" ? "asc" : "desc"), :group_id => (@group ? @group.id : 0),:search_name => (@search_name ? @search_name : nil)) ,:result => members,method: 'get', remote: true, :class => 'ml35'%>
|
||||
<% if @sort_type == "score" && @score_sort_by == 'desc' %>
|
||||
<a id="pic" href="javascript:" class= "st_down"></a>
|
||||
<% elsif @sort_type == "score" && @score_sort_by == 'asc' %>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<div class="ping_discon" style="width: 610px;">
|
||||
<div class="ping_distop f14">
|
||||
<!-- <a style=" font-weight:bold; color:#15bccf; margin-right:30px; background:none;" target="_blank" href="#">gugu01</a> -->
|
||||
<span><%= link_to journal.user, user_path(journal.user), :class => 'c_blue fb fl mb10 f14', :target => "_blank" %>
|
||||
<span><%= link_to journal.user.show_name, user_path(journal.user), :class => 'c_blue fb fl mb10 f14', :target => "_blank" %>
|
||||
</span><span class="c_grey fr f14"><%= format_time(journal.created_on) %></span>
|
||||
<div class="cl"></div>
|
||||
<!--<p><%#= textilizable journal.notes%></p>-->
|
||||
|
|
|
@ -66,11 +66,7 @@
|
|||
<div class="homepagePostReplyBannerCount">回复
|
||||
<sapn class="mr15"><%= count>0 ? "(#{count})" : "" %></sapn><span style="color: #cecece;">▪</span>
|
||||
<span id="praise_count_<%=user_activity_id %>">
|
||||
<% if activity.author == User.current %>
|
||||
<span class="ml15 likeButton"> <span class="likeText">赞</span><span class="likeNum"><%= get_praise_num(activity) > 0 ? "(#{get_praise_num(activity)})" : "" %></span></span>
|
||||
<% else %>
|
||||
<%=render :partial=> "praise_tread/praise", :locals => {:activity=>activity, :user_activity_id=>user_activity_id,:type=>"activity"}%>
|
||||
<% end %>
|
||||
</span>
|
||||
</div>
|
||||
<div class="homepagePostReplyBannerTime"><%#= format_date(activity.updated_on) %></div>
|
||||
|
@ -108,11 +104,7 @@
|
|||
<% end %>
|
||||
<%= format_time(comment.created_on) %>
|
||||
<span id="reply_praise_count_<%=comment.id %>">
|
||||
<% if comment.author == User.current %>
|
||||
<span class="fr likeButton"> <span class="likeText">赞</span><span class="likeNum"><%= get_praise_num(comment) > 0 ? "(#{get_praise_num(comment)})" : "" %></span></span>
|
||||
<% else %>
|
||||
<%=render :partial=> "praise_tread/praise", :locals => {:activity=>comment, :user_activity_id=>comment.id,:type=>"reply"}%>
|
||||
<% end %>
|
||||
</span>
|
||||
</div>
|
||||
<div class="homepagePostReplyContent break_word list_style upload_img table_maxWidth" id="reply_content_<%= comment.id %>">
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
<!DOCTYPE html>
|
||||
<html ng-app="wechat">
|
||||
<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" />
|
||||
<script type="text/javascript">
|
||||
window.g_openid = '<%= @wechat_user.openid %>';
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div ng-view>
|
||||
</div>
|
||||
|
||||
|
||||
<script src="/javascripts/wechat/angular.js"></script>
|
||||
<script src="/javascripts/wechat/angular-route.js"></script>
|
||||
<script src="/javascripts/wechat/angular-sanitize.min.js"></script>
|
||||
<script src="/javascripts/wechat/angular-cookies.js"></script>
|
||||
<script src="/javascripts/jquery-1.3.2.js"></script>
|
||||
<script src="/javascripts/wechat/app.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -13,10 +13,10 @@
|
|||
</div>
|
||||
<div class="recall_con f14">
|
||||
<% id = 'project_respond_form_'+ reply.id.to_s %>
|
||||
<%= link_to "#{reply.user.show_name}(#{reply.user.login})", user_path(reply.user) %>
|
||||
<%= link_to reply.user.show_name, user_path(reply.user) %>
|
||||
<%= l(:label_reply_to)%>
|
||||
<% if show_name %>
|
||||
<%= link_to "#{parent_jour.user.show_name}(#{parent_jour.user.login})", user_path(parent_jour.user) %>
|
||||
<%= link_to parent_jour.user.show_name, user_path(parent_jour.user) %>
|
||||
<% else %>
|
||||
<%= l(:label_anonymous) %>
|
||||
<% end %>
|
||||
|
|
|
@ -2128,7 +2128,7 @@ zh:
|
|||
label_resource_belongs_project: 所属项目
|
||||
|
||||
#微信模板消息
|
||||
label_new_homework_template: 您的课程有新作业了
|
||||
label_new_homework_template: 您有新作业了
|
||||
label_update_homework_template: 您的作业已被修改
|
||||
label_course_topic_template: 课程问答区有新帖子发布了
|
||||
label_topic_comment_template: 您的帖子有新回复了
|
||||
|
|
|
@ -2,7 +2,7 @@ button:
|
|||
-
|
||||
type: "view"
|
||||
name: "最新动态"
|
||||
url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=https://test.course.trustie.net/assets/wechat/app.html#/activities?response_type=code&scope=snsapi_base&state=123#wechat_redirect"
|
||||
url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=https://test.course.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=123#wechat_redirect"
|
||||
-
|
||||
type: "click"
|
||||
name: "意见反馈"
|
||||
|
|
|
@ -1237,6 +1237,7 @@ RedmineApp::Application.routes.draw do
|
|||
resource :wechat, only:[:show, :create] do
|
||||
collection do
|
||||
get :login
|
||||
get :user_activities
|
||||
post :bind
|
||||
post :get_open_id
|
||||
end
|
||||
|
|
|
@ -11,6 +11,12 @@ default: &default
|
|||
encoding_aes_key: "QyocNOkRmrT5HzBpCG54EVPUQjk86nJapXNVDQm6Yy6"
|
||||
jsapi_ticket: "C:/Users/[user_name]/wechat_jsapi_ticket"
|
||||
|
||||
#template
|
||||
binding_succ_notice: "n4KLwcWNrIMYkKxWL2hUwzunm5RTT54EbWem2MIUapU"
|
||||
journal_notice: "XpHHYkqSGkwuF9vHthRdmPQLvCFRQ4_NbRBP12T7ciE"
|
||||
homework_message_notice: "Kom0TsYYKsNKCS6luweYVRo9z-mH0wRPr24b1clGCPQ"
|
||||
class_notice: "8LVu33l6bP-56SDomVgHn-yJc57YpCwwJ81rAJgRONk"
|
||||
|
||||
production:
|
||||
<<: *default
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<div class="post-container">
|
||||
<div class="post-wrapper">
|
||||
<div class="post-main">
|
||||
<div class="mb5" dataID = "{{act.act_id}}" onclick="javascript:window.location.href='#/homework/'+ ($(this).attr('dataID'))">
|
||||
<div class="mb5" dataID = "{{act.act_id}}" ng-click="goDetail('homework',act.act_id, act.id)" id="act_{{act.id}}">
|
||||
<div class="post-avatar fl"><img ng-src="{{replaceUrl(act.author.img_url)}}" width="40" height="40" class="border-radius" /></div>
|
||||
<div class="post-title hidden mb5">
|
||||
<a herf="javascript:void(0);">
|
||||
|
@ -18,7 +18,7 @@
|
|||
<div class="post-title hidden">
|
||||
<a herf="javascript:void(0);" class="f12 c-grey2">{{act.course_project_name}}</a></div>
|
||||
<div class="cl"></div>
|
||||
<div class="post-title mt5 mb5 hidden"><a ng-href="#/homework/{{act.act_id}}" class="c-grey3 f15 fb">{{act.subject|safeHtml}}</a></div>
|
||||
<div class="post-title mt5 mb5 hidden"><span class="c-grey3 f15 fb">{{act.subject|safeHtml}}</span></div>
|
||||
<div class="post-content c-grey3">
|
||||
<div class="post-all-content mb5" ng-bind-html="act.description|safeHtml"></div>
|
||||
<span class="mr15 f13 c-grey2">迟交扣分:{{act.homework_common_detail.late_penalty}}分</span> <span ng-if="!act.homework_common_detail.anonymous_comment" class="f13 c-grey2">匿评开启时间:{{act.homework_common_detail.evaluation_start}}</span><br />
|
||||
|
@ -29,8 +29,8 @@
|
|||
</div>
|
||||
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span>
|
||||
<span class="c-grey f12 fl mt2">{{act.latest_update}}</span>
|
||||
<a ng-if="!act.reply_count" ng-href="#/homework/{{act.act_id}}" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
||||
<a ng-if="act.reply_count" ng-href="#/homework/{{act.act_id}}" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||
<a ng-if="!act.reply_count" ng-click="goDetail('homework',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
||||
<a ng-if="act.reply_count" ng-click="goDetail('homework',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">赞</span></div>
|
||||
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||
|
@ -44,12 +44,12 @@
|
|||
<div class="post-container">
|
||||
<div class="post-wrapper">
|
||||
<div class="post-main">
|
||||
<div class="mb5" dataID = "{{act.act_id}}" onclick="javascript:window.location.href='#/course_notice/'+ ($(this).attr('dataID'))">
|
||||
<div class="mb5" dataID = "{{act.act_id}}" ng-click="goDetail('course_notice',act.act_id, act.id)" id="act_{{act.id}}">
|
||||
<div class="post-avatar fl"><img ng-src="{{replaceUrl(act.author.img_url)}}" width="40" height="40" class="border-radius" /></div>
|
||||
<div class="post-title hidden mb5"><a herf="javascript:void(0);">{{act.author.realname}}</a></div>
|
||||
<div class="post-title hidden"><a herf="javascript:void(0);" class="f13 c-grey2">{{act.course_project_name}}</a></div>
|
||||
<div class="cl"></div>
|
||||
<div class="post-title hidden mt5 mb5"><a ng-href="#/course_notice/{{act.act_id}}" class="c-grey3 f15 fb">{{act.subject|safeHtml}}</a></div>
|
||||
<div class="post-title hidden mt5 mb5"><span class="c-grey3 f15 fb">{{act.subject|safeHtml}}</span></div>
|
||||
<div class="post-content c-grey3">
|
||||
<div class="post-all-content" ng-bind-html="act.description|safeHtml"></div>
|
||||
</div>
|
||||
|
@ -58,8 +58,8 @@
|
|||
</div>
|
||||
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span>
|
||||
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
|
||||
<a ng-if="!act.reply_count" ng-href="#/course_notice/{{act.act_id}}" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
||||
<a ng-if="act.reply_count" ng-href="#/course_notice/{{act.act_id}}" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||
<a ng-if="!act.reply_count" ng-click="goDetail('course_notice',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
||||
<a ng-if="act.reply_count" ng-click="goDetail('course_notice',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">赞</span></div>
|
||||
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||
|
@ -73,12 +73,12 @@
|
|||
<div class="post-container">
|
||||
<div class="post-wrapper">
|
||||
<div class="post-main">
|
||||
<div class="mb5" dataID = "{{act.act_id}}" onclick="javascript:window.location.href='#/course_discussion/'+ ($(this).attr('dataID'))">
|
||||
<div class="mb5" dataID = "{{act.act_id}}" ng-click="goDetail('course_discussion',act.act_id, act.id)" id="act_{{act.id}}">
|
||||
<div class="post-avatar fl"><img ng-src="{{replaceUrl(act.author.img_url)}}" width="40" height="40" class="border-radius" /></div>
|
||||
<div class="post-title hidden mb5"><a herf="javascript:void(0);" class="mr10">{{act.author.realname}}</a></div>
|
||||
<div class="post-title hidden"><a herf="javascript:void(0);" class="f12 c-grey2">{{act.course_project_name}}</a></div>
|
||||
<div class="cl"></div>
|
||||
<div class="post-title hidden mt5 mb5"><a ng-href="#/course_discussion/{{act.act_id}}" class="c-grey3 f15 fb">{{act.subject|safeHtml}}</a></div>
|
||||
<div class="post-title hidden mt5 mb5"><span class="c-grey3 f15 fb">{{act.subject|safeHtml}}</span></div>
|
||||
<div class="post-content c-grey3">
|
||||
<div class="post-all-content" ng-bind-html="act.description|safeHtml"></div>
|
||||
</div>
|
||||
|
@ -87,8 +87,8 @@
|
|||
</div>
|
||||
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span>
|
||||
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
|
||||
<a ng-if="!act.reply_count" ng-href="#/course_discussion/{{act.act_id}}" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
||||
<a ng-if="act.reply_count" ng-href="#/course_discussion/{{act.act_id}}" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||
<a ng-if="!act.reply_count" ng-click="goDetail('course_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
||||
<a ng-if="act.reply_count" ng-click="goDetail('course_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">赞</span></div>
|
||||
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||
|
@ -118,12 +118,12 @@
|
|||
<div class="post-container">
|
||||
<div class="post-wrapper">
|
||||
<div class="post-main">
|
||||
<div class="mb5" dataID = "{{act.act_id}}" onclick="javascript:window.location.href='#/issues/'+ ($(this).attr('dataID'))">
|
||||
<div class="mb5" dataID = "{{act.act_id}}" ng-click="goDetail('issues',act.act_id, act.id)" id="act_{{act.id}}">
|
||||
<div class="post-avatar fl"><img ng-src="{{replaceUrl(act.author.img_url)}}" width="40" height="40" class="border-radius" /></div>
|
||||
<div class="post-title hidden mb5"><a herf="javascript:void(0);">{{act.author.realname}}</a></div>
|
||||
<div class="post-title hidden"><a herf="javascript:void(0);" class="f12 c-grey2">{{act.course_project_name}}</a></div>
|
||||
<div class="cl"></div>
|
||||
<div class="post-title hidden mt5 mb5"><a ng-href="#/issues/{{act.act_id}}" class="c-grey3 f15 fb">{{act.subject|safeHtml}}</a></div>
|
||||
<div class="post-title hidden mt5 mb5"><span class="c-grey3 f15 fb">{{act.subject|safeHtml}}</span></div>
|
||||
<div class="post-content c-grey3">
|
||||
<div class="post-all-content mb5" ng-bind-html="act.description|safeHtml"></div>
|
||||
<span class="mr15 f13 c-grey2">状态:{{act.issue_detail.issue_status}}</span> <span class="mr15 f13 c-grey2">优先级:{{act.issue_detail.issue_priority}}</span> <br />
|
||||
|
@ -134,8 +134,8 @@
|
|||
</div>
|
||||
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span>
|
||||
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
|
||||
<a ng-if="!act.reply_count" ng-href="#/issues/{{act.act_id}}" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
||||
<a ng-if="act.reply_count" ng-href="#/issues/{{act.act_id}}" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||
<a ng-if="!act.reply_count" ng-click="goDetail('issues',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
||||
<a ng-if="act.reply_count" ng-click="goDetail('issues',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">赞</span></div>
|
||||
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||
|
@ -150,12 +150,12 @@
|
|||
<div class="post-container">
|
||||
<div class="post-wrapper">
|
||||
<div class="post-main">
|
||||
<div class="mb5" dataID = "{{act.act_id}}" onclick="javascript:window.location.href='#/project_discussion/'+ ($(this).attr('dataID'))">
|
||||
<div class="mb5" dataID = "{{act.act_id}}" ng-click="goDetail('project_discussion',act.act_id, act.id)" id="act_{{act.id}}">
|
||||
<div class="post-avatar fl"><img ng-src="{{replaceUrl(act.author.img_url)}}" width="40" height="40" class="border-radius" /></div>
|
||||
<div class="post-title hidden mb5"><a herf="javascript:void(0);">{{act.author.realname}}</a></div>
|
||||
<div class="post-title hidden"><a herf="javascript:void(0);" class="f12 c-grey2">{{act.course_project_name}}</a></div>
|
||||
<div class="cl"></div>
|
||||
<div class="post-title hidden mt5 mb5"><a ng-href="#/project_discussion/{{act.act_id}}" class="c-grey3 f15 fb">{{act.subject|safeHtml}}</a></div>
|
||||
<div class="post-title hidden mt5 mb5"><span class="c-grey3 f15 fb">{{act.subject|safeHtml}}</span></div>
|
||||
<div class="post-content c-grey3">
|
||||
<div class="post-all-content" ng-bind-html="act.description|safeHtml"></div>
|
||||
</div>
|
||||
|
@ -164,8 +164,8 @@
|
|||
</div>
|
||||
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span>
|
||||
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
|
||||
<a ng-if="!act.reply_count" ng-href="#/project_discussion/{{act.act_id}}" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
||||
<a ng-if="act.reply_count" ng-href="#/project_discussion/{{act.act_id}}" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||
<a ng-if="!act.reply_count" ng-click="goDetail('project_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
||||
<a ng-if="act.reply_count" ng-click="goDetail('project_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">赞</span></div>
|
||||
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||
|
@ -194,7 +194,7 @@
|
|||
<div class="post-container">
|
||||
<div class="post-wrapper">
|
||||
<div class="post-main">
|
||||
<div class="mb5" dataID = "{{act.act_id}}" onclick="javascript:window.location.href='#/journal_for_message/'+ ($(this).attr('dataID'))">
|
||||
<div class="mb5" dataID = "{{act.act_id}}" ng-click="goDetail('journal_for_message',act.act_id, act.id)" id="act_{{act.id}}">
|
||||
<div class="post-avatar fl"><img ng-src="{{replaceUrl(act.author.img_url)}}" width="40" height="40" class="border-radius" /></div>
|
||||
<div class="post-title mb5 hidden"><a herf="javascript:void(0);" class="mr10">{{act.author.realname}}</a></div>
|
||||
<div class="post-title hidden"><span class="f12 c-grey">留言</span></div>
|
||||
|
@ -207,8 +207,8 @@
|
|||
<div class="cl"></div>
|
||||
</div>
|
||||
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
|
||||
<a ng-if="!act.reply_count" ng-href="#/journal_for_message/{{act.act_id}}" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
||||
<a ng-if="act.reply_count" ng-href="#/journal_for_message/{{act.act_id}}" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||
<a ng-if="!act.reply_count" ng-click="goDetail('journal_for_message',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
||||
<a ng-if="act.reply_count" ng-click="goDetail('journal_for_message',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">赞</span></div>
|
||||
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||
|
@ -223,12 +223,12 @@
|
|||
<div class="post-container">
|
||||
<div class="post-wrapper">
|
||||
<div class="post-main">
|
||||
<div class="mb5" dataID = "{{act.act_id}}" onclick="javascript:window.location.href='#/blog_comment/'+ ($(this).attr('dataID'))">
|
||||
<div class="mb5" dataID = "{{act.act_id}}" ng-click="goDetail('blog_comment',act.act_id, act.id)" id="act_{{act.id}}">
|
||||
<div class="post-avatar fl"><img ng-src="{{replaceUrl(act.author.img_url)}}" width="40" height="40" class="border-radius" /></div>
|
||||
<div class="post-title hidden mb5"><a herf="javascript:void(0);">{{act.author.realname}}</a></div>
|
||||
<div class="post-title hidden"><span class="f12 c-grey">博客</span></div>
|
||||
<div class="cl"></div>
|
||||
<div class="post-title hidden mt5 mb5"><a ng-href="#/blog_comment/{{act.act_id}}" class="c-grey3 f15 fb">{{act.subject|safeHtml}}</a></div>
|
||||
<div class="post-title hidden mt5 mb5"><span class="c-grey3 f15 fb">{{act.subject|safeHtml}}</span></div>
|
||||
<div class="post-content c-grey3">
|
||||
<div class="post-all-content" ng-bind-html="act.description|safeHtml"></div>
|
||||
</div>
|
||||
|
@ -236,8 +236,8 @@
|
|||
<div class="cl"></div>
|
||||
</div>
|
||||
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
|
||||
<a ng-if="!act.reply_count" ng-href="#/blog_comment/{{act.act_id}}" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
||||
<a ng-if="act.reply_count" ng-href="#/blog_comment/{{act.act_id}}" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||
<a ng-if="!act.reply_count" ng-click="goDetail('blog_comment',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
||||
<a ng-if="act.reply_count" ng-click="goDetail('blog_comment',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">赞</span></div>
|
||||
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||
|
@ -249,8 +249,8 @@
|
|||
|
||||
</div>
|
||||
|
||||
<div ng-if="(count + page * 10) < all_count">
|
||||
<div id="more_activities" class="more-events mt10" ng-click="loadActData(current_page+1);">更多</div>
|
||||
<div ng-if="has_more">
|
||||
<div id="more_activities" class="more-events mt10" ng-click="loadActData(page+1);">更多</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
<!-- 模板1开始,可以使用script(type设置为text/html)来存放模板片段,并且用id标示 -->
|
||||
<div loading-spinner></div>
|
||||
<div ng-if="blog.act_type == 'BlogComment'">
|
||||
<div class="post-container">
|
||||
<div class="post-wrapper">
|
||||
|
@ -7,9 +8,7 @@
|
|||
<div class="post-title mb5"><span class="c-grey3 f15 fb">{{blog.title}}</span></div>
|
||||
<div class="post-title"><a herf="javascript:void(0);" class="mr10">{{blog.user.realname}}</a>发表博客</div>
|
||||
<div class="cl"></div>
|
||||
<div class="post-content" style="height:auto;">
|
||||
<div class="post-all-content c-grey3 mt10" ng-bind-html="blog.content|safeHtml"></div>
|
||||
</div>
|
||||
<div class="f13 c-grey3 mt10" ng-bind-html="blog.content|safeHtml"></div>
|
||||
<div class="cl"></div>
|
||||
<span class="c-grey f13 mt10 fl">{{blog.created_at}}</span>
|
||||
<div class="cl"></div>
|
||||
|
@ -40,7 +39,8 @@
|
|||
<textarea class="copy-input"></textarea>
|
||||
<textarea input-auto type="text" class="post-reply-input" id="postInput" ng-model="formData.comment" /></textarea>
|
||||
</div>
|
||||
<button ng-click="addBlogReply(formData)" ng-disabled="formData.disabled" class="post-reply-submit fr mt10">回复</button>
|
||||
<button ng-click="addBlogReply(formData)" ng-disabled="formData.disabled" ng-hide="formData.disabled" class="post-reply-submit fr mt10">回复</button>
|
||||
<button ng-disabled="formData.disabled" ng-hide="!formData.disabled" class="post-reply-submit bg-grey fr mt10">回复</button>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
<!-- 模板1开始,可以使用script(type设置为text/html)来存放模板片段,并且用id标示 -->
|
||||
<div loading-spinner></div>
|
||||
<div ng-if="discussion.act_type == 'Message'">
|
||||
<div class="post-container">
|
||||
<div loading-spinner></div>
|
||||
|
@ -14,9 +15,7 @@
|
|||
<td class="text-nowrap v-top">来 源:</td>
|
||||
<td>{{discussion.course_project_name}} | 课程问答区</td>
|
||||
</tr></table>
|
||||
<div class="post-content c-grey3 mt10" style="height:auto;">
|
||||
<div class="post-all-content" ng-bind-html="discussion.content|safeHtml"></div>
|
||||
</div>
|
||||
<div class="f13 c-grey3 mt10" ng-bind-html="discussion.content|safeHtml"></div>
|
||||
<div class="cl"></div>
|
||||
<span class="c-grey f13 mt10 fl">{{discussion.created_on}}</span>
|
||||
<div class="cl"></div>
|
||||
|
@ -47,7 +46,8 @@
|
|||
<textarea class="copy-input"></textarea>
|
||||
<textarea input-auto type="text" class="post-reply-input" id="postInput" ng-model="formData.comment" /></textarea>
|
||||
</div>
|
||||
<button ng-click="addDiscussionReply(formData)" ng-disabled="formData.disabled" class="post-reply-submit fr mt10">回复</button>
|
||||
<button ng-click="addDiscussionReply(formData)" ng-disabled="formData.disabled" ng-hide="formData.disabled" class="post-reply-submit fr mt10">回复</button>
|
||||
<button ng-disabled="formData.disabled" ng-hide="!formData.disabled" class="post-reply-submit bg-grey fr mt10">回复</button>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
<!-- 模板1开始,可以使用script(type设置为text/html)来存放模板片段,并且用id标示 -->
|
||||
<div loading-spinner></div>
|
||||
<div ng-if="news.act_type == 'News'">
|
||||
<div class="post-container">
|
||||
<div class="post-wrapper">
|
||||
|
@ -13,9 +14,7 @@
|
|||
<td class="text-nowrap v-top">来 源:</td>
|
||||
<td>{{news.course_name}} | 课程通知</td>
|
||||
</tr></table>
|
||||
<div class="post-content c-grey3 mt10" style="height:auto;">
|
||||
<div class="post-all-content" ng-bind-html="news.description|safeHtml"></div>
|
||||
</div>
|
||||
<div class="f13 c-grey3 mt10" ng-bind-html="news.description|safeHtml"></div>
|
||||
<div class="cl"></div>
|
||||
<span class="c-grey f13 mt10 fl">{{news.created_on}}</span>
|
||||
<div class="cl"></div>
|
||||
|
@ -46,7 +45,8 @@
|
|||
<textarea class="copy-input"></textarea>
|
||||
<textarea input-auto type="text" class="post-reply-input" id="postInput" ng-model="formData.comment" /></textarea>
|
||||
</div>
|
||||
<button ng-click="addNoticeReply(formData)" ng-disabled="formData.disabled" class="post-reply-submit fr mt10">回复</button>
|
||||
<button ng-click="addNoticeReply(formData)" ng-disabled="formData.disabled" ng-hide="formData.disabled" class="post-reply-submit fr mt10">回复</button>
|
||||
<button ng-disabled="formData.disabled" ng-hide="!formData.disabled" class="post-reply-submit bg-grey fr mt10">回复</button>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
<!-- 模板1开始,可以使用script(type设置为text/html)来存放模板片段,并且用id标示 -->
|
||||
<div loading-spinner></div>
|
||||
<div ng-if="homework.act_type == 'HomeworkCommon'">
|
||||
<div class="post-container">
|
||||
<div class="post-wrapper">
|
||||
|
@ -15,13 +16,11 @@
|
|||
<td class="text-nowrap v-top">来 源:</td>
|
||||
<td>{{homework.course_name}} | 课程作业</td>
|
||||
</tr></table>
|
||||
<div class="post-content c-grey3 mt10" style="height:auto;">
|
||||
<div class="post-all-content mb10" ng-bind-html="homework.description|safeHtml"></div>
|
||||
<span class="c-grey">迟交扣分:{{homework.late_penalty}}分</span><br/>
|
||||
<span ng-if="!homework.anonymous_comment" class="c-grey">缺评扣分:{{homework.absence_penalty}}分/作品<br /></span>
|
||||
<span ng-if="!homework.anonymous_comment" class="c-grey">匿评开启时间:{{homework.evaluation_start}}<br /></span>
|
||||
<span ng-if="!homework.anonymous_comment" class="c-grey">匿评关闭时间:{{homework.evaluation_end}}</span>
|
||||
</div>
|
||||
<div class="f13 c-grey3 mt10 mb10" ng-bind-html="homework.description|safeHtml"></div>
|
||||
<span class="c-grey f13">迟交扣分:{{homework.late_penalty}}分</span><br/>
|
||||
<span ng-if="!homework.anonymous_comment" class="c-grey f13">缺评扣分:{{homework.absence_penalty}}分/作品<br /></span>
|
||||
<span ng-if="!homework.anonymous_comment" class="c-grey f13">匿评开启时间:{{homework.evaluation_start}}<br /></span>
|
||||
<span ng-if="!homework.anonymous_comment" class="c-grey f13">匿评关闭时间:{{homework.evaluation_end}}</span>
|
||||
<div class="cl"></div>
|
||||
<span class="c-grey f13 mt10 fl">{{homework.publish_time}}</span>
|
||||
<div class="cl"></div>
|
||||
|
@ -52,7 +51,8 @@
|
|||
<textarea class="copy-input"></textarea>
|
||||
<textarea input-auto type="text" class="post-reply-input" id="postInput" ng-model="formData.comment"></textarea>
|
||||
</div>
|
||||
<button ng-click="addHomeworkReply(formData)" ng-disabled="formData.disabled" value="回复" class="post-reply-submit fr mt10">回复</button>
|
||||
<button ng-click="addHomeworkReply(formData)" ng-disabled="formData.disabled" ng-hide="formData.disabled" class="post-reply-submit fr mt10">回复</button>
|
||||
<button ng-disabled="formData.disabled" ng-hide="!formData.disabled" class="post-reply-submit bg-grey fr mt10">回复</button>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
<!-- 模板1开始,可以使用script(type设置为text/html)来存放模板片段,并且用id标示 -->
|
||||
<div loading-spinner></div>
|
||||
<div ng-if="issue.act_type == 'Issue'">
|
||||
<div class="post-container">
|
||||
<div class="post-wrapper">
|
||||
|
@ -13,13 +14,11 @@
|
|||
<td class="text-nowrap v-top">来 源:</td>
|
||||
<td>{{issue.project_name}} | 项目问题</td>
|
||||
</tr></table>
|
||||
<div class="post-content" style="height:auto;">
|
||||
<div class="post-all-content c-grey3 mt10 mb10" ng-bind-html="issue.description|safeHtml"></div>
|
||||
<span class="c-grey">状 态:{{issue.issue_status}}<br>
|
||||
<div class="f13 c-grey3 mt10 mb10" ng-bind-html="issue.description|safeHtml"></div>
|
||||
<span class="c-grey f13">状 态:{{issue.issue_status}}<br>
|
||||
优先级:{{issue.issue_priority}}<br />
|
||||
指派给:{{issue.issue_assigned_to}}<br />
|
||||
完成度:{{issue.done_ratio}}%</span>
|
||||
</div>
|
||||
<div class="cl"></div>
|
||||
<span class="c-grey f13 mt10 fl">{{issue.created_on}}</span>
|
||||
<div class="cl"></div>
|
||||
|
@ -50,7 +49,8 @@
|
|||
<textarea class="copy-input"></textarea>
|
||||
<textarea input-auto type="text" class="post-reply-input" id="postInput" ng-model="formData.comment" /></textarea>
|
||||
</div>
|
||||
<button ng-click="addIssueReply(formData)" ng-disabled="formData.disabled" class="post-reply-submit fr mt10">回复</button>
|
||||
<button ng-click="addIssueReply(formData)" ng-disabled="formData.disabled" ng-hide="formData.disabled" class="post-reply-submit fr mt10">回复</button>
|
||||
<button ng-disabled="formData.disabled" ng-hide="!formData.disabled" class="post-reply-submit bg-grey fr mt10">回复</button>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
<!-- 模板1开始,可以使用script(type设置为text/html)来存放模板片段,并且用id标示 -->
|
||||
<div loading-spinner></div>
|
||||
<div ng-if="message.act_type == 'JournalsForMessage'">
|
||||
<div class="post-container">
|
||||
<div class="post-wrapper">
|
||||
|
@ -6,9 +7,7 @@
|
|||
<div class="post-title mb5"><a herf="javascript:void(0);" class="mr10">{{message.user.realname}}</a><span style="vertical-align:top;">给您留言了</span><br /></div>
|
||||
<div class="post-title">{{message.created_on}}</div>
|
||||
<div class="cl"></div>
|
||||
<div class="post-content c-grey2 mt10" style="height:auto;">
|
||||
<div class="post-all-content" ng-bind-html="message.notes|safeHtml"></div>
|
||||
</div>
|
||||
<div class="f13 c-grey3 mt10" ng-bind-html="message.notes|safeHtml"></div>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
<div class="post-interactive border-bottom">
|
||||
|
@ -38,7 +37,8 @@
|
|||
<textarea class="copy-input"></textarea>
|
||||
<textarea input-auto type="text" class="post-reply-input" id="postInput" ng-model="formData.comment" /></textarea>
|
||||
</div>
|
||||
<button ng-click="addJournalReply(formData)" ng-disabled="formData.disabled" class="post-reply-submit fr mt10">回复</button>
|
||||
<button ng-click="addJournalReply(formData)" ng-hide="formData.disabled" ng-disabled="formData.disabled" class="post-reply-submit fr mt10">回复</button>
|
||||
<button ng-disabled="formData.disabled" ng-hide="!formData.disabled" class="post-reply-submit bg-grey fr mt10">回复</button>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
<!-- 模板1开始,可以使用script(type设置为text/html)来存放模板片段,并且用id标示 -->
|
||||
<div loading-spinner></div>
|
||||
<div ng-if="discussion.act_type == 'Message'">
|
||||
<div class="post-container">
|
||||
<div class="post-wrapper">
|
||||
|
@ -13,9 +14,7 @@
|
|||
<td class="text-nowrap v-top">来 源:</td>
|
||||
<td>{{discussion.course_project_name}} | 项目讨论区</td>
|
||||
</tr></table>
|
||||
<div class="post-content c-grey3 mt10" style="height:auto;">
|
||||
<div class="post-all-content" ng-bind-html="discussion.content|safeHtml"></div>
|
||||
</div>
|
||||
<div class="f13 c-grey3 mt10" ng-bind-html="discussion.content|safeHtml"></div>
|
||||
<div class="cl"></div>
|
||||
<span class="c-grey f13 mt10 fl">{{discussion.created_on}}</span>
|
||||
<div class="cl"></div>
|
||||
|
@ -46,7 +45,8 @@
|
|||
<textarea class="copy-input"></textarea>
|
||||
<textarea input-auto type="text" class="post-reply-input" id="postInput" ng-model="formData.comment" /></textarea>
|
||||
</div>
|
||||
<button ng-click="addDiscussionReply(formData)" ng-disabled="formData.disabled" class="post-reply-submit fr mt10">回复</button>
|
||||
<button ng-click="addDiscussionReply(formData)" ng-disabled="formData.disabled" ng-hide="formData.disabled" class="post-reply-submit fr mt10">回复</button>
|
||||
<button ng-disabled="formData.disabled" ng-hide="!formData.disabled" class="post-reply-submit bg-grey fr mt10">回复</button>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,15 +1,20 @@
|
|||
var app = angular.module('wechat', ['ngRoute','ngCookies']);
|
||||
var apiUrl = '/api/v1/';
|
||||
var debug = true; //调试标志,如果在本地请置为true
|
||||
var debug = false; //调试标志,如果在本地请置为true
|
||||
|
||||
if(debug===true){
|
||||
apiUrl = 'http://localhost:3000/api/v1/';
|
||||
//apiUrl = 'https://www.trustie.net/api/v1/';
|
||||
//apiUrl = 'http://localhost:3000/api/v1/';
|
||||
apiUrl = 'https://www.trustie.net/api/v1/';
|
||||
}
|
||||
|
||||
|
||||
app.factory('auth', function($http,$routeParams, $cookies, $q){
|
||||
var _openid = '';
|
||||
|
||||
if(typeof g_openid !== 'undefined'){
|
||||
_openid = g_openid;
|
||||
}
|
||||
|
||||
if(debug===true){
|
||||
_openid = "1";
|
||||
}
|
||||
|
@ -62,16 +67,44 @@ app.factory('rms', function(){
|
|||
return {save: save, get: get};
|
||||
});
|
||||
|
||||
app.controller('ActivityController',function($scope, $http, auth, rms, common){
|
||||
app.controller('ActivityController',function($anchorScroll, $location,$scope, $http, auth, rms, common){
|
||||
$scope.replaceUrl = function(url){
|
||||
return url;
|
||||
};
|
||||
|
||||
console.log("ActivityController load");
|
||||
$scope.activities = rms.get("activities") || [];
|
||||
|
||||
$scope.page = 0;
|
||||
$scope.activities = rms.get("activities") || [];
|
||||
|
||||
var savePageConfig = function(){
|
||||
rms.save('current_page', $scope.current_page);
|
||||
rms.save('has_more', $scope.has_more);
|
||||
rms.save('activities', $scope.activities);
|
||||
}
|
||||
|
||||
var loadPageConfig = function(){
|
||||
var current_page = rms.get('current_page');
|
||||
var has_more = rms.get('has_more');
|
||||
var activities = rms.get('activities');
|
||||
|
||||
if(typeof current_page !== 'undefined'){
|
||||
$scope.page = current_page;
|
||||
}
|
||||
if(typeof has_more !== 'undefined'){
|
||||
$scope.has_more = has_more;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var loadActData = function(page){
|
||||
if (page <= 0 && $scope.activities.length >0){ //应该是返回过来的
|
||||
loadPageConfig();
|
||||
var yOffset = rms.get("yoffset");
|
||||
$location.hash(yOffset);
|
||||
return;
|
||||
}
|
||||
|
||||
$scope.page = page;
|
||||
$http({
|
||||
method: 'POST',
|
||||
|
@ -89,10 +122,12 @@ app.controller('ActivityController',function($scope, $http, auth, rms, common){
|
|||
} else {
|
||||
$scope.activities = response.data.data;
|
||||
}
|
||||
$scope.current_page = response.data.page;
|
||||
$scope.all_count = response.data.all_count;
|
||||
$scope.count = response.data.count;
|
||||
$scope.has_more = (response.data.count + response.data.page * 10) < response.data.all_count;
|
||||
|
||||
console.log(response.data);
|
||||
|
||||
rms.save('current_page', $scope.page);
|
||||
rms.save('has_more', $scope.has_more);
|
||||
rms.save('activities', $scope.activities);
|
||||
}, function errorCallback(response) {
|
||||
});
|
||||
|
@ -108,6 +143,12 @@ app.controller('ActivityController',function($scope, $http, auth, rms, common){
|
|||
|
||||
$scope.loadActData = loadActData;
|
||||
|
||||
//跳到详情页
|
||||
$scope.goDetail = function(type, act_id,id){
|
||||
rms.save("yoffset",'act_'+id);
|
||||
$location.path('/'+type+'/'+act_id);
|
||||
}
|
||||
|
||||
$scope.addPraise = function(act){
|
||||
common.addCommonPraise(act);
|
||||
};
|
||||
|
@ -116,6 +157,8 @@ app.controller('ActivityController',function($scope, $http, auth, rms, common){
|
|||
common.decreaseCommonPraise(act);
|
||||
};
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
app.factory('common', function($http, auth, $routeParams){
|
||||
|
@ -483,37 +526,39 @@ app.directive('loadingSpinner', function ($http) {
|
|||
});
|
||||
|
||||
app.config(['$routeProvider',"$httpProvider",function ($routeProvider, $httpProvider) {
|
||||
var rootPath = '/assets/wechat/'
|
||||
|
||||
$routeProvider
|
||||
.when('/activities', {
|
||||
templateUrl: 'activities.html',
|
||||
templateUrl: rootPath + 'activities.html',
|
||||
controller: 'ActivityController'
|
||||
})
|
||||
.when('/issues/:id', {
|
||||
templateUrl: 'issue_detail.html',
|
||||
templateUrl: rootPath + 'issue_detail.html',
|
||||
controller: 'IssueController'
|
||||
})
|
||||
.when('/project_discussion/:id', {
|
||||
templateUrl: 'project_discussion.html',
|
||||
templateUrl: rootPath + 'project_discussion.html',
|
||||
controller: 'DiscussionController'
|
||||
})
|
||||
.when('/homework/:id', {
|
||||
templateUrl: 'homework_detail.html',
|
||||
templateUrl: rootPath + 'homework_detail.html',
|
||||
controller: 'HomeworkController'
|
||||
})
|
||||
.when('/course_notice/:id', {
|
||||
templateUrl: 'course_notice.html',
|
||||
templateUrl: rootPath + 'course_notice.html',
|
||||
controller: 'CourseNoticeController'
|
||||
})
|
||||
.when('/course_discussion/:id', {
|
||||
templateUrl: 'course_discussion.html',
|
||||
templateUrl: rootPath + 'course_discussion.html',
|
||||
controller: 'DiscussionController'
|
||||
})
|
||||
.when('/journal_for_message/:id', {
|
||||
templateUrl: 'jour_message_detail.html',
|
||||
templateUrl: rootPath + 'jour_message_detail.html',
|
||||
controller: 'JournalsController'
|
||||
})
|
||||
.when('/blog_comment/:id', {
|
||||
templateUrl: 'blog_detail.html',
|
||||
templateUrl: rootPath + 'blog_detail.html',
|
||||
controller: 'BlogController'
|
||||
})
|
||||
.otherwise({
|
||||
|
|
|
@ -4,6 +4,16 @@
|
|||
/*基本样式*/
|
||||
body,table,input,textarea,select,button { font-family: "微软雅黑","宋体";}
|
||||
h1,h2,h3,h4,h5,p,pre {padding:0px; margin:0px;}
|
||||
blockquote {
|
||||
border:1px solid #d4d4d4;
|
||||
padding: 0.6em;
|
||||
margin-left: 1.4em;
|
||||
margin-right: 0.4em;
|
||||
border-radius: 4px;
|
||||
font-family: "Microsoft YaHei";
|
||||
background-size: 100% 100%;
|
||||
margin-top:5px;
|
||||
}
|
||||
.f12 {font-size:12px;}
|
||||
.f13 {font-size:13px;}
|
||||
.f15 {font-size:15px;}
|
||||
|
@ -84,3 +94,5 @@ a.underline {text-decoration:underline;}
|
|||
|
||||
/*帖子锁定样式*/
|
||||
.locked_btn_cir {background: url("/images/locked.png") 0 0 no-repeat; cursor: default;}
|
||||
|
||||
.bg-grey {background-color:#c1c1c1;}
|
||||
|
|
Loading…
Reference in New Issue