添加供应商URL可点击功能:支持在默认浏览器中打开链接
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import { app, BrowserWindow, ipcMain, dialog } from 'electron'
|
import { app, BrowserWindow, ipcMain, dialog, shell } from 'electron'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
import Store from 'electron-store'
|
import Store from 'electron-store'
|
||||||
import { Provider, AppConfig } from '../shared/types'
|
import { Provider, AppConfig } from '../shared/types'
|
||||||
@@ -134,3 +134,13 @@ ipcMain.handle('checkStatus', async (_, provider: Provider) => {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
ipcMain.handle('openExternal', async (_, url: string) => {
|
||||||
|
try {
|
||||||
|
await shell.openExternal(url)
|
||||||
|
return true
|
||||||
|
} catch (error) {
|
||||||
|
console.error('打开外部链接失败:', error)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
})
|
||||||
@@ -10,5 +10,6 @@ contextBridge.exposeInMainWorld('electronAPI', {
|
|||||||
checkStatus: (provider: Provider) => ipcRenderer.invoke('checkStatus', provider),
|
checkStatus: (provider: Provider) => ipcRenderer.invoke('checkStatus', provider),
|
||||||
switchProvider: (providerId: string) => ipcRenderer.invoke('switchProvider', providerId),
|
switchProvider: (providerId: string) => ipcRenderer.invoke('switchProvider', providerId),
|
||||||
getClaudeCodeConfigPath: () => ipcRenderer.invoke('getClaudeCodeConfigPath'),
|
getClaudeCodeConfigPath: () => ipcRenderer.invoke('getClaudeCodeConfigPath'),
|
||||||
selectConfigFile: () => ipcRenderer.invoke('selectConfigFile')
|
selectConfigFile: () => ipcRenderer.invoke('selectConfigFile'),
|
||||||
|
openExternal: (url: string) => ipcRenderer.invoke('openExternal', url)
|
||||||
})
|
})
|
||||||
@@ -78,6 +78,18 @@
|
|||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.url-link {
|
||||||
|
color: #3498db;
|
||||||
|
text-decoration: none;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: color 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.url-link:hover {
|
||||||
|
color: #2980b9;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
.provider-status {
|
.provider-status {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|||||||
@@ -17,6 +17,14 @@ const ProviderList: React.FC<ProviderListProps> = ({
|
|||||||
onDelete,
|
onDelete,
|
||||||
onEdit
|
onEdit
|
||||||
}) => {
|
}) => {
|
||||||
|
const handleUrlClick = async (url: string) => {
|
||||||
|
try {
|
||||||
|
await window.electronAPI.openExternal(url)
|
||||||
|
} catch (error) {
|
||||||
|
console.error('打开链接失败:', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="provider-list">
|
<div className="provider-list">
|
||||||
{Object.values(providers).length === 0 ? (
|
{Object.values(providers).length === 0 ? (
|
||||||
@@ -45,7 +53,18 @@ const ProviderList: React.FC<ProviderListProps> = ({
|
|||||||
<span>{provider.name}</span>
|
<span>{provider.name}</span>
|
||||||
{isCurrent && <span className="current-badge">当前使用</span>}
|
{isCurrent && <span className="current-badge">当前使用</span>}
|
||||||
</div>
|
</div>
|
||||||
<div className="provider-url">{provider.apiUrl}</div>
|
<div className="provider-url">
|
||||||
|
<a
|
||||||
|
href="#"
|
||||||
|
onClick={(e) => {
|
||||||
|
e.preventDefault()
|
||||||
|
handleUrlClick(provider.apiUrl)
|
||||||
|
}}
|
||||||
|
className="url-link"
|
||||||
|
>
|
||||||
|
{provider.apiUrl}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="provider-actions">
|
<div className="provider-actions">
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ declare global {
|
|||||||
switchProvider: (providerId: string) => Promise<boolean>
|
switchProvider: (providerId: string) => Promise<boolean>
|
||||||
getClaudeCodeConfigPath: () => Promise<string>
|
getClaudeCodeConfigPath: () => Promise<string>
|
||||||
selectConfigFile: () => Promise<string | null>
|
selectConfigFile: () => Promise<string | null>
|
||||||
|
checkStatus: (provider: Provider) => Promise<boolean>
|
||||||
|
openExternal: (url: string) => Promise<boolean>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user