|
@@ -0,0 +1,132 @@
|
|
|
+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<ModalFuncProps, 'iconType'> {
|
|
|
+ iconType: 'warning' | 'success' | 'error' | 'info';
|
|
|
+}
|
|
|
+export type ModalOptionsPartial = Partial<ModalOptionsEx> & Pick<ModalOptionsEx, 'content'>;
|
|
|
+
|
|
|
+interface ConfirmOptions {
|
|
|
+ info: ModalFunc;
|
|
|
+ success: ModalFunc;
|
|
|
+ error: ModalFunc;
|
|
|
+ warn: ModalFunc;
|
|
|
+ warning: ModalFunc;
|
|
|
+}
|
|
|
+
|
|
|
+function getIcon(iconType: string) {
|
|
|
+ try {
|
|
|
+ if (iconType === 'warning') {
|
|
|
+ return InfoCircleFilled;
|
|
|
+ } else if (iconType === 'success') {
|
|
|
+ return CheckCircleFilled;
|
|
|
+ } else if (iconType === 'info') {
|
|
|
+ return InfoCircleFilled;
|
|
|
+ } else {
|
|
|
+ return CloseCircleFilled;
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ console.log(e);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function renderContent({ content }: Pick<ModalOptionsEx, 'content'>) {
|
|
|
+ try {
|
|
|
+ if (isString(content)) {
|
|
|
+ return content;
|
|
|
+ } else {
|
|
|
+ return content;
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ console.log(e);
|
|
|
+ return content;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * @description: Create confirmation box
|
|
|
+ */
|
|
|
+function createConfirm(options: ModalOptionsEx): ReturnType<ModalFunc> {
|
|
|
+ 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);
|
|
|
+}
|
|
|
+
|
|
|
+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, 'close'));
|
|
|
+}
|
|
|
+
|
|
|
+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,
|
|
|
+ };
|
|
|
+}
|