Merge branch 'develop' into dev_xucheng

Conflicts:
	public/stylesheets/css/edu-admin.css
This commit is contained in:
XuCheng642 2017-07-14 15:28:23 +08:00
commit fd9dd1b3df
72 changed files with 1386 additions and 151 deletions

View File

@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

View File

@ -0,0 +1,3 @@
// Place all the styles related to the stages controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

View File

@ -963,6 +963,20 @@ class ApplicationController < ActionController::Base
end
end
# gitlab分页定制
def paginateHelperForGitlab obj, pre_size=15
@obj_count = obj.count
@obj_pages = Paginator.new @obj_count, pre_size, params['page']
if obj.kind_of? ActiveRecord::Base or obj.kind_of? ActiveRecord::Relation
obj.limit(@obj_pages.per_page).offset(@obj_pages.offset)
elsif obj.kind_of? Array
obj[0, @obj_pages.per_page]
else
logger.error "[ApplicationController] Error : application_controller#paginateHelper ===> unknow category: #{obj.class}"
raise RuntimeError, 'unknow type, Please input you type into this helper.'
end
end
#查找首页相关信息
def find_first_page
@first_page = FirstPage.find_by_page_type('project')

View File

@ -51,6 +51,7 @@ class ManagementsController < ApplicationController
end
def shixuns
@menu_type = 3
sx_status = params[:status].blank? ? [0, 1, 2, 3] : params[:status].to_i # 搜索实训的状态
keyword = params[:keyword].blank? ? "u_name" : params[:keyword] # 根据姓名/实训名搜索
search = params[:search] # 搜索的字
@ -82,6 +83,73 @@ class ManagementsController < ApplicationController
end
end
# 已发布的实训
def publish_shixuns
@menu_type = 3
@sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order] # 排序
search = params[:search] # 搜索字
keyword = params[:keyword].blank? ? "u_name" : params[:keyword] # 根据姓名/实训名搜索
close = params[:close] # 关闭实训,参数是实训的Id
unless close.blank?
Shixun.find(close).update_attribute(:status, 3)
end
if "u_name" == keyword
# 如果用户搜索为空不用遍历user表直接查找所有实训, 有搜索时才查找user
if search.blank?
@shixuns = Shixun.where(:status => 2).order("created_at #{@sx_order}")
else
user_id = User.where("concat(lastname, firstname) like '%#{search}%'")
@shixuns = Shixun.where(:user_id => user_id, :status => 2).order("created_at #{@sx_order}")
end
else
@shixuns = Shixun.where("name like '%#{search}%'").where(:status => 2).order("created_at #{@sx_order}")
end
@shixuns_count = @shixuns.count
limit = 20
@shixuns_pages = Paginator.new @shixuns_count, limit, params['page'] || 1
@offset ||= @shixuns_pages.offset
@shixuns = paginateHelper @shixuns, limit
respond_to do |format|
format.js
format.html
end
end
# 已关闭的实训
def close_shixuns
@menu_type = 3
@sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order] # 排序
search = params[:search] # 搜索字
keyword = params[:keyword].blank? ? "u_name" : params[:keyword] # 根据姓名/实训名搜索
reopen = params[:reopen] # 从新开启实训,参数是实训的Id
unless reopen.blank?
Shixun.find(reopen).update_attribute(:status, 2)
end
if "u_name" == keyword
# 如果用户搜索为空不用遍历user表直接查找所有实训, 有搜索时才查找user
if search.blank?
@shixuns = Shixun.where(:status => 3).order("updated_at #{@sx_order}")
else
user_id = User.where("concat(lastname, firstname) like '%#{search}%'")
@shixuns = Shixun.where(:user_id => user_id, :status => 3).order("updated_at #{@sx_order}")
end
else
@shixuns = Shixun.where("name like '%#{search}%'").where(:status => 3).order("updated_at #{@sx_order}")
end
@shixuns_count = @shixuns.count
limit = 20
@shixuns_pages = Paginator.new @shixuns_count, limit, params['page'] || 1
@offset ||= @shixuns_pages.offset
@shixuns = paginateHelper @shixuns, limit
respond_to do |format|
format.js
format.html
end
end
def users_trial
@menu_type = 6
@users = User.where(:status => 1).order("created_on desc").all

View File

@ -48,12 +48,12 @@ class MyshixunsController < ApplicationController
jenkins_shixuns = Redmine::Configuration['jenkins_shixuns']
uri = URI("#{jenkins_shixuns}/jenkins-exec/webssh/deleteSSH")
user_id = User.current.id
params = {gameID:@myshixun.id}
params = {gameID:@_params[:id]} # @_params[:id] 是webssh传过来的gameId
res = uri_exec uri, params
if res && res['code'].to_i != 0
raise("实训云平台繁忙繁忙等级93")
end
render :json => {:host => res['address'], :port => res['port'], :username => username, :password => password}
render :jsonp => {:host => res['address'], :port => res['port'], :username => username, :password => password}
rescue Exception => e
logger.error(e)
@message = e.try(:message)

View File

@ -36,17 +36,17 @@ class RepositoriesController < ApplicationController
before_filter :find_repository, :only => [:edit, :update, :destroy, :committers]
before_filter :find_project_repository, :except => [:commits, :shixun_show, :new, :create, :newcreate, :edit, :update, :destroy, :committers,
:newrepo, :to_gitlab, :forked, :export_rep_static, :training_project_extend, :shixun_entry]
:newrepo, :to_gitlab, :forked, :export_rep_static, :training_project_extend, :shixun_entry, :shixun_commit_diff]
# 实训项目新增
before_filter :find_project_and_repository, :only => [:commits, :shixun_show, :shixun_entry]
before_filter :find_project_and_repository, :only => [:commits, :shixun_show, :shixun_entry, :shixun_commit_diff]
# 连接gitlab
# before_filter :connect_gitlab, :only => [:quality_analysis, :commit_diff]
before_filter :find_changeset, :only => [:revision, :add_related_issue, :remove_related_issue]
# before_filter :authorize , :except => [:newrepo,:newcreate,:fork, :to_gitlab, :forked, :project_archive, :quality_analysis, :commit_diff]
before_filter :authorize_visible , :except => [:shixun_show, :newrepo,:newcreate,:fork, :to_gitlab, :forked, :project_archive, :quality_analysis, :commit_diff]
before_filter :authorize_visible , :except => [:shixun_show, :newrepo,:newcreate,:fork, :to_gitlab, :forked, :project_archive, :quality_analysis, :commit_diff, :shixun_commit_diff]
# 版本库新增权限
# before_filter :show_rep, :only => [:show, :stats, :revisions, :revision, :diff, :commit_diff ]
accept_rss_auth :revisions
@ -620,11 +620,15 @@ update
@project_menu_type = 5
@entry = @repository.entry(@path, @rev)
(show_error_not_found; return) unless @entry
limit = 10
limit = 15
# 每次页面的换回值从1开始,但是gitlab的页面查询是从0开始,所以先改变page的类型减一在改回来
@commits = @g.commits(@shixun.gpid, page:(params[:page].to_i - 1).to_s, ref_name:@rev)
@commits_count = params[:commit_count].nil? ? @g.user_static(@shixun.gpid, :rev => @rev).count : params[:commit_count].to_i
@commits_pages = Paginator.new @commits_count, limit, params[:page]
# @commits_pages = Paginator.new @commits_count, limit, params[:page]
@commits_pages = Paginator.new @commits_count, limit, params['page'] || 1
@offset ||= @commits_pages.offset
@commits = paginateHelperForGitlab @commits, limit
render :layout => 'base_shixun'
end
@ -798,6 +802,17 @@ update
render :layout => 'base_projects'
end
def shixun_commit_diff
@commit_diff = @g.commit_diff(@shixun.gpid, params[:changeset_id])
diff = ActiveSupport::JSON.decode(@commit_diff.to_json).first
diff = OpenStruct.new(diff)
@diff_file = Trustie::Gitlab::Diff::File.new(diff)
# @commit_details = @g.commit(@project.gpid, params[:changeset])
render :layout => 'base_shixun'
end
# 实训项目
# 每次提交对应的文件差异
def commit

View File

@ -81,8 +81,9 @@ class ShixunsController < ApplicationController
@order = "created_at"
@sort = "desc"
search = params[:search]
@shixun_all = Shixun.where(:status => [2,3])
@shixuns = @shixun_all.where("name like ?", "%#{search}%").reorder("created_at desc")
@shixun_all_count = Shixun.all.count
@shixuns = Shixun.find_by_sql("select * from shixuns where id in (SELECT distinct(shixun_id) FROM `challenges`) and name like '%#{search}%' order by created_at desc")
#@shixuns = Shixun.where("name like ?", "%#{search}%").reorder("created_at desc")
# @shixun_my_score = Game.find_by_sql("select sum(final_score) as score from games where myshixun_id in (select id from myshixuns where status =1
# and user_id=#{User.current.id} and shixun_id in (SELECT id FROM `shixuns` where status > 1))").first.try(:score).to_i
@shixun_my_score = Experience.find_by_sql("SELECT sum(score) as score FROM `experiences` where user_id=#{User.current.id}").first.try(:score).to_i
@ -167,7 +168,8 @@ class ShixunsController < ApplicationController
@major = params[:major]
@course = params[:course]
@trainee = params[:trainee]
@shixuns = Shixun.where(:status => [2,3])
ids = Shixun.find_by_sql("select group_concat(id) as allId from shixuns where id in (SELECT distinct(shixun_id) FROM `challenges`)")
@shixuns = Shixun.where(:id => ids[0].allId.split(","))
@shixuns = @shixuns.where(:language => @language) unless @language.blank?
@shixuns = @shixuns.where("name like ?", "%#{@search}%") unless @search.blank?
if !@major.blank?

View File

@ -0,0 +1,83 @@
class StagesController < ApplicationController
before_filter :check_authentication
before_filter :find_subject, :only => [ :create]
before_filter :find_stage, :only => [:edit, :update, :destroy]
include ApplicationHelper
def create
if params[:stage_name] && params[:shixun_id]
stage = Stage.new
stage.name = params[:stage_name]
stage.subject_id = @subject.id
stage.user_id = User.current.id
stage.position = @subject.stages.count + 1
ActiveRecord::Base.transaction do
if stage.save
begin
params[:shixun_id].each do |shixun_id|
shixun = Shixun.find shixun_id
stage.stage_shixuns << StageShixun.new(:subject_id => @subject.id, :shixun_id => shixun_id, :position => stage.stage_shixuns.count + 1) if shixun
end
rescue Exception => e
end
end
end
redirect_to subject_path(@subject)
end
end
def edit
respond_to do |format|
format.js
end
end
def update
if params[:stage_name] && params[:shixun_id]
@stage.name = params[:stage_name]
ActiveRecord::Base.transaction do
if @stage.save
begin
@stage.stage_shixuns.destroy_all
params[:shixun_id].each do |shixun_id|
shixun = Shixun.find shixun_id
@stage.stage_shixuns << StageShixun.new(:subject_id => @subject.id, :shixun_id => shixun_id, :position => @stage.stage_shixuns.count + 1) if shixun
end
rescue Exception => e
end
end
end
redirect_to subject_path(@subject)
end
end
def destroy
if User.current.manager_of_subject?(@subject)
@subject.stages.where("position > #{@stage.position}").update_all("position = position - 1")
@stage.destroy
@status = 1
else
@status = 0
end
end
private
def find_subject
@subject = Subject.find_by_id(params[:subject])
if @subject.nil?
render_404
return
end
rescue ActiveRecord::RecordNotFound
render_404
end
def find_stage
@stage = Stage.find(params[:id])
@subject = @stage.subject
rescue ActiveRecord::RecordNotFound
render_404
end
end

View File

@ -1,11 +1,20 @@
class SubjectsController < ApplicationController
layout 'base_subject'
before_filter :require_login
before_filter :check_authentication
before_filter :find_subject, :except => [:index, :create_subject, :new_subject, :append_to_stage]
include ApplicationHelper
def index
@order = params[:order] || "created_at"
bsort = params[:sort] || "desc"
@sort = bsort == "desc" ? "asc" : "desc"
search = params[:search]
@subjects = Subject.where("name like ?", "%#{search}%").reorder("#{@order} #{@sort}")
ids = Subject.find_by_sql("select group_concat(id) as allId from subjects where id in (SELECT distinct(subject_id) FROM `stages`)")
@subjects = Subject.where(:id => ids[0].allId.nil? ? "-1" : ids[0].allId.split(",")).reorder("#{@order} #{bsort}")
@subjects_all_count = @subjects.count
#@subjects = Subject.where("name like ?", "%#{search}%").reorder("#{@order} #{@sort}")
@subjects_count = @subjects.count
@limit = 16
@is_remote = true
@ -15,20 +24,52 @@ class SubjectsController < ApplicationController
render :layout => "base_edu"
end
def create_subject
def show
@stages = @subject.stages
end
def new_subject
if Shixun.where(:user_id => User.current.id).count > 0
@status = 1
@course_lists = CourseList.where(:id => ShixunMajorCourse.where(:shixun_id => Shixun.where(:user_id => User.current.id).map(&:id)).map(&:course_list_id))
else
@status = 0
end
end
def new_subject
if params[:course_list_id]
course = CourseList.find params[:course_list_id]
#Subject.create(:name => )
respond_to do |format|
format.js
end
end
def create_subject
if params[:course_list_id]
course = CourseList.find params[:course_list_id]
if course
subject = Subject.create(:name => course.name, :user_id => User.current.id, :visits => 0, :status => 0, :course_list_id => course.id)
end
end
redirect_to subject_path(subject)
end
def choose_subject_shixun
course_list = @subject.course_list
@shixuns = Shixun.where(:user_id => User.current.id, :status => [0, 1, 2], :id => course_list.shixun_major_courses.map(&:shixun_id))
@shixuns_count = @shixuns.count
@limit = 8
@shixuns_pages = Paginator.new @shixuns_count, @limit, params['page'] || 1
@offset ||= @shixuns_pages.offset
@shixuns = paginateHelper @shixuns, @limit
end
def append_to_stage
@shixuns = Shixun.where(:id => params[:shixun_id])
end
private
# Find subject of id params[:id]
def find_subject
@subject = Subject.find_by_id(params[:id])
render_404 if @subject.nil?
rescue ActiveRecord::RecordNotFound
render_404
end
end

View File

@ -655,6 +655,30 @@ class UsersController < ApplicationController
end
end
# params: index 1 课程 / 2 实训
# search 搜索关键字
def search_shixuns_or_courses
@index = params[:index].to_i
@search = params[:search]
@limit = 16
if 1 == @index
@course_result = Course.where("is_end = 0 and is_delete = 0 and name like '%#{@search}%'").order("created_at desc")
@course_result_count = @course_result.count
@course_result_pages = Paginator.new @course_result_count, @limit, params['page'] || 1
@offset ||= @course_result_pages.offset
@course_result = paginateHelper @course_result, @limit
else
@shixuns_result = Shixun.where(:status => [2,3]).where("name like ?", "%#{@search}%").reorder("created_at desc")
@shixuns_result_count = @shixuns_result.count
@shixun_pages = Paginator.new @shixuns_result_count, @limit, params['page'] || 1
@offset ||= @shixun_pages.offset
@shixuns_result = paginateHelper @shixuns_result, @limit
end
respond_to do |format|
format.html{render :layout=>'base_edu'}
end
end
# 我发布的实训
def shixuns
@my_shixun = true

View File

@ -1925,6 +1925,10 @@ module ApplicationHelper
title << ("我的实训")
elsif params[:controller] == "shixuns" && params[:action] == "index"
title << ("项目实训")
elsif @subject
title << (@subject.name.nil? ? "课程实训" : @subject.name)
elsif params[:controller] == "subjects" && params[:action] == "index"
title << ("课程实训")
elsif @organization
title << (@organization.name.nil? ? "创新源于实践" : @organization.name)
elsif @forum || params[:controller] == "forums"

View File

@ -0,0 +1,2 @@
module StagesHelper
end

View File

@ -6,7 +6,7 @@ class Challenge < ActiveRecord::Base
has_many :challenge_samples, :dependent => :destroy
has_many :test_sets, :dependent => :destroy
has_many :challenge_tags, :dependent => :destroy
has_many :games
has_many :games, :dependent => :destroy
validates_presence_of :subject
validates_presence_of :score

View File

@ -3,7 +3,7 @@ class Myshixun < ActiveRecord::Base
attr_accessible :description, :name, :parent_id, :user_id, :gpid, :forked_from, :visits, :is_public, :identifier
# has_many :users, :through => :myshixun_members
has_many :myshixun_members, :dependent => :destroy
has_one :repository
has_one :repository, :dependent => :destroy
has_many :games, :dependent => :destroy, :order => "games.id ASC"
belongs_to :shixun
has_one :shixun_modify, :dependent => :destroy

View File

@ -13,7 +13,7 @@ class Shixun < ActiveRecord::Base
has_many :users, :through => :shixun_members
has_many :shixun_members, :dependent => :destroy
has_one :repository
has_one :repository, :dependent => :destroy
has_many :homework_commons_shixunses
has_many :challenges, :dependent => :destroy, :order => "challenges.id ASC"
has_many :myshixuns, :dependent => :destroy
@ -77,11 +77,25 @@ class Shixun < ActiveRecord::Base
def shixun_score
score = 0
self.challenges.each do |challenge|
score += challenge.score
score += challenge.score.to_i
end
score
end
def shixun_status
status = ""
case self.status
when 0
status = "编辑中"
when 1
status = "审核中"
when 2
status = "已发布"
when 3
status = "已关闭"
end
end
def collaborators
self.shixun_members.select{|member| member.role == 2} unless self.shixun_members.blank?
end

7
app/models/stage.rb Normal file
View File

@ -0,0 +1,7 @@
class Stage < ActiveRecord::Base
belongs_to :subject
belongs_to :user
attr_accessible :description, :name, :position, :subject_id, :user_id
has_many :stage_shixuns, :dependent => :destroy, :order => "stage_shixuns.position ASC"
end

View File

@ -0,0 +1,6 @@
class StageShixun < ActiveRecord::Base
belongs_to :subject
belongs_to :stage
belongs_to :shixun
attr_accessible :position, :subject_id, :stage_id, :shixun_id
end

View File

@ -1,6 +1,28 @@
class Subject < ActiveRecord::Base
#status :0 编辑中 1 审核中 2 发布
belongs_to :user
belongs_to :course_list
belongs_to :major
attr_accessible :description, :name, :status, :visits, :user_id, :course_list_id, :major_id
has_many :stages, :dependent => :destroy, :order => "stages.id ASC"
has_many :stage_shixuns, :dependent => :destroy
def subject_challenges
count = 0
self.stage_shixuns.each do |stage_shixun|
shixun = stage_shixun.shixun
count += shixun.challenges.count
end
count
end
def subject_score
score = 0
self.stage_shixuns.each do |stage_shixun|
shixun = stage_shixun.shixun
score += shixun.shixun_score
end
score
end
end

View File

@ -938,6 +938,12 @@ class User < Principal
projects.to_a.include?(project)
end
# 超级管理员或者创建者
def manager_of_subject?(subject)
(subject.user == User.current || User.current.admin?) ? true : false
end
# 超级管理员或者role为1
def manager_of_shixun?(shixun)
member = ShixunMember.where(:user_id => self.id, :shixun_id => shixun, :role => [1,2])

View File

@ -1,18 +1,30 @@
<%= javascript_include_tag "/codemirror/lib/codemirror", "/codemirror/mode/javascript/javascript", "/codemirror/addon/hint/show-hint", "/codemirror/addon/hint/javascript-hint", "/codemirror/addon/selection/active-line", "/codemirror/addon/lint/javascript-lint", "/codemirror/addon/lint/css-lint", "/codemirror/addon/lint/lint", "/codemirror/addon/lint/json-lint", "/editormd/lib/codemirror/addon/lint/css-lint" %>
<%= stylesheet_link_tag "/codemirror/lib/codemirror" %>
<style type="text/css">
.CodeMirror{line-height: 1.2; font-size: 14px}
.cm-s-railscasts span.cm-error{background:none;color: #d4cfc9;}
</style>
<div class="autoscroll_new">
<table class="filecontent syntaxhl mt5" style="width:100%">
<tbody>
<% line_num = 1 %>
<% syntax_highlight_lines(filename, Redmine::CodesetUtil.to_utf8_by_setting(content)).each do |line| %>
<tr>
<th class="line-num" id="L<%= line_num %>" style="vertical-align: top;">
<a href="#L<%= line_num %>" style="padding-top: 0px;"><%= line_num %></a>
</th>
<td class="line-code">
<pre style="width:auto;overflow: auto; "><%= line.html_safe %></pre>
</td>
</tr>
<% line_num += 1 %>
<% end %>
<li class="clearfix" xmlns="http://www.w3.org/1999/html" id="edit_code_contents">
<textarea class="" id="content_shixun_show" name="content"><%= Redmine::CodesetUtil.replace_invalid_utf8(content) %></textarea>
</li>
</tbody>
</table>
</div>
</div>
<script>
var shixun_show_CodeMirror = CodeMirror.fromTextArea(document.getElementById("content_shixun_show"), {
lineNumbers: true,
theme: "railscasts",
// extraKeys: {"Ctrl-Q": "autocomplete"}, // 快捷键
indentUnit: 4, //代码缩进为一个tab的距离
matchBrackets: true,
autoRefresh: true,
smartIndent: true,//智能换行
styleActiveLine: true,
lint: true,
readOnly: "nocursor"
});
shixun_show_CodeMirror.setSize("auto","auto");
</script>

View File

@ -41,7 +41,7 @@
<%= link_to '学号排序', course_member_path(@course, :order => "student_id", :role => 'ns', :sort => @sort), :class => "fl #{@order == 'student_id' ? 'color-blue' : ''}", :remote => true %>
<span class="mr5 ml5 fl">|</span>
<%= link_to '姓名排序', course_member_path(@course, :order => "lastname", :role => 'ns', :sort => @sort), :class => "fl #{@order == 'lastname' ? 'color-blue' : ''}", :remote => true %>
<span class="fr right mt10"><input class="pr15 pl5 color-grey" type="text" value="<%= @search %>" id="no_group_student_list_search" placeholder="输入姓名、学号进行搜索"/><i class="fa fa-search font-16 mt8 mr10" onclick="submit_member_no_group_student_search('<%= @course.id %>');" style="color:#ddd;"></i></span>
<span class="fr right mt10"><input class="pr15 pl5 color-grey" type="text" value="<%= @search %>" id="no_group_student_list_search" placeholder="输入姓名、学号进行搜索"/><i class="fa fa-search font-16 mt8 mr10" onclick="submit_member_no_group_student_search('<%= @course.id %>');" style="color:#666;cursor: pointer"></i></span>
</p>
<!--------------学生-------------------->
<ul class="newstudent pl20 pr20 color-grey">

View File

@ -125,7 +125,7 @@
</div>
<div class="cl"></div>
<% if !User.current.member_of_course?(@course) && show_attachment_tip(@course.id, "Course") %>
<div class="resource_tip_box fontGrey2">
<div class="popup_tip_box fontGrey2" style="right:-160px; top:55px;">
<em></em>
<span></span>
<p class="mb5">私有资源:<br/>仅对本班级成员可见</p>

View File

@ -82,7 +82,7 @@
// 测试版
var html = "<iframe src='<%= Redmine::Configuration['webssh'] %>/?Host=" + data.host + "&Port=" + data.port + "&Username=" + data.username + "&Password=" + data.password + "&Gameid=" + data.game_id + "'" + "style='width:100%;border:0;' scrolling='no' id='game_webssh'></iframe>";
// 本地版
var html_local ="<iframe src='http://127.0.0.1:9527?Host=106.75.96.108&Port=30123&Username=root&Password=@pd:lk4+407&Gameid=" +data.game_id + "'" + " style='width:100%;border:0;' scrolling='no' id='game_webssh'></iframe>";
var html_local ="<iframe src='http://127.0.0.1:9527?Host=106.75.96.108&Port=40054&Username=root&Password=123123&Gameid=" +data.game_id + "'" + " style='width:100%;border:0;' scrolling='no' id='game_webssh'></iframe>";
console.log(html);
$("#codotab_con_2").html(html);
var h = $("#games_repository_contents").height() - $("#top_repository").height() - 10;

View File

@ -22,7 +22,9 @@
<img src="/images/inner/img-back-qq.png" width="50" height="50" alt="高校智能化教学与实训平台" class="img-show" >
<ul class="saoma-img-box">
<font></font>
<li><img src="/images/inner/saoma-qq.jpg" width="191" height="252" alt="高校智能化教学与实训平台" class="img-saoma" ></li>
<li>
<a target="_blank" href="//shang.qq.com/wpa/qunwpa?idkey=ef458840dfd0f60fbffff84ea9927a8e48954f8e73b2fb2c03feacdb4139076b"><img src="/images/inner/saoma-qq.jpg" width="191" height="252" alt="高校智能化教学与实训平台" class="img-saoma" ></a>
</li>
</ul>
</li>
</ul>

View File

@ -15,9 +15,9 @@
<a href="javascript:void(0);" id="header_keyword_search"><i class="fa fa-search font-16 mt8 mr10"></i></a>
</div>
<ul class="fl innner-nav">
<li><%= link_to "项目实训", shixuns_path, :class => "new-nav-a font-16", :target => "_blank" %></li>
<li><%= link_to "课程实训", subjects_path, :class => "new-nav-a font-16", :target => "_blank" %></li>
<li><%= link_to "课堂教学", courses_path, :class => "new-nav-a font-16", :target => "_blank" %></li>
<li><%= link_to "项目实训", shixuns_path, :class => "new-nav-a font-16" %></li>
<li><%= link_to "课程实训", subjects_path, :class => "new-nav-a font-16" %></li>
<li><%= link_to "课堂教学", courses_path, :class => "new-nav-a font-16" %></li>
<!-- <li><%#= link_to "论坛", forums_path, :class =>"new-nav-a", :target => "_blank" %></li>-->
<!-- <li><%#= link_to "帮助中心", "#{Setting.protocol}://#{Setting.host_name}/forums/1/memos/1168", :class => "new-nav-a", :target=>"_blank" %></li>-->
@ -55,7 +55,7 @@
</div>
</ul>
<ul class="fr innner-nav">
<li style="margin: 0;"><%= link_to "我的主页", user_path(User.current), :class => "new-nav-a font-16", :target => "_blank" %></li>
<li style="margin: 0;"><%= link_to "我的主页", user_path(User.current), :class => "new-nav-a font-16" %></li>
<div class="cl"></div>
</ul>
<!-- <a href="javascript:void(0);" class="fr inner-nav-mes" style="color:#fff;">
@ -116,13 +116,23 @@
$("#header_keyword_search").live("click", function(){
var keyword = $("input[name='search_keyword']").val(); // 搜索关键字
var index = $("#all_status_show_value").text(); // 搜索课程/项目
index = index == "课堂" ? 1 : 2;
console.log("课堂" === index);
console.log("实训" === index);
if("课堂" === index){
window.location.href = "/courses?search=" + keyword;
}else if("实训" === index){
window.location.href = "/shixuns?search=" + keyword;
}
window.location.href = "<%= search_shixuns_or_courses_users_path %>" + "?search=" + keyword + "&index=" + index;
/* $.ajax({
url: "<%#= search_shixuns_or_courses_users_path %>",
data: {search: keyword, index:index},
dataType: "html"
});*/
});
// 如果是搜索的进来 保留搜索内容
<% if !@search.blank? && params[:action] == "search_shixuns_or_courses" %>
$("input[name='search_keyword']").val("<%= @search %>");
<% if @index == 2 %>
$("#all_status_show_value").text("实训");
<% end %>
<% end %>
});
</script>

View File

@ -24,8 +24,13 @@
<ul class="edu-admin-nav clearfix ">
<li class="fl edu-admin-nav-li"><a href="javascript:void(0);" class="edu-admin-nav-a">主页</a></li>
<li class="fl edu-admin-nav-li"><a href="javascript:void(0);" class="edu-admin-nav-a">课堂+</a></li>
<li class="fl edu-admin-nav-li">
<%= link_to "实训+", shixuns_managements_path, :class => "edu-admin-nav-a" %>
<li class="fl edu-admin-nav-li edu-position <%= 'active' if @menu_type == 3 %>"><a href="javascript:void(0);" class="edu-admin-nav-a">实训</a>
<%#= link_to "实训+", shixuns_managements_path, :class => "edu-admin-nav-a" %>
<ul class="edu-admin-nav-inner edu-absolute">
<li><%= link_to "实训列表", shixuns_managements_path %></li>
<li><%= link_to "已发布的实训", publish_shixuns_managements_path %></li>
<li><%= link_to "已关闭的实训", close_shixuns_managements_path %></li>
</ul>
</li>
<li class="fl edu-admin-nav-li"><a href="javascript:void(0);" class="edu-admin-nav-a">竞赛+</a></li>
<li class="fl edu-admin-nav-li edu-position"><a href="javascript:void(0);" class="edu-admin-nav-a">单位</a>

View File

@ -0,0 +1,50 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title><%= h html_title %></title>
<meta name="description" content="<%= Redmine::Info.app_name %>" />
<meta name="keywords" content="issue,bug,tracker" />
<%= csrf_meta_tag %>
<%= favicon %>
<%= javascript_heads %>
<%= heads_for_theme %>
<%= stylesheet_link_tag 'jquery/jquery-ui-1.9.2','css/edu-popup','css/edu-common', "css/edu-public", 'css/taskstyle', 'css/edu-subject', 'css/moduel', 'css/font-awesome', 'css/edu-tooltipster', 'css/magic-check' %>
<%= call_hook :view_layouts_base_html_head %>
<!-- page specific tags -->
<%= yield :header_tags -%>
</head>
<!--add by huang-->
<body onload="prettyPrint();">
<div class="newContainer"> <!-- 页面全部内容 -->
<div class="newHeader"> <!-- 头部 -->
<%= render :partial => User.current.logged? ? 'layouts/logined_header' : 'layouts/unlogin_header' %>
</div>
<div class="newMain clearfix"> <!-- 主提部分 -->
<div id="subject_top">
<%= render :partial => "subjects/subject_top" %>
</div>
<div class="publich-half">
<%= render_flash_messages %>
<%= yield %>
</div>
<%= call_hook :view_layouts_base_content %>
<div style="clear:both;"></div>
<div class="cl"></div>
</div>
<%= render :partial => 'layouts/footer' %>
<div class="cl"></div>
</div>
<div id="ajax-indicator" style="display:none;">
<span><%= l(:label_loading) %></span>
</div>
<div id="ajax-modal" style="display:none;"></div>
<%= call_hook :view_layouts_base_body_bottom %>
</body>
<!-- MathJax的配置 -->
<script type="text/javascript" src="/javascripts/MathJax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<%= javascript_include_tag 'application', 'cookie',"avatars", 'header','prettify','attachments','edu/application' %>
</html>

View File

@ -0,0 +1,54 @@
<table class="edu-pop-table edu-txt-center" cellspacing="0" cellpadding="0" style="table-layout: fixed;">
<thead>
<th width="10%">ID</th>
<th class="table_Name_text" width="30%">实训名称</th>
<th width="8%">顶</th>
<th width="8%">踩</th>
<th width="8%">未通关</th>
<th width="8%">已开启</th>
<th width="8%">创建者</th>
<th class="eud-pointer" width="11%">关闭时间<i class="fa <%= @sx_order == "desc" ? "fa-long-arrow-down" : "fa-long-arrow-up" %> color-light-green ml5" title="功能完善中,敬请期待"></i></th>
<th width="9%">操作</th>
</thead>
<tbody>
<% @shixuns.each do |shixun| %>
<tr>
<td><%= shixun.identifier %></td>
<td><span class="table_Name_text"><%= link_to shixun.name, shixun_path(shixun), :target => "_blank", :title => shixun.name %></span></td>
<td>
<%= PraiseTread.where(:praise_tread_object_id => shixun.challenges, :praise_tread_object_type => "Challenge").count %>
</td>
<td>
<%= PraiseTread.where(:praise_tread_object_id => shixun.challenges, :praise_tread_object_type => "ChallengeTread").count %>
</td>
<td><%= Myshixun.where(:shixun_id => shixun.id, :status => 0).count %></td>
<td><%= Myshixun.where(:shixun_id => shixun.id).count %></td>
<td><%= shixun.owner.try(:show_name) %></td>
<td><%= format_time shixun.updated_at %></td>
<td class="operate">
<%= link_to "重新打开", close_shixuns_managements_path(:reopen => shixun.id), :class => "", :remote => true %>
</td>
</tr>
<% end %>
</tbody>
</table>
<div class="cl"></div>
<div style="text-align:center;" class="new_expand">
<div class="pages_user_show" style="width:auto; display:inline-block;margin: 18px 0;">
<ul id="homework_pository_ref_pages">
<%= pagination_links_full @shixuns_pages, @shixuns_count, :per_page_links => false, :flag => true, :is_new => true %>
</ul>
<div class="cl"></div>
</div>
</div>
<script>
$(".eud-pointer").on("click", function(ev){
var nArrow = $(this).find("i");
var sx_order = nArrow.hasClass("fa-long-arrow-down") ? "asc" : "desc";
$.ajax({
url:"<%= close_shixuns_managements_path %>",
data: {sx_order:sx_order},
dateType: "script"
});
})
</script>

View File

@ -0,0 +1,54 @@
<table class="edu-pop-table edu-txt-center" cellspacing="0" cellpadding="0" style="table-layout: fixed;">
<thead>
<th width="10%">ID</th>
<th class="table_Name_text" width="30%">实训名称</th>
<th width="8%">顶</th>
<th width="8%">踩</th>
<th width="8%">已通关</th>
<th width="8%">已开启</th>
<th width="8%">创建者</th>
<th class="eud-pointer" width="11%">发布时间<i class="fa <%= @sx_order == "desc" ? "fa-long-arrow-down" : "fa-long-arrow-up" %> color-light-green ml5" title="功能完善中,敬请期待"></i></th>
<th width="9%">操作</th>
</thead>
<tbody>
<% @shixuns.each do |shixun| %>
<tr>
<td><%= shixun.identifier %></td>
<td><span class="table_Name_text"><%= link_to shixun.name, shixun_path(shixun), :target => "_blank", :title => shixun.name %></span></td>
<td>
<%= PraiseTread.where(:praise_tread_object_id => shixun.challenges, :praise_tread_object_type => "Challenge").count %>
</td>
<td>
<%= PraiseTread.where(:praise_tread_object_id => shixun.challenges, :praise_tread_object_type => "ChallengeTread").count %>
</td>
<td><%= Myshixun.where(:shixun_id => shixun.id, :status => 1).count %></td>
<td><%= Myshixun.where(:shixun_id => shixun.id).count %></td>
<td><%= shixun.owner.try(:show_name) %></td>
<td><%= format_time shixun.created_at %></td>
<td class="operate">
<%= link_to "关闭", publish_shixuns_managements_path(:close => shixun.id), :class => "", :remote => true %>
</td>
</tr>
<% end %>
</tbody>
</table>
<div class="cl"></div>
<div style="text-align:center;" class="new_expand">
<div class="pages_user_show" style="width:auto; display:inline-block;margin: 18px 0;">
<ul id="homework_pository_ref_pages">
<%= pagination_links_full @shixuns_pages, @shixuns_count, :per_page_links => false, :flag => true, :is_new => true %>
</ul>
<div class="cl"></div>
</div>
</div>
<script>
$(".eud-pointer").on("click", function(ev){
var nArrow = $(this).find("i");
var sx_order = nArrow.hasClass("fa-long-arrow-down") ? "asc" : "desc";
$.ajax({
url:"<%= publish_shixuns_managements_path %>",
data: {sx_order:sx_order},
dateType: "script"
});
})
</script>

View File

@ -22,7 +22,7 @@
<td class="operate">
<!--<a class="fl" href="<%#= shixun_path(shixun) %>" date-methods="delete" data-remote="true">删除</a>-->
<% if shixun.status == 0 %>
<%= link_to(l(:button_delete), shixun_path(shixun), :method => :delete, :onClick=>"delcfm()" ) %>
<%= link_to(l(:button_delete), shixun_path(shixun), :method => :delete, :data => { confirm: "确认删除" } ) %>
<% end %>
<span class="fr shixun_webssh">
<input type="checkbox" <%= shixun.webssh ? 'checked' : "" %> value="0" id="join_course_role_<%= shixun.id %>" class="ml-3 mr5 magic-checkbox">

View File

@ -0,0 +1,45 @@
<div class="edu-class-container">
<%= form_tag(url_for(close_shixuns_managements_path), :id => "close_shixuns_search", :method => "post", :remote => true ) do %>
<div class="edu-con-top clearfix mb20">
<select class="fl task-form-15 task-height-30" id="sx_condition_status" style="width: auto;margin: 0 10px;" form="close_shixuns_search" name="keyword">
<option value="u_name">创建者姓名搜索</option>
<option value="sx_name">实训名称搜索</option>
</select>
<input class="fl task-form-20 task-height-30" id="shixun_Look_name" name="search" maxlength="" placeholder="输入关键字进行搜索" type="text" style="height: 21px;">
<li class="fl ml10">
<a href="javascript:void(0)" class="task-btn task-btn-blue" onclick="$('#close_shixuns_search').submit();">搜索</a>
<a href="javascript:clearSearchCondition();" class="task-btn mr10">清除</a>
</li>
<% end %>
</div>
<div class="ex_container" id="management_shixun_list">
<%= render :partial => "managements/close_shixun_list" %>
</div>
</div>
<script>
//导航条的点击事件
$(".all_shixun_Item li").on("click",function(){
$(".all_shixun_Item li").removeClass("all_shixun_Item_on");
$(this).addClass("all_shixun_Item_on");
})
//显示实训
$("#shixun_status").hover(function(){
$(this).find(".edu-dropdown-menu").show();
},function(){
$(this).find(".edu-dropdown-menu").hide();
})
//选择实训
// $(".edu-dropdown-menu p a").on("click",function(){
// $(".edu-dropdown-menu").siblings("span").html($(this).html());
// $(".edu-dropdown-menu").hide();
// $(".edu-dropdown-menu").css("width",$("#shixun_status").width()+50);
// })
//清除查询条件
function clearSearchCondition(){
$("#shixun_Look_name").val("");
$("#sx_condition_status").val("u_name");
$("#sx_status").val("");
}
</script>

View File

@ -0,0 +1 @@
$("#management_shixun_list").html("<%= j(render :partial => "managements/close_shixun_list") %>");

View File

@ -0,0 +1,45 @@
<div class="edu-class-container">
<%= form_tag(url_for(publish_shixuns_managements_path), :id => "publish_shixuns_search", :method => "post", :remote => true ) do %>
<div class="edu-con-top clearfix mb20">
<select class="fl task-form-15 task-height-30" id="sx_condition_status" style="width: auto;margin: 0 10px;" form="publish_shixuns_search" name="keyword">
<option value="u_name">创建者姓名搜索</option>
<option value="sx_name">实训名称搜索</option>
</select>
<input class="fl task-form-20 task-height-30" id="shixun_Look_name" name="search" maxlength="" placeholder="输入关键字进行搜索" type="text" style="height: 21px;">
<li class="fl ml10">
<a href="javascript:void(0)" class="task-btn task-btn-blue" onclick="$('#publish_shixuns_search').submit();">搜索</a>
<a href="javascript:clearSearchCondition();" class="task-btn mr10">清除</a>
</li>
<% end %>
</div>
<div class="ex_container" id="management_shixun_list">
<%= render :partial => "managements/publish_shixun_list" %>
</div>
</div>
<script>
//导航条的点击事件
$(".all_shixun_Item li").on("click",function(){
$(".all_shixun_Item li").removeClass("all_shixun_Item_on");
$(this).addClass("all_shixun_Item_on");
})
//显示实训
$("#shixun_status").hover(function(){
$(this).find(".edu-dropdown-menu").show();
},function(){
$(this).find(".edu-dropdown-menu").hide();
})
//选择实训
// $(".edu-dropdown-menu p a").on("click",function(){
// $(".edu-dropdown-menu").siblings("span").html($(this).html());
// $(".edu-dropdown-menu").hide();
// $(".edu-dropdown-menu").css("width",$("#shixun_status").width()+50);
// })
//清除查询条件
function clearSearchCondition(){
$("#shixun_Look_name").val("");
$("#sx_condition_status").val("u_name");
$("#sx_status").val("");
}
</script>

View File

@ -0,0 +1 @@
$("#management_shixun_list").html("<%= j(render :partial => "managements/publish_shixun_list") %>");

View File

@ -27,7 +27,7 @@
<% else %>
<% if params[:controller] == "shixuns" && params[:action] == "entry_edit" %>
<a href="javascript:void(0);" onclick="$('#shixun_entry_update_id').submit();" class = "fl mr5">保存</a>
<% elsif params[:action] == "shixun_entry" %>
<% elsif params[:action] == "shixun_entry" || params[:action] == "entry_update" %>
<%= link_to "编辑", entry_edit_shixun_path(@shixun, :path => @path, :rev => @rev), :class => "fl mr5", :remote => true %>
<% end %>
<% end %>

View File

@ -16,12 +16,12 @@
<span class="fl c_grey ml15 "><%= time_tag(commit.created_at) %>前</span>
<%= link_to_user_mail(commit.author_email, "pullreques_pull_name fl ml10") %>
<p class="pullreques_pull_txt ml10 fl"><%= commit.title %></p>
<%= link_to truncate(commit.short_id, :length => 20), {:controller => 'repositories', :action => 'commits', :id => @shixun.id, :changeset_id => commit.id}, :target => "_blank", :class => "fr mr15 c_grey" %>
<%= link_to truncate(commit.short_id, :length => 20), {:controller => 'repositories', :action => 'shixun_commit_diff', :id => @shixun, :changeset_id => commit.id}, :target => "_blank", :class => "fr mr15 c_grey" %>
<% unless get_commit_issues(commit.short_id, @shixun.id, 0).nil? %>
<% get_commit_issues(commit.short_id, @shixun.id, 0).each do |issue_id| %>
<div class="btn-commit-issue btn-blue mb5 mr5 fr">
<% if issue_id == "more" %>
<%= link_to "更多", {:controller => 'repositories', :action => 'commit_diff', :id => @shixun.id, :changeset => commit.id}, :target => "_blank", :class => "commit_id_value mr5" %>
<%= link_to "更多", {:controller => 'repositories', :action => 'commit_diff', :id => @shixun, :changeset => commit.id}, :target => "_blank", :class => "commit_id_value mr5" %>
<% else %>
<%= link_to "##{issue_id}", issue_path(issue_id), :target => "_blank", :class => "commit_id_value mr5" %>
<% end %>
@ -35,15 +35,15 @@
</div>
<% end %>
<div class="cl"></div>
<div style="text-align:center;">
<div class="pages" style="width:auto; display:inline-block;">
<div class="pages_right_min" style="width:auto; display:inline-block;">
<ul id="homework_pository_ref_pages">
<%= pagination_links_full @commits_pages, @commits_count, :per_page_links => false, :remote => false, :flag => true, :is_new => true %>
</ul>
<div class="cl"></div>
</div>
</div>
<div class="cl"></div>
<%= call_hook(:view_repositories_show_contextual, { :repository => @repository, :project => @shixun }) %>
<% html_title(l(:label_change_plural)) -%>

View File

@ -0,0 +1,24 @@
<div class="container-big">
<div class="new_roadmap_conbox mb10" >
<div class="new_roadmap_info_top clear ">
<%=link_to "<span class='new_roadmap_icons_back mr5'></span>返回提交历史".html_safe,
{:action => 'commits', :path => to_path_param(@path), :id => @shixun, :repository_id => @repository.identifier_param,
:rev => @rev, :page => 1 ,:commit_count =>"#{@changesets_all_count}"}, :class => "fl linkBlue2 mt3" %>
</div>
</div>
<% unless @commit_diff.blank? %>
<% @commit_diff.each do |commit_diff| %>
<div class="showing-changes-row-commit fontGrey2">
<a href="javascript:void(0);" class="linkGrey3" id="changed-files">
<img src="/images/vlicon/file.png" width="18" height="20" style="vertical-align:middle;" class="mr5" /><%= commit_diff.new_path %>
</a>
</div>
<div class="autoscroll">
<%= render :partial => 'repositories/change_diff', :locals => {:change => commit_diff} %>
</div>
<% end %>
<% else %>
<%= render "welcome/no_data" %>
<% end %>
</div>

View File

@ -23,7 +23,7 @@
// version: 2,
singleLineStringErrors: false},*/ // 目前补全js是引入的javascript-hint,因此目前不能指定语言
lineNumbers: true,
theme: "eclipse",
theme: "railscasts",
// extraKeys: {"Ctrl-Q": "autocomplete"}, // 快捷键
indentUnit: 4, //代码缩进为一个tab的距离
matchBrackets: true,

View File

@ -60,7 +60,7 @@
</li>
<li class="clearfix">
<a href="javascript:void(0)" class="task-btn task-btn-blue fr" onclick="submit_new_project();">提交</a>
<%= link_to "取消",user_activities_path(User.current.id),:class => "task-btn fr mr10" %>
<%= link_to "取消", shixuns_path,:class => "task-btn fr mr10" %>
</li>
<% end %>
</ul>
@ -205,6 +205,7 @@
$(".lesson_content").val($(this).attr("data-val"));
} else {
$(".lesson_content").val($(".lesson_content").val() + "," + $(this).attr("data-val"));
$("#shixun_major_course_notice").hide();
}
event.stopPropagation();
} else {

View File

@ -14,6 +14,12 @@
<% else %>
<% @shixuns.each do |shixun| %>
<div class="task-index-list-box fl">
<% if shixun.status < 2 && !User.current.manager_of_shixun?(shixun) %>
<div class="black-half">
<div class="black-half-lock"><i class="fa fa-lock" style="font-size: 50px"></i></div>
<div class="black-half-info font-16">正在编辑中,无法访问</div>
</div>
<% end %>
<div class="task-index-list-box-top xy_box" onclick="shixun_link('<%= shixun.identifier %>')" style="cursor: pointer;">
<p class="task-index-list-title two_lines_show">
<a href="javascript:void(0);"><%= shixun.name %></a>
@ -27,9 +33,9 @@
<p class="xy_level"><%= shixun.shixun_trainee %></p>
</div>
<ul class="task-index-list-box-bottom clearfix">
<li><i class="fa fa-gamepad mr5 color-light-green" title="实训任务"></i><span><%= shixun.challenges.count %></span></li>
<li><i class="fa fa-tasks mr5 color-light-green" title="实训任务"></i><span><%= shixun.challenges.count %></span></li>
<li><i class="fa fa-users mr5 color-light-green" title="已开启实训"></i><span><%= shixun.myshixuns.count %></span></li>
<li><i class="fa fa-viacoin mr5 color-light-green" title="实训总积分"></i><span><%= shixun.shixun_score %></span></li>
<li><i class="fa fa-viacoin mr5 color-light-green" title="实训经验值"></i><span><%= shixun.shixun_score %></span></li>
</ul>
</div>
<% end %>
@ -45,8 +51,16 @@
<% end %>
</div>
<script>
function shixun_link(shixun){
console.log(shixun);
window.open('/shixuns/' + shixun);
}
var timer="";
$(".task-index-list-box").hover(function(ev){
this.fn = function(){
$(this).find(".black-half").show();
}
clearTimeout(timer);
var item=$(this);
timer=setTimeout(this.fn(),500);
},function(){
clearTimeout(timer);
$(this).find(".black-half").hide();
})
</script>

View File

@ -2,11 +2,11 @@
<div class="task-index-head mt20 mb20">
<div class="task-index-head-top">
<h2 class="fl task-inde-head-title">项目实训</h2>
<%= link_to "创建", create_subject_subjects_path(), :remote => true, :class => "task-btn task-btn-green fr mt6" %>
<%= link_to "创建", new_shixun_path, :class => "task-btn task-btn-green fr mt6" %>
<div class="cl"></div>
</div>
<ul class="task-index-head-info clearfix">
<li><span class="color-orange font-bd"><%= @shixun_all.count %></span><br/><span>全部实训</span></li>
<li><span class="color-orange font-bd"><%= @shixun_all_count %></span><br/><span>全部实训</span></li>
<li><span class="color-orange font-bd"><%= @current_user_had_passed %></span><br/><span>你已通过</span></li>
<li><span class="color-orange font-bd"><%= @shixun_my_score %></span><br/><span>累计经验值</span></li>
</ul>

View File

@ -0,0 +1,49 @@
<%= form_for(@stage, :html => {:id => 'new_stage_form'}) do |f| %>
<div class="stage-item mb20 clearfix">
<div class="stage clearfix mb20">
<li class="fl font-16 font-bd">阶段<span class="font-16 font-bd"><%= @stage.position %></span></li>
<li class="fr">
<a class="task-btn color_white bc-grey del-editstage" onclick="cancel_edit(<%= @stage.id %>);">取消</a>
<a class="course-bth-blue color_white" onclick="saveeidtsatge(this);">保存</a>
</li>
</div>
<div class="stage-entry clearfix">
<li class="fl mr10"><label class="stage-name-label"><span class="color-orange mr5">*</span>名称:</label></li>
<li class="fl" style="width: 90%;">
<input class="panel-form-width-100 panel-form-height-30 panel-box-sizing box-border stage-name" value="<%= @stage.name %>" name="stage_name" style="background: none;" maxlength="100" placeholder="请输入阶段名称,最多100个字符,如基础知识、第1章等" size="100" type="text">
<p class="color-red" style="height: 25px;"><span id="stage_name_notice" style="display: none;"><i class="fa fa-exclamation-circle color-red mr5"></i>阶段名称不能为空</span></p>
<%= link_to '+选择实训', choose_subject_shixun_subject_path(@subject), :remote => true, :class => 'add-sx' %>
<p class="color-orange" style="height: 25px;">
<span id="sx_none_notice" class="fl none">至少选择一个实训</span>
<span id="sx_notice" class="fr">选择实训后,在页面上通过拖拽进行排序调整</span>
</p>
</li>
</div>
<div class="adding-stage-item clearfix" id="sortable">
<% @stage.stage_shixuns.each do |stage_shixun| %>
<% shixun = stage_shixun.shixun %>
<div class="task-index-list-box-all fl pr ui-state-default">
<i class="fa fa-times-circle task-close-icon" onclick="deleidtstageitem(this)"></i>
<input name="shixun_id[]" value="<%= shixun.id %>" type="hidden">
<div class="task-index-list-box-top xy_box" style="cursor: pointer;font-weight: normal;">
<p class="task-index-list-title two_lines_show">
<a href="javascript:void(0);" class="color-dark-grey"><%= shixun.name %></a>
</p>
<div class=" clearfix task-index-list-user task_yx_bo">
<a href="javascript:void(0);"><%= image_tag(url_to_avatar(shixun.owner), :width =>"60", :height => "60", :class => "panel-warp-img mr10 fl", :alt=>"头像") %></a>
<span class="task-index-name task-hide fl"><%= shixun.owner.try(:show_name) %></span>
</div>
<div class="cl"></div>
<span class="mt10 mb10"><%= shixun.language %></span>
<p class="xy_level"><%= shixun.shixun_trainee %></p>
</div>
<ul class="task-index-list-box-bottom clearfix" style="font-weight: normal;">
<li><i class="fa fa-tasks mr5 color-light-green" title="实训任务"></i><span><%= shixun.challenges.count %></span></li>
<li><i class="fa fa-users mr5 color-light-green" title="已开启实训"></i><span><%= shixun.myshixuns.count %></span></li>
<li><i class="fa fa-viacoin mr5 color-light-green" title="实训总积分"></i><span><%= shixun.shixun_score %></span></li>
</ul>
</div>
<% end %>
</div>
</div>
<% end %>

View File

@ -0,0 +1,6 @@
<% if @status == 1 %>
$("#stage_div_<%= @stage.id %>").remove();
$("#subject_top").html("<%= j(render :partial => 'subjects/subject_top') %>");
<% else %>
notice_box("删除失败");
<% end %>

View File

@ -0,0 +1,6 @@
var element = document.createElement("div");
$(element).html("<%= j(render :partial => 'stages/edit') %>");
$(element).insertAfter($("#stage_div_<%= @stage.id %>"));
$("#stage_div_<%= @stage.id %>").hide();
$("#sortable").sortable();
$("#sortable").disableSelection();

View File

@ -1,4 +1,4 @@
<div class="task-popup" style="width:820px;">
<div class="task-popup" style="width:500px;">
<div class="task-popup-title clearfix">
<h3 class="fl color-grey">选择课程</h3>
<a href="javascript:void(0);" class="pop_close"><i class="fa fa-times-circle font-18 link-color-grey fr mt5"></i></a>
@ -10,13 +10,13 @@
<% @course_lists.each do |course| %>
<li>
<input type="radio" class="none" id="course_list_<%= course.id %>" name="course_list_id" value="<%= course.id %>">
<label for="course_list_<%= course.id %>">离散数学</label>
<label for="course_list_<%= course.id %>" style="cursor: pointer;"><%= course.name %></label>
</li>
<% end %>
</ul>
<p id="lessong_nonechecked_tip" class="color-red none f12">请至少选择一个课程</p>
<li class="clearfix mt10">
<a href="javascript:void(0);" class="task-btn task-btn-blue fr mr60" onclick="submit_choose_shixun()">确定</a>
<a href="javascript:void(0);" class="task-btn task-btn-blue fr" onclick="submit_choose_shixun()">确定</a>
<a href="javascript:void(0);" class="task-btn fr mr10" onclick="hideModal()">取消</a>
</li>
</div>
@ -33,13 +33,9 @@
if($("input[name='course_list_id']:checked").length == 0){
$("#lessong_nonechecked_tip").show();
} else{
$.ajax({
url: '<%= new_subject_subjects_path() %>',
data: {course_list_id: $("input[name='course_list_id']:checked").val()},
remote: true,
success: function(data){
}
});
$("#lessong_nonechecked_tip").hide();
window.location.href = "<%= create_subject_subjects_path() %>" + "?course_list_id=" + $("input[name='course_list_id']:checked").val()
hideModal();
}
}
</script>

View File

@ -0,0 +1,40 @@
<% if @shixuns.count > 0 %>
<table class="edu-pop-table edu-txt-center mb10" style="table-layout: fixed; border: none;" cellspacing="0" cellpadding="0">
<thead>
<tr>
<th class="table_Name_text" width="70%">实训名称</th>
<th width="15%">任务</th>
<th width="15%">状态</th>
</tr>
</thead>
<tbody>
<% @shixuns.each do |shixun| %>
<tr>
<td>
<span class="fl">
<input type="checkbox" name="shixun_id[]" value="<%= shixun.id %>" id="shixun_input_<%= shixun.id %>" class="fl ml-3 mr5 magic-checkbox" style="margin: 13px 0px 5px 5px;">
<label for="shixun_input_<%= shixun.id %>" class="table_Name_text fl" style="top: 0;"><%= shixun.name %></label>
</span>
</td>
<td><%= shixun.challenges.count %></td>
<td><%= shixun.shixun_status %></td>
</tr>
<% end %>
</tbody>
</table>
<% else %>
<p>没有实训可选择</p>
<% end %>
<p id="lessong_nonechecked_tip" class="color-red none f12">请至少选择一个实训</p>
<div>
<div class="pages_user_show fl">
<ul id="homework_pository_ref_pages">
<%= pagination_links_full @shixuns_pages, @shixuns_count, :per_page_links => false, :flag => true, :is_remote => true, :is_new => true %>
</ul>
<div class="cl"></div>
</div>
<div class="fr">
<a href="javascript:void(0);" class="task-btn task-btn-blue fr" onclick="submit_choose_course_shixun()">选择</a>
<a href="javascript:void(0);" class="task-btn fr mr10" onclick="hideModal()">取消</a>
</div>
</div>

View File

@ -0,0 +1,27 @@
<div class="task-popup" style="width:620px;">
<div class="task-popup-title clearfix">
<h3 class="fl color-grey">选择实训</h3>
<a href="javascript:void(0);" class="pop_close"><i class="fa fa-times-circle font-18 link-color-grey fr mt5"></i></a>
</div>
<div class="task-popup-content">
<div class="course-option">
<%= form_for('new_form', :url => append_to_stage_subjects_path(), :remote => true, :method => "post", :html => {:id => 'choose_course_shixun_form'}) do |f| %>
<div class="clearfix" id="course_shixun_list">
<%= render :partial => "course_shixun_list" %>
</div>
<% end %>
</div>
</div>
</div>
<script>
function submit_choose_course_shixun(){
if($("input[name='shixun_id[]']:checked").length == 0){
$("#lessong_nonechecked_tip").show();
} else{
$("#lessong_nonechecked_tip").hide();
$("#choose_course_shixun_form").submit();
hideModal();
}
}
</script>

View File

@ -8,56 +8,57 @@
<li class="fr" style="width: auto">共<span class="color-orange"><%= @subjects_count %></span>个检索结果</li>
</ul>
<div class="content clearfix">
<div class="sub-con fl" style="cursor: default;">
<div class="course-list-index-name">
<a href="/courses/847" title="多媒体大赛(2016年度)" target="_blank">
<p class="font-14 course-list-index-title two_lines_show task-text-center">
多媒体大赛(2016年度)
</p>
</a>
<p class="color-grey pl15 pr15 clearfix" style="text-align: center;">
<span class="" style="margin: 0 10px"><i class="fa fa-gamepad color-light-green pr10" aria-hidden="true" title=""></i><em>179</em></span>
<span class="" style="margin: 0 10px"><i class="fa fa-tasks color-light-green pr10" aria-hidden="true" title=""></i><em>1</em></span>
<span class="" style="margin: 0 10px"><i class="fa fa-viacoin color-light-green pr10" aria-hidden="true" title=""></i><em>1</em></span>
</p>
<p class="color-grey college task-text-center">
长沙大学 蔡世
</p>
</div>
<div class="bot clearfix">
<ul class="fr bot_li">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>...</li>
<li>179</li>
</ul>
</div>
</div>
<div class="sub-con fl" style="cursor: default;">
<div class="course-list-index-name">
<a href="/courses/847" title="多媒体大赛(2016年度)" target="_blank">
<p class="font-14 course-list-index-title two_lines_show task-text-center">
多媒体大赛(2016年度)
</p>
</a>
<p class="color-grey pl15 pr15 clearfix" style="text-align: center;">
<span class="" style="margin: 0 10px"><i class="fa fa-gamepad color-light-green pr10" aria-hidden="true" title=""></i><em>4</em></span>
<span class="" style="margin: 0 10px"><i class="fa fa-tasks color-light-green pr10" aria-hidden="true" title=""></i><em>1</em></span>
<span class="" style="margin: 0 10px"><i class="fa fa-viacoin color-light-green pr10" aria-hidden="true" title=""></i><em>1</em></span>
</p>
<p class="color-grey college task-text-center">
国防科学技术大学 蔡世
</p>
</div>
<div class="bot clearfix">
<ul class="fr bot_li">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
</div>
</div>
<% if @subjects.blank? %>
<div style="background: #fff;padding-bottom: 15px;">
<%= render :partial => "welcome/no_data" %>
</div>
<% else %>
<% @subjects.each do |subject| %>
<div class="sub-con fl" style="cursor: default;">
<% if subject.status < 2 && !User.current.manager_of_subject?(subject) %>
<div class="black-half">
<div class="black-half-lock"><i class="fa fa-lock" style="font-size: 50px"></i></div>
<div class="black-half-info font-16">正在编辑中,无法访问</div>
</div>
<% end %>
<div class="course-list-index-name" onclick="subject_link(<%= subject.id %>)" style="cursor: pointer;">
<p class="font-14 course-list-index-title two_lines_show task-text-center">
<a href="javascript:void(0);"><%= subject.name %></a>
</p>
<div class="clearfix task-index-list-user" style="margin-bottom: 5px">
<a href="javascript:void(0);"><%= image_tag(url_to_avatar(subject.user), :width =>"60", :height => "60", :class => "panel-warp-img mr10 fl", :alt=>"头像") %></a>
<span class="task-index-name task-hide fl"><%= subject.user.try(:show_name) %></span>
</div>
<p class="color-grey college task-text-center">
<% if !subject.user.user_extensions.school_id.blank? && subject.user.user_extensions.school %>
<%= subject.user.user_extensions.school.name %>&nbsp;&nbsp;
<% end %>
</p>
<p class="color-grey pl15 pr15 clearfix" style="text-align: center;">
<span class="" style="margin: 0 10px"><i class="fa fa-gamepad color-light-green pr10" aria-hidden="true" title="实训"></i><em><%= subject.stage_shixuns.count %></em></span>
<span class="" style="margin: 0 10px"><i class="fa fa-tasks color-light-green pr10" aria-hidden="true" title="实训阶段"></i><em><%= subject.subject_challenges %></em></span>
<span class="" style="margin: 0 10px"><i class="fa fa-viacoin color-light-green pr10" aria-hidden="true" title="实训总积分"></i><em><%= subject.subject_score %></em></span>
</p>
</div>
<div class="half-bot clearfix">
<div class="half-bot-content">
<ul class="fr bot_li">
<% if subject.stage_shixuns.count <= 6 %>
<% for i in 1 .. subject.stage_shixuns.count do %>
<li><span><%= i %></span></li>
<% end %>
<% else %>
<li><span>1</span></li>
<li><span>2</span></li>
<li><span>3</span></li>
<li><span>4</span></li>
<li><span>...</span></li>
<li><span><%= subject.stage_shixuns.count %></span></li>
<% end %>
</ul>
</div>
</div>
</div>
<% end %>
<% end %>
</div>

View File

@ -0,0 +1,24 @@
<div class="subhead">
<div class="subhead_content">
<p class="color_white font-16">
<% if !@subject.user.user_extensions.school_id.blank? && @subject.user.user_extensions.school %>
<%= @subject.user.user_extensions.school.name %>&nbsp;&nbsp;
<% end %>
<%= @subject.user.show_name %>
</p>
<div class="clearfix">
<p class="fl font-24 color_white"><%= @subject.name %></p>
<% if @subject.status > 1 %>
<ul class="last-all-count fr" style="display: none;">
<li><i class="fa fa-tasks mr5 color_white" title="实训"></i><span class="color-orange"><%= @subject.stage_shixuns.count %></span></li>
<li><i class="fa fa-users mr5 color_white" title="实训阶段"></i><span class="color-orange"><%= @subject.subject_challenges %></span></li>
<li><i class="fa fa-viacoin mr5 color_white" title="实训总积分"></i><span class="color-orange"><%= @subject.subject_score %></span></li>
</ul>
<% elsif @subject.status == 0 && @subject.stages.count > 0 && User.current.manager_of_subject?(@subject) %>
<!--<a class="course-btn fr">申请发布</a>-->
<% elsif @subject.status == 1 && User.current.manager_of_subject?(@subject) %>
<!--<a class="task-btn color_white bc-grey fr" style="display: none;">撤销发布</a>-->
<% end %>
</div>
</div>
</div>

View File

@ -0,0 +1,26 @@
<% @shixuns.each do |shixun| %>
var html= '<div class="task-index-list-box-all fl pr ui-state-default">' +
'<i class="fa fa-times-circle task-close-icon" onclick="deleidtstageitem(this)"></i>' +
'<input name="shixun_id[]" value="<%= shixun.id %>" type="hidden">' +
'<div class="task-index-list-box-top xy_box" style="cursor: pointer;font-weight: normal;">' +
'<p class="task-index-list-title two_lines_show">' +
'<a href="javascript:void(0);" class="color-dark-grey"><%= shixun.name %></a>' +
'</p>' +
'<div class="clearfix task-index-list-user task_yx_bo">' +
'<a href="javascript:void(0);"><%= image_tag(url_to_avatar(shixun.owner), :width =>"60", :height => "60", :class => "panel-warp-img mr10 fl", :alt=>"头像") %></a>' +
'<span class="task-index-name task-hide fl"><%= shixun.owner.try(:show_name) %></span>' +
'</div>' +
'<div class="cl"></div>' +
'<span class="mt10 mb10"><%= shixun.language %></span>' +
'<p class="xy_level"><%= shixun.shixun_trainee %></p>' +
'</div>' +
'<ul class="task-index-list-box-bottom clearfix" style="font-weight: normal;">' +
'<li><i class="fa fa-tasks mr5 color-light-green" title="实训任务"></i><span><%= shixun.challenges.count %></span></li>' +
'<li><i class="fa fa-users mr5 color-light-green" title="已开启实训"></i><span><%= shixun.myshixuns.count %></span></li>' +
'<li><i class="fa fa-viacoin mr5 color-light-green" title="实训总积分"></i><span><%= shixun.shixun_score %></span></li>' +
'</ul>' +
'</div>';
$("#sortable").append(html);
$("#sortable" ).sortable();
$("#sortable" ).disableSelection();
<% end %>

View File

@ -0,0 +1,6 @@
<% if params[:page] %>
$("#course_shixun_list").html("<%= j(render :partial => "subjects/course_shixun_list") %>");
<% else %>
var htmlvalue = "<%= j(render :partial => 'subjects/my_course_shixun_list') %>";
pop_box_new(htmlvalue, 620, 300);
<% end %>

View File

@ -3,11 +3,11 @@
<div class="task-index-head mt20 mb20">
<div class="header-color">
<h2 class="fl task-inde-head-title">课程实训</h2>
<%= link_to "新建", new_course_path, :class => "task-btn task-btn-green fr mt6" %>
<%= link_to "新建", new_subject_subjects_path, :remote => true, :class => "task-btn task-btn-green fr mt6" %>
<div class="cl"></div>
</div>
<ul class="task-index-head-info clearfix">
<li><span class="color-orange font-bd"><%= Subject.all.count %></span><br/><span >全部课堂</span></li>
<li><span class="color-orange font-bd"><%= @subjects_all_count %></span><br/><span >全部课程实训</span></li>
<li><span class="color-orange font-bd">0</span><br/><span>我已参与</span></li>
</ul>
</div>

View File

@ -2,5 +2,5 @@
notice_sure_box("您还没有创建项目实训,无法组建课程实训");
<% else %>
var htmlvalue = "<%= j(render :partial => 'choose_shixun') %>";
pop_box_new(htmlvalue, 400, 300);
pop_box_new(htmlvalue, 500, 300);
<% end %>

View File

@ -0,0 +1,165 @@
<div class="lesson-saved-list">
<% @stages.each do |stage| %>
<div class="lesson-saved-list-stage" id="stage_div_<%= stage.id %>">
<div class="saved-title clearfix">
<li class="fl"><i class="fa fa-dot-circle-o color-orange mr5 font-16"></i><span class="font-16 font-bd"><%= stage.name %></span></li>
<% if @subject.status == 0 && User.current.manager_of_subject?(@subject) %>
<li class="fr">
<a class="task-btn color_white bc-grey del-editstage" onclick="delete_confirm_box_2('<%= stage_path(stage) %>', '确定要删除该阶段吗?');">删除</a>
<a class="course-bth-blue color_white" onclick="edit_stage(<%= stage.id %>)">编辑</a>
</li>
<% end %>
</div>
<div class="task-index-list clearfix mb20">
<% stage.stage_shixuns.each_with_index do |stage_shixun, index| %>
<% shixun = stage_shixun.shixun %>
<div class="task-index-list-box fl pr">
<div class="task-array"><%= index + 1 %></div>
<div class="task-index-list-box-top xy_box" style="cursor: pointer;" onclick="shixun_link('<%= shixun.identifier %>')">
<p class="task-index-list-title two_lines_show">
<a href="javascript:void(0);"><%= shixun.name %></a>
</p>
<div class=" clearfix task-index-list-user task_yx_bo">
<a href="javascript:void(0);"><%= image_tag(url_to_avatar(shixun.owner), :width =>"60", :height => "60", :class => "panel-warp-img mr10 fl", :alt=>"头像") %></a>
<span class="task-index-name task-hide fl"><%= shixun.owner.try(:show_name) %></span>
</div>
<div class="cl"></div>
<span class="mt10 mb10"><%= shixun.language %></span>
<p class="xy_level"><%= shixun.shixun_trainee %></p>
</div>
<ul class="task-index-list-box-bottom clearfix">
<li><i class="fa fa-tasks mr5 color-light-green" title="实训任务"></i><span><%= shixun.challenges.count %></span></li>
<li><i class="fa fa-users mr5 color-light-green" title="已开启实训"></i><span><%= shixun.myshixuns.count %></span></li>
<li><i class="fa fa-viacoin mr5 color-light-green" title="实训总积分"></i><span><%= shixun.shixun_score %></span></li>
</ul>
</div>
<% end %>
</div>
</div>
<% end %>
</div>
<% if @subject.status == 0 && User.current.manager_of_subject?(@subject) %>
<div class="lesson-edit-content mb20">
<% if @stages.count == 0 %>
<%= form_for('', :url => {:controller => 'stages', :action => 'create', :subject => @subject.id}, :method => "post", :html => {:id => 'new_stage_form'}) do |f| %>
<div class="stage-item mb20 clearfix">
<div class="stage clearfix mb20">
<li class="fl font-16 font-bd">阶段<span class="font-16 font-bd">1</span></li>
<li class="fr">
<a class="task-btn color_white bc-grey del-editstage" onclick="deleditstage(this);">删除</a>
<a class="course-bth-blue color_white" onclick="saveeidtsatge(this);">保存</a>
</li>
</div>
<div class="stage-entry clearfix">
<li class="fl mr10"><label class="stage-name-label"><span class="color-orange mr5">*</span>名称:</label></li>
<li class="fl" style="width: 90%;">
<input class="panel-form-width-100 panel-form-height-30 panel-box-sizing box-border stage-name" name="stage_name" style="background: none;" maxlength="100" placeholder="请输入阶段名称,最多100个字符,如基础知识、第1章等" size="100" type="text">
<p class="color-red" style="height: 25px;"><span id="stage_name_notice" style="display: none;"><i class="fa fa-exclamation-circle color-red mr5"></i>阶段名称不能为空</span></p>
<%= link_to '+选择实训', choose_subject_shixun_subject_path(@subject), :remote => true, :class => 'add-sx' %>
<p class="color-orange" style="height: 25px;">
<span id="sx_none_notice" class="fl none">至少选择一个实训</span>
<span id="sx_notice" class="fr">选择实训后,在页面上通过拖拽进行排序调整</span>
</p>
</li>
</div>
<div class="adding-stage-item clearfix" id="sortable">
</div>
</div>
<% end %>
<% end %>
</div>
<div class="mb20 boxborder-dashed-orange font-bd color-light-grey click_add">
+点击新建阶段选择1至多个实训项目组成一个阶段
</div>
<% end %>
<script>
$(function() {
//初始化拖拽层
$( "#sortable" ).sortable();
$( "#sortable" ).disableSelection();
});
//编辑列表里右上角的删除icon删除单个实训
function deleidtstageitem(item){
$(item).parent(".task-index-list-box-all").remove();
}
//点击新建阶段
$(".click_add").click(function(){
if($("#new_stage_form").length == 1){
notice_box("请先保存正在编辑的内容");
} else{
var counttage=$(".lesson-saved-list-stage").length;
var count=$(".lesson-edit-content .stage-item").length;
count++;
count=count+counttage;
var edithtml="";
edithtml+='<%= form_for('', :url => {:controller => 'stages', :action => 'create', :subject => @subject.id}, :method => 'post', :html => {:id => 'new_stage_form'}) do |f| %>';
edithtml+="<div class=\"stage-item mb20 clearfix\">";
edithtml+="<div class=\"stage clearfix mb20\">";
edithtml+="<li class=\"fl font-16 font-bd\">阶段<span class=\"font-16 font-bd\">"+count+"</span></li>";
edithtml+="<li class=\"fr\">";
edithtml+="<a class=\"task-btn color_white bc-grey mr5 del-editstage\" onclick=\"deleditstage(this);\">删除</a>";
edithtml+="<a class=\"course-bth-blue\" onclick=\"saveeidtsatge(this);\">保存</a>";
edithtml+="</li></div>";
edithtml+="<div class=\"stage-entry clearfix\">";
edithtml+="<li class=\"fl mr10\"><label class=\"stage-name-label\"><span class=\"color-orange mr5\">*</span>名称:</label></li>";
edithtml+="<li class=\"fl\" style=\"width: 90%;\">";
edithtml+="<input class=\"panel-form-width-100 panel-form-height-30 panel-box-sizing box-border stage-name\" name=\"stage_name\" style=\"background: none;\" maxlength=\"100\" placeholder=\"请输入阶段名称,最多100个字符,如基础知识、第1章等\" size=\"100\" type=\"text\">";
edithtml+="<p class=\"color-red\" style=\"height: 25px;\"><span id=\"stage_name_notice\" class=\"stage_name_notice\" style=\"display: none;\"><i class=\"fa fa-exclamation-circle color-red mr5\"></i>阶段名称不能为空</span></p>";
edithtml+='<%= link_to '+选择实训', choose_subject_shixun_subject_path(@subject), :remote => true, :class => 'add-sx' %>';
edithtml+="<p class=\"color-orange\" style=\"height: 25px;\"><span id=\"sx_none_notice\" class=\"fl none\">至少选择一个实训</span><span id=\"sx_notice\" class=\"fr\">选择实训后,在页面上通过拖拽进行排序调整</span></p>";
edithtml+="</li></div>";
edithtml+="<div class=\"adding-stage-item clearfix\" id=\"sortable\">";
edithtml+="</div></div>";
edithtml+="<% end %>";
$(".lesson-edit-content").append(edithtml);
}
});
//删除整个编辑部分
function deleditstage(item){
$("#new_stage_form").remove();
var counttage=$(".lesson-saved-list-stage").length;
for(var i=0;i<$(".lesson-edit-content .stage-item").length;i++){
$(".lesson-edit-content .stage-item").eq(i).find(".stage span").html(counttage+i+1);
}
}
function cancel_edit(id){
$("#new_stage_form").parent().remove();
$("#stage_div_" + id).show();
}
//保存
function saveeidtsatge(item){
//判断是否输入阶段名称
var status = true;
var stagename= $("input[name='stage_name']").val();
if(stagename==""){
status = false;
$("#stage_name_notice").show();
} else{
$("#stage_name_notice").hide();
}
if($("input[name='shixun_id[]']").length == 0){
status = false;
$("#sx_none_notice").show();
} else{
$("#sx_none_notice").hide();
}
if(status){
$("#new_stage_form").submit();
}
}
function edit_stage(id){
if($("#new_stage_form").length == 1){
notice_box("请先保存正在编辑的内容");
} else{
$.ajax({
url: "/stages/" + id +"/edit",
dataType: "script"
});
}
}
</script>

View File

@ -9,7 +9,7 @@
<div class="user_bg_shadow">
<% @shixuns.each do |shixun| %>
<p class="clearfix pl10">
<a href="<%= shixun_path(shixun) %>" target="_blank" class="font-16 first"><i class="fa fa-circle-o color-orange02 font-12 ml5 mr5" aria-hidden="true"></i><%= shixun.name %></a>
<a href="<%= shixun_path(shixun) %>" target="_blank" class="font-16 first"><i class="fa fa-circle-o color-orange02 font-12 ml5 mr5" aria-hidden="true"></i><%= shixun.name.strip %></a>
<span class="font-14 hasmargin"><a href="javascript:void(0);" style="cursor: default;">已解锁第<i><%= had_passed_changllenge_count(shixun, User.current) %></i>关/共<i><%= shixun.challenges.count %></i>关</a></span>
<span class="font-14 hasmargin"><a href="<%= user_path(shixun.user_id) %>" class="link-color-grey03" target="_blank"><%= User.where(:id => shixun.user_id).first.show_name %></a></span>
<span class="font-14 fr mr25 color-grey"><%= format_time shixun.created_at %></span>

View File

@ -0,0 +1,99 @@
<div class="active-class">
<div class="color-grey">
<% if @index == 1 %>
共找到<span style="color: #fc6238;"><%= @course_result_count %></span>个<span style="color: #fc6238;">"<%= @search %>"</span>相关的课堂
<% else %>
共找到<span style="color: #fc6238;"><%= @shixuns_result_count %></span>个<span style="color: #fc6238;">"<%= @search %>"</span>相关的实训
<% end %>
</div>
<div class="content clearfix" id="intelligence_course_list">
<% if !@course_result.blank? %>
<% @course_result.each do | sy | %>
<% sy_author = User.find(sy.tea_id) %>
<div class="sub-con fl" style="cursor: default;">
<div class="task-index-list-box-top">
<a href="<%= course_path(sy) %>" title="<%= sy.name %>" target="_blank">
<p class="font-14 task-index-list-title two_lines_show">
<%= sy.name %>
</p>
</a>
<div class="clearfix task-index-list-user">
<%= link_to image_tag(url_to_avatar(sy_author), :width => "60", :height => "60", :class => "panel-warp-img mr10 fl", :alt => "用户"), user_path(sy_author), :target => '_blank' %>
<%= link_to sy_author.show_name, user_path(sy_author), :class => 'task-index-name task-hide fl', :target => '_blank' %>
</div>
<p class="color-grey">
<% if !sy_author.user_extensions.school_id.blank? && sy_author.user_extensions.school %>
<%= sy_author.user_extensions.school.name %>
<% end %>
</p>
</div>
<div class="bot" style="text-align: center;">
<p class="color-grey pl15 pr15 clearfix">
<% syMembers = sy.members.count %>
<% syResource = visable_attachemnts_incourse(sy) %>
<% syHome = visable_course_homework(sy) %>
<span class="" style="margin: 0 10px"><i class="fa fa-users color-light-green pr10" aria-hidden="true" title="成员"></i><em><%= syMembers %></em></span>
<% if syResource.count > 0 %>
<span class="" style="margin: 0 10px"><i class="fa fa-cubes color-light-green pr10" aria-hidden="true" title="资源"></i><em><%= syResource.count %></em></span>
<% end %>
<% if syHome > 0 %>
<span class="" style="margin: 0 10px"><i class="fa fa-map color-light-green pr10" aria-hidden="true" title="题库"></i><em><%= syHome %></em></span>
<% end %>
</p>
</div>
</div>
<% end %>
<div class="cl"></div>
<div style="text-align:center;">
<div class="pages_user_show" style="width:auto; display:inline-block;">
<ul id="homework_pository_ref_pages">
<%= pagination_links_full @course_result_pages, @course_result_count, :per_page_links => false, :flag => true, :is_new => true %>
</ul>
<div class="cl"></div>
</div>
</div>
<% elsif !@shixuns_result.blank? %>
<% @shixuns_result.each do |shixun| %>
<div class="task-index-list-box fl">
<div class="task-index-list-box-top xy_box" onclick="shixun_link('<%= shixun.identifier %>')" style="cursor: pointer;">
<p class="task-index-list-title two_lines_show">
<a href="javascript:void(0);"><%= shixun.name %></a>
</p>
<div class="clearfix task-index-list-user task_yx_bo">
<a href="javascript:void(0);"><%= image_tag(url_to_avatar(shixun.owner), :width =>"60", :height => "60", :class => "panel-warp-img mr10 fl", :alt=>"头像") %></a>
<span class="task-index-name task-hide fl"><%= shixun.owner.try(:show_name) %></span>
</div>
<div class="cl"></div>
<span class="mt10 mb10"><%= shixun.language %></span>
<p class="xy_level"><%= shixun.shixun_trainee %></p>
</div>
<ul class="task-index-list-box-bottom clearfix">
<li><i class="fa fa-gamepad mr5 color-light-green" title="实训任务"></i><span><%= shixun.challenges.count %></span></li>
<li><i class="fa fa-users mr5 color-light-green" title="已开启实训"></i><span><%= shixun.myshixuns.count %></span></li>
<li><i class="fa fa-viacoin mr5 color-light-green" title="实训总积分"></i><span><%= shixun.shixun_score %></span></li>
</ul>
</div>
<% end %>
<div class="cl"></div>
<div style="text-align:center;">
<div class="pages_user_show" style="width:auto; display:inline-block;">
<ul id="homework_pository_ref_pages">
<%= pagination_links_full @shixun_pages, @shixuns_result_count, :per_page_links => false, :flag => true, :is_new => true %>
</ul>
<div class="cl"></div>
</div>
</div>
<% else %>
<div class="edu-tab-con-box">
<img src="../images/bigdata/edu-class/edu-nodata.png" class="edu-nodata-img">
<p class="edu-nodata-p mb30">没有数据可以显示!</p>
</div>
<% end %>
</div>
</div>
<script>
function shixun_link(shixun){
console.log(shixun);
window.open('/shixuns/' + shixun);
}
</script>

View File

@ -3,7 +3,7 @@
<div class="-task-con">
<div class="-task-con-per user_bg_shadow cl">
<div class="photo fl">
<div class="photo fl" onclick="window.open('<%=avatar_account_path%>')">
<%= image_tag(url_to_avatar(@user), :class => "person", :alt => "头像") %>
<% if current_user %>
<div class="changephoto font-14"><a href="<%= avatar_account_path %>" class="subchange" style="display: block" target="_blank" >更换头像</a></div>
@ -41,6 +41,15 @@
未认证
</span>
<% end %>
<span class="pr user-info-span">
<i class="fa fa-user u-color-light-grey" aria-hidden="true"></i><!--还未实名认证-->
</span>
<span class="pr user-info-span">
<i class="fa fa-user u-color-light-red" aria-hidden="true"></i><!--实名认证中-->
</span>
<span class="pr user-info-span">
<i class="fa fa-user color-light-green" aria-hidden="true"></i><!--已实名认证-->
</span>
</p>
</div>
<div class="top-right fr font-14 mr10">
@ -184,7 +193,7 @@
</li>
</ul>
<div class="lesson clearfix" id="my_shixuns_list">
<div class="lesson clearfix user_bg_shadow" id="my_shixuns_list">
<%= render :partial => "my_homepage_shixuns_list" %>
</div>
</div>

View File

@ -72,10 +72,10 @@
</div>
<div class="mb10 task-index-list-box-top" style="height: 26px"><%= shixun.language == "JDBC" ? "Java/SQL" : shixun.language %></div>
<ul class="edu-index-list-bottom clearfix">
<li><i class="fa fa-gamepad color-light-green mr5" title="实训任务"></i><span><%= shixun.challenges.count %></span></li>
<li><i class="fa fa-tasks color-light-green mr5" title="实训任务"></i><span><%= shixun.challenges.count %></span></li>
<!--<li><i class="fa fa-comments-o mr5 "></i><span>1255</span></li>-->
<li><i class="fa fa-users color-light-green mr5" title="已开启实训"></i><span><%= shixun.myshixuns.count %></span></li>
<li><i class="fa fa-viacoin color-light-green mr5" title="经验值"></i><span>1255</span></li>
<li><i class="fa fa-viacoin color-light-green mr5" title="经验值"></i><span><%= shixun.shixun_score %></span></li>
</ul>
</div>
<% end %>

View File

@ -34,15 +34,24 @@ RedmineApp::Application.routes.draw do
resources :subjects do
member do
get 'choose_subject_shixun'
end
collection do
get 'create_subject'
get 'new_subject'
post 'append_to_stage'
end
end
resources :stages do
member do
end
collection do
end
end
resources :shixuns do
member do
get 'game_webssh'
@ -125,6 +134,8 @@ RedmineApp::Application.routes.draw do
resources :managements do
collection do
match 'shixuns', :via => [:get, :post]
match 'publish_shixuns', :via => [:get, :post]
match 'close_shixuns', :via => [:get, :post]
get 'approve'
get 'trial_authorization', :as => 'trial_authorization'
get 'shixun_authorization'
@ -857,6 +868,7 @@ RedmineApp::Application.routes.draw do
get 'user_archive_courses'
post 'reply_detail'
get 'user_show_course_list'
get 'search_shixuns_or_courses'
end
member do
@ -1336,7 +1348,7 @@ RedmineApp::Application.routes.draw do
get 'projects/:id/repository/:repository_id/changes(/*path(.:ext))', :to => 'repositories#changes'
# shixun
get 'shixuns/:id/repository/:repository_id/commits(/*path(.:ext))', :to => 'repositories#commits'
get 'shixuns/:id/repository/:repository_id/commits/:changeset_id', :to => 'repositories#commits'
get 'shixuns/:id/repository/:repository_id/shixun_commit_diff/:changeset_id', :to => 'repositories#shixun_commit_diff'
get 'projects/:id/repository/:repository_id/revisions/:rev', :to => 'repositories#revision'
get 'projects/:id/repository/:repository_id/revision', :to => 'repositories#revision'

View File

@ -0,0 +1,15 @@
class CreateStages < ActiveRecord::Migration
def change
create_table :stages do |t|
t.references :subject
t.string :name
t.text :description
t.references :user
t.integer :position
t.timestamps
end
add_index :stages, :subject_id
add_index :stages, :user_id
end
end

View File

@ -0,0 +1,15 @@
class CreateStageShixuns < ActiveRecord::Migration
def change
create_table :stage_shixuns do |t|
t.references :subject
t.references :stage
t.references :shixun
t.integer :position
t.timestamps
end
add_index :stage_shixuns, :subject_id
add_index :stage_shixuns, :stage_id
add_index :stage_shixuns, :shixun_id
end
end

View File

@ -1004,4 +1004,10 @@ function checkLesson(item){
event.stopPropagation();
}
}
}
function shixun_link(shixun) {
window.open('/shixuns/' + shixun);
}
function subject_link(id){
window.open('/subjects/' + id);
}

View File

@ -123,8 +123,7 @@ a:hover.edu-admin-nav-a,.active a.edu-admin-nav-a{color: #5faee3;}
.edu-dropdown-menu p{height: 35px;line-height: 35px;}
.ex_container{margin-bottom: 20px;}
.table_Name_text{text-align: left;display: block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;height: 39px;width: 370px;line-height: 39px;-webkit-box-orient: vertical;}
.table_Name_text{padding-left: 5px;text-align: left;display: block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;height: 39px;width: 370px;line-height: 39px;-webkit-box-orient: vertical;}
/*管理员单位列表页面*/
.id{ width: 9%;}
.number,.job_num,.editor,.c_time{ width: 15%;}

View File

@ -95,7 +95,7 @@ position:absolute;left:-420px;top:0;}
.col-width-2{ max-width: 20%; background: #fff; border:1px solid #e8e8e8;}
.col-width-1{ max-width: 10%; background: #fff; border:1px solid #e8e8e8;}
/*按钮*/
a.task-btn{display: inline-block;font-weight: bold;border: none;padding: 0 12px;color: #666;background: #e1e1e1;letter-spacing: 1px;text-align: center;font-size: 14px;height: 30px;line-height: 30px;border-radius: 3px; }
a.task-btn{cursor: pointer;display: inline-block;font-weight: bold;border: none;padding: 0 12px;color: #666;background: #e1e1e1;letter-spacing: 1px;text-align: center;font-size: 14px;height: 30px;line-height: 30px;border-radius: 3px; }
a:hover.task-btn {background: #c3c3c3; color: #666;}
a.task-btn-green{background: #29bd8b; color: #fff!important;}
a:hover.task-btn-green{background: #19b17e;}
@ -128,8 +128,10 @@ a:hover.task-btn-ver{background:#5f7cab;}
a.task-btn-email{display: inline-block;font-weight: bold;border: none; width:185px;color: #666;background: #e1e1e1;letter-spacing: 1px;text-align: center;font-size: 14px;height: 40px;line-height: 40px;border-radius: 3px;}
a:hover.task-btn-email {background: #c3c3c3; color: #666;}
/*07-11 新添加的公用样式 cs*/
a.course-btn{font-weight: bold;border-radius: 4px;display: inline-block;width: auto;padding: 0px 12px;background-color: #FFFFFF;color: #44bfa3;letter-spacing: 1px;height: 30px;line-height: 30px;}
a.course-btn{cursor: pointer;font-weight: bold;border-radius: 4px;display: inline-block;width: auto;padding: 0px 12px;background-color: #FFFFFF;color: #44bfa3;letter-spacing: 1px;height: 30px;line-height: 30px;}
.bc-grey{background-color: #CCCCCC!important;}
a.course-bth-blue{cursor: pointer;background-color:#199ed8 ;color: #ffffff;display: inline-block;font-weight: bold;border: none;padding: 0 12px;letter-spacing: 1px;text-align: center;font-size: 14px;height: 30px;line-height: 30px;border-radius: 3px;}
/*提示条*/
.alert{ padding:10px;border: 1px solid transparent; text-align: center;}
.alert-blue{ background-color: #d9edf7;border-color: #bce8f1; color: #3a87ad;}
@ -291,4 +293,20 @@ html>body #ajax-indicator { position: fixed; }
.check_nav{background: #FF6610;color: #ffffff;}
.check_nav a{color: #ffffff !important;}
.check_on{background:#2292e7;color: #ffffff!important;border-radius: 4px;}
.check_on{background:#ffdac1;color: #ff6610!important;border-radius: 4px;}
/*实训列表块里面的遮罩效果*/
.black-half{position: absolute;left: 0;top:0px;width: 100%;height: 100%;background: rgba(0,0,0,0.4);z-index: 3;display: none}
.black-half-lock{width: 65px;height: 65px;border-radius: 50%;background:#8291a3;vertical-align: middle;text-align: center;margin:25% auto 0px;}
.black-half-lock i{margin-top: 7px;}
.black-half-info{width: 100%;text-align: center;color: #FFFFFF;margin-top:10px}
.show-black{display: block;animation: black-down 1s linear 1;}
@-webkit-keyframes black-down {
25% {-webkit-transform: translateY(0);}
50%, 100% {-webkit-transform: translateY(0);}
}
@keyframes black-down {
25% {transform: translateY(0);}
50%, 100% {transform: translateY(0);}
}

View File

@ -168,7 +168,7 @@ a.panel-table-title{display:block; max-width:240px;text-align:center;}
.pages_right_min a:hover,.pages_right_min a.active{ background-color:#FF6610; color:#fff;}
.pages_right_min li{float: left;}
/* 个人主页翻页 */
.pages_user_show a:hover,.pages_user_show a.active{ background-color:#FF6610;; color:#fff;}
.pages_user_show a:hover,.pages_user_show a.active{ background-color:#FF6610;; color:#fff;border: 1px solid #ff6610;}
.pages_user_show a{ display: inline-block;border:1px solid #d1d1d1; color:#888; float:left;text-align:center; padding:3px 10px; line-height:1.9; margin: 0 5px;}
.pages_user_show li{float: left;}
/* 小翻页 */

View File

@ -1,5 +1,5 @@
/*------课程实训首页---------*/
.header-color{background-image: linear-gradient(to right, rgb(111,212, 222) 0%, rgb(211, 232, 179) 100%);padding: 30px}
.header-color{background-image:linear-gradient(to right, rgb(68,191, 163) 0%,rgb(63, 156, 208) 100%);padding: 30px}
.active-class .content .sub-con{width:23.7%;border:1px solid #eee;background:#fff;margin: 0 1.5% 1.5% 0px;box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.15);}
.active-class .content .sub-con:nth-child(4n+0){margin:0 0 1.5% 0;}
.active-class .content .sub-con:hover{box-shadow: 0 5px 15px 0 rgba(0, 0, 0, 0.15);cursor: pointer;-webkit-animation: bounce-down 1s linear 1;animation: bounce-down 1s linear 1;}
@ -12,9 +12,53 @@
25% {margin-top:-10px;}
50%, 100% {margin-top: 0;}
}
.course-list-index-name{padding: 16px;padding-top: 30px;background: #fff;text-align: left;position: relative;height: 130px;}
.course-list-index-name{padding: 16px;padding-top: 30px;background: #fff;text-align: center;position: relative;height: 177px;}
.course-list-index-title{font-weight: bold}
.college{height: 45px;line-height: 70px;}
.bot_li{text-align: right;}
.bot_li li{float: left;margin: 8px 6px;border: 2px solid #e8e8e8; color: #888;float: left;border-radius: 50%;text-align: center;line-height:31px;width:31px;height:31px;}
/*------课程实训首页---------*/
.college{line-height:40px;height: 40px}
.half-bot{text-align: center; height: 50px;background: #F5F6F7;}
.half-bot-content{width: auto;display: inline-block;}
.bot_li{text-align: center;}
.bot_li li{float: left;margin:9px 4px 0px 4px;}
.bot_li li span{display: inline-block;float: left; border: 2px solid #e8e8e8;color: #888;border-radius: 50%;text-align: center;line-height:28px;width: 28px;height: 28px;font-size: 13px}
/*------课程实训首页---------*/
.course_tip_box{width: 460px;padding: 10px;background-color: #FFFFFF;}
.course_tip_box_Item{margin: 10px 0px;}
.course_tip_box_Item li{float: left;width: auto;padding: 5px 10px;border-radius: 4px;border: 1px solid #2292e7;margin:0px 10px 10px 0px;}
.tip_acitve{color: #FFFFFF;background-color: #2292e7;}
.subhead{width: 100%;background-color: #5bc0e4;margin-bottom:20px;}
.subhead_content{width: 1200px;margin: 0px auto;padding: 20px 0px;}
.publich-half{width: 1200px;margin: 0px auto; min-height:566px}
.saved-title{margin-bottom: 10px;}
.task-array{font-size: 12px;position: absolute;right: 5px;top:5px;width: 20px;height: 20px;line-height: 20px;border-radius: 50%;color: #FFFFFF;background-color: #ffbfaa;z-index: 2;text-align: center;}
.stage-item{border:1px solid #d1d5da;}
.stage{padding: 7px 10px;border-bottom:1px solid #d1d5da;}
.stage-entry{padding: 10px 10px;}
.stage-name{width: 100%;}
.stage-name-label{width: 10%;text-align: center;line-height: 40px;}
.add-sx{padding:0px 5px;width: 99%;height: 40px;line-height: 40px;border: 1px dashed #ffbfaa;display: inline-block;color: #cccccc;}
.box-border{border:1px solid #e1e1e1}
.boxborder-dashed-orange{border: 1px dashed #ffbfaa;}
.click_add{text-align: center;height: 90px;line-height: 90px;}
.adding-stage-item{padding: 0px 10px;}
.task-close-icon{position: absolute;right: -5px;top:-5px;z-index: 2;font-size: 18px!important;}
/*编辑部分的列表不用加浮动效果*/
.task-index-list-box-all{ width:23.7%;margin: 0 1.5% 1.5% 0px; border-radius:2px; border:1px solid #eee; box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.15); color:#666; position:relative; }
.task-index-list-box-all:nth-child(4n+0) {margin: 0 0 1.5% 0;}
.allback{background-color:#FFFFFF}
.last-all-count{width: 20%;text-align: right;}
.last-all-count li{float: left;width: 33.3%;}
.course-option{width: 570px;padding: 10px;background-color: #FFFFFF;}
.magic-radio + label:before, .magic-checkbox + label:before{top: 11px;left: 5px;}
.magic-checkbox + label:after{top: 11px;left: 11px;}

View File

@ -196,3 +196,9 @@ input.new_loggin_input{ -webkit-box-shadow: 0 0 0px 1000px white inset; outline
.new_login_form ul li{ margin-bottom:20px; }
.new-login-error{ display: inline-block; background-color:#fffafa; box-shadow: 0px 2px 8px rgba(255, 217, 217, 0.5); border:1px solid #ffd9d9; padding:5px; border-radius:5px; color:#dd6f75; width: 235px; position: absolute; left:360px; top:3px;}
input.new_loggin_input_test{ -webkit-box-shadow: 0 0 0px 1000px white inset; outline: none;width:260px; height:45px; border-radius:5px; padding-left:5px; line-height: 45px; font-size:14px; border:1px solid #ccc;}
/*头部排版更改*/
.u-color-light-red{color: #FF6666}
.u-color-light-grey{color: #CCCCCC}
.user-info-span{border-radius: 50%;display: inline-block;background: #F3F5F7;text-align: center;padding: 3px 6px;}

View File

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe StagesController, :type => :controller do
end

View File

@ -0,0 +1,9 @@
FactoryGirl.define do
factory :stage_shixun do
subject nil
stage nil
shixun nil
position 1
end
end

10
spec/factories/stages.rb Normal file
View File

@ -0,0 +1,10 @@
FactoryGirl.define do
factory :stage do
subject nil
name "MyString"
description "MyText"
user nil
position 1
end
end

View File

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe StageShixun, :type => :model do
pending "add some examples to (or delete) #{__FILE__}"
end

View File

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe Stage, :type => :model do
pending "add some examples to (or delete) #{__FILE__}"
end