{"version":3,"sources":["components/coupons/Input/index.js","components/coupons/RedeemBar/index.js","components/coupons/Coupon/index.js","components/coupons/index.js"],"names":["Input","clearInput","_this","props","onChange","_this$props","this","type","placeholder","react_default","a","createElement","className","classnames","value","hide","length","onClick","Component","defaultProps","RedeemBar","state","redeemCode","exchange","coupons_Input","active","Coupon","pick","useCoupon","invalid","id","GoToUse","_this$props2","ctype","amount","format_expire_time","limit_course","course_title","selectedCouponId","showUseButton","concat","check","Array","fill","map","item","index","key","PureComponent","UseCoupon","couponList","valid_coupons","invalid_coupons","courseId","getParam","handleChange","e","target","setState","http","post","API","home","code","then","res","data","coupon","Object","toConsumableArray","toast_default","info","getMyCoupons","msg","get","isEmpty","getAllCoupons","course_id","inuse_coupon","val","history","find","push","_this$state","coupon_id","goBack","location","reload","from","replace","_this$state2","common","title","arrow","coupons_RedeemBar","Content","coupons","select","Fragment","purpose","_ref","rest","objectWithoutProperties","coupons_Coupon","assign","WithFullSize"],"mappings":"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","file":"static/js/coupons.0ff2580f.chunk.js","sourcesContent":["import React, { Component } from 'react';\nimport './input.scss'\n\nimport classnames from 'classnames'\n\nclass Input extends Component {\n clearInput = () => {\n this.props.onChange('')\n }\n\n render() {\n let {type, placeholder} = this.props\n return (\n <div className='custom-input-wrapper'>\n <input\n type={type}\n className={classnames('custom-input')}\n placeholder={placeholder}\n onChange={this.props.onChange}\n value={this.props.value}\n />\n <i\n className={classnames('iconfont icondanseshixintubiao-3', {\n hide: this.props.value.length === 0\n })}\n onClick={this.clearInput}\n />\n </div>\n );\n }\n}\n\n\nInput.defaultProps = {type: 'text', placeholder: ''}\n\nexport default Input;","import React, { Component } from 'react';\nimport './exchange-bar.scss'\nimport Input from '../Input'\nimport classnames from 'classnames'\n\nclass RedeemBar extends Component {\n state = {}\n\n render() {\n const {onChange, redeemCode, exchange} = this.props\n return (\n <div className=\"exchange-bar\">\n <Input\n placeholder={'请输入优惠码'}\n onChange={onChange}\n value={redeemCode}\n />\n <button className={classnames({\n active: redeemCode && redeemCode.length > 0\n })} onClick={exchange}>兑换\n </button>\n </div>\n );\n }\n}\n\nexport default RedeemBar;","import React, { PureComponent } from 'react'\nimport './coupon.scss'\nimport classnames from 'classnames'\n\nclass Coupon extends PureComponent {\n\n pick = () => {\n let {useCoupon, invalid} = this.props\n !invalid && useCoupon && useCoupon(this.props.id)\n }\n\n GoToUse = () => {\n this.props.useCoupon(this.props.id)\n }\n\n render() {\n let {\n ctype,\n amount,\n format_expire_time,\n limit_course,\n invalid,\n course_title,\n id,\n selectedCouponId,\n showUseButton\n } = this.props\n\n return (\n <li className='coupon' onClick={this.pick}>\n <div className={classnames('coupon-info', invalid ? 'invalid' : `coupon-type${ctype}`)}>\n <p className='type'>{ctype === 1 ? '代金券' : '课程券'}</p>\n {\n ctype === 1 ? <p className='denomination'>{amount} <span>元</span></p>\n : <p className='course-title'>{course_title}</p>\n\n }\n <p className='expire'>有效期至:{format_expire_time}</p>\n {\n selectedCouponId === id &&\n <i className={classnames('iconfont icondanseshixintubiao-5', {\n check: !invalid\n })}\n />\n }\n <ul>\n {\n new Array(19).fill('a').map((item, index) => {\n return <li key={index}/>\n })\n }\n </ul>\n </div>\n <div className=\"coupon-des\">\n <span className='limit'>{\n limit_course === 0 ? '可用于大于代金券金额的课程' : `仅适用于《${course_title}》`\n }</span>\n {\n showUseButton &&\n <button\n className='use'\n onClick={this.GoToUse}\n >立即使用\n </button>\n }\n\n </div>\n </li>\n );\n }\n}\n\nexport default Coupon","import React, { PureComponent } from 'react';\nimport './coupons.scss'\n\nimport RedeemBar from \"./RedeemBar\";\nimport Coupon from './Coupon'\nimport { http, api, getParam } from '@/utils'\nimport { WithFullSize } from '@/HOCs'\nimport { Toast } from 'antd-mobile'\nimport { isEmpty } from 'lodash'\nimport { HeaderBar } from \"@/common\";\n\n\nclass UseCoupon extends PureComponent {\n\n state = {\n selectedCouponId: 0,\n redeemCode: '',\n couponList: [],\n valid_coupons: [],\n invalid_coupons: [],\n courseId: getParam('id'),\n showUseButton: false\n }\n\n componentDidMount() {\n\n const {history, location} = this.props\n\n const {state} = this.props.location\n\n\n if (state && state.from) {\n if (state.from === '/my') {\n this.getMyCoupons();\n this.setState({\n showUseButton: true\n })\n } else {\n if (!this.state.courseId) {\n location.state && location.state.from ? history.replace(location.state.from) : history.goBack()\n }\n this.getAllCoupons();\n }\n }\n }\n\n handleChange = e => {\n let value = e ? e.target.value : ''\n this.setState({redeemCode: value})\n }\n\n exchange = () => {\n if (this.state.redeemCode !== '') {\n http.post(`${API.home}/m/coupon/exchange`, {\n code: this.state.redeemCode\n })\n .then(res => {\n const data = res.data\n if (data.code === 200) {\n\n const coupon = data.data\n\n if (this.state.showUseButton) {\n this.setState({\n couponList: [...this.state.couponList, coupon],\n redeemCode: ''\n })\n } else {\n\n const coupon = data.data\n\n if (coupon['ctype'] == 2\n && coupon['limit_course'] != this.state.courseId) {\n this.setState({\n invalid_coupons: [...this.state.invalid_coupons, coupon],\n showUseButton: null\n });\n } else {\n this.setState({\n valid_coupons: [...this.state.valid_coupons, coupon],\n redeemCode: ''\n })\n }\n\n }\n Toast.info('兑换成功')\n this.getMyCoupons()\n } else {\n Toast.info(data.msg)\n }\n })\n } else {\n Toast.info('请输入兑换码')\n }\n }\n\n getMyCoupons = () => {\n http.get(`${API.home}/m/coupon/all`)\n .then(res => {\n const data = res.data\n if (data.code === 200) {\n this.setState({\n couponList: isEmpty(data.data) ? [] : data.data\n })\n } else {\n Toast.info(data.msg)\n }\n })\n }\n\n getAllCoupons = () => {\n http.post(`${API.home}/m/coupon/select`, {course_id: this.state.courseId})\n .then(res => {\n const data = res.data\n if (data.code === 200) {\n\n const inuse_coupon = data.data['inuse_coupon'];\n\n\n this.setState({\n valid_coupons: inuse_coupon\n ? [...inuse_coupon, ...data.data.valid_coupons]\n : data.data.valid_coupons,\n invalid_coupons: data.data.invalid_coupons,\n selectedCouponId: inuse_coupon.length ? inuse_coupon[0].id : 0\n })\n\n } else {\n Toast.info(data.msg)\n }\n })\n }\n\n useCoupon = val => {\n const {history} = this.props\n const coupon = this.state.couponList.find(item => item.id === val)\n\n if (val) {\n if (this.state.showUseButton) {\n\n if (coupon['ctype'] === 1) {\n history.push(`/classify`)\n } else {\n history.push(`/detail?id=${coupon['limit_course']}`)\n }\n\n } else {\n\n const {courseId, selectedCouponId} = this.state\n\n if (selectedCouponId === val) {\n\n\n http.post(`${API.home}/m/coupon/cancel`, {\n course_id: courseId\n }).then(res => {\n const data = res.data\n if (data.code === 200) {\n\n\n this.setState({\n selectedCouponId: 0\n })\n\n\n } else {\n Toast.info(data.msg)\n }\n })\n\n\n } else {\n http.post(`${API.home}/m/coupon/use`, {\n course_id: this.state.courseId,\n coupon_id: val\n })\n .then(res => {\n const data = res && res.data\n if (data.code === 200) {\n\n this.setState({selectedCouponId: val})\n this.props.history.goBack()\n\n\n } else {\n Toast.info(data.msg)\n }\n })\n\n }\n\n\n }\n\n } else {\n Toast.info('未知错误')\n location.reload()\n }\n\n }\n\n render() {\n const {state} = this.props.location\n const {showUseButton, selectedCouponId} = this.state\n return (\n <div className='use-coupon'>\n <HeaderBar title='优惠券' arrow={true}/>\n <RedeemBar onChange={this.handleChange}\n exchange={this.exchange}\n redeemCode={this.state.redeemCode}/>\n <div className=\"coupons-area\">\n <Content\n coupons={\n state\n && state.from\n && state.from === '/my'\n ? this.state.couponList\n : this.state.valid_coupons\n }\n showUseButton={showUseButton}\n selectedCouponId={selectedCouponId}\n select={this.select}\n useCoupon={this.useCoupon}\n />\n {\n this.state.invalid_coupons.length > 0 &&\n (\n <>\n <div className='invalid-title'>- 不可使用的优惠券 -</div>\n <Content\n coupons={this.state.invalid_coupons}\n selectedCouponId={selectedCouponId}\n select={this.select}\n purpose={'use'}\n invalid={'invalid'}\n />\n </>\n )\n }\n </div>\n </div>\n );\n }\n}\n\nfunction Content({coupons, ...rest}) {\n if (coupons.length === 0) {\n return (\n <div className='empty'>\n <p>暂无可使用的优惠券</p>\n </div>\n )\n }\n return (\n <ul>\n {\n coupons.map(item => {\n return (\n <Coupon\n key={item.id}\n {...item}\n id={item.id}\n {...rest}\n />\n )\n })\n }\n </ul>\n )\n}\n\nexport default WithFullSize(UseCoupon);"],"sourceRoot":""}