ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

FaSearchBar 可折叠搜索栏:Fantastic Admin 列表页筛选区的折叠容器组件实战指南

FaSearchBar 可折叠搜索栏:Fantastic Admin 列表页筛选区的折叠容器组件实战指南 前端AI 技能【免费下载链接】basic⭐⭐⭐⭐⭐ 面向 AI 编程的管理系统框架兼容PC、移动端。AI-oriented management system framework, compatible with PC and mobile device.项目地址https://gitcode.com/GitHub_Trending/ba/basic点击查看免费下载FaSearchBar 是 Fantastic Admin 组件库中提供的一个可折叠搜索区域容器组件专门用于承载列表页筛选条件、高级搜索表单与报表筛选选区。它本身不渲染任何表单项而是通过 slot 接收表单内容并对外暴露fold折叠状态与toggle切换方法帮助开发者用极少的代码实现常用条件常驻、次要条件折叠的经典搜索区交互。本文将以 search-bar/README.md 为核心结合组件源码与仓库内示例完整讲解其 Props、Slots、Events 及四种实战用法读完即可在项目中直接落地。一、组件定位与使用场景FaSearchBar 解决的是后台管理系统中列表页筛选区的空间管理问题当筛选条件较多时全部平铺会挤压表格可视区域而完全隐藏又需要额外状态管理。该组件以容器 折叠状态的形式把展开/收起这一通用交互封装为开箱即用的能力。README 明确列出的适用场景包括列表页面筛选区用户列表、订单列表等常规 CRUD 页面顶部的条件栏高级搜索表单条件字段较多、需要二级展开的高级查询数据查询条件数据分析页面的多维过滤条件报表筛选选区报表导出前的范围与维度选择可折叠的表单区域任意需要按需展开/收起的表单区块。组件设计上遵循容器不关心内容的原则——它不内置任何输入框、下拉框表单元素完全由使用方通过default插槽注入因此与 FaInput、FaSelect、FaButton 等基础组件自由组合即可。二、安装与引入FaSearchBar 位于组件库源码目录packages/components/src/basic/search-bar/其入口文件 index.ts 仅一行导出export { default as SearchBar } from ./index.vue组件库统一出口 packages/components/src/index.ts 中以FaSearchBar的名称对外暴露export { SearchBar as FaSearchBar } from ./basic/search-bar在仓库提供的各应用如apps/core、apps/example等中组件通过 unplugin 自动导入机制按需注册类型声明统一写入各应用的 components.d.ts因此实际使用时无需手动 import直接在模板中书写FaSearchBar即可。组件内部通过defineOptions({ name: BuiltInSearchBar })声明了名称便于 DevTools 调试与 keep-alive 场景下的组件识别。此外组件源码目录下的_examples/中存放了四个可运行的演示示例并在示例应用 search_bar.vue 页面中通过fantastic-admin/components/examples导出并渲染展示对应路由配置见 component.example.ts读者可以直接运行示例应用查看真实效果。三、Props 详解README 给出的 Props 定义如下属性类型默认值说明showTogglebooleantrue是否显示折叠按钮backgroundbooleanfalse是否显示背景色foldbooleanfalse折叠状态支持 v-model结合 index.vue 的源码实现逐项说明如下withDefaults( defineProps{ showToggle?: boolean background?: boolean }(), { showToggle: true, background: false, }, ) const fold defineModelboolean(fold, { default: true, })showToggle控制是否在容器底部渲染居中的折叠/展开按钮。设为false时按钮完全不渲染此时需要使用方在 slot 内自行提供切换入口见下文自定义触发按钮示例。background为true时为容器添加px-4 bg-secondary transition样式即内边距与主题次级背景色使搜索区在页面上形成独立的视觉区块。fold折叠状态通过defineModel实现 v-model 双向绑定。需要特别说明的是README 表格中标注默认值为false而当前源码实现中defineModel的默认值为true即默认折叠收起两者存在出入实际行为以源码为准。若希望进入页面时默认展开请显式传入v-model:foldfalse仓库默认展开示例即采用此写法。四、Slots 插槽组件仅提供一个default插槽用于承载搜索表单内容名称说明default搜索表单内容slot props:{ fold: boolean, toggle: () void }源码中通过slot :foldfold :toggletoggle /见 index.vue向插槽内容暴露两个关键值fold: boolean当前是否处于折叠状态。使用方需要在插槽内根据该值控制次要条件字段的显隐典型写法是v-show!fold。toggle: () void切换折叠状态的函数。当showToggle为false隐藏内置按钮时可将其绑定到自定义按钮的click上实现完全自定义的触发入口。五、Events 事件事件名参数说明togglevalue: boolean折叠状态变化时触发源码中的触发逻辑位于 index.vuefunction toggle() { fold.value !fold.value emits(toggle, fold.value) }点击按钮或调用 slot 暴露的toggle函数后fold状态取反同时以新的状态值触发toggle事件。该事件适合在需要监听折叠状态变化以联动其他逻辑如统计布局高度、缓存展开偏好的场景使用。六、核心交互原理与渲染结构FaSearchBar 的实现非常轻量整个组件不到 50 行。理解其渲染结构有助于排查样式与布局问题index.vuetemplate div classrelative :class{ py-4: showToggle, px-4 bg-secondary transition: background, } slot :foldfold :toggletoggle / div v-ifshowToggle classtext-center w-full translate-y-1/2 bottom-0 left-0 absolute button classtext-xs font-medium px-2 outline-none border-size-0 rounded bg-secondary inline-flex h-5 cursor-pointer select-none items-center clicktoggle Icon :namefold ? i-ep:caret-bottom : i-ep:caret-top / /button /div /div /template几个值得注意的实现细节容器定位外层div使用relative定位折叠按钮通过absolutebottom-0 left-0translate-y-1/2实现骑跨在容器底边线的半隐藏效果视觉上更紧凑。按钮样式内置按钮复用主题的bg-secondary背景与text-xs字号并使用组件库自带的 Icon 渲染图标——折叠时显示i-ep:caret-bottom向下箭头提示可展开展开时显示i-ep:caret-top向上箭头提示可收起。内边距联动仅当showToggle为true时容器才保留py-4垂直内边距为骑跨按钮预留空间隐藏按钮后容器将不再多占用这部分高度。内容渲染策略组件本身不做任何内容隐藏折叠行为完全由使用方在插槽内通过fold值配合v-show/v-if自行控制。这是该组件设计上最大的自由度所在——你可以折叠任意数量的字段也可以自定义折叠后的过渡动画。七、实战示例仓库在_examples/目录提供了四个可直接运行的示例分别覆盖基础用法、默认展开、背景样式与自定义触发按钮。下面逐一展开讲解。7.1 基础用法默认折叠 次要条件收起_basic.vue 展示了最常见的列表筛选场景核心条件关键字、状态常驻展示次要条件部门、角色、来源、创建人默认折叠通过v-show!fold控制显隐script setup langts // 组件实际使用时无需手动导入框架会自动导入 import { reactive } from vue import FaButton from ../../button/index.vue import FaInput from ../../input/index.vue import FaSelect from ../../select/index.vue import FaSearchBar from ../index.vue const form reactive({ keyword: , status: all, department: , role: all, source: all, creator: , }) const statusOptions [ { label: 全部状态, value: all }, { label: 启用, value: enabled }, { label: 禁用, value: disabled }, ] /script template FaSearchBar template #default{ fold } div classgap-3 grid grid-cols-1 md:grid-cols-[repeat(auto-fit,minmax(350px,1fr))] FaInput v-modelform.keyword placeholder搜索用户名 classw-full / FaSelect v-modelform.status :optionsstatusOptions classw-full / FaInput v-show!fold v-modelform.department placeholder部门 classw-full / FaSelect v-show!fold v-modelform.role :optionsroleOptions classw-full / FaSelect v-show!fold v-modelform.source :optionssourceOptions classw-full / FaInput v-show!fold v-modelform.creator placeholder创建人 classw-full / div classflex gap-2 col-end--1 justify-end FaButton查询/FaButton FaButton variantoutline 重置 /FaButton /div /div /template /FaSearchBar /template要点查询/重置按钮使用col-end--1 justify-end固定在栅格最右侧折叠按钮由组件内置渲染无需额外代码。7.2 默认展开通过 v-model 控制初始状态_expanded.vue 演示了如何使用v-model:fold控制初始展开状态——页面进入时即展示全部筛选条件script setup langts import { reactive, shallowRef } from vue // ... FaButton / FaInput / FaSelect 导入省略 const form reactive({ keyword: , status: all, owner: , priority: all, category: all, project: , participant: , }) const fold shallowRef(false) /script template FaSearchBar v-model:foldfold template #default{ fold: isFold } !-- 网格布局中次要字段统一 v-show!isFold -- FaInput v-show!isFold v-modelform.owner placeholder负责人 classw-full / !-- ... 其余字段与查询/重置按钮省略 -- /template /FaSearchBar /template实现要点通过shallowRef(false)初始化折叠状态再以v-model:fold绑定到组件。同时注意插槽解构时可对fold重命名{ fold: isFold }避免与外部同名变量冲突。7.3 背景样式独立视觉区块_background.vue 通过background属性为搜索区添加次级背景色与内边距让筛选区域在页面上形成清晰的独立区块适合需要与表格内容在视觉上强区分的页面template FaSearchBar background template #default{ fold } !-- 公告/消息类筛选表单关键字、类型、创建人、渠道、范围、审核人 -- FaInput v-show!fold v-modelform.creator placeholder创建人 classw-full / FaSelect v-show!fold v-modelform.channel :optionschannelOptions classw-full / !-- ... -- /template /FaSearchBar /template开启后容器自动获得px-4 bg-secondary transition样式类背景色跟随当前主题的次级色变量深浅主题切换时无需额外适配。7.4 自定义触发按钮隐藏内置按钮_custom-trigger.vue 展示show-togglefalse的用法隐藏底部居中按钮改由使用方在表单区域内部如按钮组末尾提供自定义的展开/收起入口同时利用插槽暴露的fold与toggle动态渲染文案与图标template FaSearchBar :show-togglefalse template #default{ fold, toggle } div classgap-3 grid grid-cols-1 md:grid-cols-[repeat(auto-fit,minmax(350px,1fr))] FaInput v-modelform.keyword placeholder搜索文章 classw-full / FaSelect v-modelform.status :optionsstatusOptions classw-full / FaInput v-show!fold v-modelform.tag placeholder标签 classw-full / !-- 其余次要字段 v-show!fold 省略 -- div classflex gap-2 col-end--1 justify-end FaButton查询/FaButton FaButton variantoutline重置/FaButton FaButton variantghost clicktoggle {{ fold ? 展开 : 收起 }} FaIcon :namefold ? i-lucide:chevron-down : i-lucide:chevron-up / /FaButton /div /div /template /FaSearchBar /template此模式将折叠入口融入操作按钮组界面更整洁也便于统一按钮的间距与视觉风格适合筛选条件较多、不希望底部出现独立按钮的场景。八、注意事项与最佳实践结合 README 的注意事项与源码实现归纳如下使用要点折叠内容需自行控制fold为true时组件并不会自动隐藏任何内容必须在插槽内依据fold值如v-show!fold控制次要字段的显示逻辑折叠行为才能生效。折叠按钮位置默认情况下折叠按钮渲染在容器底部中央以骑跨式半遮挡样式呈现若要调整位置或样式请使用show-togglefalse配合自定义触发按钮。双向绑定fold支持v-model双向绑定既可在父组件读取当前折叠状态也可通过外部变量控制初始展开/收起。默认值出入README 标注fold默认值为false但当前源码defineModel的默认值为true默认折叠如需页面初始展开务必显式绑定v-model:foldfalse。与 v-show 搭配而非 v-if折叠字段建议使用v-show避免字段切换时表单组件被销毁重建导致焦点丢失、校验状态重置等副作用。表单联动查询/重置按钮通常与表单绑定重置时除了清空reactive表单数据外如需要可同时恢复折叠状态将fold置回初始值。栅格自适应示例中统一采用grid grid-cols-1 md:grid-cols-[repeat(auto-fit,minmax(350px,1fr))]布局在移动端单列展示、桌面端按宽度自动换行与项目兼容 PC、移动端的整体定位一致。九、总结FaSearchBar 以极低的实现成本不足 50 行源码封装了列表页筛选区最通用的折叠/展开交互配合fold双向绑定、showToggle与background两个布尔开关以及向插槽暴露的fold/toggle能力可以覆盖从极简筛选到高级搜索表单的绝大多数场景。其源码位于 packages/components/src/basic/search-bar/index.vue四个完整可运行的示例见同目录下的_examples/文件夹示例展示页面为 apps/example/src/views/component_example/search_bar.vue读者可直接对照运行将其作为列表页筛选区的标准容器组件复用。赞分享前端AI 技能【免费下载链接】basic⭐⭐⭐⭐⭐ 面向 AI 编程的管理系统框架兼容PC、移动端。AI-oriented management system framework, compatible with PC and mobile device.项目地址https://gitcode.com/GitHub_Trending/ba/basic点击查看免费下载相关推荐Graylog 前端 ExpandableList 可折叠列表组件实战指南Graylog 前端 ExpandableList 可折叠列表组件实战指南 导读 ExpandableList 是 Graylog Web 前端 graylo日志分析运维观测探索 CollapseClick优雅的可折叠列表控件探索 CollapseClick优雅的可折叠列表控件 项目介绍 CollapseClick 是一款强大且易于使用的 iOS 开源库它为你的应用提供了类似 U移动开发GDM Settings 快速入门5分钟学会美化你的登录界面GDM Settings 快速入门5分钟学会美化你的登录界面 GDM Settings 是一款专为 GNOME 桌面环境设计的登录界面自定义工具让你轻松定制上一篇Task 模板引擎完全指南用 Go text/template 打造动态 Taskfile下一篇Omarchy 安装脚本架构指南从 ISO 编排到目标端幂等配置创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表