该组件目前处于实验性阶段,API 及功能可能会有较大调整,欢迎试用并提供反馈
<script setup lang="ts">
import { ref } from 'vue'
const toastVisible = ref(false)
</script>
<template>
<div class="p-4">
<SkButton label="显示提示" @click="() => toastVisible = true" />
<SkToast v-model:visible="toastVisible" message="这是一个基础提示消息" />
</div>
</template>
Prop | 类型 | 默认值 | 描述 |
---|
v-model:visible | boolean | false | 设置提示的显示状态 (双向绑定) |
<script setup lang="ts">
import { ref } from 'vue'
const toastVisible = ref(false)
</script>
<template>
<div class="p-4">
<SkButton label="展示Toast" @click="() => toastVisible = true" />
<SkToast v-model:visible="toastVisible" message="Hello World" />
</div>
</template>
Prop | 类型 | 默认值 | 描述 |
---|
message | string | - | 设置提示的消息内容 |
<script setup lang="ts">
import { ref } from 'vue'
const visible = ref(false)
const currentMessage = ref('')
function handleShowToast(message: string) {
currentMessage.value = message
visible.value = true
}
</script>
<template>
<div class="flex flex-col p-4 gap-3">
<SkButton label="短消息" color="brand" @click="handleShowToast('操作成功')" />
<SkButton label="长消息" color="brand" @click="handleShowToast('这是一个比较长的提示消息,用于演示消息内容的显示效果')" />
<SkButton label="多行消息" color="brand" @click="handleShowToast('第一行消息\n第二行消息\n第三行消息')" />
</div>
<SkToast v-model:visible="visible" :message="currentMessage" />
</template>
Prop | 默认值 | 类型 | 描述 |
---|
type | default | {Type} | 设置提示的类型 |
Type | 描述 |
---|
default | 默认类型 |
info | 信息类型 |
success | 成功类型 |
warning | 警告类型 |
error | 错误类型 |
<script setup lang="ts">
import { ref } from 'vue'
const visible = ref(false)
const currentType = ref<'default' | 'success' | 'warning' | 'error'>('default')
const currentMessage = ref('')
function handleShowToast(type: typeof currentType.value, message: string) {
currentType.value = type
currentMessage.value = message
visible.value = true
}
</script>
<template>
<div class="flex flex-col p-4 gap-3">
<SkButton label="默认提示" color="neutral" @click="handleShowToast('default', '这是一个默认提示')" />
<SkButton label="成功提示" color="success" @click="handleShowToast('success', '操作成功')" />
<SkButton label="警告提示" color="warning" @click="handleShowToast('warning', '请注意这个警告')" />
<SkButton label="错误提示" color="danger" @click="handleShowToast('error', '发生了错误')" />
</div>
<SkToast v-model:visible="visible" :type="currentType" :message="currentMessage" />
</template>
Prop | 默认值 | 类型 | 描述 |
---|
placement | center | {Placement} | 设置提示的位置 |
Placement | 描述 |
---|
top | 顶部 |
center | 中间 |
bottom | 底部 |
<script setup lang="ts">
import { ref } from 'vue'
const visible = ref(false)
const currentPosition = ref<'top' | 'center' | 'bottom'>('center')
const currentMessage = ref('')
function handleShowToast(placement: typeof currentPosition.value, message: string) {
currentPosition.value = placement
currentMessage.value = message
visible.value = true
}
</script>
<template>
<div class="flex flex-col p-4 gap-3">
<SkButton label="顶部提示" color="brand" @click="handleShowToast('top', '顶部显示的提示')" />
<SkButton label="中间提示" color="brand" @click="handleShowToast('center', '中间显示的提示')" />
<SkButton label="底部提示" color="brand" @click="handleShowToast('bottom', '底部显示的提示')" />
</div>
<SkToast v-model:visible="visible" :placement="currentPosition" :message="currentMessage" />
</template>
Prop | 默认值 | 类型 | 描述 |
---|
duration | 3000 | number | 设置提示显示的持续时间(ms),0 表示不自动关闭 |
<script setup lang="ts">
import { ref } from 'vue'
// 响应式状态管理
const visible = ref(false)
const currentDuration = ref(3000)
const currentMessage = ref('')
const currentClosable = ref(false)
function handleShowToast(duration: number, message: string, closable = false) {
currentDuration.value = duration
currentMessage.value = message
currentClosable.value = closable
visible.value = true
}
</script>
<template>
<div class="flex flex-col p-4 gap-3">
<SkButton label="短时间 (1秒)" color="brand" @click="handleShowToast(1000, '短时间显示 (1秒)')" />
<SkButton label="正常时间 (3秒)" color="brand" @click="handleShowToast(3000, '正常时间显示 (3秒)')" />
<SkButton label="长时间 (5秒)" color="brand" @click="handleShowToast(5000, '长时间显示 (5秒)')" />
<SkButton label="持续显示" color="brand" @click="handleShowToast(0, '持续显示,需要手动关闭', true)" />
</div>
<SkToast v-model:visible="visible" :duration="currentDuration" :message="currentMessage" :closable="currentClosable" />
</template>
Prop | 默认值 | 类型 | 描述 |
---|
icon | - | string | 设置提示的自定义图标 |
showIcon | true | boolean | 是否显示图标 |
<script setup lang="ts">
import { ref } from 'vue'
const visible = ref(false)
const type = ref<'default' | 'success' | 'warning' | 'error' | 'info'>('default')
function handleShowToast(newType: typeof type.value) {
type.value = newType
visible.value = true
}
</script>
<template>
<div class="p-4 flex flex-col gap-3">
<SkButton label="默认 Toast" color="neutral" @click="handleShowToast('default')" />
<SkButton label="成功 Toast" color="success" @click="handleShowToast('success')" />
<SkButton label="警告 Toast" color="warning" @click="handleShowToast('warning')" />
<SkButton label="错误 Toast" color="danger" @click="handleShowToast('error')" />
<SkButton label="信息 Toast" color="brand" @click="handleShowToast('info')" />
</div>
<SkToast v-model:visible="visible" :type="type" message="显示含图标的消息提示" />
</template>
Prop | 默认值 | 类型 | 描述 |
---|
closable | false | boolean | 是否显示关闭按钮 |
<script setup lang="ts">
import { ref } from 'vue'
const toastVisible = ref(false)
</script>
<template>
<div class="p-4">
<SkButton label="显示可关闭提示" @click="() => toastVisible = true" />
<SkToast v-model:visible="toastVisible" message="这是一个可关闭的提示消息" :closable="true" :duration="0" />
</div>
</template>
Prop | 默认值 | 类型 | 描述 |
---|
backdrop | false | boolean | 是否显示背景层 |
<script setup lang="ts">
import { ref } from 'vue'
const toastVisible = ref(false)
</script>
<template>
<div class="p-4">
<SkButton label="显示带背景层的提示" @click="() => toastVisible = true" />
<SkToast
v-model:visible="toastVisible"
message="这是一个带背景层的提示消息"
:backdrop="true"
:duration="3000"
/>
</div>
</template>
Prop | 类型 | 默认值 | 描述 |
---|
zIndex | number | 2000 | 设置提示的显示层级 |
<script setup lang="ts">
import { ref } from 'vue'
const visible = ref(false)
const currentZIndex = ref(2000)
const currentMessage = ref('')
function handleShowToast(zIndex: number, message: string) {
currentZIndex.value = zIndex
currentMessage.value = message
visible.value = true
}
</script>
<template>
<div class="flex flex-col p-4 gap-3">
<div class="relative bg-orange-500 p-4 text-white z-1500 rounded-lg">
这是 zIndex = 1500 的盒子
</div>
<SkButton label="低层级 (1000)" @click="handleShowToast(1000, '层级 1000 的提示')" />
<SkButton label="默认层级 (2000)" @click="handleShowToast(2000, '层级 2000 的提示')" />
<SkButton label="高层级 (3000)" @click="handleShowToast(3000, '层级 3000 的提示')" />
</div>
<SkToast v-model:visible="visible" :z-index="currentZIndex" :message="currentMessage" />
</template>
通过插槽可以自定义 Toast 的内容和图标。
<script setup lang="ts">
import { ref } from 'vue'
const visible = ref(false)
</script>
<template>
<SkButton label="自定义图标" @click="() => visible = true" />
<SkToast v-model:visible="visible" type="success">
<template #icon>
<SkIcon name="i-lucide:check-check" class="text-red-500" />
</template>
<div>
<span class="block text-sm font-medium">操作成功</span>
<span class="text-xs opacity-80">您的数据已保存</span>
</div>
</SkToast>
</template>
插槽名 | 描述 |
---|
default | 提示的内容 |
icon | 自定义图标 |
正在完善中,敬请期待!😊