From b704f4b2de060a18022ed7c7675620a32e47277e Mon Sep 17 00:00:00 2001 From: p31729568 Date: Wed, 16 Oct 2019 16:44:22 +0800 Subject: [PATCH] admins: custom carousel --- .../javascripts/admins/carousels/index.js | 8 ++++--- app/assets/stylesheets/admins/common.scss | 8 ++++++- .../admins/carousels_controller.rb | 24 ++++++++++++------- app/controllers/concerns/laboratory_helper.rb | 1 + app/controllers/home_controller.rb | 4 ++-- app/libs/hot_search_keyword.rb | 1 + app/models/laboratory.rb | 2 ++ app/models/portal_image.rb | 4 ++++ .../admins/drag_portal_image_service.rb | 8 +++---- app/views/admins/carousels/index.html.erb | 7 +++--- .../shared/_add_carousel_modal.html.erb | 2 +- .../shared/_laboratory_item.html.erb | 13 +++++++--- app/views/admins/shared/_sidebar.html.erb | 3 +-- config/admins/sidebar.yml | 3 ++- config/routes.rb | 7 +++--- ...5036_add_laboratory_id_to_portal_images.rb | 8 +++++++ 16 files changed, 71 insertions(+), 32 deletions(-) create mode 100644 db/migrate/20191016075036_add_laboratory_id_to_portal_images.rb diff --git a/app/assets/javascripts/admins/carousels/index.js b/app/assets/javascripts/admins/carousels/index.js index 0f279f17e..fe665a35f 100644 --- a/app/assets/javascripts/admins/carousels/index.js +++ b/app/assets/javascripts/admins/carousels/index.js @@ -1,5 +1,7 @@ $(document).on('turbolinks:load', function() { if ($('body.admins-carousels-index-page').length > 0) { + var laboratoryId = $('#carousels-container').data('laboratoryId'); + // ------------ 保存链接 ----------- $('.carousels-card').on('click', '.save-data-btn', function(){ var $link = $(this); @@ -13,7 +15,7 @@ $(document).on('turbolinks:load', function() { $link.attr('disabled', true); $.ajax({ - url: '/admins/carousels/' + id, + url: '/admins/laboratories/' + laboratoryId + '/carousels/' + id, method: 'PATCH', dataType: 'json', data: { link: link, name: name }, @@ -34,7 +36,7 @@ $(document).on('turbolinks:load', function() { $checkbox.attr('disabled', true); $.ajax({ - url: '/admins/carousels/' + id, + url: '/admins/laboratories/' + laboratoryId + '/carousels/' + id, method: 'PATCH', dataType: 'json', data: { status: checked }, @@ -60,7 +62,7 @@ $(document).on('turbolinks:load', function() { var insertId = $(sibling).data('id') || ''; $.ajax({ - url: '/admins/carousels/drag', + url: '/admins/laboratories/' + laboratoryId + '/carousels/drag', method: 'POST', dataType: 'json', data: { move_id: moveId, after_id: insertId }, diff --git a/app/assets/stylesheets/admins/common.scss b/app/assets/stylesheets/admins/common.scss index adad72997..aabe6085c 100644 --- a/app/assets/stylesheets/admins/common.scss +++ b/app/assets/stylesheets/admins/common.scss @@ -48,9 +48,15 @@ } .action-container { - .action { + & > .action { padding: 0 3px; } + + .more-action-dropdown { + .dropdown-item { + font-size: 14px; + } + } } /* 分页 */ diff --git a/app/controllers/admins/carousels_controller.rb b/app/controllers/admins/carousels_controller.rb index cd693d2fd..ad6af7649 100644 --- a/app/controllers/admins/carousels_controller.rb +++ b/app/controllers/admins/carousels_controller.rb @@ -1,15 +1,17 @@ class Admins::CarouselsController < Admins::BaseController before_action :convert_file!, only: [:create] + helper_method :current_laboratory + def index - @images = PortalImage.order(position: :asc) + @images = current_laboratory.portal_images.order(position: :asc) end def create - position = PortalImage.count + 1 + position = current_laboratory.portal_images.count + 1 ActiveRecord::Base.transaction do - image = PortalImage.create!(create_params.merge(position: position)) + image = current_laboratory.portal_images.create!(create_params.merge(position: position)) file_path = Util::FileManage.disk_filename('PortalImage', image.id) File.delete(file_path) if File.exist?(file_path) # 删除之前的文件 @@ -17,7 +19,7 @@ class Admins::CarouselsController < Admins::BaseController end flash[:success] = '保存成功' - redirect_to admins_carousels_path + redirect_to admins_laboratory_carousels_path(current_laboratory) end def update @@ -29,7 +31,7 @@ class Admins::CarouselsController < Admins::BaseController ActiveRecord::Base.transaction do current_image.destroy! # 前移 - PortalImage.where('position > ?', current_image.position) + current_laboratory.portal_images.where('position > ?', current_image.position) .update_all('position = position - 1') file_path = Util::FileManage.disk_filename('PortalImage', current_image.id) @@ -39,10 +41,10 @@ class Admins::CarouselsController < Admins::BaseController end def drag - move = PortalImage.find_by(id: params[:move_id]) - after = PortalImage.find_by(id: params[:after_id]) + move = current_laboratory.portal_images.find_by(id: params[:move_id]) + after = current_laboratory.portal_images.find_by(id: params[:after_id]) - Admins::DragPortalImageService.call(move, after) + Admins::DragPortalImageService.call(current_laboratory, move, after) render_ok rescue Admins::DragPortalImageService::Error => e render_error(e.message) @@ -50,8 +52,12 @@ class Admins::CarouselsController < Admins::BaseController private + def current_laboratory + @_current_laboratory ||= Laboratory.find(params[:laboratory_id]) + end + def current_image - @_current_image ||= PortalImage.find(params[:id]) + @_current_image ||= current_laboratory.portal_images.find(params[:id]) end def create_params diff --git a/app/controllers/concerns/laboratory_helper.rb b/app/controllers/concerns/laboratory_helper.rb index fbb18b36d..08a75fd79 100644 --- a/app/controllers/concerns/laboratory_helper.rb +++ b/app/controllers/concerns/laboratory_helper.rb @@ -2,6 +2,7 @@ module LaboratoryHelper extend ActiveSupport::Concern included do + helper_method :current_laboratory helper_method :default_setting end diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 2ed82f1b5..72d6118bf 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -2,10 +2,10 @@ class HomeController < ApplicationController def index # banner图 - images = PortalImage.where(status: true).order("position asc") + images = current_laboratory.portal_images.only_online.order(position: :asc) @images_url = [] images.each do |image| - @images_url << {path: image.link, image_url: Util::FileManage.disk_file_url('PortalImage', image.id)} + @images_url << {path: image.link, image_url: Util::FileManage.source_disk_file_url(image)} end # 目录分级 diff --git a/app/libs/hot_search_keyword.rb b/app/libs/hot_search_keyword.rb index e222bf3a7..f026142cb 100644 --- a/app/libs/hot_search_keyword.rb +++ b/app/libs/hot_search_keyword.rb @@ -1,3 +1,4 @@ +# 基于Redis实现热门搜索关键字 class HotSearchKeyword class << self def add(keyword) diff --git a/app/models/laboratory.rb b/app/models/laboratory.rb index f319ace80..00f5adabf 100644 --- a/app/models/laboratory.rb +++ b/app/models/laboratory.rb @@ -6,6 +6,8 @@ class Laboratory < ApplicationRecord has_one :laboratory_setting, dependent: :destroy + has_many :portal_images, dependent: :destroy + validates :identifier, uniqueness: { case_sensitive: false }, allow_nil: true def site diff --git a/app/models/portal_image.rb b/app/models/portal_image.rb index a3fd71bb5..b07214c77 100644 --- a/app/models/portal_image.rb +++ b/app/models/portal_image.rb @@ -1,4 +1,8 @@ class PortalImage < ApplicationRecord + belongs_to :laboratory + + scope :only_online, -> { where(status: true) } + def online? status? end diff --git a/app/services/admins/drag_portal_image_service.rb b/app/services/admins/drag_portal_image_service.rb index 9f8adea38..5555c08b2 100644 --- a/app/services/admins/drag_portal_image_service.rb +++ b/app/services/admins/drag_portal_image_service.rb @@ -1,9 +1,10 @@ class Admins::DragPortalImageService < ApplicationService Error = Class.new(StandardError) - attr_reader :move, :after + attr_reader :laboratory, :move, :after - def initialize(move, after) + def initialize(laboratory, move, after) + @laboratory = laboratory @move = move @after = after # 移动后下一个位置的元素 end @@ -11,7 +12,7 @@ class Admins::DragPortalImageService < ApplicationService def call return if move.position + 1 == after&.position # 未移动 - images = PortalImage.all + images = laboratory.portal_images ActiveRecord::Base.transaction do if after.blank? || move.id == after.id # 移动至末尾 @@ -31,5 +32,4 @@ class Admins::DragPortalImageService < ApplicationService end end end - end \ No newline at end of file diff --git a/app/views/admins/carousels/index.html.erb b/app/views/admins/carousels/index.html.erb index 89c224784..299d1dcfd 100644 --- a/app/views/admins/carousels/index.html.erb +++ b/app/views/admins/carousels/index.html.erb @@ -1,5 +1,6 @@ <% define_admin_breadcrumbs do + add_admin_breadcrumb('云上实验室', admins_laboratories_path) add_admin_breadcrumb('轮播图') end %> @@ -9,7 +10,7 @@ 首页轮播图(拖动排序) <%= javascript_void_link '添加', class: 'btn btn-primary btn-sm add-btn', data: { toggle: 'modal', target: '.admin-add-carousel-modal' } %> -
+
<% @images.each_with_index do |image, index| %> -<%= render partial: 'admins/carousels/shared/add_carousel_modal' %> +<%= render partial: 'admins/carousels/shared/add_carousel_modal', locals: { laboratory_id: current_laboratory } %> <%= render partial: 'admins/shared/modal/upload_file_modal' %> \ No newline at end of file diff --git a/app/views/admins/carousels/shared/_add_carousel_modal.html.erb b/app/views/admins/carousels/shared/_add_carousel_modal.html.erb index d1e75e29e..c3055e59e 100644 --- a/app/views/admins/carousels/shared/_add_carousel_modal.html.erb +++ b/app/views/admins/carousels/shared/_add_carousel_modal.html.erb @@ -8,7 +8,7 @@