diff --git a/src/components/grid/DataGrid.vue b/src/components/grid/DataGrid.vue index 055fecac9f..c36500d4c0 100644 --- a/src/components/grid/DataGrid.vue +++ b/src/components/grid/DataGrid.vue @@ -1139,7 +1139,17 @@ function applyContextSort(direction: "asc" | "desc" | null) { emit("sort", column, columnIndex, direction, currentWhereInput()); } -function contextFilterCondition(mode: "equals" | "not-equals" | "is-null" | "is-not-null"): string | null { +type FilterMode = + | "equals" + | "not-equals" + | "is-null" + | "is-not-null" + | "like" + | "not-like" + | "less-than" + | "greater-than"; + +function contextFilterCondition(mode: FilterMode): string | null { if (!contextColumn.value) return null; const column = quoteIdent(contextColumn.value); const value = contextCellValue.value; @@ -1147,10 +1157,14 @@ function contextFilterCondition(mode: "equals" | "not-equals" | "is-null" | "is- if (mode === "is-null") return `${column} IS NULL`; if (mode === "is-not-null") return `${column} IS NOT NULL`; if (value === null) return mode === "equals" ? `${column} IS NULL` : `${column} IS NOT NULL`; + if (mode === "like") return `${column} LIKE ${escapeVal(`%${value}%`)}`; + if (mode === "not-like") return `${column} NOT LIKE ${escapeVal(`%${value}%`)}`; + if (mode === "less-than") return `${column} < ${escapeVal(value)}`; + if (mode === "greater-than") return `${column} > ${escapeVal(value)}`; return mode === "equals" ? `${column} = ${escapeVal(value)}` : `${column} <> ${escapeVal(value)}`; } -async function applyContextFilter(mode: "equals" | "not-equals" | "is-null" | "is-not-null") { +async function applyContextFilter(mode: FilterMode) { if (!canUseWhereSearch.value) return; const condition = contextFilterCondition(mode); if (!condition) return; @@ -2366,6 +2380,13 @@ defineExpose({ {{ t("grid.filterExcludeValue") }} + {{ t("grid.filterLike") }} + {{ t("grid.filterNotLike") }} + {{ t("grid.filterLessThan") }} + + {{ t("grid.filterGreaterThan") }} + + {{ t("grid.filterIsNull") }} {{ t("grid.filterIsNotNull") }} diff --git a/src/i18n/locales/en.ts b/src/i18n/locales/en.ts index 475b2385c1..c5457756a0 100644 --- a/src/i18n/locales/en.ts +++ b/src/i18n/locales/en.ts @@ -242,6 +242,10 @@ export default { moreValues: "{count} more values, keep typing to narrow results", filterByValue: "Filter by This Value", filterExcludeValue: "Exclude This Value", + filterLike: "Contains Value", + filterNotLike: "Does Not Contain", + filterLessThan: "Less Than Value", + filterGreaterThan: "Greater Than Value", filterIsNull: "Show NULL Values", filterIsNotNull: "Show Non-NULL Values", clearFilter: "Clear Filter", diff --git a/src/i18n/locales/es.ts b/src/i18n/locales/es.ts index dd922cd1e8..173594e91c 100644 --- a/src/i18n/locales/es.ts +++ b/src/i18n/locales/es.ts @@ -243,6 +243,10 @@ export default { moreValues: "{count} valores más, sigue escribiendo para acotar los resultados", filterByValue: "Filtrar por este valor", filterExcludeValue: "Excluir este valor", + filterLike: "Contiene este valor", + filterNotLike: "No contiene este valor", + filterLessThan: "Menor que este valor", + filterGreaterThan: "Mayor que este valor", filterIsNull: "Mostrar valores NULL", filterIsNotNull: "Mostrar valores no NULL", clearFilter: "Limpiar filtro", diff --git a/src/i18n/locales/zh-CN.ts b/src/i18n/locales/zh-CN.ts index bdac12b829..dd83077476 100644 --- a/src/i18n/locales/zh-CN.ts +++ b/src/i18n/locales/zh-CN.ts @@ -241,6 +241,10 @@ export default { moreValues: "还有 {count} 个值,输入关键词继续缩小范围", filterByValue: "筛选此值", filterExcludeValue: "排除此值", + filterLike: "包含此值", + filterNotLike: "不包含此值", + filterLessThan: "小于此值", + filterGreaterThan: "大于此值", filterIsNull: "仅显示 NULL", filterIsNotNull: "仅显示非 NULL", clearFilter: "清除筛选",