diff --git a/system1-factory/web/js/tbm-create.js b/system1-factory/web/js/tbm-create.js index e71b185..a75e2ad 100644 --- a/system1-factory/web/js/tbm-create.js +++ b/system1-factory/web/js/tbm-create.js @@ -480,7 +480,17 @@ // ==================== 저장 ==================== + var _saving = false; async function saveWizard() { + if (_saving) return; + _saving = true; + // 로딩 오버레이 표시 + var overlay = document.getElementById('loadingOverlay'); + var loadingText = document.getElementById('loadingText'); + if (overlay) { + if (loadingText) loadingText.textContent = '저장 중...'; + overlay.style.display = 'flex'; + } // 저장 버튼 비활성화 var saveBtn = document.getElementById('nextBtn'); if (saveBtn) { @@ -538,10 +548,12 @@ } catch (error) { console.error('TBM 저장 오류:', error); showToast('TBM 저장 중 오류가 발생했습니다: ' + error.message, 'error'); + if (overlay) overlay.style.display = 'none'; if (saveBtn) { saveBtn.disabled = false; saveBtn.textContent = '저장'; } + _saving = false; } } diff --git a/system1-factory/web/pages/work/tbm-create.html b/system1-factory/web/pages/work/tbm-create.html index 2106186..5bae3a7 100644 --- a/system1-factory/web/pages/work/tbm-create.html +++ b/system1-factory/web/pages/work/tbm-create.html @@ -16,6 +16,11 @@ padding: 0; padding-bottom: env(safe-area-inset-bottom); -webkit-font-smoothing: antialiased; + touch-action: manipulation; + } + button, .worker-card, .list-item, .list-item-skip, .pill-btn, .pill-btn-add, + .nav-btn, .select-all-btn, [onclick] { + touch-action: manipulation; } @media (min-width: 480px) { body { max-width: 480px; margin: 0 auto; min-height: 100vh; } @@ -808,7 +813,7 @@
-
데이터를 불러오는 중...
+
데이터를 불러오는 중...
diff --git a/system1-factory/web/pages/work/tbm-mobile.html b/system1-factory/web/pages/work/tbm-mobile.html index 579153b..50f7049 100644 --- a/system1-factory/web/pages/work/tbm-mobile.html +++ b/system1-factory/web/pages/work/tbm-mobile.html @@ -15,6 +15,13 @@ margin: 0; padding: 0; -webkit-font-smoothing: antialiased; + touch-action: manipulation; + } + button, .m-tbm-row, .m-tab, .m-new-btn, .m-detail-btn, .m-load-more, + .picker-item, .split-radio-item, .split-session-item, .pull-btn, + .de-save-btn, .de-group-btn, .de-split-btn, .pill-btn, .worker-card, + [onclick] { + touch-action: manipulation; } @media (min-width: 480px) { body { max-width: 480px; margin: 0 auto; min-height: 100vh; } @@ -824,10 +831,43 @@ from { opacity: 1; transform: translateY(0); } to { opacity: 0; transform: translateY(-10px); } } + + /* Loading overlay */ + .m-loading-overlay { + position: fixed; + inset: 0; + z-index: 9999; + background: rgba(255,255,255,0.75); + display: none; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 0.75rem; + } + .m-loading-overlay.active { display: flex; } + .m-loading-spinner { + width: 36px; + height: 36px; + border: 3px solid #e5e7eb; + border-top-color: #2563eb; + border-radius: 50%; + animation: spin 0.7s linear infinite; + } + @keyframes spin { to { transform: rotate(360deg); } } + .m-loading-text { + font-size: 0.875rem; + color: #6b7280; + } + +
+
+
불러오는 중...
+
+