# 组件注册表插件（ComponentRegistryPlugin）使用说明

当前界面组件管理插件，用于按名称注册、获取组件实例。同名重复注册会报错，组件销毁时自动从注册表移除。

## API

| 方法 | 说明 |
|------|------|
| `register(name, component)` | 注册组件。`name` 唯一，重复则抛错。组件销毁时自动注销。 |
| `get(name)` | 按名称获取组件实例，未注册返回 `undefined`。 |
| `has(name)` | 是否已注册该名称。 |
| `unregister(name)` | 从注册表移除（不销毁组件）。 |
| `clear()` | 清空所有注册（整页切换等场景慎用）。 |

## 使用方式

在组件或根实例上通过 `this.$componentRegistry` 访问（已随 base-client Plugins 全局注册）。

**注册**（在需要被按名获取的组件里，如 `mounted`）：

```js
mounted() {
  this.$componentRegistry.register('main', this)
}
```

**获取**：

```js
const main = this.$componentRegistry.get('main')
if (main && main.refreshTable) main.refreshTable()
```

**判断**：

```js
if (this.$componentRegistry.has('sidebar')) { ... }
```

## 注意

- 名称会做 `trim()`，空字符串注册会报错。
- 重复注册同名会抛出：`[ComponentRegistry] 组件名称 "xxx" 已存在，不可重复注册`。
- 注册表为应用级单例，跨页面共享；整页卸载时如有多页签/单页内多视图，可按需在适当时机调用 `clear()`。

## 与 Report-Grid（XReportGrid）配合

栅格报表的插槽单元格配置中，除插槽名 `slotRef` 外，可**可选**增加字段 **`globalRegistryName`**。仅当配置了 `globalRegistryName` 时，该插槽对应的组件才会注册到全局组件注册表；未配置时行为与旧版一致，仅注册到报表内部的 `getComponentByName`，**保证向后兼容**。

示例（插槽配置）：

```json
{
  "slotRef": "main",
  "globalRegistryName": "reportMainFormTable",
  "slotType": "x-form-table",
  "slotConfig": "crud_xxx"
}
```

- `slotRef`：插槽名，用于报表内 `getComponentByName('main')` 等。
- `globalRegistryName`：全局注册名，配置后可通过 `this.$componentRegistry.get('reportMainFormTable')` 在任意处获取；报表销毁时会自动从全局注册表注销。

源文件：`src/base-client/plugins/ComponentRegistryPlugin.js`。
