vue筛选框封装

点击对默认查询条件之外的条件进行 增加或删除

在使用的组件或标签加入:filtrateList="filtrateList"传入条件查询数组

当前demo写在xk-page中,就以xk-page组件为例

<xk-upage
:filtrateList="filtrateList"
:queryArr="queryArr"></xk-upage>

属性

属性参数说明类型可选值默认值
filtrateList需要筛选的查询条件Array

//可选值说明可看xk-upage组件
{
name: '报废名称(默认)',
key: 'pointScrapName',
disabled: true,
checked: true,
type: 'input',
plaholder: '报废单名称'
}

[]

treeRef

定义refString-

tree

computed计算属性

computed方法中属性说明类型可选值默认值

...mapGetters(['customCondition'])

获取最新的查询条件列表

Array-

[ ]

 ...mapState({
      defultCheck: (state) => state.taskManage.defultCheck
    })

 获取默认的查询条件列表Array-

[ ]

watch监听

watch方法中属性说明类型可选值默认值

  watch: {
    customCondition: {
      deep: true,
      handler (list) {
        const newData = this.defultCheck.concat(list)
        this.$set(this, 'queryArr', [...new Set(newData)])
      }
    }
  }

customCondition方法来自计算属性所定义

Object-

-

组件原码:

<template>
  <el-popover placement="top-start" width="200" trigger="hover">
    <el-card class="box-card" shadow="never">
      <div slot="header" class="clearfix">
        <el-input
          placeholder="搜索过滤条件"
          v-model.trim="filterText"
          size="small"
        >
          <i slot="suffix" class="el-icon-search" @click="handleSearch"></i>
        </el-input>
      </div>
      <el-tree
        :ref="treeRef"
        :data="setFiltrateList"
        show-checkbox
        node-key="key"
        :default-checked-keys="defaultCheckKyes"
        :props="defaultProps"
        @check="handleCheck"
        :filter-node-method="filterNode"
        @check-change="treeNodeClick"
      >
      </el-tree>
    </el-card>
    <xk-svg-icon
      class="filtrate"
      iconClass="shaixuan1"
      slot="reference"
    ></xk-svg-icon>
  </el-popover>
</template>

<script>
import { mapMutations } from 'vuex'

export default {
  name: 'XkFiltrate',
  inject: ['headerFrom'],
  props: {
    filtrateList: {
      // 筛选列表
      type: Array,
      default: () => []
    },
    treeRef: {
      type: String,
      default: 'tree'
    }
  },
  data () {
    return {
      filterText: '',
      setFiltrateList: [],
      defaultCheckKyes: [], // 默认选中
      defaultProps: {
        children: 'children',
        label: 'name'
      }
    }
  },

  methods: {
    ...mapMutations({
      setCustomCondition: 'taskManage/CUSTOM_CONDITION'
    }),
    handleSearch () {
      console.log('点击搜索--暂时没做需求', this.filterText)
    },
    // 触发的节点数组
    handleCheck (data, checkedData) {
      // console.log('data, checkedData, =>', data, checkedData)
      this.setCustomCondition(checkedData.checkedNodes)
    },
    // 过滤节点
    filterNode (value, data) {
      if (!value) {
        return true
      }
      return data.label.indexOf(value) !== -1
    },
    treeNodeClick (item, node, self) {
      const checkedData = this.$refs[this.treeRef].getCheckedKeys()
      // 对取消选中的值进行清空
      if (checkedData.indexOf(item.key) == -1) {
        for (const key in this.headerFrom) {
          if (Object.hasOwnProperty.call(this.headerFrom, key)) {
            if (item.key == key) {
              this.headerFrom[key] = null
            }
          }
        }
      }
    }
  },
  watch: {
    filtrateList: {
      immediate: true,
      handler (list) {
        if (list.length > 0) {
          const allList = list.map((items) => {
            const index =
              items.name.lastIndexOf('(') || items.name.lastIndexOf('(')
            return {
              ...items,
              name: index < 0 ? items.name : items.name.substring(0, index),
              label: items.name,
              value: items.key
            }
          })
          this.setFiltrateList = allList
          // 过滤默认选中的key
          for (const i in this.setFiltrateList) {
            if (this.setFiltrateList[i].checked) {
              this.defaultCheckKyes.push(this.setFiltrateList[i].key)
            }
          }
        }
      }
    },
    // input文本过滤触发
    filterText (val) {
      this.$refs[this.treeRef].filter(val)
    }
  }
}
</script>

<style scoped lang="scss">
.filtrate {
  cursor: pointer;
}
.box-card {
  border: none;
  .el-card__body {
    padding: 0;
  }
}
.clearfix {
  ::v-deep .el-input__suffix {
    display: flex;
    align-items: center;
    cursor: pointer;
  }
}
</style>

 vuex:这里采用的是模块化,需求的百度了解下

const state = {
  customCondition: [], // 自定义条件数据
  defultCheck: [] // 默认选中数据
}

const mutations = {
  CUSTOM_CONDITION: (state, list) => {
    // 默认选中的数数
    state.defultCheck = list.filter((item) => item.checked)
    state.customCondition = list.filter((item) => !item.checked)
  }
}

const actions = {
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

demo:

注:

filtrateList定义的数组内容来自table列,具体根据需求,属性要根据xk-form查询条件类型入参才能完整显示

 <xk-upage
      :filtrateList="filtrateList"
      :queryArr="queryArr"
  ></xk-upage>

<script>
import { mapGetters, mapState } from 'vuex'
export default {
  name: 'example',
  data () {
    return {
      dialogShow: false,
      queryArr: [
        {
          type: 'input',
          key: 'pointScrapName',
          name: '报废名称',
          plaholder: '报废单名称'
        },
        {
          type: 'select',
          key: 'registerUserId',
          name: '选择人员',
          plaholder: '选择人员',
          options: []
        },
        {
          type: 'select',
          key: 'state',
          plaholder: '状态',
          name: '状态',
          options: [
            { label: '待审核', value: '待审核' },
            { label: '已通过', value: '已通过' }
          ]
        }
      ],
    
      tableHeader: [
        {
          label: '标准名称',
          prop: 'pointScrapNo',
          type: 'link',
          emit: 'handleLink'
        },
        { label: '标准编号', prop: 'pointScrapName' },
        {
          label: '创建时间',
          prop: 'registerUserName'
        },
        { label: '备注', prop: 'createTime' },
        {
          label: '状态',
          prop: 'switch',
          type: 'state' // disabled: false
        },
        {
          label: '操作',
          type: 'operator',
          btn: [
            { name: '编辑', show: true, emit: 'examine' },
            { name: '删除', show: true, emit: 'audit' }
          ]
        }
      ],
      tableData: [
        ],
      // 自定义查询列表
      filtrateList: [
        {
          name: '报废名称(默认)',
          key: 'pointScrapName',
          disabled: true,
          checked: true,
          type: 'input',
          plaholder: '报废单名称'
        },
        {
          key: 'registerUserId',
          name: '选择人员(默认)',
          plaholder: '选择人员',
          disabled: true,
          checked: true,
          type: 'select',
          options: []
        },
        {
          type: 'select',
          key: 'state',
          plaholder: '状态',
          name: '状态(默认)',
          options: [
            { label: '待审核', value: '待审核' },
            { label: '已通过', value: '已通过' }
          ],
          disabled: true,
          checked: true
        },
        {
          name: '标准名称',
          key: 'bznc',
          plaholder: '请输入标准名称',
          type: 'input'
        },
        {
          name: '标准编号',
          key: 'bcbh',
          plaholder: '请输入标准编号',
          type: 'input'
        },
        {
          name: '创建时间',
          key: 'cjsj',
          plaholder: '请输入标准编号',
          type: 'time'
        },
        {
          name: '备注',
          key: 'bz',
          plaholder: '请输入标准编号',
          type: 'input'
        }
      ],
      copyArr: null
    }
  },
  computed: {
    ...mapGetters(['customCondition']), // 获取最新的查询条件
    ...mapState({
      defultCheck: (state) => state.taskManage.defultCheck // 获取默认的查询条件
    })
  },
  watch: {
    customCondition: {
      deep: true,
      handler (list) {
        const newData = this.defultCheck.concat(list)
        this.$set(this, 'queryArr', [...new Set(newData)])
      }
    }
  }
}
</script>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3setup的参数说明

setup的两个参数 setup包含两个参数&#xff0c;一个为props、一个为context &#xff08;均为形参&#xff09; props&#xff1a;值为对象&#xff0c;包含&#xff1a;组件外部传递过来&#xff0c;且组件内部声明接收了的属性。context&#xff1a;上下文对象 <scrip…

LIN总线与RS485总线

LIN&#xff08;Local Interconnect Network&#xff0c;局部互连网络&#xff09;总线和RS485都是用于设备间通信的串行通信协议。下面我将分别列出它们的优势和劣势。 LIN总线的优势&#xff1a; 简单性&#xff1a;LIN总线的硬件和协议简单&#xff0c;易于实现和维护。成…

JVM常用参数

以下是 JVM 常用参数的配置 内存相关参数&#xff1a; -Xmx&#xff1a;指定 JVM 最大可用内存&#xff0c;例如 -Xmx2g 表示最大可用内存为 2GB。 -Xms&#xff1a;指定 JVM 初始内存大小&#xff0c;例如 -Xms512m 表示初始内存为 512MB。 -XX:MaxPermSize&#xff1a;指定…

23种设计模式总结

设计模式的本质是&#xff1a;“找到变化&#xff0c;封装变化” 设计模式的类型分为&#xff1a; 创建型&#xff1a;负责提供创建对象的机制 结构型&#xff1a;将对象或类组合成更大的结构&#xff0c;同时保持对外结构的不变&#xff0c;对内结构的灵活 行为型&#xff1a…

基于stm32单片机的智能家居环境监控系统

​一.硬件方案 智能家居环境监控系统的整体电路主要由stm32单片机最小系统&#xff0c;光MQ-2烟雾传感器电路&#xff0c;红外人体检测电路&#xff0c;DS18B20温度传感器&#xff0c;LCD1602显示电路&#xff0c;水泵驱动电路&#xff0c;风扇驱动电路&#xff0c;LED指示灯&…

MySQL数据库架构

MySQL数据库架构 MySQL架构自顶向下大致可以分为连接层 , SQL层 , 存储引擎层 , 物理文件层。架构如下 连接层 -- 查看最大连接数 show variables like %max_connections%;客户端连接器&#xff0c;MySQL向外提供交互接口连接各种不同的客户端。 客户端/应用程序&#xff1a;客…

银河麒麟服务器v10 sp1 redis开机自动启动

接上一篇&#xff1a;银河麒麟服务器v10 sp1 安装 redis_csdn_aspnet的博客-CSDN博客 将redis_init_script文件复制到/etc/init.d下&#xff0c;重命名为redisd&#xff1a; rootxxx-pc:cp /usr/local/redis/redis-7.0.11/utils/redis_init_script /etc/init.d/redisd 内容如…

MFC 单文档模式

Doc类利用自带框架存数据 void CCADDoc::Serialize(CArchive& ar) {if (ar.IsStoring()){// TODO: 在此添加存储代码//保存数据到文件ar << m_nShapeCount;for (int i 0; i < m_arrShapes.GetSize(); i){CShape* pShape NULL;pShape (CShape*)m_arrShapes[i];…

【C的葵花宝典进阶篇】之指针进阶(一)

【C语言进阶篇】之指针进阶&#xff08;一&#xff09; 1. 字符指针2. 指针数组2.1 整形指针数组2.2 用指针数组模拟二维数组 3. 数组指针3.1 数组指针的表示方法3.2 深度剖析&数组名和数组名3.3 数组指针的使用3.3.1 在同一函数内直接将数组的地址赋给数组指针3.3.2 数组指…

【Spark】RDD转换算子

目录 map mapPartitions mapPartitionsWithIndex flatMap glom groupBy shuffle filter sample distinct coalesce repartition sortBy ByKey intersection union subtract zip partitionBy reduceByKey groupByKey reduceByKey 和 groupByKey 的区别 a…

C#学习之路-常量

C# 常量 常量是固定值&#xff0c;程序执行期间不会改变。常量可以是任何基本数据类型&#xff0c;比如整数常量、浮点常量、字符常量或者字符串常量&#xff0c;还有枚举常量。 常量可以被当作常规的变量&#xff0c;只是它们的值在定义后不能被修改。 整数常量 整数常量可…

跨境平台做测评、采退、Lu卡、lu货要怎么做安全?

大家好&#xff0c;我是珑哥测评&#xff0c;今天和大家聊聊比较小众的圈子&#xff0c;也就是测评衍生出来的分支&#xff0c;采购和退款。因为最近也有很多客户咨询这个问题&#xff0c;由于沃尔玛风控升级了&#xff0c;很多客户下不成功的问题。 大家都知道无论是做测评还是…

从源码全面解析 dubbo 服务端服务调用的来龙去脉

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小黄&#xff0c;独角兽企业的Java开发工程师&#xff0c;CSDN博客专家&#xff0c;阿里云专家博主&#x1f4d5;系列专栏&#xff1a;Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码…

Docker自学记录笔记

安装联系Docker命令 1. 搜索镜像 docker search nagin 2. 下载镜像 3. 启动nginx 强调文本 强调文本 加粗文本 加粗文本 标记文本 删除文本 引用文本 H2O is是液体。 210 运算结果是 1024. 插入链接与图片 链接: link. 图片: 带尺寸的图片: 居中的图片: 居中并…

OpenCV的remap实现图像垂直翻转

以下是完整的代码: #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream>int main() {

Redis10大性能优化点(上)

1.Redis真的变慢了吗&#xff1f; 对 Redis 进行基准性能测试 例如&#xff0c;我的机器配置比较低&#xff0c;当延迟为 2ms 时&#xff0c;我就认为 Redis 变慢了&#xff0c;但是如果你的硬件配置比较高&#xff0c;那么在你的运行环境下&#xff0c;可能延迟是 0.5ms 时就…

flutter:实现一个简单的appBar上的搜索框、一个简单的搜索历史

搜索框 效果图 代码 import package:flutter/material.dart;class NovelSearch extends StatefulWidget {overrideState<StatefulWidget> createState() > _NovelSearchState(); }class _NovelSearchState extends State<NovelSearch> {String searchVal ;o…

Debian 12 静态IP / 固定IP的设置

环境&#xff1a;Debian 12 amd64-lxde 局域网&#xff1a;PT925E电信光猫 手机APP 网络管家 一般用动态IP就可以了&#xff0c;但如果软件环境比较小众&#xff0c;问题就随之而来。起始问题&#xff1a;路由器无法解析设备名和IP&#xff0c;网络管家也不让设置固定IP&…

基于深度学习的高精度水果检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度水果&#xff08;苹果、香蕉、葡萄、橘子、菠萝和西瓜&#xff09;检测识别系统可用于日常生活中或野外来检测与定位水果目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的水果目标检测识别&#xff0c;另外支持结果可视…

Python教程(2)——开发python常用的IDE

为什么需要IDE 在理解IDE之前&#xff0c;我们先做以下的实验&#xff0c;新建一个文件&#xff0c;输入以下代码 total_sum 0 for x in range(1,101):total_sum x print(total_sum)非常非常简单的一个程序&#xff0c;主要就是计算1加到100的值&#xff0c;我们将它重命名…