UNPKG

fd-gulp-convert-encoding

Version:

convert file to assigned charset

244 lines (201 loc) 8.1 kB
/** * purchasingList view交互逻辑 */ define('detail.modules.purchasingList.SkuSelector', ['jQuery', 'Class', 'detail.lib.specOperator.SpecOperator', 'detail.lib.amountControl.AmountControl'], function($, Class, SpecOperator, AmountControl) { return Class({ init: function(view, context, validator) { this.onEvent = $.os.supportsTouch ? 'tap' : 'click'; this.config = context; this.isSKUOffer = this.config.isSKUOffer; if (this.isSKUOffer === 'false'){ return; } this.root = view; this.div = $('dl.unit-d-sku-selector', view); this.objOrder = $('div.obj-order', this.root); this.isRangePriceSku = this.config.isRangePriceSku; this.specOperators = {}; this.specGroups = []; this.targetData = {}; this.totalAmount = 0; this.newSkuMap = {}; this.purchasingSkuMap = {}; this.callback = function(){}; this.validator = validator; this.hasPaired = false; this.nsSkuProps = (this.config.skuProps.length === 1) ? [1] : [1, 1]; this._reformSkuMap(this.config.skuMap); this._initSpec(); }, _reformSkuMap: function(skuMap){ var extendSkuMap = $.extend(true, {}, skuMap), newSkuMap = {}; $.each(extendSkuMap, function(k, v){ newSkuMap[v.specId] = v; newSkuMap[v.specId].name = k; }); this.newSkuMap = newSkuMap; }, _initSpec: function(){ var $spec = $('dd.spec', this.div), that = this; $spec.each(function(index){ var $unitOperator = $('div.unit-d-spec-operator', $(this)); that.specOperators[index] = {}; that.specGroups.push(index); $unitOperator.each(function(i){ var specOperator = {}, elm = $(this), name = elm.data('unit-config').name; specOperator = new SpecOperator( elm, index); specOperator.setSkuData(function(name, group){ return that._fetchSkuData(name, group); }); specOperator.setCallback(function(name, erase){ that._chooseSpec(name, this, erase); }); that.specOperators[specOperator.getGroup()][name] = specOperator; }); }); this.amountControl = new AmountControl(this.objOrder, this.config, this.validator); this.amountControl.setCallback(function(amount, validated){ if (!validated){ return; } if (!that.isEmptyObject(that.targetData)){ that.newSkuMap[that.targetData.specId].amount = amount * 1; that.purchasingSkuMap[that.targetData.specId] = that.newSkuMap[that.targetData.specId]; } that.callback.call(that, that.targetData, amount * 1, that.purchasingSkuMap); }); this.amountControl.setBeforeValidator(function(){ var flag = true, arr = []; if (!that.hasPaired){ $.each(that.nsSkuProps, function(k, v){ if (v === 1){ arr.push(that.config.skuProps[k].prop); } }); Wing.navigator.tooltip('请先选择' + arr.join('、')); flag = false; } return flag; }); //单个的时候默认选中 $spec.each(function(k){ var $op = $('div.unit-d-spec-operator', $(this)), name; if ($op.length === 1){ that.specOperators[k][$op.data('unit-config').name].setSelected(); } }); }, _chooseSpec: function(name, current, erase){ var data = current.getSkuData(), group = current.getGroup(), prop = [], that = this; if (this.specGroups.length === 2){ var index = (group === 0) ? 1 : 0; this._deployStock(data, index, erase, true); } else if (this.specGroups.length === 1){ var index = group; this._deployStock(data, index, erase, false); } // 没选择的是1 this.nsSkuProps[group] = erase ? 1 : 0; if (!this.hasPaired){ this.targetData = {}; this._setStock(that.config.canBookedAmount * 1); this.amountControl.resetValue(); // this.targetData.discountPrice && this.amountControl.setPriceValue(this.targetData.discountPrice); } }, _deployStock: function(data, index, erase, is2Lat){ this.hasPaired = false; for (var skuName in data){ var targetSpec = this.specOperators[index][skuName], specData = targetSpec.getSkuData(), curAmount; if (targetSpec.getSelected() && !erase){ this.targetData = data[skuName]; curAmount = this.newSkuMap[this.targetData.specId].amount; this._setStock(this.targetData.canBookCount ? this.targetData.canBookCount * 1 : 0); this.hasPaired = true; //触发一下采购数量的值,更新校验器等,更新总数等 this.amountControl.resetValue(); curAmount && this.amountControl.setAmountValue(curAmount); this.amountControl.attachValue(); // this.targetData.discountPrice && this.amountControl.setPriceValue(this.targetData.discountPrice); } if (is2Lat){ for (var specName in specData){ if (data[skuName].specId === specData[specName].specId){ targetSpec.setOutStock(false); if (!data[skuName].canBookCount || data[skuName].canBookCount * 1 <= 0){ targetSpec.setOutStock(true); } if (erase){ targetSpec.setOutStock(false); } } } } } }, _fetchSkuData: function(name, group){ /*作用是将数据挂在spec上,比如一个二维sku,白色(L,XL),红色(L,XL)那么白色的spec就会挂上它第二维相关所有的数据,并且用第二维的名称做key * 比如 {"L":{xxxx},"XL":{xxxx}} */ var skuMap = this.config.skuMap, skuProp = this.config.skuProps, resultSku = {}, sku = {}, key; if (!skuProp || !skuMap){ return; } if (skuProp.length === 1){ resultSku = skuMap; } else if (skuProp.length === 2){ var index = (group === 0) ? 1 : 0; for (var j = 0; j < skuProp[index].value.length; j++){ if (group === 0){ key = name + '&gt;' + skuProp[index].value[j].name; } else { key = skuProp[index].value[j].name + '&gt;' + name; } sku = skuMap[key]; if (!sku){ sku = {}; sku.specId = ""; sku.canBookCount = 0; sku.discountPrice = ""; sku.price = ""; } resultSku[skuProp[index].value[j].name] = sku; } } return resultSku; }, isEmptyObject: function(obj){ for ( var name in obj ) { return false; } return true; }, _setStock: function(maxNum){ var $stock = $('div.stock span.value', this.root); this.config.max = maxNum; $stock.text(this.config.max); this.validator.setMax(maxNum); }, getAmountControl: function(){ return this.amountControl; }, setCallback: function(func){ if (typeof(func) === "function"){ this.callback = func; } } }); });