formExtHelper_wev8.js 13.6 KB
define(['mUtil', 'i18n'], function (mUtil, i18n) {
	function doFieldRepeatVerify(repeatVerifyFieldInfo, successFn, failFn){
		var vm = this.viewModel, 
			$page = this.$container,
			billid = vm.billid,
			formid = vm.relate.formid,
			modeid = vm.relate.modeid;
			verifyMainFieldArr = repeatVerifyFieldInfo["main"],
			verifyDetailFieldArr = repeatVerifyFieldInfo["detail"],
			veriryFieldArr = null,
			verifyArr = {};
		
		// 获取相应的字段元素的值
		function getFieldValue(){
			getMainFeildValueArray();
			getDetailFeildValueArray();
		}
		
		//获取字段数据,拼装使用建模新接口
		function getFieldValueInCubeMethod(){
			for(var i = 0; verifyMainFieldArr && i < verifyMainFieldArr.length; i++){
				var fieldids = verifyMainFieldArr[i]["fieldids"];
				for(var index = 0; index < fieldids.length; index++) {
					var verify = fieldids[index];
					verifyArr["field"+verify.fieldid] = $f(verify["fieldname"]).val();
				}
			}
			
			for(var j = 0; verifyDetailFieldArr && j < verifyDetailFieldArr.length; j++){
				var dt_verifyField = verifyDetailFieldArr[j];
				var dt_fieldids = dt_verifyField["fieldids"];
				
				var indexArray = new Array();
				for(var index = 0; index < dt_fieldids.length; index++) {
					var dt_verifytmp = dt_fieldids[index];
					var dt_tabletmp = dt_verifytmp["detailtable"];
					if(dt_tabletmp== dt_verifyField["detailtable"]) {
						var instance = mUtil.getDetailTableInstance(dt_tabletmp, vm.id);
						instance && (indexArray = instance.getIndexArray(dt_tabletmp));
						break;
					}
				}
				
				for(var k=0;k<indexArray.length;k++) {
					var rowIndex = indexArray[k];
					for(var index = 0; index < dt_fieldids.length; index++) {
						var dt_verify = dt_fieldids[index];
						var dt_table = dt_verify["detailtable"];
						if(dt_table != null && dt_table != ""){
							var instance = mUtil.getDetailTableInstance(dt_table, vm.id);
							if(!instance) continue;
							
							var idname = (dt_table+"_id_rowindex_"+rowIndex).toLowerCase();
							var fname = (dt_table+"_"+dt_verify["fieldname"]+"_rowindex_"+rowIndex).toLowerCase();
							var dtTbname = "detail_"+dt_verifyField["orderid"];
							
							var rowInArr = parseInt(rowIndex)-2;
							if(!verifyArr[dtTbname]) verifyArr[dtTbname] = [];
							if(!verifyArr[dtTbname][rowInArr]) verifyArr[dtTbname][rowInArr] = {};
							
							verifyArr[dtTbname][rowInArr]["field"+dt_verify["fieldid"]] = instance.getRowFieldValueByKey(rowIndex, fname) || "";
							verifyArr[dtTbname][rowInArr]["dtl_id"] = instance.getRowFieldValueByKey(rowIndex, idname) || "";
							verifyArr[dtTbname][rowInArr]["index"] = rowInArr;
						}
					}
				}
			}
		}
		
		function getMainFeildValueArray(){
			for(var i = 0; verifyMainFieldArr && i < verifyMainFieldArr.length; i++){
				var verifyField = verifyMainFieldArr[i];
				var id = verifyField["id"];
				verifyField["checkStatus"] = "true";
				var fieldids = verifyField["fieldids"];
				for(var index = 0; index < fieldids.length; index++) {
					var verify = fieldids[index];
					var fieldname = verify["fieldname"];
					var fieldhtmltype = verify["fieldhtmltype"];
					var getText = fieldhtmltype == 3 || fieldhtmltype == 4 || fieldhtmltype == 5;					
					if(getText) verify["fieldshowtext"] = $f(fieldname).text();
					verify["fieldvalue"] = $f(fieldname).val();
				}
				if(veriryFieldArr==null) {
					var jsonStrTmp = "["+JSON.stringify(verifyField)+"]";
					veriryFieldArr = eval('('+jsonStrTmp+')');
				} else {
					veriryFieldArr.push(verifyField)
				}
			}
		}
		
		function getDetailFeildValueArray(){
			
			for(var i = 0; verifyDetailFieldArr && i < verifyDetailFieldArr.length; i++){
				var verifyField = verifyDetailFieldArr[i];
				var fieldids = verifyField["fieldids"];
				var detailtable = verifyField["detailtable"];
				
				var indexArray = new Array();
				for(var index = 0; index < fieldids.length; index++) {
					var verify = fieldids[index];
					var fieldname = verify["fieldname"];
					var detailtabletmp = verify["detailtable"];
					if(detailtabletmp==detailtable) {
						var instance = mUtil.getDetailTableInstance(detailtabletmp, vm.id);
						instance && (indexArray = instance.getIndexArray(detailtabletmp));
						break;
					}
				}
				createVerifyField4Detail(verifyField,indexArray);
			}
			for(var i = 0; veriryFieldArr!=null && i < veriryFieldArr.length; i++){
				var verifyField = veriryFieldArr[i];
				verifyField["checkStatus"] = "true";
				var fieldids = verifyField["fieldids"];
				for(var index = 0; index < fieldids.length; index++) {
					var verify = fieldids[index],
						fieldname = verify["fieldname"],
						detailtabletmp = verify["detailtable"],
						fieldvalue,
						rowIndex = verify["rowIndex"];
					
					var fieldhtmltype = verify["fieldhtmltype"];
					var getText = fieldhtmltype == 3 || fieldhtmltype == 4 || fieldhtmltype == 5;
					if(detailtabletmp != null && detailtabletmp != "") {
						var instance = mUtil.getDetailTableInstance(detailtabletmp, vm.id);
						
						var idname = (detailtabletmp+"_id_rowindex_"+rowIndex).toLowerCase();
						var fname = (detailtabletmp+"_"+fieldname+"_rowindex_"+rowIndex).toLowerCase();
						
						var dataId = instance.getRowFieldValueByKey(rowIndex, idname) || "";
						fieldvalue = instance.getRowFieldValueByKey(rowIndex, fname);
						if(getText) verify["fieldshowtext"] = instance.text(fname.match(/_dt.+?_(\S*)_rowindex_/)[1], parseInt(rowIndex)-1);
						
						verifyField["detaildataid"] = dataId;
					} else {
						verifyField["detaildataid"] = billid;
						if(getText) verify["fieldshowtext"] = $f(fieldname).text();
						fieldvalue = $f(fieldname).val();
					}
					verify["fieldvalue"] = fieldvalue;
				}
			}
		}
		
		function createVerifyField4Detail(verifyField, indexArray) {
			for(var i=0;i<indexArray.length;i++) {
				var rowIndex = indexArray[i];
				var verifyFieldTmp = {};
				for(var key in verifyField) {
					if("id"==key) {
						verifyFieldTmp[key] = verifyField[key]+"_"+i;
					} else if(key=="fieldids") {
						var fieldids = verifyField["fieldids"];
						var fieldidstmp = null ;
						for(var index = 0; index < fieldids.length; index++) {
							var verifyTmp = {};
							var verify = fieldids[index];
							var fieldid = verify["fieldid"];
							var detailtabletmp = verify["detailtable"];
							if(detailtabletmp != null && detailtabletmp != ""){
								fieldid = fieldid+"_"+(rowIndex - 1);
								verifyTmp["rowIndex"] = rowIndex;
							}
							
							for(var key1 in verify) {
								if(key1=="fieldid") {
									verifyTmp["fieldid"] = fieldid;
								} else {
									verifyTmp[key1] = verify[key1];
								}
							}
						
							if(fieldidstmp==null) {
								var jsonStrTmp = "["+JSON.stringify(verifyTmp)+"]";
								fieldidstmp = eval('('+jsonStrTmp+')');
							} else {
								fieldidstmp.push(verifyTmp)
							}
						}
						
						verifyFieldTmp["fieldids"] = fieldidstmp;
					} else {
						verifyFieldTmp[key] = verifyField[key];
					} 
				}
				if(veriryFieldArr==null) {
					var jsonStrTmp = "["+JSON.stringify(verifyFieldTmp)+"]";
					veriryFieldArr = eval('('+jsonStrTmp+')');
				} else {
					veriryFieldArr.push(verifyFieldTmp)
				}
			}
		}
		
		if(modeid != -1){//在表单管理模块时,拼装字段数据使用建模新接口,保留旧方法用于未关联模块表单
			getFieldValueInCubeMethod();
		}else{
			getFieldValue();
		}
		
		if(veriryFieldArr == null && verifyArr == {}) {
			successFn.call(window);
			return;
		}
		
		var jsonstr = modeid != -1 ? JSON.stringify(verifyArr) : encodeURI(JSON.stringify(veriryFieldArr));
		var paramData = {"verifys":jsonstr, "formId":formid, "billid":billid, "modeId":modeid};
		var actionUrl = mUtil.getActionUrl("service.FormComponent", {action: "verify"});
		var req = mUtil.ajax(actionUrl, paramData, function(result){
			var res = result.data;
			
			var fieldTipHtml_break ="";
			var fieldTipHtml_continue="";
			var hasBreak = false;
			var index_break = 1;
			var index_continue =1;
			var isSuccess = true;
			
			if(modeid != -1){//使用建模新接口验证返回处理
				var verifyErrors = res["verifyErrors"];
				if (verifyErrors && mUtil.isArray(verifyErrors)) {
					verifyErrors.map(function(verifyError){
						isSuccess = false;
						var operate = verifyError.operate,
							errors = verifyError.errors,
							isDetailSelfRepeat = verifyError.isDetailSelfRepeat,
							repeatIndex = verifyError.repeatIndex,
							detailName = verifyError.detailName;
						if (isDetailSelfRepeat) {
							if (operate == '0') {
								hasBreak = true;
								fieldTipHtml_break += index_break + "、" + detailName + "#THEROW#" + repeatIndex.map(function(d){return d+1}).join(",") + "#REPEATROW#" + "#REPEAT#" + '.<br />';
								index_break++;
							} else {
								fieldTipHtml_continue += index_continue + "、" + detailName + "#THEROW#" + repeatIndex.map(function(d){return d+1}).join(",") + "#REPEATROW#" + "#REPEAT#" + '.<br />';
								index_continue++;
							}
						} else {
							if (operate == '0') {
								hasBreak = true;
								fieldTipHtml_break += index_break + "、" + (errors.length > 1 ? "#VERIFICATION#" : "") + errors.join(",") + "#REPATED#" + '.<br />';
								index_break++;
							} else {
								fieldTipHtml_continue += index_continue + "、" + (errors.length > 1 ? "#VERIFICATION#" : "") + errors.join(",") + "#REPATED#" + '.<br />';
								index_continue++;
							}
						}
					});
				}
			}else{
				var verifyList = res["resultList"];
				for(var i = 0; res && i < verifyList.length; i++){
					var r_verifyid = verifyList[i]["verifyid"];
					var r_datacount = verifyList[i]["datacount"];
					var message = verifyList[i]["message"];
					if(r_datacount > 0){
						// 此处统一更改集合中的状态,提示啥的再后面统一做,代码剥离
						for(var j = 0; j < veriryFieldArr.length; j++){
							var verifyField = veriryFieldArr[j];
							var verifyid = verifyField["id"];
							if(r_verifyid == verifyid){
								verifyField["checkStatus"] = "false";
								verifyField["message"]=message;
							}
						}
					}
				}
				
				
				for(var i = 0; i<veriryFieldArr.length;i++) {
					var verifyField = veriryFieldArr[i];
					if(verifyField["checkStatus"] == "false"){
						isSuccess = false;
						var verifyid = verifyField["id"];
						var verifyOpreate = verifyField["operate"];
						
						var fieldTipHtml_temp = "";
						var message = verifyField["message"];
						if(message) {
							if(message == "ignore") {
								continue;
							}
							fieldTipHtml_temp ="、" + message;
							fieldTipHtml_temp+="<br/>"
						} else {
							fieldTipHtml_temp+="、#VERIFICATION#";
							var fieldids = verifyField["fieldids"];
							for(var index = 0; index < fieldids.length; index++) {
								var fieldobj = fieldids[index];
								var labelname = fieldobj["labelname"];
								var fieldvalue = fieldobj["fieldshowtext"] || fieldobj["fieldvalue"];
								fieldTipHtml_temp +="【"+ labelname+":\""+fieldvalue+"\"】,";
							}
							
							if(fieldTipHtml_temp.length > 0){
								fieldTipHtml_temp = fieldTipHtml_temp.substring(0,fieldTipHtml_temp.length-1);
							}
							fieldTipHtml_temp+="#REPATED#.<br/>"
						}
						if("0" == verifyOpreate) {
							hasBreak = true;
							fieldTipHtml_break+="&nbsp;&nbsp;&nbsp;&nbsp;"+index_break+fieldTipHtml_temp;
							index_break++;
						} else if("1" == verifyOpreate) {
							fieldTipHtml_continue+="&nbsp;&nbsp;&nbsp;&nbsp;"+index_continue+fieldTipHtml_temp;
							index_continue++;
						}
					}
				}
			}
			
			if(isSuccess){
				successFn.call(window);
			} else {
				var lables = {
					'383707':'您录入的数据不满足以下验证:',
					'388900':'请重新录入!',
					'388902':'是否继续保存?',
					'383781':'确认操作',
					'388903':'取消保存',
					'1256':'继续',
					'383704':'已重复.',
					'388904':'组合验证',
					'15323': "第",
					'18620': "行",
					'18082': "重复"
				};
				
				mUtil.getMultiLabel(lables,function(resLabels){
					var msg = "<div class=\"wev-repeat-tips\"><span>"+resLabels['383707']+"<br/>";
					if(hasBreak) {
						msg += fieldTipHtml_break;
						msg += resLabels['388900'] + "</span></div>";
						Mobile_NS.alert(msg.replace(/#REPATED#/g, resLabels['383704']).replace(/#VERIFICATION#/g, resLabels['388904']).replace(/#THEROW#/g, resLabels['15323']).replace(/#REPEATROW#/g, resLabels['18620']).replace(/#REPEAT#/g, resLabels['18082']));
						failFn.call(window);
					} else {
						msg += fieldTipHtml_continue;
						msg += resLabels['388902'] + "</span></div>";
						Mobile_NS.Confirm(msg.replace(/#REPATED#/g, resLabels['383704']).replace(/#VERIFICATION#/g, resLabels['388904']).replace(/#THEROW#/g, resLabels['15323']).replace(/#REPEATROW#/g, resLabels['18620']).replace(/#REPEAT#/g, resLabels['18082']), resLabels['383781'], [resLabels['388903'],function(){
							failFn.call(window);
						}],[ resLabels['1256'], function(){
							successFn.call(window);
						}]);
					}
				});
			}
		}, {type: "POST", dataType: "json", error: function () {
				Mobile_NS.alert(i18n.NETWORK_ERROR, function(){ failFn.call(window);});
            }});
		//设置15秒的超时时间,超过时限请求未发出则放弃该请求,提示网络状况
		setTimeout(function(){
			if(req.readyState < 2){
				req.abort();
			}
		}, 15000);
	}
	
	var formExtHelper = {
		formFieldRepeatVerify : function(instance, successFn, failFn){
			instance.getRepeatVerifyInfo(function(repeatVerifyFieldInfo){
				doFieldRepeatVerify.call(instance, repeatVerifyFieldInfo, successFn, failFn);
			});
		}
	};
	
	Mobile_NS.formFieldRepeatVerify = function(formid, successFn, failFn){
		var instance = mUtil.getInstance(formid);
		if(instance){
			formExtHelper.formFieldRepeatVerify(instance, successFn, failFn);
		}
	};
    
    return formExtHelper;
});