| name | jeecg-desform |
| description | JeecgBoot 表单设计器(desform)全生命周期管理——通过对话的方式创建、更新、复制、删除表单设计器,管理表单数据(CRUD),生成 PC/移动端表单视图,以及一键创建 OA 审批应用(表单+流程+授权)。只要用户意图涉及「表单设计器」就必须使用本技能,包括但不限于:创建或生成表单("做一个请假表单"、"AI设计表单"、"desform")、修改已有表单或字段("加个字段"、"改一下表单")、复制/删除表单、录入或查询表单数据、创建表单视图(含移动端)、以及咨询设计器功能(控件类型、字典配置、校验规则、关联记录、子表、公式计算、JS/CSS增强、默认值、外链等)。当用户想要创建带审批流程的 OA 应用时也应触发("创建OA应用"、"创建审批单"、"创建报销单"、"创建请假单"、"做一个OA表单带流程"、"一键创建表单和流程"、"面试申请"、"出差申请"等)。即使用户只是描述字段需求(如"需要姓名、手机号字段")而未明确说"表单",只要语境指向表单设计器也应触发。注意:本技能仅处理表单设计器(desform),不处理 Online 表单——如果用户明确提到"Online表单"或"online表",应使用 jeecg-onlform 技能。 |
JeecgBoot 表单设计器 AI 自动生成器
使用自然语言(或图片)生成表单设计器配置。
重要:本 skill 只处理「表单设计器」(desform),不涉及 Online 表单。两者是完全独立的表单体系。
执行准则(必读)
本技能的所有强制规则,都在对抗同一个 AI 倾向:用"我大概知道"替代"我确认知道"。
跳步:校验、确认、读文档看似多余——AI 倾向于省略。但每个步骤都是防错设计,省略后出错时代价是数据损坏或 API 异常,且无法回头。
猜测:系统特定的编码、API 参数格式、控件配置细节,训练知识不够用,但 AI 会用"看起来合理"的值填补——配置看似正确,运行时才报错。
本系统有大量与通用认知冲突的特殊行为(API 接口不可靠、参数大小写有严格要求、控件结构非直觉、部分值只存在于用户自己的系统中)。你对这个系统的了解程度,不如这份文档和用户本身。
遇到任何操作,遵守以下三条:
- 步骤不可跳 — 感觉没必要时仍要执行,这是防错机制而不是形式
- 有专属文档的功能先读文档 — 通用知识在本系统大概率是错的,文档记录的是实测验证的行为
- 系统特定的值必须问 — 无法从当前上下文确认的参数(规则 Code、报表编码、业务 ID 等),直接告知用户"需要您提供 X",不要猜测
第 2 条的执行方式(强制): 遇到不确定某功能在哪里配置时,先在 SKILL.md 末尾的参考文档列表中找到对应的 references/ 文件并读取,再执行任何 API 操作。参考文档列表覆盖了所有专属功能,是权威索引。
临时配置文件规则(强制)
所有传给脚本的 --config <xxx.json> 必须放在 {系统临时目录}/jeecg-desform/ 下,由操作系统自动清理;skill 与脚本均不主动删除该目录或文件。
tempfile.gettempdir() 自动适配各平台:Windows %TEMP%、Linux /tmp、macOS /var/folders/.../T(注意 macOS 并非 /tmp)。文件名建议使用 <表名>_<步骤>.json(如 sk_audit_create.json),路径已含技能名称无需重复前缀。
场景一:Claude 用 Write 工具写文件后调脚本(最常见)
Write 工具需要绝对路径,所以必须先通过公共脚本拿到路径。脚本一次完成「定位系统临时目录 → 创建技能子目录 → 返回路径」:
python "<skill目录>/scripts/skill_temp_path.py"
python "<skill目录>/scripts/skill_temp_path.py" -f sk_audit_create.json
得到路径后:
- 用
Write 工具将 JSON 写入该路径
- 调脚本
--config <该路径>
会话内目录可复用——首次取到后缓存到上下文,后续临时文件直接拼接同一前缀,不必每次重新调用脚本。
场景二:技能内的 Python 脚本自行写中间文件
skill 自己的脚本(desform_creator.py 等)在脚本进程内写文件时,不要通过 Write 工具,直接用 tempfile:
import tempfile, os, json
skill_dir = os.path.join(tempfile.gettempdir(), "jeecg-desform")
os.makedirs(skill_dir, exist_ok=True)
config_path = os.path.join(skill_dir, 'sk_audit_create.json')
with open(config_path, 'w', encoding='utf-8') as f:
json.dump(cfg, f, ensure_ascii=False, indent=2)
❌ 禁止
- 写到
<skill>/tmp/ 或当前工作目录(污染 skill / 用户项目)
- 硬编码
/tmp、C:\Temp 或任何固定路径(不跨平台)
- 每步完成后主动
rm / Remove-Item(操作系统会清理,属多余 tool call)
- 主动
os.path.exists() 检查(其本身即为一次 tool call)
(os.makedirs(…, exist_ok=True) 与 skill_temp_path.py 都已隐式建目录,无需另外检查)
文件丢失补救
临时文件可能被操作系统异步清理,但仍遵循 乐观调用 + 报错补救:仅当脚本返回 FileNotFoundError 或 配置文件不存在 时,使用相同内容、在相同的 {系统临时目录}/jeecg-desform/ 路径下重写(重写前重新调一次 skill_temp_path.py 或 os.makedirs(skill_dir, exist_ok=True) 确保目录存在),切勿更换路径或回退至 skill 目录。
lowApp 模式(敲敲云 / 零代码模式)
当用户提及以下任一场景时,必须先阅读 references/desform-lowapp.md,再执行任何操作:
- 用户说「工作表」(而非「表单」)
- 用户说「在 xxx 应用下」「应用里」「某个应用中」
- 用户说「敲敲云」「零代码」「lowApp」
- 用户提到「组织」「租户」(作为操作对象,而非系统权限配置)
lowApp 模式下:
- 表单设计器表单 = 工作表(概念同,名称不同)
- 需要「组织(租户)+ 应用」两级上下文
- 初始化用
init_lowapp,不是 init_api
- 初始化后,
create_form、add_widget 等所有表单操作函数无需修改,自动生效
- 详细说明见
references/desform-lowapp.md(概念+流程)和 references/desform-lowapp-utils.md(函数导入方式与完整说明)
前置条件
用户必须提供以下信息(或由 AI 引导确认):
- API 地址:JeecgBoot 后端地址(如
https://boot3.jeecg.com/jeecgboot)
- X-Access-Token:JWT 登录令牌(从浏览器 F12 获取)
如果用户未提供,提示:
请提供 JeecgBoot 后端地址和 X-Access-Token(从浏览器 F12 → Network → 任意请求的 Request Headers 中复制)。
API 初始化(统一入口)
所有 Python 操作前都需要先初始化 API 连接。init_api 只存在于 desform_utils.py 中,其他模块(如 desform_data_utils.py)不包含此函数——错误导入会导致 ImportError。
import sys
sys.path.insert(0, r'<skill目录>/scripts')
from desform_utils import init_api
init_api('<api_base>', '<token>')
后续按需从各模块导入函数,查阅函数详细说明时:
先 grep 函数名定位行号,再用 offset+limit 读取对应章节,不要全量阅读文档。
grep -n "## update_design_config" references/desform-python-utils.md
desform_utils 函数速查表
完整函数列表见 references/desform-python-utils.md;列表视图函数见 references/desform-list-view.md。
| 函数 | 适用场景 |
|---|
| 表单生命周期 | |
check_code_available(code) | 新建前校验编码唯一性 |
create_form(name, code, widgets, ...) | 一站式创建表单(查找/创建→保存设计→同步权限) |
update_form(code, widgets, ...) | 整体重设计已有表单 |
update_design_config(code, config_updates) | 只改配置不改控件(发布/通知/打印/业务规则等) |
query_form(code) | 查询表单完整信息(含设计JSON) |
get_form_fields(form_code) | 获取所有字段的 model/key/type 映射 |
| 字段级操作 | |
add_widget(code, widget_or_widgets) | 追加字段到已有表单末尾 |
update_widget(code, changes, *, key=None, model=None) | 修改字段属性(优先传 key=) |
delete_widget(code, *, key=None, model=None) | 删除字段(优先传 key=) |
| 设计JSON预处理 | |
export_design_json(code, output_path) | 导出设计JSON到文件(用于手动修改场景) |
save_design_from_file(code, file_path) | 将修改后的文件保存回后台 |
extract_field_table_from_design(design_json) | 从设计JSON提取字段参照表(不调用API) |
| 工具 | |
query_dict(dict_code) | 查询字典项列表 |
search_dict(keyword) | 按名称/编码模糊搜索字典 |
gen_menu_sql(parent_name, children, ...) | 生成菜单和角色授权SQL |
主数据复用规则
表单字段配置字典、选人、选部门等数据源时,遵循"先查后建"原则——先查系统是否已有该字典/角色/部门,避免重复创建。
使用 jeecg-system skill 的 system_utils.py 查询和管理主数据,详见 jeecg-system 技能。
创建表单
1. 解析用户需求
从用户描述中提取:表单名称、表单编码(英文命名,模块名前缀)、字段列表、字段属性。
布局选择规则: 默认使用普通布局(auto/half/full),不要主动使用 Word 风格。只有当用户明确要求时才使用 layout: "word"——例如用户说"Word风格"、"表格边框样式"、"像Word文档那样"等。即使表单是审批单、申请表等看起来适合 Word 风格的场景,也不要自行判断使用 Word 风格,而是让用户来决定。
编码唯一性校验(新建表单时):
创建新表单时,生成 desformCode 后立即执行编码校验,在校验通过前不要展示摘要让用户确认。原因:用户确认摘要后会期望直接执行成功,如果执行时才发现编码冲突,体验很差,且可能意外覆盖已有表单数据。
from desform_utils import init_api, check_code_available
init_api('<api_base>', '<token>')
result = check_code_available('<code>')
2. 识别字段并选择控件类型
根据用户描述的关键词(也可能是图片),匹配对应的控件 type——下方自动注入的索引表已含「关键词 → 控件」映射(WIDGET_OPTIONS_INDEX 区块的「关键词」列),直接据此选型。
【强制】确定控件类型后、配置其属性前,必须先阅读 references/desform-widget-options.md 中该控件对应的片段——按下方自动注入的行号索引表查到该控件的 offset / limit,直接 Read 只读那一段(该文档很长,禁止全量读,无需 grep)。原因:许多控件有非直觉的内置能力,只看 desform_utils.py 工厂函数的默认 options 会把它们当成"无用的空字段"漏掉——典型如 select-user/select-depart 的 keyMaps(选人/选部门后自动回填工号、部门、职位、电话等关联字段,属于组件内置功能,无需 JS 增强)。不要凭训练知识假设某字段不存在或猜它的名字。
!python ${CLAUDE_SKILL_DIR}/scripts/gen_widget_options_index.py 2>/dev/null || echo '> (控件选项索引自动生成失败,请用 grep -n "## <控件type>" references/desform-widget-options.md 定位行号后再 Read 该片段)'
对于 radio/select/checkbox 控件,支持静态选项(默认)和系统字典两种数据源。
详见 references/desform-dict-config.md — 字典配置方式、常用字典编码、Python 快捷函数用法。
对于 table-dict (表字典) 组件尤其必须阅读 references/desform-widget-options.md(按上方索引表定位 table-dict 片段),了解用法和限制后再使用,强制前提(不可跳过,不可替代)
⚠️ 选项颜色强制约束(radio / select / checkbox 的 itemColor):
系统前端硬编码了 20 个合法颜色值,设置 itemColor 时必须严格从这 20 个值中选取,禁止使用任何范围外的颜色(包括视觉上接近的近似色,如 #FF9800 ≠ #FF9300,#9C27B0 ≠ #7500EA,#F44336 ≠ #F52222)。同时必须将 useColor 设为 true,否则颜色在甘特图/看板视图中不生效。
完整颜色表见 references/desform-widget-options.md 顶部「选项颜色合法值约束」章节(强制查阅,不可凭记忆填写颜色值)。
对于 select-tree (下拉树) 组件:用户未指定 categoryCode 时,直接使用默认值 "B02",禁止查询系统分类 API 或向用户询问。
3. 展示表单摘要并确认
展示以下内容,等待用户确认后再执行:
## 表单摘要
- 表单名称:{name}
- 表单编码:{code}(已通过校验)
- 目标环境:{API_BASE}
### 字段列表
| 序号 | 字段名称 | 控件类型 | 必填 | 说明 |
|------|---------|---------|------|------|
| 1 | ... | ... | ... | ... |
确认以上信息正确?(y/n)
4. 防覆盖检查
用户确认后、执行创建前,通过 get_form_id(code) 检查编码是否已存在。这是防止误覆盖的最后一道安全网——编码校验只检查当前时刻,而从校验到执行之间可能有其他人创建了同编码表单。
如果表单已存在:
- 告知用户:
表单 {code} 已存在 (ID={id}),是否要覆盖更新?
- 用户确认后才执行覆盖(调用
update_form)
- 用户拒绝覆盖时,基于原编码生成 3~5 个新编码供选择
5. 生成 JSON 并调用 API
使用 scripts/desform_creator.py + JSON 配置文件创建表单。这个脚本封装了完整的 JSON 构造逻辑(控件包裹、key/model 生成、跨控件引用等),比手动拼 JSON 更可靠,也更不容易出错。
⚡ 预处理优先原则(存在创建后需要修改的属性时):
执行创建前,先判断是否存在 JSON config 无法直接配置、但需要创建后额外操作的属性,常见场景包括:
- 字段默认隐藏(
hidden: true)—— JSON config 不支持此参数
- 业务规则(
bizRuleConfig)
- JS / CSS 增强代码
- 控件深层嵌套属性的精确修改
如果存在以上任一需求,优先使用 --preprocess 模式,在一次创建流程内完成所有修改,避免创建后再调用 update_widget / update_design_config 等额外步骤。
详见本文档「设计 JSON 预处理 → 场景一:创建表单时预处理」章节。
⛔ 执行前必须判断字段数量,选择正确方式——禁止在字段数 ≤50 时使用临时文件:
默认方式:常规表单(≤50 个字段) → stdin 管道,一条命令完成,无需临时文件:
echo '<json_config>' | python "<skill目录>/scripts/desform_creator.py" --api-base <URL> --token <TOKEN> --config -
仅当字段 >50 时 → 临时文件方式,避免管道传输大量数据时的稳定性问题:
- 根据「临时配置文件规则(强制)」章节,将 JSON 配置写到
{系统临时目录}/jeecg-desform/<表名>_create.json
- 执行脚本:
python "<skill目录>/scripts/desform_creator.py" --api-base <URL> --token <TOKEN> --config <config.json>
- 不要主动删除该文件,操作系统会自动清理
详见 references/desform-json-config.md — JSON 配置格式、字段定义、子表说明、完整示例。
脚本自动处理的跨控件引用:
- capital-money(大写金额):优先通过 JSON 中的
moneyField(字段中文名)解析关联目标,未指定时兜底查找前面最近的 money/formula/summary 控件。当大写金额与目标字段不相邻时,必须显式传入 moneyField
- summary(汇总):
linkTable(子表中文名)和 field(子表列中文名)自动解析为实际 model;filter.rules 中的 field 也支持中文名自动解析
- formula(公式)表达式:支持使用字段中文名作为占位符(如
$预算总额$),自动解析为实际 model
- Word 布局下的 divider(分隔符):自动包裹在
span=24、isWordStyle=true 的 grid 容器中
脚本已自动处理 JSON 结构规则(card 容器、key/model 生成、className/icon、控件跨引用等)。如需排查或手动构造,详见 references/desform-design-json-schema.md。
多表互相关联场景(2+ 个表单通过 link-record 互相引用):阅读 references/desform-cross-form-binding.md,采用"先建表后关联"策略。
降级方案: 如果脚本执行失败,先向用户说明失败原因,经用户确认后可降级为手动构造 JSON。
详见 references/desform-fallback-manual-json.md — 手动构造 desformDesignJson 的完整指南。
6. 检查结果与权限
success: true → 表单创建成功,脚本会自动创建字段权限
success: false → 输出错误信息,参见 references/desform-api-notes.md 错误处理表
- 权限创建失败不会阻断主流程(仅输出警告),可用
scripts/desform_auth_retry.py --api-base <URL> --token <TOKEN> --code <form_code> 重试
7. 输出结果
## 表单创建成功
- 表单ID:{id}
- 表单名称:{desformName}
- 表单编码:{desformCode}
- 目标环境:{API_BASE}
请在表单设计器中查看:打开 JeecgBoot 后台 → 表单设计器 → 找到该表单
同时输出菜单 + 角色授权 SQL(用于将表单设计器加入系统菜单)。
详见 references/desform-menu-sql.md — gen_menu_sql 调用方式、输出格式、SQL 字段说明、本地自动执行规则。
当 api_base 以 http://127.0.0.1 或 http://localhost 开头时,通过 MySQL CLI 自动执行菜单 SQL。
更新已有表单
所有更新相关的函数详见 references/desform-python-utils.md。
更新流程
- 获取现有表单信息:
get_form_fields(code)
- 分析用户需求,确定操作类型(添加/修改/删除/整体重设计)
- 展示变更摘要(新增/修改/删除的字段列表),等待用户确认
- 执行操作
- 自动同步权限
整体重设计
如果用户要全面修改已有表单:
- 查询现有表单设计 JSON:
query_form(code) 或 get_form_fields(code)
- 根据用户需求重新组装控件列表
- 调用
update_form(code, new_widgets) 保存(自动获取 updateCount)
字段级操作
如果用户只是添加/修改/删除个别字段:
- 添加字段:
add_widget(code, widget) — 向已有表单追加控件
- 修改字段属性:
update_widget(code, changes_dict, *, key=None, model=None) — 修改指定控件属性,优先传 key=
- 删除字段:
delete_widget(code, *, key=None, model=None) — 删除指定控件,优先传 key=
- 操作后自动同步权限:
sync_auth(code, design_list, form_id)
设计 JSON 预处理
当脚本能力不足以满足需求时(例如创建后还需要精确修改某个控件的嵌套属性),可以使用预处理模式——让脚本把生成的设计 JSON 输出到临时文件,AI 用文本工具手动修改后再统一保存。
场景一:创建表单时预处理
正常创建命令加 --preprocess 参数(管道符和临时文件方式均支持):
echo '<json_config>' | python "<skill目录>/scripts/desform_creator.py" \
--api-base <URL> --token <TOKEN> --config - --preprocess
脚本会:
- 在后台创建表单实体(获得 form_id),但跳过保存设计 JSON
- 将生成的设计 JSON 写入临时文件(格式化缩进)
- 打印所有字段的标题 / key / model 参照表
AI 使用 Read/Edit/Write 工具修改临时文件,完成后调用保存:
from desform_utils import init_api, save_design_from_file
init_api('<api_base>', '<token>')
save_design_from_file('<form_code>', r'<临时文件路径>')
场景二:修改已有表单时预处理
from desform_utils import init_api, export_design_json, save_design_from_file
init_api('<api_base>', '<token>')
file_path, field_rows = export_design_json('<form_code>')
save_design_from_file('<form_code>', file_path)
复制表单
copy_form(source_code, new_code) 可快速复制已有表单的设计 JSON 创建新表单。适用于基于现有表单创建类似表单(如复制"请假申请"改造为"出差申请")。
流程:
- 用户提供源表单编码和新表单编码
- 校验新编码可用性(
check_code_available(new_code))
- 调用
copy_form(source_code, new_code) 完成复制
- 如需修改,使用
update_form 或字段级操作调整
删除表单
delete_form 已封装完整的删除流程(查找 → 逻辑删除 → 物理删除),支持传 code 或 ID。
详见 references/desform-api-notes.md — 删除流程、注意事项。
视图类型说明(消歧)
desform 有两种完全独立的视图概念:
| 类型 | 控制内容 | 触发关键词 |
|---|
| 列表视图 | 数据记录在列表页如何展示(表格/看板/日历/甘特图) | 用户直接说"视图"、"新建视图"、"看板"、"日历"、"甘特图"等 |
| 表单视图 | 填报表单时字段的布局和显示方式(PC/移动端) | 用户明确说"表单视图"、"移动端视图"、"移动视图" |
默认规则:用户说"视图"时,默认理解为列表视图。只有明确提到"表单视图"或"移动视图/移动端视图"时,才处理表单视图。
列表视图
列表视图控制数据记录在列表页的展示方式,支持四种类型:
| 类型 | 说明 | 必要配置 |
|---|
| 表格 | Table 组件逐行显示,最常规 | 无 |
| 看板 | 按字段值分列展示卡片(也称卡片视图) | 分组字段(限单选/下拉/人员/表字典/关联记录单条) |
| 日历 | 数据挂载到日历显示 | 至少 1 个日期字段;可选开始+结束;可多组 |
| 甘特图 | 时间线任务展示 | 1 个开始日期 + 1 个结束日期(均必填) |
注意:创建表单时系统会自动生成一个默认的表格列表视图,无需主动调用视图创建方法。只有用户明确要求"创建看板"、"添加日历视图"、"新增甘特图"等时,才需要操作列表视图。
详见 references/desform-list-view.md — 各视图类型字段规则、操作方式
表单视图
创建表单视图(PC 表单视图、移动端表单视图)时,优先使用 scripts/desform_view_creator.py 通用脚本,支持复制主表单视图或自定义字段两种模式。
详见 references/desform-view-config.md — 创建流程、JSON 配置格式、移动端优化规则、踩坑汇总。
自定义动作(自定义按钮 + 自定义规则)
当用户说"自定义按钮"、"添加按钮"、"视图按钮"、"自定义动作"、"zdyan"、"删除规则"、"控制删除"时触发本章节。
自定义动作包含两类:
- 自定义按钮:通过独立的
/desform/button/* API 管理
- 自定义规则:目前只有删除规则,通过
PUT /desform/view/updateViewConfig 的 customRules 字段配置,控制用户能否删除记录
详见 references/desform-custom-button.md — 删除规则完整结构与示例、自定义按钮数据结构、三种动作模式、显示条件、颜色预设、API 列表、Python 用法、工作流关联说明。
操作流程:
- 查询已有按钮(
list_buttons),了解当前配置
- 展示变更摘要,等待用户确认
- 调用相应函数执行(函数列表见
references/desform-custom-button.md 的"Python 工具函数"章节)
关于工作流(重要):
clickThen='form' + flowStatus=False:完全可以纯 API 完成,无需工作流
clickThen='execute' 或 'confirm'(必须触发工作流):创建按钮后会得到 processId,工作流节点内容需同时使用 jeecg-lowcode-miniflow 技能配置
功能开关(零代码应用专属)
触发场景:当用户在零代码应用(工作表)语境下,说到以下任意情况时,立即阅读 references/desform-switch-setting.md:
- 控制某功能是否显示/可用:「不让用户创建记录」「隐藏创建按钮」「禁用导入」「关掉批量操作」「关闭批量删除」「关闭分享」「禁止下载附件」「隐藏评论」「禁用打印」
- 限制使用范围:「只有管理员才能 XX」「XX 功能只在某个视图显示」「限制某功能的可见范围」
- 直接说功能开关:「功能开关」「开关设置」「switchSetting」
注意:功能开关仅在零代码应用的工作表中存在,普通表单设计器没有此功能。函数位于 desform_lowapp_utils,需 init_lowapp 初始化(非 init_api)。
操作流程:
- 阅读
references/desform-switch-setting.md,确认目标 code 和配置值
- 调用
get_switch_settings(code) 查看当前状态(可选,直接构造也可)
- 构造配置对象,注意父子联动规则(
BATCH_ACTION 变更时需同时传所有子级)
- 调用
save_switch_settings(code, items) 保存(函数导入方式见 references/desform-lowapp-utils.md,需 init_lowapp 初始化)
表单数据操作(CRUD)
对已有表单进行数据新增、查询、编辑、删除。
详见 references/desform-data-utils.md — 函数导入方式、完整函数列表和用法。
数据新增流程:
- 先获取字段 model 映射:
get_form_fields(code) 返回 (titleField, {字段名: {model, key, type}, ...})
- 构造数据字典:key 为字段的
model(如 input_1774607211242_327900),value 为字段值
- 调用
add_data(code, data_dict) 提交
错误处理
详见 references/desform-api-notes.md — 完整错误处理表。
OA 审批应用一键生成(表单 + 流程 + 授权)
当用户说"创建审批单"、"创建报销单"、"做一个OA表单带流程"、"面试申请"、"请假申请"等,立即阅读 references/desform-oa-guide.md,其中包含完整的交互流程(Step 0–2)、JSON 配置格式、OA 专用字段类型、审批人类型、流程分支规则和常见模板。
一键生成积木报表(打印)
当用户说"给这个表单加积木报表打印"、"创建打印报表"、"desform 集成积木"、"一键生成打印模板"、"按字段生成打印报表"等,立即阅读 references/desform-jimureport.md,然后用 scripts/desform_jimureport.py 一键创建报表并关联到表单的 allowJmReport 打印。
脚本自动完成 5 步:创建空报表 → 保存 desform API 数据源 → 构造卡片打印模板(按 formStyle 适配 normal/word)→ 保存设计 → 回写表单 allowJmReport/jmReportURL。
两个关键点(详见 reference):
- 积木报表 API base 常与 desform 不同:desform 用
--api-base(如 :3100/jeecgboot),积木报表用 --jmreport-base(如 :8080/jeecg-boot);同体部署时只传 --api-base。
- 字段绑定用
${dbCode.model}:desform 数据 API 返回的 JSON key = 控件 model,绑定/fieldName 都必须用 model(不是 key),否则打印值全空。
简单的"按字段排版打印"用本脚本即可,无需加载 jimureport 技能。仅当用户要高度定制报表(分组/交叉/图表/套打背景图等)时,才提示用户加载 jimureport 技能,并以 references/desform-jimureport.md 的 desform 数据 API 规范作为数据集来源。
参考文档
OA 审批应用
references/desform-oa-guide.md — OA 一键生成完整指南:交互步骤、JSON 配置格式、OA 专用字段类型、审批人类型、流程分支规则、常见模板(费用报销/请假/采购/出差)
脚本工具
| 脚本 | 用途 |
|---|
scripts/desform_creator.py | 通用表单创建脚本,优先使用 |
scripts/desform_view_creator.py | 通用表单视图创建脚本(PC/移动端) |
scripts/desform_utils.py | 共通工具库(控件工厂、API 封装、布局引擎、字段权限) |
scripts/desform_data_utils.py | 数据操作工具库(CRUD、批量、回收站) |
scripts/desform_auth_retry.py | 字段权限重试(仅权限自动创建失败时使用) |
scripts/desform_button_utils.py | 自定义按钮操作工具库(增删改查、视图绑定、排序) |
scripts/desform_jimureport.py | 一键创建积木报表并关联表单打印(含删除/清除关联) |
scripts/skill_temp_path.py | 跨平台获取本技能临时目录/文件路径(写临时配置前必先调用,自动建目录) |
创建/更新表单时阅读
references/desform-json-config.md — JSON 配置格式、字段定义、子表说明、完整示例
references/desform-dict-config.md — 字典数据源配置(静态选项、系统字典、Python 用法)
references/desform-python-utils.md — desform_utils.py 使用指南、快捷函数、layout 参数
references/desform-api-notes.md — API 踩坑记录、错误处理、命名规则
references/desform-menu-sql.md — 菜单 SQL 生成、字段说明、本地自动执行
高级功能(按需阅读)
references/desform-link-record.md — 涉及关联记录 + 他表字段时阅读
references/desform-self-tree.md — 涉及表单数据树(自关联树)时阅读:当用户说"自关联"、"数据树"、"自引用树"、"父子记录"、"关联自身"、"关联自己"、"上级记录"、"父节点字段"、"无限级分类"等,必须先阅读此文档再配置
references/desform-cross-form-binding.md — 多表单互相关联时阅读(跨表 link-record/isSubTable/link-field/twoWayModel)
references/desform-sub-table-types.md — 涉及子表时阅读(内部子表 vs 外部子表)
references/desform-formula-function.md — 涉及公式计算时阅读(内置函数库、自定义 JS 函数、日期计算)
references/desform-default-value.md — 涉及默认值时阅读(compose/function/javascript/linkage 四种类型)
references/desform-context-vars.md — 涉及上下文变量({{sysUserCode}} 等)时阅读(完整变量列表、支持位置、JSON/Python 用法)
references/desform-fill-rule.md — 涉及填值规则(fillRuleCode)时阅读(触发时机、完全只读、动态触发 JS 写法;规则 Code 必须用户提供,禁止猜测)
references/desform-validation-rules.md — 涉及校验规则时阅读(rules/defaultRules/pattern/unique)
references/desform-option-datasource.md — 涉及选项数据源时阅读(静态/系统字典/关联表单/远程函数)
references/desform-remote-api.md — 涉及远程API取值(remoteAPI)时阅读(动态参数语法、${字段model}传参、返回值规则、触发时机)
references/desform-js-enhance.md — 涉及 JS 增强时阅读(自定义 JavaScript、API 方法、事件监听)
references/desform-layout.md — 涉及布局模式时阅读(auto/half/full/word 四种模式的说明和适用场景)
references/desform-css-enhance.md — 涉及 CSS 增强时阅读(自定义样式、Word 风格定制)
references/desform-layout-controls.md — 涉及复杂布局时阅读(AutoGrid/Card/Grid/Tabs)
references/desform-linkage-query.md — 涉及查询工作表时阅读(linkage 类型默认值)
references/desform-online-binding.md — 涉及关联 Online 表单时阅读(字段映射/子表/数据同步)
references/desform-external-link.md — 涉及外链表单时阅读(公共填报、免登录访问、外链授权管理)
references/desform-filter-rules.md — 【强制】构建任何含 rule 字段的条件对象前必须阅读(合法 rule 值列表、按字段类型分类、错误写法对照、conditionsGroup 完整字段说明)
references/desform-list-view.md — 涉及列表视图时阅读(表格/看板/日历/甘特图类型说明、字段规则)
references/desform-api-docs/list-view.md — 列表视图完整 API 文档(addView/updateViewConfig/排序/删除等所有接口)
references/desform-super-query.md — 涉及筛选条件(高级查询)时阅读;触发关键词:「筛选条件」「高级查询」「superQuery」,但需注意:用户在创建/配置视图语境下说「筛选条件」「添加条件」时,应使用数据过滤(config_view_data_filter)而非本文档
references/desform-custom-button.md — 涉及自定义按钮/自定义动作时阅读(数据结构、三种动作模式、显示条件、API、Python 用法、工作流关联)
references/desform-view-config.md — 涉及表单视图时阅读(JSON 配置、移动端优化、踩坑汇总)
references/desform-custom-receive-url.md — 涉及自定义接收URL时阅读(接口规则、事务控制、子表数据处理、Java示例)
references/desform-biz-rules.md — 涉及业务规则时阅读(bizRuleConfig 完整结构、条件操作符枚举、动作类型枚举、原始属性联动陷阱、与 filter-rules 的差异);触发关键词:「业务规则」「联动」「满足条件时」「显示隐藏条件」「必填条件」「锁定记录」bizRuleConfig
references/desform-release-setting.md — 涉及发布设置/外部链接时阅读(字段说明、URL格式、externalTitle 特殊值处理);触发关键词:「发布设置」「外部链接」「公开链接」「二维码」「allowExternalLink」「页眉图片」「headerImgUrl」
references/desform-notice-setting.md — 涉及填报通知时阅读(noticeType 枚举值、noticeReceiver 格式、校验规则);触发关键词:「填报通知」「新增通知」「提交通知」「enableNotice」「noticeType」「通知接收人」
references/desform-print-setting.md — 涉及打印设置时阅读(字段联动关系、积木报表集成);触发关键词:「打印」「打印设置」「allowPrint」「积木报表」「jmReport」「disabledAutoGrid」
references/desform-jimureport.md — 一键生成积木报表打印时阅读(脚本用法、与 onlform 差异、双 API base、formStyle 适配、${dbCode.model} 绑定规则);触发关键词:「给表单加积木报表」「创建打印报表」「一键生成打印模板」「desform 集成积木」
references/desform-switch-setting.md — 零代码应用专属,涉及功能开关时阅读(14个开关的完整配置、父子联动规则、viewAuth 约束、Python 示例);触发关键词:「功能开关」「显示创建按钮」「禁用批量操作」「导入功能」「记录分享」「记录讨论」「附件下载」「记录日志」;函数导入方式见 references/desform-lowapp-utils.md
降级/排障
references/desform-fallback-manual-json.md — 脚本失败时手动构造 JSON 的完整指南
references/desform-design-json-schema.md — JSON Schema 结构、控件类型清单、通用字段
references/desform-widget-options.md — 每种控件的完整 options 配置
示例参考
references/desform-examples.md — 常见表单模式示例 + Python 脚本模板
references/desform-real-samples.md — 真实业务表单案例(字典、半行、分区、公式、关联)