diff --git a/app/controllers/admins/organizations_controller.rb b/app/controllers/admins/organizations_controller.rb index 4e40a509e..35fb4dee8 100644 --- a/app/controllers/admins/organizations_controller.rb +++ b/app/controllers/admins/organizations_controller.rb @@ -2,7 +2,11 @@ class Admins::OrganizationsController < Admins::BaseController before_action :finder_org, except: [:index] def index - @orgs = paginate Organization.all + params[:sort_by] = params[:sort_by].presence || 'created_on' + params[:sort_direction] = params[:sort_direction].presence || 'desc' + + orgs = Admins::OrganizationQuery.call(params) + @orgs = paginate orgs end def show diff --git a/app/queries/admins/organization_query.rb b/app/queries/admins/organization_query.rb new file mode 100644 index 000000000..09dbab9e3 --- /dev/null +++ b/app/queries/admins/organization_query.rb @@ -0,0 +1,21 @@ +class Admins::OrganizationQuery < ApplicationQuery + include CustomSortable + attr_reader :params + sort_columns :created_on, :last_login_on, :experience, :grade, default_by: :created_on, default_direction: :desc + + def initialize(params) + @params = params + end + + def call + orgs = Organization.all + # 关键字检索 + keyword = params[:keyword].to_s.strip.presence + if keyword + sql = 'nickname LIKE :keyword OR login LIKE :keyword' + orgs = orgs.where(sql, keyword: "%#{keyword}%") + end + + custom_sort(orgs, params[:sort_by], params[:sort_direction]) + end +end \ No newline at end of file diff --git a/app/views/admins/organizations/index.html.erb b/app/views/admins/organizations/index.html.erb index 7c96b57ee..7cd2ba8fa 100644 --- a/app/views/admins/organizations/index.html.erb +++ b/app/views/admins/organizations/index.html.erb @@ -1,6 +1,15 @@ <% define_admin_breadcrumbs do %> <% add_admin_breadcrumb('组织管理', admins_organizations_path) %> <% end %> +