vue2-client 1.18.37 → 1.18.39

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 (98) hide show
  1. package/.eslintrc.js +90 -90
  2. package/Components.md +60 -60
  3. package/docs/index.md +30 -30
  4. package/index.js +31 -31
  5. package/jest-transform-stub.js +8 -8
  6. package/jest.setup.js +7 -7
  7. package/package.json +1 -1
  8. package/src/assets/img/querySlotDemo.svg +15 -15
  9. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  10. package/src/base-client/components/common/CitySelect/index.js +3 -3
  11. package/src/base-client/components/common/CitySelect/index.md +109 -109
  12. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  13. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  14. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  15. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  16. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  17. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  18. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  19. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  20. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  21. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  22. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  23. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  24. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  25. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  26. package/src/base-client/components/common/Tree/index.js +2 -2
  27. package/src/base-client/components/common/Upload/index.js +3 -3
  28. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  29. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  30. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  31. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  32. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  33. package/src/base-client/components/common/XDatePicker/demo.vue +31 -0
  34. package/src/base-client/components/common/XDatePicker/index.vue +61 -0
  35. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  36. package/src/base-client/components/common/XDescriptions/index.md +322 -322
  37. package/src/base-client/components/common/XForm/XForm.vue +5 -3
  38. package/src/base-client/components/common/XForm/XFormItem.vue +1 -1
  39. package/src/base-client/components/common/XForm/index.md +178 -178
  40. package/src/base-client/components/common/XFormTable/demo.vue +125 -125
  41. package/src/base-client/components/common/XReport/print.js +186 -186
  42. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  43. package/src/base-client/components/common/XStepView/index.js +3 -3
  44. package/src/base-client/components/common/XStepView/index.md +31 -31
  45. package/src/base-client/components/common/XTable/XTable.vue +1715 -1715
  46. package/src/base-client/components/common/XTable/XTableWrapper.vue +769 -759
  47. package/src/base-client/components/common/XTable/index.md +255 -255
  48. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  49. package/src/base-client/plugins/Config.js +19 -19
  50. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  51. package/src/components/Charts/Bar.vue +62 -62
  52. package/src/components/Charts/ChartCard.vue +134 -134
  53. package/src/components/Charts/Liquid.vue +67 -67
  54. package/src/components/Charts/MiniArea.vue +39 -39
  55. package/src/components/Charts/MiniBar.vue +39 -39
  56. package/src/components/Charts/MiniProgress.vue +75 -75
  57. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  58. package/src/components/Charts/Radar.vue +68 -68
  59. package/src/components/Charts/RankList.vue +77 -77
  60. package/src/components/Charts/TagCloud.vue +113 -113
  61. package/src/components/Charts/TransferBar.vue +64 -64
  62. package/src/components/Charts/Trend.vue +82 -82
  63. package/src/components/Charts/chart.less +12 -12
  64. package/src/components/Charts/smooth.area.less +13 -13
  65. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  66. package/src/components/NumberInfo/index.js +3 -3
  67. package/src/components/NumberInfo/index.less +54 -54
  68. package/src/components/NumberInfo/index.md +43 -43
  69. package/src/components/card/ChartCard.vue +79 -79
  70. package/src/components/chart/Bar.vue +60 -60
  71. package/src/components/chart/MiniArea.vue +67 -67
  72. package/src/components/chart/MiniBar.vue +59 -59
  73. package/src/components/chart/MiniProgress.vue +57 -57
  74. package/src/components/chart/Radar.vue +80 -80
  75. package/src/components/chart/RankingList.vue +60 -60
  76. package/src/components/chart/Trend.vue +79 -79
  77. package/src/components/chart/index.less +9 -9
  78. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  79. package/src/components/input/IInput.vue +66 -66
  80. package/src/components/menu/SideMenu.vue +75 -75
  81. package/src/components/menu/menu.js +273 -273
  82. package/src/components/tool/AStepItem.vue +60 -60
  83. package/src/layouts/CommonLayout.vue +56 -56
  84. package/src/layouts/header/HeaderNotice.vue +177 -177
  85. package/src/lib.js +1 -1
  86. package/src/mock/extend/index.js +84 -84
  87. package/src/mock/goods/index.js +108 -108
  88. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  89. package/src/pages/system/dictionary/index.vue +44 -44
  90. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  91. package/src/pages/system/monitor/operLog/index.vue +37 -37
  92. package/src/services/api/cas.js +79 -79
  93. package/src/store/modules/setting.js +119 -119
  94. package/src/utils/authority-utils.js +85 -85
  95. package/src/utils/errorCode.js +6 -6
  96. package/src/utils/map-utils.js +47 -47
  97. package/vue.config.js +4 -4
  98. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
@@ -1,322 +1,322 @@
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(可选,默认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
- ### 字段属性说明
122
-
123
- #### span - 列宽控制
124
-
125
- - **作用**: 控制字段占用的列数
126
- - **类型**: `Number`
127
- - **默认值**: `1`
128
- - **示例**: `"span": 2` 表示该字段占用 2 列宽度
129
-
130
- ### 字段函数说明
131
-
132
- #### 1. showIf - 条件显示函数
133
-
134
- - **作用**: 控制字段是否显示
135
- - **参数**: `(data, field)`
136
- - **返回值**: `boolean`
137
- - **示例**: `"showIf": "(data, field) => data.amount > 1000"`
138
-
139
- #### 2. styleFunc - 样式函数
140
-
141
- - **作用**: 设置字段内容的样式
142
- - **参数**: `(value, data, field)`
143
- - **返回值**: `Object` 样式对象,如 `{color: 'red'}`
144
- - **示例**: `"styleFunc": "(value, data, field) => ({ color: value > 0 ? 'green' : 'red' })"`
145
-
146
- #### 3. formatFunc - 格式化函数
147
-
148
- - **作用**: 自定义字段值的显示格式
149
- - **参数**: `(value, data, field)`
150
- - **返回值**: `String` 格式化后的字符串
151
- - **示例**: `"formatFunc": "(value, data, field) => '¥' + value.toLocaleString()"`
152
-
153
- #### 4. requireFunc - 必填标记函数
154
-
155
- - **作用**: 在字段标题后显示红色星号
156
- - **参数**: `(data, field)`
157
- - **返回值**: `boolean`
158
- - **示例**: `"requireFunc": "(data, field) => data.type === 'important'"`
159
-
160
- ## 完整配置示例
161
-
162
- ### 普通分组配置示例
163
-
164
- ```javascript
165
- // 配置文件:deviceInfo.json
166
- [
167
- {
168
- "name": "基本信息",
169
- "fields": [
170
- {
171
- "key": "f_name",
172
- "name": "设备名称",
173
- "span": 2,
174
- "requireFunc": "true"
175
- },
176
- {
177
- "key": "f_status",
178
- "name": "状态",
179
- "showIf": "(data, field) => data.f_status",
180
- "styleFunc": "(value, data, field) => ({ color: value === '正常' ? 'green' : 'red' })"
181
- }
182
- ]
183
- },
184
- {
185
- "name": "财务信息",
186
- "fields": [
187
- {
188
- "key": "f_amount",
189
- "name": "金额",
190
- "span": 2,
191
- "showIf": "(data, field) => data.f_amount > 0",
192
- "styleFunc": "(value, data, field) => ({ color: value > 5000 ? 'red' : 'green', fontWeight: 'bold' })",
193
- "formatFunc": "(value, data, field) => '¥' + Number(value).toLocaleString()",
194
- "requireFunc": "(data, field) => data.f_amount > 1000"
195
- },
196
- {
197
- "key": "f_phone",
198
- "name": "联系电话",
199
- "formatFunc": "(value, data, field) => value ? value.replace(/(\\d{3})\\d{4}(\\d{4})/, '$1****$2') : '--'"
200
- }
201
- ]
202
- }
203
- ]
204
- ```
205
-
206
- ### 数组分组配置示例
207
-
208
- ```javascript
209
- // 配置文件:deviceList.json
210
- [
211
- {
212
- "name": "设备列表",
213
- "type": "array",
214
- "key": "devices",
215
- "fields": [
216
- {
217
- "key": "f_name",
218
- "name": "设备名称",
219
- "styleFunc": "(value, data, field) => ({ fontWeight: 'bold' })"
220
- },
221
- {
222
- "key": "f_status",
223
- "name": "状态",
224
- "styleFunc": "(value, data, field) => ({ color: value === '在线' ? 'green' : 'gray' })"
225
- },
226
- {
227
- "key": "f_amount",
228
- "name": "金额",
229
- "formatFunc": "(value, data, field) => value ? '¥' + value : '--'"
230
- }
231
- ]
232
- }
233
- ]
234
- ```
235
-
236
- ## 使用示例
237
-
238
- ### 基础使用
239
-
240
- ```vue
241
- <template>
242
- <x-descriptions-group
243
- :data="deviceData"
244
- configName="deviceInfo">
245
- </x-descriptions-group>
246
- </template>
247
-
248
- <script>
249
- import XDescriptionsGroup from '@vue2-client/base-client/components/common/XDescriptions/XDescriptionsGroup'
250
-
251
- export default {
252
- components: {
253
- XDescriptionsGroup
254
- },
255
- data () {
256
- return {
257
- deviceData: {
258
- f_name: '智能水表001',
259
- f_status: '正常',
260
- f_amount: 15000,
261
- f_phone: '13812345678'
262
- }
263
- }
264
- }
265
- }
266
- </script>
267
- ```
268
-
269
- ### 高级用法 - 动态配置
270
-
271
- ```vue
272
- <template>
273
- <x-descriptions-group
274
- :data="formData"
275
- :configName="configName"
276
- serviceName="customService">
277
- </x-descriptions-group>
278
- </template>
279
-
280
- <script>
281
- export default {
282
- data () {
283
- return {
284
- configName: 'dynamicForm',
285
- formData: {
286
- // 根据业务需求动态构建数据
287
- }
288
- }
289
- },
290
- created() {
291
- // 根据用户权限动态选择配置
292
- this.configName = this.isAdmin ? 'adminForm' : 'userForm'
293
- }
294
- }
295
- </script>
296
- ```
297
-
298
- ## 注意事项
299
-
300
- 1. **函数格式**: 所有函数字符串必须使用箭头函数格式,如 `"(data, field) => data.amount > 1000"`
301
- 2. **错误处理**: 函数执行错误时会输出警告日志,不会影响组件正常渲染
302
- 3. **性能考虑**: 函数会在每次渲染时执行,避免在函数中编写耗时操作
303
- 4. **样式应用**: styleFunc 通过内联样式应用到字段内容上,优先级低于CSS类
304
- 5. **兼容性**: 保持向后兼容,不配置函数的字段按原样显示
305
-
306
- ## 支持的显示模式
307
-
308
- 组件支持三种 tab 显示模式,通过配置文件设置:
309
-
310
- - `left`: 左侧垂直导航(默认)
311
- - `top`: 顶部横向导航
312
- - `none`: 无导航,直接显示所有内容
313
-
314
- 配置示例:
315
-
316
- ```javascript
317
- {
318
- "tabMode": "top",
319
- "column": 2,
320
- "groups": [...]
321
- }
322
- ```
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(可选,默认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
+ ### 字段属性说明
122
+
123
+ #### span - 列宽控制
124
+
125
+ - **作用**: 控制字段占用的列数
126
+ - **类型**: `Number`
127
+ - **默认值**: `1`
128
+ - **示例**: `"span": 2` 表示该字段占用 2 列宽度
129
+
130
+ ### 字段函数说明
131
+
132
+ #### 1. showIf - 条件显示函数
133
+
134
+ - **作用**: 控制字段是否显示
135
+ - **参数**: `(data, field)`
136
+ - **返回值**: `boolean`
137
+ - **示例**: `"showIf": "(data, field) => data.amount > 1000"`
138
+
139
+ #### 2. styleFunc - 样式函数
140
+
141
+ - **作用**: 设置字段内容的样式
142
+ - **参数**: `(value, data, field)`
143
+ - **返回值**: `Object` 样式对象,如 `{color: 'red'}`
144
+ - **示例**: `"styleFunc": "(value, data, field) => ({ color: value > 0 ? 'green' : 'red' })"`
145
+
146
+ #### 3. formatFunc - 格式化函数
147
+
148
+ - **作用**: 自定义字段值的显示格式
149
+ - **参数**: `(value, data, field)`
150
+ - **返回值**: `String` 格式化后的字符串
151
+ - **示例**: `"formatFunc": "(value, data, field) => '¥' + value.toLocaleString()"`
152
+
153
+ #### 4. requireFunc - 必填标记函数
154
+
155
+ - **作用**: 在字段标题后显示红色星号
156
+ - **参数**: `(data, field)`
157
+ - **返回值**: `boolean`
158
+ - **示例**: `"requireFunc": "(data, field) => data.type === 'important'"`
159
+
160
+ ## 完整配置示例
161
+
162
+ ### 普通分组配置示例
163
+
164
+ ```javascript
165
+ // 配置文件:deviceInfo.json
166
+ [
167
+ {
168
+ "name": "基本信息",
169
+ "fields": [
170
+ {
171
+ "key": "f_name",
172
+ "name": "设备名称",
173
+ "span": 2,
174
+ "requireFunc": "true"
175
+ },
176
+ {
177
+ "key": "f_status",
178
+ "name": "状态",
179
+ "showIf": "(data, field) => data.f_status",
180
+ "styleFunc": "(value, data, field) => ({ color: value === '正常' ? 'green' : 'red' })"
181
+ }
182
+ ]
183
+ },
184
+ {
185
+ "name": "财务信息",
186
+ "fields": [
187
+ {
188
+ "key": "f_amount",
189
+ "name": "金额",
190
+ "span": 2,
191
+ "showIf": "(data, field) => data.f_amount > 0",
192
+ "styleFunc": "(value, data, field) => ({ color: value > 5000 ? 'red' : 'green', fontWeight: 'bold' })",
193
+ "formatFunc": "(value, data, field) => '¥' + Number(value).toLocaleString()",
194
+ "requireFunc": "(data, field) => data.f_amount > 1000"
195
+ },
196
+ {
197
+ "key": "f_phone",
198
+ "name": "联系电话",
199
+ "formatFunc": "(value, data, field) => value ? value.replace(/(\\d{3})\\d{4}(\\d{4})/, '$1****$2') : '--'"
200
+ }
201
+ ]
202
+ }
203
+ ]
204
+ ```
205
+
206
+ ### 数组分组配置示例
207
+
208
+ ```javascript
209
+ // 配置文件:deviceList.json
210
+ [
211
+ {
212
+ "name": "设备列表",
213
+ "type": "array",
214
+ "key": "devices",
215
+ "fields": [
216
+ {
217
+ "key": "f_name",
218
+ "name": "设备名称",
219
+ "styleFunc": "(value, data, field) => ({ fontWeight: 'bold' })"
220
+ },
221
+ {
222
+ "key": "f_status",
223
+ "name": "状态",
224
+ "styleFunc": "(value, data, field) => ({ color: value === '在线' ? 'green' : 'gray' })"
225
+ },
226
+ {
227
+ "key": "f_amount",
228
+ "name": "金额",
229
+ "formatFunc": "(value, data, field) => value ? '¥' + value : '--'"
230
+ }
231
+ ]
232
+ }
233
+ ]
234
+ ```
235
+
236
+ ## 使用示例
237
+
238
+ ### 基础使用
239
+
240
+ ```vue
241
+ <template>
242
+ <x-descriptions-group
243
+ :data="deviceData"
244
+ configName="deviceInfo">
245
+ </x-descriptions-group>
246
+ </template>
247
+
248
+ <script>
249
+ import XDescriptionsGroup from '@vue2-client/base-client/components/common/XDescriptions/XDescriptionsGroup'
250
+
251
+ export default {
252
+ components: {
253
+ XDescriptionsGroup
254
+ },
255
+ data () {
256
+ return {
257
+ deviceData: {
258
+ f_name: '智能水表001',
259
+ f_status: '正常',
260
+ f_amount: 15000,
261
+ f_phone: '13812345678'
262
+ }
263
+ }
264
+ }
265
+ }
266
+ </script>
267
+ ```
268
+
269
+ ### 高级用法 - 动态配置
270
+
271
+ ```vue
272
+ <template>
273
+ <x-descriptions-group
274
+ :data="formData"
275
+ :configName="configName"
276
+ serviceName="customService">
277
+ </x-descriptions-group>
278
+ </template>
279
+
280
+ <script>
281
+ export default {
282
+ data () {
283
+ return {
284
+ configName: 'dynamicForm',
285
+ formData: {
286
+ // 根据业务需求动态构建数据
287
+ }
288
+ }
289
+ },
290
+ created() {
291
+ // 根据用户权限动态选择配置
292
+ this.configName = this.isAdmin ? 'adminForm' : 'userForm'
293
+ }
294
+ }
295
+ </script>
296
+ ```
297
+
298
+ ## 注意事项
299
+
300
+ 1. **函数格式**: 所有函数字符串必须使用箭头函数格式,如 `"(data, field) => data.amount > 1000"`
301
+ 2. **错误处理**: 函数执行错误时会输出警告日志,不会影响组件正常渲染
302
+ 3. **性能考虑**: 函数会在每次渲染时执行,避免在函数中编写耗时操作
303
+ 4. **样式应用**: styleFunc 通过内联样式应用到字段内容上,优先级低于CSS类
304
+ 5. **兼容性**: 保持向后兼容,不配置函数的字段按原样显示
305
+
306
+ ## 支持的显示模式
307
+
308
+ 组件支持三种 tab 显示模式,通过配置文件设置:
309
+
310
+ - `left`: 左侧垂直导航(默认)
311
+ - `top`: 顶部横向导航
312
+ - `none`: 无导航,直接显示所有内容
313
+
314
+ 配置示例:
315
+
316
+ ```javascript
317
+ {
318
+ "tabMode": "top",
319
+ "column": 2,
320
+ "groups": [...]
321
+ }
322
+ ```
@@ -302,6 +302,8 @@ export default {
302
302
  monthRangePicker: 'YYYY-MM',
303
303
  datePicker: 'YYYY-MM-DD',
304
304
  rangePicker: 'YYYY-MM-DD HH:mm:ss',
305
+ timePicker: 'HH:mm:ss',
306
+ timeRangePicker: 'HH:mm:ss',
305
307
  }
306
308
  let format = formatMap[type]
307
309
 
@@ -331,7 +333,7 @@ export default {
331
333
  default:
332
334
  return undefined
333
335
  }
334
- if (['monthPicker', 'yearPicker', 'datePicker'].includes(type)) {
336
+ if (['monthPicker', 'yearPicker', 'datePicker', 'timePicker'].includes(type)) {
335
337
  if (queryType === 'BETWEEN') {
336
338
  return [start, end]
337
339
  }
@@ -340,7 +342,7 @@ export default {
340
342
  } else {
341
343
  return end
342
344
  }
343
- } else if (['rangePicker', 'yearRangePicker', 'monthRangePicker'].includes(type)) {
345
+ } else if (['rangePicker', 'yearRangePicker', 'monthRangePicker', 'timeRangePicker'].includes(type)) {
344
346
  return [start, end]
345
347
  }
346
348
  return [start, end]
@@ -348,7 +350,7 @@ export default {
348
350
  setFormProps (formData, item) {
349
351
  formData[item.model] = undefined
350
352
  if (item.queryFormDefault) {
351
- if (['datePicker', 'rangePicker', 'yearPicker', 'monthPicker', 'yearRangePicker', 'monthRangePicker'].includes(item.type)) {
353
+ if (['datePicker', 'rangePicker', 'yearPicker', 'monthPicker', 'yearRangePicker', 'monthRangePicker', 'timePicker', 'timeRangePicker'].includes(item.type)) {
352
354
  formData[item.model] = this.getDateRange(item)
353
355
  } else if (['treeSelect', 'select', 'checkbox'].includes(item.type) && ['curOrgId', 'curDepId', 'curUserId'].includes(item.queryFormDefault)) {
354
356
  if (item.queryFormDefault === 'curOrgId') {