From 9dc838f430690a5397062a7bd7774b31e8048551 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Wed, 29 May 2019 16:21:33 +0800 Subject: [PATCH 01/50] pointer-events --- public/react/public/js/edu_tpi.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/react/public/js/edu_tpi.js b/public/react/public/js/edu_tpi.js index d1df64aa..8743a0ac 100644 --- a/public/react/public/js/edu_tpi.js +++ b/public/react/public/js/edu_tpi.js @@ -26,7 +26,7 @@ $(function(){ var nRow = 0; //var nCol = 0; lab.live('mousedown touchstart',function(){ - $('#game_webssh').css('pointer-events', 'none') + $('#contentIframe').css('pointer-events', 'none') dragging = true; leftOffset = $(".labelN").offset().left; wrapWidth = $(".labelN").width(); @@ -35,7 +35,7 @@ $(function(){ ); cen.live('mousedown',function(){ // 使得iframe不捕获事件 - $('#game_webssh').css('pointer-events', 'none') + $('#contentIframe').css('pointer-events', 'none') flag = true; topOffset = $(".centerH").offset().top; wrapHeight = $(".centerH").height(); @@ -111,7 +111,7 @@ $(function(){ doc.live("mouseup touchend", function(e) { // 使得iframe可以继续捕获事件 - $('#game_webssh').css('pointer-events', 'inherit') + $('#contentIframe').css('pointer-events', 'inherit') flag = false; dragging = false; e.cancelBubble = true; From 8a24cf69dee01584eb30d2b42e17c00e7197cfae Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 29 May 2019 16:30:22 +0800 Subject: [PATCH 02/50] 1 --- app/services/games_service.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/services/games_service.rb b/app/services/games_service.rb index e413c101..9e1ea356 100644 --- a/app/services/games_service.rb +++ b/app/services/games_service.rb @@ -19,6 +19,7 @@ class GamesService shixun = Shixun.min.find(myshixun.shixun_id) unless ((myshixun.user_id == current_user.id || current_user.business? || current_user.id == shixun.try(:user_id) || current_user.is_certification_teacher) && (shixun.operable?)) || current_user.admin? + Rails.logger.info("######403???") return{:status => 403} end game_challenge = Challenge.min.find(game.challenge_id) From 4a42989a33f1b26fbaf47e9fa66afb565936e67c Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 29 May 2019 16:45:52 +0800 Subject: [PATCH 03/50] 1 --- app/api/mobile/api.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/api/mobile/api.rb b/app/api/mobile/api.rb index 69bd4d44..0be7d4b2 100644 --- a/app/api/mobile/api.rb +++ b/app/api/mobile/api.rb @@ -110,6 +110,7 @@ module Mobile end third_party_user_id = session[:third_party_user_id] + Rails.logger.info("#########third_party_user_id: #{third_party_user_id}") if third_party_user_id c_user = UserSource.find_by_id(session[:third_party_user_id]) return c_user.user if c_user From 833a99dfb65560b6e3a8ffa6eecf4d3b20b50262 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 29 May 2019 16:50:14 +0800 Subject: [PATCH 04/50] 1 --- app/api/mobile/api.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/api/mobile/api.rb b/app/api/mobile/api.rb index 0be7d4b2..bce3f24f 100644 --- a/app/api/mobile/api.rb +++ b/app/api/mobile/api.rb @@ -34,7 +34,7 @@ module Mobile version 'v1', using: :path format :json content_type :json, "application/json;charset=UTF-8" - use ActionDispatch::Session::CookieStore + use ActionDispatch::Session::CookieStore, key: '_educoder_session' require 'digest' use Mobile::Middleware::ErrorHandler From 51e4759bcc04a80b1b0cc28bfc5bda7a8d149001 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 29 May 2019 17:00:14 +0800 Subject: [PATCH 05/50] 1 --- app/services/cnmoocs_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/cnmoocs_service.rb b/app/services/cnmoocs_service.rb index 9ec02bfd..3161eeac 100644 --- a/app/services/cnmoocs_service.rb +++ b/app/services/cnmoocs_service.rb @@ -115,7 +115,7 @@ class CnmoocsService end def source_url(params) - shixun = Shixun.find_by_identifier(params[:resouceId]) + shixun = Shixun.find_by_id(params[:resouceId]) if shixun.blank? return { error: -1, messages: '资源不存在' } end From c6f4da31879350a1c58c34a11270b3ee9c0700d4 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 29 May 2019 17:07:59 +0800 Subject: [PATCH 06/50] 1 --- app/api/mobile/api.rb | 2 +- app/api/mobile/apis/cnmooc.rb | 4 +++- app/controllers/account_controller.rb | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/api/mobile/api.rb b/app/api/mobile/api.rb index bce3f24f..0be7d4b2 100644 --- a/app/api/mobile/api.rb +++ b/app/api/mobile/api.rb @@ -34,7 +34,7 @@ module Mobile version 'v1', using: :path format :json content_type :json, "application/json;charset=UTF-8" - use ActionDispatch::Session::CookieStore, key: '_educoder_session' + use ActionDispatch::Session::CookieStore require 'digest' use Mobile::Middleware::ErrorHandler diff --git a/app/api/mobile/apis/cnmooc.rb b/app/api/mobile/apis/cnmooc.rb index d67a390d..06467765 100644 --- a/app/api/mobile/apis/cnmooc.rb +++ b/app/api/mobile/apis/cnmooc.rb @@ -43,11 +43,13 @@ module Mobile requires :accessType, type: Integer, desc: "资源类型" end get "source_url" do + if session[:third_party_user_id].blank? user = User.find(params[:userId]) session[:third_party_user_id] = user.user_source.id + #self.logged_user = user end - + Rails.logger.info("####session: #{session}") CnmoocsService.new.source_url(params) end diff --git a/app/controllers/account_controller.rb b/app/controllers/account_controller.rb index 60096a22..6409114f 100644 --- a/app/controllers/account_controller.rb +++ b/app/controllers/account_controller.rb @@ -293,6 +293,7 @@ class AccountController < ApplicationController UserActions.create(:action_id => User.current.id, :action_type => "Logout", :user_id => User.current.id) logout_user # 记录用户登出行为 + logger.info("#########logout_session: #{session}") redirect_to home_path end # display the logout form From c3c0b8db98e8b3d2b3c47a89452f10ba7156b9d4 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 29 May 2019 17:17:53 +0800 Subject: [PATCH 07/50] 1 --- app/api/mobile/apis/cnmooc.rb | 7 ------- app/services/cnmoocs_service.rb | 3 +++ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/app/api/mobile/apis/cnmooc.rb b/app/api/mobile/apis/cnmooc.rb index 06467765..96b10101 100644 --- a/app/api/mobile/apis/cnmooc.rb +++ b/app/api/mobile/apis/cnmooc.rb @@ -43,13 +43,6 @@ module Mobile requires :accessType, type: Integer, desc: "资源类型" end get "source_url" do - - if session[:third_party_user_id].blank? - user = User.find(params[:userId]) - session[:third_party_user_id] = user.user_source.id - #self.logged_user = user - end - Rails.logger.info("####session: #{session}") CnmoocsService.new.source_url(params) end diff --git a/app/services/cnmoocs_service.rb b/app/services/cnmoocs_service.rb index 3161eeac..dd07cd57 100644 --- a/app/services/cnmoocs_service.rb +++ b/app/services/cnmoocs_service.rb @@ -115,6 +115,9 @@ class CnmoocsService end def source_url(params) + user_source = UserSource.find_by_user_id(params[:userId]) + return {error: -1, messages: "用户不存在,请先创建用户"} if user_source + self.logged_user = user_source.user shixun = Shixun.find_by_id(params[:resouceId]) if shixun.blank? return { error: -1, messages: '资源不存在' } From d99036f918de9db8b5c3a18a248493ba6c3d9770 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 29 May 2019 17:19:57 +0800 Subject: [PATCH 08/50] 1 --- app/controllers/application_controller.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 42dd6e1e..435c71fc 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -207,9 +207,6 @@ class ApplicationController < ActionController::Base elsif session[:wechat_openid] uw = UserWechat.find_by_openid(session[:wechat_openid]) user = uw.user if uw - elsif session[:third_party_user_id] - c_user = UserSource.find_by_id(session[:third_party_user_id]) - user = c_user.user if c_user end end if user.nil? && Setting.rest_api_enabled? && accept_api_auth? From b13bf24330bb323ae9c72e737262f5c95121469d Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 29 May 2019 17:20:53 +0800 Subject: [PATCH 09/50] 1 --- app/api/mobile/api.rb | 8 -------- 1 file changed, 8 deletions(-) diff --git a/app/api/mobile/api.rb b/app/api/mobile/api.rb index 0be7d4b2..a0004c3c 100644 --- a/app/api/mobile/api.rb +++ b/app/api/mobile/api.rb @@ -108,14 +108,6 @@ module Mobile uw = UserWechat.find_by_openid(openid) return uw.user if uw end - - third_party_user_id = session[:third_party_user_id] - Rails.logger.info("#########third_party_user_id: #{third_party_user_id}") - if third_party_user_id - c_user = UserSource.find_by_id(session[:third_party_user_id]) - return c_user.user if c_user - end - token = ApiKey.where(access_token: params[:token]).first if token && !token.expired? return User.find(token.user_id) From 582e0b19c61c9386d540aa4f98fd4d59745c8fe5 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 29 May 2019 17:23:16 +0800 Subject: [PATCH 10/50] 1 --- app/services/cnmoocs_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/cnmoocs_service.rb b/app/services/cnmoocs_service.rb index dd07cd57..24a9950e 100644 --- a/app/services/cnmoocs_service.rb +++ b/app/services/cnmoocs_service.rb @@ -116,7 +116,7 @@ class CnmoocsService def source_url(params) user_source = UserSource.find_by_user_id(params[:userId]) - return {error: -1, messages: "用户不存在,请先创建用户"} if user_source + return {error: -1, messages: "用户不存在,请先创建用户"} if user_source.blank? self.logged_user = user_source.user shixun = Shixun.find_by_id(params[:resouceId]) if shixun.blank? From 2a3bbc290961517912dfc905d73503bc68ad5ad7 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 29 May 2019 17:24:53 +0800 Subject: [PATCH 11/50] 1 --- app/api/mobile/apis/cnmooc.rb | 3 +++ app/services/cnmoocs_service.rb | 3 --- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/api/mobile/apis/cnmooc.rb b/app/api/mobile/apis/cnmooc.rb index 96b10101..7546fd58 100644 --- a/app/api/mobile/apis/cnmooc.rb +++ b/app/api/mobile/apis/cnmooc.rb @@ -43,6 +43,9 @@ module Mobile requires :accessType, type: Integer, desc: "资源类型" end get "source_url" do + user_source = UserSource.find_by_user_id(params[:userId]) + return {error: -1, messages: "用户不存在,请先创建用户"} if user_source.blank? + self.logged_user = user_source.user CnmoocsService.new.source_url(params) end diff --git a/app/services/cnmoocs_service.rb b/app/services/cnmoocs_service.rb index 24a9950e..3161eeac 100644 --- a/app/services/cnmoocs_service.rb +++ b/app/services/cnmoocs_service.rb @@ -115,9 +115,6 @@ class CnmoocsService end def source_url(params) - user_source = UserSource.find_by_user_id(params[:userId]) - return {error: -1, messages: "用户不存在,请先创建用户"} if user_source.blank? - self.logged_user = user_source.user shixun = Shixun.find_by_id(params[:resouceId]) if shixun.blank? return { error: -1, messages: '资源不存在' } From 6ecea79dc3f50ea778b995363f7a2bf78cbc5b3c Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 29 May 2019 17:28:00 +0800 Subject: [PATCH 12/50] 1 --- app/api/mobile/apis/cnmooc.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/api/mobile/apis/cnmooc.rb b/app/api/mobile/apis/cnmooc.rb index 7546fd58..720ac26b 100644 --- a/app/api/mobile/apis/cnmooc.rb +++ b/app/api/mobile/apis/cnmooc.rb @@ -43,9 +43,11 @@ module Mobile requires :accessType, type: Integer, desc: "资源类型" end get "source_url" do - user_source = UserSource.find_by_user_id(params[:userId]) - return {error: -1, messages: "用户不存在,请先创建用户"} if user_source.blank? - self.logged_user = user_source.user + if session[:user_id].blank? + user = User.find(params[:userId]) + return { error: -1, messages: "用户不存在,请先创建用户" } unless user.user_source + session[:user_id] = user.user_source.id + end CnmoocsService.new.source_url(params) end From d36972bec91ae67fcc69b8ff39741f5ec68e3333 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 29 May 2019 17:29:02 +0800 Subject: [PATCH 13/50] 1 --- app/api/mobile/apis/cnmooc.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/api/mobile/apis/cnmooc.rb b/app/api/mobile/apis/cnmooc.rb index 720ac26b..2d1f41b3 100644 --- a/app/api/mobile/apis/cnmooc.rb +++ b/app/api/mobile/apis/cnmooc.rb @@ -46,7 +46,7 @@ module Mobile if session[:user_id].blank? user = User.find(params[:userId]) return { error: -1, messages: "用户不存在,请先创建用户" } unless user.user_source - session[:user_id] = user.user_source.id + session[:user_id] = user.id end CnmoocsService.new.source_url(params) end From 46e1c04e016e2dac368944d61b1ddd733db6811d Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 29 May 2019 17:34:42 +0800 Subject: [PATCH 14/50] 1 --- app/api/mobile/api.rb | 8 ++++++++ app/api/mobile/apis/cnmooc.rb | 5 ++--- app/controllers/account_controller.rb | 1 - app/controllers/application_controller.rb | 4 ++++ 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/api/mobile/api.rb b/app/api/mobile/api.rb index a0004c3c..0be7d4b2 100644 --- a/app/api/mobile/api.rb +++ b/app/api/mobile/api.rb @@ -108,6 +108,14 @@ module Mobile uw = UserWechat.find_by_openid(openid) return uw.user if uw end + + third_party_user_id = session[:third_party_user_id] + Rails.logger.info("#########third_party_user_id: #{third_party_user_id}") + if third_party_user_id + c_user = UserSource.find_by_id(session[:third_party_user_id]) + return c_user.user if c_user + end + token = ApiKey.where(access_token: params[:token]).first if token && !token.expired? return User.find(token.user_id) diff --git a/app/api/mobile/apis/cnmooc.rb b/app/api/mobile/apis/cnmooc.rb index 2d1f41b3..b813d559 100644 --- a/app/api/mobile/apis/cnmooc.rb +++ b/app/api/mobile/apis/cnmooc.rb @@ -43,10 +43,9 @@ module Mobile requires :accessType, type: Integer, desc: "资源类型" end get "source_url" do - if session[:user_id].blank? + if session[:third_party_user_id].blank? user = User.find(params[:userId]) - return { error: -1, messages: "用户不存在,请先创建用户" } unless user.user_source - session[:user_id] = user.id + session[:third_party_user_id] = user.user_source.id end CnmoocsService.new.source_url(params) end diff --git a/app/controllers/account_controller.rb b/app/controllers/account_controller.rb index 6409114f..60096a22 100644 --- a/app/controllers/account_controller.rb +++ b/app/controllers/account_controller.rb @@ -293,7 +293,6 @@ class AccountController < ApplicationController UserActions.create(:action_id => User.current.id, :action_type => "Logout", :user_id => User.current.id) logout_user # 记录用户登出行为 - logger.info("#########logout_session: #{session}") redirect_to home_path end # display the logout form diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 435c71fc..d1b7d21a 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -207,6 +207,9 @@ class ApplicationController < ActionController::Base elsif session[:wechat_openid] uw = UserWechat.find_by_openid(session[:wechat_openid]) user = uw.user if uw + elsif session[:third_party_user_id] + c_user = UserSource.find_by_id(session[:third_party_user_id]) + user = c_user.user if c_user end end if user.nil? && Setting.rest_api_enabled? && accept_api_auth? @@ -300,6 +303,7 @@ class ApplicationController < ActionController::Base end # Token.delete_all(["user_id = ? AND action = ?", User.current.id, 'autologin']) self.logged_user = nil + session[:third_party_user_id] = nil end end From 2c980c14f5c59bcb9313b0f3406118a6e5073a9c Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 29 May 2019 21:54:33 +0800 Subject: [PATCH 15/50] 1 --- app/api/mobile/api.rb | 12 ++++++------ app/api/mobile/apis/cnmooc.rb | 4 ---- app/controllers/application_controller.rb | 6 +++--- app/services/cnmoocs_service.rb | 5 +++-- 4 files changed, 12 insertions(+), 15 deletions(-) diff --git a/app/api/mobile/api.rb b/app/api/mobile/api.rb index 0be7d4b2..6085d00f 100644 --- a/app/api/mobile/api.rb +++ b/app/api/mobile/api.rb @@ -109,12 +109,12 @@ module Mobile return uw.user if uw end - third_party_user_id = session[:third_party_user_id] - Rails.logger.info("#########third_party_user_id: #{third_party_user_id}") - if third_party_user_id - c_user = UserSource.find_by_id(session[:third_party_user_id]) - return c_user.user if c_user - end + # third_party_user_id = session[:third_party_user_id] + # Rails.logger.info("#########third_party_user_id: #{third_party_user_id}") + # if third_party_user_id + # c_user = UserSource.find_by_id(session[:third_party_user_id]) + # return c_user.user if c_user + # end token = ApiKey.where(access_token: params[:token]).first if token && !token.expired? diff --git a/app/api/mobile/apis/cnmooc.rb b/app/api/mobile/apis/cnmooc.rb index b813d559..96b10101 100644 --- a/app/api/mobile/apis/cnmooc.rb +++ b/app/api/mobile/apis/cnmooc.rb @@ -43,10 +43,6 @@ module Mobile requires :accessType, type: Integer, desc: "资源类型" end get "source_url" do - if session[:third_party_user_id].blank? - user = User.find(params[:userId]) - session[:third_party_user_id] = user.user_source.id - end CnmoocsService.new.source_url(params) end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index d1b7d21a..9018cc6c 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -207,9 +207,9 @@ class ApplicationController < ActionController::Base elsif session[:wechat_openid] uw = UserWechat.find_by_openid(session[:wechat_openid]) user = uw.user if uw - elsif session[:third_party_user_id] - c_user = UserSource.find_by_id(session[:third_party_user_id]) - user = c_user.user if c_user + elsif params[:authToken] + user = Token.find_by_value(params[:authToken]).user + session[:user_id] = user.id end end if user.nil? && Setting.rest_api_enabled? && accept_api_auth? diff --git a/app/services/cnmoocs_service.rb b/app/services/cnmoocs_service.rb index 3161eeac..6de07203 100644 --- a/app/services/cnmoocs_service.rb +++ b/app/services/cnmoocs_service.rb @@ -115,12 +115,13 @@ class CnmoocsService end def source_url(params) + user = User.find_by_id(params[:userId]) + token = Token.get_or_create_permanent_login_token(user) shixun = Shixun.find_by_id(params[:resouceId]) if shixun.blank? return { error: -1, messages: '资源不存在' } end - - { error: 0, messages: '成功', accessUrl: "#{Redmine::Configuration['educoder_domain']}/shixuns/#{shixun.identifier}" } + { error: 0, messages: '成功', accessUrl: "#{Redmine::Configuration['educoder_domain']}/shixuns/#{shixun.identifier}/challenges?authToken=#{token.value}" } end def get_students_data params From ba6df7b9b1d8667da30586ea46d469a2a49adc56 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 29 May 2019 22:00:44 +0800 Subject: [PATCH 16/50] 1 --- app/controllers/application_controller.rb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 9018cc6c..e6240714 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -193,6 +193,21 @@ class ApplicationController < ActionController::Base find_current_user end + def set_autologin_cookie(user) + token = Token.get_or_create_permanent_login_token(user) + cookie_options = { + :value => token.value, + :expires => 1.month.from_now, + :path => (Redmine::Configuration['autologin_cookie_path'] || '/'), + :secure => (Redmine::Configuration['autologin_cookie_secure'] ? true : false), + :httponly => true + } + if Redmine::Configuration['cookie_domain'].present? + cookie_options = cookie_options.merge(domain: Redmine::Configuration['cookie_domain']) + end + cookies[autologin_cookie_name] = cookie_options + end + def find_current_user user = nil unless api_request? @@ -209,6 +224,7 @@ class ApplicationController < ActionController::Base user = uw.user if uw elsif params[:authToken] user = Token.find_by_value(params[:authToken]).user + set_autologin_cookie(user) session[:user_id] = user.id end end From 99511fe5e6e09614ac88d7edbc0d1d0ee9f750a9 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 29 May 2019 22:14:43 +0800 Subject: [PATCH 17/50] 1 --- app/controllers/application_controller.rb | 1 - app/services/cnmoocs_service.rb | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index e6240714..535a75b6 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -319,7 +319,6 @@ class ApplicationController < ActionController::Base end # Token.delete_all(["user_id = ? AND action = ?", User.current.id, 'autologin']) self.logged_user = nil - session[:third_party_user_id] = nil end end diff --git a/app/services/cnmoocs_service.rb b/app/services/cnmoocs_service.rb index 6de07203..fa6e67ea 100644 --- a/app/services/cnmoocs_service.rb +++ b/app/services/cnmoocs_service.rb @@ -116,6 +116,7 @@ class CnmoocsService def source_url(params) user = User.find_by_id(params[:userId]) + return {error: -1, messages: "用户不存在,请先创建用户"} unless user token = Token.get_or_create_permanent_login_token(user) shixun = Shixun.find_by_id(params[:resouceId]) if shixun.blank? From 151ab55dbb15a6bbdc323990f1a4b0d925322d50 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 29 May 2019 22:24:22 +0800 Subject: [PATCH 18/50] 1 --- app/controllers/application_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 535a75b6..dd1f5967 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -225,7 +225,7 @@ class ApplicationController < ActionController::Base elsif params[:authToken] user = Token.find_by_value(params[:authToken]).user set_autologin_cookie(user) - session[:user_id] = user.id + start_user_session(user) end end if user.nil? && Setting.rest_api_enabled? && accept_api_auth? From 2df0d65ce7f9ff7ad7c06bc7f89a329611b01127 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 29 May 2019 23:44:00 +0800 Subject: [PATCH 19/50] 1 --- app/api/mobile/apis/cnmooc.rb | 16 +++++++++++++++- app/controllers/application_controller.rb | 5 +++-- app/controllers/challenges_controller.rb | 9 +++++++++ app/services/cnmoocs_service.rb | 5 +---- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/app/api/mobile/apis/cnmooc.rb b/app/api/mobile/apis/cnmooc.rb index 96b10101..7745cf8e 100644 --- a/app/api/mobile/apis/cnmooc.rb +++ b/app/api/mobile/apis/cnmooc.rb @@ -43,7 +43,21 @@ module Mobile requires :accessType, type: Integer, desc: "资源类型" end get "source_url" do - CnmoocsService.new.source_url(params) + user = User.find_by_id(params[:userId]) + return {error: -1, messages: "用户不存在,请先创建用户"} unless user + token = Token.get_or_create_permanent_login_token(user) + cookie_options = { + :value => token.value, + :expires => 1.month.from_now, + :path => (Redmine::Configuration['autologin_cookie_path'] || '/'), + :secure => (Redmine::Configuration['autologin_cookie_secure'] ? true : false), + :httponly => true + } + if Redmine::Configuration['cookie_domain'].present? + cookie_options = cookie_options.merge(domain: Redmine::Configuration['cookie_domain']) + end + cookies[Redmine::Configuration['autologin_cookie_name'].presence || 'autologin'] = cookie_options + CnmoocsService.new.source_url(params, token) end desc "远程登录" diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index dd1f5967..4185e367 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -224,8 +224,9 @@ class ApplicationController < ActionController::Base user = uw.user if uw elsif params[:authToken] user = Token.find_by_value(params[:authToken]).user - set_autologin_cookie(user) - start_user_session(user) + #set_autologin_cookie(user) + #start_user_session(user) + session[:user_id] = user.id end end if user.nil? && Setting.rest_api_enabled? && accept_api_auth? diff --git a/app/controllers/challenges_controller.rb b/app/controllers/challenges_controller.rb index bf01ffb0..3322f1f2 100644 --- a/app/controllers/challenges_controller.rb +++ b/app/controllers/challenges_controller.rb @@ -16,6 +16,7 @@ class ChallengesController < ApplicationController #before_filter :find_shixun_language, :only => [:show, :new, :edit] before_filter :base_index, :only => [:index, :index_down, :index_up, :destroy] before_filter :view_allow, :only => [:show] + # before_filter :check_cnmooc, :only => [:index] include ApplicationHelper @@ -487,4 +488,12 @@ class ChallengesController < ApplicationController response.headers['content--type'] = 'text/javascript' request.format = 'js' end + + # def check_cnmooc + # if params[:authToken] + # user = User.find_by_id(session[:user_id]) + # set_autologin_cookie(user) + # end + # end + end diff --git a/app/services/cnmoocs_service.rb b/app/services/cnmoocs_service.rb index fa6e67ea..41705eb6 100644 --- a/app/services/cnmoocs_service.rb +++ b/app/services/cnmoocs_service.rb @@ -114,10 +114,7 @@ class CnmoocsService end - def source_url(params) - user = User.find_by_id(params[:userId]) - return {error: -1, messages: "用户不存在,请先创建用户"} unless user - token = Token.get_or_create_permanent_login_token(user) + def source_url(params, token) shixun = Shixun.find_by_id(params[:resouceId]) if shixun.blank? return { error: -1, messages: '资源不存在' } From 9c01b6ff77b0ab90ea54b62a4060db548226509e Mon Sep 17 00:00:00 2001 From: jingquan huang Date: Thu, 30 May 2019 08:46:30 +0800 Subject: [PATCH 20/50] =?UTF-8?q?vnc=E5=9C=A8gameshow=E4=B8=AD=E8=BF=94?= =?UTF-8?q?=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/games_service.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/services/games_service.rb b/app/services/games_service.rb index 9e1ea356..a53ee086 100644 --- a/app/services/games_service.rb +++ b/app/services/games_service.rb @@ -75,7 +75,8 @@ class GamesService :challenge => game_challenge.try(:attributes), :game => game.try(:attributes), :shixun => shixun.try(:attributes), :record => record, :grade => grade, :prev_game => prev_game, :next_game => next_game, :username => username, :image_url => image_url, :user_url => user_url, :praise_count => praise_count, :user_praise => user_praise, :time_limit => time_limit, - :tomcat_url => Redmine::Configuration['tomcat_php'], :is_teacher => is_teacher, :power => power, :myshixun_manager => myshixun_manager} + :tomcat_url => Redmine::Configuration['tomcat_php'], :is_teacher => is_teacher, :power => power, :myshixun_manager => myshixun_manager, + :vnc => shixun.vnc} # 区分选择题和编程题,st:0编程题; if st == 0 From 048c8571bcdae20221a5fac7c7e003f35c4166ca Mon Sep 17 00:00:00 2001 From: jingquan huang Date: Thu, 30 May 2019 08:57:33 +0800 Subject: [PATCH 21/50] vnc.. --- app/controllers/myshixuns_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb index f6854c7a..d95cdc96 100644 --- a/app/controllers/myshixuns_controller.rb +++ b/app/controllers/myshixuns_controller.rb @@ -1,7 +1,7 @@ # encoding: utf-8 class MyshixunsController < ApplicationController layout 'base_myshixun' - skip_before_filter :verify_authenticity_token, :only => [:training_task_status, :close_webssh, :code_runinng_message] + skip_before_filter :verify_authenticity_token, :only => [:training_task_status, :close_webssh, :code_runinng_message, :vnc] before_filter :require_login, :except => [:training_task_status, :close_webssh, :code_runinng_message] before_filter :check_authentication, :except => [:training_task_status, :close_webssh, :mul_test_home, :mul_test_user, :mul_test_myshixun, :mul_test_shixun, :mul_test_start, :code_runinng_message] From 8a45a61ef89cbc78e8b59ff6d1b31e3836db0d80 Mon Sep 17 00:00:00 2001 From: jingquan huang Date: Thu, 30 May 2019 08:59:35 +0800 Subject: [PATCH 22/50] =?UTF-8?q?vnc=E5=85=8D=E7=99=BB=E9=99=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/myshixuns_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb index d95cdc96..add6511c 100644 --- a/app/controllers/myshixuns_controller.rb +++ b/app/controllers/myshixuns_controller.rb @@ -2,7 +2,7 @@ class MyshixunsController < ApplicationController layout 'base_myshixun' skip_before_filter :verify_authenticity_token, :only => [:training_task_status, :close_webssh, :code_runinng_message, :vnc] - before_filter :require_login, :except => [:training_task_status, :close_webssh, :code_runinng_message] + before_filter :require_login, :except => [:training_task_status, :close_webssh, :code_runinng_message, :vnc] before_filter :check_authentication, :except => [:training_task_status, :close_webssh, :mul_test_home, :mul_test_user, :mul_test_myshixun, :mul_test_shixun, :mul_test_start, :code_runinng_message] before_filter :find_myshixun, :only => [:show, :myshixun_reset, :open_webssh, :sync_reset_time, :destroy, :search_file_list, :vnc] From eddd5e6144a3206648d6dbbdd288ba8c6a3d39ed Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Thu, 30 May 2019 09:57:21 +0800 Subject: [PATCH 23/50] 1 --- app/controllers/application_controller.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 4185e367..e44005a4 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -352,6 +352,8 @@ class ApplicationController < ActionController::Base end def require_login + logger.info("#########login?: #{User.current.logged?}") + logger.info("#########get?: #{request.get?}") if !User.current.logged? # Extract only the basic url parameters on non-GET requests if request.get? From 972ad7551868f0f31522b51156407b55b3e90bdf Mon Sep 17 00:00:00 2001 From: jingquan huang Date: Thu, 30 May 2019 09:58:21 +0800 Subject: [PATCH 24/50] =?UTF-8?q?vnc=E6=B7=BB=E5=8A=A0containers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/myshixuns_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb index add6511c..1029c37d 100644 --- a/app/controllers/myshixuns_controller.rb +++ b/app/controllers/myshixuns_controller.rb @@ -357,7 +357,8 @@ class MyshixunsController < ApplicationController host = Redmine::Configuration['tomcat_php'] begin uri = "#{shixun_tomcat}/bridge/vnc/getvnc" - params = {tpiID:@myshixun.id} + shixun = myshixun.shixun + params = {tpiID: @myshixun.id, :containers => "#{Base64.urlsafe_encode64(container_limit(shixun.mirror_repositories))}"} res = uri_exec uri, params if res && res['code'].to_i != 0 raise("实训云平台繁忙(繁忙等级:99)") From 0ddf6a7efda6b9edf40abc7e0f118cfa3e466ee6 Mon Sep 17 00:00:00 2001 From: jingquan huang Date: Thu, 30 May 2019 10:01:53 +0800 Subject: [PATCH 25/50] =?UTF-8?q?vnc=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/myshixuns_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb index 1029c37d..e9f412ab 100644 --- a/app/controllers/myshixuns_controller.rb +++ b/app/controllers/myshixuns_controller.rb @@ -4,7 +4,7 @@ class MyshixunsController < ApplicationController skip_before_filter :verify_authenticity_token, :only => [:training_task_status, :close_webssh, :code_runinng_message, :vnc] before_filter :require_login, :except => [:training_task_status, :close_webssh, :code_runinng_message, :vnc] before_filter :check_authentication, :except => [:training_task_status, :close_webssh, :mul_test_home, :mul_test_user, - :mul_test_myshixun, :mul_test_shixun, :mul_test_start, :code_runinng_message] + :mul_test_myshixun, :mul_test_shixun, :mul_test_start, :code_runinng_message, :vnc] before_filter :find_myshixun, :only => [:show, :myshixun_reset, :open_webssh, :sync_reset_time, :destroy, :search_file_list, :vnc] DCODES = %W(2 3 4 5 6 7 8 9 a b c f e f g h i j k l m n o p q r s t u v w x y z) From 03843caf39c84e4c54befcfc5a242b1d9df0f14d Mon Sep 17 00:00:00 2001 From: jingquan huang Date: Thu, 30 May 2019 10:17:55 +0800 Subject: [PATCH 26/50] 500 --- app/controllers/myshixuns_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb index e9f412ab..802bb8b9 100644 --- a/app/controllers/myshixuns_controller.rb +++ b/app/controllers/myshixuns_controller.rb @@ -357,7 +357,7 @@ class MyshixunsController < ApplicationController host = Redmine::Configuration['tomcat_php'] begin uri = "#{shixun_tomcat}/bridge/vnc/getvnc" - shixun = myshixun.shixun + shixun = @myshixun.shixun params = {tpiID: @myshixun.id, :containers => "#{Base64.urlsafe_encode64(container_limit(shixun.mirror_repositories))}"} res = uri_exec uri, params if res && res['code'].to_i != 0 From 89acf0b0cd991ace8fb8598a6c7ccce6746d5c1e Mon Sep 17 00:00:00 2001 From: p31729568 Date: Thu, 30 May 2019 10:51:39 +0800 Subject: [PATCH 27/50] modify school manager statistic text --- .../schools/_contrast_search_form.html.erb | 11 ++++------- .../managements/schools/_data_contrast_list.html.erb | 4 ++-- .../managements/schools/_data_grow_list.html.erb | 4 ++-- config/locales/school_daily_reports/zh.yml | 2 +- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/app/views/managements/schools/_contrast_search_form.html.erb b/app/views/managements/schools/_contrast_search_form.html.erb index 4d24a810..9597a9c7 100644 --- a/app/views/managements/schools/_contrast_search_form.html.erb +++ b/app/views/managements/schools/_contrast_search_form.html.erb @@ -26,13 +26,10 @@
<%= hidden_field_tag :data_type, params[:data_type] || 'grow' %> - <% if params[:data_type] == 'contrast' %> - 时间对比 - 新增数据 - <% else %> - 时间对比 - 新增数据 - <% end %> + 时段对比 + 数据变化
<%= text_field_tag :keyword, params[:keyword], placeholder: '请输入单位名称或者ID关键字进行搜索', diff --git a/app/views/managements/schools/_data_contrast_list.html.erb b/app/views/managements/schools/_data_contrast_list.html.erb index d77d4b70..83f7a11b 100644 --- a/app/views/managements/schools/_data_contrast_list.html.erb +++ b/app/views/managements/schools/_data_contrast_list.html.erb @@ -21,8 +21,8 @@ 序号 ID 单位名称 - 时段一
<%= "(#{params[:begin_date]}至#{params[:end_date]})" %> - 时段二
<%= "(#{params[:other_begin_date]}至#{params[:other_end_date]})" %> + 时段一
<%= "(#{params[:begin_date]} 05:00至#{params[:end_date]} 05:00)" %> + 时段二
<%= "(#{params[:other_begin_date]} 05:00至#{params[:other_end_date]} 05:00)" %> <%= sort_tag('变化情况', name: 'percentage', path: school_data_contrast_managements_path) %>
( 新 增 数 | 新增百分比) diff --git a/app/views/managements/schools/_data_grow_list.html.erb b/app/views/managements/schools/_data_grow_list.html.erb index 27a1ccf3..8f502979 100644 --- a/app/views/managements/schools/_data_grow_list.html.erb +++ b/app/views/managements/schools/_data_grow_list.html.erb @@ -9,7 +9,7 @@ 新增教师<%= @grow_summary.teacher_increase_count || 0 %>人, 新增学生<%= @grow_summary.student_increase_count || 0 %>人, 新增课堂<%= @grow_summary.course_increase_count || 0 %>个, - 新增实训<%= @grow_summary.shixun_increase_count || 0 %>个, + 新增实训作业<%= @grow_summary.shixun_increase_count || 0 %>个, 活跃用户<%= @grow_summary.active_user_count || 0 %>个 @@ -22,7 +22,7 @@ - + diff --git a/config/locales/school_daily_reports/zh.yml b/config/locales/school_daily_reports/zh.yml index 57caf343..2db8a429 100644 --- a/config/locales/school_daily_reports/zh.yml +++ b/config/locales/school_daily_reports/zh.yml @@ -3,5 +3,5 @@ zh: teacher_increase_count: 新增教师 student_increase_count: 新增学生 course_increase_count: 新增课堂 - shixun_increase_count: 新增实训 + shixun_increase_count: 新增实训作业 active_user_count: 活跃用户 \ No newline at end of file From 9cd71b8159b150902df0ccedad663487f1cf18e8 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Thu, 30 May 2019 11:02:05 +0800 Subject: [PATCH 28/50] iconfont --- public/assets/iconfont/demo_index.html | 278 ++++++++++++++++++++++--- public/assets/iconfont/iconfont.css | 28 ++- public/assets/iconfont/iconfont.eot | Bin 43808 -> 45896 bytes public/assets/iconfont/iconfont.js | 2 +- public/assets/iconfont/iconfont.svg | 36 +++- public/assets/iconfont/iconfont.ttf | Bin 43640 -> 45728 bytes public/assets/iconfont/iconfont.woff | Bin 28644 -> 29980 bytes public/assets/iconfont/iconfont.woff2 | Bin 24360 -> 25504 bytes 8 files changed, 310 insertions(+), 34 deletions(-) diff --git a/public/assets/iconfont/demo_index.html b/public/assets/iconfont/demo_index.html index ae1000a0..1ef8180e 100644 --- a/public/assets/iconfont/demo_index.html +++ b/public/assets/iconfont/demo_index.html @@ -48,12 +48,6 @@
&#xe6d8;
-
  • - -
    章节
    -
    &#xe60f;
    -
  • -
  • css3
    @@ -72,6 +66,12 @@
    &#xe6b2;
  • +
  • + +
    章节
    +
    &#xe68e;
    +
  • +
  • 关闭
    @@ -90,6 +90,12 @@
    &#xe671;
  • +
  • + +
    pdf
    +
    &#xe740;
    +
  • +
  • 时间
    @@ -168,6 +174,12 @@
    &#xe639;
  • +
  • + +
    复制
    +
    &#xe68f;
    +
  • +
  • 点赞1
    @@ -216,12 +228,24 @@
    &#xe727;
  • +
  • + +
    提示
    +
    &#xe690;
    +
  • +
  • net
    &#xe607;
  • +
  • + +
    edit
    +
    &#xe691;
    +
  • +
  • @@ -234,6 +258,12 @@
    &#xe67f;
  • +
  • + +
    下载
    +
    &#xe6ac;
    +
  • +
  • 撤销
    @@ -246,6 +276,12 @@
    &#xe687;
  • +
  • + +
    标签
    +
    &#xe74f;
    +
  • +
  • 大数据存储
    @@ -258,6 +294,12 @@
    &#xe686;
  • +
  • + +
    添加成员
    +
    &#xe69a;
    +
  • +
  • 三角形
    @@ -306,6 +348,12 @@
    &#xe68b;
  • +
  • + +
    三点
    +
    &#xe6f8;
    +
  • +
  • base
    @@ -396,6 +444,12 @@
    &#xe68d;
  • +
  • + +
    上传图片
    +
    &#xe7fd;
    +
  • +
  • 登录Ip监控
    @@ -996,6 +1050,12 @@
    &#xe68c;
  • +
  • + +
    添加导航
    +
    &#xe604;
    +
  • +

    Unicode 引用

    @@ -1073,15 +1133,6 @@
    -
  • - -
    - 章节 -
    -
    .icon-zhangjie -
    -
  • -
  • @@ -1109,6 +1160,15 @@
  • +
  • + +
    + 章节 +
    +
    .icon-zhangjie1 +
    +
  • +
  • @@ -1136,6 +1196,15 @@
  • +
  • + +
    + pdf +
    +
    .icon-pdf +
    +
  • +
  • @@ -1253,6 +1322,15 @@
  • +
  • + +
    + 复制 +
    +
    .icon-fuzhi +
    +
  • +
  • @@ -1325,6 +1403,15 @@
  • +
  • + +
    + 提示 +
    +
    .icon-tishi1 +
    +
  • +
  • @@ -1334,6 +1421,15 @@
  • +
  • + +
    + edit +
    +
    .icon-edit +
    +
  • +
  • @@ -1352,6 +1448,15 @@
  • +
  • + +
    + 下载 +
    +
    .icon-xiazai1 +
    +
  • +
  • @@ -1370,6 +1475,15 @@
  • +
  • + +
    + 标签 +
    +
    .icon-biaoqian +
    +
  • +
  • @@ -1388,6 +1502,15 @@
  • +
  • + +
    + 添加成员 +
    +
    .icon-tianjiachengyuan +
    +
  • +
  • @@ -1460,6 +1583,15 @@
  • +
  • + +
    + 三点 +
    +
    .icon-sandian +
    +
  • +
  • @@ -1595,6 +1727,15 @@
  • +
  • + +
    + 上传图片 +
    +
    .icon-shangchuantupian1 +
    +
  • +
  • @@ -2495,6 +2636,15 @@
  • +
  • + +
    + 添加导航 +
    +
    .icon-tianjiadaohang +
    +
  • +

    font-class 引用

    @@ -2513,7 +2663,7 @@
    <link rel="stylesheet" href="./iconfont.css">
     

    第二步:挑选相应图标并获取类名,应用于页面:

    -
    <span class="iconfont icon--xxx"></span>
    +
    <span class="iconfont icon-xxx"></span>
     

    " @@ -2548,14 +2698,6 @@

    #icon-roundaddfill
    -
  • - -
    章节
    -
    #icon-zhangjie
    -
  • -
  • #icon-31
  • +
  • + +
    章节
    +
    #icon-zhangjie1
    +
  • +
  • #icon-weibiaoti12
  • +
  • + +
    pdf
    +
    #icon-pdf
    +
  • +
  • #icon-dianzan1
  • +
  • + +
    复制
    +
    #icon-fuzhi
    +
  • +
  • #icon-daimapeizhir
  • +
  • + +
    提示
    +
    #icon-tishi1
    +
  • +
  • #icon-net
  • +
  • + +
    edit
    +
    #icon-edit
    +
  • +
  • #icon-default
  • +
  • + +
    下载
    +
    #icon-xiazai1
    +
  • +
  • #icon-qq
  • +
  • + +
    标签
    +
    #icon-biaoqian
    +
  • +
  • #icon-mstest
  • +
  • + +
    添加成员
    +
    #icon-tianjiachengyuan
    +
  • +
  • #icon-chenggong
  • +
  • + +
    三点
    +
    #icon-sandian
    +
  • +
  • #icon-zhiliangfenxi
  • +
  • + +
    上传图片
    +
    #icon-shangchuantupian1
    +
  • +
  • #icon-shixundaibeijing
  • +
  • + +
    添加导航
    +
    #icon-tianjiadaohang
    +
  • +

    Symbol 引用

    diff --git a/public/assets/iconfont/iconfont.css b/public/assets/iconfont/iconfont.css index 6d4400d5..f4db5e84 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=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- */ + src: url('iconfont.eot?t=1559184647273'); /* IE9 */ + src: url('iconfont.eot?t=1559184647273#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=1559184647273') format('woff'), + url('iconfont.ttf?t=1559184647273') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url('iconfont.svg?t=1559184647273#iconfont') format('svg'); /* iOS 4.1- */ } .iconfont { @@ -147,10 +147,18 @@ content: "\e727"; } +.icon-tishi1:before { + content: "\e690"; +} + .icon-net:before { content: "\e607"; } +.icon-edit:before { + content: "\e691"; +} + .icon-suo:before { content: "\e6c9"; } @@ -159,6 +167,10 @@ content: "\e67f"; } +.icon-xiazai1:before { + content: "\e6ac"; +} + .icon-chexiao:before { content: "\e657"; } @@ -179,6 +191,10 @@ content: "\e686"; } +.icon-tianjiachengyuan:before { + content: "\e69a"; +} + .icon-triangle:before { content: "\e600"; } diff --git a/public/assets/iconfont/iconfont.eot b/public/assets/iconfont/iconfont.eot index acf4d5619f7e0b1045320820c3f9f053b542dc79..861e815a94875d15b4a495809bd60b0d8ca71bc0 100644 GIT binary patch delta 5524 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 WGVB#oUi;ap7s7eJ%5}NatN#L7|6NM} diff --git a/public/assets/iconfont/iconfont.js b/public/assets/iconfont/iconfont.js index c65b3873..4b2ab675 100644 --- a/public/assets/iconfont/iconfont.js +++ b/public/assets/iconfont/iconfont.js @@ -1 +1 @@ -!function(z){var c,o='',l=(c=document.getElementsByTagName("script"))[c.length-1].getAttribute("data-injectcss");if(l&&!z.__iconfont__svg__cssinject__){z.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}!function(c){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(c,0);else{var l=function(){document.removeEventListener("DOMContentLoaded",l,!1),c()};document.addEventListener("DOMContentLoaded",l,!1)}else document.attachEvent&&(h=c,i=z.document,a=!1,t=function(){a||(a=!0,h())},(o=function(){try{i.documentElement.doScroll("left")}catch(c){return void setTimeout(o,50)}t()})(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,t())});var h,i,a,t,o}(function(){var c,l,h,i,a,t;(c=document.createElement("div")).innerHTML=o,o=null,(l=c.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",h=l,(i=document.body).firstChild?(a=h,(t=i.firstChild).parentNode.insertBefore(a,t)):i.appendChild(h))})}(window); \ No newline at end of file +!function(z){var c,h='',l=(c=document.getElementsByTagName("script"))[c.length-1].getAttribute("data-injectcss");if(l&&!z.__iconfont__svg__cssinject__){z.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}!function(c){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(c,0);else{var l=function(){document.removeEventListener("DOMContentLoaded",l,!1),c()};document.addEventListener("DOMContentLoaded",l,!1)}else document.attachEvent&&(i=c,a=z.document,t=!1,(o=function(){try{a.documentElement.doScroll("left")}catch(c){return void setTimeout(o,50)}h()})(),a.onreadystatechange=function(){"complete"==a.readyState&&(a.onreadystatechange=null,h())});function h(){t||(t=!0,i())}var i,a,t,o}(function(){var c,l;(c=document.createElement("div")).innerHTML=h,h=null,(l=c.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",function(c,l){l.firstChild?function(c,l){l.parentNode.insertBefore(c,l)}(c,l.firstChild):l.appendChild(c)}(l,document.body))})}(window); \ No newline at end of file diff --git a/public/assets/iconfont/iconfont.svg b/public/assets/iconfont/iconfont.svg index a56bc3bb..c4477efd 100644 --- a/public/assets/iconfont/iconfont.svg +++ b/public/assets/iconfont/iconfont.svg @@ -29,9 +29,6 @@ Created by iconfont - - - @@ -41,6 +38,9 @@ Created by iconfont + + + @@ -50,6 +50,9 @@ Created by iconfont + + + @@ -89,6 +92,9 @@ Created by iconfont + + + @@ -113,27 +119,42 @@ Created by iconfont + + + + + + + + + + + + + + + @@ -158,6 +179,9 @@ Created by iconfont + + + @@ -203,6 +227,9 @@ Created by iconfont + + + @@ -503,6 +530,9 @@ Created by iconfont + + + diff --git a/public/assets/iconfont/iconfont.ttf b/public/assets/iconfont/iconfont.ttf index 08cd53afc6e2a37f56c3620cc3d801e5a75dc037..9e09e9f96b5020ca95f8408cf1f2ca78ebdfc2f8 100644 GIT binary patch delta 5526 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 R;mapqjttE%bvo6!{|2FpY83zg diff --git a/public/assets/iconfont/iconfont.woff b/public/assets/iconfont/iconfont.woff index 109a76f551bc0544152c0a925daeded210c4fa4d..c90364930fc69c45f7ea1561039b7126f2c83767 100644 GIT binary patch delta 29730 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 B{%-&P delta 28360 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 diff --git a/public/assets/iconfont/iconfont.woff2 b/public/assets/iconfont/iconfont.woff2 index 41b9904cd4bc893d05f7a26f013a72b5c34439aa..252cbb394b716fc1d1c75810d801f10f3ef03d14 100644 GIT binary patch literal 25504 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 literal 24360 zcmV({K+?Z=Pew8T0RR910ADBo3jhEB0IGNZ0AAGq0RR9100000000000000000000 z0000SLIzd3Z3m8a8&Qch6t z@lf$Ow5lXdnC(7%FF7`;@XOBdsk3%8Rn00E6iG;<+vonG3pp?xN$suC-{4>VwlD|J zf^9c;YVxAd2?6HJMwXp;p?3>NW&QynCR<=|$`}Ozs%(#PrV~Jc#8K4(NI(VVk^Db; zh=?0qx7Rd5fPvVHJ|H(dKeyihf0;xsD9OP{sf`U7J!+&dD#THvN?~AuMOfH?g^CF% z_Nj1(jd!A0g;;Uo_l>p7$Ln|~=GhxQyNh_pB=L3@GFm+}n#un&Cx-jw^mF#SwzTq- zt^Tbmy$8Sm)(UJajD>;_AY@b|LJ98v zZ3md7)!LTg#%rg9=Y6M@6gPW!lAW~g1-b|XeWilY0?=k z40QmPz;@o<-|k_~Oxk0q_tVT677B)iJ1+9`UU5=D_Q(FlU&{`(oN$qL_n3!rs@7N9 z_#o7>T_D~IC@=z$zV`P{6mBh9UaK94@br-TiIuwcZ7m zZ4o08+e(0$bFh$`nEW0A^RH^U0@CSOa;4n5-aR?Bt!``DuzAcd{{I0|`1piG5Ryy) zVl0qX2+{>0turCXMRMa^nl7cbDcSHz-Wi~D2|&4!ca9(FE~iPCQp!~N*xsIH$UNjS zR&fA9oJc%L$QK8bQOH6cvy$L{cYX8W6Oie*A z7!;VJHp_~-T}+FCsg3XXz*O<07jKeJn4n=uf;&{L&EW@?vA`#j!@k`#lEZVodn!<0 z2_%pK=pb8Jvsx3R#2JEk+P-phEgw*X7<57`X`R+(-PU9Mo8O{#b;i1F-Lu|XpInCP zUGiGGGF+=SW4~PP*At)5@BGP>QuKkgPUssi&W;P6e#-|}3{s?2ctW{B<%U!31E580(kCnaR$&6l;jWQrHNMRQ}NfH{4o zGNYIHhK4Piy@dWBp3UL~3<~g>W5I}jwEh1_AjUF+u##Y`AO!0Pja7uje8OWI5zpU` zNWe}aV-ry^6w$Dc=opU}*iTFxAQom58wW`Xhe#WTNe4$r7sp8tM@b(i$pELw5U0rq zXUG_5iGyRr#R=l!9Px3UOmK-zae>Tmk<2j;S>Q4)z!kE@RkFf0vc`3?!40y-O|ru+ z65ux3;|@9CE(vju9PuDI;URLyedL0N$rX=~8)nc#+)wU!fIKjZJn<-b;W6^Y<0N|8 zPYgUmK6rv8c#foal6>(3`Qa(@$I~RkvlM_=DG<+75MHEUyhI^*nL_azh2eFQ;|&VO zn-qb!C=zc|6yBj|yh{qaM=@ALv3Q^2@Dau1V@kkhl!y;$5k8u5zNc*bKsor4axsVUFcRhCS6YmjRDj=T3C1E7CQ>0rqau7s z#TbN2FojC7gVfkeWtdLoSV9#Tj4H8(s<4%+v5ji5ooX=w)nOskV=^`1UuwiC)P!}k z6nkhH_EIyJQVSN72CJzR8>kH%X*t%?io0)VC9s>iv79zx3_6Sv=*Uyl5bz6K!2+7X z5cD6W(kyWUFriIrN z!GJeDV1u`vVR86m>IcGt0IUcgDu8x6WR9U&a&V&lGpa-jOKk`=Od`@`b=FQiB>Ic} z@t6{Uz#v93@ok*Id^SEi76(Z{QFZJ#4@sAJ*~G{s+0T)U!ciCxj80eBvEdm?3=6?Z z=fUPD9=S-KF+3iUTuBCg2!zNp^iD(!0>tJVyzueft#>( zExOa05MB+9u1&V{uMrGn?~(L>2NcIEDJ;-b~h8MgUofw~k%W z7~G%@vmpu#J&$H9xbDQ7W!BEGy8!W@_z|rjr{WDcw@Gy+=W!hVMud}A69I#iQu>VJ zrY&@Xo|WRItvzv}k%mveCgx@iRfK##@qS6jNh*_aBC)dSmG})-4m`=Uc@@)iNRHK}!z#s|uzmt*8~} zU>mlsE;j7!`IM}kO_lu+1^BK?trwt8RB5UqM0A_1Aa1~>4D-OYj18?;G+u6$UAs3s zBtXk+iKIAt%?UX5-E3J)ISiM#Av95JVJ(7KMH~cF_N=8OQVt^xI_=WC2SEOC4 zjb2$1N98*a*hJXfgs3eG{TS;Yu82n*vN-87hRYgt!asF@*)OwSHLS#Hzzwz#=xyS@ z#9R4r5|-K%3HVC);)zIKqV@Qjp zGc)n+%YW#z#IaGnfE_~7+XV!%V-ZYpwND-L26f)F>FdNUMhOY_U6>4`gQa{C=TKpr z$pZseVD4_xgq9cE(1e`_8LK|-r}4Bu(X2otVUuG~viWA{xt z7+q(TK%lj|M%RI6kAnyj#TKgD?(R)~WivMsImqv`bvJFlpKb`dr7p*}sNEc)Hy>D( zD_Z?Nrda?g&ClI=3Af_Vmt2XF ze%{%4`p@WTSOtY%R$A0<`0G3*01%l7a`7^X25>ohL27-hXBX6JszPEckAVr9McA`Q zA%DhGbsz&b6vrwDCkuy-h(iM>F_$RQr~ngMlI{{JR~6El*R_66eoZ26;BMKCnabqG zhb458lqFl4MMw6sStNC6G{z833Kz&=?b-86hgrF1fe7bq#;6sjN7ge_5XB%RG8?4r z2;XwF>#3q)i{VA$YRoXL{3 zCf)L?zLWi~Xdt>wP&_HMXEeZM2^~x^!-Xqz_G<+6V* zDt`V0KfvNG-DbJ_*yB%jt9+S*f!2ZnV0XSvd^4My+jXh&Dk%OM||A zi?r6BeX>uR8Pl2vgywaqH$Tk8K!hNzA~Q1~AmyQpDZ7M5QjMq!rEHE_AwMXCNmX^# z++L=NC3i}pg)l1NW1Ys+|I^PXKSMQ2+O3NQdR6Lo^ZBjaoDW1Zeq~g-<*F;W9>Hrr zD*JK$Y7L`?qgw@1n05E*(t7tj8r3d!F3Cb)>tAyXxN)H)oY={2&7MlCCey&<2mu7F z6)&6f?Q@kM0*7Z8^y6CV>D_D8oNuJoFcw{$AjCYtu(+x)!EpxmvQ$~e4gTda(9H|zixN&z-k@j>F_hI+@jq7kTmk*A&BI{Ei08$EM8umJX>kJ~OZC^r!lJLrM zlB43l5PgfFe3WA?XG8Rzn+Xu4;39rM%Y*V6)SelWwnEgSTLsnaC!ro6(hLN1n*6%n z(30x@1)75+L)goVlNAd8-gXQDCjSM@jm<}Xl^Y|YS*YK~F;s8O2-I0O>Nx5B9p$EBCPM)$%2iFi@i#isJ)x4 z+Abx_FsChP@ugPKCQud83{X5OUY-R*av&ZsWh(elpdA4iGfiqKU|u4|B?qCKni*ME8m)H9PAIaP+q*x;T| z(j=dM55*b!_epoca};72YR!Z8KnAGB63R>jNcU=&ylF(dfLKQtGRWF%SO`jYHs=Hp z94V8EIsgYSlUaSGx_LY0%67=v`%LOj$o!DTe^4WDg&Kv>AqdxbEbt)m`y~S8?~b5l zSs5G(By?+Aj|w}+Adtv`4G|wX7`i=-K)kXCyugaX!{6okR?NQ z9ziz4cKr3R>A@_A*yAWIin7NLV`-SVBt%3_x6VsR@RGPH^rV!m3!eUrcT9?sTb9JJ z(XZLt)A_up%B|E}O9rQuFTQ=6bvM>cjQRRJuSBI;$bQ4FNKbAyMp(7rKq|8_QQY)r z>X=GZk70uXSkWso++hQvkfCutATI({F2!_Jz^UPPmGacIcf&xZK=wsf z7MAlrYThovjrT6vYOBi@BXzW8=fMcZfEZe$Esm$F^)pr&JHQ5tvYVT1{II;go%oGB(;jb;4Z%f#fErI`>int~j=yMV>?fTT%8220u6ng|1}T&W88H8ONSwN9pqL4) zF&wu(rl624A#s)jKVx0f#-SMujgFKTzP($Zw73?)l-rV;GrOcHij^j8au5#4nA&0? zQ2SEi=4o4GWV^VzxV^ok7uGM|+`&^8 z3^%1$T`Dg1CX~tUfwZ@m`oX%^{`B%ESU@$)v767!;gG?HXF-t#jt+D%DS8-5`-dkjC(n zrE@GE?m01?Lbhf8$r>QF2~G8<_7`*iOj3trd_gkQnU%d`Fsi`DZRJIMk{|mWsak`F z!i<3Re{?sapE}?QdIT$u;l=}E`eswZ^T#wykAdqhTI9YxwT6G^^a02<;^NN~;q2=_f#!=%TB7I=JoO2qfc1l_?xd-;p2Lo*yO3J zOm0$xj<||vPG&D=cFl88{P-ox_fI<3NX#Qw(#WVNZ<8jwXad;u37fq5}^RBmNbNt@L!|g`| zd$YHCrJxMqCyu^p^fl9&RzL(5u{UpQlmpr}-4JNHK1eFp6)I99S)r2KRK$&m0XMjW zA*z_b`hvxBV(MNp&TEN~sxl|ip{cVIhX6rV^}78xbTdGdt;HZEVf#+z9H)2^O}cP% z%4gex4OE9}pJ;w@le96gS<6p_%3JQMPD`)BnTu-s(2R5GHQ(6t1y5KMF6z;!bX4V6 zKSv_2@wQwqpV+Oi_8ZXSndaw)3Tq^jENaPB%y{x0kY3WJVw94xMUE=<_bX7OEIi0j zYUj=T!s!NsNcHdss`jcJQeHg3iXEE}0h0&pO*aG!klQJ??{uK0V;*PGmT_aE@OafB zPf)u)4iKLR*EYZ){S;AnSgZ22@si@Pm1tcIu98Wew`xMG+|)Sh>pk7-25LNuGV+yN zwBwK%Aj{6pgIu-3Yo&~Gvq?9(F_}!?n&PF3fa_ukHHx&ydwzj@7%9u;g6efp<@f!b$TVYGZ z`{Brs&!>S|FUCDUaQ#P8}ejo#E)mI)!urh=swqi^s@(LxKdm2T7{8uW_1uv99Ux3V#req&%s`ah$w&=yRR(~@Zo^}a|#1+D#+CW8T&COH{w z`>w;v7pA{?jTy(>%Gkj}m_gOqO$c_BpGF{L=Z&nq&k8I>Q;rdlPZ6^PPmm&>nH-Jp@QxaToDw34-v zJefZu>Fz5KuG9;D-pQ>D&%?3lLXm+tN5?DmNNV+ps~ZK)Y(h;-J>9^?$LJu8k}lkr z-*F^I$Mk!q|5I1ZUWDUIY^5_(VXn;$N~WIKykjvM%?7arHpkn9t>G%%o09kaP)8cC zUU@h^Jh;ZZ2X?0L?(v~WZ){x|x-ljp;)I!?9=lnWNv~o16I5pLT)nhampReMCUPk5 z@LNQ_VCb{*h808HJl-+whV`ZitvUoepeiGDHG`RFvHArdN7|F{FsanGSUKkp#&;zf zs?<@)>;lqYW(nUu;1<1WCrHbi*uzIE zW-~wPsbF?}I)MkL6>j8*EDN;Qz?~yf^RV8N{`a^l&RS_( zVWvn?36n-9dQIdd5#x%gC)5#XtgSQgR$3r#JRtL5Z_ngayV#x_vj^i7Pp*!ecC##$ zry?SJZm=G5Jzd!xDNKzhFp0rC$%n^lySyX;p&H8j<1+4~m6Wz_Pq8GHpX-o+5TWf|t{ z7@#*Dmk(o>kwXy2kY!>RVje4f5@&-SBY@xbVDdQ+)MIWS5}c34EhZObeH@!dC~jdp zkm3$;%rPztOvNqo00cQKy2mqvTZZ&nt|vMM>ZOU~CYZRe58n{tB}Yf4sH#pI}Pz zQ4u%ee52D>VpXj$Un2SPRMDwy(<7)R6$g$&6>WiBlEcZ&OCa8L6%`bwWfe~YQ?>*- zs(*7-eIn9gD@-lV4kEa%;DtD|$Qozx*j30o^!X^T2yn&a$i2{7KzPZ~L@$G7hR39+ zsX!PFD>OxN6rd#GKp(|G6|eGx34{(Zz)_$|RvW0m#Mcwg>?3Vyod&Dg%G@f*9^e*;yALIW{sHByzB>UY@cFkSWS-#s#?6BYF9VV_Gnky2x`UjuIm7KF8Xr z?&mjhKMAcIOzA~b53i+Vo7{Eqp0LH4g?vc74 zq<>>ht~%mNOPjuK&4&EqnA9;{bZTg%U}9~%cvkrWwOjYETi!jq?&N11L&hG)Av|XF zXYC@Gu`RKYlB3aBfcr*<+dFEX3LX#bTtBy00PIb7uNb*Ta!&5)caxCHh*iQP1n;cv zt?Qhgd`ppvHPP%%mxO8>+y4TP<;7){uBhnAA$#-xZk>s+#F6~ppMZf3y#7ypa3^P?Hk~@aI6yvyh7N82-NRkMVuxUthjy1v9!p8R+HGb%S<(Hy zr(wM`4nQKMBYXFo;Y-5SpsXVq02eE)?Bxirf5*-3)Uc=Vs=4lAZmTirB%*e{AObd^ zcAI1d~J34*WqZjtIm?=4KH*4{!U#3g=k8a1-Dtk_x0!Uhq{%#;gUcX zq*Cx+BX5165Htx&wi;37UTnln)4fRuHKy7O+X~0j-R3pnz7)@M)ht-Xhio%%;YLyt zcdyl1%xDW+3M+8{w@FY~pVtU+NZ_$_*h*oGFNwpsL_k*4;W(KUto8a3k^6dOWr1?U z3l=8>R_-qB`Nt4-i%JFKdPD1{RDFHoeg2QM*wO1ZsS8}ZKio}^u{LQ=DRi@Kd z6YbZ=PM=pHWSMDXeo|kQ=Xqp1zKUNy50Lv46$)nV;Yc9|sXy_g!gOxZ zB;r?*O_XL~kAh9LwksH|$V(`+kQ*Y+uW1`By%gGSIay)y#Be|7OQCn$L_zOjAQn3` zHZH-R>Gp9wq?l^A*H9!@uWRFfiHi1D#yv#2%&fRfVgeO!mhecwmqDRVe*Nt#@f$0e zzx4BHY`VHKF!`MTnE0&wV!AOn`NJ_cJy`y8^1Yk#Sw{5*uF5liY(kF73a4?z{3gByGK(~FqM|a%Gt}-uc&1Cr z8Go(E%|NA#{oG;c7{oifnd?Z5y=$(6b=b*@PUTFLNA8}z{Ie=)t`w!?XK*q!cxJvHkw4B z{K#HDb4>GImilv9_YMUd`7Mr$rQPdQM0DEJ`N(v^Ce=3|eJdrDR$!00e%-Y^tX)wP zP#6E@iF&sWP~uH*9DYv7^;>{G0@TkvxUiXh(eHE_GW#K-Z=W8v8$RyUP0&b+-M|3N z+exoxuM`&}Ms)M)z3LZrYrgSzNg!LGa0rmO^#D&iKk`dJI= z5%L$xtF>m~Tk9)zL59FwTegEK&b1!a zlZF@M_(3T%plMP^HrDX{U__TgMsWMZ%26rNSEGQNA{AYe6_vP75}=DD6+plylyVEt z?nN$wTQeT27+}B z&tSTzJ5`~U{gbbuKgub({KjICDp4Dw0vC)sk7G4SXWo*^yl*ExMDQT}t1sDbciSmhheo-PM?}E@^GP zs50fM*K%lm5PwELkg3q3Ta znYJTpP-xplhxTJCx&$G!YlAKS_*+@HFniu8zz{2G>LaEe)*=jpcgQY+jrCI%{_iT@@2`IwQa_XGZfI@72vE zVeC-u9U8guq&YTX2tYZ4y5OG#_xw%#s1_5K z6aYEsgZAhbT4*>XMjz~3+?OmMK$r_W<~uP&`E!k#V$`!N; zH+tnGattcQ=y8YX9^EG^y&b>Y31qnu8l|j{9dw!f8iP-@V@ln6IK@HM@2j@Pn&(kN$((wQ5SiGRb>$9RL`-`{hB;ku;f zdhb;!2)^EpY;vT{u9nU5h@jt;Jm*!`B5jQ9ApB0qn-C;CzqUWTYP=*lD{wP*YNZ_;`KJyx0{z+O_IrBP zP^Dk|>LbcBY&Kf5+qA-QzL#C@z=mELc+{_r-25M1vNWvjC6yMV7Uef8DgZwe4yw_v zDs?&)I(aMht_g!}a?8l66Q5x?ay8;*I58n7ui{X z-Dh;TW3cS$?1+@I3)`i%$%S+AAuUsq8~=z9FsLvlDKuQQ{gVxkWGxq5zF9mDAyjDR zwub?#oWFX`HLUTCdF|ufmZmdDTd=6IdxyrdjcL5JJ(X_nEgRak?lNbRluHiMJHIz2 zQMHX7;a7y2v&5w}rR5uvTbtL2Aj3+zQa1HcD^lpfdaHPiZpa&+6lKD;L+U?h8{VKO zIOHL~CPa=+98ws>ctnkM!Xmi2I{38MpIgvy9d+_xiBQwW6Z0WspyN~>F2y7hQ^U9FlRrN`6# z2kX&WT5&?%?pAquSN;dl3OI^J@dt$hibog4x(%PX7^h{t@so4WIT?Pmn}vTw=)1V#Cr& zoBwu$p>bCOClxLWA)27pItL{9CxF`<6Izp6<^AIsO-VhcliEreE7#sjUL)xQm>ZWk5Lgrc~GqJj`JWiGv;w7@};f>MVVa-g?*v4;0y-Kt-sD}T9< zSx~h`P%S<~gzoml1yuGpYJ<;iLf5tg-~oy1dxg%z-gK#+T6t}^!-X|3@UwbKj7b!~ zv5_Bb5;LZ`{HVsJD1MB|S4;Ajmn3g+|$aR31G z^TB<_LBc5C05xfRCb^O7w{h=mNqPrwKMAqHs?_JYw zAMtZ!k!DkC{=@JkPyEt(0-jh@vdTLA4sRho!rb3PS`-utCqOGR3>2?z0Mp2X232+( zQyZkPPx`w@ddE*R*H&YMY5TXQh*wKWCF(|7?MvWq@DEUlj)_&?Mc+$NBlR28b%TOB z8q(C&2?}l(-^fexhSB)Uc0X4I@cXDm92hg|vgfU!{>78XoF_WnIwzcElHOS9ckQY| zzF*2+t=i9XYuqF7G6DplNP$dWW^lG!ygwXZ=L~J+TLtW?z3td;3~^msX$}YFI@V9xi|fYO750dFd~ASND8P1OSJMj194qk;?3>lj=k@QgciXzV-`1IE@xD7#F747kp?LBJm}my2K&RguCBONKr%3!t=YYi6nui3%J+ z5sI#k1X0jSCS|jo1Z`%jKOvhmuu4q{#=IE;MEmSf+3rv(wWd^=V>SE(sscn-uBtN zq4Uv7&}QY@&pF*BkZwX+qww&@0@uQ2G&t6yJ5Ekjdt3`0ql)1-w5F zNDFT;fzu3taI%Iq@fg%rZ0{st4}x4?b!>N;ZFtGJ?8{*94}7WxD<*=A_Dk8}zp?e= zlW>>qQMjU4}0nDnucGUh?hR+1V9EXHgJ}f)F#ep0iFC;R!;|VLG4ct;b7C z9Z3$BYILEv%-Y0p!0V{ZIa@Gu&oy^1+f%l05<0Sp5)-i+h8BY^C9qrrcysoZeg(Ku<|{+u;Y2D(Igx8A~+oBmb| zc!k$2fmE=8?^J^6%wXs@^LR5;ri3Y~`rx2e1-WiGRPm&8hC}!)EoZs}UWnPc>Nvqa z>KiXbpTFha&hVrlORO5Iu79v04SX$~5XlSUR#kE3yoh4}3mn1u#}Uap7QvHS00Knt z&_`0EK!|amaZ#~x04HQXV1XkD;PODQ<;3D*BLG~C^%QKpa!F8p&`QXf?^zI)6qgr@ z4-CWZ@eyYFyP2_@&!I&W)kQXiJ*#OACz7W&Hy(0YhEaxOGa}X&;tR zeaaB*u0wzeAtKIOL$4nsNujJqgqiJ#t6)48Q3ObsR}j zUMEAmBaHTOP^4Wa;YY881B_9eRi-&R!hy@78=r=BN8fs){dZXZ#vGif2_sVnz1qA;U|(o}n_wM%%c?+f2!|TrAn|I=aDe}J#k*J}i4y)ZUyKd6WkHZWhPM!q` z9YfR1ZWe{r%@iGDtjIl*CwB$FA7q@HYt;Qq&lBa;ICm}+VnR@e>rkP_P6`lTW3?`Y zPP|!l>EEHAtJ1o>)pxEQ?HP`&f1f+l^Y5iqdG(RQNAK?Y&g#56DRAh`jWUNYl^DpJ z@4@VQ6jec~q$sHDp!*Nai!M7Rm2SXqkn;HiUE!rnUIxEugQKK@(9ore*Oi8yy3DQr z&!(@ck4*3bl@xsX!RkgI=*}8-RQq7LFM+6DTU|>7^YKuk4F^`1NE9{dcwegTX#aLN|-3;t73hUFz&~`;8GkR@{n%%OdzLYk>$Y>~R zD9eOa#d>w(uHqqD`xd-sr|xUsfyb}cv}7s2^x? zvy{0dIJ8&c(Nbh-o~3`?Mkfqj1t(jl4Ib;8XIbWduIX-bds}O;aASWB5csa>ULN>= zouOM>cl8_)UVq_r7D`xL5doD67aSYZIqNld1{p=p%vB0Hd=~N$kClzNi=nf@<7jn0 zj(q-#I>}Q%e>si<&5_$z&Ipx9QBinQZl)$xllTh)bP}f3Ts9O&-tDnFm@rhsYZn&m zNOXul_<@WWc%ltFpnBBkuivLp=R%3osGE(81&Ag;R}72bCAqN1*?G0Ao506~L6xl+ z=9KMXV`*b%5?s6v2=kdC`u2Pv*Z%-+_O!Sum&X zK2q8Lk1aHsdv6|l&5g1?;4Wsp-nM$vX)b8bS74GGK056&r2C=Nz0Bj4*6`Ljstt2)26S> z0OWWws9^WAn~)zg;j=^gGWvE zgWW_z_aNWtfTc*~Z)PI{N+smqZip+lo&CB?)^yC$p^U%yGDw-+F&BTOQU=E2q@9pO z2*mE-{X{~4G#%uuS-b{_pkvRjI$wR}{0umQwBiycQEWDHblr;u$j<~&S(w4I_qM6HR^=k~=WvWGm6}UyL>{$2_8LdV&$tXTps^VFp2fS=fD2Fl}&_C!4tO{fxYUX+;@O_m`+PrB4BmSIB(bih3L8FjLwdv=1s*@w6}o$ni35Wu zszL~-xw?6jK9y1qrR*QbaHFl&$u1wAOKD(kg!D*j3p`%0O$m0V68jG|8o0aS)3!bP z5E*4;92NOU2u6X9X>#{a91g04djn#GI;Pi)#rErWuU@UO$ldsOK$+aF-#<0g|7cUL z1<-N%_j$xv%D*q3^S>S3E?l_x;sx*Ji|JM8=(qZuE4SvT!O@qq_5|_Ecd$g5uWfQY zw*7MA+Rli>HDmD?4K7*~uXPiY*$2YKu-UX|S{q@`#aAs`fCxJ_UrQ!TJ>ou@Vgv0q z|2?4m&-_EdKVVK*N-Kqrx`f4ED)c=9m?>Bsbsy&&qJUJnkX%2jmnhGSj98#8``bPo zz%k85X;2(!T0{@%9Y2M$@moj~@mXe!icO?Iflz=dRRJPEaVp?2>!v0MJC!q@Lf=C- zoH)!>?$ysbhb?ukZNUGfh3D!7(cN~pit^WX)oxz$ea3ZKRS5bBC^r`t)}G0(41 zwqdsa^?W-e72O}=Cd*$81akDPeVhM1|I%P%$=2)gcs<$X=7#*h)BXRxKRU5ivnC>@ zt}sh_Og7!eU!w0Hx_Bi(s^ortXf*oeBDgbf_&MGXQ3I&~IGi+VhFajEA-IJ?4Rl$U zb60B|+ILgSEysl#XpFQB4dH}F5GY=^;{hrcsCR5FgP~HmXDh5mQnx$-qNU4egFaBwI z)`Yrm$Iw?Xsovr8K%QE|$Sue;&eN6Bw(mH9sZBKJ*ku|BCblSl+f3WPv-!Q&D2%`3 z%D#^mbsRnHEKT+sV?&H(9f%-wOW-0f1Q=WWc0CF=im$%BRfM{$u*?d~#;okDw<1}) zMHB0jfriW;SeQR%va_SJ=Eeuqc>;d8(&qIynCCi)S|v`~11SOs0ST z!0IF~8-7!A{oz|LUcY}lb$VGMlb^VA;u~zJhkkmU4kz+|s3}Ilc>`CznMao%xef`! zAH;3ua<)t%%&9FL?&c{bVtnY(tru_p+?+bSG?B^5Yx7wVLp$^_z<0A9Za^mC z7qbTC$#M!l$c+v`to8>T7_Z>mr1^b|OdJAJAqlI46UIXUq z027*DmHC!SDFO=|Umj>{+7Lq8(9Oz=ruXOCU(17_i7GJANv?8)Ab5w_++;}j=N}x2 zi_Z)I`CNpHI8~}D;C_A5jWjSAV@DhqdpR~hyzXl+`}+pJKJ0-Zv6RUAZF0g)+gPGc z**zjHUca2!hogUejXb33akOb+9(D()KiVNXZK&sZiM;MFTgR9z|wED?0>(%oI)z9XoVh#>(zhzu2wN}O1W z%8HG|7!C>|L3+S!i=9}%pSN=tdAE2ovmY1e) z+qP``a^Q9zcA-kCu2jj4%Zx<0N~JR3m_1rv2#P@0bj(gnbj%qoD}o9kEtFlAOS@Xf zOGn*aEdpe&K7G=A3_k}2h^l+b@vf{VBcard9TKS>wop1N;&c}&*BT_S4CQ#RKxHbt ztU|5Ae%(y*_eZ1sWlDKM5yszXbWn(PaB@Hk^^O)nqh*dc{f9$yLJ=s819if)pc5px zizfvMTIbnWg;|CEx~lBbcuIJeRj1Q~S7fnE90o}3p@P2Tm~=B9`foH>ZlvT2JI_2j zCao`%O8!A}l}2*RkS|WEP09c?UD*Gyx$k8d4d$QJ<;HSP#iXoB@ZVfA;&Pd)pw9^9 z+;8AX_Sk@d!N8dQ%L&K6{;n$`b6>*@13xn;JU>4ia=TWL)@L&PQoqEi_-nEjRqBXM z%=COJdONmrd)VWaA??H;zSu>a#dKw6iEx=LS61Un!QKV?1fop~Hj03-{?OK=qv@^0 zoewQm2D-llx3d>pMue5W-{)T?&tz@T35H{}DOp8UQR z_*LUuBveoUMVK4-?!`hu>FGg`L0^%|S)2oPHB+(zJdzed5d{VOhlk{0BqA=lc@r0s z#KlR#w{jpp4oDoF!)~l45R#TwB*B9jj&^P5drl}3!A{ayTsN&Bx1JwGIYo_%h>)rv zY*s=Yph|`7?S5y8J2?X2ya}&tK`V>>nJRQu+VotXZrkPnJX6CH*%)^YpCN34sva$k1nS!$6^O>w!);v}! z(t7=RTgK-VIORc$4|uYv-6Ty#ErSuS@;FFc10_{L@r$dXv074eTqYD)356)LWKg-l zY8?uxgaYF-rD(G#?BXgYz7k4O*9fTd4&~u3{T(f=N4Bc^#m(W_|6$9+jo2GY_W%(+ zkS_9_CM|+fmZt@~EpQ4%ESp!jt`=>M?$Tt{@Pi8RLv7;4@)drjnp% zz*|9|SP9EJJ;uvxgUah_%Yy~r8B|_7-syox=(1*~jJ!e%L<;jPIO(6!>;!&9e`*g2 z!CT`)f;&a8aD3S>j$7icS57t@Os>+c4i#u;--BQsCsXgg8sQuN@Fjs3~+)`#y12OSeKH zSy>^FMmTFeLR0tb_RHnc)OoG8QA7Iyp^flBd$!-&Qwe?qp80d)LT{O}9_!S_b6BuA zaL@l%-u+ZP+h+hku{Q9s(l0;We^E)UXYxeem%sDSbZ*Ha|6JevSCy?0w0R}WIeXJU zyT!nBEo-1pCb|;IdipH}=a&Xsvu}xWa%?(UJhUrFpb3i8tarE9So|d1)grudb82yK z*2D%mX@b@t4Mzim$n7!8`Fns|?`*N7~O z8+Y`?>)@BjiaU1hTXaO}0?@Nz-QGAIT&l?W?x%A5!2ZC2IEOP=?Vh8)*G3m7S^!|P zs7^1n+N-nQYlFJ1)3bkrXIYu&hJMe^GW7;8bfivDvrBHSOLM17OKwiHOJ^;T4LGME{PsxI1pCC zKIRBZg{UHJ45Zo{AV`eS(R!c;a4)ot2SibSAIeQ+)Iu@XEq zs;{fB9jUFWop&4l@Hge4p zcUM{uT~0pNqEhg`zH_JZ|KBYPfc`CCBma#CSb#zQFZa8&75K(opjhx_K}>yBdlvo! zF>B2ASwgsj3!AW{VL#DfNmii^$p=r|+@T_dzWR?S6j>))<09a<#!%D_18HHDw!$@v z2zuZl+mV-McBYCa-kh z-~cXK0RlM(#reJTcT@2zyg+CCl0sasXHhd>+0VbgzNH3{;@TxU9elb2Za0eivcek1 zL=PWFObVTgUvt{I5HX20h{9UKFDtmfC8DHvBpQd&hA@Ayb2{}pbJ!e=Y~4N_vY?JI zPWXc#Z=W8+bz}P^Y`JXu8EiMTOL<1wMeW8O_XTXnFh%Lc;&Nd8Ni=c=&^q$_{}E&q zK@v4`HIR~zisqF`%V^Owgyw;L1HeKBZxDM>f(q`*)^tglg|nD9Y1~)0QkQyz52aF<+!79l+$Vl;2>V3sNcUvW8@hR zjt-VzBOmoS4jd6eHo%}Dpe_LTVf>-6NGdff>JWaI zFbp(^|^a~KadA3nSkMo_)=0qpUm97ck9j(bPEfyB1z`hNwFhoRui%wQ-8 zf(!+doDq}(_X92;`gH^Cq%;6G|E^0 zN8@^MY0LU@rJYR$Ep7?2TDfIVr!-fV;MQ_6g2Oa``&~DgMOs73nylM}Y#gP{9osJq zsEGEyIJhwPS;odhD}OEw8QrT7iBWXe7HkCey=KjvS-1tBb}CQbUCTv_@>$Y6zd2W7b3cs z2m<9as7$fxNr;I zIXUm($_l!RZy3-1!iC1|hfU61r(#@kxRY-pLfJpuC@ z@xp+T!^MX=*8;)|R@qx$->@rfO{4wJ^$>pqwB!hfjN=>%*HwT!C-*HQHrsdOUb^EI z&ZUc~JC7V$v)yqAjpLHTn|vJ^$_CD&vUHl?LfLNLL|iB1*aJd0#^0xUl||VC5jc=R zJKc_p%8OF7)YaKi=m0HazdvZUUHK$%Id!{DXI9PfKsnZ)owy@(p-e#oHV4Ub#6;4Z z9v}}lFkLVPNSS1+-n^}nIJfS_ARuXxfi56xk-!Bt8ITe+HZfXhK$ltrfU_ChglX0^ zftTIs8%6&AA9b1lc(fKHAL6I5e$?Yf$Nqt^m=Y35D;wqw0d9l)0>N*_m&aRU!ofh=mzK>hB8|gohXB_H)#%UkHIMk-DQtdMas&HD& zh*hTItnj{8H!`FoRYOJP;Gcx`@TJShddinBB?2-yD!;s5Q;YQNfontV>+^E(o<5`& z9((pM(h#EN;*ByiRbICCH%p5O9Is!XW_K>jfki;&T-a$C2&Jb(L72S;zUC*PQxVYD zlhu0>?~%03<(mY=#Q_O-qdEge)DM%78T6cQGtPAEO@fwI5*88G-Eay6{$28cW<3BX zCq|1T5fM?;0csR~{mJQ^0jd;S>pF5|3FNYY`|Zqqs0r;*r*G}vzx4iMelsJzzg>P2 zZwB@w?Os`ucxtpSq>FR#12Z7;pOCQQJe zXigXF3FTSO`YsQT35Wgu`}b;A7sn!~4_rm?sI9K`J!M%IaX2WLF z_x_!}%y^e_iub(-rX%3lN3Eln#ERuODzro8F2-vF}xf}1wCvTxbk1TNRiP>xb7J^CBADO)PF65j50 znv@d;D)}GbocAzkOHoO2&#=C#2dZf7<{quuxNg0gkVaz-u%2aS1jV=$=0+uTwVC)` zf_~I9WI*r$xWY6eGLL*lU()-hS4h|jcVWADBZsJTUR-~jX?}jM=_|<$3h;b8pdZ=W z|LWCN8r@h(ouf!8A81@-hnX$Vt}!Z)`hnW0!5~YhTVB5&AV|x(Pg5(14~*9v7r&@YHr0y|?+)4> zEQ-`KmA|Mh2Ey=$U$pt7GcL8yzeH>^Wz~NSccYwoBhj_bm+w0}Xfq=of-H-;ju<%7 z$ET#o&#$<+TrD9=ctR2Y(N*y4k`NOIQSE|LgV#hvZ#!~#3fYEizkB!TRL~H@wwt;O z$~-QJQEe!($9ZAzlCNHtC$B(Wwc4RqFP;1tU%SZ2^`5pp%dJwj^%Sr8_MmUjln8uP z0N14gVqX+0n*^$EYB%mfbQ~lhnftM2x^WF43TN&CN-U{TK)CKwQ1;novAj7!j30vW zj2A8nEF6-R9SRY2O(?|KG5T_%VR0wOsJI%qVC~w)Fo%X`pR3@uFrIK@1U84OSw`&9 z#NmxM!R#MCL`6}kQ39MyAbcXKJXvGEu$9c0vP`RXfD(lW*op*dN5q>VF=!JbrUhMHr8%LtT`UKTEmwcTsEKd?8 z7?8qA)^Dc$ye0w-%ttJR$=4U!h-Nqmyms(DN@jEEe>;lpAG^2q(~r>tCn3AR)}Pjh z5`Xz8ziL3YiZEMnRNc_zTV& z1IQc0Vud$`sFjC@f)0R56N%|Gu^57~H5y$cwjTp~#izsr;=TKWY)!&`cQ-#$Mn+gA z6^Irdg`H{c`DGHe*~WX^Up>u}xTx?)kBC%VZ|?rx-cKKBY+dCx+o~0|)xDML#vokg zGso6Vj+*C+_*@|kZfb%{NOOoA(8t;r2^TDeBCj_=tnuPVSgW-KcWQ*R61S1wha=YQ z>?_C8AbkIdQ)evRb#OUcn2BN#JBo*{qc2D%cxc{qITi0Pl)eqmf`k8Du-uNfZU+|> zm;T@|5$0elTXA=oiU~L6!YCR8mM_r53-D7Ym>GpfhhxUNe3&m>XfA_H!~xRJDDe%4 zAh?Z=KQ0dNL^BZX5X^z5g_o$$9H(IvbePRTyj{xqTpHsbi>Of;+BqKLai7Boj4lGg zV_|Y0N5BoYy|YwVFUPYW0eFth^JBVW5J<Q=l51oM- zv|HG{zZn8*AXOlk=V3*HF4Y0Dr&{1>z~S-n=DGy1tgdd^BDK^~7)+?Etf<3>6gJ01 z43Cf?eL8vM6a~_QC>P$0M~@gI!(_T19S9GPY8o>TX>3i8$uPfW1_vWQ?mT=ri#5wq zFI|>Qe0P0YNZw<$epAZ3?Kk#%4|wI=eOmRNM}CE}r`Q`Da>m#If@DT{p)p$8HAY z1**S>JEh-4qkpAE`y9L8a%ht9&&_~CJ80K@uSwJPAH-=f(}aOrIAH!o>+vN=pvRmY zTd!^9m_E9a`<(y0z&^#H(O!2ukRlq0fk>ecft7m2fqbE#Sa_AYcWb(jQ{rJT6dK!ppSYHI zzg@JUZ-~QrVyPG}j8X)!SWgTU>xETuuvo4v;^M5sl^8SciEUS5t2jI{?Me(6ODQV& ztgZ+4;d0t(v@(8~Nftkg7BZIU&Q@Vqp`5mPVEe#ky2Z0uiFt%krr#(_DeCKLi|qdIu4xq15mSSI< zxOLm+E*)99nwFL?ftOUf2hk$g*|m*{6s2Ln&%Icxa<7tl9C5+S+RkDqQ(FvIy*!XA zR8p}*ES3GhL`6}>6!0`oqfOVY=jG8!BDLR8&&Xz4R8sC0|L^iP$8tE7d~GE*HlAE(4v}}MOpCb8h8<$R9y{zjtL4e zA2(08Oxs_a2l7E!7Nl9ETZ}&ll9#Ew!6QC)&aTw9#9ng^)Pg#I1Guox*~Q0})duLW zK)vsDOv&4~Z@LY-o0q*QjXA93J2bpg~IW z^LCJ<`0bm;;)aB9!_PG3)?M|nbVQ;Z((+;zH9lz;Nn79z<(Y@E*s zcIZhLTrWbmRN3f=90P}kayr#VQ$qEnHl=y77LrK<>_d~nESv%5GRX{U3gyU?^`;tdLvH0`8 zwSa>-KFkSEw-0lnbvqv|wfiK(g{ENaLpfhcD=s<86VCfKb!9V?iaLiY_wh2a7|^>iYxvu&Z)2X|vLet>*#$ zf=@#3_Abe;&tEOQWSNfsXydPb!;fh(i73A9<&yzR%TtevbB*L}J%OO|bhuh~ui6zVf_D%6RW@BUD37PnjW4+Q$Y#nVgI`6p8 zqiWST3F+Zc=kqW2k>}{g&~-IO#$$Fq2{vV?qYclIwLW>T3|3&XaP64*EChcoQxIyW z=TNcuappDu+#-W_@Fr8bk?txG zS7J5CX%<^Ce_>id-Tb`dpUv}bb)=J&8k4LP3HBW8HDrx)L2NefM1CSJJ!>DQIRx2K zTYSP`P0=29D5%pz7GXnM+|Xj^mP69bG4K@G7hOjeFV zw(QU_GYn(TAf1~>QU;%Jf*>Oxg_q`t5b3g78HvL38{E{G>KUg?{l=p@H>k_D$pJN* z8>^W{I!sW4^H+lw`4$j<6lbhJ;<9vgQ^rql;>dsZJhY&7)A z5uQU=<;v1;aN78e9i5QnK%G`amH_p{GBK*;kf^o42ZDNPxM*&D)Aeam!v@R9DEwFj zN&S(L5CBr{u<+bekt%&%2amQ+;TflJ)!vf&Gm9bVJJw)G%O#IF^iM9KKQI~_KY^kE zJL05rRLRxD*`_QF>R~Oxg^_ub0>ST$gnzgazRpe=t&{{ z#B|DONB3N(P+0o0_BJN%IlSIWrdzXS&+wc zj6HH4FVase#nzoYA*7MlaWcv_g`XBPuS@C0f^0-)aYzrAr4GqSilmQ=^?R1sy6wV39FUDPp{sZwl#|zc-cXvXGZ`w--;C8n&pQWKb zei^qDrNaXzTGW()KL?lXb$iU8kzs5yzGD3w%y(7z@FoRsdUxf9EEc?~_PW6?wbNHh zeS{6jm%A2F?4G|Vzh>xoDKDn}PYDqU0jxMKClCM)@SHAzKZw7~kB7dC0Q^oBm~B27 z*02*fEHO!7^}dW@11|~;+b}6T>`6M6_w9v0J&*|914v_ZZCK#L)?tnRa12X)xWMXt z4~7kbcsFdrN62AM>InaP;6;)+BQ;1w$Y|PrZD|m;!ns-R_%}KY5XUij?*AAQZEL%i zx8o~+K*osSlg{ptvu$mZsr|lo$1ntG=O`l%`NiivfA{)o!`gTmWO~;i5h0^#`*r!W zGzi<*pPQ2({@>^{K#W;*@U;J9O!V=$-OC$*{eduOQ7X=Kc84rf+s@4>(?YH=iDE8F6W*+ zeZ~u-^go#guijuZnJreE-Qje(Jzk$b5DbMQ(O5i@OrxXfgmv!5Z^SYn+`#}gsP~U<1 z5+g{8W>}6FL`hauO*c%-b~s&bkJslvhH6Pav7PgG!!80xpxs%~QP)Y(U*N9O$C;?B^qp zh04x+JjRdj~yJwy6 z_iGus@XnFV<#KG>O+cZ(hWX49Q@S=l6U<21&Bc$5`D0S43|i2TtHEQ6fFDk$8w1Jf zsDtw0wVYB$RjYF(U>C4BsW#XR$?(Vj|NQ;qNKll+xKxJA-5!O?&I!9+4+*P?yRZ-+ zZvM$I9RE0Dv_URLUV3P3h@b6&a6^>iNinXak>QB3oY&mPA1#<^R${jZC*Zna9?=k| zMcmQczW?X1UlT@je1jl{qBgL|3*8%J7xbqYQvWFIo+zj3IgpaHDR7{23>5}$E>NmR z42k09MI=S3C7bNtWo4wG^`gKVW-9x9aRbrVC0gRuvc}-m5JzB8m#ur?9{H#RrKEVD4TRf(v(A*X&VVzqyUR1V8)sR} z?)G%r;KYYFT9hk{7o-WaAic7M%nEeBiWXXoW@AjTL-L{{?IR0LuGoVHT#0Ovhhmi{ z45Vu*K4%lM*i=?*G9^!g%0&vwnWbjYj73f2w-2NNcm=LTVkhIb<%2^@Heei|{#>WPrxnU1 znpAccdcDcjDQN+O(#Y%<(<>Q4#l55XBe7IY^>ia;MOtVMi%T%aYn5KfYFAa#;%f82 zN4W5uuC2|cQt19>jc&*DWR`xDuUDLFJI0Q7IxO%nysA8rq2U zwJfs`I~_<$wR0w1t(56*2gyp&pylfLw0UA=j8bZumi%PiPC4Hhz2h3axHEPmoS`nU nd&BLl#A7k7=@d#w*=t` Date: Thu, 30 May 2019 11:12:20 +0800 Subject: [PATCH 29/50] =?UTF-8?q?=E5=A5=BD=E5=A4=A7=E5=AD=A6=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=91=BD=E5=90=8D=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/cnmoocs_service.rb | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/app/services/cnmoocs_service.rb b/app/services/cnmoocs_service.rb index 41705eb6..72318905 100644 --- a/app/services/cnmoocs_service.rb +++ b/app/services/cnmoocs_service.rb @@ -6,7 +6,7 @@ class CnmoocsService page = params[:pageNo].to_i limit = params[:pageSize] || 16 offset = page * limit.to_i - resouces = [] + resources = [] if params[:level].to_s == "1" subjects = Subject.find_by_sql("SELECT subjects.id, subjects.name, subjects.status, COUNT(myshixuns.id) AS myshixun_member_count FROM myshixuns, stage_shixuns, subjects WHERE myshixuns.shixun_id = stage_shixuns.shixun_id @@ -14,8 +14,8 @@ class CnmoocsService GROUP BY subjects.id ORDER BY myshixun_member_count DESC limit #{offset},#{limit}") subjects.each do |subject| - resouces << {resouceId: subject.id, parentId: nil, resouceName: subject.name, accessType: 0, nodeType: 0, - resouceType: 2} + resources << {resourceId: subject.id, parentId: nil, resourceName: subject.name, accessType: 0, nodeType: 0, + resourceType: 2} end totalCount = Subject.where(:status => 2, :hidden => 0).count count = subjects.count @@ -23,8 +23,8 @@ class CnmoocsService return {error: -1, messages: "请求二级及其更高目录时,parentId不能为空"} if params[:parentId].blank? stages = Stage.where(:subject_id => params[:parentId]).offset(offset).limit(limit) stages.each do |stage| - resouces << {resouceId: stage.id, parentId: params[:parentId], resouceName: stage.name, accessType: 0, nodeType: 0, - resouceType: 2} + resources << {resourceId: stage.id, parentId: params[:parentId], resourceName: stage.name, accessType: 0, nodeType: 0, + resourceType: 2} end totalCount = Stage.where(:subject_id => params[:parentId]).count count = stages.count @@ -33,8 +33,8 @@ class CnmoocsService shixun_ids = StageShixun.where(:stage_id => params[:parentId]).pluck(:shixun_id) shixuns = Shixun.where(:id => shixun_ids).offset(offset).limit(limit) shixuns.each do |shixun| - resouces << {resouceId: shixun.id, parentId: params[:parentId], resouceName: shixun.name, accessType: 2, - nodeType: 1, resouceType: 1} + resources << {resourceId: shixun.id, parentId: params[:parentId], resourceName: shixun.name, accessType: 2, + nodeType: 1, resourceType: 1} end totalCount = Shixun.where(:id => shixun_ids).count count = shixuns.count @@ -42,7 +42,7 @@ class CnmoocsService pageCount = ((totalCount / limit.to_f) == (totalCount / limit)) ? (totalCount / limit) : ((totalCount / limit) + 1) {error: 0, messages: "请求成功", page: {count: count, totalCount: totalCount, pageNo: page, pageSize: limit, pageCount: pageCount}, - data: {resouces: resouces} } + data: {resources: resources} } end def search_resources params @@ -115,7 +115,7 @@ class CnmoocsService end def source_url(params, token) - shixun = Shixun.find_by_id(params[:resouceId]) + shixun = Shixun.find_by_id(params[:resourceId]) if shixun.blank? return { error: -1, messages: '资源不存在' } end @@ -123,7 +123,7 @@ class CnmoocsService end def get_students_data params - shixun = Shixun.find_by_id params[:resouceId] + shixun = Shixun.find_by_id params[:resourceId] return {error: -1, messages: "资源id不对,请使用资源的id查找"} if shixun.blank? myshixun = shixun.myshixuns.where(:user_id => params[:userId]).includes(:games).first if myshixun.present? @@ -150,7 +150,7 @@ class CnmoocsService challenges_count: shixun.challenges_count, score_info: shixun.averge_star, level: level} end - {resouces: shixun_list} + {resources: shixun_list} end # 为新创建的用户随机生成以m为前缀的用户名,m表示该用户是用邮箱注册 From 1f34e30a28f1114533fd1dd95d4f3a57e97dd667 Mon Sep 17 00:00:00 2001 From: jingquan huang Date: Thu, 30 May 2019 11:18:56 +0800 Subject: [PATCH 30/50] =?UTF-8?q?vnc=E5=9C=A8gamesow=E4=B8=AD=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/myshixuns_controller.rb | 4 ++++ app/services/games_service.rb | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb index 802bb8b9..96f45d3a 100644 --- a/app/controllers/myshixuns_controller.rb +++ b/app/controllers/myshixuns_controller.rb @@ -10,6 +10,10 @@ class MyshixunsController < ApplicationController include ApplicationHelper + def archive + + end + def forbidden render_403 return diff --git a/app/services/games_service.rb b/app/services/games_service.rb index a53ee086..af1ce935 100644 --- a/app/services/games_service.rb +++ b/app/services/games_service.rb @@ -77,6 +77,23 @@ class GamesService :image_url => image_url, :user_url => user_url, :praise_count => praise_count, :user_praise => user_praise, :time_limit => time_limit, :tomcat_url => Redmine::Configuration['tomcat_php'], :is_teacher => is_teacher, :power => power, :myshixun_manager => myshixun_manager, :vnc => shixun.vnc} + if shixun.vnc + begin + shixun_tomcat = Redmine::Configuration['shixun_tomcat'] + service_host = Redmine::Configuration['tomcat_php'] + uri = "#{shixun_tomcat}/bridge/vnc/getvnc" + params = {tpiID: myshixun.id, :containers => "#{Base64.urlsafe_encode64(container_limit(shixun.mirror_repositories))}"} + res = uri_exec uri, params + if res && res['code'].to_i != 0 + raise("实训云平台繁忙(繁忙等级:99)") + end + url = service_host +":#{res['port']}/vnc.html" + rescue Exception => e + logger.error(e.message) + end + container = container.merge(:vnc_url => url) + end + # 区分选择题和编程题,st:0编程题; if st == 0 From 3b28815ba7a31213b39fb9f8a52a88995ad7997b Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Thu, 30 May 2019 11:20:04 +0800 Subject: [PATCH 31/50] =?UTF-8?q?test=20=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/context/TPIContextProvider.js | 9 +++++++++ public/react/src/modules/page/MainContentContainer.js | 8 ++++++++ .../react/src/modules/page/main/CodeRepositoryView.js | 11 ++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/public/react/src/context/TPIContextProvider.js b/public/react/src/context/TPIContextProvider.js index 2dd9267f..1d60375e 100644 --- a/public/react/src/context/TPIContextProvider.js +++ b/public/react/src/context/TPIContextProvider.js @@ -418,10 +418,19 @@ pop_box_new(htmlvalue, 480, 182); currentGamePassed: false, // 切换game时重置passed字段 }) + // test + // const response = {} + // response.data = {"tpm_modified":false,"tpm_cases_modified":false,"hide_code":false,"forbid_copy":false,"output_sets":{"test_sets":"{\"is_public\":1,\"result\":null,\"actual_output\":null,\"compile_success\":null,\"input\":\"9\",\"output\":\"3\\r\\n\"},{\"is_public\":1,\"result\":null,\"actual_output\":null,\"compile_success\":null,\"input\":\"110.25\",\"output\":\"10.5\\r\\n\"},{\"is_public\":0,\"result\":null,\"actual_output\":null,\"compile_success\":null,\"input\":\"-100\",\"output\":\"\\u65e0\\u7b97\\u672f\\u5e73\\u65b9\\u6839\\r\\n\"}","had_test_count":0,"test_sets_count":3,"had_passed_testsests_error_count":0},"latest_output":null,"mirror_name":["C/C++"],"multi_webssh":false,"has_answer":true,"st":0,"discusses_count":8,"game_count":3,"myshixun":{"id":140292,"shixun_id":49,"identifier":"ihprfcq2ta","gpid":156599,"status":0,"user_id":116,"commit_id":"5955e66e34b3b70913b4cb2f62ec5d84cdbe26c9","modify_time":"2017-10-13T15:14:34+08:00","reset_time":"2017-10-13T15:14:34+08:00","system_tip":false},"challenge":{"id":81,"subject":"\u6c42\u4e00\u4e2a\u6570\u7684\u7b97\u672f\u5e73\u65b9\u6839","position":2,"shixun_id":49,"st":0,"score":100,"path":"src/step2/SquareRoot.cpp","task_pass":"[TOC]\r\n\r\n---\r\n\r\n####\u4efb\u52a1\u63cf\u8ff0\r\n\u672c\u5173\u4efb\u52a1\u662f\u901a\u8fc7\u8c03\u7528`sqrt`\u51fd\u6570\u6765\u5b9a\u4e49\u4e00\u4e2a\u6c42\u7b97\u672f\u5e73\u65b9\u6839\u7684\u51fd\u6570\u5e76\u4ee5\u6b64\u6765\u8ba1\u7b97\u4e00\u4e2a\u6570\u7684\u7b97\u672f\u5e73\u65b9\u6839\u3002\r\n\r\n####\u76f8\u5173\u77e5\u8bc6\r\n\u5982\u679c\u4e00\u4e2a\u975e\u8d1f\u6570`x`\u7684\u5e73\u65b9\u7b49\u4e8e`a`\uff0c\u5373`$$x^2 = a$$`\uff0c`(a \u2265 0)`\uff0c\u90a3\u4e48\u8fd9\u4e2a\u975e\u8d1f\u6570`x`\u53eb\u505a`a`\u7684\u7b97\u672f\u5e73\u65b9\u6839\u3002`a`\u7684\u7b97\u672f\u5e73\u65b9\u6839\u8bb0\u4e3a`$$\\sqrt{a}$$`\uff0c\u8bfb\u4f5c`\u6839\u53f7a`\uff0c`a`\u53eb\u505a\u88ab\u5f00\u65b9\u6570\u3002\r\n\r\nC++\u4e2d\uff0c\u53ef\u4ee5\u8c03\u7528\u5e93\u51fd\u6570`sqrt()`\u6765\u6c42\u4e00\u4e2a\u6570\u7684\u7b97\u672f\u5e73\u65b9\u6839\u3002\r\n\r\n####\u7f16\u7a0b\u8981\u6c42\r\n\u672c\u5173\u7684\u7f16\u7a0b\u4efb\u52a1\u662f\u901a\u8fc7\u8c03\u7528`sqrt()`\u51fd\u6570\u6765\u8865\u5168`step2/SquareRoot.cpp`\u6587\u4ef6\u4e2d\u7684`SquareRoot(float n)`\u51fd\u6570\uff0c\u4ee5\u5b9e\u73b0\u8ba1\u7b97\u4e00\u4e2a\u6570\u7684\u7b97\u672f\u5e73\u65b9\u6839\u7684\u8981\u6c42\u3002\r\n\r\n\u6ce8\u610f\uff1a\r\n* \u5982\u679c\u8f93\u5165\u7684\u6570\u6ca1\u6709\u7b97\u6570\u5e73\u65b9\u6839\uff0c\u8fd4\u56de`-1`\u3002\r\n* \u5177\u4f53\u8bf7\u53c2\u89c1\u540e\u7eed\u6d4b\u8bd5\u6837\u4f8b\u3002\r\n\r\n\u672c\u5173\u6d89\u53ca\u7684\u4ee3\u7801\u6587\u4ef6`step2/SquareRoot.cpp`\u4e2d\u7684`SquareRoot`\u51fd\u6570\u7684\u4ee3\u7801\u6846\u67b6\u5982\u4e0b\uff1a\r\n\r\n```cpp\r\n#include \r\n\r\n// \u6c42n\u7684\u7b97\u672f\u5e73\u65b9\u6839\r\ndouble SquareRoot(float n)\r\n{\r\n // \u8bf7\u5728\u6b64\u6dfb\u52a0\u4ee3\u7801\uff0c\u8865\u5168\u51fd\u6570SquareRoot\r\n /********** Begin *********/\r\n\r\n\r\n /********** End **********/\r\n}\r\n```\r\n\r\n####\u6d4b\u8bd5\u8bf4\u660e\r\n\u672c\u5173\u7684\u6d4b\u8bd5\u6587\u4ef6\u662f`step2/SquareRootTest.cpp`\uff0c\u6d4b\u8bd5\u8fc7\u7a0b\u5982\u4e0b\uff1a\r\n1. \u5e73\u53f0\u7f16\u8bd1`step2/SquareRootTest.cpp`\uff0c\u7136\u540e\u94fe\u63a5\u76f8\u5173\u7a0b\u5e8f\u5e93\u5e76\u751f\u6210`SquareRootTest.exe`\uff1b\r\n2. \u5e73\u53f0\u8fd0\u884c`SquareRootTest.exe`\uff0c\u5e76\u4ee5\u6807\u51c6\u8f93\u5165\u65b9\u5f0f\u63d0\u4f9b\u6d4b\u8bd5\u8f93\u5165\uff1b\r\n3. \u5e73\u53f0\u83b7\u53d6`SquareRootTest.exe`\u7684\u8f93\u51fa\uff0c\u7136\u540e\u5c06\u5176\u4e0e\u9884\u671f\u8f93\u51fa\u5bf9\u6bd4\uff0c\u5982\u679c\u4e00\u81f4\u5219\u6d4b\u8bd5\u901a\u8fc7\uff1b\u5426\u5219\u6d4b\u8bd5\u5931\u8d25\u3002\r\n\r\n\u4ee5\u4e0b\u662f\u5e73\u53f0\u5bf9`step2/SquareRootTest.cpp`\u7684\u6837\u4f8b\u6d4b\u8bd5\u96c6\uff1a\r\n\r\n\u6d4b\u8bd5\u8f93\u5165\uff1a`9`\r\n\u9884\u671f\u8f93\u51fa\uff1a`3`\r\n\r\n\u6d4b\u8bd5\u8f93\u5165\uff1a`110.25`\r\n\u9884\u671f\u8f93\u51fa\uff1a`10.5`\r\n\r\n\u6d4b\u8bd5\u8f93\u5165\uff1a`-8`\r\n\u9884\u671f\u8f93\u51fa\uff1a`-1`\r\n\r\n\u5f00\u59cb\u4f60\u7684\u4efb\u52a1\u5427\uff0c\u795d\u4f60\u6210\u529f\uff01\r\n","modify_time":null,"web_route":null,"answer":null},"game":{"id":448025,"status":0,"myshixun_id":140292,"user_id":116,"final_score":0,"challenge_id":81,"identifier":"gih9uzwn8xfc","answer_open":0,"test_sets_view":false,"cost_time":0,"star":0,"modify_time":null,"open_time":"2019-05-30T11:00:19+08:00","updated_at":"2019-05-30T11:00:19+08:00"},"shixun":{"id":49,"name":"C++\u4e4b\u6574\u6570\u8ba1\u7b97\u57fa\u7840","gpid":2018,"modify_time":"2017-10-13T15:14:34+08:00","reset_time":"2017-10-13T15:14:34+08:00","language":"C++","propaedeutics":"####C++\u53d1\u5c55\u5386\u7a0b\r\nC++\u662f\u4e00\u79cd\u901a\u7528\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u5b83\u4e0d\u4f46\u62e5\u6709\u6570\u636e\u5c01\u88c5\u3001\u6570\u636e\u9690\u85cf\u3001\u7ee7\u627f\u3001\u91cd\u7528\u3001\u91cd\u8f7d\u4ee5\u53ca\u591a\u6001\u7b49\u7279\u6027\uff0c\u8fd8\u652f\u6301\u8fc7\u7a0b\u5316\u7a0b\u5e8f\u8bbe\u8ba1\u3001\u9762\u5411\u5bf9\u8c61\u7a0b\u5e8f\u8bbe\u8ba1\u3001\u6cdb\u578b\u7a0b\u5e8f\u8bbe\u8ba1\u7b49\u591a\u79cd\u7a0b\u5e8f\u8bbe\u8ba1\u98ce\u683c\uff0c\u540c\u65f6\u8fd8\u63d0\u4f9b\u4e86\u5e95\u5c42\u5185\u5b58\u64cd\u4f5c\u7684\u529f\u80fd\u3002\u5176\u8bbe\u8ba1\u4eae\u70b9\u5728\u4e8e\u4f7f\u7528\u6027\u80fd\uff0c\u6548\u7387\u548c\u7075\u6d3b\u6027\uff0c\u662f\u8fc4\u4eca\u4e3a\u6b62\u6700\u53d7\u5e7f\u5927\u7a0b\u5e8f\u5458\u6b22\u8fce\u7684\u7f16\u7a0b\u8bed\u8a00\u4e4b\u4e00\u3002\r\n\r\n1979\u5e74\uff0c\u4e39\u9ea6\u8ba1\u7b97\u673a\u79d1\u5b66\u5bb6Bjarne Stroustrup\u535a\u58eb\u5728\u7f8e\u56fdAT&T\u8d1d\u5c14\u5b9e\u9a8c\u5ba4\u5f00\u59cb\u4e86\u4ece\u4e8b\u5c06C\u6539\u826f\u4e3a\u5e26\u7c7b\u7684C\uff08C with classes\uff09\u7684\u5de5\u4f5c\u30021983\u5e74\u8be5\u8bed\u8a00\u88ab\u6b63\u5f0f\u547d\u540d\u4e3aC++\uff0c\u5b83\u7684\u547d\u540d\u6765\u6e90\u4e8eC\u8bed\u8a00\u4e2d\u7684\u201c++\u201d\u8fd0\u7b97\u7b26\uff0c\u8fd9\u662f\u4e00\u79cd\u5e38\u89c1\u7684\u547d\u540d\u7ea6\u5b9a\uff0c\u5374\u5145\u5206\u5c55\u793a\u4e86\u5176\u4eceC\u8bed\u8a00\u6539\u8fdb\u7684\u5386\u53f2\uff0c\u66f4\u5f70\u663e\u4e86\u4e00\u79cd\u66f4\u52a0\u5f3a\u5927\u7684\u8ba1\u7b97\u673a\u7f16\u7a0b\u8bed\u8a00\u3002\r\n![](/attachments/download/169261)\r\n\r\nStroustrup\u535a\u58eb\u521b\u9020C++\u7684\u52a8\u673a\u4e3b\u8981\u6765\u6e90\u4e8e\u4ed6\u5728\u535a\u58eb\u671f\u95f4\u7684\u7f16\u7a0b\u7ecf\u9a8c\uff0c\u5c3d\u7ba1\u4ed6\u4f7f\u7528\u8fc7Simula\u548cALGOL\uff0c\u4e5f\u63a5\u89e6\u8fc7C\uff0c\u4f46\u4ed6\u7684\u521d\u8877\u662f\u9700\u8981\u4e00\u95e8\u7f16\u7a0b\u7b80\u5355\u3001\u6b63\u786e\u53ef\u9760\u3001\u9ad8\u6548\u8fd0\u884c\u4e14\u53ef\u79fb\u690d\u7684\u8bed\u8a00\uff0c\u56e0\u6b64\uff0c\u901a\u7528\u6027\u5f3a\u3001\u5feb\u901f\u3001\u4fbf\u643a\u4e14\u5e7f\u6cdb\u4f7f\u7528\u7684C\u8bed\u8a00\u88ab\u9009\u4e2d\u3002 \r\n\r\n####C++\u8bed\u8a00\u7279\u6027\r\n* \u652f\u6301\u6570\u636e\u5c01\u88c5\u548c\u6570\u636e\u9690\u85cf\r\nC++\u4e2d\uff0c\u7c7b\u662f\u652f\u6301\u6570\u636e\u5c01\u88c5\u7684\u5de5\u5177\uff0c\u5bf9\u8c61\u5219\u662f\u6570\u636e\u5c01\u88c5\u7684\u5b9e\u73b0\u3002C++\u901a\u8fc7\u65b0\u5efa\u7528\u6237\u5b9a\u4e49\u7c7b\u6765\u652f\u6301\u6570\u636e\u5c01\u88c5\u548c\u6570\u636e\u9690\u85cf\u3002\r\n\r\n* \u652f\u6301\u7ee7\u627f\u548c\u91cd\u7528\r\nC++\u7ee7\u627f\u548c\u91cd\u7528\u7684\u601d\u60f3\u662f\u5728\u73b0\u6709\u7c7b\u7684\u57fa\u7840\u4e0a\u58f0\u660e\u65b0\u7c7b\u578b\u3002\u901a\u8fc7\u7ee7\u627f\u548c\u91cd\u7528\u53ef\u4ee5\u66f4\u6709\u6548\u5730\u7ec4\u7ec7\u7a0b\u5e8f\u7ed3\u6784\uff0c\u660e\u786e\u7c7b\u95f4\u5173\u7cfb\uff0c\u5e76\u5145\u5206\u5229\u7528\u5df2\u6709\u7c7b\u6765\u5b8c\u6210\u66f4\u590d\u6742\u3001\u6df1\u5165\u7684\u5f00\u53d1\u3002\r\n\r\n* \u652f\u6301\u591a\u6001\u6027\r\nC++\u7684\u591a\u6001\u6027\u4e3a\u6bcf\u4e2a\u7c7b\u6307\u5b9a\u4e86\u8868\u73b0\u884c\u4e3a\uff0c\u4f7f\u5f97\u4e00\u4e2a\u5bf9\u8c61\u53ef\u4ee5\u6709\u72ec\u7279\u7684\u8868\u73b0\u65b9\u5f0f\uff0c\u800c\u53e6\u4e00\u4e2a\u5bf9\u8c61\u6709\u53e6\u4e00\u79cd\u8868\u73b0\u65b9\u5f0f\u3002\r\n\r\n####C++\u77e5\u8bc6\u70b9\u9884\u89c8\r\n\u4f5c\u4e3a\u4e00\u95e8\u6bd4C\u66f4\u5f3a\u5927\u7684\u901a\u7528\u7f16\u7a0b\u8bed\u8a00\uff0cC++\u6db5\u76d6\u4e86\u66f4\u4e3a\u4e30\u5bcc\u7684\u77e5\u8bc6\u70b9\uff0c\u5982\uff1a\u57fa\u672c\u6982\u5ff5\uff0c\u8f93\u5165\u548c\u8f93\u51fa\uff0c\u63a7\u5236\u8bed\u53e5\uff0c\u6570\u7ec4\uff0c\u51fd\u6570\uff0c\u6307\u9488\uff0c\u7ed3\u6784\u3001\u8054\u5408\u548c\u679a\u4e3e\uff0c\u94fe\u8868\uff0c\u7c7b\u548c\u5bf9\u8c61\uff0c\u7c7b\u548c\u5bf9\u8c61\u7684\u4f7f\u7528\uff0c\u8fd0\u7b97\u7b26\u91cd\u8f7d\uff0c\u7ee7\u627f\uff0c\u591a\u6001\uff0c\u5f02\u5e38\uff0c\u6a21\u677f\u7b49\u3002\u5177\u4f53\u5982\u4e0b\uff1a\r\n\r\n* \u57fa\u672c\u6982\u5ff5\uff1a\u5b57\u7b26\u96c6\u548c\u5173\u952e\u5b57\u3001\u57fa\u672c\u6570\u636e\u7c7b\u578b\u3001\u5e38\u91cf\u4e0e\u53d8\u91cf\u3001\u7c7b\u578b\u8f6c\u6362\u3001\u8fd0\u7b97\u7b26\u4e0e\u8868\u8fbe\u5f0f\u3002\r\n\r\n* \u8f93\u5165\u548c\u8f93\u51fa\uff1a\u6807\u51c6\u8f93\u5165\u8f93\u51fa\u51fd\u6570\u3001\u683c\u5f0f\u5316\u8f93\u5165\u8f93\u51fa\u51fd\u6570\u3001\u7528\u6d41\u8fdb\u884c\u8f93\u5165/\u8f93\u51fa\u3001\u6d41\u64cd\u7eb5\u7b97\u5b50\u3002\r\n\r\n* \u63a7\u5236\u8bed\u53e5\uff1a\u9009\u62e9\u8bed\u53e5\uff08`if\u3001if-else\u3001switch`\uff09\u3001\u5faa\u73af\u8bed\u53e5\uff08`for\u3001while\u3001do-while`\uff09\u3001\u8df3\u8f6c\u8bed\u53e5\uff08`break\u3001continue\u3001goto`\uff09\u3002\r\n\r\n* \u6570\u7ec4\uff1a\u4e00\u7ef4\u6570\u7ec4\u3001\u4e8c\u7ef4\u6570\u7ec4\u3001\u591a\u7ef4\u6570\u7ec4\u3001\u5b57\u7b26\u4e32\u3002\r\n\r\n* \u51fd\u6570\uff1a\u9884\u5b9a\u4e49\u51fd\u6570\u3001\u51fd\u6570\u7684\u5b9a\u4e49\u548c\u8c03\u7528\u3001\u51fd\u6570\u91cd\u8f7d\u3001\u5b58\u50a8\u7c7b\u522b\u3001\u4f5c\u7528\u57df\u3001\u9012\u5f52\u51fd\u6570\u3001\u9884\u5904\u7406\u6307\u4ee4\u3002\r\n\r\n* \u6307\u9488\uff1a\u6307\u9488\u7684\u5b9a\u4e49\u3001\u6307\u9488\u7684\u8fd0\u7b97\u3001\u6307\u9488\u4e0e\u6570\u7ec4\u3001\u5b57\u7b26\u6307\u9488\u4e0e\u5b57\u7b26\u6570\u7ec4\u3001\u6307\u9488\u4e0e`const`\u9650\u5b9a\u7b26\u3001\u6307\u9488\u4e0e\u5f15\u7528\u3001\u52a8\u6001\u5185\u5b58\u5206\u914d\u3001\u51fd\u6570\u6307\u9488\u3002\r\n\r\n* \u7ed3\u6784\u3001\u8054\u5408\u548c\u679a\u4e3e\uff1a\u7ed3\u6784\u7684\u5b9a\u4e49\u3001\u7ed3\u6784\u4e0e\u51fd\u6570\u3001\u7ed3\u6784\u4e0e\u6570\u7ec4\u3001\u7ed3\u6784\u4e0e\u6307\u9488\u3001\u8054\u5408\u7684\u5b9a\u4e49\u548c\u4f7f\u7528\u3001\u679a\u4e3e\u548c\u679a\u4e3e\u578b\u53d8\u91cf\u7684\u5b9a\u4e49\u3002\r\n\r\n* \u94fe\u8868\uff1a\u5355\u9879\u94fe\u8868\u3001\u53cc\u5411\u94fe\u8868\u3002\r\n\r\n* \u7c7b\u548c\u5bf9\u8c61\uff1a\u7c7b\u548c\u5bf9\u8c61\u7684\u5b9a\u4e49\u3001\u6784\u9020\u51fd\u6570\u3001\u6790\u6784\u51fd\u6570\u3002\r\n\r\n* \u7c7b\u548c\u5bf9\u8c61\u7684\u4f7f\u7528\uff1a\u7c7b\u7684\u590d\u5408\u3001`this`\u6307\u9488\u3001`const`\u7279\u6027\u3001\u53cb\u5143\u51fd\u6570\u548c\u53cb\u5143\u7c7b\u3002\r\n\r\n* \u8fd0\u7b97\u7b26\u91cd\u8f7d\uff1a\u8fd0\u7b97\u7b26\u91cd\u8f7d\u7684\u6982\u5ff5\u3001\u8fd0\u7b97\u7b26\u6210\u5458\u51fd\u6570\u4e0e\u53cb\u5143\u51fd\u6570\u3001\u5355\u76ee\u8fd0\u7b97\u7b26\u91cd\u8f7d\u3001\u91cd\u8f7d\u6d41\u63d2\u5165\u548c\u6d41\u63d0\u53d6\u8fd0\u7b97\u7b26\u3001\u53cc\u76ee\u8fd0\u7b97\u7b26\u91cd\u8f7d\u3001\u8d4b\u503c\u8fd0\u7b97\u7b26\u91cd\u8f7d\u3001\u7c7b\u578b\u4e4b\u95f4\u7684\u8f6c\u6362\u3002\r\n\r\n* \u7ee7\u627f\uff1a\u7ee7\u627f\u7684\u5b9a\u4e49\u3001\u7c7b\u6307\u9488\u3001\u591a\u91cd\u7ee7\u627f\u3002\r\n\r\n* \u591a\u6001\uff1a\u865a\u51fd\u6570\u3001\u62bd\u8c61\u57fa\u7c7b\u548c\u7eaf\u865a\u51fd\u6570\u3001\u865a\u6790\u6784\u51fd\u6570\u3002\r\n\r\n* \u5f02\u5e38\uff1a\u5f02\u5e38\u7684\u629b\u51fa\u548c\u4f20\u64ad\u3001\u5f02\u5e38\u7684\u6355\u83b7\u548c\u5904\u7406\u3002\r\n\r\n* \u6a21\u677f\uff1a\u51fd\u6570\u6a21\u677f\u3001\u7c7b\u6a21\u677f\u3002\r\n\r\n####C++\u4e0e\u5176\u4ed6\u7f16\u7a0b\u8bed\u8a00\u7684\u5bf9\u6bd4\r\nC++\u8bed\u8a00\u4e0e\u5176\u4ed6\u4e3b\u6d41\u7f16\u7a0b\u8bed\u8a00\u7684\u5bf9\u6bd4\u5982\u4e0b\uff1a\r\n![](/attachments/download/169262)\r\n\r\n![](/attachments/download/169266)\r\n\u5f53\u7136\uff0c\u4e0a\u8ff0\u56fe\u8868\u5217\u51fa\u7684\u7f16\u7a0b\u8bed\u8a00\u4e00\u76f4\u5904\u4e8e\u53d1\u5c55\u548c\u53d8\u5316\u4e2d\uff0c\u5176\u4e2d\u7684\u5bf9\u6bd4\u4ec5\u4f9b\u53c2\u8003\u3002\u6211\u4eec\u5728\u9009\u62e9\u4e00\u79cd\u5f00\u53d1\u8bed\u8a00\u65f6\uff0c\u4e0d\u4ec5\u8981\u8003\u8651\u8bed\u8a00\u672c\u8eab\u7684\u7279\u6027\uff0c\u5f88\u591a\u65f6\u5019\u8fd8\u9700\u8981\u8003\u8651\u5f00\u53d1\u56e2\u961f\u7684\u7279\u70b9\uff0c\u5df2\u6709\u8f6f\u4ef6\u8d44\u4ea7\u7684\u7f16\u7a0b\u8bed\u8a00\u548c\u67b6\u6784\uff0c\u5f53\u5730\u7a0b\u5e8f\u5458\u4eba\u624d\u7684\u5206\u5e03\u7279\u70b9\u7b49\u5404\u79cd\u56e0\u7d20\u3002\r\n\r\n####\u53c2\u8003\u6587\u732e\r\n* \u738b\u633a\u3001\u5468\u4f1a\u5e73\u3001\u8d3e\u4e3d\u4e3d\u3001\u5f90\u9521\u5c71\u8457\uff0cC++\u7a0b\u5e8f\u8bbe\u8ba1\uff08\u7b2c3\u7248\uff09\uff0c\u6e05\u534e\u5927\u5b66\u51fa\u7248\u793e\uff0c2015\u5e742\u6708\u7b2c3\u7248\r\n* \u8c2d\u6d69\u5f3a\u8457\uff0cC++\u9762\u5411\u5bf9\u8c61\u7a0b\u5e8f\u8bbe\u8ba1\uff08\u7b2c2\u7248\uff09\uff0c\u6e05\u534e\u5927\u5b66\u51fa\u7248\u793e\uff0c2014\u5e747\u6708\u7b2c2\u7248\r\n* Wikipeida, C++, https://en.wikipedia.org/wiki/C%2B%2B\r\n* \u767e\u5ea6\u767e\u79d1, C++, http://baike.baidu.com/item/C++","status":2,"identifier":"nf9ja46l","test_set_permission":true,"hide_code":false,"forbid_copy":false,"hidden":false,"webssh":0,"user_id":6,"code_hidden":false,"task_pass":false,"exec_time":40,"multi_webssh":false,"vnc":false},"record":null,"grade":50,"prev_game":"25razqibyps6","next_game":"p9ea4h8zx7fg","username":"\u77f3\u5934","image_url":"avatars/User/b","user_url":"/users/shitou","praise_count":0,"user_praise":false,"time_limit":40,"tomcat_url":"http://10.9.63.225","is_teacher":false,"power":1,"myshixun_manager":true,"vnc":false} + // // response.data. + // this._handleResponseData(response.data) + // return; + + axios.get(url, { withCredentials: true, }) .then((response) => { + console.log(response); // {"status":1,"message":"Unauthorized. \u7528\u6237\u8ba4\u8bc1\u5931\u8d25."} if (response.data.status == -1) { diff --git a/public/react/src/modules/page/MainContentContainer.js b/public/react/src/modules/page/MainContentContainer.js index b7fcdfa8..c7829ac9 100644 --- a/public/react/src/modules/page/MainContentContainer.js +++ b/public/react/src/modules/page/MainContentContainer.js @@ -267,6 +267,14 @@ class MainContentContainer extends Component { // this._cancel = null; } const that = this; + + // test + // const _code = '"#include\n\n// \u6c42n\u7684\u7b97\u672f\u5e73\u65b9\u6839\ndouble SquareRoot(float n)\n{\n // \u8bf7\u5728\u6b64\u6dfb\u52a0\u4ee3\u7801\uff0c\u8865\u5168\u51fd\u6570SquareRoot\n /********** Begin *********/\n\n\n /********** End **********/\n}"' + // this.oldRepositoryCode = _code; + // this.updateRepositoryCode(_code, updateCodeMirror) + // return + + this.setState({ gameBuilding: false, codeLoading: true }); axios.get(fetchRepoCodeUrl, { withCredentials: true, diff --git a/public/react/src/modules/page/main/CodeRepositoryView.js b/public/react/src/modules/page/main/CodeRepositoryView.js index d66b5162..7b9fa48d 100644 --- a/public/react/src/modules/page/main/CodeRepositoryView.js +++ b/public/react/src/modules/page/main/CodeRepositoryView.js @@ -296,7 +296,7 @@ class CodeRepositoryView extends Component { const { repositoryCode, onRepositoryCodeUpdate, showFilesDrawer, drawerOpen, loadingFirstRepoFiles , challenge, evaluateViewExpanded, onRepositoryViewExpand, codeStatus , showResetCodeDialog, showResetPassedCodeDialog, tabIndex, tabIndexChange, game, shixun, isEditablePath, currentPath - , showSettingDrawer, hide_code } = this.props; + , showSettingDrawer, hide_code, myshixun_manager } = this.props; // onRequestChange={(drawerOpen) => showFilesDrawer(drawerOpen)} /* @@ -402,11 +402,20 @@ class CodeRepositoryView extends Component { } + + { !shixun.code_hidden && tabIndex === 0 && } + + {/* onClick={showFilesDrawer.bind(this, true)} */} + { myshixun_manager == true && + + + + } From 456fb54d6e0af5ce19370e3f471e790023ddddf1 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Thu, 30 May 2019 11:22:15 +0800 Subject: [PATCH 32/50] pull --- app/controllers/myshixuns_controller.rb | 4 ++++ app/services/games_service.rb | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb index 802bb8b9..96f45d3a 100644 --- a/app/controllers/myshixuns_controller.rb +++ b/app/controllers/myshixuns_controller.rb @@ -10,6 +10,10 @@ class MyshixunsController < ApplicationController include ApplicationHelper + def archive + + end + def forbidden render_403 return diff --git a/app/services/games_service.rb b/app/services/games_service.rb index a53ee086..af1ce935 100644 --- a/app/services/games_service.rb +++ b/app/services/games_service.rb @@ -77,6 +77,23 @@ class GamesService :image_url => image_url, :user_url => user_url, :praise_count => praise_count, :user_praise => user_praise, :time_limit => time_limit, :tomcat_url => Redmine::Configuration['tomcat_php'], :is_teacher => is_teacher, :power => power, :myshixun_manager => myshixun_manager, :vnc => shixun.vnc} + if shixun.vnc + begin + shixun_tomcat = Redmine::Configuration['shixun_tomcat'] + service_host = Redmine::Configuration['tomcat_php'] + uri = "#{shixun_tomcat}/bridge/vnc/getvnc" + params = {tpiID: myshixun.id, :containers => "#{Base64.urlsafe_encode64(container_limit(shixun.mirror_repositories))}"} + res = uri_exec uri, params + if res && res['code'].to_i != 0 + raise("实训云平台繁忙(繁忙等级:99)") + end + url = service_host +":#{res['port']}/vnc.html" + rescue Exception => e + logger.error(e.message) + end + container = container.merge(:vnc_url => url) + end + # 区分选择题和编程题,st:0编程题; if st == 0 From ee6a57be5de70b33fa0a0f9406b2a081a263971b Mon Sep 17 00:00:00 2001 From: jingquan huang Date: Thu, 30 May 2019 11:24:44 +0800 Subject: [PATCH 33/50] vnc --- app/services/games_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/games_service.rb b/app/services/games_service.rb index af1ce935..0b04ffbf 100644 --- a/app/services/games_service.rb +++ b/app/services/games_service.rb @@ -89,7 +89,7 @@ class GamesService end url = service_host +":#{res['port']}/vnc.html" rescue Exception => e - logger.error(e.message) + Rails.logger.error(e.message) end container = container.merge(:vnc_url => url) end From 3d49a48107c1e31a4afcfdf6181199906a0f259a Mon Sep 17 00:00:00 2001 From: jingquan huang Date: Thu, 30 May 2019 11:39:40 +0800 Subject: [PATCH 34/50] =?UTF-8?q?vnc=E5=85=8D=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/games_service.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/services/games_service.rb b/app/services/games_service.rb index 0b04ffbf..b65cb7e7 100644 --- a/app/services/games_service.rb +++ b/app/services/games_service.rb @@ -45,7 +45,7 @@ class GamesService # 高性能取上一关、下一关 prev_game = Game.prev_identifier(shixun.id, game.myshixun_id, game_challenge.position) - next_game = if current_user.is_certification_teacher || shixun_manager(shixun, current_user) || game.status || shixun.task_pass + next_game = if shixun.vnc || current_user.is_certification_teacher || shixun_manager(shixun, current_user) || game.status || shixun.task_pass Game.next_game(shixun.id, game.myshixun_id, game_challenge.position).try(:identifier) end @@ -87,11 +87,12 @@ class GamesService if res && res['code'].to_i != 0 raise("实训云平台繁忙(繁忙等级:99)") end - url = service_host +":#{res['port']}/vnc.html" + url = service_host +":#{res['port']}/vnc_lite.html" + container = container.merge(:vnc_url => url, :test => "666") rescue Exception => e Rails.logger.error(e.message) end - container = container.merge(:vnc_url => url) + end From 0f20c7562d2a8c5fae04a61b20e922eaeb17aa8d Mon Sep 17 00:00:00 2001 From: jingquan huang Date: Thu, 30 May 2019 12:15:57 +0800 Subject: [PATCH 35/50] add logger --- app/services/games_service.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/services/games_service.rb b/app/services/games_service.rb index b65cb7e7..630d0848 100644 --- a/app/services/games_service.rb +++ b/app/services/games_service.rb @@ -88,7 +88,9 @@ class GamesService raise("实训云平台繁忙(繁忙等级:99)") end url = service_host +":#{res['port']}/vnc_lite.html" + Rails.logger.info("66666666sssssss#{url}") container = container.merge(:vnc_url => url, :test => "666") + Rails.logger.info("777777666sssssss#{container}") rescue Exception => e Rails.logger.error(e.message) end From 1754579a93e433e508ce3b6a5147d16bc2f3e5ad Mon Sep 17 00:00:00 2001 From: jingquan huang Date: Thu, 30 May 2019 14:19:03 +0800 Subject: [PATCH 36/50] =?UTF-8?q?=E6=8F=90=E4=BE=9Bzip=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/myshixun.rb | 3 ++- app/services/games_service.rb | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/models/myshixun.rb b/app/models/myshixun.rb index 774caad9..b5e9df62 100644 --- a/app/models/myshixun.rb +++ b/app/models/myshixun.rb @@ -15,7 +15,8 @@ class Myshixun < ActiveRecord::Base belongs_to :user validates_uniqueness_of :shixun_id, :scope => :user_id, :message => "error" # validates :shixun_id, :uniqueness => {:scope => :user_id, :message => "不能被重复开启"} - scope :min, lambda { select([:id, :shixun_id, :identifier, :gpid, :status, :user_id, :commit_id, :modify_time, :reset_time, :system_tip]) } + scope :min, lambda { select([:id, :shixun_id, :identifier, :gpid, :status, :user_id, :commit_id, :modify_time, :reset_time, + :system_tip, :gpid]) } scope :finished, lambda{where(status: 1)} def output_times diff --git a/app/services/games_service.rb b/app/services/games_service.rb index 630d0848..f09e2dcf 100644 --- a/app/services/games_service.rb +++ b/app/services/games_service.rb @@ -89,14 +89,17 @@ class GamesService end url = service_host +":#{res['port']}/vnc_lite.html" Rails.logger.info("66666666sssssss#{url}") - container = container.merge(:vnc_url => url, :test => "666") + container = container.merge(:vnc_url => url) Rails.logger.info("777777666sssssss#{container}") rescue Exception => e Rails.logger.error(e.message) end - end + if myshixun_manager + zip_path = Gitlab.endpoint.to_s + "/projects/" + myshixun.gpid.to_s + "/repository/archive?&private_token=" + Gitlab.private_token.to_s + container = container.merge(:zip_path => zip_path) + end # 区分选择题和编程题,st:0编程题; if st == 0 From 6c46e2464728f123b8dcdc0e025d3132a631a974 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Thu, 30 May 2019 14:50:24 +0800 Subject: [PATCH 37/50] vnc zip_path --- public/react/public/js/js_min_all.js | 4 +++ .../react/src/context/TPIContextProvider.js | 6 ++-- public/react/src/modules/page/Index.js | 8 +++-- public/react/src/modules/page/MainContent.js | 31 ++++++++++--------- .../src/modules/page/MainContentContainer.js | 5 +++ .../modules/page/main/CodeRepositoryView.js | 2 +- 6 files changed, 35 insertions(+), 21 deletions(-) diff --git a/public/react/public/js/js_min_all.js b/public/react/public/js/js_min_all.js index 4e33b92c..390d774f 100644 --- a/public/react/public/js/js_min_all.js +++ b/public/react/public/js/js_min_all.js @@ -177,6 +177,7 @@ $(function(){ //var nCol = 0; lab.live('mousedown touchstart',function(){ $('#game_webssh').css('pointer-events', 'none') + $('#contentIframe').css('pointer-events', 'none') dragging = true; leftOffset = $(".labelN").offset().left; wrapWidth = $(".labelN").width(); @@ -186,6 +187,7 @@ $(function(){ cen.live('mousedown ',function(){ // 使得iframe不捕获事件 $('#game_webssh').css('pointer-events', 'none') + $('#contentIframe').css('pointer-events', 'none') flag = true; topOffset = $(".centerH").offset().top; wrapHeight = $(".centerH").height(); @@ -262,6 +264,8 @@ $(function(){ doc.live("mouseup touchend", function(e) { // 使得iframe可以继续捕获事件 $('#game_webssh').css('pointer-events', 'inherit') + $('#contentIframe').css('pointer-events', 'inherit') + flag = false; dragging = false; e.cancelBubble = true; diff --git a/public/react/src/context/TPIContextProvider.js b/public/react/src/context/TPIContextProvider.js index 1d60375e..c3ebfc63 100644 --- a/public/react/src/context/TPIContextProvider.js +++ b/public/react/src/context/TPIContextProvider.js @@ -418,10 +418,12 @@ pop_box_new(htmlvalue, 480, 182); currentGamePassed: false, // 切换game时重置passed字段 }) - // test + // // // test // const response = {} // response.data = {"tpm_modified":false,"tpm_cases_modified":false,"hide_code":false,"forbid_copy":false,"output_sets":{"test_sets":"{\"is_public\":1,\"result\":null,\"actual_output\":null,\"compile_success\":null,\"input\":\"9\",\"output\":\"3\\r\\n\"},{\"is_public\":1,\"result\":null,\"actual_output\":null,\"compile_success\":null,\"input\":\"110.25\",\"output\":\"10.5\\r\\n\"},{\"is_public\":0,\"result\":null,\"actual_output\":null,\"compile_success\":null,\"input\":\"-100\",\"output\":\"\\u65e0\\u7b97\\u672f\\u5e73\\u65b9\\u6839\\r\\n\"}","had_test_count":0,"test_sets_count":3,"had_passed_testsests_error_count":0},"latest_output":null,"mirror_name":["C/C++"],"multi_webssh":false,"has_answer":true,"st":0,"discusses_count":8,"game_count":3,"myshixun":{"id":140292,"shixun_id":49,"identifier":"ihprfcq2ta","gpid":156599,"status":0,"user_id":116,"commit_id":"5955e66e34b3b70913b4cb2f62ec5d84cdbe26c9","modify_time":"2017-10-13T15:14:34+08:00","reset_time":"2017-10-13T15:14:34+08:00","system_tip":false},"challenge":{"id":81,"subject":"\u6c42\u4e00\u4e2a\u6570\u7684\u7b97\u672f\u5e73\u65b9\u6839","position":2,"shixun_id":49,"st":0,"score":100,"path":"src/step2/SquareRoot.cpp","task_pass":"[TOC]\r\n\r\n---\r\n\r\n####\u4efb\u52a1\u63cf\u8ff0\r\n\u672c\u5173\u4efb\u52a1\u662f\u901a\u8fc7\u8c03\u7528`sqrt`\u51fd\u6570\u6765\u5b9a\u4e49\u4e00\u4e2a\u6c42\u7b97\u672f\u5e73\u65b9\u6839\u7684\u51fd\u6570\u5e76\u4ee5\u6b64\u6765\u8ba1\u7b97\u4e00\u4e2a\u6570\u7684\u7b97\u672f\u5e73\u65b9\u6839\u3002\r\n\r\n####\u76f8\u5173\u77e5\u8bc6\r\n\u5982\u679c\u4e00\u4e2a\u975e\u8d1f\u6570`x`\u7684\u5e73\u65b9\u7b49\u4e8e`a`\uff0c\u5373`$$x^2 = a$$`\uff0c`(a \u2265 0)`\uff0c\u90a3\u4e48\u8fd9\u4e2a\u975e\u8d1f\u6570`x`\u53eb\u505a`a`\u7684\u7b97\u672f\u5e73\u65b9\u6839\u3002`a`\u7684\u7b97\u672f\u5e73\u65b9\u6839\u8bb0\u4e3a`$$\\sqrt{a}$$`\uff0c\u8bfb\u4f5c`\u6839\u53f7a`\uff0c`a`\u53eb\u505a\u88ab\u5f00\u65b9\u6570\u3002\r\n\r\nC++\u4e2d\uff0c\u53ef\u4ee5\u8c03\u7528\u5e93\u51fd\u6570`sqrt()`\u6765\u6c42\u4e00\u4e2a\u6570\u7684\u7b97\u672f\u5e73\u65b9\u6839\u3002\r\n\r\n####\u7f16\u7a0b\u8981\u6c42\r\n\u672c\u5173\u7684\u7f16\u7a0b\u4efb\u52a1\u662f\u901a\u8fc7\u8c03\u7528`sqrt()`\u51fd\u6570\u6765\u8865\u5168`step2/SquareRoot.cpp`\u6587\u4ef6\u4e2d\u7684`SquareRoot(float n)`\u51fd\u6570\uff0c\u4ee5\u5b9e\u73b0\u8ba1\u7b97\u4e00\u4e2a\u6570\u7684\u7b97\u672f\u5e73\u65b9\u6839\u7684\u8981\u6c42\u3002\r\n\r\n\u6ce8\u610f\uff1a\r\n* \u5982\u679c\u8f93\u5165\u7684\u6570\u6ca1\u6709\u7b97\u6570\u5e73\u65b9\u6839\uff0c\u8fd4\u56de`-1`\u3002\r\n* \u5177\u4f53\u8bf7\u53c2\u89c1\u540e\u7eed\u6d4b\u8bd5\u6837\u4f8b\u3002\r\n\r\n\u672c\u5173\u6d89\u53ca\u7684\u4ee3\u7801\u6587\u4ef6`step2/SquareRoot.cpp`\u4e2d\u7684`SquareRoot`\u51fd\u6570\u7684\u4ee3\u7801\u6846\u67b6\u5982\u4e0b\uff1a\r\n\r\n```cpp\r\n#include \r\n\r\n// \u6c42n\u7684\u7b97\u672f\u5e73\u65b9\u6839\r\ndouble SquareRoot(float n)\r\n{\r\n // \u8bf7\u5728\u6b64\u6dfb\u52a0\u4ee3\u7801\uff0c\u8865\u5168\u51fd\u6570SquareRoot\r\n /********** Begin *********/\r\n\r\n\r\n /********** End **********/\r\n}\r\n```\r\n\r\n####\u6d4b\u8bd5\u8bf4\u660e\r\n\u672c\u5173\u7684\u6d4b\u8bd5\u6587\u4ef6\u662f`step2/SquareRootTest.cpp`\uff0c\u6d4b\u8bd5\u8fc7\u7a0b\u5982\u4e0b\uff1a\r\n1. \u5e73\u53f0\u7f16\u8bd1`step2/SquareRootTest.cpp`\uff0c\u7136\u540e\u94fe\u63a5\u76f8\u5173\u7a0b\u5e8f\u5e93\u5e76\u751f\u6210`SquareRootTest.exe`\uff1b\r\n2. \u5e73\u53f0\u8fd0\u884c`SquareRootTest.exe`\uff0c\u5e76\u4ee5\u6807\u51c6\u8f93\u5165\u65b9\u5f0f\u63d0\u4f9b\u6d4b\u8bd5\u8f93\u5165\uff1b\r\n3. \u5e73\u53f0\u83b7\u53d6`SquareRootTest.exe`\u7684\u8f93\u51fa\uff0c\u7136\u540e\u5c06\u5176\u4e0e\u9884\u671f\u8f93\u51fa\u5bf9\u6bd4\uff0c\u5982\u679c\u4e00\u81f4\u5219\u6d4b\u8bd5\u901a\u8fc7\uff1b\u5426\u5219\u6d4b\u8bd5\u5931\u8d25\u3002\r\n\r\n\u4ee5\u4e0b\u662f\u5e73\u53f0\u5bf9`step2/SquareRootTest.cpp`\u7684\u6837\u4f8b\u6d4b\u8bd5\u96c6\uff1a\r\n\r\n\u6d4b\u8bd5\u8f93\u5165\uff1a`9`\r\n\u9884\u671f\u8f93\u51fa\uff1a`3`\r\n\r\n\u6d4b\u8bd5\u8f93\u5165\uff1a`110.25`\r\n\u9884\u671f\u8f93\u51fa\uff1a`10.5`\r\n\r\n\u6d4b\u8bd5\u8f93\u5165\uff1a`-8`\r\n\u9884\u671f\u8f93\u51fa\uff1a`-1`\r\n\r\n\u5f00\u59cb\u4f60\u7684\u4efb\u52a1\u5427\uff0c\u795d\u4f60\u6210\u529f\uff01\r\n","modify_time":null,"web_route":null,"answer":null},"game":{"id":448025,"status":0,"myshixun_id":140292,"user_id":116,"final_score":0,"challenge_id":81,"identifier":"gih9uzwn8xfc","answer_open":0,"test_sets_view":false,"cost_time":0,"star":0,"modify_time":null,"open_time":"2019-05-30T11:00:19+08:00","updated_at":"2019-05-30T11:00:19+08:00"},"shixun":{"id":49,"name":"C++\u4e4b\u6574\u6570\u8ba1\u7b97\u57fa\u7840","gpid":2018,"modify_time":"2017-10-13T15:14:34+08:00","reset_time":"2017-10-13T15:14:34+08:00","language":"C++","propaedeutics":"####C++\u53d1\u5c55\u5386\u7a0b\r\nC++\u662f\u4e00\u79cd\u901a\u7528\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u5b83\u4e0d\u4f46\u62e5\u6709\u6570\u636e\u5c01\u88c5\u3001\u6570\u636e\u9690\u85cf\u3001\u7ee7\u627f\u3001\u91cd\u7528\u3001\u91cd\u8f7d\u4ee5\u53ca\u591a\u6001\u7b49\u7279\u6027\uff0c\u8fd8\u652f\u6301\u8fc7\u7a0b\u5316\u7a0b\u5e8f\u8bbe\u8ba1\u3001\u9762\u5411\u5bf9\u8c61\u7a0b\u5e8f\u8bbe\u8ba1\u3001\u6cdb\u578b\u7a0b\u5e8f\u8bbe\u8ba1\u7b49\u591a\u79cd\u7a0b\u5e8f\u8bbe\u8ba1\u98ce\u683c\uff0c\u540c\u65f6\u8fd8\u63d0\u4f9b\u4e86\u5e95\u5c42\u5185\u5b58\u64cd\u4f5c\u7684\u529f\u80fd\u3002\u5176\u8bbe\u8ba1\u4eae\u70b9\u5728\u4e8e\u4f7f\u7528\u6027\u80fd\uff0c\u6548\u7387\u548c\u7075\u6d3b\u6027\uff0c\u662f\u8fc4\u4eca\u4e3a\u6b62\u6700\u53d7\u5e7f\u5927\u7a0b\u5e8f\u5458\u6b22\u8fce\u7684\u7f16\u7a0b\u8bed\u8a00\u4e4b\u4e00\u3002\r\n\r\n1979\u5e74\uff0c\u4e39\u9ea6\u8ba1\u7b97\u673a\u79d1\u5b66\u5bb6Bjarne Stroustrup\u535a\u58eb\u5728\u7f8e\u56fdAT&T\u8d1d\u5c14\u5b9e\u9a8c\u5ba4\u5f00\u59cb\u4e86\u4ece\u4e8b\u5c06C\u6539\u826f\u4e3a\u5e26\u7c7b\u7684C\uff08C with classes\uff09\u7684\u5de5\u4f5c\u30021983\u5e74\u8be5\u8bed\u8a00\u88ab\u6b63\u5f0f\u547d\u540d\u4e3aC++\uff0c\u5b83\u7684\u547d\u540d\u6765\u6e90\u4e8eC\u8bed\u8a00\u4e2d\u7684\u201c++\u201d\u8fd0\u7b97\u7b26\uff0c\u8fd9\u662f\u4e00\u79cd\u5e38\u89c1\u7684\u547d\u540d\u7ea6\u5b9a\uff0c\u5374\u5145\u5206\u5c55\u793a\u4e86\u5176\u4eceC\u8bed\u8a00\u6539\u8fdb\u7684\u5386\u53f2\uff0c\u66f4\u5f70\u663e\u4e86\u4e00\u79cd\u66f4\u52a0\u5f3a\u5927\u7684\u8ba1\u7b97\u673a\u7f16\u7a0b\u8bed\u8a00\u3002\r\n![](/attachments/download/169261)\r\n\r\nStroustrup\u535a\u58eb\u521b\u9020C++\u7684\u52a8\u673a\u4e3b\u8981\u6765\u6e90\u4e8e\u4ed6\u5728\u535a\u58eb\u671f\u95f4\u7684\u7f16\u7a0b\u7ecf\u9a8c\uff0c\u5c3d\u7ba1\u4ed6\u4f7f\u7528\u8fc7Simula\u548cALGOL\uff0c\u4e5f\u63a5\u89e6\u8fc7C\uff0c\u4f46\u4ed6\u7684\u521d\u8877\u662f\u9700\u8981\u4e00\u95e8\u7f16\u7a0b\u7b80\u5355\u3001\u6b63\u786e\u53ef\u9760\u3001\u9ad8\u6548\u8fd0\u884c\u4e14\u53ef\u79fb\u690d\u7684\u8bed\u8a00\uff0c\u56e0\u6b64\uff0c\u901a\u7528\u6027\u5f3a\u3001\u5feb\u901f\u3001\u4fbf\u643a\u4e14\u5e7f\u6cdb\u4f7f\u7528\u7684C\u8bed\u8a00\u88ab\u9009\u4e2d\u3002 \r\n\r\n####C++\u8bed\u8a00\u7279\u6027\r\n* \u652f\u6301\u6570\u636e\u5c01\u88c5\u548c\u6570\u636e\u9690\u85cf\r\nC++\u4e2d\uff0c\u7c7b\u662f\u652f\u6301\u6570\u636e\u5c01\u88c5\u7684\u5de5\u5177\uff0c\u5bf9\u8c61\u5219\u662f\u6570\u636e\u5c01\u88c5\u7684\u5b9e\u73b0\u3002C++\u901a\u8fc7\u65b0\u5efa\u7528\u6237\u5b9a\u4e49\u7c7b\u6765\u652f\u6301\u6570\u636e\u5c01\u88c5\u548c\u6570\u636e\u9690\u85cf\u3002\r\n\r\n* \u652f\u6301\u7ee7\u627f\u548c\u91cd\u7528\r\nC++\u7ee7\u627f\u548c\u91cd\u7528\u7684\u601d\u60f3\u662f\u5728\u73b0\u6709\u7c7b\u7684\u57fa\u7840\u4e0a\u58f0\u660e\u65b0\u7c7b\u578b\u3002\u901a\u8fc7\u7ee7\u627f\u548c\u91cd\u7528\u53ef\u4ee5\u66f4\u6709\u6548\u5730\u7ec4\u7ec7\u7a0b\u5e8f\u7ed3\u6784\uff0c\u660e\u786e\u7c7b\u95f4\u5173\u7cfb\uff0c\u5e76\u5145\u5206\u5229\u7528\u5df2\u6709\u7c7b\u6765\u5b8c\u6210\u66f4\u590d\u6742\u3001\u6df1\u5165\u7684\u5f00\u53d1\u3002\r\n\r\n* \u652f\u6301\u591a\u6001\u6027\r\nC++\u7684\u591a\u6001\u6027\u4e3a\u6bcf\u4e2a\u7c7b\u6307\u5b9a\u4e86\u8868\u73b0\u884c\u4e3a\uff0c\u4f7f\u5f97\u4e00\u4e2a\u5bf9\u8c61\u53ef\u4ee5\u6709\u72ec\u7279\u7684\u8868\u73b0\u65b9\u5f0f\uff0c\u800c\u53e6\u4e00\u4e2a\u5bf9\u8c61\u6709\u53e6\u4e00\u79cd\u8868\u73b0\u65b9\u5f0f\u3002\r\n\r\n####C++\u77e5\u8bc6\u70b9\u9884\u89c8\r\n\u4f5c\u4e3a\u4e00\u95e8\u6bd4C\u66f4\u5f3a\u5927\u7684\u901a\u7528\u7f16\u7a0b\u8bed\u8a00\uff0cC++\u6db5\u76d6\u4e86\u66f4\u4e3a\u4e30\u5bcc\u7684\u77e5\u8bc6\u70b9\uff0c\u5982\uff1a\u57fa\u672c\u6982\u5ff5\uff0c\u8f93\u5165\u548c\u8f93\u51fa\uff0c\u63a7\u5236\u8bed\u53e5\uff0c\u6570\u7ec4\uff0c\u51fd\u6570\uff0c\u6307\u9488\uff0c\u7ed3\u6784\u3001\u8054\u5408\u548c\u679a\u4e3e\uff0c\u94fe\u8868\uff0c\u7c7b\u548c\u5bf9\u8c61\uff0c\u7c7b\u548c\u5bf9\u8c61\u7684\u4f7f\u7528\uff0c\u8fd0\u7b97\u7b26\u91cd\u8f7d\uff0c\u7ee7\u627f\uff0c\u591a\u6001\uff0c\u5f02\u5e38\uff0c\u6a21\u677f\u7b49\u3002\u5177\u4f53\u5982\u4e0b\uff1a\r\n\r\n* \u57fa\u672c\u6982\u5ff5\uff1a\u5b57\u7b26\u96c6\u548c\u5173\u952e\u5b57\u3001\u57fa\u672c\u6570\u636e\u7c7b\u578b\u3001\u5e38\u91cf\u4e0e\u53d8\u91cf\u3001\u7c7b\u578b\u8f6c\u6362\u3001\u8fd0\u7b97\u7b26\u4e0e\u8868\u8fbe\u5f0f\u3002\r\n\r\n* \u8f93\u5165\u548c\u8f93\u51fa\uff1a\u6807\u51c6\u8f93\u5165\u8f93\u51fa\u51fd\u6570\u3001\u683c\u5f0f\u5316\u8f93\u5165\u8f93\u51fa\u51fd\u6570\u3001\u7528\u6d41\u8fdb\u884c\u8f93\u5165/\u8f93\u51fa\u3001\u6d41\u64cd\u7eb5\u7b97\u5b50\u3002\r\n\r\n* \u63a7\u5236\u8bed\u53e5\uff1a\u9009\u62e9\u8bed\u53e5\uff08`if\u3001if-else\u3001switch`\uff09\u3001\u5faa\u73af\u8bed\u53e5\uff08`for\u3001while\u3001do-while`\uff09\u3001\u8df3\u8f6c\u8bed\u53e5\uff08`break\u3001continue\u3001goto`\uff09\u3002\r\n\r\n* \u6570\u7ec4\uff1a\u4e00\u7ef4\u6570\u7ec4\u3001\u4e8c\u7ef4\u6570\u7ec4\u3001\u591a\u7ef4\u6570\u7ec4\u3001\u5b57\u7b26\u4e32\u3002\r\n\r\n* \u51fd\u6570\uff1a\u9884\u5b9a\u4e49\u51fd\u6570\u3001\u51fd\u6570\u7684\u5b9a\u4e49\u548c\u8c03\u7528\u3001\u51fd\u6570\u91cd\u8f7d\u3001\u5b58\u50a8\u7c7b\u522b\u3001\u4f5c\u7528\u57df\u3001\u9012\u5f52\u51fd\u6570\u3001\u9884\u5904\u7406\u6307\u4ee4\u3002\r\n\r\n* \u6307\u9488\uff1a\u6307\u9488\u7684\u5b9a\u4e49\u3001\u6307\u9488\u7684\u8fd0\u7b97\u3001\u6307\u9488\u4e0e\u6570\u7ec4\u3001\u5b57\u7b26\u6307\u9488\u4e0e\u5b57\u7b26\u6570\u7ec4\u3001\u6307\u9488\u4e0e`const`\u9650\u5b9a\u7b26\u3001\u6307\u9488\u4e0e\u5f15\u7528\u3001\u52a8\u6001\u5185\u5b58\u5206\u914d\u3001\u51fd\u6570\u6307\u9488\u3002\r\n\r\n* \u7ed3\u6784\u3001\u8054\u5408\u548c\u679a\u4e3e\uff1a\u7ed3\u6784\u7684\u5b9a\u4e49\u3001\u7ed3\u6784\u4e0e\u51fd\u6570\u3001\u7ed3\u6784\u4e0e\u6570\u7ec4\u3001\u7ed3\u6784\u4e0e\u6307\u9488\u3001\u8054\u5408\u7684\u5b9a\u4e49\u548c\u4f7f\u7528\u3001\u679a\u4e3e\u548c\u679a\u4e3e\u578b\u53d8\u91cf\u7684\u5b9a\u4e49\u3002\r\n\r\n* \u94fe\u8868\uff1a\u5355\u9879\u94fe\u8868\u3001\u53cc\u5411\u94fe\u8868\u3002\r\n\r\n* \u7c7b\u548c\u5bf9\u8c61\uff1a\u7c7b\u548c\u5bf9\u8c61\u7684\u5b9a\u4e49\u3001\u6784\u9020\u51fd\u6570\u3001\u6790\u6784\u51fd\u6570\u3002\r\n\r\n* \u7c7b\u548c\u5bf9\u8c61\u7684\u4f7f\u7528\uff1a\u7c7b\u7684\u590d\u5408\u3001`this`\u6307\u9488\u3001`const`\u7279\u6027\u3001\u53cb\u5143\u51fd\u6570\u548c\u53cb\u5143\u7c7b\u3002\r\n\r\n* \u8fd0\u7b97\u7b26\u91cd\u8f7d\uff1a\u8fd0\u7b97\u7b26\u91cd\u8f7d\u7684\u6982\u5ff5\u3001\u8fd0\u7b97\u7b26\u6210\u5458\u51fd\u6570\u4e0e\u53cb\u5143\u51fd\u6570\u3001\u5355\u76ee\u8fd0\u7b97\u7b26\u91cd\u8f7d\u3001\u91cd\u8f7d\u6d41\u63d2\u5165\u548c\u6d41\u63d0\u53d6\u8fd0\u7b97\u7b26\u3001\u53cc\u76ee\u8fd0\u7b97\u7b26\u91cd\u8f7d\u3001\u8d4b\u503c\u8fd0\u7b97\u7b26\u91cd\u8f7d\u3001\u7c7b\u578b\u4e4b\u95f4\u7684\u8f6c\u6362\u3002\r\n\r\n* \u7ee7\u627f\uff1a\u7ee7\u627f\u7684\u5b9a\u4e49\u3001\u7c7b\u6307\u9488\u3001\u591a\u91cd\u7ee7\u627f\u3002\r\n\r\n* \u591a\u6001\uff1a\u865a\u51fd\u6570\u3001\u62bd\u8c61\u57fa\u7c7b\u548c\u7eaf\u865a\u51fd\u6570\u3001\u865a\u6790\u6784\u51fd\u6570\u3002\r\n\r\n* \u5f02\u5e38\uff1a\u5f02\u5e38\u7684\u629b\u51fa\u548c\u4f20\u64ad\u3001\u5f02\u5e38\u7684\u6355\u83b7\u548c\u5904\u7406\u3002\r\n\r\n* \u6a21\u677f\uff1a\u51fd\u6570\u6a21\u677f\u3001\u7c7b\u6a21\u677f\u3002\r\n\r\n####C++\u4e0e\u5176\u4ed6\u7f16\u7a0b\u8bed\u8a00\u7684\u5bf9\u6bd4\r\nC++\u8bed\u8a00\u4e0e\u5176\u4ed6\u4e3b\u6d41\u7f16\u7a0b\u8bed\u8a00\u7684\u5bf9\u6bd4\u5982\u4e0b\uff1a\r\n![](/attachments/download/169262)\r\n\r\n![](/attachments/download/169266)\r\n\u5f53\u7136\uff0c\u4e0a\u8ff0\u56fe\u8868\u5217\u51fa\u7684\u7f16\u7a0b\u8bed\u8a00\u4e00\u76f4\u5904\u4e8e\u53d1\u5c55\u548c\u53d8\u5316\u4e2d\uff0c\u5176\u4e2d\u7684\u5bf9\u6bd4\u4ec5\u4f9b\u53c2\u8003\u3002\u6211\u4eec\u5728\u9009\u62e9\u4e00\u79cd\u5f00\u53d1\u8bed\u8a00\u65f6\uff0c\u4e0d\u4ec5\u8981\u8003\u8651\u8bed\u8a00\u672c\u8eab\u7684\u7279\u6027\uff0c\u5f88\u591a\u65f6\u5019\u8fd8\u9700\u8981\u8003\u8651\u5f00\u53d1\u56e2\u961f\u7684\u7279\u70b9\uff0c\u5df2\u6709\u8f6f\u4ef6\u8d44\u4ea7\u7684\u7f16\u7a0b\u8bed\u8a00\u548c\u67b6\u6784\uff0c\u5f53\u5730\u7a0b\u5e8f\u5458\u4eba\u624d\u7684\u5206\u5e03\u7279\u70b9\u7b49\u5404\u79cd\u56e0\u7d20\u3002\r\n\r\n####\u53c2\u8003\u6587\u732e\r\n* \u738b\u633a\u3001\u5468\u4f1a\u5e73\u3001\u8d3e\u4e3d\u4e3d\u3001\u5f90\u9521\u5c71\u8457\uff0cC++\u7a0b\u5e8f\u8bbe\u8ba1\uff08\u7b2c3\u7248\uff09\uff0c\u6e05\u534e\u5927\u5b66\u51fa\u7248\u793e\uff0c2015\u5e742\u6708\u7b2c3\u7248\r\n* \u8c2d\u6d69\u5f3a\u8457\uff0cC++\u9762\u5411\u5bf9\u8c61\u7a0b\u5e8f\u8bbe\u8ba1\uff08\u7b2c2\u7248\uff09\uff0c\u6e05\u534e\u5927\u5b66\u51fa\u7248\u793e\uff0c2014\u5e747\u6708\u7b2c2\u7248\r\n* Wikipeida, C++, https://en.wikipedia.org/wiki/C%2B%2B\r\n* \u767e\u5ea6\u767e\u79d1, C++, http://baike.baidu.com/item/C++","status":2,"identifier":"nf9ja46l","test_set_permission":true,"hide_code":false,"forbid_copy":false,"hidden":false,"webssh":0,"user_id":6,"code_hidden":false,"task_pass":false,"exec_time":40,"multi_webssh":false,"vnc":false},"record":null,"grade":50,"prev_game":"25razqibyps6","next_game":"p9ea4h8zx7fg","username":"\u77f3\u5934","image_url":"avatars/User/b","user_url":"/users/shitou","praise_count":0,"user_praise":false,"time_limit":40,"tomcat_url":"http://10.9.63.225","is_teacher":false,"power":1,"myshixun_manager":true,"vnc":false} - // // response.data. + // response.data.shixun.vnc = true + // response.data.vnc_url = 'http://www.baidu.com' + // response.data.shixun.zip_path = 'asdfasdfasfd' // this._handleResponseData(response.data) // return; diff --git a/public/react/src/modules/page/Index.js b/public/react/src/modules/page/Index.js index 8653ecd9..4b7ddf73 100644 --- a/public/react/src/modules/page/Index.js +++ b/public/react/src/modules/page/Index.js @@ -181,9 +181,11 @@ class Index extends Component { challenge={context.challenge} myshixun={context.myshixun} shixun={context.shixun} + vnc_url={context.vnc_url} + loading={context.loading} - discusses_count={context.discusses_count} - hide_code={context.hide_code} + discusses_count={context.discusses_count} + hide_code={context.hide_code} readGameAnswer={context.readGameAnswer} @@ -197,7 +199,7 @@ class Index extends Component { time_limit={context.time_limit} - resetTestSetsExpandedArray={context.resetTestSetsExpandedArray} + resetTestSetsExpandedArray={context.resetTestSetsExpandedArray} onRunCodeTestFinish={context.onRunCodeTestFinish} onRunChooseTestFinish={context.onRunChooseTestFinish} testSetUnlock={context.testSetUnlock} diff --git a/public/react/src/modules/page/MainContent.js b/public/react/src/modules/page/MainContent.js index ee3fcdf9..4bbf9be5 100644 --- a/public/react/src/modules/page/MainContent.js +++ b/public/react/src/modules/page/MainContent.js @@ -17,17 +17,15 @@ import Button from 'material-ui/Button'; import './tpiPage.css'; import './tpiPageForMobile.css'; const $ = window.$; -const showIframeContent = window.location.search.indexOf('vnc=1') != -1; +// const showIframeContent = window.location.search.indexOf('vnc=1') != -1; class MainContent extends Component { componentDidMount() { // ios下图标位置有问题 - if (!showIframeContent) { - setTimeout(()=>{ - if (window.$('.b-label>.resize-helper').position().top < 100) { - window.$('.b-label>.resize-helper').css('top', '200px') - } - }, 4000) - } + setTimeout(()=>{ + if (window.$('.b-label>.resize-helper').position().top < 100) { + window.$('.b-label>.resize-helper').css('top', '200px') + } + }, 4000) $("body").css("padding-right","0px!important") } onResizeButtonClick = () => { @@ -35,7 +33,7 @@ class MainContent extends Component { } render() { const { challenge, output_sets, onRunCodeTest, latest_output, record, st, readRepoTimeout, - onTestSetHeaderClick, loading, codeLoading } = this.props + onTestSetHeaderClick, loading, codeLoading, shixun, vnc_url } = this.props // if (output_sets && output_sets.test_sets) { // const test_sets_array = JSON.parse("[" + output_sets.test_sets + "]"); @@ -48,6 +46,7 @@ class MainContent extends Component { } else { games_repository_contents_style = {overflow: 'hidden', height: '445px'} } + const showIframeContent = shixun && shixun.vnc == true return (
    @@ -68,19 +67,21 @@ class MainContent extends Component {
    {/* - iframe模式下需要这两个样式来调整 - .page--body { z-index: 9999; } - .resize-helper { top: 10px } + iframe模式下可以使用样式控制不接收鼠标事件 + + .page--body { z-index: ${showIframeContent ? '7999': '1'} ; } + .b-label>.resize-helper { top: ${showIframeContent ? '10px': '50%'} } + */} - { showIframeContent ? : + { showIframeContent ? : {/* 旧版本、评测等待提示--更新提示块*/} {/*
    diff --git a/public/react/src/modules/page/MainContentContainer.js b/public/react/src/modules/page/MainContentContainer.js index c7829ac9..bd73d7c0 100644 --- a/public/react/src/modules/page/MainContentContainer.js +++ b/public/react/src/modules/page/MainContentContainer.js @@ -229,6 +229,10 @@ class MainContentContainer extends Component { // arg_path 点击文件目录树时,传入的点击节点对应的path fetchRepositoryCode( props, arg_path, type, isRetry) { const { challenge, showSnackbar, game, shixun, hide_code } = props ? props : this.props; + if (shixun.vnc == true) { + // vnc模式下不需要加载代码 + return true; + } if (hide_code) { // 隐藏code的实训 this.setState({ codeLoading: false }); return; @@ -269,6 +273,7 @@ class MainContentContainer extends Component { const that = this; // test + // console.log('---- fetch code') // const _code = '"#include\n\n// \u6c42n\u7684\u7b97\u672f\u5e73\u65b9\u6839\ndouble SquareRoot(float n)\n{\n // \u8bf7\u5728\u6b64\u6dfb\u52a0\u4ee3\u7801\uff0c\u8865\u5168\u51fd\u6570SquareRoot\n /********** Begin *********/\n\n\n /********** End **********/\n}"' // this.oldRepositoryCode = _code; // this.updateRepositoryCode(_code, updateCodeMirror) diff --git a/public/react/src/modules/page/main/CodeRepositoryView.js b/public/react/src/modules/page/main/CodeRepositoryView.js index 7b9fa48d..738ebbd7 100644 --- a/public/react/src/modules/page/main/CodeRepositoryView.js +++ b/public/react/src/modules/page/main/CodeRepositoryView.js @@ -412,7 +412,7 @@ class CodeRepositoryView extends Component { {/* onClick={showFilesDrawer.bind(this, true)} */} { myshixun_manager == true && - + } From 89fcc164e4bcbd23d40b0731ac76bab33e14dea9 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Thu, 30 May 2019 14:56:39 +0800 Subject: [PATCH 38/50] b --- app/views/common/index.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/common/index.html.erb b/app/views/common/index.html.erb index df334ea8..e55ec9cd 100644 --- a/app/views/common/index.html.erb +++ b/app/views/common/index.html.erb @@ -1 +1 @@ -Educoder
    \ No newline at end of file +Educoder
    \ No newline at end of file From 867b6e2b72dc2e95ac6cdd6a7b1e5f74512b9a35 Mon Sep 17 00:00:00 2001 From: jingquan huang Date: Thu, 30 May 2019 15:04:19 +0800 Subject: [PATCH 39/50] =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E6=A2=B3=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/games_service.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/services/games_service.rb b/app/services/games_service.rb index f09e2dcf..a65388e2 100644 --- a/app/services/games_service.rb +++ b/app/services/games_service.rb @@ -75,8 +75,7 @@ class GamesService :challenge => game_challenge.try(:attributes), :game => game.try(:attributes), :shixun => shixun.try(:attributes), :record => record, :grade => grade, :prev_game => prev_game, :next_game => next_game, :username => username, :image_url => image_url, :user_url => user_url, :praise_count => praise_count, :user_praise => user_praise, :time_limit => time_limit, - :tomcat_url => Redmine::Configuration['tomcat_php'], :is_teacher => is_teacher, :power => power, :myshixun_manager => myshixun_manager, - :vnc => shixun.vnc} + :tomcat_url => Redmine::Configuration['tomcat_php'], :is_teacher => is_teacher, :power => power, :myshixun_manager => myshixun_manager} if shixun.vnc begin shixun_tomcat = Redmine::Configuration['shixun_tomcat'] From 73128415d7c1d37ead58c11659c4179acec00569 Mon Sep 17 00:00:00 2001 From: jingquan huang Date: Thu, 30 May 2019 15:21:55 +0800 Subject: [PATCH 40/50] =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/games_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/games_service.rb b/app/services/games_service.rb index a65388e2..937e4ecd 100644 --- a/app/services/games_service.rb +++ b/app/services/games_service.rb @@ -95,7 +95,7 @@ class GamesService end end - if myshixun_manager + if st == 0 && shixun.status == 2 && myshixun_manager zip_path = Gitlab.endpoint.to_s + "/projects/" + myshixun.gpid.to_s + "/repository/archive?&private_token=" + Gitlab.private_token.to_s container = container.merge(:zip_path => zip_path) end From 0d2310c8bb3a1d258962ac38f130dbfdc4ef4f79 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Thu, 30 May 2019 15:29:57 +0800 Subject: [PATCH 41/50] zip path --- public/react/src/modules/page/Index.js | 2 ++ public/react/src/modules/page/main/CodeRepositoryView.js | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/public/react/src/modules/page/Index.js b/public/react/src/modules/page/Index.js index 4b7ddf73..42f55df9 100644 --- a/public/react/src/modules/page/Index.js +++ b/public/react/src/modules/page/Index.js @@ -182,6 +182,8 @@ class Index extends Component { myshixun={context.myshixun} shixun={context.shixun} vnc_url={context.vnc_url} + zip_path={context.zip_path} + loading={context.loading} discusses_count={context.discusses_count} diff --git a/public/react/src/modules/page/main/CodeRepositoryView.js b/public/react/src/modules/page/main/CodeRepositoryView.js index 738ebbd7..5165bf67 100644 --- a/public/react/src/modules/page/main/CodeRepositoryView.js +++ b/public/react/src/modules/page/main/CodeRepositoryView.js @@ -296,7 +296,7 @@ class CodeRepositoryView extends Component { const { repositoryCode, onRepositoryCodeUpdate, showFilesDrawer, drawerOpen, loadingFirstRepoFiles , challenge, evaluateViewExpanded, onRepositoryViewExpand, codeStatus , showResetCodeDialog, showResetPassedCodeDialog, tabIndex, tabIndexChange, game, shixun, isEditablePath, currentPath - , showSettingDrawer, hide_code, myshixun_manager } = this.props; + , showSettingDrawer, hide_code, myshixun_manager, zip_path } = this.props; // onRequestChange={(drawerOpen) => showFilesDrawer(drawerOpen)} /* @@ -410,9 +410,9 @@ class CodeRepositoryView extends Component { } - {/* onClick={showFilesDrawer.bind(this, true)} */} + {/* onClick={showFilesDrawer.bind(this, true)} target='_blank'*/} { myshixun_manager == true && - + } From 3e8b1aa4d83fc19eff3ba68f1954aa87cecf570c Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Thu, 30 May 2019 15:37:06 +0800 Subject: [PATCH 42/50] b --- app/views/common/index.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/common/index.html.erb b/app/views/common/index.html.erb index e55ec9cd..ffdf7027 100644 --- a/app/views/common/index.html.erb +++ b/app/views/common/index.html.erb @@ -1 +1 @@ -Educoder
    \ No newline at end of file +Educoder
    \ No newline at end of file From f19cbcb1c632dc764de9e5b1f4c7ff9df7871077 Mon Sep 17 00:00:00 2001 From: p31729568 Date: Thu, 30 May 2019 15:49:38 +0800 Subject: [PATCH 43/50] scholl management add shixun count and shixun evaluate count --- .../managements/schools_controller.rb | 2 ++ app/services/games_service.rb | 4 +++- .../management/school_report_service.rb | 15 +++++++++++- .../schools/_contrast_search_form.html.erb | 2 +- .../schools/_statistics_list.html.erb | 4 ++++ .../managements/schools/statistics.html.erb | 2 ++ ...530055732_add_evaluate_count_to_shixuns.rb | 24 +++++++++++++++++++ 7 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20190530055732_add_evaluate_count_to_shixuns.rb diff --git a/app/controllers/managements/schools_controller.rb b/app/controllers/managements/schools_controller.rb index a5c789ff..4e9b41ed 100644 --- a/app/controllers/managements/schools_controller.rb +++ b/app/controllers/managements/schools_controller.rb @@ -78,5 +78,7 @@ class Managements::SchoolsController < Managements::BaseController @active_course_total = Course.where(is_end: false).count @shixun_homework_total = HomeworkCommon.where(homework_type: 4).count @other_homework_total = HomeworkCommon.where(homework_type: [1, 3]).count + @shixun_total = Shixun.count + @shixun_evaluate_total = Game.sum(:evaluate_count) end end diff --git a/app/services/games_service.rb b/app/services/games_service.rb index 937e4ecd..08f4516e 100644 --- a/app/services/games_service.rb +++ b/app/services/games_service.rb @@ -528,11 +528,12 @@ class GamesService # 三类实训只取基础部分数据 game = Game.select([:myshixun_id, :status, :challenge_id, :id, :evaluate_count]).find_by_identifier(params[:identifier]) myshixun = Myshixun.select([:updated_at, :gpid, :id, :shixun_id]).find(game.myshixun_id) - shixun = Shixun.select([:id, :evaluate_script, :webssh, :exec_time, :sigle_training, :identifier, :status]).find(myshixun.shixun_id) + shixun = Shixun.select([:id, :evaluate_script, :webssh, :exec_time, :sigle_training, :identifier, :status, :evaluate_count]).find(myshixun.shixun_id) game_challenge = Challenge.select([:id, :position, :picture_path]).find(game.challenge_id) # 更新评测次数 game.update_column(:evaluate_count, (game.evaluate_count.to_i + 1)) + shixun.increment!(:evaluate_count) # 清空代码评测信息 msg = game.run_code_message msg.update_attributes(:status => 0, :message => nil) if msg.present? @@ -693,6 +694,7 @@ class GamesService :evaluate_count]).find_by_identifier(params[:identifier]) # 更新评测次数 game.update_column(:evaluate_count, (game.evaluate_count.to_i + 1)) + game.challenge.shixun.increment!(:evaluate_count) # 选择题如果通关了,则不让再评测 if game.status == 2 diff --git a/app/services/management/school_report_service.rb b/app/services/management/school_report_service.rb index 2b18950d..b102c01a 100644 --- a/app/services/management/school_report_service.rb +++ b/app/services/management/school_report_service.rb @@ -4,7 +4,7 @@ class Management::SchoolReportService attr_reader :params sort_columns :student_count, :teacher_count, :homework_count, :other_homework_count, - :course_count, :active_course_count, :nearly_course_time, + :course_count, :active_course_count, :nearly_course_time, :shixun_count, :shixun_evaluate_count, default_by: :teacher_count, default_direction: :desc def initialize(params) @@ -47,6 +47,11 @@ class Management::SchoolReportService nearly_course_time_map = courses.joins(:course_activities).maximum('course_activities.updated_at') active_course_map = courses.where(is_end: false).count + shixun_map = Shixun.joins(creator: :user_extensions).where(user_extensions: { identity: User::TEACHER, school_id: ids }) + .group('school_id').count + evaluate_count_map = Shixun.joins(creator: :user_extensions).where(user_extensions: { identity: User::TEACHER, school_id: ids }) + .group('school_id').sum(:evaluate_count) + schools.map do |school| { id: school.id, @@ -58,6 +63,8 @@ class Management::SchoolReportService course_count: course_map[school.id], nearly_course_time: nearly_course_time_map[school.id], active_course_count: active_course_map[school.id], + shixun_count: shixun_map.fetch(school.id, 0), + shixun_evaluate_count: evaluate_count_map.fetch(school.id, 0) } end end @@ -78,6 +85,12 @@ class Management::SchoolReportService when 'course_count' then schools.joins('LEFT JOIN courses cs ON cs.school_id = schools.id AND cs.is_delete = 0') .select("#{base_query_column}, COUNT(*) course_count") + when 'shixun_count' then + schools.joins(teacher_extensions: :user).joins('INNER JOIN shixuns sx ON sx.user_id = users.id') + .select("#{base_query_column}, COUNT(*) shixun_count") + when 'shixun_evaluate_count' then + schools.joins(teacher_extensions: :user).joins('INNER JOIN shixuns sx ON sx.user_id = users.id') + .select("#{base_query_column}, SUM(sx.evaluate_count) shixun_evaluate_count") when 'nearly_course_time' then schools.joins('LEFT JOIN courses cs ON cs.school_id = schools.id AND cs.is_delete = 0') .joins('LEFT JOIN course_activities acs ON acs.course_id = cs.id') diff --git a/app/views/managements/schools/_contrast_search_form.html.erb b/app/views/managements/schools/_contrast_search_form.html.erb index 9597a9c7..b77f2dbb 100644 --- a/app/views/managements/schools/_contrast_search_form.html.erb +++ b/app/views/managements/schools/_contrast_search_form.html.erb @@ -12,7 +12,7 @@
    <%= text_field_tag :grow_date_input, params[:grow_date_input], - class: 'grow-date-input winput-220-30', placeholder: '请选择时间段', + class: 'grow-date-input winput-220-30', placeholder: '请选择时间段(具体从当日5:00开始计算)', style: 'width: 400px;' %>
    diff --git a/app/views/managements/schools/_statistics_list.html.erb b/app/views/managements/schools/_statistics_list.html.erb index 53c13ed8..0a0cb75d 100644 --- a/app/views/managements/schools/_statistics_list.html.erb +++ b/app/views/managements/schools/_statistics_list.html.erb @@ -9,6 +9,8 @@
    + + @@ -24,6 +26,8 @@ + + diff --git a/app/views/managements/schools/statistics.html.erb b/app/views/managements/schools/statistics.html.erb index 3aba8ab1..d4eff134 100644 --- a/app/views/managements/schools/statistics.html.erb +++ b/app/views/managements/schools/statistics.html.erb @@ -21,6 +21,8 @@ 学生总人数<%= @student_total %>人, 课堂总数<%= @course_total %>个, 正在进行课堂总数<%= @active_course_total %>个, + 创建实训数<%= @shixun_total %>个, + 评测次数<%= @shixun_evaluate_total %>个, 实训作业总数<%= @shixun_homework_total %>个, 其它作业总数<%= @other_homework_total %>个, diff --git a/db/migrate/20190530055732_add_evaluate_count_to_shixuns.rb b/db/migrate/20190530055732_add_evaluate_count_to_shixuns.rb new file mode 100644 index 00000000..9389afd0 --- /dev/null +++ b/db/migrate/20190530055732_add_evaluate_count_to_shixuns.rb @@ -0,0 +1,24 @@ +class AddEvaluateCountToShixuns < ActiveRecord::Migration + def up + add_column :shixuns, :evaluate_count, :integer, default: 0 + + limit = 100 + total = Shixun.count + + ((total / 100) + 1).times do |index| + shixun_ids = Shixun.order(:id).limit(limit).offset(index * limit).pluck(:id) + return if shixun_ids.blank? + + count_map = Game.joins(:challenge).where(challenges: { shixun_id: shixun_ids }).group('shixun_id').sum(:evaluate_count) + + id_str = count_map.keys.join(',') + str = count_map.map { |shixun_id, count| "WHEN #{shixun_id} THEN #{count}" }.join(' ') + + execute "UPDATE shixuns SET evaluate_count = CASE id #{str} END WHERE id IN (#{id_str})" + end + end + + def down + remove_column :shixuns, :evaluate_count + end +end From 21ec6028dc97dde5a393e478aaf189a2fdbff980 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Thu, 30 May 2019 15:59:09 +0800 Subject: [PATCH 44/50] zindex --- public/react/src/modules/page/MainContent.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/public/react/src/modules/page/MainContent.js b/public/react/src/modules/page/MainContent.js index 4bbf9be5..abe0f7cf 100644 --- a/public/react/src/modules/page/MainContent.js +++ b/public/react/src/modules/page/MainContent.js @@ -68,7 +68,7 @@ class MainContent extends Component { id="game_right_contents" style={{width: '996px'}}> {/* iframe模式下可以使用样式控制不接收鼠标事件 - + 注意 page--body 不能设置index 7999 弹出框的index才1300 .page--body { z-index: ${showIframeContent ? '7999': '1'} ; } .b-label>.resize-helper { top: ${showIframeContent ? '10px': '50%'} } @@ -78,8 +78,6 @@ class MainContent extends Component { height: 100%; background: #fff; } - .page--body { z-index: 9999; } - .resize-helper { top: 10px } `} { showIframeContent ? : From e26133f945bea9eba0c4b43f4c3c43205350db36 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Thu, 30 May 2019 16:18:52 +0800 Subject: [PATCH 45/50] b --- app/views/common/index.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/common/index.html.erb b/app/views/common/index.html.erb index ffdf7027..48dc96a1 100644 --- a/app/views/common/index.html.erb +++ b/app/views/common/index.html.erb @@ -1 +1 @@ -Educoder
    \ No newline at end of file +Educoder
    \ No newline at end of file From a112b47d21f63dcf4fc0f5e098e29debbdb180e7 Mon Sep 17 00:00:00 2001 From: jingquan huang Date: Thu, 30 May 2019 16:54:12 +0800 Subject: [PATCH 46/50] vnc --- app/services/games_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/games_service.rb b/app/services/games_service.rb index 937e4ecd..990b6bc0 100644 --- a/app/services/games_service.rb +++ b/app/services/games_service.rb @@ -86,7 +86,7 @@ class GamesService if res && res['code'].to_i != 0 raise("实训云平台繁忙(繁忙等级:99)") end - url = service_host +":#{res['port']}/vnc_lite.html" + url = service_host +":#{res['port']}/vnc_lite.html?password=headless" Rails.logger.info("66666666sssssss#{url}") container = container.merge(:vnc_url => url) Rails.logger.info("777777666sssssss#{container}") From c0cc11b79f729aa003b4b72a3cc31cb8cbc55281 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Thu, 30 May 2019 16:57:19 +0800 Subject: [PATCH 47/50] b --- public/react/public/js/js_min_all.js | 5 ++++- public/react/src/context/TPIContextProvider.js | 8 ++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/public/react/public/js/js_min_all.js b/public/react/public/js/js_min_all.js index 390d774f..0aa8e44a 100644 --- a/public/react/public/js/js_min_all.js +++ b/public/react/public/js/js_min_all.js @@ -153,7 +153,10 @@ var EXPAND = 0; // 放大 var SHRINK = 1; // 缩小 var repositoryTabHeight = 40 - +function _resizeTpiPanel = () { + $("#game_left_contents").width('400px'); + $("#game_right_contents").width( $(".labelN").width() - 400 + 'px'); +} $(function(){ function update_rows_and_cols(rows) { var _iframe = document.getElementById("game_webssh"); diff --git a/public/react/src/context/TPIContextProvider.js b/public/react/src/context/TPIContextProvider.js index c3ebfc63..9beea340 100644 --- a/public/react/src/context/TPIContextProvider.js +++ b/public/react/src/context/TPIContextProvider.js @@ -307,7 +307,7 @@ pop_box_new(htmlvalue, 480, 182); // 将若干数据重新组织一下 _handleResponseData(resData) { - + let challenge = resData.challenge; challenge.isHtml = false; challenge.isWeb = false; @@ -387,7 +387,11 @@ pop_box_new(htmlvalue, 480, 182); currentGamePassed: false, loading: false, testSetsExpandedArray: testSetsExpandedArrayInitVal.slice(0), - }) + }, () => { + if (resData.shixun.vnc == true) { + window._resizeTpiPanel() + } + }) window.document.title = resData.shixun.name From 956504846583679515c926f22c1ad82902187625 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Thu, 30 May 2019 17:01:36 +0800 Subject: [PATCH 48/50] b --- app/views/common/index.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/common/index.html.erb b/app/views/common/index.html.erb index 48dc96a1..35c63ca6 100644 --- a/app/views/common/index.html.erb +++ b/app/views/common/index.html.erb @@ -1 +1 @@ -Educoder
    \ No newline at end of file +Educoder
    \ No newline at end of file From f2bd8122a8f200f590f1027705dfd83605460181 Mon Sep 17 00:00:00 2001 From: jingquan huang Date: Thu, 30 May 2019 17:22:08 +0800 Subject: [PATCH 49/50] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E5=89=8D=E4=BC=9A?= =?UTF-8?q?=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...530055732_add_evaluate_count_to_shixuns.rb | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/db/migrate/20190530055732_add_evaluate_count_to_shixuns.rb b/db/migrate/20190530055732_add_evaluate_count_to_shixuns.rb index 9389afd0..7bd6dcd1 100644 --- a/db/migrate/20190530055732_add_evaluate_count_to_shixuns.rb +++ b/db/migrate/20190530055732_add_evaluate_count_to_shixuns.rb @@ -2,20 +2,20 @@ class AddEvaluateCountToShixuns < ActiveRecord::Migration def up add_column :shixuns, :evaluate_count, :integer, default: 0 - limit = 100 - total = Shixun.count - - ((total / 100) + 1).times do |index| - shixun_ids = Shixun.order(:id).limit(limit).offset(index * limit).pluck(:id) - return if shixun_ids.blank? - - count_map = Game.joins(:challenge).where(challenges: { shixun_id: shixun_ids }).group('shixun_id').sum(:evaluate_count) - - id_str = count_map.keys.join(',') - str = count_map.map { |shixun_id, count| "WHEN #{shixun_id} THEN #{count}" }.join(' ') - - execute "UPDATE shixuns SET evaluate_count = CASE id #{str} END WHERE id IN (#{id_str})" - end + # limit = 100 + # total = Shixun.count + # + # ((total / 100) + 1).times do |index| + # shixun_ids = Shixun.order(:id).limit(limit).offset(index * limit).pluck(:id) + # return if shixun_ids.blank? + # + # count_map = Game.joins(:challenge).where(challenges: { shixun_id: shixun_ids }).group('shixun_id').sum(:evaluate_count) + # + # id_str = count_map.keys.join(',') + # str = count_map.map { |shixun_id, count| "WHEN #{shixun_id} THEN #{count}" }.join(' ') + # + # execute "UPDATE shixuns SET evaluate_count = CASE id #{str} END WHERE id IN (#{id_str})" + # end end def down From b1155eca5c00655d112714a01ee7d8e75f8913d0 Mon Sep 17 00:00:00 2001 From: p31729568 Date: Thu, 30 May 2019 17:30:51 +0800 Subject: [PATCH 50/50] remove game service increment evaluate count code --- app/services/games_service.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/services/games_service.rb b/app/services/games_service.rb index ac79ff95..d293b0f2 100644 --- a/app/services/games_service.rb +++ b/app/services/games_service.rb @@ -533,7 +533,7 @@ class GamesService # 更新评测次数 game.update_column(:evaluate_count, (game.evaluate_count.to_i + 1)) - shixun.increment!(:evaluate_count) + # shixun.increment!(:evaluate_count) # 清空代码评测信息 msg = game.run_code_message msg.update_attributes(:status => 0, :message => nil) if msg.present? @@ -694,7 +694,7 @@ class GamesService :evaluate_count]).find_by_identifier(params[:identifier]) # 更新评测次数 game.update_column(:evaluate_count, (game.evaluate_count.to_i + 1)) - game.challenge.shixun.increment!(:evaluate_count) + # game.challenge.shixun.increment!(:evaluate_count) # 选择题如果通关了,则不让再评测 if game.status == 2
    <%= sort_tag('新增教师', name: 'teacher_increase_count', path: school_data_grow_managements_path) %> <%= sort_tag('新增学生', name: 'student_increase_count', path: school_data_grow_managements_path) %> <%= sort_tag('新增课堂', name: 'course_increase_count', path: school_data_grow_managements_path) %><%= sort_tag('新增实训', name: 'shixun_increase_count', path: school_data_grow_managements_path) %><%= sort_tag('新增实训作业', name: 'shixun_increase_count', path: school_data_grow_managements_path) %> <%= sort_tag('活跃用户', name: 'active_user_count', path: school_data_grow_managements_path) %>
    <%= sort_tag('学生总人数', name: 'student_count', path: school_report_managements_path) %> <%= sort_tag('课堂总数', name: 'course_count', path: school_report_managements_path) %> <%= sort_tag('正在进行课堂数', name: 'active_course_count', path: school_report_managements_path) %><%= sort_tag('创建实训数', name: 'shixun_count', path: school_report_managements_path) %><%= sort_tag('评测次数', name: 'shixun_evaluate_count', path: school_report_managements_path) %> <%= sort_tag('实训作业总数', name: 'homework_count', path: school_report_managements_path) %> <%= sort_tag('其它作业总数', name: 'other_homework_count', path: school_report_managements_path) %> <%= sort_tag('动态时间', name: 'nearly_course_time', path: school_report_managements_path) %><%= school[:student_count].to_i %> <%= school[:course_count].to_i %> <%= school[:active_course_count].to_i %><%= school[:shixun_count].to_i %><%= school[:shixun_evaluate_count].to_i %> <%= school[:homework_count].to_i %> <%= school[:other_homework_count].to_i %> <%= format_time school[:nearly_course_time] %>