message.ts 2.5 KB

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