From e3ec54722a0d6a980f7c4cb55686d6065f2e0dba Mon Sep 17 00:00:00 2001 From: ZRMYDYCG <547471919@qq.com> Date: Wed, 5 Mar 2025 12:16:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E2=9C=A8=EF=B8=8F=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=88=97=E8=A1=A8,=E5=B0=81=E8=A3=85?= =?UTF-8?q?=E5=BC=82=E6=AD=A5=E7=BB=84=E4=BB=B6hooks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/index.ts | 1 + src/hooks/modules/useAsyncComponent.ts | 35 ++++ .../components/add-contact-dialog.vue | 7 + .../contacts/components/contact-detail.vue | 7 + src/view/contacts/components/contact-list.vue | 179 ++++++++++++++++++ .../components/set-contect-info-dialog.vue | 7 + src/view/contacts/index.vue | 69 ++++++- 7 files changed, 303 insertions(+), 2 deletions(-) create mode 100644 src/hooks/modules/useAsyncComponent.ts create mode 100644 src/view/contacts/components/add-contact-dialog.vue create mode 100644 src/view/contacts/components/contact-detail.vue create mode 100644 src/view/contacts/components/contact-list.vue create mode 100644 src/view/contacts/components/set-contect-info-dialog.vue diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 8c3a9d6..9fd16cd 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -1,3 +1,4 @@ +export * from './modules/useAsyncComponent.ts' export * from './modules/useCurrentInstance.ts' export * from './modules/useLoadMore.ts' export * from './modules/usePageList.ts' diff --git a/src/hooks/modules/useAsyncComponent.ts b/src/hooks/modules/useAsyncComponent.ts new file mode 100644 index 0000000..d4df4ca --- /dev/null +++ b/src/hooks/modules/useAsyncComponent.ts @@ -0,0 +1,35 @@ +import { isFunction } from '@/utils/helper/is' +import type { DefineComponent } from 'vue' +import { defineAsyncComponent } from 'vue' + +interface AsyncComponentOptions { + component: () => Promise + wait?: () => Promise + timeout?: number +} + +export const useAsyncComponent = (options: AsyncComponentOptions): { AsyncComponent: DefineComponent } => { + const { component, wait, timeout } = options + + const loadDelay = async (wait: () => Promise) => { + if (!isFunction(wait)) { + throw new Error(`wait: ${wait}需要为函数`) + } + await wait() + } + + const AsyncComponent = defineAsyncComponent({ + // 加载函数 + loader: async () => { + if (wait) { + await loadDelay(wait) + } + return component() + }, + timeout, + }) + + return { + AsyncComponent, + } +} diff --git a/src/view/contacts/components/add-contact-dialog.vue b/src/view/contacts/components/add-contact-dialog.vue new file mode 100644 index 0000000..1017376 --- /dev/null +++ b/src/view/contacts/components/add-contact-dialog.vue @@ -0,0 +1,7 @@ + + + + + diff --git a/src/view/contacts/components/contact-detail.vue b/src/view/contacts/components/contact-detail.vue new file mode 100644 index 0000000..1017376 --- /dev/null +++ b/src/view/contacts/components/contact-detail.vue @@ -0,0 +1,7 @@ + + + + + diff --git a/src/view/contacts/components/contact-list.vue b/src/view/contacts/components/contact-list.vue new file mode 100644 index 0000000..2e6253a --- /dev/null +++ b/src/view/contacts/components/contact-list.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/src/view/contacts/components/set-contect-info-dialog.vue b/src/view/contacts/components/set-contect-info-dialog.vue new file mode 100644 index 0000000..1017376 --- /dev/null +++ b/src/view/contacts/components/set-contect-info-dialog.vue @@ -0,0 +1,7 @@ + + + + + diff --git a/src/view/contacts/index.vue b/src/view/contacts/index.vue index 7f6f978..1400e02 100644 --- a/src/view/contacts/index.vue +++ b/src/view/contacts/index.vue @@ -1,7 +1,72 @@ - +