@10yun/cv-mobile-ui 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/package.json +1 -1
  2. package/ui-uni/amap-wx/js/util.js +166 -158
  3. package/ui-uni/page-foot/page-foot.vue +38 -0
  4. package/ui-uni/page-head/page-head.vue +16 -0
  5. package/ui-uni/product.vue +52 -52
  6. package/ui-uni/u-charts/u-charts.js +743 -1092
  7. package/ui-uni/u-link/u-link.vue +59 -0
  8. package/ui-uni/uni-badge/uni-badge.vue +250 -0
  9. package/ui-uni/uni-calendar/calendar.js +546 -0
  10. package/ui-uni/uni-calendar/uni-calendar-item.vue +171 -0
  11. package/ui-uni/uni-calendar/uni-calendar.vue +504 -0
  12. package/{ui-cv/cv-calendar → ui-uni/uni-calendar}/util.js +0 -0
  13. package/ui-uni/uni-card/uni-card.vue +420 -0
  14. package/ui-uni/uni-col/uni-col.vue +2968 -0
  15. package/ui-uni/uni-collapse/uni-collapse.vue +146 -0
  16. package/ui-uni/uni-collapse-item/uni-collapse-item.vue +378 -0
  17. package/ui-uni/uni-combox/uni-combox.vue +237 -0
  18. package/ui-uni/uni-countdown/uni-countdown.vue +234 -0
  19. package/ui-uni/uni-data-checkbox/uni-data-checkbox.vue +792 -0
  20. package/{ui-cv/cv-data-indexed-list → ui-uni/uni-data-indexed-list}/clientdb.js +0 -0
  21. package/ui-uni/uni-data-indexed-list/uni-data-indexed-list-item.vue +142 -0
  22. package/ui-uni/uni-data-indexed-list/uni-data-indexed-list.vue +364 -0
  23. package/{ui-cv/cv-data-picker → ui-uni/uni-data-picker}/keypress.js +0 -0
  24. package/ui-uni/uni-data-picker/uni-data-picker.vue +468 -0
  25. package/{ui-cv/cv-data-pickerview/cv-data-picker.js → ui-uni/uni-data-pickerview/uni-data-picker.js} +0 -0
  26. package/ui-uni/uni-data-pickerview/uni-data-pickerview.vue +298 -0
  27. package/{ui-cv/cv-dateformat → ui-uni/uni-dateformat}/date-format.js +0 -0
  28. package/ui-uni/uni-dateformat/uni-dateformat.vue +88 -0
  29. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/calendar-item.vue +0 -0
  30. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/calendar.js +0 -0
  31. package/ui-uni/uni-datetime-picker/calendar.vue +747 -0
  32. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/keypress.js +0 -0
  33. package/ui-uni/uni-datetime-picker/time-picker.vue +899 -0
  34. package/ui-uni/uni-datetime-picker/uni-datetime-picker.vue +874 -0
  35. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/util.js +0 -0
  36. package/ui-uni/uni-drawer/keypress.js +45 -0
  37. package/ui-uni/uni-drawer/uni-drawer.vue +178 -0
  38. package/{ui-cv/cv-easyinput → ui-uni/uni-easyinput}/common.js +0 -0
  39. package/ui-uni/uni-easyinput/uni-easyinput.vue +438 -0
  40. package/ui-uni/uni-fab/uni-fab.vue +443 -0
  41. package/{ui-cv/cv-fab/cv-fab.vue.bak → ui-uni/uni-fab/uni-fab.vue.bak} +2 -2
  42. package/ui-uni/uni-fav/uni-fav.vue +136 -0
  43. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/choose-and-upload-file.js +0 -0
  44. package/ui-uni/uni-file-picker/uni-file-picker.vue +614 -0
  45. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/upload-file.vue +0 -0
  46. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/upload-image.vue +0 -0
  47. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/utils.js +0 -0
  48. package/ui-uni/uni-forms/uni-forms.vue +467 -0
  49. package/ui-uni/uni-forms/validate.js +486 -0
  50. package/ui-uni/uni-forms-item/uni-forms-item.vue +500 -0
  51. package/{ui-cv/cv-goods-nav/cv-goods-nav.vue → ui-uni/uni-goods-nav/uni-goods-nav.vue} +1 -1
  52. package/ui-uni/uni-grid/uni-grid.vue +141 -0
  53. package/ui-uni/uni-grid-item/uni-grid-item.vue +123 -0
  54. package/ui-uni/uni-group/uni-group.vue +123 -0
  55. package/ui-uni/uni-icons/icons.js +132 -0
  56. package/ui-uni/uni-icons/uni-icons.vue +72 -0
  57. package/{ui-cv/cv-icon2 → ui-uni/uni-icons}/uni.ttf +0 -0
  58. package/ui-uni/uni-indexed-list/uni-indexed-list-item.vue +142 -0
  59. package/ui-uni/uni-indexed-list/uni-indexed-list.vue +357 -0
  60. package/ui-uni/uni-link/uni-link.vue +117 -0
  61. package/ui-uni/uni-list/uni-list.vue +107 -0
  62. package/ui-uni/uni-list/uni-refresh.vue +65 -0
  63. package/{ui-cv/cv-list → ui-uni/uni-list}/uni-refresh.wxs +0 -0
  64. package/ui-uni/uni-list-ad/uni-list-ad.vue +106 -0
  65. package/{ui-cv/cv-list-chat/cv-list-chat.scss → ui-uni/uni-list-chat/uni-list-chat.scss} +0 -0
  66. package/{ui-cv/cv-list-chat/cv-list-chat.vue → ui-uni/uni-list-chat/uni-list-chat.vue} +0 -0
  67. package/ui-uni/uni-list-item/uni-list-item.vue +428 -0
  68. package/ui-uni/uni-load-more/uni-load-more.vue +366 -0
  69. package/ui-uni/uni-nav-bar/uni-nav-bar.vue +244 -0
  70. package/{ui-cv/cv-nav-bar/cv-status-bar.vue → ui-uni/uni-nav-bar/uni-status-bar.vue} +0 -0
  71. package/ui-uni/uni-notice-bar/uni-notice-bar.vue +394 -0
  72. package/ui-uni/uni-number-box/uni-number-box.vue +224 -0
  73. package/ui-uni/uni-pagination/uni-pagination.vue +376 -0
  74. package/{ui-cv/cv-popup → ui-uni/uni-popup}/keypress.js +0 -0
  75. package/{ui-cv/cv-popup → ui-uni/uni-popup}/popup.js +0 -0
  76. package/ui-uni/uni-popup/uni-popup.vue +412 -0
  77. package/{ui-cv/cv-popup-dialog → ui-uni/uni-popup-dialog}/keypress.js +0 -0
  78. package/{ui-cv/cv-popup-dialog/cv-popup-dialog.vue → ui-uni/uni-popup-dialog/uni-popup-dialog.vue} +0 -0
  79. package/ui-uni/uni-popup-message/uni-popup-message.vue +143 -0
  80. package/{ui-cv/cv-popup-share/cv-popup-share.vue → ui-uni/uni-popup-share/uni-popup-share.vue} +0 -0
  81. package/ui-uni/uni-rate/uni-rate.vue +357 -0
  82. package/ui-uni/uni-row/uni-row.vue +155 -0
  83. package/ui-uni/uni-search-bar/uni-search-bar.vue +262 -0
  84. package/{ui-cv/cv-section/cv-section.vue → ui-uni/uni-section/uni-section.vue} +0 -0
  85. package/{ui-cv/cv-segmented-control/cv-segmented-control.vue → ui-uni/uni-segmented-control/uni-segmented-control.vue} +0 -0
  86. package/{ui-cv/cv-status-bar/cv-status-bar.vue → ui-uni/uni-status-bar/uni-status-bar.vue} +0 -0
  87. package/ui-uni/uni-steps/uni-steps.vue +250 -0
  88. package/{ui-cv/cv-swipe-action/cv-swipe-action.vue → ui-uni/uni-swipe-action/uni-swipe-action.vue} +0 -0
  89. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/bindingx.js +0 -0
  90. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/index.wxs +0 -0
  91. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/isPC.js +0 -0
  92. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/mpalipay.js +0 -0
  93. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/mpother.js +0 -0
  94. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/mpwxs.js +0 -0
  95. package/{ui-cv/cv-swipe-action-item/cv-swipe-action-item.vue → ui-uni/uni-swipe-action-item/uni-swipe-action-item.vue} +0 -0
  96. package/ui-uni/uni-swiper-dot/uni-swiper-dot.vue +205 -0
  97. package/ui-uni/uni-table/uni-table.vue +455 -0
  98. package/ui-uni/uni-tag/uni-tag.vue +283 -0
  99. package/ui-uni/uni-tbody/uni-tbody.vue +30 -0
  100. package/ui-uni/uni-td/uni-td.vue +88 -0
  101. package/{ui-cv/cv-test/cv-test.vue → ui-uni/uni-test/uni-test.vue} +0 -0
  102. package/{ui-cv/cv-th → ui-uni/uni-th}/filter-dropdown.vue +0 -0
  103. package/ui-uni/uni-th/uni-th.vue +259 -0
  104. package/ui-uni/uni-thead/uni-thead.vue +114 -0
  105. package/ui-uni/uni-title/uni-title.vue +171 -0
  106. package/{ui-cv/cv-tr → ui-uni/uni-tr}/table-checkbox.vue +0 -0
  107. package/ui-uni/uni-tr/uni-tr.vue +156 -0
  108. package/{ui-cv/cv-transition → ui-uni/uni-transition}/createAnimation.js +0 -0
  109. package/ui-uni/uni-transition/uni-transition.vue +287 -0
  110. package/ui-cv/cv-badge/cv-badge.vue +0 -249
  111. package/ui-cv/cv-calendar/calendar.js +0 -963
  112. package/ui-cv/cv-calendar/cv-calendar-item.vue +0 -198
  113. package/ui-cv/cv-calendar/cv-calendar.vue +0 -508
  114. package/ui-cv/cv-card/cv-card.vue +0 -427
  115. package/ui-cv/cv-col/cv-col.vue +0 -2965
  116. package/ui-cv/cv-collapse/cv-collapse.vue +0 -146
  117. package/ui-cv/cv-collapse-item/cv-collapse-item.vue +0 -395
  118. package/ui-cv/cv-combox/cv-combox.vue +0 -250
  119. package/ui-cv/cv-countdown/cv-countdown.vue +0 -245
  120. package/ui-cv/cv-data-checkbox/cv-data-checkbox.vue +0 -841
  121. package/ui-cv/cv-data-indexed-list/cv-data-indexed-list-item.vue +0 -154
  122. package/ui-cv/cv-data-indexed-list/cv-data-indexed-list.vue +0 -376
  123. package/ui-cv/cv-data-picker/cv-data-picker.vue +0 -486
  124. package/ui-cv/cv-data-pickerview/cv-data-pickerview.vue +0 -304
  125. package/ui-cv/cv-dateformat/cv-dateformat.vue +0 -86
  126. package/ui-cv/cv-datetime-picker/calendar.vue +0 -761
  127. package/ui-cv/cv-datetime-picker/cv-datetime-picker.vue +0 -958
  128. package/ui-cv/cv-datetime-picker/time-picker.vue +0 -907
  129. package/ui-cv/cv-drawer/cv-drawer.vue +0 -185
  130. package/ui-cv/cv-drawer/keypress.js +0 -45
  131. package/ui-cv/cv-easyinput/cv-easyinput.vue +0 -514
  132. package/ui-cv/cv-fab/cv-fab.vue +0 -465
  133. package/ui-cv/cv-fav/cv-fav.vue +0 -150
  134. package/ui-cv/cv-file-picker/cv-file-picker.vue +0 -619
  135. package/ui-cv/cv-form-base/cv-form-base.vue +0 -470
  136. package/ui-cv/cv-form-base/validate.js +0 -477
  137. package/ui-cv/cv-grid-group/cv-grid-group.vue +0 -148
  138. package/ui-cv/cv-grid-item/cv-grid-item.vue +0 -132
  139. package/ui-cv/cv-icon2/cv-icon2.vue +0 -78
  140. package/ui-cv/cv-icon2/icons.js +0 -132
  141. package/ui-cv/cv-indexed-list/cv-indexed-list-item.vue +0 -154
  142. package/ui-cv/cv-indexed-list/cv-indexed-list.vue +0 -371
  143. package/ui-cv/cv-link2/cv-link2.vue +0 -130
  144. package/ui-cv/cv-list/cv-list.vue +0 -107
  145. package/ui-cv/cv-list/cv-refresh.vue +0 -65
  146. package/ui-cv/cv-list-ad/cv-list-ad.vue +0 -113
  147. package/ui-cv/cv-list-item/cv-list-item.vue +0 -449
  148. package/ui-cv/cv-nav-bar/cv-nav-bar.vue +0 -256
  149. package/ui-cv/cv-notice-bar/cv-notice-bar.vue +0 -453
  150. package/ui-cv/cv-number-box/cv-number-box.vue +0 -223
  151. package/ui-cv/cv-pagination/cv-pagination.vue +0 -397
  152. package/ui-cv/cv-popup/cv-popup.vue +0 -429
  153. package/ui-cv/cv-popup-message/cv-popup-message.vue +0 -143
  154. package/ui-cv/cv-row/cv-row.vue +0 -157
  155. package/ui-cv/cv-search-bar/cv-search-bar.vue +0 -280
  156. package/ui-cv/cv-steps/cv-steps.vue +0 -293
  157. package/ui-cv/cv-swiper-dot/cv-swiper-dot.vue +0 -255
  158. package/ui-cv/cv-table/cv-table.vue +0 -460
  159. package/ui-cv/cv-tag/cv-tag.vue +0 -276
  160. package/ui-cv/cv-tbody/cv-tbody.vue +0 -28
  161. package/ui-cv/cv-td/cv-td.vue +0 -93
  162. package/ui-cv/cv-th/cv-th.vue +0 -270
  163. package/ui-cv/cv-thead/cv-thead.vue +0 -114
  164. package/ui-cv/cv-title/cv-title.vue +0 -168
  165. package/ui-cv/cv-tr/cv-tr.vue +0 -166
  166. package/ui-cv/cv-transition/cv-transition.vue +0 -279
@@ -1,223 +0,0 @@
1
- <template>
2
- <view class="uni-numbox">
3
- <view @click="_calcValue('minus')" class="uni-numbox__minus uni-cursor-point">
4
- <text class="uni-numbox--text" :class="{ 'uni-numbox--disabled': inputValue <= min || disabled }">-</text>
5
- </view>
6
- <input :disabled="disabled" @focus="_onFocus" @blur="_onBlur" class="uni-numbox__value" type="number" v-model="inputValue" />
7
- <view @click="_calcValue('plus')" class="uni-numbox__plus uni-cursor-point">
8
- <text class="uni-numbox--text" :class="{ 'uni-numbox--disabled': inputValue >= max || disabled }">+</text>
9
- </view>
10
- </view>
11
- </template>
12
- <script>
13
- /**
14
- * NumberBox 数字输入框
15
- * @description 带加减按钮的数字输入框
16
- * @tutorial https://ext.dcloud.net.cn/plugin?id=31
17
- * @property {Number} value 输入框当前值
18
- * @property {Number} min 最小值
19
- * @property {Number} max 最大值
20
- * @property {Number} step 每次点击改变的间隔大小
21
- * @property {Boolean} disabled = [true|false] 是否为禁用状态
22
- * @event {Function} change 输入框值改变时触发的事件,参数为输入框当前的 value
23
- */
24
-
25
- export default {
26
- name: 'cvNumberBox',
27
- emits: ['change', 'input', 'update:modelValue', 'blur', 'focus'],
28
- props: {
29
- value: {
30
- type: [Number, String],
31
- default: 1
32
- },
33
- modelValue: {
34
- type: [Number, String],
35
- default: 1
36
- },
37
- min: {
38
- type: Number,
39
- default: 0
40
- },
41
- max: {
42
- type: Number,
43
- default: 100
44
- },
45
- step: {
46
- type: Number,
47
- default: 1
48
- },
49
- disabled: {
50
- type: Boolean,
51
- default: false
52
- }
53
- },
54
- data() {
55
- return {
56
- inputValue: 0
57
- };
58
- },
59
- watch: {
60
- value(val) {
61
- this.inputValue = +val;
62
- },
63
- modelValue(val) {
64
- this.inputValue = +val;
65
- }
66
- },
67
- created() {
68
- if (this.value === 1) {
69
- this.inputValue = +this.modelValue;
70
- }
71
- if (this.modelValue === 1) {
72
- this.inputValue = +this.value;
73
- }
74
- },
75
- methods: {
76
- _calcValue(type) {
77
- if (this.disabled) {
78
- return;
79
- }
80
- const scale = this._getDecimalScale();
81
- let value = this.inputValue * scale;
82
- let step = this.step * scale;
83
- if (type === 'minus') {
84
- value -= step;
85
- if (value < this.min * scale) {
86
- return;
87
- }
88
- if (value > this.max * scale) {
89
- value = this.max * scale;
90
- }
91
- }
92
-
93
- if (type === 'plus') {
94
- value += step;
95
- if (value > this.max * scale) {
96
- return;
97
- }
98
- if (value < this.min * scale) {
99
- value = this.min * scale;
100
- }
101
- }
102
-
103
- this.inputValue = (value / scale).toFixed(String(scale).length - 1);
104
- this.$emit('change', +this.inputValue);
105
- // TODO vue2 兼容
106
- this.$emit('input', +this.inputValue);
107
- // TODO vue3 兼容
108
- this.$emit('update:modelValue', +this.inputValue);
109
- },
110
- _getDecimalScale() {
111
- let scale = 1;
112
- // 浮点型
113
- if (~~this.step !== this.step) {
114
- scale = Math.pow(10, String(this.step).split('.')[1].length);
115
- }
116
- return scale;
117
- },
118
- _onBlur(event) {
119
- this.$emit('blur', event);
120
- let value = event.detail.value;
121
- if (!value) {
122
- // this.inputValue = 0;
123
- return;
124
- }
125
- value = +value;
126
- if (value > this.max) {
127
- value = this.max;
128
- } else if (value < this.min) {
129
- value = this.min;
130
- }
131
- const scale = this._getDecimalScale();
132
- this.inputValue = value.toFixed(String(scale).length - 1);
133
- this.$emit('change', +this.inputValue);
134
- this.$emit('input', +this.inputValue);
135
- },
136
- _onFocus(event) {
137
- this.$emit('focus', event);
138
- }
139
- }
140
- };
141
- </script>
142
- <style scoped>
143
- /* #ifdef APP-NVUE */
144
- /* #endif */
145
- .uni-numbox {
146
- /* #ifndef APP-NVUE */
147
- display: flex;
148
- /* #endif */
149
- flex-direction: row;
150
- height: 35px;
151
- line-height: 35px;
152
- width: 120px;
153
- }
154
-
155
- .uni-cursor-point {
156
- /* #ifdef H5 */
157
- cursor: pointer;
158
- /* #endif */
159
- }
160
-
161
- .uni-numbox__value {
162
- background-color: #ffffff;
163
- width: 50px;
164
- height: 35px;
165
- text-align: center;
166
- font-size: 16px;
167
- border-width: 1rpx;
168
- border-style: solid;
169
- border-color: #e5e5e5;
170
- border-left-width: 0;
171
- border-right-width: 0;
172
- }
173
-
174
- .uni-numbox__minus {
175
- /* #ifndef APP-NVUE */
176
- display: flex;
177
- /* #endif */
178
- flex-direction: row;
179
- align-items: center;
180
- justify-content: center;
181
- width: 35px;
182
- height: 35px;
183
- font-size: 20px;
184
- color: #333;
185
- background-color: #f8f8f8;
186
- border-width: 1rpx;
187
- border-style: solid;
188
- border-color: #e5e5e5;
189
- border-top-left-radius: 3px;
190
- border-bottom-left-radius: 3px;
191
- border-right-width: 0;
192
- }
193
-
194
- .uni-numbox__plus {
195
- /* #ifndef APP-NVUE */
196
- display: flex;
197
- /* #endif */
198
- flex-direction: row;
199
- align-items: center;
200
- justify-content: center;
201
- width: 35px;
202
- height: 35px;
203
- border-width: 1rpx;
204
- border-style: solid;
205
- border-color: #e5e5e5;
206
- border-top-right-radius: 3px;
207
- border-bottom-right-radius: 3px;
208
- background-color: #f8f8f8;
209
- border-left-width: 0;
210
- }
211
-
212
- .uni-numbox--text {
213
- font-size: 20px;
214
- color: #333;
215
- }
216
-
217
- .uni-numbox--disabled {
218
- color: #c0c0c0;
219
- /* #ifdef H5 */
220
- cursor: not-allowed;
221
- /* #endif */
222
- }
223
- </style>
@@ -1,397 +0,0 @@
1
- <template>
2
- <view class="uni-pagination">
3
- <!-- #ifndef APP-NVUE -->
4
- <view class="uni-pagination__total is-phone-hide">共 {{ total }} 条</view>
5
- <!-- #endif -->
6
- <view
7
- class="uni-pagination__btn"
8
- :class="currentIndex === 1 ? 'uni-pagination--disabled' : 'uni-pagination--enabled'"
9
- :hover-class="currentIndex === 1 ? '' : 'uni-pagination--hover'"
10
- :hover-start-time="20"
11
- :hover-stay-time="70"
12
- @click="clickLeft"
13
- >
14
- <template v-if="showIcon === true || showIcon === 'true'">
15
- <cv-icon2 color="#666" size="16" type="arrowleft" />
16
- </template>
17
- <template v-else>
18
- <text class="uni-pagination__child-btn">{{ prevText }}</text>
19
- </template>
20
- </view>
21
- <view class="uni-pagination__num uni-pagination__num-flex-none">
22
- <view class="uni-pagination__num-current">
23
- <text class="uni-pagination__num-current-text is-pc-hide" style="color: #409eff">{{ currentIndex }}</text>
24
- <text class="uni-pagination__num-current-text is-pc-hide">/{{ maxPage || 0 }}</text>
25
- <!-- #ifndef APP-NVUE -->
26
- <view
27
- v-for="(item, index) in paper"
28
- :key="index"
29
- :class="{ 'page--active': item === currentIndex }"
30
- class="uni-pagination__num-tag tag--active is-phone-hide"
31
- @click.top="selectPage(item, index)"
32
- >
33
- <text>{{ item }}</text>
34
- </view>
35
- <!-- #endif -->
36
- </view>
37
- </view>
38
- <view
39
- class="uni-pagination__btn"
40
- :class="currentIndex >= maxPage ? 'uni-pagination--disabled' : 'uni-pagination--enabled'"
41
- :hover-class="currentIndex === maxPage ? '' : 'uni-pagination--hover'"
42
- :hover-start-time="20"
43
- :hover-stay-time="70"
44
- @click="clickRight"
45
- >
46
- <template v-if="showIcon === true || showIcon === 'true'">
47
- <cv-icon2 color="#666" size="16" type="arrowright" />
48
- </template>
49
- <template v-else>
50
- <text class="uni-pagination__child-btn">{{ nextText }}</text>
51
- </template>
52
- </view>
53
- </view>
54
- </template>
55
-
56
- <script>
57
- /**
58
- * Pagination 分页器
59
- * @description 分页器组件,用于展示页码、请求数据等
60
- * @tutorial https://ext.dcloud.net.cn/plugin?id=32
61
- * @property {String} prevText 左侧按钮文字
62
- * @property {String} nextText 右侧按钮文字
63
- * @property {Number} current 当前页
64
- * @property {Number} total 数据总量
65
- * @property {Number} pageSize 每页数据量
66
- * @property {Number} showIcon = [true|false] 是否以 icon 形式展示按钮
67
- * @event {Function} change 点击页码按钮时触发 ,e={type,current} current为当前页,type值为:next/prev,表示点击的是上一页还是下一个
68
- */
69
-
70
- export default {
71
- name: 'UniPagination',
72
- emits: ['update:modelValue', 'input', 'change'],
73
- props: {
74
- value: {
75
- type: [Number, String],
76
- default: 1
77
- },
78
- modelValue: {
79
- type: [Number, String],
80
- default: 1
81
- },
82
- prevText: {
83
- type: String,
84
- default: '上一页'
85
- },
86
- nextText: {
87
- type: String,
88
- default: '下一页'
89
- },
90
- current: {
91
- type: [Number, String],
92
- default: 1
93
- },
94
- total: {
95
- // 数据总量
96
- type: [Number, String],
97
- default: 0
98
- },
99
- pageSize: {
100
- // 每页数据量
101
- type: [Number, String],
102
- default: 10
103
- },
104
- showIcon: {
105
- // 是否以 icon 形式展示按钮
106
- type: [Boolean, String],
107
- default: false
108
- },
109
- pagerCount: {
110
- type: Number,
111
- default: 7
112
- }
113
- },
114
- data() {
115
- return {
116
- currentIndex: 1,
117
- paperData: []
118
- };
119
- },
120
- computed: {
121
- maxPage() {
122
- let maxPage = 1;
123
- let total = Number(this.total);
124
- let pageSize = Number(this.pageSize);
125
- if (total && pageSize) {
126
- maxPage = Math.ceil(total / pageSize);
127
- }
128
- return maxPage;
129
- },
130
- paper() {
131
- const num = this.currentIndex;
132
- // TODO 最大页数
133
- const pagerCount = this.pagerCount;
134
- // const total = 181
135
- const total = this.total;
136
- const pageSize = this.pageSize;
137
- let totalArr = [];
138
- let showPagerArr = [];
139
- let pagerNum = Math.ceil(total / pageSize);
140
- for (let i = 0; i < pagerNum; i++) {
141
- totalArr.push(i + 1);
142
- }
143
- showPagerArr.push(1);
144
- const totalNum = totalArr[totalArr.length - (pagerCount + 1) / 2];
145
- totalArr.forEach((item, index) => {
146
- if ((pagerCount + 1) / 2 >= num) {
147
- if (item < pagerCount + 1 && item > 1) {
148
- showPagerArr.push(item);
149
- }
150
- } else if (num + 2 <= totalNum) {
151
- if (item > num - (pagerCount + 1) / 2 && item < num + (pagerCount + 1) / 2) {
152
- showPagerArr.push(item);
153
- }
154
- } else {
155
- if ((item > num - (pagerCount + 1) / 2 || pagerNum - pagerCount < item) && item < totalArr[totalArr.length - 1]) {
156
- showPagerArr.push(item);
157
- }
158
- }
159
- });
160
- if (pagerNum > pagerCount) {
161
- if ((pagerCount + 1) / 2 >= num) {
162
- showPagerArr[showPagerArr.length - 1] = '...';
163
- } else if (num + 2 <= totalNum) {
164
- showPagerArr[1] = '...';
165
- showPagerArr[showPagerArr.length - 1] = '...';
166
- } else {
167
- showPagerArr[1] = '...';
168
- }
169
- showPagerArr.push(totalArr[totalArr.length - 1]);
170
- } else {
171
- if ((pagerCount + 1) / 2 >= num) {
172
- } else if (num + 2 <= totalNum) {
173
- } else {
174
- showPagerArr.shift();
175
- showPagerArr.push(totalArr[totalArr.length - 1]);
176
- }
177
- }
178
-
179
- return showPagerArr;
180
- }
181
- },
182
- watch: {
183
- current(val) {
184
- this.currentIndex = val;
185
- },
186
- value(val) {
187
- if (val < 1) {
188
- this.currentIndex = 1;
189
- } else {
190
- this.currentIndex = val;
191
- }
192
- },
193
- modelValue(val) {
194
- if (val < 1) {
195
- this.currentIndex = 1;
196
- } else {
197
- this.currentIndex = val;
198
- }
199
- }
200
- },
201
- created() {
202
- this.currentIndex = +this.value;
203
- },
204
- methods: {
205
- // 选择标签
206
- selectPage(e, index) {
207
- if (parseInt(e)) {
208
- this.currentIndex = e;
209
- this.change('current');
210
- } else {
211
- let pagerNum = Math.ceil(this.total / this.pageSize);
212
- // let pagerNum = Math.ceil(181 / this.pageSize)
213
- // 上一页
214
- if (index <= 1) {
215
- if (this.currentIndex - 5 > 1) {
216
- this.currentIndex -= 5;
217
- } else {
218
- this.currentIndex = 1;
219
- }
220
- return;
221
- }
222
- // 下一页
223
- if (index >= 6) {
224
- if (this.currentIndex + 5 > pagerNum) {
225
- this.currentIndex = pagerNum;
226
- } else {
227
- this.currentIndex += 5;
228
- }
229
- return;
230
- }
231
- }
232
- },
233
- clickLeft() {
234
- if (Number(this.currentIndex) === 1) {
235
- return;
236
- }
237
- this.currentIndex -= 1;
238
- this.change('prev');
239
- },
240
- clickRight() {
241
- if (Number(this.currentIndex) >= this.maxPage) {
242
- return;
243
- }
244
- this.currentIndex += 1;
245
- this.change('next');
246
- },
247
- change(e) {
248
- this.$emit('input', this.currentIndex);
249
- this.$emit('update:modelValue', this.currentIndex);
250
- this.$emit('change', {
251
- type: e,
252
- current: this.currentIndex
253
- });
254
- }
255
- }
256
- };
257
- </script>
258
-
259
- <style scoped>
260
- .uni-pagination {
261
- /* #ifndef APP-NVUE */
262
- display: flex;
263
- /* #endif */
264
- position: relative;
265
- overflow: hidden;
266
- flex-direction: row;
267
- justify-content: center;
268
- align-items: center;
269
- }
270
-
271
- .uni-pagination__total {
272
- font-size: 14px;
273
- color: #999;
274
- margin-right: 15px;
275
- }
276
-
277
- .uni-pagination__btn {
278
- /* #ifndef APP-NVUE */
279
- display: flex;
280
- cursor: pointer;
281
- /* #endif */
282
- padding: 0 8px;
283
- line-height: 30px;
284
- font-size: 14px;
285
- position: relative;
286
- background-color: #f4f4f5;
287
- flex-direction: row;
288
- justify-content: center;
289
- align-items: center;
290
- text-align: center;
291
- }
292
-
293
- .uni-pagination__child-btn {
294
- /* #ifndef APP-NVUE */
295
- display: flex;
296
- /* #endif */
297
- font-size: 14px;
298
- position: relative;
299
- flex-direction: row;
300
- justify-content: center;
301
- align-items: center;
302
- text-align: center;
303
- }
304
-
305
- .uni-pagination__num {
306
- /* #ifndef APP-NVUE */
307
- display: flex;
308
- /* #endif */
309
- flex: 1;
310
- flex-direction: row;
311
- justify-content: center;
312
- align-items: center;
313
- height: 30px;
314
- line-height: 30px;
315
- font-size: 14px;
316
- color: #333;
317
- margin: 0 5px;
318
- }
319
-
320
- .uni-pagination__num-tag {
321
- /* #ifdef H5 */
322
- cursor: pointer;
323
- min-width: 30px;
324
- /* #endif */
325
- margin: 0 5px;
326
- height: 30px;
327
- text-align: center;
328
- line-height: 30px;
329
- color: #666;
330
- }
331
-
332
- .uni-pagination__num-current {
333
- /* #ifndef APP-NVUE */
334
- display: flex;
335
- /* #endif */
336
- flex-direction: row;
337
- }
338
-
339
- .uni-pagination__num-current-text {
340
- font-size: 15px;
341
- }
342
-
343
- .uni-pagination--enabled {
344
- color: #333333;
345
- opacity: 1;
346
- }
347
-
348
- .uni-pagination--disabled {
349
- opacity: 0.5;
350
- /* #ifdef H5 */
351
- cursor: default;
352
- /* #endif */
353
- }
354
-
355
- .uni-pagination--hover {
356
- color: rgba(0, 0, 0, 0.6);
357
- background-color: #f1f1f1;
358
- }
359
-
360
- .tag--active:hover {
361
- color: #007aff;
362
- }
363
-
364
- .page--active {
365
- color: #fff;
366
- background-color: #007aff;
367
- }
368
-
369
- .page--active:hover {
370
- color: #fff;
371
- }
372
-
373
- /* #ifndef APP-NVUE */
374
- .is-pc-hide {
375
- display: block;
376
- }
377
-
378
- .is-phone-hide {
379
- display: none;
380
- }
381
-
382
- @media screen and (min-width: 450px) {
383
- .is-pc-hide {
384
- display: none;
385
- }
386
-
387
- .is-phone-hide {
388
- display: block;
389
- }
390
-
391
- .uni-pagination__num-flex-none {
392
- flex: none;
393
- }
394
- }
395
-
396
- /* #endif */
397
- </style>