|
|
@@ -1,12 +1,14 @@
|
|
|
import { Barrage } from "@/components/Barrage";
|
|
|
import { CouponModal } from "@/components/CouponModal";
|
|
|
+import { NewbieActivityModal } from "@/components/NewbieActivityModal";
|
|
|
import { Colors } from "@/constants/Colors";
|
|
|
import { Images } from "@/constants/images";
|
|
|
import { CouponItem, getNewbieGiftBagInfo, listValidCoupon } from "@/services/activity";
|
|
|
import { getFeedbackList, getPoolList, PoolItem } from "@/services/award";
|
|
|
import { getToken } from "@/services/http";
|
|
|
+import AsyncStorage from "@react-native-async-storage/async-storage";
|
|
|
import { Image } from "expo-image";
|
|
|
-import { useRouter } from "expo-router";
|
|
|
+import { useFocusEffect, useRouter } from "expo-router";
|
|
|
import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
|
import {
|
|
|
ActivityIndicator,
|
|
|
@@ -147,6 +149,8 @@ export default function BoxScreen() {
|
|
|
const [couponVisible, setCouponVisible] = useState(false);
|
|
|
const [couponList, setCouponList] = useState<CouponItem[]>([]);
|
|
|
const [newPeopleChecked, setNewPeopleChecked] = useState(false);
|
|
|
+ // 新人大礼包海报弹窗
|
|
|
+ const [activityVisible, setActivityVisible] = useState(false);
|
|
|
|
|
|
// 加载弹幕
|
|
|
const loadBarrage = useCallback(async () => {
|
|
|
@@ -160,16 +164,22 @@ export default function BoxScreen() {
|
|
|
}
|
|
|
}, []);
|
|
|
|
|
|
- // 新人大礼包检测(Vue: initNewPeople)
|
|
|
+ // 新人大礼包检测(Vue: initNewPeople)—— 一个设备只弹一次
|
|
|
const initNewPeople = useCallback(async () => {
|
|
|
if (newPeopleChecked) return;
|
|
|
const token = getToken();
|
|
|
if (!token) return; // 未登录不检测
|
|
|
try {
|
|
|
+ const flag = await AsyncStorage.getItem("NEW_PEOPLE");
|
|
|
+ if (flag) {
|
|
|
+ setNewPeopleChecked(true);
|
|
|
+ return;
|
|
|
+ }
|
|
|
const data = await getNewbieGiftBagInfo();
|
|
|
if (data) {
|
|
|
setNewPeopleChecked(true);
|
|
|
- // Vue 原项目只是展示一张海报图片,这里跳过(无具体交互)
|
|
|
+ setActivityVisible(true);
|
|
|
+ await AsyncStorage.setItem("NEW_PEOPLE", "1");
|
|
|
}
|
|
|
} catch (e) {
|
|
|
// 静默失败
|
|
|
@@ -228,10 +238,16 @@ export default function BoxScreen() {
|
|
|
useEffect(() => {
|
|
|
loadData(true);
|
|
|
loadBarrage();
|
|
|
- initNewPeople();
|
|
|
- initCoupon();
|
|
|
}, [typeIndex, priceSort]);
|
|
|
|
|
|
+ // 对齐 Vue onShow:每次页面获得焦点检查新人弹窗/优惠券
|
|
|
+ useFocusEffect(
|
|
|
+ useCallback(() => {
|
|
|
+ initNewPeople();
|
|
|
+ initCoupon();
|
|
|
+ }, [initNewPeople, initCoupon]),
|
|
|
+ );
|
|
|
+
|
|
|
// 执行搜索
|
|
|
const handleSearch = () => {
|
|
|
setList([]);
|
|
|
@@ -417,6 +433,12 @@ export default function BoxScreen() {
|
|
|
loadData(true);
|
|
|
}}
|
|
|
/>
|
|
|
+
|
|
|
+ {/* 新人大礼包海报弹窗 */}
|
|
|
+ <NewbieActivityModal
|
|
|
+ visible={activityVisible}
|
|
|
+ onClose={() => setActivityVisible(false)}
|
|
|
+ />
|
|
|
</View>
|
|
|
</View>
|
|
|
);
|