feat(ux): 전체 시스템 모바일 UX 개선 — 햄버거메뉴·필터반응형·터치타겟·iOS줌방지

7개 시스템(tkpurchase/tksafety/tksupport/tkuser/system1/system2/system3)의
모바일 사용성 일괄 개선. system1(tkfb)의 모바일 메뉴 패턴을 3개 신규 시스템에 적용.

주요 변경:
- 모바일 햄버거 메뉴: tkpurchase/tksafety/tksupport에 toggleMobileMenu+overlay 추가
- 필터 반응형: 768px 이하 2열 그리드 전환 (filter-bar/filter-actions 클래스)
- 터치 타겟 44px: 테이블 액션 버튼 36px+gap, tksafety ±버튼 w-11
- iOS 줌 방지: input/select/textarea font-size 16px
- tkuser: 탭 가로스크롤+fade힌트, 사이드바·grid·드롭다운 반응형
- system1: 대시보드 인라인 width 제거, 이동설비 그리드 1열
- system2: 사진그리드 4열, 유형버튼 2열 (480px 이하)
- system3: 카드 내 액션 버튼 stopPropagation 추가
- 캐시 무효화: 전체 HTML ?v=2026031401

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-03-14 17:57:47 +09:00
parent 2d8ac92404
commit fe5f7cd155
86 changed files with 667 additions and 373 deletions

View File

@@ -7,8 +7,8 @@
<link rel="preload" href="https://cdn.tailwindcss.com" as="script">
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<link rel="stylesheet" href="/static/css/tkqc-common.css?v=20260306">
<link rel="stylesheet" href="/static/css/ai-assistant.css?v=20260307">
<link rel="stylesheet" href="/static/css/tkqc-common.css?v=2026031401">
<link rel="stylesheet" href="/static/css/ai-assistant.css?v=2026031401">
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<script src="/static/js/lib/purify.min.js"></script>
</head>
@@ -273,14 +273,14 @@
</div>
<!-- 스크립트 -->
<script src="/static/js/core/permissions.js?v=20260308"></script>
<script src="/static/js/components/common-header.js?v=20260313"></script>
<script src="/static/js/core/page-manager.js?v=20260308"></script>
<script src="/static/js/api.js?v=20260308"></script>
<script src="/static/js/core/auth-manager.js?v=20260313"></script>
<script src="/static/js/utils/issue-helpers.js?v=20260308"></script>
<script src="/static/js/utils/toast.js?v=20260308"></script>
<script src="/static/js/components/mobile-bottom-nav.js?v=20260308"></script>
<script src="/static/js/pages/ai-assistant.js?v=20260313"></script>
<script src="/static/js/core/permissions.js?v=2026031401"></script>
<script src="/static/js/components/common-header.js?v=2026031401"></script>
<script src="/static/js/core/page-manager.js?v=2026031401"></script>
<script src="/static/js/api.js?v=2026031401"></script>
<script src="/static/js/core/auth-manager.js?v=2026031401"></script>
<script src="/static/js/utils/issue-helpers.js?v=2026031401"></script>
<script src="/static/js/utils/toast.js?v=2026031401"></script>
<script src="/static/js/components/mobile-bottom-nav.js?v=2026031401"></script>
<script src="/static/js/pages/ai-assistant.js?v=2026031401"></script>
</body>
</html>

View File

@@ -301,6 +301,6 @@
<script src="/static/js/utils/date-utils.js"></script>
<script src="/static/js/utils/image-utils.js"></script>
<script src="/static/js/core/permissions.js"></script>
<script src="/static/js/app.js?v=20260313"></script>
<script src="/static/js/app.js?v=2026031401"></script>
</body>
</html>

View File

@@ -13,10 +13,10 @@
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<!-- 공통 스타일 -->
<link rel="stylesheet" href="/static/css/tkqc-common.css?v=20260213">
<link rel="stylesheet" href="/static/css/tkqc-common.css?v=2026031401">
<!-- 페이지 전용 스타일 -->
<link rel="stylesheet" href="/static/css/issue-view.css?v=20260213">
<link rel="stylesheet" href="/static/css/issue-view.css?v=2026031401">
</head>
<body>
<!-- 공통 헤더가 여기에 자동으로 삽입됩니다 -->
@@ -106,16 +106,16 @@
</main>
<!-- Scripts -->
<script src="/static/js/date-utils.js?v=20260308"></script>
<script src="/static/js/core/permissions.js?v=20260308"></script>
<script src="/static/js/components/common-header.js?v=20260313"></script>
<script src="/static/js/core/page-manager.js?v=20260308"></script>
<script src="/static/js/api.js?v=20260308"></script>
<script src="/static/js/core/auth-manager.js?v=20260313"></script>
<script src="/static/js/utils/issue-helpers.js?v=20260308"></script>
<script src="/static/js/utils/photo-modal.js?v=20260308"></script>
<script src="/static/js/utils/toast.js?v=20260308"></script>
<script src="/static/js/components/mobile-bottom-nav.js?v=20260308"></script>
<script src="/static/js/pages/issue-view.js?v=20260308"></script>
<script src="/static/js/date-utils.js?v=2026031401"></script>
<script src="/static/js/core/permissions.js?v=2026031401"></script>
<script src="/static/js/components/common-header.js?v=2026031401"></script>
<script src="/static/js/core/page-manager.js?v=2026031401"></script>
<script src="/static/js/api.js?v=2026031401"></script>
<script src="/static/js/core/auth-manager.js?v=2026031401"></script>
<script src="/static/js/utils/issue-helpers.js?v=2026031401"></script>
<script src="/static/js/utils/photo-modal.js?v=2026031401"></script>
<script src="/static/js/utils/toast.js?v=2026031401"></script>
<script src="/static/js/components/mobile-bottom-nav.js?v=2026031401"></script>
<script src="/static/js/pages/issue-view.js?v=2026031401"></script>
</body>
</html>

View File

@@ -16,10 +16,10 @@
<link rel="stylesheet" href="/static/css/mobile-calendar.css">
<!-- 공통 스타일 -->
<link rel="stylesheet" href="/static/css/tkqc-common.css?v=20260213">
<link rel="stylesheet" href="/static/css/tkqc-common.css?v=2026031401">
<!-- 페이지 전용 스타일 -->
<link rel="stylesheet" href="/static/css/issues-archive.css?v=20260213">
<link rel="stylesheet" href="/static/css/issues-archive.css?v=2026031401">
</head>
<body>
<!-- 공통 헤더가 여기에 자동으로 삽입됩니다 -->
@@ -196,16 +196,16 @@
</main>
<!-- Scripts -->
<script src="/static/js/date-utils.js?v=20260308"></script>
<script src="/static/js/core/permissions.js?v=20260308"></script>
<script src="/static/js/components/common-header.js?v=20260313"></script>
<script src="/static/js/core/page-manager.js?v=20260308"></script>
<script src="/static/js/api.js?v=20260308"></script>
<script src="/static/js/core/auth-manager.js?v=20260313"></script>
<script src="/static/js/utils/issue-helpers.js?v=20260308"></script>
<script src="/static/js/utils/photo-modal.js?v=20260308"></script>
<script src="/static/js/utils/toast.js?v=20260308"></script>
<script src="/static/js/components/mobile-bottom-nav.js?v=20260308"></script>
<script src="/static/js/pages/issues-archive.js?v=20260308"></script>
<script src="/static/js/date-utils.js?v=2026031401"></script>
<script src="/static/js/core/permissions.js?v=2026031401"></script>
<script src="/static/js/components/common-header.js?v=2026031401"></script>
<script src="/static/js/core/page-manager.js?v=2026031401"></script>
<script src="/static/js/api.js?v=2026031401"></script>
<script src="/static/js/core/auth-manager.js?v=2026031401"></script>
<script src="/static/js/utils/issue-helpers.js?v=2026031401"></script>
<script src="/static/js/utils/photo-modal.js?v=2026031401"></script>
<script src="/static/js/utils/toast.js?v=2026031401"></script>
<script src="/static/js/components/mobile-bottom-nav.js?v=2026031401"></script>
<script src="/static/js/pages/issues-archive.js?v=2026031401"></script>
</body>
</html>

View File

@@ -8,8 +8,8 @@
<link rel="preload" href="https://cdn.tailwindcss.com" as="script">
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<link rel="stylesheet" href="/static/css/tkqc-common.css?v=20260213">
<link rel="stylesheet" href="/static/css/issues-dashboard.css?v=20260213">
<link rel="stylesheet" href="/static/css/tkqc-common.css?v=2026031401">
<link rel="stylesheet" href="/static/css/issues-dashboard.css?v=2026031401">
</head>
<body>
<!-- 로딩 스크린 -->
@@ -550,15 +550,15 @@
</div>
<!-- 스크립트 -->
<script src="/static/js/core/permissions.js?v=20260308"></script>
<script src="/static/js/components/common-header.js?v=20260313"></script>
<script src="/static/js/core/page-manager.js?v=20260308"></script>
<script src="/static/js/api.js?v=20260308"></script>
<script src="/static/js/core/auth-manager.js?v=20260313"></script>
<script src="/static/js/utils/issue-helpers.js?v=20260308"></script>
<script src="/static/js/utils/photo-modal.js?v=20260308"></script>
<script src="/static/js/utils/toast.js?v=20260308"></script>
<script src="/static/js/components/mobile-bottom-nav.js?v=20260308"></script>
<script src="/static/js/pages/issues-dashboard.js?v=20260308"></script>
<script src="/static/js/core/permissions.js?v=2026031401"></script>
<script src="/static/js/components/common-header.js?v=2026031401"></script>
<script src="/static/js/core/page-manager.js?v=2026031401"></script>
<script src="/static/js/api.js?v=2026031401"></script>
<script src="/static/js/core/auth-manager.js?v=2026031401"></script>
<script src="/static/js/utils/issue-helpers.js?v=2026031401"></script>
<script src="/static/js/utils/photo-modal.js?v=2026031401"></script>
<script src="/static/js/utils/toast.js?v=2026031401"></script>
<script src="/static/js/components/mobile-bottom-nav.js?v=2026031401"></script>
<script src="/static/js/pages/issues-dashboard.js?v=2026031401"></script>
</body>
</html>

View File

@@ -17,10 +17,10 @@
<link rel="stylesheet" href="/static/css/mobile-calendar.css">
<!-- 공통 스타일 -->
<link rel="stylesheet" href="/static/css/tkqc-common.css?v=20260213">
<link rel="stylesheet" href="/static/css/tkqc-common.css?v=2026031401">
<!-- 페이지 전용 스타일 -->
<link rel="stylesheet" href="/static/css/issues-inbox.css?v=20260213">
<link rel="stylesheet" href="/static/css/issues-inbox.css?v=2026031401">
</head>
<body>
<!-- 로딩 오버레이 -->
@@ -368,17 +368,17 @@
</div>
<!-- Scripts -->
<script src="/static/js/date-utils.js?v=20260308"></script>
<script src="/static/js/core/permissions.js?v=20260308"></script>
<script src="/static/js/components/common-header.js?v=20260313"></script>
<script src="/static/js/core/page-manager.js?v=20260308"></script>
<script src="/static/js/api.js?v=20260308"></script>
<script src="/static/js/core/auth-manager.js?v=20260313"></script>
<script src="/static/js/components/mobile-calendar.js?v=20260308"></script>
<script src="/static/js/utils/issue-helpers.js?v=20260308"></script>
<script src="/static/js/utils/photo-modal.js?v=20260308"></script>
<script src="/static/js/utils/toast.js?v=20260308"></script>
<script src="/static/js/components/mobile-bottom-nav.js?v=20260308"></script>
<script src="/static/js/pages/issues-inbox.js?v=20260308"></script>
<script src="/static/js/date-utils.js?v=2026031401"></script>
<script src="/static/js/core/permissions.js?v=2026031401"></script>
<script src="/static/js/components/common-header.js?v=2026031401"></script>
<script src="/static/js/core/page-manager.js?v=2026031401"></script>
<script src="/static/js/api.js?v=2026031401"></script>
<script src="/static/js/core/auth-manager.js?v=2026031401"></script>
<script src="/static/js/components/mobile-calendar.js?v=2026031401"></script>
<script src="/static/js/utils/issue-helpers.js?v=2026031401"></script>
<script src="/static/js/utils/photo-modal.js?v=2026031401"></script>
<script src="/static/js/utils/toast.js?v=2026031401"></script>
<script src="/static/js/components/mobile-bottom-nav.js?v=2026031401"></script>
<script src="/static/js/pages/issues-inbox.js?v=2026031401"></script>
</body>
</html>

View File

@@ -17,8 +17,8 @@
<link rel="stylesheet" href="/static/css/mobile-calendar.css">
<!-- 공통 스타일 및 페이지 전용 스타일 -->
<link rel="stylesheet" href="/static/css/tkqc-common.css?v=20260213">
<link rel="stylesheet" href="/static/css/issues-management.css?v=20260213">
<link rel="stylesheet" href="/static/css/tkqc-common.css?v=2026031401">
<link rel="stylesheet" href="/static/css/issues-management.css?v=2026031401">
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<script src="/static/js/lib/purify.min.js"></script>
</head>
@@ -338,16 +338,16 @@
</div>
<!-- Scripts -->
<script src="/static/js/date-utils.js?v=20260308"></script>
<script src="/static/js/core/permissions.js?v=20260308"></script>
<script src="/static/js/components/common-header.js?v=20260313"></script>
<script src="/static/js/core/page-manager.js?v=20260308"></script>
<script src="/static/js/api.js?v=20260308"></script>
<script src="/static/js/core/auth-manager.js?v=20260313"></script>
<script src="/static/js/utils/issue-helpers.js?v=20260308"></script>
<script src="/static/js/utils/photo-modal.js?v=20260308"></script>
<script src="/static/js/utils/toast.js?v=20260308"></script>
<script src="/static/js/components/mobile-bottom-nav.js?v=20260308"></script>
<script src="/static/js/pages/issues-management.js?v=20260313"></script>
<script src="/static/js/date-utils.js?v=2026031401"></script>
<script src="/static/js/core/permissions.js?v=2026031401"></script>
<script src="/static/js/components/common-header.js?v=2026031401"></script>
<script src="/static/js/core/page-manager.js?v=2026031401"></script>
<script src="/static/js/api.js?v=2026031401"></script>
<script src="/static/js/core/auth-manager.js?v=2026031401"></script>
<script src="/static/js/utils/issue-helpers.js?v=2026031401"></script>
<script src="/static/js/utils/photo-modal.js?v=2026031401"></script>
<script src="/static/js/utils/toast.js?v=2026031401"></script>
<script src="/static/js/components/mobile-bottom-nav.js?v=2026031401"></script>
<script src="/static/js/pages/issues-management.js?v=2026031401"></script>
</body>
</html>

View File

@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>부적합 현황판</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<link rel="stylesheet" href="/static/css/m-common.css?v=20260308">
<link rel="stylesheet" href="/static/css/m-common.css?v=2026031401">
</head>
<body>
<!-- 로딩 -->
@@ -185,11 +185,11 @@
</div>
<!-- 스크립트 -->
<script src="/static/js/api.js?v=20260308"></script>
<script src="/static/js/core/auth-manager.js?v=20260313"></script>
<script src="/static/js/core/permissions.js?v=20260308"></script>
<script src="/static/js/utils/issue-helpers.js?v=20260308"></script>
<script src="/static/js/m/m-common.js?v=20260309"></script>
<script src="/static/js/m/m-dashboard.js?v=20260308"></script>
<script src="/static/js/api.js?v=2026031401"></script>
<script src="/static/js/core/auth-manager.js?v=2026031401"></script>
<script src="/static/js/core/permissions.js?v=2026031401"></script>
<script src="/static/js/utils/issue-helpers.js?v=2026031401"></script>
<script src="/static/js/m/m-common.js?v=2026031401"></script>
<script src="/static/js/m/m-dashboard.js?v=2026031401"></script>
</body>
</html>

View File

@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>수신함</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<link rel="stylesheet" href="/static/css/m-common.css?v=20260308">
<link rel="stylesheet" href="/static/css/m-common.css?v=2026031401">
</head>
<body>
<!-- 로딩 -->
@@ -193,11 +193,11 @@
</div>
<!-- 스크립트 -->
<script src="/static/js/api.js?v=20260308"></script>
<script src="/static/js/core/auth-manager.js?v=20260313"></script>
<script src="/static/js/core/permissions.js?v=20260308"></script>
<script src="/static/js/utils/issue-helpers.js?v=20260308"></script>
<script src="/static/js/m/m-common.js?v=20260309"></script>
<script src="/static/js/m/m-inbox.js?v=20260308"></script>
<script src="/static/js/api.js?v=2026031401"></script>
<script src="/static/js/core/auth-manager.js?v=2026031401"></script>
<script src="/static/js/core/permissions.js?v=2026031401"></script>
<script src="/static/js/utils/issue-helpers.js?v=2026031401"></script>
<script src="/static/js/m/m-common.js?v=2026031401"></script>
<script src="/static/js/m/m-inbox.js?v=2026031401"></script>
</body>
</html>

View File

@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>관리함</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<link rel="stylesheet" href="/static/css/m-common.css?v=20260308">
<link rel="stylesheet" href="/static/css/m-common.css?v=2026031401">
</head>
<body>
<!-- 로딩 -->
@@ -169,11 +169,11 @@
</div>
<!-- 스크립트 -->
<script src="/static/js/api.js?v=20260308"></script>
<script src="/static/js/core/auth-manager.js?v=20260313"></script>
<script src="/static/js/core/permissions.js?v=20260308"></script>
<script src="/static/js/utils/issue-helpers.js?v=20260308"></script>
<script src="/static/js/m/m-common.js?v=20260309"></script>
<script src="/static/js/m/m-management.js?v=20260308"></script>
<script src="/static/js/api.js?v=2026031401"></script>
<script src="/static/js/core/auth-manager.js?v=2026031401"></script>
<script src="/static/js/core/permissions.js?v=2026031401"></script>
<script src="/static/js/utils/issue-helpers.js?v=2026031401"></script>
<script src="/static/js/m/m-common.js?v=2026031401"></script>
<script src="/static/js/m/m-management.js?v=2026031401"></script>
</body>
</html>

View File

@@ -182,10 +182,10 @@
</main>
<!-- JavaScript -->
<script src="/static/js/core/permissions.js?v=20260308"></script>
<script src="/static/js/components/common-header.js?v=20260313"></script>
<script src="/static/js/api.js?v=20260308"></script>
<script src="/static/js/core/auth-manager.js?v=20260313"></script>
<script src="/static/js/core/permissions.js?v=2026031401"></script>
<script src="/static/js/components/common-header.js?v=2026031401"></script>
<script src="/static/js/api.js?v=2026031401"></script>
<script src="/static/js/core/auth-manager.js?v=2026031401"></script>
<script>
let projects = [];

View File

@@ -69,10 +69,10 @@
</main>
<!-- JavaScript -->
<script src="/static/js/core/permissions.js?v=20260308"></script>
<script src="/static/js/components/common-header.js?v=20260313"></script>
<script src="/static/js/api.js?v=20260308"></script>
<script src="/static/js/core/auth-manager.js?v=20260313"></script>
<script src="/static/js/core/permissions.js?v=2026031401"></script>
<script src="/static/js/components/common-header.js?v=2026031401"></script>
<script src="/static/js/api.js?v=2026031401"></script>
<script src="/static/js/core/auth-manager.js?v=2026031401"></script>
<script>
// 페이지 초기화

View File

@@ -68,10 +68,10 @@
</main>
<!-- JavaScript -->
<script src="/static/js/core/permissions.js?v=20260308"></script>
<script src="/static/js/components/common-header.js?v=20260313"></script>
<script src="/static/js/api.js?v=20260308"></script>
<script src="/static/js/core/auth-manager.js?v=20260313"></script>
<script src="/static/js/core/permissions.js?v=2026031401"></script>
<script src="/static/js/components/common-header.js?v=2026031401"></script>
<script src="/static/js/api.js?v=2026031401"></script>
<script src="/static/js/core/auth-manager.js?v=2026031401"></script>
<script>
// 페이지 초기화

View File

@@ -170,10 +170,10 @@
<!-- JavaScript -->
<script src="/static/js/core/permissions.js?v=20260308"></script>
<script src="/static/js/components/common-header.js?v=20260313"></script>
<script src="/static/js/api.js?v=20260308"></script>
<script src="/static/js/core/auth-manager.js?v=20260313"></script>
<script src="/static/js/core/permissions.js?v=2026031401"></script>
<script src="/static/js/components/common-header.js?v=2026031401"></script>
<script src="/static/js/api.js?v=2026031401"></script>
<script src="/static/js/core/auth-manager.js?v=2026031401"></script>
<script>
// 페이지 초기화

View File

@@ -194,13 +194,13 @@ function renderInProgressCard(issue) {
var actionHtml = '';
if (isPending) {
actionHtml = '<div class="m-action-row">' +
'<button class="m-action-btn red" onclick="openRejectSheet(' + issue.id + ')"><i class="fas fa-times"></i>반려</button>' +
'<button class="m-action-btn green" onclick="confirmCompletion(' + issue.id + ')"><i class="fas fa-check-circle"></i>최종확인</button>' +
'<button class="m-action-btn red" onclick="event.stopPropagation();openRejectSheet(' + issue.id + ')"><i class="fas fa-times"></i>반려</button>' +
'<button class="m-action-btn green" onclick="event.stopPropagation();confirmCompletion(' + issue.id + ')"><i class="fas fa-check-circle"></i>최종확인</button>' +
'</div>';
} else {
actionHtml = '<div class="m-action-row">' +
'<button class="m-action-btn blue" onclick="openEditMgmtSheet(' + issue.id + ')"><i class="fas fa-edit"></i>편집</button>' +
'<button class="m-action-btn green" onclick="confirmCompletion(' + issue.id + ')"><i class="fas fa-check"></i>완료처리</button>' +
'<button class="m-action-btn blue" onclick="event.stopPropagation();openEditMgmtSheet(' + issue.id + ')"><i class="fas fa-edit"></i>편집</button>' +
'<button class="m-action-btn green" onclick="event.stopPropagation();confirmCompletion(' + issue.id + ')"><i class="fas fa-check"></i>완료처리</button>' +
'</div>';
}