SmartCRUD 使用说明 #
基于 SmartChart 平台的低代码 CRUD 框架,通过可视化配置面板快速构建数据管理界面。
目录 #
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. 整体架构 #
2.1 渲染流程 #
页面加载
→ JS 向各 DOM 节点注入 Vue 模板字符串
→ vapp.rend() 被调用
→ refreshTable():加载主表数据
→ transfer_config():配置格式转换
→ startRender = true:全屏 loading 消失,界面呈现
2.2 配置的保存位置 #
所有配置以 vapp.xxx = yyy 格式写入看板 JS 文件的注释标记之间:
//=start_crud=//
vapp.table_id=5
vapp.aform=`code,name,status`
vapp.nameDict=`code:编码,name:名称`
//=end_crud=//
2.3 配置值格式说明 #
| 格式类型 | 输入示例 | 实际含义 |
|---|---|---|
逗号分隔列表 |
code,name,status |
字段列表 ['code','name','status'] |
键值对字典 |
code:编码,name:名称 |
对象 {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 |
新增/修改前校验数据集,必须返回 {status:200/400, msg, data?} |
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 |
字段支持远程搜索(模糊输入) |
funDsDict |
图标:数据集ID |
工具栏功能按钮,末尾加 ! 弹出窗口 |
viewDsDict |
图标:数据集ID |
操作列自定义按钮,末尾加 ! 弹窗,!! 静默刷新 |
chartids |
3,4,5 |
点击「查询」时联动刷新的图形 ID |
chartids_t |
3,4 |
点击表格行时联动刷新的图形 ID |
3.4 后端分页 #
开启 isBackPage = true 后,每次翻页都请求后端。数据集需返回两个数据帧:
df0: [[总条数]]
df1: [[字段名列表], [数据行1], [数据行2], ...]
框架自动传递参数:limit(每页条数)和 offset(偏移量)。
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 |
全局默认对齐方式 |
4.2 外观配置 #
| 配置项 | 默认值 | 说明 |
|---|---|---|
title |
数据清单 |
表格标题(也用作导出文件名) |
tableHeaderColor |
#475254 |
表头背景色 |
hColor |
#fff |
表头字体颜色 |
stripe |
false |
斑马纹 |
showIndex |
false |
序号列 |
showSummary |
false |
底部合计行 |
maxheight |
600 |
表格最大高度(px) |
actionFixed |
true |
操作列固定在右侧 |
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可隐藏分页控件(适合数据量少的场景)。
5. 查询与过滤 #
🔍 筛选过滤 Tab
5.1 后端查询(searchDict) #
点击「查询」按钮后,将字段值提交给后端数据集作为查询参数。
searchDict = status,department,order_date
typeDict = order_date:date,status:select
特殊处理:
date/month类型 → 自动拆分为字段名_s(开始)和字段名_e(结束)- 多选(
selects)→ 自动转为'val1','val2'的 SQL IN 格式 - 设置
defaultDict = {"status":1}可配置查询初始默认值
5.2 前端实时过滤(filterDict) #
在已加载的数据中实时过滤,不请求后端,适合快速筛选。
filterDict = status,amount,name
支持运算符:
| 输入 | 含义 |
|---|---|
abc |
正则模糊匹配(含 abc) |
=100 |
精确等于 100 |
>100 |
大于 100 |
<100 |
小于 100 |
>=100 |
大于等于 100 |
<=100 |
小于等于 100 |
5.3 全局关键词搜索(isfilter) #
开启 isfilter = true 后显示全局搜索框,对所有字段进行模糊匹配:
- 空格分隔多个关键词(AND 逻辑)
- 匹配内容黄色高亮显示
- 200ms 防抖优化
5.4 查询区其他配置 #
| 配置项 | 默认值 | 说明 |
|---|---|---|
btnSearch |
true |
显示查询按钮(关闭后输入即实时查询) |
showLabel |
false |
查询框显示字段中文标签 |
inputWidth |
100px |
查询输入框宽度 |
swidthDict |
— | 逐字段查询框宽度,如 name:200px |
dmFields |
— | 维度切换字段(显示为 CheckboxButton) |
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 |
表单标签宽度,如 80px、auto |
labelPosition |
标签位置:top/left/right |
formSize |
表单字段尺寸:small/mini(非空时切换为 inline 模式) |
ainfo |
新增弹窗顶部提示文字 |
minfo |
修改弹窗顶部提示文字 |
6.4 高级表单行为 #
| 配置项 | 说明 |
|---|---|
adefaultDict |
新增时字段默认值,如 {"status":1} |
remainFields |
新增提交后不清空的字段(适合连续录入) |
iseditadd |
编辑即新增:点编辑按钮时以新增模式打开 |
isEditRequest |
编辑走审批流,需填写变更原因 |
addHead |
新增表单显示在页面顶部而非弹窗 |
6.5 子表(明细录入) #
在新增/修改弹窗中内嵌明细数据录入,适用于主从表场景:
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 |
日期范围选择器 | 日期选择器 | 普通文本 |
month |
月份范围选择器 | 月份选择器 | 普通文本 |
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 模式可见)
提供可视化的数据库表结构管理,支持建表和字段变更。
8.1 操作流程 #
① 输入表名(可选)→ 点「查询」
├─ 有表名:从数据库读取真实表结构
└─ 无表名:从当前 CRUD 配置中收集字段
② 在列表中修改字段属性
③ 点「预览」→ 将字段配置应用到 CRUD 设置面板
④ 点「保存」→ 保存 CRUD 配置
⑤ 点「执行」→ 生成并执行 SQL(⚠️ 不可恢复)
8.2 字段属性说明 #
| 列名 | 说明 |
|---|---|
| 字段名 | 数据库列名 |
| 备注 | 字段中文说明(对应 nameDict) |
| 实际类型 | 数据库类型,如 varchar(50)、int、decimal(10,2) |
| 默认 | 字段默认值 |
| 空 | 是否允许 NULL |
| 类型 | 前端表单类型(见第 7 节) |
| 对齐 | 列对齐方式 |
| 宽度 | 列宽度 |
| 只读 | 加入 constFields |
| 新增 | 加入 aform |
| 修改 | 加入 mform |
| 必填 | 加入 requiredFields |
| 查询 | 加入 searchDict |
| 过滤 | 加入 filterDict |
| 长显 | 加入 tableFields |
| 短显 | 加入 shortTableFields |
| 子增 | 加入 aform1 |
| 子修 | 加入 mform1 |
| 其它 | 加入 cform |
| ▲▼ | 调整字段顺序 |
| 🗑 | 标记删除(执行后从数据库删除列) |
8.3 特殊字段自动处理 #
| 字段名 | 自动处理 |
|---|---|
id |
自动设置为 PRIMARY KEY AUTO_INCREMENT |
create_time |
自动设置为 DEFAULT CURRENT_TIMESTAMP |
update_time |
自动设置为 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP |
8.4 数据库兼容说明 #
| 操作 | MySQL | SQLite |
|---|---|---|
| 建表 | ✅ 支持 COMMENT | ✅(无 COMMENT) |
| 新增字段 | ✅ | ✅ |
| 修改字段 | ✅ CHANGE COLUMN | ❌ 不支持 |
| 删除字段 | ✅ | ❌ 不支持 |
| 自增主键 | AUTO_INCREMENT | AUTOINCREMENT |
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 工具栏功能按钮(funDsDict) #
在工具栏添加批量操作按钮:
funDsDict = el-icon-check:12!,批量审批:13
传参:action(按钮 key)、updatelist(选中行主键列表,逗号分隔)。
9.5 批量动作(actionDict) #
开启多选后,针对选中行执行批量操作:
actionDict = {"approve": ["批量审批", "green"], "reject": ["批量驳回", "red"]}
显示为按钮,点击后带二次确认,执行时传参 action 和 updatelist。
9.6 左侧树形菜单(tree_ds) #
tree_ds = 15 // 树形菜单数据集 ID
treeWidth = 180px // 树宽度
数据集返回树形结构数据,点击叶子节点自动向后端传 _label 参数并刷新表格。
9.7 新增前后钩子(addb_id / adda_id) #
新增前校验(addb_id):
# 数据集返回格式
{"status": 200, "msg": "提示信息", "data": {...}} # data 可替换提交数据
{"status": 400, "msg": "校验失败原因"} # 阻止提交
新增后触发(adda_id): 提交成功后自动调用,可用于发送通知、触发工作流等。
9.8 扫码输入 #
typeDict = barcode:qr
qrFormats = code_128,qr_code // 支持的码格式(空则全支持)
qrCheckStr = SC // 扫码内容必须以 SC 开头
scanSubmit = true // 扫码后自动提交表单
9.9 文件/图片上传 #
typeDict = avatar:img,attachment:file
uploadpath = my_files // 文件存储路径
上传地址:/echart/upload_file/,存储路径:/static/custom/{uploadpath}/{filename}。
9.10 自定义计算(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: 导出按钮导出的是什么?
默认导出
shortTableFields或tableFields中的字段,使用fullData(全量数据,非当前页)。设置daochu_id可自定义导出数据集。
Q: 移动端显示效果不好?
开启
isMobileCard = true在移动端切换为卡片列表模式,通过tableFields控制显示字段,shortCol控制列数。
版权说明: SmartChart / SmartCRUD 由 JohnYan 设计