From 94b371ca0f28984c320d1f821848851a7a4ef8b1 Mon Sep 17 00:00:00 2001 From: dohyeons Date: Tue, 9 Dec 2025 16:38:47 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B3=B5=EC=B0=A8=EB=93=B1=EB=A1=9D/=EC=9A=B4?= =?UTF-8?q?=ED=96=89=EC=95=8C=EB=A6=BC=20=EA=B8=B0=EB=8A=A5=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0=20-=20vehicles=20=ED=85=8C=EC=9D=B4=EB=B8=94=20?= =?UTF-8?q?=EC=B6=9C=EB=B0=9C=EC=A7=80/=EB=8F=84=EC=B0=A9=EC=A7=80=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=20=EB=B0=8F=20=EC=9A=B4=ED=96=89=EC=A2=85?= =?UTF-8?q?=EB=A3=8C=20=EC=8B=9C=20=EC=B4=88=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/controllers/dynamicFormController.ts | 20 ++++++-- frontend/lib/utils/buttonActions.ts | 49 +++++++++++++++++++ 2 files changed, 65 insertions(+), 4 deletions(-) diff --git a/backend-node/src/controllers/dynamicFormController.ts b/backend-node/src/controllers/dynamicFormController.ts index 97cd2cc1..98606f51 100644 --- a/backend-node/src/controllers/dynamicFormController.ts +++ b/backend-node/src/controllers/dynamicFormController.ts @@ -427,7 +427,8 @@ export const updateFieldValue = async ( ): Promise => { try { const { companyCode, userId } = req.user as any; - const { tableName, keyField, keyValue, updateField, updateValue } = req.body; + const { tableName, keyField, keyValue, updateField, updateValue } = + req.body; console.log("πŸ”„ [updateFieldValue] μš”μ²­:", { tableName, @@ -440,16 +441,27 @@ export const updateFieldValue = async ( }); // ν•„μˆ˜ ν•„λ“œ 검증 - if (!tableName || !keyField || keyValue === undefined || !updateField || updateValue === undefined) { + if ( + !tableName || + !keyField || + keyValue === undefined || + !updateField || + updateValue === undefined + ) { return res.status(400).json({ success: false, - message: "ν•„μˆ˜ ν•„λ“œκ°€ λˆ„λ½λ˜μ—ˆμŠ΅λ‹ˆλ‹€. (tableName, keyField, keyValue, updateField, updateValue)", + message: + "ν•„μˆ˜ ν•„λ“œκ°€ λˆ„λ½λ˜μ—ˆμŠ΅λ‹ˆλ‹€. (tableName, keyField, keyValue, updateField, updateValue)", }); } // SQL μΈμ μ…˜ λ°©μ§€λ₯Ό μœ„ν•œ ν…Œμ΄λΈ”λͺ…/컬럼λͺ… 검증 const validNamePattern = /^[a-zA-Z_][a-zA-Z0-9_]*$/; - if (!validNamePattern.test(tableName) || !validNamePattern.test(keyField) || !validNamePattern.test(updateField)) { + if ( + !validNamePattern.test(tableName) || + !validNamePattern.test(keyField) || + !validNamePattern.test(updateField) + ) { return res.status(400).json({ success: false, message: "μœ νš¨ν•˜μ§€ μ•Šμ€ ν…Œμ΄λΈ”λͺ… λ˜λŠ” 컬럼λͺ…μž…λ‹ˆλ‹€.", diff --git a/frontend/lib/utils/buttonActions.ts b/frontend/lib/utils/buttonActions.ts index c5e86849..e0fb66b7 100644 --- a/frontend/lib/utils/buttonActions.ts +++ b/frontend/lib/utils/buttonActions.ts @@ -3818,6 +3818,7 @@ export class ButtonActionExecutor { const keyValue = resolveSpecialKeyword(config.trackingStatusKeySourceField || "__userId__", context); if (keyValue) { + // μƒνƒœ μ—…λ°μ΄νŠΈ await apiClient.put("/dynamic-form/update-field", { tableName: statusTableName, keyField: keyField, @@ -3826,6 +3827,37 @@ export class ButtonActionExecutor { updateValue: config.trackingStatusOnStart, }); console.log("βœ… μƒνƒœ λ³€κ²½ μ™„λ£Œ:", config.trackingStatusOnStart); + + // πŸ†• μΆœλ°œμ§€/도착지도 vehicles ν…Œμ΄λΈ”μ— μ €μž₯ + if (departure) { + try { + await apiClient.put("/dynamic-form/update-field", { + tableName: statusTableName, + keyField: keyField, + keyValue: keyValue, + updateField: "departure", + updateValue: departure, + }); + console.log("βœ… μΆœλ°œμ§€ μ €μž₯ μ™„λ£Œ:", departure); + } catch { + // 컬럼이 μ—†μœΌλ©΄ λ¬΄μ‹œ + } + } + + if (arrival) { + try { + await apiClient.put("/dynamic-form/update-field", { + tableName: statusTableName, + keyField: keyField, + keyValue: keyValue, + updateField: "arrival", + updateValue: arrival, + }); + console.log("βœ… 도착지 μ €μž₯ μ™„λ£Œ:", arrival); + } catch { + // 컬럼이 μ—†μœΌλ©΄ λ¬΄μ‹œ + } + } } } catch (statusError) { console.warn("⚠️ μƒνƒœ λ³€κ²½ μ‹€νŒ¨:", statusError); @@ -4032,6 +4064,23 @@ export class ButtonActionExecutor { updateValue: effectiveConfig.trackingStatusOnStop, }); console.log("βœ… μƒνƒœ λ³€κ²½ μ™„λ£Œ:", effectiveConfig.trackingStatusOnStop); + + // πŸ†• μš΄ν–‰ μ’…λ£Œ μ‹œ vehicles ν…Œμ΄λΈ”μ˜ μΆœλ°œμ§€/도착지/μœ„λ„/경도λ₯Ό null둜 μ΄ˆκΈ°ν™” + const fieldsToReset = ["departure", "arrival", "latitude", "longitude"]; + for (const field of fieldsToReset) { + try { + await apiClient.put("/dynamic-form/update-field", { + tableName: statusTableName, + keyField: keyField, + keyValue: keyValue, + updateField: field, + updateValue: null, + }); + } catch { + // 컬럼이 μ—†μœΌλ©΄ λ¬΄μ‹œ + } + } + console.log("βœ… μΆœλ°œμ§€/도착지/μœ„λ„/경도 μ΄ˆκΈ°ν™” μ™„λ£Œ"); } } catch (statusError) { console.warn("⚠️ μƒνƒœ λ³€κ²½ μ‹€νŒ¨:", statusError);