Appearance
Filter 筛选器
为什么使用?
- 采用JS配置方式生成筛选表单,大部分情况下会比写html稍微方便一点点
- 自动布局,默认遵循当前ERP每行5个表单元素的规则,同时提供了参数配置该项
- 提供了
trim
配置,输入框默认会被trim处理 - 提供了
transofrm
配置,有时表单元素绑定的值并不是搜索的值,比如日期选择器 - 提供了
enterQuery
配置(回车触发搜索),默认开启 - 表单元素提供了缺省的
placeholder
- 表单元素默认传递了
clearable
- 阻止了表单的默认事件,避免当只有一个表单元素,回车时导致页面刷新
基础用法
vue
<template>
<!-- 为了更好的演示效果,此处配置了column-count="3" -->
<jlc-filter :filters="filters" :column-count="3" @query="onQuery"></jlc-filter>
</template>
<script setup lang='ts'>
import { JlcFilter } from '@sz-jlc/admin-vue3'
const filters = [
{
label: '姓名',
key: 'name',
component: 'el-input' // 默认即为el-input,这行也可以不写
}
]
const onQuery = (queryParams) => {
console.log(queryParams)
}
</script>
表单元素的默认值
vue
<template>
<jlc-filter :filters="filters" :column-count="3" @query="onQuery"></jlc-filter>
</template>
<script setup lang='ts'>
import { JlcFilter } from '@sz-jlc/admin-vue3'
const filters = [
{
label: '姓名',
key: 'name',
value: '嘉立创'
},
]
const onQuery = (queryParams) => {
console.log(queryParams)
}
</script>
表单元素的属性和事件
vue
<template>
<jlc-filter :filters="filters" :column-count="3" @query="onQuery"></jlc-filter>
</template>
<script setup lang='ts'>
import { JlcFilter } from '@sz-jlc/admin-vue3'
const filters = [
{
label: '姓名',
key: 'name',
attrs: {
placeholder: '输入关键词模糊查找'
},
events: {
focus() {
console.log('focus')
}
}
},
]
const onQuery = (queryParams) => {
console.log(queryParams)
}
</script>
其他表单元素
vue
<template>
<jlc-filter :filters="filters" :column-count="3" @query="onQuery"></jlc-filter>
</template>
<script setup lang='ts'>
import { JlcFilter } from '@sz-jlc/admin-vue3'
const genderOptions = [
{ label: '男', value: 1 },
{ label: '女', value: 0 },
]
const filters = [
{
label: '姓名',
key: 'name',
},
{
label: '性别',
key: 'gender',
component: 'el-select',
children: genderOptions.map(item => ({
component: 'el-option',
attrs: item
}))
},
{
label: '年龄',
key: 'age',
component: 'el-input-number'
},
{
label: '生日',
key: 'birthday',
compoent: 'el-date-picker'
}
]
const onQuery = (queryParams) => {
console.log(queryParams)
}
</script>
值转换 transform
上一个示例中包含了一个日期选择器,点击查询的时候发现获得的是一个日期对象; 或许并不是你想要的格式,那么就可以使用transform配置进行转换。
vue
<template>
<jlc-filter :filters="filters" :column-count="3" @query="onQuery"></jlc-filter>
</template>
<script setup lang='ts'>
import { JlcFilter } from '@sz-jlc/admin-vue3'
const filters = [
{
label: '生日',
key: 'birthday',
component: 'el-date-picker',
transform(date?: Date) {
if (date instanceof Date) {
return date.toLocaleDateString()
}
return date
}
}
]
const onQuery = (queryParams) => {
console.log(queryParams)
}
</script>
FilterItem 插槽
有时仅有的配置无法满足某些场景,那么就可以使用插槽选项来实现更高定制化的效果;
插槽暴露出了一个bindForm
,即用于绑定表单的对象(非查询时的表单);
如果想在外部设置bindForm,可以调用组件的setFilter
方法。
vue
<template>
<jlc-filter :filters="filters" :column-count="3" @query="onQuery">
<template #department="{ bindForm }">
<el-input v-model="bindForm.department" placeholder="请选择">
<template #append>
<el-button @click="onChooseDepartment()">选择</el-button>
</template>
</el-input>
</template>
</jlc-filter>
</template>
<script setup lang='ts'>
import { JlcFilter } from '@sz-jlc/admin-vue3'
const filters = [
{
label: '部门',
key: 'department',
slot: 'department'
},
]
const onChooseDepartment = () => {
console.log('选择部门')
}
const onQuery = (queryParams) => {
console.log(queryParams)
}
</script>
属性
属性名 | 说明 | 类型 | 可选值 | 默认值 | 是否必填 |
---|---|---|---|---|---|
filters | 筛选项列表 | FilterItem[] | - | - | 是 |
columnCount | 每行多少个表单元素 | number | - | 5 | 否 |
FilterItem
属性名 | 说明 | 类型 | 可选值 | 默认值 | 是否必填 |
---|---|---|---|---|---|
component | 组件 | string | - | el-input | 否 |
key | 绑定字段 | string | string[] | - | - | 是 |
value | 初始值 | any | - | - | 否 |
label | 表单label | string | - | - | 否 |
type | 类型,当前仅有一个rangeTime | string | rangeTime | - | 否 |
attrs | 组件属性 | object | - | - | 否 |
events | 组件事件 | object | - | - | 否 |
slot | 插槽 | string | - | - | 否 |
trim | 是否对查询值进行trim处理 | boolean | - | true | 否 |
transform | 查询值转换函数 | (value: any) => any | - | - | 否 |
flatTransform | 是否拉平转换查询值,当transform返回一个对象时有用 | boolean | - | false | 否 |
enterQuery | 回车时是否触发查询 | boolean | - | true | 否 |
clearable | 表单值是否可清除 | boolean | - | true | 否 |
children | 子元素,通常可用来应对select组件 | object | - | - | 否 |
children.component | 子元素的组件名 | string | - | - | 否 |
children.content | 子元素的内容 | string | - | - | 否 |
children.render | 子元素的render函数,需要返回一个VNode | (bindForm?: object) => VNode | - | - | 否 |
children.attrs | 子元素的属性 | object | - | - | 否 |
children.events | 子元素的事件 | object | - | - | 否 |
方法
方法名 | 描述 | 参数 |
---|---|---|
query | 查询 |
|
setFilter | 设置表单绑定的值 |
|
reset | 重置 |
|
事件
事件名 | 说明 | 回调参数 |
---|---|---|
query | 触发查询时,会在输入框回车、点击查询、外部调用query方法时触发 |
|
reset | 触发重置时,会在点击重置、外部调用reset方法时触发 |
|
插槽
插槽 | 说明 |
---|---|
filter-ctrl | 表单尾部内容,默认为一个查询按钮和一个重置按钮,可接收到query、reset两个方法。 |