@qingflow-tech/qingflow-cli 1.1.51 → 1.1.54

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 (106) hide show
  1. package/README.md +4 -4
  2. package/npm/lib/runtime.mjs +29 -13
  3. package/package.json +1 -1
  4. package/pyproject.toml +8 -2
  5. package/skills/qingflow-cli/SKILL.md +93 -322
  6. package/skills/qingflow-cli/manifest.yaml +1 -1
  7. package/skills/qingflow-cli/reference/00-INDEX.md +4 -4
  8. package/skills/qingflow-cli/reference/QINGFLOW_CLI_ADMIN_CHEATSHEET.md +1 -1
  9. package/skills/qingflow-cli/reference/QINGFLOW_CLI_BUILDER_VIEWS_WORKFLOW.md +3 -9
  10. package/skills/qingflow-cli/reference/QINGFLOW_CLI_DATA_RETRIEVAL_WORKFLOW.md +3 -137
  11. package/skills/qingflow-cli/reference/QINGFLOW_CLI_EXPLORATION_REPORT.md +6 -4
  12. package/skills/qingflow-cli/reference/QINGFLOW_CLI_FIELD_DATA_TYPES.md +14 -14
  13. package/skills/qingflow-cli/reference/QINGFLOW_CLI_MEMBER_CHEATSHEET.md +20 -19
  14. package/skills/qingflow-cli/reference/QINGFLOW_CLI_ONE_SHOT_CHEATSHEET.md +18 -14
  15. package/skills/qingflow-cli/reference/QINGFLOW_CLI_RECORD_CREATE_WORKFLOW.md +7 -12
  16. package/skills/qingflow-cli/reference/QINGFLOW_CLI_RECORD_UPDATE_WORKFLOW.md +2 -1
  17. package/skills/qingflow-cli/reference/builder/20-build-complete-system.md +3 -2
  18. package/skills/qingflow-cli/reference/builder/30-schema-fields.md +9 -5
  19. package/skills/qingflow-cli/reference/builder/50-views.md +192 -191
  20. package/skills/qingflow-cli/reference/builder/80-buttons-associated-resources.md +2 -0
  21. package/skills/qingflow-cli/reference/builder/README.md +1 -1
  22. package/skills/qingflow-cli/reference/builder/reference/app-delivery-sop.md +6 -6
  23. package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_ADMIN_CHEATSHEET.md +1 -1
  24. package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_DATA_RETRIEVAL_WORKFLOW.md +76 -95
  25. package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_EXPLORATION_REPORT.md +6 -4
  26. package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_FIELD_DATA_TYPES.md +13 -13
  27. package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_MEMBER_CHEATSHEET.md +20 -19
  28. package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_ONE_SHOT_CHEATSHEET.md +18 -14
  29. package/skills/qingflow-cli/reference/data/README.md +32 -0
  30. package/skills/qingflow-cli/reference/examples/README.md +1 -1
  31. package/skills/qingflow-cli/reference/examples/views/views_apply_v1alpha1.example.json +14 -0
  32. package/skills/qingflow-cli/reference/examples/views/views_upsert_table_minimal.example.json +30 -36
  33. package/skills/qingflow-cli/reference/record/QINGFLOW_CLI_RECORD_SPECIALIZED_WORKFLOW.md +50 -0
  34. package/skills/qingflow-cli/reference/record/QINGFLOW_CLI_RECORD_UPDATE_WORKFLOW.md +2 -1
  35. package/skills/qingflow-cli/reference/record/analysis/README.md +21 -113
  36. package/skills/qingflow-cli/reference/record/analysis/analysis-gotchas.md +10 -10
  37. package/skills/qingflow-cli/reference/record/analysis/analysis-patterns.md +9 -9
  38. package/skills/qingflow-cli/reference/record/analysis/business-context.md +1 -1
  39. package/skills/qingflow-cli/reference/record/analysis/confidence-reporting.md +10 -10
  40. package/skills/qingflow-cli/reference/record/analysis/data-access-playbook.md +52 -80
  41. package/skills/qingflow-cli/reference/record/analysis/pandas-recipes.md +2 -2
  42. package/skills/qingflow-common/SKILL.md +7 -4
  43. package/src/qingflow_mcp/app_form_compat.py +3 -0
  44. package/src/qingflow_mcp/app_form_validator.py +69 -17
  45. package/src/qingflow_mcp/builder_facade/app_form.py +497 -100
  46. package/src/qingflow_mcp/builder_facade/models.py +227 -17
  47. package/src/qingflow_mcp/builder_facade/schemas/app_form/manifest.json +1 -0
  48. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/complete.json +64 -30
  49. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/address.json +4 -8
  50. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/amount.json +4 -8
  51. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/attachment.json +6 -10
  52. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/code_block.json +6 -10
  53. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/data_relation.json +11 -18
  54. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/date.json +4 -8
  55. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/datetime.json +4 -8
  56. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/department.json +6 -10
  57. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/email.json +4 -8
  58. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/link.json +4 -8
  59. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/long_text.json +4 -8
  60. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/member.json +6 -10
  61. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/multi_select.json +4 -8
  62. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/number.json +4 -8
  63. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/phone.json +4 -8
  64. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/q_linker.json +6 -10
  65. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/relation.json +46 -15
  66. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/rich_text.json +146 -0
  67. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/single_choice.json +4 -8
  68. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/single_select.json +4 -8
  69. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/subtable.json +61 -27
  70. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/text.json +4 -8
  71. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/formula.json +43 -0
  72. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/summary.json +7 -12
  73. package/src/qingflow_mcp/builder_facade/schemas/views/manifest.json +42 -0
  74. package/src/qingflow_mcp/builder_facade/schemas/views/v1alpha1/complete.json +1245 -0
  75. package/src/qingflow_mcp/builder_facade/schemas/views/v1alpha1/details/button-config.json +53 -0
  76. package/src/qingflow_mcp/builder_facade/schemas/views/v1alpha1/details/data-permission.json +60 -0
  77. package/src/qingflow_mcp/builder_facade/schemas/views/v1alpha1/details/display.json +73 -0
  78. package/src/qingflow_mcp/builder_facade/schemas/views/v1alpha1/details/operation-permission.json +48 -0
  79. package/src/qingflow_mcp/builder_facade/schemas/views/v1alpha1/details/query-condition.json +47 -0
  80. package/src/qingflow_mcp/builder_facade/schemas/views/v1alpha1/summary.json +319 -0
  81. package/src/qingflow_mcp/builder_facade/service.py +1709 -518
  82. package/src/qingflow_mcp/builder_facade/views_extract.py +595 -0
  83. package/src/qingflow_mcp/builder_facade/views_schema.py +400 -0
  84. package/src/qingflow_mcp/cli/commands/__init__.py +2 -1
  85. package/src/qingflow_mcp/cli/commands/builder.py +76 -55
  86. package/src/qingflow_mcp/cli/commands/data.py +134 -0
  87. package/src/qingflow_mcp/cli/commands/record.py +1 -1
  88. package/src/qingflow_mcp/cli/context.py +3 -0
  89. package/src/qingflow_mcp/cli/formatters.py +97 -1
  90. package/src/qingflow_mcp/public_surface.py +8 -0
  91. package/src/qingflow_mcp/response_trim.py +11 -2
  92. package/src/qingflow_mcp/server.py +2 -0
  93. package/src/qingflow_mcp/server_app_builder.py +34 -10
  94. package/src/qingflow_mcp/server_app_user.py +4 -0
  95. package/src/qingflow_mcp/solution/compiler/view_compiler.py +2 -1
  96. package/src/qingflow_mcp/solution/executor.py +96 -8
  97. package/src/qingflow_mcp/solution/spec_models.py +1 -0
  98. package/src/qingflow_mcp/tools/ai_builder_tools.py +218 -398
  99. package/src/qingflow_mcp/tools/csv_export.py +168 -0
  100. package/src/qingflow_mcp/tools/data_tools.py +284 -0
  101. package/src/qingflow_mcp/tools/record_tools.py +11 -46
  102. package/src/qingflow_mcp/tools/solution_tools.py +2 -0
  103. package/src/qingflow_mcp/tools/view_tools.py +0 -6
  104. package/src/qingflow_mcp/tools/view_writer.py +44 -0
  105. package/skills/qingflow-cli/reference/examples/views/views_batch_full.example.json +0 -159
  106. package/skills/qingflow-cli/reference/views_upsert_table_minimal.example.json +0 -42
@@ -0,0 +1,1245 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://qingflow.com/schemas/builder/views/v1alpha1/complete.json",
4
+ "title": "Qingflow Builder Views Declaration · complete (v1alpha1)",
5
+ "viewCompleteDescription": "视图完整声明(完整版 spec):summary 的严格超集,覆盖 app_views_apply 当前支持的公开语义——数据权限/可见性授权/筛选/排序/查询条件/按钮配置/关联资源/类型特有配置(card/gantt/hierarchy/calendar)/展示与记录开关/分享安全。展示、排序、筛选和类型专属字段使用整数 queId;查询条件 rows 兼容字段名或 ID。打印模板明细、附件权限、列级权限和高级筛选公式尚未进入公开写入契约。schema 校验在别名归一之后执行,只约束规范名。各配置域的专项 Schema(含清空/替换语义)通过 app_views_schema 换 schema_kind 获取(见 x-qingflow-related-schemas)。",
6
+ "$defs": {
7
+ "ViewDeclaration": {
8
+ "type": "object",
9
+ "additionalProperties": false,
10
+ "required": [
11
+ "name",
12
+ "type"
13
+ ],
14
+ "properties": {
15
+ "view_key": {
16
+ "type": "string",
17
+ "x-backend": "viewgraph.viewgraphKey",
18
+ "viewKeyDescription": "视图唯一键;upsert 锁定已有视图。"
19
+ },
20
+ "pinned": {
21
+ "type": "boolean",
22
+ "pinnedDescription": "是否固定在应用的视图列表顶部。true=固定,false=取消固定;省略时保持当前状态。别名 fixed/is_pinned/isPinned。它与 display.pin_navigate(视图内导航固定)无关。",
23
+ "x-backend": "POST /app/{appKey}/view/ordinal (FIXED_VIEW_LIST|VIEW_LIST)"
24
+ },
25
+ "name": {
26
+ "type": "string",
27
+ "minLength": 1,
28
+ "maxLength": 200,
29
+ "viewNameDescription": "视图名称;未提供 view_key 时按 name 唯一匹配决定更新或创建,重名报 AMBIGUOUS_VIEW。",
30
+ "x-backend": "viewgraphName"
31
+ },
32
+ "type": {
33
+ "type": "string",
34
+ "enum": [
35
+ "table",
36
+ "card",
37
+ "board",
38
+ "gantt",
39
+ "hierarchy",
40
+ "calendar"
41
+ ],
42
+ "viewTypeDescription": "支持表格、卡片、看板、甘特、层级和日历视图。",
43
+ "x-backend": "viewgraphType(tableView/cardView/boardView/ganttView/hierarchyView/calendarView)"
44
+ },
45
+ "columns": {
46
+ "type": "array",
47
+ "items": {
48
+ "type": "integer"
49
+ },
50
+ "columnsDescription": "数据展示内容:业务字段或已存在系统字段的 queId 列表(table/card 必填)。别名 fields/column_names/columnNames。",
51
+ "x-backend": "viewgraphQuestion + viewgraphQueIds;已知系统字段允许原样透传"
52
+ },
53
+ "data_permission": {
54
+ "$ref": "#/$defs/DataPermission",
55
+ "dataPermissionDescription": "数据权限形状;scope=custom 时规则=本声明 filters(编译为 viewgraphLimit)。"
56
+ },
57
+ "visibility": {
58
+ "$ref": "#/$defs/Visibility",
59
+ "visibilityDescription": "操作权限·可见性授权(对内可见范围 + 外部成员授权)。",
60
+ "x-backend": "auth(MemberAuthInfoVO)+ viewgraph_member;external → viewgraph.externalAuth(NOT|WORKSPACE_ALL|SPECIFIC)"
61
+ },
62
+ "filters": {
63
+ "type": "array",
64
+ "items": {
65
+ "anyOf": [
66
+ {
67
+ "$ref": "#/$defs/FilterRule"
68
+ },
69
+ {
70
+ "type": "array",
71
+ "items": {
72
+ "$ref": "#/$defs/FilterRule"
73
+ },
74
+ "filtersDescription": "OR 组(组内 AND)"
75
+ }
76
+ ]
77
+ },
78
+ "filtersDescription": "数据筛选。扁平 [rule,...]=单组 AND;嵌套 [[rule,...],...]=组间 OR、组内 AND(与 visible_when/root_filter 嵌组形态对齐)。",
79
+ "x-backend": "viewgraphLimitType=1 + viewgraphLimit(List<List<MatchRule>> 单组);公式形态(scope=custom 的 OR 组)列 v1alpha2"
80
+ },
81
+ "sort": {
82
+ "type": "array",
83
+ "items": {
84
+ "$ref": "#/$defs/SortRule"
85
+ },
86
+ "sortDescription": "排序规则(多级);空数组=恢复默认排序。",
87
+ "x-backend": "viewgraphSorts(ViewgraphSortQuestion[])+ sortType=customSort(空→defaultSort)"
88
+ },
89
+ "query_conditions": {
90
+ "$ref": "#/$defs/QueryConditions",
91
+ "queryConditionsDescription": "查询条件(搜索区)配置。",
92
+ "x-backend": "queryCondition + queryConditionStatus/queryConditionExact/hideBeforeQueryCondition/showConditionTitle"
93
+ },
94
+ "action_buttons": {
95
+ "type": "array",
96
+ "items": {
97
+ "$ref": "#/$defs/ActionButton"
98
+ },
99
+ "actionButtonsDescription": "系统按钮配置(add_data/link/qrobot/wings 触发器);visible_when 为按钮级操作权限条件。别名 actionButtons。",
100
+ "x-backend": "buttonConfigDTOList(SYSTEM 分支)"
101
+ },
102
+ "action_buttons_mode": {
103
+ "type": "string",
104
+ "enum": [
105
+ "merge",
106
+ "replace"
107
+ ],
108
+ "default": "merge",
109
+ "actionButtonsModeDescription": "按钮应用模式:merge=与现有合并,replace=全量替换。别名 actionButtonsMode/buttonMode。"
110
+ },
111
+ "buttons": {
112
+ "type": "array",
113
+ "items": {
114
+ "$ref": "#/$defs/ButtonBinding"
115
+ },
116
+ "buttonsDescription": "自定义按钮绑定(引用 app 级自定义按钮并配置位置/样式/权限)。",
117
+ "x-backend": "buttonConfigDTOList(CUSTOM 分支)+ custom_button/mtm 关联"
118
+ },
119
+ "associated_resources": {
120
+ "$ref": "#/$defs/AssociatedResources",
121
+ "associatedResourcesDescription": "关联报表/图表资源。别名 associatedResources/associated_reports/asosChartConfig。",
122
+ "x-backend": "asosChartConfig + asosChartVisible + viewgraph_asos_chart"
123
+ },
124
+ "card": {
125
+ "$ref": "#/$defs/CardConfig",
126
+ "cardDescription": "卡片视图特有配置(card 类型适用)。",
127
+ "x-backend": "titleQue/frontCoverQueId/clippingMode/beingImageAdaption/beingShowQueTitle/beingShowTitleQue/beingShowCover/groupQueId/beingGroupColor"
128
+ },
129
+ "gantt": {
130
+ "$ref": "#/$defs/GanttConfig",
131
+ "ganttDescription": "甘特视图特有配置(gantt 类型适用;start/end_field 与此处的同名字段等价,取其一)。",
132
+ "x-backend": "viewgraphGanttConfigVO(titleQueId/startTimeQueId/endTimeQueId/defaultTimeDimension/ganttGroupVOList/ganttDependencyVO/ganttAutoCalibrationVO)"
133
+ },
134
+ "hierarchy": {
135
+ "$ref": "#/$defs/HierarchyConfig",
136
+ "hierarchyDescription": "层级视图特有配置(hierarchy 类型适用,必填)。",
137
+ "x-backend": "viewgraphHierarchyConfigVO(titleQueId/childrenQueId/rootNodeFilter)"
138
+ },
139
+ "calendar": {
140
+ "$ref": "#/$defs/CalendarConfig",
141
+ "calendarDescription": "日历视图特有配置(calendar 类型适用,必填)。",
142
+ "x-backend": "viewgraphCalendarConfigVO(titleQueId/dateQueId/colorQueId)"
143
+ },
144
+ "display": {
145
+ "$ref": "#/$defs/DisplayConfig",
146
+ "displayDescription": "展示杂项:行高/固定导航/备注。",
147
+ "x-backend": "defaultRowHigh/beingPinNavigate/remark"
148
+ },
149
+ "record": {
150
+ "$ref": "#/$defs/RecordConfig",
151
+ "recordDescription": "记录可见性开关:操作记录/数据日志/机器人记录/流程未来节点/留言。",
152
+ "x-backend": "beingAuditRecordVisible/beingDataLogVisible/beingQrobotRecordVisible/beingWorkflowNodeFutureListVisible/beingCommentStatus"
153
+ },
154
+ "share": {
155
+ "$ref": "#/$defs/ShareConfig",
156
+ "shareDescription": "分享与安全:密码/强制登录/打印。",
157
+ "x-backend": "beingNeedPass/viewgraphPass/beingForceLogin/beingPrintStatus"
158
+ },
159
+ "partial_update": {
160
+ "type": "boolean",
161
+ "default": false,
162
+ "partialUpdateDescription": "patch 语义开关(编排层;仅声明语义,不编译进后端 payload)。别名 partialUpdate。"
163
+ },
164
+ "preserve_filters": {
165
+ "type": "boolean",
166
+ "default": false,
167
+ "preserveFiltersDescription": "更新时保留现有筛选(编排层)。别名 preserveFilters。"
168
+ },
169
+ "preserve_buttons": {
170
+ "type": "boolean",
171
+ "default": false,
172
+ "preserveButtonsDescription": "更新时保留现有按钮(编排层)。别名 preserveButtons。"
173
+ },
174
+ "preserve_query_conditions": {
175
+ "type": "boolean",
176
+ "default": false,
177
+ "preserveQueryConditionsDescription": "更新时保留现有查询条件(编排层)。别名 preserveQueryConditions。"
178
+ },
179
+ "preserve_associated_resources": {
180
+ "type": "boolean",
181
+ "default": false,
182
+ "preserveAssociatedResourcesDescription": "更新时保留现有关联资源(编排层)。别名 preserveAssociatedResources。"
183
+ },
184
+ "group_que_id": {
185
+ "type": "integer",
186
+ "x-backend": "groupQueId",
187
+ "groupQueIdDescription": "看板分组字段 queId(board 必填)。"
188
+ },
189
+ "start_que_id": {
190
+ "type": "integer",
191
+ "x-backend": "viewgraphGanttConfigVO.startTimeQueId",
192
+ "startQueIdDescription": "甘特开始时间字段 queId(gantt 必填)。"
193
+ },
194
+ "end_que_id": {
195
+ "type": "integer",
196
+ "x-backend": "viewgraphGanttConfigVO.endTimeQueId",
197
+ "endQueIdDescription": "甘特结束时间字段 queId(gantt 必填)。"
198
+ },
199
+ "title_que_id": {
200
+ "type": "integer",
201
+ "x-backend": "titleQue",
202
+ "titleQueIdDescription": "卡片/看板/甘特/层级标题字段 queId(可选)。"
203
+ }
204
+ },
205
+ "allOf": [
206
+ {
207
+ "if": {
208
+ "properties": {
209
+ "type": {
210
+ "const": "table"
211
+ }
212
+ },
213
+ "required": [
214
+ "type"
215
+ ]
216
+ },
217
+ "then": {
218
+ "required": [
219
+ "columns"
220
+ ],
221
+ "properties": {
222
+ "columns": {
223
+ "minItems": 1
224
+ }
225
+ }
226
+ }
227
+ },
228
+ {
229
+ "if": {
230
+ "properties": {
231
+ "type": {
232
+ "const": "card"
233
+ }
234
+ },
235
+ "required": [
236
+ "type"
237
+ ]
238
+ },
239
+ "then": {
240
+ "required": [
241
+ "columns"
242
+ ],
243
+ "properties": {
244
+ "columns": {
245
+ "minItems": 1
246
+ }
247
+ }
248
+ }
249
+ },
250
+ {
251
+ "if": {
252
+ "properties": {
253
+ "type": {
254
+ "const": "board"
255
+ }
256
+ },
257
+ "required": [
258
+ "type"
259
+ ]
260
+ },
261
+ "then": {
262
+ "required": [
263
+ "group_que_id"
264
+ ]
265
+ }
266
+ },
267
+ {
268
+ "if": {
269
+ "properties": {
270
+ "type": {
271
+ "const": "gantt"
272
+ }
273
+ },
274
+ "required": [
275
+ "type"
276
+ ]
277
+ },
278
+ "then": {
279
+ "required": [
280
+ "start_que_id",
281
+ "end_que_id"
282
+ ]
283
+ }
284
+ },
285
+ {
286
+ "if": {
287
+ "properties": {
288
+ "type": {
289
+ "const": "hierarchy"
290
+ }
291
+ },
292
+ "required": [
293
+ "type"
294
+ ]
295
+ },
296
+ "then": {
297
+ "required": [
298
+ "hierarchy"
299
+ ]
300
+ }
301
+ },
302
+ {
303
+ "if": {
304
+ "properties": { "type": { "const": "calendar" } },
305
+ "required": ["type"]
306
+ },
307
+ "then": { "required": ["calendar"] }
308
+ }
309
+ ]
310
+ },
311
+ "DataPermission": {
312
+ "type": "object",
313
+ "additionalProperties": false,
314
+ "properties": {
315
+ "type": {
316
+ "type": "string",
317
+ "enum": [
318
+ "config",
319
+ "custom"
320
+ ],
321
+ "default": "custom",
322
+ "dataPermissionDescription": "数据权限生效类型:config=跟随应用配置,custom=视图自定义。别名 dataPermissionType(CONFIG/CUSTOM)。",
323
+ "x-backend": "dataPermissionType(CONFIG|CUSTOM)"
324
+ },
325
+ "scope": {
326
+ "type": "string",
327
+ "enum": [
328
+ "all",
329
+ "oneself",
330
+ "dept",
331
+ "subordinate",
332
+ "custom"
333
+ ],
334
+ "default": "all",
335
+ "dataScopeDescription": "数据范围:all=全部数据,oneself=自己发起的,dept=所在部门的,subordinate=下属的,custom=自定义(规则见 filters)。",
336
+ "x-backend": "dataScope(ALL|ONESELF|DEPT|SUBORDINATE|CUSTOM)"
337
+ }
338
+ }
339
+ },
340
+ "Visibility": {
341
+ "type": "object",
342
+ "additionalProperties": false,
343
+ "properties": {
344
+ "mode": {
345
+ "type": "string",
346
+ "enum": [
347
+ "workspace",
348
+ "everyone",
349
+ "specific"
350
+ ],
351
+ "modeDescription": "对内可见:workspace=工作区可见,everyone=互联网公开(要求 external_mode=workspace),specific=指定成员/部门/角色。",
352
+ "x-backend": "viewgraph.viewgraphAuth(1/2/3)"
353
+ },
354
+ "selectors": {
355
+ "$ref": "#/$defs/VisibilitySelectors"
356
+ },
357
+ "external_mode": {
358
+ "type": "string",
359
+ "enum": [
360
+ "not",
361
+ "workspace",
362
+ "specific"
363
+ ],
364
+ "externalModeDescription": "外部成员授权:not=不开放,workspace=共享工作区全部外部联系人,specific=指定外部成员。别名 externalMode。",
365
+ "x-backend": "viewgraph.externalAuth(NOT|WORKSPACE_ALL|SPECIFIC)"
366
+ },
367
+ "external_selectors": {
368
+ "$ref": "#/$defs/ExternalSelectors"
369
+ }
370
+ }
371
+ },
372
+ "VisibilitySelectors": {
373
+ "type": "object",
374
+ "additionalProperties": false,
375
+ "properties": {
376
+ "member_uids": {
377
+ "type": "array",
378
+ "items": {
379
+ "type": "integer"
380
+ },
381
+ "x-backend": "viewgraph_member(uid)",
382
+ "memberUidsDescription": "成员 uid 列表。别名 memberUids。"
383
+ },
384
+ "member_emails": {
385
+ "type": "array",
386
+ "items": {
387
+ "type": "string"
388
+ },
389
+ "x-backend": "viewgraph_member(uid 经邮箱解析)",
390
+ "memberEmailsDescription": "成员邮箱列表。别名 memberEmails。"
391
+ },
392
+ "member_names": {
393
+ "type": "array",
394
+ "items": {
395
+ "type": "string"
396
+ },
397
+ "x-backend": "viewgraph_member(uid 经姓名解析)",
398
+ "memberNamesDescription": "成员姓名列表(需唯一匹配)。别名 memberNames。"
399
+ },
400
+ "dept_ids": {
401
+ "type": "array",
402
+ "items": {
403
+ "type": "integer"
404
+ },
405
+ "x-backend": "viewgraph_member(dept_id)",
406
+ "deptIdsDescription": "部门 id 列表。别名 deptIds。"
407
+ },
408
+ "dept_names": {
409
+ "type": "array",
410
+ "items": {
411
+ "type": "string"
412
+ },
413
+ "x-backend": "viewgraph_member(dept_id 经部门名解析)",
414
+ "deptNamesDescription": "部门名称列表(需唯一匹配)。别名 deptNames。"
415
+ },
416
+ "role_ids": {
417
+ "type": "array",
418
+ "items": {
419
+ "type": "integer"
420
+ },
421
+ "x-backend": "viewgraph_member(role_id)",
422
+ "roleIdsDescription": "角色 id 列表。别名 roleIds。"
423
+ },
424
+ "role_names": {
425
+ "type": "array",
426
+ "items": {
427
+ "type": "string"
428
+ },
429
+ "x-backend": "viewgraph_member(role_id 经角色名解析)",
430
+ "roleNamesDescription": "角色名称列表(需唯一匹配)。别名 roleNames。"
431
+ },
432
+ "include_sub_departs": {
433
+ "type": "boolean",
434
+ "includeSubDepartsDescription": "部门选择是否含下级部门。别名 includeSubDeparts。",
435
+ "x-backend": "viewgraph_member(havingSubDept)"
436
+ }
437
+ }
438
+ },
439
+ "ExternalSelectors": {
440
+ "type": "object",
441
+ "additionalProperties": false,
442
+ "properties": {
443
+ "member_ids": {
444
+ "type": "array",
445
+ "items": {
446
+ "type": "integer"
447
+ },
448
+ "x-backend": "external_member_auth",
449
+ "memberIdsDescription": "外部成员 id 列表。别名 memberIds。"
450
+ },
451
+ "member_emails": {
452
+ "type": "array",
453
+ "items": {
454
+ "type": "string"
455
+ },
456
+ "x-backend": "external_member_auth(经邮箱解析)",
457
+ "memberEmailsDescription": "外部成员邮箱列表。"
458
+ },
459
+ "dept_ids": {
460
+ "type": "array",
461
+ "items": {
462
+ "type": "integer"
463
+ },
464
+ "x-backend": "external_member_auth(dept)",
465
+ "deptIdsDescription": "外部部门 id 列表。别名 deptIds。"
466
+ }
467
+ }
468
+ },
469
+ "FilterRule": {
470
+ "type": "object",
471
+ "additionalProperties": false,
472
+ "required": [
473
+ "que_id"
474
+ ],
475
+ "properties": {
476
+ "operator": {
477
+ "type": "string",
478
+ "enum": [
479
+ "eq",
480
+ "neq",
481
+ "in",
482
+ "contains",
483
+ "gte",
484
+ "lte",
485
+ "is_empty",
486
+ "not_empty"
487
+ ],
488
+ "default": "eq",
489
+ "operatorDescription": "比较符(组内 AND)。别名 op。"
490
+ },
491
+ "values": {
492
+ "type": "array",
493
+ "items": true,
494
+ "default": [],
495
+ "valuesDescription": "比较值;is_empty/not_empty 时忽略。"
496
+ },
497
+ "que_id": {
498
+ "type": "integer",
499
+ "x-backend": "MatchRule.queId",
500
+ "queIdDescription": "字段 queId。别名 fieldName/field/name。"
501
+ }
502
+ }
503
+ },
504
+ "SortRule": {
505
+ "type": "object",
506
+ "additionalProperties": false,
507
+ "required": [
508
+ "que_id"
509
+ ],
510
+ "properties": {
511
+ "ascending": {
512
+ "type": "boolean",
513
+ "default": true,
514
+ "ascendingDescription": "是否升序;默认 true。",
515
+ "x-backend": "beingSortAscend"
516
+ },
517
+ "que_id": {
518
+ "type": "integer",
519
+ "queIdDescription": "排序字段 queId。别名 fieldName/field/name。",
520
+ "x-backend": "ViewgraphSortQuestion.queId"
521
+ }
522
+ }
523
+ },
524
+ "QueryConditions": {
525
+ "type": "object",
526
+ "additionalProperties": false,
527
+ "properties": {
528
+ "enabled": {
529
+ "type": "boolean",
530
+ "default": true,
531
+ "enabledDescription": "是否开启查询面板。",
532
+ "x-backend": "queryConditionStatus"
533
+ },
534
+ "exact": {
535
+ "type": "boolean",
536
+ "default": false,
537
+ "exactDescription": "是否精确匹配;true=多条件同时满足,false=任一满足。",
538
+ "x-backend": "queryConditionExact"
539
+ },
540
+ "hide_before_query": {
541
+ "type": "boolean",
542
+ "default": false,
543
+ "x-backend": "hideBeforeQueryCondition",
544
+ "hideBeforeQueryDescription": "别名 hideBeforeQuery/hideBeforeQueryCondition。"
545
+ },
546
+ "rows": {
547
+ "type": "array",
548
+ "items": {
549
+ "type": "array",
550
+ "items": {
551
+ "anyOf": [
552
+ { "type": "integer" },
553
+ { "type": "string", "minLength": 1 }
554
+ ]
555
+ }
556
+ },
557
+ "rowsDescription": "查询条件字段行(row×column 布局);元素可用字段名、field_id 或 queId,推荐使用 queId。别名 fields/queryCondition。",
558
+ "x-backend": "viewgraph_query_condition(rowOrdinal/columnOrdinal/queId)"
559
+ }
560
+ }
561
+ },
562
+ "ActionButton": {
563
+ "type": "object",
564
+ "additionalProperties": false,
565
+ "required": [
566
+ "text",
567
+ "action"
568
+ ],
569
+ "properties": {
570
+ "button_id": {
571
+ "type": "integer",
572
+ "buttonIdDescription": "系统按钮 id(先 app_views_get 回读现有声明以精确定位;新建省略)。别名 buttonId/id。",
573
+ "x-backend": "button_config.id(SEARCH_BUTTON_ID=6 等系统位)"
574
+ },
575
+ "client_key": {
576
+ "type": "string",
577
+ "clientKeyDescription": "按钮 client key。别名 clientKey。",
578
+ "x-backend": "clientKey"
579
+ },
580
+ "text": {
581
+ "type": "string",
582
+ "minLength": 1,
583
+ "x-backend": "buttonText",
584
+ "textDescription": "按钮文案。别名 button_text/buttonText/name。"
585
+ },
586
+ "action": {
587
+ "type": "string",
588
+ "enum": [
589
+ "add_data",
590
+ "link",
591
+ "qRobot",
592
+ "wings"
593
+ ],
594
+ "x-backend": "triggerAction(addData/link/qRobot/wings)",
595
+ "actionDescription": "触发动作。别名 trigger_action/triggerAction。"
596
+ },
597
+ "url": {
598
+ "type": "string",
599
+ "urlDescription": "link 动作的跳转 URL。别名 link_url/linkUrl/trigger_link_url。"
600
+ },
601
+ "target_app_key": {
602
+ "type": "string",
603
+ "targetAppKeyDescription": "add_data 动作的目标应用。别名 targetAppKey/related_app_key。",
604
+ "x-backend": "relationAppKey"
605
+ },
606
+ "target_app_name": {
607
+ "type": "string",
608
+ "targetAppNameDescription": "add_data 动作的目标应用名。别名 targetAppName/related_app_name。"
609
+ },
610
+ "field_mappings": {
611
+ "type": "array",
612
+ "items": true,
613
+ "fieldMappingsDescription": "add_data 字段映射。别名 fieldMappings/mappings。",
614
+ "x-backend": "que_relations"
615
+ },
616
+ "default_values": {
617
+ "type": "object",
618
+ "additionalProperties": true,
619
+ "defaultValuesDescription": "add_data 静态默认值。别名 defaultValues/defaults。"
620
+ },
621
+ "placement": {
622
+ "type": "string",
623
+ "enum": [
624
+ "header",
625
+ "detail",
626
+ "list"
627
+ ],
628
+ "default": "detail",
629
+ "x-backend": "viewgraph_button_config.configType(TOP|DETAIL|INSIDE)",
630
+ "placementDescription": "按钮位置。别名 position/config_type。"
631
+ },
632
+ "primary": {
633
+ "type": "boolean",
634
+ "default": false,
635
+ "primaryDescription": "是否主按钮。别名 being_main/beingMain。",
636
+ "x-backend": "beingMain"
637
+ },
638
+ "visible_when": {
639
+ "type": "array",
640
+ "items": {
641
+ "type": "array",
642
+ "items": {
643
+ "$ref": "#/$defs/FilterRule"
644
+ }
645
+ },
646
+ "visibleWhenDescription": "按钮可见的记录级权限条件(组内 AND、组间 OR)。别名 visibleWhen/button_limit/buttonLimit。",
647
+ "x-backend": "buttonLimit(List<List<MatchRule>>)"
648
+ },
649
+ "button_formula": {
650
+ "type": "string",
651
+ "x-backend": "buttonFormula",
652
+ "buttonFormulaDescription": "按钮公式。别名 buttonFormula。"
653
+ },
654
+ "button_formula_type": {
655
+ "type": "integer",
656
+ "default": 1,
657
+ "x-backend": "buttonFormulaType",
658
+ "buttonFormulaTypeDescription": "按钮公式类型。别名 buttonFormulaType。"
659
+ },
660
+ "print_tpls": {
661
+ "type": "array",
662
+ "items": true,
663
+ "x-backend": "printTpls",
664
+ "printTplsDescription": "打印模板引用。别名 printTpls。"
665
+ },
666
+ "style_preset": {
667
+ "type": "string",
668
+ "x-backend": "样式预设",
669
+ "stylePresetDescription": "样式预设名。别名 stylePreset。"
670
+ },
671
+ "background_color": {
672
+ "type": "string",
673
+ "x-backend": "backgroundColor(transparent 等)",
674
+ "backgroundColorDescription": "背景色。别名 backgroundColor。"
675
+ },
676
+ "text_color": {
677
+ "type": "string",
678
+ "x-backend": "textColor(#494F57 等)",
679
+ "textColorDescription": "文字色。别名 textColor。"
680
+ },
681
+ "button_icon": {
682
+ "type": "string",
683
+ "x-backend": "buttonIcon(ex-search 等)",
684
+ "buttonIconDescription": "图标名。别名 buttonIcon。"
685
+ },
686
+ "external_qrobot_config": {
687
+ "type": "object",
688
+ "additionalProperties": true,
689
+ "externalQrobotConfigDescription": "qRobot 触发配置(qRobot 动作必填)。别名 externalQrobotConfig。",
690
+ "x-backend": "custom_button_external_qrobot_relation_vo"
691
+ },
692
+ "trigger_wings_config": {
693
+ "type": "object",
694
+ "additionalProperties": true,
695
+ "triggerWingsConfigDescription": "wings 触发配置(wings 动作必填)。别名 triggerWingsConfig。",
696
+ "x-backend": "trigger_wings_config"
697
+ }
698
+ }
699
+ },
700
+ "ButtonBinding": {
701
+ "type": "object",
702
+ "additionalProperties": false,
703
+ "required": [
704
+ "button_type",
705
+ "config_type",
706
+ "button_id"
707
+ ],
708
+ "properties": {
709
+ "button_type": {
710
+ "type": "string",
711
+ "enum": [
712
+ "SYSTEM",
713
+ "CUSTOM"
714
+ ],
715
+ "buttonTypeDescription": "按钮类型。别名 buttonType(system/custom 归一)。",
716
+ "x-backend": "button_config.buttonType"
717
+ },
718
+ "config_type": {
719
+ "type": "string",
720
+ "enum": [
721
+ "TOP",
722
+ "DETAIL",
723
+ "INSIDE"
724
+ ],
725
+ "configTypeDescription": "按钮位置。别名 configType(top/header→TOP、detail→DETAIL、inside/list/row→INSIDE)。",
726
+ "x-backend": "configType"
727
+ },
728
+ "button_id": {
729
+ "type": "integer",
730
+ "buttonIdDescription": "按钮 id(创建前先 app_get_buttons 传 button_text 查重,唯一命中直接复用本 id;未命中才用 app_custom_buttons_apply 创建)。别名 buttonId/id。",
731
+ "x-backend": "button_config.id / custom_button_id"
732
+ },
733
+ "button_text": {
734
+ "type": "string",
735
+ "x-backend": "buttonText",
736
+ "buttonTextDescription": "按钮文案。别名 buttonText。"
737
+ },
738
+ "button_icon": {
739
+ "type": "string",
740
+ "x-backend": "buttonIcon",
741
+ "buttonIconDescription": "图标名。别名 buttonIcon。"
742
+ },
743
+ "style_preset": {
744
+ "type": "string",
745
+ "stylePresetDescription": "样式预设名。别名 stylePreset。"
746
+ },
747
+ "background_color": {
748
+ "type": "string",
749
+ "x-backend": "backgroundColor",
750
+ "backgroundColorDescription": "背景色。别名 backgroundColor。"
751
+ },
752
+ "text_color": {
753
+ "type": "string",
754
+ "x-backend": "textColor",
755
+ "textColorDescription": "文字色。别名 textColor。"
756
+ },
757
+ "trigger_action": {
758
+ "type": "string",
759
+ "triggerActionDescription": "触发动作(维护既有绑定)。别名 triggerAction。",
760
+ "x-backend": "triggerAction"
761
+ },
762
+ "print_tpls": {
763
+ "type": "array",
764
+ "items": true,
765
+ "printTplsDescription": "打印模板引用。别名 printTpls。"
766
+ },
767
+ "being_main": {
768
+ "type": "boolean",
769
+ "default": false,
770
+ "beingMainDescription": "是否主按钮。别名 beingMain。",
771
+ "x-backend": "beingMain"
772
+ },
773
+ "button_limit": {
774
+ "type": "array",
775
+ "items": {
776
+ "type": "array",
777
+ "items": {
778
+ "$ref": "#/$defs/FilterRule"
779
+ }
780
+ },
781
+ "buttonLimitDescription": "按钮可见权限条件。别名 buttonLimit。",
782
+ "x-backend": "buttonLimit"
783
+ },
784
+ "button_formula": {
785
+ "type": "string",
786
+ "buttonFormulaDescription": "按钮公式。别名 buttonFormula。",
787
+ "x-backend": "buttonFormula"
788
+ },
789
+ "button_formula_type": {
790
+ "type": "integer",
791
+ "default": 1,
792
+ "buttonFormulaTypeDescription": "按钮公式类型。别名 buttonFormulaType。",
793
+ "x-backend": "buttonFormulaType"
794
+ }
795
+ }
796
+ },
797
+ "AssociatedResources": {
798
+ "type": "object",
799
+ "additionalProperties": false,
800
+ "properties": {
801
+ "visible": {
802
+ "type": "boolean",
803
+ "default": true,
804
+ "x-backend": "asosChartVisible",
805
+ "visibleDescription": "关联资源是否可见。别名 enabled/asosChartVisible。"
806
+ },
807
+ "limit_type": {
808
+ "type": "string",
809
+ "enum": [
810
+ "all",
811
+ "select"
812
+ ],
813
+ "x-backend": "asosChartConfig.limitType",
814
+ "limitTypeDescription": "all=全部关联,select=指定。别名 limitType。"
815
+ },
816
+ "associated_item_ids": {
817
+ "type": "array",
818
+ "items": true,
819
+ "x-backend": "asosChartIdList → viewgraph_asos_chart",
820
+ "associatedItemIdsDescription": "指定关联资源 id。别名 associatedItemIds/asosChartIdList/items。"
821
+ }
822
+ }
823
+ },
824
+ "CardConfig": {
825
+ "type": "object",
826
+ "additionalProperties": false,
827
+ "properties": {
828
+ "clipping_mode": {
829
+ "type": "string",
830
+ "enum": [
831
+ "default",
832
+ "fill"
833
+ ],
834
+ "clippingModeDescription": "封面裁剪模式:default=默认,fill=填充。",
835
+ "x-backend": "clippingMode(default 实测)"
836
+ },
837
+ "image_adaption": {
838
+ "type": "boolean",
839
+ "default": false,
840
+ "imageAdaptionDescription": "封面图是否自适应尺寸。",
841
+ "x-backend": "beingImageAdaption"
842
+ },
843
+ "show_field_title": {
844
+ "type": "boolean",
845
+ "default": true,
846
+ "showFieldTitleDescription": "是否显示字段标题。",
847
+ "x-backend": "beingShowQueTitle"
848
+ },
849
+ "show_title": {
850
+ "type": "boolean",
851
+ "default": true,
852
+ "showTitleDescription": "是否显示卡片标题。",
853
+ "x-backend": "beingShowTitleQue"
854
+ },
855
+ "show_cover": {
856
+ "type": "boolean",
857
+ "default": false,
858
+ "showCoverDescription": "是否显示封面图。",
859
+ "x-backend": "beingShowCover"
860
+ },
861
+ "group_color": {
862
+ "type": "boolean",
863
+ "default": false,
864
+ "groupColorDescription": "分组是否显示颜色标识。",
865
+ "x-backend": "beingGroupColor"
866
+ },
867
+ "group_que_id": {
868
+ "type": "integer",
869
+ "groupQueIdDescription": "看板式分组字段(card 类型适用)。",
870
+ "x-backend": "groupQueId"
871
+ },
872
+ "title_que_id": {
873
+ "type": "integer",
874
+ "titleQueIdDescription": "卡片标题字段 queId。",
875
+ "x-backend": "titleQueId"
876
+ },
877
+ "cover_que_id": {
878
+ "type": "integer",
879
+ "coverQueIdDescription": "封面图字段(attachment 字段)。",
880
+ "x-backend": "frontCoverQueId"
881
+ }
882
+ }
883
+ },
884
+ "GanttConfig": {
885
+ "type": "object",
886
+ "additionalProperties": false,
887
+ "properties": {
888
+ "default_time_dimension": {
889
+ "type": "string",
890
+ "enum": [
891
+ "day",
892
+ "week",
893
+ "month",
894
+ "year"
895
+ ],
896
+ "default": "month",
897
+ "defaultTimeDimensionDescription": "默认时间维度:day/week/month/year。",
898
+ "x-backend": "defaultTimeDimension(month×8/week×4 实测)"
899
+ },
900
+ "auto_calibration": {
901
+ "type": "boolean",
902
+ "default": false,
903
+ "autoCalibrationDescription": "自动校准开关。",
904
+ "x-backend": "ganttAutoCalibrationVO.beingAutoCalibration"
905
+ },
906
+ "groups": {
907
+ "type": "array",
908
+ "groupsDescription": "甘特分组字段列表,按 ordinal 排序。",
909
+ "items": {
910
+ "type": "object",
911
+ "additionalProperties": false,
912
+ "properties": {
913
+ "ordinal": {
914
+ "type": "integer",
915
+ "ordinalDescription": "分组展示顺序。"
916
+ },
917
+ "que_id": {
918
+ "type": "integer",
919
+ "queIdDescription": "分组字段 queId。"
920
+ }
921
+ }
922
+ },
923
+ "x-backend": "ganttGroupVOList(groupQueId, ordinal)"
924
+ },
925
+ "dependencies": {
926
+ "type": "array",
927
+ "maxItems": 1,
928
+ "dependenciesDescription": "任务依赖关系;后端为单对象,v1alpha1 限 1 条。",
929
+ "items": {
930
+ "$ref": "#/$defs/GanttDependency"
931
+ },
932
+ "x-backend": "ganttDependencyVO(后端单对象,v1alpha1 限 1 条)"
933
+ },
934
+ "start_que_id": {
935
+ "type": "integer",
936
+ "startQueIdDescription": "甘特开始时间字段 queId;与顶层 start_que_id 等价,取其一。",
937
+ "x-backend": "startTimeQueId"
938
+ },
939
+ "end_que_id": {
940
+ "type": "integer",
941
+ "endQueIdDescription": "甘特结束时间字段 queId;与顶层 end_que_id 等价,取其一。",
942
+ "x-backend": "endTimeQueId"
943
+ },
944
+ "title_que_id": {
945
+ "type": "integer",
946
+ "titleQueIdDescription": "甘特标题字段 queId;与顶层 title_que_id 等价。",
947
+ "x-backend": "titleQueId"
948
+ }
949
+ }
950
+ },
951
+ "GanttDependency": {
952
+ "type": "object",
953
+ "additionalProperties": false,
954
+ "required": [
955
+ "predecessor_que_id",
956
+ "dependency_que_id"
957
+ ],
958
+ "properties": {
959
+ "start_start_option_id": {
960
+ "type": "integer",
961
+ "startStartOptionIdDescription": "开始→开始依赖的偏移选项 id(可选)。",
962
+ "x-backend": "startStartOptionId"
963
+ },
964
+ "start_end_option_id": {
965
+ "type": "integer",
966
+ "startEndOptionIdDescription": "开始→结束依赖的偏移选项 id(可选)。",
967
+ "x-backend": "startEndOptionId"
968
+ },
969
+ "end_start_option_id": {
970
+ "type": "integer",
971
+ "endStartOptionIdDescription": "结束→开始依赖的偏移选项 id(可选)。",
972
+ "x-backend": "endStartOptionId"
973
+ },
974
+ "end_end_option_id": {
975
+ "type": "integer",
976
+ "endEndOptionIdDescription": "结束→结束依赖的偏移选项 id(可选)。",
977
+ "x-backend": "endEndOptionId"
978
+ },
979
+ "dependency_que_id": {
980
+ "type": "integer",
981
+ "dependencyQueIdDescription": "被依赖(后续)任务的关联字段 queId。",
982
+ "x-backend": "dependencyQueId"
983
+ },
984
+ "predecessor_que_id": {
985
+ "type": "integer",
986
+ "predecessorQueIdDescription": "前置任务的关联字段 queId。",
987
+ "x-backend": "predecessorTaskQueId"
988
+ }
989
+ }
990
+ },
991
+ "HierarchyConfig": {
992
+ "type": "object",
993
+ "additionalProperties": false,
994
+ "required": [
995
+ "title_que_id",
996
+ "children_que_id"
997
+ ],
998
+ "properties": {
999
+ "root_filter": {
1000
+ "type": "array",
1001
+ "items": {
1002
+ "type": "array",
1003
+ "items": {
1004
+ "$ref": "#/$defs/FilterRule"
1005
+ }
1006
+ },
1007
+ "rootFilterDescription": "根节点筛选规则(组内 AND、组间 OR;编译为 MatchRule 组)。",
1008
+ "x-backend": "rootNodeFilter(List<List<MatchRule>>)"
1009
+ },
1010
+ "title_que_id": {
1011
+ "type": "integer",
1012
+ "titleQueIdDescription": "层级标题字段 queId。",
1013
+ "x-backend": "viewgraph_hierarchy_config.titleQueId"
1014
+ },
1015
+ "children_que_id": {
1016
+ "type": "integer",
1017
+ "childrenQueIdDescription": "子节点关联字段 queId(引用/关联字段)。",
1018
+ "x-backend": "childrenQueId"
1019
+ }
1020
+ }
1021
+ },
1022
+ "CalendarConfig": {
1023
+ "type": "object",
1024
+ "additionalProperties": false,
1025
+ "required": ["title_que_id", "date_que_id"],
1026
+ "properties": {
1027
+ "title_que_id": { "type": "integer", "calendarTitleQueIdDescription": "日历事项标题字段 queId。", "x-backend": "titleQueId" },
1028
+ "date_que_id": { "type": "integer", "calendarDateQueIdDescription": "日历日期字段 queId;可使用表单日期字段或系统字段申请时间(2)/更新时间(3)。", "x-backend": "dateQueId" },
1029
+ "color_que_id": { "type": "integer", "calendarColorQueIdDescription": "可选的日历颜色字段 queId。", "x-backend": "colorQueId" }
1030
+ }
1031
+ },
1032
+ "DisplayConfig": {
1033
+ "type": "object",
1034
+ "additionalProperties": false,
1035
+ "properties": {
1036
+ "row_height": {
1037
+ "type": "string",
1038
+ "enum": [
1039
+ "compact",
1040
+ "moderate",
1041
+ "highest",
1042
+ "high"
1043
+ ],
1044
+ "rowHeightDescription": "表格行高:compact=紧凑,moderate=适中,high=高,highest=最高。",
1045
+ "x-backend": "defaultRowHigh(compact×705 实测)"
1046
+ },
1047
+ "pin_navigate": {
1048
+ "type": "boolean",
1049
+ "default": false,
1050
+ "pinNavigateDescription": "是否固定视图内导航;与顶层 pinned(视图列表固定)无关。",
1051
+ "x-backend": "beingPinNavigate"
1052
+ },
1053
+ "remark": {
1054
+ "type": "string",
1055
+ "remarkDescription": "视图备注。",
1056
+ "x-backend": "remark"
1057
+ }
1058
+ }
1059
+ },
1060
+ "RecordConfig": {
1061
+ "type": "object",
1062
+ "additionalProperties": false,
1063
+ "properties": {
1064
+ "audit_visible": {
1065
+ "type": "boolean",
1066
+ "default": true,
1067
+ "auditVisibleDescription": "是否显示操作记录。",
1068
+ "x-backend": "beingAuditRecordVisible"
1069
+ },
1070
+ "data_log_visible": {
1071
+ "type": "boolean",
1072
+ "default": true,
1073
+ "dataLogVisibleDescription": "是否显示数据日志(字段变更历史)。",
1074
+ "x-backend": "beingDataLogVisible"
1075
+ },
1076
+ "qrobot_record_visible": {
1077
+ "type": "boolean",
1078
+ "default": false,
1079
+ "qrobotRecordVisibleDescription": "是否显示机器人记录。",
1080
+ "x-backend": "beingQrobotRecordVisible"
1081
+ },
1082
+ "workflow_future_visible": {
1083
+ "type": "boolean",
1084
+ "default": true,
1085
+ "workflowFutureVisibleDescription": "是否显示流程未来节点。",
1086
+ "x-backend": "beingWorkflowNodeFutureListVisible"
1087
+ },
1088
+ "comment": {
1089
+ "type": "boolean",
1090
+ "default": false,
1091
+ "commentDescription": "是否开启留言。",
1092
+ "x-backend": "beingCommentStatus"
1093
+ }
1094
+ }
1095
+ },
1096
+ "ShareConfig": {
1097
+ "type": "object",
1098
+ "additionalProperties": false,
1099
+ "properties": {
1100
+ "need_pass": {
1101
+ "type": "boolean",
1102
+ "default": false,
1103
+ "needPassDescription": "分享是否需要访问密码;true 时用 password 提供密码。",
1104
+ "x-backend": "beingNeedPass"
1105
+ },
1106
+ "password": {
1107
+ "type": "string",
1108
+ "passwordDescription": "访问密码(need_pass=true 时生效)。别名 pass/viewgraphPass。",
1109
+ "x-backend": "viewgraphPass"
1110
+ },
1111
+ "force_login": {
1112
+ "type": "boolean",
1113
+ "default": false,
1114
+ "forceLoginDescription": "分享是否强制登录后查看。",
1115
+ "x-backend": "beingForceLogin"
1116
+ },
1117
+ "print_enabled": {
1118
+ "type": "boolean",
1119
+ "default": false,
1120
+ "printEnabledDescription": "打印开关(模板明细 v1alpha2)。",
1121
+ "x-backend": "beingPrintStatus"
1122
+ }
1123
+ }
1124
+ }
1125
+ },
1126
+ "$ref": "#/$defs/ViewDeclaration",
1127
+ "x-qingflow-config-sections": [
1128
+ {
1129
+ "kind": "display",
1130
+ "displayDescription": "展示字段、排序、关联资源和各公开视图类型的专属配置。",
1131
+ "fields": ["columns", "sort", "card", "gantt", "hierarchy", "calendar", "associated_resources", "display", "group_que_id", "title_que_id", "start_que_id", "end_que_id"]
1132
+ },
1133
+ {
1134
+ "kind": "data-permission",
1135
+ "dataPermissionDescription": "后台或自定义数据权限模式以及固定筛选。",
1136
+ "fields": ["data_permission", "filters"]
1137
+ },
1138
+ {
1139
+ "kind": "operation-permission",
1140
+ "operationPermissionDescription": "成员可见范围、记录日志、留言、打印和分享开关。",
1141
+ "fields": ["visibility", "record", "share"]
1142
+ },
1143
+ {
1144
+ "kind": "query-condition",
1145
+ "queryConditionDescription": "用户查询面板开关、匹配模式、查询前隐藏和行列布局。",
1146
+ "fields": ["query_conditions"]
1147
+ },
1148
+ {
1149
+ "kind": "button-config",
1150
+ "buttonConfigDescription": "系统动作按钮、自定义按钮绑定以及关联的查询面板。",
1151
+ "fields": ["action_buttons", "action_buttons_mode", "buttons", "query_conditions"]
1152
+ }
1153
+ ],
1154
+ "x-qingflow-related-schemas": {
1155
+ "currentKind": "complete",
1156
+ "fetchTool": "app_views_schema",
1157
+ "fetchArgument": "schema_kind",
1158
+ "fetchCli": "builder views schema --schema-kind KIND",
1159
+ "kinds": {
1160
+ "summary": "最小创建声明:类型/名称/展示字段 + 数据权限形状。",
1161
+ "complete": "完整声明:全部公开可写字段,含各配置域与类型专属配置。",
1162
+ "display": "展示字段、排序、卡片/甘特/层级/日历配置、分组字段和关联资源。",
1163
+ "data-permission": "数据权限模式、数据范围和固定筛选条件。",
1164
+ "operation-permission": "成员可见范围、记录日志、留言、打印和分享策略。",
1165
+ "query-condition": "用户查询面板的开关、匹配模式和字段布局。",
1166
+ "button-config": "系统动作按钮、自定义按钮绑定及按钮清空/合并方式。"
1167
+ },
1168
+ "navigationDescription": "本声明是完整版;最小创建声明用 schema_kind=summary 获取。某个配置域需要专项语义(清空/替换规则、字段约束)时,用 app_views_schema 换对应 schema_kind 读取,专项返回自包含可直接校验。",
1169
+ "readSources": {
1170
+ "queIds": "字段 queId 用 app_get 读 fields(CLI: builder app get --app-key APP fields);现有视图声明用 app_views_get 回读(CLI: builder views get --app-key APP --schema-kind summary|complete)。",
1171
+ "fieldSchema": "字段类型、默认值等表单侧细节用 app_form_schema 传 schema_kind=field 和 field_type 获取(CLI: builder app-form schema --schema-kind field --field-type TYPE)。"
1172
+ }
1173
+ },
1174
+ "x-qingflow-write-semantics": {
1175
+ "create": "省略的配置片段由 builder 组装创建默认值;JSON Schema 的 default 只是注解。",
1176
+ "full_upsert": "提交完整目标配置;数组和嵌套对象的清空或替换规则按配置域调用 app_views_schema 获取专项 Schema(schema_kind=display/data-permission/operation-permission/query-condition/button-config;CLI: builder views schema --schema-kind KIND)。",
1177
+ "partial_patch": "优先使用 patch_views 的 set/unset。builder 会读取现有配置、合并后再向后端完整保存。",
1178
+ "backend_warning": "底层 ViewgraphInfo 更新接口对部分省略字段会执行 false、true、空数组或空字符串初始化,因此不得把直接后端请求中的省略统一理解为保留。"
1179
+ },
1180
+ "x-qingflow-backend-known-unsupported": {
1181
+ "column_permissions": {
1182
+ "backend": "viewgraphQuestions/ViewgraphQuestion",
1183
+ "status": "not-writable",
1184
+ "reason": "当前 columns 只表达展示字段及顺序。"
1185
+ },
1186
+ "advanced_filter_formula": {
1187
+ "backend": "viewgraphLimitType=2 + viewgraphLimitFormula",
1188
+ "status": "not-writable",
1189
+ "reason": "当前 filters 只编译简易 MatchRule。"
1190
+ },
1191
+ "print_templates": {
1192
+ "backend": "beingDefaultPrintTplStatus + printTpls",
1193
+ "status": "not-writable",
1194
+ "reason": "当前 share 只公开 print_enabled。"
1195
+ },
1196
+ "attachment_policy": {
1197
+ "backend": "attachVisibleOnlyConfig",
1198
+ "status": "read-only",
1199
+ "reason": "该配置从工作区继承,视图保存接口不修改。"
1200
+ }
1201
+ },
1202
+ "examples": [
1203
+ {
1204
+ "name": "业务记录",
1205
+ "type": "table",
1206
+ "columns": [101, 102],
1207
+ "visibility": {
1208
+ "mode": "workspace",
1209
+ "external_mode": "not"
1210
+ },
1211
+ "data_permission": {
1212
+ "type": "custom",
1213
+ "scope": "all"
1214
+ },
1215
+ "sort": [
1216
+ {
1217
+ "que_id": 101,
1218
+ "ascending": true
1219
+ }
1220
+ ]
1221
+ },
1222
+ {
1223
+ "name": "待处理记录",
1224
+ "type": "table",
1225
+ "columns": [101, 102],
1226
+ "data_permission": {
1227
+ "type": "custom",
1228
+ "scope": "custom"
1229
+ },
1230
+ "filters": [
1231
+ {
1232
+ "que_id": 103,
1233
+ "operator": "eq",
1234
+ "values": ["待处理"]
1235
+ }
1236
+ ],
1237
+ "query_conditions": {
1238
+ "enabled": true,
1239
+ "exact": false,
1240
+ "hide_before_query": true,
1241
+ "rows": [[101, 103]]
1242
+ }
1243
+ }
1244
+ ]
1245
+ }