Commit 6d7eb011 by xuzhenghua

kanjia

parent 9544334e
......@@ -162,7 +162,20 @@
margin-top: 10px;
}
button {
.artifact-btn {
float: right;
position: relative;
top: -20px;
width: 61px;
height: 24px;
background: $bg_FF4000;
border-radius: 12px;
font-size: 12px;
border: none;
color: $white;
}
.active-btn {
width: 210px;
height: 30px;
box-shadow: 0px 1px 3px 0px rgba(255, 64, 0, 0.5);
......@@ -175,10 +188,14 @@
}
.invalid-btn {
width: 210px;
height: 30px;
background: $bg_999;
color: $white;
font-size: 16px;
box-shadow: none;
border-radius: 15px;
border: none;
}
}
}
......@@ -273,7 +290,7 @@
.subtitle {
font-size: $font_14;
color: #FF4000;
color: $color_FF4000;
}
}
......@@ -294,6 +311,9 @@
border: none;
color: $color_FF4000;
-webkit-appearance: none;
display: inline-block;
text-align: center;
line-height: 30px;
}
.btns {
......@@ -304,14 +324,23 @@
width: 80px;
height: 30px;
background: $bg_FADD29;
text-align: center;
line-height: 28px;
border: none;
color: $color_FF4000;
-webkit-appearance: none;
}
.invalid {
width: 80px;
height: 30px;
background: $bg_999;
color: $white;
border: none;
-webkit-appearance: none;
border-radius: 2px;
}
.purchase-btn {
......@@ -372,9 +401,11 @@
line-height: 12px;
}
button {
.bargain-href {
display: inline-block;
width: 260px;
height: 30px;
line-height: 28px;
background-color: $bg_FADD29;
color: $color_FF4000;
font-size: 16px;
......@@ -538,3 +569,141 @@
}
.close-bargain-success {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.bargain-success {
width: 290px;
height: 109px;
padding: 15px;
background: $white;
border-radius: 5px;
text-align: center;
margin: 100px auto 20px auto;
position: relative;
p:nth-of-type(2) {
font-size: 14px;
margin-top: 10px;
}
p:nth-of-type(1) {
font-size: 12px;
margin-top: 10px;
}
.indicator {
color: $color_FE2F2F;
}
.iconyindao {
display: inline-block;
width: 60px;
height: 44px;
position: absolute;
top: -60px;
right: 0;
color: $white;
font-size: 40px;
}
.moreMbc {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, .6);
z-index: 2;
.content {
width: 300px;
height: 340px;
background-color: $white;
border-radius: 3px;
margin: 130px auto 20px auto;
position: relative;
.title-box {
width: 100%;
height: 45px;
text-align: center;
color: $color_202426;
font-size: 16px;
line-height: 45px;
}
.more-bargain-list {
width: 100%;
height: 253px;
overflow: auto;
border-top: 1px solid $sp_e7eaf1;
padding: 0 15px;
background-color: $bg_f5f5f5;
.bargain-item {
border-bottom: 1px solid $sp_e7eaf1;
height: 50px;
display: flex;
position: relative;
.avatar {
width: 30px;
height: 30px;
border-radius: 50%;
margin-top: 10px;
margin-right: 10px;
}
.name {
font-size: 14px;
color: $color_333;
max-width: 130px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
line-height: 50px;
}
.bargain-status {
line-height: 50px;
color: $color_333;
font-size: 14px;
position: absolute;
right: 0;
}
}
}
}
.more-bargain-dec {
width: 100%;
position: absolute;
bottom: 0;
height: 42px;
font-size: 12px;
color: $color_FF4000;
text-align: center;
line-height: 42px;
}
.close {
color: #fff;
font-size: 22px;
position: relative;
left: 50%;
margin-left: -11px;
}
}
}
import React, {Component, useState} from 'react'
import React, {Component} from 'react'
import './bargain-middle-page.scss'
import classnames from 'classnames'
import {HeaderBar, VList} from '@common'
import {Course} from '@common'
import {api, getParam, http} from "@/utils"
import {Flex, Toast} from "antd-mobile"
import {api, getParam, http, browser} from "@/utils"
import {Toast} from "antd-mobile"
import {Link, withRouter} from "react-router-dom"
import Ranking from './ranking'
import {differenceInSeconds, differenceInMinutes, differenceInHours} from "date-fns"
import {differenceInSeconds, differenceInMinutes, differenceInHours, differenceInDays} from "date-fns"
import Overlay from '../detail/overlay'
import {compose} from "redux"
import {connect} from "react-redux";
class BargainMiddlePage extends Component {
......@@ -18,7 +18,7 @@ class BargainMiddlePage extends Component {
super(props)
this.state = {
isShowOverlay: false,
isOriginator: getParam('is_originator'),
isOriginator: '',
kanjiaIcon: require('./image/kanjia_icon.png'),
courseList: '', // 所有砍价课程
data: '',
......@@ -31,12 +31,17 @@ class BargainMiddlePage extends Component {
status: '',
hour: '',
min: '',
sec: ''
sec: '',
day: '',
amount: '',
firendBaigainPrice: true,
isshowYindao: false,
isLoaidng: true
}
}
componentDidMount() {
this.getBargainRankList('144', 1)
this.getBargainRankList(getParam('id'), 1)
this.getBargainCourse()
this.getBargainInfo()
}
......@@ -48,6 +53,7 @@ class BargainMiddlePage extends Component {
if (res.data.code === 200) {
this.setState({
data: res.data.data,
isOriginator: res.data.data.is_originator,
originatorUid: res.data.data.originator_uid,
limitPeople: res.data.data.course.limit_people,
bargainData: res.data.data.bargain,
......@@ -151,52 +157,54 @@ class BargainMiddlePage extends Component {
type: type, // 1 用户自己砍价 2 使用砍价神器 3 好友助力砍价 4 好友第二次助力
parent_uid: uid // 被助力人id 【自己本人操作传0】
}
http.post(`${api.home}/m/to_bargain`, data).then((res) => {
http.post(`${api.home}/m/bargain/toBargain`, data).then((res) => {
if (res.data.code === 200) {
this.getBargainInfo()
// is_success =0一切正常 =1 不能在砍了 =2关注公众号,可以再砍一刀!
this.setState({
amount: res.data.data.amount
})
if (type === 2) {
this.setState({
isShowOverlay: true,
status: 6
})
}
if (type === 3) {
this.userStatus()
}
if (type === 4) {
if (res.data.data.is_success === 1) {
this.setState({
isShowOverlay: true,
status: 3
status: 4
})
} else if (res.data.data.is_success === 2) {
if (type === 3) {
this.setState({
isShowOverlay: true,
status: 2
})
} else if (type === 4) {
this.setState({
isShowOverlay: true,
status: 1,
firendBaigainPrice: false
})
}
} else if (res.data.data.is_success === 0) {
if (type === 3) {
this.setState({
isShowOverlay: true,
status: 2
})
} else if (type === 4) {
this.setState({
isShowOverlay: true,
status: 3
})
}
}
// this.setState({
// isShowOverlay: true,
// status: 4
// })
this.getBargainInfo()
} else {
Toast.info(res.data.msg, 2)
}
})
}
// 获取用户状态
userStatus = () => {
http.get(`${api.home}/sys/userStatus`).then((res) => {
if (res.data.code === 200) {
// 0-都没绑定 1-只绑定公众号 2-只绑定手机号 3-都绑定
if (res.data.data.status === 0 || res.data.data.status === 2) {
this.setState({
isShowOverlay: true,
status: 1
})
} else {
this.setState({
isShowOverlay: true,
status: 2
})
}
} else {
Toast.info(res.data.msg, 2)
}
......@@ -214,6 +222,14 @@ class BargainMiddlePage extends Component {
this.toKanjia(getParam('id'), 4, this.state.originatorUid)
}
// 邀请好友砍价
shareFriendBargain = () => {
this.setState({
isShowOverlay: true,
status: 7,
isshowYindao: browser.isWeixin ? true : false
})
}
// 关闭弹窗
close = () => {
......@@ -224,7 +240,6 @@ class BargainMiddlePage extends Component {
}
render() {
let h, m, s
if (this.state.bargainData.expire_time) {
let date = this.state.bargainData.expire_time * 1000
......@@ -233,11 +248,13 @@ class BargainMiddlePage extends Component {
date -= 1000
let s = differenceInSeconds(new Date(date), now) % 60,
m = differenceInMinutes(new Date(date), now) % 60,
h = differenceInHours(new Date(date), now) % 24
h = differenceInHours(new Date(date), now) % 24,
d = differenceInDays(new Date(date), now) % 24
this.setState({
hour: h,
min: m,
sec: s
sec: s,
day: d
})
}, 1000)
......@@ -252,40 +269,44 @@ class BargainMiddlePage extends Component {
className={'indicator'}>【砍价神器】</span></div>
} else if (this.state.bargainData.is_artifact === 1) {
thirdRow = <div>恭喜你获得<span className={'indicator'}>【砍价神器】</span></div>
btn = <button onClick={this.toArtifact}>立即领取</button>
btn = <button className={'artifact-btn'} onClick={this.toArtifact}>立即领取</button>
} else if (this.state.bargainData.is_artifact === 2) {
thirdRow = <div>恭喜你获得<span className={'indicator'}>【砍价神器】</span></div>
btn = <button onClick={this.useArtifact}>立即使用</button>
btn = <button className={'artifact-btn'} onClick={this.useArtifact}>立即使用</button>
}
let bargainBtn
if (this.state.isOriginator === '2' && this.state.data.assist_status === 0) {
bargainBtn = <button onClick={this.friendBargainFirst}>帮好友砍一刀</button>
} else if (this.state.isOriginator === '2' && this.state.data.assist_status === 1) {
bargainBtn = <button onClick={this.friendBargainSecond}>再砍一刀</button>
} else if (this.state.isOriginator === '2' && this.state.data.assist_status === 2) {
if (this.state.isOriginator !== 1 && this.state.data.assist_status === 0 && this.state.data.bargain_status === 0) {
bargainBtn = <button className='active-btn' onClick={this.friendBargainFirst}>帮好友砍一刀</button>
} else if (this.state.isOriginator !== 1 && this.state.data.assist_status === 1) {
bargainBtn = <button className='active-btn' onClick={this.friendBargainSecond}>再砍一刀</button>
} else if (this.state.isOriginator !== 1 && this.state.data.assist_status === 2) {
bargainBtn = <button className={'invalid-btn'}>已帮好友助力</button>
} else if (this.state.data.bargain_status === 1 || this.state.data.bargain_status === 2) {
bargainBtn = <button className={'invalid-btn'}>砍价结束</button>
} else if (this.state.isOriginator === '1' && this.state.data.bargain_status === 0) {
bargainBtn = <button>邀请好友砍价</button>
} else if (this.state.isOriginator === 1 && this.state.data.bargain_status === 0) {
bargainBtn = <button className='active-btn' onClick={this.shareFriendBargain}>邀请好友砍价</button>
}
return (
<div className={'bargain-middle-page'}>
<HeaderBar title='砍价详情' arrow={true} cart={true}></HeaderBar>
{/*<Loading isLoading={this.state.isLoaidng}>*/}
<div className="top">
<div className="bargain-area">
{
this.state.isOriginator === '2' &&
this.state.isOriginator !== 1 &&
<p className='bargain-tip'>你的好友发现一门精品课程,快来一起帮他砍价:</p>
}
<ul>
<VList
info={<CourseDes data={this.state.data} toCart={this.toCart}/>}
info={<CourseDes
isOriginator={this.state.isOriginator}
data={this.state.data}
toCart={this.toCart}/>}
/>
</ul>
<div className="bargain-detail">
......@@ -296,7 +317,6 @@ class BargainMiddlePage extends Component {
{
this.state.data.bargain_status === 0 &&
<div>
{this.state.time}
<span
className={'time hour'}>{String(this.state.hour).padStart(2, 0)}</span> :&nbsp;
<span
......@@ -306,7 +326,7 @@ class BargainMiddlePage extends Component {
</div>
}
{
this.state.data.bargain_status === 1 && this.state.isOriginator === '1' &&
this.state.data.bargain_status === 1 && this.state.isOriginator === 1 &&
<span className={'inactive'}>砍价结束</span>
}
......@@ -315,22 +335,23 @@ class BargainMiddlePage extends Component {
<span style={{width: this.state.width}}></span>
</div>
{
this.state.isOriginator === '1' && this.state.data.bargain_status === 0 &&
this.state.isOriginator === 1 && this.state.data.bargain_status === 0 &&
<div>
<div className='third-row'>
{thirdRow}
</div>
<div>
{btn}
</div>
{thirdRow}
{btn}
</div>
}
{
this.state.isOriginator === '1' && this.state.data.bargain_status === 1 &&
this.state.isOriginator === 1 && this.state.data.bargain_status === 1 &&
<div>
砍价金额将于
{h} : {m} : {s}
<span className={'time hour'}>{String(this.state.day).padStart(2, 0)}</span><span
className={'unit'}> </span>
<span className={'time min'}>{String(this.state.hour).padStart(2, 0)}</span><span
className={'unit'}> </span>
<span className={'time sec'}>{String(this.state.min).padStart(2, 0)}</span><span
className={'unit'}></span>
后清零,请尽快完成支付
</div>
}
......@@ -367,7 +388,7 @@ class BargainMiddlePage extends Component {
<div className="more" onClick={this.getMore}>查看更多>></div>
</div>
</div>
<div className="bargain-course-list">
<div className="bargain-course-list" id='bargainCourse'>
<div className="title-wrapper">
<div className="title">我要砍价</div>
<div className="subtitle">邀请{this.state.limitPeople}位以上好友帮忙砍价可获得【砍价神器】</div>
......@@ -403,26 +424,40 @@ class BargainMiddlePage extends Component {
this.state.isShowOverlay &&
<Overlay>
{/*砍价成功去分享*/}
{
this.state.status === 7 &&
<BargainSuccess isshowYindao={this.state.isshowYindao} limitPeople={this.state.limitPeople}
close={this.close}/>
}
{/*引导关注公众号*/}
{
this.state.status === 1 &&
<PublicNumber/>
<PublicNumber
money={this.state.amount}
avatar={this.props.user.data.avatar}
firendBaigainPrice={this.state.firendBaigainPrice}/>
}
{/*好友成功砍第一刀*/}
{
this.state.status === 2 &&
<BargainFirst bargainSecond={this.friendBargainSecond}/>
<BargainFirst
bargainSecond={this.friendBargainSecond}
money={this.state.amount}
/>
}
{/*好友成功砍第二刀*/}
{
this.state.status === 3 &&
<BargainSecond/>
<BargainSecond close={this.close} money={this.state.amount}/>
}
{/*不能在砍了*/}
{
this.state.status === 4 &&
<NotBargain/>
<NotBargain close={this.close} limitPeople={this.state.limitPeople}/>
}
{/*领取砍价神器*/}
{
......@@ -432,17 +467,18 @@ class BargainMiddlePage extends Component {
{/*使用砍价神器*/}
{
this.state.status === 6 &&
<UseArtifact toCart={this.toCart}/>
<UseArtifact toCart={this.toCart} money={this.state.amount}
allMoney={this.state.bargainData.bargain_price}/>
}
{
this.state.status !== 0 &&
this.state.status !== 7 &&
<i onClick={this.close} className={'iconfont iconiconfront-2 bargain-close'}></i>
}
</Overlay>
}
{/*</Loading>*/}
</div>
);
......@@ -457,11 +493,13 @@ function CourseDes(props) {
{data.course_title}
</div>
<div className="price-bar">
<span className={'discount-price'}>{data.pay_price}</span>
<span className={'original-price'}>{data.course_price}</span>
<button className={'purchase-btn'}
onClick={props.toCart}>¥{data.pay_price}去支付
</button>
<span className={'discount-price'}>{data.course_price}</span>
{
props.isOriginator === 1 &&
<button className={'purchase-btn'}
onClick={props.toCart}>¥{data.pay_price}去支付
</button>
}
</div>
</div>
)
......@@ -469,16 +507,27 @@ function CourseDes(props) {
function CourseBottom(props) {
let Buttons
if (props.item.bargain_status === 0) {
Buttons = <button className={'bargain'}>我要砍价</button>
if (props.item.bargain_status === 2) {
Buttons = <Link to={`/detail?id=${props.item.course_id}`} className={'bargain'}>我要砍价</Link>
} else if (props.item.bargain_status === 3) {
Buttons = <button className={'bargain'}>去学习</button>
Buttons = <Link to={`/play?id=${props.item.course_id}`} className={'bargain'}>去学习</Link>
} else {
Buttons = (
<div className="btns">
<button className={classnames('bargain-btn', {
invalid: props.item.bargain_status === 2
})}>{props.item.bargain_status === 2 ? '砍价结束' : '继续砍价'}</button>
{/*<button className={classnames('bargain-btn', {invalid: props.item.bargain_status === 2})}>*/}
{/*{props.item.bargain_status === 2 ? '砍价结束' : '继续砍价'}*/}
{/*</button>*/}
{
props.item.bargain_status === 1 &&
<button className='invalid'>砍价结束</button>
}
{
props.item.bargain_status === 0 &&
<Link to={`/detail?id=${props.item.course_id}`} className={'bargain-btn'}>继续砍价</Link>
}
<button onClick={props.toCart}
className={'purchase-btn'}>¥{props.item.pay_price}去支付
</button>
......@@ -497,12 +546,16 @@ function CourseBottom(props) {
}
function PublicNumber() {
function PublicNumber(props) {
return (
<div className='bargain-public-number'>
<img className='avait' src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/tinypng-common/right_weixin.png"
alt=""/>
<p className='status-title ff4'>谢谢你帮我砍了5.6元!</p>
<img className='avait' src={props.avatar} alt=""/>
{
props.firendBaigainPrice &&
<p className='status-title ff4'>谢谢你帮我砍了{props.money}元!</p>
}
<p className='status-dec'>关注公众号,可以再砍一刀哦~</p>
<img className='public-number-img'
src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/tinypng-common/right_weixin.png" alt=""/>
......@@ -514,38 +567,34 @@ function BargainFirst(props) {
return (
<div className='bargain-first'>
<img className='top-img' src={require('./image/kanjia_cg_icon.png')} alt=""/>
<p className='status-title'>谢谢你帮我砍了<span className='ff4'>5.6</span>!</p>
<p className='status-title'>谢谢你帮我砍了<span className='ff4'>{props.money}</span>!</p>
<p className='status-dec'>你还可以帮我再砍一刀哦~</p>
<button onClick={props.bargainSecond}>再砍一刀</button>
<button className='bargain-href' onClick={props.bargainSecond}>再砍一刀</button>
</div>
)
}
function BargainSecond() {
function BargainSecond(props) {
return (
<div className='bargain-second'>
<img className='top-img' src={require('./image/kanjia_cg_icon.png')} alt=""/>
<p className='status-title'>厉害了,又帮好友砍掉<span className='ff4'>5.6</span>!</p>
<button>我也要砍价</button>
<p className='status-title'>厉害了,又帮好友砍掉<span className='ff4'>{props.money}</span>!</p>
<a className='bargain-href' href='#bargainCourse' onClick={props.close}>我也要砍价</a>
</div>
)
}
function NotBargain() {
function NotBargain(props) {
return (
<div className='not-bargain'>
<img className='middle-img' src={require('./image/kanjia_no_iccon.png')} alt=""/>
<p className='status-title'>你的好友用【砍价神器】把我砍蒙圈了<br/>不能再砍了哦~</p>
<p className='status-dec'>邀请20位以上好友帮忙砍价可获得【砍价神器】</p>
<button>我也要砍价</button>
<p className='status-dec'>邀请{props.limitPeople}位以上好友帮忙砍价可获得【砍价神器】</p>
<a className='bargain-href' href='#bargainCourse' onClick={props.close}>我也要砍价</a>
</div>
)
}
{/*领取砍价神器*/
}
function Artifact(props) {
return (
<div className='artifact-box'>
......@@ -564,10 +613,10 @@ function UseArtifact(props) {
return (
<div className='use-artifact-box'>
<img className='top-img' src={require('./image/kanjia_cg_icon.png')} alt=""/>
<p className='top-tip'>厉害了,又砍掉了10元!</p>
<p className='top-tip'>厉害了,又砍掉了{props.money}元!</p>
<p className='middle-tip'>
你已经砍了
<span className={'indicator'}>109</span>
<span className={'indicator'}>{props.allMoney}</span>
没见过你这么能砍的人...
</p>
<p className='btm-tip'>
......@@ -579,6 +628,29 @@ function UseArtifact(props) {
}
function BargainSuccess(props) {
return (
<div>
<div className='close-bargain-success' onClick={props.close}></div>
<div className="bargain-success">
{
props.isshowYindao &&
<i className='iconfont iconyindao'></i>
}
<p>分享到微信群邀请更多好友帮忙砍价</p>
<p>超过{props.limitPeople}位好友助力可获得<span className={'indicator'} style={{color: '#FF4000'}}>【砍价神器】</span>
</p>
</div>
</div>
)
}
export default compose(
connect(
state => ({user: state.user}),
null
),
withRouter
)(BargainMiddlePage)
......@@ -99,7 +99,10 @@
color: $color_FF4000;
font-size: 12px;
text-align: center;
line-height: 48px;
padding-top: 10px;
.unit {
color: $color_333;
}
.time {
display: inline-block;
......
......@@ -3,7 +3,7 @@ import './bargain.scss'
import {Flex, Toast} from "antd-mobile"
import Overlay from '../overlay'
import BargainInfo from './bargainInfo'
import {differenceInSeconds, differenceInMinutes, differenceInHours} from "date-fns"
import {differenceInSeconds, differenceInMinutes, differenceInHours, differenceInDays} from "date-fns"
import {api, getParam, http} from "@/utils"
import Ranking from "@/components/bargainMiddlePage/ranking"
import {compose} from "redux"
......@@ -77,6 +77,7 @@ class Bargain extends Component {
isShowMore: true
})
}
// 自组件传给父组件的boxHide
boxHide = (val) => {
this.setState({isShowMore: val})
......@@ -125,22 +126,7 @@ class Bargain extends Component {
// 我要砍价
iWantBargain = () => {
// 判断用户是否绑定了手机号
http.get(`${api.home}/sys/userStatus`).then((res) => {
if (res.data.code === 200) {
// 0-都没绑定 1-只绑定公众号 2-只绑定手机号 3-都绑定
if (res.data.data.status === 0 || res.data.data.status === 1) {
this.setState({
isShowOverlay: true,
status: 3,
})
} else {
this.toKanjia(getParam('id'), 1, 0)
}
} else {
Toast.info(res.data.msg, 2)
}
})
this.toKanjia(getParam('id'), 1, 0)
}
// 砍价接口
......@@ -150,15 +136,23 @@ class Bargain extends Component {
type: type, // 1 用户自己砍价 2 使用砍价神器 3 好友助力砍价 4 好友第二次助力
parent_uid: uid // 被助力人id 【自己本人操作传0】
}
http.post(`${api.home}/m/to_bargain`, data).then((res) => {
http.post(`${api.home}/m/bargain/toBargain`, data).then((res) => {
if (res.data.code === 200) {
// this.getBargainInfo()
document.location.reload()
if (type === 2) {
this.setState({
isShowOverlay: true,
status: 2,
})
} else {
if (res.data.data.user_status === 2) {
this.setState({
isShowOverlay: true,
status: 3,
})
} else {
// this.getBargainInfo()
document.location.reload()
}
}
} else {
......@@ -206,11 +200,6 @@ class Bargain extends Component {
<BargainInfo/>
}
{/*砍价成功去分享*/}
{
this.state.status === 0 &&
<BargainSuccess/>
}
{/*领取砍价神器*/}
......@@ -266,9 +255,10 @@ function BargainIntro(props) {
function BargainStatus(props) {
const [hour, setHour] = useState()
const [min, setMin] = useState()
const [sec, setSec] = useState()
const [day, setDay] = useState(0)
const [hour, setHour] = useState(0)
const [min, setMin] = useState(0)
const [sec, setSec] = useState(0)
let thirdRow, btn
......@@ -293,6 +283,7 @@ function BargainStatus(props) {
setSec(differenceInSeconds(new Date(date), now) % 60)
setMin(differenceInMinutes(new Date(date), now) % 60)
setHour(differenceInHours(new Date(date), now) % 24)
setDay(differenceInDays(new Date(date), now) % 24)
}, 1000)
......@@ -308,9 +299,9 @@ function BargainStatus(props) {
<div className={'first-row'}>
<div>
已砍<span className={'indicator'}>{props.info.bargain_price}</span>
<span className={'time hour'}>{String(hour).padStart(2,0)}</span> :&nbsp;
<span className={'time min'}>{String(min).padStart(2,0)}</span> :&nbsp;
<span className={'time sec'}>{String(sec).padStart(2,0)}</span>
<span className={'time hour'}>{String(hour).padStart(2, 0)}</span> :&nbsp;
<span className={'time min'}>{String(min).padStart(2, 0)}</span> :&nbsp;
<span className={'time sec'}>{String(sec).padStart(2, 0)}</span>
<span className='over'>后砍价结束</span>
</div>
<div onClick={props.getMore}>{props.info.assist_num}位好友助力></div>
......@@ -352,9 +343,12 @@ function BargainStatus(props) {
</div>
<div className="time-tobuy">
砍价金额将于
<span className={'time hour'}>{String(hour).padStart(2,0)}</span> :&nbsp;
<span className={'time min'}>{String(min).padStart(2,0)}</span> :&nbsp;
<span className={'time sec'}>{String(sec).padStart(2,0)}</span>
<span className={'time hour'}>{String(day).padStart(2, 0)}</span><span
className={'unit'}> </span>
<span className={'time min'}>{String(hour).padStart(2, 0)}</span><span
className={'unit'}> </span>
<span className={'time sec'}>{String(min).padStart(2, 0)}</span><span
className={'unit'}></span>
后清零,请尽快完成支付
</div>
</Flex>
......@@ -364,22 +358,6 @@ function BargainStatus(props) {
)
}
function BargainSuccess() {
return (
<div className="bargain-success">
<p className={'title'}>
恭喜你,一刀砍了
<span className={'indicator'}>39.8</span>
</p>
<p>分享到微信群邀请更多好友帮忙砍价</p>
<p>
超过20位好友助力可获得
<span className={'indicator'} style={{color: '#FF4000'}}>【砍价神器】</span>
</p>
</div>
)
}
{/*领取砍价神器*/
}
......
......@@ -27,7 +27,6 @@ class BtnStatus extends Component {
// 加入购物车 type:1 加入购物车,2加入购物车并跳转到购物车页面去支付
toCart = (type) => {
console.log(type)
let data = {
course_id: getParam('id')
};
......@@ -38,11 +37,14 @@ class BtnStatus extends Component {
// this.props.getCourses()
document.location.reload()
} else {
window.location.href = '/shopcart'
// window.location.href = '/shopcart'
this.props.history.replace('/shopcart');
}
} else if (res.data.code === 15001) {
window.location.href = '/shopcart'
// window.location.href = '/shopcart'
this.props.history.replace('/shopcart');
} else {
Toast.info(res.data.msg, 2);
}
......@@ -60,20 +62,7 @@ class BtnStatus extends Component {
})
}
}
// 直接购买 TODO 等弄清楚了逻辑 再和加入购物车合并
toBuy = () => {
let data = {
course_id: getParam('id')
};
http.post(`${api.home}/m/cart/add`, data).then((res) => {
if(res.data.code !== 200) {
Toast.info(res.data.msg, 2);
return;
}
this.props.history.replace('/shopcart');
})
}
// 取消砍价
cancel = () => {
......@@ -105,7 +94,7 @@ class BtnStatus extends Component {
type: 1, // 1 用户自己砍价 2 使用砍价神器 3 好友助力砍价 4 好友第二次助力
parent_uid: 0 // 被助力人id 【自己本人操作传0】
}
http.post(`${api.home}/m/to_bargain`, data).then((res) => {
http.post(`${api.home}/m/bargain/toBargain`, data).then((res) => {
if (res.data.code === 200) {
// this.props.getBargainInfo()
document.location.reload()
......@@ -160,22 +149,22 @@ class BtnStatus extends Component {
{/*拼团 未开团*/}
{
info.is_baoming === 0 && info.group_status === 3 &&
<div className='btns-box'>
<a className='consult consult-s' href="https://q.url.cn/AB8aue?_type=wpa&qidian=true">
<i className='iconfont iconerji'></i>
<span>课程咨询</span>
</a>
<button className='btn btn-s bg-F4AAA7' onClick={this.toBuy}>
<span>{${info.price1}`}</span>
<span>直接购买</span>
</button>
<button className='btn btn-s bg-E02E24'>
<Link to={`/order?id=${getParam('id')}`}>
<span>{${info.pdd_group_info.price}`}</span>
<span>一键开团</span>
</Link>
</button>
</div>
<div className='btns-box'>
<a className='consult consult-s' href="https://q.url.cn/AB8aue?_type=wpa&qidian=true">
<i className='iconfont iconerji'></i>
<span>课程咨询</span>
</a>
<button className='btn btn-s bg-F4AAA7' onClick={e => this.toCart(2)}>
<span>{${info.price1}`}</span>
<span>直接购买</span>
</button>
<button className='btn btn-s bg-E02E24'>
<Link to={`/order?id=${getParam('id')}`}>
<span>{${info.pdd_group_info.price}`}</span>
<span>一键开团</span>
</Link>
</button>
</div>
}
{/*拼团 已开团*/}
......
......@@ -14,7 +14,6 @@ import {fetchCoursesListIfNeeded} from "./actions"
import {api, getParam, http, browser} from "@/utils";
import {Toast} from 'antd-mobile';
class Detail extends Component {
constructor(props) {
......@@ -61,8 +60,8 @@ class Detail extends Component {
}
invitedFriends = () => {
const {course_title,image_name, course_id, pdd_group_info, pdd_group_info: {groupon_member, groupon_member: { number }, price}} = this.props.courseInfo.course_info;
if(browser.isWeixin) {
const {course_title, image_name, course_id, pdd_group_info, pdd_group_info: {groupon_member, groupon_member: {number}, price}} = this.props.courseInfo.course_info;
if (browser.isWeixin) {
let share = this.state.share;
this.setState({
share: !share,
......@@ -95,22 +94,22 @@ class Detail extends Component {
wx.ready(function () { //需在用户可能点击分享按钮前就先调用
wx.hideAllNonBaseMenuItem();
wx.showMenuItems({
menuList: ['menuItem:share:appMessage' , 'menuItem:share:timeline'] // 要显示的菜单项,所有menu项见附录3
});
menuList: ['menuItem:share:appMessage', 'menuItem:share:timeline'] // 要显示的菜单项,所有menu项见附录3
});
wx.updateAppMessageShareData({
...shareData,
success: function () {
// 设置成功
// 设置成功
}
})
wx.updateTimelineShareData({
...shareData,
success: function () {
// 设置成功
// 设置成功
}
})
});
}else{
} else {
Toast.info('请在微信中使用分享功能!', 2);
}
}
......@@ -144,89 +143,89 @@ class Detail extends Component {
if (this.props.courseInfo.course_info) {
courseInfo = this.props.courseInfo.course_info;
service = courseInfo.service;
if(courseInfo.group_status !== 0) {
if (courseInfo.group_status !== 0) {
number = courseInfo.pdd_group_info.groupon_member.number;
}
}
const {
is_bargain, // 是否是砍价课程
} = this.props;
const { share } = this.state;
const {share} = this.state;
return (
<div className='detail-box'>
<CallApp className='toapp'></CallApp>
<HeaderBar title='课程详情' arrow={true} cart={true}></HeaderBar>
{/*弹幕*/}
<Carouselw></Carouselw>
{/*课程*/}
<div className='course-content'>
<div className='cover'>
<img src={courseInfo.image_name}
alt=""/>
</div>
<div className="info">
<p className='title'>{courseInfo.course_title}</p>
<p className='contact text-overflow-2'>{courseInfo.simpledescription}</p>
<div className='des'>
{courseInfo.is_baoming === 0 && <p className="course-price">
<span className="new">¥{courseInfo.price1}</span>
<span className="old">¥{courseInfo.price0}</span>
</p>
}
{courseInfo.is_baoming === 1 &&
<a href="/#" className="isbuy">已购买</a>
}
<CallApp className='toapp'></CallApp>
{/*弹幕*/}
<Carouselw></Carouselw>
{/*课程*/}
<div className='course-content'>
<div className='cover'>
<img src={courseInfo.image_name}
alt=""/>
</div>
<div className="info">
<p className='title'>{courseInfo.course_title}</p>
<p className='contact text-overflow-2'>{courseInfo.simpledescription}</p>
<div className='des'>
{courseInfo.is_baoming === 0 && <p className="course-price">
<span className="new">¥{courseInfo.price1}</span>
<span className="old">¥{courseInfo.price0}</span>
</p>
}
{courseInfo.is_baoming === 1 &&
<a href="/#" className="isbuy">已购买</a>
}
</div>
</div>
</div>
</div>
{/*正常课程已购买时显示*/}
{
courseInfo.is_baoming === 1 &&
<div className='group'>
上课QQ群:{courseInfo.course_qq},加群请备注您的学号:{courseInfo.uid}
</div>
}
{/*vip课程显示*/}
{
courseInfo.vip_range &&
<div className="vip">
<p>已开通年会员:{courseInfo.vip_range}</p>
<p>年会员QQ群:{courseInfo.course_qq},加群请备注您的学号:{courseInfo.uid}</p>
</div>
}
{/*正常课程已购买时显示*/}
{
courseInfo.is_baoming === 1 &&
<div className='group'>
上课QQ群:{courseInfo.course_qq},加群请备注您的学号:{courseInfo.uid}
</div>
}
{/*vip课程显示*/}
{
courseInfo.vip_range &&
<div className="vip">
<p>已开通年会员:{courseInfo.vip_range}</p>
<p>年会员QQ群:{courseInfo.course_qq},加群请备注您的学号:{courseInfo.uid}</p>
</div>
}
{/*服务承诺*/}
<div className='promise'>
<label>服务承诺</label>
<p>
{
service && service.length > 0 && service.map((item, index) => {
return (
<span key={index}> {item} </span>
)
})
}
</p>
</div>
{/*服务承诺*/}
<div className='promise'>
<label>服务承诺</label>
<p>
{
service && service.length > 0 && service.map((item, index) => {
return (
<span key={index}> {item} </span>
)
})
}
</p>
</div>
{/*试听*/}
<Audition auditionBox={this.state.auditionBox} boxHide={this.boxHide}/>
{/*试听*/}
<Audition auditionBox={this.state.auditionBox} boxHide={this.boxHide}/>
{/*单集购买*/}
<Single singleBox={this.state.singleBox} boxHide={this.boxHide} data={this.state.singMess}
title={courseInfo.course_title}/>
{/*单集购买*/}
<Single singleBox={this.state.singleBox} boxHide={this.boxHide} data={this.state.singMess}
title={courseInfo.course_title}/>
{/*分享赚钱*/}
{
courseInfo.is_dist &&
<ShareRank/>
}
{/*分享赚钱*/}
{
courseInfo.is_dist &&
<ShareRank/>
}
{/*拼团*/}
{
(courseInfo.group_status === 3 || courseInfo.group_status === 4) &&
<Group history={this.props.history}/>
}
{/*拼团*/}
{
(courseInfo.group_status === 3 || courseInfo.group_status === 4) &&
<Group history={this.props.history}/>
}
{/*砍价*/}
......@@ -235,25 +234,29 @@ class Detail extends Component {
<Bargain/>
}
{/*课程介绍、大纲*/}
<OutLine data={this.props.courseInfo} toAudition={this.toAudition} toSingleset={this.toSingleset}/>
{/*课程介绍、大纲*/}
<OutLine data={this.props.courseInfo} toAudition={this.toAudition} toSingleset={this.toSingleset}/>
{/*课程按钮*/}
<BtnStatus data={this.props.courseInfo} barInfo={this.state.barInfo} getBargainInfo={this.getBargainInfo} invitedFriends={this.invitedFriends} history={this.props.history}></BtnStatus>
{/*课程按钮*/}
<BtnStatus data={this.props.courseInfo} barInfo={this.state.barInfo}
getBargainInfo={this.getBargainInfo} invitedFriends={this.invitedFriends}
history={this.props.history}></BtnStatus>
{
share ? (
<div className='groupSuccessMbc' onClick={()=>{this.setState({share: false})}}>
<div className='tipContent'>
{
share ? (
<div className='groupSuccessMbc' onClick={() => {
this.setState({share: false})
}}>
<div className='tipContent'>
{`还差${number}人,分享到3个群,成团率高达98%`}
</div>
<div className='tipArrow'>
<i className='iconfont iconyindao'></i>
{`还差${number}人,分享到3个群,成团率高达98%`}
</div>
<div className='tipArrow'>
<i className='iconfont iconyindao'></i>
</div>
</div>
</div>
) : null
}
) : null
}
</div>
)
}
......
......@@ -59,16 +59,13 @@
}
.share {
// position: absolute;
// right: 12px;
// padding: 5px 6px;
border: 1px solid $red;
border-radius: 3px;
color: $red;
background-color: $bg_fff;
width: 76px;
height: 22px;
line-height: 22px;
line-height: 20px;
text-align: center;
}
......
......@@ -2,17 +2,23 @@ import React, {Component} from 'react'
import './index.scss'
import {api, getParam, http, browser} from "@/utils";
import {Toast} from 'antd-mobile';
import {Link} from "react-router-dom";
import {Link, withRouter} from "react-router-dom";
import {compose} from "redux";
import {connect} from "react-redux";
import {differenceInHours, differenceInMinutes, differenceInSeconds} from "date-fns";
class Single extends Component {
constructor(props) {
super(props)
this.state = {
status: 1,
status: 3,
orderId: '',
nowPrice: '',
laterPrice: '',
hour: '',
min: '',
sec: '',
payType: '0', // 1支付宝 0微信
}
}
......@@ -177,6 +183,25 @@ class Single extends Component {
}
render() {
// if (this.state.bargainData.expire_time) {
let date = 1561140170*1000
let now = Date.now()
setInterval(() => {
date -= 1000
let s = differenceInSeconds(new Date(date), now) % 60,
m = differenceInMinutes(new Date(date), now) % 60,
h = differenceInHours(new Date(date), now) % 24
this.setState({
hour: h,
min: m,
sec: s,
})
}, 1000)
// }
return (
<div>
{
......@@ -271,17 +296,19 @@ class Single extends Component {
<span>参团成功</span>
</div>
<div className='group-img'>
<img src={this.props.user.data.avatar} alt=""/>
<img
src='https://julyedu-img-public.oss-cn-beijing.aliyuncs.com/vu/image_head/Sv3Vz4B8Tp.jpg'
src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/images/weekend/train7/ellipsis.png"
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'
src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/images/weekend/train7/ellipsis.png"
alt=""/>
</div>
<div className='btn-l btn-FF4000'>
剩余{String(this.state.hour).padStart(2, 0)}{String(this.state.min).padStart(2, 0)}{String(this.state.sec).padStart(2, 0)}
邀请好友参团
</div>
<div className='btn-l btn-FF4000'>剩余235923 邀请好友参团</div>
</div>
}
<i onClick={this.colse} className={'iconfont iconiconfront-2 close'}></i>
......@@ -294,4 +321,10 @@ class Single extends Component {
}
export default Single
export default compose(
connect(
state => ({user: state.user}),
null
),
withRouter
)(Single)
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