"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;