xt-element-ui 2.2.2 → 2.2.4

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 (153) hide show
  1. package/README.md +140 -192
  2. package/docs/README.md +162 -81
  3. package/docs/components/base/theme.md +248 -0
  4. package/docs/components/base/xt-button.md +11 -4
  5. package/docs/components/base/xt-card.md +5 -11
  6. package/docs/components/base/xt-config-provider.md +2 -0
  7. package/docs/components/base/xt-flow.md +404 -0
  8. package/docs/components/base/xt-list.md +1 -1
  9. package/docs/components/base/xt-multi.md +5 -5
  10. package/docs/components/base/xt-scroll-arrow.md +87 -1
  11. package/docs/components/base/xt-scroll.md +237 -0
  12. package/docs/components/business/xt-chart.md +1 -0
  13. package/docs/components/utils/config.md +18 -4
  14. package/docs/components/utils/theme.md +280 -183
  15. package/lib/index.common.1.js +4 -26
  16. package/lib/index.common.2.js +1 -1
  17. package/lib/index.common.js +4577 -109925
  18. package/lib/index.css +1 -1
  19. package/lib/index.umd.1.js +4 -26
  20. package/lib/index.umd.2.js +1 -1
  21. package/lib/index.umd.js +4583 -109930
  22. package/lib/index.umd.min.1.js +1 -1
  23. package/lib/index.umd.min.js +1 -1
  24. package/lib/theme/element-overrides.css +607 -0
  25. package/lib/theme/element-vars.css +280 -0
  26. package/lib/xt-badge/xt-badge.common.js +1 -1
  27. package/lib/xt-badge/xt-badge.css +1 -1
  28. package/lib/xt-badge/xt-badge.umd.js +1 -1
  29. package/lib/xt-button/xt-button.common.js +13 -8
  30. package/lib/xt-button/xt-button.css +1 -1
  31. package/lib/xt-button/xt-button.umd.js +13 -8
  32. package/lib/xt-button/xt-button.umd.min.js +1 -1
  33. package/lib/xt-card/xt-card.common.js +5 -5
  34. package/lib/xt-card/xt-card.umd.js +5 -5
  35. package/lib/xt-card/xt-card.umd.min.js +1 -1
  36. package/lib/xt-card-item/xt-card-item.common.js +4 -4
  37. package/lib/xt-card-item/xt-card-item.umd.js +4 -4
  38. package/lib/xt-card-item/xt-card-item.umd.min.js +1 -1
  39. package/lib/xt-chart/xt-chart.common.js +1969 -108924
  40. package/lib/xt-chart/xt-chart.css +1 -1
  41. package/lib/xt-chart/xt-chart.umd.js +1975 -108929
  42. package/lib/xt-chart/xt-chart.umd.min.js +1 -1
  43. package/lib/xt-config-provider/xt-config-provider.common.js +561 -107504
  44. package/lib/xt-config-provider/xt-config-provider.css +1 -1
  45. package/lib/xt-config-provider/xt-config-provider.umd.js +567 -107509
  46. package/lib/xt-config-provider/xt-config-provider.umd.min.js +1 -1
  47. package/lib/xt-date-picker/xt-date-picker.common.1.js +4 -26
  48. package/lib/xt-date-picker/xt-date-picker.common.2.js +1 -1
  49. package/lib/xt-date-picker/xt-date-picker.common.js +1 -47
  50. package/lib/xt-date-picker/xt-date-picker.css +1 -1
  51. package/lib/xt-date-picker/xt-date-picker.umd.1.js +4 -26
  52. package/lib/xt-date-picker/xt-date-picker.umd.2.js +1 -1
  53. package/lib/xt-date-picker/xt-date-picker.umd.js +1 -47
  54. package/lib/xt-date-picker/xt-date-picker.umd.min.1.js +1 -1
  55. package/lib/xt-date-picker/xt-date-picker.umd.min.js +1 -1
  56. package/lib/xt-flex-box/xt-flex-box.common.js +1 -1
  57. package/lib/xt-flex-box/xt-flex-box.umd.js +1 -1
  58. package/lib/xt-flow/demo.html +10 -0
  59. package/lib/xt-flow/index.js +1 -0
  60. package/lib/xt-flow/xt-flow.common.js +638 -0
  61. package/lib/xt-flow/xt-flow.css +1 -0
  62. package/lib/xt-flow/xt-flow.umd.js +648 -0
  63. package/lib/xt-flow/xt-flow.umd.min.js +1 -0
  64. package/lib/xt-form-schema/xt-form-schema.common.js +1 -1
  65. package/lib/xt-form-schema/xt-form-schema.umd.js +1 -1
  66. package/lib/xt-grid-box/xt-grid-box.common.js +1 -1
  67. package/lib/xt-grid-box/xt-grid-box.umd.js +1 -1
  68. package/lib/xt-grid-item/xt-grid-item.common.js +1 -1
  69. package/lib/xt-grid-item/xt-grid-item.umd.js +1 -1
  70. package/lib/xt-icon/xt-icon.common.js +1 -1
  71. package/lib/xt-icon/xt-icon.umd.js +1 -1
  72. package/lib/xt-input/xt-input.common.js +1 -1
  73. package/lib/xt-input/xt-input.umd.js +1 -1
  74. package/lib/xt-list/xt-list.common.js +457 -118
  75. package/lib/xt-list/xt-list.css +1 -1
  76. package/lib/xt-list/xt-list.umd.js +457 -118
  77. package/lib/xt-list/xt-list.umd.min.js +1 -1
  78. package/lib/xt-map/xt-map.common.js +1 -1
  79. package/lib/xt-map/xt-map.umd.js +1 -1
  80. package/lib/xt-map-provider/xt-map-provider.common.js +1 -1
  81. package/lib/xt-map-provider/xt-map-provider.umd.js +1 -1
  82. package/lib/xt-page/xt-page.common.js +1 -1
  83. package/lib/xt-page/xt-page.umd.js +1 -1
  84. package/lib/xt-progress/xt-progress.common.js +1 -1
  85. package/lib/xt-progress/xt-progress.umd.js +1 -1
  86. package/lib/xt-scroll/demo.html +10 -0
  87. package/lib/xt-scroll/index.js +1 -0
  88. package/lib/xt-scroll/xt-scroll.common.js +551 -0
  89. package/lib/xt-scroll/xt-scroll.css +1 -0
  90. package/lib/xt-scroll/xt-scroll.umd.js +561 -0
  91. package/lib/xt-scroll/xt-scroll.umd.min.js +1 -0
  92. package/lib/xt-scroll-arrow/xt-scroll-arrow.common.js +591 -170
  93. package/lib/xt-scroll-arrow/xt-scroll-arrow.css +1 -1
  94. package/lib/xt-scroll-arrow/xt-scroll-arrow.umd.js +591 -170
  95. package/lib/xt-scroll-arrow/xt-scroll-arrow.umd.min.js +1 -1
  96. package/lib/xt-select-tree/xt-select-tree.common.js +1 -1
  97. package/lib/xt-select-tree/xt-select-tree.umd.js +1 -1
  98. package/lib/xt-step-price/xt-step-price.common.js +2 -2
  99. package/lib/xt-step-price/xt-step-price.umd.js +2 -2
  100. package/lib/xt-step-price-item/xt-step-price-item.common.js +1 -1
  101. package/lib/xt-step-price-item/xt-step-price-item.umd.js +1 -1
  102. package/lib/xt-tab-pane/xt-tab-pane.common.js +1 -1
  103. package/lib/xt-tab-pane/xt-tab-pane.umd.js +1 -1
  104. package/lib/xt-table/xt-table.common.js +2 -2
  105. package/lib/xt-table/xt-table.umd.js +2 -2
  106. package/lib/xt-tabs/xt-tabs.common.js +1 -1
  107. package/lib/xt-tabs/xt-tabs.umd.js +1 -1
  108. package/lib/xt-text/xt-text.common.js +1 -1
  109. package/lib/xt-text/xt-text.css +1 -1
  110. package/lib/xt-text/xt-text.umd.js +1 -1
  111. package/lib/xt-time/xt-time.common.js +1 -1
  112. package/lib/xt-time/xt-time.umd.js +1 -1
  113. package/lib/xt-transfer-tree/xt-transfer-tree.common.js +1 -1
  114. package/lib/xt-transfer-tree/xt-transfer-tree.umd.js +1 -1
  115. package/lib/xt-upload/xt-upload.common.js +11 -11
  116. package/lib/xt-upload/xt-upload.umd.js +12 -12
  117. package/lib/xt-upload/xt-upload.umd.min.js +1 -1
  118. package/package.json +6 -5
  119. package/src/components/index.scss +7 -1
  120. package/src/components/theme/element-overrides.css +607 -0
  121. package/src/components/theme/element-vars.css +280 -0
  122. package/src/components/theme/iframe-injector.js +502 -0
  123. package/src/components/theme/index.js +64 -0
  124. package/src/components/xt-badge/style/index.scss +6 -6
  125. package/src/components/xt-button/index.vue +11 -6
  126. package/src/components/xt-button/style/index.scss +7 -5
  127. package/src/components/xt-card/index.vue +3 -3
  128. package/src/components/xt-card-item/index.vue +2 -2
  129. package/src/components/xt-chart/XtMulti.vue +8 -18
  130. package/src/components/xt-chart/XtPie.vue +1 -0
  131. package/src/components/xt-chart/utils.js +84 -50
  132. package/src/components/xt-config-provider/index.vue +56 -54
  133. package/src/components/xt-config-provider/style/index.scss +0 -11
  134. package/src/components/xt-date-picker/component/RangeDate.vue +1 -29
  135. package/src/components/xt-date-picker/style/index.scss +79 -54
  136. package/src/components/xt-flow/flowable-parser.js +244 -0
  137. package/src/components/xt-flow/index.js +8 -0
  138. package/src/components/xt-flow/index.vue +226 -0
  139. package/src/components/xt-flow/style/index.scss +359 -0
  140. package/src/components/xt-list/index.vue +23 -12
  141. package/src/components/xt-scroll/index.js +9 -0
  142. package/src/components/xt-scroll/index.vue +363 -0
  143. package/src/components/xt-scroll/style/index.scss +107 -0
  144. package/src/components/xt-scroll-arrow/index.vue +200 -83
  145. package/src/components/xt-scroll-arrow/style/index.scss +16 -5
  146. package/src/components/xt-text/style/index.scss +6 -6
  147. package/src/index.js +15 -13
  148. package/src/styles/css-variables.scss +73 -1
  149. package/src/utils/color.js +105 -0
  150. package/src/utils/index.js +456 -468
  151. package/src/utils/theme-vars.js +134 -0
  152. package/lib/css/1.87a493be.css +0 -1
  153. package/lib/xt-date-picker/css/1.87a493be.css +0 -1
@@ -0,0 +1,404 @@
1
+ 审批流程轨迹组件,用于展示纵向审批历史和当前状态,支持 Flowable 工作流原生数据对接。
2
+
3
+ ## 基本用法
4
+
5
+ ::: demo 基本用法 - 自定义数据格式
6
+ ```vue
7
+ <template>
8
+ <XtFlow :data="flowData" format="custom" />
9
+ </template>
10
+
11
+ <script>
12
+ export default {
13
+ data() {
14
+ return {
15
+ flowData: [
16
+ {
17
+ id: '1',
18
+ name: '提交申请',
19
+ assignee: '张三',
20
+ status: 'approved',
21
+ createTime: '2024-01-01 10:00:00',
22
+ endTime: '2024-01-01 10:05:00',
23
+ comment: '',
24
+ duration: '5分钟'
25
+ },
26
+ {
27
+ id: '2',
28
+ name: '直属领导审批',
29
+ assignee: '李四',
30
+ status: 'approved',
31
+ createTime: '2024-01-01 10:30:00',
32
+ endTime: '2024-01-01 10:45:00',
33
+ comment: '同意',
34
+ duration: '15分钟'
35
+ },
36
+ {
37
+ id: '3',
38
+ name: '部门经理审批',
39
+ assignee: '王五',
40
+ status: 'rejected',
41
+ createTime: '2024-01-01 11:00:00',
42
+ endTime: '2024-01-01 11:20:00',
43
+ comment: '驳回:请补充材料后重新提交',
44
+ duration: '20分钟'
45
+ },
46
+ {
47
+ id: '4',
48
+ name: '待处理',
49
+ assignee: '--',
50
+ status: 'pending',
51
+ createTime: null,
52
+ endTime: null,
53
+ comment: '',
54
+ duration: ''
55
+ }
56
+ ]
57
+ }
58
+ }
59
+ }
60
+ </script>
61
+ ```
62
+ :::
63
+
64
+ ## 示例
65
+
66
+ ### Flowable 原生数据对接
67
+
68
+ 直接传入 Flowable 返回的 `HistoricTaskInstance` 数据,组件自动解析状态。
69
+
70
+ ::: demo Flowable 原生数据对接
71
+ ```vue
72
+ <template>
73
+ <XtFlow :data="flowableData" format="flowable" />
74
+ </template>
75
+
76
+ <script>
77
+ export default {
78
+ data() {
79
+ return {
80
+ flowableData: [
81
+ {
82
+ id: '50001',
83
+ name: '直属领导审批',
84
+ assignee: '李四',
85
+ startTime: '2024-01-01T10:30:00',
86
+ endTime: '2024-01-01T10:45:00',
87
+ deleteReason: null,
88
+ durationInMillis: 900000
89
+ },
90
+ {
91
+ id: '50002',
92
+ name: '部门经理审批',
93
+ assignee: '王五',
94
+ startTime: '2024-01-01T11:00:00',
95
+ endTime: '2024-01-01T11:20:00',
96
+ deleteReason: 'rejected',
97
+ durationInMillis: 1200000
98
+ },
99
+ {
100
+ id: '50003',
101
+ name: '总监审批',
102
+ assignee: '赵六',
103
+ startTime: '2024-01-01T14:00:00',
104
+ endTime: null,
105
+ deleteReason: null
106
+ }
107
+ ]
108
+ }
109
+ }
110
+ }
111
+ </script>
112
+ ```
113
+ :::
114
+
115
+ ### 自动折叠长审批链
116
+
117
+ 当审批链超过指定数量时,自动折叠多余节点,点击可展开。
118
+
119
+ ::: demo 自动折叠长审批链
120
+ ```vue
121
+ <template>
122
+ <XtFlow :data="longFlowData" :collapse-count="3" />
123
+ </template>
124
+
125
+ <script>
126
+ export default {
127
+ data() {
128
+ const data = []
129
+ for (let i = 1; i <= 10; i++) {
130
+ data.push({
131
+ id: `flow-${i}`,
132
+ name: `审批节点 ${i}`,
133
+ assignee: `审批人 ${i}`,
134
+ status: i === 10 ? 'pending' : 'approved',
135
+ createTime: `2024-01-0${i} 10:00:00`,
136
+ endTime: i === 10 ? null : `2024-01-0${i} 10:30:00`,
137
+ comment: i === 5 ? '需要补充说明' : '',
138
+ duration: i === 10 ? '' : '30分钟'
139
+ })
140
+ }
141
+ return { longFlowData: data }
142
+ }
143
+ }
144
+ </script>
145
+ ```
146
+ :::
147
+
148
+ ### 圆角风格
149
+
150
+ 支持方形和圆形两套圆角规范。
151
+
152
+ ::: demo 圆角风格
153
+ ```vue
154
+ <template>
155
+ <div style="display: flex; gap: 24px;">
156
+ <XtFlow :data="flowData" rounded="square" />
157
+ <XtFlow :data="flowData" rounded="round" />
158
+ </div>
159
+ </template>
160
+
161
+ <script>
162
+ export default {
163
+ data() {
164
+ return {
165
+ flowData: [
166
+ {
167
+ id: '1',
168
+ name: '提交申请',
169
+ assignee: '张三',
170
+ status: 'approved',
171
+ createTime: '2024-01-01 10:00:00',
172
+ comment: ''
173
+ },
174
+ {
175
+ id: '2',
176
+ name: '直属领导审批',
177
+ assignee: '李四',
178
+ status: 'pending',
179
+ createTime: '2024-01-01 10:30:00',
180
+ comment: ''
181
+ }
182
+ ]
183
+ }
184
+ }
185
+ }
186
+ </script>
187
+ ```
188
+ :::
189
+
190
+ ### 自定义操作按钮
191
+
192
+ 通过插槽自定义节点操作按钮。
193
+
194
+ ::: demo 自定义操作按钮
195
+ ```vue
196
+ <template>
197
+ <XtFlow :data="flowData">
198
+ <template #node-action="{ node }">
199
+ <el-button v-if="node.status === 'pending'" type="primary" size="mini">通过</el-button>
200
+ <el-button v-if="node.status === 'pending'" type="danger" size="mini">驳回</el-button>
201
+ <el-button v-if="node.status === 'approved'" type="text" size="mini">查看详情</el-button>
202
+ </template>
203
+ </XtFlow>
204
+ </template>
205
+
206
+ <script>
207
+ export default {
208
+ data() {
209
+ return {
210
+ flowData: [
211
+ {
212
+ id: '1',
213
+ name: '提交申请',
214
+ assignee: '张三',
215
+ status: 'approved',
216
+ createTime: '2024-01-01 10:00:00'
217
+ },
218
+ {
219
+ id: '2',
220
+ name: '直属领导审批',
221
+ assignee: '李四',
222
+ status: 'pending',
223
+ createTime: '2024-01-01 10:30:00'
224
+ }
225
+ ]
226
+ }
227
+ }
228
+ }
229
+ </script>
230
+ ```
231
+ :::
232
+
233
+ ### 自定义节点头像
234
+
235
+ 通过插槽自定义节点图标或头像。
236
+
237
+ ::: demo 自定义节点头像
238
+ ```vue
239
+ <template>
240
+ <XtFlow :data="flowData">
241
+ <template #node-avatar="{ node }">
242
+ <el-avatar v-if="node.assignee" :size="20" icon="el-icon-user"></el-avatar>
243
+ <el-icon v-else :size="16">
244
+ <el-icon-loading v-if="node.status === 'pending'" />
245
+ <el-icon-check v-else-if="node.status === 'approved'" />
246
+ <el-icon-close v-else-if="node.status === 'rejected'" />
247
+ <el-icon-user v-else />
248
+ </el-icon>
249
+ </template>
250
+ </XtFlow>
251
+ </template>
252
+
253
+ <script>
254
+ export default {
255
+ data() {
256
+ return {
257
+ flowData: [
258
+ {
259
+ id: '1',
260
+ name: '提交申请',
261
+ assignee: '张三',
262
+ status: 'approved',
263
+ createTime: '2024-01-01 10:00:00'
264
+ },
265
+ {
266
+ id: '2',
267
+ name: '直属领导审批',
268
+ assignee: '',
269
+ status: 'pending',
270
+ createTime: '2024-01-01 10:30:00'
271
+ }
272
+ ]
273
+ }
274
+ }
275
+ }
276
+ </script>
277
+ ```
278
+ :::
279
+
280
+ ### 自定义状态文本
281
+
282
+ 通过 `statusMap` 属性自定义状态显示文本。
283
+
284
+ ::: demo 自定义状态文本
285
+ ```vue
286
+ <template>
287
+ <XtFlow
288
+ :data="flowData"
289
+ :status-map="{
290
+ approved: '✓ 审核通过',
291
+ rejected: '✗ 审核驳回',
292
+ pending: '⏳ 等待审核',
293
+ transferred: '➡️ 已转办'
294
+ }"
295
+ />
296
+ </template>
297
+
298
+ <script>
299
+ export default {
300
+ data() {
301
+ return {
302
+ flowData: [
303
+ {
304
+ id: '1',
305
+ name: '提交申请',
306
+ assignee: '张三',
307
+ status: 'approved',
308
+ createTime: '2024-01-01 10:00:00'
309
+ },
310
+ {
311
+ id: '2',
312
+ name: '直属领导审批',
313
+ assignee: '李四',
314
+ status: 'pending',
315
+ createTime: '2024-01-01 10:30:00'
316
+ }
317
+ ]
318
+ }
319
+ }
320
+ }
321
+ </script>
322
+ ```
323
+ :::
324
+
325
+ ## 属性说明
326
+
327
+ | 属性 | 类型 | 默认值 | 可选值 | 说明 |
328
+ |------|------|--------|--------|------|
329
+ | `data` | Array | `[]` | - | 数据源,支持 Flowable 原始格式或自定义格式 |
330
+ | `format` | String | `flowable` | `flowable`、`custom` | 数据格式,`flowable` 自动解析状态,`custom` 直接使用 |
331
+ | `collapse` | Boolean | `true` | - | 是否自动折叠长审批链 |
332
+ | `collapseCount` | Number | `5` | - | 折叠前可见节点数 |
333
+ | `rounded` | String | `square` | `square`、`round` | 圆角风格,方形或圆形 |
334
+ | `timeFormat` | String | `YYYY-MM-DD HH:mm:ss` | - | 时间格式化字符串(仅 `format='flowable'` 时生效) |
335
+ | `statusMap` | Object | - | - | 自定义状态文本映射 |
336
+
337
+ ## 状态值说明
338
+
339
+ | 状态值 | 默认文本 | 说明 |
340
+ |--------|----------|------|
341
+ | `approved` | 已通过 | 有结束时间且无驳回原因 |
342
+ | `rejected` | 已驳回 | `deleteReason` 包含 reject/驳回 |
343
+ | `pending` | 待审批 | 无结束时间或最后节点自动追加 |
344
+ | `transferred` | 已转办 | `deleteReason` 包含 transfer/转办 |
345
+ | `delegated` | 已委托 | `deleteReason` 包含 delegate/委托 |
346
+ | `recalled` | 已撤回 | `deleteReason` 包含 revoke/撤回/recall |
347
+ | `cancelled` | 已取消 | `deleteReason` 包含 cancel/取消 |
348
+ | `started` | 已发起 | 流程起始节点 |
349
+
350
+ ## 插槽说明
351
+
352
+ | 插槽名 | 作用域 | 说明 |
353
+ |--------|--------|------|
354
+ | `node-avatar` | `{ node, index }` | 自定义节点图标/头像 |
355
+ | `node` | `{ node, index }` | 自定义节点标题 |
356
+ | `assignee` | `{ node, index }` | 自定义审批人显示 |
357
+ | `node-desc` | `{ node, index }` | 自定义描述/审批意见 |
358
+ | `node-action` | `{ node, index }` | 自定义节点操作按钮 |
359
+ | `expand-trigger` | - | 自定义展开触发器内容 |
360
+ | `collapse-trigger` | - | 自定义收起触发器内容 |
361
+
362
+ ## Flowable 数据格式
363
+
364
+ 组件支持直接对接 Flowable 工作流引擎返回的 `HistoricTaskInstance` 数据格式:
365
+
366
+ ```javascript
367
+ {
368
+ id: '50001', // 任务ID
369
+ name: '部门经理审批', // 任务名称
370
+ taskName: '部门经理审批', // 任务名称(兼容字段)
371
+ activityName: '部门经理审批', // 活动名称(兼容字段)
372
+ assignee: '张三', // 审批人
373
+ startTime: '2024-01-01T10:00:00', // 开始时间
374
+ endTime: '2024-01-01T10:30:00', // 结束时间(null 表示待办)
375
+ deleteReason: null, // 删除原因(rejected/delegate/transfer 等)
376
+ durationInMillis: 1800000, // 耗时(毫秒)
377
+ type: 'userTask' // 节点类型(startEvent/userTask/endEvent)
378
+ }
379
+ ```
380
+
381
+ ## 自定义数据格式
382
+
383
+ 使用 `format="custom"` 时,数据格式如下:
384
+
385
+ ```javascript
386
+ {
387
+ id: '1', // 节点ID
388
+ name: '提交申请', // 节点名称
389
+ assignee: '张三', // 审批人
390
+ status: 'approved', // 状态(必填)
391
+ createTime: '2024-01-01 10:00:00', // 创建时间
392
+ endTime: '2024-01-01 10:05:00', // 结束时间
393
+ comment: '', // 审批意见/驳回原因
394
+ duration: '5分钟', // 耗时
395
+ description: '' // 描述信息
396
+ }
397
+ ```
398
+
399
+ ## 注意事项
400
+
401
+ - 组件自动推断状态:有 `endTime` 且无 `deleteReason` 为通过状态,`deleteReason` 包含 `reject` 为驳回状态
402
+ - 当 `format='flowable'` 且最后一个节点不是 `pending` 状态时,组件会自动追加一个待办节点
403
+ - 连接线样式根据前一个节点的状态决定,驳回状态自动显示红色虚线
404
+ - 待办节点的图标会有脉冲动画效果,提示用户当前待处理
@@ -164,7 +164,7 @@ export default {
164
164
 
165
165
  ### 虚拟滚动
166
166
 
167
- 大数据量场景下启用虚拟滚动,仅渲染可见区域的卡片。
167
+ 大数据量场景下启用虚拟滚动,仅渲染可见区域的卡片。组件内部使用 `XtScroll`(原生滚动容器)作为滚动容器,提供流畅的滚动体验。
168
168
 
169
169
  ::: demo 虚拟滚动
170
170
  ```vue
@@ -52,14 +52,13 @@ export default {
52
52
  | `highlightKey` | String | - | 高亮系列的 label |
53
53
  | `config` | Object | - | 配置对象 |
54
54
 
55
- ## config 配置说明
55
+ ## 配置说明
56
56
 
57
57
  | 属性 | 类型 | 默认值 | 说明 |
58
58
  |------|------|--------|------|
59
- | `interval` | Number | `0` | X 轴标签间隔 |
60
- | `rotate` | Number | `0` | X 轴标签旋转角度 |
61
- | `gridbottom` | Number | `40` | 底部网格间距 |
62
- | `isShowthreshold` | Boolean | `false` | 是否显示阈值线 |
59
+ | `type` | Number | `40` | 底部网格间距 |
60
+ | `areaStyle` | Number | `0` | X 轴标签旋转角度 |
61
+ | `smooth` | Number | `0` | X 轴标签间隔 |
63
62
 
64
63
  ## 示例
65
64
 
@@ -138,6 +137,7 @@ export default {
138
137
  label: "增长率",
139
138
  unit: "%",
140
139
  type: "line",
140
+ areaStyle: true,
141
141
  data: [
142
142
  { label: "1月", value: 10 },
143
143
  { label: "2月", value: 20 },
@@ -1,4 +1,4 @@
1
- 滚动箭头组件用于在内容溢出时显示滚动箭头,支持水平和垂直方向的滚动。
1
+ 滚动箭头组件用于在内容溢出时显示滚动箭头,支持水平和垂直方向的滚动。基于 `XtScroll` 封装,支持虚拟滚动模式处理海量数据。
2
2
 
3
3
  ## 基本用法
4
4
 
@@ -24,11 +24,27 @@
24
24
  | `autoHide` | Boolean | true | - | 是否自动隐藏箭头(滚动到边界时隐藏) |
25
25
  | `height` | String / Number | - | - | 容器高度 |
26
26
  | `width` | String / Number | - | - | 容器宽度 |
27
+ | `v-scroll` | Boolean | false | - | 是否启用虚拟滚动 |
28
+ | `v-scroll-data` | Array | [] | - | 虚拟滚动数据源 |
29
+ | `item-size` | Number | 50 | - | 每个 item 的固定尺寸(px) |
30
+ | `key-field` | String | 'id' | - | item 的唯一键字段名 |
31
+ | `buffer-size` | Number | 5 | - | 预渲染缓冲区大小 |
32
+ | `v-scroll-loading` | Boolean | false | - | 虚拟滚动加载状态 |
33
+ | `load-more` | Boolean | false | - | 是否启用加载更多 |
34
+ | `load-more-text` | String | '加载更多' | - | 加载更多按钮文字 |
35
+ | `load-more-loading` | Boolean | false | - | 加载更多按钮加载状态 |
36
+
37
+ ## 插槽说明
38
+ | 插槽名 | 作用域 | 说明 |
39
+ |--------|--------|------|
40
+ | `default` | — | 非虚拟滚动模式下的默认内容 |
41
+ | `vitem` | `{ item, index }` | 虚拟滚动模式下每个 item 的渲染内容 |
27
42
 
28
43
  ## 事件说明
29
44
  | 事件名称 | 说明 | 参数 |
30
45
  |----------|------|------|
31
46
  | `scroll` | 滚动时触发 | `scrollContainer` - 滚动容器元素 |
47
+ | `load-more` | 触发加载更多 | — |
32
48
 
33
49
  ## 示例
34
50
 
@@ -153,4 +169,74 @@ export default {
153
169
  </XtScrollArrow>
154
170
  </template>
155
171
  ```
172
+ :::
173
+
174
+ ### 虚拟滚动(水平)
175
+
176
+ ::: demo 虚拟滚动(水平)—— 渲染 5000 条数据
177
+ ```vue
178
+ <template>
179
+ <XtScrollArrow
180
+ direction="horizontal"
181
+ :v-scroll="true"
182
+ :v-scroll-data="tagData"
183
+ :item-size="120"
184
+ >
185
+ <template #vitem="{ item }">
186
+ <div style="width: 100px; height: 40px; display: flex; align-items: center; justify-content: center; background: #ecf5ff; border-radius: 4px; margin: 0 4px; color: #409eff; font-size: 13px;">
187
+ {{ item.label }}
188
+ </div>
189
+ </template>
190
+ </XtScrollArrow>
191
+ </template>
192
+ <script>
193
+ export default {
194
+ data() {
195
+ return {
196
+ tagData: Array.from({ length: 5000 }, (_, i) => ({
197
+ id: i,
198
+ label: `标签 ${i + 1}`
199
+ }))
200
+ }
201
+ }
202
+ }
203
+ </script>
204
+ ```
205
+ :::
206
+
207
+ ### 虚拟滚动(垂直)
208
+
209
+ ::: demo 虚拟滚动(垂直)—— 渲染 5000 条数据
210
+ ```vue
211
+ <template>
212
+ <XtScrollArrow
213
+ direction="vertical"
214
+ :height="200"
215
+ :v-scroll="true"
216
+ :v-scroll-data="listData"
217
+ :item-size="48"
218
+ >
219
+ <template #vitem="{ item, index }">
220
+ <div style="height: 48px; display: flex; align-items: center; padding: 0 12px; border-bottom: 1px solid #ebeef5; gap: 8px;">
221
+ <span style="color: #909399; font-size: 12px;">{{ index + 1 }}</span>
222
+ <span>{{ item.name }}</span>
223
+ <span style="color: #909399; font-size: 12px; margin-left: auto;">{{ item.desc }}</span>
224
+ </div>
225
+ </template>
226
+ </XtScrollArrow>
227
+ </template>
228
+ <script>
229
+ export default {
230
+ data() {
231
+ return {
232
+ listData: Array.from({ length: 5000 }, (_, i) => ({
233
+ id: i,
234
+ name: `用户 ${i + 1}`,
235
+ desc: `部门 ${(i % 10) + 1}`
236
+ }))
237
+ }
238
+ }
239
+ }
240
+ </script>
241
+ ```
156
242
  :::