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

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 (112) hide show
  1. package/package.json +1 -1
  2. package/ui-cv/cv-badge/{uni-badge.vue → cv-badge.vue} +2 -2
  3. package/ui-cv/cv-calendar/calendar.js +762 -345
  4. package/ui-cv/cv-calendar/cv-calendar-item.vue +198 -0
  5. package/ui-cv/cv-calendar/cv-calendar.vue +508 -0
  6. package/ui-cv/cv-card/cv-card.vue +427 -0
  7. package/ui-cv/cv-col/cv-col.vue +2965 -0
  8. package/ui-cv/cv-collapse/cv-collapse.vue +146 -0
  9. package/ui-cv/cv-collapse-item/cv-collapse-item.vue +395 -0
  10. package/ui-cv/cv-combox/cv-combox.vue +250 -0
  11. package/ui-cv/cv-countdown/cv-countdown.vue +245 -0
  12. package/ui-cv/cv-data-checkbox/cv-data-checkbox.vue +841 -0
  13. package/ui-cv/cv-data-indexed-list/cv-data-indexed-list-item.vue +154 -0
  14. package/ui-cv/cv-data-indexed-list/cv-data-indexed-list.vue +376 -0
  15. package/ui-cv/cv-data-picker/cv-data-picker.vue +486 -0
  16. package/ui-cv/cv-data-pickerview/{uni-data-picker.js → cv-data-picker.js} +0 -0
  17. package/ui-cv/cv-data-pickerview/cv-data-pickerview.vue +304 -0
  18. package/ui-cv/cv-dateformat/cv-dateformat.vue +86 -0
  19. package/ui-cv/cv-datetime-picker/calendar.vue +752 -738
  20. package/ui-cv/cv-datetime-picker/cv-datetime-picker.vue +958 -0
  21. package/ui-cv/cv-datetime-picker/time-picker.vue +900 -892
  22. package/ui-cv/cv-easyinput/cv-easyinput.vue +514 -0
  23. package/ui-cv/cv-fab/cv-fab.vue +465 -0
  24. package/ui-cv/cv-fab/{uni-fab.vue.bak → cv-fab.vue.bak} +2 -2
  25. package/ui-cv/cv-fav/cv-fav.vue +150 -0
  26. package/ui-cv/cv-file-picker/cv-file-picker.vue +619 -0
  27. package/ui-cv/cv-form-item/cv-form-item.vue +1 -1
  28. package/ui-cv/cv-goods-nav/{uni-goods-nav.vue → cv-goods-nav.vue} +1 -1
  29. package/ui-cv/{cv-icons2/cv-icons2.vue → cv-icon2/cv-icon2.vue} +3 -3
  30. package/ui-cv/{cv-icons2 → cv-icon2}/icons.js +0 -0
  31. package/ui-cv/{cv-icons2 → cv-icon2}/uni.ttf +0 -0
  32. package/ui-cv/cv-indexed-list/cv-indexed-list-item.vue +154 -0
  33. package/ui-cv/cv-indexed-list/cv-indexed-list.vue +371 -0
  34. package/ui-cv/cv-input-password/cv-input-password.vue +2 -2
  35. package/ui-cv/{cv-link/uni-link.vue → cv-link2/cv-link2.vue} +1 -1
  36. package/ui-cv/cv-list/cv-list.vue +107 -0
  37. package/ui-cv/cv-list/cv-refresh.vue +65 -0
  38. package/ui-cv/cv-list-ad/cv-list-ad.vue +113 -0
  39. package/ui-cv/cv-list-chat/{uni-list-chat.scss → cv-list-chat.scss} +0 -0
  40. package/ui-cv/cv-list-chat/{uni-list-chat.vue → cv-list-chat.vue} +0 -0
  41. package/ui-cv/cv-list-item/cv-list-item.vue +449 -0
  42. package/ui-cv/cv-nav-bar/cv-nav-bar.vue +256 -0
  43. package/ui-cv/cv-nav-bar/{uni-status-bar.vue → cv-status-bar.vue} +0 -0
  44. package/ui-cv/cv-notice-bar/cv-notice-bar.vue +453 -0
  45. package/ui-cv/cv-number-box/cv-number-box.vue +223 -0
  46. package/ui-cv/cv-pagination/cv-pagination.vue +397 -0
  47. package/ui-cv/cv-popup/cv-popup.vue +429 -0
  48. package/ui-cv/cv-popup-dialog/{uni-popup-dialog.vue → cv-popup-dialog.vue} +0 -0
  49. package/ui-cv/cv-popup-message/cv-popup-message.vue +143 -0
  50. package/ui-cv/cv-popup-share/{uni-popup-share.vue → cv-popup-share.vue} +0 -0
  51. package/ui-cv/cv-row/{uni-row.vue → cv-row.vue} +1 -1
  52. package/ui-cv/cv-search-bar/cv-search-bar.vue +280 -0
  53. package/ui-cv/cv-section/{uni-section.vue → cv-section.vue} +0 -0
  54. package/ui-cv/cv-segmented-control/{uni-segmented-control.vue → cv-segmented-control.vue} +0 -0
  55. package/ui-cv/cv-status-bar/{uni-status-bar.vue → cv-status-bar.vue} +0 -0
  56. package/ui-cv/cv-steps/cv-steps.vue +293 -0
  57. package/ui-cv/cv-swipe-action/{uni-swipe-action.vue → cv-swipe-action.vue} +0 -0
  58. package/ui-cv/cv-swipe-action-item/{uni-swipe-action-item.vue → cv-swipe-action-item.vue} +0 -0
  59. package/ui-cv/cv-swiper-dot/cv-swiper-dot.vue +255 -0
  60. package/ui-cv/cv-table/cv-table.vue +460 -0
  61. package/ui-cv/cv-tag/cv-tag.vue +276 -0
  62. package/ui-cv/cv-tbody/cv-tbody.vue +28 -0
  63. package/ui-cv/cv-td/cv-td.vue +93 -0
  64. package/ui-cv/cv-test/{uni-test.vue → cv-test.vue} +0 -0
  65. package/ui-cv/cv-th/cv-th.vue +270 -0
  66. package/ui-cv/cv-thead/cv-thead.vue +114 -0
  67. package/ui-cv/cv-title/cv-title.vue +168 -0
  68. package/ui-cv/cv-tr/cv-tr.vue +166 -0
  69. package/ui-cv/cv-transition/cv-transition.vue +279 -0
  70. package/ui-cv/cv-calendar/uni-calendar-item.vue +0 -171
  71. package/ui-cv/cv-calendar/uni-calendar.vue +0 -504
  72. package/ui-cv/cv-card/uni-card.vue +0 -420
  73. package/ui-cv/cv-col/uni-col.vue +0 -2968
  74. package/ui-cv/cv-collapse/uni-collapse.vue +0 -146
  75. package/ui-cv/cv-collapse-item/uni-collapse-item.vue +0 -378
  76. package/ui-cv/cv-combox/uni-combox.vue +0 -237
  77. package/ui-cv/cv-countdown/uni-countdown.vue +0 -234
  78. package/ui-cv/cv-data-checkbox/uni-data-checkbox.vue +0 -792
  79. package/ui-cv/cv-data-indexed-list/uni-data-indexed-list-item.vue +0 -142
  80. package/ui-cv/cv-data-indexed-list/uni-data-indexed-list.vue +0 -364
  81. package/ui-cv/cv-data-picker/uni-data-picker.vue +0 -468
  82. package/ui-cv/cv-data-pickerview/uni-data-pickerview.vue +0 -298
  83. package/ui-cv/cv-dateformat/uni-dateformat.vue +0 -88
  84. package/ui-cv/cv-datetime-picker/uni-datetime-picker.vue +0 -874
  85. package/ui-cv/cv-easyinput/uni-easyinput.vue +0 -438
  86. package/ui-cv/cv-fab/uni-fab.vue +0 -443
  87. package/ui-cv/cv-fav/uni-fav.vue +0 -136
  88. package/ui-cv/cv-file-picker/uni-file-picker.vue +0 -614
  89. package/ui-cv/cv-indexed-list/uni-indexed-list-item.vue +0 -142
  90. package/ui-cv/cv-indexed-list/uni-indexed-list.vue +0 -357
  91. package/ui-cv/cv-list/uni-list.vue +0 -107
  92. package/ui-cv/cv-list/uni-refresh.vue +0 -65
  93. package/ui-cv/cv-list-ad/uni-list-ad.vue +0 -106
  94. package/ui-cv/cv-list-item/uni-list-item.vue +0 -428
  95. package/ui-cv/cv-nav-bar/uni-nav-bar.vue +0 -244
  96. package/ui-cv/cv-notice-bar/uni-notice-bar.vue +0 -394
  97. package/ui-cv/cv-number-box/uni-number-box.vue +0 -224
  98. package/ui-cv/cv-pagination/uni-pagination.vue +0 -376
  99. package/ui-cv/cv-popup/uni-popup.vue +0 -412
  100. package/ui-cv/cv-popup-message/uni-popup-message.vue +0 -143
  101. package/ui-cv/cv-search-bar/uni-search-bar.vue +0 -262
  102. package/ui-cv/cv-steps/uni-steps.vue +0 -250
  103. package/ui-cv/cv-swiper-dot/uni-swiper-dot.vue +0 -205
  104. package/ui-cv/cv-table/uni-table.vue +0 -455
  105. package/ui-cv/cv-tag/uni-tag.vue +0 -283
  106. package/ui-cv/cv-tbody/uni-tbody.vue +0 -30
  107. package/ui-cv/cv-td/uni-td.vue +0 -88
  108. package/ui-cv/cv-th/uni-th.vue +0 -259
  109. package/ui-cv/cv-thead/uni-thead.vue +0 -114
  110. package/ui-cv/cv-title/uni-title.vue +0 -171
  111. package/ui-cv/cv-tr/uni-tr.vue +0 -156
  112. package/ui-cv/cv-transition/uni-transition.vue +0 -287
@@ -0,0 +1,223 @@
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>
@@ -0,0 +1,397 @@
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>