You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iot/projects/WebMVC/wwwroot/pages/shared/pagination.html

90 lines
3.3 KiB

<template>
<div class="row">
<div class="col-sm-12 col-md-5">
<div class="dataTables_info">{{index}}/{{getPageCount()}}</div>
</div>
<div class="col-sm-12 col-md-7">
<div class="dataTables_paginate paging_simple_numbers">
<ul class="pagination" style="justify-content:flex-end;">
<li :class="'paginate_button page-item previous'+(hasPrev()?'':' disabled')">
<a href="javascript:;" class="page-link" v-on:click="nav(index-1,size)">上一页</a>
</li>
<li v-for="item in getPageList()" :class="'paginate_button page-item' + (item===index?' active':'')">
<a href="javascript:;" class="page-link" v-on:click="nav(item,size)">{{item}}</a>
</li>
<li :class="'paginate_button page-item next'+(hasNext()?'':' disabled')">
<a href="javascript:;" class="page-link" v-on:click="nav(index+1,size)">下一页</a>
</li>
<li class="paginate_button page-item">
<select class="form-control" v-model="size" v-on:change="nav(1,size)">
<option v-for="item in sizeList" v-bind:value="item">
{{ item }}
</option>
</select>
</li>
</ul>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
index: {
type: Number,
default: 1
},
size: {
type: Number,
default: 20
},
total: {
type: Number,
default: 0
},
sizeList: {
type: Array,
default: [20, 50, 100]
},
nav: {
type: Function,
default: null
}
},
methods: {
getPageCount: function () {
return Math.ceil(this.total / this.size);
},
hasPrev: function () {
return this.index > 1;
},
hasNext: function () {
return this.index + 1 < this.getPageCount();
},
getPageList: function () {
var pageCount = this.getPageCount();
var maxLinks = 10;
var left = maxLinks / 2;
var start = this.index - left;
start = start > 1 ? start : 1;
var end = this.index + (maxLinks - left - 1);
end = end > pageCount ? pageCount : end;
if (start == 1 && end < pageCount) {
while (end - start + 1 < maxLinks && end < pageCount) {
end++;
}
}
if (end == pageCount && start > 1) {
while (end - start + 1 < maxLinks && start > 1) {
start--;
}
}
var list = [];
for (var i = start; i <= end; i++) {
list.push(i);
}
return list;
}
}
};
</script>