Skip to content

Commit 2e340d5

Browse files
authored
Merge pull request #54 from MZC-CSC/develop
feat: Enhance VM transfer result handling and UI display
2 parents 5ed95af + a41341b commit 2e340d5

1 file changed

Lines changed: 57 additions & 18 deletions

File tree

front/assets/js/common/api/services/remotecmd_api.js

Lines changed: 57 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -701,14 +701,39 @@ function hideProgressToast() {
701701
// VM 타입용 전송 결과 표시 (새로 추가)
702702
function showTransferResultsForVM(results) {
703703
// VM 타입에서는 첫 번째 파일의 결과만 사용 (VM은 1개이므로)
704-
if (results.length > 0 && results[0].result) {
704+
if (results.length > 0) {
705705
const firstResult = results[0];
706-
const result = firstResult.result;
707-
const successCount = result.filter(r => r.err === null).length;
708-
const totalCount = result.length;
706+
707+
// API 응답 구조에 맞게 데이터 추출
708+
let resultArray = [];
709+
let fileName = 'Unknown File';
710+
711+
// 다양한 가능한 구조 확인
712+
if (firstResult.responseData && firstResult.responseData.results) {
713+
resultArray = Array.isArray(firstResult.responseData.results) ? firstResult.responseData.results : [];
714+
fileName = firstResult.fileName || 'Unknown File';
715+
} else if (firstResult.result && firstResult.result.results) {
716+
resultArray = Array.isArray(firstResult.result.results) ? firstResult.result.results : [];
717+
fileName = firstResult.fileName || 'Unknown File';
718+
} else if (firstResult.result && Array.isArray(firstResult.result)) {
719+
resultArray = firstResult.result;
720+
fileName = firstResult.fileName || 'Unknown File';
721+
} else if (Array.isArray(firstResult)) {
722+
resultArray = firstResult;
723+
fileName = 'Unknown File';
724+
} else {
725+
// 직접 데이터가 있는지 확인
726+
if (firstResult.vmId || firstResult.vmIp) {
727+
resultArray = [firstResult];
728+
fileName = firstResult.fileName || 'Unknown File';
729+
}
730+
}
731+
732+
const successCount = resultArray.filter(r => !r.error || r.error === '').length;
733+
const totalCount = resultArray.length;
709734

710735
// VM 타입용 모달 표시
711-
showTransferResultModal(firstResult.fileName, result, successCount, totalCount);
736+
showTransferResultModal(fileName, resultArray, successCount, totalCount);
712737
} else if (results.length > 0 && results[0].error) {
713738
// 에러가 있는 경우
714739
const firstResult = results[0];
@@ -776,7 +801,8 @@ function showTransferResultModal(fileName, result, successCount, totalCount) {
776801
<div class="card border-info">
777802
<div class="card-body text-center">
778803
<h6 class="card-title">Target Path</h6>
779-
<code>${result[0]?.command?.['0']?.split(' to ')[1] || 'N/A'}</code>
804+
<code>${(Array.isArray(result) && result.length > 0 && result[0]?.command?.['0']) ?
805+
result[0].command['0'].split(' to ')[1] || 'N/A' : 'N/A'}</code>
780806
</div>
781807
</div>
782808
</div>
@@ -794,31 +820,33 @@ function showTransferResultModal(fileName, result, successCount, totalCount) {
794820
</tr>
795821
</thead>
796822
<tbody>
797-
${result.map(r => `
798-
<tr class="${r.err === null ? 'table-success' : 'table-danger'}">
799-
<td><code>${r.vmId}</code></td>
800-
<td><code>${r.vmIp}</code></td>
823+
${(Array.isArray(result) ? result : []).map(r => {
824+
const isSuccess = !r.error || r.error === '';
825+
return `
826+
<tr class="${isSuccess ? 'table-success' : 'table-danger'}">
827+
<td><code>${r.vmId || 'N/A'}</code></td>
828+
<td><code>${r.vmIp || 'N/A'}</code></td>
801829
<td>
802-
${r.err === null ?
830+
${isSuccess ?
803831
'<span class="badge bg-success">Success</span>' :
804832
'<span class="badge bg-danger">Failed</span>'
805833
}
806834
</td>
807835
<td>
808-
${r.err === null ?
836+
${isSuccess ?
809837
`<small class="text-success">${r.stdout?.['0'] || 'Transfer Complete'}</small>` :
810-
`<small class="text-danger">${r.err}</small>`
838+
`<small class="text-danger">${r.error || 'Unknown Error'}</small>`
811839
}
812840
</td>
813841
</tr>
814-
`).join('')}
842+
`;
843+
}).join('')}
815844
</tbody>
816845
</table>
817846
</div>
818847
</div>
819848
<div class="modal-footer">
820849
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
821-
<button type="button" class="btn btn-primary" onclick="copyTransferResult()">Copy Result</button>
822850
</div>
823851
</div>
824852
</div>
@@ -909,8 +937,19 @@ function showTransferResultsModal(results, successFiles, totalFiles) {
909937
</tr>
910938
`;
911939
} else {
912-
const successCount = r.result.filter(vm => vm.err === null).length;
913-
const totalCount = r.result.length;
940+
let resultArray = [];
941+
942+
// API 응답 구조에 맞게 데이터 추출
943+
if (r.result && r.result.results) {
944+
resultArray = Array.isArray(r.result.results) ? r.result.results : [];
945+
} else if (r.result && Array.isArray(r.result)) {
946+
resultArray = r.result;
947+
} else if (r.responseData && r.responseData.results) {
948+
resultArray = Array.isArray(r.responseData.results) ? r.responseData.results : [];
949+
}
950+
951+
const successCount = resultArray.filter(vm => !vm.error || vm.error === '').length;
952+
const totalCount = resultArray.length;
914953
return `
915954
<tr>
916955
<td>${r.fileName}</td>
@@ -952,7 +991,7 @@ function copyTransferResult() {
952991
Transfer Complete: ${successCount}/${totalCount} VM
953992
954993
Details:
955-
${result.map(r => `
994+
${(Array.isArray(result) ? result : []).map(r => `
956995
VM ID: ${r.vmId}
957996
VM IP: ${r.vmIp}
958997
Status: ${r.err === null ? 'Success' : 'Failed'}

0 commit comments

Comments
 (0)