iview/src/components/page/options.vue

108 lines
3.1 KiB
Vue
Raw Normal View History

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>
</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>
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-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 ],
components: { iSelect, iOption },
2016-09-09 14:29:19 +08:00
props: {
pageSizeOpts: Array,
showSizer: Boolean,
showElevator: Boolean,
current: Number,
_current: Number,
pageSize: Number,
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: {
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>