diff --git a/system1-factory/web/pages/purchase/request-mobile.html b/system1-factory/web/pages/purchase/request-mobile.html index c02dff3..df1047a 100644 --- a/system1-factory/web/pages/purchase/request-mobile.html +++ b/system1-factory/web/pages/purchase/request-mobile.html @@ -6,8 +6,8 @@ 소모품 신청 - TK 공장관리 - - + + @@ -140,8 +140,8 @@
- - - + + + diff --git a/system1-factory/web/pages/purchase/request.html b/system1-factory/web/pages/purchase/request.html index 14497a2..158eea1 100644 --- a/system1-factory/web/pages/purchase/request.html +++ b/system1-factory/web/pages/purchase/request.html @@ -310,7 +310,7 @@ - - + + diff --git a/system1-factory/web/static/js/purchase-request-mobile.js b/system1-factory/web/static/js/purchase-request-mobile.js index d128c66..c5a9ee1 100644 --- a/system1-factory/web/static/js/purchase-request-mobile.js +++ b/system1-factory/web/static/js/purchase-request-mobile.js @@ -191,6 +191,14 @@ document.addEventListener('DOMContentLoaded', () => { const input = document.getElementById('searchInput'); input.addEventListener('input', () => { clearTimeout(searchTimer); + // 검색어 입력 시 이전 선택 자동 해제 + if (document.getElementById('selectedItemId').value || document.getElementById('selectedCustomName').value) { + document.getElementById('selectedItemWrap').classList.add('hidden'); + document.getElementById('selectedItemId').value = ''; + document.getElementById('selectedCustomName').value = ''; + document.getElementById('newItemForm').classList.add('hidden'); + isRegisterMode = false; + } const q = input.value.trim(); if (q.length === 0) { document.getElementById('searchResults').classList.remove('open'); @@ -212,6 +220,7 @@ document.addEventListener('DOMContentLoaded', () => { }); function renderSearchResults(items, query) { + lastSearchResults = items; const container = document.getElementById('searchResults'); let html = ''; @@ -240,23 +249,20 @@ function renderSearchResults(items, query) { } /* ===== 품목 선택 ===== */ -let searchItemsCache = []; +let lastSearchResults = []; function selectSearchItem(itemId) { - // API 검색 결과에서 선택 — searchResults에서 데이터 가져오기 - api('/purchase-requests/search?q=' + encodeURIComponent(document.getElementById('searchInput').value.trim())) - .then(res => { - const item = (res.data || []).find(i => i.item_id === itemId); - if (!item) return; - document.getElementById('selectedItemId').value = item.item_id; - document.getElementById('selectedCustomName').value = ''; - document.getElementById('selectedItemName').textContent = item.item_name + (item.spec ? ' [' + item.spec + ']' : '') + (item.maker ? ' (' + item.maker + ')' : ''); - document.getElementById('selectedItemMeta').textContent = (CAT_LABELS[item.category] || '') + (item.base_price ? ' · ' + Number(item.base_price).toLocaleString() + '원' : ''); - document.getElementById('selectedItemWrap').classList.remove('hidden'); - document.getElementById('searchResults').classList.remove('open'); - document.getElementById('newItemForm').classList.add('hidden'); - isRegisterMode = false; - }); + const item = lastSearchResults.find(i => i.item_id === itemId); + if (!item) return; + document.getElementById('selectedItemId').value = item.item_id; + document.getElementById('selectedCustomName').value = ''; + document.getElementById('selectedItemName').textContent = item.item_name + (item.spec ? ' [' + item.spec + ']' : '') + (item.maker ? ' (' + item.maker + ')' : ''); + document.getElementById('selectedItemMeta').textContent = (CAT_LABELS[item.category] || '') + (item.base_price ? ' · ' + Number(item.base_price).toLocaleString() + '원' : ''); + document.getElementById('selectedItemWrap').classList.remove('hidden'); + document.getElementById('searchResults').classList.remove('open'); + document.getElementById('searchInput').value = ''; + document.getElementById('newItemForm').classList.add('hidden'); + isRegisterMode = false; } function selectNewItem() { diff --git a/system1-factory/web/static/js/purchase-request.js b/system1-factory/web/static/js/purchase-request.js index 4dfcb56..427a170 100644 --- a/system1-factory/web/static/js/purchase-request.js +++ b/system1-factory/web/static/js/purchase-request.js @@ -51,6 +51,13 @@ function initItemSearch() { input.addEventListener('input', () => { clearTimeout(searchDebounceTimer); + // 검색어 변경 시 이전 선택 자동 해제 + if (document.getElementById('prItemId').value) { + document.getElementById('prItemId').value = ''; + document.getElementById('prCustomItemName').value = ''; + document.getElementById('prItemPreview').classList.add('hidden'); + document.getElementById('prCustomCategoryWrap').classList.add('hidden'); + } searchDebounceTimer = setTimeout(() => { const query = input.value.trim(); if (query.length === 0) { diff --git a/system1-factory/web/static/js/tkfb-core.js b/system1-factory/web/static/js/tkfb-core.js index f32db15..9c955cd 100644 --- a/system1-factory/web/static/js/tkfb-core.js +++ b/system1-factory/web/static/js/tkfb-core.js @@ -134,7 +134,7 @@ const NAV_MENU = [ ]}, { cat: '소모품 관리', items: [ { href: '/pages/purchase/request-mobile.html', icon: 'fa-shopping-cart', label: '소모품 신청', key: 'purchase.request_mobile' }, - { href: '/pages/purchase/request.html', icon: 'fa-clipboard-list', label: '소모품 관리', key: 'purchase.request' }, + { href: '/pages/purchase/request.html', icon: 'fa-clipboard-list', label: '소모품 구매 관리', key: 'purchase.request', admin: true }, { href: '/pages/admin/purchase-analysis.html', icon: 'fa-chart-line', label: '소모품 분석', key: 'purchase.analysis', admin: true }, ]}, { cat: '근태 관리', items: [ @@ -170,6 +170,7 @@ const PAGE_KEY_ALIASES = { 'attendance.work_status': 'inspection.work_status', 'work.meeting_detail': 'work.meetings', 'work.proxy_input': 'work.daily_status', + 'purchase.request_mobile': 'purchase.request', }; function _getCurrentPageKey() {