FScores_wev8.js 4.87 KB
define(['mUtil', "Component", "Form"], function (mUtil, Component, Form) {
	var FScores = function (options) {
		var _scores = {};
		var $wevField, $field, textArr, $label;

		Component.super(this, options);

		this.type = "FScores";
		this.tpl = this.type + "_html";
		this.css = this.type + "_css";
        this.dataload = true;

		
		var DEFAULT_ICON = "/mobilemode/mobile/images/plugin/favor-fill.png",
			DEFAULT_ICON2 = "/mobilemode/mobile/images/plugin/favor.png";
		var vm = this.viewModel = {
			form: "",
			field: {
				label: "",//显示名称
				name: "",//对应字段
				size: 5,// 评分个数
				text: "",//评分名称
				value: "",//评分
				defaultValue: ""
			},
			required: false,
			readonly: false,
			needWrap: false,
			icons: {
				icon1: DEFAULT_ICON,
				icon2: DEFAULT_ICON2
			},
			detailtable: {
				isA: false	//是否是明细表字段
			}
		};
		
		this.dbValueHasSet = false; //是否已设置表单数据值,调用this.setValueByDB()方法后修改此状态
		
		this.beforeMount = function () {
			/*
			if(vm.icons.icon1 === "/mobilemode/images/favor_fill.png"){
				vm.icons.icon1 = DEFAULT_ICON;
			}
			if(vm.icons.icon2 === "/mobilemode/images/favor.png"){
				vm.icons.icon2 = DEFAULT_ICON2;
			}*/
			
			//主表或明细新增,并且值为空 但默认值不为空时,使用默认值代替赋值
            Form.utils.setDefaultValue(this.pageid, vm);
			
			var index = vm.field.value - 1;

			textArr = vm.field.text.split(",");

			if (index >= 0 && index < textArr.length) {
				vm.starlabel = textArr[index];
			}

			var activeClass = [];

			for (var i = 0, size = vm.field.size; i < size; i++) {
				if (i == index) {
					activeClass.push("active");
					vm.scoreClass = "wev-comp-score-fill";
				} else {
					activeClass.push("");
				}
			}
			vm.activeClass = activeClass;

			if (vm.icons) {
				var cssStyle = "<style type=\"text/css\">" +
					"#NMEC_" + this.id + " .wev-comp-score > b:before{background-image: url(" + vm.icons.icon2 + ");}" +
					"#NMEC_" + this.id + " .wev-comp-score > b:after{background-image: url(" + vm.icons.icon1 + ");}" +
					"</style>";
				$(".page-content", this.$container).append(cssStyle);
			}

		};

		this.mounted = function () {
			var that = this, $abbr = this.$el;

			$wevField = $abbr.find(".wev-field");
			$field = $("input[name='fieldname_" + vm.field.name + "']", $abbr);
			$label = $(".wev-comp-score label", $abbr);

			if (!vm.readonly) {
				$(".wev-comp-score > b", $abbr).click(function () {
					_scores.changeValue($(this).index());
				});
			}
			
			if(vm.field.needParseSqlValue){
			    //解析默认值,默认值sql
	            return Form.utils.parseDefaultSqlValue(vm.field.defaultValue, this.pageid, function(result){
	                vm.field.value = result;
	                //设置默认值
	                that.setValue(vm.field.value, true);
	            });
			}
		};

		this.getData = function () {
			return mUtil.parseJSON("fieldname_" + vm.field.name, $field.val());
		};

		this.reset = function () {
			if (!vm.readonly) {
				var num = vm.field.value;

				if (num <= 0 || isNaN(num)) {
					$(".wev-comp-score", this.$el).removeClass("wev-comp-score-fill");
					$label.html("");
					$field.val("").trigger("input").trigger("change");
				} else {
					_scores.changeValue(num - 1);
				}
			}
			$wevField.removeClass("wev-required-remind");
		};

		this.checkRequired = function () {
			var required = vm.required && !$field.val();
			var fieldLabel = vm.field.label || mUtil.getLabel(131418, "星级评分");

			$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 $label.text();
		};

		this.setValueByDB = function(value){
			this.dbValueHasSet = true;
			if(value || !vm.field.value) {
                vm.field.value = value;
                this.setValue(value, true);
            }
		};
		
		this.setValue = function(value, initialize){
		    var num = Number(value);
            if (!isNaN(num) && num > 0) {
                _scores.changeValue(num - 1, initialize);
            }
		};
		
		_scores.changeValue = function (_index, initialize) {
			var _scorecomp = $(".wev-comp-score > b", this.$el).eq(_index);

			_scorecomp.siblings("b.active").removeClass("active");
			_scorecomp.addClass("active");
			_scorecomp.parent().addClass("wev-comp-score-fill");

			var starlabel = "";
			if (_index < textArr.length) starlabel = textArr[_index];
			$label.html(starlabel);

			$field.val(_index + 1).trigger("input").trigger("change");
            initialize && this.dbValueHasSet && mUtil.trigger('dataload', this.pageid, this.id);
		};

		_scores.changeValue = _scores.changeValue.bind(this);
	};

	return Component.init(FScores);
});