Commit f7e305e9 by zhanghaozhe

智能选课

parent a79c2139
......@@ -17,7 +17,7 @@ import AllCourseNavigation from "./all-course"
// const animateTypes = Swiper.animateTypes
@connect(state => ({
user: state.user
user: state.user,
}))
class Index extends Component {
constructor(props) {
......@@ -33,28 +33,28 @@ class Index extends Component {
{
'src': require('./image/freeclass_icon.png'),
'name': '公开课',
'href': '/study/free-course'
'href': '/study/free-course',
},
{
'src': require('./image/jingpin_icon.png'),
'name': '精品特惠',
'href': '/preferential'
'href': '/preferential',
},
{
'src': require('./image/zjxj_icon.png'),
'name': '赚奖学金',
'href': '/scholarship'
'href': '/scholarship',
},
{
'src': require('./image/mryt_icon.png'),
'name': '每日一题',
'href': '/examination'
'href': '/examination',
},
{
'src': require('./image/shequ_icon.png'),
'name': '社区',
'href': 'https://ask.julyedu.com'
}
'href': 'https://ask.julyedu.com',
},
],
}
}
......@@ -72,7 +72,7 @@ class Index extends Component {
this.setState({
banner: data.banner,
lives: data.lives,
modules
modules,
})
} else {
Toast.info(res.data.msg, 2)
......@@ -93,7 +93,7 @@ class Index extends Component {
this.setState({
isShow: true,
islive: true,
roomMess: item
roomMess: item,
})
} else {
window.location.href = `${window.location.href.includes('pre') ? 'http://www-pre.julyedu.com' : 'http://www.julyedu.com'}/live/m_room/${item.room_id}`
......@@ -119,14 +119,22 @@ class Index extends Component {
src="http://julyedu-img-public.oss-cn-beijing.aliyuncs.com/Public/img/index/logo.png"
alt=""
/>
<CallApp
{/* <CallApp
className='to-app'
text='在APP打开'
/>
<i
className='iconfont iconiconfront- search'
onClick={this.toSearch.bind(this)}
/>
/>*/}
<div className="right">
<Link to={'/intelligent-recommend'}>
<span className={'intelligent-recommend-entry'}>
<i className={'mind-icon'}></i>
智能选课
</span>
</Link>
<i
className='iconfont iconiconfront- search'
onClick={this.toSearch.bind(this)}
/>
</div>
</div>
<div className='zw_height'></div>
......
......@@ -34,6 +34,29 @@
vertical-align: top;
}
.right {
float: right;
height: 100%;
}
.intelligent-recommend-entry {
float: left;
margin-right: 20px;
font-size: 14px;
color: #09f;
line-height: 24px;
.mind-icon {
display: inline-block;
width: 16px;
height: 16px;
margin-right: 4px;
background: url("./image/mind-icon.png") no-repeat;
background-size: contain;
vertical-align: middle;
}
}
.search {
font-size: 22px !important;
float: right;
......@@ -88,6 +111,7 @@
.category {
width: 100%;
padding: 20px 15px 15px 15px;
.swiper-container {
height: 106px !important;
margin-top: 15px;
......@@ -263,7 +287,6 @@
}
/*
横向滚动
*/
......
import React, { Component } from 'react';
import './index.scss'
import { Link } from "react-router-dom";
class IntelligentRecommend extends Component {
state = {
showAnalyzing: false,
systemAvatar: 'https://julyedu-img-public.oss-cn-beijing.aliyuncs.com/Public/Image/home/avatar_20191104.png',
options: [
{
id: 1,
text: '数据分析',
},
{
id: 2,
text: '人工智能',
},
{
id: 3,
text: '无人驾驶',
},
],
processingQueue: [],
}
handleSelect = () => {
}
render() {
const {showAnalyzing, systemAvatar, processingQueue, options} = this.state
return (
<div id={'intelligent-recommend'}>
<div className="head">
<div>
<div className="go-back">
<i className='iconfont iconiconfront-68' onClick={this.goBack}></i>
</div>
<div className={'title'}>七月在线智能选课</div>
</div>
<button>重新选课</button>
</div>
<div className="dialog-box">
<Message text={'请问你学习的目的是?'} avatar={systemAvatar} identity={'system'}/>
<Options options={options} handleSelect={this.handleSelect}/>
<Message text={'请问你学习的目的是?'} avatar={systemAvatar} identity={'user'}/>
{
showAnalyzing && <div className="analyzing">努力分析中...</div>
}
</div>
<div className="result">
<div className="title">根据您目前的情况,推荐结果如下</div>
<div className="obtained">
<div className={'subtitle'}>您将掌握的技能:</div>
<div className={'skill'}>技能描述、技能描述</div>
</div>
<div className="obtained">
<div className={'subtitle'}>掌握后可以胜任以下工作及项目:</div>
<ul>
<li className={'skill'} style={{fontSize: '14px'}}>·技能描述、技能描述</li>
<li className={'skill'} style={{fontSize: '14px'}}>·工作及项目描述、工作及项目描述、项目描述</li>
</ul>
</div>
<div className={'salary-section'}>
<div className={'subtitle'}>薪资范围:</div>
<div className={'salary'}>¥15k25K</div>
</div>
<div className="recommends">
<div>想获得以上技能,向您推荐:</div>
<ul className={'courses'}>
<li className={'course'}>
<div className="cover">
<img src="https://julyedu-img-public.oss-cn-beijing.aliyuncs.com/Public/Image/1a3d88e90a.jpg" alt=""/>
</div>
<div className="info">
<div className={'title'}>课程名称</div>
<div className={'des'}>课程介绍课程介绍课程介绍课程介绍课程介绍课程介绍课程介绍课程介绍课程介绍课程介绍课程介绍课程介绍</div>
<div className="bar">
{/*<div className="prices">
<span className={'price'}>¥3980</span>
<span className={'old-price'}>¥5680</span>
</div>*/}
{/*<a href="http://q.url.cn/s/Vbkup6m?_type=wpa" className={'contact'}>获取课程大纲</a>
<Link className={'register'}>立即报名</Link>*/}
<Link className={'study'}>开始学习</Link>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
);
}
}
function Message({text, avatar, identity}) {
return <div className={`message clearfix ${identity}`}>
<div className="avatar">
<img src={avatar} alt=""/>
</div>
<div className={`text`}>{text}</div>
</div>
}
function Options({options, handleSelect}) {
return <ul className={'options'}>
{
!!options.length && options.map(item => {
return <li onClick={handleSelect} key={item.id}>
{item.text}
</li>
})
}
</ul>
}
export default IntelligentRecommend;
\ No newline at end of file
#intelligent-recommend {
background: linear-gradient(to right, #F1F0F6, #EBF4F9);
padding: 59px 10px 0;
.clearfix {
&::after {
content: ".";
visibility: hidden;
display: block;
height: 0;
clear: both;
}
}
.head {
position: fixed;
top: 0;
left: 0;
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
height: 44px;
padding: 0 15px;
background: #fff;
z-index: 100;
& > div {
display: flex;
align-items: center;
}
.iconfont {
font-size: 16px;
color: #222;
font-weight: 600;
}
.title {
margin-left: 10px;
font-size: 15px;
color: #2b2b2b;
}
button {
width: 84px;
height: 30px;
border: 1px solid #09f;
border-radius: 15px;
color: #09f;
font-size: 13px;
outline: 0;
background-color: transparent;
-webkit-appearance: none;
}
}
.dialog-box {
padding: 20px 15px 20px;
margin-bottom: 20px;
background: rgba(242, 247, 250, 1);
border: 1px solid #5CF9FF;
border-radius: 8px;
.analyzing {
color: #4f5c66;
font-size: 12px;
line-height: 48px;
text-align: center;
}
}
.message {
.avatar {
display: inline-block;
margin-right: 14px;
img {
width: 30px;
height: 30px;
border: 1px solid rgba(0, 153, 255, 1);
border-radius: 50%;
}
}
.text {
position: relative;
padding: 0 16px;
height: 40px;
display: inline-block;
background: rgba(255, 255, 255, 1);
border-radius: 4px;
font-size: 16px;
color: #333;
text-align: center;
line-height: 40px;
}
$angleSize: 8px;
@mixin pseudo {
content: '';
position: absolute;
top: 50%;
transform: translateY(-50%);
display: block;
border-color: transparent;
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
}
&.system {
.text::before {
@include pseudo;
left: -$angleSize;
border-right: $angleSize solid #fff;
}
}
&.user {
.avatar {
float: right;
}
.text {
float: right;
margin-right: 15px;
background-color: #0036FF;
color: #fff;
&::after {
@include pseudo;
right: -$angleSize;
border-left: $angleSize solid #0036FF;
}
}
}
}
.message + .message {
margin-top: 30px;
}
.options {
position: relative;
padding-top: 18px;
margin-top: 15px;
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 8px;
background: url("./images/options-divide-line.png") no-repeat;
background-size: contain;
}
li {
width: 126px;
height: 33px;
margin: 0 auto 15px;
background: linear-gradient(90deg, rgba(0, 153, 255, 1) 0%, rgba(77, 184, 255, 1) 100%);
border-radius: 17px;
font-size: 16px;
color: #fff;
text-align: center;
line-height: 33px;
}
}
.result {
width: 355px;
height: 614px;
padding: 0 15px;
background: rgba(255, 255, 255, 1);
border: 1px solid rgba(0, 153, 255, 1);
border-radius: 8px;
color: #333;
& > .title {
position: relative;
color: #09f;
font-size: 16px;
text-align: center;
line-height: 62px;
@mixin pseudo {
content: '';
position: absolute;
top: 50%;
transform: translateY(-50%);
display: block;
width: 11px;
height: 11px;
background: url("./images/title-decorator.png") no-repeat;
background-size: contain;
}
&::before {
@include pseudo;
left: 30px;
}
&::after {
@include pseudo;
right: 30px;
transform: translateY(-50%) scale(-1);
}
}
.subtitle {
font-size: 12px;
}
.skill {
font-size: 18px;
line-height: 36px;
font-weight: 600;
}
.salary {
font-size: 18px;
line-height: 2em;
font-weight: 500;
color: #FF2A00;
}
.obtained {
margin-bottom: 20px;
}
.salary-section {
margin-bottom: 20px;
}
.recommends {
& > div:nth-child(1) {
margin-bottom: 12px;
font-size: 12px;
color: #09f;
}
.cover {
flex: 0 0 auto;
width: 125px;
height: 90px;
margin-right: 10px;
img {
width: 100%;
height: 100%;
}
}
.course {
display: flex;
justify-content: space-between;
.info {
flex: 1 1 auto;
}
.title {
margin-bottom: 8px;
font-size: 16px;
line-height: 16px;
font-weight: 500;
color: #333;
}
.des {
display: -webkit-box;
/* autoprefixer: ignore next */
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
margin-bottom: 5px;
overflow: hidden;
font-size: 11px;
color: #4F5C66;
}
.bar {
display: flex;
justify-content: space-between;
align-items: center;
height: 24px;
font-size: 0;
a {
display: inline-block;
box-sizing: border-box;
padding: 6px 14px;
text-align: center;
font-size: 12px;
line-height: 12px;
border-radius: 12px;
}
.contact {
color: #fff;
background-color: #09f;
margin-right: 6px;
}
.register {
color: #FF0000;
border: 1px solid #FF0000;
}
.price {
font-size: 15px;
color: #FF2121;
margin-right: 5px;
}
.old-price {
font-size: 11px;
color: #999;
text-decoration: line-through;
}
.study{
background-color: #09f;
color: #fff;
font-size: 12px;
}
}
}
}
}
}
\ No newline at end of file
......@@ -324,15 +324,20 @@ export default [
{
path: '/ml',
exact: true,
component: loadable(() => import(/* ml */'@/components/ml')),
component: loadable(() => import(/* webpackChunkName: 'ml' */'@/components/ml')),
},
{
path: '/mlShare',
component: loadable(() => import('@/components/mlShare')),
component: loadable(() => import(/* webpackChunkName: 'mlShare' */'@/components/mlShare')),
},
//ai水平测试
{
path: '/ai-test',
component: loadable(() => import('@/components/ai-test')),
component: loadable(() => import(/* webpackChunkName: 'ai-test' */'@/components/ai-test')),
},
//智能选课
{
path: '/intelligent-recommend',
component: loadable(() => import(/* webpackChunkName: 'intelligent-recommend' */'@/components/intelligent-recommend')),
},
]
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