xt-element-ui 2.2.2 → 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.
- package/README.md +1 -1
- package/docs/README.md +10 -3
- package/docs/components/base/xt-button.md +11 -4
- package/docs/components/base/xt-card.md +5 -11
- package/docs/components/base/xt-config-provider.md +2 -0
- package/docs/components/base/xt-flow.md +404 -0
- package/docs/components/base/xt-multi.md +5 -5
- package/docs/components/business/xt-chart.md +1 -0
- package/lib/index.common.1.js +2 -2
- package/lib/index.common.2.js +1 -1
- package/lib/index.common.js +11462 -118010
- package/lib/index.css +1 -1
- package/lib/index.umd.1.js +2 -2
- package/lib/index.umd.2.js +1 -1
- package/lib/index.umd.js +11468 -118015
- package/lib/index.umd.min.js +1 -1
- package/lib/xt-badge/xt-badge.common.js +1 -1
- package/lib/xt-badge/xt-badge.css +1 -1
- package/lib/xt-badge/xt-badge.umd.js +1 -1
- package/lib/xt-button/xt-button.common.js +13 -8
- package/lib/xt-button/xt-button.css +1 -1
- package/lib/xt-button/xt-button.umd.js +13 -8
- package/lib/xt-button/xt-button.umd.min.js +1 -1
- package/lib/xt-card/xt-card.common.js +5 -5
- package/lib/xt-card/xt-card.umd.js +5 -5
- package/lib/xt-card/xt-card.umd.min.js +1 -1
- package/lib/xt-card-item/xt-card-item.common.js +4 -4
- package/lib/xt-card-item/xt-card-item.umd.js +4 -4
- package/lib/xt-card-item/xt-card-item.umd.min.js +1 -1
- package/lib/xt-chart/xt-chart.common.js +1969 -108924
- package/lib/xt-chart/xt-chart.css +1 -1
- package/lib/xt-chart/xt-chart.umd.js +1975 -108929
- package/lib/xt-chart/xt-chart.umd.min.js +1 -1
- package/lib/xt-config-provider/xt-config-provider.common.js +561 -107504
- package/lib/xt-config-provider/xt-config-provider.css +1 -1
- package/lib/xt-config-provider/xt-config-provider.umd.js +567 -107509
- package/lib/xt-config-provider/xt-config-provider.umd.min.js +1 -1
- package/lib/xt-date-picker/xt-date-picker.common.1.js +2 -2
- package/lib/xt-date-picker/xt-date-picker.common.2.js +1 -1
- package/lib/xt-date-picker/xt-date-picker.common.js +1 -1
- package/lib/xt-date-picker/xt-date-picker.css +1 -1
- package/lib/xt-date-picker/xt-date-picker.umd.1.js +2 -2
- package/lib/xt-date-picker/xt-date-picker.umd.2.js +1 -1
- package/lib/xt-date-picker/xt-date-picker.umd.js +1 -1
- package/lib/xt-flex-box/xt-flex-box.common.js +1 -1
- package/lib/xt-flex-box/xt-flex-box.umd.js +1 -1
- package/lib/xt-flow/demo.html +10 -0
- package/lib/xt-flow/index.js +1 -0
- package/lib/xt-flow/xt-flow.common.js +638 -0
- package/lib/xt-flow/xt-flow.css +1 -0
- package/lib/xt-flow/xt-flow.umd.js +648 -0
- package/lib/xt-flow/xt-flow.umd.min.js +1 -0
- package/lib/xt-form-schema/xt-form-schema.common.js +1 -1
- package/lib/xt-form-schema/xt-form-schema.umd.js +1 -1
- package/lib/xt-grid-box/xt-grid-box.common.js +1 -1
- package/lib/xt-grid-box/xt-grid-box.umd.js +1 -1
- package/lib/xt-grid-item/xt-grid-item.common.js +1 -1
- package/lib/xt-grid-item/xt-grid-item.umd.js +1 -1
- package/lib/xt-icon/xt-icon.common.js +1 -1
- package/lib/xt-icon/xt-icon.umd.js +1 -1
- package/lib/xt-input/xt-input.common.js +1 -1
- package/lib/xt-input/xt-input.umd.js +1 -1
- package/lib/xt-list/xt-list.common.js +1 -1
- package/lib/xt-list/xt-list.umd.js +1 -1
- package/lib/xt-map/xt-map.common.js +1 -1
- package/lib/xt-map/xt-map.umd.js +1 -1
- package/lib/xt-map-provider/xt-map-provider.common.js +1 -1
- package/lib/xt-map-provider/xt-map-provider.umd.js +1 -1
- package/lib/xt-page/xt-page.common.js +1 -1
- package/lib/xt-page/xt-page.umd.js +1 -1
- package/lib/xt-progress/xt-progress.common.js +1 -1
- package/lib/xt-progress/xt-progress.umd.js +1 -1
- package/lib/xt-scroll-arrow/xt-scroll-arrow.common.js +1 -1
- package/lib/xt-scroll-arrow/xt-scroll-arrow.umd.js +1 -1
- package/lib/xt-select-tree/xt-select-tree.common.js +1 -1
- package/lib/xt-select-tree/xt-select-tree.umd.js +1 -1
- package/lib/xt-step-price/xt-step-price.common.js +2 -2
- package/lib/xt-step-price/xt-step-price.umd.js +2 -2
- package/lib/xt-step-price-item/xt-step-price-item.common.js +1 -1
- package/lib/xt-step-price-item/xt-step-price-item.umd.js +1 -1
- package/lib/xt-tab-pane/xt-tab-pane.common.js +1 -1
- package/lib/xt-tab-pane/xt-tab-pane.umd.js +1 -1
- package/lib/xt-table/xt-table.common.js +2 -2
- package/lib/xt-table/xt-table.umd.js +2 -2
- package/lib/xt-tabs/xt-tabs.common.js +1 -1
- package/lib/xt-tabs/xt-tabs.umd.js +1 -1
- package/lib/xt-text/xt-text.common.js +1 -1
- package/lib/xt-text/xt-text.css +1 -1
- package/lib/xt-text/xt-text.umd.js +1 -1
- package/lib/xt-time/xt-time.common.js +1 -1
- package/lib/xt-time/xt-time.umd.js +1 -1
- package/lib/xt-transfer-tree/xt-transfer-tree.common.js +1 -1
- package/lib/xt-transfer-tree/xt-transfer-tree.umd.js +1 -1
- package/lib/xt-upload/xt-upload.common.js +11 -11
- package/lib/xt-upload/xt-upload.umd.js +12 -12
- package/lib/xt-upload/xt-upload.umd.min.js +1 -1
- package/package.json +5 -6
- package/src/components/index.scss +4 -1
- package/src/components/xt-badge/style/index.scss +6 -6
- package/src/components/xt-button/index.vue +11 -6
- package/src/components/xt-button/style/index.scss +7 -5
- package/src/components/xt-card/index.vue +3 -3
- package/src/components/xt-card-item/index.vue +2 -2
- package/src/components/xt-chart/XtMulti.vue +8 -18
- package/src/components/xt-chart/XtPie.vue +1 -0
- package/src/components/xt-chart/utils.js +84 -50
- package/src/components/xt-config-provider/index.vue +56 -54
- package/src/components/xt-date-picker/style/index.scss +4 -6
- package/src/components/xt-flow/flowable-parser.js +244 -0
- package/src/components/xt-flow/index.js +8 -0
- package/src/components/xt-flow/index.vue +226 -0
- package/src/components/xt-flow/style/index.scss +359 -0
- package/src/components/xt-text/style/index.scss +6 -6
- package/src/index.js +8 -13
- package/src/styles/css-variables.scss +73 -1
package/README.md
CHANGED
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: 提供
|
|
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="卡片标题"
|
|
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="今日销售额"
|
|
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
|
|
52
|
+
<template v-slot:title>
|
|
53
53
|
<span style="color: #1890ff;">📊 数据分析</span>
|
|
54
54
|
</template>
|
|
55
|
-
<
|
|
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
|
-
| `
|
|
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']
|
|
@@ -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
|
+
- 待办节点的图标会有脉冲动画效果,提示用户当前待处理
|
|
@@ -52,14 +52,13 @@ export default {
|
|
|
52
52
|
| `highlightKey` | String | - | 高亮系列的 label |
|
|
53
53
|
| `config` | Object | - | 配置对象 |
|
|
54
54
|
|
|
55
|
-
##
|
|
55
|
+
## 配置说明
|
|
56
56
|
|
|
57
57
|
| 属性 | 类型 | 默认值 | 说明 |
|
|
58
58
|
|------|------|--------|------|
|
|
59
|
-
| `
|
|
60
|
-
| `
|
|
61
|
-
| `
|
|
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 },
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# chart
|
package/lib/index.common.1.js
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
// ESM COMPAT FLAG
|
|
26
26
|
__webpack_require__.r(__webpack_exports__);
|
|
27
27
|
|
|
28
|
-
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"
|
|
28
|
+
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-date-picker/component/RangeDate.vue?vue&type=template&id=32b85e82&scoped=true
|
|
29
29
|
var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"range-picker"},[_c('Picker',{attrs:{"type":_vm.type,"size":"small","placeholder":_vm.startPlaceholder,"disabled":_vm.disabled,"disabled-date":_vm.disabledStart},on:{"change":_vm.handleChange},model:{value:(_vm.startVal),callback:function ($$v) {_vm.startVal=$$v},expression:"startVal"}}),_c('span',{staticClass:"split"},[_vm._v(_vm._s(_vm.separator))]),_c('Picker',{attrs:{"type":_vm.type,"size":"small","placeholder":_vm.endPlaceholder,"disabled":_vm.disabled,"disabled-date":_vm.disabledEnd},on:{"change":_vm.handleChange},model:{value:(_vm.endVal),callback:function ($$v) {_vm.endVal=$$v},expression:"endVal"}})],1)
|
|
30
30
|
}
|
|
31
31
|
var staticRenderFns = []
|
|
@@ -160,7 +160,7 @@ var component = Object(componentNormalizer["a" /* default */])(
|
|
|
160
160
|
// ESM COMPAT FLAG
|
|
161
161
|
__webpack_require__.r(__webpack_exports__);
|
|
162
162
|
|
|
163
|
-
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"
|
|
163
|
+
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-date-picker/component/Picker.vue?vue&type=template&id=4a866a03
|
|
164
164
|
var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"date-picker"},[(_vm.type !== 'quarter')?_c('el-date-picker',_vm._g(_vm._b({attrs:{"type":_vm.pickerType,"value-format":_vm.valueFormat,"disabled":_vm.disabled,"placeholder":_vm.placeholder,"popper-append-to-body":"","popper-class":"base-date-popper"},model:{value:(_vm.innerValue),callback:function ($$v) {_vm.innerValue=$$v},expression:"innerValue"}},'el-date-picker',_vm.$attrs,false),_vm.$listeners)):_c('el-popover',{attrs:{"trigger":"manual","placement":"bottom-start","width":"240"},model:{value:(_vm.quarterPopVisible),callback:function ($$v) {_vm.quarterPopVisible=$$v},expression:"quarterPopVisible"}},[_c('div',{staticClass:"quarter-panel"},[_c('div',{staticClass:"quarter-header"},[_c('el-button',{attrs:{"icon":"el-icon-d-arrow-left"},on:{"click":function($event){_vm.year--}}}),_c('span',[_vm._v(_vm._s(_vm.year)+" 年")]),_c('el-button',{attrs:{"icon":"el-icon-d-arrow-right"},on:{"click":function($event){_vm.year++}}})],1),_c('div',{staticClass:"quarter-list"},_vm._l((4),function(q){return _c('div',{key:q,staticClass:"quarter-item",class:{ active: _vm.quarterNum === q },on:{"click":function($event){return _vm.selectQuarter(q)}}},[_vm._v(" Q"+_vm._s(q)+" ")])}),0)]),_c('el-input',{ref:"quarterInput",attrs:{"slot":"reference","size":"small","readonly":"","placeholder":_vm.placeholder,"disabled":_vm.disabled,"clearable":""},on:{"clear":_vm.handleClearQuarter},slot:"reference",model:{value:(_vm.quarterShowText),callback:function ($$v) {_vm.quarterShowText=$$v},expression:"quarterShowText"}},[_c('i',{staticClass:"el-icon-date",attrs:{"slot":"affix"},slot:"affix"})])],1)],1)
|
|
165
165
|
}
|
|
166
166
|
var staticRenderFns = []
|
package/lib/index.common.2.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// ESM COMPAT FLAG
|
|
8
8
|
__webpack_require__.r(__webpack_exports__);
|
|
9
9
|
|
|
10
|
-
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"
|
|
10
|
+
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-date-picker/component/Picker.vue?vue&type=template&id=4a866a03
|
|
11
11
|
var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"date-picker"},[(_vm.type !== 'quarter')?_c('el-date-picker',_vm._g(_vm._b({attrs:{"type":_vm.pickerType,"value-format":_vm.valueFormat,"disabled":_vm.disabled,"placeholder":_vm.placeholder,"popper-append-to-body":"","popper-class":"base-date-popper"},model:{value:(_vm.innerValue),callback:function ($$v) {_vm.innerValue=$$v},expression:"innerValue"}},'el-date-picker',_vm.$attrs,false),_vm.$listeners)):_c('el-popover',{attrs:{"trigger":"manual","placement":"bottom-start","width":"240"},model:{value:(_vm.quarterPopVisible),callback:function ($$v) {_vm.quarterPopVisible=$$v},expression:"quarterPopVisible"}},[_c('div',{staticClass:"quarter-panel"},[_c('div',{staticClass:"quarter-header"},[_c('el-button',{attrs:{"icon":"el-icon-d-arrow-left"},on:{"click":function($event){_vm.year--}}}),_c('span',[_vm._v(_vm._s(_vm.year)+" 年")]),_c('el-button',{attrs:{"icon":"el-icon-d-arrow-right"},on:{"click":function($event){_vm.year++}}})],1),_c('div',{staticClass:"quarter-list"},_vm._l((4),function(q){return _c('div',{key:q,staticClass:"quarter-item",class:{ active: _vm.quarterNum === q },on:{"click":function($event){return _vm.selectQuarter(q)}}},[_vm._v(" Q"+_vm._s(q)+" ")])}),0)]),_c('el-input',{ref:"quarterInput",attrs:{"slot":"reference","size":"small","readonly":"","placeholder":_vm.placeholder,"disabled":_vm.disabled,"clearable":""},on:{"clear":_vm.handleClearQuarter},slot:"reference",model:{value:(_vm.quarterShowText),callback:function ($$v) {_vm.quarterShowText=$$v},expression:"quarterShowText"}},[_c('i',{staticClass:"el-icon-date",attrs:{"slot":"affix"},slot:"affix"})])],1)],1)
|
|
12
12
|
}
|
|
13
13
|
var staticRenderFns = []
|