import React, { useState, useEffect } from "react"; import styles from "./index.module.scss"; import { useNavigate } from "react-router-dom"; import { getRankList, RankItem, RankDescItem, saveScore } from "../../../utils/API"; interface ResultProps { timeLeft: number; rightCount: number; } // 对数据进行排序 const getRankDesc = (rankList: RankItem[], rightCount: number, exhauseTime: number) => { const rankArr: RankDescItem[] = rankList.map(item => { return { score: item.score, time: item.time, rank: -1, isCurrentUser: false } }) rankArr.push({ score: rightCount, time: exhauseTime, rank: -1, isCurrentUser: true }) rankArr.sort((a, b) => { if (a.score !== b.score) { // 得分不同时,得分高的排在前面 return b.score - a.score; } else { // 得分相同时,花费时间少的排在前面 return a.time - b.time; } }); // 为排序后的数据添加排名信息 rankArr.forEach((item, index) => { item.rank = index + 1; }); return rankArr } const Result = ({ timeLeft, rightCount }: ResultProps) => { const navigate = useNavigate() const [nickname, setNickname] = useState("") const [phone, setPhone] = useState("") const [isShowTips, setIsShowTips] = useState(true) const exhausetime = 180 - timeLeft const [rankDesc, setRankDesc] = useState([]) const handleInputChange = () => { if ((nickname.length > 5 || nickname.length === 0) || (phone.length > 20 || phone.length === 0)) { setIsShowTips(true) } else { setIsShowTips(false) } } const handleRank = () => { if (!isShowTips) { saveScore({ name: nickname, phone: phone, score: rightCount * 10, time: exhausetime }).then(() => { navigate("/rank", { state: { noRank: false } }) }) return } if (isShowRank) { navigate("/rank", { state: { noRank: true } }) return } } const [isShowRank, setIsShowRank] = useState(true) useEffect(() => { getRankList().then(res => { setRankDesc(res.data.data) let rankData = res.data.data setIsShowRank((rankData[rankData.length - 1].score > rightCount * 10) || (rankData[rankData.length - 1].score === rightCount * 10 && rankData[rankData.length - 1].time < exhausetime) ? true : false) }) }, [exhausetime, rightCount]) console.log(rankDesc) return (
恭喜您!
共答对 {rightCount} 道题,耗时 {exhausetime} 秒。{isShowRank ? "未进入排行榜" : "恭喜您进入当前答题排行榜前十名!"}
setNickname(e.target.value)} onBlur={handleInputChange} type="text" placeholder="请输入昵称,不超过5个字" /> setPhone(e.target.value)} onBlur={handleInputChange} type="text" placeholder="请输入联系方式,不超过20个字" />
游戏规则:答对更多题目耗时更少的前五名 将在展览结束后赠送文创书签纪念品。
您未填写昵称和联系方式,无法参与此次活动
点击查看排行榜参与排名
navigate("/")}>返回首页
查看排行榜
navigate("/")}>
); }; export default Result;