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