vue筛选框封装

news2024/9/20 22:32:28

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

在使用的组件或标签加入: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>

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

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

相关文章

java项目之母婴用品网站(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的母婴用品网站。 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;ssm&#xff0c;mybatis JDK版本&am…

EasyCVR非按需定时快照功能的设计与实现方法

EasyCVR基于云边端一体化架构&#xff0c;部署轻快、功能灵活&#xff0c;平台可支持多协议、多类型设备接入&#xff0c;包括&#xff1a;国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等。在视频能力上&#xff0c;可实现视频直播、录像、回放、检索…

Gradio库中的Model3D模块:实时上传和展示3D模型

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

F#奇妙游(9):来一点点画图

F#绘图 如果Python没有Matplotlib&#xff0c;R没有ggplot&#xff0c;Matplab没有plot函数……就像阿珍爱上了阿强&#xff0c;能画图的脚本才是好脚本。当然&#xff0c;F#有画图包&#xff0c;但是F#在数据处理中的地位就像下面&#xff0c;这也是我们没办法的。 ScottPl…

分析openGauss包内集合类型的实现方法

前言 Oracle中集合类型覆盖了Postgresql数组的功能&#xff0c;在Oracle用户中时非常常用的。 尤其是包内定义的集合类型&#xff0c;在SPEC定义后即可直接使用&#xff0c;scope也只在包在生效&#xff0c;使用非常灵活。 开源PG因为有数组没有实现这部分语法&#xff0c;下…

超级广场效果的耳机放大器音响电路设计

用头戴式耳机&#xff0c;尤其是小型耳机听音乐&#xff0c;总感到音乐味不够足&#xff0c;在低频段的效果更差。因此用本机增强耳机的低频特性&#xff0c;并采用立体声反相合成的办法&#xff0c;加上内藏简易矩阵环绕声电路&#xff0c;能获得强劲的低音和在较宽的范围内展…

Windows mingw64 最简易 安装配置

其实挺简单一件事 很多教程都搞复杂了 自己写一个 只需要两步 1. 下载压缩包并解压 2. 配置环境变量 (1). GitHub 下载地址 Releases niXman/mingw-builds-binaries GitHub 如果GitHub下载太慢可以来这里加速 或者用地址2 GitHub Proxy 代理加速 (ghproxy.com) (2). 下…

-Xss1m / -XX:ThreadStackSize=512k

-Xss / -XX:ThreadStackSize指定线程最大栈空间jdk1.4里默认的栈大小是256KBjdk1.5里默认的栈大小为1M配置JVM启动参数&#xff1a;-Xmx20m -Xms20m -Xss1m -XX:PrintCommandLineFlags-XX:ConcGCThreads3 -XX:G1ConcRefinementThreads13 -XX:GCDrainStackTargetSize64 -XX:Init…

学习grpc

Grpc简介&#xff1a; gRPC是一个高性能、通用的开源RPC框架&#xff0c;其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计&#xff0c;基于ProtoBuf(Protocol Buffers)序列化协议开发&#xff0c;且支持众多开发语言&#xff0c;能够基于语言自动生成客户端和服务端…

软负载Nginx详细配置及使用案例

Nginx使用与配置 什么是nginx Nginx 是一个高性能的HTTP和反向代理服务&#xff0c;也是一个IMAP/POP3/SMTP服务。 处理响应请求很快高并发连接低的内存消耗具有很高的可靠性高扩展性热部署 master 管理进程与 worker 工作进程的分离设计&#xff0c;使得 Nginx 具有热部署的…

Quartz表达式在线生成器

Quartz Cron表达式生成器 - devTest.run Quartz是一款高效的定时任务调度框架&#xff0c;由于其稳定性&#xff0c;高可用性和灵活性&#xff0c;Quartz已成为Java企业级开发中应用最为广泛的定时任务调度框架之一。 Quartz的主要特点包括&#xff1a;可配置的作业触发器&…

学C的第二十五天【指针的进阶】

相关代码gitee自取&#xff1a;C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第二十四天【练习&#xff1a;1. 打印菱形&#xff1b;2. 打印自幂数&#xff1b;3. 求Snaaa..n项之和&#xff1b;4. 喝汽水问题&#xff1b;5. 调整数组使奇数位于偶数前面&…

第三章——处理数据

面向对象编程&#xff08;OOP&#xff09;的本质是设计并扩展自己的数据类型。设计自己的数据类型就是让类型与数据匹配。在创建自己的类型之前必须先了解C内置的类型。 内置的C类型分为两组&#xff1a;基本类型和复合类型 简单变量 程序通常都需要存储信息&#xff0c;为把…

git commit history导出

git log --after"2022-1-1" --dateshort --prettyformat:"%H","%an","%ae","%ad","%s" --shortstat --no-merges再简洁一点 git log --after"2022-4-1" --dateshort --prettyformat:%H,%an,%ae,%ad,%…

Network Neuroscience:整个生命周期的功能连接体指纹

导读 随着年龄的增长&#xff0c;人脑功能结构发生了系统性的变化。然而&#xff0c;功能连接(FC)作为一种检测独特“连接体指纹”的强大特征&#xff0c;使个体能够在同龄人中被识别出来。虽然已在年轻人样本中观察到这种指纹&#xff0c;但该方法在整个生命周期内的可靠性尚…

ACL 2023|大模型时代,自然语言领域还有什么学术增长点?

国际计算语言学年会&#xff08;Annual Meeting of the Association for Computational Linguistics&#xff0c;简称 ACL&#xff09;是自然语言处理&#xff08;NLP&#xff09;领域的顶级国际会议&#xff0c;ACL 2023 将于2023年7月9-14日在加拿大多伦多举行。随着人工智能…

电脑高手的选择:为何只需一款杀毒软件?

对于电脑高手来说&#xff0c;保护计算机免受恶意软件和病毒的侵害至关重要。然而&#xff0c;有些人可能认为安装多个杀毒软件能够提供更优质的防护能力。但事实上&#xff0c;电脑高手通常只选择安装一款杀毒软件&#xff0c;这其中包含着一定的原因和考虑。本文将探讨为什么…

Java版本企业电子招投标采购系统源码功能模块功能描述+数字化采购管理 采购招投标

功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为外部…

基于Python+MySQL所写的医院管理系统

点击以下链接获取源码资源&#xff1a; https://download.csdn.net/download/qq_64505944/87985429?spm1001.2014.3001.5503 目录 摘要 I 1 需求分析 1 1.1 任务描述 1 1.2 需求分析的过程 1 1.3 业务需求 2 1.4 功能描述 2 2 总体设计 3 2.1 系统开发环境 3 2.2 系统功能流…