index.tsx 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. "use client";
  2. import { ModalEnum } from "@/components/Box/types";
  3. import { useRouter } from "@/i18n/routing";
  4. import { Mask } from "antd-mobile";
  5. import clsx from "clsx";
  6. import React from "react";
  7. import dialogManage from "../manager";
  8. import styles from "./index.module.scss";
  9. const ImgDialog = () => {
  10. const keyName = "TextDialog"; // 确保这个keyName是唯一的,与其他地方的keyName不同,以避免冲突
  11. const [data, setData] = React.useState<any>({});
  12. const [visible, setVisible] = React.useState<boolean>(false); // 初始值为false,不显示对话框
  13. const router = useRouter();
  14. const handler = {
  15. key: keyName,
  16. show(data: any, idx: number) {
  17. if (!data) return "close";
  18. setData(data);
  19. setVisible(true);
  20. },
  21. hide() {
  22. setVisible(false);
  23. },
  24. };
  25. React.useEffect(() => {
  26. dialogManage.registerDialog(handler);
  27. // eslint-disable-next-line react-hooks/exhaustive-deps
  28. }, []);
  29. const close = () => {
  30. dialogManage.hideDialog(keyName);
  31. };
  32. //点击功能, 1:无功能,2:跳转外部链接,3:跳转页面,4:跳转弹窗,5:跳转打开游戏,6:跳转Live Chat客服,7:跳转内部文档
  33. const doFun = async () => {
  34. switch (data.action_type) {
  35. case 2:
  36. window.open(data.action_params, "_blank");
  37. break;
  38. case 3:
  39. let path = data.action_params;
  40. if (data.activity_id) {
  41. path = `${data.action_params}?activity_id=${data.activity_id}`;
  42. }
  43. router.push(path);
  44. break;
  45. case 4:
  46. if (data.action_params === ModalEnum.red_packet) {
  47. dialogManage.showDialog("RedPacket");
  48. }
  49. if (data.action_params === ModalEnum.pwa_install) {
  50. dialogManage.showDialog("PwaInstall");
  51. }
  52. break;
  53. case 5:
  54. data?.action_params ? await eval(data?.action_params || "") : "";
  55. break;
  56. default:
  57. break;
  58. }
  59. };
  60. return (
  61. <>
  62. <Mask visible={visible} onMaskClick={close}>
  63. <div className={styles.imgDialog}>
  64. <div className={styles.imgDialogContainer}>
  65. <div
  66. dangerouslySetInnerHTML={{ __html: data?.content?.text }}
  67. className={clsx(styles.textBox, "ql-editor")}
  68. onClick={doFun}
  69. ></div>
  70. <div className={clsx(styles.close)} onClick={close}>
  71. <i
  72. className={clsx("iconfont icon-guanbi relative z-10 text-[.14rem]")}
  73. ></i>
  74. </div>
  75. </div>
  76. </div>
  77. </Mask>
  78. </>
  79. );
  80. };
  81. export default ImgDialog;