mirror of
https://github.com/youzan/vant.git
synced 2026-05-06 01:00:26 +08:00
bd609e1df0
* perf: add TruthyProp util * chore: rename * chore: upd
Coupon
Intro
Used for redemption and selection of coupons.
Install
Register component globally via app.use, refer to Component Registration for more registration ways.
import { createApp } from 'vue';
import { CouponCell, CouponList } from 'vant';
const app = createApp();
app.use(CouponCell);
app.use(CouponList);
Usage
Basic Usage
<!-- Coupon Cell -->
<van-coupon-cell
:coupons="state.coupons"
:chosen-coupon="state.chosenCoupon"
@click="state.showList = true"
/>
<!-- Coupon List -->
<van-popup
v-model="state.showList"
round
position="bottom"
style="height: 90%; padding-top: 4px;"
>
<van-coupon-list
:coupons="state.coupons"
:chosen-coupon="state.chosenCoupon"
:disabled-coupons="disabledCoupons"
@change="onChange"
@exchange="onExchange"
/>
</van-popup>
import { reactive } from 'vue';
const coupon = {
available: 1,
originCondition: 0,
reason: '',
value: 150,
name: 'Coupon name',
startAt: 1489104000,
endAt: 1514592000,
valueDesc: '1.5',
unitDesc: '元',
};
export default {
setup() {
const state = reactive({
coupons: [coupon],
showList: false,
chosenCoupon: -1,
});
const onChange = (index) => {
state.showList = false;
state.chosenCoupon = index;
};
const onExchange = (code) => {
state.coupons.push(coupon);
};
return {
state,
onChange,
onExchange,
disabledCoupons: [coupon],
};
},
};
API
CouponCell Props
| Attribute | Description | Type | Default |
|---|---|---|---|
| title | Cell title | string | Coupon |
| chosen-coupon | Index of chosen coupon | number | string | -1 |
| coupons | Coupon list | Coupon[] | [] |
| editable | Cell editable | boolean | true |
| border | Whether to show innner border | boolean | true |
| currency | Currency symbol | string | ¥ |
CouponList Props
| Attribute | Description | Type | Default |
|---|---|---|---|
| v-model | Current exchange code | string | - |
| chosen-coupon | Index of chosen coupon | number | -1 |
| coupons | Coupon list | Coupon[] | [] |
| disabled-coupons | Disabled coupon list | Coupon[] | [] |
| enabled-title | Title of coupon list | string | Available |
| disabled-title | Title of disabled coupon list | string | Unavailable |
| exchange-button-text | Exchange button text | string | Exchange |
| exchange-button-loading | Whether to show loading in exchange button | boolean | false |
| exchange-button-disabled | Whether to disable exchange button | boolean | false |
| exchange-min-length | Min length to enable exchange button | number | 1 |
| displayed-coupon-index | Index of displayed coupon | number | - |
| close-button-text | Close button text | string | Close |
| input-placeholder | Input placeholder | string | Coupon code |
| currency | Currency symbol | string | ¥ |
| empty-image | Placeholder image when list is empty | string | https://img.yzcdn.cn/vant/coupon-empty.png |
| show-count | Whether to show coupon count in tab title | boolean | true |
CouponList Events
| Event | Description | Arguments |
|---|---|---|
| change | Emitted when chosen coupon changed | index: index of chosen coupon |
| exchange | Emitted when exchanging coupon | code: exchange code |
Data Structure of Coupon
| Key | Description | Type |
|---|---|---|
| id | Id | string |
| name | Name | string |
| condition | Condition | string |
| startAt | Start time (Timestmap, unit second) | number |
| endAt | End time (Timestmap, unit second) | number |
| description | Description | string |
| reason | Unavailable reason | string |
| value | Value | number |
| valueDesc | Value Text | string |
| unitDesc | Unit Text | string |
Less Variables
How to use: Custom Theme.
| Name | Default Value | Description |
|---|---|---|
| @coupon-margin | 0 @padding-sm @padding-sm |
- |
| @coupon-content-height | 84px |
- |
| @coupon-content-padding | 14px 0 |
- |
| @coupon-background-color | @white |
- |
| @coupon-active-background-color | @active-color |
- |
| @coupon-border-radius | @border-radius-lg |
- |
| @coupon-box-shadow | 0 0 4px rgba(0, 0, 0, 0.1) |
- |
| @coupon-head-width | 96px |
- |
| @coupon-amount-color | @red |
- |
| @coupon-amount-font-size | 30px |
- |
| @coupon-currency-font-size | 40% |
- |
| @coupon-name-font-size | @font-size-md |
- |
| @coupon-disabled-text-color | @gray-6 |
- |
| @coupon-description-padding | @padding-xs @padding-md |
- |
| @coupon-description-border-color | @border-color |
- |
| @coupon-corner-checkbox-icon-color | @red |
- |
| @coupon-list-background-color | @background-color |
- |
| @coupon-list-field-padding | 5px 0 5px @padding-md |
- |
| @coupon-list-exchange-button-height | 32px |
- |
| @coupon-list-close-button-height | 40px |
- |
| @coupon-list-empty-image-size | 200px |
- |
| @coupon-list-empty-tip-color | @gray-6 |
- |
| @coupon-list-empty-tip-font-size | @font-size-md |
- |
| @coupon-list-empty-tip-line-height | @line-height-md |
- |
| @coupon-cell-selected-text-color | @text-color |
- |