123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- "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<PromotionRep[], { summery: { showType: 1 | 2 } }>({
- url: "/v1/api/front/pop_list",
- method: "POST",
- })
- .then((res) => {
- if (res.code === 200) return res;
- });
- };
- const AutoShowDialog = () => {
- const [data, setData] = React.useState<PromotionRep[]>([]);
- 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;
|