stellar-ui-v2 1.35.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 (141) hide show
  1. package/common/css/common.scss +61 -0
  2. package/components/ste-animate/README.md +117 -0
  3. package/components/ste-animate/animate.scss +247 -0
  4. package/components/ste-animate/ste-animate.vue +200 -0
  5. package/components/ste-badge/README.md +171 -0
  6. package/components/ste-badge/ste-badge.vue +238 -0
  7. package/components/ste-barcode/README.md +36 -0
  8. package/components/ste-barcode/encode2.js +317 -0
  9. package/components/ste-barcode/ste-barcode.vue +213 -0
  10. package/components/ste-button/README.md +129 -0
  11. package/components/ste-button/ste-button.vue +345 -0
  12. package/components/ste-calendar/README.md +304 -0
  13. package/components/ste-calendar/self-date.js +119 -0
  14. package/components/ste-calendar/ste-calendar.vue +578 -0
  15. package/components/ste-checkbox/README.md +297 -0
  16. package/components/ste-checkbox/ste-checkbox.vue +305 -0
  17. package/components/ste-checkbox-group/ste-checkbox-group.vue +133 -0
  18. package/components/ste-code-input/README.md +67 -0
  19. package/components/ste-code-input/ste-code-input.vue +302 -0
  20. package/components/ste-date-picker/README.md +135 -0
  21. package/components/ste-date-picker/ste-date-picker.vue +407 -0
  22. package/components/ste-drag/README.md +103 -0
  23. package/components/ste-drag/ste-drag.vue +203 -0
  24. package/components/ste-dropdown-menu/README.md +358 -0
  25. package/components/ste-dropdown-menu/ste-dropdown-menu.vue +405 -0
  26. package/components/ste-dropdown-menu-item/ste-dropdown-menu-item.vue +176 -0
  27. package/components/ste-icon/README.md +90 -0
  28. package/components/ste-icon/iconfont.css +8 -0
  29. package/components/ste-icon/ste-icon.vue +147 -0
  30. package/components/ste-image/README.md +154 -0
  31. package/components/ste-image/ste-image.vue +218 -0
  32. package/components/ste-index-item/ste-index-item.vue +96 -0
  33. package/components/ste-index-list/README.md +153 -0
  34. package/components/ste-index-list/ste-index-list.vue +128 -0
  35. package/components/ste-input/README.md +146 -0
  36. package/components/ste-input/ste-input.vue +480 -0
  37. package/components/ste-loading/README.md +81 -0
  38. package/components/ste-loading/ste-loading.vue +166 -0
  39. package/components/ste-media-preview/README.md +243 -0
  40. package/components/ste-media-preview/TouchScaleing.js +102 -0
  41. package/components/ste-media-preview/ste-media-preview.vue +267 -0
  42. package/components/ste-message-box/README.md +217 -0
  43. package/components/ste-message-box/ste-message-box.js +72 -0
  44. package/components/ste-message-box/ste-message-box.vue +380 -0
  45. package/components/ste-notice-bar/README.md +129 -0
  46. package/components/ste-notice-bar/ste-notice-bar.vue +331 -0
  47. package/components/ste-number-keyboard/README.md +246 -0
  48. package/components/ste-number-keyboard/keyboard.vue +140 -0
  49. package/components/ste-number-keyboard/ste-number-keyboard.vue +240 -0
  50. package/components/ste-picker/ste-picker.vue +258 -0
  51. package/components/ste-popup/README.md +148 -0
  52. package/components/ste-popup/ste-popup.vue +337 -0
  53. package/components/ste-price/README.md +129 -0
  54. package/components/ste-price/ste-price.vue +258 -0
  55. package/components/ste-progress/README.md +87 -0
  56. package/components/ste-progress/ste-progress.vue +200 -0
  57. package/components/ste-qrcode/README.md +50 -0
  58. package/components/ste-qrcode/ste-qrcode.vue +164 -0
  59. package/components/ste-qrcode/uqrcode.js +34 -0
  60. package/components/ste-radio/README.md +286 -0
  61. package/components/ste-radio/ste-radio.vue +293 -0
  62. package/components/ste-radio-group/ste-radio-group.vue +128 -0
  63. package/components/ste-rate/README.md +115 -0
  64. package/components/ste-rate/ste-rate.vue +202 -0
  65. package/components/ste-read-more/README.md +111 -0
  66. package/components/ste-read-more/ste-read-more.vue +133 -0
  67. package/components/ste-rich-text/README.md +31 -0
  68. package/components/ste-rich-text/ste-rich-text.vue +70 -0
  69. package/components/ste-scroll-to/README.md +68 -0
  70. package/components/ste-scroll-to/mixin.js +173 -0
  71. package/components/ste-scroll-to/ste-scroll-to.vue +45 -0
  72. package/components/ste-scroll-to-item/ste-scroll-to-item.vue +25 -0
  73. package/components/ste-search/README.md +262 -0
  74. package/components/ste-search/ste-search.vue +547 -0
  75. package/components/ste-select/README.md +434 -0
  76. package/components/ste-select/datapager.vue +62 -0
  77. package/components/ste-select/datetime.vue +106 -0
  78. package/components/ste-select/defaultDate.js +142 -0
  79. package/components/ste-select/ste-select.vue +843 -0
  80. package/components/ste-signature/README.md +105 -0
  81. package/components/ste-signature/ste-signature.vue +220 -0
  82. package/components/ste-slider/README.md +165 -0
  83. package/components/ste-slider/ste-slider.vue +544 -0
  84. package/components/ste-step/ste-step.vue +264 -0
  85. package/components/ste-stepper/README.md +170 -0
  86. package/components/ste-stepper/ste-stepper.vue +373 -0
  87. package/components/ste-steps/README.md +132 -0
  88. package/components/ste-steps/ste-steps.vue +65 -0
  89. package/components/ste-sticky/README.md +52 -0
  90. package/components/ste-sticky/ste-sticky.vue +127 -0
  91. package/components/ste-swipe-action/README.md +197 -0
  92. package/components/ste-swipe-action/ste-swipe-action.vue +303 -0
  93. package/components/ste-swipe-action-group/ste-swipe-action-group.vue +104 -0
  94. package/components/ste-swiper/README.md +173 -0
  95. package/components/ste-swiper/ste-swiper.vue +462 -0
  96. package/components/ste-swiper-item/ste-swiper-item.vue +41 -0
  97. package/components/ste-switch/README.md +110 -0
  98. package/components/ste-switch/ste-switch.vue +144 -0
  99. package/components/ste-tab/ste-tab.vue +87 -0
  100. package/components/ste-table/README.md +785 -0
  101. package/components/ste-table/common.js +8 -0
  102. package/components/ste-table/ste-table.vue +666 -0
  103. package/components/ste-table/utils.js +20 -0
  104. package/components/ste-table-column/checkbox-icon.vue +65 -0
  105. package/components/ste-table-column/common.scss +65 -0
  106. package/components/ste-table-column/radio-icon.vue +110 -0
  107. package/components/ste-table-column/ste-table-column.vue +255 -0
  108. package/components/ste-table-column/sub-table.vue +116 -0
  109. package/components/ste-table-column/table-popover.vue +204 -0
  110. package/components/ste-table-column/var.scss +1 -0
  111. package/components/ste-tabs/README.md +475 -0
  112. package/components/ste-tabs/props.js +212 -0
  113. package/components/ste-tabs/ste-tabs.vue +758 -0
  114. package/components/ste-text/README.md +66 -0
  115. package/components/ste-text/ste-text.vue +72 -0
  116. package/components/ste-toast/README.md +243 -0
  117. package/components/ste-toast/ste-toast.js +69 -0
  118. package/components/ste-toast/ste-toast.vue +231 -0
  119. package/components/ste-touch-swipe/README.md +104 -0
  120. package/components/ste-touch-swipe/TouchEvent.js +72 -0
  121. package/components/ste-touch-swipe/ste-touch-swipe.vue +327 -0
  122. package/components/ste-touch-swipe-item/ste-touch-swipe-item.vue +33 -0
  123. package/components/ste-tour/README.md +194 -0
  124. package/components/ste-tour/ste-tour.vue +355 -0
  125. package/components/ste-tree/README.md +240 -0
  126. package/components/ste-tree/ste-tree.vue +350 -0
  127. package/components/ste-upload/README.md +276 -0
  128. package/components/ste-upload/ReadFile.js +229 -0
  129. package/components/ste-upload/ste-upload.vue +526 -0
  130. package/components/ste-video/README.md +60 -0
  131. package/components/ste-video/props.js +149 -0
  132. package/components/ste-video/ste-video.vue +647 -0
  133. package/config/color.js +22 -0
  134. package/index.js +2 -0
  135. package/package.json +19 -0
  136. package/utils/Color.js +66 -0
  137. package/utils/System.js +110 -0
  138. package/utils/dayjs.min.js +1 -0
  139. package/utils/mixin.js +67 -0
  140. package/utils/store.js +7 -0
  141. package/utils/utils.js +604 -0
@@ -0,0 +1,434 @@
1
+ # Select 下拉选
2
+ - 当选项过多时,使用下拉菜单展示并选择内容。
3
+
4
+ ---$
5
+
6
+ ## 使用示例
7
+
8
+ ### 基础用法
9
+ - 属性`list`接收一个数组,数组中的每一项为一个对象,对象中包含`label`和`value`两个属性,分别表示节点的显示文本和节点的值
10
+ - 若`lable`和`value`属性字段名不同,可通过`labelKey`和`valueKey`属性进行设置
11
+ - 属性`value`接收一个值,表示当前选中的节点值,支持`v-model`双向绑定
12
+ - 除了单选之外的其他用法,`value`属性必须是一个数组,数组中的每一项表示一个选中的节点值
13
+ - 事件`change`在节点值改变时触发,返回当前选中的节点对象
14
+ ```html
15
+ <template>
16
+ <ste-select :list="list" v-model="value" @change="onChange"></ste-select>
17
+ </template>
18
+ <script>
19
+ export default {
20
+ data() {
21
+ return {
22
+ value: null,
23
+ list: [
24
+ { label: '选项2011', value: 2011 },
25
+ { label: '选项2012', value: 2012 },
26
+ { label: '选项2013', value: 2013 },
27
+ { label: '选项2014', value: 2014 },
28
+ { label: '选项2015', value: 2015 },
29
+ { label: '选项2016', value: 2016 },
30
+ { label: '选项2017', value: 2017 },
31
+ { label: '选项2018', value: 2018 },
32
+ { label: '选项2019', value: 2019 },
33
+ ],
34
+ }
35
+ },
36
+ methods: {
37
+ onChange(v) {
38
+ console.log(v)
39
+ }
40
+ }
41
+ };
42
+ </script>
43
+ ```
44
+ ### 多选
45
+ - 属性`multiple`设置为`true`时,可进行多选
46
+ - 属性`value`接收一个数组,数组中的每一项表示一个选中的节点值
47
+ ```html
48
+ <template>
49
+ <ste-select :list="list" v-model="value" multiple></ste-select>
50
+ </template>
51
+ <script>
52
+ export default {
53
+ data() {
54
+ return {
55
+ value:[],
56
+ list: [
57
+ { label: '选项2011', value: 2011 },
58
+ { label: '选项2012', value: 2012 },
59
+ { label: '选项2013', value: 2013 },
60
+ { label: '选项2014', value: 2014 },
61
+ { label: '选项2015', value: 2015 },
62
+ { label: '选项2016', value: 2016 },
63
+ { label: '选项2017', value: 2017 },
64
+ { label: '选项2018', value: 2018 },
65
+ { label: '选项2019', value: 2019 },
66
+ ],
67
+ }
68
+ },
69
+ };
70
+ </script>
71
+ ```
72
+
73
+ ### 多列选择
74
+ - 属性`list`可接收一个二维数组,数组中的每一项为一个对象,对象结构同上
75
+ - 属性`value`接收一个数组,数组中的每一项表示一个选中的节点值
76
+ ```html
77
+ <template>
78
+ <ste-select :list="list" v-model="value"></ste-select>
79
+ </template>
80
+ <script>
81
+ export default {
82
+ data() {
83
+ return {
84
+ value: [],
85
+ list: [
86
+ [
87
+ { label: '选项1-1', value: 11 },
88
+ { label: '选项1-2', value: 22 },
89
+ ],
90
+ [
91
+ { label: '选项2-1', value: 21 },
92
+ { label: '选项2-2', value: 22 },
93
+ ],
94
+ ],
95
+ }
96
+ },
97
+ };
98
+ </script>
99
+ ```
100
+ ### 树形选择
101
+ - 属性`list`可接收一个树形结构数组,数组中的每一项为一个对象,对象结构同上,`children`属性表示子节点
102
+ - 若`children`属性字段名不同,可通过`childrenKey`属性进行设置
103
+ - 属性`mode`设置为`tree`时,可进行树形选择
104
+ - 属性`value`接收一个数组,数组中的每一项表示一个选中的节点值
105
+ ```html
106
+ <template>
107
+ <ste-select mode="tree" :list="list" v-model="value"></ste-select>
108
+ </template>
109
+ <script>
110
+ export default {
111
+ data() {
112
+ return {
113
+ value:[],
114
+ list: [
115
+ {
116
+ label: '湖北',
117
+ value: 1,
118
+ children: [
119
+ { label: '武汉', value: 11 },
120
+ { label: '荆州', value: 12 },
121
+ ],
122
+ },
123
+ {
124
+ label: '湖南',
125
+ value: 2,
126
+ children: [
127
+ { label: '长沙', value: 21 },
128
+ { label: '株洲', value: 22 },
129
+ ],
130
+ },
131
+ ],
132
+ }
133
+ },
134
+ };
135
+ </script>
136
+ ```
137
+ ### 日期时间选择器
138
+ - 属性`mode`设置为`date`时,可进行日期选择
139
+ - 设置为`time`时,可进行时间选择
140
+ - 设置为`datetime`时,可进行日期和时间选择
141
+ - 设置为`month`时,可进行月份选择
142
+ - 设置为`minute`时,可进行年份选择
143
+ - 当`mode`设置为时间日期选择器时,属性`list`不生效
144
+ - 若要设置默认值,属性`value`接收一个数组,分别对应当前选项的每一列
145
+ - 例如
146
+ - `mode`为`date`时,`value`为`[2020, 1, 1]`时,表示当前选中的日期为2020年1月1日
147
+ - `mode`为`time`时,`value`为`[12, 0, 0]`时,表示当前选中的时间为12:00:00
148
+ - `mode`为`datetime`时,`value`为`[2020, 1, 1, 12, 0, 0]`时,表示当前选中的日期时间为2020年1月1日12:00:00
149
+ - 也可以使用符合`dayjs`格式化的数据
150
+ - 例如
151
+ - `mode`为`date`时,`value`为`'2020-01-01'`时,表示当前选中的日期为2011年1月1日
152
+ ```html
153
+ <template>
154
+ <ste-select mode="date"></ste-select>
155
+ </template>
156
+ ```
157
+ ### 搜索
158
+ - 属性`mode`设置为`filterable`时,可进行搜索(仅`list`为一维数组时有效)
159
+ ```html
160
+ <template>
161
+ <ste-select mode="filterable" :list="list"></ste-select>
162
+ </template>
163
+ <script>
164
+ export default {
165
+ data() {
166
+ return {
167
+ list: [
168
+ { label: '选项2011', value: 2011 },
169
+ { label: '选项2012', value: 2012 },
170
+ { label: '选项2013', value: 2013 },
171
+ { label: '选项2014', value: 2014 },
172
+ { label: '选项2015', value: 2015 },
173
+ { label: '选项2016', value: 2016 },
174
+ { label: '选项2017', value: 2017 },
175
+ { label: '选项2018', value: 2018 },
176
+ { label: '选项2019', value: 2019 },
177
+ ],
178
+ }
179
+ },
180
+ }
181
+ </script>
182
+ ```
183
+ ### 创建条目
184
+ - 属性`allowCreate`设置为`true`时,可进行创建条目(仅在`mode`属性为`filterable`时并且`list`为一维数组时生效)
185
+
186
+ ```html
187
+ <template>
188
+ <ste-select mode="filterable" allowCreate :list="list"></ste-select>
189
+ </template>
190
+ <script>
191
+ export default {
192
+ data() {
193
+ return {
194
+ list: [
195
+ { label: '选项2011', value: 2011 },
196
+ { label: '选项2012', value: 2012 },
197
+ { label: '选项2013', value: 2013 },
198
+ { label: '选项2014', value: 2014 },
199
+ { label: '选项2015', value: 2015 },
200
+ { label: '选项2016', value: 2016 },
201
+ { label: '选项2017', value: 2017 },
202
+ { label: '选项2018', value: 2018 },
203
+ { label: '选项2019', value: 2019 },
204
+ ],
205
+ }
206
+ },
207
+ }
208
+ </script>
209
+ ```
210
+
211
+ ### 远程搜索
212
+ - 当在`mode`属性为`filterable`时,属性`autoFilterable`设置为`false`时,则不会执行自动筛选,可通过`inputFilterable`监听输入执行远程搜索
213
+
214
+ ```html
215
+ <template>
216
+ <ste-select
217
+ :list="list"
218
+ mode="filterable"
219
+ :autoFilterable="false"
220
+ :loading="loading"
221
+ @inputFilterable="onInputFilterable"
222
+ ></ste-select>
223
+ </template>
224
+ <script>
225
+ const listAll = [
226
+ { label: '选项211', value: 211 },
227
+ { label: '选项212', value: 212 },
228
+ { label: '选项213', value: 213 },
229
+ { label: '选项214', value: 214 },
230
+ { label: '选项215', value: 215 },
231
+ { label: '选项216', value: 216 },
232
+ { label: '选项217', value: 217 },
233
+ { label: '选项218', value: 218 },
234
+ { label: '选项219', value: 219 },
235
+ { label: '选项220', value: 220 },
236
+ { label: '选项221', value: 221 },
237
+ { label: '选项222', value: 222 },
238
+ { label: '选项223', value: 223 },
239
+ { label: '选项224', value: 224 },
240
+ { label: '选项225', value: 225 },
241
+ { label: '选项226', value: 226 },
242
+ { label: '选项227', value: 227 },
243
+ { label: '选项228', value: 228 },
244
+ { label: '选项229', value: 229 },
245
+ { label: '选项230', value: 230 },
246
+ { label: '选项231', value: 231 },
247
+ { label: '选项232', value: 232 },
248
+ { label: '选项233', value: 233 },
249
+ { label: '选项234', value: 234 },
250
+ { label: '选项235', value: 235 },
251
+ { label: '选项236', value: 236 },
252
+ { label: '选项237', value: 237 },
253
+ { label: '选项238', value: 238 },
254
+ { label: '选项239', value: 239 },
255
+ { label: '选项240', value: 240 },
256
+ { label: '选项241', value: 241 },
257
+ { label: '选项242', value: 242 },
258
+ { label: '选项243', value: 243 },
259
+ { label: '选项244', value: 244 },
260
+ { label: '选项245', value: 245 },
261
+ { label: '选项246', value: 246 },
262
+ { label: '选项247', value: 247 },
263
+ { label: '选项248', value: 248 },
264
+ { label: '选项249', value: 249 },
265
+ { label: '选项250', value: 250 },
266
+ { label: '选项251', value: 251 },
267
+ ];
268
+ export default {
269
+ data() {
270
+ return {
271
+ list: [],
272
+ loading: false,
273
+ time: null,
274
+
275
+ }
276
+ },
277
+ methods:{
278
+ onInputFilterable(v) {
279
+ // 防抖
280
+ clearTimeout(this.time);
281
+ this.time = setTimeout(() => {
282
+ if (this.loading) return;
283
+ this.loading = true;
284
+ // 模拟远程搜索
285
+ setTimeout(() => {
286
+ this.loading = false;
287
+ console.log(v);
288
+ if (v) {
289
+ this.list = listAll.filter((item) => item.label.indexOf(v) !== -1);
290
+ } else {
291
+ this.list = listAll.map((item) => item);
292
+ }
293
+ console.log(this.list);
294
+ }, 1000);
295
+ }, 500);
296
+ }
297
+ }
298
+ }
299
+ </script>
300
+ ```
301
+ ### 分页
302
+ - 事件`loadMore`可监听上拉触底(多列渲染无效)
303
+ - 属性`total`控制每页显示条数
304
+ - `list`选项数量大于或等于`total`值时不触发上拉触底事件
305
+
306
+ ```html
307
+ <template>
308
+ <ste-select :list="list" :loading="loading" :total="total" @loadMore="loadMore"></ste-select>
309
+ </template>
310
+ <script>
311
+ export default {
312
+ data() {
313
+ return {
314
+ pageSize:10,
315
+ loading: false,
316
+ list: [],
317
+ total:0,
318
+ }
319
+ },
320
+ mounted() {
321
+ // 初始化加载数据,
322
+ this.getList();
323
+ },
324
+ methods:{
325
+ getList() {
326
+ if (this.loading) return;
327
+ this.loading = true;
328
+ // 模拟远程请求
329
+ setTimeout(() => {
330
+ this.loading = false;
331
+ const newData = Array.from({ length: this.pageSize }).map((_, i) => {
332
+ const value = this.list7.length + i + 1;
333
+ return { label: `选项${value}`, value };
334
+ });
335
+ this.list7.push(...newData);
336
+ this.total = 88
337
+ }, 1000);
338
+ },
339
+ loadMore(){
340
+ this.getList()
341
+ }
342
+ }
343
+ }
344
+ </script>
345
+ ```
346
+
347
+
348
+
349
+ ---$
350
+ ### API
351
+ #### Props
352
+ 背景之外的颜色属性只支持`16进制`、`RGB`、`RGBA`格式
353
+ | 属性名 | 说明 | 类型 | 默认值 | 可选值 | 支持版本 |
354
+ | ----- | ----- | ----- | ----- | ----- | ----- |
355
+ | `value` | 绑定的值,支持v-model双向绑定 | `Number`,`String`,`Array` | - | - | - |
356
+ | `list` | 选项数据 | `Object[]`,`Object[][]`,`Tree`| `[]` | - | - |
357
+ | `mode` | 选择模式 | `String` | `default` | 见下方详细说明 | - |
358
+ | `minDate` | 最小日期,`mode`为日期时间选择器时生效 | `String` | - | - | - |
359
+ | `maxDate` | 最大日期,`mode`为日期时间选择器时生效 | `String` | - | - | - |
360
+ | `dateUnit` | 选项是否显示时间单位,`mode`为日期时间选择器时生效 | `Boolean` | `true` | - | - |
361
+ | `width` | 宽度,单位rpx | `String`,`Number` | `100%` | - | - |
362
+ | `height` | 高度,单位rpx | `String`,`Number` | `64` | - | - |
363
+ | `fontSize` | 字体大小,单位rpx | `String`,`Number` | `28` | - | - |
364
+ | `background` | 背景 | `String` | `#fff` | - | - |
365
+ | `maskClose` | 点击遮罩层是否关闭 | `Boolean` | `true` | - | - |
366
+ | `optionsWidth` | 选项框宽度,默认跟随`width` | `String`,`Number` | `auto` | - | - |
367
+ | `placeholder` | 占位符 | `String` | `请选择` | - | - |
368
+ | `labelKey` | 选项的标签 | `String` | `label` | - | - |
369
+ | `valueKey` | 选项的值 | `String` | `value` | - | - |
370
+ | `childrenKey` | 数据列表中显示的键名(`mode`为`tree`时生效) | `String` | `children`| - | - |
371
+ | `multiple` | 是否多选(`list`为一维数组时生效) | `Boolean` | `false` | - | - |
372
+ | `allowCreate` | 是否允许创建(`mode`为`filterable`时生效) | `Boolean` | `false` | - | - |
373
+ | `autoFilterable` | 是否自动过滤条目(`mode`为`filterable`时生效) | `Boolean` | `true` | - | `1.34.1`|
374
+ | `borderColor` | 边框颜色,若不要边框可设置为透明色 | `String` | `#ebebeb` | - | - |
375
+ | `borderRadius` | 圆角大小,单位RPX | `Number`,`String` | `8` | - | - |
376
+ | `optionsPosition` | 选项框位置 | `String` | `auto` | 见下方详细说明 | - |
377
+ | `disabled` | 禁用(所有功能失效) | `Boolean` | `false` | - | - |
378
+ | `loading` | 加载中 | `Boolean` | `false` | - | `1.34.1`|
379
+ | `total` | 数据总数(`list`选项数量大于或等于`total`值时不触发上拉触底事件) | `Number` | `10` | - | `1.34.1`|
380
+ | `clearable` | 显示一键清除按钮 | `Boolean` | `false` | - | `1.35.1`|
381
+
382
+ ##### Mode可选值
383
+ | 值 | 说明 | 支持版本 |
384
+ | ----- | ----- | ----- |
385
+ | `default` | 默认选择器 | - |
386
+ | `filterable`| 可搜索选择器 | - |
387
+ | `tree` | 树形选择器 | - |
388
+ | `date` | 日期时间选择器模式:日期选择器(该模式下`list`属性无效) | - |
389
+ | `datetime` | 日期时间选择器模式:日期时间选择器(该模式下`list`属性无效) | - |
390
+ | `time` | 日期时间选择器模式:时间选择器(该模式下`list`属性无效) | - |
391
+ | `month` | 日期时间选择器模式:年月选择器(该模式下`list`属性无效) | - |
392
+ | `minute` | 日期时间选择器模式:时分选择器(该模式下`list`属性无效) | - |
393
+
394
+
395
+ ##### OptionsPosition可选值
396
+ | 值 | 说明 | 支持版本 |
397
+ | ----- | ----- | ----- |
398
+ | `auto` | 自动展示位置,默认 | - |
399
+ | `auto-start` | 上下自适应,左侧对其 | - |
400
+ | `auto-end` | 上下自适应,右侧对其 | - |
401
+ | `bottom` | 在下方展示,左右自适应 | - |
402
+ | `bottom-auto` | 同`bottom` | - |
403
+ | `bottom-start`| 下方展示,左侧对其 | - |
404
+ | `bottom-end` | 下方展示,右侧对其 | - |
405
+ | `top` | 在上方展示,左右自适应 | - |
406
+ | `top-auto` | 同`top` | - |
407
+ | `top-start` | 上方展示,左侧对其 | - |
408
+ | `top-end` | 上方展示,右侧对其 | - |
409
+
410
+
411
+
412
+ #### Events
413
+
414
+ | 事件名 | 说明 | 事件参数 | 支持版本 |
415
+ | --- | --- | --- | --- |
416
+ | `change` | 选择时触发 | 参数1:`value`/`value[]`,参数2:`item`/`item[]` | - |
417
+ | `cancel` | 取消选择时触发 | - | - |
418
+ | `confirm` | 确定选择时触发 | `value`/`value[]` | - |
419
+ | `inputFilterable` | 搜索框输入数据时触发 | `str`:输入的内容 | `1.34.1`|
420
+ | `loadMore` | 上拉触底时触发 | - | `1.34.1`|
421
+
422
+ #### Slots
423
+
424
+ | 事件名 | 说明 | 支持版本 |
425
+ | --- | --- | --- |
426
+ | `default` | 展示内容 | - |
427
+ | `icon` | 打开下拉图标 | - |
428
+ | `loading-icon`| 加载中图标 | `1.34.1`|
429
+
430
+
431
+
432
+
433
+ ---$
434
+ {{xuyajun}}
@@ -0,0 +1,62 @@
1
+ <template>
2
+ <scroll-view scroll-y class="datapager-root" :style="[rootStyle]">
3
+ <view class="datapager-content">
4
+ <slot></slot>
5
+ </view>
6
+ <view class="datapager-footer"></view>
7
+ </scroll-view>
8
+ </template>
9
+
10
+ <script>
11
+ import utils from '../../utils/utils';
12
+
13
+ export default {
14
+ name: 'datapager',
15
+ options: {
16
+ virtualHost: true,
17
+ },
18
+ props: {
19
+ // 距离底部触发分页距离
20
+ bottomDistance: {
21
+ type: Number,
22
+ default: 10,
23
+ },
24
+ rootStyle: {
25
+ type: Object,
26
+ default: () => ({}),
27
+ },
28
+ },
29
+ data() {
30
+ return {};
31
+ },
32
+ computed: {},
33
+ created() {},
34
+ mounted() {
35
+ setTimeout(() => {
36
+ uni.createIntersectionObserver(this)
37
+ .relativeTo('.datapager-root', { bottom: Math.abs(this.bottomDistance) > 5 ? this.bottomDistance : 5 })
38
+ .observe('.datapager-footer', (res) => {
39
+ if (res.intersectionRatio) {
40
+ this.$emit('loadMore');
41
+ }
42
+ });
43
+ });
44
+ },
45
+ methods: {},
46
+ };
47
+ </script>
48
+
49
+ <style lang="scss" scoped>
50
+ .datapager-root {
51
+ width: 100%;
52
+ height: 100%;
53
+ overflow-y: auto;
54
+ .datapager-content {
55
+ width: 100%;
56
+ }
57
+ .datapager-footer {
58
+ width: 100%;
59
+ height: 1px;
60
+ }
61
+ }
62
+ </style>
@@ -0,0 +1,106 @@
1
+ <template>
2
+ <picker-view
3
+ style="height: 450rpx; width: 100%"
4
+ indicator-style="height: 43px"
5
+ immediate-change
6
+ :value="selectedIndex"
7
+ @change="onChange"
8
+ >
9
+ <picker-view-column v-for="(col, index) in dataOptions" :key="index">
10
+ <view class="time-item" v-for="(item, i) in col" :key="item.title">
11
+ <text>
12
+ {{ dateUnit ? item.title : item.value }}
13
+ </text>
14
+ </view>
15
+ </picker-view-column>
16
+ </picker-view>
17
+ </template>
18
+
19
+ <script>
20
+ import { getDateOptions, getFormatStr, getNowDate } from './defaultDate';
21
+ export default {
22
+ name: 'date-time',
23
+ props: {
24
+ value: { type: [String, Number, Array, null], default: () => [] },
25
+ mode: { type: [String, null], default: () => 'date' },
26
+ minDate: { type: [Number, String, Date, null], default: () => null },
27
+ maxDate: { type: [Number, String, Date, null], default: () => null },
28
+ dateUnit: { type: [Boolean, null], default: () => true },
29
+ },
30
+ data() {
31
+ return {
32
+ dataOptions: [],
33
+ selectedValue: [],
34
+ selectedIndex: [],
35
+ };
36
+ },
37
+ watch: {
38
+ value: {
39
+ handler(v) {
40
+ let values = [];
41
+ if (Array.isArray(v)) {
42
+ values = [...v];
43
+ } else {
44
+ const str = ['date', 'datetime', 'month'].includes(this.mode) ? 'YYYY MM DD HH mm ss' : 'HH mm ss';
45
+ const value = utils.dayjs(v).format(str).split(' ');
46
+ values = value.map((item) => Number(item));
47
+ }
48
+ this.selectedValue = values;
49
+ },
50
+ immediate: true,
51
+ },
52
+ minDate() {
53
+ this.initOptions();
54
+ this.initSelectIndex();
55
+ },
56
+ maxDate() {
57
+ this.initOptions();
58
+ this.initSelectIndex();
59
+ },
60
+ },
61
+ created() {
62
+ this.initOptions();
63
+ this.initSelectIndex();
64
+ },
65
+ methods: {
66
+ initOptions(values = this.selectedValue) {
67
+ const { options, value } = getDateOptions(values, this.mode, this.minDate, this.maxDate);
68
+ this.dataOptions = options;
69
+ },
70
+ initSelectIndex(values = this.selectedValue) {
71
+ this.$nextTick(() => {
72
+ const indexs = [];
73
+ const _values = getNowDate(values, this.mode);
74
+ this.dataOptions.forEach((item, index) => {
75
+ let i = item.map(({ value }) => value).indexOf(_values[index]);
76
+ if (i === -1) {
77
+ i = _values[index] > item[item.length - 1].value ? item.length - 1 : 0;
78
+ }
79
+ indexs.push(i);
80
+ });
81
+ this.selectedIndex = indexs;
82
+ this.selectedValue = indexs.map((i, index) => this.dataOptions[index][i].value);
83
+ this.$emit('change', this.selectedValue);
84
+ this.$emit('input', this.selectedValue);
85
+ });
86
+ },
87
+ onChange(e) {
88
+ const indexs = e.detail.value;
89
+ const newValues = indexs.map((i, index) => this.dataOptions[index][i].value);
90
+ this.initOptions(newValues);
91
+ this.initSelectIndex(newValues);
92
+ },
93
+ },
94
+ };
95
+ </script>
96
+
97
+ <style scoped lang="scss">
98
+ .time-item {
99
+ width: 100%;
100
+ height: 100%;
101
+ display: flex;
102
+ align-items: center;
103
+ justify-content: center;
104
+ font-size: var(--ste-select-font-size);
105
+ }
106
+ </style>