# 前端链接访问示例 ## 概述 当用户访问链接页面时(如 `https://你的域名/ABC12345`),前端需要自动请求后端获取链接的详细信息,并根据状态显示相应的内容。 ## 接口说明 ### 1. 获取链接状态(主要接口) ``` GET /api/link/{codeNo}/status ``` **响应示例:** ```json { "codeNo": "ABC12345", "batchId": 123, "status": "NEW", "statusDesc": "新建", "expireAt": "2024-01-15T16:30:00", "isExpired": false, "remainingSeconds": 3600, "quantity": 50, "times": 10, "totalPoints": 500, "region": null, "machineId": null, "loginAt": null, "createdAt": "2024-01-15T12:00:00", "updatedAt": "2024-01-15T12:00:00" } ``` ### 2. 检查链接是否存在 ``` GET /api/link/{codeNo}/exists ``` **响应:** `true` 或 `false` ### 3. 检查链接是否有效 ``` GET /api/link/{codeNo}/valid ``` **响应:** `true` 或 `false` ## 前端实现示例 ### React 组件示例 ```jsx import React, { useState, useEffect } from 'react'; import { useParams } from 'react-router-dom'; const LinkPage = () => { const { codeNo } = useParams(); const [linkStatus, setLinkStatus] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { fetchLinkStatus(); }, [codeNo]); const fetchLinkStatus = async () => { try { setLoading(true); const response = await fetch(`/api/link/${codeNo}/status`); if (!response.ok) { if (response.status === 404) { setError('链接不存在'); } else { setError('获取链接信息失败'); } return; } const data = await response.json(); setLinkStatus(data); } catch (err) { setError('网络错误'); console.error('获取链接状态失败:', err); } finally { setLoading(false); } }; const formatTime = (seconds) => { if (seconds <= 0) return '已过期'; const hours = Math.floor(seconds / 3600); const minutes = Math.floor((seconds % 3600) / 60); const secs = seconds % 60; if (hours > 0) { return `${hours}小时${minutes}分钟`; } else if (minutes > 0) { return `${minutes}分钟${secs}秒`; } else { return `${secs}秒`; } }; if (loading) { return
加载中...
; } if (error) { return (

链接错误

{error}

链接编号: {codeNo}

); } if (!linkStatus) { return
未找到链接信息
; } return (

游戏任务链接

链接编号: {linkStatus.codeNo}
状态: {linkStatus.statusDesc}
任务信息: 打{linkStatus.times}次副本,每次{linkStatus.quantity}点 (总计{linkStatus.totalPoints}点)
过期时间: {linkStatus.expireAt}
剩余时间: {formatTime(linkStatus.remainingSeconds)}
{linkStatus.isExpired && (

⚠️ 此链接已过期,无法使用

)} {!linkStatus.isExpired && linkStatus.status === 'NEW' && (

开始任务

点击下方按钮开始执行任务

)} {linkStatus.status === 'USING' && (

任务进行中

请按照提示完成游戏任务

)} {linkStatus.status === 'LOGGED_IN' && (

任务完成

恭喜!任务已完成,奖励点数已发放

获得奖励: {linkStatus.totalPoints} 点
)}

扫码访问

二维码

使用手机扫描二维码访问

); }; const startTask = () => { // 实现开始任务的逻辑 console.log('开始任务'); }; export default LinkPage; ``` ### Vue 组件示例 ```vue ``` ## 路由配置 ### React Router ```jsx import { BrowserRouter, Routes, Route } from 'react-router-dom'; import LinkPage from './components/LinkPage'; function App() { return ( } /> {/* 其他路由 */} ); } ``` ### Vue Router ```javascript import { createRouter, createWebHistory } from 'vue-router'; import LinkPage from '@/components/LinkPage.vue'; const routes = [ { path: '/:codeNo', name: 'LinkPage', component: LinkPage } ]; const router = createRouter({ history: createWebHistory(), routes }); export default router; ``` ## 使用流程 1. **用户访问链接**:`https://你的域名/ABC12345` 2. **前端自动请求**:调用 `/api/link/ABC12345/status` 获取链接信息 3. **显示相应内容**:根据链接状态显示不同的界面 4. **实时更新**:可以定时刷新状态,显示剩余时间等 ## 注意事项 1. **错误处理**:处理链接不存在、已过期等情况 2. **加载状态**:显示加载中的状态,提升用户体验 3. **响应式设计**:确保在不同设备上都能正常显示 4. **缓存策略**:可以适当缓存链接状态,减少请求次数 5. **实时更新**:对于进行中的任务,可以定时刷新状态