From 0f48a0d01e6addf0d61e868f254931f5b6def5e4 Mon Sep 17 00:00:00 2001 From: jschoi Date: Thu, 6 Nov 2025 10:12:11 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20sw=EB=B2=84=EC=A0=84,=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=20=EC=95=84=EC=9D=B4=EB=94=94=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../atoms/organisms/DeploymentDialog.vue | 65 +++++++++++-------- 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/src/components/atoms/organisms/DeploymentDialog.vue b/src/components/atoms/organisms/DeploymentDialog.vue index 5b40d9e..d2f7baf 100644 --- a/src/components/atoms/organisms/DeploymentDialog.vue +++ b/src/components/atoms/organisms/DeploymentDialog.vue @@ -10,9 +10,9 @@ import { type PackageOption = { label: string; value: string; raw: any }; type MinioRegisterModel = EdgePkgInfoVOModel & { - objectName: string; // props.artifactPath + objectName: string; type: "type1" | "type2"; - localPath: string; // 서버 저장 경로(예: downloads/temp) + localPath: string; }; const props = defineProps<{ @@ -34,7 +34,7 @@ const emit = defineEmits<{ const form = ref({ package_id: "", sw_id: "", - sw_version: "1", + sw_version: "", software_name: "", executed: true, file_type: "bundle" as "bundle" | "single", @@ -79,16 +79,6 @@ const pkgOptions = computed(() => /* ========================= 표시/숨김 스위치 ========================= */ const showArtifactPath = computed(() => !!props.artifactPath); const showUploadFile = computed(() => !showArtifactPath.value); -function getCurrentUserId(): string { - // 서버가 id를 요구한다고 하셔서, 저장돼 있을 법한 키 몇 개를 순차 확인 - try { - const raw = localStorage.getItem("external-auth"); - const obj = raw ? JSON.parse(raw) : null; - return obj?.userInfo?.username ?? obj?.userInfo?.id ?? obj?.id ?? "admin"; - } catch { - return "admin"; - } -} async function fetchPackages() { remoteError.value = ""; @@ -104,7 +94,13 @@ async function fetchPackages() { return; } - const id = getCurrentUserId(); // ex) 'admin' + let id: string; + try { + id = getRequiredExternalAuthId(); // ✅ 반드시 external-auth.id + } catch (e: any) { + remoteError.value = e?.message || "external-auth의 id가 필요합니다."; + return; + } try { remoteLoading.value = true; @@ -202,7 +198,23 @@ function onPickPackage() { else if (form.value.linux_exe_name || form.value.linux_root_path) form.value.os = "Linux"; } - +function getRequiredExternalAuthId(): string { + try { + const raw = localStorage.getItem("external-auth"); + const obj = raw ? JSON.parse(raw) : null; + const id = obj?.id; + if (id === undefined || id === null || String(id).trim() === "") { + throw new Error( + "external-auth의 id가 없습니다. 로그인 후 다시 시도하세요.", + ); + } + return String(id); + } catch { + throw new Error( + "external-auth의 id를 읽을 수 없습니다. 로그인 후 다시 시도하세요.", + ); + } +} /* ========================= 기타 계산값 ========================= */ const isWin = computed(() => form.value.os === "Windows"); const isLinux = computed(() => form.value.os === "Linux"); @@ -211,16 +223,6 @@ const archiveTypeCode = computed(() => ); const swTypeCode = computed(() => (sourceType.value === "edge" ? 1 : 0)); -function getCurrentUserIdForSubmit(): string { - try { - const raw = localStorage.getItem("external-auth"); - const obj = raw ? JSON.parse(raw) : null; - return obj?.userInfo?.username ? String(obj.userInfo.username) : "admin"; - } catch { - return "admin"; - } -} - const toInt = (v: unknown, fallback = 1) => { const n = parseInt(String(v ?? "").trim(), 10); return Number.isFinite(n) ? n : fallback; @@ -238,6 +240,13 @@ async function submit() { return (errorMsg.value = "설치 위치를 입력하세요."); if (!props.token) return (errorMsg.value = "토큰이 없습니다."); if (!selectedRaw.value) return (errorMsg.value = "패키지를 선택하세요."); + let userId: string; + try { + userId = getRequiredExternalAuthId(); + } catch (e: any) { + errorMsg.value = e?.message || "external-auth의 id가 필요합니다."; + return; + } const adSerial = selectedRaw.value?.ad_pkg_serial ?? selectedRaw.value?.adPkgSerial; const edSerial = @@ -250,7 +259,7 @@ async function submit() { pkg_serial: number; } = { sw_id: (form.value.sw_id || "").trim(), - sw_version: Number.parseInt(String(form.value.sw_version || "1"), 10) || 1, + sw_version: parseFloat(String(form.value.sw_version)), sw_name: (form.value.software_name || "").trim(), authId: props.token, pkg_serial: pkgSerial, @@ -258,7 +267,7 @@ async function submit() { execYn: form.value.executed ? 1 : 0, secretAt: !!form.value.private_only, downloadLocation: (form.value.install_location || "").trim(), - user_id: getCurrentUserIdForSubmit() || "admin", + user_id: userId, sw_type: sourceType.value === "edge" ? 1 : 0, creation_datetime: new Date().toISOString(), }; @@ -433,6 +442,8 @@ onBeforeUnmount(() => window.removeEventListener("keydown", onEsc)); v-model="form.sw_version" type="number" min="0" + step="0.01" + inputmode="decimal" />