diff --git a/app/assets/javascripts/admins/laboratory_subjects/index.js b/app/assets/javascripts/admins/laboratory_subjects/index.js index a8b229d1f..b5fa3bffb 100644 --- a/app/assets/javascripts/admins/laboratory_subjects/index.js +++ b/app/assets/javascripts/admins/laboratory_subjects/index.js @@ -7,6 +7,7 @@ $(document).on('turbolinks:load', function() { $searchForm.find('.school-select').select2({ theme: 'bootstrap4', placeholder: '请选择创建者单位', + allowClear: true, minimumInputLength: 1, ajax: { delay: 500, diff --git a/app/assets/javascripts/cooperative/laboratory_shixuns/index.js b/app/assets/javascripts/cooperative/laboratory_shixuns/index.js new file mode 100644 index 000000000..ef6018a8a --- /dev/null +++ b/app/assets/javascripts/cooperative/laboratory_shixuns/index.js @@ -0,0 +1,60 @@ +$(document).on('turbolinks:load', function() { + if ($('body.cooperative-laboratory-shixuns-index-page').length > 0) { + var $searchForm = $('.laboratory-shixun-list-form .search-form'); + + $searchForm.find('select#tag_id').select2({ + placeholder: "请选择", + allowClear: true + }); + + // 上传图片 + $('.modal.cooperative-upload-file-modal').on('upload:success', function (e, data) { + var $imageElement = $('.shixun-image-' + data.source_id); + if($imageElement.length === 0) return; + $imageElement.attr('src', data.url); + $imageElement.show(); + $imageElement.next().html('重新上传'); + }); + + // 定义状态切换监听事件 + var defineStatusChangeFunc = function (doElement, undoElement, url, callback) { + $('.laboratory-shixun-list-container').on('click', doElement, function () { + var $doAction = $(this); + var $undoAction = $doAction.siblings(undoElement); + + var laboratoryShixunId = $doAction.data('id'); + customConfirm({ + content: '确认进行该操作吗?', + ok: function () { + $.ajax({ + url: '/cooperative/laboratory_shixuns/' + laboratoryShixunId + url, + method: 'POST', + dataType: 'json', + success: function () { + show_success_flash(); + $doAction.hide(); + $undoAction.show(); + if (callback && typeof callback === "function") { + callback(laboratoryShixunId, url); + } + } + }); + } + }); + }); + } + + // 首页展示与取消首页展示 + var homepageShowCallback = function (laboratoryShixunId, url) { + var $laboratoryShixunItem = $('.laboratory-shixun-list-container').find('.laboratory-shixun-item-' + laboratoryShixunId); + + if (url === '/homepage') { + $laboratoryShixunItem.find('.homepage-badge').show(); + } else { + $laboratoryShixunItem.find('.homepage-badge').hide(); + } + } + defineStatusChangeFunc('.homepage-show-action', '.homepage-hide-action', '/homepage', homepageShowCallback); + defineStatusChangeFunc('.homepage-hide-action', '.homepage-show-action', '/cancel_homepage', homepageShowCallback); + } +}) \ No newline at end of file diff --git a/app/assets/javascripts/cooperative/laboratory_subjects/index.js b/app/assets/javascripts/cooperative/laboratory_subjects/index.js new file mode 100644 index 000000000..639c5d5df --- /dev/null +++ b/app/assets/javascripts/cooperative/laboratory_subjects/index.js @@ -0,0 +1,83 @@ +$(document).on('turbolinks:load', function() { + if ($('body.cooperative-laboratory-subjects-index-page').length > 0) { + var $searchForm = $('.laboratory-subject-list-form .search-form'); + + // ************** 学校选择 ************* + $searchForm.find('.school-select').select2({ + theme: 'bootstrap4', + placeholder: '请选择创建者单位', + allowClear: true, + 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; + } + }); + + // 上传图片 + $('.modal.cooperative-upload-file-modal').on('upload:success', function (e, data) { + var $imageElement = $('.subject-image-' + data.source_id); + if($imageElement.length === 0) return; + $imageElement.attr('src', data.url); + $imageElement.show(); + $imageElement.next().html('重新上传'); + }); + + // 定义状态切换监听事件 + var defineStatusChangeFunc = function (doElement, undoElement, url, callback) { + $('.laboratory-subject-list-container').on('click', doElement, function () { + var $doAction = $(this); + var $undoAction = $doAction.siblings(undoElement); + + var laboratorySubjectId = $doAction.data('id'); + customConfirm({ + content: '确认进行该操作吗?', + ok: function () { + $.ajax({ + url: '/cooperative/laboratory_subjects/' + laboratorySubjectId + url, + method: 'POST', + dataType: 'json', + success: function () { + show_success_flash(); + $doAction.hide(); + $undoAction.show(); + if (callback && typeof callback === "function") { + callback(laboratorySubjectId, url); + } + } + }); + } + }); + }); + } + + // 首页展示与取消首页展示 + var homepageShowCallback = function (laboratoryShixunId, url) { + var $laboratoryShixunItem = $('.laboratory-subject-list-container').find('.laboratory-subject-item-' + laboratoryShixunId); + + if (url === '/homepage') { + $laboratoryShixunItem.find('.homepage-badge').show(); + } else { + $laboratoryShixunItem.find('.homepage-badge').hide(); + } + } + defineStatusChangeFunc('.homepage-show-action', '.homepage-hide-action', '/homepage', homepageShowCallback); + defineStatusChangeFunc('.homepage-hide-action', '.homepage-show-action', '/cancel_homepage', homepageShowCallback); + } +}) \ No newline at end of file diff --git a/app/assets/javascripts/cooperative/modals/cooperative-edit-subject-modal.js b/app/assets/javascripts/cooperative/modals/cooperative-edit-subject-modal.js new file mode 100644 index 000000000..414d04ed2 --- /dev/null +++ b/app/assets/javascripts/cooperative/modals/cooperative-edit-subject-modal.js @@ -0,0 +1,18 @@ +$(document).on('turbolinks:load', function () { + $('.cooperative-modal-container').on('show.bs.modal', '.modal.cooperative-edit-subject-modal', function () { + var $modal = $('.modal.cooperative-edit-subject-modal'); + var $form = $modal.find('form.cooperative-edit-subject-form'); + + $modal.on('click', '.submit-btn', function () { + $form.find('.error').html(''); + var url = $form.attr('action'); + + $.ajax({ + method: 'PATCH', + dataType: 'script', + url: url, + data: $form.serialize() + }); + }); + }) +}); diff --git a/app/assets/javascripts/cooperative/modals/upload-file-modal.js b/app/assets/javascripts/cooperative/modals/upload-file-modal.js index 835ccd383..302c534b6 100644 --- a/app/assets/javascripts/cooperative/modals/upload-file-modal.js +++ b/app/assets/javascripts/cooperative/modals/upload-file-modal.js @@ -42,7 +42,7 @@ $(document).on('turbolinks:load', function() { $.ajax({ method: 'POST', dataType: 'json', - url: '/cooperatives/files?' + formDataString, + url: '/cooperative/files?' + formDataString, data: new FormData($form[0]), processData: false, contentType: false, diff --git a/app/assets/stylesheets/admins/common.scss b/app/assets/stylesheets/admins/common.scss index aabe6085c..3437c3049 100644 --- a/app/assets/stylesheets/admins/common.scss +++ b/app/assets/stylesheets/admins/common.scss @@ -47,6 +47,12 @@ } } + .image-preview-container { + display: flex; + flex-direction: column; + align-items: center; + } + .action-container { & > .action { padding: 0 3px; diff --git a/app/assets/stylesheets/cooperative/common.scss b/app/assets/stylesheets/cooperative/common.scss index 488dd4caa..8e04e2328 100644 --- a/app/assets/stylesheets/cooperative/common.scss +++ b/app/assets/stylesheets/cooperative/common.scss @@ -47,6 +47,12 @@ } } + .image-preview-container { + display: flex; + flex-direction: column; + align-items: center; + } + .action-container { & > .action { padding: 0 3px; diff --git a/app/controllers/concerns/base/render_helper.rb b/app/controllers/concerns/base/render_helper.rb index e0aa49ac1..4d246c6cc 100644 --- a/app/controllers/concerns/base/render_helper.rb +++ b/app/controllers/concerns/base/render_helper.rb @@ -8,6 +8,7 @@ module Base::RenderHelper def render_forbidden render_by_format(html: -> { current_user&.business? ? render('shared/403') : redirect_to('/403') }, + js: -> { render_js_error(I18n.t('error.forbidden'), type: :notify) }, json: -> { render status: 403, json: { messages: I18n.t('error.forbidden') } } ) end diff --git a/app/controllers/cooperative/files_controller.rb b/app/controllers/cooperative/files_controller.rb index 56710a968..20c0b0d5f 100644 --- a/app/controllers/cooperative/files_controller.rb +++ b/app/controllers/cooperative/files_controller.rb @@ -1,5 +1,5 @@ class Cooperative::FilesController < Cooperative::BaseController - before_action :convert_file!, only: [:create] + before_action :convert_file!, :check_permission!, only: [:create] def create File.delete(file_path) if File.exist?(file_path) # 删除之前的文件 @@ -29,6 +29,22 @@ class Cooperative::FilesController < Cooperative::BaseController render_error(ex.message) end + def check_permission! + permission = + case params[:source_type].to_s + when '' then false + when 'Shixun' then + current_laboratory.laboratory_shixuns.exists?(ownership: true, shixun_id: params[:source_id]) + when 'Subject' then + current_laboratory.laboratory_subjects.exists?(ownership: true, subject_id: params[:source_id]) + else true + end + + return if permission + + render_forbidden + end + def file_path @_file_path ||= begin case params[:source_type].to_s diff --git a/app/controllers/cooperative/laboratory_shixuns_controller.rb b/app/controllers/cooperative/laboratory_shixuns_controller.rb new file mode 100644 index 000000000..e428416da --- /dev/null +++ b/app/controllers/cooperative/laboratory_shixuns_controller.rb @@ -0,0 +1,39 @@ +class Cooperative::LaboratoryShixunsController < Cooperative::BaseController + before_action :check_shixun_ownership!, only: [:edit, :update] + + helper_method :current_laboratory_shixun + + def index + laboratory_shixuns = Admins::LaboratoryShixunQuery.call(current_laboratory, params) + @laboratory_shixuns = paginate laboratory_shixuns.includes(shixun: %i[tag_repertoires user]) + end + + def edit + end + + def update + + end + + def homepage + current_laboratory_shixun.update!(homepage: true) + render_ok + end + + def cancel_homepage + current_laboratory_shixun.update!(homepage: false) + render_ok + end + + private + + def current_laboratory_shixun + @_current_laboratory_shixun ||= current_laboratory.laboratory_shixuns.find(params[:id]) + end + + def check_shixun_ownership! + return if current_laboratory_shixun.ownership? + + render_forbidden + end +end \ No newline at end of file diff --git a/app/controllers/cooperative/laboratory_subjects_controller.rb b/app/controllers/cooperative/laboratory_subjects_controller.rb new file mode 100644 index 000000000..77088c223 --- /dev/null +++ b/app/controllers/cooperative/laboratory_subjects_controller.rb @@ -0,0 +1,46 @@ +class Cooperative::LaboratorySubjectsController < Cooperative::BaseController + before_action :check_subject_ownership!, only: [:edit, :update] + + helper_method :current_laboratory_subject + + def index + laboratory_subjects = Admins::LaboratorySubjectQuery.call(current_laboratory, params) + + includes_tables = { subject: [:repertoire, :subject_level_system, user: {user_extension: :school}] } + @laboratory_subjects = paginate(laboratory_subjects.includes(includes_tables)) + end + + def edit + @laboratory_subject = current_laboratory_subject + end + + def update + current_laboratory_subject.subject.update!(update_params) + end + + def homepage + current_laboratory_subject.update!(homepage: true) + render_ok + end + + def cancel_homepage + current_laboratory_subject.update!(homepage: false) + render_ok + end + + private + + def current_laboratory_subject + @_current_laboratory_subject ||= current_laboratory.laboratory_subjects.find(params[:id]) + end + + def check_subject_ownership! + return if current_laboratory_subject.ownership? + + render_forbidden + end + + def update_params + params.require(:laboratory_subject).permit(:repertoire_id, :subject_level_system_id) + end +end \ No newline at end of file diff --git a/app/controllers/student_works_controller.rb b/app/controllers/student_works_controller.rb index 96307df8d..58406467d 100644 --- a/app/controllers/student_works_controller.rb +++ b/app/controllers/student_works_controller.rb @@ -526,11 +526,16 @@ class StudentWorksController < ApplicationController @echart_data = student_efficiency(@homework, @work) @myself_eff = @echart_data[:efficiency_list].find { |item| item.last == @user.id } @myself_consume = @echart_data[:consume_list].find { |item| item.last == @user.id } - filename_ = "#{@use&.student_id}_#{@use&.real_name}_#{@shixun&.name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}" filename = Base64.urlsafe_encode64(filename_.strip) stylesheets = %w(shixun_work/shixun_work.css shared/codemirror.css) - render pdf: 'shixun_work/shixun_work', filename: filename, stylesheets: stylesheets, disposition: 'inline', type:"pdf_attachment.content_type",stream:false + if params[:export].present? && params[:export] + normal_status(0,"正在下载中") + else + set_export_cookies + render pdf: 'shixun_work/shixun_work', filename: filename, stylesheets: stylesheets, disposition: 'inline', type:"pdf_attachment.content_type",stream:false + end + # render pdf: 'shixun_work/shixun_work', filename: filename, stylesheets: stylesheets, disposition: 'inline', type:"pdf_attachment.content_type",stream:false end # 作品调分 diff --git a/app/controllers/trustie_hacks_controller.rb b/app/controllers/trustie_hacks_controller.rb index 803809124..22a7a2976 100644 --- a/app/controllers/trustie_hacks_controller.rb +++ b/app/controllers/trustie_hacks_controller.rb @@ -1,5 +1,5 @@ class TrustieHacksController < ApplicationController - before_action :require_admin, :except => [:index] + before_action :require_admin, :except => [:index, :entry] before_action :require_login, :except => [:index] before_action :find_hackathon before_action :find_hack, :except => [:create, :index, :edit_hackathon, :update_hackathon] diff --git a/app/models/laboratory_subject.rb b/app/models/laboratory_subject.rb index fa5862712..e56cd94bd 100644 --- a/app/models/laboratory_subject.rb +++ b/app/models/laboratory_subject.rb @@ -1,4 +1,6 @@ class LaboratorySubject < ApplicationRecord belongs_to :laboratory belongs_to :subject + + delegate :repertoire_id, :subject_level_system_id, :student_count, to: :subject end \ No newline at end of file diff --git a/app/models/trustie_hack.rb b/app/models/trustie_hack.rb index b436007ca..7c2f3264b 100644 --- a/app/models/trustie_hack.rb +++ b/app/models/trustie_hack.rb @@ -1,4 +1,5 @@ class TrustieHack < ApplicationRecord + validates_length_of :description, maximum: 500 has_many :hack_users, :dependent => :destroy belongs_to :trustie_hackathon, counter_cache: true diff --git a/app/models/trustie_hackathon.rb b/app/models/trustie_hackathon.rb index 7269e7856..65275099d 100644 --- a/app/models/trustie_hackathon.rb +++ b/app/models/trustie_hackathon.rb @@ -1,5 +1,5 @@ class TrustieHackathon < ApplicationRecord - + validates_length_of :description, maximum: 500 has_many :trustie_hacks, :dependent => :destroy end diff --git a/app/views/admins/laboratory_shixuns/shared/_list.html.erb b/app/views/admins/laboratory_shixuns/shared/_list.html.erb index 8463e2d49..e1244c472 100644 --- a/app/views/admins/laboratory_shixuns/shared/_list.html.erb +++ b/app/views/admins/laboratory_shixuns/shared/_list.html.erb @@ -7,8 +7,8 @@ 封面 创建者 状态 - 执行时间 - 操作 + 执行时间 + 操作 diff --git a/app/views/cooperative/laboratory_shixuns/index.html.erb b/app/views/cooperative/laboratory_shixuns/index.html.erb new file mode 100644 index 000000000..85781a85a --- /dev/null +++ b/app/views/cooperative/laboratory_shixuns/index.html.erb @@ -0,0 +1,42 @@ +<% define_breadcrumbs do %> + <% add_breadcrumb('实训项目') %> +<% end %> + + +
+ <%= form_tag(cooperative_laboratory_shixuns_path, method: :get, class: 'form-inline search-form', remote: true) do %> +
+ + <% status_options = [['全部', ''], ['编辑中', 0], ['审核中', 1], ['已发布', 2], ['已关闭', 3]] %> + <%= select_tag(:status, options_for_select(status_options), class: 'form-control') %> +
+ +
+ + <%= select_tag(:tag_id, options_for_select(MirrorRepository.pluck(:type_name,:id).unshift(['']), params[:tag_id]), class: 'form-control') %> +
+ + <%= text_field_tag(:keyword, params[:keyword], class: 'form-control col-12 col-md-2 mr-3', placeholder: '创建者/实训名称检索') %> + +
+ <%= hidden_field_tag(:homepage, false, id:'') %> + <%= check_box_tag(:homepage, true, params[:homepage].to_s == 'true', class: 'form-check-input') %> + +
+ +
+ <%= hidden_field_tag(:ownership, false, id:'') %> + <%= check_box_tag(:ownership, true, params[:ownership].to_s == 'true', class: 'form-check-input') %> + +
+ + <%= submit_tag('搜索', class: 'btn btn-primary ml-3', 'data-disable-with': '搜索中...') %> + <%= link_to '清空', cooperative_laboratory_shixuns_path, class: 'btn btn-default','data-disable-with': '清空中...' %> + <% end %> +
+ +
+ <%= render partial: 'cooperative/laboratory_shixuns/shared/list', locals: { laboratory_shixuns: @laboratory_shixuns } %> +
+ +<%= render(partial: 'cooperative/shared/modal/upload_file_modal', locals: { title: '上传封面', accept: 'image/*' }) %> \ No newline at end of file diff --git a/app/views/cooperative/laboratory_shixuns/index.js.erb b/app/views/cooperative/laboratory_shixuns/index.js.erb new file mode 100644 index 000000000..927609f6c --- /dev/null +++ b/app/views/cooperative/laboratory_shixuns/index.js.erb @@ -0,0 +1 @@ +$('.laboratory-shixun-list-container').html("<%= j(render partial: 'cooperative/laboratory_shixuns/shared/list', locals: { laboratory_shixuns: @laboratory_shixuns }) %>"); \ No newline at end of file diff --git a/app/views/cooperative/laboratory_shixuns/shared/_list.html.erb b/app/views/cooperative/laboratory_shixuns/shared/_list.html.erb new file mode 100644 index 000000000..1501e9f3b --- /dev/null +++ b/app/views/cooperative/laboratory_shixuns/shared/_list.html.erb @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + <% if laboratory_shixuns.present? %> + <% laboratory_shixuns.each do |laboratory_shixun| %> + + <%= render partial: 'cooperative/laboratory_shixuns/shared/td', locals: { laboratory_shixun: laboratory_shixun } %> + + <% end %> + <% else %> + <%= render 'cooperative/shared/no_data_for_table' %> + <% end %> + +
实训名称技术平台技术体系封面创建者状态执行时间操作
+ +<%= render partial: 'cooperative/shared/paginate', locals: { objects: laboratory_shixuns } %> \ No newline at end of file diff --git a/app/views/cooperative/laboratory_shixuns/shared/_td.html.erb b/app/views/cooperative/laboratory_shixuns/shared/_td.html.erb new file mode 100644 index 000000000..e7f87057d --- /dev/null +++ b/app/views/cooperative/laboratory_shixuns/shared/_td.html.erb @@ -0,0 +1,32 @@ +<%- shixun = laboratory_shixun.shixun -%> + + + <%= link_to "/shixuns/#{shixun.identifier}", target: '_blank' do %> + <%= shixun.name %> + 首页 + 自建 + <% end %> + +<%= shixun.shixun_main_name %> + + <% shixun.tag_repertoires.each do |tag| %> + <%= tag.name %> + <% end %> + + + <% imageExists = Util::FileManage.exists?(shixun) %> + <%= image_tag(imageExists ? Util::FileManage.source_disk_file_url(shixun) : '', height: 40, class: "preview-image shixun-image-#{shixun.id}", data: { toggle: 'tooltip', title: '点击预览' }, style: imageExists ? '' : 'display:none') %> + <% if laboratory_shixun.ownership? %> + <%= javascript_void_link imageExists ? '重新上传' : '上传图片', class: 'action upload-shixun-image-action', data: { source_id: shixun.id, source_type: 'Shixun', toggle: 'modal', target: '.cooperative-upload-file-modal' } %> + <% end %> + +<%= link_to shixun.user&.real_name, "/users/#{shixun.user&.login}", target:'_blank' %> +<%= t("shixun.status.#{shixun.status}") %> +<%= shixun.excute_time %> + + <% if laboratory_shixun.ownership? %> + <%#= link_to('修改', cooperative_laboratory_subjects_path(laboratory_shixun)) %> + <% end %> + <%= javascript_void_link('首页展示', class: 'action homepage-show-action', data: { id: laboratory_shixun.id }, style: laboratory_shixun.homepage? ? 'display:none' : '') %> + <%= javascript_void_link('取消首页展示', class: 'action homepage-hide-action', data: { id: laboratory_shixun.id }, style: laboratory_shixun.homepage? ? '' : 'display:none') %> + \ No newline at end of file diff --git a/app/views/cooperative/laboratory_subjects/edit.js.erb b/app/views/cooperative/laboratory_subjects/edit.js.erb new file mode 100644 index 000000000..146879309 --- /dev/null +++ b/app/views/cooperative/laboratory_subjects/edit.js.erb @@ -0,0 +1,2 @@ +$('.cooperative-modal-container').html("<%= j( render partial: 'cooperative/laboratory_subjects/shared/edit_subject_modal', locals: { laboratory_subject: @laboratory_subject } ) %>"); +$('.modal.cooperative-edit-subject-modal').modal('show'); \ No newline at end of file diff --git a/app/views/cooperative/laboratory_subjects/index.html.erb b/app/views/cooperative/laboratory_subjects/index.html.erb new file mode 100644 index 000000000..3ed30b4f2 --- /dev/null +++ b/app/views/cooperative/laboratory_subjects/index.html.erb @@ -0,0 +1,42 @@ +<% define_breadcrumbs do %> + <% add_breadcrumb('实践课程') %> +<% end %> + + +
+ <%= form_tag(cooperative_laboratory_subjects_path, method: :get, class: 'form-inline search-form', remote: true) do %> +
+ + <% status_options = [['全部', ''], ['编辑中', 0], ['审核中', 1], ['已发布', 2]] %> + <%= select_tag(:status, options_for_select(status_options), class: 'form-control') %> +
+ +
+ + <%= select_tag :school_id, options_for_select([''], params[:school_id]), class: 'form-control school-select flex-1' %> +
+ + <%= text_field_tag(:keyword, params[:keyword], class: 'form-control col-12 col-md-2 mr-3', placeholder: '创建者/课程名称检索') %> + +
+ <%= hidden_field_tag(:homepage, false, id:'') %> + <%= check_box_tag(:homepage, true, params[:homepage].to_s == 'true', class: 'form-check-input') %> + +
+ +
+ <%= hidden_field_tag(:ownership, false, id:'') %> + <%= check_box_tag(:ownership, true, params[:ownership].to_s == 'true', class: 'form-check-input') %> + +
+ + <%= submit_tag('搜索', class: 'btn btn-primary ml-3', 'data-disable-with': '搜索中...') %> + <%= link_to '清空', cooperative_laboratory_subjects_path(current_laboratory), class: 'btn btn-default','data-disable-with': '清空中...' %> + <% end %> +
+ +
+ <%= render partial: 'cooperative/laboratory_subjects/shared/list', locals: { laboratory_subjects: @laboratory_subjects } %> +
+ +<%= render(partial: 'cooperative/shared/modal/upload_file_modal', locals: { title: '上传封面', accept: 'image/*' }) %> \ No newline at end of file diff --git a/app/views/cooperative/laboratory_subjects/index.js.erb b/app/views/cooperative/laboratory_subjects/index.js.erb new file mode 100644 index 000000000..557182485 --- /dev/null +++ b/app/views/cooperative/laboratory_subjects/index.js.erb @@ -0,0 +1 @@ +$('.laboratory-subject-list-container').html("<%= j(render partial: 'cooperative/laboratory_subjects/shared/list', locals: { laboratory_subjects: @laboratory_subjects }) %>"); \ No newline at end of file diff --git a/app/views/cooperative/laboratory_subjects/shared/_edit_subject_modal.html.erb b/app/views/cooperative/laboratory_subjects/shared/_edit_subject_modal.html.erb new file mode 100644 index 000000000..02ff4acbc --- /dev/null +++ b/app/views/cooperative/laboratory_subjects/shared/_edit_subject_modal.html.erb @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/app/views/cooperative/laboratory_subjects/shared/_list.html.erb b/app/views/cooperative/laboratory_subjects/shared/_list.html.erb new file mode 100644 index 000000000..2b972a959 --- /dev/null +++ b/app/views/cooperative/laboratory_subjects/shared/_list.html.erb @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + <% if laboratory_subjects.present? %> + <% laboratory_subjects.each do |laboratory_subject| %> + + <%= render partial: 'cooperative/laboratory_subjects/shared/td', locals: { laboratory_subject: laboratory_subject } %> + + <% end %> + <% else %> + <%= render 'cooperative/shared/no_data_for_table' %> + <% end %> + +
课程名称技术体系等级体系封面创建者单位状态操作
+ +<%= render partial: 'cooperative/shared/paginate', locals: { objects: laboratory_subjects } %> \ No newline at end of file diff --git a/app/views/cooperative/laboratory_subjects/shared/_td.html.erb b/app/views/cooperative/laboratory_subjects/shared/_td.html.erb new file mode 100644 index 000000000..301bbd6a7 --- /dev/null +++ b/app/views/cooperative/laboratory_subjects/shared/_td.html.erb @@ -0,0 +1,28 @@ +<%- subject = laboratory_subject.subject -%> + + + <%= link_to(subject.name, "/paths/#{subject.id}", target: '_blank') %> + 首页 + 自建 + +<%= display_text subject.repertoire&.name %> +<%= display_text subject.subject_level_system&.name %> + + <% image_exists = Util::FileManage.exists?(subject) %> + <%= image_tag(image_exists ? Util::FileManage.source_disk_file_url(subject) : '', height: 40, class: "w-100 preview-image subject-image-#{subject.id}", style: image_exists ? '' : 'display:none') %> + <% if laboratory_subject.ownership? %> + <%= javascript_void_link image_exists ? '重新上传' : '上传图片', class: 'action upload-subject-image-action', data: { source_id: subject.id, source_type: 'Subject', toggle: 'modal', target: '.cooperative-upload-file-modal' } %> + <% end %> + +<%= link_to subject.user&.real_name, "/users/#{subject.user&.login}", target:'_blank' %> +<%= subject.user.school_name %> +<%= display_subject_status(subject) %> + + + <% if laboratory_subject.ownership? %> + <%= link_to('修改', edit_cooperative_laboratory_subject_path(laboratory_subject), remote: true) %> + <% end %> + + <%= javascript_void_link('首页展示', class: 'action homepage-show-action', data: { id: laboratory_subject.id }, style: laboratory_subject.homepage? ? 'display:none' : '') %> + <%= javascript_void_link('取消首页展示', class: 'action homepage-hide-action', data: { id: laboratory_subject.id }, style: laboratory_subject.homepage? ? '' : 'display:none') %> + \ No newline at end of file diff --git a/app/views/cooperative/laboratory_subjects/update.js.erb b/app/views/cooperative/laboratory_subjects/update.js.erb new file mode 100644 index 000000000..3b98e6e97 --- /dev/null +++ b/app/views/cooperative/laboratory_subjects/update.js.erb @@ -0,0 +1,3 @@ +$('.laboratory-subject-list-container .laboratory-subject-item-<%= current_laboratory_subject.id %>').html("<%= j(render partial: 'cooperative/laboratory_subjects/shared/td', locals: { laboratory_subject: current_laboratory_subject }) %>"); +$('.cooperative-modal-container .modal.cooperative-edit-subject-modal').modal('hide'); +show_success_flash(); diff --git a/app/views/cooperative/shared/_sidebar.html.erb b/app/views/cooperative/shared/_sidebar.html.erb index 40a6b2de4..81ff12b0a 100644 --- a/app/views/cooperative/shared/_sidebar.html.erb +++ b/app/views/cooperative/shared/_sidebar.html.erb @@ -17,6 +17,8 @@
  • <%= sidebar_item(edit_cooperative_laboratory_setting_path, '网站设置', icon: 'cogs', controller: 'cooperative-laboratory_settings') %>
  • <%= sidebar_item(cooperative_carousels_path, '轮播图设置', icon: 'image', controller: 'cooperative-carousels') %>
  • <%= sidebar_item(cooperative_laboratory_users_path, '管理员列表', icon: 'user', controller: 'cooperative-laboratory_users') %>
  • +
  • <%= sidebar_item(cooperative_laboratory_shixuns_path, '实训项目', icon: 'window-restore', controller: 'cooperative-laboratory_shixuns') %>
  • +
  • <%= sidebar_item(cooperative_laboratory_subjects_path, '实践课程', icon: 'th-list', controller: 'cooperative-laboratory_subjects') %>
  • <%= sidebar_item('/', '返回主页', icon: 'sign-out', controller: 'root') %>
  • \ No newline at end of file diff --git a/app/views/cooperative/shared/modal/_upload_file_modal.html.erb b/app/views/cooperative/shared/modal/_upload_file_modal.html.erb index 8cd22a362..587002403 100644 --- a/app/views/cooperative/shared/modal/_upload_file_modal.html.erb +++ b/app/views/cooperative/shared/modal/_upload_file_modal.html.erb @@ -11,12 +11,13 @@
    <%= hidden_field_tag(:source_type, nil) %> <%= hidden_field_tag(:source_id, nil) %> + <%= hidden_field_tag(:suffix, nil) %>
    文件
    - +
    diff --git a/config/routes.rb b/config/routes.rb index 7ceb28128..e111ed7ba 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1121,12 +1121,25 @@ Rails.application.routes.draw do namespace :cooperative do # get '/', to: 'dashboards#show' get '/', to: 'laboratory_settings#edit' + resources :files, only: [:create] resources :users, only: [:index] resources :laboratory_users, only: [:index, :create, :destroy] resource :laboratory_setting, only: [:edit, :update] resources :carousels, only: [:index, :create, :update, :destroy] do post :drag, on: :collection end + resources :laboratory_shixuns, only: [:index, :edit, :update] do + member do + post :homepage + post :cancel_homepage + end + end + resources :laboratory_subjects, only: [:index, :edit, :update] do + member do + post :homepage + post :cancel_homepage + end + end end resources :colleges, only: [] do diff --git a/db/migrate/20191108070703_modify_descriotion_limit_for_hacks.rb b/db/migrate/20191108070703_modify_descriotion_limit_for_hacks.rb new file mode 100644 index 000000000..9168dbd2a --- /dev/null +++ b/db/migrate/20191108070703_modify_descriotion_limit_for_hacks.rb @@ -0,0 +1,6 @@ +class ModifyDescriotionLimitForHacks < ActiveRecord::Migration[5.2] + def change + change_column :trustie_hackathons, :description, :text + change_column :trustie_hacks, :description, :text + end +end diff --git a/public/assets/.sprockets-manifest-4627fa5586ef7fed55ca286af7c028e9.json b/public/assets/.sprockets-manifest-4627fa5586ef7fed55ca286af7c028e9.json index ddac4b0e6..7e2761c2d 100644 --- a/public/assets/.sprockets-manifest-4627fa5586ef7fed55ca286af7c028e9.json +++ b/public/assets/.sprockets-manifest-4627fa5586ef7fed55ca286af7c028e9.json @@ -1 +1 @@ -{"files":{"admin-cd9ca8bacc973ce2dbace30c97f6c40bc08e2c2ee44972f668e738e1902c0121.js":{"logical_path":"admin.js","mtime":"2019-09-11T16:20:07+08:00","size":4350881,"digest":"cd9ca8bacc973ce2dbace30c97f6c40bc08e2c2ee44972f668e738e1902c0121","integrity":"sha256-zZyousyXPOLbrOMMl/bEC8COLC7kSXL2aOc44ZAsASE="},"admin-a1b3356efe50ff4717cf22475639b5333c5354ba03fd107c9b7a8d4ae76f47aa.css":{"logical_path":"admin.css","mtime":"2019-09-11T16:20:07+08:00","size":773445,"digest":"a1b3356efe50ff4717cf22475639b5333c5354ba03fd107c9b7a8d4ae76f47aa","integrity":"sha256-obM1bv5Q/0cXzyJHVjm1MzxTVLoD/RB8m3qNSudvR6o="},"font-awesome/fontawesome-webfont-7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979.eot":{"logical_path":"font-awesome/fontawesome-webfont.eot","mtime":"2019-08-14T17:22:43+08:00","size":165742,"digest":"7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979","integrity":"sha256-e/yrbbmdXPvxcFygU23ceFhUMsxfpBu9etDwCQM7KXk="},"font-awesome/fontawesome-webfont-2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe.woff2":{"logical_path":"font-awesome/fontawesome-webfont.woff2","mtime":"2019-08-14T17:22:43+08:00","size":77160,"digest":"2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe","integrity":"sha256-Kt78vAQefRj88tQXh53FoJmXqmTWdbejxLbOM9oT8/4="},"font-awesome/fontawesome-webfont-ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07.woff":{"logical_path":"font-awesome/fontawesome-webfont.woff","mtime":"2019-08-14T17:22:43+08:00","size":98024,"digest":"ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07","integrity":"sha256-ugxZ3rVFD1y0Gz+TYJ7i0NmVQVh33foiPoqKdTNHTwc="},"font-awesome/fontawesome-webfont-aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8.ttf":{"logical_path":"font-awesome/fontawesome-webfont.ttf","mtime":"2019-08-14T17:22:43+08:00","size":165548,"digest":"aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8","integrity":"sha256-qljzPyOaD7AvXHpsRcBD16msmgkzNYBmlOzW1O3A1qg="},"font-awesome/fontawesome-webfont-ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4.svg":{"logical_path":"font-awesome/fontawesome-webfont.svg","mtime":"2019-08-14T17:22:43+08:00","size":444379,"digest":"ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4","integrity":"sha256-rWFXkmwWIrpOHQPUePFUE2hSS/xG9R5C/g2UX37zI+Q="},"college-18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287.js":{"logical_path":"college.js","mtime":"2019-11-06T11:34:24+08:00","size":3352744,"digest":"18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287","integrity":"sha256-GPXoQAMxY06JijWswhh4FcCWwl4Kt0q6NBrpFhZs0oc="},"college-944d4273f62c7538368b9017fdd3387b5e3bea31a87873770eb231324546d4d9.css":{"logical_path":"college.css","mtime":"2019-09-11T16:20:07+08:00","size":546841,"digest":"944d4273f62c7538368b9017fdd3387b5e3bea31a87873770eb231324546d4d9","integrity":"sha256-lE1Cc/YsdTg2i5AX/dM4e1476jGoeHN3DrIxMkVG1Nk="},"logo-7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423.png":{"logical_path":"logo.png","mtime":"2019-09-03T08:55:53+08:00","size":2816,"digest":"7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423","integrity":"sha256-f/ESVocJv5f5iY/ockm3qPIA/x9I1TfYWvhyFfGHBCM="},"application-9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb.js":{"logical_path":"application.js","mtime":"2019-11-06T11:34:24+08:00","size":600706,"digest":"9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb","integrity":"sha256-nPvD15JZmh0N5ce4QgnhwrLmAzbw8B4Z8FgWY5GHCPs="},"application-5eb87c6e13676d0183317debce17fade27e68c4acee28c419438da15d53c94f2.css":{"logical_path":"application.css","mtime":"2019-09-11T16:20:07+08:00","size":1844002,"digest":"5eb87c6e13676d0183317debce17fade27e68c4acee28c419438da15d53c94f2","integrity":"sha256-Xrh8bhNnbQGDMX3rzhf63ifmjErO4oxBlDjaFdU8lPI="},"admin-c9e5ebe6191548550e27514196ea125cfbb402820ec125a0c9acf99d2d378fe4.js":{"logical_path":"admin.js","mtime":"2019-09-21T15:28:08+08:00","size":4382031,"digest":"c9e5ebe6191548550e27514196ea125cfbb402820ec125a0c9acf99d2d378fe4","integrity":"sha256-yeXr5hkVSFUOJ1FBluoSXPu0AoIOwSWgyaz5nS03j+Q="},"admin-59c59f8cae8bef4a8359286c985458110c9d03ea121516595c988943f4717c38.css":{"logical_path":"admin.css","mtime":"2019-09-21T14:49:04+08:00","size":840093,"digest":"59c59f8cae8bef4a8359286c985458110c9d03ea121516595c988943f4717c38","integrity":"sha256-WcWfjK6L70qDWShsmFRYEQydA+oSFRZZXJiJQ/RxfDg="},"college-38f953d6ba5b85d3fab63cb3c2bbf0d057ccc6454d07cfaafac3b06da37b8437.css":{"logical_path":"college.css","mtime":"2019-09-16T13:56:09+08:00","size":579109,"digest":"38f953d6ba5b85d3fab63cb3c2bbf0d057ccc6454d07cfaafac3b06da37b8437","integrity":"sha256-OPlT1rpbhdP6tjyzwrvw0FfMxkVNB8+q+sOwbaN7hDc="},"application-646b1158a4e8c1f13e684d6fe9025abc75f8d3ba5256e440802c0398223374f3.css":{"logical_path":"application.css","mtime":"2019-09-21T14:49:04+08:00","size":1988767,"digest":"646b1158a4e8c1f13e684d6fe9025abc75f8d3ba5256e440802c0398223374f3","integrity":"sha256-ZGsRWKTowfE+aE1v6QJavHX407pSVuRAgCwDmCIzdPM="},"admin-a47e37c0ec7cf5f22380249776d1e82d65b6b6aa272ed7389185aa200fa40751.js":{"logical_path":"admin.js","mtime":"2019-09-25T15:33:05+08:00","size":4383107,"digest":"a47e37c0ec7cf5f22380249776d1e82d65b6b6aa272ed7389185aa200fa40751","integrity":"sha256-pH43wOx89fIjgCSXdtHoLWW2tqonLtc4kYWqIA+kB1E="},"admin-432c4eac09b036c57ff1e88d902b8aa7df81164e4b419bac557cf1366c1d3ad9.js":{"logical_path":"admin.js","mtime":"2019-09-25T15:35:20+08:00","size":4383103,"digest":"432c4eac09b036c57ff1e88d902b8aa7df81164e4b419bac557cf1366c1d3ad9","integrity":"sha256-QyxOrAmwNsV/8eiNkCuKp9+BFk5LQZusVXzxNmwdOtk="},"admin-978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a.js":{"logical_path":"admin.js","mtime":"2019-09-30T14:43:41+08:00","size":4387200,"digest":"978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a","integrity":"sha256-l45c5gf3fCaBShdPSA2nmsJGwiAYaO+EZUqgO7Zye1o="},"admin-896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7.css":{"logical_path":"admin.css","mtime":"2019-09-30T14:43:41+08:00","size":842269,"digest":"896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7","integrity":"sha256-iWKB9HMXIrDAhNuxryHQ80pbwULViv9Xs5GGSrcd3Kc="},"application-97f313e9bb7d25476649f7d7215959cf421480fd0a3785d1956953bf94a1e8bd.css":{"logical_path":"application.css","mtime":"2019-09-30T14:43:41+08:00","size":1993118,"digest":"97f313e9bb7d25476649f7d7215959cf421480fd0a3785d1956953bf94a1e8bd","integrity":"sha256-l/MT6bt9JUdmSffXIVlZz0IUgP0KN4XRlWlTv5Sh6L0="},"admin-2cdb23442fa735025385b88f2900df04fef38b61530041a6dbe375ef0f0ae888.js":{"logical_path":"admin.js","mtime":"2019-10-11T14:38:33+08:00","size":4394616,"digest":"2cdb23442fa735025385b88f2900df04fef38b61530041a6dbe375ef0f0ae888","integrity":"sha256-LNsjRC+nNQJThbiPKQDfBP7zi2FTAEGm2+N17w8K6Ig="},"admin-2c2854b9a02158ded5a809aaf7144a8630b10354ab4e56fecc4dffcc713796cc.css":{"logical_path":"admin.css","mtime":"2019-10-10T17:12:05+08:00","size":846514,"digest":"2c2854b9a02158ded5a809aaf7144a8630b10354ab4e56fecc4dffcc713796cc","integrity":"sha256-LChUuaAhWN7VqAmq9xRKhjCxA1SrTlb+zE3/zHE3lsw="},"application-50059ae929866043b47015128702fcfba53d32a2df148e64e1d961c10651c6af.css":{"logical_path":"application.css","mtime":"2019-10-10T17:12:05+08:00","size":2001607,"digest":"50059ae929866043b47015128702fcfba53d32a2df148e64e1d961c10651c6af","integrity":"sha256-UAWa6SmGYEO0cBUShwL8+6U9MqLfFI5k4dlhwQZRxq8="},"admin-992cde09b6d17f00a49576ae2d9f1ced127244ba401ef5b7d677cab9741688d2.js":{"logical_path":"admin.js","mtime":"2019-10-16T16:11:32+08:00","size":4394790,"digest":"992cde09b6d17f00a49576ae2d9f1ced127244ba401ef5b7d677cab9741688d2","integrity":"sha256-mSzeCbbRfwCklXauLZ8c7RJyRLpAHvW31nfKuXQWiNI="},"admin-84f2a7791e275d6f820514370b3f968176b994b9dd7b8c3ba8bf48336b03f257.css":{"logical_path":"admin.css","mtime":"2019-10-16T19:25:40+08:00","size":846676,"digest":"84f2a7791e275d6f820514370b3f968176b994b9dd7b8c3ba8bf48336b03f257","integrity":"sha256-hPKneR4nXW+CBRQ3Cz+WgXa5lLnde4w7qL9IM2sD8lc="},"application-ef6bab84852baaf69a91fe6af875b6e1b118c55b4c7d165665c488fac80c4997.css":{"logical_path":"application.css","mtime":"2019-10-16T19:25:40+08:00","size":2001931,"digest":"ef6bab84852baaf69a91fe6af875b6e1b118c55b4c7d165665c488fac80c4997","integrity":"sha256-72urhIUrqvaakf5q+HW24bEYxVtMfRZWZcSI+sgMSZc="},"admin-c99030d305662f740aa84b6c925a1adbbaadaa07fd74e2655e64d44b4b97fc4a.js":{"logical_path":"admin.js","mtime":"2019-10-17T09:44:58+08:00","size":4394897,"digest":"c99030d305662f740aa84b6c925a1adbbaadaa07fd74e2655e64d44b4b97fc4a","integrity":"sha256-yZAw0wVmL3QKqEtskloa27qtqgf9dOJlXmTUS0uX/Eo="},"admin-534bde871d67f4d6fc8da611917d78be4066fc7593ba53ee92aa17068a199d6d.css":{"logical_path":"admin.css","mtime":"2019-10-17T10:22:41+08:00","size":846699,"digest":"534bde871d67f4d6fc8da611917d78be4066fc7593ba53ee92aa17068a199d6d","integrity":"sha256-U0vehx1n9Nb8jaYRkX14vkBm/HWTulPukqoXBooZnW0="},"cooperative-04cd6a60d41220d38ee45ce40b1d004e1d0bcd87c132fb1a7bab6144c1deb8d7.js":{"logical_path":"cooperative.js","mtime":"2019-10-17T10:17:56+08:00","size":4330072,"digest":"04cd6a60d41220d38ee45ce40b1d004e1d0bcd87c132fb1a7bab6144c1deb8d7","integrity":"sha256-BM1qYNQSINOO5FzkCx0ATh0LzYfBMvsae6thRMHeuNc="},"cooperative-a345bbfd8e38b70c9285ecc1747012ffcde429187983e2aea5657abb56b9b4f3.css":{"logical_path":"cooperative.css","mtime":"2019-10-17T10:21:41+08:00","size":830628,"digest":"a345bbfd8e38b70c9285ecc1747012ffcde429187983e2aea5657abb56b9b4f3","integrity":"sha256-o0W7/Y44twyShezBdHAS/83kKRh5g+KupWV6u1a5tPM="},"application-0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8.css":{"logical_path":"application.css","mtime":"2019-09-03T08:55:53+08:00","size":442932,"digest":"0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8","integrity":"sha256-DkF0eNVvQkZ+hXzRhrKcu8DWx8boXIpvQvOaxhiUPeg="},"cooperative-149f47b8675d60a8014ccff50f00f932ff69e2be286ffb74343bc4a3effb135b.js":{"logical_path":"cooperative.js","mtime":"2019-10-17T14:03:03+08:00","size":4338033,"digest":"149f47b8675d60a8014ccff50f00f932ff69e2be286ffb74343bc4a3effb135b","integrity":"sha256-FJ9HuGddYKgBTM/1DwD5Mv9p4r4ob/t0NDvEo+/7E1s="},"cooperative-6273b766d6ef11dd56174d868bab55e7f17af17546c888d2ba0dd0a6bcda76c8.css":{"logical_path":"cooperative.css","mtime":"2019-10-17T11:13:07+08:00","size":832914,"digest":"6273b766d6ef11dd56174d868bab55e7f17af17546c888d2ba0dd0a6bcda76c8","integrity":"sha256-YnO3ZtbvEd1WF02Gi6tV5/F68XVGyIjSug3Qprzadsg="},"admin-82f66cc80b5649c6530a562567f28fe8d05f7bc3b8221e0695b2216255c52ba6.js":{"logical_path":"admin.js","mtime":"2019-10-21T13:51:43+08:00","size":4397012,"digest":"82f66cc80b5649c6530a562567f28fe8d05f7bc3b8221e0695b2216255c52ba6","integrity":"sha256-gvZsyAtWScZTClYlZ/KP6NBfe8O4Ih4GlbIhYlXFK6Y="},"admin-1b5728d94f6bccfbcef452a760d94c3b6f31966bc65d7f89be077fc2ea512bec.js":{"logical_path":"admin.js","mtime":"2019-10-21T16:41:06+08:00","size":4397437,"digest":"1b5728d94f6bccfbcef452a760d94c3b6f31966bc65d7f89be077fc2ea512bec","integrity":"sha256-G1co2U9rzPvO9FKnYNlMO28xlmvGXX+Jvgd/wupRK+w="},"admin-c8c127fefa5eca98bca19832c246619318164e8f242635c07033e2423cc18a6f.js":{"logical_path":"admin.js","mtime":"2019-10-22T09:53:29+08:00","size":4408150,"digest":"c8c127fefa5eca98bca19832c246619318164e8f242635c07033e2423cc18a6f","integrity":"sha256-yMEn/vpeypi8oZgywkZhkxgWTo8kJjXAcDPiQjzBim8="},"admin-60d200c1fcdf61a60537d29ccf4479c6b1e5e904208870a63b8ee677c96b347e.css":{"logical_path":"admin.css","mtime":"2019-10-22T09:43:20+08:00","size":851150,"digest":"60d200c1fcdf61a60537d29ccf4479c6b1e5e904208870a63b8ee677c96b347e","integrity":"sha256-YNIAwfzfYaYFN9Kcz0R5xrHl6QQgiHCmO47md8lrNH4="},"cooperative-9fb7ac4ad44081fafd5ad2a3a1bfb7f4329ac96f28bc6446d1ff52b1e2e71286.js":{"logical_path":"cooperative.js","mtime":"2019-10-22T09:55:26+08:00","size":4338142,"digest":"9fb7ac4ad44081fafd5ad2a3a1bfb7f4329ac96f28bc6446d1ff52b1e2e71286","integrity":"sha256-n7esStRAgfr9WtKjob+39DKayW8ovGRG0f9SseLnEoY="},"admin-a11066081d60365ddf25d5867560d1ccdd3197dbe82a5b6e969cc940e3429ff1.js":{"logical_path":"admin.js","mtime":"2019-10-24T14:16:30+08:00","size":4524252,"digest":"a11066081d60365ddf25d5867560d1ccdd3197dbe82a5b6e969cc940e3429ff1","integrity":"sha256-oRBmCB1gNl3fJdWGdWDRzN0xl9voKltulpzJQONCn/E="},"admin-7ce3dd717f7d12fcbc64caf14200230a1e68db439be0ba1879077599ff2c32c6.css":{"logical_path":"admin.css","mtime":"2019-10-24T10:10:08+08:00","size":852772,"digest":"7ce3dd717f7d12fcbc64caf14200230a1e68db439be0ba1879077599ff2c32c6","integrity":"sha256-fOPdcX99Evy8ZMrxQgAjCh5o20Ob4LoYeQd1mf8sMsY="},"college-93904c65d52c125aec0a463b9fd98bedda0018b78707f806be22685cca5d3747.css":{"logical_path":"college.css","mtime":"2019-10-24T10:10:08+08:00","size":579546,"digest":"93904c65d52c125aec0a463b9fd98bedda0018b78707f806be22685cca5d3747","integrity":"sha256-k5BMZdUsElrsCkY7n9mL7doAGLeHB/gGviJoXMpdN0c="},"cooperative-84c79d26a36aff5b496551b6d21b1bfb726b1bbc4153435a366115e96c204e06.js":{"logical_path":"cooperative.js","mtime":"2019-10-24T14:17:15+08:00","size":4338225,"digest":"84c79d26a36aff5b496551b6d21b1bfb726b1bbc4153435a366115e96c204e06","integrity":"sha256-hMedJqNq/1tJZVG20hsb+3JrG7xBU0NaNmEV6WwgTgY="},"cooperative-10a9ee5177e196572573ccea460e133c748072e223fdb473d05ee72c991fbbe3.css":{"logical_path":"cooperative.css","mtime":"2019-10-24T10:10:08+08:00","size":833351,"digest":"10a9ee5177e196572573ccea460e133c748072e223fdb473d05ee72c991fbbe3","integrity":"sha256-EKnuUXfhllclc8zqRg4TPHSAcuIj/bRz0F7nLJkfu+M="},"admin-441d8f3722e5f73e5748aaeb6f517101474cb1eb48a99f119e561f08b9e9dc60.js":{"logical_path":"admin.js","mtime":"2019-10-24T16:08:56+08:00","size":4525031,"digest":"441d8f3722e5f73e5748aaeb6f517101474cb1eb48a99f119e561f08b9e9dc60","integrity":"sha256-RB2PNyLl9z5XSKrrb1FxAUdMsetIqZ8RnlYfCLnp3GA="},"admin-76c52986591f274f639ad48dfbb480a1aeeec7647b6fa28fa541e78a064b6316.css":{"logical_path":"admin.css","mtime":"2019-10-24T15:25:17+08:00","size":867945,"digest":"76c52986591f274f639ad48dfbb480a1aeeec7647b6fa28fa541e78a064b6316","integrity":"sha256-dsUphlkfJ09jmtSN+7SAoa7ux2R7b6KPpUHnigZLYxY="},"cooperative-6c4c663b6b5071535bab2b76cc5e05ab5682665857763a76bf4f01afef51be5a.js":{"logical_path":"cooperative.js","mtime":"2019-10-24T17:56:20+08:00","size":4339039,"digest":"6c4c663b6b5071535bab2b76cc5e05ab5682665857763a76bf4f01afef51be5a","integrity":"sha256-bExmO2tQcVNbqyt2zF4Fq1aCZlhXdjp2v08Br+9Rvlo="},"admin-c63acadd431434979db50540a0bf7e65c75e1de0d1b449919f2cce89a0548d43.js":{"logical_path":"admin.js","mtime":"2019-10-24T18:12:33+08:00","size":4533182,"digest":"c63acadd431434979db50540a0bf7e65c75e1de0d1b449919f2cce89a0548d43","integrity":"sha256-xjrK3UMUNJedtQVAoL9+ZcdeHeDRtEmRnyzOiaBUjUM="},"admin-bd832b9a35eb3743dde9218beab61f9bcde1508767ad68dbedb1c89a4bb65c3a.css":{"logical_path":"admin.css","mtime":"2019-10-24T17:56:20+08:00","size":861450,"digest":"bd832b9a35eb3743dde9218beab61f9bcde1508767ad68dbedb1c89a4bb65c3a","integrity":"sha256-vYMrmjXrN0Pd6SGL6rYfm83hUIdnrWjb7bHImku2XDo="},"college-fa202780f3e7f96cb9b5916c6f0d7dd9e03cb746864bbd2dd491ed001c30ad8f.css":{"logical_path":"college.css","mtime":"2019-10-24T17:56:20+08:00","size":571936,"digest":"fa202780f3e7f96cb9b5916c6f0d7dd9e03cb746864bbd2dd491ed001c30ad8f","integrity":"sha256-+iAngPPn+Wy5tZFsbw192eA8t0aGS70t1JHtABwwrY8="},"cooperative-4f233e8963b0bd80bc56b71c209d31464d314240ac8d686806baf99511c53ad0.css":{"logical_path":"cooperative.css","mtime":"2019-10-24T17:56:20+08:00","size":825741,"digest":"4f233e8963b0bd80bc56b71c209d31464d314240ac8d686806baf99511c53ad0","integrity":"sha256-TyM+iWOwvYC8VrccIJ0xRk0xQkCsjWhoBrr5lRHFOtA="},"application-8c9d6bb61c50908f584b3070c79aeb95f25c1166d39e07da5e95438b39ca0de9.css":{"logical_path":"application.css","mtime":"2019-10-23T14:16:56+08:00","size":436995,"digest":"8c9d6bb61c50908f584b3070c79aeb95f25c1166d39e07da5e95438b39ca0de9","integrity":"sha256-jJ1rthxQkI9YSzBwx5rrlfJcEWbTngfaXpVDiznKDek="},"admin-bf2bd889f02d15c4913aa260497d72afeb26d701aac49a4ef6a75619af030152.js":{"logical_path":"admin.js","mtime":"2019-10-25T10:12:17+08:00","size":4533673,"digest":"bf2bd889f02d15c4913aa260497d72afeb26d701aac49a4ef6a75619af030152","integrity":"sha256-vyvYifAtFcSROqJgSX1yr+sm1wGqxJpO9qdWGa8DAVI="},"admin-46e564d29ffae5c71ae9b5e36dc0bd5de57b10f396eb2005bfb9cf51e7744cdd.css":{"logical_path":"admin.css","mtime":"2019-10-25T10:12:17+08:00","size":870355,"digest":"46e564d29ffae5c71ae9b5e36dc0bd5de57b10f396eb2005bfb9cf51e7744cdd","integrity":"sha256-RuVk0p/65cca6bXjbcC9XeV7EPOW6yAFv7nPUed0TN0="},"college-2299e05f5e9b640e333ece624d4ab18a678fdabff0bc18b69a9c2e3de49cba8e.css":{"logical_path":"college.css","mtime":"2019-10-25T10:12:17+08:00","size":580077,"digest":"2299e05f5e9b640e333ece624d4ab18a678fdabff0bc18b69a9c2e3de49cba8e","integrity":"sha256-IpngX16bZA4zPs5iTUqximeP2r/wvBi2mpwuPeScuo4="},"cooperative-f1ac8f14ad6ade8d1f79ca49ea9c79be77d49aae9d2705ca672e78444481700d.js":{"logical_path":"cooperative.js","mtime":"2019-10-25T11:01:38+08:00","size":4409145,"digest":"f1ac8f14ad6ade8d1f79ca49ea9c79be77d49aae9d2705ca672e78444481700d","integrity":"sha256-8ayPFK1q3o0fecpJ6px5vnfUmq6dJwXKZy54RESBcA0="},"cooperative-8057adee2454dbc9d648305faf9ede9824f40d3bd0184e816e8035bb7f1e730b.css":{"logical_path":"cooperative.css","mtime":"2019-10-25T10:12:17+08:00","size":833882,"digest":"8057adee2454dbc9d648305faf9ede9824f40d3bd0184e816e8035bb7f1e730b","integrity":"sha256-gFet7iRU28nWSDBfr57emCT0DTvQGE6BboA1u38ecws="},"admin-6f9bb9720e7e5040ae559a8fae11553313f77552a76416b3a9fe77198471964d.js":{"logical_path":"admin.js","mtime":"2019-10-25T17:00:09+08:00","size":4554537,"digest":"6f9bb9720e7e5040ae559a8fae11553313f77552a76416b3a9fe77198471964d","integrity":"sha256-b5u5cg5+UECuVZqPrhFVMxP3dVKnZBazqf53GYRxlk0="},"admin-ab3e0f7240ae4df8d1585c8d5e99df41edd3305ecc2abadcf8820796e1d9fc65.css":{"logical_path":"admin.css","mtime":"2019-10-25T09:55:22+08:00","size":862288,"digest":"ab3e0f7240ae4df8d1585c8d5e99df41edd3305ecc2abadcf8820796e1d9fc65","integrity":"sha256-qz4PckCuTfjRWFyNXpnfQe3TMF7MKrrc+IIHluHZ/GU="},"college-2fdfc5431b46ad4a454a25386dbcbc390466886f76b85fdb7e3f75018196a870.css":{"logical_path":"college.css","mtime":"2019-10-25T09:28:47+08:00","size":572010,"digest":"2fdfc5431b46ad4a454a25386dbcbc390466886f76b85fdb7e3f75018196a870","integrity":"sha256-L9/FQxtGrUpFSiU4bby8OQRmiG92uF/bfj91AYGWqHA="},"cooperative-47d516a0904d0633e82c1de39a6ec4c9e6de0a37813843e01d4bacf97e8b2ebf.css":{"logical_path":"cooperative.css","mtime":"2019-10-25T09:28:47+08:00","size":825815,"digest":"47d516a0904d0633e82c1de39a6ec4c9e6de0a37813843e01d4bacf97e8b2ebf","integrity":"sha256-R9UWoJBNBjPoLB3jmm7EyebeCjeBOEPgHUus+X6LLr8="},"admin-839af7c0d2917a8f8019d0376ea17cec050ef4d19d98c6c10de91f5d2bc81adf.js":{"logical_path":"admin.js","mtime":"2019-10-26T11:25:08+08:00","size":4554543,"digest":"839af7c0d2917a8f8019d0376ea17cec050ef4d19d98c6c10de91f5d2bc81adf","integrity":"sha256-g5r3wNKReo+AGdA3bqF87AUO9NGdmMbBDekfXSvIGt8="},"admin-52d692608c620ae47717a2ac88377e55b9b58af0acdf3f777814a1fd47b6594b.js":{"logical_path":"admin.js","mtime":"2019-10-26T17:16:18+08:00","size":4553202,"digest":"52d692608c620ae47717a2ac88377e55b9b58af0acdf3f777814a1fd47b6594b","integrity":"sha256-UtaSYIxiCuR3F6KsiDd+Vbm1ivCs3z93eBSh/Ue2WUs="},"admin-b58555ae641bbaa61e3af0ddd2756acc3c5de9023c737815c72132cc67c9a403.js":{"logical_path":"admin.js","mtime":"2019-10-27T13:06:02+08:00","size":4553607,"digest":"b58555ae641bbaa61e3af0ddd2756acc3c5de9023c737815c72132cc67c9a403","integrity":"sha256-tYVVrmQbuqYeOvDd0nVqzDxd6QI8c3gVxyEyzGfJpAM="},"admin-b95c48ea51f392ce7c4024d0d8b2c42dfe48528a1898ec3f7818e0cda2a4f224.js":{"logical_path":"admin.js","mtime":"2019-10-28T10:46:29+08:00","size":4554008,"digest":"b95c48ea51f392ce7c4024d0d8b2c42dfe48528a1898ec3f7818e0cda2a4f224","integrity":"sha256-uVxI6lHzks58QCTQ2LLELf5IUooYmOw/eBjgzaKk8iQ="},"admin-1f2e5a2a28462df8bcddfbdbfbebdc36a761ca7a94962ae71d37fb8c06fc5f94.js":{"logical_path":"admin.js","mtime":"2019-10-29T08:57:11+08:00","size":4554938,"digest":"1f2e5a2a28462df8bcddfbdbfbebdc36a761ca7a94962ae71d37fb8c06fc5f94","integrity":"sha256-Hy5aKihGLfi83fvb++vcNqdhynqUlirnHTf7jAb8X5Q="},"admin-cb3d4541758ef2bcbfe16f518d48f85097d0547a587de222d2fc13dbdd474b4b.js":{"logical_path":"admin.js","mtime":"2019-10-29T14:06:13+08:00","size":4556541,"digest":"cb3d4541758ef2bcbfe16f518d48f85097d0547a587de222d2fc13dbdd474b4b","integrity":"sha256-yz1FQXWO8ry/4W9RjUj4UJfQVHpYfeIi0vwT291HS0s="},"admin-6a76c25b6691b4f436608be28606d90c907ba8f033f5f47c6c20d7bf11251cb6.css":{"logical_path":"admin.css","mtime":"2019-10-29T14:22:47+08:00","size":871031,"digest":"6a76c25b6691b4f436608be28606d90c907ba8f033f5f47c6c20d7bf11251cb6","integrity":"sha256-anbCW2aRtPQ2YIvihgbZDJB7qPAz9fR8bCDXvxElHLY="},"admin-ba909dfe0de4d216bedb3c743144321e4023837568abab1d3ee9a28b2faa5925.js":{"logical_path":"admin.js","mtime":"2019-10-29T14:43:01+08:00","size":4556622,"digest":"ba909dfe0de4d216bedb3c743144321e4023837568abab1d3ee9a28b2faa5925","integrity":"sha256-upCd/g3k0ha+2zx0MUQyHkAjg3Voq6sdPumiiy+qWSU="},"admin-e975e2039206e9ae2b6a072fee083cf39b8e04f2318f67bfbf1923fe208456b3.js":{"logical_path":"admin.js","mtime":"2019-10-29T15:50:27+08:00","size":4559454,"digest":"e975e2039206e9ae2b6a072fee083cf39b8e04f2318f67bfbf1923fe208456b3","integrity":"sha256-6XXiA5IG6a4ragcv7gg885uOBPIxj2e/vxkj/iCEVrM="},"cooperative-a309d245cd0b0b9c653db471c53ec090e49ba7ad885879ffa02a11b6efd79d74.js":{"logical_path":"cooperative.js","mtime":"2019-10-29T15:50:27+08:00","size":4409163,"digest":"a309d245cd0b0b9c653db471c53ec090e49ba7ad885879ffa02a11b6efd79d74","integrity":"sha256-ownSRc0LC5xlPbRxxT7AkOSbp62IWHn/oCoRtu/XnXQ="},"admin-5d791c4f4a14e1586cfa44776ae262b3c1494e1c0fb0e00c330f0cb9d30fd7ba.js":{"logical_path":"admin.js","mtime":"2019-11-01T08:41:10+08:00","size":4563272,"digest":"5d791c4f4a14e1586cfa44776ae262b3c1494e1c0fb0e00c330f0cb9d30fd7ba","integrity":"sha256-XXkcT0oU4Vhs+kR3auJis8FJThwPsOAMMw8MudMP17o="},"admin-70dc0e7136a8f54139e4167c00f3fde9ccc92b404b01b37ac6064913806e3f6e.css":{"logical_path":"admin.css","mtime":"2019-10-31T10:05:33+08:00","size":872438,"digest":"70dc0e7136a8f54139e4167c00f3fde9ccc92b404b01b37ac6064913806e3f6e","integrity":"sha256-cNwOcTao9UE55BZ8APP96czJK0BLAbN6xgZJE4BuP24="},"cooperative-4fe879591997da39d38e94f6f5eb3b688aa827fa42cb8fd73d21bc96ed880236.js":{"logical_path":"cooperative.js","mtime":"2019-11-06T11:34:24+08:00","size":4409560,"digest":"4fe879591997da39d38e94f6f5eb3b688aa827fa42cb8fd73d21bc96ed880236","integrity":"sha256-T+h5WRmX2jnTjpT29es7aIqoJ/pCy4/XPSG8lu2IAjY="},"admin-22af0d0f8c16da312c9355540590a8b6de54729793a1bef2782aa4f9469a77ad.js":{"logical_path":"admin.js","mtime":"2019-11-01T18:45:10+08:00","size":4563272,"digest":"22af0d0f8c16da312c9355540590a8b6de54729793a1bef2782aa4f9469a77ad","integrity":"sha256-Iq8ND4wW2jEsk1VUBZCott5UcpeTob7yeCqk+Uaad60="},"admin-4c1fcf5a570db989682ef483c1016234a3b7614e0a8d42c040eed220298fef8c.css":{"logical_path":"admin.css","mtime":"2019-11-01T18:45:10+08:00","size":864367,"digest":"4c1fcf5a570db989682ef483c1016234a3b7614e0a8d42c040eed220298fef8c","integrity":"sha256-TB/PWlcNuYloLvSDwQFiNKO3YU4KjULAQO7SICmP74w="},"admin-1a7f715f91fa17b0018650fa22b43778aad419157b8fdb9d67a02ea11760349b.js":{"logical_path":"admin.js","mtime":"2019-11-05T16:10:50+08:00","size":4565998,"digest":"1a7f715f91fa17b0018650fa22b43778aad419157b8fdb9d67a02ea11760349b","integrity":"sha256-Gn9xX5H6F7ABhlD6IrQ3eKrUGRV7j9udZ6AuoRdgNJs="},"admin-5902a288ce59247a683d5719189fc6260be1e38181872e710a7643ad60caaccc.css":{"logical_path":"admin.css","mtime":"2019-11-02T08:33:50+08:00","size":872434,"digest":"5902a288ce59247a683d5719189fc6260be1e38181872e710a7643ad60caaccc","integrity":"sha256-WQKiiM5ZJHpoPVcZGJ/GJgvh44GBhy5xCnZDrWDKrMw="},"admin-8ceaca69cdf7194b7a94e49b16ac5fa272f80e86493e5da27ab5a729de22c07a.js":{"logical_path":"admin.js","mtime":"2019-11-07T10:59:11+08:00","size":4575131,"digest":"8ceaca69cdf7194b7a94e49b16ac5fa272f80e86493e5da27ab5a729de22c07a","integrity":"sha256-jOrKac33GUt6lOSbFqxfonL4DoZJPl2ierWnKd4iwHo="},"admin-80cc0a53298c5abd849f03d8b8514d3263ef67fce38f83c05b1da0d30d3bb235.js":{"logical_path":"admin.js","mtime":"2019-11-07T17:20:35+08:00","size":4575538,"digest":"80cc0a53298c5abd849f03d8b8514d3263ef67fce38f83c05b1da0d30d3bb235","integrity":"sha256-gMwKUymMWr2EnwPYuFFNMmPvZ/zjj4PAWx2g0w07sjU="}},"assets":{"admin.js":"admin-80cc0a53298c5abd849f03d8b8514d3263ef67fce38f83c05b1da0d30d3bb235.js","admin.css":"admin-5902a288ce59247a683d5719189fc6260be1e38181872e710a7643ad60caaccc.css","font-awesome/fontawesome-webfont.eot":"font-awesome/fontawesome-webfont-7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979.eot","font-awesome/fontawesome-webfont.woff2":"font-awesome/fontawesome-webfont-2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe.woff2","font-awesome/fontawesome-webfont.woff":"font-awesome/fontawesome-webfont-ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07.woff","font-awesome/fontawesome-webfont.ttf":"font-awesome/fontawesome-webfont-aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8.ttf","font-awesome/fontawesome-webfont.svg":"font-awesome/fontawesome-webfont-ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4.svg","college.js":"college-18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287.js","college.css":"college-2299e05f5e9b640e333ece624d4ab18a678fdabff0bc18b69a9c2e3de49cba8e.css","logo.png":"logo-7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423.png","application.js":"application-9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb.js","application.css":"application-0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8.css","cooperative.js":"cooperative-4fe879591997da39d38e94f6f5eb3b688aa827fa42cb8fd73d21bc96ed880236.js","cooperative.css":"cooperative-8057adee2454dbc9d648305faf9ede9824f40d3bd0184e816e8035bb7f1e730b.css"}} \ No newline at end of file +{"files":{"admin-cd9ca8bacc973ce2dbace30c97f6c40bc08e2c2ee44972f668e738e1902c0121.js":{"logical_path":"admin.js","mtime":"2019-09-11T16:20:07+08:00","size":4350881,"digest":"cd9ca8bacc973ce2dbace30c97f6c40bc08e2c2ee44972f668e738e1902c0121","integrity":"sha256-zZyousyXPOLbrOMMl/bEC8COLC7kSXL2aOc44ZAsASE="},"admin-a1b3356efe50ff4717cf22475639b5333c5354ba03fd107c9b7a8d4ae76f47aa.css":{"logical_path":"admin.css","mtime":"2019-09-11T16:20:07+08:00","size":773445,"digest":"a1b3356efe50ff4717cf22475639b5333c5354ba03fd107c9b7a8d4ae76f47aa","integrity":"sha256-obM1bv5Q/0cXzyJHVjm1MzxTVLoD/RB8m3qNSudvR6o="},"font-awesome/fontawesome-webfont-7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979.eot":{"logical_path":"font-awesome/fontawesome-webfont.eot","mtime":"2019-08-14T17:22:43+08:00","size":165742,"digest":"7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979","integrity":"sha256-e/yrbbmdXPvxcFygU23ceFhUMsxfpBu9etDwCQM7KXk="},"font-awesome/fontawesome-webfont-2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe.woff2":{"logical_path":"font-awesome/fontawesome-webfont.woff2","mtime":"2019-08-14T17:22:43+08:00","size":77160,"digest":"2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe","integrity":"sha256-Kt78vAQefRj88tQXh53FoJmXqmTWdbejxLbOM9oT8/4="},"font-awesome/fontawesome-webfont-ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07.woff":{"logical_path":"font-awesome/fontawesome-webfont.woff","mtime":"2019-08-14T17:22:43+08:00","size":98024,"digest":"ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07","integrity":"sha256-ugxZ3rVFD1y0Gz+TYJ7i0NmVQVh33foiPoqKdTNHTwc="},"font-awesome/fontawesome-webfont-aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8.ttf":{"logical_path":"font-awesome/fontawesome-webfont.ttf","mtime":"2019-08-14T17:22:43+08:00","size":165548,"digest":"aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8","integrity":"sha256-qljzPyOaD7AvXHpsRcBD16msmgkzNYBmlOzW1O3A1qg="},"font-awesome/fontawesome-webfont-ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4.svg":{"logical_path":"font-awesome/fontawesome-webfont.svg","mtime":"2019-08-14T17:22:43+08:00","size":444379,"digest":"ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4","integrity":"sha256-rWFXkmwWIrpOHQPUePFUE2hSS/xG9R5C/g2UX37zI+Q="},"college-18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287.js":{"logical_path":"college.js","mtime":"2019-11-06T11:34:24+08:00","size":3352744,"digest":"18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287","integrity":"sha256-GPXoQAMxY06JijWswhh4FcCWwl4Kt0q6NBrpFhZs0oc="},"college-944d4273f62c7538368b9017fdd3387b5e3bea31a87873770eb231324546d4d9.css":{"logical_path":"college.css","mtime":"2019-09-11T16:20:07+08:00","size":546841,"digest":"944d4273f62c7538368b9017fdd3387b5e3bea31a87873770eb231324546d4d9","integrity":"sha256-lE1Cc/YsdTg2i5AX/dM4e1476jGoeHN3DrIxMkVG1Nk="},"logo-7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423.png":{"logical_path":"logo.png","mtime":"2019-09-03T08:55:53+08:00","size":2816,"digest":"7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423","integrity":"sha256-f/ESVocJv5f5iY/ockm3qPIA/x9I1TfYWvhyFfGHBCM="},"application-9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb.js":{"logical_path":"application.js","mtime":"2019-11-06T11:34:24+08:00","size":600706,"digest":"9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb","integrity":"sha256-nPvD15JZmh0N5ce4QgnhwrLmAzbw8B4Z8FgWY5GHCPs="},"application-5eb87c6e13676d0183317debce17fade27e68c4acee28c419438da15d53c94f2.css":{"logical_path":"application.css","mtime":"2019-09-11T16:20:07+08:00","size":1844002,"digest":"5eb87c6e13676d0183317debce17fade27e68c4acee28c419438da15d53c94f2","integrity":"sha256-Xrh8bhNnbQGDMX3rzhf63ifmjErO4oxBlDjaFdU8lPI="},"admin-c9e5ebe6191548550e27514196ea125cfbb402820ec125a0c9acf99d2d378fe4.js":{"logical_path":"admin.js","mtime":"2019-09-21T15:28:08+08:00","size":4382031,"digest":"c9e5ebe6191548550e27514196ea125cfbb402820ec125a0c9acf99d2d378fe4","integrity":"sha256-yeXr5hkVSFUOJ1FBluoSXPu0AoIOwSWgyaz5nS03j+Q="},"admin-59c59f8cae8bef4a8359286c985458110c9d03ea121516595c988943f4717c38.css":{"logical_path":"admin.css","mtime":"2019-09-21T14:49:04+08:00","size":840093,"digest":"59c59f8cae8bef4a8359286c985458110c9d03ea121516595c988943f4717c38","integrity":"sha256-WcWfjK6L70qDWShsmFRYEQydA+oSFRZZXJiJQ/RxfDg="},"college-38f953d6ba5b85d3fab63cb3c2bbf0d057ccc6454d07cfaafac3b06da37b8437.css":{"logical_path":"college.css","mtime":"2019-09-16T13:56:09+08:00","size":579109,"digest":"38f953d6ba5b85d3fab63cb3c2bbf0d057ccc6454d07cfaafac3b06da37b8437","integrity":"sha256-OPlT1rpbhdP6tjyzwrvw0FfMxkVNB8+q+sOwbaN7hDc="},"application-646b1158a4e8c1f13e684d6fe9025abc75f8d3ba5256e440802c0398223374f3.css":{"logical_path":"application.css","mtime":"2019-09-21T14:49:04+08:00","size":1988767,"digest":"646b1158a4e8c1f13e684d6fe9025abc75f8d3ba5256e440802c0398223374f3","integrity":"sha256-ZGsRWKTowfE+aE1v6QJavHX407pSVuRAgCwDmCIzdPM="},"admin-a47e37c0ec7cf5f22380249776d1e82d65b6b6aa272ed7389185aa200fa40751.js":{"logical_path":"admin.js","mtime":"2019-09-25T15:33:05+08:00","size":4383107,"digest":"a47e37c0ec7cf5f22380249776d1e82d65b6b6aa272ed7389185aa200fa40751","integrity":"sha256-pH43wOx89fIjgCSXdtHoLWW2tqonLtc4kYWqIA+kB1E="},"admin-432c4eac09b036c57ff1e88d902b8aa7df81164e4b419bac557cf1366c1d3ad9.js":{"logical_path":"admin.js","mtime":"2019-09-25T15:35:20+08:00","size":4383103,"digest":"432c4eac09b036c57ff1e88d902b8aa7df81164e4b419bac557cf1366c1d3ad9","integrity":"sha256-QyxOrAmwNsV/8eiNkCuKp9+BFk5LQZusVXzxNmwdOtk="},"admin-978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a.js":{"logical_path":"admin.js","mtime":"2019-09-30T14:43:41+08:00","size":4387200,"digest":"978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a","integrity":"sha256-l45c5gf3fCaBShdPSA2nmsJGwiAYaO+EZUqgO7Zye1o="},"admin-896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7.css":{"logical_path":"admin.css","mtime":"2019-09-30T14:43:41+08:00","size":842269,"digest":"896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7","integrity":"sha256-iWKB9HMXIrDAhNuxryHQ80pbwULViv9Xs5GGSrcd3Kc="},"application-97f313e9bb7d25476649f7d7215959cf421480fd0a3785d1956953bf94a1e8bd.css":{"logical_path":"application.css","mtime":"2019-09-30T14:43:41+08:00","size":1993118,"digest":"97f313e9bb7d25476649f7d7215959cf421480fd0a3785d1956953bf94a1e8bd","integrity":"sha256-l/MT6bt9JUdmSffXIVlZz0IUgP0KN4XRlWlTv5Sh6L0="},"admin-2cdb23442fa735025385b88f2900df04fef38b61530041a6dbe375ef0f0ae888.js":{"logical_path":"admin.js","mtime":"2019-10-11T14:38:33+08:00","size":4394616,"digest":"2cdb23442fa735025385b88f2900df04fef38b61530041a6dbe375ef0f0ae888","integrity":"sha256-LNsjRC+nNQJThbiPKQDfBP7zi2FTAEGm2+N17w8K6Ig="},"admin-2c2854b9a02158ded5a809aaf7144a8630b10354ab4e56fecc4dffcc713796cc.css":{"logical_path":"admin.css","mtime":"2019-10-10T17:12:05+08:00","size":846514,"digest":"2c2854b9a02158ded5a809aaf7144a8630b10354ab4e56fecc4dffcc713796cc","integrity":"sha256-LChUuaAhWN7VqAmq9xRKhjCxA1SrTlb+zE3/zHE3lsw="},"application-50059ae929866043b47015128702fcfba53d32a2df148e64e1d961c10651c6af.css":{"logical_path":"application.css","mtime":"2019-10-10T17:12:05+08:00","size":2001607,"digest":"50059ae929866043b47015128702fcfba53d32a2df148e64e1d961c10651c6af","integrity":"sha256-UAWa6SmGYEO0cBUShwL8+6U9MqLfFI5k4dlhwQZRxq8="},"admin-992cde09b6d17f00a49576ae2d9f1ced127244ba401ef5b7d677cab9741688d2.js":{"logical_path":"admin.js","mtime":"2019-10-16T16:11:32+08:00","size":4394790,"digest":"992cde09b6d17f00a49576ae2d9f1ced127244ba401ef5b7d677cab9741688d2","integrity":"sha256-mSzeCbbRfwCklXauLZ8c7RJyRLpAHvW31nfKuXQWiNI="},"admin-84f2a7791e275d6f820514370b3f968176b994b9dd7b8c3ba8bf48336b03f257.css":{"logical_path":"admin.css","mtime":"2019-10-16T19:25:40+08:00","size":846676,"digest":"84f2a7791e275d6f820514370b3f968176b994b9dd7b8c3ba8bf48336b03f257","integrity":"sha256-hPKneR4nXW+CBRQ3Cz+WgXa5lLnde4w7qL9IM2sD8lc="},"application-ef6bab84852baaf69a91fe6af875b6e1b118c55b4c7d165665c488fac80c4997.css":{"logical_path":"application.css","mtime":"2019-10-16T19:25:40+08:00","size":2001931,"digest":"ef6bab84852baaf69a91fe6af875b6e1b118c55b4c7d165665c488fac80c4997","integrity":"sha256-72urhIUrqvaakf5q+HW24bEYxVtMfRZWZcSI+sgMSZc="},"admin-c99030d305662f740aa84b6c925a1adbbaadaa07fd74e2655e64d44b4b97fc4a.js":{"logical_path":"admin.js","mtime":"2019-10-17T09:44:58+08:00","size":4394897,"digest":"c99030d305662f740aa84b6c925a1adbbaadaa07fd74e2655e64d44b4b97fc4a","integrity":"sha256-yZAw0wVmL3QKqEtskloa27qtqgf9dOJlXmTUS0uX/Eo="},"admin-534bde871d67f4d6fc8da611917d78be4066fc7593ba53ee92aa17068a199d6d.css":{"logical_path":"admin.css","mtime":"2019-10-17T10:22:41+08:00","size":846699,"digest":"534bde871d67f4d6fc8da611917d78be4066fc7593ba53ee92aa17068a199d6d","integrity":"sha256-U0vehx1n9Nb8jaYRkX14vkBm/HWTulPukqoXBooZnW0="},"cooperative-04cd6a60d41220d38ee45ce40b1d004e1d0bcd87c132fb1a7bab6144c1deb8d7.js":{"logical_path":"cooperative.js","mtime":"2019-10-17T10:17:56+08:00","size":4330072,"digest":"04cd6a60d41220d38ee45ce40b1d004e1d0bcd87c132fb1a7bab6144c1deb8d7","integrity":"sha256-BM1qYNQSINOO5FzkCx0ATh0LzYfBMvsae6thRMHeuNc="},"cooperative-a345bbfd8e38b70c9285ecc1747012ffcde429187983e2aea5657abb56b9b4f3.css":{"logical_path":"cooperative.css","mtime":"2019-10-17T10:21:41+08:00","size":830628,"digest":"a345bbfd8e38b70c9285ecc1747012ffcde429187983e2aea5657abb56b9b4f3","integrity":"sha256-o0W7/Y44twyShezBdHAS/83kKRh5g+KupWV6u1a5tPM="},"application-0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8.css":{"logical_path":"application.css","mtime":"2019-09-03T08:55:53+08:00","size":442932,"digest":"0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8","integrity":"sha256-DkF0eNVvQkZ+hXzRhrKcu8DWx8boXIpvQvOaxhiUPeg="},"cooperative-149f47b8675d60a8014ccff50f00f932ff69e2be286ffb74343bc4a3effb135b.js":{"logical_path":"cooperative.js","mtime":"2019-10-17T14:03:03+08:00","size":4338033,"digest":"149f47b8675d60a8014ccff50f00f932ff69e2be286ffb74343bc4a3effb135b","integrity":"sha256-FJ9HuGddYKgBTM/1DwD5Mv9p4r4ob/t0NDvEo+/7E1s="},"cooperative-6273b766d6ef11dd56174d868bab55e7f17af17546c888d2ba0dd0a6bcda76c8.css":{"logical_path":"cooperative.css","mtime":"2019-10-17T11:13:07+08:00","size":832914,"digest":"6273b766d6ef11dd56174d868bab55e7f17af17546c888d2ba0dd0a6bcda76c8","integrity":"sha256-YnO3ZtbvEd1WF02Gi6tV5/F68XVGyIjSug3Qprzadsg="},"admin-82f66cc80b5649c6530a562567f28fe8d05f7bc3b8221e0695b2216255c52ba6.js":{"logical_path":"admin.js","mtime":"2019-10-21T13:51:43+08:00","size":4397012,"digest":"82f66cc80b5649c6530a562567f28fe8d05f7bc3b8221e0695b2216255c52ba6","integrity":"sha256-gvZsyAtWScZTClYlZ/KP6NBfe8O4Ih4GlbIhYlXFK6Y="},"admin-1b5728d94f6bccfbcef452a760d94c3b6f31966bc65d7f89be077fc2ea512bec.js":{"logical_path":"admin.js","mtime":"2019-10-21T16:41:06+08:00","size":4397437,"digest":"1b5728d94f6bccfbcef452a760d94c3b6f31966bc65d7f89be077fc2ea512bec","integrity":"sha256-G1co2U9rzPvO9FKnYNlMO28xlmvGXX+Jvgd/wupRK+w="},"admin-c8c127fefa5eca98bca19832c246619318164e8f242635c07033e2423cc18a6f.js":{"logical_path":"admin.js","mtime":"2019-10-22T09:53:29+08:00","size":4408150,"digest":"c8c127fefa5eca98bca19832c246619318164e8f242635c07033e2423cc18a6f","integrity":"sha256-yMEn/vpeypi8oZgywkZhkxgWTo8kJjXAcDPiQjzBim8="},"admin-60d200c1fcdf61a60537d29ccf4479c6b1e5e904208870a63b8ee677c96b347e.css":{"logical_path":"admin.css","mtime":"2019-10-22T09:43:20+08:00","size":851150,"digest":"60d200c1fcdf61a60537d29ccf4479c6b1e5e904208870a63b8ee677c96b347e","integrity":"sha256-YNIAwfzfYaYFN9Kcz0R5xrHl6QQgiHCmO47md8lrNH4="},"cooperative-9fb7ac4ad44081fafd5ad2a3a1bfb7f4329ac96f28bc6446d1ff52b1e2e71286.js":{"logical_path":"cooperative.js","mtime":"2019-10-22T09:55:26+08:00","size":4338142,"digest":"9fb7ac4ad44081fafd5ad2a3a1bfb7f4329ac96f28bc6446d1ff52b1e2e71286","integrity":"sha256-n7esStRAgfr9WtKjob+39DKayW8ovGRG0f9SseLnEoY="},"admin-a11066081d60365ddf25d5867560d1ccdd3197dbe82a5b6e969cc940e3429ff1.js":{"logical_path":"admin.js","mtime":"2019-10-24T14:16:30+08:00","size":4524252,"digest":"a11066081d60365ddf25d5867560d1ccdd3197dbe82a5b6e969cc940e3429ff1","integrity":"sha256-oRBmCB1gNl3fJdWGdWDRzN0xl9voKltulpzJQONCn/E="},"admin-7ce3dd717f7d12fcbc64caf14200230a1e68db439be0ba1879077599ff2c32c6.css":{"logical_path":"admin.css","mtime":"2019-10-24T10:10:08+08:00","size":852772,"digest":"7ce3dd717f7d12fcbc64caf14200230a1e68db439be0ba1879077599ff2c32c6","integrity":"sha256-fOPdcX99Evy8ZMrxQgAjCh5o20Ob4LoYeQd1mf8sMsY="},"college-93904c65d52c125aec0a463b9fd98bedda0018b78707f806be22685cca5d3747.css":{"logical_path":"college.css","mtime":"2019-10-24T10:10:08+08:00","size":579546,"digest":"93904c65d52c125aec0a463b9fd98bedda0018b78707f806be22685cca5d3747","integrity":"sha256-k5BMZdUsElrsCkY7n9mL7doAGLeHB/gGviJoXMpdN0c="},"cooperative-84c79d26a36aff5b496551b6d21b1bfb726b1bbc4153435a366115e96c204e06.js":{"logical_path":"cooperative.js","mtime":"2019-10-24T14:17:15+08:00","size":4338225,"digest":"84c79d26a36aff5b496551b6d21b1bfb726b1bbc4153435a366115e96c204e06","integrity":"sha256-hMedJqNq/1tJZVG20hsb+3JrG7xBU0NaNmEV6WwgTgY="},"cooperative-10a9ee5177e196572573ccea460e133c748072e223fdb473d05ee72c991fbbe3.css":{"logical_path":"cooperative.css","mtime":"2019-10-24T10:10:08+08:00","size":833351,"digest":"10a9ee5177e196572573ccea460e133c748072e223fdb473d05ee72c991fbbe3","integrity":"sha256-EKnuUXfhllclc8zqRg4TPHSAcuIj/bRz0F7nLJkfu+M="},"admin-441d8f3722e5f73e5748aaeb6f517101474cb1eb48a99f119e561f08b9e9dc60.js":{"logical_path":"admin.js","mtime":"2019-10-24T16:08:56+08:00","size":4525031,"digest":"441d8f3722e5f73e5748aaeb6f517101474cb1eb48a99f119e561f08b9e9dc60","integrity":"sha256-RB2PNyLl9z5XSKrrb1FxAUdMsetIqZ8RnlYfCLnp3GA="},"admin-76c52986591f274f639ad48dfbb480a1aeeec7647b6fa28fa541e78a064b6316.css":{"logical_path":"admin.css","mtime":"2019-10-24T15:25:17+08:00","size":867945,"digest":"76c52986591f274f639ad48dfbb480a1aeeec7647b6fa28fa541e78a064b6316","integrity":"sha256-dsUphlkfJ09jmtSN+7SAoa7ux2R7b6KPpUHnigZLYxY="},"cooperative-6c4c663b6b5071535bab2b76cc5e05ab5682665857763a76bf4f01afef51be5a.js":{"logical_path":"cooperative.js","mtime":"2019-10-24T17:56:20+08:00","size":4339039,"digest":"6c4c663b6b5071535bab2b76cc5e05ab5682665857763a76bf4f01afef51be5a","integrity":"sha256-bExmO2tQcVNbqyt2zF4Fq1aCZlhXdjp2v08Br+9Rvlo="},"admin-c63acadd431434979db50540a0bf7e65c75e1de0d1b449919f2cce89a0548d43.js":{"logical_path":"admin.js","mtime":"2019-10-24T18:12:33+08:00","size":4533182,"digest":"c63acadd431434979db50540a0bf7e65c75e1de0d1b449919f2cce89a0548d43","integrity":"sha256-xjrK3UMUNJedtQVAoL9+ZcdeHeDRtEmRnyzOiaBUjUM="},"admin-bd832b9a35eb3743dde9218beab61f9bcde1508767ad68dbedb1c89a4bb65c3a.css":{"logical_path":"admin.css","mtime":"2019-10-24T17:56:20+08:00","size":861450,"digest":"bd832b9a35eb3743dde9218beab61f9bcde1508767ad68dbedb1c89a4bb65c3a","integrity":"sha256-vYMrmjXrN0Pd6SGL6rYfm83hUIdnrWjb7bHImku2XDo="},"college-fa202780f3e7f96cb9b5916c6f0d7dd9e03cb746864bbd2dd491ed001c30ad8f.css":{"logical_path":"college.css","mtime":"2019-10-24T17:56:20+08:00","size":571936,"digest":"fa202780f3e7f96cb9b5916c6f0d7dd9e03cb746864bbd2dd491ed001c30ad8f","integrity":"sha256-+iAngPPn+Wy5tZFsbw192eA8t0aGS70t1JHtABwwrY8="},"cooperative-4f233e8963b0bd80bc56b71c209d31464d314240ac8d686806baf99511c53ad0.css":{"logical_path":"cooperative.css","mtime":"2019-10-24T17:56:20+08:00","size":825741,"digest":"4f233e8963b0bd80bc56b71c209d31464d314240ac8d686806baf99511c53ad0","integrity":"sha256-TyM+iWOwvYC8VrccIJ0xRk0xQkCsjWhoBrr5lRHFOtA="},"application-8c9d6bb61c50908f584b3070c79aeb95f25c1166d39e07da5e95438b39ca0de9.css":{"logical_path":"application.css","mtime":"2019-10-23T14:16:56+08:00","size":436995,"digest":"8c9d6bb61c50908f584b3070c79aeb95f25c1166d39e07da5e95438b39ca0de9","integrity":"sha256-jJ1rthxQkI9YSzBwx5rrlfJcEWbTngfaXpVDiznKDek="},"admin-bf2bd889f02d15c4913aa260497d72afeb26d701aac49a4ef6a75619af030152.js":{"logical_path":"admin.js","mtime":"2019-10-25T10:12:17+08:00","size":4533673,"digest":"bf2bd889f02d15c4913aa260497d72afeb26d701aac49a4ef6a75619af030152","integrity":"sha256-vyvYifAtFcSROqJgSX1yr+sm1wGqxJpO9qdWGa8DAVI="},"admin-46e564d29ffae5c71ae9b5e36dc0bd5de57b10f396eb2005bfb9cf51e7744cdd.css":{"logical_path":"admin.css","mtime":"2019-10-25T10:12:17+08:00","size":870355,"digest":"46e564d29ffae5c71ae9b5e36dc0bd5de57b10f396eb2005bfb9cf51e7744cdd","integrity":"sha256-RuVk0p/65cca6bXjbcC9XeV7EPOW6yAFv7nPUed0TN0="},"college-2299e05f5e9b640e333ece624d4ab18a678fdabff0bc18b69a9c2e3de49cba8e.css":{"logical_path":"college.css","mtime":"2019-10-25T10:12:17+08:00","size":580077,"digest":"2299e05f5e9b640e333ece624d4ab18a678fdabff0bc18b69a9c2e3de49cba8e","integrity":"sha256-IpngX16bZA4zPs5iTUqximeP2r/wvBi2mpwuPeScuo4="},"cooperative-f1ac8f14ad6ade8d1f79ca49ea9c79be77d49aae9d2705ca672e78444481700d.js":{"logical_path":"cooperative.js","mtime":"2019-10-25T11:01:38+08:00","size":4409145,"digest":"f1ac8f14ad6ade8d1f79ca49ea9c79be77d49aae9d2705ca672e78444481700d","integrity":"sha256-8ayPFK1q3o0fecpJ6px5vnfUmq6dJwXKZy54RESBcA0="},"cooperative-8057adee2454dbc9d648305faf9ede9824f40d3bd0184e816e8035bb7f1e730b.css":{"logical_path":"cooperative.css","mtime":"2019-10-25T10:12:17+08:00","size":833882,"digest":"8057adee2454dbc9d648305faf9ede9824f40d3bd0184e816e8035bb7f1e730b","integrity":"sha256-gFet7iRU28nWSDBfr57emCT0DTvQGE6BboA1u38ecws="},"admin-6f9bb9720e7e5040ae559a8fae11553313f77552a76416b3a9fe77198471964d.js":{"logical_path":"admin.js","mtime":"2019-10-25T17:00:09+08:00","size":4554537,"digest":"6f9bb9720e7e5040ae559a8fae11553313f77552a76416b3a9fe77198471964d","integrity":"sha256-b5u5cg5+UECuVZqPrhFVMxP3dVKnZBazqf53GYRxlk0="},"admin-ab3e0f7240ae4df8d1585c8d5e99df41edd3305ecc2abadcf8820796e1d9fc65.css":{"logical_path":"admin.css","mtime":"2019-10-25T09:55:22+08:00","size":862288,"digest":"ab3e0f7240ae4df8d1585c8d5e99df41edd3305ecc2abadcf8820796e1d9fc65","integrity":"sha256-qz4PckCuTfjRWFyNXpnfQe3TMF7MKrrc+IIHluHZ/GU="},"college-2fdfc5431b46ad4a454a25386dbcbc390466886f76b85fdb7e3f75018196a870.css":{"logical_path":"college.css","mtime":"2019-10-25T09:28:47+08:00","size":572010,"digest":"2fdfc5431b46ad4a454a25386dbcbc390466886f76b85fdb7e3f75018196a870","integrity":"sha256-L9/FQxtGrUpFSiU4bby8OQRmiG92uF/bfj91AYGWqHA="},"cooperative-47d516a0904d0633e82c1de39a6ec4c9e6de0a37813843e01d4bacf97e8b2ebf.css":{"logical_path":"cooperative.css","mtime":"2019-10-25T09:28:47+08:00","size":825815,"digest":"47d516a0904d0633e82c1de39a6ec4c9e6de0a37813843e01d4bacf97e8b2ebf","integrity":"sha256-R9UWoJBNBjPoLB3jmm7EyebeCjeBOEPgHUus+X6LLr8="},"admin-839af7c0d2917a8f8019d0376ea17cec050ef4d19d98c6c10de91f5d2bc81adf.js":{"logical_path":"admin.js","mtime":"2019-10-26T11:25:08+08:00","size":4554543,"digest":"839af7c0d2917a8f8019d0376ea17cec050ef4d19d98c6c10de91f5d2bc81adf","integrity":"sha256-g5r3wNKReo+AGdA3bqF87AUO9NGdmMbBDekfXSvIGt8="},"admin-52d692608c620ae47717a2ac88377e55b9b58af0acdf3f777814a1fd47b6594b.js":{"logical_path":"admin.js","mtime":"2019-10-26T17:16:18+08:00","size":4553202,"digest":"52d692608c620ae47717a2ac88377e55b9b58af0acdf3f777814a1fd47b6594b","integrity":"sha256-UtaSYIxiCuR3F6KsiDd+Vbm1ivCs3z93eBSh/Ue2WUs="},"admin-b58555ae641bbaa61e3af0ddd2756acc3c5de9023c737815c72132cc67c9a403.js":{"logical_path":"admin.js","mtime":"2019-10-27T13:06:02+08:00","size":4553607,"digest":"b58555ae641bbaa61e3af0ddd2756acc3c5de9023c737815c72132cc67c9a403","integrity":"sha256-tYVVrmQbuqYeOvDd0nVqzDxd6QI8c3gVxyEyzGfJpAM="},"admin-b95c48ea51f392ce7c4024d0d8b2c42dfe48528a1898ec3f7818e0cda2a4f224.js":{"logical_path":"admin.js","mtime":"2019-10-28T10:46:29+08:00","size":4554008,"digest":"b95c48ea51f392ce7c4024d0d8b2c42dfe48528a1898ec3f7818e0cda2a4f224","integrity":"sha256-uVxI6lHzks58QCTQ2LLELf5IUooYmOw/eBjgzaKk8iQ="},"admin-1f2e5a2a28462df8bcddfbdbfbebdc36a761ca7a94962ae71d37fb8c06fc5f94.js":{"logical_path":"admin.js","mtime":"2019-10-29T08:57:11+08:00","size":4554938,"digest":"1f2e5a2a28462df8bcddfbdbfbebdc36a761ca7a94962ae71d37fb8c06fc5f94","integrity":"sha256-Hy5aKihGLfi83fvb++vcNqdhynqUlirnHTf7jAb8X5Q="},"admin-cb3d4541758ef2bcbfe16f518d48f85097d0547a587de222d2fc13dbdd474b4b.js":{"logical_path":"admin.js","mtime":"2019-10-29T14:06:13+08:00","size":4556541,"digest":"cb3d4541758ef2bcbfe16f518d48f85097d0547a587de222d2fc13dbdd474b4b","integrity":"sha256-yz1FQXWO8ry/4W9RjUj4UJfQVHpYfeIi0vwT291HS0s="},"admin-6a76c25b6691b4f436608be28606d90c907ba8f033f5f47c6c20d7bf11251cb6.css":{"logical_path":"admin.css","mtime":"2019-10-29T14:22:47+08:00","size":871031,"digest":"6a76c25b6691b4f436608be28606d90c907ba8f033f5f47c6c20d7bf11251cb6","integrity":"sha256-anbCW2aRtPQ2YIvihgbZDJB7qPAz9fR8bCDXvxElHLY="},"admin-ba909dfe0de4d216bedb3c743144321e4023837568abab1d3ee9a28b2faa5925.js":{"logical_path":"admin.js","mtime":"2019-10-29T14:43:01+08:00","size":4556622,"digest":"ba909dfe0de4d216bedb3c743144321e4023837568abab1d3ee9a28b2faa5925","integrity":"sha256-upCd/g3k0ha+2zx0MUQyHkAjg3Voq6sdPumiiy+qWSU="},"admin-e975e2039206e9ae2b6a072fee083cf39b8e04f2318f67bfbf1923fe208456b3.js":{"logical_path":"admin.js","mtime":"2019-10-29T15:50:27+08:00","size":4559454,"digest":"e975e2039206e9ae2b6a072fee083cf39b8e04f2318f67bfbf1923fe208456b3","integrity":"sha256-6XXiA5IG6a4ragcv7gg885uOBPIxj2e/vxkj/iCEVrM="},"cooperative-a309d245cd0b0b9c653db471c53ec090e49ba7ad885879ffa02a11b6efd79d74.js":{"logical_path":"cooperative.js","mtime":"2019-10-29T15:50:27+08:00","size":4409163,"digest":"a309d245cd0b0b9c653db471c53ec090e49ba7ad885879ffa02a11b6efd79d74","integrity":"sha256-ownSRc0LC5xlPbRxxT7AkOSbp62IWHn/oCoRtu/XnXQ="},"admin-5d791c4f4a14e1586cfa44776ae262b3c1494e1c0fb0e00c330f0cb9d30fd7ba.js":{"logical_path":"admin.js","mtime":"2019-11-01T08:41:10+08:00","size":4563272,"digest":"5d791c4f4a14e1586cfa44776ae262b3c1494e1c0fb0e00c330f0cb9d30fd7ba","integrity":"sha256-XXkcT0oU4Vhs+kR3auJis8FJThwPsOAMMw8MudMP17o="},"admin-70dc0e7136a8f54139e4167c00f3fde9ccc92b404b01b37ac6064913806e3f6e.css":{"logical_path":"admin.css","mtime":"2019-10-31T10:05:33+08:00","size":872438,"digest":"70dc0e7136a8f54139e4167c00f3fde9ccc92b404b01b37ac6064913806e3f6e","integrity":"sha256-cNwOcTao9UE55BZ8APP96czJK0BLAbN6xgZJE4BuP24="},"cooperative-4fe879591997da39d38e94f6f5eb3b688aa827fa42cb8fd73d21bc96ed880236.js":{"logical_path":"cooperative.js","mtime":"2019-11-06T11:34:24+08:00","size":4409560,"digest":"4fe879591997da39d38e94f6f5eb3b688aa827fa42cb8fd73d21bc96ed880236","integrity":"sha256-T+h5WRmX2jnTjpT29es7aIqoJ/pCy4/XPSG8lu2IAjY="},"admin-22af0d0f8c16da312c9355540590a8b6de54729793a1bef2782aa4f9469a77ad.js":{"logical_path":"admin.js","mtime":"2019-11-01T18:45:10+08:00","size":4563272,"digest":"22af0d0f8c16da312c9355540590a8b6de54729793a1bef2782aa4f9469a77ad","integrity":"sha256-Iq8ND4wW2jEsk1VUBZCott5UcpeTob7yeCqk+Uaad60="},"admin-4c1fcf5a570db989682ef483c1016234a3b7614e0a8d42c040eed220298fef8c.css":{"logical_path":"admin.css","mtime":"2019-11-01T18:45:10+08:00","size":864367,"digest":"4c1fcf5a570db989682ef483c1016234a3b7614e0a8d42c040eed220298fef8c","integrity":"sha256-TB/PWlcNuYloLvSDwQFiNKO3YU4KjULAQO7SICmP74w="},"admin-1a7f715f91fa17b0018650fa22b43778aad419157b8fdb9d67a02ea11760349b.js":{"logical_path":"admin.js","mtime":"2019-11-05T16:10:50+08:00","size":4565998,"digest":"1a7f715f91fa17b0018650fa22b43778aad419157b8fdb9d67a02ea11760349b","integrity":"sha256-Gn9xX5H6F7ABhlD6IrQ3eKrUGRV7j9udZ6AuoRdgNJs="},"admin-5902a288ce59247a683d5719189fc6260be1e38181872e710a7643ad60caaccc.css":{"logical_path":"admin.css","mtime":"2019-11-02T08:33:50+08:00","size":872434,"digest":"5902a288ce59247a683d5719189fc6260be1e38181872e710a7643ad60caaccc","integrity":"sha256-WQKiiM5ZJHpoPVcZGJ/GJgvh44GBhy5xCnZDrWDKrMw="},"admin-8ceaca69cdf7194b7a94e49b16ac5fa272f80e86493e5da27ab5a729de22c07a.js":{"logical_path":"admin.js","mtime":"2019-11-07T10:59:11+08:00","size":4575131,"digest":"8ceaca69cdf7194b7a94e49b16ac5fa272f80e86493e5da27ab5a729de22c07a","integrity":"sha256-jOrKac33GUt6lOSbFqxfonL4DoZJPl2ierWnKd4iwHo="},"admin-80cc0a53298c5abd849f03d8b8514d3263ef67fce38f83c05b1da0d30d3bb235.js":{"logical_path":"admin.js","mtime":"2019-11-07T17:20:35+08:00","size":4575538,"digest":"80cc0a53298c5abd849f03d8b8514d3263ef67fce38f83c05b1da0d30d3bb235","integrity":"sha256-gMwKUymMWr2EnwPYuFFNMmPvZ/zjj4PAWx2g0w07sjU="},"admin-62cbd1f755bfb83be19051bd099d6c58bf760d144f2eb890a06d98e694506dd4.js":{"logical_path":"admin.js","mtime":"2019-11-08T09:49:05+08:00","size":4575562,"digest":"62cbd1f755bfb83be19051bd099d6c58bf760d144f2eb890a06d98e694506dd4","integrity":"sha256-YsvR91W/uDvhkFG9CZ1sWL92DRRPLriQoG2Y5pRQbdQ="},"admin-a43c5a60b3ce25fd4322aa44414813d41aad3f6f94966f9b691f2f13b41277df.css":{"logical_path":"admin.css","mtime":"2019-11-08T10:05:27+08:00","size":872744,"digest":"a43c5a60b3ce25fd4322aa44414813d41aad3f6f94966f9b691f2f13b41277df","integrity":"sha256-pDxaYLPOJf1DIqpEQUgT1BqtP2+Ulm+baR8vE7QSd98="},"cooperative-874fcb0a0f1072b2245fbd18f00e0eb0e6a9e2e5b995008688b47693c3495699.js":{"logical_path":"cooperative.js","mtime":"2019-11-08T10:32:25+08:00","size":4415335,"digest":"874fcb0a0f1072b2245fbd18f00e0eb0e6a9e2e5b995008688b47693c3495699","integrity":"sha256-h0/LCg8QcrIkX70Y8A4OsOap4uW5lQCGiLR2k8NJVpk="},"cooperative-57330e03998e7ea29c4342718d18b36cc396a4a466c9b8c4ad371e44159f14d6.css":{"logical_path":"cooperative.css","mtime":"2019-11-08T10:05:46+08:00","size":834203,"digest":"57330e03998e7ea29c4342718d18b36cc396a4a466c9b8c4ad371e44159f14d6","integrity":"sha256-VzMOA5mOfqKcQ0JxjRizbMOWpKRmybjErTceRBWfFNY="}},"assets":{"admin.js":"admin-62cbd1f755bfb83be19051bd099d6c58bf760d144f2eb890a06d98e694506dd4.js","admin.css":"admin-a43c5a60b3ce25fd4322aa44414813d41aad3f6f94966f9b691f2f13b41277df.css","font-awesome/fontawesome-webfont.eot":"font-awesome/fontawesome-webfont-7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979.eot","font-awesome/fontawesome-webfont.woff2":"font-awesome/fontawesome-webfont-2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe.woff2","font-awesome/fontawesome-webfont.woff":"font-awesome/fontawesome-webfont-ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07.woff","font-awesome/fontawesome-webfont.ttf":"font-awesome/fontawesome-webfont-aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8.ttf","font-awesome/fontawesome-webfont.svg":"font-awesome/fontawesome-webfont-ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4.svg","college.js":"college-18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287.js","college.css":"college-2299e05f5e9b640e333ece624d4ab18a678fdabff0bc18b69a9c2e3de49cba8e.css","logo.png":"logo-7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423.png","application.js":"application-9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb.js","application.css":"application-0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8.css","cooperative.js":"cooperative-874fcb0a0f1072b2245fbd18f00e0eb0e6a9e2e5b995008688b47693c3495699.js","cooperative.css":"cooperative-57330e03998e7ea29c4342718d18b36cc396a4a466c9b8c4ad371e44159f14d6.css"}} \ No newline at end of file diff --git a/public/assets/admin-80cc0a53298c5abd849f03d8b8514d3263ef67fce38f83c05b1da0d30d3bb235.js b/public/assets/admin-62cbd1f755bfb83be19051bd099d6c58bf760d144f2eb890a06d98e694506dd4.js similarity index 99% rename from public/assets/admin-80cc0a53298c5abd849f03d8b8514d3263ef67fce38f83c05b1da0d30d3bb235.js rename to public/assets/admin-62cbd1f755bfb83be19051bd099d6c58bf760d144f2eb890a06d98e694506dd4.js index 5fa824eef..84af99c3f 100644 --- a/public/assets/admin-80cc0a53298c5abd849f03d8b8514d3263ef67fce38f83c05b1da0d30d3bb235.js +++ b/public/assets/admin-62cbd1f755bfb83be19051bd099d6c58bf760d144f2eb890a06d98e694506dd4.js @@ -137829,6 +137829,7 @@ $(document).on('turbolinks:load', function() { $searchForm.find('.school-select').select2({ theme: 'bootstrap4', placeholder: '请选择创建者单位', + allowClear: true, minimumInputLength: 1, ajax: { delay: 500, diff --git a/public/assets/admin-80cc0a53298c5abd849f03d8b8514d3263ef67fce38f83c05b1da0d30d3bb235.js.gz b/public/assets/admin-62cbd1f755bfb83be19051bd099d6c58bf760d144f2eb890a06d98e694506dd4.js.gz similarity index 99% rename from public/assets/admin-80cc0a53298c5abd849f03d8b8514d3263ef67fce38f83c05b1da0d30d3bb235.js.gz rename to public/assets/admin-62cbd1f755bfb83be19051bd099d6c58bf760d144f2eb890a06d98e694506dd4.js.gz index 406ee2a4d..ff59a98b5 100644 Binary files a/public/assets/admin-80cc0a53298c5abd849f03d8b8514d3263ef67fce38f83c05b1da0d30d3bb235.js.gz and b/public/assets/admin-62cbd1f755bfb83be19051bd099d6c58bf760d144f2eb890a06d98e694506dd4.js.gz differ diff --git a/public/assets/admin-5902a288ce59247a683d5719189fc6260be1e38181872e710a7643ad60caaccc.css b/public/assets/admin-a43c5a60b3ce25fd4322aa44414813d41aad3f6f94966f9b691f2f13b41277df.css similarity index 99% rename from public/assets/admin-5902a288ce59247a683d5719189fc6260be1e38181872e710a7643ad60caaccc.css rename to public/assets/admin-a43c5a60b3ce25fd4322aa44414813d41aad3f6f94966f9b691f2f13b41277df.css index 2d96ecdae..bbbf2c50a 100644 --- a/public/assets/admin-5902a288ce59247a683d5719189fc6260be1e38181872e710a7643ad60caaccc.css +++ b/public/assets/admin-a43c5a60b3ce25fd4322aa44414813d41aad3f6f94966f9b691f2f13b41277df.css @@ -25487,17 +25487,28 @@ input.form-control { height: 300px; } -/* line 51, app/assets/stylesheets/admins/common.scss */ +/* line 50, app/assets/stylesheets/admins/common.scss */ +.admin-body-container .image-preview-container { + display: -webkit-box; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; +} + +/* line 57, app/assets/stylesheets/admins/common.scss */ .admin-body-container .action-container > .action { padding: 0 3px; } -/* line 56, app/assets/stylesheets/admins/common.scss */ +/* line 62, app/assets/stylesheets/admins/common.scss */ .admin-body-container .action-container .more-action-dropdown .dropdown-item { font-size: 14px; } -/* line 63, app/assets/stylesheets/admins/common.scss */ +/* line 69, app/assets/stylesheets/admins/common.scss */ .admin-body-container .paginate-container { margin-top: 20px; display: -webkit-box; @@ -25511,68 +25522,68 @@ input.form-control { align-items: center; } -/* line 70, app/assets/stylesheets/admins/common.scss */ +/* line 76, app/assets/stylesheets/admins/common.scss */ .admin-body-container .paginate-container .paginate-total { margin-bottom: 10px; color: darkgrey; } -/* line 75, app/assets/stylesheets/admins/common.scss */ +/* line 81, app/assets/stylesheets/admins/common.scss */ .admin-body-container .paginate-container .pagination { margin-bottom: 0px; } -/* line 81, app/assets/stylesheets/admins/common.scss */ +/* line 87, app/assets/stylesheets/admins/common.scss */ .admin-body-container .search-form-container { display: -webkit-box; display: flex; margin-bottom: 20px; } -/* line 85, app/assets/stylesheets/admins/common.scss */ +/* line 91, app/assets/stylesheets/admins/common.scss */ .admin-body-container .search-form-container .search-form { -webkit-box-flex: 1; flex: 1; } -/* line 88, app/assets/stylesheets/admins/common.scss */ +/* line 94, app/assets/stylesheets/admins/common.scss */ .admin-body-container .search-form-container .search-form * { font-size: 14px; } -/* line 90, app/assets/stylesheets/admins/common.scss */ +/* line 96, app/assets/stylesheets/admins/common.scss */ .admin-body-container .search-form-container .search-form select, .admin-body-container .search-form-container .search-form input { margin-right: 10px; font-size: 14px; } -/* line 97, app/assets/stylesheets/admins/common.scss */ +/* line 103, app/assets/stylesheets/admins/common.scss */ .admin-body-container .global-error { color: grey; min-height: 300px; } -/* line 101, app/assets/stylesheets/admins/common.scss */ +/* line 107, app/assets/stylesheets/admins/common.scss */ .admin-body-container .global-error-code { font-size: 80px; } -/* line 105, app/assets/stylesheets/admins/common.scss */ +/* line 111, app/assets/stylesheets/admins/common.scss */ .admin-body-container .global-error-text { font-size: 24px; } -/* line 111, app/assets/stylesheets/admins/common.scss */ +/* line 117, app/assets/stylesheets/admins/common.scss */ .admin-body-container .nav-tabs .nav-link { padding: 0.5rem 2rem; } -/* line 116, app/assets/stylesheets/admins/common.scss */ +/* line 122, app/assets/stylesheets/admins/common.scss */ .admin-body-container .CodeMirror { border: 1px solid #ced4da; } -/* line 120, app/assets/stylesheets/admins/common.scss */ +/* line 126, app/assets/stylesheets/admins/common.scss */ .admin-body-container .batch-action-container { margin-bottom: -15px; padding: 10px 20px 0; diff --git a/public/assets/admin-5902a288ce59247a683d5719189fc6260be1e38181872e710a7643ad60caaccc.css.gz b/public/assets/admin-a43c5a60b3ce25fd4322aa44414813d41aad3f6f94966f9b691f2f13b41277df.css.gz similarity index 78% rename from public/assets/admin-5902a288ce59247a683d5719189fc6260be1e38181872e710a7643ad60caaccc.css.gz rename to public/assets/admin-a43c5a60b3ce25fd4322aa44414813d41aad3f6f94966f9b691f2f13b41277df.css.gz index d40b4868f..20f375d4d 100644 Binary files a/public/assets/admin-5902a288ce59247a683d5719189fc6260be1e38181872e710a7643ad60caaccc.css.gz and b/public/assets/admin-a43c5a60b3ce25fd4322aa44414813d41aad3f6f94966f9b691f2f13b41277df.css.gz differ diff --git a/public/assets/cooperative-8057adee2454dbc9d648305faf9ede9824f40d3bd0184e816e8035bb7f1e730b.css b/public/assets/cooperative-57330e03998e7ea29c4342718d18b36cc396a4a466c9b8c4ad371e44159f14d6.css similarity index 99% rename from public/assets/cooperative-8057adee2454dbc9d648305faf9ede9824f40d3bd0184e816e8035bb7f1e730b.css rename to public/assets/cooperative-57330e03998e7ea29c4342718d18b36cc396a4a466c9b8c4ad371e44159f14d6.css index f8ac15614..0a221d856 100644 --- a/public/assets/cooperative-8057adee2454dbc9d648305faf9ede9824f40d3bd0184e816e8035bb7f1e730b.css +++ b/public/assets/cooperative-57330e03998e7ea29c4342718d18b36cc396a4a466c9b8c4ad371e44159f14d6.css @@ -25047,17 +25047,28 @@ input.form-control { height: 300px; } -/* line 51, app/assets/stylesheets/cooperative/common.scss */ +/* line 50, app/assets/stylesheets/cooperative/common.scss */ +.cooperative-body-container .image-preview-container { + display: -webkit-box; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; +} + +/* line 57, app/assets/stylesheets/cooperative/common.scss */ .cooperative-body-container .action-container > .action { padding: 0 3px; } -/* line 56, app/assets/stylesheets/cooperative/common.scss */ +/* line 62, app/assets/stylesheets/cooperative/common.scss */ .cooperative-body-container .action-container .more-action-dropdown .dropdown-item { font-size: 14px; } -/* line 63, app/assets/stylesheets/cooperative/common.scss */ +/* line 69, app/assets/stylesheets/cooperative/common.scss */ .cooperative-body-container .paginate-container { margin-top: 20px; display: -webkit-box; @@ -25071,68 +25082,68 @@ input.form-control { align-items: center; } -/* line 70, app/assets/stylesheets/cooperative/common.scss */ +/* line 76, app/assets/stylesheets/cooperative/common.scss */ .cooperative-body-container .paginate-container .paginate-total { margin-bottom: 10px; color: darkgrey; } -/* line 75, app/assets/stylesheets/cooperative/common.scss */ +/* line 81, app/assets/stylesheets/cooperative/common.scss */ .cooperative-body-container .paginate-container .pagination { margin-bottom: 0px; } -/* line 81, app/assets/stylesheets/cooperative/common.scss */ +/* line 87, app/assets/stylesheets/cooperative/common.scss */ .cooperative-body-container .search-form-container { display: -webkit-box; display: flex; margin-bottom: 20px; } -/* line 85, app/assets/stylesheets/cooperative/common.scss */ +/* line 91, app/assets/stylesheets/cooperative/common.scss */ .cooperative-body-container .search-form-container .search-form { -webkit-box-flex: 1; flex: 1; } -/* line 88, app/assets/stylesheets/cooperative/common.scss */ +/* line 94, app/assets/stylesheets/cooperative/common.scss */ .cooperative-body-container .search-form-container .search-form * { font-size: 14px; } -/* line 90, app/assets/stylesheets/cooperative/common.scss */ +/* line 96, app/assets/stylesheets/cooperative/common.scss */ .cooperative-body-container .search-form-container .search-form select, .cooperative-body-container .search-form-container .search-form input { margin-right: 10px; font-size: 14px; } -/* line 97, app/assets/stylesheets/cooperative/common.scss */ +/* line 103, app/assets/stylesheets/cooperative/common.scss */ .cooperative-body-container .global-error { color: grey; min-height: 300px; } -/* line 101, app/assets/stylesheets/cooperative/common.scss */ +/* line 107, app/assets/stylesheets/cooperative/common.scss */ .cooperative-body-container .global-error-code { font-size: 80px; } -/* line 105, app/assets/stylesheets/cooperative/common.scss */ +/* line 111, app/assets/stylesheets/cooperative/common.scss */ .cooperative-body-container .global-error-text { font-size: 24px; } -/* line 111, app/assets/stylesheets/cooperative/common.scss */ +/* line 117, app/assets/stylesheets/cooperative/common.scss */ .cooperative-body-container .nav-tabs .nav-link { padding: 0.5rem 2rem; } -/* line 116, app/assets/stylesheets/cooperative/common.scss */ +/* line 122, app/assets/stylesheets/cooperative/common.scss */ .cooperative-body-container .CodeMirror { border: 1px solid #ced4da; } -/* line 120, app/assets/stylesheets/cooperative/common.scss */ +/* line 126, app/assets/stylesheets/cooperative/common.scss */ .cooperative-body-container .batch-action-container { margin-bottom: -15px; padding: 10px 20px 0; diff --git a/public/assets/cooperative-8057adee2454dbc9d648305faf9ede9824f40d3bd0184e816e8035bb7f1e730b.css.gz b/public/assets/cooperative-57330e03998e7ea29c4342718d18b36cc396a4a466c9b8c4ad371e44159f14d6.css.gz similarity index 79% rename from public/assets/cooperative-8057adee2454dbc9d648305faf9ede9824f40d3bd0184e816e8035bb7f1e730b.css.gz rename to public/assets/cooperative-57330e03998e7ea29c4342718d18b36cc396a4a466c9b8c4ad371e44159f14d6.css.gz index acb04f26f..d4ed16582 100644 Binary files a/public/assets/cooperative-8057adee2454dbc9d648305faf9ede9824f40d3bd0184e816e8035bb7f1e730b.css.gz and b/public/assets/cooperative-57330e03998e7ea29c4342718d18b36cc396a4a466c9b8c4ad371e44159f14d6.css.gz differ diff --git a/public/assets/cooperative-4fe879591997da39d38e94f6f5eb3b688aa827fa42cb8fd73d21bc96ed880236.js b/public/assets/cooperative-874fcb0a0f1072b2245fbd18f00e0eb0e6a9e2e5b995008688b47693c3495699.js similarity index 99% rename from public/assets/cooperative-4fe879591997da39d38e94f6f5eb3b688aa827fa42cb8fd73d21bc96ed880236.js rename to public/assets/cooperative-874fcb0a0f1072b2245fbd18f00e0eb0e6a9e2e5b995008688b47693c3495699.js index cf5015df2..65e2ac5d7 100644 --- a/public/assets/cooperative-4fe879591997da39d38e94f6f5eb3b688aa827fa42cb8fd73d21bc96ed880236.js +++ b/public/assets/cooperative-874fcb0a0f1072b2245fbd18f00e0eb0e6a9e2e5b995008688b47693c3495699.js @@ -136047,6 +136047,151 @@ $(document).on('turbolinks:load', function() { }) } }); +$(document).on('turbolinks:load', function() { + if ($('body.cooperative-laboratory-shixuns-index-page').length > 0) { + var $searchForm = $('.laboratory-shixun-list-form .search-form'); + + $searchForm.find('select#tag_id').select2({ + placeholder: "请选择", + allowClear: true + }); + + // 上传图片 + $('.modal.cooperative-upload-file-modal').on('upload:success', function (e, data) { + var $imageElement = $('.shixun-image-' + data.source_id); + if($imageElement.length === 0) return; + $imageElement.attr('src', data.url); + $imageElement.show(); + $imageElement.next().html('重新上传'); + }); + + // 定义状态切换监听事件 + var defineStatusChangeFunc = function (doElement, undoElement, url, callback) { + $('.laboratory-shixun-list-container').on('click', doElement, function () { + var $doAction = $(this); + var $undoAction = $doAction.siblings(undoElement); + + var laboratoryShixunId = $doAction.data('id'); + customConfirm({ + content: '确认进行该操作吗?', + ok: function () { + $.ajax({ + url: '/cooperative/laboratory_shixuns/' + laboratoryShixunId + url, + method: 'POST', + dataType: 'json', + success: function () { + show_success_flash(); + $doAction.hide(); + $undoAction.show(); + if (callback && typeof callback === "function") { + callback(laboratoryShixunId, url); + } + } + }); + } + }); + }); + } + + // 首页展示与取消首页展示 + var homepageShowCallback = function (laboratoryShixunId, url) { + var $laboratoryShixunItem = $('.laboratory-shixun-list-container').find('.laboratory-shixun-item-' + laboratoryShixunId); + + if (url === '/homepage') { + $laboratoryShixunItem.find('.homepage-badge').show(); + } else { + $laboratoryShixunItem.find('.homepage-badge').hide(); + } + } + defineStatusChangeFunc('.homepage-show-action', '.homepage-hide-action', '/homepage', homepageShowCallback); + defineStatusChangeFunc('.homepage-hide-action', '.homepage-show-action', '/cancel_homepage', homepageShowCallback); + } +}) +; +$(document).on('turbolinks:load', function() { + if ($('body.cooperative-laboratory-subjects-index-page').length > 0) { + var $searchForm = $('.laboratory-subject-list-form .search-form'); + + // ************** 学校选择 ************* + $searchForm.find('.school-select').select2({ + theme: 'bootstrap4', + placeholder: '请选择创建者单位', + allowClear: true, + 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; + } + }); + + // 上传图片 + $('.modal.cooperative-upload-file-modal').on('upload:success', function (e, data) { + var $imageElement = $('.subject-image-' + data.source_id); + if($imageElement.length === 0) return; + $imageElement.attr('src', data.url); + $imageElement.show(); + $imageElement.next().html('重新上传'); + }); + + // 定义状态切换监听事件 + var defineStatusChangeFunc = function (doElement, undoElement, url, callback) { + $('.laboratory-subject-list-container').on('click', doElement, function () { + var $doAction = $(this); + var $undoAction = $doAction.siblings(undoElement); + + var laboratorySubjectId = $doAction.data('id'); + customConfirm({ + content: '确认进行该操作吗?', + ok: function () { + $.ajax({ + url: '/cooperative/laboratory_subjects/' + laboratorySubjectId + url, + method: 'POST', + dataType: 'json', + success: function () { + show_success_flash(); + $doAction.hide(); + $undoAction.show(); + if (callback && typeof callback === "function") { + callback(laboratorySubjectId, url); + } + } + }); + } + }); + }); + } + + // 首页展示与取消首页展示 + var homepageShowCallback = function (laboratoryShixunId, url) { + var $laboratoryShixunItem = $('.laboratory-subject-list-container').find('.laboratory-subject-item-' + laboratoryShixunId); + + if (url === '/homepage') { + $laboratoryShixunItem.find('.homepage-badge').show(); + } else { + $laboratoryShixunItem.find('.homepage-badge').hide(); + } + } + defineStatusChangeFunc('.homepage-show-action', '.homepage-hide-action', '/homepage', homepageShowCallback); + defineStatusChangeFunc('.homepage-hide-action', '.homepage-show-action', '/cancel_homepage', homepageShowCallback); + } +}) +; $(document).on('turbolinks:load', function() { if ($('body.cooperative-laboratory-users-index-page').length > 0) { // ============= 添加管理员 ============== @@ -136109,6 +136254,24 @@ $(document).on('turbolinks:load', function() { }); } }); +$(document).on('turbolinks:load', function () { + $('.cooperative-modal-container').on('show.bs.modal', '.modal.cooperative-edit-subject-modal', function () { + var $modal = $('.modal.cooperative-edit-subject-modal'); + var $form = $modal.find('form.cooperative-edit-subject-form'); + + $modal.on('click', '.submit-btn', function () { + $form.find('.error').html(''); + var url = $form.attr('action'); + + $.ajax({ + method: 'PATCH', + dataType: 'script', + url: url, + data: $form.serialize() + }); + }); + }) +}); $(document).on('turbolinks:load', function() { var $modal = $('.modal.cooperative-upload-file-modal'); if ($modal.length > 0) { @@ -136153,7 +136316,7 @@ $(document).on('turbolinks:load', function() { $.ajax({ method: 'POST', dataType: 'json', - url: '/cooperatives/files?' + formDataString, + url: '/cooperative/files?' + formDataString, data: new FormData($form[0]), processData: false, contentType: false, diff --git a/public/assets/cooperative-4fe879591997da39d38e94f6f5eb3b688aa827fa42cb8fd73d21bc96ed880236.js.gz b/public/assets/cooperative-874fcb0a0f1072b2245fbd18f00e0eb0e6a9e2e5b995008688b47693c3495699.js.gz similarity index 98% rename from public/assets/cooperative-4fe879591997da39d38e94f6f5eb3b688aa827fa42cb8fd73d21bc96ed880236.js.gz rename to public/assets/cooperative-874fcb0a0f1072b2245fbd18f00e0eb0e6a9e2e5b995008688b47693c3495699.js.gz index b034ad16d..8ae176f36 100644 Binary files a/public/assets/cooperative-4fe879591997da39d38e94f6f5eb3b688aa827fa42cb8fd73d21bc96ed880236.js.gz and b/public/assets/cooperative-874fcb0a0f1072b2245fbd18f00e0eb0e6a9e2e5b995008688b47693c3495699.js.gz differ diff --git a/public/react/config/webpack.config.dev.js b/public/react/config/webpack.config.dev.js index 743b3685c..f335f1705 100644 --- a/public/react/config/webpack.config.dev.js +++ b/public/react/config/webpack.config.dev.js @@ -32,7 +32,7 @@ module.exports = { // See the discussion in https://github.com/facebookincubator/create-react-app/issues/343.s // devtool: "cheap-module-eval-source-map", // 开启调试 - // devtool: "source-map", // 开启调试 + devtool: "source-map", // 开启调试 // These are the "entry points" to our application. // This means they will be the "root" imports that are included in JS bundle. // The first two entry points enable "hot" CSS and auto-refreshes for JS. diff --git a/public/react/src/modules/courses/boards/BoardsNew.js b/public/react/src/modules/courses/boards/BoardsNew.js index 6dc14b983..018d16853 100644 --- a/public/react/src/modules/courses/boards/BoardsNew.js +++ b/public/react/src/modules/courses/boards/BoardsNew.js @@ -30,7 +30,8 @@ class BoardsNew extends Component{ boards: [], title_num: 0, email_notify:false, - isemail_notify:false + isemail_notify:false, + isemail_notifys:false } } addSuccess = () => { @@ -99,7 +100,7 @@ class BoardsNew extends Component{ } }) - this.setState({ fileList: _fileList, board_name: data.board_name, title_num: parseInt(data.subject.length) ,isemail_notify:response.data.data.email_notify}) + this.setState({ fileList: _fileList, board_name: data.board_name, title_num: parseInt(data.subject.length) ,isemail_notifys:response.data.data.email_notify}) } } }) @@ -341,8 +342,8 @@ class BoardsNew extends Component{ {/* notRequired */}
    - {this.state.boardsdata&&this.state.boardsdata.email_notify===true?this.props.isAdminOrTeacher()===true? - 发送邮件提醒 + {this.state.boardsdata&&this.state.boardsdata.email_notify===true?this.props.isAdminOrTeacher()===true? + 发送邮件提醒 :"":""} { isAdmin && diff --git a/public/react/src/modules/courses/busyWork/CommonWorkSetting.js b/public/react/src/modules/courses/busyWork/CommonWorkSetting.js index 00b283f9a..1e3ced6d3 100644 --- a/public/react/src/modules/courses/busyWork/CommonWorkSetting.js +++ b/public/react/src/modules/courses/busyWork/CommonWorkSetting.js @@ -724,22 +724,28 @@ class CommonWorkSetting extends Component{ let course_id=this.props.match.params.coursesId; const url = `/homework_commons/${workId}/update_settings.json` // comments + const temp_publish_time_date = new Date(temp_publish_time) + const temp_end_time_date = new Date(temp_end_time) + const late_time_date = new Date(late_time) + const evaluation_start_date = new Date(evaluation_start) + const evaluation_end_date = new Date(evaluation_end) + const appeal_time_date = new Date(appeal_time) axios.post(url,{ course_id , unified_setting: unified_setting, // 统一设置 group_settings: group_settings_param, - publish_time: temp_publish_time ? new Date(temp_publish_time.replace(/-/g, '/')) : temp_publish_time, // 发布 - end_time: temp_end_time ? new Date(temp_end_time.replace(/-/g, '/')) : temp_end_time, // 截止 + publish_time: temp_publish_time ? !isNaN(temp_publish_time_date.getTime()) ? temp_publish_time_date : new Date(temp_publish_time.replace(/-/g, '/')) : temp_publish_time, // 发布 + end_time: temp_end_time ? !isNaN(temp_end_time_date.getTime()) ? temp_end_time_date : new Date(temp_end_time.replace(/-/g, '/')) : temp_end_time, // 截止 late_penalty: late_penalty, // 迟交扣分 allow_late: allow_late, // 是否允许补交 - late_time: late_time ? new Date(late_time.replace(/-/g, '/')) : late_time, // 补交截止时间 + late_time: late_time ? !isNaN(late_time_date.getTime()) ? late_time_date : new Date(late_time.replace(/-/g, '/')) : late_time, // 补交截止时间 anonymous_comment: anonymous_comment, // true: 启用匿评 false:未启用匿评 - evaluation_start: evaluation_start ? new Date(evaluation_start.replace(/-/g, '/')) : evaluation_start, //匿评开始时间 - evaluation_end: evaluation_end ? new Date(evaluation_end.replace(/-/g, '/')) : evaluation_end, + evaluation_start: evaluation_start ? !isNaN(evaluation_start_date.getTime()) ? evaluation_start_date : new Date(evaluation_start.replace(/-/g, '/')) : evaluation_start, //匿评开始时间 + evaluation_end: evaluation_end ? !isNaN(evaluation_end_date.getTime()) ? evaluation_end_date : new Date(evaluation_end.replace(/-/g, '/')) : evaluation_end, evaluation_num: evaluation_num, // 匿评数 absence_penalty: absence_penalty, // 匿评扣分 anonymous_appeal: anonymous_appeal, // true: 启用匿评申诉, false:未启用 - appeal_time: appeal_time ? new Date(appeal_time.replace(/-/g, '/')) : appeal_time, // 申诉结束时间 + appeal_time: appeal_time ? !isNaN(appeal_time_date.getTime()) ? appeal_time_date : new Date(appeal_time.replace(/-/g, '/')) : appeal_time, // 申诉结束时间 appeal_penalty: appeal_penalty, // 违规匿评扣分 ta_mode: ta_mode, // 1:普通模式 0:复审模式 final_mode: final_mode, // true: 单项评分优先, false: 多项评分配比 diff --git a/public/react/src/modules/courses/coursesPublic/ModulationModal.js b/public/react/src/modules/courses/coursesPublic/ModulationModal.js index 4a679b515..56ccee894 100644 --- a/public/react/src/modules/courses/coursesPublic/ModulationModal.js +++ b/public/react/src/modules/courses/coursesPublic/ModulationModal.js @@ -1,5 +1,5 @@ import React,{ Component } from "react"; -import {Modal, Checkbox, Upload, Button, Icon, message, Input, Form} from "antd"; +import {Modal, Checkbox, Upload, Button, Icon, message, Input, Form, InputNumber} from "antd"; import { WordNumberTextarea } from 'educoder'; import './Newshixunmodel.css' @@ -17,6 +17,7 @@ class ModulationModal extends Component{ Saves=()=>{ + console.log("Saves=()"); let {textareaval,Inputsval}=this.state; // if(textareaval===""||textareaval===undefined){ // this.setState({ @@ -32,7 +33,7 @@ class ModulationModal extends Component{ this.setState({ Inputsval: "", Inputsvaltype: true, - Inputsvaltest: "请输入分数", + Inputsvaltest: "请填写分数", }) return } @@ -40,10 +41,51 @@ class ModulationModal extends Component{ if (this.state.Inputsvaltype === true) { return; } + + if (Inputsval === undefined || Inputsval === null || Inputsval === "") { + this.setState({ + borredszf: "ml10 color-grey-9 bor-reds ", + Inputsval: "", + Inputsvaltype: true, + Inputsvaltest: "成绩不能为空", + }) + return + } + var re = /^[0-9]+.?[0-9]*$/; //判断字符串是否为数字 //判断正整数 /^[1-9]+[0-9]*]*$/ + var nubmer = Inputsval; + if (!re.test(nubmer)) { + this.setState({ + borredszf: "ml10 color-grey-9 bor-reds ", + Inputsval: Inputsval, + Inputsvaltype: true, + Inputsvaltest: "请输入0-100的分数", + }) + return; + } + if (0 > parseFloat(Inputsval)) { + this.setState({ + borredszf: "ml10 color-grey-9 bor-reds ", + Inputsval: Inputsval, + Inputsvaltype: true, + Inputsvaltest: "成绩不能小于零", + }) + return; + } else if (parseFloat(Inputsval) > 100) { + this.setState({ + borredszf: "ml10 color-grey-9 bor-reds ", + Inputsval: Inputsval, + Inputsvaltype: true, + Inputsvaltest: "成绩不能大于100", + }) + return; + } + + this.setState({ Inputsvaltype: false, Inputsvaltest: "", }) + console.log(Inputsval); this.props.Saves(textareaval,Inputsval) } @@ -55,31 +97,13 @@ class ModulationModal extends Component{ } setInputs=(e)=>{ - debugger - var value=parseInt(e.target.value) + console.log("setInputs"); + console.log(e); - if(isNaN(value)){ - value = 0; - this.setState({ - Inputsval: value, - Inputsvaltype: true, - Inputsvaltest: "请输入分数", - }) - }else{ - if(value<0||value>100){ - value = 0; - this.setState({ - Inputsval: value, - Inputsvaltype: true, - Inputsvaltest: "请输入0-100的分数", - }) - - } - } - this.setState({ - Inputsval: value, + this.setState({ + Inputsval: e, Inputsvaltype: false, - }) + }) } render(){ let {textareaval, Inputsval, textareavaltype, Inputsvaltype, Inputsvaltest} = this.state; @@ -100,65 +124,90 @@ class ModulationModal extends Component{ alignItems: "center", }}>
    + }}> +

    该学生的最终成绩将不会按照评分规则进行计算

    +
    +
    *调分: - *成绩: + + {Inputsvaltype === true ? + + : + "" + + } this.setInputs(e)} + value={Inputsval === undefined || Inputsval === null ? "" : Inputsval}/> + - } - /> + textAlign: "center", + lineHeight: " 40px", + marginLeft: "10px", + }} + >分
    { Inputsvaltype === true ? -

    {Inputsvaltest}

    +

    {Inputsvaltest}

    : "" } -
    - -

    调分后该学生的最终成绩将不会按照评分规则进行计算

    -
    - 调分原因: this.settextarea(e)} value={textareaval} maxlength={100} @@ -166,16 +215,19 @@ class ModulationModal extends Component{
    - {this.props.Savesname || '确认'} + {this.props.Cancelname || '取消'} - {this.props.Savesname || '保存'} -
    + +
    diff --git a/public/react/src/modules/courses/coursesPublic/ModulationModal_exercise.js b/public/react/src/modules/courses/coursesPublic/ModulationModal_exercise.js new file mode 100644 index 000000000..538b32773 --- /dev/null +++ b/public/react/src/modules/courses/coursesPublic/ModulationModal_exercise.js @@ -0,0 +1,176 @@ +import React, {Component} from "react"; +import {Modal, Checkbox, Upload, Button, Icon, message, Input, Form} from "antd"; +import {WordNumberTextarea} from 'educoder'; +import './Newshixunmodel.css' + +//调分 +class ModulationModal_exercise extends Component { + constructor(props) { + super(props); + this.state = { + score: 0, + subjective_questions: 0, + objective_questions: 0, + + + } + //因为主观题加客观题的和是总分 + } + + componentDidMount = () => { + + + } + + Saves = () => { + let {textareaval, subjective_questions, objective_questions, score} = this.state; + + // this.props.Saves(textareaval, Inputsval) + + } + + settextarea = (e) => { + this.setState({ + textareaval: e.target.value + }) + } + + setInputs = (e) => { + + + } + + render() { + let {Inputsvaltype, subjective_questions, objective_questions, score} = this.state; + return ( +
    + +
    + +
    +

    主观题成绩:

    + this.setInputs(e)} + value={subjective_questions === undefined || subjective_questions === null ? "" : subjective_questions}/> +

    分 ,

    +

    总分:45.0

    +
    + +
    + +

    客观题成绩:

    + this.setInputs(e)} + value={objective_questions === undefined || objective_questions === null ? "" : objective_questions}/> +

    分 ,

    +

    总分:45.0

    + +
    + +
    +

    最终成绩:

    + this.setInputs(e)} + value={score === undefined || score === null ? "" : score}/> +

    分 ,

    +

    总分:45.0

    + +
    + + +
    + {this.props.Cancelname || '取消'} + {this.props.Savesname || '保存'} +
    + +
    + + +
    +
    + ) + } +} + +export default ModulationModal_exercise; +//
    +//

    +// +// 该学生的最终成绩将不会按照评分规则进行计算 +// +//

    +// +// +//
    +// {/**/} +// +// this.settextarea(e)} +// value={textareaval} +// maxlength={100} +// /> +// +// {/*
  • 原因不能为空
  • */} +//
    +//
    +// +// +// +//
  • +// +//
  • +//
  • 分数不能为空
  • +//
    +// {this.props.Cancelname || '取消'} +// {this.props.Savesname || '保存'} +{/*
    */ +} +{/*
    */ +} diff --git a/public/react/src/modules/courses/coursesPublic/Newshixunmodel.css b/public/react/src/modules/courses/coursesPublic/Newshixunmodel.css index e31766c3f..34721fa21 100644 --- a/public/react/src/modules/courses/coursesPublic/Newshixunmodel.css +++ b/public/react/src/modules/courses/coursesPublic/Newshixunmodel.css @@ -305,8 +305,27 @@ margin: 10px 10px 0px 10px; padding: 10px 10px 5px 10px; backgroud: rgba(234, 234, 234, 1); - width: 335px; + width: 530px; + margin-left: 10px; + margin-top: 25px; + height: 214px !important; +} +.WordNumbernote .WordNumberTextarea { + outline: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + background-color: white; + text-shadow: none; + -webkit-writing-mode: horizontal-tb !important; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + resize: none; + border: none; + width: 100%; + height: 169px !important; + border: none; + display: block; } .WordNumberTextarea-count { @@ -325,3 +344,30 @@ border: 1px solid #eee !important; } + +.mexertwo { + display: flex; + flex-direction: initial; +} + +.mexeheigth { + line-height: 40px; +} + +.mexeheigth2 { + line-height: 40px; + width: 74px; +} + +.minbuttionte { + /* display: flex; */ + margin-top: 27px; + width: 100%; + /* align-items: center; */ + margin-bottom: 17px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + flex-direction: initial; +} diff --git a/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js b/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js index 1f8674850..d6a99f5d1 100644 --- a/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js +++ b/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js @@ -24,6 +24,7 @@ import {getImageUrl, toPath, sortDirections} from 'educoder'; import CheckBoxGroup from "../../page/component/CheckBoxGroup"; import NoneData from '../../../modules/courses/coursesPublic/NoneData' import ModulationModal from "../coursesPublic/ModulationModal"; +import ModulationModal_exercise from "../coursesPublic/ModulationModal_exercise"; const Search = Input.Search; const RadioGroup = Radio.Group; const CheckboxGroup = Checkbox.Group; @@ -1030,9 +1031,10 @@ class Studentshavecompletedthelist extends Component { render: (text, record) => ( {record.finalscore==="--"? - - -- - + + + -- : ( {record.finalscore==="--"? - - -- - + -- : this.Adjustment(record)}*/ + {/* target="_blank"*/ } - {/*>调分*/ + {/* onClick={() => this.Adjustment(record.user_id)}>评阅*/ } // //console.log("Studentshavecompletedthelist"); // //console.log(props.current_status); @@ -1807,6 +1809,9 @@ class Studentshavecompletedthelist extends Component { course_groups: response.data.course_groups, mylistansum:response.data.exercise_types.answer_users+response.data.exercise_types.unanswer_users, loadingstate: false, + subjective: response.data.exercise_types.subjective, + objective_score: response.data.exercise_types.objective_score, + subjective_score: response.data.exercise_types.subjective_score, columnsys: arr, }) } else { @@ -1839,6 +1844,9 @@ class Studentshavecompletedthelist extends Component { exercise_users: response.data.exercise_users, course_groups: response.data.course_groups, mylistansum:response.data.exercise_types.answer_users+response.data.exercise_types.unanswer_users, + subjective: response.data.exercise_types.subjective, + objective_score: response.data.exercise_types.objective_score, + subjective_score: response.data.exercise_types.subjective_score, columnsys: arr, }) } @@ -1876,6 +1884,9 @@ class Studentshavecompletedthelist extends Component { course_groups: response.data.course_groups, mylistansum:response.data.exercise_types.answer_users+response.data.exercise_types.unanswer_users, loadingstate: false, + subjective: response.data.exercise_types.subjective, + objective_score: response.data.exercise_types.objective_score, + subjective_score: response.data.exercise_types.subjective_score, columnsys: arr, }) } else { @@ -1908,6 +1919,9 @@ class Studentshavecompletedthelist extends Component { course_groups: response.data.course_groups, mylistansum:response.data.exercise_types.answer_users+response.data.exercise_types.unanswer_users, loadingstate: false, + subjective: response.data.exercise_types.subjective, + objective_score: response.data.exercise_types.objective_score, + subjective_score: response.data.exercise_types.subjective_score, columnsys: arr, }) } @@ -1940,6 +1954,9 @@ class Studentshavecompletedthelist extends Component { course_groups: response.data.course_groups, mylistansum:response.data.exercise_types.answer_users+response.data.exercise_types.unanswer_users, columnsys: arr, + subjective: response.data.exercise_types.subjective, + objective_score: response.data.exercise_types.objective_score, + subjective_score: response.data.exercise_types.subjective_score, }) } else { var arr =[]; @@ -1965,6 +1982,9 @@ class Studentshavecompletedthelist extends Component { course_groups: response.data.course_groups, mylistansum:response.data.exercise_types.answer_users+response.data.exercise_types.unanswer_users, columnsys:arr, + subjective: response.data.exercise_types.subjective, + objective_score: response.data.exercise_types.objective_score, + subjective_score: response.data.exercise_types.subjective_score, }) } } else { @@ -1981,6 +2001,9 @@ class Studentshavecompletedthelist extends Component { mylistansum:response.data.exercise_types.answer_users+response.data.exercise_types.unanswer_users, loadingstate: false, columnsys: this.state.columnsystwo, + subjective: response.data.exercise_types.subjective, + objective_score: response.data.exercise_types.objective_score, + subjective_score: response.data.exercise_types.subjective_score, }) } else { var arr =[]; @@ -2007,6 +2030,9 @@ class Studentshavecompletedthelist extends Component { mylistansum:response.data.exercise_types.answer_users+response.data.exercise_types.unanswer_users, loadingstate: false, columnsys: arr, + subjective: response.data.exercise_types.subjective, + objective_score: response.data.exercise_types.objective_score, + subjective_score: response.data.exercise_types.subjective_score, }) } @@ -2594,9 +2620,9 @@ class Studentshavecompletedthelist extends Component { var exercise_id = this.props.match.params.Id; let url = `/exercises/${exercise_id}/adjust_score.json`; axios.post(url, { - score: n, user_id: this.state.exeuserid, - comment: v, + subjective_score: n, + objective_score: v, }) .then((response) => { if (response.data.status == '0') { @@ -2647,6 +2673,13 @@ class Studentshavecompletedthelist extends Component { Cancel={() => this.Adjustments()} Saves={(value, num) => this.Testpapergrading(value, num)} /> : ""} + {/*{*/} + {/* testpapergradingboll === true ? this.Adjustments()}*/} + {/* Saves={(value, num) => this.Testpapergrading(value, num)}*/} + {/* /> : ""*/} + {/*}*/}
      diff --git a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js index 275044029..1398e18c1 100644 --- a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js +++ b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js @@ -443,7 +443,7 @@ class Testpapersettinghomepage extends Component{ this.setgameexercise(`/courses/${this.props.match.params.coursesId}/exercises/${this.props.match.params.Id}/users/${this.props.current_user.login}`)}>开始答题: - {exercise_status===2?"":exercise_status===3?"":exercise_status===4?"":start_Value[exercise_status]} + {exercise_status===2?start_Value[Commonheadofthetestpaper&&Commonheadofthetestpaper.user_permission.current_status]:exercise_status===3?"":exercise_status===4?"":start_Value[Commonheadofthetestpaper&&Commonheadofthetestpaper.user_permission.current_status]} :""} diff --git a/public/react/src/modules/courses/gradinforms/Bullsubdirectory.js b/public/react/src/modules/courses/gradinforms/Bullsubdirectory.js index e27bce251..729308852 100644 --- a/public/react/src/modules/courses/gradinforms/Bullsubdirectory.js +++ b/public/react/src/modules/courses/gradinforms/Bullsubdirectory.js @@ -211,6 +211,59 @@ class Bullsubdirectory extends Component{ }); } + //上移 + Moveupward = (id) => { + let url = `/courses/${this.props.match.params.coursesId}/inform_up.json`; + axios.post(url, { + inform_id: id + }).then((response) => { + if (response) { + if (response.data) { + if (response.data.status === 0) { + this.props.showNotification(`上移成功`); + this.props.getinputdata(); + } else { + this.props.showNotification(`上移失败`); + } + } else { + this.props.showNotification(`上移失败`); + } + } else { + this.props.showNotification(`上移失败`); + } + }).catch((error) => { + console.log(error) + }); + } + //下移 + Movedown = (id) => { + let url = `/courses/${this.props.match.params.coursesId}/inform_down.json`; + axios.post(url, { + inform_id: id + }).then((response) => { + if (response) { + if (response.data) { + if (response.data.status === 0) { + this.props.showNotification(`下移成功`); + this.props.getinputdata(); + } else { + this.props.showNotification(`下移失败`); + } + } else { + this.props.showNotification(`下移失败`); + } + } else { + this.props.showNotification(`下移失败`); + } + }).catch((error) => { + console.log(error) + }); + } + + + + + render(){ let{description,whethertoeditysl,addonAfter,eduintits,informs,isSpinysl} =this.state; @@ -269,6 +322,42 @@ class Bullsubdirectory extends Component{ :"" } + { + this.props.length - 1 === this.props.index ? "" : + this.props.isAdmin() === true ? + (this.props.yslbool === false ? + this.Movedown(this.props.id)} + > + : + "" + ) + : "" + } + { + this.props.index === 0 ? "" : + this.props.isAdmin() === true ? + (this.props.yslbool === false ? + this.Moveupward(this.props.id)} + > + : + "" + ) + : "" + }
    diff --git a/public/react/src/modules/courses/gradinforms/Eduinforms.js b/public/react/src/modules/courses/gradinforms/Eduinforms.js index 103877c98..4cb42eff9 100644 --- a/public/react/src/modules/courses/gradinforms/Eduinforms.js +++ b/public/react/src/modules/courses/gradinforms/Eduinforms.js @@ -491,9 +491,12 @@ class Eduinforms extends Component{ :
    + {/*公告栏底部*/} { informs&&informs.map((item, index) => { return ( - this.getyslbooltrue()} getyslboolfalse={()=>this.getyslboolfalse()} getinputdata={()=>this.getinputdata()} > @@ -524,4 +527,4 @@ export default Eduinformss; {/*
    */} {/* {item.name===""?"":item.name===undefined?"":item.name===null?"":
    {item.name}
    }*/} {/*
    */} -{/*
    */} \ No newline at end of file +{/*
    */} diff --git a/public/react/src/modules/courses/poll/PollDetailTabSecond.js b/public/react/src/modules/courses/poll/PollDetailTabSecond.js index f52e77dd8..c4a743ac6 100644 --- a/public/react/src/modules/courses/poll/PollDetailTabSecond.js +++ b/public/react/src/modules/courses/poll/PollDetailTabSecond.js @@ -1,5 +1,5 @@ import React,{ Component } from "react"; -import { Pagination} from "antd"; +import { Pagination , Spin } from "antd"; import NoneData from "../coursesPublic/NoneData" import '../css/members.css' @@ -16,10 +16,14 @@ class PollDetailTabSecond extends Component{ page:1, limit:10, questions:undefined, - questionsInfo:undefined + questionsInfo:undefined, + isSpin:false } } getInfo=(page)=>{ + this.setState({ + isSpin:true + }) let pollId=this.props.match.params.pollId; let url=`/polls/${pollId}/commit_result.json?page=${page}`; axios.get(url).then((result)=>{ @@ -27,7 +31,8 @@ class PollDetailTabSecond extends Component{ this.setState({ page: page, questions:result.data.questions, - questionsInfo:result.data.question_types + questionsInfo:result.data.question_types, + isSpin:false }) } }).catch((error)=>{ @@ -56,11 +61,12 @@ class PollDetailTabSecond extends Component{ } render(){ - let {page, limit, questions, questionsInfo} = this.state; + let {page, limit, questions, questionsInfo , isSpin} = this.state; return( +
    { - questions && questions.length>0?questions.map((item,key)=>{ + questions && questions.length>0 && questions.map((item,key)=>{ return(
    @@ -90,8 +96,9 @@ class PollDetailTabSecond extends Component{

    { item.question.question_type==3? -

      - 文本答案 +
        + 编号 + 文本答案
      :
        @@ -105,19 +112,22 @@ class PollDetailTabSecond extends Component{ {/* 主观题 */} { item.question.question_type == 3 && item.question.vote_text && -
        -
          - - { - item.question.vote_text.map((txt,t)=>{ - return( -
        • {t+1}.{txt}
        • - ) - }) - } -
          -
        -
        + + { + item.question.vote_text.map((txt,t)=>{ + return( +
        +
          + {t+1} + +
        • {txt}
        • +
          +
        +
        + ) + }) + } +
        } {/* 单选和多选 */} { @@ -166,7 +176,10 @@ class PollDetailTabSecond extends Component{
    ) - }): + }) + } + { + questions && questions.length == 0 && } { questionsInfo && questionsInfo.q_counts > limit && @@ -177,6 +190,7 @@ class PollDetailTabSecond extends Component{ }
    +
    ) } } diff --git a/public/react/src/modules/courses/poll/PollDetailTabThird.js b/public/react/src/modules/courses/poll/PollDetailTabThird.js index 32d35818d..1e03adb5a 100644 --- a/public/react/src/modules/courses/poll/PollDetailTabThird.js +++ b/public/react/src/modules/courses/poll/PollDetailTabThird.js @@ -1,5 +1,5 @@ import React,{ Component } from "react"; - +import { Spin } from 'antd'; import '../css/members.css' import '../css/busyWork.css' import './pollStyle.css' @@ -12,10 +12,14 @@ class PollDetailTabThird extends Component{ constructor(props){ super(props); this.state={ - pollDetail:undefined + pollDetail:undefined, + isSpin:false } } getPollInfo=()=>{ + this.setState({ + isSpin:true + }) let pollId=this.props.match.params.pollId; let url=`/polls/${pollId}.json`; axios.get(url).then((result)=>{ @@ -23,12 +27,14 @@ class PollDetailTabThird extends Component{ if (result.data.status === 401) { //未登入 this.setState({ - pollDetail: undefined + pollDetail: undefined, + isSpin:false }) return } this.setState({ - pollDetail:result.data + pollDetail:result.data, + isSpin:false }) } }).catch((error)=>{ @@ -39,10 +45,12 @@ class PollDetailTabThird extends Component{ this.getPollInfo(); } render(){ - let {pollDetail}=this.state; + let {pollDetail , isSpin}=this.state; return(
    - + + +
    ) } diff --git a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js index 9f532bc69..e43be32ea 100644 --- a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js +++ b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js @@ -43,6 +43,7 @@ const {Option} = Select; //GraduationTaskssetting.js //作品列表(学生) +let allow_lates=false; class Listofworksstudentone extends Component { //unifiedsetting 统一设置 //allowreplenishment 允许补交 @@ -288,7 +289,11 @@ class Listofworksstudentone extends Component { ), }, { - title: '实战耗时', + title:实训总耗时 + 计算规则:
    + 学员离开实训学习界面停止计时;
    + 评测首次通过之后,停止计时
    + }>
    , dataIndex: 'cost_time', key: 'cost_time', align: 'center', @@ -383,7 +388,19 @@ class Listofworksstudentone extends Component { ) }, { - title: '效率分', + title: 效率分 + 补交结束时,系统根据学生在课堂成员中的
    + 效率表现自动评分。计算规则:
    + 学生工作效率= log(实训总得分/实训总耗时)
    + 学生效率分 = 学生工作效率 / 课堂学生最高
    + 工作效率 * 分值
    + :
    +					作业截止时,系统根据学生在课堂成员中的
    + 效率表现自动评分。计算规则:
    + 学生工作效率= log(实训总得分/实训总耗时)
    + 学生效率分 = 学生工作效率 / 课堂学生最高
    + 工作效率 * 分值
    +
    }>
    , dataIndex: 'efficiencyscore', key: 'efficiencyscore', align: 'center', @@ -645,7 +662,11 @@ class Listofworksstudentone extends Component { ), }, { - title: '实战耗时', + title:实训总耗时 + 计算规则:
    + 学员离开实训学习界面停止计时;
    + 评测首次通过之后,停止计时
    + }>
    , dataIndex: 'cost_time', key: 'cost_time', align: 'center', @@ -736,7 +757,19 @@ class Listofworksstudentone extends Component { ) }, { - title: '效率分', + title: 效率分 + 补交结束时,系统根据学生在课堂成员中的
    + 效率表现自动评分。计算规则:
    + 学生工作效率= log(实训总得分/实训总耗时)
    + 学生效率分 = 学生工作效率 / 课堂学生最高
    + 工作效率 * 分值
    + :
    +					作业截止时,系统根据学生在课堂成员中的
    + 效率表现自动评分。计算规则:
    + 学生工作效率= log(实训总得分/实训总耗时)
    + 学生效率分 = 学生工作效率 / 课堂学生最高
    + 工作效率 * 分值
    +
    }>
    , dataIndex: 'efficiencyscore', key: 'efficiencyscore', align: 'center', @@ -953,7 +986,11 @@ class Listofworksstudentone extends Component { }, { - title: '实战耗时', + title:实训总耗时 + 计算规则:
    + 学员离开实训学习界面停止计时;
    + 评测首次通过之后,停止计时
    + }>
    , dataIndex: 'cost_time', key: 'cost_time', align: 'center', @@ -1007,18 +1044,11 @@ class Listofworksstudentone extends Component { className: 'font-14', render: (text, record) => ( - - -
    已通过{record.completion}关,共{this.state.challenges_count}关
    -
    完成任务评测之前查看了参考答案:{record.view_answer_count}关
    -
    }> {record.completion + "/" + this.state.challenges_count} - - - + ) }, { @@ -1043,7 +1073,19 @@ class Listofworksstudentone extends Component { ) }, { - title: '效率分', + title: 效率分 + 补交结束时,系统根据学生在课堂成员中的
    + 效率表现自动评分。计算规则:
    + 学生工作效率= log(实训总得分/实训总耗时)
    + 学生效率分 = 学生工作效率 / 课堂学生最高
    + 工作效率 * 分值
    + :
    +					作业截止时,系统根据学生在课堂成员中的
    + 效率表现自动评分。计算规则:
    + 学生工作效率= log(实训总得分/实训总耗时)
    + 学生效率分 = 学生工作效率 / 课堂学生最高
    + 工作效率 * 分值
    +
    }>
    , dataIndex: 'efficiencyscore', key: 'efficiencyscore', align: 'center', @@ -1053,22 +1095,14 @@ class Listofworksstudentone extends Component { { record.efficiencyscore && record.efficiencyscore === "--" ? ( this.state.allow_late && this.state.allow_late === false ? - -
    作业截止时,系统根据学生在课堂成员中的效率表现自动评分
    - }> -- -
    : this.state.allow_late && this.state.allow_late === true ? - -
    补交结束时,系统根据学生在课堂成员中的效率表现自动评分
    - }> -- -
    : -- @@ -1104,7 +1138,7 @@ class Listofworksstudentone extends Component { { record.ultimate_score === true ? -
    {record.user_name}{record.user_login}
    + {/*
    {record.user_name}{record.user_login}
    */}
    {record.finalscore === "--" ? 最终调整成绩:0分 : 最终调整成绩:{record.finalscore}分}
    }> @@ -1130,16 +1164,21 @@ class Listofworksstudentone extends Component {
    : -
    {record.user_name}{record.user_login}
    -
    完成任务评测之前查看了参考答案:{record.view_answer_count}关
    + {/*
    {record.user_name}{record.user_login}
    */} +
    {record.levelscore === "--" ? 关卡得分:0分 : 关卡得分:{record.levelscore}分}
    +
    {record.efficiencyscore === "--" ? 效率评分:0分 : 效率评分:{record.efficiencyscore}分}
    +
    {record.late_penalty === "--" ? 迟交扣分:0分 : 迟交扣分:{record.late_penalty}分}
    -
    {record.finalscore === "--" ? 当前成绩:0分 : - 当前成绩:{record.finalscore}分}
    + + {record.view_answer_count===null?"":
    查看参考答案:{record.view_answer_count}关
    } + +
    {record.finalscore === "--" ? 最终成绩:0分 : + 最终成绩:{record.finalscore}分}
    }> { record.finalscore && record.finalscore === "--" ? @@ -1175,13 +1214,13 @@ class Listofworksstudentone extends Component { className: 'font-14', render: (text, record) => ( record.submitstate === "未提交" ? - - -- - : + this.Viewstudenttraininginformationtysl2(e, record)} + onClick={() => this.Viewstudenttraininginformationt(record)}>评阅 : this.Viewstudenttraininginformationtysl2(e, record)} - onClick={() => this.Viewstudenttraininginformationt(record)}>查看 + onClick={() => this.Viewstudenttraininginformationt(record)}>评阅 ) }, @@ -1304,7 +1343,11 @@ class Listofworksstudentone extends Component { // ), // }, { - title: '实战耗时', + title:实训总耗时 + 计算规则:
    + 学员离开实训学习界面停止计时;
    + 评测首次通过之后,停止计时
    + }>
    , dataIndex: 'cost_time', key: 'cost_time', align: 'center', @@ -1341,18 +1384,11 @@ class Listofworksstudentone extends Component { className: 'font-14', render: (text, record) => ( - - -
    已通过{record.completion}关,共{this.state.challenges_count}关
    -
    完成任务评测之前查看了参考答案:{record.view_answer_count}关
    - }> - {record.completion + "/" + this.state.challenges_count} -
    - -
    + {record.completion + "/" + this.state.challenges_count} +
    ) }, { @@ -1377,7 +1413,19 @@ class Listofworksstudentone extends Component { ) }, { - title: '效率分', + title: 效率分 + 补交结束时,系统根据学生在课堂成员中的
    + 效率表现自动评分。计算规则:
    + 学生工作效率= log(实训总得分/实训总耗时)
    + 学生效率分 = 学生工作效率 / 课堂学生最高
    + 工作效率 * 分值
    + :
    +					作业截止时,系统根据学生在课堂成员中的
    + 效率表现自动评分。计算规则:
    + 学生工作效率= log(实训总得分/实训总耗时)
    + 学生效率分 = 学生工作效率 / 课堂学生最高
    + 工作效率 * 分值
    +
    }>
    , dataIndex: 'efficiencyscore', key: 'efficiencyscore', align: 'center', @@ -1387,22 +1435,14 @@ class Listofworksstudentone extends Component { { record.efficiencyscore && record.efficiencyscore === "--" ? ( this.state.allow_late && this.state.allow_late === false ? - -
    作业截止时,系统根据学生在课堂成员中的效率表现自动评分
    - }> -- -
    : this.state.allow_late && this.state.allow_late === true ? - -
    补交结束时,系统根据学生在课堂成员中的效率表现自动评分
    - }> -- -
    : -- @@ -1438,7 +1478,7 @@ class Listofworksstudentone extends Component { { record.ultimate_score === true ? -
    {record.user_name}{record.user_login}
    + {/*
    {record.user_name}{record.user_login}
    */}
    {record.finalscore === "--" ? 最终调整成绩:0分 : 最终调整成绩:{record.finalscore}分}
    }> @@ -1464,16 +1504,21 @@ class Listofworksstudentone extends Component {
    : -
    {record.user_name}{record.user_login}
    -
    完成任务评测之前查看了参考答案:{record.view_answer_count}关
    + {/*
    {record.user_name}{record.user_login}
    */} +
    {record.levelscore === "--" ? 关卡得分:0分 : 关卡得分:{record.levelscore}分}
    +
    {record.efficiencyscore === "--" ? 效率评分:0分 : 效率评分:{record.efficiencyscore}分}
    +
    {record.late_penalty === "--" ? 迟交扣分:0分 : 迟交扣分:{record.late_penalty}分}
    -
    {record.finalscore === "--" ? 当前成绩:0分 : - 当前成绩:{record.finalscore}分}
    + + {record.view_answer_count===null?"":
    查看参考答案:{record.view_answer_count}关
    } + +
    {record.finalscore === "--" ? 最终成绩:0分 : + 最终成绩:{record.finalscore}分}
    }> { record.finalscore && record.finalscore === "--" ? @@ -1509,13 +1554,13 @@ class Listofworksstudentone extends Component { className: 'font-14', render: (text, record) => ( record.submitstate === "未提交" ? - - -- - : + this.Viewstudenttraininginformationtysl2(e, record)} + onClick={() => this.Viewstudenttraininginformationt(record)}>评阅 : this.Viewstudenttraininginformationtysl2(e, record)} - onClick={() => this.Viewstudenttraininginformationt(record)}>{record.operating} + onClick={() => this.Viewstudenttraininginformationt(record)}>评阅 ) }, @@ -1711,6 +1756,7 @@ class Listofworksstudentone extends Component { homework_status: result.data.homework_status, update_score: result.data.update_score }); + allow_lates=result.data.allow_late; this.seacthdatat(result.data, result.data.student_works, result.data.work_efficiency, result.data.course_group_info, 1); if (result.data.student_works === undefined || result.data.student_works === null || JSON.stringify(result.data.student_works) === "[]") { @@ -2419,6 +2465,7 @@ class Listofworksstudentone extends Component { challenges_count: result.data.challenges_count, homework_status: result.data.homework_status, }); + allow_lates=result.data.allow_late this.seacthdatat(result.data, result.data.student_works, result.data.work_efficiency, result.data.course_group_info, page); this.props.Getdataback(result, result.data); // } diff --git a/public/react/src/modules/courses/shixunHomework/ShixunWorkReport.js b/public/react/src/modules/courses/shixunHomework/ShixunWorkReport.js index 2a2ed9a9e..737ed4c00 100644 --- a/public/react/src/modules/courses/shixunHomework/ShixunWorkReport.js +++ b/public/react/src/modules/courses/shixunHomework/ShixunWorkReport.js @@ -72,10 +72,10 @@ class ShixunWorkReport extends Component { }) } }else { - this.props.slowDownload(url) + // this.props.slowDownload(url) - // this.props.showNotification(`正在下载中`); - // window.open("/api"+url+'?export=true', '_blank'); + this.props.showNotification(`正在下载中`); + window.open("/api"+url+'?export=true', '_blank'); this.setState({ isspinning: false }) } }).catch((error) => { diff --git a/public/react/src/modules/login/LoginDialog.css b/public/react/src/modules/login/LoginDialog.css index 37e2f48b6..833a17e3d 100644 --- a/public/react/src/modules/login/LoginDialog.css +++ b/public/react/src/modules/login/LoginDialog.css @@ -151,3 +151,11 @@ .textcenter{ text-align: center; } + +.zindextest { + z-index: 1000 !important; +} + +.MuiModal-root-15 { + z-index: 1000 !important; +} diff --git a/public/react/src/modules/login/LoginDialog.js b/public/react/src/modules/login/LoginDialog.js index 1fa52670e..cf78d97e0 100644 --- a/public/react/src/modules/login/LoginDialog.js +++ b/public/react/src/modules/login/LoginDialog.js @@ -476,10 +476,28 @@ class LoginDialog extends Component { if (response.data.status === 402) { // window.location.href = response.data.url; }else if (response.data.status === -2) { - notification.open({ - message: '提示', - description:response.data.message, - }); + if (response.data.message === "登录密码出错已达上限,账号已被锁定, 请10分钟后重新登录或找回密码") { + const messge = ( +
    +

    + 登录密码出错已达上限,账号已被锁定; +

    +

    + 请10分钟后重新登录或找回密码 +

    +
    + ) + this.openNotifications(messge); + } else { + notification.open({ + message: '提示', + description: response.data.message, + duration: 5, + }); + } }else{ @@ -529,6 +547,17 @@ class LoginDialog extends Component { weixinlogin:true }) } + openNotifications = (btn) => { + // type 1 成功提示绿色 2提醒颜色黄色 3错误提示红色 + notification.open({ + message: "提示", + description: btn, + duration: 5, + onClick: () => { + + }, + }); + } openqqlogin=()=>{ this.setState({ qqlogin:true @@ -543,13 +572,17 @@ class LoginDialog extends Component { `https://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=716027609&pt_3rd_aid=101508858&daid=383&pt_skey_valid=0&style=35&s_url=http%3A%2F%2Fconnect.qq.com&refer_cgi=authorize&which=&client_id=101508858&response_type=code&scope=get_user_info&redirect_uri=https%3a%2f%2ftest-newweb.educoder.net%2fotherloginqq&response_type=code` ) } - + + getTContainer = () => { + return document.body; + } hideweixinlogin=()=>{ this.setState({ weixinlogin:false, qqlogin:false }) } + render() { let{qqlogin,login,isGoing,isGoingValue,disabled,bottonclass,Phonenumberisnotco, dialogBox, isRender,weixinlogin}=this.state; @@ -560,9 +593,10 @@ class LoginDialog extends Component { // console.log(this.props) return ( this.handleDialogClose()} > this.inputOnBlur(e, 1)} - value={this.state.loginValue} - name="username" - placeholder="请输入有效的手机号/邮箱号" > + type="text" + className="input-100-45 mt20" + id="name_loggin_input" + ref="loginPassText" + onInput={this.loginChange} + onBlur={(e) => this.inputOnBlur(e, 1)} + onPressEnter={disabled === false ? + this.loginEDU : () => { + } + // console.log(1) + } + value={this.state.loginValue} + name="username" + placeholder="请输入有效的手机号/邮箱号" >

    {Phonenumberisnotco}

    + name="password" + ref="passwordText" + onInput={this.passwordChange} + onKeyDown={this.onKeydowns} + className="input-100-45 mt5" + onPressEnter={disabled === false ? + this.loginEDU : () => { + } + // console.log(1) + } + placeholder="密码" >

    @@ -662,7 +706,8 @@ class LoginDialog extends Component { - this.getloginurl("/changepassword")} className="mr3 color-grey-9">忘记密码 + this.getloginurl("/changepassword")} + className="mr3 color-grey-9">找回密码 this.getloginurl("/register")} className="color-grey-9">注册 diff --git a/public/react/src/modules/osshackathon/Osshackathon.css b/public/react/src/modules/osshackathon/Osshackathon.css index 2bbaa1574..7fecb7d9c 100644 --- a/public/react/src/modules/osshackathon/Osshackathon.css +++ b/public/react/src/modules/osshackathon/Osshackathon.css @@ -42,6 +42,9 @@ font-weight:400; color:rgba(5,16,26,1); line-height:24px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } .ant-input::-webkit-input-placeholder{ diff --git a/public/react/src/modules/osshackathon/Osshackathon.js b/public/react/src/modules/osshackathon/Osshackathon.js index aa3b40d4a..9e09aeeec 100644 --- a/public/react/src/modules/osshackathon/Osshackathon.js +++ b/public/react/src/modules/osshackathon/Osshackathon.js @@ -39,14 +39,16 @@ class Osshackathon extends Component { search:search, }}).then((result)=>{ if(result.status==200){ - console.log(result) this.setState({ data:result.data, spinning:false }) + }else{ + this.setState({ + spinning:false + }) } }).catch((error)=>{ - console.log(error); this.setState({ spinning:true }) @@ -92,6 +94,15 @@ class Osshackathon extends Component { Signupentry=(id)=>{ // 用户报名 + if(this.props.checkIfLogin()===false){ + this.props.showLoginDialog() + return + } + if(this.props.checkIfProfileCompleted()===false){ + this.props.showProfileCompleteDialog() + return + } + this.props.confirm({ content: `是否确认报名?`, onOk: () => { @@ -157,7 +168,7 @@ class Osshackathon extends Component { .then((response) => { if (response.data.status == 0) { // {"status":1,"message":"删除成功"} - this.getosshackathonlist() + this.getosshackathonlist(); this.props.showNotification(`删除成功`); } }) @@ -172,6 +183,9 @@ class Osshackathon extends Component { this.setState({ search:value }) + if(value.length>300){ + this.props.showNotification(`搜索字数大于300个字`); + } let {page,limit,search}=this.state; this.getosshackathon(page,limit,value) } @@ -280,7 +294,7 @@ class Osshackathon extends Component { return( - + {item.name} @@ -319,7 +333,7 @@ class Osshackathon extends Component { return( - + {item.name} @@ -346,7 +360,7 @@ class Osshackathon extends Component {

    - + {item.description} diff --git a/public/react/src/modules/osshackathon/Osshackathonmodel.js b/public/react/src/modules/osshackathon/Osshackathonmodel.js index 296847510..f9d170695 100644 --- a/public/react/src/modules/osshackathon/Osshackathonmodel.js +++ b/public/react/src/modules/osshackathon/Osshackathonmodel.js @@ -100,7 +100,7 @@ class Osshackathonmodel extends Component{ render() { let {textareavaltype}=this.state; // console.log(this.props.tabkey) - console.log(this.props.Osshackathonmodeltype) + // console.log(this.props.Osshackathonmodeltype) return (
    @@ -139,7 +139,7 @@ class Osshackathonmodel extends Component{ {
  • 后台管理
  • } -
  • 账号管理
  • - +
  • 账号管理
  • + {/*
  • this.educoderlogin()} >登入测试接口
  • */} + {/*
  • this.trialapplications()} >试用申请
  • */} + {/*
  • 兴趣页
  • */}
  • diff --git a/public/react/src/modules/user/LoginRegisterComponent.js b/public/react/src/modules/user/LoginRegisterComponent.js index 9a11ac91a..41954a3fb 100644 --- a/public/react/src/modules/user/LoginRegisterComponent.js +++ b/public/react/src/modules/user/LoginRegisterComponent.js @@ -184,7 +184,17 @@ class LoginRegisterComponent extends Component { message: "提示", description: messge, onClick: () => { - console.log('Notification Clicked!'); + console.log('Notification Clicked12312313123!'); + }, + }); + } + openNotifications = (btn) => { + // type 1 成功提示绿色 2提醒颜色黄色 3错误提示红色 + notification.open({ + message: "提示", + description: btn, + onClick: () => { + }, }); } @@ -369,8 +379,23 @@ class LoginRegisterComponent extends Component { }) return; - } - else { + } else if (response.data.message === "登录密码出错已达上限,账号已被锁定, 请10分钟后重新登录或找回密码") { + const messge = ( +
    +

    + 登录密码出错已达上限,账号已被锁定; +

    +

    + 请10分钟后重新登录或找回密码 +

    +
    + ) + this.openNotifications(messge); + return; + } else { this.openNotification(response.data.message); return; } @@ -1012,7 +1037,9 @@ class LoginRegisterComponent extends Component { name="username" className={Phonenumberisnotco && Phonenumberisnotco !== "" ?" color-grey-9 loginInputzhucheyslass bor-reds":" color-grey-9 loginInputzhuche"} onBlur={(e) => this.inputOnBlur(e, 1)} - style={{marginTop: '30px', height: '38px'}}> + style={{marginTop: '30px', height: '38px'}} + onPressEnter={() => this.postLogin()} + > { Phonenumberisnotco && Phonenumberisnotco != "" ? @@ -1022,8 +1049,9 @@ class LoginRegisterComponent extends Component { :
    } - this.postLogin()} className={Phonenumberisnotcodmm && Phonenumberisnotcodmm !== "" ?" color-grey-9 loginInputzhucheyslass bor-reds":" color-grey-9 loginInputzhuche"} placeholder="密码"> { diff --git a/public/react/src/modules/user/usersInfo/InfosCourse.js b/public/react/src/modules/user/usersInfo/InfosCourse.js index 7104edc59..85ae6b9c5 100644 --- a/public/react/src/modules/user/usersInfo/InfosCourse.js +++ b/public/react/src/modules/user/usersInfo/InfosCourse.js @@ -200,7 +200,7 @@ class InfosCourse extends Component{ .white-panel li.active { border-radius: 24px; - border: 0px solid #4CACFF; + border: none !important; color: #4CACFF; } diff --git a/public/react/src/modules/user/usersInfo/InfosPackage.js b/public/react/src/modules/user/usersInfo/InfosPackage.js index effbdbc20..ad2c1c0ab 100644 --- a/public/react/src/modules/user/usersInfo/InfosPackage.js +++ b/public/react/src/modules/user/usersInfo/InfosPackage.js @@ -190,7 +190,7 @@ class InfosPackage extends Component{ } .white-panel li.active { border-radius: 24px; - border: 0px solid #4CACFF; + border: none !important; color: #4CACFF; } diff --git a/public/react/src/modules/user/usersInfo/InfosPath.js b/public/react/src/modules/user/usersInfo/InfosPath.js index 968d61083..d127ff87b 100644 --- a/public/react/src/modules/user/usersInfo/InfosPath.js +++ b/public/react/src/modules/user/usersInfo/InfosPath.js @@ -202,7 +202,7 @@ class InfosPath extends Component{ .white-panel li.active { border-radius: 24px; - border: 0px solid #4CACFF; + border: none !important; color: #4CACFF; } diff --git a/public/react/src/modules/user/usersInfo/InfosProject.js b/public/react/src/modules/user/usersInfo/InfosProject.js index cd2e14265..102a26724 100644 --- a/public/react/src/modules/user/usersInfo/InfosProject.js +++ b/public/react/src/modules/user/usersInfo/InfosProject.js @@ -203,7 +203,7 @@ class InfosProject extends Component{ .white-panel li.active { border-radius: 24px; - border: 0px solid #4CACFF; + border: none !important; color: #4CACFF; } diff --git a/public/react/src/modules/user/usersInfo/InfosShixun.js b/public/react/src/modules/user/usersInfo/InfosShixun.js index f6455121e..0a63c14a0 100644 --- a/public/react/src/modules/user/usersInfo/InfosShixun.js +++ b/public/react/src/modules/user/usersInfo/InfosShixun.js @@ -203,7 +203,7 @@ class InfosShixun extends Component{ .white-panel li.active { border-radius: 24px; - border: 0px solid #4CACFF; + border: none !important; color: #4CACFF; } diff --git a/public/react/src/modules/user/usersInfo/video/InfosVideo.js b/public/react/src/modules/user/usersInfo/video/InfosVideo.js index 323706b01..a3678e56e 100644 --- a/public/react/src/modules/user/usersInfo/video/InfosVideo.js +++ b/public/react/src/modules/user/usersInfo/video/InfosVideo.js @@ -282,7 +282,7 @@ function InfoVideo (props) { } .white-panel li.active { border-radius: 24px; - border: 0px solid #4CACFF; + border: none !important; color: #4CACFF; } .whitepanelysllisyt {