v1.0.20: 需求迭代(0808文档) - 文件管理迁入竞品资料+企业筛选弹窗(多条件且/或)+搜索框内嵌字段+渠道计划费用字段/状态行内编辑

This commit is contained in:
nanguaboss
2026-08-08 22:54:56 +08:00
parent 1c8b374a72
commit b8c2a2d5c7
14 changed files with 500 additions and 50 deletions
+69
View File
@@ -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 ?";