diff --git a/app/api/mobile/apis/new_comment.rb b/app/api/mobile/apis/new_comment.rb
index 6d46b2f59..e72daae6d 100644
--- a/app/api/mobile/apis/new_comment.rb
+++ b/app/api/mobile/apis/new_comment.rb
@@ -89,11 +89,15 @@ module Mobile
           tip = 0 #0班级1项目
           type = params[:type]
           result = 1
+
+          #0回复 1回复的回复
+          reply_type = params[:reply_type]
+
+          update_id = 0
+
           if params[:content]!="" && current_user
             case type
               when "HomeworkCommon"
-                homework_common = HomeworkCommon.find(params[:id])
-
                 #如果是私有的 并且不是成员则不能回复
                 # is_public = homework_common.course.is_public
                 # if is_public == 0 && !current_user.member_of_course?(homework_common.course)
@@ -106,15 +110,29 @@ module Mobile
                 #     result = 2
                 #   end
                 # end
-                feedback = HomeworkCommon.add_homework_jour(current_user, params[:content], params[:id])
-                if (feedback.errors.empty?)
-                  homework_common.update_column(:updated_at, Time.now)
-                  result = 2
+                if reply_type == nil || reply_type == 0
+                  homework_common = HomeworkCommon.find(params[:id])
+                  feedback = HomeworkCommon.add_homework_jour(current_user, params[:content], params[:id])
+                  if (feedback.errors.empty?)
+                    homework_common.update_column(:updated_at, Time.now)
+                    result = 2
+                    update_id = homework_common.id
+                  end
+                else
+                  #二级回复
+                  reply = JournalsForMessage.find params[:id].to_i
+                  homework_common = HomeworkCommon.find reply.jour_id
+
+                  options = {:notes => params[:content], :reply_id => reply.user_id,:user_id => current_user.id,:m_parent_id => params[:id].to_i,:m_reply_id => params[:id].to_i}
+                  feedback = HomeworkCommon.add_homework_jour(current_user, params[:content], reply.jour_id, options)
+                  if (feedback.errors.empty?)
+                    homework_common.update_column(:updated_at, Time.now)
+                    result = 2
+                    update_id = homework_common.id
+                  end
                 end
 
               when "News"
-                news = News.find(params[:id])
-
                 # if news.project
                 #   if news.project.is_public == false && !current_user.member_of?(news.project)
                 #     status = -1
@@ -126,19 +144,28 @@ module Mobile
                 #     tip = 0
                 #   end
                 # end
-
                 if status == 0
-                  comment = Comment.new
-                  comment.comments = params[:content]
-                  comment.author = current_user
-                  if news.comments << comment
-                    result = 2
+                  if reply_type == nil || reply_type == 0
+                    news = News.find(params[:id])
+                    comment = Comment.new
+                    comment.comments = params[:content]
+                    comment.author = current_user
+                    if news.comments << comment
+                      result = 2
+                      update_id = news.id
+                    end
+                  else
+                    #二级回复
+                    comment = Comment.find(params[:id])
+                    news = News.find comment.commented_id
+                    new_comment = news.comments.build(:author_id => current_user.id, :reply_id => params[:id], :comments => params[:content], :parent_id => comment.id)
+                    if new_comment.save
+                      result = 2
+                      update_id = news.id
+                    end
                   end
                 end
               when "Message"
-                message = Message.find(params[:id])
-                board = Board.find(message.board_id)
-
                 # if message.project
                 #   if message.project.is_public == false && !current_user.member_of?(message.project)
                 #     status = -1
@@ -152,20 +179,26 @@ module Mobile
                 # end
 
                 if status == 0
-                  topic = message.root
-                  reply = Message.new
-                  reply.author = current_user
-                  reply.board = board
-                  reply.content = params[:content]
-                  reply.parent_id = params[:id]
-                  reply.subject = "RE: #{topic.subject}"
-                  if topic.children << reply
-                    result = 2
-                  end
+                  # if reply_type == nil || reply_type == 0
+                    message = Message.find(params[:id])
+                    board = Board.find(message.board_id)
+                    topic = message.root
+                    reply = Message.new
+                    reply.author = current_user
+                    reply.board = board
+                    reply.content = params[:content]
+                    reply.parent_id = params[:id]
+                    reply.subject = "RE: #{topic.subject}"
+                    if message.children << reply
+                      result = 2
+                      update_id = topic.id
+                    end
+                  # else
+                    #二级回复
+
+                  # end
                 end
               when "JournalsForMessage"
-                jour = JournalsForMessage.find params[:id]
-
                 # if jour.jour_type == "Project"
                 #   if jour.project.is_public == false && !current_user.member_of?(jour.project)
                 #     status = -1
@@ -179,64 +212,108 @@ module Mobile
                 # end
 
                 if status == 0
-                  parent_id = params[:id]
-                  author_id = current_user.id
-                  reply_user_id = jour.user_id
-                  reply_id = params[:id]
-                  content = params[:content]
-                  options = {:user_id => author_id,
-                             :status => true,
-                             :m_parent_id => parent_id,
-                             :m_reply_id => reply_id,
-                             :reply_id => reply_user_id,
-                             :notes => content,
-                             :is_readed => false}
-                  jfm = jour.user.add_jour(nil, nil, nil, options)
-                  if jfm.errors.empty?
-                    (JournalsForMessage.find parent_id).update_attribute(:updated_on,Time.now)
-                    result = 2
-                  end
+                  # if reply_type == nil || reply_type == 0
+                    jour = JournalsForMessage.find(params[:id]).root
+                    parent_id = params[:id]
+                    author_id = current_user.id
+                    reply_user_id = jour.user_id
+                    reply_id = params[:id]
+                    content = params[:content]
+                    options = {:user_id => author_id,
+                               :status => true,
+                               :m_parent_id => parent_id,
+                               :m_reply_id => reply_id,
+                               :reply_id => reply_user_id,
+                               :notes => content,
+                               :is_readed => false}
+                    jfm = jour.user.add_jour(nil, nil, nil, options)
+                    if jfm.errors.empty?
+                      (JournalsForMessage.find parent_id).update_attribute(:updated_on,Time.now)
+                      result = 2
+                      update_id = jour.id
+                    end
+                  # else
+                    #二级回复
+
+                  # end
                 end
               when 'Issue'
-                issue = Issue.find params[:id]
-
                 # if issue.project.is_public == false && !current_user.member_of?(issue.project)
                 #   status = -1
                 #   tip = 1
                 # end
 
                 if status == 0
-                  is_jour = Journal.new
-                  is_jour.user_id = current_user.id
-                  is_jour.notes = params[:content]
-                  is_jour.journalized = issue
-                  if is_jour.save
-                    result = 2
+                  if reply_type == nil || reply_type == 0
+                    issue = Issue.find params[:id]
+                    is_jour = Journal.new
+                    is_jour.user_id = current_user.id
+                    is_jour.notes = params[:content]
+                    is_jour.journalized = issue
+                    if is_jour.save
+                      result = 2
+                      update_id = issue.id
+                    end
+                  else
+                    #二级回复
+                    jour = Journal.find(params[:id])
+                    issue = jour.journalized
+                    is_jour = Journal.new
+                    is_jour.user_id = current_user.id
+                    is_jour.notes = params[:content]
+                    is_jour.reply_id = params[:id]
+                    is_jour.parent_id = params[:id]
+                    is_jour.journalized = issue
+                    if is_jour.save
+                      result = 2
+                      update_id = issue.id
+                    end
                   end
                 end
               when 'BlogComment'
-                blog = BlogComment.find(params[:id]).root
-                blogComment = BlogComment.new
-                blogComment.author = current_user
-                blogComment.blog = blog.blog
-                blogComment.content = params[:content]
-                blogComment.title = "RE: #{blog.title}"
-                if blog.children << blogComment
-                  result = 2
+                if reply_type == nil || reply_type == 0
+                  blog = BlogComment.find(params[:id]).root
+                  blogComment = BlogComment.new
+                  blogComment.author = current_user
+                  blogComment.blog = blog.blog
+                  blogComment.content = params[:content]
+                  blogComment.title = "RE: #{blog.title}"
+                  if blog.children << blogComment
+                    result = 2
+                    update_id = blog.id
+                  end
+                else
+                  #二级回复
+                  blog = BlogComment.find(params[:id]).root
+                  blogComment = BlogComment.new
+                  blogComment.author = current_user
+                  blogComment.blog = blog.blog
+                  blogComment.content = params[:content]
+                  blogComment.title = "RE: #{blog.title}"
+                  parent = BlogComment.find params[:id]
+                  blogComment.parent_id = params[:id]         #被回复的回复
+                  blogComment.reply_id = parent.author.id     #被回复者id
+
+                  if parent.children << blogComment
+                    result = 2
+                    update_id = blog.id
+                  end
+
                 end
             end
             if result == 2
-              update_course_activity_api(type,params[:id])
-              update_user_activity_api(type,params[:id])
-              update_org_activity_api(type,params[:id])
-              update_forge_activity_api(type,params[:id])
-              update_principal_activity_api(type,params[:id])
+              update_course_activity_api(type,update_id)
+              update_user_activity_api(type,update_id)
+              update_org_activity_api(type,update_id)
+              update_forge_activity_api(type,update_id)
+              update_principal_activity_api(type,update_id)
             end
           else
             result = 3
           end
           present :result, result
           present :status, status
+          present :act_id, update_id
           present :tip, tip
           present :subscribe,subscribe
         end
diff --git a/app/api/mobile/apis/users.rb b/app/api/mobile/apis/users.rb
index 764dc957f..557b06cea 100644
--- a/app/api/mobile/apis/users.rb
+++ b/app/api/mobile/apis/users.rb
@@ -4,6 +4,61 @@ module Mobile
     class Users < Grape::API
       resource :users do
 
+        desc "我的资料"
+        params do
+          requires :token, type: String
+        end
+
+        get 'get_userinfo' do
+          authenticate!
+          present :data, current_user, with: Mobile::Entities::User
+          present :status, 0
+        end
+
+        desc "上传头像"
+        params do
+          requires :token, type: String
+          requires :imgdata, type: String
+        end
+
+        post 'upload_head' do
+          authenticate!
+          #直接生成头像
+          dirPath = "public/images/avatars/User"
+
+          fileDir = dirPath + "/"+current_user.id.to_s
+          imgdata = Base64.decode64(params[:imgdata].split(",")[1])
+          if imgdata.length > 1024*1024
+            present :message,"上传图片不能超过1M"
+            present :status, -1
+          else
+            begin
+              File.open(fileDir,'wb'){ |f| f.write(imgdata) }
+              present :status, 0
+            rescue
+              present :message,"上传失败"
+              present :status, -1
+            end
+          end
+        end
+
+        desc "解除绑定"
+        params do
+          requires :token, type: String
+        end
+
+        post 'user_unbind' do
+          authenticate!
+
+          user = current_user
+          uw = user.user_wechat
+
+          us = UsersService.new
+          us.wechat_unbind user.user_wechat
+
+          present :status, 0
+        end
+
         desc "查询是否已绑定"
         params do
           requires :openid, type: String, desc: 'wechat openid'
@@ -221,6 +276,73 @@ module Mobile
           present :data,my_jours,with:Mobile::Entities::Jours
           present :status,0
         end
+
+        desc "修改我的资料"
+
+        params do
+          requires :token, type: String
+          requires :lastname, type: String
+          requires :sex, type: Integer
+          requires :mail, type: String
+        end
+
+        post 'edit_userinfo' do
+          authenticate!
+          user = current_user
+          status = 0
+          message = ""
+
+          #昵称 不能超过30个字符
+          if params[:lastname].length > 30 then
+            message = "姓名不能超过30个字符!"
+            status = -1
+          end
+
+          if params[:mail].length > 60 then
+            message = "邮箱地址不能超过60个字符!"
+            status = -1
+          end
+
+          if !(params[:mail].match(/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i))
+            message = "请输入正确的邮箱地址!"
+            status = -1
+          end
+
+          if status == 0
+            # 修改邮箱的时候同步修改到gitlab
+            if user.mail != params[:mail]
+              g = Gitlab.client
+              begin
+                g.edit_user(user.gid, :email => params[:mail])
+              rescue
+                Rails.logger.error "sync user's email of gitlab failed!"
+              end
+            end
+
+            user.mail = params[:mail]
+
+            user.lastname = params[:lastname]
+
+            se = user.extensions
+
+            se.gender = params[:sex]
+
+            if user.save && se.save
+              status = 0
+            else
+              message = "该邮箱地址已被使用!"
+              status = -1
+            end
+          end
+
+          if status == 0
+            present :data, current_user, with: Mobile::Entities::User
+            present :status, 0
+          else
+            present :status, -1
+            present :message, message
+          end
+        end
       end
     end
   end
diff --git a/app/api/mobile/entities/user.rb b/app/api/mobile/entities/user.rb
index dcdf48d3b..30a2a7edd 100644
--- a/app/api/mobile/entities/user.rb
+++ b/app/api/mobile/entities/user.rb
@@ -30,15 +30,24 @@ module Mobile
                   u.nil? ? "" : u.show_name
                 when :roles_id
                   u[:roles_id].nil? ? nil : u.roles_id
+                when :login
+                  u.login
+                when :lastname
+                  u.lastname
+                when :mail
+                  u.mail
               end
             end
           end
-
         end
       end
 
       expose :id 
       #头像
+      user_expose :login
+      user_expose :lastname
+      #邮箱地址
+      user_expose :mail
       expose :nickname
       #真名
       user_expose :img_url
@@ -51,8 +60,6 @@ module Mobile
       #我的二维码
       #工作单位
       user_expose :work_unit
-      #邮箱地址
-      user_expose :mail
       #地区
       user_expose :location
       #签名
diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb
index 64f85b5db..d1835408f 100644
--- a/app/controllers/student_work_controller.rb
+++ b/app/controllers/student_work_controller.rb
@@ -410,11 +410,11 @@ class StudentWorkController < ApplicationController
       #开放作品 || 老师 || 超级管理员 || 禁用匿评&&作业截止&&已提交作品 显示所有列表
       if (@homework.is_open == 1 && @course.is_public == 1) || (@homework.is_open == 1 && @course.is_public == 0 && User.current.member_of_course?(@course)) || @is_teacher || User.current.admin? || (User.current.member_of_course?(@course) && @homework.anonymous_comment == 1 && Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.now.strftime("%Y-%m-%d") && !@homework.student_works.has_committed.where(:user_id => User.current.id).empty?)
         if @order == 'lastname'
-          @stundet_works = search_homework_member @homework.student_works.select("student_works.*,student_works.work_score as score").joins(:user).where("users.id in #{student_in_group}").order("CONVERT(lastname USING gbk) COLLATE gbk_chinese_ci #{@b_sort}, login #{@b_sort}"),@name
+          @stundet_works = search_homework_member @homework.student_works.no_copy.select("student_works.*,student_works.work_score as score").joins(:user).where("users.id in #{student_in_group}").order("CONVERT(lastname USING gbk) COLLATE gbk_chinese_ci #{@b_sort}, login #{@b_sort}"),@name
         elsif @order == 'student_id'
-          @stundet_works = search_homework_member @homework.student_works.select("student_works.*,student_works.work_score as score").joins(:user).where("users.id in #{student_in_group}").joins("join user_extensions on student_works.user_id = user_extensions.user_id").order("#{@order} #{@b_sort}"),@name
+          @stundet_works = search_homework_member @homework.student_works.no_copy.select("student_works.*,student_works.work_score as score").joins(:user).where("users.id in #{student_in_group}").joins("join user_extensions on student_works.user_id = user_extensions.user_id").order("#{@order} #{@b_sort}"),@name
         else
-          @stundet_works = search_homework_member @homework.student_works.select("student_works.*,student_works.work_score as score").joins(:user).where("users.id in #{student_in_group}").order("#{@order} #{@b_sort}"),@name
+          @stundet_works = search_homework_member @homework.student_works.no_copy.select("student_works.*,student_works.work_score as score").joins(:user).where("users.id in #{student_in_group}").order("#{@order} #{@b_sort}"),@name
         end
         @show_all = true
       elsif User.current.member_of_course?(@course)
@@ -476,11 +476,11 @@ class StudentWorkController < ApplicationController
     else
       if (@homework.is_open == 1 &&@course.is_public == 1) || (@homework.is_open == 1 && @course.is_public == 0 && User.current.member_of_course?(@course)) || @is_teacher || User.current.admin? || (User.current.member_of_course?(@course) && @homework.anonymous_comment == 1 && Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.now.strftime("%Y-%m-%d") && !@homework.student_works.has_committed.where(:user_id => User.current.id).empty?)
         if @order == 'lastname'
-          @stundet_works = search_homework_member @homework.student_works.select("student_works.*,student_works.work_score as score").joins(:user).order("CONVERT(lastname USING gbk) COLLATE gbk_chinese_ci #{@b_sort}, login #{@b_sort}"),@name
+          @stundet_works = search_homework_member @homework.student_works.no_copy.select("student_works.*,student_works.work_score as score").joins(:user).order("CONVERT(lastname USING gbk) COLLATE gbk_chinese_ci #{@b_sort}, login #{@b_sort}"),@name
         elsif @order == 'student_id'
-          @stundet_works = search_homework_member @homework.student_works.select("student_works.*,student_works.work_score as score").joins("join user_extensions on student_works.user_id = user_extensions.user_id").order("#{@order} #{@b_sort}"),@name
+          @stundet_works = search_homework_member @homework.student_works.no_copy.select("student_works.*,student_works.work_score as score").joins("join user_extensions on student_works.user_id = user_extensions.user_id").order("#{@order} #{@b_sort}"),@name
         else
-          @stundet_works = search_homework_member @homework.student_works.select("student_works.*,student_works.work_score as score").order("#{@order} #{@b_sort}"),@name
+          @stundet_works = search_homework_member @homework.student_works.no_copy.select("student_works.*,student_works.work_score as score").order("#{@order} #{@b_sort}"),@name
         end
         @show_all = true
       elsif User.current.member_of_course?(@course)
@@ -613,33 +613,21 @@ class StudentWorkController < ApplicationController
         student_work.work_status = 1
       end
       if student_work.save
-        if @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 1
-          @student_work_project.student_work_id = student_work.id
-          @student_work_project.save
-          members = params[:group_member_ids].split(',')
-          for i in 1 .. members.count-1
-            stu_project = StudentWorkProject.new
-            stu_project.homework_common_id = @homework.id
-            stu_project.student_work_id = student_work.id
-            stu_project.project_id = @student_work_project.project_id
-            stu_project.user_id = members[i].to_i
-            stu_project.is_leader = 0
+        if @homework.homework_type == 3
+          if @homework.homework_detail_group.base_on_project == 1
+            @student_work_project.student_work_id = student_work.id
+            @student_work_project.save
+          elsif @homework.homework_detail_group.base_on_project == 0
+            stu_project = StudentWorkProject.new(:homework_common_id => @homework.id, :student_work_id => student_work.id, :project_id => student_work.project_id, :user_id => student_work.user_id, :is_leader => 1)
             stu_project.save
           end
-        elsif @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 0
           members = params[:group_member_ids].split(',')
-          for i in 0 .. members.count-1
-            stu_project = StudentWorkProject.new
-            stu_project.homework_common_id = @homework.id
-            stu_project.student_work_id = student_work.id
-            stu_project.project_id = -1
-            stu_project.user_id = members[i].to_i
-            if i == 0
-              stu_project.is_leader = 1
-            else
-              stu_project.is_leader = 0
+          for i in 1 .. members.count-1
+            stu_work = StudentWork.new(:name => student_work.name, :description => student_work.description,:user_id =>members[i].to_i, :homework_common_id => @homework.id,:project_id => student_work.project_id, :late_penalty => student_work.late_penalty,:work_status => 3, :commit_time => student_work.commit_time)
+            if stu_work.save
+              stu_project = StudentWorkProject.new(:homework_common_id => @homework.id, :student_work_id => student_work.id, :project_id => stu_work.project_id == 0 ? -1 : stu_work.project_id, :user_id => members[i].to_i, :is_leader => 0)
+              stu_project.save
             end
-            stu_project.save
           end
         end
         @homework.update_column(:updated_at, Time.now)
@@ -687,20 +675,17 @@ class StudentWorkController < ApplicationController
         if @homework.homework_type == 3
           @student_work_project = @homework.student_work_projects.where("user_id=?",User.current.id).first
           student_work_projects = @homework.student_work_projects.where("student_work_id=? and is_leader =?",@work.id,0)
+          user_ids = student_work_projects.empty? ? "(-1)" : "(" + student_work_projects.map{|stu|stu.user_id}.join(",") + ")"
+          student_works = @homework.student_works.where("user_id in #{user_ids}")
+          student_works.delete_all
           student_work_projects.delete_all
           members = params[:group_member_ids].split(',')
           for i in 1 .. members.count-1
-            stu_project = StudentWorkProject.new
-            stu_project.homework_common_id = @homework.id
-            stu_project.student_work_id = @work.id
-            if @homework.homework_detail_group.base_on_project == 1
-              stu_project.project_id = @student_work_project.project_id
-            else @homework.homework_detail_group.base_on_project == 0
-            stu_project.project_id = -1
+            stu_work = StudentWork.new(:name => @work.name, :description => @work.description,:user_id=> members[i].to_i, :homework_common_id => @homework.id, :project_id => @work.project_id, :late_penalty => @work.late_penalty,:work_status => 3, :commit_time => @work.commit_time)
+            if stu_work.save
+              stu_project = StudentWorkProject.new(:homework_common_id => @homework.id, :student_work_id => @work.id, :project_id => stu_work.project_id == 0 ? -1 : stu_work.project_id, :user_id => members[i].to_i, :is_leader => 0)
+              stu_project.save
             end
-            stu_project.user_id = members[i].to_i
-            stu_project.is_leader = 0
-            stu_project.save
           end
         end
 
@@ -735,26 +720,25 @@ class StudentWorkController < ApplicationController
 
   def destroy
     if @homework.homework_type == 3
-      if @work.destroy
-        if @homework.homework_detail_group.base_on_project == 1
-          pros = @work.student_work_projects.where("is_leader = 0")
-          pros.each do |pro|
-            pro.destroy
-          end
-          project = @work.student_work_projects.where("is_leader = 1").first
-          project.update_attributes(:student_work_id => nil)
-        elsif @homework.homework_detail_group.base_on_project == 0
-          @work.student_work_projects.each do |pro2|
-            pro2.destroy
-          end
-        end
+      pros = @work.student_work_projects.where("is_leader = 0")
+      user_ids = pros.empty? ? "(-1)" : "(" + pros.map{|stu|stu.user_id}.join(",") + ")"
+      student_works = @homework.student_works.where("user_id in #{user_ids}")
+      student_works.delete_all
+      pros.delete_all
+
+      project = @work.student_work_projects.where("is_leader = 1").first
+      if @homework.homework_detail_group.base_on_project == 1
+        project.update_attributes(:student_work_id => nil)
+      else
+        project.destroy
       end
+      @work.destroy
     else
       @work.attachments.destroy_all
       @work.student_works_scores.destroy_all
       @work.course_messages.destroy_all
       @work.student_work_tests.destroy_all
-      @work.update_attributes(:work_status => 0, :name => "#{@homework.name}的作品提交", :description => nil, :late_penalty => 0, :commit_time => nil,:final_score => nil,:teacher_score => nil,:student_score => nil,:teaching_asistant_score => nil,:system_score => 0,:work_score => nil)
+      @work.update_attributes(:work_status => 0, :name => "#{@homework.name}的作品提交", :description => nil, :late_penalty => 0, :commit_time => nil,:final_score => nil,:teacher_score => nil,:student_score => nil,:teaching_asistant_score => nil,:system_score => 0,:work_score => nil, :project_id => 0)
       @work.update_column("work_score",nil)
     end
     respond_to do |format|
@@ -786,22 +770,21 @@ class StudentWorkController < ApplicationController
 
   def retry_work
     if @homework.homework_type == 3
-      if @work.destroy
-        if @homework.homework_detail_group.base_on_project == 1
-          pros = @work.student_work_projects.where("is_leader = 0")
-          pros.each do |pro|
-            pro.destroy
-          end
-          project = @work.student_work_projects.where("is_leader = 1").first
-          project.update_attributes(:student_work_id => nil)
-        elsif @homework.homework_detail_group.base_on_project == 0
-          @work.student_work_projects.each do |pro2|
-            pro2.destroy
-          end
-        end
+      pros = @work.student_work_projects.where("is_leader = 0")
+      user_ids = pros.empty? ? "(-1)" : "(" + pros.map{|stu|stu.user_id}.join(",") + ")"
+      student_works = @homework.student_works.where("user_id in #{user_ids}")
+      student_works.delete_all
+      pros.delete_all
+
+      project = @work.student_work_projects.where("is_leader = 1").first
+      if @homework.homework_detail_group.base_on_project == 1
+        project.update_attributes(:student_work_id => nil)
+      else
+        project.destroy
       end
-    elsif @homework.homework_type == 1
-      @work.update_attributes(:work_status => 0, :name => "#{@homework.name}的作品提交", :description => nil, :late_penalty => 0, :commit_time => nil)
+      @work.destroy
+    else
+      @work.update_attributes(:work_status => 0, :name => "#{@homework.name}的作品提交", :description => nil, :late_penalty => 0, :commit_time => nil, :project_id => 0)
       @work.attachments.destroy_all
       @work.course_messages.destroy_all
     end
@@ -1096,9 +1079,13 @@ class StudentWorkController < ApplicationController
 
   #创建作业的关联项目
   def student_work_project
+    @work = @homework.student_works.where("user_id = #{User.current.id} and work_status = 0").first
+    if @work
+      @work.update_column('project_id', params[:projectName].to_i)
+    end
     @project = StudentWorkProject.new
     @project.homework_common_id = @homework.id
-    @project.project_id = (Project.find params[:projectName].to_i).id
+    @project.project_id = params[:projectName].to_i
     @project.user_id = User.current.id
     @project.is_leader = 1
     if @project.save
@@ -1139,7 +1126,7 @@ class StudentWorkController < ApplicationController
     end
     all_students = User.where("id in #{all_student_ids}")
     student_work_id = @homework.student_work_projects.where("user_id=? and student_work_id is not null",User.current.id).first.nil? ? -1 : @homework.student_work_projects.where("user_id=?",User.current.id).first.student_work_id
-    @commit_student_ids = @homework.student_work_projects.where("student_work_id != #{student_work_id}").map{|student| student.user_id}
+    @commit_student_ids = @homework.student_works.where("id != #{student_work_id}").map{|student| student.user_id}
     @users = searchstudent_by_name all_students,name
     respond_to do |format|
       format.js
@@ -1147,6 +1134,10 @@ class StudentWorkController < ApplicationController
   end
 
   def cancel_relate_project
+    @work = @homework.student_works.where("user_id = #{User.current.id} and work_status = 0").first
+    if @work
+      @work.update_column('project_id', 0)
+    end
     relate_pro = StudentWorkProject.where("user_id = #{User.current.id} and homework_common_id = #{@homework.id}").first
     if relate_pro.destroy
       @user_activity_id = params[:user_activity_id].to_i
@@ -1586,6 +1577,10 @@ class StudentWorkController < ApplicationController
           end
         end
       end
+      if homework.homework_type == 3
+        student_works = group_student_works student_work, homework
+        student_works.update_all(:final_score => student_work.final_score,:teacher_score => student_work.teacher_score,:student_score => student_work.student_score,:teaching_asistant_score => student_work.teaching_asistant_score,:work_score => student_work.work_score)
+      end
     end
   end
 end
diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb
index 54486221e..0c6eb0910 100644
--- a/app/controllers/wechats_controller.rb
+++ b/app/controllers/wechats_controller.rb
@@ -167,6 +167,27 @@ class WechatsController < ActionController::Base
     end
   end
 
+  on :click, with: 'UNBIND' do |request, key|
+    uw = user_binded?(request[:FromUserName])
+    unless uw
+      request.reply.text "您还未绑定帐号"
+    else
+      #解除绑定
+      us = UsersService.new
+      us.wechat_unbind uw
+
+      tmpurl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{ROOT_URL+'/wechat/user_activities'}&response_type=code&scope=snsapi_base&state=login&connect_redirect=1#wechat_redirect"
+      news = (1..1).each_with_object([]) { |n, memo| memo << { title: '重新绑定提醒',
+                                                               content: "尊敬的用户,您已解除绑定。\n解除时间:#{format_time(Time.now)}\n点击进入重新绑定!"} }
+      request.reply.news(news) do |article, n, index| # article is return object
+        url = tmpurl
+        article.item title: "#{n[:title]}",
+                     description: n[:content],
+                     url: url
+      end
+    end
+  end
+
   def join_class_request(request)
     openid = request[:FromUserName]
     wl = WechatLog.where("openid = '#{openid}' and request_raw like '%\"Event\":\"click\"%'").order('id desc').first
diff --git a/app/helpers/student_work_helper.rb b/app/helpers/student_work_helper.rb
index 2ecb5516f..1e7df6466 100644
--- a/app/helpers/student_work_helper.rb
+++ b/app/helpers/student_work_helper.rb
@@ -158,4 +158,11 @@ module StudentWorkHelper
     end
     return status
   end
+
+  def group_student_works student_work, homework
+    pros = student_work.student_work_projects.where("is_leader = 0")
+    user_ids = pros.empty? ? "(-1)" : "(" + pros.map{|stu|stu.user_id}.join(",") + ")"
+    student_works = homework.student_works.where("user_id in #{user_ids}")
+    return student_works
+  end
 end
\ No newline at end of file
diff --git a/app/models/student_work.rb b/app/models/student_work.rb
index 183570081..59e5b76bc 100644
--- a/app/models/student_work.rb
+++ b/app/models/student_work.rb
@@ -1,4 +1,4 @@
-#学生提交作品表
+#学生提交作品表 #work_status :0 未提交  1 已提交  2 迟交  3 分组作品复制的组员作品
 class StudentWork < ActiveRecord::Base
   attr_accessible :name, :description, :homework_common_id, :user_id, :final_score, :teacher_score, :student_score, :teaching_asistant_score, :system_score, :work_score, :project_id, :is_test, :simi_id, :simi_value, :work_status, :commit_time
 
@@ -13,7 +13,8 @@ class StudentWork < ActiveRecord::Base
   has_many :course_messages, :class_name =>'CourseMessage', :as => :course_message, :dependent => :destroy
   has_many :attachments, :dependent => :destroy
 
-  scope :has_committed, lambda{where("work_status != 0")}
+  scope :has_committed, lambda{where("work_status != 0 and work_status != 3")}
+  scope :no_copy, lambda{where("work_status != 3")}
 
   before_destroy :delete_praise
   before_save :set_program_score, :set_src
@@ -31,7 +32,7 @@ class StudentWork < ActiveRecord::Base
 
   private 
   def set_program_score
-    if homework_common.is_program_homework?       #编程作业,学生提交作品后计算系统得分
+    if self.homework_common.is_program_homework?       #编程作业,学生提交作品后计算系统得分
         #根据最后一次测试计算得分
         unless last_test
           self.system_score = 0
@@ -169,6 +170,12 @@ class StudentWork < ActiveRecord::Base
           end
         end
       end
+      if homework.homework_type == 3
+        pros = student_work.student_work_projects.where("is_leader = 0")
+        user_ids = pros.empty? ? "(-1)" : "(" + pros.map{|stu|stu.user_id}.join(",") + ")"
+        student_works = homework.student_works.where("user_id in #{user_ids}")
+        student_works.update_all(:final_score => student_work.final_score,:teacher_score => student_work.teacher_score,:student_score => student_work.student_score,:teaching_asistant_score => student_work.teaching_asistant_score,:work_score => student_work.work_score)
+      end
     end
   end
 
diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb
index f184fa923..24e15f369 100644
--- a/app/services/courses_service.rb
+++ b/app/services/courses_service.rb
@@ -941,46 +941,36 @@ class CoursesService
      :description => description, :homework_state => state,:open_anonymous_evaluation => open_anonymous_evaluation}
   end
 
-
-  def student_homework_score(groupid,course_id, nums, score_sort_by)
-    #teachers = find_course_teachers(@course)
-    #start_from = start_from * nums
+  def student_homework_score(groupid,course_id, nums, score_sort_by, sort_type = 'score')
     sql_select = ""
     if groupid == 0
-      if nums == 0
-        sql_select = "SELECT members.*, SUM(homework_attaches.score) as score FROM members, homework_attaches
-            WHERE members.course_id = #{course_id} AND members.user_id in (SELECT students_for_courses.student_id FROM students_for_courses WHERE course_id = #{course_id}) AND members.user_id = homework_attaches.user_id
-        AND homework_attaches.bid_id in (SELECT bid_id FROM homework_for_courses WHERE course_id = #{course_id}) GROUP BY members.user_id
-        UNION all
-        SELECT members.*, 0 as  score FROM members,homework_attaches,students_for_courses WHERE members.course_id = #{course_id} AND
-        students_for_courses.course_id = #{course_id} and members.user_id = students_for_courses.student_id AND
-        members.user_id NOT IN (SELECT homework_attaches.user_id FROM homework_attaches WHERE homework_attaches.bid_id in (SELECT bid_id FROM homework_for_courses WHERE course_id = #{course_id} )
-        )
-        GROUP BY members.user_id ORDER BY score #{score_sort_by}"
-      else
-        sql_select = "SELECT members.*, SUM(homework_attaches.score) as score FROM members, homework_attaches
-            WHERE members.course_id = #{course_id} AND members.user_id in (SELECT students_for_courses.student_id FROM students_for_courses WHERE course_id = #{course_id}) AND members.user_id = homework_attaches.user_id
-        AND homework_attaches.bid_id in (SELECT bid_id FROM homework_for_courses WHERE course_id = #{course_id})  GROUP BY members.user_id
-        UNION all
-        SELECT members.*, 0 as  score FROM members,homework_attaches,students_for_courses WHERE members.course_id = #{course_id} AND
-        students_for_courses.course_id = #{course_id} and members.user_id = students_for_courses.student_id AND
-        members.user_id NOT IN (SELECT homework_attaches.user_id FROM homework_attaches WHERE homework_attaches.bid_id in (SELECT bid_id FROM homework_for_courses WHERE course_id = #{course_id} )
-        )
-        GROUP BY members.user_id ORDER BY score #{score_sort_by} " #limit #{start_from}, #{nums}"
-
-      end
+      sql_select = "SELECT members.*,(
+          SELECT SUM(student_works.work_score)
+          FROM student_works,homework_commons
+          WHERE student_works.homework_common_id = homework_commons.id
+          AND homework_commons.course_id = course_id
+          AND student_works.user_id = members.user_id
+        ) AS score,(SELECT (message_num*2 + message_reply_num*1 + news_reply_num*1 + news_num*1 +
+         resource_num*5 + journal_num*1 + homework_journal_num*1 ) FROM `course_contributor_scores` AS ccs WHERE ccs.course_id = #{course_id} AND ccs.user_id = members.user_id
+        ) AS act_score
+        FROM members
+        JOIN students_for_courses
+        ON students_for_courses.student_id = members.user_id AND students_for_courses.course_id = members.course_id
+        WHERE members.course_id = #{course_id} ORDER BY #{sort_type} #{score_sort_by}"
     else
-      sql_select = "SELECT members.*, SUM(homework_attaches.score) as score FROM members, homework_attaches
-        WHERE members.course_id = #{course_id} AND members.user_id in (SELECT students_for_courses.student_id FROM students_for_courses WHERE course_id = #{course_id}) AND members.user_id = homework_attaches.user_id
-        and members.course_group_id = #{groupid} AND homework_attaches.bid_id in (SELECT bid_id FROM homework_for_courses WHERE course_id = #{course_id})
-        GROUP BY members.user_id
-        UNION all
-        SELECT members.*, 0 as  score FROM members,homework_attaches,students_for_courses WHERE members.course_id = #{course_id}
-        and members.course_group_id = #{groupid} AND
-        students_for_courses.course_id = #{course_id} and members.user_id = students_for_courses.student_id AND
-        members.user_id NOT IN (SELECT homework_attaches.user_id FROM homework_attaches WHERE homework_attaches.bid_id in (SELECT bid_id FROM homework_for_courses WHERE course_id = #{course_id} )
-        )
-        GROUP BY members.user_id ORDER BY score #{score_sort_by}"
+      sql_select = "SELECT members.*,(
+          SELECT SUM(student_works.work_score)
+          FROM student_works,homework_commons
+          WHERE student_works.homework_common_id = homework_commons.id
+          AND homework_commons.course_id = #{course_id}
+          AND student_works.user_id = members.user_id
+        ) AS score,(SELECT (message_num*2 + message_reply_num*1 + news_reply_num*1 + news_num*1 +
+         resource_num*5 + journal_num*1 + homework_journal_num*1 ) FROM `course_contributor_scores` AS ccs WHERE ccs.course_id = #{course_id} AND ccs.user_id = members.user_id
+        ) AS act_score
+        FROM members
+        JOIN students_for_courses
+        ON students_for_courses.student_id = members.user_id AND students_for_courses.course_id = members.course_id
+        WHERE members.course_id = #{course_id} AND members.course_group_id = #{groupid} ORDER BY #{sort_type} #{score_sort_by}"
     end
     sql = ActiveRecord::Base.connection()
     homework_scores = Member.find_by_sql(sql_select)
diff --git a/app/services/users_service.rb b/app/services/users_service.rb
index 5789befe5..540e1bbff 100644
--- a/app/services/users_service.rb
+++ b/app/services/users_service.rb
@@ -1,3 +1,4 @@
+#coding=utf-8
 class UsersService
   include ApplicationHelper
   include AccountHelper
@@ -319,8 +320,22 @@ class UsersService
     my_jours_arr
   end
 
+  def wechat_unbind uw
+    user = uw.user
 
+    #发重新绑定的微信模版消息
 
+    type = "login"
+    title = "尊敬的用户,您已解除绑定。"
+    key1 = "个人原因"
+    remark = "点击进入重新绑定。"
 
+    ws = WechatService.new
+    ws.rebind_notice user.id, type, user.id, title, key1,format_time(Time.now), remark
+
+    uw.user_id = nil
+    uw.delete
+
+  end
 
 end
diff --git a/app/services/wechat_service.rb b/app/services/wechat_service.rb
index 8adc1392f..c11826896 100644
--- a/app/services/wechat_service.rb
+++ b/app/services/wechat_service.rb
@@ -445,4 +445,41 @@ class WechatService
     end
   end
 
+  def rebind_notice(user_id, type, id, first, key1, key2,remark="")
+    uw = UserWechat.where(user_id: user_id).first
+    unless uw.nil?
+      data = {
+          touser:uw.openid,
+          template_id:Wechat.config.rebind_notice,
+          url:Wechat.config.auto_openid_url_1+Wechat.config.auto_openid_url_2+"login"+Wechat.config.auto_openid_url_3,
+          topcolor:"#FF0000",
+          data:{
+              first: {
+                  value:first,
+                  color:"#707070"
+              },
+              keyword1:{
+                  value:key1,
+                  color:"#707070"
+              },
+              keyword2:{
+                  value:key2,
+                  color:"#707070"
+              },
+              remark:{
+                  value:remark,
+                  color:"#707070"
+              }
+          }
+      }
+      #data = three_keys_template uw.openid,Wechat.config.create_class_notice, type, id, first, key1, key2, key3, remark
+      begin
+        req = Wechat.api.template_message_send Wechat::Message.to(uw.openid).template(data)
+      rescue Exception => e
+        Rails.logger.error  "[rebind_notice] ===> #{e}"
+      end
+      Rails.logger.info "send over. #{req}"
+    end
+  end
+
 end
\ No newline at end of file
diff --git a/app/views/admin/leave_messages.html.erb b/app/views/admin/leave_messages.html.erb
index 986823faa..a9acba903 100644
--- a/app/views/admin/leave_messages.html.erb
+++ b/app/views/admin/leave_messages.html.erb
@@ -62,9 +62,9 @@
           <td style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis;" title='<%=strip_html(journal.notes) %>'>
             <%case journal.jour_type %>
             <% when 'Principal' %>
-                <%= link_to(strip_html(journal.notes), feedback_path(journal.jour_id)) %>
+                <%= link_to(journal.m_parent_id.nil? ? strip_html(journal.notes) : 'RE: ' + strip_html(journal.notes), feedback_path(journal.jour_id)) %>
             <% when 'Course' %>
-                <%= link_to(strip_html(journal.notes), course_feedback_path(journal.jour_id)) %>
+                <%= link_to(journal.m_parent_id.nil? ? strip_html(journal.notes) : 'RE: ' + strip_html(journal.notes), course_feedback_path(journal.jour_id)) %>
             <% end %>
           </td>
           <td class="center">
diff --git a/app/views/exercise/_student_table.html.erb b/app/views/exercise/_student_table.html.erb
index bdfd2c96f..c917cb03e 100644
--- a/app/views/exercise/_student_table.html.erb
+++ b/app/views/exercise/_student_table.html.erb
@@ -1,71 +1,71 @@
-<table class="hwork-table-wrap" style="border-bottom:1px solid #eaeaea;">
-  <tr class="b_grey hworkH30">
-    <th class="hworkList30 pl5 pr5"><span class="c_dark f14 fb">序号</span></th>
-    <th class="hworkList50">&nbsp;&nbsp;</th>
-    <th class="hworkList60"><span class="c_dark f14 fb">姓名</span></th>
-    <th class="hworkList80"><span class="c_dark f14 fb">学号</span></th>
-    <th class="hworkList80"><span class="c_dark f14 fb">班级</span></th>
-    <th width="230">&nbsp;&nbsp;</th>
-    <th class="hworkList130">
-      <%= link_to "时间",'',:class => "c_dark f14 fb" ,:remote => true%>
-    </th>
-    <th class="hworkList50">
-      <%= link_to "成绩",'',:class => "c_dark f14 fb",:remote => true%>
-    </th>
-  </tr>
-
-  <% @exercise_users_list.each_with_index do |exercise, index|%>
-      <tr class="hworkListRow" id="student_work_<%= exercise.id%>">
-        <td class="pl5 pr5" style="text-align:center;"><%=index + 1 %></td>
-        <td class="hworkPortrait pr10 float-none">
-          <%= link_to(image_tag(url_to_avatar(exercise.user),:width =>"40",:height => "40",:style => "display:block;", :class => "mt15"),user_activities_path(exercise.user)) %>
-        </td>
-        <td class="hworkStName student_work_<%= exercise.id%>" title="姓名" id="student_name_<%= exercise.id%>" style="cursor:pointer;">
-          <%=exercise.user.show_name %>
-        </td>
-        <td class="hworkStID student_work_<%= exercise.id%> pl15 pr10 float-none" title="学号" id="student_id_<%= exercise.id%>" style="cursor:pointer;">
-          <span class="hidden fl" style="width:80px;"><%= exercise.user.user_extensions.nil? ? "--" : exercise.user.user_extensions.student_id%></span>
-        </td>
-        <td class="hworkStID student_work_<%= exercise.id%> float-none" title="班级"  id="student_class_<%= exercise.id%>" style="cursor:pointer;">
-          --
-        </td>
-        <td width="230">&nbsp;</td>
-        <td class="hworkList130 c_grey">
-          <% if exercise.created_at%>
-              <%= Time.parse(format_time(exercise.created_at)).strftime("%m-%d %H:%M")%>&nbsp;
-              <% if @exercise.end_time <= exercise.created_at %>
-                  <span class="c_red">[未答]</span>
-              <% end %>
-          <% end %>
-        </td>
-        <td class="hworkList50 <%= score_color exercise.score%> student_final_scor_info">
-          <%= exercise.score.nil? ? "--" : format("%.1f",exercise.score)%>
-        </td>
-        <td><div style="position:relative;"><div class="hworkTip" style="display: none" id="work_click_<%= exercise.id%>"><em></em><span></span><font class="fontGrey2">点击查看详情</font></div></div></td>
-      </tr>
-
-      <script type="text/javascript">
-          $(".student_work_<%= exercise.id%>").mouseenter(function(){
-              $("#work_click_<%= exercise.id%>").show();
-          }).mouseleave(function(){
-              $("#work_click_<%= exercise.id%>").hide();
-          }).mouse;
-          $(function(){
-              <% if Time.parse(h(@exercise.end_time)).strftime("%Y-%m-%d-%H-%M-%S") <= Time.now.strftime("%Y-%m-%d-%H-%M-%S") %>
-              $("#student_name_<%= exercise.id%>,#student_id_<%= exercise.id%>,#student_class_<%= exercise.id%>").on('click',function() {
-                  window.location.href = '<%=show_student_result_exercise_path(@exercise,:user_id => exercise.user_id) %>';
-              });
-              <% else %>
-              //$("#show_student_result_div_<%#= exercise.id%>").attr("title","截止日期未到,暂不能查看学生答题结果");
-              $("#student_name_<%= exercise.id%>").attr("title","截止日期未到,暂不能查看学生答题结果");
-              $("#student_id_<%= exercise.id%>").attr("title","截止日期未到,暂不能查看学生答题结果");
-              $("#student_class_<%= exercise.id%>").attr("title","截止日期未到,暂不能查看学生答题结果");
-              <% end %>
-          });
-          /*function show_result(id) {
-           window.location.href = '<%#=show_student_result_exercise_path(@exercise,:user_id => exercise.user.id) %>';
-           }*/
-      </script>
-
-<% end%>
+<table class="hwork-table-wrap" style="border-bottom:1px solid #eaeaea;">
+  <tr class="b_grey hworkH30">
+    <th class="hworkList30 pl5 pr5"><span class="c_dark f14 fb">序号</span></th>
+    <th class="hworkList50">&nbsp;&nbsp;</th>
+    <th class="hworkList60"><span class="c_dark f14 fb">姓名</span></th>
+    <th class="hworkList80"><span class="c_dark f14 fb">学号</span></th>
+    <th class="hworkList80"><span class="c_dark f14 fb">班级</span></th>
+    <th width="230">&nbsp;&nbsp;</th>
+    <th class="hworkList130">
+      <%= link_to "时间",'',:class => "c_dark f14 fb" ,:remote => true%>
+    </th>
+    <th class="hworkList50">
+      <%= link_to "成绩",'',:class => "c_dark f14 fb",:remote => true%>
+    </th>
+  </tr>
+
+  <% @exercise_users_list.each_with_index do |exercise, index|%>
+      <tr class="hworkListRow" id="student_work_<%= exercise.id%>">
+        <td class="pl5 pr5" style="text-align:center;"><%=index + 1 %></td>
+        <td class="hworkPortrait pr10 float-none">
+          <%= link_to(image_tag(url_to_avatar(exercise.user),:width =>"40",:height => "40",:style => "display:block;", :class => "mt15"),user_activities_path(exercise.user)) %>
+        </td>
+        <td class="hworkStName student_work_<%= exercise.id%>" title="姓名" id="student_name_<%= exercise.id%>" style="cursor:pointer;">
+          <%=exercise.user.show_name %>
+        </td>
+        <td class="hworkStID student_work_<%= exercise.id%> pl15 pr10 float-none" title="学号" id="student_id_<%= exercise.id%>" style="cursor:pointer;">
+          <span class="hidden fl" style="width:55px;"><%= exercise.user.user_extensions.nil? ? "--" : exercise.user.user_extensions.student_id%></span>
+        </td>
+        <td class="hworkStID student_work_<%= exercise.id%> float-none" title="班级"  id="student_class_<%= exercise.id%>" style="cursor:pointer;">
+          --
+        </td>
+        <td width="230">&nbsp;</td>
+        <td class="hworkList130 c_grey">
+          <% if exercise.created_at%>
+              <%= Time.parse(format_time(exercise.created_at)).strftime("%m-%d %H:%M")%>&nbsp;
+              <% if @exercise.end_time <= exercise.created_at %>
+                  <span class="c_red">[未答]</span>
+              <% end %>
+          <% end %>
+        </td>
+        <td class="hworkList50 <%= score_color exercise.score%> student_final_scor_info">
+          <%= exercise.score.nil? ? "--" : format("%.1f",exercise.score)%>
+        </td>
+        <td><div style="position:relative;"><div class="hworkTip" style="display: none" id="work_click_<%= exercise.id%>"><em></em><span></span><font class="fontGrey2">点击查看详情</font></div></div></td>
+      </tr>
+
+      <script type="text/javascript">
+          $(".student_work_<%= exercise.id%>").mouseenter(function(){
+              $("#work_click_<%= exercise.id%>").show();
+          }).mouseleave(function(){
+              $("#work_click_<%= exercise.id%>").hide();
+          }).mouse;
+          $(function(){
+              <% if Time.parse(h(@exercise.end_time)).strftime("%Y-%m-%d-%H-%M-%S") <= Time.now.strftime("%Y-%m-%d-%H-%M-%S") %>
+              $("#student_name_<%= exercise.id%>,#student_id_<%= exercise.id%>,#student_class_<%= exercise.id%>").on('click',function() {
+                  window.location.href = '<%=show_student_result_exercise_path(@exercise,:user_id => exercise.user_id) %>';
+              });
+              <% else %>
+              //$("#show_student_result_div_<%#= exercise.id%>").attr("title","截止日期未到,暂不能查看学生答题结果");
+              $("#student_name_<%= exercise.id%>").attr("title","截止日期未到,暂不能查看学生答题结果");
+              $("#student_id_<%= exercise.id%>").attr("title","截止日期未到,暂不能查看学生答题结果");
+              $("#student_class_<%= exercise.id%>").attr("title","截止日期未到,暂不能查看学生答题结果");
+              <% end %>
+          });
+          /*function show_result(id) {
+           window.location.href = '<%#=show_student_result_exercise_path(@exercise,:user_id => exercise.user.id) %>';
+           }*/
+      </script>
+
+<% end%>
 </table>
\ No newline at end of file
diff --git a/app/views/layouts/base_syllabus.html.erb b/app/views/layouts/base_syllabus.html.erb
index 9bd4a25c0..445af2a8b 100644
--- a/app/views/layouts/base_syllabus.html.erb
+++ b/app/views/layouts/base_syllabus.html.erb
@@ -41,9 +41,9 @@
 <div style="width:1000px; margin: 5px auto;">
   <p class="sy_cgrey">
     位置:&nbsp;&nbsp;
-    <%= link_to User.current, user_path(User.current.id), :class => 'sy_cgrey', :target => '_blank' %>
+    <%= link_to @syllabus.user.show_name, user_path(@syllabus.user), :class => 'sy_cgrey', :target => '_blank' %>
     &nbsp;&gt;&nbsp;
-    <%= link_to '课程', user_courselist_user_path(User.current.id), :class => "sy_cgrey", :target => '_blank' %>
+    <%= link_to '课程', user_courselist_user_path(@syllabus.user), :class => "sy_cgrey", :target => '_blank' %>
     &nbsp;&gt;&nbsp;
     <%= link_to @syllabus.title, syllabus_path(@syllabus.id), :class => "sy_cgrey" %>
   </p>
diff --git a/app/views/student_work/_evaluation_un_work.html.erb b/app/views/student_work/_evaluation_un_work.html.erb
index ed0ba5542..bb87bfde1 100644
--- a/app/views/student_work/_evaluation_un_work.html.erb
+++ b/app/views/student_work/_evaluation_un_work.html.erb
@@ -26,7 +26,11 @@
               <%= link_to student_work.user.show_name,"javascript:void(0)" ,:title => student_work.user.show_name, :class => "StudentName break_word"%>
             </div>
           </td>
-          <% if student_work.project.is_public || User.current.member_of?(student_work.project) || User.current.admin? %>
+          <% if student_work.project_id == 0 || student_work.project_id.nil?%>
+              <td class="<%=@homework.anonymous_comment == 1 ? 'hworkPrName2' : 'hworkPrName'%> student_work_<%= student_work.id%>" title="该项目是私有的">
+                --
+              </td>
+          <% elsif student_work.project.is_public || User.current.member_of?(student_work.project) || User.current.admin? %>
               <td  class="<%=@homework.anonymous_comment == 1 ? 'hworkPrName2' : 'hworkPrName'%> student_work_<%= student_work.id%>" title="项目名称">
                 <%= link_to( student_work.project.name, project_path(student_work.project.id))%>
               </td>
diff --git a/app/views/student_work/_evaluation_work.html.erb b/app/views/student_work/_evaluation_work.html.erb
index c5db6a99f..06bc110b2 100644
--- a/app/views/student_work/_evaluation_work.html.erb
+++ b/app/views/student_work/_evaluation_work.html.erb
@@ -26,7 +26,11 @@
               <%= link_to student_work.user.show_name,"javascript:void(0)" ,:title => student_work.user.show_name, :class => "linkGrey f14 StudentName break_word"%>
             </div>
           </td>
-            <% if student_work.project.is_public || User.current.member_of?(student_work.project) || User.current.admin? %>
+            <% if student_work.project_id == 0 || student_work.project_id.nil?%>
+              <td  class="hworkPrName float-none mr10 student_work_<%= student_work.id%>" title="项目名称">
+                --
+              </td>
+            <% elsif student_work.project.is_public || User.current.member_of?(student_work.project) || User.current.admin? %>
               <td  class="hworkPrName float-none mr10 student_work_<%= student_work.id%>" title="项目名称">
                 <%= link_to( student_work.project.name, project_path(student_work.project.id))%>
               </td>
diff --git a/app/views/student_work/_show.html.erb b/app/views/student_work/_show.html.erb
index f6c0e25d0..9f65376e3 100644
--- a/app/views/student_work/_show.html.erb
+++ b/app/views/student_work/_show.html.erb
@@ -46,13 +46,16 @@
           <% if @homework.homework_detail_group.base_on_project == 1 %>
               <li>
                 <span class="tit_fb"> 关联项目:</span>
-                <% if work.project.is_public || User.current.member_of?(work.project) || User.current.admin? %>
+                <% if work.project_id == 0 || work.project_id.nil? %>
+                    <span>暂无</span>
+                <% elsif work.project.is_public || User.current.member_of?(work.project) || User.current.admin? %>
                     <%= link_to( work.project.name, project_path(work.project.id), :class => "linkBlue" )%>
+                    <span class="ml5">(综合评分:<font class="c_red"><%=static_project_score(work.project.project_score).to_i %></font>)</span>
                 <% else %>
                     <span title ="该项目是私有的"><%=work.project.name %></span>
+                    <span class="ml5">(综合评分:<font class="c_red"><%=static_project_score(work.project.project_score).to_i %></font>)</span>
                 <% end %>
                 <%#= link_to( work.project.name, project_path(work.project.id), :class => "linkBlue" )%>
-                <span class="ml5">(综合评分:<font class="c_red"><%=static_project_score(work.project.project_score).to_i %></font>)</span>
               </li>
           <% end %>
       <% end%>
diff --git a/app/views/syllabuses/new.html.erb b/app/views/syllabuses/new.html.erb
index ced8a3d66..38b00ac5c 100644
--- a/app/views/syllabuses/new.html.erb
+++ b/app/views/syllabuses/new.html.erb
@@ -1,27 +1,29 @@
-<div class="project_r_h02">
-  <h2 class="project_h2">新建课程</h2>
-</div>
-<div class="hwork_new">
-  <ul>
-    <%= labelled_form_for @syllabus do |f| %>
-        <li class="ml45">
-          <label><span class="c_red">*</span>&nbsp;课程名称&nbsp;&nbsp;:</label>
-          <input  type="text" name="title" id="new_syllabus_name" class="name_input" placeholder="例如:软件工程" maxlength="100" onkeyup="regex_syllabus_name();">
-          <span class="c_red" id="new_syllabus_name_notice" style="display: none;">课程名称不能为空且至少有两个字符</span>
-        </li>
-        <div class="cl"></div>
-        <li class="ml45">
-          <label><span class="c_white">*</span>&nbsp;<%= l(:label_tags_course_eng_name)%>&nbsp;&nbsp;:</label>
-          <input  type="text" name="eng_name" id="new_syllabus_eng_name" placeholder="例如:Software Engineering" class="name_input" maxlength="100">
-          <!--<span class="c_red" id="new_course_class_period_notice" style="display: none;"></span>-->
-        </li>
-        <div class="cl"></div>
-        <li class=" ml90" >
-          <a href="javascript:void(0)" class="blue_btn fl c_white" onclick="submit_new_syllabus();" >提交</a>
-          <%= link_to "取消",user_activities_path(User.current.id),:class => "grey_btn fl c_white ml10"%>
-          <div class="cl"></div>
-        </li>
-    <% end%>
-  </ul>
-</div><!--talknew end-->
+<div class="project_r_h02">
+  <h2 class="project_h2">新建课程</h2>
+</div>
+<div class="hwork_new">
+  <ul>
+    <%= labelled_form_for @syllabus do |f| %>
+        <li class="ml45">
+          <label><span class="c_red">*</span>&nbsp;课程名称&nbsp;&nbsp;:</label>
+          <input  type="text" name="title" id="new_syllabus_name" class="name_input" placeholder="例如:软件工程" maxlength="100" onkeyup="regex_syllabus_name();">
+          <span class="c_red" id="new_syllabus_name_notice" style="display: none;">课程名称不能为空且至少有两个字符</span>
+        </li>
+        <div class="cl"></div>
+        <li class="ml125 fontGrey3"><span class="success-icon mr25">正确示例:软件工程</span><span class="error-icon">错误示例:2016软件工程</span></li>
+        <li class="ml125 mt10 mb10 fontGrey2">课程是针对一个具体的学科方向开展的教学内容与进程安排<br/>本质上,一门课程就是一个教学计划</li>
+        <li class="ml45">
+          <label><span class="c_white">*</span>&nbsp;<%= l(:label_tags_course_eng_name)%>&nbsp;&nbsp;:</label>
+          <input  type="text" name="eng_name" id="new_syllabus_eng_name" placeholder="例如:Software Engineering" class="name_input" maxlength="100">
+          <!--<span class="c_red" id="new_course_class_period_notice" style="display: none;"></span>-->
+        </li>
+        <div class="cl"></div>
+        <li class=" ml55" >
+          <a href="javascript:void(0)" class="blue_btn fl c_white" onclick="submit_new_syllabus();" >提交</a>
+          <%= link_to "取消",user_activities_path(User.current.id),:class => "grey_btn fl c_white ml10"%>
+          <div class="cl"></div>
+        </li>
+    <% end%>
+  </ul>
+</div><!--talknew end-->
 <div class="cl"></div>
\ No newline at end of file
diff --git a/config/menu.yml.production b/config/menu.yml.production
index 8929d002e..0b8cd5b37 100644
--- a/config/menu.yml.production
+++ b/config/menu.yml.production
@@ -30,3 +30,7 @@ button:
     type: "click"
     name: "联系我们"
     key:  "FEEDBACK"
+  -
+    type: "view"
+    name: "个人资料"
+    url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8e1ab05163a28e37&redirect_uri=https://www.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=edit_userinfo#wechat_redirect"
diff --git a/config/menu.yml.test b/config/menu.yml.test
index 303b30c26..5888996cf 100644
--- a/config/menu.yml.test
+++ b/config/menu.yml.test
@@ -30,3 +30,7 @@ button:
     type: "click"
     name: "联系我们"
     key:  "FEEDBACK"
+  -
+    type: "view"
+    name: "个人资料"
+    url:  "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=https://test.forge.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=edit_userinfo#wechat_redirect"
diff --git a/config/wechat.yml.template b/config/wechat.yml.template
index 8ca6ac237..734ed0e51 100644
--- a/config/wechat.yml.template
+++ b/config/wechat.yml.template
@@ -26,6 +26,7 @@ default: &default
   join_project_notice: "TtXvy0XMIQyCgpnXHhoB8t-x0QIfy-78gAJXsGf9afg"
   project_issue_notice: "HP8JejOnkzmvFopTarc0l1Tp4bU9qnxzdH27x3186lI"
   at_notice: "U3kqzgriCaqkPI9qX0NDQOInJ5hiwHCz6wgTsPysSx4"
+  rebind_notice: "OYsiECfqUlHKlzF_X-pz_xsGh_vAAUunX0jYRdHlyFU"
 
   auto_openid_url_1: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8e1ab05163a28e37&redirect_uri=https://www.trustie.net/wechat/user_activities"
   auto_openid_url_2: "&response_type=code&scope=snsapi_base&state="
diff --git a/config/wechat.yml.test b/config/wechat.yml.test
index 12cee4751..28c9d974e 100644
--- a/config/wechat.yml.test
+++ b/config/wechat.yml.test
@@ -26,6 +26,7 @@ default: &default
   join_project_notice: "3KnMQEMUCmQWkB5JvzrpmguEwnN8bvUHUdpOTudxv_M"
   project_issue_notice: "HAF2aCta7BtnaOd_cotGvU4tErGWwCd9I9aiClFN7w8"
   at_notice: "p4HfyZQuF8O5bP_44RbbJS30SGojLJAuZEqp34iB4JU"
+  rebind_notice: "B97nOiW9cscB_d078I3k0jaPLHeJThTKUuxMoUnWZ2U"
 
   auto_openid_url_1: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=https://test.forge.trustie.net/wechat/user_activities"
   auto_openid_url_2: "&response_type=code&scope=snsapi_base&state="
diff --git a/db/migrate/20160905084821_group_homework_copy_work.rb b/db/migrate/20160905084821_group_homework_copy_work.rb
new file mode 100644
index 000000000..b97d38aa8
--- /dev/null
+++ b/db/migrate/20160905084821_group_homework_copy_work.rb
@@ -0,0 +1,24 @@
+class GroupHomeworkCopyWork < ActiveRecord::Migration
+  def up
+    homeworks = HomeworkCommon.where("homework_type = 3")
+    count = homeworks.count / 30 + 2
+    transaction do
+      for i in 1 ... count do i
+      homeworks.page(i).per(30).each do |homework|
+        homework.student_works.each do |stu|
+          stu.student_work_projects.each do |stu_pro|
+            if stu_pro.is_leader == 0
+              new_stu = StudentWork.new(:name => stu.name, :description => stu.description, :homework_common_id =>homework.id, :user_id => stu_pro.user_id, :final_score => stu.final_score, :teacher_score => stu.teacher_score, :student_score => stu.student_score, :teaching_asistant_score => stu.teaching_asistant_score,
+                                         :project_id => stu.project_id, :late_penalty => stu.late_penalty,:absence_penalty => stu.absence_penalty,:work_score => stu.work_score,:work_status => 3,:commit_time => stu.commit_time)
+              new_stu.save
+            end
+          end
+        end
+        end
+      end
+    end
+  end
+
+  def down
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index f0f276544..ae19dba08 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
 #
 # It's strongly recommended to check this file into your version control system.
 
-ActiveRecord::Schema.define(:version => 20160907080621) do
+ActiveRecord::Schema.define(:version => 20160907080621) do
 
   create_table "activities", :force => true do |t|
     t.integer  "act_id",                                  :null => false
diff --git a/public/assets/wechat/app.html b/public/assets/wechat/app.html
index fdd4d3276..099384593 100644
--- a/public/assets/wechat/app.html
+++ b/public/assets/wechat/app.html
@@ -40,7 +40,7 @@
 <script src="/javascripts/wechat/directives/input_focus.js"></script>
 <script src="/javascripts/wechat/directives/at_delete_link.js"></script>
 <script src="/javascripts/wechat/directives/iphone_recognize.js"></script>
-<script src="/javascripts/wechat/directives/submit_start.js"></script>
+<script src="/javascripts/wechat/directives/multi_reply.js"></script>
 <script src="/javascripts/wechat/controllers/reg.js"></script>
 <script src="/javascripts/wechat/controllers/login.js"></script>
 <script src="/javascripts/wechat/controllers/activity.js"></script>
diff --git a/public/assets/wechat/blog_detail.html b/public/assets/wechat/blog_detail.html
index 570bfb797..7aa629bb7 100644
--- a/public/assets/wechat/blog_detail.html
+++ b/public/assets/wechat/blog_detail.html
@@ -73,7 +73,17 @@
                                 <div ng-if="journal.praise_count && !journal.has_praise" ng-click="addPraise(journal);"><img src="/images/wechat/w_praise.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>{{journal.praise_count}}</span></div>
                                 <div ng-if="journal.has_praise" ng-click="decreasePraise(journal);"><img src="/images/wechat/w_praised.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>{{journal.praise_count}}</span></div>
                             </div>
+                            <div ng-click="clickReply(journal.act_id,blog)"  class="fr mr25 f13 reply-icons multi-hide" >
+                                <img src="/images/wechat/w_reply.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span style="vertical-align:top;">回复</span>
+                            </div>
                             <div class="cl"></div>
+                            <div ng-show="journal.showinput" class="post-input-container multi-input-container ml40 mb10">
+                                <div class="copy-input-container"><textarea class="copy-input"></textarea></div>
+                                <textarea ng-focus="inputfocus(blog)" ng-blur="inputblur(blog)" input-auto type="text" class="post-reply-input" ng-model="journal.comment" placeholder="{{replytip}}" /></textarea>
+                                <button ng-click="addReply(journal,1);journal.showinput = false;" ng-disabled="journal.disabled" ng-hide="journal.disabled" class="post-reply-submit fr border-radius">提交</button>
+                                <button ng-disabled="journal.disabled" ng-hide="!journal.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
+                                <div class="cl"></div>
+                            </div>
                         </div>
                     </div>
                 </div>
@@ -82,13 +92,13 @@
                 </div>
             </div>
 
-            <div ng-if="!blog.locked" id="post_input_1" class="post-input-wrap post-box-shadow" iphone-recognize>
+            <div ng-show="!blog.notshow" ng-if="!blog.locked" id="post_input_1" class="post-input-wrap post-box-shadow" iphone-recognize>
                 <div class="post-reply-row border-bottom-none">
                     <div class="post-input-container">
                         <div class="copy-input-container"><textarea class="copy-input"></textarea></div>
-                        <textarea input-auto type="text" class="post-reply-input" id="postInput1" ng-model="formData.comment" placeholder="{{replytip}}" /></textarea>
-                        <button ng-click="addReply(formData)" ng-disabled="formData.disabled" ng-hide="formData.disabled" class="post-reply-submit fr border-radius">提交</button>
-                        <button ng-disabled="formData.disabled" ng-hide="!formData.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
+                        <textarea input-auto type="text" class="post-reply-input" id="postInput1" ng-model="blog.comment" placeholder="{{replytip}}" /></textarea>
+                        <button ng-click="addReply(blog,0)" ng-disabled="blog.disabled" ng-hide="blog.disabled" class="post-reply-submit fr border-radius">提交</button>
+                        <button ng-disabled="blog.disabled" ng-hide="!blog.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
                         <div class="cl"></div>
                     </div>
                 </div>
diff --git a/public/assets/wechat/course_discussion.html b/public/assets/wechat/course_discussion.html
index a3f6ae496..91aa58fcf 100644
--- a/public/assets/wechat/course_discussion.html
+++ b/public/assets/wechat/course_discussion.html
@@ -71,7 +71,17 @@
                                 <div ng-if="journal.praise_count && !journal.has_praise" ng-click="addPraise(journal);"><img src="/images/wechat/w_praise.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>{{journal.praise_count}}</span></div>
                                 <div ng-if="journal.has_praise" ng-click="decreasePraise(journal);"><img src="/images/wechat/w_praised.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>{{journal.praise_count}}</span></div>
                             </div>
+                            <div ng-click="clickReply(journal.act_id,discussion)" class="fr mr25 f13 reply-icons multi-hide">
+                                <a><img src="/images/wechat/w_reply.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span style="vertical-align:top;">回复</span></a>
+                            </div>
                             <div class="cl"></div>
+                            <div ng-show="journal.showinput" class="post-input-container multi-input-container ml40 mb10">
+                                <div class="copy-input-container"><textarea class="copy-input"></textarea></div>
+                                <textarea ng-focus="inputfocus(discussion)" ng-blur="inputblur(discussion)" input-auto type="text" class="post-reply-input" ng-model="journal.comment" placeholder="{{replytip}}" /></textarea>
+                                <button ng-click="addReply(journal,1);journal.showinput = false;" ng-disabled="journal.disabled" ng-hide="journal.disabled" class="post-reply-submit fr border-radius">提交</button>
+                                <button ng-disabled="journal.disabled" ng-hide="!journal.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
+                                <div class="cl"></div>
+                            </div>
                         </div>
                     </div>
                     <div ng-if="has_more">
@@ -79,13 +89,13 @@
                     </div>
                 </div>
 
-                <div ng-if="!discussion.locked" id="post_input_1" class="post-input-wrap post-box-shadow" iphone-recognize>
+                <div ng-show="!discussion.notshow" ng-if="!discussion.locked" id="post_input_1" class="post-input-wrap post-box-shadow" iphone-recognize>
                     <div class="post-reply-row border-bottom-none">
                         <div class="post-input-container">
                             <div class="copy-input-container"><textarea class="copy-input"></textarea></div>
-                            <textarea input-auto type="text" class="post-reply-input" id="postInput1" ng-model="formData.comment" placeholder="输入回复内容~" /></textarea>
-                            <button ng-click="addReply(formData)" ng-disabled="formData.disabled" ng-hide="formData.disabled" class="post-reply-submit fr border-radius">提交</button>
-                            <button ng-disabled="formData.disabled" ng-hide="!formData.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
+                            <textarea input-auto type="text" class="post-reply-input" id="postInput1" ng-model="discussion.comment" placeholder="输入回复内容~" /></textarea>
+                            <button ng-click="addReply(discussion,0)" ng-disabled="discussion.disabled" ng-hide="discussion.disabled" class="post-reply-submit fr border-radius">提交</button>
+                            <button ng-disabled="discussion.disabled" ng-hide="!discussion.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
                             <div class="cl"></div>
                         </div>
                     </div>
diff --git a/public/assets/wechat/course_notice.html b/public/assets/wechat/course_notice.html
index 33e8e77be..247cd1fd0 100644
--- a/public/assets/wechat/course_notice.html
+++ b/public/assets/wechat/course_notice.html
@@ -86,7 +86,17 @@
                             <div ng-if="journal.praise_count && !journal.has_praise" ng-click="addPraise(journal);"><img src="/images/wechat/w_praise.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>{{journal.praise_count}}</span></div>
                             <div ng-if="journal.has_praise" ng-click="decreasePraise(journal);"><img src="/images/wechat/w_praised.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>{{journal.praise_count}}</span></div>
                         </div>
+                        <div ng-click="clickReply(journal.act_id,news)" class="fr mr25 f13 reply-icons multi-hide">
+                            <a><img src="/images/wechat/w_reply.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span style="vertical-align:top;">回复</span></a>
+                        </div>
                         <div class="cl"></div>
+                        <div ng-show="journal.showinput" class="post-input-container multi-input-container ml40 mb10">
+                            <div class="copy-input-container"><textarea class="copy-input"></textarea></div>
+                            <textarea ng-focus="inputfocus(news)" ng-blur="inputblur(news)" input-auto type="text" class="post-reply-input" ng-model="journal.comment" placeholder="{{replytip}}" /></textarea>
+                            <button ng-click="addReply(journal,1);journal.showinput = false;" ng-disabled="journal.disabled" ng-hide="journal.disabled" class="post-reply-submit fr border-radius">提交</button>
+                            <button ng-disabled="journal.disabled" ng-hide="!journal.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
+                            <div class="cl"></div>
+                        </div>
                     </div>
                 </div>
                 <div ng-if="has_more">
@@ -94,13 +104,13 @@
                 </div>
             </div>
 
-            <div id="post_input_1" class="post-input-wrap post-box-shadow" iphone-recognize>
+            <div ng-show="!news.notshow" id="post_input_1" class="post-input-wrap post-box-shadow" iphone-recognize>
                 <div class="post-reply-row border-bottom-none">
                     <div class="post-input-container">
                         <div class="copy-input-container"><textarea class="copy-input"></textarea></div>
-                        <textarea input-auto type="text" class="post-reply-input" id="postInput1" ng-model="formData.comment" placeholder="输入回复内容~" /></textarea>
-                        <button ng-click="addReply(formData)" ng-disabled="formData.disabled" ng-hide="formData.disabled" class="post-reply-submit fr border-radius">提交</button>
-                        <button ng-disabled="formData.disabled" ng-hide="!formData.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
+                        <textarea input-auto type="text" class="post-reply-input" id="postInput1" ng-model="news.comment" placeholder="输入回复内容~" /></textarea>
+                        <button ng-click="addReply(news,0)" ng-disabled="news.disabled" ng-hide="news.disabled" class="post-reply-submit fr border-radius">提交</button>
+                        <button ng-disabled="news.disabled" ng-hide="!news.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
                         <div class="cl"></div>
                     </div>
                 </div>
diff --git a/public/assets/wechat/edit_userinfo.html b/public/assets/wechat/edit_userinfo.html
new file mode 100644
index 000000000..e299b8feb
--- /dev/null
+++ b/public/assets/wechat/edit_userinfo.html
@@ -0,0 +1,44 @@
+<div class="post-container">
+    <div loading-spinner></div>
+    <div class="blue-title">编辑资料</div>
+    <div class="blank-row mt10">
+        <div class="upload-input-container img-circle fl ml10 mt4">
+            <!--<input class="upload-input" accept="image/*" multiple="" type="file">-->
+            <!--<input class="upload-input" type="file" capture="camera" accept="image/*" load-head>-->
+            <img ng-src="{{replaceUrl(user.img_url)}}" width="30" class="fl img-circle" style="position:absolute;" />
+        </div>
+        <span class="fl ml25">{{user.login}}</span><span ng-click="unbind()" class="fr f13 mr10 c-blue">解除绑定</span><div class="cl"></div></div>
+
+    <form name="regFrm" novalidate>
+
+        <div class="course-list-row f13 c-grey3 mt10"><span class="fl ml15 c-grey3">姓名</span><input class="new-class-input ml25" ng-model="lastname" placeholder="请输入您的姓名全称" maxlength="30" /></div>
+        <div class="course-list-row f13 c-grey3 mt10" style="height:auto;">
+            <div class="mt5" style="line-height:20px">
+                <span class="ml15 c-grey3">性别</span>
+                <span class="ml25">男</span>
+                <span class="login-box fr mr10 mt2" ng-click="sex=0" ng-class="['login-box', 'fr', 'mr10', 'img-circle', {'checked': sex==0}]"></span>
+            </div>
+            <div class="mb5 mt5" style="line-height:20px;">
+                <span class="ml15 c-grey3"></span>
+                <span class="ml55">女</span>
+                <span class="login-box fr mr10 mt2" ng-click="sex=1" ng-class="['login-box', 'fr', 'mr10', 'img-circle', {'checked': sex==1}]"></span>
+            </div>
+        </div>
+
+        <div class="course-list-row f13 c-grey3 mt10">
+            <span class="fl ml15 c-grey3">邮箱</span>
+            <input class="new-class-input ml25" type="email" name="email" ng-model="mail" placeholder="请输入您的邮箱地址" maxlength="60" />
+            <div ng-show="regFrm.$submitted || regFrm.email.$touched">
+                <span class="f12 c-red fl ml15" ng-show="regFrm.email.$error.required">电子邮箱地址不能为空</span>
+                <span class="f12 c-red fl ml15" ng-show="regFrm.email.$error.email">电子邮箱地址不合法</span>
+            </div>
+        </div>
+        <div class="bottom-tab-wrap mt10">
+            <a ng-click="cancel()" class="weixin-tab c-grey border-top">取消</a>
+            <a ng-click="confirm(regFrm)" ng-class="[{'btn-disabled':!regFrm.$valid} ]" class="weixin-tab link-blue2 border-top">确定</a>
+        </div>
+    </form>
+
+    <my-alert message="alertService_1.message" title="alertService_1.title" visible="alertService_1.visible" cb="alertService_1.cb"></my-alert>
+    <my-alert2 message="alertService_2.message" title="alertService_2.title" visible="alertService_2.visible" cb="alertService_2.cb"></my-alert2>
+</div>
\ No newline at end of file
diff --git a/public/assets/wechat/homework_detail.html b/public/assets/wechat/homework_detail.html
index bf2a89f35..e5f73faa9 100644
--- a/public/assets/wechat/homework_detail.html
+++ b/public/assets/wechat/homework_detail.html
@@ -75,7 +75,17 @@
                             <div ng-if="journal.praise_count && !journal.has_praise" ng-click="addPraise(journal);"><img src="/images/wechat/w_praise.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>{{journal.praise_count}}</span></div>
                             <div ng-if="journal.has_praise" ng-click="decreasePraise(journal);"><img src="/images/wechat/w_praised.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>{{journal.praise_count}}</span></div>
                         </div>
+                        <div ng-click="clickReply(journal.act_id,homework)" class="fr mr25 f13 reply-icons multi-hide">
+                            <a><img src="/images/wechat/w_reply.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span style="vertical-align:top;">回复</span></a>
+                        </div>
                         <div class="cl"></div>
+                        <div ng-show="journal.showinput" class="post-input-container multi-input-container ml40 mb10">
+                            <div class="copy-input-container"><textarea class="copy-input"></textarea></div>
+                            <textarea ng-focus="inputfocus(homework)" ng-blur="inputblur(homework)" input-auto type="text" class="post-reply-input" ng-model="journal.comment" placeholder="{{replytip}}" /></textarea>
+                            <button ng-click="addReply(journal,1);journal.showinput = false;" ng-disabled="journal.disabled" ng-hide="journal.disabled" class="post-reply-submit fr border-radius">提交</button>
+                            <button ng-disabled="journal.disabled" ng-hide="!journal.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
+                            <div class="cl"></div>
+                        </div>
                     </div>
                 </div>
                 <div ng-if="has_more">
@@ -83,13 +93,13 @@
                 </div>
             </div>
 
-            <div id="post_input_1" class="post-input-wrap post-box-shadow" iphone-recognize>
+            <div ng-show="!homework.notshow" id="post_input_1" class="post-input-wrap post-box-shadow" iphone-recognize>
                 <div class="post-reply-row border-bottom-none">
                     <div class="post-input-container">
                         <div class="copy-input-container"><textarea class="copy-input"></textarea></div>
-                        <textarea input-auto type="text" class="post-reply-input" id="postInput1" ng-model="formData.comment" placeholder="{{replytip}}" /></textarea>
-                        <button ng-click="addReply(formData)" ng-disabled="formData.disabled" ng-hide="formData.disabled" class="post-reply-submit fr border-radius">提交</button>
-                        <button ng-disabled="formData.disabled" ng-hide="!formData.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
+                        <textarea input-auto type="text" class="post-reply-input" id="postInput1" ng-model="homework.comment" placeholder="{{replytip}}" /></textarea>
+                        <button ng-click="addReply(homework,0)" ng-disabled="homework.disabled" ng-hide="homework.disabled" class="post-reply-submit fr border-radius">提交</button>
+                        <button ng-disabled="homework.disabled" ng-hide="!homework.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
                         <div class="cl"></div>
                     </div>
                 </div>
diff --git a/public/assets/wechat/issue_detail.html b/public/assets/wechat/issue_detail.html
index 5b55ebba0..f4eed4bd9 100644
--- a/public/assets/wechat/issue_detail.html
+++ b/public/assets/wechat/issue_detail.html
@@ -92,7 +92,17 @@
                             <div ng-if="journal.praise_count && !journal.has_praise" ng-click="addPraise(journal);"><img src="/images/wechat/w_praise.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>{{journal.praise_count}}</span></div>
                             <div ng-if="journal.has_praise" ng-click="decreasePraise(journal);"><img src="/images/wechat/w_praised.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>{{journal.praise_count}}</span></div>
                         </div>
+                        <div ng-click="clickReply(journal.act_id,issue)" class="fr mr25 f13 reply-icons multi-hide">
+                            <a><img src="/images/wechat/w_reply.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span style="vertical-align:top;">回复</span></a>
+                        </div>
                         <div class="cl"></div>
+                        <div ng-show="journal.showinput" class="post-input-container multi-input-container ml40 mb10">
+                            <div class="copy-input-container"><textarea class="copy-input"></textarea></div>
+                            <textarea ng-focus="inputfocus(issue)" ng-blur="inputblur(issue)" input-auto type="text" class="post-reply-input" ng-model="journal.comment" placeholder="{{replytip}}" /></textarea>
+                            <button ng-click="addReply(journal,1);journal.showinput = false;" ng-disabled="journal.disabled" ng-hide="journal.disabled" class="post-reply-submit fr border-radius">提交</button>
+                            <button ng-disabled="journal.disabled" ng-hide="!journal.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
+                            <div class="cl"></div>
+                        </div>
                     </div>
                 </div>
                 <div ng-if="has_more">
@@ -100,13 +110,13 @@
                 </div>
             </div>
 
-            <div id="post_input_1" class="post-input-wrap post-box-shadow" iphone-recognize>
+            <div ng-show="!issue.notshow" id="post_input_1" class="post-input-wrap post-box-shadow" iphone-recognize>
                 <div class="post-reply-row border-bottom-none">
                     <div class="post-input-container">
                         <div class="copy-input-container"><textarea class="copy-input"></textarea></div>
-                        <textarea input-auto type="text" class="post-reply-input" id="postInput1" ng-model="formData.comment" placeholder="输入回复内容~" /></textarea>
-                        <button ng-click="addReply(formData)" ng-disabled="formData.disabled" ng-hide="formData.disabled" class="post-reply-submit fr border-radius">提交</button>
-                        <button ng-disabled="formData.disabled" ng-hide="!formData.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
+                        <textarea input-auto type="text" class="post-reply-input" id="postInput1" ng-model="issue.comment" placeholder="输入回复内容~" /></textarea>
+                        <button ng-click="addReply(issue,0)" ng-disabled="issue.disabled" ng-hide="issue.disabled" class="post-reply-submit fr border-radius">提交</button>
+                        <button ng-disabled="issue.disabled" ng-hide="!issue.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
                         <div class="cl"></div>
                     </div>
                 </div>
diff --git a/public/assets/wechat/jour_message_detail.html b/public/assets/wechat/jour_message_detail.html
index 5b06a22aa..a1db224a6 100644
--- a/public/assets/wechat/jour_message_detail.html
+++ b/public/assets/wechat/jour_message_detail.html
@@ -70,7 +70,17 @@
                             <div ng-if="journal.praise_count && !journal.has_praise" ng-click="addPraise(journal);"><img src="/images/wechat/w_praise.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>{{journal.praise_count}}</span></div>
                             <div ng-if="journal.has_praise" ng-click="decreasePraise(journal);"><img src="/images/wechat/w_praised.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>{{journal.praise_count}}</span></div>
                         </div>
+                        <div ng-click="clickReply(journal.act_id,message)" class="fr mr25 f13 reply-icons multi-hide">
+                            <a><img src="/images/wechat/w_reply.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span style="vertical-align:top;">回复</span></a>
+                        </div>
                         <div class="cl"></div>
+                        <div ng-show="journal.showinput" class="post-input-container multi-input-container ml40 mb10">
+                            <div class="copy-input-container"><textarea class="copy-input"></textarea></div>
+                            <textarea ng-focus="inputfocus(message)" ng-blur="inputblur(message)" input-auto type="text" class="post-reply-input" ng-model="journal.comment" placeholder="{{replytip}}" /></textarea>
+                            <button ng-click="addReply(journal,1);journal.showinput = false;" ng-disabled="journal.disabled" ng-hide="journal.disabled" class="post-reply-submit fr border-radius">提交</button>
+                            <button ng-disabled="journal.disabled" ng-hide="!journal.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
+                            <div class="cl"></div>
+                        </div>
                     </div>
                 </div>
                 <div ng-if="has_more">
@@ -78,13 +88,13 @@
                 </div>
             </div>
 
-            <div id="post_input_1" class="post-input-wrap post-box-shadow" iphone-recognize>
+            <div ng-show="!message.notshow" id="post_input_1" class="post-input-wrap post-box-shadow" iphone-recognize>
                 <div class="post-reply-row border-bottom-none">
                     <div class="post-input-container">
                         <div class="copy-input-container"><textarea class="copy-input"></textarea></div>
-                        <textarea input-auto type="text" class="post-reply-input" id="postInput1" ng-model="formData.comment" placeholder="输入回复内容~" /></textarea>
-                        <button ng-click="addReply(formData)" ng-disabled="formData.disabled" ng-hide="formData.disabled" class="post-reply-submit fr border-radius">提交</button>
-                        <button ng-disabled="formData.disabled" ng-hide="!formData.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
+                        <textarea input-auto type="text" class="post-reply-input" id="postInput1" ng-model="message.comment" placeholder="输入回复内容~" /></textarea>
+                        <button ng-click="addReply(message,0)" ng-disabled="message.disabled" ng-hide="message.disabled" class="post-reply-submit fr border-radius">提交</button>
+                        <button ng-disabled="message.disabled" ng-hide="!message.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
                         <div class="cl"></div>
                     </div>
                 </div>
diff --git a/public/assets/wechat/project_discussion.html b/public/assets/wechat/project_discussion.html
index e0ee87d78..dcb5a68a6 100644
--- a/public/assets/wechat/project_discussion.html
+++ b/public/assets/wechat/project_discussion.html
@@ -71,20 +71,30 @@
                             <div ng-if="journal.praise_count && !journal.has_praise" ng-click="addPraise(journal);"><img src="/images/wechat/w_praise.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>{{journal.praise_count}}</span></div>
                             <div ng-if="journal.has_praise" ng-click="decreasePraise(journal);"><img src="/images/wechat/w_praised.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>{{journal.praise_count}}</span></div>
                         </div>
+                        <div ng-click="clickReply(journal.act_id,discussion)" class="fr mr25 f13 reply-icons multi-hide">
+                            <a><img src="/images/wechat/w_reply.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span style="vertical-align:top;">回复</span></a>
+                        </div>
                         <div class="cl"></div>
+                        <div ng-show="journal.showinput" class="post-input-container multi-input-container ml40 mb10">
+                            <div class="copy-input-container"><textarea class="copy-input"></textarea></div>
+                            <textarea ng-focus="inputfocus(discussion)" ng-blur="inputblur(discussion)" input-auto type="text" class="post-reply-input" ng-model="journal.comment" placeholder="{{replytip}}" /></textarea>
+                            <button ng-click="addReply(journal,1);journal.showinput = false;" ng-disabled="journal.disabled" ng-hide="journal.disabled" class="post-reply-submit fr border-radius">提交</button>
+                            <button ng-disabled="journal.disabled" ng-hide="!journal.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
+                            <div class="cl"></div>
+                        </div>
                     </div>
                 </div>
                 <div ng-if="has_more">
                     <div id="more_reply" class="more-events mt10" ng-click="showMoreReply(0,discussion);">更多</div>
                 </div>
             </div>
-            <div ng-if="!discussion.locked" id="post_input_1" class="post-input-wrap post-box-shadow" iphone-recognize>
+            <div ng-show="!discussion.notshow" ng-if="!discussion.locked" id="post_input_1" class="post-input-wrap post-box-shadow" iphone-recognize>
                 <div class="post-reply-row border-bottom-none">
                     <div class="post-input-container">
                         <div class="copy-input-container"><textarea class="copy-input"></textarea></div>
-                        <textarea input-auto type="text" class="post-reply-input" id="postInput1" ng-model="formData.comment" placeholder="输入回复内容~" /></textarea>
-                        <button ng-click="addReply(formData)" ng-disabled="formData.disabled" ng-hide="formData.disabled" class="post-reply-submit fr border-radius">提交</button>
-                        <button ng-disabled="formData.disabled" ng-hide="!formData.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
+                        <textarea input-auto type="text" class="post-reply-input" id="postInput1" ng-model="discussion.comment" placeholder="输入回复内容~" /></textarea>
+                        <button ng-click="addReply(discussion,0)" ng-disabled="discussion.disabled" ng-hide="discussion.disabled" class="post-reply-submit fr border-radius">提交</button>
+                        <button ng-disabled="discussion.disabled" ng-hide="!discussion.disabled" class="post-reply-submit bg-grey fr border-radius">提交</button>
                         <div class="cl"></div>
                     </div>
                 </div>
diff --git a/public/javascripts/wechat/controllers/edit_userinfo.js b/public/javascripts/wechat/controllers/edit_userinfo.js
new file mode 100644
index 000000000..94722398d
--- /dev/null
+++ b/public/javascripts/wechat/controllers/edit_userinfo.js
@@ -0,0 +1,92 @@
+app.controller('EditUserInfoController', ['$scope', 'config','$http', 'auth','$location','$routeParams','alertService','rms','common','$timeout','wx', function($scope, config, $http, auth, $location, $routeParams,alertService,rms,common,$timeout,wx){
+//    common.checkLogin();
+
+    $scope.replaceUrl = function(url){
+        return url;
+    };
+
+    var vm = $scope;
+
+    //单弹框
+    vm.alertService_1 = alertService.create();
+
+    //双弹框
+    vm.alertService_2 = alertService.create();
+
+    vm.getuserinfo = function(){
+        $http.get(config.apiUrl + 'users/get_userinfo?token='+auth.token()).then(
+            function(response) {
+                console.log(response.data);
+                vm.user = response.data.data;
+                vm.lastname = vm.user.lastname;
+                vm.mail = vm.user.mail;
+                vm.sex = vm.user.gender;
+            }
+        );
+    };
+
+    vm.getuserinfo();
+
+    vm.unbind = function(){
+        vm.alertService_2.showMessage('提示', '是否确认解除绑定', function() {
+            $http.post(config.apiUrl + "users/user_unbind",
+                {token: auth.token()}
+            ).then(function (response) {
+                    if (response.data.status == 0) {
+                        vm.alertService_1.showMessage('提示', '解除绑定成功', function () {
+                            wx.closeWindow();
+                        });
+                    }
+                    else {
+                        vm.alertService_1.showMessage('提示', response.data.message);
+                    }
+                });
+        });
+    };
+
+    vm.cancel = function(){
+        vm.alertService_2.showMessage('提示', '是否确认取消', function() {
+            wx.closeWindow();
+        });
+    };
+
+    vm.confirm = function(frm){
+        frm.$setSubmitted();
+
+        console.log(frm);
+        if (!frm.$valid) {
+            console.log(frm.$error);
+            return;
+        }
+
+        if(vm.lastname == ""){
+            vm.alertService_1.showMessage('提示', '姓名不能为空');
+            return;
+        }
+
+        if(vm.mail == ""){
+            vm.alertService_1.showMessage('提示', '邮箱不能为空');
+            return;
+        }
+
+//        if(!(/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i.test(vm.mail))){
+//            vm.alertService_1.showMessage('提示', '邮箱不合法');
+//            return;
+//        }
+
+        $http.post(config.apiUrl + "users/edit_userinfo",
+            {token: auth.token(),lastname: vm.lastname, sex: vm.sex, mail: vm.mail}
+        ).then(function(response){
+                if(response.data.status == 0)
+                {
+                    vm.alertService_1.showMessage('提示', '修改成功',function(){
+                        wx.closeWindow();
+                    });
+                }
+                else{
+                    vm.alertService_1.showMessage('提示', response.data.message);
+                }
+            });
+    };
+
+}]);
\ No newline at end of file
diff --git a/public/javascripts/wechat/directives/input_auto.js b/public/javascripts/wechat/directives/input_auto.js
index 9cd77188b..ea0a6bf1a 100644
--- a/public/javascripts/wechat/directives/input_auto.js
+++ b/public/javascripts/wechat/directives/input_auto.js
@@ -1,19 +1,40 @@
-app.directive('inputAuto',function(){
-    return{
-        restrict: 'A',
-        scope: {},
-        link: function(scope, element){
-            var copyContainer = element.parent().children().children().eq(0);
-            var sendButton = element.next();
-            element.on('input',function(){
-                //console.log(sendButton);
-                copyContainer.html(element[0].value);
-                var textHeight = copyContainer[0].scrollHeight-10;
-                element.css('height', textHeight + 'px');
-            });
-            sendButton.on('click',function(){
-                element.css('height','18px');
-            });
-        }
-    }
-});
\ No newline at end of file
+//app.directive('inputAuto',function(){
+//    return{
+//        restrict: 'A',
+//        scope: {},
+//        link: function(scope, element){
+//            var copyContainer = element.parent().children().children().eq(0);
+//            var sendButton = element.next();
+//            element.on('input',function(){
+//                //console.log(sendButton);
+//                copyContainer.html(element[0].value);
+//                var textHeight = copyContainer[0].scrollHeight-10;
+//                element.css('height', textHeight + 'px');
+//            });
+//            sendButton.on('click',function(){
+//                element.css('height','18px');
+//            });
+//        }
+//    }
+//});
+
+app.directive('inputAuto',["$timeout",function(timer){
+    return{
+        restrict: 'A',
+        scope: {},
+        link: function(scope, element){
+            timer(function(){
+                $(".post-reply-input").bind("input",function(){
+                    var copyInput = $(this).prev().children();
+                    var sendButton = $(this).next();
+                    copyInput.html($(this).val());
+                    var textHeight = copyInput[0].scrollHeight-10;
+                    $(this).css("height",textHeight + "px");
+                    sendButton.click(function(){
+                        $(this).prev().css("height","18px");
+                    })
+                });
+            });
+        }
+    }
+}]);
\ No newline at end of file
diff --git a/public/javascripts/wechat/directives/load_head.js b/public/javascripts/wechat/directives/load_head.js
new file mode 100644
index 000000000..47862f0b7
--- /dev/null
+++ b/public/javascripts/wechat/directives/load_head.js
@@ -0,0 +1,35 @@
+app.directive('loadHead',['$http','config','auth','$location','alertService',function($http,config,auth,$location,alertService){
+    return{
+        restrict: 'A',
+        scope: {},
+        link: function (scope, element, attrs) {
+            element.bind('change', function(){
+                var file = event.target.files[0];
+                //判断类型是不是图片
+                if (!/image\/\w+/.test(file.type)) {
+                    alert("非图片");
+                    return;
+                }
+
+                var reader = new FileReader();
+                reader.readAsDataURL(file);
+                reader.onload = function (e) {
+//                    alert(this.result);//base64
+
+                    $http.post(config.apiUrl + "users/upload_head",
+                        {token: auth.token(),imgdata:this.result}
+                    ).then(function (response) {
+                        if(response.data.status == 0){
+                            scope.$parent.alertService_1.showMessage('提示',"上传成功",function(){
+                                scope.$parent.getuserinfo();
+                            });
+                        }
+                        else{
+                            scope.$parent.alertService_1.showMessage('提示',response.data.message);
+                        }
+                    });
+                }
+            });
+        }
+    }
+}]);
\ No newline at end of file
diff --git a/public/javascripts/wechat/directives/multi_reply.js b/public/javascripts/wechat/directives/multi_reply.js
new file mode 100644
index 000000000..5b1e2b483
--- /dev/null
+++ b/public/javascripts/wechat/directives/multi_reply.js
@@ -0,0 +1,42 @@
+/**
+ * Created by ttang on 2016/9/5.
+ */
+app.directive('multiReply',["$timeout",function(timer){
+    return{
+        restrict: 'A',
+        scope: {},
+        link: function(scope, element){
+            timer(function(){
+                $(".reply-icons").each(function(){
+                    $(this).toggle(function(){
+                        $(this).next().next().removeClass("undis");
+                        $(this).next().next().focus();
+                    },function(){
+                        $(this).next().next().addClass("undis");
+                    });
+                });
+//                $(".reply-icons").live("click",function(){
+//                    if($(this).hasClass("multi-hide")){
+//                        $(".multi-input-container").addClass("undis");
+//                        $(".reply-icons").addClass("multi-hide");
+//                        $(this).next().next().removeClass("undis");
+//                        $(this).next().next().focus();
+//                        $(this).removeClass("multi-hide");
+//                        $(".post-reply-input").val("");
+//                    }
+//                    else{
+//                        $(this).addClass("multi-hide");
+//                        $(".post-input-container").addClass("undis");
+//                        $(".post-reply-input").val("");
+//                        $("#post_input_1, #post_input_1 .post-input-container").show();
+//                    }
+//                });
+//                $(".post-reply-submit,#more_reply").click(function(){
+//                    $(".reply-icons").addClass("multi-hide");
+//                    $(".post-input-container").addClass("undis");
+//                    $("#post_input_1, #post_input_1 .post-input-container").show();
+//                });
+            })
+        }
+    }
+}]);
\ No newline at end of file
diff --git a/public/javascripts/wechat/directives/submit_start.js b/public/javascripts/wechat/directives/submit_start.js
deleted file mode 100644
index cbdc469ab..000000000
--- a/public/javascripts/wechat/directives/submit_start.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Created by ttang on 2016/8/31.
- */
-app.directive('submitStart',["$timeout",function(timer){
-    return{
-        restrict: 'A',
-        scope: {},
-        link: function(scope, element){
-            timer(function(){
-                $("#manageDelete,.login-box").click(function(){
-                    element.removeClass("bg-grey c-white");
-                    element.addClass("link-blue2");
-                });
-            })
-        }
-    }
-}]);
diff --git a/public/javascripts/wechat/others/factory.js b/public/javascripts/wechat/others/factory.js
index d4e365321..190dd36b4 100644
--- a/public/javascripts/wechat/others/factory.js
+++ b/public/javascripts/wechat/others/factory.js
@@ -94,7 +94,7 @@ app.factory('rms', function(){
 });
 
 app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$location', function($http, auth, $routeParams,rms,config,wx,$location){
-    var addCommonReply = function(id, type, data,args, cb){
+    var addCommonReply = function(id, type, data,args,reply_type, cb){
         //先判断有没有绑定
 //        $http.post(
 //            '/wechat/is_bind',
@@ -111,12 +111,12 @@ app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$loc
         }
 
         var temp =  data.comment.replace(/\n/g,'<br/>');
-        temp = temp.replace(/^\:[a-z0-9_]+\:$/g, "[表情]");
 
         var userInfo = {
             type: type,
             content: temp,
-            token: auth.token()
+            token: auth.token(),
+            reply_type:reply_type
         };
         //回复按钮禁用
         data.disabled = true;
@@ -146,24 +146,26 @@ app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$loc
                 cb(response.data.subscribe);
             }
 
+            var act_id = response.data.act_id;
+
             //保证内外回复数一致
             activities = rms.get("activities") || [];
             course_activities = rms.get("course_activities") || [];
             project_activities = rms.get("project_activities") || [];
             for(var i in activities){
-                if(activities[i].act_id == id){
+                if(activities[i].act_id == act_id){
                     activities[i].reply_count += 1;
                     break;
                 }
             }
             for(var i in course_activities){
-                if(course_activities[i].act_id == id){
+                if(course_activities[i].act_id == act_id){
                     course_activities[i].reply_count += 1;
                     break;
                 }
             }
             for(var i in project_activities){
-                if(project_activities[i].act_id == id){
+                if(project_activities[i].act_id == act_id){
                     project_activities[i].reply_count += 1;
                     break;
                 }
@@ -222,7 +224,7 @@ app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$loc
 
     var init = function(args){
         args.scope.replytip = "输入回复内容~";
-        args.scope.formData = {comment: ''};
+//        args.scope.formData = {comment: ''};
         var loadData = function(id,replytype,page){
             loadCommonData(id, args.type,replytype,page).then(function successCallback(response) {
                 console.log(response.data);
@@ -304,10 +306,10 @@ app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$loc
         };
 
         loadData(args.id,0,0);
-        args.scope.addReply = function(data){
+        args.scope.addReply = function(data,reply_type){
             console.log(data.comment);
-            addCommonReply(args.id, args.replyType, data,args, function(subscribe){
-                args.scope.formData = {comment: ''};
+            addCommonReply(data.act_id, args.replyType, data,args,reply_type, function(subscribe){
+//                args.scope.formData = {comment: ''};
                 if(subscribe == 0){
                     $location.path("/login_tip");
                     return;
@@ -322,6 +324,27 @@ app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$loc
             });
         };
 
+        args.scope.inputfocus = function(data){
+            data.notshow = true;
+        };
+
+        args.scope.inputblur = function(data){
+            data.notshow = false;
+        };
+
+        args.scope.clickReply = function(act_id,data) {
+            allchidren = data.all_children;
+            for(var i in allchidren){
+                if(allchidren[i].act_id != act_id ){
+                    allchidren[i].showinput = false;
+                }
+                else{
+                    allchidren[i].showinput = !allchidren[i].showinput;
+                    data.notshow = allchidren[i].showinput;
+                }
+            }
+        };
+
 //       动态详情界面点赞与动态界面的数据要同步  保证进入详情点赞后出来显示一致
         args.scope.addPraise = function(act){
             activities = rms.get("activities") || [];
diff --git a/public/javascripts/wechat/others/routes.js b/public/javascripts/wechat/others/routes.js
index 2182e16ee..e5c87d1ab 100644
--- a/public/javascripts/wechat/others/routes.js
+++ b/public/javascripts/wechat/others/routes.js
@@ -51,6 +51,7 @@ app.config(['$routeProvider',"$httpProvider", "$locationProvider",'config', func
         .when('/review_project_member', makeRoute('review_project_member.html', 'ReviewProjectMemberController'))
         .when('/project_publishnote', makeRoute('project_publishnote.html', 'ProjectPublishNoteController'))
         .when('/login_tip', makeRoute('login_tip.html', 'LoginTipController'))
+        .when('/edit_userinfo', makeRoute('edit_userinfo.html', 'EditUserInfoController'))
         .otherwise({
             redirectTo: '/activites'
         });
diff --git a/public/stylesheets/css/common.css b/public/stylesheets/css/common.css
index c275aec90..88f3e4cba 100644
--- a/public/stylesheets/css/common.css
+++ b/public/stylesheets/css/common.css
@@ -607,4 +607,8 @@ a:hover.sy_btn_blue{ background: #2788d0;}
 .is_public_checkbox{margin-left: 15px;margin-right: 10px;}
 .author_name{color: #3ca5c6 !important;}
 .ke-container-default{max-width: 100%;}
-.borderRadius {border-radius:5px;}
\ No newline at end of file
+.borderRadius {border-radius:5px;}
+
+/*状态提示图标*/
+.success-icon {background:url("/images/icons_ziliao.png") 0 -28px no-repeat; padding-left:25px;}
+.error-icon {background:url("/images/icons_ziliao.png") 0 -56px no-repeat; padding-left:25px;}
\ No newline at end of file
diff --git a/public/stylesheets/syllabus.css b/public/stylesheets/syllabus.css
index f6a8e8e6e..c92db8b76 100644
--- a/public/stylesheets/syllabus.css
+++ b/public/stylesheets/syllabus.css
@@ -566,9 +566,9 @@ a:hover.sy_btn_orange{
 a.sy_class_ltitle{display: block; font-size: 14px; width: 185px; color:#888; }
 a:hover.sy_class_ltitle{ color:#333;}
 .sy_cir_grey{
-    font-size:12px;
+    font-size:11px;
     padding: 0 10px;
-    background: #dbdbdb;
+    background: #eee;
     -webkit-border-radius: 15px;
     -moz-border-radius: 15px;
     border-radius: 15px;
diff --git a/public/stylesheets/weui/weixin.css b/public/stylesheets/weui/weixin.css
index 3d960b4ad..cf44a3814 100644
--- a/public/stylesheets/weui/weixin.css
+++ b/public/stylesheets/weui/weixin.css
@@ -257,4 +257,9 @@ a.underline {text-decoration:underline;}
 
 /*发布帖子,通知*/
 .full-width-wrap {padding:5px 15px; background-color:#fff; border-top:1px solid #ddd; border-bottom:1px solid #ddd;}
-.full-width-textarea {width:100%; height:180px; line-height:18px; max-height:180px; border:none; resize:none; font-size:13px; color:#555; overflow-y:auto;}
\ No newline at end of file
+.full-width-textarea {width:100%; height:180px; line-height:18px; max-height:180px; border:none; resize:none; font-size:13px; color:#555; overflow-y:auto;}
+
+/*资料修改*/
+.blank-row {width:100%; height:38px; line-height:38px; vertical-align:middle;}
+.upload-input-container {width:30px; height:30px; border:1px solid #ddd; position:relative;}
+.upload-input {width:30px; height:30px; position:absolute; z-index:1; opacity:0;}
\ No newline at end of file