| 123456789101112131415161718192021222324252627282930313233 |
- import { Modal } from 'ant-design-vue';
- const PATCHED_KEY = '__jeesiteMaskClosablePatched__';
- const MODAL_METHODS = ['confirm', 'info', 'success', 'error', 'warning', 'warn'] as const;
- type PopupComponent = {
- props?: Record<string, any>;
- };
- function setBooleanPropDefault(component: PopupComponent, propName: string, defaultValue: boolean) {
- const prop = component?.props?.[propName];
- if (!prop || typeof prop !== 'object') return;
- prop.default = defaultValue;
- }
- function patchModalMethod(methodName: (typeof MODAL_METHODS)[number]) {
- const modalApi = Modal as unknown as Record<string, any>;
- const origin = modalApi[methodName];
- if (typeof origin !== 'function' || origin[PATCHED_KEY]) return;
- const patched = (config: Record<string, any> = {}) =>
- origin({
- ...config,
- maskClosable: false,
- });
- patched[PATCHED_KEY] = true;
- modalApi[methodName] = patched;
- }
- export function setupAntdPopupBehavior() {
- setBooleanPropDefault(Modal as unknown as PopupComponent, 'maskClosable', false);
- MODAL_METHODS.forEach(patchModalMethod);
- }
|