最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue實(shí)現(xiàn)動(dòng)態(tài)查詢規(guī)則生成組件

 更新時(shí)間:2021年05月27日 11:31:20   作者:webmote  
今天我們來(lái)給大家介紹下在Vue開發(fā)中我們經(jīng)常會(huì)碰到的一種需求場(chǎng)景,本文主要介紹了Vue動(dòng)態(tài)查詢規(guī)則生成組件,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1. 動(dòng)態(tài)查詢規(guī)則

動(dòng)態(tài)查詢規(guī)則,大致如下圖所示。是可以按照用戶的自定義進(jìn)行組織查詢語(yǔ)句的一種復(fù)雜組件,大致可以實(shí)現(xiàn)SQL查詢的where條件,下面是摘自mongodb的某一軟件。

在這里插入圖片描述

2.組件構(gòu)建思路

按照規(guī)則組件的組織形式,可以把其視為一棵樹,有樹干和樹葉,這樣看起來(lái)就不難了。

2.1 組件屬性 data: 是樹結(jié)構(gòu)的內(nèi)容,我們定義為:

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

fieldList: 字段列表數(shù)組,可供選擇的字段集合;

operatorList: 操作列表數(shù)組,可供選擇的操作集合,定義如下:

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

2.2 組件html

這里采用ElementUI構(gòu)建,因此可以方便的組合各類ui控件來(lái)進(jìn)行構(gòu)建需要的界面。
當(dāng)然該組件既然被看作樹,因此其也是個(gè)遞歸組件,因此還涉及到自己調(diào)用自己。

<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)">添加規(guī)則</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 對(duì)不同數(shù)據(jù)類型的字段定義不同的條件

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 定義方法操作組\規(guī)則

主要的操作涉及到添加\刪除 規(guī)則。

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
        },
        // 添加規(guī)則
        addRule(data) {
            let rule = {
                type: 'Text',
                FilterTable: this.firstTable,
                FilterField: this.firstField,
                Operator: '==',
                FilterValue: '',
            }
            data.rules.push(rule)
        },
        // 刪除規(guī)則
        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,定義代碼很簡(jiǎn)單了。

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,
    },
}

模板內(nèi)增加引用

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

這是截取的實(shí)際效果.

在這里插入圖片描述

在界面中,作為搜索條件或過(guò)濾條件效果均不錯(cuò),可以做到非常靈活。

5.小結(jié)

在vue開發(fā)應(yīng)用中,可以多參考下windows軟件的某些界面,偶爾能給我們很大的靈感和啟發(fā)的。

到此這篇關(guān)于Vue實(shí)現(xiàn)動(dòng)態(tài)查詢規(guī)則生成組件的文章就介紹到這了,更多相關(guān)Vue 動(dòng)態(tài)查詢規(guī)則生成組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue地址欄直接輸入路由無(wú)效問(wèn)題的解決

    vue地址欄直接輸入路由無(wú)效問(wèn)題的解決

    這篇文章主要介紹了vue地址欄直接輸入路由無(wú)效問(wèn)題的解決,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Vue3跨域解決方案實(shí)例詳解

    Vue3跨域解決方案實(shí)例詳解

    這篇文章主要介紹了Vue3跨域解決方案詳解,需要的朋友可以參考下
    2023-01-01
  • vue中使用echarts并根據(jù)選擇條件動(dòng)態(tài)展示echarts圖表

    vue中使用echarts并根據(jù)選擇條件動(dòng)態(tài)展示echarts圖表

    雖然老早就看過(guò)很多echarts的例子, 但自己接觸的項(xiàng)目中一直都沒有真正用到過(guò),直到最近才開始真正使用,下面這篇文章主要給大家介紹了關(guān)于vue中使用echarts并根據(jù)選擇條件動(dòng)態(tài)展示echarts圖表的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • vue3 Element-Plus el-backtop無(wú)效問(wèn)題及解決

    vue3 Element-Plus el-backtop無(wú)效問(wèn)題及解決

    這篇文章主要介紹了vue3 Element-Plus el-backtop無(wú)效問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 為Vue3?組件標(biāo)注?TS?類型實(shí)例詳解

    為Vue3?組件標(biāo)注?TS?類型實(shí)例詳解

    這篇文章主要為大家介紹了為Vue3?組件標(biāo)注?TS?類型實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • vue.js數(shù)據(jù)加載完成前顯示原代碼{{代碼}}問(wèn)題及解決

    vue.js數(shù)據(jù)加載完成前顯示原代碼{{代碼}}問(wèn)題及解決

    這篇文章主要介紹了vue.js數(shù)據(jù)加載完成前顯示原代碼{{代碼}}問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • VUE學(xué)習(xí)之Element-ui文件上傳實(shí)例詳解

    VUE學(xué)習(xí)之Element-ui文件上傳實(shí)例詳解

    今天進(jìn)行了element?文件上傳組件的運(yùn)用,寫一下心得,下面這篇文章主要給大家介紹了關(guān)于VUE學(xué)習(xí)之Element-ui文件上傳的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • vue實(shí)現(xiàn)帶過(guò)渡效果的下拉菜單功能

    vue實(shí)現(xiàn)帶過(guò)渡效果的下拉菜單功能

    這篇文章主要為大家詳細(xì)介紹了vue仿寫帶過(guò)渡效果的下拉菜單功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 利用vue組件實(shí)現(xiàn)圖片的拖拽和縮放功能

    利用vue組件實(shí)現(xiàn)圖片的拖拽和縮放功能

    這篇文章主要給大家介紹了關(guān)于利用vue組件實(shí)現(xiàn)圖片的拖拽和縮放功能的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-01-01
  • vuex 的簡(jiǎn)單使用

    vuex 的簡(jiǎn)單使用

    vuex是一個(gè)專門為vue.js設(shè)計(jì)的集中式狀態(tài)管理架構(gòu)。這篇文章主要介紹了vuex 的簡(jiǎn)單使用,需要的朋友可以參考下
    2018-03-03

最新評(píng)論

天镇县| 沛县| 东辽县| 西乌珠穆沁旗| 永康市| 芜湖县| 闸北区| 图们市| 扶风县| 沙洋县| 汾西县| 西和县| 临猗县| 东海县| 宁南县| 德保县| 嘉荫县| 商都县| 古田县| 田阳县| 黄骅市| 敦化市| 临邑县| 卢湾区| 潮安县| 临夏市| 依安县| 嘉祥县| 富锦市| 平乡县| 封开县| 四子王旗| 南江县| 大余县| 六盘水市| 宁津县| 清新县| 南郑县| 朔州市| 盐城市| 崇信县|