Преглед на файлове

feat: docker镜像导入

HeWang преди 9 месеца
родител
ревизия
63ff80d1fa
променени са 3 файла, в които са добавени 25 реда и са изтрити 13 реда
  1. 8 4
      electron/main.js
  2. 4 4
      electron/preload.js
  3. 13 5
      src/views/ReportView.vue

+ 8 - 4
electron/main.js

@@ -100,19 +100,23 @@ ipcMain.handle('dialog:open', async (event, options = {}) => {
 });
 
 
-ipcMain.on('docker-import', (event, sudoPassword, filePath, tag) => {
-    const command = 'echo "' + sudoPassword + '" | sudo -S docker import ' + filePath + ' pji_nav:' + tag
+ipcMain.on('docker-import', (event, filePath, tag) => {
+    const command = 'bash /home/cicv/work/pji_desktop/docker_import/run_docker_import.sh ' + filePath + ' pji_nav ' + tag
     console.log('导入算法镜像文件:', command);
     exec(command, (error, stdout, stderr) => {
         if (error) {
             console.error(`exec error: ${error}`);
+            event.reply('docker-import-response', { success: false, message: error.message });
             return;
+        } else {
+            console.log(`stdout: ${stdout}`);
+            console.error(`stderr: ${stderr}`);
+            event.reply('docker-import-response', { success: true, message: 'Docker image imported successfully' });
         }
-        console.log(`stdout: ${stdout}`);
-        console.error(`stderr: ${stderr}`);
     });
 });
 
+
 ipcMain.on('generate-world', (event, {rosbag_path}) => {
 
     // 使用 spawn 启动脚本

+ 4 - 4
electron/preload.js

@@ -28,17 +28,17 @@ contextBridge.exposeInMainWorld('electronAPI', {
         }
     },
     // dockerImport 函数现在接受两个参数:filePath 和 tag
-    dockerImport: (sudoPassword, filePath, tag) => {
-        console.log('sudo密码为:', sudoPassword);
+    dockerImport: (filePath, tag) => {
         console.log('docker导入算法镜像文件:', filePath, '本地镜像版本:', tag);
         // 发送事件到主进程,并带上文件路径和文件名作为参数
-        ipcRenderer.send('docker-import',sudoPassword, filePath, tag);
+        ipcRenderer.send('docker-import', filePath, tag);
     },
+    onDockerImportResponse: (callback) => ipcRenderer.on('docker-import-response', callback),
     generateWorld: (rosbag_path) => {
         // 发送事件到主进程
         ipcRenderer.send('generate-world', {rosbag_path});
     },
-    onGenerateWorldResult: (callback) =>  ipcRenderer.on('generate-world-result', callback),
+    onGenerateWorldResponse: (callback) =>  ipcRenderer.on('generate-world-result', callback),
     downloadFile: async (url, fileName, savePath) => {
         try {
             return await ipcRenderer.invoke('download-file', { url, fileName, savePath });

+ 13 - 5
src/views/ReportView.vue

@@ -101,9 +101,6 @@
               <template #footer>
                 <div class="dialog-footer">
                   <el-form :model="algorithmForm" label-width="auto">
-                    <el-form-item style="margin-bottom: 10px" label="sudo密码:">
-                      <el-input v-model="algorithmForm.sudoPassword"/>
-                    </el-form-item>
                     <el-form-item style="margin-bottom: 10px" label="算法版本:">
                       <el-input v-model="algorithmForm.tag"/>
                     </el-form-item>
@@ -321,7 +318,18 @@ const algorithmImport = async () => {
   try {
     const result = await window.electronAPI.openFileManager();
     console.log('用户选择的文件路径为:', result, ',版本为:', algorithmForm.tag);
-    window.electronAPI.dockerImport(algorithmForm.sudoPassword, result, algorithmForm.tag)
+    // 导入镜像
+    window.electronAPI.dockerImport(result, algorithmForm.tag)
+    // 监听脚本执行状态
+    window.electronAPI.onDockerImportResponse( (event, result) => {
+      if (result.success) { // 脚本执行成功
+        console.log('Script execution completed successfully.')
+        ElMessage.success("镜像导入发生成功!");
+      } else { // 脚本执行过程中发生错误
+        console.error('Script execution failed.');
+        ElMessage.error("镜像导入发生错误!");
+      }
+    })
   } catch (error) {
     console.error('打开文件管理器时出错:', error);
   }
@@ -505,7 +513,7 @@ const generateWorld = async (row) => {
     // 开启loading
     const loadingInstance = ElLoading.service({fullscreen: false, target: '.el-dialog'})
     // 监听脚本执行状态
-    window.electronAPI.onGenerateWorldResult( (event, result) => {
+    window.electronAPI.onGenerateWorldResponse( (event, result) => {
       if (result.success) { // 脚本执行成功
         console.log('Script execution completed successfully.')
         // 关闭loading