From d859e54902b1cedaaf4fa0c3f86bcd47282809ff Mon Sep 17 00:00:00 2001 From: hu xiaotong <416314413@163.com> Date: Wed, 9 Jul 2025 11:44:27 +0800 Subject: [PATCH] =?UTF-8?q?ci:=20=E6=B7=BB=E5=8A=A0=20Epic=20UI=20?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E5=92=8C=E9=83=A8=E7=BD=B2=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 CI/CD 工作流文件,实现前端项目的自动构建和部署 - 支持 main、master 和 develop 分支的自动构建- 包含代码检出、环境安装、依赖管理、项目构建等步骤 - 实现构建产物的自动部署和 Docker 容器重启 --- src/pages/Characters.tsx | 119 ++++++++++++++++++++++----------------- 1 file changed, 66 insertions(+), 53 deletions(-) diff --git a/src/pages/Characters.tsx b/src/pages/Characters.tsx index 632e899..00f5f30 100644 --- a/src/pages/Characters.tsx +++ b/src/pages/Characters.tsx @@ -82,18 +82,24 @@ const Characters: React.FC = () => { const [selectedRole, setSelectedRole] = useState("all"); const [searchTerm, setSearchTerm] = useState(""); const [heroes, setHeroes] = useState([]); + const [loading, setLoading] = useState(true); const navigate = useNavigate(); // 拉取英雄数据 useEffect(() => { - EpicApi.getHeroList().then(data => { - // console.log('Heroes:', data); - // 类型转换,假设 API 返回的数据包含所需的所有属性 - const extendedData = data as ExtendedHero[]; - setHeroes(extendedData); - setAllHeroes(extendedData); - }); + setLoading(true); + EpicApi.getHeroList() + .then(data => { + const extendedData = data as ExtendedHero[]; + setHeroes(extendedData); + setAllHeroes(extendedData); + }) + .catch(() => { + setHeroes([]); + setAllHeroes([]); + }) + .finally(() => setLoading(false)); }, []); // 过滤逻辑 @@ -202,56 +208,63 @@ const Characters: React.FC = () => { - {filteredHeroes.length > 0 ? ( -
- {filteredHeroes.map((hero) => ( -
navigate(`/character/${hero.heroCode}`)} - > - {/* 头像+attr */} -
- {hero.heroName} -
- {getElementIcon(hero.attribute)} -
-
- {/* 右侧信息 */} -
-
- {hero.heroName} -
-
- {renderStars(hero.stars)} -
-
- {hero.role && ( - <> - - {hero.role} - - {ROLE_LABELS[hero.role] || hero.role} - - )} -
-
-
- ))} + {loading ? ( +
+ +
加载中...
) : ( -
-
- 暂无匹配的角色数据 + filteredHeroes.length > 0 ? ( +
+ {filteredHeroes.map((hero) => ( +
navigate(`/character/${hero.heroCode}`)} + > + {/* 头像+attr */} +
+ {hero.heroName} +
+ {getElementIcon(hero.attribute)} +
+
+ {/* 右侧信息 */} +
+
+ {hero.heroName} +
+
+ {renderStars(hero.stars)} +
+
+ {hero.role && ( + <> + + {hero.role} + + {ROLE_LABELS[hero.role] || hero.role} + + )} +
+
+
+ ))}
-
- 请尝试调整搜索条件或筛选条件 + ) : ( +
+
+ 暂无匹配的角色数据 +
+
+ 请尝试调整搜索条件或筛选条件 +
-
+ ) )}