first
This commit is contained in:
193
node_modules/vant/lib/sku/components/SkuStepper.js
generated
vendored
Normal file
193
node_modules/vant/lib/sku/components/SkuStepper.js
generated
vendored
Normal file
@ -0,0 +1,193 @@
|
||||
"use strict";
|
||||
|
||||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
||||
|
||||
exports.__esModule = true;
|
||||
exports.default = void 0;
|
||||
|
||||
var _utils = require("../../utils");
|
||||
|
||||
var _constants = require("../constants");
|
||||
|
||||
var _stepper = _interopRequireDefault(require("../../stepper"));
|
||||
|
||||
var namespace = (0, _utils.createNamespace)('sku-stepper');
|
||||
var createComponent = namespace[0];
|
||||
var t = namespace[2];
|
||||
var QUOTA_LIMIT = _constants.LIMIT_TYPE.QUOTA_LIMIT,
|
||||
STOCK_LIMIT = _constants.LIMIT_TYPE.STOCK_LIMIT;
|
||||
|
||||
var _default = createComponent({
|
||||
props: {
|
||||
stock: Number,
|
||||
skuEventBus: Object,
|
||||
skuStockNum: Number,
|
||||
selectedNum: Number,
|
||||
stepperTitle: String,
|
||||
disableStepperInput: Boolean,
|
||||
customStepperConfig: Object,
|
||||
hideQuotaText: Boolean,
|
||||
quota: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
quotaUsed: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
startSaleNum: {
|
||||
type: Number,
|
||||
default: 1
|
||||
}
|
||||
},
|
||||
data: function data() {
|
||||
return {
|
||||
currentNum: this.selectedNum,
|
||||
// 购买限制类型: 限购/库存
|
||||
limitType: STOCK_LIMIT
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
currentNum: function currentNum(num) {
|
||||
var intValue = parseInt(num, 10);
|
||||
|
||||
if (intValue >= this.stepperMinLimit && intValue <= this.stepperLimit) {
|
||||
this.skuEventBus.$emit('sku:numChange', intValue);
|
||||
}
|
||||
},
|
||||
stepperLimit: function stepperLimit(limit) {
|
||||
if (limit < this.currentNum && this.stepperMinLimit <= limit) {
|
||||
this.currentNum = limit;
|
||||
}
|
||||
|
||||
this.checkState(this.stepperMinLimit, limit);
|
||||
},
|
||||
stepperMinLimit: function stepperMinLimit(start) {
|
||||
if (start > this.currentNum || start > this.stepperLimit) {
|
||||
this.currentNum = start;
|
||||
}
|
||||
|
||||
this.checkState(start, this.stepperLimit);
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
stepperLimit: function stepperLimit() {
|
||||
var quotaLimit = this.quota - this.quotaUsed;
|
||||
var limit; // 无限购时直接取库存,有限购时取限购数和库存数中小的那个
|
||||
|
||||
if (this.quota > 0 && quotaLimit <= this.stock) {
|
||||
// 修正负的limit
|
||||
limit = quotaLimit < 0 ? 0 : quotaLimit;
|
||||
this.limitType = QUOTA_LIMIT;
|
||||
} else {
|
||||
limit = this.stock;
|
||||
this.limitType = STOCK_LIMIT;
|
||||
}
|
||||
|
||||
return limit;
|
||||
},
|
||||
stepperMinLimit: function stepperMinLimit() {
|
||||
return this.startSaleNum < 1 ? 1 : this.startSaleNum;
|
||||
},
|
||||
quotaText: function quotaText() {
|
||||
var _this$customStepperCo = this.customStepperConfig,
|
||||
quotaText = _this$customStepperCo.quotaText,
|
||||
hideQuotaText = _this$customStepperCo.hideQuotaText;
|
||||
if (hideQuotaText) return '';
|
||||
var text = '';
|
||||
|
||||
if (quotaText) {
|
||||
text = quotaText;
|
||||
} else {
|
||||
var textArr = [];
|
||||
|
||||
if (this.startSaleNum > 1) {
|
||||
textArr.push(t('quotaStart', this.startSaleNum));
|
||||
}
|
||||
|
||||
if (this.quota > 0) {
|
||||
textArr.push(t('quotaLimit', this.quota));
|
||||
}
|
||||
|
||||
text = textArr.join(t('comma'));
|
||||
}
|
||||
|
||||
return text;
|
||||
}
|
||||
},
|
||||
created: function created() {
|
||||
this.checkState(this.stepperMinLimit, this.stepperLimit);
|
||||
},
|
||||
methods: {
|
||||
setCurrentNum: function setCurrentNum(num) {
|
||||
this.currentNum = num;
|
||||
this.checkState(this.stepperMinLimit, this.stepperLimit);
|
||||
},
|
||||
onOverLimit: function onOverLimit(action) {
|
||||
this.skuEventBus.$emit('sku:overLimit', {
|
||||
action: action,
|
||||
limitType: this.limitType,
|
||||
quota: this.quota,
|
||||
quotaUsed: this.quotaUsed,
|
||||
startSaleNum: this.startSaleNum
|
||||
});
|
||||
},
|
||||
onChange: function onChange(currentValue) {
|
||||
var intValue = parseInt(currentValue, 10);
|
||||
var handleStepperChange = this.customStepperConfig.handleStepperChange;
|
||||
handleStepperChange && handleStepperChange(intValue);
|
||||
this.$emit('change', intValue);
|
||||
},
|
||||
checkState: function checkState(min, max) {
|
||||
// 如果选择小于起售,则强制变为起售
|
||||
if (this.currentNum < min || min > max) {
|
||||
this.currentNum = min;
|
||||
} else if (this.currentNum > max) {
|
||||
// 当前选择数量大于最大可选时,需要重置已选数量
|
||||
this.currentNum = max;
|
||||
}
|
||||
|
||||
this.skuEventBus.$emit('sku:stepperState', {
|
||||
valid: min <= max,
|
||||
min: min,
|
||||
max: max,
|
||||
limitType: this.limitType,
|
||||
quota: this.quota,
|
||||
quotaUsed: this.quotaUsed,
|
||||
startSaleNum: this.startSaleNum
|
||||
});
|
||||
}
|
||||
},
|
||||
render: function render() {
|
||||
var _this = this;
|
||||
|
||||
var h = arguments[0];
|
||||
return h("div", {
|
||||
"class": "van-sku-stepper-stock"
|
||||
}, [h("div", {
|
||||
"class": "van-sku__stepper-title"
|
||||
}, [this.stepperTitle || t('num')]), h(_stepper.default, {
|
||||
"attrs": {
|
||||
"integer": true,
|
||||
"min": this.stepperMinLimit,
|
||||
"max": this.stepperLimit,
|
||||
"disableInput": this.disableStepperInput
|
||||
},
|
||||
"class": "van-sku__stepper",
|
||||
"on": {
|
||||
"overlimit": this.onOverLimit,
|
||||
"change": this.onChange
|
||||
},
|
||||
"model": {
|
||||
value: _this.currentNum,
|
||||
callback: function callback($$v) {
|
||||
_this.currentNum = $$v;
|
||||
}
|
||||
}
|
||||
}), !this.hideQuotaText && this.quotaText && h("span", {
|
||||
"class": "van-sku__stepper-quota"
|
||||
}, ["(", this.quotaText, ")"])]);
|
||||
}
|
||||
});
|
||||
|
||||
exports.default = _default;
|
Reference in New Issue
Block a user