diff --git a/app/assets/javascripts/admins/page_themes.js b/app/assets/javascripts/admins/page_themes.js new file mode 100644 index 000000000..1663fb90a --- /dev/null +++ b/app/assets/javascripts/admins/page_themes.js @@ -0,0 +1,3 @@ +// Place all the behaviors and hooks related to the matching controller here. +// All this logic will automatically be available in application.js. + diff --git a/app/assets/stylesheets/admins/page_themes.scss b/app/assets/stylesheets/admins/page_themes.scss new file mode 100644 index 000000000..b47fedabf --- /dev/null +++ b/app/assets/stylesheets/admins/page_themes.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the admins/page_themes controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/admins/identity_verifications_controller.rb b/app/controllers/admins/identity_verifications_controller.rb index f5d5a11e3..51d5e423c 100644 --- a/app/controllers/admins/identity_verifications_controller.rb +++ b/app/controllers/admins/identity_verifications_controller.rb @@ -3,9 +3,7 @@ class Admins::IdentityVerificationsController < Admins::BaseController def index params[:sort_by] = params[:sort_by].presence || 'created_at' params[:sort_direction] = params[:sort_direction].presence || 'desc' - identity_verifications = Admins::IdentityVerificationQuery.call(params) - @identity_verifications = paginate identity_verifications.preload(:user) end @@ -16,9 +14,13 @@ class Admins::IdentityVerificationsController < Admins::BaseController end def update - @identity_verification.update(update_params) - flash[:success] = '保存成功' - render 'edit' + if @identity_verification.update(update_params) + redirect_to admins_identity_verifications_path + flash[:success] = "更新成功" + else + redirect_to admins_identity_verifications_path + flash[:danger] = "更新失败" + end end private diff --git a/app/controllers/admins/page_themes_controller.rb b/app/controllers/admins/page_themes_controller.rb new file mode 100644 index 000000000..1b2cd8ebe --- /dev/null +++ b/app/controllers/admins/page_themes_controller.rb @@ -0,0 +1,79 @@ +class Admins::PageThemesController < Admins::BaseController + before_action :finder_page_theme, only: [:edit, :update, :destroy] + + def index + params[:sort_by] = params[:sort_by].presence || 'created_at' + params[:sort_direction] = params[:sort_direction].presence || 'desc' + + page_themes = Admins::PageThemesQuery.call(params) + + @page_themes = paginate page_themes + end + + def show + render 'edit' + end + + def edit + end + + def create + @page_theme = PageTheme.new theme_params + if @page_theme.save + save_image_file(params[:image]) + redirect_to admins_page_themes_path + flash[:success] = "新增主题成功" + else + redirect_to admins_page_themes_path + flash[:danger] = "新增主题失败: #{@page_theme.errors.messages.values.flatten.join(',')}" + end + end + + def destroy + if PageTheme.where(language_frame: @page_theme.language_frame).count <= 1 + flash[:danger] = "删除主题失败,必须存在一个主题" + return redirect_to admins_page_themes_path + end + + if @page_theme.destroy + redirect_to admins_page_themes_path + flash[:success] = "删除主题成功" + else + redirect_to admins_page_themes_path + flash[:danger] = "删除主题失败" + end + end + + def new + @page_theme = PageTheme.new + end + + def update + @page_theme.attributes = theme_params + if @page_theme.save + save_image_file(params[:image]) + redirect_to admins_page_themes_path + flash[:success] = "更新成功" + else + redirect_to admins_page_themes_path + flash[:danger] = "更新失败" + end + end + + private + def finder_page_theme + @page_theme = PageTheme.find(params[:id]) + end + + def theme_params + params.require(:page_theme).permit(:language_frame, :name, :cate, :image_url, :clone_url, :order_index) + end + + def save_image_file(file) + return unless file.present? && file.is_a?(ActionDispatch::Http::UploadedFile) + file_path = Util::FileManage.source_disk_filename(@page_theme, "image") + File.delete(file_path) if File.exist?(file_path) # 删除之前的文件 + Util.write_file(file, file_path) + end + +end diff --git a/app/controllers/admins/site_pages_controller.rb b/app/controllers/admins/site_pages_controller.rb index 04bff32c7..f0e05e71d 100644 --- a/app/controllers/admins/site_pages_controller.rb +++ b/app/controllers/admins/site_pages_controller.rb @@ -17,6 +17,17 @@ class Admins::SitePagesController < Admins::BaseController def edit end + + def destroy + if @site_page.destroy + redirect_to admins_site_pages_path + flash[:success] = "删除站点成功" + else + redirect_to admins_site_pages_path + flash[:danger] = "删除站点失败" + end + end + def update @site_page.update(update_params) flash[:success] = '保存成功' diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 4d89cce18..446e4bb31 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -100,6 +100,8 @@ class ProjectsController < ApplicationController def page_migrate return normal_status(-1, "您还未开通Page服务,无法进行新建站点") unless current_user.id_card_verify + return normal_status(-1, "你已使用了 #{page_site_params[:identifier]} 作为page标识") if Page.exists?(identifier: page_site_params[:identifier], user: current_user) + Projects::MigrateForm.new(mirror_params).validate! @project = diff --git a/app/controllers/site_pages_controller.rb b/app/controllers/site_pages_controller.rb index 319cacfb5..5cdc4ba2f 100644 --- a/app/controllers/site_pages_controller.rb +++ b/app/controllers/site_pages_controller.rb @@ -2,21 +2,22 @@ class SitePagesController < ApplicationController before_action :require_login, except: [:softbot_build, :themes] before_action :require_profile_completed, only: [:create] before_action :load_project, except: [:softbot_build, :index, :themes] - before_action :authenticate_user!, except: [:softbot_build, :index, :themes] + before_action :authenticate_user!, except: [:softbot_build, :index, :themes, :show] + before_action :authenticate_member!, only: [:show] def index - @pages = PageQuery.call(params,current_user) - @pages = paginate(@pages) + pages = PageQuery.call(params,current_user) + @total_count = pages.size + @pages = paginate(pages) end def show - @page = Page.find_by(user_id: current_user.id, project_id: @project.id) + @page = Page.find_by(project_id: @project.id) return render_ok({data:nil}) unless @page.present? end def create - return normal_status(-1, "您还未通过身份认证,无法开通Page") unless current_user.id_card_verify - return normal_status(-1, "您还未开通Page服务,无法进行部署") unless current_user.website_permission + return normal_status(-1, "你还未开通Page服务,无法进行部署") unless current_user.website_permission return normal_status(-1, "你已使用了 #{params[:identifier]} 作为page标识") if Page.exists?(identifier: params[:identifier], user: current_user) return normal_status(-1, "该仓库已开通Page服务") if Page.exists?(project: @project) @page = Page.new(create_params) @@ -26,7 +27,7 @@ class SitePagesController < ApplicationController end def build - return normal_status(-1, "您还未开通Page服务,无法进行部署") unless current_user.website_permission + return normal_status(-1, "你还未开通Page服务,无法进行部署") unless current_user.website_permission return normal_status(-1, "该仓库还未开通Page服务,无法进行部署") unless Page.exists?(project: @project) @page = Page.find params[:id] return normal_status(-1, @page.state_description) unless @page.state @@ -42,7 +43,7 @@ class SitePagesController < ApplicationController def softbot_build branch = params[:ref].split("/").last user = User.find_by_login params[:repository][:owner][:login] - return normal_status(-1, "您还未开通Page服务,无法进行部署") unless user.website_permission + return normal_status(-1, "你还未开通Page服务,无法进行部署") unless user.website_permission project = Project.where(identifier: params[:repository][:name],user_id: user.id) return normal_status(-1, "你没有权限操作") if project.owner?(user) @@ -54,15 +55,22 @@ class SitePagesController < ApplicationController end def themes - data = YAML.load_file(Rails.root.join('config/admins', 'page_themes.yml')) - render_ok({themes:data[theme_params.downcase]}) + # data = YAML.load_file(Rails.root.join('config/admins', 'page_themes.yml')) + # render_ok({themes:data[theme_params.downcase]}) + @themes = PageTheme.where(language_frame:theme_params).order(order_index: :asc) end private def authenticate_user! - return if @project.is_public - return if @project.owner?(current_user) - render_forbidden('你没有权限操作') + unless @project.manager?(current_user) || current_user.admin? + return render_forbidden('你不是管理员,没有权限操作') + end + end + + def authenticate_member! + unless @project.member?(current_user) || current_user.admin? + return render_forbidden('你不是成员,没有权限操作') + end end def theme_params diff --git a/app/helpers/admins/page_themes_helper.rb b/app/helpers/admins/page_themes_helper.rb new file mode 100644 index 000000000..721d9b78c --- /dev/null +++ b/app/helpers/admins/page_themes_helper.rb @@ -0,0 +1,2 @@ +module Admins::PageThemesHelper +end diff --git a/app/models/attachment.rb b/app/models/attachment.rb index f79aca153..0c056f60c 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -26,8 +26,6 @@ # cloud_url :string(255) default("") # course_second_category_id :integer default("0") # delay_publish :boolean default("0") -# memo_image :boolean default("0") -# extra_type :integer default("0") # # Indexes # diff --git a/app/models/glcc_registration_task.rb b/app/models/glcc_registration_task.rb index 7c8671e6f..da0d7cfd5 100644 --- a/app/models/glcc_registration_task.rb +++ b/app/models/glcc_registration_task.rb @@ -1,20 +1,27 @@ - # == Schema Information # -# Table name: ignores -# user_id -# student_name -# school -# profession -# location -# grade -# phone -# mail -# created_on -# is_delete -# prove_attachment_id -# cancel_count -# round +# Table name: glcc_registration_task +# +# id :integer not null, primary key +# reg_id :integer not null +# task_name :string(255) +# task_desc :text(16777215) +# task_difficulty :integer +# task_url :string(1000) +# task_reward :string(255) +# tutor_name :string(255) +# tutor_mail :string(255) +# tutor_phone :string(255) +# created_on :datetime +# is_delete :boolean default("0"), not null +# sort_no :integer default("0") +# locked :boolean default("0") +# round :integer default("1"), not null +# check_status :boolean default("0") +# +# Indexes +# +# idx_glcc_reg_id (reg_id) # class GlccRegistrationTask < ActiveRecord::Base diff --git a/app/models/identity_verification.rb b/app/models/identity_verification.rb index 3c8c88d9b..983755b16 100644 --- a/app/models/identity_verification.rb +++ b/app/models/identity_verification.rb @@ -17,7 +17,7 @@ # # Indexes # -# index_identity_verifications_on_user_id (user_id) +# index_identity_verifications_on_number (number) # class IdentityVerification < ApplicationRecord diff --git a/app/models/license.rb b/app/models/license.rb index f84e63573..d14a9db14 100644 --- a/app/models/license.rb +++ b/app/models/license.rb @@ -7,7 +7,6 @@ # content :text(65535) # created_at :datetime not null # updated_at :datetime not null -# is_secret :boolean default("0") # class License < ApplicationRecord diff --git a/app/models/member.rb b/app/models/member.rb index aaaf34efc..521f939c5 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -11,7 +11,6 @@ # course_group_id :integer default("0") # is_collect :integer default("1") # graduation_group_id :integer default("0") -# is_apply_signature :boolean default("0") # team_user_id :integer # # Indexes diff --git a/app/models/organization_user.rb b/app/models/organization_user.rb index 900710a9a..4ff6946b7 100644 --- a/app/models/organization_user.rb +++ b/app/models/organization_user.rb @@ -5,7 +5,6 @@ # id :integer not null, primary key # user_id :integer # organization_id :integer -# is_creator :boolean default("0") # created_at :datetime not null # updated_at :datetime not null # diff --git a/app/models/page_theme.rb b/app/models/page_theme.rb new file mode 100644 index 000000000..bce3d5f70 --- /dev/null +++ b/app/models/page_theme.rb @@ -0,0 +1,29 @@ +# == Schema Information +# +# Table name: page_themes +# +# id :integer not null, primary key +# name :string(255) not null +# language_frame :integer default("0") +# image_url :string(255) +# clone_url :string(255) not null +# order_index :integer default("0") +# created_at :datetime not null +# updated_at :datetime not null +# + +class PageTheme < ApplicationRecord + enum language_frame: { hugo: 0, jeklly: 1, hexo: 2} + validates :name, presence: {message: "主题名不能为空"}, uniqueness: {message: "主题名已存在",scope: :language_frame},length: {maximum: 255} + + def image + page_image_url('image') + end + private + + def page_image_url(type) + return nil unless Util::FileManage.exists?(self, type) + Util::FileManage.source_disk_file_url(self, type) + end + +end diff --git a/app/models/project.rb b/app/models/project.rb index 17972dd50..1f27a55ad 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -62,7 +62,6 @@ # # Indexes # -# index_projects_on_forked_count (forked_count) # index_projects_on_forked_from_project_id (forked_from_project_id) # index_projects_on_identifier (identifier) # index_projects_on_invite_code (invite_code) @@ -72,7 +71,6 @@ # index_projects_on_license_id (license_id) # index_projects_on_name (name) # index_projects_on_platform (platform) -# index_projects_on_praises_count (praises_count) # index_projects_on_project_category_id (project_category_id) # index_projects_on_project_language_id (project_language_id) # index_projects_on_project_type (project_type) @@ -80,7 +78,6 @@ # index_projects_on_rgt (rgt) # index_projects_on_status (status) # index_projects_on_updated_on (updated_on) -# index_projects_on_user_id (user_id) # class Project < ApplicationRecord @@ -120,6 +117,7 @@ class Project < ApplicationRecord has_many :issues, dependent: :destroy # has_many :user_grades, dependent: :destroy has_many :attachments, as: :container, dependent: :destroy + has_one :page, dependent: :destroy has_one :project_score, dependent: :destroy has_many :versions, -> { order("versions.created_on DESC, versions.name DESC") }, dependent: :destroy has_many :praise_treads, as: :praise_tread_object, dependent: :destroy diff --git a/app/models/project_category.rb b/app/models/project_category.rb index bc6f8427d..97a304259 100644 --- a/app/models/project_category.rb +++ b/app/models/project_category.rb @@ -15,7 +15,6 @@ # Indexes # # index_project_categories_on_ancestry (ancestry) -# index_project_categories_on_id (id) # class ProjectCategory < ApplicationRecord diff --git a/app/models/project_language.rb b/app/models/project_language.rb index 22a4a81ff..0770a1efa 100644 --- a/app/models/project_language.rb +++ b/app/models/project_language.rb @@ -9,10 +9,6 @@ # created_at :datetime not null # updated_at :datetime not null # -# Indexes -# -# index_project_languages_on_id (id) -# class ProjectLanguage < ApplicationRecord include Projectable diff --git a/app/models/repository.rb b/app/models/repository.rb index 7d3f207ea..f2815dde7 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -27,7 +27,6 @@ # # Indexes # -# index_name (project_id) # index_repositories_on_identifier (identifier) # index_repositories_on_project_id (project_id) # index_repositories_on_user_id (user_id) diff --git a/app/models/user_extension.rb b/app/models/user_extension.rb index aeb9a9d83..ef4af5fd3 100644 --- a/app/models/user_extension.rb +++ b/app/models/user_extension.rb @@ -22,9 +22,9 @@ # school_id :integer # description :string(255) # department_id :integer -# province :text(65535) -# custom_department :string(255) +# province :string(255) # city :string(255) +# custom_department :string(255) # show_email :boolean default("0") # show_location :boolean default("0") # show_department :boolean default("0") diff --git a/app/queries/admins/identity_verification_query.rb b/app/queries/admins/identity_verification_query.rb index a0064ec0a..b0c685ae2 100644 --- a/app/queries/admins/identity_verification_query.rb +++ b/app/queries/admins/identity_verification_query.rb @@ -3,14 +3,14 @@ class Admins::IdentityVerificationQuery < ApplicationQuery attr_reader :params - sort_columns :updated_at, default_by: :updated_at, default_direction: :desc + sort_columns :created_at, default_by: :created_at, default_direction: :desc def initialize(params) @params = params end def call - state = params[:state].blank? ? [0,1,2] : params[:state].to_i + state = params[:state] == "all" ? [0,1,2] : params[:state].nil? ? [0] : params[:state].to_i applies = IdentityVerification.where(state: state) custom_sort(applies, params[:sort_by], params[:sort_direction]) end diff --git a/app/queries/admins/page_themes_query.rb b/app/queries/admins/page_themes_query.rb new file mode 100644 index 000000000..72d40943a --- /dev/null +++ b/app/queries/admins/page_themes_query.rb @@ -0,0 +1,17 @@ +class Admins::PageThemesQuery < ApplicationQuery + include CustomSortable + + attr_reader :params + + sort_columns :created_at, default_by: :created_at, default_direction: :desc + + def initialize(params) + @params = params + end + + def call + language_frame = params[:language_frame].blank? ? [0..99] : params[:language_frame] + page_themes = PageTheme.where(language_frame: language_frame) + custom_sort(page_themes, params[:sort_by], params[:sort_direction]) + end +end \ No newline at end of file diff --git a/app/queries/page_query.rb b/app/queries/page_query.rb index 50fcb92ad..d9496b30e 100644 --- a/app/queries/page_query.rb +++ b/app/queries/page_query.rb @@ -3,11 +3,11 @@ class PageQuery < ApplicationQuery def initialize(params, user) @user = user + @params = params end def call - pages = Page.where(user: @user) - + pages = Page.where(user: @user).order(created_at: :desc) pages end end \ No newline at end of file diff --git a/app/views/admins/identity_verifications/edit.html.erb b/app/views/admins/identity_verifications/edit.html.erb index 4719b01f0..580c86f3f 100644 --- a/app/views/admins/identity_verifications/edit.html.erb +++ b/app/views/admins/identity_verifications/edit.html.erb @@ -1,6 +1,6 @@ <% define_admin_breadcrumbs do - add_admin_breadcrumb('用户管理', admins_identity_verifications_path) + add_admin_breadcrumb('身份审核列表', admins_identity_verifications_path) add_admin_breadcrumb('用户身份审核详情') end %> @@ -62,7 +62,7 @@
<% if @identity_verification.card_front_attachment.present? %> - <%= link_to "#{@identity_verification.card_front_attachment.try(:filename)}",attachment_path(@identity_verification.card_front_attachment), target: "_blank" %> + <%= image_tag("/api/attachments/#{@identity_verification.card_front}", width: 100, height: 100, class: 'preview-image auth-image', data: { toggle: 'tooltip', title: '点击预览' }) %> <%else%>

图片无法展示,图片已丢失

<%end%> @@ -72,7 +72,7 @@
<% if @identity_verification.card_back_attachment.present? %> - <%= link_to "#{@identity_verification.card_back_attachment.try(:filename)}",attachment_path(@identity_verification.card_back_attachment), target: "_blank" %> + <%= image_tag("/api/attachments/#{@identity_verification.card_back}", width: 100, height: 100, class: 'preview-image auth-image', data: { toggle: 'tooltip', title: '点击预览' }) %> <%else%>

图片无法展示,图片已丢失

<%end%> @@ -82,7 +82,7 @@
<% if @identity_verification.hold_card_front_attachment.present? %> - <%= link_to "#{@identity_verification.hold_card_front_attachment.try(:filename)}",attachment_path(@identity_verification.hold_card_front_attachment), target: "_blank" %> + <%= image_tag("/api/attachments/#{@identity_verification.hold_card_front}", width: 100, height: 100, class: 'preview-image auth-image', data: { toggle: 'tooltip', title: '点击预览' }) %> <%else%>

图片无法展示,图片已丢失

<%end%> @@ -92,26 +92,17 @@
<% if @identity_verification.hold_card_back_attachment.present? %> - <%= link_to "#{@identity_verification.hold_card_back_attachment.try(:filename)}",attachment_path(@identity_verification.hold_card_back_attachment), target: "_blank" %> + <%= image_tag("/api/attachments/#{@identity_verification.hold_card_back}", width: 100, height: 100, class: 'preview-image auth-image', data: { toggle: 'tooltip', title: '点击预览' }) %> <%else%>

图片无法展示,图片已丢失

<%end%>
-
-
- -
- - - <% if @identity_verification.state == "已通过" %> + + <% unless @identity_verification.state == "已通过" %>
-

用户身份审核已通过

-
- <%else%> -
- <%= f.radio_button :state, '已通过' %> 通过   - <%= f.radio_button :state, '已拒绝' %> 拒绝 + <%= radio_button_tag("identity_verification[state]","已通过", required: 'required') %>通过   + <%= radio_button_tag("identity_verification[state]","已拒绝", required: 'required') %>拒绝

@@ -124,8 +115,5 @@ <% end %>
- - - <% end %>
diff --git a/app/views/admins/identity_verifications/index.html.erb b/app/views/admins/identity_verifications/index.html.erb index d5aef6dc6..5cb0f8c93 100644 --- a/app/views/admins/identity_verifications/index.html.erb +++ b/app/views/admins/identity_verifications/index.html.erb @@ -1,12 +1,12 @@ <% define_admin_breadcrumbs do %> - <% add_admin_breadcrumb('用户管理', admins_identity_verifications_path) %> + <% add_admin_breadcrumb('身份审核列表', admins_identity_verifications_path) %> <% end %>
<%= form_tag(admins_identity_verifications_path, method: :get, class: 'form-inline search-form flex-1', remote: true) do %>
- <% state_options = [['全部',nil], ['待审核', 0], ['已通过', 1], ['已拒绝', 2]] %> + <% state_options = [['待审核', 0], ['全部',"all"], ['已通过', 1], ['已拒绝', 2]] %> <%= select_tag(:state, options_for_select(state_options), class: 'form-control') %>
diff --git a/app/views/admins/identity_verifications/shared/_info_list.html.erb b/app/views/admins/identity_verifications/shared/_info_list.html.erb index 486a4ec5d..8ab17ad42 100644 --- a/app/views/admins/identity_verifications/shared/_info_list.html.erb +++ b/app/views/admins/identity_verifications/shared/_info_list.html.erb @@ -1,4 +1,4 @@ - +
diff --git a/app/views/admins/page_themes/_form_modal.html.erb b/app/views/admins/page_themes/_form_modal.html.erb new file mode 100644 index 000000000..3d0a97588 --- /dev/null +++ b/app/views/admins/page_themes/_form_modal.html.erb @@ -0,0 +1,60 @@ + \ No newline at end of file diff --git a/app/views/admins/page_themes/_list.html.erb b/app/views/admins/page_themes/_list.html.erb new file mode 100644 index 000000000..d5280206c --- /dev/null +++ b/app/views/admins/page_themes/_list.html.erb @@ -0,0 +1,35 @@ +
序号
+ + + + + + + + + + + + + <% if page_themes.present? %> + <% page_themes.each_with_index do |theme, index| %> + + + + + + + + + + <% end %> + <% else %> + <%= render 'admins/shared/no_data_for_table' %> + <% end %> + +
序号建站工具顺序主题名图片仓库url操作
<%= list_index_no((params[:page] || 1).to_i, index) %><%= theme.language_frame %><%= theme.order_index %><%= theme.name %><%= theme.clone_url %> + <%= link_to "编辑", edit_admins_page_theme_path(theme), remote: true, class: "action" %> + <%= link_to "删除", admins_page_theme_path(theme), method: :delete, data:{confirm: "确认删除的吗?"}, class: "action" %> +
+ +<%= render partial: 'admins/shared/paginate', locals: { objects: page_themes } %> \ No newline at end of file diff --git a/app/views/admins/page_themes/edit.js.erb b/app/views/admins/page_themes/edit.js.erb new file mode 100644 index 000000000..a9f963c5d --- /dev/null +++ b/app/views/admins/page_themes/edit.js.erb @@ -0,0 +1,18 @@ +$("#page-themes-modals").html("<%= j render(partial: 'admins/page_themes/form_modal', locals: {type: 'update'}) %>") +$(".page-themes-change-modal").modal('show'); + +$('.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 { + } +}); diff --git a/app/views/admins/page_themes/index.html.erb b/app/views/admins/page_themes/index.html.erb new file mode 100644 index 000000000..4b4392d88 --- /dev/null +++ b/app/views/admins/page_themes/index.html.erb @@ -0,0 +1,21 @@ +<% define_admin_breadcrumbs do %> + <% add_admin_breadcrumb('站点主题配置') %> +<% end %> + +
+ <%= form_tag(admins_page_themes_path, method: :get, class: 'form-inline search-form flex-1', remote: true) do %> +
+ + <% state_options = [['全部',nil], ['hugo', 0], ['jeklly', 1],['hexo',2]] %> + <%= select_tag(:language_frame, options_for_select(state_options), class: 'form-control') %> +
+ <%= submit_tag('搜索', class: 'btn btn-primary ml-3', 'data-disable-with': '搜索中...') %> + <% end %> + <%= link_to "新增", new_admins_page_theme_path, remote: true, class: "btn btn-primary pull-right", "data-disabled-with":"...新增" %> +
+ +
+ <%= render partial: 'admins/page_themes/list', locals: { page_themes: @page_themes } %> +
+
+
diff --git a/app/views/admins/page_themes/index.js.erb b/app/views/admins/page_themes/index.js.erb new file mode 100644 index 000000000..30ea36a4e --- /dev/null +++ b/app/views/admins/page_themes/index.js.erb @@ -0,0 +1 @@ +$('.page-themes-list-container').html("<%= j( render partial: 'admins/page_themes/list', locals: { page_themes: @page_themes } ) %>"); \ No newline at end of file diff --git a/app/views/admins/page_themes/new.js.erb b/app/views/admins/page_themes/new.js.erb new file mode 100644 index 000000000..4c3d847d4 --- /dev/null +++ b/app/views/admins/page_themes/new.js.erb @@ -0,0 +1,18 @@ +$("#page-themes-modals").html("<%= j render(partial: 'admins/page_themes/form_modal', locals: {type: 'create'}) %>") +$(".page-themes-change-modal").modal('show'); + +$('.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 { + } +}); diff --git a/app/views/admins/shared/_sidebar.html.erb b/app/views/admins/shared/_sidebar.html.erb index d1d39fcf5..813e2338d 100644 --- a/app/views/admins/shared/_sidebar.html.erb +++ b/app/views/admins/shared/_sidebar.html.erb @@ -32,6 +32,7 @@ <%= sidebar_item_group('#pages-submenu', '站点管理', icon: 'cogs') do %>
  • <%= sidebar_item(admins_identity_verifications_path, '身份审核列表', icon: 'user', controller: 'admins-identity_verifications') %>
  • <%= sidebar_item(admins_site_pages_path, '用户站点列表', icon: 'sitemap', controller: 'admins-site_pages') %>
  • +
  • <%= sidebar_item(admins_page_themes_path, '站点主题配置', icon: 'cogs', controller: 'admins-page_themes') %>
  • <% end %> diff --git a/app/views/admins/site_pages/edit.html.erb b/app/views/admins/site_pages/edit.html.erb index 84b69f683..a6cf322b3 100644 --- a/app/views/admins/site_pages/edit.html.erb +++ b/app/views/admins/site_pages/edit.html.erb @@ -1,7 +1,7 @@ <% define_admin_breadcrumbs do - add_admin_breadcrumb('用户管理', admins_site_pages_path) - add_admin_breadcrumb('站点列表') + add_admin_breadcrumb('用户站点列表', admins_site_pages_path) + add_admin_breadcrumb('站点详情') end %> @@ -50,9 +50,9 @@ <%= simple_form_for(@site_page, url: admins_site_page_path(@site_page)) do |f| %>
    -
    审核信息
    - - + +
    +
    <%= f.input :identifier, label: '站点标识', wrapper_html: { class: 'col-md-3' }, input_html: { readonly: true, class: 'col-md-5' , value: @site_page.identifier } %>
    @@ -62,7 +62,7 @@
    - <%= f.input :language_frame, label: '建站工具', wrapper_html: { class: 'col-md-3' }, input_html: { readonly: true, class: 'col-md-5' , value: @site_page.language_frame } %> + <%= f.input :language_frame, label: '建站工具', wrapper_html: { class: 'col-md-3' }, input_html: { readonly: true, type:'text', class: 'col-md-5' , value: @site_page.language_frame } %>
    diff --git a/app/views/admins/site_pages/index.html.erb b/app/views/admins/site_pages/index.html.erb index 8197ae6ee..449bc7f54 100644 --- a/app/views/admins/site_pages/index.html.erb +++ b/app/views/admins/site_pages/index.html.erb @@ -1,5 +1,5 @@ <% define_admin_breadcrumbs do %> - <% add_admin_breadcrumb('用户管理', admins_site_pages_path) %> + <% add_admin_breadcrumb('用户站点列表', admins_site_pages_path) %> <% end %>
    diff --git a/app/views/admins/site_pages/shared/_info_list.html.erb b/app/views/admins/site_pages/shared/_info_list.html.erb index 34b2f9325..49143d3f5 100644 --- a/app/views/admins/site_pages/shared/_info_list.html.erb +++ b/app/views/admins/site_pages/shared/_info_list.html.erb @@ -1,21 +1,21 @@ - - + + - + - + - + - + - + @@ -29,15 +29,18 @@ <% end %> - - - - + + + @@ -46,6 +49,7 @@ <% end %> diff --git a/app/views/admins/users/edit.html.erb b/app/views/admins/users/edit.html.erb index 616d97870..be952e7cb 100644 --- a/app/views/admins/users/edit.html.erb +++ b/app/views/admins/users/edit.html.erb @@ -97,7 +97,7 @@
    <%= f.label :role, label: '站点权限' %>
    - <%= f.input :website_permission, as: :boolean, label: '开通站点', checked_value: 1, unchecked_value: 0 %> + <%= f.input :website_permission, as: :boolean, label: "开通站点(关闭后,将清除该用户所有站点信息,此操作不可逆,请谨慎操作! 请谨慎操作!! 请谨慎操作!!!)".html_safe, checked_value: 1, unchecked_value: 0 %>
    <% end %> @@ -108,7 +108,7 @@
    - <%= f.button :submit, value: '保存', class: 'btn-primary mr-3 px-4' %> + <%= f.button :submit, value: '保存', class: 'btn-primary mr-3 px-4 action' ,data:{confirm: "确认更改?"}%> <%= link_to '取消', admins_users_path, class: 'btn btn-secondary px-4' %>
    <% end %> diff --git a/app/views/site_pages/_info.json.jbuilder b/app/views/site_pages/_info.json.jbuilder index 8239fbf51..3918c523c 100644 --- a/app/views/site_pages/_info.json.jbuilder +++ b/app/views/site_pages/_info.json.jbuilder @@ -7,6 +7,7 @@ json.project_id page.project_id json.site_name page.site_name json.theme page.theme json.state page.state +json.state_description page.state_description json.language_frame page.language_frame json.url page.url json.created_at page.created_at.strftime("%Y-%m-%d %H:%M:%S") diff --git a/app/views/site_pages/index.json.jbuilder b/app/views/site_pages/index.json.jbuilder index 035f4bc1b..482a7c70c 100644 --- a/app/views/site_pages/index.json.jbuilder +++ b/app/views/site_pages/index.json.jbuilder @@ -1,4 +1,4 @@ -json.total_count @pages.size +json.total_count @total_count json.pages @pages.each do |page| json.partial! 'info', locals: {page: page} end diff --git a/app/views/site_pages/themes.json.jbuilder b/app/views/site_pages/themes.json.jbuilder new file mode 100644 index 000000000..25a1d7015 --- /dev/null +++ b/app/views/site_pages/themes.json.jbuilder @@ -0,0 +1,10 @@ +json.total_count @themes.size +json.themes @themes.map{|e| + { + name: e.name, + language_frame: e.language_frame, + image: e.image, + clone_url: e.clone_url, + order_index: e.order_index, + } +} diff --git a/config/routes.rb b/config/routes.rb index 6a291bf2b..7b6c4d8bc 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -815,6 +815,7 @@ Rails.application.routes.draw do resources :users_rank, only: [:index] resources :identity_verifications resources :site_pages + resources :page_themes resources :projects_rank, only: [:index] resources :sites resources :edu_settings diff --git a/db/migrate/20230823071725_create_page_themes.rb b/db/migrate/20230823071725_create_page_themes.rb new file mode 100644 index 000000000..22cb7ab11 --- /dev/null +++ b/db/migrate/20230823071725_create_page_themes.rb @@ -0,0 +1,12 @@ +class CreatePageThemes < ActiveRecord::Migration[5.2] + def change + create_table :page_themes do |t| + t.string :name, null:false + t.integer :language_frame, default:0 + t.string :image_url + t.string :clone_url, null:false + t.integer :order_index,default: 0 + t.timestamps + end + end +end diff --git a/spec/controllers/admins/page_themes_controller_spec.rb b/spec/controllers/admins/page_themes_controller_spec.rb new file mode 100644 index 000000000..8495627cd --- /dev/null +++ b/spec/controllers/admins/page_themes_controller_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Admins::PageThemesController, type: :controller do + +end diff --git a/spec/helpers/admins/page_themes_helper_spec.rb b/spec/helpers/admins/page_themes_helper_spec.rb new file mode 100644 index 000000000..94f85f0cd --- /dev/null +++ b/spec/helpers/admins/page_themes_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the Admins::PageThemesHelper. For example: +# +# describe Admins::PageThemesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe Admins::PageThemesHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/page_theme_spec.rb b/spec/models/page_theme_spec.rb new file mode 100644 index 000000000..42f66aca9 --- /dev/null +++ b/spec/models/page_theme_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe PageTheme, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end
    序号昵称序号昵称 仓库站点状态站点状态 站点名 站点标识站点地址站点地址建站工具建站工具 主题上次构建时间上次部署时间 <%= sort_tag('创建于', name: 'created_at', path: admins_site_pages_path) %>操作操作
    - <%= link_to "/#{site_page.user.login}/#{site_page.project.identifier}", target: '_blank' do %> - <%= overflow_hidden_span site_page.project.name, width: 100 %> + <%= link_to "/#{site_page.user.login}/#{site_page.project.try(:identifier)}", target: '_blank' do %> + <%= overflow_hidden_span site_page.project.try(:name), width: 100 %> <% end %> <%= display_text(site_page.state == true ? "正常" : "已关闭") %><%= display_text(site_page.site_name) %><%= display_text(site_page.identifier) %><%= link_to "#{site_page.url}", site_page.url, target: '_blank'%><%= display_text(site_page.site_name) %><%= display_text(site_page.identifier) %> + <%= link_to "#{site_page.url}", target: '_blank' do %> + <%= overflow_hidden_span site_page.url, width: 120 %> + <% end %> + <%= display_text(site_page.language_frame) %> <%= display_text(site_page.theme) %> <%= display_text(site_page.last_build_at&.strftime('%Y-%m-%d %H:%M')) %> <%= link_to "查看", edit_admins_site_page_path(site_page), class: 'action' %> + <%= link_to "删除", admins_site_page_path(site_page), method: :delete, data:{confirm: "确认删除吗,删除后站点将无法访问?"}, class: "action" %>