mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-07-17 11:07:11 +08:00
feat(desktop): add log viewer entry points (NavRail + Help menu)
This commit is contained in:
@@ -3,6 +3,7 @@ import type { MenuItemConstructorOptions } from 'electron'
|
|||||||
|
|
||||||
const isMac = process.platform === 'darwin'
|
const isMac = process.platform === 'darwin'
|
||||||
const SKILL_HUB_URL = 'https://skills.cowagent.ai/'
|
const SKILL_HUB_URL = 'https://skills.cowagent.ai/'
|
||||||
|
const DOCS_URL = 'https://docs.cowagent.ai'
|
||||||
|
|
||||||
// Send a menu-triggered action to the renderer (e.g. new chat, open settings).
|
// Send a menu-triggered action to the renderer (e.g. new chat, open settings).
|
||||||
function emit(win: BrowserWindow | null, action: string) {
|
function emit(win: BrowserWindow | null, action: string) {
|
||||||
@@ -90,7 +91,12 @@ export function buildAppMenu(getWindow: () => BrowserWindow | null) {
|
|||||||
|
|
||||||
const helpMenu: MenuItemConstructorOptions = {
|
const helpMenu: MenuItemConstructorOptions = {
|
||||||
label: 'Help',
|
label: 'Help',
|
||||||
submenu: [{ label: 'Skill Hub', click: () => shell.openExternal(SKILL_HUB_URL) }],
|
submenu: [
|
||||||
|
{ label: 'View Logs', click: () => emit(win(), 'view-logs') },
|
||||||
|
{ type: 'separator' },
|
||||||
|
{ label: 'Documentation', click: () => shell.openExternal(DOCS_URL) },
|
||||||
|
{ label: 'Skill Hub', click: () => shell.openExternal(SKILL_HUB_URL) },
|
||||||
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
const template: MenuItemConstructorOptions[] = [
|
const template: MenuItemConstructorOptions[] = [
|
||||||
|
|||||||
@@ -40,6 +40,8 @@ const App: React.FC = () => {
|
|||||||
navigate('/')
|
navigate('/')
|
||||||
} else if (action === 'open-settings') {
|
} else if (action === 'open-settings') {
|
||||||
navigate('/settings')
|
navigate('/settings')
|
||||||
|
} else if (action === 'view-logs') {
|
||||||
|
navigate('/logs')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
return off
|
return off
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import {
|
|||||||
PanelLeftOpen,
|
PanelLeftOpen,
|
||||||
Sun,
|
Sun,
|
||||||
Moon,
|
Moon,
|
||||||
|
ScrollText,
|
||||||
} from 'lucide-react'
|
} from 'lucide-react'
|
||||||
import type { LucideIcon } from 'lucide-react'
|
import type { LucideIcon } from 'lucide-react'
|
||||||
import { t, getLang, setLang, Lang } from '../i18n'
|
import { t, getLang, setLang, Lang } from '../i18n'
|
||||||
@@ -88,6 +89,14 @@ const NavRail: React.FC<NavRailProps> = ({ onLangChange }) => {
|
|||||||
|
|
||||||
{/* Footer actions */}
|
{/* Footer actions */}
|
||||||
<div className={`flex-shrink-0 px-2 py-2 border-t border-subtle ${collapsed ? 'space-y-0.5' : 'flex items-center gap-1'}`}>
|
<div className={`flex-shrink-0 px-2 py-2 border-t border-subtle ${collapsed ? 'space-y-0.5' : 'flex items-center gap-1'}`}>
|
||||||
|
<FooterBtn
|
||||||
|
collapsed={collapsed}
|
||||||
|
onClick={() => navigate('/logs')}
|
||||||
|
title={t('menu_logs')}
|
||||||
|
active={location.pathname === '/logs'}
|
||||||
|
>
|
||||||
|
<ScrollText size={17} />
|
||||||
|
</FooterBtn>
|
||||||
<FooterBtn collapsed={collapsed} onClick={toggleTheme} title={theme === 'dark' ? 'Light' : 'Dark'}>
|
<FooterBtn collapsed={collapsed} onClick={toggleTheme} title={theme === 'dark' ? 'Light' : 'Dark'}>
|
||||||
{theme === 'dark' ? <Sun size={17} /> : <Moon size={17} />}
|
{theme === 'dark' ? <Sun size={17} /> : <Moon size={17} />}
|
||||||
</FooterBtn>
|
</FooterBtn>
|
||||||
@@ -108,14 +117,17 @@ const FooterBtn: React.FC<{
|
|||||||
collapsed: boolean
|
collapsed: boolean
|
||||||
onClick: () => void
|
onClick: () => void
|
||||||
title: string
|
title: string
|
||||||
|
active?: boolean
|
||||||
children: React.ReactNode
|
children: React.ReactNode
|
||||||
}> = ({ collapsed, onClick, title, children }) => (
|
}> = ({ collapsed, onClick, title, active, children }) => (
|
||||||
<button
|
<button
|
||||||
onClick={onClick}
|
onClick={onClick}
|
||||||
title={title}
|
title={title}
|
||||||
className={`inline-flex items-center gap-1.5 rounded-btn text-content-tertiary hover:text-content hover:bg-surface-2 cursor-pointer transition-colors ${
|
className={`inline-flex items-center gap-1.5 rounded-btn cursor-pointer transition-colors ${
|
||||||
collapsed ? 'w-full h-9 justify-center' : 'h-8 px-2'
|
active
|
||||||
}`}
|
? 'bg-accent-soft text-accent'
|
||||||
|
: 'text-content-tertiary hover:text-content hover:bg-surface-2'
|
||||||
|
} ${collapsed ? 'w-full h-9 justify-center' : 'h-8 px-2'}`}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
Reference in New Issue
Block a user