From 420b4c9c5ea41443f631a668c93ceeeedd9a4b9f Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 15 Nov 2019 14:43:54 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E8=AF=BE=E5=A0=82?= =?UTF-8?q?=E6=97=B6=E4=B8=8D=E9=9C=80=E8=A6=81=E5=88=9B=E5=BB=BA=E6=96=B0?= =?UTF-8?q?=E8=AF=BE=E5=AF=BC=E8=AF=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/course_activity.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/course_activity.rb b/app/models/course_activity.rb index b2ea0b146..6c0aaaf48 100644 --- a/app/models/course_activity.rb +++ b/app/models/course_activity.rb @@ -5,7 +5,7 @@ class CourseActivity < ApplicationRecord belongs_to :exercise belongs_to :poll - after_create :add_course_lead + # after_create :add_course_lead # 发布新课导语 # 导语要放置在课程创建信息之后 From 4cd1fb2f695a9e44caf92705d492cbcb719cb5a5 Mon Sep 17 00:00:00 2001 From: p31729568 Date: Fri, 15 Nov 2019 15:03:23 +0800 Subject: [PATCH 2/6] laboratory: user data --- .../cooperative/laboratory_users/index.js | 2 +- .../cooperative/users_controller.rb | 12 +++-- app/models/searchable/course.rb | 1 + app/models/user.rb | 10 +++- app/models/user_extension.rb | 10 ++++ app/queries/admins/user_query.rb | 3 ++ app/services/search_service.rb | 49 +++++++++++------- .../cooperative/shared/_sidebar.html.erb | 1 + .../users/for_select.json.jbuilder | 6 +++ app/views/cooperative/users/index.html.erb | 21 ++++++++ app/views/cooperative/users/index.js.erb | 1 + .../cooperative/users/shared/_list.html.erb | 40 ++++++++++++++ config/routes.rb | 4 +- ...191115053209_add_laboratory_id_to_users.rb | 5 ++ ...fest-e66c89b356203f186251174af86ecc50.json | 2 +- ...bbf934ada5029f08b7d93cdfc0b41758940664.js} | 2 +- ...934ada5029f08b7d93cdfc0b41758940664.js.gz} | Bin 967816 -> 967823 bytes 17 files changed, 143 insertions(+), 26 deletions(-) create mode 100644 app/views/cooperative/users/for_select.json.jbuilder create mode 100644 app/views/cooperative/users/index.html.erb create mode 100644 app/views/cooperative/users/index.js.erb create mode 100644 app/views/cooperative/users/shared/_list.html.erb create mode 100644 db/migrate/20191115053209_add_laboratory_id_to_users.rb rename public/assets/{cooperative-bce1bc86895385e409bd27f17780becd0d7b38b6a93f728bcf5070d611b86e53.js => cooperative-1f1978c54acc447dc1a6bff614bbf934ada5029f08b7d93cdfc0b41758940664.js} (99%) rename public/assets/{cooperative-bce1bc86895385e409bd27f17780becd0d7b38b6a93f728bcf5070d611b86e53.js.gz => cooperative-1f1978c54acc447dc1a6bff614bbf934ada5029f08b7d93cdfc0b41758940664.js.gz} (98%) diff --git a/app/assets/javascripts/cooperative/laboratory_users/index.js b/app/assets/javascripts/cooperative/laboratory_users/index.js index 19385f003..66475b88c 100644 --- a/app/assets/javascripts/cooperative/laboratory_users/index.js +++ b/app/assets/javascripts/cooperative/laboratory_users/index.js @@ -16,7 +16,7 @@ $(document).on('turbolinks:load', function() { minimumInputLength: 1, ajax: { delay: 500, - url: '/cooperative/users', + url: '/cooperative/users/for_select', dataType: 'json', data: function(params){ return { name: params.term }; diff --git a/app/controllers/cooperative/users_controller.rb b/app/controllers/cooperative/users_controller.rb index 4c6539147..c97a73b49 100644 --- a/app/controllers/cooperative/users_controller.rb +++ b/app/controllers/cooperative/users_controller.rb @@ -1,7 +1,13 @@ class Cooperative::UsersController < Cooperative::BaseController def index - params[:sort_by] = params[:sort_by].presence || 'created_on' - params[:sort_direction] = params[:sort_direction].presence || 'desc' + default_sort('created_on', 'desc') + + users = Admins::UserQuery.call(search_params.merge(laboratory_id: current_laboratory.id)) + @users = paginate users.includes(user_extension: :school) + end + + def for_select + default_sort('created_on', 'desc') users = Admins::UserQuery.call(search_params) @users = paginate users.includes(user_extension: :school) @@ -10,6 +16,6 @@ class Cooperative::UsersController < Cooperative::BaseController private def search_params - params.permit(:name, :sort_by, :sort_direction) + params.permit(:identity, :name, :keyword, :school_name, :sort_by, :sort_direction) end end \ No newline at end of file diff --git a/app/models/searchable/course.rb b/app/models/searchable/course.rb index a82496ad8..c11ab2220 100644 --- a/app/models/searchable/course.rb +++ b/app/models/searchable/course.rb @@ -13,6 +13,7 @@ module Searchable::Course def search_data { + laboratory_id: laboratory_id, name: name, author_name: teacher&.real_name } diff --git a/app/models/user.rb b/app/models/user.rb index ab8d8ee7b..c2a7317e7 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -30,6 +30,8 @@ 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 + belongs_to :laboratory, optional: true + has_one :user_extension, dependent: :destroy has_many :open_users, dependent: :destroy has_one :wechat_open_user, class_name: 'OpenUsers::Wechat' @@ -155,7 +157,7 @@ class User < ApplicationRecord delegate :gender, :department_id, :school_id, :location, :location_city, :technical_title, to: :user_extension, allow_nil: true - before_save :update_hashed_password + before_save :update_hashed_password, :set_laboratory after_create do SyncTrustieJob.perform_later("user", 1) if allow_sync_to_trustie? end @@ -704,6 +706,12 @@ class User < ApplicationRecord raise('密码长度不能超过16位') end end + + def set_laboratory + return unless new_record? + + self.laboratory = Laboratory.current if laboratory_id.blank? + end end diff --git a/app/models/user_extension.rb b/app/models/user_extension.rb index 0a2249308..916404c88 100644 --- a/app/models/user_extension.rb +++ b/app/models/user_extension.rb @@ -6,7 +6,17 @@ class UserExtension < ApplicationRecord belongs_to :school, optional: true belongs_to :department, optional: true + before_save :set_laboratory_school + def identity_text I18n.t("user.identity.#{identity}") end + + private + + def set_laboratory_school + return unless new_record? + + self.school_id = Laboratory.current.school_id if school_id.blank? && !Laboratory.current.main_site? + end end diff --git a/app/queries/admins/user_query.rb b/app/queries/admins/user_query.rb index 749ba2110..cdf158c67 100644 --- a/app/queries/admins/user_query.rb +++ b/app/queries/admins/user_query.rb @@ -12,6 +12,9 @@ class Admins::UserQuery < ApplicationQuery def call users = User.where(type: 'User') + # 云上实验室 + users = users.where(laboratory_id: params[:laboratory_id]) if params[:laboratory_id].present? + # 状态 status = params[:status] users = users.where(status: status) if status.present? diff --git a/app/services/search_service.rb b/app/services/search_service.rb index 418021cc0..df90495f5 100644 --- a/app/services/search_service.rb +++ b/app/services/search_service.rb @@ -8,34 +8,47 @@ class SearchService < ApplicationService end def call - Searchkick.search(keyword, search_options) + # return [] if keyword.blank? + + modal_name.search(keyword, search_options) end private + def modal_name + @_modal_name ||= + case params[:type].to_s.strip + when 'shixun' then Shixun + when 'course' then Course + when 'subject' then Subject + when 'memo' then Memo + else Shixun + end + end + def search_options model_options = { - index_name: index_names, - model_includes: model_includes + includes: modal_name.searchable_includes } - model_options.merge(where: { status: 2 }) if index_names == [Shixun] - model_options.merge(default_options) - end + model_options.deep_merge!(where: { status: 2 }) if modal_name == Shixun + model_options.deep_merge!(extra_options) - def index_names - @_index_names ||= - case params[:type].to_s.strip - when 'shixun' then [Shixun] - when 'course' then [Course] - when 'subject' then [Subject] - when 'memo' then [Memo] - else [Shixun, Course, Subject, Memo] - end + model_options.deep_merge!(default_options) + model_options end - def model_includes - index_names.each_with_object({}) do |klass, obj| - obj[klass] = klass.searchable_includes + def extra_options + case params[:type].to_s.strip + when 'shixun' then + shixun_ids = Laboratory.current.shixuns.pluck(:id) + Laboratory.current.main_site? ? {} : { where: { id: shixun_ids } } + when 'subject' then + subject_ids = Laboratory.current.subjects.pluck(:id) + Laboratory.current.main_site? ? {} : { where: { id: subject_ids } } + when 'course' then + { where: { laboratory_id: Laboratory.current.id } } + else + {} end end end \ No newline at end of file diff --git a/app/views/cooperative/shared/_sidebar.html.erb b/app/views/cooperative/shared/_sidebar.html.erb index 81ff12b0a..5898922fe 100644 --- a/app/views/cooperative/shared/_sidebar.html.erb +++ b/app/views/cooperative/shared/_sidebar.html.erb @@ -17,6 +17,7 @@
  • <%= sidebar_item(edit_cooperative_laboratory_setting_path, '网站设置', icon: 'cogs', controller: 'cooperative-laboratory_settings') %>
  • <%= sidebar_item(cooperative_carousels_path, '轮播图设置', icon: 'image', controller: 'cooperative-carousels') %>
  • <%= sidebar_item(cooperative_laboratory_users_path, '管理员列表', icon: 'user', controller: 'cooperative-laboratory_users') %>
  • +
  • <%= sidebar_item(cooperative_users_path, '用户列表', icon: 'users', controller: 'cooperative-users') %>
  • <%= sidebar_item(cooperative_laboratory_shixuns_path, '实训项目', icon: 'window-restore', controller: 'cooperative-laboratory_shixuns') %>
  • <%= sidebar_item(cooperative_laboratory_subjects_path, '实践课程', icon: 'th-list', controller: 'cooperative-laboratory_subjects') %>
  • <%= sidebar_item('/', '返回主页', icon: 'sign-out', controller: 'root') %>
  • diff --git a/app/views/cooperative/users/for_select.json.jbuilder b/app/views/cooperative/users/for_select.json.jbuilder new file mode 100644 index 000000000..5b1860928 --- /dev/null +++ b/app/views/cooperative/users/for_select.json.jbuilder @@ -0,0 +1,6 @@ +json.count @users.total_count +json.users do + json.array! @users.each do |user| + json.extract! user, :id, :login, :real_name, :identity, :school_name, :hidden_phone + end +end \ No newline at end of file diff --git a/app/views/cooperative/users/index.html.erb b/app/views/cooperative/users/index.html.erb new file mode 100644 index 000000000..c2e703ded --- /dev/null +++ b/app/views/cooperative/users/index.html.erb @@ -0,0 +1,21 @@ +<% define_breadcrumbs do %> + <% add_breadcrumb('用户列表') %> +<% end %> + +
    + <%= form_tag(cooperative_users_path, method: :get, class: 'form-inline search-form flex-1', remote: true) do %> +
    + + <% identity_options = [['全部', ''], ['教师', 0], ['学生', 1], ['专业人士', 2]] %> + <%= select_tag(:identity, options_for_select(identity_options), class: 'form-control') %> +
    + + <%= text_field_tag(:keyword, params[:keyword], class: 'form-control col-sm-2 ml-3', placeholder: 'ID/姓名/邮箱/手机号检索') %> + <%= text_field_tag(:school_name, params[:school_name], class: 'form-control col-sm-2', placeholder: '学校/单位检索') %> + <%= submit_tag('搜索', class: 'btn btn-primary ml-3', 'data-disable-with': '搜索中...') %> + <% end %> +
    + +
    + <%= render partial: 'cooperative/users/shared/list', locals: { users: @users } %> +
    \ No newline at end of file diff --git a/app/views/cooperative/users/index.js.erb b/app/views/cooperative/users/index.js.erb new file mode 100644 index 000000000..414f62348 --- /dev/null +++ b/app/views/cooperative/users/index.js.erb @@ -0,0 +1 @@ +$('.user-list-container').html("<%= j(render partial: 'cooperative/users/shared/list', locals: { users: @users }) %>"); \ No newline at end of file diff --git a/app/views/cooperative/users/shared/_list.html.erb b/app/views/cooperative/users/shared/_list.html.erb new file mode 100644 index 000000000..29c26f350 --- /dev/null +++ b/app/views/cooperative/users/shared/_list.html.erb @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + <% if users.present? %> + <% users.each do |user| %> + + + + + + + + + + + + <% end %> + <% else %> + <%= render 'admins/shared/no_data_for_table' %> + <% end %> + +
    真实姓名邮件地址手机号码单位角色<%= sort_tag('创建于', name: 'created_on', path: cooperative_users_path) %><%= sort_tag('最后登录', name: 'last_login_on', path: cooperative_users_path) %><%= sort_tag('经验值', name: 'experience', path: cooperative_users_path) %><%= sort_tag('金币', name: 'grade', path: cooperative_users_path) %>
    + <%= link_to "/users/#{user.login}", target: '_blank' do %> + <%= overflow_hidden_span user.real_name, width: 100 %> + <% end %> + <%= overflow_hidden_span display_text(user.mail), width: 150 %><%= overflow_hidden_span display_text(user.phone), width: 100 %><%= overflow_hidden_span display_text(user.school_name), width: 150 %><%= user.identity %><%= display_text(user.created_on&.strftime('%Y-%m-%d %H:%M')) %><%= display_text(user.last_login_on&.strftime('%Y-%m-%d %H:%M')) %><%= user.experience.to_i %><%= user.grade.to_i %>
    + +<%= render partial: 'cooperative/shared/paginate', locals: { objects: users } %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 245e984c6..518e933b4 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1135,7 +1135,9 @@ Rails.application.routes.draw do # get '/', to: 'dashboards#show' get '/', to: 'laboratory_settings#edit' resources :files, only: [:create] - resources :users, only: [:index] + resources :users, only: [:index] do + get :for_select, on: :collection + end resources :laboratory_users, only: [:index, :create, :destroy] resource :laboratory_setting, only: [:edit, :update] resources :carousels, only: [:index, :create, :update, :destroy] do diff --git a/db/migrate/20191115053209_add_laboratory_id_to_users.rb b/db/migrate/20191115053209_add_laboratory_id_to_users.rb new file mode 100644 index 000000000..3e02a8e17 --- /dev/null +++ b/db/migrate/20191115053209_add_laboratory_id_to_users.rb @@ -0,0 +1,5 @@ +class AddLaboratoryIdToUsers < ActiveRecord::Migration[5.2] + def change + add_reference :users, :laboratory + end +end diff --git a/public/assets/.sprockets-manifest-e66c89b356203f186251174af86ecc50.json b/public/assets/.sprockets-manifest-e66c89b356203f186251174af86ecc50.json index b9b37604d..0fbeaeb64 100644 --- a/public/assets/.sprockets-manifest-e66c89b356203f186251174af86ecc50.json +++ b/public/assets/.sprockets-manifest-e66c89b356203f186251174af86ecc50.json @@ -1 +1 @@ -{"files":{"admin-f6741f524789841eadd10719936c7d0693ccad4b9e46868a7683c08d982b0293.js":{"logical_path":"admin.js","mtime":"2019-11-15T10:58:10+08:00","size":4578599,"digest":"f6741f524789841eadd10719936c7d0693ccad4b9e46868a7683c08d982b0293","integrity":"sha256-9nQfUkeJhB6t0QcZk2x9BpPMrUueRoaKdoPAjZgrApM="},"admin-700994f369aa2db01f4c4c4642f2e08be411f8e3b35ad1fa297fac1839a29fb8.css":{"logical_path":"admin.css","mtime":"2019-11-15T10:49:55+08:00","size":876486,"digest":"700994f369aa2db01f4c4c4642f2e08be411f8e3b35ad1fa297fac1839a29fb8","integrity":"sha256-cAmU82mqLbAfTExGQvLgi+QR+OOzWtH6KX+sGDmin7g="},"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-1e70702e2d864fb4d5f57841bfa5937e31c7c059e6cd672a07f0b4b20740f607.js":{"logical_path":"college.js","mtime":"2019-11-11T17:06:59+08:00","size":3569292,"digest":"1e70702e2d864fb4d5f57841bfa5937e31c7c059e6cd672a07f0b4b20740f607","integrity":"sha256-HnBwLi2GT7TV9XhBv6WTfjHHwFnmzWcqB/C0sgdA9gc="},"college-c2f61098e538cb20e0ebc026209bb909fe520eadf8facb31ac4a0b325c057089.css":{"logical_path":"college.css","mtime":"2019-11-11T16:49:02+08:00","size":618419,"digest":"c2f61098e538cb20e0ebc026209bb909fe520eadf8facb31ac4a0b325c057089","integrity":"sha256-wvYQmOU4yyDg68AmIJu5Cf5SDq34+ssxrEoLMlwFcIk="},"cooperative-bce1bc86895385e409bd27f17780becd0d7b38b6a93f728bcf5070d611b86e53.js":{"logical_path":"cooperative.js","mtime":"2019-11-15T10:58:10+08:00","size":4415477,"digest":"bce1bc86895385e409bd27f17780becd0d7b38b6a93f728bcf5070d611b86e53","integrity":"sha256-vOG8holTheQJvSfxd4C+zQ17OLapP3KLz1Bw1hG4blM="},"cooperative-8dfed4a2d7658bbc8ef848db336eeb70d413cfc89185f0ebbb312ba8a2d785b2.css":{"logical_path":"cooperative.css","mtime":"2019-11-15T10:58:10+08:00","size":837897,"digest":"8dfed4a2d7658bbc8ef848db336eeb70d413cfc89185f0ebbb312ba8a2d785b2","integrity":"sha256-jf7Uotdli7yO+EjbM27rcNQTz8iRhfDruzErqKLXhbI="},"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-11-06T11:34:24+08:00","size":600706,"digest":"9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb","integrity":"sha256-nPvD15JZmh0N5ce4QgnhwrLmAzbw8B4Z8FgWY5GHCPs="},"application-0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8.css":{"logical_path":"application.css","mtime":"2019-09-03T08:55:53+08:00","size":442932,"digest":"0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8","integrity":"sha256-DkF0eNVvQkZ+hXzRhrKcu8DWx8boXIpvQvOaxhiUPeg="}},"assets":{"admin.js":"admin-f6741f524789841eadd10719936c7d0693ccad4b9e46868a7683c08d982b0293.js","admin.css":"admin-700994f369aa2db01f4c4c4642f2e08be411f8e3b35ad1fa297fac1839a29fb8.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-1e70702e2d864fb4d5f57841bfa5937e31c7c059e6cd672a07f0b4b20740f607.js","college.css":"college-c2f61098e538cb20e0ebc026209bb909fe520eadf8facb31ac4a0b325c057089.css","cooperative.js":"cooperative-bce1bc86895385e409bd27f17780becd0d7b38b6a93f728bcf5070d611b86e53.js","cooperative.css":"cooperative-8dfed4a2d7658bbc8ef848db336eeb70d413cfc89185f0ebbb312ba8a2d785b2.css","logo.png":"logo-7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423.png","application.js":"application-9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb.js","application.css":"application-0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8.css"}} \ No newline at end of file +{"files":{"admin-f6741f524789841eadd10719936c7d0693ccad4b9e46868a7683c08d982b0293.js":{"logical_path":"admin.js","mtime":"2019-11-15T10:58:10+08:00","size":4578599,"digest":"f6741f524789841eadd10719936c7d0693ccad4b9e46868a7683c08d982b0293","integrity":"sha256-9nQfUkeJhB6t0QcZk2x9BpPMrUueRoaKdoPAjZgrApM="},"admin-700994f369aa2db01f4c4c4642f2e08be411f8e3b35ad1fa297fac1839a29fb8.css":{"logical_path":"admin.css","mtime":"2019-11-15T10:49:55+08:00","size":876486,"digest":"700994f369aa2db01f4c4c4642f2e08be411f8e3b35ad1fa297fac1839a29fb8","integrity":"sha256-cAmU82mqLbAfTExGQvLgi+QR+OOzWtH6KX+sGDmin7g="},"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-1e70702e2d864fb4d5f57841bfa5937e31c7c059e6cd672a07f0b4b20740f607.js":{"logical_path":"college.js","mtime":"2019-11-11T17:06:59+08:00","size":3569292,"digest":"1e70702e2d864fb4d5f57841bfa5937e31c7c059e6cd672a07f0b4b20740f607","integrity":"sha256-HnBwLi2GT7TV9XhBv6WTfjHHwFnmzWcqB/C0sgdA9gc="},"college-c2f61098e538cb20e0ebc026209bb909fe520eadf8facb31ac4a0b325c057089.css":{"logical_path":"college.css","mtime":"2019-11-11T16:49:02+08:00","size":618419,"digest":"c2f61098e538cb20e0ebc026209bb909fe520eadf8facb31ac4a0b325c057089","integrity":"sha256-wvYQmOU4yyDg68AmIJu5Cf5SDq34+ssxrEoLMlwFcIk="},"cooperative-bce1bc86895385e409bd27f17780becd0d7b38b6a93f728bcf5070d611b86e53.js":{"logical_path":"cooperative.js","mtime":"2019-11-15T10:58:10+08:00","size":4415477,"digest":"bce1bc86895385e409bd27f17780becd0d7b38b6a93f728bcf5070d611b86e53","integrity":"sha256-vOG8holTheQJvSfxd4C+zQ17OLapP3KLz1Bw1hG4blM="},"cooperative-8dfed4a2d7658bbc8ef848db336eeb70d413cfc89185f0ebbb312ba8a2d785b2.css":{"logical_path":"cooperative.css","mtime":"2019-11-15T10:58:10+08:00","size":837897,"digest":"8dfed4a2d7658bbc8ef848db336eeb70d413cfc89185f0ebbb312ba8a2d785b2","integrity":"sha256-jf7Uotdli7yO+EjbM27rcNQTz8iRhfDruzErqKLXhbI="},"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-11-06T11:34:24+08:00","size":600706,"digest":"9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb","integrity":"sha256-nPvD15JZmh0N5ce4QgnhwrLmAzbw8B4Z8FgWY5GHCPs="},"application-0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8.css":{"logical_path":"application.css","mtime":"2019-09-03T08:55:53+08:00","size":442932,"digest":"0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8","integrity":"sha256-DkF0eNVvQkZ+hXzRhrKcu8DWx8boXIpvQvOaxhiUPeg="},"cooperative-1f1978c54acc447dc1a6bff614bbf934ada5029f08b7d93cdfc0b41758940664.js":{"logical_path":"cooperative.js","mtime":"2019-11-15T14:44:25+08:00","size":4415488,"digest":"1f1978c54acc447dc1a6bff614bbf934ada5029f08b7d93cdfc0b41758940664","integrity":"sha256-Hxl4xUrMRH3Bpr/2FLv5NK2lAp8It9k838C0F1iUBmQ="}},"assets":{"admin.js":"admin-f6741f524789841eadd10719936c7d0693ccad4b9e46868a7683c08d982b0293.js","admin.css":"admin-700994f369aa2db01f4c4c4642f2e08be411f8e3b35ad1fa297fac1839a29fb8.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-1e70702e2d864fb4d5f57841bfa5937e31c7c059e6cd672a07f0b4b20740f607.js","college.css":"college-c2f61098e538cb20e0ebc026209bb909fe520eadf8facb31ac4a0b325c057089.css","cooperative.js":"cooperative-1f1978c54acc447dc1a6bff614bbf934ada5029f08b7d93cdfc0b41758940664.js","cooperative.css":"cooperative-8dfed4a2d7658bbc8ef848db336eeb70d413cfc89185f0ebbb312ba8a2d785b2.css","logo.png":"logo-7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423.png","application.js":"application-9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb.js","application.css":"application-0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8.css"}} \ No newline at end of file diff --git a/public/assets/cooperative-bce1bc86895385e409bd27f17780becd0d7b38b6a93f728bcf5070d611b86e53.js b/public/assets/cooperative-1f1978c54acc447dc1a6bff614bbf934ada5029f08b7d93cdfc0b41758940664.js similarity index 99% rename from public/assets/cooperative-bce1bc86895385e409bd27f17780becd0d7b38b6a93f728bcf5070d611b86e53.js rename to public/assets/cooperative-1f1978c54acc447dc1a6bff614bbf934ada5029f08b7d93cdfc0b41758940664.js index 3a32e2e08..5297d488d 100644 --- a/public/assets/cooperative-bce1bc86895385e409bd27f17780becd0d7b38b6a93f728bcf5070d611b86e53.js +++ b/public/assets/cooperative-1f1978c54acc447dc1a6bff614bbf934ada5029f08b7d93cdfc0b41758940664.js @@ -136218,7 +136218,7 @@ $(document).on('turbolinks:load', function() { minimumInputLength: 1, ajax: { delay: 500, - url: '/cooperative/users', + url: '/cooperative/users/for_select', dataType: 'json', data: function(params){ return { name: params.term }; diff --git a/public/assets/cooperative-bce1bc86895385e409bd27f17780becd0d7b38b6a93f728bcf5070d611b86e53.js.gz b/public/assets/cooperative-1f1978c54acc447dc1a6bff614bbf934ada5029f08b7d93cdfc0b41758940664.js.gz similarity index 98% rename from public/assets/cooperative-bce1bc86895385e409bd27f17780becd0d7b38b6a93f728bcf5070d611b86e53.js.gz rename to public/assets/cooperative-1f1978c54acc447dc1a6bff614bbf934ada5029f08b7d93cdfc0b41758940664.js.gz index 54d832b08edd050c26d34f12eaa15a5e8ab219a3..564440dc52a8ac877cc63a2d3bf0c6b63992174a 100644 GIT binary patch delta 16451 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
    vQ`^;KO^xlfAIawoXJ>@oE3g8guc8}9P{ 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 ULk^9XZNv^52r(3Ps`Xz(0H3bwWdHyG From 39e0aa25e0f41bc52eca8ec61065f18857bdccf9 Mon Sep 17 00:00:00 2001 From: p31729568 Date: Fri, 15 Nov 2019 15:11:38 +0800 Subject: [PATCH 3/6] laboratory: library data && data migration --- app/controllers/libraries_controller.rb | 2 +- app/models/laboratory.rb | 1 + app/models/library.rb | 8 ++++++++ .../20191115070508_add_laboratory_id_to_libraries.rb | 5 +++++ db/migrate/20191115070841_transfer_laboratory_data.rb | 7 +++++++ 5 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20191115070508_add_laboratory_id_to_libraries.rb create mode 100644 db/migrate/20191115070841_transfer_laboratory_data.rb diff --git a/app/controllers/libraries_controller.rb b/app/controllers/libraries_controller.rb index a2e70d95a..883f8a3aa 100644 --- a/app/controllers/libraries_controller.rb +++ b/app/controllers/libraries_controller.rb @@ -7,7 +7,7 @@ class LibrariesController < ApplicationController helper_method :current_library, :library_manageable? def index - libraries = Library.all + libraries = current_laboratory.libraries libraries = if User.current&.logged? && params[:type] == 'mine' diff --git a/app/models/laboratory.rb b/app/models/laboratory.rb index 45ef0c76e..466e6d4d8 100644 --- a/app/models/laboratory.rb +++ b/app/models/laboratory.rb @@ -16,6 +16,7 @@ class Laboratory < ApplicationRecord has_many :courses, dependent: :destroy has_many :competitions, dependent: :destroy + has_many :libraries, dependent: :destroy validates :identifier, uniqueness: { case_sensitive: false }, allow_nil: true diff --git a/app/models/library.rb b/app/models/library.rb index e2bc20989..743959d30 100644 --- a/app/models/library.rb +++ b/app/models/library.rb @@ -3,6 +3,7 @@ class Library < ApplicationRecord belongs_to :user belongs_to :cover, class_name: 'Attachment', foreign_key: :cover_id, optional: true + belongs_to :laboratory, optional: true has_many :library_applies, dependent: :delete_all has_many :library_library_tags, dependent: :delete_all @@ -34,6 +35,13 @@ class Library < ApplicationRecord end end + before_save :set_laboratory + private def set_laboratory + return unless new_record? + + self.laboratory = Laboratory.current if laboratory_id.blank? + end + def increment_visited_count!(num = 1) increment_column!(:visited_count, num) end diff --git a/db/migrate/20191115070508_add_laboratory_id_to_libraries.rb b/db/migrate/20191115070508_add_laboratory_id_to_libraries.rb new file mode 100644 index 000000000..f067908fc --- /dev/null +++ b/db/migrate/20191115070508_add_laboratory_id_to_libraries.rb @@ -0,0 +1,5 @@ +class AddLaboratoryIdToLibraries < ActiveRecord::Migration[5.2] + def change + add_reference :libraries, :laboratory + end +end diff --git a/db/migrate/20191115070841_transfer_laboratory_data.rb b/db/migrate/20191115070841_transfer_laboratory_data.rb new file mode 100644 index 000000000..4812ade30 --- /dev/null +++ b/db/migrate/20191115070841_transfer_laboratory_data.rb @@ -0,0 +1,7 @@ +class TransferLaboratoryData < ActiveRecord::Migration[5.2] + def change + Course.where(laboratory_id: nil).update_all(laboratory_id: 1) + Competition.where(laboratory_id: nil).update_all(laboratory_id: 1) + Library.where(laboratory_id: nil).update_all(laboratory_id: 1) + end +end From d9044581fb878b32ac5d083b8dc7cb061f0d9a37 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 15 Nov 2019 15:21:36 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E4=B8=BB=E9=A1=B5?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE=E9=9A=94=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users/courses_controller.rb | 2 ++ app/controllers/users/shixuns_controller.rb | 8 ++++++++ app/controllers/users/subjects_controller.rb | 8 ++++++++ 3 files changed, 18 insertions(+) diff --git a/app/controllers/users/courses_controller.rb b/app/controllers/users/courses_controller.rb index 2c5e29d2b..4198e17ba 100644 --- a/app/controllers/users/courses_controller.rb +++ b/app/controllers/users/courses_controller.rb @@ -2,6 +2,8 @@ class Users::CoursesController < Users::BaseController def index courses = Users::CourseService.new(observed_user, query_params).call + courses = courses.where(laboratory_id: current_laboratory.id) + @count = courses.count @courses = paginate(courses.includes(teacher: { user_extension: :school }), special: observed_user.is_teacher?) end diff --git a/app/controllers/users/shixuns_controller.rb b/app/controllers/users/shixuns_controller.rb index 5d8da9684..3758fbe19 100644 --- a/app/controllers/users/shixuns_controller.rb +++ b/app/controllers/users/shixuns_controller.rb @@ -2,6 +2,14 @@ class Users::ShixunsController < Users::BaseController def index shixuns = Users::ShixunService.new(observed_user, query_params).call + ## 云上实验室过滤 + if current_laboratory.main_site? + not_shixun_ids = Shixun.joins(:laboratory_shixuns).where("laboratory_shixuns.laboratory_id != #{current_laboratory.id}") + @shixuns = @shixuns.where.not(id: not_shixun_ids) + else + @shixuns = @shixuns.joins(:laboratory_shixuns).where(laboratory_shixuns: { laboratory_id: current_laboratory.id }) + end + @count = shixuns.count @shixuns = paginate(shixuns.includes(:first_tag_repertoire), special: observed_user.is_teacher?) diff --git a/app/controllers/users/subjects_controller.rb b/app/controllers/users/subjects_controller.rb index 2f8f308df..59ad86859 100644 --- a/app/controllers/users/subjects_controller.rb +++ b/app/controllers/users/subjects_controller.rb @@ -2,6 +2,14 @@ class Users::SubjectsController < Users::BaseController def index subjects = Users::SubjectService.new(observed_user, query_params).call + ## 云上实验室过滤 + if current_laboratory.main_site? + not_subject_ids = Subject.joins(:laboratory_subjects).where("laboratory_subjects.laboratory_id != #{current_laboratory.id}") + @subjects = @subjects.where.not(id: not_subject_ids) + else + @subjects = @subjects.joins(:laboratory_subjects).where(laboratory_subjects: { laboratory_id: current_laboratory.id }) + end + @count = subjects.count @subjects = paginate(subjects.includes(:user, :repertoire), special: observed_user.is_teacher?) end From 2da7567c1647fb3c971b9badfe38c135d34ddd0c Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 15 Nov 2019 15:25:34 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E9=9A=94=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users/shixuns_controller.rb | 4 ++-- app/controllers/users/subjects_controller.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/controllers/users/shixuns_controller.rb b/app/controllers/users/shixuns_controller.rb index 3758fbe19..fcf9e3618 100644 --- a/app/controllers/users/shixuns_controller.rb +++ b/app/controllers/users/shixuns_controller.rb @@ -5,9 +5,9 @@ class Users::ShixunsController < Users::BaseController ## 云上实验室过滤 if current_laboratory.main_site? not_shixun_ids = Shixun.joins(:laboratory_shixuns).where("laboratory_shixuns.laboratory_id != #{current_laboratory.id}") - @shixuns = @shixuns.where.not(id: not_shixun_ids) + shixuns = shixuns.where.not(id: not_shixun_ids) else - @shixuns = @shixuns.joins(:laboratory_shixuns).where(laboratory_shixuns: { laboratory_id: current_laboratory.id }) + shixuns = shixuns.joins(:laboratory_shixuns).where(laboratory_shixuns: { laboratory_id: current_laboratory.id }) end @count = shixuns.count diff --git a/app/controllers/users/subjects_controller.rb b/app/controllers/users/subjects_controller.rb index 59ad86859..8c1e35425 100644 --- a/app/controllers/users/subjects_controller.rb +++ b/app/controllers/users/subjects_controller.rb @@ -5,9 +5,9 @@ class Users::SubjectsController < Users::BaseController ## 云上实验室过滤 if current_laboratory.main_site? not_subject_ids = Subject.joins(:laboratory_subjects).where("laboratory_subjects.laboratory_id != #{current_laboratory.id}") - @subjects = @subjects.where.not(id: not_subject_ids) + subjects = subjects.where.not(id: not_subject_ids) else - @subjects = @subjects.joins(:laboratory_subjects).where(laboratory_subjects: { laboratory_id: current_laboratory.id }) + subjects = subjects.joins(:laboratory_subjects).where(laboratory_subjects: { laboratory_id: current_laboratory.id }) end @count = subjects.count From 53fa4747542b114b01b9e39e149fba1c998fba85 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 15 Nov 2019 15:39:30 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E5=AE=9E=E8=B7=B5=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E5=92=8C=E5=AE=9E=E8=AE=AD=E9=A6=96=E9=A1=B5=E7=9A=84=E8=BF=87?= =?UTF-8?q?=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/shixuns_controller.rb | 3 +++ app/controllers/subjects_controller.rb | 3 +++ 2 files changed, 6 insertions(+) diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb index d48034051..619d2c8a7 100644 --- a/app/controllers/shixuns_controller.rb +++ b/app/controllers/shixuns_controller.rb @@ -38,6 +38,9 @@ class ShixunsController < ApplicationController ## 云上实验室过滤 unless current_laboratory.main_site? @shixuns = @shixuns.joins(:laboratory_shixuns).where(laboratory_shixuns: { laboratory_id: current_laboratory.id }) + else + not_shixun_ids = Shixun.joins(:laboratory_shixuns).where("laboratory_shixuns.laboratory_id != #{current_laboratory.id}") + @shixuns = @shixuns.where.not(id: not_shixun_ids) end ## 方向 diff --git a/app/controllers/subjects_controller.rb b/app/controllers/subjects_controller.rb index a5e64daaa..1346e7368 100644 --- a/app/controllers/subjects_controller.rb +++ b/app/controllers/subjects_controller.rb @@ -56,6 +56,9 @@ class SubjectsController < ApplicationController # 云上实验室过滤 unless current_laboratory.main_site? @subjects = @subjects.joins(:laboratory_subjects).where(laboratory_subjects: { laboratory_id: current_laboratory.id }) + else + not_subject_ids = Subject.joins(:laboratory_subjects).where("laboratory_subjects.laboratory_id != #{current_laboratory.id}") + @subjects = @subjects.where.not(id: not_subject_ids) end # 类型