feat: Docker管理器添加进入容器和查看日志功能按钮

#49
This commit is contained in:
Baobhan Sith
2025-06-04 09:55:31 +08:00
parent 4d22bcb3c9
commit a81fb6fdaf
4 changed files with 34 additions and 5 deletions
@@ -1,14 +1,16 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed } from 'vue'; import { computed } from 'vue';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { useSessionStore } from '../stores/session.store'; import { useSessionStore } from '../stores/session.store';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
import { useWorkspaceEventEmitter } from '../composables/workspaceEvents';
const { t } = useI18n(); const { t } = useI18n();
const sessionStore = useSessionStore(); const sessionStore = useSessionStore();
const { activeSession } = storeToRefs(sessionStore); // Get reactive active session const { activeSession } = storeToRefs(sessionStore); // Get reactive active session
const emitWorkspaceEvent = useWorkspaceEventEmitter();
// --- Get Docker Manager Instance from Active Session --- // --- Get Docker Manager Instance from Active Session ---
const dockerManager = computed(() => activeSession.value?.dockerManager); const dockerManager = computed(() => activeSession.value?.dockerManager);
@@ -33,6 +35,20 @@ const toggleExpand = (containerId: string) => {
dockerManager.value?.toggleExpand(containerId); dockerManager.value?.toggleExpand(containerId);
}; };
const enterContainer = (containerId: string) => {
if (activeSession.value?.sessionId) {
const command = `docker exec -it ${containerId} sh\n`; // \n for auto-execution
emitWorkspaceEvent('terminal:sendCommand', { command, sessionId: activeSession.value.sessionId });
}
};
const viewContainerLogs = (containerId: string) => {
if (activeSession.value?.sessionId) {
const command = `docker logs --tail 1000 -f ${containerId}\n`; // \n for auto-execution
emitWorkspaceEvent('terminal:sendCommand', { command, sessionId: activeSession.value.sessionId });
}
};
// --- Removed internal state, methods (setupWsListeners, clearWsListeners, requestDockerStatus), watcher, and lifecycle hooks (onMounted, onUnmounted) --- // --- Removed internal state, methods (setupWsListeners, clearWsListeners, requestDockerStatus), watcher, and lifecycle hooks (onMounted, onUnmounted) ---
</script> </script>
@@ -142,9 +158,15 @@ const toggleExpand = (containerId: string) => {
<button @click="sendDockerCommand(container.id, 'restart')" :title="t('dockerManager.action.restart')" class="text-text-secondary hover:text-blue-500 disabled:text-text-disabled disabled:cursor-not-allowed transition-colors duration-150 p-0.5 text-base" :disabled="container.State !== 'running'"> <button @click="sendDockerCommand(container.id, 'restart')" :title="t('dockerManager.action.restart')" class="text-text-secondary hover:text-blue-500 disabled:text-text-disabled disabled:cursor-not-allowed transition-colors duration-150 p-0.5 text-base" :disabled="container.State !== 'running'">
<i class="fas fa-sync-alt"></i> <i class="fas fa-sync-alt"></i>
</button> </button>
<button @click="sendDockerCommand(container.id, 'remove')" :title="t('dockerManager.action.remove')" class="text-text-secondary hover:text-red-500 disabled:text-text-disabled disabled:cursor-not-allowed transition-colors duration-150 p-0.5 text-base" :disabled="container.State === 'running'"> <button @click="sendDockerCommand(container.id, 'remove')" :title="t('dockerManager.action.remove')" class="text-text-secondary hover:text-red-500 disabled:text-text-disabled disabled:cursor-not-allowed transition-colors duration-150 p-0.5 text-base" >
<i class="fas fa-trash-alt"></i> <i class="fas fa-trash-alt"></i>
</button> </button>
<button @click="enterContainer(container.id)" :title="t('dockerManager.action.enter')" class="text-text-secondary hover:text-blue-400 transition-colors duration-150 p-0.5 text-base">
<i class="fas fa-terminal"></i>
</button>
<button @click="viewContainerLogs(container.id)" :title="t('dockerManager.action.logs')" class="text-text-secondary hover:text-gray-400 transition-colors duration-150 p-0.5 text-base">
<i class="fas fa-file-alt"></i>
</button>
</div> </div>
</td> </td>
+3 -1
View File
@@ -1387,7 +1387,9 @@
"restart": "Restart", "restart": "Restart",
"stop": "Stop", "stop": "Stop",
"start": "Start", "start": "Start",
"remove": "Remove" "remove": "Remove",
"enter": "Enter",
"logs": "Logs"
}, },
"waitingForSsh": "Waiting for SSH connection...", "waitingForSsh": "Waiting for SSH connection...",
"stats": { "stats": {
+4 -1
View File
@@ -316,7 +316,10 @@
"remove": "削除", "remove": "削除",
"restart": "再起動", "restart": "再起動",
"start": "起動", "start": "起動",
"stop": "停止" "stop": "停止",
"enter": "入力",
"logs": "ログ"
}, },
"error": { "error": {
"commandFailed": "リモートコマンド'{command}'の実行に失敗しました", "commandFailed": "リモートコマンド'{command}'の実行に失敗しました",
+3 -1
View File
@@ -1391,7 +1391,9 @@
"restart": "重启", "restart": "重启",
"stop": "停止", "stop": "停止",
"start": "启动", "start": "启动",
"remove": "移除" "remove": "移除",
"enter": "进入",
"logs": "日志"
}, },
"waitingForSsh": "等待 SSH 连接...", "waitingForSsh": "等待 SSH 连接...",
"stats": { "stats": {