云之家表单数据解析 skills (yzj-form-parser)

云之家表单数据解析器 (yzj-form-parser)

Claude Code 技能:用于解析和构建云之家(YunZhijia)表单数据

https://github.com/jlifeng/yzj-form-parser

📖 简介

yzj-form-parser 是一个专为处理云之家表单 JSON 数据而设计的 Claude Code 技能。它支持双向转换

  • 推送数据解析 :从 widgetMap 提取业务字段(读取数据)
  • 审批发起构建 :将业务字段转换为 widgetMap(写入数据)

🚀 快速开始

安装

将本技能放置在 Claude Code 的 skills 目录下:

复制代码
~/.claude/skills/yzj-form-parser/
├── SKILL.md
├── README.md
└── references/
    ├── widget-types.md
    ├── detail-widget.md
    └── file-widget.md

使用方式

在 Claude Code 中直接描述你的需求,技能会自动触发:

复制代码
# 解析推送数据
"帮我解析这个云之家审批推送数据..."

# 构建审批数据
"帮我构建发起审批接口的表单数据..."

🎯 触发场景

场景 说明
解析推送数据 处理云之家审批回调的 JSON 数据
构建审批数据 组装发起审批接口的请求参数
理解表单结构 分析 widgetMapdetailMap 的数据结构
控件数据处理 处理文本、单选、多选、日期、人员、部门、明细表等各类控件

📋 支持的控件类型

基础控件

控件类型 type 说明
文本 textWidget / textAreaWidget 单行/多行文本
日期 dateWidget / dateRangeWidget 日期/日期区间
数字 numberWidget 数字输入
金额 moneyWidget 金额输入
运算 arithmeticWidget 公式运算

选择控件

控件类型 type 说明
单选 radioWidget 单选按钮
多选 checkboxWidget 复选框

组织架构控件

控件类型 type 说明
人员 personSelectWidget 人员选择器
部门 departmentSelectWidget 部门选择器

附件控件

控件类型 type 说明
附件 attachmentWidget 文件上传
图片 imageWidget 图片上传

特殊控件

控件类型 type 说明
关联审批 relatedWidget 关联其他审批单据
流水号 serialNumWidget 系统自动生成编号
明细表 detailedWidget 子表/明细数据

📚 数据结构概览

表单整体结构

json 复制代码
{
  "formInfo": {
    "widgetMap": { /* 主表单控件 */ },
    "detailMap": { /* 明细表控件 */ }
  },
  "basicInfo": {
    "eventId": "事件ID",
    "formInstId": "表单实例ID",
    "flowInstId": "流程实例ID",
    "formDefId": "表单模版ID",
    "actionType": "reach/agree/submit/...",
    "title": "表单标题"
  }
}

控件通用字段

json 复制代码
{
  "codeId": "控件唯一标识",
  "title": "控件标题",
  "type": "控件类型",
  "value": "控件值",
  "extendFieldMap": { /* 扩展配置 */ }
}

💡 使用示例

解析推送数据

java 复制代码
// 解析主表单
Map<String, WidgetInfo> widgetMap = formInfo.getWidgetMap();

// 获取文本
String title = (String) widgetMap.get("_S_TITLE").getValue();

// 获取日期
Long timestamp = (Long) widgetMap.get("Da_0").getValue();
Date date = new Date(timestamp);

// 获取单选项
WidgetInfo radio = widgetMap.get("Ra_0");
String selectedKey = (String) radio.getValue();
String label = getOptionLabel(radio.getOptions(), selectedKey);

// 获取人员信息
WidgetInfo person = widgetMap.get("Ps_0");
String name = person.getPersonInfo().get(0).getName();

构建审批数据

java 复制代码
// 构建主表单
Map<String, Object> widgetMap = new HashMap<>();

widgetMap.put("_S_TITLE", createTextWidget("标题内容"));
widgetMap.put("Da_0", createDateWidget(System.currentTimeMillis()));
widgetMap.put("Ra_0", createRadioWidget("AaBaCcDd", options));
widgetMap.put("Ps_0", createPersonWidget(oid, name));

// 构建明细表
List<Map<String, Object>> rows = new ArrayList<>();
for (Item item : items) {
    Map<String, Object> row = new HashMap<>();
    row.put("Te_1", item.getName());
    row.put("Ra_0", item.getRadioKey());
    rows.add(row);
}

⚠️ 注意事项

  1. 数字类型numberWidgetmoneyWidget 的 value 是字符串类型
  2. 时间戳 :日期控件的 value 是毫秒级时间戳(Long)
  3. 选项 key :单选/多选的 value 是选项的 key,不是显示文本
  4. 明细表行 ID :每行有 _id_ 字段,构建新数据时可不设置
  5. 数组类型:多选、人员、部门、附件的 value 都是数组

📁 参考文档

🤝 贡献

欢迎提交问题和改进建议!

📄 许可证

MIT License

相关推荐
daad7771 分钟前
记录matlab状态机demo
java·网络·matlab
牡丹雅忻125 分钟前
AES 加密模式演进:从 ECB、CBC 到 GCM 的 C# 深度实践
java·开发语言·c#
学者猫头鹰34 分钟前
Java 8 核心新特性
java
冰心孤城1 小时前
Excel: xls与xlsx格式转换排坑指南
java·前端·excel
自强的小白1 小时前
maven高级(聚合和私服)以及私服的上传和下载
java·maven
唐青枫1 小时前
Java ReentrantLock 实战详解:比 synchronized 更灵活的可重入锁
java
ShiXZ2132 小时前
Java 8 Stream API 实用技巧详解:从入门到精通
java·开发语言
C++、Java和Python的菜鸟3 小时前
第9章 后端Web进阶(AOP)
java·开发语言·前端
东北赵四3 小时前
关于Java泛型的知识点及其相关面试题
java·windows·python
姓蔡小朋友3 小时前
Java线程并发
java·开发语言·python