zoukankan      html  css  js  c++  java
  • luffycity项目开发

    一. 首页的页脚

      子组件Footer.vue文件:

    <template>
        <div class="footer">
          <ul>
            <li>关于我们</li>
            <li>联系我们</li>
            <li>商务合作</li>
            <li>帮助中心</li>
            <li>意见反馈</li>
            <li>新手指南</li>
          </ul>
          <p>Copyright © luffycity.com版权所有 | 京ICP备17072161号-1</p>
        </div>
    </template>
    
    <script>
        export default {
            name: "Footer"
        }
    </script>
    
    <style scoped>
    .footer {
      width: 100%;
      height: 128px;
      background: #25292e;
      color: #fff;
      margin-top: 40px;
    }
    .footer ul{
      margin: 0 auto 16px;
      padding-top: 38px;
      width: 810px;
    }
    .footer ul li{
      float: left;
      width: 112px;
      margin: 0 10px;
      text-align: center;
      font-size: 14px;
      cursor: pointer;
    }
    .footer ul::after{
      content:"";
      display:block;
      clear:both;
    }
    .footer p{
      text-align: center;
      font-size: 12px;
    }
    </style>

      效果:

    二. 免费课页面

      1. 在router/index.js路由中注册路由
    // 引入路由类和Vue类
    import Vue from 'vue'
    import Router from 'vue-router'
    
    import Home from '../components/Home'
    import Login from '../components/Login'
    import Course from '../components/Course'
    
    // 注册路由类
    Vue.use(Router);
    
    // 初始化路由对象
    export default new Router({
      // 设置路由模式为‘history’,去掉默认的#
      mode: "history",
      routes: [
        // 路由列表
        // { // 一个字典,代表一条url
          // name: "路由别名",
          // path: "路由地址",
          // component: 组件类名,
        // }
        {
          name: "Home",
          path: "/",
          component: Home
        },
        {
          name: "Home",
          path: "/home",
          component: Home
        },
        {
          name: "Login",
          path: "/login",
          component: Login
        },
        {
          name: "Course",
          path: "/course",
          component: Course,
        }
    
      ]
    })
      2. 完善首页头部的链接效果

      Header.vue,代码:

    <li><router-link to="/course">免费课</router-link></li>
    

      router-link,本质上还是给我们生成了A链接,但是,我们自己手写的A链接跳转会刷新页面,所以我们必须使用router-link生成的A链接才不会出现页面刷新。

      3. 完成免费课程组件的内容
    <template>
      <div class="course">
        <Header></Header>
        <div class="main">
          <!-- 筛选条件 -->
          <div class="condition">
            <ul class="cate-list">
              <li class="title">课程分类:</li>
              <li class="this">全部</li>
              <li>Python</li>
              <li>Linux运维</li>
              <li>Python进阶</li>
              <li>开发工具</li>
              <li>Go语言</li>
              <li>机器学习</li>
              <li>技术生涯</li>
            </ul>
    
            <div class="ordering">
              <ul>
                <li class="title">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;选:</li>
                <li class="default this">默认</li>
                <li class="hot">人气</li>
                <li class="price">价格</li>
              </ul>
              <p class="condition-result">共21个课程</p>
            </div>
          </div>
    
          <!-- 课程列表 -->
          <div class="course-list">
            <div class="course-item">
              <div class="course-image">
                <img src="/static/image/course-cover.jpeg" alt="">
              </div>
              <div class="course-info">
                <h3>Python开发21天入门 <span><img src="/static/image/avatar1.svg" alt="">100人已加入学习</span></h3>
                <p class="teather-info">Alex 金角大王 老男孩Python教学总监 <span>共154课时/更新完成</span></p>
                <ul class="lesson-list">
                  <li><span class="lesson-title">01 | 第1节:初识编码</span> <span class="free">免费</span></li>
                  <li><span class="lesson-title">01 | 第1节:初识编码初识编码</span> <span class="free">免费</span></li>
                  <li><span class="lesson-title">01 | 第1节:初识编码</span> <span class="free">免费</span></li>
                  <li><span class="lesson-title">01 | 第1节:初识编码初识编码初识编码初识编码</span> <span class="free">免费</span></li>
                </ul>
                <div class="pay-box">
                  <span class="discount-type">限时免费</span>
                  <span class="discount-price">¥0.00元</span>
                  <span class="original-price">原价:9.00元</span>
                  <span class="buy-now">立即购买</span>
                </div>
              </div>
            </div>
            <div class="course-item">
              <div class="course-image">
                <img src="/static/image/course-cover.jpeg" alt="">
              </div>
              <div class="course-info">
                <h3>Python开发21天入门 <span><img src="/static/image/avatar1.svg" alt="">100人已加入学习</span></h3>
                <p class="teather-info">Alex 金角大王 老男孩Python教学总监 <span>共154课时/更新完成</span></p>
                <ul class="lesson-list">
                  <li><span class="lesson-title">01 | 第1节:初识编码</span> <span class="free">免费</span></li>
                  <li><span class="lesson-title">01 | 第1节:初识编码初识编码</span> <span class="free">免费</span></li>
                  <li><span class="lesson-title">01 | 第1节:初识编码</span> <span class="free">免费</span></li>
                  <li><span class="lesson-title">01 | 第1节:初识编码初识编码初识编码初识编码</span> <span class="free">免费</span></li>
                </ul>
                <div class="pay-box">
                  <span class="discount-type">限时免费</span>
                  <span class="discount-price">¥0.00元</span>
                  <span class="original-price">原价:9.00元</span>
                  <span class="buy-now">立即购买</span>
                </div>
              </div>
            </div>
            <div class="course-item">
              <div class="course-image">
                <img src="/static/image/course-cover.jpeg" alt="">
              </div>
              <div class="course-info">
                <h3>Python开发21天入门 <span><img src="/static/image/avatar1.svg" alt="">100人已加入学习</span></h3>
                <p class="teather-info">Alex 金角大王 老男孩Python教学总监 <span>共154课时/更新完成</span></p>
                <ul class="lesson-list">
                  <li><span class="lesson-title">01 | 第1节:初识编码</span> <span class="free">免费</span></li>
                  <li><span class="lesson-title">01 | 第1节:初识编码初识编码</span> <span class="free">免费</span></li>
                  <li><span class="lesson-title">01 | 第1节:初识编码</span> <span class="free">免费</span></li>
                  <li><span class="lesson-title">01 | 第1节:初识编码初识编码初识编码初识编码</span> <span class="free">免费</span></li>
                </ul>
                <div class="pay-box">
                  <span class="discount-type">限时免费</span>
                  <span class="discount-price">¥0.00元</span>
                  <span class="original-price">原价:9.00元</span>
                  <span class="buy-now">立即购买</span>
                </div>
              </div>
            </div>
            <div class="course-item">
              <div class="course-image">
                <img src="/static/image/course-cover.jpeg" alt="">
              </div>
              <div class="course-info">
                <h3>Python开发21天入门 <span><img src="/static/image/avatar1.svg" alt="">100人已加入学习</span></h3>
                <p class="teather-info">Alex 金角大王 老男孩Python教学总监 <span>共154课时/更新完成</span></p>
                <ul class="lesson-list">
                  <li><span class="lesson-title">01 | 第1节:初识编码</span> <span class="free">免费</span></li>
                  <li><span class="lesson-title">01 | 第1节:初识编码初识编码</span> <span class="free">免费</span></li>
                  <li><span class="lesson-title">01 | 第1节:初识编码</span> <span class="free">免费</span></li>
                  <li><span class="lesson-title">01 | 第1节:初识编码初识编码初识编码初识编码</span> <span class="free">免费</span></li>
                </ul>
                <div class="pay-box">
                  <span class="discount-type">限时免费</span>
                  <span class="discount-price">¥0.00元</span>
                  <span class="original-price">原价:9.00元</span>
                  <span class="buy-now">立即购买</span>
                </div>
              </div>
            </div>
    
          </div>
        </div>
          <Footer></Footer>
        </div>
    </template>
    
    <script>
      import Header from './common/Header'
      import Footer from './common/Footer'
    
      export default {
        name: "Course",
        components: {
          Header,
          Footer
        }
      }
    </script>
    
    <style scoped>
      .course {
        background: #f6f6f6;
      }
    
      .course .main {
        width: 1100px;
        margin: 35px auto 0;
      }
    
      .course .condition {
        margin-bottom: 35px;
        padding: 25px 30px 25px 20px;
        background: #fff;
        border-radius: 4px;
        box-shadow: 0 2px 4px 0 #f0f0f0;
      }
    
      .course .cate-list {
        border-bottom: 1px solid #333;
        border-bottom-color: rgba(51, 51, 51, .05);
        padding-bottom: 18px;
        margin-bottom: 17px;
      }
    
      .course .cate-list::after {
        content: "";
        display: block;
        clear: both;
      }
    
      .course .cate-list li {
        float: left;
        font-size: 16px;
        padding: 6px 15px;
        line-height: 16px;
        margin-left: 14px;
        position: relative;
        transition: all .3s ease;
        cursor: pointer;
        color: #4a4a4a;
        border: 1px solid transparent; /* transparent 透明 */
      }
    
      .course .cate-list .title {
        color: #888;
        margin-left: 0;
        letter-spacing: .36px;
        padding: 0;
        line-height: 28px;
      }
    
      .course .cate-list .this {
        color: #ffc210;
        border: 1px solid #ffc210 !important;
        border-radius: 30px;
      }
    
      .course .ordering::after {
        content: "";
        display: block;
        clear: both;
      }
    
      .course .ordering ul {
        float: left;
      }
    
      .course .ordering ul::after {
        content: "";
        display: block;
        clear: both;
      }
    
      .course .ordering .condition-result {
        float: right;
        font-size: 14px;
        color: #9b9b9b;
        line-height: 28px;
      }
    
      .course .ordering ul li {
        float: left;
        padding: 6px 15px;
        line-height: 16px;
        margin-left: 14px;
        position: relative;
        transition: all .3s ease;
        cursor: pointer;
        color: #4a4a4a;
      }
    
      .course .ordering .title {
        font-size: 16px;
        color: #888;
        letter-spacing: .36px;
        margin-left: 0;
        padding: 0;
        line-height: 28px;
      }
    
      .course .ordering .this {
        color: #ffc210;
      }
    
      .course .ordering .price {
        position: relative;
      }
    
      .course .ordering .price::before,
      .course .ordering .price::after {
        cursor: pointer;
        content: "";
        display: block;
        width: 0;
        height: 0;
        border: 5px solid transparent;
        position: absolute;
        right: 0;
      }
    
      .course .ordering .price::before {
        border-bottom: 5px solid #aaa;
        margin-bottom: 2px;
        top: 2px;
      }
    
      .course .ordering .price::after {
        border-top: 5px solid #aaa;
        bottom: 2px;
      }
    
      .course .course-item:hover {
        box-shadow: 4px 6px 16px rgba(0, 0, 0, .5);
      }
    
      .course .course-item {
        width: 1050px;
        background: #fff;
        padding: 20px 30px 20px 20px;
        margin-bottom: 35px;
        border-radius: 2px;
        cursor: pointer;
        box-shadow: 2px 3px 16px rgba(0, 0, 0, .1);
        /* css3.0 过渡动画 hover 事件操作 */
        transition: all .2s ease;
      }
    
      .course .course-item::after {
        content: "";
        display: block;
        clear: both;
      }
    
      /* 顶级元素 父级元素  当前元素{} */
      .course .course-item .course-image {
        float: left;
        width: 423px;
        height: 210px;
        margin-right: 30px;
      }
    
      .course .course-item .course-image img {
        width: 100%;
      }
    
      .course .course-item .course-info {
        float: left;
        width: 596px;
      }
    
      .course-item .course-info h3 {
        font-size: 26px;
        color: #333;
        font-weight: normal;
        margin-bottom: 8px;
      }
    
      .course-item .course-info h3 span {
        font-size: 14px;
        color: #9b9b9b;
        float: right;
        margin-top: 14px;
      }
    
      .course-item .course-info h3 span img {
        width: 11px;
        height: auto;
        margin-right: 7px;
      }
    
      .course-item .course-info .teather-info {
        font-size: 14px;
        color: #9b9b9b;
        margin-bottom: 14px;
        padding-bottom: 14px;
        border-bottom: 1px solid #333;
        border-bottom-color: rgba(51, 51, 51, .05);
      }
    
      .course-item .course-info .teather-info span {
        float: right;
      }
    
      .course-item .lesson-list::after {
        content: "";
        display: block;
        clear: both;
      }
    
      .course-item .lesson-list li {
        float: left;
        width: 44%;
        font-size: 14px;
        color: #666;
        padding-left: 22px;
        /* background: url("路径") 是否平铺 x轴位置 y轴位置 */
        background: url("/static/image/play-icon-gray.svg") no-repeat left 4px;
        margin-bottom: 15px;
      }
    
      .course-item .lesson-list li .lesson-title {
        /* 以下3句,文本内容过多,会自动隐藏,并显示省略符号 */
        text-overflow: ellipsis;
        overflow: hidden;
        white-space: nowrap;
        display: inline-block;
        max-width: 200px;
      }
    
      .course-item .lesson-list li:hover {
        background-image: url("/static/image/play-icon-yellow.svg");
        color: #ffc210;
      }
    
      .course-item .lesson-list li .free {
        width: 34px;
        height: 20px;
        color: #fd7b4d;
        vertical-align: super;
        margin-left: 10px;
        border: 1px solid #fd7b4d;
        border-radius: 2px;
        text-align: center;
        font-size: 13px;
        white-space: nowrap;
      }
    
      .course-item .lesson-list li:hover .free {
        color: #ffc210;
        border-color: #ffc210;
      }
    
      .course-item .pay-box::after {
        content: "";
        display: block;
        clear: both;
      }
    
      .course-item .pay-box .discount-type {
        padding: 6px 10px;
        font-size: 16px;
        color: #fff;
        text-align: center;
        margin-right: 8px;
        background: #fa6240;
        border: 1px solid #fa6240;
        border-radius: 10px 0 10px 0;
        float: left;
      }
    
      .course-item .pay-box .discount-price {
        font-size: 24px;
        color: #fa6240;
        float: left;
      }
    
      .course-item .pay-box .original-price {
        text-decoration: line-through;
        font-size: 14px;
        color: #9b9b9b;
        margin-left: 10px;
        float: left;
        margin-top: 10px;
      }
    
      .course-item .pay-box .buy-now {
        width: 120px;
        height: 38px;
        background: transparent;
        color: #fa6240;
        font-size: 16px;
        border: 1px solid #fd7b4d;
        border-radius: 3px;
        transition: all .2s ease-in-out;
        float: right;
        text-align: center;
        line-height: 38px;
      }
    
      .course-item .pay-box .buy-now:hover {
        color: #fff;
        background: #ffc210;
        border: 1px solid #ffc210;
      }
    </style>
    View Code

      效果:

      4. 补充:针对页面头部当前页面导航高亮效果

      修改Header.vue组件的代码:

    <div class="logo full-left">
              <!--<router-link to="/"><img src="/static/image/logo.svg" alt=""></router-link>-->
              <!--跳转home页面-->
              <img @click="jump('/')" src="/static/image/logo.svg" alt="">
            </div>
            <ul class="nav full-left">
                <!--<li><span>免费课</span></li>-->
                <!--<li><span><router-link to="/course">免费课</router-link></li>-->
                <!--跳转免费课-->
                <li><span @click="jump('/course')" :class="this_nav=='/course'?'this':''">免费课</span></li>
                <!--跳转轻课  -->
              <li><span @click="jump('/light-course')" :class="this_nav=='/light-course'?'this':''">轻课</span></li>
                <li><span>学位课</span></li>
                <li><span>题库</span></li>
                <li><span>老男孩教育</span></li>
            </ul>

      注意:要在style里加上this的样式

    .header .nav li .this {
      color: #4a4a4a;
      border-bottom: 4px solid #ffc210;
    }

      最后加上script的代码:

    <script>
        export default {
            name: "Header",
          data(){
              return {
                this_nav: "",
              }
          },
          created(){
              this.this_nav = localStorage.this_nav;
          },
          methods: {
              jump(nav){
                localStorage.this_nav = nav;
                //  vue-router除了提供router-link标签跳转页面以外,还提供了 js跳转的方式
                this.$router.push(nav);
              }
          }
        }
    </script>

      效果:

    三. 购物车页面

      1. 注册路由信息

      在router/index.js注册:

    // 引入路由类和Vue类
    import Vue from 'vue'
    import Router from 'vue-router'
    
    import Home from '../components/Home'
    import Login from '../components/Login'
    import Course from '../components/Course'
    import Cart from '../components/Cart'
    
    // 注册路由类
    Vue.use(Router);
    
    // 初始化路由对象
    export default new Router({
      // 设置路由模式为‘history’,去掉默认的#
      mode: "history",
      routes: [
        // 路由列表
        // { // 一个字典,代表一条url
          // name: "路由别名",
          // path: "路由地址",
          // component: 组件类名,
        // }
        {
          name: "Home",
          path: "/",
          component: Home
        },
        {
          name: "Home",
          path: "/home",
          component: Home
        },
        {
          name: "Login",
          path: "/login",
          component: Login
        },
        {
          name: "Course",
          path: "/course",
          component: Course,
        },
        {
          name: "Cart",
          path: "/cart",
          component: Cart,
        }
    
      ]
    })

      在头部公共组件中打通购物车的链接地址,Header.vue

    <span @click="jump('/cart')">购物车</span>
      2. 在components下创建Cart.vue组件文件
    <template>
        <div class="cart">
          <Header></Header>
          <div class="cart_info">
            <div class="cart_title">
              <span class="text">我的购物车</span>
              <span class="total">共4门课程</span>
            </div>
            <div class="cart_table">
              <div class="cart_head_row">
                <span class="doing_row"></span>
                <span class="course_row">课程</span>
                <span class="expire_row">有效期</span>
                <span class="price_row">单价</span>
                <span class="do_more">操作</span>
              </div>
              <div class="cart_course_list">
                <CartItem></CartItem>
                <CartItem></CartItem>
                <CartItem></CartItem>
                <CartItem></CartItem>
              </div>
              <div class="cart_footer_row">
                <span class="cart_select"><label> <el-checkbox v-model="checked"></el-checkbox><span>全选</span></label></span>
                <span class="cart_delete"><i class="el-icon-delete"></i> <span>删除</span></span>
                <span class="goto_pay">去结算</span>
                <span class="cart_total">总计:¥0.0</span>
              </div>
            </div>
          </div>
          <Footer></Footer>
        </div>
    </template>
    
    <script>
      import Header from './common/Header'
      import Footer from './common/Footer'
      import CartItem from './common/CartItem'
      export default {
          name: "Cart",
        data(){
          return {
            checked: false,
          }
        },
        components: {
            Header,
            Footer,
            CartItem,
        }
      }
    </script>
    
    <style scoped>
      .cart_info{
      width: 1200px;
      margin: 0 auto 200px;
    }
    .cart_title{
      margin: 25px 0;
    }
    .cart_title .text{
      font-size: 18px;
      color: #666;
    }
    .cart_title .total{
      font-size: 12px;
      color: #d0d0d0;
    }
    .cart_table{
      width: 1170px;
    }
    .cart_table .cart_head_row{
      background: #F7F7F7;
      width: 100%;
      height: 80px;
      line-height: 80px;
      padding-right: 30px;
    }
    .cart_table .cart_head_row::after{
      content: "";
      display: block;
      clear: both;
    }
    .cart_table .cart_head_row .doing_row,
    .cart_table .cart_head_row .course_row,
    .cart_table .cart_head_row .expire_row,
    .cart_table .cart_head_row .price_row,
    .cart_table .cart_head_row .do_more{
      padding-left: 10px;
      height: 80px;
      float: left;
    }
    .cart_table .cart_head_row .doing_row{
      width: 78px;
    }
    .cart_table .cart_head_row .course_row{
      width: 530px;
    }
    .cart_table .cart_head_row .expire_row{
      width: 188px;
    }
    .cart_table .cart_head_row .price_row{
      width: 162px;
    }
    .cart_table .cart_head_row .do_more{
      width: 162px;
    }
    
    .cart_footer_row{
      padding-left: 30px;
      background: #F7F7F7;
      width: 100%;
      height: 80px;
      line-height: 80px;
    }
    .cart_footer_row .cart_select span{
      margin-left: 15px;
      font-size: 18px;
      color: #666;
    }
    .cart_footer_row .cart_delete{
      margin-left: 58px;
    }
    .cart_delete .el-icon-delete{
      font-size: 18px;
    }
    
    .cart_delete span{
      margin-left: 15px;
      cursor: pointer;
      font-size: 18px;
      color: #666;
    }
    .cart_total{
      float: right;
      margin-right: 62px;
      font-size: 18px;
      color: #666;
    }
    .goto_pay{
      float: right;
      width: 159px;
      height: 80px;
      outline: none;
      border: none;
      background: #ffc210;
      font-size: 18px;
      color: #fff;
      text-align: center;
      cursor: pointer;
    }
    </style>
    View Code
      3.  完善购物车中的数据展示

       注意:这里我们采用的是父子组件俩完成的,其中一个子组件就是一个商品信息。

      在common下新建一个CartItem.vue,代码:

    <template>
        <div class="cart_item">
          <div class="cart_column column_1">
            <el-checkbox class="my_el_checkbox" v-model="checked"></el-checkbox>
          </div>
          <div class="cart_column column_2">
            <img src="/static/image/course_demo.png" alt="">
            <span><router-link to="/course/detail/1">爬虫从入门到进阶</router-link></span>
          </div>
          <div class="cart_column column_3">
            <el-select v-model="expire" size="mini" placeholder="请选择购买有效期" class="my_el_select">
              <el-option label="1个月有效" value="30" key="30"></el-option>
              <el-option label="2个月有效" value="60" key="60"></el-option>
              <el-option label="3个月有效" value="90" key="90"></el-option>
              <el-option label="永久有效" value="10000" key="10000"></el-option>
            </el-select>
          </div>
          <div class="cart_column column_4">¥499.0</div>
          <div class="cart_column column_4">删除</div>
        </div>
    </template>
    
    <script>
    export default {
        name: "CartItem",
        data(){
          return {
            checked:false,
            expire: "1个月有效",
          }
        }
    }
    </script>
    
    <style scoped>
    .cart_item::after{
      content: "";
      display: block;
      clear: both;
    }
    .cart_column{
      float: left;
      height: 250px;
    }
    .cart_item .column_1{
      width: 88px;
      position: relative;
    }
    .my_el_checkbox{
      position: absolute;
      left: 0;
      right: 0;
      bottom: 0;
      top: 0;
      margin: auto;
      width: 16px;
      height: 16px;
    }
    .cart_item .column_2 {
      padding: 67px 10px;
      width: 520px;
      height: 116px;
    }
    .cart_item .column_2 img{
      width: 175px;
      height: 115px;
      margin-right: 35px;
      vertical-align: middle;
    }
    .cart_item .column_3{
      width: 197px;
      position: relative;
      padding-left: 10px;
    }
    .my_el_select{
      width: 117px;
      height: 28px;
      position: absolute;
      top: 0;
      bottom: 0;
      margin: auto;
    }
    .cart_item .column_4{
      padding: 67px 10px;
      height: 116px;
      width: 142px;
      line-height: 116px;
    }
    
    </style>
    View Code

      效果:

    四. 课程详情页

      1. 注册路由信息

      在router/index.js注册:

    // 引入路由类和Vue类
    import Vue from 'vue'
    import Router from 'vue-router'
    
    import Home from '../components/Home'
    import Login from '../components/Login'
    import Course from '../components/Course'
    import Cart from '../components/Cart'
    import Detail from '../components/Detail'
    
    // 注册路由类
    Vue.use(Router);
    
    // 初始化路由对象
    export default new Router({
      // 设置路由模式为‘history’,去掉默认的#
      mode: "history",
      routes: [
        // 路由列表
        // { // 一个字典,代表一条url
          // name: "路由别名",
          // path: "路由地址",
          // component: 组件类名,
        // }
        {
          name: "Home",
          path: "/",
          component: Home
        },
        {
          name: "Home",
          path: "/home",
          component: Home
        },
        {
          name: "Login",
          path: "/login",
          component: Login
        },
        {
          name: "Course",
          path: "/course",
          component: Course,
        },
        {
          name: "Cart",
          path: "/cart",
          component: Cart,
        },
        {
          name:"Detail",
          path: "/course/detail/:id",  // :id为参数占位符
          component: Detail,
        },
    
      ]
    })
    View Code

      在课程列表页中的li里面新增一个router-link 跳转链接,Course.vue

    <h3>
        <!--Python开发21天入门-->
        <router-link to="/course/detail/1">Python开发21天入门</router-link>
        <span><img src="/static/image/avatar1.svg" alt="">100人已加入学习</span>
    </h3>

      在购物车详情子组件中,CartItem.vue

    <span><router-link to="/course/detail/1">爬虫从入门到进阶</router-link></span>
    
      2. 在components下创建Detail.vue组件文件
    <template>
      <div class="course_detail">
          <Header></Header>
          <div class="content">
            <div class="course_info">
              <div class="video">视频</div>
              <div class="core">
                <h3>爬虫从入门到进阶</h3>
                <p class="student">
                  <span>3335人在学</span>
                  <span>课程总时长:65课时/17小时</span>
                  <span>难度:高级</span>
                </p>
                <div class="active">
                  <span class="discount_type">限时折扣</span>
                  <span class="duration">距离结束:仅剩 196天 12小时 34分 <time>02</time></span>
                </div>
                <div class="price">
                  <span class="tips">活动价</span>
                  <span class="discount_price">¥99.50</span>
                  <span class="original_price">¥199.00</span>
                </div>
                <div class="btn">
                  <span class="buy_now">立即购买</span>
                  <span class="free_study">免费试学</span>
                  <span class="add_cart"><img src="/static/image/cart-yellow.svg" alt="">加入购物车</span>
                </div>
              </div>
            </div>
            <div class="course_nav">
              <ul>
                <li :class="index==0?'this':''" @click="index=0">详情介绍</li>
                <li :class="index==1?'this':''" @click="index=1">课程章节 <span class="free_btn">(试学)</span></li>
                <li :class="index==2?'this':''" @click="index=2">用户评论 (6)</li>
                <li :class="index==3?'this':''" @click="index=3">常见问题</li>
              </ul>
            </div>
            <div class="other_info">
              <div class="course_about">
                  <div class="nav_item course_about"  v-show="index==0">
                    <img src="/static/image/detail_详情介绍.jpeg" alt="">
                    <img src="/static/image/detail_详情介绍2.jpeg" alt="">
                  </div>
                  <div class="nav_item course_about"  v-show="index==1">
                    课程章节
                  </div>
                  <div class="nav_item course_about"  v-show="index==2">
                    用户评论
                  </div>
                  <div class="nav_item course_about"  v-show="index==3">
                    常见问题
                  </div>
              </div>
              <div class="teacher_about"></div>
            </div>
          </div>
          <Footer></Footer>
        </div>
    </template>
    
    <script>
      import Header from './common/Header'
      import Footer from './common/Footer'
    
      export default {
        name: "Detail",
        data(){
          return {
            index: 0,
          }
        },
        created() {
          // 获取课程ID
          console.log(this.$route.params.id);
        },
        components: {
          Header,
          Footer
        }
      }
    </script>
    
    <style scoped>
    .course_info{
      width: 1200px;
      padding-top: 30px;
      margin: 0 auto;
    }
    .course_info::after{
      content: "";
      display: block;
      clear: both;
    }
    .course_info .video{
      width: 690px;
      height: 388px;
      background-color: #000;
      float: left;
    }
    .course_info .core{
      float: left;
      width: 510px;
    }
    .course_info .core h3{
      font-size: 20px;
      color: #333;
      padding: 10px 23px;
      font-weight: normal;
    }
    .course_info .core .student{
      padding-left: 23px;
      padding-right: 23px;
      padding-bottom: 16px;
      font-size: 14px;
      color: #9b9b9b;
    }
    .course_info .core .student span{
      margin-right: 28px;
    }
    .course_info .core .active{
      background: #fa6240;
      font-size: 14px;
      padding: 10px 23px;
    }
    .course_info .active .discount_type{
      font-size: 16px;
      color: #fff;
      letter-spacing: .36px;
      line-height: 24px;
    }
    .course_info .active .duration{
      font-size: 14px;
      color: #fff;
      float: right;
      line-height: 26px;
    }
    .course_info .active .duration time{
      background-color: #fff;
      color: #5e5e5e;
      width: 24px;
      padding: 6px 4px;
    }
    .course_info .price{
      padding: 5px 23px;
      font-size: 14px;
      color: #4a4a4a;
    }
    .course_info .price .discount_price{
      font-size: 26px;
      color: #fa6240;
      margin-left: 10px;
      display: inline-block;
      margin-bottom: -5px;
    }
    .course_info .price .original_price{
      font-size: 14px;
      color: #9b9b9b;
      margin-left: 10px;
      text-decoration: line-through;
    }
    .course_info{
      position: relative;
    }
    .course_info .core .btn{
      position: absolute;
      bottom: 10px;
      width: 486px;
      padding-left: 24px;
    }
    .course_info .core .btn::after{
      content: "";
      display: block;
      clear: both;
    }
    .course_info .core .buy_now{
      text-align: center;
      width: 125px;
      height: 40px;
      line-height: 40px;
      background: #ffc210;
      border-radius: 4px;
      color: #fff;
      cursor: pointer;
      margin-right: 15px;
      float: left;
    }
    .course_info .core .free_study{
      width: 125px;
      height: 40px;
      border-radius: 4px;
      cursor: pointer;
      margin-right: 15px;
      background: #fff;
      color: #ffc210;
      border: 1px solid #ffc210;
      text-align: center;
      line-height: 40px;
      float: left;
    }
    .course_info .core .add_cart{
      font-size: 14px;
      color: #ffc210;
      text-align: center;
      cursor: pointer;
      float: right;
      line-height: 42px;
    
    }
    .course_info .core .add_cart img{
      width: 20px;
      height: auto;
      margin-right: 7px;
      vertical-align: middle;
    }
    .content .course_nav{
      width: 100%;
      height: auto;
      background: #fff;
      margin-bottom: 30px;
      box-shadow: 0 2px 4px 0 #f0f0f0;
    }
    .content .course_nav ul{
      width: 1200px;
      margin: 0 auto;
    }
    .content .course_nav ul::after{
      content: "";
      display: block;
      clear: both;
    }
    .content .course_nav ul li{
      margin: 0 auto;
      color: #4a4a4a;
      margin-right: 15px;
      padding: 26px 20px 16px;
      font-size: 17px;
      cursor: pointer;
      float: left;
    }
    .content .course_nav ul li.this{
      color: #ffc210;
      border-bottom: 2px solid #ffc210;
    }
    .content .course_nav ul li .free_btn{
      color: #fb7c55;
    }
    
    
    .content .other_info {
      width: 1200px;
      margin: auto;
    }
    .content .other_info::after {
      content:"";
      display: block;
      clear: both;
    }
    .content .other_info .course_about{
        width: 880px;
        height: auto;
        padding: 20px;
        background: #fff;
        float: left;
        overflow: hidden;
        position: relative;
        box-shadow: 0 2px 4px 0 #f0f0f0;
    }
    
    .content .course_about img{
        width: 100%;
    }
    </style>
    View Code

      效果:

  • 相关阅读:
    3.24 每日一题题解
    3.23 每日一题题解
    3.22 每日一题题解
    【POJ1222】EXTENDED LIGHTS OUT
    【BZOJ1013】球形空间产生器sphere
    【hdu4135】【hdu2841】【hdu1695】一类通过容斥定理求区间互质的方法
    【HDU5862】Counting Intersections
    【HDU1542】Atlantis
    【自定义】抢妹子大作战
    【HDU5361】In Touch
  • 原文地址:https://www.cnblogs.com/Michael--chen/p/11279621.html
Copyright © 2011-2022 走看看