一、后端

1、TeacherService

接口

  1. public Map<String, Object> pageListWeb(Page<Teacher> pageParam);

实现

@Override
public Map<String, Object> pageListWeb(Page<Teacher> pageParam) {


    QueryWrapper<Teacher> queryWrapper = new QueryWrapper<>();
    queryWrapper.orderByAsc("sort");


    baseMapper.selectPage(pageParam, queryWrapper);


    List<Teacher> records = pageParam.getRecords();
    long current = pageParam.getCurrent();
    long pages = pageParam.getPages();
    long size = pageParam.getSize();
    long total = pageParam.getTotal();
    boolean hasNext = pageParam.hasNext();
    boolean hasPrevious = pageParam.hasPrevious();


    Map<String, Object> map = new HashMap<String, Object>();
    map.put("items", records);
    map.put("current", current);
    map.put("pages", pages);
    map.put("size", size);
    map.put("total", total);
    map.put("hasNext", hasNext);
    map.put("hasPrevious", hasPrevious);


    return map;

}

2、TeacherController

@ApiOperation(value = "分页讲师列表")
@GetMapping(value = "{page}/{limit}")
public R pageList(
      @ApiParam(name = "page", value = "当前页码", required = true)
      @PathVariable Long page,


      @ApiParam(name = "limit", value = "每页记录数", required = true)
      @PathVariable Long limit){


      Page<Teacher> pageParam = new Page<Teacher>(page, limit);


      Map<String, Object> map = teacherService.pageListWeb(pageParam);


      return  R.ok().data(map);

}

3、swagger测试

二、前端列表js

1、创建api

创建文件夹api,api下创建teacher.js,用于封装讲师模块的请求

import request from '@/utils/request'

const api_name = '/edu/teacher'
export default {
    getPageList(page, limit) {   
      return request({
        url: `${api_name}/${page}/${limit}`,
        method: 'get'
      })
    }

}

2、讲师列表组件中调用api

pages/teacher/index.vue

<script>
import teacher from "@/api/teacher"
export default {
  asyncData({ params, error }) {
    return teacher.getPageList(1, 8).then(response => {
      console.log(response.data.data);
      return { data: response.data.data }
    });

  },

};
</script>

三、页面渲染

1、页面模板

<template>
  <div id="aCoursesList" class="bg-fa of">
    <!-- 讲师列表 开始 -->
    <section class="container">
      <section class="c-sort-box unBr">
        <div>
          <!-- 无数据提示 开始-->


          <!-- /无数据提示 结束-->


          <!-- 数据列表 开始-->


          <!-- /数据列表 结束-->
        </div>
        <!-- 公共分页 开始 -->


        <!-- /公共分页 结束 -->
      </section>
    </section>
    <!-- /讲师列表 结束 -->
  </div>

</template>

2、无数据提示

添加:v-if=”data.total==0”

<!-- /无数据提示 开始-->
<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>
<!-- /无数据提示 结束-->

3、列表

<!-- /数据列表 开始-->
<article v-if="data.total>0" class="i-teacher-list">
    <ul class="of">
        <li v-for="item in data.items" :key="item.id">
            <section class="i-teach-wrap">
                <div class="i-teach-pic">
                    <a :href="'/teacher/'+item.id" :title="item.name">
                        <img :src="item.avatar" :alt="item.name" height="142" hright="142">
                    </a>
                </div>
                <div class="mt10 hLh30 txtOf tac">
                    <a :href="'/teacher/'+item.id" :title="item.name" class="fsize18 c-666">{{ item.name }}</a>
                </div>
                <div class="hLh30 txtOf tac">
                    <span class="fsize14 c-999" >{{ item.career }}</span>
                </div>
                <div class="mt15 i-q-txt">
                    <p class="c-999 f-fA">{{ item.intro }}</p>
                </div>
            </section>
        </li>
    </ul>

    <div class="clear"/>
</article>
<!-- /数据列表 结束-->

4、测试

四、分页

1、分页方法

methods: {
    gotoPage(page){
        teacher.getPageList(page, 8).then(response => {
            this.data = response.data.data
        })
    }

}

2、分页页面渲染

<!-- 公共分页 开始 -->
<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>
<!-- 公共分页 结束 -->

3、测试