ex_field_str = ['
'].join('');
ex_base_str = ['',
'
',
'
',
'',
'
',
'
',
'
',
'
',
'导出失败!',
'
',
'
',
'
',
'',
'
',
'
',
'
'].join('');
;(function($) {
//变量初始化
var timer1, timer2;
var delay = 3000;
window.export_eid = '';
window.export_url = '';
window.export_data = {};
window.export_timer1 = 'notrun';
$.fn.data_export = function(opts) {
// 导出框变量
var ex_field_dia =$(ex_field_str);
var ex_base_dia =$(ex_base_str);
// 获取导出状态
function get_export_progress(){
// 组装post export_data
$.extend(window.export_data, {
'request':'get',
'eid': window.export_eid,
});
$.ajax({
url:export_url,
dataType:"json",
data:window.export_data,
cache:false,
type:"POST",
success: function(data){
clearInterval(timer2);
ex_base_dia.find("#base_export_progressbar").attr("style", "width:"+data['percentage']+";");//进度条更新
ex_base_dia.find("#base_export_detail").html(data['progress']);
if(data['ret'] == 'finished'){//是否结束
ex_base_dia.find("#base_export_download").show();
ex_base_dia.find("#base_export_progressbar").attr("style", "width:100%;");
ex_base_dia.find("#base_export_close").show();
ex_base_dia.find("#base_export_detail").hide();
ex_base_dia.find("#base_export_stop").hide();
var download_element = ex_base_dia.find("#base_export_downloadurl");
download_element.html('导出完成,请点击此处下载');
download_element.attr('href', data['downloadurl']).click(function () {
$(this).html('下载中,请稍后...');
window.location.href = $(this).attr('href');
$(this).attr('href', '#').addClass('text-muted');
});
clearInterval(timer1);
window.export_timer1 = 'notrun';
}
else if(data['ret'] == 'stoped'){
var message = data.message || '处理错误!';
ex_base_dia.find("#base_export_error").html(message).show();
ex_base_dia.find("#base_export_close").show();
ex_base_dia.find("#base_export_detail").hide();
ex_base_dia.find("#base_export_stop").hide();
clearInterval(timer1);
window.export_timer1 = 'notrun';
}
}
});
}
// 发出开始导出请求
function start_export_handel(){
// 组装post export_data
$.extend(window.export_data, {
'request':'start',
'eid': window.export_eid
});
$.ajax({
url:export_url,
dataType:"json",
data:window.export_data,
cache:false,
type:"POST",
success: function(data){
if(data['ret'] == 'started'){//请求成功,初始化进度条,开始获取进度
if(window.export_timer1 == 'notrun'){
window.export_eid = data['eid'];
ex_field_dia.modal('hide');
ex_base_dia.modal('show');
ex_base_dia.find("#base_export_download").hide();
ex_base_dia.find("#base_export_error").hide();
ex_base_dia.find("#base_export_close").hide();
ex_base_dia.find("#base_export_progressbar").attr("style", "width:0%;").show();
ex_base_dia.find("#base_export_detail").html('').show();
ex_base_dia.find("#base_export_stop").show();
window.export_timer1 = 'running';
timer1 = setInterval(get_export_progress,delay);//循环获取导出状态
}
clearInterval(timer2);
}
}
});
}
// 外部调用函数 用于开始导出数据
function start_export(){
// 附加参数
var extra_data = {};
try {
var mix = eval(context.attr("extra-data")); // 数据
if(typeof mix == 'object') extra_data = mix;
context.trigger("extra-data"); // 控件数据
$.extend(extra_data, context.data("extra-data"));
} catch (e) {console.log(e);}
$.extend(window.process_data, extra_data);
$.extend(window.process_data, options.data);
// 点击后立即隐藏字段选择弹出框
ex_field_dia.modal('hide');
if(timer2) clearInterval(timer2);
start_export_handel();
timer2 = setInterval(start_export_handel, delay);
}
// 初始化导出框多选列表
function init_export_dialog() {
var export_columns = options['export_columns'] || '';
var field_select_dom = ex_field_dia.find('select#export_field_select').empty();
var _ea = export_columns.split(',');
for (i=0; i<_ea.length; i++){
var val = $.trim(_ea[i]);
field_select_dom.append("");
}
}
// 设置导出windows.export_url
function set_windows_export_url() {
// 获取 export_url
var export_url = options['export_url'];
export_url = export_url || context.attr('href') || 'data_export/';
// export_url get参数
var search = $.query.load(window.location.search),
params = $.query.load(export_url);
for(var key in params.keys)
search = search.set(key, params.get(key));
// 由于自动转换 param[0]=01¶m[1]=02
search_str = search.toString().replace(/%5B(\d+)%5D/g, '%5B%5D');
window.export_url = export_url.split("?")[0] + search_str;
}
// 点击停止导出
ex_base_dia.find("#base_export_stop_btn").click(function(){
// 提前关闭进度框
ex_base_dia.modal('hide');
// 组装post export_data
$.extend(window.export_data, {
'request':'stop',
'eid': window.export_eid
});
$.ajax({
url:export_url,
dataType:"json",
data: window.export_data,
cache:false,
type:"POST",
success: function(data){
if(data['ret'] == 'stoped'){ //请求成功,已经停止
clearInterval(timer1);
window.location.reload();
}
}
});
});
// 关闭及后台运行
ex_base_dia.find("#base_export_close_btn, #base_export_background_btn").click(function(){
ex_base_dia.modal('hide');
window.location.reload();
});
// 开始导出按钮
ex_field_dia.find(".export_submit_btn").click(function(){
var field_select_dom = ex_field_dia.find('select#export_field_select');
window.export_data['export_fields'] = field_select_dom.val();
window.export_data['type'] = $(this).attr('export_type') || 'excel';
start_export();
});
// 总入口
var context = $(this);
var options = $.extend({},$.fn.data_export.defaults,opts);
$(this).click(function(e){
e.preventDefault();
// 初始化
context = $(this);
init_export_dialog(); // 初始化多选列表
set_windows_export_url(); // 设置导出windows.export_url
// 执行导出操作
var export_columns = options['export_columns'] || '';
if (export_columns) ex_field_dia.modal("show");
else {
window.export_data['export_fields'] = []; // 清空其他途径设置的值
window.export_data['type'] = 'excel';
start_export();
}
});
};
//定义默认
$.fn.data_export.defaults = {
};
})(jQuery);