fd-gulp-convert-encoding
Version:
convert file to assigned charset
244 lines (201 loc) • 8.1 kB
JavaScript
/**
* 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 + '>' + skuProp[index].value[j].name;
} else {
key = skuProp[index].value[j].name + '>' + 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;
}
}
});
});