瀏覽代碼

feat: xiugai

year 1 天之前
父節點
當前提交
401efe6f2e

+ 1 - 1
src/app/[locale]/(TabBar)/profile/loginedHeader.tsx

@@ -134,7 +134,7 @@ const LoginedHeader = () => {
                                     {formatAmount(userVip?.vip_pay_exp || 0)}
                                 </span>
                                 <span className="mr-[1px]">/</span>
-                                <span>{formatAmount(userVip?.pay || 0)}</span>
+                                <span>{formatAmount(nextVip?.pay || 0)}</span>
                             </div>
                         </div>
                         <ProgressBar

+ 5 - 6
src/app/[locale]/(TabBar)/profile/page.tsx

@@ -3,7 +3,6 @@ import action from "@/components/Header/action";
 import Item from "@/components/Item";
 import SvgIcon from "@/components/SvgIcon";
 import { LanguageMap } from "@/enums";
-import feedback from "@/feedback";
 import { useLogout } from "@/hooks/useLogout";
 import { useRouter } from "@/i18n/routing";
 import { useGlobalNoticeStore } from "@/stores/useGlobalNoticeStore";
@@ -62,11 +61,11 @@ const Page = () => {
     }, []);
 
     React.useEffect(() => {
-        setTimeout(() => {
-            feedback.showImage({
-                imgUrl: "https://i1.hdslb.com/bfs/archive/a81e3d75015833bdde27e37fbf86f9eebd8d1a72.jpg",
-            });
-        }, 5000);
+        // setTimeout(() => {
+        //     feedback.showImage({
+        //         imgUrl: "https://i1.hdslb.com/bfs/archive/a81e3d75015833bdde27e37fbf86f9eebd8d1a72.jpg",
+        //     });
+        // }, 5000);
     }, []);
 
     const languageHandler = async (language: (typeof languages)[number]) => {

+ 28 - 4
src/app/[locale]/(doings)/check_in/page.tsx

@@ -24,11 +24,13 @@ const Page = () => {
 
     const curSignIn = React.useMemo(() => {
         const signObj = data?.list?.sign_in || {};
-        return signObj[vipLevel] || {};
+        const result = signObj[vipLevel] || [];
+        return result.sort((a, b) => a.id - b.id);
     }, [data, vipLevel]);
     const curContinueSignIn = React.useMemo(() => {
         const continueObj = data?.list?.continuous_sign_in || {};
-        return continueObj[vipLevel] || {};
+        const result = continueObj[vipLevel] || [];
+        return result.sort((a, b) => a.id - b.id);
     }, [data, vipLevel]);
 
     const getData = async () => {
@@ -620,6 +622,16 @@ const Page = () => {
             remark: "",
         });
     };
+    const vips = React.useMemo(() => {
+        const result: any = [];
+        if (data?.list?.sign_in) {
+            Object.keys(data?.list?.sign_in).forEach((item: string | number) => {
+                result.push({ id: Number(item) });
+            });
+        }
+
+        return result.sort((a: any, b: any) => a.id - b.id);
+    }, [data]);
     const vipChange = (value: any) => {
         setVipLevel(value);
     };
@@ -645,7 +657,6 @@ const Page = () => {
             width: "80%",
             useDefaultFooter: false,
         });
-
         setClaimData(item);
         claimDataRef.current = item;
     };
@@ -667,12 +678,24 @@ const Page = () => {
             throw new Error(res.code.toString());
         } catch (err: any) {
             Toast.show({ icon: "fail", content: t(`code.${err?.message || 400}`) });
+        } finally {
+            getData();
         }
     };
+    const doClaimContinue = (itemData: Sign8gItem) => {
+        if (itemData.status !== 1) return;
+        claimDataRef.current = itemData;
+        doRealClaim();
+    };
 
     return (
         <div className={styles.pageContainer}>
-            <VipProgress onChange={vipChange}></VipProgress>
+            <VipProgress
+                onChange={vipChange}
+                useInnerVip={false}
+                vips={vips}
+                vip_level={2}
+            ></VipProgress>
             <div className={styles.boxContainer}>
                 <div className="text mt-[5px] w-full text-center text-[12px]">
                     Ao alcançar a meta de check-ins consecutivos, você recebe uma recompensa extra
@@ -686,6 +709,7 @@ const Page = () => {
                                         className={clsx("flex flex-col items-center", {
                                             [styles.geted]: item.status === 2,
                                         })}
+                                        onClick={() => doClaimContinue(item)}
                                     >
                                         {item.status !== 2 && (
                                             <>

+ 40 - 6
src/components/VipProgress/index.tsx

@@ -12,11 +12,21 @@ import styles from "./index.module.scss";
 interface Props {
     actKey?: number;
     onChange?: (key: number) => void;
+    useInnerVip?: boolean;
+    vip_level?: number;
+    vips?: Record<string, any>[];
 }
 
-const VipProgress: React.FC<Props> = ({ actKey = 0, onChange }) => {
+const VipProgress: React.FC<Props> = ({
+    actKey = 0,
+    onChange,
+    useInnerVip = true,
+    vip_level,
+    vips,
+}) => {
     const { data: userVip, run: runVip } = useRequest<any, any>(getNewVip, {
         pollingErrorRetryCount: 1,
+        manual: !useInnerVip,
     });
 
     const vipInfo: NewVip = React.useMemo(() => {
@@ -28,10 +38,34 @@ const VipProgress: React.FC<Props> = ({ actKey = 0, onChange }) => {
     const swiperRef = React.useRef<SwiperClass | null>(null);
 
     React.useEffect(() => {
-        if (!vipInfo?.vip_level) return;
+        if (!vipInfo?.vip_level || !useInnerVip) return;
+
         setAct(vipInfo.vip_level);
         swiperRef.current?.slideTo(vipInfo.vip_level);
-    }, [vipInfo]);
+    }, [vipInfo, useInnerVip]);
+    React.useEffect(() => {
+        if (!useInnerVip) {
+            setTimeout(() => {
+                setAct(vip_level || 0);
+                swiperRef.current?.slideTo(vip_level || 0);
+            }, 100);
+        }
+    }, [useInnerVip, vip_level]);
+
+    const renderVip = React.useMemo(() => {
+        if (useInnerVip) {
+            return vipInfo?.level_info;
+        }
+        return vips;
+    }, [useInnerVip, vipInfo, vips]);
+
+    const curVipLevel = React.useMemo(() => {
+        if (useInnerVip) {
+            return vipInfo?.vip_level;
+        }
+        return vip_level;
+    }, [useInnerVip, vipInfo, vip_level]);
+
     React.useEffect(() => {
         setAct(actKey);
         swiperRef.current?.slideTo(actKey);
@@ -58,15 +92,15 @@ const VipProgress: React.FC<Props> = ({ actKey = 0, onChange }) => {
                         swiperRef.current = swiper;
                     }}
                 >
-                    {!!vipInfo?.level_info?.length &&
-                        vipInfo.level_info.map((item) => {
+                    {!!renderVip?.length &&
+                        renderVip.map((item) => {
                             const curVipCfg = VipProgressMap.get(item.id) as VipItem;
 
                             return (
                                 <SwiperSlide key={item.id} className="relative pb-[.15rem]">
                                     <div
                                         className={clsx(styles.VipItem, {
-                                            [styles.disabled]: item.id > (vipInfo?.vip_level || 0),
+                                            [styles.disabled]: item.id > (curVipLevel || 0),
                                             [styles.active]: item.id === act,
                                         })}
                                         onClick={() => doChange(item.id)}