index.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <script lang="ts" setup>
  2. import { Page, useVbenModal } from '@vben/common-ui';
  3. import { Button, Card } from 'ant-design-vue';
  4. import DocButton from '../doc-button.vue';
  5. import AutoHeightDemo from './auto-height-demo.vue';
  6. import BaseDemo from './base-demo.vue';
  7. import DragDemo from './drag-demo.vue';
  8. import DynamicDemo from './dynamic-demo.vue';
  9. import FormModalDemo from './form-modal-demo.vue';
  10. import InContentModalDemo from './in-content-demo.vue';
  11. import SharedDataDemo from './shared-data-demo.vue';
  12. const [BaseModal, baseModalApi] = useVbenModal({
  13. // 连接抽离的组件
  14. connectedComponent: BaseDemo,
  15. });
  16. const [InContentModal, inContentModalApi] = useVbenModal({
  17. // 连接抽离的组件
  18. connectedComponent: InContentModalDemo,
  19. });
  20. const [AutoHeightModal, autoHeightModalApi] = useVbenModal({
  21. connectedComponent: AutoHeightDemo,
  22. });
  23. const [DragModal, dragModalApi] = useVbenModal({
  24. connectedComponent: DragDemo,
  25. });
  26. const [DynamicModal, dynamicModalApi] = useVbenModal({
  27. connectedComponent: DynamicDemo,
  28. });
  29. const [SharedDataModal, sharedModalApi] = useVbenModal({
  30. connectedComponent: SharedDataDemo,
  31. });
  32. const [FormModal, formModalApi] = useVbenModal({
  33. connectedComponent: FormModalDemo,
  34. });
  35. function openBaseModal() {
  36. baseModalApi.open();
  37. }
  38. function openInContentModal() {
  39. inContentModalApi.open();
  40. }
  41. function openAutoHeightModal() {
  42. autoHeightModalApi.open();
  43. }
  44. function openDragModal() {
  45. dragModalApi.open();
  46. }
  47. function openDynamicModal() {
  48. dynamicModalApi.open();
  49. }
  50. function openSharedModal() {
  51. sharedModalApi
  52. .setData({
  53. content: '外部传递的数据 content',
  54. payload: '外部传递的数据 payload',
  55. })
  56. .open();
  57. }
  58. function handleUpdateTitle() {
  59. dynamicModalApi.setState({ title: '外部动态标题' }).open();
  60. }
  61. function openFormModal() {
  62. formModalApi
  63. .setData({
  64. // 表单值
  65. values: { field1: 'abc' },
  66. })
  67. .open();
  68. }
  69. </script>
  70. <template>
  71. <Page
  72. auto-content-height
  73. description="弹窗组件常用于在不离开当前页面的情况下,显示额外的信息、表单或操作提示,更多api请查看组件文档。"
  74. title="弹窗组件示例"
  75. >
  76. <template #extra>
  77. <DocButton path="/components/common-ui/vben-modal" />
  78. </template>
  79. <BaseModal />
  80. <InContentModal />
  81. <AutoHeightModal />
  82. <DragModal />
  83. <DynamicModal />
  84. <SharedDataModal />
  85. <FormModal />
  86. <Card class="mb-4" title="基本使用">
  87. <p class="mb-3">一个基础的弹窗示例</p>
  88. <Button type="primary" @click="openBaseModal">打开弹窗</Button>
  89. </Card>
  90. <Card class="mb-4" title="指定容器">
  91. <p class="mb-3">在内容区域打开弹窗的示例</p>
  92. <Button type="primary" @click="openInContentModal">打开弹窗</Button>
  93. </Card>
  94. <Card class="mb-4" title="内容高度自适应">
  95. <p class="mb-3">可根据内容并自动调整高度</p>
  96. <Button type="primary" @click="openAutoHeightModal">打开弹窗</Button>
  97. </Card>
  98. <Card class="mb-4" title="可拖拽示例">
  99. <p class="mb-3">配置 draggable 可开启拖拽功能</p>
  100. <Button type="primary" @click="openDragModal">打开弹窗</Button>
  101. </Card>
  102. <Card class="mb-4" title="动态配置示例">
  103. <p class="mb-3">通过 setState 动态调整弹窗数据</p>
  104. <Button type="primary" @click="openDynamicModal">打开弹窗</Button>
  105. <Button class="ml-2" type="primary" @click="handleUpdateTitle">
  106. 从外部修改标题并打开
  107. </Button>
  108. </Card>
  109. <Card class="mb-4" title="内外数据共享示例">
  110. <p class="mb-3">通过共享 sharedData 来进行数据交互</p>
  111. <Button type="primary" @click="openSharedModal">
  112. 打开弹窗并传递数据
  113. </Button>
  114. </Card>
  115. <Card class="mb-4" title="表单弹窗示例">
  116. <p class="mb-3">弹窗与表单结合</p>
  117. <Button type="primary" @click="openFormModal"> 打开弹窗 </Button>
  118. </Card>
  119. </Page>
  120. </template>