Commit 434cb9ad by zhanghaozhe

eslint prettier

parent 34103119
......@@ -246,7 +246,7 @@ class App extends Component {
)
.then((res) => {
let data = res.data
if (data.errno == 200) {
if (data.errno === 200) {
if (data.data.is_check) {
this.props.updateCaptchaState({
isNeedValidation: true,
......@@ -412,7 +412,7 @@ class App extends Component {
transformWxUser = (res) => {
let data = res.data
if (data.errno == 200) {
if (data.errno === 200) {
//移除红包统计cookie
this.removeShareCodeCookie()
let { uid, token, avatar_file: avatar, uname: username } = data.data
......
/* eslint-disable jsx-a11y/anchor-is-valid */
import React from "react"
import "./course.scss"
import { Link } from "react-router-dom"
const Course = (props) => {
return (
<li className={`course-item ${props.className}`}>
{props.top}
<a onClick={() => props.toDetail(props.id)}>
{/* <Link to={`/detail?id=${props.id}`}> */}
<img src={props.img} alt="" />
{props.status}
<p className={`course-title ${props.className}`}>{props.title}</p>
{/* </Link> */}
</a>
{props.bottom}
</li>
......
import React from "react"
import "./orderlist.scss"
import { Link } from "react-router-dom"
/**
* @OrderList 组件内容
......
......@@ -25,7 +25,7 @@ class AddressPopup extends Component {
fetchUserAddress = () => {
const { addressInfo } = this.state
http.get(`${API.home}/sys/user_address_info`).then((res) => {
const { code, data, msg } = res.data
const { code, data } = res.data
if (code === 200) {
this.setState({
addressInfo: Object.assign({}, addressInfo, {
......
/* eslint-disable jsx-a11y/anchor-is-valid */
import React, { Component } from "react"
import { Formik, Form, Field } from "formik"
import { Toast } from "antd-mobile"
......
......@@ -15,7 +15,7 @@ class ExpandActiveToast extends Component {
componentDidMount() {
http.get(`${API["base-api"]}/sys/deposit/notice`).then((res) => {
if (res.data.errno == 200) {
if (res.data.errno === 200) {
const { data } = res.data
this.setState({
expandLength: data.num,
......
/* eslint-disable eqeqeq */
import React, { Component } from "react"
import { CallApp } from "../../common"
import "./index.scss"
import { WithTab } from "src/HOCs"
// import Swiper from 'react-mobile-swiper'
......
import React, { Component } from "react"
import { connect } from "react-redux"
import { http, getParam } from "src/utils"
import cookie from "js-cookie"
import { getParam } from "src/utils"
import "./index.scss"
import { Toast } from "antd-mobile"
import jsCookie from "js-cookie"
class Activity extends Component {
......@@ -23,7 +21,7 @@ class Activity extends Component {
domain: ".julyedu.com",
expires: 30,
})
if (cookie.get("uid")) {
if (jsCookie.get("uid")) {
this.setState(() => ({
butText: "已领取,去使用",
}))
......
......@@ -14,7 +14,7 @@ class PrizeWinnerList extends Component {
.get(`${API.home}/sys/activity/lottery_names/${getParam("tid")}`)
.then((res) => {
const { data } = res
if (data.code == 200) {
if (data.code === 200) {
const { data: response } = data
this.setState({
title: response.title,
......
/* eslint-disable jsx-a11y/anchor-is-valid, no-script-url, jsx-a11y/heading-has-content, eqeqeq, default-case */
import React, { Component } from "react"
import { debounce, groupBy, isEmpty } from "lodash"
import { http } from "src/utils"
......@@ -347,7 +348,7 @@ class Anniversary2020 extends Component {
getUserAddress = () => {
http.get(`${API.home}/sys/user_address_info`).then((res) => {
const { code, msg, data } = res.data
const { code, data } = res.data
if (code === 200) {
this.setState({
userAddress: data,
......@@ -401,8 +402,8 @@ class Anniversary2020 extends Component {
`${API["base-api"]}/wx/user_temporary_qrcode/${this.props.user.data.uid}`
)
.then((res) => {
const { errno, msg, data } = res.data
if (errno == 0) {
const { errno, data } = res.data
if (errno === 0) {
this.setState({
qrcode: data.qr_image,
})
......
/* global _czc */
/* eslint-disable eqeqeq */
import React, { Component } from "react"
import { browser, getParam, http } from "src/utils"
import { Toast } from "antd-mobile"
......@@ -130,7 +131,7 @@ class GiveCourseAssistance extends Component {
code: this.state.code,
})
.then((res) => {
const { errno, msg } = res.data
const { errno } = res.data
let success = errno == 200
this.setState({
successOneStatus: success,
......
/* globals _czc */
/* eslint-disable jsx-a11y/anchor-is-valid, no-script-url */
import React, { Component } from "react"
import "./give-courses.scss"
import { getParam, http } from "src/utils"
......@@ -116,7 +116,7 @@ class GiveCourses extends Component {
animate,
marqueeList,
} = this.state
var _czc = _czc || []
var _czc = window._czc || []
return (
<div id={"give-courses"}>
<div className="banner">
......
/* eslint-disable eqeqeq, jsx-a11y/anchor-is-valid, no-script-url */
import React, { Component } from "react"
import { http } from "src/utils"
import "./prizes.scss"
......
/* eslint-disable eqeqeq, jsx-a11y/anchor-is-valid, no-script-url */
import React, { Component } from "react"
import BoxContainer from "../box-container/container"
import { Toast, WhiteSpace } from "antd-mobile"
......@@ -216,7 +217,6 @@ class Landing extends Component {
}
handleToMyTreasure = (id) => {
const { history } = this.props
this.joinSuccessPopup && this.joinSuccessPopup.remove()
if (getParam("version")) {
window.location.assign(
......@@ -291,7 +291,7 @@ class Landing extends Component {
}
inviteMembers = (treasure_code) => {
const { history, match, user, location } = this.props
const { history, match, location } = this.props
if (getParam("version")) {
let data = {
title: this.shareTitle,
......@@ -524,7 +524,6 @@ class Landing extends Component {
}
toSquare = () => {
const { history } = this.props
if (!getParam("version")) {
window.location.assign("https://m.julyedu.com/year/yearindex")
} else {
......
......@@ -361,7 +361,6 @@ class MyTreasure extends Component {
// 邀请好友
handleToInvite = (treasure_code) => {
const { history } = this.props
if (getParam("version")) {
window.location.assign(
`https://h5.julyedu.com/activity/newyear-2019/landing?treasure_code=${treasure_code}&origin=1&version=${getParam(
......
/* eslint-disable jsx-a11y/anchor-is-valid */
import React from "react"
import "./prize.scss"
......
/* eslint-disable eqeqeq */
import React, { Component } from "react"
import classnames from "classnames"
import { Link } from "react-router-dom"
import "./team.scss"
import { getParam } from "src/utils"
......
/* eslint-disable eqeqeq */
import React, { Component } from "react"
import "./index.scss"
import { Toast } from "antd-mobile"
import { Link, withRouter } from "react-router-dom"
import { withRouter } from "react-router-dom"
import { getParam, http, SendMessageToApp, browser } from "src/utils"
import CommonContainer from "./../../common/commonContainer/index"
import CommonPopup from "./../../common/commonPopup/index"
import { connect } from "react-redux"
import { Popup } from "src/common/index"
import QRCode from "qrcode"
@connect((state) => ({
user: state.user,
......@@ -47,7 +47,7 @@ class LiveRoom extends Component {
// 预约直播
subscribe = (id) => {
// 检查是否已登录
const { hasError, data = {} } = this.props.user
const { hasError } = this.props.user
if (hasError) {
this.toLogin()
} else {
......@@ -73,7 +73,7 @@ class LiveRoom extends Component {
}
// 去直播间
toLivingRoom = (id) => {
const { hasError, data = {} } = this.props.user
const { hasError } = this.props.user
if (hasError) {
this.toLogin()
} else {
......@@ -82,7 +82,7 @@ class LiveRoom extends Component {
}
// 查看回放
checkVideo = (url) => {
const { hasError, data = {} } = this.props.user
const { hasError } = this.props.user
if (hasError) {
this.toLogin()
} else {
......
import React, { Component } from "react"
import classnames from "classnames"
import { http } from "src/utils"
import "./nav.scss"
class TreasureNav extends Component {
......@@ -27,10 +26,6 @@ class TreasureNav extends Component {
id: "year-course",
name: "重磅好课",
},
// {
// id: 'year-free',
// name: '免费学'
// },
{
id: "year-group",
name: "1分拼团",
......
/* eslint-disable jsx-a11y/anchor-is-valid, eqeqeq */
import React, { Component } from "react"
import "./index.scss"
import { http, SendMessageToApp, getParam } from "src/utils"
......
/* eslint-disable eqeqeq, jsx-a11y/anchor-is-valid, no-script-url */
import React, { Component } from "react"
import { http } from "src/utils"
import "./prizes.scss"
......
/* eslint-disable eqeqeq, jsx-a11y/anchor-is-valid, no-script-url */
import React, { Component } from "react"
import BoxContainer from "../box-container/container"
import { Toast, WhiteSpace } from "antd-mobile"
......@@ -236,7 +237,6 @@ class Landing extends Component {
}
handleToMyTreasure = (id) => {
const { history } = this.props
this.joinSuccessPopup && this.joinSuccessPopup.remove()
if (getParam("version")) {
window.location.assign(
......@@ -311,7 +311,7 @@ class Landing extends Component {
}
inviteMembers = (treasure_code) => {
const { history, match, user, location } = this.props
const { history, match, location } = this.props
if (getParam("version")) {
let data = {
title: this.shareTitle,
......@@ -546,7 +546,6 @@ class Landing extends Component {
}
toSquare = () => {
const { history } = this.props
if (!getParam("version")) {
window.location.assign("https://m.julyedu.com/")
} else {
......
......@@ -361,7 +361,6 @@ class MyTreasure extends Component {
// 邀请好友
handleToInvite = (treasure_code) => {
const { history } = this.props
if (getParam("version")) {
window.location.assign(
`https://h5.julyedu.com/box/landing?treasure_code=${treasure_code}&origin=1&version=${getParam(
......
/* eslint-disable jsx-a11y/anchor-is-valid */
import React from "react"
import "./prize.scss"
......
/* eslint-disable eqeqeq */
import React, { Component } from "react"
import classnames from "classnames"
import { Link } from "react-router-dom"
import "./team.scss"
import { getParam } from "src/utils"
......
/* eslint-disable eqeqeq */
import React, { Component } from "react"
import "./index.scss"
import { Toast } from "antd-mobile"
import { Link, withRouter } from "react-router-dom"
import { withRouter } from "react-router-dom"
import { getParam, http, SendMessageToApp, browser } from "src/utils"
import CommonContainer from "./../../common/commonContainer/index"
import CommonPopup from "./../../common/commonPopup/index"
import { connect } from "react-redux"
import { Popup } from "src/common/index"
import QRCode from "qrcode"
@connect((state) => ({
user: state.user,
......@@ -47,7 +47,7 @@ class LiveRoom extends Component {
// 预约直播
subscribe = (id) => {
// 检查是否已登录
const { hasError, data = {} } = this.props.user
const { hasError } = this.props.user
if (hasError) {
this.toLogin()
} else {
......@@ -73,7 +73,7 @@ class LiveRoom extends Component {
}
// 去直播间
toLivingRoom = (id) => {
const { hasError, data = {} } = this.props.user
const { hasError } = this.props.user
if (hasError) {
this.toLogin()
} else {
......@@ -82,7 +82,7 @@ class LiveRoom extends Component {
}
// 查看回放
checkVideo = (url) => {
const { hasError, data = {} } = this.props.user
const { hasError } = this.props.user
if (hasError) {
this.toLogin()
} else {
......
/* eslint-disable eqeqeq */
import React, { Component } from "react"
import "./index.scss"
import { http, SendMessageToApp, getParam, browser } from "src/utils"
import CommonContainer from "./../../common/commonContainer/index"
import CourseItem from "../../../../blessingPreheat/courseItem/index"
import { http, SendMessageToApp, getParam } from "src/utils"
import { withRouter } from "react-router-dom"
import CommonPopup from "./../../common/commonPopup/index"
import { Toast } from "antd-mobile"
import QRCode from "qrcode"
import { connect } from "react-redux"
import dateFns from "date-fns"
@connect((state) => ({
user: state.user,
......@@ -638,18 +635,7 @@ class YearCourse extends Component {
}
render() {
const {
bigcourse,
freecourse,
groupcourse,
basic,
advanced,
higher,
expand,
removable,
sum,
} = this.state
const { stage, treasureStage } = this.props
const { removable } = this.state
return (
<div className={"year-index-course"}>
{removable > 0 && (
......
/* eslint-disable eqeqeq */
import React, { Component } from "react"
import "./index.scss"
import LiveRoom from "./LiveRoom/index"
import YearCourse from "./YearCourse/index"
import TreasureBox from "./../treasure-box/index"
import TreasureNav from "./nav"
import CommonPopup from "./../common/commonPopup/index"
import cookie from "js-cookie"
import { setCurrentUser, startFetchUser } from "src/store/userAction"
import { SendMessageToApp, getParam, http } from "src/utils"
import { http } from "src/utils"
import { addDays } from "date-fns"
import { connect } from "react-redux"
import { Toast } from "antd-mobile"
import { compose } from "redux"
@connect(
(state) => ({
......@@ -61,7 +59,7 @@ class index extends Component {
// 保存cookie
appLogin = () => {
let expires = addDays(new Date(), 90)
this.state.userInfoList.map((item, index) => {
this.state.userInfoList.forEach((item, index) => {
cookie.set("token", item.token, {
expires,
path: "/",
......@@ -100,7 +98,7 @@ class index extends Component {
transformUser = (res) => {
let payload
res.map((item, index) => {
res.forEach((item, index) => {
payload = {
hasError: false,
data: {
......
import React, { Component } from "react"
import "./index.scss"
import { html } from "src/utils"
import classnames from "classnames"
class Question extends Component {
......
/* eslint-disable eqeqeq */
import React, { Component } from "react"
import { HeaderBar } from "src/common"
import { getParam, http } from "src/utils"
......
/* eslint-disable jsx-a11y/anchor-is-valid */
/* eslint-disable jsx-a11y/anchor-is-valid, no-script-url */
import React, { Component } from "react"
import "./index.scss"
import { Tabs, Toast } from "antd-mobile"
......@@ -20,13 +20,6 @@ class Scores extends Component {
],
rankList: [],
rankListTabs: [{ title: "日榜" }, { title: "总榜" }],
/*
rankListTabs: [
{title: '日榜'},
{title: '周榜'},
{title: '总榜'},
],
*/
isExpandRankList: false,
icons: [
require("./rank-1.png"),
......
......@@ -38,7 +38,7 @@ class aiTestHelp extends Component {
handleFetchInfo = () => {
http.get(`${API.home}/sys/aitest/invitation`).then((res) => {
const { code, data, msg } = res.data
const { code, data } = res.data
if (code === 200) {
this.setState({
total_num: data.total_num,
......@@ -49,7 +49,7 @@ class aiTestHelp extends Component {
getAssist = () => {
http.get(`${API.home}/sys/aitest/assist`).then((res) => {
const { code, data, msg } = res.data
const { code, data } = res.data
if (code === 200) {
this.setState({
dec: data.ques,
......
......@@ -23,7 +23,7 @@ class FollowBarcode extends Component {
.then((res) => {
const { errno, data } = res.data
console.log(res)
if (errno == 0) {
if (errno === 0) {
this.setState({
url: data.url,
})
......
import React, { Component } from "react"
import { isEmpty } from "lodash"
import { http } from "src/utils"
import { Formik, Form, Field } from "formik"
import { Toast } from "antd-mobile"
......@@ -26,7 +25,7 @@ class AddressPopup extends Component {
fetchUserAddress = () => {
const { addressInfo } = this.state
http.get(`${API.home}/sys/user_address_info`).then((res) => {
const { code, data, msg } = res.data
const { code, data } = res.data
if (code === 200) {
this.setState({
addressInfo: Object.assign({}, addressInfo, {
......
import React, { Component } from "react"
import { connect } from "react-redux"
import { Link } from "react-router-dom"
import { http, getParam, SendMessageToApp } from "src/utils"
import { Toast } from "antd-mobile"
import ListFrame from "./../listFrame/index"
......@@ -237,7 +236,7 @@ class CollectBlessing extends Component {
toLogin,
toSection,
} = this.props
const { rules, welfareRuleList, seconds } = this.state
const { rules, welfareRuleList } = this.state
return (
<div className="collect-blessing">
{isLogin ? (
......
/* eslint-disable eqeqeq */
import React, { Component } from "react"
import "./index.scss"
......
......@@ -314,7 +314,7 @@ class CourseList extends Component {
// 开始使用
toCourse2 = (courseId) => {
const { history } = this.props
var _czc = _czc || []
var _czc = window._czc || []
var name = "课程id=" + courseId
_czc.push(["_trackEvent", name, "m端双十一开始使用优惠券"])
......
/* eslint-disable eqeqeq */
import React, { Component } from "react"
import classnames from "classnames"
import { http, SendMessageToApp } from "src/utils"
......
/* eslint-disable eqeqeq */
import React, { Component } from "react"
import { http } from "src/utils"
import { Toast, Tabs } from "antd-mobile"
......@@ -190,7 +191,7 @@ class FormalDraw extends Component {
}
subscribe = (id) => {
var _czc = _czc || []
var _czc = window._czc || []
_czc.push(["_trackEvent", "预约抽奖", "m端双十一正式页-立即预约"])
if (this.subscribePopupInstance) {
return
......
/* eslint-disable jsx-a11y/alt-text */
import React, { Component } from "react"
import "./index.scss"
import listFrame from "./../listFrame/index"
import { http, SendMessageToApp, getParam } from "src/utils"
import { http, getParam } from "src/utils"
class LevelTest extends Component {
constructor(props) {
......@@ -75,8 +76,8 @@ class LevelTest extends Component {
}
render() {
let { testNumber, number, prizeListUrl } = this.state
const { isLogin, testSum } = this.props
let { testNumber, prizeListUrl } = this.state
const { testSum } = this.props
return (
<>
<div className="level__test_module">
......
/* global _czc */
/* eslint-disable eqeqeq */
import React, { Component } from "react"
import "./index.scss"
import { Tabs, Toast } from "antd-mobile"
......@@ -52,7 +52,7 @@ class Live extends Component {
toLiveRoom = (id) => {
const { history, isLogin } = this.props
var _czc = _czc || []
var _czc = window._czc || []
var name = "直播间id=" + id
_czc.push(["_trackEvent", name, "m端双十一大咖直播-正在直播"])
if (this.state.isApp) {
......
/* eslint-disable jsx-a11y/anchor-is-valid */
import React, { Component } from "react"
import "./index.scss"
import { http, getParam } from "src/utils"
......@@ -26,7 +27,6 @@ export default class RecordPopup extends Component {
handleToTestRecord = (e, id) => {
e.preventDefault()
const { history } = this.props
if (!getParam("version")) {
window.location.href = `${API.m}/levelTest/report?id=${id}`
} else {
......
/* eslint-disable jsx-a11y/alt-text */
import React, { Component } from "react"
import { browser } from "src/utils"
import "./index.scss"
......
......@@ -37,7 +37,7 @@ class ToAppDemo extends Component {
// 保存cookie
appLogin = () => {
let expires = addDays(new Date(), 90)
this.state.userInfoList.map((item, index) => {
this.state.userInfoList.forEach((item, index) => {
Toast.info(item.version, 3)
cookie.set("token", item.token, {
expires,
......@@ -71,7 +71,7 @@ class ToAppDemo extends Component {
transformUser = (res) => {
let payload
res.map((item, index) => {
res.forEach((item, index) => {
payload = {
hasError: false,
data: {
......
/* eslint-disable default-case */
import React, { Component } from "react"
import { VList } from "../../common"
import { Tabs, WhiteSpace, Toast } from "antd-mobile"
......@@ -130,10 +131,8 @@ class Classify extends Component {
}
toCourseDetail = (id) => {
const { dispatch, history } = this.props
// dispatch(getCourses(id, () => {
const { history } = this.props
history.push(`/detail?id=${id}`)
// }));
}
toClassify = () => {
......
/* eslint-disable jsx-a11y/anchor-is-valid */
import React, { Component } from "react"
import { WithTab } from "src/HOCs"
import "./index.scss"
......@@ -50,7 +51,7 @@ class Classify extends Component {
}
toCourseDetail = (id) => {
const { dispatch, history } = this.props
const { history } = this.props
history.push(`/detail?id=${id}`)
return false
}
......
/* eslint-disable jsx-a11y/anchor-is-valid */
import React, { Component } from "react"
import { connect } from "react-redux"
import { bindActionCreators } from "redux"
......
/* eslint-disable no-sequences, eqeqeq, jsx-a11y/anchor-is-valid */
import React, { PureComponent } from "react"
import "./index.scss"
import RedeemBar from "../RedeemBar"
import Coupon from "../Coupon"
import { http, getParam } from "src/utils"
......
import React, { PureComponent } from "react"
import "./index.scss"
import { http, getParam } from "src/utils"
import { http } from "src/utils"
import { WithFullSize } from "src/HOCs"
import { Toast } from "antd-mobile"
import { HeaderBar } from "src/common"
class UsePatch extends PureComponent {
constructor(props) {
......
import { api, getParam, http } from "src/utils"
import { getParam, http } from "src/utils"
export const RECEIVE_COURSES_DETAIL = "RECEIVE_COURSES_DETAIL"
export const ADD_COURSES_TO_CART = "ADD_COURSES_TO_CART"
......
/* eslint-disable */
import React, { Component } from "react"
import { getParam, http } from "src/utils"
import { Toast } from "antd-mobile"
......@@ -262,8 +263,6 @@ class BtnStatus extends Component {
//获取砍价信息
getBargainInfo = () => {
const { user } = this.props
const uid = user && user.data && user.data.uid
let data = {
courseId: getParam("id"),
}
......@@ -281,7 +280,7 @@ class BtnStatus extends Component {
// 付定金 付尾款
expandPay = (info, type) => {
// type 等于1是定金 等于2是尾款
const { user, history } = this.props
const { user } = this.props
const uid = user && user.data && user.data.uid
if (!uid) {
this.props.history.push("/passport/login")
......
import React, { Component } from "react"
import "./index.scss"
import { http, getParam } from "src/utils"
import { http } from "src/utils"
import QRCode from "qrcode"
import { connect } from "react-redux"
import { Toast } from "antd-mobile"
......@@ -20,7 +20,7 @@ class FollowQRcode extends Component {
http
.get(`${API["base-api"]}/wx/user_temporary_qrcode/${uid}`)
.then((res) => {
if (res.data.errno == 0) {
if (res.data.errno === 0) {
_this.setState({
src: res.data.data.url,
})
......
/* eslint-disable eqeqeq */
import React, { Component } from "react"
import "./index.scss"
import { getParam, http } from "src/utils"
import { connect } from "react-redux"
import { getParam } from "src/utils"
import { Flex } from "antd-mobile"
import { browser } from "src/utils"
import { Toast } from "antd-mobile"
class Group extends Component {
constructor(props) {
......@@ -18,7 +16,6 @@ class Group extends Component {
countdown: props.countdown,
now_groupon_list: [],
}
// console.log(props);
}
// 查看更多
......@@ -137,7 +134,7 @@ class Group extends Component {
render() {
const { courseInfo } = this.props
const { alreadyIn, countdown, now_groupon_list } = this.state
const { alreadyIn, countdown } = this.state
let groupInfo = "",
groupon_member = "",
group_status = -1,
......
/* eslint-disable eqeqeq, jsx-a11y/anchor-is-valid, no-script-url */
import React, { Component } from "react"
import "./togroup.scss"
import { HeaderBar, VList } from "../../../common"
......@@ -298,10 +299,9 @@ function GorupContent(props) {
if (groupon_member && groupon_member.length > 0) {
let flag = false
!userInfo.hasError &&
groupon_member.map((item) => {
groupon_member.forEach((item) => {
if (item.uid == userInfo.data.uid) {
flag = true
return
}
})
if (flag) {
......
/* eslint-disable eqeqeq, jsx-a11y/alt-text */
import React, { Component } from "react"
import "./index.scss"
import Bargain from "./bargain"
......@@ -676,7 +677,6 @@ class Detail extends Component {
render() {
const {
course: { course_info = {} },
barInfo,
singleBox,
singleType,
isRedPacket,
......@@ -685,18 +685,12 @@ class Detail extends Component {
const { d, h, m } = this.formatTime(course_info.limit_free_time)
let courseInfo = "",
service = "",
number = 0,
endTime = 0
// if (this.props.courseInfo.course_info) {
// courseInfo = this.props.courseInfo.course_info;
// service = courseInfo.service;
let number = 0
if (course_info.group_status === 3 || course_info.group_status === 4) {
number = course_info.pdd_group_info.groupon_member.number
}
// }
const { share, countdown, list, outList } = this.state
const { share, countdown } = this.state
let href = ""
const {
location: { state = {} },
......
......@@ -20,7 +20,7 @@ class ExpandCallback extends Component {
order_id: getParam("order_id"),
})
.then((res) => {
if (res.data.errno == 200) {
if (res.data.errno === 200) {
const { data } = res.data
this.setState({
data: data,
......@@ -33,7 +33,7 @@ class ExpandCallback extends Component {
// 邀请好友助力
invitation = (url) => {
const { user, history } = this.props
const { user } = this.props
const uid = user && user.data && user.data.uid
if (!uid) {
this.props.history.push("/passport/login")
......
/* eslint-disable default-case */
import React, { Component } from "react"
import "./index.scss"
import { Link } from "react-router-dom"
......@@ -166,6 +167,7 @@ class IntelligentRecommend extends Component {
</div>
<div className="dialog-box">
{!!processing.length &&
// eslint-disable-next-line array-callback-return
processing.map((item, index) => {
switch (item.type) {
case messageType.SYSTEM_MESSAGE:
......
/* eslint-disable eqeqeq, default-case */
import React, { Component } from "react"
import { http } from "src/utils"
import "./index.scss"
......@@ -39,7 +40,7 @@ class LimitFree extends Component {
code: coursesCode,
msg: coursesMsg,
} = courses.data
if (tabCode == 200) {
if (tabCode === 200) {
this.setState({
tab: tabData,
})
......
/* eslint-disable jsx-a11y/alt-text */
import React, { Component } from "react"
import "./index.scss"
......
......@@ -10,7 +10,7 @@ export default class Study extends Component {
let cs = Math.floor(Number(str) / 10)
let cv = ""
if (str.length > 1) {
if (cs == 1) {
if (cs === 1) {
cv = ci >= 1 ? cn[9] + cn[ci - 1] : cn[9]
} else {
cv = ci > 1 ? cn[cs - 1] + cn[9] + cn[ci - 1] : cn[cs - 1] + cn[9]
......
/* eslint-disable jsx-a11y/alt-text */
import React, { Component } from "react"
import "./index.scss"
import Description from "./Description/index.js"
......
/* eslint-disable */
import React, { Component } from "react"
import { Accordion, Toast } from "antd-mobile"
import { HeaderBar, CallApp } from "src/common"
......
/* eslint-disable jsx-a11y/anchor-is-valid, jsx-a11y/anchor-has-content, no-script-url */
import React, { PureComponent } from "react"
import { Flex, WhiteSpace, List } from "antd-mobile"
import "./index.scss"
......
/* eslint-disable eqeqeq */
import React, { Component } from "react"
import "./index.scss"
import { HeaderBar } from "../../common"
......
......@@ -15,7 +15,6 @@ function OrderList(props) {
<div>
{listData.map((item, index) => {
const {
is_coupon,
course_id,
image_name,
sale_price,
......@@ -148,7 +147,7 @@ class Order extends Component {
})
.then((res) => {
const { data } = res
if (data.errno == 200) {
if (data.errno === 200) {
if (data.data["pay_jump"]) {
this.props.history.replace(
`/expand/callback?order_id=${data.data["order_id"]}`
......@@ -178,7 +177,7 @@ class Order extends Component {
})
.then((res) => {
const { data } = res
if (data.errno == 200) {
if (data.errno === 200) {
this.setState({
orderList: [data.data.course],
depositPrice: data.data.course["sale_price"],
......
......@@ -159,7 +159,7 @@ const formikConfig = {
}
http.post(`${API["passport-api"]}/bind_mobile`, params).then((res) => {
const data = res.data
if (data.errno == 200) {
if (data.errno === 200) {
const { history } = props
if (data.data["is_set_pwd"]) {
history.replace(`/passport/set-password`, {
......
......@@ -130,7 +130,7 @@ const formikConfig = {
area_code: "00" + props.country.num,
})
.then((res) => {
if (res.data.errno == 0) {
if (res.data.errno === 0) {
props.history.push("/passport/set-password", {
from: props.location,
})
......
......@@ -129,7 +129,7 @@ const formikConfig = {
code: values.veriCode,
})
.then((res) => {
if (res.data.errno == 0) {
if (res.data.errno === 0) {
props.history.push("/passport/set-password", {
from: props.location,
})
......
/* eslint-disable jsx-a11y/anchor-is-valid */
import React, { Component } from "react"
import "./wechatLogin.scss"
import Input from "../common/inputWithCountryCodes"
......
......@@ -127,7 +127,7 @@ function forgotPasswordReset(values, props) {
password: encrypt(values.password),
})
.then((res) => {
if (res.data.errno == 200) {
if (res.data.errno === 200) {
Toast.info("密码设置成功")
setTimeout(function () {
props.history.replace("/passport/account-login")
......@@ -146,22 +146,10 @@ function bindMobileSetPassword(values, props) {
password: encrypt(values.password),
})
.then((res) => {
if (res.data.errno == 200) {
if (res.data.errno === 200) {
const { location, history } = props
Toast.info("密码设置成功")
let from = (location.state && location.state.from) || { pathname: "/" }
let local_redirect_url = JSON.parse(
window.localStorage.getItem("binding_redirect")
)
// setTimeout(function () {
// if (local_redirect_url) {
// const {pathname, search, hash} = local_redirect_url
// history.replace(pathname + search + hash)
// } else {
// history.replace(from.pathname)
// }
// }, 1000)
let HistoryUrl = window.localStorage.getItem("HistoryUrl")
setTimeout(() => {
......
/* eslint-disable jsx-a11y/anchor-is-valid */
import React, { Component } from "react"
import { VList } from "../../common"
import { Tabs, WhiteSpace, Toast } from "antd-mobile"
......@@ -42,7 +43,7 @@ class Preferential extends Component {
http.get(`${API.home}/m/home/bargainZone`).then((res) => {
if (res.data.code === 200) {
this.setState({
dataList: JSON.stringify(res.data.data) == "{}" ? [] : res.data.data,
dataList: JSON.stringify(res.data.data) === "{}" ? [] : res.data.data,
isLoading: false,
})
} else {
......@@ -82,10 +83,8 @@ class Preferential extends Component {
}
toCourseDetail = (id) => {
const { dispatch, history } = this.props
// dispatch(getCourses(id, () => {
const { history } = this.props
history.push(`/detail?id=${id}`)
// }));
}
render() {
......
/* eslint-disable eqeqeq */
import React, { Component } from "react"
import "./index.scss"
import { HeaderBar, VList } from "../../common"
......@@ -35,10 +36,8 @@ class Purchased extends Component {
}
toCourseDetail = (id) => {
const { dispatch, history } = this.props
// dispatch(getCourses(id, () => {
const { history } = this.props
history.push(`/detail?id=${id}`)
// }));
}
render() {
const { user } = this.props
......
......@@ -53,7 +53,7 @@ class Python extends Component {
// 保存cookie
appLogin = () => {
let expires = addDays(new Date(), 90)
this.state.userInfoList.map((item, index) => {
this.state.userInfoList.forEach((item, index) => {
cookie.set("token", item.token, {
expires,
path: "/",
......@@ -94,7 +94,7 @@ class Python extends Component {
transformUser = (res) => {
let payload
res.map((item, index) => {
res.forEach((item, index) => {
payload = {
hasError: false,
data: {
......
/* eslint-disable jsx-a11y/alt-text */
import React, { Component } from "react"
import "./index.scss"
......
/* eslint-disable eqeqeq, jsx-a11y/alt-text */
import React, { Component } from "react"
import "./index.scss"
import Description from "./Description/index.js"
......
/* eslint-disable jsx-a11y/alt-text */
import React, { Component } from "react"
import { Flex, WingBlank } from "antd-mobile"
import { Link } from "react-router-dom"
import "./CategoryItem.scss"
export default class CategoryItem extends Component {
constructor(props) {
super(props)
}
render() {
const {
course_title,
......
/* eslint-disable jsx-a11y/alt-text */
import React, { Component } from "react"
import { Flex } from "antd-mobile"
import "./SortItem.scss"
......@@ -11,9 +12,6 @@ const THIRD =
"https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/order/PC/tong_icon.png"
export default class SortItem extends Component {
constructor(props) {
super(props)
}
render() {
const { sortNum, avatar_file, user_name, total_account } = this.props
let sortImgSrc = ""
......
import React, { Component } from "react"
import { Checkbox } from "antd-mobile"
import OrderList from "src/common/OrderList"
import { Link } from "react-router-dom"
class CartItem extends Component {
// 构造函数
......
......@@ -27,11 +27,11 @@ export const getMyCourses = (payload) => (dispatch) => {
.get(`${API.home}/m/my_course/${payload.page}/${payload.num}`)
.then((res) => {
const { data, code, msg } = res.data
if (code == 200 && data.length === 0) {
if (code === 200 && data.length === 0) {
dispatch(nomoreCourse())
return
}
if (code == 200 && data.length % 10 !== 0) {
if (code === 200 && data.length % 10 !== 0) {
dispatch(nomoreCourse())
}
dispatch(
......
......@@ -18,4 +18,5 @@ const TSTest: React.FC = () => {
</div>
)
}
export default withRouter(TSTest)
import React, { Component } from "react"
import { getParam, http, browser } from "src/utils"
import { getParam, http } from "src/utils"
import "./camp.scss"
import {
CampTitle,
......@@ -82,7 +82,7 @@ class CampResolve extends Component {
this.course_id = data.course_id
_this.answerList = []
this.rightNumber = 0
data.list.map((item) => {
data.list.forEach((item) => {
if (item.compare === 1) {
this.rightNumber++
}
......
import React, { Component } from "react"
import { getParam, http, browser } from "src/utils"
import { getParam, http } from "src/utils"
import "./camp.scss"
import { connect } from "react-redux"
import { Header, CampTitle, TestItem, ChangeQuestion } from "./common/common"
......@@ -47,7 +47,7 @@ class CampTest extends Component {
currentExam: data.list[0],
})
_this.answerList = []
data.list.map((item) => {
data.list.forEach((item) => {
let obj = {}
obj.questionId = item.id
obj.answerId = 0
......
......@@ -124,7 +124,7 @@ function Resolve(props) {
let { currentExam } = props
let Test = currentExam.compare === 0 ? "错误" : "正确"
let UserIndex, rightIndex
currentExam.options.map((item, index) => {
currentExam.options.forEach((item, index) => {
if (currentExam.answer_id === item.opt_id) {
rightIndex = index
}
......
import React, { Component } from 'react'
import HeaderBar from 'src/common/HeaderBar'
import './video.scss'
import { NavLink, Route, Redirect, Switch } from 'react-router-dom'
import { http, getParam, browser } from 'src/utils'
import Recommendation from './recommendation'
import VideoCatalog from './video-catalog'
import DatumCatalog from './datum-catalog'
import { Toast } from 'antd-mobile'
import videojs from 'video.js'
import 'video.js/dist/video-js.min.css'
import React, { Component } from "react"
import HeaderBar from "src/common/HeaderBar"
import "./video.scss"
import { NavLink, Route, Redirect, Switch } from "react-router-dom"
import { http, getParam, browser } from "src/utils"
import Recommendation from "./recommendation"
import VideoCatalog from "./video-catalog"
import DatumCatalog from "./datum-catalog"
import { Toast } from "antd-mobile"
import videojs from "video.js"
import "video.js/dist/video-js.min.css"
import { Modal } from "antd-mobile"
import { Loading } from 'src/common'
import { Loading } from "src/common"
import { connect } from "react-redux"
import jsCookie from 'js-cookie'
import Single from "src/components/detail/single";
import SingleSuccess from "../detail/single/singleSuccess";
import './CustomPlayButton'
import jsCookie from "js-cookie"
import Single from "src/components/detail/single"
import SingleSuccess from "../detail/single/singleSuccess"
import "./CustomPlayButton"
let alert = Modal.alert
function ProgressShareModal(props) {
return (
props.isShow &&
<div className='progress-share-modal-wrapper'>
<div className="progress-share-modal">
<div className="title">每日打卡</div>
<ul className="progress-container">
<li>
<div className="title">累计学习</div>
<div className="number"><span className='num'>{props.data.learn_day_count}</span>天</div>
</li>
<li>
<div className="title">行动力超过</div>
<div className="number"><span className='num'>{parseFloat(props.data.action_power)}</span>%
</div>
</li>
</ul>
<div className="share-container">
<div className="title">分享到</div>
<ul>
<li className='share-icon'>
<a style={{display: 'block'}} href={props.data.url}>
<div className="icon"><i className='iconfont iconweixinzhifu'/></div>
<div className='text'>微信好友</div>
</a>
props.isShow && (
<div className="progress-share-modal-wrapper">
<div className="progress-share-modal">
<div className="title">每日打卡</div>
<ul className="progress-container">
<li>
<div className="title">累计学习</div>
<div className="number">
<span className="num">{props.data.learn_day_count}</span>
</div>
</li>
<li className='share-icon'>
<a style={{display: 'block'}} href={props.data.url}>
<div className="icon"><i className='iconfont iconpengyouquaniconx'/></div>
<div className='text'>朋友圈</div>
</a>
<li>
<div className="title">行动力超过</div>
<div className="number">
<span className="num">
{parseFloat(props.data.action_power)}
</span>
%
</div>
</li>
</ul>
<div className="share-container">
<div className="title">分享到</div>
<ul>
<li className="share-icon">
<a style={{ display: "block" }} href={props.data.url}>
<div className="icon">
<i className="iconfont iconweixinzhifu" />
</div>
<div className="text">微信好友</div>
</a>
</li>
<li className="share-icon">
<a style={{ display: "block" }} href={props.data.url}>
<div className="icon">
<i className="iconfont iconpengyouquaniconx" />
</div>
<div className="text">朋友圈</div>
</a>
</li>
</ul>
</div>
<i
className="iconfont iconiconfront-2 close"
onClick={props.closeShareModal}
/>
</div>
<i className="iconfont iconiconfront-2 close" onClick={props.closeShareModal}/>
</div>
</div>
)
)
}
class Video extends Component {
video //video element
player //video player instance
video //video element
player //video player instance
currentVideoTimer
currentVideoExpireTime
courseID
ws //websocket instance
ws //websocket instance
timer
token
count
......@@ -84,7 +97,7 @@ class Video extends Component {
RECENTLEARN = "recent_learn"
state = {
title: '',
title: "",
courseId: null,
videoList: [],
datum: [],
......@@ -97,44 +110,47 @@ class Video extends Component {
isShowShareModal: false,
shareData: {},
singleBox: false,
singMess: '',
singleType: 1,// 单集购买需要
nowPrice: 0,// 单集购买需要
laterPrice: 0,// 单集购买需要
limitFreeNoPromptChecked: false,//是否勾选"不再显示此弹框"选项
singMess: "",
singleType: 1, // 单集购买需要
nowPrice: 0, // 单集购买需要
laterPrice: 0, // 单集购买需要
limitFreeNoPromptChecked: false, //是否勾选"不再显示此弹框"选项
showLimitFreePopup: false,
limitFreePopup: {},
isShowNeverShowPopupOption: false, //限时免费课程 播放结束后是否显示"不再显示此弹框"选项
limitFreePopupVideos: JSON.parse(localStorage.getItem('limit-free-popup-videos')),
currentVideoExpireTime: '',
limitFreePopupVideos: JSON.parse(
localStorage.getItem("limit-free-popup-videos")
),
currentVideoExpireTime: "",
}
componentDidMount() {
if (window.location.protocol === 'https:') {
window.location.replace('http' + window.location.href.slice(5))
if (window.location.protocol === "https:") {
window.location.replace("http" + window.location.href.slice(5))
return
}
this.courseID = getParam('id')
this.courseID = getParam("id")
if (!this.courseID) {
this.props.history.replace('/')
this.props.history.replace("/")
return
}
this.setState({
courseId: this.courseID,
})
const {location: {state = {}}} = this.props;
const {
location: { state = {} },
} = this.props
if (state.oid) {
this.check(state.oid);
this.check(state.oid)
}
if (getParam('is_class') === 1 || getParam('weixinpay')) {
if (getParam("is_class") === 1 || getParam("weixinpay")) {
this.payCallback()
}
if (browser.isWeixin) {
this.isweixinPay()
}
this.token = jsCookie.get('token')
this.token = jsCookie.get("token")
this.getVideoList()
this.getDatumCatalog()
}
......@@ -142,14 +158,18 @@ class Video extends Component {
// 直接购买
tobuy = () => {
// 详情页单集购买到该页面,url中的id不是课程id
const {course = {}} = this.state;
http.get(`${API['base-api']}/m/cart/addtopreorder/[${course.course_id}]`).then((res) => {
if (res.data.errno === 0) {
this.props.history.push(`/order?id=${course.course_id}`, {simple: 1})
} else {
Toast.info(res.data.msg, 2);
}
})
const { course = {} } = this.state
http
.get(`${API["base-api"]}/m/cart/addtopreorder/[${course.course_id}]`)
.then((res) => {
if (res.data.errno === 0) {
this.props.history.push(`/order?id=${course.course_id}`, {
simple: 1,
})
} else {
Toast.info(res.data.msg, 2)
}
})
}
// 购买单集
toSingleset = (item) => {
......@@ -158,173 +178,205 @@ class Video extends Component {
singleType: 1,
singMess: item,
})
window.localStorage.setItem('singMess', JSON.stringify(item))
window.localStorage.setItem("singMess", JSON.stringify(item))
}
// 自组件传给父组件的boxHide
boxHide = (val) => {
this.setState({singleBox: val, singleType: 1})
this.setState({ singleBox: val, singleType: 1 })
}
// 单集购买 H5支付成功后回调
payCallback = () => {
const _this = this;
if (!getParam('oid')) {
return;
const _this = this
if (!getParam("oid")) {
return
} else {
this.setState({
singMess: JSON.parse(window.localStorage.getItem('singMess')),
singMess: JSON.parse(window.localStorage.getItem("singMess")),
})
_this.intervalPayStatus = setInterval(function () {
http.get(`${API['base-api']}/m/orderState/oid/${getParam('oid')}`).then(res => {
if (res.data.errno === 401) {
clearInterval(_this.intervalPayStatus);
_this.intervalPayStatus = null;
// 获取课程类型
http.get(`${API['base-api']}/class_order_status/${getParam('oid')}`).then((res) => {
if (Number(res.data.data.errno) === 200) {
// 正常购买单集成功
_this.setState({
singleType: 6,
})
} else if (Number(res.data.data.errno) === 201) {
// 0元参团
_this.setState({
singleType: 4,
})
} else if (Number(res.data.data.errno) === 202) {
// 0元购
_this.setState({
singleType: 3,
})
} else if (Number(res.data.data.errno) === 203) {
// 三天内特价
_this.setState({
nowPrice: res.data.data.data.now_price,
laterPrice: res.data.data.data.three_day_later_price,
singleType: 2,
http
.get(`${API["base-api"]}/m/orderState/oid/${getParam("oid")}`)
.then((res) => {
if (res.data.errno === 401) {
clearInterval(_this.intervalPayStatus)
_this.intervalPayStatus = null
// 获取课程类型
http
.get(`${API["base-api"]}/class_order_status/${getParam("oid")}`)
.then((res) => {
if (Number(res.data.data.errno) === 200) {
// 正常购买单集成功
_this.setState({
singleType: 6,
})
} else if (Number(res.data.data.errno) === 201) {
// 0元参团
_this.setState({
singleType: 4,
})
} else if (Number(res.data.data.errno) === 202) {
// 0元购
_this.setState({
singleType: 3,
})
} else if (Number(res.data.data.errno) === 203) {
// 三天内特价
_this.setState({
nowPrice: res.data.data.data.now_price,
laterPrice: res.data.data.data.three_day_later_price,
singleType: 2,
})
} else {
Toast.info(res.data.data.msg, 2)
}
})
} else {
Toast.info(res.data.data.msg, 2)
}
})
}
})
}
})
}, 1000)
}
};
}
// 单集购买 微信内支付成功后回调
isweixinPay = () => {
let _this = this;
let weixin_code = getParam('code');
let _this = this
let weixin_code = getParam("code")
if (weixin_code) {
if (!getParam('oid')) {
if (!getParam("oid")) {
return
} else {
this.setState({
singMess: JSON.parse(window.localStorage.getItem('singMess')),
singMess: JSON.parse(window.localStorage.getItem("singMess")),
})
// this.props.weixinPay(weixin_code)
http.get(`${API['base-api']}/pay/wxpay/pub_charge/oid/${getParam('oid')}/code/${weixin_code}`).then((res) => {
if (res.data.errno === 0) {
const data = res.data.data;
function onBridgeReady() {
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") {
Toast.info('支付成功', 2);
_this.intervalPayStatus = setInterval(function () {
http.get(`${API['base-api']}/m/orderState/oid/${getParam('oid')}`).then(res => {
if (res.data.errno === 401) {
clearInterval(_this.intervalPayStatus);
_this.intervalPayStatus = null;
// 获取课程类型
http.get(`${API['base-api']}/class_order_status/${getParam('oid')}`).then((res) => {
if (Number(res.data.data.errno) === 200) {
// 正常购买单集成功
_this.setState({
singleType: 6,
})
} else if (Number(res.data.data.errno) === 201) {
// 0元参团
_this.setState({
singleType: 4,
})
} else if (Number(res.data.data.errno) === 202) {
// 0元购
_this.setState({
singleType: 3,
})
} else if (Number(res.data.data.errno) === 203) {
// 三天内特价
_this.setState({
nowPrice: res.data.data.data.now_price,
laterPrice: res.data.data.data.three_day_later_price,
singleType: 2,
})
} else {
Toast.info(res.data.data.msg, 2)
http
.get(
`${API["base-api"]}/pay/wxpay/pub_charge/oid/${getParam(
"oid"
)}/code/${weixin_code}`
)
.then((res) => {
if (res.data.errno === 0) {
const data = res.data.data
function onBridgeReady() {
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") {
Toast.info("支付成功", 2)
_this.intervalPayStatus = setInterval(function () {
http
.get(
`${API["base-api"]}/m/orderState/oid/${getParam(
"oid"
)}`
)
.then((res) => {
if (res.data.errno === 401) {
clearInterval(_this.intervalPayStatus)
_this.intervalPayStatus = null
// 获取课程类型
http
.get(
`${
API["base-api"]
}/class_order_status/${getParam("oid")}`
)
.then((res) => {
if (Number(res.data.data.errno) === 200) {
// 正常购买单集成功
_this.setState({
singleType: 6,
})
} else if (
Number(res.data.data.errno) === 201
) {
// 0元参团
_this.setState({
singleType: 4,
})
} else if (
Number(res.data.data.errno) === 202
) {
// 0元购
_this.setState({
singleType: 3,
})
} else if (
Number(res.data.data.errno) === 203
) {
// 三天内特价
_this.setState({
nowPrice: res.data.data.data.now_price,
laterPrice:
res.data.data.data
.three_day_later_price,
singleType: 2,
})
} else {
Toast.info(res.data.data.msg, 2)
}
})
}
})
}
})
}, 1000)
} else {
alert('支付失败')
}, 1000)
} else {
alert("支付失败")
}
}
},
)
}
)
}
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false)
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', onBridgeReady)
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady)
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener(
"WeixinJSBridgeReady",
onBridgeReady,
false
)
} else if (document.attachEvent) {
document.attachEvent("WeixinJSBridgeReady", onBridgeReady)
document.attachEvent("onWeixinJSBridgeReady", onBridgeReady)
}
} else {
onBridgeReady()
}
} else {
onBridgeReady()
Toast.info(res.data.msg, 2)
}
} else {
Toast.info(res.data.msg, 2)
}
})
})
}
}
};
}
// 判断支付是否成功
check = (oid) => {
this.setState({
singMess: JSON.parse(window.localStorage.getItem('singMess')),
singMess: JSON.parse(window.localStorage.getItem("singMess")),
})
http.get(`${API['base-api']}/class_order_status/${oid}`).then((res) => {
http.get(`${API["base-api"]}/class_order_status/${oid}`).then((res) => {
if (Number(res.data.data.errno) === 200) {
// 正常购买单集成功
this.setState({
singleType: 6,
})
} else if (Number(res.data.data.errno) === 201) {
// 0元参团
this.setState({
singleType: 4,
})
} else if (Number(res.data.data.errno) === 202) {
// 0元购
this.setState({
singleType: 3,
})
} else if (Number(res.data.data.errno) === 203) {
// 三天内特价
......@@ -332,7 +384,6 @@ class Video extends Component {
nowPrice: res.data.data.data.now_price,
laterPrice: res.data.data.data.three_day_later_price,
singleType: 2,
})
} else {
Toast.info(res.data.data.msg, 2)
......@@ -342,102 +393,107 @@ class Video extends Component {
// 9502 初始化 监听事件
setupWS = () => {
this.ws = new WebSocket(API["process-api"]);
this.ws.addEventListener('error', () => {
this.ws = new WebSocket(API["process-api"])
this.ws.addEventListener("error", () => {
this.ws = null
})
this.ws.addEventListener('close', () => {
this.ws.addEventListener("close", () => {
if (this.reconnect) {
this.ws = null
setTimeout(() => {
this.setupWS();
this.setupWS()
}, 1000)
}
clearInterval(this.timer)
this.timer = null;
this.timer = null
})
this.ws.addEventListener('message', e => {
const data = JSON.parse(e.data);
data.code === 4040 && (this.reconnect = false);
this.ws.addEventListener("message", (e) => {
const data = JSON.parse(e.data)
data.code === 4040 && (this.reconnect = false)
if (data.code === 0 && data.data && data.data.position) {
this.player.currentTime(data.data.position);
this.player.currentTime(data.data.position)
}
})
}
sendMessage = message => {
let readyState = this.ws.readyState, _this = this;
sendMessage = (message) => {
let readyState = this.ws.readyState,
_this = this
if (readyState === 1) {
this.ws && this.ws.send(JSON.stringify(message))
} else if (readyState === 3) {
this.ws.close();
this.ws = null;
this.ws.close()
this.ws = null
let reconnect = setTimeout(function () {
clearTimeout(reconnect);
reconnect = null;
_this.ws = new WebSocket(API["process-api"]);
}, 500);
clearTimeout(reconnect)
reconnect = null
_this.ws = new WebSocket(API["process-api"])
}, 500)
}
}
//视频结束请求接口
getShareProgressInfo = () => {
http.get(`${API['base-api']}/m/aist/share_data/${this.courseID}/${this.state.videoList[this.state.activeIndex]['id']}`)
.then(res => {
const {data} = res
if (data.errno == 200) {
this.setState({shareData: data.data, isShowShareModal: true})
http
.get(
`${API["base-api"]}/m/aist/share_data/${this.courseID}/${
this.state.videoList[this.state.activeIndex]["id"]
}`
)
.then((res) => {
const { data } = res
if (data.errno === 200) {
this.setState({ shareData: data.data, isShowShareModal: true })
}
})
}
//告诉服务端计算进度
countSchedule = () => {
const {videoList, activeIndex, vCourseId, course = {}} = this.state
if (Number(course.course_id) === 0 || course.course_id === '') {
return;
const { videoList, activeIndex, vCourseId, course = {} } = this.state
if (Number(course.course_id) === 0 || course.course_id === "") {
return
}
let ctype = 0;
let ctype = 0
if (course.is_aist) {
ctype = 2;
ctype = 2
}
// 计算进度 根据ctype判断 课程类型 0-视频 1-直播 2-AI特训营
this.sendMessage({
mtype: 'count_schedule',
mtype: "count_schedule",
uid: this.props.user.data.uid,
token: this.token,
platform: 5,
video_id: videoList[activeIndex]['id'],
video_id: videoList[activeIndex]["id"],
course_id: this.state.courseId,
v_course_id: vCourseId,
ctype: ctype,
})
}
// 发送时间消息
sendWatchTime = (sec, rate) => {
const {videoList, activeIndex, vCourseId, course = {}} = this.state
const { videoList, activeIndex, vCourseId, course = {} } = this.state
// 免费课程不发送
// if (Number(course.course_id) === 0 || course.course_id === '') {
// return;
// }
// 时间为0 不发送消息
if (Number(sec) === 0) {
return;
return
}
let ctype = 0;
let ctype = 0
if (course.is_aist) {
ctype = 2;
ctype = 2
}
// 时间足够不发送
// if(this.timeEnough) {
// return;
// }
this.sendMessage({
mtype: 'watch_time',
mtype: "watch_time",
rate,
time: sec,
video_id: videoList[activeIndex]['id'],
video_id: videoList[activeIndex]["id"],
course_id: this.state.courseId,
v_course_id: vCourseId,
uid: this.props.user.data.uid,
......@@ -452,7 +508,7 @@ class Video extends Component {
this.count = 0
this.watchSec = 0
clearInterval(this.timer)
this.timer = null;
this.timer = null
this.timer = setInterval(() => {
if (this.player && this.player.player()) {
if (this.count === 5) {
......@@ -464,90 +520,91 @@ class Video extends Component {
}
}
}, 1000)
}
// 初始化视频播放器
initializePlayer = () => {
window.HELP_IMPROVE_VIDEOJS = false;
window.HELP_IMPROVE_VIDEOJS = false
this.player = videojs(this.video, {
controls: true,
preload: 'auto',
preload: "auto",
bigPlayButton: false,
textTrackDisplay: false,
posterImage: false,
errorDisplay: false,
playbackRates: ['0.75', '1', '1.5', '2'],
playbackRates: ["0.75", "1", "1.5", "2"],
controlBar: {
pictureInPictureToggle: false,
},
})
this.player.addChild('CustomPlayButtonCover')
this.player.on('play', () => {
const {videoList, activeIndex, vCourseId, course = {}} = this.state
this.player.addChild("CustomPlayButtonCover")
this.player.on("play", () => {
const { videoList, activeIndex, vCourseId } = this.state
// 当视频播放时 看是否是第一次播放(初次进入页面 刷新页面 切换视频 都是第一次播放 需要获取上次的播放时间)
if (this.isCurrentVideoFirstPlay) {
// 当某些原因导致视频暂停时(用户暂停 网络不好等) 再播放时不需要发送
this.isCurrentVideoFirstPlay = false;
this.isCurrentVideoFirstPlay = false
// 发送消息 recent_learn
this.ws.send(JSON.stringify({
mtype: this.RECENTLEARN,
uid: this.props.user.data.uid,
token: this.token,
platform: 5,
video_id: videoList[activeIndex]['id'],
course_id: this.state.courseId,
v_course_id: vCourseId,
is_live: 0,
}))
this.ws.send(
JSON.stringify({
mtype: this.RECENTLEARN,
uid: this.props.user.data.uid,
token: this.token,
platform: 5,
video_id: videoList[activeIndex]["id"],
course_id: this.state.courseId,
v_course_id: vCourseId,
is_live: 0,
})
)
}
if (!this.timer) {
this.setupTimer();
this.setupTimer()
}
})
this.player.on('durationchange', () => {
let videoTime = window.sessionStorage.getItem('videoTimeBeforeReload')
let rate = window.sessionStorage.getItem('videoRateBeforeReload')
this.player.on("durationchange", () => {
let videoTime = window.sessionStorage.getItem("videoTimeBeforeReload")
let rate = window.sessionStorage.getItem("videoRateBeforeReload")
if (videoTime) {
this.player.currentTime(Number(videoTime))
rate && this.player.playbackRate(rate)
window.sessionStorage.removeItem('videoTimeBeforeReload')
window.sessionStorage.removeItem('videoRateBeforeReload')
window.sessionStorage.removeItem("videoTimeBeforeReload")
window.sessionStorage.removeItem("videoRateBeforeReload")
}
})
this.player.on('ratechange', () => {
this.player.on("ratechange", () => {
this.currentPlaybackRate = this.player.playbackRate()
this.sendWatchTime(this.watchSec, this.previousPlaybackRate)
this.count = this.watchSec = 0
this.previousPlaybackRate = this.currentPlaybackRate
})
this.player.on('ended', () => {
this.sendWatchTime(this.watchSec, this.currentPlaybackRate);
this.count = this.watchSec = 0;
this.countSchedule(); // 计算进度 -- 播放完毕
this.player.on("ended", () => {
this.sendWatchTime(this.watchSec, this.currentPlaybackRate)
this.count = this.watchSec = 0
this.countSchedule() // 计算进度 -- 播放完毕
// 返现课程才出现打卡记录
if (this.state.course.is_aist) {
this.getShareProgressInfo()
}
clearInterval(this.timer);
this.timer = null;
clearInterval(this.timer)
this.timer = null
if (this.state.limitFreePopup.is_free) {
this.setState({
showLimitFreePopup: true,
})
}
})
this.player.on('error', () => {
this.player.on("error", () => {
this.handleVideoAuthError(0)
})
this.player.on('waiting', () => {
this.player.on("waiting", () => {
this.handleVideoAuthError(3000)
})
}
sendLastRecord = () => {
http.post(`${API.home}/m/course/record_last_video`, {
v_course_id: this.state.course['v_course_id'],
v_course_id: this.state.course["v_course_id"],
video_id: this.state.videoList[this.state.activeIndex].id,
})
}
......@@ -556,7 +613,7 @@ class Video extends Component {
this.player && this.player.dispose()
clearInterval(this.timer)
this.timer = null;
this.timer = null
this.ws && this.ws.close()
this.ws = null
......@@ -570,8 +627,14 @@ class Video extends Component {
clearTimeout(this.currentVideoTimer)
this.currentVideoTimer = setTimeout(() => {
if (this.currentVideoExpireTime < new Date().getTime()) {
window.sessionStorage.setItem('videoTimeBeforeReload', this.player.currentTime())
window.sessionStorage.setItem('videoRateBeforeReload', this.player.playbackRate())
window.sessionStorage.setItem(
"videoTimeBeforeReload",
this.player.currentTime()
)
window.sessionStorage.setItem(
"videoRateBeforeReload",
this.player.playbackRate()
)
this.getVideoSrc()
}
}, interval)
......@@ -579,14 +642,16 @@ class Video extends Component {
//请求签名视频地址
getVideoSrc = () => {
const {videoList, activeIndex} = this.state
const { videoList, activeIndex } = this.state
let lesson = videoList[activeIndex]
http.get(`${API.home}/web/check_video/${lesson.id}/${lesson.v_course_id}`)
.then(res => {
const {data, code, msg} = res.data
http
.get(`${API.home}/web/check_video/${lesson.id}/${lesson.v_course_id}`)
.then((res) => {
const { data, code, msg } = res.data
let url = new URL(data.url).searchParams
if (code === 200) {
this.currentVideoExpireTime = url.has('Expires') && (Number(url.get('Expires')) * 1000)
this.currentVideoExpireTime =
url.has("Expires") && Number(url.get("Expires")) * 1000
this.setPlayerSrc(data.url)
} else {
Toast.info(msg)
......@@ -595,81 +660,83 @@ class Video extends Component {
}
// 选择新的视频
selectVideo = index => {
selectVideo = (index) => {
if (index === this.state.activeIndex) {
return
}
this.isCurrentVideoFirstPlay = true; // 切换视频则重置这个变量 因为新视频肯定是首次播放
this.isCurrentVideoFirstPlay = true // 切换视频则重置这个变量 因为新视频肯定是首次播放
this.sendWatchTime(this.watchSec, this.currentPlaybackRate)
this.countSchedule(); // 计算进度 -- 选择新视频(可能是M端特有的)
this.setupTimer();
this.countSchedule() // 计算进度 -- 选择新视频(可能是M端特有的)
this.setupTimer()
this.setState(
{
activeIndex: index,
},
() => {
if (this.hasAuth(this.state.activeIndex)) {
this.getVideoSrc()
this.sendLastRecord()
this.playVideo()
} else {
this.getCoursePrice();
this.getCoursePrice()
}
},
);
}
)
}
getLastVideoIndex = lastIndex => {
return this.state.videoList.findIndex(item => item.id == lastIndex)
getLastVideoIndex = (lastIndex) => {
return this.state.videoList.findIndex(
(item) => Number(item.id) === Number(lastIndex)
)
}
getVideoList = () => {
let url = '';
if (getParam('video_id')) {
url = `${API.home}/m/course/play/${this.courseID + '?video_id=' + getParam('video_id')}`
http.post(`${API['base-api']}/sys/get_class_audition`, {
video_id: getParam('video_id'),
let url = ""
if (getParam("video_id")) {
url = `${API.home}/m/course/play/${
this.courseID + "?video_id=" + getParam("video_id")
}`
http.post(`${API["base-api"]}/sys/get_class_audition`, {
video_id: getParam("video_id"),
})
} else {
url = `${API.home}/m/course/play/${this.courseID}`
}
http.get(url).then(res => {
const {data = {}, code} = res.data;
if (code === 200) {
this.setState(
state => ({
videoList: data['lessons'],
course: data.course,
courseId: data.course['course_id'],
vCourseId: data.course['v_course_id'],
title: data.course['course_title'],
isLoading: false,
}),
this.playSetup,
)
data.course.course_id && this.getLimitFreePopup(data.course.course_id)
} else {
Toast.info(data.msg)
}
},
)
http.get(url).then((res) => {
const { data = {}, code } = res.data
if (code === 200) {
this.setState(
(state) => ({
videoList: data["lessons"],
course: data.course,
courseId: data.course["course_id"],
vCourseId: data.course["v_course_id"],
title: data.course["course_title"],
isLoading: false,
}),
this.playSetup
)
data.course.course_id && this.getLimitFreePopup(data.course.course_id)
} else {
Toast.info(data.msg)
}
})
}
playSetup = () => {
// is_aist,是否AI特训营
const {course = {}} = this.state;
let _this = this;
this.setupWS();
this.setupTimer();
const { course = {} } = this.state
let _this = this
this.setupWS()
this.setupTimer()
let scheduleTime = setTimeout(function () {
clearTimeout(scheduleTime);
scheduleTime = null;
_this.countSchedule(); // 刚进入页面的时候 就计算进度 先获取视频列表getVideoList 获取列表后 播放选择的视频 然后计算进度
}, 1000);
let index = this.getLastVideoIndex(course.last_video_id);
index = index >= 0 ? index : 0;
clearTimeout(scheduleTime)
scheduleTime = null
_this.countSchedule() // 刚进入页面的时候 就计算进度 先获取视频列表getVideoList 获取列表后 播放选择的视频 然后计算进度
}, 1000)
let index = this.getLastVideoIndex(course.last_video_id)
index = index >= 0 ? index : 0
this.setState(
{
activeIndex: index,
......@@ -682,28 +749,29 @@ class Video extends Component {
this.playWithAuth()
})
} else {
this.getCoursePrice();
this.getCoursePrice()
}
} else {
alert('暂无视频', '', [{
text: 'OK',
onPress: () => {
this.props.history.push('/')
alert("暂无视频", "", [
{
text: "OK",
onPress: () => {
this.props.history.push("/")
},
},
}])
])
}
},
);
}
)
}
setPlayerSrc = src => {
setPlayerSrc = (src) => {
if (!this.player) {
this.initializePlayer()
}
this.player.src({
src,
type: 'application/x-mpegURL',
type: "application/x-mpegURL",
})
this.player.play()
}
......@@ -715,51 +783,47 @@ class Video extends Component {
}
getDatumCatalog() {
http.get(`${API.home}/m/course/data/${this.courseID}`)
.then(res => {
const data = res.data
if (data.code === 200) {
this.setState({
datum: data.data,
})
} else {
Toast.info(data.msg)
}
})
http.get(`${API.home}/m/course/data/${this.courseID}`).then((res) => {
const data = res.data
if (data.code === 200) {
this.setState({
datum: data.data,
})
} else {
Toast.info(data.msg)
}
})
}
lessonAvailable = index => {
return this.state.videoList[index]['video_size'] !== 0
lessonAvailable = (index) => {
return this.state.videoList[index]["video_size"] !== 0
}
getCoursePrice = () => {
const {course = {}} = this.state;
http.get(`${API.home}/sys/course/price/${course.course_id}`)
.then(res => {
const {data} = res
if (data.code === 200) {
this.setState({
salePrice: data.data['sale_price'],
})
}
})
const { course = {} } = this.state
http.get(`${API.home}/sys/course/price/${course.course_id}`).then((res) => {
const { data } = res
if (data.code === 200) {
this.setState({
salePrice: data.data["sale_price"],
})
}
})
}
playWithAuth = () => {
const {activeIndex} = this.state
const { activeIndex } = this.state
if (this.hasAuth(activeIndex)) {
this.getVideoSrc()
}
}
hasAuth = index => {
const {videoList} = this.state
hasAuth = (index) => {
const { videoList } = this.state
let lesson = videoList[index]
if (lesson['video_auth']) {
if (lesson["video_auth"]) {
this.setState({
isAuth: true,
})
......@@ -769,24 +833,24 @@ class Video extends Component {
isAuth: false,
})
return false
}
}
getLimitFreePopup = id => {
http.post(`${API.home}/sys/popup`, {
course_id: id,
})
.then(res => {
const {code, msg, data} = res.data
getLimitFreePopup = (id) => {
http
.post(`${API.home}/sys/popup`, {
course_id: id,
})
.then((res) => {
const { code, msg, data } = res.data
if (code === 200) {
const {courseId, limitFreePopupVideos} = this.state
const { courseId, limitFreePopupVideos } = this.state
this.setState({
limitFreePopup: data,
isShowNeverShowPopupOption: limitFreePopupVideos ? limitFreePopupVideos.includes(courseId) : false,
isShowNeverShowPopupOption: limitFreePopupVideos
? limitFreePopupVideos.includes(courseId)
: false,
})
} else {
Toast.info(msg, 2, null, false)
}
......@@ -796,25 +860,24 @@ class Video extends Component {
if (!this.state.limitFreeNoPromptChecked) {
return
}
http.post(`${API.home}/sys/checklist`, {
course_id: this.state.course.course_id,
})
.then(res => {
const {code, msg} = res.data
http
.post(`${API.home}/sys/checklist`, {
course_id: this.state.course.course_id,
})
.then((res) => {
const { code, msg } = res.data
if (code === 200) {
this.setState({
limitFreePopup: {...this.state.limitFreePopup, is_free: 0},
limitFreePopup: { ...this.state.limitFreePopup, is_free: 0 },
})
} else {
Toast.info(msg, 2, null, false)
}
})
}
render() {
let {match, location, history} = this.props
let { match, location, history } = this.props
const {
videoList,
activeIndex,
......@@ -826,81 +889,100 @@ class Video extends Component {
showLimitFreePopup,
limitFreePopup,
isShowNeverShowPopupOption,
} = this.state;
let toHref = '';
if (location.state && location.state.to && location.state.to === 'detail') {
} = this.state
let toHref = ""
if (location.state && location.state.to && location.state.to === "detail") {
toHref = `/detail?id=${course.course_id}`
}
return (
<div className='play'>
<HeaderBar title={this.state.title} arrow={true} toHref={() => {
toHref ? history.push(
toHref,
{
to: 'classify',
},
) : history.go(-1)
}}/>
<div className="play">
<HeaderBar
title={this.state.title}
arrow={true}
toHref={() => {
toHref
? history.push(toHref, {
to: "classify",
})
: history.go(-1)
}}
/>
<Loading isLoading={this.state.isLoading}>
<div className="video">
<video className={'video-js'} ref={el => this.video = el}
webkit-playsinline="true"
playsInline={true}
x-webkit-airplay="allow"
x5-video-player-type="h5">
<source src={'/'} type='application/x-mpegURL'/>
<video
className={"video-js"}
ref={(el) => (this.video = el)}
webkit-playsinline="true"
playsInline={true}
x-webkit-airplay="allow"
x5-video-player-type="h5"
>
<source src={"/"} type="application/x-mpegURL" />
</video>
{
!isAuth && !!videoList[activeIndex]['is_class'] && (
<div className="purchase-box">
<div className='hint'>您尚未购买该课时,请购买后学习。</div>
<div className='btns'>
<button
type='button'
onClick={this.tobuy}
className='purchase-class'
>
¥{salePrice} 购买课程
</button>
<button
type='button'
onClick={this.toSingleset.bind(this, videoList[activeIndex])}
className='purchase-episode'
>
¥{videoList.length && videoList[activeIndex]['class_price']} 购买单集
</button>
</div>
{!isAuth && !!videoList[activeIndex]["is_class"] && (
<div className="purchase-box">
<div className="hint">您尚未购买该课时,请购买后学习。</div>
<div className="btns">
<button
type="button"
onClick={this.tobuy}
className="purchase-class"
>
¥{salePrice} 购买课程
</button>
<button
type="button"
onClick={this.toSingleset.bind(
this,
videoList[activeIndex]
)}
className="purchase-episode"
>
¥{videoList.length && videoList[activeIndex]["class_price"]}{" "}
购买单集
</button>
</div>
)
}
{
!isAuth && !!course.is_aist && (
<div className="is-aist-box">
<i className={'iconfont iconiconfront-21'}></i>
<p className={'time'}>{videoList[activeIndex]['aist_start_time']}</p>
<p className={'time'}>请耐心等待...</p>
</div>
)
}
</div>
)}
{!isAuth && !!course.is_aist && (
<div className="is-aist-box">
<i className={"iconfont iconiconfront-21"}></i>
<p className={"time"}>
{videoList[activeIndex]["aist_start_time"]}
</p>
<p className={"time"}>请耐心等待...</p>
</div>
)}
</div>
<div className='tab'>
<div className="tab">
<div>
<NavLink to={{pathname: `${match.url}/video`, search: `?id=${this.courseID}`}}
replace
activeClassName='active'
>视频</NavLink>
<NavLink
to={{
pathname: `${match.url}/video`,
search: `?id=${this.courseID}`,
}}
replace
activeClassName="active"
>
视频
</NavLink>
</div>
<div>
<NavLink to={{pathname: `${match.url}/datum`, search: `?id=${this.courseID}`}}
replace
activeClassName='active'
>资料</NavLink>
<NavLink
to={{
pathname: `${match.url}/datum`,
search: `?id=${this.courseID}`,
}}
replace
activeClassName="active"
>
资料
</NavLink>
</div>
</div>
{/*单集购买*/}
{
singleBox &&
{singleBox && (
<Single
courseId={course.course_id}
singleBox={this.state.singleBox}
......@@ -910,11 +992,11 @@ class Video extends Component {
vcourseId={course.v_course_id}
videoId={this.state.singMess.video_id}
check={this.check}
title={this.state.singMess.course_tile}/>
}
title={this.state.singMess.course_tile}
/>
)}
{/* 单集购买成功 */}
{
singleType !== 1 &&
{singleType !== 1 && (
<SingleSuccess
courseId={course.course_id}
boxHide={this.boxHide}
......@@ -925,17 +1007,20 @@ class Video extends Component {
nowPrice={this.state.nowPrice}
laterPrice={this.state.laterPrice}
/>
}
)}
</Loading>
<Switch>
<Redirect exact from={'/play'} to={{
pathname: '/play/video',
search: location.search,
}}/>
<Redirect
exact
from={"/play"}
to={{
pathname: "/play/video",
search: location.search,
}}
/>
<Route
path={`${match.path}/video`}
render={props => {
render={(props) => {
return (
<VideoCatalog
activeIndex={this.state.activeIndex}
......@@ -944,72 +1029,95 @@ class Video extends Component {
isAist={course.is_aist}
{...props}
/>
);
)
}}
/>
<Route
path={`${match.path}/datum`}
render={(props) => {
return <DatumCatalog {...props} datum={this.state.datum} />
}}
/>
<Route path={`${match.path}/datum`} render={props => {
return <DatumCatalog {...props} datum={this.state.datum}/>
}}/>
</Switch>
<Route render={props => {
return this.state.vCourseId ? <Recommendation {...props} vCourseId={this.state.vCourseId}/>
: null
}}/>
<ProgressShareModal isShow={this.state.isShowShareModal}
closeShareModal={() => this.setState({isShowShareModal: false})}
data={this.state.shareData}
<Route
render={(props) => {
return this.state.vCourseId ? (
<Recommendation {...props} vCourseId={this.state.vCourseId} />
) : null
}}
/>
<ProgressShareModal
isShow={this.state.isShowShareModal}
closeShareModal={() => this.setState({ isShowShareModal: false })}
data={this.state.shareData}
/>
{
showLimitFreePopup &&
<div className={'limit-free-cover'}>
{showLimitFreePopup && (
<div className={"limit-free-cover"}>
<div className="free-popup">
<div className="title">
<span>{limitFreePopup.pop_descbition}</span>
</div>
<div className={'des'}>
<img className="qrcode"
src={limitFreePopup.wechat_img} alt=''/>
<div className={"des"}>
<img
className="qrcode"
src={limitFreePopup.wechat_img}
alt=""
/>
<span>长按/扫码识别</span>
<span>添加时请备注<span>{course.course_id}</span>哦</span>
<span>
添加时请备注<span>{course.course_id}</span>
</span>
<div className="no-prompt">
{
isShowNeverShowPopupOption &&
{isShowNeverShowPopupOption && (
<label htmlFor="no-prompt">
<span
className={`checkbox-label ${this.state.limitFreeNoPromptChecked ? 'checked' : 'unchecked'}`}>
<i className={'iconfont iconiconfront-73'}/>
className={`checkbox-label ${
this.state.limitFreeNoPromptChecked
? "checked"
: "unchecked"
}`}
>
<i className={"iconfont iconiconfront-73"} />
</span>
<input type="checkbox" id={'no-prompt'} onChange={(e) => {
this.setState({
limitFreeNoPromptChecked: e.target.checked,
})
}}/>
<input
type="checkbox"
id={"no-prompt"}
onChange={(e) => {
this.setState({
limitFreeNoPromptChecked: e.target.checked,
})
}}
/>
<span>本课程不再提示</span>
</label>
}
)}
</div>
</div>
<i className={'close-btn iconfont iconiconfront-2'} onClick={() => {
this.setState({
showLimitFreePopup: false,
isShowNeverShowPopupOption: true,
})
const {courseId, limitFreePopupVideos} = this.state
localStorage.setItem('limit-free-popup-videos', JSON.stringify(
limitFreePopupVideos ? [...limitFreePopupVideos, courseId] : [courseId],
))
this.checkNeverShowLimitFreePopup()
}}/>
<i
className={"close-btn iconfont iconiconfront-2"}
onClick={() => {
this.setState({
showLimitFreePopup: false,
isShowNeverShowPopupOption: true,
})
const { courseId, limitFreePopupVideos } = this.state
localStorage.setItem(
"limit-free-popup-videos",
JSON.stringify(
limitFreePopupVideos
? [...limitFreePopupVideos, courseId]
: [courseId]
)
)
this.checkNeverShowLimitFreePopup()
}}
/>
</div>
</div>
}
)}
</div>
);
)
}
}
export default connect(
state => ({user: state.user}),
null,
)(Video);
export default connect((state) => ({ user: state.user }), null)(Video)
import React, { PureComponent } from "react"
import { connect } from "react-redux"
import { getCourses } from "./../../detail/actions"
import "./recommendation.scss"
import { http } from "src/utils"
import { Toast } from "antd-mobile"
......@@ -45,10 +44,8 @@ class Recommendation extends PureComponent {
}
toCourseDetail = (id) => {
const { dispatch, history } = this.props
// dispatch(getCourses(id, () => {
const { history } = this.props
history.push(`/detail?id=${id}`)
// }));
}
render() {
......
/* eslint-disable eqeqeq, jsx-a11y/anchor-is-valid */
import React, { Component } from "react"
import "./index.scss"
import { http, SendMessageToApp, getParam } from "src/utils"
......@@ -178,7 +179,7 @@ class NewVip extends Component {
// 保存cookie
appLogin = () => {
let expires = addDays(new Date(), 90)
this.state.userInfoList.map((item, index) => {
this.state.userInfoList.forEach((item, index) => {
cookie.set("token", item.token, {
expires,
path: "/",
......@@ -215,7 +216,7 @@ class NewVip extends Component {
}
transformUser = (res) => {
let payload
res.map((item, index) => {
res.forEach((item, index) => {
payload = {
hasError: false,
data: {
......
......@@ -23,7 +23,7 @@ function RouteMiddlePage(props) {
}
}
}
}, [props.user.isFetching])
}, [props, props.user.isFetching])
return (
<div className={"loading-route"}>
......
......@@ -27,7 +27,7 @@ export default function SendMessageToApp() {
window[fun_name] = callback
}
if (window.webkit != undefined) {
if (window.webkit !== undefined) {
sendToIOS(messageName, params)
} else {
//貌似安卓传的参数,不能是数组和对象,所以这里json一下
......
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