10 changed files with 330 additions and 0 deletions
@ -0,0 +1,29 @@ |
|||
<script setup lang="ts"> |
|||
import { ref } from 'vue'; |
|||
|
|||
import { useVbenDrawer } from '@vben/common-ui'; |
|||
|
|||
interface AutoDrawerData { |
|||
message: string; |
|||
method: '自动推导'; |
|||
} |
|||
|
|||
const data = ref<AutoDrawerData>(); |
|||
|
|||
const [Drawer, drawerApi] = useVbenDrawer<AutoDrawerData>({ |
|||
onOpenChange(isOpen) { |
|||
data.value = isOpen ? drawerApi.getData() : undefined; |
|||
}, |
|||
}); |
|||
|
|||
defineExpose({ drawerApi }); |
|||
</script> |
|||
|
|||
<template> |
|||
<Drawer title="自动推导数据类型"> |
|||
<div class="space-y-2 px-2"> |
|||
<p>类型来源:{{ data?.method }}</p> |
|||
<p>接收内容:{{ data?.message }}</p> |
|||
</div> |
|||
</Drawer> |
|||
</template> |
|||
@ -0,0 +1,13 @@ |
|||
import { createVbenDrawer } from '@vben/common-ui'; |
|||
|
|||
export interface ExplicitDrawerData { |
|||
message: string; |
|||
method: '显式泛型'; |
|||
} |
|||
|
|||
export interface FactoryDrawerData { |
|||
message: string; |
|||
method: '契约工厂'; |
|||
} |
|||
|
|||
export const useFactoryDrawer = createVbenDrawer<FactoryDrawerData>(); |
|||
@ -0,0 +1,24 @@ |
|||
<script setup lang="ts"> |
|||
import type { ExplicitDrawerData } from './typed-data-contract'; |
|||
|
|||
import { ref } from 'vue'; |
|||
|
|||
import { useVbenDrawer } from '@vben/common-ui'; |
|||
|
|||
const data = ref<ExplicitDrawerData>(); |
|||
|
|||
const [Drawer, drawerApi] = useVbenDrawer<ExplicitDrawerData>({ |
|||
onOpenChange(isOpen) { |
|||
data.value = isOpen ? drawerApi.getData() : undefined; |
|||
}, |
|||
}); |
|||
</script> |
|||
|
|||
<template> |
|||
<Drawer title="显式泛型数据类型"> |
|||
<div class="space-y-2 px-2"> |
|||
<p>类型来源:{{ data?.method }}</p> |
|||
<p>接收内容:{{ data?.message }}</p> |
|||
</div> |
|||
</Drawer> |
|||
</template> |
|||
@ -0,0 +1,24 @@ |
|||
<script setup lang="ts"> |
|||
import type { FactoryDrawerData } from './typed-data-contract'; |
|||
|
|||
import { ref } from 'vue'; |
|||
|
|||
import { useFactoryDrawer } from './typed-data-contract'; |
|||
|
|||
const data = ref<FactoryDrawerData>(); |
|||
|
|||
const [Drawer, drawerApi] = useFactoryDrawer({ |
|||
onOpenChange(isOpen) { |
|||
data.value = isOpen ? drawerApi.getData() : undefined; |
|||
}, |
|||
}); |
|||
</script> |
|||
|
|||
<template> |
|||
<Drawer title="契约工厂数据类型"> |
|||
<div class="space-y-2 px-2"> |
|||
<p>类型来源:{{ data?.method }}</p> |
|||
<p>接收内容:{{ data?.message }}</p> |
|||
</div> |
|||
</Drawer> |
|||
</template> |
|||
@ -0,0 +1,29 @@ |
|||
<script setup lang="ts"> |
|||
import { ref } from 'vue'; |
|||
|
|||
import { useVbenModal } from '@vben/common-ui'; |
|||
|
|||
interface AutoModalData { |
|||
message: string; |
|||
method: '自动推导'; |
|||
} |
|||
|
|||
const data = ref<AutoModalData>(); |
|||
|
|||
const [Modal, modalApi] = useVbenModal<AutoModalData>({ |
|||
onOpenChange(isOpen) { |
|||
data.value = isOpen ? modalApi.getData() : undefined; |
|||
}, |
|||
}); |
|||
|
|||
defineExpose({ modalApi }); |
|||
</script> |
|||
|
|||
<template> |
|||
<Modal title="自动推导数据类型"> |
|||
<div class="space-y-2 px-2"> |
|||
<p>类型来源:{{ data?.method }}</p> |
|||
<p>接收内容:{{ data?.message }}</p> |
|||
</div> |
|||
</Modal> |
|||
</template> |
|||
@ -0,0 +1,13 @@ |
|||
import { createVbenModal } from '@vben/common-ui'; |
|||
|
|||
export interface ExplicitModalData { |
|||
message: string; |
|||
method: '显式泛型'; |
|||
} |
|||
|
|||
export interface FactoryModalData { |
|||
message: string; |
|||
method: '契约工厂'; |
|||
} |
|||
|
|||
export const useFactoryModal = createVbenModal<FactoryModalData>(); |
|||
@ -0,0 +1,24 @@ |
|||
<script setup lang="ts"> |
|||
import type { ExplicitModalData } from './typed-data-contract'; |
|||
|
|||
import { ref } from 'vue'; |
|||
|
|||
import { useVbenModal } from '@vben/common-ui'; |
|||
|
|||
const data = ref<ExplicitModalData>(); |
|||
|
|||
const [Modal, modalApi] = useVbenModal<ExplicitModalData>({ |
|||
onOpenChange(isOpen) { |
|||
data.value = isOpen ? modalApi.getData() : undefined; |
|||
}, |
|||
}); |
|||
</script> |
|||
|
|||
<template> |
|||
<Modal title="显式泛型数据类型"> |
|||
<div class="space-y-2 px-2"> |
|||
<p>类型来源:{{ data?.method }}</p> |
|||
<p>接收内容:{{ data?.message }}</p> |
|||
</div> |
|||
</Modal> |
|||
</template> |
|||
@ -0,0 +1,24 @@ |
|||
<script setup lang="ts"> |
|||
import type { FactoryModalData } from './typed-data-contract'; |
|||
|
|||
import { ref } from 'vue'; |
|||
|
|||
import { useFactoryModal } from './typed-data-contract'; |
|||
|
|||
const data = ref<FactoryModalData>(); |
|||
|
|||
const [Modal, modalApi] = useFactoryModal({ |
|||
onOpenChange(isOpen) { |
|||
data.value = isOpen ? modalApi.getData() : undefined; |
|||
}, |
|||
}); |
|||
</script> |
|||
|
|||
<template> |
|||
<Modal title="契约工厂数据类型"> |
|||
<div class="space-y-2 px-2"> |
|||
<p>类型来源:{{ data?.method }}</p> |
|||
<p>接收内容:{{ data?.message }}</p> |
|||
</div> |
|||
</Modal> |
|||
</template> |
|||
Loading…
Reference in new issue