diff --git a/frontend/public/icons/jenkins.svg b/frontend/public/icons/jenkins.svg
new file mode 100644
index 0000000..2ccb4f3
--- /dev/null
+++ b/frontend/public/icons/jenkins.svg
@@ -0,0 +1 @@
+
diff --git a/frontend/src/components/icons/TechnologyBrandIcon.tsx b/frontend/src/components/icons/TechnologyBrandIcon.tsx
index 2dccac5..3063f9c 100644
--- a/frontend/src/components/icons/TechnologyBrandIcon.tsx
+++ b/frontend/src/components/icons/TechnologyBrandIcon.tsx
@@ -4,7 +4,6 @@ import {
siDocker,
siElasticsearch,
siGrafana,
- siJenkins,
siKubernetes,
siPrometheus,
} from 'simple-icons';
@@ -13,12 +12,17 @@ const ICONS = {
docker: siDocker,
elasticsearch: siElasticsearch,
grafana: siGrafana,
- jenkins: siJenkins,
kubernetes: siKubernetes,
prometheus: siPrometheus,
} satisfies Record;
-export type TechnologyBrand = keyof typeof ICONS;
+// Jenkins 使用仓库本地官方多色 SVG(public/icons/jenkins.svg),
+// 替换 simple-icons 的单色红色版本。 // Logan.Li
+const LOCAL_SVG: Partial> = {
+ jenkins: '/icons/jenkins.svg',
+};
+
+export type TechnologyBrand = keyof typeof ICONS | 'jenkins';
interface TechnologyBrandIconProps {
brand: TechnologyBrand;
@@ -31,7 +35,20 @@ export function TechnologyBrandIcon({
className = 'h-5 w-5',
title,
}: TechnologyBrandIconProps) {
- const icon = ICONS[brand];
+ const localSrc = LOCAL_SVG[brand];
+ if (localSrc) {
+ return (
+
+ );
+ }
+
+ const icon: SimpleIcon = ICONS[brand as keyof typeof ICONS];
const label = title || icon.title;
return (
diff --git a/frontend/src/components/layout/Sidebar.tsx b/frontend/src/components/layout/Sidebar.tsx
index f4df023..bf7b7f5 100644
--- a/frontend/src/components/layout/Sidebar.tsx
+++ b/frontend/src/components/layout/Sidebar.tsx
@@ -415,7 +415,8 @@ export function Sidebar({ mobileOpen, onMobileClose }: SidebarProps) {
{/* Menu Items */}
-
+ {/* min-h-0 允许 flex 子项收缩,否则导航超出高度时 ScrollArea 不会出现滚动 // Logan.Li */}
+