openyida 0.1.2 → 1.0.0-beta.0
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/README.md +68 -38
- package/bin/yida.js +164 -761
- package/lib/babel-transform/index.js +244 -0
- package/lib/babel-transform/jsx-utils.js +89 -0
- package/lib/check-update.js +72 -0
- package/lib/copy.js +258 -0
- package/lib/create-app.js +174 -0
- package/lib/create-form.js +2244 -0
- package/lib/create-page.js +89 -0
- package/lib/env.js +164 -0
- package/lib/get-page-config.js +102 -0
- package/lib/get-schema.js +76 -0
- package/lib/login.js +323 -0
- package/lib/publish.js +610 -0
- package/lib/save-share-config.js +268 -0
- package/lib/update-form-config.js +237 -0
- package/lib/utils.js +443 -0
- package/lib/verify-short-url.js +279 -0
- package/package.json +20 -7
- package/project/.cache/demo-schema.json +2353 -0
- package/project/pages/src/demo-birthday-game.js +833 -0
- package/project/pages/src/demo-future-vision-2026.js +1102 -0
- package/project/pages/src/demo-salary-calculator.js +904 -0
- package/project/prd/demo-birthday-game.md +39 -0
- package/project/prd/demo-future-vision-2026.md +78 -0
- package/project/prd/demo-salary-calculator.md +101 -0
- package/scripts/postinstall.js +114 -0
- package/yida-skills/SKILL.md +273 -0
- package/yida-skills/reference/association-form-field.md +469 -0
- package/yida-skills/reference/employee-field.md +17 -0
- package/yida-skills/reference/model-api.md +73 -0
- package/yida-skills/reference/serial-number-field.md +132 -0
- package/yida-skills/reference/yida-api.md +1208 -0
- package/yida-skills/skills/yida-app/SKILL.md +394 -0
- package/yida-skills/skills/yida-create-app/SKILL.md +158 -0
- package/yida-skills/skills/yida-create-form-page/SKILL.md +598 -0
- package/yida-skills/skills/yida-create-page/SKILL.md +103 -0
- package/yida-skills/skills/yida-custom-page/SKILL.md +533 -0
- package/yida-skills/skills/yida-get-schema/SKILL.md +90 -0
- package/yida-skills/skills/yida-login/SKILL.md +200 -0
- package/yida-skills/skills/yida-logout/SKILL.md +58 -0
- package/yida-skills/skills/yida-page-config/SKILL.md +261 -0
- package/yida-skills/skills/yida-publish-page/SKILL.md +113 -0
- package/.eslintrc.json +0 -25
- package/.github/workflows/ci.yml +0 -123
- package/.github/workflows/publish.yml +0 -105
- package/.github/workflows/update-contributors.yml +0 -151
- package/.openclaw/skills/yida-issue/SKILL.md +0 -27
- package/.openclaw/skills/yida-issue/scripts/create-issue.js +0 -317
- package/CLAUDE.md +0 -168
- package/CONTRIBUTING.md +0 -59
- package/install-skills.ps1 +0 -162
- package/install-skills.sh +0 -175
- package/pages/dist/.gitkeep +0 -0
- package/pages/src/.gitkeep +0 -0
- package/prd/salary-calculator.md +0 -15
- package/tests/cli.test.js +0 -930
- package/tests/install.test.js +0 -277
- package/tests/yida-issue.test.js +0 -314
- /package/{config.json → project/config.json} +0 -0
- /package/{.cache → project/pages/dist}/.gitkeep +0 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: yida-get-schema
|
|
3
|
+
description: 宜搭表单 Schema 获取技能,通过调用 getFormSchema 接口获取指定表单的完整 Schema 结构,用于分析字段定义、组件配置、确认字段 ID(fieldId)等。
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility:
|
|
6
|
+
- opencode
|
|
7
|
+
- claude-code
|
|
8
|
+
metadata:
|
|
9
|
+
audience: developers
|
|
10
|
+
workflow: yida-development
|
|
11
|
+
version: 1.0.0
|
|
12
|
+
tags:
|
|
13
|
+
- yida
|
|
14
|
+
- low-code
|
|
15
|
+
- schema
|
|
16
|
+
- api
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# 宜搭表单 Schema 获取技能
|
|
20
|
+
|
|
21
|
+
## 概述
|
|
22
|
+
|
|
23
|
+
本技能描述如何通过 `getFormSchema` 接口获取宜搭表单的完整 Schema 结构。获取到的 Schema 可用于分析字段定义、组件配置、学习表单结构等场景,也可用于在编码时确认字段 ID(fieldId)。
|
|
24
|
+
|
|
25
|
+
## 何时使用
|
|
26
|
+
|
|
27
|
+
当以下场景发生时使用此技能:
|
|
28
|
+
- 用户需要查看已有表单的字段结构
|
|
29
|
+
- 需要确认表单中各字段的 fieldId
|
|
30
|
+
- 在编码前需要了解表单的组件配置
|
|
31
|
+
- 需要分析现有表单作为参考
|
|
32
|
+
|
|
33
|
+
## 使用示例
|
|
34
|
+
|
|
35
|
+
### 示例 1:获取表单 Schema
|
|
36
|
+
**场景**:获取表单的完整 Schema 结构
|
|
37
|
+
**命令**:
|
|
38
|
+
```bash
|
|
39
|
+
openyida get-schema APP_XXX FORM-XXX
|
|
40
|
+
```
|
|
41
|
+
**输出**:完整的 Schema JSON,包含 pages、componentsMap 等
|
|
42
|
+
|
|
43
|
+
## 使用方式
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
openyida get-schema <appType> <formUuid>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**参数说明**:
|
|
50
|
+
|
|
51
|
+
| 参数 | 必填 | 说明 |
|
|
52
|
+
| --- | --- | --- |
|
|
53
|
+
| `appType` | 是 | 应用 ID,如 `APP_XXX` |
|
|
54
|
+
| `formUuid` | 是 | 表单 UUID,如 `FORM-XXX` |
|
|
55
|
+
|
|
56
|
+
**示例**:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
openyida get-schema "APP_XXX" "FORM-XXX"
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**输出**:日志输出到 stderr,Schema JSON 输出到 stdout。
|
|
63
|
+
|
|
64
|
+
## 前置依赖
|
|
65
|
+
|
|
66
|
+
- Node.js
|
|
67
|
+
- 项目根目录存在 `.cache/cookies.json`(首次运行会自动触发扫码登录)
|
|
68
|
+
|
|
69
|
+
## 调用流程
|
|
70
|
+
|
|
71
|
+
1. 读取项目根目录的 `.cache/cookies.json` 获取登录态;若不存在则自动触发扫码登录
|
|
72
|
+
2. 调用 `getFormSchema` 接口获取表单 Schema;根据响应体 `errorCode` 自动处理异常(详见 `yida-login` 技能文档「错误处理机制」章节)
|
|
73
|
+
3. 将 Schema 输出到 stdout
|
|
74
|
+
|
|
75
|
+
## 文件结构
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
yida-get-schema/
|
|
79
|
+
└── SKILL.md # 本文档
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## 接口说明
|
|
83
|
+
|
|
84
|
+
`getFormSchema` 接口的完整参数、返回值和错误处理机制,请参考 `../../reference/yida-api.md` 文档中的「表单设计类 API」章节。
|
|
85
|
+
|
|
86
|
+
## 与其他技能配合
|
|
87
|
+
|
|
88
|
+
- **获取已有表单 Schema** → 本技能,用于确认字段 ID 或学习字段结构
|
|
89
|
+
- **创建表单页面** → 使用 `yida-create-form-page` 技能
|
|
90
|
+
- **部署页面代码** → 使用 `yida-publish` 技能
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: yida-login
|
|
3
|
+
description: 宜搭平台登录态管理技能,支持标准环境(Playwright 扫码登录)和悟空环境(CDP 从内置浏览器提取 Cookie),Cookie 持久化 + 自动获取 CSRF Token。
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility:
|
|
6
|
+
- opencode
|
|
7
|
+
- claude-code
|
|
8
|
+
metadata:
|
|
9
|
+
audience: developers
|
|
10
|
+
workflow: yida-auth
|
|
11
|
+
version: 1.1.0
|
|
12
|
+
tags:
|
|
13
|
+
- yida
|
|
14
|
+
- auth
|
|
15
|
+
- login
|
|
16
|
+
- cookie
|
|
17
|
+
- wukong
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# 宜搭登录态管理技能
|
|
21
|
+
|
|
22
|
+
## 概述
|
|
23
|
+
|
|
24
|
+
本技能提供宜搭平台的登录态管理能力,支持 Cookie 持久化和自动验证,首次使用需扫码登录,后续自动复用 Cookie。
|
|
25
|
+
|
|
26
|
+
## 何时使用
|
|
27
|
+
|
|
28
|
+
当以下场景发生时使用此技能:
|
|
29
|
+
- 首次使用宜搭技能,需要扫码登录
|
|
30
|
+
- Cookie 过期或失效,需要重新登录
|
|
31
|
+
- 其他技能调用时提示登录态异常
|
|
32
|
+
- 用户要求手动执行登录
|
|
33
|
+
|
|
34
|
+
## 使用示例
|
|
35
|
+
|
|
36
|
+
### 示例 1:标准环境触发登录
|
|
37
|
+
**场景**:手动触发扫码登录(标准环境)
|
|
38
|
+
**命令**:
|
|
39
|
+
```bash
|
|
40
|
+
openyida login
|
|
41
|
+
```
|
|
42
|
+
**输出**:
|
|
43
|
+
```json
|
|
44
|
+
{"csrf_token":"b2a5d192-xxx","corp_id":"dingxxx","user_id":"1955225xxx","base_url":"https://abcd.aliwork.com"}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 示例 2:悟空环境登录
|
|
48
|
+
**场景**:在悟空(Real)环境中,从内置浏览器提取登录态
|
|
49
|
+
|
|
50
|
+
> ⚠️ **AI 必读**:在悟空环境中触发登录时,必须按以下步骤操作,**不能**直接运行脚本。
|
|
51
|
+
|
|
52
|
+
**步骤 1**:读取登录地址
|
|
53
|
+
```bash
|
|
54
|
+
cat config.json # 获取 loginUrl 字段
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**步骤 2**:使用悟空内置浏览器打开登录页面,等待用户完成扫码登录
|
|
58
|
+
- 悟空环境内置浏览器控制能力,可直接打开 URL(使用悟空的 `open_url` 或浏览器工具)
|
|
59
|
+
- 登录地址即 `config.json` 中的 `loginUrl`(如 `https://www.aliwork.com/workPlatform`)
|
|
60
|
+
- 等待用户在内置浏览器中完成钉钉扫码登录后,再进行步骤 3
|
|
61
|
+
|
|
62
|
+
**步骤 3**:登录完成后,运行命令从内置浏览器提取 Cookie
|
|
63
|
+
```bash
|
|
64
|
+
openyida login --wukong
|
|
65
|
+
```
|
|
66
|
+
**输出**(与标准登录格式完全一致):
|
|
67
|
+
```json
|
|
68
|
+
{"csrf_token":"b2a5d192-xxx","corp_id":"dingxxx","user_id":"1955225xxx","base_url":"https://abcd.aliwork.com","cookies":[...]}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## 使用方式
|
|
72
|
+
|
|
73
|
+
### 标准环境
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
openyida login
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
无需任何参数,登录地址从项目根目录的 `config.json` 中读取(`loginUrl` 字段),登录后可能跳转到 `abcd.aliwork.com` 等域名。
|
|
80
|
+
|
|
81
|
+
### 悟空环境
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
openyida login --wukong
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**工作原理**:通过 CDP 协议连接悟空内置浏览器(端口 4249),调用 `Network.getAllCookies` 提取完整 Cookie(包括 `document.cookie` 无法获取的 HttpOnly Cookie),从中提取 `tianshu_csrf_token` 等关键字段。
|
|
88
|
+
|
|
89
|
+
**输出**:登录成功后,将 `csrf_token`、`base_url`(跳转后的实际域名)和 Cookie 信息以 JSON 格式输出到 stdout,同时 Cookie 持久化到项目根目录的 `.cache/cookies.json`。
|
|
90
|
+
|
|
91
|
+
> ⚠️ **重要**:`base_url` 取自登录成功后浏览器**实际跳转到的域名**,而非 `config.json` 中配置的 `loginUrl` 或 `defaultBaseUrl`。例如,即使 `loginUrl` 配置为 `https://www.aliwork.com`,如果你的账号所属组织对应的是 `abcd.aliwork.com`,平台会自动跳转,最终 `base_url` 将是 `https://abcd.aliwork.com`。后续所有 API 请求(包括 `yida-publish` 发布)都会使用这个 `base_url`。如需发布到特定域名,请确保 `config.json` 中的 `loginUrl` 指向该域名对应的组织,并且你的账号属于该组织。
|
|
92
|
+
|
|
93
|
+
> 项目根目录通过向上查找 `config.json` 或 `.git` 目录来定位。
|
|
94
|
+
|
|
95
|
+
## 工作流程
|
|
96
|
+
|
|
97
|
+
1. 检查本地是否存在 `.cache/cookies.json` 缓存(包含 Cookie 和 `base_url`)
|
|
98
|
+
2. 若存在,**直接从 Cookie 中提取** `csrf_token`(`tianshu_csrf_token`)、`corp_id` 和 `user_id`(`tianshu_corp_user`),无需访问任何页面
|
|
99
|
+
3. 若 Cookie 中无 `tianshu_csrf_token`,视为失效,打开有头浏览器让用户扫码登录
|
|
100
|
+
4. 登录成功后直接从 Cookie 中提取所需信息,保存 Cookie 和 `base_url`(从登录后实际跳转的 URL 获取)
|
|
101
|
+
|
|
102
|
+
## 前置依赖
|
|
103
|
+
|
|
104
|
+
- Node.js 16+
|
|
105
|
+
- `openyida` NPM 包已安装(`npm install -g openyida`)
|
|
106
|
+
|
|
107
|
+
## 文件结构
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
yida-login/
|
|
111
|
+
└── SKILL.md # 本文档
|
|
112
|
+
|
|
113
|
+
项目根目录/
|
|
114
|
+
├── config.json # 全局配置(loginUrl、defaultBaseUrl)
|
|
115
|
+
└── .cache/
|
|
116
|
+
└── cookies.json # 登录态缓存(运行时自动生成,含 Cookie + base_url)
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## 输出格式
|
|
120
|
+
|
|
121
|
+
脚本成功执行后,最后一行输出 JSON:
|
|
122
|
+
|
|
123
|
+
```json
|
|
124
|
+
{
|
|
125
|
+
"csrf_token": "b2a5d192-db90-484c-880f-9b48edd396d5",
|
|
126
|
+
"corp_id": "ding9a0954b4f9d9d40ef5bf40eda33b7ba0",
|
|
127
|
+
"user_id": "19552253733782",
|
|
128
|
+
"base_url": "https://abcd.aliwork.com",
|
|
129
|
+
"cookies": [...]
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
> `csrf_token` 从 Cookie `tianshu_csrf_token` 的 value 中提取;`corp_id` 和 `user_id` 从 Cookie `tianshu_corp_user` 的 value 中提取,格式为 `{corpId}_{userId}`,按最后一个 `_` 分隔。
|
|
134
|
+
|
|
135
|
+
> `base_url` 是登录后浏览器实际跳转到的域名(如 `https://abcd.aliwork.com`),**可能与 `config.json` 中的 `loginUrl` 不同**。其他脚本应使用此值作为 API 请求的基础地址,而非硬编码域名。
|
|
136
|
+
|
|
137
|
+
其他脚本可通过管道接收并解析 stdout 最后一行获取登录态信息。
|
|
138
|
+
|
|
139
|
+
## 缓存格式
|
|
140
|
+
|
|
141
|
+
`.cache/cookies.json` 文件格式(兼容旧版纯 Cookie 数组):
|
|
142
|
+
|
|
143
|
+
```json
|
|
144
|
+
{
|
|
145
|
+
"cookies": [...],
|
|
146
|
+
"base_url": "https://abcd.aliwork.com"
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
`csrf_token`、`corp_id`、`user_id` 不存储在缓存中,每次启动时直接从 Cookie 列表中提取(`tianshu_csrf_token` 和 `tianshu_corp_user` 字段)。
|
|
151
|
+
|
|
152
|
+
## 全局配置
|
|
153
|
+
|
|
154
|
+
`openyida` 从项目根目录的 `config.json` 读取配置,不再硬编码 URL:
|
|
155
|
+
|
|
156
|
+
```json
|
|
157
|
+
{
|
|
158
|
+
"loginUrl": "https://www.aliwork.com/workPlatform",
|
|
159
|
+
"defaultBaseUrl": "https://www.aliwork.com"
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
| 字段 | 说明 |
|
|
164
|
+
| --- | --- |
|
|
165
|
+
| `loginUrl` | 扫码登录页面地址(登录成功后平台可能自动跳转到其他域名) |
|
|
166
|
+
| `defaultBaseUrl` | API 请求的默认基础地址(仅当 `base_url` 未从登录态中获取时作为兜底使用,正常流程不会用到) |
|
|
167
|
+
|
|
168
|
+
## 错误处理机制
|
|
169
|
+
|
|
170
|
+
各 skill 脚本通过解析接口响应体的 `errorCode` 字段来判断登录态异常,并自动调用本技能处理:
|
|
171
|
+
|
|
172
|
+
| errorCode | 含义 | 标准环境处理方式 | 悟空环境处理方式 |
|
|
173
|
+
| --- | --- | --- | --- |
|
|
174
|
+
| "TIANSHU_000030" | csrf 校验失败(csrf_token 过期) | `openyida login` 自动无头刷新 csrf_token,无需重新扫码 | `openyida login --wukong` 重新从内置浏览器提取完整 Cookie |
|
|
175
|
+
| "307" | 登录状态已过期(Cookie 失效) | `openyida login` 触发完整重新登录(可能需要扫码) | `openyida login --wukong` 重新从内置浏览器提取完整 Cookie |
|
|
176
|
+
|
|
177
|
+
> **注意**:错误判断基于响应体 JSON 的 `errorCode` 字段,而非 HTTP 状态码。
|
|
178
|
+
|
|
179
|
+
> **悟空环境说明**:悟空环境下不支持 `--refresh-csrf` 模式,csrf_token 过期和 Cookie 失效均通过重新调用 `openyida login --wukong` 处理。由于 CDP 提取 Cookie 速度极快(无需扫码),这不会带来明显的延迟。
|
|
180
|
+
|
|
181
|
+
## 退出登录
|
|
182
|
+
|
|
183
|
+
清空本地 Cookie 缓存文件内容即可完成退出,下次调用任意技能时将自动触发重新扫码登录:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
openyida logout
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**适用场景**:
|
|
190
|
+
- 需要切换账号或切换组织
|
|
191
|
+
- Cookie 失效且无法自动刷新
|
|
192
|
+
- 用户主动要求退出登录
|
|
193
|
+
|
|
194
|
+
> **注意**:Cookie 缓存文件位于**项目根目录**(含 `README.md` 或 `.git` 的目录)的 `.cache/` 目录下。退出登录不影响已部署的页面和已保存的数据。
|
|
195
|
+
|
|
196
|
+
## 与其他技能配合
|
|
197
|
+
|
|
198
|
+
- **退出登录**:需要切换账号或 Cookie 失效时,执行 `openyida logout` 后重新运行任意技能即可触发扫码登录
|
|
199
|
+
- **`yida-publish`**:发布时自动调用本技能获取登录态
|
|
200
|
+
- **`yida-create-app`**、**`yida-create-page`**、**`yida-create-form-page`**:自动调用本技能获取登录态
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: yida-logout
|
|
3
|
+
description: 宜搭平台退出登录技能,清空本地 Cookie 缓存内容。
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility:
|
|
6
|
+
- opencode
|
|
7
|
+
- claude-code
|
|
8
|
+
metadata:
|
|
9
|
+
audience: developers
|
|
10
|
+
workflow: yida-auth
|
|
11
|
+
version: 1.0.0
|
|
12
|
+
tags:
|
|
13
|
+
- yida
|
|
14
|
+
- auth
|
|
15
|
+
- logout
|
|
16
|
+
- cookie
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# 宜搭退出登录技能
|
|
20
|
+
|
|
21
|
+
## 概述
|
|
22
|
+
|
|
23
|
+
本技能提供宜搭平台的退出登录能力,通过清空本地 Cookie 缓存文件内容使登录态失效。下次使用 `yida-login` 时将重新打开浏览器进行扫码登录。
|
|
24
|
+
|
|
25
|
+
## 何时使用
|
|
26
|
+
|
|
27
|
+
当以下场景发生时使用此技能:
|
|
28
|
+
- 用户需要切换账号
|
|
29
|
+
- Cookie 失效且无法自动刷新
|
|
30
|
+
- 用户要求退出登录
|
|
31
|
+
- 需要切换到另一个组织
|
|
32
|
+
|
|
33
|
+
## 使用示例
|
|
34
|
+
|
|
35
|
+
### 示例 1:退出登录
|
|
36
|
+
**场景**:清空登录态缓存
|
|
37
|
+
**命令**:
|
|
38
|
+
```bash
|
|
39
|
+
openyida logout
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 使用方式
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
openyida logout
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## 工作流程
|
|
49
|
+
|
|
50
|
+
1. 清空项目根目录下的 `.cache/cookies.json` 文件内容(写入空字符串)
|
|
51
|
+
2. 下次调用 `yida-login` 时,因缓存内容为空,将自动打开浏览器要求重新扫码登录
|
|
52
|
+
|
|
53
|
+
> **注意**:Cookie 缓存文件位于**项目根目录**(含 `README.md` 或 `.git` 的目录)的 `.cache/` 目录下。
|
|
54
|
+
|
|
55
|
+
## 与其他技能配合
|
|
56
|
+
|
|
57
|
+
- **`yida-login`**:退出后需重新登录时使用,会自动检测 Cookie 缓存为空并打开浏览器
|
|
58
|
+
- 退出登录不影响已部署的页面和已保存的数据
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: yida-page-config
|
|
3
|
+
description: 宜搭页面配置技能,提供页面公开访问和组织内分享的 URL 验证与配置保存功能。包括公开访问(/o/xxx)和组织内分享(/s/xxx)两种模式。
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility:
|
|
6
|
+
- opencode
|
|
7
|
+
- claude-code
|
|
8
|
+
metadata:
|
|
9
|
+
audience: developers
|
|
10
|
+
workflow: yida-development
|
|
11
|
+
version: 1.0.0
|
|
12
|
+
tags:
|
|
13
|
+
- yida
|
|
14
|
+
- low-code
|
|
15
|
+
- page-config
|
|
16
|
+
- public-url
|
|
17
|
+
- share-url
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# 宜搭页面配置技能
|
|
21
|
+
|
|
22
|
+
## 概述
|
|
23
|
+
|
|
24
|
+
本技能提供宜搭页面的公开访问和组织内分享配置功能:
|
|
25
|
+
|
|
26
|
+
| 功能 | 说明 |
|
|
27
|
+
|------|------|
|
|
28
|
+
| **URL 验证** | 验证公开访问/分享 URL 是否可用(是否被占用) |
|
|
29
|
+
| **配置保存** | 保存页面的公开访问/分享配置 |
|
|
30
|
+
|
|
31
|
+
支持的 URL 类型:
|
|
32
|
+
|
|
33
|
+
| 类型 | 前缀 | 示例 | 访问范围 |
|
|
34
|
+
|------|------|------|----------|
|
|
35
|
+
| 公开访问 | `/o/` | `/o/myapp` | 任何人可访问 |
|
|
36
|
+
| 组织内分享 | `/s/` | `/s/myapp` | 仅组织内成员 |
|
|
37
|
+
|
|
38
|
+
## 何时使用
|
|
39
|
+
|
|
40
|
+
当以下场景发生时使用此技能:
|
|
41
|
+
- 用户需要设置页面的公开访问功能
|
|
42
|
+
- 用户需要设置页面的组织内分享功能
|
|
43
|
+
- 在配置公开访问/分享之前需要检查 URL 是否被占用
|
|
44
|
+
- 需要修改或关闭已有页面的分享配置
|
|
45
|
+
|
|
46
|
+
## ⚠️ 重要限制:自定义页面使用表单数据时不支持公开发布
|
|
47
|
+
|
|
48
|
+
**如果自定义页面中有读取或写入宜搭表单数据的操作(如查询表单记录、提交表单等),则该页面不支持配置公开访问(`/o/xxx`)。**
|
|
49
|
+
|
|
50
|
+
原因:公开访问页面对任何人开放,无需登录,但宜搭表单数据接口需要登录态(Cookie)才能访问,匿名用户无法读取表单数据,页面会出现数据加载失败的问题。
|
|
51
|
+
|
|
52
|
+
**判断标准**:
|
|
53
|
+
|
|
54
|
+
| 页面类型 | 是否支持公开访问 |
|
|
55
|
+
|---------|---------------|
|
|
56
|
+
| 纯展示页面(静态内容、外部 API) | ✅ 支持 |
|
|
57
|
+
| 使用宜搭表单数据(查询/提交/更新) | ❌ 不支持 |
|
|
58
|
+
| 使用宜搭成员/部门数据 | ❌ 不支持 |
|
|
59
|
+
|
|
60
|
+
**遇到此情况时,AI 应该**:
|
|
61
|
+
1. 不生成公开访问链接(`/o/xxx`)
|
|
62
|
+
2. 告知用户该页面因使用了表单数据,不支持公开访问
|
|
63
|
+
3. 如有需要,可配置**组织内分享**(`/s/xxx`),仅限组织内登录成员访问
|
|
64
|
+
|
|
65
|
+
## URL 格式要求
|
|
66
|
+
|
|
67
|
+
- 公开访问:`/o/xxx`,如 `/o/myapp`
|
|
68
|
+
- 组织内分享:`/s/xxx`,如 `/s/myapp`
|
|
69
|
+
- 只支持 a-z A-Z 0-9 _ -
|
|
70
|
+
- 路径部分是唯一的,不能与已有页面冲突
|
|
71
|
+
|
|
72
|
+
## 使用示例
|
|
73
|
+
|
|
74
|
+
### 示例 1:验证公开访问 URL
|
|
75
|
+
```bash
|
|
76
|
+
openyida verify-short-url APP_XXX FORM-XXX /o/myapp
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 示例 2:开启公开访问
|
|
80
|
+
```bash
|
|
81
|
+
openyida save-share-config APP_XXX FORM-XXX /o/myapp y n
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 示例 3:关闭公开访问
|
|
85
|
+
```bash
|
|
86
|
+
openyida save-share-config APP_XXX FORM-XXX "" n
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 示例 4:查询页面配置
|
|
90
|
+
```bash
|
|
91
|
+
openyida get-page-config APP_XXX FORM-XXX
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 示例 5:隐藏顶部导航
|
|
95
|
+
```bash
|
|
96
|
+
openyida update-form-config APP_XXX FORM-XXX false "页面标题"
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## 工具说明
|
|
100
|
+
|
|
101
|
+
### 1. verify-short-url - URL 验证
|
|
102
|
+
|
|
103
|
+
验证短链接 URL 是否已被占用。
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
openyida verify-short-url <appType> <formUuid> <url>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**参数**:
|
|
110
|
+
|
|
111
|
+
| 参数 | 必填 | 说明 |
|
|
112
|
+
| --- | --- | --- |
|
|
113
|
+
| `appType` | 是 | 应用 ID,如 `APP_XXX` |
|
|
114
|
+
| `formUuid` | 是 | 表单 UUID,如 `FORM-XXX` |
|
|
115
|
+
| `url` | 是 | 短链接路径,`/o/xxx` 或 `/s/xxx` |
|
|
116
|
+
|
|
117
|
+
**输出**:
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
{
|
|
121
|
+
"available": true,
|
|
122
|
+
"url": "/o/myapp",
|
|
123
|
+
"urlType": "open",
|
|
124
|
+
"message": "该公开访问路径可用"
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### 2. save-share-config - 配置保存
|
|
129
|
+
|
|
130
|
+
保存页面的公开访问或组织内分享配置。
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
openyida save-share-config <appType> <formUuid> <url> <isOpen> [openAuth]
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**参数**:
|
|
137
|
+
|
|
138
|
+
| 参数 | 必填 | 说明 |
|
|
139
|
+
| --- | --- | --- |
|
|
140
|
+
| `appType` | 是 | 应用 ID |
|
|
141
|
+
| `formUuid` | 是 | 表单 UUID |
|
|
142
|
+
| `url` | 是 | 短链接路径,关闭时传空字符串 `""` |
|
|
143
|
+
| `isOpen` | 是 | 是否开放,`y` 开启,`n` 关闭 |
|
|
144
|
+
| `openAuth` | 否 | 是否需要授权,`y` 需要,`n` 不需要,默认 `n` |
|
|
145
|
+
|
|
146
|
+
**输出**:
|
|
147
|
+
|
|
148
|
+
```json
|
|
149
|
+
{
|
|
150
|
+
"success": true,
|
|
151
|
+
"url": "/o/myapp",
|
|
152
|
+
"isOpen": true,
|
|
153
|
+
"message": "公开访问配置已保存"
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### 3. get-page-config - 查询页面配置
|
|
158
|
+
|
|
159
|
+
查询页面的公开访问/分享配置。
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
openyida get-page-config <appType> <formUuid>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**输出**:
|
|
166
|
+
|
|
167
|
+
```json
|
|
168
|
+
{
|
|
169
|
+
"isOpen": true,
|
|
170
|
+
"openUrl": "/o/myapp",
|
|
171
|
+
"shareUrl": "/s/myapp"
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### 4. update-form-config - 表单配置更新
|
|
176
|
+
|
|
177
|
+
更新表单的基本配置,如显示/隐藏顶部导航。
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
openyida update-form-config <appType> <formUuid> <isRenderNav> <title>
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**参数**:
|
|
184
|
+
|
|
185
|
+
| 参数 | 必填 | 说明 |
|
|
186
|
+
| --- | --- | --- |
|
|
187
|
+
| `appType` | 是 | 应用 ID |
|
|
188
|
+
| `formUuid` | 是 | 表单 UUID |
|
|
189
|
+
| `isRenderNav` | 是 | `true` 显示顶部导航,`false` 隐藏顶部导航 |
|
|
190
|
+
| `title` | 是 | 页面标题 |
|
|
191
|
+
|
|
192
|
+
**输出**:
|
|
193
|
+
|
|
194
|
+
```json
|
|
195
|
+
{
|
|
196
|
+
"success": true,
|
|
197
|
+
"isRenderNav": false,
|
|
198
|
+
"message": "已隐藏顶部导航"
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## 前置依赖
|
|
203
|
+
|
|
204
|
+
- Node.js
|
|
205
|
+
- `yida-cli` 工具已安装(`npm install -g yida-cli`)
|
|
206
|
+
- 项目根目录存在 `.cache/cookies.json`(首次运行会自动触发扫码登录)
|
|
207
|
+
|
|
208
|
+
## 调用流程
|
|
209
|
+
|
|
210
|
+
1. 读取项目根目录的 `.cache/cookies.json` 获取登录态;若不存在则自动触发扫码登录
|
|
211
|
+
2. 验证 URL 格式
|
|
212
|
+
3. 调用对应接口进行验证或保存
|
|
213
|
+
4. 返回操作结果
|
|
214
|
+
|
|
215
|
+
## 文件结构
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
yida-page-config/
|
|
219
|
+
└── SKILL.md # 本文档
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
> 脚本已集成到 `openyida-cli` 工具中,通过 `openyida` 命令调用。
|
|
223
|
+
|
|
224
|
+
## 接口说明
|
|
225
|
+
|
|
226
|
+
### verifyShortUrl(验证短链接 URL)
|
|
227
|
+
|
|
228
|
+
- **地址**:`GET /dingtalk/web/{appType}/query/formdesign/verifyShortUrl.json`
|
|
229
|
+
- **参数**:
|
|
230
|
+
|
|
231
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
232
|
+
| --- | --- | --- | --- |
|
|
233
|
+
| `_api` | String | 是 | `App.verifyShortUrlForm` |
|
|
234
|
+
| `openUrl` | String | 否 | 公开访问路径 `/o/xxx` |
|
|
235
|
+
| `shareUrl` | String | 否 | 组织内分享路径 `/s/xxx` |
|
|
236
|
+
| `formUuid` | String | 是 | 表单 UUID |
|
|
237
|
+
| `_csrf_token` | String | 是 | CSRF Token |
|
|
238
|
+
|
|
239
|
+
- **返回值**:`content: true` 可用,`content: false` 被占用
|
|
240
|
+
|
|
241
|
+
### saveShareConfig(保存分享配置)
|
|
242
|
+
|
|
243
|
+
- **地址**:`POST /dingtalk/web/{appType}/query/formdesign/saveShareConfig.json`
|
|
244
|
+
- **参数**:
|
|
245
|
+
|
|
246
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
247
|
+
| --- | --- | --- | --- |
|
|
248
|
+
| `_api` | String | 是 | `Share.saveShareConfig` |
|
|
249
|
+
| `formUuid` | String | 是 | 表单 UUID |
|
|
250
|
+
| `openUrl` | String | 是 | 短链接路径 |
|
|
251
|
+
| `isOpen` | String | 是 | `y` 开启,`n` 关闭 |
|
|
252
|
+
| `openPageAuthConfig` | String | 否 | 权限配置 JSON |
|
|
253
|
+
| `_csrf_token` | String | 是 | CSRF Token |
|
|
254
|
+
|
|
255
|
+
- **返回值**:`success: true` 表示成功
|
|
256
|
+
|
|
257
|
+
## 与其他技能配合
|
|
258
|
+
|
|
259
|
+
- **页面开发** → 使用 `yida-custom-page` 技能
|
|
260
|
+
- **页面发布** → 使用 `yida-publish-page` 技能
|
|
261
|
+
- **获取表单 Schema** → 使用 `yida-get-schema` 技能
|