From 55058abf0dfd68008bf1e17daa72eef80b31740a Mon Sep 17 00:00:00 2001 From: zhouyonggao <1971162852@qq.com> Date: Mon, 22 Dec 2025 17:12:03 +0800 Subject: [PATCH] =?UTF-8?q?fix(api):=20=E5=BC=BA=E5=88=B6=E8=A6=81?= =?UTF-8?q?=E6=B1=82=E8=AE=A1=E5=88=92ID=E8=BF=87=E6=BB=A4=E5=B9=B6?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=88=86=E9=94=80=E5=95=86=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在导出接口增加 plan_id_eq 作为必填过滤字段验证 - 修改分销商列表接口,取消按 creator 过滤,返回所有分销商 - 优化分销商查询语句,支持关键字搜索 ID 和名称 - 在前端状态管理中,为计划选择字段添加必填校验规则 --- server/internal/api/exports.go | 5 +++++ server/internal/api/resellers.go | 26 +++----------------------- web/modules/state.js | 3 ++- 3 files changed, 10 insertions(+), 24 deletions(-) diff --git a/server/internal/api/exports.go b/server/internal/api/exports.go index b88a5fe..006a708 100644 --- a/server/internal/api/exports.go +++ b/server/internal/api/exports.go @@ -216,6 +216,11 @@ func (a *ExportsAPI) create(w http.ResponseWriter, r *http.Request) { fail(w, r, http.StatusBadRequest, "缺少时间过滤:必须提供 create_time_between") return } + // 验证 plan_id_eq 为必选字段 + if v, ok := p.Filters["plan_id_eq"]; !ok || v == nil || v == "" || v == 0 { + fail(w, r, http.StatusBadRequest, "plan_id_eq 为必选字段") + return + } } filtered := make([]string, 0, len(fs)) tv := 0 diff --git a/server/internal/api/resellers.go b/server/internal/api/resellers.go index f14f05e..e3cff6b 100644 --- a/server/internal/api/resellers.go +++ b/server/internal/api/resellers.go @@ -24,7 +24,6 @@ func ResellersHandler(resellerDB *sql.DB) http.Handler { } func (a *ResellersAPI) list(w http.ResponseWriter, r *http.Request) { - creatorsParam := r.URL.Query().Get("creator") q := r.URL.Query().Get("q") limitStr := r.URL.Query().Get("limit") limit := 2000 @@ -33,30 +32,11 @@ func (a *ResellersAPI) list(w http.ResponseWriter, r *http.Request) { limit = n } } - creators := []string{} - for _, s := range strings.Split(creatorsParam, ",") { - s = strings.TrimSpace(s) - if s != "" { - creators = append(creators, s) - } - } - if len(creators) == 0 { - ok(w, r, []map[string]interface{}{}) - return - } - ph := strings.Repeat("?,", len(creators)) - ph = strings.TrimSuffix(ph, ",") - sql1 := "SELECT id, COALESCE(name,'') AS name FROM reseller WHERE (creator IN (" + ph + ") OR salesman_id IN (" + ph + "))" + // 不再过滤 creator,返回所有分销商 + sql1 := "SELECT id, COALESCE(name,'') AS name FROM reseller" args := []interface{}{} - for _, c := range creators { - args = append(args, c) - } - // salesman_id IN 需要再传一次参数 - for _, c := range creators { - args = append(args, c) - } if q != "" { - sql1 += " AND (CAST(id AS CHAR) LIKE ? OR name LIKE ?)" + sql1 += " WHERE CAST(id AS CHAR) LIKE ? OR name LIKE ?" like := "%" + q + "%" args = append(args, like, like) } diff --git a/web/modules/state.js b/web/modules/state.js index 3427f30..1752b5a 100644 --- a/web/modules/state.js +++ b/web/modules/state.js @@ -245,7 +245,8 @@ const ValidationRules = { } }, trigger: 'change' - }] + }], + planId: [{ required: true, message: '请选择计划', trigger: 'change' }] }; } };