u
This commit is contained in:
1 parent
f572dce2f6
commit
e99a9fb274
356 files changed
+28877
-1055
No files matched your search
@@ -0,0 +1,131 @@
|
||||
---
|
||||
title: Message 轻提示
|
||||
description: 命令式轻提示:info / success / warning / error
|
||||
---
|
||||
|
||||
# Message 轻提示
|
||||
|
||||
`Message` 用于给用户一个**不打断操作**的反馈:保存成功、校验失败、复制完成。
|
||||
|
||||
## 何时使用
|
||||
|
||||
- 操作结果反馈(成功 / 失败 / 警告)时;
|
||||
- 需要用户**确认**或做选择时,用 [Modal.confirm](/ui/overlay/modal);
|
||||
- 需要承载标题 + 描述、停留更久时,用 [Notification](/ui/feedback/notification)。
|
||||
|
||||
## 基础用法
|
||||
|
||||
`G3Message` 是一个对象,直接调用即可——它会自己挂载容器到 `body`,无需在模板里写组件。
|
||||
|
||||
:::demo{name="message/basic"}
|
||||
:::
|
||||
|
||||
```ts
|
||||
import { G3Message } from '@g3soft/ui'
|
||||
|
||||
G3Message.info('普通提示')
|
||||
G3Message.success('保存成功')
|
||||
G3Message.warning('磁盘空间不足')
|
||||
G3Message.error('保存失败,请重试')
|
||||
```
|
||||
|
||||
## 选项与句柄
|
||||
|
||||
第二个参数是选项对象;调用返回 `{ close }` 句柄,可以提前关闭。
|
||||
|
||||
:::demo{name="message/options"}
|
||||
:::
|
||||
|
||||
| 选项 | 类型 | 默认值 | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| `duration` | `number` | `3000` | 自动关闭时长(ms)。`<= 0` 表示不自动关闭 |
|
||||
| `closable` | `boolean` | `false` | 是否显示关闭按钮 |
|
||||
| `placement` | `MessagePlacement` | 全局配置 | 显示方位(9 个) |
|
||||
|
||||
## 方位与全局配置
|
||||
|
||||
`placement` 可逐条指定;`G3Message.config()` 设置全局默认,只影响之后的调用。
|
||||
|
||||
:::demo{name="message/placement"}
|
||||
:::
|
||||
|
||||
```ts
|
||||
G3Message.config({ placement: 'top-right', duration: 2000 })
|
||||
```
|
||||
|
||||
## 使用注意
|
||||
|
||||
- `G3Message` 在**组件树之外**创建实例:命名空间、语言包、初始方位来自全局配置(`G3UI.config()` / `ConfigProvider` 无法 inject 到它),因此多主题场景请在 `G3UI.config({ namespace })` 里统一;
|
||||
- 消息是「短反馈」,不要放按钮、链接等需要交互的内容——那属于 Notification 或 Modal;
|
||||
- 同一时刻的消息默认堆叠在同一个方位,超过屏幕高度时请自行控制数量(例如 `duration` 缩短)。
|
||||
|
||||
## API
|
||||
|
||||
### 方法
|
||||
|
||||
| 方法 | 签名 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `open` | `(options: MessageOptions) => MessageHandle` | 通用入口 |
|
||||
| `info` | `(content: string, options?: ShortcutOptions) => MessageHandle` | 信息提示 |
|
||||
| `success` | `(content: string, options?: ShortcutOptions) => MessageHandle` | 成功 |
|
||||
| `warning` | `(content: string, options?: ShortcutOptions) => MessageHandle` | 警告 |
|
||||
| `error` | `(content: string, options?: ShortcutOptions) => MessageHandle` | 错误 |
|
||||
| `close` | `(id: string) => void` | 按 id 关闭一条 |
|
||||
| `config` | `(config: MessageConfig) => void` | 设置全局默认(`placement` / `duration`) |
|
||||
| `destroy` | `() => void` | 清空全部消息并卸载容器(登出 / 切租户时用) |
|
||||
| `count` | `() => number` | 当前存活条数(调试用) |
|
||||
|
||||
`ShortcutOptions` = `Omit<MessageOptions, 'content' | 'type'>`,即 `{ duration?, closable?, placement? }`。
|
||||
|
||||
### 类型定义
|
||||
|
||||
```ts
|
||||
export type MessageType = 'info' | 'success' | 'warning' | 'error'
|
||||
|
||||
export type MessagePlacement =
|
||||
| 'top-left' | 'top-center' | 'top-right'
|
||||
| 'center-left' | 'center' | 'center-right'
|
||||
| 'bottom-left' | 'bottom-center' | 'bottom-right'
|
||||
|
||||
export interface MessageOptions {
|
||||
content: string
|
||||
type?: MessageType
|
||||
duration?: number
|
||||
closable?: boolean
|
||||
placement?: MessagePlacement
|
||||
}
|
||||
|
||||
export interface MessageHandle {
|
||||
close: () => void
|
||||
}
|
||||
|
||||
export interface MessageConfig {
|
||||
placement?: MessagePlacement
|
||||
duration?: number
|
||||
}
|
||||
```
|
||||
|
||||
### 组件形式(G3MessageItem / G3MessageContainer)
|
||||
|
||||
一般不需要直接使用;如果要把消息渲染进自己的容器(例如某个面板内部),可以组合它们:
|
||||
|
||||
| 组件 | Props | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `G3MessageItem` | `id` / `type` / `content` / `duration` / `closable` | 单条消息,`close` 事件表示「该关闭了」(自动计时到期或点了关闭按钮) |
|
||||
| `G3MessageContainer` | `zIndex` | 9 个方位的容器,读取全局 `messageState` 渲染 |
|
||||
|
||||
### 样式变量
|
||||
|
||||
| 变量 | 默认值 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `--g3-feedback-offset` | `24px` | 距视口边缘的距离 |
|
||||
| `--g3-feedback-icon-size` | `18px` | 类型图标尺寸 |
|
||||
| `--g3-shadow-popup` | 浮层阴影 | 消息卡片阴影 |
|
||||
|
||||
## 实现说明
|
||||
|
||||
- **组件树外挂载**:首次调用时创建单例容器(`createVNode` + `render` 挂到 `body`),之后复用;`destroy()` 才会卸载并回收 z-index;
|
||||
- 全局状态放在 `messageState`(`reactive`),容器读它、管理器写它,因此消息增删是响应式的;容器对 9 个方位各渲染一个常驻的 `TransitionGroup`,**只让消息项进出**,这是进出场动画能稳定触发的前提;
|
||||
- 层级取 z-index 注册表的 `feedback` 档(高于 modal / popup),保证弹窗里的操作提示也能看到;容器本身 `pointer-events: none`,只有消息卡片可交互,避免挡住页面;
|
||||
- `duration` 计时在消息项内部完成(`onMounted` 启动、卸载时清除),因此手动关闭与自动关闭不会互相干扰;
|
||||
- 文案来自语言包(关闭按钮的 `aria-label` 等),可用 `ConfigProvider.locale` / `G3UI.config({ locale })` 切换。
|
||||
Reference in new issue
Block a user