Commit 87c515977f140a51de2c4513e20bd4eb48f5d8a2
1 parent
4aec6a66
support Page
support Page
Showing
8 changed files
with
71 additions
and
40 deletions
Show diff stats
CHANGE.md
... | ... | @@ -42,4 +42,6 @@ Menu 的 activeKey 改为 activeName,openKeys 改为 openNames |
42 | 42 | ### Cascader |
43 | 43 | Caspanel 的 sublist 从 prop -> data |
44 | 44 | ### Select |
45 | -model 改为 value,支持 v-model | |
46 | 45 | \ No newline at end of file |
46 | +model 改为 value,支持 v-model | |
47 | +### Page | |
48 | +class 改为 className | |
47 | 49 | \ No newline at end of file | ... | ... |
README.md
examples/app.vue
... | ... | @@ -44,6 +44,7 @@ li + li { border-left: solid 1px #bbb; padding-left: 10px; margin-left: 10px; } |
44 | 44 | <li><router-link to="/spin">Spin</router-link></li> |
45 | 45 | <li><router-link to="/cascader">Cascader</router-link></li> |
46 | 46 | <li><router-link to="/select">Select</router-link></li> |
47 | + <li><router-link to="/page">Page</router-link></li> | |
47 | 48 | </ul> |
48 | 49 | </nav> |
49 | 50 | <router-view></router-view> | ... | ... |
examples/main.js
examples/routers/page.vue
1 | 1 | <template> |
2 | - <Page :total="1000" show-sizer show-elevator show-total class="classr" :style="{float: 'right'}" @on-page-size-change="pc"></Page> | |
3 | - <br><br> | |
4 | - <Page :total="1000" show-sizer show-elevator show-total size="small" class="classr2"></Page> | |
5 | - <br><br> | |
6 | - <Page :current="2" :total="50" simple></Page> | |
2 | + <div> | |
3 | + <Page :total="1000" show-sizer show-elevator show-total class="classr" :style="{float: 'right'}" @on-page-size-change="pc"></Page> | |
4 | + <br><br> | |
5 | + <Page :total="1000" show-sizer show-elevator show-total size="small" class="classr2"></Page> | |
6 | + <br><br> | |
7 | + <Page :current="2" :total="50" simple></Page> | |
8 | + </div> | |
7 | 9 | </template> |
8 | 10 | <script> |
9 | 11 | import { Page } from 'iview'; | ... | ... |
src/components/page/options.vue
1 | 1 | <template> |
2 | 2 | <div v-if="showSizer || showElevator" :class="optsClasses"> |
3 | 3 | <div v-if="showSizer" :class="sizerClasses"> |
4 | - <i-select :model.sync="pageSize" :size="size" @on-change="changeSize"> | |
4 | + <i-select v-model="currentPageSize" :size="size" @on-change="changeSize"> | |
5 | 5 | <i-option v-for="item in pageSizeOpts" :value="item" style="text-align:center;">{{ item }} {{ t('i.page.page') }}</i-option> |
6 | 6 | </i-select> |
7 | 7 | </div> |
... | ... | @@ -24,6 +24,7 @@ |
24 | 24 | } |
25 | 25 | |
26 | 26 | export default { |
27 | + name: 'PageOption', | |
27 | 28 | mixins: [ Locale ], |
28 | 29 | components: { iSelect, iOption }, |
29 | 30 | props: { |
... | ... | @@ -36,6 +37,16 @@ |
36 | 37 | allPages: Number, |
37 | 38 | isSmall: Boolean |
38 | 39 | }, |
40 | + data () { | |
41 | + return { | |
42 | + currentPageSize: this.pageSize | |
43 | + } | |
44 | + }, | |
45 | + watch: { | |
46 | + pageSize (val) { | |
47 | + this.currentPageSize = val; | |
48 | + } | |
49 | + }, | |
39 | 50 | computed: { |
40 | 51 | size () { |
41 | 52 | return this.isSmall ? 'small' : 'default'; |
... | ... | @@ -58,7 +69,7 @@ |
58 | 69 | }, |
59 | 70 | methods: { |
60 | 71 | changeSize () { |
61 | - this.$emit('on-size', this.pageSize); | |
72 | + this.$emit('on-size', this.currentPageSize); | |
62 | 73 | }, |
63 | 74 | changePage (event) { |
64 | 75 | let val = event.target.value.trim(); |
... | ... | @@ -86,4 +97,4 @@ |
86 | 97 | } |
87 | 98 | } |
88 | 99 | }; |
89 | 100 | -</script> |
101 | +</script> | |
90 | 102 | \ No newline at end of file | ... | ... |
src/components/page/page.vue
... | ... | @@ -6,10 +6,10 @@ |
6 | 6 | @click="prev"> |
7 | 7 | <a><i class="ivu-icon ivu-icon-ios-arrow-left"></i></a> |
8 | 8 | </li> |
9 | - <div :class="simplePagerClasses" :title="current + '/' + allPages"> | |
9 | + <div :class="simplePagerClasses" :title="currentPage + '/' + allPages"> | |
10 | 10 | <input |
11 | 11 | type="text" |
12 | - :value="current" | |
12 | + :value="currentPage" | |
13 | 13 | @keydown="keyDown" |
14 | 14 | @keyup="keyUp" |
15 | 15 | @change="keyUp"> |
... | ... | @@ -34,13 +34,13 @@ |
34 | 34 | <a><i class="ivu-icon ivu-icon-ios-arrow-left"></i></a> |
35 | 35 | </li> |
36 | 36 | <li title="1" :class="firstPageClasses" @click="changePage(1)"><a>1</a></li> |
37 | - <li :title="t('i.page.prev5')" v-if="current - 3 > 1" :class="[prefixCls + '-item-jump-prev']" @click="fastPrev"><a><i class="ivu-icon ivu-icon-ios-arrow-left"></i></a></li> | |
38 | - <li :title="current - 2" v-if="current - 2 > 1" :class="[prefixCls + '-item']" @click="changePage(current - 2)"><a>{{ current - 2 }}</a></li> | |
39 | - <li :title="current - 1" v-if="current - 1 > 1" :class="[prefixCls + '-item']" @click="changePage(current - 1)"><a>{{ current - 1 }}</a></li> | |
40 | - <li :title="current" v-if="current != 1 && current != allPages" :class="[prefixCls + '-item',prefixCls + '-item-active']"><a>{{ current }}</a></li> | |
41 | - <li :title="current + 1" v-if="current + 1 < allPages" :class="[prefixCls + '-item']" @click="changePage(current + 1)"><a>{{ current + 1 }}</a></li> | |
42 | - <li :title="current + 2" v-if="current + 2 < allPages" :class="[prefixCls + '-item']" @click="changePage(current + 2)"><a>{{ current + 2 }}</a></li> | |
43 | - <li :title="t('i.page.next5')" v-if="current + 3 < allPages" :class="[prefixCls + '-item-jump-next']" @click="fastNext"><a><i class="ivu-icon ivu-icon-ios-arrow-right"></i></a></li> | |
37 | + <li :title="t('i.page.prev5')" v-if="currentPage - 3 > 1" :class="[prefixCls + '-item-jump-prev']" @click="fastPrev"><a><i class="ivu-icon ivu-icon-ios-arrow-left"></i></a></li> | |
38 | + <li :title="currentPage - 2" v-if="currentPage - 2 > 1" :class="[prefixCls + '-item']" @click="changePage(currentPage - 2)"><a>{{ currentPage - 2 }}</a></li> | |
39 | + <li :title="currentPage - 1" v-if="currentPage - 1 > 1" :class="[prefixCls + '-item']" @click="changePage(currentPage - 1)"><a>{{ currentPage - 1 }}</a></li> | |
40 | + <li :title="currentPage" v-if="currentPage != 1 && currentPage != allPages" :class="[prefixCls + '-item',prefixCls + '-item-active']"><a>{{ currentPage }}</a></li> | |
41 | + <li :title="currentPage + 1" v-if="currentPage + 1 < allPages" :class="[prefixCls + '-item']" @click="changePage(currentPage + 1)"><a>{{ currentPage + 1 }}</a></li> | |
42 | + <li :title="currentPage + 2" v-if="currentPage + 2 < allPages" :class="[prefixCls + '-item']" @click="changePage(currentPage + 2)"><a>{{ currentPage + 2 }}</a></li> | |
43 | + <li :title="t('i.page.next5')" v-if="currentPage + 3 < allPages" :class="[prefixCls + '-item-jump-next']" @click="fastNext"><a><i class="ivu-icon ivu-icon-ios-arrow-right"></i></a></li> | |
44 | 44 | <li :title="allPages" v-if="allPages > 1" :class="lastPageClasses" @click="changePage(allPages)"><a>{{ allPages }}</a></li> |
45 | 45 | <li |
46 | 46 | :title="t('i.page.next')" |
... | ... | @@ -50,11 +50,11 @@ |
50 | 50 | </li> |
51 | 51 | <Options |
52 | 52 | :show-sizer="showSizer" |
53 | - :page-size="pageSize" | |
53 | + :page-size="currentPageSize" | |
54 | 54 | :page-size-opts="pageSizeOpts" |
55 | 55 | :show-elevator="showElevator" |
56 | - :_current.once="current" | |
57 | - :current.sync="current" | |
56 | + :_current.once="currentPage" | |
57 | + :current="currentPage" | |
58 | 58 | :all-pages="allPages" |
59 | 59 | :is-small="isSmall" |
60 | 60 | @on-size="onSize" |
... | ... | @@ -70,6 +70,7 @@ |
70 | 70 | const prefixCls = 'ivu-page'; |
71 | 71 | |
72 | 72 | export default { |
73 | + name: 'Page', | |
73 | 74 | mixins: [ Locale ], |
74 | 75 | components: { Options }, |
75 | 76 | props: { |
... | ... | @@ -112,7 +113,7 @@ |
112 | 113 | type: Boolean, |
113 | 114 | default: false |
114 | 115 | }, |
115 | - class: { | |
116 | + className: { | |
116 | 117 | type: String |
117 | 118 | }, |
118 | 119 | style: { |
... | ... | @@ -121,15 +122,25 @@ |
121 | 122 | }, |
122 | 123 | data () { |
123 | 124 | return { |
124 | - prefixCls: prefixCls | |
125 | + prefixCls: prefixCls, | |
126 | + currentPage: this.current, | |
127 | + currentPageSize: this.pageSize | |
125 | 128 | }; |
126 | 129 | }, |
130 | + watch: { | |
131 | + current (val) { | |
132 | + this.currentPage = val; | |
133 | + }, | |
134 | + pageSize (val) { | |
135 | + this.currentPageSize = val; | |
136 | + } | |
137 | + }, | |
127 | 138 | computed: { |
128 | 139 | isSmall () { |
129 | 140 | return !!this.size; |
130 | 141 | }, |
131 | 142 | allPages () { |
132 | - const allPage = Math.ceil(this.total / this.pageSize); | |
143 | + const allPage = Math.ceil(this.total / this.currentPageSize); | |
133 | 144 | return (allPage === 0) ? 1 : allPage; |
134 | 145 | }, |
135 | 146 | simpleWrapClasses () { |
... | ... | @@ -137,7 +148,7 @@ |
137 | 148 | `${prefixCls}`, |
138 | 149 | `${prefixCls}-simple`, |
139 | 150 | { |
140 | - [`${this.class}`]: !!this.class | |
151 | + [`${this.className}`]: !!this.className | |
141 | 152 | } |
142 | 153 | ]; |
143 | 154 | }, |
... | ... | @@ -148,7 +159,7 @@ |
148 | 159 | return [ |
149 | 160 | `${prefixCls}`, |
150 | 161 | { |
151 | - [`${this.class}`]: !!this.class, | |
162 | + [`${this.className}`]: !!this.className, | |
152 | 163 | 'mini': !!this.size |
153 | 164 | } |
154 | 165 | ]; |
... | ... | @@ -157,7 +168,7 @@ |
157 | 168 | return [ |
158 | 169 | `${prefixCls}-prev`, |
159 | 170 | { |
160 | - [`${prefixCls}-disabled`]: this.current === 1 | |
171 | + [`${prefixCls}-disabled`]: this.currentPage === 1 | |
161 | 172 | } |
162 | 173 | ]; |
163 | 174 | }, |
... | ... | @@ -165,7 +176,7 @@ |
165 | 176 | return [ |
166 | 177 | `${prefixCls}-next`, |
167 | 178 | { |
168 | - [`${prefixCls}-disabled`]: this.current === this.allPages | |
179 | + [`${prefixCls}-disabled`]: this.currentPage === this.allPages | |
169 | 180 | } |
170 | 181 | ]; |
171 | 182 | }, |
... | ... | @@ -173,7 +184,7 @@ |
173 | 184 | return [ |
174 | 185 | `${prefixCls}-item`, |
175 | 186 | { |
176 | - [`${prefixCls}-item-active`]: this.current === 1 | |
187 | + [`${prefixCls}-item-active`]: this.currentPage === 1 | |
177 | 188 | } |
178 | 189 | ]; |
179 | 190 | }, |
... | ... | @@ -181,34 +192,34 @@ |
181 | 192 | return [ |
182 | 193 | `${prefixCls}-item`, |
183 | 194 | { |
184 | - [`${prefixCls}-item-active`]: this.current === this.allPages | |
195 | + [`${prefixCls}-item-active`]: this.currentPage === this.allPages | |
185 | 196 | } |
186 | 197 | ]; |
187 | 198 | } |
188 | 199 | }, |
189 | 200 | methods: { |
190 | 201 | changePage (page) { |
191 | - if (this.current != page) { | |
192 | - this.current = page; | |
202 | + if (this.currentPage != page) { | |
203 | + this.currentPage = page; | |
193 | 204 | this.$emit('on-change', page); |
194 | 205 | } |
195 | 206 | }, |
196 | 207 | prev () { |
197 | - const current = this.current; | |
208 | + const current = this.currentPage; | |
198 | 209 | if (current <= 1) { |
199 | 210 | return false; |
200 | 211 | } |
201 | 212 | this.changePage(current - 1); |
202 | 213 | }, |
203 | 214 | next () { |
204 | - const current = this.current; | |
215 | + const current = this.currentPage; | |
205 | 216 | if (current >= this.allPages) { |
206 | 217 | return false; |
207 | 218 | } |
208 | 219 | this.changePage(current + 1); |
209 | 220 | }, |
210 | 221 | fastPrev () { |
211 | - const page = this.current - 5; | |
222 | + const page = this.currentPage - 5; | |
212 | 223 | if (page > 0) { |
213 | 224 | this.changePage(page); |
214 | 225 | } else { |
... | ... | @@ -216,7 +227,7 @@ |
216 | 227 | } |
217 | 228 | }, |
218 | 229 | fastNext () { |
219 | - const page = this.current + 5; | |
230 | + const page = this.currentPage + 5; | |
220 | 231 | if (page > this.allPages) { |
221 | 232 | this.changePage(this.allPages); |
222 | 233 | } else { |
... | ... | @@ -224,7 +235,7 @@ |
224 | 235 | } |
225 | 236 | }, |
226 | 237 | onSize (pageSize) { |
227 | - this.pageSize = pageSize; | |
238 | + this.currentPageSize = pageSize; | |
228 | 239 | this.changePage(1); |
229 | 240 | this.$emit('on-page-size-change', pageSize); |
230 | 241 | }, | ... | ... |
src/index.js
... | ... | @@ -24,7 +24,7 @@ import Menu from './components/menu'; |
24 | 24 | // import Message from './components/message'; |
25 | 25 | // import Modal from './components/modal'; |
26 | 26 | // import Notice from './components/notice'; |
27 | -// import Page from './components/page'; | |
27 | +import Page from './components/page'; | |
28 | 28 | import Poptip from './components/poptip'; |
29 | 29 | import Progress from './components/progress'; |
30 | 30 | import Radio from './components/radio'; |
... | ... | @@ -85,7 +85,7 @@ const iview = { |
85 | 85 | // Notice, |
86 | 86 | iOption: Option, |
87 | 87 | OptionGroup, |
88 | - // Page, | |
88 | + Page, | |
89 | 89 | Panel: Collapse.Panel, |
90 | 90 | Poptip, |
91 | 91 | Progress, | ... | ... |