类型只有5种应动态加载9种、去掉三处提示、端上地址拿到高德详细地址与坐标 #51

Open
opened 2026-11-05 03:13:30 +00:00 by laoyang · 0 comments
Owner

类型只有 5 种(应动态加载 9 种)、去掉三处提示、端上地址拿到高德详细地址与坐标

用户反馈(2026-11-05)

① 类型少了 4 种

「编辑行程那个类型不对,这个类型和网页端不一样啊,网页端比这个多得多呀,
我们这上面的类型怎么这么少呢?」

实测:数据库 node_types 表里 9 种:

🎡 游玩   🍜 用餐   🚗 赶路   🏨 住宿   📌 其他
😴 休息   ⚠️ 突发   🛍️ 购物   🏠 拜访亲友

端上只有 5 种(游玩/用餐/赶路/住宿/其他)。

根因:端上硬编码,照抄了服务端常量 Trip::NODE_TYPES ——
但那个只是兜底默认值,真实数据在 node_types 表里、用户可自行增删(设置 → 节点类型)。

更根本的问题:API 从来没暴露过节点类型(ApiHandler.php 里搜 node_types = 0 次)。
端上除了硬编码没有别的选择。

② 去掉三处提示

「在右上角「设置 → 节点类型」里可以增删自定义。这个提示去掉。
结束时间可不填;填到几点几分,详情页就显示到几点几分。这个提示也去掉。
座位这类同团不同座的信息就不记了。这个提示也去掉。」

修法:node_form.php 里三个 .tip 全删。

③ 端上地址没拿到详细地址

「网页端通过高德地图能拿到详细地址。不知道你这个鸿蒙端有没有拿到详细地址。
同时,鸿蒙端如果添加一个行程,出发地和目的地地址是不是也能通过高德地图API
拿到详细地址?这个需要你解决一下。」

实情:FbGeoTip 本来就带 detail / address / lng / lat(高德返回就有),
但 FbAddrInput.onValue 只把「地名 · 详细地址」拼成一个字符串传出去:

private valueOfTip(t: FbGeoTip): string {
  return nm + ' · ' + dt;    // ← 拼成串
}
this.onValue(v);             // ← 只给一个 string

⇒ 父组件拿到一坨拼好的文字,坐标丢了、详细地址混在同一个字段里,
没法分别写进 from_place / from_addr / from_lng / from_lat。

修法:加结构化回调 onPick(tip),把整条 FbGeoTip 原样交出。
保留 onValue 兼容已有 6 处调用方。

改动清单

# 位置 改动
1 ApiHandler.php 新增 GET /api/v1/trips/<id>/node-types
2 FbTripRepo.ets 新增 fetchNodeTypes() + FbNodeTypeItem
3 FbTripNodeSheet.ets 类型改动态加载(硬编码保留作断网兜底)
4 FbAddrInput.ets 新增 @Event onPick: (t: FbGeoTip) => void
5 FbTripNodeSheet.ets 出发地/到达地接 onPick,存地名+详细地址+坐标
6 FbTripRepo.ets Draft 加 fromLng/fromLat/toLng/toLat,add/update 传坐标
7 Types.ets FbTripNode 加 fromAddr/toAddr/fromLng/fromLat/toLng/toLat
8 node_form.php 删三个 .tip

验收

  • 端上类型显示 9 种(游玩/用餐/赶路/住宿/其他/休息/突发/购物/拜访亲友)
  • 类型点击立即变色(#50 已修 @Builder 刷新问题)
  • 网页端表单三个提示消失
  • 端上选地址后,from_addr 存的是高德详细地址(不是地名)
  • 端上选地址后,from_lng/from_lat 有值
  • 详情页导航链接可用(依赖坐标)

已知限制

FbTripNode 现在有坐标字段,但端上详情页的导航链接还没接上
(需要改详情页的地名渲染,本次未做)。坐标已存进数据库,
网页端可以正常用;端上等下一轮补。


为什么单独建单

#50 修的是@Builder刷新导致类型点了没反应,本单是类型数据源本身错了(硬编码5种 vs 服务端9种)。#48/#49 与本单无关。

# 类型只有 5 种(应动态加载 9 种)、去掉三处提示、端上地址拿到高德详细地址与坐标 ## 用户反馈(2026-11-05) ### ① 类型少了 4 种 > 「编辑行程那个类型不对,这个类型和网页端不一样啊,网页端比这个多得多呀, > 我们这上面的类型怎么这么少呢?」 **实测**:数据库 `node_types` 表里 **9 种**: ``` 🎡 游玩 🍜 用餐 🚗 赶路 🏨 住宿 📌 其他 😴 休息 ⚠️ 突发 🛍️ 购物 🏠 拜访亲友 ``` 端上只有 **5 种**(游玩/用餐/赶路/住宿/其他)。 **根因**:端上硬编码,照抄了服务端常量 `Trip::NODE_TYPES` —— 但那个只是**兜底默认值**,真实数据在 `node_types` 表里、用户可自行增删(设置 → 节点类型)。 **更根本的问题**:API **从来没暴露过节点类型**(`ApiHandler.php` 里搜 `node_types` = 0 次)。 端上除了硬编码没有别的选择。 ### ② 去掉三处提示 > 「在右上角「设置 → 节点类型」里可以增删自定义。这个提示去掉。 > 结束时间可不填;填到几点几分,详情页就显示到几点几分。这个提示也去掉。 > 座位这类同团不同座的信息就不记了。这个提示也去掉。」 **修法**:`node_form.php` 里三个 `.tip` 全删。 ### ③ 端上地址没拿到详细地址 > 「网页端通过高德地图能拿到详细地址。不知道你这个鸿蒙端有没有拿到详细地址。 > 同时,鸿蒙端如果添加一个行程,出发地和目的地地址是不是也能通过高德地图API > 拿到详细地址?这个需要你解决一下。」 **实情**:`FbGeoTip` **本来就带** `detail` / `address` / `lng` / `lat`(高德返回就有), 但 `FbAddrInput.onValue` 只把「地名 · 详细地址」**拼成一个字符串**传出去: ```typescript private valueOfTip(t: FbGeoTip): string { return nm + ' · ' + dt; // ← 拼成串 } this.onValue(v); // ← 只给一个 string ``` ⇒ 父组件拿到一坨拼好的文字,**坐标丢了、详细地址混在同一个字段里**, 没法分别写进 `from_place` / `from_addr` / `from_lng` / `from_lat`。 **修法**:加结构化回调 `onPick(tip)`,把整条 `FbGeoTip` 原样交出。 保留 `onValue` 兼容已有 6 处调用方。 ## 改动清单 | # | 位置 | 改动 | |---|---|---| | 1 | `ApiHandler.php` | 新增 `GET /api/v1/trips/<id>/node-types` | | 2 | `FbTripRepo.ets` | 新增 `fetchNodeTypes()` + `FbNodeTypeItem` | | 3 | `FbTripNodeSheet.ets` | 类型改动态加载(硬编码保留作断网兜底) | | 4 | `FbAddrInput.ets` | 新增 `@Event onPick: (t: FbGeoTip) => void` | | 5 | `FbTripNodeSheet.ets` | 出发地/到达地接 `onPick`,存地名+详细地址+坐标 | | 6 | `FbTripRepo.ets` | Draft 加 `fromLng/fromLat/toLng/toLat`,add/update 传坐标 | | 7 | `Types.ets` | `FbTripNode` 加 `fromAddr/toAddr/fromLng/fromLat/toLng/toLat` | | 8 | `node_form.php` | 删三个 `.tip` | ## 验收 - [ ] 端上类型显示 **9 种**(游玩/用餐/赶路/住宿/其他/休息/突发/购物/拜访亲友) - [ ] 类型点击**立即变色**(#50 已修 @Builder 刷新问题) - [ ] 网页端表单三个提示消失 - [ ] 端上选地址后,`from_addr` 存的是**高德详细地址**(不是地名) - [ ] 端上选地址后,`from_lng`/`from_lat` 有值 - [ ] 详情页导航链接可用(依赖坐标) ## 已知限制 `FbTripNode` 现在有坐标字段,但**端上详情页的导航链接还没接上** (需要改详情页的地名渲染,本次未做)。坐标已存进数据库, 网页端可以正常用;端上等下一轮补。 --- ### 为什么单独建单 #50 修的是@Builder刷新导致类型点了没反应,本单是类型数据源本身错了(硬编码5种 vs 服务端9种)。#48/#49 与本单无关。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: laoyang/FamilyBook#51