diff --git a/front/components/GlobalDrawer.vue b/front/components/GlobalDrawer.vue index f3dd0e7..8f7f0d9 100644 --- a/front/components/GlobalDrawer.vue +++ b/front/components/GlobalDrawer.vue @@ -8,9 +8,10 @@ const drawer = computed(() => store?._get('drawer')) const currentDrawer = computed(() => drawer?.value?.[drawer?.value?.length - 1]) const render = computed(() => currentDrawer?.value?.render) +const hide = computed(() => currentDrawer?.value?.onClose) const Children = () => createVNode(render.value, { - hide: () => store?._set('drawer', drawer?.value?.slice(0, -1)), + hide, }) @@ -20,7 +21,7 @@ const Children = () => @update:open=" (open) => { if (!open && drawer?.length > 0) { - store?._set('drawer', drawer?.slice(0, -1)) + hide() } } " diff --git a/front/composables/useMyAppShare.ts b/front/composables/useMyAppShare.ts index a731247..8aa9ceb 100644 --- a/front/composables/useMyAppShare.ts +++ b/front/composables/useMyAppShare.ts @@ -1,5 +1,5 @@ import { toast } from 'vue-sonner' - +declare const window: any let shareIdTokenMap: WeakMap<{ share_id: string }, string> const getShareToken = async (share_id: string): Promise => { @@ -34,9 +34,8 @@ const downloadFile = async (share_id: string) => { const token = await getShareToken(share_id) if (!token) { throw new Error('获取token失败') - return } - ;(window as any)?.open(`/api/download?token=${token}`) + window?.open(`/api/download?token=${token}`) } catch (e) { toast.error((e as any)?.data?.message || e) } diff --git a/front/lib/showDrawer.ts b/front/lib/showDrawer.ts index cca8295..dd2a01b 100644 --- a/front/lib/showDrawer.ts +++ b/front/lib/showDrawer.ts @@ -1,11 +1,21 @@ interface DrawerProps { - render: (props: { hide: () => void }) => Component + render: (props: { hide: () => void }) => Component } const showDrawer = (props: DrawerProps) => { - const { render } = props || {} - const store = useStore() - store?._set('drawer', [...(store?._get('drawer')?.value || []), { render }]) + const key = Math.random().toString(36).slice(2, 8) + return new Promise((res) => { + const { render } = props || {} + const onClose = () => { + store._set( + 'drawer', + (store._get('drawer')?.value ?? [])?.filter((item: any) => item.key !== key) + ) + res() + } + const store = useStore() + store._set('drawer', [...(store._get('drawer')?.value || []), { render, onClose, key }]) + }) } export default showDrawer