From ef083031827bf4a9208fea290f13280ea41384e0 Mon Sep 17 00:00:00 2001 From: xiongxiao Date: Fri, 20 Mar 2026 23:00:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96Sidebar=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E6=94=AF=E6=8C=81onClick=E5=9B=9E=E8=B0=83?= =?UTF-8?q?=E5=92=8C=E5=A4=96=E9=83=A8=E9=93=BE=E6=8E=A5=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=EF=BC=9B=E6=9B=B4=E6=96=B0repos=E9=A1=B5=E9=9D=A2=EF=BC=8C?= =?UTF-8?q?=E6=8C=81=E4=B9=85=E5=8C=96=E5=BC=80=E5=8F=91=E8=80=85=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E5=99=A8=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/agents/app.ts | 16 +--------------- src/components/a/Sidebar.tsx | 15 +++++++++++++-- src/pages/repos/page.tsx | 21 ++++++++++----------- 3 files changed, 24 insertions(+), 28 deletions(-) diff --git a/src/agents/app.ts b/src/agents/app.ts index e0ae7c8..4f08c35 100644 --- a/src/agents/app.ts +++ b/src/agents/app.ts @@ -1,7 +1,5 @@ import { QueryRouterServer } from '@kevisual/router/browser' import { useContextKey } from '@kevisual/context' -import { useGiteaConfigStore } from '@/pages/config/gitea/store' -import { Gitea } from '@kevisual/gitea'; export const app = useContextKey('app', new QueryRouterServer()) // import '@kevisual/cnb-ai' @@ -9,16 +7,4 @@ export const app = useContextKey('app', new QueryRouterServer()) const url = 'https://kevisual.cn/root/cnb-ai/dist/app.js' setTimeout(() => { import(/* @vite-ignore */url) -}, 2000) - -export const gitea = useContextKey('gitea', () => { - const state = useGiteaConfigStore.getState() - const config = state.config || {} - return new Gitea({ - token: config.GITEA_TOKEN, - baseURL: config.GITEA_URL, - cors: { - baseUrl: 'https://cors.kevisual.cn' - } - }) -}) \ No newline at end of file +}, 2000) \ No newline at end of file diff --git a/src/components/a/Sidebar.tsx b/src/components/a/Sidebar.tsx index 239d543..31a177f 100644 --- a/src/components/a/Sidebar.tsx +++ b/src/components/a/Sidebar.tsx @@ -1,5 +1,4 @@ 'use client' - import { useNavigate, useLocation } from '@tanstack/react-router' import { useState } from 'react' import { @@ -23,6 +22,8 @@ export interface NavItem { badge?: string hidden?: boolean children?: NavItem[] + external?: boolean + onClick?: () => void } export interface SidebarProps { @@ -71,10 +72,20 @@ export function Sidebar({ } const handleNavClick = (item: NavItem) => { + // 优先执行 onClick 回调 + if (item.onClick) { + item.onClick() + return + } + if (item.isDeveloping) { setDevelopingDialog({ open: true, title: item.title }) - } else { + } else if (item.external && item.path.startsWith('http')) { + window.open(item.path, '_blank') + } else if (item.path.startsWith('/')) { navigate({ to: item.path }) + } else { + navigate({ href: item.path }) } } diff --git a/src/pages/repos/page.tsx b/src/pages/repos/page.tsx index 4e482b5..3e0b260 100644 --- a/src/pages/repos/page.tsx +++ b/src/pages/repos/page.tsx @@ -24,20 +24,15 @@ export const App = () => { setShowCreateDialog: state.setShowCreateDialog, }))) const [searchQuery, setSearchQuery] = useState('') - const [filterDev, setFilterDev] = useState(false) + const [filterDev, setFilterDev] = useState(() => { + const saved = localStorage.getItem('repos-filter-dev') + return saved === 'true' + }) const navigate = useNavigate(); - const me = useLayoutStore(state => state.me) - const configStore = useConfigStore(useShallow(state => ({ checkConfig: state.checkConfig }))) useEffect(() => { refresh({ showTips: false }) }, []) - useEffect(() => { - if (me && me.id) { - configStore.checkConfig({ isUser: true, reload: true }) - } - }, [me]) - - + const appList = useMemo(() => { const sortedList = [...list].sort((a, b) => { const aActive = workspaceList.some(ws => ws.slug === a.path) @@ -136,7 +131,11 @@ export const App = () => { setFilterDev(checked === true)} + onCheckedChange={(checked) => { + const value = checked === true + setFilterDev(value) + localStorage.setItem('repos-filter-dev', String(value)) + }} />