1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
| <template>
| <div v-if="showSizer || showElevator" :class="optsClasses">
| <div v-if="showSizer" :class="sizerClasses">
| <i-select v-model="currentPageSize" :size="size" :placement="placement" :transfer="transfer" :disabled="disabled" :eventsEnabled="eventsEnabled" @on-change="changeSize">
| <i-option v-for="item in pageSizeOpts" :key="item" :value="item" style="text-align:center;">{{ item }} {{ t('i.page.page') }}</i-option>
| </i-select>
| </div>
| <div v-if="showElevator" :class="ElevatorClasses">
| {{ t('i.page.goto') }}
| <input
| type="text"
| :value="_current"
| autocomplete="off"
| spellcheck="false"
| :disabled="disabled"
| @keyup.enter="changePage"
| >
| {{ t('i.page.p') }}
| </div>
| </div>
| </template>
| <script>
| import iSelect from '../../components/select/select.vue';
| import iOption from '../../components/select/option.vue';
| import Locale from '../../mixins/locale';
|
| const prefixCls = 'ivu-page';
|
| function isValueNumber (value) {
| return (/^[1-9][0-9]*$/).test(value + '');
| }
|
| export default {
| name: 'PageOption',
| mixins: [ Locale ],
| components: { iSelect, iOption },
| props: {
| pageSizeOpts: Array,
| showSizer: Boolean,
| showElevator: Boolean,
| current: Number,
| _current: Number,
| pageSize: Number,
| allPages: Number,
| isSmall: Boolean,
| placement: String,
| transfer: Boolean,
| disabled: Boolean,
| eventsEnabled: Boolean
| },
| data () {
| return {
| currentPageSize: this.pageSize
| };
| },
| watch: {
| pageSize (val) {
| this.currentPageSize = val;
| }
| },
| computed: {
| size () {
| return this.isSmall ? 'small' : 'default';
| },
| optsClasses () {
| return [
| `${prefixCls}-options`
| ];
| },
| sizerClasses () {
| return [
| `${prefixCls}-options-sizer`
| ];
| },
| ElevatorClasses () {
| return [
| `${prefixCls}-options-elevator`
| ];
| }
| },
| methods: {
| changeSize () {
| this.$emit('on-size', this.currentPageSize);
| },
| 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;
| }
| }
| }
| };
| </script>
|
|