diff --git a/frontend/src/features/invitations/InvitationsPage.tsx b/frontend/src/features/invitations/InvitationsPage.tsx index 8f16ad2..d34431f 100644 --- a/frontend/src/features/invitations/InvitationsPage.tsx +++ b/frontend/src/features/invitations/InvitationsPage.tsx @@ -13,6 +13,7 @@ import { type TableColumnsType, } from 'antd' import { CopyOutlined, GiftOutlined, ReloadOutlined } from '@ant-design/icons' +import { Navigate } from 'react-router-dom' import { fetchInvitedRecords, @@ -142,6 +143,7 @@ const rebateColumns: TableColumnsType = [ export function InvitationsPage() { const user = useSessionStore(state => state.user) + const hydrated = useSessionStore(state => state.hydrated) const [tab, setTab] = useState('records') const [recordPage, setRecordPage] = useState(1) const [rebatePage, setRebatePage] = useState(1) @@ -160,6 +162,10 @@ export function InvitationsPage() { const summary = summaryQuery.data + // 邀请返利需要登录后查看;未登录直接跳登录页,登录后回到本页。 + if (!hydrated) return null + if (!user) return + const copyLink = async () => { if (!summary?.invite_link) return try { diff --git a/frontend/src/features/mobile/MobileInvitationsPage.tsx b/frontend/src/features/mobile/MobileInvitationsPage.tsx index 0b18b59..a78902d 100644 --- a/frontend/src/features/mobile/MobileInvitationsPage.tsx +++ b/frontend/src/features/mobile/MobileInvitationsPage.tsx @@ -1,6 +1,6 @@ import { Button, Card, ErrorBlock, NavBar, Skeleton, Tag, Toast } from 'antd-mobile' import { useQuery } from '@tanstack/react-query' -import { useNavigate } from 'react-router-dom' +import { Navigate, useNavigate } from 'react-router-dom' import { fetchInvitedRecords, useInvitationSummary } from '@/features/invitations/api' import { useSessionStore } from '@/stores/session' @@ -16,6 +16,7 @@ const stageLabels: Record = { export function MobileInvitationsPage() { const navigate = useNavigate() const user = useSessionStore(state => state.user) + const hydrated = useSessionStore(state => state.hydrated) const summaryQuery = useInvitationSummary(Boolean(user)) const recordsQuery = useQuery({ queryKey: ['invitation-records', 1], @@ -26,6 +27,10 @@ export function MobileInvitationsPage() { const summary = summaryQuery.data const records = recordsQuery.data?.items ?? [] + // 邀请返利需要登录后查看;未登录直接跳移动端登录页。 + if (!hydrated) return null + if (!user) return + const copyLink = async () => { if (!summary?.invite_link) return try { diff --git a/frontend/src/layouts/StorefrontLayout.tsx b/frontend/src/layouts/StorefrontLayout.tsx index 5d80f39..f5c4469 100644 --- a/frontend/src/layouts/StorefrontLayout.tsx +++ b/frontend/src/layouts/StorefrontLayout.tsx @@ -42,6 +42,18 @@ export function StorefrontLayout() { 公告 + { + if (!user) { + event.preventDefault() + navigate('/login?redirect=/invitations') + } + }} + > + 邀请好友 +