Files
Aislo/resources/tester/helper_m02_item_list.cjs
T
eomsangdonandClaude Sonnet 5.5 05234f1f6a test(725-5): M02 낡은 시험 8 파일 고침 - 소스 글·시간 표기 변화를 새 글로 따라감 (코드 안 고침)
- test_m02_item_list: 헬퍼 가짜 모듈에 진짜 common_util_time 연결 · TZ=Asia/Seoul 고정 · 서버 수정일 = UTC Z 20자(593-1)
- test_m02_hopyo_screen: 도면 양식 칸이 조건 없이 놓임(720-4) - 찾는 글 drawing ? 를 drawing, 로
- test_m02_layer_screen: const drawing = opt.isSystem 를 조건 없는 section(L("M02_KindDrawing")) 글로
- test_m02_practice: 차례 확인 글 drawing ? 를 drawing, 로
- test_m02_structure_def_screen: 지난 판 저장일 = UTC Z 초 단위(593-1) - 길이 16 을 꼴 확인으로
- test_m02_structure_option_groups: 옵션 줄은 716-3 에서 좌측 칸을 떠남 - 있다는 단언을 없다는 단언으로
- test_m02_structure_options: 같은 까닭 - 옵션 줄 단언을 없음으로, 구조물 조합 → 도면 양식 → 실무문서 차례만 확인
- test_m02_df_convert: 옛 사본 폴더가 낡아 어긋남 - 정본과 다르면 다시 복사 · 전수 대조는 열 줄에 하나(약 1분, AISLO_DF_FULL=1 이면 전수 약 12분) · 일꾼 동시 Node 호출로 드문 실패는 혼자 한 번 더

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-02 00:47:00 +09:00

79 lines
3.4 KiB
JavaScript

/* M02 항목 목록(`M02_MasterTemplete_ItemList.ts`) 칸 · 찾기 · 쪽 단위검증 헬퍼 — 트랜스파일해 Node 로 돌리고
* JSON 으로 냄. 화면 부품(ui_template · M01 머리 · css)은 빈 것으로 갈음 · 나무 자료(`TreePanel_Model`)는 진짜. */
const fs = require("fs");
const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript"));
const M02 = path.join(__dirname, "..", "..", "M02_MasterTemplete");
const load = (name, stubs) => {
const js = ts.transpileModule(fs.readFileSync(path.join(M02, name), "utf8"), {
compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 },
}).outputText;
const box = { exports: {} };
const need = (id) => (id in stubs ? stubs[id] : {});
new Function("exports", "module", "require", js)(box.exports, box, need);
return box.exports;
};
const model = load("M02_MasterTemplete_TreePanel_Model.ts", {});
const time = load("../common_util/common_util_time.ts", {}); // 날짜 글 = 진짜(PC 시간대는 시험이 고정)
const m = load("M02_MasterTemplete_ItemList.ts", {
"./M02_MasterTemplete_TreePanel_Model": model,
"../common_util/common_util_time": time,
});
const row = (열, 경로, extra = {}) => ({
key: `SS-${열}`,
열,
경로,
이름: 경로.join(" "),
단위: "m",
도번: `SD-${열}`,
면적번: `SA-${열}`,
수정일: { structure: "2026-10-01T09:00:00", area: "2026-10-03T10:00:00" },
labor: null,
...extra,
});
const rows = [
row("c1", ["기슭막이", "메쌓기", "1.2m"], {
labor: { 번호: "SU-000001", 로직수: 3, 합계: 1234567.4, 기준: 99, 단위: "개소" },
수정일: { structure: "2026-10-01T09:00:00", labor: "2026-10-04T11:00:00" },
}),
row("c2", ["기슭막이", "찰쌓기"], { labor: { 번호: "SU-000002", 로직수: 0, 합계: null } }),
row("c3", ["옹벽"], { 도번: "", 수정일: {} }),
];
const cells = (kind) => rows.map((r) => m.ITEM_COLS[kind].map((c) => c.get(r)));
const many = Array.from({ length: 65 }, (_, i) => row(`n${i}`, ["배수", `측구 ${i}`]));
process.stdout.write(
JSON.stringify({
heads: Object.fromEntries(
Object.entries(m.ITEM_COLS).map(([k, cols]) => [k, cols.map((c) => c.head)]),
),
cells: {
structure: cells("structure"),
area: cells("area"),
labor: cells("labor"),
item: cells("item"),
},
find: m.pageOf(rows, m.ITEM_COLS.structure, "기슭 찰", 1).shown.map((r) => r.열),
findLabor: m.pageOf(rows, m.ITEM_COLS.labor, "SU-000001", 1).shown.map((r) => r.열),
findNone: m.pageOf(rows, m.ITEM_COLS.structure, "없는말", 1),
page3: (({ page, total, shown }) => ({ page, total, n: shown.length }))(
m.pageOf(many, m.ITEM_COLS.structure, "", 3),
),
pageOver: m.pageOf(many, m.ITEM_COLS.structure, "", 9).page,
pageEmpty: m.pageOf([], m.ITEM_COLS.structure, "", 2).page,
// 그 부분 문서 없는 줄(39-8 H3) — c1 = 일위대가 있음 · 면적 수정일 없음 · c3 = 수정일 · 일위대가 없음
sums: [
rows[0], // 반영 합 있음
{ labor: { 로직수: 14, 합계: 0, 기준: 167746.6 } }, // 수량 없음 = 기준
rows[1], // 담은 로직 0
{ labor: { 로직수: 2, 합계: null, 기준: null } }, // 계산값 없음
rows[2], // 일위대가 없음
].map((r) => m.laborSum(r)),
missing: ["structure", "area", "labor", "item"].map((k) =>
rows.map((r) => m.missingPart(k, r)),
),
}),
);