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. 整体架构 #

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 表单标签宽度,如 80pxauto
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)intdecimal(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"]}

显示为按钮,点击后带二次确认,执行时传参 actionupdatelist

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: 导出按钮导出的是什么?

默认导出 shortTableFieldstableFields 中的字段,使用 fullData(全量数据,非当前页)。设置 daochu_id 可自定义导出数据集。

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

开启 isMobileCard = true 在移动端切换为卡片列表模式,通过 tableFields 控制显示字段,shortCol 控制列数。


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