UNPKG

press-plus

Version:
85 lines (76 loc) 1.88 kB
/* eslint-disable import/no-unresolved */ interface DialogInterface { confirm(options: any): Promise<any>; close(): void; install(): void; } // 定义 Dialog 组件类型 interface DialogComponent { (options: any): Promise<any>; confirm(options: any): Promise<any>; close(): void; install(): void; } let mDialog: DialogComponent; function getDialog() { return new Promise((resolve) => { if (mDialog) { resolve(mDialog); return; } Promise.all(Dialog.dialogComponent()) .then((comp) => { mDialog = comp?.[0]?.default; resolve(mDialog); }); }); } const Dialog = { dialogComponent: () => [ // #ifdef VUE3 import('press-ui/press-dialog/index' as any), // #endif // #ifdef VUE2 import('vant/lib/dialog' as any), import('vant/lib/dialog/style' as any), // #endif ], /** * 可以通过 Dialog.setComponent 指定其他组件库 * @example * ```ts * Dialog.setComponent(() => [ * import('press-ui/press-dialog/index'), * ]) * ``` */ setComponent(comp: () => Promise<any>[]) { Dialog.dialogComponent = comp; }, show: async (options: any) => { await getDialog(); const parsed = typeof options === 'object' ? { message: options.message || options.content, confirmButtonText: options.confirmButtonText || options.cancelText, cancelButtonText: options.cancelButtonText || options.confirmText, ...options, } : options; return mDialog(parsed); }, confirm: async (options: any) => { await getDialog(); return mDialog.confirm(options); }, close: () => { getDialog().then(() => { mDialog.close(); }); }, install: () => { getDialog().then(() => { mDialog.install(); }); }, }; const DialogTyped = Dialog as DialogInterface; export { DialogTyped as Dialog };