diff --git a/src/components/dashboard/GiteaPanel.tsx b/src/components/dashboard/GiteaPanel.tsx index 92d470e..568330f 100644 --- a/src/components/dashboard/GiteaPanel.tsx +++ b/src/components/dashboard/GiteaPanel.tsx @@ -8,6 +8,7 @@ import { giteaSaveInstance, giteaListInstances, giteaDeleteInstance, + giteaUpdateInstance, giteaTestConnection, giteaGetRepoLink, giteaListLinkedRepos, @@ -46,6 +47,21 @@ export function GiteaInstancesSection() { const [instUrl, setInstUrl] = useState(""); const [instToken, setInstToken] = useState(""); const [testing, setTesting] = useState(null); + const [editingTokenId, setEditingTokenId] = useState(null); + const [newToken, setNewToken] = useState(""); + + const handleUpdateToken = async (id: string) => { + if (!newToken.trim()) return; + try { + await giteaUpdateInstance(id, { access_token: newToken.trim() }); + qc.invalidateQueries({ queryKey: ["gitea-instances"] }); + setEditingTokenId(null); + setNewToken(""); + showToast("Token 已更新 ✓ 可点「测试连接」验证"); + } catch (e) { + showToast(`❌ ${e}`); + } + }; const handleAdd = async () => { if (!instName.trim() || !instUrl.trim() || !instToken.trim()) return; @@ -105,28 +121,55 @@ export function GiteaInstancesSection() {

尚未添加 Gitea 实例——添加后可在各项目蓝图的治理面板中绑定仓库

)} {instances.map((inst) => ( -
- {inst.name} - {inst.is_default && ( - 默认 +
+
+ {inst.name} + {inst.is_default && ( + 默认 + )} + {inst.url} + + + +
+ {editingTokenId === inst.id && ( +
+ setNewToken(e.target.value)} + autoFocus + /> + +
)} - {inst.url} - -
))} {showAdd && (
setInstName(e.target.value)} /> setInstUrl(e.target.value)} /> - setInstToken(e.target.value)} /> + setInstToken(e.target.value)} />