v0.19.0: 全新品牌视觉设计 - 现代化 3D logo 更新
🎨 新 logo 设计特点 - 现代 3D 风格的字母 "P" - 蓝紫渐变配色(#4fc3f7 → #1a237e,#7c4dff → #e91e63) - 纯黑背景,解决白边问题 ✨ 更新内容 - 🖼️ 应用图标:所有平台(Windows/macOS/iOS/Android/Web) - 🔲 托盘图标:所有状态(运行/停止/警告/错误) - 🎯 SVG 图标:主图标 + 紧凑版,支持任意尺寸缩放 - 🏠 界面 logo:配置管理页面 + About 页面 🛠️ 技术实现 - 使用 Tauri CLI 自动生成所有平台图标 - SVG 矢量设计确保清晰度 - 统一的视觉设计语言 🎉 全平台品牌标识统一升级完成! 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4 <noreply@anthropic.com>
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 776 B After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 774 B After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 119 KiB |
|
Before Width: | Height: | Size: 530 B After Width: | Height: | Size: 898 B |
|
Before Width: | Height: | Size: 1012 B After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 1012 B After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 765 B After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 1012 B After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 309 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 776 B After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 776 B After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 776 B After Width: | Height: | Size: 586 B |
|
Before Width: | Height: | Size: 776 B After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 776 B After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 2.0 KiB |
@@ -6,6 +6,7 @@ import {
|
||||
AlertCircle,
|
||||
} from "lucide-react";
|
||||
import { invoke } from "@tauri-apps/api/core";
|
||||
import { ProviderIcon } from "@/icons/providers";
|
||||
|
||||
interface VersionInfo {
|
||||
current: string;
|
||||
@@ -127,8 +128,8 @@ export function AboutSection() {
|
||||
<div className="space-y-6 max-w-2xl">
|
||||
{/* 应用信息 */}
|
||||
<div className="p-6 rounded-lg border text-center space-y-4">
|
||||
<div className="w-16 h-16 mx-auto rounded-2xl bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center">
|
||||
<span className="text-2xl font-bold text-white">PC</span>
|
||||
<div className="w-16 h-16 mx-auto rounded-2xl bg-gradient-to-br from-slate-900 to-slate-800 flex items-center justify-center">
|
||||
<ProviderIcon providerType="proxycast" size={40} />
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
||||
@@ -1,24 +1,42 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<defs>
|
||||
<!-- 纯黑背景 -->
|
||||
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#6366f1"/>
|
||||
<stop offset="100%" style="stop-color:#8b5cf6"/>
|
||||
<stop offset="0%" style="stop-color:#000000"/>
|
||||
<stop offset="100%" style="stop-color:#0a0a0a"/>
|
||||
</linearGradient>
|
||||
|
||||
<!-- P字母左侧渐变:蓝色系 -->
|
||||
<linearGradient id="leftP" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#4fc3f7"/>
|
||||
<stop offset="100%" style="stop-color:#1a237e"/>
|
||||
</linearGradient>
|
||||
|
||||
<!-- P字母右侧渐变:紫色系 -->
|
||||
<linearGradient id="rightP" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#7c4dff"/>
|
||||
<stop offset="100%" style="stop-color:#e91e63"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
|
||||
<!-- 圆角矩形背景 -->
|
||||
<rect x="8" y="8" width="112" height="112" rx="24" ry="24" fill="url(#bg)"/>
|
||||
|
||||
<!-- 简化的代理符号 -->
|
||||
<g fill="none" stroke="#ffffff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round">
|
||||
<!-- 左箭头 -->
|
||||
<path d="M30 64 L50 64 M30 64 L38 56 M30 64 L38 72"/>
|
||||
<!-- 中心圆 -->
|
||||
<circle cx="64" cy="64" r="14" fill="rgba(255,255,255,0.2)" stroke="#ffffff" stroke-width="3"/>
|
||||
<!-- 右箭头 -->
|
||||
<path d="M78 64 L98 64 M98 64 L90 56 M98 64 L90 72"/>
|
||||
|
||||
<!-- 简化的 P 字母 -->
|
||||
<g>
|
||||
<!-- P 的左竖条 -->
|
||||
<rect x="36" y="32" width="10" height="64" rx="3" fill="url(#leftP)"/>
|
||||
|
||||
<!-- P 的上横条 -->
|
||||
<rect x="46" y="32" width="28" height="9" rx="3" fill="url(#rightP)"/>
|
||||
|
||||
<!-- P 的中横条 -->
|
||||
<rect x="46" y="60" width="24" height="8" rx="2" fill="url(#rightP)"/>
|
||||
|
||||
<!-- P 的右竖条(上半部分) -->
|
||||
<rect x="70" y="41" width="8" height="27" rx="3" fill="url(#rightP)"/>
|
||||
</g>
|
||||
|
||||
<!-- 中心 P -->
|
||||
<text x="64" y="71" font-family="Arial, sans-serif" font-size="18" font-weight="bold" fill="#ffffff" text-anchor="middle">P</text>
|
||||
</svg>
|
||||
|
||||
<!-- 简单光晕 -->
|
||||
<circle cx="64" cy="64" r="42" fill="none" stroke="url(#rightP)" stroke-width="0.5" opacity="0.3"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1004 B After Width: | Height: | Size: 1.5 KiB |
@@ -1,45 +1,63 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<defs>
|
||||
<!-- 主渐变:科技蓝紫色 -->
|
||||
<!-- 纯黑背景 -->
|
||||
<linearGradient id="bgGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#6366f1"/>
|
||||
<stop offset="100%" style="stop-color:#8b5cf6"/>
|
||||
<stop offset="0%" style="stop-color:#000000"/>
|
||||
<stop offset="100%" style="stop-color:#0a0a0a"/>
|
||||
</linearGradient>
|
||||
<!-- 高光渐变 -->
|
||||
|
||||
<!-- P字母左侧竖条渐变:从蓝色到深蓝 -->
|
||||
<linearGradient id="leftGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#4fc3f7"/>
|
||||
<stop offset="50%" style="stop-color:#3f51b5"/>
|
||||
<stop offset="100%" style="stop-color:#1a237e"/>
|
||||
</linearGradient>
|
||||
|
||||
<!-- P字母右侧弧形渐变:从蓝紫到粉紫 -->
|
||||
<linearGradient id="rightGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#7c4dff"/>
|
||||
<stop offset="50%" style="stop-color:#9c27b0"/>
|
||||
<stop offset="100%" style="stop-color:#e91e63"/>
|
||||
</linearGradient>
|
||||
|
||||
<!-- 高光效果 -->
|
||||
<linearGradient id="highlightGradient" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:rgba(255,255,255,0.2)"/>
|
||||
<stop offset="0%" style="stop-color:rgba(255,255,255,0.4)"/>
|
||||
<stop offset="50%" style="stop-color:rgba(255,255,255,0.1)"/>
|
||||
<stop offset="100%" style="stop-color:rgba(255,255,255,0)"/>
|
||||
</linearGradient>
|
||||
|
||||
<!-- 阴影和发光效果 -->
|
||||
<filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
|
||||
<feGaussianBlur stdDeviation="3" result="coloredBlur"/>
|
||||
<feMerge>
|
||||
<feMergeNode in="coloredBlur"/>
|
||||
<feMergeNode in="SourceGraphic"/>
|
||||
</feMerge>
|
||||
</filter>
|
||||
</defs>
|
||||
|
||||
|
||||
<!-- 圆角矩形背景 -->
|
||||
<rect x="8" y="8" width="112" height="112" rx="24" ry="24" fill="url(#bgGradient)"/>
|
||||
|
||||
<!-- 高光层 -->
|
||||
<rect x="8" y="8" width="112" height="56" rx="24" ry="24" fill="url(#highlightGradient)"/>
|
||||
|
||||
<!-- 代理/转换符号:双向箭头穿过中心节点 -->
|
||||
<g fill="none" stroke="#ffffff" stroke-width="3" stroke-linecap="round" stroke-linejoin="round">
|
||||
<!-- 左侧输入箭头 -->
|
||||
<path d="M28 64 L48 64"/>
|
||||
<path d="M28 64 L36 56"/>
|
||||
<path d="M28 64 L36 72"/>
|
||||
|
||||
<!-- 中心六边形节点(代表代理服务器) -->
|
||||
<polygon points="64,42 82,53 82,75 64,86 46,75 46,53" fill="rgba(255,255,255,0.15)" stroke="#ffffff" stroke-width="2.5"/>
|
||||
|
||||
<!-- 中心 P 字母 -->
|
||||
<text x="64" y="70" font-family="Arial, sans-serif" font-size="24" font-weight="bold" fill="#ffffff" text-anchor="middle">P</text>
|
||||
|
||||
<!-- 右侧输出箭头 -->
|
||||
<path d="M80 64 L100 64"/>
|
||||
<path d="M100 64 L92 56"/>
|
||||
<path d="M100 64 L92 72"/>
|
||||
|
||||
<!-- P字母主体 -->
|
||||
<g filter="url(#glow)">
|
||||
<!-- P的左侧竖条 -->
|
||||
<path d="M 32 28 L 32 96 Q 32 100 36 100 L 44 100 Q 48 100 48 96 L 48 28 Q 48 24 44 24 L 36 24 Q 32 24 32 28 Z"
|
||||
fill="url(#leftGradient)"/>
|
||||
|
||||
<!-- P的上半部分(顶部横条和右上弧) -->
|
||||
<path d="M 48 28 Q 48 24 52 24 L 72 24 Q 88 24 96 32 Q 104 40 104 56 Q 104 72 96 80 Q 88 88 72 88 L 52 88 Q 48 88 48 84 L 48 72 Q 48 68 52 68 L 68 68 Q 76 68 80 64 Q 84 60 84 56 Q 84 52 80 48 Q 76 44 68 44 L 52 44 Q 48 44 48 40 L 48 28 Z"
|
||||
fill="url(#rightGradient)"/>
|
||||
|
||||
<!-- 左侧高光 -->
|
||||
<rect x="34" y="26" width="6" height="30" rx="3" fill="url(#highlightGradient)" opacity="0.8"/>
|
||||
|
||||
<!-- 右侧高光 -->
|
||||
<ellipse cx="78" cy="42" rx="8" ry="12" fill="url(#highlightGradient)" opacity="0.6"/>
|
||||
</g>
|
||||
|
||||
<!-- 装饰点:表示多个 Provider -->
|
||||
<circle cx="32" cy="44" r="3" fill="rgba(255,255,255,0.6)"/>
|
||||
<circle cx="32" cy="84" r="3" fill="rgba(255,255,255,0.6)"/>
|
||||
<circle cx="96" cy="44" r="3" fill="rgba(255,255,255,0.6)"/>
|
||||
<circle cx="96" cy="84" r="3" fill="rgba(255,255,255,0.6)"/>
|
||||
</svg>
|
||||
|
||||
<!-- 外围光晕 -->
|
||||
<circle cx="64" cy="64" r="45" fill="none" stroke="url(#rightGradient)" stroke-width="0.5" opacity="0.3"/>
|
||||
<circle cx="64" cy="64" r="50" fill="none" stroke="url(#leftGradient)" stroke-width="0.3" opacity="0.2"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2.7 KiB |
@@ -21,6 +21,7 @@ import MinimaxIcon from "./minimax.svg?react";
|
||||
import DoubaoIcon from "./doubao.svg?react";
|
||||
import AzureIcon from "./azure.svg?react";
|
||||
import AntigravityIcon from "./antigravity.svg?react";
|
||||
import ProxycastIcon from "./proxycast.svg?react";
|
||||
|
||||
// 图标组件映射
|
||||
const iconComponents: Record<string, ComponentType<SVGProps<SVGSVGElement>>> = {
|
||||
@@ -42,6 +43,7 @@ const iconComponents: Record<string, ComponentType<SVGProps<SVGSVGElement>>> = {
|
||||
doubao: DoubaoIcon,
|
||||
azure: AzureIcon,
|
||||
antigravity: AntigravityIcon,
|
||||
proxycast: ProxycastIcon,
|
||||
};
|
||||
|
||||
interface ProviderIconProps {
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none">
|
||||
<defs>
|
||||
<!-- P字母左侧渐变:蓝色系 -->
|
||||
<linearGradient id="leftP" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#4fc3f7"/>
|
||||
<stop offset="100%" style="stop-color:#1a237e"/>
|
||||
</linearGradient>
|
||||
<!-- P字母右侧渐变:紫色系 -->
|
||||
<linearGradient id="rightP" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#7c4dff"/>
|
||||
<stop offset="100%" style="stop-color:#e91e63"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- P 字母形状 -->
|
||||
<!-- 左竖条 -->
|
||||
<rect x="4" y="4" width="3" height="16" rx="1" fill="url(#leftP)"/>
|
||||
|
||||
<!-- 上横条 -->
|
||||
<rect x="7" y="4" width="8" height="2.5" rx="1" fill="url(#rightP)"/>
|
||||
|
||||
<!-- 中横条 -->
|
||||
<rect x="7" y="11" width="6.5" height="2.2" rx="0.8" fill="url(#rightP)"/>
|
||||
|
||||
<!-- 右竖条(上半部分) -->
|
||||
<rect x="15" y="6.5" width="2.5" height="6.7" rx="1" fill="url(#rightP)"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1013 B |
@@ -20,6 +20,7 @@ export const availableIcons = [
|
||||
"doubao",
|
||||
"azure",
|
||||
"antigravity",
|
||||
"proxycast",
|
||||
] as const;
|
||||
|
||||
// Provider 类型到图标名称的映射
|
||||
@@ -45,6 +46,7 @@ export const providerTypeToIcon: Record<string, string> = {
|
||||
doubao: "doubao",
|
||||
azure: "azure",
|
||||
aws: "aws",
|
||||
proxycast: "proxycast",
|
||||
};
|
||||
|
||||
// 获取规范化的图标名称
|
||||
|
||||