openyida 2026.7.12 → 2026.7.13

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.
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: yida-custom-page
3
- description: 宜搭 native 自定义页面 JSX 开发规范(React 16 宜搭原生 export function renderJsx 模式、宜搭 JS API、状态管理与编码约束)。是**回退链路**:仅当页面强依赖原生实例数据桥(this.$(fieldId) 表单字段双向绑定、this.utils.yida.*、dataSourceMap、提交流程深度耦合)时才用;纯展示无刷新页也可用。其余自定义页面(含只需开放 API HTTP 读数据的页)默认走 yida-canvas-custom-page。
3
+ description: 宜搭 native 自定义页面 JSX 开发规范(React 16 宜搭原生 export function renderJsx 模式、宜搭 JS API、状态管理与编码约束)。这是默认兼容链路,适合完整应用 fast_build、未确认 Code Canvas 能力的组织,以及强依赖 this.$(fieldId)this.utils.yida.*、dataSourceMap 的页面。
4
4
  ---
5
5
 
6
6
  # 自定义页面开发
7
7
 
8
- > **先确认链路**:自定义页面**默认走 Code Canvas** `yida-canvas-custom-page`(现代 React 交互 / hooks / 可视化 / AI / 需崩溃隔离,含只需开放 API HTTP 读数据的页)。本 native 技能是**回退链路**,只处理:① 强依赖原生实例数据桥——表单内字段双向绑定 `this.$(fieldId)`、`this.utils.yida.*`、`dataSourceMap`、提交流程深度耦合——的页面(Canvas 无 `this` 桥,重写代价过高时留 native);② 纯展示、无运行态刷新页。把已有 native 页升级到 Canvas 走 `yida-canvas-upgrade`。
8
+ > **先确认链路**:Code Canvas 在宜搭平台侧尚未全量。自定义页面默认走 native 兼容链路 `yida-custom-page`(`.oyd.jsx` + `check-page` / `compile` / `publish`)。只有用户明确要求 Code Canvas / 代码画布,已有页面 Schema `YidaCodeCanvas`,或已确认当前组织/页面支持 Canvas 时,才切到 `yida-canvas-custom-page`;把已有 native 页升级到 Canvas 走 `yida-canvas-upgrade`。
9
9
 
10
10
  ## 核心规则
11
11
 
@@ -26,13 +26,13 @@ description: 宜搭 native 自定义页面 JSX 开发规范(React 16 宜搭原
26
26
  11. **生命周期名称大小写固定**:只允许 `export function didMount()` 与 `export function didUnmount()`;`didmount`、`componentDidMount`、`componentWillUnmount` 会被 `check-page` 阻塞
27
27
  12. **按钮必须真的绑定事件**:禁止 `onclick` 小写属性、`onClick={self.save()}`、`onClick={(e) => self.save}`、`<button>静态标签</button>` 等看起来有按钮但不会正确绑定的写法;统一使用 `onClick={(e) => { self.save(e); }}`。如果只是状态标签/截图标记,用 `span`/`div`,不要用 `button`
28
28
  13. **业务状态禁止直接 `this.setState`**:业务态只写 `_customState`,通过 `setCustomState()` / `forceUpdate()` 触发重渲染;`this.setState` 只允许写 `timestamp` 等运行时契约字段
29
- 14. **读状态只能用 `getCustomState()`,禁止读 `this.state.<业务字段>`**:`this.state` 里只有 `timestamp`(重渲染标记)和 `urlParams`,业务态在 `_customState`。读 `this.state.agg`、`this.state.loading` 等恒为 `undefined`,页面无报错却渲染成"数据全占位、图表全空"的空壳页,极难排查。`renderJsx`/`renderCharts` 等所有读状态处一律 `this.getCustomState()`(详见 [编码指南 · 状态管理](references/coding-guide.md)
29
+ 14. **读状态只能用 `getCustomState()`,禁止读 `this.state.<业务字段>`**:`this.state` 里只有 `timestamp`(重渲染标记)和 `urlParams`,业务态在 `_customState`。读 `this.state.agg`、`this.state.loading` 等恒为 `undefined`,页面无报错却渲染成"数据全占位、图表全空"的空壳页,极难排查。`renderJsx`/`renderCharts` 等所有读状态处一律 `this.getCustomState()`;遇到状态同步问题时再读 [编码指南 · 状态管理](references/coding-guide.md)
30
30
 
31
31
  ### 重要规则(IMPORTANT)
32
32
 
33
33
  影响代码质量和用户体验:
34
34
 
35
- 0. **写 UI 前先定视觉方向**:面向用户的页面在动手写 JSX 前,调用 `use_skill("yida-page-uiux", "确定自定义页面视觉方向")` 完成「视觉方向决策」(页面类型判定 + 差异化 + 去 AI 味自检),拿到「视觉方向决策块」后再按本技能 `references/design-system.md` token/组件实现;不要直接套用统一灰白底 + 8px 圆角卡片网格的默认模板(那正是 AI 味来源)。
35
+ 0. **视觉方向按需加载**:单点页面美化、用户明确要求好看/去 AI 味,或 `yida-app` 进入 `deep_design` 时,调用 `use_skill("yida-page-uiux", "确定自定义页面视觉方向")` 完成「视觉方向决策」。`yida-app fast_build` 默认不加载该技能,直接使用克制的 MVP 工作台/列表/入口布局,禁 emoji、少装饰、主色跟随 App 品牌即可。
36
36
  1. **代码生成前确认功能摘要**:详见 [编码指南 编注 0](references/coding-guide.md)
37
37
  2. **pageSize 推荐 50,最大 100**:列表/看板默认 `pageSize: 50`;分页接口 `searchFormDatas` 等的 `pageSize` 最大 100
38
38
  3. **didUnmount 清理定时器**:在 `didUnmount` 中清理所有 `setInterval`/`setTimeout`,防止内存泄漏
@@ -48,9 +48,9 @@ description: 宜搭 native 自定义页面 JSX 开发规范(React 16 宜搭原
48
48
  13. **严禁 emoji**:页面渲染出来的任何位置(标题、按钮、标签、状态、空态文案、图表标题等)**一律禁止出现 emoji**(😀🚀✅⚠️📦📊 等一切彩色符号字符)。需要图标一律用功能性内联 SVG(见 `skills/yida-page-uiux` 图标策略);需要状态标记用文字 + 语义色标签。emoji 是最明显的 AI 味来源之一,且跨端显示不一致。JS 注释里也不要留装饰性符号。
49
49
  14. **发布前必须跑检查链路**:先执行 `openyida check-page <file>` 和 `openyida compile <file>`;若出现 warning/error,按规则修复后再发布
50
50
 
51
- > 每条规则的代码示例、反模式和常见错误见 [编码指南](references/coding-guide.md)(编写代码前强制必读)。
52
- > 运行时易错点、`check-page` 规则和兼容层自动修复边界见 [运行时护栏](references/runtime-guardrails.md)
53
- > 表单类 JSX 控件、筛选栏、表格、成员/附件等组件写法见 [组件指南](references/component-jsx-guide.md);未验证的平台组件能力不得编造。
51
+ > 每条规则的代码示例、反模式和常见错误见 [编码指南](references/coding-guide.md);`fast_build` 默认先遵守本技能正文,不预读长 reference,只有 check-page 报错、复杂交互、`deep_design` 或正文覆盖不了的问题时才读取。
52
+ > 运行时易错点、`check-page` 规则和兼容层自动修复边界见 [运行时护栏](references/runtime-guardrails.md),按需读取。
53
+ > 表单类 JSX 控件、筛选栏、表格、成员/附件等组件写法见 [组件指南](references/component-jsx-guide.md),涉及这些复杂组件时读取;未验证的平台组件能力不得编造。
54
54
 
55
55
  ## 官方示例范式内化
56
56
 
@@ -59,7 +59,7 @@ description: 宜搭 native 自定义页面 JSX 开发规范(React 16 宜搭原
59
59
  | 层 | 默认内容 | 生成要求 |
60
60
  | --- | --- | --- |
61
61
  | 状态层 | `loading`、`list/tableData`、`currentPage`、`pageSize`、`totalCount`、`filters/searchFieldJson`、`selectedRowKeys`、`dialogVisible` | 放入 `_customState`,所有失败路径必须恢复 `loading: false` |
62
- | 数据源层 | 表单查询、保存、更新、删除、流程发起、任务列表、连接器动作 | 优先调用已有 `this.dataSourceMap.<name>.load()`;没有数据源且是宜搭内置数据时用 `this.utils.yida.*`;第三方/连接器必须先走 `yida-data-source-connectors` |
62
+ | 数据源层 | 表单查询、保存、更新、删除、流程发起、任务列表、连接器动作 | 只有已存在或本轮已创建设计器数据源时,才允许调用 `this.dataSourceMap.<name>.load()`;`fast_build` 默认不得生成依赖 dataSourceMap 的代码。查询本轮新建的宜搭表单数据时默认用 `this.utils.yida.searchFormDatas(params)`;不需要真实列表时用入口卡片 + 统计占位,不编造 dataSourceMap |
63
63
  | 交互层 | 筛选栏、表格/卡片列表、分页、弹窗、Tab/Collapse、操作按钮 | `renderJsx` 只负责展示和事件分发,业务逻辑拆成 `export function` |
64
64
 
65
65
  默认页面结构按官方高频组件范式转译为 JSX:顶部筛选/操作区、主体表格或卡片列表、分页、详情/编辑弹窗、空态/错误态。不要把数据查询、复杂计算和大段 DOM 混在一个 `renderJsx` 里。
@@ -99,19 +99,57 @@ openyida publish project/pages/src/employee-query.oyd.jsx APP_XXX FORM-QUERY001
99
99
 
100
100
  **关键说明**:
101
101
  - **Step 1** 的 get-schema 输出包含所有字段的 fieldId,在代码中必须使用 `FIELDS` 常量映射这些 ID
102
- - **Step 3** 的页面代码必须遵循 [编码指南](references/coding-guide.md) 和 [运行时护栏](references/runtime-guardrails.md)
102
+ - **Step 3** 的页面代码必须遵循本技能正文;[编码指南](references/coding-guide.md) 和 [运行时护栏](references/runtime-guardrails.md) 在 check-page 报错、复杂交互、`deep_design` 或正文覆盖不了时读取
103
103
  - 优先通过 `openyida generate-page ... --compile` 生成高质量骨架;需要完整交互样板时使用 `todo-mvc`
104
104
  - 页面生成 spec、接口调试 JSON、一次性验证脚本等临时工件必须用结构化文件写入工具创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/` 下;不要在仓库根目录、系统临时目录或 `.cache/` 顶层生成 `page.json`、`data.json` 或脚本文件
105
105
  - `check-page` 支持行级禁用:`// openyida-lint-disable-line <rule>` 或 `// openyida-lint-disable-next-line <rule>`。只在确认该行不会触发宜搭运行时问题时使用。
106
106
 
107
+ ## fast_build 默认页面模板
108
+
109
+ 完整应用 `fast_build` 生成主页面时,默认选择以下轻量闭环之一:
110
+
111
+ 1. 入口型页面:展示表单入口、核心流程说明、少量统计占位和快捷按钮,不执行真实列表查询。
112
+ 2. 内置数据 API 页面:用 `this.utils.yida.searchFormDatas` 查询已创建表单,用 `this.utils.yida.saveFormData` 做快速新增;所有失败路径恢复 `loading: false` 并展示空态。
113
+
114
+ 最小查询形态:
115
+
116
+ ```js
117
+ export function loadVisitorList() {
118
+ var self = this;
119
+ var state = self.getCustomState();
120
+ self.setCustomState({ loading: true });
121
+ return self.utils.yida.searchFormDatas({
122
+ formUuid: FORM_UUIDS.visitor,
123
+ currentPage: state.currentPage || 1,
124
+ pageSize: state.pageSize || 50,
125
+ searchFieldJson: JSON.stringify(state.searchFieldJson || []),
126
+ }).then(function(res) {
127
+ var data = (res && res.data) || (res && res.content && res.content.data) || [];
128
+ var total = (res && res.totalCount) || (res && res.content && res.content.totalCount) || 0;
129
+ self.setCustomState({
130
+ loading: false,
131
+ list: Array.isArray(data) ? data : [],
132
+ totalCount: total,
133
+ });
134
+ self.forceUpdate();
135
+ }).catch(function(error) {
136
+ self.setCustomState({ loading: false, list: [], totalCount: 0 });
137
+ self.utils.toast({ title: error && error.message ? error.message : '数据加载失败', type: 'error' });
138
+ self.forceUpdate();
139
+ });
140
+ }
141
+ ```
142
+
143
+ 不得在 fast_build 里写 `this.dataSourceMap.<name>.load()`,除非本轮已明确创建并绑定该数据源,并且已加载 `yida-data-source-connectors` 完成数据源链路。
144
+
107
145
  ## 开发规范
108
146
 
109
- > 编写页面代码前**必须完整阅读** [编码指南](references/coding-guide.md),包含文件结构模板、状态管理模式、生命周期钩子、全局变量及全部 19 条编码注意事项。
110
- > 涉及输入控件、日期、选择、成员/部门、附件、表格或筛选栏时,同时阅读 [组件指南](references/component-jsx-guide.md)。
147
+ > `fast_build` 默认不读取长 reference,直接遵守本技能正文的核心规则和模板。只有 check-page 报错、复杂交互/复杂组件、`deep_design`、或正文覆盖不了的运行时问题,才读取下方 Available Files。
148
+ > 涉及输入控件、日期、选择、成员/部门、附件、表格或筛选栏时,读取 [组件指南](references/component-jsx-guide.md)。
111
149
 
112
150
  ## 官方示例模板与编码注意事项
113
151
 
114
- 原“官方示例模板”的全局变量表已归并到 [编码指南](references/coding-guide.md) 的“全局变量”;原“编码注意事项”的完整规则和示例仍在 [编码指南](references/coding-guide.md)。入口层只保留导航和执行命令,避免与 reference 重复。
152
+ 原“官方示例模板”的全局变量表已归并到 [编码指南](references/coding-guide.md) 的“全局变量”;原“编码注意事项”的完整规则和示例仍在 [编码指南](references/coding-guide.md)。fast_build 不默认读取这些长 reference,入口层只保留导航和执行命令,避免与 reference 重复。
115
153
 
116
154
  代码编写前,先按需获取模板并完整读取生成文件:
117
155
 
@@ -125,7 +163,7 @@ openyida generate-page todo-mvc --output pages/src/todo-mvc.oyd.jsx --compile #
125
163
  openyida check-page pages/src/home.oyd.jsx --json # 输出机器可读的规范检查结果;.oyd.jsx 会先兼容构建
126
164
  ```
127
165
 
128
- - 完整文件结构、状态管理、全局变量、19 条编码规则见 [编码指南](references/coding-guide.md)
166
+ - 完整文件结构、状态管理、全局变量、19 条编码规则见 [编码指南](references/coding-guide.md),按需读取
129
167
  - `--spec` 文件先用 create_file / Write / file edit tool 创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/page-specs/`
130
168
  - 运行时高风险规则、`check-page` 规则和自动修复边界见 [运行时护栏](references/runtime-guardrails.md)
131
169
  - 输入控件、筛选栏、下拉、表格、附件等组件骨架见 [组件指南](references/component-jsx-guide.md)
@@ -169,22 +207,31 @@ openyida check-page pages/src/home.oyd.jsx --json # 输出机器可读的
169
207
  | `router.push` | 路由跳转 |
170
208
  | `loadScript` | 动态加载脚本 |
171
209
 
172
- > **上表为常用 API 速查,完整 API 列表见 [yida-api.md](../../references/yida-api.md)。使用前必须阅读完整参数文档,禁止猜测参数。**
210
+ > **上表为常用 API 速查,完整 API 列表见 [yida-api.md](../../references/yida-api.md)。复杂参数不确定时读取完整参数文档,禁止猜测参数。**
211
+
212
+ ## Available Files
213
+
214
+ | key | path | when |
215
+ |-----|------|------|
216
+ | `coding-guide` | `references/coding-guide.md` | check-page 报错、复杂交互、状态管理问题、`deep_design` |
217
+ | `runtime-guardrails` | `references/runtime-guardrails.md` | 页面运行时报错、check-page 规则不清、编译兼容边界不清 |
218
+ | `component-jsx-guide` | `references/component-jsx-guide.md` | 输入控件、日期、选择、成员/部门、附件、表格或筛选栏 |
219
+ | `design-system` | `references/design-system.md` | 用户明确要求视觉细化,或已进入 `deep_design` / `yida-page-uiux` 后落地样式 |
173
220
 
174
221
  ## 参考文档
175
222
 
176
223
  | 文档 | 覆盖范围 | 何时阅读 |
177
224
  |------|---------|---------|
178
225
  | **本技能文档** | | |
179
- | `yida-page-uiux` 子技能 | 页面类型 playbook、5 维差异化引擎、去 AI 味黑名单/8 问自检、图标策略 | 实现面向用户的 UI 且要求好看/去 AI 味时,调用 `use_skill("yida-page-uiux", "确定自定义页面视觉方向")` 并产出决策块 |
180
- | [编码指南](references/coding-guide.md) | 文件结构模板、状态管理、生命周期、19 条编码规范 | 编写任何页面代码前必读 |
181
- | [运行时护栏](references/runtime-guardrails.md) | pageSize、loading 恢复、ECharts DOM 时序、setState 约束、check-page 规则映射 | 编写列表、看板、图表或接口页面前必读 |
182
- | [设计规范](references/design-system.md) | 色彩/圆角/字体/间距系统、7 类组件样式模板、8 条反模式 | 实现 UI 样式时必读 |
226
+ | `yida-page-uiux` 子技能 | 页面类型 playbook、5 维差异化引擎、去 AI 味黑名单/8 问自检、图标策略 | 用户明确要求好看/去 AI 味或 `deep_design` 时加载;`fast_build` 不默认加载 |
227
+ | [编码指南](references/coding-guide.md) | 文件结构模板、状态管理、生命周期、19 条编码规范 | check-page 报错、复杂交互、状态管理问题或 `deep_design` 时阅读 |
228
+ | [运行时护栏](references/runtime-guardrails.md) | pageSize、loading 恢复、ECharts DOM 时序、setState 约束、check-page 规则映射 | 页面运行时报错、check-page 规则不清或编译兼容边界不清时阅读 |
229
+ | [设计规范](references/design-system.md) | 色彩/圆角/字体/间距系统、7 类组件样式模板、8 条反模式 | 用户明确要求视觉细化,或已进入 `deep_design` / `yida-page-uiux` 后阅读 |
183
230
  | [素材资源](references/assets-guide.md) | 图片/音乐/Icon 素材库、CDN 安全规范 | 需要引入图片、图标、音效时阅读 |
184
231
  | [官方示例中心 Schema 范式](../../references/official-example-schema-patterns.md) | 示例中心 156 个 capacity 模板的 schema 抽取链路、类型分布、数据源/报表/连接器模式 | 用户要求参考官方示例、蒸馏模板能力、或实现列表/模板中心/数据源驱动页面时阅读 |
185
232
  | **全局共享文档** | | |
186
- | [宜搭 API](../../references/yida-api.md) | 表单/流程/工具 API 完整参数文档 | 调用 `this.utils.yida.*` 前必读 |
187
- | [大模型 API](../../references/model-api.md) | AI 文本生成接口参数 | 调用 `txtFromAI` 前必读 |
233
+ | [宜搭 API](../../references/yida-api.md) | 表单/流程/工具 API 完整参数文档 | 复杂参数不确定、接口返回结构异常或正文速查不够时阅读 |
234
+ | [大模型 API](../../references/model-api.md) | AI 文本生成接口参数 | 调用 `txtFromAI` 且参数不确定时阅读 |
188
235
 
189
236
  ## 注意事项
190
237
 
@@ -46,8 +46,8 @@ description: 获取表单的完整 Schema 结构,用于确认字段 ID(field
46
46
  ## 命令
47
47
 
48
48
  ```bash
49
- openyida get-schema <appType> <formUuid>
50
- openyida get-schema <appType> --all [--output-dir <dir>] [--keyword <text>] [--concurrency N] [--retries N]
49
+ openyida get-schema <appType> <formUuid> [--summary-json|--field-map-json]
50
+ openyida get-schema <appType> --all [--summary-json] [--output-dir <dir>] [--keyword <text>] [--concurrency N] [--retries N]
51
51
  ```
52
52
 
53
53
  | 参数 | 必填 | 说明 |
@@ -59,13 +59,16 @@ openyida get-schema <appType> --all [--output-dir <dir>] [--keyword <text>] [--c
59
59
  | `--keyword <text>` | 否 | 仅批量导出名称、UUID、类型或路径匹配关键词的表单 |
60
60
  | `--concurrency N` | 否 | 批量并发数,默认 3,范围 1-10 |
61
61
  | `--retries N` | 否 | 单个 Schema 失败后的重试次数,默认 1,范围 0-5 |
62
+ | `--summary-json` / `--field-map-json` | 否 | 只输出字段摘要 JSON,不把完整 Schema 放入 stdout;`--field-map-json` 是语义别名 |
62
63
 
63
64
  ### 单表模式
64
65
 
65
66
  ```bash
66
- openyida get-schema APP_XXX FORM-XXX
67
+ openyida get-schema APP_XXX FORM-XXX --summary-json
67
68
  ```
68
69
 
70
+ 页面开发默认使用 compact 输出,读取 `fields[].label`、`fields[].fieldId`、`fields[].reportFieldCode` 和 `fields[].options` 即可。只有需要组件完整 props、布局结构、字段数据源配置或排障时,才执行不带 `--summary-json` 的完整 Schema 输出。
71
+
69
72
  如需复用输出,使用 agent 的结构化文件写入工具创建:
70
73
 
71
74
  ```text
@@ -76,7 +79,7 @@ openyida get-schema APP_XXX FORM-XXX
76
79
  ### 批量模式
77
80
 
78
81
  ```bash
79
- openyida get-schema APP_XXX --all --output-dir .cache/openyida/customer/schemas
82
+ openyida get-schema APP_XXX --all --summary-json --output-dir .cache/openyida/customer/schemas
80
83
  openyida get-schema APP_XXX --all --keyword 客户 --concurrency 5 --retries 2
81
84
  ```
82
85
 
@@ -88,9 +91,30 @@ openyida get-schema APP_XXX --all --keyword 客户 --concurrency 5 --retries 2
88
91
 
89
92
  ## 输出
90
93
 
91
- 单表模式将完整的 Schema JSON 输出到 stdout,包含 `pages`、`componentsMap` 等字段结构。
94
+ 单表模式默认将完整的 Schema JSON 输出到 stdout,包含 `pages`、`componentsMap` 等字段结构;页面开发优先追加 `--summary-json` 或 `--field-map-json`,只输出字段映射:
95
+
96
+ ```json
97
+ {
98
+ "success": true,
99
+ "appType": "APP_XXX",
100
+ "formUuid": "FORM-XXX",
101
+ "fieldCount": 2,
102
+ "fields": [
103
+ {
104
+ "label": "访客姓名",
105
+ "componentName": "TextField",
106
+ "fieldId": "textField_xxx",
107
+ "alias": "visitorName",
108
+ "reportFieldCode": "textField_xxx",
109
+ "options": [],
110
+ "optionCount": 0,
111
+ "optionsTruncated": false
112
+ }
113
+ ]
114
+ }
115
+ ```
92
116
 
93
- 批量模式将汇总 JSON 输出到 stdout;指定 `--output-dir` 时,完整 Schema 写入文件,stdout 中的 `forms[].schemaFile` 指向对应文件。
117
+ 批量模式将汇总 JSON 输出到 stdout;指定 `--output-dir` 时,完整 Schema 写入文件,stdout 中的 `forms[].schemaFile` 指向对应文件。加 `--summary-json` 时,stdout 和 `index.json` 都只保留字段摘要与 schemaFile 指针,不内联完整 Schema。
94
118
 
95
119
  > 编码前可用此命令确认表单中各字段的 `fieldId`。
96
120
 
@@ -99,8 +123,8 @@ openyida get-schema APP_XXX --all --keyword 客户 --concurrency 5 --retries 2
99
123
  | 异常场景 | 处理方式 |
100
124
  |---------|----------|
101
125
  | 命令返回失败 | 确认 appType 和 formUuid 正确,检查登录态 |
102
- | 输出被终端截断 | 重新执行后将 stdout 通过结构化文件写入工具保存到 `<projectRoot>/.cache/openyida/<项目名或任务名>/<表单名>-schema.json`;不要使用 shell 重定向 |
103
- | 需要多个表单字段 ID | 使用批量模式:`openyida get-schema <appType> --all --output-dir .cache/openyida/<项目名或任务名>/schemas` |
126
+ | 输出被终端截断 | 优先改用 `--summary-json`;确需完整 Schema 时,再将 stdout 通过结构化文件写入工具保存到 `<projectRoot>/.cache/openyida/<项目名或任务名>/<表单名>-schema.json`;不要使用 shell 重定向 |
127
+ | 需要多个表单字段 ID | 使用批量 compact 模式:`openyida get-schema <appType> --all --summary-json --output-dir .cache/openyida/<项目名或任务名>/schemas`,默认只读 `index.json` 字段摘要 |
104
128
  | 批量部分失败 | 查看 stdout 的 `failedCount` 和 `forms[].errorMsg`,必要时提高 `--retries` 或缩小 `--keyword` 范围 |
105
129
  | 找不到目标字段 | 检查字段是否已创建,字段 ID 格式如 `textField_xxxxxxxx`,不能手写猜测 |
106
130
  | Schema 输出为空 | 表单可能没有字段,先用 `yida-create-form-page` 创建字段 |
@@ -21,6 +21,7 @@ description: 将 JSX 源码编译发布到宜搭自定义页面。Babel 转 ES5
21
21
  - 发布前确认 `openyida env` 检测通过,登录态有效
22
22
  - corpId 不匹配时,必须询问用户是否切换组织,不得强行发布
23
23
  - 重新发布已有自定义页面时,`openyida publish` 会自动读取目标页面现有 Schema 并合并页面级 `dataSource`;不要靠 Agent 口头承诺“保留数据源”,必须使用新版 CLI 的默认保护能力
24
+ - 如果源码包含 `this.dataSourceMap.`,而发布输出包含 `No custom page data sources to preserve`,本次发布不能视为完成;说明源码依赖设计器数据源但目标页没有可保留数据源。必须改为 `this.utils.yida.*` / 入口型页面后重新 check、compile、publish,或先通过 `yida-data-source-connectors` 创建并绑定数据源后重新发布
24
25
  - **本技能不读写 memory**:发布操作通过 CLI 命令写入宜搭平台,不依赖跨会话的 memory 状态
25
26
 
26
27
  ## 适用场景
@@ -75,6 +76,11 @@ openyida list-forms <appType> --keyword <页面名>
75
76
 
76
77
  如果读取旧 Schema 失败,发布会停止,避免在无法确认的情况下把已有数据源清空。遇到用户明确要求“保留原有数据源”时,不需要手写额外合并脚本,直接运行新版 `openyida publish` 即可。
77
78
 
79
+ 发布后判定:
80
+
81
+ - 源码不含 `this.dataSourceMap.`,发布输出 `No custom page data sources to preserve` 是正常情况,说明没有设计器数据源需要保留。
82
+ - 源码含 `this.dataSourceMap.`,发布输出 `No custom page data sources to preserve` 不是完成态。不要把 API 发布成功等同于页面可用,必须补数据源或改源码后重新发布。
83
+
78
84
  ## OpenYida 兼容编译
79
85
 
80
86
  发布脚本在 `publish` 前会按以下顺序处理源码:
@@ -34,7 +34,7 @@
34
34
  "name": "yida-app",
35
35
  "path": "skills/yida-app/SKILL.md",
36
36
  "display_name": "宜搭完整应用开发",
37
- "description": "从零到一搭建完整宜搭应用的流程编排技能。默认 fast_build 只创建应用、必要表单、主页面、发布并输出链接;导航、示例数据和深度设计按需后置。",
37
+ "description": "从零到一搭建完整宜搭应用的流程编排技能。默认 fast_build 只创建应用、必要表单、主页面、发布并输出链接;不默认使用未绑定 dataSourceMap,导航、示例数据和深度设计按需后置。",
38
38
  "category": "yida/app",
39
39
  "tags": ["宜搭", "完整应用", "搭建", "管理系统", "访客系统"],
40
40
  "aliases": ["完整应用", "应用搭建", "管理系统搭建"]
@@ -70,7 +70,7 @@
70
70
  "name": "yida-canvas-custom-page",
71
71
  "path": "skills/yida-canvas-custom-page/SKILL.md",
72
72
  "display_name": "Code Canvas 自定义页面",
73
- "description": "宜搭 Code Canvas / 代码画布自定义页面开发规范,覆盖现代 React 交互、hooks 状态、可视化、AI 生成和开放 API 数据读取页面。",
73
+ "description": "宜搭 Code Canvas / 代码画布自定义页面开发规范。Canvas 尚未全量,仅在用户明确要求、已有页面为 YidaCodeCanvas,或已确认组织/页面支持时使用。",
74
74
  "category": "yida/page",
75
75
  "tags": ["Code Canvas", "React18", "runtimeCode", "自定义页面"],
76
76
  "aliases": ["代码画布", "Canvas 页面"]
@@ -169,9 +169,9 @@
169
169
  "name": "yida-custom-page",
170
170
  "path": "skills/yida-custom-page/SKILL.md",
171
171
  "display_name": "Native 自定义页面 JSX 开发",
172
- "description": "宜搭自定义页面 React 16 / JSX 开发规范、运行时限制、UI 与数据源调用约束。",
172
+ "description": "宜搭 native 自定义页面 React 16 / JSX 开发规范,默认兼容链路;fast_build 默认使用 this.utils.yida.* 或入口型页面,只有已绑定设计器数据源时才用 dataSourceMap。",
173
173
  "category": "yida/page",
174
- "tags": ["JSX", "自定义页面", "React 16", "页面代码"],
174
+ "tags": ["JSX", "自定义页面", "React 16", "页面代码", "fast_build"],
175
175
  "aliases": ["页面开发", "native 页面"]
176
176
  },
177
177
  {
@@ -277,7 +277,7 @@
277
277
  "name": "yida-get-schema",
278
278
  "path": "skills/yida-get-schema/SKILL.md",
279
279
  "display_name": "获取表单 Schema",
280
- "description": "获取表单完整 Schema 结构,用于确认 fieldId 和组件配置。",
280
+ "description": "获取表单 Schema compact 字段映射;页面开发优先用 --summary-json / --field-map-json 确认 fieldId",
281
281
  "category": "yida/schema",
282
282
  "tags": ["Schema", "fieldId", "formUuid", "字段定义"],
283
283
  "aliases": ["查字段ID"]
@@ -394,7 +394,7 @@
394
394
  "name": "yida-publish-page",
395
395
  "path": "skills/yida-publish-page/SKILL.md",
396
396
  "display_name": "发布自定义页面",
397
- "description": "将自定义页面源码编译为宜搭可运行 Schema,并发布到目标 formUuid。",
397
+ "description": "将自定义页面源码编译为宜搭可运行 Schema 并发布;源码依赖 dataSourceMap 但发布无数据源时不能视为完成。",
398
398
  "category": "yida/page",
399
399
  "tags": ["发布", "publish", "compile", "check-page"],
400
400
  "aliases": ["页面发布"]