message.ts 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import type { VNode } from "vue";
  2. import { isFunction } from "@pureadmin/utils";
  3. import { type MessageHandler, ElMessage } from "element-plus";
  4. type messageStyle = "el" | "antd";
  5. type messageTypes = "info" | "success" | "warning" | "error";
  6. interface MessageParams {
  7. /** 消息类型,可选 `info` 、`success` 、`warning` 、`error` ,默认 `info` */
  8. type?: messageTypes;
  9. /** 是否纯色,默认 `false` */
  10. plain?: boolean;
  11. /** 自定义图标,该属性会覆盖 `type` 的图标 */
  12. icon?: any;
  13. /** 是否将 `message` 属性作为 `HTML` 片段处理,默认 `false` */
  14. dangerouslyUseHTMLString?: boolean;
  15. /** 消息风格,可选 `el` 、`antd` ,默认 `antd` */
  16. customClass?: messageStyle;
  17. /** 显示时间,单位为毫秒。设为 `0` 则不会自动关闭,`element-plus` 默认是 `3000` ,平台改成默认 `2000` */
  18. duration?: number;
  19. /** 是否显示关闭按钮,默认值 `false` */
  20. showClose?: boolean;
  21. /** `Message` 距离窗口顶部的偏移量,默认 `16` */
  22. offset?: number;
  23. /** 设置组件的根元素,默认 `document.body` */
  24. appendTo?: string | HTMLElement;
  25. /** 合并内容相同的消息,不支持 `VNode` 类型的消息,默认值 `false` */
  26. grouping?: boolean;
  27. /** 重复次数,类似于 `Badge` 。当和 `grouping` 属性一起使用时作为初始数量使用,默认值 `1` */
  28. repeatNum?: number;
  29. /** 关闭时的回调函数, 参数为被关闭的 `message` 实例 */
  30. onClose?: Function | null;
  31. }
  32. /** 用法非常简单,参考 src/views/components/message/index.vue 文件 */
  33. /**
  34. * `Message` 消息提示函数
  35. */
  36. const message = (
  37. message: string | VNode | (() => VNode),
  38. params?: MessageParams
  39. ): MessageHandler => {
  40. if (!params) {
  41. return ElMessage({
  42. message,
  43. customClass: "pure-message"
  44. });
  45. } else {
  46. const {
  47. icon,
  48. type = "info",
  49. plain = false,
  50. dangerouslyUseHTMLString = false,
  51. customClass = "antd",
  52. duration = 2000,
  53. showClose = false,
  54. offset = 16,
  55. appendTo = document.body,
  56. grouping = false,
  57. repeatNum = 1,
  58. onClose
  59. } = params;
  60. return ElMessage({
  61. message,
  62. icon,
  63. type,
  64. plain,
  65. dangerouslyUseHTMLString,
  66. duration,
  67. showClose,
  68. offset,
  69. appendTo,
  70. grouping,
  71. repeatNum,
  72. // 全局搜 pure-message 即可知道该类的样式位置
  73. customClass: customClass === "antd" ? "pure-message" : "",
  74. onClose: () => (isFunction(onClose) ? onClose() : null)
  75. });
  76. }
  77. };
  78. /**
  79. * 关闭所有 `Message` 消息提示函数
  80. */
  81. const closeAllMessage = (): void => ElMessage.closeAll();
  82. export { message, closeAllMessage };