modal.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. import type { ModalApi } from './modal-api';
  2. import type { Component, Ref } from 'vue';
  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. * @default true
  101. */
  102. showCancelButton?: boolean;
  103. /**
  104. * 是否显示确认按钮
  105. * @default true
  106. */
  107. showConfirmButton?: boolean;
  108. /**
  109. * 弹窗标题
  110. */
  111. title?: string;
  112. /**
  113. * 弹窗标题提示
  114. */
  115. titleTooltip?: string;
  116. /**
  117. * 弹窗层级
  118. */
  119. zIndex?: number;
  120. }
  121. export interface ModalState extends ModalProps {
  122. /** 弹窗打开状态 */
  123. isOpen?: boolean;
  124. /**
  125. * 共享数据
  126. */
  127. sharedData?: Record<string, any>;
  128. }
  129. export type ExtendedModalApi = {
  130. useStore: <T = NoInfer<ModalState>>(
  131. selector?: (state: NoInfer<ModalState>) => T,
  132. ) => Readonly<Ref<T>>;
  133. } & ModalApi;
  134. export interface ModalApiOptions extends ModalState {
  135. /**
  136. * 独立的弹窗组件
  137. */
  138. connectedComponent?: Component;
  139. /**
  140. * 在关闭时销毁弹窗。仅在使用 connectedComponent 时有效
  141. */
  142. destroyOnClose?: boolean;
  143. /**
  144. * 关闭前的回调,返回 false 可以阻止关闭
  145. * @returns
  146. */
  147. onBeforeClose?: () => void;
  148. /**
  149. * 点击取消按钮的回调
  150. */
  151. onCancel?: () => void;
  152. /**
  153. * 弹窗关闭动画结束的回调
  154. * @returns
  155. */
  156. onClosed?: () => void;
  157. /**
  158. * 点击确定按钮的回调
  159. */
  160. onConfirm?: () => void;
  161. /**
  162. * 弹窗状态变化回调
  163. * @param isOpen
  164. * @returns
  165. */
  166. onOpenChange?: (isOpen: boolean) => void;
  167. /**
  168. * 弹窗打开动画结束的回调
  169. * @returns
  170. */
  171. onOpened?: () => void;
  172. }