modal.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. import type { Component, Ref } from 'vue';
  2. import type { ModalApi } from './modal-api';
  3. export interface ModalProps {
  4. /**
  5. * 是否要挂载到内容区域
  6. * @default false
  7. */
  8. appendToMain?: boolean;
  9. /**
  10. * 是否显示边框
  11. * @default false
  12. */
  13. bordered?: boolean;
  14. /**
  15. * 取消按钮文字
  16. */
  17. cancelText?: string;
  18. /**
  19. * 是否居中
  20. * @default false
  21. */
  22. centered?: boolean;
  23. class?: string;
  24. /**
  25. * 是否显示右上角的关闭按钮
  26. * @default true
  27. */
  28. closable?: boolean;
  29. /**
  30. * 点击弹窗遮罩是否关闭弹窗
  31. * @default true
  32. */
  33. closeOnClickModal?: boolean;
  34. /**
  35. * 按下 ESC 键是否关闭弹窗
  36. * @default true
  37. */
  38. closeOnPressEscape?: boolean;
  39. /**
  40. * 禁用确认按钮
  41. */
  42. confirmDisabled?: boolean;
  43. /**
  44. * 确定按钮 loading
  45. * @default false
  46. */
  47. confirmLoading?: boolean;
  48. /**
  49. * 确定按钮文字
  50. */
  51. confirmText?: string;
  52. contentClass?: string;
  53. /**
  54. * 弹窗描述
  55. */
  56. description?: string;
  57. /**
  58. * 是否可拖拽
  59. * @default false
  60. */
  61. draggable?: boolean;
  62. /**
  63. * 是否显示底部
  64. * @default true
  65. */
  66. footer?: boolean;
  67. footerClass?: string;
  68. /**
  69. * 是否全屏
  70. * @default false
  71. */
  72. fullscreen?: boolean;
  73. /**
  74. * 是否显示全屏按钮
  75. * @default true
  76. */
  77. fullscreenButton?: boolean;
  78. /**
  79. * 是否显示顶栏
  80. * @default true
  81. */
  82. header?: boolean;
  83. headerClass?: string;
  84. /**
  85. * 弹窗是否显示
  86. * @default false
  87. */
  88. loading?: boolean;
  89. /**
  90. * 是否显示遮罩
  91. * @default true
  92. */
  93. modal?: boolean;
  94. /**
  95. * 是否自动聚焦
  96. */
  97. openAutoFocus?: boolean;
  98. /**
  99. * 弹窗遮罩模糊效果
  100. */
  101. overlayBlur?: number;
  102. /**
  103. * 是否显示取消按钮
  104. * @default true
  105. */
  106. showCancelButton?: boolean;
  107. /**
  108. * 是否显示确认按钮
  109. * @default true
  110. */
  111. showConfirmButton?: boolean;
  112. /**
  113. * 弹窗标题
  114. */
  115. title?: string;
  116. /**
  117. * 弹窗标题提示
  118. */
  119. titleTooltip?: string;
  120. /**
  121. * 弹窗层级
  122. */
  123. zIndex?: number;
  124. }
  125. export interface ModalState extends ModalProps {
  126. /** 弹窗打开状态 */
  127. isOpen?: boolean;
  128. /**
  129. * 共享数据
  130. */
  131. sharedData?: Record<string, any>;
  132. }
  133. export type ExtendedModalApi = ModalApi & {
  134. useStore: <T = NoInfer<ModalState>>(
  135. selector?: (state: NoInfer<ModalState>) => T,
  136. ) => Readonly<Ref<T>>;
  137. };
  138. export interface ModalApiOptions extends ModalState {
  139. /**
  140. * 独立的弹窗组件
  141. */
  142. connectedComponent?: Component;
  143. /**
  144. * 在关闭时销毁弹窗。仅在使用 connectedComponent 时有效
  145. */
  146. destroyOnClose?: boolean;
  147. /**
  148. * 关闭前的回调,返回 false 可以阻止关闭
  149. * @returns
  150. */
  151. onBeforeClose?: () => void;
  152. /**
  153. * 点击取消按钮的回调
  154. */
  155. onCancel?: () => void;
  156. /**
  157. * 弹窗关闭动画结束的回调
  158. * @returns
  159. */
  160. onClosed?: () => void;
  161. /**
  162. * 点击确定按钮的回调
  163. */
  164. onConfirm?: () => void;
  165. /**
  166. * 弹窗状态变化回调
  167. * @param isOpen
  168. * @returns
  169. */
  170. onOpenChange?: (isOpen: boolean) => void;
  171. /**
  172. * 弹窗打开动画结束的回调
  173. * @returns
  174. */
  175. onOpened?: () => void;
  176. }