fix: use branded sidebar logo, gate help menu behind plugin, add instance pending/starting filters

This commit is contained in:
jialin
2026-07-13 13:59:13 +08:00
committed by jialin
parent cb380d676e
commit 35ed397c2a
4 changed files with 26 additions and 12 deletions
-1
View File
@@ -107,7 +107,6 @@ const baseRoutes = [
icon: 'icon-models', icon: 'icon-models',
selectedIcon: 'icon-models-filled', selectedIcon: 'icon-models-filled',
defaultIcon: 'icon-models', defaultIcon: 'icon-models',
access: 'canSeeUser',
component: './llmodels/user-models' component: './llmodels/user-models'
}, },
{ {
+3 -2
View File
@@ -1,6 +1,7 @@
import Logo from '@/assets/images/gpustack-logo.png'; import Logo from '@/assets/images/gpustack-logo.png';
import { GPUStackVersionAtom, UpdateCheckAtom, userAtom } from '@/atoms/user'; import { GPUStackVersionAtom, UpdateCheckAtom, userAtom } from '@/atoms/user';
import externalLinks from '@/constants/external-links'; import externalLinks from '@/constants/external-links';
import { useLogo } from '@/hooks/use-logo';
import { Button } from 'antd'; import { Button } from 'antd';
import { useAtom } from 'jotai'; import { useAtom } from 'jotai';
import React from 'react'; import React from 'react';
@@ -18,7 +19,7 @@ const VersionInfo: React.FC<{ intl: any }> = ({ intl }) => {
isProd, isProd,
isDev isDev
} = gpuStackVersionAtom; } = gpuStackVersionAtom;
const { sidebarLogo } = useLogo();
// user info // user info
const { is_admin } = userDataAtom || {}; const { is_admin } = userDataAtom || {};
@@ -30,7 +31,7 @@ const VersionInfo: React.FC<{ intl: any }> = ({ intl }) => {
return ( return (
<div className="version-box"> <div className="version-box">
<div className="img"> <div className="img">
<img src={Logo} alt="logo" /> <img src={sidebarLogo || Logo} alt="logo" />
</div> </div>
<div className="ver"> <div className="ver">
+13 -9
View File
@@ -4,6 +4,7 @@ import VersionInfo, { modalConfig } from '@/components/version-info';
import externalLinks from '@/constants/external-links'; import externalLinks from '@/constants/external-links';
import useBodyScroll from '@/hooks/use-body-scroll'; import useBodyScroll from '@/hooks/use-body-scroll';
import { logout } from '@/pages/login/apis'; import { logout } from '@/pages/login/apis';
import { getGPUStackPlugin } from '@/plugins';
import { useModel } from '@@/plugin-model'; import { useModel } from '@@/plugin-model';
import { import {
DiscordOutlined, DiscordOutlined,
@@ -98,6 +99,7 @@ const CustomItem = styled.div`
export const ExtraContent = (props: { isDarkTheme?: boolean }) => { export const ExtraContent = (props: { isDarkTheme?: boolean }) => {
const { isDarkTheme } = props; const { isDarkTheme } = props;
const plugin = getGPUStackPlugin();
const { saveScrollHeight, restoreScrollHeight } = useBodyScroll(); const { saveScrollHeight, restoreScrollHeight } = useBodyScroll();
const [modal, contextHolder] = Modal.useModal(); const [modal, contextHolder] = Modal.useModal();
const [version] = useAtom(GPUStackVersionAtom); const [version] = useAtom(GPUStackVersionAtom);
@@ -286,15 +288,17 @@ export const ExtraContent = (props: { isDarkTheme?: boolean }) => {
</NewLabel> </NewLabel>
)} )}
</div> </div>
<DropdownActions menu={{ ...helpMenu }} popupRender={helpPopupRender}> {!plugin && (
<IconWrapper> <DropdownActions menu={{ ...helpMenu }} popupRender={helpPopupRender}>
<IconFont <IconWrapper>
type="icon-help" <IconFont
className="font-size-20" type="icon-help"
style={{ color: 'var(--ant-color-text-tertiary)' }} className="font-size-20"
/> style={{ color: 'var(--ant-color-text-tertiary)' }}
</IconWrapper> />
</DropdownActions> </IconWrapper>
</DropdownActions>
)}
<PluginExtraField name="GlobalSettings" /> <PluginExtraField name="GlobalSettings" />
<DropdownActions menu={{ ...userMenu }} popupRender={userPopupRender}> <DropdownActions menu={{ ...userMenu }} popupRender={userPopupRender}>
<IconWrapper> <IconWrapper>
@@ -31,6 +31,16 @@ const filterOptions = {
label: 'Error', label: 'Error',
value: 'error', value: 'error',
color: 'var(--ant-color-error)' color: 'var(--ant-color-error)'
},
{
label: 'Pending',
value: 'pending',
color: 'var(--ant-color-info)'
},
{
label: 'Starting',
value: 'starting',
color: 'var(--ant-color-info)'
} }
] ]
}; };