mirror of
https://github.com/keven1024/015.git
synced 2026-05-26 07:08:02 +00:00
fix: improve drawer management by adding onClose handler and refactoring GlobalDrawer component
This commit is contained in:
@@ -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,
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -20,7 +21,7 @@ const Children = () =>
|
||||
@update:open="
|
||||
(open) => {
|
||||
if (!open && drawer?.length > 0) {
|
||||
store?._set('drawer', drawer?.slice(0, -1))
|
||||
hide()
|
||||
}
|
||||
}
|
||||
"
|
||||
|
||||
@@ -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<string | undefined> => {
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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<void>((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
|
||||
|
||||
Reference in New Issue
Block a user