用户 10 条原话要点与落地:
- ①「统计出来的不是目的地,也不是车站,而是城市…城市要聚合,有多段行程,
都有青岛作为出发地或者目的地,那么就只记一次」
→ trip_nodes 补 from_city/to_city(Schema v22),Trip::cities() 改成
「出发地 ∪ 到达地」去重、按最早时间 + 出发地优先排。
详情页信息区显示的就是这个聚合结果(第 4 条:「图片右侧显示的是聚合的城市,
而不是终点地址」)。
- ②「类型不够丰富,你看看 triplog 里面都有哪些,都拿过来」
→ NodeType::TRIPLOG_TYPES(休息/突发/购物/拜访亲友),在 all() 里读时自愈补齐。
- ③「出行方式,只有选择自驾,才让选车辆;车辆下拉框不需要出现什么财务里登记的车,
只把车辆列出来就行了」→ DRIVE_MODES 收窄成 ['drive'];
Vehicle::pickable() 只回车辆库;车辆页删掉「财务里已登记的车」那块。
- ③「飞机、铁路,只记录车次、航班号就可以…座位什么的不记录了」
→ seat_info / gate 从表单与列表**彻底移除**(列保留,老数据不丢;
saveNode 的 UPDATE 也不再写这两列,否则会抹掉迁来的数据)。
- ③「出发地和到达地,都用高德地图的接口,记录详细地址」+「参与人弹框选择」
+「给参与人标注角色这个功能去掉」
→ 新增 templates/trips/_loc_field.php(高德联想 + 详细地址 + 坐标 + 城市 +
导航链接,没配 key 也能手输);参与人改用全局弹框选人组件;
角色输入框删除,saveNodeMembers 改成差集增删(否则老 role_tag 被静默抹掉)。
- ④「triplog 中的行程花销数据,没有同步过来,需要迁移过来」
→ 新增 _tooling/_fb_b17_backfill.php:迁地址(20 条)、花销(4 笔 ¥8584)、
车辆(3 台)。线上已执行并核对(笔数与金额一分不差)。
- ④「行程中,时间明明具体到了时分秒,怎么不显示?」
→ Trip::nodeSpan():行程时间精确到时分(同一天只写一次日期、跨天写月日、
两头都没时分就不写 00:00)。
其他:
- App\Geo 扩展 cityFromPoint / cityFromText / navUrl / jsConfig。
中文地址提城市修掉四种错法(白名单→黑名单、取最后→取第一个、直辖市最先认、
离线表只能兜底),并加了「五大连池 ≠ 大连」的位置守卫。
- config.example.php 加 amap 段(key / security_js / nav_src)。
验证:
- e2e 920/0(+29 条本批断言)· 升级 149/0(+15 条 v22 断言)·
城市解析 32/32(新套件,样例全是 TripLog 线上真实地址)·
桌面几何 428/0 · 移动端 688/0 · 交互 92/0 · 窄屏溢出 24/0。
- 反向验证 5/5:城市退回读 place / 只算到达地 / 时间退回只到日期 /
打车也要车 / 类型不补 —— 五种坏法全部被断言抓住。
- 部署:服务器自检 19/19;线上 schema v22;补迁后花销 4 笔 ¥8584 与源库对齐。
62 lines
2.7 KiB
PHP
62 lines
2.7 KiB
PHP
<?php
|
||
/**
|
||
* FamilyBook · 家书 —— 本地配置模板
|
||
*
|
||
* 使用:复制为 config.php,按注释填写。
|
||
* config.php 已在 .gitignore 中忽略,不会进 Git —— 换机器、换库都靠它。
|
||
*
|
||
* ⚠️ 仓库是公开的:这里不许出现真实域名、真实口令、真实密钥。
|
||
*/
|
||
|
||
declare(strict_types=1);
|
||
|
||
return [
|
||
|
||
// ---------------- 站点 ----------------
|
||
'site_name' => '家书',
|
||
// 站点对外根地址,末尾不要带斜杠。示例值,请替换成你自己的
|
||
'base_url' => 'https://example.com',
|
||
|
||
// ---------------- 数据库(MySQL)----------------
|
||
'db' => [
|
||
'host' => '127.0.0.1',
|
||
'port' => 3306,
|
||
'name' => 'familybook',
|
||
'user' => 'familybook',
|
||
'pass' => '',
|
||
'charset' => 'utf8mb4',
|
||
],
|
||
|
||
// ---------------- 敏感字段加密密钥 ----------------
|
||
// 用于身份证号、手机号的对称加密(openssl AES-256-CBC)。
|
||
// ⚠️ 开始记录数据之后这个值就不能再改:换掉它,已有数据就解不开了。
|
||
// ⚠️ 请单独备份它。密钥丢失 = 数据永久丢失,比数据库丢了还严重。
|
||
// 生成方式:openssl rand -hex 16
|
||
'app_key' => '请填写32位随机十六进制串',
|
||
|
||
// ---------------- 高德地图(旅程的地址联想 / 逆地理 / 导航)----------------
|
||
// 用户 2026-10-05 第 17 批 第 3 条:「出发地和到达地,都用高德地图的接口,
|
||
// 记录详细地址」。
|
||
//
|
||
// ⚠️ 这里要用到**两把不同的 key**(在高德开放平台控制台分别申请):
|
||
// · `key` —— 既是 **Web 服务** key(服务端逆地理 regeo),
|
||
// 也是 **JS API** key(前端地址输入联想)。
|
||
// 若两者分开申请,把 Web 服务的填这里,
|
||
// JS API 那把填在 `js_key`(见下);
|
||
// · `security_js` —— JS API 的**安全密钥**(2021-12-02 之后申请的 key 都要配)。
|
||
//
|
||
// 不填也不影响使用:地址联想不加载、城市聚合自动回落到**离线解析**
|
||
// (从地址文本里提「XX市」),功能都还在,只是联想与逆地理的准确度差一些。
|
||
'amap' => [
|
||
'key' => '',
|
||
'security_js' => '',
|
||
// 高德 URI API 的 `src`(调用来源,只用于统计,任意英数字串都行)
|
||
'nav_src' => '',
|
||
],
|
||
|
||
// ---------------- 调试 ----------------
|
||
// true 时引导页会打印数据库连接错误的详情。
|
||
// ⚠️ 线上务必保持 false —— 错误详情里可能带数据库账号名。
|
||
'debug' => false,
|
||
];
|