|
@@ -1,10 +1,26 @@
|
|
|
"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<string[]>([]);
|
|
|
+ const [data, setData] = React.useState<PromotionRep[]>([]);
|
|
|
|
|
|
React.useEffect(() => {
|
|
|
getData();
|
|
@@ -18,18 +34,62 @@ const AutoShowDialog = () => {
|
|
|
}, [data]);
|
|
|
|
|
|
const getData = async () => {
|
|
|
- //"ImgDialog",
|
|
|
- setData(["WheelSection", "SignInSection", "HomePromotion"]);
|
|
|
+ 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 key = data[i];
|
|
|
- await dialogManage.showDialog(key);
|
|
|
+ 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}`);
|
|
|
}
|
|
|
};
|