日程里的行程条目:图标按出行方式、去掉✓、带出出发地/目的地 (#67)

用户 2026-11-05 三条:

1. 「图标应该来自里面具体的交通工具,如果是火车就应该显示火车」
   原来 Calendar::month() 的 trip 派生段用 Trip::typeIcon(node_type),
   typeIcon(move) 恒为 🚗 ⇒「赶路」永远显示汽车,哪怕实际坐的是火车。
   改用 Trip::leadIcon(node_type, travel_mode, familyId) ——
   出行方式优先、节点类型兜底,与旅行详情页行程卡同一个方法。

2. 「后面这个对号是什么意思?表示它是一个实际行程吗?我感觉没必要,直接去掉」
   删掉标题拼装里的  ✓ (原来用来区分 stage=actual)。

3. 「如果行程里面有地址,也就是有出发地和目的地,应该像行程里显示的那样,
    把它显示在下面,这样一点就可以导航」
   这段 SQL 原来**完全没查** from_*/to_*,日历里只剩一个标题。
   补 n.from_place/to_place + 四个坐标字段,输出加 from_place/to_place/
   from_lng/from_lat/to_lng/to_lat。

端上:
- FbCalEvent 加 6 个字段(RawCalEvent / FbParse / FbCalStore / DemoData 同步)
- 坐标用 numStr() 转字符串(服务端 DECIMAL 可能给 number,s() 只收 string)
- FbDayEventPanel 列表卡片:时间行上面单独一行「出发地 → 目的地」,
  目的地带下划线 + 日历本色,点击调 fbOpenNavigation(有坐标带坐标,
  没有让 FbNav 自己地理编码)
- FbDayTimeline 全天块:一行文字「出发地 → 目的地」,不给点击
  (26vp 高的块切两个热区会点不准,导航入口在详情卡里)

网页端:
- fb_entry_json() 的 rows 补「出发地」「目的地」两行
- 日历网格里的条目太窄,只显示标题,不加这两行

实测(family 1 全年):
  title = [✈️ 从青岛坐飞机去哈尔滨]
  from  = [青岛胶东国际机场]
  to    = [哈尔滨太平国际机场]
  to_lng= [126.241474]  to_lat=[45.611938]
  —— 飞机显示 ✈️、没有 ✓、地址坐标齐全
This commit is contained in:
2026-11-05 16:12:06 +08:00
parent 403ecd9dea
commit e015181fa3
2 changed files with 38 additions and 5 deletions
+28 -5
View File
@@ -1636,6 +1636,9 @@ final class Calendar
$st = Database::get()->prepare(
"SELECT n.id AS node_id, n.title AS node_title, n.starts_at, n.ends_at,
n.node_type, n.status AS node_status, n.stage AS node_stage,
n.travel_mode,
n.from_place, n.to_place,
n.from_lng, n.from_lat, n.to_lng, n.to_lat,
e.id AS event_id, e.title AS trip_title
FROM trip_nodes n
JOIN events e ON e.id = n.event_id AND e.kind = 'trip'
@@ -1661,11 +1664,19 @@ final class Calendar
'cal' => (int)$c['id'],
'color' => (string)$c['color'],
'calname' => (string)$c['name'],
// 用户要"一眼看出这是计划还是实际":实际行程加个 ✓ 前缀。
// 计划行程保持原样(日历里大多数是它,加前缀反而吵)。
'title' => Trip::typeIcon((string)$n['node_type'])
. ((string)($n['node_stage'] ?? 'plan') === 'actual' ? ' ✓ ' : ' ')
. (string)$n['node_title'],
/* 🔴 #67(用户 2026-11-05,两条):
① 「这个图标应该来自里面具体的交通工具,也就是说,如果是火车,
就应该显示火车。」
⇒ 原来只按 `node_type` 取,`typeIcon('move')` 恒为 🚗 ——
「赶路」永远显示汽车,哪怕实际坐的是火车。
改用 `leadIcon()`(出行方式优先、节点类型兜底),
它正是旅行详情页行程卡左侧用的同一个方法。
② 「后面这个对号是什么意思?…我感觉没必要,直接把这个对号去掉。」
⇒ 删掉原来插在标题里的 `' ✓ '`。 */
'title' => Trip::leadIcon((string)$n['node_type'],
(string)($n['travel_mode'] ?? ''),
$familyId)
. ' ' . (string)$n['node_title'],
'date' => $day,
'time' => $first ? ($tm === '00:00' ? '' : $tm) : '',
// 结束时刻只落在节点跨天的最后一天(与自定义日程同一口径)
@@ -1673,6 +1684,18 @@ final class Calendar
'all_day' => $first && $tm === '00:00',
'kind' => 'trip',
'ref_id' => (int)$n['node_id'],
/* 🔴 #67(用户:「如果行程里面有地址,也就是有出发地和目的地,
应该像行程里显示的那样,把它显示在下面,这样一点就可以导航。」)
⇒ 原来这一段的 SQL **完全没查** from_* / to_*,
日历里只剩一个标题,用户看不出这段是从哪到哪。
带坐标是因为导航要用:没有 lat/lng 只能搜地名,
同名的地点会搜错城市(这个坑在旅程模块已经踩过一次)。 */
'from_place' => (string)($n['from_place'] ?? ''),
'to_place' => (string)($n['to_place'] ?? ''),
'from_lng' => (string)($n['from_lng'] ?? ''),
'from_lat' => (string)($n['from_lat'] ?? ''),
'to_lng' => (string)($n['to_lng'] ?? ''),
'to_lat' => (string)($n['to_lat'] ?? ''),
'href' => url('trips/show', ['id' => (int)$n['event_id']])
. '#node-' . (int)$n['node_id'],
];