diff --git a/ui/src/App.tsx b/ui/src/App.tsx index 0988a41..32a6a04 100644 --- a/ui/src/App.tsx +++ b/ui/src/App.tsx @@ -1,7 +1,8 @@ -import { useEffect } from "react"; +import { useEffect, useState } from "react"; import { NavLink, Route, Routes } from "react-router-dom"; import { EngineDeployEvent, onEvent } from "./api"; import { useStore } from "./store"; +import Icon from "./components/Icon"; import ModelsPage from "./pages/ModelsPage"; import ChatPage from "./pages/ChatPage"; import ModelPlazaPage from "./pages/ModelPlazaPage"; @@ -9,20 +10,31 @@ import ServerPage from "./pages/ServerPage"; import SettingsPage from "./pages/SettingsPage"; const navItems = [ - { to: "/chat", label: "对话" }, - { to: "/", label: "模型管理", end: true }, - { to: "/plaza", label: "模型广场" }, - { to: "/server", label: "本地服务" }, - { to: "/settings", label: "设置" }, + { to: "/chat", label: "对话", icon: "chat" }, + { to: "/", label: "模型管理", icon: "box", end: true }, + { to: "/plaza", label: "模型广场", icon: "plaza" }, + { to: "/server", label: "服务管理", icon: "server" }, + { to: "/settings", label: "设置", icon: "settings" }, ]; export default function App() { + const [collapsed, setCollapsed] = useState( + () => localStorage.getItem("xianren-nav-collapsed") === "1", + ); const refreshModels = useStore((s) => s.refreshModels); const refreshEngine = useStore((s) => s.refreshEngine); const refreshServer = useStore((s) => s.refreshServer); const refreshConversations = useStore((s) => s.refreshConversations); const setDeployState = useStore((s) => s.setDeployState); + function toggleCollapsed() { + setCollapsed((v) => { + const next = !v; + localStorage.setItem("xianren-nav-collapsed", next ? "1" : "0"); + return next; + }); + } + useEffect(() => { refreshModels(); refreshEngine(); @@ -53,33 +65,52 @@ export default function App() { return (
-