"use client"; import { PromotionRep } from "@/api/home"; import { server } from "@/utils/client"; import { getToken } from "@/utils/Cookies"; import dayjs from "dayjs"; import React from "react"; import dialogManage from "./manager"; //"ImgDialog","WheelSection", "SignInSection", "HomePromotion", "TextDialog" const getPromotions = async () => { return server .request({ url: "/v1/api/front/pop_list", method: "POST", }) .then((res) => { if (res.code === 200) return res; }); }; const AutoShowDialog = () => { const [data, setData] = React.useState([]); React.useEffect(() => { getData(); }, []); React.useEffect(() => { if (!data.length) return; setTimeout(() => { doShow(); }, 300); // eslint-disable-next-line react-hooks/exhaustive-deps }, [data]); const getData = async () => { const res = await getPromotions(); if (res?.code === 200 && res?.data?.length) { // res.data[0].content_type = 3; // res.data[0].action_params = 'dialogManage.showDialog("SignInSection")'; // res.data[0].pop_type = 1; setData(res.data); } }; const checkIsShowed = (data: PromotionRep) => { const showTime = localStorage.getItem(`dialog_${data.id}`); if (showTime) { const nextDay = dayjs(Number(showTime)).add(1, "day").format("YYYY-MM-DD"); if ((dayjs(nextDay).isAfter(dayjs()), "day")) { return true; } } return false; }; const doShow = async () => { //记录点击的索引 let showIndex = sessionStorage.getItem("dialogShow"); let startShow = showIndex ? Number(showIndex) : 0; if (startShow > data.length - 1) { startShow = 0; } for (let i = startShow; i < data.length; i++) { const curData = data[i]; // 一天只展示一次 if (curData.pop_type === 1 && checkIsShowed(curData)) continue; // 未登录的用户不展示 if (curData.pop_type === 2 && !getToken()) continue; try { switch (curData.content_type) { // 图片展示 case 1: await dialogManage.showDialog("ImgDialog", curData); break; // 富文本展示 case 2: await dialogManage.showDialog("TextDialog", curData); break; // 直接调用方法 case 3: curData?.action_params ? await eval(curData?.action_params || "") : ""; break; } } catch { continue; } // 一天只展示一次 if (curData.pop_type === 1) { localStorage.setItem(`dialog_${curData.id}`, Date.now().toString()); } // 记录当前展示到几个了 sessionStorage.setItem("dialogShow", `${i + 1}`); } }; return null; }; export default AutoShowDialog;