From 5398581b875673c1ca938d46cf5779f9a159e1d2 Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Mon, 16 Mar 2026 07:37:44 +0900 Subject: [PATCH] =?UTF-8?q?feat(tkpurchase/tkuser):=20=EC=82=AC=EC=9D=B4?= =?UTF-8?q?=EB=93=9C=EB=B0=94=EC=97=90=20=ED=98=91=EB=A0=A5=EC=97=85?= =?UTF-8?q?=EC=B2=B4=20=EA=B4=80=EB=A6=AC=20=EC=99=B8=EB=B6=80=20=EB=A7=81?= =?UTF-8?q?=ED=81=AC=20=EC=B6=94=EA=B0=80=20+=20tkuser=20=3Ftab=3D=20?= =?UTF-8?q?=EB=9D=BC=EC=9A=B0=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tkpurchase 사이드바에 tkuser 협력업체 관리 페이지로 이동하는 링크 추가. tkuser에 URL ?tab= 파라미터 기반 탭 자동 전환 지원 (화이트리스트 + replaceState). Co-Authored-By: Claude Opus 4.6 --- tkpurchase/web/accounts.html | 2 +- tkpurchase/web/daylabor.html | 2 +- tkpurchase/web/index.html | 2 +- tkpurchase/web/partner-history.html | 2 +- tkpurchase/web/partner-portal.html | 2 +- tkpurchase/web/partner.html | 2 +- tkpurchase/web/schedule.html | 2 +- tkpurchase/web/static/js/tkpurchase-core.js | 11 +++++++++-- tkpurchase/web/workreport-summary.html | 2 +- tkpurchase/web/workreport.html | 2 +- user-management/web/index.html | 2 +- user-management/web/static/js/tkuser-core.js | 18 +++++++++++++++++- 12 files changed, 36 insertions(+), 13 deletions(-) diff --git a/tkpurchase/web/accounts.html b/tkpurchase/web/accounts.html index 9e630b3..da673d1 100644 --- a/tkpurchase/web/accounts.html +++ b/tkpurchase/web/accounts.html @@ -133,7 +133,7 @@ - + diff --git a/tkpurchase/web/daylabor.html b/tkpurchase/web/daylabor.html index b36ace8..f895d1f 100644 --- a/tkpurchase/web/daylabor.html +++ b/tkpurchase/web/daylabor.html @@ -148,7 +148,7 @@ - + diff --git a/tkpurchase/web/index.html b/tkpurchase/web/index.html index 4a985bd..10768e4 100644 --- a/tkpurchase/web/index.html +++ b/tkpurchase/web/index.html @@ -88,7 +88,7 @@ - + diff --git a/tkpurchase/web/partner-history.html b/tkpurchase/web/partner-history.html index 680b7c3..92ee14c 100644 --- a/tkpurchase/web/partner-history.html +++ b/tkpurchase/web/partner-history.html @@ -61,7 +61,7 @@
- + diff --git a/tkpurchase/web/partner-portal.html b/tkpurchase/web/partner-portal.html index 209c7c2..15f14df 100644 --- a/tkpurchase/web/partner-portal.html +++ b/tkpurchase/web/partner-portal.html @@ -81,7 +81,7 @@ - + diff --git a/tkpurchase/web/partner.html b/tkpurchase/web/partner.html index cb2fb3b..6bbe396 100644 --- a/tkpurchase/web/partner.html +++ b/tkpurchase/web/partner.html @@ -294,7 +294,7 @@ - + diff --git a/tkpurchase/web/schedule.html b/tkpurchase/web/schedule.html index 5a354ee..139fe4f 100644 --- a/tkpurchase/web/schedule.html +++ b/tkpurchase/web/schedule.html @@ -275,7 +275,7 @@ - + diff --git a/tkpurchase/web/static/js/tkpurchase-core.js b/tkpurchase/web/static/js/tkpurchase-core.js index 3b70409..be61d14 100644 --- a/tkpurchase/web/static/js/tkpurchase-core.js +++ b/tkpurchase/web/static/js/tkpurchase-core.js @@ -109,6 +109,11 @@ function toggleMobileMenu() { document.body.style.overflow = open ? 'hidden' : ''; } +/* ===== tkuser URL ===== */ +const _tkuserBase = location.hostname.includes('technicalkorea.net') + ? 'https://tkuser.technicalkorea.net' + : `http://${location.hostname}:30380`; + /* ===== Navbar ===== */ function renderNavbar() { const currentPage = location.pathname.replace(/\//g, '') || 'index.html'; @@ -119,13 +124,15 @@ function renderNavbar() { { href: '/workreport.html', icon: 'fa-clipboard-list', label: '업무현황', match: ['workreport.html'] }, { href: '/workreport-summary.html', icon: 'fa-chart-bar', label: '업무 종합', match: ['workreport-summary.html'] }, { href: '/accounts.html', icon: 'fa-user-shield', label: '계정 관리', match: ['accounts.html'] }, + { href: `${_tkuserBase}/?tab=partners`, icon: 'fa-truck', label: '협력업체 관리', external: true }, ]; const nav = document.getElementById('sideNav'); if (!nav) return; nav.innerHTML = links.map(l => { - const active = l.match.some(m => currentPage === m || currentPage.endsWith(m)); + const active = l.match && l.match.some(m => currentPage === m || currentPage.endsWith(m)); + const extIcon = l.external ? ' ' : ''; return ` - ${l.label}`; + ${l.label}${extIcon}`; }).join(''); // 모바일: nav-link 클릭 시 메뉴 닫기 nav.querySelectorAll('.nav-link').forEach(a => { diff --git a/tkpurchase/web/workreport-summary.html b/tkpurchase/web/workreport-summary.html index 0ade11a..eb95489 100644 --- a/tkpurchase/web/workreport-summary.html +++ b/tkpurchase/web/workreport-summary.html @@ -100,7 +100,7 @@ - + diff --git a/tkpurchase/web/workreport.html b/tkpurchase/web/workreport.html index 3c0b54d..08f1056 100644 --- a/tkpurchase/web/workreport.html +++ b/tkpurchase/web/workreport.html @@ -114,7 +114,7 @@ - + diff --git a/user-management/web/index.html b/user-management/web/index.html index b0c9d60..5c73df9 100644 --- a/user-management/web/index.html +++ b/user-management/web/index.html @@ -1997,7 +1997,7 @@ - + diff --git a/user-management/web/static/js/tkuser-core.js b/user-management/web/static/js/tkuser-core.js index 9253d80..3b2f553 100644 --- a/user-management/web/static/js/tkuser-core.js +++ b/user-management/web/static/js/tkuser-core.js @@ -186,7 +186,23 @@ async function init() { // 알림 벨 로드 _loadNotificationBell(); - setTimeout(() => document.querySelectorAll('.fade-in').forEach(el => el.classList.add('visible')), 50); + setTimeout(() => { + document.querySelectorAll('.fade-in').forEach(el => el.classList.add('visible')); + // URL ?tab= 파라미터로 탭 자동 전환 (화이트리스트 + URL 정리) + const ALLOWED_TABS = ['users','projects','workplaces','workers','departments', + 'permissions','issueTypes','tasks','vacations','partners','vendors', + 'consumables','notificationRecipients']; + const urlTab = new URLSearchParams(location.search).get('tab'); + if (urlTab && ALLOWED_TABS.includes(urlTab)) { + const tabBtn = document.querySelector(`.tab-btn[onclick*="switchTab('${urlTab}')"]`); + if (tabBtn && tabBtn.style.display !== 'none') { + tabBtn.click(); + const url = new URL(location); + url.searchParams.delete('tab'); + history.replaceState(null, '', url); + } + } + }, 50); } /* ===== 알림 벨 ===== */