Merge branch 'develop' of https://git.trustie.net/jacknudt/trustieforge into develop
Conflicts: db/schema.rb
This commit is contained in:
commit
48e5a0be7e
|
@ -17,7 +17,7 @@ module Mobile
|
|||
authenticate!
|
||||
cs = CoursesService.new
|
||||
courses = cs.user_courses_list(current_user)
|
||||
present :data, courses, with: Mobile::Entities::Course
|
||||
present :data, courses, with: Mobile::Entities::Course,user: current_user
|
||||
present :status, 0
|
||||
end
|
||||
|
||||
|
@ -56,7 +56,7 @@ module Mobile
|
|||
class_period: params[:class_period]
|
||||
}
|
||||
courses = cs.create_course(cs_params, current_user)
|
||||
present :data, courses, with: Mobile::Entities::Course
|
||||
present :data, courses, with: Mobile::Entities::Course,user: current_user
|
||||
present :status, 0
|
||||
end
|
||||
|
||||
|
@ -90,7 +90,7 @@ module Mobile
|
|||
end
|
||||
cs.edit_course_authorize(current_user,course)
|
||||
course = cs.edit_course(cs_params, course,current_user)
|
||||
present :data, course, with: Mobile::Entities::Course
|
||||
present :data, course, with: Mobile::Entities::Course,user: current_user
|
||||
present :status, 0
|
||||
end
|
||||
post do
|
||||
|
@ -138,7 +138,7 @@ module Mobile
|
|||
get 'search' do
|
||||
cs = CoursesService.new
|
||||
courses = cs.search_course(params,current_user.nil? ? User.find(2):current_user)
|
||||
present :data, courses, with: Mobile::Entities::Course
|
||||
present :data, courses, with: Mobile::Entities::Course,user: current_user
|
||||
present :status, 0
|
||||
end
|
||||
|
||||
|
@ -201,7 +201,7 @@ module Mobile
|
|||
cs = CoursesService.new
|
||||
course = cs.show_course(params,(current_user.nil? ? User.find(2):current_user))
|
||||
#course = Course.find(params[:id])
|
||||
present :data, course, with: Mobile::Entities::Course
|
||||
present :data, course, with: Mobile::Entities::Course,user: current_user
|
||||
{ status: 0}
|
||||
end
|
||||
end
|
||||
|
@ -391,7 +391,12 @@ module Mobile
|
|||
end
|
||||
get ':course_id/exercises' do
|
||||
authenticate!
|
||||
exercises = Course.find(params[:course_id]).exercises
|
||||
|
||||
course = Course.find(params[:course_id])
|
||||
exercises = course.exercises
|
||||
exercises.each do |v|
|
||||
v[:coursename] = course.nil? ? "未知" : course.name
|
||||
end
|
||||
present :data,exercises,with:Mobile::Entities::Exercise
|
||||
present :status,0
|
||||
end
|
||||
|
|
|
@ -11,8 +11,10 @@ module Mobile
|
|||
end
|
||||
get do
|
||||
authenticate!
|
||||
data = current_user.course_attachments
|
||||
present :data, data, with: Mobile::Entities::Attachment
|
||||
rs = ResourcesService.new
|
||||
# data = current_user.course_attachments
|
||||
data = rs.all_course_attachments current_user
|
||||
present :data, data, with: Mobile::Entities::Attachment,user: current_user
|
||||
present :status, 0
|
||||
|
||||
end
|
||||
|
@ -26,9 +28,10 @@ module Mobile
|
|||
get 'homeworks' do
|
||||
authenticate!
|
||||
|
||||
homeworks = current_user.homework_commons
|
||||
rs = ResourcesService.new
|
||||
homeworks = rs.all_homework_commons current_user
|
||||
|
||||
present :data, homeworks, with: Mobile::Entities::Homework
|
||||
present :data, homeworks, with: Mobile::Entities::Homework,user: current_user
|
||||
present :status, 0
|
||||
|
||||
end
|
||||
|
@ -40,8 +43,9 @@ module Mobile
|
|||
get 'exercies' do
|
||||
authenticate!
|
||||
|
||||
exercises = current_user.exercises
|
||||
present :data, exercises, with: Mobile::Entities::Exercise
|
||||
rs = ResourcesService.new
|
||||
exercises = rs.all_exercises current_user
|
||||
present :data, exercises, with: Mobile::Entities::Exercise,user: current_user
|
||||
present :status, 0
|
||||
end
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ module Mobile
|
|||
|
||||
cs = SyllabusesService.new
|
||||
courses = cs.user_syllabus(current_user)
|
||||
present :data, courses, with: Mobile::Entities::Syllabus
|
||||
present :data, courses, with: Mobile::Entities::Syllabus,user: current_user
|
||||
present :status, 0
|
||||
end
|
||||
|
||||
|
@ -29,9 +29,8 @@ module Mobile
|
|||
|
||||
sy = ::Syllabus.find(params[:id])
|
||||
sy.courses = sy.courses.not_deleted
|
||||
sy = ss.judge_can_setting(sy,current_user)
|
||||
|
||||
present :data, sy, with: Mobile::Entities::Syllabus
|
||||
present :data, sy, with: Mobile::Entities::Syllabus,user: current_user
|
||||
present :status, 0
|
||||
end
|
||||
|
||||
|
@ -68,7 +67,7 @@ module Mobile
|
|||
if sy.new_record?
|
||||
{status:-1, message: '创建大纲失败' }
|
||||
else
|
||||
present :data, sy, with: Mobile::Entities::Syllabus
|
||||
present :data, sy, with: Mobile::Entities::Syllabus,user: current_user
|
||||
present :status, 0
|
||||
end
|
||||
|
||||
|
|
|
@ -41,8 +41,8 @@ module Mobile
|
|||
openid: openid,
|
||||
user: user
|
||||
)
|
||||
# ws = WechatService.new
|
||||
# ws.binding_succ_notice(user.id, "您已成功绑定Trustie平台", user.login, format_time(Time.now))
|
||||
ws = WechatService.new
|
||||
ws.binding_succ_notice(user.id, "您已成功绑定Trustie平台", user.login, Time.now.strftime("%Y-%m-%d"))
|
||||
present status: 0, message: '您已成功绑定Trustie平台'
|
||||
end
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ module Mobile
|
|||
module Entities
|
||||
class Attachment < Grape::Entity
|
||||
include Redmine::I18n
|
||||
include ActionView::Helpers::NumberHelper
|
||||
def self.attachment_expose(field)
|
||||
expose field do |f,opt|
|
||||
if f.is_a?(Hash) && f.key?(field)
|
||||
|
@ -17,6 +18,10 @@ module Mobile
|
|||
case field
|
||||
when :file_dir
|
||||
"attachments/download/" << f.send(:id).to_s << '/'
|
||||
when :attafile_size
|
||||
(number_to_human_size(f.filesize)).gsub("ytes", "").to_s
|
||||
when :coursename
|
||||
f.course.nil? ? "" : f.course.name
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -29,6 +34,8 @@ module Mobile
|
|||
attachment_expose :quotes
|
||||
attachment_expose :created_on
|
||||
attachment_expose :file_dir
|
||||
attachment_expose :attafile_size
|
||||
attachment_expose :coursename #所属班级名
|
||||
end
|
||||
end
|
||||
end
|
|
@ -2,6 +2,8 @@ module Mobile
|
|||
module Entities
|
||||
class Course < Grape::Entity
|
||||
include Redmine::I18n
|
||||
include ApplicationHelper
|
||||
include ApiHelper
|
||||
def self.course_expose(field)
|
||||
expose field do |f,opt|
|
||||
c = nil
|
||||
|
@ -52,7 +54,28 @@ module Mobile
|
|||
course_expose :updated_at
|
||||
course_expose :course_student_num
|
||||
course_expose :member_count
|
||||
course_expose :can_setting
|
||||
expose :can_setting, if: lambda { |instance, options| options[:user] } do |instance, options|
|
||||
current_user = options[:user]
|
||||
can_setting = false
|
||||
|
||||
if instance[:course]
|
||||
course = instance[:course]
|
||||
else
|
||||
course = instance
|
||||
end
|
||||
|
||||
member = course.members.where("user_id=#{current_user.id} and course_id=#{course.id}")[0]
|
||||
roleName = member.roles[0].name if member
|
||||
|
||||
if roleName && (roleName == "TeachingAsistant" || roleName == "Teacher" )
|
||||
can_setting = true
|
||||
end
|
||||
|
||||
if course.tea_id == current_user.id
|
||||
can_setting = true
|
||||
end
|
||||
can_setting
|
||||
end
|
||||
expose :teacher, using: Mobile::Entities::User do |c, opt|
|
||||
if c.is_a? ::Course
|
||||
c.teacher
|
||||
|
|
|
@ -1,8 +1,32 @@
|
|||
module Mobile
|
||||
module Entities
|
||||
class Exercise < Grape::Entity
|
||||
include Redmine::I18n
|
||||
include ApplicationHelper
|
||||
include ApiHelper
|
||||
def self.exercise_expose(field)
|
||||
expose field do |f,opt|
|
||||
if f.is_a?(Hash) && f.key?(field)
|
||||
if field == :created_on
|
||||
format_time(f[field])
|
||||
else
|
||||
f[field]
|
||||
end
|
||||
elsif f.is_a?(::Exercise)
|
||||
if f.respond_to?(field)
|
||||
f.send(field)
|
||||
else
|
||||
case field
|
||||
when :coursename
|
||||
f.course.nil? ? "" : f.course.name
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
expose :exercise_name
|
||||
expose :exercise_description
|
||||
exercise_expose :coursename #所属班级名
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -37,6 +37,8 @@ module Mobile
|
|||
when :homework_anony_type
|
||||
val = f.homework_type == 1 && !f.homework_detail_manual.nil?
|
||||
val
|
||||
when :coursename
|
||||
f.course.nil? ? "" : f.course.name
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -94,6 +96,8 @@ module Mobile
|
|||
|
||||
homework_expose :homework_anony_type #是否是匿评作业
|
||||
|
||||
homework_expose :coursename #所属班级名
|
||||
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,12 +1,14 @@
|
|||
module Mobile
|
||||
module Entities
|
||||
class Syllabus < Grape::Entity
|
||||
include ApplicationHelper
|
||||
|
||||
expose :title
|
||||
expose :id
|
||||
expose :can_setting
|
||||
|
||||
expose :can_setting, if: lambda { |instance, options| options[:user] } do |instance, options|
|
||||
current_user = options[:user]
|
||||
can_setting = instance.user_id == current_user.id ? true : false
|
||||
can_setting = false if instance.id.nil?
|
||||
can_setting
|
||||
end
|
||||
expose :courses, using: Mobile::Entities::Course
|
||||
end
|
||||
end
|
||||
|
|
|
@ -633,6 +633,9 @@ class CoursesController < ApplicationController
|
|||
=end
|
||||
end
|
||||
if @course
|
||||
#发送微信消息
|
||||
ss = SyllabusesService.new
|
||||
ss.send_wechat_create_class_notice User.current,@course
|
||||
respond_to do |format|
|
||||
flash[:notice] = l(:notice_successful_create)
|
||||
format.html {redirect_to course_url(@course)}
|
||||
|
|
|
@ -69,12 +69,22 @@ class WechatsController < ActionController::Base
|
|||
end
|
||||
|
||||
on :click, with: 'DEV' do |request, key|
|
||||
uw = user_binded?(request[:FromUserName])
|
||||
unless uw
|
||||
sendBind(request)
|
||||
else
|
||||
request.reply.text "此功能正在开发中,很快就会上线,谢谢!"
|
||||
end
|
||||
end
|
||||
# When user view URL in the menu button
|
||||
on :view, with: 'http://wechat.somewhere.com/view_url' do |request, view|
|
||||
uw = user_binded?(request[:FromUserName])
|
||||
unless uw
|
||||
sendBind(request)
|
||||
else
|
||||
request.reply.text "#{request[:FromUserName]} view #{view}"
|
||||
end
|
||||
end
|
||||
|
||||
# When user sent the imsage
|
||||
on :image do |request|
|
||||
|
|
|
@ -385,6 +385,7 @@ module ApplicationHelper
|
|||
subject = truncate(subject, :length => 60)
|
||||
end
|
||||
end
|
||||
# status_id:3、已解决 5、已关闭
|
||||
if issue.status_id == 3
|
||||
s = link_to text, issue_path(issue), :class => "text_line_s", :title => title
|
||||
elsif issue.status_id == 5
|
||||
|
@ -1765,20 +1766,21 @@ module ApplicationHelper
|
|||
link_to_function(l(:button_uncheck_all), "checkAll('#{form_name}', false)")
|
||||
end
|
||||
|
||||
# 本次修改,修改为只显示关闭的所占%比
|
||||
def progress_bar(pcts, options={})
|
||||
pcts = [pcts, pcts] unless pcts.is_a?(Array)
|
||||
pcts = [pcts] unless pcts.is_a?(Array)
|
||||
pcts = pcts.collect(&:round)
|
||||
pcts[1] = pcts[1] - pcts[0]
|
||||
pcts << (100 - pcts[1] - pcts[0])
|
||||
# pcts[1] = pcts[1] + pcts[0]
|
||||
pcts << (100 - pcts[0])
|
||||
width = options[:width] || '100px;'
|
||||
legend = options[:legend] || ''
|
||||
content_tag('table',
|
||||
content_tag('tr',
|
||||
(pcts[0] > 0 ? content_tag('td', '', :style => "width: #{pcts[0]}%;", :class => 'closed') : ''.html_safe) +
|
||||
(pcts[1] > 0 ? content_tag('td', '', :style => "width: #{pcts[1]}%;", :class => 'done') : ''.html_safe) +
|
||||
(pcts[2] > 0 ? content_tag('td', '', :style => "width: #{pcts[2]}%;", :class => 'todo') : ''.html_safe)
|
||||
), :class => 'progress', :style => "width: #{width};").html_safe +
|
||||
content_tag('p', legend, :class => 'percent').html_safe
|
||||
(pcts[0] > 0 ? content_tag('td', '', :style => "width: #{pcts[0]}%;", :class => 'closed', :title => "已关闭:#{pcts[0]}%") : ''.html_safe) +
|
||||
# (pcts[1] > 0 ? content_tag('td', '', :style => "width: #{pcts[1]}%;", :class => 'done', :title => "开发中:#{pcts[1]}%") : ''.html_safe) +
|
||||
(pcts[1] > 0 ? content_tag('td', '', :style => "width: #{pcts[1]}%;", :class => 'todo', :title => "未完成:#{pcts[1]}%") : ''.html_safe), :style => "width: #{width}"
|
||||
), :class => 'progress').html_safe
|
||||
# + content_tag('p', legend, :class => 'percent').html_safe
|
||||
end
|
||||
|
||||
def checked_image(checked=true)
|
||||
|
@ -2990,6 +2992,7 @@ int main(int argc, char** argv){
|
|||
unless projects.empty?
|
||||
project_ids = '('+projects.map{|pro|pro.project_id}.join(',')+')'
|
||||
sort_projects = ForgeActivity.find_by_sql("SELECT MAX(updated_at) AS updated_at,user_id, project_id FROM forge_activities WHERE project_id IN #{project_ids} GROUP BY project_id ORDER BY MAX(updated_at) DESC")
|
||||
|
||||
return sort_projects
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
#coding=utf-8
|
||||
|
||||
class ResourcesService
|
||||
|
||||
#发送资源到课程
|
||||
def send_resource_to_course user,params
|
||||
send_id = params[:send_id]
|
||||
|
@ -50,4 +49,56 @@ class ResourcesService
|
|||
[@ori, @flag, @save_message]
|
||||
end
|
||||
|
||||
# 我的资源-课件 已发布的
|
||||
def all_course_attachments user
|
||||
|
||||
courses = user.courses.not_deleted
|
||||
|
||||
courses_ids = courses.empty? ? '(-1)' :"(" + courses.map(&:id).join(",") + ")"
|
||||
|
||||
attchments = Attachment.where("(author_id = #{user.id} and is_publish = 1 and container_id in #{courses_ids} and container_type = 'Course') or (container_type = 'Course' and is_publish = 1 and container_id in #{courses_ids})" ).order("created_on desc")
|
||||
|
||||
# attchments.each do |v|
|
||||
# course = Course.where("id=?",v.container_id).first
|
||||
# v[:coursename] = course.nil? ? "未知" : course.name
|
||||
# v[:attafile_size] = (number_to_human_size(v[:filesize])).gsub("ytes", "").to_s
|
||||
# end
|
||||
|
||||
attchments
|
||||
end
|
||||
|
||||
# 我的资源-作业 已发布的
|
||||
def all_homework_commons user
|
||||
|
||||
courses = user.courses.not_deleted
|
||||
|
||||
courses_ids = courses.empty? ? '(-1)' :"(" + courses.map(&:id).join(",") + ")"
|
||||
|
||||
homeworks = HomeworkCommon.where("course_id in #{courses_ids} and publish_time <= ?",Time.now.strftime("%Y-%m-%d")).order("created_at desc")
|
||||
|
||||
# homeworks.each do |v|
|
||||
# course = Course.where("id=?",v.course_id).first
|
||||
# v[:coursename] = course.nil? ? "未知" : course.name
|
||||
# end
|
||||
|
||||
homeworks
|
||||
end
|
||||
|
||||
# 我的资源-测验 已发布的
|
||||
def all_exercises user
|
||||
|
||||
courses = user.courses.not_deleted
|
||||
|
||||
courses_ids = courses.empty? ? '(-1)' :"(" + courses.map(&:id).join(",") + ")"
|
||||
|
||||
exercises = Exercise.where("exercise_status <> 1 and course_id in #{courses_ids}").order("created_at desc")
|
||||
|
||||
# exercises.each do |v|
|
||||
# course = Course.where("id=?",v.course_id).first
|
||||
# v[:coursename] = course.nil? ? "未知" : course.name
|
||||
# end
|
||||
|
||||
exercises
|
||||
end
|
||||
|
||||
end
|
|
@ -29,19 +29,13 @@ class SyllabusesService
|
|||
end
|
||||
#获取指定用户的课程大纲
|
||||
def user_syllabus(user)
|
||||
courses = CoursesService.new.user_courses_list(user)
|
||||
|
||||
other = Syllabus.new(title: '未命名课程',user_id: user.id)
|
||||
|
||||
courses.each do |c|
|
||||
other.courses << c[:course] unless c[:course].syllabus
|
||||
end
|
||||
|
||||
# user.syllabuses.each do |syllabus|
|
||||
# syllabus.courses = syllabus.courses.not_deleted
|
||||
# end
|
||||
# courses = CoursesService.new.user_courses_list(user)
|
||||
#
|
||||
# user.syllabuses.to_a << other
|
||||
# other = Syllabus.new(title: '未命名课程',user_id: user.id)
|
||||
#
|
||||
# courses.each do |c|
|
||||
# other.courses << c[:course] unless c[:course].syllabus
|
||||
# end
|
||||
|
||||
courses = user.courses.not_deleted
|
||||
syllabus_ids = courses.empty? ? '(-1)' : "(" + courses.map{|course| !course.syllabus_id.nil? && course.syllabus_id}.join(",") + ")"
|
||||
|
@ -51,12 +45,13 @@ class SyllabusesService
|
|||
syllabus.courses = courses.where("syllabus_id = #{syllabus.id}").select("courses.*,(SELECT MAX(updated_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS updatetime").order("time desc")
|
||||
end
|
||||
|
||||
syllabuses.to_a << other
|
||||
# syllabuses.to_a << other
|
||||
|
||||
syllabuses.to_a
|
||||
#管理权限 can_setting
|
||||
syllabuses.each do |s|
|
||||
s = judge_can_setting(s,user)
|
||||
end
|
||||
# syllabuses.each do |s|
|
||||
# s = judge_can_setting(s,user)
|
||||
# end
|
||||
|
||||
syllabuses
|
||||
end
|
||||
|
@ -72,6 +67,15 @@ class SyllabusesService
|
|||
course.course_infos << course_info
|
||||
end
|
||||
|
||||
def send_wechat_create_class_notice user,course
|
||||
count = ShieldWechatMessage.where("container_type='User' and container_id=#{user.id} and shield_type='Course' and shield_id=#{course.id}").count
|
||||
if count == 0
|
||||
ws = WechatService.new
|
||||
title = "恭喜您创建班级成功"
|
||||
ws.create_class_notice user.id, "create_course_notice", course.id,title, course.name, user.show_name, 0, "点击查看班级详情"
|
||||
end
|
||||
end
|
||||
|
||||
#创建大纲
|
||||
# params {title: '大纲名称', [{course}, {course}]}
|
||||
def create(user, title, courses = [])
|
||||
|
@ -83,6 +87,7 @@ class SyllabusesService
|
|||
if ::Course === course
|
||||
course.syllabus_id = sy.id
|
||||
course.save!
|
||||
send_wechat_create_class_notice user,course
|
||||
elsif Hash === course
|
||||
c = ::Course.new(course)
|
||||
c.tea_id = user.id
|
||||
|
@ -91,6 +96,7 @@ class SyllabusesService
|
|||
c.is_public = 0
|
||||
c.save!
|
||||
after_create_course(c, user)
|
||||
send_wechat_create_class_notice user,c
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -134,6 +140,7 @@ class SyllabusesService
|
|||
course.is_public = 0
|
||||
course.save!
|
||||
after_create_course(course, user)
|
||||
send_wechat_create_class_notice user,course
|
||||
end
|
||||
status = 0
|
||||
end
|
||||
|
|
|
@ -115,7 +115,7 @@ class WechatService
|
|||
data = {
|
||||
touser:openid,
|
||||
template_id:template_id,
|
||||
url:"#{Setting.protocol}://#{Setting.host_name}/assets/wechat/app.html#/#{type}/#{id}",
|
||||
url:"#{Setting.protocol}://#{Setting.host_name}/wechat/user_activities#/#{type}/#{id}",#/assets/wechat/app.html#/#{type}/#{id}
|
||||
topcolor:"#FF0000",
|
||||
data:{
|
||||
first: {
|
||||
|
@ -139,11 +139,43 @@ class WechatService
|
|||
data
|
||||
end
|
||||
|
||||
def three_keys_template(openid, template_id, type, id, first, key1, key2, key3, remark="")
|
||||
data = {
|
||||
touser:openid,
|
||||
template_id:template_id,
|
||||
url:"#{Setting.protocol}://#{Setting.host_name}/wechat/user_activities#/#{type}/#{id}",#/assets/wechat/app.html#/#{type}/#{id}
|
||||
topcolor:"#FF0000",
|
||||
data:{
|
||||
first: {
|
||||
value:first,
|
||||
color:"#707070"
|
||||
},
|
||||
keyword1:{
|
||||
value:key1,
|
||||
color:"#707070"
|
||||
},
|
||||
keyword2:{
|
||||
value:key2,
|
||||
color:"#707070"
|
||||
},
|
||||
keyword3:{
|
||||
value:key3,
|
||||
color:"#707070"
|
||||
},
|
||||
remark:{
|
||||
value:remark,
|
||||
color:"#707070"
|
||||
}
|
||||
}
|
||||
}
|
||||
data
|
||||
end
|
||||
|
||||
def four_keys_template(openid, template_id, type, id, first, key1, key2, key3, key4, remark="")
|
||||
data = {
|
||||
touser:openid,
|
||||
template_id:template_id,
|
||||
url:"#{Setting.protocol}://#{Setting.host_name}/assets/wechat/app.html#/#{type}/#{id}",
|
||||
url:"#{Setting.protocol}://#{Setting.host_name}/wechat/user_activities#/#{type}/#{id}", #/assets/wechat/app.html#/#{type}/#{id}
|
||||
topcolor:"#FF0000",
|
||||
data:{
|
||||
first: {
|
||||
|
@ -250,4 +282,45 @@ class WechatService
|
|||
end
|
||||
end
|
||||
|
||||
def create_class_notice(user_id, type, id, first, key1, key2, key3, remark="")
|
||||
uw = UserWechat.where(user_id: user_id).first
|
||||
unless uw.nil?
|
||||
data = {
|
||||
touser:uw.openid,
|
||||
template_id:Wechat.config.create_class_notice,
|
||||
url:"#{Setting.protocol}://#{Setting.host_name}/wechat/user_activities#/class?id="+id.to_s,
|
||||
topcolor:"#FF0000",
|
||||
data:{
|
||||
first: {
|
||||
value:first,
|
||||
color:"#707070"
|
||||
},
|
||||
keyword1:{
|
||||
value:key1,
|
||||
color:"#707070"
|
||||
},
|
||||
keyword2:{
|
||||
value:key2,
|
||||
color:"#707070"
|
||||
},
|
||||
keyword3:{
|
||||
value:key3,
|
||||
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 "[wechat_create_class_notice] ===> #{e}"
|
||||
end
|
||||
Rails.logger.info "send over. #{req}"
|
||||
end
|
||||
end
|
||||
|
||||
end
|
|
@ -223,15 +223,13 @@
|
|||
<%= image_tag(url_to_avatar(project),:width=>"40",:height => "40",:class => "borderRadius relatePImage",:id=>"project_img_"+project.id.to_s+"_"+activity.id.to_s,:alt =>"项目头像") %>
|
||||
<% end %>
|
||||
<% com_time = project.project_score.commit_time %>
|
||||
<% time=project.updated_on %>
|
||||
<% forge_time=ForgeActivity.where("project_id=?",project.id).last.updated_at if ForgeActivity.where("project_id=?",project.id).last %>
|
||||
<% time= time > forge_time ? time : forge_time %>
|
||||
<p class="mh18"><span class="captainName" title="<%=(User.find project.user_id).show_name %>"><%=(User.find project.user_id).show_name %></span><span style="vertical-align: top;">(组长)</span></p>
|
||||
<p class="mh18"><%=time_from_now !com_time.nil? && format_time(com_time) > format_time(time) ? com_time : time %> <%= project.project_score.changeset_num %>提交</p>
|
||||
<p class="mh18"><%=time_from_now !com_time.nil? && format_time(com_time) > format_time(forge_time) ? com_time : forge_time %> <%= project.project_score.changeset_num %>提交</p>
|
||||
<div class="relatePInfo" id="relatePInfo_<%=project.id %>_<%=activity.id %>">
|
||||
项目名称:<%=project.name %><br />
|
||||
创建者:<%=(User.find project.user_id).show_name %>(组长)<br />
|
||||
更新时间:<%=time_from_now !com_time.nil? && format_time(com_time) > format_time(time) ? com_time : time %>
|
||||
更新时间:<%=time_from_now !com_time.nil? && format_time(com_time) > format_time(forge_time) ? com_time : forge_time %>
|
||||
</div>
|
||||
</div>
|
||||
<% if i == 9 && projects.count > 10 %>
|
||||
|
|
|
@ -233,15 +233,13 @@
|
|||
<%= image_tag(url_to_avatar(project),:width=>"40",:height => "40",:class => "borderRadius relatePImage",:id=>"project_img_"+project.id.to_s+"_"+homework_common.id.to_s,:alt =>"项目头像") %>
|
||||
<% end %>
|
||||
<% com_time = project.project_score.commit_time %>
|
||||
<% time=project.updated_on %>
|
||||
<% forge_time=ForgeActivity.where("project_id=?",project.id).last.updated_at if ForgeActivity.where("project_id=?",project.id).last %>
|
||||
<% time= time > forge_time ? time : forge_time %>
|
||||
<p class="mh18"><span class="captainName" title="<%=(User.find project.user_id).show_name %>"><%=(User.find project.user_id).show_name %></span><span style="vertical-align: top;">(组长)</span></p>
|
||||
<p class="mh18"><%=time_from_now !com_time.nil? && format_time(com_time) > format_time(time) ? com_time : time %> <%= project.project_score.changeset_num %>提交</p>
|
||||
<p class="mh18"><%=time_from_now !com_time.nil? && format_time(com_time) > format_time(forge_time) ? com_time : forge_time %> <%= project.project_score.changeset_num %>提交</p>
|
||||
<div class="relatePInfo" id="relatePInfo_<%=project.id %>_<%=homework_common.id %>">
|
||||
项目名称:<%=project.name %><br />
|
||||
创建者:<%=(User.find project.user_id).show_name %>(组长)<br />
|
||||
更新时间:<%=time_from_now !com_time.nil? && format_time(com_time) > format_time(time) ? com_time : time %>
|
||||
更新时间:<%=time_from_now !com_time.nil? && format_time(com_time) > format_time(forge_time) ? com_time : forge_time %>
|
||||
</div>
|
||||
</div>
|
||||
<% if i == 9 && projects.count > 10 %>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!--Modified by young-->
|
||||
<% if version.issues_count > 0 %>
|
||||
<p class="f14 mb5">»<%= l(:label_versions_progress)%></p>
|
||||
<%= progress_bar([version.closed_percent, version.completed_percent], :width => '82%', :legend => ('%0.0f%' % version.completed_percent)) %>
|
||||
<%= progress_bar([version.closed_percent], :width => '648px;', :legend => ('%0.0f%' % version.completed_percent)) %>
|
||||
<p class="progress-info">
|
||||
<%= link_to(l(:label_x_issues, :count => version.issues_count),
|
||||
project_issues_path(version.project, :status_id => '*', :fixed_version_id => version, :set_filter => 1), :class =>"c_dblue",) %>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<% end %>
|
||||
</fieldset>
|
||||
|
||||
|
||||
<% if @versions.empty? %>
|
||||
<p class="nodata"><%= l(:label_no_data) %></p>
|
||||
<% else %>
|
||||
|
@ -37,7 +36,7 @@
|
|||
</p>
|
||||
<div class="roadmap_pro mb10">
|
||||
<%= render :partial => 'versions/overview', :locals => {:version => version} %>
|
||||
<%= render(:partial => "wiki/content", :locals => {:content => version.wiki_page.content}) if version.wiki_page %>
|
||||
<%#= render(:partial => "wiki/content", :locals => {:content => version.wiki_page.content}) if version.wiki_page %>
|
||||
|
||||
</div><!--roadmap_pro end-->
|
||||
<% if (issues = @issues_by_version[version]) && issues.size > 0 %>
|
||||
|
|
|
@ -26,33 +26,33 @@
|
|||
<div ng-view>
|
||||
</div>
|
||||
|
||||
<script src="https://dn-demotest.qbox.me/angular.all.min.js"></script>
|
||||
<!-- <script src="/javascripts/wechat/build/angular.all.min.js"></script> -->
|
||||
<script src="/javascripts/wechat/build/app.min.js?version=20160709-0920"></script>
|
||||
<!-- <script src="/javascripts/wechat/app.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/others/factory.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/others/filter.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/directives/alert.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/directives/form_validate.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/directives/input_auto.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/directives/loading_spinner.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/controllers/reg.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/controllers/invite_code.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/controllers/login.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/controllers/activity.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/controllers/new_class.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/controllers/edit_class.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/controllers/blog.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/controllers/course_notice.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/controllers/discussion.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/controllers/homework.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/controllers/issue.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/controllers/journals.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/controllers/class.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/controllers/class_list.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/controllers/myresource.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/controllers/send_class_list.js"></script> -->
|
||||
<!-- <script src="/javascripts/wechat/others/routes.js"></script> -->
|
||||
<!--<script src="https://dn-demotest.qbox.me/angular.all.min.js"></script>-->
|
||||
<script src="/javascripts/wechat/build/angular.all.min.js"></script>
|
||||
<!--<script src="/javascripts/wechat/build/app.min.js?version=20160709-0920"></script>-->
|
||||
<script src="/javascripts/wechat/app.js"></script>
|
||||
<script src="/javascripts/wechat/others/factory.js"></script>
|
||||
<script src="/javascripts/wechat/others/filter.js"></script>
|
||||
<script src="/javascripts/wechat/directives/alert.js"></script>
|
||||
<script src="/javascripts/wechat/directives/form_validate.js"></script>
|
||||
<script src="/javascripts/wechat/directives/input_auto.js"></script>
|
||||
<script src="/javascripts/wechat/directives/loading_spinner.js"></script>
|
||||
<script src="/javascripts/wechat/controllers/reg.js"></script>
|
||||
<script src="/javascripts/wechat/controllers/invite_code.js"></script>
|
||||
<script src="/javascripts/wechat/controllers/login.js"></script>
|
||||
<script src="/javascripts/wechat/controllers/activity.js"></script>
|
||||
<script src="/javascripts/wechat/controllers/new_class.js"></script>
|
||||
<script src="/javascripts/wechat/controllers/edit_class.js"></script>
|
||||
<script src="/javascripts/wechat/controllers/blog.js"></script>
|
||||
<script src="/javascripts/wechat/controllers/course_notice.js"></script>
|
||||
<script src="/javascripts/wechat/controllers/discussion.js"></script>
|
||||
<script src="/javascripts/wechat/controllers/homework.js"></script>
|
||||
<script src="/javascripts/wechat/controllers/issue.js"></script>
|
||||
<script src="/javascripts/wechat/controllers/journals.js"></script>
|
||||
<script src="/javascripts/wechat/controllers/class.js"></script>
|
||||
<script src="/javascripts/wechat/controllers/class_list.js"></script>
|
||||
<script src="/javascripts/wechat/controllers/myresource.js"></script>
|
||||
<script src="/javascripts/wechat/controllers/send_class_list.js"></script>
|
||||
<script src="/javascripts/wechat/others/routes.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
|
@ -8,24 +8,38 @@ default: &default
|
|||
#secret: "743e038392f1d89540e95f8f7645849a"
|
||||
|
||||
#production
|
||||
appid: "wx8e1ab05163a28e37"
|
||||
secret: "beb4d3bc4b32b3557811680835357841"
|
||||
# appid: "wx8e1ab05163a28e37"
|
||||
# secret: "beb4d3bc4b32b3557811680835357841"
|
||||
|
||||
#test
|
||||
#appid: "wxc09454f171153c2d"
|
||||
#secret: "dff5b606e34dcafe24163ec82c2715f8"
|
||||
appid: "wxc09454f171153c2d"
|
||||
secret: "dff5b606e34dcafe24163ec82c2715f8"
|
||||
|
||||
token: "123456"
|
||||
access_token: "1234567"
|
||||
encrypt_mode: false # if true must fill encoding_aes_key
|
||||
encoding_aes_key: "QGfP13YP4BbQGkkrlYuxpn4ZIDXpBJww4fxl8CObvNw"
|
||||
|
||||
#production
|
||||
# encoding_aes_key: "QGfP13YP4BbQGkkrlYuxpn4ZIDXpBJww4fxl8CObvNw"
|
||||
# jsapi_ticket: "C:/Users/[user_name]/wechat_jsapi_ticket"
|
||||
#
|
||||
# #template
|
||||
# binding_succ_notice: "jjpDrgFErnmkrE9tf2M3o0t31ZrJ7mr0YtuE_wyLaMc"
|
||||
# journal_notice: "uC1zAw4F2q6HTA3Pcj8VUO6wKKKiYFwnPJB4iXxpdoM"
|
||||
# homework_message_notice: "tCf7teCVqc2vl2LZ_hppIdWmpg8yLcrI8XifxYePjps"
|
||||
# class_notice: "MQ_mFupbXP-9jWbeHT3C5xqNBvPo8EIlNv4ULakSpJA"
|
||||
# create_class_notice: "2GtJJGzzNlNy2i0UrsjEDlvfSVIUXQfSo47stpcQAVw"
|
||||
|
||||
#test
|
||||
encoding_aes_key: "QyocNOkRmrT5HzBpCG54EVPUQjk86nJapXNVDQm6Yy6"
|
||||
jsapi_ticket: "C:/Users/[user_name]/wechat_jsapi_ticket"
|
||||
|
||||
#template
|
||||
binding_succ_notice: "jjpDrgFErnmkrE9tf2M3o0t31ZrJ7mr0YtuE_wyLaMc"
|
||||
journal_notice: "uC1zAw4F2q6HTA3Pcj8VUO6wKKKiYFwnPJB4iXxpdoM"
|
||||
homework_message_notice: "tCf7teCVqc2vl2LZ_hppIdWmpg8yLcrI8XifxYePjps"
|
||||
class_notice: "MQ_mFupbXP-9jWbeHT3C5xqNBvPo8EIlNv4ULakSpJA"
|
||||
binding_succ_notice: "n4KLwcWNrIMYkKxWL2hUwzunm5RTT54EbWem2MIUapU"
|
||||
journal_notice: "XpHHYkqSGkwuF9vHthRdmPQLvCFRQ4_NbRBP12T7ciE"
|
||||
homework_message_notice: "Kom0TsYYKsNKCS6luweYVRo9z-mH0wRPr24b1clGCPQ"
|
||||
class_notice: "8LVu33l6bP-56SDomVgHn-yJc57YpCwwJ81rAJgRONk"
|
||||
create_class_notice: "9CDIvHIKiGwPEQWRw_-wieec1o50tMXQPPZIfECKu0I"
|
||||
|
||||
production:
|
||||
<<: *default
|
||||
|
|
|
@ -436,7 +436,7 @@
|
|||
<div class="post-wrapper">
|
||||
<div class="post-main">
|
||||
<div class="post-avatar fl mr10"><img ng-src="{{replaceUrl(act.author.img_url)}}" width="30" height="30" class="border-radius img-circle" /></div>
|
||||
<div class="post-title hidden mb5"><span class="c-grey3 f13 fb mr10">{{act.author.realname}}</span>创建了<span class="c-grey3 f13 fb ml10">{{act.course_project_name}} | 课程</span></div>
|
||||
<div class="post-title hidden mb5"><span class="c-grey3 f13 fb mr10">{{act.author.realname}}</span>创建了<span class="c-grey3 f13 fb ml10">{{act.course_project_name}} | 班级</span></div>
|
||||
<div class="post-title hidden"><span class="mr10">{{act.latest_update}}</span></div>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<div class="post-dynamic-title c-grey3 mt12 fb">{{blog.title}}<img ng-if="blog.locked" src="/images/locked.png" style="display:inline-block;" /></div>
|
||||
<div class="c-grey4 f13 mt10"><span class="mr10">博客</span><span>{{blog.created_at}}</span></div>
|
||||
|
||||
<div class="f13 c-grey3 mt10 text-control" ng-bind-html="blog.content|safeHtml"></div>
|
||||
<div class="f13 c-grey3 mt10 text-control post-all-content" ng-bind-html="blog.content|safeHtml"></div>
|
||||
<div class="cl"></div>
|
||||
<div class="fr f13">
|
||||
<div ng-if="!blog.praise_count" ng-click="addPraise(blog);"><img src="/images/wechat/w_praise.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>赞</span></div>
|
||||
|
@ -29,7 +29,7 @@
|
|||
</div>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
<div id="all_blog_reply">
|
||||
<div class="mb50" id="all_blog_reply">
|
||||
|
||||
<div ng-if="blog.blog_comment_children == ''" style="border-top:1px solid #ccc;"></div>
|
||||
<div class="post-reply-wrap" ng-repeat="journal in blog.blog_comment_children">
|
||||
|
@ -49,10 +49,10 @@
|
|||
|
||||
</div>
|
||||
|
||||
<div ng-if="!blog.locked" id="post_input_1" class="post-input-wrap2">
|
||||
<div ng-if="!blog.locked" id="post_input_1" class="post-input-wrap post-box-shadow">
|
||||
<div class="post-reply-row">
|
||||
<div class="post-input-container">
|
||||
<textarea class="copy-input"></textarea>
|
||||
<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>
|
||||
|
|
|
@ -23,33 +23,35 @@
|
|||
</div>
|
||||
|
||||
<div ng-class="{'undis': !showResources}">
|
||||
<div ng-repeat="r in resources|filter:searchText" ng-class="['class-detail-row', 'f13', 'c-grey3', {'border-top': $first}]"><span class="fl ml10">{{r.filename}}</span><a ng-show="isTeacher" herf="javascript:void(0);" class="fr mr10 link-blue2" ng-click="sendFile(r)">发送</a></div>
|
||||
<p ng-show="resources_tag == true && resources.length<=0" class="class-test-tip">暂无课件,<br />
|
||||
请登录Trustie网站,在PC浏览器中上传课件。</p>
|
||||
<div ng-repeat="r in resources|filter:searchText" ng-class="['class-detail-row', 'f13', 'c-grey3', {'border-top': $first}]"><img src="/images/wechat/courseware.png" width="15" class="ml10 fl" /><span class="fl ml10 resource-width">{{r.filename}}</span><a ng-show="isTeacher" herf="javascript:void(0);" class="fr mr10 link-blue2" ng-click="sendFile(r)">发送</a><div class="cl"></div></div>
|
||||
<p ng-show="resources_tag == true && resources.length<=0" class="class-test-tip">暂无课件,<br />
|
||||
请登录Trustie网站,在PC浏览器中上传课件。</p>
|
||||
</div>
|
||||
<div ng-class="{'undis': !showClassMate}">
|
||||
<div class="member-banner f13 c-grey3">授课老师</div>
|
||||
|
||||
<div class="class-detail-row f13 c-grey3" ng-repeat="teacher in teachers|filter:searchText">
|
||||
<img ng-src="/images/wechat/{{teacher.gender==0 ? 'male' : 'female'}}.jpg" width="30" class="fl ml10 img-circle mt4" /><span class="fl ml10">{{teacher.name}}</span><span class="fr mr10 c-grey2">{{teacher.role_name|identify}}</span><img ng-src="/images/wechat/{{teacher.gender==0 ? 'male' : 'female'}}.png" width="15" class="fl ml10 mt10" />
|
||||
<div class="class-member-row f13 c-grey3" ng-repeat="teacher in teachers|filter:searchText">
|
||||
<img ng-src="/images/wechat/{{teacher.gender==0 ? 'male' : 'female'}}.jpg" width="30" class="fl ml10 img-circle" /><span class="fl ml10 mt5">{{teacher.name}}</span><span class="fr mr10 c-grey2">{{teacher.role_name|identify}}</span><img ng-src="/images/wechat/{{teacher.gender==0 ? 'male' : 'female'}}.png" width="15" class="fl ml10 mt5" />
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
<div class="member-banner f13 mt10 c-grey3">我的同学</div>
|
||||
<div class="class-detail-row f13 c-grey3" ng-repeat="student in students|filter:searchText">
|
||||
<img ng-src="/images/wechat/{{student.gender==0 ? 'male' : 'female'}}.jpg" width="30" class="fl ml10 img-circle mt4" /><span class="fl ml10">{{student.name}}</span><img ng-src="/images/wechat/{{student.gender==0 ? 'male' : 'female'}}.png" width="15" class="fl ml10 mt10" />
|
||||
<div class="class-member-row f13 c-grey3" ng-repeat="student in students|filter:searchText">
|
||||
<img ng-src="/images/wechat/{{student.gender==0 ? 'male' : 'female'}}.jpg" width="30" class="fl ml10 img-circle" /><span class="fl ml10 mt5">{{student.name}}</span><img ng-src="/images/wechat/{{student.gender==0 ? 'male' : 'female'}}.png" width="15" class="fl ml10 mt5" />
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-class="{'undis': !showHomework}">
|
||||
<div ng-repeat="r in homeworks|filter:searchText" ng-class="['class-detail-row', 'f13', 'c-grey3', {'border-top': $first}]"><span class="fl ml10">{{r.homework_name}}</span></div>
|
||||
<p ng-show="homeworks_tag == true && homeworks.length<=0" class="class-test-tip">暂无作业,<br />
|
||||
请登录Trustie网站,在PC浏览器中上传作业。</p>
|
||||
<div ng-repeat="r in homeworks|filter:searchText" ng-class="['class-detail-row', 'f13', 'c-grey3', {'border-top': $first}]"><img src="/images/wechat/homework.png" width="15" class="ml10 fl" /><span class="fl ml10 resource-width">{{r.homework_name}}</span><a ng-show="isTeacher" herf="javascript:void(0);" class="fr mr10 link-blue2" ng-click="sendFile(r)">发送</a><div class="cl"></div></div>
|
||||
<p ng-show="homeworks_tag == true && homeworks.length<=0" class="class-test-tip">暂无作业,<br />
|
||||
请登录Trustie网站,在PC浏览器中上传作业。</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div ng-class="{'undis': !showTestcase}">
|
||||
<div ng-repeat="r in exercises|filter:searchText" ng-class="['class-detail-row', 'f13', 'c-grey3', {'border-top': $first}]"><span class="fl ml10">{{r.exercise_name}}</span></div>
|
||||
<p ng-show="exercises_tag == true && exercises.length<=0" class="class-test-tip">暂无小测验,<br />
|
||||
请登录Trustie网站,在PC浏览器中上传小测验。</p>
|
||||
<div ng-repeat="r in exercises|filter:searchText" ng-class="['class-detail-row', 'f13', 'c-grey3', {'border-top': $first}]"><img src="/images/wechat/test.png" width="15" class="ml10 fl" /><span class="fl ml10 resource-width">{{r.exercise_name}}</span><a ng-show="isTeacher" herf="javascript:void(0);" class="fr mr10 link-blue2" ng-click="sendFile(r)">发送</a><div class="cl"></div></div>
|
||||
<p ng-show="exercises_tag == true && exercises.length<=0" class="class-test-tip">暂无小测验,<br />
|
||||
请登录Trustie网站,在PC浏览器中上传小测验。</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
<div class="post-container" style="padding-bottom: 50px;">
|
||||
<div loading-spinner></div>
|
||||
<div class="blue-title">课程列表</div>
|
||||
|
||||
<div ng-repeat="syllabus in syllabuses">
|
||||
<div ng-click="syllabus.show_plus = !syllabus.show_plus" class="course-list-row f13 c-grey3 mt10"><img src="/images/wechat/plus.png" ng-show="syllabus.show_plus" width="15" class="fl ml10 mt11 spread-btn" /><img src="/images/wechat/minus.png" ng-show="!syllabus.show_plus" width="15" class="fl ml10 mt11 retract-btn " /><span class="fl ml10">{{syllabus.title}}</span><img src="/images/wechat/setting.png" ng-show = "syllabus.can_setting" width="15" class="fr mr10 mt10" ng-click="onSetting(syllabus)" /></div>
|
||||
<div>
|
||||
<div class="course-diff-row"><span class="c-blue f13 ml10">我创建的课程</span></div>
|
||||
<div ng-show = "syllabus.can_setting" ng-repeat="syllabus in syllabuses">
|
||||
<div ng-click="syllabus.show_plus = !syllabus.show_plus" class="course-list-row f13 c-grey3"><img src="/images/wechat/plus.png" ng-show="syllabus.show_plus" width="15" class="fl ml10 mt11 spread-btn" /><img src="/images/wechat/minus.png" ng-show="!syllabus.show_plus" width="15" class="fl ml10 mt11 retract-btn " /><span class="fl ml10">{{syllabus.title}}</span><img src="/images/wechat/setting.png" ng-show = "syllabus.can_setting" width="15" class="fr mr10 mt10" ng-click="onSetting(syllabus)" /></div>
|
||||
<ul ng-show="!syllabus.show_plus" class="class-list f13 c-grey3">
|
||||
<li ng-show="course.id" ng-click="goClass(course.id)" ng-repeat="course in syllabus.courses" ng-class="{'border-bottom-none': $last}">
|
||||
<img src="/images/wechat/dot.png" width="15px" class="class-list-dot" />
|
||||
|
@ -13,7 +14,21 @@
|
|||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div>
|
||||
<div class="course-diff-row border-top mt10"><span class="c-blue f13 ml10">我参与的课程</span></div>
|
||||
<div ng-show = "!syllabus.can_setting" ng-repeat="syllabus in syllabuses">
|
||||
<div ng-click="syllabus.show_plus = !syllabus.show_plus" class="course-list-row f13 c-grey3"><img src="/images/wechat/plus.png" ng-show="syllabus.show_plus" width="15" class="fl ml10 mt11 spread-btn" /><img src="/images/wechat/minus.png" ng-show="!syllabus.show_plus" width="15" class="fl ml10 mt11 retract-btn " /><span class="fl ml10">{{syllabus.title}}</span><img src="/images/wechat/setting.png" ng-show = "syllabus.can_setting" width="15" class="fr mr10 mt10" ng-click="onSetting(syllabus)" /></div>
|
||||
<ul ng-show="!syllabus.show_plus" class="class-list f13 c-grey3">
|
||||
<li ng-show="course.id" ng-click="goClass(course.id)" ng-repeat="course in syllabus.courses" ng-class="{'border-bottom-none': $last}">
|
||||
<img src="/images/wechat/dot.png" width="15px" class="class-list-dot" />
|
||||
<span class="fl ml10 class-list-name hidden">{{course.name}}</span>
|
||||
<span class="fr c-grey4">></span>
|
||||
<span class="students-amount f12 fr mt10">{{course.member_count}}人</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="bottom-tab-wrap mt10">
|
||||
<a ng-click="newClass()" href="javascript:void(0);" class="weixin-tab link-blue2 border-top">新建课程</a>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
</div>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
<div id="all_course_message_reply">
|
||||
<div class="mb50" id="all_course_message_reply">
|
||||
<div ng-if="discussion.message_children == ''" style="border-top:1px solid #ccc;"></div>
|
||||
<div class="post-reply-wrap" ng-repeat="journal in discussion.message_children">
|
||||
<div class="post-reply-row">
|
||||
|
@ -46,10 +46,10 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="!discussion.locked" id="post_input_1" class="post-input-wrap2">
|
||||
<div ng-if="!discussion.locked" id="post_input_1" class="post-input-wrap post-box-shadow">
|
||||
<div class="post-reply-row">
|
||||
<div class="post-input-container">
|
||||
<textarea class="copy-input"></textarea>
|
||||
<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>
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
</div>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
<div id="all_news_reply">
|
||||
<div class="mb50" id="all_news_reply">
|
||||
<div ng-if="news.comments == ''" style="border-top:1px solid #ccc;"></div>
|
||||
<div class="post-reply-wrap" ng-repeat="comments in news.comments">
|
||||
<div class="post-reply-row">
|
||||
|
@ -45,10 +45,10 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="post_input_1" class="post-input-wrap2">
|
||||
<div id="post_input_1" class="post-input-wrap post-box-shadow">
|
||||
<div class="post-reply-row">
|
||||
<div class="post-input-container">
|
||||
<textarea class="copy-input"></textarea>
|
||||
<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>
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
</div>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
<div id="all_homework_reply">
|
||||
<div class="mb50" id="all_homework_reply">
|
||||
|
||||
<div ng-if="homework.journals_for_messages == ''" style="border-top:1px solid #ccc;"></div>
|
||||
<div class="post-reply-wrap" ng-repeat="journal in homework.journals_for_messages">
|
||||
|
@ -51,10 +51,10 @@
|
|||
|
||||
</div>
|
||||
|
||||
<div id="post_input_1" class="post-input-wrap2">
|
||||
<div id="post_input_1" class="post-input-wrap post-box-shadow">
|
||||
<div class="post-reply-row">
|
||||
<div class="post-input-container">
|
||||
<textarea class="copy-input"></textarea>
|
||||
<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>
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
<div class="share-code-wrap">
|
||||
<!--<a ng-click="share()" href="javascript:void(0);" class="share-code-btn">分享邀请码</a>-->
|
||||
<p/>
|
||||
<div class="share-code-instruction"> 1.将此页面分享给好友,邀请好友加入班级<br />
|
||||
2.通过微信扫一扫加入班级<br />
|
||||
3.输入邀请码加入班级</div>
|
||||
<div class="share-code-instruction"> 1.点击右上角"发送给朋友",邀请同学加入班级<br />
|
||||
2.长按二维码,通过“识别图中二维码”功能加入班级<br />
|
||||
3.通过“加入班级”菜单输入邀请码加入班级(长按邀请码可以复制哦~)</div>
|
||||
</div>
|
||||
</div>
|
|
@ -33,7 +33,7 @@
|
|||
</div>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
<div id="all_issue_reply">
|
||||
<div class="mb50" id="all_issue_reply">
|
||||
<div ng-if="issue.issue_journals == ''" style="border-top:1px solid #ccc;"></div>
|
||||
<div class="post-reply-wrap" ng-repeat="journal in issue.issue_journals">
|
||||
<div class="post-reply-row">
|
||||
|
@ -51,10 +51,10 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="post_input_1" class="post-input-wrap2">
|
||||
<div id="post_input_1" class="post-input-wrap post-box-shadow">
|
||||
<div class="post-reply-row">
|
||||
<div class="post-input-container">
|
||||
<textarea class="copy-input"></textarea>
|
||||
<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>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<div class="cl"></div>
|
||||
<div class="c-grey4 f13 mt10"><span class="mr10">留言</span><span>{{message.created_on}}</span></div>
|
||||
|
||||
<div class="f13 c-grey3 mt10 text-control" ng-bind-html="message.notes|safeHtml"></div>
|
||||
<div class="f13 c-grey3 mt10 text-control post-all-content" ng-bind-html="message.notes|safeHtml"></div>
|
||||
<div class="cl"></div>
|
||||
<div class="fr f13">
|
||||
<div ng-if="!message.praise_count" ng-click="addPraise(message);"><img src="/images/wechat/w_praise.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>赞</span></div>
|
||||
|
@ -27,7 +27,7 @@
|
|||
</div>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
<div id="all_message_reply">
|
||||
<div class="mb50" id="all_message_reply">
|
||||
|
||||
<div ng-if="message.child_reply == ''" style="border-top:1px solid #ccc;"></div>
|
||||
<div class="post-reply-wrap" ng-repeat="journal in message.child_reply">
|
||||
|
@ -47,10 +47,10 @@
|
|||
|
||||
</div>
|
||||
|
||||
<div id="post_input_1" class="post-input-wrap2">
|
||||
<div id="post_input_1" class="post-input-wrap post-box-shadow">
|
||||
<div class="post-reply-row">
|
||||
<div class="post-input-container">
|
||||
<textarea class="copy-input"></textarea>
|
||||
<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>
|
||||
|
|
|
@ -4,13 +4,13 @@
|
|||
<form name="loginFrm" novalidate>
|
||||
<div class="blue-title">绑定<span class="f13 blue-title-sub" ng-click="goReg()">注册</span></div>
|
||||
<div class="input-box-wrap login-wrap mt30">
|
||||
<input name="login" ng-model="user.login" required class="input-box f12" placeholder="请输入电子邮箱地址或登录名" />
|
||||
<input name="login" ng-model="user.login" required class="input-box" placeholder="请输入电子邮箱地址或登录名" />
|
||||
<div ng-show="loginFrm.$submitted || loginFrm.login.$touched">
|
||||
<span ng-show="loginFrm.login.$error.required" class="c-red fl f12">电子邮箱地址或登录名不能为空</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-box-wrap login-wrap mt10 mb20">
|
||||
<input class="input-box f12" placeholder="请输入密码" name="password" type="password" ng-model="user.password" required />
|
||||
<input class="input-box" placeholder="请输入密码" name="password" type="password" ng-model="user.password" required />
|
||||
<div ng-show="loginFrm.$submitted || loginFrm.password.$touched">
|
||||
<span ng-show="loginFrm.password.$error.required" class="c-red fl f12">密码不能为空</span>
|
||||
</div>
|
||||
|
|
|
@ -11,19 +11,26 @@
|
|||
</div>
|
||||
|
||||
<div ng-class="{'undis': currentTab!=1}">
|
||||
<div ng-repeat="r in resources|filter:{filename:searchText}" ng-class="['class-detail-row', 'f13', 'c-grey3', {'border-top': $first}]"><span class="fl ml10">{{r.filename}}</span><a ng-click="sendFile(r)" class="fr mr10 link-blue2">发送</a></div>
|
||||
<p ng-show="resources && resources.length<=0" class="class-test-tip">暂无课件,<br />
|
||||
请登录Trustie网站,在PC浏览器中上传课件。</p>
|
||||
<div ng-repeat="r in resources|filter:{filename:searchText}" ng-class="['class-detail-row', 'f13', 'c-grey3', {'border-top': $first}]">
|
||||
<img src="/images/wechat/courseware.png" width="15" class="ml10 fl" /> <span class="fl ml10 resource-width">{{r.filename}}</span><a ng-click="sendFile(r)" class="fr mr10 link-blue2">发送</a><div class="cl"></div>
|
||||
<span class="f12 mt5 ml35 c-grey4">课件来源:{{r.coursename}}</span><span class="f12 ml10 mt5 c-grey4">大小:{{r.attafile_size}}</span>
|
||||
</div>
|
||||
<p ng-show="resources && resources.length<=0" class="class-test-tip">暂无课件,<br />
|
||||
请登录Trustie网站,在PC浏览器中上传课件。</p>
|
||||
</div>
|
||||
<div ng-class="{'undis': currentTab!=2}">
|
||||
<div ng-repeat="r in homeworks|filter:{homework_name: searchText}" ng-class="['class-detail-row', 'f13', 'c-grey3', {'border-top': $first}]"><span class="fl ml10">{{r.homework_name}}</span></div>
|
||||
<p ng-show="homeworks && homeworks.length<=0" class="class-test-tip">暂无作业,<br />
|
||||
请登录Trustie网站,在PC浏览器中创建作业。</p>
|
||||
<div ng-repeat="r in homeworks|filter:{homework_name: searchText}" ng-class="['class-detail-row', 'f13', 'c-grey3', {'border-top': $first}]"><img src="/images/wechat/homework.png" width="15" class="ml10 fl" /><span class="fl ml10 resource-width">{{r.homework_name}}</span><a ng-click="sendFile(r)" class="fr mr10 link-blue2 undis">发送</a><div class="cl"></div>
|
||||
<span class="f12 mt5 ml35 c-grey4">作业来源:{{r.coursename}}</span>
|
||||
</div>
|
||||
<p ng-show="homeworks && homeworks.length<=0" class="class-test-tip">暂无作业,<br />
|
||||
请登录Trustie网站,在PC浏览器中创建作业。</p>
|
||||
</div>
|
||||
<div ng-class="{'undis': currentTab!=3}">
|
||||
<div ng-repeat="r in exercise|filter:{exercise_name: searchText}" ng-class="['class-detail-row', 'f13', 'c-grey3', {'border-top': $first}]"><span class="fl ml10">{{r.exercise_name}}</span></div>
|
||||
<p ng-show="exercise && exercise.length<=0" class="class-test-tip">暂无测验,<br />
|
||||
请登录Trustie网站,在PC浏览器中创建测验。</p>
|
||||
<div ng-repeat="r in exercise|filter:{exercise_name: searchText}" ng-class="['class-detail-row', 'f13', 'c-grey3', {'border-top': $first}]"><img src="/images/wechat/test.png" width="15" class="ml10 fl" /><span class="fl ml10 resource-width">{{r.exercise_name}}</span><a ng-click="sendFile(r)" class="fr mr10 link-blue2 undis">发送</a><div class="cl"></div>
|
||||
<span class="f12 mt5 ml35 c-grey4">题目来源:{{r.coursename}}</span>
|
||||
</div>
|
||||
<p ng-show="exercise && exercise.length<=0" class="class-test-tip">暂无测验,<br />
|
||||
请登录Trustie网站,在PC浏览器中创建测验。</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
<div class="cl"></div>
|
||||
</div>
|
||||
|
||||
<div id="all_course_message_reply">
|
||||
<div class="mb50" id="all_course_message_reply">
|
||||
<div ng-if="discussion.message_children == ''" style="border-top:1px solid #ccc;"></div>
|
||||
<div class="post-reply-wrap" ng-repeat="journal in discussion.message_children">
|
||||
<div class="post-reply-row">
|
||||
|
@ -46,10 +46,10 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-if="!discussion.locked" id="post_input_1" class="post-input-wrap2">
|
||||
<div ng-if="!discussion.locked" id="post_input_1" class="post-input-wrap post-box-shadow">
|
||||
<div class="post-reply-row">
|
||||
<div class="post-input-container">
|
||||
<textarea class="copy-input"></textarea>
|
||||
<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>
|
||||
|
|
|
@ -6,14 +6,14 @@
|
|||
<div class="blue-title">注册<span class="f13 blue-title-sub" ng-click="goLogin()">登录</span></div>
|
||||
<img src="/images/wechat/male.jpg" width="60" class="img-circle mt15 block-center"/>
|
||||
<div class="input-box-wrap login-wrap mt10 mb20">
|
||||
<input class="input-box f12" type="email" ng-model="user.email" name="email" required placeholder="请输入电子邮箱地址"/>
|
||||
<input class="input-box" type="email" ng-model="user.email" name="email" required placeholder="请输入电子邮箱地址"/>
|
||||
<div ng-show="regFrm.$submitted || regFrm.email.$touched">
|
||||
<span class="f12 c-red fl" ng-show="regFrm.email.$error.required">电子邮箱地址不能为空</span>
|
||||
<span class="f12 c-red fl" ng-show="regFrm.email.$error.email">电子邮箱地址不合法</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-box-wrap login-wrap mb20">
|
||||
<input class="input-box f12" type="password" ng-model="user.password" name="password" ng-maxlength="20" ng-minlength="8" required placeholder="请输入密码"/>
|
||||
<input class="input-box" type="password" ng-model="user.password" name="password" ng-maxlength="20" ng-minlength="8" required placeholder="请输入密码"/>
|
||||
<div ng-show="regFrm.$submitted || regFrm.password.$touched">
|
||||
<span class="f12 c-red fl" ng-show="regFrm.password.$error.required">密码不能为空</span>
|
||||
<span class="f12 c-red fl" ng-show="regFrm.password.$error.minlength">密码长度为8-20位</span>
|
||||
|
@ -21,13 +21,13 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="input-box-wrap login-wrap mb20">
|
||||
<input class="input-box f12" type="password" ng-model="user.password_confirm" name="password_confirm" required placeholder="请再次输入密码" pwdconfirm/>
|
||||
<input class="input-box" type="password" ng-model="user.password_confirm" name="password_confirm" required placeholder="请再次输入密码" pwdconfirm/>
|
||||
<div ng-show="regFrm.$submitted || regFrm.password_confirm.$touched">
|
||||
<span class="f12 c-red fl" ng-show="regFrm.password_confirm.$error.pwdconfirm">两次密码不一致</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-box-wrap login-wrap mb20">
|
||||
<input class="input-box f12" required ng-model="user.username" name="username" placeholder="输入用户登录名"/>
|
||||
<input class="input-box" required ng-model="user.username" name="username" placeholder="输入用户登录名"/>
|
||||
<div ng-show="regFrm.$submitted || regFrm.username.$touched">
|
||||
<span class="f12 c-red fl" ng-show="regFrm.username.$error.required">用户名不能为空</span>
|
||||
</div>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<div class="post-container">
|
||||
<div loading-spinner></div>
|
||||
|
||||
<div class="blue-title">发送课程列表</div>
|
||||
<div class="blue-title">请选择要发送的班级</div>
|
||||
|
||||
|
||||
<div ng-show="syllabus.can_setting" ng-repeat="syllabus in syllabuses">
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
Binary file not shown.
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 29 KiB |
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
|
@ -19,6 +19,6 @@ app.controller("RegController",["$scope","$http","$location","alertService","$lo
|
|||
app.controller("SendClassListController",["$scope","$http","$routeParams","config","auth","alertService","rms",function(e,s,o,a,t,r,c){var n=e,l=o.id;n.alertService=r.create(),n.syllabuses=[];var i=function(){s.get(a.apiUrl+"syllabuses?token="+t.token()).then(function(e){console.log(e.data),n.syllabuses=e.data.data})};i(),n.selectCourse=function(e){"boolean"!=typeof e.checked&&(e.checked=!1),e.checked=!e.checked},n.sendToCourses=function(){var e=[];for(var o in n.syllabuses)for(var r in n.syllabuses[o].courses)n.syllabuses[o].courses[r].checked&&e.push(n.syllabuses[o].courses[r].id);return e.length<=0?void n.alertService.showMessage("提醒","请先选择班级"):void s.post(a.apiUrl+"resources/send",{token:t.token(),course_ids:e,send_id:l}).then(function(e){console.log(e.data),0==e.data.status?n.alertService.showMessage("提示","发送成功",function(){window.history.back()}):n.alertService.showMessage("发送出错",e.data.message)})}}]);
|
||||
app.directive("myAlert",["config",function(t){return{templateUrl:t.rootPath+"templates/alert.html",scope:{title:"=",message:"=",visible:"=",cb:"="},link:function(t){t.dismiss=function(){t.visible=!1,"function"==typeof t.cb&&t.cb()}}}}]),app.directive("myAlert2",["config",function(t){return{templateUrl:t.rootPath+"templates/alert2.html",scope:{title:"=",message:"=",visible:"=",cb:"="},link:function(t){t.dismiss=function(){t.visible=!1},t.confirm=function(){t.visible=!1,"function"==typeof t.cb&&t.cb()}}}}]);
|
||||
app.directive("pwdconfirm",function(){return{require:"ngModel",link:function(r,n,i,e){e.$validators.pwdconfirm=function(n,i){return r.user&&r.user.password==i}}}});
|
||||
app.directive("inputAuto",function(){return{restrict:"A",scope:{},link:function(n,t){var e=t.parent().children().eq(0),i=t.parent().next();t.on("input",function(){console.log(i),e.html(t[0].value);var n=e[0].scrollHeight;t.css("height",n+"px")}),i.on("click",function(){t.css("height","28px")})}}});
|
||||
app.directive("inputAuto",function(){return{restrict:"A",scope:{},link:function(n,t){var e=t.parent().children().children().eq(0),i=t.next();t.on("input",function(){console.log(i),e.html(t[0].value);var n=e[0].scrollHeight;t.css("height",n+"px")}),i.on("click",function(){t.css("height","28px")})}}});
|
||||
app.directive("loadingSpinner",["$http","config",function(t,e){return{templateUrl:e.rootPath+"templates/loading.html"}}]);
|
||||
app.config(["$routeProvider","$httpProvider","$locationProvider","config",function(e,o,t,l){var r=l.rootPath,s={delay:["auth",function(e){return e.get_bind()}]},n=function(e,o){return{templateUrl:r+e,controller:o,resolve:s}};e.when("/login",{templateUrl:r+"login.html",controller:"LoginController"}).when("/reg",{templateUrl:r+"reg.html",controller:"RegController"}).when("/activites",n("activities.html","ActivityController")).when("/issues/:id",n("issue_detail.html","IssueController")).when("/project_discussion/:id",n("project_discussion.html","DiscussionController")).when("/homework/:id",n("homework_detail.html","HomeworkController")).when("/course_notice/:id",n("course_notice.html","CourseNoticeController")).when("/course_discussion/:id",n("course_discussion.html","DiscussionController")).when("/journal_for_message/:id",n("jour_message_detail.html","JournalsController")).when("/blog_comment/:id",n("blog_detail.html","BlogController")).when("/class",n("class.html","ClassController")).when("/new_class",n("new_class.html","NewClassController")).when("/edit_class",n("edit_class.html","EditClassController")).when("/class_list",n("class_list.html","ClassListController")).when("/myresource",n("myresource.html","MyResourceController")).when("/invite_code",n("invite_code.html","InviteCodeController")).when("/send_class_list",n("send_class_list.html","SendClassListController")).otherwise({redirectTo:"/activites"}),o.interceptors.push(["$q","$rootScope",function(e,o){return void 0==o.activeCalls&&(o.activeCalls=0),{request:function(e){return o.activeCalls+=1,e},requestError:function(e){return o.activeCalls-=1,e},response:function(e){return o.activeCalls-=1,e},responseError:function(e){return o.activeCalls-=1,e}}}])}]);
|
|
@ -137,14 +137,61 @@ app.controller('ActivityController',
|
|||
//跳到详情页
|
||||
$scope.goDetail = function(type, act_id,id){
|
||||
rms.save("yoffset", window.document.body.scrollTop);
|
||||
rms.save("activities",$scope.activities);
|
||||
rms.save("course_activities",$scope.course_activities);
|
||||
rms.save("project_activities",$scope.project_activities);
|
||||
$location.path('/'+type+'/'+act_id);
|
||||
}
|
||||
|
||||
$scope.addPraise = function(act){
|
||||
for(var i in $scope.activities){
|
||||
if($scope.activities[i].act_id == act.act_id){
|
||||
$scope.activities[i].praise_count += 1;
|
||||
$scope.activities[i].has_praise = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for(var i in $scope.course_activities){
|
||||
if($scope.course_activities[i].act_id == act.act_id){
|
||||
$scope.course_activities[i].praise_count += 1;
|
||||
$scope.course_activities[i].has_praise = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for(var i in $scope.project_activities){
|
||||
if($scope.project_activities[i].act_id == act.act_id){
|
||||
$scope.project_activities[i].praise_count += 1;
|
||||
$scope.project_activities[i].has_praise = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
common.addCommonPraise(act);
|
||||
};
|
||||
|
||||
$scope.decreasePraise = function(act){
|
||||
for(var i in $scope.activities){
|
||||
if($scope.activities[i].act_id == act.act_id){
|
||||
$scope.activities[i].praise_count -= 1;
|
||||
$scope.activities[i].has_praise = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for(var i in $scope.course_activities){
|
||||
if($scope.course_activities[i].act_id == act.act_id){
|
||||
$scope.course_activities[i].praise_count -= 1;
|
||||
$scope.course_activities[i].has_praise = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for(var i in $scope.project_activities){
|
||||
if($scope.project_activities[i].act_id == act.act_id){
|
||||
$scope.project_activities[i].praise_count -= 1;
|
||||
$scope.project_activities[i].has_praise = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
common.decreaseCommonPraise(act);
|
||||
};
|
||||
}]);
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
|
||||
app.controller('NewClassController', ['$scope', '$http', 'auth', 'config', 'alertService','$location', function($scope, $http, auth, config, alertService, $location){
|
||||
app.controller('NewClassController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','rms', function($scope, $http, auth, config, alertService, $location,rms){
|
||||
var vm = $scope;
|
||||
|
||||
vm.alertService = alertService.create();
|
||||
|
@ -40,7 +40,9 @@ app.controller('NewClassController', ['$scope', '$http', 'auth', 'config', 'aler
|
|||
vm.alertService.showMessage('出错了', response.data.message);
|
||||
} else {
|
||||
vm.alertService.showMessage('提示', '新建课程成功', function(){
|
||||
window.history.back();
|
||||
// window.history.back();
|
||||
rms.save('syllabuses',[]);
|
||||
$location.path("/class_list");
|
||||
});
|
||||
}
|
||||
console.log(response.data.data);
|
||||
|
|
|
@ -3,8 +3,8 @@ app.directive('inputAuto',function(){
|
|||
restrict: 'A',
|
||||
scope: {},
|
||||
link: function(scope, element){
|
||||
var copyContainer = element.parent().children().eq(0);
|
||||
var sendButton = element.parent().next();
|
||||
var copyContainer = element.parent().children().children().eq(0);
|
||||
var sendButton = element.next();
|
||||
element.on('input',function(){
|
||||
console.log(sendButton);
|
||||
copyContainer.html(element[0].value);
|
||||
|
|
|
@ -86,7 +86,7 @@ app.factory('rms', function(){
|
|||
return {save: save, get: get};
|
||||
});
|
||||
|
||||
app.factory('common', ['$http', 'auth', '$routeParams', function($http, auth, $routeParams){
|
||||
app.factory('common', ['$http', 'auth', '$routeParams','rms', function($http, auth, $routeParams,rms){
|
||||
var addCommonReply = function(id, type, data, cb){
|
||||
|
||||
if(!data.comment || data.comment.length<=0){
|
||||
|
@ -126,8 +126,8 @@ app.factory('common', ['$http', 'auth', '$routeParams', function($http, auth, $r
|
|||
};
|
||||
|
||||
var addCommonPraise = function(act){
|
||||
act.praise_count += 1;
|
||||
act.has_praise = true;
|
||||
// act.praise_count += 1;
|
||||
// act.has_praise = true;
|
||||
|
||||
$http({
|
||||
method: 'POST',
|
||||
|
@ -141,9 +141,8 @@ app.factory('common', ['$http', 'auth', '$routeParams', function($http, auth, $r
|
|||
};
|
||||
|
||||
var decreaseCommonPraise = function(act){
|
||||
act.praise_count -= 1;
|
||||
act.has_praise = false;
|
||||
|
||||
// act.praise_count -= 1;
|
||||
// act.has_praise = false;
|
||||
$http({
|
||||
method: 'POST',
|
||||
url: apiUrl + "praise/" + act.act_id,
|
||||
|
@ -174,8 +173,75 @@ app.factory('common', ['$http', 'auth', '$routeParams', function($http, auth, $r
|
|||
}
|
||||
});
|
||||
};
|
||||
args.scope.addPraise = addCommonPraise;
|
||||
args.scope.decreasePraise = decreaseCommonPraise;
|
||||
|
||||
// 动态详情界面点赞与动态界面的数据要同步 保证进入详情点赞后出来显示一致
|
||||
args.scope.addPraise = function(act){
|
||||
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 == act.act_id){
|
||||
activities[i].praise_count += 1;
|
||||
activities[i].has_praise = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for(var i in course_activities){
|
||||
if(course_activities[i].act_id == act.act_id){
|
||||
course_activities[i].praise_count += 1;
|
||||
course_activities[i].has_praise = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for(var i in project_activities){
|
||||
if(project_activities[i].act_id == act.act_id){
|
||||
project_activities[i].praise_count += 1;
|
||||
project_activities[i].has_praise = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
rms.save("activities",activities);
|
||||
rms.save("course_activities",course_activities);
|
||||
rms.save("project_activities",project_activities);
|
||||
|
||||
act.praise_count += 1;
|
||||
act.has_praise = true;
|
||||
addCommonPraise(act);
|
||||
};
|
||||
|
||||
args.scope.decreasePraise = function(act){
|
||||
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 == act.act_id){
|
||||
activities[i].praise_count -= 1;
|
||||
activities[i].has_praise = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for(var i in course_activities){
|
||||
if(course_activities[i].act_id == act.act_id){
|
||||
course_activities[i].praise_count -= 1;
|
||||
course_activities[i].has_praise = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for(var i in project_activities){
|
||||
if(project_activities[i].act_id == act.act_id){
|
||||
project_activities[i].praise_count -= 1;
|
||||
project_activities[i].has_praise = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
rms.save("activities",activities);
|
||||
rms.save("course_activities",course_activities);
|
||||
rms.save("project_activities",project_activities);
|
||||
|
||||
act.praise_count -= 1;
|
||||
act.has_praise = false;
|
||||
decreaseCommonPraise(act);
|
||||
};
|
||||
}
|
||||
|
||||
return {init: init, addCommonReply: addCommonReply, loadCommonData: loadCommonData, addCommonPraise: addCommonPraise, decreaseCommonPraise: decreaseCommonPraise};
|
||||
|
|
|
@ -605,14 +605,15 @@ img.ui-datepicker-trigger {
|
|||
|
||||
/* 里程碑 */
|
||||
.roadmap_box{ background:#f8f8f8; width:648px; padding:10px; margin-top:5px; border:1px solid #ddd; color:#555;}
|
||||
.progress{ width:520px; height:20px; margin-bottom:5px; background:#e9e9e9;}
|
||||
.closed{ background:#bae0ba; display:block;height:20px; float:left;}
|
||||
.progress{ width:648px; height:20px; margin-bottom:5px; background:#e9e9e9;}
|
||||
.closed{ background:#bae0ba; height:20px;}
|
||||
.done{ background:#d3edd3; display:block;height:20px;float:left;}
|
||||
.roadmap_box{ margin-bottom:10px;}
|
||||
.roadmap_list_ul{border:1px solid #ddd; border-bottom:none; margin-bottom:10px;}
|
||||
.roadmap_list_ul li{border-bottom:1px solid #ddd; height:21px; padding-top:5px; padding-left:10px;}
|
||||
.roadmap_list_ul li:hover{background:#ffffdd;}
|
||||
.text_line_s{ text-decoration:line-through; color:#999;}
|
||||
.del_line{ text-decoration:line-through !important; color:#999;}
|
||||
.roadmap_list_w{ width:555px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
|
||||
|
||||
.wiki_text{ width:663px; height:300px; margin-bottom:10px;}
|
||||
|
|
|
@ -7,7 +7,7 @@ body, ul, h1,h2,h3,h4,h5,p,pre,input {padding:0px; margin:0px;}
|
|||
body{background-color: #efeff4;}
|
||||
ul li {list-style:none;}
|
||||
img {max-width:100%;}
|
||||
blockquote {border:1px solid #d4d4d4; padding: 0.6em; margin-left: 1.4em; margin-right: 0.4em; border-radius: 4px; font-family: "Microsoft YaHei"; background-size: 100% 100%; margin-top:5px;}
|
||||
blockquote {border:1px solid #d4d4d4; padding: 0.6em; margin: 5px 0.4em 5px 1.4em; border-radius: 4px; font-family: "Microsoft YaHei"; background-size: 100% 100%;}
|
||||
.text-control {word-break:normal; word-wrap:break-word;}
|
||||
.f12 {font-size:12px;}
|
||||
.f13 {font-size:13px;}
|
||||
|
@ -28,11 +28,13 @@ blockquote {border:1px solid #d4d4d4; padding: 0.6em; margin-left: 1.4em; margin
|
|||
.mb5 {margin-bottom:5px;}
|
||||
.mb10 {margin-bottom:10px;}
|
||||
.mb20 {margin-bottom:20px;}
|
||||
.mb50 {margin-bottom:50px;}
|
||||
.ml5 {margin-left:5px;}
|
||||
.ml10 {margin-left:10px;}
|
||||
.mr5 {margin-right:5px;}
|
||||
.mr10 {margin-right:10px;}
|
||||
.ml15 {margin-left:15px;}
|
||||
.ml35 {margin-left:35px;}
|
||||
.mr15 {margin-right:15px;}
|
||||
.mr20 {margin-right:20px;}
|
||||
.ml25 {margin-left:25px;}
|
||||
|
@ -82,15 +84,15 @@ a.underline {text-decoration:underline;}
|
|||
.btn2 {width:145px; height:35px; color:#fff; font-size:15px; line-height:35px; text-align:center; vertical-align:middle; margin:18px auto 20px auto; border-radius:50px; display:block;}
|
||||
|
||||
/*tab*/
|
||||
.tab-wrap {position:relative; line-height:38px; display:flex; font-size:13px; background-color:#fff;}
|
||||
.tab-wrap a {position:relative; display:block; flex:1;}
|
||||
.tab-wrap {position:relative; line-height:38px; display:-webkit-box; display:-moz-box; display:-ms-flexbox; display:-webkit-flex; display:flex; font-size:13px; background-color:#fff;}
|
||||
.tab-wrap a {position:relative; display:block; -webkit-box-flex:1; -moz-box-flex:1; -ms-flex:1; flex:1;}
|
||||
.tab-wrap a:first-child:after {display:none;}
|
||||
.tab-wrap a:after {content:" "; position:absolute; left:0; top:0; width:1px; height:100%; border-left:1px solid #ccc; color:#707070;}
|
||||
.weixin-tab {text-align:center; border-bottom:1px solid #ccc;}
|
||||
|
||||
/*bottom-tab*/
|
||||
.bottom-tab-wrap {position:fixed; width:100%; bottom:0; line-height:38px; display:flex; font-size:13px; background-color:#fff;}
|
||||
.bottom-tab-wrap a {display:block; flex:1; position:relative;}
|
||||
.bottom-tab-wrap {position:fixed; width:100%; bottom:0; line-height:38px; display:-webkit-box; display:-moz-box; display:-ms-flexbox; display:-webkit-flex; display:flex; font-size:13px; background-color:#fff;}
|
||||
.bottom-tab-wrap a {display:block; -webkit-box-flex:1; -moz-box-flex:1; -ms-flex:1; flex:1; position:relative;}
|
||||
.bottom-tab-wrap a:after {content:" "; position:absolute; left:0; top:0; width:1px; height:100%; border-left:1px solid #ccc; color:#707070;}
|
||||
|
||||
/*动态样式*/
|
||||
|
@ -121,9 +123,11 @@ a.underline {text-decoration:underline;}
|
|||
.post-reply-user {font-size:13px; text-align:left; margin-bottom:10px;}
|
||||
.post-reply-content {font-size:13px; text-align:left; word-break:break-all; word-wrap:break-word; overflow:hidden; padding-bottom:15px; border-bottom:1px solid #ccc;}
|
||||
.post-reply-content img {max-width:100%;}
|
||||
.post-reply-content a {color:#136ec2;}
|
||||
.post-reply-date, .post-reply-trigger {font-size:13px;}
|
||||
.post-input-container {position:relative; padding-right:70px;}
|
||||
.copy-input {width:100%; height:28px; line-height:28px; padding:0 5px; vertical-align: middle; font-size:12px; border-radius:3px; position:absolute; left:-9999em;}
|
||||
.copy-input-container {position:relative; padding-right:70px;}
|
||||
.copy-input {width:100%; height:28px; line-height:28px; padding:0 5px; vertical-align: middle; font-size:12px; border-radius:3px; position:absolute; left:-999em;}
|
||||
.post-reply-input {width:100%; height:28px; max-height:84px; line-height:28px; vertical-align: middle; font-size:13px; border:1px solid #e6e6e6; outline:none; padding:0 5px; margin:0; border-radius:3px; overflow-y:auto; resize:none; background-color:#f0eff4;}
|
||||
.post-reply-submit {position:absolute; font-size:13px; height:30px; line-height:30px; vertical-align:middle; padding:0 8px; color:#fff; background-color:#269ac9; outline:none; border:none; top:0; right:0;}
|
||||
.reply-icon {background:url(/images/wechat/icon_list.gif) -150px -155px no-repeat; width:20px; height:20px; display:inline-block; vertical-align:middle;}
|
||||
|
@ -184,12 +188,15 @@ a.underline {text-decoration:underline;}
|
|||
.class-search-icon {position:absolute; top:16px; left:16px;}
|
||||
.class-detail-search {width:100%; height:33px; color:#999; background-color:#fff; border:none; outline:none;}
|
||||
.border-top {border-top:1px solid #ccc;}
|
||||
.class-detail-row {width:100%; height:38px; line-height:38px; vertical-align:middle; border-bottom:1px solid #ccc; background-color:#fff;}
|
||||
.class-detail-row {width:100%; line-height:18px; padding:10px 0; border-bottom:1px solid #ccc; background-color:#fff;}
|
||||
.class-member-row {width:100%; line-height:18px; padding:5px 0; border-bottom:1px solid #ccc; background-color:#fff;}
|
||||
.class-test-tip {text-align:center; font-size:13px; color:#444; padding-top:40px;}
|
||||
.img-circle {border-radius:50%;}
|
||||
.member-banner {height:24px; line-height:24px; text-align:center; vertical-align:middle; background-color:#dfdfdf;}
|
||||
.resource-width {width:76%;}
|
||||
|
||||
/*20160614班级列表*/
|
||||
.course-diff-row {width:100%; height:28px; line-height:28px; vertical-align:middle; background-color:#fff;}
|
||||
.course-list-row {width:100%; height:38px; line-height:38px; vertical-align:middle; border-top:1px solid #ccc; border-bottom:1px solid #ccc; background-color:#fff;}
|
||||
.class-list {width:100%; border-bottom:1px solid #ccc;}
|
||||
.class-list li {height:40px; line-height:40px; vertical-align:middle; margin:0 25px; border-left:1px solid #ccc; border-bottom:1px solid #ccc; position:relative;}
|
||||
|
@ -204,7 +211,7 @@ a.underline {text-decoration:underline;}
|
|||
/*20160616登录注册*/
|
||||
.login-wrap {padding:0 10px;}
|
||||
.input-box-wrap {padding-right:17px;}
|
||||
.input-box { -webkit-appearance: none; font-size: 16px;width:100%; height:16px; padding: 10px 0px 10px 5px; line-height:16px; border:1px solid #ccc; border-radius:5px;}
|
||||
.input-box { -webkit-appearance: none; font-size: 15px;width:100%; height:18px; padding: 10px 0px 10px 5px; line-height:18px; border:1px solid #ccc; border-radius:5px;}
|
||||
.login-op-wrap {height:30px; line-height:30px; vertical-align:middle;}
|
||||
.login-box{display:inline-block; width:14px; height:14px; line-height:14px; text-align:center; vertical-align:middle; border:1px solid #ccc; background:#fff; border-radius:3px; color:#fff; cursor:pointer;}
|
||||
.login-box.checked{background:#63c360; border:1px solid #63c360;}
|
||||
|
|
Loading…
Reference in New Issue