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,598 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: yida-create-form-page
|
|
3
|
+
description: 宜搭表单页面创建与更新技能,支持创建新表单(saveFormSchemaInfo + saveFormSchema + updateFormConfig)和更新已有表单(getFormSchema + saveFormSchema + updateFormConfig),支持 19 种字段类型(含 SerialNumberField 流水号)和字段增删改操作。
|
|
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
|
+
- form
|
|
16
|
+
- schema
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# 宜搭表单页面创建与更新技能
|
|
20
|
+
|
|
21
|
+
## 概述
|
|
22
|
+
|
|
23
|
+
本技能描述如何通过 HTTP 请求调用宜搭接口**创建**或**更新**表单页面。支持两种模式:
|
|
24
|
+
|
|
25
|
+
- **create 模式**:创建新表单页面,定义字段列表、字段类型、选项等。先创建空白表单获取 formUuid,再保存表单 Schema。
|
|
26
|
+
- **update 模式**:更新已有表单页面,支持对字段进行增删改、调整属性等操作。先获取现有 Schema,应用修改后保存。
|
|
27
|
+
|
|
28
|
+
## 何时使用
|
|
29
|
+
|
|
30
|
+
当以下场景发生时使用此技能:
|
|
31
|
+
- 用户需要在应用中创建数据收集表单(如报名表、调查表)
|
|
32
|
+
- 用户需要创建带有字段的表单页面来存储数据
|
|
33
|
+
- 用户需要更新已有表单的字段(增删改)
|
|
34
|
+
- 已通过 yida-create-app 创建应用后,需要创建表单来收集数据
|
|
35
|
+
|
|
36
|
+
## 使用方式
|
|
37
|
+
|
|
38
|
+
### create 模式(创建新表单)
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
openyida create-form create <appType> <formTitle> <fieldsJsonOrFile>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**参数说明**:
|
|
45
|
+
|
|
46
|
+
| 参数 | 必填 | 说明 |
|
|
47
|
+
| --- | --- | --- |
|
|
48
|
+
| `appType` | 是 | 应用 ID,如 `APP_XXX` |
|
|
49
|
+
| `formTitle` | 是 | 表单名称 |
|
|
50
|
+
| `fieldsJsonOrFile` | 是 | 字段定义,支持两种格式:JSON 字符串(以 `[` 开头)或 JSON 文件路径 |
|
|
51
|
+
|
|
52
|
+
**示例(JSON 字符串,推荐)**:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
openyida create-form create "APP_XXX" "用户信息表" '[{"type":"TextField","label":"姓名","required":true},{"type":"SelectField","label":"部门","dataSource":[{"text":{"zh_CN":"技术部","en_US":"技术部","type":"i18n"},"value":"技术部","sid":"serial_xxx","disable":false,"defaultChecked":false},{"text":{"zh_CN":"产品部","en_US":"产品部","type":"i18n"},"value":"产品部","sid":"serial_xxx","disable":false,"defaultChecked":false}]}]'
|
|
56
|
+
```
|
|
57
|
+
**示例(JSON 文件)**:
|
|
58
|
+
```bash
|
|
59
|
+
openyida create-form create "APP_xxx" "用户信息表" .cache/user-info-fields.json
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**输出**:日志输出到 stderr,JSON 结果输出到 stdout:
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{"success":true,"formUuid":"FORM-XXX","formTitle":"用户信息表","appType":"APP_xxx","fieldCount":4,"url":"{base_url}/APP_xxx/workbench/FORM-XXX"}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### update 模式(更新已有表单)
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
openyida create-form update <appType> <formUuid> <changesJsonOrFile>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**参数说明**:
|
|
75
|
+
|
|
76
|
+
| 参数 | 必填 | 说明 |
|
|
77
|
+
| --- | --- | --- |
|
|
78
|
+
| `appType` | 是 | 应用 ID,如 `APP_XXX` |
|
|
79
|
+
| `formUuid` | 是 | 表单页面的唯一标识,如 `FORM-XXX` |
|
|
80
|
+
| `changesJsonOrFile` | 是 | 修改定义,支持两种格式:JSON 字符串(以 `[` 开头自动识别)或 JSON 文件路径 |
|
|
81
|
+
|
|
82
|
+
**示例(JSON 字符串,推荐)**:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
openyida create-form update "APP_xxx" "FORM-yyy" '[{"action":"add","field":{"type":"TextField","label":"备注"}}]'
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**示例(JSON 文件)**:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
openyida create-form update "APP_xxx" "FORM-yyy" changes.json
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**输出**:日志输出到 stderr,JSON 结果输出到 stdout:
|
|
95
|
+
|
|
96
|
+
```json
|
|
97
|
+
{"success":true,"formUuid":"FORM-YYY","appType":"APP_XXX","changesApplied":3,"changes":[...],"url":"https://www.aliwork.com/APP_XXX/workbench/FORM-YYY"}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## 字段定义 JSON 格式
|
|
101
|
+
|
|
102
|
+
字段定义是一个 JSON 数组,每个元素描述一个字段。
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
[
|
|
106
|
+
{ "type": "TextField", "label": "姓名", "required": true },
|
|
107
|
+
{ "type": "SelectField", "label": "部门", "dataSource": [{"text":{"zh_CN":"技术部","en_US":"技术部","type":"i18n"},"value":"技术部","sid":"serial_xxx","disable":false,"defaultChecked":false},{"text":{"zh_CN":"产品部","en_US":"产品部","type":"i18n"},"value":"产品部","sid":"serial_xxx","disable":false,"defaultChecked":false}] },
|
|
108
|
+
{ "type": "DateField", "label": "入职日期" },
|
|
109
|
+
{ "type": "NumberField", "label": "年龄" },
|
|
110
|
+
{ "type": "TableField", "label": "费用明细", "children": [
|
|
111
|
+
{ "type": "TextField", "label": "项目" },
|
|
112
|
+
{ "type": "NumberField", "label": "金额" }
|
|
113
|
+
]}
|
|
114
|
+
]
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**字段属性**:
|
|
118
|
+
|
|
119
|
+
| 属性 | 类型 | 必填 | 说明 |
|
|
120
|
+
| --- | --- | --- | --- |
|
|
121
|
+
| `type` | String | 是 | 字段类型(见下方支持的字段类型) |
|
|
122
|
+
| `label` | String | 是 | 字段标签 |
|
|
123
|
+
| `required` | Boolean | 否 | 是否必填,**默认 `false`(非必填)** |
|
|
124
|
+
| `placeholder` | String | 否 | 占位提示文本 |
|
|
125
|
+
| `behavior` | String | 否 | 字段行为,`NORMAL`(正常,默认)/ `READONLY`(只读)/ `HIDDEN`(隐藏) |
|
|
126
|
+
| `visibility` | String[] | 否 | 显示端,`["PC", "MOBILE"]`(默认)/ `["PC"]`(仅 PC)/ `["MOBILE"]`(仅移动端) |
|
|
127
|
+
| `labelAlign` | String | 否 | 标签对齐方式,`top`(默认)/ `left` / `right` |
|
|
128
|
+
| `dataSource` | Array | 条件必填 | 选项数据源数组,**选项类字段(RadioField/SelectField/CheckboxField/MultiSelectField)必填**。每个元素是选项对象,格式详见下方各字段类型说明 |
|
|
129
|
+
| `multiple` | Boolean | 否 | 是否多选,`EmployeeField`/`DepartmentSelectField`/`CountrySelectField`/`AssociationFormField` 可用 |
|
|
130
|
+
| `children` | Object[] | 条件必填 | 子字段列表,`TableField` 必填 |
|
|
131
|
+
| `associationForm` | Object | 条件必填 | 关联表单配置对象,`AssociationFormField` 必填,详见下方说明 |
|
|
132
|
+
|
|
133
|
+
### 各字段类型默认属性
|
|
134
|
+
|
|
135
|
+
以下列出各字段类型创建时自动设置的**特有**默认属性(通用属性如 `fieldId`、`label`、`behavior`、`visibility` 等所有字段共享,不再重复列出)。
|
|
136
|
+
|
|
137
|
+
#### TextField / TextareaField
|
|
138
|
+
|
|
139
|
+
| 属性 | 默认值 | 说明 |
|
|
140
|
+
| --- | --- | --- |
|
|
141
|
+
| `validationType` | `"text"` | 校验类型 |
|
|
142
|
+
| `maxLength` | `200` | 最大字符数 |
|
|
143
|
+
| `hasClear` | `true` | 显示清除按钮 |
|
|
144
|
+
| `isCustomStore` | `true` | 自定义存储 |
|
|
145
|
+
| `scanCode.enabled` | `false` | 扫码输入 |
|
|
146
|
+
|
|
147
|
+
#### NumberField
|
|
148
|
+
|
|
149
|
+
| 属性 | 默认值 | 说明 |
|
|
150
|
+
| --- | --- | --- |
|
|
151
|
+
| `precision` | `0` | 小数位数 |
|
|
152
|
+
| `step` | `1` | 步进值 |
|
|
153
|
+
| `thousandsSeparators` | `false` | 千分位分隔符 |
|
|
154
|
+
| `isCustomStore` | `true` | 自定义存储 |
|
|
155
|
+
| `innerAfter` | "" | 单位 |
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
#### RateField
|
|
159
|
+
|
|
160
|
+
| 属性 | 默认值 | 说明 |
|
|
161
|
+
| --- | --- | --- |
|
|
162
|
+
| `count` | `5` | 星级总数 |
|
|
163
|
+
| `allowHalf` | `false` | 允许半星 |
|
|
164
|
+
| `showGrade` | `false` | 显示等级文案 |
|
|
165
|
+
|
|
166
|
+
#### RadioField / CheckboxField
|
|
167
|
+
|
|
168
|
+
| 属性 | 默认值 | 说明 |
|
|
169
|
+
| --- | --- | --- |
|
|
170
|
+
| `dataSourceType` | `"custom"` | 数据源类型 |
|
|
171
|
+
| `valueType` | `"custom"` | 值类型 |
|
|
172
|
+
| `dataSource` | 数组 | 选项数据源数组,每个元素是选项对象 |
|
|
173
|
+
| `defaultDataSource` | 对象 | 默认数据源配置,包含 `options` 数组 |
|
|
174
|
+
|
|
175
|
+
**`dataSource` 数组元素结构**:
|
|
176
|
+
|
|
177
|
+
| 属性 | 类型 | 必填 | 说明 |
|
|
178
|
+
| --- | --- | --- | --- |
|
|
179
|
+
| `text` | Object | 是 | 选项显示文本,i18n 对象格式 |
|
|
180
|
+
| `text.zh_CN` | String | 是 | 中文显示文本,**必须是字符串** |
|
|
181
|
+
| `text.en_US` | String | 是 | 英文显示文本,**必须是字符串** |
|
|
182
|
+
| `text.type` | String | 是 | 固定为 `"i18n"` |
|
|
183
|
+
| `value` | String | 是 | 选项值,**必须是字符串** |
|
|
184
|
+
| `sid` | String | 是 | 选项唯一标识,格式为 `serial_xxx` |
|
|
185
|
+
| `disable` | Boolean | 否 | 是否禁用,默认 `false` |
|
|
186
|
+
| `defaultChecked` | Boolean | 否 | 是否默认选中,默认 `false` |
|
|
187
|
+
|
|
188
|
+
**`defaultDataSource` 对象结构**:
|
|
189
|
+
|
|
190
|
+
| 属性 | 类型 | 说明 |
|
|
191
|
+
| --- | --- | --- |
|
|
192
|
+
| `complexType` | String | 固定为 `"custom"` |
|
|
193
|
+
| `options` | Array | 选项数组,元素结构与 `dataSource` 相同 |
|
|
194
|
+
| `formula` | String | 公式配置,默认空字符串 |
|
|
195
|
+
| `url` | String | 数据源 URL,默认空字符串 |
|
|
196
|
+
| `searchConfig` | Object | 搜索配置 |
|
|
197
|
+
| `searchConfig.type` | String | 请求类型,固定为 `"JSONP"` |
|
|
198
|
+
| `searchConfig.url` | String | 请求 URL,默认空字符串 |
|
|
199
|
+
| `searchConfig.beforeFetch` | String | 请求前处理脚本,默认空字符串 |
|
|
200
|
+
| `searchConfig.afterFetch` | String | 请求后处理脚本,默认空字符串 |
|
|
201
|
+
|
|
202
|
+
**完整示例**:
|
|
203
|
+
|
|
204
|
+
```json
|
|
205
|
+
{
|
|
206
|
+
"dataSourceType": "custom",
|
|
207
|
+
"dataSource": [
|
|
208
|
+
{
|
|
209
|
+
"text": { "zh_CN": "选项一", "en_US": "Option 1", "type": "i18n" },
|
|
210
|
+
"value": "选项一",
|
|
211
|
+
"sid": "serial_khe7yak4",
|
|
212
|
+
"disable": false,
|
|
213
|
+
"defaultChecked": false
|
|
214
|
+
}
|
|
215
|
+
],
|
|
216
|
+
"defaultDataSource": {
|
|
217
|
+
"complexType": "custom",
|
|
218
|
+
"options": [
|
|
219
|
+
{
|
|
220
|
+
"text": { "zh_CN": "选项一", "en_US": "Option 1", "type": "i18n" },
|
|
221
|
+
"value": "选项一",
|
|
222
|
+
"sid": "serial_khe7yak4",
|
|
223
|
+
"disable": false,
|
|
224
|
+
"defaultChecked": false
|
|
225
|
+
}
|
|
226
|
+
],
|
|
227
|
+
"formula": "",
|
|
228
|
+
"url": "",
|
|
229
|
+
"searchConfig": {
|
|
230
|
+
"type": "JSONP",
|
|
231
|
+
"url": "",
|
|
232
|
+
"beforeFetch": "",
|
|
233
|
+
"afterFetch": ""
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
#### SelectField / MultiSelectField
|
|
240
|
+
|
|
241
|
+
| 属性 | 默认值 | 说明 |
|
|
242
|
+
| --- | --- | --- |
|
|
243
|
+
| `showSearch` | `true` | 支持搜索 |
|
|
244
|
+
| `autoWidth` | `true` | 自动宽度 |
|
|
245
|
+
| `filterLocal` | `true` | 本地过滤 |
|
|
246
|
+
| `mode` | `"single"` / `"multiple"` | 选择模式 |
|
|
247
|
+
| `dataSourceType` | `"custom"` | 数据源类型 |
|
|
248
|
+
| `dataSource` | 数组 | 选项数据源数组,每个元素是选项对象 |
|
|
249
|
+
| `defaultDataSource` | 对象 | 默认数据源配置,包含 `options` 数组 |
|
|
250
|
+
|
|
251
|
+
**选项数据格式**:与 RadioField/CheckboxField 完全一致,每个选项对象包含以下属性:
|
|
252
|
+
|
|
253
|
+
| 属性 | 类型 | 必填 | 说明 |
|
|
254
|
+
| --- | --- | --- | --- |
|
|
255
|
+
| `text` | Object | 是 | 选项显示文本,i18n 对象格式 |
|
|
256
|
+
| `text.zh_CN` | String | 是 | 中文显示文本,**必须是字符串** |
|
|
257
|
+
| `text.en_US` | String | 是 | 英文显示文本,**必须是字符串** |
|
|
258
|
+
| `text.type` | String | 是 | 固定为 `"i18n"` |
|
|
259
|
+
| `value` | String | 是 | 选项值,**必须是字符串** |
|
|
260
|
+
| `sid` | String | 是 | 选项唯一标识,格式为 `serial_xxx` |
|
|
261
|
+
| `disable` | Boolean | 否 | 是否禁用,默认 `false` |
|
|
262
|
+
| `defaultChecked` | Boolean | 否 | 是否默认选中,默认 `false` |
|
|
263
|
+
|
|
264
|
+
**`defaultDataSource` 对象结构**:
|
|
265
|
+
- `complexType`: `"custom"`
|
|
266
|
+
- `options`: 选项数组,元素结构与 `dataSource` 相同
|
|
267
|
+
- `formula`: 公式配置,默认空字符串
|
|
268
|
+
- `url`: 数据源 URL,默认空字符串
|
|
269
|
+
- `searchConfig`: 搜索配置对象,包含 `type`(固定 `"JSONP"`)、`url`、`beforeFetch`、`afterFetch`
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
#### DateField
|
|
273
|
+
|
|
274
|
+
| 属性 | 默认值 | 说明 |
|
|
275
|
+
| --- | --- | --- |
|
|
276
|
+
| `format` | `"YYYY-MM-DD"` | 日期格式 |
|
|
277
|
+
| `hasClear` | `true` | 显示清除按钮 |
|
|
278
|
+
| `resetTime` | `false` | 重置时间 |
|
|
279
|
+
| `disabledDate.type` | `"none"` | 禁用日期规则 |
|
|
280
|
+
format 格式:
|
|
281
|
+
- `"YYYY"`:年
|
|
282
|
+
- `"YYYY-MM"`:年-月
|
|
283
|
+
- `"YYYY-MM-DD"`:年-月-日
|
|
284
|
+
- `"YYYY-MM-DD HH:mm"`:年-月-日 时分
|
|
285
|
+
- `"YYYY-MM-DD HH:mm:ss"`:年-月-日 时分秒
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
#### CascadeDateField
|
|
289
|
+
|
|
290
|
+
| 属性 | 默认值 | 说明 |
|
|
291
|
+
| --- | --- | --- |
|
|
292
|
+
| `format` | `"YYYY-MM-DD"` | 日期格式 |
|
|
293
|
+
| `hasClear` | `true` | 显示清除按钮 |
|
|
294
|
+
| `resetTime` | `false` | 重置时间 |
|
|
295
|
+
format 格式:
|
|
296
|
+
- `"YYYY"`:年
|
|
297
|
+
- `"YYYY-MM"`:年-月
|
|
298
|
+
- `"YYYY-MM-DD"`:年-月-日
|
|
299
|
+
- `"YYYY-MM-DD HH:mm"`:年-月-日 时分
|
|
300
|
+
- `"YYYY-MM-DD HH:mm:ss"`:年-月-日 时分秒
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
#### EmployeeField
|
|
304
|
+
|
|
305
|
+
| 属性 | 默认值 | 说明 |
|
|
306
|
+
| --- | --- | --- |
|
|
307
|
+
| `userRangeType` | `"ALL"` | 人员范围 |
|
|
308
|
+
| `showEmpIdType` | `"NAME"` | 显示方式 |
|
|
309
|
+
| `startWithDepartmentId` | `"SELF"` | 起始部门 |
|
|
310
|
+
| `renderLinkForView` | `true` | 查看时渲染链接 |
|
|
311
|
+
| `closeOnSelect` | `false` | 选择后关闭 |
|
|
312
|
+
> 如果需要人员默认选中当前登录人,用法参考 `../../reference/employee-field.md`
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
#### DepartmentSelectField
|
|
316
|
+
|
|
317
|
+
| 属性 | 默认值 | 说明 |
|
|
318
|
+
| --- | --- | --- |
|
|
319
|
+
| `deptRangeType` | `"ALL"` | 部门范围 |
|
|
320
|
+
| `mode` | `"single"` | 选择模式 |
|
|
321
|
+
| `isShowDeptFullName` | `false` | 显示部门全路径 |
|
|
322
|
+
| `hasSelectAll` | `false` | 全选按钮 |
|
|
323
|
+
|
|
324
|
+
#### CountrySelectField
|
|
325
|
+
|
|
326
|
+
| 属性 | 默认值 | 说明 |
|
|
327
|
+
| --- | --- | --- |
|
|
328
|
+
| `mode` | `"single"` | 选择模式 |
|
|
329
|
+
| `showSearch` | `true` | 支持搜索 |
|
|
330
|
+
| `hasSelectAll` | `false` | 全选按钮 |
|
|
331
|
+
|
|
332
|
+
#### AddressField
|
|
333
|
+
|
|
334
|
+
| 属性 | 默认值 | 说明 |
|
|
335
|
+
| --- | --- | --- |
|
|
336
|
+
| `countryMode` | `"default"` | 国家模式 |
|
|
337
|
+
| `addressType` | `"ADDRESS"` | 地址类型 |
|
|
338
|
+
| `enableLocation` | `true` | 启用定位 |
|
|
339
|
+
| `showCountry` | `false` | 显示国家 |
|
|
340
|
+
|
|
341
|
+
#### AttachmentField
|
|
342
|
+
|
|
343
|
+
| 属性 | 默认值 | 说明 |
|
|
344
|
+
| --- | --- | --- |
|
|
345
|
+
| `listType` | `"text"` | 列表展示类型 |
|
|
346
|
+
| `multiple` | `true` | 允许多文件 |
|
|
347
|
+
| `limit` | `9` | 最大文件数 |
|
|
348
|
+
| `maxFileSize` | `100` | 最大文件大小(MB) |
|
|
349
|
+
| `autoUpload` | `true` | 自动上传 |
|
|
350
|
+
| `onlineEdit` | `false` | 在线编辑 |
|
|
351
|
+
|
|
352
|
+
#### ImageField
|
|
353
|
+
|
|
354
|
+
| 属性 | 默认值 | 说明 |
|
|
355
|
+
| --- | --- | --- |
|
|
356
|
+
| `listType` | `"image"` | 列表展示类型 |
|
|
357
|
+
| `multiple` | `true` | 允许多图片 |
|
|
358
|
+
| `limit` | `9` | 最大图片数 |
|
|
359
|
+
| `maxFileSize` | `50` | 最大文件大小(MB) |
|
|
360
|
+
| `accept` | `"image/*"` | 接受文件类型 |
|
|
361
|
+
| `enableCameraDate` | `true` | 拍照水印日期 |
|
|
362
|
+
| `enableCameraLocation` | `true` | 拍照水印定位 |
|
|
363
|
+
| `onlyCameraUpload` | `false` | 仅拍照上传 |
|
|
364
|
+
|
|
365
|
+
#### TableField
|
|
366
|
+
|
|
367
|
+
| 属性 | 默认值 | 说明 |
|
|
368
|
+
| --- | --- | --- |
|
|
369
|
+
| `showIndex` | `true` | 显示行号 |
|
|
370
|
+
| `pageSize` | `20` | 每页行数 |
|
|
371
|
+
| `maxItems` | `500` | 最大行数 |
|
|
372
|
+
| `minItems` | `1` | 最小行数 |
|
|
373
|
+
| `layout` | `"TABLE"` | PC 端布局 |
|
|
374
|
+
| `mobileLayout` | `"TILED"` | 移动端布局 |
|
|
375
|
+
| `theme` | `"split"` | 表格主题 |
|
|
376
|
+
| `showActions` | `true` | 显示操作列 |
|
|
377
|
+
| `showDelAction` | `true` | 显示删除按钮 |
|
|
378
|
+
| `showCopyAction` | `false` | 显示复制按钮 |
|
|
379
|
+
| `enableExport` | `true` | 允许导出 |
|
|
380
|
+
| `enableImport` | `true` | 允许导入 |
|
|
381
|
+
| `enableBatchDelete` | `false` | 批量删除 |
|
|
382
|
+
| `enableSummary` | `false` | 启用汇总 |
|
|
383
|
+
| `isFreezeOperateColumn` | `true` | 冻结操作列 |
|
|
384
|
+
|
|
385
|
+
#### AssociationFormField
|
|
386
|
+
|
|
387
|
+
> 详细用法参考 `../../reference/association-form-field.md`
|
|
388
|
+
|
|
389
|
+
#### SerialNumberField
|
|
390
|
+
|
|
391
|
+
| 属性 | 默认值 | 说明 |
|
|
392
|
+
| --- | --- | --- |
|
|
393
|
+
| `serialNumberRule` | 默认规则(前缀+自动递增) | 流水号生成规则数组 |
|
|
394
|
+
| `serialNumPreview` | `"serial00001"` | 流水号预览 |
|
|
395
|
+
| `serialNumReset` | `1` | 重置起始值 |
|
|
396
|
+
| `syncSerialConfig` | `false` | 是否同步流水号配置 |
|
|
397
|
+
| `formula` | 自动生成 | 流水号公式(由系统自动生成,包含 corpId、appType、formUuid、fieldId 和规则配置) |
|
|
398
|
+
|
|
399
|
+
**默认流水号规则**:
|
|
400
|
+
- 规则1:固定前缀 "serial"(4位)
|
|
401
|
+
- 规则2:自动递增数字(5位,从1开始,不重置)
|
|
402
|
+
|
|
403
|
+
**formula 格式**(对象格式,不是字符串):
|
|
404
|
+
```json
|
|
405
|
+
{
|
|
406
|
+
"formula": {
|
|
407
|
+
"expression": "SERIALNUMBER(\"<corpId>\", \"<appType>\", \"<formUuid>\", \"<fieldId>\", \"<escapedRuleJson>\")"
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
其中 `<escapedRuleJson>` 是 `{ "type": "custom", "value": <serialNumberRule数组> }` 的 JSON 字符串,需对双引号转义(`"` → `\"`)。
|
|
413
|
+
|
|
414
|
+
> 详细用法参考 `../../reference/serial-number-field.md`
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
## 修改定义 JSON 格式(update 模式)
|
|
418
|
+
|
|
419
|
+
修改定义是一个 JSON 数组,每个元素描述一条修改操作。可以直接作为命令行参数传入 JSON 字符串,也可以写入文件后传入文件路径。
|
|
420
|
+
|
|
421
|
+
```json
|
|
422
|
+
[
|
|
423
|
+
{ "action": "add", "field": { "type": "TextField", "label": "姓名", "required": true } },
|
|
424
|
+
{ "action": "add", "field": { "type": "SelectField", "label": "部门", "dataSource": [{"text":{"zh_CN":"技术部","en_US":"技术部","type":"i18n"},"value":"技术部","sid":"serial_xxx","disable":false,"defaultChecked":false},{"text":{"zh_CN":"产品部","en_US":"产品部","type":"i18n"},"value":"产品部","sid":"serial_xxx","disable":false,"defaultChecked":false}] }, "after": "姓名" },
|
|
425
|
+
{ "action": "delete", "label": "备注" },
|
|
426
|
+
{ "action": "update", "label": "年龄", "changes": { "required": true, "placeholder": "请输入年龄" } },
|
|
427
|
+
{ "action": "update", "label": "状态", "changes": { "label": "审批状态", "dataSource": [{"text":{"zh_CN":"待审批","en_US":"待审批","type":"i18n"},"value":"待审批","sid":"serial_xxx","disable":false,"defaultChecked":false},{"text":{"zh_CN":"已通过","en_US":"已通过","type":"i18n"},"value":"已通过","sid":"serial_xxx","disable":false,"defaultChecked":false},{"text":{"zh_CN":"已拒绝","en_US":"已拒绝","type":"i18n"},"value":"已拒绝","sid":"serial_xxx","disable":false,"defaultChecked":false}] } }
|
|
428
|
+
]
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
### 操作类型
|
|
432
|
+
|
|
433
|
+
| 操作 | 必填属性 | 可选属性 | 说明 |
|
|
434
|
+
| --- | --- | --- | --- |
|
|
435
|
+
| `add` | `field.type`, `field.label` | `after`, `before`, `field.required`, `field.options`, `field.placeholder`, `field.multiple`, `field.children`, `field.behavior`, `field.visibility`, `field.labelAlign` | 新增字段,`after`/`before` 指定插入位置(按字段标签匹配) |
|
|
436
|
+
| `delete` | `label` | — | 删除指定标签的字段 |
|
|
437
|
+
| `update` | `label`, `changes` | `tableLabel` | 修改指定标签字段的属性;若字段在子表内,需通过 `tableLabel` 指定父子表标签 |
|
|
438
|
+
|
|
439
|
+
### update 的 changes 支持的属性
|
|
440
|
+
|
|
441
|
+
| 属性 | 类型 | 说明 |
|
|
442
|
+
| --- | --- | --- |
|
|
443
|
+
| `label` | String | 修改字段标签 |
|
|
444
|
+
| `required` | Boolean | 修改是否必填 |
|
|
445
|
+
| `placeholder` | String | 修改占位提示 |
|
|
446
|
+
| `dataSource` | Array | 修改选项数据源(选项类字段:RadioField/SelectField/CheckboxField/MultiSelectField),每个元素是选项对象,格式见 [RadioField 选项格式](#radiofield--checkboxfield) |
|
|
447
|
+
| `multiple` | Boolean | 修改是否多选(EmployeeField/DepartmentSelectField/CountrySelectField) |
|
|
448
|
+
| `behavior` | String | 修改字段行为:`NORMAL` / `READONLY` / `HIDDEN` |
|
|
449
|
+
| `visibility` | String[] | 修改显示端:`["PC", "MOBILE"]` / `["PC"]` / `["MOBILE"]` |
|
|
450
|
+
| `innerAfter` | String | 修改数字字段单位(仅 `NumberField` 可用),如 `"H"`、`"元"` |
|
|
451
|
+
|
|
452
|
+
### add 的 field 字段定义
|
|
453
|
+
|
|
454
|
+
与 create 模式的字段定义格式完全一致,参见上方「字段定义 JSON 格式」章节。
|
|
455
|
+
|
|
456
|
+
|
|
457
|
+
## 前置依赖
|
|
458
|
+
|
|
459
|
+
- Node.js
|
|
460
|
+
- 项目根目录存在 `.cache/cookies.json`(首次运行会自动触发扫码登录)
|
|
461
|
+
|
|
462
|
+
## 调用流程
|
|
463
|
+
|
|
464
|
+
### create 模式
|
|
465
|
+
|
|
466
|
+
1. 准备字段定义 JSON 文件
|
|
467
|
+
2. 读取项目根目录的 `.cache/cookies.json` 获取登录态(包含 corpId);若不存在则自动触发扫码登录
|
|
468
|
+
3. 调用 `saveFormSchemaInfo` 接口创建空白表单,获取 formUuid;根据响应体 `errorCode` 自动处理异常(详见 `yida-login` 技能文档「错误处理机制」章节)
|
|
469
|
+
4. 根据字段定义生成表单 Schema JSON(SerialNumberField 的 formula 会自动使用 corpId、appType、formUuid 和 fieldId 构建)
|
|
470
|
+
5. 调用 `saveFormSchema` 接口保存 Schema;同样根据响应体 `errorCode` 自动处理异常
|
|
471
|
+
6. 调用 `updateFormConfig` 接口更新表单配置(MINI_RESOURCE = 0);同样根据响应体 `errorCode` 自动处理异常
|
|
472
|
+
|
|
473
|
+
### update 模式
|
|
474
|
+
|
|
475
|
+
1. 读取项目根目录的 `.cache/cookies.json` 获取登录态(包含 corpId);若不存在则自动触发扫码登录
|
|
476
|
+
2. 调用 `getFormSchema` 接口获取当前表单的完整 Schema;根据响应体 `errorCode` 自动处理异常:
|
|
477
|
+
- `errorCode: "TIANSHU_000030"`(csrf 校验失败)→ 自动刷新 csrf_token 后重试
|
|
478
|
+
- `errorCode: "307"`(登录过期)→ 自动重新登录后重试
|
|
479
|
+
3. 解析修改定义(JSON 字符串或 JSON 文件)
|
|
480
|
+
4. 按顺序执行每条修改操作:
|
|
481
|
+
- **add**:构建新字段组件,插入到指定位置(或末尾)
|
|
482
|
+
- **delete**:按标签查找并移除字段
|
|
483
|
+
- **update**:按标签查找字段并更新其属性
|
|
484
|
+
5. 为所有 SerialNumberField 设置 formula(使用 corpId、appType、formUuid 和 fieldId)
|
|
485
|
+
6. 调用 `saveFormSchema` 接口保存修改后的 Schema;同样根据响应体 `errorCode` 自动处理异常(同上)
|
|
486
|
+
7. 调用 `updateFormConfig` 接口更新表单配置(MINI_RESOURCE = 0);同样根据响应体 `errorCode` 自动处理异常(同上)
|
|
487
|
+
|
|
488
|
+
## 文件结构
|
|
489
|
+
|
|
490
|
+
```
|
|
491
|
+
yida-create-form-page/
|
|
492
|
+
└── SKILL.md # 本文档
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
|
|
496
|
+
|
|
497
|
+
## 支持的字段类型
|
|
498
|
+
|
|
499
|
+
| 字段类型 | componentName | 说明 | 特殊属性 |
|
|
500
|
+
| --- | --- | --- | --- |
|
|
501
|
+
| `TextField` | TextField | 单行文本,用于姓名、标题、编号等 | — |
|
|
502
|
+
| `TextareaField` | TextareaField | 多行文本,用于描述、备注等 | — |
|
|
503
|
+
| `RadioField` | RadioField | 单选,用于性别、状态等互斥选项 | `options` |
|
|
504
|
+
| `SelectField` | SelectField | 下拉单选,适合选项较多(>5)的场景 | `options` |
|
|
505
|
+
| `CheckboxField` | CheckboxField | 多选,用于兴趣爱好、技能标签等 | `options` |
|
|
506
|
+
| `MultiSelectField` | MultiSelectField | 下拉多选,适合选项较多(>5)的场景 | `options` |
|
|
507
|
+
| `NumberField` | NumberField | 数字,用于金额、数量、年龄等 | — |
|
|
508
|
+
| `RateField` | RateField | 评分,用于满意度评价等星级打分 | — |
|
|
509
|
+
| `DateField` | DateField | 日期,用于生日、截止日期等 | — |
|
|
510
|
+
| `CascadeDateField` | CascadeDateField | 级联日期,用于日期范围选择 | — |
|
|
511
|
+
| `EmployeeField` | EmployeeField | 成员,选择组织内成员 | `multiple` |
|
|
512
|
+
| `DepartmentSelectField` | DepartmentSelectField | 部门,选择组织内部门 | `multiple` |
|
|
513
|
+
| `CountrySelectField` | CountrySelectField | 国家,选择国家/地区 | `multiple` |
|
|
514
|
+
| `AddressField` | AddressField | 地址,用于收货地址等 | — |
|
|
515
|
+
| `AttachmentField` | AttachmentField | 附件上传 | — |
|
|
516
|
+
| `ImageField` | ImageField | 图片上传 | — |
|
|
517
|
+
| `TableField` | TableField | 表格(子表),用于结构化数据 | `children` |
|
|
518
|
+
| `AssociationFormField` | AssociationFormField | 关联表单 | `associationForm` |
|
|
519
|
+
| `SerialNumberField` | SerialNumberField | 流水号,自动生成唯一编号 | `serialNumberRule` |
|
|
520
|
+
|
|
521
|
+
## 与其他技能配合
|
|
522
|
+
|
|
523
|
+
1. **创建应用** → 使用 `yida-create-app` 技能获取 `appType`
|
|
524
|
+
2. **创建表单页面** → 本技能(create 模式),获取 `formUuid` 和字段 ID
|
|
525
|
+
3. **更新表单页面** → 本技能(update 模式),对已有表单进行字段增删改
|
|
526
|
+
4. **获取表单 Schema** → 可使用 `get-schema` 技能预先查看当前表单结构
|
|
527
|
+
5. **记录配置** → 将 `formUuid` 和字段 ID 写入 `prd/<项目名>.md`
|
|
528
|
+
6. **创建自定义页面** → 使用 `yida-create-page` 技能
|
|
529
|
+
7. **部署页面代码** → 使用 `yida-publish` 技能
|
|
530
|
+
|
|
531
|
+
> **提示**:如果需要创建的是自定义展示页面(无字段,用于部署 JSX 代码),请使用 `yida-create-page` 和 `yida-custom-page` 技能。
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
## 注意事项
|
|
535
|
+
- **临时文件写在当前工程根目录的 .cache 文件夹中,如果没有就创建一个文件夹,注意不要写在系统的其他文件夹中**
|
|
536
|
+
- update 模式中,修改定义 JSON 的操作按顺序执行,注意操作间的依赖关系(如先删后加)
|
|
537
|
+
- 字段匹配基于中文标签(`label.zh_CN`),确保标签名称准确
|
|
538
|
+
- 新增字段时会自动更新 `componentsMap`,无需手动处理
|
|
539
|
+
- 建议在重要修改前先通过 `get-schema` 技能查看当前 Schema 结构
|
|
540
|
+
- 脚本兼容旧的 create 模式调用方式(不带 `create` 前缀),但推荐使用新的显式模式参数
|
|
541
|
+
|
|
542
|
+
|
|
543
|
+
## 其他 yida-api 参考路径
|
|
544
|
+
|
|
545
|
+
| 文档 | 路径 | 说明 |
|
|
546
|
+
| --- | --- | --- |
|
|
547
|
+
| 宜搭 JS API | `../../reference/yida-api.md` | 表单操作类 API(7 个)、流程操作类 API(6 个)、表单设计类 API(4 个)、工具类 API(14 个),共 31 个 API 的完整参数与示例 |
|
|
548
|
+
| 大模型 AI 接口 | `../../reference/model-api.md` | AI 文本生成接口的请求参数、返回值结构与调用示例 |
|
|
549
|
+
|
|
550
|
+
### 表单设计类 API 说明
|
|
551
|
+
|
|
552
|
+
表单设计类 API 位于 `../../reference/yida-api.md` 的「表单设计类 API」章节,包含以下 4 个接口:
|
|
553
|
+
|
|
554
|
+
| 接口 | 说明 |
|
|
555
|
+
| --- | --- |
|
|
556
|
+
| `saveFormSchemaInfo` | 创建空白表单(create 模式),返回新创建的 `formUuid` |
|
|
557
|
+
| `getFormSchema` | 获取表单 Schema(update 模式),返回完整的表单 Schema JSON |
|
|
558
|
+
| `saveFormSchema` | 保存表单 Schema(create/update 两种模式共用) |
|
|
559
|
+
| `updateFormConfig` | 更新表单配置(设置 `MINI_RESOURCE` 等配置项) |
|
|
560
|
+
|
|
561
|
+
### 表单数据操作 API 说明
|
|
562
|
+
|
|
563
|
+
表单操作类 API 位于 `../../reference/yida-api.md` 的「表单操作类 API」章节,包含以下 7 个接口:
|
|
564
|
+
|
|
565
|
+
| 接口 | 说明 |
|
|
566
|
+
| --- | --- |
|
|
567
|
+
| `saveFormData` | 新建表单实例,用于提交表单数据 |
|
|
568
|
+
| `updateFormData` | 更新表单中指定组件值 |
|
|
569
|
+
| `searchFormDataIds` | 根据条件搜索表单实例 ID 列表 |
|
|
570
|
+
| `getFormComponentDefinationList` | 获取表单定义(字段结构) |
|
|
571
|
+
| `deleteFormData` | 删除表单实例 |
|
|
572
|
+
| `getFormDataById` | 根据表单实例 ID 查询表单实例详情 |
|
|
573
|
+
| `searchFormDatas` | 根据条件搜索表单实例详情列表 |
|
|
574
|
+
|
|
575
|
+
**常用场景**:
|
|
576
|
+
|
|
577
|
+
- **Mock 数据**:使用 `saveFormData` 批量创建测试数据
|
|
578
|
+
- **数据查询**:使用 `searchFormDatas` 或 `getFormDataById` 获取表单数据
|
|
579
|
+
- **数据更新**:使用 `updateFormData` 修改已有表单数据
|
|
580
|
+
- **数据清理**:使用 `deleteFormData` 删除测试数据
|
|
581
|
+
|
|
582
|
+
**使用示例**(Mock 数据):
|
|
583
|
+
|
|
584
|
+
```javascript
|
|
585
|
+
// 创建测试数据
|
|
586
|
+
this.utils.yida.saveFormData({
|
|
587
|
+
formUuid: 'FORM-XXX',
|
|
588
|
+
appType: 'APP_XXX',
|
|
589
|
+
formDataJson: JSON.stringify({
|
|
590
|
+
textField_xxx: '测试姓名',
|
|
591
|
+
selectField_xxx: '选项一',
|
|
592
|
+
numberField_xxx: 100,
|
|
593
|
+
}),
|
|
594
|
+
}).then((res) => {
|
|
595
|
+
console.log('创建成功,实例ID:', res.result);
|
|
596
|
+
});
|
|
597
|
+
```
|
|
598
|
+
|