From cd717f1e1a3d191a9419ba595c84f6bfd8ae78fc Mon Sep 17 00:00:00 2001 From: p31729568 Date: Wed, 21 Aug 2019 15:07:14 +0800 Subject: [PATCH 01/84] oauth qq and wechat --- Gemfile | 4 ++ Gemfile.lock | 10 ++- app/controllers/accounts_controller.rb | 43 ------------ app/controllers/application_controller.rb | 18 +---- app/controllers/concerns/login_helper.rb | 69 +++++++++++++++++++ app/controllers/oauth/base_controller.rb | 20 ++++++ app/controllers/oauth/qq_controller.rb | 9 +++ app/controllers/oauth/wechat_controller.rb | 11 +++ app/libs/omniauth/strategies/qq.rb | 50 ++++++++++++++ app/libs/wechat_oauth.rb | 13 ++++ app/libs/wechat_oauth/error.rb | 14 ++++ app/libs/wechat_oauth/service.rb | 61 ++++++++++++++++ app/models/open_user.rb | 5 ++ app/models/open_users/qq.rb | 3 + app/models/open_users/wechat.rb | 3 + app/models/user.rb | 11 +++ .../create_or_find_qq_account_service.rb | 34 +++++++++ .../create_or_find_wechat_account_service.rb | 48 +++++++++++++ config/configuration.yml.example | 19 +++++ config/initializers/inflections.rb | 5 ++ config/initializers/omniauth.rb | 17 +++++ config/initializers/wechat_oauth_init.rb | 17 +++++ config/locales/oauth/wechat.zh-CN.yml | 4 ++ config/routes.rb | 2 + .../20190821054352_create_open_users.rb | 14 ++++ 25 files changed, 443 insertions(+), 61 deletions(-) create mode 100644 app/controllers/concerns/login_helper.rb create mode 100644 app/controllers/oauth/base_controller.rb create mode 100644 app/controllers/oauth/qq_controller.rb create mode 100644 app/controllers/oauth/wechat_controller.rb create mode 100644 app/libs/omniauth/strategies/qq.rb create mode 100644 app/libs/wechat_oauth.rb create mode 100644 app/libs/wechat_oauth/error.rb create mode 100644 app/libs/wechat_oauth/service.rb create mode 100644 app/models/open_user.rb create mode 100644 app/models/open_users/qq.rb create mode 100644 app/models/open_users/wechat.rb create mode 100644 app/services/oauth/create_or_find_qq_account_service.rb create mode 100644 app/services/oauth/create_or_find_wechat_account_service.rb create mode 100644 config/configuration.yml.example create mode 100644 config/initializers/omniauth.rb create mode 100644 config/initializers/wechat_oauth_init.rb create mode 100644 config/locales/oauth/wechat.zh-CN.yml create mode 100644 db/migrate/20190821054352_create_open_users.rb diff --git a/Gemfile b/Gemfile index a8bf18746..ac723d666 100644 --- a/Gemfile +++ b/Gemfile @@ -93,3 +93,7 @@ gem 'bulk_insert' gem 'searchkick' gem 'aasm' + +# oauth2 +gem 'omniauth', '~> 1.9.0' +gem 'omniauth-oauth2', '~> 1.6.0' diff --git a/Gemfile.lock b/Gemfile.lock index 9c80af8a9..1bf26bdf4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -110,7 +110,7 @@ GEM grape-entity (0.7.1) activesupport (>= 4.0) multi_json (>= 1.3.2) - hashie (3.6.0) + hashie (3.5.7) htmlentities (4.3.4) httparty (0.16.2) multi_xml (>= 0.5.2) @@ -164,6 +164,12 @@ GEM multi_json (~> 1.3) multi_xml (~> 0.5) rack (>= 1.2, < 3) + omniauth (1.9.0) + hashie (>= 3.4.6, < 3.7.0) + rack (>= 1.6.2, < 3) + omniauth-oauth2 (1.6.0) + oauth2 (~> 1.1) + omniauth (~> 1.9) pdfkit (0.8.4.1) public_suffix (3.0.2) puma (3.12.0) @@ -348,6 +354,8 @@ DEPENDENCIES listen (>= 3.0.5, < 3.2) mysql2 (>= 0.4.4, < 0.6.0) oauth2 + omniauth (~> 1.9.0) + omniauth-oauth2 (~> 1.6.0) pdfkit puma (~> 3.11) rack-cors diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 2524c53d8..731a668bb 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -114,35 +114,6 @@ class AccountsController < ApplicationController end end - def successful_authentication(user) - uid_logger("Successful authentication start: '#{user.login}' from #{request.remote_ip} at #{Time.now.utc}") - # Valid user - self.logged_user = user - # generate a key and set cookie if autologin - - set_autologin_cookie(user) - UserAction.create(:action_id => user.try(:id), :action_type => "Login", :user_id => user.try(:id), :ip => request.remote_ip) - user.update_column(:last_login_on, Time.now) - # 注册完成后有一天的试用申请(先去掉) - # UserDayCertification.create(user_id: user.id, status: 1) - end - - def set_autologin_cookie(user) - token = Token.get_or_create_permanent_login_token(user, "autologin") - cookie_options = { - :value => token.value, - :expires => 1.month.from_now, - :path => '/', - :secure => false, - :httponly => true - } - if edu_setting('cookie_domain').present? - cookie_options = cookie_options.merge(domain: edu_setting('cookie_domain')) - end - cookies[autologin_cookie_name] = cookie_options - logger.info("cookies is #{cookies}") - end - def logout UserAction.create(action_id: User.current.id, action_type: "Logout", user_id: User.current.id, :ip => request.remote_ip) session[:user_id] = nil @@ -183,20 +154,6 @@ class AccountsController < ApplicationController end private - def autologin_cookie_name - edu_setting('autologin_cookie_name') || 'autologin' - end - - def logout_user - if User.current.logged? - if autologin = cookies.delete(autologin_cookie_name) - User.current.delete_autologin_token(autologin) - end - User.current.delete_session_token(session[:tk]) - self.logged_user = nil - end - session[:user_id] = nil - end # type 事件类型 1:用户注册 2:忘记密码 3: 绑定手机 4: 绑定邮箱, 5: 验证手机号是否有效 # 如果有新的继续后面加 # login_type 1:手机类型 2:邮箱类型 diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index e7b4bdac6..d61aa32ac 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -7,6 +7,7 @@ class ApplicationController < ActionController::Base include ControllerRescueHandler include GitHelper include LoggerHelper + include LoginHelper protect_from_forgery prepend: true, unless: -> { request.format.json? } @@ -225,12 +226,6 @@ class ApplicationController < ActionController::Base # end end - def start_user_session(user) - session[:user_id] = user.id - session[:ctime] = Time.now.utc.to_i - session[:atime] = Time.now.utc.to_i - end - def user_setup # reacct静态资源加载不需要走这一步 return if params[:controller] == "main" @@ -256,17 +251,6 @@ class ApplicationController < ActionController::Base # User.current = User.find 81403 end - # Sets the logged in user - def logged_user=(user) - reset_session - if user && user.is_a?(User) - User.current = user - start_user_session(user) - else - User.current = User.anonymous - end - end - # Returns the current user or nil if no user is logged in # and starts a session if needed def find_current_user diff --git a/app/controllers/concerns/login_helper.rb b/app/controllers/concerns/login_helper.rb new file mode 100644 index 000000000..e79654958 --- /dev/null +++ b/app/controllers/concerns/login_helper.rb @@ -0,0 +1,69 @@ +module LoginHelper + extend ActiveSupport::Concern + + def edu_setting(name) + EduSetting.get(name) + end + + def autologin_cookie_name + edu_setting('autologin_cookie_name') || 'autologin' + end + + def set_autologin_cookie(user) + token = Token.get_or_create_permanent_login_token(user, "autologin") + cookie_options = { + :value => token.value, + :expires => 1.month.from_now, + :path => '/', + :secure => false, + :httponly => true + } + if edu_setting('cookie_domain').present? + cookie_options = cookie_options.merge(domain: edu_setting('cookie_domain')) + end + cookies[autologin_cookie_name] = cookie_options + Rails.logger.info("cookies is #{cookies}") + end + + def successful_authentication(user) + Rails.logger.info("id: #{user&.id} Successful authentication start: '#{user.login}' from #{request.remote_ip} at #{Time.now.utc}") + # Valid user + self.logged_user = user + + # generate a key and set cookie if autologin + set_autologin_cookie(user) + + UserAction.create(action_id: user&.id, action_type: 'Login', user_id: user&.id, ip: request.remote_ip) + user.update_column(:last_login_on, Time.now) + # 注册完成后有一天的试用申请(先去掉) + # UserDayCertification.create(user_id: user.id, status: 1) + end + + def logout_user + if User.current.logged? + if autologin = cookies.delete(autologin_cookie_name) + User.current.delete_autologin_token(autologin) + end + User.current.delete_session_token(session[:tk]) + self.logged_user = nil + end + session[:user_id] = nil + end + + # Sets the logged in user + def logged_user=(user) + reset_session + if user && user.is_a?(User) + User.current = user + start_user_session(user) + else + User.current = User.anonymous + end + end + + def start_user_session(user) + session[:user_id] = user.id + session[:ctime] = Time.now.utc.to_i + session[:atime] = Time.now.utc.to_i + end +end \ No newline at end of file diff --git a/app/controllers/oauth/base_controller.rb b/app/controllers/oauth/base_controller.rb new file mode 100644 index 000000000..e2eb26a2a --- /dev/null +++ b/app/controllers/oauth/base_controller.rb @@ -0,0 +1,20 @@ +class Oauth::BaseController < ActionController::Base + include RenderHelper + include LoginHelper + + skip_before_action :verify_authenticity_token + + private + + def session_user_id + session[:user_id] + end + + def current_user + @_current_user ||= User.find_by(id: session_user_id) + end + + def auth_hash + request.env['omniauth.auth'] + end +end \ No newline at end of file diff --git a/app/controllers/oauth/qq_controller.rb b/app/controllers/oauth/qq_controller.rb new file mode 100644 index 000000000..27ae3d8aa --- /dev/null +++ b/app/controllers/oauth/qq_controller.rb @@ -0,0 +1,9 @@ +class Oauth::QQController < Oauth::BaseController + def create + user = Oauth::CreateOrFindQqAccountService.call(current_user, auth_hash) + + successful_authentication(user) + + render_ok + end +end \ No newline at end of file diff --git a/app/controllers/oauth/wechat_controller.rb b/app/controllers/oauth/wechat_controller.rb new file mode 100644 index 000000000..8649e9b3f --- /dev/null +++ b/app/controllers/oauth/wechat_controller.rb @@ -0,0 +1,11 @@ +class WechatController < Oauth::BaseController + def create + user = Oauth::CreateOrFindWechatAccountService.call(current_user ,params) + + successful_authentication(user) + + render_ok + rescue Oauth::CreateOrFindWechatAccountService::Error => ex + render_error(ex.message) + end +end \ No newline at end of file diff --git a/app/libs/omniauth/strategies/qq.rb b/app/libs/omniauth/strategies/qq.rb new file mode 100644 index 000000000..513257e3c --- /dev/null +++ b/app/libs/omniauth/strategies/qq.rb @@ -0,0 +1,50 @@ +module OmniAuth + module Strategies + class QQ < OmniAuth::Strategies::OAuth2 + option :client_options, { + site: 'https://graph.qq.com', + authorize_url: '/oauth2.0/authorize', + token_url: '/oauth2.0/token' + } + + def request_phase + super + end + + def authorize_params + super.tap do |params| + %w[scope client_options].each do |v| + if request.params[v] + params[v.to_sym] = request.params[v] + end + end + end + end + + uid { raw_info['openid'].to_s } + + info do + { + name: user_info['nickname'], + nickname: user_info['nickname'], + image: user_info['figureurl_qq_1'] + } + end + + extra do + { raw_info: user_info } + end + + def raw_info + access_token.options[:mode] = :query + @raw_info ||= access_token.get('/oauth2.0/me').parsed + end + + def user_info + access_token.options[:mode] = :query + params = { oauth_consumer_key: options.client_id, openid: raw_info['openid'], format: 'json' } + @user_info ||= access_token.get('/user/get_user_info', params: params) + end + end + end +end diff --git a/app/libs/wechat_oauth.rb b/app/libs/wechat_oauth.rb new file mode 100644 index 000000000..ba4baee30 --- /dev/null +++ b/app/libs/wechat_oauth.rb @@ -0,0 +1,13 @@ +module WechatOauth + class << self + attr_accessor :appid, :secret, :scope, :base_url + + def logger + @_logger ||= STDOUT + end + + def logger=(l) + @_logger = l + end + end +end \ No newline at end of file diff --git a/app/libs/wechat_oauth/error.rb b/app/libs/wechat_oauth/error.rb new file mode 100644 index 000000000..ac7f5fddc --- /dev/null +++ b/app/libs/wechat_oauth/error.rb @@ -0,0 +1,14 @@ +class WechatOauth::Error < StandardError + attr_reader :code + + def initialize(code, msg) + super(msg) + @code = code + end + + def message + I18n.t("oauth.wechat.#{code}") + rescue I18n::MissingTranslationData + super + end +end \ No newline at end of file diff --git a/app/libs/wechat_oauth/service.rb b/app/libs/wechat_oauth/service.rb new file mode 100644 index 000000000..35ef8f455 --- /dev/null +++ b/app/libs/wechat_oauth/service.rb @@ -0,0 +1,61 @@ +module WechatOauth::Service + module_function + + def request(method, url, params) + WechatOauth.logger.info("[WechatOauth] [#{method.to_s.upcase}] #{url} || #{params}") + + client = Faraday.new(url: WechatOauth.base_url) + response = client.public_send(method, url, params) + result = JSON.parse(response.body) + + WechatOauth.logger.info("[WechatOauth] [#{response.status}] #{result}") + + if result['errcode'].present? && result['errcode'].to_s != '0' + raise WechatOauth::Error.new(result['errcode'], result['errmsg']) + end + + result + end + + # https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html + # response: + # { + # "access_token":"ACCESS_TOKEN", + # "expires_in":7200, + # "refresh_token":"REFRESH_TOKEN", + # "openid":"OPENID", + # "scope":"SCOPE", + # "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" + # } + def access_token(code) + params = { + appid: WechatOauth.appid, + secret: WechatOauth.secret, + code: code, + grant_type: 'authorization_code' + } + + request(:get, '/sns/oauth2/access_token', params) + end + + # https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Authorized_Interface_Calling_UnionID.html + # response: + # { + # "openid":"OPENID", + # "nickname":"NICKNAME", + # "sex":1, + # "province":"PROVINCE", + # "city":"CITY", + # "country":"COUNTRY", + # "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0", + # "privilege":[ + # "PRIVILEGE1", + # "PRIVILEGE2" + # ], + # "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" + # + # } + def user_info(access_token, openid) + request(:get, '/sns/userinfo', access_token: access_token, openid: openid) + end +end \ No newline at end of file diff --git a/app/models/open_user.rb b/app/models/open_user.rb new file mode 100644 index 000000000..cedf02edb --- /dev/null +++ b/app/models/open_user.rb @@ -0,0 +1,5 @@ +class OpenUser < ApplicationRecord + belongs_to :user + + validates :uid, presence: true, uniqueness: { scope: :type } +end \ No newline at end of file diff --git a/app/models/open_users/qq.rb b/app/models/open_users/qq.rb new file mode 100644 index 000000000..242693ce5 --- /dev/null +++ b/app/models/open_users/qq.rb @@ -0,0 +1,3 @@ +class OpenUsers::QQ < OpenUser + +end \ No newline at end of file diff --git a/app/models/open_users/wechat.rb b/app/models/open_users/wechat.rb new file mode 100644 index 000000000..046b3e086 --- /dev/null +++ b/app/models/open_users/wechat.rb @@ -0,0 +1,3 @@ +class OpenUsers::Wechat < OpenUser + +end \ No newline at end of file diff --git a/app/models/user.rb b/app/models/user.rb index 449a86e8b..9c9dea0ea 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -26,6 +26,8 @@ class User < ApplicationRecord MIX_PASSWORD_LIMIT = 8 + LOGIN_CHARS = %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).freeze + has_one :user_extension, dependent: :destroy accepts_nested_attributes_for :user_extension, update_only: true @@ -603,6 +605,15 @@ class User < ApplicationRecord admin? || business? end + def self.generate_login(prefix) + login = prefix + LOGIN_CHARS.sample(8).join('') + while User.exists?(login: login) + login = prefix + LOGIN_CHARS.sample(8).join('') + end + + login + end + protected def validate_password_length # 管理员的初始密码是5位 diff --git a/app/services/oauth/create_or_find_qq_account_service.rb b/app/services/oauth/create_or_find_qq_account_service.rb new file mode 100644 index 000000000..0eb187924 --- /dev/null +++ b/app/services/oauth/create_or_find_qq_account_service.rb @@ -0,0 +1,34 @@ +class Oauth::CreateOrFindQqAccountService < ApplicationService + + attr_reader :user, :params + + def initialize(user, params) + @user = user + @params = params + end + + def call + # 存在该用户 + open_user = OpenUsers::QQ.find_by(uid: params['uid']) + return open_user.user if open_user.present? + + if user.blank? || !user.logged? + # 新用户 + login = User.generate_login('q') + @user = User.new(login: login, nickname: params.dig('info', 'nickname')) + end + + ActiveRecord::Base.transaction do + if user.new_record? + user.save! + + gender = params.dig('extra', 'raw_info', 'gender') == '女' ? 1 : 0 + user.create_user_extension!(gender: gender) + end + + OpenUsers::QQ.create!(user: user, uid: params['uid']) + end + + user + end +end \ No newline at end of file diff --git a/app/services/oauth/create_or_find_wechat_account_service.rb b/app/services/oauth/create_or_find_wechat_account_service.rb new file mode 100644 index 000000000..b59d6a68d --- /dev/null +++ b/app/services/oauth/create_or_find_wechat_account_service.rb @@ -0,0 +1,48 @@ +class Oauth::CreateOrFindWechatAccountService < ApplicationService + Error = Class.new(StandardError) + + attr_reader :user, :params + + def initialize(user, params) + @user = user + @params = params + end + + def call + code = params['code'].to_s.strip + raise Error, 'Code不能为空' if code.blank? + + result = WechatOauth::Service.access_token(code) + + # 存在该用户 + open_user = OpenUsers::Wechat.find_by(uid: result['unionid']) + return open_user.user if open_user.present? + + if user.blank? || !user.logged? + # 新用户 + login = User.generate_login('w') + @user = User.new(login: login, nickname: result['nickname']) + end + + ActiveRecord::Base.transaction do + if user.new_record? + user.save! + + gender = result['sex'].to_i == 1 ? 0 : 1 + user.create_user_extension!(gender: gender) + end + + OpenUsers::Wechat.create!(user: user, uid: result['unionid']) + end + + user + rescue WechatOauth::Error => ex + raise Error, ex.message + end + + private + + def code + params[:code].to_s.strip + end +end \ No newline at end of file diff --git a/config/configuration.yml.example b/config/configuration.yml.example new file mode 100644 index 000000000..f492adb20 --- /dev/null +++ b/config/configuration.yml.example @@ -0,0 +1,19 @@ +defaults: &defaults + oauth: + qq: + appid: 'test' + secret: 'test123456' + wechat: + appid: 'test' + secret: 'test' + scope: 'snsapi_login' + base_url: 'https://api.weixin.qq.com' + +development: + <<: *defaults + +test: + <<: *defaults + +production: + <<: *defaults \ No newline at end of file diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index d173fb9fa..a501cb14f 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -14,3 +14,8 @@ # ActiveSupport::Inflector.inflections(:en) do |inflect| # inflect.acronym 'RESTful' # end + +ActiveSupport::Inflector.inflections do |inflect| + inflect.acronym 'QQ' + inflect.acronym 'OmniAuth' +end \ No newline at end of file diff --git a/config/initializers/omniauth.rb b/config/initializers/omniauth.rb new file mode 100644 index 000000000..27ade9ed4 --- /dev/null +++ b/config/initializers/omniauth.rb @@ -0,0 +1,17 @@ +OmniAuth.config.add_camelization 'qq', 'QQ' + +oauth_config = {} +begin + config = Rails.application.config_for(:configuration) + oauth_config = config.dig('oauth', 'qq') + raise 'oauth qq config missing' if oauth_config.blank? +rescue => ex + raise ex if Rails.env.production? + + puts %Q{\033[33m [warning] qq oauth config or configuration.yml missing, + please add it or execute 'cp config/configuration.yml.example config/configuration.yml' \033[0m} +end + +Rails.application.config.middleware.use OmniAuth::Builder do + provider :qq, oauth_config['appid'], oauth_config['secret'] +end diff --git a/config/initializers/wechat_oauth_init.rb b/config/initializers/wechat_oauth_init.rb new file mode 100644 index 000000000..6c7f849ec --- /dev/null +++ b/config/initializers/wechat_oauth_init.rb @@ -0,0 +1,17 @@ +oauth_config = {} +begin + config = Rails.application.config_for(:configuration) + oauth_config = config.dig('oauth', 'wechat') + raise 'oauth wechat config missing' if oauth_config.blank? +rescue => ex + raise ex if Rails.env.production? + + puts %Q{\033[33m [warning] wechat oauth config or configuration.yml missing, + please add it or execute 'cp config/configuration.yml.example config/configuration.yml' \033[0m} +end + +WechatOauth.appid = oauth_config['appid'] +WechatOauth.secret = oauth_config['secret'] +WechatOauth.scope = oauth_config['scope'] +WechatOauth.base_url = oauth_config['base_url'] +WechatOauth.logger = Rails.logger diff --git a/config/locales/oauth/wechat.zh-CN.yml b/config/locales/oauth/wechat.zh-CN.yml new file mode 100644 index 000000000..12b58c513 --- /dev/null +++ b/config/locales/oauth/wechat.zh-CN.yml @@ -0,0 +1,4 @@ +'zh-CN': + oauth: + wechat: + '40029': '授权已失效,请重新授权' \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 4e7b19687..46b6c1540 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -7,6 +7,8 @@ Rails.application.routes.draw do get 'attachments/download/:id', to: 'attachments#show' get 'attachments/download/:id/:filename', to: 'attachments#show' + get '/auth/qq/callback', to: 'oauth/qq#create' + resources :edu_settings resources :admin scope '/api' do diff --git a/db/migrate/20190821054352_create_open_users.rb b/db/migrate/20190821054352_create_open_users.rb new file mode 100644 index 000000000..f8e0aba4b --- /dev/null +++ b/db/migrate/20190821054352_create_open_users.rb @@ -0,0 +1,14 @@ +class CreateOpenUsers < ActiveRecord::Migration[5.2] + def change + create_table :open_users do |t| + t.references :user + + t.string :type + t.string :uid + + t.timestamps + + t.index [:type, :uid], unique: true + end + end +end From 3805253fd681b5a4f72bc65b599e058d4c524152 Mon Sep 17 00:00:00 2001 From: p31729568 Date: Tue, 24 Sep 2019 14:25:57 +0800 Subject: [PATCH 02/84] fix merge --- app/models/user.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/models/user.rb b/app/models/user.rb index b9d9e48e6..e55bb8425 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -26,6 +26,8 @@ class User < ApplicationRecord MIX_PASSWORD_LIMIT = 8 + LOGIN_CHARS = %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).freeze + has_one :user_extension, dependent: :destroy accepts_nested_attributes_for :user_extension, update_only: true From 108415ae4d261d1951a88748e4ef57ce867f57af Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 11 Oct 2019 09:20:25 +0800 Subject: [PATCH 03/84] =?UTF-8?q?=E4=BD=9C=E5=93=81=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E7=9A=84=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/homework_commons_helper.rb | 3 ++- app/models/homework_common.rb | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/helpers/homework_commons_helper.rb b/app/helpers/homework_commons_helper.rb index cc23d05d6..8da142380 100644 --- a/app/helpers/homework_commons_helper.rb +++ b/app/helpers/homework_commons_helper.rb @@ -224,7 +224,8 @@ module HomeworkCommonsHelper # 作品状态 def homework_status homework, member - [{id: 0, name: "未提交", count: homework.unfinished_count(member)}, + [{id: 3, name: "未通关", count: homework.finished_count(member)}, + {id: 4, name: "已通关", count: homework.delay_finished_count(member)}, {id: 1, name: "按时提交", count: homework.finished_count(member)}, {id: 2, name: "延时提交", count: homework.delay_finished_count(member)}] end diff --git a/app/models/homework_common.rb b/app/models/homework_common.rb index abe254b28..e40c706d1 100644 --- a/app/models/homework_common.rb +++ b/app/models/homework_common.rb @@ -240,6 +240,16 @@ class HomeworkCommon < ApplicationRecord self.teacher_works(member).delay_finished.count end + # 未通关数 + def un_complete_count member + self.teacher_works(member).finished.count + end + + # 通关数 + def complete_count member + + end + # 分组作业的最大分组id def max_group_id self.student_works.has_committed.maximum(:group_id).to_i + 1 From 69f9390eeb65dcb2e80a6418e5ba83707b853b99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Fri, 11 Oct 2019 11:05:18 +0800 Subject: [PATCH 04/84] =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=AB=8B=E5=8D=B3?= =?UTF-8?q?=E5=8F=91=E5=B8=83=20=E5=8C=85=E6=8B=AC=E5=8D=95=E4=B8=AA?= =?UTF-8?q?=E7=AB=8B=E5=8D=B3=E5=8F=91=E5=B8=83=E5=BC=B9=E7=AA=97=E5=B0=81?= =?UTF-8?q?=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coursesPublic/OneSelfOrderModal.js | 295 ++++++++++++++++++ .../graduation/tasks/GraduationTaskDetail.js | 15 +- .../modules/courses/graduation/tasks/index.js | 2 +- .../courses/shixunHomework/shixunHomework.js | 100 +++++- 4 files changed, 394 insertions(+), 18 deletions(-) create mode 100644 public/react/src/modules/courses/coursesPublic/OneSelfOrderModal.js diff --git a/public/react/src/modules/courses/coursesPublic/OneSelfOrderModal.js b/public/react/src/modules/courses/coursesPublic/OneSelfOrderModal.js new file mode 100644 index 000000000..87e823af6 --- /dev/null +++ b/public/react/src/modules/courses/coursesPublic/OneSelfOrderModal.js @@ -0,0 +1,295 @@ +import React,{ Component } from "react"; +import { Modal,Checkbox,DatePicker} from "antd"; +import { handleDateString } from 'educoder'; +import locale from 'antd/lib/date-picker/locale/zh_CN'; +import moment from 'moment'; +const CheckboxGroup = Checkbox.Group; +const dateFormat = 'YYYY-MM-DD HH:mm'; + +function range(start, end) { + const result = []; + for (let i = start; i < end; i++) { + result.push(i); + } + return result; +} +function disabledDateTime() { + return { + // disabledHours: () => range(0, 24).splice(4, 20), + disabledMinutes: () => range(1, 30).concat(range(31, 60)), + // disabledSeconds: () => [55, 56], + }; +} + + +function disabledDate(current) { + return current && current < moment().endOf('day').subtract(1, 'days'); +} + + + +class OneSelfOrderModal extends Component{ + constructor(props){ + super(props); + this.state={ + group_ids:[], + endtime:"" + } + } + componentDidMount() { + + + if(this.props.course_groups!=undefined&&this.props.course_groups.length!=0){ + + let arr=this.props.course_groups.map(item => item.id); + this.shixunhomeworkedit(arr); + } + + if(this.props.starttimes===undefined||this.props.starttimes===""||this.props.starttimes===null){ + this.setState({ + endtime:moment(moment(handleDateString(this.props.staytime)).add(1, 'months')).format("YYYY-MM-DD HH:mm") + }) + }else{ + this.setState({ + endtime:moment(handleDateString(this.props.starttimes)).format("YYYY-MM-DD HH:mm") + }) + } + } + componentDidUpdate=(prevProps)=>{ + // if(prevProps.visible!=this.props.visible){ + // + // if(this.props.course_groups!=undefined){ + // let arr=this.props.course_groups.map(item => item.id); + // this.shixunhomeworkedit(arr); + // } + // } + if(prevProps.course_groups!=this.props.course_groups){ + if(this.props.course_groups!=undefined){ + let arr=this.props.course_groups.map(item => item.id); + this.shixunhomeworkedit(arr); + } + } + if(prevProps.starttimes!=this.props.starttimes){ + + if(this.props.starttimes===undefined||this.props.starttimes===""||this.props.starttimes===null){ + this.setState({ + endtime:moment(moment(handleDateString(this.props.staytime)).add(1, 'months')).format("YYYY-MM-DD HH:mm") + }) + }else{ + this.setState({ + endtime:moment(handleDateString(this.props.starttimes)).format("YYYY-MM-DD HH:mm") + }) + } + } + } + + //勾选实训 + shixunhomeworkedit=(list)=>{ + + this.setState({ + group_ids:list + }) + this.props.getcourse_groupslist && this.props.getcourse_groupslist(list) + } + + onChangeTimeend= (date, dateString) => { + // console.log('startValue',dateString); + + this.setState({ + endtime: date===null?"":handleDateString(dateString), + }) + + } + + propsSaves=(ds,endtime)=>{ + + if(ds.length ===0&&endtime === ""){ + this.props.Saves() + }else{ + if(this.props.typs!="end"){ + if(endtime === ""||endtime===undefined||endtime===null){ + + this.setState({ + endtimetype:true, + endtimetypevalue:"截止时间不能为空" + }) + return + } + + if(moment(endtime,"YYYY-MM-DD HH:mm") <= moment(this.props.starttimes,"YYYY-MM-DD HH:mm")){ + this.setState({ + endtimetype:true, + endtimetypevalue:"必须晚于发布时间" + }) + return + } + } + this.props.Saves(ds,moment(handleDateString(endtime),"YYYY-MM-DD HH:mm").format("YYYY-MM-DD HH:mm")) + } + + + } + + render(){ + let {group_ids,endtime}=this.state; + let {course_groups}=this.props; + + // console.log(this.props.starttimes) + // console.log(endtime) + // console.log(this.props.starttimes) + // console.log(this.state.endtime) + + // console.log(this.props.starttime,this.props.endtime) + // TODO course_groups为空时的处理 + + // let endtimelist=this.props.starttimes===undefined||this.props.starttimes===""?"":moment(handleDateString(endtime)).add(1,'months') + return( +
+ { + this.props.OneSelftype===true?:"" + } + { + this.props.OneSelftype===true? +
+ + + { this.props.usingCheckBeforePost ? + +

+ 发布设置均可修改, + + 点击修改 + +

+

+ 此设置将对所有分班生效 +

+
: + +

+ {this.props.Topval} + {this.props.Topvalright} +

+

+ {this.props.Botvalleft===undefined?"":"{this.props.Botvalleft}"} + {this.props.Botval} +

+
} + + + {this.props.starttime===undefined|| + this.props.starttime===""?"" + :

+ + 发布时间: + {this.props.starttime} + + {/*{this.props.endtime}*/} + 截止时间: + + {this.state.endtimetype===true?

{this.state.endtimetypevalue}
:""} + +

} + {/* usingCheckBeforePost 为true的时候 全选所有分班 */} + {this.props.modaltype===undefined||this.props.modaltype===2||this.props.modaltype===4 + || !course_groups || course_groups.length == 0 + || this.props.usingCheckBeforePost ?"":
    + + {/**/} + {/**/} + { + { + course_groups.map((item,key)=>{ + return( +
    +
  • + + {item.name} + + +
  • + +
    + ) + }) + } +
    } + +
+ } + + + +
+
:""} +
+ ) + } +} +export default OneSelfOrderModal; \ No newline at end of file diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationTaskDetail.js b/public/react/src/modules/courses/graduation/tasks/GraduationTaskDetail.js index b9830d1fc..fbbfafabc 100644 --- a/public/react/src/modules/courses/graduation/tasks/GraduationTaskDetail.js +++ b/public/react/src/modules/courses/graduation/tasks/GraduationTaskDetail.js @@ -7,6 +7,7 @@ import Loading from '../../../../Loading'; import {BrowserRouter as Router,Route,Switch} from 'react-router-dom'; import axios from 'axios'; import HomeworkModal from "../../coursesPublic/HomeworkModal"; +import OneSelfOrderModal from "../../coursesPublic/OneSelfOrderModal"; import AccessoryModal from "../../coursesPublic/AccessoryModal"; import Associationmodel from '../../coursesPublic/Associationmodel'; import CoursesListType from '../../coursesPublic/CoursesListType'; @@ -40,6 +41,7 @@ class GraduationTaskDetail extends Component{ this.state={ modalname:undefined, visible:false, + OneSelftype:false, Topval:undefined, starttime:undefined, starttimes:undefined, @@ -115,17 +117,20 @@ class GraduationTaskDetail extends Component{ } //立即发布 publish=()=>{ + let {questionslist}=this.state; let starttime= this.props.getNowFormatDates(1,1); let endtime=this.props.getNowFormatDates(2,1); // this.homeworkstart() this.setState({ modalname:"立即发布", visible:true, + OneSelftype:true, Topval:"学生将立即收到毕设任务", // Botvalleft:"点击修改", // Botval:`本操作只对"未发布"的分班有效`, starttime:moment(moment(new Date())).format("YYYY-MM-DD HH:mm") , - starttimes:this.props.getNowFormatDates(1), + starttimes:questionslist.end_time, + staytime:this.props.getNowFormatDates(1), typs:"start", endtime:endtime, Cancelname:"暂不发布", @@ -176,7 +181,9 @@ class GraduationTaskDetail extends Component{ this.setState({ modalname:"立即截止", visible:true, + OneSelftype:true, Topval:"学生将不能再提交作品", + starttime:undefined, // Botvalleft:"暂不截止", // Botval:`本操作只对"提交中"的分班有效`, Cancelname:"暂不截止", @@ -212,6 +219,7 @@ class GraduationTaskDetail extends Component{ Modalstype:false, Loadtype:false, visible:false, + OneSelftype:false, Modulationtype:false, Allocationtype:false, Modalstopval:"", @@ -321,11 +329,12 @@ class GraduationTaskDetail extends Component{ { questionslist &&
- { + let selectnum= this.testonSelect(); + if(selectnum===true){ + this.noSelect(); + return + } + let coursesId=this.props.match.params.coursesId; + let url="/courses/"+coursesId+"/all_course_groups.json"; + + axios.get(url).then((response) => { + + if(response.status===200){ + let starttime= this.props.getNowFormatDates(1); + let endtime=this.props.getNowFormatDates(2); + this.setState({ + modalname:"立即发布", + modaltype:response.data.course_groups===null||response.data.course_groups.length===0?2:1, + OneSelftype:true, + typs:"start", + Topval:"学生将立即收到作业", + // Botvalleft:"暂不发布", + Botval:`本操作只对"未发布"的分班有效`, + starttime:"发布时间:"+moment(moment(new Date())).format("YYYY-MM-DD HH:mm"), + starttimes:starttime, + endtime:"截止时间:"+endtime, + Cancelname:"暂不发布", + Savesname:"立即发布", + Cancel:this.homeworkhide, + Saves:this.homeworkstartend, + course_groups:response.data.course_groups, + }) + } + }).catch((error) => { + console.log(error) + }); + + } + + cancelmodels=()=>{ this.setState({ Modalstype:false, @@ -316,10 +360,12 @@ class ShixunHomework extends Component{ }) } - this.props.showNotification(result.data.message) + + this.homeworkupdatalist(Coursename,page,order); + this.cancelmodel() + this.props.showNotification(result.data.message) this.props.updataleftNavfun() - this.homeworkupdatalist(Coursename,page,order); - this.cancelmodel() + } }).catch((error)=>{ console.log(error); @@ -414,11 +460,11 @@ class ShixunHomework extends Component{ Loadtype:false, course_groups:[] }) - + this.homeworkupdatalist(Coursename,page,order); + this.cancelmodel() this.props.showNotification(response.data.message) this.props.updataleftNavfun() - this.homeworkupdatalist(Coursename,page,order); - this.cancelmodel() + } }) .catch(function (error) { @@ -722,8 +768,8 @@ class ShixunHomework extends Component{ checkedtype:false, antIcon:false }) + this.homeworkupdatalist(Coursename,page,order); this.props.showNotification(response.data.message) - this.homeworkupdatalist(Coursename,page,order); this.props.updataleftNavfun() }else{ this.setState({ @@ -782,6 +828,7 @@ class ShixunHomework extends Component{ this.setState({ Modalstype:false, + OneSelftype:false, Loadtype:false, visible:false, Modalstopval:"", @@ -834,9 +881,10 @@ class ShixunHomework extends Component{ Loadtype:false, checkBoxValues:[] }) + this.homeworkupdatalist(Coursename,page,order); this.props.showNotification(response.data.message) - this.homeworkupdatalist(Coursename,page,order); + } }) .catch(function (error) { @@ -886,9 +934,10 @@ class ShixunHomework extends Component{ checkBoxValues:[], checkAllValue:false }) + this.homeworkupdatalist(Coursename,page,order); this.props.showNotification('已完成') this.props.updataleftNavfun() - this.homeworkupdatalist(Coursename,page,order); + } }) } @@ -1022,7 +1071,7 @@ class ShixunHomework extends Component{ loadtype={this.state.Loadtype} antIcon={this.state.antIcon} />:""} - {/*立即发布*/} + {/*批量立即发布*/} {visible===true?this.getcourse_groupslist(id)} />:""} - + {/*{单个立即发布}*/} + {/*this.getcourse_groupslist(id)}*/} + {/*/>*/} {shixunmodal===true||shixunpath===true? - {/**/} - {/**/} + + .F4FAFF{ + background: #F4FAFF; + } + ` + } + + {this.props.modaltype===undefined||this.props.modaltype===2 + || this.props.usingCheckBeforePost ?"":
+
  • + 分班名称 + + 截止时间 +
  • +
    } + {this.props.modaltype===undefined||this.props.modaltype===2 + || this.props.usingCheckBeforePost ?"":
      + { { course_groups.map((item,key)=>{ + return(
    • @@ -264,7 +281,7 @@ class OneSelfOrderModal extends Component{ placeholder="请选择截止时间" id={"endTime"} width={"210px"} - value={endtime===null||endtime===""?"":moment(endtime, dateFormat)} + value={item.end_time===null||item.end_time===""?"":moment(item.end_time, dateFormat)} onChange={this.onChangeTimeend} className={ this.state.endtimetype===true?"noticeTip fr":"fr"} /> From 5d021c67d591332eb5d10a58f26e7be626e0b478 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 11 Oct 2019 16:08:15 +0800 Subject: [PATCH 07/84] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E7=9A=84=E5=88=97=E8=A1=A8=E5=A2=9E=E5=8A=A0=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/homework_commons_controller.rb | 8 ++++++-- app/helpers/homework_commons_helper.rb | 4 ++-- app/models/homework_common.rb | 4 ++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index 9941e1d42..f118939fa 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -159,8 +159,12 @@ class HomeworkCommonsController < ApplicationController end # 作品状态 0: 未提交, 1 按时提交, 2 延迟提交 - unless params[:work_status].blank? - @student_works = @student_works.where(work_status: params[:work_status]) + if params[:work_status].present? + work_status = params[:work_status].map{|status| status.to_i} + all_student_works = @student_works + @student_works = all_student_works.where(work_status: work_status) + @student_works = @student_works.or(all_student_works.where(work_status: 0)).or(all_student_works.joins(:myshixun).where(status: 0)) if work_status.include?(3) + @student_works = @student_works.or(all_student_works.joins(:myshixun).where(status: 1)) if work_status.include?(4) end # 分班情况 diff --git a/app/helpers/homework_commons_helper.rb b/app/helpers/homework_commons_helper.rb index 8da142380..858754012 100644 --- a/app/helpers/homework_commons_helper.rb +++ b/app/helpers/homework_commons_helper.rb @@ -224,8 +224,8 @@ module HomeworkCommonsHelper # 作品状态 def homework_status homework, member - [{id: 3, name: "未通关", count: homework.finished_count(member)}, - {id: 4, name: "已通关", count: homework.delay_finished_count(member)}, + [{id: 3, name: "未通关", count: homework.un_complete_count(member)}, + {id: 4, name: "已通关", count: homework.complete_count(member)}, {id: 1, name: "按时提交", count: homework.finished_count(member)}, {id: 2, name: "延时提交", count: homework.delay_finished_count(member)}] end diff --git a/app/models/homework_common.rb b/app/models/homework_common.rb index e40c706d1..fc2dd3ea4 100644 --- a/app/models/homework_common.rb +++ b/app/models/homework_common.rb @@ -242,12 +242,12 @@ class HomeworkCommon < ApplicationRecord # 未通关数 def un_complete_count member - self.teacher_works(member).finished.count + teacher_works(member).count - complete_count(member) end # 通关数 def complete_count member - + Myshixun.where(id: self.teacher_works(member).pluck(:myshixun_id), status: 1).count end # 分组作业的最大分组id From 04e8342223aea55c70d0e965ab1ae2314ea452fa Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 11 Oct 2019 16:12:39 +0800 Subject: [PATCH 08/84] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E7=9A=84=E5=88=97=E8=A1=A8=E5=A2=9E=E5=8A=A0=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/homework_commons_helper.rb | 9 ++++++++- app/views/homework_commons/works_list.json.jbuilder | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/helpers/homework_commons_helper.rb b/app/helpers/homework_commons_helper.rb index 858754012..5fa8e6757 100644 --- a/app/helpers/homework_commons_helper.rb +++ b/app/helpers/homework_commons_helper.rb @@ -223,13 +223,20 @@ module HomeworkCommonsHelper end # 作品状态 - def homework_status homework, member + def practice_homework_status homework, member [{id: 3, name: "未通关", count: homework.un_complete_count(member)}, {id: 4, name: "已通关", count: homework.complete_count(member)}, {id: 1, name: "按时提交", count: homework.finished_count(member)}, {id: 2, name: "延时提交", count: homework.delay_finished_count(member)}] end + # 作品状态 + def homework_status homework, member + [{id: 0, name: "未提交", count: homework.unfinished_count(member)}, + {id: 1, name: "按时提交", count: homework.finished_count(member)}, + {id: 2, name: "延时提交", count: homework.delay_finished_count(member)}] + end + # 作品分数的显示 def work_score_format score, current_user, score_open score.nil? ? "--" : (current_user || score_open) ? number_with_precision(score, precision: 1) : "**" diff --git a/app/views/homework_commons/works_list.json.jbuilder b/app/views/homework_commons/works_list.json.jbuilder index e567ea79a..839b40bfd 100644 --- a/app/views/homework_commons/works_list.json.jbuilder +++ b/app/views/homework_commons/works_list.json.jbuilder @@ -23,7 +23,7 @@ if @user_course_identity < Course::STUDENT if @homework.homework_type != "practice" json.teacher_comment teacher_comment @homework, @current_user.id end - json.task_status homework_status @homework, @member + json.task_status @homework.homework_type != "practice" ? homework_status(@homework, @member) : practice_homework_status(@homework, @member) json.course_group_info course_group_info @course, @current_user.id elsif @user_course_identity == Course::STUDENT From b2f406aa2f75577b57cf717116235b9260609034 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Fri, 11 Oct 2019 16:14:19 +0800 Subject: [PATCH 09/84] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=A7=92=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../react/src/modules/courses/members/ChangeRolePop.js | 9 +++++++-- public/react/src/modules/courses/members/studentsList.js | 2 ++ public/react/src/modules/courses/members/teacherList.js | 3 +++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/public/react/src/modules/courses/members/ChangeRolePop.js b/public/react/src/modules/courses/members/ChangeRolePop.js index 896360a40..7f55910bf 100644 --- a/public/react/src/modules/courses/members/ChangeRolePop.js +++ b/public/react/src/modules/courses/members/ChangeRolePop.js @@ -6,7 +6,7 @@ import axios from 'axios' /** 角色数组, CREATOR: 创建者, PROFESSOR: 教师, ASSISTANT_PROFESSOR: 助教, STUDENT: 学生 */ -function ChangeRolePop({ member_roles = [], record, courseId, onChangeRoleSuccess, showNotification }) { +function ChangeRolePop({ member_roles = [], record, courseId, onChangeRoleSuccess, showNotification, getUserId, fetchUser }) { const [checkBoxRoles, setCheckBoxRoles] = useState(member_roles) useEffect(() => { setCheckBoxRoles(member_roles) @@ -43,7 +43,12 @@ function ChangeRolePop({ member_roles = [], record, courseId, onChangeRoleSucces if (response.data.status == 0) { showNotification('保存成功') onChangeRoleSuccess() - trigger('updatabanner') + + if (fetchUser && record.user_id == getUserId) { + fetchUser() + trigger('updatabanner') + } + } console.log(response) } diff --git a/public/react/src/modules/courses/members/studentsList.js b/public/react/src/modules/courses/members/studentsList.js index e3859345a..626a76baf 100644 --- a/public/react/src/modules/courses/members/studentsList.js +++ b/public/react/src/modules/courses/members/studentsList.js @@ -155,6 +155,8 @@ const buildColumns = (that,isParent) => { member_roles={record.member_roles} onChangeRoleSuccess={that.onChangeRoleSuccess} showNotification={that.props.showNotification} + getUserId={that.props.isUserid} + fetchUser={that.props.fetchUser} > ) diff --git a/public/react/src/modules/courses/members/teacherList.js b/public/react/src/modules/courses/members/teacherList.js index 72b667300..74271ea5a 100644 --- a/public/react/src/modules/courses/members/teacherList.js +++ b/public/react/src/modules/courses/members/teacherList.js @@ -165,6 +165,9 @@ function buildColumns(that) { member_roles={record.member_roles} onChangeRoleSuccess={that.onChangeRoleSuccess} showNotification={that.props.showNotification} + getUserId={that.props.isUserid} + fetchUser={that.props.fetchUser} + > {/* Date: Fri, 11 Oct 2019 16:16:21 +0800 Subject: [PATCH 10/84] =?UTF-8?q?=E7=AB=8B=E5=8D=B3=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E6=97=B6=E9=97=B4=E6=94=B9=E6=88=901?= =?UTF-8?q?=E5=91=A8=E4=B9=8B=E5=90=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/AppConfig.js | 4 ++-- .../react/src/modules/courses/coursesPublic/HomeworkModal.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/public/react/src/AppConfig.js b/public/react/src/AppConfig.js index c00c5fb62..e1d5da561 100644 --- a/public/react/src/AppConfig.js +++ b/public/react/src/AppConfig.js @@ -84,9 +84,9 @@ export function initAxiosInterceptors(props) { } config.url = `${proxy}${url}`; if (config.url.indexOf('?') == -1) { - config.url = `${config.url}?debug=${'student'}`; + config.url = `${config.url}?debug=${debugType}`; } else { - config.url = `${config.url}&debug=${'student'}`; + config.url = `${config.url}&debug=${debugType}`; } } else { // 加api前缀 diff --git a/public/react/src/modules/courses/coursesPublic/HomeworkModal.js b/public/react/src/modules/courses/coursesPublic/HomeworkModal.js index 89e747004..a001e6d86 100644 --- a/public/react/src/modules/courses/coursesPublic/HomeworkModal.js +++ b/public/react/src/modules/courses/coursesPublic/HomeworkModal.js @@ -48,7 +48,7 @@ class HomeworkModal extends Component{ if(this.props.starttimes!=undefined&&this.props.starttimes!=""){ this.setState({ - endtime:moment(moment(handleDateString(this.props.starttimes)).add(1, 'months')).format("YYYY-MM-DD HH:mm") + endtime:moment(moment(handleDateString(this.props.starttimes)).add(1, 'week')).format("YYYY-MM-DD HH:mm") }) } } @@ -70,7 +70,7 @@ class HomeworkModal extends Component{ if(this.props.starttimes!=undefined&&this.props.starttimes!=""){ this.setState({ - endtime:moment(moment(handleDateString(this.props.starttimes)).add(1, 'months')).format("YYYY-MM-DD HH:mm") + endtime:moment(moment(handleDateString(this.props.starttimes)).add(1, 'week')).format("YYYY-MM-DD HH:mm") }) } } From eb673fcc4b0e606da0b8fc26a43612f9de477d5d Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Fri, 11 Oct 2019 16:25:36 +0800 Subject: [PATCH 11/84] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E5=88=86=E7=8F=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/modules/courses/members/studentsList.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/public/react/src/modules/courses/members/studentsList.js b/public/react/src/modules/courses/members/studentsList.js index 626a76baf..5c56afbe0 100644 --- a/public/react/src/modules/courses/members/studentsList.js +++ b/public/react/src/modules/courses/members/studentsList.js @@ -547,6 +547,19 @@ class studentsList extends Component{ addDir = () => { trigger('groupAdd', this.props.coursesids) } + addToDir = async () => { + const courseId = this.props.match.params.coursesId + const url = `/courses/${courseId}/join_course_group.json` + const course_group_id = this.props.match.params.course_group_id + + const response = await axios.post(url, { + course_group_id + }) + if (response && response.data.status == 0) { + this.props.showNotification('加入成功') + this.fetchAll() + } + } renameDir = () => { const course_group_id = this.props.match.params.course_group_id trigger('groupRename', { id: parseInt(course_group_id), name: this.state.course_group_name}) @@ -593,6 +606,7 @@ class studentsList extends Component{ render(){ const isAdmin = this.props.isAdmin() + const isStudent = this.props.isStudent() const isSuperAdmin = this.props.isSuperAdmin() const isCourseEnd = this.props.isCourseEnd() let { @@ -704,6 +718,8 @@ class studentsList extends Component{ { // pageType !== TYPE_STUDENTS && !isCourseEnd && isAdmin && isParent && this.addDir()}>添加分班 } + { + isStudent && !isParent && course_group_id != 0 && this.addToDir()}>加入分班 } { isAdmin && !isParent && course_group_id != 0 && this.deleteDir()}>删除分班 } { From 038ff29699542cabdf4b6b9a2bc45119d32e4e86 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 11 Oct 2019 16:27:05 +0800 Subject: [PATCH 12/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/exercises_controller.rb | 2 +- app/controllers/homework_commons_controller.rb | 2 +- app/controllers/polls_controller.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index f9d9531f1..e25bec7f2 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -694,6 +694,7 @@ class ExercisesController < ApplicationController #首页批量或单独 立即发布,应是跳出弹窗,设置开始时间和截止时间。 def publish + group_ids = params[:group_ids]&.reject(&:blank?) if params[:detail].blank? tip_exception("缺少截止时间参数") if params[:end_time].blank? tip_exception("截止时间不能早于当前时间") if params[:end_time] <= strf_time(Time.now) @@ -701,7 +702,6 @@ class ExercisesController < ApplicationController @course.end_date.present? && params[:end_time] > strf_time(@course.end_date.end_of_day) else group_end_times = params[:group_end_times].reject(&:blank?).map{|time| time.to_time} - group_ids = params[:group_ids].reject(&:blank?) tip_exception("缺少截止时间参数") if group_end_times.blank? tip_exception("截止时间和分班参数的个数不一致") if group_end_times.length != group_ids.length group_end_times.each do |time| diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index 9941e1d42..5d75604ee 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -1044,6 +1044,7 @@ class HomeworkCommonsController < ApplicationController def publish_homework tip_exception("请至少选择一个分班") if params[:group_ids].blank? && @course.course_groups.size != 0 + group_ids = params[:group_ids]&.reject(&:blank?) if params[:detail].blank? tip_exception("缺少截止时间参数") if params[:end_time].blank? tip_exception("截止时间不能早于当前时间") if params[:end_time] <= strf_time(Time.now) @@ -1051,7 +1052,6 @@ class HomeworkCommonsController < ApplicationController @course.end_date.present? && params[:end_time] > strf_time(@course.end_date.end_of_day) else group_end_times = params[:group_end_times].reject(&:blank?).map{|time| time.to_time} - group_ids = params[:group_ids].reject(&:blank?) tip_exception("缺少截止时间参数") if group_end_times.blank? tip_exception("截止时间和分班参数的个数不一致") if group_end_times.length != group_ids.length group_end_times.each do |time| diff --git a/app/controllers/polls_controller.rb b/app/controllers/polls_controller.rb index 2259907e4..da5917e1b 100644 --- a/app/controllers/polls_controller.rb +++ b/app/controllers/polls_controller.rb @@ -254,6 +254,7 @@ class PollsController < ApplicationController #首页批量或单独 立即发布,应是跳出弹窗,设置开始时间和截止时间。 def publish + group_ids = params[:group_ids]&.reject(&:blank?) if params[:detail].blank? tip_exception("缺少截止时间参数") if params[:end_time].blank? tip_exception("截止时间不能早于当前时间") if params[:end_time] <= strf_time(Time.now) @@ -261,7 +262,6 @@ class PollsController < ApplicationController @course.end_date.present? && params[:end_time] > strf_time(@course.end_date.end_of_day) else group_end_times = params[:group_end_times].reject(&:blank?).map{|time| time.to_time} - group_ids = params[:group_ids].reject(&:blank?) tip_exception("缺少截止时间参数") if group_end_times.blank? tip_exception("截止时间和分班参数的个数不一致") if group_end_times.length != group_ids.length group_end_times.each do |time| From 663083a63e1be5c1eea50d05a2df33ca5b8bd242 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Fri, 11 Oct 2019 16:33:00 +0800 Subject: [PATCH 13/84] isAdminOrCreator --- public/react/src/modules/courses/members/teacherList.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/public/react/src/modules/courses/members/teacherList.js b/public/react/src/modules/courses/members/teacherList.js index 74271ea5a..fe46e9bf4 100644 --- a/public/react/src/modules/courses/members/teacherList.js +++ b/public/react/src/modules/courses/members/teacherList.js @@ -649,6 +649,7 @@ class studentsList extends Component{ combineArray = this.state.application_list } const isAdminOrTeacher = this.props.isAdminOrTeacher() + const isAdminOrCreator = this.props.isAdminOrCreator() const isSuperAdmin = this.props.isSuperAdmin() const hasGraduationModule = this.hasGraduationModule() const coursesId = this.props.match.params.coursesId @@ -685,7 +686,7 @@ class studentsList extends Component{ {/* { isAdmin && this.addTeacher()}>添加教师 } { isAdmin && this.addStudent()}>添加学生 } */} - { isAdmin && this.showChangeAdminModal()}>更换管理员} + { isAdminOrCreator && this.showChangeAdminModal()}>更换管理员} } From 699d33ed9096ab67ed4bb89248f7a597ba70fffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Fri, 11 Oct 2019 16:42:25 +0800 Subject: [PATCH 14/84] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E4=BD=93=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/modules/courses/busyWork/CommonWorkSetting.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/public/react/src/modules/courses/busyWork/CommonWorkSetting.js b/public/react/src/modules/courses/busyWork/CommonWorkSetting.js index 5d9a7dc16..ad25f553f 100644 --- a/public/react/src/modules/courses/busyWork/CommonWorkSetting.js +++ b/public/react/src/modules/courses/busyWork/CommonWorkSetting.js @@ -167,7 +167,12 @@ class CommonWorkSetting extends Component{ } on('commonwork_fetch_all', this.fetchAllListener) - } + + + if(this.props.isAdmin()===true){ + this.setState({startEditFlag: true}) + } + } componentWillUnmount() { off('commonwork_fetch_all', this.fetchAllListener) } From 6d84c0333a3dc653da54a8e108f790adce1bd629 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Fri, 11 Oct 2019 16:48:17 +0800 Subject: [PATCH 15/84] updatabanner --- public/react/src/modules/courses/members/ChangeRolePop.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/react/src/modules/courses/members/ChangeRolePop.js b/public/react/src/modules/courses/members/ChangeRolePop.js index 7f55910bf..0f9e6f5f1 100644 --- a/public/react/src/modules/courses/members/ChangeRolePop.js +++ b/public/react/src/modules/courses/members/ChangeRolePop.js @@ -44,9 +44,9 @@ function ChangeRolePop({ member_roles = [], record, courseId, onChangeRoleSucces showNotification('保存成功') onChangeRoleSuccess() + trigger('updatabanner') if (fetchUser && record.user_id == getUserId) { fetchUser() - trigger('updatabanner') } } From 6845b1b6341a1ad5f4c3089e539a27d55dd9dfc2 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 11 Oct 2019 16:52:26 +0800 Subject: [PATCH 16/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/homework_commons_controller.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index f46f31640..6d05b95d8 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -161,10 +161,11 @@ class HomeworkCommonsController < ApplicationController # 作品状态 0: 未提交, 1 按时提交, 2 延迟提交 if params[:work_status].present? work_status = params[:work_status].map{|status| status.to_i} - all_student_works = @student_works + all_student_works = @student_works.joins(:myshixun) @student_works = all_student_works.where(work_status: work_status) - @student_works = @student_works.or(all_student_works.where(work_status: 0)).or(all_student_works.joins(:myshixun).where(status: 0)) if work_status.include?(3) - @student_works = @student_works.or(all_student_works.joins(:myshixun).where(status: 1)) if work_status.include?(4) + + @student_works = @student_works.or(all_student_works.where(work_status: 0)).or(all_student_works.where(myshixun: {status: 0})) if work_status.include?(3) + @student_works = @student_works.or(all_student_works.where(myshixun: {status: 0})) if work_status.include?(4) end # 分班情况 From 8e92f17e59d7fd5347e35a114a66454657444cbf Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 11 Oct 2019 16:56:02 +0800 Subject: [PATCH 17/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/homework_commons_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index 6d05b95d8..10f046323 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -164,7 +164,7 @@ class HomeworkCommonsController < ApplicationController all_student_works = @student_works.joins(:myshixun) @student_works = all_student_works.where(work_status: work_status) - @student_works = @student_works.or(all_student_works.where(work_status: 0)).or(all_student_works.where(myshixun: {status: 0})) if work_status.include?(3) + @student_works = @student_works.or(all_student_works.where(work_status: 0)).or(all_student_works.where(myshixuns: {status: 0})) if work_status.include?(3) @student_works = @student_works.or(all_student_works.where(myshixun: {status: 0})) if work_status.include?(4) end From f35f9a8dbe3b6e4999885d3cd1d16ae120a209ee Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Fri, 11 Oct 2019 16:58:53 +0800 Subject: [PATCH 18/84] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E8=AF=95=E5=8D=B7?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E5=90=8E=E7=AB=AF=E6=97=B6=E9=97=B4=E5=92=8C?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E4=B8=8D=E4=B8=80=E8=87=B4=E7=9A=84=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/exercises_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index f9d9531f1..ac86467f1 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -1103,6 +1103,7 @@ class ExercisesController < ApplicationController ActiveRecord::Base.transaction do begin can_commit_exercise = false + user_left_time = nil if @user_course_identity > Course::ASSISTANT_PROFESSOR #为学生时 if params[:commit_method].to_i == 2 #自动提交时 user_left_time = get_exercise_left_time(@exercise,current_user) @@ -1131,7 +1132,7 @@ class ExercisesController < ApplicationController CommitExercsieNotifyJobJob.perform_later(@exercise.id, current_user.id) normal_status(0,"试卷提交成功!") else - normal_status(-1,"提交失败,未到截止时间!") + normal_status(-2,"#{user_left_time.to_i}") end else normal_status(-1,"提交失败,当前用户不为课堂学生!") From 37050d1349e81572ce8bb81cc8e5f809ea6f4adf Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 11 Oct 2019 17:02:37 +0800 Subject: [PATCH 19/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/homework_commons_controller.rb | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index 10f046323..735798d38 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -161,11 +161,17 @@ class HomeworkCommonsController < ApplicationController # 作品状态 0: 未提交, 1 按时提交, 2 延迟提交 if params[:work_status].present? work_status = params[:work_status].map{|status| status.to_i} - all_student_works = @student_works.joins(:myshixun) + all_student_works = @student_works @student_works = all_student_works.where(work_status: work_status) - @student_works = @student_works.or(all_student_works.where(work_status: 0)).or(all_student_works.where(myshixuns: {status: 0})) if work_status.include?(3) - @student_works = @student_works.or(all_student_works.where(myshixun: {status: 0})) if work_status.include?(4) + if work_status.include?(3) + ids = all_student_works.joins(:myshixun).where(myshixuns: {status: 0}).pluck(:id) + @student_works = @student_works.or(all_student_works.where(work_status: 0)).or(all_student_works.where(id: ids)) + end + if work_status.include?(4) + ids = all_student_works.joins(:myshixun).where(myshixuns: {status: 1}).pluck(:id) + @student_works = @student_works.or(all_student_works.where(id: ids)) + end end # 分班情况 From 560b209c93979ce383c5ef9ea38ce83f4c9a3332 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 11 Oct 2019 17:07:19 +0800 Subject: [PATCH 20/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/homework_commons_helper.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/helpers/homework_commons_helper.rb b/app/helpers/homework_commons_helper.rb index 5fa8e6757..efc14dc5e 100644 --- a/app/helpers/homework_commons_helper.rb +++ b/app/helpers/homework_commons_helper.rb @@ -226,8 +226,8 @@ module HomeworkCommonsHelper def practice_homework_status homework, member [{id: 3, name: "未通关", count: homework.un_complete_count(member)}, {id: 4, name: "已通关", count: homework.complete_count(member)}, - {id: 1, name: "按时提交", count: homework.finished_count(member)}, - {id: 2, name: "延时提交", count: homework.delay_finished_count(member)}] + {id: 1, name: "按时完成", count: homework.finished_count(member)}, + {id: 2, name: "延时完成", count: homework.delay_finished_count(member)}] end # 作品状态 From 98805e123a166ea61b847770a78e9f1265de9aa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Fri, 11 Oct 2019 17:15:30 +0800 Subject: [PATCH 21/84] =?UTF-8?q?=E5=BD=93=E6=88=B7=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E8=AF=95=E5=8D=B7=E9=94=99=E8=AF=AF=E6=8F=90=E4=BA=A4=E7=9A=84?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E5=90=8C=E6=AD=A5=E6=9C=8D=E5=8A=A1=E5=99=A8?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exercise/ExerciseReviewAndAnswer.js | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/public/react/src/modules/courses/exercise/ExerciseReviewAndAnswer.js b/public/react/src/modules/courses/exercise/ExerciseReviewAndAnswer.js index a9143176c..75da4f2fe 100644 --- a/public/react/src/modules/courses/exercise/ExerciseReviewAndAnswer.js +++ b/public/react/src/modules/courses/exercise/ExerciseReviewAndAnswer.js @@ -96,8 +96,8 @@ class ExerciseReviewAndAnswer extends Component{ //window.addEventListener('scroll', this.handleScroll); } - remainTime=()=>{ - let { time } = this.state; + remainTime=(time)=>{ + // let { time } = this.state; let h=moment(parseInt(time)*1000).hour()-8; let m=moment(parseInt(time)*1000).minutes(); let s=moment(parseInt(time)*1000).seconds(); @@ -133,15 +133,21 @@ class ExerciseReviewAndAnswer extends Component{ commit_method:2 }).then((result)=>{ if(result){ - this.setState({ - Modalstype:true, - Modalstopval:'答题结束了,系统已自动提交试卷', - modalsBottomval:"不能再修改答题", - ModalCancel:undefined, - ModalSave:this.sureCommit, - Loadtype:true - }) - this.props.showNotification(`${result.data.message}`); + if(result.data.status===0){ + this.setState({ + Modalstype:true, + Modalstopval:'答题结束了,系统已自动提交试卷', + modalsBottomval:"不能再修改答题", + ModalCancel:undefined, + ModalSave:this.sureCommit, + Loadtype:true + }) + this.props.showNotification(`${result.data.message}`); + } + + if(result.data.status===-2){ + this.remainTime(parseInt(result.data.message)) + } } }).catch((error)=>{ console.log(error); @@ -238,7 +244,7 @@ class ExerciseReviewAndAnswer extends Component{ isSpin:false }) if(result.data.exercise.left_time != null){ - this.remainTime(); + this.remainTime(result.data.exercise.left_time); } } }).catch((error)=>{ From 589155e1446f1f89b6df6329c11f67d1a12a8ea5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Fri, 11 Oct 2019 17:36:18 +0800 Subject: [PATCH 22/84] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=95=88=E7=8E=87?= =?UTF-8?q?=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shixunHomework/ShixunhomeWorkItem.js | 6 ++-- .../shixunHomework/Trainingjobsetting.js | 36 +++++++++---------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/public/react/src/modules/courses/shixunHomework/ShixunhomeWorkItem.js b/public/react/src/modules/courses/shixunHomework/ShixunhomeWorkItem.js index 7aa1d44de..01bcae9a8 100644 --- a/public/react/src/modules/courses/shixunHomework/ShixunhomeWorkItem.js +++ b/public/react/src/modules/courses/shixunHomework/ShixunhomeWorkItem.js @@ -354,8 +354,8 @@ class ShixunhomeWorkItem extends Component{ {/* {discussMessage.author.name} */} { discussMessage.author && {discussMessage.author} } - {discussMessage.commit_count===undefined?"":已开始做题 {discussMessage.commit_count}} - {discussMessage.uncommit_count===undefined?"":未开始做题 {discussMessage.uncommit_count}} + {discussMessage.commit_count===undefined?"":已开始做题 {discussMessage.commit_count}人} + {discussMessage.uncommit_count===undefined?"":未开始做题 {discussMessage.uncommit_count}人} {/*{discussMessage.replies_count} 3 未评*/} { @@ -381,7 +381,7 @@ class ShixunhomeWorkItem extends Component{ { discussMessage && discussMessage.upper_category_name && 22 }> - { {discussMessage.upper_category_name}} + { {discussMessage.upper_category_name}} } diff --git a/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js b/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js index 142d1e074..1b468d8ff 100644 --- a/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js +++ b/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js @@ -1722,20 +1722,20 @@ class Trainingjobsetting extends Component { flagPageEditstwo:releasetime, flagPageEditsthrees:deadline, flagPageEditsfor:endtime, - completionefficiencyscore:true, + completionefficiencyscore:false, work_efficiencys:this.state.work_efficiencys, unifiedsetting:this.state.unifiedsetting, - latedeductiontwo:20, + latedeductiontwo:0, }); //均分比例 try { - if(this.state.proportion==="均分比例"){ - this.Equalproportion(20); - - }else if(this.state.proportion==="经验值比例"){ - this.Empiricalvalueratio(20); - - } + // if(this.state.proportion==="均分比例"){ + // this.Equalproportion(20); + // + // }else if(this.state.proportion==="经验值比例"){ + // this.Empiricalvalueratio(20); + // + // } }catch (e) { } @@ -1838,21 +1838,21 @@ class Trainingjobsetting extends Component { flagPageEditstwo:releasetime, flagPageEditsthrees:deadline, flagPageEditsfor:endtime, - completionefficiencyscore:true, + completionefficiencyscore:false, work_efficiencys:datas.data.work_efficiency, unifiedsetting:datas.data.unified_setting, - latedeductiontwo:20, + latedeductiontwo:0, }); //均分比例 // result.data.shixun_evaluation === 0 ? "均分比例" : result.data.shixun_evaluation === 1 ? "经验值比例" : result.data.shixun_evaluation === 2 ? try { - if(datas.data.shixun_evaluation === 0){ - this.Equalproportion(20); - - }else if(datas.data.shixun_evaluation === 1){ - this.Empiricalvalueratio(20); - - } + // if(datas.data.shixun_evaluation === 0){ + // this.Equalproportion(20); + // + // }else if(datas.data.shixun_evaluation === 1){ + // this.Empiricalvalueratio(20); + // + // } }catch (e) { console.log(1); console.log(e); From 71b6c85d09cb92925ab34a303250df2ffdccdcc8 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Fri, 11 Oct 2019 17:42:13 +0800 Subject: [PATCH 23/84] updataleftNavfun --- public/react/src/modules/courses/members/studentsList.js | 1 + 1 file changed, 1 insertion(+) diff --git a/public/react/src/modules/courses/members/studentsList.js b/public/react/src/modules/courses/members/studentsList.js index 5c56afbe0..175aefb6a 100644 --- a/public/react/src/modules/courses/members/studentsList.js +++ b/public/react/src/modules/courses/members/studentsList.js @@ -557,6 +557,7 @@ class studentsList extends Component{ }) if (response && response.data.status == 0) { this.props.showNotification('加入成功') + this.props.updataleftNavfun() this.fetchAll() } } From 891dae66a7643879c44a9d5362787b081c19878a Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 11 Oct 2019 17:42:24 +0800 Subject: [PATCH 24/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/homework_commons_controller.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index 735798d38..d209e0b38 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -161,16 +161,16 @@ class HomeworkCommonsController < ApplicationController # 作品状态 0: 未提交, 1 按时提交, 2 延迟提交 if params[:work_status].present? work_status = params[:work_status].map{|status| status.to_i} - all_student_works = @student_works + all_student_works = @student_works.left_joins(:myshixun) @student_works = all_student_works.where(work_status: work_status) if work_status.include?(3) - ids = all_student_works.joins(:myshixun).where(myshixuns: {status: 0}).pluck(:id) - @student_works = @student_works.or(all_student_works.where(work_status: 0)).or(all_student_works.where(id: ids)) + # ids = all_student_works.joins(:myshixun).where(myshixuns: {status: 0}).pluck(:id) + @student_works = @student_works.or(all_student_works.where(work_status: 0)).or(all_student_works.where(myshixuns: {status: 0})) end if work_status.include?(4) - ids = all_student_works.joins(:myshixun).where(myshixuns: {status: 1}).pluck(:id) - @student_works = @student_works.or(all_student_works.where(id: ids)) + # ids = all_student_works.joins(:myshixun).where(myshixuns: {status: 1}).pluck(:id) + @student_works = @student_works.or(all_student_works.where(myshixuns: {status: 1})) end end From 7c975c9092f3bc3bddeebc4e0f318f6419ea75a0 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 11 Oct 2019 17:45:40 +0800 Subject: [PATCH 25/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/homework_commons_controller.rb | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index d209e0b38..83b80bec4 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -164,14 +164,8 @@ class HomeworkCommonsController < ApplicationController all_student_works = @student_works.left_joins(:myshixun) @student_works = all_student_works.where(work_status: work_status) - if work_status.include?(3) - # ids = all_student_works.joins(:myshixun).where(myshixuns: {status: 0}).pluck(:id) - @student_works = @student_works.or(all_student_works.where(work_status: 0)).or(all_student_works.where(myshixuns: {status: 0})) - end - if work_status.include?(4) - # ids = all_student_works.joins(:myshixun).where(myshixuns: {status: 1}).pluck(:id) - @student_works = @student_works.or(all_student_works.where(myshixuns: {status: 1})) - end + @student_works = @student_works.or(all_student_works.where(work_status: 0)).or(all_student_works.where(myshixuns: {status: 0})) if work_status.include?(3) + @student_works = @student_works.or(all_student_works.where(myshixuns: {status: 1})) if work_status.include?(4) end # 分班情况 From d3d43491e0c0743ad91e35c97c9b20db0b74ba2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Fri, 11 Oct 2019 18:04:29 +0800 Subject: [PATCH 26/84] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=95=88=E7=8E=87?= =?UTF-8?q?=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shixunHomework/Trainingjobsetting.js | 41 +++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js b/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js index 1b468d8ff..da1408d4a 100644 --- a/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js +++ b/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js @@ -1013,18 +1013,17 @@ class Trainingjobsetting extends Component { //完成效率评分占比 onChangeeffectiveness = (e) => { if( e.target.checked === true){ - this.state.latedeductiontwo=20; this.setState({ completionefficiencyscore: e.target.checked, work_efficiencys:e.target.checked, - latedeductiontwo: 20, + latedeductiontwo: 0, }) //均分比例 if(this.state.proportion==="均分比例"){ - this.Equalproportion(20); + this.Equalproportion(0); }else if(this.state.proportion==="经验值比例"){ - this.Empiricalvalueratio(20); + this.Empiricalvalueratio(0); } @@ -1722,20 +1721,20 @@ class Trainingjobsetting extends Component { flagPageEditstwo:releasetime, flagPageEditsthrees:deadline, flagPageEditsfor:endtime, - completionefficiencyscore:false, + completionefficiencyscore:true, work_efficiencys:this.state.work_efficiencys, unifiedsetting:this.state.unifiedsetting, - latedeductiontwo:0, + latedeductiontwo:this.state.latedeductiontwo, }); //均分比例 try { - // if(this.state.proportion==="均分比例"){ - // this.Equalproportion(20); - // - // }else if(this.state.proportion==="经验值比例"){ - // this.Empiricalvalueratio(20); - // - // } + if(this.state.proportion==="均分比例"){ + this.Equalproportion(this.state.latedeductiontwo); + + }else if(this.state.proportion==="经验值比例"){ + this.Empiricalvalueratio(this.state.latedeductiontwo); + + } }catch (e) { } @@ -1841,18 +1840,18 @@ class Trainingjobsetting extends Component { completionefficiencyscore:false, work_efficiencys:datas.data.work_efficiency, unifiedsetting:datas.data.unified_setting, - latedeductiontwo:0, + latedeductiontwo:datas.data.eff_score, }); //均分比例 // result.data.shixun_evaluation === 0 ? "均分比例" : result.data.shixun_evaluation === 1 ? "经验值比例" : result.data.shixun_evaluation === 2 ? try { - // if(datas.data.shixun_evaluation === 0){ - // this.Equalproportion(20); - // - // }else if(datas.data.shixun_evaluation === 1){ - // this.Empiricalvalueratio(20); - // - // } + if(datas.data.shixun_evaluation === 0){ + this.Equalproportion(datas.data.eff_score); + + }else if(datas.data.shixun_evaluation === 1){ + this.Empiricalvalueratio(datas.data.eff_score); + + } }catch (e) { console.log(1); console.log(e); From a5d7d5159a9e9170330a3b4a27d3dfe290ab0931 Mon Sep 17 00:00:00 2001 From: caishi <1149225589@qq.com> Date: Fri, 11 Oct 2019 18:14:00 +0800 Subject: [PATCH 27/84] =?UTF-8?q?=E5=88=86=E7=8F=AD=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/modules/courses/members/studentsList.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/react/src/modules/courses/members/studentsList.js b/public/react/src/modules/courses/members/studentsList.js index 175aefb6a..3a5a55b71 100644 --- a/public/react/src/modules/courses/members/studentsList.js +++ b/public/react/src/modules/courses/members/studentsList.js @@ -26,11 +26,11 @@ const buildColumns = (that,isParent) => { let showSorter = isParent==true const courseId = that.props.match.params.coursesId const columns=[{ - title: '序号', + title: '序号1', dataIndex: 'id', key: 'id', align:'center', - width:"10%", + width:"8%", className:"color-grey-6", render: (id, student, index) => { return (that.state.page - 1) * 20 + index + 1 @@ -143,7 +143,7 @@ const buildColumns = (that,isParent) => { columns.push({ title: '操作', key: 'action', - width: '20%', + width: '22%', align:'center', render: (text, record) => { return ( From d7c5c4f5e9f53e5b0c01d4be3e83860989daaf0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Fri, 11 Oct 2019 18:14:47 +0800 Subject: [PATCH 28/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/modules/courses/shixunHomework/ShixunhomeWorkItem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/react/src/modules/courses/shixunHomework/ShixunhomeWorkItem.js b/public/react/src/modules/courses/shixunHomework/ShixunhomeWorkItem.js index 01bcae9a8..88d143011 100644 --- a/public/react/src/modules/courses/shixunHomework/ShixunhomeWorkItem.js +++ b/public/react/src/modules/courses/shixunHomework/ShixunhomeWorkItem.js @@ -381,7 +381,7 @@ class ShixunhomeWorkItem extends Component{ { discussMessage && discussMessage.upper_category_name && 22 }> - { {discussMessage.upper_category_name}} + { {discussMessage.upper_category_name}} } From 9b8a20311c69894fd3668767e246fceaacdd3646 Mon Sep 17 00:00:00 2001 From: p31729568 Date: Sat, 12 Oct 2019 08:42:11 +0800 Subject: [PATCH 29/84] admins: laboratory manage --- .../javascripts/admins/laboratories/edit.js | 86 ++++++ .../javascripts/admins/laboratories/index.js | 164 ++++++++++++ .../stylesheets/admins/laboratories.scss | 99 +++++++ .../admins/laboratories_controller.rb | 32 +++ .../admins/laboratory_settings_controller.rb | 20 ++ .../admins/laboratory_users_controller.rb | 19 ++ app/controllers/application_controller.rb | 1 + app/controllers/concerns/laboratory_helper.rb | 15 ++ app/controllers/settings_controller.rb | 5 + app/libs/util/file_manage.rb | 28 +- app/models/laboratory.rb | 26 ++ app/models/laboratory_setting.rb | 54 ++++ app/models/laboratory_user.rb | 4 + app/queries/admins/laboratory_query.rb | 23 ++ .../admins/add_laboratory_user_service.rb | 19 ++ .../admins/create_laboratory_service.rb | 20 ++ .../admins/save_laboratory_setting_service.rb | 51 ++++ app/services/application_service.rb | 6 + app/views/admins/laboratories/index.html.erb | 19 ++ app/views/admins/laboratories/index.js.erb | 1 + .../_add_laboratory_user_modal.html.erb | 30 +++ .../shared/_create_laboratory_modal.html.erb | 28 ++ .../shared/_laboratory_item.html.erb | 40 +++ .../admins/laboratories/shared/_list.html.erb | 25 ++ .../admins/laboratory_settings/show.html.erb | 131 +++++++++ .../admins/laboratory_users/create.js.erb | 4 + .../admins/laboratory_users/destroy.js.erb | 2 + app/views/admins/shared/_sidebar.html.erb | 12 +- app/views/settings/show.json.jbuilder | 12 + config/admins/sidebar.yml | 3 +- config/locales/laboratories/zh-CN.yml | 7 + config/routes.rb | 7 +- .../20191010011844_create_laboratories.rb | 12 + .../20191010012226_create_laboratory_users.rb | 8 + ...191010063403_create_laboratory_settings.rb | 9 + ...0191011025619_init_edu_coder_laboratory.rb | 22 ++ ...fest-4627fa5586ef7fed55ca286af7c028e9.json | 2 +- ...44a8630b10354ab4e56fecc4dffcc713796cc.css} | 108 ++++++++ ...8630b10354ab4e56fecc4dffcc713796cc.css.gz} | Bin 73182 -> 73552 bytes ...00df04fef38b61530041a6dbe375ef0f0ae888.js} | 250 ++++++++++++++++++ ...f04fef38b61530041a6dbe375ef0f0ae888.js.gz} | Bin 960283 -> 961083 bytes ...2fcfba53d32a2df148e64e1d961c10651c6af.css} | 215 +++++++++++++++ ...cfba53d32a2df148e64e1d961c10651c6af.css.gz | Bin 0 -> 158390 bytes ...9cf421480fd0a3785d1956953bf94a1e8bd.css.gz | Bin 158001 -> 0 bytes ...e1c2b2e60336f0f01e19f0581663918708fb.js.gz | Bin 146867 -> 146867 bytes ...7815c096c25e0ab74aba341ae916166cd287.js.gz | Bin 711176 -> 711176 bytes 46 files changed, 1593 insertions(+), 26 deletions(-) create mode 100644 app/assets/javascripts/admins/laboratories/edit.js create mode 100644 app/assets/javascripts/admins/laboratories/index.js create mode 100644 app/assets/stylesheets/admins/laboratories.scss create mode 100644 app/controllers/admins/laboratories_controller.rb create mode 100644 app/controllers/admins/laboratory_settings_controller.rb create mode 100644 app/controllers/admins/laboratory_users_controller.rb create mode 100644 app/controllers/concerns/laboratory_helper.rb create mode 100644 app/controllers/settings_controller.rb create mode 100644 app/models/laboratory.rb create mode 100644 app/models/laboratory_setting.rb create mode 100644 app/models/laboratory_user.rb create mode 100644 app/queries/admins/laboratory_query.rb create mode 100644 app/services/admins/add_laboratory_user_service.rb create mode 100644 app/services/admins/create_laboratory_service.rb create mode 100644 app/services/admins/save_laboratory_setting_service.rb create mode 100644 app/views/admins/laboratories/index.html.erb create mode 100644 app/views/admins/laboratories/index.js.erb create mode 100644 app/views/admins/laboratories/shared/_add_laboratory_user_modal.html.erb create mode 100644 app/views/admins/laboratories/shared/_create_laboratory_modal.html.erb create mode 100644 app/views/admins/laboratories/shared/_laboratory_item.html.erb create mode 100644 app/views/admins/laboratories/shared/_list.html.erb create mode 100644 app/views/admins/laboratory_settings/show.html.erb create mode 100644 app/views/admins/laboratory_users/create.js.erb create mode 100644 app/views/admins/laboratory_users/destroy.js.erb create mode 100644 app/views/settings/show.json.jbuilder create mode 100644 config/locales/laboratories/zh-CN.yml create mode 100644 db/migrate/20191010011844_create_laboratories.rb create mode 100644 db/migrate/20191010012226_create_laboratory_users.rb create mode 100644 db/migrate/20191010063403_create_laboratory_settings.rb create mode 100644 db/migrate/20191011025619_init_edu_coder_laboratory.rb rename public/assets/{admin-896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7.css => admin-2c2854b9a02158ded5a809aaf7144a8630b10354ab4e56fecc4dffcc713796cc.css} (99%) rename public/assets/{admin-896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7.css.gz => admin-2c2854b9a02158ded5a809aaf7144a8630b10354ab4e56fecc4dffcc713796cc.css.gz} (78%) rename public/assets/{admin-978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a.js => admin-2cdb23442fa735025385b88f2900df04fef38b61530041a6dbe375ef0f0ae888.js} (99%) rename public/assets/{admin-978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a.js.gz => admin-2cdb23442fa735025385b88f2900df04fef38b61530041a6dbe375ef0f0ae888.js.gz} (98%) rename public/assets/{application-97f313e9bb7d25476649f7d7215959cf421480fd0a3785d1956953bf94a1e8bd.css => application-50059ae929866043b47015128702fcfba53d32a2df148e64e1d961c10651c6af.css} (99%) create mode 100644 public/assets/application-50059ae929866043b47015128702fcfba53d32a2df148e64e1d961c10651c6af.css.gz delete mode 100644 public/assets/application-97f313e9bb7d25476649f7d7215959cf421480fd0a3785d1956953bf94a1e8bd.css.gz diff --git a/app/assets/javascripts/admins/laboratories/edit.js b/app/assets/javascripts/admins/laboratories/edit.js new file mode 100644 index 000000000..63b26bbe0 --- /dev/null +++ b/app/assets/javascripts/admins/laboratories/edit.js @@ -0,0 +1,86 @@ +$(document).on('turbolinks:load', function() { + if ($('body.admins-laboratory-settings-show-page, body.admins-laboratory-settings-update-page').length > 0) { + var $container = $('.edit-laboratory-setting-container'); + var $form = $container.find('.edit_laboratory'); + + $('.logo-item-left').on("change", 'input[type="file"]', function () { + var $fileInput = $(this); + var file = this.files[0]; + var imageType = /image.*/; + if (file && file.type.match(imageType)) { + var reader = new FileReader(); + reader.onload = function () { + var $box = $fileInput.parent(); + $box.find('img').attr('src', reader.result).css('display', 'block'); + $box.addClass('has-img'); + }; + reader.readAsDataURL(file); + } else { + } + }); + + createMDEditor('laboratory-footer-editor', { height: 200, placeholder: '请输入备案信息' }); + + $form.validate({ + errorElement: 'span', + errorClass: 'danger text-danger', + errorPlacement:function(error,element){ + if(element.parent().hasClass("input-group")){ + element.parent().after(error); + }else{ + element.after(error) + } + }, + rules: { + identifier: { + required: true, + checkSite: true + }, + name: { + required: true + } + } + }); + $.validator.addMethod("checkSite",function(value,element,params){ + var checkSite = /^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/; + return this.optional(element)||(checkSite.test(value + '.educoder.com')); + },"域名不合法!"); + + $form.on('click', '.submit-btn', function(){ + $form.find('.submit-btn').attr('disabled', 'disabled'); + $form.find('.error').html(''); + var valid = $form.valid(); + + $('input[name="navbar[][name]"]').each(function(_, e){ + var $ele = $(e); + if($ele.val() === undefined || $ele.val().length === 0){ + $ele.addClass('danger text-danger'); + valid = false; + } else { + $ele.removeClass('danger text-danger'); + } + }); + + if(!valid) return; + $.ajax({ + method: 'PATCH', + dataType: 'json', + url: $form.attr('action'), + data: new FormData($form[0]), + processData: false, + contentType: false, + success: function(data){ + $.notify({ message: '保存成功' }); + window.location.reload(); + }, + error: function(res){ + var data = res.responseJSON; + $form.find('.error').html(data.message); + }, + complete: function(){ + $form.find('.submit-btn').attr('disabled', false); + } + }); + }) + } +}); \ No newline at end of file diff --git a/app/assets/javascripts/admins/laboratories/index.js b/app/assets/javascripts/admins/laboratories/index.js new file mode 100644 index 000000000..abb7cb72d --- /dev/null +++ b/app/assets/javascripts/admins/laboratories/index.js @@ -0,0 +1,164 @@ +$(document).on('turbolinks:load', function() { + if ($('body.admins-laboratories-index-page').length > 0) { + var $searchContainer = $('.laboratory-list-form'); + var $searchForm = $searchContainer.find('form.search-form'); + var $list = $('.laboratory-list-container'); + + // ============== 新建 =============== + var $modal = $('.modal.admin-create-laboratory-modal'); + var $form = $modal.find('form.admin-create-laboratory-form'); + var $schoolSelect = $modal.find('.school-select'); + + $form.validate({ + errorElement: 'span', + errorClass: 'danger text-danger', + rules: { + school_id: { + required: true + } + }, + messages: { + school_id: { + required: '请选择所属单位' + } + } + }); + + // modal ready fire + $modal.on('show.bs.modal', function () { + $schoolSelect.select2('val', ' '); + }); + + // ************** 学校选择 ************* + var matcherFunc = function(params, data){ + if ($.trim(params.term) === '') { + return data; + } + if (typeof data.text === 'undefined') { + return null; + } + + if (data.name && data.name.indexOf(params.term) > -1) { + var modifiedData = $.extend({}, data, true); + return modifiedData; + } + + // Return `null` if the term should not be displayed + return null; + }; + + var defineSchoolSelect = function(schools) { + $schoolSelect.select2({ + theme: 'bootstrap4', + placeholder: '请选择单位', + minimumInputLength: 1, + data: schools, + templateResult: function (item) { + if(!item.id || item.id === '') return item.text; + return item.name; + }, + templateSelection: function(item){ + if (item.id) { + $('#school_id').val(item.id); + } + return item.name || item.text; + }, + matcher: matcherFunc + }); + } + + $.ajax({ + url: '/api/schools/for_option.json', + dataType: 'json', + type: 'GET', + success: function(data) { + defineSchoolSelect(data.schools); + } + }); + + $modal.on('click', '.submit-btn', function(){ + $form.find('.error').html(''); + + if ($form.valid()) { + var url = $form.data('url'); + + $.ajax({ + method: 'POST', + dataType: 'json', + url: url, + data: $form.serialize(), + success: function(){ + $.notify({ message: '创建成功' }); + $modal.modal('hide'); + + setTimeout(function(){ + window.location.reload(); + }, 500); + }, + error: function(res){ + var data = res.responseJSON; + $form.find('.error').html(data.message); + } + }); + } + }); + + // ============= 添加管理员 ============== + var $addMemberModal = $('.admin-add-laboratory-user-modal'); + var $addMemberForm = $addMemberModal.find('.admin-add-laboratory-user-form'); + var $memberSelect = $addMemberModal.find('.laboratory-user-select'); + var $laboratoryIdInput = $addMemberForm.find('input[name="laboratory_id"]') + + $addMemberModal.on('show.bs.modal', function(event){ + var $link = $(event.relatedTarget); + var laboratoryId = $link.data('laboratory-id'); + $laboratoryIdInput.val(laboratoryId); + + $memberSelect.select2('val', ' '); + }); + + $memberSelect.select2({ + theme: 'bootstrap4', + placeholder: '请输入要添加的管理员姓名', + multiple: true, + minimumInputLength: 1, + ajax: { + delay: 500, + url: '/admins/users', + dataType: 'json', + data: function(params){ + return { name: params.term }; + }, + processResults: function(data){ + return { results: data.users } + } + }, + templateResult: function (item) { + if(!item.id || item.id === '') return item.text; + return item.real_name; + }, + templateSelection: function(item){ + if (item.id) { + } + return item.real_name || item.text; + } + }); + + $addMemberModal.on('click', '.submit-btn', function(){ + $addMemberForm.find('.error').html(''); + + var laboratoryId = $laboratoryIdInput.val(); + var memberIds = $memberSelect.val(); + if (laboratoryId && memberIds && memberIds.length > 0) { + $.ajax({ + method: 'POST', + dataType: 'script', + url: '/admins/laboratories/' + laboratoryId + '/laboratory_user', + data: { user_ids: memberIds } + }); + } else { + $addMemberModal.modal('hide'); + } + }); + } +}); \ No newline at end of file diff --git a/app/assets/stylesheets/admins/laboratories.scss b/app/assets/stylesheets/admins/laboratories.scss new file mode 100644 index 000000000..ad5c8c5a8 --- /dev/null +++ b/app/assets/stylesheets/admins/laboratories.scss @@ -0,0 +1,99 @@ +.admins-laboratories-index-page { + .laboratory-list-table { + .member-container { + .laboratory-user { + display: flex; + justify-content: center; + flex-wrap: wrap; + + .laboratory-user-item { + display: flex; + align-items: center; + height: 22px; + line-height: 22px; + padding: 2px 5px; + margin: 2px 2px; + border: 1px solid #91D5FF; + background-color: #E6F7FF; + color: #91D5FF; + border-radius: 4px; + } + } + } + } +} +.admins-laboratory-settings-show-page, .admins-laboratory-settings-update-page { + .edit-laboratory-setting-container { + .logo-item { + display: flex; + + &-img { + display: block; + width: 80px; + height: 80px; + } + + &-upload { + cursor: pointer; + position: absolute; + top: 0; + width: 80px; + height: 80px; + background: #F5F5F5; + border: 1px solid #E5E5E5; + + &::before { + content: ''; + position: absolute; + top: 27px; + left: 39px; + width: 2px; + height: 26px; + background: #E5E5E5; + } + + &::after { + content: ''; + position: absolute; + top: 39px; + left: 27px; + width: 26px; + height: 2px; + background: #E5E5E5; + } + } + + &-left { + position: relative; + width: 80px; + height: 80px; + + &.has-img { + .logo-item-upload { + display: none; + } + + &:hover { + .logo-item-upload { + display: block; + background: rgba(145, 145, 145, 0.8); + } + } + } + } + + &-right { + display: flex; + flex-direction: column; + justify-content: space-between; + color: #777777; + font-size: 12px; + } + + &-title { + color: #23272B; + font-size: 14px; + } + } + } +} \ No newline at end of file diff --git a/app/controllers/admins/laboratories_controller.rb b/app/controllers/admins/laboratories_controller.rb new file mode 100644 index 000000000..e393c6677 --- /dev/null +++ b/app/controllers/admins/laboratories_controller.rb @@ -0,0 +1,32 @@ +class Admins::LaboratoriesController < Admins::BaseController + def index + params[:sort_by] = params[:sort_by].presence || 'id' + params[:sort_direction] = params[:sort_direction].presence || 'desc' + + laboratories = Admins::LaboratoryQuery.call(params) + @laboratories = paginate laboratories.preload(:school, :laboratory_users) + end + + def create + Admins::CreateLaboratoryService.call(create_params) + render_ok + rescue Admins::CreateLaboratoryService::Error => ex + render_error(ex.message) + end + + def destroy + current_laboratory.destroy! + + render_delete_success + end + + private + + def current_laboratory + @_current_laboratory ||= Laboratory.find(params[:id]) + end + + def create_params + params.permit(:school_id) + end +end \ No newline at end of file diff --git a/app/controllers/admins/laboratory_settings_controller.rb b/app/controllers/admins/laboratory_settings_controller.rb new file mode 100644 index 000000000..f9676bfd3 --- /dev/null +++ b/app/controllers/admins/laboratory_settings_controller.rb @@ -0,0 +1,20 @@ +class Admins::LaboratorySettingsController < Admins::BaseController + def show + @laboratory = current_laboratory + end + + def update + Admins::SaveLaboratorySettingService.call(current_laboratory, form_params) + render_ok + end + + private + + def current_laboratory + @_current_laboratory ||= Laboratory.find(params[:laboratory_id]) + end + + def form_params + params.permit(:identifier, :name, :nav_logo, :login_logo, :tab_logo, :footer, navbar: %i[name link hidden]) + end +end \ No newline at end of file diff --git a/app/controllers/admins/laboratory_users_controller.rb b/app/controllers/admins/laboratory_users_controller.rb new file mode 100644 index 000000000..36e389a3e --- /dev/null +++ b/app/controllers/admins/laboratory_users_controller.rb @@ -0,0 +1,19 @@ +class Admins::LaboratoryUsersController < Admins::BaseController + helper_method :current_laboratory + + def create + Admins::AddLaboratoryUserService.call(current_laboratory, params.permit(user_ids: [])) + current_laboratory.reload + end + + def destroy + @laboratory_user = current_laboratory.laboratory_users.find_by(user_id: params[:user_id]) + @laboratory_user.destroy! if @laboratory_user.present? + end + + private + + def current_laboratory + @_current_laboratory ||= Laboratory.find(params[:laboratory_id]) + end +end \ No newline at end of file diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index b539a0c68..53e1be6e7 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -7,6 +7,7 @@ class ApplicationController < ActionController::Base include ControllerRescueHandler include GitHelper include LoggerHelper + include LaboratoryHelper protect_from_forgery prepend: true, unless: -> { request.format.json? } diff --git a/app/controllers/concerns/laboratory_helper.rb b/app/controllers/concerns/laboratory_helper.rb new file mode 100644 index 000000000..fbb18b36d --- /dev/null +++ b/app/controllers/concerns/laboratory_helper.rb @@ -0,0 +1,15 @@ +module LaboratoryHelper + extend ActiveSupport::Concern + + included do + helper_method :default_setting + end + + def current_laboratory + @_current_laboratory ||= (Laboratory.find_by_subdomain(request.subdomain) || Laboratory.find(1)) + end + + def default_setting + @_default_setting ||= LaboratorySetting.find_by(laboratory_id: 1) + end +end \ No newline at end of file diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb new file mode 100644 index 000000000..ce5481147 --- /dev/null +++ b/app/controllers/settings_controller.rb @@ -0,0 +1,5 @@ +class SettingsController < ApplicationController + def show + @laboratory = current_laboratory + end +end \ No newline at end of file diff --git a/app/libs/util/file_manage.rb b/app/libs/util/file_manage.rb index 822bfca4f..2f87a3e86 100644 --- a/app/libs/util/file_manage.rb +++ b/app/libs/util/file_manage.rb @@ -10,31 +10,35 @@ module Util::FileManage File.join(Rails.root, "public", "images", relative_path) end - def disk_filename(source_type, source_id,image_file=nil) - File.join(storage_path, "#{source_type}", "#{source_id}") + def disk_filename(source_type, source_id, suffix=nil) + File.join(storage_path, "#{source_type}", "#{source_id}#{suffix}") end - def exist?(source_type, source_id) - File.exist?(disk_filename(source_type, source_id)) + def source_disk_filename(source, suffix=nil) + disk_filename(source.class.name, source.id, suffix) end - def exists?(source) - File.exist?(disk_filename(source.class, source.id)) + def exist?(source_type, source_id, suffix=nil) + File.exist?(disk_filename(source_type, source_id, suffix)) + end + + def exists?(source, suffix=nil) + File.exist?(disk_filename(source.class, source.id, suffix)) end def disk_file_url(source_type, source_id, suffix = nil) - t = ctime(source_type, source_id) + t = ctime(source_type, source_id, suffix) File.join('/images', relative_path, "#{source_type}", "#{source_id}#{suffix}") + "?t=#{t}" end - def source_disk_file_url(source) - disk_file_url(source.class, source.id) + def source_disk_file_url(source, suffix=nil) + disk_file_url(source.class, source.id, suffix) end - def ctime(source_type, source_id) - return nil unless exist?(source_type, source_id) + def ctime(source_type, source_id, suffix) + return nil unless exist?(source_type, source_id, suffix) - File.ctime(disk_filename(source_type, source_id)).to_i + File.ctime(disk_filename(source_type, source_id, suffix)).to_i end def disk_auth_filename(source_type, source_id, type) diff --git a/app/models/laboratory.rb b/app/models/laboratory.rb new file mode 100644 index 000000000..53e66ece0 --- /dev/null +++ b/app/models/laboratory.rb @@ -0,0 +1,26 @@ +class Laboratory < ApplicationRecord + belongs_to :school, optional: true + + has_many :laboratory_users, dependent: :destroy + has_many :users, through: :laboratory_users, source: :user + + has_one :laboratory_setting, dependent: :destroy + + validates :identifier, uniqueness: { case_sensitive: false }, allow_nil: true + + def site + rails_env = EduSetting.get('rails_env') + suffix = rails_env && rails_env != 'production' ? ".#{rails_env}.educoder.net" : '.educoder.net' + + identifier ? "#{identifier}#{suffix}" : '' + end + + def self.find_by_subdomain(subdomain) + return if subdomain.blank? + + rails_env = EduSetting.get('rails_env') + subdomain = subdomain.slice(0, subdomain.size - rails_env.size - 1) if subdomain.end_with?(rails_env) # winse.dev => winse + + find_by_identifier(subdomain) + end +end \ No newline at end of file diff --git a/app/models/laboratory_setting.rb b/app/models/laboratory_setting.rb new file mode 100644 index 000000000..32848dca2 --- /dev/null +++ b/app/models/laboratory_setting.rb @@ -0,0 +1,54 @@ +class LaboratorySetting < ApplicationRecord + belongs_to :laboratory + + serialize :config, JSON + + %i[name navbar footer].each do |method_name| + define_method method_name do + config&.[](method_name.to_s) + end + + define_method "#{method_name}=" do |value| + self.config ||= {} + config.[]=(method_name.to_s, value) + end + end + + def login_logo_url + logo_url('login') + end + + def nav_logo_url + logo_url('nav') + end + + def tab_logo_url + logo_url('tab') + end + + def default_navbar + self.class.default_config[:navbar] + end + + private + + def logo_url(type) + return nil unless Util::FileManage.exists?(self, type) + Util::FileManage.source_disk_file_url(self, type) + end + + def self.default_config + { + name: nil, + navbar: [ + { 'name' => '实践课程', 'link' => '/paths', 'hidden' => false }, + { 'name' => '翻转课堂', 'link' => '/courses', 'hidden' => false }, + { 'name' => '实现项目', 'link' => '/shixuns', 'hidden' => false }, + { 'name' => '在线竞赛', 'link' => '/competitions', 'hidden' => false }, + { 'name' => '教学案例', 'link' => '/moop_cases', 'hidden' => false }, + { 'name' => '交流问答', 'link' => '/forums', 'hidden' => false }, + ], + footer: nil + } + end +end \ No newline at end of file diff --git a/app/models/laboratory_user.rb b/app/models/laboratory_user.rb new file mode 100644 index 000000000..be6c0c4dd --- /dev/null +++ b/app/models/laboratory_user.rb @@ -0,0 +1,4 @@ +class LaboratoryUser < ApplicationRecord + belongs_to :laboratory + belongs_to :user +end \ No newline at end of file diff --git a/app/queries/admins/laboratory_query.rb b/app/queries/admins/laboratory_query.rb new file mode 100644 index 000000000..21020216b --- /dev/null +++ b/app/queries/admins/laboratory_query.rb @@ -0,0 +1,23 @@ +class Admins::LaboratoryQuery < ApplicationQuery + include CustomSortable + + attr_reader :params + + sort_columns :id, default_by: :id, default_direction: :desc + + def initialize(params) + @params = params + end + + def call + laboratories = Laboratory.all + + keyword = strip_param(:keyword) + if keyword.present? + like_sql = 'schools.name LIKE :keyword OR laboratories.identifier LIKE :keyword' + laboratories = laboratories.joins(:school).where(like_sql, keyword: "%#{keyword}%") + end + + custom_sort laboratories, params[:sort_by], params[:sort_direction] + end +end \ No newline at end of file diff --git a/app/services/admins/add_laboratory_user_service.rb b/app/services/admins/add_laboratory_user_service.rb new file mode 100644 index 000000000..16df30880 --- /dev/null +++ b/app/services/admins/add_laboratory_user_service.rb @@ -0,0 +1,19 @@ +class Admins::AddLaboratoryUserService < ApplicationService + attr_reader :laboratory, :params + + def initialize(laboratory, params) + @laboratory = laboratory + @params = params + end + + def call + columns = %i[] + LaboratoryUser.bulk_insert(*columns) do |worker| + Array.wrap(params[:user_ids]).compact.each do |user_id| + next if laboratory.laboratory_users.exists?(user_id: user_id) + + worker.add(laboratory_id: laboratory.id, user_id: user_id) + end + end + end +end \ No newline at end of file diff --git a/app/services/admins/create_laboratory_service.rb b/app/services/admins/create_laboratory_service.rb new file mode 100644 index 000000000..98300d5af --- /dev/null +++ b/app/services/admins/create_laboratory_service.rb @@ -0,0 +1,20 @@ +class Admins::CreateLaboratoryService < ApplicationService + Error = Class.new(StandardError) + + attr_reader :params + + def initialize(params) + @params = params + end + + def call + raise Error, '单位不能为空' if params[:school_id].blank? + raise Error, '该单位已存在' if Laboratory.exists?(school_id: params[:school_id]) + + ActiveRecord::Base.transaction do + laboratory = Laboratory.create!(school_id: params[:school_id]) + + laboratory.create_laboratory_setting! + end + end +end \ No newline at end of file diff --git a/app/services/admins/save_laboratory_setting_service.rb b/app/services/admins/save_laboratory_setting_service.rb new file mode 100644 index 000000000..00e202cd9 --- /dev/null +++ b/app/services/admins/save_laboratory_setting_service.rb @@ -0,0 +1,51 @@ +class Admins::SaveLaboratorySettingService < ApplicationService + attr_reader :laboratory, :laboratory_setting, :params + + def initialize(laboratory, params) + @params = params + @laboratory = laboratory + @laboratory_setting = laboratory.laboratory_setting + end + + def call + ActiveRecord::Base.transaction do + laboratory.identifier = strip params[:identifier] + laboratory_setting.name = strip params[:name] + laboratory_setting.navbar = navbar_config + laboratory_setting.footer = strip params[:footer] + + laboratory.save! + laboratory_setting.save! + + deal_logo_file + end + + laboratory + end + + private + + def navbar_config + params[:navbar].map do |nav| + hash = {} + hash[:name] = strip nav[:name] + hash[:link] = strip nav[:link] + hash[:hidden] = nav[:hidden].to_s == 0 + hash + end + end + + def deal_logo_file + save_logo_file(params[:nav_logo], 'nav') + save_logo_file(params[:login_logo], 'login') + save_logo_file(params[:tab_logo], 'tab') + end + + def save_logo_file(file, type) + return unless file.present? && file.is_a?(ActionDispatch::Http::UploadedFile) + + file_path = Util::FileManage.source_disk_filename(laboratory_setting, type) + File.delete(file_path) if File.exist?(file_path) # 删除之前的文件 + Util.write_file(file, file_path) + end +end \ No newline at end of file diff --git a/app/services/application_service.rb b/app/services/application_service.rb index c6f66c098..8b3819017 100644 --- a/app/services/application_service.rb +++ b/app/services/application_service.rb @@ -1,3 +1,9 @@ class ApplicationService include Callable + + private + + def strip(str) + str.to_s.strip.presence + end end \ No newline at end of file diff --git a/app/views/admins/laboratories/index.html.erb b/app/views/admins/laboratories/index.html.erb new file mode 100644 index 000000000..012eed792 --- /dev/null +++ b/app/views/admins/laboratories/index.html.erb @@ -0,0 +1,19 @@ +<% define_admin_breadcrumbs do %> + <% add_admin_breadcrumb('云上实验室') %> +<% end %> + +
      + <%= form_tag(admins_laboratories_path(unsafe_params), method: :get, class: 'form-inline search-form flex-1', remote: true) do %> + <%= text_field_tag(:keyword, params[:keyword], class: 'form-control col-6 col-md-4 ml-3', placeholder: '学校名称/二级域名前缀检索') %> + <%= submit_tag('搜索', class: 'btn btn-primary ml-3', 'data-disable-with': '搜索中...') %> + <% end %> + + <%= javascript_void_link '新建', class: 'btn btn-primary', data: { toggle: 'modal', target: '.admin-create-laboratory-modal' } %> +
      + +
      + <%= render(partial: 'admins/laboratories/shared/list', locals: { laboratories: @laboratories }) %> +
      + +<%= render 'admins/laboratories/shared/create_laboratory_modal' %> +<%= render 'admins/laboratories/shared/add_laboratory_user_modal' %> \ No newline at end of file diff --git a/app/views/admins/laboratories/index.js.erb b/app/views/admins/laboratories/index.js.erb new file mode 100644 index 000000000..dc17c6a6d --- /dev/null +++ b/app/views/admins/laboratories/index.js.erb @@ -0,0 +1 @@ +$('.laboratory-list-container').html("<%= j(render partial: 'admins/laboratories/shared/list', locals: { laboratories: @laboratories }) %>"); \ No newline at end of file diff --git a/app/views/admins/laboratories/shared/_add_laboratory_user_modal.html.erb b/app/views/admins/laboratories/shared/_add_laboratory_user_modal.html.erb new file mode 100644 index 000000000..a13565cd6 --- /dev/null +++ b/app/views/admins/laboratories/shared/_add_laboratory_user_modal.html.erb @@ -0,0 +1,30 @@ + \ No newline at end of file diff --git a/app/views/admins/laboratories/shared/_create_laboratory_modal.html.erb b/app/views/admins/laboratories/shared/_create_laboratory_modal.html.erb new file mode 100644 index 000000000..0a77477d3 --- /dev/null +++ b/app/views/admins/laboratories/shared/_create_laboratory_modal.html.erb @@ -0,0 +1,28 @@ + \ No newline at end of file diff --git a/app/views/admins/laboratories/shared/_laboratory_item.html.erb b/app/views/admins/laboratories/shared/_laboratory_item.html.erb new file mode 100644 index 000000000..5dd97b549 --- /dev/null +++ b/app/views/admins/laboratories/shared/_laboratory_item.html.erb @@ -0,0 +1,40 @@ +<% school = laboratory.school %> +<%= school&.name || 'EduCoder主站' %> + + <% if laboratory.identifier %> + <%= link_to laboratory.site, "https://#{laboratory.site}", target: '_blank' %> + <% else %> + -- + <% end %> + + + <% if school && school.identifier.present? %> + <%= link_to school.identifier.to_s, statistics_college_path(school.identifier), target: '_blank' %> + <% else %> + -- + <% end %> + + +
      + <% laboratory.users.each do |user| %> + + <%= link_to user.real_name, "/users/#{user.login}", target: '_blank', data: { toggle: 'tooltip', title: '个人主页' } %> + <%= link_to(admins_laboratory_laboratory_user_path(laboratory, user_id: user.id), + method: :delete, remote: true, class: 'ml-1 delete-laboratory-user-action', + data: { confirm: '确认删除吗?' }) do %> + + <% end %> + + <% end %> +
      + +<%= laboratory.created_at.strftime('%Y-%m-%d %H:%M') %> + + <%= link_to '定制', admins_laboratory_laboratory_setting_path(laboratory) %> + + <% if school.present? && laboratory.id != 1 %> + <%= javascript_void_link '添加管理员', class: 'action', data: { laboratory_id: laboratory.id, toggle: 'modal', target: '.admin-add-laboratory-user-modal' } %> + + <%= delete_link '删除', admins_laboratory_path(laboratory, element: ".laboratory-item-#{laboratory.id}"), class: 'delete-laboratory-action' %> + <% end %> + \ No newline at end of file diff --git a/app/views/admins/laboratories/shared/_list.html.erb b/app/views/admins/laboratories/shared/_list.html.erb new file mode 100644 index 000000000..33a47eed7 --- /dev/null +++ b/app/views/admins/laboratories/shared/_list.html.erb @@ -0,0 +1,25 @@ + + + + + + + + + + + + + <% if laboratories.present? %> + <% laboratories.each do |laboratory| %> + + <%= render 'admins/laboratories/shared/laboratory_item', laboratory: laboratory %> + + <% end %> + <% else %> + <%= render 'admins/shared/no_data_for_table' %> + <% end %> + +
      单位名称域名统计链接管理员<%= sort_tag('创建时间', name: 'id', path: admins_laboratories_path) %>操作
      + +<%= render partial: 'admins/shared/paginate', locals: { objects: laboratories } %> \ No newline at end of file diff --git a/app/views/admins/laboratory_settings/show.html.erb b/app/views/admins/laboratory_settings/show.html.erb new file mode 100644 index 000000000..120bba6cb --- /dev/null +++ b/app/views/admins/laboratory_settings/show.html.erb @@ -0,0 +1,131 @@ +<% define_admin_breadcrumbs do %> + <% add_admin_breadcrumb('云上实验室', admins_laboratories_path) %> + <% add_admin_breadcrumb('单位定制') %> +<% end %> + +
      + <%= simple_form_for(@laboratory, url: admins_laboratory_laboratory_setting_path(@laboratory), method: 'patch', html: { enctype: 'multipart/form-data' }) do |f| %> + <% setting = @laboratory.laboratory_setting %> + +
      +
      网站域名设置
      + +
      +
      +
      + https:// +
      + <%= text_field_tag :identifier, @laboratory.identifier, + maxlength: 15, class: 'form-control font-16', + 'onKeyUp': 'value=value.replace(/[^\w\.\-\/]/ig,"").toLowerCase()', + style: 'text-transform:lowercase'%> +
      + <% rails_env = EduSetting.get('rails_env') %> + <%= rails_env && rails_env != 'production' ? ".#{rails_env}.educoder.net" : '.educoder.net' %> +
      +
      + <%# if @laboratory.errors && @laboratory.errors.key?(:identifier) %> + + <%# end %> +
      +
      + +
      +
      网站名称设置
      + +
      + <%= text_field_tag :name, setting.name, placeholder: '输入20个字以内的网站名称', maxlength: 20, class: 'form-control col-12 col-md-4' %> +
      +
      + +
      +
      Logo设置
      + +
      +
      + <% nav_logo_img = setting.nav_logo_url %> + +
      +
      网站导航logo
      +
      格式:PNG、JPG
      +
      尺寸:高度38px以内,宽等比例缩放
      +
      +
      + +
      + <% login_logo_img = setting.login_logo_url %> + +
      +
      登录页面logo
      +
      格式:PNG、JPG
      +
      尺寸:高度90px以内,宽等比例缩放
      +
      +
      + +
      + <% tab_logo_img = setting.tab_logo_url %> +
      + + <%= file_field_tag(:tab_logo, accept: 'image/x-icon', style: 'display: none', value: params[:tab_logo]) %> + +
      +
      +
      浏览器导航栏logo
      +
      格式:ico
      +
      尺寸:16*16 32*32 48*48 64*64
      +
      +
      +
      +
      + +
      +
      导航设置
      + +
      + + + + + + + + + + <% (setting.navbar || setting.default_navbar).each do |nav| %> + + + + + + <% end %> + +
      导航名称导航链接是否展示
      <%= text_field_tag('navbar[][name]', nav['name'], id: nil, class: 'form-control') %><%= text_field_tag('navbar[][link]', nav['link'], id: nil, class: 'form-control') %> + <%= check_box_tag('navbar[][hidden]', 0, !nav['hidden'], id: nil, class: 'font-16') %> +
      +
      +
      + +
      +
      底部备案信息设置
      + + +
      + +
      + +
      + <%= javascript_void_link '保存', class: 'btn btn-primary mr-3 px-4 submit-btn' %> + <%= link_to '取消', admins_laboratories_path, class: 'btn btn-secondary px-4' %> +
      + <% end %> +
      \ No newline at end of file diff --git a/app/views/admins/laboratory_users/create.js.erb b/app/views/admins/laboratory_users/create.js.erb new file mode 100644 index 000000000..f43fd7887 --- /dev/null +++ b/app/views/admins/laboratory_users/create.js.erb @@ -0,0 +1,4 @@ +$('.modal.admin-add-laboratory-user-modal').modal('hide'); +$.notify({ message: '操作成功' }); + +$('.laboratory-list-table .laboratory-item-<%= current_laboratory.id %>').html("<%= j(render partial: 'admins/laboratories/shared/laboratory_item', locals: { laboratory: current_laboratory }) %>") \ No newline at end of file diff --git a/app/views/admins/laboratory_users/destroy.js.erb b/app/views/admins/laboratory_users/destroy.js.erb new file mode 100644 index 000000000..16ef62910 --- /dev/null +++ b/app/views/admins/laboratory_users/destroy.js.erb @@ -0,0 +1,2 @@ +$.notify({ message: '操作成功' }); +$('.laboratory-list-container .laboratory-item-<%= current_laboratory.id %> .laboratory-user-item-<%= @laboratory_user.user_id %>').remove(); \ No newline at end of file diff --git a/app/views/admins/shared/_sidebar.html.erb b/app/views/admins/shared/_sidebar.html.erb index 553820e69..145910928 100644 --- a/app/views/admins/shared/_sidebar.html.erb +++ b/app/views/admins/shared/_sidebar.html.erb @@ -33,23 +33,13 @@ <%= sidebar_item_group('#schools-submenu', '单位管理', icon: 'building') do %>
    • <%= sidebar_item(admins_schools_path, '单位列表', icon: 'university', controller: 'admins-schools') %>
    • <%= sidebar_item(admins_departments_path, '部门列表', icon: 'sitemap', controller: 'admins-departments') %>
    • +
    • <%= sidebar_item(admins_laboratories_path, '云上实验室', icon: 'cloud', controller: 'admins-laboratories') %>
    • <% end %> - - <%#= sidebar_item_group('#course-submenu', '课堂+', icon: 'mortar-board') do %> - - - - - <%# end %> - -
    • <%= sidebar_item_group('#user-submenu', '用户', icon: 'user') do %>
    • <%= sidebar_item(admins_users_path, '用户列表', icon: 'user', controller: 'admins-users') %>
    • - - <% end %> diff --git a/app/views/settings/show.json.jbuilder b/app/views/settings/show.json.jbuilder new file mode 100644 index 000000000..0765e303b --- /dev/null +++ b/app/views/settings/show.json.jbuilder @@ -0,0 +1,12 @@ +json.setting do + setting = @laboratory.laboratory_setting + + json.name setting.name || default_setting.name + json.nav_logo_url setting.nav_logo_url || default_setting.nav_logo_url + json.login_logo_url setting.login_logo_url || default_setting.login_logo_url + json.tab_logo_url setting.tab_logo_url || default_setting.tab_logo_url + + json.navbar setting.navbar || default_setting.navbar + + json.footer setting.footer || default_setting.footer +end \ No newline at end of file diff --git a/config/admins/sidebar.yml b/config/admins/sidebar.yml index 30af794b7..9da34a014 100644 --- a/config/admins/sidebar.yml +++ b/config/admins/sidebar.yml @@ -1 +1,2 @@ -admins-mirror_scripts: 'admins-mirror_repositories' \ No newline at end of file +admins-mirror_scripts: 'admins-mirror_repositories' +admins-laboratory_settings: 'admins-laboratories' \ No newline at end of file diff --git a/config/locales/laboratories/zh-CN.yml b/config/locales/laboratories/zh-CN.yml new file mode 100644 index 000000000..42127f0a1 --- /dev/null +++ b/config/locales/laboratories/zh-CN.yml @@ -0,0 +1,7 @@ +zh-CN: + activerecord: + models: + laboratory: '' + attributes: + laboratory: + identifier: '二级域名' \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 50b61c463..4b7addc0b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -824,6 +824,7 @@ Rails.application.routes.draw do end end resource :template, only: [:show] + resource :setting, only: [:show] end namespace :admins do @@ -953,7 +954,7 @@ Rails.application.routes.draw do resources :choose_mirror_repositories, only: [:new, :create] resources :schools, only: [:index, :destroy] resources :departments, only: [:index, :create, :edit, :update, :destroy] do - resource :department_member, only: [:create, :update, :destroy] + resource :department_member, only: [:create, :destroy] post :merge, on: :collection end resources :myshixuns, only: [:index] @@ -971,6 +972,10 @@ Rails.application.routes.draw do resources :carousels, only: [:index, :create, :update, :destroy] do post :drag, on: :collection end + resources :laboratories, only: [:index, :create, :destroy] do + resource :laboratory_setting, only: [:show, :update] + resource :laboratory_user, only: [:create, :destroy] + end end resources :colleges, only: [] do diff --git a/db/migrate/20191010011844_create_laboratories.rb b/db/migrate/20191010011844_create_laboratories.rb new file mode 100644 index 000000000..3dfb442f0 --- /dev/null +++ b/db/migrate/20191010011844_create_laboratories.rb @@ -0,0 +1,12 @@ +class CreateLaboratories < ActiveRecord::Migration[5.2] + def change + create_table :laboratories do |t| + t.references :school + t.string :identifier + + t.timestamps + + t.index :identifier, unique: true + end + end +end diff --git a/db/migrate/20191010012226_create_laboratory_users.rb b/db/migrate/20191010012226_create_laboratory_users.rb new file mode 100644 index 000000000..1b7ae762d --- /dev/null +++ b/db/migrate/20191010012226_create_laboratory_users.rb @@ -0,0 +1,8 @@ +class CreateLaboratoryUsers < ActiveRecord::Migration[5.2] + def change + create_table :laboratory_users do |t| + t.references :laboratory + t.references :user + end + end +end diff --git a/db/migrate/20191010063403_create_laboratory_settings.rb b/db/migrate/20191010063403_create_laboratory_settings.rb new file mode 100644 index 000000000..7f0a5f015 --- /dev/null +++ b/db/migrate/20191010063403_create_laboratory_settings.rb @@ -0,0 +1,9 @@ +class CreateLaboratorySettings < ActiveRecord::Migration[5.2] + def change + create_table :laboratory_settings do |t| + t.references :laboratory + + t.text :config + end + end +end diff --git a/db/migrate/20191011025619_init_edu_coder_laboratory.rb b/db/migrate/20191011025619_init_edu_coder_laboratory.rb new file mode 100644 index 000000000..831ca3985 --- /dev/null +++ b/db/migrate/20191011025619_init_edu_coder_laboratory.rb @@ -0,0 +1,22 @@ +class InitEduCoderLaboratory < ActiveRecord::Migration[5.2] + def change + ActiveRecord::Base.transaction do + laboratory = Laboratory.create!(id: 1, identifier: 'www') + setting = laboratory.build_laboratory_setting + footer = %Q{ + + } + config = setting.class.default_config.merge(name: 'EduCoder', footer: footer) + setting.config = config + setting.save! + end + end +end diff --git a/public/assets/.sprockets-manifest-4627fa5586ef7fed55ca286af7c028e9.json b/public/assets/.sprockets-manifest-4627fa5586ef7fed55ca286af7c028e9.json index 52d2a4e9b..b8b49cc9d 100644 --- a/public/assets/.sprockets-manifest-4627fa5586ef7fed55ca286af7c028e9.json +++ b/public/assets/.sprockets-manifest-4627fa5586ef7fed55ca286af7c028e9.json @@ -1 +1 @@ -{"files":{"admin-cd9ca8bacc973ce2dbace30c97f6c40bc08e2c2ee44972f668e738e1902c0121.js":{"logical_path":"admin.js","mtime":"2019-09-11T16:20:07+08:00","size":4350881,"digest":"cd9ca8bacc973ce2dbace30c97f6c40bc08e2c2ee44972f668e738e1902c0121","integrity":"sha256-zZyousyXPOLbrOMMl/bEC8COLC7kSXL2aOc44ZAsASE="},"admin-a1b3356efe50ff4717cf22475639b5333c5354ba03fd107c9b7a8d4ae76f47aa.css":{"logical_path":"admin.css","mtime":"2019-09-11T16:20:07+08:00","size":773445,"digest":"a1b3356efe50ff4717cf22475639b5333c5354ba03fd107c9b7a8d4ae76f47aa","integrity":"sha256-obM1bv5Q/0cXzyJHVjm1MzxTVLoD/RB8m3qNSudvR6o="},"font-awesome/fontawesome-webfont-7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979.eot":{"logical_path":"font-awesome/fontawesome-webfont.eot","mtime":"2019-08-14T17:22:43+08:00","size":165742,"digest":"7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979","integrity":"sha256-e/yrbbmdXPvxcFygU23ceFhUMsxfpBu9etDwCQM7KXk="},"font-awesome/fontawesome-webfont-2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe.woff2":{"logical_path":"font-awesome/fontawesome-webfont.woff2","mtime":"2019-08-14T17:22:43+08:00","size":77160,"digest":"2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe","integrity":"sha256-Kt78vAQefRj88tQXh53FoJmXqmTWdbejxLbOM9oT8/4="},"font-awesome/fontawesome-webfont-ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07.woff":{"logical_path":"font-awesome/fontawesome-webfont.woff","mtime":"2019-08-14T17:22:43+08:00","size":98024,"digest":"ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07","integrity":"sha256-ugxZ3rVFD1y0Gz+TYJ7i0NmVQVh33foiPoqKdTNHTwc="},"font-awesome/fontawesome-webfont-aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8.ttf":{"logical_path":"font-awesome/fontawesome-webfont.ttf","mtime":"2019-08-14T17:22:43+08:00","size":165548,"digest":"aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8","integrity":"sha256-qljzPyOaD7AvXHpsRcBD16msmgkzNYBmlOzW1O3A1qg="},"font-awesome/fontawesome-webfont-ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4.svg":{"logical_path":"font-awesome/fontawesome-webfont.svg","mtime":"2019-08-14T17:22:43+08:00","size":444379,"digest":"ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4","integrity":"sha256-rWFXkmwWIrpOHQPUePFUE2hSS/xG9R5C/g2UX37zI+Q="},"college-18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287.js":{"logical_path":"college.js","mtime":"2019-09-26T14:40:40+08:00","size":3352744,"digest":"18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287","integrity":"sha256-GPXoQAMxY06JijWswhh4FcCWwl4Kt0q6NBrpFhZs0oc="},"college-944d4273f62c7538368b9017fdd3387b5e3bea31a87873770eb231324546d4d9.css":{"logical_path":"college.css","mtime":"2019-09-11T16:20:07+08:00","size":546841,"digest":"944d4273f62c7538368b9017fdd3387b5e3bea31a87873770eb231324546d4d9","integrity":"sha256-lE1Cc/YsdTg2i5AX/dM4e1476jGoeHN3DrIxMkVG1Nk="},"logo-7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423.png":{"logical_path":"logo.png","mtime":"2019-09-03T08:55:53+08:00","size":2816,"digest":"7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423","integrity":"sha256-f/ESVocJv5f5iY/ockm3qPIA/x9I1TfYWvhyFfGHBCM="},"application-9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb.js":{"logical_path":"application.js","mtime":"2019-09-26T14:40:40+08:00","size":600706,"digest":"9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb","integrity":"sha256-nPvD15JZmh0N5ce4QgnhwrLmAzbw8B4Z8FgWY5GHCPs="},"application-5eb87c6e13676d0183317debce17fade27e68c4acee28c419438da15d53c94f2.css":{"logical_path":"application.css","mtime":"2019-09-11T16:20:07+08:00","size":1844002,"digest":"5eb87c6e13676d0183317debce17fade27e68c4acee28c419438da15d53c94f2","integrity":"sha256-Xrh8bhNnbQGDMX3rzhf63ifmjErO4oxBlDjaFdU8lPI="},"admin-c9e5ebe6191548550e27514196ea125cfbb402820ec125a0c9acf99d2d378fe4.js":{"logical_path":"admin.js","mtime":"2019-09-21T15:28:08+08:00","size":4382031,"digest":"c9e5ebe6191548550e27514196ea125cfbb402820ec125a0c9acf99d2d378fe4","integrity":"sha256-yeXr5hkVSFUOJ1FBluoSXPu0AoIOwSWgyaz5nS03j+Q="},"admin-59c59f8cae8bef4a8359286c985458110c9d03ea121516595c988943f4717c38.css":{"logical_path":"admin.css","mtime":"2019-09-21T14:49:04+08:00","size":840093,"digest":"59c59f8cae8bef4a8359286c985458110c9d03ea121516595c988943f4717c38","integrity":"sha256-WcWfjK6L70qDWShsmFRYEQydA+oSFRZZXJiJQ/RxfDg="},"college-38f953d6ba5b85d3fab63cb3c2bbf0d057ccc6454d07cfaafac3b06da37b8437.css":{"logical_path":"college.css","mtime":"2019-09-16T13:56:09+08:00","size":579109,"digest":"38f953d6ba5b85d3fab63cb3c2bbf0d057ccc6454d07cfaafac3b06da37b8437","integrity":"sha256-OPlT1rpbhdP6tjyzwrvw0FfMxkVNB8+q+sOwbaN7hDc="},"application-646b1158a4e8c1f13e684d6fe9025abc75f8d3ba5256e440802c0398223374f3.css":{"logical_path":"application.css","mtime":"2019-09-21T14:49:04+08:00","size":1988767,"digest":"646b1158a4e8c1f13e684d6fe9025abc75f8d3ba5256e440802c0398223374f3","integrity":"sha256-ZGsRWKTowfE+aE1v6QJavHX407pSVuRAgCwDmCIzdPM="},"admin-a47e37c0ec7cf5f22380249776d1e82d65b6b6aa272ed7389185aa200fa40751.js":{"logical_path":"admin.js","mtime":"2019-09-25T15:33:05+08:00","size":4383107,"digest":"a47e37c0ec7cf5f22380249776d1e82d65b6b6aa272ed7389185aa200fa40751","integrity":"sha256-pH43wOx89fIjgCSXdtHoLWW2tqonLtc4kYWqIA+kB1E="},"admin-432c4eac09b036c57ff1e88d902b8aa7df81164e4b419bac557cf1366c1d3ad9.js":{"logical_path":"admin.js","mtime":"2019-09-25T15:35:20+08:00","size":4383103,"digest":"432c4eac09b036c57ff1e88d902b8aa7df81164e4b419bac557cf1366c1d3ad9","integrity":"sha256-QyxOrAmwNsV/8eiNkCuKp9+BFk5LQZusVXzxNmwdOtk="},"admin-978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a.js":{"logical_path":"admin.js","mtime":"2019-09-30T14:43:41+08:00","size":4387200,"digest":"978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a","integrity":"sha256-l45c5gf3fCaBShdPSA2nmsJGwiAYaO+EZUqgO7Zye1o="},"admin-896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7.css":{"logical_path":"admin.css","mtime":"2019-09-30T14:43:41+08:00","size":842269,"digest":"896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7","integrity":"sha256-iWKB9HMXIrDAhNuxryHQ80pbwULViv9Xs5GGSrcd3Kc="},"application-97f313e9bb7d25476649f7d7215959cf421480fd0a3785d1956953bf94a1e8bd.css":{"logical_path":"application.css","mtime":"2019-09-30T14:43:41+08:00","size":1993118,"digest":"97f313e9bb7d25476649f7d7215959cf421480fd0a3785d1956953bf94a1e8bd","integrity":"sha256-l/MT6bt9JUdmSffXIVlZz0IUgP0KN4XRlWlTv5Sh6L0="}},"assets":{"admin.js":"admin-978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a.js","admin.css":"admin-896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7.css","font-awesome/fontawesome-webfont.eot":"font-awesome/fontawesome-webfont-7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979.eot","font-awesome/fontawesome-webfont.woff2":"font-awesome/fontawesome-webfont-2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe.woff2","font-awesome/fontawesome-webfont.woff":"font-awesome/fontawesome-webfont-ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07.woff","font-awesome/fontawesome-webfont.ttf":"font-awesome/fontawesome-webfont-aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8.ttf","font-awesome/fontawesome-webfont.svg":"font-awesome/fontawesome-webfont-ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4.svg","college.js":"college-18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287.js","college.css":"college-38f953d6ba5b85d3fab63cb3c2bbf0d057ccc6454d07cfaafac3b06da37b8437.css","logo.png":"logo-7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423.png","application.js":"application-9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb.js","application.css":"application-97f313e9bb7d25476649f7d7215959cf421480fd0a3785d1956953bf94a1e8bd.css"}} \ No newline at end of file +{"files":{"admin-cd9ca8bacc973ce2dbace30c97f6c40bc08e2c2ee44972f668e738e1902c0121.js":{"logical_path":"admin.js","mtime":"2019-09-11T16:20:07+08:00","size":4350881,"digest":"cd9ca8bacc973ce2dbace30c97f6c40bc08e2c2ee44972f668e738e1902c0121","integrity":"sha256-zZyousyXPOLbrOMMl/bEC8COLC7kSXL2aOc44ZAsASE="},"admin-a1b3356efe50ff4717cf22475639b5333c5354ba03fd107c9b7a8d4ae76f47aa.css":{"logical_path":"admin.css","mtime":"2019-09-11T16:20:07+08:00","size":773445,"digest":"a1b3356efe50ff4717cf22475639b5333c5354ba03fd107c9b7a8d4ae76f47aa","integrity":"sha256-obM1bv5Q/0cXzyJHVjm1MzxTVLoD/RB8m3qNSudvR6o="},"font-awesome/fontawesome-webfont-7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979.eot":{"logical_path":"font-awesome/fontawesome-webfont.eot","mtime":"2019-08-14T17:22:43+08:00","size":165742,"digest":"7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979","integrity":"sha256-e/yrbbmdXPvxcFygU23ceFhUMsxfpBu9etDwCQM7KXk="},"font-awesome/fontawesome-webfont-2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe.woff2":{"logical_path":"font-awesome/fontawesome-webfont.woff2","mtime":"2019-08-14T17:22:43+08:00","size":77160,"digest":"2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe","integrity":"sha256-Kt78vAQefRj88tQXh53FoJmXqmTWdbejxLbOM9oT8/4="},"font-awesome/fontawesome-webfont-ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07.woff":{"logical_path":"font-awesome/fontawesome-webfont.woff","mtime":"2019-08-14T17:22:43+08:00","size":98024,"digest":"ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07","integrity":"sha256-ugxZ3rVFD1y0Gz+TYJ7i0NmVQVh33foiPoqKdTNHTwc="},"font-awesome/fontawesome-webfont-aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8.ttf":{"logical_path":"font-awesome/fontawesome-webfont.ttf","mtime":"2019-08-14T17:22:43+08:00","size":165548,"digest":"aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8","integrity":"sha256-qljzPyOaD7AvXHpsRcBD16msmgkzNYBmlOzW1O3A1qg="},"font-awesome/fontawesome-webfont-ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4.svg":{"logical_path":"font-awesome/fontawesome-webfont.svg","mtime":"2019-08-14T17:22:43+08:00","size":444379,"digest":"ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4","integrity":"sha256-rWFXkmwWIrpOHQPUePFUE2hSS/xG9R5C/g2UX37zI+Q="},"college-18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287.js":{"logical_path":"college.js","mtime":"2019-09-26T14:40:40+08:00","size":3352744,"digest":"18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287","integrity":"sha256-GPXoQAMxY06JijWswhh4FcCWwl4Kt0q6NBrpFhZs0oc="},"college-944d4273f62c7538368b9017fdd3387b5e3bea31a87873770eb231324546d4d9.css":{"logical_path":"college.css","mtime":"2019-09-11T16:20:07+08:00","size":546841,"digest":"944d4273f62c7538368b9017fdd3387b5e3bea31a87873770eb231324546d4d9","integrity":"sha256-lE1Cc/YsdTg2i5AX/dM4e1476jGoeHN3DrIxMkVG1Nk="},"logo-7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423.png":{"logical_path":"logo.png","mtime":"2019-09-03T08:55:53+08:00","size":2816,"digest":"7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423","integrity":"sha256-f/ESVocJv5f5iY/ockm3qPIA/x9I1TfYWvhyFfGHBCM="},"application-9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb.js":{"logical_path":"application.js","mtime":"2019-09-26T14:40:40+08:00","size":600706,"digest":"9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb","integrity":"sha256-nPvD15JZmh0N5ce4QgnhwrLmAzbw8B4Z8FgWY5GHCPs="},"application-5eb87c6e13676d0183317debce17fade27e68c4acee28c419438da15d53c94f2.css":{"logical_path":"application.css","mtime":"2019-09-11T16:20:07+08:00","size":1844002,"digest":"5eb87c6e13676d0183317debce17fade27e68c4acee28c419438da15d53c94f2","integrity":"sha256-Xrh8bhNnbQGDMX3rzhf63ifmjErO4oxBlDjaFdU8lPI="},"admin-c9e5ebe6191548550e27514196ea125cfbb402820ec125a0c9acf99d2d378fe4.js":{"logical_path":"admin.js","mtime":"2019-09-21T15:28:08+08:00","size":4382031,"digest":"c9e5ebe6191548550e27514196ea125cfbb402820ec125a0c9acf99d2d378fe4","integrity":"sha256-yeXr5hkVSFUOJ1FBluoSXPu0AoIOwSWgyaz5nS03j+Q="},"admin-59c59f8cae8bef4a8359286c985458110c9d03ea121516595c988943f4717c38.css":{"logical_path":"admin.css","mtime":"2019-09-21T14:49:04+08:00","size":840093,"digest":"59c59f8cae8bef4a8359286c985458110c9d03ea121516595c988943f4717c38","integrity":"sha256-WcWfjK6L70qDWShsmFRYEQydA+oSFRZZXJiJQ/RxfDg="},"college-38f953d6ba5b85d3fab63cb3c2bbf0d057ccc6454d07cfaafac3b06da37b8437.css":{"logical_path":"college.css","mtime":"2019-09-16T13:56:09+08:00","size":579109,"digest":"38f953d6ba5b85d3fab63cb3c2bbf0d057ccc6454d07cfaafac3b06da37b8437","integrity":"sha256-OPlT1rpbhdP6tjyzwrvw0FfMxkVNB8+q+sOwbaN7hDc="},"application-646b1158a4e8c1f13e684d6fe9025abc75f8d3ba5256e440802c0398223374f3.css":{"logical_path":"application.css","mtime":"2019-09-21T14:49:04+08:00","size":1988767,"digest":"646b1158a4e8c1f13e684d6fe9025abc75f8d3ba5256e440802c0398223374f3","integrity":"sha256-ZGsRWKTowfE+aE1v6QJavHX407pSVuRAgCwDmCIzdPM="},"admin-a47e37c0ec7cf5f22380249776d1e82d65b6b6aa272ed7389185aa200fa40751.js":{"logical_path":"admin.js","mtime":"2019-09-25T15:33:05+08:00","size":4383107,"digest":"a47e37c0ec7cf5f22380249776d1e82d65b6b6aa272ed7389185aa200fa40751","integrity":"sha256-pH43wOx89fIjgCSXdtHoLWW2tqonLtc4kYWqIA+kB1E="},"admin-432c4eac09b036c57ff1e88d902b8aa7df81164e4b419bac557cf1366c1d3ad9.js":{"logical_path":"admin.js","mtime":"2019-09-25T15:35:20+08:00","size":4383103,"digest":"432c4eac09b036c57ff1e88d902b8aa7df81164e4b419bac557cf1366c1d3ad9","integrity":"sha256-QyxOrAmwNsV/8eiNkCuKp9+BFk5LQZusVXzxNmwdOtk="},"admin-978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a.js":{"logical_path":"admin.js","mtime":"2019-09-30T14:43:41+08:00","size":4387200,"digest":"978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a","integrity":"sha256-l45c5gf3fCaBShdPSA2nmsJGwiAYaO+EZUqgO7Zye1o="},"admin-896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7.css":{"logical_path":"admin.css","mtime":"2019-09-30T14:43:41+08:00","size":842269,"digest":"896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7","integrity":"sha256-iWKB9HMXIrDAhNuxryHQ80pbwULViv9Xs5GGSrcd3Kc="},"application-97f313e9bb7d25476649f7d7215959cf421480fd0a3785d1956953bf94a1e8bd.css":{"logical_path":"application.css","mtime":"2019-09-30T14:43:41+08:00","size":1993118,"digest":"97f313e9bb7d25476649f7d7215959cf421480fd0a3785d1956953bf94a1e8bd","integrity":"sha256-l/MT6bt9JUdmSffXIVlZz0IUgP0KN4XRlWlTv5Sh6L0="},"admin-2cdb23442fa735025385b88f2900df04fef38b61530041a6dbe375ef0f0ae888.js":{"logical_path":"admin.js","mtime":"2019-10-11T14:38:33+08:00","size":4394616,"digest":"2cdb23442fa735025385b88f2900df04fef38b61530041a6dbe375ef0f0ae888","integrity":"sha256-LNsjRC+nNQJThbiPKQDfBP7zi2FTAEGm2+N17w8K6Ig="},"admin-2c2854b9a02158ded5a809aaf7144a8630b10354ab4e56fecc4dffcc713796cc.css":{"logical_path":"admin.css","mtime":"2019-10-10T17:12:05+08:00","size":846514,"digest":"2c2854b9a02158ded5a809aaf7144a8630b10354ab4e56fecc4dffcc713796cc","integrity":"sha256-LChUuaAhWN7VqAmq9xRKhjCxA1SrTlb+zE3/zHE3lsw="},"application-50059ae929866043b47015128702fcfba53d32a2df148e64e1d961c10651c6af.css":{"logical_path":"application.css","mtime":"2019-10-10T17:12:05+08:00","size":2001607,"digest":"50059ae929866043b47015128702fcfba53d32a2df148e64e1d961c10651c6af","integrity":"sha256-UAWa6SmGYEO0cBUShwL8+6U9MqLfFI5k4dlhwQZRxq8="}},"assets":{"admin.js":"admin-2cdb23442fa735025385b88f2900df04fef38b61530041a6dbe375ef0f0ae888.js","admin.css":"admin-2c2854b9a02158ded5a809aaf7144a8630b10354ab4e56fecc4dffcc713796cc.css","font-awesome/fontawesome-webfont.eot":"font-awesome/fontawesome-webfont-7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979.eot","font-awesome/fontawesome-webfont.woff2":"font-awesome/fontawesome-webfont-2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe.woff2","font-awesome/fontawesome-webfont.woff":"font-awesome/fontawesome-webfont-ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07.woff","font-awesome/fontawesome-webfont.ttf":"font-awesome/fontawesome-webfont-aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8.ttf","font-awesome/fontawesome-webfont.svg":"font-awesome/fontawesome-webfont-ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4.svg","college.js":"college-18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287.js","college.css":"college-38f953d6ba5b85d3fab63cb3c2bbf0d057ccc6454d07cfaafac3b06da37b8437.css","logo.png":"logo-7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423.png","application.js":"application-9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb.js","application.css":"application-50059ae929866043b47015128702fcfba53d32a2df148e64e1d961c10651c6af.css"}} \ No newline at end of file diff --git a/public/assets/admin-896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7.css b/public/assets/admin-2c2854b9a02158ded5a809aaf7144a8630b10354ab4e56fecc4dffcc713796cc.css similarity index 99% rename from public/assets/admin-896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7.css rename to public/assets/admin-2c2854b9a02158ded5a809aaf7144a8630b10354ab4e56fecc4dffcc713796cc.css index fe1e75888..5b6bef77a 100644 --- a/public/assets/admin-896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7.css +++ b/public/assets/admin-2c2854b9a02158ded5a809aaf7144a8630b10354ab4e56fecc4dffcc713796cc.css @@ -25274,6 +25274,114 @@ input.form-control { color: #6c757d; } +/* line 4, app/assets/stylesheets/admins/laboratories.scss */ +.admins-laboratories-index-page .laboratory-list-table .member-container .laboratory-user { + display: -webkit-box; + display: flex; + -webkit-box-pack: center; + justify-content: center; + flex-wrap: wrap; +} + +/* line 9, app/assets/stylesheets/admins/laboratories.scss */ +.admins-laboratories-index-page .laboratory-list-table .member-container .laboratory-user .laboratory-user-item { + display: -webkit-box; + display: flex; + -webkit-box-align: center; + align-items: center; + height: 22px; + line-height: 22px; + padding: 2px 5px; + margin: 2px 2px; + border: 1px solid #91D5FF; + background-color: #E6F7FF; + color: #91D5FF; + border-radius: 4px; +} + +/* line 27, app/assets/stylesheets/admins/laboratories.scss */ +.admins-laboratory-settings-show-page .edit-laboratory-setting-container .logo-item, .admins-laboratory-settings-update-page .edit-laboratory-setting-container .logo-item { + display: -webkit-box; + display: flex; +} + +/* line 30, app/assets/stylesheets/admins/laboratories.scss */ +.admins-laboratory-settings-show-page .edit-laboratory-setting-container .logo-item-img, .admins-laboratory-settings-update-page .edit-laboratory-setting-container .logo-item-img { + display: block; + width: 80px; + height: 80px; +} + +/* line 36, app/assets/stylesheets/admins/laboratories.scss */ +.admins-laboratory-settings-show-page .edit-laboratory-setting-container .logo-item-upload, .admins-laboratory-settings-update-page .edit-laboratory-setting-container .logo-item-upload { + cursor: pointer; + position: absolute; + top: 0; + width: 80px; + height: 80px; + background: #F5F5F5; + border: 1px solid #E5E5E5; +} + +/* line 45, app/assets/stylesheets/admins/laboratories.scss */ +.admins-laboratory-settings-show-page .edit-laboratory-setting-container .logo-item-upload::before, .admins-laboratory-settings-update-page .edit-laboratory-setting-container .logo-item-upload::before { + content: ''; + position: absolute; + top: 27px; + left: 39px; + width: 2px; + height: 26px; + background: #E5E5E5; +} + +/* line 55, app/assets/stylesheets/admins/laboratories.scss */ +.admins-laboratory-settings-show-page .edit-laboratory-setting-container .logo-item-upload::after, .admins-laboratory-settings-update-page .edit-laboratory-setting-container .logo-item-upload::after { + content: ''; + position: absolute; + top: 39px; + left: 27px; + width: 26px; + height: 2px; + background: #E5E5E5; +} + +/* line 66, app/assets/stylesheets/admins/laboratories.scss */ +.admins-laboratory-settings-show-page .edit-laboratory-setting-container .logo-item-left, .admins-laboratory-settings-update-page .edit-laboratory-setting-container .logo-item-left { + position: relative; + width: 80px; + height: 80px; +} + +/* line 72, app/assets/stylesheets/admins/laboratories.scss */ +.admins-laboratory-settings-show-page .edit-laboratory-setting-container .logo-item-left.has-img .logo-item-upload, .admins-laboratory-settings-update-page .edit-laboratory-setting-container .logo-item-left.has-img .logo-item-upload { + display: none; +} + +/* line 77, app/assets/stylesheets/admins/laboratories.scss */ +.admins-laboratory-settings-show-page .edit-laboratory-setting-container .logo-item-left.has-img:hover .logo-item-upload, .admins-laboratory-settings-update-page .edit-laboratory-setting-container .logo-item-left.has-img:hover .logo-item-upload { + display: block; + background: rgba(145, 145, 145, 0.8); +} + +/* line 85, app/assets/stylesheets/admins/laboratories.scss */ +.admins-laboratory-settings-show-page .edit-laboratory-setting-container .logo-item-right, .admins-laboratory-settings-update-page .edit-laboratory-setting-container .logo-item-right { + display: -webkit-box; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-pack: justify; + justify-content: space-between; + color: #777777; + font-size: 12px; +} + +/* line 93, app/assets/stylesheets/admins/laboratories.scss */ +.admins-laboratory-settings-show-page .edit-laboratory-setting-container .logo-item-title, .admins-laboratory-settings-update-page .edit-laboratory-setting-container .logo-item-title { + color: #23272B; + font-size: 14px; +} + /* line 4, app/assets/stylesheets/admins/library_applies.scss */ .admins-library-applies-index-page .library-applies-list-container span.apply-status-agreed { color: #28a745; diff --git a/public/assets/admin-896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7.css.gz b/public/assets/admin-2c2854b9a02158ded5a809aaf7144a8630b10354ab4e56fecc4dffcc713796cc.css.gz similarity index 78% rename from public/assets/admin-896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7.css.gz rename to public/assets/admin-2c2854b9a02158ded5a809aaf7144a8630b10354ab4e56fecc4dffcc713796cc.css.gz index 581305db57795b3963f725c81b9c0c188d680b14..bfac93da936570ba06fae0f60742b64870f50070 100644 GIT binary patch delta 15257 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 WNcB_YjQqQQ_WuB3he!Jz+6(}0u-t_J diff --git a/public/assets/admin-978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a.js b/public/assets/admin-2cdb23442fa735025385b88f2900df04fef38b61530041a6dbe375ef0f0ae888.js similarity index 99% rename from public/assets/admin-978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a.js rename to public/assets/admin-2cdb23442fa735025385b88f2900df04fef38b61530041a6dbe375ef0f0ae888.js index 49e1025c7..6203a3ce8 100644 --- a/public/assets/admin-978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a.js +++ b/public/assets/admin-2cdb23442fa735025385b88f2900df04fef38b61530041a6dbe375ef0f0ae888.js @@ -134528,6 +134528,256 @@ $(document).on('turbolinks:load', function() { } }) ; +$(document).on('turbolinks:load', function() { + if ($('body.admins-laboratory-settings-show-page, body.admins-laboratory-settings-update-page').length > 0) { + var $container = $('.edit-laboratory-setting-container'); + var $form = $container.find('.edit_laboratory'); + + $('.logo-item-left').on("change", 'input[type="file"]', function () { + var $fileInput = $(this); + var file = this.files[0]; + var imageType = /image.*/; + if (file && file.type.match(imageType)) { + var reader = new FileReader(); + reader.onload = function () { + var $box = $fileInput.parent(); + $box.find('img').attr('src', reader.result).css('display', 'block'); + $box.addClass('has-img'); + }; + reader.readAsDataURL(file); + } else { + } + }); + + createMDEditor('laboratory-footer-editor', { height: 200, placeholder: '请输入备案信息' }); + + $form.validate({ + errorElement: 'span', + errorClass: 'danger text-danger', + errorPlacement:function(error,element){ + if(element.parent().hasClass("input-group")){ + element.parent().after(error); + }else{ + element.after(error) + } + }, + rules: { + identifier: { + required: true, + checkSite: true + }, + name: { + required: true + } + } + }); + $.validator.addMethod("checkSite",function(value,element,params){ + var checkSite = /^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/; + return this.optional(element)||(checkSite.test(value + '.educoder.com')); + },"域名不合法!"); + + $form.on('click', '.submit-btn', function(){ + $form.find('.submit-btn').attr('disabled', 'disabled'); + $form.find('.error').html(''); + var valid = $form.valid(); + + $('input[name="navbar[][name]"]').each(function(_, e){ + var $ele = $(e); + if($ele.val() === undefined || $ele.val().length === 0){ + $ele.addClass('danger text-danger'); + valid = false; + } else { + $ele.removeClass('danger text-danger'); + } + }); + + if(!valid) return; + $.ajax({ + method: 'PATCH', + dataType: 'json', + url: $form.attr('action'), + data: new FormData($form[0]), + processData: false, + contentType: false, + success: function(data){ + $.notify({ message: '保存成功' }); + window.location.reload(); + }, + error: function(res){ + var data = res.responseJSON; + $form.find('.error').html(data.message); + }, + complete: function(){ + $form.find('.submit-btn').attr('disabled', false); + } + }); + }) + } +}); +$(document).on('turbolinks:load', function() { + if ($('body.admins-laboratories-index-page').length > 0) { + var $searchContainer = $('.laboratory-list-form'); + var $searchForm = $searchContainer.find('form.search-form'); + var $list = $('.laboratory-list-container'); + + // ============== 新建 =============== + var $modal = $('.modal.admin-create-laboratory-modal'); + var $form = $modal.find('form.admin-create-laboratory-form'); + var $schoolSelect = $modal.find('.school-select'); + + $form.validate({ + errorElement: 'span', + errorClass: 'danger text-danger', + rules: { + school_id: { + required: true + } + }, + messages: { + school_id: { + required: '请选择所属单位' + } + } + }); + + // modal ready fire + $modal.on('show.bs.modal', function () { + $schoolSelect.select2('val', ' '); + }); + + // ************** 学校选择 ************* + var matcherFunc = function(params, data){ + if ($.trim(params.term) === '') { + return data; + } + if (typeof data.text === 'undefined') { + return null; + } + + if (data.name && data.name.indexOf(params.term) > -1) { + var modifiedData = $.extend({}, data, true); + return modifiedData; + } + + // Return `null` if the term should not be displayed + return null; + }; + + var defineSchoolSelect = function(schools) { + $schoolSelect.select2({ + theme: 'bootstrap4', + placeholder: '请选择单位', + minimumInputLength: 1, + data: schools, + templateResult: function (item) { + if(!item.id || item.id === '') return item.text; + return item.name; + }, + templateSelection: function(item){ + if (item.id) { + $('#school_id').val(item.id); + } + return item.name || item.text; + }, + matcher: matcherFunc + }); + } + + $.ajax({ + url: '/api/schools/for_option.json', + dataType: 'json', + type: 'GET', + success: function(data) { + defineSchoolSelect(data.schools); + } + }); + + $modal.on('click', '.submit-btn', function(){ + $form.find('.error').html(''); + + if ($form.valid()) { + var url = $form.data('url'); + + $.ajax({ + method: 'POST', + dataType: 'json', + url: url, + data: $form.serialize(), + success: function(){ + $.notify({ message: '创建成功' }); + $modal.modal('hide'); + + setTimeout(function(){ + window.location.reload(); + }, 500); + }, + error: function(res){ + var data = res.responseJSON; + $form.find('.error').html(data.message); + } + }); + } + }); + + // ============= 添加管理员 ============== + var $addMemberModal = $('.admin-add-laboratory-user-modal'); + var $addMemberForm = $addMemberModal.find('.admin-add-laboratory-user-form'); + var $memberSelect = $addMemberModal.find('.laboratory-user-select'); + var $laboratoryIdInput = $addMemberForm.find('input[name="laboratory_id"]') + + $addMemberModal.on('show.bs.modal', function(event){ + var $link = $(event.relatedTarget); + var laboratoryId = $link.data('laboratory-id'); + $laboratoryIdInput.val(laboratoryId); + + $memberSelect.select2('val', ' '); + }); + + $memberSelect.select2({ + theme: 'bootstrap4', + placeholder: '请输入要添加的管理员姓名', + multiple: true, + minimumInputLength: 1, + ajax: { + delay: 500, + url: '/admins/users', + dataType: 'json', + data: function(params){ + return { name: params.term }; + }, + processResults: function(data){ + return { results: data.users } + } + }, + templateResult: function (item) { + if(!item.id || item.id === '') return item.text; + return item.real_name; + }, + templateSelection: function(item){ + if (item.id) { + } + return item.real_name || item.text; + } + }); + + $addMemberModal.on('click', '.submit-btn', function(){ + $addMemberForm.find('.error').html(''); + + var laboratoryId = $laboratoryIdInput.val(); + var memberIds = $memberSelect.val(); + if (laboratoryId && memberIds && memberIds.length > 0) { + $.ajax({ + method: 'POST', + dataType: 'script', + url: '/admins/laboratories/' + laboratoryId + '/laboratory_user', + data: { user_ids: memberIds } + }); + } else { + $addMemberModal.modal('hide'); + } + }); + } +}); $(document).on('turbolinks:load', function() { if ($('body.admins-library-applies-index-page').length > 0) { var $searchFrom = $('.library-applies-list-form'); diff --git a/public/assets/admin-978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a.js.gz b/public/assets/admin-2cdb23442fa735025385b88f2900df04fef38b61530041a6dbe375ef0f0ae888.js.gz similarity index 98% rename from public/assets/admin-978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a.js.gz rename to public/assets/admin-2cdb23442fa735025385b88f2900df04fef38b61530041a6dbe375ef0f0ae888.js.gz index 13e36b4f64ee1b4baf2eba0c6a154bdcdb331ab9..492769a782c4adc6ee8915a133b1af69aa04b256 100644 GIT binary patch delta 11464 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 delta 10633 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�?qD@V>e^eBk&WfL+4`@Z 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ഈi-6`csM&ScixllWHe4cNq(h`M-7-P| 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�?qD@V>e^eBk&WfL+4`@Z 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 Jf?A$w9st)g-qipA diff --git a/public/assets/application-9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb.js.gz b/public/assets/application-9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb.js.gz index af63ccbfca481acff607967fc65cf6df7329d276..d17b8f444c2f4cfd5c4dd71760185a6a55ab338c 100644 GIT binary patch delta 24 fcmdn|n`85D4tDu&4u*`_o<{aocE+vjOlxcbbwvm> delta 24 gcmdn|n`85D4tDu&4u(k=S{vD0*%`O8Gp(@&0DOK3$p8QV diff --git a/public/assets/college-18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287.js.gz b/public/assets/college-18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287.js.gz index 3a4c01edc0767b3d156ec9a3c885818476104e46..d4b8b22dcb0fc0b93625588cfa2b1111decd807e 100644 GIT binary patch delta 48 zcmeC!qTR7Yn_a$}gCQffr;)vtow1djsg<3%m7S%Powb#nt(6@p$kEEqxs{!Z@fH9` CG7K94 delta 48 zcmeC!qTR7Yn_a$}gJIHz)<*VLcE(nArdD?5R(6(FcGgyQwpMnaAV(`Z=T>$u##;bg CdknDv From 11b107987ea7e04ea927a9eaf8618583948fd8e1 Mon Sep 17 00:00:00 2001 From: p31729568 Date: Sat, 12 Oct 2019 09:06:30 +0800 Subject: [PATCH 30/84] fix --- app/controllers/application_controller.rb | 20 -------------------- app/controllers/concerns/login_helper.rb | 2 +- 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 15ef1b19d..5c93b08b9 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -291,10 +291,6 @@ class ApplicationController < ActionController::Base end end - def autologin_cookie_name - edu_setting('autologin_cookie_name').presence || 'autologin' - end - def try_to_autologin if cookies[autologin_cookie_name] # auto-login feature starts a new session @@ -605,22 +601,6 @@ class ApplicationController < ActionController::Base cookies[:fileDownload] = true end - def set_autologin_cookie(user) - token = Token.get_or_create_permanent_login_token(user, "autologin") - cookie_options = { - :value => token.value, - :expires => 1.month.from_now, - :path => '/', - :secure => false, - :httponly => true - } - if edu_setting('cookie_domain').present? - cookie_options = cookie_options.merge(domain: edu_setting('cookie_domain')) - end - cookies[autologin_cookie_name] = cookie_options - logger.info("cookies is #{cookies}") - end - # 149课程的评审用户数据创建(包含创建课堂学生) def open_class_user user = User.find_by(login: "OpenClassUser") diff --git a/app/controllers/concerns/login_helper.rb b/app/controllers/concerns/login_helper.rb index e79654958..e94cf8a21 100644 --- a/app/controllers/concerns/login_helper.rb +++ b/app/controllers/concerns/login_helper.rb @@ -6,7 +6,7 @@ module LoginHelper end def autologin_cookie_name - edu_setting('autologin_cookie_name') || 'autologin' + edu_setting('autologin_cookie_name').presence || 'autologin' end def set_autologin_cookie(user) From 6626e3e9382612262d06993d1e57ba9165f8c678 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Sat, 12 Oct 2019 09:12:09 +0800 Subject: [PATCH 31/84] =?UTF-8?q?=E6=96=B0=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/modules/courses/shixunHomework/Listofworksstudentone.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js index 5eed392d5..4ca9b831c 100644 --- a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js +++ b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js @@ -40,7 +40,7 @@ const RadioGroup = Radio.Group; const CheckboxGroup = Checkbox.Group; const {Option} = Select; //GraduationTaskssetting.js - + //作品列表(学生) class Listofworksstudentone extends Component { //unifiedsetting 统一设置 From db593d61ba4dcfa8e0ef81ed452d672afa77d01e Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Sat, 12 Oct 2019 09:51:49 +0800 Subject: [PATCH 32/84] =?UTF-8?q?=E5=AD=A6=E7=94=9F=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/courses/students.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/courses/students.json.jbuilder b/app/views/courses/students.json.jbuilder index 0b5d7fe71..5788b44f2 100644 --- a/app/views/courses/students.json.jbuilder +++ b/app/views/courses/students.json.jbuilder @@ -1,7 +1,7 @@ json.students do json.array! @students do |student| json.user_id student.user_id - # json.login student.user.try(:login) + json.login student.user.try(:login) json.name student.user.try(:real_name) json.name_link user_path(student.user) json.student_id student.user.try(:student_id) From 6f05ea63cd0a4b8afe87b90ae39081de7688f393 Mon Sep 17 00:00:00 2001 From: p31729568 Date: Sat, 12 Oct 2019 10:00:38 +0800 Subject: [PATCH 33/84] thiry party login --- app/controllers/bind_users_controller.rb | 22 ++++++++ app/models/open_user.rb | 4 ++ app/models/user.rb | 3 ++ app/services/application_service.rb | 2 + app/services/create_bind_user_service.rb | 51 +++++++++++++++++++ .../create_or_find_wechat_account_service.rb | 8 ++- config/routes.rb | 1 + 7 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 app/controllers/bind_users_controller.rb create mode 100644 app/services/create_bind_user_service.rb diff --git a/app/controllers/bind_users_controller.rb b/app/controllers/bind_users_controller.rb new file mode 100644 index 000000000..530aa9b73 --- /dev/null +++ b/app/controllers/bind_users_controller.rb @@ -0,0 +1,22 @@ +class BindUsersController < ApplicationController + before_action :require_login + + def create + user = CreateBindUserService.call(current_user, create_params) + successful_authentication(user) if user.id != current_user.id + + render_ok + rescue ApplicationService::Error => ex + render_error(ex.message) + end + + def new_user + current_user + end + + private + + def create_params + params.permit(:login, :password, :type, :not_bind) + end +end \ No newline at end of file diff --git a/app/models/open_user.rb b/app/models/open_user.rb index cedf02edb..91228b976 100644 --- a/app/models/open_user.rb +++ b/app/models/open_user.rb @@ -2,4 +2,8 @@ class OpenUser < ApplicationRecord belongs_to :user validates :uid, presence: true, uniqueness: { scope: :type } + + def can_bind_cache_key + "open_user:#{type}:#{uid}:can_bind" + end end \ No newline at end of file diff --git a/app/models/user.rb b/app/models/user.rb index 92005d142..11ffe084c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -31,6 +31,9 @@ class User < ApplicationRecord LOGIN_CHARS = %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).freeze has_one :user_extension, dependent: :destroy + has_many :open_users, dependent: :destroy + has_one :wechat_open_user, class_name: 'OpenUsers::Wechat' + has_one :qq_open_user, class_name: 'OpenUsers::QQ' accepts_nested_attributes_for :user_extension, update_only: true has_many :memos, foreign_key: 'author_id' diff --git a/app/services/application_service.rb b/app/services/application_service.rb index 8b3819017..1be6896eb 100644 --- a/app/services/application_service.rb +++ b/app/services/application_service.rb @@ -1,6 +1,8 @@ class ApplicationService include Callable + Error = Class.new(StandardError) + private def strip(str) diff --git a/app/services/create_bind_user_service.rb b/app/services/create_bind_user_service.rb new file mode 100644 index 000000000..29818c493 --- /dev/null +++ b/app/services/create_bind_user_service.rb @@ -0,0 +1,51 @@ +class CreateBindUserService < ApplicationService + attr_reader :user, :params + + def initialize(user, params) + @user = user + @params = params + end + + def call + raise Error, '系统错误' if open_user.blank? + raise Error, '系统错误' unless can_bind_user? + + if params[:not_bind].to_s == 'true' + clear_can_bind_user_flag + return user + end + + bind_user = User.try_to_login(params[:login], params[:password]) + raise Error, '用户名或者密码错误' if bind_user.blank? + + ActiveRecord::Base.transaction do + open_user.user_id = bind_user.id + open_user.save! + + user.destroy! + end + + clear_can_bind_user_flag + + bind_user + end + + private + + def open_user + @_open_user ||= begin + case params[:type].to_s + when 'wechat' then user.wechat_open_user + when 'qq' then user.qq_open_user + end + end + end + + def can_bind_user? + Rails.cache.read(open_user.can_bind_cache_key).present? + end + + def clear_can_bind_user_flag + Rails.cache.delete(open_user.can_bind_cache_key) + end +end \ No newline at end of file diff --git a/app/services/oauth/create_or_find_wechat_account_service.rb b/app/services/oauth/create_or_find_wechat_account_service.rb index b59d6a68d..c9402a91f 100644 --- a/app/services/oauth/create_or_find_wechat_account_service.rb +++ b/app/services/oauth/create_or_find_wechat_account_service.rb @@ -18,21 +18,25 @@ class Oauth::CreateOrFindWechatAccountService < ApplicationService open_user = OpenUsers::Wechat.find_by(uid: result['unionid']) return open_user.user if open_user.present? + new_user = false if user.blank? || !user.logged? + new_user = true # 新用户 login = User.generate_login('w') @user = User.new(login: login, nickname: result['nickname']) end ActiveRecord::Base.transaction do - if user.new_record? + if new_user user.save! gender = result['sex'].to_i == 1 ? 0 : 1 user.create_user_extension!(gender: gender) end - OpenUsers::Wechat.create!(user: user, uid: result['unionid']) + new_open_user= OpenUsers::Wechat.create!(user: user, uid: result['unionid']) + + Rails.cache.write(new_open_user.can_bind_cache_key, 1, expires_in: 1.hours) if new_user # 方便后面进行账号绑定 end user diff --git a/config/routes.rb b/config/routes.rb index 056fb324c..c83fddffa 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -827,6 +827,7 @@ Rails.application.routes.draw do end resource :template, only: [:show] resource :setting, only: [:show] + resource :bind_user, only: [:create] end namespace :admins do From b2d17a2260482630eda1cf3abaedba903a5f9338 Mon Sep 17 00:00:00 2001 From: p31729568 Date: Sat, 12 Oct 2019 10:17:31 +0800 Subject: [PATCH 34/84] user account manage: update password when not set password --- app/services/users/update_password_service.rb | 2 +- app/views/users/accounts/show.json.jbuilder | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/services/users/update_password_service.rb b/app/services/users/update_password_service.rb index 0df32eb76..53c6f74c8 100644 --- a/app/services/users/update_password_service.rb +++ b/app/services/users/update_password_service.rb @@ -11,7 +11,7 @@ class Users::UpdatePasswordService < ApplicationService def call Users::UpdatePasswordForm.new(params).validate! - raise Error, '旧密码不匹配' unless user.check_password?(params[:old_password]) + raise Error, '旧密码不匹配' unless user.check_password?(params[:old_password]) || user.hashed_password.blank? ActiveRecord::Base.transaction do user.update!(password: params[:password]) diff --git a/app/views/users/accounts/show.json.jbuilder b/app/views/users/accounts/show.json.jbuilder index ec81cc6bf..48d69924c 100644 --- a/app/views/users/accounts/show.json.jbuilder +++ b/app/views/users/accounts/show.json.jbuilder @@ -25,3 +25,5 @@ json.department_name extension&.department&.name json.base_info_completed user.profile_completed? json.all_certified user.all_certified? + +json.has_password user.hashed_password.present? From edf4973717c88ba85de50c2b18b7cf836fd5bb93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Sat, 12 Oct 2019 10:19:13 +0800 Subject: [PATCH 35/84] =?UTF-8?q?=E6=96=B0=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shixunHomework/Listofworksstudentone.js | 2 +- public/react/src/modules/modals/SendTopics.js | 46 ++++++++++++++++--- .../modules/user/usersInfo/banks/banksMenu.js | 10 ++-- 3 files changed, 48 insertions(+), 10 deletions(-) diff --git a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js index 4ca9b831c..5eed392d5 100644 --- a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js +++ b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js @@ -40,7 +40,7 @@ const RadioGroup = Radio.Group; const CheckboxGroup = Checkbox.Group; const {Option} = Select; //GraduationTaskssetting.js - + //作品列表(学生) class Listofworksstudentone extends Component { //unifiedsetting 统一设置 diff --git a/public/react/src/modules/modals/SendTopics.js b/public/react/src/modules/modals/SendTopics.js index 265bcc7d7..3d5e50344 100644 --- a/public/react/src/modules/modals/SendTopics.js +++ b/public/react/src/modules/modals/SendTopics.js @@ -10,7 +10,8 @@ class SendTopics extends Component{ search:null, Radiolist:undefined, showcheck:false, - smallisSpin:false + smallisSpin:false, + yslbanksMenu:undefined } } @@ -18,8 +19,13 @@ class SendTopics extends Component{ componentDidMount(){ - let{search}=this.state; - this.onupdatalist(search) + // console.log("SendTopicssssss"); + // console.log(this.props); + let{search}=this.state; + this.onupdatalist(search) + this.setState({ + yslbanksMenu:this.props.banksMenu, + }) } onupdatalist=(search)=>{ @@ -49,6 +55,8 @@ class SendTopics extends Component{ onChange=(e)=>{ + console.log("SendTopics"); + console.log(e); this.setState({ Radiolist:e.target.value }) @@ -78,9 +86,35 @@ class SendTopics extends Component{ smallisSpin:false }) if(result.data.status===0){ - this.props.showNotification(result.data.message) - this.props.topicscancelmodel() - this.props.updataslist() + this.props.showNotification(result.data.message); + this.props.topicscancelmodel(); + // result.data.task_ids; + + try { + this.props.updataslist() + }catch (e) { + + } + try { + var rurls=""; + if(this.state.yslbanksMenu.category==="normal"){ + //普通作业 + rurls=`/courses/${this.state.Radiolist}/common_homeworks/${result.data.task_ids}/list`; + }else if(this.state.yslbanksMenu.category==="group"){ + //分组作业 + rurls=`/courses/${this.state.Radiolist}/group_homeworks/${result.data.task_ids}/list`; + }else if(this.state.yslbanksMenu.category==="exercise"){ + // 试卷 + rurls=`/courses/${this.state.Radiolist}/exercises/${result.data.task_ids}/student_exercise_list?tab=0`; + }else if(this.state.yslbanksMenu.category==="poll") { + //问卷 + rurls=`/courses/${this.state.Radiolist}/polls/${result.data.task_ids}/detail` + } + window.open(rurls,'_blank'); + }catch (e) { + + } + }else{ this.props.showNotification(result.data.message) } diff --git a/public/react/src/modules/user/usersInfo/banks/banksMenu.js b/public/react/src/modules/user/usersInfo/banks/banksMenu.js index 1c753450b..27980d567 100644 --- a/public/react/src/modules/user/usersInfo/banks/banksMenu.js +++ b/public/react/src/modules/user/usersInfo/banks/banksMenu.js @@ -25,7 +25,10 @@ class BanksMenu extends Component{ }) } componentDidMount() { - debugger + // var thestring=this.props; + // var yslarr=thestring.split("/"); + // console.log(yslarr); + try { const query = this.props.location.search; const type = query.split('?tab='); @@ -160,8 +163,9 @@ class BanksMenu extends Component{

      { banksMenu.menuArray && banksMenu.menuArray.map((item,key)=>{ - console.log("BanksMenu"); - console.log(item); + // console.log("BanksMenussss"); + // console.log(this.props); + // console.log(this.props.content); return( {item.content} ) From ee01272a4b5141998f0fef201021de4925758469 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sat, 12 Oct 2019 10:34:49 +0800 Subject: [PATCH 36/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../react/src/modules/login/LoginDialog.css | 4 ++ public/react/src/modules/login/LoginDialog.js | 44 ++++++++++++------ public/react/src/modules/login/WeChat.png | Bin 0 -> 2844 bytes public/react/src/modules/login/WeChat@2x.png | Bin 0 -> 8077 bytes public/react/src/modules/login/qq.png | Bin 0 -> 2702 bytes public/react/src/modules/login/qq@2x.png | Bin 0 -> 7663 bytes 6 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 public/react/src/modules/login/WeChat.png create mode 100644 public/react/src/modules/login/WeChat@2x.png create mode 100644 public/react/src/modules/login/qq.png create mode 100644 public/react/src/modules/login/qq@2x.png diff --git a/public/react/src/modules/login/LoginDialog.css b/public/react/src/modules/login/LoginDialog.css index 7be7b12cc..b2738e798 100644 --- a/public/react/src/modules/login/LoginDialog.css +++ b/public/react/src/modules/login/LoginDialog.css @@ -126,4 +126,8 @@ .myinput{ display: flex; justify-content: center; +} + +.startlogin{ + color:#888; } \ No newline at end of file diff --git a/public/react/src/modules/login/LoginDialog.js b/public/react/src/modules/login/LoginDialog.js index 13ba02238..015510566 100644 --- a/public/react/src/modules/login/LoginDialog.js +++ b/public/react/src/modules/login/LoginDialog.js @@ -398,19 +398,32 @@ class LoginDialog extends Component { }); } handleDialogClose = () => { - if(this.props.isloginCancel===undefined){ - window.location.href="/"; - this.props.Modifyloginvalue(); - // this.setState({ - // isRender: false - // }) - // this.props.Modifyloginvalue(); - }else{ - this.setState({ - isRender: false - }) - this.props.Modifyloginvalue(); - } + // if(this.props.match.path==='/'){ + // this.setState({ + // isRender: false + // }) + // this.props.Modifyloginvalue(); + // }else{ + // if(this.props.isloginCancel===undefined){ + // window.location.href="/"; + // this.props.Modifyloginvalue(); + // // this.setState({ + // // isRender: false + // // }) + // // this.props.Modifyloginvalue(); + // }else{ + // this.setState({ + // isRender: false + // }) + // this.props.Modifyloginvalue(); + // } + + this.setState({ + isRender: false + }) + this.props.Modifyloginvalue(); + + // this.setState({ // isRender: false // }) @@ -598,6 +611,11 @@ class LoginDialog extends Component {

      + {/*

      */} + + {/*———————— 快速登录 ————————*/} + + {/*

      */}
      diff --git a/public/react/src/modules/login/WeChat.png b/public/react/src/modules/login/WeChat.png new file mode 100644 index 0000000000000000000000000000000000000000..afadeb36f4a738ef40f349990f4dbf3e8b0b0890 GIT binary patch literal 2844 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 b>|FmpMnghXpGokM00000NkvXXu0mjfCLIkn literal 0 HcmV?d00001 diff --git a/public/react/src/modules/login/qq.png b/public/react/src/modules/login/qq.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4a09bdc7a202ebea5861bc75744533ecc85dce GIT binary patch literal 2702 zcmV;93UT#`P)-fFwxLHZk#n zelbV_^@0+JX=^ZP2-Os?1VR9pTN_GiSp>WEvbXNe&dj;IuX)dzGkfOj%M8wSHceDLwP7mv}NEYbUt;pWJ2pizoKH@dU4=308 z%ZPz4>BF!CR;|Kp-kjXCuXk(6Ndr#-$6)&q3-l-`e-RSSN5Tl6@5X>xfp-EtG>GFa!dpBqy53c4lZd%Q86zTsrLbMJ z2^!UWg1sj9#fX?^Bg2FLI_~^F9L8U~l;~s)m=SmidgDgavD=WhU%{Cy;w*Dn=V0zt zV$QPwTi{|~?ZDITv&O{t5`w=Th33weC!IY#4Wi{25G}bMvwb^yHvV@7-U7V?Woa?w z;dnmtdR_fvC32I*9!|ZOUJc56ofN#F?E9?OGyk#RMTyaxhmMS^?+$rPEcO%cZ{IL8 z_>REyppR5>7nWFBD6m6BUlc#k0!TqLKez6uo=-iSexLh&>iKv#l=|n$q-+=%W$^S0 z;cVci0ndXTghHjj8I{oN7RB_txl#6NCUPWsr4_7@}~t6!Rj*zZLoF(o_c%NQXI=`pr==xrxl!Q zr78AQmb>Zp$GVls+wxwx<5J<$<@Wc9PX%1;)AM&=9|~Noq|WLDuW>Q?lNE`vjg_rqmOg1N5SR!{ zwJMvUGPT8r2sT2vWs7KugK{IP{}Z^DCMPuIvcn$1e7KwD=I{UN8d$SzcHq|Fs~*)< z{cQDUdkR5yDb9?@t1li^>v|P7IvT70K^P~bmYP&4D4${kJ*Hvyimh&(*mH7LPsFkY3q^?sx=LA8_^Az~&OYu~dk~UP7 z%Rv$2bxI7`2El&+osZ2eFjIpDCk$WOF}>NCD#|itLY$q&-+M%zqlBuiP(N?58K4&U zM{mI$yqH1?TwGof%)+crw`b2}t1Z`eeHqSOG&h>0;BWkc=Di*FAzNc0AcL$JaFT(TR~sCP|}S|PZ%~^KKZqi18vv(MZe}3v7UFxm~9Cze)7Kk z$JEswfyWx2p^A36PhqZYtEXchH$BpP;D$c%fq6 zdq=9|gELgzEU-1tyS&QWy%s+C0a#Fk(<*Z_;OVyv=bs8!KANM&wB(k6_aoW-)~Nbr z$KZ^MtBf2r>U>BHPd3+Ts|vH=Z@mcqJOJPP2yE<|9r%QAxbhLh-Iobl{@y+LWO#1I z>gtM7c&(!x<`WPe6~|{MusW$)ZF)~U5N~59Sy)5PJ_R1XLGYZJ#qj>;lM*+tOj)jH z9b-iL4@}B>e5%tDP^Xk{0xBkCy}(aWC@t{$0;#zz-}|`re0Q%~8T`U_@S_>#F1dQ8 zuGJlfYwVN))oCd|Eo-wymKJ)VI=u*wTZc}8pQ^{RvUSg8aPthH)BnFYW>~+|5a`bJ zch>U=Z@f9GKIfD;p$wB9i>x&5+mr9ey}TUZU(48!%=LEGxD7RaU}K2Ms6$repAEnL?|0!`UyDn|G|hV@zY zCdp@ttF2}u)%tF8mlhS;JE64oOJ_A&%g({7+#`xAidxr3BBe{Vb+c8X^|}gKi11rr zRXg}p&YHp6rJl~u5R)b%8{lcsC#wsx_jp5YtQ$sBZ+C6oQs8zpkv7Y2MA1Z)>j6EE z%bB8i2w2e(e0~&{pIqgQYVAla2_XX`q1;rh^Pf_INpYx!4viU`<*e7!@kF6U385@S z%2B{F5q=KzWx*%IOIr?PsMDMXv?Z(zeWta5asSW0F<)*Egu|vm4MQy`Q=fG_k@b3Z zAT&YT%9Vk#RxA+BT?p5u0UPr>qx0FBVy8xAT8%Gammjbs}8>n`?Y==W7C`>l+R6r?^SoQ4mq>RH=#;{S~f|wm`!_Ib)Q_5o- zUGqw0Wc#G%k0ziNL8D-3=mPbgB7Pl$lOB3@0&j<(C6~gakLMKed@I=zUL+J8p@88m ztywD$7m8tp5>8i`O0ok~5snB92)r1;Gm+-sks)vlLFC|j(1;rNJsy5NBzRY2<}~m+ z4fd;(xMiVG_wfpfLTG_Ucv|DS3P&p(W7RG~jMY5Le~rPh1532hM4={9iqHaf4MCs@ zN*;dA5L9{y|EIzJH1N5jl%57|O;HF!T(5{5MYxf|@d6xeP!_y#n!uwbXhHi0B1aQB z4x!&5EVzVaO)yy`e9w+j^5E0s!T4BZ5T{nbnP0^5U7XOt32QjzGAgQ~EO<)I73y)B zpq&c3RztgGA~z!PLZa~oQMpR=o*!Oi^?Ih`!e9w%L4?vpB(&Fh?wqrPaUHa3V8$GD z;TZb=eq5NZu-|tFwA~D__um&s;&}t|vC!@N^!~{neRo^$ze1c>W~;D56aWAK07*qo IM6N<$g623)Bme*a literal 0 HcmV?d00001 diff --git a/public/react/src/modules/login/qq@2x.png b/public/react/src/modules/login/qq@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f6937c2baef3a1737d65941801afb13762d7c6a2 GIT binary patch literal 7663 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 GC7*Hb@qc97{-6kz!S1ZjTijmunyz1bW#O zxYL-Gc=NNsRE@f~&MURmd7xQ+x?Jz@Gd#R!z0!B$98A&L#v6Z-v{G^2TnD#h5t0x{ zQjNqrlVvX(tm-&D=F3k?3u9Be1jXpMK$OMyRtdaPYkYzix9Y&J*L2rZQ_A}6sou5U z3e~fjZOiRkUdQp4u6yaCXLz;#Q}4y4YG?T1%pz`}y$yqgF-V5p}=yYA0&;Gj3J3SNRt(|hj6!+esjQi0Il2HAkGjr#u3JCL{S5wcP&|h zNC$WY6#k~4yp(D#Uffu3NF4)f`?E_c&wA9eyW&Jqa;U3xLW?8;K0LjE^+ANh1D?c4 z8)Hb~MWl_OSexm$+FRD<2DL1A8>;)s3BP?uOja>NNZvdo&|^elh>$>6Azp+GpXwDz z{p1QSot87fLTAfOH>}`PSI=hqRt?;`scw%%jrq0~@1I}9?F4q3A`Kfz(ikau?oNQT zPD<)_1{!Mnj$SP1(!w{WNkasr=UIl35~55YGIetv43|<8S*zt;cF{iJHNNbP z{X3LpsEGXK8KtgG%UlN-uV;6iMMB)WsBppJA|8?wsnKn^RY-yWDd~2YntcpMyFtyM z0O~h{qy@8afS{QmB(`(VJ=4<&%^<`18aSg@M#^W3xW1PcGZkLB2)eAY$J-v<2jydA5@EklE@5GsiPDUKGv2Q=`E zD%+Vc=_;rC!EjzSpZTZ9UHgZ7pq*av{u2B8;*$$06AvUAJ~^jxr&P!YWRj6#!5-Nr zV?%+?w$Y<)J;nkAp6R6NBro(EI?yv|R#Kd)HO|(w-m~&k6uek!-?J>>+Aexl_A0yl zRJvv%#EjDT;&g^<0)?2sPNfCffF2_y86jr3Gi15n-c#G?<%-ExDSL0;Yoo}jyhH(l z9CV3*be-592&_;Vr)l7g(AdX+mLXuN;h$SX-`7%CfO2(_>RNfePhlP}#15tL0xC@~oB-vV<5;AS+}fA>>9HlQuvO!)zC02445AR7Ir1w98_~9vL}4Q_JN=?%g8UZL7TS| z+cO1eKyM?+#voM(L8A$oC015w07zyc%W#_IlA3^~`+)`Ce1~c+(ygN>phX4^x+UO= z(E)VgneF5xh>*n{DA`07w4uT=3w9u(Jgc8Hmn0Y#bbcurf6OJBFL*GH4?sj@_}p-+>B*1$t4MYxyYB z>L`SIQeJdp5a{%Ge^sjL1vrT9Dg6?t3UYiBl9*4wIy6@|GT=8!Ru=7Z#BQYSmHdVY4%PAZo5<)nVln+LE0pmzmRCoy#wP9oq{ z6N13^fKNsc9{6m5ft^4Y;1dh<*jPEVx7+ryh%C^cTL*M73FU!aND9CSWZ8lCKzCiS z>dAQFq+vkkY_9{JE^?PGSm0>@4B!!j>Ohd}U=q+V1pTVeb%{CP{pSOL>c#Ik_|(sp?t;WhK(`@i5a_dLAnL3u z0c%*EK#MVG%$iF(Dog_$Kl*X^^YsVhxxvP24R@@;IDZi d!L9qQ{|nemI9(X_Q*HnN002ovPDHLkV1jDpySo4Y literal 0 HcmV?d00001 From d43e3b73a65114e1cba970da6df8bb3e770e90a9 Mon Sep 17 00:00:00 2001 From: p31729568 Date: Sat, 12 Oct 2019 10:39:28 +0800 Subject: [PATCH 37/84] modify wechat oauth --- app/services/oauth/create_or_find_wechat_account_service.rb | 1 + config/routes.rb | 1 + 2 files changed, 2 insertions(+) diff --git a/app/services/oauth/create_or_find_wechat_account_service.rb b/app/services/oauth/create_or_find_wechat_account_service.rb index c9402a91f..bb03c9f9c 100644 --- a/app/services/oauth/create_or_find_wechat_account_service.rb +++ b/app/services/oauth/create_or_find_wechat_account_service.rb @@ -13,6 +13,7 @@ class Oauth::CreateOrFindWechatAccountService < ApplicationService raise Error, 'Code不能为空' if code.blank? result = WechatOauth::Service.access_token(code) + result = WechatOauth::Service.user_info(result['access_token'], result['openid']) # 存在该用户 open_user = OpenUsers::Wechat.find_by(uid: result['unionid']) diff --git a/config/routes.rb b/config/routes.rb index c83fddffa..f3e2ece62 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -8,6 +8,7 @@ Rails.application.routes.draw do get 'attachments/download/:id/:filename', to: 'attachments#show' get '/auth/qq/callback', to: 'oauth/qq#create' + get '/auth/wechat/callback', to: 'oauth/wechat#create' resources :edu_settings scope '/api' do From bba56630897a8c4fb04135890528dec50f664db9 Mon Sep 17 00:00:00 2001 From: caishi <1149225589@qq.com> Date: Sat, 12 Oct 2019 11:17:40 +0800 Subject: [PATCH 38/84] =?UTF-8?q?=E5=88=86=E7=8F=AD=E5=88=97=E8=A1=A8-?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=A7=92=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/modules/courses/members/ChangeRolePop.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/public/react/src/modules/courses/members/ChangeRolePop.js b/public/react/src/modules/courses/members/ChangeRolePop.js index 0f9e6f5f1..13130394a 100644 --- a/public/react/src/modules/courses/members/ChangeRolePop.js +++ b/public/react/src/modules/courses/members/ChangeRolePop.js @@ -32,7 +32,8 @@ function ChangeRolePop({ member_roles = [], record, courseId, onChangeRoleSucces } const onConfirm = async () => { if (checkBoxRoles && checkBoxRoles.length == 0) { - showNotification('请至少选择一个角色') + showNotification('请至少选择一个角色'); + setCheckBoxRoles(member_roles); return; } const url = `/courses/${courseId}/change_member_role.json` From 7213990a26560a47aed5167831a62c157941fad0 Mon Sep 17 00:00:00 2001 From: p31729568 Date: Sat, 12 Oct 2019 11:23:33 +0800 Subject: [PATCH 39/84] wechat oauth: avatar download --- app/libs/util.rb | 12 ++++++++++++ .../oauth/create_or_find_wechat_account_service.rb | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/app/libs/util.rb b/app/libs/util.rb index 72e728ab9..84f14a6c0 100644 --- a/app/libs/util.rb +++ b/app/libs/util.rb @@ -1,3 +1,5 @@ +require 'open-uri' + module Util module_function @@ -29,6 +31,16 @@ module Util end end + def download_file(url, save_path) + data = open(url, &:read) + file = File.new(save_path, 'w+') + file.binmode + file << data + file.flush + file.close + file + end + def logger_error(exception) Rails.logger.error(exception.message) exception.backtrace.each { |message| Rails.logger.error(message) } diff --git a/app/services/oauth/create_or_find_wechat_account_service.rb b/app/services/oauth/create_or_find_wechat_account_service.rb index bb03c9f9c..d5c22a2f2 100644 --- a/app/services/oauth/create_or_find_wechat_account_service.rb +++ b/app/services/oauth/create_or_find_wechat_account_service.rb @@ -33,6 +33,10 @@ class Oauth::CreateOrFindWechatAccountService < ApplicationService gender = result['sex'].to_i == 1 ? 0 : 1 user.create_user_extension!(gender: gender) + + # 下载头像 + avatar_path = Util::FileManage.source_disk_filename(user) + Util.download_file(result['headimgurl'], avatar_path) end new_open_user= OpenUsers::Wechat.create!(user: user, uid: result['unionid']) From 4d27d256ee892ac7fb04299d5d4d92c8a027503d Mon Sep 17 00:00:00 2001 From: p31729568 Date: Sat, 12 Oct 2019 11:32:24 +0800 Subject: [PATCH 40/84] fix wechat oauth --- app/controllers/oauth/wechat_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/oauth/wechat_controller.rb b/app/controllers/oauth/wechat_controller.rb index 8649e9b3f..d2ea4eb99 100644 --- a/app/controllers/oauth/wechat_controller.rb +++ b/app/controllers/oauth/wechat_controller.rb @@ -1,4 +1,4 @@ -class WechatController < Oauth::BaseController +class Oauth::WechatController < Oauth::BaseController def create user = Oauth::CreateOrFindWechatAccountService.call(current_user ,params) From c1e2ca77a0b164b738d956abda4bd14dcb2ff9e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sat, 12 Oct 2019 12:44:41 +0800 Subject: [PATCH 41/84] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/AppConfig.js | 20 ++++---- .../src/modules/login/EducoderInteresse.js | 3 -- .../react/src/modules/login/EducoderLogin.js | 1 - .../react/src/modules/login/LoginDialog.css | 15 ++++-- public/react/src/modules/login/LoginDialog.js | 45 ++++++++++++++---- .../modules/user/LoginRegisterComponent.js | 27 +++++++++-- public/react/src/modules/user/common.css | 10 ++++ public/react/src/modules/user/commontwo.css | 4 +- public/react/src/modules/user/img/WeChat.png | Bin 0 -> 2844 bytes .../react/src/modules/user/img/WeChat@2x.png | Bin 0 -> 8077 bytes public/react/src/modules/user/img/qq.png | Bin 0 -> 2702 bytes public/react/src/modules/user/img/qq@2x.png | Bin 0 -> 7663 bytes 12 files changed, 93 insertions(+), 32 deletions(-) create mode 100644 public/react/src/modules/user/img/WeChat.png create mode 100644 public/react/src/modules/user/img/WeChat@2x.png create mode 100644 public/react/src/modules/user/img/qq.png create mode 100644 public/react/src/modules/user/img/qq@2x.png diff --git a/public/react/src/AppConfig.js b/public/react/src/AppConfig.js index e1d5da561..98571d818 100644 --- a/public/react/src/AppConfig.js +++ b/public/react/src/AppConfig.js @@ -21,16 +21,16 @@ let hashTimeout // TODO 开发期多个身份切换 let debugType ="" -if (isDev) { - const _search = window.location.search; - let parsed = {}; - if (_search) { - parsed = queryString.parse(_search); - } - debugType = window.location.search.indexOf('debug=t') != -1 ? 'teacher' : - window.location.search.indexOf('debug=s') != -1 ? 'student' : - window.location.search.indexOf('debug=a') != -1 ? 'admin' : parsed.debug || 'admin' -} +// if (isDev) { +// const _search = window.location.search; +// let parsed = {}; +// if (_search) { +// parsed = queryString.parse(_search); +// } +// debugType = window.location.search.indexOf('debug=t') != -1 ? 'teacher' : +// window.location.search.indexOf('debug=s') != -1 ? 'student' : +// window.location.search.indexOf('debug=a') != -1 ? 'admin' : parsed.debug || 'admin' +// } window._debugType = debugType; export function initAxiosInterceptors(props) { initOnlineOfflineListener() diff --git a/public/react/src/modules/login/EducoderInteresse.js b/public/react/src/modules/login/EducoderInteresse.js index c69b2195d..073f188af 100644 --- a/public/react/src/modules/login/EducoderInteresse.js +++ b/public/react/src/modules/login/EducoderInteresse.js @@ -20,9 +20,6 @@ var newContainer={ top: "0px", bottom: "0px", minHeight: "100%", - overflow:"hidden", - - } class EducoderInteresse extends Component { constructor(props) { diff --git a/public/react/src/modules/login/EducoderLogin.js b/public/react/src/modules/login/EducoderLogin.js index eed3a9add..a6600b1e0 100644 --- a/public/react/src/modules/login/EducoderLogin.js +++ b/public/react/src/modules/login/EducoderLogin.js @@ -60,7 +60,6 @@ var newContainer={ top: "0px", bottom: "0px", minHeight: "100%", - overflow:"hidden", paddingTop: "40px", } diff --git a/public/react/src/modules/login/LoginDialog.css b/public/react/src/modules/login/LoginDialog.css index b2738e798..d66acc811 100644 --- a/public/react/src/modules/login/LoginDialog.css +++ b/public/react/src/modules/login/LoginDialog.css @@ -21,7 +21,7 @@ overflow-y:hidden !important; } #log_reg_content{ - top: 0px !important; + top: -64px !important; } #log_reg_content{ width:405px !important; @@ -106,7 +106,7 @@ #closeIcon{ position: absolute; - top: -30px; + top: -100px; right: -27px; z-index: 100000; } @@ -114,7 +114,7 @@ .bluebutton{ width: 100%; text-align: center; - color: #FFFFff!important; + color: #FFFFff !important; display: block; background: #cbcbcb; height: 45px; @@ -130,4 +130,13 @@ .startlogin{ color:#888; +} +.weixinheight390{ + height: 390px; +} +#log_reg_content { + padding: 38px 30px 20px !important; +} +.textcenter{ + text-align: center; } \ No newline at end of file diff --git a/public/react/src/modules/login/LoginDialog.js b/public/react/src/modules/login/LoginDialog.js index 015510566..7a0637678 100644 --- a/public/react/src/modules/login/LoginDialog.js +++ b/public/react/src/modules/login/LoginDialog.js @@ -104,6 +104,7 @@ class LoginDialog extends Component { MyEduCoderModals:false, Phonenumberisnotco:undefined, Phonenumberisnotcobool:false, + weixinlogin:false }; } @@ -506,9 +507,19 @@ class LoginDialog extends Component { getloginurl=(url)=>{ window.location.href = url; }; + openweixinlogin=()=>{ + this.setState({ + weixinlogin:true + }) + } + hideweixinlogin=()=>{ + this.setState({ + weixinlogin:false + }) + } render() { let{open,login,speedy,loginValue,regular,isGoing,isGoingValue,disabled,bottonclass,Phonenumberisnotco, - dialogBox,shortcutnum,disabledType,gaincode,authCodeType,authCodeclass, isRender}=this.state; + dialogBox,shortcutnum,disabledType,gaincode,authCodeType,authCodeclass, isRender,weixinlogin}=this.state; if (isRender === undefined) { isRender = false @@ -532,14 +543,14 @@ class LoginDialog extends Component {
    -
      + {weixinlogin===true?"":
      • {this.enter(0)}}>登录
      • {/*
      • {this.register(0)}}>快捷登录
      • */} -
      +
    }
    -
    + {weixinlogin===true?"":
    {/*快捷登录*/} diff --git a/public/react/src/modules/user/LoginRegisterComponent.js b/public/react/src/modules/user/LoginRegisterComponent.js index 8b7df2e02..476e4cf25 100644 --- a/public/react/src/modules/user/LoginRegisterComponent.js +++ b/public/react/src/modules/user/LoginRegisterComponent.js @@ -890,7 +890,9 @@ class LoginRegisterComponent extends Component { console.log(classpass); return ( -
    +
    - + {weixinlogin===false? 登录 注册 - + :""} - { - parseInt(tab[0])==0 && + { + weixinlogin===false&&parseInt(tab[0])==0 &&
    + +
    +
    +
    +
    + +
    +
    + 为了更好的为您服务,请关联一个EduCoder账号 +
    +
    + +
    + +

    + + +

    + 新用户 +
    + + +
    欢迎来到EduCoder,新用户登录EduCoder可以到“账号管理-安全设置”中绑定手机/邮箱,以后可以用绑定的手机/邮箱,设置的密码登录EduCoder了。
    + 立即体验表示您已经同意我们的 服务协议条款 +
    + +
    +
    + +

    + +

    + + +

    + 老用户 +
    + + +
    已有EduCoder账号,可以输入您的账号和密码,将您的微信账号与EduCoder账号进行绑定。
    + + + + + + + {this.state.logintypes==="username"?请填写账号:this.state.logintypes==="password"?请填写密码:""} +
    + +
    +
    + +

    +
    + +
    +
    +
    © 2019 EduCoder湘ICP备17009477号Trustie   &   IntelliDE inside.
    +
    +
    + +
    + ) + } + +} + +export default Otherlogin; diff --git a/public/react/src/modules/user/LoginRegisterComponent.js b/public/react/src/modules/user/LoginRegisterComponent.js index 022564f5b..1e71ed681 100644 --- a/public/react/src/modules/user/LoginRegisterComponent.js +++ b/public/react/src/modules/user/LoginRegisterComponent.js @@ -1163,7 +1163,7 @@ class LoginRegisterComponent extends Component { color: '#676767', }}>我已阅读并同意 - 《服务协议条款》 + 《服务协议条款》 @@ -1184,7 +1184,7 @@ class LoginRegisterComponent extends Component { frameBorder="0" sandbox="allow-scripts allow-same-origin allow-top-navigation" scrolling="no" - src="https://open.weixin.qq.com/connect/qrconnect?appid=wx6b119e2d829c13fa&redirect_uri=https%3a%2f%2fwww.educoder.net%2f&response_type=code&scope=snsapi_login#wechat_redirect">:""} + src="https://open.weixin.qq.com/connect/qrconnect?appid=wx6b119e2d829c13fa&redirect_uri=https%3a%2f%2fwww.educoder.net%2fotherlogin&response_type=code&scope=snsapi_login#wechat_redirect">:""} {weixinlogin===true?

    this.hideweixinlogin()}>返回登录注册

    :""} From 358c718f7e5a7f8e8dfa5d63ebc35edea7c2eb7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Sat, 12 Oct 2019 16:22:28 +0800 Subject: [PATCH 64/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/modules/courses/shixunHomework/ShixunStudentWork.js | 1 + .../src/modules/courses/shixunHomework/Workquestionandanswer.js | 1 + 2 files changed, 2 insertions(+) diff --git a/public/react/src/modules/courses/shixunHomework/ShixunStudentWork.js b/public/react/src/modules/courses/shixunHomework/ShixunStudentWork.js index 074bab663..e7f3ae5c7 100644 --- a/public/react/src/modules/courses/shixunHomework/ShixunStudentWork.js +++ b/public/react/src/modules/courses/shixunHomework/ShixunStudentWork.js @@ -416,6 +416,7 @@ class ShixunStudentWork extends Component { axios.get(url).then((response) => { if(response.status===200){ + const dataformat = 'YYYY-MM-DD HH:mm'; let starttime= this.props.getNowFormatDates(1); let endtime=this.props.getNowFormatDates(2); this.setState({ diff --git a/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js b/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js index 57a51241e..f211b4a1d 100644 --- a/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js +++ b/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js @@ -157,6 +157,7 @@ class Workquestionandanswer extends Component { axios.get(url).then((response) => { if (response.status === 200) { + const dataformat = 'YYYY-MM-DD HH:mm'; let starttime = this.props.getNowFormatDates(1); let endtime = this.props.getNowFormatDates(2); this.setState({ From ce511202fbc01cc046cff3cf9d173e49e190503b Mon Sep 17 00:00:00 2001 From: p31729568 Date: Sat, 12 Oct 2019 16:31:13 +0800 Subject: [PATCH 65/84] fix oauth user bug --- app/services/oauth/create_or_find_qq_account_service.rb | 2 +- app/services/oauth/create_or_find_wechat_account_service.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/services/oauth/create_or_find_qq_account_service.rb b/app/services/oauth/create_or_find_qq_account_service.rb index 3b3c71367..691764ea2 100644 --- a/app/services/oauth/create_or_find_qq_account_service.rb +++ b/app/services/oauth/create_or_find_qq_account_service.rb @@ -17,7 +17,7 @@ class Oauth::CreateOrFindQqAccountService < ApplicationService new_user = true # 新用户 login = User.generate_login('q') - @user = User.new(login: login, nickname: params.dig('info', 'nickname')) + @user = User.new(login: login, nickname: params.dig('info', 'nickname'), type: 'User', status: User::STATUS_ACTIVE) end ActiveRecord::Base.transaction do diff --git a/app/services/oauth/create_or_find_wechat_account_service.rb b/app/services/oauth/create_or_find_wechat_account_service.rb index 717f4bbd4..0313054b7 100644 --- a/app/services/oauth/create_or_find_wechat_account_service.rb +++ b/app/services/oauth/create_or_find_wechat_account_service.rb @@ -24,7 +24,7 @@ class Oauth::CreateOrFindWechatAccountService < ApplicationService new_user = true # 新用户 login = User.generate_login('w') - @user = User.new(login: login, nickname: result['nickname']) + @user = User.new(login: login, nickname: result['nickname'], type: 'User', status: User::STATUS_ACTIVE) end ActiveRecord::Base.transaction do From a03bb0dafb33612f29bac101e74b5cab9d2de127 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sat, 12 Oct 2019 16:35:31 +0800 Subject: [PATCH 66/84] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E7=99=BB=E5=BD=95=20?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/App.js | 9 ++++ public/react/src/modules/login/LoginDialog.js | 2 +- public/react/src/modules/login/Otherlogin.js | 44 ++++------------ .../src/modules/login/Otherloginstart.js | 52 +++++++++++++++++++ .../modules/user/LoginRegisterComponent.js | 2 +- 5 files changed, 74 insertions(+), 35 deletions(-) create mode 100644 public/react/src/modules/login/Otherloginstart.js diff --git a/public/react/src/App.js b/public/react/src/App.js index f9b6fd36b..34b5d1a4f 100644 --- a/public/react/src/App.js +++ b/public/react/src/App.js @@ -70,6 +70,12 @@ const Otherlogin=Loadable({ loader: () => import('./modules/login/Otherlogin'), loading: Loading, }) + +const Otherloginstart=Loadable({ + loader: () => import('./modules/login/Otherloginstart'), + loading: Loading, +}) + const TestIndex = Loadable({ loader: () => import('./modules/test'), loading: Loading, @@ -412,6 +418,9 @@ class App extends Component { + diff --git a/public/react/src/modules/login/LoginDialog.js b/public/react/src/modules/login/LoginDialog.js index b0c1602a9..ae7d781e9 100644 --- a/public/react/src/modules/login/LoginDialog.js +++ b/public/react/src/modules/login/LoginDialog.js @@ -638,7 +638,7 @@ class LoginDialog extends Component { frameBorder="0" sandbox="allow-scripts allow-same-origin allow-top-navigation" scrolling="no" - src="https://open.weixin.qq.com/connect/qrconnect?appid=wx6b119e2d829c13fa&redirect_uri=https%3a%2f%2fwww.educoder.net%2fotherlogin&response_type=code&scope=snsapi_login#wechat_redirect">:""} + src="https://open.weixin.qq.com/connect/qrconnect?appid=wx6b119e2d829c13fa&redirect_uri=https%3a%2f%2fwww.educoder.net%2fotherloginstart&response_type=code&scope=snsapi_login#wechat_redirect">:""} {weixinlogin===true?

    this.hideweixinlogin()}>返回账号登录

    :""} diff --git a/public/react/src/modules/login/Otherlogin.js b/public/react/src/modules/login/Otherlogin.js index 2dc82b578..3c27e0e96 100644 --- a/public/react/src/modules/login/Otherlogin.js +++ b/public/react/src/modules/login/Otherlogin.js @@ -79,48 +79,26 @@ class Otherlogin extends Component { } - getinfo=()=>{ - let url = `/users/get_user_info.json` - axios.get(url).then((result)=> { - console.log(result); - if(result){ - this.setState({ - data:result.data, - spinnings:false - }) - } - }).catch((error)=>{ - this.setState({ - spinnings:false - }) - }) - - } componentDidMount() { - let query=this.props.location.search; - const type = query.split('?code='); - const types = type[1].split('&state='); - let codeurl = `/auth/wechat/callback.json` - axios.get(codeurl,{params:{ - code:types[0] - }}).then((result)=> { + + let url = `/users/get_user_info.json` + axios.get(url).then((result)=> { + console.log(result); if(result){ - if(result.data.status===0){ - if(result.data.true===false){ - this.getinfo() - }else{ - // this.getinfo() - window.location.href="/" - } - } + this.setState({ + data:result.data, + spinnings:false + }) } }).catch((error)=>{ this.setState({ spinnings:false }) }) - } + + + } loginInputonChange=(e)=>{ diff --git a/public/react/src/modules/login/Otherloginstart.js b/public/react/src/modules/login/Otherloginstart.js new file mode 100644 index 000000000..4b134805d --- /dev/null +++ b/public/react/src/modules/login/Otherloginstart.js @@ -0,0 +1,52 @@ +import React, { Component } from 'react'; + +import { BrowserRouter as Router, Route, Link } from "react-router-dom"; + +import { Spin } from 'antd'; +import axios from 'axios'; +class Otherloginstart extends Component { + + componentDidMount() { + let query=this.props.location.search; + const type = query.split('?code='); + const types = type[1].split('&state='); + let codeurl = `/auth/wechat/callback.json` + axios.get(codeurl,{params:{ + code:types[0] + }}).then((result)=> { + if(result){ + if(result.data.status===0){ + if(result.data.true===false){ + window.location.href="/otherlogin" + }else{ + // this.getinfo() + window.location.href="/" + } + } + } + }).catch((error)=>{ + + }) + + } + + render() { + // Loading + return ( +
    + + +
    + ); + } +} + +export default Otherloginstart; \ No newline at end of file diff --git a/public/react/src/modules/user/LoginRegisterComponent.js b/public/react/src/modules/user/LoginRegisterComponent.js index a599bcf24..fedc3cb22 100644 --- a/public/react/src/modules/user/LoginRegisterComponent.js +++ b/public/react/src/modules/user/LoginRegisterComponent.js @@ -1192,7 +1192,7 @@ class LoginRegisterComponent extends Component { frameBorder="0" sandbox="allow-scripts allow-same-origin allow-top-navigation" scrolling="no" - src="https://open.weixin.qq.com/connect/qrconnect?appid=wx6b119e2d829c13fa&redirect_uri=https%3a%2f%2fwww.educoder.net%2fotherlogin&response_type=code&scope=snsapi_login#wechat_redirect">:""} + src="https://open.weixin.qq.com/connect/qrconnect?appid=wx6b119e2d829c13fa&redirect_uri=https%3a%2f%2fwww.educoder.net%2fotherloginstart&response_type=code&scope=snsapi_login#wechat_redirect">:""} {weixinlogin===true?

    this.hideweixinlogin()}>返回登录注册

    :""} From 076d09bc9b350c2f43121ba2bbe440b58af11c57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Sat, 12 Oct 2019 16:42:54 +0800 Subject: [PATCH 67/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/modules/courses/shixunHomework/Listofworksstudentone.js | 2 +- .../src/modules/courses/shixunHomework/ShixunStudentWork.js | 2 +- .../src/modules/courses/shixunHomework/Trainingjobsetting.js | 2 +- .../src/modules/courses/shixunHomework/Workquestionandanswer.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js index 6de412525..926e1b023 100644 --- a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js +++ b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js @@ -2803,7 +2803,7 @@ class Listofworksstudentone extends Component { starttime: "发布时间:" + moment(moment(new Date())).format("YYYY-MM-DD HH:mm"), endtime: "截止时间:" + endtime, starttimes:starttime, - starttimesend:response.data.end_time===undefined||response.data.end_time===null||response.data.end_time===""?undefined:moment(response.data.end_time, dataformat), + starttimesend:response.data.end_time===undefined||response.data.end_time===null||response.data.end_time===""?undefined:response.data.end_time, typs:"start", Cancelname: "暂不发布", Savesname: "立即发布", diff --git a/public/react/src/modules/courses/shixunHomework/ShixunStudentWork.js b/public/react/src/modules/courses/shixunHomework/ShixunStudentWork.js index e7f3ae5c7..95de82445 100644 --- a/public/react/src/modules/courses/shixunHomework/ShixunStudentWork.js +++ b/public/react/src/modules/courses/shixunHomework/ShixunStudentWork.js @@ -434,7 +434,7 @@ class ShixunStudentWork extends Component { Saves:this.homeworkstartend, course_groups:response.data.course_groups, starttimes:starttime, - starttimesend:response.data.end_time===undefined||response.data.end_time===null||response.data.end_time===""?undefined:moment(response.data.end_time, dataformat), + starttimesend:response.data.end_time===undefined||response.data.end_time===null||response.data.end_time===""?undefined:response.data.end_time, typs:"start", }) } diff --git a/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js b/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js index 5cf7b4f8b..5d2462ec0 100644 --- a/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js +++ b/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js @@ -1537,7 +1537,7 @@ class Trainingjobsetting extends Component { Botval:`本操作只对"未发布"的分班有效`, starttime: "发布时间:" + moment(moment(new Date())).format("YYYY-MM-DD HH:mm"), starttimes:starttime, - starttimesend:response.data.end_time===undefined||response.data.end_time===null||response.data.end_time===""?undefined:moment(response.data.end_time, dataformat), + starttimesend:response.data.end_time===undefined||response.data.end_time===null||response.data.end_time===""?undefined:response.data.end_time, typs:"start", endtime: "截止时间:" + endtime, Cancelname: "暂不发布", diff --git a/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js b/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js index f211b4a1d..34c484b83 100644 --- a/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js +++ b/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js @@ -175,7 +175,7 @@ class Workquestionandanswer extends Component { Saves: this.homeworkstartend, course_groups: response.data.course_groups, starttimes: starttime, - starttimesend:response.data.end_time===undefined||response.data.end_time===null||response.data.end_time===""?undefined:moment(response.data.end_time, dataformat), + starttimesend:response.data.end_time===undefined||response.data.end_time===null||response.data.end_time===""?undefined:response.data.end_time, typs: "start", }) } From 8817c87677bc43155a0dce5f735daa0de2bd1f78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sat, 12 Oct 2019 16:45:05 +0800 Subject: [PATCH 68/84] =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=AF=86=E7=A0=81?= =?UTF-8?q?=E8=A7=84=E5=88=99=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/AppConfig.js | 24 +++++++++---------- .../src/modules/user/account/AccountSecure.js | 24 +++++++++++++------ 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/public/react/src/AppConfig.js b/public/react/src/AppConfig.js index 98571d818..c00c5fb62 100644 --- a/public/react/src/AppConfig.js +++ b/public/react/src/AppConfig.js @@ -21,16 +21,16 @@ let hashTimeout // TODO 开发期多个身份切换 let debugType ="" -// if (isDev) { -// const _search = window.location.search; -// let parsed = {}; -// if (_search) { -// parsed = queryString.parse(_search); -// } -// debugType = window.location.search.indexOf('debug=t') != -1 ? 'teacher' : -// window.location.search.indexOf('debug=s') != -1 ? 'student' : -// window.location.search.indexOf('debug=a') != -1 ? 'admin' : parsed.debug || 'admin' -// } +if (isDev) { + const _search = window.location.search; + let parsed = {}; + if (_search) { + parsed = queryString.parse(_search); + } + debugType = window.location.search.indexOf('debug=t') != -1 ? 'teacher' : + window.location.search.indexOf('debug=s') != -1 ? 'student' : + window.location.search.indexOf('debug=a') != -1 ? 'admin' : parsed.debug || 'admin' +} window._debugType = debugType; export function initAxiosInterceptors(props) { initOnlineOfflineListener() @@ -84,9 +84,9 @@ export function initAxiosInterceptors(props) { } config.url = `${proxy}${url}`; if (config.url.indexOf('?') == -1) { - config.url = `${config.url}?debug=${debugType}`; + config.url = `${config.url}?debug=${'student'}`; } else { - config.url = `${config.url}&debug=${debugType}`; + config.url = `${config.url}&debug=${'student'}`; } } else { // 加api前缀 diff --git a/public/react/src/modules/user/account/AccountSecure.js b/public/react/src/modules/user/account/AccountSecure.js index 797b350d2..2e90824c9 100644 --- a/public/react/src/modules/user/account/AccountSecure.js +++ b/public/react/src/modules/user/account/AccountSecure.js @@ -153,20 +153,28 @@ class AccountSecure extends Component { }) } onPasswordSubmit = () => { + let {basicInfo}=this.props; this.props.form.validateFieldsAndScroll((err, values) => { if (!err) { - if(values.p_old == values.p_new){ - this.props.showNotification("新密码不能与旧密码相同!"); - return; - } + if(basicInfo&&basicInfo.has_password===true){ + if(values.p_old == values.p_new){ + this.props.showNotification("新密码不能与旧密码相同!"); + return; + } + } + if(values.p_again != values.p_new){ this.props.showNotification("两次输入的新密码必须一致!"); return; } let {login}=this.props.current_user; let url=`/users/accounts/${login}/password.json`; + let p_old=undefined; + if(basicInfo&&basicInfo.has_password===true){ + p_old=values.p_old + } axios.put((url),{ - old_password:values.p_old, + old_password:p_old, password:values.p_new }).then((result)=>{ if(result){ @@ -215,6 +223,8 @@ class AccountSecure extends Component { let {basicInfo}=this.props; const { getFieldDecorator } = this.props.form; const { updating,seconds,secondsFlag } = this.state + + console.log(basicInfo&&basicInfo.has_password) return (
    @@ -426,7 +436,7 @@ class AccountSecure extends Component { { updating == PASSWORD && - @@ -439,7 +449,7 @@ class AccountSecure extends Component { })( )} - + :""} Date: Sat, 12 Oct 2019 16:45:59 +0800 Subject: [PATCH 69/84] admins: fix search identifier ineffective at laboratory list --- app/queries/admins/laboratory_query.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/queries/admins/laboratory_query.rb b/app/queries/admins/laboratory_query.rb index 21020216b..8667bb8ed 100644 --- a/app/queries/admins/laboratory_query.rb +++ b/app/queries/admins/laboratory_query.rb @@ -15,7 +15,7 @@ class Admins::LaboratoryQuery < ApplicationQuery keyword = strip_param(:keyword) if keyword.present? like_sql = 'schools.name LIKE :keyword OR laboratories.identifier LIKE :keyword' - laboratories = laboratories.joins(:school).where(like_sql, keyword: "%#{keyword}%") + laboratories = laboratories.left_joins(:school).where(like_sql, keyword: "%#{keyword}%") end custom_sort laboratories, params[:sort_by], params[:sort_direction] From 558a7051ab12bfeef33f7ec41e53b780e06302b7 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Sat, 12 Oct 2019 16:51:30 +0800 Subject: [PATCH 70/84] =?UTF-8?q?=E8=AF=95=E5=8D=B7=E8=AF=84=E9=98=85?= =?UTF-8?q?=E9=A1=B5=E7=9A=84=E9=A1=B5=E9=9D=A2=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/exercises_controller.rb | 6 +++--- app/helpers/exercises_helper.rb | 16 ++++++++-------- .../exercises/_user_exercise_info.json.jbuilder | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index 74059b314..9979ae48f 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -1152,7 +1152,7 @@ class ExercisesController < ApplicationController # 1 老师权限,0 学生权限 @is_teacher_or = (@user_course_identity < Course::STUDENT) ? 1 : 0 @student_status = 2 - @exercise_questions = @exercise.exercise_questions.includes(:exercise_shixun_challenges,:exercise_standard_answers,:exercise_answers,:exercise_shixun_answers).order("question_number ASC") + @exercise_questions = @exercise.exercise_questions.includes(:exercise_shixun_challenges,:exercise_standard_answers,:exercise_answers,:exercise_shixun_answers,:exercise_answer_comments).order("question_number ASC") @question_status = [] get_exercise_status = @exercise.get_exercise_status(current_user) #当前用户的试卷状态 @ex_answer_status = @exercise.get_exercise_status(@ex_user&.user) #当前试卷用户的试卷状态 @@ -1709,9 +1709,9 @@ class ExercisesController < ApplicationController ques_number = q.question_number end if q.question_type != Exercise::PRACTICAL - ques_vote = q.exercise_answers.search_exercise_answer("user_id",user_id) + ques_vote = q.exercise_answers.select{|answer| answer.user_id == user_id} else - ques_vote = q.exercise_shixun_answers.search_shixun_answers("user_id",user_id) + ques_vote = q.exercise_shixun_answers.select{|answer| answer.user_id == user_id} end ques_status = 0 if ques_vote.present? diff --git a/app/helpers/exercises_helper.rb b/app/helpers/exercises_helper.rb index ef9261990..e13f754be 100644 --- a/app/helpers/exercises_helper.rb +++ b/app/helpers/exercises_helper.rb @@ -10,9 +10,9 @@ module ExercisesHelper exercise_obj_status.each do |q| q_type = q.question_type if q_type == Exercise::PRACTICAL - answers_content = q.exercise_shixun_answers.search_shixun_answers("user_id",user_id) + answers_content = q.exercise_shixun_answers.select{|answer| answer.user_id == user_id} else - answers_content = q.exercise_answers.search_answer_users("user_id",user_id) + answers_content = q.exercise_answers.select{|answer| answer.user_id == user_id} end if q_type <= Exercise::JUDGMENT @@ -40,7 +40,7 @@ module ExercisesHelper ques_score = 0.0 end else - ques_score = answers_content.score_reviewed.select(:score).pluck(:score).sum + ques_score = answers_content.select{|answer| answer.score >= 0.0}.pluck(:score).sum end if ques_score >= q.question_score #满分作答为正确 @@ -64,7 +64,7 @@ module ExercisesHelper exercise_sub_status = exercise_questions.find_by_custom("question_type",Exercise::SUBJECTIVE) #主观题 @ex_sub_array = [] #主观题的已答/未答 exercise_sub_status.each do |s| - sub_answer = s.exercise_answers.search_answer_users("user_id",user_id) #主观题只有一个回答 + sub_answer = s.exercise_answers.select{|answer| answer.user_id == user_id} #主观题只有一个回答 if sub_answer.present? && sub_answer.first.score >= 0.0 if s.question_score <= sub_answer.first.score stand_status = 1 @@ -772,12 +772,12 @@ module ExercisesHelper question_comment = [] # user_score_pre = nil if ques_type == 5 - exercise_answers = q.exercise_shixun_answers.search_shixun_answers("user_id",ex_answerer_id) + exercise_answers = q.exercise_shixun_answers.select{|answer| answer.user_id == ex_answerer_id} else - exercise_answers = q.exercise_answers.search_exercise_answer("user_id",ex_answerer_id) #试卷用户的回答 + exercise_answers = q.exercise_answers.select{|answer| answer.user_id == ex_answerer_id} #试卷用户的回答 end if student_status == 2 #当前为老师,或为学生且已提交 - user_score_pre = exercise_answers.score_reviewed + user_score_pre = exercise_answers.select{|answer| answer.score >= 0.0} if ques_type == 4 #主观题时,且没有大于0的分数时,为空 user_score = user_score_pre.present? ? user_score_pre.pluck(:score).sum : nil elsif ques_type == 5 || ques_type == 3 @@ -829,7 +829,7 @@ module ExercisesHelper if ex_type == 4 #填空题/主观题/实训题有评论的 q_answer_id = exercise_answers.present? ? exercise_answers.first.id : nil - question_comment = q.exercise_answer_comments.search_answer_comments("exercise_answer_id",q_answer_id) + question_comment = q.exercise_answer_comments.select{|comment| comment.exercise_answer_id == q_answer_id} end { "user_score": (user_score.present? ? user_score.round(1).to_s : nil), diff --git a/app/views/exercises/_user_exercise_info.json.jbuilder b/app/views/exercises/_user_exercise_info.json.jbuilder index bdac3a985..c351a9b26 100644 --- a/app/views/exercises/_user_exercise_info.json.jbuilder +++ b/app/views/exercises/_user_exercise_info.json.jbuilder @@ -65,7 +65,7 @@ json.exercise_questions do shixun_type: user_ques_answers[:shixun_type], ques_position: nil, edit_type:nil - if user_ques_comments.count > 0 + if user_ques_comments.size > 0 json.question_comments do json.partial! "exercises/exercise_comments", question_comment:user_ques_answers[:question_comment].first end From 4a3837cd9014addc018cafb35c9d8e44046fece2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sat, 12 Oct 2019 16:52:56 +0800 Subject: [PATCH 71/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../graduation/tasks/GraduationTaskDetail.js | 725 +++++++++--------- 1 file changed, 358 insertions(+), 367 deletions(-) diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationTaskDetail.js b/public/react/src/modules/courses/graduation/tasks/GraduationTaskDetail.js index fbbfafabc..66e4ccb8d 100644 --- a/public/react/src/modules/courses/graduation/tasks/GraduationTaskDetail.js +++ b/public/react/src/modules/courses/graduation/tasks/GraduationTaskDetail.js @@ -7,7 +7,6 @@ import Loading from '../../../../Loading'; import {BrowserRouter as Router,Route,Switch} from 'react-router-dom'; import axios from 'axios'; import HomeworkModal from "../../coursesPublic/HomeworkModal"; -import OneSelfOrderModal from "../../coursesPublic/OneSelfOrderModal"; import AccessoryModal from "../../coursesPublic/AccessoryModal"; import Associationmodel from '../../coursesPublic/Associationmodel'; import CoursesListType from '../../coursesPublic/CoursesListType'; @@ -21,90 +20,89 @@ import Modals from '../../../modals/Modals'; //毕设描述 const GraduationTasksquestions= Loadable({ - loader: () => import('./GraduationTaskssettingquestions'), - loading: Loading, + loader: () => import('./GraduationTaskssettingquestions'), + loading: Loading, }) //毕设任务设置 const GraduationTaskssetting=Loadable({ - loader: () => import('./GraduationTaskssetting'), - loading: Loading, + loader: () => import('./GraduationTaskssetting'), + loading: Loading, }) //毕设任务列表 const GraduationTaskslist=Loadable({ - loader: () => import('./GraduationTaskssettinglist'), - loading: Loading, + loader: () => import('./GraduationTaskssettinglist'), + loading: Loading, }) class GraduationTaskDetail extends Component{ - constructor(props){ - super(props); - this.state={ - modalname:undefined, - visible:false, - OneSelftype:false, + constructor(props){ + super(props); + this.state={ + modalname:undefined, + visible:false, Topval:undefined, starttime:undefined, starttimes:undefined, typs:undefined, - endtime:undefined, - Cancelname:undefined, - Savesname:undefined, - Cancel:undefined, - Saves:undefined, - Topvalright:undefined, - Botvalleft:undefined, - course_groupslist:undefined, - course_groups:undefined, - questionslist:undefined, - tab:"list", - visibles:undefined, - Modalstype:undefined, - Modalstopval:undefined, - ModalCancel:undefined, - ModalSave:undefined, - acrossVisible:undefined - } - } - componentDidMount(){ - this.getdatas() - } - getdatas=()=>{ - const task_Id = this.props.match.params.task_Id; - let url="/graduation_tasks/"+task_Id+".json"; - - axios.get(url).then((result)=>{ - if(result.status===200){ - this.setState({ - questionslist:result.data - }) - - } - }).catch((error)=>{ - console.log(error) - }) - } - - - // 交叉评阅设置弹框 - openAcross=()=>{ - this.setState({ - acrossVisible:true - }) - } - closeAcross=()=>{ - this.setState({ - acrossVisible:false - }) + endtime:undefined, + Cancelname:undefined, + Savesname:undefined, + Cancel:undefined, + Saves:undefined, + Topvalright:undefined, + Botvalleft:undefined, + course_groupslist:undefined, + course_groups:undefined, + questionslist:undefined, + tab:"list", + visibles:undefined, + Modalstype:undefined, + Modalstopval:undefined, + ModalCancel:undefined, + ModalSave:undefined, + acrossVisible:undefined + } + } + componentDidMount(){ + this.getdatas() + } + getdatas=()=>{ + const task_Id = this.props.match.params.task_Id; + let url="/graduation_tasks/"+task_Id+".json"; + + axios.get(url).then((result)=>{ + if(result.status===200){ + this.setState({ + questionslist:result.data + }) + + } + }).catch((error)=>{ + console.log(error) + }) + } + + + // 交叉评阅设置弹框 + openAcross=()=>{ + this.setState({ + acrossVisible:true + }) + } + closeAcross=()=>{ + this.setState({ + acrossVisible:false + }) this.getdatas() - } + } - //返回 - goback=()=>{ - // let courseId=this.props.match.params.coursesId; - // let category_id=this.props.match.params.category_id; - // window.location.href="/courses/"+courseId+"/graduation_tasks/"+category_id; + //返回 + goback=()=>{ + // let courseId=this.props.match.params.coursesId; + // let category_id=this.props.match.params.category_id; + // window.location.href="/courses/"+courseId+"/graduation_tasks/"+category_id; // let courseId = this.props.match.params.coursesId; // if(courseId===undefined){ // this.props.history.push("/courses"); @@ -114,76 +112,71 @@ class GraduationTaskDetail extends Component{ // this.props.history.goBack() this.props.history.replace(`/courses/${this.state.questionslist.course_id}/graduation_tasks/${this.state.questionslist.graduation_id}`); - } - //立即发布 - publish=()=>{ - let {questionslist}=this.state; - let starttime= this.props.getNowFormatDates(1,1); - let endtime=this.props.getNowFormatDates(2,1); - // this.homeworkstart() - this.setState({ - modalname:"立即发布", - visible:true, - OneSelftype:true, + } + //立即发布 + publish=()=>{ + let starttime= this.props.getNowFormatDates(1,1); + let endtime=this.props.getNowFormatDates(2,1); + // this.homeworkstart() + this.setState({ + modalname:"立即发布", + visible:true, Topval:"学生将立即收到毕设任务", - // Botvalleft:"点击修改", + // Botvalleft:"点击修改", // Botval:`本操作只对"未发布"的分班有效`, starttime:moment(moment(new Date())).format("YYYY-MM-DD HH:mm") , - starttimes:questionslist.end_time, - staytime:this.props.getNowFormatDates(1), + starttimes:this.props.getNowFormatDates(1), typs:"start", - endtime:endtime, - Cancelname:"暂不发布", - Savesname:"立即发布", - Cancel:this.cancelmodel, - Saves:this.homepublish, - }) - } - // 确定立即发布 - homepublish=(ids,endtime)=>{ - this.cancelmodel(); - let task_Id=this.props.match.params.task_Id; - const cid = this.props.match.params.coursesId; - // let url = `/courses/${cid}/graduation_tasks/publish_task.json`; - - let url="/courses/"+cid+"/graduation_tasks/publish_task.json" - axios.post(url,{ - task_ids:[task_Id], - group_ids: this.state.course_groupslist, + endtime:endtime, + Cancelname:"暂不发布", + Savesname:"立即发布", + Cancel:this.cancelmodel, + Saves:this.homepublish, + }) + } + // 确定立即发布 + homepublish=(ids,endtime)=>{ + this.cancelmodel(); + let task_Id=this.props.match.params.task_Id; + const cid = this.props.match.params.coursesId; + // let url = `/courses/${cid}/graduation_tasks/publish_task.json`; + + let url="/courses/"+cid+"/graduation_tasks/publish_task.json" + axios.post(url,{ + task_ids:[task_Id], + group_ids: this.state.course_groupslist, end_time:endtime, - }).then((response)=>{ - if (response.data.status == 0) { + }).then((response)=>{ + if (response.data.status == 0) { this.getdatas() - this.props.showNotification(response.data.message); - - this.setState({ - // Modalstopval:response.data.message, - // ModalSave:this.cancelmodel, - // Loadtype:true, - course_groupslist:[], - checkAllValue:false - }) - } - }).catch((error)=>{ - - }) - } - - // 刷新 - resetList=()=>{ - this.getdatas(); - this.child && this.child.searchValue(); - } - - // 立即截止 - end=()=>{ + this.props.showNotification(response.data.message); + + this.setState({ + // Modalstopval:response.data.message, + // ModalSave:this.cancelmodel, + // Loadtype:true, + course_groupslist:[], + checkAllValue:false + }) + } + }).catch((error)=>{ + + }) + } + + // 刷新 + resetList=()=>{ + this.getdatas(); + this.child && this.child.searchValue(); + } + + // 立即截止 + end=()=>{ // this.homeworkstart() this.setState({ modalname:"立即截止", visible:true, - OneSelftype:true, Topval:"学生将不能再提交作品", - starttime:undefined, // Botvalleft:"暂不截止", // Botval:`本操作只对"提交中"的分班有效`, Cancelname:"暂不截止", @@ -192,75 +185,74 @@ class GraduationTaskDetail extends Component{ Saves:this.coursetaskend, typs:"end", }) - } - coursetaskend=()=>{ - const coursesId = this.props.match.params.coursesId; - const task_Id = this.props.match.params.task_Id; - - let url = `/courses/${coursesId}/graduation_tasks/end_task.json`; - axios.post(url,{ - task_ids:[task_Id], - group_ids: this.state.course_groupslist, - }).then((response)=>{ - if (response.data.status == 0) { - this.props.showNotification(response.data.message); - this.cancelmodel(); - this.getdatas(); - this.child && this.child.reInit(); - } - - }).catch((error)=>{ - - }) - } - // 取消 - cancelmodel=()=>{ - this.setState({ - Modalstype:false, - Loadtype:false, - visible:false, - OneSelftype:false, - Modulationtype:false, - Allocationtype:false, - Modalstopval:"", - ModalCancel:"", - ModalSave:"", - }) - } - - getcourse_groupslist=(id)=>{ - this.setState({ - course_groupslist:id - }) - } - - setTab = (tab) =>{ - this.setState({ - tab - }) - } - - // 关联项目 - AssociationItems=()=>{ + } + coursetaskend=()=>{ + const coursesId = this.props.match.params.coursesId; + const task_Id = this.props.match.params.task_Id; + + let url = `/courses/${coursesId}/graduation_tasks/end_task.json`; + axios.post(url,{ + task_ids:[task_Id], + group_ids: this.state.course_groupslist, + }).then((response)=>{ + if (response.data.status == 0) { + this.props.showNotification(response.data.message); + this.cancelmodel(); + this.getdatas(); + this.child && this.child.reInit(); + } + + }).catch((error)=>{ + + }) + } + // 取消 + cancelmodel=()=>{ + this.setState({ + Modalstype:false, + Loadtype:false, + visible:false, + Modulationtype:false, + Allocationtype:false, + Modalstopval:"", + ModalCancel:"", + ModalSave:"", + }) + } + + getcourse_groupslist=(id)=>{ + this.setState({ + course_groupslist:id + }) + } + + setTab = (tab) =>{ + this.setState({ + tab + }) + } + + // 关联项目 + AssociationItems=()=>{ this.setState({ visibles:true }) - } - Cancel=()=>{ + } + Cancel=()=>{ this.setState({ visibles:false }) - } - // 取消关联 - cannelAssociation=()=>{ + } + // 取消关联 + cannelAssociation=()=>{ this.setState({ Modalstype:true, Modalstopval:"确定要取消该项目关联?", ModalCancel:this.cannerassocition, ModalSave:this.savetassociton }) - } - savetassociton=()=>{ + } + savetassociton=()=>{ this.cannerassocition(); let {questionslist}=this.state; let url = "/graduation_tasks/"+questionslist.task_id+"/graduation_works/cancel_relate_project.json"; @@ -274,7 +266,7 @@ class GraduationTaskDetail extends Component{ }) } - cannerassocition=()=>{ + cannerassocition=()=>{ this.setState({ Modalstype:false, Modalstopval:"", @@ -283,10 +275,10 @@ class GraduationTaskDetail extends Component{ loadtype:false, visibles:false }) - } - // 补交附件 - handaccessory=()=>{ - // let {taskslistdata}=this.state; + } + // 补交附件 + handaccessory=()=>{ + // let {taskslistdata}=this.state; // let courseId=this.props.match.params.coursesId; // // let url="/courses/"+courseId+"/graduation_tasks/"+taskslistdata.work_id+"/appraise" @@ -300,130 +292,129 @@ class GraduationTaskDetail extends Component{ this.setState({ avisible:false }) - } - - - bindRef = ref => { this.child = ref } ; - render(){ - - let courseId=this.props.match.params.coursesId; - let category_id=this.props.match.params.category_id; - let task_Id=this.props.match.params.task_Id; - let { - questionslist , - tab , - visibles , - Modalstype, - Modalstopval, - ModalCancel, - ModalSave, - acrossVisible - } = this.state - - const commom = { - setTab:this.setTab, - getdatas:this.getdatas - } - return( -
    - { - questionslist && -
    - this.getcourse_groupslist(id)} - /> - {/*关联项目*/} - {visibles===true? - this.Cancel()} - taskid={ questionslist && questionslist.task_id } - funlist={this.resetList} - /> - :""} - - {this.state.avisible===true?:""} - {/*提示*/} - - - { - acrossVisible && - - } - -

    - {questionslist.course_name} - > - {questionslist.graduation_name} - > - 任务详情 -

    -
    -

    - {questionslist.task_name} -

    - - 返回 -
    -
    -
    - - 任务列表 - 毕设描述 - 设置 - - {/*导出成绩*/} - {/*{this.props.isAdmin()?导出成绩:""}*/} - {/*{this.props.isAdmin()?导出作品附件:""}*/} - - - {this.props.isAdmin()?
  • - 导出 - -
  • :""} - {questionslist.work_status===undefined||questionslist.work_status===null||questionslist.work_status.length===0?"":questionslist.work_status.map((item,key)=>{ - return( - + + {this.props.isAdmin()?
  • + 导出 + +
  • :""} + {questionslist.work_status===undefined||questionslist.work_status===null||questionslist.work_status.length===0?"":questionslist.work_status.map((item,key)=>{ + return( + {item==="提交作品"?提交作品:""} - {item==="补交作品"?补交作品:""} - {item==="修改作品"?修改作品:""} - {item==="查看作品"?查看作品 :""} - {item==="创建项目"?创建项目:""} - {item==="关联项目"?关联项目:""} - {item==="取消关联"?取消关联:""} - {item==="补交附件"?补交附件:""} + {item==="补交作品"?补交作品:""} + {item==="修改作品"?修改作品:""} + {item==="查看作品"?查看作品 :""} + {item==="创建项目"?创建项目:""} + {item==="关联项目"?关联项目:""} + {item==="取消关联"?取消关联:""} + {item==="补交附件"?补交附件:""} - ) - })} - - {/*项目在线质量检测*/} - { this.props.isAdmin() ? questionslist.status===1 ? { this.end()} }>立即截止 : "" : "" } - { this.props.isAdmin() ? questionslist.status===0 ? { this.publish()} }>立即发布 : "" : "" } - { this.props.isAdmin() && questionslist.cross_comment ? 交叉评阅设置 : "" } - { this.props.isAdmin() ? 编辑任务 : "" } -
    -
    - - - () - } - > - - () - } - > - - () - }> - - -
    - } - -
    - ) - } + ) + })} + + {/*项目在线质量检测*/} + { this.props.isAdmin() ? questionslist.status===1 ? { this.end()} }>立即截止 : "" : "" } + { this.props.isAdmin() ? questionslist.status===0 ? { this.publish()} }>立即发布 : "" : "" } + { this.props.isAdmin() && questionslist.cross_comment ? 交叉评阅设置 : "" } + { this.props.isAdmin() ? 编辑任务 : "" } +
    +
    + + + () + } + > + + () + } + > + + () + }> + + +
    + } + +
    + ) + } } // CNotificationHOC() ( SnackbarHOC() ( TPMIndexHOC)) export default (GraduationTaskDetail) ; \ No newline at end of file From 11a16c74034c7f9ec9b7bdadf54bbd9ddb840c1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sat, 12 Oct 2019 16:54:35 +0800 Subject: [PATCH 72/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/AppConfig.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/react/src/AppConfig.js b/public/react/src/AppConfig.js index c00c5fb62..e1d5da561 100644 --- a/public/react/src/AppConfig.js +++ b/public/react/src/AppConfig.js @@ -84,9 +84,9 @@ export function initAxiosInterceptors(props) { } config.url = `${proxy}${url}`; if (config.url.indexOf('?') == -1) { - config.url = `${config.url}?debug=${'student'}`; + config.url = `${config.url}?debug=${debugType}`; } else { - config.url = `${config.url}&debug=${'student'}`; + config.url = `${config.url}&debug=${debugType}`; } } else { // 加api前缀 From d56850e32ce5618320fec2f90d47ca13584f5dc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sat, 12 Oct 2019 16:59:21 +0800 Subject: [PATCH 73/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shixunHomework/Listofworksstudentone.js | 1046 ++++++++--------- 1 file changed, 523 insertions(+), 523 deletions(-) diff --git a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js index 857b5c244..46e90befb 100644 --- a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js +++ b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js @@ -31,7 +31,7 @@ import TraineetraininginformationModal from "./TraineetraininginformationModal"; import DownloadMessageysl from '../../modals/DownloadMessageysl'; import Startshixuntask from "../coursesPublic/Startshixuntask"; import ModulationModal from "../coursesPublic/ModulationModal"; -import OneSelfOrderModal from "../coursesPublic/OneSelfOrderModal"; +import HomeworkModal from "../coursesPublic/HomeworkModal"; import ShixunWorkModal from "./Shixunworkdetails/ShixunWorkModal"; import NoneData from '../../../modules/courses/coursesPublic/NoneData'; @@ -210,13 +210,13 @@ class Listofworksstudentone extends Component { title={record.stduynumber} className="maxnamewidth145" style={{ - color:'#9A9A9A', + color:'#9A9A9A', textAlign: "center", width:'145px', - }}>{ + }}>{ record.stduynumber } - + } @@ -327,11 +327,11 @@ class Listofworksstudentone extends Component { // className:'font-14', // render: (text, record) => ( // - // {record.updatetime === undefined ? "--" : record.updatetime === "" ? "--" : record.updatetime} - // + // // ), // }, { @@ -451,8 +451,8 @@ class Listofworksstudentone extends Component { record.submitstate === "未提交" ?-- : this.Viewstudenttraininginformation(record)}>{record.operating} + className="color-blue" + onClick={() => this.Viewstudenttraininginformation(record)}>{record.operating} } @@ -953,15 +953,15 @@ class Listofworksstudentone extends Component { } - // {record.cost_time === null ? "--":record.cost_time === undefined ?"--":record.cost_time } - // + // {record.cost_time === null ? "--":record.cost_time === undefined ?"--":record.cost_time } + // ) }, @@ -1268,14 +1268,14 @@ class Listofworksstudentone extends Component { 学员在EduCoder做实训花费的时间
    }> - {record.cost_time === null ? "--":record.cost_time === undefined ?"--":record.cost_time} - + >{record.cost_time === null ? "--":record.cost_time === undefined ?"--":record.cost_time} + } @@ -1535,7 +1535,7 @@ class Listofworksstudentone extends Component { // console.log("获取作品列表"); // console.log("935"); // debugger - let searchtype=this.props.history.location.search; + let searchtype=this.props.history.location.search; let urll = `/homework_commons/${homeworkid}/works_list.json`; var datasysl = { search: this.state.searchtext, @@ -1589,12 +1589,12 @@ class Listofworksstudentone extends Component { if(result.data.update_score===true){ if(bool===true){ if(searchtype==="?tab=0"){ - try { - this.props.yslslowCheckresults(); - }catch (e) { + try { + this.props.yslslowCheckresults(); + }catch (e) { - } - this.setComputeTimet(); + } + this.setComputeTimet(); } } } @@ -2445,7 +2445,7 @@ class Listofworksstudentone extends Component { if(item.title==="效率分"){ continue }else { - columns2js.push(item); + columns2js.push(item); } } } @@ -2479,7 +2479,7 @@ class Listofworksstudentone extends Component { if(item.title==="分班"){ continue }else{ - columns2js.push(item); + columns2js.push(item); } } } @@ -2794,11 +2794,11 @@ class Listofworksstudentone extends Component { this.setState({ modalname: "立即发布", modaltype: response.data.course_groups === null || response.data.course_groups.length === 0 ? 2 : 1, - OneSelftype: true, + svisible: true, Topval:"学生将立即收到作业", // Botvalleft:"暂不发布", - Botval:``, - starttime:moment(moment(new Date())).format("YYYY-MM-DD HH:mm"), + Botval:`本操作只对"未发布"的分班有效`, + starttime: "发布时间:" + moment(moment(new Date())).format("YYYY-MM-DD HH:mm"), endtime: "截止时间:" + endtime, starttimes:starttime, typs:"start", @@ -2828,7 +2828,7 @@ class Listofworksstudentone extends Component { this.setState({ modalname: "立即截止", modaltype: response.data.course_groups === null || response.data.course_groups.length === 0 ? 2 : 1, - OneSelftype: true, + svisible: true, Topval:"学生将不能再提交作业", // Botvalleft:"暂不截止", Botval:`本操作只对"提交中"的分班有效`, @@ -2931,7 +2931,7 @@ class Listofworksstudentone extends Component { this.setState({ modalname: undefined, modaltype: undefined, - OneSelftype: false, + svisible: false, Topval: undefined, Topvalright: undefined, Botvalleft: undefined, @@ -2985,31 +2985,31 @@ class Listofworksstudentone extends Component { let url = "/homework_commons/"+homeworkid+"/update_score.json"; axios.get(url).then((response) => { - if(response){ - if(response.data.status===0){ - // if(response.data.message!==undefined){ - // return; - // } + if(response){ + if(response.data.status===0){ + // if(response.data.message!==undefined){ + // return; + // } setTimeout(()=>{ this.setState({ loadingstate: true }) this.Getalistofworks(homeworkid,false); - try { - this.props.showNotification(`${response.data.message}`); - }catch (e) { + try { + this.props.showNotification(`${response.data.message}`); + }catch (e) { - } - try{ - this.props.yslslowCheckresultsNo(); - }catch (e) { + } + try{ + this.props.yslslowCheckresultsNo(); + }catch (e) { - } + } }, 2500); } - // this.props.history.replace( matchurl ); - } + // this.props.history.replace( matchurl ); + } }).catch((error) => { console.log(error) }); @@ -3038,8 +3038,8 @@ class Listofworksstudentone extends Component { // } daochushixunbaogao=()=>{ - let url =`/zip/shixun_report?homework_common_id=${this.props.match.params.homeworkid}&work_status=${this.state.course_groupyslstwo===undefined ||this.state.course_groupyslstwo===null? "": this.state.course_groupyslstwo}&course_group=${this.state.checkedValuesineinfo===undefined||this.state.checkedValuesineinfo===null? "":this.state.checkedValuesineinfo}&search=${this.state.searchtext===undefined||this.state.searchtext===null?"":this.state.searchtext}` - this.confirmysl(url); + let url =`/zip/shixun_report?homework_common_id=${this.props.match.params.homeworkid}&work_status=${this.state.course_groupyslstwo===undefined ||this.state.course_groupyslstwo===null? "": this.state.course_groupyslstwo}&course_group=${this.state.checkedValuesineinfo===undefined||this.state.checkedValuesineinfo===null? "":this.state.checkedValuesineinfo}&search=${this.state.searchtext===undefined||this.state.searchtext===null?"":this.state.searchtext}` + this.confirmysl(url); } daochuzuoye =() =>{ @@ -3092,105 +3092,105 @@ class Listofworksstudentone extends Component { let {columns,course_groupysls,datajs,isAdmin,homework_status, course_groupyslstwo, unlimited, unlimitedtwo, course_group_info, orders, task_status, checkedValuesine, searchtext, teacherlist, visible,visibles, game_list,columnsstu,columnsstu2, limit,experience, boolgalist,viewtrainingdata, teacherdata, page, data, jobsettingsdata, styletable, datas, order, loadingstate,computeTimetype} = this.state; const antIcon = ; - let course_is_end = this.props.current_user&&this.props.current_user.course_is_end; - // console.log("Listofworksstudentone.js"); - // console.log(orders); + let course_is_end = this.props.current_user&&this.props.current_user.course_is_end; + // console.log("Listofworksstudentone.js"); + // console.log(orders); return ( this.props.isAdmin() === true ? -
    - {visible === true ? this.saveModulationModal(value, num)} - /> : ""} - - {this.state.showmodel === true ? this.hideshowmodel()} - updatas={() => this.isupdatas()} - /> : ""} - - - {visibles === true ? -
    - - this.cancelModulationModels()} - /> - -
    - : "" - } - - {/*立即发布*/} - this.getcourse_groupslist(id)} - starttimes={this.state.starttimes} - typs={this.state.typs} - /> - { - homework_status&&homework_status.length===0? -
    - -
    - : - homework_status&&homework_status.length>0 && homework_status[0]==="未发布"? -
    - -
    - : -
    - - -
    - - - + this.cancelModulationModels()} + /> + +
    + : "" + } + + {/*立即发布*/} + this.getcourse_groupslist(id)} + starttimes={this.state.starttimes} + typs={this.state.typs} + /> + { + homework_status&&homework_status.length===0? +
    + +
    + : + homework_status&&homework_status.length>0 && homework_status[0]==="未发布"? +
    + +
    + : +
    + + +
    + + + - {computeTimetype===false?
  • - - + + {computeTimetype===false?
  • + + 正在执行成绩计算,完成后将为您自动刷新结果。温馨提示:执行时间因作品数量而异 -
  • :""} - - {/*作品状态GraduationTaskssettinglist*/} -
      -
    • - {/*计算成绩时间:{teacherdata&&teacherdata.calculation_time==null?"--": moment(teacherdata&&teacherdata.calculation_time).format('YYYY-MM-DD HH:mm')}*/} - - - -
    • - -
    • -
      - {/*{course_is_end===true?"":*/} - {/*{teacherdata&&teacherdata.update_score===true&&computeTimetype===true?*/} - {/* (this.props.isNotMember()===false?
      */} - {/* 查看最新成绩*/} - {/*
      :""):*/} - {/* teacherdata&&teacherdata.homework_status!==undefined&&teacherdata.homework_status[0]=== "未发布"? "":*/} - {/* (this.props.isNotMember()===false?
      */} - {/* 查看最新成绩*/} - {/*
      :"")*/} - {/*}*/} - {/*
      }*/} - +
    • :""} + + {/*作品状态GraduationTaskssettinglist*/} +
        +
      • + {/*计算成绩时间:{teacherdata&&teacherdata.calculation_time==null?"--": moment(teacherdata&&teacherdata.calculation_time).format('YYYY-MM-DD HH:mm')}*/} + + + +
      • + +
      • +
        + {/*{course_is_end===true?"":*/} + {/*{teacherdata&&teacherdata.update_score===true&&computeTimetype===true?*/} + {/* (this.props.isNotMember()===false?
        */} + {/* 查看最新成绩*/} + {/*
        :""):*/} + {/* teacherdata&&teacherdata.homework_status!==undefined&&teacherdata.homework_status[0]=== "未发布"? "":*/} + {/* (this.props.isNotMember()===false?
        */} + {/* 查看最新成绩*/} + {/*
        :"")*/} + {/*}*/} + {/*
        }*/} + -
        - 作品状态: - this.notlimiteds()}>不限 - this.funtaskstatust(e, task_status && task_status)} - style={{paddingTop: '4px'}}> - - {task_status === undefined ? "" : task_status.map((item, key) => { - return ( - +
    + 作品状态: + this.notlimiteds()}>不限 + this.funtaskstatust(e, task_status && task_status)} + style={{paddingTop: '4px'}}> + + {task_status === undefined ? "" : task_status.map((item, key) => { + return ( + {item.name} @@ -3297,97 +3297,97 @@ class Listofworksstudentone extends Component { - ) - })} - - {/*请输入姓名或学号搜索*/} - - - - - - {/*分班情况*/} - -
  • - {JSON.stringify(course_group_info) === "[]" ? "" : course_group_info === undefined ? "" : course_group_info.length < 2 ? "" : -
    - 分班情况: - this.notlimitedst()}>不限 - this.funtaskstatustwot(e, course_group_info && course_group_info)} - style={{paddingTop: '4px',width:'1017px'}}> - {course_group_info === undefined ? "" : - course_group_info.map((item, key) => { - return ( - + ) + })} + + {/*请输入姓名或学号搜索*/} + + +
  • + + + {/*分班情况*/} + +
  • + {JSON.stringify(course_group_info) === "[]" ? "" : course_group_info === undefined ? "" : course_group_info.length < 2 ? "" : +
    + 分班情况: + this.notlimitedst()}>不限 + this.funtaskstatustwot(e, course_group_info && course_group_info)} + style={{paddingTop: '4px',width:'1017px'}}> + {course_group_info === undefined ? "" : + course_group_info.map((item, key) => { + return ( + {item.group_group_name} ({item.count}) - ) - }) - } - -
    } -
  • + ) + }) + } + +
    } + - + -
    + + { + JSON.stringify(datajs) === "[]" ? + +
    +
    +
    + +

    暂时还没有相关数据哦!

    +
    +
    + +
    + : + +
    + -
    - {datajs === undefined ? "" : } - - - } - - - - { - teacherdata && teacherdata.work_count && teacherdata.work_count > limit ? -
    - -
    - : "" - } - - } - - : +
    + {datajs === undefined ? "" :
    } + + + } -
    + +
    { - teacherdata === undefined || teacherdata.student_works === undefined || teacherdata.student_works === null || JSON.stringify(teacherdata.student_works) === "[]" ? - // 学生不能查看别人的 -
    - - {visibles === true ? -
    - - + {visibles === true ? +
    + + - this.cancelModulationModels()} - /> -
    - : "" - } + } + + this.cancelModulationModels()} + /> +
    + : "" + } - { - homework_status&&homework_status.length&&homework_status.length===0? -
    - -
    - : - homework_status&&homework_status.length>0 && homework_status&&homework_status[0]==="未发布"? -
    - -
    - : + { + homework_status&&homework_status.length&&homework_status.length===0? +
    + +
    + : + homework_status&&homework_status.length>0 && homework_status&&homework_status[0]==="未发布"? +
    + +
    + : -
    -
    +
    +
    - - {computeTimetype===false?
  • - - + + {computeTimetype===false?
  • + + 正在执行成绩计算,完成后将为您自动刷新结果。温馨提示:执行时间因作品数量而异 -
  • :""} + :""} - {JSON.stringify(data) !== "[]" ? -
    -
    + {JSON.stringify(data) !== "[]" ? +
    +
    -
    +
    -
    - - {/*计算成绩时间:{teacherdata&&teacherdata.calculation_time==null?"--": moment(teacherdata&&teacherdata.calculation_time).format('YYYY-MM-DD HH:mm')}*/} - {/* { course_is_end===true?"":teacherdata&&teacherdata.task_operation[0]==="开启挑战"?"":*/} - {/* {computeTimetype===true?*/} - {/* (this.props.isNotMember()===false?*/} - {/* (*/} - {/* teacherdata&&teacherdata.update_score===true?*/} - {/*
    */} - {/* 查看最新成绩*/} - {/*
    */} - {/* :""*/} - {/* )*/} - {/* :"")*/} - {/* :*/} - {/* (teacherdata&&teacherdata.homework_status!==undefined&&teacherdata.homework_status[0]=== "未发布"? "":*/} - {/* this.props.isNotMember()===false?*/} - {/*
    */} - {/* 查看最新成绩*/} - {/*
    */} - {/* :"")*/} - {/* }*/} - {/*
    }*/} - -
    +
    + + {/*计算成绩时间:{teacherdata&&teacherdata.calculation_time==null?"--": moment(teacherdata&&teacherdata.calculation_time).format('YYYY-MM-DD HH:mm')}*/} + {/* { course_is_end===true?"":teacherdata&&teacherdata.task_operation[0]==="开启挑战"?"":*/} + {/* {computeTimetype===true?*/} + {/* (this.props.isNotMember()===false?*/} + {/* (*/} + {/* teacherdata&&teacherdata.update_score===true?*/} + {/*
    */} + {/* 查看最新成绩*/} + {/*
    */} + {/* :""*/} + {/* )*/} + {/* :"")*/} + {/* :*/} + {/* (teacherdata&&teacherdata.homework_status!==undefined&&teacherdata.homework_status[0]=== "未发布"? "":*/} + {/* this.props.isNotMember()===false?*/} + {/*
    */} + {/* 查看最新成绩*/} + {/*
    */} + {/* :"")*/} + {/* }*/} + {/*
    }*/}
    -
    - -
    - {data === undefined ? "" :
    } - +
    + {data === undefined ? "" :
    } + - : -
    -
    -
    - -

    暂时还没有相关数据哦!

    -
    + : +
    +
    +
    + +

    暂时还没有相关数据哦!

    -
    - } -
    +
    + }
    - } + - : - // 学生能查看别人的 -
    - {/*双层*/} - - - {visibles === true ? - this.cancelModulationModels()} - /> : "" - } + } +
    + : + // 学生能查看别人的 +
    + {/*双层*/} + + + {visibles === true ? + this.cancelModulationModels()} + /> : "" + } - { - homework_status&&homework_status.length===0? -
    - -
    - : - homework_status&&homework_status.length>0 && homework_status&&homework_status[0]==="未发布"? -
    - -
    - : -
    + { + homework_status&&homework_status.length===0? +
    + +
    + : + homework_status&&homework_status.length>0 && homework_status&&homework_status[0]==="未发布"? +
    + +
    + : +
    -
    - + - {computeTimetype===false?
  • - - + {computeTimetype===false?
  • + + 正在执行成绩计算,完成后将为您自动刷新结果。温馨提示:执行时间因作品数量而异 -
  • :""} + :""} - -
    - {data === undefined ? "" :
    } - - {JSON.stringify(datas) !== "[]" ? -
    -
    +
    + {data === undefined ? "" :
    } + + {JSON.stringify(datas) !== "[]" ? +
    +
    +
    -
    {teacherdata === undefined ? "0" : teacherdata.commit_count === undefined ? "0" : teacherdata.commit_count} @@ -3761,8 +3761,8 @@ class Listofworksstudentone extends Component { style={{color: '#FF6800'}}>{teacherdata.left_time.time}} - -
    - - {/*计算成绩时间:{teacherdata&&teacherdata.calculation_time==null?"--": moment(teacherdata&&teacherdata.calculation_time).format('YYYY-MM-DD HH:mm')}*/} - {/* { course_is_end===true?"":teacherdata&&teacherdata.task_operation&&teacherdata.task_operation[0]==="开启挑战"?"":*/} - {/* {computeTimetype===true?*/} - - {/* (this.props.isNotMember()===false?*/} - {/* (*/} - {/* teacherdata&&teacherdata.update_score===true?*/} - {/*
    */} - {/* 查看最新成绩*/} - {/*
    :""*/} - {/* )*/} - {/* :""):*/} - {/* teacherdata&&teacherdata.homework_status!==undefined&&teacherdata.homework_status[0]=== "未发布"? "":*/} - {/* (this.props.isNotMember()===false?
    */} - {/* 查看最新成绩*/} - {/*
    :"")*/} - {/* }*/} - {/*
    }*/} -
    + +
    + + {/*计算成绩时间:{teacherdata&&teacherdata.calculation_time==null?"--": moment(teacherdata&&teacherdata.calculation_time).format('YYYY-MM-DD HH:mm')}*/} + {/* { course_is_end===true?"":teacherdata&&teacherdata.task_operation&&teacherdata.task_operation[0]==="开启挑战"?"":*/} + {/* {computeTimetype===true?*/} + + {/* (this.props.isNotMember()===false?*/} + {/* (*/} + {/* teacherdata&&teacherdata.update_score===true?*/} + {/*
    */} + {/* 查看最新成绩*/} + {/*
    :""*/} + {/* )*/} + {/* :""):*/} + {/* teacherdata&&teacherdata.homework_status!==undefined&&teacherdata.homework_status[0]=== "未发布"? "":*/} + {/* (this.props.isNotMember()===false?
    */} + {/* 查看最新成绩*/} + {/*
    :"")*/} + {/* }*/} + {/*
    }*/}
    -
    - -
    - {datas === undefined ? "" :
    } - +
    + {datas === undefined ? "" :
    } - { - teacherdata && teacherdata.work_count && teacherdata.work_count > limit ? -
    - -
    - : "" - } - : -
    -
    -
    - -

    暂时还没有相关数据哦!

    + { + teacherdata && teacherdata.work_count && teacherdata.work_count > limit ? +
    +
    + : "" + } +
    + : +
    +
    +
    + +

    暂时还没有相关数据哦!

    - } -
    +
    + }
    - } + } + } From 29b068c8d3468c901fd9cfe0f9b96f3372ef5240 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sat, 12 Oct 2019 17:15:18 +0800 Subject: [PATCH 74/84] b --- public/react/src/modules/login/Otherlogin.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/public/react/src/modules/login/Otherlogin.js b/public/react/src/modules/login/Otherlogin.js index 3c27e0e96..8c482c6b4 100644 --- a/public/react/src/modules/login/Otherlogin.js +++ b/public/react/src/modules/login/Otherlogin.js @@ -21,7 +21,6 @@ import { Spin } from "antd"; import axios from 'axios'; -const { Header, Footer, Sider, Content } = Layout; import { getImageUrl } from 'educoder' import {Link, Switch, Route, Redirect} from 'react-router-dom'; import '../courses/css/members.css'; @@ -29,7 +28,7 @@ import "../courses/common/formCommon.css" import '../courses/css/Courses.css'; import beijintulogontwo from '../../../src/images/login/beijintulogontwo.png'; import educodernet from '../../../src/images/login/educodernet.png'; - +const { Header, Footer, Sider, Content } = Layout; //educoder登入页面 var sectionStyle = { "height": "100%", From 4fc5c52d28e9e45bb7bb148fe49938eb3367088a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sat, 12 Oct 2019 17:24:49 +0800 Subject: [PATCH 75/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/AppConfig.js | 20 +++++++++---------- public/react/src/modules/login/LoginDialog.js | 4 ++-- .../modules/user/LoginRegisterComponent.js | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/public/react/src/AppConfig.js b/public/react/src/AppConfig.js index e1d5da561..98571d818 100644 --- a/public/react/src/AppConfig.js +++ b/public/react/src/AppConfig.js @@ -21,16 +21,16 @@ let hashTimeout // TODO 开发期多个身份切换 let debugType ="" -if (isDev) { - const _search = window.location.search; - let parsed = {}; - if (_search) { - parsed = queryString.parse(_search); - } - debugType = window.location.search.indexOf('debug=t') != -1 ? 'teacher' : - window.location.search.indexOf('debug=s') != -1 ? 'student' : - window.location.search.indexOf('debug=a') != -1 ? 'admin' : parsed.debug || 'admin' -} +// if (isDev) { +// const _search = window.location.search; +// let parsed = {}; +// if (_search) { +// parsed = queryString.parse(_search); +// } +// debugType = window.location.search.indexOf('debug=t') != -1 ? 'teacher' : +// window.location.search.indexOf('debug=s') != -1 ? 'student' : +// window.location.search.indexOf('debug=a') != -1 ? 'admin' : parsed.debug || 'admin' +// } window._debugType = debugType; export function initAxiosInterceptors(props) { initOnlineOfflineListener() diff --git a/public/react/src/modules/login/LoginDialog.js b/public/react/src/modules/login/LoginDialog.js index ae7d781e9..b15518a4f 100644 --- a/public/react/src/modules/login/LoginDialog.js +++ b/public/react/src/modules/login/LoginDialog.js @@ -524,7 +524,7 @@ class LoginDialog extends Component { if (isRender === undefined) { isRender = false } - + console.log(this.props) return ( :""} + src={`https://open.weixin.qq.com/connect/qrconnect?appid=wx6b119e2d829c13fa&redirect_uri=https%3a%2f%2f${window.location.host}%2fotherloginstart&response_type=code&scope=snsapi_login#wechat_redirect`}>:""} {weixinlogin===true?

    this.hideweixinlogin()}>返回账号登录

    :""} diff --git a/public/react/src/modules/user/LoginRegisterComponent.js b/public/react/src/modules/user/LoginRegisterComponent.js index fedc3cb22..978682e0b 100644 --- a/public/react/src/modules/user/LoginRegisterComponent.js +++ b/public/react/src/modules/user/LoginRegisterComponent.js @@ -1192,7 +1192,7 @@ class LoginRegisterComponent extends Component { frameBorder="0" sandbox="allow-scripts allow-same-origin allow-top-navigation" scrolling="no" - src="https://open.weixin.qq.com/connect/qrconnect?appid=wx6b119e2d829c13fa&redirect_uri=https%3a%2f%2fwww.educoder.net%2fotherloginstart&response_type=code&scope=snsapi_login#wechat_redirect">:""} + src={`https://open.weixin.qq.com/connect/qrconnect?appid=wx6b119e2d829c13fa&redirect_uri=https%3a%2f%2f${window.location.host}%2fotherloginstart&response_type=code&scope=snsapi_login#wechat_redirect`}>:""} {weixinlogin===true?

    this.hideweixinlogin()}>返回登录注册

    :""} From c7842cf16fdfa728298dae051dc68ca81a96d3a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sat, 12 Oct 2019 17:31:30 +0800 Subject: [PATCH 76/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/modules/login/Otherloginstart.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/react/src/modules/login/Otherloginstart.js b/public/react/src/modules/login/Otherloginstart.js index 4b134805d..9b38ea2b9 100644 --- a/public/react/src/modules/login/Otherloginstart.js +++ b/public/react/src/modules/login/Otherloginstart.js @@ -16,7 +16,7 @@ class Otherloginstart extends Component { }}).then((result)=> { if(result){ if(result.data.status===0){ - if(result.data.true===false){ + if(result.data.new_user===true){ window.location.href="/otherlogin" }else{ // this.getinfo() From dfce76d4d51a3fe34c5f3bad2bf7f82e430935a0 Mon Sep 17 00:00:00 2001 From: p31729568 Date: Sat, 12 Oct 2019 17:32:14 +0800 Subject: [PATCH 77/84] fix --- app/forms/users/update_password_form.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/forms/users/update_password_form.rb b/app/forms/users/update_password_form.rb index 023caa40f..4da341839 100644 --- a/app/forms/users/update_password_form.rb +++ b/app/forms/users/update_password_form.rb @@ -4,5 +4,4 @@ class Users::UpdatePasswordForm attr_accessor :password, :old_password validates :password, presence: true - validates :old_password, presence: true end \ No newline at end of file From 7506145c8764ce069f83562b68808c8939fd2dcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sat, 12 Oct 2019 17:41:02 +0800 Subject: [PATCH 78/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/modules/login/Otherlogin.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/public/react/src/modules/login/Otherlogin.js b/public/react/src/modules/login/Otherlogin.js index 8c482c6b4..b6a465199 100644 --- a/public/react/src/modules/login/Otherlogin.js +++ b/public/react/src/modules/login/Otherlogin.js @@ -181,9 +181,20 @@ class Otherlogin extends Component {
    -
    +
    +
    - +
    为了更好的为您服务,请关联一个EduCoder账号 From 5344295adfb41c33f55edc7aa94fe068ddb36fb0 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Sat, 12 Oct 2019 17:49:44 +0800 Subject: [PATCH 79/84] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/bind_users_controller.rb | 2 +- app/services/create_bind_user_service.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/bind_users_controller.rb b/app/controllers/bind_users_controller.rb index 530aa9b73..354b2993b 100644 --- a/app/controllers/bind_users_controller.rb +++ b/app/controllers/bind_users_controller.rb @@ -17,6 +17,6 @@ class BindUsersController < ApplicationController private def create_params - params.permit(:login, :password, :type, :not_bind) + params.permit(:username, :password, :type, :not_bind) end end \ No newline at end of file diff --git a/app/services/create_bind_user_service.rb b/app/services/create_bind_user_service.rb index 29818c493..a6ec9f163 100644 --- a/app/services/create_bind_user_service.rb +++ b/app/services/create_bind_user_service.rb @@ -15,7 +15,7 @@ class CreateBindUserService < ApplicationService return user end - bind_user = User.try_to_login(params[:login], params[:password]) + bind_user = User.try_to_login(params[:username], params[:password]) raise Error, '用户名或者密码错误' if bind_user.blank? ActiveRecord::Base.transaction do From e7af04ac2615db27d2f7cc3e980e4220920cfed7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sat, 12 Oct 2019 18:00:16 +0800 Subject: [PATCH 80/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/modules/login/Otherlogin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/react/src/modules/login/Otherlogin.js b/public/react/src/modules/login/Otherlogin.js index b6a465199..b90889d78 100644 --- a/public/react/src/modules/login/Otherlogin.js +++ b/public/react/src/modules/login/Otherlogin.js @@ -194,7 +194,7 @@ class Otherlogin extends Component { }
    - + {data===undefined?"":data.image_url===undefined||data.image_url===null||data.image_url===""?"":}
    为了更好的为您服务,请关联一个EduCoder账号 From 79a71d9430bbb7ddd969608ca3e2074d353138dd Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Sat, 12 Oct 2019 18:04:23 +0800 Subject: [PATCH 81/84] =?UTF-8?q?=E5=A4=96=E9=94=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/user.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/user.rb b/app/models/user.rb index 11ffe084c..0bebe8584 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -43,7 +43,7 @@ class User < ApplicationRecord has_many :myshixuns, :dependent => :destroy has_many :study_shixuns, through: :myshixuns, source: :shixun # 已学习的实训 has_many :course_messages - has_many :courses, dependent: :destroy + has_many :courses, foreign_key: 'tea_id', dependent: :destroy #试卷 has_many :exercise_banks, :dependent => :destroy From 4569ade2065613a052e585e6c14a954f85f45c00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sat, 12 Oct 2019 18:06:00 +0800 Subject: [PATCH 82/84] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/AppConfig.js | 20 ++++++++++---------- public/react/src/modules/login/Otherlogin.js | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/public/react/src/AppConfig.js b/public/react/src/AppConfig.js index 98571d818..e1d5da561 100644 --- a/public/react/src/AppConfig.js +++ b/public/react/src/AppConfig.js @@ -21,16 +21,16 @@ let hashTimeout // TODO 开发期多个身份切换 let debugType ="" -// if (isDev) { -// const _search = window.location.search; -// let parsed = {}; -// if (_search) { -// parsed = queryString.parse(_search); -// } -// debugType = window.location.search.indexOf('debug=t') != -1 ? 'teacher' : -// window.location.search.indexOf('debug=s') != -1 ? 'student' : -// window.location.search.indexOf('debug=a') != -1 ? 'admin' : parsed.debug || 'admin' -// } +if (isDev) { + const _search = window.location.search; + let parsed = {}; + if (_search) { + parsed = queryString.parse(_search); + } + debugType = window.location.search.indexOf('debug=t') != -1 ? 'teacher' : + window.location.search.indexOf('debug=s') != -1 ? 'student' : + window.location.search.indexOf('debug=a') != -1 ? 'admin' : parsed.debug || 'admin' +} window._debugType = debugType; export function initAxiosInterceptors(props) { initOnlineOfflineListener() diff --git a/public/react/src/modules/login/Otherlogin.js b/public/react/src/modules/login/Otherlogin.js index b90889d78..6e240ece0 100644 --- a/public/react/src/modules/login/Otherlogin.js +++ b/public/react/src/modules/login/Otherlogin.js @@ -194,7 +194,7 @@ class Otherlogin extends Component { }
    - {data===undefined?"":data.image_url===undefined||data.image_url===null||data.image_url===""?"":} + {data===undefined?"":data.image_url===undefined||data.image_url===null||data.image_url===""?"":}
    为了更好的为您服务,请关联一个EduCoder账号 From 53a449728fc19138a668fda2949531a1009a541e Mon Sep 17 00:00:00 2001 From: p31729568 Date: Sat, 12 Oct 2019 18:32:58 +0800 Subject: [PATCH 83/84] fix bind user bug --- app/services/create_bind_user_service.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/services/create_bind_user_service.rb b/app/services/create_bind_user_service.rb index a6ec9f163..5455b7561 100644 --- a/app/services/create_bind_user_service.rb +++ b/app/services/create_bind_user_service.rb @@ -22,7 +22,8 @@ class CreateBindUserService < ApplicationService open_user.user_id = bind_user.id open_user.save! - user.destroy! + user.user_extension.delete + user.delete end clear_can_bind_user_flag From 10609006227d6ddb34dc03de6271693b26617eba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sun, 13 Oct 2019 12:35:49 +0800 Subject: [PATCH 84/84] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=89=8B=E6=9C=BA?= =?UTF-8?q?=E7=AB=AF=20=E5=BE=AE=E4=BF=A1=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/modules/login/LoginDialog.js | 36 +++++++++++++++++-- .../modules/paths/PathDetail/DetailCards.js | 13 +++---- public/react/src/modules/tpm/TPMBanner.js | 2 +- .../src/modules/tpm/TPMFork/TPMForklist.js | 2 +- .../src/modules/tpm/shixuns/ShixunCard.js | 2 +- .../modules/user/LoginRegisterComponent.js | 28 ++++++++++++--- 6 files changed, 66 insertions(+), 17 deletions(-) diff --git a/public/react/src/modules/login/LoginDialog.js b/public/react/src/modules/login/LoginDialog.js index b15518a4f..3f5afd845 100644 --- a/public/react/src/modules/login/LoginDialog.js +++ b/public/react/src/modules/login/LoginDialog.js @@ -349,8 +349,25 @@ class LoginDialog extends Component { // console.log(nextProps.isRender); } - + IsPC=()=>{ + var userAgentInfo = navigator.userAgent; + var Agents = ["Android", "iPhone", + "SymbianOS", "Windows Phone", + "iPad", "iPod"]; + var flag = true; + for (var v = 0; v < Agents.length; v++) { + if (userAgentInfo.indexOf(Agents[v]) > 0) { + flag = false; + break; + } + } + return flag; + } componentDidMount() { + let flag = this.IsPC(); //true为PC端,false为手机端 + this.setState({ + isphone:flag + }) if(this.props.isRender!=undefined){ this.setState({ @@ -536,6 +553,19 @@ class LoginDialog extends Component { modalsType={this.state.MyEduCoderModals} setNotcompleteds={()=>{this.setNotcompleteds()}} /> + + {this.state.isphone===false?:""} {isRender===true?
    {this.handleDialogClose()}}> @@ -622,7 +652,7 @@ class LoginDialog extends Component {

    -

    + {this.state.isphone===true?

    ———————— 快速登录 ————————

    @@ -630,7 +660,7 @@ class LoginDialog extends Component { 微信登录
    -

    +

    :""} } {weixinlogin===true?