vue2-client 1.20.19 → 1.20.21
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/.claude/settings.local.json +30 -30
- package/.eslintrc.js +74 -74
- package/Components.md +60 -60
- package/index.js +31 -31
- package/jest-transform-stub.js +8 -8
- package/jest.setup.js +7 -7
- package/package.json +1 -1
- package/src/assets/img/querySlotDemo.svg +15 -15
- package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
- package/src/base-client/components/common/CitySelect/index.js +3 -3
- package/src/base-client/components/common/CitySelect/index.md +109 -109
- package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
- package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
- package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
- package/src/base-client/components/common/PersonSetting/index.js +3 -3
- package/src/base-client/components/common/Tree/Tree.vue +149 -149
- package/src/base-client/components/common/Tree/index.js +2 -2
- package/src/base-client/components/common/Upload/index.js +3 -3
- package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
- package/src/base-client/components/common/XCard/XCard.vue +64 -64
- package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
- package/src/base-client/components/common/XDataDrawer/index.js +3 -3
- package/src/base-client/components/common/XDataDrawer/index.md +41 -41
- package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +671 -671
- package/src/base-client/components/common/XDescriptions/index.js +3 -3
- package/src/base-client/components/common/XDescriptions/index.md +382 -382
- package/src/base-client/components/common/XForm/index.md +178 -178
- package/src/base-client/components/common/XFormTable/XFormTable.vue +8 -0
- package/src/base-client/components/common/XFormTable/demo.vue +79 -37
- package/src/base-client/components/common/XInspectionDetailDrawer/components/CheckItems.vue +42 -17
- package/src/base-client/components/common/XInspectionDetailDrawer/components/HazardPhotos.vue +48 -19
- package/src/base-client/components/common/XInspectionDetailDrawer/services/inspectionService.js +5 -3
- package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
- package/src/base-client/components/common/XStepView/index.js +3 -3
- package/src/base-client/components/common/XStepView/index.md +31 -31
- package/src/base-client/components/common/XTable/XTable.vue +20 -0
- package/src/base-client/components/common/XTable/index.md +255 -255
- package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
- package/src/base-client/plugins/Config.js +19 -19
- package/src/base-client/plugins/tabs-page-plugin.js +39 -39
- package/src/components/Charts/Bar.vue +62 -62
- package/src/components/Charts/ChartCard.vue +134 -134
- package/src/components/Charts/Liquid.vue +67 -67
- package/src/components/Charts/MiniArea.vue +39 -39
- package/src/components/Charts/MiniBar.vue +39 -39
- package/src/components/Charts/MiniProgress.vue +75 -75
- package/src/components/Charts/MiniSmoothArea.vue +40 -40
- package/src/components/Charts/Radar.vue +68 -68
- package/src/components/Charts/RankList.vue +77 -77
- package/src/components/Charts/TagCloud.vue +113 -113
- package/src/components/Charts/TransferBar.vue +64 -64
- package/src/components/Charts/Trend.vue +82 -82
- package/src/components/Charts/chart.less +12 -12
- package/src/components/Charts/smooth.area.less +13 -13
- package/src/components/NumberInfo/NumberInfo.vue +54 -54
- package/src/components/NumberInfo/index.js +3 -3
- package/src/components/NumberInfo/index.less +54 -54
- package/src/components/NumberInfo/index.md +43 -43
- package/src/components/card/ChartCard.vue +79 -79
- package/src/components/chart/Bar.vue +60 -60
- package/src/components/chart/MiniArea.vue +67 -67
- package/src/components/chart/MiniBar.vue +59 -59
- package/src/components/chart/MiniProgress.vue +57 -57
- package/src/components/chart/Radar.vue +80 -80
- package/src/components/chart/RankingList.vue +60 -60
- package/src/components/chart/Trend.vue +79 -79
- package/src/components/chart/index.less +9 -9
- package/src/components/checkbox/ColorCheckbox.vue +157 -157
- package/src/components/input/IInput.vue +66 -66
- package/src/components/menu/SideMenu.vue +75 -75
- package/src/components/menu/menu.js +273 -273
- package/src/components/tool/AStepItem.vue +60 -60
- package/src/layouts/CommonLayout.vue +56 -56
- package/src/lib.js +1 -1
- package/src/mock/extend/index.js +84 -84
- package/src/mock/goods/index.js +108 -108
- package/src/pages/WorkflowDetail/WorkFlowDemo4.vue +127 -0
- package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +417 -417
- package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
- package/src/pages/system/dictionary/index.vue +44 -44
- package/src/pages/system/monitor/loginInfor/index.vue +37 -37
- package/src/pages/system/monitor/operLog/index.vue +37 -37
- package/src/services/api/cas.js +79 -79
- package/src/store/modules/setting.js +119 -119
- package/src/utils/errorCode.js +6 -6
- package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
|
@@ -1,382 +1,382 @@
|
|
|
1
|
-
# XDescriptionsGroup
|
|
2
|
-
|
|
3
|
-
动态Descriptions分组控件,根据JSON配置动态生成Descriptions,支持多种字段函数控制显示、样式和格式化。
|
|
4
|
-
|
|
5
|
-
## 何时使用
|
|
6
|
-
|
|
7
|
-
当需要一个动态生成的、支持条件显示、自定义样式和数据格式化的Descriptions时
|
|
8
|
-
|
|
9
|
-
## 引用方式
|
|
10
|
-
|
|
11
|
-
```javascript
|
|
12
|
-
import XDescriptionsGroup from '@vue2-client/base-client/components/common/XDescriptions/XDescriptionsGroup'
|
|
13
|
-
|
|
14
|
-
export default {
|
|
15
|
-
components: {
|
|
16
|
-
XDescriptionsGroup
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## API
|
|
22
|
-
|
|
23
|
-
| 参数 | 说明 | 类型 | 默认值 |
|
|
24
|
-
|-----------------|-------------|--------|------|
|
|
25
|
-
| data | 业务数据 | Object | {} |
|
|
26
|
-
| configName | 配置文件名 | String | '' |
|
|
27
|
-
| serviceName | 配置所属命名空间 | String | process.env.VUE_APP_SYSTEM_NAME |
|
|
28
|
-
|
|
29
|
-
## 配置格式
|
|
30
|
-
|
|
31
|
-
### 配置结构
|
|
32
|
-
|
|
33
|
-
```javascript
|
|
34
|
-
[
|
|
35
|
-
{
|
|
36
|
-
"name": "分组名称",
|
|
37
|
-
"type": "normal", // 分组类型:normal/array/slot(可选,默认normal)
|
|
38
|
-
"key": "dataKey", // 数据key(数组类型时必需)
|
|
39
|
-
"fields": [
|
|
40
|
-
{
|
|
41
|
-
"key": "字段key",
|
|
42
|
-
"name": "字段显示名称",
|
|
43
|
-
"span": 2, // 列宽(可选,默认1)
|
|
44
|
-
"showIf": "(data, field) => ...", // 条件显示函数(可选)
|
|
45
|
-
"styleFunc": "(value, data, field) => ...", // 样式函数(可选)
|
|
46
|
-
"formatFunc": "(value, data, field) => ...", // 格式化函数(可选)
|
|
47
|
-
"requireFunc": "(data, field) => ..." // 必填标记函数(可选)
|
|
48
|
-
}
|
|
49
|
-
]
|
|
50
|
-
}
|
|
51
|
-
]
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### 全局配置说明
|
|
55
|
-
|
|
56
|
-
#### column - 列数控制
|
|
57
|
-
|
|
58
|
-
- **作用**: 控制每行显示的列数
|
|
59
|
-
- **类型**: `Number`
|
|
60
|
-
- **默认值**: `3`
|
|
61
|
-
- **示例**: `"column": 2` 表示每行显示 2 列
|
|
62
|
-
|
|
63
|
-
#### getRealData - 数据处理方式
|
|
64
|
-
|
|
65
|
-
- **作用**: 是否使用 `getRealKeyData` 方法处理数据
|
|
66
|
-
- **类型**: `Boolean`
|
|
67
|
-
- **默认值**: `false`
|
|
68
|
-
- **示例**: `"getRealData": true` 启用数据处理
|
|
69
|
-
|
|
70
|
-
#### tabMode - 显示模式
|
|
71
|
-
|
|
72
|
-
- **作用**: 控制组件的显示模式
|
|
73
|
-
- **类型**: `String`
|
|
74
|
-
- **可选值**: `'left' | 'top' | 'none'`
|
|
75
|
-
- **默认值**: `'left'`
|
|
76
|
-
- **示例**: `"tabMode": "top"` 使用顶部横向导航
|
|
77
|
-
|
|
78
|
-
### 分组类型说明
|
|
79
|
-
|
|
80
|
-
#### normal - 普通分组(默认)
|
|
81
|
-
|
|
82
|
-
```javascript
|
|
83
|
-
[
|
|
84
|
-
{
|
|
85
|
-
"name": "基本信息",
|
|
86
|
-
"type": "normal",
|
|
87
|
-
"fields": [
|
|
88
|
-
{
|
|
89
|
-
"key": "f_name",
|
|
90
|
-
"name": "设备名称"
|
|
91
|
-
}
|
|
92
|
-
]
|
|
93
|
-
}
|
|
94
|
-
]
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
#### array - 数组分组
|
|
98
|
-
|
|
99
|
-
用于处理数组类型数据,会为每个数组项生成一个子描述:
|
|
100
|
-
|
|
101
|
-
```javascript
|
|
102
|
-
[
|
|
103
|
-
{
|
|
104
|
-
"name": "设备列表",
|
|
105
|
-
"type": "array",
|
|
106
|
-
"key": "devices",
|
|
107
|
-
"fields": [
|
|
108
|
-
{
|
|
109
|
-
"key": "f_name",
|
|
110
|
-
"name": "设备名称"
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
"key": "f_status",
|
|
114
|
-
"name": "设备状态"
|
|
115
|
-
}
|
|
116
|
-
]
|
|
117
|
-
}
|
|
118
|
-
]
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
#### slot - 插槽分组
|
|
122
|
-
|
|
123
|
-
用于将某个分组交给父组件通过**具名插槽**自定义渲染,适用于配置无法覆盖的展示或交互。
|
|
124
|
-
|
|
125
|
-
**配置说明:**
|
|
126
|
-
|
|
127
|
-
- **name**:分组标题(left/top 模式下作为 Tab 文案,none 模式下可选展示)
|
|
128
|
-
- **type**:`"slot"`,表示该分组为插槽分组
|
|
129
|
-
- **slotName**:字符串,与父组件具名插槽名一致;省略时使用 `name` 作为插槽名
|
|
130
|
-
|
|
131
|
-
**数组格式配置示例:**
|
|
132
|
-
|
|
133
|
-
```javascript
|
|
134
|
-
[
|
|
135
|
-
{
|
|
136
|
-
"name": "自定义区块",
|
|
137
|
-
"type": "slot",
|
|
138
|
-
"slotName": "customSection"
|
|
139
|
-
}
|
|
140
|
-
]
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
**对象格式配置示例:**
|
|
144
|
-
|
|
145
|
-
```javascript
|
|
146
|
-
{
|
|
147
|
-
"自定义区块": {
|
|
148
|
-
"type": "slot",
|
|
149
|
-
"slotName": "customSection"
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
**父组件用法:**
|
|
155
|
-
|
|
156
|
-
通过具名插槽传入内容,插槽名与配置中的 `slotName` 一致。组件会向插槽注入当前详情 `data`,可使用作用域插槽接收:
|
|
157
|
-
|
|
158
|
-
```html
|
|
159
|
-
<XDescriptionsGroup :data="detail" config-name="xxx">
|
|
160
|
-
<template #customSection="{ data }">
|
|
161
|
-
<div>自定义内容,可访问当前详情 data:{{ data }}</div>
|
|
162
|
-
</template>
|
|
163
|
-
</XDescriptionsGroup>
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
若不需要使用 `data`,也可使用默认插槽写法:
|
|
167
|
-
|
|
168
|
-
```html
|
|
169
|
-
<XDescriptionsGroup :data="detail" config-name="xxx">
|
|
170
|
-
<template #customSection>自定义静态内容</template>
|
|
171
|
-
</XDescriptionsGroup>
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
### 字段属性说明
|
|
175
|
-
|
|
176
|
-
#### span - 列宽控制
|
|
177
|
-
|
|
178
|
-
- **作用**: 控制字段占用的列数
|
|
179
|
-
- **类型**: `Number`
|
|
180
|
-
- **默认值**: `1`
|
|
181
|
-
- **示例**: `"span": 2` 表示该字段占用 2 列宽度
|
|
182
|
-
|
|
183
|
-
### 字段函数说明
|
|
184
|
-
|
|
185
|
-
#### 1. showIf - 条件显示函数
|
|
186
|
-
|
|
187
|
-
- **作用**: 控制字段是否显示
|
|
188
|
-
- **参数**: `(data, field)`
|
|
189
|
-
- **返回值**: `boolean`
|
|
190
|
-
- **示例**: `"showIf": "(data, field) => data.amount > 1000"`
|
|
191
|
-
|
|
192
|
-
#### 2. styleFunc - 样式函数
|
|
193
|
-
|
|
194
|
-
- **作用**: 设置字段内容的样式
|
|
195
|
-
- **参数**: `(value, data, field)`
|
|
196
|
-
- **返回值**: `Object` 样式对象,如 `{color: 'red'}`
|
|
197
|
-
- **示例**: `"styleFunc": "(value, data, field) => ({ color: value > 0 ? 'green' : 'red' })"`
|
|
198
|
-
|
|
199
|
-
#### 3. formatFunc - 格式化函数
|
|
200
|
-
|
|
201
|
-
- **作用**: 自定义字段值的显示格式
|
|
202
|
-
- **参数**: `(value, data, field)`
|
|
203
|
-
- **返回值**: `String` 格式化后的字符串
|
|
204
|
-
- **示例**: `"formatFunc": "(value, data, field) => '¥' + value.toLocaleString()"`
|
|
205
|
-
|
|
206
|
-
#### 4. requireFunc - 必填标记函数
|
|
207
|
-
|
|
208
|
-
- **作用**: 在字段标题后显示红色星号
|
|
209
|
-
- **参数**: `(data, field)`
|
|
210
|
-
- **返回值**: `boolean`
|
|
211
|
-
- **示例**: `"requireFunc": "(data, field) => data.type === 'important'"`
|
|
212
|
-
|
|
213
|
-
#### 4. canEdit - 是否可进行修改
|
|
214
|
-
|
|
215
|
-
- **作用**: 如果canEdit配置为true,则渲染铅笔修改图标,由外部组件实现具体编辑逻辑
|
|
216
|
-
- **参数**: `(field, value, data)`
|
|
217
|
-
- **示例**: `"canEdit": true`
|
|
218
|
-
|
|
219
|
-
## 完整配置示例
|
|
220
|
-
|
|
221
|
-
### 普通分组配置示例
|
|
222
|
-
|
|
223
|
-
```javascript
|
|
224
|
-
// 配置文件:deviceInfo.json
|
|
225
|
-
[
|
|
226
|
-
{
|
|
227
|
-
"name": "基本信息",
|
|
228
|
-
"fields": [
|
|
229
|
-
{
|
|
230
|
-
"key": "f_name",
|
|
231
|
-
"name": "设备名称",
|
|
232
|
-
"span": 2,
|
|
233
|
-
"requireFunc": "true",
|
|
234
|
-
"canEdit": true
|
|
235
|
-
},
|
|
236
|
-
{
|
|
237
|
-
"key": "f_status",
|
|
238
|
-
"name": "状态",
|
|
239
|
-
"showIf": "(data, field) => data.f_status",
|
|
240
|
-
"styleFunc": "(value, data, field) => ({ color: value === '正常' ? 'green' : 'red' })"
|
|
241
|
-
}
|
|
242
|
-
]
|
|
243
|
-
},
|
|
244
|
-
{
|
|
245
|
-
"name": "财务信息",
|
|
246
|
-
"fields": [
|
|
247
|
-
{
|
|
248
|
-
"key": "f_amount",
|
|
249
|
-
"name": "金额",
|
|
250
|
-
"span": 2,
|
|
251
|
-
"showIf": "(data, field) => data.f_amount > 0",
|
|
252
|
-
"styleFunc": "(value, data, field) => ({ color: value > 5000 ? 'red' : 'green', fontWeight: 'bold' })",
|
|
253
|
-
"formatFunc": "(value, data, field) => '¥' + Number(value).toLocaleString()",
|
|
254
|
-
"requireFunc": "(data, field) => data.f_amount > 1000"
|
|
255
|
-
},
|
|
256
|
-
{
|
|
257
|
-
"key": "f_phone",
|
|
258
|
-
"name": "联系电话",
|
|
259
|
-
"formatFunc": "(value, data, field) => value ? value.replace(/(\\d{3})\\d{4}(\\d{4})/, '$1****$2') : '--'"
|
|
260
|
-
}
|
|
261
|
-
]
|
|
262
|
-
}
|
|
263
|
-
]
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
### 数组分组配置示例
|
|
267
|
-
|
|
268
|
-
```javascript
|
|
269
|
-
// 配置文件:deviceList.json
|
|
270
|
-
[
|
|
271
|
-
{
|
|
272
|
-
"name": "设备列表",
|
|
273
|
-
"type": "array",
|
|
274
|
-
"key": "devices",
|
|
275
|
-
"fields": [
|
|
276
|
-
{
|
|
277
|
-
"key": "f_name",
|
|
278
|
-
"name": "设备名称",
|
|
279
|
-
"styleFunc": "(value, data, field) => ({ fontWeight: 'bold' })"
|
|
280
|
-
},
|
|
281
|
-
{
|
|
282
|
-
"key": "f_status",
|
|
283
|
-
"name": "状态",
|
|
284
|
-
"styleFunc": "(value, data, field) => ({ color: value === '在线' ? 'green' : 'gray' })"
|
|
285
|
-
},
|
|
286
|
-
{
|
|
287
|
-
"key": "f_amount",
|
|
288
|
-
"name": "金额",
|
|
289
|
-
"formatFunc": "(value, data, field) => value ? '¥' + value : '--'"
|
|
290
|
-
}
|
|
291
|
-
]
|
|
292
|
-
}
|
|
293
|
-
]
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
## 使用示例
|
|
297
|
-
|
|
298
|
-
### 基础使用
|
|
299
|
-
|
|
300
|
-
```vue
|
|
301
|
-
<template>
|
|
302
|
-
<x-descriptions-group
|
|
303
|
-
:data="deviceData"
|
|
304
|
-
configName="deviceInfo">
|
|
305
|
-
</x-descriptions-group>
|
|
306
|
-
</template>
|
|
307
|
-
|
|
308
|
-
<script>
|
|
309
|
-
import XDescriptionsGroup from '@vue2-client/base-client/components/common/XDescriptions/XDescriptionsGroup'
|
|
310
|
-
|
|
311
|
-
export default {
|
|
312
|
-
components: {
|
|
313
|
-
XDescriptionsGroup
|
|
314
|
-
},
|
|
315
|
-
data () {
|
|
316
|
-
return {
|
|
317
|
-
deviceData: {
|
|
318
|
-
f_name: '智能水表001',
|
|
319
|
-
f_status: '正常',
|
|
320
|
-
f_amount: 15000,
|
|
321
|
-
f_phone: '13812345678'
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
</script>
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
### 高级用法 - 动态配置
|
|
330
|
-
|
|
331
|
-
```vue
|
|
332
|
-
<template>
|
|
333
|
-
<x-descriptions-group
|
|
334
|
-
:data="formData"
|
|
335
|
-
:configName="configName"
|
|
336
|
-
serviceName="customService">
|
|
337
|
-
</x-descriptions-group>
|
|
338
|
-
</template>
|
|
339
|
-
|
|
340
|
-
<script>
|
|
341
|
-
export default {
|
|
342
|
-
data () {
|
|
343
|
-
return {
|
|
344
|
-
configName: 'dynamicForm',
|
|
345
|
-
formData: {
|
|
346
|
-
// 根据业务需求动态构建数据
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
},
|
|
350
|
-
created() {
|
|
351
|
-
// 根据用户权限动态选择配置
|
|
352
|
-
this.configName = this.isAdmin ? 'adminForm' : 'userForm'
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
</script>
|
|
356
|
-
```
|
|
357
|
-
|
|
358
|
-
## 注意事项
|
|
359
|
-
|
|
360
|
-
1. **函数格式**: 所有函数字符串必须使用箭头函数格式,如 `"(data, field) => data.amount > 1000"`
|
|
361
|
-
2. **错误处理**: 函数执行错误时会输出警告日志,不会影响组件正常渲染
|
|
362
|
-
3. **性能考虑**: 函数会在每次渲染时执行,避免在函数中编写耗时操作
|
|
363
|
-
4. **样式应用**: styleFunc 通过内联样式应用到字段内容上,优先级低于CSS类
|
|
364
|
-
5. **兼容性**: 保持向后兼容,不配置函数的字段按原样显示
|
|
365
|
-
|
|
366
|
-
## 支持的显示模式
|
|
367
|
-
|
|
368
|
-
组件支持三种 tab 显示模式,通过配置文件设置:
|
|
369
|
-
|
|
370
|
-
- `left`: 左侧垂直导航(默认)
|
|
371
|
-
- `top`: 顶部横向导航
|
|
372
|
-
- `none`: 无导航,直接显示所有内容
|
|
373
|
-
|
|
374
|
-
配置示例:
|
|
375
|
-
|
|
376
|
-
```javascript
|
|
377
|
-
{
|
|
378
|
-
"tabMode": "top",
|
|
379
|
-
"column": 2,
|
|
380
|
-
"groups": [...]
|
|
381
|
-
}
|
|
382
|
-
```
|
|
1
|
+
# XDescriptionsGroup
|
|
2
|
+
|
|
3
|
+
动态Descriptions分组控件,根据JSON配置动态生成Descriptions,支持多种字段函数控制显示、样式和格式化。
|
|
4
|
+
|
|
5
|
+
## 何时使用
|
|
6
|
+
|
|
7
|
+
当需要一个动态生成的、支持条件显示、自定义样式和数据格式化的Descriptions时
|
|
8
|
+
|
|
9
|
+
## 引用方式
|
|
10
|
+
|
|
11
|
+
```javascript
|
|
12
|
+
import XDescriptionsGroup from '@vue2-client/base-client/components/common/XDescriptions/XDescriptionsGroup'
|
|
13
|
+
|
|
14
|
+
export default {
|
|
15
|
+
components: {
|
|
16
|
+
XDescriptionsGroup
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## API
|
|
22
|
+
|
|
23
|
+
| 参数 | 说明 | 类型 | 默认值 |
|
|
24
|
+
|-----------------|-------------|--------|------|
|
|
25
|
+
| data | 业务数据 | Object | {} |
|
|
26
|
+
| configName | 配置文件名 | String | '' |
|
|
27
|
+
| serviceName | 配置所属命名空间 | String | process.env.VUE_APP_SYSTEM_NAME |
|
|
28
|
+
|
|
29
|
+
## 配置格式
|
|
30
|
+
|
|
31
|
+
### 配置结构
|
|
32
|
+
|
|
33
|
+
```javascript
|
|
34
|
+
[
|
|
35
|
+
{
|
|
36
|
+
"name": "分组名称",
|
|
37
|
+
"type": "normal", // 分组类型:normal/array/slot(可选,默认normal)
|
|
38
|
+
"key": "dataKey", // 数据key(数组类型时必需)
|
|
39
|
+
"fields": [
|
|
40
|
+
{
|
|
41
|
+
"key": "字段key",
|
|
42
|
+
"name": "字段显示名称",
|
|
43
|
+
"span": 2, // 列宽(可选,默认1)
|
|
44
|
+
"showIf": "(data, field) => ...", // 条件显示函数(可选)
|
|
45
|
+
"styleFunc": "(value, data, field) => ...", // 样式函数(可选)
|
|
46
|
+
"formatFunc": "(value, data, field) => ...", // 格式化函数(可选)
|
|
47
|
+
"requireFunc": "(data, field) => ..." // 必填标记函数(可选)
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 全局配置说明
|
|
55
|
+
|
|
56
|
+
#### column - 列数控制
|
|
57
|
+
|
|
58
|
+
- **作用**: 控制每行显示的列数
|
|
59
|
+
- **类型**: `Number`
|
|
60
|
+
- **默认值**: `3`
|
|
61
|
+
- **示例**: `"column": 2` 表示每行显示 2 列
|
|
62
|
+
|
|
63
|
+
#### getRealData - 数据处理方式
|
|
64
|
+
|
|
65
|
+
- **作用**: 是否使用 `getRealKeyData` 方法处理数据
|
|
66
|
+
- **类型**: `Boolean`
|
|
67
|
+
- **默认值**: `false`
|
|
68
|
+
- **示例**: `"getRealData": true` 启用数据处理
|
|
69
|
+
|
|
70
|
+
#### tabMode - 显示模式
|
|
71
|
+
|
|
72
|
+
- **作用**: 控制组件的显示模式
|
|
73
|
+
- **类型**: `String`
|
|
74
|
+
- **可选值**: `'left' | 'top' | 'none'`
|
|
75
|
+
- **默认值**: `'left'`
|
|
76
|
+
- **示例**: `"tabMode": "top"` 使用顶部横向导航
|
|
77
|
+
|
|
78
|
+
### 分组类型说明
|
|
79
|
+
|
|
80
|
+
#### normal - 普通分组(默认)
|
|
81
|
+
|
|
82
|
+
```javascript
|
|
83
|
+
[
|
|
84
|
+
{
|
|
85
|
+
"name": "基本信息",
|
|
86
|
+
"type": "normal",
|
|
87
|
+
"fields": [
|
|
88
|
+
{
|
|
89
|
+
"key": "f_name",
|
|
90
|
+
"name": "设备名称"
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
#### array - 数组分组
|
|
98
|
+
|
|
99
|
+
用于处理数组类型数据,会为每个数组项生成一个子描述:
|
|
100
|
+
|
|
101
|
+
```javascript
|
|
102
|
+
[
|
|
103
|
+
{
|
|
104
|
+
"name": "设备列表",
|
|
105
|
+
"type": "array",
|
|
106
|
+
"key": "devices",
|
|
107
|
+
"fields": [
|
|
108
|
+
{
|
|
109
|
+
"key": "f_name",
|
|
110
|
+
"name": "设备名称"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"key": "f_status",
|
|
114
|
+
"name": "设备状态"
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
}
|
|
118
|
+
]
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
#### slot - 插槽分组
|
|
122
|
+
|
|
123
|
+
用于将某个分组交给父组件通过**具名插槽**自定义渲染,适用于配置无法覆盖的展示或交互。
|
|
124
|
+
|
|
125
|
+
**配置说明:**
|
|
126
|
+
|
|
127
|
+
- **name**:分组标题(left/top 模式下作为 Tab 文案,none 模式下可选展示)
|
|
128
|
+
- **type**:`"slot"`,表示该分组为插槽分组
|
|
129
|
+
- **slotName**:字符串,与父组件具名插槽名一致;省略时使用 `name` 作为插槽名
|
|
130
|
+
|
|
131
|
+
**数组格式配置示例:**
|
|
132
|
+
|
|
133
|
+
```javascript
|
|
134
|
+
[
|
|
135
|
+
{
|
|
136
|
+
"name": "自定义区块",
|
|
137
|
+
"type": "slot",
|
|
138
|
+
"slotName": "customSection"
|
|
139
|
+
}
|
|
140
|
+
]
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**对象格式配置示例:**
|
|
144
|
+
|
|
145
|
+
```javascript
|
|
146
|
+
{
|
|
147
|
+
"自定义区块": {
|
|
148
|
+
"type": "slot",
|
|
149
|
+
"slotName": "customSection"
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**父组件用法:**
|
|
155
|
+
|
|
156
|
+
通过具名插槽传入内容,插槽名与配置中的 `slotName` 一致。组件会向插槽注入当前详情 `data`,可使用作用域插槽接收:
|
|
157
|
+
|
|
158
|
+
```html
|
|
159
|
+
<XDescriptionsGroup :data="detail" config-name="xxx">
|
|
160
|
+
<template #customSection="{ data }">
|
|
161
|
+
<div>自定义内容,可访问当前详情 data:{{ data }}</div>
|
|
162
|
+
</template>
|
|
163
|
+
</XDescriptionsGroup>
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
若不需要使用 `data`,也可使用默认插槽写法:
|
|
167
|
+
|
|
168
|
+
```html
|
|
169
|
+
<XDescriptionsGroup :data="detail" config-name="xxx">
|
|
170
|
+
<template #customSection>自定义静态内容</template>
|
|
171
|
+
</XDescriptionsGroup>
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### 字段属性说明
|
|
175
|
+
|
|
176
|
+
#### span - 列宽控制
|
|
177
|
+
|
|
178
|
+
- **作用**: 控制字段占用的列数
|
|
179
|
+
- **类型**: `Number`
|
|
180
|
+
- **默认值**: `1`
|
|
181
|
+
- **示例**: `"span": 2` 表示该字段占用 2 列宽度
|
|
182
|
+
|
|
183
|
+
### 字段函数说明
|
|
184
|
+
|
|
185
|
+
#### 1. showIf - 条件显示函数
|
|
186
|
+
|
|
187
|
+
- **作用**: 控制字段是否显示
|
|
188
|
+
- **参数**: `(data, field)`
|
|
189
|
+
- **返回值**: `boolean`
|
|
190
|
+
- **示例**: `"showIf": "(data, field) => data.amount > 1000"`
|
|
191
|
+
|
|
192
|
+
#### 2. styleFunc - 样式函数
|
|
193
|
+
|
|
194
|
+
- **作用**: 设置字段内容的样式
|
|
195
|
+
- **参数**: `(value, data, field)`
|
|
196
|
+
- **返回值**: `Object` 样式对象,如 `{color: 'red'}`
|
|
197
|
+
- **示例**: `"styleFunc": "(value, data, field) => ({ color: value > 0 ? 'green' : 'red' })"`
|
|
198
|
+
|
|
199
|
+
#### 3. formatFunc - 格式化函数
|
|
200
|
+
|
|
201
|
+
- **作用**: 自定义字段值的显示格式
|
|
202
|
+
- **参数**: `(value, data, field)`
|
|
203
|
+
- **返回值**: `String` 格式化后的字符串
|
|
204
|
+
- **示例**: `"formatFunc": "(value, data, field) => '¥' + value.toLocaleString()"`
|
|
205
|
+
|
|
206
|
+
#### 4. requireFunc - 必填标记函数
|
|
207
|
+
|
|
208
|
+
- **作用**: 在字段标题后显示红色星号
|
|
209
|
+
- **参数**: `(data, field)`
|
|
210
|
+
- **返回值**: `boolean`
|
|
211
|
+
- **示例**: `"requireFunc": "(data, field) => data.type === 'important'"`
|
|
212
|
+
|
|
213
|
+
#### 4. canEdit - 是否可进行修改
|
|
214
|
+
|
|
215
|
+
- **作用**: 如果canEdit配置为true,则渲染铅笔修改图标,由外部组件实现具体编辑逻辑
|
|
216
|
+
- **参数**: `(field, value, data)`
|
|
217
|
+
- **示例**: `"canEdit": true`
|
|
218
|
+
|
|
219
|
+
## 完整配置示例
|
|
220
|
+
|
|
221
|
+
### 普通分组配置示例
|
|
222
|
+
|
|
223
|
+
```javascript
|
|
224
|
+
// 配置文件:deviceInfo.json
|
|
225
|
+
[
|
|
226
|
+
{
|
|
227
|
+
"name": "基本信息",
|
|
228
|
+
"fields": [
|
|
229
|
+
{
|
|
230
|
+
"key": "f_name",
|
|
231
|
+
"name": "设备名称",
|
|
232
|
+
"span": 2,
|
|
233
|
+
"requireFunc": "true",
|
|
234
|
+
"canEdit": true
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"key": "f_status",
|
|
238
|
+
"name": "状态",
|
|
239
|
+
"showIf": "(data, field) => data.f_status",
|
|
240
|
+
"styleFunc": "(value, data, field) => ({ color: value === '正常' ? 'green' : 'red' })"
|
|
241
|
+
}
|
|
242
|
+
]
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"name": "财务信息",
|
|
246
|
+
"fields": [
|
|
247
|
+
{
|
|
248
|
+
"key": "f_amount",
|
|
249
|
+
"name": "金额",
|
|
250
|
+
"span": 2,
|
|
251
|
+
"showIf": "(data, field) => data.f_amount > 0",
|
|
252
|
+
"styleFunc": "(value, data, field) => ({ color: value > 5000 ? 'red' : 'green', fontWeight: 'bold' })",
|
|
253
|
+
"formatFunc": "(value, data, field) => '¥' + Number(value).toLocaleString()",
|
|
254
|
+
"requireFunc": "(data, field) => data.f_amount > 1000"
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"key": "f_phone",
|
|
258
|
+
"name": "联系电话",
|
|
259
|
+
"formatFunc": "(value, data, field) => value ? value.replace(/(\\d{3})\\d{4}(\\d{4})/, '$1****$2') : '--'"
|
|
260
|
+
}
|
|
261
|
+
]
|
|
262
|
+
}
|
|
263
|
+
]
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### 数组分组配置示例
|
|
267
|
+
|
|
268
|
+
```javascript
|
|
269
|
+
// 配置文件:deviceList.json
|
|
270
|
+
[
|
|
271
|
+
{
|
|
272
|
+
"name": "设备列表",
|
|
273
|
+
"type": "array",
|
|
274
|
+
"key": "devices",
|
|
275
|
+
"fields": [
|
|
276
|
+
{
|
|
277
|
+
"key": "f_name",
|
|
278
|
+
"name": "设备名称",
|
|
279
|
+
"styleFunc": "(value, data, field) => ({ fontWeight: 'bold' })"
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"key": "f_status",
|
|
283
|
+
"name": "状态",
|
|
284
|
+
"styleFunc": "(value, data, field) => ({ color: value === '在线' ? 'green' : 'gray' })"
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"key": "f_amount",
|
|
288
|
+
"name": "金额",
|
|
289
|
+
"formatFunc": "(value, data, field) => value ? '¥' + value : '--'"
|
|
290
|
+
}
|
|
291
|
+
]
|
|
292
|
+
}
|
|
293
|
+
]
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
## 使用示例
|
|
297
|
+
|
|
298
|
+
### 基础使用
|
|
299
|
+
|
|
300
|
+
```vue
|
|
301
|
+
<template>
|
|
302
|
+
<x-descriptions-group
|
|
303
|
+
:data="deviceData"
|
|
304
|
+
configName="deviceInfo">
|
|
305
|
+
</x-descriptions-group>
|
|
306
|
+
</template>
|
|
307
|
+
|
|
308
|
+
<script>
|
|
309
|
+
import XDescriptionsGroup from '@vue2-client/base-client/components/common/XDescriptions/XDescriptionsGroup'
|
|
310
|
+
|
|
311
|
+
export default {
|
|
312
|
+
components: {
|
|
313
|
+
XDescriptionsGroup
|
|
314
|
+
},
|
|
315
|
+
data () {
|
|
316
|
+
return {
|
|
317
|
+
deviceData: {
|
|
318
|
+
f_name: '智能水表001',
|
|
319
|
+
f_status: '正常',
|
|
320
|
+
f_amount: 15000,
|
|
321
|
+
f_phone: '13812345678'
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
</script>
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### 高级用法 - 动态配置
|
|
330
|
+
|
|
331
|
+
```vue
|
|
332
|
+
<template>
|
|
333
|
+
<x-descriptions-group
|
|
334
|
+
:data="formData"
|
|
335
|
+
:configName="configName"
|
|
336
|
+
serviceName="customService">
|
|
337
|
+
</x-descriptions-group>
|
|
338
|
+
</template>
|
|
339
|
+
|
|
340
|
+
<script>
|
|
341
|
+
export default {
|
|
342
|
+
data () {
|
|
343
|
+
return {
|
|
344
|
+
configName: 'dynamicForm',
|
|
345
|
+
formData: {
|
|
346
|
+
// 根据业务需求动态构建数据
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
},
|
|
350
|
+
created() {
|
|
351
|
+
// 根据用户权限动态选择配置
|
|
352
|
+
this.configName = this.isAdmin ? 'adminForm' : 'userForm'
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
</script>
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
## 注意事项
|
|
359
|
+
|
|
360
|
+
1. **函数格式**: 所有函数字符串必须使用箭头函数格式,如 `"(data, field) => data.amount > 1000"`
|
|
361
|
+
2. **错误处理**: 函数执行错误时会输出警告日志,不会影响组件正常渲染
|
|
362
|
+
3. **性能考虑**: 函数会在每次渲染时执行,避免在函数中编写耗时操作
|
|
363
|
+
4. **样式应用**: styleFunc 通过内联样式应用到字段内容上,优先级低于CSS类
|
|
364
|
+
5. **兼容性**: 保持向后兼容,不配置函数的字段按原样显示
|
|
365
|
+
|
|
366
|
+
## 支持的显示模式
|
|
367
|
+
|
|
368
|
+
组件支持三种 tab 显示模式,通过配置文件设置:
|
|
369
|
+
|
|
370
|
+
- `left`: 左侧垂直导航(默认)
|
|
371
|
+
- `top`: 顶部横向导航
|
|
372
|
+
- `none`: 无导航,直接显示所有内容
|
|
373
|
+
|
|
374
|
+
配置示例:
|
|
375
|
+
|
|
376
|
+
```javascript
|
|
377
|
+
{
|
|
378
|
+
"tabMode": "top",
|
|
379
|
+
"column": 2,
|
|
380
|
+
"groups": [...]
|
|
381
|
+
}
|
|
382
|
+
```
|