diff --git a/src/api/index.js b/src/api/index.js index fd8a3f4..bcddbfd 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -85,8 +85,8 @@ export const instanceApi = { api.post('/frpcAct/instanceMgr/restart', { instanceName }), getInstanceLogs: (instanceName) => api.get('/frpcAct/instanceMgr/logs', { params: { instanceName } }), - getInstanceProxies: (instanceName) => - api.get('/frpcAct/instanceMgr/proxies', { params: { instanceName } }), + getInstanceProxies: (instanceID) => + api.get('/frpcAct/proxyMgr/list', { params: { instanceID } }), createProxy: (instanceID, proxyInfo) => api.post('/frpcAct/proxyMgr/create', { instanceID, proxyInfo }) }; diff --git a/src/styles/common.css b/src/styles/common.css index 79def9a..5fcc6d5 100644 --- a/src/styles/common.css +++ b/src/styles/common.css @@ -518,7 +518,10 @@ } .proxy-item { - padding: 16px; + display: flex; + flex-direction: column; + gap: 12px; + padding: 12px; background: #f9f9f9; border-radius: 6px; } @@ -527,20 +530,31 @@ display: flex; justify-content: space-between; align-items: center; - margin-bottom: 12px; } .proxy-name { - font-size: 16px; + font-size: 18px; font-weight: 600; color: var(--text-color); transition: color 0.3s; } +.proxy-type { + display: inline-block; + padding: 4px 12px; + border-radius: 12px; + font-size: 14px; + font-weight: 500; + background: var(--primary-bg); + color: var(--primary-color); + text-transform: uppercase; +} + .proxy-details { display: flex; flex-direction: column; gap: 8px; + padding-left: 12px; } .proxy-detail { diff --git a/src/views/InstanceDetail.vue b/src/views/InstanceDetail.vue index 35e2b45..46aed56 100644 --- a/src/views/InstanceDetail.vue +++ b/src/views/InstanceDetail.vue @@ -133,14 +133,16 @@
{{ proxy.name }} - - {{ proxy.status }} - + {{ proxy.type }}
-
- {{ key }}: - {{ value }} +
+ Local Address + {{ proxy.localIP }}:{{ proxy.localPort }} +
+
+ Remote Port + {{ proxy.remotePort }}
@@ -283,11 +285,14 @@ export default { const loadProxies = async () => { try { - const result = await instanceApi.getInstanceProxies(instanceName.value); - proxies.value = result.data.map(proxy => ({ + const result = await instanceApi.getInstanceProxies(instanceID.value); + const proxyList = result.data.proxies || []; + proxies.value = proxyList.map(proxy => ({ name: proxy.name, - status: proxy.status || 'unknown', - details: proxy + type: proxy.type, + localIP: proxy.local_ip, + localPort: proxy.local_port, + remotePort: proxy.remote_port })); } catch (error) { showNotification('Load proxy list failed', 'error'); @@ -424,10 +429,10 @@ export default { } }; - onMounted(() => { - loadInstanceConfig(); - loadProxies(); - loadLogs(); + onMounted(async () => { + await loadInstanceConfig(); + await loadProxies(); + await loadLogs(); }); return { @@ -482,6 +487,57 @@ export default { gap: 12px; } +.proxy-item { + padding: 16px; + border-radius: 8px; + background: var(--card-bg); + border: 1px solid var(--border-color); +} + +.proxy-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 12px; + gap: 12px; +} + +.proxy-name { + font-size: 16px; + font-weight: 600; + color: var(--text-color); +} + +.proxy-type { + display: inline-block; + padding: 4px 12px; + border-radius: 12px; + font-size: 12px; + font-weight: 500; + background: var(--primary-bg); + color: var(--primary-color); + text-transform: uppercase; +} + +.proxy-detail { + display: flex; + align-items: center; + gap: 8px; + font-size: 14px; + border: 5px solid var(--border-color); +} + +.proxy-key { + color: var(--text-secondary); + font-weight: 500; + min-width: 90px; +} + +.proxy-value { + color: var(--text-color); + font-family: monospace; +} + .log-item { padding: 8px; border-radius: 4px;