日程里的行程条目:图标按出行方式、去掉✓、带出出发地/目的地 (#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:
+28
-5
@@ -1636,6 +1636,9 @@ final class Calendar
|
|||||||
$st = Database::get()->prepare(
|
$st = Database::get()->prepare(
|
||||||
"SELECT n.id AS node_id, n.title AS node_title, n.starts_at, n.ends_at,
|
"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.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
|
e.id AS event_id, e.title AS trip_title
|
||||||
FROM trip_nodes n
|
FROM trip_nodes n
|
||||||
JOIN events e ON e.id = n.event_id AND e.kind = 'trip'
|
JOIN events e ON e.id = n.event_id AND e.kind = 'trip'
|
||||||
@@ -1661,11 +1664,19 @@ final class Calendar
|
|||||||
'cal' => (int)$c['id'],
|
'cal' => (int)$c['id'],
|
||||||
'color' => (string)$c['color'],
|
'color' => (string)$c['color'],
|
||||||
'calname' => (string)$c['name'],
|
'calname' => (string)$c['name'],
|
||||||
// 用户要"一眼看出这是计划还是实际":实际行程加个 ✓ 前缀。
|
/* 🔴 #67(用户 2026-11-05,两条):
|
||||||
// 计划行程保持原样(日历里大多数是它,加前缀反而吵)。
|
① 「这个图标应该来自里面具体的交通工具,也就是说,如果是火车,
|
||||||
'title' => Trip::typeIcon((string)$n['node_type'])
|
就应该显示火车。」
|
||||||
. ((string)($n['node_stage'] ?? 'plan') === 'actual' ? ' ✓ ' : ' ')
|
⇒ 原来只按 `node_type` 取,`typeIcon('move')` 恒为 🚗 ——
|
||||||
. (string)$n['node_title'],
|
「赶路」永远显示汽车,哪怕实际坐的是火车。
|
||||||
|
改用 `leadIcon()`(出行方式优先、节点类型兜底),
|
||||||
|
它正是旅行详情页行程卡左侧用的同一个方法。
|
||||||
|
② 「后面这个对号是什么意思?…我感觉没必要,直接把这个对号去掉。」
|
||||||
|
⇒ 删掉原来插在标题里的 `' ✓ '`。 */
|
||||||
|
'title' => Trip::leadIcon((string)$n['node_type'],
|
||||||
|
(string)($n['travel_mode'] ?? ''),
|
||||||
|
$familyId)
|
||||||
|
. ' ' . (string)$n['node_title'],
|
||||||
'date' => $day,
|
'date' => $day,
|
||||||
'time' => $first ? ($tm === '00:00' ? '' : $tm) : '',
|
'time' => $first ? ($tm === '00:00' ? '' : $tm) : '',
|
||||||
// 结束时刻只落在节点跨天的最后一天(与自定义日程同一口径)
|
// 结束时刻只落在节点跨天的最后一天(与自定义日程同一口径)
|
||||||
@@ -1673,6 +1684,18 @@ final class Calendar
|
|||||||
'all_day' => $first && $tm === '00:00',
|
'all_day' => $first && $tm === '00:00',
|
||||||
'kind' => 'trip',
|
'kind' => 'trip',
|
||||||
'ref_id' => (int)$n['node_id'],
|
'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']])
|
'href' => url('trips/show', ['id' => (int)$n['event_id']])
|
||||||
. '#node-' . (int)$n['node_id'],
|
. '#node-' . (int)$n['node_id'],
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -446,6 +446,16 @@ function fb_entry_json(array $ev, string $detail = '', string $edit = '', array
|
|||||||
if ($when !== '') { $rows[] = ['时间', $when]; }
|
if ($when !== '') { $rows[] = ['时间', $when]; }
|
||||||
if ((string)($ev['calname'] ?? '') !== '') { $rows[] = ['日历本', (string)$ev['calname']]; }
|
if ((string)($ev['calname'] ?? '') !== '') { $rows[] = ['日历本', (string)$ev['calname']]; }
|
||||||
if ((string)($ev['location'] ?? '') !== '') { $rows[] = ['地点', (string)$ev['location']]; }
|
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 条):「"状态确定"这个不要了,把"状态确定"换成地点。
|
/* 🔴 v44(用户 2026-10-12 第 3 条):「"状态确定"这个不要了,把"状态确定"换成地点。
|
||||||
当然,如果没有地点,这一行就不要显示了。」
|
当然,如果没有地点,这一行就不要显示了。」
|
||||||
⇒ **删掉「状态」那一行**(地点上一行已经加了,"换成地点"就是把状态让位给地点)。
|
⇒ **删掉「状态」那一行**(地点上一行已经加了,"换成地点"就是把状态让位给地点)。
|
||||||
|
|||||||
Reference in New Issue
Block a user