数据编辑页加「活动与类别」卡片:改名 / 删除 / 新增 / 合并
活动的管理能力其实后端早就有(create/update/delete 三个端点),但入口只藏在 「到访记录」卡片里——要先在下拉里选中某个活动,再点按钮弹 prompt,看不见 「哪些活动一条到访都没挂」(实测有 0 条的活动);类别则完全没有集中入口。 现在页首多了一张卡片(唯一默认展开的),两个表格都带用量: - 活动:名称行内改、删除(有引用时二次确认并报条数)、新增, 另有一条「把[A]并到[B]」——改名解决不了「两个名字指同一件事」, 合并会把到访转过去、把 is_home/is_work 抄成目标的,再删源活动、清它的原始行留档。 - 类别:类别没有独立的表,值就长在 places.poi_category 上,所以「改名 / 清空」 都是按值批量作用到地点;改成另一个已有值就是合并,不另做按钮。 新增端点:/admin/edit/category/rename、/admin/edit/category/clear、 /admin/edit/activity/merge。编辑页那条 DISTINCT poi_category 查询顺手改成 GROUP BY 带计数,一份数据两用。 顺带修一处会静默失效的写法:新表原来只写了 tb-stack,漏了配对的 tb, 而 CSS 全是 `.tw > table.tb.tb-stack …` ⇒ 一条堆叠规则都没命中,窄屏下表仍是 640px 底宽。横滑是在 .tw 里滚的、页面不溢出,肉眼很难发现,守卫测试也只查 「有没有 tb-stack」——已补上「有 tb-stack 必须有 tb」并做了变异验证。
This commit is contained in:
+24
-4
@@ -750,10 +750,13 @@ type EditData struct {
|
||||
PlaceOptions []EditOption
|
||||
VisitOptions []EditOption // 最近到访(值=src_pk),供行程/天气表单选关联
|
||||
Categories []EditOption // 已有地点的类别(去重),供新建时下拉直选
|
||||
Places []EditPlace
|
||||
Visits []EditVisit
|
||||
Movements []EditMovement
|
||||
Query string
|
||||
// ActivityRows / CategoryRows 是顶部「活动与类别」卡片用的台账(带用量)
|
||||
ActivityRows []EditActivity
|
||||
CategoryRows []EditCategory
|
||||
Places []EditPlace
|
||||
Visits []EditVisit
|
||||
Movements []EditMovement
|
||||
Query string
|
||||
// VisitQuery 是到访记录列表的搜索词(与地点列表的 Query 独立)
|
||||
VisitQuery string
|
||||
// MovementFilter 是行程列表的筛选条件,都是选择框而不是让人手输关键词
|
||||
@@ -894,6 +897,23 @@ type EditOption struct {
|
||||
Label string
|
||||
}
|
||||
|
||||
// EditActivity 是「活动与类别」卡片里的一行活动:带用量,好一眼看出哪些没人用。
|
||||
type EditActivity struct {
|
||||
ID int64
|
||||
Name string
|
||||
Visits int
|
||||
IsHome bool
|
||||
IsWork bool
|
||||
}
|
||||
|
||||
// EditCategory 是类别台账的一行。类别没有表,值就是 places.poi_category,
|
||||
// 所以「改名 / 清空」都是按值批量作用到地点上——改成另一个已有值就是合并。
|
||||
type EditCategory struct {
|
||||
Value string
|
||||
Label string
|
||||
Places int
|
||||
}
|
||||
|
||||
type EditPlace struct {
|
||||
ID int64
|
||||
SrcPK int
|
||||
|
||||
Reference in New Issue
Block a user