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-inputplaceholder="搜索过滤条件"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-checkboxnode-key="key":default-checked-keys="defaultCheckKyes":props="defaultProps"@check="handleCheck":filter-node-method="filterNode"@check-change="treeNodeClick"></el-tree></el-card><xk-svg-iconclass="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// 过滤默认选中的keyfor (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.hqwc.cn/news/19267.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Zookeeper】终端操作常用命令

文章目录 服务端常用命令客户端常用命令 zookeeper版本3.7.1 Zookeeper是一个开源的分布式协调服务。 Zookeeper是Apache软件基金会的一个项目&#xff0c;它提供了分布式应用程序协调的通用服务&#xff0c;如分布式同步、命名服务、集群维护等&#xff0c;以简化分布式应用协…

vue打包、网站运行速度优化

最近在做公司的官网&#xff0c;遇到的首要问题就是初次进入网站时&#xff0c;加载很慢&#xff0c;首页的视频和字体甚至需要30秒才能完全展示出来&#xff0c;用户体验可以说时很差了。接下来说几个优化的点。 一、减小图片的体积 如果项目中的图片过于多&#xff0c;并且体…

HTML5基础语法与标签

一、 HTML5介绍 HTML5是什么&#xff1f; HTML5是超文本标记语言&#xff08;HTML&#xff09;的第五个主要版本&#xff0c;用于描述网页结构和呈现内容。它是到目前为止最新且最强大的HTML版本。 HTML5语法约定 1.标签是HTML语法中的基本单位&#xff0c;由尖括号 ​<>…

【CSS加载动画特效】28种纯CSS实现的加载loading动态特效(附源码)

文章目录 写在前面涉及知识点效果展示1、Loading节点的创建2、部分效果的实现源码1&#xff09;三点加载动画Html代码CSS样式代码 2&#xff09;圆点矩阵加载特效Html代码CSS样式代码 3&#xff09;圆形轨迹加载动画Html代码Css样式代码 4&#xff09;栅栏式加载动画Html代码Cs…

Linux--查看常驻进程:ps

进程分为瞬时进程和常驻进程 瞬时进程&#xff1a;瞬间完成从加载到内存、显示在输出设备、退出过程 int main() {printf("hello world!\n");return 0; } 常驻进程&#xff1a;一直在内存中 int main() {while (1){printf("hello world!\n");sleep(1);…

itheima苍穹外卖项目学习笔记--Day1:项目介绍与开发环境搭建

苍穹外卖 Day1:a. 项目概述b. 开发环境搭建(1). 前端环境搭建(2). 后端环境搭建(3). 前后端联调 c. 完善登录功能d. Swagger Day1: a. 项目概述 b. 开发环境搭建 (1). 前端环境搭建 前端工程基于 nginx 运行启动nginx&#xff1a;双击 nginx.exe 即可启动 nginx 服务&#x…

亚马逊云科技推出的一项完全托管的生成式AI服务——Amazon Bedrock

在全球生成式AI浪潮兴起之际&#xff0c;以“智联世界&#xff0c;生成未来”为主题的2023世界人工智能大会&#xff08;WAIC 2023&#xff09;于7月6日在上海世博中心拉开帷幕。大会首日&#xff0c;亚马逊云科技携生成式AI产品Amazon Bedrock亮相大会现场&#xff0c;亚马逊云…

蓝桥杯每日一练专栏导读2

之前一直更新的是C、C相关的题目&#xff0c;但作为一名前端工程师&#xff0c;还是对Js了解的更多一些&#xff0c;所以从此以后停止更新C/C相关内容&#xff0c;改为更新Js相关的练习题。 内容 更新的内容依旧是蓝桥杯大赛官网提供的习题。每一道题都会提供详细的解题思路&a…

前端VUE

基础语法 安装VUE 入门Demo 定义的Vue只有id是app的才能使用他的变量值name&#xff0c;age&#xff0c;gender。 - 方法非id是app的也不可以调用。 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><!…

0305kali linux配置运行-docker-macos aarm64

文章目录 1 下载运行2 配置2.1 配置系统环境2.2 配置SSH服务2.3 安装工具 3 问题总结结语 1 下载运行 拉取kali linux镜像 docker pull kalilinux/kali-rolling该镜像为“纯净版”系统&#xff0c;没有任何工具&#xff0c;体积小。下面当我们运行起来之后&#xff0c;到容器中…

华为云CodeArts DevSecOps系列插件——助力更高效的软件研发

HDC期间入驻华为云&#xff0c;可参与Toolkit插件抽奖活动&#xff0c;活动链接在文末 一、前言 DevOps的概念想必大家都不陌生&#xff0c;它是一组过程、方法与系统的统称&#xff0c;通过它可以对交付速率、协作效率、部署频率速率、质量、安全和可靠性等进行提升改善。相比…

【算法与数据结构】150、LeetCode逆波兰表达式求值

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;我们常看见的表达式是中缀表达式&#xff08;关于中缀表达式的定义可以参考前缀、中缀、后缀表达式&am…