| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 | 
							- // Utils
 
- import { createNamespace } from '../utils'; // Components
 
- import Tab from '../tab';
 
- import Tabs from '../tabs';
 
- import Field from '../field';
 
- import Button from '../button';
 
- import Coupon from '../coupon';
 
- var _createNamespace = createNamespace('coupon-list'),
 
-     createComponent = _createNamespace[0],
 
-     bem = _createNamespace[1],
 
-     t = _createNamespace[2];
 
- var EMPTY_IMAGE = 'https://img01.yzcdn.cn/vant/coupon-empty.png';
 
- export default createComponent({
 
-   model: {
 
-     prop: 'code'
 
-   },
 
-   props: {
 
-     code: String,
 
-     closeButtonText: String,
 
-     inputPlaceholder: String,
 
-     enabledTitle: String,
 
-     disabledTitle: String,
 
-     exchangeButtonText: String,
 
-     exchangeButtonLoading: Boolean,
 
-     exchangeButtonDisabled: Boolean,
 
-     exchangeMinLength: {
 
-       type: Number,
 
-       default: 1
 
-     },
 
-     chosenCoupon: {
 
-       type: Number,
 
-       default: -1
 
-     },
 
-     coupons: {
 
-       type: Array,
 
-       default: function _default() {
 
-         return [];
 
-       }
 
-     },
 
-     disabledCoupons: {
 
-       type: Array,
 
-       default: function _default() {
 
-         return [];
 
-       }
 
-     },
 
-     displayedCouponIndex: {
 
-       type: Number,
 
-       default: -1
 
-     },
 
-     showExchangeBar: {
 
-       type: Boolean,
 
-       default: true
 
-     },
 
-     showCloseButton: {
 
-       type: Boolean,
 
-       default: true
 
-     },
 
-     showCount: {
 
-       type: Boolean,
 
-       default: true
 
-     },
 
-     currency: {
 
-       type: String,
 
-       default: '¥'
 
-     },
 
-     emptyImage: {
 
-       type: String,
 
-       default: EMPTY_IMAGE
 
-     }
 
-   },
 
-   data: function data() {
 
-     return {
 
-       tab: 0,
 
-       winHeight: window.innerHeight,
 
-       currentCode: this.code || ''
 
-     };
 
-   },
 
-   computed: {
 
-     buttonDisabled: function buttonDisabled() {
 
-       return !this.exchangeButtonLoading && (this.exchangeButtonDisabled || !this.currentCode || this.currentCode.length < this.exchangeMinLength);
 
-     },
 
-     listStyle: function listStyle() {
 
-       return {
 
-         height: this.winHeight - (this.showExchangeBar ? 140 : 94) + 'px'
 
-       };
 
-     }
 
-   },
 
-   watch: {
 
-     code: function code(_code) {
 
-       this.currentCode = _code;
 
-     },
 
-     currentCode: function currentCode(code) {
 
-       this.$emit('input', code);
 
-     },
 
-     displayedCouponIndex: 'scrollToShowCoupon'
 
-   },
 
-   mounted: function mounted() {
 
-     this.scrollToShowCoupon(this.displayedCouponIndex);
 
-   },
 
-   methods: {
 
-     onClickExchangeButton: function onClickExchangeButton() {
 
-       this.$emit('exchange', this.currentCode); // auto clear currentCode when not use vModel
 
-       if (!this.code) {
 
-         this.currentCode = '';
 
-       }
 
-     },
 
-     // scroll to show specific coupon
 
-     scrollToShowCoupon: function scrollToShowCoupon(index) {
 
-       var _this = this;
 
-       if (index === -1) {
 
-         return;
 
-       }
 
-       this.$nextTick(function () {
 
-         var _this$$refs = _this.$refs,
 
-             card = _this$$refs.card,
 
-             list = _this$$refs.list;
 
-         /* istanbul ignore next */
 
-         if (list && card && card[index]) {
 
-           list.scrollTop = card[index].$el.offsetTop - 100;
 
-         }
 
-       });
 
-     },
 
-     genEmpty: function genEmpty() {
 
-       var h = this.$createElement;
 
-       return h("div", {
 
-         "class": bem('empty')
 
-       }, [h("img", {
 
-         "attrs": {
 
-           "src": this.emptyImage
 
-         }
 
-       }), h("p", [t('empty')])]);
 
-     },
 
-     genExchangeButton: function genExchangeButton() {
 
-       var h = this.$createElement;
 
-       return h(Button, {
 
-         "attrs": {
 
-           "plain": true,
 
-           "type": "danger",
 
-           "text": this.exchangeButtonText || t('exchange'),
 
-           "loading": this.exchangeButtonLoading,
 
-           "disabled": this.buttonDisabled
 
-         },
 
-         "class": bem('exchange'),
 
-         "on": {
 
-           "click": this.onClickExchangeButton
 
-         }
 
-       });
 
-     }
 
-   },
 
-   render: function render() {
 
-     var _this2 = this;
 
-     var h = arguments[0];
 
-     var coupons = this.coupons,
 
-         disabledCoupons = this.disabledCoupons;
 
-     var count = this.showCount ? " (" + coupons.length + ")" : '';
 
-     var title = (this.enabledTitle || t('enable')) + count;
 
-     var disabledCount = this.showCount ? " (" + disabledCoupons.length + ")" : '';
 
-     var disabledTitle = (this.disabledTitle || t('disabled')) + disabledCount;
 
-     var ExchangeBar = this.showExchangeBar && h("div", {
 
-       "class": bem('exchange-bar')
 
-     }, [h(Field, {
 
-       "attrs": {
 
-         "clearable": true,
 
-         "border": false,
 
-         "placeholder": this.inputPlaceholder || t('placeholder'),
 
-         "maxlength": "20"
 
-       },
 
-       "class": bem('field'),
 
-       "model": {
 
-         value: _this2.currentCode,
 
-         callback: function callback($$v) {
 
-           _this2.currentCode = $$v;
 
-         }
 
-       }
 
-     }), this.genExchangeButton()]);
 
-     var onChange = function onChange(index) {
 
-       return function () {
 
-         return _this2.$emit('change', index);
 
-       };
 
-     };
 
-     var CouponTab = h(Tab, {
 
-       "attrs": {
 
-         "title": title
 
-       }
 
-     }, [h("div", {
 
-       "class": bem('list', {
 
-         'with-bottom': this.showCloseButton
 
-       }),
 
-       "style": this.listStyle
 
-     }, [coupons.map(function (coupon, index) {
 
-       return h(Coupon, {
 
-         "ref": "card",
 
-         "key": coupon.id,
 
-         "attrs": {
 
-           "coupon": coupon,
 
-           "currency": _this2.currency,
 
-           "chosen": index === _this2.chosenCoupon
 
-         },
 
-         "nativeOn": {
 
-           "click": onChange(index)
 
-         }
 
-       });
 
-     }), !coupons.length && this.genEmpty(), this.slots('list-footer')])]);
 
-     var DisabledCouponTab = h(Tab, {
 
-       "attrs": {
 
-         "title": disabledTitle
 
-       }
 
-     }, [h("div", {
 
-       "class": bem('list', {
 
-         'with-bottom': this.showCloseButton
 
-       }),
 
-       "style": this.listStyle
 
-     }, [disabledCoupons.map(function (coupon) {
 
-       return h(Coupon, {
 
-         "attrs": {
 
-           "disabled": true,
 
-           "coupon": coupon,
 
-           "currency": _this2.currency
 
-         },
 
-         "key": coupon.id
 
-       });
 
-     }), !disabledCoupons.length && this.genEmpty(), this.slots('disabled-list-footer')])]);
 
-     return h("div", {
 
-       "class": bem()
 
-     }, [ExchangeBar, h(Tabs, {
 
-       "class": bem('tab'),
 
-       "attrs": {
 
-         "border": false
 
-       },
 
-       "model": {
 
-         value: _this2.tab,
 
-         callback: function callback($$v) {
 
-           _this2.tab = $$v;
 
-         }
 
-       }
 
-     }, [CouponTab, DisabledCouponTab]), h("div", {
 
-       "class": bem('bottom')
 
-     }, [h(Button, {
 
-       "directives": [{
 
-         name: "show",
 
-         value: this.showCloseButton
 
-       }],
 
-       "attrs": {
 
-         "round": true,
 
-         "type": "danger",
 
-         "block": true,
 
-         "text": this.closeButtonText || t('close')
 
-       },
 
-       "class": bem('close'),
 
-       "on": {
 
-         "click": onChange(-1)
 
-       }
 
-     })])]);
 
-   }
 
- });
 
 
  |