Skip to content

Cell 体系

Cell 是 Schemly 的最小原子单元。所有高级展示形式(表格列、描述项、表单字段)都消费 Cell。

Cell 声明结构

json
{
  "key": "status",
  "label": "状态",
  "cell": "enum",
  "cellProps": { ... },
  "displayAs": "tag",
  "editAs": "select",
  "permission": { ... }
}
字段类型必填说明
keystring数据字段名,对应数据对象中的属性
labelstring显示标签
cellstring数据语义类型,决定默认渲染器
cellPropsobject渲染器配置参数,display 和 edit 共享
displayAsstring覆盖默认的展示渲染器
editAsstring覆盖默认的编辑渲染器
permissionstring / objectCell 级权限声明(详见 权限体系

最简写法只需 keylabelcell 三个字段:

json
{ "key": "orderNo", "label": "订单号", "cell": "text" }

Cell 数据类型

cell含义默认 displayAs默认 editAs数据类型
text文本textinputstring
number数字numberinputNumbernumber
currency金额currencyinputNumbernumber
enum枚举值tagselectstring / number
boolean布尔值textswitchboolean
datetime日期时间datedatePickerstring
dateRange日期区间datedateRangePickerstring[]
image图片imageimageUploadstring / string[]
file文件filefileUploadobject / object[]
link链接linkinputstring
detail详情弹窗detailtextareastring

特殊规则

enum 类型在 cellProps 中启用远程搜索时,默认 displayAs 降级为 text

双模态机制

容器根据自身语义自动决定使用哪种模态:

容器默认模态
DataTable columnsdisplay
Descriptions itemsdisplay
Form fieldsedit
DataTable createForm / updateFormedit

cellProps 详细说明

text

cellProps 字段类型默认值说明
maxlengthnumber最大长度(edit 模式)
placeholderstring占位文本(edit 模式)
showOverflowTooltipbooleantrue溢出时 tooltip(display 模式)

number

cellProps 字段类型默认值说明
precisionnumber0小数位数
thousandSepbooleantrue千分位(display 模式)
minnumber最小值(edit 模式)
maxnumber最大值(edit 模式)
stepnumber1步进(edit 模式)

currency

cellProps 字段类型默认值说明
precisionnumber2小数位数
prefixstring"¥"货币符号(display 模式)
minnumber0最小值(edit 模式)
maxnumber最大值(edit 模式)

enum

根据 options 前缀不同,cellProps 分为三种模式(详见 数据源与字典):

静态字典模式:

cellProps 字段类型说明
optionsstring字典引用,格式 dict:xxx
colorsobjectvalue → Element Plus type 颜色映射

动态接口模式:

cellProps 字段类型默认值说明
optionsstring接口引用,格式 api:xxx
labelKeystring"label"返回数据中的 label 字段名
valueKeystring"value"返回数据中的 value 字段名

远程搜索模式:

cellProps 字段类型默认值说明
optionsstring搜索方法引用,格式 remote:xxx
labelKeystring"label"搜索结果中的 label 字段名
valueKeystring"value"搜索结果中的 value 字段名
displayLabelKeystring行数据中已有的 label 字段名

boolean

cellProps 字段类型默认值说明
activeTextstring"是"true 的展示文本
inactiveTextstring"否"false 的展示文本
activeColorstringswitch 激活颜色(edit 模式)

datetime

cellProps 字段类型默认值说明
formatstring"YYYY-MM-DD HH:mm:ss"展示格式
valueFormatstring值的格式(edit 模式提交格式)
pickerTypestring"date"选择器类型:date / datetime / month / year

dateRange

cellProps 字段类型默认值说明
formatstring"YYYY-MM-DD"展示格式
valueFormatstring值的格式
startKeystring起始日期字段名(提交时拆分)
endKeystring结束日期字段名

image

cellProps 字段类型默认值说明
multiplebooleanfalse是否多图
limitnumber多图模式下最大数量
widthnumber60缩略图宽度(display 模式)
heightnumber60缩略图高度(display 模式)
previewbooleantrue点击预览大图(display 模式)
acceptstring"image/*"上传类型限制(edit 模式)
maxSizenumber上传大小限制 MB(edit 模式)
uploadFnstring"uploadImage"上传函数 key,从 providers.functions 中查找

数据格式约定:

json
// 单图:值为字符串
{ "avatar": "https://xxx/1.jpg" }

// 多图:值为字符串数组
{ "photos": ["https://xxx/1.jpg", "https://xxx/2.jpg"] }
  • display 模式:单图缩略图点击预览;多图横向排列,支持左右滚动,点击进入画廊预览。
  • edit 模式:单图上传支持替换删除;多图上传支持拖拽排序和逐个删除。上传逻辑由 providers.functions 中对应的上传函数注入。

file

cellProps 字段类型默认值说明
multiplebooleanfalse是否多文件
limitnumber多文件最大数量
acceptstring"*"允许的文件类型
maxSizenumber单文件大小限制 MB
uploadFnstring"uploadFile"上传函数 key,从 providers.functions 中查找

数据格式约定:

json
// 单文件
{
  "contract": { "name": "合同.pdf", "url": "https://xxx/contract.pdf", "size": 1024000 }
}

// 多文件
{
  "attachments": [
    { "name": "报告.pdf", "url": "https://xxx/1.pdf", "size": 1024000 },
    { "name": "数据.xlsx", "url": "https://xxx/2.xlsx", "size": 2048000 }
  ]
}

文件项结构:

字段类型说明
namestring文件名
urlstring文件地址
sizenumber文件大小(字节,可选)
cellProps 字段类型默认值说明
targetstring"_blank"链接打开方式
hrefstring链接地址字段名(若非 key 本身)

detail

Detail 是纯展示交互型 Cell,点击后弹出详情弹窗,支持纯文本和高亮匹配两种模式。

cellProps 字段类型默认值说明
triggerstring"button"触发方式:button(按钮)/ link(文字链接)
buttonTextstring"查看"触发按钮/链接的文字
modestring"text"弹窗内容模式:text(纯文本)/ highlight(高亮匹配)
highlightKeystringhighlight 模式下,高亮关键词的数据字段名
dialogTitlestring"详情"弹窗标题
dialogWidthstring"600px"弹窗宽度

text 模式:弹窗中展示字段完整内容。

json
{
  "key": "content",
  "label": "内容",
  "cell": "detail",
  "cellProps": {
    "trigger": "button",
    "buttonText": "查看详情",
    "mode": "text",
    "dialogTitle": "内容详情"
  }
}

highlight 模式:弹窗中展示完整内容,关键词高亮标记。关键词从 row[highlightKey] 取(字符串或字符串数组)。

json
{
  "key": "matchResult",
  "label": "匹配结果",
  "cell": "detail",
  "cellProps": {
    "trigger": "button",
    "buttonText": "查看匹配",
    "mode": "highlight",
    "highlightKey": "keywords",
    "dialogTitle": "匹配详情"
  }
}

对应行数据:{ "matchResult": "包含关键信息的文本...", "keywords": ["关键", "信息"] }

  • display 模式:渲染按钮或文字链接,点击弹出 Dialog。
  • edit 模式:自动降级为 textarea 编辑器。

Released under the MIT License.