Created
April 21, 2023 05:58
-
-
Save ckentq/33e7d97168a27787ad50f4ace718f1a1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
//------------- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"); | |
}); | |
}); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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