{"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","connect","couponList","valid_coupons","invalid_coupons","courseId","getParam","handleChange","e","target","setState","_this$props$location$","location","http","post","API","home","code","then","res","data","coupon","Object","toConsumableArray","toast_default","info","from","getMyCoupons","getAllCoupons","msg","get","isEmpty","course_id","inuse_coupon","val","history","dispatch","find","push","_this$state","coupon_id","goBack","reload","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.aab15c32.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, getParam } from '@/utils'\nimport { WithFullSize } from '@/HOCs'\nimport { Toast } from 'antd-mobile'\nimport { isEmpty } from 'lodash'\nimport { HeaderBar } from \"@/common\";\nimport {connect} from 'react-redux';\nimport {getCourses} from './../detail/actions';\n\n@connect()\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 const { location: { state = {}} } = this.props;\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 if (state.from === '/my') {\n this.getMyCoupons()\n }\n if(state.from === '/order') {\n this.getAllCoupons()\n }\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, dispatch} = 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 // dispatch(getCourses(coupon['limit_course'], () => {\n history.push(`/detail?id=${coupon['limit_course']}`);\n return false;\n // }));\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":""}