diff --git a/app/controllers/weapps/subjects_controller.rb b/app/controllers/weapps/subjects_controller.rb index cabeb729c..b9e79a068 100644 --- a/app/controllers/weapps/subjects_controller.rb +++ b/app/controllers/weapps/subjects_controller.rb @@ -3,7 +3,9 @@ class Weapps::SubjectsController < Weapps::BaseController # 首页 def index - + subjects = Weapps::SubjectQuery.call(current_laboratory, params) + @subject_count = subjects.map(&:id).size + @subjects = paginate subjects end # 详情 diff --git a/app/queries/weapps/subject_query.rb b/app/queries/weapps/subject_query.rb new file mode 100644 index 000000000..e867c312b --- /dev/null +++ b/app/queries/weapps/subject_query.rb @@ -0,0 +1,37 @@ +class Weapps::SubjectQuery < ApplicationQuery + include CustomSortable + attr_reader :params + + def initialize(current_laboratory, params) + @current_laboratory = current_laboratory + @params = params + end + + def call + subjects = @current_laboratory.subjects + + # 课程体系的过滤 + if params[:sub_discipline_id].present? + subjects = subjects.joins(:sub_disciplines).where(sub_disciplines: {id: params[:sub_discipline_id]}) + elsif params[:discipline_id].present? + subjects = subjects.joins(:sub_disciplines).where(sub_disciplines: {discipline_id: params[:discipline_id]}) + else + subjects = subjects.joins(:sub_discipline_containers).where(sub_discipline_containers: {container_type: "Subject"}) + end + + subjects = subjects.left_joins(:shixuns).select('subjects.id, subjects.name, subjects.excellent, subjects.stages_count, subjects.status, + subjects.shixuns_count, subjects.updated_at, IFNULL(sum(shixuns.myshixuns_count), 0) myshixuns_count') + .group('subjects.id').order("#{order_type} #{sort_type}") + subjects + end + + private + + def order_type + params[:order] || "updated_at" + end + + def sort_type + params[:sort] || "desc" + end +end \ No newline at end of file diff --git a/app/views/weapps/subjects/index.json.jbuilder b/app/views/weapps/subjects/index.json.jbuilder new file mode 100644 index 000000000..64b18c4e9 --- /dev/null +++ b/app/views/weapps/subjects/index.json.jbuilder @@ -0,0 +1,7 @@ +json.subjects @subjects do |subject| + json.(subject, :id, :excellent, :name, :stages_count, :shixuns_count, :myshixuns_count) + json.image_url url_to_avatar(subject) + json.allow_visit subject.status > 1 || User.current.manager_of_subject?(subject) || User.current.admin? +end + +json.total_count @subject_count \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 9b2bd3a16..2b91375ff 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1018,7 +1018,7 @@ Rails.application.routes.draw do post :cancel_sticky, on: :collection end - resources :subjects, path: :paths, only: [:create, :update, :edit, :show] + resources :subjects, path: :paths, only: [:index, :create, :update, :edit, :show] resources :courses, only: [:create, :update, :edit, :show] do member do