commit
4ff44c382e
@ -0,0 +1,126 @@
|
||||
$(document).on('turbolinks:load', function() {
|
||||
if ($('body.admins-laboratory-shixuns-index-page').length > 0) {
|
||||
var $searchForm = $('.laboratory-shixun-list-form .search-form');
|
||||
var laboratoryId = $('.laboratory-shixun-list-container').data('id');
|
||||
|
||||
$searchForm.find('select#tag_id').select2({
|
||||
placeholder: "请选择",
|
||||
allowClear: true
|
||||
});
|
||||
|
||||
// 定义状态切换监听事件
|
||||
var defineStatusChangeFunc = function (doElement, undoElement, url, callback) {
|
||||
$('.laboratory-shixun-list-container').on('click', doElement, function () {
|
||||
var $doAction = $(this);
|
||||
var $undoAction = $doAction.siblings(undoElement);
|
||||
|
||||
var laboratoryShixunId = $doAction.data('id');
|
||||
customConfirm({
|
||||
content: '确认进行该操作吗?',
|
||||
ok: function () {
|
||||
$.ajax({
|
||||
url: '/admins/laboratories/' + laboratoryId + '/laboratory_shixuns/' + laboratoryShixunId + url,
|
||||
method: 'POST',
|
||||
dataType: 'json',
|
||||
success: function () {
|
||||
show_success_flash();
|
||||
$doAction.hide();
|
||||
$undoAction.show();
|
||||
if (callback && typeof callback === "function") {
|
||||
callback(laboratoryShixunId, url);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 首页展示与取消首页展示
|
||||
var homepageShowCallback = function (laboratoryShixunId, url) {
|
||||
var $laboratoryShixunItem = $('.laboratory-shixun-list-container').find('.laboratory-shixun-item-' + laboratoryShixunId);
|
||||
|
||||
if (url === '/homepage') {
|
||||
$laboratoryShixunItem.find('.homepage-badge').show();
|
||||
} else {
|
||||
$laboratoryShixunItem.find('.homepage-badge').hide();
|
||||
}
|
||||
}
|
||||
defineStatusChangeFunc('.homepage-show-action', '.homepage-hide-action', '/homepage', homepageShowCallback);
|
||||
defineStatusChangeFunc('.homepage-hide-action', '.homepage-show-action', '/cancel_homepage', homepageShowCallback);
|
||||
|
||||
// 添加实训功能
|
||||
var $addModal = $('.modal.admin-add-laboratory-shixun-modal');
|
||||
var $addForm = $addModal.find('form.admin-add-laboratory-user-form');
|
||||
var $shixunSelect = $addForm.find('select.shixun-select');
|
||||
|
||||
$addModal.on('show.bs.modal', function(){
|
||||
$addModal.find('.error').html('');
|
||||
$shixunSelect.select2('val', ' ');
|
||||
});
|
||||
|
||||
$shixunSelect.select2({
|
||||
theme: 'bootstrap4',
|
||||
placeholder: '请输入实训名称/创建者检索',
|
||||
multiple: true,
|
||||
closeOnSelect: false,
|
||||
ajax: {
|
||||
delay: 500,
|
||||
url: '/admins/laboratories/' + laboratoryId + '/shixuns_for_select',
|
||||
dataType: 'json',
|
||||
data: function(params){
|
||||
return { keyword: params.term, page: params.page || 1, per_page: 20 };
|
||||
},
|
||||
processResults: function(data, params){
|
||||
params.page = params.page || 1;
|
||||
|
||||
return {
|
||||
results: data.shixuns,
|
||||
pagination: {
|
||||
more: (params.page * 20) < data.count
|
||||
}
|
||||
};
|
||||
}
|
||||
},
|
||||
templateResult: function (item) {
|
||||
if(!item.id || item.id === '') return item.text;
|
||||
var ele = '<span>'
|
||||
ele += '<span>' + item.name + '</span>';
|
||||
ele += '<span class="font-12"> -- ' + item.creator_name + '</span>';
|
||||
ele += '<span class="font-12"> -- ' + item.status_text+ '</span>';
|
||||
ele += '</span>';
|
||||
|
||||
return $(ele);
|
||||
},
|
||||
templateSelection: function(item){
|
||||
if (item.id) {
|
||||
}
|
||||
var ele = '<span>' + (item.name || item.text) + '<span class="font-12"> -- ' + item.creator_name + '</span></span>'
|
||||
return $(ele);
|
||||
}
|
||||
});
|
||||
|
||||
$addModal.on('click', '.submit-btn', function(){
|
||||
$addModal.find('.error').html('');
|
||||
|
||||
var shixunIds = $shixunSelect.val();
|
||||
if (shixunIds && shixunIds.length > 0) {
|
||||
$.ajax({
|
||||
method: 'POST',
|
||||
dataType: 'json',
|
||||
url: '/admins/laboratories/' + laboratoryId + '/laboratory_shixuns',
|
||||
data: { shixun_ids: shixunIds },
|
||||
success: function(){
|
||||
show_success_flash();
|
||||
window.location.reload();
|
||||
},
|
||||
error: function(res){
|
||||
$addModal.find('.error').html(res.responseJSON.message);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
$addModal.find('.error').html('请选择实训');
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
@ -0,0 +1,149 @@
|
||||
$(document).on('turbolinks:load', function() {
|
||||
if ($('body.admins-laboratory-subjects-index-page').length > 0) {
|
||||
var $searchForm = $('.laboratory-subject-list-form .search-form');
|
||||
var laboratoryId = $('.laboratory-subject-list-container').data('id');
|
||||
|
||||
// ************** 学校选择 *************
|
||||
$searchForm.find('.school-select').select2({
|
||||
theme: 'bootstrap4',
|
||||
placeholder: '请选择创建者单位',
|
||||
allowClear: true,
|
||||
minimumInputLength: 1,
|
||||
ajax: {
|
||||
delay: 500,
|
||||
url: '/api/schools/search.json',
|
||||
dataType: 'json',
|
||||
data: function (params) {
|
||||
return {keyword: params.term};
|
||||
},
|
||||
processResults: function (data) {
|
||||
return {results: data.schools}
|
||||
}
|
||||
},
|
||||
templateResult: function (item) {
|
||||
if (!item.id || item.id === '') return item.text;
|
||||
return item.name;
|
||||
},
|
||||
templateSelection: function (item) {
|
||||
if (item.id) {
|
||||
}
|
||||
return item.name || item.text;
|
||||
}
|
||||
});
|
||||
|
||||
// 定义状态切换监听事件
|
||||
var defineStatusChangeFunc = function (doElement, undoElement, url, callback) {
|
||||
$('.laboratory-subject-list-container').on('click', doElement, function () {
|
||||
var $doAction = $(this);
|
||||
var $undoAction = $doAction.siblings(undoElement);
|
||||
|
||||
var laboratorySubjectId = $doAction.data('id');
|
||||
customConfirm({
|
||||
content: '确认进行该操作吗?',
|
||||
ok: function () {
|
||||
$.ajax({
|
||||
url: '/admins/laboratories/' + laboratoryId + '/laboratory_subjects/' + laboratorySubjectId + url,
|
||||
method: 'POST',
|
||||
dataType: 'json',
|
||||
success: function () {
|
||||
show_success_flash();
|
||||
$doAction.hide();
|
||||
$undoAction.show();
|
||||
if (callback && typeof callback === "function") {
|
||||
callback(laboratorySubjectId, url);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 首页展示与取消首页展示
|
||||
var homepageShowCallback = function (laboratoryShixunId, url) {
|
||||
var $laboratoryShixunItem = $('.laboratory-subject-list-container').find('.laboratory-subject-item-' + laboratoryShixunId);
|
||||
|
||||
if (url === '/homepage') {
|
||||
$laboratoryShixunItem.find('.homepage-badge').show();
|
||||
} else {
|
||||
$laboratoryShixunItem.find('.homepage-badge').hide();
|
||||
}
|
||||
}
|
||||
defineStatusChangeFunc('.homepage-show-action', '.homepage-hide-action', '/homepage', homepageShowCallback);
|
||||
defineStatusChangeFunc('.homepage-hide-action', '.homepage-show-action', '/cancel_homepage', homepageShowCallback);
|
||||
|
||||
// 添加实践课程功能
|
||||
var $addModal = $('.modal.admin-add-laboratory-subject-modal');
|
||||
var $addForm = $addModal.find('form.admin-add-laboratory-user-form');
|
||||
var $subjectSelect = $addForm.find('select.subject-select');
|
||||
|
||||
$addModal.on('show.bs.modal', function(){
|
||||
$addModal.find('.error').html('');
|
||||
$subjectSelect.select2('val', ' ');
|
||||
});
|
||||
|
||||
$subjectSelect.select2({
|
||||
theme: 'bootstrap4',
|
||||
placeholder: '请输入课程名称/创建者检索',
|
||||
multiple: true,
|
||||
closeOnSelect: false,
|
||||
ajax: {
|
||||
delay: 500,
|
||||
url: '/admins/laboratories/' + laboratoryId + '/subjects_for_select',
|
||||
dataType: 'json',
|
||||
data: function(params){
|
||||
return { keyword: params.term, page: params.page || 1, per_page: 20 }
|
||||
},
|
||||
processResults: function(data, params){
|
||||
params.page = params.page || 1;
|
||||
|
||||
return {
|
||||
results: data.subjects,
|
||||
pagination: {
|
||||
more: (params.page * 20) < data.count
|
||||
}
|
||||
};
|
||||
}
|
||||
},
|
||||
templateResult: function (item) {
|
||||
if(!item.id || item.id === '') return item.text;
|
||||
var ele = '<span>'
|
||||
ele += '<span>' + item.name + '</span>';
|
||||
ele += '<span class="font-12"> -- ' + item.creator_name + '</span>';
|
||||
ele += '<span class="font-12"> -- ' + item.status_text+ '</span>';
|
||||
ele += '</span>';
|
||||
|
||||
return $(ele);
|
||||
},
|
||||
templateSelection: function(item){
|
||||
if (item.id) {
|
||||
}
|
||||
var ele = '<span>' + (item.name || item.text) + '<span class="font-12"> -- ' + item.creator_name + '</span></span>'
|
||||
return $(ele);
|
||||
}
|
||||
});
|
||||
|
||||
$addModal.on('click', '.submit-btn', function(){
|
||||
$addModal.find('.error').html('');
|
||||
|
||||
var subjectIds = $subjectSelect.val();
|
||||
if (subjectIds && subjectIds.length > 0) {
|
||||
$.ajax({
|
||||
method: 'POST',
|
||||
dataType: 'json',
|
||||
url: '/admins/laboratories/' + laboratoryId + '/laboratory_subjects',
|
||||
data: { subject_ids: subjectIds },
|
||||
success: function(){
|
||||
show_success_flash();
|
||||
window.location.reload();
|
||||
},
|
||||
error: function(res){
|
||||
$addModal.find('.error').html(res.responseJSON.message);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
$addModal.find('.error').html('请选择课程');
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
@ -0,0 +1,60 @@
|
||||
$(document).on('turbolinks:load', function() {
|
||||
if ($('body.cooperative-laboratory-shixuns-index-page').length > 0) {
|
||||
var $searchForm = $('.laboratory-shixun-list-form .search-form');
|
||||
|
||||
$searchForm.find('select#tag_id').select2({
|
||||
placeholder: "请选择",
|
||||
allowClear: true
|
||||
});
|
||||
|
||||
// 上传图片
|
||||
$('.modal.cooperative-upload-file-modal').on('upload:success', function (e, data) {
|
||||
var $imageElement = $('.shixun-image-' + data.source_id);
|
||||
if($imageElement.length === 0) return;
|
||||
$imageElement.attr('src', data.url);
|
||||
$imageElement.show();
|
||||
$imageElement.next().html('重新上传');
|
||||
});
|
||||
|
||||
// 定义状态切换监听事件
|
||||
var defineStatusChangeFunc = function (doElement, undoElement, url, callback) {
|
||||
$('.laboratory-shixun-list-container').on('click', doElement, function () {
|
||||
var $doAction = $(this);
|
||||
var $undoAction = $doAction.siblings(undoElement);
|
||||
|
||||
var laboratoryShixunId = $doAction.data('id');
|
||||
customConfirm({
|
||||
content: '确认进行该操作吗?',
|
||||
ok: function () {
|
||||
$.ajax({
|
||||
url: '/cooperative/laboratory_shixuns/' + laboratoryShixunId + url,
|
||||
method: 'POST',
|
||||
dataType: 'json',
|
||||
success: function () {
|
||||
show_success_flash();
|
||||
$doAction.hide();
|
||||
$undoAction.show();
|
||||
if (callback && typeof callback === "function") {
|
||||
callback(laboratoryShixunId, url);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 首页展示与取消首页展示
|
||||
var homepageShowCallback = function (laboratoryShixunId, url) {
|
||||
var $laboratoryShixunItem = $('.laboratory-shixun-list-container').find('.laboratory-shixun-item-' + laboratoryShixunId);
|
||||
|
||||
if (url === '/homepage') {
|
||||
$laboratoryShixunItem.find('.homepage-badge').show();
|
||||
} else {
|
||||
$laboratoryShixunItem.find('.homepage-badge').hide();
|
||||
}
|
||||
}
|
||||
defineStatusChangeFunc('.homepage-show-action', '.homepage-hide-action', '/homepage', homepageShowCallback);
|
||||
defineStatusChangeFunc('.homepage-hide-action', '.homepage-show-action', '/cancel_homepage', homepageShowCallback);
|
||||
}
|
||||
})
|
@ -0,0 +1,83 @@
|
||||
$(document).on('turbolinks:load', function() {
|
||||
if ($('body.cooperative-laboratory-subjects-index-page').length > 0) {
|
||||
var $searchForm = $('.laboratory-subject-list-form .search-form');
|
||||
|
||||
// ************** 学校选择 *************
|
||||
$searchForm.find('.school-select').select2({
|
||||
theme: 'bootstrap4',
|
||||
placeholder: '请选择创建者单位',
|
||||
allowClear: true,
|
||||
minimumInputLength: 1,
|
||||
ajax: {
|
||||
delay: 500,
|
||||
url: '/api/schools/search.json',
|
||||
dataType: 'json',
|
||||
data: function (params) {
|
||||
return {keyword: params.term};
|
||||
},
|
||||
processResults: function (data) {
|
||||
return {results: data.schools}
|
||||
}
|
||||
},
|
||||
templateResult: function (item) {
|
||||
if (!item.id || item.id === '') return item.text;
|
||||
return item.name;
|
||||
},
|
||||
templateSelection: function (item) {
|
||||
if (item.id) {
|
||||
}
|
||||
return item.name || item.text;
|
||||
}
|
||||
});
|
||||
|
||||
// 上传图片
|
||||
$('.modal.cooperative-upload-file-modal').on('upload:success', function (e, data) {
|
||||
var $imageElement = $('.subject-image-' + data.source_id);
|
||||
if($imageElement.length === 0) return;
|
||||
$imageElement.attr('src', data.url);
|
||||
$imageElement.show();
|
||||
$imageElement.next().html('重新上传');
|
||||
});
|
||||
|
||||
// 定义状态切换监听事件
|
||||
var defineStatusChangeFunc = function (doElement, undoElement, url, callback) {
|
||||
$('.laboratory-subject-list-container').on('click', doElement, function () {
|
||||
var $doAction = $(this);
|
||||
var $undoAction = $doAction.siblings(undoElement);
|
||||
|
||||
var laboratorySubjectId = $doAction.data('id');
|
||||
customConfirm({
|
||||
content: '确认进行该操作吗?',
|
||||
ok: function () {
|
||||
$.ajax({
|
||||
url: '/cooperative/laboratory_subjects/' + laboratorySubjectId + url,
|
||||
method: 'POST',
|
||||
dataType: 'json',
|
||||
success: function () {
|
||||
show_success_flash();
|
||||
$doAction.hide();
|
||||
$undoAction.show();
|
||||
if (callback && typeof callback === "function") {
|
||||
callback(laboratorySubjectId, url);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 首页展示与取消首页展示
|
||||
var homepageShowCallback = function (laboratoryShixunId, url) {
|
||||
var $laboratoryShixunItem = $('.laboratory-subject-list-container').find('.laboratory-subject-item-' + laboratoryShixunId);
|
||||
|
||||
if (url === '/homepage') {
|
||||
$laboratoryShixunItem.find('.homepage-badge').show();
|
||||
} else {
|
||||
$laboratoryShixunItem.find('.homepage-badge').hide();
|
||||
}
|
||||
}
|
||||
defineStatusChangeFunc('.homepage-show-action', '.homepage-hide-action', '/homepage', homepageShowCallback);
|
||||
defineStatusChangeFunc('.homepage-hide-action', '.homepage-show-action', '/cancel_homepage', homepageShowCallback);
|
||||
}
|
||||
})
|
@ -0,0 +1,18 @@
|
||||
$(document).on('turbolinks:load', function () {
|
||||
$('.cooperative-modal-container').on('show.bs.modal', '.modal.cooperative-edit-subject-modal', function () {
|
||||
var $modal = $('.modal.cooperative-edit-subject-modal');
|
||||
var $form = $modal.find('form.cooperative-edit-subject-form');
|
||||
|
||||
$modal.on('click', '.submit-btn', function () {
|
||||
$form.find('.error').html('');
|
||||
var url = $form.attr('action');
|
||||
|
||||
$.ajax({
|
||||
method: 'PATCH',
|
||||
dataType: 'script',
|
||||
url: url,
|
||||
data: $form.serialize()
|
||||
});
|
||||
});
|
||||
})
|
||||
});
|
@ -0,0 +1,41 @@
|
||||
class Admins::LaboratoryShixunsController < Admins::BaseController
|
||||
helper_method :current_laboratory, :current_laboratory_shixun
|
||||
|
||||
def index
|
||||
laboratory_shixuns = Admins::LaboratoryShixunQuery.call(current_laboratory, params)
|
||||
@laboratory_shixuns = paginate laboratory_shixuns.includes(shixun: %i[tag_repertoires user])
|
||||
end
|
||||
|
||||
def create
|
||||
shixun_ids = Array.wrap(params[:shixun_ids])
|
||||
shixun_ids = Shixun.where(id: shixun_ids).pluck(:id)
|
||||
exist_shixun_id = current_laboratory.laboratory_shixuns.where(shixun_id: shixun_ids).pluck(:shixun_id)
|
||||
|
||||
LaboratoryShixun.bulk_insert(*%i[shixun_id laboratory_id created_at updated_at]) do |worker|
|
||||
(shixun_ids - exist_shixun_id).each do |shixun_id|
|
||||
worker.add(shixun_id: shixun_id, laboratory_id: current_laboratory.id)
|
||||
end
|
||||
end
|
||||
render_ok
|
||||
end
|
||||
|
||||
def homepage
|
||||
current_laboratory_shixun.update!(homepage: true)
|
||||
render_ok
|
||||
end
|
||||
|
||||
def cancel_homepage
|
||||
current_laboratory_shixun.update!(homepage: false)
|
||||
render_ok
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def current_laboratory
|
||||
@_current_laboratory ||= Laboratory.find(params[:laboratory_id])
|
||||
end
|
||||
|
||||
def current_laboratory_shixun
|
||||
@_current_laboratory_shixun ||= current_laboratory.laboratory_shixuns.find(params[:id])
|
||||
end
|
||||
end
|
@ -0,0 +1,43 @@
|
||||
class Admins::LaboratorySubjectsController < Admins::BaseController
|
||||
helper_method :current_laboratory, :current_laboratory_subject
|
||||
|
||||
def index
|
||||
laboratory_subjects = Admins::LaboratorySubjectQuery.call(current_laboratory, params)
|
||||
|
||||
includes_tables = { subject: [:repertoire, :subject_level_system, user: {user_extension: :school}] }
|
||||
@laboratory_subjects = paginate(laboratory_subjects.includes(includes_tables))
|
||||
end
|
||||
|
||||
def create
|
||||
subject_ids = Array.wrap(params[:subject_ids])
|
||||
subject_ids = Subject.where(id: subject_ids).pluck(:id)
|
||||
exist_subject_id = current_laboratory.laboratory_subjects.where(subject_id: subject_ids).pluck(:subject_id)
|
||||
|
||||
LaboratorySubject.bulk_insert(*%i[subject_id laboratory_id created_at updated_at]) do |worker|
|
||||
(subject_ids - exist_subject_id).each do |subject_id|
|
||||
worker.add(subject_id: subject_id, laboratory_id: current_laboratory.id)
|
||||
end
|
||||
end
|
||||
render_ok
|
||||
end
|
||||
|
||||
def homepage
|
||||
current_laboratory_subject.update!(homepage: true)
|
||||
render_ok
|
||||
end
|
||||
|
||||
def cancel_homepage
|
||||
current_laboratory_subject.update!(homepage: false)
|
||||
render_ok
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def current_laboratory
|
||||
@_current_laboratory ||= Laboratory.find(params[:laboratory_id])
|
||||
end
|
||||
|
||||
def current_laboratory_subject
|
||||
@_current_laboratory_subject ||= current_laboratory.laboratory_subjects.find(params[:id])
|
||||
end
|
||||
end
|
@ -0,0 +1,39 @@
|
||||
class Cooperative::LaboratoryShixunsController < Cooperative::BaseController
|
||||
before_action :check_shixun_ownership!, only: [:edit, :update]
|
||||
|
||||
helper_method :current_laboratory_shixun
|
||||
|
||||
def index
|
||||
laboratory_shixuns = Admins::LaboratoryShixunQuery.call(current_laboratory, params)
|
||||
@laboratory_shixuns = paginate laboratory_shixuns.includes(shixun: %i[tag_repertoires user])
|
||||
end
|
||||
|
||||
def edit
|
||||
end
|
||||
|
||||
def update
|
||||
|
||||
end
|
||||
|
||||
def homepage
|
||||
current_laboratory_shixun.update!(homepage: true)
|
||||
render_ok
|
||||
end
|
||||
|
||||
def cancel_homepage
|
||||
current_laboratory_shixun.update!(homepage: false)
|
||||
render_ok
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def current_laboratory_shixun
|
||||
@_current_laboratory_shixun ||= current_laboratory.laboratory_shixuns.find(params[:id])
|
||||
end
|
||||
|
||||
def check_shixun_ownership!
|
||||
return if current_laboratory_shixun.ownership?
|
||||
|
||||
render_forbidden
|
||||
end
|
||||
end
|
@ -0,0 +1,46 @@
|
||||
class Cooperative::LaboratorySubjectsController < Cooperative::BaseController
|
||||
before_action :check_subject_ownership!, only: [:edit, :update]
|
||||
|
||||
helper_method :current_laboratory_subject
|
||||
|
||||
def index
|
||||
laboratory_subjects = Admins::LaboratorySubjectQuery.call(current_laboratory, params)
|
||||
|
||||
includes_tables = { subject: [:repertoire, :subject_level_system, user: {user_extension: :school}] }
|
||||
@laboratory_subjects = paginate(laboratory_subjects.includes(includes_tables))
|
||||
end
|
||||
|
||||
def edit
|
||||
@laboratory_subject = current_laboratory_subject
|
||||
end
|
||||
|
||||
def update
|
||||
current_laboratory_subject.subject.update!(update_params)
|
||||
end
|
||||
|
||||
def homepage
|
||||
current_laboratory_subject.update!(homepage: true)
|
||||
render_ok
|
||||
end
|
||||
|
||||
def cancel_homepage
|
||||
current_laboratory_subject.update!(homepage: false)
|
||||
render_ok
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def current_laboratory_subject
|
||||
@_current_laboratory_subject ||= current_laboratory.laboratory_subjects.find(params[:id])
|
||||
end
|
||||
|
||||
def check_subject_ownership!
|
||||
return if current_laboratory_subject.ownership?
|
||||
|
||||
render_forbidden
|
||||
end
|
||||
|
||||
def update_params
|
||||
params.require(:laboratory_subject).permit(:repertoire_id, :subject_level_system_id)
|
||||
end
|
||||
end
|
@ -0,0 +1,4 @@
|
||||
class LaboratoryShixun < ApplicationRecord
|
||||
belongs_to :laboratory
|
||||
belongs_to :shixun
|
||||
end
|
@ -0,0 +1,6 @@
|
||||
class LaboratorySubject < ApplicationRecord
|
||||
belongs_to :laboratory
|
||||
belongs_to :subject
|
||||
|
||||
delegate :repertoire_id, :subject_level_system_id, :student_count, to: :subject
|
||||
end
|
@ -1,5 +1,5 @@
|
||||
class TrustieHackathon < ApplicationRecord
|
||||
|
||||
validates_length_of :description, maximum: 500
|
||||
has_many :trustie_hacks, :dependent => :destroy
|
||||
|
||||
end
|
||||
|
@ -0,0 +1,36 @@
|
||||
class Admins::LaboratoryShixunQuery < ApplicationQuery
|
||||
attr_reader :laboratory, :params
|
||||
|
||||
def initialize(laboratory, params)
|
||||
@laboratory = laboratory
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call
|
||||
laboratory_shixuns = laboratory.laboratory_shixuns.joins(:shixun)
|
||||
|
||||
keyword = params[:keyword].to_s.strip
|
||||
if keyword.present?
|
||||
like_sql = 'shixuns.name LIKE :keyword OR CONCAT(users.lastname, users.firstname) LIKE :keyword'
|
||||
laboratory_shixuns = laboratory_shixuns.joins(shixun: :user).where(like_sql, keyword: "%#{keyword}%")
|
||||
end
|
||||
|
||||
# 实训状态
|
||||
laboratory_shixuns = laboratory_shixuns.where(shixuns: { status: params[:status] }) if params[:status].present?
|
||||
|
||||
# 技术平台
|
||||
if params[:tag_id].present?
|
||||
laboratory_shixuns = laboratory_shixuns.joins(shixun: :shixun_mirror_repositories)
|
||||
.where(shixun_mirror_repositories: { mirror_repository_id: params[:tag_id] })
|
||||
end
|
||||
|
||||
# 首页展示、单位自建
|
||||
%i[homepage ownership].each do |column|
|
||||
if params[column].present? && params[column].to_s == 'true'
|
||||
laboratory_shixuns = laboratory_shixuns.where(column => true)
|
||||
end
|
||||
end
|
||||
|
||||
laboratory_shixuns
|
||||
end
|
||||
end
|
@ -0,0 +1,36 @@
|
||||
class Admins::LaboratorySubjectQuery < ApplicationQuery
|
||||
attr_reader :laboratory, :params
|
||||
|
||||
def initialize(laboratory, params)
|
||||
@laboratory = laboratory
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call
|
||||
laboratory_subjects = laboratory.laboratory_subjects.joins(:subject)
|
||||
|
||||
keyword = params[:keyword].to_s.strip
|
||||
if keyword.present?
|
||||
like_sql = 'subjects.name LIKE :keyword OR CONCAT(users.lastname, users.firstname) LIKE :keyword'
|
||||
laboratory_subjects = laboratory_subjects.joins(subject: :user).where(like_sql, keyword: "%#{keyword}%")
|
||||
end
|
||||
|
||||
# 状态
|
||||
laboratory_subjects = laboratory_subjects.where(subjects: { status: params[:status] }) if params[:status].present?
|
||||
|
||||
# 创建者单位
|
||||
if params[:school_id].present?
|
||||
laboratory_subjects = laboratory_subjects.joins(subjects: { user: :user_extension })
|
||||
.where(user_extensions: { school_id: params[:school_id] })
|
||||
end
|
||||
|
||||
# 首页展示、单位自建
|
||||
%i[homepage ownership].each do |column|
|
||||
if params[column].present? && params[column].to_s == 'true'
|
||||
laboratory_subjects = laboratory_subjects.where(column => true)
|
||||
end
|
||||
end
|
||||
|
||||
laboratory_subjects
|
||||
end
|
||||
end
|
@ -0,0 +1,33 @@
|
||||
wb = xlsx_package.workbook
|
||||
|
||||
wb.styles do |s|
|
||||
blue_cell = s.add_style :bg_color => "FAEBDC", :sz => 10,:height => 25,:b => true, :border => { :style => :thin, :color =>"000000" },:alignment => {wrap_text: true,:horizontal => :center,:vertical => :center}
|
||||
wb.add_worksheet(name: "#{@competition.name}证书审批列表") do |sheet|
|
||||
sheet.add_row %w(序号 排名 奖项 战队ID 战队名称 姓名 职业 学号 学校名称 学院名称 地区 实名认证 职业认证 手机号码 队长 签领/开户行及银行卡号 审批时间 审批人), :height => 25,:style => blue_cell
|
||||
|
||||
@all_prize_users.each_with_index do |prize_user, index|
|
||||
user = prize_user.user
|
||||
data = [
|
||||
index + 1,
|
||||
prize_user.rank,
|
||||
prize_user.competition_prize.name,
|
||||
prize_user.competition_team_id,
|
||||
prize_user.competition_team.name,
|
||||
user.real_name,
|
||||
user.identity,
|
||||
user.student_id,
|
||||
user.school_name,
|
||||
user.department_name,
|
||||
user.location,
|
||||
user.auth_status,
|
||||
user.pro_status,
|
||||
user.phone,
|
||||
prize_user.leader? ? "是" : "-",
|
||||
[prize_user.extra&.[]('bank'), prize_user.extra&.[]('second_bank'), prize_user.extra&.[]('card_no')].compact.join('/'),
|
||||
prize_user.approved_at&.strftime('%Y-%m-%d %H:%M'),
|
||||
prize_user.approver&.real_name
|
||||
]
|
||||
sheet.add_row(data)
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,8 @@
|
||||
json.count @count
|
||||
json.shixuns do
|
||||
json.array! @shixuns do |shixun|
|
||||
json.extract! shixun, :id, :name, :status
|
||||
json.status_text I18n.t("shixun.status.#{shixun.status}")
|
||||
json.creator_name shixun.user.real_name
|
||||
end
|
||||
end
|
@ -0,0 +1,8 @@
|
||||
json.count @count
|
||||
json.subjects do
|
||||
json.array! @subjects do |subject|
|
||||
json.extract! subject, :id, :name, :status
|
||||
json.status_text I18n.t("subject.status.#{subject.status}")
|
||||
json.creator_name subject.user.real_name
|
||||
end
|
||||
end
|
@ -0,0 +1,45 @@
|
||||
<% define_admin_breadcrumbs do %>
|
||||
<% add_admin_breadcrumb('云上实验室', admins_laboratories_path) %>
|
||||
<% add_admin_breadcrumb("#{current_laboratory.name} - 实训项目") %>
|
||||
<% end %>
|
||||
|
||||
|
||||
<div class="box search-form-container laboratory-shixun-list-form">
|
||||
<%= form_tag(admins_laboratory_laboratory_shixuns_path(current_laboratory), method: :get, class: 'form-inline search-form', remote: true) do %>
|
||||
<div class="form-group mr-1">
|
||||
<label for="status">状态:</label>
|
||||
<% status_options = [['全部', ''], ['编辑中', 0], ['审核中', 1], ['已发布', 2], ['已关闭', 3]] %>
|
||||
<%= select_tag(:status, options_for_select(status_options), class: 'form-control') %>
|
||||
</div>
|
||||
|
||||
<div class="form-group mr-4">
|
||||
<label for="status">技术平台:</label>
|
||||
<%= select_tag(:tag_id, options_for_select(MirrorRepository.pluck(:type_name,:id).unshift(['']), params[:tag_id]), class: 'form-control') %>
|
||||
</div>
|
||||
|
||||
<%= text_field_tag(:keyword, params[:keyword], class: 'form-control col-12 col-md-2 mr-3', placeholder: '创建者/实训名称检索') %>
|
||||
|
||||
<div class="form-check mr-2">
|
||||
<%= hidden_field_tag(:homepage, false, id:'') %>
|
||||
<%= check_box_tag(:homepage, true, params[:homepage].to_s == 'true', class: 'form-check-input') %>
|
||||
<label class="form-check-label" for="homepage">只看首页展示</label>
|
||||
</div>
|
||||
|
||||
<div class="form-check mr-2">
|
||||
<%= hidden_field_tag(:ownership, false, id:'') %>
|
||||
<%= check_box_tag(:ownership, true, params[:ownership].to_s == 'true', class: 'form-check-input') %>
|
||||
<label class="form-check-label" for="ownership">只看自建</label>
|
||||
</div>
|
||||
|
||||
<%= submit_tag('搜索', class: 'btn btn-primary ml-3', 'data-disable-with': '搜索中...') %>
|
||||
<%= link_to '清空', admins_laboratory_laboratory_shixuns_path(current_laboratory), class: 'btn btn-default','data-disable-with': '清空中...' %>
|
||||
<% end %>
|
||||
|
||||
<%= javascript_void_link('添加实训', class: 'btn btn-primary', data: { toggle: 'modal', target: '.admin-add-laboratory-shixun-modal' }) %>
|
||||
</div>
|
||||
|
||||
<div class="box laboratory-shixun-list-container" data-id="<%= current_laboratory.id %>">
|
||||
<%= render partial: 'admins/laboratory_shixuns/shared/list', locals: { laboratory_shixuns: @laboratory_shixuns } %>
|
||||
</div>
|
||||
|
||||
<%= render partial: 'admins/laboratory_shixuns/shared/add_laboratory_shixun_modal' %>
|
@ -0,0 +1 @@
|
||||
$('.laboratory-shixun-list-container').html("<%= j(render partial: 'admins/laboratory_shixuns/shared/list', locals: { laboratory_shixuns: @laboratory_shixuns }) %>");
|
@ -0,0 +1,28 @@
|
||||
<div class="modal fade admin-add-laboratory-shixun-modal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">添加实训</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="admin-add-laboratory-user-form">
|
||||
<div class="form-group d-flex">
|
||||
<label class="col-form-label">选择实训:</label>
|
||||
<div class="d-flex flex-column-reverse w-75">
|
||||
<select id="shixun_ids" name="shixun_ids" class="form-control shixun-select" multiple></select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="error text-danger"></div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
|
||||
<button type="button" class="btn btn-primary submit-btn">确认</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,27 @@
|
||||
<table class="table text-center laboratory-shixun-list-table">
|
||||
<thead class="thead-light">
|
||||
<tr>
|
||||
<th width="28%" class="text-left">实训名称</th>
|
||||
<th width="12%">技术平台</th>
|
||||
<th width="14%" class="text-left">技术体系</th>
|
||||
<th width="10%">封面</th>
|
||||
<th width="8%">创建者</th>
|
||||
<th width="8%">状态</th>
|
||||
<th width="8%">执行时间</th>
|
||||
<th width="16%">操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% if laboratory_shixuns.present? %>
|
||||
<% laboratory_shixuns.each do |laboratory_shixun| %>
|
||||
<tr class="laboratory-shixun-item-<%= laboratory_shixun.id %>">
|
||||
<%= render partial: 'admins/laboratory_shixuns/shared/td', locals: { laboratory_shixun: laboratory_shixun } %>
|
||||
</tr>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<%= render 'admins/shared/no_data_for_table' %>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<%= render partial: 'admins/shared/paginate', locals: { objects: laboratory_shixuns } %>
|
@ -0,0 +1,28 @@
|
||||
<%- shixun = laboratory_shixun.shixun -%>
|
||||
|
||||
<td class="text-left">
|
||||
<%= link_to "/shixuns/#{shixun.identifier}", target: '_blank' do %>
|
||||
<%= shixun.name %>
|
||||
<span class="badge badge-pill badge-success homepage-badge" style="<%= laboratory_shixun.homepage? ? '' : 'display:none' %>">首页</span>
|
||||
<span class="badge badge-pill badge-info ownership-badge" style="<%= laboratory_shixun.ownership ? '' : 'display:none' %>">自建</span>
|
||||
<% end %>
|
||||
</td>
|
||||
<td><%= shixun.shixun_main_name %></td>
|
||||
<td class="text-left">
|
||||
<% shixun.tag_repertoires.each do |tag| %>
|
||||
<span class="badge badge-secondary"><%= tag.name %></span>
|
||||
<% end %>
|
||||
</td>
|
||||
<td>
|
||||
<% imageExists = Util::FileManage.exists?(shixun) %>
|
||||
<% imageUrl = imageExists ? '/' + url_to_avatar(shixun) : '' %>
|
||||
<%= image_tag(imageUrl, width: 60, height: 40, class: "preview-image shixun-image-#{shixun.id}", data: { toggle: 'tooltip', title: '点击预览' }, style: imageExists ? '' : 'display:none') %>
|
||||
</td>
|
||||
<td><%= link_to shixun.user&.real_name, "/users/#{shixun.user&.login}", target:'_blank' %></td>
|
||||
<td><span class="<%= shixun_status_class(shixun) %>"><%= t("shixun.status.#{shixun.status}") %></span></td>
|
||||
<td><%= shixun.excute_time %></td>
|
||||
<td class="action-container">
|
||||
<%= link_to('去修改', admins_shixun_settings_path(id: laboratory_shixun.shixun_id)) %>
|
||||
<%= javascript_void_link('首页展示', class: 'action homepage-show-action', data: { id: laboratory_shixun.id }, style: laboratory_shixun.homepage? ? 'display:none' : '') %>
|
||||
<%= javascript_void_link('取消首页展示', class: 'action homepage-hide-action', data: { id: laboratory_shixun.id }, style: laboratory_shixun.homepage? ? '' : 'display:none') %>
|
||||
</td>
|
@ -0,0 +1,45 @@
|
||||
<% define_admin_breadcrumbs do %>
|
||||
<% add_admin_breadcrumb('云上实验室', admins_laboratories_path) %>
|
||||
<% add_admin_breadcrumb("#{current_laboratory.name} - 实践课程") %>
|
||||
<% end %>
|
||||
|
||||
|
||||
<div class="box search-form-container laboratory-subject-list-form">
|
||||
<%= form_tag(admins_laboratory_laboratory_subjects_path(current_laboratory), method: :get, class: 'form-inline search-form', remote: true) do %>
|
||||
<div class="form-group mr-1">
|
||||
<label for="status">状态:</label>
|
||||
<% status_options = [['全部', ''], ['编辑中', 0], ['审核中', 1], ['已发布', 2]] %>
|
||||
<%= select_tag(:status, options_for_select(status_options), class: 'form-control') %>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-12 col-md-3">
|
||||
<label for="school_name">单位:</label>
|
||||
<%= select_tag :school_id, options_for_select([''], params[:school_id]), class: 'form-control school-select flex-1' %>
|
||||
</div>
|
||||
|
||||
<%= text_field_tag(:keyword, params[:keyword], class: 'form-control col-12 col-md-2 mr-3', placeholder: '创建者/课程名称检索') %>
|
||||
|
||||
<div class="form-check mr-2">
|
||||
<%= hidden_field_tag(:homepage, false, id:'') %>
|
||||
<%= check_box_tag(:homepage, true, params[:homepage].to_s == 'true', class: 'form-check-input') %>
|
||||
<label class="form-check-label" for="homepage">只看首页展示</label>
|
||||
</div>
|
||||
|
||||
<div class="form-check mr-2">
|
||||
<%= hidden_field_tag(:ownership, false, id:'') %>
|
||||
<%= check_box_tag(:ownership, true, params[:ownership].to_s == 'true', class: 'form-check-input') %>
|
||||
<label class="form-check-label" for="ownership">只看自建</label>
|
||||
</div>
|
||||
|
||||
<%= submit_tag('搜索', class: 'btn btn-primary ml-3', 'data-disable-with': '搜索中...') %>
|
||||
<%= link_to '清空', admins_laboratory_laboratory_subjects_path(current_laboratory), class: 'btn btn-default','data-disable-with': '清空中...' %>
|
||||
<% end %>
|
||||
|
||||
<%= javascript_void_link('添加课程', class: 'btn btn-primary', data: { toggle: 'modal', target: '.admin-add-laboratory-subject-modal' }) %>
|
||||
</div>
|
||||
|
||||
<div class="box laboratory-subject-list-container" data-id="<%= current_laboratory.id %>">
|
||||
<%= render partial: 'admins/laboratory_subjects/shared/list', locals: { laboratory_subjects: @laboratory_subjects } %>
|
||||
</div>
|
||||
|
||||
<%= render partial: 'admins/laboratory_subjects/shared/add_laboratory_subject_modal' %>
|
@ -0,0 +1 @@
|
||||
$('.laboratory-subject-list-container').html("<%= j(render partial: 'admins/laboratory_subjects/shared/list', locals: { laboratory_subjects: @laboratory_subjects }) %>");
|
@ -0,0 +1,28 @@
|
||||
<div class="modal fade admin-add-laboratory-subject-modal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">添加实践课程</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="admin-add-laboratory-user-form">
|
||||
<div class="form-group d-flex">
|
||||
<label class="col-form-label">选择实践课程:</label>
|
||||
<div class="d-flex flex-column-reverse w-75">
|
||||
<select id="subject_ids" name="subject_ids" class="form-control subject-select" multiple></select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="error text-danger"></div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
|
||||
<button type="button" class="btn btn-primary submit-btn">确认</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,48 @@
|
||||
<table class="table text-center laboratory-subject-list-table">
|
||||
<thead class="thead-light">
|
||||
<tr>
|
||||
<th width="28%" class="text-left">课程名称</th>
|
||||
<th width="12%">技术体系</th>
|
||||
<th width="10%">等级体系</th>
|
||||
<th width="10%">封面</th>
|
||||
<th width="8%">创建者</th>
|
||||
<th width="10%">单位</th>
|
||||
<th width="8%">状态</th>
|
||||
<th width="14%">操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% if laboratory_subjects.present? %>
|
||||
<% laboratory_subjects.each do |laboratory_subject| %>
|
||||
<tr class="laboratory-subject-item-<%= laboratory_subject.id %>">
|
||||
<%- subject = laboratory_subject.subject -%>
|
||||
|
||||
<td class="text-left">
|
||||
<%= link_to(subject.name, "/paths/#{subject.id}", target: '_blank') %>
|
||||
<span class="badge badge-pill badge-success homepage-badge" style="<%= laboratory_subject.homepage? ? '' : 'display:none' %>">首页</span>
|
||||
<span class="badge badge-pill badge-success ownership-badge" style="<%= laboratory_subject.ownership? ? '' : 'display:none' %>">自建</span>
|
||||
</td>
|
||||
<td><%= display_text subject.repertoire&.name %></td>
|
||||
<td><%= display_text subject.subject_level_system&.name %></td>
|
||||
<td>
|
||||
<% image_exists = Util::FileManage.exists?(subject) %>
|
||||
<%= image_tag(image_exists ? Util::FileManage.source_disk_file_url(subject) : '', height: 40, class: "w-100 preview-image subject-image-#{subject.id}", style: image_exists ? '' : 'display:none') %>
|
||||
</td>
|
||||
<td><%= subject.user.real_name %></td>
|
||||
<td><%= subject.user.school_name %></td>
|
||||
<td><%= display_subject_status(subject) %></td>
|
||||
|
||||
<td class="action-container">
|
||||
<%= link_to('去修改', admins_subjects_path(id: laboratory_subject.subject_id)) %>
|
||||
<%= javascript_void_link('首页展示', class: 'action homepage-show-action', data: { id: laboratory_subject.id }, style: laboratory_subject.homepage? ? 'display:none' : '') %>
|
||||
<%= javascript_void_link('取消首页展示', class: 'action homepage-hide-action', data: { id: laboratory_subject.id }, style: laboratory_subject.homepage? ? '' : 'display:none') %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<%= render 'admins/shared/no_data_for_table' %>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<%= render partial: 'admins/shared/paginate', locals: { objects: laboratory_subjects } %>
|
@ -0,0 +1,42 @@
|
||||
<% define_breadcrumbs do %>
|
||||
<% add_breadcrumb('实训项目') %>
|
||||
<% end %>
|
||||
|
||||
|
||||
<div class="box search-form-container laboratory-shixun-list-form">
|
||||
<%= form_tag(cooperative_laboratory_shixuns_path, method: :get, class: 'form-inline search-form', remote: true) do %>
|
||||
<div class="form-group mr-1">
|
||||
<label for="status">状态:</label>
|
||||
<% status_options = [['全部', ''], ['编辑中', 0], ['审核中', 1], ['已发布', 2], ['已关闭', 3]] %>
|
||||
<%= select_tag(:status, options_for_select(status_options), class: 'form-control') %>
|
||||
</div>
|
||||
|
||||
<div class="form-group mr-4">
|
||||
<label for="status">技术平台:</label>
|
||||
<%= select_tag(:tag_id, options_for_select(MirrorRepository.pluck(:type_name,:id).unshift(['']), params[:tag_id]), class: 'form-control') %>
|
||||
</div>
|
||||
|
||||
<%= text_field_tag(:keyword, params[:keyword], class: 'form-control col-12 col-md-2 mr-3', placeholder: '创建者/实训名称检索') %>
|
||||
|
||||
<div class="form-check mr-2">
|
||||
<%= hidden_field_tag(:homepage, false, id:'') %>
|
||||
<%= check_box_tag(:homepage, true, params[:homepage].to_s == 'true', class: 'form-check-input') %>
|
||||
<label class="form-check-label" for="homepage">只看首页展示</label>
|
||||
</div>
|
||||
|
||||
<div class="form-check mr-2">
|
||||
<%= hidden_field_tag(:ownership, false, id:'') %>
|
||||
<%= check_box_tag(:ownership, true, params[:ownership].to_s == 'true', class: 'form-check-input') %>
|
||||
<label class="form-check-label" for="ownership">只看自建</label>
|
||||
</div>
|
||||
|
||||
<%= submit_tag('搜索', class: 'btn btn-primary ml-3', 'data-disable-with': '搜索中...') %>
|
||||
<%= link_to '清空', cooperative_laboratory_shixuns_path, class: 'btn btn-default','data-disable-with': '清空中...' %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div class="box laboratory-shixun-list-container">
|
||||
<%= render partial: 'cooperative/laboratory_shixuns/shared/list', locals: { laboratory_shixuns: @laboratory_shixuns } %>
|
||||
</div>
|
||||
|
||||
<%= render(partial: 'cooperative/shared/modal/upload_file_modal', locals: { title: '上传封面', accept: 'image/*' }) %>
|
@ -0,0 +1 @@
|
||||
$('.laboratory-shixun-list-container').html("<%= j(render partial: 'cooperative/laboratory_shixuns/shared/list', locals: { laboratory_shixuns: @laboratory_shixuns }) %>");
|
@ -0,0 +1,27 @@
|
||||
<table class="table text-center laboratory-shixun-list-table">
|
||||
<thead class="thead-light">
|
||||
<tr>
|
||||
<th width="28%" class="text-left">实训名称</th>
|
||||
<th width="12%">技术平台</th>
|
||||
<th width="14%" class="text-left">技术体系</th>
|
||||
<th width="10%">封面</th>
|
||||
<th width="8%">创建者</th>
|
||||
<th width="8%">状态</th>
|
||||
<th width="8%">执行时间</th>
|
||||
<th width="16%">操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% if laboratory_shixuns.present? %>
|
||||
<% laboratory_shixuns.each do |laboratory_shixun| %>
|
||||
<tr class="laboratory-shixun-item-<%= laboratory_shixun.id %>">
|
||||
<%= render partial: 'cooperative/laboratory_shixuns/shared/td', locals: { laboratory_shixun: laboratory_shixun } %>
|
||||
</tr>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<%= render 'cooperative/shared/no_data_for_table' %>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<%= render partial: 'cooperative/shared/paginate', locals: { objects: laboratory_shixuns } %>
|
@ -0,0 +1,32 @@
|
||||
<%- shixun = laboratory_shixun.shixun -%>
|
||||
|
||||
<td class="text-left">
|
||||
<%= link_to "/shixuns/#{shixun.identifier}", target: '_blank' do %>
|
||||
<%= shixun.name %>
|
||||
<span class="badge badge-pill badge-success homepage-badge" style="<%= laboratory_shixun.homepage? ? '' : 'display:none' %>">首页</span>
|
||||
<span class="badge badge-pill badge-info ownership-badge" style="<%= laboratory_shixun.ownership ? '' : 'display:none' %>">自建</span>
|
||||
<% end %>
|
||||
</td>
|
||||
<td><%= shixun.shixun_main_name %></td>
|
||||
<td class="text-left">
|
||||
<% shixun.tag_repertoires.each do |tag| %>
|
||||
<span class="badge badge-secondary"><%= tag.name %></span>
|
||||
<% end %>
|
||||
</td>
|
||||
<td class="image-preview-container">
|
||||
<% imageExists = Util::FileManage.exists?(shixun) %>
|
||||
<%= image_tag(imageExists ? Util::FileManage.source_disk_file_url(shixun) : '', height: 40, class: "preview-image shixun-image-#{shixun.id}", data: { toggle: 'tooltip', title: '点击预览' }, style: imageExists ? '' : 'display:none') %>
|
||||
<% if laboratory_shixun.ownership? %>
|
||||
<%= javascript_void_link imageExists ? '重新上传' : '上传图片', class: 'action upload-shixun-image-action', data: { source_id: shixun.id, source_type: 'Shixun', toggle: 'modal', target: '.cooperative-upload-file-modal' } %>
|
||||
<% end %>
|
||||
</td>
|
||||
<td><%= link_to shixun.user&.real_name, "/users/#{shixun.user&.login}", target:'_blank' %></td>
|
||||
<td><span class="<%= shixun_status_class(shixun) %>"><%= t("shixun.status.#{shixun.status}") %></span></td>
|
||||
<td><%= shixun.excute_time %></td>
|
||||
<td class="action-container">
|
||||
<% if laboratory_shixun.ownership? %>
|
||||
<%#= link_to('修改', cooperative_laboratory_subjects_path(laboratory_shixun)) %>
|
||||
<% end %>
|
||||
<%= javascript_void_link('首页展示', class: 'action homepage-show-action', data: { id: laboratory_shixun.id }, style: laboratory_shixun.homepage? ? 'display:none' : '') %>
|
||||
<%= javascript_void_link('取消首页展示', class: 'action homepage-hide-action', data: { id: laboratory_shixun.id }, style: laboratory_shixun.homepage? ? '' : 'display:none') %>
|
||||
</td>
|
@ -0,0 +1,2 @@
|
||||
$('.cooperative-modal-container').html("<%= j( render partial: 'cooperative/laboratory_subjects/shared/edit_subject_modal', locals: { laboratory_subject: @laboratory_subject } ) %>");
|
||||
$('.modal.cooperative-edit-subject-modal').modal('show');
|
@ -0,0 +1,42 @@
|
||||
<% define_breadcrumbs do %>
|
||||
<% add_breadcrumb('实践课程') %>
|
||||
<% end %>
|
||||
|
||||
|
||||
<div class="box search-form-container laboratory-subject-list-form">
|
||||
<%= form_tag(cooperative_laboratory_subjects_path, method: :get, class: 'form-inline search-form', remote: true) do %>
|
||||
<div class="form-group mr-1">
|
||||
<label for="status">状态:</label>
|
||||
<% status_options = [['全部', ''], ['编辑中', 0], ['审核中', 1], ['已发布', 2]] %>
|
||||
<%= select_tag(:status, options_for_select(status_options), class: 'form-control') %>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-12 col-md-3">
|
||||
<label for="school_name">单位:</label>
|
||||
<%= select_tag :school_id, options_for_select([''], params[:school_id]), class: 'form-control school-select flex-1' %>
|
||||
</div>
|
||||
|
||||
<%= text_field_tag(:keyword, params[:keyword], class: 'form-control col-12 col-md-2 mr-3', placeholder: '创建者/课程名称检索') %>
|
||||
|
||||
<div class="form-check mr-2">
|
||||
<%= hidden_field_tag(:homepage, false, id:'') %>
|
||||
<%= check_box_tag(:homepage, true, params[:homepage].to_s == 'true', class: 'form-check-input') %>
|
||||
<label class="form-check-label" for="homepage">只看首页展示</label>
|
||||
</div>
|
||||
|
||||
<div class="form-check mr-2">
|
||||
<%= hidden_field_tag(:ownership, false, id:'') %>
|
||||
<%= check_box_tag(:ownership, true, params[:ownership].to_s == 'true', class: 'form-check-input') %>
|
||||
<label class="form-check-label" for="ownership">只看自建</label>
|
||||
</div>
|
||||
|
||||
<%= submit_tag('搜索', class: 'btn btn-primary ml-3', 'data-disable-with': '搜索中...') %>
|
||||
<%= link_to '清空', cooperative_laboratory_subjects_path(current_laboratory), class: 'btn btn-default','data-disable-with': '清空中...' %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div class="box laboratory-subject-list-container">
|
||||
<%= render partial: 'cooperative/laboratory_subjects/shared/list', locals: { laboratory_subjects: @laboratory_subjects } %>
|
||||
</div>
|
||||
|
||||
<%= render(partial: 'cooperative/shared/modal/upload_file_modal', locals: { title: '上传封面', accept: 'image/*' }) %>
|
@ -0,0 +1 @@
|
||||
$('.laboratory-subject-list-container').html("<%= j(render partial: 'cooperative/laboratory_subjects/shared/list', locals: { laboratory_subjects: @laboratory_subjects }) %>");
|
@ -0,0 +1,31 @@
|
||||
<div class="modal fade cooperative-edit-subject-modal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">编辑课程信息</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<%= simple_form_for([:cooperative, laboratory_subject], html: { class: 'cooperative-edit-subject-form' }, defaults: { wrapper_html: { class: 'offset-md-1 col-md-10' } }) do |f| %>
|
||||
<%= f.input :repertoire_id, label: '技术体系:' do %>
|
||||
<% repertoire_options = Repertoire.order('CONVERT(name USING gbk) COLLATE gbk_chinese_ci ASC').map{|r| [r.name, r.id]} %>
|
||||
<%= f.select :repertoire_id, [['请选择', '']] + repertoire_options, {}, class: 'form-control' %>
|
||||
<% end %>
|
||||
|
||||
<%= f.input :subject_level_system_id, label: '等级体系:' do %>
|
||||
<% level_options = SubjectLevelSystem.all.map{|r| [r.name, r.id]} %>
|
||||
<%= f.select :subject_level_system_id, [['请选择', '']] + level_options, {}, class: 'form-control' %>
|
||||
<% end %>
|
||||
|
||||
<div class="error text-danger"></div>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
|
||||
<button type="button" class="btn btn-primary submit-btn">确认</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,27 @@
|
||||
<table class="table text-center laboratory-subject-list-table">
|
||||
<thead class="thead-light">
|
||||
<tr>
|
||||
<th width="28%" class="text-left">课程名称</th>
|
||||
<th width="12%">技术体系</th>
|
||||
<th width="10%">等级体系</th>
|
||||
<th width="10%">封面</th>
|
||||
<th width="8%">创建者</th>
|
||||
<th width="10%">单位</th>
|
||||
<th width="8%">状态</th>
|
||||
<th width="14%">操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% if laboratory_subjects.present? %>
|
||||
<% laboratory_subjects.each do |laboratory_subject| %>
|
||||
<tr class="laboratory-subject-item-<%= laboratory_subject.id %>">
|
||||
<%= render partial: 'cooperative/laboratory_subjects/shared/td', locals: { laboratory_subject: laboratory_subject } %>
|
||||
</tr>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<%= render 'cooperative/shared/no_data_for_table' %>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<%= render partial: 'cooperative/shared/paginate', locals: { objects: laboratory_subjects } %>
|
@ -0,0 +1,28 @@
|
||||
<%- subject = laboratory_subject.subject -%>
|
||||
|
||||
<td class="text-left">
|
||||
<%= link_to(subject.name, "/paths/#{subject.id}", target: '_blank') %>
|
||||
<span class="badge badge-pill badge-success homepage-badge" style="<%= laboratory_subject.homepage? ? '' : 'display:none' %>">首页</span>
|
||||
<span class="badge badge-pill badge-success ownership-badge" style="<%= laboratory_subject.ownership? ? '' : 'display:none' %>">自建</span>
|
||||
</td>
|
||||
<td><%= display_text subject.repertoire&.name %></td>
|
||||
<td><%= display_text subject.subject_level_system&.name %></td>
|
||||
<td class="image-preview-container">
|
||||
<% image_exists = Util::FileManage.exists?(subject) %>
|
||||
<%= image_tag(image_exists ? Util::FileManage.source_disk_file_url(subject) : '', height: 40, class: "w-100 preview-image subject-image-#{subject.id}", style: image_exists ? '' : 'display:none') %>
|
||||
<% if laboratory_subject.ownership? %>
|
||||
<%= javascript_void_link image_exists ? '重新上传' : '上传图片', class: 'action upload-subject-image-action', data: { source_id: subject.id, source_type: 'Subject', toggle: 'modal', target: '.cooperative-upload-file-modal' } %>
|
||||
<% end %>
|
||||
</td>
|
||||
<td><%= link_to subject.user&.real_name, "/users/#{subject.user&.login}", target:'_blank' %></td>
|
||||
<td><%= subject.user.school_name %></td>
|
||||
<td><%= display_subject_status(subject) %></td>
|
||||
|
||||
<td class="action-container">
|
||||
<% if laboratory_subject.ownership? %>
|
||||
<%= link_to('修改', edit_cooperative_laboratory_subject_path(laboratory_subject), remote: true) %>
|
||||
<% end %>
|
||||
|
||||
<%= javascript_void_link('首页展示', class: 'action homepage-show-action', data: { id: laboratory_subject.id }, style: laboratory_subject.homepage? ? 'display:none' : '') %>
|
||||
<%= javascript_void_link('取消首页展示', class: 'action homepage-hide-action', data: { id: laboratory_subject.id }, style: laboratory_subject.homepage? ? '' : 'display:none') %>
|
||||
</td>
|
@ -0,0 +1,3 @@
|
||||
$('.laboratory-subject-list-container .laboratory-subject-item-<%= current_laboratory_subject.id %>').html("<%= j(render partial: 'cooperative/laboratory_subjects/shared/td', locals: { laboratory_subject: current_laboratory_subject }) %>");
|
||||
$('.cooperative-modal-container .modal.cooperative-edit-subject-modal').modal('hide');
|
||||
show_success_flash();
|
@ -1,2 +1,2 @@
|
||||
json.extract! message, :id, :parent_id, :subject, :created_on, :total_replies_count, :total_praises_count,
|
||||
:is_md, :praises_count, :visits, :sticky, :is_hidden, :is_public
|
||||
:is_md, :praises_count, :visits, :sticky, :is_hidden, :is_public, :email_notify
|
||||
|
@ -1,6 +1,8 @@
|
||||
admins-mirror_scripts: 'admins-mirror_repositories'
|
||||
admins-laboratory_settings: 'admins-laboratories'
|
||||
admins-carousels: 'admins-laboratories'
|
||||
admins-laboratory_shixuns: 'admins-laboratories'
|
||||
admins-laboratory_subjects: 'admins-laboratories'
|
||||
admins-competition_settings: 'admins-competitions'
|
||||
admins-enroll_lists: 'admins-competitions'
|
||||
admins-competition_prize_users: 'admins-competitions'
|
||||
|
@ -0,0 +1,13 @@
|
||||
class CreateLaboratoryShixuns < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_table :laboratory_shixuns do |t|
|
||||
t.references :laboratory
|
||||
t.references :shixun
|
||||
|
||||
t.boolean :ownership, default: false
|
||||
t.boolean :homepage, default: false
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,17 @@
|
||||
class AddPositionForInforms < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
add_column :informs, :position, :integer, :default => 1
|
||||
|
||||
course_ids = Inform.where(container_type: 'Course').pluck(:container_id).uniq
|
||||
courses = Course.where(id: course_ids)
|
||||
|
||||
courses.find_each do |course|
|
||||
next if course.informs.count == 1
|
||||
informs = course.informs.order("created_at asc")
|
||||
informs.each_with_index do |inform, index|
|
||||
inform.update_attribute(:position, index+1)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
@ -0,0 +1,13 @@
|
||||
class CreateLaboratorySubjects < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_table :laboratory_subjects do |t|
|
||||
t.references :laboratory
|
||||
t.references :subject
|
||||
|
||||
t.boolean :ownership, default: false
|
||||
t.boolean :homepage, default: false
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,5 @@
|
||||
class AddEmailNotifyToMessages < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
add_column :messages, :email_notify, :boolean, default: 0
|
||||
end
|
||||
end
|
@ -0,0 +1,6 @@
|
||||
class AddColumnToExerciseUserScore < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
add_column :exercise_user_scores, :subjective_score, :float, default: 0
|
||||
add_column :exercise_user_scores, :objective_score, :float, default: 0
|
||||
end
|
||||
end
|
@ -0,0 +1,6 @@
|
||||
class ModifyDescriotionLimitForHacks < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
change_column :trustie_hackathons, :description, :text
|
||||
change_column :trustie_hacks, :description, :text
|
||||
end
|
||||
end
|
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue