import type { ModalFunc, ModalFuncProps } from 'ant-design-vue/lib/modal/Modal' import { Modal, message as Message, notification } from 'ant-design-vue' import { InfoCircleFilled, CheckCircleFilled, CloseCircleFilled } from '@ant-design/icons-vue' import { NotificationArgsProps, ConfigProps } from 'ant-design-vue/lib/notification' import { useI18n } from './useI18n' import { isString } from '@/utils/is' export interface NotifyApi { info(config: NotificationArgsProps): void success(config: NotificationArgsProps): void error(config: NotificationArgsProps): void warn(config: NotificationArgsProps): void warning(config: NotificationArgsProps): void open(args: NotificationArgsProps): void close(key: String): void config(options: ConfigProps): void destroy(): void } export declare type NotificationPlacement = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' export declare type IconType = 'success' | 'info' | 'error' | 'warning' export interface ModalOptionsEx extends Omit { iconType: 'warning' | 'success' | 'error' | 'info' } export type ModalOptionsPartial = Partial & Pick interface ConfirmOptions { info: ModalFunc success: ModalFunc error: ModalFunc warn: ModalFunc warning: ModalFunc } function getIcon(iconType: string) { if (iconType === 'warning') { return } else if (iconType === 'success') { return } else if (iconType === 'info') { return } else { return } } function renderContent({ content }: Pick) { if (isString(content)) { return
${content as string}
`}> } else { return content } } /** * @description: Create confirmation box */ function createConfirm(options: ModalOptionsEx): ConfirmOptions { const iconType = options.iconType || 'warning' Reflect.deleteProperty(options, 'iconType') const opt: ModalFuncProps = { centered: true, icon: getIcon(iconType), ...options, content: renderContent(options) } return Modal.confirm(opt) as unknown as ConfirmOptions } const getBaseOptions = () => { const { t } = useI18n() return { okText: t('common.okText'), centered: true } } function createModalOptions(options: ModalOptionsPartial, icon: string): ModalOptionsPartial { return { ...getBaseOptions(), ...options, content: renderContent(options), icon: getIcon(icon) } } function createSuccessModal(options: ModalOptionsPartial) { return Modal.success(createModalOptions(options, 'success')) } function createErrorModal(options: ModalOptionsPartial) { return Modal.error(createModalOptions(options, 'error')) } function createInfoModal(options: ModalOptionsPartial) { return Modal.info(createModalOptions(options, 'info')) } function createWarningModal(options: ModalOptionsPartial) { return Modal.warning(createModalOptions(options, 'warning')) } notification.config({ placement: 'topRight', duration: 3 }) /** * @description: message */ export function useMessage() { return { createMessage: Message, notification: notification as NotifyApi, createConfirm: createConfirm, createSuccessModal, createErrorModal, createInfoModal, createWarningModal } }