Vue2.0+ElementUI实现查询条件展开和收起功能组件

news2025/1/24 17:36:49

一、需求

  1. el-form如果查询条件过多,影响页面的展示效果。
  2. 查询条件表单是我们系统中非常常见的功能,我们需要把它封装成一个通用的组件,方便在系统开发中提升开发效率。
  3. 除了在实现基本查询条件的功能上,还需要实现多条件的折叠和展开功能

二、效果图

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

三、 代码示例

  1. 封装查询条件表单组件 SearchButton.vue
<template>
  <div>
    <el-col :span="1.5" class="elrow">
      <el-form-item>
        <el-button type="primary" icon="el-icon-search" size="mini">查询</el-button>
      </el-form-item>
    </el-col>
    <el-col :span="1.5" class="elrow">
      <el-form-item>
        <el-button type="primary" icon="el-icon-refresh" size="mini">重置</el-button>
      </el-form-item>
    </el-col>
    <el-col :span="1.5" class="elrow">
      <el-form-item>
        <el-button type="text" size="mini" @click="closeSearch">
          {{ word }}
          <i :class="showAll ? 'el-icon-arrow-up ': 'el-icon-arrow-down'" />
        </el-button>
      </el-form-item>
    </el-col>
  </div>
</template>

<script>
export default {
  props: {
    showAll: {
      type: Boolean,
      defalut: true
    }
  },
  computed: {
    word: function() {
      if (this.showAll === false) {
        // 对文字进行处理
        return '展开搜索'
      } else {
        return '收起搜索'
      }
    }
  },
  mounted() {
    /**
			 * 收起搜索
			 */
    this.$nextTick(function() {
      this.closeSearch()
    })
  },
  methods: {
    closeSearch() {
      //					this.showAll = !this.showAll;
      this.$emit('closepop')
      console.log('子组件的状态:' + this.showAll)
    }
  }
}
</script>

<style>
</style>
  1. 使用查询条件表单组件(引入组件即可)
<template>
  <div class="app-container">
    <el-row :gutter="20">
      <el-form ref="condForm" :model="condForm" label-width="100px" :inline="true">
        <el-row class="btnRow">
          <el-col :span="6" class="elrow">
            <el-form-item label="线索编号1" prop="xsbh" style="padding-left: 10px;">
              <el-input v-model="condForm.xsbh" size="mini" clearable style="width: 160px;" />
            </el-form-item>
          </el-col>
          <el-col :span="6" class="elrow">
            <el-form-item label="线索类型1" prop="xslx">
              <el-select v-model="condForm.xslx" size="mini" style="width: 160px;">
                <el-option
                  v-for="item in xslxoptions"
                  :key="item.id"
                  :label="item.name"
                  :value="item.id"
                />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="6" class="elrow">
            <el-form-item label="线索来源1" prop="xsxz">
              <el-select v-model="condForm.xsxz" size="mini" style="width: 160px;">
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                />
              </el-select>
            </el-form-item>
          </el-col>

          <el-col :span="6" :class="!showAll ? 'btnRow' : 'unBtnRow'">
            <el-form-item label="线索编号1" prop="xsbh" style="padding-left: 10px;">
              <el-input v-model="condForm.xsbh" size="mini" clearable style="width: 160px;" />
            </el-form-item>
          </el-col>
          <search-button v-show="showAll" :show-all="showAll" @closepop="closepop" />
        </el-row>
        <el-row :class="!showAll ? 'btnRow' : 'unBtnRow'">
          <el-col :span="6" class="elrow">
            <el-form-item label="线索编号2" prop="xsbh" style="padding-left: 10px;">
              <el-input v-model="condForm.xsbh" size="mini" clearable style="width: 160px;" />
            </el-form-item>
          </el-col>
          <el-col :span="6" class="elrow">
            <el-form-item label="线索类型2" prop="xslx">
              <el-select v-model="condForm.xslx" size="mini" style="width: 160px;">
                <el-option
                  v-for="item in xslxoptions"
                  :key="item.id"
                  :label="item.name"
                  :value="item.id"
                />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="6" class="elrow">
            <el-form-item label="线索来源2" prop="xsxz">
              <el-select v-model="condForm.xsxz" size="mini" style="width: 160px;">
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="6" class="elrow">
            <el-form-item label="线索来源2" prop="xsxz">
              <el-select v-model="condForm.xsxz" size="mini" style="width: 160px;">
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                />
              </el-select>
            </el-form-item>
          </el-col>    <el-col :span="6" class="elrow">
            <el-form-item label="线索来源2" prop="xsxz">
              <el-select v-model="condForm.xsxz" size="mini" style="width: 160px;">
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                />
              </el-select>
            </el-form-item>
          </el-col>    <el-col :span="6" class="elrow">
            <el-form-item label="线索来源2" prop="xsxz">
              <el-select v-model="condForm.xsxz" size="mini" style="width: 160px;">
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                />
              </el-select>
            </el-form-item>
          </el-col>    <el-col :span="6" class="elrow">
            <el-form-item label="线索来源2" prop="xsxz">
              <el-select v-model="condForm.xsxz" size="mini" style="width: 160px;">
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                />
              </el-select>
            </el-form-item>
          </el-col>    <el-col :span="6" class="elrow">
            <el-form-item label="线索来源2" prop="xsxz">
              <el-select v-model="condForm.xsxz" size="mini" style="width: 160px;">
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                />
              </el-select>
            </el-form-item>
          </el-col>    <el-col :span="6" class="elrow">
            <el-form-item label="线索来源2" prop="xsxz">
              <el-select v-model="condForm.xsxz" size="mini" style="width: 160px;">
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                />
              </el-select>
            </el-form-item>
          </el-col>    <el-col :span="6" class="elrow">
            <el-form-item label="线索来源2" prop="xsxz">
              <el-select v-model="condForm.xsxz" size="mini" style="width: 160px;">
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                />
              </el-select>
            </el-form-item>
          </el-col>    <el-col :span="6" class="elrow">
            <el-form-item label="线索来源2" prop="xsxz">
              <el-select v-model="condForm.xsxz" size="mini" style="width: 160px;">
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                />
              </el-select>
            </el-form-item>
          </el-col>    <el-col :span="6" class="elrow">
            <el-form-item label="线索来源2" prop="xsxz">
              <el-select v-model="condForm.xsxz" size="mini" style="width: 160px;">
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                />
              </el-select>
            </el-form-item>
          </el-col>    <el-col :span="6" class="elrow">
            <el-form-item label="线索来源2" prop="xsxz">
              <el-select v-model="condForm.xsxz" size="mini" style="width: 160px;">
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                />
              </el-select>
            </el-form-item>
          </el-col>
          <SearchButton v-show="!showAll" :show-all="showAll" @closepop="closepop" />
        </el-row>
      </el-form>
    </el-row>

    <el-table
      ref="multipleTable"
      :data="tableData"
      size="medium"
      :header-cell-style="{background:'#f5f7fa'}"
      :height="tableHeight"
      stripe
      fit
      highlight-current-row
      border
      style="width: 100%;height:50px"
    >
      <el-table-column type="selection" width="55" align="center" </el-table-column>
        <el-table-column type="index" width="55" align="center" label="序号" min-width="209" />
        <el-table-column label="查看" width="60" align="center">
          <template slot-scope="scope">
            <el-button type="text" size="small" align="center">查看</el-button>
          </template>
        </el-table-column>
        <el-table-column label="删除" width="60" align="center">
          <template slot-scope="scope">
            <el-button type="text" size="small" align="center">删除</el-button>
          </template>
        </el-table-column>
        <el-table-column prop="jhbh" label="计划编号" :show-overflow-tooltip="true" align="center" />
        <el-table-column prop="xszt" label="状态" align="center" min-width="100" />
      </el-table-column></el-table>
    <!--分页查询工具条-->
    <el-col :span="24" class="toolbar">
      <el-pagination
        style="margin-right: 8px;text-align: right;"
        :page-sizes="pageSizes"
        :page-size="pageSize"
        :total="totalPage"
        :current-page.sync="pageIndex"
        background
        layout="total, sizes, prev, pager, next, jumper"
      />
    </el-col>
  </div>
</template>

<script>
import SearchButton from '@/components/SearchButton/index.vue'
export default {
  name: 'User',
  dicts: ['sys_normal_disable', 'sys_user_sex'],
  components: {
    SearchButton
  },
  data() {
    return {
      showAll: true,
      tableData: [],
      // 查询条件form
      condForm: {},
      condition: '',
      xslxoptions: [{
        id: '1',
        name: '土地'
      },
      {
        id: '2',
        name: '房屋'
      },
      {
        id: '3',
        name: '矿产'
      }
      ],
      options: [{
        value: '1',
        label: '动态巡查'
      }, {
        value: '2',
        label: '电话举报'
      }, {
        value: '3',
        label: '信访举报'
      }, {
        value: '4',
        label: '媒体曝光'
      }, {
        value: '5',
        label: '其他单位转交'
      }, {
        value: '6',
        label: '其他'
      }],
      pageIndex: 0,
      pageSize: 0,
      pageSizes: [20, 50, 100, 200],
      totalPage: 0
      //					height: window.innerHeight - 200,
    }
  },
  computed: {
    tableHeight() {
      if (this.showAll) {
        return window.innerHeight - 140
      } else {
        return window.innerHeight - 200
      }
    }
  },
  methods: {
    closepop() {
      this.showAll = !this.showAll
      console.log('父组件的状态:' + this.showAll)
    }
  }
}
</script>
<style>
	.btnRow {
		display: block;
	}

	.unBtnRow {
		display: none;
	}
</style>


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2281548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UE求职Demo开发日志#8 强化前置条件完善,给物品加图标

1 强化前置条件完善 StrengthManager里实现一个Check前置的函数 bool CheckPreAllIsActive(int index)&#xff0c;所有的前置都已经激活就返回true&#xff0c;否则返回false 之后在强化的时候加入条件检查&#xff1a; 1.所有前置技能全部激活 2.本身没有强化过 最后测…

pinctrl子系统

目录 一、PinCtrl子系统的定义 二、明确PinCtrl子系统和我们编写驱动的关系 三、pinctrl_desc结构体引入 四、PinCtrl子系统驱动实现分析 1.芯片厂家是如何实现PinCtrl子系统的 2.linux在什么位置设置的引脚复用和电气属性 2.1 really_probe的主要功能 2.2 really_prob…

行政纠错——pycorrector学习

pycorrector是一个开源中文文本纠错工具&#xff0c;它支持对中文文本进行音似、形似和语法错误的纠正。此工具是使用Python3进行开发的&#xff0c;并整合了Kenlm、ConvSeq2Seq、BERT、MacBERT、ELECTRA、ERNIE、Transformer等多种模型来实现文本纠错功能。pycorrector官方仓库…

深入MapReduce——计算模型设计

引入 通过引入篇&#xff0c;我们可以总结&#xff0c;MapReduce针对海量数据计算核心痛点的解法如下&#xff1a; 统一编程模型&#xff0c;降低用户使用门槛分而治之&#xff0c;利用了并行处理提高计算效率移动计算&#xff0c;减少硬件瓶颈的限制 优秀的设计&#xff0c…

React+Cesium基础教程(001):创建基于React的Cesium项目及对Cesium进行基本配置

文章目录 01-基于react的cesium项目创建基于React的Cesium项目Cesium基本配置设置默认启动视角完整项目下载地址01-基于react的cesium项目 创建基于React的Cesium项目 创建react项目: create-react-app react-cesium-basic安装[cesium1.93.0]版本: npm install cesium@1.…

Vue2:使用sortablejs实现el-table中行拖拽调整顺序

如图,实现拖拽表格中的行来调整行顺序,但是其中的编号仍然是1、2、3、4的顺序,不跟着变化。 实现如下: 一、导入sortablejs import Sortable from "sortablejs";export default { components: {Sortable},data() {return {//数据中的id很重要,拖拽行重新排序…

Kingbase数据库体系结构和日常运维监控

1. 数据库架构 1.1. 内存 1.1.1. Share Memory 共享内存是服务器服务器为数据库缓存和事务日志缓存预留的内存缓存空间&#xff0c;其中最重要的组成部分是Shared Buffer和WAL Buffer&#xff1a; 1. Shared Buffer&#xff1a; 减少磁盘IO 2. WAL Buffer&#xff1a; 用…

【Prometheus】Prometheus如何监控Haproxy

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【0x0012】HCI_Delete_Stored_Link_Key命令详解

目录 一、命令参数 二、命令格式及参数 2.1. HCI_Delete_Stored_Link_Key 命令格式 2.2. BD_ADDR 2.3. Delete_All 三、生成事件及参数 3.1. HCI_Command_Complete事件 3.2. Status 3.3. Num_Keys_Deleted 四、命令执行流程 4.1. 命令发送阶段 4.2. 控制器处理阶段…

github汉化

本文主要讲述了github如何汉化的方法。 目录 问题描述汉化步骤1.打开github&#xff0c;搜索github-chinese2.打开项目&#xff0c;打开README.md3.下载安装脚本管理器3.1 在README.md中往下滑动&#xff0c;找到浏览器与脚本管理器3.2 选择浏览器对应的脚本管理器3.2.1 点击去…

机器学习-K近邻算法

文章目录 一. 数据集介绍Iris plants dataset 二. 代码三. k值的选择 一. 数据集介绍 鸢尾花数据集 鸢尾花Iris Dataset数据集是机器学习领域经典数据集&#xff0c;鸢尾花数据集包含了150条鸢尾花信息&#xff0c;每50条取自三个鸢尾花中之一&#xff1a;Versicolour、Setosa…

C++函数——fill

在C中&#xff0c;std::fill 是标准库提供的一个算法适用于几乎所有类型的容器&#xff0c;只要这些容器支持迭代器操作。具体来说&#xff0c;std::fill 的适用性取决于容器是否提供了满足其要求的迭代器类型&#xff0c;用于将指定范围内的所有元素设置为某个特定值。它是一个…

如何打造高效同城O2O平台?外卖跑腿系统源码选型与开发指南

打造一个高效的同城O2O平台&#xff0c;选择合适的外卖跑腿系统源码并制定科学的开发方案至关重要。本篇文章&#xff0c;笔者将从源码选型、核心功能、开发架构及运营策略等方面&#xff0c;全面解析O2O平台的搭建思路。 一、外卖跑腿系统源码的选型要点 在搭建O2O平台时&…

Flutter_学习记录_基本组件的使用记录

1.TextWidge的常用属性 1.1TextAlign: 文本对齐属性 常用的样式有&#xff1a; TextAlign.center 居中TextAlign.left 左对齐TextAlign.right 有对齐 使用案例&#xff1a; body: Center(child: Text(开启 TextWidget 的旅程吧&#xff0c;珠珠, 开启 TextWidget 的旅程吧&a…

Qt实践:一个简单的丝滑侧滑栏实现

Qt实践&#xff1a;一个简单的丝滑侧滑栏实现 笔者前段时间突然看到了侧滑栏&#xff0c;觉得这个抽屉式的侧滑栏非常的有趣&#xff0c;打算这里首先尝试实现一个简单的丝滑侧滑栏。 首先是上效果图 &#xff08;C&#xff0c;GIF帧率砍到毛都不剩了&#xff09; QProperty…

10. SpringCloud Alibaba Sentinel 规则持久化部署详细剖析

10. SpringCloud Alibaba Sentinel 规则持久化部署详细剖析 文章目录 10. SpringCloud Alibaba Sentinel 规则持久化部署详细剖析1. 规则持久化1.1 Nacos Server 配置中心-规则持久化实例 2. 最后&#xff1a; 1. 规则持久化 规则没有持久化的问题 如果 sentinel 流控规则没有…

SpringCloud微服务Gateway网关简单集成Sentinel

Sentinel是阿里巴巴开源的一款面向分布式服务架构的轻量级流量控制、熔断降级组件。Sentinel以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度来帮助保护服务的稳定性。 官方文档&#xff1a;https://sentinelguard.io/zh-cn/docs/introduction.html …

正则表达式以及Qt中的使用

目录 一、正则表达式 1、基本匹配&#xff1a; 2、元字符&#xff1a; 2.1 .运算符&#xff1a; 2.2 字符集&#xff1a; 2.3 重复次数&#xff1a; 2.4 量词{} 2.5 特征标群() 2.6 或运算符 2.7 \反斜线转码特殊字符 2.8 锚点 3、简写字符 4、零宽度断言 4.1 正…

【STM32HAL-----GPIO】

1. 什么是GPIO&#xff1f;&#xff08;了解&#xff09; 2. STM32 GPIO简介 2.1. GPIO特点 2.2. GPIO电气特性 2.3. GPIO引脚分布图 IO引脚分布特点&#xff1a;按组存在、组数视芯片而定、每组最多16个IO引脚。 3. IO端口基本结构介绍 4. GPIO八种工作模式 4.1. 输入浮空 特…

亲测有效!解决PyCharm下PyEMD安装报错 ModuleNotFoundError: No module named ‘PyEMD‘

解决PyCharm下PyEMD安装报错 PyEMD安装报错解决方案 PyEMD安装报错 PyCharm下通过右键自动安装PyEMD后运行报错ModuleNotFoundError: No module named ‘PyEMD’ 解决方案 通过PyCharm IDE python package搜索EMD-signal&#xff0c;选择版本后点击“install”执行安装