From 70c47a3c9beb8beaa245fcea5fbcbb117f5943fe Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Sat, 13 Apr 2019 10:56:20 +0800 Subject: [PATCH 1/9] 1 --- app/controllers/graduation_topics_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/graduation_topics_controller.rb b/app/controllers/graduation_topics_controller.rb index 32823ab9..d55638df 100644 --- a/app/controllers/graduation_topics_controller.rb +++ b/app/controllers/graduation_topics_controller.rb @@ -106,7 +106,7 @@ class GraduationTopicsController < ApplicationController def student_select_topic if User.current.student_graduation_topics.where(:course_id => @course.id, :status => [0, 1]).count == 0 @topic.student_graduation_topics << StudentGraduationTopic.new(:course_id => @course.id, :user_id => User.current.id, - :member_id => @course.members.where(:user_id => User.current.id).first.try(:id)) + :member_id => @course.course_members.where(:user_id => current_user.id).first.try(:id)) @topic.update_attributes(:status => 1) end redirect_to graduation_topic_path(@topic) From 73e890aaf6a28f6aad8e8687048125b8afdb7a26 Mon Sep 17 00:00:00 2001 From: caishi <1149225589@qq.com> Date: Sat, 13 Apr 2019 11:05:14 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E8=B6=85=E7=BA=A7=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=91=98-=E5=90=88=E4=BD=9C=E4=BC=99=E4=BC=B4=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E8=8F=9C=E5=8D=95=E6=93=8D=E4=BD=9C=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../challenges/_edit_evaluating_page.html.erb | 1 - app/views/managements/_partner_list.html.erb | 15 +++++-- app/views/managements/partners.html.erb | 7 ++- public/assets/iconfont/iconfont.css | 44 ++++++++++++++----- public/stylesheets/educoder/edu-all.css | 13 +++--- 5 files changed, 60 insertions(+), 20 deletions(-) diff --git a/app/views/challenges/_edit_evaluating_page.html.erb b/app/views/challenges/_edit_evaluating_page.html.erb index ae905663..9701635b 100644 --- a/app/views/challenges/_edit_evaluating_page.html.erb +++ b/app/views/challenges/_edit_evaluating_page.html.erb @@ -297,7 +297,6 @@ $("#test_file_name").show(); }else{ $("#challenge_shixun_update").submit(); - location.reload(); } } \ No newline at end of file diff --git a/app/views/managements/_partner_list.html.erb b/app/views/managements/_partner_list.html.erb index c73dd1ff..0ee0a60f 100644 --- a/app/views/managements/_partner_list.html.erb +++ b/app/views/managements/_partner_list.html.erb @@ -1,5 +1,14 @@ <% @partners.each_with_index do |partner,index| %> -
  • - <%= link_to "#{partner.name}", partners_managements_path(:partner => partner), :class => "#{partner.id == @current_partner.id ? 'active' : ''}" %> +
  • + <%= link_to "#{partner.name}", partners_managements_path(:partner => partner), :class => "#{partner.id == @current_partner.id ? 'active' : ''} fl" %> + <% if false %> +
    + + +
    + <% end %>
  • -<% end %> \ No newline at end of file +<% end %> diff --git a/app/views/managements/partners.html.erb b/app/views/managements/partners.html.erb index ad3af6df..153ab505 100644 --- a/app/views/managements/partners.html.erb +++ b/app/views/managements/partners.html.erb @@ -5,7 +5,7 @@ 清除
    -
    +
    <%= link_to "+添加",all_partners_managements_path,remote:true,class:"color-blue addOperation" %>
      <%= render :partial => "partner_list" %> @@ -29,4 +29,9 @@ function submit_search_partner(){ $.get("/managements/partners?search="+$("#partner_search").val()); } + + + function delPartners(){ + delete_confirm_box_2("","确定删除合作伙伴?"); + } \ No newline at end of file diff --git a/public/assets/iconfont/iconfont.css b/public/assets/iconfont/iconfont.css index ddc612e4..6d4400d5 100644 --- a/public/assets/iconfont/iconfont.css +++ b/public/assets/iconfont/iconfont.css @@ -1,10 +1,10 @@ @font-face {font-family: "iconfont"; - src: url('iconfont.eot?t=1548396789469'); /* IE9 */ - src: url('iconfont.eot?t=1548396789469#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), - url('iconfont.woff?t=1548396789469') format('woff'), - url('iconfont.ttf?t=1548396789469') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ - url('iconfont.svg?t=1548396789469#iconfont') format('svg'); /* iOS 4.1- */ + src: url('iconfont.eot?t=1555121827981'); /* IE9 */ + src: url('iconfont.eot?t=1555121827981#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), + url('iconfont.woff?t=1555121827981') format('woff'), + url('iconfont.ttf?t=1555121827981') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url('iconfont.svg?t=1555121827981#iconfont') format('svg'); /* iOS 4.1- */ } .iconfont { @@ -27,10 +27,6 @@ content: "\e6d8"; } -.icon-zhangjie:before { - content: "\e60f"; -} - .icon-css3:before { content: "\ea8b"; } @@ -43,6 +39,10 @@ content: "\e6b2"; } +.icon-zhangjie1:before { + content: "\e68e"; +} + .icon-htmal5icon19:before { content: "\e66b"; } @@ -55,6 +55,10 @@ content: "\e671"; } +.icon-pdf:before { + content: "\e740"; +} + .icon-shijian:before { content: "\e69c"; } @@ -107,6 +111,10 @@ content: "\e639"; } +.icon-fuzhi:before { + content: "\e68f"; +} + .icon-dianzan11:before { content: "\e66d"; } @@ -159,6 +167,10 @@ content: "\e687"; } +.icon-biaoqian:before { + content: "\e74f"; +} + .icon-dashujucunchu:before { content: "\e678"; } @@ -199,6 +211,10 @@ content: "\e68b"; } +.icon-sandian:before { + content: "\e6f8"; +} + .icon-base:before { content: "\e683"; } @@ -259,6 +275,10 @@ content: "\e68d"; } +.icon-shangchuantupian1:before { + content: "\e7fd"; +} + .icon-dengluIpjiankong:before { content: "\e684"; } @@ -659,3 +679,7 @@ content: "\e68c"; } +.icon-tianjiadaohang:before { + content: "\e604"; +} + diff --git a/public/stylesheets/educoder/edu-all.css b/public/stylesheets/educoder/edu-all.css index 22c86d5d..13775084 100644 --- a/public/stylesheets/educoder/edu-all.css +++ b/public/stylesheets/educoder/edu-all.css @@ -2974,15 +2974,18 @@ a.singlepublishtwo{ .edu-cooperation li{height: 60px;width: 210px;padding: 10px 0px;margin-left: 20px;float: left;margin-bottom: 20px;text-align: center;line-height: 40px;box-sizing: border-box} .edu-cooperation li img{height: 40px;width: 210px;} /*单位-合作伙伴*/ -.addOperation{width: 100%;display: block;height: 56px;line-height: 56px;text-align: center;border-bottom: 1px solid #eee;} -.partnerList li a{ - display: block;height: 40px;line-height: 40px;padding:0px 10px;width: 100%;overflow:hidden; white-space: nowrap; text-overflow:ellipsis; +.addOperation{width: 100%;display: block;height: 56px;line-height: 56px;text-align: center;border-bottom: 1px solid #eee;background: #fff} +.partnerList>li{ + background: #fff; +} +.partnerList>li>a{ + display: block;height: 40px;line-height: 40px;padding:0px 10px;width: 87%;overflow:hidden; white-space: nowrap; text-overflow:ellipsis; box-sizing: border-box;position: relative; } -.partnerList li a.active:after{ +.partnerList>li>a.active:after{ position: absolute;left: 0px;height: 100%;width: 2px;content: '';background: #4cacff; } -.partnerList{max-height: 500px;overflow-y: auto;} +/*.partnerList{max-height: 500px;overflow-y: auto;}*/ .manageList{float: left} .manageList li{width: 60px;float: left;margin-right: 15px;border-radius: 50%;text-align: center;position: relative;margin-bottom: 10px;} .manageList li>a.addManage,.manageList li>img{width: 60px;height: 60px;line-height: 49px;margin-right: 10px;border-radius: 50%;display: block} From efcac7da3d69d3ac499aa7d3f5a00d241611fccf Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Mon, 15 Apr 2019 19:21:40 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E7=9A=84=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/homework_common_controller.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/controllers/homework_common_controller.rb b/app/controllers/homework_common_controller.rb index 84f337d8..5b03010d 100644 --- a/app/controllers/homework_common_controller.rb +++ b/app/controllers/homework_common_controller.rb @@ -359,8 +359,8 @@ class HomeworkCommonController < ApplicationController # homework 的记录更新 # 发布时间不为空 if params_publish_time && min_publish_time != "" - @homework.publish_time = min_publish_time - @homework.end_time = max_end_time + @homework.publish_time = min_publish_time if @homework.publish_time.nil? || @homework.publish_time > Time.now + @homework.end_time = max_end_time if @homework.end_time.nil? || @homework.end_time > Time.now # @homework.archive_time = params_archive_time if params_archive_time if @homework.publish_time < Time.now and @homework_detail_manual.comment_status == 0 @homework_detail_manual.comment_status = 1 @@ -379,10 +379,10 @@ class HomeworkCommonController < ApplicationController =end # 发布时间未设置 则按当前时间立即发布 elsif params_publish_time && min_publish_time == "" - @homework_detail_manual.comment_status = 1 - @homework.publish_time = Time.now + @homework_detail_manual.comment_status = 1 if @homework_detail_manual.comment_status == 0 + @homework.publish_time = Time.now if @homework.publish_time.nil? || @homework.publish_time > Time.now @homework.unified_setting = 1 - @homework.end_time = Time.at(((1.month.since.to_i)/3600.0).ceil * 3600) + @homework.end_time = Time.at(((1.month.since.to_i)/3600.0).ceil * 3600) if @homework.end_time.nil? || @homework.end_time > Time.now # @homework.archive_time = Time.at(((2.months.since.to_i)/3600.0).ceil * 3600) create_homework_user = 1 @@ -391,7 +391,7 @@ class HomeworkCommonController < ApplicationController end # 已发布的作业,只更新截止时间和结束时间 else - @homework.end_time = max_end_time if params_end_time + @homework.end_time = max_end_time if params_end_time && (@homework.end_time.nil? || @homework.end_time > Time.now) # @homework.archive_time = params_archive_time if params_archive_time =begin From 39dee9d928553aee3c957b12e6834de30cc51ee7 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Tue, 16 Apr 2019 10:42:53 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E6=B5=B7=E5=B7=A5=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/boards_controller.rb | 8 +- app/views/boards/update_position.js.erb | 3 +- app/views/courses/_course_activity.html.erb | 4 +- .../graduation_tasks/_task_status.html.erb | 3 + .../_homework_index_list.html.erb | 5 +- .../layouts/_board_children_list.html.erb | 16 +- .../layouts/_group_children_list.html.erb | 24 +- app/views/layouts/base_courses.html.erb | 67 +++-- app/views/users/_course_exercise.html.erb | 3 + .../users/_course_graduation_topic.html.erb | 2 + app/views/users/_course_homework.html.erb | 254 +++++++++--------- app/views/users/_course_message.html.erb | 4 + app/views/users/_course_poll.html.erb | 11 +- 13 files changed, 228 insertions(+), 176 deletions(-) diff --git a/app/controllers/boards_controller.rb b/app/controllers/boards_controller.rb index 7aba1442..2329db0f 100644 --- a/app/controllers/boards_controller.rb +++ b/app/controllers/boards_controller.rb @@ -326,14 +326,16 @@ class BoardsController < ApplicationController end def update_position - if @course || @contest + if @course + @is_teacher = User.current.allowed_to?(:as_teacher,@course) || User.current.admin? + boards = @board.parent.children - if params[:opr] == 'up' && @board.position > 1 + if @is_teacher && params[:opr] == 'up' && @board.position > 1 before_board = boards.where("position = #{@board.position - 1}").first if before_board && @board.update_attribute('position', @board.position - 1) before_board.update_attribute('position', before_board.position + 1) end - elsif params[:opr] == 'down' && @board.position < boards.count + elsif @is_teacher && params[:opr] == 'down' && @board.position < boards.count after_board = boards.where("position = #{@board.position + 1}").first if after_board && @board.update_attribute('position', @board.position + 1) after_board.update_attribute('position', after_board.position - 1) diff --git a/app/views/boards/update_position.js.erb b/app/views/boards/update_position.js.erb index bd7ee8fd..cba7203d 100644 --- a/app/views/boards/update_position.js.erb +++ b/app/views/boards/update_position.js.erb @@ -1,7 +1,8 @@ <% if @course %> $("#tbc_04").html("<%=escape_javascript(render :partial => 'courses/settings/boards_setting') %>"); <% course_board = @course.boards.where(:parent_id => 0).first %> -$("#board_children_list").html("<%= escape_javascript(render :partial => 'layouts/board_children_list', :locals => {:course_board => course_board})%>"); +$("#board_children_list").html("<%= escape_javascript(render :partial => 'layouts/board_children_list', :locals => + {:course_board => course_board, :is_teacher => @is_teacher})%>"); <% elsif @contest %> $("#game-setting-content-3").html("<%=escape_javascript(render :partial => 'contests/boards') %>"); <% contest_board = @contest.boards.where(:parent_id => 0).first %> diff --git a/app/views/courses/_course_activity.html.erb b/app/views/courses/_course_activity.html.erb index 89187650..19eab902 100644 --- a/app/views/courses/_course_activity.html.erb +++ b/app/views/courses/_course_activity.html.erb @@ -32,7 +32,9 @@ <%= render :partial => 'users/course_create', :locals => {:activity => activity.course_act, :user_activity_id => activity.id, :is_course => 1} if activity.course_act %> <% when 'JoinCourse' %> <% act = CourseMessage.where(:id => activity.course_act_id).first %> - <%= render :partial => 'users/join_course', :locals => {:activity => act, :user_activity_id => activity.id} %> + <% if act.present? %> + <%= render :partial => 'users/join_course', :locals => {:activity => act, :user_activity_id => activity.id} %> + <% end %> <% end %> <% end %> <% end %> diff --git a/app/views/graduation_tasks/_task_status.html.erb b/app/views/graduation_tasks/_task_status.html.erb index 2f0a0b3b..90cd813b 100644 --- a/app/views/graduation_tasks/_task_status.html.erb +++ b/app/views/graduation_tasks/_task_status.html.erb @@ -1,6 +1,8 @@ <%= render :partial => "graduation_tasks/task_tag", :locals => {:task => task} %> <% from_course = defined?(is_course) ? true : false %> + +<% if false %> <% if @is_teacher %>
      <% if from_course %> @@ -61,4 +63,5 @@ <% end %> <% end %> <% end %> +<% end %> <% end %> \ No newline at end of file diff --git a/app/views/homework_common/_homework_index_list.html.erb b/app/views/homework_common/_homework_index_list.html.erb index 865f7adf..ecb75520 100644 --- a/app/views/homework_common/_homework_index_list.html.erb +++ b/app/views/homework_common/_homework_index_list.html.erb @@ -62,6 +62,8 @@ <% end %> <%# elsif homework_common.homework_type != 4 %> <% else %> + + <% if false %> <% if had_commit_studentwork_count(homework_common) > 0 %> <%= link_to had_commit_studentwork_count(homework_common), student_work_index_path(:homework => homework_common.id), :class => 'color-orange03 mr5', :target => '_blank' %> @@ -77,6 +79,7 @@ 未交 <% end %> + <% end %> <%# elsif homework_common.homework_type == 4 && homework_common.homework_commons_shixuns.shixun %> <%# had_passed_count = had_passed_changllenge_count(homework_common.homework_commons_shixuns.shixun, User.current) %> <%# challenge_count = homework_common.homework_commons_shixuns.shixun.challenges.count %> @@ -148,7 +151,7 @@
    • <%= link_to '立即发布', publish_notice_homework_common_path(homework_common), :remote => true %>
    • - <% elsif (homework_common.homework_detail_manual.try(:comment_status) == 1 || homework_common.homework_detail_manual.try(:comment_status) == 2) && homework_common.end_time > Time.now %> + <% elsif (homework_common.homework_detail_manual.try(:comment_status) == 1 || homework_common.homework_detail_manual.try(:comment_status) == 2) && homework_common.end_time.present? && homework_common.end_time > Time.now %>
    • <%= link_to '立即截止', end_notice_homework_common_path(homework_common), :remote => true %>
    • diff --git a/app/views/layouts/_board_children_list.html.erb b/app/views/layouts/_board_children_list.html.erb index 779b900a..c2cf3c71 100644 --- a/app/views/layouts/_board_children_list.html.erb +++ b/app/views/layouts/_board_children_list.html.erb @@ -1,13 +1,15 @@ <% course_board = @course.boards.where(:parent_id => 0).first %> -<% count = course_board ? course_board.messages.count : 0 %>
    • <% if course_module.module_name != course_board.name %> <% course_board.update_name(course_module.module_name) %> <% end %> <%= course_module.module_name %> - <% if count > 0 %> - <%= count %> + <% if is_teacher %> + <% count = course_board ? course_board.messages.count : 0 %> + <% if count > 0 %> + <%= count %> + <% end %> <% end %>
    • @@ -15,10 +17,12 @@
        <% course_board.children.reorder("position asc").each do |board| %>
      • - <% count = board ? board.messages.count : 0 %> <%=board.name %> - <% if count > 0 %> - <%= count %> + <% if is_teacher %> + <% count = board ? board.messages.count : 0 %> + <% if count > 0 %> + <%= count %> + <% end %> <% end %>
      • diff --git a/app/views/layouts/_group_children_list.html.erb b/app/views/layouts/_group_children_list.html.erb index 610e7efa..b9be3786 100644 --- a/app/views/layouts/_group_children_list.html.erb +++ b/app/views/layouts/_group_children_list.html.erb @@ -1,9 +1,11 @@
      • <%= @course.course_modules.where(:module_type => "course_group").first.try(:module_name) %> - <% group_count = @course.course_groups.size %> - <% if group_count > 0 %> - <%= group_count %> - <% end %> + <% if is_teacher %> + <% group_count = @course.course_groups.size %> + <% if group_count > 0 %> + <%= group_count %> + <% end %> + <% end %>
      • <% unless @course.course_groups.empty? %> @@ -13,17 +15,21 @@ <% if count > 0 %>
      • 未分班 - <%= count %> + <% if is_teacher %> + <%= count %> + <% end %>
      • <% end %> <% @course.course_groups.each do |group| %>
      • - <% count = group.members.count %> <%=group.name %> - <% if count > 0 %> - <%= count %> - <% end %> + <% if is_teacher %> + <% count = group.members.count %> + <% if count > 0 %> + <%= count %> + <% end %> + <% end %>
      • <% end %> diff --git a/app/views/layouts/base_courses.html.erb b/app/views/layouts/base_courses.html.erb index 5f57d853..393a7139 100644 --- a/app/views/layouts/base_courses.html.erb +++ b/app/views/layouts/base_courses.html.erb @@ -1,4 +1,3 @@ -<% course_file_num = visable_attachemnts_incourse(@course).size %> <% course_modules = @course.course_modules.where(:hidden => 0) %> <%# is_teacher = User.current.logged? && (User.current.admin? || User.current.allowed_to?(:as_teacher,@course)) %> <%# homework_num = visable_course_homework @course %> @@ -64,9 +63,11 @@ <% when "shixun_homework" %>
      • <%= course_module.module_name %> - <% homework_count = visable_course_homework(@course, 4, @is_teacher, nil) %> - <% if homework_count > 0 %> - <%= homework_count %> + <% if @is_teacher %> + <% homework_count = visable_course_homework(@course, 4, @is_teacher, nil) %> + <% if homework_count > 0 %> + <%= homework_count %> + <% end %> <% end %>
      • @@ -74,18 +75,22 @@ <% when "common_homework" %>
      • <%= course_module.module_name %> - <% homework_count = visable_course_homework(@course, 1, @is_teacher, nil) %> - <% if homework_count > 0 %> - <%= homework_count %> + <% if @is_teacher %> + <% homework_count = visable_course_homework(@course, 1, @is_teacher, nil) %> + <% if homework_count > 0 %> + <%= homework_count %> + <% end %> <% end %>
      • <% when "group_homework" %>
      • <%= course_module.module_name %> - <% homework_count = visable_course_homework(@course, 3, @is_teacher, nil) %> - <% if homework_count > 0 %> - <%= homework_count %> + <% if @is_teacher %> + <% homework_count = visable_course_homework(@course, 3, @is_teacher, nil) %> + <% if homework_count > 0 %> + <%= homework_count %> + <% end %> <% end %>
      • @@ -96,53 +101,65 @@ <% when "exercise" %> - <% count = visable_course_exercise @course, @is_teacher %>
      • <%= course_module.module_name %> - <% if count > 0 %> - <%= count %> + <% if @is_teacher %> + <% count = visable_course_exercise @course, @is_teacher %> + <% if count > 0 %> + <%= count %> + <% end %> <% end %>
      • <% when "poll" %> - <% count = visable_course_poll @course, @is_teacher %>
      • <%= course_module.module_name %> - <% if count > 0 %> - <%= count %> + <% if @is_teacher %> + <% count = visable_course_poll @course, @is_teacher %> + <% if count > 0 %> + <%= count %> + <% end %> <% end %>
      • <% when "attachment" %>
      • <%= course_module.module_name %> - <% if course_file_num > 0 %> - <%= course_file_num %> + <% if @is_teacher %> + <% course_file_num = visable_attachemnts_incourse(@course).size %> + <% if course_file_num > 0 %> + <%= course_file_num %> + <% end %> <% end %>
      • <% when "board" %>
        - <%= render :partial => 'layouts/board_children_list', :locals => {:course_module => course_module} %> + <%= render :partial => 'layouts/board_children_list', :locals => {:course_module => course_module, + :is_teacher => @is_teacher} %>
        <% when "course_group" %>
        diff --git a/app/views/users/_course_exercise.html.erb b/app/views/users/_course_exercise.html.erb index 2193ff4d..58092b4d 100644 --- a/app/views/users/_course_exercise.html.erb +++ b/app/views/users/_course_exercise.html.erb @@ -15,6 +15,7 @@ <% end %> <% end %> + <% if false %> <% if @is_teacher %>
        @@ -68,6 +69,8 @@ <% end %> <% end %> <% end %> + <% end %> +

        <%= link_to activity.user.show_real_name, user_path(activity.user), :class => "color-grey-6 mr30" %> diff --git a/app/views/users/_course_graduation_topic.html.erb b/app/views/users/_course_graduation_topic.html.erb index 1f4b5723..e107fa28 100644 --- a/app/views/users/_course_graduation_topic.html.erb +++ b/app/views/users/_course_graduation_topic.html.erb @@ -13,6 +13,7 @@ 已确认 <% end %> + <% if false %> <% if @is_teacher %>

        @@ -33,6 +34,7 @@ 取消选题 <% end %> <% end %> + <% end %>

        <%= link_to activity.teacher.show_real_name, user_path(activity.teacher), :class => "color-grey-6 mr30" %> diff --git a/app/views/users/_course_homework.html.erb b/app/views/users/_course_homework.html.erb index 5f521117..23c10229 100644 --- a/app/views/users/_course_homework.html.erb +++ b/app/views/users/_course_homework.html.erb @@ -25,115 +25,91 @@ <% end %> <% end %> - <% if @is_teacher %> - <% comment_status = activity.homework_detail_manual.try(:comment_status) %> -

        - -
          - <% if activity.homework_type != 4 %> -
        • <%= link_to "编辑", edit_homework_common_path(activity) %>
        • - <% end %> -
        • <%= link_to "设置", student_work_index_path(:homework => activity.id, :tab => 4) %>
        • - <% if comment_status == 0 || activity.homework_group_settings.where("publish_time is null or publish_time > '#{Time.now}'").count > 0 %> -
        • <%= link_to '立即发布', publish_notice_homework_common_path(activity), :remote => true %>
        • - <% end %> - <% if (comment_status == 1 && activity.end_time > Time.now) || activity.homework_group_settings.where("publish_time < '#{Time.now}' and end_time > '#{Time.now}'").count > 0 %> -
        • <%= link_to '立即截止', end_notice_homework_common_path(activity), :remote => true %>
        • - <% end %> -
        • <%= link_to "导出成绩", student_work_index_path(:homework => activity, :format => 'xls'), :id => "export_student_work" %>
        • - <% if activity.homework_type == 1 || activity.homework_type == 3 %> + <% if false %> + <% if @is_teacher %> + <% comment_status = activity.homework_detail_manual.try(:comment_status) %> +
          + +
            + <% if activity.homework_type != 4 %> +
          • <%= link_to "编辑", edit_homework_common_path(activity) %>
          • + <% end %> +
          • <%= link_to "设置", student_work_index_path(:homework => activity.id, :tab => 4) %>
          • + <% if comment_status == 0 || activity.homework_group_settings.where("publish_time is null or publish_time > '#{Time.now}'").count > 0 %> +
          • <%= link_to '立即发布', publish_notice_homework_common_path(activity), :remote => true %>
          • + <% end %> + <% if (comment_status == 1 && activity.end_time > Time.now) || activity.homework_group_settings.where("publish_time < '#{Time.now}' and end_time > '#{Time.now}'").count > 0 %> +
          • <%= link_to '立即截止', end_notice_homework_common_path(activity), :remote => true %>
          • + <% end %> +
          • <%= link_to "导出成绩", student_work_index_path(:homework => activity, :format => 'xls'), :id => "export_student_work" %>
          • + <% if activity.homework_type == 1 || activity.homework_type == 3 %> +
          • + <% if activity.student_works.has_committed.empty? %> + 导出作品附件 + <% else %> + <%= link_to "导出作品附件", zipdown_assort_path(obj_class: activity.class, obj_id: activity.id, format: :json), remote: true, :class => "download_homework_attachments" %> + <% end %> +
          • + <% end %> + <% if @course.is_public? && !activity.is_public %> +
          • + 设为公开 +
          • + <% end %> + <% if (activity.homework_type == 1 || activity.homework_type == 3) && (@is_teacher || activity.user == User.current) %> +
          • + <%= link_to "加入题库", add_to_homework_bank_homework_common_path(activity), :remote => true %> +
          • + <% end %>
          • - <% if activity.student_works.has_committed.empty? %> - 导出作品附件 - <% else %> - <%= link_to "导出作品附件", zipdown_assort_path(obj_class: activity.class, obj_id: activity.id, format: :json), remote: true, :class => "download_homework_attachments" %> - <% end %> -
          • - <% end %> - <% if @course.is_public? && !activity.is_public %> -
          • - 设为公开 -
          • - <% end %> - <% if (activity.homework_type == 1 || activity.homework_type == 3) && (@is_teacher || activity.user == User.current) %> -
          • - <%= link_to "加入题库", add_to_homework_bank_homework_common_path(activity), :remote => true %> + 删除
          • - <% end %> -
          • - 删除 -
          • -
          -
          +
        +
        - <% elsif User.current.member_of_course?(activity.course) %> - <% work = cur_user_works_for_homework activity %> - <% member = activity.course.members.where(:user_id => User.current.id).first - setting_time = homework_group_setting activity, member.try(:course_group_id) %> - <% project = cur_user_projects_for_homework activity %> - <% if activity.course.is_end %> - ml15 fl mt5">已结束 - <% if work.present? %> - <%= link_to "查看作品", student_work_index_path(:homework => activity.id), :class => 'edu-filter-btn edu-activity-green ml15 fl mt5' %> - <% end %> - <% else %> - <% if activity.homework_type == 4 %> - <% if work.nil? && (setting_time.end_time >= Time.now || activity.allow_late) %> - <%= link_to "开始实战", shixun_path(activity.homework_commons_shixuns.shixun), :class => 'edu-filter-btn edu-activity-blue ml15 fl mt5', :target => "_blank" %> - <% elsif work.present? %> - <% myshixun = Myshixun.where(:id => work.myshixun_id).first %> - <%# is_modify = ShixunModify.where(:myshixun_id => myshixun.try(:id), :shixun_id => myshixun.shixun.try(:id), :status => 1).first %> - <% if myshixun.present? %> - <%= link_to "继续实战", shixun_path(myshixun.shixun), :class => "edu-filter-btn edu-activity-blue ml15 fl mt5", :target => "_blank" %> - <% end %> + <% elsif User.current.member_of_course?(activity.course) %> + <% work = cur_user_works_for_homework activity %> + <% member = activity.course.members.where(:user_id => User.current.id).first + setting_time = homework_group_setting activity, member.try(:course_group_id) %> + <% project = cur_user_projects_for_homework activity %> + <% if activity.course.is_end %> + ml15 fl mt5">已结束 + <% if work.present? %> + <%= link_to "查看作品", student_work_index_path(:homework => activity.id), :class => 'edu-filter-btn edu-activity-green ml15 fl mt5' %> + <% end %> + <% else %> + <% if activity.homework_type == 4 %> + <% if work.nil? && (setting_time.end_time >= Time.now || activity.allow_late) %> + <%= link_to "开始实战", shixun_path(activity.homework_commons_shixuns.shixun), :class => 'edu-filter-btn edu-activity-blue ml15 fl mt5', :target => "_blank" %> + <% elsif work.present? %> + <% myshixun = Myshixun.where(:id => work.myshixun_id).first %> + <%# is_modify = ShixunModify.where(:myshixun_id => myshixun.try(:id), :shixun_id => myshixun.shixun.try(:id), :status => 1).first %> + <% if myshixun.present? %> + <%= link_to "继续实战", shixun_path(myshixun.shixun), :class => "edu-filter-btn edu-activity-blue ml15 fl mt5", :target => "_blank" %> + <% end %> - <%# if myshixun && is_modify.blank? %> + <%# if myshixun && is_modify.blank? %> <%#= link_to "继续实战", shixun_exec_shixun_path(myshixun.shixun), :class => "edu-filter-btn edu-activity-blue ml15 fl mt5", :target => "_blank" %> - <%# elsif myshixun %> + <%# elsif myshixun %> <%#= link_to "继续实战", 'javascript:void(0);', :onclick => "sure_box_redirect('#{myshixun_reset_myshixun_path(myshixun)}', '实训已经更新啦,系统正在为您重置');", :class => "edu-filter-btn edu-activity-blue ml15 fl mt5" %> - <%# end %> - <% else %> - ml15 fl mt5">未开启补交 - <% end %> - <% elsif work.nil? && setting_time.end_time >= Time.now %> - <% if activity.homework_type == 3 && activity.homework_detail_group.base_on_project == 1 %> - <% if project.nil? %> - <%= link_to "关联项目", new_student_work_project_student_work_index_path(:homework => activity.id, :user_activity_id => user_activity_id, :hw_status => hw_status), remote: true, :class => 'edu-filter-btn edu-activity-blue ml15 fl mt5', :title => '请各组长关联作业项目' %> - <%= link_to "提交作品", "javascript:void(0)", :class => 'edu-filter-btn edu-activity-blue ml15 fl mt5', :style => "cursor:not-allowed", :title => '请先关联项目再提交作品' %> + <%# end %> <% else %> - 取消关联 - <%= link_to "提交作品", new_student_work_url_without_domain(activity.id), :class => 'edu-filter-btn edu-activity-blue ml15 fl mt5' %> + ml15 fl mt5">未开启补交 <% end %> - <% else %> - <%= link_to "提交作品", new_student_work_url_without_domain(activity.id), :class => 'edu-filter-btn edu-activity-blue ml15 fl mt5' %> - <% end %> - <% elsif work.nil? %> - <% if activity.anonymous_comment == 1 || activity.homework_detail_manual.try(:comment_status).to_i < 3 %> - <% if activity.allow_late && activity.homework_type == 3 && activity.homework_detail_group.base_on_project == 1 %> + <% elsif work.nil? && setting_time.end_time >= Time.now %> + <% if activity.homework_type == 3 && activity.homework_detail_group.base_on_project == 1 %> <% if project.nil? %> <%= link_to "关联项目", new_student_work_project_student_work_index_path(:homework => activity.id, :user_activity_id => user_activity_id, :hw_status => hw_status), remote: true, :class => 'edu-filter-btn edu-activity-blue ml15 fl mt5', :title => '请各组长关联作业项目' %> + <%= link_to "提交作品", "javascript:void(0)", :class => 'edu-filter-btn edu-activity-blue ml15 fl mt5', :style => "cursor:not-allowed", :title => '请先关联项目再提交作品' %> <% else %> 取消关联 + <%= link_to "提交作品", new_student_work_url_without_domain(activity.id), :class => 'edu-filter-btn edu-activity-blue ml15 fl mt5' %> <% end %> + <% else %> + <%= link_to "提交作品", new_student_work_url_without_domain(activity.id), :class => 'edu-filter-btn edu-activity-blue ml15 fl mt5' %> <% end %> - <%= un_commit_work_status project, activity %> - <% else %> - <% if activity.homework_detail_manual.try(:comment_status).to_i == 3 %> - ml15 fl mt5">匿评中 - <% if activity.allow_late && activity.homework_type == 3 && activity.homework_detail_group.base_on_project == 1 %> - <% if project.nil? %> - <%= link_to "关联项目", new_student_work_project_student_work_index_path(:homework => activity.id, :user_activity_id => user_activity_id, :hw_status => hw_status), remote: true, :class => 'edu-filter-btn edu-activity-blue ml15 fl mt5', :title => '请各组长关联作业项目' %> - <% else %> - 取消关联 - <% end %> - <% end %> - <%= un_commit_work_status project, activity %> - <% elsif activity.homework_detail_manual.try(:comment_status).to_i == 4 || activity.homework_detail_manual.try(:comment_status).to_i > 4 %> - <% if activity.homework_detail_manual.try(:comment_status).to_i == 4 %> - ml15 fl mt5">申诉中 - <% else %> - ml15 fl mt5">评阅中 - <% end %> + <% elsif work.nil? %> + <% if activity.anonymous_comment == 1 || activity.homework_detail_manual.try(:comment_status).to_i < 3 %> <% if activity.allow_late && activity.homework_type == 3 && activity.homework_detail_group.base_on_project == 1 %> <% if project.nil? %> <%= link_to "关联项目", new_student_work_project_student_work_index_path(:homework => activity.id, :user_activity_id => user_activity_id, :hw_status => hw_status), remote: true, :class => 'edu-filter-btn edu-activity-blue ml15 fl mt5', :title => '请各组长关联作业项目' %> @@ -142,48 +118,74 @@ <% end %> <% end %> <%= un_commit_work_status project, activity %> - <% end %> - <% end %> - <% elsif work.present? %> - <% if setting_time.end_time >= Time.now %> - ml15 fl mt5">提交中 - <%= link_to "修改作品", edit_student_work_url_without_domain(work.id), :class => 'edu-filter-btn edu-activity-orange ml15 fl mt5' %> - <% else %> - <% if activity.anonymous_comment == 1 || activity.homework_detail_manual.try(:comment_status).to_i < 3 %> - <%= late_commit_work_status work, activity %> - <%= link_to "查看作品", student_work_path(work), :class => 'edu-filter-btn edu-activity-green ml15 fl mt5' %> <% else %> - <% work_ids = "(" + activity.student_works.has_committed.map(&:id).join(",") + ")" %> <% if activity.homework_detail_manual.try(:comment_status).to_i == 3 %> - <% if activity.allow_late %> - <% if User.current.student_works_evaluation_distributions.where("student_work_id IN #{work_ids}").count > 0 %> - <%= link_to "补交附件", student_work_path(work, :is_focus => 1), :class => 'edu-filter-btn edu-activity-orange ml15 fl mt5', :title => "可追加作品修订附件" %> - <% link_to "匿评作品", student_work_index_path(:homework => activity.id), :class => 'edu-filter-btn edu-activity-grey ml15 fl mt5', :title => "开启匿评后不可修改作品" %> - <% else %> - ml15 fl mt5">匿评中 - <%= link_to "补交附件", student_work_path(work, :is_focus => 1), :class => 'edu-filter-btn edu-activity-orange ml15 fl mt5', :title => "可追加作品修订附件" %> - <% end %> - <% else %> - <% if User.current.student_works_evaluation_distributions.where("student_work_id IN #{work_ids}").count > 0 %> - ml15 fl mt5">未开启补交 - <% link_to "匿评作品", student_work_index_path(:homework => activity.id), :class => 'edu-filter-btn edu-activity-grey ml15 fl mt5', :title => "开启匿评后不可修改作品" %> + ml15 fl mt5">匿评中 + <% if activity.allow_late && activity.homework_type == 3 && activity.homework_detail_group.base_on_project == 1 %> + <% if project.nil? %> + <%= link_to "关联项目", new_student_work_project_student_work_index_path(:homework => activity.id, :user_activity_id => user_activity_id, :hw_status => hw_status), remote: true, :class => 'edu-filter-btn edu-activity-blue ml15 fl mt5', :title => '请各组长关联作业项目' %> <% else %> - ml15 fl mt5">匿评中 - ml15 fl mt5">未开启补交 + 取消关联 <% end %> <% end %> + <%= un_commit_work_status project, activity %> <% elsif activity.homework_detail_manual.try(:comment_status).to_i == 4 || activity.homework_detail_manual.try(:comment_status).to_i > 4 %> <% if activity.homework_detail_manual.try(:comment_status).to_i == 4 %> ml15 fl mt5">申诉中 <% else %> ml15 fl mt5">评阅中 <% end %> - <% if activity.allow_late %> - <%= link_to "补交附件", student_work_path(work, :is_focus => 1), :class => 'edu-filter-btn edu-activity-orange ml15 fl mt5', :title => "可追加作品修订附件" %> - <%= link_to "查看作品", student_work_path(work), :class => 'edu-filter-btn edu-activity-green ml15 fl mt5' %> - <% else %> - ml15 fl mt5">未开启补交 - <%= link_to "查看作品", student_work_path(work), :class => 'edu-filter-btn edu-activity-green ml15 fl mt5' %> + <% if activity.allow_late && activity.homework_type == 3 && activity.homework_detail_group.base_on_project == 1 %> + <% if project.nil? %> + <%= link_to "关联项目", new_student_work_project_student_work_index_path(:homework => activity.id, :user_activity_id => user_activity_id, :hw_status => hw_status), remote: true, :class => 'edu-filter-btn edu-activity-blue ml15 fl mt5', :title => '请各组长关联作业项目' %> + <% else %> + 取消关联 + <% end %> + <% end %> + <%= un_commit_work_status project, activity %> + <% end %> + <% end %> + <% elsif work.present? %> + <% if setting_time.end_time >= Time.now %> + ml15 fl mt5">提交中 + <%= link_to "修改作品", edit_student_work_url_without_domain(work.id), :class => 'edu-filter-btn edu-activity-orange ml15 fl mt5' %> + <% else %> + <% if activity.anonymous_comment == 1 || activity.homework_detail_manual.try(:comment_status).to_i < 3 %> + <%= late_commit_work_status work, activity %> + <%= link_to "查看作品", student_work_path(work), :class => 'edu-filter-btn edu-activity-green ml15 fl mt5' %> + <% else %> + <% work_ids = "(" + activity.student_works.has_committed.map(&:id).join(",") + ")" %> + <% if activity.homework_detail_manual.try(:comment_status).to_i == 3 %> + <% if activity.allow_late %> + <% if User.current.student_works_evaluation_distributions.where("student_work_id IN #{work_ids}").count > 0 %> + <%= link_to "补交附件", student_work_path(work, :is_focus => 1), :class => 'edu-filter-btn edu-activity-orange ml15 fl mt5', :title => "可追加作品修订附件" %> + <% link_to "匿评作品", student_work_index_path(:homework => activity.id), :class => 'edu-filter-btn edu-activity-grey ml15 fl mt5', :title => "开启匿评后不可修改作品" %> + <% else %> + ml15 fl mt5">匿评中 + <%= link_to "补交附件", student_work_path(work, :is_focus => 1), :class => 'edu-filter-btn edu-activity-orange ml15 fl mt5', :title => "可追加作品修订附件" %> + <% end %> + <% else %> + <% if User.current.student_works_evaluation_distributions.where("student_work_id IN #{work_ids}").count > 0 %> + ml15 fl mt5">未开启补交 + <% link_to "匿评作品", student_work_index_path(:homework => activity.id), :class => 'edu-filter-btn edu-activity-grey ml15 fl mt5', :title => "开启匿评后不可修改作品" %> + <% else %> + ml15 fl mt5">匿评中 + ml15 fl mt5">未开启补交 + <% end %> + <% end %> + <% elsif activity.homework_detail_manual.try(:comment_status).to_i == 4 || activity.homework_detail_manual.try(:comment_status).to_i > 4 %> + <% if activity.homework_detail_manual.try(:comment_status).to_i == 4 %> + ml15 fl mt5">申诉中 + <% else %> + ml15 fl mt5">评阅中 + <% end %> + <% if activity.allow_late %> + <%= link_to "补交附件", student_work_path(work, :is_focus => 1), :class => 'edu-filter-btn edu-activity-orange ml15 fl mt5', :title => "可追加作品修订附件" %> + <%= link_to "查看作品", student_work_path(work), :class => 'edu-filter-btn edu-activity-green ml15 fl mt5' %> + <% else %> + ml15 fl mt5">未开启补交 + <%= link_to "查看作品", student_work_path(work), :class => 'edu-filter-btn edu-activity-green ml15 fl mt5' %> + <% end %> <% end %> <% end %> <% end %> diff --git a/app/views/users/_course_message.html.erb b/app/views/users/_course_message.html.erb index 88a5ce4a..1c20e14f 100644 --- a/app/views/users/_course_message.html.erb +++ b/app/views/users/_course_message.html.erb @@ -8,6 +8,8 @@ <% if activity.sticky == 1%> 置顶 <% end%> + + <% if false %> <% if @is_teacher %>
        @@ -25,6 +27,8 @@
      <% end%> + <% end %> +

    <%= link_to activity.author.show_real_name, user_path(activity.author), :class => "color-grey-6 mr30" %> diff --git a/app/views/users/_course_poll.html.erb b/app/views/users/_course_poll.html.erb index 4ec07679..33077b2c 100644 --- a/app/views/users/_course_poll.html.erb +++ b/app/views/users/_course_poll.html.erb @@ -10,12 +10,13 @@ <% end %> <% if @is_teacher || !User.current.member_of_course?(activity.course) %> - <% ex_curr_status = poll_curr_time activity %> - <% if ex_curr_status[:status] != "" %> - <%= ex_curr_status[:status] %> - <% end %> + <% ex_curr_status = poll_curr_time activity %> + <% if ex_curr_status[:status] != "" %> + <%= ex_curr_status[:status] %> <% end %> + <% end %> + <% if false %> <% if @is_teacher %>

    @@ -63,6 +64,8 @@ <%= link_to "开始答题", poll_path(activity,:user_id => User.current.id), :class => "edu-activity-blue edu-filter-btn ml15 fl mt5" %> <% end %> <% end%> + <% end %> +

    <%= link_to activity.user.show_real_name, user_path(activity.user), :class => "color-grey-6 mr30" %> From d88139c12d7e61dd79bf7c2afb2cc236759617c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Wed, 17 Apr 2019 15:57:14 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E5=BC=B9=E6=A1=86=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=BB=9A=E5=8A=A8=E5=8A=A0=E8=BD=BD=EF=BC=8C=E2=80=9C=E5=AE=9E?= =?UTF-8?q?=E8=AE=AD=E9=A2=98=E2=80=9D=E7=BC=96=E8=BE=91=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/exercise/_edit_shixun.html.erb | 117 +++++++++++++----- app/views/exercise/_new_shixun.html.erb | 81 +++++++----- .../_new_shixun_exercise_list.html.erb | 41 ++++-- public/stylesheets/educoder/edu-main.css | 58 ++++++++- 4 files changed, 222 insertions(+), 75 deletions(-) diff --git a/app/views/exercise/_edit_shixun.html.erb b/app/views/exercise/_edit_shixun.html.erb index 4d60a41c..1e8fb088 100644 --- a/app/views/exercise/_edit_shixun.html.erb +++ b/app/views/exercise/_edit_shixun.html.erb @@ -1,35 +1,86 @@ <%= form_for("",:url => update_exercise_question_exercise_index_path(:exercise_question => exercise_question.id),:html => {:id => "update_exercise_question_#{exercise_question.id}"}) do |f|%> -

    -

    实训题

    -

    <%= exercise_question.shixun.name %>

    -
  • - - - -
  • -
  • - - 关卡名称 - 分值 -
  • - <% exercise_question.exercise_shixun_challenges.each_with_index do |exercise_challenge,index| %> -
  • - - <%= exercise_challenge.challenge.subject %> - - -
  • -
    - <% end %> - -
  • -

    - 温馨提示:[实训题]属于客观题将由系统自动评分 - 保存 - 取消 -

    -
  • -
    + + + + + + + + + + + + + + <%# exercise_question.exercise_shixun_challenges.each_with_index do |exercise_challenge,index| %> + + + + + + + + + + <%# end %> + + + + + + + + + + + + <% end %> + +
    + +
    实训题
    + +
    + + 初级题 + +
    + *分值: 分/题 +
    *大于等于0,且不能大于100
    +
    + +
    + * + 随机出题量: 题 +
    *不能为空
    +
    *必须为正整数
    +
    *不能大于可用题数
    +
    + +
    + 3 + 题可用 +
    + +
    + +
    + + 中级题 + +
    + +
    + + 高级题 + +
    + +
    + + 顶级题 + +
    + +
    \ No newline at end of file diff --git a/app/views/exercise/_new_shixun.html.erb b/app/views/exercise/_new_shixun.html.erb index 1cff068f..389a4b67 100644 --- a/app/views/exercise/_new_shixun.html.erb +++ b/app/views/exercise/_new_shixun.html.erb @@ -3,40 +3,55 @@ <%= form_for(ExerciseQuestion.new, :html => { :multipart => true, :id => "new_exercise_question"}, :url=>create_exercise_question_exercise_path(exercise.id)) do |f| %> -
    -

    实训题

    - - - -

    <%= @shixun.name %>

    -
  • - - -
  • -
  • - - 关卡名称 - 分值 -
  • - <% @shixun.challenges.each_with_index do |challenge, i| %> -
  • - - <%= challenge.subject %> - - -
  • - <% end %> -
  • -

    - 温馨提示:[实训题]属于客观题将由系统自动评分 - 保存 - 取消 -

    -
  • -
    + + + + + + + + + + + + + + + + <%# @shixun.challenges.each_with_index do |challenge, i| %> + + + + + + + + + <%# end %> + + + + + + + + <% end %> + + +
    + +

    实训题

    + +

    + + +

    + +
    + + +
    <% end %> \ No newline at end of file diff --git a/public/stylesheets/educoder/edu-main.css b/public/stylesheets/educoder/edu-main.css index dac31425..583e4a15 100644 --- a/public/stylesheets/educoder/edu-main.css +++ b/public/stylesheets/educoder/edu-main.css @@ -149,7 +149,8 @@ a.decoration{text-decoration: underline} .padding20-15{padding: 20px 15px;box-sizing: border-box} .padding20-10{padding: 20px 10px;box-sizing: border-box} .padding20-25{padding: 20px 25px;box-sizing: border-box} - +.padding10{padding: 10px;box-sizing: border-box} +.padding20{padding: 20px;box-sizing: border-box} .padding30{padding: 30px;box-sizing: border-box} .padding30-20{padding: 30px 20px;box-sizing: border-box} .padding30-40{padding: 30px 40px;box-sizing: border-box} @@ -883,3 +884,58 @@ html>body #ajax-indicator { position: fixed; } margin-top: 60px; margin-left: -26px; } +.selecshixun{ + overflow-y: scroll; +} + +.practicalTemp{ + width:1200px; + height:950px; + background:rgba(255,255,255,1); + border:1px solid rgba(238,238,238,1); +} + +.practicalTitlefont{ + font-size:18px; + font-family:MicrosoftYaHei; + font-weight:400; + color:rgba(102,102,102,1); + width: 1200px; + height: 60px; + line-height: 25px; + padding-left: 10px; + border-bottom: 1px solid rgba(238,238,238,1); +} + +.practicalTitle{ + width: 1160px; + padding: 20px; + border-bottom:1px solid rgba(238,238,238,1); +} + +.Titlefont{ + width: 48px; + height: 30px; + font-size: 15px; + font-family: MicrosoftYaHei; + font-weight: 400; + color: rgba(5,16,26,1); +} +.shixun-title-font{ + font-size:16px; + font-family:MicrosoftYaHei; + font-weight:400; + color:#828282; +} + +.colorFF8121{ + color: #FF8121; + font-size: 12px; + text-align: left; + width: 110px; + margin-left: 117px; +} + +.borderFF8121{ + border:1px solid #FF8121 +} \ No newline at end of file From dd974ffd29229d383ad71b21fa1a65359411e82d Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Wed, 17 Apr 2019 15:59:57 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E8=AF=95=E5=8D=B7=E5=AE=9E=E8=AE=AD?= =?UTF-8?q?=E9=A2=98=E6=94=B9=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/exercise_controller.rb | 203 ++++++++++-------- app/helpers/exercise_helper.rb | 25 ++- app/models/exercise.rb | 29 ++- app/models/exercise_level_setting.rb | 5 + app/models/exercise_question.rb | 4 + app/models/exercise_user.rb | 2 + app/models/exercise_user_question.rb | 6 + app/views/exercise/_exercise_student.html.erb | 4 +- .../_exercise_student_result.html.erb | 6 +- ...17024319_create_exercise_level_settings.rb | 19 ++ ..._add_exercise_level_setting_to_question.rb | 12 ++ .../20190417024736_create_question_count.rb | 13 ++ ...17033935_create_exercise_user_questions.rb | 14 ++ spec/factories/exercise_level_settings.rb | 8 + spec/factories/exercise_user_questions.rb | 7 + spec/models/exercise_level_setting_spec.rb | 5 + spec/models/exercise_user_question_spec.rb | 5 + 17 files changed, 263 insertions(+), 104 deletions(-) create mode 100644 app/models/exercise_level_setting.rb create mode 100644 app/models/exercise_user_question.rb create mode 100644 db/migrate/20190417024319_create_exercise_level_settings.rb create mode 100644 db/migrate/20190417024510_add_exercise_level_setting_to_question.rb create mode 100644 db/migrate/20190417024736_create_question_count.rb create mode 100644 db/migrate/20190417033935_create_exercise_user_questions.rb create mode 100644 spec/factories/exercise_level_settings.rb create mode 100644 spec/factories/exercise_user_questions.rb create mode 100644 spec/models/exercise_level_setting_spec.rb create mode 100644 spec/models/exercise_user_question_spec.rb diff --git a/app/controllers/exercise_controller.rb b/app/controllers/exercise_controller.rb index 65a0b9e9..2dfc2601 100644 --- a/app/controllers/exercise_controller.rb +++ b/app/controllers/exercise_controller.rb @@ -73,8 +73,14 @@ class ExerciseController < ApplicationController @exercise_user = ExerciseUser.where("user_id=? and exercise_id=?", User.current.id, @exercise.id).first if @exercise_user.nil? @exercise_user = ExerciseUser.create(:user_id => User.current.id, :exercise_id => @exercise.id, :start_at => Time.now, :status => false, :commit_status => 0) + if @exercise.exercise_level_settings.where("num != exercise_questions_count").count > 0 + @exercise.create_user_question_list(@exercise_user) + end # @exercise_user = ExerciseUser.where("user_id=? and exercise_id=?", User.current.id, @exercise.id).first elsif @exercise_user.start_at.nil? + if @exercise.exercise_level_settings.where("num != exercise_questions_count").count > 0 + @exercise.create_user_question_list(@exercise_user) + end @exercise_user.update_attributes(:start_at => Time.now) end @@ -103,7 +109,9 @@ class ExerciseController < ApplicationController @exercise_user = ExerciseUser.where("user_id=? and exercise_id=?", params[:user_id], @exercise.id).first @can_edit_excercise = false end - Rails.logger.info("###########can_edit_excercise:#{@can_edit_excercise}") + + @exercise_questions = user_question_list @exercise_user.id + # @percent = get_percent(@exercise,User.current) #@exercise_questions = @exercise.exercise_questions respond_to do |format| @@ -139,11 +147,13 @@ class ExerciseController < ApplicationController else none_shixun_ids = ShixunSchool.where("school_id != #{User.current.user_extensions.try(:school_id)}").pluck(:shixun_id) end - @shixuns = Shixun.where("status = 2 and id not in (#{none_shixun_ids.join(",")})").where("name like ?", "%#{search}%").select{|shixun| shixun.challenges.where(:st => 1).count == 0} + @shixuns = Shixun.where("status = 2 and challenges_count = 1 and id not in (#{none_shixun_ids.join(",")})"). + where("name like ?", "%#{search}%").select{|shixun| shixun.challenges.where(:st => 1).count == 0} @limit = 8 @shixuns = paginateHelper @shixuns, @limit respond_to do |format| format.js + render json: exercise_shixun_json_data(@shixuns) end end @@ -977,118 +987,122 @@ class ExerciseController < ApplicationController # 已提交过的且是限时的则不允许答题 exercise_user = ExerciseUser.where(:exercise_id => @exercise.id, :user_id => User.current.id).first - if (exercise_user && exercise_user.commit_status == 1) || @exercise.end_time < Time.now - render :json => {:text => "Over"} - return - end - if eq.question_type == 1 - # 单选题 - ea = ExerciseAnswer.find_by_exercise_question_id_and_user_id(params[:exercise_question_id],User.current.id) - if ea.nil? - # 尚未答该题,添加答案 - ea = ExerciseAnswer.new - ea.user_id = User.current.id - ea.exercise_question_id = params[:exercise_question_id] - end - #修改该题对应答案 - ea.exercise_choice_id = params[:exercise_choice_id] - if ea.save - # 保存成功返回成功信息及当前以答题百分比 - uncomplete_question = get_uncomplete_question(@exercise, User.current) - if uncomplete_question.count < 1 - complete = 1; - else - complete = 0; - end - @percent = get_percent(@exercise,User.current) - render :json => {:text => "ok" ,:complete => complete,:percent => format("%.2f" ,@percent)} - else - #返回失败信息 - render :json => {:text => "failure"} + if exercise_user + if (exercise_user && exercise_user.commit_status == 1) || @exercise.end_time < Time.now + render :json => {:text => "Over"} + return end - elsif eq.question_type == 2 - #多选题 - ea = ExerciseAnswer.find_by_exercise_choice_id_and_user_id(params[:exercise_choice_id],User.current.id) - if ea.nil? - #尚未答该题,添加答案 - ea = ExerciseAnswer.new - ea.user_id = User.current.id - ea.exercise_question_id = params[:exercise_question_id] + if eq.question_type == 1 + # 单选题 + ea = ExerciseAnswer.find_by_exercise_question_id_and_user_id(params[:exercise_question_id],User.current.id) + if ea.nil? + # 尚未答该题,添加答案 + ea = ExerciseAnswer.new + ea.user_id = User.current.id + ea.exercise_question_id = params[:exercise_question_id] + end + #修改该题对应答案 ea.exercise_choice_id = params[:exercise_choice_id] if ea.save - uncomplete_question = get_uncomplete_question(@exercise, User.current) + # 保存成功返回成功信息及当前以答题百分比 + uncomplete_question = get_uncomplete_question(@exercise, exercise_user) if uncomplete_question.count < 1 complete = 1; else complete = 0; end - is_answer = User.current.exercise_answer.where(:exercise_question_id => params[:exercise_question_id].to_i).count > 0 - @percent = get_percent(@exercise,User.current) - render :json => {:text => "ok",:complete => complete,:percent => format("%.2f" ,@percent),:is_answer => is_answer} - else - render :json => {:text => "failure"} - end - else - #pv不为空,则当前选项之前已被选择,再次点击则是不再选择该项,故删除该答案 - if ea.delete - is_answer = User.current.exercise_answer.where(:exercise_question_id => params[:exercise_question_id].to_i).count > 0 - @percent = get_percent(@exercise, User.current) - render :json => {:text => "false" ,:percent => format("%.2f" , @percent),:is_answer => is_answer} + @percent = get_percent(@exercise, exercise_user) + render :json => {:text => "ok" ,:complete => complete,:percent => format("%.2f" ,@percent)} else + #返回失败信息 render :json => {:text => "failure"} end - end - elsif eq.question_type == 3 || eq.question_type == 4 - #单行文本,多行文本题 - ea = ExerciseAnswer.find_by_exercise_question_id_and_user_id(params[:exercise_question_id], User.current.id) - if ea.nil? - # ea为空之前尚未答题,添加答案 - if params[:answer_text].nil? || params[:answer_text].blank? - #用户提交空答案,视作不作答 - @percent = get_percent(@exercise,User.current) - render :json => {:text => "",:percent => format("%.2f", @percent)} - else - #添加答案 + elsif eq.question_type == 2 + #多选题 + ea = ExerciseAnswer.find_by_exercise_choice_id_and_user_id(params[:exercise_choice_id],User.current.id) + if ea.nil? + #尚未答该题,添加答案 ea = ExerciseAnswer.new ea.user_id = User.current.id ea.exercise_question_id = params[:exercise_question_id] - ea.answer_text = params[:answer_text] + ea.exercise_choice_id = params[:exercise_choice_id] if ea.save - uncomplete_question = get_uncomplete_question(@exercise, User.current) + uncomplete_question = get_uncomplete_question(@exercise, exercise_user) if uncomplete_question.count < 1 complete = 1; else complete = 0; end - @percent = get_percent(@exercise,User.current) - render :json => {:text => ea.answer_text,:complete => complete,:percent => format("%.2f",@percent)} + is_answer = User.current.exercise_answer.where(:exercise_question_id => params[:exercise_question_id].to_i).count > 0 + @percent = get_percent(@exercise, exercise_user) + render :json => {:text => "ok",:complete => complete,:percent => format("%.2f" ,@percent),:is_answer => is_answer} else render :json => {:text => "failure"} end - end - - else - # ea不为空说明用户之前已作答 - if params[:answer_text].nil? || params[:answer_text].blank? - # 用户提交空答案,视为删除答案 + else + #pv不为空,则当前选项之前已被选择,再次点击则是不再选择该项,故删除该答案 if ea.delete - @percent = get_percent(@exercise,User.current) - render :json => {:text => "",:percent => format("%.2f", @percent)} + is_answer = User.current.exercise_answer.where(:exercise_question_id => params[:exercise_question_id].to_i).count > 0 + @percent = get_percent(@exercise, exercise_user) + render :json => {:text => "false" ,:percent => format("%.2f" , @percent),:is_answer => is_answer} else render :json => {:text => "failure"} end + end + elsif eq.question_type == 3 || eq.question_type == 4 + #单行文本,多行文本题 + ea = ExerciseAnswer.find_by_exercise_question_id_and_user_id(params[:exercise_question_id], User.current.id) + if ea.nil? + # ea为空之前尚未答题,添加答案 + if params[:answer_text].nil? || params[:answer_text].blank? + #用户提交空答案,视作不作答 + @percent = get_percent(@exercise, exercise_user) + render :json => {:text => "",:percent => format("%.2f", @percent)} + else + #添加答案 + ea = ExerciseAnswer.new + ea.user_id = User.current.id + ea.exercise_question_id = params[:exercise_question_id] + ea.answer_text = params[:answer_text] + if ea.save + uncomplete_question = get_uncomplete_question(@exercise, exercise_user) + if uncomplete_question.count < 1 + complete = 1; + else + complete = 0; + end + @percent = get_percent(@exercise, exercise_user) + render :json => {:text => ea.answer_text,:complete => complete,:percent => format("%.2f",@percent)} + else + render :json => {:text => "failure"} + end + end + else - #用户修改答案 - ea.answer_text = params[:answer_text] - if ea.save - @percent = get_percent(@exercise,User.current) - render :json => {:text => ea.answer_text,:percent => format("%.2f", @percent)} + # ea不为空说明用户之前已作答 + if params[:answer_text].nil? || params[:answer_text].blank? + # 用户提交空答案,视为删除答案 + if ea.delete + @percent = get_percent(@exercise, exercise_user) + render :json => {:text => "",:percent => format("%.2f", @percent)} + else + render :json => {:text => "failure"} + end else - render :json => {:text => "failure"} + #用户修改答案 + ea.answer_text = params[:answer_text] + if ea.save + @percent = get_percent(@exercise, exercise_user) + render :json => {:text => ea.answer_text,:percent => format("%.2f", @percent)} + else + render :json => {:text => "failure"} + end end end - end + else + render :json => {:text => "failure"} + end else render :json => {:text => "failure"} end @@ -1165,9 +1179,10 @@ class ExerciseController < ApplicationController # 获取学生未答情况 def get_student_uncomplete_question + exercise_user = @exercise.exercise_users.where(:user_id => User.current).first time_limit = @exercise.time == -1 || @exercise.time.nil? - uncomplete_count = get_uncomplete_question(@exercise, User.current).count - uncomplete_shixun = get_uncomplete_shixun(@exercise, User.current).count + uncomplete_count = get_uncomplete_question(@exercise, exercise_user).count + uncomplete_shixun = get_uncomplete_shixun(@exercise, exercise_user).count render :json => {:time_limit => time_limit, :uncomplete_count => uncomplete_count, :uncomplete_shixun => uncomplete_shixun} end @@ -1241,8 +1256,8 @@ class ExerciseController < ApplicationController @is_teacher = params[:pdf] ? true : User.current.allowed_to?(:as_teacher,@course) || User.current.admin? if @is_teacher || (User.current.member_of_course?(@exercise.course) && @exercise.exercise_status > 2) @user = User.find params[:user_id] - @exercise_questions = @exercise.exercise_questions @exercise_user = ExerciseUser.where("user_id =? and exercise_id=?", @user.id, @exercise.id).first + @exercise_questions = @exercise.user_question_list @exercise_user.id respond_to do |format| if params[:pdf] format.html { render :layout => "pdf" } @@ -1305,7 +1320,8 @@ class ExerciseController < ApplicationController score2 = 0 score3 = 0 score4 = 0 - exercise_qustions = exercise.exercise_questions + exercise_user = exercise.exercise_users.where(user_id: user.id).first + exercise_qustions = exercise.user_question_list(exercise_user.try(:id)) exercise_qustions.each do |question| if question.question_type != 5 answer = get_user_answer(question, user) @@ -1608,11 +1624,11 @@ class ExerciseController < ApplicationController standard_answer end # 是否完成了答题 - def get_complete_question(exercise,user) - questions = exercise.exercise_questions.includes(:exercise_answers) + def get_complete_question(exercise, exercise_user) + questions = exercise.user_question_list(exercise_user.id).includes(:exercise_answers) complete_question = [] questions.each do |question| - answers = question.exercise_answers.select{|e| e.user_id == user.id} + answers = question.exercise_answers.select{|e| e.user_id == exercise_user.user_id} if !(answers.nil? || answers.count < 1) complete_question << question end @@ -1621,12 +1637,13 @@ class ExerciseController < ApplicationController end # 获取答题百分比 - def get_percent exercise,user - complete_count = get_complete_question(exercise,user).count - if exercise.exercise_questions.count == 0 + def get_percent exercise, exercise_user + complete_count = get_complete_question(exercise,exercise_user).count + questions = exercise.user_question_list(exercise_user.id) + if questions.count == 0 return 0 else - return (complete_count.to_f / exercise.exercise_questions.count.to_f)*100 + return (complete_count.to_f / questions.count.to_f)*100 end end diff --git a/app/helpers/exercise_helper.rb b/app/helpers/exercise_helper.rb index b5a56020..cdea7b88 100644 --- a/app/helpers/exercise_helper.rb +++ b/app/helpers/exercise_helper.rb @@ -1,5 +1,18 @@ # encoding: utf-8 module ExerciseHelper + def exercise_shixun_json_data shixuns + shixuns.map do |shixun| + shixun_owner = shixun.owner.try(:show_name) + shixun_path = shixun_path(shixun) + shixun_level = shixun.shixun_level + shixun.attributes.dup.except("gpid", "identifier", "major_id", "webssh", "homepage_show", "fork_from", "git_url", + "mirror_script_id", "repo_name", "pod_life").merge({ + shixun_owner: shixun_owner, + shixun_level: shixun_level, + shixun_path: shixun_path + }) + end + end def un_commit_num exercise course = exercise.course @@ -266,12 +279,13 @@ module ExerciseHelper end #获取未完成的题目 - def get_uncomplete_question exercise,user + def get_uncomplete_question exercise, exercise_user # all_questions = exercise.exercise_questions.includes(:exercise_answers).where("question_type != 5") uncomplete_question = [] - exercise.exercise_questions.includes(:exercise_answers).where("question_type != 5").each do |question| + questions = exercise.user_question_list(exercise_user.id) + questions.includes(:exercise_answers).where("question_type != 5").each do |question| # answers = get_user_answer(question, user) - answers = question.exercise_answers.select{|e| e.user_id == user.id} + answers = question.exercise_answers.select{|e| e.user_id == exercise_user.user_id} if answers.empty? uncomplete_question << question end @@ -280,8 +294,9 @@ module ExerciseHelper end # 获取未通关的实训 - def get_uncomplete_shixun exercise,user - all_questions = exercise.exercise_questions.where("question_type = 5") + def get_uncomplete_shixun exercise, exercise_user + questions = exercise.user_question_list(exercise_user.try(:id)) + all_questions = questions.where("question_type = 5") uncomplete_shixun = [] all_questions.each do |question| myshixun = Myshixun.where(:shixun_id => question.shixun_id, :user_id => user.id).first diff --git a/app/models/exercise.rb b/app/models/exercise.rb index 47993cf9..a8452df0 100644 --- a/app/models/exercise.rb +++ b/app/models/exercise.rb @@ -5,13 +5,17 @@ class Exercise < ActiveRecord::Base belongs_to :course ,:touch => true belongs_to :exercise_bank has_many :exercise_group_settings, :dependent => :destroy - has_many :exercise_questions, :dependent => :destroy,:order => "#{ExerciseQuestion.table_name}.question_number" + has_many :exercise_questions, :dependent => :destroy has_many :exercise_users, :dependent => :destroy, :conditions => "exercise_users.is_delete = 0" has_many :users, :through => :exercise_users #该测试被哪些用户提交答案过 has_many :course_acts, :class_name => 'CourseActivity',:as =>:course_act ,:dependent => :destroy # 课程消息 has_many :tidings, as: :container, dependent: :destroy has_many :course_messages, :class_name =>'CourseMessage', :as => :course_message, :dependent => :destroy + + has_many :exercise_level_settings, :dependent => :destroy + has_many :exercise_user_questions + after_create :acts_as_course_message def acts_as_course_message if self.course @@ -24,4 +28,27 @@ class Exercise < ActiveRecord::Base end end end + + def create_user_question_list exercise_user_id + self.exercise_questions.where("question_type != 5").each do |question| + self.exercise_user_questions << ExerciseUserQuestion.new(exercise_user_id: exercise_user_id, + exercise_question_id: question) + end + self.exercise_level_settings.each do |setting| + # 每个级别中随机挑选num个实训题 + setting.exercise_questions.pluck(:id).sample(setting.num).each do |question_id| + self.exercise_user_questions << ExerciseUserQuestion.new(exercise_user_id: exercise_user_id, + exercise_question_id: question_id) + end + end + end + + def user_question_list exercise_user_id + if self.exercise_user_questions.where(exercise_user_id: exercise_user_id).count == 0 + self.exercise_questions + else + self.exercise_questions.where(id: self.exercise_user_questions.where(exercise_user_id: exercise_user_id). + pluck(:exercise_question_id)) + end + end end diff --git a/app/models/exercise_level_setting.rb b/app/models/exercise_level_setting.rb new file mode 100644 index 00000000..3e687d8c --- /dev/null +++ b/app/models/exercise_level_setting.rb @@ -0,0 +1,5 @@ +class ExerciseLevelSetting < ActiveRecord::Base + belongs_to :exercise + has_many :exercise_questions + # attr_accessible :level, :num, :score +end diff --git a/app/models/exercise_question.rb b/app/models/exercise_question.rb index cadc67fc..63d9cdf9 100644 --- a/app/models/exercise_question.rb +++ b/app/models/exercise_question.rb @@ -1,6 +1,7 @@ #encoding: utf-8 class ExerciseQuestion < ActiveRecord::Base include Redmine::SafeAttributes + default_scope :order => 'question_number' belongs_to :exercise belongs_to :shixun @@ -11,6 +12,9 @@ class ExerciseQuestion < ActiveRecord::Base has_many :exercise_answer_comments, :dependent => :destroy has_many :exercise_standard_answers, :dependent => :destroy + belongs_to :exercise_level_setting, counter_cache: true + has_many :exercise_user_questions, :dependent => :destroy + def question_type_name case self.question_type when 1 diff --git a/app/models/exercise_user.rb b/app/models/exercise_user.rb index c675f35a..8609ba26 100644 --- a/app/models/exercise_user.rb +++ b/app/models/exercise_user.rb @@ -4,4 +4,6 @@ class ExerciseUser < ActiveRecord::Base belongs_to :user belongs_to :exercise + + has_many :exercise_user_questions end diff --git a/app/models/exercise_user_question.rb b/app/models/exercise_user_question.rb new file mode 100644 index 00000000..136a187f --- /dev/null +++ b/app/models/exercise_user_question.rb @@ -0,0 +1,6 @@ +class ExerciseUserQuestion < ActiveRecord::Base + belongs_to :exercise + belongs_to :exercise_user + belongs_to :exercise_question + # attr_accessible :title, :body +end diff --git a/app/views/exercise/_exercise_student.html.erb b/app/views/exercise/_exercise_student.html.erb index d361c200..5d12c301 100644 --- a/app/views/exercise/_exercise_student.html.erb +++ b/app/views/exercise/_exercise_student.html.erb @@ -134,9 +134,9 @@
    <% if @exercise.question_random == 1 %> - <% question_list = @exercise.exercise_questions.includes(:exercise_shixun_answers, :exercise_choices => [:exercise_answers]).shuffle %> + <% question_list = @exercise_questions.includes(:exercise_shixun_answers, :exercise_choices => [:exercise_answers]).shuffle %> <% else %> - <% question_list = @exercise.exercise_questions.includes(:exercise_shixun_answers, :exercise_choices => [:exercise_answers]) %> + <% question_list = @exercise_questions.includes(:exercise_shixun_answers, :exercise_choices => [:exercise_answers]) %> <% end %> diff --git a/app/views/exercise/_exercise_student_result.html.erb b/app/views/exercise/_exercise_student_result.html.erb index b5336cdb..8c1de5ea 100644 --- a/app/views/exercise/_exercise_student_result.html.erb +++ b/app/views/exercise/_exercise_student_result.html.erb @@ -76,7 +76,7 @@

    - <% @exercise.exercise_questions.where(:question_type => [1, 2, 3, 5]).each do |eq| %> + <% exercise_questions.where(:question_type => [1, 2, 3, 5]).each do |eq| %> <% is_correct = answer_is_correct(eq, user) %> <%= eq.question_number %> <% end %> @@ -88,14 +88,14 @@ 开始答题时间:<%= format_time @exercise_user.start_at %>
    - <% @exercise.exercise_questions.where(:question_type => 4).each do |eq| %> + <% exercise_questions.where(:question_type => 4).each do |eq| %> <% ea = @exercise_user.user.exercise_answer.where(:exercise_question_id => eq.id).first %> <%= eq.question_number %> <% end %>
    - <% question_list = @exercise.exercise_questions.includes(:exercise_shixun_answers, :exercise_choices => [:exercise_answers]) %> + <% question_list = exercise_questions.includes(:exercise_shixun_answers, :exercise_choices => [:exercise_answers]) %> <% question_list.each do |exercise_question| %>
    diff --git a/db/migrate/20190417024319_create_exercise_level_settings.rb b/db/migrate/20190417024319_create_exercise_level_settings.rb new file mode 100644 index 00000000..6aaa349f --- /dev/null +++ b/db/migrate/20190417024319_create_exercise_level_settings.rb @@ -0,0 +1,19 @@ +class CreateExerciseLevelSettings < ActiveRecord::Migration + def change + create_table :exercise_level_settings do |t| + t.references :exercise + t.integer :level, default: 1 + t.integer :score, default: 0 + t.integer :num, default: 0 + + t.timestamps + end + add_index :exercise_level_settings, :exercise_id + + Exercise.find_each do |exercise| + shixun_questions = exercise.exercise_questions.where(question_type: 5) + exercise.exercise_level_settings << ExerciseLevelSetting.new(level: 1, score: shixun_questions.map(&:question_score).min, + num: shixun_questions.count) + end + end +end diff --git a/db/migrate/20190417024510_add_exercise_level_setting_to_question.rb b/db/migrate/20190417024510_add_exercise_level_setting_to_question.rb new file mode 100644 index 00000000..33611a73 --- /dev/null +++ b/db/migrate/20190417024510_add_exercise_level_setting_to_question.rb @@ -0,0 +1,12 @@ +class AddExerciseLevelSettingToQuestion < ActiveRecord::Migration + def change + add_column :exercise_questions, :exercise_level_setting_id, :integer, default: 0 + add_column :exercise_questions, :level, :integer, default: 1 + + add_index :exercise_questions, :exercise_level_setting_id + + ExerciseQuestion.where(question_type: 5).find_each do |question| + question.update_attributes(exercise_level_setting_id: question.exercise.exercise_level_settings.first.try(:id)) if question.exercise.present? + end + end +end diff --git a/db/migrate/20190417024736_create_question_count.rb b/db/migrate/20190417024736_create_question_count.rb new file mode 100644 index 00000000..6653a929 --- /dev/null +++ b/db/migrate/20190417024736_create_question_count.rb @@ -0,0 +1,13 @@ +class CreateQuestionCount < ActiveRecord::Migration + def up + add_column :exercise_level_settings, :exercise_questions_count, :integer, :default => 0 + + ExerciseLevelSetting.reset_column_information + ExerciseLevelSetting.find_each do |s| + ExerciseLevelSetting.reset_counters s.id, :exercise_questions + end + end + + def down + end +end diff --git a/db/migrate/20190417033935_create_exercise_user_questions.rb b/db/migrate/20190417033935_create_exercise_user_questions.rb new file mode 100644 index 00000000..950f2ab7 --- /dev/null +++ b/db/migrate/20190417033935_create_exercise_user_questions.rb @@ -0,0 +1,14 @@ +class CreateExerciseUserQuestions < ActiveRecord::Migration + def change + create_table :exercise_user_questions do |t| + t.references :exercise + t.references :exercise_user + t.references :exercise_question + + t.timestamps + end + add_index :exercise_user_questions, :exercise_id + add_index :exercise_user_questions, :exercise_user_id + add_index :exercise_user_questions, :exercise_question_id + end +end diff --git a/spec/factories/exercise_level_settings.rb b/spec/factories/exercise_level_settings.rb new file mode 100644 index 00000000..a412882c --- /dev/null +++ b/spec/factories/exercise_level_settings.rb @@ -0,0 +1,8 @@ +FactoryGirl.define do + factory :exercise_level_setting do + exercise nil + level 1 + score 1 + num 1 + end +end diff --git a/spec/factories/exercise_user_questions.rb b/spec/factories/exercise_user_questions.rb new file mode 100644 index 00000000..493cdb0d --- /dev/null +++ b/spec/factories/exercise_user_questions.rb @@ -0,0 +1,7 @@ +FactoryGirl.define do + factory :exercise_user_question do + exercise nil + exercise_user nil + exercise_question nil + end +end diff --git a/spec/models/exercise_level_setting_spec.rb b/spec/models/exercise_level_setting_spec.rb new file mode 100644 index 00000000..ea20df40 --- /dev/null +++ b/spec/models/exercise_level_setting_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe ExerciseLevelSetting, :type => :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/exercise_user_question_spec.rb b/spec/models/exercise_user_question_spec.rb new file mode 100644 index 00000000..00e111c3 --- /dev/null +++ b/spec/models/exercise_user_question_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe ExerciseUserQuestion, :type => :model do + pending "add some examples to (or delete) #{__FILE__}" +end From 18466876754ffef214ad18ed6a586e58ee4ab3a8 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Wed, 17 Apr 2019 16:23:33 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/exercise_controller.rb | 7 ++- app/helpers/exercise_helper.rb | 4 +- .../_new_shixun_exercise_list.html.erb | 59 +++++++++++++++++-- public/javascripts/edu/course.js | 3 +- 4 files changed, 63 insertions(+), 10 deletions(-) diff --git a/app/controllers/exercise_controller.rb b/app/controllers/exercise_controller.rb index 2dfc2601..15998dbf 100644 --- a/app/controllers/exercise_controller.rb +++ b/app/controllers/exercise_controller.rb @@ -149,11 +149,14 @@ class ExerciseController < ApplicationController end @shixuns = Shixun.where("status = 2 and challenges_count = 1 and id not in (#{none_shixun_ids.join(",")})"). where("name like ?", "%#{search}%").select{|shixun| shixun.challenges.where(:st => 1).count == 0} - @limit = 8 + @limit = 10 + @total_pages = (@shixuns.count / 10.0).ceil @shixuns = paginateHelper @shixuns, @limit respond_to do |format| format.js - render json: exercise_shixun_json_data(@shixuns) + format.json { + render json: exercise_shixun_json_data(@shixuns) + } end end diff --git a/app/helpers/exercise_helper.rb b/app/helpers/exercise_helper.rb index cdea7b88..b0ebedcf 100644 --- a/app/helpers/exercise_helper.rb +++ b/app/helpers/exercise_helper.rb @@ -5,11 +5,13 @@ module ExerciseHelper shixun_owner = shixun.owner.try(:show_name) shixun_path = shixun_path(shixun) shixun_level = shixun.shixun_level + owner_path = user_path(shixun.owner) shixun.attributes.dup.except("gpid", "identifier", "major_id", "webssh", "homepage_show", "fork_from", "git_url", "mirror_script_id", "repo_name", "pod_life").merge({ shixun_owner: shixun_owner, shixun_level: shixun_level, - shixun_path: shixun_path + shixun_path: shixun_path, + owner_path: owner_path }) end end diff --git a/app/views/exercise/_new_shixun_exercise_list.html.erb b/app/views/exercise/_new_shixun_exercise_list.html.erb index a397a0f6..84887695 100644 --- a/app/views/exercise/_new_shixun_exercise_list.html.erb +++ b/app/views/exercise/_new_shixun_exercise_list.html.erb @@ -4,19 +4,19 @@ 实训名称 创建者 - 学员数 + 级别 - + <% @shixuns.each do |shixun| %> - - + + <%= link_to shixun.name, shixun_path(shixun), :class => "edu-info-dark task-hide mt3 ml20",:style=> "text-align:left", :target => "_blank" %> <%= link_to shixun.owner.try(:show_name), user_path(shixun.owner), :class => "edu-txt-w140 mt3 task-hide" %> - <%= shixun.myshixuns.count %> + <%= shixun.shixun_level %> <% end %> @@ -36,6 +36,55 @@
    + + - \ No newline at end of file diff --git a/public/stylesheets/educoder/edu-main.css b/public/stylesheets/educoder/edu-main.css index 583e4a15..5dea2622 100644 --- a/public/stylesheets/educoder/edu-main.css +++ b/public/stylesheets/educoder/edu-main.css @@ -230,6 +230,8 @@ input::-ms-clear{display:none;} .color-grey-B4{color: #B4B4B4!important;} .color-grey-74{color: #747A7F!important;} .color-f5f5f5{color: #f5f5f5!important;} +.color-afafaf{color: #afafaf!important;} + a.color-grey-name:hover,a.color-dark:hover,a.color-grey-6:hover,a.color-grey-3:hover{color: #4cacff!important;} a.color-grey-9:hover,a.color-grey-8:hover,a.color-grey-c:hover{color: #111C24!important;} /*蓝色*/ @@ -890,7 +892,7 @@ html>body #ajax-indicator { position: fixed; } .practicalTemp{ width:1200px; - height:950px; + min-height:950px; background:rgba(255,255,255,1); border:1px solid rgba(238,238,238,1); } @@ -901,7 +903,7 @@ html>body #ajax-indicator { position: fixed; } font-weight:400; color:rgba(102,102,102,1); width: 1200px; - height: 60px; + min-height: 60px; line-height: 25px; padding-left: 10px; border-bottom: 1px solid rgba(238,238,238,1); @@ -915,7 +917,7 @@ html>body #ajax-indicator { position: fixed; } .Titlefont{ width: 48px; - height: 30px; + min-height: 30px; font-size: 15px; font-family: MicrosoftYaHei; font-weight: 400; @@ -936,6 +938,59 @@ html>body #ajax-indicator { position: fixed; } margin-left: 117px; } +.colorFF8121sum{ + color: #FF8121; + font-size: 12px; + text-align: left; + width: 160px; + margin-left: 62px; +} + + .borderFF8121{ border:1px solid #FF8121 +} + +.shixunsbox{ + width: 1180px; + padding-left: 20px; + padding-bottom: 20px; + border-bottom: 1px solid rgba(238,238,238,1); +} + +.shixunsboxfont{ + width:1060px; + min-height:12px; + font-size:4px; + font-family:MicrosoftYaHei; + font-weight:400; + color:rgba(122,122,122,1); + display: inline-block; +} + +.shixundelect{ + font-size: 18px; +} + +.shixundelect:hover .color-afafaf{ + color:#5b5b5b !important; +} +.block{ + display: block; +} + +.over300{ + max-height: 300px; + overflow-y: auto; + display: block; +} +.width100p{ + width:100px; +} +.width425p{ + width:425px; +} + +.width420p{ + width:420px; } \ No newline at end of file From 73d4fd9c18be93f30b5b3c03deb238bd1ff52c58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Wed, 17 Apr 2019 17:07:31 +0800 Subject: [PATCH 9/9] =?UTF-8?q?=E6=96=B0=E5=BB=BA=E9=A1=B5=E9=9D=A2=20?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/exercise/_edit_shixun.html.erb | 132 +++++++++++------------ app/views/exercise/_new_shixun.html.erb | 72 ++++++++++++- public/stylesheets/educoder/edu-main.css | 26 +++++ 3 files changed, 157 insertions(+), 73 deletions(-) diff --git a/app/views/exercise/_edit_shixun.html.erb b/app/views/exercise/_edit_shixun.html.erb index 3dd10e76..23396e40 100644 --- a/app/views/exercise/_edit_shixun.html.erb +++ b/app/views/exercise/_edit_shixun.html.erb @@ -39,83 +39,75 @@
    -
    实训题
    - - - -
    - - 初级题 - -
    - *分值: 分/题 -
    *大于等于0,且不能大于100
    -
    *不能为空
    -
    *必须大于等于0
    -
    *不能大于100
    -
    - -
    - * - 随机出题量: 题 -
    *不能为空
    -
    *必须为正整数
    -
    *不能大于可用题数
    -
    - -
    - 3 - 题可用 -
    - -
    - -
    - -
    - 命令加密ZPI压缩文件解压 - +
    实训题
    + +
    + + 初级题 + +
    + *分值: 分/题 +
    *大于等于0,且不能大于100
    +
    *不能为空
    +
    *必须大于等于0
    +
    *不能大于100
    +
    + +
    + * + 随机出题量: 题 +
    *不能为空
    +
    *必须为正整数
    +
    *不能大于可用题数
    +
    + +
    + 3 + 题可用 +
    + +
    + + - - - - - - - - - - - - - - - - - - - - - - - +
    + +
    + +
    +
    +
    新增实训题
    +
    +
    + +
  • +

    + 保存 + 取消 + + 温馨提示:[实训题]属于客观题将由系统自动评分 + +

    +
  • - -
    \ No newline at end of file +
    diff --git a/app/views/exercise/_new_shixun.html.erb b/app/views/exercise/_new_shixun.html.erb index 389a4b67..36a7789b 100644 --- a/app/views/exercise/_new_shixun.html.erb +++ b/app/views/exercise/_new_shixun.html.erb @@ -41,12 +41,78 @@
    -

    实训题

    +
    实训题
    -

    -

    +
    + + 初级题 + +
    + *分值: 分/题 +
    *大于等于0,且不能大于100
    +
    *不能为空
    +
    *必须大于等于0
    +
    *不能大于100
    +
    + +
    + * + 随机出题量: 题 +
    *不能为空
    +
    *必须为正整数
    +
    *不能大于可用题数
    +
    + +
    + 3 + 题可用 +
    + +
    + + + +
    +
    +
    新增实训题
    +
    +
    + +
  • +

    + 保存 + 取消 + + 温馨提示:[实训题]属于客观题将由系统自动评分 + +

    +
  • +
    diff --git a/public/stylesheets/educoder/edu-main.css b/public/stylesheets/educoder/edu-main.css index 5dea2622..363ee3e8 100644 --- a/public/stylesheets/educoder/edu-main.css +++ b/public/stylesheets/educoder/edu-main.css @@ -958,6 +958,12 @@ html>body #ajax-indicator { position: fixed; } border-bottom: 1px solid rgba(238,238,238,1); } +.shixunsboxs{ + width: 1180px; + padding-left: 20px; + padding-bottom: 20px; +} + .shixunsboxfont{ width:1060px; min-height:12px; @@ -993,4 +999,24 @@ html>body #ajax-indicator { position: fixed; } .width420p{ width:420px; +} +.newshixunbox{ + width: 303px; + height: 40px; + background: rgba(255,255,255,1); + border: 1px solid rgba(255,104,0,1); + border-radius: 2px; + line-height: 40px; + margin: 0 auto; + margin-top: 20px; +} + +.newshixunboxfont{ + width:71px; + height:12px; + font-size:4px; + font-family:MicrosoftYaHei; + font-weight:400; + color:rgba(255,104,0,1); + margin: 0 auto; } \ No newline at end of file