From 99eaa92635191becc69501a729af3724e337d365 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 28 Nov 2019 18:17:19 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascripts/admins/courses/index.js | 57 +++++++++++++++++++ app/controllers/admins/courses_controller.rb | 31 ++++++++++ app/controllers/admins/projects_controller.rb | 45 +++++++++++++++ app/models/course.rb | 4 ++ app/models/project.rb | 3 + app/models/version.rb | 3 + app/views/admins/courses/index.html.erb | 3 +- app/views/admins/courses/index.xlsx.axlsx | 29 ++++++++++ .../admins/courses/shared/_list.html.erb | 8 +-- app/views/admins/projects/destroy.js.erb | 2 + app/views/admins/projects/index.html.erb | 15 +++++ app/views/admins/projects/index.js.erb | 1 + .../admins/projects/shared/_list.html.erb | 48 ++++++++++++++++ app/views/admins/shared/_sidebar.html.erb | 2 +- config/routes.rb | 8 +-- spec/models/version_spec.rb | 5 ++ 16 files changed, 252 insertions(+), 12 deletions(-) create mode 100644 app/assets/javascripts/admins/courses/index.js create mode 100644 app/controllers/admins/projects_controller.rb create mode 100644 app/models/version.rb create mode 100644 app/views/admins/courses/index.xlsx.axlsx create mode 100644 app/views/admins/projects/destroy.js.erb create mode 100644 app/views/admins/projects/index.html.erb create mode 100644 app/views/admins/projects/index.js.erb create mode 100644 app/views/admins/projects/shared/_list.html.erb create mode 100644 spec/models/version_spec.rb diff --git a/app/assets/javascripts/admins/courses/index.js b/app/assets/javascripts/admins/courses/index.js new file mode 100644 index 000000000..336d8c7c9 --- /dev/null +++ b/app/assets/javascripts/admins/courses/index.js @@ -0,0 +1,57 @@ +$(document).on('turbolinks:load', function() { + if ($('body.admins-courses-index-page').length > 0) { + let searchContainer = $(".course-list-form"); + let searchForm = $("form.search-form",searchContainer); + + searchContainer.on('change', '.course-homepage-show', function(){ + searchForm.find('input[type="submit"]').trigger('click'); + }); + + //导出 + searchContainer.on('click', "#course-export", function () { + window.location.href = "/admins/courses.xlsx?" + searchForm.serialize(); + }); + + $(".course-list-container").on("change", '.course-setting-form', function () { + var s_id = $(this).attr("data-id"); + var s_value = $(this).val(); + var s_name = $(this).attr("name"); + var json = {}; + json[s_name] = s_value; + $.ajax({ + url: "/admins/courses/" + s_id, + type: "PUT", + dataType:'script', + data: json + }); + }); + + // ************** 学校选择 ************* + searchForm.find('.school-select').select2({ + theme: 'bootstrap4', + placeholder: '请选择单位', + minimumInputLength: 1, + ajax: { + delay: 500, + url: '/api/schools/search.json', + dataType: 'json', + data: function (params) { + return {keyword: params.term}; + }, + processResults: function (data) { + return {results: data.schools} + } + }, + templateResult: function (item) { + if (!item.id || item.id === '') return item.text; + return item.name; + }, + templateSelection: function (item) { + if (item.id) { + } + return item.name || item.text; + } + }); + } +}); + diff --git a/app/controllers/admins/courses_controller.rb b/app/controllers/admins/courses_controller.rb index c7275b0f8..19363057d 100644 --- a/app/controllers/admins/courses_controller.rb +++ b/app/controllers/admins/courses_controller.rb @@ -8,6 +8,16 @@ class Admins::CoursesController < Admins::BaseController @ended_courses = courses.where(is_end: 1).size @processed_courses = courses.where(is_end: 0).size @courses = paginate courses.includes(:school, :students, :attachments, :homework_commons, teacher: :user_extension) + + respond_to do |format| + format.js + format.html + format.xlsx do + @courses = courses.includes(:school, :students, :attachments, :homework_commons, :course_acts, teacher: :user_extension) + filename = "课堂列表_#{Time.current.strftime('%Y%m%d%H%M%S')}.xlsx" + render xlsx: 'index', filename: filename + end + end end def destroy @@ -18,9 +28,30 @@ class Admins::CoursesController < Admins::BaseController end end + def update + if @course.update_attributes(setting_params) + render_ok + else + redirect_to admins_courses_path + flash[:danger] = "更新失败" + end + end + + def homepage_show + + end + + def email_notify + + end + private def find_course @course = Course.find_by!(id: params[:id]) end + + def setting_params + params.permit(:homepage_show, :email_notify) + end end \ No newline at end of file diff --git a/app/controllers/admins/projects_controller.rb b/app/controllers/admins/projects_controller.rb new file mode 100644 index 000000000..f2f2aaa9d --- /dev/null +++ b/app/controllers/admins/projects_controller.rb @@ -0,0 +1,45 @@ +class Admins::ProjectsController < Admins::BaseController + + def index + default_sort('created_at', 'desc') + + search = params[:search].to_s.strip + projects = Project.where("name like ?", "%#{search}%") + @projects = paginate projects.includes(:owner, :members, :issues, :versions, :attachments, :project_score) + end + + def destroy + if @course.is_delete == 0 + @course.delete! + Tiding.create!(user_id: current_user.id, trigger_user_id: current_user.id, container_id: @course.id, + container_type: 'DeleteCourse', tiding_type: 'System', belong_container: @course, extra: @course.name) + end + end + + def update + if @course.update_attributes(setting_params) + render_ok + else + redirect_to admins_courses_path + flash[:danger] = "更新失败" + end + end + + def homepage_show + + end + + def email_notify + + end + + private + + def find_course + @course = Course.find_by!(id: params[:id]) + end + + def setting_params + params.permit(:homepage_show, :email_notify) + end +end \ No newline at end of file diff --git a/app/models/course.rb b/app/models/course.rb index f0b70b2f3..2f561bba7 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -375,6 +375,10 @@ class Course < ApplicationRecord Game.joins(:challenge).where(challenges: {shixun_id: shixun_ids}, games: {user_id: course_user_ids}).sum(:evaluate_count) end + def max_activity_time + course_acts.pluck(:updated_at).max + end + # 课堂作业数 def course_homework_count type homework_commons.select{|homework| homework.homework_type == type}.size diff --git a/app/models/project.rb b/app/models/project.rb index 2e0a8be64..af59f58de 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -7,6 +7,9 @@ class Project < ApplicationRecord has_many :issues has_many :user_grades, dependent: :destroy + has_many :attachments, as: :container, dependent: :destroy + has_one :project_score, dependent: :destroy + has_many :versions, -> { order("versions.effective_date DESC, versions.name DESC") }, dependent: :destroy after_create do SyncTrustieJob.perform_later("project", 1) if allow_sync_to_trustie? diff --git a/app/models/version.rb b/app/models/version.rb new file mode 100644 index 000000000..c278ff0a9 --- /dev/null +++ b/app/models/version.rb @@ -0,0 +1,3 @@ +class Version < ApplicationRecord + belongs_to :project +end diff --git a/app/views/admins/courses/index.html.erb b/app/views/admins/courses/index.html.erb index a46cabe24..84ea98223 100644 --- a/app/views/admins/courses/index.html.erb +++ b/app/views/admins/courses/index.html.erb @@ -19,13 +19,14 @@
ID | +项目名称 | +公开 | +issue | +资源 | +版本库 | +PullRequest | +里程碑 | +成员 | +管理员 | +<%= sort_tag('创建时间', name: 'created_at', path: admins_projects_path) %> | +操作 | +
---|---|---|---|---|---|---|---|---|---|---|---|
<%= project.id %> | ++ <%= link_to(project.name, "/projects/#{project.id}", target: '_blank') %> + | +<%= project.is_public ? '√' : '' %> | +<%= project.issues.size %> | +<%= project.attachments.size %> | +<%= project.project_score.try(:changeset_num).to_i %> | +<%= project.project_score.try(:pull_request_num).to_i %> | +<%= project.versions.size %> | +<%= project.members.size %> | ++ <%= project.owner ? link_to(project.owner&.real_name, "/users/#{project.owner&.login}", target: '_blank') : "" %> + | +<%= project.created_on&.strftime('%Y-%m-%d %H:%M') %> | ++ <%= delete_link '删除', admins_project_path(project, element: ".project-item-#{project.id}"), class: 'delete-project-action' %> + | +