Merge branch 'topic_bank' of https://bdgit.educoder.net/Hjqreturn/educoder into topic_bank
commit
0cd9ef84a4
@ -1,14 +1,22 @@
|
|||||||
$(document).on('turbolinks:load', function() {
|
$(document).on('turbolinks:load', function() {
|
||||||
var $modal = $('.modal.admin-message-modal');
|
var $modal = $('.modal.admin-message-modal');
|
||||||
|
var $submitBtn = $modal.find('.submit-btn');
|
||||||
if ($modal.length > 0) {
|
if ($modal.length > 0) {
|
||||||
$modal.on('hide.bs.modal', function(){
|
$modal.on('hide.bs.modal', function(){
|
||||||
$modal.find('.modal-body').html('');
|
$modal.find('.modal-body').html('');
|
||||||
|
$submitBtn.unbind();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function showMessageModal(html) {
|
function showMessageModal(html, callback) {
|
||||||
var $modal = $('.modal.admin-message-modal');
|
var $modal = $('.modal.admin-message-modal');
|
||||||
|
var $submitBtn = $modal.find('.submit-btn');
|
||||||
|
$submitBtn.unbind();
|
||||||
|
if(callback !== undefined && typeof callback === 'function'){
|
||||||
|
$submitBtn.on('click', callback);
|
||||||
|
}
|
||||||
|
|
||||||
$modal.find('.modal-body').html(html);
|
$modal.find('.modal-body').html(html);
|
||||||
$modal.modal('show');
|
$modal.modal('show');
|
||||||
}
|
}
|
@ -0,0 +1,78 @@
|
|||||||
|
$(document).on('turbolinks:load', function() {
|
||||||
|
var $modal = $('.modal.admin-import-course-member-modal');
|
||||||
|
if ($modal.length > 0) {
|
||||||
|
var $form = $modal.find('form.admin-import-course-member-form');
|
||||||
|
|
||||||
|
var resetFileInputFunc = function(file){
|
||||||
|
file.after(file.clone().val(""));
|
||||||
|
file.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
$modal.on('show.bs.modal', function(){
|
||||||
|
$modal.find('.file-names').html('选择文件');
|
||||||
|
$modal.find('.upload-file-input').trigger('click');
|
||||||
|
});
|
||||||
|
$modal.on('hide.bs.modal', function(){
|
||||||
|
resetFileInputFunc($modal.find('.upload-file-input'));
|
||||||
|
});
|
||||||
|
$modal.on('change', '.upload-file-input', function(e){
|
||||||
|
var file = $(this)[0].files[0];
|
||||||
|
$modal.find('.file-names').html(file ? file.name : '请选择文件');
|
||||||
|
})
|
||||||
|
|
||||||
|
var importFormValid = function(){
|
||||||
|
if($form.find('input[name="file"]').val() == undefined || $form.find('input[name="file"]').val().length == 0){
|
||||||
|
$form.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;
|
||||||
|
}
|
||||||
|
|
||||||
|
$modal.on('click', '.submit-btn', function(){
|
||||||
|
$form.find('.error').html('');
|
||||||
|
|
||||||
|
if (importFormValid()) {
|
||||||
|
$('body').mLoading({ text: '正在导入...' });
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
method: 'POST',
|
||||||
|
dataType: 'json',
|
||||||
|
url: '/admins/import_course_members',
|
||||||
|
data: new FormData($form[0]),
|
||||||
|
processData: false,
|
||||||
|
contentType: false,
|
||||||
|
success: function(data){
|
||||||
|
$('body').mLoading('destroy');
|
||||||
|
$modal.modal('hide');
|
||||||
|
|
||||||
|
showMessageModal(buildResultMessage(data), function(){
|
||||||
|
window.location.reload();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
error: function(res){
|
||||||
|
$('body').mLoading('destroy');
|
||||||
|
var data = res.responseJSON;
|
||||||
|
$form.find('.error').html(data.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
@ -0,0 +1,103 @@
|
|||||||
|
class Admins::DepartmentAppliesController < Admins::BaseController
|
||||||
|
|
||||||
|
before_action :get_apply,only:[:agree,:destroy]
|
||||||
|
|
||||||
|
def index
|
||||||
|
params[:status] ||= 0
|
||||||
|
params[:sort_by] = params[:sort_by].presence || 'created_at'
|
||||||
|
params[:sort_direction] = params[:sort_direction].presence || 'desc'
|
||||||
|
applies = Admins::DepartmentApplyQuery.call(params)
|
||||||
|
@depart_applies = paginate applies.preload(:school,user: :user_extension)
|
||||||
|
end
|
||||||
|
|
||||||
|
def agree
|
||||||
|
ActiveRecord::Base.transaction do
|
||||||
|
@depart_apply.update_attribute("status",1)
|
||||||
|
@depart_apply&.applied_messages&.update_all(status:1)
|
||||||
|
@depart_apply&.department&.update_attribute("is_auth",1)
|
||||||
|
@depart_apply&.user&.user_extension&.update_attribute("department_id",@depart_apply.department_id)
|
||||||
|
render_success_js
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def merge
|
||||||
|
apply_id = params[:origin_department_id]
|
||||||
|
apply_add =ApplyAddDepartment.find(apply_id)
|
||||||
|
origin_id = apply_add&.department_id
|
||||||
|
new_id = params[:department_id]
|
||||||
|
|
||||||
|
return render_error('请选择其它部门') if origin_id.to_s == new_id.to_s
|
||||||
|
|
||||||
|
origin_department = apply_add&.department
|
||||||
|
to_department = Department.find(new_id)
|
||||||
|
|
||||||
|
return render_error('部门所属单位不相同') if origin_department&.school_id != to_department&.school_id
|
||||||
|
|
||||||
|
ActiveRecord::Base.transaction do
|
||||||
|
applied_message = AppliedMessage.where(applied_id: origin_id, applied_type: "ApplyAddDepartment")
|
||||||
|
|
||||||
|
applied_message.update_all(:status => 4)
|
||||||
|
apply_add.update_attribute(:status, 2)
|
||||||
|
apply_add.tidings.update_all(:status => 1)
|
||||||
|
|
||||||
|
extra = to_department&.name + "(#{apply_add&.department&.school&.try(:name)})"
|
||||||
|
tiding_params = {
|
||||||
|
user_id: apply_add.user_id,
|
||||||
|
trigger_user_id: 0,
|
||||||
|
container_id: apply_add.id,
|
||||||
|
container_type: 'ApplyAddDepartment',
|
||||||
|
belong_container_id: apply_add&.department&.school_id,
|
||||||
|
belong_container_type: "School",
|
||||||
|
tiding_type: "System",
|
||||||
|
status: 3,
|
||||||
|
extra: extra
|
||||||
|
}
|
||||||
|
Tiding.create(tiding_params)
|
||||||
|
|
||||||
|
origin_department.apply_add_departments.delete_all
|
||||||
|
|
||||||
|
origin_department.user_extensions.update_all(department_id: new_id)
|
||||||
|
|
||||||
|
if to_department.identifier.blank? && origin_department.identifier.present?
|
||||||
|
to_department.update!(identifier: origin_department.identifier)
|
||||||
|
end
|
||||||
|
|
||||||
|
origin_department.destroy!
|
||||||
|
apply_add.destroy!
|
||||||
|
end
|
||||||
|
render_ok
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
ActiveRecord::Base.transaction do
|
||||||
|
@depart_apply.update_attribute("status",3)
|
||||||
|
@depart_apply&.applied_messages&.update_all(status:3)
|
||||||
|
|
||||||
|
if params[:tip] == 'unapplied' #未审批时候删除
|
||||||
|
UserExtension.where(department_id: @depart_apply.department_id).update_all(department_id:nil)
|
||||||
|
tiding_params = {
|
||||||
|
user_id: @depart_apply.user_id,
|
||||||
|
trigger_user_id: 0,
|
||||||
|
container_id: @depart_apply.id,
|
||||||
|
container_type: 'ApplyAddDepartment',
|
||||||
|
belong_container_id: @depart_apply&.department&.school_id,
|
||||||
|
belong_container_type: "School",
|
||||||
|
tiding_type: "System",
|
||||||
|
status: 2,
|
||||||
|
extra: params[:reason]
|
||||||
|
}
|
||||||
|
Tiding.create(tiding_params)
|
||||||
|
end
|
||||||
|
|
||||||
|
@depart_apply&.department&.destroy
|
||||||
|
@depart_apply.destroy
|
||||||
|
render_success_js
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def get_apply
|
||||||
|
@depart_apply = ApplyAddDepartment.find_by(id:params[:id])
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,122 @@
|
|||||||
|
class Admins::UnitAppliesController < Admins::BaseController
|
||||||
|
before_action :get_apply,only: [:agree,:destroy,:edit,:update]
|
||||||
|
|
||||||
|
def index
|
||||||
|
params[:sort_by] ||= 'created_at'
|
||||||
|
params[:sort_direction] ||= 'desc'
|
||||||
|
unit_applies = Admins::UnitApplyQuery.call(params)
|
||||||
|
@unit_applies = paginate unit_applies.preload(:school, :user)
|
||||||
|
end
|
||||||
|
|
||||||
|
def agree
|
||||||
|
ActiveRecord::Base.transaction do
|
||||||
|
begin
|
||||||
|
@unit_apply.update_attribute("status",1)
|
||||||
|
@unit_apply&.applied_messages&.update_all(status:1)
|
||||||
|
@unit_apply&.school&.update_attribute("province",@unit_apply.province)
|
||||||
|
|
||||||
|
# #申请信息的创建
|
||||||
|
apply_message_params = {
|
||||||
|
user_id: @unit_apply&.user_id,
|
||||||
|
status: 1,
|
||||||
|
viewed: 0,
|
||||||
|
applied_id: @unit_apply.school_id,
|
||||||
|
applied_type: "ApplyAddSchools",
|
||||||
|
name: @unit_apply.name,
|
||||||
|
}
|
||||||
|
AppliedMessage.new(apply_message_params).save(validate: false)
|
||||||
|
|
||||||
|
Tiding.where(user_id: 1, trigger_user_id: @unit_apply.user_id, container_id: @unit_apply.id,
|
||||||
|
container_type: 'ApplyAddSchools', status: 0, tiding_type: "Apply").update_all(status: 1)
|
||||||
|
#消息的创建
|
||||||
|
tiding_params = {
|
||||||
|
user_id: @unit_apply.user_id,
|
||||||
|
trigger_user_id: 0,
|
||||||
|
container_id: @unit_apply.id,
|
||||||
|
container_type: 'ApplyAddSchools',
|
||||||
|
belong_container_id: @unit_apply.school_id,
|
||||||
|
belong_container_type: "School",
|
||||||
|
tiding_type: "System",
|
||||||
|
status: 1
|
||||||
|
}
|
||||||
|
Tiding.create(tiding_params)
|
||||||
|
render_success_js
|
||||||
|
rescue Exception => e
|
||||||
|
Rails.logger.info("############_________________#########{e}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
Admins::DeleteUnitApplyService.call(@unit_apply, params)
|
||||||
|
render_success_js
|
||||||
|
end
|
||||||
|
|
||||||
|
def edit
|
||||||
|
@all_schools = School.where.not(id: @unit_apply.school_id).pluck("name","id")
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
school = School.find_by(id: params[:school_id])
|
||||||
|
ActiveRecord::Base.transaction do
|
||||||
|
@unit_apply&.applied_messages&.update_all(status:4)
|
||||||
|
Tiding.where(user_id: 1, trigger_user_id: @unit_apply.user_id, container_id: @unit_apply.id,
|
||||||
|
container_type: 'ApplyAddSchools', status: 0, tiding_type: "Apply").update_all(status: 1)
|
||||||
|
|
||||||
|
#消息的创建
|
||||||
|
tiding_params = {
|
||||||
|
user_id: @unit_apply.user_id,
|
||||||
|
trigger_user_id: 0,
|
||||||
|
container_id: @unit_apply.id,
|
||||||
|
container_type: 'ApplyAddSchools',
|
||||||
|
belong_container_id: params[:school_id],
|
||||||
|
belong_container_type: "School",
|
||||||
|
tiding_type: "System",
|
||||||
|
status: 3,
|
||||||
|
extra: school.try(:name).to_s
|
||||||
|
}
|
||||||
|
Tiding.create(tiding_params)
|
||||||
|
|
||||||
|
UserExtension.where(school_id: @unit_apply.school_id).update_all(school_id: params[:school_id].to_i)
|
||||||
|
ApplyAddDepartment.where(:school_id => @unit_apply.school_id).update_all(school_id: params[:school_id].to_i)
|
||||||
|
|
||||||
|
# 判断重复
|
||||||
|
before_apply_departments = Department.where(school_id: @unit_apply.school_id)
|
||||||
|
before_apply_departments.each do |department|
|
||||||
|
after_dep = Department.where(school_id: params[:school_id].to_i, name: department.name)&.first
|
||||||
|
if after_dep.present?
|
||||||
|
UserExtension.where(school_id: @unit_apply.school_id, department_id: department.id).update_all(department_id: after_dep.id)
|
||||||
|
department.destroy
|
||||||
|
department.apply_add_departments.destroy_all
|
||||||
|
else
|
||||||
|
department.apply_add_departments.update_all(school_id: school.id)
|
||||||
|
department.update_attribute(:school_id, school.id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@unit_apply&.school&.destroy
|
||||||
|
apply_params = {
|
||||||
|
status: 2,
|
||||||
|
name: school&.name.to_s,
|
||||||
|
school_id: params[:school_id],
|
||||||
|
province: params[:province],
|
||||||
|
city: params[:city],
|
||||||
|
address: params[:address]
|
||||||
|
}
|
||||||
|
@unit_apply.update_attributes(apply_params)
|
||||||
|
# render_success_js
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def get_apply
|
||||||
|
@unit_apply = ApplyAddSchool.find_by(id:params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
|
def disk_auth_filename(source_type, source_id, type)
|
||||||
|
File.join(storage_path, "#{source_type}", "#{source_id}#{type}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -1,7 +1,10 @@
|
|||||||
class Wechats::JsSdkSignaturesController < ApplicationController
|
class Wechats::JsSdkSignaturesController < ApplicationController
|
||||||
def create
|
def create
|
||||||
signature = Util::Wechat.js_sdk_signature(params[:url], params[:noncestr], params[:timestamp])
|
timestamp = (Time.now.to_f * 1000).to_i
|
||||||
render_ok(signature: signature)
|
noncestr = ('A'..'z').to_a.sample(8).join
|
||||||
|
signature = Util::Wechat.js_sdk_signature(params[:url], noncestr, timestamp)
|
||||||
|
|
||||||
|
render_ok(appid: Util::Wechat.appid, timestamp: timestamp, noncestr: noncestr, signature: signature)
|
||||||
rescue Util::Wechat::Error => ex
|
rescue Util::Wechat::Error => ex
|
||||||
render_error(ex.message)
|
render_error(ex.message)
|
||||||
end
|
end
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
class Admins::DepartmentApplyQuery < ApplicationQuery
|
||||||
|
include CustomSortable
|
||||||
|
|
||||||
|
attr_reader :params
|
||||||
|
|
||||||
|
sort_columns :created_at, default_by: :created_at, default_direction: :desc
|
||||||
|
|
||||||
|
def initialize(params)
|
||||||
|
@params = params
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
status = params[:status]
|
||||||
|
|
||||||
|
applies = ApplyAddDepartment.where(status: status) if status.present?
|
||||||
|
|
||||||
|
# 关键字模糊查询
|
||||||
|
keyword = params[:keyword].to_s.strip
|
||||||
|
if keyword.present?
|
||||||
|
applies = applies.where('name LIKE :keyword', keyword: "%#{keyword}%")
|
||||||
|
end
|
||||||
|
|
||||||
|
custom_sort(applies, params[:sort_by], params[:sort_direction])
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,24 @@
|
|||||||
|
class Admins::UnitApplyQuery < ApplicationQuery
|
||||||
|
include CustomSortable
|
||||||
|
|
||||||
|
attr_reader :params
|
||||||
|
|
||||||
|
sort_columns :created_at, default_by: :created_at, default_direction: :desc
|
||||||
|
|
||||||
|
def initialize(params)
|
||||||
|
@params = params
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
unit_applies = ApplyAddSchool.where(status:0)
|
||||||
|
|
||||||
|
# 关键字模糊查询
|
||||||
|
keyword = params[:keyword].to_s.strip
|
||||||
|
if keyword.present?
|
||||||
|
unit_applies = unit_applies.where("name like ?","%#{keyword}%")
|
||||||
|
end
|
||||||
|
|
||||||
|
custom_sort(unit_applies, params[:sort_by], params[:sort_direction])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,56 @@
|
|||||||
|
class Admins::DeleteUnitApplyService < ApplicationService
|
||||||
|
|
||||||
|
attr_reader :department, :params
|
||||||
|
|
||||||
|
def initialize(unit_apply, params)
|
||||||
|
@unit_apply = unit_apply
|
||||||
|
@params = params
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
ActiveRecord::Base.transaction do
|
||||||
|
@unit_apply.update_attribute("status",3)
|
||||||
|
@unit_apply&.applied_messages&.update_all(status:3)
|
||||||
|
@unit_apply&.school&.apply_add_departments&.update_all(status:3)
|
||||||
|
|
||||||
|
applied_departments = ApplyAddDepartment.where(school_id: @unit_apply.school_id)
|
||||||
|
applied_departments.update_all(status: 3)
|
||||||
|
|
||||||
|
use_extensions = UserExtension&.where(school_id: @unit_apply.school_id)
|
||||||
|
user_ids = UserExtension&.where(school_id: @unit_apply.school_id)&.pluck(:user_id)
|
||||||
|
User.where(id: user_ids).update_all(profile_completed: false)
|
||||||
|
use_extensions.update_all(school_id: nil,department_id: nil)
|
||||||
|
|
||||||
|
@unit_apply&.user&.user_extension&.update_attribute("department_id", nil)
|
||||||
|
|
||||||
|
# 申请了职业认证的用户撤销申请
|
||||||
|
apply_user_auth = ApplyUserAuthentication.where(user_id: user_ids, auth_type: 2, status: 0)
|
||||||
|
apply_user_auth.each do |apply|
|
||||||
|
apply.tidings.destroy_all
|
||||||
|
apply.update_attribute('status', 3)
|
||||||
|
diskfile2 = disk_auth_filename('UserAuthentication', apply.user_id, 'PRO')
|
||||||
|
diskfilePRO = diskfile2 + 'temp'
|
||||||
|
File.delete(diskfilePRO) if File.exist?(diskfilePRO)
|
||||||
|
File.delete(diskfile2) if File.exist?(diskfile2)
|
||||||
|
end
|
||||||
|
|
||||||
|
# 未审批删除
|
||||||
|
if params[:tip] == "unapplied"
|
||||||
|
Tiding.where(:user_id => 1, :trigger_user_id => @unit_apply.user_id, :container_id => @unit_apply.id, :container_type => 'ApplyAddSchools', :status => 0, :tiding_type => "Apply").update_all(status: 1)
|
||||||
|
Tiding.create(:user_id => @unit_apply.user_id, :trigger_user_id => 0, :container_id => @unit_apply.id, :container_type =>'ApplyAddSchools', :belong_container_id => @unit_apply.school_id, :belong_container_type=> 'School', :tiding_type => "System", :status => 2, :extra => params[:reason])
|
||||||
|
|
||||||
|
Tiding.where(:user_id => 1, :container_id => applied_departments.pluck(:id), :container_type => 'ApplyAddDepartment', :status => 0, :tiding_type => "Apply").update_all(status: 1)
|
||||||
|
if applied_departments&.first.present?
|
||||||
|
Tiding.create(:user_id => applied_departments.first.user_id, :trigger_user_id => 0, :container_id => applied_departments.first.id, :container_type =>'ApplyAddDepartment', :belong_container_id => @unit_apply.school_id, :belong_container_type=> 'School', :tiding_type => "System", :status => 2)
|
||||||
|
AppliedMessage.create(:user_id => applied_departments.first.user_id, :status => 3, :viewed => 0, :applied_id => applied_departments.first.id, :applied_type => "ApplyAddDepartment", :name => applied_departments.first.name )
|
||||||
|
end
|
||||||
|
@unit_apply&.school&.destroy
|
||||||
|
@unit_apply&.school&.departments&.destroy_all
|
||||||
|
elsif params[:tip] == "applied"
|
||||||
|
applied_departments.destroy_all
|
||||||
|
@unit_apply.destroy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,30 @@
|
|||||||
|
<div class="modal fade admin-import-course-member-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-import-course-member-form" enctype="multipart/form-data">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text">文件</span>
|
||||||
|
</div>
|
||||||
|
<div class="custom-file">
|
||||||
|
<input type="file" name="file" id="import-course-member-input" class="upload-file-input" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet">
|
||||||
|
<label class="custom-file-label file-names" for="import-course-member-input">选择文件</label>
|
||||||
|
</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,18 @@
|
|||||||
|
<% define_admin_breadcrumbs do %>
|
||||||
|
<% add_admin_breadcrumb('部门审批') %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<div class="box search-form-container flex-column mb-0 pb-0 department-applies-list-form">
|
||||||
|
<%= form_tag(admins_department_applies_path(unsafe_params), method: :get, class: 'form-inline search-form mt-3', remote: true) do %>
|
||||||
|
<%= text_field_tag(:keyword, params[:keyword], class: 'form-control col-sm-2 ml-3', placeholder: '部门名称检索') %>
|
||||||
|
<%= submit_tag('搜索', class: 'btn btn-primary ml-3','data-disable-with':"搜索中...") %>
|
||||||
|
<%= link_to "清除",admins_department_applies_path(keyword:nil),class:"btn btn-default",remote:true %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box department-applies-list-container">
|
||||||
|
<%= render(partial: 'admins/department_applies/shared/list', locals: { applies: @depart_applies }) %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= render(partial: 'admins/shared/admin_common_refuse_modal') %>
|
||||||
|
<%= render 'admins/departments/shared/merge_department_modal' %>
|
@ -0,0 +1 @@
|
|||||||
|
$(".department-applies-list-container").html("<%= j render partial: "admins/department_applies/shared/list",locals: {applies:@depart_applies} %>")
|
@ -0,0 +1,39 @@
|
|||||||
|
<table class="table table-hover text-center department_applies-list-table">
|
||||||
|
<thead class="thead-light">
|
||||||
|
<tr>
|
||||||
|
<th width="8%">ID</th>
|
||||||
|
<th width="22%" class="text-left">部门名称</th>
|
||||||
|
<th width="20%" class="text-left">单位名称</th>
|
||||||
|
<th width="15%">创建者</th>
|
||||||
|
<th width="15%"><%= sort_tag('创建于', name: 'created_at', path: admins_department_applies_path) %></th>
|
||||||
|
<th width="20%">操作</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<% if applies.present? %>
|
||||||
|
<% applies.each do |apply| %>
|
||||||
|
<tr class="department-apply-<%= apply.id %>">
|
||||||
|
<td><%= apply.id %></td>
|
||||||
|
<td class="text-left"> <%= apply.name %></td>
|
||||||
|
<td class="text-left"> <%= apply.school.try(:name) %></td>
|
||||||
|
<td><%= apply.user.show_real_name %></td>
|
||||||
|
<td><%= format_time apply.created_at %></td>
|
||||||
|
<td class="action-container">
|
||||||
|
<%= agree_link '批准', agree_admins_department_apply_path(apply, element: ".department-apply-#{apply.id}"), 'data-confirm': '确认批准通过?' %>
|
||||||
|
<%= javascript_void_link('删除', class: 'action refuse-action',
|
||||||
|
data: {
|
||||||
|
toggle: 'modal', target: '.admin-common-refuse-modal', id: apply.id, title: "删除原因", type: "delete",
|
||||||
|
url: admins_department_apply_path(apply,tip:"unapplied", element: ".department-apply-#{apply.id}")
|
||||||
|
}) %>
|
||||||
|
<%= javascript_void_link '更改', class: 'action', data: { school_id: apply.school_id, department_id: apply.id,
|
||||||
|
toggle: 'modal', target: '.admin-merge-department-modal', url: merge_admins_department_applies_path } %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
<% else %>
|
||||||
|
<%= render 'admins/shared/no_data_for_table' %>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<%= render partial: 'admins/shared/paginate', locals: { objects: applies } %>
|
@ -0,0 +1,56 @@
|
|||||||
|
$("body").append("<%= j render partial: "admins/unit_applies/shared/edit_modal",locals: {apply: @unit_apply, schools: @all_schools} %>")
|
||||||
|
var uni_edit_modal = $(".admin-unit-edit-modal")
|
||||||
|
uni_edit_modal.modal("show")
|
||||||
|
|
||||||
|
uni_edit_modal.on("hidden.bs.modal",function () {
|
||||||
|
$(".admin-unit-edit-modal").remove()
|
||||||
|
$("body").removeClass("modal-open")
|
||||||
|
})
|
||||||
|
|
||||||
|
// 初始化学校选择器
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
$.ajax({
|
||||||
|
url: '/api/schools/for_option.json',
|
||||||
|
dataType: 'json',
|
||||||
|
type: 'GET',
|
||||||
|
success: function(data) {
|
||||||
|
$("#all-schools").select2({
|
||||||
|
theme: 'bootstrap4',
|
||||||
|
placeholder: '查询学校/单位',
|
||||||
|
minimumInputLength: 1,
|
||||||
|
data: data.schools,
|
||||||
|
templateResult: function (item) {
|
||||||
|
if(!item.id || item.id === '') return item.text;
|
||||||
|
return item.name;
|
||||||
|
},
|
||||||
|
templateSelection: function(item){
|
||||||
|
return item.name || item.text;
|
||||||
|
},
|
||||||
|
matcher: matcherFunc
|
||||||
|
})
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#all-schools").select2({})
|
||||||
|
$("#show-province-<%= @unit_apply.id %>").select2()
|
||||||
|
$("#schoolCity_<%= @unit_apply.id %>").select2()
|
||||||
|
|
||||||
|
// **************** 地区选择 ****************
|
||||||
|
$('.province-city-select').cxSelect({
|
||||||
|
url: '/javascripts/educoder/province-data.json',
|
||||||
|
selects: ['province-select', 'city-select']
|
||||||
|
});
|
@ -0,0 +1,17 @@
|
|||||||
|
<% define_admin_breadcrumbs do %>
|
||||||
|
<% add_admin_breadcrumb('单位审批') %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<div class="box search-form-container flex-column mb-0 pb-0 unit-applies-list-form">
|
||||||
|
<%= form_tag(admins_unit_applies_path(unsafe_params), method: :get, class: 'form-inline search-form mt-3', remote: true) do %>
|
||||||
|
<%= text_field_tag(:keyword, params[:keyword], class: 'form-control col-sm-2 ml-3', placeholder: '单位名称检索') %>
|
||||||
|
<%= submit_tag('搜索', class: 'btn btn-primary ml-3','data-disable-with':"搜索中...") %>
|
||||||
|
<%= link_to "清除",admins_unit_applies_path(keyword:nil),class:"btn btn-default",remote:true %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box unit-applies-list-container">
|
||||||
|
<%= render(partial: 'admins/unit_applies/shared/list', locals: { applies: @unit_applies }) %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= render(partial: 'admins/shared/admin_common_refuse_modal') %>
|
@ -0,0 +1 @@
|
|||||||
|
$(".unit-applies-list-container").html("<%= j render partial: "admins/unit_applies/shared/list", locals: {applies: @unit_applies} %>")
|
@ -0,0 +1,17 @@
|
|||||||
|
<td><%= apply.id %></td>
|
||||||
|
<td class="text-left"><%= overflow_hidden_span apply.name %></td>
|
||||||
|
<td class="text-left">
|
||||||
|
<%= "#{apply&.province.to_s}"+"#{apply&.city.to_s}" %>
|
||||||
|
</td>
|
||||||
|
<td class="text-left"><%= overflow_hidden_span apply.address %></td>
|
||||||
|
<td><%= apply.user.try(:show_real_name) %></td>
|
||||||
|
<td><%= format_time apply.created_at %></td>
|
||||||
|
<td class="action-container">
|
||||||
|
<%= agree_link '批准', agree_admins_unit_apply_path(apply, element: ".unit-apply-#{apply.id}"), 'data-confirm': '确认批准通过?' %>
|
||||||
|
<%= javascript_void_link('删除', class: 'action refuse-action',
|
||||||
|
data: {
|
||||||
|
toggle: 'modal', target: '.admin-common-refuse-modal', id: apply.id, title: "删除原因", type: "delete",
|
||||||
|
url: admins_unit_apply_path(apply, tip: "unapplied", element: ".unit-apply-#{apply.id}")
|
||||||
|
}) %>
|
||||||
|
<%= link_to "更改",edit_admins_unit_apply_path(apply), remote: true, class:"action",'data-disable-with': '打开中...' %>
|
||||||
|
</td>
|
@ -0,0 +1,43 @@
|
|||||||
|
<div class="modal fade admin-unit-edit-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>
|
||||||
|
<%= form_tag(admins_unit_apply_path, method: :put, remote: true) do %>
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="form-group d-flex">
|
||||||
|
<label for="school_id" class="col-form-label">更改学校:</label>
|
||||||
|
<div class="d-flex flex-column-reverse w-75">
|
||||||
|
<%= select_tag :school_id, [apply&.school_id], class: 'form-control school-select optional',id: "all-schools" %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group d-flex">
|
||||||
|
<label for="school_id" class="col-form-label">更改城市:</label>
|
||||||
|
<div class="d-flex w-75 province-city-select">
|
||||||
|
<div class="w-50 mr-3">
|
||||||
|
<%= select_tag('province', [], class: 'form-control province-select optional', 'data-value': apply.province, 'data-first-title': '请选择', id:"show-province-#{apply.id}") %>
|
||||||
|
</div>
|
||||||
|
<div class="w-50">
|
||||||
|
<%= select_tag('city', [], class: 'form-control city-select optional', 'data-value': apply.city, id: "schoolCity_#{apply.id}") %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group d-flex">
|
||||||
|
<label for="school_id" class="col-form-label">更改地址:</label>
|
||||||
|
<div class="d-flex w-75 flex-column-reverse">
|
||||||
|
<%= text_field_tag :address,apply.address,class:"form-control" %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
|
||||||
|
<%= submit_tag "确认",class:"btn btn-primary" %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -0,0 +1,26 @@
|
|||||||
|
<table class="table table-hover text-center unit-applies-list-table">
|
||||||
|
<thead class="thead-light">
|
||||||
|
<tr>
|
||||||
|
<th width="8%">ID</th>
|
||||||
|
<th width="20%" class="text-left">单位名称</th>
|
||||||
|
<th width="12%" class="text-left">地区</th>
|
||||||
|
<th width="20%" class="text-left">详细地址</th>
|
||||||
|
<th width="10%">申请者</th>
|
||||||
|
<th width="15%"><%= sort_tag('创建于', name: 'created_at', path: admins_unit_applies_path) %></th>
|
||||||
|
<th width="15%">操作</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<% if applies.present? %>
|
||||||
|
<% applies.each do |apply| %>
|
||||||
|
<tr class="unit-apply-<%= apply.id %>">
|
||||||
|
<%= render partial: "admins/unit_applies/shared/apply_item", locals: {apply: apply} %>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
<% else %>
|
||||||
|
<%= render 'admins/shared/no_data_for_table' %>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<%= render partial: 'admins/shared/paginate', locals: { objects: applies } %>
|
@ -0,0 +1,3 @@
|
|||||||
|
$('.modal.admin-unit-edit-modal').modal('hide');
|
||||||
|
$('.unit-applies-list-table .unit-apply-<%= @unit_apply.id %>').remove()
|
||||||
|
$.notify({ message: '操作成功' });
|
@ -0,0 +1,17 @@
|
|||||||
|
json.shixuns_count @total_count
|
||||||
|
|
||||||
|
json.shixun_list do
|
||||||
|
json.array! @shixuns.with_highlights(multiple: true) do |obj, highlights|
|
||||||
|
puts obj
|
||||||
|
json.merge! obj.to_searchable_json
|
||||||
|
json.challenge_names obj.challenges.pluck(:subject)
|
||||||
|
|
||||||
|
json.title highlights.delete(:name)&.join('...') || obj.searchable_title
|
||||||
|
# json.description highlights.values[0,5].each { |arr| arr.is_a?(Array) ? arr.join('...') : arr }.join('<br/>')
|
||||||
|
json.content highlights
|
||||||
|
json.level level_to_s(obj.trainee)
|
||||||
|
json.subjects obj.subjects do |subject|
|
||||||
|
json.(subject, :id, :name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,3 +1,6 @@
|
|||||||
export function isDev() {
|
export function isDev() {
|
||||||
return window.location.port === "3007";
|
return window.location.port === "3007";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// const isMobile
|
||||||
|
export const isMobile = (/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(navigator.userAgent.toLowerCase()));
|
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 661 KiB |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue