FLbs_wev8.js 7.22 KB
define(['mUtil', "Component"],function(mUtil, Component) {
	var FLbs = function(options) {
		var _lbs = {}, $comp, $wevField, $field, $fieldaddr, $entry, $fieldtext;
		
		Component.super(this, options);	
		
		this.type = "FLbs";
		this.tpl = this.type + "_html";
		this.css = this.type + "_css";
		
		var splitChar = "||||";
		
		var vm = this.viewModel = {
			form : "",
			field : {
				label : "所在位置",//显示名称
				name : "", //对应字段
				address : "",//对应地址中文字段
				value : ""//对应字段value
			},
			datatype : "",//数据保存类型
			poi : {
				postype : 1,//定位类型
				radius : 500,//poi半径
				num : 10,//热点个数
				btntext : ""//按钮名称
			},
			limit : {
				enabled: false,	//定位限制 是否开启
				radius: 1000, //半径 单位米
				tip: "当前位置超出限制范围",
				lng: "", //经度, 如121.522443
				lat: "",	 //纬度, 如 31.082311
				coordinateType: 2  //坐标类型  1:高德,腾讯地图类的坐标系。2:百度地图类的坐标系。3:gps类的坐标系
			},
			isShowCurrLocation : true,//显示当前位置
			required : false,
			readonly : false
		};
		
		this.dbValueHasSet = false; //是否已设置表单数据值,调用this.setValueByDB()方法后修改此状态
		
		this.beforeMount = function(){
			if(vm.field.value){
				vm.hasvalue = "wev-flbs-showtext";
				if(!vm.readonly){
					vm.delbtn = "wev-flbs-clear-btn";
				}
			}
			var limitPoint = vm.limit.point;
			if(limitPoint && limitPoint.indexOf(",") != -1){
				var limitPArr = limitPoint.split(",");
				vm.limit.lng = limitPArr[0];
				vm.limit.lat = limitPArr[1];
			}
			if(vm.poi.postype == 1) vm.poi.num = -1;//在postype=1时,设置周围热点不显示
		};
		
		this.mounted = function () {
			$comp = this.$el.children(".wev-comp-" + this.type);
			$wevField = this.$el.find(".wev-field");
			$field = $("input[name='fieldname_" + vm.field.name + "']", $comp);
			$fieldaddr = $("input[name='fieldname_" + vm.field.address + "']", $comp);
			$entry = $(".wev-flbs-entry", $comp);
			$fieldtext = $(".wev-flbs-detail", $comp);

			var lbsvalue = vm.field.value;
			var that = this;

			if (!vm.readonly) {
				$(".wev-flbs-location", $comp).on("click", function () {
					that.getPosition(that.pageid);
				});

				$(".wev-flbs-content", $comp).on("click", function () {
					Mobile_NS.openMap($field.val());
				});

				$(".wev-clear-btn", $comp).on("click", function (e) {
					that.clear();
					e.stopPropagation();
				});
			}
			
			if (vm.isShowCurrLocation && !$p("billid")) {//获取当前位置
                var $fieldLabel = $field.siblings(".wev-flbs-location");
                mUtil.getLabel(4084, "正在获取",function(msg){
                    $fieldLabel.html(msg);
                });
				Mobile_NS.getCurrentPosition(function (result) {
					if (!result){
						mUtil.getLabel(5304, "获取定位信息失败",function(msg){
							Mobile_NS.alert(msg);
	    	            });
                        $fieldLabel.html(vm.field.label);
						return ;
					} 

					var status = result.status, gpsstr;
					
					if (status == "1") {
						gpsstr = result.lng + "," + result.lat;
						if(vm.limit.enabled && vm.limit.lng && vm.limit.lat){
							var limitPoint = new BMap.Point(vm.limit.lng, vm.limit.lat);
							require(["mapHelper"], function (mapHelper) {
								mapHelper.convertPoint(limitPoint, vm.limit.coordinateType, function(limitTransedPoint){
									vm.limit.lng = limitTransedPoint.lng;
									vm.limit.lat = limitTransedPoint.lat;
									vm.limit.coordinateType = 2;
									var currPoint = new BMap.Point(result.lng, result.lat);
									var b_map = new BMap.Map();
									var distance = b_map.getDistance(limitTransedPoint, currPoint).toFixed(0);
									if(distance > vm.limit.radius){
										Mobile_NS.alert(vm.limit.tip);
                                        $fieldLabel.html(vm.field.label);
                                    }else{
										that.setPosition(gpsstr, result.addr);
                                        $fieldLabel.html(vm.field.label);
                                    }
								});
							});
						}else{
							that.setPosition(gpsstr, result.addr);
                            $fieldLabel.html(vm.field.label);
                        }
					} else {
						Mobile_NS.alert(result.errMsg);
                        $fieldLabel.html(vm.field.label);
                    }
				});
			}
		};
		
		this.getData = function () {
			var data = mUtil.parseJSON("fieldname_" + vm.field.name, $field.val());

			if (vm.datatype == "3") {
				data["fieldname_" + vm.field.address] = $fieldaddr.val();
			}
			
			return data;
		};
		
		this.reset = function () {//表单重置vm中内容
			$wevField.removeClass("wev-required-remind");

			if (vm.readonly) return;

			this.setValue(vm.field.value);
		};
		
		this.checkRequired = function () {
			var required = vm.required && !$field.val();
			var fieldLabel = vm.field.label || mUtil.getLabel(128155, "LBS");

			$wevField.toggleClass("wev-required-remind", required);
			return required && fieldLabel;
		};
		
		this.setRequired = function (required) {
			vm.required = required;
			$wevField.toggleClass("wev-field-required", required);
			!required && $wevField.removeClass("wev-required-remind");
		};
		
		this.text = function () {
			return $fieldtext.text();
		};
		
		this.getFieldNameOfDB = function(){
			if (vm.datatype == "3") {
				return vm.field.name + splitChar + vm.field.address;
			}
			return vm.field.name;
		};
		
		this.setValueByDB = function(v){
			this.dbValueHasSet = true;
			vm.field.value = v;
			this.setValue(v);
		};
		
		this.setValue = function(v){
			var showText = "";
			if(v.indexOf(splitChar) != -1){
				var vArr = v.split(splitChar);
				var gpsstr = vArr[0];
				var addrstr = vArr[1];
				if (vm.datatype == "1") {
					$field.val(gpsstr);
				} else if (vm.datatype == "2") {
					$field.val(addrstr);
				} else if (vm.datatype == "3") {
					$field.val(gpsstr);
					$fieldaddr.val(addrstr);
				}
				fillText(addrstr); 
			}else{
				$field.val(v);
				if(v && !(/.*[\u4e00-\u9fa5]+.*$/).test(v)){	//坐标
					require(["mapHelper"], function (mapHelper) {
						mapHelper.convertToAddress(v, function(addstr){
							fillText(addstr);
						});
					});
				}else{
					fillText(v);
				}
			}
			this.dbValueHasSet &&  mUtil.trigger('dataload', this.pageid, this.id);
			function fillText(text){
				$fieldtext.html(text);
				var isEmptyVal = (text == "");
				$entry.toggleClass("wev-flbs-showtext", !isEmptyVal);
				if (!isEmptyVal && !vm.readonly) {
					$(".wev-clear-btn", $comp).addClass("wev-flbs-clear-btn");
				}
			}
		};
		
		this.setPosition = function (gpsstr, addstr) {
			this.setValue(gpsstr + splitChar + addstr);
		};
		
		this.getPosition = function (pageid) {
			var that = this;
			var _this = $(".wev-flbs-location", $comp);

			var poi = vm.poi;
			
			Mobile_NS.openLBSWin({
				posType: poi.postype,
				btnText: poi.btntext,
				poiRadius: poi.radius,
				numPois: poi.num,
				limit: vm.limit,
				success: function (gpsstr, address) {//LBSWin回调
					that.setPosition(gpsstr, address);

					vm.backscript && mUtil.eval(vm.backscript, pageid);
				}
			});
		};
		
		this.clear = function () {
			this.setPosition("", "");
		};
		
    };

    return Component.init(FLbs);
});