2016-09-09 14:29:19 +08:00
|
|
|
<template>
|
|
|
|
<div v-if="showSizer || showElevator" :class="optsClasses">
|
|
|
|
<div v-if="showSizer" :class="sizerClasses">
|
2017-04-27 17:35:47 +08:00
|
|
|
<i-select v-model="currentPageSize" :size="size" :placement="placement" @on-change="changeSize">
|
2017-03-14 11:25:21 +08:00
|
|
|
<i-option v-for="item in pageSizeOpts" :key="item" :value="item" style="text-align:center;">{{ item }} {{ t('i.page.page') }}</i-option>
|
2016-10-17 12:34:20 +08:00
|
|
|
</i-select>
|
2016-09-09 14:29:19 +08:00
|
|
|
</div>
|
|
|
|
<div v-if="showElevator" :class="ElevatorClasses">
|
2017-01-12 10:21:47 +08:00
|
|
|
{{ t('i.page.goto') }}
|
2017-11-04 16:37:29 +01:00
|
|
|
<input
|
|
|
|
type="text"
|
|
|
|
:value="_current"
|
|
|
|
autocomplete="off"
|
|
|
|
spellcheck="false"
|
|
|
|
@keyup.enter="changePage"
|
|
|
|
>
|
2017-01-12 10:21:47 +08:00
|
|
|
{{ t('i.page.p') }}
|
2016-09-09 14:29:19 +08:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
<script>
|
2016-10-17 12:34:20 +08:00
|
|
|
import iSelect from '../../components/select/select.vue';
|
|
|
|
import iOption from '../../components/select/option.vue';
|
2017-01-12 10:21:47 +08:00
|
|
|
import Locale from '../../mixins/locale';
|
2016-10-17 12:34:20 +08:00
|
|
|
|
2016-09-09 14:29:19 +08:00
|
|
|
const prefixCls = 'ivu-page';
|
|
|
|
|
|
|
|
function isValueNumber (value) {
|
|
|
|
return (/^[1-9][0-9]*$/).test(value + '');
|
|
|
|
}
|
|
|
|
|
|
|
|
export default {
|
2017-03-07 10:32:46 +08:00
|
|
|
name: 'PageOption',
|
2017-01-12 10:21:47 +08:00
|
|
|
mixins: [ Locale ],
|
2016-10-17 12:34:20 +08:00
|
|
|
components: { iSelect, iOption },
|
2016-09-09 14:29:19 +08:00
|
|
|
props: {
|
|
|
|
pageSizeOpts: Array,
|
|
|
|
showSizer: Boolean,
|
|
|
|
showElevator: Boolean,
|
|
|
|
current: Number,
|
|
|
|
_current: Number,
|
|
|
|
pageSize: Number,
|
2016-10-25 09:10:02 +08:00
|
|
|
allPages: Number,
|
2017-04-27 17:35:47 +08:00
|
|
|
isSmall: Boolean,
|
|
|
|
placement: String
|
2016-09-09 14:29:19 +08:00
|
|
|
},
|
2017-03-07 10:32:46 +08:00
|
|
|
data () {
|
|
|
|
return {
|
|
|
|
currentPageSize: this.pageSize
|
2017-03-07 10:37:01 +08:00
|
|
|
};
|
2017-03-07 10:32:46 +08:00
|
|
|
},
|
|
|
|
watch: {
|
|
|
|
pageSize (val) {
|
|
|
|
this.currentPageSize = val;
|
|
|
|
}
|
|
|
|
},
|
2016-09-09 14:29:19 +08:00
|
|
|
computed: {
|
2016-10-25 09:10:02 +08:00
|
|
|
size () {
|
|
|
|
return this.isSmall ? 'small' : 'default';
|
|
|
|
},
|
2016-09-09 14:29:19 +08:00
|
|
|
optsClasses () {
|
|
|
|
return [
|
|
|
|
`${prefixCls}-options`
|
2016-12-25 22:49:42 +08:00
|
|
|
];
|
2016-09-09 14:29:19 +08:00
|
|
|
},
|
|
|
|
sizerClasses () {
|
|
|
|
return [
|
|
|
|
`${prefixCls}-options-sizer`
|
2016-12-25 22:49:42 +08:00
|
|
|
];
|
2016-09-09 14:29:19 +08:00
|
|
|
},
|
|
|
|
ElevatorClasses () {
|
|
|
|
return [
|
|
|
|
`${prefixCls}-options-elevator`
|
2016-12-25 22:49:42 +08:00
|
|
|
];
|
2016-09-09 14:29:19 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
changeSize () {
|
2017-03-07 10:32:46 +08:00
|
|
|
this.$emit('on-size', this.currentPageSize);
|
2016-09-09 14:29:19 +08:00
|
|
|
},
|
|
|
|
changePage (event) {
|
|
|
|
let val = event.target.value.trim();
|
|
|
|
let page = 0;
|
|
|
|
|
|
|
|
if (isValueNumber(val)) {
|
|
|
|
val = Number(val);
|
|
|
|
if (val != this.current) {
|
|
|
|
const allPages = this.allPages;
|
|
|
|
|
|
|
|
if (val > allPages) {
|
|
|
|
page = allPages;
|
|
|
|
} else {
|
|
|
|
page = val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
page = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (page) {
|
|
|
|
this.$emit('on-page', page);
|
|
|
|
event.target.value = page;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2016-12-25 22:49:42 +08:00
|
|
|
};
|
2017-11-04 16:37:29 +01:00
|
|
|
</script>
|