添加发布球局拦截
This commit is contained in:
@@ -67,12 +67,6 @@ const NTRPEvaluatePopup = (props: NTRPEvaluatePopupProps, ref) => {
|
|||||||
const { updateUserInfo } = useUserActions();
|
const { updateUserInfo } = useUserActions();
|
||||||
const userInfo = useUserInfo();
|
const userInfo = useUserInfo();
|
||||||
const ntrpLevels = useNtrpLevels();
|
const ntrpLevels = useNtrpLevels();
|
||||||
const options = [
|
|
||||||
ntrpLevels.map((item) => ({
|
|
||||||
text: item,
|
|
||||||
value: item,
|
|
||||||
})),
|
|
||||||
];
|
|
||||||
const [evaCallback, setEvaCallback] = useState<EvaluateCallback>({
|
const [evaCallback, setEvaCallback] = useState<EvaluateCallback>({
|
||||||
type: "",
|
type: "",
|
||||||
next: () => {},
|
next: () => {},
|
||||||
@@ -171,7 +165,7 @@ const NTRPEvaluatePopup = (props: NTRPEvaluatePopupProps, ref) => {
|
|||||||
{visible && (
|
{visible && (
|
||||||
<Picker
|
<Picker
|
||||||
visible
|
visible
|
||||||
options={options}
|
options={ntrpLevels}
|
||||||
defaultValue={[ntrp]}
|
defaultValue={[ntrp]}
|
||||||
onChange={(val) => {
|
onChange={(val) => {
|
||||||
console.log(val[0]);
|
console.log(val[0]);
|
||||||
|
|||||||
@@ -4,7 +4,11 @@ import ListLoadError from "@/components/ListLoadError";
|
|||||||
import ListCardSkeleton from "@/components/ListCardSkeleton";
|
import ListCardSkeleton from "@/components/ListCardSkeleton";
|
||||||
import { useReachBottom } from "@tarojs/taro";
|
import { useReachBottom } from "@tarojs/taro";
|
||||||
import Taro from "@tarojs/taro";
|
import Taro from "@tarojs/taro";
|
||||||
import { useUserInfo, useUserActions, useLastTestResult } from "@/store/userStore";
|
import {
|
||||||
|
useUserInfo,
|
||||||
|
useUserActions,
|
||||||
|
useLastTestResult,
|
||||||
|
} from "@/store/userStore";
|
||||||
import { NTRPTestEntryCard } from "@/components";
|
import { NTRPTestEntryCard } from "@/components";
|
||||||
import { EvaluateScene } from "@/store/evaluateStore";
|
import { EvaluateScene } from "@/store/evaluateStore";
|
||||||
import { waitForAuthInit } from "@/utils/authInit";
|
import { waitForAuthInit } from "@/utils/authInit";
|
||||||
@@ -46,7 +50,11 @@ const ListContainer = (props) => {
|
|||||||
const { fetchUserInfo, fetchLastTestResult } = useUserActions();
|
const { fetchUserInfo, fetchLastTestResult } = useUserActions();
|
||||||
// 使用全局状态中的测试结果,避免重复调用接口
|
// 使用全局状态中的测试结果,避免重复调用接口
|
||||||
const lastTestResult = useLastTestResult();
|
const lastTestResult = useLastTestResult();
|
||||||
const { bannerListImage, bannerDetailImage, bannerListIndex = 0 } = useDictionaryStore((s) => s.bannerDict) || {};
|
const {
|
||||||
|
bannerListImage,
|
||||||
|
bannerDetailImage,
|
||||||
|
bannerListIndex = 0,
|
||||||
|
} = useDictionaryStore((s) => s.bannerDict) || {};
|
||||||
useReachBottom(() => {
|
useReachBottom(() => {
|
||||||
// 加载更多方法
|
// 加载更多方法
|
||||||
if (loading) {
|
if (loading) {
|
||||||
@@ -102,7 +110,7 @@ const ListContainer = (props) => {
|
|||||||
// 先等待静默登录完成
|
// 先等待静默登录完成
|
||||||
await waitForAuthInit();
|
await waitForAuthInit();
|
||||||
// 然后再获取用户信息
|
// 然后再获取用户信息
|
||||||
const userInfoId = userInfo && 'id' in userInfo ? userInfo.id : null;
|
const userInfoId = userInfo && "id" in userInfo ? userInfo.id : null;
|
||||||
if (!userInfoId) {
|
if (!userInfoId) {
|
||||||
await fetchUserInfo();
|
await fetchUserInfo();
|
||||||
return; // 等待下一次 useEffect 触发(此时 userInfo.id 已有值)
|
return; // 等待下一次 useEffect 触发(此时 userInfo.id 已有值)
|
||||||
@@ -113,7 +121,13 @@ const ListContainer = (props) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
init();
|
init();
|
||||||
}, [evaluateFlag, enableHomeCards, userInfo, lastTestResult, fetchLastTestResult]);
|
}, [
|
||||||
|
evaluateFlag,
|
||||||
|
enableHomeCards,
|
||||||
|
userInfo,
|
||||||
|
lastTestResult,
|
||||||
|
fetchLastTestResult,
|
||||||
|
]);
|
||||||
|
|
||||||
// 从全局状态中获取测试状态
|
// 从全局状态中获取测试状态
|
||||||
const hasTestInLastMonth = lastTestResult?.has_test_in_last_month || false;
|
const hasTestInLastMonth = lastTestResult?.has_test_in_last_month || false;
|
||||||
@@ -142,7 +156,11 @@ const ListContainer = (props) => {
|
|||||||
const idx = Number(bannerListIndex);
|
const idx = Number(bannerListIndex);
|
||||||
return [
|
return [
|
||||||
...list.slice(0, idx),
|
...list.slice(0, idx),
|
||||||
{ type: "banner", banner_image_url: bannerListImage, banner_detail_url: bannerDetailImage },
|
{
|
||||||
|
type: "banner",
|
||||||
|
banner_image_url: bannerListImage,
|
||||||
|
banner_detail_url: bannerDetailImage,
|
||||||
|
},
|
||||||
...list.slice(idx),
|
...list.slice(idx),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -151,7 +169,9 @@ const ListContainer = (props) => {
|
|||||||
function insertEvaluateCard(list) {
|
function insertEvaluateCard(list) {
|
||||||
if (!list || !Array.isArray(list)) return insertBannerCard(list ?? []);
|
if (!list || !Array.isArray(list)) return insertBannerCard(list ?? []);
|
||||||
|
|
||||||
const limitedList = shouldLimitByShowNumber ? list.slice(0, showNumber) : list;
|
const limitedList = shouldLimitByShowNumber
|
||||||
|
? list.slice(0, showNumber)
|
||||||
|
: list;
|
||||||
|
|
||||||
if (!evaluateFlag || hasTestInLastMonth) {
|
if (!evaluateFlag || hasTestInLastMonth) {
|
||||||
return insertBannerCard(limitedList);
|
return insertBannerCard(limitedList);
|
||||||
@@ -168,7 +188,16 @@ const ListContainer = (props) => {
|
|||||||
|
|
||||||
const memoizedList = useMemo(
|
const memoizedList = useMemo(
|
||||||
() => (enableHomeCards ? insertEvaluateCard(data) : data),
|
() => (enableHomeCards ? insertEvaluateCard(data) : data),
|
||||||
[enableHomeCards, evaluateFlag, data, hasTestInLastMonth, showNumber, bannerListImage, bannerDetailImage, bannerListIndex]
|
[
|
||||||
|
enableHomeCards,
|
||||||
|
evaluateFlag,
|
||||||
|
data,
|
||||||
|
hasTestInLastMonth,
|
||||||
|
showNumber,
|
||||||
|
bannerListImage,
|
||||||
|
bannerDetailImage,
|
||||||
|
bannerListIndex,
|
||||||
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
// 渲染 banner 卡片
|
// 渲染 banner 卡片
|
||||||
@@ -183,7 +212,9 @@ const ListContainer = (props) => {
|
|||||||
const target = item.banner_detail_url;
|
const target = item.banner_detail_url;
|
||||||
if (target) {
|
if (target) {
|
||||||
(Taro as any).navigateTo({
|
(Taro as any).navigateTo({
|
||||||
url: `/other_pages/bannerDetail/index?img=${encodeURIComponent(target)}`,
|
url: `/other_pages/bannerDetail/index?img=${encodeURIComponent(
|
||||||
|
target
|
||||||
|
)}`,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
@@ -196,8 +227,7 @@ const ListContainer = (props) => {
|
|||||||
backgroundPosition: "center",
|
backgroundPosition: "center",
|
||||||
backgroundRepeat: "no-repeat",
|
backgroundRepeat: "no-repeat",
|
||||||
}}
|
}}
|
||||||
>
|
></View>
|
||||||
</View>
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -229,7 +259,10 @@ const ListContainer = (props) => {
|
|||||||
}
|
}
|
||||||
if (enableHomeCards && match?.type === "evaluateCard") {
|
if (enableHomeCards && match?.type === "evaluateCard") {
|
||||||
return (
|
return (
|
||||||
<NTRPTestEntryCard key={`evaluate-${index}`} type={EvaluateScene.list} />
|
<NTRPTestEntryCard
|
||||||
|
key={`evaluate-${index}`}
|
||||||
|
type={EvaluateScene.list}
|
||||||
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return <ListCard key={match?.id || index} {...match} />;
|
return <ListCard key={match?.id || index} {...match} />;
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ import { EvaluateScene } from "@/store/evaluateStore";
|
|||||||
import { useUserInfo, useUserActions } from "@/store/userStore";
|
import { useUserInfo, useUserActions } from "@/store/userStore";
|
||||||
import { usePickerOption } from "@/store/pickerOptionsStore";
|
import { usePickerOption } from "@/store/pickerOptionsStore";
|
||||||
import { useGlobalState } from "@/store/global";
|
import { useGlobalState } from "@/store/global";
|
||||||
|
import { useListState } from "@/store/listStore";
|
||||||
|
import { useDictionaryStore } from "@/store/dictionaryStore";
|
||||||
|
|
||||||
interface MyselfPageContentProps {
|
interface MyselfPageContentProps {
|
||||||
isActive?: boolean;
|
isActive?: boolean;
|
||||||
@@ -41,6 +43,10 @@ const MyselfPageContent: React.FC<MyselfPageContentProps> = ({
|
|||||||
const [collapseProfile, setCollapseProfile] = useState(false);
|
const [collapseProfile, setCollapseProfile] = useState(false);
|
||||||
const [refreshing, setRefreshing] = useState(false);
|
const [refreshing, setRefreshing] = useState(false);
|
||||||
|
|
||||||
|
const { area } = useListState();
|
||||||
|
const supportedCitiesList =
|
||||||
|
useDictionaryStore((s) => s.getDictionaryValue("supported_cities")) || [];
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
pickerOption.getCities();
|
pickerOption.getCities();
|
||||||
pickerOption.getProfessions();
|
pickerOption.getProfessions();
|
||||||
@@ -82,7 +88,6 @@ const MyselfPageContent: React.FC<MyselfPageContentProps> = ({
|
|||||||
console.log("notEndGames", notEndGames);
|
console.log("notEndGames", notEndGames);
|
||||||
|
|
||||||
return { notEndGames, finishedGames };
|
return { notEndGames, finishedGames };
|
||||||
|
|
||||||
},
|
},
|
||||||
[]
|
[]
|
||||||
);
|
);
|
||||||
@@ -100,7 +105,6 @@ const MyselfPageContent: React.FC<MyselfPageContentProps> = ({
|
|||||||
games_data = await UserService.get_participated_games(user_info.id);
|
games_data = await UserService.get_participated_games(user_info.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const sorted_games = games_data.sort((a, b) => {
|
const sorted_games = games_data.sort((a, b) => {
|
||||||
return (
|
return (
|
||||||
new Date(a.original_start_time.replace(/\s/, "T")).getTime() -
|
new Date(a.original_start_time.replace(/\s/, "T")).getTime() -
|
||||||
@@ -156,6 +160,16 @@ const MyselfPageContent: React.FC<MyselfPageContentProps> = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const goPublish = () => {
|
const goPublish = () => {
|
||||||
|
const [_, address] = area;
|
||||||
|
if (!supportedCitiesList.includes(address)) {
|
||||||
|
(Taro as any).showModal({
|
||||||
|
title: "提示",
|
||||||
|
content: "该城市尚未开放,您可加入社群或切换城市",
|
||||||
|
showCancel: false,
|
||||||
|
confirmText: "知道了",
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
(Taro as any).navigateTo({
|
(Taro as any).navigateTo({
|
||||||
url: "/publish_pages/publishBall/index",
|
url: "/publish_pages/publishBall/index",
|
||||||
});
|
});
|
||||||
@@ -258,14 +272,16 @@ const MyselfPageContent: React.FC<MyselfPageContentProps> = ({
|
|||||||
<View className={styles.gameTabsSection}>
|
<View className={styles.gameTabsSection}>
|
||||||
<View className={styles.tabContainer}>
|
<View className={styles.tabContainer}>
|
||||||
<View
|
<View
|
||||||
className={`${styles.tabItem} ${active_tab === "hosted" ? styles.active : ""
|
className={`${styles.tabItem} ${
|
||||||
|
active_tab === "hosted" ? styles.active : ""
|
||||||
}`}
|
}`}
|
||||||
onClick={() => setActiveTab("hosted")}
|
onClick={() => setActiveTab("hosted")}
|
||||||
>
|
>
|
||||||
<Text className={styles.tabText}>我主办的</Text>
|
<Text className={styles.tabText}>我主办的</Text>
|
||||||
</View>
|
</View>
|
||||||
<View
|
<View
|
||||||
className={`${styles.tabItem} ${active_tab === "participated" ? styles.active : ""
|
className={`${styles.tabItem} ${
|
||||||
|
active_tab === "participated" ? styles.active : ""
|
||||||
}`}
|
}`}
|
||||||
onClick={() => setActiveTab("participated")}
|
onClick={() => setActiveTab("participated")}
|
||||||
>
|
>
|
||||||
@@ -287,7 +303,7 @@ const MyselfPageContent: React.FC<MyselfPageContentProps> = ({
|
|||||||
btnImg="ICON_ADD"
|
btnImg="ICON_ADD"
|
||||||
reload={goPublish}
|
reload={goPublish}
|
||||||
isShowNoData={game_records.length === 0}
|
isShowNoData={game_records.length === 0}
|
||||||
loadMoreMatches={() => { }}
|
loadMoreMatches={() => {}}
|
||||||
collapse={true}
|
collapse={true}
|
||||||
style={{
|
style={{
|
||||||
paddingBottom: ended_game_records.length ? 0 : "90px",
|
paddingBottom: ended_game_records.length ? 0 : "90px",
|
||||||
@@ -313,7 +329,7 @@ const MyselfPageContent: React.FC<MyselfPageContentProps> = ({
|
|||||||
error={null}
|
error={null}
|
||||||
errorImg="ICON_LIST_EMPTY_CARD"
|
errorImg="ICON_LIST_EMPTY_CARD"
|
||||||
isShowNoData={ended_game_records.length === 0}
|
isShowNoData={ended_game_records.length === 0}
|
||||||
loadMoreMatches={() => { }}
|
loadMoreMatches={() => {}}
|
||||||
collapse={true}
|
collapse={true}
|
||||||
style={{ paddingBottom: "90px", overflow: "hidden" }}
|
style={{ paddingBottom: "90px", overflow: "hidden" }}
|
||||||
listLoadErrorWrapperHeight="fit-content"
|
listLoadErrorWrapperHeight="fit-content"
|
||||||
|
|||||||
Reference in New Issue
Block a user