diff --git a/src/common/closable-popup/index.js b/src/common/closable-popup/index.js
index eb59c5a..ea5e737 100644
--- a/src/common/closable-popup/index.js
+++ b/src/common/closable-popup/index.js
@@ -12,9 +12,11 @@ function ClosablePopup({
                          closable = true,
                          close = function () {
                          },
+                         clickMaskClose = true,
                          closeIcon = 'iconiconfront-2'
                        } = {}) {
 
+
   function unmountComponent() {
     ReactDOM.unmountComponentAtNode(div)
     if (div && div.parentNode) {
@@ -33,9 +35,18 @@ function ClosablePopup({
     }
   }
 
+  function clickMask() {
+    if(closable){
+      return
+    }
+    if(!clickMaskClose){
+      return
+    }
+    _close()
+  }
 
   const closablePopup = (
-    <div className={'closable-popup-mask'}>
+    <div className={'closable-popup-mask'} onClick={clickMask}>
       <div className={classnames(['popup-container', className])}>
         <div className="title">{title}</div>
         <div className="content">
@@ -43,9 +54,9 @@ function ClosablePopup({
         </div>
         {
           closable &&
-          re.test(closeIcon)
+          (re.test(closeIcon)
             ? <img src={closeIcon} alt="" className={'close-icon'} onClick={_close}/>
-            : <i className={`close iconfont ${closeIcon}`} onClick={_close}/>
+            : <i className={`close iconfont ${closeIcon}`} onClick={_close}/>)
         }
       </div>
     </div>
diff --git a/src/components/activity/newyear-2019/common/commonContainer/index.js b/src/components/activity/newyear-2019/common/commonContainer/index.js
index 005b724..6029dca 100644
--- a/src/components/activity/newyear-2019/common/commonContainer/index.js
+++ b/src/components/activity/newyear-2019/common/commonContainer/index.js
@@ -10,11 +10,14 @@ export default class CommonContainer extends Component {
       <div className='common_container'>
         <div className='container_top'></div>
         <div className='container_content'>
-          <div className='title_container'>
-            <i></i>
-            <p>{this.props.title}</p>
-            <i></i>
-          </div>
+            {
+                this.props.title &&
+                <div className='title_container'>
+                    <i></i>
+                    <p>{this.props.title}</p>
+                    <i></i>
+                </div>
+            }
           {
             React.Children.map(this.props.children, function (child) {
               return <>{child}</>;
diff --git a/src/components/activity/newyear-2019/common/commonContainer/index.scss b/src/components/activity/newyear-2019/common/commonContainer/index.scss
index c5aac4f..537bb4d 100644
--- a/src/components/activity/newyear-2019/common/commonContainer/index.scss
+++ b/src/components/activity/newyear-2019/common/commonContainer/index.scss
@@ -1,4 +1,5 @@
 .common_container {
+  margin-bottom: 35px;
   .title_container {
     width: 100%;
     display: flex;
@@ -8,12 +9,14 @@
     i {
       width: 230px;
       height: 2px;
+      margin: auto;
       background: linear-gradient(
         90deg,
         rgba(254, 228, 29, 0) 0%,
         rgba(254, 228, 29, 0.98) 48%,
         rgba(254, 228, 29, 0) 100%
       );
+      margin: 0 auto;
     }
     p {
       font-size: 18px;
@@ -47,10 +50,10 @@
     height: 22px;
   }
   .container_content {
-    background: url("https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/m_middle_bj.png")
-      center center no-repeat;
-    background-size: 100% 100%;
+    background: url("https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/m_middle_bj.png");
+    background-size: contain;
     width: 100%;
     min-height: 25px;
+    padding: 5px 20px;
   }
 }
diff --git a/src/components/activity/newyear-2019/common/commonPopup/index.js b/src/components/activity/newyear-2019/common/commonPopup/index.js
new file mode 100644
index 0000000..b48c404
--- /dev/null
+++ b/src/components/activity/newyear-2019/common/commonPopup/index.js
@@ -0,0 +1,36 @@
+import React, { Component } from 'react';
+import './index.scss';
+
+export default class index extends Component {
+  constructor(props) {
+    super(props);
+  }
+  computedStyle = () => {
+    return {
+      'top': `${this.props.top}px`,
+      'width': `${this.props.width}px`
+    }
+  }
+
+  // 控制点击空白处是否关闭弹窗 需要传递一个boolean属性 mark
+  closePopup = () => {
+    if(this.props.mark) {
+      this.props.closePopup();
+    }
+  }
+
+  render() {
+    return (
+      <div className='popup__container' onClick={this.closePopup}>
+        <div className='content__container' style={this.computedStyle()}>
+          <img className="close__btn" onClick={this.props.closePopup} src='https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/close-btn.png' alt="" />
+          {
+            React.Children.map(this.props.children, function (child) {
+              return <>{child}</>;
+            })
+          }
+        </div>
+      </div>
+    )
+  }
+}
diff --git a/src/components/activity/newyear-2019/common/commonPopup/index.scss b/src/components/activity/newyear-2019/common/commonPopup/index.scss
new file mode 100644
index 0000000..a0581a7
--- /dev/null
+++ b/src/components/activity/newyear-2019/common/commonPopup/index.scss
@@ -0,0 +1,29 @@
+.popup__container {
+  position: fixed;
+  left: 0;
+  top: 0;
+  width: 100vw;
+  height: 100vh;
+  background: rgba(0, 0, 0, 0.6);
+  z-index: 99;
+
+  .content__container {
+    width: 320px;
+    min-height: 240px;
+    border-radius: 5px;
+    background: rgba(255,255,255,1);
+    position: absolute;
+    left: 50%;
+    transform: translateX(-50%);
+    top: 160px;
+
+    .close__btn {
+      position: absolute;
+      left: 50%;
+      transform: translateX(-50%);
+      width: 33px;
+      height: 33px;
+      bottom: -57px
+    }
+  }
+}
\ No newline at end of file
diff --git a/src/components/activity/newyear-2019/landing/index.js b/src/components/activity/newyear-2019/landing/index.js
index 6815d9a..21c2199 100644
--- a/src/components/activity/newyear-2019/landing/index.js
+++ b/src/components/activity/newyear-2019/landing/index.js
@@ -2,9 +2,10 @@ import React, { Component } from 'react'
 import BoxContainer from '../box-container/container'
 import { Toast } from "antd-mobile"
 import { Popup } from "@common/index"
+import cls from 'classnames'
 
 import './landing.scss'
-import { http } from "@/utils"
+import { browser, getParam, http } from "@/utils"
 
 class Landing extends Component {
 
@@ -121,9 +122,13 @@ class Landing extends Component {
 
       ]
     },
+    origin: getParam('origin'),
+    treasure_code: getParam('treasure_code'),
+    activityEnd: false
   }
 
   componentDidMount() {
+    const {origin, treasure_code} = this.state
     http.get(`${API.home}/sys/prize_data`)
       .then(res => {
         const {data, code, msg} = res.data
@@ -133,8 +138,9 @@ class Landing extends Component {
           Toast.info(msg, 2, null, false)
         }
       })
-    /*http.post(`${API.home}/sys/treasure/team`, {
-
+    http.post(`${API.home}/sys/treasure/team`, {
+      treasure_code,
+      origin
     })
       .then(res => {
         const {data, code, msg} = res.data
@@ -143,13 +149,49 @@ class Landing extends Component {
           this.setState({
             teamData: data
           })
-          // console.log(data)
+
+          let searchParams = new URLSearchParams(window.location.search)
+          if (searchParams.get('origin') === '1') {
+            searchParams.set('origin', '2')
+            window.history.replaceState(null, '', `landing?${searchParams.toString()}`)
+          }
+
+        } else if (code === 12005) {
+
+          this.setState({
+            activityEnd: true
+          })
 
         } else {
           Toast.info(msg, 2, null, false)
         }
-      })*/
-    this.joinSuccess()
+      })
+
+
+  }
+
+  joinTeam = () => {
+    const {treasure_code} = this.state
+    http.post(`${API.home}/sys/treasure/joinTeam`, {
+      treasure_code
+    })
+      .then(res => {
+        const {data, code, msg} = res.data
+        if (code === 200) {
+
+          switch (data.status) {
+            case 1:
+            case 2:
+              this.joinSuccess(data)
+              break
+            default:
+              alert('aaa')
+          }
+
+        } else {
+          Toast.info(msg, 2, null, false)
+        }
+      })
   }
 
   showRules = () => {
@@ -189,7 +231,7 @@ class Landing extends Component {
 
   }
 
-  joinSuccess = (isFull = false) => {
+  joinSuccess = ({status, team_num, lack_member, is_team}) => {
     Popup({
       title: <div className={'join-success'}>
         <img src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/check-icon.png" alt=""/>
@@ -199,28 +241,30 @@ class Landing extends Component {
       content: <div>
         <div className={'tip'}>
           {
-            isFull
+            status === 2
               ? '组队成功,恭喜你获得一个宝箱!'
+              : is_team
+              ? `您的${<span>{team_num}</span>}号队伍还差${<span>{lack_member}</span>}人即可获得宝箱`
               : '自己当队长,宝箱内有专属奖品哦~'
           }
         </div>
         {
-          isFull
+          status === 2
             ? <img style={{width: '150px', marginTop: '23px'}}
                    src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/treasure-box-icon.png" alt=""/>
-            : <button type="button">创建我的队伍</button>
+            : <button type="button">{is_team ? '继续组队' : '创建我的队伍'}</button>
         }
       </div>,
       closeIcon: this.closeIcon
     })
   }
 
-  createTeamSuccess = () => {
+  createTeamSuccess = ({head_img, team_num, lack_member, treasure_code}) => {
     Popup({
       title: '创建成功',
       className: 'landing-create-success',
       content: <div>
-        <div className="tip">*号队伍 还差*名队员即可获得宝箱哦~</div>
+        <div className="tip">{<span>{team_num}</span>}号队伍 还差{<span>{lack_member}</span>}名队员即可获得宝箱哦~</div>
         <img className={'treasure-box'}
              src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/treasure-box-icon.png" alt=""/>
         <ul className='members'>
@@ -287,9 +331,49 @@ class Landing extends Component {
     })
   }
 
+  showShareTip = () => {
+    Popup({
+      title: <div>还差<span>{this.state.teamData.lack_member}</span>名队友即可获得宝箱 快分享给好友吧~</div>,
+      className: `landing-share-tip ${browser.isWeixin ? 'wechat' : ''}`,
+      closable: false,
+    })
+  }
+
+  showOpenInBrowserTip = () => {
+    Popup({
+      title: <div>点击右上角,选择“在浏览器打开”</div>,
+      className: 'landing-open-in-browser-tip',
+      closable: false,
+    })
+  }
+
+  createMyTeam = () => {
+    http.get(`${API.home}/sys/treasure/createMyTeam`)
+      .then(res => {
+        const {data, code, msg} = res.data
+        if (code == 200) {
+
+          this.createTeamSuccess(data)
+
+        } else {
+          Toast.info(msg, 2, null, false)
+        }
+      })
+  }
+
 
   render() {
-    const {teamData} = this.state
+    const {
+      teamData: {
+        head_img,
+        member,
+        status,
+        lack_member,
+        team_num,
+        prize_info,
+        is_team
+      }
+    } = this.state
     return (
       <div id={'landing'}>
         <div id="to-square">
@@ -298,8 +382,13 @@ class Landing extends Component {
         <BoxContainer>
           <i className="snow-deco"/>
           <img className='main-avatar'
-               src="https://julyedu-img-public.oss-cn-beijing.aliyuncs.com/Public/Image/default/robot.png" alt=""/>
-          <div className="des">邀请好友加入队伍,开宝箱领取丰厚奖品~</div>
+               src={head_img} alt=""/>
+          {
+            status === 1 && <div className="des">邀请好友加入队伍,开宝箱领取丰厚奖品~</div>
+          }
+          {
+            status === 2 || status === 3 && <div className="des">加入我的<span>{team_num}</span>号队伍,一起开宝箱领取丰厚奖品~</div>
+          }
           <div className={'prizes-box'} ref={el => this.prizeBox = el}>
             <a href="javascript:;" className='rule-btn' onClick={this.showRules}>活动规则 > </a>
             <div className={`bg`} ref={el => this.bg = el}/>
@@ -329,22 +418,22 @@ class Landing extends Component {
                   </div>
               }
             </div>
-            <div className="fake"></div>
           </div>
           <div className="group">
             <ul className={'member'}>
               {
+                member && member.length &&
                 new Array(5).fill('a').map((item, index) => {
-                  const member = teamData.member[index]
+                  const _member = member[index]
                   return (
-                    member
+                    _member
                       ? <li key={index}>
                         <div className='avatar-wrapper'>
                           {
-                            member.is_captain ? <sup>队长</sup> : null
+                            _member.is_captain ? <sup>队长</sup> : null
                           }
                           <img
-                            src={member.head_img}
+                            src={_member.head_img}
                             alt=""
                             className="avatar"/>
                         </div>
@@ -364,19 +453,51 @@ class Landing extends Component {
             </ul>
             <ul className={'bars'}>
               {
+                member && member.length &&
                 new Array(5).fill('a').map((item, index) => {
                   return (
-                    <li key={index} className={`${index + 1 < teamData.member.length ? 'active' : ''}`}/>
+                    <li key={index} className={`${index < member.length ? 'active' : ''}`}/>
                   )
                 })
               }
             </ul>
-            <div className="group-des">
-              还差 {'*'} 名队员即可获得当前宝箱哦~
-            </div>
-            <button type='button' className={'invite-btn'}>
-              邀请好友加入队伍
-            </button>
+            {
+              status === 1 && <div className="group-des">
+                还差 {lack_member} 名队员即可获得当前宝箱哦~
+              </div>
+            }
+            {
+              status === 3 && <div className="group-des">
+                <p>已加入当前队伍</p>
+                {
+                  is_team
+                    ? <p>您的{team_num}号队伍还差{lack_member}人即可获得宝箱~</p>
+                    : <p>自己当队长,宝箱内有专属奖品哦~</p>
+                }
+
+              </div>
+            }
+            {
+              status === 1 &&
+              <button type='button' className={'invite-btn'} onClick={this.showShareTip}>
+                邀请好友加入队伍
+              </button>
+            }
+            {
+              status === 2 && < button type='button' className={'invite-btn'} onClick={this.joinTeam}>
+                同意加入队伍
+              </button>
+            }
+            {
+              status === 3 && < button type='button' className={'invite-btn'} onClick={this.createMyTeam}>
+                创建我的队伍
+              </button>
+            }
+            {
+              status === 2 && prize_info && <div className="certainly-prompt">
+                第{prize_info.stage_no}次必中 {prize_info.name}
+              </div>
+            }
           </div>
         </BoxContainer>
       </div>
diff --git a/src/components/activity/newyear-2019/landing/landing.scss b/src/components/activity/newyear-2019/landing/landing.scss
index 8365c6a..d627c3e 100644
--- a/src/components/activity/newyear-2019/landing/landing.scss
+++ b/src/components/activity/newyear-2019/landing/landing.scss
@@ -46,14 +46,25 @@
 
     .main-avatar {
         width: 49px;
+        height: 49px;
         border-radius: 50%;
         margin-bottom: 5px;
         margin-top: 37.5px;
+        object-fit: cover;
     }
 
     .des {
         font-size: 14px;
         color: #FFDC1E;
+        span{
+            display: inline-block;
+            width: 15px;
+            height: 15px;
+            line-height: 16px;
+            color: #327443;
+            border-radius: 50%;
+            background: #FFDC1E;
+        }
     }
 
     .trans-height {
@@ -163,16 +174,6 @@
                 }
             }
         }
-
-        /*.fake{
-            position: absolute;
-            bottom: 8px;
-            left: 10%;
-            width: 20px;
-            height: 54px;
-            background: red;
-            z-index: 200;
-        }*/
     }
 
     .group {
@@ -263,6 +264,13 @@
             border-radius: 3px;
             font-family: "HiraginoSansGB-W6", "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;
         }
+
+        .certainly-prompt{
+            margin-top: -43px;
+            padding-bottom: 16px;
+            font-size: 14px;
+            color: #FFE300;
+        }
     }
 
 }
@@ -273,6 +281,10 @@
         line-height: 37px;
         color: #666;
         text-align: center;
+
+        span{
+            color: #FF2121;
+        }
     }
 }
 
@@ -434,7 +446,7 @@
         }
     }
 
-    .prize-name{
+    .prize-name {
         font-size: 15px;
         color: #FF232D;
         margin-bottom: 5px;
@@ -446,7 +458,7 @@
         padding: 12px;
         margin-top: 12px;
 
-        li:nth-last-child(1){
+        li:nth-last-child(1) {
             margin-bottom: 0;
         }
 
@@ -493,3 +505,41 @@
         @extend .popup-button;
     }
 }
+
+.landing-open-in-browser-tip, .landing-share-tip {
+    font-size: 17px;
+    color: #111;
+
+    &.popup-container {
+        width: 270px;
+        text-align: center;
+        top: 114px;
+        padding: 20px 33px;
+    }
+
+    span {
+        color: #FF2121;
+    }
+}
+
+.landing-open-in-browser-tip.wechat, .landing-share-tip.wechat{
+    &.popup-container{
+        &::after {
+            content: '';
+            display: block;
+            position: absolute;
+            top: -50px;
+            right: -18px;
+            width: 50px;
+            height: 38px;
+            background: url("https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/share-indicator.png") no-repeat;
+            background-size: contain;
+        }
+    }
+}
+
+.landing-open-in-browser-tip{
+    &.popup-container{
+        width: 312px;
+    }
+}
diff --git a/src/components/activity/newyear-2019/preheat/LiveRoom/index.js b/src/components/activity/newyear-2019/preheat/LiveRoom/index.js
index 1aacbfa..1336f0c 100644
--- a/src/components/activity/newyear-2019/preheat/LiveRoom/index.js
+++ b/src/components/activity/newyear-2019/preheat/LiveRoom/index.js
@@ -1,15 +1,131 @@
 import React, { Component } from 'react';
 import './index.scss';
+import { Toast } from 'antd-mobile';
+import { http } from '@/utils';
 import CommonContainer from './../../common/commonContainer/index'
+import CommonPopup from './../../common/commonPopup/index';
 
 export default class index extends Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      list: [],
+      showMark: true,
+    }
+  }
+
+  componentDidMount() {
+    http.get(`${API.home}/activity/get_live_info`).then(res => {
+      const { code, data, msg } = res.data;
+      if (code === 200) {
+        this.setState({
+          list: data
+        })
+      } else {
+        Toast.info(msg);
+      }
+    });
+  }
+  // 预约直播
+  subscribe = (id) => {
+    // TODO 检查是否已登录
+    // this.checkLogin();
+    http.get(`${API['base-api']}/sys/createLiveQrcode/${id}`).then(res => {
+      let { errno, data, msg } = res.data;
+      if (errno === 200) {
+        // this.livingUrl = data.url;
+        // this.isSubscribe = true;
+        // TODO 显示二维码地址 并且传递给二维码的图片/地址
+      } else {
+        Toast.info(msg);
+      }
+    });
+  }
+  // 已预约 给提示
+  tip = () => {
+    Toast.info('你已预约该直播');
+  }
+  // 去直播间
+  toLivingRoom = (id) => {
+    // TODO 检查是否已登录
+    // this.checkLogin();
+    window.location.href = `${window.location.protocol}//www.julyedu.com/live/m_room/${id}`
+  }
+  // 查看回放
+  checkVideo = (url) => {
+    // TODO 检查是否已登录
+    // this.checkLogin();
+    // TODO 这里需要课程ID
+    const vCourseId = url.split('/')[0];
+    history.push(`/play/video?id=${vCourseId}`)
+  }
+  // 关闭弹框
+  closePopup = () => {
+    this.setState({
+      showMark: false,
+    })
+  }
+
   render() {
+    const { list,showMark } = this.state;
     return (
-      <div>
+      <div className='live__container'>
+        {
+          showMark && (
+            <CommonPopup top={50} closePopup={this.closePopup} mark={true}>
+              <div>1</div>
+              <div>2</div>
+            </CommonPopup>
+          )
+        }
+        
         <CommonContainer title='大咖直播'>
-          <div>
+          <ul className='live__list'>
+            {
+              list.length && (
+                list.map((item, index) => {
+                  return <li key={index} className='live_room_item'>
+                    <img className='user__avatar' src={item.avatar} alt="" />
+                    <div className='live__info'>
+                      <div className="theme">
+                        <span>主题:</span>
+                        <p>{item.title}</p>
+                      </div>
+                      <div className="info__item">
+                        <span>时间:</span>
+                        <p>{item.date}</p>
+                      </div>
+                      <div className="info__item">
+                        <span>讲师:</span>
+                        <p>{item.teacher}</p>
+                      </div>
+                      {
+                        item.on_live == 0 && item.is_end == 0 && item.is_subscribe == 0 && (
+                          <span onClick={this.subscribe(item.live_id)} className="order__btn">立即预约</span>
+                        )
+                      }
+                      {
+                        item.on_live == 0 && item.is_end == 0 && item.is_subscribe == 1 && (
+                          <span onClick={this.tip} className="order__btn subscribed">已预约</span>
+                        )
+                      }
+                      {
+                        item.on_live == 1 && item.is_end == 0 && (
+                          <span onClick={this.toLivingRoom(item.room_url)} className="order__btn living">正在直播</span>
+                        )
+                      }
+                      {
+                        item.is_end == 1 && item.transcribe_url != '' && (
+                          <span onClick={this.checkVideo(item.transcribe_url)} className="order__btn check__video">查看回放</span>
+                        )
+                      }
 
-          </div>
+                    </div>
+                  </li>
+                })
+              )
+            }
+          </ul>
         </CommonContainer>
       </div>
     )
diff --git a/src/components/activity/newyear-2019/preheat/LiveRoom/index.scss b/src/components/activity/newyear-2019/preheat/LiveRoom/index.scss
index e69de29..5b96217 100644
--- a/src/components/activity/newyear-2019/preheat/LiveRoom/index.scss
+++ b/src/components/activity/newyear-2019/preheat/LiveRoom/index.scss
@@ -0,0 +1,100 @@
+.live__container {
+  .live_room_item {
+    width: 330px;
+    height: 100px;
+    margin: 0 auto;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    padding-bottom: 15px;
+    margin-top: 15px;
+
+    &:first-child {
+      border-bottom: 1px solid rgba(13, 77, 43, 1);
+    }
+
+    .user__avatar {
+      width: 73px;
+      height: 85px;
+      flex: 0 0 auto;
+      margin-right: 12px;
+      background: #ddd;
+      border-radius: 4px;
+    }
+
+    .live__info {
+      display: flex;
+      flex-direction: column;
+      justify-content: flex-start;
+      align-items: flex-start;
+      color: #fff;
+      font-size: 14px;
+      width: 246px;
+      height: 85px;
+      position: relative;
+
+      .info__item {
+        display: flex;
+        justify-content: flex-start;
+        align-content: center;
+        &:nth-child(2) {
+          margin: 9px 0;
+        }
+        span {
+          width: 46px;
+          flex: 0 0 auto;
+          color: #eaf787;
+          line-height: 16px;
+        }
+        p {
+          line-height: 16px;
+        }
+      }
+      .theme {
+        span {
+          display: block;
+          width: 46px;
+          float: left;
+          color: #eaf787;
+          line-height: 16px;
+        }
+        p {
+          width: 198px;
+          overflow: hidden;
+          text-overflow: ellipsis;
+          display: -webkit-box;
+          -webkit-line-clamp: 2;
+          float: left;
+          line-height: 16px;
+          color: #fff;
+          /* autoprefixer: off */
+          -webkit-box-orient: vertical;
+        }
+      }
+      .order__btn {
+        position: absolute;
+        right: 0;
+        bottom: 0;
+        width: 89px;
+        height: 28px;
+        border-radius: 4px;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        color: #070F08;
+        background:linear-gradient(90deg,rgba(255,227,0,1) 0%,rgba(255,202,0,1) 100%);
+      }
+      .subscribed {
+        background:rgba(254,228,29,1);
+      }
+      .living {
+        background:rgba(0,153,255,1);
+        color: #FFF;
+      }
+      .check__video {
+        background:rgba(114,220,141,1);
+        color: #FFF;
+      }
+    }
+  }
+}
diff --git a/src/components/activity/newyear-2019/preheat/YearCourse/index.js b/src/components/activity/newyear-2019/preheat/YearCourse/index.js
new file mode 100644
index 0000000..8b58dc2
--- /dev/null
+++ b/src/components/activity/newyear-2019/preheat/YearCourse/index.js
@@ -0,0 +1,730 @@
+import React, {Component} from 'react'
+import './index.scss'
+import {http, SendMessageToApp, getParam} from '@/utils'
+import CommonContainer from './../../common/commonContainer/index'
+import CourseItem from '../../../../blessingPreheat/courseItem/index'
+import {Link, withRouter} from "react-router-dom"
+
+class YarnCourse extends Component {
+    constructor(props) {
+        super(props)
+        this.state = {
+            basic: {
+                course: [],
+                courseList: [],
+                isMore: false,
+            },
+            advanced: {
+                course: [],
+                courseList: [],
+                isMore: false,
+            },
+            higher: {
+                course: [],
+                courseList: [],
+                isMore: false,
+            },
+            expand: {
+                course: [],
+                courseList: [],
+                isMore: false,
+            },
+            bigcourse: {
+                course: [],
+                courseList: [],
+                isMore: false,
+            },
+            freecourse: {
+                course: [],
+                courseList: [],
+                isMore: false,
+            },
+            groupcourse: {
+                course: [],
+                courseList: [],
+                isMore: false,
+            },
+        }
+    }
+
+    componentDidMount() {
+        this.fetchBigCourse()
+        this.fetchFreeCourse()
+        this.fetchGroupCourse()
+        // AI之路-基础
+        this.fetchAICourse('one')
+        // AI之路-进阶
+        this.fetchAICourse('two')
+        // AI之路-高阶
+        this.fetchAICourse('three')
+        // AI之路-拓展
+        this.fetchAICourse('four')
+    }
+
+    fetchBigCourse = () => {
+        const {bigcourse} = this.state
+        http.get(`${API.home}/activity/preheat_data`).then(res => {
+            const {code, data} = res.data
+            if (code === 200) {
+                this.setState({
+                    bigcourse: Object.assign({}, bigcourse, {
+                        isMore: data.length > 4 ? true : false,
+                        course: data.length > 4 ? data.filter((item, index) => index < 4) : data,
+                        courseList: data,
+                    })
+                })
+            }
+        })
+    }
+    fetchFreeCourse = () => {
+        const {freecourse} = this.state
+        http.get(`${API['base-api']}/assistance/detail`).then(res => {
+            const {errno, data} = res.data
+            if (errno === 200) {
+                this.setState({
+                    freecourse: Object.assign({}, freecourse, {
+                        isMore: data.course_info.length > 4 ? true : false,
+                        course: data.course_info.length > 4 ? data.course_info.filter((item, index) => index < 4) : data.course_info,
+                        courseList: data.course_info,
+                    })
+                })
+            }
+        })
+    }
+    fetchGroupCourse = () => {
+        const {groupcourse} = this.state
+        http.get(`${API.home}/activity/excellent_course`).then(res => {
+            const {code, data} = res.data
+            if (code === 200) {
+                this.setState({
+                    groupcourse: Object.assign({}, groupcourse, {
+                        isMore: data.length > 4 ? true : false,
+                        course: data.length > 4 ? data.filter((item, index) => index < 4) : data,
+                        courseList: data,
+                    })
+                })
+            }
+        })
+    }
+
+    fetchAICourse = (key) => {
+        http.get(`${API.home}/activity/four_stage/${key}`).then(res => {
+            const {code, data} = res.data
+            if (code === 200) {
+                this.getList(key, data)
+            }
+        })
+    }
+
+    getList = (key, data) => {
+        const {basic, advanced, higher, expand} = this.state
+        if (key === 'one') {
+            this.setState({
+                basic: Object.assign({}, basic, {
+                    isMore: data.length > 4 ? true : false,
+                    course: data.length > 4 ? data.filter((item, index) => index < 4) : data,
+                    courseList: data,
+                })
+            })
+        }
+        if (key === 'two') {
+            this.setState({
+                advanced: Object.assign({}, advanced, {
+                    isMore: data.length > 4 ? true : false,
+                    course: data.length > 4 ? data.filter((item, index) => index < 4) : data,
+                    courseList: data,
+                })
+            })
+        }
+        if (key === 'three') {
+            this.setState({
+                higher: Object.assign({}, higher, {
+                    isMore: data.length > 4 ? true : false,
+                    course: data.length > 4 ? data.filter((item, index) => index < 4) : data,
+                    courseList: data,
+                })
+            })
+        }
+        if (key === 'four') {
+            this.setState({
+                expand: Object.assign({}, expand, {
+                    isMore: data.length > 4 ? true : false,
+                    course: data.length > 4 ? data.filter((item, index) => index < 4) : data,
+                    courseList: data,
+                })
+            })
+        }
+    }
+
+    toQQque = () => {
+        if (!getParam('version')) {
+            location.href = 'https://q.url.cn/AB8aue?_type=wpa&qidian=true'
+        } else {
+            SendMessageToApp("toQQ", 'https://q.url.cn/AB8aue?_type=wpa&qidian=true')
+        }
+    }
+
+    // 去课程详情页
+    toCourse = (courseId) => {
+        const {history} = this.props
+        if (!getParam('version')) {
+            history.push(`/detail?id=${courseId}`)
+        } else {
+            SendMessageToApp("toCourse", courseId)
+        }
+    }
+    handleToMore = (key) => {
+        let data = {}
+        if (this.state[key]['isMore']) {
+            data[key] = {
+                isMore: !this.state[key]['isMore'],
+                course: this.state[key]['courseList'],
+                courseList: this.state[key]['courseList']
+            }
+            this.setState({
+                ...data
+            })
+        } else {
+            data[key] = {
+                isMore: !this.state[key]['isMore'],
+                course: this.state[key]['courseList'].filter((item, index) => index < 4),
+                courseList: this.state[key]['courseList']
+            }
+
+            this.setState({
+                ...data
+            })
+        }
+    }
+
+    freeStudy = () => {
+
+    }
+    // 点击加入心愿单登录验证,在判断是否关注公众号,已关注的话直接加入,未关注弹出二维码弹窗,点击关闭按钮加入心愿单
+    addWishList = (id) => {
+
+    }
+
+    render() {
+        const {bigcourse, freecourse, groupcourse, basic, advanced, higher, expand} = this.state
+
+        return (
+            <div>
+                <CommonContainer title='重磅好课'>
+                    <div>
+                        {
+                            (bigcourse.course && bigcourse.course.length > 0) &&
+                            <>
+                                <div className='bigcourse course-box'>
+                                    {
+                                        bigcourse.course.map(item => (
+                                            <CourseItem image={item.image_name} key={item.course_id} id={item.course_id}
+                                                        toCourse={this.toCourse}>
+                                                <div className="coupon-course__footer">
+                                                    {
+                                                        item.is_buy == 1 &&
+                                                        <a toCourse={this.toCourse} className="btn to-study">开始学习</a>
+                                                    }
+                                                    {
+                                                        item.is_buy == 0 &&
+                                                        <a onClick={() => this.toQQque()}
+                                                           className="btn big-course">速抢拼团名额</a>
+                                                    }
+
+                                                </div>
+                                            </CourseItem>
+                                        ))
+                                    }
+                                </div>
+                                {
+                                    (bigcourse.courseList && bigcourse.courseList.length > 4) &&
+                                    <button className="more-button" onClick={() => this.handleToMore('bigcourse')}>
+                                        {group.isMore ? '查看更多' : '收起'}
+                                    </button>
+                                }
+                            </>
+                        }
+                    </div>
+                </CommonContainer>
+                <CommonContainer title='人气好课免费学'>
+                    <div>
+                        {
+                            (freecourse.course && freecourse.course.length > 0) &&
+                            <>
+                                <div className='freecourse course-box'>
+                                    {
+                                        freecourse.course.map(item => (
+                                            <CourseItem image={item.image_name} key={item.course_id} id={item.course_id}
+                                                        toCourse={this.toCourse}>
+                                                <div className="coupon-course__footer">
+                                                    {
+                                                        item.is_buy == 1 &&
+                                                        <a toCourse={this.toCourse} className="btn to-study">开始学习</a>
+                                                    }
+                                                    {
+                                                        item.is_buy == 0 &&
+                                                        <a onClick={() => this.freeStudy()}
+                                                           className="btn free-study">点击免费学</a>
+                                                    }
+
+                                                    <p className="free-course-num">已送出<span>{item.act_num}</span>个课程</p>
+
+                                                </div>
+                                            </CourseItem>
+                                        ))
+                                    }
+                                </div>
+                                {
+                                    (freecourse.courseList && freecourse.courseList.length > 4) &&
+                                    <button className="more-button" onClick={() => this.handleToMore('freecourse')}>
+                                        {group.isMore ? '查看更多' : '收起'}
+                                    </button>
+                                }
+                            </>
+                        }
+                    </div>
+                </CommonContainer>
+                <CommonContainer title='精品好课1分开抢'>
+                    <div>
+                        {
+                            (groupcourse.course && groupcourse.course.length > 0) &&
+                            <>
+                                <div className='groupcourse course-box'>
+                                    {
+                                        groupcourse.course.map(item => (
+                                            <CourseItem image={item.image_name} key={item.course_id} id={item.course_id}
+                                                        toCourse={this.toCourse}>
+                                                <div className="group-num">限量300个</div>
+                                                <div className="coupon-course__footer">
+                                                    {
+                                                        item.is_buy == 1 &&
+                                                        <>
+                                                            <p className={'course-title text-overflow-1'}>{item.course_title}</p>
+                                                            <a onClick={() => this.toCourse(item.course_id)}
+                                                               className="btn to-study">开始学习</a>
+                                                        </>
+                                                    }
+                                                    {
+                                                        item.is_buy == 0 &&
+                                                        <>
+                                                            <div className="type">
+                                                                <span className="tag">拼团价</span>
+                                                                <span className="time">12月23日开团</span>
+                                                            </div>
+                                                            <div className="price">¥
+                                                                <span className="new-price">0.01</span>
+                                                                <span
+                                                                    className="old-price">现价:<s>¥{item.price1}</s></span>
+                                                            </div>
+
+                                                            <div className="status">
+                                                                <a onClick={() => this.toCourse(item.course_id)}
+                                                                   className="status-btn to-buy">直接购买</a>
+                                                                {
+                                                                    item.is_join == 1 &&
+                                                                    <a className="status-btn add-wish"><img
+                                                                        src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/PC/add-success.png"
+                                                                        alt=""/>已加心愿单</a>
+                                                                }
+                                                                {
+                                                                    item.is_join == 0 &&
+                                                                    <a
+                                                                        onClick={() => this.addWishList(item.course_id)}
+                                                                        className="status-btn add-wish-success">
+                                                                        <img
+                                                                            src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/like_icon.png"
+                                                                            alt=""/>加入心愿单
+                                                                    </a>
+                                                                }
+                                                            </div>
+                                                        </>
+                                                    }
+
+                                                </div>
+                                            </CourseItem>
+                                        ))
+                                    }
+                                </div>
+                                {
+                                    (groupcourse.courseList && groupcourse.courseList.length > 4) &&
+                                    <button className="more-button" onClick={() => this.handleToMore('groupcourse')}>
+                                        {group.isMore ? '查看更多' : '收起'}
+                                    </button>
+                                }
+                            </>
+                        }
+                    </div>
+                </CommonContainer>
+                <CommonContainer title='好课价到,等你抄底'>
+                    <div>
+                        <h4 className="ai-course__subtitle">基础</h4>
+                        {
+                            (basic.course && basic.course.length > 0) &&
+                            <>
+                                <div className='groupcourse course-box'>
+                                    {
+                                        basic.course.map(item => (
+                                            <CourseItem image={item.image_name} key={item.course_id} id={item.course_id}
+                                                        toCourse={this.toCourse}>
+                                                <div className="coupon-course__footer">
+                                                    {
+                                                        item.is_buy == 1 &&
+                                                        <>
+                                                            <p className={'course-title text-overflow-1'}>{item.course_title}</p>
+                                                            <a onClick={() => this.toCourse(item.course_id)}
+                                                               className="btn to-study">开始学习</a>
+                                                        </>
+                                                    }
+                                                    {
+                                                        item.is_buy == 0 &&
+                                                        <>
+                                                            <div className="type">
+                                                                {
+                                                                    item.type == 0 &&
+                                                                    <>
+                                                                        <span className="tag">活动价</span>
+                                                                        <span className="time">12.23开始</span>
+                                                                    </>
+                                                                }
+                                                                {
+                                                                    item.type == 1 &&
+                                                                    <>
+                                                                        <span className="tag">拼团价</span>
+                                                                        <span className="time">12.23开团</span>
+                                                                    </>
+                                                                }
+                                                                {
+                                                                    item.type == 2 &&
+                                                                    <>
+                                                                        <span className="tag">好友帮帮砍</span>
+                                                                        <span className="time">12.23开砍</span>
+                                                                    </>
+                                                                }
+
+                                                            </div>
+                                                            <div className="price">
+                                                                {item.type == 2 ? '到手价最低:¥' : '¥'}
+                                                                <span className="new-price">{item.price1}</span>
+                                                                <span
+                                                                    className="old-price">
+                                                                     {item.type == 2 ? '' : '现价:'}
+                                                                    <s>¥{item.price0}</s></span>
+                                                            </div>
+
+                                                            <div className="status">
+                                                                <a onClick={() => this.toCourse(item.course_id)}
+                                                                   className="status-btn to-buy">直接购买</a>
+                                                                {
+                                                                    item.is_join == 1 &&
+                                                                    <a className="status-btn add-wish"><img
+                                                                        src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/PC/add-success.png"
+                                                                        alt=""/>已加心愿单</a>
+                                                                }
+                                                                {
+                                                                    item.is_join == 0 &&
+                                                                    <a
+                                                                        onClick={() => this.addWishList(item.course_id)}
+                                                                        className="status-btn add-wish-success">
+                                                                        <img
+                                                                            src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/like_icon.png"
+                                                                            alt=""/>加入心愿单
+                                                                    </a>
+                                                                }
+                                                            </div>
+                                                        </>
+                                                    }
+
+                                                </div>
+                                            </CourseItem>
+                                        ))
+                                    }
+                                </div>
+                                {
+                                    (basic.courseList && basic.courseList.length > 4) &&
+                                    <button className="more-button" onClick={() => this.handleToMore('basic')}>
+                                        {basic.isMore ? '查看更多' : '收起'}
+                                    </button>
+                                }
+                            </>
+                        }
+
+                        <h4 className="ai-course__subtitle">进阶</h4>
+                        {
+                            (advanced.course && advanced.course.length > 0) &&
+                            <>
+                                <div className='groupcourse course-box'>
+                                    {
+                                        advanced.course.map(item => (
+                                            <CourseItem image={item.image_name} key={item.course_id} id={item.course_id}
+                                                        toCourse={this.toCourse}>
+                                                <div className="coupon-course__footer">
+                                                    {
+                                                        item.is_buy == 1 &&
+                                                        <>
+                                                            <p className={'course-title text-overflow-1'}>{item.course_title}</p>
+                                                            <a onClick={() => this.toCourse(item.course_id)}
+                                                               className="btn to-study">开始学习</a>
+                                                        </>
+                                                    }
+                                                    {
+                                                        item.is_buy == 0 &&
+                                                        <>
+                                                            <div className="type">
+                                                                {
+                                                                    item.type == 0 &&
+                                                                    <>
+                                                                        <span className="tag">活动价</span>
+                                                                        <span className="time">12.23开始</span>
+                                                                    </>
+                                                                }
+                                                                {
+                                                                    item.type == 1 &&
+                                                                    <>
+                                                                        <span className="tag">拼团价</span>
+                                                                        <span className="time">12.23开团</span>
+                                                                    </>
+                                                                }
+                                                                {
+                                                                    item.type == 2 &&
+                                                                    <>
+                                                                        <span className="tag">好友帮帮砍</span>
+                                                                        <span className="time">12.23开砍</span>
+                                                                    </>
+                                                                }
+
+                                                            </div>
+                                                            <div className="price">
+                                                                {item.type == 2 ? '到手价最低:¥' : '¥'}
+                                                                <span className="new-price">{item.price1}</span>
+                                                                <span
+                                                                    className="old-price">
+                                                                     {item.type == 2 ? '' : '现价:'}
+                                                                    <s>¥{item.price0}</s></span>
+                                                            </div>
+
+                                                            <div className="status">
+                                                                <a onClick={() => this.toCourse(item.course_id)}
+                                                                   className="status-btn to-buy">直接购买</a>
+                                                                {
+                                                                    item.is_join == 1 &&
+                                                                    <a className="status-btn add-wish"><img
+                                                                        src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/PC/add-success.png"
+                                                                        alt=""/>已加心愿单</a>
+                                                                }
+                                                                {
+                                                                    item.is_join == 0 &&
+                                                                    <a
+                                                                        onClick={() => this.addWishList(item.course_id)}
+                                                                        className="status-btn add-wish-success">
+                                                                        <img
+                                                                            src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/like_icon.png"
+                                                                            alt=""/>加入心愿单
+                                                                    </a>
+                                                                }
+                                                            </div>
+                                                        </>
+                                                    }
+
+                                                </div>
+                                            </CourseItem>
+                                        ))
+                                    }
+                                </div>
+                                {
+                                    (advanced.courseList && advanced.courseList.length > 4) &&
+                                    <button className="more-button" onClick={() => this.handleToMore('advanced')}>
+                                        {advanced.isMore ? '查看更多' : '收起'}
+                                    </button>
+                                }
+                            </>
+                        }
+
+                        <h4 className="ai-course__subtitle">高阶</h4>
+                        {
+                            (higher.course && higher.course.length > 0) &&
+                            <>
+                                <div className='groupcourse course-box'>
+                                    {
+                                        higher.course.map(item => (
+                                            <CourseItem image={item.image_name} key={item.course_id} id={item.course_id}
+                                                        toCourse={this.toCourse}>
+                                                <div className="coupon-course__footer">
+                                                    {
+                                                        item.is_buy == 1 &&
+                                                        <>
+                                                            <p className={'course-title text-overflow-1'}>{item.course_title}</p>
+                                                            <a onClick={() => this.toCourse(item.course_id)}
+                                                               className="btn to-study">开始学习</a>
+                                                        </>
+                                                    }
+                                                    {
+                                                        item.is_buy == 0 &&
+                                                        <>
+                                                            <div className="type">
+                                                                {
+                                                                    item.type == 0 &&
+                                                                    <>
+                                                                        <span className="tag">活动价</span>
+                                                                        <span className="time">12.23开始</span>
+                                                                    </>
+                                                                }
+                                                                {
+                                                                    item.type == 1 &&
+                                                                    <>
+                                                                        <span className="tag">拼团价</span>
+                                                                        <span className="time">12.23开团</span>
+                                                                    </>
+                                                                }
+                                                                {
+                                                                    item.type == 2 &&
+                                                                    <>
+                                                                        <span className="tag">好友帮帮砍</span>
+                                                                        <span className="time">12.23开砍</span>
+                                                                    </>
+                                                                }
+
+                                                            </div>
+                                                            <div className="price">
+                                                                {item.type == 2 ? '到手价最低:¥' : '¥'}
+                                                                <span className="new-price">{item.price1}</span>
+                                                                <span
+                                                                    className="old-price">
+                                                                     {item.type == 2 ? '' : '现价:'}
+                                                                    <s>¥{item.price0}</s></span>
+                                                            </div>
+
+                                                            <div className="status">
+                                                                <a onClick={() => this.toCourse(item.course_id)}
+                                                                   className="status-btn to-buy">直接购买</a>
+                                                                {
+                                                                    item.is_join == 1 &&
+                                                                    <a className="status-btn add-wish"><img
+                                                                        src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/PC/add-success.png"
+                                                                        alt=""/>已加心愿单</a>
+                                                                }
+                                                                {
+                                                                    item.is_join == 0 &&
+                                                                    <a
+                                                                        onClick={() => this.addWishList(item.course_id)}
+                                                                        className="status-btn add-wish-success">
+                                                                        <img
+                                                                            src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/like_icon.png"
+                                                                            alt=""/>加入心愿单
+                                                                    </a>
+                                                                }
+                                                            </div>
+                                                        </>
+                                                    }
+
+                                                </div>
+                                            </CourseItem>
+                                        ))
+                                    }
+                                </div>
+                                {
+                                    (higher.courseList && higher.courseList.length > 4) &&
+                                    <button className="more-button" onClick={() => this.handleToMore('higher')}>
+                                        {higher.isMore ? '查看更多' : '收起'}
+                                    </button>
+                                }
+                            </>
+                        }
+
+                        <h4 className="ai-course__subtitle">扩展</h4>
+                        {
+                            (expand.course && expand.course.length > 0) &&
+                            <>
+                                <div className='groupcourse course-box'>
+                                    {
+                                        expand.course.map(item => (
+                                            <CourseItem image={item.image_name} key={item.course_id} id={item.course_id}
+                                                        toCourse={this.toCourse}>
+                                                <div className="coupon-course__footer">
+                                                    {
+                                                        item.is_buy == 1 &&
+                                                        <>
+                                                            <p className={'course-title text-overflow-1'}>{item.course_title}</p>
+                                                            <a onClick={() => this.toCourse(item.course_id)}
+                                                               className="btn to-study">开始学习</a>
+                                                        </>
+                                                    }
+                                                    {
+                                                        item.is_buy == 0 &&
+                                                        <>
+                                                            <div className="type">
+                                                                {
+                                                                    item.type == 0 &&
+                                                                    <>
+                                                                        <span className="tag">活动价</span>
+                                                                        <span className="time">12.23开始</span>
+                                                                    </>
+                                                                }
+                                                                {
+                                                                    item.type == 1 &&
+                                                                    <>
+                                                                        <span className="tag">拼团价</span>
+                                                                        <span className="time">12.23开团</span>
+                                                                    </>
+                                                                }
+                                                                {
+                                                                    item.type == 2 &&
+                                                                    <>
+                                                                        <span className="tag">好友帮帮砍</span>
+                                                                        <span className="time">12.23开砍</span>
+                                                                    </>
+                                                                }
+
+                                                            </div>
+                                                            <div className="price">
+                                                                {item.type == 2 ? '到手价最低:¥' : '¥'}
+                                                                <span className="new-price">{item.price1}</span>
+                                                                <span
+                                                                    className="old-price">
+                                                                     {item.type == 2 ? '' : '现价:'}
+                                                                    <s>¥{item.price0}</s></span>
+                                                            </div>
+
+                                                            <div className="status">
+                                                                <a onClick={() => this.toCourse(item.course_id)}
+                                                                   className="status-btn to-buy">直接购买</a>
+                                                                {
+                                                                    item.is_join == 1 &&
+                                                                    <a className="status-btn add-wish"><img
+                                                                        src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/PC/add-success.png"
+                                                                        alt=""/>已加心愿单</a>
+                                                                }
+                                                                {
+                                                                    item.is_join == 0 &&
+                                                                    <a
+                                                                        onClick={() => this.addWishList(item.course_id)}
+                                                                        className="status-btn add-wish-success">
+                                                                        <img
+                                                                            src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/like_icon.png"
+                                                                            alt=""/>加入心愿单
+                                                                    </a>
+                                                                }
+                                                            </div>
+                                                        </>
+                                                    }
+
+                                                </div>
+                                            </CourseItem>
+                                        ))
+                                    }
+                                </div>
+                                {
+                                    (expand.courseList && expand.courseList.length > 4) &&
+                                    <button className="more-button" onClick={() => this.handleToMore('expand')}>
+                                        {expand.isMore ? '查看更多' : '收起'}
+                                    </button>
+                                }
+                            </>
+                        }
+                    </div>
+                </CommonContainer>
+            </div>
+        )
+    }
+}
+
+export default withRouter(YarnCourse)
diff --git a/src/components/activity/newyear-2019/preheat/YearCourse/index.scss b/src/components/activity/newyear-2019/preheat/YearCourse/index.scss
new file mode 100644
index 0000000..9ff7fa7
--- /dev/null
+++ b/src/components/activity/newyear-2019/preheat/YearCourse/index.scss
@@ -0,0 +1,247 @@
+.course-box {
+  display: flex;
+  justify-content: space-between;
+  flex-wrap: wrap;
+
+  .course-container {
+    width: 158px;
+    margin: 15px 0 0 0;
+    text-align: center;
+    position: relative;
+  }
+
+  .group-num {
+    width: 66px;
+    height: 16px;
+    position: absolute;
+    left: 10px;
+    top: 10px;
+    line-height: 16px;
+    background: #CA161C;
+    opacity: 0.8;
+    border-radius: 1px;
+    font-size: 12px;
+    color: #fff;
+    text-align: center;
+  }
+
+  .coupon-course__footer {
+    .course-title {
+      padding-left: 10px;
+      font-size: 15px;
+      color: #333;
+      font-weight: 500;
+      margin-top: 7px;
+    }
+
+    .btn {
+      display: inline-block;
+      width: 138px;
+      height: 24px;
+      text-align: center;
+      line-height: 24px;
+      border-radius: 2px;
+      font-size: 12px;
+      outline: none;
+      border: none;
+      letter-spacing: 1px;
+    }
+
+    .big-course {
+      background-color: #FEE41D;
+      border: 1px solid #090F08;
+      color: #090F08;
+      margin-top: 10px;
+    }
+
+    .to-study {
+      background-color: #09f;
+      color: #fff;
+      position: absolute;
+      left: 10px;
+      bottom: 10px;
+    }
+
+    .free-study {
+      background: linear-gradient(-90deg, #EB1612 0%, #F92927 100%);
+      color: #fff;
+      margin-top: 10px;
+    }
+
+    .free-course-num {
+      font-size: 12px;
+      color: #070F08;
+      margin-top: 7px;
+      letter-spacing: 1px;
+
+      span {
+        font-size: 14px;
+        color: #FF0002;
+      }
+    }
+  }
+
+
+  .type {
+    text-align: left;
+    padding-left: 7px;
+    margin-top: 3px;
+
+    .tag {
+      display: inline-block;
+      padding: 0 6px;
+      height: 14px;
+      line-height: 15px;
+      text-align: center;
+      font-size: 12px;
+      color: #FFF;
+      position: relative;
+      z-index: 0;
+    }
+
+    .time {
+      display: inline-block;
+      height: 15px;
+      line-height: 15px;
+      padding: 0 6px;
+      margin-left: 5px;
+      position: relative;
+      font-size: 12px;
+      color: #555;
+      text-align: center;
+      z-index: 0;
+    }
+
+    .time:before {
+      content: '';
+      position: absolute;
+      top: 0;
+      right: 0;
+      bottom: 0;
+      left: 0;
+      background-color: #E6E6E6;
+      transform: skewX(-20deg);
+      z-index: -1;
+    }
+
+    .tag:before {
+      content: '';
+      position: absolute;
+      top: 0;
+      right: 0;
+      bottom: 0;
+      left: 0;
+      background-color: #FF0002;
+      transform: skewX(-20deg);
+      z-index: -1;
+    }
+  }
+
+  .price {
+    text-align: left;
+    padding-left: 5px;
+    margin-top: 3px;
+    color: #FF0002;
+    font-size: 12px;
+
+    .new-price {
+      font-size: 18px;
+    }
+
+    .old-price {
+      font-size: 12px;
+      color: #666;
+      margin-left: 8px;
+    }
+  }
+
+  .status {
+    text-align: left;
+    padding-left: 5px;
+    position: absolute;
+    bottom: 10px;
+
+    .status-btn {
+      display: inline-block;
+      height: 22px;
+      line-height: 22px;
+      border-radius: 2px;
+      text-align: center;
+      font-size: 12px;
+      color: #fff;
+    }
+
+    .to-buy {
+      width: 55px;
+      background-color: #FF8080;
+    }
+
+    .add-wish, .add-wish-success {
+      width: 88px;
+      margin-left: 5px;
+      outline: none;
+      color: #FF0002;
+      background-color: #fff;
+      border: 1px solid #FF0002;
+
+      img {
+        width: 12px;
+        height: 11px;
+        margin-right: 2px;
+        position: relative;
+        top: 1px;
+      }
+
+    }
+
+    .add-wish-success {
+      color: #fff;
+      background: linear-gradient(90deg, rgba(235, 22, 18, 1) 0%, rgba(249, 41, 39, 1) 100%);
+    }
+  }
+}
+
+.bigcourse .course-container {
+  height: 156px;
+}
+
+.freecourse .course-container {
+  height: 177px;
+}
+
+.groupcourse .course-container {
+  height: 195px;
+}
+
+.ai-course__subtitle {
+  width: 73px;
+  height: 24px;
+  margin: 15px auto 0;
+  border-radius: 12px;
+  font-size: 14px;
+  font-weight: 500;
+  color: #070F08;
+  text-align: center;
+  line-height: 22px;
+  letter-spacing: 2px;
+  background-color: #FFE300;
+  border: 1px solid #070F08;
+}
+
+.more-button {
+  display: block;
+  width: 75px;
+  height: 26px;
+  margin: 15px auto 5px;
+  padding: 0;
+  border-radius: 12px;
+  font-size: 12px;
+  font-weight: 400;
+  color: #fff;
+  line-height: 26px;
+  cursor: pointer;
+  outline: none;
+  background-color: #0F6237;
+  border: none;
+  letter-spacing: 1px;
+}
diff --git a/src/components/activity/newyear-2019/preheat/index.js b/src/components/activity/newyear-2019/preheat/index.js
index c7801c4..b362311 100644
--- a/src/components/activity/newyear-2019/preheat/index.js
+++ b/src/components/activity/newyear-2019/preheat/index.js
@@ -1,15 +1,17 @@
 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';
 
 export default class index extends Component {
   render() {
     return (
-      <div>
+      <div className={'year-index'}>
         <TreasureNav></TreasureNav>
         <LiveRoom />
+        <YearCourse />
         <TreasureBox></TreasureBox>
       </div>
     )
diff --git a/src/components/activity/newyear-2019/preheat/index.scss b/src/components/activity/newyear-2019/preheat/index.scss
index e69de29..22ecbc8 100644
--- a/src/components/activity/newyear-2019/preheat/index.scss
+++ b/src/components/activity/newyear-2019/preheat/index.scss
@@ -0,0 +1,4 @@
+.year-index {
+  padding-bottom: 30px;
+  background-color: #BC2A18;
+}
\ No newline at end of file
diff --git a/src/components/activity/newyear-2019/treasure-box/index.js b/src/components/activity/newyear-2019/treasure-box/index.js
index 9f94625..6e62eb5 100644
--- a/src/components/activity/newyear-2019/treasure-box/index.js
+++ b/src/components/activity/newyear-2019/treasure-box/index.js
@@ -6,7 +6,6 @@ class TreasureBox extends Component {
   render() {
     return (
       <div>
-        1111122222
         <CommonContainer>
           <TreasureRank />
         </CommonContainer>
diff --git a/src/components/activity/newyear-2019/year-wish/index.js b/src/components/activity/newyear-2019/year-wish/index.js
new file mode 100644
index 0000000..4472614
--- /dev/null
+++ b/src/components/activity/newyear-2019/year-wish/index.js
@@ -0,0 +1,146 @@
+import React, {Component} from 'react'
+import './index.scss'
+import {http, SendMessageToApp, getParam} from '@/utils'
+import CommonContainer from './../common/commonContainer/index'
+import CourseItem from '../../../blessingPreheat/courseItem/index'
+import {Link, withRouter} from "react-router-dom"
+
+class YarnWish extends Component {
+    state = {
+        list: []
+    }
+
+    componentDidMount() {
+        this.fetchCourse()
+    }
+
+    fetchCourse = () => {
+        http.get(`${API.home}/activity/wish_course`).then(res => {
+            const {code, data} = res.data
+            if (code === 200) {
+                this.setState({
+                    list: JSON.stringify(data) === '{}' ? [] : data
+                })
+            }
+        })
+    }
+
+    // 去课程详情页
+    toCourse = (courseId) => {
+        const {history} = this.props
+        if (!getParam('version')) {
+            history.push(`/detail?id=${courseId}`)
+        } else {
+            SendMessageToApp("toCourse", courseId)
+        }
+    }
+
+    render() {
+        const {list} = this.state
+
+        return (
+            <div className='yarn-wish'>
+                <div className="banner"><img
+                    src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/xy_banner_bj.png" alt=""/></div>
+                {
+                    list.length > 0 ? <CommonContainer>
+                            <div className='groupcourse course-box'>
+                                {
+                                    list && list.length > 0 && list.map(item => (
+                                        <CourseItem image={item.image_name} key={item.course_id} id={item.course_id}
+                                                    toCourse={this.toCourse}>
+
+                                            {
+                                                item.type == 4 &&
+                                                <div className="group-num">限量300个</div>
+                                            }
+
+
+                                            <div className="coupon-course__footer">
+                                                {
+                                                    item.is_buy == 1 &&
+                                                    <>
+                                                        <p className={'course-title text-overflow-1'}>{item.course_title}</p>
+                                                        <a onClick={() => this.toCourse(item.course_id)}
+                                                           className="btn to-study">开始学习</a>
+                                                    </>
+                                                }
+                                                {
+                                                    item.is_buy == 0 &&
+                                                    <>
+                                                        <div className="type">
+                                                            {
+                                                                item.type == 0 &&
+                                                                <>
+                                                                    <span className="tag">活动价</span>
+                                                                    <span className="time">12.23开始</span>
+                                                                </>
+                                                            }
+                                                            {
+                                                                item.type == 1 &&
+                                                                <>
+                                                                    <span className="tag">拼团价</span>
+                                                                    <span className="time">12.23开团</span>
+                                                                </>
+                                                            }
+                                                            {
+                                                                item.type == 2 &&
+                                                                <>
+                                                                    <span className="tag">好友帮帮砍</span>
+                                                                    <span className="time">12.23开砍</span>
+                                                                </>
+                                                            }
+
+                                                        </div>
+                                                        <div className="price">
+                                                            {item.type == 2 ? '到手价最低:¥' : '¥'}
+                                                            <span className="new-price">{item.price1}</span>
+                                                            <span
+                                                                className="old-price">
+                                                                     {item.type == 2 ? '' : '现价:'}
+                                                                <s>¥{item.price0}</s></span>
+                                                        </div>
+
+                                                        <div className="status">
+                                                            <a onClick={() => this.toCourse(item.course_id)}
+                                                               className="status-btn to-buy">直接购买</a>
+                                                            {
+                                                                item.is_join == 1 &&
+                                                                <a className="status-btn add-wish"><img
+                                                                    src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/PC/add-success.png"
+                                                                    alt=""/>已加心愿单</a>
+                                                            }
+                                                            {
+                                                                item.is_join == 0 &&
+                                                                <a
+                                                                    onClick={() => this.addWishList(item.course_id)}
+                                                                    className="status-btn add-wish-success">
+                                                                    <img
+                                                                        src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/like_icon.png"
+                                                                        alt=""/>加入心愿单
+                                                                </a>
+                                                            }
+                                                        </div>
+                                                    </>
+                                                }
+
+                                            </div>
+                                        </CourseItem>
+                                    ))
+                                }
+                            </div>
+                        </CommonContainer>
+                        : <div className="notData">
+                            <img src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/PC/icon-empty.png" alt=""/>
+
+                            <p>你的心愿单目前空空如也,<br/>快去挑选更多优惠课程吧~</p>
+                            {/*活动期间文案*/}
+                            {/*<p>你的心愿单没有课程哦,感兴趣的课程可在双旦主会场直接购买!</p>*/}
+                        </div>
+                }
+            </div>
+        )
+    }
+}
+
+export default withRouter(YarnWish)
diff --git a/src/components/activity/newyear-2019/year-wish/index.scss b/src/components/activity/newyear-2019/year-wish/index.scss
new file mode 100644
index 0000000..70b0b36
--- /dev/null
+++ b/src/components/activity/newyear-2019/year-wish/index.scss
@@ -0,0 +1,216 @@
+html, body, #root {
+  height: 100%;
+}
+
+.yarn-wish {
+  height: 100%;
+  background-color: #BA2C21;
+  padding-bottom: 35px;
+
+  .banner {
+    width: 100%;
+    margin-bottom: 30px;
+  }
+
+  .course-box {
+    display: flex;
+    justify-content: space-between;
+    flex-wrap: wrap;
+
+    .course-container {
+      width: 158px;
+      margin: 15px 0 0 0;
+      text-align: center;
+      position: relative;
+    }
+
+    .group-num {
+      width: 66px;
+      height: 16px;
+      position: absolute;
+      left: 10px;
+      top: 10px;
+      line-height: 16px;
+      background: #CA161C;
+      opacity: 0.8;
+      border-radius: 1px;
+      font-size: 12px;
+      color: #fff;
+      text-align: center;
+    }
+
+    .coupon-course__footer {
+      .course-title {
+        padding-left: 10px;
+        font-size: 15px;
+        color: #333;
+        font-weight: 500;
+        margin-top: 7px;
+      }
+
+      .btn {
+        display: inline-block;
+        width: 138px;
+        height: 24px;
+        text-align: center;
+        line-height: 24px;
+        border-radius: 2px;
+        font-size: 12px;
+        outline: none;
+        border: none;
+        letter-spacing: 1px;
+      }
+
+      .big-course {
+        background-color: #FEE41D;
+        border: 1px solid #090F08;
+        color: #090F08;
+        margin-top: 10px;
+      }
+
+      .to-study {
+        background-color: #09f;
+        color: #fff;
+        position: absolute;
+        left: 10px;
+        bottom: 10px;
+      }
+
+      .free-study {
+        background: linear-gradient(-90deg, #EB1612 0%, #F92927 100%);
+        color: #fff;
+        margin-top: 10px;
+      }
+
+      .free-course-num {
+        font-size: 12px;
+        color: #070F08;
+        margin-top: 7px;
+        letter-spacing: 1px;
+
+        span {
+          font-size: 14px;
+          color: #FF0002;
+        }
+      }
+    }
+
+    .type {
+      text-align: left;
+      padding-left: 7px;
+      margin-top: 3px;
+
+      .tag {
+        display: inline-block;
+        padding: 0 6px;
+        height: 14px;
+        line-height: 15px;
+        text-align: center;
+        font-size: 12px;
+        color: #FFF;
+        position: relative;
+        z-index: 0;
+      }
+
+      .time {
+        display: inline-block;
+        height: 15px;
+        line-height: 15px;
+        padding: 0 6px;
+        margin-left: 5px;
+        position: relative;
+        font-size: 12px;
+        color: #555;
+        text-align: center;
+        z-index: 0;
+      }
+
+      .time:before {
+        content: '';
+        position: absolute;
+        top: 0;
+        right: 0;
+        bottom: 0;
+        left: 0;
+        background-color: #E6E6E6;
+        transform: skewX(-20deg);
+        z-index: -1;
+      }
+
+      .tag:before {
+        content: '';
+        position: absolute;
+        top: 0;
+        right: 0;
+        bottom: 0;
+        left: 0;
+        background-color: #FF0002;
+        transform: skewX(-20deg);
+        z-index: -1;
+      }
+    }
+
+    .price {
+      text-align: left;
+      padding-left: 5px;
+      margin-top: 3px;
+      color: #FF0002;
+      font-size: 12px;
+
+      .new-price {
+        font-size: 18px;
+      }
+
+      .old-price {
+        font-size: 12px;
+        color: #666;
+        margin-left: 8px;
+      }
+    }
+
+    .status {
+      text-align: left;
+      padding-left: 5px;
+      position: absolute;
+      bottom: 10px;
+
+      .status-btn {
+        display: inline-block;
+        height: 22px;
+        line-height: 22px;
+        border-radius: 2px;
+        text-align: center;
+        font-size: 12px;
+        color: #fff;
+      }
+
+      .to-buy {
+        width: 148px;
+        background-color: #FF8080;
+      }
+
+    }
+  }
+
+
+  .groupcourse .course-container {
+    height: 195px;
+  }
+
+  .notData {
+    margin: 100px auto 0;
+    text-align: center;
+
+    img {
+      width: 56px;
+      height: 49px;
+    }
+
+    p{
+      font-size: 16px;
+      color: #fff;
+      margin-top: 20px;
+    }
+  }
+}
+
diff --git a/src/router/router-config.js b/src/router/router-config.js
index 78d171c..6226ec5 100644
--- a/src/router/router-config.js
+++ b/src/router/router-config.js
@@ -245,4 +245,10 @@ export default [
         path: '/year/yearTreasure',
         component: loadable(() => import(/* webpackChunkName: 'newyear-yearIndex' */ '@components/activity/newyear-2019/myTreasure/index'))
     }
+    ,
+    // 双旦心愿单
+    {
+        path: '/year/yearWish',
+        component: loadable(() => import(/* webpackChunkName: 'newyear-yearIndex' */ '@components/activity/newyear-2019/year-wish/index'))
+    }
 ]