manager.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. interface RegisterParams {
  2. key: string; // 唯一标识
  3. show:
  4. | ((...p: any) => Promise<"close" | undefined | void>)
  5. | ((...p: any) => "close" | undefined | void); // 显示函数
  6. hide?: Function; // 隐藏函数
  7. }
  8. class DialogManage {
  9. private _dialogs: Map<string, RegisterParams>; // 存储所有的dialogManage
  10. private _resolves: Map<string, Function>;
  11. constructor() {
  12. this._dialogs = new Map();
  13. this._resolves = new Map();
  14. }
  15. registerDialog({ key, show, hide }: RegisterParams) {
  16. this._dialogs.set(key, {
  17. key,
  18. show,
  19. hide,
  20. });
  21. }
  22. unregisterDialog(key: string) {
  23. this._dialogs.delete(key);
  24. }
  25. showDialog(key: string, ...args: any[]) {
  26. return new Promise((resolve) => {
  27. const dialog = this._dialogs.get(key);
  28. if (dialog?.show) {
  29. const res = dialog.show(...args);
  30. if (res === "close") {
  31. return resolve("close");
  32. }
  33. this._resolves.set(key, resolve);
  34. } else {
  35. console.error(`Dialog with key ${key} not found`);
  36. resolve("error");
  37. }
  38. });
  39. }
  40. hideDialog(key: string, ...args: any[]) {
  41. const dialog = this._dialogs.get(key);
  42. if (dialog) {
  43. dialog.hide && dialog.hide(...args);
  44. } else {
  45. console.error(`Dialog with key ${key} not found`);
  46. }
  47. let resolveFun = this._resolves.get(key);
  48. if (resolveFun && typeof resolveFun === "function") {
  49. resolveFun("close");
  50. this._resolves.delete(key);
  51. }
  52. }
  53. goTarget(key: string) {
  54. // const dialog = this._dialogs.get(key);
  55. let resolveFun = this._resolves.get(key);
  56. if (resolveFun && typeof resolveFun === "function") {
  57. resolveFun("target");
  58. this._resolves.delete(key);
  59. }
  60. }
  61. }
  62. const dialogManage = new DialogManage();
  63. // 为 Window 类型添加自定义属性 dialogManage
  64. global.dialogManage = dialogManage;
  65. export default dialogManage;