From 266fcfc4c75786d31d874308d0d8c65852fe7402 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Tue, 22 Oct 2019 09:55:44 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E9=97=AE=E5=8D=B7=E7=9A=84=E7=AE=80?= =?UTF-8?q?=E7=AD=94=E9=A2=98=E5=9B=9E=E7=AD=94bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/poll_votes_controller.rb | 37 ++++++++++++++---------- app/helpers/polls_helper.rb | 2 +- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/app/controllers/poll_votes_controller.rb b/app/controllers/poll_votes_controller.rb index b1191d8ea..4a15ae301 100644 --- a/app/controllers/poll_votes_controller.rb +++ b/app/controllers/poll_votes_controller.rb @@ -16,9 +16,9 @@ class PollVotesController < ApplicationController # 当前用户的当前答案,如果已存在,当再次点击的时候,取消答案,即删除该答案 current_vote_text = nil - if user_votes.find_vote_text.present? - current_vote_text = user_votes.find_vote_text.first - end + # if user_votes.find_vote_text.present? + # current_vote_text = user_votes.find_vote_text.first + # end vote_answer_params = { :user_id => current_user.id, @@ -36,7 +36,6 @@ class PollVotesController < ApplicationController else if question_answer_text.present? - current_user_answer.update_attribute("vote_text", question_answer_text) end end @@ -48,17 +47,23 @@ class PollVotesController < ApplicationController if question_answer_ids.present? if question_answer_text.present? #有文字输入,但是不存在其他选项的 ques_vote_id = question_answer_ids.map(&:to_i).max - if current_vote_text.present? #已有其他输入文字的选项 + if user_votes.find_vote_text.present? + current_vote_text = user_votes.find_vote_text.first current_vote_text.update_attribute("vote_text", question_answer_text) else answer_option = { - :user_id => current_user.id, - :poll_question_id => @poll_question.id, - :poll_answer_id => ques_vote_id, - :vote_text => question_answer_text + :user_id => current_user.id, + :poll_question_id => @poll_question.id, + :poll_answer_id => ques_vote_id, + :vote_text => question_answer_text } PollVote.create(answer_option) end + # if current_vote_text.present? #已有其他输入文字的选项 + # current_vote_text.update_attribute("vote_text", question_answer_text) + # else + # + # end end ea_ids = user_votes.pluck(:poll_answer_id) @@ -85,12 +90,14 @@ class PollVotesController < ApplicationController user_votes.destroy_all end else #主观题的输入 - if current_vote_text.present? - if question_answer_text.present? - user_votes.first.update_attribute("vote_text", question_answer_text) - else - user_votes.destroy_all - end + # current_vote_text = user_votes.find_vote_text + if user_votes.present? + user_votes.first.update_attribute("vote_text", question_answer_text) + # if question_answer_text.present? + # user_votes.first.update_attribute("vote_text", question_answer_text) + # else + # user_votes.destroy_all + # end else PollVote.create(vote_answer_params) end diff --git a/app/helpers/polls_helper.rb b/app/helpers/polls_helper.rb index 52e90f559..03210fccd 100644 --- a/app/helpers/polls_helper.rb +++ b/app/helpers/polls_helper.rb @@ -13,7 +13,7 @@ module PollsHelper end def poll_votes_count(votes,user_ids) - votes.find_current_vote("user_id",user_ids.uniq).size + votes.find_current_vote("user_id",user_ids.uniq).reject(&:blank?).size end #公用tab页的相关信息 From afb3181f889bbc99d33dca05bd73a22af1e35960 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Tue, 22 Oct 2019 10:01:03 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E9=97=AE=E5=8D=B7=E7=9A=84=E7=AE=80?= =?UTF-8?q?=E7=AD=94=E9=A2=98=E5=9B=9E=E7=AD=94bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/poll_votes_controller.rb | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/app/controllers/poll_votes_controller.rb b/app/controllers/poll_votes_controller.rb index 4a15ae301..1690fd3ae 100644 --- a/app/controllers/poll_votes_controller.rb +++ b/app/controllers/poll_votes_controller.rb @@ -91,15 +91,17 @@ class PollVotesController < ApplicationController end else #主观题的输入 # current_vote_text = user_votes.find_vote_text - if user_votes.present? - user_votes.first.update_attribute("vote_text", question_answer_text) - # if question_answer_text.present? - # user_votes.first.update_attribute("vote_text", question_answer_text) - # else - # user_votes.destroy_all - # end - else - PollVote.create(vote_answer_params) + if question_answer_text.present? + if user_votes.present? + user_votes.first.update_attribute("vote_text", question_answer_text) + # if question_answer_text.present? + # user_votes.first.update_attribute("vote_text", question_answer_text) + # else + # user_votes.destroy_all + # end + else + PollVote.create(vote_answer_params) + end end end @current_question_number = @poll_question.question_number From e0599c03b2808ff533c7ee138a496689e1d389ee Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Tue, 22 Oct 2019 10:03:20 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E6=8A=A5=E5=91=8A?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E6=9F=A5=E7=9C=8B=E4=BA=86=E7=AD=94=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/student_works/shixun_work_report.json.jbuilder | 1 + 1 file changed, 1 insertion(+) diff --git a/app/views/student_works/shixun_work_report.json.jbuilder b/app/views/student_works/shixun_work_report.json.jbuilder index 2c9558fdc..862a6be50 100644 --- a/app/views/student_works/shixun_work_report.json.jbuilder +++ b/app/views/student_works/shixun_work_report.json.jbuilder @@ -40,6 +40,7 @@ if @shixun json.challenge_comment challenge_comment&.comment json.challenge_comment_hidden @user_course_identity < Course::STUDENT ? challenge_comment&.hidden_comment : nil json.comment_id challenge_comment&.id + json.view_answer game.answer_open != 0 end end From 7396c412f1d84e0c9f5069a10a656a2345f1e3ac Mon Sep 17 00:00:00 2001 From: p31729568 Date: Tue, 22 Oct 2019 10:05:24 +0800 Subject: [PATCH 04/13] admins: weapp setting && modify weapp home api --- .../javascripts/admins/carousels/index.js | 11 +- .../javascripts/admins/weapp_adverts/index.js | 124 ++++++ .../admins/weapp_carousels/index.js | 123 ++++++ .../cooperative/carousels/index.js | 11 +- .../stylesheets/admins/weapp_adverts.scss | 60 +++ .../stylesheets/admins/weapp_carousels.scss | 60 +++ .../admins/weapp_adverts_controller.rb | 79 ++++ .../admins/weapp_carousels_controller.rb | 80 ++++ app/controllers/weapps/homes_controller.rb | 7 +- app/models/weapp_setting.rb | 3 + app/models/weapp_settings/advert.rb | 2 + app/models/weapp_settings/carousel.rb | 3 + .../admins/drag_weapp_advert_service.rb | 32 ++ .../admins/drag_weapp_carousel_service.rb | 32 ++ app/views/admins/shared/_sidebar.html.erb | 8 + app/views/admins/shared/delete.js.erb | 3 +- app/views/admins/weapp_adverts/index.html.erb | 42 +++ .../shared/_add_weapp_advert_modal.html.erb | 35 ++ .../admins/weapp_carousels/index.html.erb | 42 +++ .../shared/_add_weapp_carousel_modal.html.erb | 35 ++ app/views/cooperative/shared/delete.js.erb | 3 +- app/views/weapps/homes/show.json.jbuilder | 19 +- config/routes.rb | 7 + .../20191022003750_create_weapp_settings.rb | 12 + ...fest-4627fa5586ef7fed55ca286af7c028e9.json | 2 +- ...479c6b1e5e904208870a63b8ee677c96b347e.css} | 144 +++++++ ...c6b1e5e904208870a63b8ee677c96b347e.css.gz} | Bin 73582 -> 73744 bytes ...46619318164e8f242635c07033e2423cc18a6f.js} | 352 +++++++++++++++++- ...19318164e8f242635c07033e2423cc18a6f.js.gz} | Bin 961433 -> 962799 bytes ...bfb7f4329ac96f28bc6446d1ff52b1e2e71286.js} | 11 +- ...7f4329ac96f28bc6446d1ff52b1e2e71286.js.gz} | Bin 953231 -> 953265 bytes 31 files changed, 1316 insertions(+), 26 deletions(-) create mode 100644 app/assets/javascripts/admins/weapp_adverts/index.js create mode 100644 app/assets/javascripts/admins/weapp_carousels/index.js create mode 100644 app/assets/stylesheets/admins/weapp_adverts.scss create mode 100644 app/assets/stylesheets/admins/weapp_carousels.scss create mode 100644 app/controllers/admins/weapp_adverts_controller.rb create mode 100644 app/controllers/admins/weapp_carousels_controller.rb create mode 100644 app/models/weapp_setting.rb create mode 100644 app/models/weapp_settings/advert.rb create mode 100644 app/models/weapp_settings/carousel.rb create mode 100644 app/services/admins/drag_weapp_advert_service.rb create mode 100644 app/services/admins/drag_weapp_carousel_service.rb create mode 100644 app/views/admins/weapp_adverts/index.html.erb create mode 100644 app/views/admins/weapp_adverts/shared/_add_weapp_advert_modal.html.erb create mode 100644 app/views/admins/weapp_carousels/index.html.erb create mode 100644 app/views/admins/weapp_carousels/shared/_add_weapp_carousel_modal.html.erb create mode 100644 db/migrate/20191022003750_create_weapp_settings.rb rename public/assets/{admin-534bde871d67f4d6fc8da611917d78be4066fc7593ba53ee92aa17068a199d6d.css => admin-60d200c1fcdf61a60537d29ccf4479c6b1e5e904208870a63b8ee677c96b347e.css} (99%) rename public/assets/{admin-534bde871d67f4d6fc8da611917d78be4066fc7593ba53ee92aa17068a199d6d.css.gz => admin-60d200c1fcdf61a60537d29ccf4479c6b1e5e904208870a63b8ee677c96b347e.css.gz} (77%) rename public/assets/{admin-1b5728d94f6bccfbcef452a760d94c3b6f31966bc65d7f89be077fc2ea512bec.js => admin-c8c127fefa5eca98bca19832c246619318164e8f242635c07033e2423cc18a6f.js} (99%) rename public/assets/{admin-1b5728d94f6bccfbcef452a760d94c3b6f31966bc65d7f89be077fc2ea512bec.js.gz => admin-c8c127fefa5eca98bca19832c246619318164e8f242635c07033e2423cc18a6f.js.gz} (98%) rename public/assets/{cooperative-149f47b8675d60a8014ccff50f00f932ff69e2be286ffb74343bc4a3effb135b.js => cooperative-9fb7ac4ad44081fafd5ad2a3a1bfb7f4329ac96f28bc6446d1ff52b1e2e71286.js} (99%) rename public/assets/{cooperative-149f47b8675d60a8014ccff50f00f932ff69e2be286ffb74343bc4a3effb135b.js.gz => cooperative-9fb7ac4ad44081fafd5ad2a3a1bfb7f4329ac96f28bc6446d1ff52b1e2e71286.js.gz} (96%) diff --git a/app/assets/javascripts/admins/carousels/index.js b/app/assets/javascripts/admins/carousels/index.js index fe665a35f..31ce3000d 100644 --- a/app/assets/javascripts/admins/carousels/index.js +++ b/app/assets/javascripts/admins/carousels/index.js @@ -1,6 +1,13 @@ $(document).on('turbolinks:load', function() { if ($('body.admins-carousels-index-page').length > 0) { var laboratoryId = $('#carousels-container').data('laboratoryId'); + var resetNo = function(){ + $('#carousels-container .custom-carousel-item-no').each(function(index, ele){ + $(ele).html(index + 1); + }) + } + // 删除后 + $(document).on('delete_success', resetNo); // ------------ 保存链接 ----------- $('.carousels-card').on('click', '.save-data-btn', function(){ @@ -67,9 +74,7 @@ $(document).on('turbolinks:load', function() { dataType: 'json', data: { move_id: moveId, after_id: insertId }, success: function(data){ - $('#carousels-container .custom-carousel-item-no').each(function(index, ele){ - $(ele).html(index + 1); - }) + resetNo(); }, error: function(res){ var data = res.responseJSON; diff --git a/app/assets/javascripts/admins/weapp_adverts/index.js b/app/assets/javascripts/admins/weapp_adverts/index.js new file mode 100644 index 000000000..74e06fbab --- /dev/null +++ b/app/assets/javascripts/admins/weapp_adverts/index.js @@ -0,0 +1,124 @@ +$(document).on('turbolinks:load', function() { + if ($('body.admins-weapp-adverts-index-page').length > 0) { + var resetNo = function(){ + $('#adverts-container .advert-item-no').each(function(index, ele){ + $(ele).html(index + 1); + }) + } + + // ------------ 保存链接 ----------- + $('.adverts-card').on('click', '.save-data-btn', function(){ + var $link = $(this); + var id = $link.data('id'); + var link = $('.advert-item-' + id).find('.link-input').val(); + $link.attr('disabled', true); + + $.ajax({ + url: '/admins/weapp_adverts/' + id, + method: 'PATCH', + dataType: 'json', + data: { link: link }, + success: function(data){ + $.notify({ message: '操作成功' }); + }, + error: ajaxErrorNotifyHandler, + complete: function(){ + $link.removeAttr('disabled'); + } + }) + }); + // -------------- 是否在首页展示 -------------- + $('.adverts-card').on('change', '.online-check-box', function(){ + var $checkbox = $(this); + var id = $checkbox.data('id'); + var checked = $checkbox.is(':checked'); + $checkbox.attr('disabled', true); + + $.ajax({ + url: '/admins/weapp_adverts/' + id, + method: 'PATCH', + dataType: 'json', + data: { online: checked }, + success: function(data){ + $.notify({ message: '保存成功' }); + var box = $('.advert-item-' + id).find('.drag'); + if(checked){ + box.removeClass('not_active'); + }else{ + box.addClass('not_active'); + } + }, + error: ajaxErrorNotifyHandler, + complete: function(){ + $checkbox.removeAttr('disabled'); + } + }) + }); + + // ------------ 拖拽 ------------- + var onDropFunc = function(el, _target, _source, sibling){ + var moveId = $(el).data('id'); + var insertId = $(sibling).data('id') || ''; + + $.ajax({ + url: '/admins/weapp_adverts/drag', + method: 'POST', + dataType: 'json', + data: { move_id: moveId, after_id: insertId }, + success: function(data){ + resetNo(); + }, + error: function(res){ + var data = res.responseJSON; + $.notify({message: '移动失败,原因:' + data.message}, {type: 'danger'}); + } + }) + }; + var ele1 = document.getElementById('adverts-container'); + dragula([ele1], { mirrorContainer: ele1 }).on('drop', onDropFunc); + + + // ----------- 新增 -------------- + var $createModal = $('.modal.admin-add-weapp-advert-modal'); + var $createForm = $createModal.find('form.admin-add-weapp-advert-form'); + + $createForm.validate({ + errorElement: 'span', + errorClass: 'danger text-danger', + rules: { + "weapp_settings_advert[image]": { + required: true + } + } + }); + + $createModal.on('show.bs.modal', function(event){ + resetFileInputFunc($createModal.find('.img-file-input')); + $createModal.find('.file-names').html('选择文件'); + }); + + $createModal.on('click', '.submit-btn', function() { + $createForm.find('.error').html(''); + + if ($createForm.valid()) { + $createForm.submit(); + } else { + $createForm.find('.error').html('请选择图片'); + } + }); + $createModal.on('change', '.img-file-input', function(){ + var file = $(this)[0].files[0]; + $createModal.find('.file-names').html(file ? file.name : '请选择文件'); + }) + + // -------------- 重新上传图片 -------------- + //replace_image_url + $('.modal.admin-upload-file-modal').on('upload:success', function(e, data){ + var $advertItem = $('.advert-item-' + data.source_id); + $advertItem.find('.advert-item-img img').attr('src', data.url); + }) + + // 删除后 + $(document).on('delete_success', resetNo) + } +}) \ No newline at end of file diff --git a/app/assets/javascripts/admins/weapp_carousels/index.js b/app/assets/javascripts/admins/weapp_carousels/index.js new file mode 100644 index 000000000..2fc63f61d --- /dev/null +++ b/app/assets/javascripts/admins/weapp_carousels/index.js @@ -0,0 +1,123 @@ +$(document).on('turbolinks:load', function() { + if ($('body.admins-weapp-carousels-index-page').length > 0) { + var resetNo = function(){ + $('#carousels-container .custom-carousel-item-no').each(function(index, ele){ + $(ele).html(index + 1); + }) + } + // ------------ 保存链接 ----------- + $('.carousels-card').on('click', '.save-data-btn', function(){ + var $link = $(this); + var id = $link.data('id'); + var link = $('.custom-carousel-item-' + id).find('.link-input').val(); + $link.attr('disabled', true); + + $.ajax({ + url: '/admins/weapp_carousels/' + id, + method: 'PATCH', + dataType: 'json', + data: { link: link }, + success: function(data){ + $.notify({ message: '操作成功' }); + }, + error: ajaxErrorNotifyHandler, + complete: function(){ + $link.removeAttr('disabled'); + } + }) + }); + // -------------- 是否在首页展示 -------------- + $('.carousels-card').on('change', '.online-check-box', function(){ + var $checkbox = $(this); + var id = $checkbox.data('id'); + var checked = $checkbox.is(':checked'); + $checkbox.attr('disabled', true); + + $.ajax({ + url: '/admins/weapp_carousels/' + id, + method: 'PATCH', + dataType: 'json', + data: { online: checked }, + success: function(data){ + $.notify({ message: '保存成功' }); + var box = $('.custom-carousel-item-' + id).find('.drag'); + if(checked){ + box.removeClass('not_active'); + }else{ + box.addClass('not_active'); + } + }, + error: ajaxErrorNotifyHandler, + complete: function(){ + $checkbox.removeAttr('disabled'); + } + }) + }); + + // ------------ 拖拽 ------------- + var onDropFunc = function(el, _target, _source, sibling){ + var moveId = $(el).data('id'); + var insertId = $(sibling).data('id') || ''; + + $.ajax({ + url: '/admins/weapp_carousels/drag', + method: 'POST', + dataType: 'json', + data: { move_id: moveId, after_id: insertId }, + success: function(data){ + resetNo(); + }, + error: function(res){ + var data = res.responseJSON; + $.notify({message: '移动失败,原因:' + data.message}, {type: 'danger'}); + } + }) + }; + var ele1 = document.getElementById('carousels-container'); + dragula([ele1], { mirrorContainer: ele1 }).on('drop', onDropFunc); + + + // ----------- 新增 -------------- + var $createModal = $('.modal.admin-add-weapp-carousel-modal'); + var $createForm = $createModal.find('form.admin-add-weapp-carousel-form'); + + $createForm.validate({ + errorElement: 'span', + errorClass: 'danger text-danger', + rules: { + "weapp_settings_carousel[image]": { + required: true + } + } + }); + + $createModal.on('show.bs.modal', function(event){ + resetFileInputFunc($createModal.find('.img-file-input')); + $createModal.find('.file-names').html('选择文件'); + }); + + $createModal.on('click', '.submit-btn', function() { + $createForm.find('.error').html(''); + + if ($createForm.valid()) { + $createForm.submit(); + } else { + $createForm.find('.error').html('请选择图片'); + } + }); + $createModal.on('change', '.img-file-input', function(){ + var file = $(this)[0].files[0]; + $createModal.find('.file-names').html(file ? file.name : '请选择文件'); + }) + + // -------------- 重新上传图片 -------------- + //replace_image_url + $('.modal.admin-upload-file-modal').on('upload:success', function(e, data){ + var $carouselItem = $('.custom-carousel-item-' + data.source_id); + $carouselItem.find('.custom-carousel-item-img img').attr('src', data.url); + }) + + // 删除后 + $(document).on('delete_success', resetNo) + } +}) \ No newline at end of file diff --git a/app/assets/javascripts/cooperative/carousels/index.js b/app/assets/javascripts/cooperative/carousels/index.js index 4d8fe1b2c..42c87f46f 100644 --- a/app/assets/javascripts/cooperative/carousels/index.js +++ b/app/assets/javascripts/cooperative/carousels/index.js @@ -1,5 +1,12 @@ $(document).on('turbolinks:load', function() { if ($('body.cooperative-carousels-index-page').length > 0) { + var resetNo = function(){ + $('#carousels-container .custom-carousel-item-no').each(function(index, ele){ + $(ele).html(index + 1); + }) + } + // 删除后 + $(document).on('delete_success', resetNo); // ------------ 保存链接 ----------- $('.carousels-card').on('click', '.save-data-btn', function(){ var $link = $(this); @@ -65,9 +72,7 @@ $(document).on('turbolinks:load', function() { dataType: 'json', data: { move_id: moveId, after_id: insertId }, success: function(data){ - $('#carousels-container .custom-carousel-item-no').each(function(index, ele){ - $(ele).html(index + 1); - }) + resetNo(); }, error: function(res){ var data = res.responseJSON; diff --git a/app/assets/stylesheets/admins/weapp_adverts.scss b/app/assets/stylesheets/admins/weapp_adverts.scss new file mode 100644 index 000000000..d6bfa48ea --- /dev/null +++ b/app/assets/stylesheets/admins/weapp_adverts.scss @@ -0,0 +1,60 @@ +.admins-weapp-adverts-index-page { + .adverts-card { + .advert-item { + & > .drag { + cursor: move; + background: #fff; + box-shadow: 1px 2px 5px 3px #f0f0f0; + } + + &-no { + font-size: 28px; + text-align: center; + } + + &-img { + cursor: pointer; + width: 100%; + height: 60px; + + & > img { + display: block; + width: 100%; + height: 60px; + background: #F5F5F5; + } + } + + .not_active { + background: #F0F0F0; + } + + .delete-btn { + font-size: 20px; + color: red; + cursor: pointer; + } + + .save-url-btn { + cursor: pointer; + } + + .operate-box { + display: flex; + justify-content: space-between; + align-items: center; + } + + .online-check-box { + font-size: 20px; + } + + .name-input { + flex: 1; + } + .link-input { + flex: 3; + } + } + } +} \ No newline at end of file diff --git a/app/assets/stylesheets/admins/weapp_carousels.scss b/app/assets/stylesheets/admins/weapp_carousels.scss new file mode 100644 index 000000000..4ecf35da0 --- /dev/null +++ b/app/assets/stylesheets/admins/weapp_carousels.scss @@ -0,0 +1,60 @@ +.admins-weapp-carousels-index-page { + .carousels-card { + .custom-carousel-item { + & > .drag { + cursor: move; + background: #fff; + box-shadow: 1px 2px 5px 3px #f0f0f0; + } + + &-no { + font-size: 28px; + text-align: center; + } + + &-img { + cursor: pointer; + width: 100%; + height: 60px; + + & > img { + display: block; + width: 100%; + height: 60px; + background: #F5F5F5; + } + } + + .not_active { + background: #F0F0F0; + } + + .delete-btn { + font-size: 20px; + color: red; + cursor: pointer; + } + + .save-url-btn { + cursor: pointer; + } + + .operate-box { + display: flex; + justify-content: space-between; + align-items: center; + } + + .online-check-box { + font-size: 20px; + } + + .name-input { + flex: 1; + } + .link-input { + flex: 3; + } + } + } +} \ No newline at end of file diff --git a/app/controllers/admins/weapp_adverts_controller.rb b/app/controllers/admins/weapp_adverts_controller.rb new file mode 100644 index 000000000..873036ae7 --- /dev/null +++ b/app/controllers/admins/weapp_adverts_controller.rb @@ -0,0 +1,79 @@ +class Admins::WeappAdvertsController < Admins::BaseController + before_action :convert_file!, only: [:create] + def index + @adverts = WeappSettings::Advert.all + end + + def create + position = WeappSettings::Advert.count + 1 + + ActiveRecord::Base.transaction do + advert = WeappSettings::Advert.create!(create_params.merge(position: position)) + + file_path = Util::FileManage.source_disk_filename(advert) + File.delete(file_path) if File.exist?(file_path) # 删除之前的文件 + Util.write_file(@file, file_path) + end + + flash[:success] = '保存成功' + redirect_to admins_weapp_adverts_path + end + + def update + current_advert.update!(update_params) + render_ok + end + + def destroy + ActiveRecord::Base.transaction do + current_advert.destroy! + # 前移 + WeappSettings::Advert.where('position > ?', current_advert.position) + .update_all('position = position - 1') + + file_path = Util::FileManage.source_disk_filename(current_advert) + File.delete(file_path) if File.exist?(file_path) + end + render_delete_success + end + + def drag + move = WeappSettings::Advert.find_by(id: params[:move_id]) + after = WeappSettings::Advert.find_by(id: params[:after_id]) + + Admins::DragWeappAdvertService.call(move, after) + render_ok + rescue ApplicationService::Error => e + render_error(e.message) + end + + private + + def current_advert + @_current_advert ||= WeappSettings::Advert.find(params[:id]) + end + + def create_params + params.require(:weapp_settings_advert).permit(:link) + end + + def update_params + params.permit(:link, :online) + end + + def convert_file! + max_size = 10 * 1024 * 1024 # 10M + file = params.dig('weapp_settings_advert', 'image') + if file.class == ActionDispatch::Http::UploadedFile + @file = file + render_error('请上传文件') if @file.size.zero? + render_error('文件大小超过限制') if @file.size > max_size + else + file = file.to_s.strip + return render_error('请上传正确的图片') if file.blank? + @file = Util.convert_base64_image(file, max_size: max_size) + end + rescue Base64ImageConverter::Error => ex + render_error(ex.message) + end +end \ No newline at end of file diff --git a/app/controllers/admins/weapp_carousels_controller.rb b/app/controllers/admins/weapp_carousels_controller.rb new file mode 100644 index 000000000..9f22efdbe --- /dev/null +++ b/app/controllers/admins/weapp_carousels_controller.rb @@ -0,0 +1,80 @@ +class Admins::WeappCarouselsController < Admins::BaseController + before_action :convert_file!, only: [:create] + + def index + @carousels = WeappSettings::Carousel.all + end + + def create + position = WeappSettings::Carousel.count + 1 + + ActiveRecord::Base.transaction do + carousel = WeappSettings::Carousel.create!(create_params.merge(position: position)) + + file_path = Util::FileManage.source_disk_filename(carousel) + File.delete(file_path) if File.exist?(file_path) # 删除之前的文件 + Util.write_file(@file, file_path) + end + + flash[:success] = '保存成功' + redirect_to admins_weapp_carousels_path + end + + def update + current_carousel.update!(update_params) + render_ok + end + + def destroy + ActiveRecord::Base.transaction do + current_carousel.destroy! + # 前移 + WeappSettings::Carousel.where('position > ?', current_carousel.position) + .update_all('position = position - 1') + + file_path = Util::FileManage.source_disk_filename(current_carousel) + File.delete(file_path) if File.exist?(file_path) + end + render_delete_success + end + + def drag + move = WeappSettings::Carousel.find_by(id: params[:move_id]) + after = WeappSettings::Carousel.find_by(id: params[:after_id]) + + Admins::DragWeappCarouselService.call(move, after) + render_ok + rescue ApplicationService::Error => e + render_error(e.message) + end + + private + + def current_carousel + @_current_carousel ||= WeappSettings::Carousel.find(params[:id]) + end + + def create_params + params.require(:weapp_settings_carousel).permit(:link) + end + + def update_params + params.permit(:link, :online) + end + + def convert_file! + max_size = 10 * 1024 * 1024 # 10M + file = params.dig('weapp_settings_carousel', 'image') + if file.class == ActionDispatch::Http::UploadedFile + @file = file + render_error('请上传文件') if @file.size.zero? + render_error('文件大小超过限制') if @file.size > max_size + else + file = file.to_s.strip + return render_error('请上传正确的图片') if file.blank? + @file = Util.convert_base64_image(file, max_size: max_size) + end + rescue Base64ImageConverter::Error => ex + render_error(ex.message) + end +end \ No newline at end of file diff --git a/app/controllers/weapps/homes_controller.rb b/app/controllers/weapps/homes_controller.rb index efb80b898..9646f6108 100644 --- a/app/controllers/weapps/homes_controller.rb +++ b/app/controllers/weapps/homes_controller.rb @@ -1,12 +1,15 @@ class Weapps::HomesController < Weapps::BaseController def show - # banner图 - @images = PortalImage.where(status: true).order(position: :asc) + # banner + @carousels = WeappSettings::Carousel.only_online + # 广告 + @advert = WeappSettings::Advert.only_online.first # 热门实训 @shixuns = Shixun.where(homepage_show: true).includes(:tag_repertoires, :challenges).limit(4) # 热门实践课程 @subjects = Subject.where(homepage_show: true).includes(:shixuns, :repertoire).limit(4) + end end \ No newline at end of file diff --git a/app/models/weapp_setting.rb b/app/models/weapp_setting.rb new file mode 100644 index 000000000..a4ef86eb1 --- /dev/null +++ b/app/models/weapp_setting.rb @@ -0,0 +1,3 @@ +class WeappSetting < ApplicationRecord + scope :only_online, -> { where(online: true) } +end \ No newline at end of file diff --git a/app/models/weapp_settings/advert.rb b/app/models/weapp_settings/advert.rb new file mode 100644 index 000000000..564e85565 --- /dev/null +++ b/app/models/weapp_settings/advert.rb @@ -0,0 +1,2 @@ +class WeappSettings::Advert < WeappSetting +end \ No newline at end of file diff --git a/app/models/weapp_settings/carousel.rb b/app/models/weapp_settings/carousel.rb new file mode 100644 index 000000000..71445fd3f --- /dev/null +++ b/app/models/weapp_settings/carousel.rb @@ -0,0 +1,3 @@ +class WeappSettings::Carousel < WeappSetting + default_scope { order(position: :asc) } +end \ No newline at end of file diff --git a/app/services/admins/drag_weapp_advert_service.rb b/app/services/admins/drag_weapp_advert_service.rb new file mode 100644 index 000000000..b041c9d18 --- /dev/null +++ b/app/services/admins/drag_weapp_advert_service.rb @@ -0,0 +1,32 @@ +class Admins::DragWeappAdvertService < ApplicationService + attr_reader :move, :after + + def initialize(move, after) + @move = move + @after = after # 移动后下一个位置的元素 + end + + def call + return if move.position + 1 == after&.position # 未移动 + + carousels = WeappSettings::Advert.all + + ActiveRecord::Base.transaction do + if after.blank? || move.id == after.id # 移动至末尾 + total = carousels.count + + carousels.where('position > ?', move.position).update_all('position = position - 1') + move.update!(position: total) + return + end + + if move.position > after.position # 前移 + carousels.where('position >= ? AND position < ?', after.position, move.position).update_all('position = position + 1') + move.update!(position: after.position) + else # 后移 + carousels.where('position > ? AND position < ?', move.position, after.position).update_all('position = position - 1') + move.update!(position: after.position - 1) + end + end + end +end \ No newline at end of file diff --git a/app/services/admins/drag_weapp_carousel_service.rb b/app/services/admins/drag_weapp_carousel_service.rb new file mode 100644 index 000000000..f0b3832b2 --- /dev/null +++ b/app/services/admins/drag_weapp_carousel_service.rb @@ -0,0 +1,32 @@ +class Admins::DragWeappCarouselService < ApplicationService + attr_reader :move, :after + + def initialize(move, after) + @move = move + @after = after # 移动后下一个位置的元素 + end + + def call + return if move.position + 1 == after&.position # 未移动 + + carousels = WeappSettings::Carousel.all + + ActiveRecord::Base.transaction do + if after.blank? || move.id == after.id # 移动至末尾 + total = carousels.count + + carousels.where('position > ?', move.position).update_all('position = position - 1') + move.update!(position: total) + return + end + + if move.position > after.position # 前移 + carousels.where('position >= ? AND position < ?', after.position, move.position).update_all('position = position + 1') + move.update!(position: after.position) + else # 后移 + carousels.where('position > ? AND position < ?', move.position, after.position).update_all('position = position - 1') + move.update!(position: after.position - 1) + end + end + end +end \ No newline at end of file diff --git a/app/views/admins/shared/_sidebar.html.erb b/app/views/admins/shared/_sidebar.html.erb index 4d6986bc6..87b1a7f67 100644 --- a/app/views/admins/shared/_sidebar.html.erb +++ b/app/views/admins/shared/_sidebar.html.erb @@ -78,6 +78,14 @@
  • <%= sidebar_item(edit_admins_help_center_path, '帮助中心', icon: 'question-circle-o', controller: 'admins-help_centers') %>
  • <% end %> + +
  • + <%= sidebar_item_group('#weapp-setting-submenu', '小程序设置', icon: 'id-badge') do %> +
  • <%= sidebar_item(admins_weapp_carousels_path, '轮播图', icon: 'image', controller: 'admins-weapp_carousels') %>
  • +
  • <%= sidebar_item(admins_weapp_adverts_path, '广告栏', icon: 'paper-plane', controller: 'admins-weapp_adverts') %>
  • + <% end %> + +
  • <%= sidebar_item('/', '返回主站', icon: 'sign-out', controller: 'root') %>
  • \ No newline at end of file diff --git a/app/views/admins/shared/delete.js.erb b/app/views/admins/shared/delete.js.erb index 0da435fd7..d4989f392 100644 --- a/app/views/admins/shared/delete.js.erb +++ b/app/views/admins/shared/delete.js.erb @@ -24,4 +24,5 @@ if (!notRefresh) { } } else { deleteRow.remove(); -} \ No newline at end of file +} +$(document).trigger('delete_success'); \ No newline at end of file diff --git a/app/views/admins/weapp_adverts/index.html.erb b/app/views/admins/weapp_adverts/index.html.erb new file mode 100644 index 000000000..c560fdb8a --- /dev/null +++ b/app/views/admins/weapp_adverts/index.html.erb @@ -0,0 +1,42 @@ +<% + define_admin_breadcrumbs do + add_admin_breadcrumb('广告栏') + end +%> + +
    +
    + 广告栏 + <%= javascript_void_link '添加', class: 'btn btn-primary btn-sm add-btn', data: { toggle: 'modal', target: '.admin-add-weapp-advert-modal' } %> +
    +
    + <% @adverts.each_with_index do |advert, index| %> + + <% end %> +
    +
    + + +<%= render partial: 'admins/weapp_adverts/shared/add_weapp_advert_modal' %> +<%= render partial: 'admins/shared/modal/upload_file_modal' %> \ No newline at end of file diff --git a/app/views/admins/weapp_adverts/shared/_add_weapp_advert_modal.html.erb b/app/views/admins/weapp_adverts/shared/_add_weapp_advert_modal.html.erb new file mode 100644 index 000000000..9909084b8 --- /dev/null +++ b/app/views/admins/weapp_adverts/shared/_add_weapp_advert_modal.html.erb @@ -0,0 +1,35 @@ + \ No newline at end of file diff --git a/app/views/admins/weapp_carousels/index.html.erb b/app/views/admins/weapp_carousels/index.html.erb new file mode 100644 index 000000000..ec6cfa57c --- /dev/null +++ b/app/views/admins/weapp_carousels/index.html.erb @@ -0,0 +1,42 @@ +<% + define_admin_breadcrumbs do + add_admin_breadcrumb('轮播图') + end +%> + +
    +
    + 顶部轮播图(拖动排序) + <%= javascript_void_link '添加', class: 'btn btn-primary btn-sm add-btn', data: { toggle: 'modal', target: '.admin-add-weapp-carousel-modal' } %> +
    +
    + <% @carousels.each_with_index do |carousel, index| %> + + <% end %> +
    +
    + + +<%= render partial: 'admins/weapp_carousels/shared/add_weapp_carousel_modal' %> +<%= render partial: 'admins/shared/modal/upload_file_modal' %> \ No newline at end of file diff --git a/app/views/admins/weapp_carousels/shared/_add_weapp_carousel_modal.html.erb b/app/views/admins/weapp_carousels/shared/_add_weapp_carousel_modal.html.erb new file mode 100644 index 000000000..767ae61ae --- /dev/null +++ b/app/views/admins/weapp_carousels/shared/_add_weapp_carousel_modal.html.erb @@ -0,0 +1,35 @@ + \ No newline at end of file diff --git a/app/views/cooperative/shared/delete.js.erb b/app/views/cooperative/shared/delete.js.erb index 0da435fd7..d4989f392 100644 --- a/app/views/cooperative/shared/delete.js.erb +++ b/app/views/cooperative/shared/delete.js.erb @@ -24,4 +24,5 @@ if (!notRefresh) { } } else { deleteRow.remove(); -} \ No newline at end of file +} +$(document).trigger('delete_success'); \ No newline at end of file diff --git a/app/views/weapps/homes/show.json.jbuilder b/app/views/weapps/homes/show.json.jbuilder index eb5b238ac..ab366507c 100644 --- a/app/views/weapps/homes/show.json.jbuilder +++ b/app/views/weapps/homes/show.json.jbuilder @@ -1,8 +1,19 @@ -json.images do - json.array! @images do |image| - json.path image.link - json.image_url Util::FileManage.source_disk_file_url(image) +json.carousels do + json.array! @carousels do |carousel| + json.extract! carousel, :id, :link, :position + + json.path carousel.link + json.image_url Util::FileManage.source_disk_file_url(carousel) + end +end + +if @advert.present? + json.advert do + json.extract! @advert, :id, :link + json.image_url Util::FileManage.source_disk_file_url(@advert) end +else + json.advert nil end json.shixuns do diff --git a/config/routes.rb b/config/routes.rb index 6013eaf3f..b2037ff78 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1025,6 +1025,13 @@ Rails.application.routes.draw do resources :competition_settings, only: [:index, :update] resources :enroll_lists, only: [:index] end + + resources :weapp_carousels, only: [:index, :create, :update, :destroy] do + post :drag, on: :collection + end + resources :weapp_adverts, only: [:index, :create, :update, :destroy] do + post :drag, on: :collection + end end namespace :cooperative do diff --git a/db/migrate/20191022003750_create_weapp_settings.rb b/db/migrate/20191022003750_create_weapp_settings.rb new file mode 100644 index 000000000..20b3d5879 --- /dev/null +++ b/db/migrate/20191022003750_create_weapp_settings.rb @@ -0,0 +1,12 @@ +class CreateWeappSettings < ActiveRecord::Migration[5.2] + def change + create_table :weapp_settings do |t| + t.string :type + t.string :link + t.boolean :online, default: false + t.integer :position, default: 0 + + t.timestamps + end + end +end diff --git a/public/assets/.sprockets-manifest-4627fa5586ef7fed55ca286af7c028e9.json b/public/assets/.sprockets-manifest-4627fa5586ef7fed55ca286af7c028e9.json index 81a6274f1..2404fbf37 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-10-17T09:44:58+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-10-17T09:44:58+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="}},"assets":{"admin.js":"admin-1b5728d94f6bccfbcef452a760d94c3b6f31966bc65d7f89be077fc2ea512bec.js","admin.css":"admin-534bde871d67f4d6fc8da611917d78be4066fc7593ba53ee92aa17068a199d6d.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-38f953d6ba5b85d3fab63cb3c2bbf0d057ccc6454d07cfaafac3b06da37b8437.css","logo.png":"logo-7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423.png","application.js":"application-9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb.js","application.css":"application-0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8.css","cooperative.js":"cooperative-149f47b8675d60a8014ccff50f00f932ff69e2be286ffb74343bc4a3effb135b.js","cooperative.css":"cooperative-6273b766d6ef11dd56174d868bab55e7f17af17546c888d2ba0dd0a6bcda76c8.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-10-17T09:44:58+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-10-17T09:44:58+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="}},"assets":{"admin.js":"admin-c8c127fefa5eca98bca19832c246619318164e8f242635c07033e2423cc18a6f.js","admin.css":"admin-60d200c1fcdf61a60537d29ccf4479c6b1e5e904208870a63b8ee677c96b347e.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-38f953d6ba5b85d3fab63cb3c2bbf0d057ccc6454d07cfaafac3b06da37b8437.css","logo.png":"logo-7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423.png","application.js":"application-9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb.js","application.css":"application-0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8.css","cooperative.js":"cooperative-9fb7ac4ad44081fafd5ad2a3a1bfb7f4329ac96f28bc6446d1ff52b1e2e71286.js","cooperative.css":"cooperative-6273b766d6ef11dd56174d868bab55e7f17af17546c888d2ba0dd0a6bcda76c8.css"}} \ No newline at end of file diff --git a/public/assets/admin-534bde871d67f4d6fc8da611917d78be4066fc7593ba53ee92aa17068a199d6d.css b/public/assets/admin-60d200c1fcdf61a60537d29ccf4479c6b1e5e904208870a63b8ee677c96b347e.css similarity index 99% rename from public/assets/admin-534bde871d67f4d6fc8da611917d78be4066fc7593ba53ee92aa17068a199d6d.css rename to public/assets/admin-60d200c1fcdf61a60537d29ccf4479c6b1e5e904208870a63b8ee677c96b347e.css index 1779feb9c..edf0f7f74 100644 --- a/public/assets/admin-534bde871d67f4d6fc8da611917d78be4066fc7593ba53ee92aa17068a199d6d.css +++ b/public/assets/admin-60d200c1fcdf61a60537d29ccf4479c6b1e5e904208870a63b8ee677c96b347e.css @@ -25915,6 +25915,150 @@ input.form-control { color: #6c757d; } +/* line 4, app/assets/stylesheets/admins/weapp_adverts.scss */ +.admins-weapp-adverts-index-page .adverts-card .advert-item > .drag { + cursor: move; + background: #fff; + box-shadow: 1px 2px 5px 3px #f0f0f0; +} + +/* line 10, app/assets/stylesheets/admins/weapp_adverts.scss */ +.admins-weapp-adverts-index-page .adverts-card .advert-item-no { + font-size: 28px; + text-align: center; +} + +/* line 15, app/assets/stylesheets/admins/weapp_adverts.scss */ +.admins-weapp-adverts-index-page .adverts-card .advert-item-img { + cursor: pointer; + width: 100%; + height: 60px; +} + +/* line 20, app/assets/stylesheets/admins/weapp_adverts.scss */ +.admins-weapp-adverts-index-page .adverts-card .advert-item-img > img { + display: block; + width: 100%; + height: 60px; + background: #F5F5F5; +} + +/* line 28, app/assets/stylesheets/admins/weapp_adverts.scss */ +.admins-weapp-adverts-index-page .adverts-card .advert-item .not_active { + background: #F0F0F0; +} + +/* line 32, app/assets/stylesheets/admins/weapp_adverts.scss */ +.admins-weapp-adverts-index-page .adverts-card .advert-item .delete-btn { + font-size: 20px; + color: red; + cursor: pointer; +} + +/* line 38, app/assets/stylesheets/admins/weapp_adverts.scss */ +.admins-weapp-adverts-index-page .adverts-card .advert-item .save-url-btn { + cursor: pointer; +} + +/* line 42, app/assets/stylesheets/admins/weapp_adverts.scss */ +.admins-weapp-adverts-index-page .adverts-card .advert-item .operate-box { + display: -webkit-box; + display: flex; + -webkit-box-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + align-items: center; +} + +/* line 48, app/assets/stylesheets/admins/weapp_adverts.scss */ +.admins-weapp-adverts-index-page .adverts-card .advert-item .online-check-box { + font-size: 20px; +} + +/* line 52, app/assets/stylesheets/admins/weapp_adverts.scss */ +.admins-weapp-adverts-index-page .adverts-card .advert-item .name-input { + -webkit-box-flex: 1; + flex: 1; +} + +/* line 55, app/assets/stylesheets/admins/weapp_adverts.scss */ +.admins-weapp-adverts-index-page .adverts-card .advert-item .link-input { + -webkit-box-flex: 3; + flex: 3; +} + +/* line 4, app/assets/stylesheets/admins/weapp_carousels.scss */ +.admins-weapp-carousels-index-page .carousels-card .custom-carousel-item > .drag { + cursor: move; + background: #fff; + box-shadow: 1px 2px 5px 3px #f0f0f0; +} + +/* line 10, app/assets/stylesheets/admins/weapp_carousels.scss */ +.admins-weapp-carousels-index-page .carousels-card .custom-carousel-item-no { + font-size: 28px; + text-align: center; +} + +/* line 15, app/assets/stylesheets/admins/weapp_carousels.scss */ +.admins-weapp-carousels-index-page .carousels-card .custom-carousel-item-img { + cursor: pointer; + width: 100%; + height: 60px; +} + +/* line 20, app/assets/stylesheets/admins/weapp_carousels.scss */ +.admins-weapp-carousels-index-page .carousels-card .custom-carousel-item-img > img { + display: block; + width: 100%; + height: 60px; + background: #F5F5F5; +} + +/* line 28, app/assets/stylesheets/admins/weapp_carousels.scss */ +.admins-weapp-carousels-index-page .carousels-card .custom-carousel-item .not_active { + background: #F0F0F0; +} + +/* line 32, app/assets/stylesheets/admins/weapp_carousels.scss */ +.admins-weapp-carousels-index-page .carousels-card .custom-carousel-item .delete-btn { + font-size: 20px; + color: red; + cursor: pointer; +} + +/* line 38, app/assets/stylesheets/admins/weapp_carousels.scss */ +.admins-weapp-carousels-index-page .carousels-card .custom-carousel-item .save-url-btn { + cursor: pointer; +} + +/* line 42, app/assets/stylesheets/admins/weapp_carousels.scss */ +.admins-weapp-carousels-index-page .carousels-card .custom-carousel-item .operate-box { + display: -webkit-box; + display: flex; + -webkit-box-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + align-items: center; +} + +/* line 48, app/assets/stylesheets/admins/weapp_carousels.scss */ +.admins-weapp-carousels-index-page .carousels-card .custom-carousel-item .online-check-box { + font-size: 20px; +} + +/* line 52, app/assets/stylesheets/admins/weapp_carousels.scss */ +.admins-weapp-carousels-index-page .carousels-card .custom-carousel-item .name-input { + -webkit-box-flex: 1; + flex: 1; +} + +/* line 55, app/assets/stylesheets/admins/weapp_carousels.scss */ +.admins-weapp-carousels-index-page .carousels-card .custom-carousel-item .link-input { + -webkit-box-flex: 3; + flex: 3; +} + /* line 18, app/assets/stylesheets/admin.scss */ body { width: 100vw; diff --git a/public/assets/admin-534bde871d67f4d6fc8da611917d78be4066fc7593ba53ee92aa17068a199d6d.css.gz b/public/assets/admin-60d200c1fcdf61a60537d29ccf4479c6b1e5e904208870a63b8ee677c96b347e.css.gz similarity index 77% rename from public/assets/admin-534bde871d67f4d6fc8da611917d78be4066fc7593ba53ee92aa17068a199d6d.css.gz rename to public/assets/admin-60d200c1fcdf61a60537d29ccf4479c6b1e5e904208870a63b8ee677c96b347e.css.gz index 26a606a1cdd894ccc4611e9693d69dc4acc4d5b9..44bb80d0dae6fb45c231f7932405def68b9e42b9 100644 GIT binary patch delta 16489 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 0) { var laboratoryId = $('#carousels-container').data('laboratoryId'); + var resetNo = function(){ + $('#carousels-container .custom-carousel-item-no').each(function(index, ele){ + $(ele).html(index + 1); + }) + } + // 删除后 + $(document).on('delete_success', resetNo); // ------------ 保存链接 ----------- $('.carousels-card').on('click', '.save-data-btn', function(){ @@ -133923,9 +133930,7 @@ $(document).on('turbolinks:load', function() { dataType: 'json', data: { move_id: moveId, after_id: insertId }, success: function(data){ - $('#carousels-container .custom-carousel-item-no').each(function(index, ele){ - $(ele).html(index + 1); - }) + resetNo(); }, error: function(res){ var data = res.responseJSON; @@ -134056,8 +134061,70 @@ $(document).on('turbolinks:load', function() { $imageElement.attr('src', data.url); $imageElement.show(); $imageElement.next().html('重新上传'); - }) + }); } + + $(".admin-competition-list-form").on("change", '.competitions-hot-select', function () { + var s_value = $(this).get(0).checked ? 1 : 0; + var json = {}; + json["hot"] = s_value; + $.ajax({ + url: "/admins/competitions/hot_setting", + type: "POST", + dataType:'json', + data: json, + success: function(){ + $.notify({ message: '操作成功' }); + } + }); + }); + + // ============== 新增竞赛 =============== + var $modal = $('.modal.admin-create-competition-modal'); + var $form = $modal.find('form.admin-create-competition-form'); + var $competitionNameInput = $form.find('input[name="competition_name"]'); + + $form.validate({ + errorElement: 'span', + errorClass: 'danger text-danger', + rules: { + competition_name: { + required: true + } + } + }); + + // modal ready fire + $modal.on('show.bs.modal', function () { + $competitionNameInput.val(''); + }); + + $modal.on('click', '.submit-btn', function(){ + $form.find('.error').html(''); + + if ($form.valid()) { + var url = $form.data('url'); + + $.ajax({ + method: 'POST', + dataType: 'json', + url: url, + data: $form.serialize(), + success: function(){ + $.notify({ message: '创建成功' }); + $modal.modal('hide'); + + setTimeout(function(){ + window.location.reload(); + }, 500); + }, + error: function(res){ + var data = res.responseJSON; + $form.find('.error').html(data.message); + } + }); + } + }); }); $(document).on('turbolinks:load', function() { @@ -134479,6 +134546,15 @@ $(document).on('turbolinks:load', function() { }) } }); +$(document).on('turbolinks:load', function() { + if($('body.admins-enroll-lists-index-page').length > 0){ + let search_form = $(".search-form"); + //导出 + $(".competition-enroll-list-form").on("click","#enroll-lists-export",function () { + window.location.href = "/admins/competitions/"+$(this).attr("data-competition-id")+"/enroll_lists.xls?" + search_form.serialize(); + }); + } +}); $(document).on('turbolinks:load', function() { if($(".admins-graduation-standards-index-page").length > 0){ $(".admin-body-container").on("click", ".standard-create-modal", function () { @@ -135262,14 +135338,17 @@ $(document).on('turbolinks:load', function() { var $form = $modal.find('form.admin-upload-file-form') var $sourceIdInput = $modal.find('input[name="source_id"]'); var $sourceTypeInput = $modal.find('input[name="source_type"]'); + var $suffixInput = $modal.find('input[name="suffix"]'); $modal.on('show.bs.modal', function(event){ var $link = $(event.relatedTarget); var sourceId = $link.data('sourceId'); var sourceType = $link.data('sourceType'); + var suffix = $link.data('suffix'); $sourceIdInput.val(sourceId); $sourceTypeInput.val(sourceType); + if(suffix != undefined){ $suffixInput.val(suffix); } $modal.find('.upload-file-input').trigger('click'); }); @@ -135306,6 +135385,7 @@ $(document).on('turbolinks:load', function() { contentType: false, success: function(data){ $.notify({ message: '上传成功' }); + $modal.find('.file-names').html(''); $modal.trigger('upload:success', data); $modal.modal('hide'); }, @@ -135597,10 +135677,17 @@ $(document).on('turbolinks:load', function() { }); $('.modal.admin-upload-file-modal').on('upload:success', function(e, data){ - var $imageElement = $('.shixun-image-' + data.source_id); - $imageElement.attr('src', data.url); - $imageElement.show(); - $imageElement.next().html('重新上传'); + if(data.suffix == '_weapp'){ + var $imageElement = $('.shixun-weapp-image-' + data.source_id); + $imageElement.attr('src', data.url); + $imageElement.show(); + $imageElement.next().html('重新上传'); + } else { + var $imageElement = $('.shixun-image-' + data.source_id); + $imageElement.attr('src', data.url); + $imageElement.show(); + $imageElement.next().html('重新上传'); + } }) } }); @@ -136097,6 +136184,255 @@ $(document).on('turbolinks:load', function() { } }) ; +$(document).on('turbolinks:load', function() { + if ($('body.admins-weapp-adverts-index-page').length > 0) { + var resetNo = function(){ + $('#adverts-container .advert-item-no').each(function(index, ele){ + $(ele).html(index + 1); + }) + } + + // ------------ 保存链接 ----------- + $('.adverts-card').on('click', '.save-data-btn', function(){ + var $link = $(this); + var id = $link.data('id'); + var link = $('.advert-item-' + id).find('.link-input').val(); + $link.attr('disabled', true); + + $.ajax({ + url: '/admins/weapp_adverts/' + id, + method: 'PATCH', + dataType: 'json', + data: { link: link }, + success: function(data){ + $.notify({ message: '操作成功' }); + }, + error: ajaxErrorNotifyHandler, + complete: function(){ + $link.removeAttr('disabled'); + } + }) + }); + // -------------- 是否在首页展示 -------------- + $('.adverts-card').on('change', '.online-check-box', function(){ + var $checkbox = $(this); + var id = $checkbox.data('id'); + var checked = $checkbox.is(':checked'); + $checkbox.attr('disabled', true); + + $.ajax({ + url: '/admins/weapp_adverts/' + id, + method: 'PATCH', + dataType: 'json', + data: { online: checked }, + success: function(data){ + $.notify({ message: '保存成功' }); + var box = $('.advert-item-' + id).find('.drag'); + if(checked){ + box.removeClass('not_active'); + }else{ + box.addClass('not_active'); + } + }, + error: ajaxErrorNotifyHandler, + complete: function(){ + $checkbox.removeAttr('disabled'); + } + }) + }); + + // ------------ 拖拽 ------------- + var onDropFunc = function(el, _target, _source, sibling){ + var moveId = $(el).data('id'); + var insertId = $(sibling).data('id') || ''; + + $.ajax({ + url: '/admins/weapp_adverts/drag', + method: 'POST', + dataType: 'json', + data: { move_id: moveId, after_id: insertId }, + success: function(data){ + resetNo(); + }, + error: function(res){ + var data = res.responseJSON; + $.notify({message: '移动失败,原因:' + data.message}, {type: 'danger'}); + } + }) + }; + var ele1 = document.getElementById('adverts-container'); + dragula([ele1], { mirrorContainer: ele1 }).on('drop', onDropFunc); + + + // ----------- 新增 -------------- + var $createModal = $('.modal.admin-add-weapp-advert-modal'); + var $createForm = $createModal.find('form.admin-add-weapp-advert-form'); + + $createForm.validate({ + errorElement: 'span', + errorClass: 'danger text-danger', + rules: { + "weapp_settings_advert[image]": { + required: true + } + } + }); + + $createModal.on('show.bs.modal', function(event){ + resetFileInputFunc($createModal.find('.img-file-input')); + $createModal.find('.file-names').html('选择文件'); + }); + + $createModal.on('click', '.submit-btn', function() { + $createForm.find('.error').html(''); + + if ($createForm.valid()) { + $createForm.submit(); + } else { + $createForm.find('.error').html('请选择图片'); + } + }); + $createModal.on('change', '.img-file-input', function(){ + var file = $(this)[0].files[0]; + $createModal.find('.file-names').html(file ? file.name : '请选择文件'); + }) + + // -------------- 重新上传图片 -------------- + //replace_image_url + $('.modal.admin-upload-file-modal').on('upload:success', function(e, data){ + var $advertItem = $('.advert-item-' + data.source_id); + $advertItem.find('.advert-item-img img').attr('src', data.url); + }) + + // 删除后 + $(document).on('delete_success', resetNo) + } +}) +; +$(document).on('turbolinks:load', function() { + if ($('body.admins-weapp-carousels-index-page').length > 0) { + var resetNo = function(){ + $('#carousels-container .custom-carousel-item-no').each(function(index, ele){ + $(ele).html(index + 1); + }) + } + // ------------ 保存链接 ----------- + $('.carousels-card').on('click', '.save-data-btn', function(){ + var $link = $(this); + var id = $link.data('id'); + var link = $('.custom-carousel-item-' + id).find('.link-input').val(); + $link.attr('disabled', true); + + $.ajax({ + url: '/admins/weapp_carousels/' + id, + method: 'PATCH', + dataType: 'json', + data: { link: link }, + success: function(data){ + $.notify({ message: '操作成功' }); + }, + error: ajaxErrorNotifyHandler, + complete: function(){ + $link.removeAttr('disabled'); + } + }) + }); + // -------------- 是否在首页展示 -------------- + $('.carousels-card').on('change', '.online-check-box', function(){ + var $checkbox = $(this); + var id = $checkbox.data('id'); + var checked = $checkbox.is(':checked'); + $checkbox.attr('disabled', true); + + $.ajax({ + url: '/admins/weapp_carousels/' + id, + method: 'PATCH', + dataType: 'json', + data: { online: checked }, + success: function(data){ + $.notify({ message: '保存成功' }); + var box = $('.custom-carousel-item-' + id).find('.drag'); + if(checked){ + box.removeClass('not_active'); + }else{ + box.addClass('not_active'); + } + }, + error: ajaxErrorNotifyHandler, + complete: function(){ + $checkbox.removeAttr('disabled'); + } + }) + }); + + // ------------ 拖拽 ------------- + var onDropFunc = function(el, _target, _source, sibling){ + var moveId = $(el).data('id'); + var insertId = $(sibling).data('id') || ''; + + $.ajax({ + url: '/admins/weapp_carousels/drag', + method: 'POST', + dataType: 'json', + data: { move_id: moveId, after_id: insertId }, + success: function(data){ + resetNo(); + }, + error: function(res){ + var data = res.responseJSON; + $.notify({message: '移动失败,原因:' + data.message}, {type: 'danger'}); + } + }) + }; + var ele1 = document.getElementById('carousels-container'); + dragula([ele1], { mirrorContainer: ele1 }).on('drop', onDropFunc); + + + // ----------- 新增 -------------- + var $createModal = $('.modal.admin-add-weapp-carousel-modal'); + var $createForm = $createModal.find('form.admin-add-weapp-carousel-form'); + + $createForm.validate({ + errorElement: 'span', + errorClass: 'danger text-danger', + rules: { + "weapp_settings_carousel[image]": { + required: true + } + } + }); + + $createModal.on('show.bs.modal', function(event){ + resetFileInputFunc($createModal.find('.img-file-input')); + $createModal.find('.file-names').html('选择文件'); + }); + + $createModal.on('click', '.submit-btn', function() { + $createForm.find('.error').html(''); + + if ($createForm.valid()) { + $createForm.submit(); + } else { + $createForm.find('.error').html('请选择图片'); + } + }); + $createModal.on('change', '.img-file-input', function(){ + var file = $(this)[0].files[0]; + $createModal.find('.file-names').html(file ? file.name : '请选择文件'); + }) + + // -------------- 重新上传图片 -------------- + //replace_image_url + $('.modal.admin-upload-file-modal').on('upload:success', function(e, data){ + var $carouselItem = $('.custom-carousel-item-' + data.source_id); + $carouselItem.find('.custom-carousel-item-img img').attr('src', data.url); + }) + + // 删除后 + $(document).on('delete_success', resetNo) + } +}) +; diff --git a/public/assets/admin-1b5728d94f6bccfbcef452a760d94c3b6f31966bc65d7f89be077fc2ea512bec.js.gz b/public/assets/admin-c8c127fefa5eca98bca19832c246619318164e8f242635c07033e2423cc18a6f.js.gz similarity index 98% rename from public/assets/admin-1b5728d94f6bccfbcef452a760d94c3b6f31966bc65d7f89be077fc2ea512bec.js.gz rename to public/assets/admin-c8c127fefa5eca98bca19832c246619318164e8f242635c07033e2423cc18a6f.js.gz index 519d4b32f2b50587740e213c03763515e552ac36..c89ad52560f4feedbcb3b8158995769650df2514 100644 GIT binary patch delta 13179 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 delta 11802 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 IfPEQ50G>qw8~^|S diff --git a/public/assets/cooperative-149f47b8675d60a8014ccff50f00f932ff69e2be286ffb74343bc4a3effb135b.js b/public/assets/cooperative-9fb7ac4ad44081fafd5ad2a3a1bfb7f4329ac96f28bc6446d1ff52b1e2e71286.js similarity index 99% rename from public/assets/cooperative-149f47b8675d60a8014ccff50f00f932ff69e2be286ffb74343bc4a3effb135b.js rename to public/assets/cooperative-9fb7ac4ad44081fafd5ad2a3a1bfb7f4329ac96f28bc6446d1ff52b1e2e71286.js index 80b121449..5d30eb714 100644 --- a/public/assets/cooperative-149f47b8675d60a8014ccff50f00f932ff69e2be286ffb74343bc4a3effb135b.js +++ b/public/assets/cooperative-9fb7ac4ad44081fafd5ad2a3a1bfb7f4329ac96f28bc6446d1ff52b1e2e71286.js @@ -133825,6 +133825,13 @@ module.exports = tick; !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(n){return"请删除"+(n.input.length-n.maximum)+"个字符"},inputTooShort:function(n){return"请再输入至少"+(n.minimum-n.input.length)+"个字符"},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(n){return"最多只能选择"+n.maximum+"个项目"},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"},removeAllItems:function(){return"删除所有项目"}}}),n.define,n.require}(); $(document).on('turbolinks:load', function() { if ($('body.cooperative-carousels-index-page').length > 0) { + var resetNo = function(){ + $('#carousels-container .custom-carousel-item-no').each(function(index, ele){ + $(ele).html(index + 1); + }) + } + // 删除后 + $(document).on('delete_success', resetNo); // ------------ 保存链接 ----------- $('.carousels-card').on('click', '.save-data-btn', function(){ var $link = $(this); @@ -133890,9 +133897,7 @@ $(document).on('turbolinks:load', function() { dataType: 'json', data: { move_id: moveId, after_id: insertId }, success: function(data){ - $('#carousels-container .custom-carousel-item-no').each(function(index, ele){ - $(ele).html(index + 1); - }) + resetNo(); }, error: function(res){ var data = res.responseJSON; diff --git a/public/assets/cooperative-149f47b8675d60a8014ccff50f00f932ff69e2be286ffb74343bc4a3effb135b.js.gz b/public/assets/cooperative-9fb7ac4ad44081fafd5ad2a3a1bfb7f4329ac96f28bc6446d1ff52b1e2e71286.js.gz similarity index 96% rename from public/assets/cooperative-149f47b8675d60a8014ccff50f00f932ff69e2be286ffb74343bc4a3effb135b.js.gz rename to public/assets/cooperative-9fb7ac4ad44081fafd5ad2a3a1bfb7f4329ac96f28bc6446d1ff52b1e2e71286.js.gz index 3f30bd26960c68de6b2290dba2cad130479d783a..4fb78eb9a4eb11146b2d5a4914c122e3e4cdcf45 100644 GIT binary patch delta 27669 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 Uiai*(X}I|Ezcj%?`ra`@0Kw{ML;wH) delta 27557 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

    SaETYkH?@#D&Yg9k@@%d2kn@}cT47pt$X ztyb0Z#$x5C2S(1XYE#F{`}WFc!a9R26oms6%ngJUl&@TIq!6{lixVa^Br%Mo!)Ayc ze+DJG#BHNWX?*wYc=I+M;B4NQeEq?*$5%_Hsm}$(Bo1q9C`h9%XM00ARlhMii{F&0 zY11g4X#h@D*bWc>XdKI>zI%S%jaJtv16EX$}GYhVNNtm`>-1 zeb(o1VU4fGRCm~H4_k~zg~Xg-km@9{e|5H9a7E2C(-4$1Hu^%-d8)s0LAp5bp>PlV0@hQ$GPeU=pOp zUPPns0$3_kSCIMWb_3`iQ?WC(LH&c96NNsaw;}RHnAx41-+M{B1@>g%*%t$6e*s-b z^BjIH>p#}y-;c&OKi&Svz3t6w+%GUL{^nzQ`^)Q9Qc85uv zMDE}xGHetevnQWlRLc}!020Z8=+foFmWexywZ_$0r)v0n^gkkg?= z%L8azw+;eEoYt!)Q`|u-Rw^|GA++qi!C?)ffJ_eNGs^X79u39$_mto!Sx17FRiG%n z-ttewIH<4&c+HD_qOMgLSbXV~2IdcZSMw67M6`e~E`H5DH?r(Tk>eSkD6e-l7@|T=wnVad0PaLKhdaj?Sc+^O{j5?*jk%r#_ z>r`@&biz5(I9VcPQoJ!qf8858|Fbe^j2J@9YjCcOHbAGYSrg}NFU3bFXu&A$4DoDG zU>coq;5MbpIFAf^akIw0Couxj-fVJUHv}CVF z=cHqP*{?&mzm#TxRy!{X?A9TbdVQXbf!vZ_cjJ8KhC!e~1;PZpnz(b`CLb zJY~soKnonE_9#+_H>v_lDM+KDHkD$gtF5N*nYcfbM1BW~4iN~mpkNjQqXn*%J9ood zl{M5x(p;%GyZcRTZ_Q`TIR-Y)U#N1%J<|NpoX?7qE|Ukaywm`=Zi~EwS(c?|s`8v` zTG5@Q_UwZTv*oX)e@de;9qmaqDFAsbiG$9x_w25vF!fMJs@KW1Q`@|vJOi86@5s&p zWE&qQT=w+v`~s6;yg=sp8lEedB4v}|tU`EtDLlOxo->c;7sPa+lV1?a9hN?kIhdi( z@tAl-(t$>PPru7L;NhN`7;PVGtlN*~ha=wz68R*m>7XQvb3?EPsT=&3FpuXz2 zG`G9hjfAS<5dvv)+WYm;i<9H*oXY-1_3)X~$EqvgIj>KaV?z*id17kDQM;Pp5Tz&9 zUE%?YH>bIv3k%jOfBeVdodc^AgzErLfxhi`Cn-kBzyYzxK&Moy$$)-Z zJR<5K0E9SJJX-s{cQV_TjTo=;8(`N?{#W}$UE(s z-rd~3|8R2e+LP;F;9aZVef{*qzwcqVDBUJQdi}~7y)c`A%s642R{Wk94ihH_TFk|^ z4!h~FN8U&;f1}Of?--!NSUTpYLVL%5dk&vAzFPdzgW{v3T(c=@X2YDh+H{*;JSR`* zmAMQ^OVM*#jHE~5V9zmP4wUckLvGEtG{@nAP&Q?@aQkzFLj}VQqEp_u_VnI2 zlMlbe|8MZ%^YOdy;cdmwu1|jRg_6BMn>m+fW++t7(8Qkh2?ny}|A3%Ru?GV;4HsYj M55o+4P;oIr03W9pVgLXD From 8d637810788ae278e1c96a74c36caff737541b3e Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Tue, 22 Oct 2019 10:08:01 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E9=97=AE=E5=8D=B7=E7=9A=84=E7=AE=80?= =?UTF-8?q?=E7=AD=94=E9=A2=98=E5=9B=9E=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/poll_votes_controller.rb | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/app/controllers/poll_votes_controller.rb b/app/controllers/poll_votes_controller.rb index 1690fd3ae..4a15ae301 100644 --- a/app/controllers/poll_votes_controller.rb +++ b/app/controllers/poll_votes_controller.rb @@ -91,17 +91,15 @@ class PollVotesController < ApplicationController end else #主观题的输入 # current_vote_text = user_votes.find_vote_text - if question_answer_text.present? - if user_votes.present? - user_votes.first.update_attribute("vote_text", question_answer_text) - # if question_answer_text.present? - # user_votes.first.update_attribute("vote_text", question_answer_text) - # else - # user_votes.destroy_all - # end - else - PollVote.create(vote_answer_params) - end + if user_votes.present? + user_votes.first.update_attribute("vote_text", question_answer_text) + # if question_answer_text.present? + # user_votes.first.update_attribute("vote_text", question_answer_text) + # else + # user_votes.destroy_all + # end + else + PollVote.create(vote_answer_params) end end @current_question_number = @poll_question.question_number From ca5bb884ae3d0c7a65a62a21b28054b584ba2934 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Tue, 22 Oct 2019 10:19:35 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E9=97=AE=E7=AD=94=E7=9A=84start=5Fanswer?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/polls_controller.rb | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/app/controllers/polls_controller.rb b/app/controllers/polls_controller.rb index cb507fdcb..bbd2a06fa 100644 --- a/app/controllers/polls_controller.rb +++ b/app/controllers/polls_controller.rb @@ -900,12 +900,30 @@ class PollsController < ApplicationController # 判断是否已经回答还是新建的回答 @poll_questions.each do |q| ques_vote = q.poll_votes.find_current_vote("user_id",@poll_current_user_id) - if ques_vote.present? - ques_status = 1 - question_answered += 1 + ques_type = q.question_type + + if ques_type != 3 #非简答题时 + if ques_vote.exists? + ques_status = 1 + question_answered += 1 + else + ques_status = 0 + end else - ques_status = 0 + if ques_vote.find_vote_text.first.present? + ques_status = 1 + question_answered += 1 + else + ques_status = 0 + end end + + # if ques_vote.present? + # ques_status = 1 + # question_answered += 1 + # else + # ques_status = 0 + # end answer_status = { :ques_id => q.id, :ques_number => q.question_number, From d4a9f13ff30d1f69a92525a48ca349d9d3624391 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Tue, 22 Oct 2019 10:23:35 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E7=AB=9E=E8=B5=9B=E7=9A=84=E5=AF=BC?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admins/enroll_lists_controller.rb | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/app/controllers/admins/enroll_lists_controller.rb b/app/controllers/admins/enroll_lists_controller.rb index ccac6a72d..135ef55ae 100644 --- a/app/controllers/admins/enroll_lists_controller.rb +++ b/app/controllers/admins/enroll_lists_controller.rb @@ -2,8 +2,7 @@ class Admins::EnrollListsController < Admins::BaseController def index @competition = current_competition - params[:sort_by] = params[:sort_by].presence || 'created_at' - params[:sort_direction] = params[:sort_direction].presence || 'desc' + default_sort('created_at', 'desc') enroll_lists = Admins::CompetitionEnrollListQuery.call(@competition, params) @params_page = params[:page] || 1 @@ -13,10 +12,21 @@ class Admins::EnrollListsController < Admins::BaseController respond_to do |format| format.js format.html - format.xls + format.xls{ + filename = "#{@competition.name}竞赛报名列表_#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}.xls" + send_data(shixun_list_xls(shixuns), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename)) + } end end + def export + default_sort('created_at', 'desc') + @enroll_lists = Admins::CompetitionEnrollListQuery.call(current_competition, params) + + filename = ["#{current_competition.name}竞赛报名列表", Time.zone.now.strftime('%Y-%m-%d%H:%M:%S')].join('-') << '.xlsx' + render xlsx: 'export', filename: filename + end + private def current_competition @_current_competition ||= Competition.find(params[:competition_id]) From 5e562405b8ee00bbf0f5fcb87084c9ed2521748f Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Tue, 22 Oct 2019 10:34:36 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E4=BD=9C=E5=93=81?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=A2=9E=E5=8A=A0=E6=9F=A5=E7=9C=8B=E7=AD=94?= =?UTF-8?q?=E6=A1=88=E5=85=B3=E5=8D=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/myshixun.rb | 5 +++++ app/views/homework_commons/works_list.json.jbuilder | 2 ++ 2 files changed, 7 insertions(+) diff --git a/app/models/myshixun.rb b/app/models/myshixun.rb index 006bbf26d..54dcf9011 100644 --- a/app/models/myshixun.rb +++ b/app/models/myshixun.rb @@ -83,6 +83,11 @@ class Myshixun < ApplicationRecord self.games.select{|game| game.status == 2}.size end + # 查看答案的关卡数 + def view_answer_count + self.games.select{|game| game.status == 2 && game.answer_open != 0}.size + end + # 通关时间 def passed_time self.status == 1 ? self.games.select{|game| game.status == 2}.map(&:end_time).max : "--" diff --git a/app/views/homework_commons/works_list.json.jbuilder b/app/views/homework_commons/works_list.json.jbuilder index 839b40bfd..24d1f354a 100644 --- a/app/views/homework_commons/works_list.json.jbuilder +++ b/app/views/homework_commons/works_list.json.jbuilder @@ -41,6 +41,7 @@ elsif @user_course_identity == Course::STUDENT json.efficiency work_score_format(@work.efficiency, true, @score_open) json.eff_score work_score_format(@work.eff_score, true, @score_open) json.complete_count @work.myshixun.try(:passed_count) + json.view_answer_count @work.myshixun.try(:view_answer_count) else json.(@work, :id, :work_status, :update_time, :ultimate_score) @@ -95,6 +96,7 @@ if @homework.homework_type == "practice" json.cost_time work.myshixun.try(:total_spend_time) json.complete_count work.myshixun.try(:passed_count) + json.view_answer_count work.myshixun.try(:view_answer_count) json.user_login work.user.try(:login) json.user_name work.user.try(:real_name) json.student_id work.user.try(:student_id) From 5d881d809010a0afba0a307c596881373d124a69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Tue, 22 Oct 2019 10:39:44 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E8=B0=83=E6=95=B4=E8=AF=84=E9=98=85?= =?UTF-8?q?=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OfficialAcademicTranscript.js | 240 ++++++++++-------- 1 file changed, 134 insertions(+), 106 deletions(-) diff --git a/public/react/src/modules/courses/shixunHomework/shixunreport/OfficialAcademicTranscript.js b/public/react/src/modules/courses/shixunHomework/shixunreport/OfficialAcademicTranscript.js index be99c7035..d115eef45 100644 --- a/public/react/src/modules/courses/shixunHomework/shixunreport/OfficialAcademicTranscript.js +++ b/public/react/src/modules/courses/shixunHomework/shixunreport/OfficialAcademicTranscript.js @@ -1,95 +1,97 @@ import React, {Component} from "react"; import {WordsBtn} from 'educoder'; -import {Table,InputNumber,Tooltip} from "antd"; -import {Link,Switch,Route,Redirect} from 'react-router-dom'; +import {Table, InputNumber, Tooltip} from "antd"; +import {Link, Switch, Route, Redirect} from 'react-router-dom'; import axios from 'axios'; + class OfficialAcademicTranscript extends Component { constructor(props) { super(props); this.state = { - loadingstate:true, - datas:undefined, - customsids:undefined + loadingstate: true, + datas: undefined, + customsids: undefined } } componentDidMount() { } - myjumptopic=(e)=>{ + + myjumptopic = (e) => { console.log("获取到值"); console.log(e); this.props.jumptopic(e); } - editgame_scores=(e,id,maxsum)=>{ - let{datas}=this.state; - let newdatas=datas; - let score=e.target.value; + editgame_scores = (e, id, maxsum) => { + let {datas} = this.state; + let newdatas = datas; + let score = e.target.value; - if(score!=null&&score!=undefined&&score!=""){ - if(score<0){ + if (score != null && score != undefined && score != "") { + if (score < 0) { this.props.showNotification("不能小于0"); this.setState({ - customsids:id + customsids: id }) - }else if(score>maxsum){ + } else if (score > maxsum) { this.props.showNotification(`不能大于关卡分值${maxsum}`); this.setState({ - customsids:id + customsids: id }) - }else{ - let work_id=this.props.data.work_id; - let url=`/student_works/${work_id}/adjust_review_score.json` - axios.post(url,{ - type:"report", - score:score, - challenge_id:id - }).then((result)=>{ - if(result.data.status===0){ + } else { + let work_id = this.props.data.work_id; + let url = `/student_works/${work_id}/adjust_review_score.json` + axios.post(url, { + type: "report", + score: score, + challenge_id: id + }).then((result) => { + if (result.data.status === 0) { // this.props.getdatalist() this.props.showNotification(result.data.message); - this.props.setupdalist(result.data.challenge_score,result.data.overall_appraisal,result.data.work_score) - newdatas.map((item,key)=>{ - if(item.challenge_id.id===id){ - item.game_scores.game_score=score + this.props.setupdalist(result.data.challenge_score, result.data.overall_appraisal, result.data.work_score) + newdatas.map((item, key) => { + if (item.challenge_id.id === id) { + item.game_scores.game_score = score } }) this.setState({ - datas:newdatas, - customsids:undefined + datas: newdatas, + customsids: undefined }) - }else{ + } else { this.props.showNotification(result.data.message); } - }).catch((error)=>{ + }).catch((error) => { }) } - }else{ + } else { this.props.showNotification("调分为空将不会修改之前的分数"); } } render() { - let {customsids}=this.state; - let {data}=this.props; + let {customsids} = this.state; + let {data} = this.props; - let datas=[]; - if(data!=undefined){ - data.stage_list===undefined?"":data.stage_list.forEach((item,key)=>{ + let datas = []; + if (data != undefined) { + data.stage_list === undefined ? "" : data.stage_list.forEach((item, key) => { datas.push({ - customs: key+1, - taskname:{name:item.name,complete_status:item.complete_status}, - openingtime:item.open_time, + customs: key + 1, + taskname: {name: item.name, complete_status: item.complete_status}, + openingtime: item.open_time, evaluating: item.evaluate_count, - finishtime:item.finished_time, - elapsedtime:item.time_consuming, - empvalue:{myself:item.myself_experience,experience:item.experience}, - game_scores:{game_score:item.game_score,game_score_full:item.game_score_full}, - challenge_id:{id:item.challenge_id}, + finishtime: item.finished_time, + elapsedtime: item.time_consuming, + empvalue: {myself: item.myself_experience, experience: item.experience}, + game_scores: {game_score: item.game_score, game_score_full: item.game_score_full}, + challenge_id: {id: item.challenge_id}, challenge_comment: item.challenge_comment, challenge_comment_hidden: item.challenge_comment_hidden, // adjustmentminute:asdasd @@ -97,7 +99,7 @@ class OfficialAcademicTranscript extends Component { }) } - let columns=[{ + let columns = [{ title: '关卡', dataIndex: 'customs', key: 'customs', @@ -110,13 +112,17 @@ class OfficialAcademicTranscript extends Component { title: '任务名称', dataIndex: 'taskname', key: 'taskname', - className:"TaskForms", + className: "TaskForms", render: (text, record) => ( - this.myjumptopic("id"+record.customs)} title={record.taskname.name.length>15?record.taskname.name:""} > + this.myjumptopic("id" + record.customs)} + title={record.taskname.name.length > 15 ? record.taskname.name : ""}> {record.taskname.name} - {record.taskname.complete_status===2?延时:record.taskname.complete_status===3?延时:""} + {record.taskname.complete_status === 2 ? + 延时 : record.taskname.complete_status === 3 ? + 延时 : ""} ), @@ -158,79 +164,101 @@ class OfficialAcademicTranscript extends Component { {record.elapsedtime} ), - }, { - title: '经验值', - key: 'empvalue', - dataIndex: 'empvalue', + }, + { + title: '查看答案', + dataIndex: 'view_answer', + key: 'view_answer', + className: "edu-txt-center", + render: (text, record) => { + return ( + {record.view_answer === true ? + 学生在完成任务评测之前查是否看了参考答案 + + }>已查看 : + 学生在完成任务评测之前查是否看了参考答案 + + }>未查看 } + ) + } + }, + { + title: '经验值', + key: 'empvalue', + dataIndex: 'empvalue', - render: (text, record) => ( - - {record.empvalue.myself}/{record.empvalue.experience} + render: (text, record) => ( + + {record.empvalue.myself}/{record.empvalue.experience} - ), - },{ - title: '关卡得分', - key: 'game_scores', - dataIndex: 'game_scores', - render: (text, record) => ( - + ), + }, { + title: '关卡得分', + key: 'game_scores', + dataIndex: 'game_scores', + render: (text, record) => ( + 关卡得分:{record.game_scores.game_score}/关卡满分:{record.game_scores.game_score_full} }> - {record.game_scores.game_score}/{record.game_scores.game_score_full} + {record.game_scores.game_score}/{record.game_scores.game_score_full} - ), - },{ - title: '调分', - key: 'adjustmentminute', - dataIndex: 'adjustmentminute', + ), + }, { + title: '调分', + key: 'adjustmentminute', + dataIndex: 'adjustmentminute', - render: (text, record) => ( - - this.editgame_scores(e,record.challenge_id.id,record.game_scores.game_score_full)} - // min={0} max={record.game_scores.game_score_full} + render: (text, record) => ( + + this.editgame_scores(e, record.challenge_id.id, record.game_scores.game_score_full)} + // min={0} max={record.game_scores.game_score_full} /> - {/*查看*/} + {/*查看*/} - ), - },{ - title: '操作', - key: 'operation', - dataIndex: 'operation', + ), + }, { + title: '操作', + key: 'operation', + dataIndex: 'operation', - render: (text, record) => ( - + render: (text, record) => ( + this.props.showAppraiseModal("child",record.challenge_id.id,record.challenge_comment,record.challenge_comment_hidden)} + onClick={() => this.props.showAppraiseModal("child", record.challenge_id.id, record.challenge_comment, record.challenge_comment_hidden)} >评阅 - ), - }]; - + ), + }]; - if(this.props.isAdmin()===false){ - columns.some((item,key)=> { - if (item.title === "调分") { - columns.splice(key, 1) - return true - } - } - ) - columns.some((item,key)=> { - if (item.title === "操作") { - columns.splice(key, 1) - return true - } - } - ) - } + if (this.props.isAdmin() === false) { + columns.some((item, key) => { + if (item.title === "调分") { + columns.splice(key, 1) + return true + } + } + ) + columns.some((item, key) => { + if (item.title === "操作") { + columns.splice(key, 1) + return true + } + } + ) + } return (
    {/*{data===undefined?"":""}*/} @@ -301,10 +329,10 @@ class OfficialAcademicTranscript extends Component { } `} - {datas===undefined?"":} From 8e82b4c607f60566d2bb29c51314a36ceea0f70a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Tue, 22 Oct 2019 10:58:52 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=AE=9E=E8=AE=AD?= =?UTF-8?q?=E4=BD=9C=E5=93=81=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../courses/shixunHomework/Listofworksstudentone.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js index 7f18089ae..9d3d94561 100644 --- a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js +++ b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js @@ -987,6 +987,7 @@ class Listofworksstudentone extends Component {
    已通过{record.completion}关,共{this.state.challenges_count}关
    +
    完成任务评测之前查看了参考答案:{record.view_answer_count}关
    }> {record.completion+"/"+this.state.challenges_count}
    @@ -1100,6 +1101,7 @@ class Listofworksstudentone extends Component { :
    {record.user_name}{record.user_login}
    +
    完成任务评测之前查看了参考答案:{record.view_answer_count}关
    {record.levelscore === "--"?关卡得分:0分 :关卡得分:{record.levelscore}分}
    {record.efficiencyscore === "--"?效率评分:0分 :效率评分:{record.efficiencyscore}分}
    {record.late_penalty === "--"?迟交扣分:0分 :迟交扣分:{record.late_penalty}分}
    @@ -1293,6 +1295,7 @@ class Listofworksstudentone extends Component {
    已通过{record.completion}关,共{this.state.challenges_count}关
    +
    完成任务评测之前查看了参考答案:{record.view_answer_count}关
    }> {record.completion+"/"+this.state.challenges_count}
    @@ -1406,6 +1409,7 @@ class Listofworksstudentone extends Component { :
    {record.user_name}{record.user_login}
    +
    完成任务评测之前查看了参考答案:{record.view_answer_count}关
    {record.levelscore === "--"?关卡得分:0分 :关卡得分:{record.levelscore}分}
    {record.efficiencyscore === "--"?效率评分:0分 :效率评分:{record.efficiencyscore}分}
    {record.late_penalty === "--"?迟交扣分:0分 :迟交扣分:{record.late_penalty}分}
    @@ -1795,6 +1799,7 @@ class Listofworksstudentone extends Component { updatetime: timedata === "Invalid date" ? "--" : timedata, completion: teacherdata.complete_count === null ? "0" :teacherdata.complete_count === undefined ? "0": teacherdata.complete_count, levelscore: teacherdata.final_score, + view_answer_count: teacherdata.view_answer_count, efficiencyscore: teacherdata.eff_score, finalscore: teacherdata.work_score, operating: "查看", @@ -1838,6 +1843,7 @@ class Listofworksstudentone extends Component { levelscore: student_works[i].final_score, efficiencyscore: student_works[i].eff_score==="0.0"?"--":student_works[i].eff_score==="0"?"--":student_works[i].eff_score, finalscore:student_works[i].work_score, + view_answer_count: student_works[i].view_answer_count, operating: "查看", late_penalty: student_works[i].late_penalty=== null?"0":student_works[i].late_penalty === undefined?"0":student_works[i].late_penalty, ultimate_score:student_works[i].ultimate_score, @@ -1979,6 +1985,7 @@ class Listofworksstudentone extends Component { completion: teacherdata.complete_count === null ? "0" :teacherdata.complete_count === undefined ? "0": teacherdata.complete_count, levelscore: teacherdata.final_score, efficiencyscore: teacherdata.eff_score, + view_answer_count: teacherdata.view_answer_count, finalscore: teacherdata.work_score, operating: "查看", late_penalty: teacherdata.late_penalty=== null?"0":teacherdata.late_penalty === undefined?"0":teacherdata.late_penalty, @@ -2327,6 +2334,7 @@ class Listofworksstudentone extends Component { levelscore: student_works[i].final_score, efficiencyscore: student_works[i].eff_score==="0.0"?"--":student_works[i].eff_score==="0"?"--":student_works[i].eff_score, finalscore: student_works[i].work_score, + view_answer_count: student_works[i].view_answer_count, operating: "查看", late_penalty: student_works[i].late_penalty=== null?"0":student_works[i].late_penalty === undefined?"0":student_works[i].late_penalty, ultimate_score:student_works[i].ultimate_score, From 464adbfdb82848d68416e06584d8fcf64a71bbe3 Mon Sep 17 00:00:00 2001 From: p31729568 Date: Tue, 22 Oct 2019 11:03:09 +0800 Subject: [PATCH 11/13] admin: user statistic add column --- app/libs/util.rb | 15 +++++++++++++++ app/queries/admins/user_statistic_query.rb | 4 ++++ .../admins/user_statistics/export.xlsx.axlsx | 6 ++++-- .../admins/user_statistics/shared/_list.html.erb | 14 +++++++++----- 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/app/libs/util.rb b/app/libs/util.rb index 84f14a6c0..38b5c9af5 100644 --- a/app/libs/util.rb +++ b/app/libs/util.rb @@ -65,4 +65,19 @@ module Util else "#{str[0..2]}***#{str[-3..-1]}" end end + + def display_cost_time(time) + time = time.to_i + return if time.zero? || time < 60 + + day = time / (24 * 60 * 60) + hour = (time % (24 * 60 * 60)) / (60 * 60) + minute = (time % (60 * 60)) / 60 + + str = '' + str += "#{day}天" unless day.zero? + str += "#{hour}小时" unless hour.zero? + str += "#{minute}分" unless minute.zero? + str + end end \ No newline at end of file diff --git a/app/queries/admins/user_statistic_query.rb b/app/queries/admins/user_statistic_query.rb index d1811e5ab..d05656b3e 100644 --- a/app/queries/admins/user_statistic_query.rb +++ b/app/queries/admins/user_statistic_query.rb @@ -50,6 +50,8 @@ class Admins::UserStatisticQuery < ApplicationQuery finish_myshixun_map = finish_myshixun.group(:user_id).count study_challenge_map = study_challenge.group(:user_id).count finish_challenge_map = finish_challenge.group(:user_id).count + evaluate_count_map = study_challenge.group(:user_id).sum(:evaluate_count) + cost_time_map = study_challenge.group(:user_id).sum(:cost_time) users.each do |user| user._extra_data = { @@ -57,6 +59,8 @@ class Admins::UserStatisticQuery < ApplicationQuery finish_shixun_count: finish_myshixun_map.fetch(user.id, 0), study_challenge_count: study_challenge_map.fetch(user.id, 0), finish_challenge_count: finish_challenge_map.fetch(user.id, 0), + evaluate_count: evaluate_count_map.fetch(user.id, 0), + cost_time: cost_time_map.fetch(user.id, 0), } end diff --git a/app/views/admins/user_statistics/export.xlsx.axlsx b/app/views/admins/user_statistics/export.xlsx.axlsx index b66e62a99..1511b6ea3 100644 --- a/app/views/admins/user_statistics/export.xlsx.axlsx +++ b/app/views/admins/user_statistics/export.xlsx.axlsx @@ -1,6 +1,6 @@ wb = xlsx_package.workbook wb.add_worksheet(name: '用户实训情况') do |sheet| - sheet.add_row %w(姓名 单位部门 学习关卡数 完成关卡数 学习实训数 完成实训数) + sheet.add_row %w(姓名 单位部门 学习关卡数 完成关卡数 学习实训数 完成实训数 评测次数 实战时间) @users.each do |user| data = [ @@ -9,7 +9,9 @@ wb.add_worksheet(name: '用户实训情况') do |sheet| user.display_extra_data(:study_challenge_count), user.display_extra_data(:finish_challenge_count), user.display_extra_data(:study_shixun_count), - user.display_extra_data(:finish_shixun_count) + user.display_extra_data(:finish_shixun_count), + user.display_extra_data(:evaluate_count), + Util.display_cost_time(user.display_extra_data(:cost_time)), ] sheet.add_row(data) end diff --git a/app/views/admins/user_statistics/shared/_list.html.erb b/app/views/admins/user_statistics/shared/_list.html.erb index 1e1b14ea3..44076812d 100644 --- a/app/views/admins/user_statistics/shared/_list.html.erb +++ b/app/views/admins/user_statistics/shared/_list.html.erb @@ -2,11 +2,13 @@
    - - - - - + + + + + + + @@ -23,6 +25,8 @@ + + <% end %> <% else %> From e7c52d8eae8753da6d7b99dcf5f41460749d2dfa Mon Sep 17 00:00:00 2001 From: p31729568 Date: Tue, 22 Oct 2019 11:15:14 +0800 Subject: [PATCH 12/13] modify send message --- app/controllers/application_controller.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index df3e9c96e..76ffe23d4 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -112,6 +112,8 @@ class ApplicationController < ActionController::Base "验证码发送次数超过频率" when 43 "一天内同一手机号发送次数超过限制" + when 53 + "手机号接收超过频率限制" end end From c26c33990306c562ce1c11023072972480b3d4e2 Mon Sep 17 00:00:00 2001 From: p31729568 Date: Tue, 22 Oct 2019 11:19:57 +0800 Subject: [PATCH 13/13] weapp: fix already login buf --- app/controllers/weapps/code_sessions_controller.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/controllers/weapps/code_sessions_controller.rb b/app/controllers/weapps/code_sessions_controller.rb index 687605fc4..a99a048e2 100644 --- a/app/controllers/weapps/code_sessions_controller.rb +++ b/app/controllers/weapps/code_sessions_controller.rb @@ -1,8 +1,10 @@ class Weapps::CodeSessionsController < Weapps::BaseController def create - logged = false return render_error('code不能为空') if params[:code].blank? + reset_session + logged = false + result = Wechat::Weapp.jscode2session(params[:code]) # 能根据 code 拿到 unionid
    姓名单位部门<%= sort_tag('学习关卡数', name: 'study_challenge_count', path: admins_user_statistics_path) %><%= sort_tag('完成关卡数', name: 'finish_challenge_count', path: admins_user_statistics_path) %><%= sort_tag('学习实训数', name: 'study_shixun_count', path: admins_user_statistics_path) %><%= sort_tag('完成实训数', name: 'finish_shixun_count', path: admins_user_statistics_path) %>单位部门<%= sort_tag('学习关卡数', name: 'study_challenge_count', path: admins_user_statistics_path) %><%= sort_tag('完成关卡数', name: 'finish_challenge_count', path: admins_user_statistics_path) %><%= sort_tag('学习实训数', name: 'study_shixun_count', path: admins_user_statistics_path) %><%= sort_tag('完成实训数', name: 'finish_shixun_count', path: admins_user_statistics_path) %>评测次数实战时间
    <%= user.display_extra_data(:finish_challenge_count) %> <%= user.display_extra_data(:study_shixun_count) %> <%= user.display_extra_data(:finish_shixun_count) %><%= user.display_extra_data(:evaluate_count) %><%= Util.display_cost_time(user.display_extra_data(:cost_time)) || '--' %>