From 62631a3b9528c42d26a3a2db7a1d1cba2b205c71 Mon Sep 17 00:00:00 2001 From: QihuAI Design Date: Tue, 14 Jul 2026 22:33:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8A=80=E8=83=BD=E5=B8=82=E5=9C=BAHub?= =?UTF-8?q?=E5=AF=BC=E5=85=A5MCP/Skills=E6=B7=BB=E5=8A=A0=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E8=AF=B4=E6=98=8E=E8=BE=93=E5=85=A5=EF=BC=9BMCP?= =?UTF-8?q?=E4=BC=A0=E8=BE=93=E4=BB=A3=E7=A0=81=E9=AA=8C=E8=AF=81=E5=90=8E?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E5=AF=BC=E5=85=A5=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/front/MarketPage.tsx | 62 +++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 5 deletions(-) diff --git a/frontend/src/pages/front/MarketPage.tsx b/frontend/src/pages/front/MarketPage.tsx index 9f71abf..5f0f2c4 100644 --- a/frontend/src/pages/front/MarketPage.tsx +++ b/frontend/src/pages/front/MarketPage.tsx @@ -870,7 +870,7 @@ interface HubImportModalProps { appType: 'skill' | 'mcp'; platforms: typeof skillsHubPlatforms; onClose: () => void; - onImport: (platformName: string, url: string, skillName: string, price?: number) => void; + onImport: (platformName: string, url: string, skillName: string, price?: number, description?: string) => void; } const HubImportModal: React.FC = ({ appType, platforms, onClose, onImport }) => { @@ -884,6 +884,8 @@ const HubImportModal: React.FC = ({ appType, platforms, onC const [hubCode, setHubCode] = useState(''); const [hubCodeVerifyResult, setHubCodeVerifyResult] = useState<'idle' | 'checking' | 'pass' | 'fail'>('idle'); const [hubCodeVerifyMsg, setHubCodeVerifyMsg] = useState(''); + const [hubName, setHubName] = useState(''); + const [hubDescription, setHubDescription] = useState(''); const handleVisit = (url: string) => { window.open(url, '_blank'); @@ -908,9 +910,10 @@ const HubImportModal: React.FC = ({ appType, platforms, onC const handleImport = (platformId: string) => { const url = importUrl[platformId]; - // For Skills: require URL; for MCP: require code verification pass + // For Skills: require URL; for MCP: require code verification pass + name if (appType === 'skill' && !url?.trim()) return; if (appType === 'mcp' && hubCodeVerifyResult !== 'pass') return; + if (appType === 'mcp' && !hubName.trim()) return; setImportingId(platformId); setImportStatus('verifying'); setStatusMsg(appType === 'mcp' ? '正在验证代码...' : '正在验证URL链接...'); @@ -930,13 +933,16 @@ const HubImportModal: React.FC = ({ appType, platforms, onC setStatusMsg(step.msg); if (step.status === 'published') { setTimeout(() => { - onImport(platformId, appType === 'mcp' ? hubCode : url, extractSkillName(url, platformId), importPrice); + const name = appType === 'skill' ? (hubName || extractSkillName(url || '', platformId)) : hubName; + onImport(platformId, appType === 'mcp' ? hubCode : (url || ''), name, importPrice, hubDescription); setImportingId(null); setImportStatus('idle'); setImportUrl(prev => ({ ...prev, [platformId]: '' })); setHubCode(''); setHubCodeVerifyResult('idle'); setHubCodeVerifyMsg(''); + setHubName(''); + setHubDescription(''); }, 1000); } }, delay); @@ -974,6 +980,28 @@ const HubImportModal: React.FC = ({ appType, platforms, onC + {/* Name & Description */} +
+ + setHubName(e.target.value)} + /> +
+
+ +