diff --git a/src/views/AssetTableView.ts b/src/views/AssetTableView.ts
index 91254bf..6bb2d81 100644
--- a/src/views/AssetTableView.ts
+++ b/src/views/AssetTableView.ts
@@ -76,17 +76,20 @@ function renderHwTable(table: HTMLTableElement, container: HTMLElement, mainCont
function renderSwTable(table: HTMLTableElement, container: HTMLElement, mainContent: HTMLElement) {
const list = state.masterData.sw.filter(a => a.type === state.activeSubTab);
- table.innerHTML = `| No | 법인 | 제품명 | 구매일 | 수량 | 사용가능 | 관리 |
|---|
`;
+ const isSub = state.activeSubTab === '구독SW';
+
+ table.innerHTML = `| No | 법인 | 제품명 | 구매일 | ${isSub ? '구독일 | ' : ''}수량 | 사용가능 | 관리 |
`;
container.appendChild(table);
mainContent.appendChild(container);
const tbody = document.getElementById('dynamic-tbody')!;
- if (list.length === 0) { tbody.innerHTML = `| 정보가 없습니다. |
`; return; }
+ if (list.length === 0) { tbody.innerHTML = `| 정보가 없습니다. |
`; return; }
+
list.forEach((asset, idx) => {
const assigned = state.masterData.swUsers.filter(u => u.swId === asset.id).length;
- const avail = asset.수량 - assigned;
+ const avail = (typeof asset.수량 === 'number' ? asset.수량 : parseInt(asset.수량||'0', 10)) - assigned;
const tr = document.createElement('tr');
tr.style.cursor = 'pointer';
- tr.innerHTML = `${idx+1} | ${asset.법인} | ${asset.제품명} | ${asset.구매일||''} | ${asset.수량} | ${avail} | | `;
+ tr.innerHTML = `${idx+1} | ${asset.법인} | ${asset.제품명} | ${asset.구매일||''} | ${isSub ? `${asset.구독일||''} | ` : ''}${asset.수량} | ${avail} | | `;
tr.addEventListener('click', (e) => { if (!(e.target as HTMLElement).closest('button')) openSwModal(asset); });
tr.querySelector('.btn-edit')?.addEventListener('click', () => openSwModal(asset));
tr.querySelector('.btn-users')?.addEventListener('click', () => openSwUserModal(asset));
diff --git a/src/views/DashboardView.ts b/src/views/DashboardView.ts
index 4101b34..ff72541 100644
--- a/src/views/DashboardView.ts
+++ b/src/views/DashboardView.ts
@@ -161,19 +161,39 @@ function renderSwDashboard(container: HTMLElement) {
-
-
-
구독 SW 만료 예정
-
${subExp}개 만료 예정
+
+
+
+ 구독 SW 만료 예정
+ 30일 이내
+
+
+ 전체 ${subTotal}개 제품 중 ${subExp}개 만료 예정
+
+
${subExp}개
+
+
-
-
-
-
유지보수 만료 예정
-
${permExp}개 만료 예정
+
+
+
+ 유지보수 만료 예정
+ 30일 이내
+
+
+ 전체 ${permTotal}개 제품 중 ${permExp}개 만료 예정
+
+
${permExp}개
+
+
-
`;