# docs/14_TEMPLATE_RENDER_INVESTIGATION.md 评估报告

> 评估时间：2026-04-20 | 评估人：council/Architect

---

## 准确性评分：7/10

- **问题1（中等）**：Section 2.1 Goods.php 代码示例中 `$assign` 变量未定义。实际代码（Section 2.2）中数据通过 `MyViewAssign()` 注入，而非 `fetch($tplFile, $assign)` 的第二个参数传参。示例代码与说明不一致，容易让读者误以为 `$assign` 需要额外构建。

- **问题2（中等）**：Section 2.2 数据流第4步描述"从 ShopXO 原生表 `goods_spec_value` + `goods_spec_base` 联查"，但没有说明联查的 JOIN 条件（`spec_base_id` / `goods_id`）。缺少关键连接字段会让接手者无法独立还原查询逻辑。

- **问题3（低）**：Section 4 模板渲染现状表格中，`{include file="public/head"}` 和 `{$vr_seat_template.seat_map|raw}` 均标注"⚠️ 待验证"，但 Section 2.1 标题已写"✅ 已验证（已提交）"。状态标记存在矛盾。

- **问题4（低）**：Section 3.1 描述 ThinkTemplate `parseTemplateFile()` 时，写的是 `$template = $this->config['view_path'] . $template . '.' . $view_suffix`，这是 ThinkPHP 5 的标准行为，但文档没有说明这正是导致票务模板无法渲染的根因（ThinkTemplate 拼接了错误的 view_path 前缀）。

---

## 完整性评分：6/10

- **缺失项1（高）**：`vr_seat_templates.spec_base_id_map` JSON 的结构完全没有说明。这个字段是前端渲染座位图的核心数据源，缺少字段说明会导致接手者无法理解座位 ID 如何映射到 spec_base_id。

- **缺失项2（高）**：`plugins_service_goods_spec_data` 钩子未实现（P1 问题），文档中仅一句话带过，但没有说明这个钩子当前对票务功能的影响范围（是否会导致某些规格无法显示）。

- **缺失项3（中等）**：`loadSoldSeats()` 函数为空（TODO），但没有说明这个函数应该由谁实现、前端座位图对已售座位的灰化处理依赖此函数。

- **缺失项4（中等）**：Section 2.2 第5步返回三个 key，但 Goods.php 中实际注入的是 `vr_seat_template` 和 `goods_spec_data`（与模板变量名对应）。文档没有说明为什么返回结构与模板使用结构有差异，以及这些变量在模板中具体如何使用。

---

## 可操作性评分：8/10

- **优点**：三个方向（A/B/C）描述清晰，每种方案都有具体操作步骤，失败切换路径明确。

- **建议1（低）**：Section 5 容器实测命令缺少 `docker ps` 前置确认，建议加入 `--first-flow` 步骤，避免读者在容器未启动时执行 curl 导致误导（误以为方案失败）。

- **建议2（低）**：`sxo_order_detail.spec` JSON 解码逻辑（Section 2.3）只是描述性文字，没有给出 PHP 示例代码。后续接手者需要参考 `TicketService.php` 源码才能理解实际解析方式，建议在此补充一行示例。

---

## 一致性评分：8/10

- **冲突项（低）**：Section 6 "关联提交"中声称"代码已提交"，但 Section 4 的状态表格明确列出 `{include}` 和 `{$vr_seat_template.seat_map|raw}` 均未验证。已提交 ≠ 已验证成功，这种混淆会导致读者认为功能已完成。

- **一致项**：
  - 表名 `sxo_order_detail` 与 PHASE2_PLAN.md 一致
  - commit 7bd896764 在各文档中引用一致
  - `goods.vr_goods_config` JSON 字段描述一致

---

## 误导风险评估

- **高风险项**：
  - "Section 2.1 改动状态：✅ 已提交（7bd896764）"与"Section 4 `{include}` 标签：⚠️ 待验证"并存在同一文档中，读者容易误认为 `{include}` 问题已解决，而实际上问题未经验证。
  - Section 3.1 的 ThinkTemplate 根因分析没有明确指出"错误的 view_path 拼接"是渲染失败的根本原因，读者可能无法理解为什么Goods.php 绝对路径方案能work。

- **低风险项**：
  - 修正说明表格（Section 0）设计良好，清晰告知读者哪些内容已被修正，降低了误信旧信息的风险。

---

## 总体评价

这份文档在修正版中大幅改善了表名和数据流描述（相比原版），修正说明表格设计合理，体现了良好的文档维护意识。主要风险在于"已提交"与"已验证"的混淆——`{include}` 标签解析在容器内**从未被实测验证过**，但文档的语气暗示问题已解决。此外 `spec_base_id_map` JSON 结构完全缺失，使得文档只能指导"怎么改的"而无法回答"为什么这样改"。建议在完成容器实测后更新 Section 4 的状态标记，并在 Section 2.2 补充 spec_base_id_map 结构说明。
