跳到主要内容

模型筛选器

模型筛选器是用于对指定模型数据进行筛选操作的交互组件,基于React和TypeScript实现数据查询条件的可视化配置能力。它负责构建查询条件、管理筛选状态和触发查询事件,支持简单模式、复杂模式和自由模式三种筛选方式,提供列表和标签两种展示样式。

模型筛选器元素分层结构为Meta(components.Meta)→ Type(components.Filter)→ 实例,开发者可通过JitAI的可视化开发工具快捷地创建模型筛选器实例元素。

当然,开发者也可以创建自己的Type元素,或者在自己的App中改写JitAi官方提供的components.FilterType元素,以实现自己的封装。

快速开始

基础配置示例

基本使用示例
{
"name": "Filter1",
"title": "用户筛选器",
"type": "components.Filter",
"config": {
"requireElements": [
{
"name": "models.UserModel",
"type": "models.Meta",
"title": "用户模型",
"filter": "",
"orderBy": []
}
],
"mode": "simple",
"firstTimeQuery": true,
"layoutPercent": 1,
"styleMode": "list",
"typeMode": "horizontal",
"config": {
"gender": {
"layout": {
"w": 60, "h": 1, "x": 0, "y": 0,
"i": "gender", "minW": 12, "minH": 1
},
"config": {
"fieldId": "gender",
"showTitle": true,
"multiple": false,
"isAll": false,
"isShowAlias": false,
"group": [
{
"id": "filter-group-1",
"type": "normal",
"name": "男",
"operator": "isEqual",
"filter": [
{
"uid": "item-1",
"fieldId": "gender",
"operator": "isEqual",
"value": "male",
"valueType": "constant",
"type": "ITEM"
}
]
}
],
"isCustom": true,
"rowNum": 1,
"isShowMore": false
}
}
}
}
}

配置属性说明

属性名类型必填默认值说明
requireElementsrequireElement[]-关联的模型元素配置
modeFilterModeEnum'simple'筛选模式:simple/complex/free
firstTimeQuerybooleantrue是否首次加载时查询
layoutPercentnumber1布局百分比
styleModeSimpleFilterStyleEnum'list'简单模式样式:list/tag
typeModeSimpleFilterTypeEnum'horizontal'简单模式类型:horizontal/vertical
configRecord<string, IFilterSimpleConfigNode>{}字段筛选配置
isShowAllFieldbooleanfalse是否显示所有字段

requireElement 配置

属性名类型必填说明
namestring模型元素fullName
typestring固定值 'models.Meta'
titlestring模型显示名称
filterstring预设筛选条件
orderBystring[]排序规则

字段筛选配置 (IFilterSimpleConfigNodeConfig)

属性名类型必填默认值说明
fieldIdstring-字段ID
showTitlebooleantrue是否显示字段标题
multiplebooleanfalse是否多选
isAllbooleanfalse是否包含全部选项
isShowAliasbooleanfalse是否显示字段别名
aliasstring-字段别名
groupIFilterSimpleConfigGroupItem[][]筛选分组配置
defaultSelectedGroupstring[][]默认选中分组
hasDefaultSelectbooleanfalse是否有默认选择
isCustombooleantrue是否支持自定义筛选
customFilterOperateTypestring-自定义筛选操作类型
customFilterInfoIFilterCompItem[][]自定义筛选信息
placeholderstring-占位符文本
rowNumnumber1显示行数
isShowMorebooleanfalse是否显示更多选项
isFuzzyQuerybooleanfalse是否支持模糊查询

变量

filter

筛选条件变量,存储当前组件的所有筛选条件。

属性类型说明
名称filter变量名
类型QFilter查询筛选条件类型
泛型关联模型指向requireElements中指定的模型
只读true变量为只读,由组件内部维护

使用示例

获取筛选条件
// 获取当前筛选条件
const currentFilter = this.filter.value;

// 在其他组件中引用筛选条件
{
"dataSource": {
"filter": "{{Filter1.filter}}"
}
}

方法

reset

重置筛选器所有筛选条件为初始状态。

重置筛选器
await this.reset();

runCode

执行JavaScript代码字符串,代码在页面上下文中运行。

参数

参数名类型必填说明
codestring要执行的JavaScript代码

返回值:any - 代码执行结果

执行动态代码
// 获取筛选条件
const filterValue = this.runCode('this.filter.value');

// 执行复杂逻辑
const result = this.runCode(`
const condition = this.filter.value;
return condition ? '有筛选条件' : '无筛选条件';
`);

setConfig

更新组件配置。

参数

参数名类型必填说明
nextPartial<T>新配置对象
cleanboolean是否完全替换配置
动态修改配置
this.setConfig({
styleMode: "tag",
typeMode: "vertical"
});

publishEvent

发布组件事件。

参数

参数名类型必填说明
namestring事件名称
exRecord<string, any>事件额外数据
发布自定义事件
await this.publishEvent('customFilter', { 
filterType: 'advanced',
data: filterData
});

subscribeEvent

订阅组件事件。

参数

参数名类型必填说明
namestring事件名称
evtCbFunction事件回调函数
unSubscribeExistboolean是否取消已存在订阅

返回值:string - 事件处理器ID

订阅筛选事件
const handlerId = this.subscribeEvent('afterFilter', async (data) => {
console.log('筛选条件:', data.filter.value);
});

unSubscribeEvent

取消事件订阅。

参数

参数名类型必填说明
idstring事件处理器ID

destroy

销毁组件实例,清理所有资源和事件订阅。

getPermConfig

获取组件权限配置。

返回值:Record<string, any> | undefined - 权限配置对象

事件

afterFilter

查询后事件,在筛选条件发生变化并完成查询后触发。

属性类型说明
事件名称afterFilter固定事件名
数据参数filter当前筛选条件
触发时机筛选条件变化并查询完成后
事件处理示例
// 订阅筛选后事件
this.subscribeEvent('afterFilter', async (data) => {
console.log('筛选条件:', data.filter.value);
// 更新其他组件数据
await this.Table1.refresh();
});

属性

name

组件实例名称。

  • 类型:string

title

组件显示标题。

  • 类型:string

type

组件类型标识。

  • 类型:string

showTitle

是否显示标题。

  • 类型:boolean

config

组件配置对象。

  • 类型:T

app

应用实例引用。

  • 类型:App

page

页面实例引用。

  • 类型:BasePage

高级特性

多模式支持

复杂模式配置
{
"mode": "complex",
"layoutPercent": 1,
"config": {
"fieldId": {
"layout": { /* 布局配置 */ },
"config": {
"fieldId": "userName",
"isShowAlias": true,
"alias": "用户名称"
}
}
}
}

自定义筛选条件

自定义筛选配置
{
"customFilterInfo": [
{
"uid": "custom-1",
"fieldId": "age",
"operator": "gt",
"value": 18,
"valueType": "constant",
"type": "ITEM"
}
]
}

动态字段生成

当设置isShowAllField: true时,组件会自动根据关联模型的字段定义生成筛选配置,排除不支持筛选的字段类型(图片、富文本、定位、附件、子表)。