# 基础使用
<script setup>
import { ref } from 'vue'
const show = ref(false)
</script>
<template>
<c-dialog v-model="show" title="你好">
<div>你好,世界</div>
</c-dialog>
<c-button label="打开对话框" @click="show = true" />
</template>
点击展开/收起代码
点击打开交互式编辑器
# 宽度&高度
<script setup>
import { ref } from 'vue'
const show = ref(false)
</script>
<template>
<c-dialog
v-model="show"
title="你好"
width="60vw"
body-height="60vh"
>
<div>你好,世界</div>
</c-dialog>
<c-button label="打开对话框" @click="show = true" />
</template>
点击展开/收起代码
点击打开交互式编辑器
# 无关闭图标
<script setup>
import { ref } from 'vue'
const show = ref(false)
</script>
<template>
<c-dialog
v-model="show"
title="你好"
width="60vw"
body-height="60vh"
:close-icon="false"
>
<div>你好,世界</div>
</c-dialog>
<c-button label="打开对话框(按esc键关闭)" @click="show = true" />
</template>
点击展开/收起代码
点击打开交互式编辑器
# 底部按钮
<script setup>
import { ref } from 'vue'
const show = ref(false)
</script>
<template>
<c-dialog
v-model="show"
title="你好"
show-confirm-btn
show-cancel-btn
confirm-btn-label="确认"
cancel-btn-label="取消"
>
<div>你好,世界</div>
</c-dialog>
<c-button label="打开对话框" @click="show = true" />
</template>
点击展开/收起代码
点击打开交互式编辑器
# 位置
<script setup>
import {
matArrowBack,
matArrowDownward,
matArrowForward,
matArrowUpward,
matFullscreenExit,
} from '@quasar/extras/material-icons/index'
import { ref } from 'vue'
const show = ref(false)
const horizontalAlign = ref('center')
const verticalAlign = ref('center')
const openWithPosition = (h, v) => {
horizontalAlign.value = h
verticalAlign.value = v
show.value = true
}
</script>
<template>
<c-dialog
v-model="show"
title="你好"
:horizontal-align="horizontalAlign"
:vertical-align="verticalAlign"
>
<div>你好,世界</div>
</c-dialog>
<div class="c-row c-gutter-sm">
<div>
<c-button
icon
style="transform: rotate(-45deg)"
@click="openWithPosition('start', 'start')"
>
<c-icon :content="matArrowUpward" />
</c-button>
</div>
<div>
<c-button icon @click="openWithPosition('center', 'start')">
<c-icon :content="matArrowUpward" />
</c-button>
</div>
<div>
<c-button
icon
style="transform: rotate(45deg)"
@click="openWithPosition('end', 'start')"
>
<c-icon :content="matArrowUpward" />
</c-button>
</div>
</div>
<div class="c-row c-gutter-sm">
<div>
<c-button icon @click="openWithPosition('start', 'center')">
<c-icon :content="matArrowBack" />
</c-button>
</div>
<div>
<c-button icon @click="openWithPosition('center', 'center')">
<c-icon :content="matFullscreenExit" />
</c-button>
</div>
<div>
<c-button icon @click="openWithPosition('end', 'center')">
<c-icon :content="matArrowForward" />
</c-button>
</div>
</div>
<div class="c-row c-gutter-sm">
<div>
<c-button
icon
style="transform: rotate(-45deg)"
@click="openWithPosition('start', 'end')"
>
<c-icon :content="matArrowBack" />
</c-button>
</div>
<div>
<c-button icon @click="openWithPosition('center', 'end')">
<c-icon :content="matArrowDownward" />
</c-button>
</div>
<div>
<c-button
icon
style="transform: rotate(45deg)"
@click="openWithPosition('end', 'end')"
>
<c-icon :content="matArrowForward" />
</c-button>
</div>
</div>
</template>
点击展开/收起代码
点击打开交互式编辑器
# 通过插槽自定义一些内容
<script setup>
import { ref } from 'vue'
import { matPeople } from '@quasar/extras/material-icons/index.mjs'
const show = ref(false)
</script>
<template>
<c-dialog v-model="show">
<template #title>
<img class="title-icon" src="/logo-dark.svg">
</template>
<template #close-icon>
<c-icon :content="matPeople" />
</template>
<template #footer-actions>
<div>
<c-button
size="sm"
label="关闭"
theme="negative"
@click="show = false"
/>
<c-button
size="sm"
label="关闭"
theme="warning"
@click="show = false"
/>
</div>
</template>
</c-dialog>
<c-button label="打开对话框" @click="show = true" />
</template>
<style scoped>
.title-icon {
width: 80px;
}
</style>
点击展开/收起代码
点击打开交互式编辑器
# 模拟抽屉
<script setup>
import { ref } from 'vue'
const left = ref(false)
const top = ref(false)
const right = ref(false)
const bottom = ref(false)
</script>
<template>
<c-dialog
v-model="left"
exchange-animation-direction
title="左侧抽屉"
:rounded="false"
:custom-style="{
height: '100vh',
}"
width="80vw"
vertical-align="center"
horizontal-align="start"
>
内容
</c-dialog>
<c-dialog
v-model="right"
exchange-animation-direction
title="右侧抽屉"
:rounded="false"
width="80vw"
:custom-style="{
height: '100vh',
}"
vertical-align="center"
horizontal-align="end"
>
内容
</c-dialog>
<c-dialog
v-model="top"
title="顶部抽屉"
:rounded="false"
width="100vw"
vertical-align="start"
horizontal-align="center"
>
内容
</c-dialog>
<c-dialog
v-model="bottom"
title="底部抽屉"
:rounded="false"
width="100vw"
vertical-align="end"
horizontal-align="center"
>
内容
</c-dialog>
<div class="c-row c-items-center c-wrap c-gutter-md">
<div>
<c-button label="打开左侧抽屉" @click="left = true" />
</div>
<div>
<c-button label="打开顶部抽屉" @click="top = true" />
</div>
<div>
<c-button label="打开右侧抽屉" @click="right = true" />
</div>
<div>
<c-button label="打开底部抽屉" @click="bottom = true" />
</div>
</div>
</template>
点击展开/收起代码
点击打开交互式编辑器
# CDialog API
Props
Slots
Events
modelValue
boolean
*
对话框是否打开,可用于v-model
绑定
title
string
默认值
''
标题
width
string
默认值
'40vw'
宽度
bodyHeight
string
默认值
'auto'
对话框体高度
bodyPadding
boolean
默认值
true
是否具有内容内边距
rounded
boolean
默认值
true
是否表现为圆角
closeIcon
boolean
默认值
true
是否展示关闭图标
horizontalAlign
"start"
| "center"
| "end"
默认值
undefined
水平对齐方式
verticalAlign
"start"
| "center"
| "end"
默认值
undefined
垂直对齐方式
customClass
string
默认值
''
自定义对话框DOM样式类
customStyle
object
默认值
() => ({})
自定义对话框DOM样式
customBodyStyle
object
默认值
() => ({})
自定义对话框内容样式类
showCancelBtn
boolean
默认值
false
是否展示取消按钮
cancelBtnLabel
string
默认值
'Cancel'
取消按钮文字
showConfirmBtn
boolean
默认值
false
是否展示确认按钮
confirmBtnLabel
string
默认值
'Confirm'
确认按钮文字
exchangeAnimationDirection
boolean
默认值
false
是否交换动画的先后方向,初始为先横向展开,后纵向展开,设置为true,则先纵向展开,后横向展开
closeOnEsc
boolean
默认值
true
是否在按下Esc按键后关闭对话框
closeOnClickBackdrop
boolean
默认值
true
点击遮罩是否关闭弹出层