前端基础学习-mock模拟list及list分页数据

前端基础学习-mock模拟list及list分页数据

这里展示的是安装好mock之后的使用
如果未安装,可以

npm install mockjs --save-dev

我们创建mock.js展示不同情况的list数据

总体代码

// 引入mockjs
const Mock = require('mockjs')
// 获取 mock.Random 对象
const Random = Mock.Random

// 使用mockjs模拟数据
let moreList = []
for (let i = 0; i < 100; i++) {
  let newObject = {
    mtime: Random.datetime(), // 随机生成日期时间
    score: Random.natural(1, 800), // 随机生成1-800的数字
    rank: Random.natural(1, 100), // 随机生成1-100的数字
    stars: Random.natural(0, 5), // 随机生成1-5的数字
    nickname: Random.cname()// 随机生成中文名字
  }
  moreList.push(newObject)
}
Mock.mock('/api/moreList', () => {
  return {
    code: '0',
    data: moreList
  }
})

// 用于接受生成数据的数组
let tableList = []
for (let i = 0; i < 100; i++) {
  let newObject = {
    title: Random.csentence(5, 10), //  Random.csentence( min, max )
    name: Random.cname(), // Random.cname() 随机生成一个常见的中文姓名
    url: Random.url(), // 生成web地址
    date: Random.date() + ' ' + Random.time() // Random.date()指示生成的日期字符串的格式,默认为yyyy-MM-dd;Random.time() 返回一个随机的时间字符串
  }
  tableList.push(newObject)
}
// }
// console.log(tableList, 'tableList')
// 拦截ajax请求,配置mock的数据
// get请求
Mock.mock('/api/mockGetList', 'get', tableList)

// post请求分页
Mock.mock('/api/pageList', 'post', (params) => {
  console.log(params, 'params')
  const [index, size, total] = [JSON.parse(params.body).page, JSON.parse(params.body).size, tableList.length]
  let len = total / size
  // console.log(index, size, total, 'index, size, total')
  const totalPages = len - parseInt(len) > 0 ? parseInt(len) + 1 : len
  // 截取list
  // const newProduceNewsData = tableList.slice(index * size, (index + 1) * size)
  const newProduceNewsData = tableList.slice((index - 1) * size, index * size)
  // console.log(newProduceNewsData, 'newProduceNewsData')
  return {
    code: '0',
    message: 'success',
    data: {
      page: index,
      size: size,
      list: newProduceNewsData,
      total: total,
      totalPages: totalPages
    }
  }
})

1、最简单的模拟list

// 使用mockjs模拟数据
let moreList = []
for (let i = 0; i < 100; i++) {
  let newObject = {
    mtime: Random.datetime(), // 随机生成日期时间
    score: Random.natural(1, 800), // 随机生成1-800的数字
    rank: Random.natural(1, 100), // 随机生成1-100的数字
    stars: Random.natural(0, 5), // 随机生成1-5的数字
    nickname: Random.cname()// 随机生成中文名字
  }
  moreList.push(newObject)
}
Mock.mock('/api/moreList', () => {
  return {
    code: '0',
    data: moreList
  }
})

在相应文件中的使用

      <el-col :span="12">
        <h3>mock模拟list数据</h3>
        <el-table  :data="moreList" border height="400">
          <el-table-column prop="mtime" label="时间" show-overflow-tooltip></el-table-column>
          <el-table-column prop="score" label="分数" show-overflow-tooltip></el-table-column>
          <el-table-column prop="rank" label="等级" show-overflow-tooltip></el-table-column>
          <el-table-column prop="stars" label="星级" show-overflow-tooltip></el-table-column>
          <el-table-column prop="nickname" label="中文名" show-overflow-tooltip></el-table-column>
        </el-table>
      </el-col>

效果
在这里插入图片描述

2、mock模拟get请求

// 用于接受生成数据的数组
let tableList = []
for (let i = 0; i < 100; i++) {
  let newObject = {
    title: Random.csentence(5, 10), //  Random.csentence( min, max )
    name: Random.cname(), // Random.cname() 随机生成一个常见的中文姓名
    url: Random.url(), // 生成web地址
    date: Random.date() + ' ' + Random.time() // Random.date()指示生成的日期字符串的格式,默认为yyyy-MM-dd;Random.time() 返回一个随机的时间字符串
  }
  tableList.push(newObject)
}
// }
// console.log(tableList, 'tableList')
// 拦截ajax请求,配置mock的数据
// get请求
Mock.mock('/api/mockGetList', 'get', tableList)

相应文件中使用

      <el-col :span="12">
        <h3>mock模拟get接口(不分页)</h3>
        <el-table  :data="MockList" border ref="multipleTable" height="400">
          <el-table-column prop="title" label="标题" show-overflow-tooltip></el-table-column>
          <el-table-column prop="url" label="请求地址" show-overflow-tooltip></el-table-column>
          <el-table-column prop="name" label="操作人" show-overflow-tooltip></el-table-column>
          <el-table-column prop="date" label="时间" show-overflow-tooltip></el-table-column>
        </el-table>
      </el-col>

效果
在这里插入图片描述

3、mock模拟post分页

// 用于接受生成数据的数组
let tableList = []
for (let i = 0; i < 100; i++) {
  let newObject = {
    title: Random.csentence(5, 10), //  Random.csentence( min, max )
    name: Random.cname(), // Random.cname() 随机生成一个常见的中文姓名
    url: Random.url(), // 生成web地址
    date: Random.date() + ' ' + Random.time() // Random.date()指示生成的日期字符串的格式,默认为yyyy-MM-dd;Random.time() 返回一个随机的时间字符串
  }
  tableList.push(newObject)
}
// }
// console.log(tableList, 'tableList')
// 拦截ajax请求,配置mock的数据

// post请求分页
Mock.mock('/api/pageList', 'post', (params) => {
  console.log(params, 'params')
  const [index, size, total] = [JSON.parse(params.body).page, JSON.parse(params.body).size, tableList.length]
  let len = total / size
  // console.log(index, size, total, 'index, size, total')
  const totalPages = len - parseInt(len) > 0 ? parseInt(len) + 1 : len
  // 截取list
  // const newProduceNewsData = tableList.slice(index * size, (index + 1) * size)
  const newProduceNewsData = tableList.slice((index - 1) * size, index * size)
  // console.log(newProduceNewsData, 'newProduceNewsData')
  return {
    code: '0',
    message: 'success',
    data: {
      page: index,
      size: size,
      list: newProduceNewsData,
      total: total,
      totalPages: totalPages
    }
  }
})

在相应文件中使用

      <el-col :span="12">
        <h3>mock模拟post分页接口</h3>
        <el-table  :data="MockPageList" border height="400">
          <el-table-column prop="title" label="标题" show-overflow-tooltip></el-table-column>
          <el-table-column prop="url" label="请求地址" show-overflow-tooltip></el-table-column>
          <el-table-column prop="name" label="操作人" show-overflow-tooltip></el-table-column>
          <el-table-column prop="date" label="时间" show-overflow-tooltip></el-table-column>
        </el-table>
        <el-pagination
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
          :current-page.sync="searchForm.page"
          :page-sizes="[15, 40, 80]"
          :page-size="searchForm.size"
          layout="total, sizes, prev, pager, next, jumper"
          :total="total"
        ></el-pagination>
      </el-col>

效果
在这里插入图片描述

4、自定义样式实现list分页

mock中的数据模拟同3
页面中的应用:

      <el-col :span="12">
        <h3>自定义样式实现list分页</h3>
        <div class="total_box">
          <div class="small_box"
            v-for="item in MockPageList"
            :key="item.name">
            <el-row>操作人:{{item.name}}</el-row>
            <el-row>操作时间:{{item.date}}</el-row>
          </div>
        </div>
        <el-pagination
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
          :current-page.sync="searchForm.page"
          :page-sizes="[15, 40, 80]"
          :page-size="searchForm.size"
          layout="total, sizes, prev, pager, next, jumper"
          :total="total"
        ></el-pagination>
      </el-col>

样式:

<style lang='scss' scoped>
.total_box {
  display: flex;
  width: 100%;
  flex-wrap: wrap;
  .small_box {
    width: 30%;
    margin: 0 2% 2% 0;
    background-color: pink;
    min-width: 29%;
    cursor:pointer;
    border: 1px solid #dcdee2;
    border-radius: 2px;
  }
}
</style>

效果
在这里插入图片描述

整体的vue文件代码

<template>
  <div>
    <el-row>
      <el-col :span="12">
        <h3>mock模拟get接口(不分页)</h3>
        <el-table  :data="MockList" border ref="multipleTable" height="400">
          <el-table-column prop="title" label="标题" show-overflow-tooltip></el-table-column>
          <el-table-column prop="url" label="请求地址" show-overflow-tooltip></el-table-column>
          <el-table-column prop="name" label="操作人" show-overflow-tooltip></el-table-column>
          <el-table-column prop="date" label="时间" show-overflow-tooltip></el-table-column>
        </el-table>
      </el-col>
      <el-col :span="12">
        <h3>mock模拟list数据</h3>
        <el-table  :data="moreList" border height="400">
          <el-table-column prop="mtime" label="时间" show-overflow-tooltip></el-table-column>
          <el-table-column prop="score" label="分数" show-overflow-tooltip></el-table-column>
          <el-table-column prop="rank" label="等级" show-overflow-tooltip></el-table-column>
          <el-table-column prop="stars" label="星级" show-overflow-tooltip></el-table-column>
          <el-table-column prop="nickname" label="中文名" show-overflow-tooltip></el-table-column>
        </el-table>
      </el-col>
    </el-row>
    <el-row>
      <el-col :span="12">
        <h3>mock模拟post分页接口</h3>
        <el-table  :data="MockPageList" border height="400">
          <el-table-column prop="title" label="标题" show-overflow-tooltip></el-table-column>
          <el-table-column prop="url" label="请求地址" show-overflow-tooltip></el-table-column>
          <el-table-column prop="name" label="操作人" show-overflow-tooltip></el-table-column>
          <el-table-column prop="date" label="时间" show-overflow-tooltip></el-table-column>
        </el-table>
        <el-pagination
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
          :current-page.sync="searchForm.page"
          :page-sizes="[15, 40, 80]"
          :page-size="searchForm.size"
          layout="total, sizes, prev, pager, next, jumper"
          :total="total"
        ></el-pagination>
      </el-col>
      <el-col :span="12">
        <h3>自定义样式实现list分页</h3>
        <div class="total_box">
          <div class="small_box"
            v-for="item in MockPageList"
            :key="item.name">
            <el-row>操作人:{{item.name}}</el-row>
            <el-row>操作时间:{{item.date}}</el-row>
          </div>
        </div>
        <el-pagination
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
          :current-page.sync="searchForm.page"
          :page-sizes="[15, 40, 80]"
          :page-size="searchForm.size"
          layout="total, sizes, prev, pager, next, jumper"
          :total="total"
        ></el-pagination>
      </el-col>
    </el-row>
  </div>
</template>

<script>
import axios from 'axios'
import commonFuc from '@/assets/js/commonFuc'
export default {
  name: 'tableMockList',
  mixins: [commonFuc],
  data () {
    return {
      MockList: [],
      MockPageList: [],
      moreList: [],
      searchForm: {
        page: 1,
        size: 15
      },
      total: 0
    }
  },
  mounted () {
    this.getMockList()
    this.getList()
    this.getMoreList()
  },
  methods: {
    getMockList () {
      axios.get('/api/mockGetList')
        .then(res => {
          // console.log(res, 'mock模拟get接口获取result')
          this.MockList = res.data
        })
        .catch(err => {
          console.log(err)
        })
    },
    getList () {
      axios.post('/api/pageList', this.searchForm)
        .then(res => {
          // console.log(res, 'res')
          this.MockPageList = res.data.data.list
          this.total = res.data.data.total
        })
        .catch(err => {
          console.log(err)
        })
    },
    getMoreList () {
      axios.post('/api/moreList', this.searchForm)
        .then(res => {
          console.log(res, 'res')
          this.moreList = res.data.data
        })
        .catch(err => {
          console.log(err)
        })
    }
  }
}
</script>

<style lang='scss' scoped>
.el-col-12 {
  border-right: 1px solid #e6e6e6;
  padding:0 20px 20px 20px;
}
.el-row {
  border-bottom: 1px solid #e6e6e6;
}
.total_box {
  display: flex;
  width: 100%;
  flex-wrap: wrap;
  .small_box {
    width: 30%;
    margin: 0 2% 2% 0;
    background-color: pink;
    min-width: 29%;
    cursor:pointer;
    border: 1px solid #dcdee2;
    border-radius: 2px;
  }
}
</style>

混入的mixin:

export default {
  data () {
    return {
    }
  },

  methods: {
    handleSizeChange (val) {
      this.searchForm.size = val
      this.getList()
    },
    handleCurrentChange (val) {
      this.searchForm.page = val
      this.getList()
    }
  }
}

整体效果

在这里插入图片描述

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值