openyida 2026.4.15 → 2026.4.20

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.
package/lib/auth/login.js CHANGED
@@ -243,7 +243,7 @@ const { URL } = require('url');
243
243
  const page = await context.newPage();
244
244
  await page.goto(${JSON.stringify(loginUrl)}, { timeout: 120000 });
245
245
 
246
- warn(' Waiting for login (up to 10 minutes)...');
246
+ console.error(' Waiting for login (up to 10 minutes)...');
247
247
  // 轮询 tianshu_csrf_token cookie 出现来判断登录成功
248
248
  // 兼容专属域名(your-company.aliwork.com)登录后跳转路径不固定的情况
249
249
  let loginSuccess = false;
@@ -257,12 +257,12 @@ const { URL } = require('url');
257
257
  }
258
258
  }
259
259
  if (!loginSuccess) {
260
- warn(' ⏰ Login timed out (10 minutes). Please try again.');
260
+ console.error(' ⏰ Login timed out (10 minutes). Please try again.');
261
261
  await browser.close();
262
262
  process.exit(1);
263
263
  }
264
264
  await page.waitForLoadState('networkidle').catch(() => {});
265
- warn(' ✅ Login successful!');
265
+ console.error(' ✅ Login successful!');
266
266
 
267
267
  const currentUrl = page.url();
268
268
  const cookies = await context.cookies();
@@ -22,6 +22,7 @@ const readline = require('readline');
22
22
  const { extractInfoFromCookies } = require('../core/utils');
23
23
  const { saveCookieCache } = require('./login');
24
24
  const { t } = require('../core/i18n');
25
+ const { warn } = require('../core/chalk');
25
26
 
26
27
  const { resolveLoginUrl, resolveEndpoint } = require('../core/env-manager');
27
28
  const DEFAULT_BASE_URL = 'https://www.aliwork.com';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openyida",
3
- "version": "2026.04.15",
3
+ "version": "2026.04.20",
4
4
  "description": "OpenYida CLI - 宜搭低代码 AI 开发工具(安装即用,零配置)",
5
5
  "bin": {
6
6
  "openyida": "./bin/yida.js",
@@ -1,234 +1,298 @@
1
1
  ---
2
- name: yida-skills
3
- description: "宜搭低代码平台 AI 开发助手。适用于一切业务数字化需求:创建登记表/申请表/信息收集表、设计审批流程、搭建数据报表/数据大屏、开发自定义页面、管理表单数据、闪记转PRD/会议纪要提取需求/需求文档生成、导出对话记录、编写公式/计算字段、配置连接器/外部API接入、设置权限/公开分享、集成自动化。当用户想要创建任何形式的表单、系统、页面、流程、报表,或提到员工管理、客户管理、费用报销、考勤打卡、项目管理等业务场景时触发。也适用于「宜搭」「yida」「低代码」「创建应用」「发布页面」「搭建系统」「PRD」「闪记」「会议记录」「对话导出」「公式」「连接器」「权限」「分享」「集成自动化」等关键词场景。"
2
+ name: Yida
3
+ description: >
4
+ 宜搭 AI 应用开发总入口技能。通过有 AI Coding 能力的智能体(悟空/Claude/Open Code 等)+ 宜搭低代码平台,实现一句话生成完整应用。
5
+ 包含应用创建、表单设计、自定义页面开发、页面发布、登录态管理等完整开发流程。
6
+ 当用户提到"宜搭"、"yida"、"低代码"、"创建应用"、"创建表单"、"发布页面"、"搭建"、"系统"、等关键词时,使用此技能。
7
+ license: MIT
8
+ compatibility:
9
+ - opencode
10
+ - claude-code
11
+ - qoder
12
+ - wukong
4
13
  metadata:
5
- version: 2026.04.15
14
+ audience: developers
15
+ workflow: yida-development
16
+ version: 3.0.0
17
+ tags:
18
+ - yida
19
+ - low-code
20
+ - app
21
+ - form
22
+ - custom-page
6
23
  ---
7
24
 
8
25
  # 宜搭 AI 应用开发指南
9
26
 
10
- 通过 `openyida` CLI 驱动宜搭低代码平台,一句话生成完整应用。
27
+ ## 概述
11
28
 
12
- ## 严格禁止 (NEVER DO)
29
+ 本技能通过有 AI Coding 能力的智能体(悟空/Claude/Open Code 等) + 宜搭低代码平台,实现一句话生成完整应用。涵盖从应用创建、表单设计、自定义页面开发到页面发布的完整链路。
13
30
 
14
- - 不要编造 appType、formUuid、fieldId 等标识符,必须从命令返回或 Schema 中提取
15
- - 不要在未读取子技能 SKILL.md 的情况下执行操作,参数格式必须以文档为准
16
- - 不要在 corpId 不一致时强行创建应用,必须先询问用户
17
- - 不要将临时文件写在项目根目录,统一写入 `.cache/` 文件夹
31
+ 所有操作通过 **`openyida`** 命令行工具统一执行,无需关心脚本路径或运行环境差异。
18
32
 
19
- ## 严格要求 (MUST DO)
20
-
21
- - 执行任何操作前,必须先运行 `openyida env` 检测环境和登录态
22
- - 每个子技能执行前,必须完整读取其 SKILL.md,不得凭记忆猜测参数
23
- - 业务语义信息写入 `prd/<项目名>.md`,Schema ID 写入 `.cache/<项目名>-schema.json`
24
- - 超过 100 行的大文件写入,使用 `large-file-write` 技能,禁止用 heredoc
25
- - 在悟空环境中(`AGENT_WORK_ROOT` 包含 `.real`),执行任何 npm/node/npx 命令前,必须先设置 `export PATH="$HOME/.real/.bin/node/bin:$PATH"`,确保使用悟空自带的 node 环境
33
+ **登录态说明**:所有命令自动读取 `.cache/cookies.json`,首次运行或 Cookie 失效时自动触发登录流程,无需手动执行登录命令。
26
34
 
27
35
  ---
28
36
 
29
- ## ⚡ 首要步骤(每次必须先执行)
37
+ ## 环境依赖
30
38
 
31
- **macOS / Linux:**
39
+ | 依赖 | 版本 | 用途 |
40
+ |------|------|------|
41
+ | Node.js | ≥ 16 | 运行 openyida |
32
42
 
33
43
  ```bash
34
- # 0. 悟空环境:确保使用悟空自带的 node/npm(避免权限问题)
35
- if [ -n "$AGENT_WORK_ROOT" ] && echo "$AGENT_WORK_ROOT" | grep -q '.real'; then
36
- export PATH="$HOME/.real/.bin/node/bin:$PATH"
37
- fi
44
+ # 安装 openyida(首次使用前执行)
45
+ npm install -g openyida
46
+
47
+ # 更新 openyida 到最新版本
48
+ npm install -g openyida@latest
49
+ ```
38
50
 
39
- # 1. 确保 openyida 已安装(未安装则自动安装,已安装则跳过)
40
- openyida -v 2>/dev/null || npm install -g openyida@latest
51
+ ---
52
+
53
+ ## 更新 openyida
41
54
 
42
- # 2. 一键诊断并自动修复:环境检测 + project 目录初始化
43
- openyida doctor --fix
55
+ **手动更新**:
56
+ ```bash
57
+ npm install -g openyida@latest
44
58
  ```
45
59
 
46
- **Windows (PowerShell):**
60
+ **让 AI 帮你更新**:
47
61
 
48
- ```powershell
49
- # 0. 悟空环境:确保使用悟空自带的 node/npm(避免权限问题)
50
- if ($env:AGENT_WORK_ROOT -and $env:AGENT_WORK_ROOT -match '\.real') {
51
- $env:PATH = "$env:USERPROFILE\.real\.bin\node\bin;$env:PATH"
52
- }
62
+ 执行 `openyida` 命令出现报错时,直接告诉 AI:
53
63
 
54
- # 1. 确保 openyida 已安装(未安装则自动安装,已安装则跳过)
55
- try { openyida -v } catch { npm install -g openyida@latest }
64
+ > "openyida 命令出错了,请帮我更新 openyida"
56
65
 
57
- # 2. 一键诊断并自动修复:环境检测 + project 目录初始化
58
- openyida doctor --fix
66
+ AI 会自动执行以下命令完成更新:
67
+ ```bash
68
+ npm install -g openyida@latest
59
69
  ```
60
70
 
71
+ 更新完成后重新执行出错的命令即可。
72
+
61
73
  ---
62
74
 
63
- ## 意图判断决策树
64
-
65
- 根据用户描述,快速定位应使用的子技能:
66
-
67
- 用户提到"查询应用列表/我的应用/有哪些应用" → `openyida yida-app-list`(直接执行,无需子技能)
68
- 用户提到"创建应用/新建系统/搭建平台" → 先读 `yida-app` 了解全流程,再用 `yida-create-app`
69
- 用户提到"创建表单/新增字段/更新表单" → `yida-create-form-page`
70
- 用户提到"自定义页面/JSX/React/可视化大屏" → `yida-custom-page` + `yida-publish-page`
71
- 用户提到"审批流程/流程表单/审批节点" → `yida-create-process` 或 `yida-process-rule`
72
- 用户提到"流程预览/流程图/审批进度/流程可视化" → `openyida process preview`(直接执行)
73
- 用户提到"数据查询/数据管理/表单实例" → `yida-data-management`
74
- 用户提到"报表/图表/ECharts/数据大屏" → `yida-report`(原生报表)或 `yida-chart`(ECharts 高级)
75
- 用户提到"连接器/外部接口/HTTP 接入" → `yida-connector`
76
- 用户提到"权限/字段权限/数据权限" → `yida-form-permission`
77
- 用户提到"公开访问/分享链接/外部访问" → `yida-page-config`
78
- 用户提到"集成/自动化/触发通知" → `yida-integration`
79
- 用户提到"登录/Cookie 失效/切换账号" → `yida-login` 或 `yida-logout`
80
- 用户提到"公式/计算字段/函数" → `yida-formula`
81
- 用户提到"闪记/会议纪要/PRD" → `yida-flash-note-to-prd`
82
- 用户提到"Sequence/主键冲突/自增ID错误" → `yida-db-seq-fix`
83
-
84
- **关键区分**:
85
- - `yida-report`(宜搭原生报表页面,16 种内置图表)vs `yida-chart`(ECharts 自定义大屏,依赖 yida-report 作数据源)
86
- - `yida-create-process`(从零创建流程表单一体化)vs `yida-process-rule`(为已有表单配置审批规则)
87
- - `yida-create-form-page`(创建/更新表单结构)vs `yida-data-management`(操作表单中的数据记录)
88
-
89
- > 易混淆场景详见各子技能 SKILL.md 的"注意事项"章节。
75
+ ## ⚡ 首要步骤:检测运行环境(必须先执行)
90
76
 
91
- ---
77
+ **在执行任何宜搭操作前,必须先运行环境检测命令**,确认当前 AI 工具环境和登录态:
92
78
 
93
- ## 危险操作确认
79
+ ```bash
80
+ openyida env
81
+ ```
94
82
 
95
- 以下操作不可逆,执行前**必须向用户展示操作摘要并获得明确同意**:
83
+ **输出解读**:
96
84
 
97
- | 操作 | 说明 |
85
+ | 字段 | 说明 |
98
86
  |------|------|
99
- | 删除应用 | 含全部表单、页面、数据,不可恢复 |
100
- | 覆盖表单 Schema | 可能导致已有数据字段丢失 |
101
- | 批量删除数据记录 | 数据不可恢复 |
102
- | 切换组织(logout/login) | 会清除当前登录态 |
87
+ | AI 工具检测 | 显示当前活跃的 AI 工具(悟空/OpenCode/Aone Copilot 等) |
88
+ | 当前生效环境 | 显示项目根目录路径 |
89
+ | 登录态检测 | 显示是否已登录、域名、组织 ID |
103
90
 
104
- 确认流程:
105
- 1. 展示操作摘要(操作类型 + 目标对象 + 影响范围)
106
- 2. 等待用户明确回复确认
107
- 3. 执行操作
91
+ > **若显示"未登录",自动执行 `openyida login`,无需手动操作。**。
108
92
 
109
93
  ---
110
94
 
111
- ## 错误处理
95
+ ## 🔧 初始化 project 工作目录
96
+
97
+ **如果当前工程目录下没有 `project/` 目录**(例如切换了 AI 工具、或在新工程中首次使用),需要手动执行初始化:
98
+
99
+ ```bash
100
+ openyida copy
101
+ ```
102
+
103
+ ### 复制目标说明
104
+
105
+ | AI 工具 | project 目录位置 | 说明 |
106
+ |---------|-----------------|------|
107
+ | **悟空(Wukong)** | `~/.real/workspace/project` | 悟空有专属 workspace,与工程目录无关 |
108
+ | **其他工具**(Aone Copilot、Cursor、Claude Code、OpenCode 等) | `<当前工程目录>/project` | 以项目为单位,需在工程根目录下执行 |
109
+
110
+ ### AI 执行规则
112
111
 
113
- 1. 登录失效(401/Cookie 过期)→ 执行 `openyida login` 重新登录
114
- 2. corpId 不匹配 → 询问用户是否切换组织,执行 `openyida logout && openyida login`
115
- 3. 命令执行失败 检查参数格式是否与子技能 SKILL.md 一致,不要猜测参数
116
- 4. 发布失败 → 确认 `openyida env` 环境检测通过,检查 Babel 编译产物
117
- 5. **技能检索失败(search_skills 未返回预期技能)→ 不得直接输出执行结果或编造执行过程**。必须先查阅上方「意图判断决策树」手动定位子技能路径,再通过 `use_skill` 激活对应技能后执行。若仍无法确定技能,停止执行并向用户说明,询问补充信息。
112
+ **在执行任何宜搭操作前,先检查 project 目录是否存在**:
113
+
114
+ - **悟空**:检查 `~/.real/workspace/project` 是否存在
115
+ - **其他工具**:检查当前工程目录下的 `project/` 是否存在
116
+
117
+ 若不存在,执行初始化:
118
+ ```bash
119
+ openyida copy
120
+ ```
121
+
122
+ > ⚠️ 对于非悟空工具,必须先 `cd` 到工程根目录再执行 `openyida copy`。
118
123
 
119
124
  ---
120
125
 
121
- ## 子技能索引
126
+ ## 何时使用
122
127
 
123
- > 执行前必须完整读取对应 SKILL.md,不得凭记忆猜测参数格式。
128
+ 当用户提出以下需求时,使用本技能并按照完整开发流程执行:
129
+ - 创建宜搭应用、表单、自定义页面
130
+ - 发布或更新宜搭页面
131
+ - 配置页面公开访问/组织内分享
132
+ - 查询表单 Schema 或字段 ID
133
+ - 管理宜搭登录态(登录/退出)
124
134
 
125
- ### 应用生命周期
135
+ ---
126
136
 
127
- | 技能 | 路径 | 说明 |
128
- |------|------|------|
129
- | **yida-app** | [`skills/yida-app/SKILL.md`](skills/yida-app/SKILL.md) | 完整应用开发全流程编排(从零到一,创建应用前必读) |
130
- | **app-list** | `openyida yida-app-list [--size N]` | 查询我的应用列表,返回 appName / appType / systemLink(直接执行,无需子技能) |
131
- | **sample** | `openyida sample <skill> <name>` | 输出代码示例/模板到 `.cache/samples/<name>.js`,再用 `read_file` 读取(`--list` 查看所有可用示例) |
132
- | **yida-create-app** | [`skills/yida-create-app/SKILL.md`](skills/yida-create-app/SKILL.md) | 创建应用,获取 appType |
133
- | **yida-create-page** | [`skills/yida-create-page/SKILL.md`](skills/yida-create-page/SKILL.md) | 创建自定义展示页面,获取 formUuid |
134
- | **yida-publish-page** | [`skills/yida-publish-page/SKILL.md`](skills/yida-publish-page/SKILL.md) | 编译并发布自定义页面 |
137
+ ## 完整开发流程
135
138
 
136
- ### 表单与数据
139
+ ```
140
+ [Step 1] 创建应用 → openyida create-app → 获得 appType
141
+
142
+ [Step 2] 需求分析 → 写入 prd/<项目名>.md
143
+
144
+ [Step 3] 创建自定义页面 → openyida create-page → 获得 formUuid(自定义页面)
145
+
146
+ [Step 4](按需)创建/更新表单 → openyida create-form → 获得 formUuid(表单)
147
+
148
+ [Step 5] 编写自定义页面代码 → yida-custom-page 规范 → pages/src/<项目名>.js
149
+
150
+ [Step 6] 发布页面 → openyida publish
151
+
152
+ [Step 7](按需)配置公开访问 → openyida verify-short-url / save-share-config
153
+
154
+ [Step 8] 输出访问链接,用系统浏览器打开
155
+ ```
137
156
 
138
- | 技能 | 路径 | 说明 |
139
- |------|------|------|
140
- | **yida-create-form-page** | [`skills/yida-create-form-page/SKILL.md`](skills/yida-create-form-page/SKILL.md) | 创建/更新表单(19 种字段类型) |
141
- | **yida-get-schema** | [`skills/yida-get-schema/SKILL.md`](skills/yida-get-schema/SKILL.md) | 获取表单 Schema,确认字段 ID |
142
- | **yida-data-management** | [`skills/yida-data-management/SKILL.md`](skills/yida-data-management/SKILL.md) | 表单/流程实例的查询、新增、更新 |
143
- | **yida-form-permission** | [`skills/yida-form-permission/SKILL.md`](skills/yida-form-permission/SKILL.md) | 表单权限配置(字段/数据/操作权限) |
144
- | **yida-formula** | [`skills/yida-formula/SKILL.md`](skills/yida-formula/SKILL.md) | 公式字段编写规范(函数速查、18 个常见场景示例) |
157
+ ---
145
158
 
146
- ### 流程
159
+ ## 子技能速查
160
+
161
+ > 每个子技能均有独立的 SKILL.md,执行前请读取对应文档获取详细参数说明。
162
+
163
+ | 技能 | SKILL.md 路径 | 用途 | 典型命令 |
164
+ |------|--------------|------|---------|
165
+ | `yida-login` | `skills/yida-login/SKILL.md` | 登录态管理(通常自动触发) | `openyida login` |
166
+ | `yida-logout` | `skills/yida-logout/SKILL.md` | 退出登录 / 切换账号 | `openyida logout` |
167
+ | `yida-create-app` | `skills/yida-create-app/SKILL.md` | 创建应用,获取 appType | `openyida create-app "<名称>"` |
168
+ | `yida-create-page` | `skills/yida-create-page/SKILL.md` | 创建自定义页面,获取 formUuid | `openyida create-page <appType> "<页面名>"` |
169
+ | `yida-create-form-page` | `skills/yida-create-form-page/SKILL.md` | 创建/更新表单页面 | `openyida create-form create <appType> "<表单名>" <字段JSON>` |
170
+ | `yida-get-schema` | `skills/yida-get-schema/SKILL.md` | 获取表单 Schema,确认字段 ID | `openyida get-schema <appType> <formUuid>` |
171
+ | `yida-custom-page` | `skills/yida-custom-page/SKILL.md` | 编写自定义页面 JSX 代码规范 | 详见 SKILL.md |
172
+ | `yida-publish-page` | `skills/yida-publish-page/SKILL.md` | 编译并发布自定义页面 | `openyida publish <源文件路径> <appType> <formUuid>` |
173
+ | `yida-page-config` | `skills/yida-page-config/SKILL.md` | 页面公开访问/组织内分享配置 | `openyida verify-short-url <appType> <formUuid> <url>` |
174
+ | `yida-chart` | `skills/yida-chart/SKILL.md` | 报表可视化(ECharts 图表 + 数据聚合) | 详见 SKILL.md |
175
+ | `yida-report` | `skills/yida-report/SKILL.md` | 宜搭原生报表创建(标准报表) | `openyida create-report <appType> "<名称>" <配置>` |
176
+ | `yida-ppt` | `skills/yida-ppt/SKILL.md` | PPT/演示文稿开发(深色科技风+Canvas粒子+电影级转场+玻璃态卡片) | 详见 SKILL.md |
147
177
 
148
- | 技能 | 路径 | 说明 |
149
- |------|------|------|
150
- | **yida-create-process** | [`skills/yida-create-process/SKILL.md`](skills/yida-create-process/SKILL.md) | 一键创建流程表单(创建+转流程+配置) |
151
- | **yida-process-rule** | [`skills/yida-process-rule/SKILL.md`](skills/yida-process-rule/SKILL.md) | 为已有表单配置审批规则(条件分支/审批节点/字段权限) |
152
- | **process-preview** | `openyida process preview <appType> <processInstanceId> [--output <path>]` | 预览流程实例,生成可视化流程图 HTML(高亮当前审批节点,直接执行,无需子技能) |
153
- | **yida-integration** | [`skills/yida-integration/SKILL.md`](skills/yida-integration/SKILL.md) | 创建集成&自动化逻辑流(触发事件/通知/数据操作) |
178
+ ---
154
179
 
155
- ### 自定义页面开发
180
+ ## 关键规则
156
181
 
157
- | 技能 | 路径 | 说明 |
158
- |------|------|------|
159
- | **yida-custom-page** | [`skills/yida-custom-page/SKILL.md`](skills/yida-custom-page/SKILL.md) | JSX 编码规范、API 调用、状态管理(必须完整学习) |
160
- | **yida-density** | [`skills/yida-density/SKILL.md`](skills/yida-density/SKILL.md) | 信息密度设计规范(紧凑/舒适/宽松) |
161
- | **yida-table-form** | [`skills/yida-table-form/SKILL.md`](skills/yida-table-form/SKILL.md) | 表格形式批量表单提交 |
162
- | **yida-ppt-slider** | [`skills/yida-ppt-slider/SKILL.md`](skills/yida-ppt-slider/SKILL.md) | PPT 幻灯片页面开发(演讲/路演/培训) |
182
+ ### 1. 执行子技能前必须读取其 SKILL.md
163
183
 
164
- ### 连接器与报表
184
+ 每个子技能的详细参数、注意事项、示例均在其 SKILL.md 中。**执行任何子技能前,必须先读取对应的 SKILL.md**,不要凭记忆猜测参数格式。
165
185
 
166
- | 技能 | 路径 | 说明 |
167
- |------|------|------|
168
- | **yida-connector** | [`skills/yida-connector/SKILL.md`](skills/yida-connector/SKILL.md) | HTTP 连接器管理(创建/测试/智能生成) |
169
- | **yida-report** | [`skills/yida-report/SKILL.md`](skills/yida-report/SKILL.md) | 创建宜搭原生报表(16 种图表/表格/筛选器,可作为 yida-chart 数据源) |
170
- | **yida-chart** | [`skills/yida-chart/SKILL.md`](skills/yida-chart/SKILL.md) | ECharts 高级报表(定制化数据大屏) |
186
+ ### 2. corpId 一致性检查(必须遵守)
171
187
 
172
- ### 配置与认证
188
+ 在创建页面前,**必须对比 prd 文档中的 corpId 与 `.cache/cookies.json` 中的 corpId 是否一致**:
173
189
 
174
- | 技能 | 路径 | 说明 |
175
- |------|------|------|
176
- | **yida-login** | [`skills/yida-login/SKILL.md`](skills/yida-login/SKILL.md) | 登录态管理(通常自动触发) |
177
- | **yida-logout** | [`skills/yida-logout/SKILL.md`](skills/yida-logout/SKILL.md) | 退出登录 / 切换账号 |
178
- | **yida-page-config** | [`skills/yida-page-config/SKILL.md`](skills/yida-page-config/SKILL.md) | 页面公开访问 / 组织内分享配置 |
190
+ - **一致** 继续执行
191
+ - **不一致** → 询问用户:重新登录到正确组织,还是在当前组织新建应用?
179
192
 
180
- ### 工具
193
+ ### 3. 配置信息分两处存储
181
194
 
182
- | 技能 | 路径 | 说明 |
183
- |------|------|------|
184
- | **yida-flash-note-to-prd** | [`skills/yida-flash-note-to-prd/SKILL.md`](skills/yida-flash-note-to-prd/SKILL.md) | 钉钉闪记转高质量 Prompt |
185
- | **yida-export-conversation** | [`skills/yida-export-conversation/SKILL.md`](skills/yida-export-conversation/SKILL.md) | 导出 AI 对话记录 |
186
- | **yida-db-seq-fix** | [`skills/yida-db-seq-fix/SKILL.md`](skills/yida-db-seq-fix/SKILL.md) | PostgreSQL Sequence 自动修复(检测并修复主键冲突问题) |
187
- | **large-file-write** | [`skills/large-file-write/SKILL.md`](skills/large-file-write/SKILL.md) | 大文件写入(解决 heredoc 截断问题) |
195
+ | 信息类型 | 存储位置 | 内容示例 |
196
+ |---------|---------|---------|
197
+ | 业务语义信息 | `prd/<项目名>.md` | 字段名称、字段类型、字段说明 |
198
+ | Schema ID | `.cache/<项目名>-schema.json` | `appType`、`formUuid`、`fieldId` |
188
199
 
189
- ### 共享参考文档
200
+ > **prd 文档不记录 `formUuid`、`fieldId` 等 ID**,这些写入 `.cache/` 临时文件。
190
201
 
191
- | 文档 | 路径 | 说明 |
192
- |------|------|------|
193
- | 宜搭 JS API | [`references/yida-api.md`](references/yida-api.md) | 31 个 API(表单操作/流程操作/设计/工具类) |
194
- | 大模型 AI 接口 | [`references/model-api.md`](references/model-api.md) | AI 文本生成接口参数与示例 |
195
- | 查询条件指南 | [`references/query-condition-guide.md`](references/query-condition-guide.md) | searchFieldJson 条件构造规范 |
202
+ ### 4. 临时文件规范
203
+
204
+ 所有临时文件(cookies、schema 缓存等)**必须写在项目根目录的 `.cache/` 文件夹中**,不要写在系统其他位置。
205
+
206
+ ### 5. 报表优化/美化提示规则(必须遵守)
207
+
208
+ 当用户提到"优化"、"美化"、"更好看"、"不够漂亮"等与报表视觉效果相关的关键词时,**必须先询问用户**选择以下哪种方案:
209
+
210
+ | 方案 | 说明 | 适用场景 |
211
+ |------|------|---------|
212
+ | **方案 A:优化宜搭原生报表** | 调整图表类型、布局、筛选器等,仍使用宜搭原生报表组件 | 快速优化,无需编写代码 |
213
+ | **方案 B:创建 ECharts 高级报表** | 使用 ECharts + 自定义页面 JSX,实现高度定制化、更美观的数据可视化 | 需要更精美的视觉效果、复杂交互、数据大屏 |
214
+
215
+ **提示话术示例**:
216
+
217
+ > 我可以通过两种方式帮你优化报表:
218
+ > 1. **优化原生报表**:调整图表类型组合、布局排列、添加筛选器,快速提升效果
219
+ > 2. **创建 ECharts 高级报表**:使用 ECharts 自定义页面,实现更精美的视觉效果和交互体验(如渐变色、动画、自定义主题等)
220
+ >
221
+ > 你想选择哪种方案?
222
+
223
+ - 用户选择方案 A → 使用 `yida-report` 技能(`openyida create-report`)
224
+ - 用户选择方案 B → 读取 `skills/yida-chart/SKILL.md`,使用 `yida-chart` 技能
196
225
 
197
226
  ---
198
227
 
199
- ## URL 规则
228
+ ## 表单字段类型速查
229
+
230
+ | 类型 | 说明 | 特殊属性 |
231
+ |------|------|---------|
232
+ | `TextField` | 单行文本 | — |
233
+ | `TextareaField` | 多行文本 | — |
234
+ | `NumberField` | 数字 | `precision`(小数位)、`innerAfter`(单位) |
235
+ | `RadioField` | 单选 | `options` |
236
+ | `CheckboxField` | 多选 | `options` |
237
+ | `SelectField` | 下拉单选 | `options` |
238
+ | `MultiSelectField` | 下拉多选 | `options` |
239
+ | `DateField` | 日期 | `format`(如 `"YYYY-MM-DD"`) |
240
+ | `CascadeDateField` | 级联日期(范围) | `format` |
241
+ | `EmployeeField` | 成员选择 | `multiple` |
242
+ | `DepartmentSelectField` | 部门选择 | `multiple` |
243
+ | `AddressField` | 地址 | — |
244
+ | `AttachmentField` | 附件上传 | — |
245
+ | `ImageField` | 图片上传 | — |
246
+ | `TableField` | 子表格 | `children`(子字段列表) |
247
+ | `AssociationFormField` | 关联表单 | `associationForm` |
248
+ | `SerialNumberField` | 流水号 | `serialNumberRule` |
249
+ | `RateField` | 评分 | `count`(星级数) |
250
+ | `CountrySelectField` | 国家选择 | `multiple` |
251
+
252
+ ---
253
+
254
+ ## 宜搭应用 URL 规则
200
255
 
201
256
  | 页面类型 | URL 格式 |
202
257
  |---------|---------|
203
258
  | 应用首页 | `{base_url}/{appType}/workbench` |
204
259
  | 表单提交页 | `{base_url}/{appType}/submission/{formUuid}` |
205
260
  | 自定义页面 | `{base_url}/{appType}/custom/{formUuid}` |
261
+ | 自定义页面(隐藏导航) | `{base_url}/{appType}/custom/{formUuid}?isRenderNav=false` |
206
262
  | 表单详情页 | `{base_url}/{appType}/formDetail/{formUuid}?formInstId={formInstId}` |
263
+ | 表单详情页(编辑模式) | `{base_url}/{appType}/formDetail/{formUuid}?formInstId={formInstId}&mode=edit` |
207
264
 
208
- > 拼接 `&corpid={corpId}` 切换组织,拼接 `&isRenderNav=false` 隐藏导航。
265
+ > 所有地址拼接 `&corpid={corpId}` 可自动切换到对应组织。
209
266
 
210
267
  ---
211
268
 
212
269
  ## 常见问题
213
-
214
270
  **Q:发布时提示登录失效?**
215
- 执行 `openyida login` 重新登录后再发布。
271
+
272
+ 重新登录后再发布:
273
+ ```bash
274
+ openyida login
275
+ openyida publish <源文件路径> <appType> <formUuid>
276
+ ```
216
277
 
217
278
  **Q:如何查看已有表单的字段 ID?**
218
- 使用 `openyida get-schema <appType> <formUuid>` 获取 Schema,详见 `yida-get-schema` 技能。
279
+
280
+ 使用 `yida-get-schema` 技能获取表单 Schema,从中读取各字段的 `fieldId`:
281
+ ```bash
282
+ openyida get-schema <appType> <formUuid>
283
+ ```
219
284
 
220
285
  **Q:如何更新已有表单字段?**
221
- 使用 `yida-create-form-page` 的 update 模式:
286
+
287
+ 使用 `yida-create-form-page` 的 update 模式,详见 `skills/yida-create-form-page/SKILL.md`:
222
288
  ```bash
223
289
  openyida create-form update <appType> <formUuid> '[{"action":"add","field":{"type":"TextField","label":"新字段"}}]'
224
290
  ```
225
291
 
226
292
  **Q:发布时提示 corpId 不匹配?**
227
- 询问用户是否在当前组织创建新应用,或重新登录到正确组织:
293
+
294
+ 询问用户是否在当前组织创建新应用发布,或重新登录到正确组织:
228
295
  ```bash
229
296
  openyida logout
230
297
  openyida login
231
- ```
232
-
233
- **Q:如何在表单/页面中调用外部接口?**
234
- 参考 `references/connector-datasource.md`,通过 `--datasource` 参数注入连接器数据源,在 JS 中通过 `this.dataSourceMap.<名称>.load()` 调用。
298
+ ```