status: done
当前低代码运行态新增/编辑只支持弹窗和抽屉。对客户、商机、订单等高频录入场景,用户希望可以在列表同页打开多个录入页签,切换时保留草稿,避免反复关闭弹窗。同时客户管理需要配置“客户名称不能重复”,这个能力不应只针对客户硬编码,而应成为低代码模型可配置的唯一性约束。
modal、drawer、flat、tabWorkspace。flat 在列表下方展示单个平铺录入面板。tabWorkspace 在列表同页展示多页签录入工作区,支持多个新增草稿、编辑/详情页签复用、切换保留草稿。modalType 配置继续兼容。modelSchema.indexes。运行态页面配置优先读取 options.formOpenMode,为空时兼容 options.modalType:
{
"formOpenMode": "tabWorkspace",
"modalType": "modal",
"tabWorkspace": {
"maxTabs": 8,
"reuseRecordTab": true,
"closeAfterSave": false,
"showDirtyMark": true
}
}
模型唯一校验放在 modelSchema.uniqueConstraints:
{
"uniqueConstraints": [
{
"name": "uk_customer_name",
"fields": ["customerName"],
"scope": "TENANT",
"normalize": ["trim"],
"ignoreBlank": true,
"message": "客户名称已存在"
}
]
}
兼容读取 modelSchema.validationRules 中 type=UNIQUE 的旧/扩展写法,便于后续设计器渐进接入。
modal 和 drawer 保持现有行为。flat 每次新增/编辑/详情只保留一个平铺面板,切换动作会替换当前面板。tabWorkspace:
trim 等归一化后查询当前租户/未删除数据是否已存在。id。ignoreBlank=true 时,任一参与唯一约束字段为空则跳过该约束。modelSchema.fields 并解析到真实表列;列名必须经过现有动态仓库标识符校验。BusinessException,使用约束配置的 message,缺省为“字段值已存在”。formOpenMode=flat 时,点击新增/编辑在列表下方出现平铺表单。formOpenMode=tabWorkspace 时,点击新增可以打开多个新增页签,编辑同一记录复用页签,页签切换保留表单输入。customerName 唯一后,新增重复客户名称失败,编辑为其他已有客户名称失败,编辑自身名称不失败。