一、背景:
多场景使用到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 | 隐藏删除按钮 | false | false |
|
disabledKeys | 禁用项 | 【】 | false |
成品展示

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

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





