@qingflow-tech/qingflow-cli 1.1.61-beta.4 → 1.1.61-beta.5

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 (56) hide show
  1. package/README.md +3 -3
  2. package/package.json +1 -1
  3. package/pyproject.toml +1 -1
  4. package/skills/qingflow-cli/reference/builder/30-schema-fields.md +13 -0
  5. package/skills/qingflow-cli/reference/builder/70-portal.md +37 -16
  6. package/skills/qingflow-cli/reference/examples/portal/portal_apply_v1alpha1.example.json +100 -0
  7. package/skills/qingflow-cli/reference/examples/portal/portal_sections_all_types.example.json +6 -7
  8. package/src/qingflow_mcp/app_form_validator.py +20 -3
  9. package/src/qingflow_mcp/builder_facade/app_form.py +137 -17
  10. package/src/qingflow_mcp/builder_facade/models.py +164 -13
  11. package/src/qingflow_mcp/builder_facade/portals_schema.py +397 -0
  12. package/src/qingflow_mcp/builder_facade/schemas/app_form/manifest.json +14 -1
  13. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/complete.json +49 -9
  14. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/address.json +27 -0
  15. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/ai_content_classification.json +146 -0
  16. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/ai_content_extraction.json +146 -0
  17. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/ai_content_generation.json +146 -0
  18. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/ai_document_parsing.json +146 -0
  19. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/ai_image_generation.json +146 -0
  20. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/ai_image_recognition.json +146 -0
  21. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/ai_machine_translation.json +146 -0
  22. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/ai_text_summary.json +146 -0
  23. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/amount.json +2 -2
  24. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/attachment.json +27 -0
  25. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/date_duration.json +146 -0
  26. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/embed_field.json +146 -0
  27. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/image_select.json +146 -0
  28. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/location.json +146 -0
  29. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/number.json +2 -2
  30. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/ocr.json +146 -0
  31. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/q_linker.json +2 -2
  32. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/relation.json +27 -0
  33. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/subtable.json +29 -2
  34. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/summary.json +20 -7
  35. package/src/qingflow_mcp/builder_facade/schemas/portals/manifest.json +59 -0
  36. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/complete.json +1397 -0
  37. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/components/carousel.json +193 -0
  38. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/components/chart.json +643 -0
  39. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/components/favourite.json +203 -0
  40. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/components/filter.json +268 -0
  41. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/components/grid.json +265 -0
  42. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/components/link.json +131 -0
  43. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/components/task.json +199 -0
  44. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/components/text.json +123 -0
  45. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/components/view.json +196 -0
  46. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/summary.json +800 -0
  47. package/src/qingflow_mcp/builder_facade/service.py +1104 -71
  48. package/src/qingflow_mcp/cli/commands/builder.py +114 -5
  49. package/src/qingflow_mcp/public_surface.py +2 -0
  50. package/src/qingflow_mcp/server_app_builder.py +32 -1
  51. package/src/qingflow_mcp/solution/compiler/icon_utils.py +73 -0
  52. package/src/qingflow_mcp/solution/executor.py +5 -2
  53. package/src/qingflow_mcp/tools/ai_builder_tools.py +110 -12
  54. package/src/qingflow_mcp/tools/portal_tools.py +4 -54
  55. package/src/qingflow_mcp/tools/portal_writer.py +59 -0
  56. package/src/qingflow_mcp/tools/solution_tools.py +2 -0
@@ -0,0 +1,643 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://qingflow.com/schemas/builder/portals/v1alpha1/components/chart.json",
4
+ "title": "Qingflow Builder Portals Section · chart (v1alpha1)",
5
+ "portalChartSectionDescription": "门户报表(QingBI 图表)组件(chart)的详细配置专项 Schema。获取命令:qingflow builder portal schema --schema-kind chart(MCP: portal_schema(schema_kind=\"chart\"))。本 Schema 校验 sections[] 中单个 chart 区块(自包含,可直接交给 JSON Schema 校验器);后端 DashComponentInfo.type=1。整门户声明走 summary/complete 档。",
6
+ "$defs": {
7
+ "Position": {
8
+ "type": "object",
9
+ "additionalProperties": false,
10
+ "positionShapeDescription": "网格位置。PC 是 24 列网格(cols≤24),mobile 是 6 列网格(cols≤6);同行组件共享同一 y 与 rows,一行 cols 合计 24。mobile 可省略(缺省与 pc 同布局)。平铺别名 pc_x/pc_y/pc_w/pc_h、mobile_* 也接受,归一为本结构。标准行高:指标卡 rows=5、BI 图表 rows=7、数据视图 rows=11、业务入口 rows=4。",
11
+ "properties": {
12
+ "pc": {
13
+ "$ref": "#/$defs/PositionDetail"
14
+ },
15
+ "mobile": {
16
+ "$ref": "#/$defs/PositionDetail"
17
+ }
18
+ }
19
+ },
20
+ "PositionDetail": {
21
+ "type": "object",
22
+ "additionalProperties": false,
23
+ "positionDetailShapeDescription": "单端位置:x=列偏移、y=行偏移、cols=占宽、rows=占高。",
24
+ "properties": {
25
+ "x": {
26
+ "type": [
27
+ "integer",
28
+ "null"
29
+ ],
30
+ "minimum": 0
31
+ },
32
+ "y": {
33
+ "type": [
34
+ "integer",
35
+ "null"
36
+ ],
37
+ "minimum": 0
38
+ },
39
+ "cols": {
40
+ "type": [
41
+ "integer",
42
+ "null"
43
+ ],
44
+ "minimum": 1
45
+ },
46
+ "rows": {
47
+ "type": [
48
+ "integer",
49
+ "null"
50
+ ],
51
+ "minimum": 1
52
+ }
53
+ },
54
+ "x-backend": "DashPosition.pc / DashPosition.mobile"
55
+ },
56
+ "ChartRef": {
57
+ "type": "object",
58
+ "additionalProperties": false,
59
+ "chartRefShapeDescription": "引用已存在的 QingBI 图表。chart_id 或 chart_name 至少一个;按 chart_name 解析时必须给 app_key。别名 chartId/chart_key/chartKey/chartName。",
60
+ "anyOf": [
61
+ {
62
+ "required": [
63
+ "chart_id"
64
+ ]
65
+ },
66
+ {
67
+ "required": [
68
+ "chart_name",
69
+ "app_key"
70
+ ]
71
+ }
72
+ ],
73
+ "properties": {
74
+ "app_key": {
75
+ "type": "string",
76
+ "chartRefAppKeyShapeDescription": "图表所属应用 key。别名 appKey。"
77
+ },
78
+ "ref_kind": {
79
+ "type": "string",
80
+ "enum": [
81
+ "chart",
82
+ "bi_chart"
83
+ ],
84
+ "chartRefKindShapeDescription": "引用面判别:chart=轻流报表(chart 表唯一键 chartKey,后端组件 type=1);bi_chart=轻析 BI 报表(bi_chart 整型 chart_id,后端组件 type=9)。缺省 bi_chart。",
85
+ "x-backend": "DashComponentInfo.type ∈ {1, 9}"
86
+ },
87
+ "chart_id": {
88
+ "type": "string",
89
+ "chartRefIdShapeDescription": "图表 id(后端唯一键,回读优先携带)。 ref_kind=chart 时为 chart 表唯一键 chartKey;ref_kind=bi_chart 时为 bi_chart 整型 chart_id。",
90
+ "x-backend": "DashComponentInfo.dashChartId"
91
+ },
92
+ "chart_name": {
93
+ "type": "string",
94
+ "chartRefNameShapeDescription": "图表名称(按名解析的定位键)。别名 name。"
95
+ }
96
+ }
97
+ },
98
+ "InlineChart": {
99
+ "type": "object",
100
+ "additionalProperties": false,
101
+ "required": [
102
+ "app_key",
103
+ "name",
104
+ "chart_type"
105
+ ],
106
+ "inlineChartShapeDescription": "内联创建 QingBI 图表(与 builder chart apply 同一公开契约的子集);同一 apply 内 app_key+name+chart_type 相同且配置一致的多个区块复用同一图表,配置不同则拒绝写入。别名 inline_chart/create_chart。",
107
+ "properties": {
108
+ "app_key": {
109
+ "type": "string",
110
+ "inlineChartAppKeyShapeDescription": "图表所属应用 key。"
111
+ },
112
+ "name": {
113
+ "type": "string",
114
+ "minLength": 1,
115
+ "inlineChartNameShapeDescription": "图表名称(同 apply 内去重键之一)。"
116
+ },
117
+ "chart_type": {
118
+ "type": "string",
119
+ "enum": [
120
+ "target",
121
+ "indicator",
122
+ "summary",
123
+ "pie",
124
+ "bar",
125
+ "columnar",
126
+ "line",
127
+ "table",
128
+ "detail",
129
+ "area",
130
+ "stacked_area",
131
+ "pct_stack_area",
132
+ "funnel",
133
+ "waterfall",
134
+ "gauge",
135
+ "heatmap",
136
+ "histogram",
137
+ "treemap",
138
+ "radar",
139
+ "stacked_bar",
140
+ "pct_stack_bar",
141
+ "stacked_column",
142
+ "pct_stack_col",
143
+ "scatter",
144
+ "ring",
145
+ "rose",
146
+ "dualaxes",
147
+ "map",
148
+ "timeline"
149
+ ],
150
+ "inlineChartTypeShapeDescription": "图表类型;指标卡场景用 target/indicator 且区块 rows=5。"
151
+ },
152
+ "metric": {
153
+ "$ref": "#/$defs/ChartMetric",
154
+ "inlineChartMetricShapeDescription": "主指标;字符串如 \"count(*)\"/\"sum(金额)\" 或对象形态。"
155
+ },
156
+ "metrics": {
157
+ "type": "array",
158
+ "items": {
159
+ "$ref": "#/$defs/ChartMetric"
160
+ },
161
+ "inlineChartMetricsShapeDescription": "多指标列表(多轴/组合图)。"
162
+ },
163
+ "x_metric": {
164
+ "$ref": "#/$defs/ChartMetric",
165
+ "inlineChartXMetricShapeDescription": "X 轴指标(散点等)。"
166
+ },
167
+ "y_metric": {
168
+ "$ref": "#/$defs/ChartMetric",
169
+ "inlineChartYMetricShapeDescription": "Y 轴指标。"
170
+ },
171
+ "left_metric": {
172
+ "$ref": "#/$defs/ChartMetric",
173
+ "inlineChartLeftMetricShapeDescription": "左轴指标(双轴图)。"
174
+ },
175
+ "right_metric": {
176
+ "$ref": "#/$defs/ChartMetric",
177
+ "inlineChartRightMetricShapeDescription": "右轴指标(双轴图)。"
178
+ },
179
+ "value_metric": {
180
+ "$ref": "#/$defs/ChartMetric",
181
+ "inlineChartValueMetricShapeDescription": "值指标。"
182
+ },
183
+ "target_metric": {
184
+ "$ref": "#/$defs/ChartMetric",
185
+ "inlineChartTargetMetricShapeDescription": "目标值指标(target 图)。"
186
+ },
187
+ "group_by": {
188
+ "type": "array",
189
+ "items": {
190
+ "type": "string"
191
+ },
192
+ "inlineChartGroupByShapeDescription": "分组字段(显示名列表)。"
193
+ },
194
+ "dimension_field_ids": {
195
+ "type": "array",
196
+ "items": {
197
+ "type": "string"
198
+ },
199
+ "inlineChartDimensionShapeDescription": "维度字段 id 列表。"
200
+ },
201
+ "indicator_field_ids": {
202
+ "type": "array",
203
+ "items": {
204
+ "type": "string"
205
+ },
206
+ "inlineChartIndicatorShapeDescription": "指标字段 id 列表。"
207
+ },
208
+ "rows": {
209
+ "type": "array",
210
+ "items": {
211
+ "type": "string"
212
+ },
213
+ "inlineChartRowsShapeDescription": "行维度(透视表)。"
214
+ },
215
+ "columns": {
216
+ "type": "array",
217
+ "items": {
218
+ "type": "string"
219
+ },
220
+ "inlineChartColumnsShapeDescription": "列维度(透视表)。"
221
+ },
222
+ "filters": {
223
+ "type": "array",
224
+ "items": {
225
+ "$ref": "#/$defs/ChartFilterRule"
226
+ },
227
+ "inlineChartFiltersShapeDescription": "图表数据过滤条件(单组 AND)。"
228
+ },
229
+ "visibility": {
230
+ "$ref": "#/$defs/Visibility",
231
+ "inlineChartVisibilityShapeDescription": "图表自身可见性(可选,与门户 visibility 同源编译)。"
232
+ },
233
+ "chart_id": {
234
+ "type": "string",
235
+ "inlineChartChartIdDescription": "已有图表 id(引用形态;等价 chart_ref.chart_id)。"
236
+ },
237
+ "question_config": {
238
+ "type": "array",
239
+ "inlineChartQuestionConfigDescription": "图表字段配置透传(chart apply 受控面)。",
240
+ "x-backend": "ChartUpsertPatch.questionConfig"
241
+ },
242
+ "user_config": {
243
+ "type": "array",
244
+ "inlineChartUserConfigDescription": "图表用户配置透传(chart apply 受控面)。",
245
+ "x-backend": "ChartUpsertPatch.userConfig"
246
+ },
247
+ "config": {
248
+ "type": "object",
249
+ "inlineChartConfigDescription": "图表 raw 配置透传(chart apply 受控面)。",
250
+ "x-backend": "ChartUpsertPatch.config"
251
+ }
252
+ }
253
+ },
254
+ "ChartMetric": {
255
+ "chartMetricShapeDescription": "聚合指标:字符串形态(如 \"count(*)\"、\"sum(金额)\",裸字段名默认 sum)或对象 {op, field_name, alias};op 常用 count/sum/avg/max/min。",
256
+ "oneOf": [
257
+ {
258
+ "type": "string",
259
+ "minLength": 1
260
+ },
261
+ {
262
+ "type": "object",
263
+ "additionalProperties": false,
264
+ "required": [
265
+ "op"
266
+ ],
267
+ "properties": {
268
+ "op": {
269
+ "type": "string",
270
+ "chartMetricOpShapeDescription": "聚合方式。别名 operation/agg/aggregate/aggregation。"
271
+ },
272
+ "field_name": {
273
+ "type": "string",
274
+ "chartMetricFieldShapeDescription": "聚合字段显示名;count(*) 时省略。别名 field/fieldName/name。"
275
+ },
276
+ "alias": {
277
+ "type": "string",
278
+ "chartMetricAliasShapeDescription": "指标别名(图例显示)。"
279
+ }
280
+ }
281
+ }
282
+ ]
283
+ },
284
+ "ChartFilterRule": {
285
+ "type": "object",
286
+ "additionalProperties": false,
287
+ "required": [
288
+ "field_name"
289
+ ],
290
+ "chartFilterRuleShapeDescription": "过滤规则。is_empty/not_empty 不带 values,其余 operator 必须带非空 values(单值可写作 value)。别名 field/fieldName/name。",
291
+ "properties": {
292
+ "field_name": {
293
+ "type": "string"
294
+ },
295
+ "operator": {
296
+ "type": "string",
297
+ "enum": [
298
+ "eq",
299
+ "neq",
300
+ "in",
301
+ "contains",
302
+ "gte",
303
+ "lte",
304
+ "is_empty",
305
+ "not_empty",
306
+ "belongs_to"
307
+ ],
308
+ "default": "eq",
309
+ "chartFilterOperatorShapeDescription": "比较符。别名 op。 belongs_to=成员/部门归属(后端 JUDGE_BELONG_TO=13,公式引擎全支持;成员类存量筛选形态)。"
310
+ },
311
+ "values": {
312
+ "type": "array",
313
+ "chartFilterValuesShapeDescription": "比较值列表。"
314
+ }
315
+ }
316
+ },
317
+ "Visibility": {
318
+ "type": "object",
319
+ "additionalProperties": false,
320
+ "required": [
321
+ "mode"
322
+ ],
323
+ "visibilityShapeDescription": "可见性与授权(与门户 visibility 同源编译);整段省略时按 workspace + external_mode=not。",
324
+ "allOf": [
325
+ {
326
+ "if": {
327
+ "properties": {
328
+ "mode": {
329
+ "const": "specific"
330
+ }
331
+ },
332
+ "required": [
333
+ "mode"
334
+ ]
335
+ },
336
+ "then": {
337
+ "required": [
338
+ "selectors"
339
+ ]
340
+ }
341
+ },
342
+ {
343
+ "if": {
344
+ "properties": {
345
+ "mode": {
346
+ "const": "everyone"
347
+ }
348
+ },
349
+ "required": [
350
+ "mode"
351
+ ]
352
+ },
353
+ "then": {
354
+ "required": [
355
+ "external_mode"
356
+ ],
357
+ "properties": {
358
+ "external_mode": {
359
+ "const": "workspace"
360
+ }
361
+ }
362
+ }
363
+ },
364
+ {
365
+ "if": {
366
+ "properties": {
367
+ "external_mode": {
368
+ "const": "specific"
369
+ }
370
+ },
371
+ "required": [
372
+ "external_mode"
373
+ ]
374
+ },
375
+ "then": {
376
+ "required": [
377
+ "external_selectors"
378
+ ]
379
+ }
380
+ }
381
+ ],
382
+ "properties": {
383
+ "mode": {
384
+ "type": "string",
385
+ "enum": [
386
+ "workspace",
387
+ "everyone",
388
+ "specific"
389
+ ],
390
+ "visibilityModeShapeDescription": "workspace=工作区可见,everyone=互联网公开(要求 external_mode=workspace),specific=指定成员/部门/角色。",
391
+ "x-backend": "dash.dashAuth(1/2/3)"
392
+ },
393
+ "selectors": {
394
+ "$ref": "#/$defs/VisibilitySelectors"
395
+ },
396
+ "external_mode": {
397
+ "type": "string",
398
+ "enum": [
399
+ "not",
400
+ "workspace",
401
+ "specific"
402
+ ],
403
+ "externalModeShapeDescription": "外部成员授权。别名 externalMode。",
404
+ "x-backend": "dash.externalAuth(NOT|WORKSPACE_ALL|SPECIFIC)"
405
+ },
406
+ "external_selectors": {
407
+ "$ref": "#/$defs/ExternalSelectors"
408
+ }
409
+ }
410
+ },
411
+ "VisibilitySelectors": {
412
+ "type": "object",
413
+ "additionalProperties": false,
414
+ "selectorsCompleteDescription": "指定成员/部门/角色选择器;各列表都不是单独必填,空对象表示指定范围但尚未配置成员(合法形态)。与 views 声明的 selectors 键集同构。",
415
+ "properties": {
416
+ "member_uids": {
417
+ "type": "array",
418
+ "items": {
419
+ "type": "integer"
420
+ },
421
+ "memberUidsDescription": "成员 uid 列表(数字)。"
422
+ },
423
+ "member_emails": {
424
+ "type": "array",
425
+ "items": {
426
+ "type": "string"
427
+ },
428
+ "memberEmailsDescription": "成员邮箱列表。"
429
+ },
430
+ "member_names": {
431
+ "type": "array",
432
+ "items": {
433
+ "type": "string"
434
+ },
435
+ "memberNamesDescription": "成员姓名列表(重名有歧义风险,优先 uid/email)。"
436
+ },
437
+ "dept_ids": {
438
+ "type": "array",
439
+ "items": {
440
+ "type": "integer"
441
+ },
442
+ "deptIdsDescription": "部门 id 列表。"
443
+ },
444
+ "dept_names": {
445
+ "type": "array",
446
+ "items": {
447
+ "type": "string"
448
+ },
449
+ "deptNamesDescription": "部门名称列表。"
450
+ },
451
+ "role_ids": {
452
+ "type": "array",
453
+ "items": {
454
+ "type": "integer"
455
+ },
456
+ "roleIdsDescription": "角色 id 列表。"
457
+ },
458
+ "role_names": {
459
+ "type": "array",
460
+ "items": {
461
+ "type": "string"
462
+ },
463
+ "roleNamesDescription": "角色名称列表。"
464
+ },
465
+ "include_sub_departs": {
466
+ "type": "boolean",
467
+ "default": false,
468
+ "includeSubDepartsDescription": "dept 指定时是否包含子部门。"
469
+ }
470
+ }
471
+ },
472
+ "ExternalSelectors": {
473
+ "type": "object",
474
+ "additionalProperties": false,
475
+ "externalSelectorsCompleteDescription": "指定外部成员选择器(与 views 声明键集同构)。",
476
+ "properties": {
477
+ "member_ids": {
478
+ "type": "array",
479
+ "items": {
480
+ "type": "string"
481
+ },
482
+ "externalMemberIdsDescription": "外部成员 id 列表。"
483
+ },
484
+ "member_emails": {
485
+ "type": "array",
486
+ "items": {
487
+ "type": "string"
488
+ },
489
+ "externalMemberEmailsDescription": "外部成员邮箱列表。"
490
+ },
491
+ "dept_ids": {
492
+ "type": "array",
493
+ "items": {
494
+ "type": "integer"
495
+ },
496
+ "externalDeptIdsDescription": "外部部门 id 列表。"
497
+ }
498
+ }
499
+ },
500
+ "Section": {
501
+ "type": "object",
502
+ "additionalProperties": false,
503
+ "required": [
504
+ "source_type"
505
+ ],
506
+ "properties": {
507
+ "title": {
508
+ "anyOf": [
509
+ {
510
+ "type": "string"
511
+ },
512
+ {
513
+ "type": "null"
514
+ }
515
+ ],
516
+ "sectionTitleDescription": "组件显示标题。空标题(null)是合法存量形态(显示标题开但标题空,读链渲染时回退图表名/视图名);创建语义缺省建议显式命名。",
517
+ "x-backend": "组件标题(DashChartInfo.title / DashChartInfo.chartComponentTitle / gridConfig.gridTitle / componentTaskTitle 等;null 落库 NULL)"
518
+ },
519
+ "source_type": {
520
+ "const": "chart",
521
+ "sourceTypeConstDescription": "组件类型固定为 chart(报表(QingBI 图表));后端 type 整数见 x-backend。",
522
+ "x-backend": "DashComponentInfo.type(chart)"
523
+ },
524
+ "role": {
525
+ "type": "string",
526
+ "roleShapeDescription": "组件角色标注(编排辅助,如 metric=指标卡;影响布局预设的排布与行高)。别名 zone/section_role。"
527
+ },
528
+ "position": {
529
+ "$ref": "#/$defs/Position"
530
+ },
531
+ "style_config": {
532
+ "type": "object",
533
+ "styleConfigSectionDescription": "组件级样式(受控键集;键白名单以 ws40013 dataset 实测形态校准,未经校准的键会被拒绝)。别名 dash_style_config/dashStyleConfigBO。",
534
+ "x-backend": "DashComponentInfo.dashStyleConfigBO(DashStyleConfigBO)"
535
+ },
536
+ "chart_ref": {
537
+ "$ref": "#/$defs/ChartRef",
538
+ "chartRefPropDescription": "引用已有图表(chart_ref 或 chart 二选一)。"
539
+ },
540
+ "chart": {
541
+ "$ref": "#/$defs/InlineChart",
542
+ "chartInlinePropDescription": "内联创建图表(chart_ref 或 chart 二选一)。"
543
+ },
544
+ "show_title": {
545
+ "type": "boolean",
546
+ "showTitleShapeDescription": "显示标题开关(draft_dash_chart.being_show_title 落库列)。提取侧读面必有值;存量 false 必须保真(渲染语义依赖)。声明缺省时编译回落产品默认 true。",
547
+ "x-backend": "DashChart.beingShowTitle(chart/view 组件)"
548
+ }
549
+ },
550
+ "anyOf": [
551
+ {
552
+ "required": [
553
+ "chart_ref"
554
+ ]
555
+ },
556
+ {
557
+ "required": [
558
+ "chart"
559
+ ]
560
+ }
561
+ ]
562
+ }
563
+ },
564
+ "$ref": "#/$defs/Section",
565
+ "x-qingflow-detail-query": {
566
+ "currentKind": "chart",
567
+ "tool": "portal_schema",
568
+ "cli": "qingflow builder portal schema --schema-kind chart",
569
+ "argument": "schema_kind",
570
+ "detailQueryDescription": "本文件是 报表(QingBI 图表)组件的自包含专项 Schema(内联全部引用定义,可独立交给 JSON Schema 校验器)。chart/view/grid/filter/text/link/carousel/task/favourite 各组件专项 Schema分别经 qingflow builder portal schema --schema-kind <类型> 获取。整门户声明用 qingflow builder portal schema --schema-kind summary|complete 获取;回读既有门户用 qingflow builder portal get --dash-key K --schema-kind complete。",
571
+ "readSources": {
572
+ "chartIds": "已有图表 id 用 chart 面读取;内联创建直接在 chart 键声明。",
573
+ "viewKeys": "视图唯一键用 qingflow builder views get --app-key APP 回读。"
574
+ }
575
+ },
576
+ "examples": [
577
+ {
578
+ "title": "设备总数",
579
+ "source_type": "chart",
580
+ "role": "metric",
581
+ "position": {
582
+ "pc": {
583
+ "x": 0,
584
+ "y": 4,
585
+ "cols": 6,
586
+ "rows": 5
587
+ }
588
+ },
589
+ "chart": {
590
+ "app_key": "APP_KEY_DEVICE",
591
+ "name": "设备总数",
592
+ "chart_type": "target",
593
+ "metric": "count(*)"
594
+ }
595
+ },
596
+ {
597
+ "title": "故障类型分布",
598
+ "source_type": "chart",
599
+ "position": {
600
+ "pc": {
601
+ "x": 0,
602
+ "y": 9,
603
+ "cols": 12,
604
+ "rows": 7
605
+ }
606
+ },
607
+ "chart": {
608
+ "app_key": "APP_KEY_REPAIR",
609
+ "name": "故障类型分布",
610
+ "chart_type": "columnar",
611
+ "metric": "count(*)",
612
+ "group_by": [
613
+ "故障类型"
614
+ ],
615
+ "filters": [
616
+ {
617
+ "field_name": "处理状态",
618
+ "operator": "neq",
619
+ "values": [
620
+ "已作废"
621
+ ]
622
+ }
623
+ ]
624
+ }
625
+ },
626
+ {
627
+ "title": "既有报表",
628
+ "source_type": "chart",
629
+ "position": {
630
+ "pc": {
631
+ "x": 12,
632
+ "y": 9,
633
+ "cols": 12,
634
+ "rows": 7
635
+ }
636
+ },
637
+ "chart_ref": {
638
+ "app_key": "APP_KEY_REPAIR",
639
+ "chart_id": "CHART_ID_1001"
640
+ }
641
+ }
642
+ ]
643
+ }