service.hrmbrowser.list_wev8.js 8.57 KB
define("mService/hrmbrowser/list", ["mUtil", "i18n", "mService/hrmbrowser/result"], function(mUtil, i18n, hrmResult) {
	
	return {
		mounted: function($page, cfg){
			var defCfg = {
				browserType : "1", //浏览框类型 1.单选  2.多选
				selectedIds : "",	//选中的id,逗号分隔,如:1,2,3
				dataType : "all",
				_parentResult : null,
				closeCallback : function(){mUtil.back();},
				success : function(){}
			};
				
			$.extend(defCfg, cfg);
			
			var isMulti = defCfg.browserType != "1" || defCfg.isMulti;
			$(".page-content", $page).addClass(isMulti ? "multi" : "single");
			
			var $search = $(".wev-search", $page),
				$searchKey = $("input[type='search']", $page),
		 		$clear = $(".wev-clear-btn", $page),
		 		$contentContainer = $(".content-container", $page),
		 		$list = $(".list-wrap .wev-table-view", $page),
		 		$refreshLoading = $(".wev-refresh-loading", $page),
		 		$moreLoading = $(".wev-more-loading", $page),
		 		$moreBtn = $(".wev-more-btn", $page),
		 		$noData = $(".wev-no-data", $page);
			
			
			$("form[disabledEnterSubmit]", $page).keydown(function(event){
                if(event.keyCode == 13){return false;}
            });
			
			var animateEventName = mUtil.runtime.isWebkit() ? "webkitAnimationEnd": "animationend";
            $refreshLoading[0].addEventListener(animateEventName, function() {
                if($(this).hasClass("wev-hide")){
                    $(this).hide();
                }
            });
            
			$searchKey.on("input", function(){
                var v = this.value;
                $search.toggleClass("wev-has-value", v != "");
            }).keyup(function(event){
                if(event.keyCode == 13){
                	searchKey = this.value;
                	_list.refresh();
                    this.blur();
                }
            });
            
            $clear.click(function(){
                $searchKey.val("").focus().triggerHandler("input");
            });
            
            $moreBtn.click(function(){
            	_list.loadMore();
            });
            
            var dataType = defCfg["dataType"];
            var customUrl = defCfg["customUrl"];
            var isNotTypeAll = (dataType == "dept" || dataType == "my" || dataType == "atsome");
            var listPageNo = 0;
            var pageSize = 50;
            var searchKey = "";
            
            var _list = {
        		refresh: function(){
                	listPageNo = 0;
                	$contentContainer.addClass("wev-refreshing");
                    $refreshLoading.show().removeClass("wev-hide").addClass("wev-show");
                    
                    var beginstamp = (new Date()).valueOf(); 
                    function hideLoading(){
                    	var endstamp = (new Date()).valueOf();
                    	if((endstamp - beginstamp) >= 300){
                    		$refreshLoading.removeClass("wev-show").addClass("wev-hide");
                    		$contentContainer.removeClass("wev-refreshing");
                    	}else{
                    		setTimeout(hideLoading, 100);
                    	}
                    } 
                    _list.loadData(function($newList){
                    	hideLoading();
                    });
        		},
        		loadMore: function(){
                	$moreLoading.show();
                	_list.loadData(function(){
                		$moreLoading.hide();
                	});
        		},
        		loadData: function(callback){
                	listPageNo++;
                    var pageNo = listPageNo;
                    $moreBtn.hide();
                    $noData.hide();
                	var url = customUrl || mUtil.jionActionUrl("com.api.mobilemode.web.mobile.browser.HrmBrowserAction", "action=getListData&type="+dataType);
                	mUtil.getJSON(url, {"searchKey":searchKey, "pageNo":pageNo, "pageSize":pageSize}, function(result){
                		var data = result["data"];
                		var totalSize = data.totalSize;
                		var templateHtml = [
    	                    '{@each datas as d}',
    	                        '<li class="wev-table-view-cell wev-media ${d.id|hrmbrowser_list_selected}" data-id="${d.id}" data-lastname="${d.lastname}" data-fontcolor = "${d.avatar.fontColor}" data-background = "${d.avatar.background}" data-headformat = "${d.avatar.headFormat}" data-messagerurl="${d.avatar.messagerUrls}" data-shortname="${d.avatar.shortname}">',
    	                              '<a href="javascript:void(0);">',
    	                                  '<i class="wev-css-icon '+(isMulti ? 'wev-multi-check' : 'wev-single-check') + '"></i>',
    	                                  '<div class="wev-media-object wev-pull-left">',
												'{@if d.avatar.headFormat == "1" || d.avatar.headFormat == "3"}',
												'<div style="background:${d.avatar.background};color:${d.avatar.fontColor}">${d.avatar.shortname}</div>',
												'{@else}',
												'<img src="${d.avatar.messagerUrls}">',
												'{@/if}',
    	                                  '</div>',
    	                                  '<div class="wev-media-body">',
    	                                  	'<div class="data-table">',
    											'<div class="data-row">',
    												'<div class="data-lastname"><div class="wev-ellipsis">${d.lastname}</div></div>',
    												'<div class="data-jobTitle"><div class="wev-ellipsis">${d.jobTitle}</div></div>',
    											'</div>',
    											'<div class="data-row">',
    												'<div class="data-subCompany"><div class="wev-ellipsis">${d.subCompany}</div></div>',
    												'<div class="data-department"><div class="wev-ellipsis">${d.department}</div></div>',
    											'</div>',
    										'</div>',
    	                                  '</div>',
    	                              '</a>',
    	                        '</li>',
    	                    '{@/each}'    
    	                ].join('');
                		
                		var html = mUtil.parseTemplate(templateHtml, data);
                		var $newList = $(html);
                		if(pageNo == 1){
                        	$list.find("*").remove();
                        	if(isNotTypeAll && isMulti && totalSize > 0){ // 多选 并且 不是显示 所有人 
	                        	var $selectAll = $('<li class="wev-table-view-cell wev-media select-all"><a href="javascript:void(0);"><i class="wev-css-icon wev-multi-check"></i><div class="wev-media-body" style="color:#666;">'+i18n.SELECT_ALL+'</div></a></li>');
	                        	$list.append($selectAll);
	                        	$selectAll.click(function(){
	                        		var $sa = $(this);
	                        		$sa.toggleClass("selected");
	                        		
	                        		$(".wev-table-view-cell", $list).not(".select-all").filter(function() {
	                        			return $sa.hasClass("selected") === !$(this).hasClass("selected");
		                  			}).triggerHandler("click");
	                        	});
                        	}
                        }
                        $list.append($newList);
                        
                        $newList.click(function(){
                        	if(isMulti){	//多选
                        		_result[$(this).hasClass("selected") ? "remove" : "add"](this.dataset);
                        	}else{	//单选
                        		_result.onOk($(this).data("id"), $(this).data("lastname"));
                        	}
                        });
                        
                        var totalPageCount = (totalSize % pageSize) == 0 ? parseInt(totalSize / pageSize) : (parseInt(totalSize / pageSize) + 1);;
                        if(pageNo >= totalPageCount){
                			$moreBtn.hide();
                		}else{
                			$moreBtn.show();
                		}
                        
                        if(totalSize <= 0){
            				$noData.show();
            			}
                        
                        if(mUtil.isFunction(callback)){
                        	callback();
                        }
                	});
                }
            };
            
            var _result = new hrmResult($page, defCfg.success, defCfg.closeCallback, defCfg._parentResult);
            
            var juicer = require("juicer");
            juicer.unregister('hrmbrowser_list_selected');
            juicer.register('hrmbrowser_list_selected', function(id){
            	return _result.indexOfSelectedData(id) == -1 ? "" : "selected";
            });
            
            _list.refresh();
            _result.init(defCfg.selectedIds);
		}
	};
});