--- title: Notification 通知提醒 description: 命令式通知:带标题与描述,适合承载需要阅读的信息 --- # Notification 通知提醒 `Notification` 与 [Message](/ui/feedback/message) 是同一套机制,但**承载更多信息**:有标题、有描述、默认停留更久(4500ms),适合「需要被读到」的内容。 ## 何时使用 - 后台任务完成 / 失败,用户当前可能不在看那一块界面; - 需要标题 + 详细描述的信息(版本发布、审核结果、系统告警); - 只是「一句话结果」时用 Message 更轻;需要用户做出选择时用 [Modal](/ui/overlay/modal)。 ## 基础用法 ```ts import { G3Notification } from '@g3soft/ui' G3Notification.success({ title: '发布成功', description: '版本 1.2.0 已上线' }) G3Notification.error({ title: '构建失败', description: '单元测试未通过', duration: 0 }) ``` ## 方位 通知只出现在四角(避免遮挡页面中央内容);逐条可指定 `placement`,也可以用 `config()` 设全局默认。 ```ts G3Notification.config({ placement: 'bottom-right', duration: 6000 }) ``` ## 关闭与清理 ## 使用注意 - 通知是「异步结果」的表达,不要在用户操作的同一瞬间用它替代即时反馈——那种场景用 Message; - `duration: 0` 的通知必须带 `closable`(默认就是 `true`),否则用户无法关闭; - 登出、切换租户、路由跳转到登录页时建议调用 `G3Notification.destroy()`,避免残留旧上下文的通知。 ## API ### 方法 | 方法 | 签名 | 说明 | | --- | --- | --- | | `open` | `(options: NotificationOptions) => NotificationHandle` | 通用入口 | | `info` | `(options: ShortcutOptions) => NotificationHandle` | 信息 | | `success` | `(options: ShortcutOptions) => NotificationHandle` | 成功 | | `warning` | `(options: ShortcutOptions) => NotificationHandle` | 警告 | | `error` | `(options: ShortcutOptions) => NotificationHandle` | 错误 | | `close` | `(id: string) => void` | 按 id 关闭一条 | | `config` | `(config: NotificationConfig) => void` | 设置全局默认(`placement` / `duration`) | | `destroy` | `() => void` | 清空全部通知并卸载容器 | | `count` | `() => number` | 当前存活条数(调试用) | `ShortcutOptions` = `Omit`,即 `{ title?, description?, duration?, closable?, placement? }`。 ### 类型定义 ```ts export type NotificationType = 'info' | 'success' | 'warning' | 'error' export type NotificationPlacement = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' export interface NotificationOptions { title?: string description?: string type?: NotificationType duration?: number closable?: boolean placement?: NotificationPlacement } export interface NotificationHandle { close: () => void } export interface NotificationConfig { placement?: NotificationPlacement duration?: number } ``` ### 组件形式(G3NotificationItem / G3NotificationContainer) | 组件 | Props | 说明 | | --- | --- | --- | | `G3NotificationItem` | `id` / `type` / `title` / `description` / `duration` / `closable` | 单条通知,`close` 事件表示「该关闭了」 | | `G3NotificationContainer` | `zIndex` | 四角容器,读取全局 `notificationState` 渲染 | ### 样式变量 | 变量 | 默认值 | 说明 | | --- | --- | --- | | `--g3-feedback-offset` | `24px` | 距视口边缘的距离 | | `--g3-feedback-icon-size` | `18px` | 类型图标尺寸 | | `--g3-shadow-popup` | 浮层阴影 | 通知卡片阴影 | ## 实现说明 - 与 Message 同构:组件树外单例容器(`createVNode` + `render`)、`reactive` 全局列表、四角常驻 `TransitionGroup`; - 单条宽度固定 `340px`,`max-width: calc(100vw - offset*2)`,窄屏不会溢出;描述文字换行不截断(通知的意义就在于把话说完); - 层级的 `feedback` 档高于 modal / popup:弹窗里触发的通知一定能被看到; - `destroy()` 会卸载容器并回收 z-index,适合登出等「上下文整体切换」的场景;`close(id)` 只关一条。