setupAntdPopupBehavior.ts 1.0 KB

123456789101112131415161718192021222324252627282930313233
  1. import { Modal } from 'ant-design-vue';
  2. const PATCHED_KEY = '__jeesiteMaskClosablePatched__';
  3. const MODAL_METHODS = ['confirm', 'info', 'success', 'error', 'warning', 'warn'] as const;
  4. type PopupComponent = {
  5. props?: Record<string, any>;
  6. };
  7. function setBooleanPropDefault(component: PopupComponent, propName: string, defaultValue: boolean) {
  8. const prop = component?.props?.[propName];
  9. if (!prop || typeof prop !== 'object') return;
  10. prop.default = defaultValue;
  11. }
  12. function patchModalMethod(methodName: (typeof MODAL_METHODS)[number]) {
  13. const modalApi = Modal as unknown as Record<string, any>;
  14. const origin = modalApi[methodName];
  15. if (typeof origin !== 'function' || origin[PATCHED_KEY]) return;
  16. const patched = (config: Record<string, any> = {}) =>
  17. origin({
  18. ...config,
  19. maskClosable: false,
  20. });
  21. patched[PATCHED_KEY] = true;
  22. modalApi[methodName] = patched;
  23. }
  24. export function setupAntdPopupBehavior() {
  25. setBooleanPropDefault(Modal as unknown as PopupComponent, 'maskClosable', false);
  26. MODAL_METHODS.forEach(patchModalMethod);
  27. }