Merge branch 'dev_aliyun' into develop

dev_aliyun
daiao 5 years ago
commit 7cb0433a08

@ -1,7 +1,9 @@
# encoding: utf-8
class CollegesController < ApplicationController
before_filter :find_department, :only => [:statistics, :course_statistics, :student_shixun, :engineering_capability, :student_eval]
before_filter :find_department, :only => [:statistics, :course_statistics, :student_shixun, :engineering_capability,
:student_eval, :shixun_time, :shixun_report_count, :teachers, :shixun_chart_data,
:student_hot_evaluations]
before_filter :manager_auth, :except => [:home, :get_home_data]
include ApplicationHelper
@ -42,30 +44,36 @@ class CollegesController < ApplicationController
end
def statistics
logger.info("#########################{params}")
@teachers_count = User.find_by_sql("SELECT COUNT(users.`id`) AS teacher_count FROM users LEFT JOIN user_extensions ON users.id=user_extensions.user_id WHERE
user_extensions.`school_id` = #{@school.id} AND user_extensions.`identity` = 0").first.try(:teacher_count)
@students_count = User.find_by_sql("SELECT COUNT(users.`id`) AS student_count FROM users LEFT JOIN user_extensions ON users.id=user_extensions.user_id WHERE
user_extensions.`school_id` = #{@school.id} AND user_extensions.`identity` = 1").first.try(:student_count)
# Redo这样做内存会卡死的
# user_ids = User.find_by_sql("SELECT users.id FROM users LEFT JOIN user_extensions ON users.id=user_extensions.user_id WHERE user_extensions.`school_id` = #{@school.id}").map(&:id)
# Redo是否直接使用count会更好
all_course_ids = Course.where("id != 1309 and is_delete = 0 and school_id = #{@school.id}")
@courses_count = all_course_ids.size
# Redo对于量比较大的尽量不使用笛卡尔积
# @shixuns_count = Shixun.where(:status => [2, 3], :user_id => user_ids).size
@shixuns_count = Shixun.find_by_sql("select count(s.id) as shixun_count from users u right join shixuns s on u.id=s.user_id and s.status in (2, 3) inner join user_extensions ue on
u.id=ue.user_id and ue.school_id=#{@school.id}").first.try(:shixun_count)
# @shixun_time_sum = (Game.where(:user_id => user_ids).pluck(:cost_time).sum / (24*60*60.0)).ceil
@shixun_time_sum = (Game.find_by_sql("select sum(g.cost_time) cost_time from users u RIGHT join games g on u.id=g.user_id inner join user_extensions ue on
u.id=ue.user_id and ue.school_id=#{@school.id}").first.try(:cost_time).to_i / (24 * 60 * 60.0)).ceil
# select count(sw.id) from users u left join student_works sw on u.id=sw.user_id and sw.myshixun_id is not null and sw.work_status !=0 inner join user_extensions ue on u.id=ue.user_id and ue.school_id=117 ;
# @shixun_report_count = StudentWork.where("work_status != 0 and user_id in (#{user_ids.join(',').strip == "" ? -1 : user_ids.join(',')}) and myshixun_id is not null").count
@shixun_report_count = StudentWork.find_by_sql("SELECT count(*) as sw_count FROM `student_works` where user_id in (SELECT users.id FROM users RIGHT JOIN user_extensions ON users.id=user_extensions.user_id WHERE
user_extensions.`school_id`=#{@school.id}) and work_status between 1 and 2 and myshixun_id !=0").first.try(:sw_count)
# 教师、学生总数
count_statistic = UserExtensions.where(school_id: @school.id).select('SUM(IF(identity=0, 1, 0)) AS teachers_count, SUM(IF(identity=1, 1, 0)) AS students_count').first
@teachers_count = count_statistic['teachers_count']
@students_count = count_statistic['students_count']
# 课堂总数
@courses_count = Course.where(school_id: @school.id, is_delete: 0).where('id != 1309').count
# 实训总数
@shixuns_count = Shixun.visible.joins('left join user_extensions on user_extensions.user_id = shixuns.user_id').where(user_extensions: { school_id: @school.id }).count
respond_to do |format|
format.html {render :layout => "base_edu"}
end
end
def shixun_time
time_sum = Game.joins('left join user_extensions on user_extensions.user_id = games.user_id').where(user_extensions: { school_id: @school.id }).sum(:cost_time)
shixun_time_sum = (time_sum / (24 * 60 * 60.0)).ceil
render json: { shixun_time: shixun_time_sum }
end
def shixun_report_count
shixun_report_count = StudentWork.where(work_status: [1, 2]).where('myshixun_id != 0')
.joins('left join user_extensions on user_extensions.user_id = student_works.user_id')
.where(user_extensions: { school_id: @school.id }).count
render json: { shixun_report_count: shixun_report_count }
end
def teachers
@teachers = User.find_by_sql("SELECT users.id, users.login, users.lastname, users.firstname, users.nickname, IFNULL((SELECT count(shixuns.id) FROM shixuns where shixuns.user_id =users.id group by shixuns.user_id), 0) AS publish_shixun_count,
(SELECT count(c.id) FROM courses c, course_members m WHERE c.id != 1309 and m.course_id = c.id AND m.role in (1,2,3) and c.school_id = #{@school.id} AND m.user_id=users.id AND c.is_delete = 0) as course_count
FROM `users`, user_extensions ue where users.id=ue.user_id and ue.identity=0 and ue.school_id=#{@school.id} ORDER BY publish_shixun_count desc, course_count desc, id desc LIMIT 10")
@ -93,30 +101,28 @@ class CollegesController < ApplicationController
}).to_json
JSON.parse(teacher)
end
shixun_ids = HomeworkCommonsShixuns.find_by_sql("SELECT hcs.shixun_id FROM homework_commons_shixuns hcs, homework_commons hc
WHERE hc.course_id in (#{all_course_ids.map(&:id).join(',').strip == "" ? -1 : all_course_ids.map(&:id).join(',')})
AND hcs.homework_common_id = hc.id").map(&:shixun_id)
shixun_tags = TagRepertoire.find_by_sql("SELECT tr.`name`, COUNT(str.shixun_id) as shixun_count FROM tag_repertoires tr,
shixun_tag_repertoires str WHERE tr.id = str.tag_repertoire_id AND str.shixun_id
IN (#{shixun_ids.join(',').strip == "" ? -1 : shixun_ids.join(',')}) GROUP BY tr.id
order by shixun_count desc")
all_shixun_count = shixun_tags.map(&:shixun_count).sum
other_count = all_shixun_count.to_i - shixun_tags[0..8].map(&:shixun_count).sum.to_i
@shixun_tags_name = []
@shixun_tags_data = []
shixun_tags[0..8].each do |tag|
@shixun_tags_name << tag.name
@shixun_tags_data << {value: tag.shixun_count, name: tag.name}
end
if shixun_tags.size > 9
@shixun_tags_name << 'Others'
@shixun_tags_data << {value: other_count, name: 'Others'}
def shixun_chart_data
shixun_ids = HomeworkCommonsShixuns.joins(homework_common: :course).where(courses: {school_id: @school.id, is_delete: 0}).where('courses.id != 1309').pluck('distinct shixun_id')
shixun_count_map = ShixunTagRepertoire.joins(:tag_repertoire).where(shixun_id: shixun_ids).group('tag_repertoires.name').order('count_shixun_id desc').count(:shixun_id)
names = []
data = []
shixun_count_map.each do |name, count|
break if names.size == 9
names << name
data << { value: count, name: name }
end
respond_to do |format|
format.html {render :layout => "base_edu"}
if shixun_count_map.keys.size > 9
other_count = shixun_count_map.values[9..-1].reduce(:+)
names << 'Others'
data << { name: 'Others', value: other_count }
end
render json: { names: names, data: data }
end
# 在线课堂
@ -152,33 +158,24 @@ class CollegesController < ApplicationController
# @courses = Course.where("courses.school_id = #{@department.school_id} and courses.is_delete = 0").select("courses.id, courses.tea_id, courses.name, courses.is_end,
# (SELECT MAX(created_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS update_time").order("update_time desc")
@courses = paginateHelper @courses, 8
# @courses = @courses.includes(:student, :boards, :exercises, :polls, :attachments, :homework_commons, :teacher => [:user_extensions])
end
# 学生实训
def student_shixun
user_ids = User.find_by_sql("SELECT users.id FROM users, user_extensions WHERE users.id=user_extensions.user_id AND user_extensions.`school_id` = #{@school.id}").map(&:id)
@students = User.find_by_sql("SELECT users.id, users.login, users.lastname, users.firstname, users.nickname, users.grade,
users.experience, ue.student_id, (SELECT COUNT(myshixuns.id) FROM `myshixuns` WHERE myshixuns.user_id
= users.id AND myshixuns.status = 1 GROUP BY users.id) AS myshixun_count FROM users join user_extensions ue on
users.id = ue.user_id where ue.school_id = #{@school.id} AND ue.identity = 1 AND `users`.`type` IN ('User', 'AnonymousUser') ORDER BY experience DESC, myshixun_count DESC LIMIT 10")
## outputs基数过大用inner join有奇效
@shixun_tags = TagRepertoire.find_by_sql(%Q{
select name, COUNT(outputs.id) AS test_count from outputs inner join (
SELECT tr.id as trid, tr.`name` as name, games.id as id
FROM tag_repertoires tr, shixun_tag_repertoires str, games, myshixuns
WHERE tr.id = str.tag_repertoire_id
AND str.shixun_id = myshixuns.`shixun_id`
AND myshixuns.id = games.`myshixun_id`
AND myshixuns.`user_id` IN (
SELECT users.id FROM users, user_extensions WHERE users.id=user_extensions.user_id AND user_extensions.`school_id` = #{@school.id}
)
) a on a.id = outputs.game_id and outputs.`test_set_position` = 1 group by trid
ORDER BY test_count DESC
LIMIT 10
})
@students = User.joins(:user_extensions).where(user_extensions: { school_id: @school.id, identity: 1 }).includes(:user_extensions).order('experience desc').limit(10)
student_ids = @students.map(&:id)
@shixun_count = Myshixun.where(user_id: student_ids).group(:user_id).count
@study_shixun_count = Myshixun.where(user_id: student_ids, status: 0).group(:user_id).count
end
def student_hot_evaluations
games = Game.joins(:myshixun).joins('join shixun_tag_repertoires str on str.shixun_id = myshixuns.shixun_id')
games = games.joins('join tag_repertoires tr on tr.id = str.tag_repertoire_id')
games = games.joins("join user_extensions ue on ue.user_id = myshixuns.user_id and ue.school_id = #{@school.id}")
evaluate_count_map = games.group('tr.name').reorder('sum_games_evaluate_count desc').limit(10).sum('games.evaluate_count')
render json: { names: evaluate_count_map.keys, values: evaluate_count_map.values }
end
# 工程能力

@ -14,6 +14,10 @@ class CompetitionTeamsController < ApplicationController
def show
return render_404 if @competition.identifier != 'gcc-course-2019'
end
def shixun_detail
return render_404 if @competition.identifier != 'gcc-course-2019'
@team_user_ids = @team.team_members.pluck(:user_id)
@ -40,9 +44,13 @@ class CompetitionTeamsController < ApplicationController
@forked_course_count_map[forked_shixun_map[forked_id]] += course_count
end
@forked_shixun_map = forked_shixun_map
end
def course_detail
return render_404 if @competition.identifier != 'gcc-course-2019'
@team_user_ids = @team.team_members.pluck(:user_id)
# 课堂
student_count_subquery = CourseMember.where('course_id = courses.id AND role = 4').select('count(*)').to_sql
subquery = StudentWork.where('homework_common_id = hcs.id')
.select('sum(compelete_status !=0 ) as finish, count(*) as total')

@ -327,9 +327,9 @@ class CompetitionsController < ApplicationController
elsif @type == "决赛"
# '92b7vt8x','a7fxenvc','wt2xfzny','xa4m9cng','tng6heyf','am5o73er','9fla2zry','fzp3iu4w','qlsy6xb4'
# 预赛的实训id 第一阶段128913731256 第二阶段1488, 1453, 1487 第三阶段1470, 1473, 1408
shixun1_id = Shixun.where(:identifier => ['92b7vt8x','a7fxenvc','wt2xfzny']).pluck(:id)
shixun2_id = Shixun.where(:identifier => ['xa4m9cng','tng6heyf','am5o73er']).pluck(:id)
shixun3_id = Shixun.where(:identifier => ['9fla2zry','fzp3iu4w','qlsy6xb4']).pluck(:id)
shixun1_id = Shixun.where(:identifier => ['ftlc4x38']).pluck(:id)
shixun2_id = Shixun.where(:identifier => ['y9npgih2','ucqt7fw3','2p7ouzwk']).pluck(:id)
shixun3_id = Shixun.where(:identifier => ['fj49r7xv','gf2cvxfh','cmoxhtbs']).pluck(:id)
end
if @competition.competition_scores.where(:competition_stage_id => @stage.id).count == 0
@ -385,7 +385,7 @@ class CompetitionsController < ApplicationController
f_score = team.competition_scores.where(:competition_stage_id => final_stage.try(:id)).first
# 预赛记录
p_score = team.competition_scores.where(:competition_stage_id => pre_stage.try(:id)).first
team[:s_score] = (f_score.try(:score).to_f * 0.85 + p_score.try(:score).to_f * 0.15).try(:round, 2)
team[:s_score] = (f_score.try(:score).to_f * 0.80 + p_score.try(:score).to_f * 0.20).try(:round, 2)
team[:s_spend_time] = f_score.try(:cost_time).to_i + p_score.try(:cost_time).to_i
end
end

@ -50,10 +50,15 @@ class EcGraduationRequirementsController < ApplicationController
@year = requirement.ec_year
@template_major = admin_or_business? || @year.ec_major_school.school.ec_school_users.pluck(:user_id).include?(User.current.id)
requirement.update_attribute(:content, params[:requirement])
requirement.ec_graduation_subitems.destroy_all
# requirement.ec_graduation_subitems.destroy_all
params[:subitems].try(:each_with_index) do |sub, index|
subitem = requirement.ec_graduation_subitems.where(position: index+1).first
if subitem.present?
subitem.update_attributes(:content => sub)
else
EcGraduationSubitem.create(:content => sub, :position => index+1, :ec_graduation_requirement_id => requirement.id)
end
end
@ec_graduation_requirements = requirement.ec_year.ec_graduation_requirements
end

@ -82,9 +82,13 @@ class EcGraduationSubitemsController < ApplicationController
# DELETE /ec_graduation_subitems/1.json
def destroy
@ec_graduation_subitem = EcGraduationSubitem.find(params[:id])
@ec_graduation_requirement = @ec_graduation_subitem.ec_graduation_requirement
@ec_graduation_requirement.ec_graduation_subitems.where("position > #{@ec_graduation_subitem.position}").update_all("position = position - 1")
@ec_graduation_requirements = @ec_graduation_requirement.ec_year.ec_graduation_requirements
@ec_graduation_subitem.destroy
respond_to do |format|
format.js
format.html { redirect_to ec_graduation_subitems_url }
format.json { head :no_content }
end

@ -18,7 +18,7 @@ class EcloudController < ApplicationController
skip_before_filter :verify_authenticity_token
before_filter :save_para
# before_filter :check_sign, only: [:ps_new, :ps_update, :bs_new, :bs_update]
before_filter :check_sign, only: [:ps_new, :ps_update, :bs_new, :bs_update]
before_filter :user_setup
# before_filter :require_login, only: [:authorize]

@ -29,7 +29,7 @@ class ManagementsController < ApplicationController
end
def user_agents
@user_agents = UserAgent.where("user_agents.key is not null")
@user_agents = UserAgent.where("user_agents.key is not order by action_status, register_status")
@agents_count = @user_agents.count
limit = 20
@agents_pages = Paginator.new @agents_count, limit, params['page'] || 1
@ -179,6 +179,8 @@ class ManagementsController < ApplicationController
if params[:search]
if params[:search].to_i.to_s == params[:search].to_s
myshixun_id = Game.where(:myshixun_id => params[:search].to_i).pluck(:myshixun_id)
game_myshixun_id = Game.where(:id => params[:search].to_i).pluck(:myshixun_id)
myshixun_id = myshixun_id + game_myshixun_id
else
myshixun_id = Game.where(:identifier => params[:search]).pluck(:myshixun_id)
end
@ -221,7 +223,9 @@ class ManagementsController < ApplicationController
@user.admin = params[:admin].to_i
end
@user.firstname = ""
@user.mail = params[:mail].strip == "" ? nil : params[:mail]
if params[:mail].present?
@user.mail = params[:mail].strip
end
@user.phone = params[:phone].strip == "" ? nil : params[:phone]
#@user.password = params[:new_password]
# if params[:new_password].strip != "" && params[:new_password_confirmation].strip != ""
@ -1742,6 +1746,7 @@ end
# 删除
def delete_applied_departments
ActiveRecord::Base.transaction do
applied_department = ApplyAddDepartment.find params[:depart_id]
applied_message = AppliedMessage.where(:applied_id => applied_department.id, :applied_type => "ApplyAddDepartment")
applied_message.update_all(:status => 3)
@ -1752,13 +1757,16 @@ end
Tiding.where(:user_id => 1, :trigger_user_id => applied_department.user_id, :container_id => applied_department.id, :container_type => 'ApplyAddDepartment', :status => 0, :tiding_type => "Apply").update_all(:status => 1)
Tiding.create(:user_id => applied_department.user_id, :trigger_user_id => 0, :container_id => applied_department.id, :container_type =>'ApplyAddDepartment', :belong_container_id => applied_department.department.school_id, :belong_container_type=> 'School', :tiding_type => "System", :status => 2, :extra => params[:reason])
# 删除学校的用户
users = UserExtensions.where("department_id = #{applied_department.department_id}")
users.update_all(department_id: nil, profile_completed: false)
user_exs = UserExtensions.where("department_id = #{applied_department.department_id}")
users = User.where(id: user_exs.pluck(:user_id))
user_exs.update_all(department_id: nil)
users.update_all(profile_completed: false)
applied_department.department.destroy
# 已审批删除
elsif params[:tip] == "applied"
applied_department.destroy
end
end
respond_to do |format|
format.html{ redirect_to depart_managements_path }
end
@ -2080,7 +2088,7 @@ end
@school_id = params[:school_id]
if params[:school_id] && params[:school_id] != ''
@courses = @courses.joins("join user_extensions ue on courses.tea_id = ue.user_id").where("ue.school_id = #{params[:school_id]}")
@courses = @courses.where(school_id: params[:school_id])
end
if params[:homepage_show]
@ -2963,7 +2971,7 @@ end
member = course.course_members.where(:user_id => user.id, :role => member_role).first
# 如果已是课堂成员且是学生身份and不在指定的分班则移动到该分班
if member.present? && member.role == 4 && member.course_group_id != course_group.try(:id).to_i
member.update_column("course_group_id", course_group.try(:id).to_i)
member.update_attributes(course_group_id: course_group.try(:id).to_i)
member_count += 1
elsif !member.present?
member = CourseMember.new(:role => member_role, :user_id => user.id)
@ -2984,9 +2992,9 @@ end
@status = 1
@message = "已导入/更新#{member_count}个成员"
end
rescue
rescue Exception => e
@status = 0
@message = "文件内容无法读取"
@message = e.message
end
else
@status = 0
@ -3028,18 +3036,12 @@ end
# 用户不存在则创建账号
if !user.present? && school.present?
department = school.departments.where(:name => list[2]).first
user = User.new
user.admin = false
user.activate
user.login = prefix + list[0].to_s.strip
user.lastname = list[1].to_s.strip
user.nickname = list[1].to_s.strip
user.professional_certification = 1
user.certification = 1
user.grade = 0
user.password = "12345678"
user.phone = list[5].blank? ? nil : list[5]
if user.save
user_params = {status: 1, login: prefix + list[0].to_s.strip, lastname: list[1].to_s.strip,
nickname: list[1].to_s.strip, professional_certification: 1, certification: 1, grade: 0,
password: "12345678", phone: list[5].blank? ? nil : list[5], mail: "#{prefix+list[0].to_s.strip}@qq.com", profile_completed: 1}
user = User.create(user_params)
user = User.find(prefix + list[0].to_s.strip)
if user
ue = UserExtensions.new(:user_id => user.id, :gender => 0, :school_id => school_id, :location => school.province, :location_city => school.city, :identity => list[3].to_i, :student_id => list[0].to_s.strip, :department_id => department.try(:id))
if list[3] && list[3].to_i == 0
ue.technical_title = ["教授", "副教授", "讲师", "助教"].include?(list[4]) ? list[4] : "讲师"
@ -4202,7 +4204,7 @@ end
sheet1[count_row, 5] = show_shixun_mirror(shixun)
sheet1[count_row, 6] = shixun.fork_identifier
sheet1[count_row, 7] = shixun.challenges.count
sheet1[count_row, 8] = Setting.server_url + shixun_path(shixun)
sheet1[count_row, 8] = Setting.server_url + shixun_path(shixun).sub("/", "")
count_row += 1
end
book.write xls_report

@ -42,7 +42,9 @@ class WelcomeController < ApplicationController
# 运营引流个人数据展示
def user_agents
@user_agents = UserAgent.where(key: params[:edu])
@user_agents = UserAgent.where(key: params[:edu]).order("register_status desc, action_status desc")
@action_count = @user_agents.where(action_status: 2).count
@register_count = @user_agents.where(register_status: 2).count
@agents_count = @user_agents.count
limit = 20
@agents_pages = Paginator.new @agents_count, limit, params['page'] || 1

@ -3036,11 +3036,11 @@ module ApplicationHelper
elsif @contest
title << (@contest.name.nil? ? "创新源于实践" : @contest.name)
elsif @shixun
title << (@shixun.name.nil? ? "开发社区" : @shixun.name)
title << (@shixun.name.nil? ? "实训项目" : @shixun.name)
elsif @my_shixun
title << ("我的实训")
title << ("我的实训项目")
elsif params[:controller] == "shixuns" && params[:action] == "index"
title << ("开发社区")
title << ("实训项目")
elsif @subject
title << (@subject.name.nil? ? "实践课程" : @subject.name)
elsif params[:controller] == "subjects" && params[:action] == "index"

@ -11,7 +11,8 @@ class CompetitionTeam < ActiveRecord::Base
# attr_accessible :invite_code, :name, :team_type
def teacher
User.where(:id => self.teacher_id).first
teacher_id = self.teachers.first&.user_id
User.where(id: teacher_id).first
end
def group_members

@ -1,6 +1,6 @@
class CourseGroup < ActiveRecord::Base
# attr_accessible :title, :body
belongs_to :course
belongs_to :course, :counter_cache => true
has_many :course_members
has_many :members
has_many :memberships, :class_name => 'Member'

@ -15,6 +15,7 @@ class CourseMember < ActiveRecord::Base
homeworks = course.homework_commons.includes(:homework_detail_manual).where("homework_type in (1, 3, 4)")
if homeworks.count != 0
homeworks.each do |hw|
next if hw.student_works.where(user_id: user_id).any?
str += "," if str != ""
str += "('#{hw.name}的作品提交',#{hw.id},#{user_id}, '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')"
end
@ -34,6 +35,7 @@ class CourseMember < ActiveRecord::Base
exercises = course.exercises
if exercises.count != 0
exercises.each do |ex|
next if ex.exercise_users.where(user_id: user_id).any?
str += "," if str != ""
str += "(#{ex.id},#{user_id}, 0, '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')"
end
@ -53,6 +55,7 @@ class CourseMember < ActiveRecord::Base
polls = course.polls
if polls.count != 0
polls.each do |poll|
next if poll.poll_users.where(user_id: user_id).any?
str += "," if str != ""
str += "(#{poll.id},#{user_id}, 0, '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')"
end
@ -72,6 +75,7 @@ class CourseMember < ActiveRecord::Base
tasks = course.graduation_tasks
if tasks.count != 0
tasks.each do |task|
next if task.graduation_works.where(user_id: user_id).any?
str += "," if str != ""
str += "(#{task.id}, #{user_id}, #{course.id}, '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')"
end

@ -119,6 +119,10 @@ class Message < ActiveRecord::Base
message_detail.try(:content)
end
def content
message_detail.try(:content)
end
# def content
# self.try(:content)
# end

@ -1,8 +1,8 @@
class TagRepertoire < ActiveRecord::Base
# attr_accessible :title, :body
belongs_to :sub_repertoire
has_many :shixuns, :through => :shixun_tag_repertoires
has_many :shixun_tag_repertoires, :dependent => :destroy
has_many :shixuns, :through => :shixun_tag_repertoires
has_many :memos, :through => :memo_tag_repertoires
has_many :memo_tag_repertoires, :dependent => :destroy

@ -300,7 +300,7 @@ class User < Principal
attr_accessor :password, :password_confirmation
attr_accessor :last_before_login_on
# Prevents unauthorized assignments
attr_protected :login, :admin, :password, :password_confirmation, :hashed_password
# attr_protected :login, :admin, :password, :password_confirmation, :hashed_password
LOGIN_LENGTH_LIMIT = 30
MAIL_LENGTH_LIMIT = 60
@ -308,15 +308,15 @@ class User < Principal
#validates_presence_of :login, :mail, :if => Proc.new { |user| !user.is_a?(AnonymousUser) }
validates_presence_of :login, :if => Proc.new { |user| !user.is_a?(AnonymousUser) }
validates_uniqueness_of :login, :if => Proc.new { |user| user.login_changed? && user.login.present? }, :case_sensitive => false
validates_uniqueness_of :mail, :if => Proc.new { |user| user.mail_changed? && user.mail.present? }, :case_sensitive => false
#validates_uniqueness_of :mail, :if => Proc.new { |user| user.mail_changed? && user.mail.present? }, :case_sensitive => false
validates_uniqueness_of :phone, :if => Proc.new { |user| user.phone_changed? && user.phone.present? }, :case_sensitive => false
# Login must contain letters, numbers, underscores only
#validates_format_of :login, :with => /\A[a-z0-9_\-]*\z/i
validates_length_of :login, :maximum => LOGIN_LENGTH_LIMIT
validates_length_of :firstname, :maximum => 30
validates_length_of :lastname, :maximum => 30
validates_format_of :mail, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, :allow_blank => true
validates_length_of :mail, :maximum => MAIL_LENGTH_LIMIT, :allow_nil => true
#validates_format_of :mail, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, :allow_blank => true
#validates_length_of :mail, :maximum => MAIL_LENGTH_LIMIT, :allow_nil => true
validates_confirmation_of :password, :allow_nil => true
# validates_inclusion_of :mail_notification, :in => MAIL_NOTIFICATION_OPTIONS.collect(&:first), :allow_blank => true
validate :validate_password_length
@ -673,9 +673,9 @@ class User < Principal
base_reload(*args)
end
def mail=(arg)
write_attribute(:mail, arg.to_s.strip)
end
# def mail=(arg)
# write_attribute(:mail, arg.to_s.strip)
# end
def identity_url=(url)
if url.blank?

@ -21,8 +21,8 @@
<a href="<%= user_path(student) %>" target="_blank" class="task-hide" style="max-width: 84px;"><%= student.show_real_name %></a>
</td>
<td><%= student.student_id %></td>
<td><%= student.myshixun_count %></td>
<td><%= student.myshixuns.where(:status => 0).count %></td>
<td><%= @shixun_count.fetch(student.id, 0) %></td>
<td><%= @study_shixun_count.fetch(student.id, 0) %></td>
<td><%= student.grade %></td>
<td class="color-blue"><%= student.experience %></td>
</tr>
@ -32,14 +32,15 @@
<script>
$(function(){
//初始化最热评测柱状图
InitHotEvaluating();
$.get('<%= student_hot_evaluations_college_path(@school) %>', function(data){
InitHotEvaluating(data.names.reverse(), data.values.reverse());
})
});
function InitHotEvaluating(){
function InitHotEvaluating(names, values){
var Color = ['#962e66', '#623363', '#CCCCCC', '#9A9A9A', '#FF8080', '#FF80C2', '#B980FF', '#80B9FF', '#6FE9FF', '#4DE8B4', '#F8EF63', '#FFB967'];
var xData = function() {
var data = <%= raw @shixun_tags.map(&:name).reverse %>;
return data;
return names;
}();
option = {
@ -112,7 +113,7 @@
fontSize: '12'
}
},
data: xData
data: names
},
series: [{
name: '',
@ -130,7 +131,7 @@
},
barGap: '0%',
barCategoryGap: '50%',
data: <%= raw @shixun_tags.map(&:test_count).reverse %>
data: values
}
]

@ -0,0 +1,17 @@
<% @teachers.each_with_index do |teacher, index| %>
<tr>
<td class="pl20 pr20">
<% if index < 3 %>
<img src="/images/educoder/competition/<%= index + 1 %>.png" width="18px" height="22px" class="mt8"/></td>
<% else %>
<%= index + 1 %>
<% end %>
<td class="color-dark"><a href="<%= user_path(teacher['login']) %>" target="_blank" class="task-hide" style="max-width: 84px;"><%= teacher['real_name'] %></a></td>
<td><%= teacher['course_count'] %></td>
<td><%= teacher['shixun_work_count'] %></td>
<td><%= teacher['un_shixun_work_count'] %></td>
<td><%= teacher['student_count'] %></td>
<td><%= teacher['complete_rate'] %>%</td>
<td class="color-blue"><%= teacher['publish_shixun_count'].to_i %></td>
</tr>
<% end %>

@ -42,8 +42,8 @@
<li><span><%= @students_count %></span>人</li>
<li><span><%= @courses_count %></span>个</li>
<li><span><%= @shixuns_count %></span>个</li>
<li><span><%= @shixun_report_count %></span>个</li>
<li><span data-tip-down="所有学员的实训耗时之和"><span><%= @shixun_time_sum %></span>天</span></li>
<li class="shixun-report-count">加载中</li>
<li class="shixun-time">加载中</li>
<!-- <li><span><%#= @department.present? ? @department.host_count.to_i : @school.departments.first.try(:host_count).to_i %></span>台</li>-->
</div>
</div>
@ -52,7 +52,7 @@
<li class="active" index="1"><a href="javascript:void(0);">课堂</a></li>
<li index="2"><a href="<%= student_shixun_college_path(@school) %>" data-remote="true">学生实训</a></li>
<!--<li><a href="<%#= engineering_capability_college_path(@department) %>" data-remote="true">工程能力</a></li>-->
<li index="4"><a href="<%= student_eval_college_path(@school) %>" data-remote="true">学生测评</a></li>
<!-- <li index="4"><a href="<%#= student_eval_college_path(@school) %>" data-remote="true">学生测评</a></li>-->
</div>
<div class="panelContent panelContent-1">
@ -76,23 +76,7 @@
<th>发布实训</th>
</thead>
<tbody>
<% @teachers.each_with_index do |teacher, index| %>
<tr>
<td class="pl20 pr20">
<% if index < 3 %>
<img src="/images/educoder/competition/<%= index + 1 %>.png" width="18px" height="22px" class="mt8"/></td>
<% else %>
<%= index + 1 %>
<% end %>
<td class="color-dark"><a href="<%= user_path(teacher['login']) %>" target="_blank" class="task-hide" style="max-width: 84px;"><%= teacher['real_name'] %></a></td>
<td><%= teacher['course_count'] %></td>
<td><%= teacher['shixun_work_count'] %></td>
<td><%= teacher['un_shixun_work_count'] %></td>
<td><%= teacher['student_count'] %></td>
<td><%= teacher['complete_rate'] %>%</td>
<td class="color-blue"><%= teacher['publish_shixun_count'].to_i %></td>
</tr>
<% end %>
<tr><td colspan="100" style="height:400px">加载中...</td></tr>
</tbody>
</table>
</div>
@ -100,12 +84,9 @@
<div class="fl width40">
<div class="online_status static_shadow">
<p class="font-24 padding30-20">在线实训情况</p>
<% if @shixun_tags_name.size == 0 %>
<%= render :partial => 'welcome/no_data' %>
<div class="pie-chart-loading" style="width: 440px;height: 480px; text-align: center; padding: 150px 0; box-sizing: border-box;">加载中...</div>
<%= render :partial => 'welcome/no_data', locals: { style: 'display: none' } %>
<div id="pieChart"></div>
<% else %>
<div id="pieChart" style="height: 440px;width: 480px;"></div>
<% end %>
</div>
</div>
</div>
@ -158,7 +139,15 @@
})
});
$.get('<%= course_statistics_college_path(@school) %>');
$.get('<%= shixun_time_college_path(@school) %>', function(data){
$('.shixun-time').html("<span data-tip-down=\"所有学员的实训耗时之和\">" + data.shixun_time + "</span>天");
});
$.get('<%= shixun_report_count_college_path(@school) %>', function(data){
$('.shixun-report-count').html("<span>" + data.shixun_report_count + "</span>个");
});
// 教师排名
$.ajax({ url: '<%= teachers_college_path(@school) %>', method: 'GET', dataType: 'script' })
$(".count_student_test a").click(function(){
$(".count_student_test a").removeClass("active");
@ -166,9 +155,20 @@
});
//初始化饼状图
InitPieChart();
$.get('<%= shixun_chart_data_college_path(@school) %>', function(data){
$('.pie-chart-loading').hide();
if (data.names.length > 0) {
$('.online_status .edu-tab-con-box').hide();
$('#pieChart').css('height', '440px').css('width', '480px')
InitPieChart(data.names, data.data);
} else {
$('.online_status .edu-tab-con-box').show();
}
});
$.get('<%= course_statistics_college_path(@school) %>');
});
function InitPieChart(){
function InitPieChart(names, data){
var Color = ['#49A9EE', '#FFD86E', '#98D87D', '#8996E6', '#F3857B', '#B97BF3','#4DE8B4','#F37BDB','#566EFF','#FF961A'];
option = {
@ -185,7 +185,7 @@
bottom: 20,
left: 20,
right:20,
data: <%= raw @shixun_tags_name %>
data: names
},
series : [
{
@ -193,7 +193,7 @@
radius : '50%',
center: ['50%', '35%'],
selectedMode: 'single',
data:<%= raw @shixun_tags_data.to_json %>,
data: data,
itemStyle: {
emphasis: {
shadowBlur: 10,

@ -0,0 +1 @@
$('.teacher_ranking table tbody').html("<%= j(render :partial => 'colleges/teacher_ranking') %>")

@ -0,0 +1,52 @@
<p class="pt20 pb20 font-16"><span class="modalTitle">翻转课堂</span></p>
<table width="100%" class="tBodyScroll edu-txt-center" cellpadding="0" cellspacing="0">
<thead class="lastPart">
<tr>
<th width="10%">创建者</th>
<th width="40%" class="edu-txt-left">名称</th>
<th width="10%">学生数量</th>
<th width="15%">发布的实训作业数量</th>
<th width="10%" data-tip-down="至少完成了1个关卡">有效作品数</th>
<th width="15%">经验值</th>
</tr>
</thead>
<tbody>
<%
total_members_count = 0
total_shixun_homework_count = 0
total_course_score = 0
%>
<% @courses.each do |course| %>
<%
total_members_count += course.members_count.to_i
total_shixun_homework_count += course['shixun_homework_count'].to_i
score = 500 + 5 * @course_shixun_count_map.fetch(course.id, 0) * @course_myshixun_map.fetch(course.id, 0)
total_course_score += score
%>
<tr>
<td width="10%"><%= course.teachers.where(user_id: @team_user_ids).first.user.show_real_name %></td>
<td width="40%" class="edu-txt-left">
<%= link_to course_path(course), target: '_blank' do %>
<span class="task-hide fl" style="max-width: 480px;"><%= course.name %></span>
<% end %>
</td>
<td width="10%"><%= course.members_count %></td>
<td width="15%"><%= course['shixun_homework_count'].presence || '--' %></td>
<td width="10%"><%= @course_myshixun_map.fetch(course.id, '--') %></td>
<td width="15%"><%= score.zero? ? '--' : score %></td>
</tr>
<% end %>
</tbody>
<tfoot class="tfootLastPart">
<tr class="color-orange font-16">
<th width="10%" class="color-grey-6">合计</th>
<th width="40%" class="edu-txt-left"><%= @courses.size %></th>
<th width="10%"><%= total_members_count %></th>
<th width="15%"><%= total_shixun_homework_count %></th>
<th width="10%"><%= @course_myshixun_map.values.reduce(:+) || 0 %></th>
<th width="15%"><%= total_course_score %></th>
</tr>
</tfoot>
</table>

@ -0,0 +1,68 @@
<p class="pt20 pb20 font-16"><span class="modalTitle">实训项目</span></p>
<table width="100%" class="tBodyScroll edu-txt-center" cellpadding="0" cellspacing="0">
<thead class="lastPart">
<tr>
<th width="10%">创建者</th>
<th width="40%" class="edu-txt-left">名称</th>
<th width="10%">学习人数</th>
<th width="15%" data-tip-down="fork该实训产生的新实训学习总人数">fork版的学习人数</th>
<th width="10%" data-tip-down="至少完成了1个关卡">有效作品数</th>
<th width="15%">经验值</th>
</tr>
</thead>
<tbody>
<%
total_myshixun_count = 0
total_forked_myshixun_count = 0
total_shixun_score = 0
%>
<% @shixuns.each do |shixun| %>
<%
total_myshixun_count += shixun.myshixuns_count
total_forked_myshixun_count += shixun['forked_myshixun_count'].to_i
valid_course_count = @course_count_map.fetch(shixun.id, 0)
valid_student_count = @original_myshixun_count_map.fetch(shixun.id, 0)
score =
if shixun.fork_from.blank?
500 + 50 * valid_course_count + 10 * valid_student_count
else
100 + 10 * valid_course_count + 5 * valid_student_count
end
@forked_shixun_map.each do |shixun_id, fork_from_id|
next if fork_from_id != shixun.id
score += 100 + 10 * @forked_map.fetch(shixun_id, 0) + 5 * @forked_myshixun_count_map.fetch(shixun_id, 0)
end
total_shixun_score += score
%>
<tr>
<td width="10%"><%= shixun.creator.show_real_name %></td>
<td width="40%" class="edu-txt-left">
<%= link_to shixun_path(shixun), target: '_blank' do %>
<span class="task-hide fl" style="max-width: 410px;"><%= shixun.name %></span>
<% end %>
<% if shixun.fork_from.blank? %>
<span class="connectTag ml10">原创</span>
<% end %>
</td>
<td width="10%"><%= shixun.myshixuns_count.to_i.zero? ? '--' : shixun.myshixuns_count.to_i %></td>
<td width="15%"><%= shixun['forked_myshixun_count'].to_i.zero? ? '--' : shixun['forked_myshixun_count'].to_i %></td>
<td width="10%"><%= @myshixun_count_map.fetch(shixun.id, '--') %></td>
<td width="15%"><%= score.zero? ? '--' : score %></td>
</tr>
<% end %>
</tbody>
<tfoot class="tfootLastPart">
<tr class="color-orange font-16">
<th width="10%" class="color-grey-6">合计</th>
<th width="40%" class="edu-txt-left"><%= @shixuns.size %></th>
<th width="10%"><%= total_myshixun_count %></th>
<th width="15%"><%= total_forked_myshixun_count %></th>
<th width="10%"><%= @myshixun_count_map.values.reduce(:+) %></th>
<th width="15%"><%= total_shixun_score %></th>
</tr>
</tfoot>
</table>

@ -0,0 +1 @@
$('.competition-detail-course').html("<%= j(render :partial => 'competition_team_detail_course') %>");

@ -0,0 +1 @@
$('.competition-detail-shixun').html("<%= j(render :partial => 'competition_team_detail_shixun') %>");

@ -3,7 +3,7 @@
<span class="color-grey-3 font-18 fl">战队详情</span>
<%= link_to '返回', enroll_competition_path(@competition), class: 'color-grey-9 fr' %>
</p>
<div class="edu-back-white mb20">
<div class="edu-back-white mb20 competition-detail-shixun">
<p class="pt20 pb20 font-16"><span class="modalTitle">实训项目</span></p>
<table width="100%" class="tBodyScroll edu-txt-center" cellpadding="0" cellspacing="0">
<thead class="lastPart">
@ -17,64 +17,22 @@
</tr>
</thead>
<tbody>
<%
total_myshixun_count = 0
total_forked_myshixun_count = 0
total_shixun_score = 0
%>
<% @shixuns.each do |shixun| %>
<%
total_myshixun_count += shixun.myshixuns_count
total_forked_myshixun_count += shixun['forked_myshixun_count'].to_i
valid_course_count = @course_count_map.fetch(shixun.id, 0)
valid_student_count = @original_myshixun_count_map.fetch(shixun.id, 0)
score =
if shixun.fork_from.blank?
500 + 50 * valid_course_count + 10 * valid_student_count
else
100 + 10 * valid_course_count + 5 * valid_student_count
end
@forked_shixun_map.each do |shixun_id, fork_from_id|
next if fork_from_id != shixun.id
score += 100 + 10 * @forked_map.fetch(shixun_id, 0) + 5 * @forked_myshixun_count_map.fetch(shixun_id, 0)
end
total_shixun_score += score
%>
<tr>
<td width="10%"><%= shixun.creator.show_real_name %></td>
<td width="40%" class="edu-txt-left">
<%= link_to shixun_path(shixun), target: '_blank' do %>
<span class="task-hide fl" style="max-width: 410px;"><%= shixun.name %></span>
<% end %>
<% if shixun.fork_from.blank? %>
<span class="connectTag ml10">原创</span>
<% end %>
</td>
<td width="10%"><%= shixun.myshixuns_count.to_i.zero? ? '--' : shixun.myshixuns_count.to_i %></td>
<td width="15%"><%= shixun['forked_myshixun_count'].to_i.zero? ? '--' : shixun['forked_myshixun_count'].to_i %></td>
<td width="10%"><%= @myshixun_count_map.fetch(shixun.id, '--') %></td>
<td width="15%"><%= score.zero? ? '--' : score %></td>
</tr>
<% end %>
<tr><td colspan="100" style="height: 300px;text-align: center">加载中...</td></tr>
</tbody>
<tfoot class="tfootLastPart">
<tr class="color-orange font-16">
<th width="10%" class="color-grey-6">合计</th>
<th width="40%" class="edu-txt-left"><%= @shixuns.size %></th>
<th width="10%"><%= total_myshixun_count %></th>
<th width="15%"><%= total_forked_myshixun_count %></th>
<th width="10%"><%= @myshixun_count_map.values.reduce(:+) %></th>
<th width="15%"><%= total_shixun_score %></th>
<th width="40%" class="edu-txt-left"></th>
<th width="10%"></th>
<th width="15%"></th>
<th width="10%"></th>
<th width="15%"></th>
</tr>
</tfoot>
</table>
</div>
<div class="edu-back-white mb20">
<div class="edu-back-white mb20 competition-detail-course">
<p class="pt20 pb20 font-16"><span class="modalTitle">翻转课堂</span></p>
<table width="100%" class="tBodyScroll edu-txt-center" cellpadding="0" cellspacing="0">
<thead class="lastPart">
@ -88,41 +46,16 @@
</tr>
</thead>
<tbody>
<%
total_members_count = 0
total_shixun_homework_count = 0
total_course_score = 0
%>
<% @courses.each do |course| %>
<%
total_members_count += course.members_count.to_i
total_shixun_homework_count += course['shixun_homework_count'].to_i
score = 500 + 5 * @course_shixun_count_map.fetch(course.id, 0) * @course_myshixun_map.fetch(course.id, 0)
total_course_score += score
%>
<tr>
<td width="10%"><%= course.teachers.where(user_id: @team_user_ids).first.user.show_real_name %></td>
<td width="40%" class="edu-txt-left">
<%= link_to course_path(course), target: '_blank' do %>
<span class="task-hide fl" style="max-width: 480px;"><%= course.name %></span>
<% end %>
</td>
<td width="10%"><%= course.members_count %></td>
<td width="15%"><%= course['shixun_homework_count'].presence || '--' %></td>
<td width="10%"><%= @course_myshixun_map.fetch(course.id, '--') %></td>
<td width="15%"><%= score.zero? ? '--' : score %></td>
</tr>
<% end %>
<tr><td colspan="100" style="height: 300px;text-align: center">加载中...</td></tr>
</tbody>
<tfoot class="tfootLastPart">
<tr class="color-orange font-16">
<th width="10%" class="color-grey-6">合计</th>
<th width="40%" class="edu-txt-left"><%= @courses.size %></th>
<th width="10%"><%= total_members_count %></th>
<th width="15%"><%= total_shixun_homework_count %></th>
<th width="10%"><%= @course_myshixun_map.values.reduce(:+) || 0 %></th>
<th width="15%"><%= total_course_score %></th>
<th width="40%" class="edu-txt-left"></th>
<th width="10%"></th>
<th width="15%"></th>
<th width="10%"></th>
<th width="15%"></th>
</tr>
</tfoot>
</table>
@ -131,6 +64,10 @@
<script>
$(function(){
$.ajax({ url: '<%= shixun_detail_competition_team_path(@team) %>', method: 'GET', dataType: 'script' });
$.ajax({ url: '<%= course_detail_competition_team_path(@team) %>', method: 'GET', dataType: 'script' });
if($(".tBodyScroll tbody").get(0).scrollHeight > 420){
$(".tBodyScroll thead").addClass("lastPart");
$(".tBodyScroll tfoot").addClass("tfootLastPart");

@ -76,13 +76,13 @@
extra_data = [
{
name: 'C++项目',
description: "本项目的paddle/fluid/operators/optimizers目录中包含了常见的优化器MomentumAdam等等的c++实现。",
description: "飞桨PaddlePaddle由百度公司开发是目前国内唯一功能完备的端到端开源深度学习平台集深度学习训练和预测框架、模型库、工具组件、服务平台为一体其兼具灵活和效率的开发机制、工业级应用效果的模型、超大规模并行深度学习能力、推理引擎一体化设计以及系统化的服务支持致力于让深度学习技术的创新与应用更简单。<br/>本项目的paddle/fluid/operators/optimizers目录中包含了常见的优化器MomentumAdam等等的c++实现。",
task: '标注../fluid/operators/optimizers/目录下的所有代码文件',
link_name: '官方,优化器',
link_url: 'https://www.paddlepaddle.org.cn/documentation/docs/zh/1.5/api_guides/low_level/optimizer.html'
},{
name: 'Python项目',
description: "本项目的python/paddle/fluid/layers/nn.py中包含了神经网络中大量常见层和操作符的python实现如fc、conv、gru等等。",
description: "飞桨PaddlePaddle由百度公司开发是目前国内唯一功能完备的端到端开源深度学习平台集深度学习训练和预测框架、模型库、工具组件、服务平台为一体其兼具灵活和效率的开发机制、工业级应用效果的模型、超大规模并行深度学习能力、推理引擎一体化设计以及系统化的服务支持致力于让深度学习技术的创新与应用更简单。<br/>本项目的python/paddle/fluid/layers/nn.py中包含了神经网络中大量常见层和操作符的python实现如fc、conv、gru等等。",
task: '标注../paddle/fluid/layers/nn.py代码文件',
link_name: '官方nn',
link_url: 'https://www.paddlepaddle.org.cn/documentation/docs/zh/1.5/api_cn/layers_cn/nn_cn.html'
@ -152,10 +152,6 @@
</ul>
<% if index == 4 %>
<p class="break_word font-18 challenge_describe" style="margin-top: 20px;">
飞桨PaddlePaddle由百度公司开发是目前国内唯一功能完备的端到端开源深度学习平台集深度学习训练和预测框架、模型库、工具组件、服务平台为一体其兼具灵活和效率的开发机制、工业级应用效果的模型、超大规模并行深度学习能力、推理引擎一体化设计以及系统化的服务支持致力于让深度学习技术的创新与应用更简单。
</p>
<ul class="mt30 clearfix">
<% first_section.competition_entries.offset(3).each_with_index do |entry, j| %>
<% row_data = extra_data[j] %>
@ -174,7 +170,7 @@
<% if row_data.present? %>
<p class="challenge_b_d">项目简介</p>
<p class="break-word challenge_b_des" style="min-height: 80px;"><%= raw row_data[:description] %></p>
<p class="break-word challenge_b_des" style="min-height: 260px;"><%= raw row_data[:description] %></p>
<p class="challenge_b_d">标注任务</p>
<% if index ==2 %>
<p class="break-word challenge_b_des" style="color: #FC2F78;min-height: 60px"><%= row_data[:task] %></p>

@ -1,7 +1,7 @@
<div id="competition-header" class="clearfix">
<a href="/" style="margin: 10px 0; display: inline-block;">
<a href="/" style="margin: 10px 0; display: inline-block; margin-left: 25px;">
<img alt="高校智能化教学与实训平台" class="logoimg"
src="/images/educoder/headNavLogo.png?1526520218" style="margin-top:6px">
src="/images/educoder/headNavLogo.png?1526520218" style="margin-top:3px">
</a>
<div class="inline fr">
<ul class="nav-game fl">
@ -74,14 +74,13 @@
<ul class="edu-menu-list edu-menu-lists" style="top:60px;">
<span class="bor-bottom-greyE currentName task-hide"><%= User.current.show_name %></span>
<li><%= link_to '我的课堂', user_path(User.current) %></li>
<li><%= link_to '我的实训', user_path(User.current, :type => 'a_shixun') %></li>
<li><%= link_to '我的实训项目', user_path(User.current, :type => 'a_shixun') %></li>
<li><%= link_to '我的实践课程', user_path(User.current, :type => 'a_path') %></li>
<li><%= link_to '我的开发项目', user_path(User.current, :type => 'a_project') %></li>
<li><%= link_to '我的众包', user_path(User.current, :type => 'a_package') %></li>
<% if User.current.partner.present? %>
<li><%= link_to '客户管理', partner_list_cooperate_path(User.current.partner) %></li>
<% end %>
<li><%= link_to '我的项目', user_path(User.current, :type => 'a_project') %></li>
<li><%= link_to '我的众包', user_path(User.current, :type => 'a_package') %></li>
<% if User.current.department_members.count > 0 %>
<li><%= link_to '学院统计', statistics_college_path(User.current.department_members.first.try(:department)) %></li>
<% end %>

@ -0,0 +1,25 @@
<li class="clearfix" id="require_<%= requirement.id %>">
<p class="clearfix df">
<span class="fl column-second"><%= requirement.position %></span>
<span class="fl flex1 font-bd lineh-20 pt3"><%= requirement.content %></span>
<span class="lineh-20 pt5">
<% if template_major %>
<% if requirement.position == @ec_graduation_requirements.count %>
<a href="javascript:void(0)" class="newAddSubentry" onclick="ShowPanel();" data-tip-down="添加"><i class="iconfont icon-tianjiafangda color-green ml15"></i></a>
<% end %>
<a href="javascript:void(0)" onclick="delete_confirm_box_2('<%= ec_graduation_requirement_path(requirement) %>','是否确认删除?')" data-remote="true" data-method="DELETE" class="mr15 fl" data-tip-down="删除"><i class="iconfont icon-shanchu color-grey-c font-15 fl mt2"></i></a>
<a href="<%= edit_ec_graduation_requirement_path(requirement) %>" class="fl" data-tip-down="编辑" data-remote="true"><i class="iconfont icon-bianjidaibeijing color-green "></i></a>
<% end %>
</span>
</p>
<% if requirement.ec_graduation_subitems.present? %>
<div class="mt10">
<% requirement.ec_graduation_subitems.each do |sub| %>
<p class="clearfix df pr48 mb5 lineh-20">
<span class="fl column-second"><%= "#{requirement.position}-#{sub.position}" %></span>
<span class="fl flex1"><%= sub.content %></span>
</p>
<% end %>
</div>
<% end %>
</li>

@ -1,37 +1,13 @@
<% if @ec_graduation_requirements.present? && @ec_graduation_requirements.count>0 %>
<% @ec_graduation_requirements.each_with_index do |requirement, index| %>
<li class="clearfix" id="require_<%= requirement.id %>">
<p class="clearfix df">
<span class="fl column-second"><%= requirement.position %></span>
<span class="fl flex1 font-bd lineh-20 pt3"><%= requirement.content %></span>
<span class="lineh-20 pt5">
<% if @template_major %>
<% if index+1 == @ec_graduation_requirements.count %>
<a href="javascript:void(0)" class="newAddSubentry" onclick="ShowPanel();" data-tip-down="添加"><i class="iconfont icon-tianjiafangda color-green ml15"></i></a>
<% end %>
<a href="javascript:void(0)" onclick="delete_confirm_box_2('<%= ec_graduation_requirement_path(requirement) %>','是否确认删除?')" data-remote="true" data-method="DELETE" class="mr15 fl" data-tip-down="删除"><i class="iconfont icon-shanchu color-grey-c font-15 fl mt2"></i></a>
<a href="<%= edit_ec_graduation_requirement_path(requirement) %>" class="fl" data-tip-down="编辑" data-remote="true"><i class="iconfont icon-bianjidaibeijing color-green "></i></a>
<% end %>
</span>
</p>
<% if requirement.ec_graduation_subitems.present? %>
<div class="mt10">
<% requirement.ec_graduation_subitems.each_with_index do |sub, index| %>
<p class="clearfix df pr48 mb5 lineh-20">
<span class="fl column-second"><%= "#{requirement.position}-#{sub.position}" %></span>
<span class="fl flex1"><%= sub.content %></span>
</p>
<% end %>
</div>
<% end %>
</li>
<% @ec_graduation_requirements.each_with_index do |requirement| %>
<%= render :partial => "ec_graduation_requirements/requirement_item", :locals => {:requirement => requirement, :template_major => @template_major} %>
<% end %>
<% elsif @template_major %>
<form id="form_data_for_requirements">
<div class="clearfix ml30 mr30 pt20 pb20 bor-top-greyE" id="requirementNew">
<p class="df mb20"><input type="hidden" name="year_id" value="<%= @year.id %>">
<span class="column-second lineh-40" id="sequenceNum">1</span>
<input type="text" class="input-flex-40 mr20" name="requirement">
<textarea type="text" class="input-flex-40 mr20" name="requirement"></textarea>
<span class="lineh-40">
<a href="javascript:void(0)" class="fl subPlus" data-tip-down="添加"><i class="iconfont icon-tianjiafangda color-green"></i>
</a>
@ -40,14 +16,14 @@
<p class="df mb10">
<span class="column-second lineh-40">
<span class="color-red">* </span><span class="sequence">1-1</span></span>
<input type="text" class="input-flex-40 mr20" name="subitems[]"><span class="lineh-40">
<textarea type="text" class="input-flex-40 mr20" name="subitems[]"><span class="lineh-40"></textarea>
<a href="javascript:void(0)" class="fl subDel" data-tip-down="删除"><i class="iconfont icon-shanchu color-grey-c font-15 fl mt2"></i>
</a>
</span>
</p>
<p class="df mb10">
<span class="column-second lineh-40"><span class="color-red">* </span><span class="sequence">1-2</span></span>
<input type="text" class="input-flex-40 mr20" name="subitems[]">
<textarea type="text" class="input-flex-40 mr20" name="subitems[]"></textarea>
<span class="lineh-40">
<a href="javascript:void(0)" class="fl subDel" data-tip-down="删除"><i class="iconfont icon-shanchu color-grey-c font-15 fl mt2"></i>
</a>
@ -56,7 +32,7 @@
<p class="df mb10">
<span class="column-second lineh-40">
<span class="color-red">* </span><span class="sequence">1-3</span></span>
<input type="text" class="input-flex-40 mr20" name="subitems[]">
<textarea type="text" class="input-flex-40 mr20" name="subitems[]"></textarea>
<span class="lineh-40">
<a href="javascript:void(0)" class="fl subDel" data-tip-down="删除"><i class="iconfont icon-shanchu color-grey-c font-15 fl mt2"></i>
</a>

@ -1,22 +1,22 @@
if($("#form_data_for_requirements").length==0){
var html_begin = "<form id=\"form_data_for_requirements\"><div class=\"clearfix mt20\" id=\"requirementNew\">"
var html_begin = "<form id=\"form_data_for_requirements\"><li class=\"clearfix\"><div class=\"clearfix mt20\" id=\"requirementNew\">"
var html_requirement = '<p class="df mb20">' +
'<span class="column-second lineh-40" id="sequenceNum"><%= @ec_graduation_requirement.position %></span>' +
'<input type="text" class="input-flex-40 mr20" name="requirement" value="<%= @ec_graduation_requirement.content %>">' +
'<textarea type="text" class="input-flex-40 mr20" name="requirement"><%= @ec_graduation_requirement.content %></textarea>' +
'<span class="lineh-40">' +
'<a href="javascript:void(0)" class="fl subPlus" data-tip-down="添加"><i class="iconfont icon-tianjiafangda color-green"></i></a>' +
'</span></p>'
var html_subitems = "";
<% @ec_graduation_requirement.ec_graduation_subitems.each do |sub| %>
html_subitems += '<p class="df mb10">' +
html_subitems += '<p id="edit_subitem_<%= sub.id %>" class="df mb10">' +
'<span class="column-second lineh-40">' +
'<span class="color-red">* </span><span class="sequence"><%= "#{@ec_graduation_requirement.position}-#{sub.position}" %></span>' +
'</span>' +
'<input type="text" class="input-flex-40 mr20" name="subitems[]" value="<%= sub.content %>">' +
'<textarea type="text" class="input-flex-40 mr20" name="subitems[]"><%= sub.content %></textarea>' +
'<span class="lineh-40">' +
'<a href="javascript:void(0)" class="fl subDel" data-tip-down="删除"><i class="iconfont icon-shanchu color-grey-c font-15 fl mt2"></i></a>' +
'<a href="javascript:void(0)" class="fl" data-tip-down="删除" onclick="delete_confirm_box_2('+"'<%= ec_graduation_subitem_path(sub) %>'"+', \'确定要删除吗\')"><i class="iconfont icon-shanchu color-grey-c font-15 fl mt2"></i></a>' +
'</span>' +
'</p>';
<% end %>
@ -26,16 +26,22 @@ var html_submit = "<p class=\"edu-txt-right clearfix pr35\" id=\"AddPanelOperati
"<a href=\"javascript:void(0)\" class=\"defalutCancelbtn fr mr20\" onclick=\"removePanel('require_<%= @ec_graduation_requirement.id %>');\">取消</a>" +
"</p>"
var html_end = "</div></form>"
var html_end = "</div></li></form>"
var html = html_begin + html_requirement + html_subitems + html_submit + html_end
console.log("require_<%= @ec_graduation_requirement.id %>");
$("body").append('<div style="display: none" id="editFormContent">'+$("#require_<%= @ec_graduation_requirement.id %>").html()+'</div>');
$("#require_<%= @ec_graduation_requirement.id %>").empty().append(html);
//$("body").append('<div style="display: none" id="editFormContent">'+$("#require_<%= @ec_graduation_requirement.id %>").html()+'</div>');
$("#require_<%= @ec_graduation_requirement.id %>").hide();
$(html).insertAfter($("#require_<%= @ec_graduation_requirement.id %>"));
$("#requirementNew").find("input[name='requirement']").focus();
}else{
$("#edit_add_notice").removeClass("none").html("请先保存!");
}
var subInputs=document.getElementsByName("subitems[]");
for (var i = 0; i < subInputs.length; i++) {
autoTextarea(subInputs[i], 0, 140);
}
autoTextarea(document.getElementsByName("requirement")[0], 0, 140);

@ -0,0 +1,9 @@
$("#edit_subitem_<%= @ec_graduation_subitem.id %>").remove();
var num=$("#sequenceNum").html();
var sub=$(".sequence");
for(var i=0;i<parseInt(sub.length);i++){
$(sub).eq(i).html(num+"-"+(i+1));
}
LeaveTitle($("[data-tip-down]"),$(".data-tip-down"));
$("#require_<%= @ec_graduation_requirement.id %>").replaceWith("<%= j(render :partial => "ec_graduation_requirements/requirement_item",
:locals => {:requirement => @ec_graduation_requirement, :template_major => true}) %>");

@ -1,7 +1,7 @@
<script id="t:add-Require-Item" type="text/html">
<p class="df mb10">
<span class="column-second lineh-40"><span class="color-red">* </span><span class="sequence">1-1</span></span>
<input type="text" class="input-flex-40 mr20" name="subitems[]"/>
<textarea type="text" class="input-flex-40 mr20" name="subitems[]"></textarea>
<span class="lineh-40">
<a href="javascript:void(0)" class="fl subDel" data-tip-down="删除"><i class="iconfont icon-shanchu color-grey-c font-15 fl mt2"></i></a>
</span>
@ -55,7 +55,13 @@
for(var i=0;i<sub.length;i++){
$(sub).eq(i).html(num+"-"+(i+1));
}
})
var subInputs=document.getElementsByName("subitems[]");
for (var i = 0; i < subInputs.length; i++) {
autoTextarea(subInputs[i], 0, 140);
}
autoTextarea(document.getElementsByName("requirement")[0], 0, 140);
});
//删除子项
$(".subDel").live('click', function () {
del_item=$(this);
@ -69,7 +75,7 @@
'<a href="javascript:void(0)" class="task-btn task-btn-orange fr" onclick="deleteSubItem(del_item);hideModal();">确定</a></div></div>'
pop_box_new(html, 500, 205);
}
})
});
$("input[name='subitems[]'],input[name='requirement']").live("input",function(){
$(this).removeClass("bor-red");
@ -101,18 +107,18 @@
'<p class="df mb20">' +
'<input type="hidden" name="year_id" value="<%= @year.id %>">' +
'<span class="column-second lineh-40" id="sequenceNum">'+liNum+'</span>'+
'<input type="text" class="input-flex-40 mr20" name="requirement"/>'+
'<textarea type="text" class="input-flex-40 mr20" name="requirement"></textarea>'+
'<span class="lineh-40">'+
'<a href="javascript:void(0)" class="fl subPlus" data-tip-down="添加"><i class="iconfont icon-tianjiafangda color-green"></i></a>'+
'</span></p>'+
'<p class="df mb10"><span class="column-second lineh-40"><span class="color-red">* </span><span class="sequence">'+liNum+'-1</span></span>'+
'<input type="text" class="input-flex-40 mr20" name="subitems[]"><span class="lineh-40"><a href="javascript:void(0)" class="fl subDel" data-tip-down="删除">'+
'<textarea type="text" class="input-flex-40 mr20" name="subitems[]"></textarea><span class="lineh-40"><a href="javascript:void(0)" class="fl subDel" data-tip-down="删除">'+
'<i class="iconfont icon-shanchu color-grey-c font-15 fl mt2"></i></a></span></p>'+
'<p class="df mb10"><span class="column-second lineh-40"><span class="color-red">* </span><span class="sequence">'+liNum+'-2</span></span>'+
'<input type="text" class="input-flex-40 mr20" name="subitems[]"><span class="lineh-40"><a href="javascript:void(0)" class="fl subDel" data-tip-down="删除">'+
'<textarea type="text" class="input-flex-40 mr20" name="subitems[]"></textarea><span class="lineh-40"><a href="javascript:void(0)" class="fl subDel" data-tip-down="删除">'+
'<i class="iconfont icon-shanchu color-grey-c font-15 fl mt2"></i></a></span></p>'+
'<p class="df mb10"><span class="column-second lineh-40"><span class="color-red">* </span><span class="sequence">'+liNum+'-3</span></span>'+
'<input type="text" class="input-flex-40 mr20" name="subitems[]"><span class="lineh-40"><a href="javascript:void(0)" class="fl subDel" data-tip-down="删除">'+
'<textarea type="text" class="input-flex-40 mr20" name="subitems[]"></textarea><span class="lineh-40"><a href="javascript:void(0)" class="fl subDel" data-tip-down="删除">'+
'<i class="iconfont icon-shanchu color-grey-c font-15 fl mt2"></i></a></span></p>'+
'<p class="edu-txt-right clearfix pr35" id="AddPanelOperation"><span class="color-red mt3 fl ml60 none" id="option_Item_notice">内容不能为空</span>'+
'<a href="javascript:void(0)" class="defalutSubmitbtn fr" id="submit_sure" onclick="submit_data_for_requirement(\'post\', \'<%= ec_graduation_requirements_path %>\')">保存</a>'+
@ -121,6 +127,11 @@
'</form>';
$(".ListTableLine").append(html);
$("#requirementNew").find("input[name='requirement']").focus();
var subInputs=document.getElementsByName("subitems[]");
for (var i = 0; i < subInputs.length; i++) {
autoTextarea(subInputs[i], 0, 140);
}
autoTextarea(document.getElementsByName("requirement")[0], 0, 140);
flagAdd=false;
}
@ -128,8 +139,8 @@
//取消添加
function removePanel(value){
if(value!=undefined){
$("#"+value).html($("#editFormContent").html());
$("#editFormContent").remove();
$("#"+value).show();
// $("#editFormContent").remove();
}
$("#form_data_for_requirements").remove();
flagAdd=true;
@ -141,9 +152,9 @@
console.log("#########type:"+ type)
console.log("#########url:"+ url)
var requirement = $("input[name='requirement']").val();
var requirement = $("textarea[name='requirement']").val();
if(requirement.trim() == ""){
$("input[name='requirement']").addClass("bor-red");
$("textarea[name='requirement']").addClass("bor-red");
$("#option_Item_notice").removeClass("none").html("内容不能为空");
return;
}
@ -170,7 +181,7 @@
}
})
console.log(in_vain);
$("input[name='requirement']").removeClass("bor-red");
$("textarea[name='requirement']").removeClass("bor-red");
$("input[name='subitems[]']").removeClass("bor-red");
$("#option_Item_notice").addClass("none");
}

@ -58,7 +58,7 @@
<a class="<%= ['requirement_vs_course'].include?(params[:action]) ? "ecTitlefontFFF":"ecTitlefont" %>" href="<%= requirement_vs_courses_ec_major_school_ec_year_path(@year, :ec_major_school_id => @year.ec_major_school_id) %>">课程体系 vs 毕业要求</a>
</li>
<li class="ecimgs">
<a class="ecTitle">7</a>
<a class="ecTitle">8</a>
<a class="ecimgs" href="<%= reach_calculation_info_ec_major_school_ec_year_path(@year, :ec_major_school_id => @year.ec_major_school_id) %>">达成度评价结果</a>
</li>
</ul>

@ -3,17 +3,18 @@
<% if User.current.admin? || (User.current.logged? ) %>
<% if User.current.admin? || ((is_project_manager?(User.current, project) || file.author_id == User.current.id) && project_contains_attachment?(project, file)) %>
<% if User.current.admin? || ((delete_allowed || User.current.id == file.author_id) && file.container_id == project.id && file.container_type == "Project") %>
<i class="fa fa-align-justify color-grey-9">
<ul class="homepagePostSettiongText">
<% if hidden_unproject_infos %>
<li><%= link_to("发&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;送".html_safe, 'javascript:void(0)',:class => "postOptionLink",:onclick=>"show_send('#{file.id}','#{User.current.id}','file')") %></li>
<% else %>
<li><%= link_to("发&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;送".html_safe, 'javascript:void(0)',:class => "postOptionLink",:onclick=>"show_send_hidden('#{file.id}','#{User.current.id}','file')") %></li>
<% end %>
<% if params[:tag_name].blank? %>
<li><%= link_to '更新版本',attachments_versions_path(file, :project_id => project.id), :class => "postOptionLink", :remote => true %></li>
<% else %>
<li><%= link_to '更新版本',attachments_versions_path(file, :tag_name => params[:tag_name].force_encoding("UTF-8"), :project_id => project.id, :other => params[:other]),:class => "postOptionLink",:remote=>true %></li>
<% end %>
<%# if hidden_unproject_infos %>
<!-- <li><%#= link_to("发&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;送".html_safe, 'javascript:void(0)',:class => "postOptionLink",:onclick=>"show_send('#{file.id}','#{User.current.id}','file')") %></li>-->
<%# else %>
<!-- <li><%#= link_to("发&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;送".html_safe, 'javascript:void(0)',:class => "postOptionLink",:onclick=>"show_send_hidden('#{file.id}','#{User.current.id}','file')") %></li>-->
<%# end %>
<%# if params[:tag_name].blank? %>
<!-- <li><%#= link_to '更新版本',attachments_versions_path(file, :project_id => project.id), :class => "postOptionLink", :remote => true %></li>-->
<%# else %>
<!-- <li><%#= link_to '更新版本',attachments_versions_path(file, :tag_name => params[:tag_name].force_encoding("UTF-8"), :project_id => project.id, :other => params[:other]),:class => "postOptionLink",:remote=>true %></li>-->
<%# end %>
<% if project.is_public? %>
<li>
@ -34,15 +35,18 @@
<% end %>
</li>
</ul>
</i>
<% end %>
<% else %>
<ul class="resourceSendO">
<% if hidden_unproject_infos %>
<li><%= link_to("发&nbsp;&nbsp;送".html_safe, 'javascript:void(0)',:class => "postOptionLink2",:onclick=>"show_send('#{file.id}','#{User.current.id}','file')") %></li>
<% else %>
<li><%= link_to("发&nbsp;&nbsp;送".html_safe, 'javascript:void(0)',:class => "postOptionLink2",:onclick=>"show_send_hidden('#{file.id}','#{User.current.id}','file')") %></li>
<% end %>
</ul>
<!-- <i class="fa fa-align-justify color-grey-9">-->
<!-- <ul class="resourceSendO">-->
<%# if hidden_unproject_infos %>
<!-- <li><%#= link_to("发&nbsp;&nbsp;送".html_safe, 'javascript:void(0)',:class => "postOptionLink2",:onclick=>"show_send('#{file.id}','#{User.current.id}','file')") %></li>-->
<%# else %>
<!-- <li><%#= link_to("发&nbsp;&nbsp;送".html_safe, 'javascript:void(0)',:class => "postOptionLink2",:onclick=>"show_send_hidden('#{file.id}','#{User.current.id}','file')") %></li>-->
<%# end %>
<!-- </ul>-->
<!-- </i>-->
<% end %>
<% end %>
</li>

@ -37,7 +37,7 @@
<span class="task-line"></span>
<li><a href="<%= my_account_path %>" class="a_forced">我的主页</a></li>
<li><a href="<%= my_account_path %>" class="a_forced">我的课程</a></li>
<li><a href="<%= shixuns_user_path(User.current) %>" class="a_forced">我的实训</a></li>
<li><a href="<%= shixuns_user_path(User.current) %>" class="a_forced">我的实训项目</a></li>
<li><a href="<%= my_account_path %>" class="a_forced">我的留言</a></li>
<span class="task-line"></span>
<li><a href="<%= my_account_path %>" class="a_forced">账户管理</a></li>

@ -1,13 +1,13 @@
<%= link_to image_tag("/images/educoder/headNavLogo.png", alt:"高校智能化教学与实训平台", class:"logoimg fl ml25 mr60"), home_path %>
<%= link_to image_tag("/images/educoder/headNavLogo.png", alt:"高校智能化教学与实训平台", class:"logoimg fl mr30 ml25 mt10"), home_path %>
<div class="educontents fl">
<div class="head-nav pr">
<ul id="header-nav">
<li class="<%= params[:controller] == "welcome" ? 'active' : '' %>"><%= link_to "首页", home_path %></li>
<!-- <li class="<%#= params[:controller] == "welcome" ? 'active' : '' %>"><%#= link_to "首页", home_path %></li>-->
<li class="<%= subjects_controller.include?(params[:controller]) ? " active" : "" %>"><%= link_to "实践课程", subjects_path %></li>
<li class="<%= course_controller.include?(params[:controller]) ? " active" : "" %>"><%= link_to "翻转课堂", courses_path %></li>
<!-- 精选实训 -->
<li class="pr <%= shixuns_controller.include?(params[:controller]) ? " active" : "" %>"><%= link_to "开发社区", shixuns_path %><img src="/images/educoder/hot-h.png" class="nav-img" /></li>
<li class="pr <%= shixuns_controller.include?(params[:controller]) ? " active" : "" %>"><%= link_to "实训项目", shixuns_path %><img src="/images/educoder/hot-h.png" class="nav-img" /></li>
<% careers = Career.published.order("created_at asc") %>
<% if careers.present? %>
@ -49,7 +49,7 @@ display: none; right:110px;">
</ul>
</div>
<div class="seperateLine"></div>
<input type="text" class="search-input fl" id="search-input" name="search_keyword" placeholder="实践课程/翻转课堂/开发社区/交流问答"/>
<input type="text" class="search-input fl" id="search-input" name="search_keyword" placeholder="实践课程/翻转课堂/实训项目/交流问答"/>
<a href="javascript:void(0)" class="search-icon fl" id="header_keyword_search">
<i class="iconfont icon-sousuo color-blue mt14 fl"></i>
</a>
@ -59,15 +59,14 @@ display: none; right:110px;">
<%= link_to (image_tag(url_to_avatar(User.current), :width =>"34", :height => "34", :class => "radius mt13", :nhname => "avatar_image", :alt=>"头像", :id => "nh_user_logo")), user_path(User.current),:class => "fl" %>
<ul class="edu-menu-list" style="top:60px;">
<span class="bor-bottom-greyE currentName task-hide"><%= User.current.show_name %></span>
<li><%= link_to '我的课堂', user_path(User.current) %></li>
<li><%= link_to '我的实训', user_path(User.current, :type => 'a_shixun') %></li>
<li><%= link_to '我的翻转课堂', user_path(User.current) %></li>
<li><%= link_to '我的实训项目', user_path(User.current, :type => 'a_shixun') %></li>
<li><%= link_to '我的实践课程', user_path(User.current, :type => 'a_path') %></li>
<li><%= link_to '我的开发项目', user_path(User.current, :type => 'a_project') %></li>
<li><%= link_to '我的众包', user_path(User.current, :type => 'a_package') %></li>
<% if User.current.partner.present? %>
<li><%= link_to '客户管理', partner_list_cooperate_path(User.current.partner) %></li>
<% end %>
<li><%= link_to '我的项目', user_path(User.current, :type => 'a_project') %></li>
<li><%= link_to '我的众包', user_path(User.current, :type => 'a_package') %></li>
<% if User.current.department_members.count > 0 %>
<li><%= link_to '学院统计', statistics_college_path(User.current.department_members.first.try(:department)) %></li>
<% end %>
@ -85,19 +84,19 @@ display: none; right:110px;">
<div class="overPart"></div>
<ul class="fl with50 edu-txt-center pr ul-leftline">
<% unless User.current.identity == "学生" %>
<li><%= link_to '新建课堂', new_course_path() %></li>
<li><%= link_to '新建翻转课堂', new_course_path() %></li>
<% end %>
<li><%= link_to '新建实训', new_shixun_path() %></li>
<li><%= link_to '新建实训项目', new_shixun_path() %></li>
<li><%= link_to '新建实践课程', new_subject_path() %></li>
<li><%= link_to '新建项目', new_project_path() %></li>
<li><%= link_to '新建开发项目', new_project_path() %></li>
</ul>
<ul class="fl with50 edu-txt-center">
<% if User.current.profile_completed? %>
<li><%= link_to "加入课堂", join_private_courses_path, :remote => true %></li>
<li><%= link_to "加入项目", applied_join_project_path, :remote => true %></li>
<li><%= link_to "加入翻转课堂", join_private_courses_path, :remote => true %></li>
<li><%= link_to "加入开发项目", applied_join_project_path, :remote => true %></li>
<% else %>
<li><%= link_to "加入课堂", 'javascript:void(0)', onclick: 'showUserProfileModal()' %></li>
<li><%= link_to "加入项目", 'javascript:void(0)', onclick: 'showUserProfileModal()' %></li>
<li><%= link_to "加入翻转课堂", 'javascript:void(0)', onclick: 'showUserProfileModal()' %></li>
<li><%= link_to "加入开发项目", 'javascript:void(0)', onclick: 'showUserProfileModal()' %></li>
<% end %>
</ul>
</div>

@ -16,7 +16,7 @@
<i class="fa fa-product-hunt color-light-green font-20 pl20 pr10 pt5" aria-hidden="true"></i><span>项目</span>
<ul class="color-grey">
<li><%= link_to "我的项目", user_project_community_path(User.current) %></li>
<li><a href="javascript:void(0);" target="_self" onclick="new_projects();">新建项目</a></li>
<li><a href="javascript:void(0);" target="_self" onclick="new_projects();">新建开发项目</a></li>
<li><%= link_to "加入项目", applied_join_project_path, :method => "post", :remote => true %></li>
</ul>
</div>
@ -37,12 +37,12 @@
<div class="list">
<i class="fa fa-gamepad color-light-green font-20 pl20 pr10 pt5" aria-hidden="true"></i><span>实训</span>
<ul class="color-grey">
<li><%= link_to "我的实训", shixuns_user_path(User.current), :target => "_self" %></li>
<li><%= link_to "我的实训项目", shixuns_user_path(User.current), :target => "_self" %></li>
<!-- <li><%#= link_to "新建实训", new_shixun_path, :target => "_blank" %></li>-->
<% if User.current.mail.blank? %>
<li><a href="javascript:void(0)" onclick="shixun_valication()">新建实训</a></li>
<li><a href="javascript:void(0)" onclick="shixun_valication()">新建实训项目</a></li>
<% else %>
<li><%= link_to "新建实训", new_shixun_path, :target => "_self" %></li>
<li><%= link_to "新建实训项目", new_shixun_path, :target => "_self" %></li>
<% end %>
</ul>
</div>
@ -112,6 +112,6 @@
// 新建实训
function shixun_valication(){
sure_box_redirect_btn('<%= security_settings_path %>', '新建实训,请先绑定邮箱','绑定邮箱');
sure_box_redirect_btn('<%= security_settings_path %>', '新建实训项目,请先绑定邮箱','绑定邮箱');
}
</script>

@ -1,15 +1,15 @@
<%= link_to image_tag("/images/educoder/headNavLogo.png", alt:"高校智能化教学与实训平台", class:"logoimg fl ml25 mr60 "), home_path %>
<%= link_to image_tag("/images/educoder/headNavLogo.png", alt:"高校智能化教学与实训平台", class:"logoimg fl mr30 ml25 mt10"), home_path %>
<div class="educontents fl">
<div class="head-nav pr">
<ul id="header-nav">
<li class="<%= params[:controller] == "welcome" ? 'active' : '' %>"><%= link_to "首页", home_path %></li>
<!-- <li class="<%#= params[:controller] == "welcome" ? 'active' : '' %>"><%#= link_to "首页", home_path %></li>-->
<li class="<%= subjects_controller.include?(params[:controller]) ? " active" : "" %>"><%= link_to "实践课程", subjects_path %></li>
<li class="<%= course_controller.include?(params[:controller]) ? " active" : "" %>"><%= link_to "翻转课堂", courses_path %></li>
<li class="pr <%= shixuns_controller.include?(params[:controller]) ? " active" : "" %>"><%= link_to "开发社区", shixuns_path %><img src="/images/educoder/hot-h.png" class="nav-img" /></li>
<li class="pr <%= shixuns_controller.include?(params[:controller]) ? " active" : "" %>"><%= link_to "实训项目", shixuns_path %><img src="/images/educoder/hot-h.png" class="nav-img" /></li>
<% careers = Career.published.order("created_at asc") %>
<% if careers.present? %>
@ -47,7 +47,7 @@
</ul>
</div>
<div class="seperateLine"></div>
<input type="text" class="search-input fl" id="search-input" name="search_keyword" placeholder="实践课程/翻转课堂/开发社区/交流问答"/>
<input type="text" class="search-input fl" id="search-input" name="search_keyword" placeholder="实践课程/翻转课堂/实训项目/交流问答"/>
<a href="javascript:void(0)" class="search-icon fl" id="header_keyword_search">
<!--<svg class="icon fl mt23" width="20px" height="20px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#333333" d="M463.9 804.4c-194.7 0-353.1-158.4-353.1-353.1S269.2 98.2 463.9 98.2 817 256.6 817 451.3 658.6 804.4 463.9 804.4z m0-651.9c-164.8 0-298.8 134-298.8 298.8s134 298.8 298.8 298.8 298.8-134 298.8-298.8-134-298.8-298.8-298.8zM884.9 926.6c-7.2 0-14.4-2.9-19.8-8.6l-198-210.6c-10.3-10.9-9.7-28.1 1.2-38.4 10.9-10.3 28.1-9.8 38.4 1.2l198 210.6c10.3 10.9 9.7 28.1-1.2 38.4-5.2 5-11.9 7.4-18.6 7.4z" /></svg>-->
<i class="iconfont icon-sousuo color-blue mt14 fl"></i>
@ -71,13 +71,13 @@
<div class="edu-menu-list" style="top:60px;width: 240px;">
<div class="overPart"></div>
<ul class="fl with50 edu-txt-center pr ul-leftline">
<li><%= link_to "新建实训", signin_path %></li>
<li><%= link_to "新建实训项目", signin_path %></li>
<li><%= link_to "新建实践课程", signin_path %></li>
<li><%= link_to "新建项目", signin_path %></li>
<li><%= link_to "新建开发项目", signin_path %></li>
</ul>
<ul class="fl with50 edu-txt-center">
<li><%= link_to "加入课堂", signin_path %></li>
<li><%= link_to "加入项目", signin_path %></li>
<li><%= link_to "加入翻转课堂", signin_path %></li>
<li><%= link_to "加入开发项目", signin_path %></li>
</ul>
</div>
</div>

@ -56,10 +56,10 @@
</li>
<% if is_current_user %>
<li id="user_07" class="user_icons_new">
<%= link_to "新建项目", new_project_path(:host=> Setting.host_name), :target => "_blank", :style => "font-size:14px;" %>
<%= link_to "新建开发项目", new_project_path(:host=> Setting.host_name), :target => "_blank", :style => "font-size:14px;" %>
</li>
<li id="user_08" class="user_icons_addproject mb10">
<%= link_to "加入项目", applied_join_project_path, :remote => true, :method => "post", :style => "font-size:14px;" %>
<%= link_to "加入开发项目", applied_join_project_path, :remote => true, :method => "post", :style => "font-size:14px;" %>
</li>
<li id="user_09" class="user_icons_myissues">
<%= link_to "我发布的issue", user_manage_issues_user_path(@user), :target => "_blank", :style => "font-size:14px;" %>

@ -23,7 +23,7 @@
<div class="newHeader" id="nHeader">
<%= render :partial => User.current.logged? ? 'layouts/logined_header' : 'layouts/unlogin_header' %></div>
<div class="cl"></div>
<div class="con_top pt60">
<div class="con_top">
<div id="content" class="sy_contanier">
<%= render :partial => 'layouts/base_project_top' %>
</div>

@ -208,10 +208,10 @@
</li>
<% if is_current_user %>
<li id="user_07" class="user_icons_new">
<a href ="javascript:void(0);" disabled="true">新建项目</a>
<a href ="javascript:void(0);" disabled="true">新建开发项目</a>
</li>
<li id="user_08" class="user_icons_addproject">
<a href ="javascript:void(0);" disabled="true">加入项目</a>
<a href ="javascript:void(0);" disabled="true">加入开发项目</a>
</li>
<!--<li id="user_09" class="user_icons_myissues">-->
<!--<a href="#user_09" >我的任务</a>-->

@ -13,7 +13,7 @@
<tbody>
<% @myshixuns.each do |myshixun| %>
<% edu_giturl = "...." %>
<% gitlab_giturl = @g.project(myshixun.gpid).try(:http_url_to_repo) %>
<% gitlab_giturl = "https://git.educoder.net/#{myshixun.repo_name}.git" %>
<tr>
<td><%= myshixun.id %></td>
<td class="edu-txt-left"><span><%= link_to myshixun.shixun.try(:name), myshixun_path(myshixun), :target => "_blank", :title => myshixun.shixun.try(:name) %></span></td>

@ -57,7 +57,7 @@
<% @shixun_tags.each do |tag| %>
<p data-shixun-value="<%= count %><%= tag.name %>_<%= tag.id %>">
<input name="select<%= count %>" data-value="<%= tag.id %>" <%= shixun.tag_repertoires.map(&:id).include?(tag.id) ? "checked" : "" %> data-shixun="<%= shixun.id %>" type="checkbox" class="select<%= count %> magic-checkbox" id="<%= count %>_<%= tag.name %>_<%= tag.id %>" value="<%= tag.name %>"/>
<label style="top:0px" for="<%= count %>_<%= tag.name %>_<%= tag.id %>" class="task-hide"><%= tag.name %></label>
<label style="top:0px" title="<%= tag.sub_repertoire.try(:name) %>" for="<%= count %>_<%= tag.name %>_<%= tag.id %>" class="task-hide"><%= tag.name %></label>
</p>
<% end %>
</div>

@ -4,9 +4,9 @@
<th width="10%">代理人登录名</th>
<th width="10%">代理人姓名</th>
<th width="20%">学校</th>
<th width="10%">用户注册状态</th>
<th width="10%">竞赛报名状态</th>
<th width="10%">ip</th>
<th width="10%">ip</th>
<th width="20%">负责人</th>
</thead>
<tbody>
@ -19,9 +19,10 @@
<td class="edu-txt-left"><span><%= link_to ua.key, user_path(ua.key), :target => "_blank" %></span></td>
<td><%= link_to user.try(:show_real_name), user_path(user), target:'_blank' %></td>
<td><%= school.name %></td>
<td><%= "--" %></td>
<td><%= ua.action_status == 2 ? "代理之后注册" : "--" %></td>
<td><%= ua.register_status == 2 ? "代理之后报名" : "--" %></td>
<td><%= ua.ip %></td>
<td><%= "理由" %></td>
<td>"--"</td>
</tr>
<% end %>
</tbody>

@ -1,19 +1,10 @@
<%= form_tag(url_for(departments_part_managements_path),:id=>"department_part_search",:method => "post",:remote=>true) do %>
<div class="edu-con-top clearfix mb20 xmt10 bor-grey-e mt10">
<input class="fl task-form-20 task-height-30 ml25" id="shixun_Look_name" name="search" maxlength="" placeholder="输入关键字进行搜索" type="text" >
<a href="javascript:void(0);" class="fl task-btn task-btn-orange ml5 mt2" onclick="$('#department_part_search').submit();">搜索</a>
<a href="javascript:clearSearchCondition();" class="fl task-btn ml5 mt2" id="clear_contents">清除</a>
<%= link_to "关联代理人",add_departments_part_managements_path(),:class => "task-btn task-btn-green fr mt6 mr30" %>
<input name="sx_order" type="hidden">
</div>
<% end %>
<div class="edu-con-bg01 mt15" id="managements_department_part_list">
<%= render :partial => "managements/user_agent_list" %>
</div>
<script>
function clearSearchCondition() {
$("#shixun_Look_name").val("");
$.get('<%= departments_part_managements_path() %>')
$.get('<%= user_agents_managements_path() %>')
}
</script>

@ -22,6 +22,7 @@
</li>
<li class="clearfix mb10">
<span><%= video.title %></span>
<span style="margin-left: 20px;color: grey"><%= number_to_human_size(video.filesize) %></span>
</li>
<% if apply.pending? %>
@ -58,6 +59,7 @@
<script type="text/javascript">
function video_authorization_gree(id){
if(window.confirm("确认同意该视频发布吗?")){
$.ajax({
url: '/managements/video_applies/' + id + '/agree',
type: 'post',
@ -74,4 +76,5 @@
}
})
}
}
</script>

@ -47,7 +47,7 @@
<% end%>
<div class="cl"></div>
<% if activity.homework_type == 3 && activity.homework_detail_group.base_on_project == 1%>
<span class="c_red">系统提示:该作业要求各组长<%=link_to "创建项目", "https://www.trustie.net/projects/new",:class=>"c_red",:title=>"新建项目",:style=>"text-decoration:underline;"%>,组成员加入项目,然后由组长关联项目。谢谢配合!</span>
<span class="c_red">系统提示:该作业要求各组长<%=link_to "创建开发项目", "https://www.trustie.net/projects/new",:class=>"c_red",:title=>"新建开发项目",:style=>"text-decoration:underline;"%>,组成员加入项目,然后由组长关联项目。谢谢配合!</span>
<% elsif activity.homework_type == 3 && activity.homework_detail_group.base_on_project == 0%>
<span class="c_red">系统提示:该作业要求各组长提交作品,提交作品时请添加组成员。谢谢配合!</span>
<% end %>

@ -10,7 +10,7 @@
<input type="text" style="display: none"/> <!--阻止表单自动填充 -->
<input type="password" style="display: none"/> <!--阻止表单自动填充 -->
<div class="mb10 edu-back-white">
<p class="padding10-20 bor-bottom-greyE font-18 color-grey-3">新建项目</p>
<p class="padding10-20 bor-bottom-greyE font-18 color-grey-3">新建开发项目</p>
<div class="padding30-20">
<p class="color-grey-6 font-16 mb15"><%= l(:label_projects_new_name) %></p>
<div class="df">

@ -1,6 +1,6 @@
<div class="BluePopupBox" id="popbox02">
<%= labelled_form_for(Project.new,:remote => "true") do |f| %>
<h2 class="BluePopuph2 fl">新建项目</h2>
<h2 class="BluePopuph2 fl">新建开发项目</h2>
<div class="cl"></div>
<div class="">
<div class="mt10 mb10">

@ -59,7 +59,7 @@
function newshixuns(mail){
if(mail){
sure_box_redirect_btn('<%= security_settings_path %>', '新建实训,请先绑定邮箱','绑定邮箱');
sure_box_redirect_btn('<%= security_settings_path %>', '新建实训项目,请先绑定邮箱','绑定邮箱');
}else{
var a = $("<a href='<%= new_shixun_path %>' target='_blank' style='display:none'>Apple</a>").get(0);

@ -83,7 +83,7 @@
function newshixuns(mail){
if(mail){
sure_box_redirect_btn('<%= security_settings_path %>', '新建实训,请先绑定邮箱','绑定邮箱');
sure_box_redirect_btn('<%= security_settings_path %>', '新建实训项目,请先绑定邮箱','绑定邮箱');
}else{
var a = $("<a href='<%= new_shixun_path %>' target='_blank' style='display:none'>Apple</a>").get(0);

@ -54,7 +54,7 @@
<div class="inline color-grey-6">
<span class="fl ml10 mr10 squareIconSpan substancefont">
新建实训
新建实训项目
</span>
</div>

@ -23,7 +23,7 @@
<div class="cl"></div>
<% if homework_common.homework_type == 3 && homework_common.homework_detail_group.base_on_project == 1%>
<span class="c_red">系统提示:该作业要求各组长<%=link_to "创建项目", new_project_path(:host=>Setting.host_name),:class=>"linkBlue",:title=>"新建项目",:style=>"text-decoration:underline;"%>,组成员加入项目,然后由组长关联项目。谢谢配合!</span>
<span class="c_red">系统提示:该作业要求各组长<%=link_to "创建开发项目", new_project_path(:host=>Setting.host_name),:class=>"linkBlue",:title=>"新建开发项目",:style=>"text-decoration:underline;"%>,组成员加入项目,然后由组长关联项目。谢谢配合!</span>
<% elsif homework_common.homework_type == 3 && homework_common.homework_detail_group.base_on_project == 0%>
<span class="c_red">系统提示:该作业要求各组长提交作品,提交作品时请添加组成员。谢谢配合!</span>
<% end %>

@ -1,6 +1,6 @@
<div class="edu-class-container " >
<p class="mb10"><a href="<%= user_path(@user) %>" class="color-grey-9"><%= @user.show_real_name %> </a> >
<a href="<%= shixuns_path %>" class="color-grey-9">精选实训 </a> > 我的实训 </p>
<a href="<%= shixuns_path %>" class="color-grey-9">精选实训 </a> > 我的实训项目 </p>
<div class="edu-con-bg01" >
<div class="">
<div class="edu-tab clearfix mb20">
@ -45,7 +45,7 @@
// 新建实训
function shixun_new(mail){
if(mail){
sure_box_redirect_btn('<%= security_settings_path %>', '新建实训,请先绑定邮箱','绑定邮箱');
sure_box_redirect_btn('<%= security_settings_path %>', '新建实训项目,请先绑定邮箱','绑定邮箱');
}else{
window.location.href= '<%= new_shixun_path %>';
}

@ -1,7 +1,7 @@
<div class="top_new">
<span class="<%= (@user.user_extensions.identity == 0 && @user.allowed_to?(:add_course, nil, :global => true)) ? 'top_new_bg' : 'top_newcourses_bg'%> fl"></span>
<% if @user.allowed_to?(:add_project, nil, :global => true) %>
<a href="<%= url_for(:controller => 'projects', :action => 'new') %>" class="bgreen_n_btn fr ml10 mt2" target="_blank">新建项目</a>
<a href="<%= url_for(:controller => 'projects', :action => 'new') %>" class="bgreen_n_btn fr ml10 mt2" target="_blank">新建开发项目</a>
<% end %>
<div class="cl"></div>
</div>

@ -1,4 +1,5 @@
<div class="edu-tab-con-box clearfix edu-txt-center">
<% style ||= '' %>
<div class="edu-tab-con-box clearfix edu-txt-center" style="<%= style %>">
<img class="edu-nodata-img mb20" src="/images/educoder/nodata.png"/>
<p class="edu-nodata-p mb20">暂无数据哦~</p>
</div>

@ -1,6 +1,6 @@
<table class="edu-pop-table edu-txt-center" cellspacing="0" cellpadding="0" style="table-layout: fixed;">
<thead>
<th width="10%">ID</th>
<th width="10%">序号</th>
<th width="15%">代理人登录名</th>
<th width="15%">代理人姓名</th>
<th width="20%">注册情况</th>

@ -69,7 +69,7 @@
<!--精选实训 改为 开发社区-->
<div class="clearfix pt20 educontent pr pb20">
<div class="edu-txt-center">
<p class="color-dark edu-txt-center font-24" style="line-height: 30px">开发社区</p>
<p class="color-dark edu-txt-center font-24" style="line-height: 30px">实训项目</p>
<p class="color-grey-cd font-12">DEVELOPMENT COMMUNITY</p>
</div>
<a href="<%= shixuns_path %>" class="moreitem">更多<i class="fa fa-angle-right ml5"></i></a>

@ -1,7 +1,6 @@
<div class="edu-con-bg01 clearfix mt10 bor-grey-e pt10 pb10">
<div class="pl15">
统计总计:
引流总人数<span class="color-red"><%= @agents_count %></span>人,
引流总人数:<span class="color-red"><%= @agents_count %></span>人 | 竞赛成功报名:<span class="color-red"><%= @action_count %></span>
</div>
</div>
<div class="edu-con-bg01 mt15" id="managements_department_part_list">

@ -283,6 +283,8 @@ RedmineApp::Application.routes.draw do ## oauth相关
resources :competition_teams do
member do
get 'exit_team'
get 'shixun_detail'
get 'course_detail'
end
collection do
@ -1008,6 +1010,11 @@ RedmineApp::Application.routes.draw do ## oauth相关
get 'student_eval'
get 'home'
get 'get_home_data'
get 'shixun_time'
get 'shixun_report_count'
get 'teachers'
get 'shixun_chart_data'
get 'student_hot_evaluations'
end
collection do

@ -0,0 +1,16 @@
class MigrateDeleteDepartment < ActiveRecord::Migration
def up
ApplyAddDepartment.where("status= 3 and created_at > '2019-07-25 00:00:00'").each do |apply|
if apply.department.present? && !apply.department.is_auth
user_exs = UserExtensions.where("department_id = #{apply.department_id}")
users = User.where(id: user_exs.pluck(:user_id))
user_exs.update_all(department_id: nil)
users.update_all(profile_completed: false)
apply.department.destroy
end
end
end
def down
end
end

@ -1,7 +1,7 @@
<div class="post-container">
<div loading-spinner></div>
<div class="blue-title">新建项目</div>
<div class="blue-title">新建开发项目</div>
<form novalidate name="classForm">
<div class="course-list-row f13 c-grey3 mt30"><span class="fl ml15 c-grey3">项目名称</span><input class="new-class-input ml25" ng-model="project.name" required placeholder="如:团队协作方法与机制研究" /></div>
<a ng-click="newProject(classForm, project)" ng-class="['finish-btn', {'btn-disabled':!classForm.$valid} ]" >完成</a>

@ -29,8 +29,8 @@
<div class="bottom-tab-wrap mt10">
<a ng-click="newProject()" href="javascript:void(0);" class="weixin-tab link-blue2 border-top">新建项目</a>
<a ng-click="joinProject()" href="javascript:void(0);" class="weixin-tab link-blue2 border-top">加入项目</a>
<a ng-click="newProject()" href="javascript:void(0);" class="weixin-tab link-blue2 border-top">新建开发项目</a>
<a ng-click="joinProject()" href="javascript:void(0);" class="weixin-tab link-blue2 border-top">加入开发项目</a>
</div>
<my-alert message="alertService_1.message" title="alertService_1.title" visible="alertService_1.visible" cb="alertService_1.cb"></my-alert>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

@ -504,6 +504,9 @@ function imageAddInputFiles(inputEl){
function addInputFiles(inputEl,btnId) {
// var clearedFileInput = $(inputEl).clone().val('');
if($("#ajax-indicator").length>0){
$("#ajax-indicator").show();
}
if (inputEl.files) {
// if(inputEl.files.length >= 5){
// alert('一次选择的文件不能超过5个')
@ -527,6 +530,9 @@ function addInputFiles(inputEl,btnId) {
if (count <= 0) count = 1;
$('#upload_file_count').html("<span id=\"count\">" + count + "</span>" + $(inputEl).data('fileCount'));
}
if($("#ajax-indicator").length>0){
$("#ajax-indicator").hide();
}
}
//clearedFileInput.insertAfter('#attachments_fields');
@ -605,6 +611,9 @@ function uploadAndAttachFiles(files, inputEl,btnId) {
addFile(inputEl, this, true,btnId);
});
}
if($("#ajax-indicator").length>0){
$("#ajax-indicator").hide();
}
}
function uploadAndAttachFiles_board(files, inputEl, id,btnId) {

@ -45,21 +45,21 @@ function nh_check_field(params){
if(params.content.isEmpty()){
result=false;
}
if(params.content.html()!=params.textarea.html() || params.issubmit==true){
params.textarea.html(params.content.html());
params.content.sync();
if(params.content.isEmpty()){
params.contentmsg.html('内容不能为空');
params.contentmsg.css({color:'#ff0000'});
params.submit_btn.one('click', function(){
params.form.submit();
});
}else{
params.contentmsg.html('填写正确');
params.contentmsg.css({color:'#008000'});
}
params.contentmsg.show();
}
// if(params.content.html()!=params.textarea.html() || params.issubmit==true){
// params.textarea.html(params.content.html());
// params.content.sync();
// if(params.content.isEmpty()){
// params.contentmsg.html('内容不能为空');
// params.contentmsg.css({color:'#ff0000'});
// params.submit_btn.one('click', function(){
// params.form.submit();
// });
// }else{
// params.contentmsg.html('填写正确');
// params.contentmsg.css({color:'#008000'});
// }
// params.contentmsg.show();
// }
}
return result;
}

@ -80,18 +80,18 @@ function nh_check_field(params){
if(params.content.isEmpty()){
result=false;
}
if(params.content.html()!=params.textarea.html() || params.issubmit==true){
params.textarea.html(params.content.html());
params.content.sync();
if(params.content.isEmpty() || /^\s*<\w*\s*\w*\=\"\w*\"\s*\w*\=\"\w*\:\s*\#\d*\;\s*\w*\-\w*\:\s*\w*\;\"\>[\u4e00-\u9fa5]*<\/\w*\>\s*$/.test(params.textarea.html())){
params.contentmsg.html('内容不能为空');
params.contentmsg.css({color:'#ff0000'});
}else{
params.contentmsg.html('填写正确');
params.contentmsg.css({color:'#008000'});
}
params.contentmsg.show();
}
// if(params.content.html()!=params.textarea.html() || params.issubmit==true){
// params.textarea.html(params.content.html());
// params.content.sync();
// if(params.content.isEmpty() || /^\s*<\w*\s*\w*\=\"\w*\"\s*\w*\=\"\w*\:\s*\#\d*\;\s*\w*\-\w*\:\s*\w*\;\"\>[\u4e00-\u9fa5]*<\/\w*\>\s*$/.test(params.textarea.html())){
// params.contentmsg.html('内容不能为空');
// params.contentmsg.css({color:'#ff0000'});
// }else{
// params.contentmsg.html('填写正确');
// params.contentmsg.css({color:'#008000'});
// }
// params.contentmsg.show();
// }
}
return result;
}

@ -41,7 +41,7 @@ var proxy = "http://localhost:3000"
// proxy = "http://testbdweb.trustie.net"
// proxy = "http://testbdweb.educoder.net"
// proxy ="http://192.168.2.63:3000"
proxy='http://120.27.231.56:48080'
proxy='http://47.96.87.25:48080'
const requestMap={};
// 在这里使用requestMap控制避免用户通过双击等操作发出重复的请求
// 如果需要支持重复的请求考虑config里面自定义一个allowRepeat参考来控制

@ -66,7 +66,9 @@ class CommunityHome extends Component {
}
let xhslist=["路由交换","H3CNA","H3CNE","H3CSE-Routing&Switching","H3CTE","","","H3CNE-SDN","","H3CIE-Routing&SWitching"]
return (
<div className="edu-con-bg01 communityHome" style={{paddingTop: '60px',paddingBottom: '231px'}}>
<div className="edu-con-bg01 communityHome"
// style={{paddingTop: '60px',paddingBottom: '231px'}}
>
<style>{`
.communityHome .ant-carousel .slick-slide {
height: 500px;

@ -233,7 +233,7 @@ input{
.newSystem .newtarget_scoreclass{
padding: 10px 0px !important;
margin: 0px 30px !important;
margin: 0px 20px !important;
}
.newSystem .newtarget_target{

@ -575,7 +575,7 @@ class EcCompletionCalculation extends Component {
if(key===0){
return(
<p key={key} className="clearfix lipadding20im" style={{minWidth: 228*ec_course_targets_count>1300?168.6*(ec_course_targets_count+3):1200+"px"}}>
<p key={key} className="clearfix lipadding20im" style={{minWidth: ec_course_targets_count > 5 ? (76*(ec_course_targets_count+4)+380+15):1200+"px"}}>
<span className="column-1 color-666 mr16">毕业要求</span>
<span className="nowrap329">{item.ec_subitem_content}</span>
<span className="column-1 operationright color-666">达成结果</span>
@ -595,7 +595,7 @@ class EcCompletionCalculation extends Component {
Spintype===false?graduation_list.map((item,key)=>{
return(
<li className={key+1===target_list.length?"clearfix newtarget_target marlr19":"clearfix newtarget_scoreclass marlr19"} key={key} style={{minWidth: 227.4*ec_course_targets_count>1300?162*(ec_course_targets_count+3):1137+"px"}}>
<li className={key+1===target_list.length?"clearfix newtarget_target marlr19":"clearfix newtarget_scoreclass marlr19"} key={key} style={{minWidth: ec_course_targets_count > 5 ? (76*(ec_course_targets_count+4)+380):1200+"px"}}>
{/* <span className="column-1 color-05101A ec_graduation_name">{item.ec_graduation_name}</span> */}
<span className="column-1 color-05101A ec_graduation_name">{key+1}</span>
<span className="column-500 color-05101A" data-tip-down={item.content}>{item.ec_subitem_content}</span>
@ -621,7 +621,7 @@ class EcCompletionCalculation extends Component {
<div className="ListTableLine newSystem mb20" id="school_major_list">
<p className="clearfix padding10im" style={{width: 113*(total_rate_data+4)>1200?(113*(total_rate_data+4.5))+63:1200+"px"}}>
<p className="clearfix padding10im" style={{width: total_rate_data > 5 ? (180 * total_rate_data+226+16) : 1200+"px"}}>
{/*<span className="column-1 color-666 mr16 width86">序号</span>*/}
<span className="column-1 color-666 mr16 width86">课程目标</span>
{/*<span className="column-1 color-666 mr16">姓名</span>*/}
@ -651,7 +651,7 @@ class EcCompletionCalculation extends Component {
}
{ Spintype===true?<Spin className="Spinlarge" indicator={<Icon type="loading" style={{ fontSize: 30 }} spin />}/>:"" }
{
Spintype===false? <li className={"clearfix newtarget_scoreclass lipadding10im margin64px"} style={{width: 113*(total_rate_data+4)>1200?(113*(total_rate_data+4.5))+63:1200+"px"}}>
Spintype===false? <li className={"clearfix newtarget_scoreclass lipadding10im margin64px"} style={{width: total_rate_data > 5 ? (180 * total_rate_data+226+16) : 1200 + "px"}}>
<span className="column-1 color-05101A mr16 width86">占比</span>
{/*colorTransparent*/}
{/*<span className="column-1 color-05101A ec_graduation_name mr16 colorTransparent"> 平均数 </span>*/}

@ -55,7 +55,8 @@ class ecCourseEvaluations extends Component {
isreload:false,
newModallist:false,
isreloads:false,
isSpin:false
isSpin:false,
listSpin:false
}
}
componentWillMount(){
@ -91,7 +92,8 @@ class ecCourseEvaluations extends Component {
let newec_course_id=this.props.match.params.ec_course_id;
this.setState({
ec_course_id:newec_course_id
ec_course_id:newec_course_id,
listSpin:true
})
const url = `/ec_course_evaluations?ec_course_id=`+newec_course_id;
axios.get(url, {
@ -111,7 +113,8 @@ class ecCourseEvaluations extends Component {
course_url:response.data.course_url,
ec_course_id:response.data.ec_course_id,
ec_year_id:response.data.ec_year_id,
ecmanager: response.data.is_manager
ecmanager: response.data.is_manager,
listSpin:false
})
}
}).catch(function (error) {
@ -565,6 +568,7 @@ class ecCourseEvaluations extends Component {
}
sync_course_data=()=>{
this.setState({listSpin:true})
let ec_course_id=this.props.match.params.ec_course_id;
let Url ='/ec_course_achievement_methods/sync_course_data';
axios.post(Url, {
@ -578,14 +582,16 @@ class ecCourseEvaluations extends Component {
this.setState({
// titlemessage: response.data.message+"(支撑关系变更)",
Modallist: response.data.message,
Modallisttype:true
Modallisttype:true,
listSpin:false
})
this.UpdateEvaluations();
}else if(response.data.status===-1){
this.setState({
// titlemessage: response.data.message+"(支撑关系变更)",
Modallist: response.data.message,
Modallisttype:true
Modallisttype:true,
listSpin:false
})
}
@ -596,6 +602,7 @@ class ecCourseEvaluations extends Component {
}
uploadfile=(file)=>{
this.setState({listSpin:true})
let Url =`/ec_course_evaluations/`+file.data+`/import_score`;
const form = new FormData();
form.append('file', file.file);
@ -608,7 +615,8 @@ class ecCourseEvaluations extends Component {
Modallist: '已成功导入'+response.data.count+"条数据",
Modallisttype:true,
isreload:true,
isreloads:true
isreloads:true,
listSpin:false
})
}else if(response.data.status===0){
// message.warning(response.data.message);
@ -617,7 +625,8 @@ class ecCourseEvaluations extends Component {
Modallist:response.data.message,
Modallisttype:true,
isreload:false,
isreloads:false
isreloads:false,
listSpin:false
})
}
}).catch((error) => {
@ -657,6 +666,7 @@ class ecCourseEvaluations extends Component {
saveassclasslist=()=>{
// 列表清空
//搜索框清空
this.setState({isSpin:true});
let{checkevalue}=this.state;
let ec_course_id=this.props.match.params.ec_course_id;
@ -673,7 +683,8 @@ class ecCourseEvaluations extends Component {
this.setState({
Modallist: "关联失败",
Modallisttype:true,
isreload:false
isreload:false,
isSpin:false
})
}else if(response.data.status===0)[
this.setState({
@ -683,7 +694,8 @@ class ecCourseEvaluations extends Component {
assclassvalue:"",
Modallist: "关联成功",
Modallisttype:true,
isreload:true
isreload:true,
isSpin:false
})
]
@ -767,6 +779,7 @@ class ecCourseEvaluations extends Component {
return (
<div className="newMain clearfix">
<Spin delay={500} indicator={<Icon type="loading" style={{ fontSize: 30 }}></Icon>} spinning={this.state.isSpin}>
<Modal
title={titlemessage}
// visible={modeldelet===true&&listid===list.id?true:false}
@ -881,7 +894,7 @@ class ecCourseEvaluations extends Component {
<a className="white-btn edu-blueline-btn fr mr10 mt7 mr20"
onClick={this.associatedclass}
style={{display: course_url === "" && ecmanager === true ? "block" : "none"}}
>关联课堂11s</a>
>关联课堂</a>
<a className="white-btn edu-blueline-btn fr mr10 mt7 mr20"
onClick={this.deleteassociatedclass}
style={{display:course_url!=""&&ecmanager===true?"block":"none"}}
@ -931,9 +944,8 @@ class ecCourseEvaluations extends Component {
</div>
</div>
<Spin spinning={this.state.isSpin}>
<div className="ListTableLine newSystem" id="school_major_list" >
<div className="ListTableLine newSystem" id="school_major_list" >
<p className="clearfix Coursetitle" style={{width:"1200px"}}>
<span className="column-1 color-666" style={{width: "70px"}}></span>
<span className="column-1 color-666" style={{width: "72px"}}>名称</span>
@ -965,9 +977,10 @@ class ecCourseEvaluations extends Component {
明细成绩导入模板
</span>
</p>
<Spin delay={500} className="Spinlarge" indicator={<Icon type="loading" style={{ fontSize: 30 }} />} spinning={this.state.listSpin}>
<div style={{minHeight:'560px'}}>
{
ec_course_evaluation_lists===undefined? <Spin delay={500} className="Spinlarge" indicator={<Icon type="loading" style={{ fontSize: 30 }} spin />}/>:ec_course_evaluation_lists.map((list,m)=>{
ec_course_evaluation_lists && ec_course_evaluation_lists.map((list,m)=>{
return(
<li className={m===ec_course_evaluation_lists.length-1?savetype==='add'?"bordereaeaeas clearfix":'bordereaeaea clearfix':"clearfix"} key={m}
@ -1222,17 +1235,14 @@ class ecCourseEvaluations extends Component {
</div>
}
</div>
</div>
</Spin>
</div>
</div>
{/*<EcCourseEvaluationsbottom*/}
{/*// ec_course_id={ec_course_id}*/}
{/*// schooldata={schooldata}*/}
{/*/>*/}
</Spin>
</div>
);
}

@ -378,7 +378,7 @@ class NewHeader extends Component {
<li className={`${activeShixuns === true ? 'pr active' : 'pr'}`}>
{/* 精选实训 */}
<a href="/shixuns">开发社区</a>
<a href="/shixuns">实训项目</a>
<img src="/images/educoder/hot-h.png" className="nav-img">
</img>
</li>
@ -441,7 +441,7 @@ class NewHeader extends Component {
<li><a href="javascript:void(0)">用户</a></li>
</ul>
</div>
<input type="text" className="search-input fl" id="search-input" name="search_keyword" placeholder="实践课程/翻转课堂/开发社区/交流问答"/>
<input type="text" className="search-input fl" id="search-input" name="search_keyword" placeholder="实践课程/翻转课堂/实训项目/交流问答"/>
<a href="javascript:void(0)" className="search-icon fl" id="header_keyword_search">
{/*<i className="fa fa-search font-16 mt23 color-grey-6"></i>*/}
<i className="iconfont icon-sousuo color-blue"></i>
@ -466,9 +466,9 @@ class NewHeader extends Component {
<span className="bor-bottom-greyE currentName task-hide">{current_user.username}</span>
<li><a href={`/users/${current_user.login}`}>我的课堂</a></li>
{/* p 老师 l 学生 */}
<li><a href={`/users/${current_user.login}?type=${current_user.is_teacher ? 'p_shixun' : 'l_shixun'}`}>我的实训</a></li>
<li><a href={`/users/${current_user.login}?type=${current_user.is_teacher ? 'p_shixun' : 'l_shixun'}`}>我的实训项目</a></li>
<li><a href={`/users/${current_user.login}?type=${current_user.is_teacher ? 'p_path' : 'l_path'}`}>我的实践课程</a></li>
<li><a href={`/users/${current_user.login}?type=p_project`}>我的项目</a></li>
<li><a href={`/users/${current_user.login}?type=p_project`}>我的开发项目</a></li>
<li><a href={`/users/${current_user.login}?type=a_package`}>我的众包</a></li>
<li><a href="/my/account">账号管理</a></li>
<li className="bor-top-greyE"><a href="/logout">退出</a></li>
@ -514,9 +514,9 @@ class NewHeader extends Component {
this.props.user&&this.props.user.is_student=== false || this.props.current_user&&this.props.current_user.is_student==false?
<li><a onClick={()=>this.NewCoursesAndShixuns(1)}>新建课堂</a></li>:""
}
<li><a onClick={()=>this.NewCoursesAndShixuns(2)}>新建实训</a></li>
<li><a onClick={()=>this.NewCoursesAndShixuns(2)}>新建实训项目</a></li>
<li><a onClick={()=>this.NewCoursesAndShixuns(3)}>新建实践课程</a></li>
<li><a onClick={()=>this.NewCoursesAndShixuns(4)}>新建项目</a></li>
<li><a onClick={()=>this.NewCoursesAndShixuns(4)}>新建开发项目</a></li>
</ul>
<ul className="fl with50 edu-txt-center">
<li>

@ -306,7 +306,7 @@ a.postReplyIcon:hover {background:url(../images/post_image_list.png) -40px -29px
.postThemeWrap {width:655px; float:left;position: relative}
.postLikeIcon {background:url(../images/post_image_list.png) 0px -42px no-repeat ;float:right; padding-left:18px; margin-top:3px; -moz-transition :all 0s linear 0s; -webkit-transition :all 0s linear 0s; -o-transition:all 0s linear 0s; transition:all 0s linear 0s;}
.postLikeIcon:hover {background:url(../images/post_image_list.png) 0px -64px no-repeat ; -moz-transition :all 0s linear 0s; -webkit-transition :all 0s linear 0s; -o-transition:all 0s linear 0s; transition:all 0s linear 0s;}
a.AnnexBtn{ background: url(../images/homepage_icon2.png) 0px -343px no-repeat !important; height:20px; display:block; padding-left:20px; color:#888888; -moz-transition :all 0s linear 0s; -webkit-transition :all 0s linear 0s; -o-transition:all 0s linear 0s; transition:all 0s linear 0s;}
a.AnnexBtn{ line-height: 20px; background: url(../images/homepage_icon2.png) 0px -343px no-repeat !important; height:20px; display:block; padding-left:20px; color:#888888; -moz-transition :all 0s linear 0s; -webkit-transition :all 0s linear 0s; -o-transition:all 0s linear 0s; transition:all 0s linear 0s;}
a:hover.AnnexBtn{background: url(../images/homepage_icon2.png) -90px -343px no-repeat !important; color:#3598db; -moz-transition :all 0s linear 0s; -webkit-transition :all 0s linear 0s; -o-transition:all 0s linear 0s; transition:all 0s linear 0s;}
.postEdit {background:url(../images/post_image_list.png) 0px -94px no-repeat; width:18px; height:18px; display:block; float:left;}
.postDelete {background:url(../images/post_image_list.png) -42px -93px no-repeat; width:18px; height:18px; display:block; float:right;}

@ -4,9 +4,9 @@
/*position: fixed;*/
top: 0px;left: 0px;z-index:1000;-moz-box-shadow: 0px 0px 12px rgba(0,0,0,0.1); /* 老的 Firefox */box-shadow: 0px 0px 12px rgba(0,0,0,0.1);}
.newHeader .logoimg{
margin-top: 16px;
margin-top: 13px;
float: left;
width: 97px;
width: 40px;
}
.head-nav{float: left;width: 800px;text-align: center;height: 60px;box-sizing: border-box; min-width: 400px;}
.head-nav ul#header-nav{position: absolute;top: 0px;z-index: 3;height: 60px;box-sizing: border-box;}
@ -612,13 +612,13 @@ p .activity-item:first-child{border-top: 1px solid #eee;}
#competition-content img,#competition-db-content img,#ccfPage img{vertical-align: bottom;}
#hnpage1{background: url('/images/educoder/competition/logo_1.jpg') no-repeat top center;min-height: 820px;}
#competition-header{background:#24292D;height: 60px;width: 100%;padding-right: 40px;box-sizing: border-box;
#competition-header{background:#24292D;height: 60px;width: 100%;padding-right: 25px;box-sizing: border-box;
/*position: fixed;*/
top: 0px;left: 0px;width: 100%;z-index: 1000;}
#competition-header .logoimg{
margin-top: 5px;
float: left;
width: 97px;}
width: 40px;}
.nav-game{position: relative;}
.nav-game li{position: relative;float: left;width: 110px;height: 60px;line-height: 60px;text-align: center;box-sizing: border-box}
@ -673,7 +673,7 @@ a.enterLink{cursor: pointer;color: #418CCD!important;background: none!important;
.second_code_2{min-height: 436px;}
.second_code_3{min-height: 1460px;padding-top: 190px;box-sizing: border-box;position: relative}
.second_code_4{min-height: 1459px;padding-top: 190px;box-sizing: border-box;position: relative}
.second_code_5{min-height: 2314px;padding-top: 190px;box-sizing: border-box;position: relative}
.second_code_5{min-height: 2384px;padding-top: 190px;box-sizing: border-box;position: relative}
.second_code_6{min-height: 1060px;}
.second_code_7{min-height: 1116px;}
.second_code_8{min-height: 711px;}
@ -1584,7 +1584,7 @@ a.newcolor-grey3:hover{
color:#747A7F !important;
}
.homepagePostSetting{
display:none;
/*display:none;*/
}
#describe{
width: 100%;

@ -1096,7 +1096,7 @@ a:hover.link_file_a{ background:url(../images/pic_file.png) 0 -25px no-repeat; c
select.InputBox, input.InputBox, textarea.InputBox {border: 1px solid #D9D9D9;color: #888;height: 28px;line-height: 28px;padding-left: 5px;font-size: 14px;}
.w713 {width: 713px;}
a.BlueCirBtnMini{ display:block;width:40px; height:22px; background-color:#ffffff; line-height:24px; vertical-align:middle; text-align:center; border:1px solid #269ac9; color:#269ac9; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px;}
a.AnnexBtn{ background: url(images/homepage_icon2.png) 0px -343px no-repeat !important; width:70px; height:20px; display:block; padding-left:20px; color:#888888;}
a.AnnexBtn{ line-height: 20px; background: url(images/homepage_icon2.png) 0px -343px no-repeat !important; width:70px; height:20px; display:block; padding-left:20px; color:#888888;}
a:hover.BlueCirBtnMini{ background:#269ac9; color:#fff;}
.sticky_btn_cir{ background:#269ac9; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;}
.locked_btn_cir{background: url("../images/locked.png") 0 0 no-repeat; cursor: default;}
@ -1128,7 +1128,7 @@ a.postReplyIcon:hover {background:url(images/post_image_list.png) -40px -29px no
.postThemeWrap {width:655px; float:left;position: relative}
.postLikeIcon {background:url(images/post_image_list.png) 0px -42px no-repeat ;float:right; padding-left:18px; margin-top:3px;}
.postLikeIcon:hover {background:url(images/post_image_list.png) 0px -64px no-repeat ;}
a.AnnexBtn{ background: url(images/homepage_icon2.png) 0px -343px no-repeat !important; width:70px; height:20px; display:block; padding-left:20px; color:#888888;}
a.AnnexBtn{ line-height: 20px; background: url(images/homepage_icon2.png) 0px -343px no-repeat !important; width:70px; height:20px; display:block; padding-left:20px; color:#888888;}
a:hover.AnnexBtn{background: url(images/homepage_icon2.png) -90px -343px no-repeat !important; color:#3598db;}
.postEdit {background:url(images/post_image_list.png) 0px -94px no-repeat; width:18px; height:18px; display:block; float:left;}
.postDelete {background:url(images/post_image_list.png) -42px -93px no-repeat; width:18px; height:18px; display:block; float:right;}

@ -56,7 +56,7 @@ If you continue to experience problems please contact your Trustie administrator
温馨提示:为了给大家提供更优质的服务
</p>
<p class="font-18">
平台拟于<span style="color: red">2019年7月26日22:00--2019年7月26号23:30</span>进行全面升级,带来不便,敬请谅解!
平台拟于<span style="color: red">2019年8月23日20:00--2019年8月23号24:00</span>进行全面升级,带来不便,敬请谅解!
</p>
</div>
</body>

Loading…
Cancel
Save