const key = Math.random().toString(36).slice(2, 8)
return new Promise((res) => {
const { render } = props || {}
- const onClose = (data?: T) => {
- store.drawer = (store.drawer ?? [])?.filter((item) => item.key !== key)
+ const store = useStore()
+ const onClose = async (data?: T) => {
+ store.drawer = store.drawer?.map((d) => (d.key === key ? { ...d, visible: false } : d))
+ await asyncWait(500)
+ store.drawer = (store.drawer ?? []).filter((d) => d.key !== key)
res(data)
}
- const store = useStore()
- store.drawer = [...(store.drawer || []), { render, onClose, key }]
+ store.drawer = [...(store.drawer || []), { render, onClose, key, visible: true }]
})
}
diff --git a/front/pages/dev.vue b/front/pages/dev.vue
index 79af02f..d1a3610 100644
--- a/front/pages/dev.vue
+++ b/front/pages/dev.vue
@@ -25,7 +25,38 @@ if (!isDev) {
@click="
async () => {
await showDrawer({
- render: ({ ...rest }) => h('div', { style: { height: '30vh' } }, '内容'),
+ render: ({ hide }) =>
+ h('div', { class: 'flex h-[30vh] flex-col gap-4' }, [
+ h('div', '第一层内容'),
+ h(
+ Button,
+ {
+ variant: 'outline',
+ onClick: () =>
+ showDrawer({
+ render: ({ hide: hideInner }) =>
+ h('div', { class: 'flex h-[30vh] flex-col gap-4' }, [
+ h('div', '第二层内容'),
+ h(
+ Button,
+ {
+ onClick: () => hideInner(),
+ },
+ () => '关闭第二层'
+ ),
+ ]),
+ }),
+ },
+ () => '打开第二层(showDrawer)'
+ ),
+ h(
+ Button,
+ {
+ onClick: () => hide(),
+ },
+ () => '关闭第一层'
+ ),
+ ]),
})
toast.success('被关闭')
}
@@ -72,7 +103,6 @@ if (!isDev) {
- 测试dayjs语言包渲染:{{ dayjs().add(1, 'day').fromNow() }}