| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- <template>
- <demo-section>
- <!-- 基础用法 -->
- <demo-block :title="$t('basicUsage')">
- <div class="sku-container">
- <van-sku
- v-model="showBase"
- :sku="skuData.sku"
- :goods="skuData.goods_info"
- :goods-id="skuData.goods_id"
- :hide-stock="skuData.sku.hide_stock"
- :quota="skuData.quota"
- :quota-used="skuData.quota_used"
- reset-stepper-on-hide
- reset-selected-sku-on-hide
- disable-stepper-input
- :close-on-click-overlay="closeOnClickOverlay"
- :message-config="messageConfig"
- :custom-sku-validator="customSkuValidator"
- @buy-clicked="onBuyClicked"
- @add-cart="onAddCartClicked"
- />
- <van-button
- block
- type="primary"
- @click="showBase = true"
- >
- {{ $t('basicUsage') }}
- </van-button>
- </div>
- </demo-block>
- <!-- 自定义步进器 -->
- <demo-block :title="$t('title2')">
- <div class="sku-container">
- <van-sku
- hide-quota-text
- v-model="showStepper"
- :sku="skuData.sku"
- :goods="skuData.goods_info"
- :goods-id="skuData.goods_id"
- :hide-stock="skuData.sku.hide_stock"
- :quota="skuData.quota"
- :quota-used="skuData.quota_used"
- :custom-stepper-config="customStepperConfig"
- :message-config="messageConfig"
- @buy-clicked="onBuyClicked"
- @add-cart="onAddCartClicked"
- />
- <van-button
- block
- type="primary"
- @click="showStepper = true"
- >
- {{ $t('title2') }}
- </van-button>
- </div>
- </demo-block>
- <!-- 隐藏售罄sku -->
- <demo-block :title="$t('hideSoldoutSku')">
- <div class="sku-container">
- <van-sku
- hide-quota-text
- v-model="showSoldout"
- :sku="skuData.sku"
- :goods="skuData.goods_info"
- :goods-id="skuData.goods_id"
- :hide-stock="skuData.sku.hide_stock"
- :quota="skuData.quota"
- :quota-used="skuData.quota_used"
- :custom-stepper-config="customStepperConfig"
- :message-config="messageConfig"
- :show-soldout-sku="false"
- @buy-clicked="onBuyClicked"
- @add-cart="onAddCartClicked"
- />
- <van-button
- block
- type="primary"
- @click="showSoldout = true"
- >
- {{ $t('hideSoldoutSku') }}
- </van-button>
- </div>
- </demo-block>
- <demo-block :title="$t('advancedUsage')">
- <div class="sku-container">
- <van-sku
- v-model="showCustom"
- :stepper-title="$t('stepperTitle')"
- :sku="skuData.sku"
- :goods="skuData.goods_info"
- :goods-id="skuData.goods_id"
- :hide-stock="skuData.sku.hide_stock"
- :quota="skuData.quota"
- :quota-used="skuData.quota_used"
- show-add-cart-btn
- reset-stepper-on-hide
- :initial-sku="initialSku"
- :message-config="messageConfig"
- @buy-clicked="onBuyClicked"
- @add-cart="onAddCartClicked"
- >
- <template
- slot="sku-header-price"
- slot-scope="props"
- >
- <div class="van-sku__goods-price">
- <span class="van-sku__price-symbol">¥</span><span class="van-sku__price-num">{{ props.price }}</span>
- </div>
- </template>
- <template
- slot="sku-actions"
- slot-scope="props"
- >
- <div class="van-sku-actions">
- <van-button
- bottom-action
- @click="onPointClicked"
- >
- {{ $t('button1') }}
- </van-button>
- <van-button
- type="primary"
- bottom-action
- @click="props.skuEventBus.$emit('sku:buy')"
- >
- {{ $t('button2') }}
- </van-button>
- </div>
- </template>
- </van-sku>
- <van-button
- block
- type="primary"
- @click="showCustom = true"
- >
- {{ $t('advancedUsage') }}
- </van-button>
- </div>
- </demo-block>
- </demo-section>
- </template>
- <script>
- import skuData from './data';
- import { LIMIT_TYPE } from '../constants';
- export default {
- i18n: {
- 'zh-CN': {
- title2: '自定义步进器',
- hideSoldoutSku: '隐藏售罄规格',
- stepperTitle: '我要买',
- button1: '积分兑换',
- button2: '买买买'
- },
- 'en-US': {
- title2: 'Custom Stepper Related Config',
- hideSoldoutSku: 'Hide Soldout Sku',
- stepperTitle: 'Stepper title',
- button1: 'Button',
- button2: 'Button'
- }
- },
- data() {
- this.skuData = skuData;
- return {
- showBase: false,
- showCustom: false,
- showStepper: false,
- showSoldout: false,
- closeOnClickOverlay: true,
- initialSku: {
- s1: '30349',
- s2: '1193',
- selectedNum: 3
- },
- customSkuValidator: () => '请选择xxx',
- customStepperConfig: {
- quotaText: '单次限购100件',
- stockFormatter: (stock) => `剩余${stock}件`,
- handleOverLimit: (data) => {
- const { action, limitType, quota } = data;
- if (action === 'minus') {
- this.$toast('至少选择一件商品');
- } else if (action === 'plus') {
- if (limitType === LIMIT_TYPE.QUOTA_LIMIT) {
- this.$toast(`限购${quota}件`);
- } else {
- this.$toast('库存不够了');
- }
- }
- }
- },
- messageConfig: {
- uploadImg: (file, img) => new Promise(resolve => {
- setTimeout(() => resolve(img), 1000);
- }),
- uploadMaxSize: 3
- }
- };
- },
- methods: {
- onBuyClicked(data) {
- this.$toast('buy:' + JSON.stringify(data));
- },
- onAddCartClicked(data) {
- this.$toast('add cart:' + JSON.stringify(data));
- },
- onPointClicked() {
- this.$toast('积分兑换');
- }
- }
- };
- </script>
- <style lang="less">
- .demo-sku {
- .sku-container {
- padding: 0 15px;
- }
- }
- </style>
|