Skip to content

BaseJsonForm

我们在写中台每天就是和表格、表单打交道,能不能有个整个让我们方便操作

场景

普通场景

  • 普通表单
  • 查询+表格
  • 查询+action+表格

复杂操作

  • tabs + 表单(每个 tab 对应一个表单)
  • tabs(整个表单一起提交) + 表单
  • steps + 表单(每个 step 对应一个表单, 每步可以单独提交,也可以最后一步提交)

典型表单

登录表单

不同对齐方式的表单

不同布局类型的表单

支持默认值

对象表单

动态表单

不同 span 的表单

自定义插槽

使用 group 完成复杂表单项

左边表单

  • 每个选项卡提交

头部表单

  • 一次性提交, 有错误切换到错误选项卡

步骤表单

  • 分步校验(也支持提交)
  • 最后一步一次性提交

典型表格

  • 默认分页加载

表格多选

表格单选

表格索引

TODO: 树形表格

树状筛选列表页

卡片列表

  • 默认滚动加载

API

参数说明类型默认值版本
...继承TForm | TTable 字段unknown-
action右边操作按钮v-slot-
autoFetch自动请求,是query的自动请求为trueboolean-
colon分号booleanfalse
columns表格项, key 支持 aa.bb 模式,提交转换成对象aa: {bb: val}; value字符串labelRecord<key | v-slot, string | BaseJsonFormColumn>{}
inputs表单项, key 支持 aa.bb 模式,提交转换成对象aa: {bb: val}; value字符串labelv-slot | Record<key | v-slot, string | BaseJsonFormInput>{}
labelAlign标签对其方式'left' | 'right' | 'top'-
labelWidth标签宽度, inline 宽度默认autostring | number100px
layout表单对其方式'inline' | 'vertical'-
list表格v-slot-
listType表格展现'table' |'card''table'1.0.1
model提交表单对应的 modelBaseJsonFormModel{}
onSubmit提交成功后触发(res: any |{ rows: BaseJsonFormRow[]; total?: number } |BaseJsonFormRow[]) => void
paginationType分页展现, 列表展现card默认scroll; table默认pagination'pagination' |'scroll'-1.0.1
query查询按钮v-slot-
request表单提交的接口或表格查询的接口BaseJsonFormRequest-
showQuery是否显示查询按钮booleantrue
span整体分栏number12
title标题v-slot | string-
titleBold标题加粗boolean-

BaseJsonFormInput 属性

参数说明类型默认值版本
...继承TFormItem | TField字段unknown-
append结尾,包裹在灰色盒子内string-
bottomstring-1.0.1
group组合, 同名组合并在一起展示[groupName: string, position?: 'top' | 'bottom' | 'left' | 'right' | 'prepend' | 'append']-1.0.1
if判断,用于动态控制显示和隐藏,默认都展示(model: BaseJsonFormModel) => boolean-
label标签, 字符串*代表必填string | v-slot-
left左边string-1.0.1
onon前缀,触发原生事件, 例如 onChange(model: BaseJsonFormModel, ...其他默认值) => void-
options选项集合、下拉、单选、多选BaseJsonFormInputOption[]-
outputs输出项,onChange 触发Record<string, string | (option: BaseJsonFormInputOption) => any>-
prefix前缀string-
prepend开头,包裹在灰色盒子内string-
required必填boolean-
right右边string-1.0.1
span拆分栏目, 没值使用整体spannumber-
subLabel副标签, 字符串*代表必填string | v-slot-1.0.1
suffix后缀string-
tips标签后面提示文案string-
topstring-1.0.1
type类型BaseJsonFormInputType-
value默认值BaseJsonFormModelValue-
widthfield 宽度string'auto'

BaseJsonFormColumn 属性

参数说明类型默认值版本
align对齐方式'left' | 'right' | 'center''left'
append结尾,灰色里面string-1.0.1
before前面string-1.0.1
bottom底部string-1.0.1
ellipsis省略号booleantrue
fixed固定, 左边第一个默认固定在左边,右边最后一个固定在右边'left' | 'right'-
if判断,用于动态控制显示和隐藏,默认都展示(model: BaseJsonFormModel) => boolean-
label标签, 字符串*代表必填string | v-slot-
left左边string-1.0.1
minWidthcolumn 最小宽度string'auto'
prepend开头,灰色里面string-1.0.1
required必填boolean-1.0.1
right右边string-1.0.1
subLabel副标签,string | v-slot-1.0.1
tips标签后面提示文案string-1.0.1
top上面string-1.0.1
type类型BaseJsonFormInputType'text'
widthcolumn 宽度string'auto'

BaseJsonFormInputType 属性

  • 目前注入 TDesign 下输入组件
类型说明TDesign版本
AutoComplete自动填充AutoComplete 自动填充
Cascader级联选择器Cascader 级联选择器
Checkbox多选框组CheckboxGroup 多选框
ColorPicker颜色ColorPicker 颜色选择器
DatePicker日期DatePicker 日期选择器
FormForm 表单
InputInput 输入框
InputAdornmentInputAdornment 输入装饰器
InputNumberInputNumber 数字输入框
RadioRadioGroup 单选框
RangeInputRangeInput 范围输入框
SelectSelect 选择器
SelectInputSelectInput 筛选器输入框
SliderSlider 滑块
Status显示状态1.0.1
SwitchSwitch 开关
TagInputTagInput 标签输入框
Text显示文本1.0.1
TextareaTextarea 多行文本框
TimePickerTimePicker 时间选择器
TransferTransfer 穿梭框
TreeSelectTreeSelect 树选择
UploadUpload 上传
以下是自定义组件
Search搜索组件,在Input基础上增加搜索iconBaseSearch

类型定义

ts
export type BaseJsonFormModel = Record<string, BaseJsonFormModelValue>;
export type BaseJsonFormModelValue =
  | string
  | number
  | boolean
  | string[]
  | number[];
export type BaseJsonFormInputOption = {
  label: string;
  value: BaseJsonFormModelValue;
  children?: BaseJsonFormInputOption[];
  [key: string]: any;
};
export type BaseJsonFormRequest = {
  (model: BaseJsonFormModel): Promise<
    any | { rows: BaseJsonFormRow[]; total?: number } | BaseJsonFormRow[]
  >;
};

组件实例方法

参数说明类型默认值版本
clearValidate(fields?: Array<keyof FormData>)-
init初始化() => void-
model获取 flatModel() => BaseJsonFormModel-
reset(params?: FormResetParams<FormData>)-
setValidateMessage(message: FormValidateMessage<FormData>)-
submit(params?: { showErrorMessage?: boolean })-
validate(params?: FormValidateParams) => Promise<FormValidateResult<FormData>>-
validateOnly(params?: Pick<FormValidateParams, 'fields' | 'trigger'>) => Promise<FormValidateResult<FormData>>-