diff --git a/B01_Dashboard/B01_Dashboard_UI_Company.ts b/B01_Dashboard/B01_Dashboard_UI_Company.ts index 6eed3b476..b5582f3bf 100644 --- a/B01_Dashboard/B01_Dashboard_UI_Company.ts +++ b/B01_Dashboard/B01_Dashboard_UI_Company.ts @@ -23,14 +23,12 @@ import { formatDate, L, runRequest } from "./B01_Dashboard_UI_Common"; import { createPagedTable } from "./B01_Dashboard_UI_Paging"; /** 라벨 + 값 한 칸 — 회사 정보 격자 */ -function infoItem(label: string, value: unknown): HTMLElement { - const item = document.createElement("div"); +function infoItem(label: string, value: unknown): HTMLElement[] { const term = document.createElement("dt"); term.textContent = label; const detail = document.createElement("dd"); detail.textContent = value == null || value === "" ? "-" : String(value); - item.append(term, detail); - return item; + return [term, detail]; } export function buildCompanyPanel(state: DashboardState): HTMLElement { @@ -56,16 +54,15 @@ export function buildCompanyPanel(state: DashboardState): HTMLElement { const info = document.createElement("dl"); info.className = "b01-dashboard__info"; info.append( - infoItem(L("B01_Dashboard_Table_Company"), company.name), - infoItem(L("B01_Dashboard_Field_BusinessNumber"), company.business_registration_number), - infoItem(L("B01_Co_Owner"), company.business_owner), - infoItem(L("B01_Co_Status"), company.business_status), - infoItem(L("B01_Dashboard_Field_Address"), company.business_address), - infoItem(L("B01_Co_Members"), company.user_count ?? 0), - infoItem(L("B01_Co_Projects"), company.project_count ?? 0), + ...infoItem(L("B01_Dashboard_Table_Company"), company.name), + ...infoItem(L("B01_Dashboard_Field_BusinessNumber"), company.business_registration_number), + ...infoItem(L("B01_Co_Owner"), company.business_owner), + ...infoItem(L("B01_Co_Status"), company.business_status), + ...infoItem(L("B01_Dashboard_Field_Address"), company.business_address), + ...infoItem(L("B01_Co_Members"), company.user_count ?? 0), + ...infoItem(L("B01_Co_Projects"), company.project_count ?? 0), ); const box = document.createElement("div"); - box.className = "b01-dashboard__stack"; box.append(info, wrap); // 회사 정보 수정 (2026-09-06 사용자 지시) — 관리자만 보인다. if (state.user.role !== "USER") { diff --git a/B01_Dashboard/B01_Dashboard_UI_Profile.ts b/B01_Dashboard/B01_Dashboard_UI_Profile.ts index c7b73650d..faa4cc08b 100644 --- a/B01_Dashboard/B01_Dashboard_UI_Profile.ts +++ b/B01_Dashboard/B01_Dashboard_UI_Profile.ts @@ -121,13 +121,11 @@ export function buildAccountInfo(user: DashboardUser): HTMLElement { [L("B01_Ac_AuthExpires"), formatDate(user.auth_expires_at)], ]; for (const [label, value] of rows) { - const item = document.createElement("div"); const term = document.createElement("dt"); term.textContent = label; const detail = document.createElement("dd"); detail.textContent = value; - item.append(term, detail); - info.append(item); + info.append(term, detail); } return info; } diff --git a/B01_Dashboard/B01_Dashboard_UI_ProjectsTab.ts b/B01_Dashboard/B01_Dashboard_UI_ProjectsTab.ts index cbdc2b657..3e7dd69a8 100644 --- a/B01_Dashboard/B01_Dashboard_UI_ProjectsTab.ts +++ b/B01_Dashboard/B01_Dashboard_UI_ProjectsTab.ts @@ -96,7 +96,6 @@ export function buildProjectsTab(state: DashboardState, projects: ProjectItem[]) ); const progress = createPagedTable(progressHeaders(), progressRow, projects); - list.root.classList.add("b01-dashboard__paged--dense"); let filter: ProjectFilter = parseFilter(currentQuery().get("filter")); const query = createInputField({ label: L("B01_Pj_Search"), diff --git a/B01_Dashboard/B01_Dashboard_UI_Resources.ts b/B01_Dashboard/B01_Dashboard_UI_Resources.ts index efba99f84..923573137 100644 --- a/B01_Dashboard/B01_Dashboard_UI_Resources.ts +++ b/B01_Dashboard/B01_Dashboard_UI_Resources.ts @@ -66,7 +66,7 @@ function buildResourceMetrics(resources: ResourceData | null): HTMLElement { function buildResourceChart(resources: ResourceData | null, days: number): HTMLElement { return buildTrendChart(resources, days, { - caption: L("B01_Sy_ResourceCaption").replace("{days}", String(days)), + caption: L("B01_Dashboard_Resources_ChartCaption"), ariaLabel: L("B01_Dashboard_Resources_ChartAria"), series: [ { name: L("B01_Dashboard_Metric_Cpu"), colorIndex: 0, pick: (h) => h.cpu_usage_percent }, diff --git a/B01_Dashboard/B01_Dashboard_UI_Style_Tabs.css b/B01_Dashboard/B01_Dashboard_UI_Style_Tabs.css index 51ba92b82..dd752a34e 100644 --- a/B01_Dashboard/B01_Dashboard_UI_Style_Tabs.css +++ b/B01_Dashboard/B01_Dashboard_UI_Style_Tabs.css @@ -66,15 +66,11 @@ gap: var(--spacing-8); } -.b01-dashboard__overview { - gap: var(--spacing-24); -} - /* 찾기 · 거르기 줄 */ .b01-dashboard__filters { display: flex; flex-wrap: wrap; - align-items: flex-start; + align-items: flex-end; gap: var(--spacing-16); margin-bottom: var(--spacing-16); } @@ -106,12 +102,6 @@ margin: 0 0 var(--spacing-16); } -.b01-dashboard__stack { - display: flex; - flex-direction: column; - gap: var(--spacing-16); -} - .b01-dashboard__info dt { color: var(--color-text-secondary); font-size: var(--text-caption); @@ -164,13 +154,3 @@ vertical-align: bottom; white-space: nowrap; } - -/* 칸이 많은 표(프로젝트) — 가로 여백을 줄이고 단계 막대가 두 줄 안에 들어오게 */ -.b01-dashboard__paged--dense .b01-dashboard__table th, -.b01-dashboard__paged--dense .b01-dashboard__table td { - padding: var(--spacing-8); -} - -.b01-dashboard__paged--dense .ui-workflow-layout__steps { - min-width: 400px; -} diff --git a/ui_template/ui_template_locale_b1_tabs.ts b/ui_template/ui_template_locale_b1_tabs.ts index 95d00d28f..8084b4cb4 100644 --- a/ui_template/ui_template_locale_b1_tabs.ts +++ b/ui_template/ui_template_locale_b1_tabs.ts @@ -77,7 +77,6 @@ export const ui_locales_b1_tabs = { /* --- 시스템 --- */ B01_Sy_Period: ["기간", "Period"], B01_Sy_Days: ["{days}일", "{days} days"], - B01_Sy_ResourceCaption: ["최근 {days}일 리소스 사용률", "Resource usage, last {days} days"], B01_Sy_ActiveTrend: ["활성 추이", "Activity trend"], B01_Sy_TrendCaption: ["활성 사용자 · 활성 프로젝트 수", "Active users and active projects"], B01_Sy_AllCompanies: ["전체 회사", "All companies"],