diff --git a/B01_Dashboard/B01_Dashboard_UI_Page.ts b/B01_Dashboard/B01_Dashboard_UI_Page.ts index 75d0905ad..4278b4777 100644 --- a/B01_Dashboard/B01_Dashboard_UI_Page.ts +++ b/B01_Dashboard/B01_Dashboard_UI_Page.ts @@ -173,13 +173,15 @@ function buildSystemSettingsPanel(user: DashboardUser, companyId: number | null) settingCard(title, desc, () => navigateTo(ROUTES.M02_MASTER_TEMPLATE, { open, root, ...company }), ); + // 구조물 조합 기본 층 = 개인(123-1 · 누구든) · 개인 층 없음(회사 없음) = 아래 역할 규칙 + const comboRoot = (fallback: string): string => (user.company_id ? "personal" : fallback); if (user.role === "SYSTEM_ADMIN") { const desc = L("B01_Dashboard_PermMasterWrite"); wrap.append( settingCard(L("B01_Dashboard_MasterElements"), L("B01_Dashboard_PermSourceRead"), () => navigateTo(ROUTES.M01_MASTER_DATA), ), - m02(L("B01_Dashboard_CardStructCombo"), "구조물조합", "master", desc), + m02(L("B01_Dashboard_CardStructCombo"), "구조물조합", comboRoot("master"), desc), m02(L("B01_Dashboard_CardStructOption"), "옵션", "master", desc), m02(L("B01_Dashboard_CardDrawing"), "도면", "master", desc), ); @@ -193,7 +195,7 @@ function buildSystemSettingsPanel(user: DashboardUser, companyId: number | null) L(companyAdmin ? "B01_Dashboard_PermCompanyWrite" : "B01_Dashboard_PermCompanyRead"), L("B01_Dashboard_PermPersonalWrite"), ].join(" · "); - wrap.append(m02(L("B01_Dashboard_CardStructCombo"), "구조물조합", root, desc)); + wrap.append(m02(L("B01_Dashboard_CardStructCombo"), "구조물조합", comboRoot(root), desc)); return wrap; } diff --git a/resources/tester/test_b01_settings_cards.py b/resources/tester/test_b01_settings_cards.py index f5872516f..82c61a547 100644 --- a/resources/tester/test_b01_settings_cards.py +++ b/resources/tester/test_b01_settings_cards.py @@ -213,3 +213,32 @@ def test_회사_찾기_거르기(): assert result.returncode == 0, result.stderr assert json.loads(result.stdout) == [[1, 3, 4], [1, 4], [4], [1], [1], [], [1, 3, 4]] assert "const LIMIT = 50;" in src and "found.slice(0, LIMIT)" in src + + +@pytest.mark.skipif(shutil.which("node") is None, reason="node 가 없음") +def test_구조물_조합_기본_층_개인(): + """123-1 — 회사 있는 사람은 역할 무관 구조물 조합 = 개인 · 회사 없으면 지금 규칙 · 다른 곳 그대로.""" + m = "B01_Dashboard_PermMasterWrite" + combo = f"{M02}?open=구조물조합&root=personal" + assert _cards({"role": "SYSTEM_ADMIN", "is_master": False, "company_id": 1}, 3) == [ + ["B01_Dashboard_MasterElements", "B01_Dashboard_PermSourceRead", "m01-master-data"], + ["B01_Dashboard_CardStructCombo", m, f"{combo}&company=3"], + ["B01_Dashboard_CardStructOption", m, f"{M02}?open=옵션&root=master&company=3"], + ["B01_Dashboard_CardDrawing", m, f"{M02}?open=도면&root=master&company=3"], + ] + assert _cards({"role": "ADMIN", "is_master": False, "company_id": 1}) == [ + ["B01_Dashboard_CardStructCombo", WRITE_CO, combo], + ] + assert _cards({"role": "USER", "is_master": True, "company_id": 1})[0][2] == combo + assert _cards({"role": "USER", "is_master": False, "company_id": 1})[0][2] == combo + # 개인 층 없음(회사 없음) = 지금 규칙 + assert _cards({"role": "SYSTEM_ADMIN", "is_master": False, "company_id": None})[1][2] == ( + f"{M02}?open=구조물조합&root=master" + ) + assert _cards({"role": "ADMIN", "is_master": False, "company_id": None})[0][2] == ( + f"{M02}?open=구조물조합&root=company" + ) + # 다른 곳 기본 그대로 — 고르기 탭(일위대가 · 복사 생성 · 복사해 가져오기) · 층 없는 주소 + layer = _text(ROOT / "M02_MasterTemplete" / "M02_MasterTemplete_Layer.ts") + assert 'return { tabs, first: isSystem || !own ? "master" : "personal" };' in layer + assert 'raw === "company" || raw === "personal" ? raw : "master";' in layer