@qingflow-tech/qingflow-cli 1.1.42 → 1.1.43-beta.1

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 (42) hide show
  1. package/README.md +4 -4
  2. package/package.json +2 -1
  3. package/pyproject.toml +3 -2
  4. package/src/qingflow_mcp/app_form_compat.py +115 -0
  5. package/src/qingflow_mcp/app_form_validator.py +199 -0
  6. package/src/qingflow_mcp/builder_facade/app_form.py +2836 -0
  7. package/src/qingflow_mcp/builder_facade/app_form_schema.py +269 -0
  8. package/src/qingflow_mcp/builder_facade/schemas/app_form/manifest.json +37 -0
  9. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/complete.json +1766 -0
  10. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/address.json +76 -0
  11. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/amount.json +76 -0
  12. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/attachment.json +76 -0
  13. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/code_block.json +223 -0
  14. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/data_relation.json +538 -0
  15. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/date.json +76 -0
  16. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/datetime.json +76 -0
  17. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/department.json +149 -0
  18. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/email.json +76 -0
  19. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/link.json +76 -0
  20. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/long_text.json +76 -0
  21. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/member.json +76 -0
  22. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/multi_select.json +92 -0
  23. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/number.json +76 -0
  24. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/phone.json +76 -0
  25. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/q_linker.json +338 -0
  26. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/relation.json +137 -0
  27. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/single_choice.json +92 -0
  28. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/single_select.json +92 -0
  29. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/subtable.json +810 -0
  30. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/text.json +76 -0
  31. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/summary.json +713 -0
  32. package/src/qingflow_mcp/builder_facade/service.py +5 -2
  33. package/src/qingflow_mcp/cli/commands/builder.py +91 -28
  34. package/src/qingflow_mcp/cli/json_io.py +21 -2
  35. package/src/qingflow_mcp/cli/main.py +3 -39
  36. package/src/qingflow_mcp/cloud_oauth_proxy.py +96 -3
  37. package/src/qingflow_mcp/public_surface.py +5 -2
  38. package/src/qingflow_mcp/response_trim.py +8 -0
  39. package/src/qingflow_mcp/server_app_builder.py +38 -86
  40. package/src/qingflow_mcp/server_cloud.py +66 -1
  41. package/src/qingflow_mcp/tools/ai_builder_tools.py +93 -100
  42. package/src/qingflow_mcp/tools/app_tools.py +46 -65
@@ -0,0 +1,810 @@
1
+ {
2
+ "$defs": {
3
+ "AliasSelector": {
4
+ "additionalProperties": false,
5
+ "description": "Q-Linker 或代码块输出别名;已有输出优先携带 aliasId。",
6
+ "properties": {
7
+ "aliasId": {
8
+ "description": "后端生成的别名 ID;新增输出时可省略。",
9
+ "minimum": 1,
10
+ "type": "integer"
11
+ },
12
+ "name": {
13
+ "description": "输出别名名称。",
14
+ "minLength": 1,
15
+ "type": "string"
16
+ }
17
+ },
18
+ "required": [
19
+ "name"
20
+ ],
21
+ "type": "object"
22
+ },
23
+ "ChoiceConfig": {
24
+ "additionalProperties": false,
25
+ "description": "选择类字段配置。",
26
+ "properties": {
27
+ "options": {
28
+ "description": "非空有序选项文案;缺失选项表示从该字段配置中删除。",
29
+ "items": {
30
+ "minLength": 1,
31
+ "type": "string"
32
+ },
33
+ "minItems": 1,
34
+ "type": "array",
35
+ "uniqueItems": true
36
+ }
37
+ },
38
+ "required": [
39
+ "options"
40
+ ],
41
+ "type": "object"
42
+ },
43
+ "DataRelationCondition": {
44
+ "additionalProperties": false,
45
+ "description": "一条数据关联过滤条件。",
46
+ "properties": {
47
+ "operand": {
48
+ "$ref": "#/$defs/DataRelationOperand",
49
+ "description": "比较值来源;可为字面量、当前表单字段或输出别名。"
50
+ },
51
+ "operator": {
52
+ "description": "比较运算符;Reconciler 会结合字段类型校验可用性。",
53
+ "enum": [
54
+ "equal",
55
+ "not_equal",
56
+ "contains",
57
+ "not_contains",
58
+ "greater_than",
59
+ "greater_or_equal",
60
+ "less_than",
61
+ "less_or_equal",
62
+ "dynamic_range",
63
+ "equal_any",
64
+ "not_equal_any",
65
+ "is_empty",
66
+ "is_not_empty",
67
+ "belongs_to",
68
+ "not_belongs_to",
69
+ "subordinate_to",
70
+ "not_subordinate_to",
71
+ "subordinate_included",
72
+ "subordinate_not_included",
73
+ "fuzzy_match",
74
+ "contains_any",
75
+ "contains_all",
76
+ "decimal_range"
77
+ ]
78
+ },
79
+ "sourceField": {
80
+ "$ref": "#/$defs/FieldSelector",
81
+ "description": "被过滤的数据源字段。"
82
+ }
83
+ },
84
+ "required": [
85
+ "sourceField",
86
+ "operator",
87
+ "operand"
88
+ ],
89
+ "type": "object"
90
+ },
91
+ "DataRelationConfig": {
92
+ "additionalProperties": false,
93
+ "description": "数据关联字段配置;从应用、Q-Linker 或代码块输出中读取数据。",
94
+ "properties": {
95
+ "aggregation": {
96
+ "description": "可选聚合方式;null 表示不聚合。",
97
+ "enum": [
98
+ "sum",
99
+ "average",
100
+ "max",
101
+ "min",
102
+ "first",
103
+ "last",
104
+ "filled_count",
105
+ "empty_count",
106
+ "count",
107
+ null
108
+ ],
109
+ "type": [
110
+ "string",
111
+ "null"
112
+ ]
113
+ },
114
+ "customButton": {
115
+ "$ref": "#/$defs/DataRelationCustomButton",
116
+ "description": "可选自定义按钮配置。"
117
+ },
118
+ "filters": {
119
+ "$ref": "#/$defs/DataRelationFilters",
120
+ "description": "可选过滤条件;支持简单条件组或高级公式。"
121
+ },
122
+ "sort": {
123
+ "$ref": "#/$defs/DataRelationSort",
124
+ "description": "可选排序配置。"
125
+ },
126
+ "source": {
127
+ "$ref": "#/$defs/DataRelationSource",
128
+ "description": "数据来源;按 kind 选择一种来源结构。"
129
+ }
130
+ },
131
+ "required": [
132
+ "source"
133
+ ],
134
+ "type": "object"
135
+ },
136
+ "DataRelationCustomButton": {
137
+ "description": "数据关联自定义按钮;启用时必须引用已有 buttonId。",
138
+ "oneOf": [
139
+ {
140
+ "additionalProperties": false,
141
+ "properties": {
142
+ "enabled": {
143
+ "const": false
144
+ }
145
+ },
146
+ "required": [
147
+ "enabled"
148
+ ],
149
+ "type": "object"
150
+ },
151
+ {
152
+ "additionalProperties": false,
153
+ "properties": {
154
+ "buttonId": {
155
+ "minimum": 1,
156
+ "type": "integer"
157
+ },
158
+ "enabled": {
159
+ "const": true
160
+ }
161
+ },
162
+ "required": [
163
+ "enabled",
164
+ "buttonId"
165
+ ],
166
+ "type": "object"
167
+ }
168
+ ]
169
+ },
170
+ "DataRelationFilters": {
171
+ "description": "simple 模式的外层组为 OR、组内条件为 AND;advanced 模式使用完整公式。",
172
+ "oneOf": [
173
+ {
174
+ "additionalProperties": false,
175
+ "properties": {
176
+ "groups": {
177
+ "description": "OR 条件组数组;每个内层数组是一组 AND 条件。",
178
+ "items": {
179
+ "items": {
180
+ "$ref": "#/$defs/DataRelationCondition"
181
+ },
182
+ "minItems": 1,
183
+ "type": "array"
184
+ },
185
+ "type": "array"
186
+ },
187
+ "mode": {
188
+ "const": "simple"
189
+ }
190
+ },
191
+ "required": [
192
+ "mode",
193
+ "groups"
194
+ ],
195
+ "type": "object"
196
+ },
197
+ {
198
+ "additionalProperties": false,
199
+ "properties": {
200
+ "formula": {
201
+ "description": "解码后的高级筛选公式。",
202
+ "minLength": 1,
203
+ "type": "string"
204
+ },
205
+ "mode": {
206
+ "const": "advanced"
207
+ }
208
+ },
209
+ "required": [
210
+ "mode",
211
+ "formula"
212
+ ],
213
+ "type": "object"
214
+ }
215
+ ]
216
+ },
217
+ "DataRelationOperand": {
218
+ "description": "数据关联条件右值的判别联合。",
219
+ "oneOf": [
220
+ {
221
+ "additionalProperties": false,
222
+ "properties": {
223
+ "kind": {
224
+ "const": "literal"
225
+ },
226
+ "values": {
227
+ "description": "字面量值列表。",
228
+ "items": {
229
+ "$ref": "#/$defs/JsonValue"
230
+ },
231
+ "type": "array"
232
+ }
233
+ },
234
+ "required": [
235
+ "kind",
236
+ "values"
237
+ ],
238
+ "type": "object"
239
+ },
240
+ {
241
+ "additionalProperties": false,
242
+ "properties": {
243
+ "field": {
244
+ "$ref": "#/$defs/FieldSelector"
245
+ },
246
+ "kind": {
247
+ "const": "current_field"
248
+ }
249
+ },
250
+ "required": [
251
+ "kind",
252
+ "field"
253
+ ],
254
+ "type": "object"
255
+ },
256
+ {
257
+ "additionalProperties": false,
258
+ "properties": {
259
+ "alias": {
260
+ "$ref": "#/$defs/AliasSelector"
261
+ },
262
+ "kind": {
263
+ "const": "alias"
264
+ },
265
+ "producer": {
266
+ "$ref": "#/$defs/FieldSelector"
267
+ }
268
+ },
269
+ "required": [
270
+ "kind",
271
+ "producer",
272
+ "alias"
273
+ ],
274
+ "type": "object"
275
+ }
276
+ ]
277
+ },
278
+ "DataRelationSort": {
279
+ "description": "数据关联排序开关;启用时必须指定排序来源和方向。",
280
+ "oneOf": [
281
+ {
282
+ "additionalProperties": false,
283
+ "properties": {
284
+ "enabled": {
285
+ "const": false
286
+ }
287
+ },
288
+ "required": [
289
+ "enabled"
290
+ ],
291
+ "type": "object"
292
+ },
293
+ {
294
+ "additionalProperties": false,
295
+ "properties": {
296
+ "by": {
297
+ "$ref": "#/$defs/DataRelationSortBy"
298
+ },
299
+ "direction": {
300
+ "enum": [
301
+ "asc",
302
+ "desc"
303
+ ]
304
+ },
305
+ "enabled": {
306
+ "const": true
307
+ }
308
+ },
309
+ "required": [
310
+ "enabled",
311
+ "by",
312
+ "direction"
313
+ ],
314
+ "type": "object"
315
+ }
316
+ ]
317
+ },
318
+ "DataRelationSortBy": {
319
+ "description": "排序值来源;可为来源字段或输出别名。",
320
+ "oneOf": [
321
+ {
322
+ "additionalProperties": false,
323
+ "properties": {
324
+ "field": {
325
+ "$ref": "#/$defs/FieldSelector"
326
+ },
327
+ "kind": {
328
+ "const": "field"
329
+ }
330
+ },
331
+ "required": [
332
+ "kind",
333
+ "field"
334
+ ],
335
+ "type": "object"
336
+ },
337
+ {
338
+ "additionalProperties": false,
339
+ "properties": {
340
+ "alias": {
341
+ "$ref": "#/$defs/AliasSelector"
342
+ },
343
+ "kind": {
344
+ "const": "alias"
345
+ },
346
+ "producer": {
347
+ "$ref": "#/$defs/FieldSelector"
348
+ }
349
+ },
350
+ "required": [
351
+ "kind",
352
+ "producer",
353
+ "alias"
354
+ ],
355
+ "type": "object"
356
+ }
357
+ ]
358
+ },
359
+ "DataRelationSource": {
360
+ "description": "数据关联来源判别联合;kind 决定其余必填字段。",
361
+ "oneOf": [
362
+ {
363
+ "additionalProperties": false,
364
+ "properties": {
365
+ "appKey": {
366
+ "description": "来源应用的 appKey。",
367
+ "minLength": 1,
368
+ "type": "string"
369
+ },
370
+ "field": {
371
+ "$ref": "#/$defs/FieldSelector",
372
+ "description": "来源应用中的结果字段。"
373
+ },
374
+ "kind": {
375
+ "const": "app"
376
+ }
377
+ },
378
+ "required": [
379
+ "kind",
380
+ "appKey",
381
+ "field"
382
+ ],
383
+ "type": "object"
384
+ },
385
+ {
386
+ "additionalProperties": false,
387
+ "properties": {
388
+ "alias": {
389
+ "$ref": "#/$defs/AliasSelector",
390
+ "description": "Q-Linker 输出别名。"
391
+ },
392
+ "kind": {
393
+ "const": "q_linker"
394
+ },
395
+ "producer": {
396
+ "$ref": "#/$defs/FieldSelector",
397
+ "description": "当前应用中的 Q-Linker 字段。"
398
+ }
399
+ },
400
+ "required": [
401
+ "kind",
402
+ "producer",
403
+ "alias"
404
+ ],
405
+ "type": "object"
406
+ },
407
+ {
408
+ "additionalProperties": false,
409
+ "properties": {
410
+ "alias": {
411
+ "$ref": "#/$defs/AliasSelector",
412
+ "description": "代码块输出别名。"
413
+ },
414
+ "kind": {
415
+ "const": "code_block"
416
+ },
417
+ "producer": {
418
+ "$ref": "#/$defs/FieldSelector",
419
+ "description": "当前应用中的代码块字段。"
420
+ }
421
+ },
422
+ "required": [
423
+ "kind",
424
+ "producer",
425
+ "alias"
426
+ ],
427
+ "type": "object"
428
+ }
429
+ ]
430
+ },
431
+ "DepartmentConfig": {
432
+ "additionalProperties": false,
433
+ "description": "部门字段的可选范围配置。",
434
+ "properties": {
435
+ "departmentScope": {
436
+ "$ref": "#/$defs/DepartmentScope"
437
+ }
438
+ },
439
+ "required": [
440
+ "departmentScope"
441
+ ],
442
+ "type": "object"
443
+ },
444
+ "DepartmentScope": {
445
+ "description": "all 表示全部部门;custom 表示仅允许指定部门。",
446
+ "oneOf": [
447
+ {
448
+ "additionalProperties": false,
449
+ "properties": {
450
+ "includeSubDeparts": {
451
+ "description": "是否包含所选部门的下级部门。",
452
+ "type": "boolean"
453
+ },
454
+ "mode": {
455
+ "const": "all"
456
+ }
457
+ },
458
+ "required": [
459
+ "mode"
460
+ ],
461
+ "type": "object"
462
+ },
463
+ {
464
+ "additionalProperties": false,
465
+ "properties": {
466
+ "departments": {
467
+ "description": "custom 模式允许选择的部门列表。",
468
+ "items": {
469
+ "$ref": "#/$defs/DepartmentSelector"
470
+ },
471
+ "minItems": 1,
472
+ "type": "array"
473
+ },
474
+ "includeSubDeparts": {
475
+ "description": "是否包含指定部门的下级部门。",
476
+ "type": "boolean"
477
+ },
478
+ "mode": {
479
+ "const": "custom"
480
+ }
481
+ },
482
+ "required": [
483
+ "mode",
484
+ "departments"
485
+ ],
486
+ "type": "object"
487
+ }
488
+ ]
489
+ },
490
+ "DepartmentSelector": {
491
+ "additionalProperties": false,
492
+ "description": "部门身份;deptId 必填,deptName 仅用于展示。",
493
+ "properties": {
494
+ "deptId": {
495
+ "minimum": 1,
496
+ "type": "integer"
497
+ },
498
+ "deptName": {
499
+ "minLength": 1,
500
+ "type": "string"
501
+ }
502
+ },
503
+ "required": [
504
+ "deptId"
505
+ ],
506
+ "type": "object"
507
+ },
508
+ "EmptyConfig": {
509
+ "additionalProperties": false,
510
+ "description": "该字段类型没有特殊配置。",
511
+ "type": "object"
512
+ },
513
+ "FieldCommon": {
514
+ "description": "顶层业务字段的公共属性;字段类型由 TopField 的判别分支定义。",
515
+ "properties": {
516
+ "dataCover": {
517
+ "description": "是否作为数据封面;仅顶层附件字段可设为 true。",
518
+ "type": "boolean"
519
+ },
520
+ "dataTitle": {
521
+ "description": "是否作为数据标题;整个 body 最多且必须按规则存在一个。",
522
+ "type": "boolean"
523
+ },
524
+ "description": {
525
+ "description": "字段说明;null 或空字符串表示清空。",
526
+ "type": [
527
+ "string",
528
+ "null"
529
+ ]
530
+ },
531
+ "name": {
532
+ "description": "字段展示名称;同一父级内唯一,不单独作为字段身份。",
533
+ "minLength": 1,
534
+ "type": "string"
535
+ },
536
+ "queId": {
537
+ "description": "已有字段的后端 ID;get 返回,新增字段省略。",
538
+ "minimum": 1,
539
+ "type": "integer"
540
+ },
541
+ "required": {
542
+ "description": "是否必填;缺失时保留已有字段当前值。",
543
+ "type": "boolean"
544
+ },
545
+ "width": {
546
+ "description": "字段在所在行的宽度百分比;同一行要么全部提供且合计 100,要么全部省略。",
547
+ "maximum": 100,
548
+ "minimum": 1,
549
+ "type": "integer"
550
+ }
551
+ },
552
+ "required": [
553
+ "name"
554
+ ],
555
+ "type": "object"
556
+ },
557
+ "FieldSelector": {
558
+ "additionalProperties": false,
559
+ "anyOf": [
560
+ {
561
+ "required": [
562
+ "queId"
563
+ ]
564
+ },
565
+ {
566
+ "required": [
567
+ "name"
568
+ ]
569
+ }
570
+ ],
571
+ "description": "跨字段引用选择器;至少提供 queId 或 name,两者同时提供时必须指向同一字段。",
572
+ "properties": {
573
+ "name": {
574
+ "description": "字段名称;仅在当前作用域内唯一时可用于解析。",
575
+ "minLength": 1,
576
+ "type": "string"
577
+ },
578
+ "queId": {
579
+ "description": "已有字段的后端 ID;优先用于精确解析。",
580
+ "minimum": 1,
581
+ "type": "integer"
582
+ }
583
+ },
584
+ "type": "object"
585
+ },
586
+ "JsonValue": {
587
+ "description": "数据关联字面量支持的任意 JSON 值。",
588
+ "oneOf": [
589
+ {
590
+ "type": "null"
591
+ },
592
+ {
593
+ "type": "boolean"
594
+ },
595
+ {
596
+ "type": "number"
597
+ },
598
+ {
599
+ "type": "string"
600
+ },
601
+ {
602
+ "items": {
603
+ "$ref": "#/$defs/JsonValue"
604
+ },
605
+ "type": "array"
606
+ },
607
+ {
608
+ "additionalProperties": {
609
+ "$ref": "#/$defs/JsonValue"
610
+ },
611
+ "type": "object"
612
+ }
613
+ ]
614
+ },
615
+ "RelationConfig": {
616
+ "additionalProperties": false,
617
+ "description": "引用字段配置;引用其他应用中的数据。",
618
+ "properties": {
619
+ "displayField": {
620
+ "$ref": "#/$defs/FieldSelector",
621
+ "description": "引用值的主展示字段。"
622
+ },
623
+ "relationMode": {
624
+ "default": "single",
625
+ "description": "单条引用或多条引用;缺失时按 single 处理。",
626
+ "enum": [
627
+ "single",
628
+ "multiple"
629
+ ]
630
+ },
631
+ "targetAppKey": {
632
+ "description": "被引用应用的 appKey。",
633
+ "minLength": 1,
634
+ "type": "string"
635
+ },
636
+ "visibleFields": {
637
+ "description": "引用选择界面额外展示的字段。",
638
+ "items": {
639
+ "$ref": "#/$defs/FieldSelector"
640
+ },
641
+ "type": "array",
642
+ "uniqueItems": true
643
+ }
644
+ },
645
+ "required": [
646
+ "targetAppKey",
647
+ "displayField"
648
+ ],
649
+ "type": "object"
650
+ },
651
+ "SubField": {
652
+ "allOf": [
653
+ {
654
+ "$ref": "#/$defs/SubFieldCommon"
655
+ },
656
+ {
657
+ "oneOf": [
658
+ {
659
+ "properties": {
660
+ "config": {
661
+ "$ref": "#/$defs/EmptyConfig"
662
+ },
663
+ "type": {
664
+ "enum": [
665
+ "text",
666
+ "long_text",
667
+ "number",
668
+ "link",
669
+ "date",
670
+ "phone",
671
+ "email",
672
+ "attachment",
673
+ "member"
674
+ ]
675
+ }
676
+ },
677
+ "required": [
678
+ "type"
679
+ ]
680
+ },
681
+ {
682
+ "properties": {
683
+ "config": {
684
+ "$ref": "#/$defs/ChoiceConfig"
685
+ },
686
+ "type": {
687
+ "enum": [
688
+ "single_choice",
689
+ "single_select",
690
+ "multi_select"
691
+ ]
692
+ }
693
+ },
694
+ "required": [
695
+ "type",
696
+ "config"
697
+ ]
698
+ },
699
+ {
700
+ "properties": {
701
+ "config": {
702
+ "$ref": "#/$defs/DepartmentConfig"
703
+ },
704
+ "type": {
705
+ "const": "department"
706
+ }
707
+ },
708
+ "required": [
709
+ "type",
710
+ "config"
711
+ ]
712
+ },
713
+ {
714
+ "properties": {
715
+ "config": {
716
+ "$ref": "#/$defs/RelationConfig"
717
+ },
718
+ "type": {
719
+ "const": "relation"
720
+ }
721
+ },
722
+ "required": [
723
+ "type",
724
+ "config"
725
+ ]
726
+ },
727
+ {
728
+ "properties": {
729
+ "config": {
730
+ "$ref": "#/$defs/DataRelationConfig"
731
+ },
732
+ "type": {
733
+ "const": "data_relation"
734
+ }
735
+ },
736
+ "required": [
737
+ "type",
738
+ "config"
739
+ ]
740
+ }
741
+ ]
742
+ }
743
+ ],
744
+ "description": "表格子字段;仅允许一期白名单类型,不包含布局宽度。",
745
+ "type": "object",
746
+ "unevaluatedProperties": false
747
+ },
748
+ "SubFieldCommon": {
749
+ "description": "表格子字段的公共属性;不允许 dataTitle、dataCover 或 width。",
750
+ "properties": {
751
+ "description": {
752
+ "description": "子字段说明;null 或空字符串表示清空。",
753
+ "type": [
754
+ "string",
755
+ "null"
756
+ ]
757
+ },
758
+ "name": {
759
+ "description": "子字段展示名称;在所属表格内唯一。",
760
+ "minLength": 1,
761
+ "type": "string"
762
+ },
763
+ "queId": {
764
+ "description": "已有子字段的后端 ID;新增时省略。",
765
+ "minimum": 1,
766
+ "type": "integer"
767
+ },
768
+ "required": {
769
+ "description": "是否必填;缺失时保留当前值。",
770
+ "type": "boolean"
771
+ }
772
+ },
773
+ "required": [
774
+ "name"
775
+ ],
776
+ "type": "object"
777
+ }
778
+ },
779
+ "$id": "https://builder.qingflow.com/schemas/app-form-apply/v1alpha1/fields/subtable.json",
780
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
781
+ "allOf": [
782
+ {
783
+ "$ref": "#/$defs/FieldCommon"
784
+ },
785
+ {
786
+ "properties": {
787
+ "config": {
788
+ "$ref": "#/$defs/EmptyConfig"
789
+ },
790
+ "subfields": {
791
+ "items": {
792
+ "$ref": "#/$defs/SubField"
793
+ },
794
+ "minItems": 1,
795
+ "type": "array"
796
+ },
797
+ "type": {
798
+ "const": "subtable"
799
+ }
800
+ },
801
+ "required": [
802
+ "type",
803
+ "subfields"
804
+ ]
805
+ }
806
+ ],
807
+ "title": "Qingflow AppForm v1alpha1 subtable field",
808
+ "type": "object",
809
+ "unevaluatedProperties": false
810
+ }