广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue实现动态查询规则生成组件
  • 260
分享到

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

2024-04-02 19:04:59 260人浏览 薄情痞子
摘要

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

1. 动态查询规则

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

在这里插入图片描述

2.组件构建思路

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

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.效果展示

这是截取的实际效果.

在这里插入图片描述

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

5.小结

在vue开发应用中,可以多参考下windows软件的某些界面,偶尔能给我们很大的灵感和启发的。

到此这篇关于Vue实现动态查询规则生成组件的文章就介绍到这了,更多相关Vue 动态查询规则生成组件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

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

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

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

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

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

下载Word文档
猜你喜欢
  • Vue实现动态查询规则生成组件
    1. 动态查询规则 动态查询规则,大致如下图所示。是可以按照用户的自定义进行组织查询语句的一种复杂组件,大致可以实现SQL查询的where条件,下面是摘自mongodb的某...
    99+
    2022-11-12
  • Vue怎么实现动态查询规则生成组件
    这篇文章给大家分享的是有关Vue怎么实现动态查询规则生成组件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 动态查询规则动态查询规则,大致如下图所示。是可以按照用户的自定义进行组织查询语句的一种复杂组件,大致...
    99+
    2023-06-15
  • SpringBoot整合Drools规则引擎动态生成业务规则的实现
          最近的项目中,使用的是flowable工作流来处理业务流程,但是在业务规则的配置中,是在代码中直接固定写死的,领导说这样不好,需要规则可以动态变化,可以通过页面去动态配置...
    99+
    2022-11-12
  • SpringBoot整合Drools规则引擎动态生成业务规则怎么实现
    这篇文章主要介绍“SpringBoot整合Drools规则引擎动态生成业务规则怎么实现”,在日常操作中,相信很多人在SpringBoot整合Drools规则引擎动态生成业务规则怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作...
    99+
    2023-06-22
  • vue 实现拖拽动态生成组件的需求
    目录产品需求思路面临的问题拖拽库的选择如何生成组件生成组件组件以数据驱动动态组件的生成效果源码产品需求 开完产品需求会议,遇到了一个需求,首先页面分成两栏布局,左侧展示数据组件,支...
    99+
    2022-11-12
  • vue动态生成新表单并且添加验证校验规则方式
    目录一、需求场景以及注意事项需求场景注意事项二、代码结构template中data中methods中的按钮事件,也就是触发渲染之前的事件三、ant-design中的校验规则a-for...
    99+
    2022-11-13
  • Vue怎么实现自定义组件自动生成
    本文小编为大家详细介绍“Vue怎么实现自定义组件自动生成”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue怎么实现自定义组件自动生成”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。就目前三大前端主流数据驱动框架...
    99+
    2023-07-04
  • Mybatis 实现动态组装查询条件,仿SQL模式
    目的: 以前比较习惯使用Hibernate,后来觉得mybatis不能按我想要的自动组装为SQL查询条件,所以提供该工具类; 效果图: 如图所示,根据条件自动组装查询条件,下面来...
    99+
    2022-11-12
  • Vue结合原生js如何实现自定义组件自动生成
    这篇文章主要介绍Vue结合原生js如何实现自定义组件自动生成,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!就目前三大前端主流数据驱动框架(vue,ng,react)而言,均具有创建自...
    99+
    2022-10-19
  • MybatisPlus实现多条件拼接动态查询
    1、前 言 最近在开发过程中,需要用 MybatisPlus 实现类似以下形式的 SQL 语句,动态拼接多个条件,进行查询。 select *from user_infowhere is_deleted = 0...
    99+
    2023-08-20
    mysql mybatis-plus spring boot
  • Linq中怎么实现动态条件查询
    本篇文章给大家分享的是有关Linq中怎么实现动态条件查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在开发项目的过程中,我们经常会遇到这样的需求,动态组合条件的查询。比如淘宝...
    99+
    2023-06-17
  • 如何使用form-create动态生成vue自定义组件和嵌套表单组件
    这篇文章主要介绍了如何使用form-create动态生成vue自定义组件和嵌套表单组件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用fo...
    99+
    2022-10-19
  • Vue动态生成表格的行和列如何实现
    本篇内容主要讲解“Vue动态生成表格的行和列如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue动态生成表格的行和列如何实现”吧!具体的实现代码如下:<template>&n...
    99+
    2023-07-04
  • Vue动态组件表格的实现代码
    目录Vue组件数据源框架结构组件这里我自己封装了几个组件按钮组件图片组件滑动开关tap组件text组件Vue组件 数据源 //这里是HTML内容 这里通过下面的引入框架结构把数据源传...
    99+
    2022-11-13
    Vue动态组件 表格 Vue动态组件 Vue 表格
  • vue实现动态表单动态渲染组件的方式(1)
    vue 实现动态表单/动态渲染组件的方式(一),供大家参考,具体内容如下 思路 先写好各个可能会出现的表单或者自定义的组件,引入。此时后端可能会给到一个对象型数组,每个对象有要渲染组...
    99+
    2022-11-13
  • vue实现动态表单动态渲染组件的方式(2)
    本文实例为大家分享了vue实现动态表单动态渲染组件的方式,供大家参考,具体内容如下 思路 先把所有可能出现的表单/组件写在主页面每个表单/组件的slot 属性值要与后端返回的表单/组...
    99+
    2022-11-13
  • vue中怎么实现父组件向子组件动态传值
    这篇文章将为大家详细讲解有关vue中怎么实现父组件向子组件动态传值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。方法有两种,方法一:props传值,这里注意...
    99+
    2022-10-19
  • 使用JPA+querydsl如何实现多条件动态查询
    目录JPAquerydsl多条件动态查询介绍一下querydsl看源码springdataJPA和querydsl什么是SpringDataJPA?什么是QueryDSL?@Mapp...
    99+
    2022-11-13
  • 怎么使用JPA+querydsl实现多条件动态查询
    这篇文章将为大家详细讲解有关怎么使用JPA+querydsl实现多条件动态查询,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JPA querydsl多条件动态查询相信很多人在做订单管理的时候会用到多条件的...
    99+
    2023-06-29
  • Vue动态组件实现异常处理方法
    动态组件有两种常用场景: 一是动态路由: // 动态路由 export const asyncRouterMap: Array<RouteRecordRaw> = [ ...
    99+
    2023-02-01
    Vue动态组件 Vue动态组件异常处理
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作