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

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 (85) hide show
  1. package/README.md +3 -3
  2. package/package.json +1 -1
  3. package/pyproject.toml +1 -2
  4. package/skills/qingflow-cli/SKILL.md +2 -104
  5. package/skills/qingflow-cli/reference/builder/20-build-complete-system.md +2 -2
  6. package/skills/qingflow-cli/reference/builder/30-schema-fields.md +5 -22
  7. package/skills/qingflow-cli/reference/builder/70-portal.md +16 -37
  8. package/skills/qingflow-cli/reference/builder/reference/app-delivery-sop.md +3 -3
  9. package/skills/qingflow-cli/reference/examples/portal/portal_sections_all_types.example.json +7 -6
  10. package/src/qingflow_mcp/app_form_compat.py +0 -3
  11. package/src/qingflow_mcp/app_form_validator.py +20 -89
  12. package/src/qingflow_mcp/builder_facade/app_form.py +112 -629
  13. package/src/qingflow_mcp/builder_facade/models.py +13 -164
  14. package/src/qingflow_mcp/builder_facade/schemas/app_form/manifest.json +1 -15
  15. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/complete.json +38 -112
  16. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/address.json +8 -31
  17. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/amount.json +10 -6
  18. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/attachment.json +10 -33
  19. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/code_block.json +10 -6
  20. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/data_relation.json +18 -11
  21. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/date.json +8 -4
  22. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/datetime.json +8 -4
  23. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/department.json +10 -6
  24. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/email.json +8 -4
  25. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/link.json +8 -4
  26. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/long_text.json +8 -4
  27. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/member.json +10 -6
  28. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/multi_select.json +8 -4
  29. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/number.json +10 -6
  30. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/phone.json +8 -4
  31. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/q_linker.json +12 -8
  32. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/relation.json +15 -73
  33. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/single_choice.json +8 -4
  34. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/single_select.json +8 -4
  35. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/subtable.json +29 -90
  36. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/text.json +8 -4
  37. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/formula.json +0 -43
  38. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/summary.json +19 -27
  39. package/src/qingflow_mcp/builder_facade/service.py +72 -1143
  40. package/src/qingflow_mcp/cli/commands/builder.py +5 -114
  41. package/src/qingflow_mcp/cli/main.py +1 -34
  42. package/src/qingflow_mcp/cloud_context.py +1 -16
  43. package/src/qingflow_mcp/public_surface.py +8 -69
  44. package/src/qingflow_mcp/response_trim.py +1 -2
  45. package/src/qingflow_mcp/server.py +6 -12
  46. package/src/qingflow_mcp/server_app_builder.py +6 -41
  47. package/src/qingflow_mcp/server_app_user.py +5 -9
  48. package/src/qingflow_mcp/server_cloud.py +7 -43
  49. package/src/qingflow_mcp/solution/compiler/icon_utils.py +0 -73
  50. package/src/qingflow_mcp/solution/executor.py +2 -5
  51. package/src/qingflow_mcp/tools/ai_builder_tools.py +12 -110
  52. package/src/qingflow_mcp/tools/portal_tools.py +54 -4
  53. package/src/qingflow_mcp/tools/solution_tools.py +0 -2
  54. package/skills/qingflow-cli/reference/examples/portal/portal_apply_v1alpha1.example.json +0 -100
  55. package/src/qingflow_mcp/builder_facade/portals_schema.py +0 -397
  56. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/ai_content_classification.json +0 -146
  57. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/ai_content_extraction.json +0 -146
  58. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/ai_content_generation.json +0 -146
  59. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/ai_document_parsing.json +0 -146
  60. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/ai_image_generation.json +0 -146
  61. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/ai_image_recognition.json +0 -146
  62. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/ai_machine_translation.json +0 -146
  63. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/ai_text_summary.json +0 -146
  64. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/date_duration.json +0 -146
  65. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/embed_field.json +0 -146
  66. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/image_select.json +0 -146
  67. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/location.json +0 -146
  68. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/ocr.json +0 -146
  69. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/rich_text.json +0 -146
  70. package/src/qingflow_mcp/builder_facade/schemas/portals/manifest.json +0 -59
  71. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/complete.json +0 -1397
  72. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/components/carousel.json +0 -193
  73. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/components/chart.json +0 -643
  74. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/components/favourite.json +0 -203
  75. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/components/filter.json +0 -268
  76. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/components/grid.json +0 -265
  77. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/components/link.json +0 -131
  78. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/components/task.json +0 -199
  79. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/components/text.json +0 -123
  80. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/components/view.json +0 -196
  81. package/src/qingflow_mcp/builder_facade/schemas/portals/v1alpha1/summary.json +0 -800
  82. package/src/qingflow_mcp/tool_catalog.py +0 -387
  83. package/src/qingflow_mcp/tool_catalog_i18n.py +0 -185
  84. package/src/qingflow_mcp/tool_policy.py +0 -197
  85. package/src/qingflow_mcp/tools/portal_writer.py +0 -59
@@ -78,7 +78,7 @@
78
78
  "description": "普通字段的默认值;后端 queDefaultValue 为字符串,因此数字等字面量也必须以字符串传入。defaultType 为 1 时表示静态文本,为 3 时表示公式文本,为 2 时不携带字面量默认值。表格、地址、附件、引用等结构化默认值必须放在具体字段 config.defaultValues。显式 null 表示清除默认值。"
79
79
  },
80
80
  "name": {
81
- "description": "字段展示名称;新增字段必填,已有字段可在携带 queId 时省略;同父级允许同名(后端以 queId 为字段身份),配置引用建议携带 queId。",
81
+ "description": "字段展示名称;新增字段必填,已有字段可在携带 queId 时省略;同一父级内唯一。",
82
82
  "minLength": 1,
83
83
  "type": "string"
84
84
  },
@@ -99,9 +99,13 @@
99
99
  "type": "string"
100
100
  },
101
101
  "width": {
102
- "description": "字段在所在行的宽度百分比(1-100 整数);后端不校验总和与取值,存量数据存在 33/34 等三等分布值。",
103
- "maximum": 100,
104
- "minimum": 1,
102
+ "description": "字段在所在行的宽度百分比;只能选择 25、50、75 或 100。",
103
+ "enum": [
104
+ 25,
105
+ 50,
106
+ 75,
107
+ 100
108
+ ],
105
109
  "type": "integer"
106
110
  }
107
111
  },
@@ -121,10 +125,10 @@
121
125
  ]
122
126
  }
123
127
  ],
124
- "description": "字段选择器;用于定位应用的数据标题、数据封面、自定义编号取值来源或其他配置引用的字段。至少提供 queId 或 name,两者同时提供时必须指向同一字段。后端允许同父级同名字段,queId 是稳定身份;name 仅在唯一时可解析,命中多个同名时报 AMBIGUOUS_FIELD_SELECTOR,此时必须改用 queId。",
128
+ "description": "字段选择器;用于定位应用的数据标题、数据封面、自定义编号取值来源或其他配置引用的字段。至少提供 queId 或 name,两者同时提供时必须指向同一字段。",
125
129
  "properties": {
126
130
  "name": {
127
- "description": "字段名称;仅在当前作用域内唯一时可用于解析,同名命中多个字段时报 AMBIGUOUS_FIELD_SELECTOR,应改用 queId。",
131
+ "description": "字段名称;仅在当前作用域内唯一时可用于解析。",
128
132
  "minLength": 1,
129
133
  "type": "string"
130
134
  },
@@ -349,8 +353,8 @@
349
353
  ]
350
354
  },
351
355
  "url": {
352
- "description": "请求 URL;动态嵌入字段值时使用 {{key}},并在 inputs 中提供同名 source=json_path 映射。自定义模式(configMode=1)后端要求非空;插件模板/连接中心/轻翼智能体模式的 URL 由模板侧提供,存量声明可为空字符串(写回按读面形态透传)。",
353
- "minLength": 0,
356
+ "description": "请求 URL;动态嵌入字段值时使用 {{key}},并在 inputs 中提供同名 source=json_path 映射。",
357
+ "minLength": 1,
354
358
  "type": "string"
355
359
  },
356
360
  "urlEncodedValue": {
@@ -75,12 +75,6 @@
75
75
  "null"
76
76
  ]
77
77
  },
78
- "auditValueDescription": {
79
- "type": [
80
- "string",
81
- "null"
82
- ]
83
- },
84
78
  "beingCanDecrypted": {
85
79
  "type": [
86
80
  "boolean",
@@ -111,12 +105,6 @@
111
105
  "null"
112
106
  ]
113
107
  },
114
- "dataId": {
115
- "type": [
116
- "integer",
117
- "null"
118
- ]
119
- },
120
108
  "dateType": {
121
109
  "type": [
122
110
  "integer",
@@ -135,15 +123,6 @@
135
123
  "null"
136
124
  ]
137
125
  },
138
- "previousTableRowOrdinalList": {
139
- "items": {
140
- "type": "integer"
141
- },
142
- "type": [
143
- "array",
144
- "null"
145
- ]
146
- },
147
126
  "queId": {
148
127
  "type": [
149
128
  "integer",
@@ -162,12 +141,6 @@
162
141
  "null"
163
142
  ]
164
143
  },
165
- "questionOrdinal": {
166
- "type": [
167
- "integer",
168
- "null"
169
- ]
170
- },
171
144
  "referValues": {
172
145
  "items": {
173
146
  "$ref": "#/$defs/ReferenceDefaultValue"
@@ -285,7 +258,7 @@
285
258
  "description": "普通字段的默认值;后端 queDefaultValue 为字符串,因此数字等字面量也必须以字符串传入。defaultType 为 1 时表示静态文本,为 3 时表示公式文本,为 2 时不携带字面量默认值。表格、地址、附件、引用等结构化默认值必须放在具体字段 config.defaultValues。显式 null 表示清除默认值。"
286
259
  },
287
260
  "name": {
288
- "description": "字段展示名称;新增字段必填,已有字段可在携带 queId 时省略;同父级允许同名(后端以 queId 为字段身份),配置引用建议携带 queId。",
261
+ "description": "字段展示名称;新增字段必填,已有字段可在携带 queId 时省略;同一父级内唯一。",
289
262
  "minLength": 1,
290
263
  "type": "string"
291
264
  },
@@ -306,9 +279,13 @@
306
279
  "type": "string"
307
280
  },
308
281
  "width": {
309
- "description": "字段在所在行的宽度百分比(1-100 整数);后端不校验总和与取值,存量数据存在 33/34 等三等分布值。",
310
- "maximum": 100,
311
- "minimum": 1,
282
+ "description": "字段在所在行的宽度百分比;只能选择 25、50、75 或 100。",
283
+ "enum": [
284
+ 25,
285
+ 50,
286
+ 75,
287
+ 100
288
+ ],
312
289
  "type": "integer"
313
290
  }
314
291
  },
@@ -328,10 +305,10 @@
328
305
  ]
329
306
  }
330
307
  ],
331
- "description": "字段选择器;用于定位应用的数据标题、数据封面、自定义编号取值来源或其他配置引用的字段。至少提供 queId 或 name,两者同时提供时必须指向同一字段。后端允许同父级同名字段,queId 是稳定身份;name 仅在唯一时可解析,命中多个同名时报 AMBIGUOUS_FIELD_SELECTOR,此时必须改用 queId。",
308
+ "description": "字段选择器;用于定位应用的数据标题、数据封面、自定义编号取值来源或其他配置引用的字段。至少提供 queId 或 name,两者同时提供时必须指向同一字段。",
332
309
  "properties": {
333
310
  "name": {
334
- "description": "字段名称;仅在当前作用域内唯一时可用于解析,同名命中多个字段时报 AMBIGUOUS_FIELD_SELECTOR,应改用 queId。",
311
+ "description": "字段名称;仅在当前作用域内唯一时可用于解析。",
335
312
  "minLength": 1,
336
313
  "type": "string"
337
314
  },
@@ -374,7 +351,7 @@
374
351
  },
375
352
  "RelationConfig": {
376
353
  "additionalProperties": false,
377
- "description": "引用字段配置;引用其他应用中的数据。展示字段与权限以 displayFields 为准(后端 referQuestions 全量有序回写,queAuth 1=可编辑/2=隐藏/3=仅可见);displayField/visibleFields 为已废弃旧形态,apply 兼容接收一个版本窗口(displayField 同时视为双向绑定目标)。",
354
+ "description": "引用字段配置;引用其他应用中的数据。",
378
355
  "properties": {
379
356
  "beingDefaultFormulaAutoFillEnabled": {
380
357
  "description": "是否启用引用字段的默认值公式自动填充。",
@@ -412,32 +389,7 @@
412
389
  },
413
390
  "displayField": {
414
391
  "$ref": "#/$defs/FieldSelector",
415
- "description": "已废弃:主展示字段;apply 兼容翻译为 twoWayBoundField + displayFields 首项,后续版本移除。"
416
- },
417
- "displayFields": {
418
- "description": "有序展示字段全量列表(含隐藏字段),按 ordinal 保序回写为后端 referQuestions。可为空列表:空 = 双向绑定未配展示字段的合法存量形态(后端写链路对空 referQuestions 跳过插入、读面容忍空),round-trip 空↔空稳定;与已废弃 displayField/visibleFields 不可混用,条目 queId 不可重复。",
419
- "items": {
420
- "additionalProperties": false,
421
- "properties": {
422
- "auth": {
423
- "default": "visible",
424
- "description": "展示字段权限;editable=可编辑(1), hidden=隐藏(2), visible=仅可见(3);缺失按 visible。",
425
- "enum": [
426
- "editable",
427
- "hidden",
428
- "visible"
429
- ]
430
- },
431
- "field": {
432
- "$ref": "#/$defs/FieldSelector"
433
- }
434
- },
435
- "required": [
436
- "field"
437
- ],
438
- "type": "object"
439
- },
440
- "type": "array"
392
+ "description": "引用值的主展示字段。"
441
393
  },
442
394
  "relationMode": {
443
395
  "default": "single",
@@ -452,19 +404,8 @@
452
404
  "minLength": 1,
453
405
  "type": "string"
454
406
  },
455
- "twoWayBoundField": {
456
- "description": "双向引用绑定的目标字段(后端 referQueId);null/省略 = 单向引用。get 读面在 referQueId 非空时必产出。",
457
- "oneOf": [
458
- {
459
- "type": "null"
460
- },
461
- {
462
- "$ref": "#/$defs/FieldSelector"
463
- }
464
- ]
465
- },
466
407
  "visibleFields": {
467
- "description": "已废弃:额外展示字段;apply 兼容翻译为 displayFields 后续项,后续版本移除。",
408
+ "description": "引用选择界面额外展示的字段。",
468
409
  "items": {
469
410
  "$ref": "#/$defs/FieldSelector"
470
411
  },
@@ -473,7 +414,8 @@
473
414
  }
474
415
  },
475
416
  "required": [
476
- "targetAppKey"
417
+ "targetAppKey",
418
+ "displayField"
477
419
  ],
478
420
  "type": "object"
479
421
  },
@@ -146,7 +146,7 @@
146
146
  "description": "普通字段的默认值;后端 queDefaultValue 为字符串,因此数字等字面量也必须以字符串传入。defaultType 为 1 时表示静态文本,为 3 时表示公式文本,为 2 时不携带字面量默认值。表格、地址、附件、引用等结构化默认值必须放在具体字段 config.defaultValues。显式 null 表示清除默认值。"
147
147
  },
148
148
  "name": {
149
- "description": "字段展示名称;新增字段必填,已有字段可在携带 queId 时省略;同父级允许同名(后端以 queId 为字段身份),配置引用建议携带 queId。",
149
+ "description": "字段展示名称;新增字段必填,已有字段可在携带 queId 时省略;同一父级内唯一。",
150
150
  "minLength": 1,
151
151
  "type": "string"
152
152
  },
@@ -167,9 +167,13 @@
167
167
  "type": "string"
168
168
  },
169
169
  "width": {
170
- "description": "字段在所在行的宽度百分比(1-100 整数);后端不校验总和与取值,存量数据存在 33/34 等三等分布值。",
171
- "maximum": 100,
172
- "minimum": 1,
170
+ "description": "字段在所在行的宽度百分比;只能选择 25、50、75 或 100。",
171
+ "enum": [
172
+ 25,
173
+ 50,
174
+ 75,
175
+ 100
176
+ ],
173
177
  "type": "integer"
174
178
  }
175
179
  },
@@ -146,7 +146,7 @@
146
146
  "description": "普通字段的默认值;后端 queDefaultValue 为字符串,因此数字等字面量也必须以字符串传入。defaultType 为 1 时表示静态文本,为 3 时表示公式文本,为 2 时不携带字面量默认值。表格、地址、附件、引用等结构化默认值必须放在具体字段 config.defaultValues。显式 null 表示清除默认值。"
147
147
  },
148
148
  "name": {
149
- "description": "字段展示名称;新增字段必填,已有字段可在携带 queId 时省略;同父级允许同名(后端以 queId 为字段身份),配置引用建议携带 queId。",
149
+ "description": "字段展示名称;新增字段必填,已有字段可在携带 queId 时省略;同一父级内唯一。",
150
150
  "minLength": 1,
151
151
  "type": "string"
152
152
  },
@@ -167,9 +167,13 @@
167
167
  "type": "string"
168
168
  },
169
169
  "width": {
170
- "description": "字段在所在行的宽度百分比(1-100 整数);后端不校验总和与取值,存量数据存在 33/34 等三等分布值。",
171
- "maximum": 100,
172
- "minimum": 1,
170
+ "description": "字段在所在行的宽度百分比;只能选择 25、50、75 或 100。",
171
+ "enum": [
172
+ 25,
173
+ 50,
174
+ 75,
175
+ 100
176
+ ],
173
177
  "type": "integer"
174
178
  }
175
179
  },
@@ -111,7 +111,7 @@
111
111
  ]
112
112
  },
113
113
  "fileSize": {
114
- "minimum": 0,
114
+ "minimum": 1,
115
115
  "type": [
116
116
  "integer",
117
117
  "null"
@@ -131,7 +131,7 @@
131
131
  ]
132
132
  },
133
133
  "maxFileLimit": {
134
- "minimum": 0,
134
+ "minimum": 1,
135
135
  "type": [
136
136
  "integer",
137
137
  "null"
@@ -229,7 +229,7 @@
229
229
  },
230
230
  "DataRelationCondition": {
231
231
  "additionalProperties": false,
232
- "description": "一条数据关联过滤条件;sourceField 必须属于数据来源,operator 必须适用于该字段类型。固定值请使用 literal operand,不要直接声明后端 matchRules。sourceField 省略为存量读回形态(历史脏公式的源字段缺失,如 #queId_0$,写回时以 queId=0 透传),新建条件应提供 sourceField。",
232
+ "description": "一条数据关联过滤条件;sourceField 必须属于数据来源,operator 必须适用于该字段类型。固定值请使用 literal operand,不要直接声明后端 matchRules。",
233
233
  "properties": {
234
234
  "operand": {
235
235
  "$ref": "#/$defs/DataRelationOperand",
@@ -265,10 +265,11 @@
265
265
  },
266
266
  "sourceField": {
267
267
  "$ref": "#/$defs/FieldSelector",
268
- "description": "被过滤的数据源字段;存量读回形态可能缺失(后端反解析出的条件源字段 queId=0 且无名称)。"
268
+ "description": "被过滤的数据源字段。"
269
269
  }
270
270
  },
271
271
  "required": [
272
+ "sourceField",
272
273
  "operator",
273
274
  "operand"
274
275
  ],
@@ -276,7 +277,7 @@
276
277
  },
277
278
  "DataRelationConfig": {
278
279
  "additionalProperties": false,
279
- "description": "数据关联字段配置;从应用、Q-Linker 或代码块输出中读取数据。source 省略表示该字段当前无关联来源配置(存量表单读回形态:后端 GET 对 displayed 目标缺失的 relation 行不回传,FormSvcImpl#getQuestionRelationsBeans continue 分支;新建数据关联字段应提供 source)。",
280
+ "description": "数据关联字段配置;从应用、Q-Linker 或代码块输出中读取数据。",
280
281
  "properties": {
281
282
  "aggregation": {
282
283
  "description": "可选聚合方式;null 表示不聚合。",
@@ -311,10 +312,12 @@
311
312
  },
312
313
  "source": {
313
314
  "$ref": "#/$defs/DataRelationSource",
314
- "description": "数据来源;按 kind 选择一种来源结构。存量读回形态可能无 source(后端读面不回传关联配置),此时写回不重建该字段的关联。"
315
+ "description": "数据来源;按 kind 选择一种来源结构。"
315
316
  }
316
317
  },
317
- "required": [],
318
+ "required": [
319
+ "source"
320
+ ],
318
321
  "type": "object"
319
322
  },
320
323
  "DataRelationCustomButton": {
@@ -621,12 +624,6 @@
621
624
  "null"
622
625
  ]
623
626
  },
624
- "auditValueDescription": {
625
- "type": [
626
- "string",
627
- "null"
628
- ]
629
- },
630
627
  "beingCanDecrypted": {
631
628
  "type": [
632
629
  "boolean",
@@ -657,12 +654,6 @@
657
654
  "null"
658
655
  ]
659
656
  },
660
- "dataId": {
661
- "type": [
662
- "integer",
663
- "null"
664
- ]
665
- },
666
657
  "dateType": {
667
658
  "type": [
668
659
  "integer",
@@ -681,15 +672,6 @@
681
672
  "null"
682
673
  ]
683
674
  },
684
- "previousTableRowOrdinalList": {
685
- "items": {
686
- "type": "integer"
687
- },
688
- "type": [
689
- "array",
690
- "null"
691
- ]
692
- },
693
675
  "queId": {
694
676
  "type": [
695
677
  "integer",
@@ -708,12 +690,6 @@
708
690
  "null"
709
691
  ]
710
692
  },
711
- "questionOrdinal": {
712
- "type": [
713
- "integer",
714
- "null"
715
- ]
716
- },
717
693
  "referValues": {
718
694
  "items": {
719
695
  "$ref": "#/$defs/ReferenceDefaultValue"
@@ -1013,7 +989,7 @@
1013
989
  "description": "普通字段的默认值;后端 queDefaultValue 为字符串,因此数字等字面量也必须以字符串传入。defaultType 为 1 时表示静态文本,为 3 时表示公式文本,为 2 时不携带字面量默认值。表格、地址、附件、引用等结构化默认值必须放在具体字段 config.defaultValues。显式 null 表示清除默认值。"
1014
990
  },
1015
991
  "name": {
1016
- "description": "字段展示名称;新增字段必填,已有字段可在携带 queId 时省略;同父级允许同名(后端以 queId 为字段身份),配置引用建议携带 queId。",
992
+ "description": "字段展示名称;新增字段必填,已有字段可在携带 queId 时省略;同一父级内唯一。",
1017
993
  "minLength": 1,
1018
994
  "type": "string"
1019
995
  },
@@ -1034,9 +1010,13 @@
1034
1010
  "type": "string"
1035
1011
  },
1036
1012
  "width": {
1037
- "description": "字段在所在行的宽度百分比(1-100 整数);后端不校验总和与取值,存量数据存在 33/34 等三等分布值。",
1038
- "maximum": 100,
1039
- "minimum": 1,
1013
+ "description": "字段在所在行的宽度百分比;只能选择 25、50、75 或 100。",
1014
+ "enum": [
1015
+ 25,
1016
+ 50,
1017
+ 75,
1018
+ 100
1019
+ ],
1040
1020
  "type": "integer"
1041
1021
  }
1042
1022
  },
@@ -1056,10 +1036,10 @@
1056
1036
  ]
1057
1037
  }
1058
1038
  ],
1059
- "description": "字段选择器;用于定位应用的数据标题、数据封面、自定义编号取值来源或其他配置引用的字段。至少提供 queId 或 name,两者同时提供时必须指向同一字段。后端允许同父级同名字段,queId 是稳定身份;name 仅在唯一时可解析,命中多个同名时报 AMBIGUOUS_FIELD_SELECTOR,此时必须改用 queId。",
1039
+ "description": "字段选择器;用于定位应用的数据标题、数据封面、自定义编号取值来源或其他配置引用的字段。至少提供 queId 或 name,两者同时提供时必须指向同一字段。",
1060
1040
  "properties": {
1061
1041
  "name": {
1062
- "description": "字段名称;仅在当前作用域内唯一时可用于解析,同名命中多个字段时报 AMBIGUOUS_FIELD_SELECTOR,应改用 queId。",
1042
+ "description": "字段名称;仅在当前作用域内唯一时可用于解析。",
1063
1043
  "minLength": 1,
1064
1044
  "type": "string"
1065
1045
  },
@@ -1316,8 +1296,8 @@
1316
1296
  ]
1317
1297
  },
1318
1298
  "numberFormat": {
1319
- "description": "数字展示格式 ID(1 默认/2 千分位/3 百分比;0 为历史存量值——后端写链无值域校验,原样落库回读)。",
1320
- "minimum": 0,
1299
+ "description": "数字展示格式 ID。",
1300
+ "minimum": 1,
1321
1301
  "type": [
1322
1302
  "integer",
1323
1303
  "null"
@@ -1421,7 +1401,7 @@
1421
1401
  },
1422
1402
  "RelationConfig": {
1423
1403
  "additionalProperties": false,
1424
- "description": "引用字段配置;引用其他应用中的数据。展示字段与权限以 displayFields 为准(后端 referQuestions 全量有序回写,queAuth 1=可编辑/2=隐藏/3=仅可见);displayField/visibleFields 为已废弃旧形态,apply 兼容接收一个版本窗口(displayField 同时视为双向绑定目标)。",
1404
+ "description": "引用字段配置;引用其他应用中的数据。",
1425
1405
  "properties": {
1426
1406
  "beingDefaultFormulaAutoFillEnabled": {
1427
1407
  "description": "是否启用引用字段的默认值公式自动填充。",
@@ -1459,32 +1439,7 @@
1459
1439
  },
1460
1440
  "displayField": {
1461
1441
  "$ref": "#/$defs/FieldSelector",
1462
- "description": "已废弃:主展示字段;apply 兼容翻译为 twoWayBoundField + displayFields 首项,后续版本移除。"
1463
- },
1464
- "displayFields": {
1465
- "description": "有序展示字段全量列表(含隐藏字段),按 ordinal 保序回写为后端 referQuestions。可为空列表:空 = 双向绑定未配展示字段的合法存量形态(后端写链路对空 referQuestions 跳过插入、读面容忍空),round-trip 空↔空稳定;与已废弃 displayField/visibleFields 不可混用,条目 queId 不可重复。",
1466
- "items": {
1467
- "additionalProperties": false,
1468
- "properties": {
1469
- "auth": {
1470
- "default": "visible",
1471
- "description": "展示字段权限;editable=可编辑(1), hidden=隐藏(2), visible=仅可见(3);缺失按 visible。",
1472
- "enum": [
1473
- "editable",
1474
- "hidden",
1475
- "visible"
1476
- ]
1477
- },
1478
- "field": {
1479
- "$ref": "#/$defs/FieldSelector"
1480
- }
1481
- },
1482
- "required": [
1483
- "field"
1484
- ],
1485
- "type": "object"
1486
- },
1487
- "type": "array"
1442
+ "description": "引用值的主展示字段。"
1488
1443
  },
1489
1444
  "relationMode": {
1490
1445
  "default": "single",
@@ -1499,19 +1454,8 @@
1499
1454
  "minLength": 1,
1500
1455
  "type": "string"
1501
1456
  },
1502
- "twoWayBoundField": {
1503
- "description": "双向引用绑定的目标字段(后端 referQueId);null/省略 = 单向引用。get 读面在 referQueId 非空时必产出。",
1504
- "oneOf": [
1505
- {
1506
- "type": "null"
1507
- },
1508
- {
1509
- "$ref": "#/$defs/FieldSelector"
1510
- }
1511
- ]
1512
- },
1513
1457
  "visibleFields": {
1514
- "description": "已废弃:额外展示字段;apply 兼容翻译为 displayFields 后续项,后续版本移除。",
1458
+ "description": "引用选择界面额外展示的字段。",
1515
1459
  "items": {
1516
1460
  "$ref": "#/$defs/FieldSelector"
1517
1461
  },
@@ -1520,7 +1464,8 @@
1520
1464
  }
1521
1465
  },
1522
1466
  "required": [
1523
- "targetAppKey"
1467
+ "targetAppKey",
1468
+ "displayField"
1524
1469
  ],
1525
1470
  "type": "object"
1526
1471
  },
@@ -1639,10 +1584,7 @@
1639
1584
  "$ref": "#/$defs/NumberConfig"
1640
1585
  },
1641
1586
  "questionType": {
1642
- "enum": [
1643
- "number",
1644
- "amount"
1645
- ]
1587
+ "const": "number"
1646
1588
  }
1647
1589
  },
1648
1590
  "required": [
@@ -1655,10 +1597,7 @@
1655
1597
  "$ref": "#/$defs/EmptyConfig"
1656
1598
  },
1657
1599
  "questionType": {
1658
- "enum": [
1659
- "date",
1660
- "datetime"
1661
- ]
1600
+ "const": "date"
1662
1601
  }
1663
1602
  },
1664
1603
  "required": [
@@ -78,7 +78,7 @@
78
78
  "description": "普通字段的默认值;后端 queDefaultValue 为字符串,因此数字等字面量也必须以字符串传入。defaultType 为 1 时表示静态文本,为 3 时表示公式文本,为 2 时不携带字面量默认值。表格、地址、附件、引用等结构化默认值必须放在具体字段 config.defaultValues。显式 null 表示清除默认值。"
79
79
  },
80
80
  "name": {
81
- "description": "字段展示名称;新增字段必填,已有字段可在携带 queId 时省略;同父级允许同名(后端以 queId 为字段身份),配置引用建议携带 queId。",
81
+ "description": "字段展示名称;新增字段必填,已有字段可在携带 queId 时省略;同一父级内唯一。",
82
82
  "minLength": 1,
83
83
  "type": "string"
84
84
  },
@@ -99,9 +99,13 @@
99
99
  "type": "string"
100
100
  },
101
101
  "width": {
102
- "description": "字段在所在行的宽度百分比(1-100 整数);后端不校验总和与取值,存量数据存在 33/34 等三等分布值。",
103
- "maximum": 100,
104
- "minimum": 1,
102
+ "description": "字段在所在行的宽度百分比;只能选择 25、50、75 或 100。",
103
+ "enum": [
104
+ 25,
105
+ 50,
106
+ 75,
107
+ 100
108
+ ],
105
109
  "type": "integer"
106
110
  }
107
111
  },
@@ -236,28 +236,6 @@
236
236
  "DATEDELTA(date, number, unit)"
237
237
  ]
238
238
  },
239
- "DATEDIF": {
240
- "category": "date",
241
- "example": "DATEDIF(#queId_102$, #queId_101$)",
242
- "meaning": "历史日期差函数名,仅存在于存量公式中(当前公式引擎未注册,日期差请使用 DAYS(end, start))。为使存量声明的 validate/round-trip 通过而保留声明,不建议新公式使用。",
243
- "parameters": [
244
- {
245
- "description": "结束日期或列表",
246
- "name": "end"
247
- },
248
- {
249
- "description": "开始日期或列表",
250
- "name": "start"
251
- }
252
- ],
253
- "returns": {
254
- "description": "天数差文本列表",
255
- "type": "list"
256
- },
257
- "signatures": [
258
- "DATEDIF(end, start)"
259
- ]
260
- },
261
239
  "DATETOTIMESTAMP": {
262
240
  "category": "date",
263
241
  "example": "DATETOTIMESTAMP(#queId_101$)",
@@ -385,19 +363,6 @@
385
363
  "GETUSEREMAIL()"
386
364
  ]
387
365
  },
388
- "GETUSERENAME": {
389
- "category": "context",
390
- "example": "GETUSERENAME()",
391
- "meaning": "历史拼写(GETUSERNAME 的讹写),仅存在于存量公式中(当前公式引擎未注册,请使用 GETUSERNAME())。为使存量声明的 validate/round-trip 通过而保留声明,不建议新公式使用。",
392
- "parameters": [],
393
- "returns": {
394
- "description": "当前用户显示名称;无法取得时为空字符串",
395
- "type": "string"
396
- },
397
- "signatures": [
398
- "GETUSERENAME()"
399
- ]
400
- },
401
366
  "GETUSERNAME": {
402
367
  "category": "context",
403
368
  "example": "GETUSERNAME()",
@@ -1625,13 +1590,5 @@
1625
1590
  "需要拼接字段当前值时,将该字段的实际 queId 写成未加引号的 #queId_<字段ID>$;字段 name、字段标题和字段默认值都不能替代字段引用。",
1626
1591
  "新建应用的同一次 create 声明中尚未获得 queId 时,不得虚构 queId 或以字段 name 代替:先创建字段,app_form_get 回读实际 queId 后,再提交公式默认值更新。"
1627
1592
  ]
1628
- },
1629
- "x-qingflow-validation": {
1630
- "functionCallPolicy": "validate 会识别公式文本中引号外的 函数名( 调用;函数名必须在 x-qingflow-functions 中声明。未知函数会被拒绝,字符串字面量中的 NAME() 不视为函数调用。",
1631
- "scope": [
1632
- "defaultType=3 的 defaultValue",
1633
- "config.defaultValueFormula",
1634
- "data_relation config.filters.mode=advanced 的 config.filters.formula"
1635
- ]
1636
1593
  }
1637
1594
  }