fix: make advanced filters work
Co-authored-by: aider (openai/DeepSeek-V3.2-Thinking) <aider@aider.chat>
This commit is contained in:
@ -209,24 +209,44 @@ class MaterialBaseService:
|
|||||||
column = getattr(MaterialBase, db_field, None)
|
column = getattr(MaterialBase, db_field, None)
|
||||||
if column is None:
|
if column is None:
|
||||||
continue
|
continue
|
||||||
if operator == 'eq':
|
# 处理操作符
|
||||||
filter_conditions.append(column == value)
|
# 对于数值型列(聚合字段)只支持 eq, ne, ge, le
|
||||||
elif operator == 'ne':
|
if isinstance(column, type(total_inv)):
|
||||||
filter_conditions.append(column != value)
|
# 数值型列
|
||||||
elif operator == 'contains':
|
|
||||||
filter_conditions.append(column.ilike(f'%{value}%'))
|
|
||||||
elif operator == 'ge':
|
|
||||||
try:
|
try:
|
||||||
num_val = float(value)
|
num_val = float(value)
|
||||||
|
except ValueError:
|
||||||
|
# 转换失败则跳过该条件
|
||||||
|
continue
|
||||||
|
if operator == 'eq':
|
||||||
|
filter_conditions.append(column == num_val)
|
||||||
|
elif operator == 'ne':
|
||||||
|
filter_conditions.append(column != num_val)
|
||||||
|
elif operator == 'ge':
|
||||||
filter_conditions.append(column >= num_val)
|
filter_conditions.append(column >= num_val)
|
||||||
except ValueError:
|
elif operator == 'le':
|
||||||
continue
|
|
||||||
elif operator == 'le':
|
|
||||||
try:
|
|
||||||
num_val = float(value)
|
|
||||||
filter_conditions.append(column <= num_val)
|
filter_conditions.append(column <= num_val)
|
||||||
except ValueError:
|
# 对于 contains 操作符,数值型列不支持,忽略
|
||||||
continue
|
else:
|
||||||
|
# 字符串型列
|
||||||
|
if operator == 'eq':
|
||||||
|
filter_conditions.append(column == value)
|
||||||
|
elif operator == 'ne':
|
||||||
|
filter_conditions.append(column != value)
|
||||||
|
elif operator == 'contains':
|
||||||
|
filter_conditions.append(column.ilike(f'%{value}%'))
|
||||||
|
elif operator == 'ge':
|
||||||
|
try:
|
||||||
|
num_val = float(value)
|
||||||
|
filter_conditions.append(column >= num_val)
|
||||||
|
except ValueError:
|
||||||
|
continue
|
||||||
|
elif operator == 'le':
|
||||||
|
try:
|
||||||
|
num_val = float(value)
|
||||||
|
filter_conditions.append(column <= num_val)
|
||||||
|
except ValueError:
|
||||||
|
continue
|
||||||
if filter_conditions:
|
if filter_conditions:
|
||||||
query = query.filter(and_(*filter_conditions))
|
query = query.filter(and_(*filter_conditions))
|
||||||
|
|
||||||
|
|||||||
@ -736,7 +736,12 @@ const querySearchType = (queryString: string, cb: any) => {
|
|||||||
|
|
||||||
const getList = () => {
|
const getList = () => {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
listMaterialBase(queryParams)
|
// Stringify advancedFilters to JSON string as backend expects
|
||||||
|
const params = {
|
||||||
|
...queryParams,
|
||||||
|
advancedFilters: JSON.stringify(queryParams.advancedFilters || [])
|
||||||
|
};
|
||||||
|
listMaterialBase(params)
|
||||||
.then((response: any) => {
|
.then((response: any) => {
|
||||||
if (response && response.data) {
|
if (response && response.data) {
|
||||||
tableData.value = response.data.items;
|
tableData.value = response.data.items;
|
||||||
|
|||||||
Reference in New Issue
Block a user