app-message.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /**
  2. * 全局轻提示(顶部居中、过一会儿自动消失)。
  3. *
  4. * 用 **Ant Design Vue 的 `message`**(本项目已依赖 ant-design-vue 4.x,CSS-in-JS 自带样式)
  5. * —— 就是设计稿那种「粉底 + 红色感叹号的小条」。
  6. *
  7. * 再包一层是为了统一时长与默认类型,调用方不必到处 import antd,
  8. * 将来换实现也只改这一个文件。
  9. */
  10. import { message } from "ant-design-vue";
  11. export type AppMessageType = "error" | "warning" | "success" | "info";
  12. /** 自动消失时间(秒)。AntD 默认 3s,这里显式写出来便于统一调整 */
  13. export const APP_MESSAGE_DURATION = 2;
  14. /**
  15. * 弹一条轻提示。`text` 为空时什么都不做(避免弹出一个空气泡)。
  16. * 默认 `error`(红):现有调用点都是「这事没成」。
  17. */
  18. export const showAppMessage = (text: string, type: AppMessageType = "error"): void => {
  19. const content = String(text ?? "").trim();
  20. if (!content) return;
  21. const api = message as unknown as Record<
  22. AppMessageType,
  23. (c: string, d: number) => void | Promise<unknown>
  24. >;
  25. try {
  26. // ⚠️ antd 的 message 返回 Promise(挂载/更新是异步的)——失败要吞掉,
  27. // 否则会变成 unhandled rejection(提示失败不该反过来影响业务)
  28. void Promise.resolve(api[type](content, APP_MESSAGE_DURATION)).catch((err) => {
  29. /* console.warn("[app-message] 弹出提示失败:", (err as Error)?.message || err); */
  30. });
  31. } catch (err) {
  32. /* console.warn("[app-message] 弹出提示失败:", (err as Error)?.message || err); */
  33. }
  34. };
  35. /** 关掉当前所有轻提示(切会话等场景要清场时用) */
  36. export const clearAppMessages = (): void => {
  37. message.destroy();
  38. };