refactor(tkfb): "구매 관리" → "소모품 관리" 리네이밍 — UI 라벨을 실제 기능에 맞게 변경
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -492,7 +492,7 @@
|
|||||||
{ id: 'factory', name: '공장관리', desc: '작업장 현황, TBM, 설비관리', icon: '\uD83C\uDFED', subdomain: 'tkfb', path: '/pages/dashboard.html', pageKey: 'dashboard', color: '#1a56db' },
|
{ id: 'factory', name: '공장관리', desc: '작업장 현황, TBM, 설비관리', icon: '\uD83C\uDFED', subdomain: 'tkfb', path: '/pages/dashboard.html', pageKey: 'dashboard', color: '#1a56db' },
|
||||||
{ id: 'report_sys', name: '신고', desc: '사건·사고 신고 접수', icon: '\uD83D\uDEA8', subdomain: 'tkreport', accessKey: 'system2', color: '#dc2626' },
|
{ id: 'report_sys', name: '신고', desc: '사건·사고 신고 접수', icon: '\uD83D\uDEA8', subdomain: 'tkreport', accessKey: 'system2', color: '#dc2626' },
|
||||||
{ id: 'quality', name: '부적합관리', desc: '부적합 이슈 추적·처리', icon: '\uD83D\uDCCA', subdomain: 'tkqc', accessKey: 'system3', color: '#059669' },
|
{ id: 'quality', name: '부적합관리', desc: '부적합 이슈 추적·처리', icon: '\uD83D\uDCCA', subdomain: 'tkqc', accessKey: 'system3', color: '#059669' },
|
||||||
{ id: 'purchase', name: '구매관리', desc: '자재 구매, 일용직 관리', icon: '\uD83D\uDED2', subdomain: 'tkpurchase', color: '#d97706' },
|
{ id: 'purchase', name: '소모품 관리', desc: '소모품 신청·구매, 분석', icon: '\uD83D\uDED2', subdomain: 'tkpurchase', color: '#d97706' },
|
||||||
{ id: 'safety', name: '안전관리', desc: '안전 점검, 방문 관리', icon: '\uD83E\uDDBA', subdomain: 'tksafety', color: '#7c3aed' },
|
{ id: 'safety', name: '안전관리', desc: '안전 점검, 방문 관리', icon: '\uD83E\uDDBA', subdomain: 'tksafety', color: '#7c3aed' },
|
||||||
{ id: 'support', name: '행정지원', desc: '전사 행정 업무 지원', icon: '\uD83C\uDFE2', subdomain: 'tksupport', color: '#0284c7' },
|
{ id: 'support', name: '행정지원', desc: '전사 행정 업무 지원', icon: '\uD83C\uDFE2', subdomain: 'tksupport', color: '#0284c7' },
|
||||||
{ id: 'admin', name: '통합관리', desc: '사용자·권한 관리', icon: '\u2699\uFE0F', subdomain: 'tkuser', minRole: 'admin', color: '#0891b2' }
|
{ id: 'admin', name: '통합관리', desc: '사용자·권한 관리', icon: '\u2699\uFE0F', subdomain: 'tkuser', minRole: 'admin', color: '#0891b2' }
|
||||||
|
|||||||
@@ -190,7 +190,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
||||||
<script type="module">
|
<script type="module">
|
||||||
|
|||||||
@@ -324,7 +324,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="/js/department-management.js"></script>
|
<script src="/js/department-management.js"></script>
|
||||||
<script>initAuth();</script>
|
<script>initAuth();</script>
|
||||||
|
|||||||
@@ -314,7 +314,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
||||||
<script type="module">
|
<script type="module">
|
||||||
|
|||||||
@@ -190,7 +190,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
||||||
<script type="module">
|
<script type="module">
|
||||||
|
|||||||
@@ -329,7 +329,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script type="module" src="/js/issue-category-manage.js"></script>
|
<script type="module" src="/js/issue-category-manage.js"></script>
|
||||||
<script>initAuth();</script>
|
<script>initAuth();</script>
|
||||||
|
|||||||
@@ -387,7 +387,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script>
|
<script>
|
||||||
let currentPage = 1;
|
let currentPage = 1;
|
||||||
|
|||||||
@@ -384,7 +384,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script>
|
<script>
|
||||||
let allProjects = [];
|
let allProjects = [];
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>구매 분석 - TK 공장관리</title>
|
<title>소모품 분석 - TK 공장관리</title>
|
||||||
<script src="https://cdn.tailwindcss.com"></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="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
||||||
<link rel="stylesheet" href="/static/css/tkfb.css">
|
<link rel="stylesheet" href="/static/css/tkfb.css">
|
||||||
@@ -33,8 +33,8 @@
|
|||||||
|
|
||||||
<div class="page-header">
|
<div class="page-header">
|
||||||
<div class="page-title-section">
|
<div class="page-title-section">
|
||||||
<h1 class="page-title">구매 분석</h1>
|
<h1 class="page-title">소모품 분석</h1>
|
||||||
<p class="page-description">월간 구매 현황 분석 및 업체별 정산 관리</p>
|
<p class="page-description">월간 소모품 현황 분석 및 업체별 정산 관리</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
|
|
||||||
<!-- 상세 구매 목록 -->
|
<!-- 상세 구매 목록 -->
|
||||||
<div class="bg-white rounded-xl shadow-sm p-5 mb-6">
|
<div class="bg-white rounded-xl shadow-sm p-5 mb-6">
|
||||||
<h2 class="text-base font-semibold text-gray-800 mb-4"><i class="fas fa-list text-orange-500 mr-2"></i>상세 구매 목록</h2>
|
<h2 class="text-base font-semibold text-gray-800 mb-4"><i class="fas fa-list text-orange-500 mr-2"></i>상세 소모품 목록</h2>
|
||||||
<div class="overflow-x-auto">
|
<div class="overflow-x-auto">
|
||||||
<table class="w-full text-sm">
|
<table class="w-full text-sm">
|
||||||
<thead class="bg-gray-50 text-gray-600 text-xs uppercase">
|
<thead class="bg-gray-50 text-gray-600 text-xs uppercase">
|
||||||
@@ -107,7 +107,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/static/js/purchase-analysis.js?v=2026031401"></script>
|
<script src="/static/js/purchase-analysis.js?v=2026031601"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -487,7 +487,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script>
|
<script>
|
||||||
let currentReportId = null;
|
let currentReportId = null;
|
||||||
|
|||||||
@@ -285,7 +285,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script>
|
<script>
|
||||||
let workTypes = [];
|
let workTypes = [];
|
||||||
|
|||||||
@@ -431,7 +431,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 작업장 관리 모듈 (리팩토링된 구조) -->
|
<!-- 작업장 관리 모듈 (리팩토링된 구조) -->
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="/js/workplace-management/state.js?v=2026031401"></script>
|
<script src="/js/workplace-management/state.js?v=2026031401"></script>
|
||||||
<script src="/js/workplace-management/utils.js?v=2026031401"></script>
|
<script src="/js/workplace-management/utils.js?v=2026031401"></script>
|
||||||
|
|||||||
@@ -328,7 +328,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -222,7 +222,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -70,7 +70,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -474,7 +474,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -265,7 +265,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -353,7 +353,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script type="module" src="/js/vacation-allocation.js" defer></script>
|
<script type="module" src="/js/vacation-allocation.js" defer></script>
|
||||||
<script>initAuth();</script>
|
<script>initAuth();</script>
|
||||||
|
|||||||
@@ -123,7 +123,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
||||||
<script src="/js/vacation-common.js"></script>
|
<script src="/js/vacation-common.js"></script>
|
||||||
|
|||||||
@@ -123,7 +123,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
||||||
<script src="/js/vacation-common.js"></script>
|
<script src="/js/vacation-common.js"></script>
|
||||||
|
|||||||
@@ -205,7 +205,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
||||||
<script src="/js/vacation-common.js"></script>
|
<script src="/js/vacation-common.js"></script>
|
||||||
|
|||||||
@@ -117,7 +117,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
||||||
<script src="/js/vacation-common.js"></script>
|
<script src="/js/vacation-common.js"></script>
|
||||||
|
|||||||
@@ -276,7 +276,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -138,7 +138,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/static/js/tkfb-dashboard.js"></script>
|
<script src="/static/js/tkfb-dashboard.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -323,7 +323,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script type="module" src="/js/modern-dashboard.js?v=2026031401"></script>
|
<script type="module" src="/js/modern-dashboard.js?v=2026031401"></script>
|
||||||
<script type="module" src="/js/group-leader-dashboard.js?v=2026031401"></script>
|
<script type="module" src="/js/group-leader-dashboard.js?v=2026031401"></script>
|
||||||
|
|||||||
@@ -209,7 +209,7 @@
|
|||||||
}, 50);
|
}, 50);
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="/js/daily-patrol.js?v=2026031401"></script>
|
<script src="/js/daily-patrol.js?v=2026031401"></script>
|
||||||
<script>initAuth();</script>
|
<script>initAuth();</script>
|
||||||
|
|||||||
@@ -304,7 +304,7 @@
|
|||||||
}, 50);
|
}, 50);
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="/js/zone-detail.js?v=2026031401"></script>
|
<script src="/js/zone-detail.js?v=2026031401"></script>
|
||||||
<script>initAuth();</script>
|
<script>initAuth();</script>
|
||||||
|
|||||||
@@ -320,7 +320,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script type="module" src="/js/my-profile.js"></script>
|
<script type="module" src="/js/my-profile.js"></script>
|
||||||
<script>initAuth();</script>
|
<script>initAuth();</script>
|
||||||
|
|||||||
@@ -390,7 +390,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script type="module" src="/js/change-password.js"></script>
|
<script type="module" src="/js/change-password.js"></script>
|
||||||
<script>initAuth();</script>
|
<script>initAuth();</script>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>구매신청 - TK 공장관리</title>
|
<title>소모품 신청 - TK 공장관리</title>
|
||||||
<script src="https://cdn.tailwindcss.com"></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="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
||||||
<link rel="stylesheet" href="/static/css/tkfb.css">
|
<link rel="stylesheet" href="/static/css/tkfb.css">
|
||||||
@@ -45,14 +45,14 @@
|
|||||||
|
|
||||||
<div class="page-header">
|
<div class="page-header">
|
||||||
<div class="page-title-section">
|
<div class="page-title-section">
|
||||||
<h1 class="page-title">구매신청</h1>
|
<h1 class="page-title">소모품 신청</h1>
|
||||||
<p class="page-description">생산소모품 구매를 신청하고 처리 현황을 확인합니다</p>
|
<p class="page-description">소모품을 신청하고 처리 현황을 확인합니다</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 구매신청 폼 -->
|
<!-- 구매신청 폼 -->
|
||||||
<div class="bg-white rounded-xl shadow-sm p-5 mb-6">
|
<div class="bg-white rounded-xl shadow-sm p-5 mb-6">
|
||||||
<h2 class="text-base font-semibold text-gray-800 mb-4"><i class="fas fa-plus-circle text-orange-500 mr-2"></i>신규 구매신청</h2>
|
<h2 class="text-base font-semibold text-gray-800 mb-4"><i class="fas fa-plus-circle text-orange-500 mr-2"></i>신규 소모품 신청</h2>
|
||||||
<div class="grid grid-cols-1 sm:grid-cols-4 gap-4 items-start">
|
<div class="grid grid-cols-1 sm:grid-cols-4 gap-4 items-start">
|
||||||
<div class="sm:col-span-2 relative">
|
<div class="sm:col-span-2 relative">
|
||||||
<label class="block text-xs font-medium text-gray-600 mb-1">소모품 <span class="text-red-400">*</span></label>
|
<label class="block text-xs font-medium text-gray-600 mb-1">소모품 <span class="text-red-400">*</span></label>
|
||||||
@@ -104,7 +104,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="mt-4 flex justify-end">
|
<div class="mt-4 flex justify-end">
|
||||||
<button onclick="submitPurchaseRequest()" class="px-5 py-2 bg-orange-600 text-white rounded-lg text-sm hover:bg-orange-700">
|
<button onclick="submitPurchaseRequest()" class="px-5 py-2 bg-orange-600 text-white rounded-lg text-sm hover:bg-orange-700">
|
||||||
<i class="fas fa-paper-plane mr-1"></i>구매신청
|
<i class="fas fa-paper-plane mr-1"></i>소모품 신청
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -221,7 +221,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/static/js/purchase-request.js?v=2026031401"></script>
|
<script src="/static/js/purchase-request.js?v=2026031601"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -277,7 +277,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script type="module" src="/js/work-analysis.js?v=2026031401"></script>
|
<script type="module" src="/js/work-analysis.js?v=2026031401"></script>
|
||||||
|
|
||||||
|
|||||||
@@ -90,7 +90,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/static/js/tkfb-nonconformity.js"></script>
|
<script src="/static/js/tkfb-nonconformity.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -189,7 +189,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 공통 모듈 -->
|
<!-- 공통 모듈 -->
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="/js/common/utils.js?v=2026031401"></script>
|
<script src="/js/common/utils.js?v=2026031401"></script>
|
||||||
<script src="/js/common/base-state.js?v=2026031401"></script>
|
<script src="/js/common/base-state.js?v=2026031401"></script>
|
||||||
|
|||||||
@@ -149,7 +149,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="/js/common/utils.js?v=2026031401"></script>
|
<script src="/js/common/utils.js?v=2026031401"></script>
|
||||||
<script src="/js/common/base-state.js?v=2026031401"></script>
|
<script src="/js/common/base-state.js?v=2026031401"></script>
|
||||||
|
|||||||
@@ -843,7 +843,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Scripts -->
|
<!-- Scripts -->
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<!-- 공통 모듈 -->
|
<!-- 공통 모듈 -->
|
||||||
<script src="/js/common/utils.js?v=2026031401"></script>
|
<script src="/js/common/utils.js?v=2026031401"></script>
|
||||||
|
|||||||
@@ -296,7 +296,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 공통 모듈 -->
|
<!-- 공통 모듈 -->
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="/js/common/utils.js?v=2026031401"></script>
|
<script src="/js/common/utils.js?v=2026031401"></script>
|
||||||
<script src="/js/common/base-state.js?v=2026031401"></script>
|
<script src="/js/common/base-state.js?v=2026031401"></script>
|
||||||
|
|||||||
@@ -560,7 +560,7 @@
|
|||||||
<!-- 토스트 -->
|
<!-- 토스트 -->
|
||||||
<div class="toast-container" id="toastContainer"></div>
|
<div class="toast-container" id="toastContainer"></div>
|
||||||
|
|
||||||
<script src="/static/js/tkfb-core.js?v=2026031401"></script>
|
<script src="/static/js/tkfb-core.js?v=2026031601"></script>
|
||||||
<script src="/js/api-base.js?v=2026031401"></script>
|
<script src="/js/api-base.js?v=2026031401"></script>
|
||||||
<script src="/js/common/utils.js?v=2026031401"></script>
|
<script src="/js/common/utils.js?v=2026031401"></script>
|
||||||
<script src="/js/common/base-state.js?v=2026031401"></script>
|
<script src="/js/common/base-state.js?v=2026031401"></script>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* ===== 구매신청 페이지 ===== */
|
/* ===== 소모품 신청 페이지 ===== */
|
||||||
const TKUSER_BASE_URL = location.hostname.includes('technicalkorea.net')
|
const TKUSER_BASE_URL = location.hostname.includes('technicalkorea.net')
|
||||||
? 'https://tkuser.technicalkorea.net'
|
? 'https://tkuser.technicalkorea.net'
|
||||||
: location.protocol + '//' + location.hostname + ':30180';
|
: location.protocol + '//' + location.hostname + ':30180';
|
||||||
@@ -247,7 +247,7 @@ function removePhoto() {
|
|||||||
document.getElementById('prPhotoStatus').textContent = '';
|
document.getElementById('prPhotoStatus').textContent = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== 구매신청 제출 ===== */
|
/* ===== 소모품 신청 제출 ===== */
|
||||||
async function submitPurchaseRequest() {
|
async function submitPurchaseRequest() {
|
||||||
const itemId = document.getElementById('prItemId').value;
|
const itemId = document.getElementById('prItemId').value;
|
||||||
const customItemName = document.getElementById('prCustomItemName').value;
|
const customItemName = document.getElementById('prCustomItemName').value;
|
||||||
@@ -273,7 +273,7 @@ async function submitPurchaseRequest() {
|
|||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: JSON.stringify(body)
|
body: JSON.stringify(body)
|
||||||
});
|
});
|
||||||
showToast('구매신청이 등록되었습니다.');
|
showToast('소모품 신청이 등록되었습니다.');
|
||||||
// 폼 초기화
|
// 폼 초기화
|
||||||
document.getElementById('prItemSearch').value = '';
|
document.getElementById('prItemSearch').value = '';
|
||||||
document.getElementById('prItemId').value = '';
|
document.getElementById('prItemId').value = '';
|
||||||
@@ -306,7 +306,7 @@ async function loadRequests() {
|
|||||||
function renderRequests() {
|
function renderRequests() {
|
||||||
const tbody = document.getElementById('prRequestList');
|
const tbody = document.getElementById('prRequestList');
|
||||||
if (!requestsList.length) {
|
if (!requestsList.length) {
|
||||||
tbody.innerHTML = '<tr><td colspan="7" class="px-4 py-8 text-center text-gray-400">구매신청 내역이 없습니다.</td></tr>';
|
tbody.innerHTML = '<tr><td colspan="7" class="px-4 py-8 text-center text-gray-400">소모품 신청 내역이 없습니다.</td></tr>';
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
tbody.innerHTML = requestsList.map(r => {
|
tbody.innerHTML = requestsList.map(r => {
|
||||||
@@ -495,7 +495,7 @@ async function revertRequest(requestId) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function deleteRequest(requestId) {
|
async function deleteRequest(requestId) {
|
||||||
if (!confirm('이 구매신청을 삭제하시겠습니까?')) return;
|
if (!confirm('이 소모품 신청을 삭제하시겠습니까?')) return;
|
||||||
try {
|
try {
|
||||||
await api(`/purchase-requests/${requestId}`, { method: 'DELETE' });
|
await api(`/purchase-requests/${requestId}`, { method: 'DELETE' });
|
||||||
showToast('삭제되었습니다.');
|
showToast('삭제되었습니다.');
|
||||||
|
|||||||
@@ -119,9 +119,9 @@ const NAV_MENU = [
|
|||||||
{ href: '/pages/attendance/checkin.html', icon: 'fa-user-check', label: '출근 체크', key: 'inspection.checkin' },
|
{ href: '/pages/attendance/checkin.html', icon: 'fa-user-check', label: '출근 체크', key: 'inspection.checkin' },
|
||||||
{ href: '/pages/attendance/work-status.html', icon: 'fa-briefcase', label: '근무 현황', key: 'inspection.work_status' },
|
{ href: '/pages/attendance/work-status.html', icon: 'fa-briefcase', label: '근무 현황', key: 'inspection.work_status' },
|
||||||
]},
|
]},
|
||||||
{ cat: '구매 관리', items: [
|
{ cat: '소모품 관리', items: [
|
||||||
{ href: '/pages/purchase/request.html', icon: 'fa-shopping-cart', label: '구매신청', key: 'purchase.request' },
|
{ href: '/pages/purchase/request.html', icon: 'fa-shopping-cart', label: '소모품 신청', key: 'purchase.request' },
|
||||||
{ href: '/pages/admin/purchase-analysis.html', icon: 'fa-chart-line', label: '구매 분석', key: 'purchase.analysis', admin: true },
|
{ href: '/pages/admin/purchase-analysis.html', icon: 'fa-chart-line', label: '소모품 분석', key: 'purchase.analysis', admin: true },
|
||||||
]},
|
]},
|
||||||
{ cat: '근태 관리', items: [
|
{ cat: '근태 관리', items: [
|
||||||
{ href: '/pages/attendance/my-vacation-info.html', icon: 'fa-info-circle', label: '내 연차 정보', key: 'attendance.my_vacation_info' },
|
{ href: '/pages/attendance/my-vacation-info.html', icon: 'fa-info-circle', label: '내 연차 정보', key: 'attendance.my_vacation_info' },
|
||||||
|
|||||||
Reference in New Issue
Block a user