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 (
-