当前位置: 首页 > news >正文

vue3列表页搜索条件封装

搜索框组件

  • 封装常用搜索框组件,类型有:
    • input(默认值)
    • select
    • selectV2 (value/label键值对数组)
    • datePicker
    • year
  • 集成新增、修改、删除、导入、导出按钮,支持slot自定义其他按钮
  • 封装搜索、重置按钮
  • 封装按钮权限
  • 封装导入弹框

本例仅列出常用的封装,其他类型的可自行加入

参数

名称类型必传说明
queryParamsObjecttrue搜索框的变量值
searchOptionsArraytrue搜索框显示的值及参数类型,具体见下表
showSearchBooleanfalse是否显示右侧搜索功能组
btnListArrayfalse按钮组,默认值:[‘add’, ‘edit’, ‘remove’, ‘import’, ‘export’]
singleBooleanfalse单选
multipleBooleanfalse多选
authPreFixStringfalse权限前缀
exportUrlStringfalse导出url,可优化省略掉
titleStringfalse导出名称
searchOptions属性
名称默认值可选说明
label表单名称
prop参数名称
typeinputselect、selectV2、datePicker、year类型
width200宽度
options选项
valueFormat日起值格式
disabled是否禁用

用法

 <search-toolref="searchRef":search-options="searchOptions":query-params="queryParams"@query="handleQuery"@reset="handleReset"/>const searchOptions3 = reactive([{ prop: 'code', label: '自动配置编码', },{ prop: 'userName', label: '用户名称', },{ prop: 'year', label: '注册年份', type: 'year', },{ prop: 'type', label: '类型', type: 'select', options: [], },{ prop: 'auditFlag', label: '审核标识', type: 'select', options: [], },
])

这样,一个搜索栏就做好了,有以下好处:

  • 格式样式统一;
  • 代码简洁;
  • 便于维护;

源码

<template>
<!--  搜索区域--><el-form :model="props.queryParams" ref="queryRef" :inline="true" v-show="showSearch2"><el-form-item v-for="(item, index) in props.searchOptions" :key="index" :label="item.label" :prop="item.prop"><el-inputv-if="item.type === 'input' || !item.type"v-model="props.queryParams[item.prop]":placeholder="'请输入' + item.label"clearable:style="`width:${item.width || defaultWidth}px`"@keyup.enter="handleQuery"/><el-selectv-if="item.type === 'select'"v-model="props.queryParams[item.prop]":placeholder="'请选择' + item.label"clearablefilterable:style="`width:${item.width || defaultWidth}px`"><el-optionv-for="dict in item.options":key="dict.value":label="dict.label":value="dict.value"/></el-select><el-select-v2v-if="item.type === 'selectV2'"v-model="props.queryParams[item.prop]":options="item.options"clearablefilterable:style="`width:${item.width || defaultWidth}px`":placeholder="'请选择' + item.label"/><el-date-pickerv-if="item.type === 'datePicker'"v-model="props.queryParams[item.prop]":value-format="item.valueFormat || defaultTimeFormat":format="item.format || defaultTimeFormat"type="daterange"range-separator="-"start-placeholder="开始日期"end-placeholder="结束日期":style="`width:${item.width || 180}px`"></el-date-picker><el-date-pickerv-if="item.type === 'year'"v-model="props.queryParams[item.prop]"type="year"value-format="YYYY":placeholder="'请选择' + item.label":style="`width:${item.width || 120}px`":disabled="item.disabled"/></el-form-item><el-form-item><el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button><el-button icon="Refresh" @click="resetQuery">重置</el-button></el-form-item></el-form>
</template><script setup>
import { getCurrentInstance, ref } from "vue";const props = defineProps({queryParams: { type: Object, required: true, },searchOptions: {type: Array,required: true,default: () => {return []},},showSearch: { type: Boolean, default: true },// 显隐列columns: { type: Array, default: () => [] }
})
const emits = defineEmits(['query', 'reset'])
const { proxy } = getCurrentInstance();
const showSearch2 = ref(props.showSearch)// 默认宽度
const defaultWidth = ref(200)
// 默认时间格式
const defaultTimeFormat = 'YYYY-MM-DD'// 搜索
const handleQuery = () => { emits('query') }// 重置
const resetQuery = () => {proxy.resetForm("queryRef");emits('reset')
}
</script>
http://www.lryc.cn/news/428075.html

相关文章:

  • 十三、切片的复制
  • Java Stream API 的应用:提取并处理多属性集合
  • 【技术方案】智慧城市大数据平台技术方案(Doc原件)
  • vue项目中引入字体文件样式
  • Android 11强制App固定user_rotation方向显示
  • Harbor仓库push显示
  • Windows 上设置 MySQL 的主从复制
  • 鸿蒙内核源码分析(原子操作篇) | 谁在为原子操作保驾护航
  • vue3+ts封装axios以及解决跨域问题
  • 各厂家BI对比
  • SQL - 触发器
  • Redis中缓存穿透、缓存击穿、缓存雪崩的详解
  • [Meachines] [Medium] Popcorn SQLI+Upload File+PAM权限提升
  • 【Linux】python进程管理之supervisor安装使用教程
  • BEM架构
  • 物联网(IoT)详解
  • ansync/await 运行流程图
  • 生产环境docker nginx+php8.0镜像
  • 【Hadoop】核心组件深度剖析:HDFS、YARN与MapReduce的奥秘
  • Docker Swarm部署SpringCloud Alibaba微服务踩坑记录
  • 深入理解Spring Boot中的AOP应用:从基础组件到高级功能的实现
  • 《区块链与监管合规:在创新与规范之间寻求平衡》
  • Nuxt3【服务器】server 详解
  • 防火墙技术原理与应用
  • 【BUU】[NewStarCTF 2023 公开赛道]Final -CP读取文件内容
  • 火绒安全:一款强大且高效的国产杀毒软件
  • Oracle 的DBA有哪些权限
  • 在navicat上运行sql文件
  • STM32裸机和RTOS中的线程安全问题及STM32cubeMX中的线程安全策略
  • 图的遍历