宜搭完整应用开发技能,描述从零到一搭建一个完整宜搭应用的全流程,包括创建应用、创建页面、需求分析、编写代码、创建表单、发布部署。不适用于:只需修改单个子步骤(如只改表单字段、只发布页面)时,应直接调用对应子技能。
本文档是流程编排层,描述各子技能的调用时机、决策逻辑和数据流转。 各子技能的详细参数和示例请查阅对应的子技能文档(见主
SKILL.md索引表)。
openyida env 环境检测直接开始开发openyida env 确认环境和登录态.cache/<项目名>-schema.jsonprd/<项目名>.md.cache/<项目名>-schema.json 持久化,不依赖跨会话的 memory 状态用户说"帮我搭建一个完整应用"、"从零开始创建系统"、"一句话生成应用"时使用。 本技能是,负责调度各子技能按正确顺序执行。
正向触发(用户意图是从零搭建完整应用):
不适用场景(不要触发,改用对应子技能):
yida-create-appyida-create-form-pageyida-publish-pageyida-process-rule 或 yida-create-processyida-data-management[Step 1] 创建应用 → openyida create-app → 获得 appType
↓
[Step 2] 需求分析 → 写入 prd/<项目名>.md
↓
[Step 3] 创建自定义页面 → openyida create-page → 获得 formUuid(自定义页面)
↓
[Step 4](按需)创建/更新表单 → openyida create-form → 获得 formUuid(表单)
↓
[Step 5](按需,需求含「审批」「流程」「申请」「审核」「工单」等关键词时必须执行)
配置流程 → 读取 skills/yida-create-process/SKILL.md → openyida create-process / configure-process
↓
[Step 6] 编写自定义页面代码 → yida-custom-page 规范 → pages/src/<项目名>.js
↓ (列表/表格类页面:参考 yida-density 技能选择合适的信息密度)
↓
[Step 7] 发布页面 → openyida publish <源文件路径> <appType> <formUuid>
↓
[Step 8] 输出访问链接,用系统浏览器打开
skills/yida-custom-page/SKILL.mdskills/yida-create-form-page/SKILL.md为避免生成错误代码,必须使用各技能的模板文件:
| 技能 | 模板文件 | 用途 |
|---|---|---|
| yida-custom-page | custom-page-template.js | 自定义页面完整模板 |
| yida-data-management | form-field-template.js | 表单字段定义和数据插入 |
| yida-create-app | ipd-app-template.js | 完整应用创建示例 |
代码生成前必须:
用户需求
│
├── 纯展示 / 静态内容 → 跳过 Step 5(无需创建表单)
│
└── 需要收集 / 存储数据 → Step 5 创建表单
表单创建后
│
├── 无审批需求 → 直接进入 Step 6 编写代码
│
└── 有审批需求 → 调用 yida-create-process 配置流程后再编写代码
应用功能需求
│
├── 标准统计报表 → 调用 yida-report 创建原生报表
│
└── 高级 ECharts 大屏 → 先 yida-report 创建数据源,再 yida-chart 创建可视化页面
读取 prd 文档中的 corpId vs 读取 .cache/cookies.json 中的 corpId
│
├── 一致 → 继续创建页面
│
└── 不一致
│
├── 用户选择"重新登录" → openyida logout → 重新扫码登录到正确组织
│
└── 用户选择"新建应用" → 回到 Step 1(会自动覆盖 prd 配置)
调用 yida-create-app 技能,创建宜搭应用并获取 appType:
openyida create-app "<应用名称>" "[描述]"
输出:appType(如 APP_XXXXXX),自动写入 prd 文档的应用配置表。
深度分析用户需求,识别核心功能和隐含期望,将结果写入 prd/<项目名>.md。
prd 文档结构:
# <项目名> 需求文档
## 应用配置
| 配置项 | 值 |
|--------|-----|
| appType | APP_XXXXXX |
| corpId | dingXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| baseUrl | https://www.aliwork.com |
## 功能需求
(描述页面的核心功能、交互逻辑、业务规则)
## 页面与表单配置
### 用户信息表(表单页面)
| 字段名称 | 字段类型 | 说明 |
|---------|---------|------|
| 姓名 | TextField / 单行文本 | 必填 |
| 部门 | SelectField / 下拉单选 | 必填,选项:技术部、产品部、运营部 |
| 备注 | TextareaField / 多行文本 | 选填 |
### 首页(自定义页面)
展示用户信息列表,支持搜索和分页。
## UI 设计
(描述页面风格、布局、响应式要求)
⚠️ 重要约定:
- prd 文档只记录业务语义信息(字段名称、类型、说明),不记录
formUuid、fieldId等 Schema ID- Schema ID 统一写入
.cache/<项目名>-schema.json,供编码时读取- 每次创建或修改表单/页面后,必须同步更新 prd 文档
确认 corpId 一致后,调用 yida-create-page 技能:
openyida create-page <appType> "<页面名称>"
输出:formUuid(如 FORM-XXXXXX),写入 .cache/<项目名>-schema.json。
当页面需要收集/存储数据时,调用 yida-create-form-page 技能。
.cache/xxx-fields.json[
{ "type": "TextField", "label": "词语", "required": true },
{ "type": "TextField", "label": "图片地址" },
{ "type": "TextField", "label": "用户ID" },
{ "type": "TextField", "label": "用户名" }
]
openyida create-form create <appType> "<表单名称>" .cache/xxx-fields.json
输出:formUuid 和各字段的 fieldId(如 textField_xxxxxxxx)。
.cache/<项目名>-schema.json{
"appType": "APP_XXXXXX",
"pages": {
"图片生成表": {
"formUuid": "FORM-XXXXXX",
"fields": {
"词语": "textField_xxxxxxxx",
"图片地址": "textField_xxxxxxxx",
"用户ID": "textField_xxxxxxxx",
"用户名": "textField_xxxxxxxx"
}
},
"首页": {
"formUuid": "FORM-XXXXXX"
}
}
}
当需求含「审批」「流程」「申请」「审核」「工单」等关键词时必须执行。
openyida create-process <appType> --formUuid <formUuid> <流程定义文件>
编写前必须:
skills/yida-custom-page/SKILL.mdopenyida sample yida-custom-page custom-page-template 获取模板,再用 read_file 读取 .cache/samples/custom-page-template.js.cache/<项目名>-schema.json 获取所有 ID代码文件路径:pages/src/<项目名>.js
核心规范:
export function 导出函数(didMount、didUnmount、renderJsx 三个必须导出)_customState + setCustomStatedefaultValue 而非 value)style 对象定义yida-density 技能选择合适的信息密度调用 yida-publish-page 技能,将源码编译并部署到宜搭平台:
openyida publish <源文件路径> <appType> <formUuid>
发布流程:Babel 编译 JSX → ES5 → UglifyJS 压缩 → 调用 saveFormSchema 保存 Schema
访问地址格式参考文档末尾 「宜搭应用 URL 规则」 章节。
各步骤产出的关键数据,是后续步骤的输入:
| 步骤 | 产出 | 用途 |
|---|---|---|
| create-app | appType | 所有后续命令的必填参数 |
| create-page | pageId (即 formUuid) | 发布自定义页面时指定目标页面 |
| create-form | formUuid + fieldId | 自定义页面代码中调用表单 API |
| get-schema | fieldId 列表 | 公式字段、权限配置、数据查询时引用 |
存储约定:
prd/<项目名>.mdappType、formUuid、fieldId)→ .cache/<项目名>-schema.json1. yida-create-app → 创建应用,获取 appType
2. 需求分析 → 写入 prd/birthday-game.md
3. yida-create-page → 创建自定义页面,获取 pageId
4. yida-create-form-page → 创建祝福记录表单,获取 formUuid + fieldId
5. yida-custom-page → 编写游戏页面代码
6. yida-publish-page → 发布,输出访问链接
1. yida-create-app → 创建 CRM 应用
2. 需求分析 → 写入 prd/crm.md
3. yida-create-form-page → 创建客户信息表、跟进记录表
4. yida-create-process → 配置客户审批流程
5. yida-report → 创建销售数据报表
6. yida-create-page → 创建 CRM 首页
7. yida-custom-page → 编写首页代码(集成表单 + 报表)
8. yida-publish-page → 发布
1. yida-create-app → 创建应用
2. yida-create-form-page → 创建数据录入表单
3. yida-report → 创建原生报表(作为 ECharts 数据源)
4. yida-chart → 创建 ECharts 自定义页面(引用原生报表数据)
5. yida-publish-page → 发布
| 页面类型 | URL 格式 |
|---|---|
| 应用首页 | {base_url}/{appType}/workbench |
| 表单提交页 | {base_url}/{appType}/submission/{formUuid} |
| 自定义页面 | {base_url}/{appType}/custom/{formUuid} |
| 自定义页面(隐藏导航) | {base_url}/{appType}/custom/{formUuid}?isRenderNav=false |
| 表单详情页 | {base_url}/{appType}/formDetail/{formUuid}?formInstId={formInstId} |
| 表单详情页(编辑模式) | {base_url}/{appType}/formDetail/{formUuid}?formInstId={formInstId}&mode=edit |
💡 所有地址拼接
&corpid={corpId}后可自动切换到对应组织,建议首页加上。
⚠️ 删除应用不可逆,将永久清除该应用下的所有表单、页面、数据记录,无法恢复。
执行前必须完成以下确认流程,缺一不可:
⚠️ 即将删除应用
应用名称:<appName>
应用 ID:<appType>
影响范围:该应用下的所有表单、页面、数据将被永久删除,不可恢复。
请回复「确认删除」继续,或回复「取消」中止操作。
若用户未明确确认,或回复模糊(如"好的"、"嗯"、"可以"),必须再次询问确认,不得执行删除。
| 异常场景 | 处理方式 |
|---|---|
| 用户要求删除应用 | 必须先展示操作摘要并等待用户明确确认,禁止直接执行(详见上方「删除应用」章节) |
| 发布时提示登录失效 | 执行 openyida logout,再重新执行 openyida publish(会自动触发扫码登录) |
| 一直登录失败 | 不要自主尝试其他登录方案,直接提示登录失败,请联系开发同学 @天晟 |
| corpId 不一致(发布到错误组织) | 执行决策 4 流程:询问用户选择"重新登录"或"新建应用",不得强行发布 |
| 表单字段 ID 不知道 | 使用 yida-get-schema 技能获取表单 Schema,从中读取各字段的 fieldId |
| 页面代码更新后需要重新发布 | 直接重新执行 yida-publish-page 命令,会覆盖已有 Schema |
| Babel 编译失败 | 检查 JSX 语法,确认未使用 React Hooks(useState/useEffect 等),参考 yida-custom-page 规范 |
| 创建应用/表单返回错误 | 检查 appType 是否有效,确认登录态正常(openyida env),不要编造任何 ID |