feat(invitations): 邀请好友入口前置到顶部导航并补登录兜底

This commit is contained in:
2026-11-13 11:47:38 +08:00
parent b11c77e47f
commit 5f5aa7e3ca
3 changed files with 24 additions and 1 deletions
@@ -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<InviteRebateLedger> = [
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 <Navigate to="/login?redirect=/invitations" replace />
const copyLink = async () => {
if (!summary?.invite_link) return
try {
@@ -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<string, string> = {
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 <Navigate to="/m/login?redirect=/m/invitations" replace />
const copyLink = async () => {
if (!summary?.invite_link) return
try {
+12
View File
@@ -42,6 +42,18 @@ export function StorefrontLayout() {
<NavLink to="/announcements" className={navLinkClass}>
公告
</NavLink>
<NavLink
to="/invitations"
className={navLinkClass}
onClick={event => {
if (!user) {
event.preventDefault()
navigate('/login?redirect=/invitations')
}
}}
>
邀请好友
</NavLink>
</nav>
<Space size={12}>