/* eslint-disable */ import React, { Component } from "react" import { getParam, http } from "src/utils" import { Toast } from "antd-mobile" import { Link } from "react-router-dom" import { getCourses } from "src/components/detail/actions" import { connect } from "react-redux" import "./index.scss" import Overlay from "../overlay" import BindPhone from "./../bindPhone/index" import BargainConfirmBind from "./../bindPhone/confirm" import Mask from "src/common/Mask/index" class BtnStatus extends Component { constructor(props) { super(props) this.state = { isbuy: 1, is_baoming: 0, group_status: 3, in_cart: false, countdown: 0, barInfo: {}, bindPhone: false, bindConfrm: false, bindInfo: {}, // 冲突信息 formInfo: {}, } } componentDidMount() { // this.getBargainInfo() this.group = false } // componentDidUpdate(prevProps) { // let {courseInfo} = this.props // let {courseInfo: prevCourseInfo} = prevProps // if (courseInfo && courseInfo.is_bargain) { // if (prevCourseInfo && courseInfo.is_bargain !== prevCourseInfo.is_bargain) { // this.getBargainInfo() // } // } // } componentWillReceiveProps(nextProps) { const { data = {}, user = {} } = nextProps if (data.is_bargain && user.data && user.data.uid) { this.getBargainInfo() } // if(nextProps.data && nextProps.data.is_bargain) { // this.getBargainInfo() // } this.setState({ courseInfo: data, countdown: nextProps.countdown, }) } // // 加入购物车 type:1 加入购物车,2加入购物车并跳转到购物车页面去支付 // toCart = (type) => { // const { history, addCourseToCart } = this.props; // let data = { // course_id: getParam('id') // }; // http.post(`${API.home}/m/cart/add`, data).then((res) => { // if (res.data.code === 200) { // if (type === 1) { // Toast.info('已加入购物车', 2) // // this.props.getCourses() // // document.location.reload() // addCourseToCart(); // } else { // history.replace('/shopcart');ß // } // } else if (res.data.code === 15001) { // history.replace('/shopcart'); // } else if (res.data.code === 4030) { // history.replace('/passport'); // } else { // Toast.info(res.data.msg, 2); // } // }) // }; // 返现课程的立即购买 signUpNow = () => { if (this.props.user.hasError) { // 未登录 去登陆 this.props.history.push("/passport") } else { let cidArr = JSON.stringify([Number(getParam("id"))]) http .get(`${API["base-api"]}/m/cart/addtopreorder/${cidArr}?type=1`) .then((res) => { if (res.data.errno === 0) { this.props.history.push("/order?id=" + res.data.data[0], { type: 1, }) } else { Toast.info(res.data.msg, 2) } }) } } // 普通课程的立即报名 要模拟结算过程 simpleCourse = () => { if (this.props.user.hasError) { // 未登录 去登陆 this.props.history.push("/passport") } else { http .get(`${API["base-api"]}/m/cart/addtopreorder/[${getParam("id")}]`) .then((res) => { if (res.data.errno === 0) { this.props.history.push(`/order?id=${getParam("id")}`, { simple: 1, }) } else { Toast.info(res.data.msg, 2) } }) } } // 格式化开课时间 formatDate = (date) => { let ary = date.split("-") return `${ary[1]}月${ary[2]}日开课` } // 直接购买 tobuy = () => { const { user } = this.props const { barInfo } = this.state const uid = user && user.data && user.data.uid if (!uid) { this.props.history.push("/passport/login") } else { if (barInfo.bargain_status === 2) { // this.toCart(2) // 新需求 不需要加入购物车 直接走普通课程的立即报名流程 跳到订单页 this.simpleCourse() } else { // 取消砍价记录 this.setState({ isShowOverlay: true, bargainStatus: 1, }) } } } // 一键开团 keyToGroup = () => { if (this.props.user.hasError) { // 未登录 去登陆 this.props.history.push("/passport") return } this.props.history.push(`/order?id=${getParam("id")}`, { group: 1 }) } // 砍完价去支付 bargainToOrder = () => { if (this.props.user.hasError) { // 未登录 去登陆 this.props.history.push("/passport") } else { http .get(`${API["base-api"]}/m/cart/addtopreorder/[${getParam("id")}]`) .then((res) => { if (res.data.errno === 0) { this.props.history.push(`/order?id=[${getParam("id")}]`, { bargain: 1, }) } else { Toast.info(res.data.msg, 2) } }) } } // 取消砍价 cancel = () => { let data = { courseId: getParam("id"), } http.post(`${API.home}/m/bargain/cancel`, data).then((res) => { if (res.data.code === 200) { this.setState({ isShowOverlay: false, bargainStatus: "", }) http .get(`${API["base-api"]}/m/cart/addtopreorder/[${getParam("id")}]`) .then((res) => { if (res.data.errno === 0) { this.props.history.push(`/order?id=[${getParam("id")}]`, { simple: 1, }) } else { Toast.info(res.data.msg, 2) } }) // window.location.href = '/shopcart' // this.props.history.push(`/order?id=[${getParam('id')}]`, {simple: 1}) } else { Toast.info(res.data.msg, 2) } }) } close = () => { this.setState({ isShowOverlay: false, bargainStatus: "", }) } // 砍价接口 toKanjia = () => { const { user, history } = this.props const uid = user && user.data && user.data.uid const course_id = getParam("id") if (!uid) { this.props.history.push("/passport/login") } else { let data = { course_id, type: 1, // 1 用户自己砍价 2 使用砍价神器 3 好友助力砍价 4 好友第二次助力 parent_uid: 0, // 被助力人id 【自己本人操作传0】 } http.post(`${API.home}/m/bargain/toBargain`, data).then((res) => { const { data, code, msg } = res.data if (code === 200) { // user_status 用户状态 1-关注公众号,2-绑定手机号 3-再砍一刀 (是发起人没有这个字段) if (data.user_status === 2) { this.setState({ bindPhone: true, }) } else { history.push( `/bargain-middle-page?id=${course_id}&bargaincode=${data.bargain_code}&is_originator=1` ) } } else { Toast.info(msg, 2) } }) } } // 开始学习 toStudy = (vCourseId, isHaveVideo) => { const { history } = this.props if (isHaveVideo == 0) { Toast.info("尚未开课,开课后立即上传课程~", 2) } else { history.push(`/play/video?id=${vCourseId}`) } } //获取砍价信息 getBargainInfo = () => { let data = { courseId: getParam("id"), } http.post(`${API.home}/m/bargain/courseDetail`, data).then((res) => { if (res.data.code === 200) { this.setState({ barInfo: res.data.data, }) } else { Toast.info(res.data.msg, 2) } }) } // 付定金 付尾款 expandPay = (info, type) => { // type 等于1是定金 等于2是尾款 const { user } = this.props const uid = user && user.data && user.data.uid if (!uid) { this.props.history.push("/passport/login") } else { if (type == 1) { this.props.history.push( `/deposit-order?oid=${getParam("id")}&source=${1}`, { id: getParam("id"), isexpand: 1, sourcenum: 1, } ) } else { let timeStamp = Date.parse(new Date()) / 1000 if (timeStamp >= info.start_timestamp) { this.props.history.push("/final-deposit-order?source=1", { id: getParam("id"), sourcenum: 1, }) } else { Toast.info("付尾款时间将在" + info.final_start_time + "开启", 2) } } } } // 隐藏弹窗 handleToHide = (key) => { this.setState({ [key]: false, }) } // 绑定手机号 -- 确认 confirmBindPhone = (params, bindInfo) => { this.setState({ bindPhone: false, bindConfrm: true, formInfo: params, bindInfo, }) } render() { // data 课程信息;barInfo 砍价信息 const { user = {}, toCart, country } = this.props const { countdown, barInfo, courseInfo: info = {}, bindPhone, bindConfrm, bindInfo, formInfo, } = this.state const uid = user.data && user.data.uid return ( <div> {/* 绑定手机号 */} <Mask visible={bindPhone} handleToHide={() => this.handleToHide("bindPhone")} > <BindPhone country={country} handleToBargain={this.toKanjia} confirmBindPhone={this.confirmBindPhone} /> </Mask> {/* 绑定手机号--确认 */} <Mask visible={bindConfrm} handleToHide={() => this.handleToHide("bindConfrm")} > <BargainConfirmBind data={formInfo} bindInfo={bindInfo} handleToHide={() => this.handleToHide("bindConfrm")} handleToBargain={this.toKanjia} /> </Mask> {/*正常购买*/} {info.is_baoming === 0 && info.group_status !== 3 && ( <div className="btns-box"> <a className="consult consult-s" href="http://q.url.cn/s/Vbkup6m?_type=wpa" > <i className="iconfont iconerji"></i> <span>课程咨询</span> </a> {info.in_cart && ( <Link to="/shopcart" className="btn btn-s bg-FCCD05"> 去购物车结算 </Link> )} {!info.in_cart && ( <button className="btn btn-s bg-FCCD05" onClick={(e) => toCart(1)} > 加入购物车 </button> )} <span className="btn btn-s bg-FD7700" onClick={(e) => this.simpleCourse()} > 立即报名 </span> </div> )} {/* 定金课程 is_deposit 是否定金课程 0-否 1-付定金 2-付尾款*/} {info.is_baoming === 0 && info.is_deposit != 0 && ( <div className="btns-box"> <a className="consult consult-m" href="http://q.url.cn/s/Vbkup6m?_type=wpa" > <i className="iconfont iconerji" /> <span>课程咨询</span> </a> <div className="btn btn-m bg-FD7700" onClick={() => this.expandPay(info.deposit_info, info.is_deposit)} > {info.is_deposit == 1 ? "立即付定金" : "立即付尾款"} </div> </div> )} {/*已购买*/} {info.is_baoming === 1 && ( <div className="btns-box"> <a className="consult consult-m" href="http://q.url.cn/s/Vbkup6m?_type=wpa" > <i className="iconfont iconerji" /> <span>课程咨询</span> </a> <a className="btn btn-m bg-09f" onClick={() => this.toStudy(info.v_course_id, info.is_have_video)} > 开始学习 </a> </div> )} {/*拼团 未开团*/} {info.is_baoming === 0 && info.group_status === 3 && ( <div className="btns-box"> <a className="consult consult-s" href="http://q.url.cn/s/Vbkup6m?_type=wpa" > <i className="iconfont iconerji"></i> <span>课程咨询</span> </a> <button className="btn btn-s buy" onClick={this.simpleCourse}> <span>{`¥ ${info.price1}`}</span> <span>直接购买</span> </button> <button className="btn btn-s bg-E02E24"> <span onClick={this.keyToGroup}> <span>{`¥ ${info.pdd_group_info.price}`}</span> <span>一键开团</span> </span> </button> </div> )} {/*拼团 已开团*/} {info.is_baoming === 0 && info.group_status === 4 && ( <div className="btns-box"> <a className="consult consult-s" href="http://q.url.cn/s/Vbkup6m?_type=wpa" > <i className="iconfont iconerji"></i> <span>课程咨询</span> </a> <div className="btn btn-l bg-E02E24" onClick={this.props.invitedFriends} > 邀请好友参团 {countdown} 后结束 </div> </div> )} {/*砍价*/} {info.is_baoming === 0 && this.props.data && this.props.data.is_bargain && ( <div className="btns-box"> <a className="consult consult-s" href="http://q.url.cn/s/Vbkup6m?_type=wpa" > <i className="iconfont iconerji"></i> <span>课程咨询</span> </a> <button className="btn btn-s buy"> <span>¥{info.price1}</span> <span onClick={this.tobuy}>直接购买</span> </button> {(barInfo.bargain_status === 2 || (getParam("id") === "139" && barInfo.bargain_status === 3) || !uid) && ( <button className="btn btn-s bg-E02E24" onClick={this.toKanjia}> 我要砍价 </button> )} {(barInfo.bargain_status === 0 || barInfo.bargain_status === 1) && uid && ( <button className="btn btn-s bg-E02E24"> <span>¥{barInfo.amount}</span> <span onClick={this.bargainToOrder}>去支付</span> </button> )} </div> )} {/*特殊课程*/} {this.state.isbuy === 20 && ( <div className="btns-box"> <a className="consult-l" href="http://q.url.cn/s/Vbkup6m?_type=wpa"> <i className="iconfont iconerji"></i> <span>课程咨询</span> </a> </div> )} {/*特训营课程 未登录 未报名*/} {info.is_aist && (this.props.user.hasError || info.is_baoming === 0) && ( <div className="btns-box"> <a className="consult consult-m" href="http://q.url.cn/s/Vbkup6m?_type=wpa" > <i className="iconfont iconerji"></i> <span>课程咨询</span> </a> <button className="btn sign-up-now" onClick={(e) => this.signUpNow()} > <span>立即报名</span> </button> </div> )} {/*特训营课程 登陆且已报名*/} {info.is_aist && !this.props.user.hasError && info.is_baoming === 1 && ( <div className="btns-box"> <a className="consult consult-m" href="http://q.url.cn/s/Vbkup6m?_type=wpa" > <i className="iconfont iconerji"></i> <span>课程咨询</span> </a> {info.aist_start_time === "" ? ( <a className="btn btn-m bg-09f" onClick={() => this.toStudy(info.v_course_id, info.is_have_video) } > 开始学习 </a> ) : ( <button className="btn btn-m wait-open"> <span>{this.formatDate(info.aist_start_time)}</span> </button> )} </div> )} {this.state.isShowOverlay && ( <Overlay> {/*引导关注公众号*/} {this.state.bargainStatus === 1 && ( <CancelBargain close={this.close} cancel={this.cancel} /> )} <i onClick={this.close} className={"iconfont iconiconfront-2 bargain-close"} ></i> </Overlay> )} { /* * * limit_free_status: 0 未领取 1已领取未过期 2已过期 * */ info.is_baoming === 0 && info.is_limit_free && info.limit_free_status == 0 && ( <div className="btns-box"> <a className="consult consult-m" href="http://q.url.cn/s/Vbkup6m?_type=wpa" > <i className="iconfont iconerji"></i> <span>课程咨询</span> </a> <button className={"get-course btn"} onClick={() => { const { history, user, getCourse } = this.props if (user.hasError) { history.push("/passport") } else { getCourse(info.course_id, info.v_course_id) } }} > 立即领取 </button> </div> ) } </div> ) } } function CancelBargain(props) { return ( <div className="cancel-bargain"> <p className="top-img"> <i className="iconfont icondanseshixintubiao-8"></i> </p> <p className="tip-mess"> 您已发起砍价,直接购买将清除已砍金额。直接购买可使用优惠券~ </p> <div className="btns"> <button onClick={props.close}>取消</button> <button onClick={props.cancel}>确定</button> </div> </div> ) } export default connect( (state) => ({ user: state.user, }), { getCourses } )(BtnStatus)