fix(makecode): Search 文本字段只走模糊匹配,避免等值叠加导致空结果

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-23 06:15:07 +08:00
parent b5b764e3f9
commit 853940c795
3 changed files with 56 additions and 1 deletions
+11
View File
@@ -765,6 +765,17 @@ CREATE TABLE user (
**规则**`showself=1` 仅在 `showall=1` 时生效。普通子级查询(仅 `parent_id=X`)**不会**把 id=X 的行本身混入结果——否则前端树会把节点当作自己的子级,造成无限嵌套(历史缺陷,已修复;回归用例见 `example/app/makecode_tree_test.go``go test ./app/ -count=1 -run 'TestApi/admin/department/search'`)。
#### 通用列表字段筛选语义(text 类型只走模糊匹配)
通用 CRUD 的 `search` 接口为每个 `list` 可见字段自动生成筛选条件(`code/makecode.go` `(*MakeCode).Search`),按字段最终生效的 `type`(见 [4.2 数据类型映射](#42-数据类型映射),可被 [3.3 字段规则配置(rule.json](#33-字段规则配置rulejson) 覆盖)分两种语义:
| 字段 type | 请求 `?字段名=值` 的 WHERE 语义 | 说明 |
| --- | --- | --- |
| 含 `"text"` 子串(`text`/`textArea` | `字段名 LIKE '%值%'`(模糊,仅此一条) | 前端筛选框允许只填部分关键词 |
| 其他(`number`/`select`/`time`/`money`… 等非 text | `字段名 = 值`(精确等值) | 维持现状不变 |
**规则**:文本类型字段**只生成模糊匹配条件,不再叠加同名等值条件**。历史缺陷:曾对所有 list 字段先生成等值条件 `字段名=值`,再对 text 类型**额外**叠加模糊条件 `字段名[~]=值`,两者在 where 里以 AND 叠加——前端筛选框只传部分关键词时等值条件必不命中,AND 之后整条查询恒为空(下游"文本列筛选查不出数据"的通用根因)。已修复;`keyword`+`keywordtable` 全局关键词搜索逻辑不受影响。回归用例见 `example/app/makecode_tree_test.go` 的「文本字段部分关键词命中模糊匹配」「非文本字段等值筛选行为不变」两个用例,`go test ./app/ -count=1 -run 'TestApi/admin/department/search'`
### 4.5 生成的代码结构
#### 内嵌模式 (mode=0)