Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mr-julyedu
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
baiguangyao
mr-julyedu
Commits
434cb9ad
Commit
434cb9ad
authored
Aug 31, 2020
by
zhanghaozhe
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
eslint prettier
parent
34103119
Hide whitespace changes
Inline
Side-by-side
Showing
88 changed files
with
735 additions
and
674 deletions
+735
-674
src/App.js
+2
-2
src/common/Course/index.js
+1
-3
src/common/OrderList/index.js
+0
-1
src/common/addressPopup/index.js
+1
-1
src/common/bindPhone/index.js
+1
-0
src/components/Index/expandActiveToast/index.js
+1
-1
src/components/Index/index.js
+1
-1
src/components/activity/1111/index.js
+2
-4
src/components/activity/1111/prize-winner-list/index.js
+1
-1
src/components/activity/2020-717/activity/index.js
+4
-3
src/components/activity/give-courses/assistance/index.js
+2
-1
src/components/activity/give-courses/index.js
+2
-2
src/components/activity/newyear-2019/common/prizes/index.js
+1
-0
src/components/activity/newyear-2019/landing/index.js
+2
-3
src/components/activity/newyear-2019/myTreasure/index.js
+0
-1
src/components/activity/newyear-2019/myTreasure/prize.js
+1
-0
src/components/activity/newyear-2019/myTreasure/team.js
+1
-1
src/components/activity/newyear-2019/preheat/LiveRoom/index.js
+5
-5
src/components/activity/newyear-2019/preheat/nav.js
+0
-5
src/components/activity/newyear-2019/year-wish/index.js
+1
-0
src/components/activity/treasure-box/common/prizes/index.js
+1
-0
src/components/activity/treasure-box/landing/index.js
+2
-3
src/components/activity/treasure-box/myTreasure/index.js
+0
-1
src/components/activity/treasure-box/myTreasure/prize.js
+1
-0
src/components/activity/treasure-box/myTreasure/team.js
+1
-1
src/components/activity/treasure-box/preheat/LiveRoom/index.js
+5
-5
src/components/activity/treasure-box/preheat/YearCourse/index.js
+3
-17
src/components/activity/treasure-box/preheat/index.js
+4
-6
src/components/ai-test/common/question/index.js
+0
-1
src/components/ai-test/report/index.js
+1
-0
src/components/ai-test/scores/index.js
+1
-8
src/components/ai-test/share/index.js
+2
-2
src/components/bargainMiddlePage/barcode/index.js
+1
-1
src/components/blessingPreheat/addressPopup/index.js
+1
-2
src/components/blessingPreheat/collectBlessing/index.js
+1
-2
src/components/blessingPreheat/courseItem/index.js
+1
-0
src/components/blessingPreheat/courseList/index.js
+1
-1
src/components/blessingPreheat/coursePopup/index.js
+1
-0
src/components/blessingPreheat/formal-draw/index.js
+2
-1
src/components/blessingPreheat/levelTest/index.js
+4
-3
src/components/blessingPreheat/live/index.js
+2
-2
src/components/blessingPreheat/recordPopup/index.js
+1
-1
src/components/blessingPreheat/sharePopup/index.js
+1
-0
src/components/blessingPreheat/toAppDemo.js
+2
-2
src/components/classify/courselist.js
+2
-3
src/components/classify/index.js
+2
-1
src/components/country/index.js
+1
-0
src/components/coupons/myCoupons/index.js
+1
-1
src/components/coupons/myPatch/index.js
+1
-2
src/components/detail/actions.js
+1
-1
src/components/detail/btnstatus/index.js
+2
-3
src/components/detail/followQRcode/index.js
+2
-2
src/components/detail/group/index.js
+3
-6
src/components/detail/group/togroup.js
+2
-2
src/components/detail/index.js
+3
-9
src/components/expand/callback.js
+2
-2
src/components/intelligent-recommend/index.js
+2
-0
src/components/limit-free/index.js
+2
-1
src/components/ml/pythomDes/Description/index.js
+1
-0
src/components/ml/pythomDes/Study/index.js
+1
-1
src/components/ml/pythomDes/index.js
+1
-0
src/components/ml/pythonStudy/index.js
+1
-0
src/components/my/index.js
+1
-0
src/components/myOrders/index.js
+1
-0
src/components/order/deposit/deposit-order/index.js
+2
-3
src/components/passport/bindingTel/index.js
+1
-1
src/components/passport/forgotPassword/index.js
+1
-1
src/components/passport/forgotPasswordEmail/index.js
+1
-1
src/components/passport/login/index.js
+1
-0
src/components/passport/setPassword/index.js
+2
-14
src/components/preferential/index.js
+3
-4
src/components/purchased/index.js
+2
-3
src/components/python/index.js
+2
-2
src/components/python/pythomDes/Description/index.js
+1
-0
src/components/python/pythomDes/index.js
+1
-0
src/components/scholarship/CategoryItem/CategoryItem.js
+1
-4
src/components/scholarship/SortItem/SortItem.js
+1
-3
src/components/shopCart/cartItem.js
+0
-1
src/components/study/myCourses/actions.js
+2
-2
src/components/ts-test/index.tsx
+1
-0
src/components/video/camp/campResolve.js
+2
-2
src/components/video/camp/campTest.js
+2
-2
src/components/video/camp/common/common.js
+1
-1
src/components/video/index.js
+602
-494
src/components/video/recommendation/index.js
+1
-4
src/components/vip/index.js
+3
-2
src/router/route-middle-page.js
+1
-1
src/utils/app.js
+1
-1
No files found.
src/App.js
View file @
434cb9ad
...
...
@@ -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
...
...
src/common/Course/index.js
View file @
434cb9ad
/* 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
>
...
...
src/common/OrderList/index.js
View file @
434cb9ad
import
React
from
"react"
import
"./orderlist.scss"
import
{
Link
}
from
"react-router-dom"
/**
* @OrderList 组件内容
...
...
src/common/addressPopup/index.js
View file @
434cb9ad
...
...
@@ -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
,
{
...
...
src/common/bindPhone/index.js
View file @
434cb9ad
/* eslint-disable jsx-a11y/anchor-is-valid */
import
React
,
{
Component
}
from
"react"
import
{
Formik
,
Form
,
Field
}
from
"formik"
import
{
Toast
}
from
"antd-mobile"
...
...
src/components/Index/expandActiveToast/index.js
View file @
434cb9ad
...
...
@@ -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
,
...
...
src/components/Index/index.js
View file @
434cb9ad
/* 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'
...
...
src/components/activity/1111/index.js
View file @
434cb9ad
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
(
c
ookie
.
get
(
"uid"
))
{
if
(
jsC
ookie
.
get
(
"uid"
))
{
this
.
setState
(()
=>
({
butText
:
"已领取,去使用"
,
}))
...
...
src/components/activity/1111/prize-winner-list/index.js
View file @
434cb9ad
...
...
@@ -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
,
...
...
src/components/activity/2020-717/activity/index.js
View file @
434cb9ad
/* 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
,
})
...
...
src/components/activity/give-courses/assistance/index.js
View file @
434cb9ad
/* 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
,
...
...
src/components/activity/give-courses/index.js
View file @
434cb9ad
/*
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"
>
...
...
src/components/activity/newyear-2019/common/prizes/index.js
View file @
434cb9ad
/* eslint-disable eqeqeq, jsx-a11y/anchor-is-valid, no-script-url */
import
React
,
{
Component
}
from
"react"
import
{
http
}
from
"src/utils"
import
"./prizes.scss"
...
...
src/components/activity/newyear-2019/landing/index.js
View file @
434cb9ad
/* 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
{
...
...
src/components/activity/newyear-2019/myTreasure/index.js
View file @
434cb9ad
...
...
@@ -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
(
...
...
src/components/activity/newyear-2019/myTreasure/prize.js
View file @
434cb9ad
/* eslint-disable jsx-a11y/anchor-is-valid */
import
React
from
"react"
import
"./prize.scss"
...
...
src/components/activity/newyear-2019/myTreasure/team.js
View file @
434cb9ad
/* 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"
...
...
src/components/activity/newyear-2019/preheat/LiveRoom/index.js
View file @
434cb9ad
/* 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
{
...
...
src/components/activity/newyear-2019/preheat/nav.js
View file @
434cb9ad
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分拼团"
,
...
...
src/components/activity/newyear-2019/year-wish/index.js
View file @
434cb9ad
/* eslint-disable jsx-a11y/anchor-is-valid, eqeqeq */
import
React
,
{
Component
}
from
"react"
import
"./index.scss"
import
{
http
,
SendMessageToApp
,
getParam
}
from
"src/utils"
...
...
src/components/activity/treasure-box/common/prizes/index.js
View file @
434cb9ad
/* eslint-disable eqeqeq, jsx-a11y/anchor-is-valid, no-script-url */
import
React
,
{
Component
}
from
"react"
import
{
http
}
from
"src/utils"
import
"./prizes.scss"
...
...
src/components/activity/treasure-box/landing/index.js
View file @
434cb9ad
/* 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
{
...
...
src/components/activity/treasure-box/myTreasure/index.js
View file @
434cb9ad
...
...
@@ -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
(
...
...
src/components/activity/treasure-box/myTreasure/prize.js
View file @
434cb9ad
/* eslint-disable jsx-a11y/anchor-is-valid */
import
React
from
"react"
import
"./prize.scss"
...
...
src/components/activity/treasure-box/myTreasure/team.js
View file @
434cb9ad
/* 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"
...
...
src/components/activity/treasure-box/preheat/LiveRoom/index.js
View file @
434cb9ad
/* 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
{
...
...
src/components/activity/treasure-box/preheat/YearCourse/index.js
View file @
434cb9ad
/* 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
&&
(
...
...
src/components/activity/treasure-box/preheat/index.js
View file @
434cb9ad
/* 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
:
{
...
...
src/components/ai-test/common/question/index.js
View file @
434cb9ad
import
React
,
{
Component
}
from
"react"
import
"./index.scss"
import
{
html
}
from
"src/utils"
import
classnames
from
"classnames"
class
Question
extends
Component
{
...
...
src/components/ai-test/report/index.js
View file @
434cb9ad
/* eslint-disable eqeqeq */
import
React
,
{
Component
}
from
"react"
import
{
HeaderBar
}
from
"src/common"
import
{
getParam
,
http
}
from
"src/utils"
...
...
src/components/ai-test/scores/index.js
View file @
434cb9ad
/* 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"
),
...
...
src/components/ai-test/share/index.js
View file @
434cb9ad
...
...
@@ -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
,
...
...
src/components/bargainMiddlePage/barcode/index.js
View file @
434cb9ad
...
...
@@ -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
,
})
...
...
src/components/blessingPreheat/addressPopup/index.js
View file @
434cb9ad
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
,
{
...
...
src/components/blessingPreheat/collectBlessing/index.js
View file @
434cb9ad
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
?
(
...
...
src/components/blessingPreheat/courseItem/index.js
View file @
434cb9ad
/* eslint-disable eqeqeq */
import
React
,
{
Component
}
from
"react"
import
"./index.scss"
...
...
src/components/blessingPreheat/courseList/index.js
View file @
434cb9ad
...
...
@@ -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端双十一开始使用优惠券"
])
...
...
src/components/blessingPreheat/coursePopup/index.js
View file @
434cb9ad
/* eslint-disable eqeqeq */
import
React
,
{
Component
}
from
"react"
import
classnames
from
"classnames"
import
{
http
,
SendMessageToApp
}
from
"src/utils"
...
...
src/components/blessingPreheat/formal-draw/index.js
View file @
434cb9ad
/* 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
...
...
src/components/blessingPreheat/levelTest/index.js
View file @
434cb9ad
/* 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"
>
...
...
src/components/blessingPreheat/live/index.js
View file @
434cb9ad
/*
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
)
{
...
...
src/components/blessingPreheat/recordPopup/index.js
View file @
434cb9ad
/* 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
{
...
...
src/components/blessingPreheat/sharePopup/index.js
View file @
434cb9ad
/* eslint-disable jsx-a11y/alt-text */
import
React
,
{
Component
}
from
"react"
import
{
browser
}
from
"src/utils"
import
"./index.scss"
...
...
src/components/blessingPreheat/toAppDemo.js
View file @
434cb9ad
...
...
@@ -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
:
{
...
...
src/components/classify/courselist.js
View file @
434cb9ad
/* 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
=
()
=>
{
...
...
src/components/classify/index.js
View file @
434cb9ad
/* 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
}
...
...
src/components/country/index.js
View file @
434cb9ad
/* eslint-disable jsx-a11y/anchor-is-valid */
import
React
,
{
Component
}
from
"react"
import
{
connect
}
from
"react-redux"
import
{
bindActionCreators
}
from
"redux"
...
...
src/components/coupons/myCoupons/index.js
View file @
434cb9ad
/* 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"
...
...
src/components/coupons/myPatch/index.js
View file @
434cb9ad
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
)
{
...
...
src/components/detail/actions.js
View file @
434cb9ad
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"
...
...
src/components/detail/btnstatus/index.js
View file @
434cb9ad
/* 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"
)
...
...
src/components/detail/followQRcode/index.js
View file @
434cb9ad
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
,
})
...
...
src/components/detail/group/index.js
View file @
434cb9ad
/* 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
,
...
...
src/components/detail/group/togroup.js
View file @
434cb9ad
/* 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
)
{
...
...
src/components/detail/index.js
View file @
434cb9ad
/* 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
=
{}
},
...
...
src/components/expand/callback.js
View file @
434cb9ad
...
...
@@ -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"
)
...
...
src/components/intelligent-recommend/index.js
View file @
434cb9ad
/* 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
:
...
...
src/components/limit-free/index.js
View file @
434cb9ad
/* 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
,
})
...
...
src/components/ml/pythomDes/Description/index.js
View file @
434cb9ad
/* eslint-disable jsx-a11y/alt-text */
import
React
,
{
Component
}
from
"react"
import
"./index.scss"
...
...
src/components/ml/pythomDes/Study/index.js
View file @
434cb9ad
...
...
@@ -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
]
...
...
src/components/ml/pythomDes/index.js
View file @
434cb9ad
/* eslint-disable jsx-a11y/alt-text */
import
React
,
{
Component
}
from
"react"
import
"./index.scss"
import
Description
from
"./Description/index.js"
...
...
src/components/ml/pythonStudy/index.js
View file @
434cb9ad
/* eslint-disable */
import
React
,
{
Component
}
from
"react"
import
{
Accordion
,
Toast
}
from
"antd-mobile"
import
{
HeaderBar
,
CallApp
}
from
"src/common"
...
...
src/components/my/index.js
View file @
434cb9ad
/* 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"
...
...
src/components/myOrders/index.js
View file @
434cb9ad
/* eslint-disable eqeqeq */
import
React
,
{
Component
}
from
"react"
import
"./index.scss"
import
{
HeaderBar
}
from
"../../common"
...
...
src/components/order/deposit/deposit-order/index.js
View file @
434cb9ad
...
...
@@ -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"
],
...
...
src/components/passport/bindingTel/index.js
View file @
434cb9ad
...
...
@@ -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`
,
{
...
...
src/components/passport/forgotPassword/index.js
View file @
434cb9ad
...
...
@@ -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
,
})
...
...
src/components/passport/forgotPasswordEmail/index.js
View file @
434cb9ad
...
...
@@ -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
,
})
...
...
src/components/passport/login/index.js
View file @
434cb9ad
/* eslint-disable jsx-a11y/anchor-is-valid */
import
React
,
{
Component
}
from
"react"
import
"./wechatLogin.scss"
import
Input
from
"../common/inputWithCountryCodes"
...
...
src/components/passport/setPassword/index.js
View file @
434cb9ad
...
...
@@ -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
(()
=>
{
...
...
src/components/preferential/index.js
View file @
434cb9ad
/* 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
()
{
...
...
src/components/purchased/index.js
View file @
434cb9ad
/* 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
...
...
src/components/python/index.js
View file @
434cb9ad
...
...
@@ -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
:
{
...
...
src/components/python/pythomDes/Description/index.js
View file @
434cb9ad
/* eslint-disable jsx-a11y/alt-text */
import
React
,
{
Component
}
from
"react"
import
"./index.scss"
...
...
src/components/python/pythomDes/index.js
View file @
434cb9ad
/* eslint-disable eqeqeq, jsx-a11y/alt-text */
import
React
,
{
Component
}
from
"react"
import
"./index.scss"
import
Description
from
"./Description/index.js"
...
...
src/components/scholarship/CategoryItem/CategoryItem.js
View file @
434cb9ad
/* 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
,
...
...
src/components/scholarship/SortItem/SortItem.js
View file @
434cb9ad
/* 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
=
""
...
...
src/components/shopCart/cartItem.js
View file @
434cb9ad
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
{
// 构造函数
...
...
src/components/study/myCourses/actions.js
View file @
434cb9ad
...
...
@@ -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
(
...
...
src/components/ts-test/index.tsx
View file @
434cb9ad
...
...
@@ -18,4 +18,5 @@ const TSTest: React.FC = () => {
</
div
>
)
}
export
default
withRouter
(
TSTest
)
src/components/video/camp/campResolve.js
View file @
434cb9ad
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
++
}
...
...
src/components/video/camp/campTest.js
View file @
434cb9ad
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
...
...
src/components/video/camp/common/common.js
View file @
434cb9ad
...
...
@@ -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
}
...
...
src/components/video/index.js
View file @
434cb9ad
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
)
src/components/video/recommendation/index.js
View file @
434cb9ad
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
()
{
...
...
src/components/vip/index.js
View file @
434cb9ad
/* 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
:
{
...
...
src/router/route-middle-page.js
View file @
434cb9ad
...
...
@@ -23,7 +23,7 @@ function RouteMiddlePage(props) {
}
}
}
},
[
props
.
user
.
isFetching
])
},
[
props
,
props
.
user
.
isFetching
])
return
(
<
div
className
=
{
"loading-route"
}
>
...
...
src/utils/app.js
View file @
434cb9ad
...
...
@@ -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一下
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment