v1.0.20: 需求迭代(0808文档) - 文件管理迁入竞品资料+企业筛选弹窗(多条件且/或)+搜索框内嵌字段+渠道计划费用字段/状态行内编辑
This commit is contained in:
@@ -34,6 +34,75 @@ if ($active !== null) {
|
||||
$where = ['is_active = ?'];
|
||||
$params = [$active];
|
||||
}
|
||||
|
||||
// 筛选弹窗多字段条件:filters=JSON数组 [{field,op,value}],filter_logic=and|or
|
||||
// 注意:必须在此处($where/$params 初始化后)追加,否则会被上面的赋值覆盖
|
||||
$filtersJson = trim($_REQUEST['filters'] ?? '');
|
||||
$filterLogic = strtoupper(trim($_REQUEST['filter_logic'] ?? 'and')) === 'OR' ? 'OR' : 'AND';
|
||||
$filterConds = [];
|
||||
if ($filtersJson !== '') {
|
||||
$decoded = json_decode($filtersJson, true);
|
||||
if (is_array($decoded)) {
|
||||
foreach ($decoded as $c) {
|
||||
$fField = trim($c['field'] ?? '');
|
||||
$fOp = trim($c['op'] ?? '');
|
||||
$fVal = trim((string)($c['value'] ?? ''));
|
||||
if ($fField === '' || !in_array($fField, $searchableFields, true)) {
|
||||
continue;
|
||||
}
|
||||
switch ($fOp) {
|
||||
case 'contains':
|
||||
$filterConds[] = "$fField LIKE ?";
|
||||
$params[] = "%$fVal%";
|
||||
break;
|
||||
case 'eq':
|
||||
$filterConds[] = "$fField = ?";
|
||||
$params[] = $fVal;
|
||||
break;
|
||||
case 'neq':
|
||||
$filterConds[] = "$fField <> ?";
|
||||
$params[] = $fVal;
|
||||
break;
|
||||
case 'starts_with':
|
||||
$filterConds[] = "$fField LIKE ?";
|
||||
$params[] = "$fVal%";
|
||||
break;
|
||||
case 'ends_with':
|
||||
$filterConds[] = "$fField LIKE ?";
|
||||
$params[] = "%$fVal";
|
||||
break;
|
||||
case 'gt':
|
||||
$filterConds[] = "$fField > ?";
|
||||
$params[] = $fVal;
|
||||
break;
|
||||
case 'lt':
|
||||
$filterConds[] = "$fField < ?";
|
||||
$params[] = $fVal;
|
||||
break;
|
||||
case 'gte':
|
||||
$filterConds[] = "$fField >= ?";
|
||||
$params[] = $fVal;
|
||||
break;
|
||||
case 'lte':
|
||||
$filterConds[] = "$fField <= ?";
|
||||
$params[] = $fVal;
|
||||
break;
|
||||
case 'is_empty':
|
||||
$filterConds[] = "($fField IS NULL OR $fField = '')";
|
||||
break;
|
||||
case 'is_not_empty':
|
||||
$filterConds[] = "($fField IS NOT NULL AND $fField <> '')";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($filterConds) {
|
||||
$where[] = '(' . implode(" $filterLogic ", $filterConds) . ')';
|
||||
}
|
||||
|
||||
if ($keyword !== '') {
|
||||
if ($field !== '' && in_array($field, $searchableFields, true)) {
|
||||
$where[] = "$field LIKE ?";
|
||||
|
||||
Reference in New Issue
Block a user