Toolbar_wev8.js 6.05 KB
define(['mUtil', "Component"],function(mUtil, Component) {
	var Toolbar = function(options) {
		var _toolbar = {};
		
		Component.super(this, options);
		
		this.type = "Toolbar";
		this.tpl = this.type + "_html";
		this.css = [this.type + "_css", "swipe_css", "grid_css"];
		
		var vm = this.viewModel = {
			col : 5,//列数
			items : [],
        	badge : null,
			isFixedBottom : false, //是否固定底部
			callback: {
				click: function() {}
			}
		};

		this.beforeMount = function(){
            if(vm.badge === true){
                vm.badge = mUtil.getActionUrl(this.type, {action:"getBadge", "mec_id": this.id}, this.pageid);
            }

            var permItems = vm.items.filter(function(item){
                return item.permission;
            });
            var done = $.Deferred().resolve();
            if(permItems.length){
                var perms = permItems.map(function(item){
                    return item.permission;
                });
                done = this.judgePermission(perms).done(function(res){
                    if(res.status == '1'){
                        var permRes = res.data;
                        permRes.forEach(function(hasPerm, index){
                            if(!hasPerm){
                                vm.items.splice(vm.items.indexOf(permItems[index]), 1);
                            }
                        });
                    } else {
                        vm.items = [];
                    }
                }).fail(function(){
                    vm.items = [];
                });
            }
            return done.then(function(){
                var items = [],
                    originItems = vm.items;
                var len = originItems.length,
                    screenSize = len < vm.col && len || vm.col, screenItems;
                vm.remindApis = [];
                originItems.forEach(function(item, index) {
                    var newItem = $.extend({}, item);

                    newItem.id = newItem.id || mUtil.UUID();

                    if (index % screenSize === 0) {
                        screenItems = [];
                        items.push(screenItems);
                    }

                    if(item.remind && item.remindapi && item.remindapi.api){
                        newItem.uuid = item.remindapi.uuid = mUtil.UUID();
                        newItem.apiid = item.remindapi.api.id;
                        vm.remindApis.push(item.remindapi);
                        delete item.remindapi;
                    }

                    screenItems.push(newItem);
                });

                vm.items = items;
                vm.originItems = originItems;
            });
		};
		
		this.mounted = function(){
			var $page = this.$container,
				$abbr = this.$el,
				$comp = $abbr.children(".wev-comp-" + this.type);
			
			//固定到底部
			if(vm.isFixedBottom == true){
				this.$once("moveComponent", function(){
                    var $footer = $page.children(".page-footer");
                    var $content = $page.children(".page-content");
                    if($footer.length == 0){
                        $footer = $("<div class=\"page-footer\"></div>");
                        $content.after($footer);
                    }
                    if(!$abbr.parent().hasClass("page-footer")){
						$abbr.find("script").remove();
                        $footer.append($abbr).show();
                    }

                    if($footer.height()){
                        $footer.attr("footer-height", $footer.height());
                        $content.css("bottom", $footer.height() + "px");
                    }else{
                        if($footer.attr("footer-height")){
                            $content.css("bottom", $footer.attr("footer-height") + "px");
                        }else{
                            $content.css("bottom", "0px");
                        }
                    }
				});
        	}

        	$comp.on("click", ".wev-table-view-cell", function(){
				if(!mUtil.isFunction(vm.callback.click)) return;

				var itemDom = this;
				var id = this.id;

				vm.originItems.every(function(item) {
					if (item.id != id) return true;

					vm.callback.click.call(itemDom, item);
				});
        	});
        	
			_toolbar.loadBadge();

			if (vm.items.length <= 1) return $comp.css("visibility", "visible");

			var params = {
				continuous: false,
				disableScroll: true,
				stopPropagation: false,
				width: $(window).width(),
				callback: function (index, element) {
					$(".wev-comp-swipe-point b", $comp).removeClass("curr-point").eq(index).addClass("curr-point");
				}
			};

			require(["swipe"], function () {
				Swipe($comp[0], params, function () {
					var $footer = $page.children(".page-footer");
					var $content = $page.children(".page-content");
					if($footer.height()){
						$footer.attr("footer-height", $footer.height());
						$content.css("bottom", $footer.height() + "px");
					}else{
						if($footer.attr("footer-height")){
							$content.css("bottom", $footer.attr("footer-height") + "px");
						}else{
							$content.css("bottom", "0px");
						}
					}
					
					$abbr.find(".wev-panel-hide").removeClass("wev-panel-hide");
				});
			});
		};
		
		this.refreshBadge = function(){
			_toolbar.loadBadge();
		};

        this.judgePermission = function(perms) {
            var actionUrl = mUtil.getActionUrl(this.type, {action: "judgePermission"}, this.pageid);
            return $.ajax({
                url: mUtil.completeUrl(actionUrl),
                data: {
                    perms: JSON.stringify(perms)
                },
                type: 'POST',
                dataType: 'json'
            });
        }
		
		_toolbar.loadBadge = function(){
			if(vm.badge == null){
        		return;
        	}
			var $comp = this.$el.children(".wev-comp-" + this.type),
	    		$badges = $(".wev-badge", $comp);
        	
        	require(["remindHelper"], function(helper){
				helper.renderBadge(vm.badge, $badges, vm.remindApis);
        	});
		};
		
		_toolbar.loadBadge = _toolbar.loadBadge.bind(this);
    };

    return Component.init(Toolbar);
});