联动规则组件-KOV场景梳理&技术方案

文章介绍了KOV组件的背景、目标和难点,旨在统一不同场景下的组件实现,支持所有逻辑场景。组件的关键点包括操作符定义、组件展示形式和内容定制。文章详细阐述了KOV组件的实现方案,包括基本组件、逻辑操作符映射和条件转换,并提供了使用文档、DEMO及组件属性说明。最后展示了ConditionKov组件(条件关系kov)的使用示例。
摘要由CSDN通过智能技术生成

一、背景:

多场景使用到kov类型组件,但是实现上不统一,各个场景的协议都比较定制,且开发的时候难度较大。所以将组件进行抽离

目标:支撑所有逻辑场景

什么是kov?如下图:

 难点:

       1、不同类型组件对应的操作符有哪些 ???

       2、value组件展示形式,如何确定 ???

       3、如何定制operator的内容以及value组件 ??

       等。。。。。。。

   组件收益:

        1、统一协议&场景

        2、快速接入

二、KOV组件实现方案

1、基本组件key与逻辑操作符的场景确 

2、逻辑操作符的映射

操作符含义

操作符

NOT_EMPTY有值
EMPTY无值
NOT_EQ不等于
EQ等于
GT大于
GE大于等于
LE小于等于
LT小于
INCLUDE包含
NOT_INCLUDE不包含
BETWEEN属于范围
NOT_BETWEEN不属于范围

3、基本组件&逻辑   推算   联动组件 

4、 条件转换逻辑表达式

三、kov组件使用文档 &demo

<Kov v-model="test" :schema="schema" :disabledKeys="[]" class="v-flex-fill">
      <template #cyl>
        <el-input v-model="test.params"></el-input>
      </template>
 </Kov>
 
test:{ "field": "", "function": "", "params":  }
 
 
 schema = [
  {
    value: 'silentShipperActionType', // 字段名
    label: '选择器',
    type:'SELECT',  // 组件类型
    disabledKeys:[''], // field 中需要禁用的选项
    (
    该部分如果传入的“逻辑表达式”不在默认范围内,会进行合并,如果在则会进行覆盖
    该逻辑下,以传入的type类型为准
    )
    operators:[ // 自定义内容
     {
      label:"等于",
      value:'EQ', // 逻辑表达式
      type: 'SELECT',
      options:[{}],
    }],
    attrs:{
    },
    options:[{
    label:'测试1',
    value:1
     },
    {
    label:'测试2',
    value: 2
    }]
}
]

1、props

属性名

含义

类型

默认值

必填

schema组件渲染的schema数组[]
v-model对象{}
disabledKeys代表field中禁选的项数组[]

2、v-model对象字段解释

字段

含义

类型

key

字段(第一个下拉框内容)string

op

逻辑关系string

value

string/array(包含/非包含条件/attrs中multiple为true并生效的情况下为array)

3、Schema中对象字段解释

字段

含义

类型

是否必传

key字段String
label字段名String
type  字段对应的类型String
attrs针对联动组件的属性设置对象
options联动组件的选项数组否 (联动组件为select场景必填)

operators 

自定义逻辑组件内容&联动组件数组

4、type类型:

type值

含义

NUMBER

数字

SELECT

选择器

CHECKBOX

多选框

RADIO

单选框

TEXT

文本

CITY

城市

DATE

日期

TIME

时间

DATETIME

日期时间

5、operators    

中对象字段解释

字段

含义

类型

是否必传

label逻辑组件选项名必传
value逻辑组件选项值(即key,若与已存在的逻辑重复,则对应type会进行覆盖该逻辑对应的联动组件)必传
type

组件类型

插槽名

(若传入的类型不在提供的组件范围内,则视为插槽)

必传
options选项否(type为slect/checkbox/radio等必传)

demo:

<Kov v-model="test" :schema="schema" :disabledKeys="[]" class="v-flex-fill">
      <template #cyl>
        <el-input v-model="test.params"></el-input>
      </template>
 </Kov>
 
test:{ "field": "", "function": "", "params":  }
 
 
 schema = [
  {
    value: 'select', // 字段名
    label: '选择器',
    type:'SELECT',  // 组件类型
    operators:[ // 自定义内容
     {
      label:"等于",
      value:'EQ', // 逻辑表达式
      type: 'SELECT',
      options:[{}],
    }],
    attrs:{
    },
    options:[{
    label:'测试1',
    value:1
     },
    {
    label:'测试2',
    value: 2
    }]
}
]
<Kov v-model="test" :schema="schema" :disabledKeys="[]" class="v-flex-fill">
      <template #cyl>
        <el-input v-model="test.params"></el-input>
      </template>
 </Kov>
 
test:{ "field": "", "function": "", "params":  }
 
 
 schema = [
  {
    value: 'select', // 字段名
    label: '选择器',
    type:'TEAX',  // 组件类型
    operators:[ // 自定义内容
     {
      label:"匹配开头(自定义)",
      value:'MATCHHEAD', // 逻辑表达式
      type: 'TEXT'
    }]
   
}
]

四、ConditionKov组件(条件关系kov)

<template>
    <div>
      <ConditionKov v-model="test.a" :schema="schema" class="v-flex-fill">
      </ConditionKov>
    </div>
  </template>
   
  <script>
  import {ConditionKov} from '@meta-vue/kov'
  export default {
    name: 'kov',
    componentName: 'kov组件',
    components: { ConditionKov },
    data() {
      return {
        test: {},
        schema: {},
      }
    },
    created() {
      this.schema = [
      {
        key: 'select',
        label: '选择器',
        type:'SELECT',
        attrs:{
          multiple: false,
          required: true
        },
        options:[{
          label:'测试1',
          value:1
        },{
          label:'测试2',
          value: 2
        }]
      },
      {
        key: 'text',
        label: '文本',
        type:'TEXT',
      }
 
    ]
    },
    methods: {},
  }
  </script>
   
  <style lang="stylus" scoped></style>

props:

属性

含义

默认值

是否必填

schema组件渲染的schema 是(格式如上)

hiddenDeleteBtn

隐藏删除按钮falsefalse

disabledKeys

禁用项【】false

成品展示

以上就是全部内容,感兴趣的可以私聊代码哈~~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值