type.ts 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. import type { CSSProperties, VNode, Component } from "vue";
  2. type DoneFn = (cancel?: boolean) => void;
  3. type EventType = "open" | "close" | "openAutoFocus" | "closeAutoFocus";
  4. type ArgsType = {
  5. /** `cancel` 点击取消按钮、`sure` 点击确定按钮、`close` 点击右上角关闭按钮或者空白页 */
  6. command: "cancel" | "sure" | "close";
  7. };
  8. /** https://element-plus.org/zh-CN/component/dialog.html#attributes */
  9. type DialogProps = {
  10. /** `Dialog` 的显示与隐藏 */
  11. visible?: boolean;
  12. /** `Dialog` 的标题 */
  13. title?: string;
  14. /** `Dialog` 的宽度,默认 `50%` */
  15. width?: string | number;
  16. /** 是否为全屏 `Dialog`(会一直处于全屏状态,除非弹框关闭),默认 `false`,`fullscreen` 和 `fullscreenIcon` 都传时只有 `fullscreen` 会生效 */
  17. fullscreen?: boolean;
  18. /** 是否显示全屏操作图标,默认 `false`,`fullscreen` 和 `fullscreenIcon` 都传时只有 `fullscreen` 会生效 */
  19. fullscreenIcon?: boolean;
  20. /** `Dialog CSS` 中的 `margin-top` 值,默认 `15vh` */
  21. top?: string;
  22. /** 是否需要遮罩层,默认 `true` */
  23. modal?: boolean;
  24. /** `Dialog` 自身是否插入至 `body` 元素上。嵌套的 `Dialog` 必须指定该属性并赋值为 `true`,默认 `false` */
  25. appendToBody?: boolean;
  26. /** 是否在 `Dialog` 出现时将 `body` 滚动锁定,默认 `true` */
  27. lockScroll?: boolean;
  28. /** `Dialog` 的自定义类名 */
  29. class?: string;
  30. /** `Dialog` 的自定义样式 */
  31. style?: CSSProperties;
  32. /** `Dialog` 打开的延时时间,单位毫秒,默认 `0` */
  33. openDelay?: number;
  34. /** `Dialog` 关闭的延时时间,单位毫秒,默认 `0` */
  35. closeDelay?: number;
  36. /** 是否可以通过点击 `modal` 关闭 `Dialog`,默认 `true` */
  37. closeOnClickModal?: boolean;
  38. /** 是否可以通过按下 `ESC` 关闭 `Dialog`,默认 `true` */
  39. closeOnPressEscape?: boolean;
  40. /** 是否显示关闭按钮,默认 `true` */
  41. showClose?: boolean;
  42. /** 关闭前的回调,会暂停 `Dialog` 的关闭. 回调函数内执行 `done` 参数方法的时候才是真正关闭对话框的时候 */
  43. beforeClose?: (done: DoneFn) => void;
  44. /** 为 `Dialog` 启用可拖拽功能,默认 `false` */
  45. draggable?: boolean;
  46. /** 是否让 `Dialog` 的 `header` 和 `footer` 部分居中排列,默认 `false` */
  47. center?: boolean;
  48. /** 是否水平垂直对齐对话框,默认 `false` */
  49. alignCenter?: boolean;
  50. /** 当关闭 `Dialog` 时,销毁其中的元素,默认 `false` */
  51. destroyOnClose?: boolean;
  52. };
  53. type BtnClickDialog = {
  54. options?: DialogOptions;
  55. index?: number;
  56. };
  57. type BtnClickButton = {
  58. btn?: ButtonProps;
  59. index?: number;
  60. };
  61. /** https://element-plus.org/zh-CN/component/button.html#button-attributes */
  62. type ButtonProps = {
  63. /** 按钮文字 */
  64. label: string;
  65. /** 按钮尺寸 */
  66. size?: "large" | "default" | "small";
  67. /** 按钮类型 */
  68. type?: "primary" | "success" | "warning" | "danger" | "info";
  69. /** 是否为朴素按钮,默认 `false` */
  70. plain?: boolean;
  71. /** 是否为文字按钮,默认 `false` */
  72. text?: boolean;
  73. /** 是否显示文字按钮背景颜色,默认 `false` */
  74. bg?: boolean;
  75. /** 是否为链接按钮,默认 `false` */
  76. link?: boolean;
  77. /** 是否为圆角按钮,默认 `false` */
  78. round?: boolean;
  79. /** 是否为圆形按钮,默认 `false` */
  80. circle?: boolean;
  81. /** 是否为加载中状态,默认 `false` */
  82. loading?: boolean;
  83. /** 自定义加载中状态图标组件 */
  84. loadingIcon?: string | Component;
  85. /** 按钮是否为禁用状态,默认 `false` */
  86. disabled?: boolean;
  87. /** 图标组件 */
  88. icon?: string | Component;
  89. /** 是否开启原生 `autofocus` 属性,默认 `false` */
  90. autofocus?: boolean;
  91. /** 原生 `type` 属性,默认 `button` */
  92. nativeType?: "button" | "submit" | "reset";
  93. /** 自动在两个中文字符之间插入空格 */
  94. autoInsertSpace?: boolean;
  95. /** 自定义按钮颜色, 并自动计算 `hover` 和 `active` 触发后的颜色 */
  96. color?: string;
  97. /** `dark` 模式, 意味着自动设置 `color` 为 `dark` 模式的颜色,默认 `false` */
  98. dark?: boolean;
  99. /** 自定义元素标签 */
  100. tag?: string | Component;
  101. /** 点击按钮后触发的回调 */
  102. btnClick?: ({
  103. dialog,
  104. button
  105. }: {
  106. /** 当前 `Dialog` 信息 */
  107. dialog: BtnClickDialog;
  108. /** 当前 `button` 信息 */
  109. button: BtnClickButton;
  110. }) => void;
  111. };
  112. interface DialogOptions extends DialogProps {
  113. /** 内容区组件的 `props`,可通过 `defineProps` 接收 */
  114. props?: any;
  115. /** 是否隐藏 `Dialog` 按钮操作区的内容 */
  116. hideFooter?: boolean;
  117. /**
  118. * @description 自定义对话框标题的内容渲染器
  119. * @see {@link https://element-plus.org/zh-CN/component/dialog.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E5%A4%B4%E9%83%A8}
  120. */
  121. headerRenderer?: ({
  122. close,
  123. titleId,
  124. titleClass
  125. }: {
  126. close: Function;
  127. titleId: string;
  128. titleClass: string;
  129. }) => VNode | Component;
  130. /** 自定义内容渲染器 */
  131. contentRenderer?: ({
  132. options,
  133. index
  134. }: {
  135. options: DialogOptions;
  136. index: number;
  137. }) => VNode | Component;
  138. /** 自定义按钮操作区的内容渲染器,会覆盖`footerButtons`以及默认的 `取消` 和 `确定` 按钮 */
  139. footerRenderer?: ({
  140. options,
  141. index
  142. }: {
  143. options: DialogOptions;
  144. index: number;
  145. }) => VNode | Component;
  146. /** 自定义底部按钮操作 */
  147. footerButtons?: Array<ButtonProps>;
  148. /** `Dialog` 打开后的回调 */
  149. open?: ({
  150. options,
  151. index
  152. }: {
  153. options: DialogOptions;
  154. index: number;
  155. }) => void;
  156. /** `Dialog` 关闭后的回调(只有点击右上角关闭按钮或者空白页关闭页面时才会触发) */
  157. close?: ({
  158. options,
  159. index
  160. }: {
  161. options: DialogOptions;
  162. index: number;
  163. }) => void;
  164. /** `Dialog` 关闭后的回调。 `args` 返回的 `command` 值解析:`cancel` 点击取消按钮、`sure` 点击确定按钮、`close` 点击右上角关闭按钮或者空白页 */
  165. closeCallBack?: ({
  166. options,
  167. index,
  168. args
  169. }: {
  170. options: DialogOptions;
  171. index: number;
  172. args: any;
  173. }) => void;
  174. /** 输入焦点聚焦在 `Dialog` 内容时的回调 */
  175. openAutoFocus?: ({
  176. options,
  177. index
  178. }: {
  179. options: DialogOptions;
  180. index: number;
  181. }) => void;
  182. /** 输入焦点从 `Dialog` 内容失焦时的回调 */
  183. closeAutoFocus?: ({
  184. options,
  185. index
  186. }: {
  187. options: DialogOptions;
  188. index: number;
  189. }) => void;
  190. /** 点击底部取消按钮的回调,会暂停 `Dialog` 的关闭. 回调函数内执行 `done` 参数方法的时候才是真正关闭对话框的时候 */
  191. beforeCancel?: (
  192. done: Function,
  193. {
  194. options,
  195. index
  196. }: {
  197. options: DialogOptions;
  198. index: number;
  199. }
  200. ) => void;
  201. /** 点击底部确定按钮的回调,会暂停 `Dialog` 的关闭. 回调函数内执行 `done` 参数方法的时候才是真正关闭对话框的时候 */
  202. beforeSure?: (
  203. done: Function,
  204. {
  205. options,
  206. index
  207. }: {
  208. options: DialogOptions;
  209. index: number;
  210. }
  211. ) => void;
  212. }
  213. export type { EventType, ArgsType, DialogProps, ButtonProps, DialogOptions };