/** * jQuery webUI 1.1.0 */ (function ($) { $.webDefaults = $.webDefaults || {}; $.webDefaults.Form = { width: null }; $.fn.webuiForm = function (p) { var fid = $(this).attr("id"); if(!fid) return; var _initData = $(".initData_span",this).text(); if(_initData != "") _initData = eval("("+ _initData +")"); p = $.extend({}, $.webDefaults.Form, p || {}); var wights = []; var key = ""; var variable = $(this).attr("variable"); if(!variable){ var o = $(".initData_span",$(this)).next(); if($(".initData_span",$(this)).length != 0){ var v = eval("("+$(o).text()+")"); if(v.length != 0) key = v[0]; } }else{ key = variable; } var html = new StringBuffer(); if($(".errMessage",this).length == 0){ $(this).append("
") ; } dealChildren(this,_initData,wights,key); //渲染组件 $(wights).each(function(){ renderUI(this.type,this.id,this.step); }); //渲染cascade casecadeFunc(fid,_initData,key); // combinFunc(fid,_initData); // $("select",this).each(function(index,dom){ // var d = $(dom).next("button.ui-multiselect"); // if(d){ // var vail = $(dom).attr("validate"); // if(vail){ // $(d).attr("validate",vail); // $(dom).removeAttr("validate"); // } // } // }); //注册校验逻辑 $.metadata.setType("attr", "validate"); var validateType = "default"; if($("#"+fid).attr("validateType")) validateType = $("#"+fid).attr("validateType"); if(validateType != "div") $(".errMessage",this).css("display","none"); validateData(fid,validateType); /** * 项目组需求:鼠标追踪效果 * **/ // $(".row",this).hover(function() // { // $(this).addClass("row-over"); // }, function() // { // $(this).removeClass("row-over"); // }); }; $.fn.renderWebUI = function(p){ var fid = $(this).attr("id"); if(!fid) return; var key = ""; var variable = $(this).attr("variable"); if(!variable){ var o = $(".initData_span",$(this)).next(); if($(".initData_span",$(this)).length != 0 ){ var v = eval("("+$(o).text()+")"); if(v.length != 0) key = v[0]; } }else{ key = variable; } var _initData = $(".initData_span",this).text(); if(_initData != "") _initData = eval("("+ _initData +")"); var wights = []; $("input",this).each(function(index,dom){ var html = dealRender(dom,_initData,wights,key); $(dom).replaceWith(html.toString()); }); //渲染组件 $(wights).each(function(){ renderUI(this.type,this.id,this.step); }); //渲染cascade casecadeFunc(fid,_initData,key); // $("select",$("#"+fid)).each(function(index,d){ // $(d).multiselect({multiple:false,header:false,noneSelectedText:'请选择',selectedText:'#'}); // }); }; $.fn.view = function(param){ var data = eval("("+ $(this).find(".initData_span").text() +")"); return data["_"+param]; } $.fn.values = function() { var formParams = {}; var params = $(this).formToArray(); for ( var i = 0; i < params.length; i++) { var key = params[i].name; if(formParams[key]){ formParams[key] += ","+params[i].value; }else{ formParams[key] = params[i].value; } } return formParams; }; /** * 清理表单 */ $.fn.clear = function() { this.clearForm(); //去除form中的校验信息 $("input,select,textarea",$(this)).removeClass("error"); $("label",$(this)).remove(".error"); }; /** * 重置表单 */ $.fn.reset = function() { this.resetForm(); //去除form中的校验信息 $("input,select,textarea",$(this)).removeClass("error"); $("label",$(this)).remove(".error"); }; /** * 校验表单 */ $.fn.check = function(){ return $(this).validate().form(); }; /** * 下拉框选中 */ $.fn.selected = function(value){ var id = $(this).attr("id"); $("option",$("#"+id)).each(function(index,dom){ if($(dom).val() == value){ dom.selected = true; // $("#"+id).multiselect("refresh"); } }); }; })(jQuery); var casecadeFunc = function(fid,_initData,key){ //渲染cascade $(".cascade-select",$("#"+fid)).each(function(index,dom){ var name = $(dom).attr("name"); if(_initData[name+"Data"]){ var xpath = _initData[name+"Data"][0][name+"_xpath"]; var str0 = xpath.split("${"); var str1 = str0[str0.length-1]; var str2 = str1.split("}"); var str3 = str2[0]; $("[name='"+str3+"']",$("#"+fid)).bind("change",function(e){ var obj = e.target || e.srcElement; var _xpath = xpath; for(var n=1;n 0){ var str4 = str0[n].split("}")[0]; if(str4 != ""){ var val = $($("[name='"+str4+"']",$("#"+fid))).val(); // if(val == "") val = "null"; _xpath = _xpath.replace("${"+str4+"}","*[@code='"+val+"']"); } } } var p = {}; p.xpath = _xpath; p._action = "queryDictionaries"; if(!val || val == "") p.val = val; queryDictionaries(dom,p); }); if($("[name='"+str3+"']",$("#"+fid)).val() != ""){ $("[name='"+str3+"']",$("#"+fid)).trigger('change'); var $view = {}; if(_initData["_"+key]) $view = _initData["_"+key]; var value = $view[$(dom).attr("name")]; if(value){ $(dom).children().each(function(index,opt){ if(value == $(opt).val()){ opt.selected = true; } }); } } }else{ var change_event = $(dom).attr("parent"); if(change_event){ $("[name='"+change_event+"']",$("#"+fid)).bind("change",function(e){ var value = $($("[name='"+change_event+"']",$("#"+fid))).val(); var func = name.substring(0,1).toUpperCase() + name.substring(1); var p = {}; p[change_event] = value; p._action = "get"+func; queryDictionaries(dom,p); }); if($("[name='"+change_event+"']",$("#"+fid)).val() != ""){ $("[name='"+change_event+"']",$("#"+fid)).trigger('change'); var $view = {}; if(_initData["_"+key]) $view = _initData["_"+key]; var value = $view[$(dom).attr("name")]; if(value){ $(dom).children().each(function(index,opt){ if(value == $(opt).val()){ opt.selected = true; } }); } } }else{ var func = name.substring(0,1).toUpperCase() + name.substring(1); var p = {}; p._action = "get"+func; queryDictionaries(dom,p); } } }); }; var combinFunc = function(fid,_initData){ //渲染cascade $(".combination-select",$("#"+fid)).each(function(index,dom){ var name = $(dom).attr("name"); if(_initData[name+"Data"]){ var xpath = _initData[name+"Data"][0][name+"_xpath"]; var str0 = xpath.split("${"); var str1 = str0[str0.length-1]; var str2 = str1.split("}"); var str3 = str2[0]; $("[name='"+str3+"']",$("#"+fid)).bind("change",function(e){ var obj = e.target || e.srcElement; var _xpath = xpath; for(var n=1;n 0){ var str4 = str0[n].split("}")[0]; if(str4 != ""){ var val = $($("[name='"+str4+"']",$("#"+fid))).val(); // if(val == "") val = "null"; _xpath = _xpath.replace("${"+str4+"}","*[@code='"+val+"']"); } } } var p = {}; p.xpath = _xpath; p._action = "_queryCombinationDictionaries"; if(!val || val == "") p.val = val; queryCombinationDictionaries(dom,p); }); }else{ var change_event = $(dom).attr("parent"); if(change_event){ $("[name='"+change_event+"']",$("#"+fid)).bind("change",function(e){ var value = $($("[name='"+change_event+"']",$("#"+fid))).val(); var func = name.substring(0,1).toUpperCase() + name.substring(1); var p = {}; p[change_event] = value; p._action = "get"+func; queryCombinationDictionaries(dom,p); }); }else{ var func = name.substring(0,1).toUpperCase() + name.substring(1); var p = {}; p._action = "get"+func; queryCombinationDictionaries(dom,p); } } }); }; //渲染组件 var renderUI = function(xtype,dom,step){ switch(xtype){ case "select": // $(dom).removeAttr("xtype"); // $(dom).multiselect({multiple:false,header:false,noneSelectedText:'请选择',selectedText:'#'}); break; case "mtilselect": // $(dom).removeAttr("xtype"); $(dom).attr("multiple","multiple"); $(dom).multiselect({header:false,noneSelectedText:'请选择',selectedText:'# 已选择'}); break; case "date": // $(dom).removeAttr("xtype"); $(dom).datepicker({ dateFormat:'yy-mm-dd', yearRange:"-55:+55", // maxDate:'1994-03-29', // defaultDate:'1952-01-01', changeMonth: true, changeYear: true, constrainInput:true, showButtonPanel:true }); break; case "datetime": // $(dom).removeAttr("xtype"); $(dom).datetimepicker({ showSecond: true, timeFormat: 'hh:mm:ss', yearRange:"-60:+60", // minDate: 0, changeMonth: true, changeYear: true }); break; case "spinner": $(dom).spinner({step:step}); break; } }; var dealChildren = function(dom,_initData,wights,key){ var p = {}; //一行列的个数 var offset = 0; var colspace = Number($(dom).attr("colspace")); if(! colspace) colspace = 3; var html = new StringBuffer(); // var key = ""; // var variable = $(dom).attr("variable"); // if(!variable){ // var o = $(".initData_span",$(dom)).next(); // if($(".initData_span",$(dom)).length != 0){ // var v = eval("("+$(o).text()+")"); // if(v.length != 0) key = v[0]; // } // }else{ // key = variable; // } $("textarea",dom).each(function(index,d){ //校验处理 var validate = $(d).attr("validate"); var requiredFlag = " "; if(validate){ if(validate.indexOf("required")>=0) requiredFlag = "*"; } var $view = {}; if(_initData["_"+key]) $view = _initData["_"+key]; //值处理 var value = ""; if(!$view[$(d).attr("name")]){ if(_initData[$(d).attr("name")]) value=_initData[$(d).attr("name")]; }else{ value = $view[$(d).attr("name")]; } //label处理 var label = ""; if($(d).attr("label")) label = $(d).attr("label") + ":"; $(d).removeAttr("label"); var colspace = $(d).attr("colspace"); if(!colspace) colspace = 1; $(d).removeAttr("colspace"); $(d).wrap("
"); $(d).before("
"+label+requiredFlag+"
"); $(d).wrap("
"); $(d).after(""+$(d).attr("label")+""); if(!$(d).text() || $(d).text() == "") $(d).val(value); }); $("select",dom).each(function(index,d){ //校验处理 var validate = $(d).attr("validate"); var requiredFlag = " "; if(validate){ if(validate.indexOf("required")>=0) requiredFlag = "*"; } var $view = {}; if(_initData["_"+key]) $view = _initData["_"+key]; //值处理 var value = $view[$(d).attr("name")]; //if(!value) value=""; //label处理 var label = ""; if($(d).attr("label")) label = $(d).attr("label")+":"; $(d).removeAttr("label"); var colspace = $(d).attr("colspace"); if(!colspace) colspace = 1; $(d).removeAttr("colspace"); $(d).wrap("
"); $(d).before("
"+label+requiredFlag+"
"); $(d).wrap("
"); $(d).after(""+$(d).attr("label")+""); if(value){ $(d).children().each(function(index,opt){ if(value == $(opt).val()){ opt.selected = true; } }); } $(d).addClass("n-ui-select"); // $(d).multiselect({multiple:false,header:false,noneSelectedText:'请选择',selectedText:'#'}); }); $("label",dom).each(function(index,d){ var colspace = $(d).attr("colspace"); if(!colspace) colspace = 1; $(d).removeAttr("colspace"); $(d).wrap("
"); $(d).before("
"); $(d).wrap("
"); }); $("input",dom).each(function(index,d){ var colspace = $(d).attr("colspace"); if(!colspace) colspace = 1; if($(d).attr("type") && $(d).attr("type") == "hidden") colspace = 0; else if($(d).attr("type") && $(d).attr("type") == "hide") colspace = 0; $(d).removeAttr("colspace"); html.append("
"); html.append(dealInput(d,_initData,wights,key)); html.append("
"); $(d).replaceWith( html.toString()); html = new StringBuffer(); }); //行数 var row = 1; //组合数 var num = 1; $(dom).children().each(function(index,d){ if($(d).is("div")){ if($(d).attr("colspace") == "0"){ $(dom).append($("input",d)); $(d).remove(); return; } var colspace_cell = Number($(d).attr("colspace")); if(!colspace_cell) colspace_cell = 1; var clazz = $(d).attr("class"); if(clazz.indexOf("composite") != -1){ $(d).prepend("
"); $(d).children().each(function(index,dd){ $("#composite_"+num).append($(".n-input",dd)); }); if($(d).attr("label")){ $(d).prepend("
"+$(d).attr("label")+":
"); } $(".n-input", $("#composite_"+num)).addClass("n-composite").removeClass("n-input"); $(d).addClass("column n-cell"); $(".n-cell",d).remove(); num++; } if(clazz.indexOf("enter") != -1){ $(d).remove(); offset = 0; row++; return; } if(clazz.indexOf("space") != -1){ $(d).removeClass("space").addClass("column n-cell n-cell"+colspace+"_"+colspace_cell); $(d).append("
").append("
"); offset = offset + colspace_cell ; } if(clazz.indexOf("errMessage") != -1){ $(d).wrap("
"); $(d).addClass("error-ct"); return; } $(d).addClass("n-cell"+colspace+"_"+colspace_cell); if(offset == 0){ $(d).wrap("
"); offset = offset + colspace_cell ; }else if((offset + colspace_cell) <= colspace){ $("#row_"+row).append($(d)); offset = offset + colspace_cell ; }else{ row++; $(d).wrap("
"); offset = colspace_cell; } if(offset >= colspace){ row++; offset = 0; } }else{ $("#row_"+row).append($(d)); } }); }; var dealRender = function(dom,_initData,wights,key){ var xtypes = ["combination-select","select","mtilselect","hide","date","datetime","cascade-select","spinner","textarea","checkbox_list","radio_list"]; var xtype = $(dom).attr("type"); if(!xtype) xtype = $(dom).attr("xtype"); var $view = {}; if(_initData["_"+key]) $view = _initData["_"+key]; var html = new StringBuffer(); if(xtype == "checkbox" || xtype == "radio"){ if( _initData[$(dom).attr("name")+"Data"]){ xtype = xtype + "_list"; } } if($.inArray(xtype, xtypes) != -1){ var p = dealData(dom); //值处理 var value = $(dom).attr("value"); if(value){ p.value = value; }else{ p.value = $view[p.name]; if(!p.value){ p.value = _initData[$(dom).attr("name")]; if(!p.value) p.value=""; } } if(_initData[p.name+"Data"]) p.obj = _initData[p.name+"Data"]; p.xtype = xtype; html.append(dealXtype(p,wights)); }else{ //值处理 var value = $view[$(dom).attr("name")]; if(!value){ value = _initData[$(dom).attr("name")]; if(!value) value=""; } //checkbox,radio后的值 html.append(""); }else{ var att = dom.attributes; for(var i = 0;i < att.length;i++){ if(att[i].name != "label"){ if(att[i].name == "value"){ if($(dom).attr("value") && $(dom).attr("value") != "") value = $(dom).attr("value"); }else{ html.append(att[i].name).append("='").append(att[i].value).append("' "); } } } if($(dom).attr("type") == "checkbox" || $(dom).attr("type") == "radio"){ if($(dom).attr("value") == value && value != "") html.append(" checked='checked' "); } html.append(" value='").append(value).append("' "); if(!$(dom).attr("id")) html.append("id = '").append($(dom).attr("name")).append("' "); html.append(" />"); } } return html; } var dealInput = function(dom,_initData,wights,key){ var xtypes = ["combination-select","select","mtilselect","hide","date","datetime","cascade-select","spinner","textarea","checkbox_list","radio_list"]; var xtype = $(dom).attr("type"); if(!xtype) xtype = $(dom).attr("xtype"); //校验处理 var validate = $(dom).attr("validate"); var requiredFlag = " "; if(validate){ if(validate.indexOf("required")>=0) requiredFlag = "*"; } //label处理 var label = $(dom).attr("label"); var html = new StringBuffer(); //补充label if(label){ html.append("
") .append(label).append(":").append(requiredFlag); }else{ html.append("
"); } html.append("
"); html.append("
"); var $view = {}; if(_initData["_"+key]) $view = _initData["_"+key]; if(xtype == "checkbox" || xtype == "radio"){ if( _initData[$(dom).attr("name")+"Data"]){ xtype = xtype + "_list"; } } if($.inArray(xtype, xtypes) != -1){ var p = dealData(dom); //值处理 var value = $(dom).attr("value"); if(value){ p.value = value; }else{ p.value = $view[p.name]; if(!p.value){ p.value = _initData[$(dom).attr("name")]; if(!p.value) p.value=""; } } if(_initData[p.name+"Data"]) p.obj = _initData[p.name+"Data"]; p.xtype = xtype; html.append(dealXtype(p,wights)); }else{ //值处理 var value = $view[$(dom).attr("name")]; if(!value){ value = _initData[$(dom).attr("name")]; if(!value) value=""; } //checkbox,radio后的值 var _cr = ""; html.append(""); if($(dom).attr("type") == "checkbox" || $(dom).attr("type") == "radio") _cr = $(dom).attr("label"); html.append(_cr); }else{ var att = dom.attributes; for(var i = 0;i < att.length;i++){ if(att[i].name != "label"){ if(att[i].name == "value"){ if($(dom).attr("value") && $(dom).attr("value") != "") value = $(dom).attr("value"); }else{ html.append(att[i].name).append("='").append(att[i].value).append("' "); } } if($(dom).attr("type") == "checkbox" || $(dom).attr("type") == "radio"){ _cr = $(dom).attr("label"); } } if($(dom).attr("type") == "checkbox" || $(dom).attr("type") == "radio"){ if($(dom).attr("value") == value && value != "") html.append(" checked='checked' "); } // if(!$(dom).attr("value") || $(dom).attr("value") == "") // html.append(" value='").append(value).append("' "); html.append(" value='").append(value).append("' "); if(!$(dom).attr("id")) html.append("id = '").append($(dom).attr("name")).append("' "); html.append(" />").append(_cr); } } html.append("").append(label).append(""); html.append("
"); return html; }; var dealData = function(dom){ var p = {}; //补充id var name = $(dom).attr("name"); if(!name) name = ""; p.name = p.id = name; if($(dom).attr("id")) p.id = $(dom).attr("id"); //校验处理 p.validate = $(dom).attr("validate"); if(!p.validate){ p.validate=""; } //class处理 p.clazz = $(dom).attr("class"); if(!p.clazz) p.clazz=""; //readonly p.readonly = $(dom).attr("readonly"); //style p.style = $(dom).attr("style"); //spinner处理 p.decimal = $(dom).attr("decimal"); if(!p.decimal) p.decimal = 1; var point = ""; var dec = p.decimal; if(p.decimal == "1") point = ".1"; else point = "1"; if(p.decimal == "0") dec = "1"; if($(dom).attr("step")) p.step = Number(Number("0").toFixed(Number(dec)-1) + point) * Number($(dom).attr("step")); if($(dom).attr("local")) p.local = $(dom).attr("local"); if($(dom).attr("title")) p.title = $(dom).attr("title"); if($(dom).attr("parent")) p.parent = $(dom).attr("parent"); return p; }; var dealXtype = function(p,wights){ var html = restructureType(p,wights); return html; }; var restructureType = function(p,wights){ var style = ""; if(p.style) style = " style='"+p.style+"' "; var readonly = "" if(p.readonly) readonly = " readonly='"+p.readonly+"' "; var tip = ""; if(p.title) tip = " title='"+p.title+"' "; var html = new StringBuffer(); switch(p.xtype){ case "spinner": if(p.value == "") p.value = 0; html.append(""); wights.push({type:'spinner',id:'#'+p.id,step:p.step}); break; case "date": // if(p.validate.indexOf("date:true") == -1){ // if(p.validate != ""){ // p.validate = p.validate.substring(0,p.validate.length-1); // p.validate = p.validate + ",date:true}"; // }else{ // p.validate = "{date:true}"; // } // } html.append(""); wights.push({type:'date',id:'#'+p.id}); break; case "datetime": html.append(""); wights.push({type:'datetime',id:'#'+p.id}); break; case "textarea": html.append(""); wights.push({type:'textarea',id:'#'+p.id}); break; case "hide": html.append(""); break; case "select": html.append(""); wights.push({type:'select',id:'#'+p.id}); break; case "mtilselect": html.append(""); wights.push({type:'mtilselect',id:'#'+p.id}); break; case "checkbox_list": var obj = p.obj; var defaultvalue = p.value; if(!obj){ html.append(""); break; } html.append("
"); for(var key = 0;key < obj.length;key++){ var checked = ""; if(defaultvalue == obj[key][p.name+"_code"]) checked = "checked='checked' "; html.append("").append(obj[key][p.name+"_name"]); } html.append("
"); break; case "radio_list": var obj = p.obj; var defaultvalue = p.value; if(!obj){ html.append(""); break; } html.append("
"); for(var key = 0;key < obj.length;key++){ var checked = ""; if(defaultvalue == obj[key][p.name+"_code"]) checked = "checked='checked' "; html.append("").append(obj[key][p.name+"_name"]); } html.append("
"); break; // case "textarea": // html.append(""); // break; case "cascade-select": html.append(""); wights.push({type:'select',id:'#'+p.id}); break; case "combination-select": html.append(""); wights.push({type:'select',id:'#'+p.id}); break; } return html.toString(); }; $(function(){ $(".web-form").each(function(index,dom){ var id = $(dom).attr("id"); $("#"+id).webuiForm(); }); }); var validateData = function(validateId,type){ if(type == "div"){ $("#"+validateId).validate({ errorPlacement: function(lable, element) { var span = element.parent().find("span"); var text = span.text()+":"+lable.text()+"| "; lable.text(text); lable.css("color","red"); lable.appendTo($("div.error-ct")); } }); }else if(type == "tip"){ $("#"+validateId).validate({ errorPlacement: function(lable, element) { //$(element,$("#"+validateId)).poshytip({content:lable.html()}); $(element).webuiTip({content:lable.html()}); // $(element,$("#"+validateId)).webTip({ content: lable.html(), appendIdTo:lable}); } }); }else{ $("#"+validateId).validate({ errorPlacement: function(lable, element) { if($(element,$("#"+validateId)).next("button").length != 0){ $(element,$("#"+validateId)).bind("change",function(){ if($(element,$("#"+validateId)).val()){ $($(element,$("#"+validateId)).next().next("span")).replaceWith(errHtml("")); }else{ $($(element,$("#"+validateId)).next().next("span")).replaceWith(errHtml(lable.html())); } }); $($(element,$("#"+validateId)).next().next("span")).replaceWith(errHtml(lable.html())); }else{ $(element,$("#"+validateId)).next("span").replaceWith(errHtml(lable.html())); } } }); } }; var errHtml = function(lable){ var err = ""; return err; } var queryDictionaries = function(dom,params){ if(params.val || params.val == ""){ var html = new StringBuffer(); $(dom).children().remove(); html.append(""); $(dom).append(html.toString()); // $(dom).multiselect("refresh"); $(dom).trigger('change'); return; } Newtouch.Ajax.sendParams(params, params._action, function(data){ var html = new StringBuffer(); $(dom).children().remove(); html.append(""); for(var key = 0;key < data.length;key++){ html.append(""); } $(dom).append(html.toString()); // $(dom).multiselect("refresh"); $(dom).trigger('change'); }, function(error){ }, true); }; var queryCombinationDictionaries = function(dom,params){ if(params.val || params.val == ""){ var html = new StringBuffer(); // $(dom).children().remove(); // html.append(""); $(dom).append(html.toString()); // $(dom).multiselect("refresh"); $(dom).trigger('change'); return; } Newtouch.Ajax.sendParams(params, params._action, function(data){ var html = new StringBuffer(); // $(dom).children().remove(); // html.append(""); for(var key = 0;key < data.length;key++){ html.append(""); } $(dom).append(html.toString()); // $(dom).multiselect("refresh"); $(dom).trigger('change'); }, function(error){ }, true); };