diff --git a/app/Calendar.php b/app/Calendar.php index 17c5a75..0af2746 100644 --- a/app/Calendar.php +++ b/app/Calendar.php @@ -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'], ]; diff --git a/app/helpers.php b/app/helpers.php index 1797a2b..2ddf0b0 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -446,6 +446,16 @@ function fb_entry_json(array $ev, string $detail = '', string $edit = '', array if ($when !== '') { $rows[] = ['时间', $when]; } if ((string)($ev['calname'] ?? '') !== '') { $rows[] = ['日历本', (string)$ev['calname']]; } if ((string)($ev['location'] ?? '') !== '') { $rows[] = ['地点', (string)$ev['location']]; } + /* 🔴 #67(用户 2026-11-05):「如果行程里面有地址,也就是有出发地和目的地, + 应该像行程里显示的那样,把它显示在下面,这样一点就可以导航。」 + ⇒ 行程派生条目(kind=trip)额外给两行:出发地 / 目的地。 + @ 用两行而不是一行「A → B」:详情卡是 `dl.kv` 两列表格, + 一行一个地名读起来更清楚,也便于将来给单个地名挂导航链接。 + @ 普通日程没有这两个字段(),下面的 if 自然不产出。 */ + $evFrom = (string)($ev['from_place'] ?? ''); + $evTo = (string)($ev['to_place'] ?? ''); + if ($evFrom !== '') { $rows[] = ['出发地', $evFrom]; } + if ($evTo !== '') { $rows[] = ['目的地', $evTo]; } /* 🔴 v44(用户 2026-10-12 第 3 条):「"状态确定"这个不要了,把"状态确定"换成地点。 当然,如果没有地点,这一行就不要显示了。」 ⇒ **删掉「状态」那一行**(地点上一行已经加了,"换成地点"就是把状态让位给地点)。