 YbConditionSelect 条件选择器
YbConditionSelect 条件选择器
  # 基本使用
- 过滤条件默认选中第一个选项
- 可指定配置过滤条件下拉选项,根据指定的顺序进行选项渲染,默认显示组件内部所有可配置的过滤条件下拉选项
  复制 
# 特殊 input 组件用法
- 当 values 的组件类型设置为 input时,输入的内容根据英文逗号切割,可表示多个
- 当 A、B 组件类型设置为 input时,不根据英文逗号切割
  复制 
# 表单中使用
// 值合法校验
import { conditionValidator } from 'yb-components/packages/es/components/yb-condition-select/modules/utils';
// oneParamsConditions 单个数据值的符号,twoParamsConditions 范围值的符号
import {
    oneParamsConditions,
    twoParamsConditions,
} from 'yb-components/packages/es/components/yb-condition-select/modules/utils';
1
2
3
4
5
6
7
2
3
4
5
6
7
  复制 
# 高级用法
- 根据配置 formalDataExtra,根据 yb-formily 配置表单项内容,其中 controlled、validate 不会被覆盖
- values: 配置单个值表单项配置
- A: 配置范围值的 A 表单项配置
- B: 配置范围值的 B 表单项配置
 
代码中 formalData 默认配置
const oneParamsConditions = ['<', '≤', '≥', '>', '=', '≠', 'like'];
const twoParamsConditions = ['(a,b)', '(a,b]', '[a,b)', '[a,b]'];
const formalData = [
    {
        title: '',
        type: 'select',
        field: 'filterType',
        value: conditionsSymbolList[0],
        options: conditionsSymbolList,
        props: {
            optionInValue: true,
        },
        validate: [
            {
                required: true,
                message: '必填',
                trigger: 'change',
            },
        ],
    },
    {
        title: '',
        type: 'select',
        field: 'values',
        options: [],
        controlled: {
            rendered: function ({ formModel }) {
                return oneParamsConditions.includes(formModel.filterType.value);
            },
        },
        validate: [
            {
                required: true,
                message: '必填',
                trigger: 'change',
            },
            {
                validator: (rule, value, callback) => {
                    if (Array.isArray(value) && !value.length)
                        return callback('必填');
                    callback();
                },
                trigger: 'change',
            },
        ],
        props: {
            clearable: true,
        },
    },
    {
        title: 'A',
        type: 'select',
        field: 'A',
        options: [],
        controlled: {
            // 被控制是否渲染,当前控件是否渲染,取决于如何 return true/false
            rendered: function ({ formModel }) {
                return twoParamsConditions.includes(formModel.filterType.value);
            },
        },
        validate: [
            {
                required: true,
                message: '必填',
                trigger: 'change',
            },
            {
                validator: (rule, value, callback) => {
                    if (Array.isArray(value))
                        return callback('此类条件只能选一个值');
                    if (this.filterFormModel.A === this.filterFormModel.B) {
                        return callback('范围值不应该相同');
                    }
                    callback();
                },
                trigger: 'change',
            },
        ],
        props: {
            clearable: true,
        },
    },
    {
        title: 'B',
        type: 'select',
        field: 'B',
        options: [],
        controlled: {
            // 被控制是否渲染,当前控件是否渲染,取决于如何 return true/false
            rendered: function ({ formModel }) {
                return twoParamsConditions.includes(formModel.filterType.value);
            },
        },
        validate: [
            {
                required: true,
                message: '必填',
                trigger: 'change',
            },
            {
                validator: (rule, value, callback) => {
                    if (Array.isArray(value))
                        return callback('此类条件只能选一个值');
                    if (this.filterFormModel.A === this.filterFormModel.B) {
                        return callback('范围值不应该相同');
                    }
                    callback();
                },
                trigger: 'change',
            },
        ],
        props: {
            clearable: true,
        },
    },
];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
过滤值组件切换为 datePicker
        过滤值组件切换为 paginationSelect
    
  复制 
# YbConditionSelect Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 
|---|---|---|---|---|
| value/v-model | 绑定值 | object | - | -- | 
| placeholder | 占位内容 | string | - | 请选择 | 
| name | 原生属性 | string | - | -- | 
| clearable | 是否显示清除按钮 | boolean | - | false | 
| disabled | 是否禁用 | boolean | - | false | 
| size | 输入框尺寸 | string | large/small/mini | -- | 
| formatValueText | 将选中值显示在输入框的内容格式化 | function | - | -- | 
| conditions | 指定条件选项,默认显示组件内部全部条件选项 | array | 详见conditions | ['<', '≤', '>','≥', '=', '≠', 'like', '(a,b)', '(a,b]', '[a,b)', '[a,b]'] | 
| formalDataExtra | 根据 yb-formily 配置表单项内容,其中 controlled、validate 不会被覆盖 | object | 详见高级使用 | {} | 
| - | 其他属性同 el-dialog (opens new window) ,其中剔除 visible 属性 | |||
| title | Dialog 的标题 ,也可通过具名 slot:title 传入 | string | - | 过滤条件 | 
| width | Dialog 的宽度 | string | - | 移动端:90%,其余:'400px' | 
| top | Dialog CSS 中的 margin-top 值 | string | - | '30vh' | 
| appendToBody | Dialog 自身是否插入至 body 元素上 | boolean | - | true | 
# YbConditionSelect conditions 可选值
| 可选值 | 说明 | 
|---|---|
| = | 等于 | 
| ≠ | 不等于 | 
| < | 小于 | 
| ≤ | 小于等于 | 
| > | 大于 | 
| ≥ | 大于等于 | 
| like | 模糊 | 
| (a,b) | 大于 A 小于 B | 
| (a,b] | 大于 A 小于等于 B | 
| [a,b) | 大于等于 A 小于 B | 
| [a,b] | 大于等于 A 小于等于 B | 
# YbConditionSelect Slots
| name | 说明 | 
|---|---|
| title | Dialog 的标题 | 
# YbConditionSelect Events
| 事件名称 | 说明 | 回调参数 | 
|---|---|---|
| change | 选定值改变时触发 | 目前的选中值 value | 
| visible-change | 弹窗出现/隐藏时触发 | 出现则为 true,隐藏则为 false | 
| clear | 可清空的单选模式下用户点击清空按钮时触发 | |
| blur | 当 input 失去焦点时触发 | (event: Event) | 
| focus | 当 input 获得焦点时触发 | (event: Event) | 
# YbConditionSelect Methods
| 事件名称 | 说明 | 参数 | 
|---|---|---|
| blur | 使 input 获取焦点 | |
| focus | 使 input 失去焦点,并隐藏下拉框 | 
上次更新: 2024/04/29, 15:15:24
