Skip to content

Multistage 条件筛选

多条件筛选

何时使用

当存在多个筛选条件时使用



代码演示

1. 默认效果

期望薪资:
1
1001
2001
3001
4001
5001
6001
7001
8001
9001
10001
11001
12001
13001
14001
15001
16001
17001
18001
19001
展开
劳动年龄:
1
6
11
16
21
26
31
36
41
46
51
56
61
66
71
76
81
86
91
96
展开
个人兴趣爱好:
不限
音乐
阅读
跑步
瑜伽
羽毛球
篮球
展开
默认效果
简单的配置效果
<template>
  <z-multistage :options="options" v-model="searchVals"></z-multistage>
</template>

<script setup lang="ts">
import { ref } from "vue";
import type { IMtOptions, IMtChange } from "@d7ee/z-base-ui";

const searchVals = ref<IMtChange["data"]>({});

const options = ref<IMtOptions[]>([
  {
    name: "期望薪资",
    value: "wages",
    children: new Array(20).fill(1).map((r: number, i) => ({
      name: `${r + i * 1000}`,
      value: i,
    }))
  },
  {
    name: "劳动年龄",
    value: "age",
    children: new Array(20).fill(1).map((r: number, i) => ({
      name: `${r + i * 5}`,
      value: i,
    }))
  },
  {
    name: "个人兴趣爱好",
    value: "love",
    children: ['不限', '音乐', '阅读', '跑步', '瑜伽', '羽毛球', '篮球'].map((name, i) => ({
      name: name,
      value: i,
    }))
  },
]);

</script>

2. 全局选中与多选

期望薪资:
不限
6
11
16
21
26
31
36
41
46
51
56
61
66
71
76
81
86
91
96
101
展开
劳动年龄:
不限
6
11
16
21
26
31
36
41
46
51
56
61
66
71
76
81
86
91
96
101
展开
个人兴趣爱好:
不限
音乐
阅读
跑步
瑜伽
羽毛球
篮球
展开
全局匹配和多选
通过设置“dft”来匹配选中所有条件中包含dft值的条件项,启用check标识为多选
<template>
  <z-multistage :options="options" v-model="searchVals" dft="clear"></z-multistage>
</template>

<script setup lang="ts">
import { ref } from "vue";
import {IMtChange, IMtOptions} from "@d7ee/z-base-ui";

const searchVals = ref<IMtChange["data"]>({});

const options = ref<IMtOptions[]>([
  {
    name: "期望薪资",
    value: "wages",
    children: ["不限", ...new Array(20).fill(1)].map((r: number, i) => ({
      name: typeof r === "string" ? r : `${r + i * 5}`,
      value: i === 0 ? "clear" : i,
    }))
  },
  {
    name: "劳动年龄",
    value: "age",
    children: ["不限", ...new Array(20).fill(1)].map((r: number | string, i) => ({
      name: typeof r === "string" ? r : `${r + i * 5}`,
      value: i === 0 ? "clear" : i,
    }))
  },
  {
    name: "个人兴趣爱好",
    value: "love",
    check: true,
    children: ['不限', '音乐', '阅读', '跑步', '瑜伽', '羽毛球', '篮球'].map((name, i) => ({
      name: name,
      value: i === 0 ? "clear" : i,
    }))
  },
]);

</script>

3. 默认选中

期望薪资:
不限
6
11
16
21
26
31
36
41
46
51
56
61
66
71
76
81
86
91
96
101
展开
劳动年龄:
不限
6
11
16
21
26
31
36
41
46
51
56
61
66
71
76
81
86
91
96
101
展开
个人兴趣爱好:
不限
音乐
阅读
跑步
瑜伽
羽毛球
篮球
展开
默认选中
通过设置“select”来设置初始值
<template>
  <z-multistage :options="options" v-model="searchVals" dft="clear"></z-multistage>
</template>

<script setup lang="ts">
import { ref } from "vue";
import {IMtChange, IMtOptions} from "@d7ee/z-base-ui";

const searchVals = ref<IMtChange["data"]>({});

const options = ref<IMtOptions[]>([
  {
    name: "期望薪资",
    value: "wages",
    select: 2,
    children: ["不限", ...new Array(20).fill(1)].map((r: number, i) => ({
      name: typeof r === "string" ? r : `${r + i * 5}`,
      value: i === 0 ? "clear" : i,
    }))
  },
  {
    name: "劳动年龄",
    value: "age",
    children: ["不限", ...new Array(20).fill(1)].map((r: number | string, i) => ({
      name: typeof r === "string" ? r : `${r + i * 5}`,
      value: i === 0 ? "clear" : i,
    }))
  },
  {
    name: "个人兴趣爱好",
    value: "love",
    check: true,
    select: [2, 4],
    children: ['不限', '音乐', '阅读', '跑步', '瑜伽', '羽毛球', '篮球'].map((name, i) => ({
      name: name,
      value: i === 0 ? "clear" : i,
    }))
  },
]);

</script>

4. 多级联动

期望薪资:
不限
6
11
16
21
26
31
36
41
46
51
56
61
66
71
76
81
86
91
96
101
展开
劳动年龄:
不限
6
11
16
21
26
31
36
41
46
51
56
61
66
71
76
81
86
91
96
101
展开
个人兴趣爱好:
不限
音乐
阅读
跑步
瑜伽
羽毛球
篮球
展开
多级联动
通过设置“parnetId”来设置关联关系,当父ID发生改变,与其关联的条件就会被重置
<template>
  <z-multistage :options="options" v-model="searchVals" dft="clear"></z-multistage>
</template>

<script setup lang="ts">
import { ref } from "vue";
import {IMtChange, IMtOptions} from "@d7ee/z-base-ui";

const searchVals = ref<IMtChange["data"]>({});

const options = ref<IMtOptions[]>([
  {
    name: "期望薪资",
    value: "wages",
    children: ["不限", ...new Array(20).fill(1)].map((r: number, i) => ({
      name: typeof r === "string" ? r : `${r + i * 5}`,
      value: i === 0 ? "clear" : i,
    }))
  },
  {
    name: "劳动年龄",
    value: "age",
    parentId: "wages",
    children: ["不限", ...new Array(20).fill(1)].map((r: number | string, i) => ({
      name: typeof r === "string" ? r : `${r + i * 5}`,
      value: i === 0 ? "clear" : i,
    }))
  },
  {
    name: "个人兴趣爱好",
    value: "love",
    check: true,
    parentId: ["wages", "age"],
    children: ['不限', '音乐', '阅读', '跑步', '瑜伽', '羽毛球', '篮球'].map((name, i) => ({
      name: name,
      value: i === 0 ? "clear" : i,
    }))
  },
]);

</script>

5. 禁止选中

期望薪资:
1
1001
2001
3001
4001
5001
6001
7001
8001
9001
10001
11001
12001
13001
14001
15001
16001
17001
18001
19001
展开
劳动年龄:
1
6
11
16
21
26
31
36
41
46
51
56
61
66
71
76
81
86
91
96
展开
个人兴趣爱好:
音乐
阅读
跑步
瑜伽
羽毛球
篮球
展开
默认选中
通过设置disabled来禁止选中某些条件或整行
<template>
  <z-multistage :options="options" v-model="searchVals"></z-multistage>
</template>

<script setup lang="ts">
import { ref } from "vue";
import {IMtChange, IMtOptions} from "@d7ee/z-base-ui";

const searchVals = ref<IMtChange["data"]>({});

const options = ref<IMtOptions[]>([
  {
    name: "期望薪资",
    value: "wages",
    disabled: true,
    children: new Array(20).fill(1).map((r: number, i) => ({
      name: `${r + i * 1000}`,
      value: i,
    }))
  },
  {
    name: "劳动年龄",
    value: "age",
    children: new Array(20).fill(1).map((r: number, i) => ({
      name: `${r + i * 5}`,
      value: i,
    }))
  },
  {
    name: "个人兴趣爱好",
    value: "love",
    check: true,
    children: ['音乐', '阅读', '跑步', '瑜伽', '羽毛球', '篮球'].map((name, i) => ({
      name: name,
      value: i,
      disabled: name === "跑步"
    }))
  },
]);

</script>

API

props

参数说明类型默认值版本
options查询条件,详见props-options必填项Array<IMtOptions>[]>= 0.1.1
all默认选中所有条件中符合dft的值,在>=0.1.3版本中被移除booleanfalse>= 0.1.1
dft当dft有值时,全局匹配选中符合dft值的条件stringnull>= 0.1.1
lw标题宽度string100px>= 0.1.1
value通过v-model绑定,实时获取结果string{}>= 0.1.1
color被选中时的文字颜色string#ffffff>= 0.1.5
bg被选中时的背景颜色string#ff6000>= 0.1.5

props-options

类型说明类型默认值版本
name标题,必填项string>= 0.1.1
value唯一值,将会用做返回结果集的key,必填项string>= 0.1.1
children选择条件,必填项Array<{name, value, disabled}>[]>= 0.1.1
parentId父ID,多级联动时使用,当父ID发生变化时,当前条件移除选中状态string | number | Array<string | number>null>= 0.1.3
disabled当前行禁至被选中booleanfalse>= 0.1.1
check多选,允许当前行选择一个或多个booleanfalse>= 0.1.1
select初始值,用于设置默认选中状态string | string[]null>= 0.1.1
open默认显示当前行所有条件booleanfalse>= 0.1.1
isOpen是否显示展开按钮,详见isOpenstring | booleanauto>= 0.1.1

参数演示

javascript
// 查询条件
const optipons = [
    {
        name: "年龄", // 标题
        value: "age", // 唯一值,相当于key
        children: [ // 条件项
            {
                name: "10岁以下",
                value: "10"
            },
            {
                name: "10岁 ~ 20岁",
                value: "20",
                disabled: true, // 禁止选中当前条件
            }
        ]
    }
];

// v-model结果
const searchRes = {
    "age": "10"
}

props-isOpen

默认值为:auto

  • auto:isOpen 为 auto 时,将自动计算是否存在多行条件,存在则显示展开按钮,不存在则隐藏,若外层宽度未固定,当宽度发生变化后,也会触发调整。
  • true:一直显示暂开按钮,除非变为fasle

自定义插槽

插槽名说明参数版本
footer底部自定义插槽,在底部自定义内容进行扩展>= 0.1.1
open自定义展开按钮,在>=0.1.3版本后暂时被移除status: boolean>= 0.1.1
  • open插槽,接收一个参数status,为boolean,你可以通过它来判断当前是处于展开还是折叠

事件

事件说明类型版本
change状态改变时回调,详见changefunction(e)>= 0.1.1
resetValue重置所有状态,通过ref调用,详见resetvaluefunction(e)>= 0.1.1
resetCustomCondition重置或修改指定项,通过ref调用,详见resetcustomconditionfunction(e)>= 0.1.3
callbackState返回当前结果,通过ref调用详见示列,版本>=0.1.3后被移除function(e)>= 0.1.1

change

状态发生改变时回调,接收一个参数,参数类型为Object,参数内容如下

  • data {Object} 选中结果集合
  • target {String} 是谁改变了
  • oldVal {string | string[] | null} 改变前的值
  • newVal {string | string[] | null} 改变后的值
vue
<template>
	<z-multistage @change="callbackChange"/>
</template>

<script setup lang="ts">
import { IMtChange } from "@d7ee/z-base-ui";

const callbackChange = (e: IMtChange) => {
    console.log(e);
    /* 结果如下
    {
        data: {age: "10"}, // 结果集
        target: "age", // 是谁改变了
        oldVal: null, // target变动前的值
        newVal: "10", // target最新值
    }
    */
}
</script>

resetValue

用于重置所有状态

需要绑定ref之后,通过ref主动调用,调用后不会触发change事件,但会触发v-model的更新

vue
<template>
    <z-multistage ref="rMultistage"/>
    <button @click="reset">重置</button>
</template>

<script setup lang="ts">
import { ref } from "vue";

const rMultistage = ref<any>();
    
const reset = () => {
    rMultistage.value?.resetValue();
}
</script>

resetCustomCondition

用于修改或重置某一项或多项条件的状态

需要绑定ref之后,通过ref主动调用,调用后不会触发change事件,但会触发v-model的更新,同时返回一个与v-model同样的结果

接受参数类型:string | number | (string | number)[] | Array<{key: string | number, value: string | number} | string | number>

其中:string,number,string[], number[],用于重置状态,而Array<{key, value}>用于修改状态,key为唯一值来源于props-options-value,value为选中值

vue
<template>
    <z-multistage ref="rMultistage"/>
    <button @click="reset">重置</button>
</template>

<script setup lang="ts">
import { ref } from "vue";

const rMultistage = ref<any>();
    
const reset = () => {
    const a = rMultistage.value?.resetCustomCondition("age");
    console.log(a);
}
</script>