@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,255 +0,0 @@
1
- <template>
2
- <view class="uni-swiper__warp">
3
- <slot />
4
- <view v-if="mode === 'default'" :style="{ bottom: dots.bottom + 'px' }" class="uni-swiper__dots-box" key="default">
5
- <view
6
- v-for="(item, index) in info"
7
- @click="clickItem(index)"
8
- :style="{
9
- width: (index === current ? dots.width * 2 : dots.width) + 'px',
10
- height: dots.width / 3 + 'px',
11
- 'background-color': index !== current ? dots.backgroundColor : dots.selectedBackgroundColor,
12
- 'border-radius': '0px'
13
- }"
14
- :key="index"
15
- class="uni-swiper__dots-item uni-swiper__dots-bar"
16
- />
17
- </view>
18
- <view v-if="mode === 'dot'" :style="{ bottom: dots.bottom + 'px' }" class="uni-swiper__dots-box" key="dot">
19
- <view
20
- v-for="(item, index) in info"
21
- @click="clickItem(index)"
22
- :style="{
23
- width: dots.width + 'px',
24
- height: dots.height + 'px',
25
- 'background-color': index !== current ? dots.backgroundColor : dots.selectedBackgroundColor,
26
- border: index !== current ? dots.border : dots.selectedBorder
27
- }"
28
- :key="index"
29
- class="uni-swiper__dots-item"
30
- />
31
- </view>
32
- <view v-if="mode === 'round'" :style="{ bottom: dots.bottom + 'px' }" class="uni-swiper__dots-box" key="round">
33
- <view
34
- v-for="(item, index) in info"
35
- @click="clickItem(index)"
36
- :class="[index === current && 'uni-swiper__dots-long']"
37
- :style="{
38
- width: (index === current ? dots.width * 3 : dots.width) + 'px',
39
- height: dots.height + 'px',
40
- 'background-color': index !== current ? dots.backgroundColor : dots.selectedBackgroundColor,
41
- border: index !== current ? dots.border : dots.selectedBorder
42
- }"
43
- :key="index"
44
- class="uni-swiper__dots-item"
45
- />
46
- </view>
47
- <view
48
- v-if="mode === 'nav'"
49
- key="nav"
50
- :style="{ 'background-color': dotsStyles.backgroundColor, bottom: '0' }"
51
- class="uni-swiper__dots-box uni-swiper__dots-nav"
52
- >
53
- <text :style="{ color: dotsStyles.color }" class="uni-swiper__dots-nav-item">
54
- {{ current + 1 + '/' + info.length + ' ' + info[current][field] }}
55
- </text>
56
- </view>
57
- <view v-if="mode === 'indexes'" key="indexes" :style="{ bottom: dots.bottom + 'px' }" class="uni-swiper__dots-box">
58
- <view
59
- v-for="(item, index) in info"
60
- @click="clickItem(index)"
61
- :style="{
62
- width: dots.width + 'px',
63
- height: dots.height + 'px',
64
- color: index === current ? dots.selectedColor : dots.color,
65
- 'background-color': index !== current ? dots.backgroundColor : dots.selectedBackgroundColor,
66
- border: index !== current ? dots.border : dots.selectedBorder
67
- }"
68
- :key="index"
69
- class="uni-swiper__dots-item uni-swiper__dots-indexes"
70
- >
71
- <text class="uni-swiper__dots-indexes-text">{{ index + 1 }}</text>
72
- </view>
73
- </view>
74
- </view>
75
- </template>
76
-
77
- <script>
78
- /**
79
- * SwiperDod 轮播图指示点
80
- * @description 自定义轮播图指示点
81
- * @tutorial https://ext.dcloud.net.cn/plugin?id=284
82
- * @property {Number} current 当前指示点索引,必须是通过 `swiper` 的 `change` 事件获取到的 `e.detail.current`
83
- * @property {String} mode = [default|round|nav|indexes] 指示点的类型
84
- * @value defualt 默认指示点
85
- * @value round 圆形指示点
86
- * @value nav 条形指示点
87
- * @value indexes 索引指示点
88
- * @property {String} field mode 为 nav 时,显示的内容字段(mode = nav 时必填)
89
- * @property {String} info 轮播图的数据,通过数组长度决定指示点个数
90
- * @property {Object} dotsStyles 指示点样式
91
- * @event {Function} clickItem 组件触发点击事件时触发,e={currentIndex}
92
- */
93
-
94
- export default {
95
- name: 'UniSwiperDot',
96
- emits: ['clickItem'],
97
- props: {
98
- info: {
99
- type: Array,
100
- default() {
101
- return [];
102
- }
103
- },
104
- current: {
105
- type: Number,
106
- default: 0
107
- },
108
- dotsStyles: {
109
- type: Object,
110
- default() {
111
- return {};
112
- }
113
- },
114
- // 类型 :default(默认) indexes long nav
115
- mode: {
116
- type: String,
117
- default: 'default'
118
- },
119
- // 只在 nav 模式下生效,变量名称
120
- field: {
121
- type: String,
122
- default: ''
123
- }
124
- },
125
- data() {
126
- return {
127
- dots: {
128
- width: 8,
129
- height: 8,
130
- bottom: 10,
131
- color: '#fff',
132
- backgroundColor: 'rgba(0, 0, 0, .3)',
133
- border: '1px rgba(0, 0, 0, .3) solid',
134
- selectedBackgroundColor: '#333',
135
- selectedBorder: '1px rgba(0, 0, 0, .9) solid'
136
- }
137
- };
138
- },
139
- watch: {
140
- dotsStyles(newVal) {
141
- this.dots = Object.assign(this.dots, this.dotsStyles);
142
- },
143
- mode(newVal) {
144
- if (newVal === 'indexes') {
145
- this.dots.width = 20;
146
- this.dots.height = 20;
147
- } else {
148
- this.dots.width = 8;
149
- this.dots.height = 8;
150
- }
151
- }
152
- },
153
- created() {
154
- if (this.mode === 'indexes') {
155
- this.dots.width = 20;
156
- this.dots.height = 20;
157
- }
158
- this.dots = Object.assign(this.dots, this.dotsStyles);
159
- },
160
- methods: {
161
- clickItem(index) {
162
- this.$emit('clickItem', index);
163
- }
164
- }
165
- };
166
- </script>
167
-
168
- <style scoped>
169
- .uni-swiper__warp {
170
- /* #ifndef APP-NVUE */
171
- display: flex;
172
- /* #endif */
173
- flex: 1;
174
- flex-direction: column;
175
- position: relative;
176
- overflow: hidden;
177
- }
178
-
179
- .uni-swiper__dots-box {
180
- position: absolute;
181
- bottom: 10px;
182
- left: 0;
183
- right: 0;
184
- /* #ifndef APP-NVUE */
185
- display: flex;
186
- /* #endif */
187
- flex: 1;
188
- flex-direction: row;
189
- justify-content: center;
190
- align-items: center;
191
- }
192
-
193
- .uni-swiper__dots-item {
194
- width: 8px;
195
- border-radius: 100px;
196
- margin-left: 6px;
197
- background-color: rgba(0, 0, 0, 0.4);
198
- /* #ifndef APP-NVUE */
199
- cursor: pointer;
200
- /* #endif */
201
- /* #ifdef H5 */
202
- /* #endif */
203
- }
204
-
205
- .uni-swiper__dots-item:first-child {
206
- margin: 0;
207
- }
208
-
209
- .uni-swiper__dots-default {
210
- border-radius: 100px;
211
- }
212
-
213
- .uni-swiper__dots-long {
214
- border-radius: 50px;
215
- }
216
-
217
- .uni-swiper__dots-bar {
218
- border-radius: 50px;
219
- }
220
-
221
- .uni-swiper__dots-nav {
222
- bottom: 0px;
223
- height: 40px;
224
- /* #ifndef APP-NVUE */
225
- display: flex;
226
- /* #endif */
227
- flex: 1;
228
- flex-direction: row;
229
- justify-content: flex-start;
230
- align-items: center;
231
- background-color: rgba(0, 0, 0, 0.2);
232
- }
233
-
234
- .uni-swiper__dots-nav-item {
235
- /* overflow: hidden;
236
- text-overflow: ellipsis;
237
- white-space: nowrap; */
238
- font-size: 14px;
239
- color: #fff;
240
- margin: 0 15px;
241
- }
242
-
243
- .uni-swiper__dots-indexes {
244
- /* #ifndef APP-NVUE */
245
- display: flex;
246
- /* #endif */
247
- justify-content: center;
248
- align-items: center;
249
- }
250
-
251
- .uni-swiper__dots-indexes-text {
252
- color: #fff;
253
- font-size: 12px;
254
- }
255
- </style>
@@ -1,460 +0,0 @@
1
- <template>
2
- <view class="uni-table-scroll" :class="{ 'table--border': border, 'border-none': !noData }">
3
- <!-- #ifdef H5 -->
4
- <table
5
- class="uni-table"
6
- border="0"
7
- cellpadding="0"
8
- cellspacing="0"
9
- :class="{ 'table--stripe': stripe }"
10
- :style="{ 'min-width': minWidth + 'px' }"
11
- >
12
- <slot></slot>
13
- <view v-if="noData" class="uni-table-loading">
14
- <view class="uni-table-text" :class="{ 'empty-border': border }">{{ emptyText }}</view>
15
- </view>
16
- <view v-if="loading" class="uni-table-mask" :class="{ 'empty-border': border }">
17
- <div class="uni-table--loader"></div>
18
- </view>
19
- </table>
20
- <!-- #endif -->
21
- <!-- #ifndef H5 -->
22
- <view class="uni-table" :style="{ 'min-width': minWidth + 'px' }" :class="{ 'table--stripe': stripe }">
23
- <slot></slot>
24
- <view v-if="noData" class="uni-table-loading">
25
- <view class="uni-table-text" :class="{ 'empty-border': border }">{{ emptyText }}</view>
26
- </view>
27
- <view v-if="loading" class="uni-table-mask" :class="{ 'empty-border': border }">
28
- <div class="uni-table--loader"></div>
29
- </view>
30
- </view>
31
- <!-- #endif -->
32
- </view>
33
- </template>
34
-
35
- <script>
36
- /**
37
- * Table 表格
38
- * @description 用于展示多条结构类似的数据
39
- * @tutorial https://ext.dcloud.net.cn/plugin?id=3270
40
- * @property {Boolean} border 是否带有纵向边框
41
- * @property {Boolean} stripe 是否显示斑马线
42
- * @property {Boolean} type 是否开启多选
43
- * @property {String} emptyText 空数据时显示的文本内容
44
- * @property {Boolean} loading 显示加载中
45
- * @event {Function} selection-change 开启多选时,当选择项发生变化时会触发该事件
46
- */
47
- export default {
48
- name: 'cvTable',
49
- options: {
50
- virtualHost: true
51
- },
52
- emits: ['selection-change'],
53
- props: {
54
- data: {
55
- type: Array,
56
- default() {
57
- return [];
58
- }
59
- },
60
- // 是否有竖线
61
- border: {
62
- type: Boolean,
63
- default: false
64
- },
65
- // 是否显示斑马线
66
- stripe: {
67
- type: Boolean,
68
- default: false
69
- },
70
- // 多选
71
- type: {
72
- type: String,
73
- default: ''
74
- },
75
- // 没有更多数据
76
- emptyText: {
77
- type: String,
78
- default: '没有更多数据'
79
- },
80
- loading: {
81
- type: Boolean,
82
- default: false
83
- },
84
- rowKey: {
85
- type: String,
86
- default: ''
87
- }
88
- },
89
- data() {
90
- return {
91
- noData: true,
92
- minWidth: 0,
93
- multiTableHeads: []
94
- };
95
- },
96
- watch: {
97
- loading(val) {},
98
- data(newVal) {
99
- let theadChildren = this.theadChildren;
100
- let rowspan = 1;
101
- if (this.theadChildren) {
102
- rowspan = this.theadChildren.rowspan;
103
- }
104
-
105
- // this.trChildren.length - rowspan
106
- this.noData = false;
107
- // this.noData = newVal.length === 0
108
- }
109
- },
110
- created() {
111
- // 定义tr的实例数组
112
- this.trChildren = [];
113
- this.thChildren = [];
114
- this.theadChildren = null;
115
- this.backData = [];
116
- this.backIndexData = [];
117
- },
118
-
119
- methods: {
120
- isNodata() {
121
- let theadChildren = this.theadChildren;
122
- let rowspan = 1;
123
- if (this.theadChildren) {
124
- rowspan = this.theadChildren.rowspan;
125
- }
126
- this.noData = this.trChildren.length - rowspan <= 0;
127
- },
128
- /**
129
- * 选中所有
130
- */
131
- selectionAll() {
132
- let startIndex = 1;
133
- let theadChildren = this.theadChildren;
134
- if (!this.theadChildren) {
135
- theadChildren = this.trChildren[0];
136
- } else {
137
- startIndex = theadChildren.rowspan - 1;
138
- }
139
- let isHaveData = this.data && this.data.length.length > 0;
140
- theadChildren.checked = true;
141
- theadChildren.indeterminate = false;
142
- this.trChildren.forEach((item, index) => {
143
- if (!item.disabled) {
144
- item.checked = true;
145
- if (isHaveData && item.keyValue) {
146
- const row = this.data.find((v) => v[this.rowKey] === item.keyValue);
147
- if (!this.backData.find((v) => v[this.rowKey] === row[this.rowKey])) {
148
- this.backData.push(row);
149
- }
150
- }
151
- if (index > startIndex - 1 && this.backIndexData.indexOf(index - startIndex) === -1) {
152
- this.backIndexData.push(index - startIndex);
153
- }
154
- }
155
- });
156
- // this.backData = JSON.parse(JSON.stringify(this.data))
157
- this.$emit('selection-change', {
158
- detail: {
159
- value: this.backData,
160
- index: this.backIndexData
161
- }
162
- });
163
- },
164
- /**
165
- * 用于多选表格,切换某一行的选中状态,如果使用了第二个参数,则是设置这一行选中与否(selected 为 true 则选中)
166
- */
167
- toggleRowSelection(row, selected) {
168
- // if (!this.theadChildren) return
169
- row = [].concat(row);
170
-
171
- this.trChildren.forEach((item, index) => {
172
- // if (item.keyValue) {
173
-
174
- const select = row.findIndex((v) => {
175
- //
176
- if (typeof v === 'number') {
177
- return v === index - 1;
178
- } else {
179
- return v[this.rowKey] === item.keyValue;
180
- }
181
- });
182
- let ischeck = item.checked;
183
- if (select !== -1) {
184
- if (typeof selected === 'boolean') {
185
- item.checked = selected;
186
- } else {
187
- item.checked = !item.checked;
188
- }
189
- if (ischeck !== item.checked) {
190
- this.check(item.rowData || item, item.checked, item.rowData ? item.keyValue : null, true);
191
- }
192
- }
193
- // }
194
- });
195
- this.$emit('selection-change', {
196
- detail: {
197
- value: this.backData,
198
- index: this.backIndexData
199
- }
200
- });
201
- },
202
-
203
- /**
204
- * 用于多选表格,清空用户的选择
205
- */
206
- clearSelection() {
207
- let theadChildren = this.theadChildren;
208
- if (!this.theadChildren) {
209
- theadChildren = this.trChildren[0];
210
- }
211
- // if (!this.theadChildren) return
212
- theadChildren.checked = false;
213
- theadChildren.indeterminate = false;
214
- this.trChildren.forEach((item) => {
215
- // if (item.keyValue) {
216
- item.checked = false;
217
- // }
218
- });
219
- this.backData = [];
220
- this.backIndexData = [];
221
- this.$emit('selection-change', {
222
- detail: {
223
- value: [],
224
- index: []
225
- }
226
- });
227
- },
228
- /**
229
- * 用于多选表格,切换所有行的选中状态
230
- */
231
- toggleAllSelection() {
232
- let list = [];
233
- let startIndex = 1;
234
- let theadChildren = this.theadChildren;
235
- if (!this.theadChildren) {
236
- theadChildren = this.trChildren[0];
237
- } else {
238
- startIndex = theadChildren.rowspan - 1;
239
- }
240
- this.trChildren.forEach((item, index) => {
241
- if (!item.disabled) {
242
- if (index > startIndex - 1) {
243
- list.push(index - startIndex);
244
- }
245
- }
246
- });
247
- this.toggleRowSelection(list);
248
- },
249
-
250
- /**
251
- * 选中\取消选中
252
- * @param {Object} child
253
- * @param {Object} check
254
- * @param {Object} rowValue
255
- */
256
- check(child, check, keyValue, emit) {
257
- let theadChildren = this.theadChildren;
258
- if (!this.theadChildren) {
259
- theadChildren = this.trChildren[0];
260
- }
261
-
262
- let childDomIndex = this.trChildren.findIndex((item, index) => child === item);
263
- if (childDomIndex < 0) {
264
- childDomIndex = this.data.findIndex((v) => v[this.rowKey] === keyValue) + 1;
265
- }
266
- const dataLen = this.trChildren.filter((v) => !v.disabled && v.keyValue).length;
267
- if (childDomIndex === 0) {
268
- check ? this.selectionAll() : this.clearSelection();
269
- return;
270
- }
271
-
272
- if (check) {
273
- if (keyValue) {
274
- this.backData.push(child);
275
- }
276
- this.backIndexData.push(childDomIndex - 1);
277
- } else {
278
- const index = this.backData.findIndex((v) => v[this.rowKey] === keyValue);
279
- const idx = this.backIndexData.findIndex((item) => item === childDomIndex - 1);
280
- if (keyValue) {
281
- this.backData.splice(index, 1);
282
- }
283
- this.backIndexData.splice(idx, 1);
284
- }
285
-
286
- const domCheckAll = this.trChildren.find((item, index) => index > 0 && !item.checked && !item.disabled);
287
- if (!domCheckAll) {
288
- theadChildren.indeterminate = false;
289
- theadChildren.checked = true;
290
- } else {
291
- theadChildren.indeterminate = true;
292
- theadChildren.checked = false;
293
- }
294
-
295
- if (this.backIndexData.length === 0) {
296
- theadChildren.indeterminate = false;
297
- }
298
-
299
- if (!emit) {
300
- this.$emit('selection-change', {
301
- detail: {
302
- value: this.backData,
303
- index: this.backIndexData
304
- }
305
- });
306
- }
307
- }
308
- }
309
- };
310
- </script>
311
-
312
- <style scoped>
313
- @charset "UTF-8";
314
-
315
- .uni-table-scroll {
316
- width: 100%;
317
- /* #ifndef APP-NVUE */
318
- overflow-x: auto;
319
- /* #endif */
320
- }
321
-
322
- .uni-table {
323
- position: relative;
324
- width: 100%;
325
- border-radius: 5px;
326
- background-color: #fff;
327
- /* #ifndef APP-NVUE */
328
- box-sizing: border-box;
329
- display: table;
330
- overflow-x: auto;
331
- /* #endif */
332
- }
333
-
334
- .uni-table ::v-deep .uni-table-tr:nth-child(n + 2):hover {
335
- background-color: #f5f7fa;
336
- }
337
-
338
- .uni-table ::v-deep .uni-table-thead .uni-table-tr:hover {
339
- background-color: #fafafa;
340
- }
341
-
342
- .table--border {
343
- border: 1px #ebeef5 solid;
344
- border-right: none;
345
- }
346
-
347
- .border-none {
348
- /* #ifndef APP-NVUE */
349
- border-bottom: none;
350
- /* #endif */
351
- }
352
-
353
- .table--stripe {
354
- /* #ifndef APP-NVUE */
355
- /* #endif */
356
- }
357
-
358
- .table--stripe ::v-deep .uni-table-tr:nth-child(2n + 3) {
359
- background-color: #fafafa;
360
- }
361
-
362
- /* 表格加载、无数据样式 */
363
- .uni-table-loading {
364
- position: relative;
365
- /* #ifndef APP-NVUE */
366
- display: table-row;
367
- /* #endif */
368
- height: 50px;
369
- line-height: 50px;
370
- overflow: hidden;
371
- box-sizing: border-box;
372
- }
373
-
374
- .empty-border {
375
- border-right: 1px #ebeef5 solid;
376
- }
377
-
378
- .uni-table-text {
379
- position: absolute;
380
- right: 0;
381
- left: 0;
382
- text-align: center;
383
- font-size: 14px;
384
- color: #999;
385
- }
386
-
387
- .uni-table-mask {
388
- position: absolute;
389
- top: 0;
390
- bottom: 0;
391
- left: 0;
392
- right: 0;
393
- background-color: rgba(255, 255, 255, 0.8);
394
- z-index: 99;
395
- /* #ifndef APP-NVUE */
396
- display: flex;
397
- margin: auto;
398
- transition: all 0.5s;
399
- /* #endif */
400
- justify-content: center;
401
- align-items: center;
402
- }
403
-
404
- .uni-table--loader {
405
- width: 30px;
406
- height: 30px;
407
- border: 2px solid #aaa;
408
- border-radius: 50%;
409
- /* #ifndef APP-NVUE */
410
- animation: 2s uni-table--loader linear infinite;
411
- /* #endif */
412
- position: relative;
413
- }
414
-
415
- @keyframes uni-table--loader {
416
- 0% {
417
- transform: rotate(360deg);
418
- }
419
-
420
- 10% {
421
- border-left-color: transparent;
422
- }
423
-
424
- 20% {
425
- border-bottom-color: transparent;
426
- }
427
-
428
- 30% {
429
- border-right-color: transparent;
430
- }
431
-
432
- 40% {
433
- border-top-color: transparent;
434
- }
435
-
436
- 50% {
437
- transform: rotate(0deg);
438
- }
439
-
440
- 60% {
441
- border-top-color: transparent;
442
- }
443
-
444
- 70% {
445
- border-left-color: transparent;
446
- }
447
-
448
- 80% {
449
- border-bottom-color: transparent;
450
- }
451
-
452
- 90% {
453
- border-right-color: transparent;
454
- }
455
-
456
- 100% {
457
- transform: rotate(-360deg);
458
- }
459
- }
460
- </style>