@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
@@ -0,0 +1,283 @@
1
+ <template>
2
+ <text class="uni-tag" v-if="text" :class="classes" :style="customStyle" @click="onClick">
3
+ <slot />{{text}}
4
+ <slot name="right" />
5
+ </text>
6
+ </template>
7
+
8
+ <script>
9
+ /**
10
+ * Tag 标签
11
+ * @description 用于展示1个或多个文字标签,可点击切换选中、不选中的状态
12
+ * @tutorial https://ext.dcloud.net.cn/plugin?id=35
13
+ * @property {String} text 标签内容
14
+ * @property {String} size = [normal|small] 大小尺寸
15
+ * @value normal 正常
16
+ * @value small 小尺寸
17
+ * @property {String} type = [default|primary|success|warning|error|royal] 颜色类型
18
+ * @value default 灰色
19
+ * @value primary 蓝色
20
+ * @value success 绿色
21
+ * @value warning 黄色
22
+ * @value error 红色
23
+ * @value royal 紫色
24
+ * @property {Boolean} disabled = [true|false] 是否为禁用状态
25
+ * @property {Boolean} inverted = [true|false] 是否无需背景颜色(空心标签)
26
+ * @property {Boolean} circle = [true|false] 是否为圆角
27
+ * @event {Function} click 点击 Tag 触发事件
28
+ */
29
+
30
+ export default {
31
+ name: "UniTag",
32
+ emits: ['click'],
33
+ props: {
34
+ type: {
35
+ // 标签类型default、primary、success、warning、error、royal
36
+ type: String,
37
+ default: "default"
38
+ },
39
+ size: {
40
+ // 标签大小 normal, small
41
+ type: String,
42
+ default: "normal"
43
+ },
44
+ // 标签内容
45
+ text: {
46
+ type: String,
47
+ default: ""
48
+ },
49
+ disabled: {
50
+ // 是否为禁用状态
51
+ type: [Boolean, String],
52
+ default: false
53
+ },
54
+ inverted: {
55
+ // 是否为空心
56
+ type: [Boolean, String],
57
+ default: false
58
+ },
59
+ circle: {
60
+ // 是否为圆角样式
61
+ type: [Boolean, String],
62
+ default: false
63
+ },
64
+ mark: {
65
+ // 是否为标记样式
66
+ type: [Boolean, String],
67
+ default: false
68
+ },
69
+ customStyle: {
70
+ type: String,
71
+ default: ''
72
+ }
73
+ },
74
+ computed: {
75
+ classes() {
76
+ const {
77
+ type,
78
+ disabled,
79
+ inverted,
80
+ circle,
81
+ mark,
82
+ size,
83
+ isTrue
84
+ } = this
85
+ const classArr = [
86
+ 'uni-tag--' + type,
87
+ isTrue(disabled) ? 'uni-tag--disabled' : '',
88
+ isTrue(inverted) ? type + '-uni-tag--inverted' : '',
89
+ isTrue(circle) ? 'uni-tag--circle' : '',
90
+ isTrue(mark) ? 'uni-tag--mark' : '',
91
+ 'uni-tag--' + size,
92
+ type === 'default' ? 'uni-tag--default' : 'uni-tag-text',
93
+ isTrue(inverted) ? 'uni-tag-text--' + type : '',
94
+ size === 'small' ? 'uni-tag-text--small' : ''
95
+ ]
96
+ return classArr.join(' ')
97
+ }
98
+ },
99
+ methods: {
100
+ isTrue(value) {
101
+ return value === true || value === 'true'
102
+ },
103
+ onClick() {
104
+ if (this.isTrue(this.disabled)) return
105
+ this.$emit("click");
106
+ }
107
+ }
108
+ };
109
+ </script>
110
+
111
+ <style scoped>
112
+ .uni-tag {
113
+ /* #ifndef APP-NVUE */
114
+ display: inline-block;
115
+ /* #endif */
116
+ /* #ifdef APP-NVUE */
117
+ align-self: flex-start;
118
+ /* #endif */
119
+ padding: 0px 16px;
120
+ line-height: 30px;
121
+ color: #333;
122
+ border-radius: 3px;
123
+ background-color: #f8f8f8;
124
+ border-width: 1rpx;
125
+ border-style: solid;
126
+ border-color: #f8f8f8;
127
+ /* #ifdef H5 */
128
+ cursor: pointer;
129
+ /* #endif */
130
+ }
131
+
132
+ .uni-tag--circle {
133
+ border-radius: 15px;
134
+ }
135
+
136
+ .uni-tag--mark {
137
+ border-top-left-radius: 0;
138
+ border-bottom-left-radius: 0;
139
+ border-top-right-radius: 15px;
140
+ border-bottom-right-radius: 15px;
141
+ }
142
+
143
+ .uni-tag--disabled {
144
+ opacity: 0.5;
145
+ /* #ifdef H5 */
146
+ cursor: not-allowed;
147
+ /* #endif */
148
+ }
149
+
150
+ .uni-tag--small {
151
+ height: 20px;
152
+ padding: 0px 8px;
153
+ line-height: 20px;
154
+ font-size: 12px;
155
+ }
156
+
157
+ .uni-tag--default {
158
+ color: #333;
159
+ font-size: 14px;
160
+ }
161
+
162
+ .uni-tag--royal {
163
+ color: #333;
164
+ font-size: 14px;
165
+ }
166
+
167
+ .uni-tag-text--small {
168
+ font-size: 12px;
169
+ }
170
+
171
+ .uni-tag-text {
172
+ color: #fff;
173
+ font-size: 14px;
174
+ }
175
+
176
+ .uni-tag-text--primary {
177
+ color: #007aff;
178
+ }
179
+
180
+ .uni-tag-text--success {
181
+ color: #4cd964;
182
+ }
183
+
184
+ .uni-tag-text--warning {
185
+ color: #f0ad4e;
186
+ }
187
+
188
+ .uni-tag-text--error {
189
+ color: #dd524d;
190
+ }
191
+
192
+ .uni-tag-text--royal {
193
+ color: #4335d6;
194
+ }
195
+
196
+ .uni-tag--primary {
197
+ color: #fff;
198
+ background-color: #007aff;
199
+ border-width: 1rpx;
200
+ border-style: solid;
201
+ border-color: #007aff;
202
+ }
203
+
204
+ .primary-uni-tag--inverted {
205
+ color: #007aff;
206
+ background-color: #ffffff;
207
+ border-width: 1rpx;
208
+ border-style: solid;
209
+ border-color: #007aff;
210
+ }
211
+
212
+ .uni-tag--success {
213
+ color: #fff;
214
+ background-color: #4cd964;
215
+ border-width: 1rpx;
216
+ border-style: solid;
217
+ border-color: #4cd964;
218
+ }
219
+
220
+ .success-uni-tag--inverted {
221
+ color: #4cd964;
222
+ background-color: #ffffff;
223
+ border-width: 1rpx;
224
+ border-style: solid;
225
+ border-color: #4cd964;
226
+ }
227
+
228
+ .uni-tag--warning {
229
+ color: #fff;
230
+ background-color: #f0ad4e;
231
+ border-width: 1rpx;
232
+ border-style: solid;
233
+ border-color: #f0ad4e;
234
+ }
235
+
236
+ .warning-uni-tag--inverted {
237
+ color: #f0ad4e;
238
+ background-color: #ffffff;
239
+ border-width: 1rpx;
240
+ border-style: solid;
241
+ border-color: #f0ad4e;
242
+ }
243
+
244
+ .uni-tag--error {
245
+ color: #fff;
246
+ background-color: #dd524d;
247
+ border-width: 1rpx;
248
+ border-style: solid;
249
+ border-color: #dd524d;
250
+ }
251
+
252
+ .error-uni-tag--inverted {
253
+ color: #dd524d;
254
+ background-color: #ffffff;
255
+ border-width: 1rpx;
256
+ border-style: solid;
257
+ border-color: #dd524d;
258
+ }
259
+
260
+ .uni-tag--royal {
261
+ color: #fff;
262
+ background-color: #4335d6;
263
+ border-width: 1rpx;
264
+ border-style: solid;
265
+ border-color: #4335d6;
266
+ }
267
+
268
+ .royal-uni-tag--inverted {
269
+ color: #4335d6;
270
+ background-color: #ffffff;
271
+ border-width: 1rpx;
272
+ border-style: solid;
273
+ border-color: #4335d6;
274
+ }
275
+
276
+ .uni-tag--inverted {
277
+ color: #333;
278
+ background-color: #ffffff;
279
+ border-width: 1rpx;
280
+ border-style: solid;
281
+ border-color: #f8f8f8;
282
+ }
283
+ </style>
@@ -0,0 +1,30 @@
1
+ <template>
2
+ <!-- #ifdef H5 -->
3
+ <tbody>
4
+ <slot></slot>
5
+ </tbody>
6
+ <!-- #endif -->
7
+ <!-- #ifndef H5 -->
8
+ <view>
9
+ <slot></slot>
10
+ </view>
11
+ <!-- #endif -->
12
+ </template>
13
+
14
+ <script>
15
+ export default {
16
+ name: 'uniBody',
17
+ options: {
18
+ virtualHost: true
19
+ },
20
+ data() {
21
+ return {
22
+
23
+ }
24
+ },
25
+ created() {},
26
+ methods: {}
27
+ }
28
+ </script>
29
+
30
+ <style scoped></style>
@@ -0,0 +1,88 @@
1
+ <template>
2
+ <!-- #ifdef H5 -->
3
+ <td class="uni-table-td" :rowspan="rowspan" :colspan="colspan" :class="{'table--border':border}" :style="{width:width + 'px','text-align':align}">
4
+ <slot></slot>
5
+ </td>
6
+ <!-- #endif -->
7
+ <!-- #ifndef H5 -->
8
+ <!-- :class="{'table--border':border}" -->
9
+ <view class="uni-table-td" :class="{'table--border':border}" :style="{width:width + 'px','text-align':align}">
10
+ <slot></slot>
11
+ </view>
12
+ <!-- #endif -->
13
+
14
+ </template>
15
+
16
+ <script>
17
+ /**
18
+ * Td 单元格
19
+ * @description 表格中的标准单元格组件
20
+ * @tutorial https://ext.dcloud.net.cn/plugin?id=3270
21
+ * @property {Number} align = [left|center|right] 单元格对齐方式
22
+ */
23
+ export default {
24
+ name: 'uniTd',
25
+ options: {
26
+ virtualHost: true
27
+ },
28
+ props: {
29
+ width: {
30
+ type: [String, Number],
31
+ default: ''
32
+ },
33
+ align: {
34
+ type: String,
35
+ default: 'left'
36
+ },
37
+ rowspan: {
38
+ type: [Number, String],
39
+ default: 1
40
+ },
41
+ colspan: {
42
+ type: [Number, String],
43
+ default: 1
44
+ }
45
+ },
46
+ data() {
47
+ return {
48
+ border: false
49
+ };
50
+ },
51
+ created() {
52
+ this.root = this.getTable()
53
+ this.border = this.root.border
54
+ },
55
+ methods: {
56
+ /**
57
+ * 获取父元素实例
58
+ */
59
+ getTable() {
60
+ let parent = this.$parent;
61
+ let parentName = parent.$options.name;
62
+ while (parentName !== 'uniTable') {
63
+ parent = parent.$parent;
64
+ if (!parent) return false;
65
+ parentName = parent.$options.name;
66
+ }
67
+ return parent;
68
+ },
69
+ }
70
+ }
71
+ </script>
72
+
73
+ <style scoped>
74
+ .uni-table-td {
75
+ display: table-cell;
76
+ padding: 8px 10px;
77
+ font-size: 14px;
78
+ border-bottom: 1px #EBEEF5 solid;
79
+ font-weight: 400;
80
+ color: #606266;
81
+ line-height: 23px;
82
+ box-sizing: border-box;
83
+ }
84
+
85
+ .table--border {
86
+ border-right: 1px #EBEEF5 solid;
87
+ }
88
+ </style>
@@ -0,0 +1,259 @@
1
+ <template>
2
+ <!-- #ifdef H5 -->
3
+ <th :rowspan="rowspan" :colspan="colspan" class="uni-table-th" :class="{ 'table--border': border }" :style="{ width: width + 'px', 'text-align': align }">
4
+ <view class="uni-table-th-row">
5
+ <view class="uni-table-th-content" :style="{ 'justify-content': contentAlign }" @click="sort">
6
+ <slot></slot>
7
+ <view v-if="sortable" class="arrow-box">
8
+ <text class="arrow up" :class="{ active: ascending }" @click.stop="ascendingFn"></text>
9
+ <text class="arrow down" :class="{ active: descending }" @click.stop="descendingFn"></text>
10
+ </view>
11
+ </view>
12
+ <dropdown v-if="filterType || filterData.length" :filterData="filterData" :filterType="filterType" @change="ondropdown"></dropdown>
13
+ </view>
14
+ </th>
15
+ <!-- #endif -->
16
+ <!-- #ifndef H5 -->
17
+ <view class="uni-table-th" :class="{ 'table--border': border }" :style="{ width: width + 'px', 'text-align': align }">
18
+ <slot></slot>
19
+ </view>
20
+ <!-- #endif -->
21
+ </template>
22
+
23
+ <script>
24
+ import dropdown from './filter-dropdown.vue'
25
+ /**
26
+ * Th 表头
27
+ * @description 表格内的表头单元格组件
28
+ * @tutorial https://ext.dcloud.net.cn/plugin?id=3270
29
+ * @property {Number} width 单元格宽度
30
+ * @property {Boolean} sortable 是否启用排序
31
+ * @property {Number} align = [left|center|right] 单元格对齐方式
32
+ * @value left 单元格文字左侧对齐
33
+ * @value center 单元格文字居中
34
+ * @value right 单元格文字右侧对齐
35
+ * @property {Array} filterData 筛选数据
36
+ * @property {String} filterType [search|select] 筛选类型
37
+ * @value search 关键字搜素
38
+ * @value select 条件选择
39
+ * @event {Function} sort-change 排序触发事件
40
+ */
41
+ export default {
42
+ name: 'uniTh',
43
+ options: {
44
+ virtualHost: true
45
+ },
46
+ components: {
47
+ dropdown
48
+ },
49
+ emits: ['sort-change', 'filter-change'],
50
+ props: {
51
+ width: {
52
+ type: [String, Number],
53
+ default: ''
54
+ },
55
+ align: {
56
+ type: String,
57
+ default: 'left'
58
+ },
59
+ rowspan: {
60
+ type: [Number, String],
61
+ default: 1
62
+ },
63
+ colspan: {
64
+ type: [Number, String],
65
+ default: 1
66
+ },
67
+ sortable: {
68
+ type: Boolean,
69
+ default: false
70
+ },
71
+ filterType: {
72
+ type: String,
73
+ default: ""
74
+ },
75
+ filterData: {
76
+ type: Array,
77
+ default () {
78
+ return []
79
+ }
80
+ }
81
+ },
82
+ data() {
83
+ return {
84
+ border: false,
85
+ ascending: false,
86
+ descending: false
87
+ }
88
+ },
89
+ computed: {
90
+ contentAlign() {
91
+ let align = 'left'
92
+ switch (this.align) {
93
+ case 'left':
94
+ align = 'flex-start'
95
+ break
96
+ case 'center':
97
+ align = 'center'
98
+ break
99
+ case 'right':
100
+ align = 'flex-end'
101
+ break
102
+ }
103
+ return align
104
+ }
105
+ },
106
+ created() {
107
+ this.root = this.getTable('uniTable')
108
+ this.rootTr = this.getTable('uniTr')
109
+ this.rootTr.minWidthUpdate(this.width ? this.width : 140)
110
+ this.border = this.root.border
111
+ this.root.thChildren.push(this)
112
+ },
113
+ methods: {
114
+ sort() {
115
+ if (!this.sortable) return
116
+ this.clearOther()
117
+ if (!this.ascending && !this.descending) {
118
+ this.ascending = true
119
+ this.$emit('sort-change', {
120
+ order: 'ascending'
121
+ })
122
+ return
123
+ }
124
+ if (this.ascending && !this.descending) {
125
+ this.ascending = false
126
+ this.descending = true
127
+ this.$emit('sort-change', {
128
+ order: 'descending'
129
+ })
130
+ return
131
+ }
132
+
133
+ if (!this.ascending && this.descending) {
134
+ this.ascending = false
135
+ this.descending = false
136
+ this.$emit('sort-change', {
137
+ order: null
138
+ })
139
+ }
140
+ },
141
+ ascendingFn() {
142
+ this.clearOther()
143
+ this.ascending = !this.ascending
144
+ this.descending = false
145
+ this.$emit('sort-change', {
146
+ order: this.ascending ? 'ascending' : null
147
+ })
148
+ },
149
+ descendingFn() {
150
+ this.clearOther()
151
+ this.descending = !this.descending
152
+ this.ascending = false
153
+ this.$emit('sort-change', {
154
+ order: this.descending ? 'descending' : null
155
+ })
156
+ },
157
+ clearOther() {
158
+ this.root.thChildren.map(item => {
159
+ if (item !== this) {
160
+ item.ascending = false
161
+ item.descending = false
162
+ }
163
+ return item
164
+ })
165
+ },
166
+ ondropdown(e) {
167
+ this.$emit("filter-change", e)
168
+ },
169
+ /**
170
+ * 获取父元素实例
171
+ */
172
+ getTable(name) {
173
+ let parent = this.$parent
174
+ let parentName = parent.$options.name
175
+ while (parentName !== name) {
176
+ parent = parent.$parent
177
+ if (!parent) return false
178
+ parentName = parent.$options.name
179
+ }
180
+ return parent
181
+ }
182
+ }
183
+ }
184
+ </script>
185
+
186
+ <style scoped>
187
+ .uni-table-th {
188
+ padding: 12px 10px;
189
+ /* #ifndef APP-NVUE */
190
+ display: table-cell;
191
+ box-sizing: border-box;
192
+ /* #endif */
193
+ font-size: 14px;
194
+ font-weight: bold;
195
+ color: #909399;
196
+ border-bottom: 1px #ebeef5 solid;
197
+ }
198
+
199
+ .uni-table-th-row {
200
+ /* #ifndef APP-NVUE */
201
+ display: flex;
202
+ /* #endif */
203
+ flex-direction: row;
204
+ }
205
+
206
+ .table--border {
207
+ border-right: 1px #ebeef5 solid;
208
+ }
209
+
210
+ .uni-table-th-content {
211
+ display: flex;
212
+ align-items: center;
213
+ flex: 1;
214
+ }
215
+
216
+ .arrow {
217
+ display: block;
218
+ position: relative;
219
+ width: 10px;
220
+ height: 8px;
221
+ left: 5px;
222
+ overflow: hidden;
223
+ cursor: pointer;
224
+ }
225
+
226
+ .down {
227
+ top: 3px;
228
+ }
229
+
230
+ .down ::after {
231
+ content: "";
232
+ width: 8px;
233
+ height: 8px;
234
+ position: absolute;
235
+ left: 2px;
236
+ top: -5px;
237
+ transform: rotate(45deg);
238
+ background-color: #ccc;
239
+ }
240
+
241
+ .down.active ::after {
242
+ background-color: #007aff;
243
+ }
244
+
245
+ .up ::after {
246
+ content: "";
247
+ width: 8px;
248
+ height: 8px;
249
+ position: absolute;
250
+ left: 2px;
251
+ top: 5px;
252
+ transform: rotate(45deg);
253
+ background-color: #ccc;
254
+ }
255
+
256
+ .up.active ::after {
257
+ background-color: #007aff;
258
+ }
259
+ </style>