refactor(B08,B09): 폴더째 old_code 로 옮기고 빈 화면 둘만 남김 (PLAN 7-3)
B08_Quantity 86 · B09_Estimation 111 파일을 old_code/ 로 옮김(지우지 않음). 화면은 메뉴·주소·단계 막대만 남은 빈 틀 둘 — main.py 라우터 13 개는 끊음. B07 이 빌려 쓰던 비탈 길이·면적은 필요한 함수만 B07_DesignDetail_Engine_SlopeGeometry 로 옮겨 적음(면적 적분·노면 면적·측점 묶음은 안 옮김) · 시험 하나를 새로 둠. B07 구조물도 조립(Cad_StandardSheet)은 2026-09-13 에 이미 도면 목록에서 빠져 부르는 곳이 없어 old_code 로 같이 보냄 — 구조물 그림은 되살리지 않음. B06 구조물 몫 조회는 빈 값으로 두어 화면이 그대로 서게 함. B08·B09 를 부르던 시험 25 개도 old_code/resources/tester 로 옮김. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PAdA5ThqmtVSsbzjusk1cJ
This commit is contained in:
@@ -1,106 +1,39 @@
|
||||
/* =============================================================================
|
||||
* B09_Estimation_UI_Shell.ts
|
||||
* 로그인 후 09: 6차 워크플로우 (원가계산) — 화면 **틀** (PLAN 12장 · 2026-09-14 브레인 판정)
|
||||
* 로그인 후 09: 6차 워크플로우 (원가계산) — **빈 화면** (PLAN 7-3)
|
||||
*
|
||||
* - 틀은 탭 줄과 등록만. 탭마다 파일 하나(`B09_Estimation_UI_Tab_<이름>.ts`) — 계약은 `_Shell_Types`.
|
||||
* - ⚠ 등록 권한 = 랩탑_서브. 다른 창은 탭 파일을 만들고 이름을 알려 등록을 부탁함.
|
||||
* - 탭을 고를 때마다 본문·좌측 칸을 비우고 `render(ctx, arg)`. `ctx.open(key, arg)` = 다른 탭으로 들어가기.
|
||||
* - 옛 원가계산 코드는 통째로 `old_code/B09_Estimation/` 에 있음(지우지 않음).
|
||||
* - 다시 짤 때까지 메뉴와 주소만 남김 — 제목·단계 막대만 뜨고 탭·계산은 없음.
|
||||
* ========================================================================== */
|
||||
|
||||
import { createWorkflowLayout } from "@ui/ui_template_workflow_layout";
|
||||
import { ui_locales, currentLanguageIndex } from "@ui/ui_template_locale";
|
||||
import { CURRENT_PROJECT_ID_KEY } from "@config/config_frontend";
|
||||
import { workflowSteps } from "../A00_Common/b_page_scaffold";
|
||||
import { goToWorkflowStage, WORKFLOW_STEP_ROUTES } from "../A00_Common/b_workflow_nav";
|
||||
import type { B09Tab, B09TabContext } from "./B09_Estimation_UI_Shell_Types";
|
||||
import { L, el, injectSheetStyles } from "./B09_Estimation_UI_Sheet";
|
||||
import { costSheetTab } from "./B09_Estimation_UI_Tab_CostSheet";
|
||||
import { rateTableTab } from "./B09_Estimation_UI_Tab_RateTable";
|
||||
import { billTab } from "./B09_Estimation_UI_Tab_Bill";
|
||||
import { unitPriceTab } from "./B09_Estimation_UI_Tab_UnitPrice";
|
||||
import { priceBasisTab } from "./B09_Estimation_UI_Tab_PriceBasis";
|
||||
import { machineTab } from "./B09_Estimation_UI_Tab_Machine";
|
||||
import { priceCompareTab } from "./B09_Estimation_UI_Tab_PriceCompare";
|
||||
import { materialPricesTab } from "./B09_Estimation_UI_Tab_MaterialPrices";
|
||||
import { summaryTab } from "./B09_Estimation_UI_Tab_Summary";
|
||||
import { listsTab } from "./B09_Estimation_UI_Tab_Lists";
|
||||
import { designDocTab } from "./B09_Estimation_UI_Tab_DesignDoc";
|
||||
import { basisSheetTab } from "./B09_Estimation_UI_Tab_BasisSheet";
|
||||
import { supplyTab } from "./B09_Estimation_UI_Tab_Supply";
|
||||
import { baseDataTab } from "./B09_Estimation_UI_Tab_BaseData";
|
||||
import { contractTab } from "./B09_Estimation_UI_Tab_Contract";
|
||||
import { executionTab } from "./B09_Estimation_UI_Tab_Execution";
|
||||
import { progressTab } from "./B09_Estimation_UI_Tab_Progress";
|
||||
import { completionTab } from "./B09_Estimation_UI_Tab_Completion";
|
||||
|
||||
/** 탭 등록 — 한 줄에 탭 하나. */
|
||||
const TABS: B09Tab[] = [
|
||||
costSheetTab, // 랩탑_메인
|
||||
rateTableTab, // 랩탑_메인
|
||||
billTab,
|
||||
unitPriceTab,
|
||||
priceBasisTab,
|
||||
machineTab,
|
||||
priceCompareTab,
|
||||
materialPricesTab, // 랩탑_메인 — 자재단가대비표 옆(자재 수동 단가)
|
||||
summaryTab,
|
||||
listsTab,
|
||||
supplyTab,
|
||||
baseDataTab,
|
||||
designDocTab,
|
||||
basisSheetTab,
|
||||
contractTab, // 랩탑_메인 — 설계 뒤 계약 단계라 맨 끝
|
||||
executionTab, // 랩탑_메인 — 계약 뒤 실행 단계
|
||||
progressTab, // 랩탑_메인 — 실행 뒤 기성 단계
|
||||
completionTab, // 랩탑_메인 — 기성 뒤 준공 단계
|
||||
];
|
||||
function L(key: keyof typeof ui_locales): string {
|
||||
return ui_locales[key][currentLanguageIndex];
|
||||
}
|
||||
|
||||
export async function renderB09Estimation(root: HTMLElement): Promise<void> {
|
||||
injectSheetStyles();
|
||||
export function renderB09Estimation(root: HTMLElement): void {
|
||||
const projectId = localStorage.getItem(CURRENT_PROJECT_ID_KEY);
|
||||
const page = el("div", "b09s-page");
|
||||
const bar = el("div", "b09s-tabs");
|
||||
const body = el("div", "b09s-body");
|
||||
const panel = el("div");
|
||||
page.append(bar, body);
|
||||
|
||||
let active = TABS[0].key;
|
||||
const open = (key: string, arg?: string): void => {
|
||||
const tab = TABS.find((item) => item.key === key);
|
||||
if (!tab) return;
|
||||
active = key;
|
||||
drawBar();
|
||||
body.replaceChildren();
|
||||
panel.replaceChildren();
|
||||
const ctx: B09TabContext = { projectId, body, panel, root, open };
|
||||
tab.render(ctx, arg);
|
||||
};
|
||||
const drawBar = (): void => {
|
||||
bar.replaceChildren(
|
||||
...TABS.map((tab) => {
|
||||
const button = el(
|
||||
"button",
|
||||
`b09s-tab${tab.key === active ? " is-active" : ""}`,
|
||||
tab.label(),
|
||||
);
|
||||
button.type = "button";
|
||||
button.dataset.tab = tab.key;
|
||||
button.addEventListener("click", () => open(tab.key));
|
||||
return button;
|
||||
}),
|
||||
);
|
||||
};
|
||||
const note = document.createElement("p");
|
||||
note.className = "b09-estimation__rebuilding";
|
||||
note.textContent = L("B09_Estimation_Rebuilding");
|
||||
const body = document.createElement("div");
|
||||
body.append(note);
|
||||
|
||||
const layout = createWorkflowLayout({
|
||||
title: L("B09_Estimation_Title"),
|
||||
steps: workflowSteps(),
|
||||
activeStep: 6,
|
||||
leftPanel: panel,
|
||||
mainContent: page,
|
||||
mainContent: body,
|
||||
routes: WORKFLOW_STEP_ROUTES,
|
||||
onStepClick: (stepIndex) => {
|
||||
onStepClick: (stepIndex: number) => {
|
||||
if (projectId) goToWorkflowStage(projectId, WORKFLOW_STEP_ROUTES[stepIndex]);
|
||||
},
|
||||
});
|
||||
root.append(layout.root);
|
||||
open(active);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user