service.detailtable_wev8.js 3.52 KB
define("mService/detailtable", ["mUtil","i18n"], function(mUtil,i18n) {
	var pageLoader = function($page, cfg){
		var $pageScroller = $(".page-scroller", $page),
			$pageFooter = $(".page-footer", $page);
		var isDataLoad = false;
		var formid = cfg.formid;
		
		var render = function(){
			var compsHtml = cfg.props.reduce(function (prev, comp) {
                return prev + "<abbr id='" + comp.detailtable.mecid + "' data-type='" + comp.detailtable.mectype + "'></abbr>";
            }, "<abbr id='" + cfg.formmec.detailtable.mecid + "' data-type='" + cfg.formmec.detailtable.mectype + "'></abbr>");
			$pageScroller.html(compsHtml);
			pageInit();
			pageEventInit();
		};
		
		var pageInit = function(){
			var components = [];
			$pageScroller.children("abbr[data-type]").each(function(){
				var $abbr = $(this);
				
				$abbr.data("loaded", false).find("*").remove();
				
				if($abbr.data("lazyload") == true){
					return;
				}
				
				var id = this.id;
				var type = $abbr.attr("data-type");
				var priority = $abbr.attr("data-priority") || Math.pow(2, 53) - 1;
				
				var mecparam = { el: id, type: type, container: cfg.container, priority: priority};
				if(cfg.formmec.detailtable.mecid == id){
					var formmecprop = cfg.formmec;
					if(cfg.optype == "edit"){
						formmecprop.detailtable.datas = cfg.datamap || {};//明细表行数据编辑
					}
					mecparam.option = formmecprop;
				}else{
					for(var i in cfg.props){
						var prop = cfg.props[i];
						if(prop.detailtable.mecid == id){
							var option = $.extend(true, {}, prop);
							if(type != "Form"){//字段值
								option.form = formid;
								if(cfg.optype == "edit"){
									var datamap = cfg.datamap || {}, fieldname = prop.field.name.toLowerCase();
									prop.detailtable.mectype == "FFile" && (option.field.filevalue = datamap[fieldname + "_filevalue"] || {});
								}else if(cfg.optype == "add"){
									option.detailtable.add = true;
								}
								option.detailtable.isA = true;
							}
							mecparam.option = option;
						}
					}
				}
				components.push(mecparam);
			});
			
			var pageid = mUtil.getCurrentPageId();
			if(cfg.optype == "edit"){ //如果是编辑明细数据,这条明细数据全部加载后更新isDataLoad状态
				var dataloads = components.map(function(com) {
					var done = $.Deferred();
					if(com.type =="Form"){
						done.resolve();
					}else{
						mUtil.pluginLoad(pageid, com.el, function () {
							done.resolve();
						}, true);
					}
					return done;
				});
				
				$.when.apply($, dataloads).then(function () {
					isDataLoad = true;
				});
			}else{
				isDataLoad = true;
			}
			
			require("Component").load(components, function() {
				mUtil.trigger('load');
			}, function (com) {
				mUtil.trigger('load', pageid, com.id);
			});
		};
		
		var pageEventInit = function(){
			$(".wev-btn.reset").on("click", function(){
				Mobile_NS.formReset(formid);
			});
			
			$(".wev-btn.submit").on("click", function(){
				if (!isDataLoad) return Mobile_NS.msg(i18n.LOADING_DATA, 3);
				
				if (!Mobile_NS.checkFieldIsReadyForSubmit(formid)) {return;}
				
				var errorMsg = Mobile_NS.checkRequired(formid);
				if (errorMsg) return Mobile_NS.msg("" + errorMsg, 3);
				
				if(cfg.prefilter && mUtil.eval(cfg.prefilter) !== false){
					var formData = Mobile_NS.getFormData(formid);
					var formShowDataMap = Mobile_NS.getFormShowData(formid);
					cfg.success && cfg.success(formData, formShowDataMap);
				}
			});
		};
		
		render();
	};
	
	return {
		mounted: function($page, cfg){
			pageLoader($page, cfg);
		}
	};
});