diff --git a/backupDB_20260602.xlsx b/backupDB_20260602.xlsx new file mode 100644 index 0000000..3914bc9 Binary files /dev/null and b/backupDB_20260602.xlsx differ diff --git a/src/styles/common.css b/src/styles/common.css index 331aaaf..6f238ac 100644 --- a/src/styles/common.css +++ b/src/styles/common.css @@ -32,6 +32,11 @@ --primary-hover: var(--primary-lv-5); --primary-light: var(--primary-lv-0); + --edit-mode-color: var(--color-dahong); + --edit-mode-light: rgba(255, 61, 0, 0.1); + --edit-mode-focus: rgba(255, 61, 0, 0.3); + --edit-mode-dark: #cc3100; + --text-main: #111827; --text-muted: #6B7280; --border-color: #E5E7EB; diff --git a/src/views/List/ListFactory.ts b/src/views/List/ListFactory.ts index 0dc5b69..a132b46 100644 --- a/src/views/List/ListFactory.ts +++ b/src/views/List/ListFactory.ts @@ -85,7 +85,8 @@ export function createListView(container: HTMLElement, config: ListViewConfig) { fullList.forEach(asset => { const loc = asset[ASSET_SCHEMA.LOCATION.key] || '미지정'; - const serviceType = asset[ASSET_SCHEMA.SERVICE_TYPE.key] || '외부'; + const serviceTypeKey = ASSET_SCHEMA.SERVICE_TYPE?.key || 'service_type'; + const serviceType = asset[serviceTypeKey] || '외부'; const type = asset[ASSET_SCHEMA.ASSET_TYPE.key] || ''; locationCounts[loc] = (locationCounts[loc] || 0) + 1; @@ -138,14 +139,17 @@ export function createListView(container: HTMLElement, config: ListViewConfig) { ? `조회된 자산이 없습니다.` : finalDisplayList.map(asset => { const purpose = asset[ASSET_SCHEMA.ASSET_PURPOSE.key] || ''; - const serviceType = asset[ASSET_SCHEMA.SERVICE_TYPE.key] || '외부'; + const serviceTypeKey = ASSET_SCHEMA.SERVICE_TYPE?.key || 'service_type'; + const serviceType = asset[serviceTypeKey] || '외부'; const labelColor = serviceType === '내부' ? '#94A3B8' : '#35635C'; - const memo = asset[ASSET_SCHEMA.MEMO.key] || ''; + const managerMain = asset[ASSET_SCHEMA.MANAGER_MAIN.key] || '-'; + const managerSub = asset[ASSET_SCHEMA.MANAGER_SUB.key] || '-'; return ` ${serviceType} ${purpose || '-'} - ${formatInline(memo) || '-'} + ${managerMain} + ${managerSub} ${asset[ASSET_SCHEMA.LOC_DETAIL.key] || '-'} `; }).join(''); @@ -207,93 +211,104 @@ export function createListView(container: HTMLElement, config: ListViewConfig) { -
- -
-
-

${isPcView ? '유형별 분포' : '위치별 분포'}

- ${!isPcView && selectedLocation ? `` : ''} -
-
- ${chartLabels.map((l, i) => ` -
- - ${l} - ${chartData[i]} -
- `).join('')} -
-
- -
-
- -
-
-

자산등록현황

+
+ +
+
+

자산 현황 목록

- 상세위치 필터: - + 위치: + + 상세: +
-
+
- - - - - - + + + + + + + - +
분류용도비고상세위치
분류용도/자산명관리자(정)관리자(부)상세위치
+ + +
+
+
🖼️
+

목록에서 자산을 선택하면
상세 정보와 배치도가 이곳에 표시됩니다.

+
+ +
`; (window as any).dispatchLocFilter = (loc: string) => { - if (isPcView) return; // PC 뷰에서는 위치 필터링 비활성화 (유형별로 보기 때문) + if (isPcView) return; selectedLocation = loc; selectedDetailLocation = null; renderSystemStatus(); }; setTimeout(() => { - const ctx = document.getElementById('system-location-chart') as HTMLCanvasElement; - if (ctx && typeof (window as any).Chart !== 'undefined') { - new (window as any).Chart(ctx, { - type: 'doughnut', - data: { labels: chartLabels, datasets: [{ data: chartData, backgroundColor: chartColors, borderWidth: 0 }] }, - options: { - responsive: true, maintainAspectRatio: false, cutout: '70%', - onClick: (evt: any, elements: any[]) => { - if (!isPcView && elements.length > 0) { - selectedLocation = locLabels[elements[0].index]; - selectedDetailLocation = null; - renderSystemStatus(); - } - }, - plugins: { legend: { display: false } } - } - }); - } - document.getElementById('btn-reset-loc')?.addEventListener('click', () => { - selectedLocation = null; + const selectLoc = document.getElementById('select-loc') as HTMLSelectElement; + const selectDetailLoc = document.getElementById('select-detail-loc') as HTMLSelectElement; + + selectLoc?.addEventListener('change', (e) => { + selectedLocation = (e.target as HTMLSelectElement).value || null; selectedDetailLocation = null; - renderSystemStatus(); + updateTableOnly(); }); - document.getElementById('select-detail-loc')?.addEventListener('change', (e) => { + selectDetailLoc?.addEventListener('change', (e) => { selectedDetailLocation = (e.target as HTMLSelectElement).value || null; updateTableOnly(); }); updateTableOnly(); - }, 100); + }, 50); }; // [자산 목록] 테이블 렌더러