Skip to content

Instantly share code, notes, and snippets.

@ckentq
Created April 21, 2023 05:58
Show Gist options
  • Save ckentq/33e7d97168a27787ad50f4ace718f1a1 to your computer and use it in GitHub Desktop.
Save ckentq/33e7d97168a27787ad50f4ace718f1a1 to your computer and use it in GitHub Desktop.
var searchForm = $('#search-form');
var searchUrl = searchForm.attr('action');
var bannerTable = $('#banner-table');
var _bannerTable;
var editUrl = bannerTable.attr('data-edit-url');
var queryUrl = bannerTable.attr('data-query-url');
$.fn.dataTable.ext.errMode = 'none';
var dataTableSettings = {
stateSave: false,
processing: true,
serverSide: true,
searching: false,
destroy: true,
autoWidth: true,
ordering: false,
paging: true,
info: true,
language: datatable_lang_tw,
ajax: {
url: queryUrl,
type: 'GET',
data: function(aoData) {
//把分頁的參數與自訂的搜尋結合
$.each(searchForm.serializeArray(), function(key, value) {
aoData[value.name] = value.value;
});
return aoData;
},
dataSrc: 'data',
error: function(xhr, error, code) {
// console.log('xhr',xhr);
// console.log('code',code);
// console.log('error',error);
if (code == 'Forbidden') {
location.reload();
} else if (xhr.status == 419) {
location.reload();
}
}
},
columns: [
{
data: null,
width: '10px',
className: 'text-center',
defaultContent: '',
mRender: function(data, type, full) {
return '<button class="btn btn-outline-secondary js-up" value="up_' + data.id + '"><i class="la la-long-arrow-up" style="font-size:20px"></i></button>\
<button class="btn btn-outline-secondary js-down" value="down_' + data.id + '"><i class="la la-long-arrow-down " style="font-size:20px"></i></button>';
}
},
{ //操作
data: null,
width: '40px',
className: 'text-center',
defaultContent: '',
mRender: function(data, type, full) {
if(data.front_active){
return '<span class="btn btn-bold btn-sm btn-font-sm btn-label-brand">上線中</span>';
}else{
return '下線';
}
}
},
{
data: 'bannerThumb',
width: '150px',
mRender: function(data, type, full) {
return '<img src="'+data+'" style="width: 150px"/>';
}
},
{
data: 'title',
width: '100px',
},
{
data: 'start_time',
width: '80px',
},
{
data: 'end_time',
width: '80px',
},
{ //操作
data: null,
width: '40px',
className: 'text-center',
defaultContent: '',
mRender: function(data, type, full) {
if(data.status){
return '<span class="btn btn-bold btn-sm btn-font-sm btn-label-success">是</span>';
}else{
return '否';
}
}
},
{ //操作
data: null,
width: '80px',
className: 'text-center',
defaultContent: '',
mRender: function(data, type, full) {
return '<a href="' + editUrl.replace('_id', data.id) + '" class="btn btn-outline-primary btn-icon mb-1 mr-1" id="edit-' + data.id + '-btn"><i class="la la-edit" style="font-size:20px"></i></a><a href="javascript:void(0)" class="btn btn-outline-danger btn-elevate btn-icon banner-delete mb-1 mr-1" data-trash-id="' + data.id + '"><i class="la la-trash" data-trash-id="' + data.id + '"></i></a>';
}
}
],
"rowCallback": function(row, data, index) {
},
}
_bannerTable = bannerTable.DataTable(dataTableSettings);
//-------------
var _candidate_data_table = null;
$(document).ready(function(){
var _candidate_table = $('#candidate-table');
var _load_candidate_url = _candidate_table.attr('data-load-action');
var _view_url = _candidate_table.attr('data-view-action');
var _delete_url = _candidate_table.attr('data-delete-action');
var _contact_history_url = _candidate_table.attr('data-contact-history-action');
var _contactRecordForm = $('#contact-record-form');
var expandRowTemplate = Handlebars.compile($("#case-contact-history-template").html());
var callLaterTemplate = Handlebars.compile($("#case-call-later-template").html());
var sumUrl = $('#show-candidate-stastics-modal-btn').attr('data-url');
var case_id = $('#show-candidate-stastics-modal-btn').attr('data-id');
var statsticTable = $('#stastic-table');
$('.datatimepicker').datetimepicker({
value : moment().format('Y/M/D H:m'),
format:'Y/m/d H:i',
step:30
});
/* expand table */
function format ( data ) {
// `d` is the original data object for the row
var content = '';
var callLaterContent = '';
var callLaterUsed = false;
$.each(data.contact_records, function(index, value){
if(value.status=='Call_later' && data.status=='Call later' && !callLaterUsed){
callLaterUsed = true;
callLaterContent = callLaterTemplate(value);
}else if(value.status!='None' && value.status){
// console.log(value.status);
content+=expandRowTemplate(value);
}
});
return '<table cellpadding="5" cellspacing="0" border="0" class="table table-striped table-bordered child_table"><thead>'+callLaterContent+'<tr class="interview_record_row"><th>Content</th><th width="126">CreateTime</th><th width="100">Consultant</th></tr></thead><tbody>'+content+'</tbody></table>';
}
_candidate_data_table =_candidate_table.DataTable({
stateSave: false,
processing: true,
// serverSide: true,
searching: true,
paging: true,
info: true,
// retrieve: false,
destroy: true,
autoWidth: true,
// order: [[ 1, "desc" ]],
ajax:{
url :_load_candidate_url,
type: "post",
dataType: "json",
dataSrc: "content"
},
columns :[
{"mData" : null,
'searchable':false,
"className": 'details-control',
"width" : "100px",
"defaultContent":"",
"mRender":function(data,type,full){
if(type=="display"){
var ret ='<span class="btn cotact-record-btn" data-toggle="modal" data-target="#edit-contact-record-modal"><i class="fa fa-volume-control-phone" title="Contact Record"></i></span>';
if(data.admin){
ret+= '<span class="btn js-delete-btn">\
<i class="fa fa-trash"></i>\
</span>';
}
return ret;
}
return '';
}
},
{data : null,
'searchable':false,
"mRender":function(data,type,full){
return data.status;
}
},
{mData : null,
"searchable":true,
"mRender":function(data,type,full){
// sconsole.log(data);
if(type=="display"){
ret ='<a class="underline" href="/candidate/view?id='+data.candidate_id+'" target="_BLANK">'+data.name+'</a>';
return ret;
}
return data.name;
}
},
{"mData" : "company",'searchable':false},
{"mData" : "job_title",'searchable':false},
{"mData" : "mobile",'searchable':false},
// {mData : null,
// "searchable":true,
// "mRender":function(data,type,full){
// // sconsole.log(data);
// if(type=="display"){
// ret ='<a class="underline" href="/candidate/generate-anonymous-cv?id='+data.candidate_id+'&case='+case_id+'" target="_BLANK">CV</a>';
// return ret;
// }
// return data.name;
// }
// }
],
"rowCallback": function( row, data, index ) {
$(row).attr('data-id',data.id);
$(row).attr('data-candidate-id',data.candidate_id);
$(row).attr('data-candidate-name',data.name);
var api = this.api();
var row = $(api.row(row).nodes()[0]);
if (!row.data('rowInitialized')) {
// Set trigger to happen on next JavaScript tick of the event loop.
setTimeout(function () {
// Expand row and tag it not to expand anymore
$('.details-control', row).trigger('click');
row.data('rowInitialized', true);
});
}
}
});
// Add event listener for opening and closing details
_candidate_data_table.on('click', 'td.details-control', function () {
var _fa = $(this).find('i');
var tr = $(this).closest('tr');
var row = _candidate_data_table.row( tr );
if ( row.child.isShown() ) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
}
else {
// Open this row
// console.log(row);
row.child( format(row.data()) ).show();
tr.addClass('shown');
$(tr).next().children().addClass('child_parents');
}
} );
/* create or update modal */
var _candidate_form = $('#candidate-candidate-form');
var _now_candidate_id = 0;
var _type = '';
$('#section-candidate').on('click','.candidate-modal-btn', function(){
var _this = $(this);
$('#benefits-extra').empty();
$('#extra-modified').val(0);
_type = _this.attr('data-type');
if(_type =='create'){
$('#create-candidate-btn').show();
$('#save-candidate-btn').hide();
_now_candidate_id = 0;
}else{
$('#create-candidate-btn').hide();
$('#save-candidate-btn').show();
_now_candidate_id = _this.parents('tr').attr('data-candidate-id')
//load data
$.getJSON(_view_url+'?id='+_now_candidate_id,{}, function(result){
if(result.success){
//load data
$.each(result.content, function(key, value){
$('#candidate-candidate-form *[name="CandidateAchievement['+key+']"]').val(value);
});
//benefits
if(result.extra){
$.each(result.extra, function(index, value){
$('#benefits-extra').append(extraColumnTemplate(value));
});
}
}else{
swal("Fail!", result.message, "error");
}
}).fail(function(){
swal("Fail!", 'Network error or server error', "error");
});
}
});
$('#create-candidate-btn').on('click', function(){
var _this = $(this);
if(_this.hasClass('lock')){
return false;
}
_this.addClass('lock');
$.post(_candidate_form.attr('action')+'/'+_type, _candidate_form.serialize(), function(result){
if(result.success){
swal("Success!", result.message, "success");
_candidate_data_table.ajax.reload();
$('#edit-candidate-modal').modal('toggle');
}else{
swal("Fail!", result.message, "error");
}
_this.removeClass('lock');
}).fail(function(){
swal("Fail!", 'Network error or server error', "error");
_this.removeClass('lock');
});
});
$('#save-candidate-btn').on('click', function(){
var _this = $(this);
if(_this.hasClass('lock')){
return false;
}
_this.addClass('lock');
$.post(_candidate_form.attr('action')+'/update'+'?id='+_now_candidate_id, _candidate_form.serialize(), function(result){
if(result.success){
_candidate_data_table.ajax.reload();
$('#edit-candidate-modal').modal('toggle');
}else{
swal("Fail!", result.message, "error");
}
_this.removeClass('lock');
}).fail(function(){
swal("Fail!", 'Network error or server error', "error");
_this.removeClass('lock');
});
});
/* trigger contact record modal */
// var contactHistoryTemplate = Handlebars.compile($("#case-contact-history-template").html());
_candidate_table.on('click', '.cotact-record-btn', function(){
// console.log('ca id',$(this).parents('tr').attr('data-id'));
$('#title-candidate-name').html($(this).parents('tr').attr('data-candidate-name'));
_contactRecordForm.find('input[name="CaseContactRecord[subject]"]').val('');
_contactRecordForm.find('textarea[name="CaseContactRecord[content]"]').val('');
_contactRecordForm.find('select[name="CaseContactRecord[status]"]').val('');
_contactRecordForm.find('input[name="CaseContactRecord[interview_time]"]').val('');
var candidate_id = $(this).parents('tr').attr('data-candidate-id');
var case_id = $('#case-id').val();
// $('#contact-record-history tbody').empty();
$('#contact-record-candidate-id').val(candidate_id);
});
/* delete */
_candidate_table.on('click', '.js-delete-btn',function(){
var _this = $(this);
swal({
title: "Are you sure?",
text: "You will not be able to recover this data!",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "Yes, delete it!",
// closeOnConfirm: false,
html: false
}).then(function(result){
if(result.value){
$.post(_delete_url+'?id='+_this.parents('tr').attr('data-id'), {id:_this.parents('tr').attr('data-id')}, function(result){
if(result.success){
swal("Deleted!", result.message, "success");
_this.parents('tr').remove();
}else{
swal("Fail!", result.message, "error");
}
}).fail(function(){
swal("Fail!", 'Network error or server error', "error");
});
}
});
});
/* add extra column */
$('.js-add-extra-btn').on('click', function(){
$('#extra-modified').val(1);
$('#'+$(this).attr('data-type')+'-extra').append(extraColumnTemplate);
});
$('#edit-candidate-modal').on('click','.js-delete-extra-btn', function(){
$('#extra-modified').val(1);
$(this).parents('.salary-extra-row').remove();
});
/* get candidate status sum */
$('#show-candidate-stastics-modal-btn').on('click', function(){
$.get(sumUrl, {id:case_id}, function(result){
if(result.success){
var sum = result.data[0];
// console.log(sum);
statsticTable.find('.status-KIV').html(sum.KIV);
statsticTable.find('.status-Interview').html(sum.Interview);
statsticTable.find('.status-Rejected').html(sum.Rejected);
statsticTable.find('.status-Unwilling').html(sum.Unwilling);
statsticTable.find('.status-Others').html(sum.Others);
statsticTable.find('.status-None').html(sum.None);
statsticTable.find('.status-Tracing').html(sum.Tracing);
statsticTable.find('.status-Call-later').html(sum.Call_later);
statsticTable.find('.status-Shortlist').html(sum.Shortlist);
}else{
// swal("Fail!", result.message, "error");
}
}).fail(function(){
swal("Fail!", 'Network error or server error', "error");
});
});
});
var _client_data_table = null;
$(document).ready(function(){
var _client_table = $('#client-table');
var _load_client_url = _client_table.attr('data-load-action');
var _view_url = _client_table.attr('data-view-action');
var _view_record_url = _client_table.attr('data-view-record-action');
var _delete_url = _client_table.attr('data-delete-action');
var _delete_record_url = _client_table.attr('data-delete-record-action');
var _contact_history_url = _client_table.attr('data-contact-history-action');
var _contactRecordForm = $('#contact-record-form');
var expandRowTemplate = Handlebars.compile($("#case-client-interview-record-template").html());
$('.datatimepicker').datetimepicker({
value : moment().format('Y/M/D H:m'),
format:'Y/m/d H:i',
step:30
});
Handlebars.registerHelper('actionHtml', function(admin) {
admin = Handlebars.escapeExpression(admin);
return (admin)? '<span class="btn js-delete-btn"><i class="fa fa-trash"></i></span>' : '';
});
/* expand table */
function format ( data ) {
// `d` is the original data object for the row
var content = '<thead><tr class="interview_record_row"><th width="120">Interview time</th><th width="120">Interviewer</th><th width="120">Location</th><th>Note</th><th width="120">Consultant</th><th width="120">Interview Round</th><th width="90">Action</th></tr></thead><tbody>';
$.each(data.records, function(index, value){
content+=expandRowTemplate(value);
});
return '<table cellpadding="5" cellspacing="0" border="0" class="child_table table table-striped table-bordered">'+content+'</tbody></table>';
}
_client_data_table =_client_table.DataTable({
stateSave: false,
processing: true,
// serverSide: true,
searching: true,
paging: false,
info: true,
// retrieve: false,
destroy: true,
autoWidth: true,
order: [[ 1, "desc" ]],
ajax:{
url :_load_client_url,
type: "post",
dataType: "json",
dataSrc: "content"
},
columns :[
{
"className": 'details-control',
"orderable": false,
"data": null,
"width" : "40px",
"defaultContent": '',
"mRender":function(data,type,full){
return '<i class="fa fa-window-maximize btn-pointer"></i>';
}
},
{"mData" : "status", "width" : "80px","orderable": false,},
{mData : null,
"width" : "150px",
"searchable":true,
"mRender":function(data,type,full){
// sconsole.log(data);
if(type=="display"){
ret ='<a class="underline" href="/candidate/view?id='+data.candidate_id+'" target="_BLANK">'+data.name+'('+data.name_ch+')'+'</a>';
return ret;
}
return data.name;
}
},
// {"mData" : "interview_time"},
{"mData" : "note"},
{"mData" : "update_time"},
// {"mData" : "interviewer"},
// {"mData" : "location"},
{"mData" : null,
"width" : "120px",
"defaultContent":"",
"mRender":function(data,type,full){
if(type=="display"){
var ret ='<span class="btn cotact-record-btn" data-toggle="modal" data-target="#edit-contact-record-modal"><i class="fa fa-volume-control-phone" title="Contact Record"></i></span><span class="btn client-modal-btn" data-toggle="modal" data-target="#edit-client-interview-modal" data-type="create">\
<i class="fa fa-plus"></i>\
</span>';
if(data.admin){
ret+= '<span class="btn js-delete-btn">\
<i class="fa fa-trash"></i>\
</span>';
}
return ret;
}
return "";
}
},
],
"rowCallback": function( row, data, index ) {
// console.log();
$(row).attr('data-id',data.id);
$(row).attr('data-record-id',data.record_id);
$(row).attr('data-candidate-id',data.candidate_id);
$(row).attr('data-candidate-name',data.name);
var api = this.api();
var row = $(api.row(row).nodes()[0]);
if (!row.data('rowInitialized')) {
// Set trigger to happen on next JavaScript tick of the event loop.
setTimeout(function () {
// Expand row and tag it not to expand anymore
$('.details-control', row).trigger('click');
row.data('rowInitialized', true);
});
}
},
initComplete: function () {
this.api().columns([1]).every( function () {
var column = this;
var select = $('<select><option value=""></option></select>')
.appendTo( $(column.header()).empty() )
.on( 'change', function () {
var val = $.fn.dataTable.util.escapeRegex($(this).val());
column.search( $(this).val() ).draw();
// column.search( val ? '^'+val+'$' : '', true, false ).draw();
} );
column.data().unique().sort().each( function ( d, j ) {
select.append( '<option value="'+d+'">'+d+'</option>' )
} );
} );
}
});
// Add event listener for opening and closing details
_client_table.on('click', 'td.details-control', function () {
var _fa = $(this).find('i');
if(_fa.hasClass('fa-window-restore')){
_fa.addClass('fa-window-maximize');
_fa.removeClass('fa-window-restore');
}else{
_fa.addClass('fa-window-restore');
_fa.removeClass('fa-window-maximize');
}
var tr = $(this).closest('tr');
var row = _client_data_table.row( tr );
if ( row.child.isShown() ) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
}
else {
// Open this row
row.child( format(row.data()) ).show();
tr.addClass('shown');
$(tr).next().children().addClass('child_parents');
}
} );
/* trigger caotact record modal */
var contactHistoryTemplate = Handlebars.compile($("#case-contact-history-template").html());
_client_table.on('click', '.cotact-record-btn', function(){
// console.log('ca id',$(this).parents('tr').attr('data-id'));
$('#title-candidate-name').html($(this).parents('tr').attr('data-candidate-name'));
_contactRecordForm.find('input[name="CaseContactRecord[subject]"]').val('');
_contactRecordForm.find('textarea[name="CaseContactRecord[content]"]').val('');
_contactRecordForm.find('select[name="CaseContactRecord[status]"]').val('');
_contactRecordForm.find('input[name="CaseContactRecord[interview_time]"]').val('');
var candidate_id = $(this).parents('tr').attr('data-candidate-id');
var case_id = $('#case-id').val();
$('#contact-record-history tbody').empty();
$('#contact-record-candidate-id').val(candidate_id);
$('.datatimepicker').datetimepicker({
value : moment().format('Y/M/D H:m'),
format:'Y/m/d H:i',
step:30
});
//get contact record history
// $.getJSON(_contact_history_url, {'scope':'case_contact_history', candidate_id: candidate_id, case_id: case_id}, function(result){
// if(result.success){
// // swal("Success!", result.message, "success");
// $.each(result.content, function(index, value){
// $('#contact-record-history tbody').append(contactHistoryTemplate(value));
// });
// }else{
// swal("Fail!", result.message, "error");
// }
//
// }).fail(function(){
// swal("Fail!", 'Network error or server error', "error");
//
// });
});
/* delete */
_client_table.on('click', '.js-delete-btn',function(){
console.log('coo');
var _this = $(this);
var row = _this.parents('tr');
var url = (row.hasClass('interview_record_row'))? _delete_record_url : _delete_url;
swal({
title: "Are you sure?",
text: "You will not be able to recover this data!",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "Yes, delete it!",
// closeOnConfirm: false,
html: false
}).then(function(result){
if(result.value){
$.post(url+'?id='+row.attr('data-id'), {id:row.attr('data-id')}, function(result){
if(result.success){
swal("Deleted!", result.message, "success");
_client_data_table.ajax.reload();
}else{
swal("Fail!", result.message, "error");
}
}).fail(function(){
swal("Fail!", 'Network error or server error', "error");
});
}
});
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment