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