补全页恢复手工填写,把「不动」变成真正的默认

上一版改成 select 之后有两个问题:活动和类别都只能从列表里挑,填不进去的写不了;
而且建议被强制预选,用户选「不动」再点「用高德分析」(会整页重载)就白选了,
看起来像被锁死。

现在:活动是可输入的输入框,带已有类型提示,填新名字会新建类型;
类别下拉末尾加「其它(自己写)…」,选中后露出文本框,写什么存什么——
真机自己也存中文类别,写中文一样认得,不必强记 MKPOICategory 那串枚举名。

「不动」改成真正的默认:什么都不预选,想批量采纳就点「采纳本页建议」。
点「用高德分析」前会把本页填过的存进 sessionStorage,回来接着填,不会白改。
This commit is contained in:
tamakyi
2026-09-19 20:13:06 +08:00
parent 6b023fb9fd
commit 5aeded2d51
4 changed files with 126 additions and 33 deletions
+34 -1
View File
@@ -215,7 +215,8 @@ func TestFillupPagination(t *testing.T) {
t.Fatalf("%s 渲染失败: %d", url, rec.Code)
}
body := rec.Body.String()
return strings.Count(body, `name="cat_`), strings.Count(body, `class="pager"`)
// 数类别下拉本身;旁边那个「其它(自己写)」文本框的 name 也以 cat_ 开头,得排掉
return strings.Count(body, `<select name="cat_`), strings.Count(body, `class="pager"`)
}
rows, pagers := countRows("/admin/fillup")
@@ -233,3 +234,35 @@ func TestFillupPagination(t *testing.T) {
t.Error("越界页码应夹到最后一页,不该是空白页")
}
}
// 类别选「其它(自己写)」时,写进去的是旁边文本框里的内容。
func TestFillupCustomCategory(t *testing.T) {
f := newMovementFixture(t)
placeID, _ := fillupPlace(t, f)
key := "cat_" + strconv.FormatInt(placeID, 10)
applyFillup(t, f, url.Values{key: {"__custom__"}, key + "__custom": {"美食街"}})
var got string
if err := f.pg.QueryRowContext(f.ctx, `SELECT COALESCE(poi_category,'') FROM places WHERE id=$1`, placeID).Scan(&got); err != nil {
t.Fatalf("读类别失败: %v", err)
}
if got != "美食街" {
t.Fatalf("应写入手工填的类别,实际 %q", got)
}
}
// 选了「其它」却什么也没写:不写库,别把空串当成类别。
func TestFillupCustomCategoryEmptyIsSkipped(t *testing.T) {
f := newMovementFixture(t)
placeID, _ := fillupPlace(t, f)
key := "cat_" + strconv.FormatInt(placeID, 10)
applyFillup(t, f, url.Values{key: {"__custom__"}, key + "__custom": {" "}})
var got string
if err := f.pg.QueryRowContext(f.ctx, `SELECT COALESCE(poi_category,'') FROM places WHERE id=$1`, placeID).Scan(&got); err != nil {
t.Fatalf("读类别失败: %v", err)
}
if got != "" {
t.Fatalf("没填内容时不该写库,实际 %q", got)
}
}