zyniaoren
469b2ee072
feat: 后台商品列表新增上架状态筛选
管理页商品列表原本只能按搜索、库存状态、分类、批发价过滤,缺少上下架状态
维度,无法快速定位未上架商品。
功能:
- 新增 is_active 三态查询参数(缺省/all 不限、1 仅已上架、0 仅已下架),按既有
筛选分层落位:contract 增加 ListFilter.IsActive,store 拼接 is_active 条件,
application 透传,transport 解析入参。
- IsActive 与公开侧的 OnlyActive 语义不同,后者是强制上架开关;两者同时存在时
不叠加 IsActive,避免组合出必然为空的查询。
- 原 parseWholesaleFilter 重命名为 parseTriStateBoolFilter,由 wholesale 与
is_active 共用,避免复制一份真/假值解析逻辑。
- 管理页筛选栏新增「上架状态」下拉,与其余四个条件按 AND 组合,重置按钮一并
复位;三语文案补齐。上架状态筛选生效时,行内切换上下架后重新拉取列表,
避免该行与筛选结果不符。
影响范围:仅后台商品列表的读取链路,未改动公开商品接口与商品写入逻辑。
测试:
- 仓储层 3 个用例:三态筛选、与 search/stock_status/wholesale 的 AND 组合、
OnlyActive 优先级;集成层 1 个用例覆盖 HTTP 到持久化的完整链路。
- 补充 PostgreSQL 覆盖,验证 IsActive 与本地化搜索(ILIKE + jsonb ->>)、
批发价(jsonb_array_length)按 AND 组合的行为与 SQLite 一致。
- 顺带修复该文件的 PostgreSQL 测试夹具:setupPostgresIntegrationDB 未迁移
product_skus,而商品搜索条件含有对 product_skus 的 EXISTS 子查询,导致既有的
TestPostgresLocalizedJSONSearchRepositories 与 TestPostgresDashboardQueries
在真实 PostgreSQL 上一律报 relation "product_skus" does not exist。已在 main
上复现同样的失败,确认属既有问题,与本次功能改动无关。
验证:SQLite 下 go test ./... 187 个包全部通过;在隔离的 PostgreSQL 17.9 实例上
go test -tags integration ./... -count=1 -p 1 共 188 个包全部通过,其中 7 个
PostgreSQL 用例实际执行;gofmt 与 go vet 无告警;admin 端 vue-tsc 构建与 28 项
单测通过。
2026-09-12 13:43:23 +08:00
..
2026-07-26 12:53:39 +08:00
2026-09-12 13:43:23 +08:00