mirror of
https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
synced 2025-11-28 11:39:23 +08:00
修改一些
This commit is contained in:
@@ -208,7 +208,7 @@ export function Artifacts() {
|
||||
<a href={REPO_URL} target="_blank" rel="noopener noreferrer">
|
||||
<IconButton bordered icon={<GithubIcon />} shadow />
|
||||
</a>
|
||||
<div className={styles["artifacts-title"]}>NextChat Artifacts</div>
|
||||
<div className={styles["artifacts-title"]}>清明上河图小助手</div>
|
||||
<ArtifactsShareButton
|
||||
id={id}
|
||||
getCode={() => code}
|
||||
|
||||
@@ -539,7 +539,7 @@ export function ImagePreviewer(props: {
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div className={styles["main-title"]}>NextChat</div>
|
||||
<div className={styles["main-title"]}>清明上河图小助手</div>
|
||||
<div className={styles["sub-title"]}>
|
||||
github.com/ChatGPTNextWeb/ChatGPT-Next-Web
|
||||
</div>
|
||||
|
||||
@@ -30,10 +30,14 @@ import { getClientConfig } from "../config/client";
|
||||
import { type ClientApi, getClientApi } from "../client/api";
|
||||
import { useAccessStore } from "../store";
|
||||
|
||||
// Loading组件用于显示加载状态
|
||||
export function Loading(props: { noLogo?: boolean }) {
|
||||
return (
|
||||
// 使用styles["loading-content"]类名来应用样式,"no-dark"类用于防止暗色主题影响
|
||||
<div className={styles["loading-content"] + " no-dark"}>
|
||||
{/* 如果noLogo属性为false,则显示BotIcon */}
|
||||
{!props.noLogo && <BotIcon />}
|
||||
{/* 显示LoadingIcon表示正在加载 */}
|
||||
<LoadingIcon />
|
||||
</div>
|
||||
);
|
||||
@@ -105,13 +109,17 @@ function useHtmlLang() {
|
||||
}, []);
|
||||
}
|
||||
|
||||
// 定义一个自定义Hook:useHasHydrated
|
||||
const useHasHydrated = () => {
|
||||
// 使用useState初始化hasHydrated状态为false
|
||||
const [hasHydrated, setHasHydrated] = useState<boolean>(false);
|
||||
|
||||
// 使用useEffect在组件挂载后将hasHydrated设置为true
|
||||
useEffect(() => {
|
||||
setHasHydrated(true);
|
||||
}, []);
|
||||
|
||||
// 返回hasHydrated的当前值
|
||||
return hasHydrated;
|
||||
};
|
||||
|
||||
@@ -138,23 +146,31 @@ export function WindowContent(props: { children: React.ReactNode }) {
|
||||
);
|
||||
}
|
||||
|
||||
// Screen 组件:负责渲染应用的主要内容
|
||||
function Screen() {
|
||||
// 获取应用配置
|
||||
const config = useAppConfig();
|
||||
// 获取当前路由位置
|
||||
const location = useLocation();
|
||||
// 判断当前路径是否为特定页面
|
||||
const isArtifact = location.pathname.includes(Path.Artifacts);
|
||||
const isHome = location.pathname === Path.Home;
|
||||
const isAuth = location.pathname === Path.Auth;
|
||||
const isSd = location.pathname === Path.Sd;
|
||||
const isSdNew = location.pathname === Path.SdNew;
|
||||
|
||||
// 检查是否为移动屏幕
|
||||
const isMobileScreen = useMobileScreen();
|
||||
// 决定是否使用紧凑边框
|
||||
const shouldTightBorder =
|
||||
getClientConfig()?.isApp || (config.tightBorder && !isMobileScreen);
|
||||
|
||||
// 加载Google字体
|
||||
useEffect(() => {
|
||||
loadAsyncGoogleFont();
|
||||
}, []);
|
||||
|
||||
// 如果是Artifacts页面,渲染特定路由
|
||||
if (isArtifact) {
|
||||
return (
|
||||
<Routes>
|
||||
@@ -162,13 +178,17 @@ function Screen() {
|
||||
</Routes>
|
||||
);
|
||||
}
|
||||
|
||||
// 渲染主要内容的函数
|
||||
const renderContent = () => {
|
||||
if (isAuth) return <AuthPage />;
|
||||
if (isSd) return <Sd />;
|
||||
if (isSdNew) return <Sd />;
|
||||
return (
|
||||
<>
|
||||
{/* 侧边栏 */}
|
||||
<SideBar className={isHome ? styles["sidebar-show"] : ""} />
|
||||
{/* 主区域 */}
|
||||
<WindowContent>
|
||||
<Routes>
|
||||
<Route path={Path.Home} element={<Chat />} />
|
||||
@@ -182,6 +202,7 @@ function Screen() {
|
||||
);
|
||||
};
|
||||
|
||||
// 返回最终的渲染结果
|
||||
return (
|
||||
<div
|
||||
className={`${styles.container} ${
|
||||
@@ -193,14 +214,21 @@ function Screen() {
|
||||
);
|
||||
}
|
||||
|
||||
// 定义一个自定义Hook:useLoadData
|
||||
export function useLoadData() {
|
||||
// 获取应用配置
|
||||
const config = useAppConfig();
|
||||
|
||||
// 根据配置中的提供商名称获取客户端API
|
||||
const api: ClientApi = getClientApi(config.modelConfig.providerName);
|
||||
|
||||
// 使用useEffect钩子在组件挂载时加载数据
|
||||
useEffect(() => {
|
||||
// 定义一个异步函数来获取模型
|
||||
(async () => {
|
||||
// 从API获取模型列表
|
||||
const models = await api.llm.models();
|
||||
// 将获取到的模型合并到配置中
|
||||
config.mergeModels(models);
|
||||
})();
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
@@ -208,19 +236,26 @@ export function useLoadData() {
|
||||
}
|
||||
|
||||
export function Home() {
|
||||
// 切换主题
|
||||
useSwitchTheme();
|
||||
// 加载数据
|
||||
useLoadData();
|
||||
// 设置HTML语言
|
||||
useHtmlLang();
|
||||
|
||||
useEffect(() => {
|
||||
// 从构建时获取配置并打印日志
|
||||
console.log("[Config] got config from build time", getClientConfig());
|
||||
// 获取访问权限
|
||||
useAccessStore.getState().fetch();
|
||||
}, []);
|
||||
|
||||
// 如果组件还未水合,显示加载中
|
||||
if (!useHasHydrated()) {
|
||||
return <Loading />;
|
||||
}
|
||||
|
||||
// 渲染主要内容
|
||||
return (
|
||||
<ErrorBoundary>
|
||||
<Router>
|
||||
|
||||
@@ -225,8 +225,8 @@ export function SideBar(props: { className?: string }) {
|
||||
{...props}
|
||||
>
|
||||
<SideBarHeader
|
||||
title="NextChat"
|
||||
subTitle="Build your own AI assistant."
|
||||
title="清明上河图小助手"
|
||||
subTitle="清明上河图小助手."
|
||||
logo={<ChatGptIcon />}
|
||||
>
|
||||
<div className={styles["sidebar-header-bar"]}>
|
||||
|
||||
Reference in New Issue
Block a user