广告
返回顶部
首页 > 资讯 > 精选 >Vue怎么实现动态查询规则生成组件
  • 115
分享到

Vue怎么实现动态查询规则生成组件

2023-06-15 06:06:49 115人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关Vue怎么实现动态查询规则生成组件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 动态查询规则动态查询规则,大致如下图所示。是可以按照用户的自定义进行组织查询语句的一种复杂组件,大致

这篇文章给大家分享的是有关Vue怎么实现动态查询规则生成组件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1. 动态查询规则

动态查询规则,大致如下图所示。是可以按照用户的自定义进行组织查询语句的一种复杂组件,大致可以实现sql查询的where条件,下面是摘自mongodb的某一软件。

Vue怎么实现动态查询规则生成组件

2.组件构建思路

按照规则组件的组织形式,可以把其视为一棵树,有树干和树叶,这样看起来就不难了。

1 组件属性 data: 是树结构的内容,我们定义为:

{condition: 'AND',rules: [],}

fieldList: 字段列表数组,可供选择的字段集合

operatorList: 操作列表数组,可供选择的操作集合,定义如下:

{     label: '包含',          value: '⊂',},

2.2 组件html

这里采用ElementUI构建,因此可以方便的组合各类ui控件来进行构建需要的界面。
当然该组件既然被看作树,因此其也是个递归组件,因此还涉及到自己调用自己。

<template>    <div class="rules-group-container">        <div class="rules-group-header">            <el-radio-group v-model="data.condition" size="mini">                <el-radio-button label="AND"></el-radio-button>                <el-radio-button label="OR"></el-radio-button>            </el-radio-group>            <div>                <el-button size="mini" @click="addRule(data)">添加规则</el-button>                <el-button size="mini" @click="addGroup(data)">添加分组</el-button>                <el-button v-if="parent" size="mini" @click="delGroup(data, parent)">删除</el-button>            </div>        </div>        <div class="rules-group-body">            <div class="rules-list">                <template v-for="(rule, index) in data.rules">                    <div :key="index" v-if="!rule.condition" class="rule-container">                                                <!-- 字段 -->                        <wt-dropdown                            class="rule-item"                            v-model="rule.FilterField"                            :data="getFieldList(rule.FilterTable)"                            @change="handleFieldChange(rule)"                        ></wt-dropdown>                        <!-- 操作符 -->                        <wt-dropdown                            class="rule-item"                            v-model="rule.Operator"                            :disabled="inputStatus && rule.FilterField === 'CommUnityId'"                            :data="getRule(rule.FilterTable, rule.FilterField)"                        ></wt-dropdown>                        <!-- 值 -->                        <wt-multi-dropdown                            class="rule-item-long"                            v-if="rule.type === 'Dropdown'"                            :disabled="inputStatus && rule.FilterField === 'CommunityId'"                            v-model="rule.FilterValue"                            :data="getData(rule.FilterTable, rule.FilterField)"                        ></wt-multi-dropdown>                        <wt-number                            class="rule-item-long"                            :disabled="inputStatus && rule.FilterField === 'CommunityId'"                            v-else-if="['DateTime', 'Number', 'Decimal'].includes(rule.type)"                            v-model="rule.FilterValue"                        ></wt-number>                        <wt-text class="rule-item-long" v-else v-model="rule.FilterValue" :disabled="inputStatus && rule.FilterField === 'CommunityId'"></wt-text>                        <el-button size="mini" @click="delRule(index)">删除</el-button>                    </div>                    <CreateRule                        :key="index"                        v-else                        :data="rule"                        :parent="data"                        :fieldList="fieldList"                        :operatorList="operatorList"                    ></CreateRule>                </template>            </div>        </div>    </div></template>

2.3 对不同数据类型的字段定义不同的条件

const rules = {    string: [        {            value: '==',            label: '等于',        },        {            value: '<>',            label: '不等于',        },        {            value: '⊂',            label: '包含',        },        {            value: '⊄',            label: '不包含',        },        {            value: 'in',            label: '其中之一',        },        {            value: 'ni',            label: '非其中之一',        },        {            value: 'mc',            label: '多包含',        },    ],    number: [        {            value: '==',            label: '等于',        },        {            value: '<>',            label: '不等于',        },        {            value: '≥',            label: '大于等于',        },        {            value: '≤',            label: '小于等于',        },    ],    dict: [        {            value: 'in',            label: '其中之一',        },        {            value: 'ni',            label: '非其中之一',        },    ],    date: [        {            value: 'sdiff',            label: '几天前',        },        {            value: 'ediff',            label: '几天后',        },    ],}

2.4 定义方法操作组\规则

主要的操作涉及到添加\删除 规则

getRule(table, field) {            let data = (rules && rules.string) || []            let theField = this.getCurrentField(table, field)            if (theField && theField.ControlType) {                if (['Dropdown'].includes(theField.ControlType)) {                    return rules.dict                } else if (['DateTime'].includes(theField.ControlType)) {                    return rules.date                } else if (['Number', 'Decimal'].includes(theField.ControlType)) {                    return rules.number                } else {                    return rules.string                }            }            return data        },        // 添加规则        addRule(data) {            let rule = {                type: 'Text',                FilterTable: this.firstTable,                FilterField: this.firstField,                Operator: '==',                FilterValue: '',            }            data.rules.push(rule)        },        // 删除规则        delRule(index) {            this.data.rules.splice(index, 1)        },        // 添加分组        addGroup(data) {            let group = {                condition: 'OR',                rules: [                    {                        type: 'Text',                        FilterTable: this.firstTable,                        FilterField: '',                        Operator: '',                        FilterValue: '',                    },                ],            }            data.rules.push(group)        },        // 删除分组        delGroup(data, parent) {            let index = parent.rules.findIndex((item) => item === data)            parent.rules.splice(index, 1)        },

2.5 定义组件名

该组件命名为 CreateRule,定义代码很简单了。

export default {    name: 'CreateRule',    props: {        parent: {            type: Object,        },        data: {            type: Object,        },        fieldList: {            type: Array,            default() {                return []            },        },        operatorList: {            type: Array,            default() {                return []            },        },    },  }

3.使用组件

vue中使用组件只需引用并增加到组件列表中即可。

import CreateRule from './CreateRule'export default {    name: 'NewRuleFORM',    components: {        CreateRule,    },}

模板内增加引用

<template>    <div class="new-rule-form">        <CreateRule            v-if="!loading"            :data="data"            :fieldList="FilterTable"            :operatorList="operatorList"        ></CreateRule>        <div v-if="!loading" class="discription-wrap" v-html="discription"></div>    </div></template>

4.效果展示

这是截取的实际效果.

Vue怎么实现动态查询规则生成组件

在界面中,作为搜索条件或过滤条件效果均不错,可以做到非常灵活。

感谢各位的阅读!关于“Vue怎么实现动态查询规则生成组件”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Vue怎么实现动态查询规则生成组件

本文链接: https://www.lsjlt.com/news/278276.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue怎么实现动态查询规则生成组件
    这篇文章给大家分享的是有关Vue怎么实现动态查询规则生成组件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 动态查询规则动态查询规则,大致如下图所示。是可以按照用户的自定义进行组织查询语句的一种复杂组件,大致...
    99+
    2023-06-15
  • Vue实现动态查询规则生成组件
    1. 动态查询规则 动态查询规则,大致如下图所示。是可以按照用户的自定义进行组织查询语句的一种复杂组件,大致可以实现SQL查询的where条件,下面是摘自mongodb的某...
    99+
    2022-11-12
  • SpringBoot整合Drools规则引擎动态生成业务规则怎么实现
    这篇文章主要介绍“SpringBoot整合Drools规则引擎动态生成业务规则怎么实现”,在日常操作中,相信很多人在SpringBoot整合Drools规则引擎动态生成业务规则怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作...
    99+
    2023-06-22
  • vue 实现拖拽动态生成组件的需求
    目录产品需求思路面临的问题拖拽库的选择如何生成组件生成组件组件以数据驱动动态组件的生成效果源码产品需求 开完产品需求会议,遇到了一个需求,首先页面分成两栏布局,左侧展示数据组件,支...
    99+
    2022-11-12
  • Vue怎么实现自定义组件自动生成
    本文小编为大家详细介绍“Vue怎么实现自定义组件自动生成”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue怎么实现自定义组件自动生成”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。就目前三大前端主流数据驱动框架...
    99+
    2023-07-04
  • Linq中怎么实现动态条件查询
    本篇文章给大家分享的是有关Linq中怎么实现动态条件查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在开发项目的过程中,我们经常会遇到这样的需求,动态组合条件的查询。比如淘宝...
    99+
    2023-06-17
  • Vue中的动态组件怎么实现渲染
    本篇内容介绍了“Vue中的动态组件怎么实现渲染”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、什么是动态组件动态组件指的是动态切换组件的显...
    99+
    2023-06-30
  • 怎么使用JPA+querydsl实现多条件动态查询
    这篇文章将为大家详细讲解有关怎么使用JPA+querydsl实现多条件动态查询,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JPA querydsl多条件动态查询相信很多人在做订单管理的时候会用到多条件的...
    99+
    2023-06-29
  • vue中怎么实现父组件向子组件动态传值
    这篇文章将为大家详细讲解有关vue中怎么实现父组件向子组件动态传值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。方法有两种,方法一:props传值,这里注意...
    99+
    2022-10-19
  • 动态生成的HTML标签怎么实现绑定事件
    小编给大家分享一下动态生成的HTML标签怎么实现绑定事件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   不成功的案例: ...
    99+
    2022-10-19
  • 怎么用vue动态组件实现选项卡切换效果
    这篇文章主要讲解了“怎么用vue动态组件实现选项卡切换效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用vue动态组件实现选项卡切换效果”吧!导航按钮:<div cla...
    99+
    2023-07-04
  • 权限管理模块中动态加载Vue组件怎么实现
    本篇内容介绍了“权限管理模块中动态加载Vue组件怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!登录状态保存当用户登录成功之后,需要将...
    99+
    2023-06-19
  • vue怎么使用动态组件实现选项卡切换效果
    本文小编为大家详细介绍“vue怎么使用动态组件实现选项卡切换效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue怎么使用动态组件实现选项卡切换效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。导航按钮:&l...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作