--- name: giime-components description: 【必读·强制】Giime 组件库强制使用规范。编写或修改任何涉及 UI 组件的前端代码前必须先阅读本技能。涵盖 gm-* 组件增强特性、GmConfirmBox/GmMessage/GmCopy 等插件用法、常用代码模式及 MCP 文档获取方式。 --- # Giime 组件库使用规范 Giime 是基于 Element Plus 扩展和增强的内部组件库,所有 `el-` 组件都有对应的 `gm-` 版本。未列出的 `gm-*` 组件与 `el-*` 行为一致,可直接替换使用。 ## 使用原则 1. **优先 Giime**:`el-button` → `gm-button`,`el-table` → `gm-table`,以此类推。Giime 在 Element Plus 基础上统一了默认行为(如自动 loading、默认 filterable),直接使用可以减少重复配置。 2. **特殊需求**:Giime 无法满足时可用 Element Plus 原生组件。 3. **旧代码兼容**:旧代码保持原样,新代码按本规范编写。 4. **二次确认用 `GmConfirmBox`**:删除等危险操作使用 `GmConfirmBox`,它会自动处理确认按钮的 loading 和禁用状态,避免重复提交。 5. **复制用 `GmCopy`**:`GmCopy` 自动处理剪切板 API 兼容性并提示成功/失败,无需手写 try-catch。 6. **消息提示用 `GmMessage`**:`GmMessage` 默认合并相同消息(`grouping: true`),避免短时间内弹出大量重复提示,体验优于 `ElMessage`。 ## 核心增强特性(gm-\* vs el-\*) 以下组件相对于 Element Plus 有**增强行为**,使用时需了解差异: | 组件 | 增强内容 | | ----------------- | ---------------------------------------------------------------------------------- | | `gm-button` | 异步 `@click` 自动处理 loading;disabled 时自动 type='info';自动 Clarity 事件追踪 | | `gm-select` | 默认 `filterable: true`;推荐使用 `:options` 传入选项 | | `gm-cascader` | 默认 `filterable: true` | | `gm-table` | 新增 `tableId` 属性(注入 TableCtx);默认 `scrollbarAlwaysOn: true` | | `gm-upload` | 支持 `v-model:fileList` 双向绑定 | | `gm-image` | 新增下载进度、默认工具栏(缩放/旋转/下载)、`download()` 方法 | | `gm-image-viewer` | 同 `gm-image`,新增下载进度和默认工具栏 | | `gm-popover` | 新增 `before-enter`/`before-leave`/`after-enter`/`after-leave` 事件 | | `GmMessage` | 默认 `grouping: true`(相同消息合并);支持全局 `plain` 配置 | | `GmMessageBox` | alert 默认禁止 Esc 和遮罩关闭;confirm/prompt 默认显示取消按钮 | | `GmConfirmBox` | 二次确认弹窗,自动处理确认按钮 loading 和禁用 | | `GmCopy` | 复制到剪切板,自动提示成功/失败 | > **注意**:`gm-select-v2` 未默认开启 `filterable`,与 `gm-select` 不同。 ## 常用代码模式 ### 二次确认删除 ```ts const handleDelete = () => { GmConfirmBox({ message: '是否确认删除?' }, async () => { await deleteItem(); GmMessage.success('删除成功'); }); }; ``` ### 异步按钮(自动 loading) 绑定异步函数即可,无需手动管理 loading 状态。当按钮仅执行 `emit` 而不返回 Promise 时,不会触发自动 loading: ```vue 提交 ``` ```ts const handleSubmit = async () => { await submitForm(); GmMessage.success('提交成功'); }; ``` ### 选择器(:options 写法) ```vue ``` ### 复制到剪切板 ```ts GmCopy(text); ``` ## 获取详细文档 使用具体组件、Hook 或工具函数时,通过 `giime-docs` MCP 获取详细用法: 1. 调用 `get-giime-docs-sidebar` 获取完整目录(包含所有组件/Hook/工具函数的链接) 2. 调用 `get-giime-component-doc({ link })` 获取对应的 Markdown 文档 如果 `giime-docs` MCP 未配置,参考 [mcp-setup.md](references/mcp-setup.md) 进行安装。