# 插件管理

<cite>
**本文引用的文件**
- [public/themes/admin_default/admin/plugin/index.html](file://public/themes/admin_default/admin/plugin/index.html)
- [public/themes/admin_default/admin/plugin/setting.html](file://public/themes/admin_default/admin/plugin/setting.html)
- [public/themes/admin_default/admin/plugin/hooks.html](file://public/themes/admin_default/admin/plugin/hooks.html)
- [public/plugins/swagger/SwaggerPlugin.php](file://public/plugins/swagger/SwaggerPlugin.php)
- [public/plugins/system_info/SystemInfoPlugin.php](file://public/plugins/system_info/SystemInfoPlugin.php)
- [public/plugins/tianditu/TiandituPlugin.php](file://public/plugins/tianditu/TiandituPlugin.php)
- [public/plugins/tianditu/config.php](file://public/plugins/tianditu/config.php)
- [public/plugins/swagger/view/widget.html](file://public/plugins/swagger/view/widget.html)
- [public/plugins/system_info/view/widget.html](file://public/plugins/system_info/view/widget.html)
- [vendor/thinkcmf/cmf/src/lib/Plugin.php](file://vendor/thinkcmf/cmf/src/lib/Plugin.php)
- [vendor/thinkcmf/cmf-app/src/admin/controller/pluginController.php](file://vendor/thinkcmf/cmf-app/src/admin/controller/pluginController.php)
- [vendor/thinkcmf/cmf-app/src/admin/logic/PluginLogic.php](file://vendor/thinkcmf/cmf-app/src/admin/logic/PluginLogic.php)
- [vendor/thinkcmf/cmf-app/src/admin/service/PluginService.php](file://vendor/thinkcmf/cmf-app/src/admin/service/PluginService.php)
- [vendor/thinkcmf/cmf-app/src/admin/model/PluginModel.php](file://vendor/thinkcmf/cmf-app/src/admin/model/PluginModel.php)
- [vendor/thinkcmf/cmf-app/src/admin/model/HookPluginModel.php](file://vendor/thinkcmf/cmf-app/src/admin/model/HookPluginModel.php)
- [vendor/thinkcmf/cmf/src/controller/PluginAdminBaseController.php](file://vendor/thinkcmf/cmf/src/controller/PluginAdminBaseController.php)
- [vendor/thinkcmf/cmf-api/src/admin/swagger/request/AdminPluginConfigPutRequest.php](file://vendor/thinkcmf/cmf-api/src/admin/swagger/request/AdminPluginConfigPutRequest.php)
</cite>

## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能与可用性考量](#性能与可用性考量)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
10. [附录](#附录)

## 简介
本文件面向 ThinkCMF 后台管理员，系统化讲解“插件管理”功能的使用与运维要点，覆盖插件列表展示、状态管理（启用/禁用/卸载）、配置编辑（全局与局部）、安装与更新流程、权限与安全注意事项，以及常见问题排查。文中所有操作步骤均基于后台模板与插件实现的交互流程，配合图示帮助快速上手。

## 项目结构
插件管理涉及三类关键资源：
- 后台模板：用于展示插件列表、配置页与钩子执行顺序设置
- 插件实现：各插件的元数据、生命周期方法与视图输出
- 后端服务：控制器、逻辑层、模型与服务层负责状态变更、配置持久化与钩子排序

```mermaid
graph TB
subgraph "后台模板"
T1["插件列表页<br/>index.html"]
T2["插件配置页<br/>setting.html"]
T3["钩子执行顺序页<br/>hooks.html"]
end
subgraph "插件实现"
P1["Swagger 插件<br/>SwaggerPlugin.php"]
P2["系统信息插件<br/>SystemInfoPlugin.php"]
P3["天地图插件<br/>TiandituPlugin.php"]
C1["天地图配置定义<br/>config.php"]
end
subgraph "后端服务"
S1["插件控制器<br/>pluginController.php"]
S2["插件逻辑层<br/>PluginLogic.php"]
S3["插件服务层<br/>PluginService.php"]
M1["插件模型<br/>PluginModel.php"]
M2["钩子-插件模型<br/>HookPluginModel.php"]
end
T1 --> S1
T2 --> S1
T3 --> S1
S1 --> S2 --> S3 --> M1
S1 --> M2
S3 --> P1
S3 --> P2
S3 --> P3
P3 --> C1
```

图表来源
- [public/themes/admin_default/admin/plugin/index.html:1-207](file://public/themes/admin_default/admin/plugin/index.html#L1-L207)
- [public/themes/admin_default/admin/plugin/setting.html:1-68](file://public/themes/admin_default/admin/plugin/setting.html#L1-L68)
- [public/themes/admin_default/admin/plugin/hooks.html:1-44](file://public/themes/admin_default/admin/plugin/hooks.html#L1-L44)
- [public/plugins/swagger/SwaggerPlugin.php:1-106](file://public/plugins/swagger/SwaggerPlugin.php#L1-L106)
- [public/plugins/system_info/SystemInfoPlugin.php:1-85](file://public/plugins/system_info/SystemInfoPlugin.php#L1-L85)
- [public/plugins/tianditu/TiandituPlugin.php:1-46](file://public/plugins/tianditu/TiandituPlugin.php#L1-L46)
- [public/plugins/tianditu/config.php:1-17](file://public/plugins/tianditu/config.php#L1-L17)
- [vendor/thinkcmf/cmf-app/src/admin/controller/pluginController.php](file://vendor/thinkcmf/cmf-app/src/admin/controller/pluginController.php)
- [vendor/thinkcmf/cmf-app/src/admin/logic/PluginLogic.php](file://vendor/thinkcmf/cmf-app/src/admin/logic/PluginLogic.php)
- [vendor/thinkcmf/cmf-app/src/admin/service/PluginService.php](file://vendor/thinkcmf/cmf-app/src/admin/service/PluginService.php)
- [vendor/thinkcmf/cmf-app/src/admin/model/PluginModel.php](file://vendor/thinkcmf/cmf-app/src/admin/model/PluginModel.php)
- [vendor/thinkcmf/cmf-app/src/admin/model/HookPluginModel.php](file://vendor/thinkcmf/cmf-app/src/admin/model/HookPluginModel.php)

章节来源
- [public/themes/admin_default/admin/plugin/index.html:1-207](file://public/themes/admin_default/admin/plugin/index.html#L1-L207)
- [public/themes/admin_default/admin/plugin/setting.html:1-68](file://public/themes/admin_default/admin/plugin/setting.html#L1-L68)
- [public/themes/admin_default/admin/plugin/hooks.html:1-44](file://public/themes/admin_default/admin/plugin/hooks.html#L1-L44)

## 核心组件
- 插件列表页：展示插件名称、标识、描述、作者、版本、状态与操作按钮（安装/管理/设置/更新/启用/禁用/卸载）
- 插件配置页：渲染插件配置表单，支持保存配置；部分插件可自定义配置视图
- 钩子执行顺序页：展示钩子类型与是否允许多插件执行，支持设置某钩子下插件的执行顺序
- 插件实现：插件类定义元数据、生命周期方法（安装/卸载），部分插件提供后台视图或对话框
- 后端服务：控制器处理请求，逻辑层组织业务，服务层协调模型与插件实例，模型负责数据持久化

章节来源
- [public/themes/admin_default/admin/plugin/index.html:32-164](file://public/themes/admin_default/admin/plugin/index.html#L32-L164)
- [public/themes/admin_default/admin/plugin/setting.html:7-23](file://public/themes/admin_default/admin/plugin/setting.html#L7-L23)
- [public/themes/admin_default/admin/plugin/hooks.html:13-40](file://public/themes/admin_default/admin/plugin/hooks.html#L13-L40)
- [public/plugins/swagger/SwaggerPlugin.php:17-42](file://public/plugins/swagger/SwaggerPlugin.php#L17-L42)
- [public/plugins/system_info/SystemInfoPlugin.php:14-37](file://public/plugins/system_info/SystemInfoPlugin.php#L14-L37)
- [public/plugins/tianditu/TiandituPlugin.php:13-36](file://public/plugins/tianditu/TiandituPlugin.php#L13-L36)

## 架构总览
后台通过模板触发 Ajax 或弹窗操作，控制器接收请求，调用逻辑与服务层，服务层驱动插件实例与模型完成状态变更、配置写入与钩子排序调整。

```mermaid
sequenceDiagram
participant Admin as "管理员"
participant UI as "插件列表页(index.html)"
participant Ctrl as "插件控制器"
participant Logic as "插件逻辑层"
participant Service as "插件服务层"
participant Model as "插件/钩子模型"
participant Plugin as "插件实例"
Admin->>UI : 打开“插件管理”
UI->>Ctrl : 发起操作请求启用/禁用/卸载/更新/设置/钩子
Ctrl->>Logic : 参数校验与路由
Logic->>Service : 调用服务方法
Service->>Model : 读取/写入数据库
Service->>Plugin : 调用 install/uninstall/adminApiImportView 等
Plugin-->>Service : 返回视图或结果
Service-->>Ctrl : 返回处理结果
Ctrl-->>UI : 渲染结果提示/刷新
```

图表来源
- [public/themes/admin_default/admin/plugin/index.html:72-158](file://public/themes/admin_default/admin/plugin/index.html#L72-L158)
- [public/themes/admin_default/admin/plugin/setting.html:7-23](file://public/themes/admin_default/admin/plugin/setting.html#L7-L23)
- [public/themes/admin_default/admin/plugin/hooks.html:31-35](file://public/themes/admin_default/admin/plugin/hooks.html#L31-L35)
- [vendor/thinkcmf/cmf-app/src/admin/controller/pluginController.php](file://vendor/thinkcmf/cmf-app/src/admin/controller/pluginController.php)
- [vendor/thinkcmf/cmf-app/src/admin/logic/PluginLogic.php](file://vendor/thinkcmf/cmf-app/src/admin/logic/PluginLogic.php)
- [vendor/thinkcmf/cmf-app/src/admin/service/PluginService.php](file://vendor/thinkcmf/cmf-app/src/admin/service/PluginService.php)
- [vendor/thinkcmf/cmf-app/src/admin/model/PluginModel.php](file://vendor/thinkcmf/cmf-app/src/admin/model/PluginModel.php)
- [vendor/thinkcmf/cmf-app/src/admin/model/HookPluginModel.php](file://vendor/thinkcmf/cmf-app/src/admin/model/HookPluginModel.php)
- [public/plugins/swagger/SwaggerPlugin.php:44-103](file://public/plugins/swagger/SwaggerPlugin.php#L44-L103)

## 详细组件分析

### 插件列表页（index.html）
- 功能概览
  - 展示插件基本信息与状态
  - 提供安装、启用、禁用、卸载、更新、设置、管理入口
  - 支持弹窗打开插件配置与钩子执行顺序设置
- 关键交互
  - 安装/更新/启用/禁用/卸载：通过 Ajax 按钮提交到后台接口
  - 管理：当插件声明有后台界面且已启用时，点击打开插件管理窗口
  - 设置：根据插件是否提供自定义配置视图，选择跳转到统一配置页或插件自带设置页
  - 钩子：打开钩子执行顺序设置页，进一步设置某钩子下插件的执行顺序
- 注意事项
  - 禁用/卸载前建议备份配置
  - 更新插件可能影响钩子行为，更新后建议检查钩子执行顺序

```mermaid
flowchart TD
Start(["进入插件列表"]) --> ShowList["展示插件列表与状态"]
ShowList --> Action{"选择操作"}
Action --> |安装| Install["Ajax 安装"]
Action --> |启用| Enable["Ajax 启用"]
Action --> |禁用| Disable["Ajax 禁用"]
Action --> |卸载| Uninstall["Ajax 卸载"]
Action --> |更新| Update["Ajax 更新"]
Action --> |设置| OpenSetting["打开设置页"]
Action --> |管理| OpenManage["打开插件管理窗口"]
Action --> |钩子| OpenHooks["打开钩子执行顺序页"]
Install --> Refresh["刷新页面"]
Enable --> Refresh
Disable --> Refresh
Uninstall --> Refresh
Update --> Refresh
OpenSetting --> Save["保存配置"]
OpenManage --> Done(["完成"])
OpenHooks --> Done
Save --> Done
Refresh --> Done
```

图表来源
- [public/themes/admin_default/admin/plugin/index.html:72-158](file://public/themes/admin_default/admin/plugin/index.html#L72-L158)
- [public/themes/admin_default/admin/plugin/index.html:170-204](file://public/themes/admin_default/admin/plugin/index.html#L170-L204)

章节来源
- [public/themes/admin_default/admin/plugin/index.html:32-164](file://public/themes/admin_default/admin/plugin/index.html#L32-L164)

### 插件配置页（setting.html）
- 功能概览
  - 统一渲染插件配置表单，支持保存
  - 若插件提供自定义配置视图，则优先使用插件自带视图
- 使用步骤
  - 在“插件列表”中点击“设置”，打开配置页
  - 根据表单类型填写参数（如文本、颜色、地图坐标等）
  - 点击“保存”，提交到后台接口持久化
- 典型表单元素
  - 文本输入、颜色选择器、地图坐标选择器等（由模板脚本初始化）

```mermaid
sequenceDiagram
participant Admin as "管理员"
participant List as "插件列表页"
participant Setting as "插件配置页(setting.html)"
participant Ctrl as "插件控制器"
participant Service as "插件服务层"
Admin->>List : 点击“设置”
List-->>Setting : 打开配置页
Admin->>Setting : 填写配置并点击“保存”
Setting->>Ctrl : 提交 PUT 请求
Ctrl->>Service : 写入配置
Service-->>Ctrl : 返回结果
Ctrl-->>Setting : 刷新提示
```

图表来源
- [public/themes/admin_default/admin/plugin/setting.html:7-23](file://public/themes/admin_default/admin/plugin/setting.html#L7-L23)
- [public/themes/admin_default/admin/plugin/setting.html:28-66](file://public/themes/admin_default/admin/plugin/setting.html#L28-L66)

章节来源
- [public/themes/admin_default/admin/plugin/setting.html:1-68](file://public/themes/admin_default/admin/plugin/setting.html#L1-L68)

### 钩子执行顺序页（hooks.html）
- 功能概览
  - 展示系统钩子、应用钩子、主题钩子、后台主题钩子
  - 显示钩子类型与是否仅执行一次或多插件执行
  - 可对某个钩子下的插件执行顺序进行设置
- 使用步骤
  - 在“插件列表”中点击“执行顺序”，打开钩子页
  - 对目标钩子点击“设置执行顺序”，在弹窗中调整插件顺序
  - 保存后生效

```mermaid
sequenceDiagram
participant Admin as "管理员"
participant List as "插件列表页"
participant Hooks as "钩子执行顺序页(hooks.html)"
participant Ctrl as "插件控制器"
participant Service as "插件服务层"
Admin->>List : 点击“执行顺序”
List-->>Hooks : 打开钩子页
Admin->>Hooks : 点击“设置执行顺序”
Hooks->>Ctrl : 打开钩子-插件管理弹窗
Ctrl->>Service : 获取/更新钩子-插件顺序
Service-->>Ctrl : 返回结果
Ctrl-->>Hooks : 刷新顺序
```

图表来源
- [public/themes/admin_default/admin/plugin/hooks.html:31-35](file://public/themes/admin_default/admin/plugin/hooks.html#L31-L35)
- [public/themes/admin_default/admin/plugin/index.html:118-124](file://public/themes/admin_default/admin/plugin/index.html#L118-L124)

章节来源
- [public/themes/admin_default/admin/plugin/hooks.html:1-44](file://public/themes/admin_default/admin/plugin/hooks.html#L1-L44)

### 插件实现与生命周期
- 插件基类
  - 插件类继承通用基类，定义 info 元数据与 hasAdmin 标志
  - 生命周期方法：install、uninstall
- Swagger 插件
  - 提供后台 API 导入视图，自动同步后台 API 权限规则
- 系统信息插件
  - 提供后台仪表盘挂件，展示服务器信息
- 天地图插件
  - 提供地图对话框挂件，读取插件配置

```mermaid
classDiagram
class Plugin {
+info
+hasAdmin
+install()
+uninstall()
}
class SwaggerPlugin {
+info
+hasAdmin
+install()
+uninstall()
+adminApiImportView()
}
class SystemInfoPlugin {
+info
+hasAdmin
+install()
+uninstall()
+adminDashboard()
}
class TiandituPlugin {
+info
+hasAdmin
+install()
+uninstall()
+adminDialogMapView()
}
Plugin <|-- SwaggerPlugin
Plugin <|-- SystemInfoPlugin
Plugin <|-- TiandituPlugin
```

图表来源
- [vendor/thinkcmf/cmf/src/lib/Plugin.php](file://vendor/thinkcmf/cmf/src/lib/Plugin.php)
- [public/plugins/swagger/SwaggerPlugin.php:17-42](file://public/plugins/swagger/SwaggerPlugin.php#L17-L42)
- [public/plugins/system_info/SystemInfoPlugin.php:14-37](file://public/plugins/system_info/SystemInfoPlugin.php#L14-L37)
- [public/plugins/tianditu/TiandituPlugin.php:13-36](file://public/plugins/tianditu/TiandituPlugin.php#L13-L36)

章节来源
- [public/plugins/swagger/SwaggerPlugin.php:17-103](file://public/plugins/swagger/SwaggerPlugin.php#L17-L103)
- [public/plugins/system_info/SystemInfoPlugin.php:14-82](file://public/plugins/system_info/SystemInfoPlugin.php#L14-L82)
- [public/plugins/tianditu/TiandituPlugin.php:13-43](file://public/plugins/tianditu/TiandituPlugin.php#L13-L43)

### 插件配置定义与视图
- 天地图插件配置定义
  - 以数组形式定义配置项（键名、标题、类型、默认值、提示）
- 插件配置视图
  - Swagger 插件提供导入成功视图
  - 系统信息插件提供仪表盘挂件视图

章节来源
- [public/plugins/tianditu/config.php:9-16](file://public/plugins/tianditu/config.php#L9-L16)
- [public/plugins/swagger/view/widget.html:1-32](file://public/plugins/swagger/view/widget.html#L1-L32)
- [public/plugins/system_info/view/widget.html:1-12](file://public/plugins/system_info/view/widget.html#L1-L12)

## 依赖关系分析
- 控制器依赖逻辑层，逻辑层依赖服务层，服务层依赖模型与插件实例
- 插件列表页依赖控制器提供的接口与弹窗脚本
- 配置页与钩子页分别依赖控制器与服务层的数据读取与写入能力

```mermaid
graph LR
UI_Index["列表页(index.html)"] --> Ctrl["插件控制器"]
UI_Setting["配置页(setting.html)"] --> Ctrl
UI_Hooks["钩子页(hooks.html)"] --> Ctrl
Ctrl --> Logic["插件逻辑层"]
Logic --> Service["插件服务层"]
Service --> Model_Plugin["插件模型"]
Service --> Model_Hook["钩子-插件模型"]
Service --> Plugin_Instance["插件实例"]
```

图表来源
- [public/themes/admin_default/admin/plugin/index.html:72-158](file://public/themes/admin_default/admin/plugin/index.html#L72-L158)
- [public/themes/admin_default/admin/plugin/setting.html:7-23](file://public/themes/admin_default/admin/plugin/setting.html#L7-L23)
- [public/themes/admin_default/admin/plugin/hooks.html:31-35](file://public/themes/admin_default/admin/plugin/hooks.html#L31-L35)
- [vendor/thinkcmf/cmf-app/src/admin/controller/pluginController.php](file://vendor/thinkcmf/cmf-app/src/admin/controller/pluginController.php)
- [vendor/thinkcmf/cmf-app/src/admin/logic/PluginLogic.php](file://vendor/thinkcmf/cmf-app/src/admin/logic/PluginLogic.php)
- [vendor/thinkcmf/cmf-app/src/admin/service/PluginService.php](file://vendor/thinkcmf/cmf-app/src/admin/service/PluginService.php)
- [vendor/thinkcmf/cmf-app/src/admin/model/PluginModel.php](file://vendor/thinkcmf/cmf-app/src/admin/model/PluginModel.php)
- [vendor/thinkcmf/cmf-app/src/admin/model/HookPluginModel.php](file://vendor/thinkcmf/cmf-app/src/admin/model/HookPluginModel.php)

章节来源
- [vendor/thinkcmf/cmf-app/src/admin/controller/pluginController.php](file://vendor/thinkcmf/cmf-app/src/admin/controller/pluginController.php)
- [vendor/thinkcmf/cmf-app/src/admin/logic/PluginLogic.php](file://vendor/thinkcmf/cmf-app/src/admin/logic/PluginLogic.php)
- [vendor/thinkcmf/cmf-app/src/admin/service/PluginService.php](file://vendor/thinkcmf/cmf-app/src/admin/service/PluginService.php)
- [vendor/thinkcmf/cmf-app/src/admin/model/PluginModel.php](file://vendor/thinkcmf/cmf-app/src/admin/model/PluginModel.php)
- [vendor/thinkcmf/cmf-app/src/admin/model/HookPluginModel.php](file://vendor/thinkcmf/cmf-app/src/admin/model/HookPluginModel.php)

## 性能与可用性考量
- 插件数量较多时，列表页加载与弹窗交互可能增加带宽与渲染压力，建议按需分页或懒加载
- 配置页保存频繁时，注意避免重复提交，模板已内置非刷新提交策略
- 钩子执行顺序复杂时，建议先备份当前顺序，再进行批量调整
- Swagger 插件在导入 API 时会写入后台 API 与权限规则，建议在低峰期执行

[本节为通用建议，不直接分析具体文件]

## 故障排除指南
- 启用/禁用/卸载无响应
  - 检查浏览器控制台是否存在 Ajax 错误
  - 确认对应按钮绑定的 data-href 是否正确
- 配置保存失败
  - 确认表单字段类型与值符合要求
  - 查看接口返回的错误提示，必要时在配置页脚本处调试
- 钩子顺序无法修改
  - 确认当前钩子类型与“是否仅执行一次”的设置
  - 检查弹窗是否正常打开，确认服务层返回结果
- Swagger 导入 API 后权限未生效
  - 确认导入视图已执行，检查后台 API 与权限规则表是否更新
- 插件管理窗口无法打开
  - 检查插件是否声明 hasAdmin 且状态为启用
  - 确认插件命名空间与路由正确

章节来源
- [public/themes/admin_default/admin/plugin/index.html:82-91](file://public/themes/admin_default/admin/plugin/index.html#L82-L91)
- [public/themes/admin_default/admin/plugin/setting.html:28-66](file://public/themes/admin_default/admin/plugin/setting.html#L28-L66)
- [public/themes/admin_default/admin/plugin/hooks.html:31-35](file://public/themes/admin_default/admin/plugin/hooks.html#L31-L35)
- [public/plugins/swagger/SwaggerPlugin.php:44-103](file://public/plugins/swagger/SwaggerPlugin.php#L44-L103)

## 结论
ThinkCMF 的插件管理以模板驱动的后台界面为核心，结合控制器、逻辑层、服务层与模型，形成完整的插件生命周期管理闭环。通过统一的配置页与钩子顺序设置页，管理员可以高效地完成插件的安装、启用、禁用、卸载、更新与配置维护。建议在生产环境中遵循“先备份、后变更”的原则，并在低峰期执行大规模操作，确保系统稳定。

[本节为总结性内容，不直接分析具体文件]

## 附录
- 操作术语
  - 启用：使插件生效，允许其钩子与功能参与运行
  - 禁用：暂停插件运行，保留配置但不参与执行
  - 卸载：移除插件及其配置与相关数据
  - 更新：升级插件代码与资源，可能影响钩子与配置
- 安全与权限
  - 仅具备相应后台权限的用户可访问插件管理界面
  - 配置页保存涉及敏感参数时，应确保传输加密与二次校验
- 参考路径
  - 插件列表页：[public/themes/admin_default/admin/plugin/index.html:1-207](file://public/themes/admin_default/admin/plugin/index.html#L1-L207)
  - 插件配置页：[public/themes/admin_default/admin/plugin/setting.html:1-68](file://public/themes/admin_default/admin/plugin/setting.html#L1-L68)
  - 钩子执行顺序页：[public/themes/admin_default/admin/plugin/hooks.html:1-44](file://public/themes/admin_default/admin/plugin/hooks.html#L1-L44)
  - Swagger 插件实现：[public/plugins/swagger/SwaggerPlugin.php:1-106](file://public/plugins/swagger/SwaggerPlugin.php#L1-L106)
  - 系统信息插件实现：[public/plugins/system_info/SystemInfoPlugin.php:1-85](file://public/plugins/system_info/SystemInfoPlugin.php#L1-L85)
  - 天地图插件实现：[public/plugins/tianditu/TiandituPlugin.php:1-46](file://public/plugins/tianditu/TiandituPlugin.php#L1-L46)
  - 天地图配置定义：[public/plugins/tianditu/config.php:1-17](file://public/plugins/tianditu/config.php#L1-L17)