service.customsearch_wev8.js 9.73 KB
define("mService/customsearch", ["mUtil", "mService", "fieldParseHelper"], function(mUtil, mService) {
	return {
		mounted: function($page, cfg){
			var getSearchParam = function(isSearch){
				var _searchMap = {};
				$(".wev-field", $page).each(function(){
					var $field = $(this);
					var fieldType = $field.attr("data-fieldType");
					var $realField = fieldType == "select" ? $("select", $field) : $("input", $field);
					
					var fieldName = $realField.attr("name");
					var fieldValue =  $realField.val();
					
					if((isSearch && fieldValue != "") || !isSearch){
						_searchMap[fieldName] = fieldValue;
					}
				});
				return _searchMap;
			};
			var parseBrowser = function(bval, $field){
				var actionUrl = mUtil.getActionUrl("FBrowser", { 
					action: "parseValues", 
					values: bval, 
					typeid: $field.attr("bid"), 
					identifie: $field.attr("bname") 
				});

				mUtil.getJSON(actionUrl, function(result){
					var showname = result.data;
					$field.triggerHandler("change");
					$field.siblings(".text").html(showname);
					$field.siblings(".hiddenText").html(showname);
				});
			};
			var initBrowser = function($fields, browserCfg){
				$fields.each(function(){
					var $field = $(this),
						$a = $field.parent(),
						$viewtext = $field.siblings(".text"),
						$hiddentext = $field.siblings(".hiddenText"),
						$clearBtn = $field.parent().siblings(".wev-clear-btn"),
						$tip = $field.siblings(".wev-field-tip"),
						expand = false;
					
					if($field.val()){//处理浏览框默认值
						parseBrowser($field.val(), $field);
					}

					$field.siblings("i.search").on("click", function(){
						var bid = $field.attr("bid"),
							bname = $field.attr("bname"),
							serviceName = "",
							params = {
								selectedIds : $field.val(),
						        success: function(id, text){
						            $field.val(id).triggerHandler("change");
						            $viewtext.html(text);
						            $hiddentext.html(text);
						            setTimeout(function(){
										var clientWidth = $viewtext[0].clientWidth,
											scrollWidth = $hiddentext[0].scrollWidth;
										
										if(scrollWidth > clientWidth-64){
											expand = true;
										}else{
											expand = false;
											$a.removeClass("showall");
										}
									},100);
						        }
							};
						if(bid == 1 || bid == 17){//人力单多选
							$.extend(params, {browserType : bid});
							serviceName = "hrmbrowser";
						}else if(bid == 256 || bid == 257){//树形单多选
							$.extend(params, {browserId : bid, browserName: bname});
							serviceName = "treebrowser";
						}else{//自定义单多选
							var relateParam = {}, _searchMap = getSearchParam() || {};
							$.each(_searchMap,function(key,value){ 
								relateParam["fieldname_"+key] = value;
							}); 

							$.extend(params, {browserId : bid, browserName: bname, relateParam: relateParam, browsershow: browserCfg[bname] || {}});
							serviceName = "commonbrowser";
						}
						mService.show(serviceName, params);
					});
					$field.change(function(){
						if($field.val()){
							$clearBtn.show();
			            	$tip.hide();
						}else{
							$clearBtn.hide();
			            	$tip.show();
						}
					});
					$clearBtn.click(function(){
						$field.val("").triggerHandler("change");
						$viewtext.html("");
						$hiddentext.html("");
						$a.removeClass("showall");
					});
					$viewtext.click(function(){
						if(expand){
							if($a.hasClass("showall")){
								$a.removeClass("showall");
							}else{
								$a.addClass("showall");
							}
						}
					});
				});
			};
			var defCfg = {
				id: "",
				searchid: "",
				conditions : "",
				title: ""
		    };
			$.extend(defCfg, cfg);
			
			$(".wev-header", $page).html(defCfg.title);
			
			var datetimeTmpl = [
				'<div class="wev-field wev-muti-field" data-fieldType="${mectype}">',
					'<div>${label} :</div>',
					'<div>',
						'<div>',
							'<input type="text" style="display: none;" name="${fieldname}" value="${initValue}"/>',
							'<span class="wev-field-view-span ${viewTipsClass}" showname="#386382#">${placeholder}</span>', /*请选择*/
							'<div class="wev-clear-btn"></div>',
						'</div>',
					'</div>',
				'</div>',
			].join('');
			
			var templateHtml = {
				"select": [
					'<div class="wev-field" data-fieldType="${mectype}">',
						'<div>${label} :</div>',
						'<div>',
							'<select name="${fieldname}">',
								'<option value="">#386382#</option>',/*请选择*/
								'{@each data as d}',
								'<option value="${d.value}" {@if d.value == initValue} selected{@/if}>${d.name}</option>',
								'{@/each}',
							'</select>',
						'</div>',
					'</div>',
                ].join(''),
                "date": datetimeTmpl,
                "time": datetimeTmpl,
                "datetime": datetimeTmpl,
                "browser": [
					'<div class="wev-field" data-fieldType="${mectype}">',
					'<div>${label} :</div>',
					'<div>',
						'<a href="javascript:void(0);">',
							'<div class="text"></div>',
							'<div class="hiddenText"></div>',
							'<div class="wev-field-tip">#386382#</div>',/*请选择*/
							'<i class="search"></i>',
							'<input type="text" style="display: none;" name="${fieldname}" bid="${browsertype}" bname="${browsername}" value="${initValue}"/>',
						'</a>',
						'<div class="wev-clear-btn"></div>',
					'</div>',
					'</div>',
                ].join(''),
    			"text": [
					'<div class="wev-field" data-fieldType="${mectype}">',
						'<div>${label} :</div>',
						'<div>',
							'<input type="text" name="${fieldname}" placeholder="${fieldremind}" value="${initValue}"/>',/*请输入*/
							'<div class="wev-clear-btn"></div>',
						'</div>',
					'</div>',
        		].join(''),
        		"number": [
					'<div class="wev-field wev-muti-field" data-fieldType="${mectype}">',
						'<div>${label} :</div>',
						'<div>',
							'<div>',
								'<input type="number" name="${fieldname}"  onblur="if(this.value)this.value=Number(this.value)" placeholder="${fieldremind}" value="${initValue}"/>',/*请输入*/
							'</div>',
						'</div>',
					'</div>',
        		].join(''),
			};
			
			var labelCahe = {
				'83869':'请输入',
				'386382':'请选择',
				'384122':'重置',
				'388113':'搜索',
				'386772':'查询'
			};
			var replaceTempi18nLabel = function(tmpl,labels){
				for(var labelIndex in labels){
					tmpl = tmpl.replace(eval("/#"+labelIndex+"#/g"),labels[labelIndex]);
				}
				return tmpl;
			};
			mUtil.getMultiLabel(labelCahe,function(resultlabels){
				!defCfg.title && $(".wev-header", $page).html(resultlabels['386772']);

				var datas = defCfg.conditions;
				var searchLast = defCfg.searchLast || {};
				$(".wev-loading", $page).hide();
				
				var html = "";
				var browserCfg = {};
				var resetValue = {};
				for(var i = 0; i < datas.length; i++){
					var data = datas[i];
					var mectype = data.mectype,
						initValue = data.initValue,
						fieldname = data.fieldname;
					var tmpl = templateHtml[mectype];
					if(!tmpl){
						continue;
					}

					resetValue[fieldname] = initValue;
					if(searchLast[fieldname]){
						data.initValue = searchLast[fieldname];
						initValue = data.initValue;
					}

					if("text" == mectype || "number" == mectype){
						!data.fieldremind && (data.fieldremind = resultlabels['83869']);
					}

					if("date" == mectype || "time" == mectype || "datetime" == mectype){
						if(initValue){
							data.placeholder = initValue;
						}else{
							data.placeholder = resultlabels['386382'];
							data.viewTipsClass = "wev-field-view-tip";
						}
					}

					html += mUtil.parseTemplate(replaceTempi18nLabel(tmpl,resultlabels), data);
					data.browsershow && (browserCfg[data.browsername] = data.browsershow);
				}
				
				var $form = $("form.wev-form", $page);
				$form.html(html);
				
				Mobile_NS.datePicker($(".wev-field[data-fieldType='date'] input", $page), "date");
				Mobile_NS.datePicker($(".wev-field[data-fieldType='time'] input", $page), "time");
				Mobile_NS.datePicker($(".wev-field[data-fieldType='datetime'] input", $page), "datetime");
									
				initBrowser($(".wev-field[data-fieldType='browser'] input", $page), browserCfg);
				
				$(".wev-btn-reset", $page).html(resultlabels['384122']).click(function(){//重置点击重置为初始值
					$form[0].reset();
					$(".wev-field", $page).each(function(){
						var $field = $(this);
						var mectype = $field.attr("data-fieldType");
						var $realField = mectype == "select" ? $("select", $field) : $("input", $field);
						var fieldName = $realField.attr("name");
						var resetV = resetValue[fieldName];
						
						if(resetV){
							$realField.val(resetV);
							if("date" == mectype || "time" == mectype || "datetime" == mectype){
								$(".wev-field-view-span", $field).html(resetV).removeClass("wev-field-view-tip");
							}

							if("browser" == mectype){
								parseBrowser(resetV, $realField);
							}
						}else{
							$realField.val("").triggerHandler("change");
							if("date" == mectype || "time" == mectype || "datetime" == mectype){
								$(".wev-field-view-span", $field).html(resultlabels['386382']).addClass("wev-field-view-tip");
							}

							if("browser" == mectype){
								$(".wev-field .text, .wev-field .hiddenText", $field).html("").parent().removeClass("showall");
							}
						}
					});
				});
				
				$(".wev-btn-search", $page).html(resultlabels['388113']).click(function(){
					var searchParams = getSearchParam(true) || {};
					var params = {"_searchMap" : encodeURI(JSON.stringify(searchParams))};
					Mobile_NS.triggerRefresh(defCfg.id, params, function(){
						var instance =  mUtil.getInstance(defCfg.id, defCfg.pageid);
						instance && instance.cacheSearchLast(searchParams);
					}).then(function(){
						Mobile_NS.backPage();
					});
				});
			});
		}
	};
});