zoukankan      html  css  js  c++  java
  • 在线教育项目-day13【课程列表前端】

    1、api中新建course.js

    import request from '@/utils/request'
    
    export default {
      //课程分页条件查询
      getCourseList(page,limit,courseQuery){
          return request({
              url: `/eduservice/coursefront/getCourseList/${page}/${limit}`,
              method: 'post',
              data: courseQuery
          })
      },
      //分类查询
      getAllSubject(){
        return request({
            url: `/eduservice/edu-subject/getAllSubject`,
            method: 'get',
        })
    },

    2、页面代码和方法

    <template>
      <div id="aCoursesList" class="bg-fa of">
        <!-- /课程列表 开始 -->
        <section class="container">
          <header class="comm-title">
            <h2 class="fl tac">
              <span class="c-333">全部课程</span>
            </h2>
          </header>
          <section class="c-sort-box">
            <section class="c-s-dl">
              <dl>
                <dt>
                  <span class="c-999 fsize14">课程类别</span>
                </dt>
                <dd class="c-s-dl-li">
                  <ul class="clearfix">
                    <li>
              <a title="全部" href="javascript:void(0);" @click="searchOne('')" >全部</a>
            </li>
            <li v-for="(item,index) in subjectNestedList" v-bind:key="index" :class="{active:oneIndex==index}">
              <a :title="item.title" href="javascript:void(0);" @click="searchOne(item.id, index)">{{item.title}}</a>
            </li>
    
                  </ul>
                </dd>
              </dl>
              <dl>
                <dt>
                  <span class="c-999 fsize14"></span>
                </dt>
                <dd class="c-s-dl-li">
                  <ul class="clearfix">
                    <li v-for="(items,index) in subSubjectList" :key="index">
                      <a title="items.title" href="#" @click="searchTwo(items.id, index)">{{items.title}}</a>
                    </li>
                  </ul>
                </dd>
              </dl>
              <div class="clear"></div>
            </section>
            <div class="js-wrap">
              <section class="fr">
                <span class="c-ccc">
                  <i class="c-master f-fM">1</i>/
                  <i class="c-666 f-fM">1</i>
                </span>
              </section>
              <section class="fl">
      <ol class="js-tap clearfix">
        <li :class="{'current bg-orange':buyCountSort!=''}">
          <a title="销量" href="javascript:void(0);" @click="searchBuyCount()">销量
          <span :class="{hide:buyCountSort==''}">↓</span>
          </a>
        </li>
        <li :class="{'current bg-orange':gmtCreateSort!=''}">
          <a title="最新" href="javascript:void(0);" @click="searchGmtCreate()">最新
          <span :class="{hide:gmtCreateSort==''}">↓</span>
          </a>
        </li>
        <li :class="{'current bg-orange':priceSort!=''}">
          <a title="价格" href="javascript:void(0);" @click="searchPrice()">价格&nbsp;
            <span :class="{hide:priceSort==''}">↓</span>
          </a>
        </li>
      </ol>
    </section>
            </div>
            <div class="mt40">
              <!-- /无数据提示 开始-->
              <section class="no-data-wrap" v-if="data.total==0">
                <em class="icon30 no-data-ico">&nbsp;</em>
                <span class="c-666 fsize14 ml10 vam">没有相关数据,小编正在努力整理中...</span>
              </section>
              <!-- /无数据提示 结束-->
              <!-- 数据列表 开始-->
    <article v-if="data.total>0" class="comm-course-list">
        <ul id="bna" class="of">
            <li v-for="item in data.items" :key="item.id">
                <div class="cc-l-wrap">
                    <section class="course-img">
                        <img :src="item.cover" class="img-responsive" alt="听力口语">
                        <div class="cc-mask">
                            <a :href="'/course/'+item.id" title="开始学习" class="comm-btn c-btn-1">开始学习</a>
                        </div>
                    </section>
                    <h3 class="hLh30 txtOf mt10">
                        <a :href="'/course/'+item.id" :title="item.title" class="course-title fsize18 c-333">{{ item.title }}</a>
                    </h3>
                    <section class="mt10 hLh20 of">
                        <span v-if="Number(item.price) === 0" class="fr jgTag bg-green">
                            <i class="c-fff fsize12 f-fA">免费</i>
                        </span>
                        <span class="fl jgAttr c-ccc f-fA">
                            <i class="c-999 f-fA">{{ item.viewCount }}人学习</i>
                            |
                            <i class="c-999 f-fA">9634评论</i>
                        </span>
                    </section>
                </div>
            </li>
        </ul>
        <div class="clear"/>
    </article>
            </div>
            <!-- 公共分页 开始 -->
            <div>
      <div class="paging">
        <!-- undisable这个class是否存在,取决于数据属性hasPrevious -->
        <a
          :class="{undisable: !data.hasPrevious}"
          href="#"
          title="首页"
          @click.prevent="gotoPage(1)">首</a>
        <a
          :class="{undisable: !data.hasPrevious}"
          href="#"
          title="前一页"
          @click.prevent="gotoPage(data.current-1)">&lt;</a>
        <a
          v-for="page in data.pages"
          :key="page"
          :class="{current: data.current == page, undisable: data.current == page}"
          :title="'第'+page+'页'"
          href="#"
          @click.prevent="gotoPage(page)">{{ page }}</a>
        <a
          :class="{undisable: !data.hasNext}"
          href="#"
          title="后一页"
          @click.prevent="gotoPage(data.current+1)">&gt;</a>
        <a
          :class="{undisable: !data.hasNext}"
          href="#"
          title="末页"
          @click.prevent="gotoPage(data.pages)">末</a>
        <div class="clear"/>
      </div>
    </div>
            <!-- 公共分页 结束 -->
          </section>
        </section>
        <!-- /课程列表 结束 -->
      </div>
    </template>
    <script>
    import course from '@/api/course'
    
    export default {
      data() {
        return {
          page:1,
          data:{},
          subjectNestedList: [], // 一级分类列表
          subSubjectList: [], // 二级分类列表
          searchObj: {}, // 查询表单对象
          oneIndex:-1,
          twoIndex:-1,
          buyCountSort:"",
          gmtCreateSort:"",
          priceSort:""
        }
      },
      created() {
          //获取课程列表
        this.initCourse()
        //获取分类
        this.initSubject()
      },
      methods: {
        //查询课程列表
        initCourse(){
          course.getCourseList(1, 4,this.searchObj).then(response => {
            this.data = response.data.data
          })
        },
        //查询所有分类
        initSubject(){
          //debugger
          course.getAllSubject().then(response => {
            this.subjectNestedList = response.data.data.items
          })
        },
        
        //点击一级分类,显示对应的二级分类,查询数据
        searchOne(subjectParentId, index) {
          //debugger
          this.oneIndex = index
          this.twoIndex = -1
          this.searchObj.subjectId = "";
          this.subSubjectList = [];
          this.searchObj.subjectParentId = subjectParentId;
          this.gotoPage(this.page)
          for (let i = 0; i < this.subjectNestedList.length; i++) {
            if (this.subjectNestedList[i].id === subjectParentId) {
              this.subSubjectList = this.subjectNestedList[i].children
            }
          }
        },
        //点击二级分类,查询数据
        searchTwo(subjectId, index) {
          this.twoIndex = index
          this.searchObj.subjectId = subjectId;
          this.gotoPage(this.page)
        },
        //购买量查询
        searchBuyCount() {
          this.buyCountSort = "1";
          this.gmtCreateSort = "";
          this.priceSort = "";
          this.searchObj.buyCountSort = this.buyCountSort;
          this.searchObj.gmtCreateSort = this.gmtCreateSort;
          this.searchObj.priceSort = this.priceSort;
          this.gotoPage(this.page)
        },
         //更新时间查询
        searchGmtCreate() {
          this.buyCountSort = "";
          this.gmtCreateSort = "1";
          this.priceSort = "";
          this.searchObj.buyCountSort = this.buyCountSort;
          this.searchObj.gmtCreateSort = this.gmtCreateSort;
          this.searchObj.priceSort = this.priceSort;
          this.gotoPage(this.page)
        },
        //价格查询
        searchPrice() {
          this.buyCountSort = "";
          this.gmtCreateSort = "";
          this.priceSort = "1";
          this.searchObj.buyCountSort = this.buyCountSort;
          this.searchObj.gmtCreateSort = this.gmtCreateSort;
          this.searchObj.priceSort = this.priceSort;
          this.gotoPage(this.page)
        },
        //分页查询
        gotoPage(page) {
          this.page = page
          course.getCourseList(page, 4, this.searchObj).then(response => {
            this.data = response.data.data
          })
        }
    
      }
        
    
    };
    </script>
    <style scoped>
      .active {
        background: #bdbdbd;
      }
      .hide {
        display: none;
      }
      .show {
        display: block;
      }
    </style>

    3、总结

    1.筛选

    其实这个筛选,就是在前端定义所有的查询条件,

    后端

    前端:

     

     每次传都是我们的searchObj这个对象,后端判断如果有值就进行对应的查询。

    就随便拿一个销量排序来说,我们把bucountsort这个值设为1,说明我们要对销量进行排序,如果后端检测到这个字段有值,那么就会进行倒序排序

    2、一级二级分类显示

    其实我们拿到的数据就是一级菜单包含二级菜单

    一级菜单直接拿tiltle即可,二级菜单需要做一个遍历

     最终效果:

  • 相关阅读:
    指向行数组指针和指针数组的区别
    安装文件在icinga上安装check_mk
    模式浏览器火狐、谷歌、IE关于document.body.scrollTop和document.documentElement.scrollTop 以及值为0的问题
    执行对象java面试题目2013/5/16
    属性序列化gson的@Expose注解和@SerializedName注解
    语言编译器编程语言分类及入门
    按钮实现Python绘图工具matplotlib的使用
    实现注册表网页超链接调用应用程序实现
    服务方法android如何保证service不被杀死
    函数日期mysql获取当天日期
  • 原文地址:https://www.cnblogs.com/dmzna/p/12864107.html
Copyright © 2011-2022 走看看