前端基础学习-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()
}
}
}