86 lines
2.9 KiB
JavaScript
86 lines
2.9 KiB
JavaScript
// 원본 연차공사 환경설정(TfrmEstMultiOption 0xf9c8f0 — 적용 0xf9cc6c · 열 순서 0xf0f620) — 화면 표시만 바꾸고 계산은 그대로.
|
|
// 비목순서: 0 합/노/재/경 · 1 합/재/노/경 · 2 노/재/경/합 · 3 재/노/경/합 (4·5 는 원본도 열을 옮기지 않음) — 금액(TC·NC·GC·JC·SC)과
|
|
// 단가(TU·NU·GU·JU·SU) 열을 그 자리 안에서 다시 늘어놓는다. 구분 표시 = 선택출처(ValueIndex) 열 보이기. 품명정렬 = 품명 칸 정렬.
|
|
// 값은 계산 환경 Display 에 둔다(원본 옵션 객체 +0x34·+0x38·+0x39). 품명 두 줄 표기·비고란 발췌근거는 하지 않음.
|
|
const EstDisplay = (() => {
|
|
const ORDERS = [
|
|
["T", "N", "G", "J", "S"],
|
|
["T", "G", "N", "J", "S"],
|
|
["N", "G", "J", "S", "T"],
|
|
["G", "N", "J", "S", "T"],
|
|
];
|
|
const LABELS = [
|
|
"합/노/재/경",
|
|
"합/재/노/경",
|
|
"노/재/경/합",
|
|
"재/노/경/합",
|
|
"합/경/재/노",
|
|
"경/재/노/합",
|
|
];
|
|
const get = (options) => ({ order: 0, gubun: true, align: 0, ...(options?.Display || {}) });
|
|
|
|
function columns(options, cols) {
|
|
const d = get(options);
|
|
let out = d.gubun ? cols : cols.filter((k) => k !== "ValueIndex");
|
|
const order = ORDERS[d.order];
|
|
if (!order || d.order === 0) return out;
|
|
for (const suffix of ["C", "U"]) {
|
|
const keys = order.map((p) => p + suffix),
|
|
at = out.map((k, i) => (keys.includes(k) ? i : -1)).filter((i) => i >= 0);
|
|
if (at.length < 2) continue;
|
|
const present = keys.filter((k) => out.includes(k));
|
|
out = out.slice();
|
|
at.forEach((i, n) => (out[i] = present[n]));
|
|
}
|
|
return out;
|
|
}
|
|
function nameStyle(options) {
|
|
return ["", "text-align:right", "text-align:center"][get(options).align] || "";
|
|
}
|
|
|
|
function dialog(state) {
|
|
const d = get(state.project.options);
|
|
EstActions.form(
|
|
"환경설정(표시)",
|
|
[
|
|
{ name: "order", label: "비목순서", value: d.order, choices: LABELS.map((l, i) => [i, l]) },
|
|
{
|
|
name: "gubun",
|
|
label: "구분 표시",
|
|
value: d.gubun ? "1" : "0",
|
|
choices: [
|
|
["1", "표시"],
|
|
["0", "숨김"],
|
|
],
|
|
},
|
|
{
|
|
name: "align",
|
|
label: "품명정렬",
|
|
value: d.align,
|
|
choices: [
|
|
[0, "좌정렬"],
|
|
[1, "우정렬"],
|
|
[2, "중앙정렬"],
|
|
],
|
|
},
|
|
],
|
|
(values) =>
|
|
EstApp.change(
|
|
(project) =>
|
|
(project.options.Display = {
|
|
order: Number(values.order),
|
|
gubun: values.gubun === "1",
|
|
align: Number(values.align),
|
|
}),
|
|
false,
|
|
),
|
|
);
|
|
}
|
|
function handle(name, state) {
|
|
if (name !== "display-options") return false;
|
|
dialog(state);
|
|
return true;
|
|
}
|
|
return { columns, nameStyle, handle };
|
|
})();
|