FButton_wev8.js 8.4 KB
define(['mUtil', "Component"],function(mUtil, Component) {
	var FButton = function(options) {
		var _fb = {}, btnMap = {}, $page, $comp, $editBtn;
        
		Component.super(this, options);
		
		this.type = "FButton";
		this.tpl = this.type + "_html";
		this.css = this.type + "_css";
		
		var vm = this.viewModel = {
			btns : [],
			form : "",
			fixed : true,
			pageExtend: true,//显示页面拓展
			standalone: true
		};
		
		this.beforeMount = function(){
			vm.btns.forEach(function(btn){
				var className = [];
				switch (btn.action) {
					case "submit":
						className.push("wev-btn-submit"); break;
					case "reset":
						className.push("wev-btn-reset"); break;
					case "custom":
						className.push("wev-btn-custom"); break;
					case "submitAndBack":
						className.push("wev-btn-submit"); break;
					case "edit":
						className.push("wev-btn-edit"); 
						vm.isLayout && className.push("wev-btn-hide");
						break;
					case "delete":
						className.push("wev-btn-delete"); 
						vm.isLayout && className.push("wev-btn-hide");
						break;
					case "submitAndNew":
						className.push("wev-btn-submit"); break;
					case "draft":
						className.push("wev-btn-draft");
						className.push("wev-btn-hide");
						break;
				}
				btn.className = className.join(' ');
				btn.id = _fb.generateBtnId();
				btnMap[btn.id] = btn;
			});
		};
		
		this.mounted = function(){
			var that = this;
			var $abbr = this.$el,
				formid = vm.form, $pageContent;
			
			$comp = $abbr.children(".wev-comp-" + this.type);
			$pageContent = $abbr.parents(".page-content");
			$page = this.$container;
			
			$editBtn = $abbr.find(".wev-btn.wev-btn-edit");
			
			$comp.on("click", ".wev-btn", function(e){
				var btn = btnMap[$(this).attr("id")],
					reminder = btn.remindMsg || "保存成功!";

				e.stopPropagation();
				
				if(!btn) return;

				switch (btn.action) {
					case "submit":
						Mobile_NS.formSubmit(formid, function (billid, codeField) {
							var cb = btn.callback;

							if (codeField) {
								Object.getOwnPropertyNames(codeField).forEach(function(key) {
									$pageContent.find("input[fieldid='" + key + "']").val(codeField[key]);
								});
							}
							if (!mUtil.isFunction(cb)) return;
							mUtil.eval(cb, that.pageid, billid );
							Mobile_NS.msg(reminder);
						},  that.pageid);
						break;
					case "reset":
						Mobile_NS.formReset(formid); break;
					case "custom":
						mUtil.eval(btn.click, that.pageid); break;
					case "expand":
						var cfg = {
							pageid: that.pageid,
							resourceType: btn.resourceType,
							remindMsg: btn.remindMsg,
							callback: btn.callback
						};
						var pageParams = mUtil.getPageParam(that.pageid);
						if (pageParams) {
							for (var key in pageParams) {
								if (btn.interfaceurl) {
									if (btn.interfaceurl.indexOf(key + "=", btn.interfaceurl.indexOf("?")) == -1) {
										btn.interfaceurl +=  "&" + key + "=" + pageParams[key];
									}
								} else {
									btn.interfaceurl = key + "=" + pageParams[key];
								}
							}
						}
						Mobile_NS.doPageExpand(btn.interfaceurl, btn.click, cfg);
						break;
					case "submitAndBack":
						Mobile_NS.formSubmit(formid, function (billid) {
							var cb = btn.callback;

							if (mUtil.isFunction(cb)) {
								mUtil.eval(cb, that.pageid, billid);
							}
							 
							Mobile_NS.refreshPrevPageList().then(Mobile_NS.backPage);
							Mobile_NS.msg(reminder);
						}, that.pageid);
						break;
					case "edit":
						if (!$editBtn.hasClass("disabled")) {
							Mobile_NS.formEdit(formid);
						}
						break;
					case "delete":
						Mobile_NS.formDelete(formid, function () {
							if (mUtil.isFunction(btn.callback)) {
								mUtil.eval(btn.callback, that.pageid);
							}
							mUtil.getLabel(3661, "数据删除成功!", function (msg) {
								Mobile_NS.msg(msg);
							});
							Mobile_NS.refreshPrevPageList().then(Mobile_NS.backPage);
						},that.pageid);
						break;
					case "submitAndNew":
						Mobile_NS.formSubmit(formid, function (billid) {
							var cb = btn.callback;

							$("#"+formid).find(".wev-form").find("input[type='hidden'][name='billid']").val("");
						    if (!mUtil.isFunction(cb)) return;
							mUtil.eval(cb, that.pageid, billid );
							Mobile_NS.msg(reminder);
						});
						break;
					case "draft":
						var formInstance = mUtil.getInstance(formid, that.pageid);
						formInstance.submit({
							isSkipCheck :true,
							onsuccess : function (billid) {
								var cb = btn.callback;
								if (!mUtil.isFunction(cb)) return;
								mUtil.eval(cb, that.pageid, billid );
								Mobile_NS.msg(reminder);
							}
						});
				}
			});

			_fb.calculatePosition();
			//解析布局权限和页面拓展按钮
			_fb.parseLayoutBtns(function(){
			    var cb = function(){
                    _fb.calculatePosition();
                    var instance = mUtil.getInstance(formid, that.pageid);
                    instance && instance.resetReplyBtn && instance.resetReplyBtn();
                    mUtil.trigger('dataload', that.pageid, that.id);
                };
                //判断是否可以显示草稿按钮
                var $draftBtns = $comp.find(".wev-btn-draft");
                mUtil.pluginLoad( that.pageid, formid, function(){
                    $draftBtns.size() ? mUtil.getInstance(formid, that.pageid).hasDraftOperation(function(res){
                        if(res) $draftBtns.removeClass('wev-btn-hide');
                        cb();
                    }) : cb();
                });
			});
			
			$load(_fb.pageOnload);
		};

		_fb.parseLayoutBtns = function(cb){
			var that = this;
			if(vm.isLayout){
			    var actionUrl = mUtil.getActionUrl(that.type, {action: "parseLayoutBtns", pageExtend: vm.pageExtend ? 1 : 0, pageid: that.pageid.substring(that.pageid.lastIndexOf("_") + 1)}, that.pageid);
				mUtil.getJSON(actionUrl, function(result){
					var rightinfo = result.data.rightinfo;
					
					var $wevDeleteBtn = $comp.find(".wev-btn.wev-btn-delete");
					var $wevEditBtn = $comp.find(".wev-btn.wev-btn-edit");

					if(rightinfo == 3){
						$wevDeleteBtn.removeClass("wev-btn-hide");
						$wevEditBtn.removeClass("wev-btn-hide");
					} else if(rightinfo == 2){
						$wevDeleteBtn.remove();
						$wevEditBtn.removeClass("wev-btn-hide");
					} else {
						$wevDeleteBtn.remove();
						$wevEditBtn.remove();
					}
					vm.pageExtend && _fb.appendExpandBtns(result.data.btns || []);
					cb && cb();
				});
			}else{
			    cb && cb();
			}
		};
		
		_fb.appendExpandBtns = function(expandBtns){
			expandBtns.map(function(ele) {
				ele.id = _fb.generateBtnId();
				btnMap[ele.id] = ele;
			});
			var templateHtml = ['{@each btns as btn, index}',
			                    	'<a id="${btn.id}" class="wev-btn ${btn.className}">${btn.text}</a>',
								'{@/each}'].join('');
			var html = mUtil.parseTemplate(templateHtml, {btns : expandBtns});
			$comp.find(".wev-btn-wrapper").append(html);
		};
		
		_fb.calculatePosition = function(){
			if (vm.fixed) {
				var $footer = $page.children(".page-footer");
				var $content = $page.children(".page-content");

				this.$once("moveComponent", function(){
                    if (!$footer.length) {
                        $footer = $("<div class=\"page-footer\"></div>");
                        $content.after($footer);
                    }
                    if (!this.$el.parent().hasClass("page-footer")) {
                        $footer.append(this.$el).show();
                    }
				});

				if (!$footer || !$content) return;

				var setContentStyle = function() {
					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");
						}
					}
				};

				setTimeout(function () {
					setContentStyle();
				}, 100);
			}
		};
		
		_fb.generateBtnId = function(){
			return "fb" + mUtil.UUID();
		};
		
		_fb.pageOnload = function(){
			var form = mUtil.getInstance(vm.form);

			if (!$editBtn.length || !form) return;

			$editBtn.addClass("disabled");
			
			if (mUtil.isFunction(form.preloadEditUrl)) {
				form.preloadEditUrl(function () {
					$editBtn.removeClass("disabled");
				});
			}
		};
		
		for (var key in _fb) {
			if (mUtil.isFunction(_fb[key])) {
				_fb[key] = _fb[key].bind(this);
			}
		}
    };

    return Component.init(FButton);
});