补全页:活动改成和类别同款下拉,两列样式一致
活动原本是 input+datalist、类别是 select,同在一行列里长得不一样,看着别扭。 现在两者共用同一套写法:下拉 + 末尾「其它(自己写)…」+ 选中后露出的文本框 (后端 act_<id>==__custom__ 时读 act_<id>__custom,与类别同一套约定)。 CSS 类也合成一个 fill-sel,脚本只需遍历一次。 顺带:删掉不再需要的 datalist;采纳建议、草稿存取都改走 select.fill-sel。 草稿恢复时对下拉派发 change,所以「其它」的文本框也能跟着恢复显示。
This commit is contained in:
@@ -266,3 +266,38 @@ func TestFillupCustomCategoryEmptyIsSkipped(t *testing.T) {
|
||||
t.Fatalf("没填内容时不该写库,实际 %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
// 活动下拉选「其它(自己写)」时,读的是旁边文本框里的名字——与类别同一套写法。
|
||||
func TestFillupCustomActivity(t *testing.T) {
|
||||
f := newMovementFixture(t)
|
||||
placeID, _ := fillupPlace(t, f)
|
||||
key := "act_" + strconv.FormatInt(placeID, 10)
|
||||
|
||||
applyFillup(t, f, url.Values{key: {"__custom__"}, key + "__custom": {"爬山"}})
|
||||
|
||||
var got string
|
||||
if err := f.pg.QueryRowContext(f.ctx, `SELECT a.name FROM visits v JOIN activities a ON a.id=v.activity_id
|
||||
WHERE v.dataset_id=$1 AND v.place_id=$2 LIMIT 1`, f.dsID, placeID).Scan(&got); err != nil {
|
||||
t.Fatalf("读活动失败: %v", err)
|
||||
}
|
||||
if got != "爬山" {
|
||||
t.Fatalf("应写入手工填的活动名,实际 %q", got)
|
||||
}
|
||||
t.Cleanup(func() {
|
||||
f.pg.ExecContext(f.ctx, `DELETE FROM activities WHERE dataset_id=$1 AND name=$2`, f.dsID, "爬山")
|
||||
})
|
||||
}
|
||||
|
||||
// 选了「其它」却没写名字:什么都不做,别建一个空名活动。
|
||||
func TestFillupCustomActivityEmptyIsSkipped(t *testing.T) {
|
||||
f := newMovementFixture(t)
|
||||
placeID, _ := fillupPlace(t, f)
|
||||
key := "act_" + strconv.FormatInt(placeID, 10)
|
||||
before := f.scalar(t, `SELECT count(*) FROM activities WHERE dataset_id=$1`, f.dsID)
|
||||
|
||||
applyFillup(t, f, url.Values{key: {"__custom__"}, key + "__custom": {" "}})
|
||||
|
||||
if n := f.scalar(t, `SELECT count(*) FROM activities WHERE dataset_id=$1`, f.dsID); n != before {
|
||||
t.Fatalf("没填名字不该建类型,活动数 %d → %d", before, n)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user