xt-element-ui 2.2.1 → 2.2.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 (139) hide show
  1. package/README.md +1 -1
  2. package/docs/README.md +10 -3
  3. package/docs/components/base/xt-button.md +11 -4
  4. package/docs/components/base/xt-card.md +5 -11
  5. package/docs/components/base/xt-config-provider.md +2 -0
  6. package/docs/components/base/xt-date-picker.md +7 -26
  7. package/docs/components/base/xt-flow.md +404 -0
  8. package/docs/components/base/xt-grid-box.md +34 -34
  9. package/docs/components/base/xt-multi.md +5 -5
  10. package/docs/components/base/xt-tabs.md +51 -6
  11. package/docs/components/base/xt-text.md +20 -3
  12. package/docs/components/business/xt-chart.md +1 -0
  13. package/lib/css/1.87a493be.css +1 -0
  14. package/lib/index.common.1.js +294 -0
  15. package/lib/index.common.2.js +141 -0
  16. package/lib/index.common.js +12125 -118823
  17. package/lib/index.css +1 -1
  18. package/lib/index.umd.1.js +294 -0
  19. package/lib/index.umd.2.js +141 -0
  20. package/lib/index.umd.js +12131 -118828
  21. package/lib/index.umd.min.1.js +1 -0
  22. package/lib/index.umd.min.2.js +1 -0
  23. package/lib/index.umd.min.js +1 -1
  24. package/lib/xt-badge/xt-badge.common.js +1 -1
  25. package/lib/xt-badge/xt-badge.css +1 -1
  26. package/lib/xt-badge/xt-badge.umd.js +1 -1
  27. package/lib/xt-button/xt-button.common.js +13 -8
  28. package/lib/xt-button/xt-button.css +1 -1
  29. package/lib/xt-button/xt-button.umd.js +13 -8
  30. package/lib/xt-button/xt-button.umd.min.js +1 -1
  31. package/lib/xt-card/xt-card.common.js +5 -5
  32. package/lib/xt-card/xt-card.umd.js +5 -5
  33. package/lib/xt-card/xt-card.umd.min.js +1 -1
  34. package/lib/xt-card-item/xt-card-item.common.js +4 -4
  35. package/lib/xt-card-item/xt-card-item.umd.js +4 -4
  36. package/lib/xt-card-item/xt-card-item.umd.min.js +1 -1
  37. package/lib/xt-chart/xt-chart.common.js +1969 -108924
  38. package/lib/xt-chart/xt-chart.css +1 -1
  39. package/lib/xt-chart/xt-chart.umd.js +1975 -108929
  40. package/lib/xt-chart/xt-chart.umd.min.js +1 -1
  41. package/lib/xt-config-provider/xt-config-provider.common.js +561 -107504
  42. package/lib/xt-config-provider/xt-config-provider.css +1 -1
  43. package/lib/xt-config-provider/xt-config-provider.umd.js +567 -107509
  44. package/lib/xt-config-provider/xt-config-provider.umd.min.js +1 -1
  45. package/lib/xt-date-picker/css/1.87a493be.css +1 -0
  46. package/lib/xt-date-picker/xt-date-picker.common.1.js +294 -0
  47. package/lib/xt-date-picker/xt-date-picker.common.2.js +141 -0
  48. package/lib/xt-date-picker/xt-date-picker.common.js +201 -332
  49. package/lib/xt-date-picker/xt-date-picker.css +1 -1
  50. package/lib/xt-date-picker/xt-date-picker.umd.1.js +294 -0
  51. package/lib/xt-date-picker/xt-date-picker.umd.2.js +141 -0
  52. package/lib/xt-date-picker/xt-date-picker.umd.js +201 -332
  53. package/lib/xt-date-picker/xt-date-picker.umd.min.1.js +1 -0
  54. package/lib/xt-date-picker/xt-date-picker.umd.min.2.js +1 -0
  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 +1 -1
  75. package/lib/xt-list/xt-list.umd.js +1 -1
  76. package/lib/xt-map/xt-map.common.js +1 -1
  77. package/lib/xt-map/xt-map.umd.js +1 -1
  78. package/lib/xt-map-provider/xt-map-provider.common.js +1 -1
  79. package/lib/xt-map-provider/xt-map-provider.umd.js +1 -1
  80. package/lib/xt-page/xt-page.common.js +1 -1
  81. package/lib/xt-page/xt-page.umd.js +1 -1
  82. package/lib/xt-progress/xt-progress.common.js +1 -1
  83. package/lib/xt-progress/xt-progress.umd.js +1 -1
  84. package/lib/xt-scroll-arrow/xt-scroll-arrow.common.js +1 -1
  85. package/lib/xt-scroll-arrow/xt-scroll-arrow.umd.js +1 -1
  86. package/lib/xt-select-tree/xt-select-tree.common.js +1 -1
  87. package/lib/xt-select-tree/xt-select-tree.umd.js +1 -1
  88. package/lib/xt-step-price/xt-step-price.common.js +2 -2
  89. package/lib/xt-step-price/xt-step-price.umd.js +2 -2
  90. package/lib/xt-step-price-item/xt-step-price-item.common.js +1 -1
  91. package/lib/xt-step-price-item/xt-step-price-item.umd.js +1 -1
  92. package/lib/xt-tab-pane/xt-tab-pane.common.js +1 -1
  93. package/lib/xt-tab-pane/xt-tab-pane.umd.js +1 -1
  94. package/lib/xt-table/xt-table.common.js +2 -2
  95. package/lib/xt-table/xt-table.umd.js +2 -2
  96. package/lib/xt-tabs/xt-tabs.common.js +5 -27
  97. package/lib/xt-tabs/xt-tabs.css +1 -1
  98. package/lib/xt-tabs/xt-tabs.umd.js +5 -27
  99. package/lib/xt-tabs/xt-tabs.umd.min.js +1 -1
  100. package/lib/xt-text/xt-text.common.js +7 -4
  101. package/lib/xt-text/xt-text.css +1 -1
  102. package/lib/xt-text/xt-text.umd.js +7 -4
  103. package/lib/xt-text/xt-text.umd.min.js +1 -1
  104. package/lib/xt-time/xt-time.common.js +1 -1
  105. package/lib/xt-time/xt-time.umd.js +1 -1
  106. package/lib/xt-transfer-tree/xt-transfer-tree.common.js +1 -1
  107. package/lib/xt-transfer-tree/xt-transfer-tree.umd.js +1 -1
  108. package/lib/xt-upload/xt-upload.common.js +11 -11
  109. package/lib/xt-upload/xt-upload.umd.js +12 -12
  110. package/lib/xt-upload/xt-upload.umd.min.js +1 -1
  111. package/package.json +5 -6
  112. package/src/components/index.scss +7 -1
  113. package/src/components/xt-badge/style/index.scss +6 -6
  114. package/src/components/xt-button/index.vue +11 -6
  115. package/src/components/xt-button/style/index.scss +7 -5
  116. package/src/components/xt-card/index.vue +3 -3
  117. package/src/components/xt-card-item/index.vue +2 -2
  118. package/src/components/xt-chart/XtMulti.vue +8 -18
  119. package/src/components/xt-chart/XtPie.vue +1 -0
  120. package/src/components/xt-chart/utils.js +84 -50
  121. package/src/components/xt-config-provider/index.vue +56 -54
  122. package/src/components/xt-date-picker/component/Picker.vue +2 -46
  123. package/src/components/xt-date-picker/component/RangeDate.vue +4 -4
  124. package/src/components/xt-date-picker/index.js +1 -0
  125. package/src/components/xt-date-picker/index.vue +3 -23
  126. package/src/components/xt-date-picker/style/index.scss +62 -0
  127. package/src/components/xt-flow/flowable-parser.js +244 -0
  128. package/src/components/xt-flow/index.js +8 -0
  129. package/src/components/xt-flow/index.vue +226 -0
  130. package/src/components/xt-flow/style/index.scss +359 -0
  131. package/src/components/xt-input/style/index.scss +1 -1
  132. package/src/components/xt-tabs/index.vue +3 -174
  133. package/src/components/xt-tabs/style/index.scss +131 -121
  134. package/src/components/xt-text/index.vue +5 -2
  135. package/src/components/xt-text/style/index.scss +6 -6
  136. package/src/index.js +8 -13
  137. package/src/styles/css-variables.scss +73 -1
  138. package/src/styles/theme/index.scss +0 -1
  139. package/src/styles/theme/dark-variables.scss +0 -0
package/README.md CHANGED
@@ -179,7 +179,7 @@ xt-element-ui/
179
179
  │ ├── utils/ # 工具函数
180
180
  │ └── index.js # 组件库入口
181
181
 
182
- ├── examples/ # 本地开发示例
182
+ ├── public/ # 本地开发示例
183
183
  ├── lib/ # 构建产物(git 忽略)
184
184
 
185
185
  ├── .github/ # GitHub 配置
package/docs/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  home: true
3
- heroImage: /favicon.ico
3
+ # heroImage: /favicon.ico
4
4
  heroText: XT-Element-UI
5
5
  tagline: 基于 Vue 2.7 + ElementUI 的企业级组件库
6
6
  actionText: 🚀 快速上手
7
7
  actionLink: /components/base/xt-button
8
8
  features:
9
9
  - title: 🎯 丰富的组件
10
- details: 提供 20+ 组件,覆盖布局、表单、数据展示、图表等常见场景
10
+ details: 提供 30+ 组件,覆盖布局、表单、数据展示、图表、工作流等常见场景
11
11
  - title: 📦 开箱即用
12
12
  details: 基于 ElementUI 构建,与现有 ElementUI 项目无缝集成
13
13
  - title: 🪶 按需引入
@@ -50,12 +50,16 @@ Vue.use(XtElementUI)
50
50
  | **XtCardItem** | 卡片项组件 |
51
51
  | **XtFlexBox** | 弹性布局组件 |
52
52
  | **XtGridBox** | 网格布局组件 |
53
+ | **XtGridItem** | 网格项组件 |
53
54
  | **XtText** | 文本组件 |
54
55
  | **XtTime** | 时间组件(当前时间/倒计时/日期格式化) |
55
56
  | **XtInput** | 输入框组件 |
56
57
  | **XtConfigProvider** | 全局配置提供器 |
57
58
  | **XtMap** | 统一地图组件(支持高德/天地图/百度) |
59
+ | **XtMapProvider** | 地图提供器 |
58
60
  | **XtStepPrice** | 阶梯价格组件 |
61
+ | **XtStepPriceItem** | 阶梯价格项组件 |
62
+ | **XtList** | 卡片列表组件 |
59
63
 
60
64
  ### 🔧 扩展组件
61
65
 
@@ -69,8 +73,12 @@ Vue.use(XtElementUI)
69
73
  | **XtPage** | 页面组件 |
70
74
  | **XtProgress** | 进度条组件 |
71
75
  | **XtTabs** | 标签页组件 |
76
+ | **XtTabPane** | 标签页面板组件 |
72
77
  | **XtBadge** | 徽标组件 |
73
78
  | **XtScrollArrow** | 滚动箭头组件 |
79
+ | **XtTransferTree** | 树形穿梭框组件 |
80
+ | **XtFormSchema** | 表单配置化搜索组件 |
81
+ | **XtFlow** | 审批流程轨迹组件(支持 Flowable 工作流对接) |
74
82
 
75
83
  ### 📊 图表组件
76
84
 
@@ -108,4 +116,3 @@ Vue.use(XtElementUI)
108
116
  - **[GitHub 仓库](https://github.com/JobWebNie/xt-element-ui)**
109
117
 
110
118
 
111
- # 在 GitHub 新建仓库后
@@ -18,6 +18,9 @@
18
18
  | `plain` | Boolean | false | - | 是否为朴素按钮 |
19
19
  | `disabled` | Boolean | false | - | 是否禁用按钮 |
20
20
  | `round` | Boolean | false | - | 是否为圆角按钮 |
21
+ | `square` | Boolean | false | - | 是否为正方形按钮 |
22
+ | `circle` | Boolean | false | - | 是否为圆形按钮 |
23
+
21
24
 
22
25
  ## 事件说明
23
26
 
@@ -31,11 +34,13 @@
31
34
  ::: demo 不同类型的按钮
32
35
  ```vue
33
36
  <template>
34
- <div style="display: flex; gap: 12px;">
37
+ <div style="display: inline-flex; gap: 12px;">
38
+ <XtButton>默认按钮</XtButton>
35
39
  <XtButton type="primary">主要按钮</XtButton>
36
40
  <XtButton type="success">成功按钮</XtButton>
37
41
  <XtButton type="warning">警告按钮</XtButton>
38
42
  <XtButton type="danger">危险按钮</XtButton>
43
+ <XtButton type="info">信息按钮</XtButton>
39
44
  </div>
40
45
  </template>
41
46
  ```
@@ -45,7 +50,7 @@
45
50
  ::: demo 不同尺寸的按钮
46
51
  ```vue
47
52
  <template>
48
- <div style="display: flex; gap: 12px; align-items: center;">
53
+ <div style="display: inline-flex; gap: 12px; align-items: center;">
49
54
  <XtButton size="large">大号按钮</XtButton>
50
55
  <XtButton>默认按钮</XtButton>
51
56
  <XtButton size="small">小号按钮</XtButton>
@@ -59,7 +64,7 @@
59
64
  ::: demo 朴素按钮
60
65
  ```vue
61
66
  <template>
62
- <div style="display: flex; gap: 12px;">
67
+ <div style="display: inline-flex; gap: 12px;">
63
68
  <XtButton type="primary" plain>朴素主按钮</XtButton>
64
69
  <XtButton type="success" plain>朴素成功按钮</XtButton>
65
70
  <XtButton type="warning" plain>朴素警告按钮</XtButton>
@@ -73,11 +78,13 @@
73
78
  ::: demo 状态按钮
74
79
  ```vue
75
80
  <template>
76
- <div style="display: flex; gap: 12px;">
81
+ <div style="display: inline-flex; gap: 12px;">
77
82
  <XtButton disabled>禁用按钮</XtButton>
78
83
  <XtButton round>圆角按钮</XtButton>
79
84
  <XtButton type="primary" disabled>禁用主按钮</XtButton>
80
85
  <XtButton type="primary" round>圆角主按钮</XtButton>
86
+ <XtButton type="success" icon="el-icon-plus" circle></XtButton>
87
+ <XtButton type="success" icon="el-icon-plus" square></XtButton>
81
88
  </div>
82
89
  </template>
83
90
  ```
@@ -5,7 +5,7 @@
5
5
  ::: demo 基本用法
6
6
  ```vue
7
7
  <template>
8
- <XtCard title="卡片标题" value="123" unit="元"></XtCard>
8
+ <XtCard title="卡片标题"></XtCard>
9
9
  </template>
10
10
  ```
11
11
  :::
@@ -17,7 +17,7 @@
17
17
  ::: demo 基础卡片
18
18
  ```vue
19
19
  <template>
20
- <XtCard title="今日销售额" :value="123456" unit="元"></XtCard>
20
+ <XtCard title="今日销售额"></XtCard>
21
21
  </template>
22
22
  ```
23
23
  :::
@@ -49,12 +49,10 @@
49
49
  ```vue
50
50
  <template>
51
51
  <XtCard>
52
- <template #title>
52
+ <template v-slot:title>
53
53
  <span style="color: #1890ff;">📊 数据分析</span>
54
54
  </template>
55
- <template #value>
56
- <span style="font-size: 32px; color: #52c41a;">98.5%</span>
57
- </template>
55
+ <span style="font-size: 32px; color: #52c41a;">98.5%</span>
58
56
  </XtCard>
59
57
  </template>
60
58
  ```
@@ -93,14 +91,10 @@
93
91
  | 属性 | 类型 | 默认值 | 说明 |
94
92
  |------|------|--------|------|
95
93
  | `title` | String | - | 卡片标题 |
96
- | `value` | String / Number | - | 卡片数值 |
97
- | `unit` | String | - | 数值单位 |
98
- | `noPadding` | Boolean | false | 是否取消内边距 |
99
94
 
100
95
  ## 插槽说明
101
96
 
102
97
  | 插槽名 | 说明 |
103
98
  |--------|------|
104
99
  | `default` | 自定义内容区域 |
105
- | `title` | 自定义标题区域 |
106
- | `value` | 自定义数值区域 |
100
+ | `header` | 自定义头部区域 |
@@ -127,6 +127,7 @@
127
127
  <XtConfigProvider
128
128
  :primaryColor="primaryColor"
129
129
  :theme="currentTheme"
130
+ :brand="brand"
130
131
  injectBackground
131
132
  >
132
133
  <div style="min-height: 120px; padding: 16px;">
@@ -160,6 +161,7 @@
160
161
  export default {
161
162
  data() {
162
163
  return {
164
+ brand: 'water',
163
165
  primaryColor: '#1890ff',
164
166
  currentTheme: 'light',
165
167
  colors: ['#1890ff', '#52c41a', '#faad14', '#f5222d', '#722ed1']
@@ -45,12 +45,12 @@ export default {
45
45
 
46
46
  ## 示例
47
47
 
48
- ### 日期范围选择
48
+ ### 范围选择
49
49
 
50
- ::: demo 日期范围选择
50
+ ::: demo 日期选择
51
51
  ```vue
52
52
  <template>
53
- <XtDatePicker v-model="dateRange" rangeMode="true" />
53
+ <XtDatePicker v-model="dateRange" :rangeMode="true" />
54
54
  </template>
55
55
 
56
56
  <script>
@@ -65,9 +65,9 @@ export default {
65
65
  ```
66
66
  :::
67
67
 
68
- ### 月份范围选择
68
+ ### 月份选择
69
69
 
70
- ::: demo 月份范围选择
70
+ ::: demo 月份选择
71
71
  ```vue
72
72
  <template>
73
73
  <XtDatePicker v-model="monthRange" dateType="month" />
@@ -85,9 +85,9 @@ export default {
85
85
  ```
86
86
  :::
87
87
 
88
- ### 年份范围选择
88
+ ### 年份选择
89
89
 
90
- ::: demo 年份范围选择
90
+ ::: demo 年份选择
91
91
  ```vue
92
92
  <template>
93
93
  <XtDatePicker v-model="yearRange" dateType="year" />
@@ -125,25 +125,6 @@ export default {
125
125
  ```
126
126
  :::
127
127
 
128
- ### 单选模式
129
-
130
- ::: demo 单选模式
131
- ```vue
132
- <template>
133
- <XtDatePicker v-model="singleDate" :range-mode="false" />
134
- </template>
135
-
136
- <script>
137
- export default {
138
- data() {
139
- return {
140
- singleDate: null
141
- }
142
- }
143
- }
144
- </script>
145
- ```
146
- :::
147
128
 
148
129
  ### 时间维度选择(统计分析)
149
130
 
@@ -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
+ - 待办节点的图标会有脉冲动画效果,提示用户当前待处理