记忆:后台显示区编辑器(地图点选)+ HasMap 陷阱 + 记忆索引压缩到 8919

This commit is contained in:
tamakyi
2026-10-12 17:35:55 +08:00
parent 7ab33227a5
commit 829a318400
3 changed files with 80 additions and 4 deletions
+32 -3
View File
@@ -1204,7 +1204,36 @@ HTML,一行里必然带 `</script>`,一拒就把正常用法挡死了(我
并集也亮(无洞)**,整体集合差异 0.013%;迷雾掩码 86,776 px 按并集解析式判**圆外 0 个**,
两个圆内分别 52,609 / 46,757 px ⇒ 第二个圆真的被认了。
### 待办
### 后台编辑器:地图点选(2026-10-12 当天补完)
后台的**地图点选编辑器**(专题表单内嵌地图、多圆增删拖拽)还没做 —— 这是用户诉求的
第二半,专题表单目前仍是三个手填输入框(走兼容桥:合成一个圆写进 areas)。
三个手填输入框(中心纬度/经度/半径)换成**地图 + 圆列表**(`static/js/topic-areas.js`:
点地图加圆、拖圆心移动、拖圆边改半径、列表里可改半径/定位/删除/清空)。改动立刻写进
隐藏字段 `areas`(JSON) 与 `crs`,随专题表单一起提交。复用 `/admin/fog-mask` 那套约定
(`/api/map-config` 取底图、底图坐标系随表单带上、后端换算 GCJ-02)。
地图初始视野取生效数据集的地点包围盒(`placesBounds`),一上来就落在自己的地界上。
⚠️ **三条容易再踩的**:
- 🔴 **`/admin/topics` 必须 `p.HasMap = true`**(`topicsAdminPage`)。漏了的表现极隐蔽:
脚本加载了、`rondTopicAreas` 也在,就是 `window.L` 永远 undefined,`init` 静默返回、
**控制台不报错**、页面看着像「什么都没发生」。守卫 `TestTopicsAdminPageLoadsLeaflet`
(按函数体截取后断言含 `HasMap = true`)。
- 🔴 **`areas` 的初值要渲染进隐藏字段**(`value="{{.Form.AreasJSON}}"`),JS 也从隐藏字段
读初值而不是另传一份:脚本没加载上时提交的仍是服务端渲染的原值,否则**一次保存就把
已有显示区静默清空**。守卫 `TestTopicAdminUsesMapEditorNotCoordInputs` 钉住初值来源、
挂点 id 齐全、以及「三个旧输入框必须没了」(留着就是第二套只写第 1 个圆的入口)。
- **上限两边各写一份**(JS `MAX_AREAS/MIN_KM/MAX_KM` vs Go `maxTopicAreas` 等),
守卫 `TestTopicAreaLimitsMatchBetweenGoAndJS` 直接比对数字;前端还据此**禁用提交**。
不一致的表现是「前端放行、后端拒绝,用户看到红字却不知道改哪里」。
小坑:半径输入框得套一层**定宽容器**(`.area-km-box`)——站点全局 input 规则是
`width:100%` 且带 10 个 `:not()`(特异性 (0,11,1)),直接给 input 写宽度压不过。
`topic-areas.js` 只把**纯函数**暴露给 node 单测,另加最小测试钩子 `api._map`
供无头验证(同 `window.rondMap._state` 惯例)—— 不留把手就只能真拿鼠标点地图。
### gofmt / 行尾(同一天的附带结论)
`gofmt -l` 报「整文件重写」有两层原因:① Go 1.19 起 gofmt 会重排**文档注释**里的缩进列表
(`// ① …` 要改成 tab 缩进块);② 工作区 CRLF 而 `.gitattributes` 声明 `eol=lf`。
`gofmt -w` 归一后 `git diff` **没有额外噪声** ⇒ **blob 本来就是 LF,CRLF 只是检出产物**,
而不是仓库内容问题(之前担心的「模板 CRLF 冲突」可以放下了)。