/** * [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, distance, animation_type, location) { if(msg != undefined && msg != '') { // 是否已存在提示条 if($('#common-prompt').length > 0) { clearTimeout(temp_time_out); } // 提示信息添加 $('#common-prompt').remove(); if((type || null) == null) type = 'danger'; if((animation_type || null) == null) animation_type = 'top'; if((location || null) == null) location = 'top'; var style = ''; if((distance || null) != null) style = 'margin-'+animation_type+':'+distance+'px;'; var html = '

'+msg+'

'; $('body').append(html); // 自动关闭提示 temp_time_out = setTimeout(function() { $('#common-prompt').slideToggle(); }, (time || 3)*1000); } } // 中间提示信息 function PromptCenter(msg, type, time, distance) { Prompt(msg, type, time, distance, 'top', 'center'); } // 底部提示信息 function PromptBottom(msg, type, time, distance) { Prompt(msg, type, time, distance, 'bottom', 'bottom'); } /** * [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] * @param {[boolean]} is_json [是否返回json对象(默认否)] * @return {[object]} [josn对象] */ function GetFormVal(element, is_json) { 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').each(function(key, tmp) { var name = $(this).parents('select').attr('name'); if(name != undefined && name != '') { if($(this).is(':selected') && tmp.value != undefined && tmp.value != '') { // 多选择 if($(this).parents('select').attr('multiple') != undefined) { if(tmp_all[name] == undefined) { tmp_all[name] = []; i = 0; } 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] = []; i = 0; } tmp_all[tmp.name][i] = tmp.value; i++; } } }); object = ArrayTurnJson(tmp_all, object); // 是否需要返回json对象 if(is_json === true) { var json = {}; object.forEach(function(value, key) { if((key || null) != null) { json[key] = value } }); return json; } 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; } /** * [GetTagValue 根据tag对象获取值] * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @datetime 2017-10-07T20:53:40+0800 * @param {[object]} tag_obj [tag对象] */ function GetTagValue(tag_obj) { // 默认值 var v = null; // 标签名称 var tag_name = tag_obj.prop("tagName"); // input if(tag_name == 'INPUT') { var type = tag_obj.attr('type'); switch(type) { // 单选框 case 'checkbox' : v = tag_obj.is(':checked') ? tag_obj.val() : null; break; // 其它选择 default : v = tag_obj.val() || null; } } return v; } /** * [$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); if($form.length <= 0) { return false; } 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( { // 自定义校验规则 validate: function(validity) { // 二选一校验 if($(validity.field).is('.js-choice-one')) { var tag = $(validity.field).attr('data-choice-one-to'); if(typeof($(validity.field).attr('required')) == 'undefined' && typeof($(tag).attr('required')) == 'undefined') { validity.valid = true; } else { var v1 = GetTagValue($(validity.field)); var v2 = GetTagValue($(tag)); validity.valid = (v1 == null && v2 == null) ? false : true; } } }, // 错误 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()) { // 多选插件校验 if($form.find('.chosen-select')) { var is_success = true; $form.find('select.chosen-select').each(function(k, v) { var required = $(this).attr('required'); if(($(this).attr('required') || null) == 'required') { var multiple = $(this).attr('multiple') || null; var minchecked = parseInt($(this).attr('minchecked')) || 0; var maxchecked = parseInt($(this).attr('maxchecked')) || 0; var msg = $(this).attr('data-validation-message'); var value = $(this).val(); if((value || null) == null && value != '0') { is_success = false; Prompt(msg || '请选择项'); $(this).trigger('blur'); return false; } else { if(multiple == 'multiple') { var count = value.length; if(minchecked > 0 && count < minchecked) { is_success = false; msg = msg || '至少选择'+minchecked+'项'; } if(maxchecked > 0 && count > maxchecked) { is_success = false; msg = msg || '最多选择'+maxchecked+'项'; } if(is_success === false) { Prompt(msg); $(this).trigger('blur'); $(this).parents('.am-form-group').removeClass('am-form-success').addClass('am-form-error'); return false; } } } } }); if(is_success === false) { return false; } } // button加载 var $button = $form.find('button[type="submit"]'); $button.button('loading'); // 获取表单数据 var action = $form.attr('action') || null; var method = $form.attr('method') || null; var request_type = $form.attr('request-type') || null; var request_value = $form.attr('request-value') || null; // 以 ajax 开头的都会先请求再处理 // ajax-reload 请求完成后刷新页面 // ajax-url 请求完成后调整到指定的请求值 // ajax-fun 请求完成后调用指定方法 // sync 不发起请求、直接同步调用指定的方法 // jump 不发起请求、拼接数据参数跳转到指定 url 地址 var request_handle = ['ajax-reload', 'ajax-url', 'ajax-fun', 'sync', 'jump']; // 是form表单直接通过 if(request_type == 'form') { return true; } // 参数校验 if(request_handle.indexOf(request_type) == -1) { $button.button('reset'); Prompt('表单[类型]参数配置有误'); return false; } // 类型不等于刷新的时候,类型值必须填写 if(request_type != 'ajax-reload' && request_value == null) { $button.button('reset'); Prompt('表单[类型值]参数配置有误'); return false; } // 同步调用方法 if(request_type == 'sync') { $button.button('reset'); if(IsExitsFunction(request_value)) { window[request_value](GetFormVal(form_name, true)); } else { Prompt('['+request_value+']表单定义的方法未定义'); } return false; } // 拼接参数跳转 if(request_type == 'jump') { var params = GetFormVal(form_name, true); for(var i in params) { request_value = UrlFieldReplace(i, encodeURIComponent(params[i]), request_value) } window.location.href = request_value; return false; } // 请求 url http类型 if(action == null || method == null) { $button.button('reset'); Prompt('表单[action或method]参数配置有误'); return false; } // 开启进度条 $.AMUI.progress.start(); // ajax请求 $.ajax({ url:action, type:method, dataType:"json", timeout:$form.attr('timeout') || 30000, 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') { Prompt(result.msg, 'success'); setTimeout(function() { window.location.href = request_value; }, 1500); // 页面刷新 } 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'); // 公共列表 form 搜索条件 FromInit('form.form-validation-search'); /** * [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; }); } // 是否存在pid和当前id相同 if($form.find('select[name="pid"]').length > 0) { $form.find('select[name="pid"]').find('option').removeAttr('disabled'); if((json['id'] || null) != null) { $form.find('select[name="pid"]').find('option[value="'+json['id']+'"]').attr('disabled', true); } } // 多选插件事件更新 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 [层级] * @param {[int]} is_add_node [是否开启新增子级按钮] * @param {[int]} is_delete_all [是否所有开启删除按钮] */ function Tree(id, url, level, is_add_node, is_delete_all) { $.ajax({ url:url, type:'POST', dataType:"json", timeout:30000, data:{"id":id}, success:function(result) { if(result.code == 0 && result.data.length > 0) { html = (id != 0) ? '' : ''; is_add_node = is_add_node || 0; var is_astrict_rank = parseInt($('#tree').attr('data-rank')) || 0; for(var i in result.data) { // 获取class var class_name = $('#data-list-'+id).attr('class') || ''; // 数据 start var is_active = (result.data[i]['is_enable'] == 0) ? 'am-active' : ''; html += ''; } html += (id != 0) ? '' : '
'; tmp_level = (id != 0) ? parseInt(level)+20 : parseInt(level); var son_css = ''; if(result.data[i]['is_son'] == 'ok') { html += ''; } else { son_css = 'padding-left:'+tmp_level+'px;'; } html += ''; if((result.data[i]['icon_url'] || null) != null) { html += ''; } html += ''+(result.data[i]['name_alias'] || result.data[i]['name'])+''; html += ''; // 数据 end // 操作项 start html += '
'; // 新增 var rank = tmp_level/20+1; if(is_add_node == 1 && (is_astrict_rank == 0 || rank < is_astrict_rank)) { html += ''; } // 编辑 html += ''; if(result.data[i]['is_son'] != 'ok' || is_delete_all == 1) { // 是否需要删除子数据 var pid_class = is_delete_all == 1 ? '.tree-pid-'+result.data[i]['id'] : ''; // 删除 html += ''; } html += '
'; // 操作项 end html += '
'; // 防止网络慢的情况下重复添加 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(); } }); } /** * [ImageFileUploadShow 图片上传预览] * @param {[string]} class_name [class名称] * @param {[string]} show_img [预览图片id或class] * @param {[string]} default_images [默认图片] */ function ImageFileUploadShow(class_name, show_img, default_images) { $(document).on("change", class_name, function(imgFile) { show_img = $(this).attr('data-image-tag') || null; var status = false; if((imgFile.target.value || null) != null) { var filextension = imgFile.target.value.substring(imgFile.target.value.lastIndexOf("."),imgFile.target.value.length); filextension = filextension.toLowerCase(); if((filextension!='.jpg') && (filextension!='.gif') && (filextension!='.jpeg') && (filextension!='.png') && (filextension!='.bmp')) { Prompt("图片格式错误,请重新上传"); } else { if(document.all) { Prompt('ie浏览器不可用'); /*imgFile.select(); path = document.selection.createRange().text; $(this).parent().parent().find('img').attr('src', ''); $(this).parent().parent().find('img').attr('src', path); //使用滤镜效果 */ } else { var url = window.URL.createObjectURL(imgFile.target.files[0]);// FF 7.0以上 $(show_img).attr('src', url); status = true; } } } var default_img = $(show_img).attr('data-default') || null; if(status == false && ((default_images || null) != null || default_img != null)) { $(show_img).attr('src', default_images || default_img); } }); } /** * [VideoFileUploadShow 视频上传预览] * @param {[string]} class_name [class名称] * @param {[string]} show_video [预览视频id或class] * @param {[string]} default_video [默认视频] */ function VideoFileUploadShow(class_name, show_video, default_video) { $(document).on("change", class_name, function(imgFile) { show_video = $(this).attr('data-video-tag') || null; var status = false; if((imgFile.target.value || null) != null) { var filextension = imgFile.target.value.substring(imgFile.target.value.lastIndexOf("."),imgFile.target.value.length); filextension = filextension.toLowerCase(); if(filextension != '.mp4') { Prompt("视频格式错误,请重新上传"); } else { if(document.all) { Prompt('ie浏览器不可用'); /*imgFile.select(); path = document.selection.createRange().text; $(this).parent().parent().find('img').attr('src', ''); $(this).parent().parent().find('img').attr('src', path); //使用滤镜效果 */ } else { var url = window.URL.createObjectURL(imgFile.target.files[0]);// FF 7.0以上 $(show_video).attr('src', url); status = true; } } } var default_video = $(show_video).attr('data-default') || null; if(status == false && ((default_video || null) != null || default_video != null)) { $(show_video).attr('src', default_video || default_video); } }); } // 校验浏览器是否支持视频播放 function CheckVideo() { if(document.createElement('video').canPlayType) { var vid_test = document.createElement("video"); var ogg_test = vid_test.canPlayType('video/ogg; codecs="theora, vorbis"'); if(!ogg_test) { h264_test = vid_test.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"'); if(!h264_test) { document.getElementById("checkVideoResult").innerHTML = "Sorry. No video support." } else { if(h264_test == "probably") { document.getElementById("checkVideoResult").innerHTML = "Yes! Full support!"; } else { document.getElementById("checkVideoResult").innerHTML = "Well. Some support."; } } } else { if(ogg_test == "probably") { document.getElementById("checkVideoResult").innerHTML = "Yes! Full support!"; } else { document.getElementById("checkVideoResult").innerHTML = "Well. Some support."; } } } else { document.getElementById("checkVideoResult").innerHTML = "Sorry. No video support." } } /** * 弹窗加载 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2018-09-13 * @desc description * @param {[string]} url [加载url] * @param {[string]} title [标题] * @param {[string]} tag [指定id标记] * @param {[string]} class_tag [指定class] */ function ModalLoad(url, title, tag, class_tag) { tag = tag || 'common-popup-modal'; if($('#'+tag).length > 0) { $('#'+tag).remove(); } // 是否存在标题 if((title || null) != null) { var html = '