|
@@ -1,10 +1,38 @@
|
|
"use client";
|
|
"use client";
|
|
|
|
+import {
|
|
|
|
+ ContinuousListItem,
|
|
|
|
+ ContinuousResult,
|
|
|
|
+ ContinuousRewardItem,
|
|
|
|
+ ContinuousStageItem,
|
|
|
|
+ getContinuousRechargeInfo,
|
|
|
|
+} from "@/api/activity";
|
|
import CutDown from "@/components/CutDown";
|
|
import CutDown from "@/components/CutDown";
|
|
import { useRouter } from "@/i18n/routing";
|
|
import { useRouter } from "@/i18n/routing";
|
|
import clsx from "clsx";
|
|
import clsx from "clsx";
|
|
|
|
+import { useSearchParams } from "next/navigation";
|
|
import React from "react";
|
|
import React from "react";
|
|
import styles from "./page.module.scss";
|
|
import styles from "./page.module.scss";
|
|
|
|
|
|
|
|
+interface Cfg1Item {
|
|
|
|
+ text: string;
|
|
|
|
+ text2: string;
|
|
|
|
+ key: number;
|
|
|
|
+ footer: string;
|
|
|
|
+ footer2?: string;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+interface StageItem extends ContinuousStageItem, Cfg1Item {}
|
|
|
|
+
|
|
|
|
+interface ListItem {
|
|
|
|
+ dayId: number;
|
|
|
|
+ data: ContinuousListItem;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+interface RewardItem {
|
|
|
|
+ dayId: number;
|
|
|
|
+ data: ContinuousRewardItem[];
|
|
|
|
+}
|
|
|
|
+
|
|
const DayItem = ({ dayColor = "#297fcf", num = 0 }) => {
|
|
const DayItem = ({ dayColor = "#297fcf", num = 0 }) => {
|
|
return (
|
|
return (
|
|
<div>
|
|
<div>
|
|
@@ -32,6 +60,8 @@ const DayItem = ({ dayColor = "#297fcf", num = 0 }) => {
|
|
};
|
|
};
|
|
|
|
|
|
const Page = () => {
|
|
const Page = () => {
|
|
|
|
+ const query = Object.fromEntries(useSearchParams());
|
|
|
|
+ const [data, setData] = React.useState<ContinuousResult>({} as ContinuousResult);
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
const dayContainer = React.useRef<HTMLDivElement>(null);
|
|
const dayContainer = React.useRef<HTMLDivElement>(null);
|
|
const colors = [
|
|
const colors = [
|
|
@@ -46,43 +76,102 @@ const Page = () => {
|
|
"#ec3b23",
|
|
"#ec3b23",
|
|
];
|
|
];
|
|
|
|
|
|
- const goDeposit = () => {
|
|
|
|
- router.push("/deposit");
|
|
|
|
|
|
+ React.useEffect(() => {
|
|
|
|
+ getData();
|
|
|
|
+ }, []);
|
|
|
|
+ const getData = async () => {
|
|
|
|
+ const res = await getContinuousRechargeInfo({ activity_id: Number(query.activity_id) });
|
|
|
|
+ if (res.code === 200) {
|
|
|
|
+ setData(res.data);
|
|
|
|
+ }
|
|
};
|
|
};
|
|
-
|
|
|
|
- const cfg1 = React.useMemo(() => {
|
|
|
|
- return [
|
|
|
|
- {
|
|
|
|
|
|
+ const cfg1: Record<number, Cfg1Item> = React.useMemo(() => {
|
|
|
|
+ return {
|
|
|
|
+ 1: {
|
|
text: "LOGIN ",
|
|
text: "LOGIN ",
|
|
text2: "PLATINUM",
|
|
text2: "PLATINUM",
|
|
key: 1,
|
|
key: 1,
|
|
footer: "Alcançou",
|
|
footer: "Alcançou",
|
|
},
|
|
},
|
|
- {
|
|
|
|
|
|
+ 2: {
|
|
text: "LOGIN",
|
|
text: "LOGIN",
|
|
text2: "GOLD",
|
|
text2: "GOLD",
|
|
key: 2,
|
|
key: 2,
|
|
footer: "Alcançou",
|
|
footer: "Alcançou",
|
|
- footer2: "5R",
|
|
|
|
},
|
|
},
|
|
- {
|
|
|
|
|
|
+ 3: {
|
|
text: "LOGIN",
|
|
text: "LOGIN",
|
|
text2: "DIAMANTE",
|
|
text2: "DIAMANTE",
|
|
key: 3,
|
|
key: 3,
|
|
footer: "Alcançou",
|
|
footer: "Alcançou",
|
|
- footer2: "5R",
|
|
|
|
},
|
|
},
|
|
- {
|
|
|
|
|
|
+ 4: {
|
|
text: "ENTRAR NO",
|
|
text: "ENTRAR NO",
|
|
text2: "MONOPOLY",
|
|
text2: "MONOPOLY",
|
|
key: 4,
|
|
key: 4,
|
|
footer: "Ainda preciso",
|
|
footer: "Ainda preciso",
|
|
- footer2: "5R",
|
|
|
|
},
|
|
},
|
|
- ];
|
|
|
|
|
|
+ };
|
|
}, []);
|
|
}, []);
|
|
|
|
|
|
- const data = [1, 2, 3, 4, 5, 6, 7, , 8, 9, 0, 11, 12, 13, 14, 15, 16, 17];
|
|
|
|
|
|
+ const stage = React.useMemo<StageItem[]>(() => {
|
|
|
|
+ let stags = data?.list?.stage;
|
|
|
|
+ if (!data?.list?.stage) {
|
|
|
|
+ stags = [
|
|
|
|
+ { id: 1 },
|
|
|
|
+ { id: 2 },
|
|
|
|
+ { id: 3 },
|
|
|
|
+ { id: 4 },
|
|
|
|
+ ] as unknown as ContinuousStageItem[];
|
|
|
|
+ }
|
|
|
|
+ const result: StageItem[] = stags
|
|
|
|
+ .map((item) => {
|
|
|
|
+ return {
|
|
|
|
+ ...item,
|
|
|
|
+ ...cfg1[item.id],
|
|
|
|
+ footer2: item.target_num ? `${item.target_num}R` : "",
|
|
|
|
+ };
|
|
|
|
+ })
|
|
|
|
+ .sort((a: ContinuousStageItem, b: ContinuousStageItem) => a.id - b.id);
|
|
|
|
+ return result;
|
|
|
|
+ }, [data?.list?.stage, cfg1]);
|
|
|
|
+
|
|
|
|
+ const list = React.useMemo<ListItem[]>(() => {
|
|
|
|
+ if (!data?.list?.list) {
|
|
|
|
+ return [];
|
|
|
|
+ }
|
|
|
|
+ const result: ListItem[] = [] as ListItem[];
|
|
|
|
+ Object.keys(data?.list?.list).forEach((key: string) => {
|
|
|
|
+ const item = data?.list?.list[key as any];
|
|
|
|
+ const key1 = Object.keys(item)[0];
|
|
|
|
+ result.push({ dayId: Number(key), data: item[key1 as any] });
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ return result.sort((a, b) => a.dayId - b.dayId);
|
|
|
|
+ }, [data?.list?.list]);
|
|
|
|
+
|
|
|
|
+ const reward_list = React.useMemo<RewardItem[]>(() => {
|
|
|
|
+ if (!data?.list?.reward_list) {
|
|
|
|
+ return [];
|
|
|
|
+ }
|
|
|
|
+ const result: RewardItem[] = [] as RewardItem[];
|
|
|
|
+
|
|
|
|
+ Object.keys(data?.list?.reward_list).forEach((key: string) => {
|
|
|
|
+ const item = data?.list?.reward_list[key as any];
|
|
|
|
+ const res2: ContinuousRewardItem[] = [];
|
|
|
|
+ Object.keys(item).forEach((key2: string) => {
|
|
|
|
+ const item2 = item[key2 as any];
|
|
|
|
+ res2.push(item2);
|
|
|
|
+ });
|
|
|
|
+ result.push({ dayId: Number(key), data: res2 });
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ return result;
|
|
|
|
+ }, [data?.list?.reward_list]);
|
|
|
|
+
|
|
|
|
+ const goDeposit = () => {
|
|
|
|
+ router.push("/deposit");
|
|
|
|
+ };
|
|
|
|
|
|
return (
|
|
return (
|
|
<div className={clsx(styles.continuePage)}>
|
|
<div className={clsx(styles.continuePage)}>
|
|
@@ -101,54 +190,58 @@ const Page = () => {
|
|
<div className={styles.inner}>
|
|
<div className={styles.inner}>
|
|
<div className={styles.innerContainer}>
|
|
<div className={styles.innerContainer}>
|
|
<div className={styles.box}>
|
|
<div className={styles.box}>
|
|
- {cfg1.map((item) => {
|
|
|
|
- return (
|
|
|
|
- <div
|
|
|
|
- key={item.key}
|
|
|
|
- className={styles.boxItem}
|
|
|
|
- style={{
|
|
|
|
- backgroundImage: `url('/continuous/v${item.key}.png')`,
|
|
|
|
- }}
|
|
|
|
- >
|
|
|
|
- <div className={styles.boxItemTop}>
|
|
|
|
- <div className={styles.boxItemTopText}>
|
|
|
|
- {item.text}
|
|
|
|
- </div>
|
|
|
|
- <div className={styles.boxItemTopText}>
|
|
|
|
- {item.text2}
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
- <div className={styles.boxItemBottom}>
|
|
|
|
- <div>{item.footer}</div>
|
|
|
|
- <div>{item.footer2}</div>
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
- );
|
|
|
|
- })}
|
|
|
|
- </div>
|
|
|
|
- <div className={styles.daybox}>
|
|
|
|
- <div className={styles.dayContainer} ref={dayContainer}>
|
|
|
|
- {data.map((item) => {
|
|
|
|
|
|
+ {!!stage.length &&
|
|
|
|
+ stage.map((item) => {
|
|
return (
|
|
return (
|
|
<div
|
|
<div
|
|
- key={item}
|
|
|
|
- className={clsx(styles.dayItem, styles.active)}
|
|
|
|
|
|
+ key={item.id}
|
|
|
|
+ className={styles.boxItem}
|
|
|
|
+ style={{
|
|
|
|
+ backgroundImage: `url('/continuous/v${item.id}.png')`,
|
|
|
|
+ }}
|
|
>
|
|
>
|
|
- <div className={styles.dayItemText}>{item} dia</div>
|
|
|
|
- <div className={styles.dayitemTextActive}>
|
|
|
|
- <img src="/continuous/s1.png" alt="" />
|
|
|
|
- <div className="flex flex-row items-end text-[#dbc6ff]">
|
|
|
|
- <span className="relative top-[1px] mt-[2px] text-[.13rem]">
|
|
|
|
- {item}
|
|
|
|
- </span>
|
|
|
|
- <span>dia</span>
|
|
|
|
|
|
+ <div className={styles.boxItemTop}>
|
|
|
|
+ <div className={styles.boxItemTopText}>
|
|
|
|
+ {item.text}
|
|
|
|
+ </div>
|
|
|
|
+ <div className={styles.boxItemTopText}>
|
|
|
|
+ {item.text2}
|
|
</div>
|
|
</div>
|
|
- <div>recarga</div>
|
|
|
|
- <div className="text-[#ffb400]">10000</div>
|
|
|
|
|
|
+ </div>
|
|
|
|
+ <div className={styles.boxItemBottom}>
|
|
|
|
+ <div>{item.footer}</div>
|
|
|
|
+ <div>{item.footer2}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
);
|
|
})}
|
|
})}
|
|
|
|
+ </div>
|
|
|
|
+ <div className={styles.daybox}>
|
|
|
|
+ <div className={styles.dayContainer} ref={dayContainer}>
|
|
|
|
+ {!!list?.length &&
|
|
|
|
+ list.map((item) => {
|
|
|
|
+ return (
|
|
|
|
+ <div
|
|
|
|
+ key={item.dayId}
|
|
|
|
+ className={clsx(styles.dayItem, styles.active)}
|
|
|
|
+ >
|
|
|
|
+ <div className={styles.dayItemText}>
|
|
|
|
+ {item.dayId} dia
|
|
|
|
+ </div>
|
|
|
|
+ <div className={styles.dayitemTextActive}>
|
|
|
|
+ <img src="/continuous/s1.png" alt="" />
|
|
|
|
+ <div className="flex flex-row items-end text-[#dbc6ff]">
|
|
|
|
+ <span className="relative top-[1px] mt-[2px] text-[.13rem]">
|
|
|
|
+ {/* {item} */}
|
|
|
|
+ </span>
|
|
|
|
+ <span>dia</span>
|
|
|
|
+ </div>
|
|
|
|
+ <div>recarga</div>
|
|
|
|
+ <div className="text-[#ffb400]">10000</div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ );
|
|
|
|
+ })}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div className={styles.premio}>
|
|
<div className={styles.premio}>
|
|
@@ -186,38 +279,50 @@ const Page = () => {
|
|
<div className="mt-[.1rem]">
|
|
<div className="mt-[.1rem]">
|
|
<div className={clsx(styles.introItem, styles.odd)}>
|
|
<div className={clsx(styles.introItem, styles.odd)}>
|
|
<div className={styles.idx1}></div>
|
|
<div className={styles.idx1}></div>
|
|
- {cfg1.map((item) => {
|
|
|
|
|
|
+ {Object.keys(cfg1)
|
|
|
|
+ .sort(
|
|
|
|
+ (a: string, b: string) => Number(a) - Number(b)
|
|
|
|
+ )
|
|
|
|
+ .map((key) => {
|
|
|
|
+ const item = cfg1[Number(key)];
|
|
|
|
+ return (
|
|
|
|
+ <div key={item.key}>
|
|
|
|
+ <img
|
|
|
|
+ src={`/continuous/s${item.key}.png`}
|
|
|
|
+ alt=""
|
|
|
|
+ className="w-[.3rem]"
|
|
|
|
+ />
|
|
|
|
+ <span className="text-[.1rem]">
|
|
|
|
+ {item.text}
|
|
|
|
+ </span>
|
|
|
|
+ <span className="text-[.1rem]">
|
|
|
|
+ {item.text2}
|
|
|
|
+ </span>
|
|
|
|
+ </div>
|
|
|
|
+ );
|
|
|
|
+ })}
|
|
|
|
+ </div>
|
|
|
|
+ {!!reward_list.length &&
|
|
|
|
+ reward_list.map((item) => {
|
|
return (
|
|
return (
|
|
- <div key={item.key}>
|
|
|
|
- <img
|
|
|
|
- src={`/continuous/s${item.key}.png`}
|
|
|
|
- alt=""
|
|
|
|
- className="w-[.3rem]"
|
|
|
|
- />
|
|
|
|
- <span className="text-[.1rem]">
|
|
|
|
- {item.text}
|
|
|
|
- </span>
|
|
|
|
- <span className="text-[.1rem]">
|
|
|
|
- {item.text2}
|
|
|
|
- </span>
|
|
|
|
|
|
+ <div
|
|
|
|
+ key={item.dayId}
|
|
|
|
+ className={clsx(styles.introItem)}
|
|
|
|
+ >
|
|
|
|
+ <div className={styles.idx1}>
|
|
|
|
+ dia{item.dayId}
|
|
|
|
+ </div>
|
|
|
|
+ {!!item.data.length &&
|
|
|
|
+ item.data.map((citem) => {
|
|
|
|
+ return (
|
|
|
|
+ <div key={citem.id}>
|
|
|
|
+ {citem.target_num}
|
|
|
|
+ </div>
|
|
|
|
+ );
|
|
|
|
+ })}
|
|
</div>
|
|
</div>
|
|
);
|
|
);
|
|
})}
|
|
})}
|
|
- </div>
|
|
|
|
- <div className={clsx(styles.introItem)}>
|
|
|
|
- <div className={styles.idx1}>dia5</div>
|
|
|
|
- <div>2323</div>
|
|
|
|
- <div>2323</div>
|
|
|
|
- <div>2323</div>
|
|
|
|
- <div>2323</div>
|
|
|
|
- </div>
|
|
|
|
- <div className={clsx(styles.introItem, styles.odd)}>
|
|
|
|
- <div className={styles.idx1}>dia5</div>
|
|
|
|
- <div>2323</div>
|
|
|
|
- <div>2323</div>
|
|
|
|
- <div>2323</div>
|
|
|
|
- <div>2323</div>
|
|
|
|
- </div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|