查询条件表单组件ReSearchForm

查询条件表单组件ReSearchForm

组件实现基于 Vue3 + Element Plus + Typescript,同时引用 vueUse + lodash-es + tailwindCss (不影响功能,可忽略)

基于动态表单ReForm组件实现,支持网格布局,展开/折叠控制。ReForm组件可查看另一篇基于Element Plus的动态表单

思路

基于动态表单ReForm组件进行搜索条件配置,采用网格布局方式排列每个表单项。网格支持响应式调整,每个表单项也可以响应调整网格大小。基于 VueUse 的监听元素尺寸变化处理响应式,在基于自己封装的尺寸匹配方法实现整体的布局。

自动去掉一些无用的配置,如分组,纯文本。

替换默认的表单按钮组,重新实现搜索条件自带的按钮组,如查询、重置、折叠/展开。

整体设计:

  • 透传属性、事件、插槽给ReForm组件,基于ReForm进行表单渲染
  • 改写ReForm默认的按钮组,重新实现查询条件按钮组
  • 基于网格响应hook获取网格配置,响应布局变化
  • 折叠/展开需要基于网格数量进行表单配置渲染控制

难点

  • 折叠/展开需要基于网格数量进行表单配置渲染控制:通过网格数量计算应该展示的表单配置项,在传给ReForm组件进行渲染。

基础应用

通过配置 items 定义搜索条件表单,与 ReForm 配置一致,绑定 search 事件手动发起请求或者传入 request 接口请求方法自动请求。

在这里插入图片描述

查看 /demo/search/basic.md

显示标签

设置 showLabel 属性控制搜索条件表单是否展示表单标签,只有为 true 时,labelPositionlabelWidth 属性才会生效。

在这里插入图片描述
在这里插入图片描述

查看 /demo/search/label.md

显示折叠按钮

设置 showCollapsedBtn 属性展示折叠按钮,可通过collapsedTextdefaultCollapsed 等属性控制折叠按钮的展示。

在这里插入图片描述
在这里插入图片描述

查看 /demo/search/collapsed.md

默认折叠显示行数

开启折叠按钮后,可以通过 collapsedRows 属性控制折叠后表单显示的行数,默认折叠后只展示1行。当不存在可以折叠的情况下,默认会禁用折叠按钮,如果想完全隐藏折叠按钮,可以通过 hideCollapsedBtnWhenNone 属性控制。

在这里插入图片描述

查看 /demo/search/collapsed-rows.md

按钮组对齐方式

默认情况下,按钮组采用左对齐,自动会跟随表单控件换行,如果不想按钮组单独一行时展示在左侧,可以通过 btnAlign="right" 属性控制按钮组的对齐方式。

在这里插入图片描述
在这里插入图片描述

查看 /demo/search/btn-align.md

搜索条件表单可通过 cols 字段配置响应式网格列数,同时配合表单配置项 span 字段控制响应式网格大小。

ReSearchForm属性

字段说明类型默认值
items必填,表单配置项集合Array<ReFormItem>[]
modelValue表单数据ReFormModelValue-
cols表单网格布局列数number | ReGridResponsive3
colGap表单网格布局水平间距number16
size表单尺寸“large” | “default” | “small”“default”
disabled表单是否禁用booleanfalse
btnSpan搜索条件表单按钮组的网格大小ReFormProps[“btnSpan”]1
btnAlign搜索条件表单按钮组的对齐方式“left” | “right”“left”
searchBtnText查询按钮文本string“搜索”
resetBtnText重置按钮文本string“重置”
searchBtnProps查询按钮自定义属性Partial<ButtonProps>-
resetBtnProps重置按钮自定义属性Partial<ButtonProps>-
showCollapsedBtn展示折叠/收起按钮booleanfalse
collapsedText折叠/收起按钮文,索引0表示折叠时按钮文本,索引1表示展开时按钮文本string | string[]["展开", "收起"]
collapsedRows折叠收起展示行数number1
defaultCollapsed初始化默认折叠状态booleantrue
showLabel是否显示表单字段标签booleanfalse
showTips是否显示表单项tips字段booleanfalse
autoSearchAfterEnter按下回车键触发查询booleanfalse
autoSearchAfterReset点击重置触发查询booleantrue
disabledFormWhenSearch远程请求时是否禁用表单防止表单修改booleantrue
autoSearchAfterMounted初始化后自动发起查询,父组件不需要单独在执行一次接口请求booleanfalse
hideCollapsedBtnWhenNone没有字段隐藏时不显示折叠按钮booleanfalse
loading搜索条件请求状态booleanfalse
request搜索条件自动请求接口方法(model: Record\<string, any\>) => Promise\<any\>-

除了上述属性,其他属性会自动被ReForm组件继承

ReSearchForm事件

事件名说明格式 |
change表单控件字段值发生变化时触发(field: string, value: any, model: MaybeRef\<FormModelValue\>) => void
update:modelValue表单数据更新后触发(model: MaybeRef\<FormModelValue\>) => void
search点击查询按钮触发,只有未自定义 btns 插槽时有效(formData: FormModelValue) => void
reset点击重置按钮触发,只有未自定义 btns 插槽时有效() => void
collapsed点击折叠按钮触发,只有未自定义 btns 插槽时有效(collapsed: boolean) => void

type FormModelValue = Record<string, any>

除了上述事件之外,表单控件的具体事件可以通过表单配置项字段 events 进行绑定。

ReSearchForm插槽

除了 [field]-group 分组触发器插槽以外,与 ReForm 一致。

ReSearchForm Expose

字段说明类型
reFormRefElForm组件示例InstanceType<typeof ElForm>
innerFormRefReForm组件示例InstanceType<typeof ReForm>
localFormData搜索条件表单数据对象MaybeRef<Record<string, any>>
localCollapsed搜索条件折叠状态Ref<boolean>
handleSearch发起一次查询() => void
handleReset重置搜索条件表单() => void

源代码

Github

可以通过查看具体实现,如果遇到问题可以留言或者提出issue。

如果觉得对您有帮助的话,可以请小编瑞一下

在这里插入图片描述

在这里插入图片描述

  • 23
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iWangsd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值