init project

This commit is contained in:
Jasder
2020-03-09 00:40:16 +08:00
commit 2937b2a94d
6549 changed files with 7215173 additions and 0 deletions

View File

@@ -0,0 +1,156 @@
$(document).on('turbolinks:load', function() {
if ($('body.admins-users-edit-page, body.admins-users-update-page').length > 0) {
var initDepartmentSelect = true;
// ************** 学校选择 *************
var matcherFunc = function(params, data){
if ($.trim(params.term) === '') {
return data;
}
if (typeof data.text === 'undefined') {
return null;
}
if (data.name && data.name.indexOf(params.term) > -1) {
var modifiedData = $.extend({}, data, true);
return modifiedData;
}
// Return `null` if the term should not be displayed
return null;
}
var defineSchoolSelect = function (schools) {
$('.school-select').select2({
theme: 'bootstrap4',
placeholder: '查询学校/单位',
minimumInputLength: 1,
data: schools,
templateResult: function (item) {
if(!item.id || item.id === '') return item.text;
return item.name;
},
templateSelection: function(item){
if (item.id) {
$('#user_school_id').val(item.id);
getDepartmentsData(item.id, defineDepartmentSelect2);
}
return item.name || item.text;
},
matcher: matcherFunc
});
};
var defineDepartmentSelect2 = function(departments){
departments.unshift({ id: '-1', name: '未选择' }); // 可不选
if (!initDepartmentSelect) { $('.department-select').empty(); } // 为了能够回填部门
initDepartmentSelect = false;
$('.department-select').select2({
theme: 'bootstrap4',
placeholder: '查询学院/部门',
minimumInputLength: 0,
data: departments,
templateResult: function (item) {
if(!item.id || item.id === '') return item.text;
return item.name;
},
templateSelection: function(item){
if (item.id) {
$('#user_department_id').val(item.id);
}
return item.name || item.text;
},
matcher: matcherFunc
});
};
var getDepartmentsData = function(school_id, callback){
$.ajax({
url: '/api/schools/' + school_id + '/departments/for_option.json',
dataType: 'json',
type: 'GET',
success: function(data) {
callback(data.departments);
}
})
}
// 初始化学校选择器
$.ajax({
url: '/api/schools/for_option.json',
dataType: 'json',
type: 'GET',
success: function(data) {
defineSchoolSelect(data.schools);
}
});
// **************** 地区选择 ****************
$('.province-city-select').cxSelect({
url: '/javascripts/educoder/province-data.json',
selects: ['province-select', 'city-select']
});
// *********** 职业选择 ************
var identityData = [
{
"v": "teacher",
"n": "教师",
"s": [{"n": "教授", "v": "教授"},{"n": "副教授", "v": "副教授"},{"n": "讲师", "v": "讲师"},{"n": "助教", "v": "助教"}]
},
{
"v": "student",
"n": "学生",
"s": []
},
{
"v": "professional",
"n": "专业人士",
"s": [{"n": "企业管理者", "v": "企业管理者"},{"n": "部门管理者", "v": "部门管理者"},{"n": "高级工程师", "v": "高级工程师"},{"n": "工程师", "v": "工程师"},{"n": "助理工程师", "v": "助理工程师"}]
}
];
$('.user-identity-select').cxSelect({
data: identityData,
jsonValue: 'v',
selects: ['identity-select', 'technical-title-select']
});
$('.identity-select').on('change', function(){
if($(this).val() === 'student'){
$('.technical-title-select-wrapper').hide();
$('.form-group.user_student_id').show();
} else {
$('.technical-title-select-wrapper').show();
$('.form-group.user_student_id').hide();
}
})
var $form = $('form.edit_user')
$form.validate({
errorElement: 'span',
errorClass: 'danger text-danger',
rules: {
"user[password]": {
required: false,
minlength: 5
},
"user[password_confirmation]": {
required: false,
minlength: 5,
equalTo: "#user_password"
},
},
messages: {
"user[password_confirmation]": {
equalTo: "两次密码输入不一致"
}
}
})
$form.submit(function(e){
if(!$form.valid()){ e.preventDefault(); }
})
}
});

View File

@@ -0,0 +1,218 @@
$(document).on('turbolinks:load', function(){
if ($('body.admins-users-index-page').length > 0) {
var showSuccessNotify = function() {
$.notify({
message: '操作成功'
},{
type: 'success'
});
}
// lock user
$('.users-list-container').on('click', '.lock-action', function(){
var $lockAction = $(this);
var $unlockAction = $lockAction.siblings('.unlock-action');
var userId = $lockAction.data('id');
customConfirm({
content: '确认加锁吗?',
ok: function(){
$.ajax({
url: '/admins/users/' + userId + '/lock',
method: 'POST',
dataType: 'json',
success: function() {
showSuccessNotify();
$lockAction.hide();
$unlockAction.show();
}
});
}
});
});
// unlock user
$('.users-list-container').on('click', '.unlock-action', function(){
var $unlockAction = $(this);
var $lockAction = $unlockAction.siblings('.lock-action');
var userId = $unlockAction.data('id');
customConfirm({
content: '确认解锁吗?',
ok: function () {
$.ajax({
url: '/admins/users/' + userId + '/unlock',
method: 'POST',
dataType: 'json',
success: function() {
showSuccessNotify();
$lockAction.show();
$unlockAction.hide();
}
});
}
})
});
// active user
$('.users-list-container').on('click', '.active-action', function(){
var $activeAction = $(this);
var $unlockAction = $activeAction.siblings('.unlock-action');
var $lockAction = $activeAction.siblings('.lock-action');
var userId = $activeAction.data('id');
customConfirm({
content: '确认激活吗?',
ok: function () {
$.ajax({
url: '/admins/users/' + userId + '/unlock',
method: 'POST',
dataType: 'json',
success: function() {
showSuccessNotify();
$activeAction.hide();
$lockAction.show();
$unlockAction.hide();
}
});
}
})
});
// reset user login times
$('.users-list-container').on('click', '.reset-login-times-action', function(){
var $action = $(this);
var userId = $action.data('id');
$.ajax({
url: '/admins/users/' + userId + '/reset_login_times',
method: 'POST',
dataType: 'json',
success: function() {
showSuccessNotify();
}
});
});
// ***************** reward grade modal *****************
var $rewardGradeModal = $('.admin-users-reward-grade-modal');
var $form = $rewardGradeModal.find('form.admin-users-reward-grade-form');
$form.validate({
errorElement: 'span',
errorClass: 'danger text-danger',
rules: {
grade: {
required: true,
digits: true
},
}
});
// modal ready fire
$rewardGradeModal.on('show.bs.modal', function (event) {
var $link = $(event.relatedTarget);
var userId = $link.data('id');
$rewardGradeModal.find('.modal-body input[name="user_id"]').val(userId);
});
// modal visited fire
$rewardGradeModal.on('shown.bs.modal', function(){
$rewardGradeModal.find('.modal-body input[name="grade"]').focus();
});
$('.admin-users-reward-grade-modal .submit-btn').on('click', function(){
$form.find('.error').html('');
if ($form.valid()) {
var userId = $form.find('input[name="user_id"]').val();
$.ajax({
method: 'POST',
dataType: 'json',
url: "/admins/users/" + userId + "/reward_grade",
data: $form.serialize(),
success: function(data) {
showSuccessNotify();
$('.users-list-container .user-item-' + userId + ' td.grade-content').html(data.grade);
$rewardGradeModal.modal('hide');
},
error: function(res) {
$rewardGradeModal.find('.error').html(res.responseJSON.message);
}
});
}
});
// 导入学生
var $importUserModal = $('.modal.admin-import-user-modal');
var $importUserForm = $importUserModal.find('form.admin-import-user-form')
$importUserModal.on('show.bs.modal', function(){
resetFileInputFunc($importUserModal.find('.upload-file-input'));
$importUserModal.find('.file-names').html('选择文件');
$importUserModal.find('.upload-file-input').trigger('click');
});
$importUserModal.on('change', '.upload-file-input', function(e){
var file = $(this)[0].files[0];
$importUserModal.find('.file-names').html(file ? file.name : '请选择文件');
})
var importUserFormValid = function(){
if($importUserForm.find('input[name="file"]').val() == undefined || $importUserForm.find('input[name="file"]').val().length == 0){
$importUserForm.find('.error').html('请选择文件');
return false;
}
return true;
};
var buildResultMessage = function(data){
var messageHtml = "<div>导入结果:成功" + data.success + "条,失败"+ data.fail.length + "条</div>";
if(data.fail.length > 0){
messageHtml += '<table class="table"><thead class="thead-light"><tr><th>数据</th><th>失败原因</th></tr></thead><tbody>';
data.fail.forEach(function(item){
messageHtml += '<tr><td>' + item.data + '</td><td>' + item.message + '</td></tr>';
});
messageHtml += '</tbody></table>'
}
return messageHtml;
}
$importUserModal.on('click', '.submit-btn', function(){
$importUserForm.find('.error').html('');
if (importUserFormValid()) {
$('body').mLoading({ text: '正在导入...' });
$.ajax({
method: 'POST',
dataType: 'json',
url: '/admins/import_users',
data: new FormData($importUserForm[0]),
processData: false,
contentType: false,
success: function(data){
$('body').mLoading('destroy');
$importUserModal.modal('hide');
showMessageModal(buildResultMessage(data), function(){
window.location.reload();
});
},
error: function(res){
$('body').mLoading('destroy');
var data = res.responseJSON;
$importUserForm.find('.error').html(data.message);
}
});
}
});
}
});