Commit 10311673 by xuzhenghua

ml小课优化

parent 2c353d5e
...@@ -15,8 +15,8 @@ export default class Experience extends Component { ...@@ -15,8 +15,8 @@ export default class Experience extends Component {
<div className={'experience'}> <div className={'experience'}>
<img src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/L%402x.png" alt=""/> <img src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/L%402x.png" alt=""/>
<div> <div>
<p>限时福利免费试学</p> <p>特价试学99 体验前3个课时</p>
<p>颠覆你想象的学习</p> <p>颠覆你想象的学习</p>
</div> </div>
<img src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/r%402x.png" alt=""/> <img src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/r%402x.png" alt=""/>
</div> </div>
...@@ -37,7 +37,7 @@ export default class Experience extends Component { ...@@ -37,7 +37,7 @@ export default class Experience extends Component {
</> </>
) )
} }
</div> </div>
) )
} }
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
width: 250px; width: 310px;
margin: 22px auto 28px; margin: 22px auto 28px;
img { img {
width: 16px; width: 16px;
......
...@@ -9,7 +9,7 @@ import Selection from './Selection' ...@@ -9,7 +9,7 @@ import Selection from './Selection'
import Mask from './../poup/index.js' import Mask from './../poup/index.js'
import InAction from "./InAction" import InAction from "./InAction"
import ShareRank from "@components/detail/shareRank" import ShareRank from "@components/detail/shareRank"
import { http, getParam, SendMessageToApp, } from '@/utils' import { http, getParam, SendMessageToApp, browser} from '@/utils'
import { connect } from 'react-redux' import { connect } from 'react-redux'
import { Toast } from "antd-mobile" import { Toast } from "antd-mobile"
import { CallApp } from "@common/index" import { CallApp } from "@common/index"
...@@ -29,31 +29,134 @@ class PythonDes extends Component { ...@@ -29,31 +29,134 @@ class PythonDes extends Component {
payMoney: 0, payMoney: 0,
isOnline: true, //课程是否上架 isOnline: true, //课程是否上架
courseInfo: {}, courseInfo: {},
isShowChannel: window.sessionStorage.getItem('isShowSiteWindowByChannel') isShowChannel: window.sessionStorage.getItem('isShowSiteWindowByChannel'),
orderId:''
} }
} }
// 立即报名 // 立即报名
signUp = () => { // signUp = () => {
this.statistics(3) // this.statistics(3)
// 已登录 // // 已登录
if (!this.props.user.hasError) { // if (!this.props.user.hasError) {
this.toDetail() // this.toDetail()
} else {// 未登录 // } else {// 未登录
this.toLogin() // this.toLogin()
} // }
} // }
// 立即体验、免费试学 // 立即体验、免费试学
tryLearn = type => { tryLearn = type => {
this.statistics(type) this.statistics(type)
// 已登录 // 已登录
if (!this.props.user.hasError) { if (!this.props.user.hasError) {
this.toLearn() this.creatOid()
} else {// 未登录 } else {// 未登录
this.toLogin() this.toLogin()
} }
} }
creatOid=()=>{
http.post(`${API['base-api']}/sys/trial_create`, {course_id: getParam('id')}).then(res => {
const {errno, data, msg} = res.data
if (errno === 200) {
this.setState({
orderId: data.oid
})
this.weixinPay(data.oid)
} else {
Toast.info(msg, 2)
}
})
}
// 微信支付
weixinPay = (orderId) => {
// 微信内部-支付
if (browser.isWeixin) {
window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx23dac6775ac82877&redirect_uri=" + encodeURIComponent(window.location.href + "&aa=bb&oid=" + orderId).toLowerCase() + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
} else {
// 微信外部-支付
http.get(`${API['base-api']}/pay/wxpay/wap_charge/oid/${orderId}`).then((res) => {
if (res.data.errno === 0) {
window.location.href = res.data.data.url + "&redirect_url=" + encodeURIComponent(window.location.href + "&weixinpay=1&oid=" + orderId).toLowerCase();
} else {
Toast.info(res.data.msg, 2)
}
})
}
}
// 微信支付
isweixinPay = () => {
let _this = this;
let weixin_code = getParam('code');
if (weixin_code) {
if (getParam('oid') === undefined) {
return
} else {
http.get(`${API['base-api']}/pay/wxpay/pub_charge/oid/${getParam('oid')}/code/${weixin_code}`).then((res) => {
if (res.data.errno === 0) {
let 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_wcpsys/order_status/ay_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;
location.reload()
}
})
}, 1000)
} else {
Toast.info('支付失败', 2);
}
}
)
}
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 {
Toast.info(res.data.msg, 2)
}
})
}
}
}
// 支付完成之后获取状态
payCallback = () => {
const _this = this;
// 支付回调
// 定时器轮训获取订单状态
_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;
location.reload()
}
})
}, 1000)
}
toLearn = () => { toLearn = () => {
const {backwardVersion} = this.props; const {backwardVersion} = this.props;
...@@ -169,6 +272,13 @@ class PythonDes extends Component { ...@@ -169,6 +272,13 @@ class PythonDes extends Component {
if (backwardVersion && isPay === 1) { if (backwardVersion && isPay === 1) {
Toast.info('当前版本不支持该课程模式,请升级到最新版本或前往PC端学习', 2); Toast.info('当前版本不支持该课程模式,请升级到最新版本或前往PC端学习', 2);
} }
if (browser.isWeixin) {
this.isweixinPay()
}
if (getParam('weixinpay')) {
this.payCallback()
}
} }
// 统计 // 统计
...@@ -214,11 +324,13 @@ class PythonDes extends Component { ...@@ -214,11 +324,13 @@ class PythonDes extends Component {
</div> </div>
<div className={'btn__group'}> <div className={'btn__group'}>
{/*<div className={'try__study'} onClick={() => { <div className={'try__study'} onClick={() => {
this.tryLearn(3)
}}>立即报名</div>
<div className={'sign__now'} onClick={() => {
this.tryLearn(2) this.tryLearn(2)
}}>免费试学 }}>9.9特价试学
</div>*/} </div>
<div className={'sign__now'} onClick={this.signUp}>立即报名</div>
</div> </div>
</div> </div>
) )
......
...@@ -161,7 +161,7 @@ ...@@ -161,7 +161,7 @@
align-items: center; align-items: center;
} }
.sign__now { .sign__now {
width: 100px; width: 110px;
height: 38px; height: 38px;
background: rgba(0, 153, 255, 1); background: rgba(0, 153, 255, 1);
border-radius: 19px; border-radius: 19px;
......
import React, { Component } from 'react'; import React, {Component} from 'react'
import { Accordion, Toast } from 'antd-mobile'; import {Accordion, Toast} from 'antd-mobile'
import { HeaderBar, CallApp} from '@/common'; import {HeaderBar, CallApp} from '@/common'
import { http, getParam } from '@/utils'; import {http, getParam,browser} from '@/utils'
import './index.scss'; import './index.scss'
import { connect } from "react-redux"; import {connect} from "react-redux"
import Mask from './../poup/index.js' import Mask from './../poup/index.js'
import ShareRank from "@components/detail/shareRank" import ShareRank from "@components/detail/shareRank"
class PythonStudy extends Component { class PythonStudy extends Component {
constructor(props) { constructor(props) {
super(props); super(props)
this.state = { this.state = {
toApp: false, toApp: false,
courseInfo: '', courseInfo: '',
syllabus: '', orderId: '',
learning: '', syllabus: '',
isShowChannel: window.sessionStorage.getItem('isShowSiteWindowByChannel') learning: '',
isShowChannel: window.sessionStorage.getItem('isShowSiteWindowByChannel')
};
} }
}
componentDidMount() {
this.fetchCourseDetail(); componentDidMount() {
} this.fetchCourseDetail()
fetchCourseDetail = () => { if (browser.isWeixin) {
http.get(`${API['home']}/web/it_detail?course_id=${getParam('id')}&is_pay=1`).then(res => { this.isweixinPay()
const {data, code, msg} = res.data; }
if (code === 200) { if (getParam('weixinpay')) {
this.payCallback()
}
}
fetchCourseDetail = () => {
http.get(`${API['home']}/web/it_detail?course_id=${getParam('id')}&is_pay=1`).then(res => {
const {data, code, msg} = res.data
if (code === 200) {
this.setState({
courseInfo: data.course_info,
syllabus: data.syllabus,
learning: data.learning
})
} else {
Toast.info(msg, 2)
}
})
}
Change = (data) => {
let cn = ["一", "二", "三", "四", "五", "六", "七", "八", "九", '十']
let newStr = ''
let str = data.toString()
let ci = Number(str) % 10
let cs = Math.floor(Number(str) / 10)
let cv = ''
if (str.length > 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]
}
} else {
cv = cn[ci - 1]
}
newStr = str.replace(str, cv)
return newStr
}
onChange = (key) => {
console.log(key)
}
toPythonHome = (isUnlock) => {
if (isUnlock == 1) {
this.setState({
toApp: true
})
}
}
toLearn = () => {
this.setState({ this.setState({
courseInfo: data.course_info, toApp: true
syllabus: data.syllabus,
learning: data.learning
}) })
} else {
Toast.info(msg, 2)
}
});
}
Change = (data) => {
let cn = ["一", "二", "三", "四", "五", "六", "七", "八", "九", '十'];
let newStr = ''
let str = data.toString()
let ci = Number(str) % 10
let cs = Math.floor(Number(str) / 10)
let cv = ''
if (str.length > 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]
}
} else {
cv = cn[ci - 1]
} }
newStr = str.replace(str, cv) closePop = () => {
return newStr; this.setState({
} toApp: false,
})
onChange = (key) => {
console.log(key);
}
toPythonHome = (isUnlock) => {
if (isUnlock == 1) {
this.setState({
toApp: true
})
} }
}
creatOid=()=>{
toLearn = () => { http.post(`${API['base-api']}/sys/trial_create`, {course_id: getParam('id')}).then(res => {
this.setState({ const {errno, data, msg} = res.data
toApp: true if (errno === 200) {
}) this.setState({
} orderId: data.oid
closePop = () => { })
this.setState({ this.weixinPay(data.oid)
toApp: false, } else {
}) Toast.info(msg, 2)
} }
})
render() { }
const {user} = this.props; // 微信支付
const uid = user && user.data && user.data.uid weixinPay = (orderId) => {
const {courseInfo, syllabus, learning, toApp} = this.state; // 微信内部-支付
return ( if (browser.isWeixin) {
<div className="python-study"> window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx23dac6775ac82877&redirect_uri=" + encodeURIComponent(window.location.href + "&aa=bb&oid=" + orderId).toLowerCase() + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
<HeaderBar title='机器学习小课' arrow={true}/> } else {
<div className="python-study__header"> // 微信外部-支付
<div className="python-study__course"> http.get(`${API['base-api']}/pay/wxpay/wap_charge/oid/${orderId}`).then((res) => {
<h2 className="python-study__course-name">机器学习小课</h2> if (res.data.errno === 0) {
<p className="python-study__course-contact"> window.location.href = res.data.data.url + "&redirect_url=" + encodeURIComponent(window.location.href + "&weixinpay=1&oid=" + orderId).toLowerCase();
<span>{courseInfo.contact_type == 1 ? '上课请加QQ学习群' : '添加助教微信入群'}{courseInfo.course_qq}</span> } else {
<span>并备注您的学号:{uid}</span> Toast.info(res.data.msg, 2)
</p>
</div>
{
learning.schedule > 0 &&
<div className="python-study__progress">
<h2 className="python-study__progress-title">
学习进度
{
!!learning.day && <span>(已连续学习<span>{learning.day}</span>天)</span>
} }
</h2> })
<div className="python-study__progress-bar">
<i style={{width: learning.schedule + '%'}}/>
<span className="python-study__progress-tip"
style={{left: learning.schedule + '%'}}>{learning.schedule + '%'}</span>
</div>
</div>
}
{
this.state.isShowChannel == 1 &&
<CallApp className='toapp'/>
}
</div>
{
!!courseInfo.is_dist && <div className={'dist-wrapper'}>
<ShareRank courseInfo={courseInfo}/>
</div>
} }
<Accordion }
defaultActiveKey="0" // 微信支付
className="python-study__stage" isweixinPay = () => {
onChange={this.onChange} let _this = this;
> let weixin_code = getParam('code');
{ if (weixin_code) {
syllabus && syllabus.length > 0 && syllabus.map((syllabusItem, index) => { if (getParam('oid') === undefined) {
let header = `第${this.Change(syllabusItem.stage)}阶段:${syllabusItem.name}` return
return ( } else {
<Accordion.Panel header={header} className="pad" key={index}> http.get(`${API['base-api']}/pay/wxpay/pub_charge/oid/${getParam('oid')}/code/${weixin_code}`).then((res) => {
{ if (res.data.errno === 0) {
syllabusItem.lessons && syllabusItem.lessons.length > 0 && syllabusItem.lessons.map((lessonsItem, index) => { let data = res.data.data;
return (
<div key={index}> function onBridgeReady() {
<h2 className="python-study__pass"> WeixinJSBridge.invoke(
{lessonsItem.shut} {lessonsItem.name} 'getBrandWCPayRequest', {
{ appId: data.appId, //公众号名称,由商户传入
lessonsItem.complete == 1 && timeStamp: data.timeStamp, //时间戳,自1970年以来的秒数
<i className="python-study__pass-tag">闯关完成</i> nonceStr: data.nonceStr, //随机串
} package: data.package,
</h2> signType: data.signType, //微信签名方式:
paySign: data.paySign //微信签名
<div className="python-study__subject" },
style={{opacity: lessonsItem.info.is_unlock == 0 ? '.6' : '1'}} function (res) {
onClick={() => { if (res.err_msg == "get_brand_wcpsys/order_status/ay_request:ok") {
this.toPythonHome(lessonsItem.info.is_unlock) Toast.info('支付成功', 2);
}} _this.intervalPayStatus = setInterval(function () {
key={index}> http.get(`${API['base-api']}/m/orderState/oid/${getParam('oid')}`).then(res => {
<img className="python-study__subject-icon" if (res.data.errno === 401) {
src={lessonsItem.info.img_url} alt=""/> clearInterval(_this.intervalPayStatus);
{ _this.intervalPayStatus = null;
lessonsItem.info.is_unlock == 1 && lessonsItem.info.complete == 1 && location.reload()
<i className="python-study__subject-status" }
data-status="complete"/> })
} }, 1000)
{ } else {
lessonsItem.info.is_unlock == 0 && Toast.info('支付失败', 2);
<i className="python-study__subject-status" }
data-status="lock"/> }
)
}
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false)
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady)
} }
<div className="python-study__subject-content"> } else {
<h2 className="python-study__subject-title text-overflow-1">{lessonsItem.info.name}</h2> onBridgeReady();
</div> }
</div> } else {
Toast.info(res.data.msg, 2)
{ }
lessonsItem.project && <div className="python-study__subject" })
style={{opacity: lessonsItem.project.is_unlock == 0 ? '.6' : '1'}} }
onClick={() => { }
this.toPythonHome(lessonsItem.project.is_unlock) }
}} // 支付完成之后获取状态
> payCallback = () => {
<img className="python-study__subject-icon" const _this = this;
src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/mlCourse/m/project-icon.png" alt=""/> // 支付回调
{ // 定时器轮训获取订单状态
lessonsItem.project.is_unlock == 1 && lessonsItem.project.complete == 1 && _this.intervalPayStatus = setInterval(function () {
<i className="python-study__subject-status" http.get(`${API['base-api']}/m/orderState/oid/${getParam('oid')}`).then(res => {
data-status="complete"/> if (res.data.errno === 401) {
} clearInterval(_this.intervalPayStatus);
{ _this.intervalPayStatus = null;
lessonsItem.project.is_unlock == 1 && lessonsItem.project.complete == 0 && location.reload()
<i className="python-study__subject-status" }
data-status="lock"/> })
} }, 1000)
<div className="python-study__subject-content"> }
<h2
className="python-study__subject-title text-overflow-1">{lessonsItem.project.name}</h2> render() {
const {user} = this.props
const uid = user && user.data && user.data.uid
const {courseInfo, syllabus, learning, toApp} = this.state
return (
<div className="python-study">
<HeaderBar title='机器学习小课' arrow={true}/>
<div className="python-study__header">
<div className="python-study__course">
<h2 className="python-study__course-name">机器学习小课</h2>
{
courseInfo.buy_try == 0 &&
<p className="python-study__course-contact">
<span>{courseInfo.contact_type == 1 ? '上课请加QQ学习群' : '添加助教微信入群'}{courseInfo.course_qq}</span>
<span>并备注您的学号:{uid}</span>
</p>
}
</div>
{
learning.schedule > 0 &&
<div className="python-study__progress">
<h2 className="python-study__progress-title">
学习进度
{ {
lessonsItem.project.is_must == 1 && !!learning.day && <span>(已连续学习<span>{learning.day}</span>天)</span>
<span
className="python-study__subject-tag">必做练习</span>
} }
</div> </h2>
<div className="python-study__progress-bar">
<i style={{width: learning.schedule + '%'}}/>
<span className="python-study__progress-tip"
style={{left: learning.schedule + '%'}}>{learning.schedule + '%'}</span>
</div> </div>
}
</div> </div>
) }
})
}
</Accordion.Panel>
)
})
}
</Accordion>
{
learning.schedule == 0 &&
<span onClick={this.toLearn} className="python-study__button">开始学习</span>
}
{
learning.schedule != 0 && learning.schedule != 100 &&
<span onClick={this.toLearn} className="python-study__button">继续学习</span>
}
{
learning.schedule == 100 &&
<button className="python-study__button python-study__over">已学完全部课时</button>
}
{ {
toApp && <Mask closePop={this.closePop} type={2}/> this.state.isShowChannel == 1 &&
} <CallApp className='toapp'/>
</div> }
)
} </div>
{
!!courseInfo.is_dist && <div className={'dist-wrapper'}>
<ShareRank courseInfo={courseInfo}/>
</div>
}
<Accordion
defaultActiveKey="0"
className="python-study__stage"
onChange={this.onChange}
>
{
syllabus && syllabus.length > 0 && syllabus.map((syllabusItem, index) => {
let header = `第${this.Change(syllabusItem.stage)}阶段:${syllabusItem.name}`
return (
<Accordion.Panel header={header} className="pad" key={index}>
{
syllabusItem.lessons && syllabusItem.lessons.length > 0 && syllabusItem.lessons.map((lessonsItem, index) => {
return (
<div key={index}>
<h2 className="python-study__pass">
{lessonsItem.shut} {lessonsItem.name}
{
lessonsItem.complete == 1 &&
<i className="python-study__pass-tag">闯关完成</i>
}
</h2>
<div className="python-study__subject"
style={{opacity: lessonsItem.info.is_unlock == 0 ? '.6' : '1'}}
onClick={() => {
this.toPythonHome(lessonsItem.info.is_unlock)
}}
key={index}>
<img className="python-study__subject-icon"
src={lessonsItem.info.img_url} alt=""/>
{
lessonsItem.info.is_unlock == 1 && lessonsItem.info.complete == 1 &&
<i className="python-study__subject-status"
data-status="complete"/>
}
{
lessonsItem.info.is_unlock == 0 &&
<i className="python-study__subject-status"
data-status="lock"/>
}
<div className="python-study__subject-content">
<h2 className="python-study__subject-title text-overflow-1">{lessonsItem.info.name}</h2>
</div>
</div>
{
lessonsItem.project && <div className="python-study__subject"
style={{opacity: lessonsItem.project.is_unlock == 0 ? '.6' : '1'}}
onClick={() => {
this.toPythonHome(lessonsItem.project.is_unlock)
}}
>
<img className="python-study__subject-icon"
src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/mlCourse/m/project-icon.png"
alt=""/>
{
lessonsItem.project.is_unlock == 1 && lessonsItem.project.complete == 1 &&
<i className="python-study__subject-status"
data-status="complete"/>
}
{
lessonsItem.project.is_unlock == 1 && lessonsItem.project.complete == 0 &&
<i className="python-study__subject-status"
data-status="lock"/>
}
<div className="python-study__subject-content">
<h2
className="python-study__subject-title text-overflow-1">{lessonsItem.project.name}</h2>
{
lessonsItem.project.is_must == 1 &&
<span
className="python-study__subject-tag">必做练习</span>
}
</div>
</div>
}
</div>
)
})
}
{
index === 0 && syllabus[0].lessons[2].complete == 1 && courseInfo.buy_try == 1 &&
<div className="study-end">
试学结束,<span>{courseInfo.price1}</span>学习全部课
<a className="tobuy" onClick={() => {
this.creatOid()
}}>立即报名</a>
</div>
}
</Accordion.Panel>
)
})
}
</Accordion>
{
learning.schedule == 0 &&
<span onClick={this.toLearn} className="python-study__button">开始学习</span>
}
{
learning.schedule != 0 && learning.schedule != 100 &&
<span onClick={this.toLearn} className="python-study__button">继续学习</span>
}
{
learning.schedule == 100 &&
<button className="python-study__button python-study__over">已学完全部课时</button>
}
{
toApp && <Mask closePop={this.closePop} type={2}/>
}
</div>
)
}
} }
export default connect( export default connect(
state => ({user: state.user}), state => ({user: state.user}),
null null
)(PythonStudy); )(PythonStudy)
\ No newline at end of file \ No newline at end of file
html, body, #root { html, body, #root {
height: 100%; height: 100%;
} }
.am-accordion.python-study__stage .am-accordion-item .am-accordion-header { .am-accordion.python-study__stage .am-accordion-item .am-accordion-header {
height: 44px; height: 44px;
padding-left: 13px; padding-left: 13px;
...@@ -11,7 +12,7 @@ html, body, #root { ...@@ -11,7 +12,7 @@ html, body, #root {
border-radius: 4px; border-radius: 4px;
} }
.am-accordion.python-study__stage .am-accordion-item-active .am-accordion-header{ .am-accordion.python-study__stage .am-accordion-item-active .am-accordion-header {
border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0;
} }
...@@ -47,7 +48,7 @@ html:not([data-scale]) .am-accordion.python-study__stage .am-accordion-item .am- ...@@ -47,7 +48,7 @@ html:not([data-scale]) .am-accordion.python-study__stage .am-accordion-item .am-
background-color: #F4F5F6; background-color: #F4F5F6;
padding-bottom: 15px; padding-bottom: 15px;
.dist-wrapper{ .dist-wrapper {
background: #fff; background: #fff;
margin: 20px 10px 30px; margin: 20px 10px 30px;
} }
...@@ -124,7 +125,7 @@ html:not([data-scale]) .am-accordion.python-study__stage .am-accordion-item .am- ...@@ -124,7 +125,7 @@ html:not([data-scale]) .am-accordion.python-study__stage .am-accordion-item .am-
} }
.python-study__progress { .python-study__progress {
color: rgba(255,255,255,.8); color: rgba(255, 255, 255, .8);
} }
.python-study__progress { .python-study__progress {
...@@ -137,9 +138,11 @@ html:not([data-scale]) .am-accordion.python-study__stage .am-accordion-item .am- ...@@ -137,9 +138,11 @@ html:not([data-scale]) .am-accordion.python-study__stage .am-accordion-item .am-
font-weight: 600; font-weight: 600;
color: #333333; color: #333333;
line-height: 39px; line-height: 39px;
&>span{
& > span {
color: #999; color: #999;
span{
span {
color: #09f; color: #09f;
} }
} }
...@@ -223,6 +226,7 @@ html:not([data-scale]) .am-accordion.python-study__stage .am-accordion-item .am- ...@@ -223,6 +226,7 @@ html:not([data-scale]) .am-accordion.python-study__stage .am-accordion-item .am-
border-radius: 4px; border-radius: 4px;
box-sizing: border-box; box-sizing: border-box;
background-color: rgba(247, 248, 249, 1); background-color: rgba(247, 248, 249, 1);
&[data-status="lock"] { &[data-status="lock"] {
background-color: rgba(247, 248, 249, .6); background-color: rgba(247, 248, 249, .6);
} }
...@@ -305,4 +309,26 @@ html:not([data-scale]) .am-accordion.python-study__stage .am-accordion-item .am- ...@@ -305,4 +309,26 @@ html:not([data-scale]) .am-accordion.python-study__stage .am-accordion-item .am-
.python-study__over { .python-study__over {
background-color: #ccc; background-color: #ccc;
}
.study-end {
width: 100%;
background-color: #F4F5F6;
padding-top: 15px;
margin-bottom: -10px;
text-align: right;
margin-top: 20px;
.tobuy {
text-align: center;
display: inline-block;
width: 84px;
height: 30px;
line-height: 30px;
background-color: #FC262D;
border-radius: 15px;
font-size:16px;
color: #fff;
margin-left: 10px;
}
} }
\ No newline at end of file
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