Commit 99d545a8 by wangshuo

拉取最新分支

parents ffb989e8 c367fc34
...@@ -51,6 +51,7 @@ ...@@ -51,6 +51,7 @@
"postcss-loader": "3.0.0", "postcss-loader": "3.0.0",
"postcss-preset-env": "6.5.0", "postcss-preset-env": "6.5.0",
"postcss-safe-parser": "4.0.1", "postcss-safe-parser": "4.0.1",
"qrcode": "^1.3.3",
"react": "^16.8.6", "react": "^16.8.6",
"react-app-polyfill": "^0.2.2", "react-app-polyfill": "^0.2.2",
"react-dev-utils": "^8.0.0", "react-dev-utils": "^8.0.0",
......
...@@ -13,13 +13,13 @@ import './orderlist.scss'; ...@@ -13,13 +13,13 @@ import './orderlist.scss';
*/ */
const OrderItem = ({ info, tab, children, ...restProps }) => { const OrderItem = ({ info, tab, children, src, ...restProps }) => {
return ( return (
<div className='public-list-item'> <div className='public-list-item'>
<div className="public-content"> <div className="public-content">
{tab} {tab}
<div className="public-cover" > <div className="public-cover" >
<img src='https://julyedu-img-public.oss-cn-beijing.aliyuncs.com/Public/Image/4c5ccac604.jpg' alt="" /> <img src={src} alt="" />
</div> </div>
{info} {info}
</div> </div>
......
.public-list-item{ .public-list-item {
margin-top: 5px;
background: $bg_fff; background: $bg_fff;
.public-content{
.public-content {
display: flex; display: flex;
height: 100%; height: 100%;
// margin: 0px 15px;
padding: 10px 0; .public-cover {
.public-cover{
flex: 1 0 auto; flex: 1 0 auto;
margin-right: 15px; margin-right: 15px;
position: relative; position: relative;
img{
width: 125px; width: 125px;
height: 90px; height: 90px;
img {
width: 100%;
height: 100%;
border-radius: 3px; border-radius: 3px;
} }
} }
.order-info {
position: relative;
.order-title {
font-size: 16px;
color: $color_333;
height: 16px;
line-height: 16px;
} }
.order-content {
font-size: 14px;
color: $color_666;
margin-top: 14px;
line-height: 18px;
} }
.public-list-item:first-child{
margin-top: 0px; .order-des {
position: absolute;
bottom: 0;
height: 24px;
line-height: 33px;
.order-newprice {
font-size: 16px;
color: $redprice;
} }
.order-price {
font-size: 12px;
color: $color_999;
margin-left: 15px;
text-decoration: line-through;
}
}
}
}
}
import React, {Component} from 'react'; import React, {Component} from 'react';
import {api, getParam, http} from "@/utils";
import {Toast} from 'antd-mobile';
import {Link} from 'react-router-dom'
import './index.scss' import './index.scss'
...@@ -11,6 +14,20 @@ class BtnStatus extends Component { ...@@ -11,6 +14,20 @@ class BtnStatus extends Component {
} }
} }
// 加入购物车
toCart = () => {
let data = {
course_id: getParam('id')
}
http.post(`${api.home}/m/cart/add`, data).then((res) => {
if (res.data.code === 200) {
Toast.info('已加入购物车', 2);
} else {
Toast.info(res.data.msg, 2);
}
})
}
render() { render() {
return ( return (
<div> <div>
...@@ -22,8 +39,8 @@ class BtnStatus extends Component { ...@@ -22,8 +39,8 @@ class BtnStatus extends Component {
<i className='iconfont iconerji'></i> <i className='iconfont iconerji'></i>
<span>课程咨询</span> <span>课程咨询</span>
</a> </a>
<button className='btn btn-s bg-FCCD05'>加入购物车</button> <button className='btn btn-s bg-FCCD05' onClick={this.toCart}>加入购物车</button>
<button className='btn btn-s bg-FD7700'>立即报名</button> <Link to='/order' className='btn btn-s bg-FD7700'>立即报名</Link>
</div> </div>
} }
......
...@@ -65,6 +65,7 @@ ...@@ -65,6 +65,7 @@
font-size: 16px; font-size: 16px;
border: none; border: none;
padding: 8px 0; padding: 8px 0;
text-align: center;
} }
.btn-s { .btn-s {
......
...@@ -31,7 +31,7 @@ class Detail extends Component { ...@@ -31,7 +31,7 @@ class Detail extends Component {
} }
componentDidUpdate() { componentDidUpdate() {
console.log(this.props.courseInfo.course_info) // console.log(this.props.courseInfo.course_info)
} }
toApp = () => { toApp = () => {
...@@ -138,7 +138,7 @@ class Detail extends Component { ...@@ -138,7 +138,7 @@ class Detail extends Component {
{/*分享赚钱*/} {/*分享赚钱*/}
{ {
courseInfo.is_dist && courseInfo.is_dist &&
<ShareRank shareRank={this.state.shareRank} openRanking={this.openRanking} boxHide={this.boxHide}/> <ShareRank data={this.props.courseInfo} shareRank={this.state.shareRank} openRanking={this.openRanking} boxHide={this.boxHide}/>
} }
{/*砍价*/} {/*砍价*/}
......
import React, {Component} from 'react' import React, {Component} from 'react'
import './index.scss' import './index.scss'
import {api, getParam, http} from "@/utils"; import {api, getParam, http} from "@/utils";
import {withRouter} from "react-router-dom";
class ShareRank extends Component { class ShareRank extends Component {
constructor(props) { constructor(props) {
super(props) super(props)
this.state = { this.state = {
list: '', list: '',
rankingslice: '' rankingslice: '',
code: ''
} }
} }
componentDidMount() { componentDidMount() {
// 获取排行榜
http.get(`${api.home}/dist/rankList/${getParam('id')}`).then((res) => { http.get(`${api.home}/dist/rankList/${getParam('id')}`).then((res) => {
if (res.data.code === 200) { if (res.data.code === 200) {
this.setState({ this.setState({
list: res.data.data, list: res.data.data,
rankingslice: res.data.data.slice(0,2) rankingslice: res.data.data.slice(0, 2),
courseInfo: this.props.data.course_info
})
}
})
// 获取分销码
let data = {
course_id: getParam('id')
}
http.post(`${api.home}/dist/createCode`, data).then((res) => {
if (res.data.code === 200) {
this.setState({
code: res.data.data.code
}) })
} }
}) })
} }
share = () => {
const courseId = getParam('id')
const dist_first = this.state.courseInfo.dist_first_level_ti
const uid = this.state.courseInfo.uid
const dist_code = this.state.code
this.props.history.push(`/shareposter?courseId=${courseId}&dist_first=${dist_first}&uid=${uid}&dist_code=${dist_code}`)
}
// 关闭弹窗 // 关闭弹窗
colse = () => { colse = () => {
this.props.boxHide(false) this.props.boxHide(false)
} }
render() { render() {
let info = ''
if (this.props.data.course_info) {
info = this.props.data.course_info
}
return ( return (
<div className='share-ranking'> <div className='share-ranking'>
<span className="title">排行榜:</span> <span className="title">排行榜:</span>
<div className='ranking-box' onClick={this.props.openRanking}> <div className='ranking-box' onClick={this.props.openRanking}>
{ {
this.state.rankingslice && this.state.rankingslice.length > 0 && this.state.rankingslice.map((item,index)=>{ this.state.rankingslice && this.state.rankingslice.length > 0 && this.state.rankingslice.map((item, index) => {
return( return (
<span key={index} className="ranking-mess"> <span key={index} className="ranking-mess">
<img src={item.head_imgurl} alt=""/> <img src={item.head_imgurl} alt=""/>
<i>{item.amount}</i> <i>{item.amount}</i>
...@@ -46,7 +74,7 @@ class ShareRank extends Component { ...@@ -46,7 +74,7 @@ class ShareRank extends Component {
<img className="ranking-ellipsis" <img className="ranking-ellipsis"
src="https://julyedu-img.oss-cn-beijing.aliyuncs.com/Image/train/ellipsis.png" alt=""/> src="https://julyedu-img.oss-cn-beijing.aliyuncs.com/Image/train/ellipsis.png" alt=""/>
</div> </div>
<button className="share">分享赚22</button> <button className="share" onClick={this.share}>分享赚{info.dist_first_level_ti}</button>
{ {
this.props.shareRank && this.props.shareRank &&
...@@ -58,8 +86,8 @@ class ShareRank extends Component { ...@@ -58,8 +86,8 @@ class ShareRank extends Component {
</div> </div>
<ul> <ul>
{ {
this.state.list && this.state.list.length > 0 && this.state.list.map((item,index)=>{ this.state.list && this.state.list.length > 0 && this.state.list.map((item, index) => {
return( return (
<li key={index}> <li key={index}>
<img src={item.head_imgurl} alt=""/> <img src={item.head_imgurl} alt=""/>
<span className='course-title'>{item.user_name}</span> <span className='course-title'>{item.user_name}</span>
...@@ -70,7 +98,7 @@ class ShareRank extends Component { ...@@ -70,7 +98,7 @@ class ShareRank extends Component {
} }
</ul> </ul>
<div className='shareBtn'> <div className='shareBtn'>
<button>分享赚67</button> <button onClick={this.share}>分享赚{info.dist_first_level_ti}</button>
</div> </div>
</div> </div>
<i onClick={this.colse} className={'iconfont iconiconfront-2 close'}></i> <i onClick={this.colse} className={'iconfont iconiconfront-2 close'}></i>
...@@ -81,4 +109,4 @@ class ShareRank extends Component { ...@@ -81,4 +109,4 @@ class ShareRank extends Component {
} }
} }
export default ShareRank; export default withRouter(ShareRank);
...@@ -136,7 +136,7 @@ ...@@ -136,7 +136,7 @@
text-align: center; text-align: center;
button { button {
border: none; border: none;
width: 105px; padding: 0 10px;
height: 24px; height: 24px;
margin-top: 10px; margin-top: 10px;
background: linear-gradient(90deg, $bg_FF0000 0%, $bg_FF4000 100%); background: linear-gradient(90deg, $bg_FF0000 0%, $bg_FF4000 100%);
......
import React, {Component} from 'react' import React, {Component} from 'react'
import './index.scss' import './index.scss'
import {api, getParam, http, is_weixin} from "@/utils"; import {api, getParam, http, is_weixin} from "@/utils";
import {Toast, WhiteSpace, WingBlank, Button} from 'antd-mobile';
class Single extends Component { class Single extends Component {
constructor(props) { constructor(props) {
super(props) super(props)
this.state = { this.state = {
status: 1 status: 1,
orderId: '',
nowPrice: '',
laterPrice: '',
payType: '0', // 1支付宝 0微信
}
}
componentDidMount() {
if (getParam('is_class') === 1 || getParam('weixinpay')) {
this.payCallback()
}
if (is_weixin) {
this.isweixinPay()
} }
} }
// 选择支付方式
check = (type) => {
this.setState({
payType: type
})
}
// 确定购买 // 确定购买
toBuy = () => { toBuy = () => {
http.get(`${api.home}/sys/createClassOrder/${this.props.data.video_id}`).then((res) => { http.get(`${api.home}/sys/createClassOrder/${this.props.data.video_id}`).then((res) => {
if (res.data.code === 200) { if (res.data.code === 200) {
this.setState({
orderId: res.data.data.order_id
})
this.state.payType === '1' ? this.alipayPay(this.state.orderId) : this.weixinPay(this.state.orderId)
} else {
alert(res.data.msg)
}
})
}
// 微信支付
weixinPay = (orderId) => {
// 微信内部-支付
if (is_weixin) {
window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx23dac6775ac82877&redirect_uri=" + encodeURIComponent(window.location.href + "&aa=bb").toLowerCase() + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
} else {
// 微信外部-支付
http.get(`${api['pay-api']}/pay/wxpay/wap_charge/oid/${orderId}`).then((res) => {
if (res.data.errno === 0) {
window.location.href = res.data.data.url + "&redirect_url=" + encodeURIComponent(window.location.href + "&weixinpay=1").toLowerCase();
} else {
alert(res.data.msg);
}
})
}
}
// 支付宝支付
alipayPay = (orderId) => {
http.get(`${api['pay-api']}/pay/alipay/wap_charge/oid/${orderId}`).then((res) => {
if (res.data.errno === 0) {
window.location = res.data.data.url;
} else {
alert(res.data.msg);
}
})
}
onBridgeReady = (data) => {
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId": data.appId, //公众号名称,由商户传入
"timeStamp": data.timeStamp, //时间戳,自1970年以来的秒数
"nonceStr": data.nonceStr, //随机串
"package": data.package,
"signType": data.signType, //微信签名方式:
"paySign": data.paySign //微信签名
},
function (res) {
if (res.err_msg == "get_brand_wcpay_request:ok") {
this.payCallback()
} else {
alert('支付失败')
}
}
)
}
// 微信内部支付
isweixinPay = () => {
let weixin_code = getParam('code')
if (weixin_code) {
if (getParam('oid') === undefined) {
return
} else {
http.get(`${api['pay-api']}/pay/wxpay/pub_charge/oid/${getParam('oid')}/code/${weixin_code}`).then((res) => {
if (res.data.errno === 0) {
const data = res.data.data
this.onBridgeReady(data)
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', this.onBridgeReady, false)
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', this.onBridgeReady)
document.attachEvent('onWeixinJSBridgeReady', this.onBridgeReady)
}
} else {
this.onBridgeReady()
}
} else {
alert(res.data.msg)
}
})
}
}
}
// 支付完成之后获取状态
payCallback = () => {
http.get(`${api.home}/sys/orderStatus/${getParam('oid')}`).then((res) => {
if (res.data.data.errno == '200') {
// 正常购买单集成功
this.setState({
status: 6
})
} else if (res.data.data.errno == '201') {
// 0元参团
this.setState({
status: 4
})
} else if (res.data.data.errno == '202') {
// 0元购
this.setState({
status: 3
})
} else if (res.data.data.errno == '203') {
// 三天内特价
this.setState({
nowPrice: res.data.data.data.now_price,
laterPrice: res.data.data.data.three_day_later_price,
status: 2
})
} else {
alert(res.data.data.msg)
}
})
}
// 特价购买全集
toBuyAll = () => {
}
// 0元购买全集
zerobuyReceive = () => {
Toast.success('购买全集成功', 3)
this.colse()
} }
// 0元参团
zerogroupBuy = () => {
this.setState({
status: 7
}) })
// this.setState({
// status: 2
// })
} }
// 关闭弹窗 // 关闭弹窗
...@@ -32,7 +176,6 @@ class Single extends Component { ...@@ -32,7 +176,6 @@ class Single extends Component {
} }
render() { render() {
{console.log(is_weixin(),1)}
return ( return (
<div> <div>
{ {
...@@ -55,15 +198,19 @@ class Single extends Component { ...@@ -55,15 +198,19 @@ class Single extends Component {
</div> </div>
<div className='payment-type'> <div className='payment-type'>
<label>支付方式:</label> <label>支付方式:</label>
<p> {
!is_weixin() &&
<p onClick={this.check.bind(this, '1')}>
<i className='iconfont iconzhifubaox-'></i> <i className='iconfont iconzhifubaox-'></i>
<span>支付宝</span> <span>支付宝</span>
<i className='iconfont icondanseshixintubiao-5 redioed'></i> <i className={`iconfont icondanseshixintubiao-5 redio ${this.state.payType === '1' ? 'redioed' : ''}`}></i>
</p> </p>
<p> }
<p onClick={this.check.bind(this, '0')}>
<i className='iconfont iconweixinzhifu buy'></i> <i className='iconfont iconweixinzhifu buy'></i>
<span>微信支付</span> <span>微信支付</span>
<i className='iconfont icondanseshixintubiao-5 redio'></i> <i className={`iconfont icondanseshixintubiao-5 redio ${this.state.payType === '0' ? 'redioed' : ''}`}></i>
</p> </p>
</div> </div>
<div className='btn btn-18B4ED' onClick={this.toBuy}>确认购买</div> <div className='btn btn-18B4ED' onClick={this.toBuy}>确认购买</div>
...@@ -76,10 +223,11 @@ class Single extends Component { ...@@ -76,10 +223,11 @@ class Single extends Component {
<i className='iconfont icondanseshixintubiao-5'></i> <i className='iconfont icondanseshixintubiao-5'></i>
<span>购买成功</span> <span>购买成功</span>
</div> </div>
<div className="dec">· 3天内购买全集,可直接抵扣该集费用,275元购买。</div> <div className="dec">· 3天内购买全集,可直接抵扣该集费用,{this.state.nowPrice}元购买。</div>
<div className="dec">· 超过3天,按照未够集数/全部集数等比例计费,280元购买全集。</div> <div className="dec">· 超过3天,按照未够集数/全部集数等比例计费,{this.state.laterPrice}元购买全集。</div>
<div className='btn btn-18B4ED'>开始学习</div> <div className='btn btn-18B4ED'>开始学习</div>
<div className='btn btn-FF4000'>275购买全集</div> <div className='btn btn-FF4000' onclick={this.toBuyAll()}>{this.state.nowPrice}购买全集
</div>
</div> </div>
} }
{ {
...@@ -90,7 +238,7 @@ class Single extends Component { ...@@ -90,7 +238,7 @@ class Single extends Component {
<span>购买成功</span> <span>购买成功</span>
</div> </div>
<div className="dec">· 恭喜您获得0元拼团购买剩余课时的机会。</div> <div className="dec">· 恭喜您获得0元拼团购买剩余课时的机会。</div>
<div className='btn btn-FF4000'>0元参团</div> <div className='btn btn-FF4000' onClick={this.zerogroupBuy}>0元参团</div>
</div> </div>
} }
{ {
...@@ -101,7 +249,38 @@ class Single extends Component { ...@@ -101,7 +249,38 @@ class Single extends Component {
<span>购买成功</span> <span>购买成功</span>
</div> </div>
<div className="dec">· 恭喜您获得0元购买剩余课时的机会。</div> <div className="dec">· 恭喜您获得0元购买剩余课时的机会。</div>
<div className='btn btn-FF4000'>0元购</div> <div className='btn btn-FF4000' onClick={this.zerobuyReceive}>0元购</div>
</div>
}
{
this.state.status === 6 &&
<div className='content zero'>
<div className="header">
<i className='iconfont icondanseshixintubiao-5'></i>
<span>购买成功</span>
</div>
<div className='btn btn-18B4ED'>去学习</div>
</div>
}
{
this.state.status === 7 &&
<div className='content group'>
<div className="header">
<i className='iconfont icondanseshixintubiao-5'></i>
<span>参团成功</span>
</div>
<div className='group-img'>
<img
src='https://julyedu-img-public.oss-cn-beijing.aliyuncs.com/vu/image_head/Sv3Vz4B8Tp.jpg'
alt=""/>
<img
src='https://julyedu-img-public.oss-cn-beijing.aliyuncs.com/vu/image_head/CwJoTNA21g.jpg'
alt=""/>
<img
src='https://julyedu-img-public.oss-cn-beijing.aliyuncs.com/vu/image_head/Sv3Vz4B8Tp.jpg'
alt=""/>
</div>
<div className='btn-l btn-FF4000'>剩余235923 邀请好友参团</div>
</div> </div>
} }
<i onClick={this.colse} className={'iconfont iconiconfront-2 close'}></i> <i onClick={this.colse} className={'iconfont iconiconfront-2 close'}></i>
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
line-height: 30px; line-height: 30px;
} }
.btn-18B4ED { .btn-18B4ED {
background-color: $bg_18B4ED; background-color: $bg_18B4ED;
} }
...@@ -135,17 +136,20 @@ ...@@ -135,17 +136,20 @@
font-size: 14px; font-size: 14px;
vertical-align: text-bottom; vertical-align: text-bottom;
} }
.icondanseshixintubiao-5 { .icondanseshixintubiao-5 {
position: absolute; position: absolute;
right: 0; right: 0;
font-size: 24px; font-size: 24px;
} }
.redioed {
color: #4cd964;
}
.redio { .redio {
color: $border_ccc; color: $border_ccc;
} }
.redioed {
color: #4cd964;
}
} }
} }
} }
...@@ -197,4 +201,32 @@ ...@@ -197,4 +201,32 @@
bottom: 70px; bottom: 70px;
} }
} }
.group {
height: 165px;
margin: 213px auto 22px auto;
text-align: center;
.group-img {
margin-top: 15px;
img {
width: 40px;
height: 40px;
border-radius: 50px;
margin-right: 15px;
}
}
.btn-l {
position: absolute;
width: 240px;
bottom: 20px;
left: 30px;
height: 30px;
border-radius: 3px;
font-size: 16px;
color: $white;
text-align: center;
line-height: 30px;
}
} }
}
\ No newline at end of file
import React, {Component} from 'react'
import './index.scss'
import {HeaderBar} from '../../common'
import {http, api, getParam} from '@/utils'
import QRCode from 'qrcode';
class SharePoster extends Component {
constructor(props) {
super(props)
this.state = {
codeSrc: '',
billSrc: '', // 图片链接
imgUrl: '',
smallListImg: [], // 小图片地址
smallactive: 0, // 小图选中标记
distPrice: '', // 分销价格
name: '', // 用户姓名
bgImage: [] // 背景图
}
}
componentDidMount() {
this.getCodeWe()
http.get(`${api.home}/m/dist/posters/${getParam('courseId')}/${getParam('uid')}`).then((res) => {
if (res.data.code === 200) {
this.setState({
imgUrl: res.data.data.avatar,
smallListImg: res.data.data.list,
distPrice: res.data.data.dist_course,
bgImage: res.data.data.list,
name: res.data.data.username
})
this.initCanvas(this.state.bgImage, 0)
}
})
}
// 初始化海报
initCanvas = (imgList, index) => {
let _this = this;
let imgSrc1 = imgList[index].poster;
let $width = 450;
let $height = 800;
let avatarWidth = 50 // imgList[index].poster_width // 头像宽度
let avatarHeight = 50 // imgList[index].poster_height // 头像高度
let avatarPositionX = (imgList[index].header_position_x * $width) // 头像x轴位置
let avatarPositionY = (imgList[index].header_position_y * $height) // 头像Y轴位置
let qrCodePositionX = imgList[index].qr_code_x * $width // 二维码x轴位置
let qrCodePositionY = imgList[index].qr_code_y * $height // 二维码y轴位置
let qrCodeWidth = (imgList[index].qr_code_width * $width) // 二维码宽度
let qrCodeHeight = (imgList[index].qr_code_height * $height) - avatarHeight / 2 // 二维码高度
let qrCodeLink = `/detail/${getParam('courseId')}/${getParam('dist_code')}`
var canvas = document.getElementById("canvas"),
context = canvas.getContext("2d");
_this.getBase64(imgSrc1)
// 背景图片合成
.then((img) => {
let bgImage = new Image();
bgImage.src = img;
let qrCodeImg = document.getElementById('qrcode');
let ua = navigator.userAgent.toLowerCase();
// Android终端
let isAndroid = ua.indexOf('Android') > -1 || ua.indexOf('Adr') > -1;
// Ios终端
let isiOS = !!ua.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
qrCodeImg = document.getElementById('qrcode');
} else if (/(Android)/i.test(navigator.userAgent)) {
//Android终端
qrCodeImg = document.getElementById('qrcode');
}
bgImage.setAttribute('crossOrigin', 'anonymous');
bgImage.onload = function () {
context.drawImage(bgImage, 0, 0, 450, 800);
context.drawImage(qrCodeImg, 320, 685, 100, 100);
context.fillStyle = imgList[index].username_color;
context.font = "16px serif";
context.fillText('@' + _this.name, (avatarPositionX + avatarWidth) + 20, (avatarPositionY + avatarHeight / 2));
context.font = "14px serif";
context.fillText('正在学习该课程', (avatarPositionX + avatarWidth) + 20, (avatarPositionY + avatarHeight / 2) + 20);
context.restore();
}
})
// 头像生成
.then(() => {
_this.getBase64(_this.state.imgUrl)
.then((img) => {
let bgImage = new Image();
bgImage.src = img;
bgImage.setAttribute('crossOrigin', 'anonymous');
bgImage.setAttribute('border-Radius', '50%');
bgImage.onload = function () {
_this.imgPosition(context, bgImage, avatarPositionX, avatarPositionY, 24);
context.drawImage(bgImage, avatarPositionX, avatarPositionY, 48, 48);
context.restore();
_this.setState({
billSrc: _this.convertCanvasToImage(canvas)
})
}
})
})
}
children = (curEle, tagName) => {
var nodeList = curEle.childNodes;
var ary = [];
if (/MSIE(6|7|8)/.test(navigator.userAgent)) {
for (var i = 0; i < nodeList.length; i++) {
var curNode = nodeList[i];
if (curNode.nodeType === 1) {
ary[ary.length] = curNode;
}
}
} else {
ary = Array.prototype.slice.call(curEle.children);
}
// 获取指定子元素
if (typeof tagName === "string") {
for (var k = 0; k < ary.length; k++) {
curEle = ary[k];
if (curEle.nodeName.toLowerCase() !== tagName.toLowerCase()) {
ary.splice(k, 1);
k--;
}
}
}
return ary;
}
// 合成图片位置
imgPosition = (ctx, img, x, y, r) => {
ctx.save();
var d = 2 * r;
var cx = x + r;
var cy = y + r;
ctx.beginPath();
ctx.arc(cx, cy, r, 0, 2 * Math.PI);
ctx.clip();
}
// 获取二维码
getCodeWe() {
let _this = this
let qrCodeLink = `/detail/${getParam('courseId')}/${getParam('dist_code')}`
return new Promise(resolve => {
QRCode.toDataURL(qrCodeLink, {}, function (err, url) {
_this.setState({
codeSrc: url
})
})
/*
let qrcode = new QRCode(document.getElementById('qrcode'), {
text: qrCodeLink,
width: 160,
height: 160,
colorDark: "#000000", // 生成的二维码的深色部分
colorLight: "#ffffff", //生成二维码的浅色部分
})
*/
resolve()
})
}
// 图片路径转成base64
getBase64(img) {
let _this = this;
return new Promise(resolve => {
let base64 = null;
let image = new Image();
let timeStamp = +new Date();
image.setAttribute('crossOrigin', 'anonymous');
image.src = img + '?' + timeStamp;
image.onload = () => {
base64 = _this.getBase64Image(image)
resolve(base64)
}
image.onerror = function () {
let timeStamp = +new Date();
_this.getBase64(img + '?' + timeStamp);
}
})
}
// 图片路径放入canvas转成base64
getBase64Image = (img) => {
let canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
let ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, img.width, img.height);
let ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase();
let dataURL = canvas.toDataURL("image/" + ext);
return dataURL;
}
// canvas转换成img图片
convertCanvasToImage = (canvas) => {
let image = new Image();
image.src = canvas.toDataURL("image/png");
return image;
}
// 小图切换
squareClick = (index) => {
this.setState({
smallactive: index
})
this.initCanvas(this.state.bgImage, index);
}
render() {
return (
<div className='share-poster'>
<HeaderBar title={'生成专属海报'}></HeaderBar>
<div className="total-container">
<div className='placard-img-container' id='imgWrapper'>
<img src={this.state.billSrc.src} alt=""/>
</div>
<img src={this.state.codeSrc} alt="" id='qrcode' className='placard-code'/>
<canvas id='canvas' width='450' height='800'
className={this.state.billSrc === '' ? '' : 'hide'}></canvas>
</div>
<div className='placard-desc'>
<span className='placard-sharetxt'>
长按保存海报分享给好友,每有一人通过您的分享购买该课程,您可以
{
this.state.distPrice.count_type === 0 &&
<span className='placard-price'>获得{this.state.distPrice.first_level_tip}元的佣金奖励。</span>
}
{
this.state.distPrice.count_type === 1 &&
<span
className='placard-price'>获得成交金额的{this.state.distPrice.first_level_scale}%作为佣金奖励。</span>
}
</span>
</div>
<div className='placard-swiper'>
<ul className='placard-list'>
{
this.state.smallListImg && this.state.smallListImg.length > 0 && this.state.smallListImg.map((item, index) => {
return (
<li onClick={this.squareClick.bind(this, index)} key={index}
className={this.state.smallactive === index ? 'active' : ''}>
<img src={item.square} alt=""/>
</li>
)
})
}
</ul>
</div>
</div>
)
}
}
export default SharePoster
.share-poster {
.total-container {
width: 100%;
background-color: $bg_000;
height: 420px;
overflow: hidden;
position: relative;
.placard-img-container {
width: 100%;
height: 840px;
background: $bg_000;
padding-top: 20px;
overflow: hidden;
position: relative;
zoom: 0.5;
img {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
}
}
.placard-code {
opacity: 0;
}
}
.placard-desc {
width: 100%;
height: 45px;
background: $bg_000;
padding: 0 10px;
.placard-sharetxt {
width: 100%;
height: 100%;
line-height: 20px;
display: inline-block;
font-size: 14px;
color: $white;
.placard-price {
font-size: 14px;
color: $active;
}
}
}
.placard-swiper {
width: 100%;
background-color: $white;
.placard-list {
display: flex;
justify-content: center;
align-items: center;
li {
width: 64px;
height: 64px;
border-radius: 5px;
line-height: 90px;
margin: 20px 15px;
img {
display: inline-block;
width: 64px;
height: 64px;
border-radius: 5px;
}
}
li.active {
width: 64px;
height: 64px;
background: url('./image/choose_pic.png') no-repeat center;
z-index: 1002;
background-size: 64px;
img {
opacity: 0.1;
}
}
}
}
.hide {
display: none;
}
}
\ No newline at end of file
.cart-page{ .cart-page {
height: 100%; height: 100%;
width: 100%; width: 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.cart-tip{
display: flex; .cart-tip {
align-items:center; color: #555;
justify-content: center; margin-top: 140px;
min-height: 60px; text-align: center;
color:#555;
.iconfridge {
font-size: 21px;
}
.cart-mess {
font-size: 12px;
color: $color_666;
}
a {
display: inline-block;
font-size: 16px;
margin-top: 40px;
color: $active;
} }
.edit{
padding-right:10px;
font-size:14px;
} }
.cart-body{
height:100%; .edit {
padding-right: 10px;
font-size: 14px;
}
.cart-body {
height: 100%;
flex: 1; flex: 1;
margin-bottom: 50px; margin-bottom: 50px;
display: flex; display: flex;
background-color: $bg_f5f5f5; background-color: $bg_f5f5f5;
overflow-y: auto; overflow-y: auto;
position: relative; position: relative;
.cart-main{
width:100%; .cart-main {
>.am-list-item{ width: 100%;
> .am-list-item {
border-bottom: 1px solid #eee; border-bottom: 1px solid #eee;
.am-list-line::after{
.am-list-line::after {
background-color: transparent; background-color: transparent;
} }
} }
>.am-list-item.am-list-item-active{
> .am-list-item.am-list-item-active {
background-color: transparent; background-color: transparent;
} }
.cart-c-title{
.cart-c-title {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
>div{
flex:1; > div {
flex: 1;
} }
span{
font-size:14px; span {
margin-left:10px; font-size: 14px;
margin-left: 10px;
} }
.next{
width:14px; .next {
height:14px; width: 14px;
height: 14px;
display: inline-block; display: inline-block;
margin-left:10px; margin-left: 10px;
} }
i{
i {
font-style: inherit; font-style: inherit;
font-size:14px; font-size: 14px;
display: block; display: block;
padding:0 10px; padding: 0 10px;
} }
} }
.cart-c-body{
.am-list-item-active{ .cart-c-body {
.am-list-item-active {
background-color: transparent; background-color: transparent;
} }
.am-list-line{
.am-list-line {
padding-right: 0px; padding-right: 0px;
} }
.am-list-content{
.am-list-content {
position: relative; position: relative;
} }
.cart-c-item{
.cart-c-item {
overflow: hidden; overflow: hidden;
position: relative;
margin: 8px 0; margin: 8px 0;
padding-right: 10px; height: 120px;
box-sizing: border-box; padding: 15px 15px 15px 12px;
background-color: $white; background-color: $white;
.cart-c-check{
width:40px; .cart-c-check {
width: 30px;
float: left;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center;
height: 100%; height: 100%;
box-sizing: border-box;
position: absolute;
} }
} }
.cart-ci-left{
.cart-ci-left {
position: absolute; position: absolute;
top: 0; top: 0;
left: 40px; left: 40px;
...@@ -93,132 +122,155 @@ ...@@ -93,132 +122,155 @@
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
img{
height:85px; img {
width:85px; height: 85px;
width: 85px;
display: block; display: block;
border:1px solid #eee; border: 1px solid #eee;
} }
} }
.cart-ci-right{
min-height:87px; .cart-ci-right {
margin-left:135px; min-height: 87px;
margin-right:8px; margin-left: 135px;
.am-stepper-handler{ margin-right: 8px;
.am-stepper-handler {
line-height: 28px; line-height: 28px;
font-size: 14px; font-size: 14px;
width: 26px; width: 26px;
height: 26px; height: 26px;
display:flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.r-title{
font-size:15px; .r-title {
white-space:normal; font-size: 15px;
font-weight:bold; white-space: normal;
overflow : hidden; font-weight: bold;
overflow: hidden;
max-height: 46px; max-height: 46px;
span{
overflow : hidden; span {
overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
display: -webkit-box; display: -webkit-box;
/* autoprefixer: ignore next */ /* autoprefixer: ignore next */
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
white-space:inherit; white-space: inherit;
-webkit-line-clamp: 2; -webkit-line-clamp: 2;
} }
} }
.r-step{
.r-step {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.r-price{
color:#ff5b05; .r-price {
font-size:14px; color: #ff5b05;
line-height:30px; font-size: 14px;
span{ line-height: 30px;
font-size:12px;
span {
font-size: 12px;
} }
} }
.span-stepper{
width:100px; .span-stepper {
width: 100px;
} }
.am-stepper-input{
font-size:12px; .am-stepper-input {
font-size: 12px;
} }
} }
} }
} }
} }
} }
.cart-footer{
.cart-footer {
position: fixed; position: fixed;
bottom: 0; bottom: 0;
left: 0; left: 0;
width: 100%; width: 100%;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
border-top:1px solid #eee; border-top: 1px solid #eee;
background-color:rgba(255,255,255,.7); background-color: rgba(255, 255, 255, 1);
height:50px; height: 50px;
.cart-label{
.cart-label {
display: flex; display: flex;
} }
&>div:nth-child(1){
& > div:nth-child(1) {
text-align: center; text-align: center;
height: 50px; height: 50px;
line-height: 50px; line-height: 50px;
padding-left: 12px; padding-left: 12px;
div{
div {
font-size: $font_16; font-size: $font_16;
color: $color_333; color: $color_333;
margin-left: 6px; margin-left: 6px;
} }
} }
.all-pirce{
flex:1; .all-pirce {
flex: 1;
margin-right: 20px; margin-right: 20px;
display: flex; display: flex;
align-items: center; align-items: center;
p{
margin:0; p {
padding:0; margin: 0;
padding: 0;
font-size: $font_16; font-size: $font_16;
text-align: right; text-align: right;
width:100%; width: 100%;
span{
color: $color_333; span {
font-size: $font_16; color: $color_666;
font-size: $font_14;
} }
span:nth-child(2){
span:nth-child(2) {
color: $red; color: $red;
} }
} }
} }
&>div:nth-child(3){
& > div:nth-child(3) {
width: 100px; width: 100px;
line-height: 50px; line-height: 50px;
text-align: center; text-align: center;
font-size: $font_16; font-size: $font_16;
background-color: $bg_ff3131; background-color: $bg_ff3131;
color: $white; color: $white;
span{
font-size: 10px; span {
font-weight:400; font-size: 16px;
font-weight: 400;
} }
} }
div.active{
div.active {
background-color: #ff5b05; background-color: #ff5b05;
color:#fff; color: #fff;
}
} }
.am-navbar-light {
background-color: $bg_f7f9fc;
} }
} }
.shopcard-check{
.shopcard-check {
display: flex; display: flex;
justify-items: center; justify-items: center;
align-items: center; align-items: center;
padding-right: 12px; padding-right: 12px;
} }
.card-wrap{
margin-left: 40px;
}
...@@ -13,33 +13,19 @@ class CartItem extends Component { ...@@ -13,33 +13,19 @@ class CartItem extends Component {
} }
// 改变选择 // 改变选择
onChange(e, id) { onChange(e, id) {
let checked = e.target.checked; let checked = e.target.checked
// console.log(checked,id)
this.props.checkChange(id, checked) this.props.checkChange(id, checked)
} }
// 修改购物车
editCart(it, val) {
}
// 删除购物车
delete(id) {
}
//跳转
goto(id) {
}
//render
render() { render() {
let item = this.props.item let item = this.props.item
const Info = ( const Info = (
<div className="order-info"> <div className="order-info">
<p className='order-title'>{item.title}</p> <p className='order-title text-overflow-one'>{item.course_title}</p>
<p className='order-content'>{item.content}</p> <p className='order-content text-overflow-2'>{item.simpledescription}</p>
<p className='order-des'> <p className='order-des'>
<span className='order-newprice'>¥{item.newprice}</span> <span className='order-newprice'>¥{item.price1}</span>
<span className='order-price'>¥{item.price}</span> <span className='order-price'>¥{item.price0}</span>
</p> </p>
</div> </div>
) )
...@@ -48,14 +34,12 @@ class CartItem extends Component { ...@@ -48,14 +34,12 @@ class CartItem extends Component {
<div className="cart-c-item" > <div className="cart-c-item" >
<div className="cart-c-check"> <div className="cart-c-check">
<Checkbox checked={item.check} onChange={(e) => { <Checkbox checked={item.check} onChange={(e) => {
this.onChange(e, item.id) this.onChange(e, item.course_id)
}} /> }} />
</div> </div>
<div className="card-wrap">
<OrderList info={Info}></OrderList>
<div className="card-wrap">
<OrderList info={Info} src={item.image_name}></OrderList>
</div> </div>
</div> </div>
......
import React, { Component } from 'react' import React, {Component} from 'react'
import {Link} from 'react-router-dom'
import CartItem from './cartItem' import CartItem from './cartItem'
class ShopCard extends Component { class cartList extends Component {
render() { render() {
return ( return (
<div className="cart-main"> <div className="cart-main">
{/* 遍历购物车商品列表 */} {/* 遍历购物车商品列表 */}
<div className="cart-c-body"> <div className="cart-c-body">
{ {
this.props.data.length > 0 ? this.props.data.length < 0 ?
this.props.data.map((item, i) => { this.props.data.map((item, index) => {
return ( return (
<CartItem <CartItem
index={i} index={index}
changeStock={(id, val) => { changeStock={(id, val) => {
this.props.changeStock(id, val) this.props.changeStock(id, val)
}} }}
checkChange={(id, val) => { checkChange={(id, val) => {
this.props.checkChange(id, val) this.props.checkChange(id, val)
}} }}
getCartList={() => { key={index} item={item}/>
this.props.getCartList()
}} key={i} item={item}/>
) )
}) })
: <div className="cart-tip">暂无商品</div> : <div className="cart-tip">
<p><i className='iconfont iconfridge'></i></p>
<p className='cart-mess'>这里是空的,快去逛逛吧~</p>
<Link to='/'>去逛逛</Link>
</div>
} }
</div> </div>
</div> </div>
...@@ -33,4 +36,4 @@ class ShopCard extends Component { ...@@ -33,4 +36,4 @@ class ShopCard extends Component {
} }
} }
export default ShopCard; export default cartList;
\ No newline at end of file \ No newline at end of file
import React, { Component } from 'react' import React, {Component} from 'react'
import { connect } from 'react-redux' import {connect} from 'react-redux'
import { Checkbox, NavBar } from 'antd-mobile' import {Checkbox, NavBar, Modal, Toast} from 'antd-mobile'
//组件 //组件
import ShopCart from './cartList.js' import ShopCart from './cartList.js'
import Loading from '@common/Loading'
//css //css
import './card.scss' import './card.scss'
import classnames from 'classnames' import classnames from 'classnames'
import {api, http} from "@/utils";
const mockData = [ const alert = Modal.alert;
{
title: '三月面试求职班',
imgUrl: 'https://julyedu-img-public.oss-cn-beijing.aliyuncs.com/Public/Image/4c5ccac604.jpg',
content: '涵盖ML主流算法及其应用-文字超过一行换行',
newprice: '980',
price: '1280',
id: '110',
check: false
},
{
title: '三月面试求职班',
imgUrl: 'https://julyedu-img-public.oss-cn-beijing.aliyuncs.com/Public/Image/4c5ccac604.jpg',
content: '涵盖ML主流算法及其应用-文字超过一行换行',
newprice: '980',
price: '1280',
id: '111',
check: false
},
{
title: '三月面试求职班',
imgUrl: 'https://julyedu-img-public.oss-cn-beijing.aliyuncs.com/Public/Image/4c5ccac604.jpg',
content: '涵盖ML主流算法及其应用-文字超过一行换行',
newprice: '980',
price: '1280',
id: '112',
check: false
}
]
class Cart extends Component { class Cart extends Component {
constructor(props) { constructor(props) {
super(props) super(props)
this.state = { this.state = {
data: [],
deleteAll: false, deleteAll: false,
loading: false,
checkedNum: 0, checkedNum: 0,
allPrice: 0, allPrice: 0,
cartNmu: 0, cartNmu: 0,
data: mockData courseIdarr: [] // 选中的课程id
} }
this.checkChange = this.checkChange.bind(this);
this.getCartList = this.getCartList.bind(this);
this.changeStock = this.changeStock.bind(this);
} }
//获取购物车列表
getCartList() {
componentDidMount() {
this.getList()
} }
changeStock() {
getList = () => {
http.get(`${api.home}/m/cart/list`).then((res) => {
if (res.data.code === 200) {
this.setState({
data: res.data.data.courses
})
} else {
Toast.info(res.data.msg, 2);
}
})
} }
//全选 //全选
allChange(e) { allChange(e) {
let checked = e.target.checked let checked = e.target.checked
...@@ -75,12 +56,28 @@ class Cart extends Component { ...@@ -75,12 +56,28 @@ class Cart extends Component {
data: newData data: newData
}) })
this.calc(newData) this.calc(newData)
if (checked) {
let arr = []
newData.map((item, i) => {
arr.push(item.course_id)
})
this.setState({
courseIdarr: arr
})
} else {
this.setState({
courseIdarr: []
})
}
} }
//点击 //点击
checkChange(id, check) { checkChange(id, check) {
let newData = this.state.data.map((item, i) => { let newData = this.state.data.map((item, i) => {
if (item.id === id) { if (item.course_id === id) {
return { return {
...item, ...item,
check: check check: check
...@@ -93,7 +90,21 @@ class Cart extends Component { ...@@ -93,7 +90,21 @@ class Cart extends Component {
data: newData data: newData
}) })
this.calc(newData) this.calc(newData)
let arr = []
newData.forEach((item, i) => {
if (item.check) {
arr.push(item.course_id)
this.setState({
courseIdarr: arr
})
} else {
this.setState({
courseIdarr: arr
})
} }
})
}
//计算总价 //计算总价
calc(newData) { calc(newData) {
let allPrice = 0; let allPrice = 0;
...@@ -104,7 +115,7 @@ class Cart extends Component { ...@@ -104,7 +115,7 @@ class Cart extends Component {
i++; i++;
cartNmu += 1; cartNmu += 1;
checkedNum = i; checkedNum = i;
allPrice += parseFloat(item.newprice); allPrice += parseFloat(item.price1);
} }
}) })
this.setState({ this.setState({
...@@ -113,40 +124,53 @@ class Cart extends Component { ...@@ -113,40 +124,53 @@ class Cart extends Component {
cartNmu cartNmu
}) })
} }
//购买
buy() {
// 删除
detail = () => {
if (this.state.courseIdarr.length > 0) {
alert('', '确定从购物车中删除?', [
{text: '取消', onPress: () => console.log('cancel')},
{
text: '确认',
onPress: () => {
console.log(this.state.courseIdarr)
let data = {
course_id: JSON.stringify(this.state.courseIdarr)
}
console.log(data)
http.post(`${api.home}/m/cart/remove`, data).then((res) => {
if (res.data.code === 200) {
this.getList()
} else {
Toast.info(res.data.msg, 2);
} }
deleteAll() { })
} }
//装载组件
componentDidMount() {
this.getCartList()
} }
])
}
}
render() { render() {
return ( return (
<div className="cart-page" style={{ overflow: 'hidden' }}> <div className="cart-page" style={{overflow: 'hidden'}}>
<NavBar <NavBar
style={{ "height": "44px" }} style={{"height": "44px"}}
className="order-tab" className="order-tab"
mode="light" mode="light"
icon={<i style={{"fontSize": '24px'}} className="iconfont iconiconfront-68"></i>} icon={<i style={{"fontSize": '24px'}} className="iconfont iconiconfront-68"></i>}
rightContent={[ rightContent={[
<i key="0" style={{ "fontSize": '24px' }} className="iconfont iconiconfront-56"></i> <i key="0" style={{"fontSize": '24px'}} className="iconfont iconiconfront-56"
onClick={this.detail}></i>
]} ]}
> >
购物车 购物车
</NavBar> </NavBar>
<div className="cart-body"> <div className="cart-body">
{ <ShopCart checkChange={this.checkChange.bind(this)} data={this.state.data}/>
this.state.loading ?
<Loading />
:
<ShopCart getCartList={this.getCartList} changeStock={this.changeStock} checkChange={this.checkChange} data={this.state.data}/>
}
{ {
this.state.deleteAll ? this.state.deleteAll ?
...@@ -154,7 +178,7 @@ class Cart extends Component { ...@@ -154,7 +178,7 @@ class Cart extends Component {
<div> <div>
<Checkbox onChange={(e) => { <Checkbox onChange={(e) => {
this.allChange(e) this.allChange(e)
}} /> }}/>
<div>全选</div> <div>全选</div>
</div> </div>
<div></div> <div></div>
...@@ -174,7 +198,7 @@ class Cart extends Component { ...@@ -174,7 +198,7 @@ class Cart extends Component {
<div className="cart-label"> <div className="cart-label">
<Checkbox onChange={(e) => { <Checkbox onChange={(e) => {
this.allChange(e) this.allChange(e)
}} /> }}/>
<div>全选</div> <div>全选</div>
</div> </div>
<div className="all-pirce"> <div className="all-pirce">
...@@ -190,7 +214,7 @@ class Cart extends Component { ...@@ -190,7 +214,7 @@ class Cart extends Component {
this.buy() this.buy()
} }
}}> }}>
去结算<span>({this.state.checkedNum})</span> 结算<span> ( {this.state.checkedNum} ) </span>
</div> </div>
</div> </div>
} }
......
...@@ -21,6 +21,7 @@ import DrawDocument from '@/components/scholarship/DrawDocument/DrawDocument' ...@@ -21,6 +21,7 @@ import DrawDocument from '@/components/scholarship/DrawDocument/DrawDocument'
const Coupons = loadable(() => import(/* webpackChunkName: 'coupons'*/ '@/components/coupons')) const Coupons = loadable(() => import(/* webpackChunkName: 'coupons'*/ '@/components/coupons'))
const Study = loadable(() => import(/* webpackChunkName: 'study'*/'@/components/study')) const Study = loadable(() => import(/* webpackChunkName: 'study'*/'@/components/study'))
const Video = loadable(() => import(/* webpackChunkName: 'video'*/'@/components/video')) const Video = loadable(() => import(/* webpackChunkName: 'video'*/'@/components/video'))
const sharePoster = loadable(() => import(/* webpackChunkName: 'shareposter'*/'@/components/sharePoster'))
export default [ export default [
{ {
...@@ -80,7 +81,8 @@ export default [ ...@@ -80,7 +81,8 @@ export default [
}, },
{ {
path: '/shopcart', path: '/shopcart',
component: ShopCart component: ShopCart,
isPrivate: true
}, },
{ {
path: '/bargain-middle-page', path: '/bargain-middle-page',
...@@ -102,4 +104,8 @@ export default [ ...@@ -102,4 +104,8 @@ export default [
path: '/document', path: '/document',
component: DrawDocument component: DrawDocument
}, },
{
path: '/shareposter',
component: sharePoster
},
] ]
\ No newline at end of file
...@@ -25,6 +25,12 @@ const config = { ...@@ -25,6 +25,12 @@ const config = {
production: 'http://passport.julyedu.com', production: 'http://passport.julyedu.com',
proxy: {} proxy: {}
}, },
'pay-api':{
development: '/pay-api',
test: 'http://api-test.julyedu.com',
production: 'https://api.julyedu.com',
proxy: {}
}
} }
module.exports = config module.exports = config
\ No newline at end of file
...@@ -854,7 +854,7 @@ ...@@ -854,7 +854,7 @@
dependencies: dependencies:
regenerator-runtime "^0.13.2" regenerator-runtime "^0.13.2"
"@babel/runtime@^7.2.0", "@babel/runtime@^7.4.4": "@babel/runtime@^7.2.0", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.4":
version "7.4.5" version "7.4.5"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.5.tgz#582bb531f5f9dc67d2fcb682979894f75e253f12" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.5.tgz#582bb531f5f9dc67d2fcb682979894f75e253f12"
integrity sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ== integrity sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==
...@@ -1374,10 +1374,10 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: ...@@ -1374,10 +1374,10 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1:
dependencies: dependencies:
color-convert "^1.9.0" color-convert "^1.9.0"
antd-mobile@^2.2.11: antd-mobile@^2.2.13:
version "2.2.11" version "2.2.13"
resolved "https://registry.yarnpkg.com/antd-mobile/-/antd-mobile-2.2.11.tgz#1e3f55d4cd78a837cdbf7a057869842aa96d6501" resolved "https://registry.yarnpkg.com/antd-mobile/-/antd-mobile-2.2.13.tgz#ae9a2b33ed8af52ed92127b50691af401ac4c8ce"
integrity sha512-OV+bgpR/Z8Pxm73B39cajfBzLfCx4v52Qb57Oi9hgrhMtTCs+CBxDTKP94pcVnaltNmYY610Ok1fu91i10TiHg== integrity sha512-izBPlj5yvjPwzqvpjYYmKp9HOSoeIbqY4Z7gzFpxJXnDvaDoeY3ULr4AHQ1gdeJo6BpqjlcCHHw1IwX8DWN3JQ==
dependencies: dependencies:
array-tree-filter "~2.1.0" array-tree-filter "~2.1.0"
babel-runtime "6.x" babel-runtime "6.x"
...@@ -1606,13 +1606,6 @@ async-limiter@~1.0.0: ...@@ -1606,13 +1606,6 @@ async-limiter@~1.0.0:
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==
async-validator@~1.8.5:
version "1.8.5"
resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-1.8.5.tgz#dc3e08ec1fd0dddb67e60842f02c0cd1cec6d7f0"
integrity sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==
dependencies:
babel-runtime "6.x"
async@^1.5.2: async@^1.5.2:
version "1.5.2" version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
...@@ -1635,7 +1628,7 @@ atob@^2.1.1: ...@@ -1635,7 +1628,7 @@ atob@^2.1.1:
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
autoprefixer@^9.4.2, autoprefixer@^9.5.1: autoprefixer@^9.4.2:
version "9.5.1" version "9.5.1"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.5.1.tgz#243b1267b67e7e947f28919d786b50d3bb0fb357" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.5.1.tgz#243b1267b67e7e947f28919d786b50d3bb0fb357"
integrity sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ== integrity sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ==
...@@ -1647,6 +1640,19 @@ autoprefixer@^9.4.2, autoprefixer@^9.5.1: ...@@ -1647,6 +1640,19 @@ autoprefixer@^9.4.2, autoprefixer@^9.5.1:
postcss "^7.0.14" postcss "^7.0.14"
postcss-value-parser "^3.3.1" postcss-value-parser "^3.3.1"
autoprefixer@^9.6.0:
version "9.6.0"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.6.0.tgz#0111c6bde2ad20c6f17995a33fad7cf6854b4c87"
integrity sha512-kuip9YilBqhirhHEGHaBTZKXL//xxGnzvsD0FtBQa6z+A69qZD6s/BAX9VzDF1i9VKDquTJDQaPLSEhOnL6FvQ==
dependencies:
browserslist "^4.6.1"
caniuse-lite "^1.0.30000971"
chalk "^2.4.2"
normalize-range "^0.1.2"
num2fraction "^1.2.2"
postcss "^7.0.16"
postcss-value-parser "^3.3.1"
aws-sign2@~0.7.0: aws-sign2@~0.7.0:
version "0.7.0" version "0.7.0"
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
...@@ -1657,13 +1663,13 @@ aws4@^1.8.0: ...@@ -1657,13 +1663,13 @@ aws4@^1.8.0:
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
axios@^0.18.0: axios@^0.19.0:
version "0.18.0" version "0.19.0"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8"
integrity sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI= integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==
dependencies: dependencies:
follow-redirects "^1.3.0" follow-redirects "1.5.10"
is-buffer "^1.1.5" is-buffer "^2.0.2"
axobject-query@^2.0.1: axobject-query@^2.0.1:
version "2.0.2" version "2.0.2"
...@@ -2170,6 +2176,15 @@ browserslist@^4.0.0, browserslist@^4.3.4, browserslist@^4.3.5, browserslist@^4.5 ...@@ -2170,6 +2176,15 @@ browserslist@^4.0.0, browserslist@^4.3.4, browserslist@^4.3.5, browserslist@^4.5
electron-to-chromium "^1.3.124" electron-to-chromium "^1.3.124"
node-releases "^1.1.14" node-releases "^1.1.14"
browserslist@^4.6.1:
version "4.6.2"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.2.tgz#574c665950915c2ac73a4594b8537a9eba26203f"
integrity sha512-2neU/V0giQy9h3XMPwLhEY3+Ao0uHSwHvU8Q1Ea6AgLVL1sXbX3dzPrJ8NWe5Hi4PoTkCYXOtVR9rfRLI0J/8Q==
dependencies:
caniuse-lite "^1.0.30000974"
electron-to-chromium "^1.3.150"
node-releases "^1.1.23"
bser@^2.0.0: bser@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719"
...@@ -2306,11 +2321,18 @@ camelcase@^4.1.0: ...@@ -2306,11 +2321,18 @@ camelcase@^4.1.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
camelcase@^5.3.1: camelcase@^5.0.0, camelcase@^5.3.1:
version "5.3.1" version "5.3.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
can-promise@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/can-promise/-/can-promise-0.0.1.tgz#7a7597ad801fb14c8b22341dfec314b6bd6ad8d3"
integrity sha512-gzVrHyyrvgt0YpDm7pn04MQt8gjh0ZAhN4ZDyCRtGl6YnuuK6b4aiUTD7G52r9l4YNmxfTtEscb92vxtAlL6XQ==
dependencies:
window-or-global "^1.0.1"
caniuse-api@^3.0.0: caniuse-api@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
...@@ -2326,6 +2348,11 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000918, caniuse-lite@^1.0.30000929, can ...@@ -2326,6 +2348,11 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000918, caniuse-lite@^1.0.30000929, can
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000962.tgz#6c10c3ab304b89bea905e66adf98c0905088ee44" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000962.tgz#6c10c3ab304b89bea905e66adf98c0905088ee44"
integrity sha512-WXYsW38HK+6eaj5IZR16Rn91TGhU3OhbwjKZvJ4HN/XBIABLKfbij9Mnd3pM0VEwZSlltWjoWg3I8FQ0DGgNOA== integrity sha512-WXYsW38HK+6eaj5IZR16Rn91TGhU3OhbwjKZvJ4HN/XBIABLKfbij9Mnd3pM0VEwZSlltWjoWg3I8FQ0DGgNOA==
caniuse-lite@^1.0.30000971, caniuse-lite@^1.0.30000974:
version "1.0.30000974"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000974.tgz#b7afe14ee004e97ce6dc73e3f878290a12928ad8"
integrity sha512-xc3rkNS/Zc3CmpMKuczWEdY2sZgx09BkAxfvkxlAEBTqcMHeL8QnPqhKse+5sRTi3nrw2pJwToD2WvKn1Uhvww==
capture-exit@^1.2.0: capture-exit@^1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f"
...@@ -2821,7 +2848,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: ...@@ -2821,7 +2848,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
safe-buffer "^5.0.1" safe-buffer "^5.0.1"
sha.js "^2.4.8" sha.js "^2.4.8"
create-react-class@^15.5.3, create-react-class@^15.6.0: create-react-class@^15.6.0:
version "15.6.3" version "15.6.3"
resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036"
integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg== integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==
...@@ -3166,6 +3193,13 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6. ...@@ -3166,6 +3193,13 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.
dependencies: dependencies:
ms "2.0.0" ms "2.0.0"
debug@=3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
dependencies:
ms "2.0.0"
debug@^3.1.0, debug@^3.2.5, debug@^3.2.6: debug@^3.1.0, debug@^3.2.5, debug@^3.2.6:
version "3.2.6" version "3.2.6"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
...@@ -3180,7 +3214,7 @@ debug@^4.0.1, debug@^4.1.0: ...@@ -3180,7 +3214,7 @@ debug@^4.0.1, debug@^4.1.0:
dependencies: dependencies:
ms "^2.1.1" ms "^2.1.1"
decamelize@^1.1.1, decamelize@^1.1.2: decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
...@@ -3350,6 +3384,11 @@ diffie-hellman@^5.0.0: ...@@ -3350,6 +3384,11 @@ diffie-hellman@^5.0.0:
miller-rabin "^4.0.0" miller-rabin "^4.0.0"
randombytes "^2.0.0" randombytes "^2.0.0"
dijkstrajs@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.1.tgz#d3cd81221e3ea40742cfcde556d4e99e98ddc71b"
integrity sha1-082BIh4+pAdCz83lVtTpnpjdxxs=
dir-glob@2.0.0: dir-glob@2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034"
...@@ -3405,11 +3444,6 @@ dom-converter@^0.2: ...@@ -3405,11 +3444,6 @@ dom-converter@^0.2:
dependencies: dependencies:
utila "~0.4" utila "~0.4"
dom-scroll-into-view@1.x:
version "1.2.1"
resolved "https://registry.yarnpkg.com/dom-scroll-into-view/-/dom-scroll-into-view-1.2.1.tgz#e8f36732dd089b0201a88d7815dc3f88e6d66c7e"
integrity sha1-6PNnMt0ImwIBqI14Fdw/iObWbH4=
dom-serializer@0: dom-serializer@0:
version "0.1.1" version "0.1.1"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0"
...@@ -3513,6 +3547,11 @@ electron-to-chromium@^1.3.103, electron-to-chromium@^1.3.124: ...@@ -3513,6 +3547,11 @@ electron-to-chromium@^1.3.103, electron-to-chromium@^1.3.124:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.125.tgz#dbde0e95e64ebe322db0eca764d951f885a5aff2" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.125.tgz#dbde0e95e64ebe322db0eca764d951f885a5aff2"
integrity sha512-XxowpqQxJ4nDwUXHtVtmEhRqBpm2OnjBomZmZtHD0d2Eo0244+Ojezhk3sD/MBSSe2nxCdGQFRXHIsf/LUTL9A== integrity sha512-XxowpqQxJ4nDwUXHtVtmEhRqBpm2OnjBomZmZtHD0d2Eo0244+Ojezhk3sD/MBSSe2nxCdGQFRXHIsf/LUTL9A==
electron-to-chromium@^1.3.150:
version "1.3.155"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.155.tgz#ebf0cc8eeaffd6151d1efad60fd9e021fb45fd3a"
integrity sha512-/ci/XgZG8jkLYOgOe3mpJY1onxPPTDY17y7scldhnSjjZqV6VvREG/LvwhRuV7BJbnENFfuDWZkSqlTh4x9ZjQ==
elliptic@^6.0.0: elliptic@^6.0.0:
version "6.4.1" version "6.4.1"
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a"
...@@ -4262,7 +4301,14 @@ flush-write-stream@^1.0.0: ...@@ -4262,7 +4301,14 @@ flush-write-stream@^1.0.0:
inherits "^2.0.3" inherits "^2.0.3"
readable-stream "^2.3.6" readable-stream "^2.3.6"
follow-redirects@^1.0.0, follow-redirects@^1.3.0: follow-redirects@1.5.10:
version "1.5.10"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
dependencies:
debug "=3.1.0"
follow-redirects@^1.0.0:
version "1.7.0" version "1.7.0"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76"
integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ== integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==
...@@ -4327,7 +4373,7 @@ form-data@~2.3.2: ...@@ -4327,7 +4373,7 @@ form-data@~2.3.2:
combined-stream "^1.0.6" combined-stream "^1.0.6"
mime-types "^2.1.12" mime-types "^2.1.12"
formik@^1.5.4: formik@^1.5.7:
version "1.5.7" version "1.5.7"
resolved "https://registry.yarnpkg.com/formik/-/formik-1.5.7.tgz#2fc5fc2f0c693cdc4e8c9dad3a10eb4c4e131ff5" resolved "https://registry.yarnpkg.com/formik/-/formik-1.5.7.tgz#2fc5fc2f0c693cdc4e8c9dad3a10eb4c4e131ff5"
integrity sha512-kZo8lS4WzfC2uivnSkE9DOuX9x+jVjCtIZOlb1A4lHGeURyuLt6eDfwGJzNlcP0lXIwmpANKzegiB8j60B54TA== integrity sha512-kZo8lS4WzfC2uivnSkE9DOuX9x+jVjCtIZOlb1A4lHGeURyuLt6eDfwGJzNlcP0lXIwmpANKzegiB8j60B54TA==
...@@ -5255,7 +5301,7 @@ is-buffer@^1.0.2, is-buffer@^1.1.5: ...@@ -5255,7 +5301,7 @@ is-buffer@^1.0.2, is-buffer@^1.1.5:
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
is-buffer@^2.0.0: is-buffer@^2.0.0, is-buffer@^2.0.2:
version "2.0.3" version "2.0.3"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725"
integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==
...@@ -5551,6 +5597,11 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: ...@@ -5551,6 +5597,11 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
isarray@^2.0.1:
version "2.0.4"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.4.tgz#38e7bcbb0f3ba1b7933c86ba1894ddfc3781bbb7"
integrity sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==
isemail@3.x.x: isemail@3.x.x:
version "3.2.0" version "3.2.0"
resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.2.0.tgz#59310a021931a9fb06bbb51e155ce0b3f236832c" resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.2.0.tgz#59310a021931a9fb06bbb51e155ce0b3f236832c"
...@@ -6731,6 +6782,15 @@ min-document@^2.19.0: ...@@ -6731,6 +6782,15 @@ min-document@^2.19.0:
dependencies: dependencies:
dom-walk "^0.1.0" dom-walk "^0.1.0"
mini-create-react-context@^0.3.0:
version "0.3.2"
resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz#79fc598f283dd623da8e088b05db8cddab250189"
integrity sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw==
dependencies:
"@babel/runtime" "^7.4.0"
gud "^1.0.0"
tiny-warning "^1.0.2"
mini-css-extract-plugin@0.5.0: mini-css-extract-plugin@0.5.0:
version "0.5.0" version "0.5.0"
resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz#ac0059b02b9692515a637115b0cc9fed3a35c7b0" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz#ac0059b02b9692515a637115b0cc9fed3a35c7b0"
...@@ -7043,6 +7103,13 @@ node-releases@^1.1.14, node-releases@^1.1.3: ...@@ -7043,6 +7103,13 @@ node-releases@^1.1.14, node-releases@^1.1.3:
dependencies: dependencies:
semver "^5.3.0" semver "^5.3.0"
node-releases@^1.1.23:
version "1.1.23"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.23.tgz#de7409f72de044a2fa59c097f436ba89c39997f0"
integrity sha512-uq1iL79YjfYC0WXoHbC/z28q/9pOl8kSHaXdWmAAc8No+bDwqkZbzIJz55g/MUsPgSGm9LZ7QSUbzTcH5tz47w==
dependencies:
semver "^5.3.0"
node-sass@^4.11.0: node-sass@^4.11.0:
version "4.11.0" version "4.11.0"
resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.11.0.tgz#183faec398e9cbe93ba43362e2768ca988a6369a" resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.11.0.tgz#183faec398e9cbe93ba43362e2768ca988a6369a"
...@@ -7703,6 +7770,11 @@ pn@^1.1.0: ...@@ -7703,6 +7770,11 @@ pn@^1.1.0:
resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==
pngjs@^3.3.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==
pnp-webpack-plugin@1.2.1: pnp-webpack-plugin@1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.2.1.tgz#cd9d698df2a6fcf7255093c1c9511adf65b9421b" resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.2.1.tgz#cd9d698df2a6fcf7255093c1c9511adf65b9421b"
...@@ -8352,6 +8424,15 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.5, ...@@ -8352,6 +8424,15 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.5,
source-map "^0.6.1" source-map "^0.6.1"
supports-color "^6.1.0" supports-color "^6.1.0"
postcss@^7.0.16:
version "7.0.17"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f"
integrity sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==
dependencies:
chalk "^2.4.2"
source-map "^0.6.1"
supports-color "^6.1.0"
prelude-ls@~1.1.2: prelude-ls@~1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
...@@ -8531,6 +8612,17 @@ q@^1.1.2: ...@@ -8531,6 +8612,17 @@ q@^1.1.2:
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
qrcode@^1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.3.3.tgz#5ef50c0c890cffa1897f452070f0f094936993de"
integrity sha512-SH7V13AcJusH3GT8bMNOGz4w0L+LjcpNOU/NiOgtBhT/5DoWeZE6D5ntMJnJ84AMkoaM4kjJJoHoh9g++8lWFg==
dependencies:
can-promise "0.0.1"
dijkstrajs "^1.0.1"
isarray "^2.0.1"
pngjs "^3.3.0"
yargs "^12.0.5"
qs@6.5.2, qs@~6.5.2: qs@6.5.2, qs@~6.5.2:
version "6.5.2" version "6.5.2"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
...@@ -8639,19 +8731,6 @@ rc-collapse@~1.9.1: ...@@ -8639,19 +8731,6 @@ rc-collapse@~1.9.1:
prop-types "^15.5.6" prop-types "^15.5.6"
rc-animate "2.x" rc-animate "2.x"
rc-form@^2.4.4:
version "2.4.4"
resolved "https://registry.yarnpkg.com/rc-form/-/rc-form-2.4.4.tgz#ac0f3cc643724991c742d5ae6742777fbc0bcfbb"
integrity sha512-AHR2GGYJOlKG5jP6ZjqS+PVBrUUXt+kDJFgJeDw17k6RDVIrG1535MxDPgNmRXp2VM4GQij4sVvjaHvwFsUgCA==
dependencies:
async-validator "~1.8.5"
babel-runtime "6.x"
create-react-class "^15.5.3"
dom-scroll-into-view "1.x"
hoist-non-react-statics "^3.3.0"
lodash "^4.17.4"
warning "^4.0.3"
rc-gesture@~0.0.18, rc-gesture@~0.0.22: rc-gesture@~0.0.18, rc-gesture@~0.0.22:
version "0.0.22" version "0.0.22"
resolved "https://registry.yarnpkg.com/rc-gesture/-/rc-gesture-0.0.22.tgz#fbcbdd5b46387a978b3ede48b42748e8ff77dddd" resolved "https://registry.yarnpkg.com/rc-gesture/-/rc-gesture-0.0.22.tgz#fbcbdd5b46387a978b3ede48b42748e8ff77dddd"
...@@ -8840,29 +8919,29 @@ react-redux@^7.0.2: ...@@ -8840,29 +8919,29 @@ react-redux@^7.0.2:
prop-types "^15.7.2" prop-types "^15.7.2"
react-is "^16.8.6" react-is "^16.8.6"
react-router-dom@^5.0.0: react-router-dom@^5.0.1:
version "5.0.0" version "5.0.1"
resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.0.0.tgz#542a9b86af269a37f0b87218c4c25ea8dcf0c073" resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.0.1.tgz#ee66f4a5d18b6089c361958e443489d6bab714be"
integrity sha512-wSpja5g9kh5dIteZT3tUoggjnsa+TPFHSMrpHXMpFsaHhQkm/JNVGh2jiF9Dkh4+duj4MKCkwO6H08u6inZYgQ== integrity sha512-zaVHSy7NN0G91/Bz9GD4owex5+eop+KvgbxXsP/O+iW1/Ln+BrJ8QiIR5a6xNPtrdTvLkxqlDClx13QO1uB8CA==
dependencies: dependencies:
"@babel/runtime" "^7.1.2" "@babel/runtime" "^7.1.2"
history "^4.9.0" history "^4.9.0"
loose-envify "^1.3.1" loose-envify "^1.3.1"
prop-types "^15.6.2" prop-types "^15.6.2"
react-router "5.0.0" react-router "5.0.1"
tiny-invariant "^1.0.2" tiny-invariant "^1.0.2"
tiny-warning "^1.0.0" tiny-warning "^1.0.0"
react-router@5.0.0: react-router@5.0.1:
version "5.0.0" version "5.0.1"
resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.0.0.tgz#349863f769ffc2fa10ee7331a4296e86bc12879d" resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.0.1.tgz#04ee77df1d1ab6cb8939f9f01ad5702dbadb8b0f"
integrity sha512-6EQDakGdLG/it2x9EaCt9ZpEEPxnd0OCLBHQ1AcITAAx7nCnyvnzf76jKWG1s2/oJ7SSviUgfWHofdYljFexsA== integrity sha512-EM7suCPNKb1NxcTZ2LEOWFtQBQRQXecLxVpdsP4DW4PbbqYWeRiLyV/Tt1SdCrvT2jcyXAXmVTmzvSzrPR63Bg==
dependencies: dependencies:
"@babel/runtime" "^7.1.2" "@babel/runtime" "^7.1.2"
create-react-context "^0.2.2"
history "^4.9.0" history "^4.9.0"
hoist-non-react-statics "^3.1.0" hoist-non-react-statics "^3.1.0"
loose-envify "^1.3.1" loose-envify "^1.3.1"
mini-create-react-context "^0.3.0"
path-to-regexp "^1.7.0" path-to-regexp "^1.7.0"
prop-types "^15.6.2" prop-types "^15.6.2"
react-is "^16.6.0" react-is "^16.6.0"
...@@ -10917,13 +10996,6 @@ warning@^3.0.0: ...@@ -10917,13 +10996,6 @@ warning@^3.0.0:
dependencies: dependencies:
loose-envify "^1.0.0" loose-envify "^1.0.0"
warning@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
dependencies:
loose-envify "^1.0.0"
watch@~0.18.0: watch@~0.18.0:
version "0.18.0" version "0.18.0"
resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986"
...@@ -11131,6 +11203,11 @@ wide-align@^1.1.0: ...@@ -11131,6 +11203,11 @@ wide-align@^1.1.0:
dependencies: dependencies:
string-width "^1.0.2 || 2" string-width "^1.0.2 || 2"
window-or-global@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/window-or-global/-/window-or-global-1.0.1.tgz#dbe45ba2a291aabc56d62cf66c45b7fa322946de"
integrity sha1-2+RboqKRqrxW1iz2bEW3+jIpRt4=
wordwrap@~0.0.2: wordwrap@~0.0.2:
version "0.0.3" version "0.0.3"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
...@@ -11368,6 +11445,14 @@ yargs-parser@^10.1.0: ...@@ -11368,6 +11445,14 @@ yargs-parser@^10.1.0:
dependencies: dependencies:
camelcase "^4.1.0" camelcase "^4.1.0"
yargs-parser@^11.1.1:
version "11.1.1"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"
integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==
dependencies:
camelcase "^5.0.0"
decamelize "^1.2.0"
yargs-parser@^5.0.0: yargs-parser@^5.0.0:
version "5.0.0" version "5.0.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"
...@@ -11418,6 +11503,24 @@ yargs@^11.0.0: ...@@ -11418,6 +11503,24 @@ yargs@^11.0.0:
y18n "^3.2.1" y18n "^3.2.1"
yargs-parser "^9.0.2" yargs-parser "^9.0.2"
yargs@^12.0.5:
version "12.0.5"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==
dependencies:
cliui "^4.0.0"
decamelize "^1.2.0"
find-up "^3.0.0"
get-caller-file "^1.0.1"
os-locale "^3.0.0"
require-directory "^2.1.1"
require-main-filename "^1.0.1"
set-blocking "^2.0.0"
string-width "^2.0.0"
which-module "^2.0.0"
y18n "^3.2.1 || ^4.0.0"
yargs-parser "^11.1.1"
yargs@^7.0.0: yargs@^7.0.0:
version "7.1.0" version "7.1.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment