Yida Dashboard
openyida/openyida
经营分析看板/驾驶舱/数据大屏产品化交付;用于指标判断、趋势分析或投屏监控,不用于普通待办工作台和办事门户。含真实数据、筛选联动、卡片截图、组织内短链和钉钉待办闭环。常规图表使用 yida-rechart;明确 ECharts、复杂 ECharts option 或维护旧图表时使用 yida-chart。普通统计优先 yida-report。
钉钉宜搭低代码开发助手。用于创建表单和自定义页面、编写 JS 动作面板、使用 JS-API、配置数据源、设计流程自动化。适用于宜搭表单开发、JS 代码调试、API 集成等场景。
$ npx skills add LeoYeAI/openclaw-master-skills --skill yida-dev -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills yida-dev --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/yida-dev .claude/skills/yida-dev && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "yida-dev" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/yida-dev into .claude/skills/yida-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yida-dev", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/yida-devType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add LeoYeAI/openclaw-master-skills --skill yida-dev -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills yida-dev --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/yida-dev .agents/skills/yida-dev && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "yida-dev" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/yida-dev into .agents/skills/yida-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yida-dev", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LeoYeAI/openclaw-master-skills --skill yida-dev -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills yida-dev --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/yida-dev .cursor/skills/yida-dev && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "yida-dev" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/yida-dev into .cursor/skills/yida-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yida-dev", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/LeoYeAI/openclaw-master-skills.git --path skills/yida-dev--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add LeoYeAI/openclaw-master-skills --skill yida-dev -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills yida-dev --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/yida-dev .gemini/skills/yida-dev && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "yida-dev" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/yida-dev into .gemini/skills/yida-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yida-dev", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install LeoYeAI/openclaw-master-skills yida-devInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add LeoYeAI/openclaw-master-skills --skill yida-dev -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/yida-dev .github/skills/yida-dev && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "yida-dev" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/yida-dev into .github/skills/yida-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yida-dev", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LeoYeAI/openclaw-master-skills --skill yida-dev -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills yida-dev --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/yida-dev .opencode/skills/yida-dev && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "yida-dev" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/yida-dev into .opencode/skills/yida-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yida-dev", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
yida-dev钉钉宜搭低代码开发助手。用于创建表单和自定义页面、编写 JS 动作面板、使用 JS-API、配置数据源、设计流程自动化。适用于宜搭表单开发、JS 代码调试、API 集成等场景。
Yida Dev is an agent skill from LeoYeAI/openclaw-master-skills. 钉钉宜搭低代码开发助手。用于创建表单和自定义页面、编写 JS 动作面板、使用 JS-API、配置数据源、设计流程自动化。适用于宜搭表单开发、JS 代码调试、API 集成等场景。
Its SKILL.md is about 5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 14 other files, including scripts and reference files (for example `_meta.json`, `references/formulas.md` and `references/integrations.md`).
The repository describes itself as: 🧠 Curated collection of 1209+ best OpenClaw skills — weekly updated by MyClaw.ai. The licence is MIT.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit e5199b5. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 4 files in scripts/ (JavaScript), which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
g.alicdn.comAlso links to:
docs.aliwork.comdevelopers.aliwork.comopen.dingtalk.comaliwork.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Yida Dev loads about 5k tokens when it runs, and up to ~13k if it reads all its reference files. Until then it costs about 24 tokens; SKILL.md has 896 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from LeoYeAI/openclaw-master-skills at commit e5199b5, republished under its MIT licence (© LeoYeAI). 896 words, ~4,986 tokens.
.claude/skills/yida-dev/SKILL.md (or your agent's skills folder). This skill also uses 12 other files; get the full folder from GitHub.与传统前端不同,宜搭有独特的开发模式:
import Button、❌ 禁止 const Page = () => {...}this.$('textField_xxx') 操作已存在的组件宜搭组件的 fieldId 格式为:组件类型_随机后缀
| 组件类型 | fieldId 示例 |
|---|---|
| 单行文本 | textField_m2iqeyip |
| 多行文本/文本域 | textareaField_lu7rqky5 |
| 单选 | radioField_m2l8tqxr |
| 流水号 | serialNumberField_lr76bpi4 |
| 数字 | numberField_mbhl6h58 |
| 下拉选择 | selectField_mbhjt4zb |
| 日期 | dateField_ll0bcdf1 |
| 附件 | attachmentField_mbhjt4zd |
| 图片 | imageField_mbhjt4zl |
| 人员选择 | employeeField_mbhjt4zr |
| 人员多选 | employeeField_xxx + multiple: true |
| 部门选择 | departmentSelectField_lu7qx4i5 |
| 子表单/明细表 | tableField_mbhjt4zy |
| 地址 | addressField_mbhjt508 |
| 关联表单 | associationFormField_mbhjt50s |
| 区块 | pageSection_m2vthls5 |
| 按钮 | button_invoiceAdd |
| 发票组件 | ccInvoiceFieldComponentView_m2vv4aux |
| 多列布局 | columnsLayout_m2k6t8hx |
| 标签页 | tabsLayout_lkcfmpjv |
state.stathis.$('fieldId').setBehavior('HIDDEN')export function onChange({ value }) { } - 值变化事件export function didMount() { } - 页面加载完成宜搭组件 onChange 事件中修改状态需要延迟:
export function onChange({ value }) {
setTimeout(() => {
this.setState({ sta: value === '价款合同' })
}, 200)
}组件属性中设置 behavior: "HIDDEN" 可隐藏字段(可用于数据传递)
组件属性中设置 behavior: "READONLY" 可设为只读
在组件属性中设置 valueType: "formula" + formula: "#{textField_xxx}"
{
"valueType": "formula",
"formula": "CONCATENATE(\"XMBH\",TEXT(TODAY(),\"yyMMdd\"),MID(TEXT(TIMESTAMP(NOW())),9,5))"
}新增行时获取行数:
export function onAddClick(newGroupId) {
const count = this.$('tableField_xxx').getValue().length
this.$('textField_count').setValue(count + '条')
}遍历子表单行,计算某列的不重复值数量:
export function onChange({ value, extra }) {
const subFormInst = this.$('tableField_xxx')
const items = subFormInst.getItems()
let distinctNum = []
items.forEach(item => {
const rowData = subFormInst.getItemValue(item)
if (rowData['textField_col'] && !distinctNum.includes(rowData['textField_col'])) {
distinctNum.push(rowData['textField_col'])
}
})
this.$('numberField_count').setValue(distinctNum.length)
}人员选择变化时获取人员信息:
export function onChange({ value }) {
// value 是人员对象 { name, userId, ... }
this.$('textField_name').setValue(value.name)
}用于分组显示,有标题头:
{
"componentName": "PageSection",
"props": {
"title": { "zh_CN": "基本信息" },
"behavior": "NORMAL", // 或 "HIDDEN" 隐藏整个区块
"showHeader": true
}
}选择关联表单时自动填充其他字段:
{
"dataFillingRules": [
{ "sourceType": "SelectField", "targetType": "TextField", "source": "selectField_src", "target": "textField_target" }
]
}设置 valueType: "linkage" + linkage 属性从其他表单获取数据
汇总子表单某列:
{
"valueType": "formula",
"formula": "SUM(#{numberField_column})"
}单选切换时显示/隐藏字段(配置选项的联动规则)
失焦时执行校验(如手机号验证):
export function onBlur() {
let phone = this.$('textField_xxx').getValue()
if (!phone) return
if (!this.isPhoneNumber(phone)) {
this.utils.toast({ title: '请输入正确的手机号', type: 'warning' })
this.$('textField_xxx').setValue('')
}
}
export function isPhoneNumber(input) {
return /^1\d{10}$/.test(input.replace(/\D/g, ''))
}设置 minValue 最小值:
{ "validation": [{ "type": "minValue", "param": "0" }] }| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| dataSource | 选项数据 | DataSource[] | [] |
| onChange | 值变化事件 | (value: string) => void | - |
| showSearch | 展开后能搜索 | boolean | true |
| filterLocal | 本地过滤 | boolean | - |
| mode | single/multi | string | single |
| hasClear | 清除按钮 | boolean | true |
| autoWidth | 菜单对齐 | boolean | true |
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| onChange | 值变化事件 | ({value, extra}) => void | - |
| onAddClick | 新增行事件 | (newGroupId) => void | - |
| onDelClick | 删除行事件 | (groupId, item) => void | - |
| maxItems | 最大条数 | number | 50 |
| addButtonPosition | 新增位置 | 'top' | 'bottom' | bottom |
| layoutSetting.layout | 排列方式 | 'TILED' | 'TABLE' | TABLE |
| layoutSetting.theme | 主题 | 'zebra' | 'split' | 'border' | split |
| showIndex | 显示序号 | boolean | true |
const table = this.$('tableField_xxx')
table.getValue() // 获取所有行数据
table.getItems() // 获取行实例数组
table.getItemValue(item) // 获取某行数据
table.addItem() // 新增一行
table.removeItem(item) // 删除一行| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| precision | 小数位数 (0-20) | number | 0 |
| thousandsSeparators | 千分位 | boolean | false |
| innerAfter | 单位 | string | - |
| innerBefore | 前缀 | string | - |
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| dataSource | 选项 | DataSource[] | [] |
| onChange | 值变化 | (value) => void | - |
| shape | 形状 | 'default' | 'button' | default |
| itemDirection | 排列 | 'hoz' | 'ver' | hoz |
| supportInverse | 反选 | boolean | false |
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| layout | 分栏配置 | string | '6:6' |
| columnGap | 列间距 | number | 0 |
| rowGap | 行间距 | number | 0 |
| display | 手机排列 | 'VERTICAL' | 'HORIZONTAL' | VERTICAL |
布局格式: 2:2:2:2:4 (总和=12), 多行: 4:4:4\|6:6
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| type | 按钮类型 | 'primary'|'normal'|'secondary' | primary |
| content | 按钮文案 | string | 按钮 |
| size | 尺寸 | 'small'|'medium'|'large' | medium |
| behavior | 显示状态 | 'NORMAL'|'DISABLED'|'HIDDEN' | NORMAL |
| loading | 加载状态 | boolean | false |
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| baseType | 基础图标 | string | smile |
| size | 尺寸 | 'xxs'|'xs'|'small'|'medium'|'large' | medium |
| useType | 使用自定义 | boolean | false |
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| multiple | 多选 | boolean | false |
| showEmplId | 显示工号 | boolean | false |
| showAvater | 显示头像 | boolean | true |
| closeOnSelect | 选中后关闭 | boolean | false |
| onChange | 值变化 | ({value}) => void | - |
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| format | 日期格式 | string | YYYY-MM-DD |
| type | 限制范围 | 'none'|'beforeToday'|'afterToday' | none |
| hasClear | 清除按钮 | boolean | true |
| returnType | 返回类型 | 'timestamp'|'string'|'moment' | timestamp |
| onChange | 值变化 | ({value}) => void | - |
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| validationType | 格式 | 'text'|'mobile'|'email'|'chineseID' | text |
| maxLength | 字数上限 | number | 200 |
| hasClear | 清除按钮 | boolean | true |
| hasLimitHint | 计数器 | boolean | false |
| trim | 去空格 | boolean | false |
| onChange | 值变化 | ({value}) => void | - |
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| rows | 行数 | number | 4 |
| autoHeight | 自动高度 | boolean | false |
| maxLength | 字数上限 | number | - |
人员字段自动填充当前登录人:
{ "valueType": "formula", "formula": "USER()" }设置 dataFilterRules 过滤可选数据
在页面属性 → 数据校验 中配置,检测重复数据:
{
"displayRule": "EXIST(角色名称)",
"rule": "EXIST(#{formUuid}, \"textField_lenz6y7q\", #{textField_lenz6y7q})",
"message": "角色名称不能重复"
}
## 核心概念
### 全局变量 (State)
类似 React state,用于页面全局状态管理:
- 创建:在数据源面板 → 添加变量
- 读取:`this.state.name` 或 `state.name`(变量绑定时)
- 更改:`this.setState({ name: 'Jack' })`
- 特殊变量:`urlParams` - 获取 URL 参数
⚠️ 注意:setState 后可立即获取新值(不同于 React),但无回调函数
### 远程数据源
配置远程 API 进行异步请求:
```js
// 手动加载
this.dataSourceMap.apiName.load({ params }).then(res => {})
// 重新加载所有自动加载的数据源
this.reloadDataSource()数据处理函数:
willFetch - 请求发送前修改参数fit - 响应数据适配didFetch - 请求成功后的数据处理onError - 错误处理export function didMount() { } // 页面加载完成
export function willUnmount() { } // 页面卸载前给组件绑定动作事件,在动作面板实现处理逻辑:
export function onClick() {
const { name, age } = this.params // 获取绑定时设置的参数
}内置规则 + 自定义校验函数:
function validateRule(value) {
if (/^杭州/.test(value)) return true
return false
}手动触发校验:
this.$('textField_xxx').validate((errors, values) => {})常用校验示例:
循环数据要求是数组,绑定变量获取循环数据:
this.item - 获取当前行数据this.index - 获取当前行索引容器组件绑定循环数据后可遍历渲染,内部组件通过变量绑定访问数据。
组件高级属性 → 是否渲染 → 绑定变量控制显隐
// 绑定 state.xxx 控制显示
state.urlParams.showName // 根据URL参数控制两种方式:
| 术语 | 说明 |
|---|---|
| 全局变量 | 类似 React state,页面状态管理 |
| 远程 API | HTTP 接口配置,包含请求地址、参数、数据处理函数 |
| Schema | 低代码协议,描述页面/组件结构,类似 HTML |
| 组件唯一标识 | 组件的 fieldId,宜搭全局唯一标识 |
| 页面 | 独立展示界面(表单、报表、自定义页面) |
| 物料 | 可沉淀的前端能力(组件、区块、模板) |
| 业务组件 | 基于基础组件的业务领域组件 |
| 低代码业务组件 | 通过低代码编辑器搭建的业务组件 |
| 区块 | 组合多个组件/布局,可复制复用 |
| 模板 | 垂直业务领域的页面模板 |
触发类型:
节点类型:
⚠️ 仅限专属版
export function componentDidMount() { } // 渲染完成
export function componentDidUpdate() { } // 更新完成
export function componentDidCatch() { } // 错误捕获
export function componentWillUnmount() { } // 销毁前this.props.xxx // 获取传入的属性this.$('fieldId').get('propName') // 获取属性
this.$('fieldId').set('propName', value) // 设置属性添加 function 类型属性作为事件回调,在组件内通过 this.props.xxx() 触发
debugger 断点调试cmd/ctrl + p → page.js 添加断点?__showDevtools 打开调试面板?__debug 查看/编辑 Schemaconst vConsole = 'https://g.alicdn.com/code/lib/vConsole/3.11.2/vconsole.min.js';
const js = document.createElement('script');
js.src = vConsole;
document.body.append(js);
js.onload = function() { window.vConsole = new window.VConsole(); };前端页面调用,包括:
this.state.xxx / this.setState()this.dataSourceMap.xxx.load() / this.reloadDataSource()this.$(fieldId).getValue() / this.$(fieldId).setValue()this.utils.toast() / this.utils.dialog() / this.utils.router.push()this.$(fieldId).validate() / this.$(fieldId).setValidation()远程数据源配置中调用,用于表单数据操作:
POST /v1/form/saveFormData.jsonPOST /v1/form/updateFormData.jsonPOST /v1/form/deleteFormData.jsonGET /v1/form/searchFormDatas.jsonPOST /v1/process/startInstance.json需手动加载:https://g.alicdn.com/dingding/dingtalk-jsapi/2.10.3/dingtalk.open.js
需通过钉钉开放平台调用,需要鉴权:
// ✅ 正确:操作已存在的组件(通过 fieldId)
this.$('textField_m2iqeyip').getValue()
this.$('textField_m2iqeyip').setValue('hello')
// ❌ 错误:不要声明/导入组件
// const MyButton = () => {...} // 禁止!this.setState({ key: 'value' })
const value = this.state.key
// URL 参数(默认全局变量)
const param = this.state.urlParams.xxxexport function didMount() { } // 页面加载完成
export function willUnmount() { } // 页面卸载前this.dataSourceMap.api.load(params).then(res => { })
this.reloadDataSource()this.utils.toast({ title: '成功', type: 'success' })
this.utils.router.push('/pageId')
this.utils.getLoginUserId()?__showDevtools 打开调试面板?__debug 查看 Schemadebugger 断点console.log 输出调试信息需通过钉钉开放平台调用,需要创建应用并获取授权。
| 接口 | 路径 | 说明 |
|---|---|---|
| 发起审批 | POST /yida/v1/process/startInstance.json | processCode, formUuid, formDataJson |
| 删除流程 | POST /yida/v1/process/delete.json | processInstanceId |
| 终止流程 | POST /yida/v1/process/terminate.json | processInstanceId |
| 查询实例 | GET /yida/v1/process/getById.json | processInstanceId |
| 查询实例列表 | GET /yida/v1/process/getInstanceIds.json | formUuid, instanceStatus |
| 接口 | 路径 | 说明 |
|---|---|---|
| 保存数据 | POST /yida/v1/forms/saveData.json | formUuid, formDataJson |
| 更新数据 | POST /yida/v1/forms/updateData.json | formInstId, formDataJson |
| 查询数据 | GET /yida/v1/forms/listData.json | formUuid, searchFieldJson |
| 获取子表数据 | GET /yida/v1/forms/listSubTableData.json | formUuid, formInstId, tableFieldId |
// 发起流程
const params = {
processCode: "TPROC--CFYJ5HYUN89NJ1JW3IXBI7A95RXM3652O9MKK3",
formUuid: "FORM-CFYJ5HYUN89NJ1JW3IXBI7A95RXM3552O9MKK2",
formDataJson: JSON.stringify({ textField_kkm9o5cd: "123" })
};
this.dataSourceMap.myDatasource.load(params);常见表单开发场景:
宜搭页面使用 JSON Schema 定义,可以直接粘贴到设计器中。
{
"type": "nodeSchema",
"componentsMap": {},
"componentsTree": [
{
"componentName": "PageSection",
"props": { ... },
"children": [ ... ]
}
]
}{
"componentName": "TextField",
"props": {
"fieldId": "textField_xxxxx",
"label": { "type": "i18n", "zh_CN": "字段名称", "en_US": "字段名称" },
"behavior": "NORMAL",
"valueType": "custom",
"validation": [{ "type": "required" }],
"placeholder": { "type": "i18n", "zh_CN": "请输入", "en_US": "请输入" },
"maxLength": 200,
"visibility": ["PC", "MOBILE"]
}
}{
"componentName": "NumberField",
"props": {
"fieldId": "numberField_xxxxx",
"label": { "type": "i18n", "zh_CN": "金额", "en_US": "金额" },
"precision": 2,
"step": 1,
"behavior": "NORMAL",
"valueType": "custom",
"validation": [
{ "type": "required" },
{ "type": "minValue", "param": 0 },
{ "type": "maxLength", "param": 25 }
]
}
}{
"componentName": "DateField",
"props": {
"fieldId": "dateField_xxxxx",
"label": { "type": "i18n", "zh_CN": "日期", "en_US": "日期" },
"format": "YYYY-MM-DD",
"behavior": "NORMAL",
"valueType": "custom",
"validation": [{ "type": "required" }]
}
}{
"componentName": "SelectField",
"props": {
"fieldId": "selectField_xxxxx",
"label": { "type": "i18n", "zh_CN": "选项", "en_US": "选项" },
"mode": "single",
"showSearch": true,
"behavior": "NORMAL",
"valueType": "custom",
"defaultDataSource": {
"customStashOptions": [
{ "text": { "zh_CN": "选项一", "en_US": "选项一" }, "value": "选项一", "sid": "serial_xxx" }
]
}
}
}{
"componentName": "RadioField",
"props": {
"fieldId": "radioField_xxxxx",
"label": { "type": "i18n", "zh_CN": "类型", "en_US": "类型" },
"itemDirection": "hoz",
"behavior": "NORMAL",
"valueType": "custom",
"dataSource": [
{ "text": { "zh_CN": "选项A", "en_US": "选项A" }, "value": "A", "sid": "serial_a" },
{ "text": { "zh_CN": "选项B", "en_US": "选项B" }, "value": "B", "sid": "serial_b" }
]
}
}{
"componentName": "EmployeeField",
"props": {
"fieldId": "employeeField_xxxxx",
"label": { "type": "i18n", "zh_CN": "申请人", "en_US": "申请人" },
"multiple": false,
"behavior": "NORMAL",
"valueType": "custom",
"userRangeType": "ALL",
"validation": [{ "type": "required" }]
}
}{
"componentName": "AssociationFormField",
"props": {
"fieldId": "associationFormField_xxxxx",
"label": { "type": "i18n", "zh_CN": "关联数据", "en_US": "关联数据" },
"behavior": "NORMAL",
"multiple": false,
"associationForm": {
"formUuid": "FORM-XXXXXXXX",
"appType": "APP_XXXXXXXX"
},
"validation": [{ "type": "required" }]
}
}{
"componentName": "Image",
"props": {
"fieldId": "image_xxxxx",
"src": "https://example.com/image.jpg",
"width": 100,
"height": 100,
"fit": "cover"
}
}{
"componentName": "Text",
"props": {
"fieldId": "text_xxxxx",
"content": { "type": "i18n", "zh_CN": "文本内容", "en_US": "文本内容" },
"__style__": ":root { font-size: 16px; font-weight: 600; }"
}
}{
"componentName": "LinkBlock",
"props": {
"fieldId": "linkBlock_xxxxx",
"link": { "type": "url", "url": "https://example.com", "isBlank": true },
"__style__": ":root { margin: 10px; }"
}
}{
"componentName": "Div",
"props": {
"fieldId": "div_xxxxx",
"__style__": ":root { padding: 20px; background: #fff; }"
}
}{
"componentName": "PageSection",
"props": {
"fieldId": "pageSection_xxxxx",
"title": { "type": "i18n", "zh_CN": "基本信息", "en_US": "基本信息" },
"showHeader": true,
"behavior": "NORMAL"
}
}{
"componentName": "ColumnsLayout",
"props": {
"fieldId": "columnsLayout_xxxxx",
"layout": "4:4:4"
},
"children": [
{ "componentName": "Column", "props": { "fieldId": "column_1" } },
{ "componentName": "Column", "props": { "fieldId": "column_2" } },
{ "componentName": "Column", "props": { "fieldId": "column_3" } }
]
}| 属性 | 说明 | 值 |
|---|---|---|
| behavior | 组件状态 | NORMAL, READONLY, HIDDEN, DISABLED |
| valueType | 值类型 | custom, formula, linkage |
| validation | 校验规则 | required, minValue, maxLength, customValidate |
| formula | 公式 | CONCATENATE, TODAY, TIMESTAMP, USER, SUM 等 |
| format | 日期格式 | YYYY-MM-DD, YYYY-MM-DD HH:mm:ss |
字段 ID 格式:组件类型_随机后缀,例如:
textField_abc123numberField_def456selectField_ghi789当前应用:APP_F22M8EK6I2HZTBIYV3U5
© LeoYeAI, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 12 other files (scripts, references) in skills/yida-dev of LeoYeAI/openclaw-master-skills.
Open the folder on GitHubat commit e5199b5
Yida Dev next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Yida Dev this skillLeoYeAI/openclaw-master-skills | 2.2k | — | ~5k | Automated safety check: Pass | MIT | |
| Yida Dashboardopenyida/openyida | 220 | — | ~1.4k | Automated safety check: Pass | MIT | |
| Yida Appopenyida/openyida | 220 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Yida I18nopenyida/openyida | 220 | — | ~909 | Automated safety check: Pass | MIT | |
| Yida Tingjiopenyida/openyida | 220 | — | ~283 | Automated safety check: Pass | MIT | |
| Yida Chartopenyida/openyida | 220 | — | ~1.7k | Automated safety check: Pass | MIT |
openyida/openyida
经营分析看板/驾驶舱/数据大屏产品化交付;用于指标判断、趋势分析或投屏监控,不用于普通待办工作台和办事门户。含真实数据、筛选联动、卡片截图、组织内短链和钉钉待办闭环。常规图表使用 yida-rechart;明确 ECharts、复杂 ECharts option 或维护旧图表时使用 yida-chart。普通统计优先 yida-report。
openyida/openyida
创建完整宜搭应用,或补齐已有应用时使用。先确认核心功能和实际用法;Fast 直接搭建,Plan 先确认方案。由 yida-prd 和 yida-design 同时准备业务与基础视觉,校验后创建或复用资源;表单/流程先于自定义页面。页面 UI 按已确认设计实现,代码示例按需参考;前后台都规划菜单顺序与默认页面,发布后分别验收实际入口。
openyida/openyida
应用多语言管理。查询和维护宜搭应用的语言配置、文案词条、翻译状态、一键翻译和多语言升级。适用于全球化设置 / 多语言管理页面;需要应用已开通国际化能力包,或运行在 Global YiDA 环境(默认入口为 www.yidaapps.com,且支持客户自定义二级域名)。
openyida/openyida
按 taskUuid 获取钉钉听记、会议录音转写、会议纪要或 AI 听记的完整详情;只负责读取内容。若用户要求转 PRD,先用本技能取内容,再交给 yida-flash-note-to-prd。
openyida/openyida
ECharts 高级可视化报表。依赖宜搭原生报表 getDataAsync.json 接口获取聚合数据,禁止前端聚合。触发词:「更美观」「ECharts」「大屏」「定制化」。普通「报表」「统计」需求默认由 yida-report 处理。
openyida/openyida
自定义页面 Recharts 高级图表技能。使用 YidaCodeCanvas 组件和 Recharts 实现可视化、看板图表、趋势图、组合图等现代 React 图表页面;聚合数据必须来自宜搭原生报表或已聚合接口,不在前端拉全量明细自行聚合。明确要求 ECharts、维护旧 ECharts 页面或 Recharts 无法覆盖的复杂 option 时改用 yida-chart。
LeoYeAI/openclaw-master-skills
Manages pipelines on a DevOps quality and efficiency platform through its OpenAPI: list workspaces and templates, create, update, run and cancel pipelines, and read run records.
LeoYeAI/openclaw-master-skills
Patches OpenClaw's Feishu extension so an edited document triggers an isolated agent session that reads the doc and replies inline, turning it into a live chat space.
LeoYeAI/openclaw-master-skills
Multi-context memory management system for OpenClaw agents with group-isolated storage, global shared memory, workspace organization, and group-specific skills isolation.
LeoYeAI/openclaw-master-skills
Runs a brand's AI-search visibility work end to end: diagnosing how AI platforms represent it, repositioning it, producing AI-optimized content and monitoring ongoing mentions.
LeoYeAI/openclaw-master-skills
Installs and authenticates the gws CLI, then automates Gmail, Drive, Sheets, Calendar, Docs, Chat and Tasks with ready-made recipes, persona bundles and security audits.
LeoYeAI/openclaw-master-skills
Runs four advisor roles, a fitness coach, nutritionist, data analyst and TCM practitioner, to build a health profile and track workouts, diet and wellness over time.
钉钉宜搭低代码开发助手。用于创建表单和自定义页面、编写 JS 动作面板、使用 JS-API、配置数据源、设计流程自动化。适用于宜搭表单开发、JS 代码调试、API 集成等场景。. Yida Dev is an agent skill from LeoYeAI/openclaw-master-skills.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill yida-dev -a claude-code`. Or copy the skill folder (skills/yida-dev in LeoYeAI/openclaw-master-skills) into .claude/skills/yida-dev in your project. Claude Code loads it when a task matches its description.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill yida-dev -a codex`. Or copy the skill folder (skills/yida-dev in LeoYeAI/openclaw-master-skills) into .agents/skills/yida-dev in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add LeoYeAI/openclaw-master-skills --skill yida-dev -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/yida-dev, .gemini/skills/yida-dev, .github/skills/yida-dev and .opencode/skills/yida-dev in your project.
Going by SKILL.md and its folder, Yida Dev needs JavaScript for the scripts in its folder. Our summary lists: Node.js.
SKILL.md names 5 domains. In commands or code: g.alicdn.com; the agent is likely to contact it when it follows the instructions. As links in the text: docs.aliwork.com, developers.aliwork.com, open.dingtalk.com and aliwork.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Yida Dev is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 8k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Yida Dev: Yida Dashboard (openyida/openyida, 220 stars), Yida App (openyida/openyida, 220 stars), Yida I18n (openyida/openyida, 220 stars) and Yida Tingji (openyida/openyida, 220 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
LeoYeAI (a GitHub user) maintains it in LeoYeAI/openclaw-master-skills, which has 2,158 GitHub stars. The repository holds 1,215 skills in this directory. The repository was last updated on July 20, 2026.
Source: LeoYeAI/openclaw-master-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.