Merge branch 'dev' into hotfix/fix-sku-err-toast
This commit is contained in:
+14
-14
@@ -94,23 +94,23 @@ export default create({
|
||||
|
||||
// 根据省市县类型和对应的`code`获取对应列表
|
||||
getList(type, code) {
|
||||
if (!this.listValid) {
|
||||
return [];
|
||||
}
|
||||
let result = [];
|
||||
|
||||
const { areaList } = this;
|
||||
const list =
|
||||
type === 'province'
|
||||
? areaList.province_list
|
||||
: type === 'city' ? areaList.city_list : areaList.county_list;
|
||||
if (this.listValid && (type === 'province' || code)) {
|
||||
const { areaList } = this;
|
||||
const list =
|
||||
type === 'province'
|
||||
? areaList.province_list
|
||||
: type === 'city' ? areaList.city_list : areaList.county_list;
|
||||
|
||||
let result = Object.keys(list).map(code => ({
|
||||
code,
|
||||
name: list[code]
|
||||
}));
|
||||
result = Object.keys(list).map(code => ({
|
||||
code,
|
||||
name: list[code]
|
||||
}));
|
||||
|
||||
if (type !== 'province' && code) {
|
||||
result = result.filter(item => item.code.indexOf(code) === 0);
|
||||
if (type !== 'province' && code) {
|
||||
result = result.filter(item => item.code.indexOf(code) === 0);
|
||||
}
|
||||
}
|
||||
|
||||
result.unshift({
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
:color="type === 'default' ? 'black' : 'white'"
|
||||
/>
|
||||
<span class="van-button__text">
|
||||
<slot />
|
||||
<slot>{{ text }}</slot>
|
||||
</span>
|
||||
</component>
|
||||
</template>
|
||||
@@ -35,6 +35,7 @@ export default create({
|
||||
name: 'van-button',
|
||||
|
||||
props: {
|
||||
text: String,
|
||||
block: Boolean,
|
||||
loading: Boolean,
|
||||
disabled: Boolean,
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<cell-group class="van-coupon-list__top" v-if="showExchangeBar">
|
||||
<field
|
||||
class="van-coupon-list__filed van-hairline--surround"
|
||||
v-model="exchangeCode"
|
||||
v-model="currentCode"
|
||||
:placeholder="inputPlaceholder || $t('placeholder')"
|
||||
:maxlength="20"
|
||||
/>
|
||||
@@ -11,11 +11,11 @@
|
||||
size="small"
|
||||
type="danger"
|
||||
class="van-coupon-list__exchange"
|
||||
:disabled="exchangeButtonDisabled || !exchangeCode.length"
|
||||
:text="exchangeButtonText || $t('exchange')"
|
||||
:loading="exchangeButtonLoading"
|
||||
:disabled="buttonDisabled"
|
||||
@click="onClickExchangeButton"
|
||||
>
|
||||
{{ exchangeButtonText || $t('exchange') }}
|
||||
</van-button>
|
||||
/>
|
||||
</cell-group>
|
||||
<div class="van-coupon-list__list" :class="{ 'van-coupon-list--with-exchange': showExchangeBar }" ref="list">
|
||||
<coupon-item
|
||||
@@ -24,7 +24,7 @@
|
||||
:key="item.id || item.name"
|
||||
:data="item"
|
||||
:chosen="index === chosenCoupon"
|
||||
@click.native="onClickCoupon(index)"
|
||||
@click.native="$emit('change', index)"
|
||||
/>
|
||||
<h3 v-if="disabledCoupons.length">{{ disabledListTitle || $t('disabled') }}</h3>
|
||||
<coupon-item
|
||||
@@ -40,11 +40,10 @@
|
||||
</div>
|
||||
<div
|
||||
v-show="showCloseButton"
|
||||
v-text="closeButtonText || $t('close')"
|
||||
class="van-coupon-list__close van-hairline--top"
|
||||
@click="onClickNotUse"
|
||||
>
|
||||
{{ closeButtonText || $t('close') }}
|
||||
</div>
|
||||
@click="$emit('change', -1)"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -69,11 +68,22 @@ export default create({
|
||||
CouponItem
|
||||
},
|
||||
|
||||
model: {
|
||||
prop: 'code'
|
||||
},
|
||||
|
||||
props: {
|
||||
code: String,
|
||||
closeButtonText: String,
|
||||
inputPlaceholder: String,
|
||||
disabledListTitle: String,
|
||||
exchangeButtonText: String,
|
||||
exchangeButtonLoading: Boolean,
|
||||
exchangeButtonDisabled: Boolean,
|
||||
exchangeMinLength: {
|
||||
type: Number,
|
||||
default: 1
|
||||
},
|
||||
chosenCoupon: {
|
||||
type: Number,
|
||||
default: -1
|
||||
@@ -86,10 +96,6 @@ export default create({
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
exchangeButtonDisabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
displayedCouponIndex: {
|
||||
type: Number,
|
||||
default: -1
|
||||
@@ -104,16 +110,34 @@ export default create({
|
||||
}
|
||||
},
|
||||
|
||||
watch: {
|
||||
displayedCouponIndex(val) {
|
||||
this.scrollToShowCoupon(val);
|
||||
data() {
|
||||
return {
|
||||
currentCode: this.code || ''
|
||||
};
|
||||
},
|
||||
|
||||
computed: {
|
||||
buttonDisabled() {
|
||||
return (
|
||||
!this.exchangeButtonLoading &&
|
||||
(this.exchangeButtonDisabled ||
|
||||
this.currentCode.length < this.exchangeMinLength)
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
exchangeCode: ''
|
||||
};
|
||||
watch: {
|
||||
code(code) {
|
||||
this.currentCode = code;
|
||||
},
|
||||
|
||||
currentCode(code) {
|
||||
this.$emit('input', code);
|
||||
},
|
||||
|
||||
displayedCouponIndex(val) {
|
||||
this.scrollToShowCoupon(val);
|
||||
}
|
||||
},
|
||||
|
||||
mounted() {
|
||||
@@ -121,17 +145,16 @@ export default create({
|
||||
},
|
||||
|
||||
methods: {
|
||||
onClickNotUse() {
|
||||
this.$emit('change', -1);
|
||||
},
|
||||
onClickCoupon(index) {
|
||||
this.$emit('change', index);
|
||||
},
|
||||
onClickExchangeButton() {
|
||||
this.$emit('exchange', this.exchangeCode);
|
||||
this.exchangeCode = '';
|
||||
this.$emit('exchange', this.currentCode);
|
||||
|
||||
// auto clear currentCode when not use v-model
|
||||
if (!this.code) {
|
||||
this.currentCode = '';
|
||||
}
|
||||
},
|
||||
// 滚动到特定优惠券的位置
|
||||
|
||||
// scroll to show specific coupon
|
||||
scrollToShowCoupon(index) {
|
||||
if (index === -1) {
|
||||
return;
|
||||
|
||||
@@ -50,14 +50,11 @@ export default create({
|
||||
callback: Function,
|
||||
confirmButtonText: String,
|
||||
cancelButtonText: String,
|
||||
showCancelButton: Boolean,
|
||||
showConfirmButton: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
showCancelButton: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
overlay: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
|
||||
+1
-1
@@ -62,7 +62,7 @@ import TreeSelect from './tree-select';
|
||||
import Uploader from './uploader';
|
||||
import Waterfall from './waterfall';
|
||||
|
||||
const version = '0.12.4';
|
||||
const version = '0.12.5';
|
||||
const components = [
|
||||
Actionsheet,
|
||||
AddressEdit,
|
||||
|
||||
@@ -3,7 +3,12 @@
|
||||
<div class="van-sku-container">
|
||||
<div class="van-sku-layout">
|
||||
<!-- sku-header -->
|
||||
<slot name="sku-header" :skuEventBus="skuEventBus" :selectedSku="selectedSku" :selectedSkuComb="selectedSkuComb">
|
||||
<slot
|
||||
name="sku-header"
|
||||
:sku-event-bus="skuEventBus"
|
||||
:selected-sku="selectedSku"
|
||||
:selected-sku-comb="selectedSkuComb"
|
||||
>
|
||||
<sku-header
|
||||
:sku-event-bus="skuEventBus"
|
||||
:selected-sku="selectedSku"
|
||||
@@ -14,9 +19,9 @@
|
||||
</slot>
|
||||
<div class="van-sku-body" :style="bodyStyle">
|
||||
<!-- sku-body-top -->
|
||||
<slot name="sku-body-top" :selectedSku="selectedSku" :skuEventBus="skuEventBus" />
|
||||
<slot name="sku-body-top" :selected-sku="selectedSku" :sku-event-bus="skuEventBus" />
|
||||
<!-- sku-group -->
|
||||
<slot name="sku-group" :selectedSku="selectedSku" :skuEventBus="skuEventBus">
|
||||
<slot name="sku-group" :selected-sku="selectedSku" :sku-event-bus="skuEventBus">
|
||||
<div v-if="hasSku" class="van-sku-group-container van-hairline--bottom">
|
||||
<div
|
||||
v-for="(skuTreeItem, index) in skuTree"
|
||||
@@ -40,9 +45,15 @@
|
||||
</div>
|
||||
</slot>
|
||||
<!-- extra-sku-group -->
|
||||
<slot name="extra-sku-group" :skuEventBus="skuEventBus"/>
|
||||
<slot name="extra-sku-group" :sku-event-bus="skuEventBus"/>
|
||||
<!-- sku-stepper -->
|
||||
<slot name="sku-stepper" :skuEventBus="skuEventBus" :selectedSku="selectedSku" :selectedSkuComb="selectedSkuComb" :selectedNum="selectedNum">
|
||||
<slot
|
||||
name="sku-stepper"
|
||||
:sku-event-bus="skuEventBus"
|
||||
:selected-sku="selectedSku"
|
||||
:selected-sku-comb="selectedSkuComb"
|
||||
:selected-num="selectedNum"
|
||||
>
|
||||
<sku-stepper
|
||||
ref="skuStepper"
|
||||
:sku-event-bus="skuEventBus"
|
||||
@@ -68,7 +79,7 @@
|
||||
</slot>
|
||||
</div>
|
||||
<!-- sku-actions -->
|
||||
<slot name="sku-actions" :skuEventBus="skuEventBus">
|
||||
<slot name="sku-actions" :sku-event-bus="skuEventBus">
|
||||
<sku-actions
|
||||
:sku-event-bus="skuEventBus"
|
||||
:buy-text="buyText"
|
||||
@@ -83,21 +94,21 @@
|
||||
<script>
|
||||
/* eslint-disable camelcase */
|
||||
import Vue from 'vue';
|
||||
import Popup from '../../popup';
|
||||
import Toast from '../../toast';
|
||||
import SkuHeader from '../components/SkuHeader';
|
||||
import SkuRow from '../components/SkuRow';
|
||||
import SkuRowItem from '../components/SkuRowItem';
|
||||
import SkuStepper from '../components/SkuStepper';
|
||||
import SkuMessages from '../components/SkuMessages';
|
||||
import SkuActions from '../components/SkuActions';
|
||||
import Popup from '../popup';
|
||||
import Toast from '../toast';
|
||||
import SkuHeader from './components/SkuHeader';
|
||||
import SkuRow from './components/SkuRow';
|
||||
import SkuRowItem from './components/SkuRowItem';
|
||||
import SkuStepper from './components/SkuStepper';
|
||||
import SkuMessages from './components/SkuMessages';
|
||||
import SkuActions from './components/SkuActions';
|
||||
import {
|
||||
isAllSelected,
|
||||
getSkuComb,
|
||||
getSelectedSkuValues
|
||||
} from '../utils/skuHelper';
|
||||
import { LIMIT_TYPE } from '../constants';
|
||||
import { create } from '../../utils';
|
||||
} from './utils/skuHelper';
|
||||
import { LIMIT_TYPE } from './constants';
|
||||
import { create } from '../utils';
|
||||
|
||||
const { QUOTA_LIMIT } = LIMIT_TYPE;
|
||||
|
||||
@@ -115,13 +126,20 @@ export default create({
|
||||
},
|
||||
|
||||
props: {
|
||||
sku: Object,
|
||||
goods: Object,
|
||||
value: Boolean,
|
||||
buyText: String,
|
||||
goodsId: [Number, String],
|
||||
stepperTitle: String,
|
||||
hideStock: Boolean,
|
||||
resetStepperOnHide: Boolean,
|
||||
resetSelectedSkuOnHide: Boolean,
|
||||
disableStepperInput: Boolean,
|
||||
initialSku: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
sku: Object,
|
||||
quota: {
|
||||
type: Number,
|
||||
default: 0
|
||||
@@ -130,25 +148,18 @@ export default create({
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
hideStock: Boolean,
|
||||
showAddCartBtn: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
buyText: String,
|
||||
stepperTitle: String,
|
||||
bodyOffsetTop: {
|
||||
type: Number,
|
||||
default: 200
|
||||
},
|
||||
resetStepperOnHide: Boolean,
|
||||
resetSelectedSkuOnHide: Boolean,
|
||||
disableStepperInput: Boolean,
|
||||
messagePlaceholderMap: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
value: Boolean
|
||||
}
|
||||
},
|
||||
|
||||
data() {
|
||||
@@ -205,19 +216,19 @@ export default create({
|
||||
maxHeight: maxHeight + 'px'
|
||||
};
|
||||
},
|
||||
|
||||
isSkuCombSelected() {
|
||||
return isAllSelected(this.sku.tree, this.selectedSku);
|
||||
},
|
||||
// sku数据不存在时不渲染模板
|
||||
|
||||
isSkuEmpty() {
|
||||
for (var key in this.sku) {
|
||||
if (Object.prototype.hasOwnProperty.call(this.sku, key)) return false;
|
||||
}
|
||||
return true;
|
||||
return Object.keys(this.sku).length === 0;
|
||||
},
|
||||
|
||||
hasSku() {
|
||||
return !this.sku.none_sku;
|
||||
},
|
||||
|
||||
selectedSkuComb() {
|
||||
if (!this.hasSku) {
|
||||
return {
|
||||
@@ -230,13 +241,14 @@ export default create({
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
||||
skuTree() {
|
||||
return this.sku.tree || [];
|
||||
}
|
||||
},
|
||||
|
||||
created() {
|
||||
var skuEventBus = new Vue();
|
||||
const skuEventBus = new Vue();
|
||||
this.skuEventBus = skuEventBus;
|
||||
|
||||
skuEventBus.$on('sku:close', this.handleCloseClicked);
|
||||
@@ -263,19 +275,23 @@ export default create({
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
getSkuMessages() {
|
||||
return this.$refs.skuMessages ? this.$refs.skuMessages.getMessages() : {};
|
||||
},
|
||||
|
||||
getSkuCartMessages() {
|
||||
return this.$refs.skuMessages
|
||||
? this.$refs.skuMessages.getCartMessages()
|
||||
: {};
|
||||
},
|
||||
|
||||
validateSkuMessages() {
|
||||
return this.$refs.skuMessages
|
||||
? this.$refs.skuMessages.validateMessages()
|
||||
: '';
|
||||
},
|
||||
|
||||
validateSku() {
|
||||
if (this.selectedNum === 0) {
|
||||
return this.$t('unavailable');
|
||||
@@ -289,9 +305,11 @@ export default create({
|
||||
return this.$t('spec');
|
||||
}
|
||||
},
|
||||
|
||||
handleCloseClicked() {
|
||||
this.show = false;
|
||||
},
|
||||
|
||||
handleSkuSelected(skuValue) {
|
||||
// 点击已选中的sku时则取消选中
|
||||
this.selectedSku =
|
||||
@@ -305,9 +323,11 @@ export default create({
|
||||
selectedSkuComb: this.selectedSkuComb
|
||||
});
|
||||
},
|
||||
|
||||
handleNumChange(num) {
|
||||
this.selectedNum = num;
|
||||
},
|
||||
|
||||
handleOverLimit({ action, limitType, quota, quotaUsed }) {
|
||||
if (action === 'minus') {
|
||||
Toast(this.$t('least'));
|
||||
@@ -321,12 +341,15 @@ export default create({
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
handleAddCartClicked() {
|
||||
this.handleBuyOrAddCart('add-cart');
|
||||
},
|
||||
|
||||
handleBuyClicked() {
|
||||
this.handleBuyOrAddCart('buy-clicked');
|
||||
},
|
||||
|
||||
handleBuyOrAddCart(type) {
|
||||
const error = this.validateSku();
|
||||
if (error) {
|
||||
@@ -1,7 +1,17 @@
|
||||
<template>
|
||||
<div class="van-sku-actions">
|
||||
<van-button v-if="showAddCartBtn" bottom-action @click="onAddCartClicked">{{ $t('cart') }}</van-button>
|
||||
<van-button type="primary" bottom-action @click="onBuyClicked">{{ buyText || $t('buy') }}</van-button>
|
||||
<van-button
|
||||
v-if="showAddCartBtn"
|
||||
bottom-action
|
||||
:text="$t('cart')"
|
||||
@click="skuEventBus.$emit('sku:addCart')"
|
||||
/>
|
||||
<van-button
|
||||
type="primary"
|
||||
bottom-action
|
||||
:text="buyText || $t('buy')"
|
||||
@click="skuEventBus.$emit('sku:buy')"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -20,15 +30,6 @@ export default create({
|
||||
buyText: String,
|
||||
skuEventBus: Object,
|
||||
showAddCartBtn: Boolean
|
||||
},
|
||||
|
||||
methods: {
|
||||
onAddCartClicked() {
|
||||
this.skuEventBus.$emit('sku:addCart');
|
||||
},
|
||||
onBuyClicked() {
|
||||
this.skuEventBus.$emit('sku:buy');
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<template>
|
||||
<div class="van-sku-header van-hairline--bottom">
|
||||
<div class="van-sku-header__img-wrap">
|
||||
<img class="van-sku__goods-img" :src="goodsImg">
|
||||
<img class="van-sku__goods-img" :src="goodsImg" >
|
||||
</div>
|
||||
<div class="van-sku-header__goods-info">
|
||||
<div class="van-sku__goods-name">{{ goods.title }}</div>
|
||||
<div class="van-sku__goods-price"><span class="van-sku__price-symbol">¥</span><span class="van-sku__price-num">{{ price }}</span></div>
|
||||
<span class="van-sku__close-icon" @click="onCloseClicked" />
|
||||
<span class="van-sku__close-icon" @click="skuEventBus.$emit('sku:close')" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -26,9 +26,6 @@ export default create({
|
||||
},
|
||||
|
||||
computed: {
|
||||
skuTree() {
|
||||
return this.sku.tree;
|
||||
},
|
||||
goodsImg() {
|
||||
const s1Id = this.selectedSku.s1;
|
||||
const skuImg = this.getSkuImg(s1Id);
|
||||
@@ -45,14 +42,11 @@ export default create({
|
||||
},
|
||||
|
||||
methods: {
|
||||
onCloseClicked() {
|
||||
this.skuEventBus.$emit('sku:close');
|
||||
},
|
||||
getSkuImg(id) {
|
||||
if (!id) return;
|
||||
|
||||
// 目前skuImg都挂载在skuTree中s1那类sku上
|
||||
const treeItem = this.skuTree.filter(treeItem => treeItem.k_s === 's1')[0] || {};
|
||||
const treeItem = this.sku.tree.filter(treeItem => treeItem.k_s === 's1')[0] || {};
|
||||
|
||||
if (!treeItem.v) {
|
||||
return;
|
||||
|
||||
@@ -1,26 +1,14 @@
|
||||
<template>
|
||||
<cell-group class="van-sku-messages">
|
||||
<template v-for="(message, index) in internalMessages">
|
||||
<template v-if="message.type === 'image'" />
|
||||
<field
|
||||
v-else-if="message.multiple == '1'"
|
||||
:key="`${goodsId}-${index}`"
|
||||
:required="message.required == '1'"
|
||||
:label="message.name"
|
||||
:placeholder="getPlaceholder('textarea')"
|
||||
type="textarea"
|
||||
v-model="messageValues[index]"
|
||||
/>
|
||||
<field
|
||||
v-else
|
||||
:key="`${goodsId}-${index}`"
|
||||
:required="message.required == '1'"
|
||||
:label="message.name"
|
||||
:placeholder="getPlaceholder(message.type)"
|
||||
:type="getType(message)"
|
||||
v-model="messageValues[index]"
|
||||
/>
|
||||
</template>
|
||||
<field
|
||||
v-for="(message, index) in internalMessages"
|
||||
v-model="messageValues[index]"
|
||||
:key="`${goodsId}-${index}`"
|
||||
:required="message.required == '1'"
|
||||
:label="message.name"
|
||||
:placeholder="getPlaceholder(message)"
|
||||
:type="getType(message)"
|
||||
/>
|
||||
</cell-group>
|
||||
</template>
|
||||
|
||||
@@ -47,26 +35,23 @@ export default create({
|
||||
|
||||
computed: {
|
||||
internalMessages() {
|
||||
if (Object.prototype.toString.call(this.messages) === '[object Array]') {
|
||||
return this.messages;
|
||||
}
|
||||
return [];
|
||||
return Array.isArray(this.messages) ? this.messages.filter(message => message.type !== 'image') : [];
|
||||
},
|
||||
|
||||
messageValues() {
|
||||
const messageValues = [];
|
||||
this.internalMessages.forEach((message, index) => {
|
||||
messageValues[index] = '';
|
||||
});
|
||||
|
||||
return messageValues;
|
||||
return this.internalMessages.map(() => '');
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
getType({ type, datetime }) {
|
||||
if (type === 'id_no') return 'text';
|
||||
return datetime > 0 ? 'datetime-local' : type;
|
||||
getType(message) {
|
||||
if (+message.multiple === 1) {
|
||||
return 'textarea';
|
||||
}
|
||||
if (message.type === 'id_no') {
|
||||
return 'text';
|
||||
}
|
||||
return message.datetime > 0 ? 'datetime-local' : message.type;
|
||||
},
|
||||
|
||||
getMessages() {
|
||||
@@ -96,8 +81,9 @@ export default create({
|
||||
return messages;
|
||||
},
|
||||
|
||||
getPlaceholder(key) {
|
||||
return this.messagePlaceholderMap[key] || this.$t(`placeholder.${key}`);
|
||||
getPlaceholder(message) {
|
||||
const type = +message.multiple === 1 ? 'textarea' : message.type;
|
||||
return this.messagePlaceholderMap[type] || this.$t(`placeholder.${type}`);
|
||||
},
|
||||
|
||||
validateMessages() {
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
<template>
|
||||
<span
|
||||
v-if="isChoosable"
|
||||
@click="onSkuSelected"
|
||||
class="van-sku-row__item"
|
||||
:class="{ 'van-sku-row__item--active': isChoosed }">
|
||||
:class="{
|
||||
'van-sku-row__item--active': isChoosed,
|
||||
'van-sku-row__item--disabled': !isChoosable
|
||||
}"
|
||||
@click="onSkuSelected"
|
||||
>
|
||||
{{ skuValue.name }}
|
||||
</span>
|
||||
<span v-else class="van-sku-row__item van-sku-row__item--disabled">{{ skuValue.name }}</span>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
@@ -25,6 +27,7 @@ export default {
|
||||
isChoosed() {
|
||||
return this.skuValue.id === this.selectedSku[this.skuKeyStr];
|
||||
},
|
||||
|
||||
isChoosable() {
|
||||
const matchedSku = Object.assign({}, this.selectedSku, {
|
||||
[this.skuKeyStr]: this.skuValue.id
|
||||
@@ -44,7 +47,12 @@ export default {
|
||||
|
||||
methods: {
|
||||
onSkuSelected() {
|
||||
this.skuEventBus.$emit('sku:select', Object.assign({}, this.skuValue, { skuKeyStr: this.skuKeyStr }));
|
||||
if (this.isChoosable) {
|
||||
this.skuEventBus.$emit('sku:select', {
|
||||
...this.skuValue,
|
||||
skuKeyStr: this.skuKeyStr
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
:min="1"
|
||||
:max="stepperLimit"
|
||||
:disable-input="disableStepperInput"
|
||||
@overlimit="handleOverLimit"
|
||||
@overlimit="onOverLimit"
|
||||
/>
|
||||
</div>
|
||||
<div v-if="!hideStock" class="van-sku__stock">{{ $t('remain', stock) }}</div>
|
||||
@@ -39,14 +39,8 @@ export default create({
|
||||
stepperTitle: String,
|
||||
quota: Number,
|
||||
quotaUsed: Number,
|
||||
hideStock: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
disableStepperInput: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
hideStock: Boolean,
|
||||
disableStepperInput: Boolean
|
||||
},
|
||||
|
||||
data() {
|
||||
@@ -97,7 +91,8 @@ export default create({
|
||||
setCurrentNum(num) {
|
||||
this.currentNum = num;
|
||||
},
|
||||
handleOverLimit(action) {
|
||||
|
||||
onOverLimit(action) {
|
||||
this.skuEventBus.$emit('sku:overLimit', {
|
||||
action,
|
||||
limitType: this.limitType,
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import Sku from './Sku';
|
||||
import SkuActions from './components/SkuActions';
|
||||
import SkuHeader from './components/SkuHeader';
|
||||
import SkuMessages from './components/SkuMessages';
|
||||
@@ -5,14 +6,13 @@ import SkuStepper from './components/SkuStepper';
|
||||
import SkuRow from './components/SkuRow';
|
||||
import SkuRowItem from './components/SkuRowItem';
|
||||
import skuHelper from './utils/skuHelper';
|
||||
import SkuContainer from './containers/SkuContainer';
|
||||
|
||||
SkuContainer.SkuActions = SkuActions;
|
||||
SkuContainer.SkuHeader = SkuHeader;
|
||||
SkuContainer.SkuMessages = SkuMessages;
|
||||
SkuContainer.SkuStepper = SkuStepper;
|
||||
SkuContainer.SkuRow = SkuRow;
|
||||
SkuContainer.SkuRowItem = SkuRowItem;
|
||||
SkuContainer.skuHelper = skuHelper;
|
||||
Sku.SkuActions = SkuActions;
|
||||
Sku.SkuHeader = SkuHeader;
|
||||
Sku.SkuMessages = SkuMessages;
|
||||
Sku.SkuStepper = SkuStepper;
|
||||
Sku.SkuRow = SkuRow;
|
||||
Sku.SkuRowItem = SkuRowItem;
|
||||
Sku.skuHelper = skuHelper;
|
||||
|
||||
export default SkuContainer;
|
||||
export default Sku;
|
||||
|
||||
Binary file not shown.
Generated
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "vant-css",
|
||||
"version": "0.12.4",
|
||||
"version": "0.12.5",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "vant-css",
|
||||
"version": "0.12.4",
|
||||
"version": "0.12.5",
|
||||
"description": "vant css.",
|
||||
"main": "lib/index.css",
|
||||
"style": "lib/index.css",
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
&::before {
|
||||
content: '*';
|
||||
position: absolute;
|
||||
left: -7px;
|
||||
left: 7px;
|
||||
font-size: 14px;
|
||||
color: $red;
|
||||
}
|
||||
|
||||
@@ -2,5 +2,5 @@
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-family: 'vant-icon';
|
||||
src: url('./vant-icon-120564.ttf') format('truetype');
|
||||
src: url('./vant-icon-dc7d92.ttf') format('truetype');
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-family: 'vant-icon';
|
||||
src: url('https://b.yzcdn.cn/zanui/icon/vant-icon-120564.ttf') format('truetype');
|
||||
src: url('https://b.yzcdn.cn/zanui/icon/vant-icon-dc7d92.ttf') format('truetype');
|
||||
}
|
||||
|
||||
.van-icon {
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
font-size: 12px;
|
||||
line-height: 1.2;
|
||||
border-radius: 5px;
|
||||
word-break: break-all;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
|
||||
BIN
Binary file not shown.
Reference in New Issue
Block a user