/**
* [Prompt 公共提示]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-10T14:32:39+0800
* @param {[string]} msg [提示信息]
* @param {[string]} type [类型(失败:danger, 成功success)]
* @param {[int]} time [自动关闭时间(秒), 默认3秒]
*/
var temp_time_out;
function Prompt(msg, type, time)
{
if(msg != undefined && msg != '')
{
// 是否已存在提示条
if($('#common-prompt').length > 0)
{
clearTimeout(temp_time_out);
}
// 提示信息添加
$('#common-prompt').remove();
if(type == undefined || type == '') type = 'danger';
var html = '
';
$('body').append(html);
// 自动关闭提示
if(time == undefined || time == '') time = 3;
temp_time_out = setTimeout(function()
{
$('#common-prompt').remove();
}, time*1000);
}
}
/**
* [ArrayTurnJson js数组转json]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-10T14:32:04+0800
* @param {[array]} all [需要被转的数组]
* @param {[object]} object [需要压进去的json对象]
* @return {[object]} [josn对象]
*/
function ArrayTurnJson(all, object)
{
for(var name in all)
{
object.append(name, all[name]);
}
return object;
}
/**
* [GetFormVal 获取form表单的数据]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-10T14:31:19+0800
* @param {[string]} element [元素的class或id]
* @return {[object]} [josn对象]
*/
function GetFormVal(element)
{
var object = new FormData();
// input 常用类型
$(element).find('input[type="hidden"], input[type="text"], input[type="password"], input[type="email"], input[type="number"], input[type="date"], input[type="url"], input[type="radio"]:checked, textarea, input[type="file"]').each(function(key, tmp)
{
if(tmp.type == 'file')
{
object.append(tmp.name, ($(this).get(0).files[0] == undefined) ? '' : $(this).get(0).files[0]);
} else {
object.append(tmp.name, tmp.value.replace(/^\s+|\s+$/g,""));
}
});
// select 单选择和多选择
var tmp_all = [];
var i = 0;
$(element).find('select').find('option, optgroup option').each(function(key, tmp)
{
var name = $(this).parents('select').attr('name');
if(name != undefined && name != '')
{
if($(this).is(':selected'))
{
// 多选择
if($(this).parent().attr('multiple') != undefined)
{
if(tmp_all[name] == undefined) tmp_all[name] = [];
tmp_all[name][i] = tmp.value;
i++;
} else {
// 单选择
object.append(name, tmp.value);
}
}
}
});
object = ArrayTurnJson(tmp_all, object);
// input 复选框checkboox
tmp_all = [];
i = 0;
$(element).find('input[type="checkbox"]').each(function(key, tmp)
{
if(tmp.name != undefined && tmp.name != '')
{
if($(this).is(':checked'))
{
if(tmp_all[tmp.name] == undefined) tmp_all[tmp.name] = [];
tmp_all[tmp.name][i] = tmp.value;
i++;
}
}
});
object = ArrayTurnJson(tmp_all, object);
return object;
}
/**
* [IsExitsFunction 方法是否已定义]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-10T14:30:37+0800
* @param {[string]} fun_name [方法名]
* @return {[boolean]} [已定义true, 则false]
*/
function IsExitsFunction(fun_name)
{
try
{
if(typeof(eval(fun_name)) == "function") return true;
} catch(e) {}
return false;
}
/**
* [$form.validator 公共表单校验, 添加class form-validation 类的表单自动校验]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-10T14:22:39+0800
* @param {[string] [form_name] [标题class或id]}
* @param {[string] [action] [请求地址]}
* @param {[string] [method] [请求类型 POST, GET]}
* @param {[string] [request-type] [回调类型 ajax-url, ajax-fun, ajax-reload]}
* @param {[string] [request-value] [回调值 ajax-url地址 或 ajax-fun方法]}
*/
function FromInit(form_name)
{
if(form_name == undefined)
{
form_name = 'form.form-validation';
}
var editor_tag_name = 'editor-tag';
var $form = $(form_name);
var $editor_tag = $form.find('[id='+editor_tag_name+']');
var editor_count = $editor_tag.length;
if(editor_count > 0)
{
// 编辑器初始化
var editor = UE.getEditor(editor_tag_name);
// 编辑器内容变化时同步到 textarea
editor.addListener('contentChange', function()
{
editor.sync();
// 触发验证
$editor_tag.trigger('change');
});
}
$form.validator(
{
onInValid: function(validity)
{
// 错误信息
var $field = $(validity.field);
var msg = $field.data('validationMessage') || this.getValidationMessage(validity);
Prompt(msg);
},
submit: function(e)
{
if(editor_count > 0)
{
// 同步编辑器数据
editor.sync();
// 表单验证未成功,而且未成功的第一个元素为 UEEditor 时,focus 编辑器
if (!this.isFormValid() && $form.find('.' + this.options.inValidClass).eq(0).is($editor_tag))
{
// 编辑器获取焦点
editor.focus();
// 错误信息
var msg = $editor_tag.data('validationMessage') || $editor_tag.getValidationMessage(validity);
Prompt(msg);
}
}
// 通过验证
if(this.isFormValid())
{
// button加载
var $button = $form.find('button[type="submit"]');
$button.button('loading');
// 开启进度条
$.AMUI.progress.start();
// 获取表单数据
var action = $form.attr('action');
var method = $form.attr('method');
var request_type = $form.attr('request-type');
var request_value = $form.attr('request-value');
var ajax_all = ['ajax-reload', 'ajax-url', 'ajax-fun'];
// 参数校验
if(ajax_all.indexOf(request_type) == -1 || action == undefined || action == '' || method == undefined || method == '')
{
$.AMUI.progress.done();
$button.button('reset');
Prompt('表单参数配置有误');
return false;
}
// 类型不等于刷新的时候,类型值必须填写
if(request_type != 'ajax-reload' && (request_value == undefined || request_value == ''))
{
$.AMUI.progress.done();
$button.button('reset');
Prompt('表单[类型值]参数配置有误');
return false;
}
// ajax请求
$.ajax({
url:action,
type:method,
dataType:"json",
timeout:10000,
data:GetFormVal(form_name),
processData:false,
contentType:false,
success:function(result)
{
// 调用自定义回调方法
if(request_type == 'ajax-fun')
{
if(IsExitsFunction(request_value))
{
window[request_value](result);
} else {
$.AMUI.progress.done();
$button.button('reset');
Prompt('['+request_value+']表单定义的方法未定义');
}
} else if(request_type == 'ajax-url' || request_type == 'ajax-reload')
{
$.AMUI.progress.done();
if(result.code == 0)
{
// url跳转
if(request_type == 'ajax-url')
{
window.location.href = request_value;
// 页面刷新
} else if(request_type == 'ajax-reload')
{
Prompt(result.msg, 'success');
setTimeout(function()
{
window.location.reload();
}, 1500);
}
} else {
Prompt(result.msg);
$button.button('reset');
}
}
},
error:function(xhr, type)
{
$.AMUI.progress.done();
$button.button('reset');
Prompt('网络异常错误');
}
});
}
return false;
}
});
}
// 默认初始化一次,默认标签[form.form-validation]
FromInit('form.form-validation');
/**
* [FormDataFill 表单数据填充]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-14T14:46:47+0800
* @param {[json]} json [json数据对象]
* @param {[string]} tag [tag标签]
*/
function FormDataFill(json, tag)
{
if(json != undefined)
{
if(tag == undefined)
{
tag = 'form.form-validation';
}
$form = $(tag);
for(var i in json)
{
$form.find('input[type="hidden"][name="'+i+'"], input[type="text"][name="'+i+'"], input[type="password"][name="'+i+'"], input[type="email"][name="'+i+'"], input[type="number"][name="'+i+'"], input[type="date"][name="'+i+'"], textarea[name="'+i+'"], select[name="'+i+'"], input[type="url"][name="'+i+'"]').val(json[i]);
// input radio
$form.find('input[type="radio"][name="'+i+'"]').each(function(temp_value, temp_tag)
{
var state = (json[i] == temp_value);
this.checked = state;
});
}
// 多选插件事件更新
if($('.chosen-select').length > 0)
{
$('.chosen-select').trigger('chosen:updated');
}
}
}
/**
* [Tree 树方法]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-01-13T10:30:23+0800
* @param {[int]} id [节点id]
* @param {[string]} url [请求url地址]
* @param {[int]} level [层级]
*/
function Tree(id, url, level)
{
$.ajax({
url:url,
type:'POST',
dataType:"json",
timeout:10000,
data:{"id":id},
success:function(result)
{
if(result.code == 0 && result.data.length > 0)
{
html = (id != 0) ? '' : '';
for(var i in result.data)
{
// 数据 start
var is_active = (result.data[i]['is_enable'] == 0) ? 'am-active' : '';
html += '';
tmp_level = (id != 0) ? parseInt(level)+20 : parseInt(level);
if(result.data[i]['is_son'] == 'ok')
{
html += '';
html += ''+result.data[i]['name']+'';
} else {
html += ''+result.data[i]['name']+'';
}
// 数据 end
// 操作项 start
html += ' ';
html += '';
if(result.data[i]['is_son'] != 'ok')
{
html += '';
}
html += ' ';
// 操作项 end
html += ' |
';
}
html += (id != 0) ? '' : '
';
// 防止网络慢的情况下重复添加
if($('#data-list-'+id).find('.tree-submit').attr('state') != 'ok')
{
if(id == 0)
{
$('#tree').html(html);
} else {
$('#data-list-'+id).after(html);
$('#data-list-'+id).find('.tree-submit').attr('state', 'ok');
$('#data-list-'+id).find('.tree-submit').removeClass('am-icon-plus');
$('#data-list-'+id).find('.tree-submit').addClass('am-icon-minus-square');
}
}
} else {
$('#tree').find('p').text(result.msg);
$('#tree').find('img').remove();
}
},
error:function(xhr, type)
{
$('#tree').find('p').text('网络异常出错');
$('#tree').find('img').remove();
}
});
}
// 公共数据操作
$(function()
{
// 多选插件初始化
if($('.chosen-select').length > 0)
{
$('.chosen-select').chosen();
}
/**
* [submit-delete 删除数据列表]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-10T14:22:39+0800
* @param {[int] [data-id] [数据id]}
* @param {[string] [data-url] [请求地址]}
*/
$(document).on('click', '.submit-delete', function()
{
$('#common-confirm-delete').modal({
relatedTarget: this,
onConfirm: function(options)
{
// 获取参数
var $tag = $(this.relatedTarget);
var id = $tag.data('id');
var url = $tag.data('url');
var list_tag = $tag.data('list-tag') || '#data-list-'+id;
if(id == undefined || url == undefined)
{
Prompt('参数配置有误');
return false;
}
// 请求删除数据
$.ajax({
url:url,
type:'POST',
dataType:"json",
timeout:10000,
data:{"id":id},
success:function(result)
{
if(result.code == 0)
{
Prompt(result.msg, 'success');
// 成功则删除数据列表
$(list_tag).remove();
} else {
Prompt(result.msg);
}
},
error:function(xhr, type)
{
Prompt('网络异常出错');
}
});
},
onCancel: function(){}
});
});
/**
* [submit-state 公共数据状态操作]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-10T14:22:39+0800
* @param {[int] [data-id] [数据id]}
* @param {[int] [data-state][状态值]}
* @param {[string] [data-url] [请求地址]}
*/
$(document).on('click', '.submit-state', function()
{
// 获取参数
var $tag = $(this);
var id = $tag.data('id');
var state = ($tag.data('state') == 1) ? 0 : 1;
var url = $tag.data('url');
if(id == undefined || url == undefined)
{
Prompt('参数配置有误');
return false;
}
// 请求更新数据
$.ajax({
url:url,
type:'POST',
dataType:"json",
timeout:10000,
data:{"id":id, "state":state},
success:function(result)
{
if(result.code == 0)
{
Prompt(result.msg, 'success');
// 成功则更新数据样式
if($tag.hasClass('am-success'))
{
$tag.removeClass('am-success');
$tag.addClass('am-default');
if($('#data-list-'+id).length > 0)
{
$('#data-list-'+id).addClass('am-active');
}
} else {
$tag.removeClass('am-default');
$tag.addClass('am-success');
if($('#data-list-'+id).length > 0)
{
$('#data-list-'+id).removeClass('am-active');
}
}
$tag.data('state', state);
} else {
Prompt(result.msg);
}
},
error:function(xhr, type)
{
Prompt('网络异常出错');
}
});
});
/**
* [submit-edit 公共编辑]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-14T13:53:13+0800
*/
$(document).on('click', '.submit-edit', function()
{
// 窗口标签
var tag = $(this).data('tag') || 'data-save-win';
// 更改窗口名称
if($('#'+tag).length > 0)
{
$title = $('#'+tag).find('.am-popup-title');
$title.text($title.data('edit-title'));
}
// 填充数据
FormDataFill($(this).data('json'), '#'+tag);
});
/**
* [tree-submit 公共无限节点]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-25T22:12:10+0800
*/
$('#tree').on('click', '.tree-submit', function()
{
var id = parseInt($(this).data('id')) || 0;
// 状态
if($('#data-list-'+id).find('.tree-submit').attr('state') == 'ok')
{
if($(this).hasClass('am-icon-plus'))
{
$(this).removeClass('am-icon-plus');
$(this).addClass('am-icon-minus-square');
} else {
$(this).removeClass('am-icon-minus-square');
$(this).addClass('am-icon-plus');
}
$('.tree-pid-'+id).toggle(100);
} else {
var url = $(this).data('url') || '';
var level = parseInt($(this).data('level')) || 0;
if(id > 0 && url != '')
{
Tree(id, url, level);
} else {
Prompt('参数有误');
}
}
});
/**
* [tree-submit-add 公共无限节点新增按钮处理]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-25T22:11:34+0800
*/
$('.tree-submit-add').on('click', function()
{
// 更改窗口名称
$title = $('#data-save-win').find('.am-popup-title');
$title.text($title.data('add-title'));
// 清空表单
FormDataFill({"id":"", "pid":0, "name":"", "sort":0, "is_enable":1});
// 移除菜单禁止状态
$('form select[name="pid"]').removeAttr('disabled');
// 校验成功状态增加失去焦点
$('form').find('.am-field-valid').each(function()
{
$(this).blur();
});
});
});