# 本轮同步说明（H5 定稿版 → 小程序）

> 本文件是**开发记录**，已加入打包忽略清单，不会随小程序上传。
> 上一版 README 的内容（一期范围、字段口径、上线前替换项等）仍然有效，本文件只记录本轮同步做了什么。

## 一、同步的起因

项目走的是「**小程序代码 → H5 效果稿 → 用户逐轮评审定稿 → 同步回小程序**」这条链。
用户手上没有微信开发者工具，评审都在 H5 上做；评审定稿后，本轮把 H5 的成果搬回小程序。

同步前小程序是"改造前"的版本：

| | 改造前（旧小程序） | 定稿版（H5） |
|---|---|---|
| 地图 | 微信原生 `<map>` + 标点 + 聚合 + 图例 | **「区域分布图」**：四区真实轮廓图，无标点、无地图底图 |
| 分区几何 | 四个近似矩形（示意边界） | **西宁四城区真实 GeoJSON**（2466 个顶点） |
| 区色 | 统一红描边 + 淡红填充 | 逐色取自用户效果图（青绿/黄绿/橙/浅绿） |
| 数量显示 | 无 | 区外**数量标注框**（「N个自习室」+ 虚线引线），点区后放大并描点 |
| 数据 | 演示数据 | **统计表真实 30 间** |
| 定位/距离 | 有（"距我 X km"、我的位置、全览四区） | **全部移除** |

## 二、做了哪些改动

1. **`data/xining-geo.js`（新增）** — 四城区真实轮廓，取自 H5 的 `assets/xining4.js`。
   结构统一为「环数组」`rings = [环1, 环2, ...]`（渲染器按此遍历，层级不一致会算出 NaN）。

2. **`data/rooms.js`（重写）** — 由 `tools/sync_data_to_miniprogram.py` 从 H5 的 `data.js` 生成，
   含 30 间真实数据 + 四区配色 + 数量标注框位置。**改数据请改统计表或 H5 侧脚本后重跑同步脚本**，
   这样两个交付物永远同源。

3. **`utils/xmap.js`（新增）** — 「区域分布图」的 Canvas 2D 渲染器。
   小程序端**不能用 ECharts**（不能从 CDN 注入脚本，本机也没有 echarts.min.js 可内联），
   所以按 H5 的同一套投影参数原生复刻。关键参数：
   - 横纵比 `KX = 0.7458` —— 从 H5 实测反解的 ECharts 实际比例（不是 `cos(纬度)`，差约 7%）
   - 总览：四区合并包围盒按 80% 适配、中心落在 `(0.50W, 0.451H)`
   - 单区：按该区包围盒 78% 适配、中心 `(0.50W, 0.50H)`
   - **取景用几何中心（包围盒中心），不能用 `cp`** —— `cp` 是"区名写在哪"的锚点，
     城东区的 `cp` 比几何中心高 26px，按它居中的话放大后会被顶出容器上沿

4. **`pages/index/*`（重写）** — 结构改为与 H5 一致：
   Banner → 区域分布图 → 通知公告 → 搜索/区县/排序 → 自习室一览（默认 2 条 + 加载全部）。
   卡片字段也改成 H5 的六项：开放时间 / 联系人 / 联系电话 / 管理人员 / 地址 / 可容纳。

5. **`app.js` / `app.json`** — 数据源换新；tabBar 文案改为「自习室 / 我的」；
   去掉 `permission` 与 `requiredPrivateInfos`（定位已移除）。

6. **`pages/detail` / `pages/favorites`** — 清掉统计表里**没有**的字段：
   开放性状态、配套设施、社区名、所属党组织、管理员职务、信息更新时间。
   其中详情页的 `buildFac()` 读的是已移除的 `app.globalData.facilities`，
   **不改会直接抛错导致详情页白屏**，本轮一并删除。

7. **素材** — 按小程序单包 2MB 的限制压缩接入：每间 1 张实景图（560px 宽 / q75，共 926KB）、
   地图底图与 Banner 各压到 750px 宽。原 82 张共 6.6MB，直接进包会超限。

## 三、验证情况（**如实说明**）

本机**没有微信开发者工具**，所以**未做真机/模拟器运行验证**。已完成的是：

1. **静态校验**（`tools/../verify_miniprogram.py`）：JSON / JS 语法 / WXML 闭合 / WXSS 括号 /
   class 全覆盖 / 图片存在性 / tabBar 图标 / 数据字段完整性 / 无 emoji —— **全部通过**。
2. **列表逻辑断言**（`node tools/test_index_logic.js`）：筛选、排序、分页、字段完整性、
   电话脱敏等 **22 项断言全部通过**。
3. **渲染器实跑**：`utils/xmap.js` 是纯 Canvas 2D，与微信 canvas 2d API 一致，
   放在**项目外**的 `xnzxs-mp-preview/index.html` 里真跑了一遍 ——
   - 总览四个区的像素包围盒与 H5 实测**最大误差 1px**
   - 四个区放大后**偏差 dx=0 dy=0，全部未出界**
   - 标注框、指北针、描点均正常绘制

**仍需人工确认的一项**：`<canvas type="2d">` 在真机上的 touches 坐标系与取景缩放表现，
建议导入开发者工具后先跑一遍首页点击（点区县 → 放大描点 → 点标点 → 气泡卡）。

## 四、上线前仍需替换

沿用上一版 README 的三项，本轮同步后**没有变化**：

1. 经纬度（统计表坐标是地理编码结果，建议到店门口实采）
2. 联系人 / 电话 / 开放时间 / 地址（以社区填报 + 区委组织部审核后的台账为准）
3. 统计表缺的列（配套设施、联盟示范点、管理员职务、开放状态、所属党组织）
   —— 现在**一律不展示**，台账补齐后按需加回

另：详情页掠影目前每间只有 **1 张**（为控制包体）。要多图可走网络图（域名需加下载白名单）或分包。
