Crud核心配置

SmartCRUD 使用说明 #

基于 SmartChart 平台的低代码 CRUD 框架,通过可视化配置面板快速构建数据管理界面。


目录 #

  1. 快速开始
  2. 整体架构
  3. 数据集绑定(⚙️ 数据管理)
  4. 表格显示配置(📋 表格显示)
  5. 查询与过滤(🔍 筛选过滤)
  6. 新增与修改(✏️ 新增修改)
  7. 字段类型参考
  8. 模型管理(🔧 模型管理)
  9. 高级功能
  10. 常见问题

1. 快速开始 #

1.1 打开配置面板 #

页面右下角点击 「CRUD配置」 按钮,弹出底部配置抽屉,共有 5 个 Tab:

Tab 功能
📋 表格显示 表格外观、列设置、分页
🔍 筛选过滤 查询区、过滤条件、选项
✏️ 新增修改 表单字段、权限按钮
⚙️ 数据管理 绑定各功能的数据集 ID
🔧 模型管理 数据库表结构管理

1.2 基本配置流程 #

① ⚙️ 数据管理 → 填写 table_id(查询数据集)
② ⚙️ 数据管理 → 填写 add_id / update_id / delete_id
③ 📋 表格显示 → 设置 tableFields(表格显示字段)和 nameDict(字段中文名)
④ ✏️ 新增修改 → 设置 aform(新增字段)和 constFields(只读/主键字段)
⑤ 点击「预览」查看效果 → 确认后点击「发布」

1.3 三个操作按钮 #

每个 Tab 底部均有三个按钮:

按钮 行为
预览 将当前配置应用到页面(不保存)
保存 应用并写入服务器(开发环境)
发布 二次确认后覆盖线上配置

2. 配置值格式说明 #

在配置面板中填写配置时,支持以下输入格式:

格式类型 输入示例 实际含义
逗号分隔列表 code,name,status 字段列表
键值对字典 code:编码,name:名称 键值对
JSON字典 {"status":1} JSON 对象
数字 5 数据集 ID

3. 数据集绑定 #

⚙️ 数据管理 Tab

3.1 核心数据集 #

配置项 说明 必填
table_id 主表查询数据集,返回二维数组
add_id 新增数据集,接收表单参数,返回 {status:200, msg:'...'}
update_id 修改数据集,同上
delete_id 删除数据集,接收主键值;为空则不显示删除按钮

3.2 扩展数据集 #

配置项 说明
ztable_id 子表(明细)查询数据集,传参 fid=主表主键值
statistic_id 顶部统计数据集,返回的键值对显示为统计卡片
detail_id 点击「查看」时调用的数据集,返回的数据在弹窗展示
option_id 下拉选项数据集(支持多个字段的选项)
addb_id 提交前校验数据集
adda_id 提交成功后触发的数据集
uploadds 导入 Excel/CSV 的数据集(设置后显示上传按钮)
daochu_id 自定义导出数据集(不设则导出当前表格数据)
daochut_id 导入模板下载数据集
tree_ds 左侧树形菜单数据集
tree_id 树形表格懒加载子级数据集
audit_id 审批/变更申请提交数据集(默认为 1)
action_id 批量动作专用数据集(不设则用 add_id)

3.3 联动数据集 #

配置项 格式 说明
selectDsDict 字段名:数据集ID 选择框变化时带出其他字段值(支持字典返回同时带出子表)
remoteDsDict 字段名:数据集ID 字段支持远程搜索(模糊输入)
selectParamDict JSON 联动/远程搜索时额外传参的字段,如 {"供应商":["物料","地区"]}
optionParam field1,field2 表单中这些字段值变更时,自动刷新固定选项(option_id)并传参
funDsDict 图标:数据集ID 工具栏功能按钮,末尾加 ! 弹出窗口
viewDsDict 图标:数据集ID 操作列自定义按钮,末尾加 ! 弹窗,!! 静默刷新
iframeFormDict JSON 操作列按钮弹出 iframe 表单页(见 9.4
editDict JSON 多编辑按钮:每个按钮可指定独立数据集和字段(见 9.5
chartids 3,4,5 点击「查询」时联动刷新的图形 ID
chartids_t 3,4 点击表格行时联动刷新的图形 ID

3.4 后端分页 #

开启 isBackPage = true 后,每次翻页都请求后端。数据集需返回两个数据帧:

df0: [['total'], [总条数]]              // 表头行 + 总条数行
df1: [[字段名列表], [数据行1], [数据行2], ...]

框架自动传递参数:limit(每页条数)和 offset(偏移量 = 每页条数 ×(当前页-1))。


4. 表格显示配置 #

📋 表格显示 Tab

4.1 字段显示 #

配置项 格式 说明
nameDict code:编码,name:名称 字段英文名 → 中文名映射,作为列标题
tableFields code,name,status 表格显示的字段(为空则显示全部)
shortTableFields code,name 设置后启用折叠展开行,短列用于主表格,tableFields 用于展开内容
fixedFields code,name 固定在左侧不随滚动消失的字段
widthDict code:100px,name:200px 各字段列宽
alignDict amount:right 各字段对齐方式(left/center/right
columnAlign center 全局默认对齐方式
sortableFields code,amount 允许排序的字段(为空则全部允许排序;mergeFields 启用时排序禁用)
exSumFields id,phone 不参与底部合计的字段

4.2 外观配置 #

配置项 默认值 说明
title 数据清单 表格标题(也用作导出文件名)
tableHeaderColor #475254 表头背景色
hColor #fff 表头字体颜色
hBorder false 显示表头边框
stripe false 斑马纹
showIndex false 序号列
showSummary false 底部合计行
maxheight 600 表格最大高度(px)
minheight 表格最小高度,如 300px
tableAutoHeight true 表格高度自动适应可视区域(开启时忽略 maxheight
actionFixed true 操作列固定在右侧
toolbar true 显示右侧工具栏(刷新、导出、列配置等)
print false 显示打印按钮(printOpt 可自定义打印参数,如最大宽度)
showTable true 是否显示表格(关闭后可只显示统计卡片/图形)
isChart false 加载图形区域(配合看板图形联动)
smtdrag false 开启拖拽
isMobileCard false 移动端切换为卡片列表模式
shortCol 2 展开详情卡片/移动卡片的列数
shortBord false 详情卡片显示边框
shortDire false 详情卡片竖向排列

4.3 特殊列展示 #

Tag 标签:

tagFields = status,category
statusColor = 启用:green,禁用:red,待审:#ff9900

字段值会渲染为彩色 Tag,多个值(逗号分隔)会展示多个 Tag。

表头高亮(spotFields):

spotFields = status:red,amount:green

表头说明(tooltipDict):

tooltipDict = code:这是物料的唯一编码,amount:金额单位为元

行合并(mergeFields):

mergeFields = department,category

相邻行中该字段值相同时自动合并单元格。启用后该字段排序禁用。

4.4 分页配置 #

配置项 默认值 说明
pageSize 30 每页条数
pageSizes 30,50,100,500,1000 可选分页条数
isBackPage false 是否启用后端分页

提示: 设置 pageSize=9999 可隐藏分页控件(适合数据量少的场景)。

4.5 列配置(隐藏列) #

工具栏(toolbar = true)中的「列配置」按钮可弹窗勾选各列的显示/隐藏(对应 hiddenColumns),用户可按需临时隐藏不关心的列,切换 Tab 或刷新页面后恢复。


5. 查询与过滤 #

🔍 筛选过滤 Tab

5.1 后端查询(searchDict) #

点击「查询」按钮后,将字段值提交给后端数据集作为查询参数。

searchDict = status,department,order_date
typeDict = order_date:date,status:select

特殊处理:

  • date/month 类型 → 区间选择,自动拆分为 字段名_s(开始)和 字段名_e(结束)
  • date1/month1 类型 → 单个日期/月份,直接以字段名传参(不拆分)
  • 多选(selects)→ 自动转为 'val1','val2' 的 SQL IN 格式
  • 设置 defaultDict = {"status":1} 可配置查询初始默认值
  • 日期/月份控件内置快捷选项(今天、昨天、本周、本月、近7/30/90天;月份:本月、近3/6月、今年)

5.2 前端实时过滤(filterDict) #

在已加载的数据中实时过滤,不请求后端,适合快速筛选。

filterDict = status,amount,name

支持运算符:

输入 含义
abc 正则模糊匹配(含 abc)
=100 精确等于 100
>100 大于 100
<100 小于 100
>=100 大于等于 100
<=100 小于等于 100

过滤模式(filterMode): 多个过滤条件默认为 AND(同时满足),开启 filterMode = true 切换为 OR(任一满足),工具栏中也可点击切换。

5.3 全局关键词搜索(isfilter) #

开启 isfilter = true 后显示全局搜索框,对所有字段进行模糊匹配:

  • 空格分隔多个关键词(AND 逻辑)
  • 匹配内容黄色高亮显示
  • 200ms 防抖优化
  • searchHint 可设置搜索框的提示文字

5.4 表头筛选(headerFilter) #

headerFilter = status,type

配置后对应列的表头出现筛选图标,选项自动从全量数据去重生成,支持多选,属于前端过滤(不请求后端)。

5.5 查询区其他配置 #

配置项 默认值 说明
searchHead true 显示查询区
btnSearch true 显示查询按钮(关闭后输入即实时查询)
showLabel false 查询框显示字段中文标签
inputWidth 100px 查询输入框宽度
swidthDict 逐字段查询框宽度,如 name:200px
placeholderDict 字段占位提示,如 code:请输入编码(查询区与表单通用)
line_input false 查询输入框使用线性(下划线)风格
dmFields 维度切换字段(显示为 CheckboxButton)
treeWidth 150px 左侧树区域宽度

6. 新增与修改 #

✏️ 新增修改 Tab

6.1 表单字段配置 #

配置项 说明
aform 新增表单字段列表,如 code,name,status
mform 修改表单字段列表(不设则复用 aform
constFields 只读字段列表,第一位必须是主键字段名,默认 id
requiredFields 必填字段,会自动生成校验规则
cform 折叠到「其它」分组的字段

⚠️ 重要: constFields 的第一位必须是主键字段名,框架依赖它来区分新增和修改。

6.2 按钮权限控制 #

配置项 默认值 说明
btnAdd true 新增按钮
btnEdit false 编辑按钮(操作列)
btnView false 查看按钮(操作列)
btnDownload true 导出按钮
delete_id 不为空则显示删除按钮

行级权限(数据驱动): 数据集返回的数据中若包含 操作 字段,可控制单行按钮显示:

  • 包含 E → 显示编辑按钮
  • 包含 D → 显示删除按钮
  • 包含自定义图标名 → 显示对应的 viewDsDict 按钮

6.3 表单外观配置 #

配置项 说明
dialogWidth 弹窗宽度,如 60%800px
dialogFull true 则全屏弹窗
formLabelWidth 表单标签宽度,如 80pxauto
labelPosition 标签位置:top/left/right
formSize 表单字段尺寸:medium/small/mini(非空时切换为 inline 模式)
ainfo 新增弹窗顶部提示文字
minfo 修改弹窗顶部提示文字
formRows 表单行布局(见 6.5

6.4 高级表单行为 #

配置项 说明
adefaultDict 新增时字段默认值,如 {"status":1}
remainFields 新增提交后不清空的字段(适合连续录入)
iseditadd 编辑即新增:点编辑按钮时以新增模式打开
isEditRequest 编辑走审批流,需填写变更原因
addHead 新增表单显示在页面顶部而非弹窗
cellEditable 允许双击单元格直接编辑(字段需在 mform 中且非只读),保存时调用 update_id 提交 {主键, 字段}
scanSubmit 扫码后自动提交表单
ossUpload 文件/图片直传云存储(OSS/COS),填写 apiconfig 中 smtoss 的配置名,如 ali1

6.5 表单行布局(formRows) #

默认表单字段逐个排列,通过 formRows 可自定义分组标题与多列布局:

[{"label":"基本信息"}, "name,code:16,8", "remark"]
元素 含义
{"label":"基本信息"} 渲染一个分组分隔标题
"name,code:16,8" namecode 同一行,冒号后为各字段栅格宽度(总计 24)
"remark" 单独占一行(不写宽度时按字段数均分 24 栅格)

6.6 子表(明细录入) #

在新增/修改弹窗中内嵌明细数据录入,适用于主从表场景:

ztable_id = 8      // 查询子表数据,传参 fid=主键值
aform1 = product_code,qty,unit_price   // 子表新增字段
mform1 = product_code,qty,unit_price   // 子表修改字段

提交数据格式:

{
  "main_field": "xxx",
  "_child": {
    "fid": "主键值",
    "add": [{"product_code":"A001","qty":10}],
    "mod": [{"id":5,"qty":20}],
    "del": [3, 7]
  }
}

7. 字段类型参考 #

通过 typeDict 配置字段类型,格式:字段名:类型

typeDict = status:select,birthday:date,amount:number,remark:text
类型值 查询区控件 表单控件 表格展示
text 普通输入框 多行文本域 普通文本
date 日期范围选择器 日期选择器 普通文本
date1 日期单选(单值传参) 日期选择器 普通文本
month 月份范围选择器 月份选择器 普通文本
month1 月份单选(单值传参) 月份选择器 普通文本
datetime 日期范围选择器 日期时间选择器 普通文本
select 下拉单选 下拉单选 普通文本
selects 下拉多选 下拉多选 普通文本
radio 下拉单选 单选按钮组 普通文本
selec 级联选择器 级联选择器 普通文本
number 普通输入框 数字输入框 普通文本
switch 开关 开关 只读开关
progress 普通输入框 数字输入框 进度条
rate 星级评分 只读评分
color 颜色选择器 颜色图标
file 普通输入框 文件上传 下载链接
img 普通输入框 图片上传 图片预览
qr 输入+扫码按钮 输入+扫码按钮 普通文本
remark 只读文本 普通文本
action 魔法棒按钮

选项数据配置(optionDict):

{
  "status": [[1, "启用"], [0, "禁用"]],
  "category": [["A", "类别A"], ["B", "类别B"]]
}

格式:二维数组,每项 [值, 显示文本]。也可通过 option_id 从数据集动态加载。


8. 模型管理 #

🔧 模型管理 Tab(仅 Dev 模式可见)

提供可视化的数据库表结构管理,支持建表和字段变更(兼容 MySQL / PostgreSQL / SQLite,连接类型为 gp/gppool/vectorPostgres 时按 PostgreSQL 处理,字段类型下拉会按数据库类型自动切换候选)。

8.1 操作流程 #

① 输入表名(可选)→ 点「查询」
   ├─ 有表名:从数据库读取真实表结构
   └─ 无表名:从当前 CRUD 配置中收集字段
   (也可点「Excel导入」从 Excel 文件生成字段清单,见 8.5)
② 在列表中修改字段属性
③ 点「预览」→ 将字段配置应用到 CRUD 设置面板
④ 点「保存」→ 保存 CRUD 配置
⑤ 点「执行」→ 生成并执行 SQL(⚠️ 不可恢复)

8.2 字段属性说明 #

列名 说明
字段名 数据库列名
备注 字段中文说明(对应 nameDict)
实际类型 数据库类型,如 varchar(50)intdecimal(10,2)
默认 字段默认值
是否允许 NULL
类型 前端表单类型(见第 7 节)
对齐 列对齐方式
宽度 列宽度
只读 加入 constFields
新增 加入 aform
修改 加入 mform
必填 加入 requiredFields
查询 加入 searchDict
过滤 加入 filterDict
长显 加入 tableFields
短显 加入 shortTableFields
子增 加入 aform1
子修 加入 mform1
其它 加入 cform
▲▼ 调整字段顺序
🗑 标记删除(执行后从数据库删除列)

8.3 特殊字段自动处理 #

字段名 自动处理
id 自动设置为自增主键(MySQL: PRIMARY KEY AUTO_INCREMENT;PostgreSQL: serial;SQLite: PRIMARY KEY AUTOINCREMENT
create_time 自动设置为 DEFAULT CURRENT_TIMESTAMP
update_time 自动设置为 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

字段重命名: 在字段列表中修改已有字段的名称,执行时会生成 RENAME COLUMN 语句(SQLite 不支持)。

8.4 数据库兼容说明 #

操作 MySQL PostgreSQL SQLite
建表 ✅ 支持 COMMENT ✅ COMMENT ON 语句 ✅(无 COMMENT)
新增字段
修改字段 ✅ CHANGE COLUMN ✅ ALTER COLUMN(类型/空值/默认值/备注分条语句) ❌ 不支持
重命名字段 ✅ RENAME COLUMN ✅ RENAME COLUMN ❌ 不支持
删除字段 ❌ 不支持
自增主键 AUTO_INCREMENT serial / bigserial AUTOINCREMENT

8.5 Excel 导入建表 #

点「Excel导入」上传 .xlsx 文件,可自动生成字段清单:

  • 第一行 = 字段名(自动转小写、空格转下划线)
  • 第二行 = 字段备注(可选,为空时用字段名)
  • 后续行 = 数据样本,用于自动推断字段类型(整数/数值/日期/文本,按数据库类型映射)
  • 文件名(去扩展名)自动作为表备注

预览确认后字段填入列表并切换到「新建表」模式,输入表名后点「执行」建表。


9. 高级功能 #

9.1 选择联动(selectDsDict) #

当某字段值变化时,调用数据集自动带出其他字段:

selectDsDict = supplier_code:5

字段 supplier_code 变化时,调用数据集 5(传参 {supplier_code: 值}),返回数据自动填充到表单同名字段。

如需额外传参:

selectParamDict = {"supplier_code": ["warehouse", "category"]}

9.2 远程搜索(remoteDsDict) #

让下拉框支持输入搜索:

remoteDsDict = product_code:8
typeDict = product_code:select

输入时实时调用数据集 8(传参 {product_code: 输入值}),返回结果作为选项列表。

9.3 自定义操作按钮(viewDsDict) #

在操作列添加自定义按钮:

viewDsDict = el-icon-printer:9,详情:10!,el-icon-goods:11!!
后缀 行为
调用数据集,打开查看弹窗
! 调用数据集,弹出图形窗口
!! 调用数据集,静默刷新(无弹窗)

按钮名用 Element Icon 类名(如 el-icon-printer)显示为图标,中文则显示为文字按钮。

9.4 弹窗表单(iframeFormDict) #

在操作列添加按钮,点击后以 iframe 弹窗打开另一个页面(如独立的 Form 表单页):

iframeFormDict = {"审批":{"url":"/echart/?type=form","params":["order_id"],"width":"80%","height":"80vh"}}
属性 说明
url 弹窗页面地址;若只填类型名(不含 /),自动拼为 /echart/?type=xx
params 从当前行取值传递的字段列表,统一以 param={"xx":"xx"} 形式拼到 URL
width / height 弹窗尺寸,默认 80% / 80vh

弹窗关闭后自动刷新表格。按钮名同样支持行级权限(操作 字段包含按钮名才显示)。

9.5 多编辑按钮(editDict) #

在操作列配置多个编辑按钮,每个按钮可指定独立的数据集和字段子集:

editDict = {"编辑库存":{"ds":5,"fields":"qty,warehouse","icon":"el-icon-s-goods"}}
属性 说明
ds 提交时调用的数据集 ID(代替 update_id
fields 弹窗表单中显示的字段(代替 mform
icon 按钮图标
add true 则以新增模式提交(如「复制新增」场景),如 {"复制新增":{"ds":5,"fields":"name,qty","add":true}}

9.6 工具栏功能按钮(funDsDict) #

在工具栏添加批量操作按钮:

funDsDict = el-icon-check:12!,批量审批:13

传参:action(按钮 key)、updatelist(选中行主键列表,逗号分隔)。

9.7 批量动作(actionDict) #

开启多选后,针对选中行执行批量状态变更(需要表中有 status 字段),key 为要变更的状态值:

actionDict = {"已审批": ["批量审批", "green"], "已驳回": ["批量驳回", "red"]}

显示为按钮,点击后带二次确认,执行时传参 action(状态值)和 updatelist(选中行主键列表)。默认调用 add_id,可通过 action_id 指定专用数据集。

9.8 左侧树形菜单(tree_ds) #

tree_ds = 15       // 树形菜单数据集 ID
treeWidth = 180px  // 树宽度

数据集返回树形结构数据,点击叶子节点自动向后端传 _label 参数并刷新表格。

9.9 提交前后处理(addb_id / adda_id) #

提交前校验(addb_id): 在数据提交到数据库前进行校验。校验通过返回 status:200,校验不通过返回 status:400 并给出提示信息 msg。可用于检查数据完整性、重复性等。若返回中带 data,将替换实际提交的参数(可在校验时补充/加工字段)。

提交后触发(adda_id): 数据提交成功后自动执行的操作,可用于发送通知、触发工作流、更新关联数据等。

9.10 扫码输入 #

typeDict = barcode:qr
qrFormats = code_128,qr_code   // 支持的码格式(空则全支持)
qrCheckStr = SC                // 扫码内容必须以 SC 开头
scanSubmit = true              // 扫码后自动提交表单

9.11 文件/图片上传 #

typeDict = avatar:img,attachment:file
uploadpath = my_files   // 文件存储路径

上传地址:/echart/upload_file/,存储路径:/static/custom/{uploadpath}/{filename}。表格中展示时,若字段值以 http 开头则直接使用原地址。

设置 ossUpload = 配置名(apiconfig 中 smtoss 的配置名,如 ali1)可将文件直传阿里云 OSS / 腾讯云 COS 等云存储。

9.12 多表 Tab(tabs) #

一个 CRUD 页面可配置多个 Tab,每个 Tab 拥有独立的数据集和显示配置(类似多张表切换):

配置项 说明
tabs Tab 列表(在配置面板中新增/删除 Tab 时自动维护)
tabLabel 当前 Tab 的显示名称
tabIcon 当前 Tab 的图标,如 el-icon-goods
tabColor 当前 Tab 的颜色
tabRefreshMode 切换 Tab 时的刷新策略:always 始终刷新(默认)/ ifempty 有数据不刷新 / never 不刷新

工作机制:

  • 第一个 Tab 保存页面完整配置,其余 Tab 仅保存与默认配置的差异项,切换时自动应用
  • 切换 Tab 时数据自动缓存(ifempty/never 模式下回切不重新请求)
  • 配置方法:在配置面板切换到目标 Tab 后修改配置并保存,各 Tab 配置互不影响

9.13 自定义计算(calcChange) #

在看板 JS 中重写 calcChange 方法实现联动计算:

vapp.calcChange = function(key) {
    if (key === 'qty') {
        vapp.form.amount = vapp.form.qty * vapp.form.price;
    }
}

10. 常见问题 #

Q: 配置保存后没有生效?

「保存」写入测试配置,「发布」才会覆盖线上。确认点击的是正确按钮。

Q: 新增提交提示「没有任何修改项」?

所有字段值为 null 时会触发此提示。检查 aform 配置是否正确,字段名是否与数据一致。

Q: 修改时找不到主键?

constFields 第一位必须是主键字段名,且该字段必须存在于表格数据中(加入 tableFields 或不设置 tableFields)。

Q: 下拉框没有选项?

设置 optionDict 配置固定选项,或设置 option_id 从数据集动态加载,数据集第一行第一列为字段名。

Q: 子表数据没有加载?

确认设置了 ztable_id,且该数据集支持接收 fid 参数(主键值)。子表必须包含 id 字段作为主键。

Q: 表格列太多横向滚动?

设置 shortTableFields 显示少量关键列,其余字段在展开行中显示。或使用 widthDict 控制列宽。

Q: 导出按钮导出的是什么?

默认导出 shortTableFieldstableFields 中的字段,使用 fullData(全量数据,非当前页)。导出对话框可自定义文件名并选择 CSV 或 Excel 格式。设置 daochu_id 可自定义导出数据集。

Q: 如何只导出选中的行?

导出下拉菜单选「选择行导出」,表格会出现勾选列,勾选后再导出即可(文件名自动带 _选中行 后缀)。

Q: 双击单元格编辑不生效?

需开启 cellEditable = true,且该字段必须在 mform 中并且不在 constFields 里。保存时调用 update_id

Q: 移动端显示效果不好?

开启 isMobileCard = true 在移动端切换为卡片列表模式,通过 tableFields 控制显示字段,shortCol 控制列数。移动端点击行第一列可弹出操作菜单,底部固定「搜索/新增」工具栏,过滤与搜索收纳在底部面板中。


版权说明: SmartChart / SmartCRUD 由 JohnYan 设计