/* -*- coding: utf-8 -*- */
/**
* 표준중기공식 편집 화면 (scr_edit_eq.js) — wM_Edit_EQ · 추가 · 삭제 · 저장 · 취소 · 적용(공식 / 공식+코드)
* 근거: 지식DB 28 §1.1(사용자 등록부 — 「수정된 중기공식을 저장하시겠습니까?」 · 「신규공식 추가」 · 「공식+코드」) ·
* REA 30 TWM_EDIT_EQ(mBtn_Insert · mBtn_Delete · mBtn_Save · mBtn_Cancel · cBx_INS_X · MEMOC) · EQSYNC(NAME · SYNC · INS_X)
* 저장 = api_qty.py /api/qty/eq (work_dbf/EQSYNC.json) · 불러 쓰기 = 산출근거 편집기 「중기공식 불러오기」
*/
(function (global) {
"use strict";
const P = (global.STMATE_PLUGINS = global.STMATE_PLUGINS || {
screens: {},
actions: {},
menus: [],
});
const esc = (s) =>
String(s == null ? "" : s).replace(
/[&<>"]/g,
(c) => ({ "&": "&", "<": "<", ">": ">", '"': """ })[c],
);
function load(ctx, app) {
if (ctx.uiState.eqDraft || ctx.uiState.eqDraftLoading) return;
ctx.uiState.eqDraftLoading = true;
fetch("/api/qty/eq")
.then((r) => r.json())
.then((r) => {
ctx.uiState.eqItems = r.items || [];
ctx.uiState.eqDraft = JSON.parse(JSON.stringify(ctx.uiState.eqItems));
ctx.uiState.eqDraftLoading = false;
app.renderWorkspace();
})
.catch(() => ((ctx.uiState.eqDraft = []), (ctx.uiState.eqDraftLoading = false)));
}
function render(ctx, app) {
load(ctx, app);
const u = ctx.uiState;
const items = u.eqDraft || [];
const i = Math.min(u.eqSel || 0, Math.max(0, items.length - 1));
const it = items[i];
const ev = it ? global.STMATE_ENGINE.evaluateSmtFormulaText(it.text || "", ctx, "") : null;
const dirty = JSON.stringify(items) !== JSON.stringify(u.eqItems || []);
return `
`;
}
function bind(ctx, app) {
const u = ctx.uiState;
const $ = (id) => document.getElementById(id);
const items = u.eqDraft || [];
const i = Math.min(u.eqSel || 0, Math.max(0, items.length - 1));
const redraw = () => app.renderWorkspace();
document
.querySelectorAll(".eq-row")
.forEach((tr) => (tr.onclick = () => ((u.eqSel = Number(tr.dataset.i)), redraw())));
if ($("eq-name")) $("eq-name").onchange = (e) => ((items[i].name = e.target.value), redraw());
if ($("eq-insx"))
$("eq-insx").onchange = (e) => ((items[i].ins_x = Number(e.target.value)), redraw());
if ($("eq-text")) $("eq-text").onchange = (e) => ((items[i].text = e.target.value), redraw());
$("eq-add").onclick = () => {
if (!confirm("새로운 중기공식을 추가하시겠습니까?")) return;
items.push({
name: `신규공식 ${items.length + 1}`,
text: "q = 0.7 , K = 0.9 , f = 1/1.25 , E = 0.6\r\nCm = 21\r\nQ = 3600*q*K*f*E/Cm =",
ins_x: 0,
});
u.eqSel = items.length - 1;
redraw();
};
$("eq-del").onclick = () => {
if (!items.length || !confirm("선택된 중기공식을 삭제하시겠습니까?")) return;
items.splice(i, 1);
redraw();
};
$("eq-cancel").onclick = () => (
(u.eqDraft = JSON.parse(JSON.stringify(u.eqItems || []))),
redraw()
);
$("eq-save").onclick = async () => {
if (!confirm("수정된 중기공식을 저장하시겠습니까?")) return;
try {
await app.postJson("/api/qty/eq", { items });
u.eqItems = JSON.parse(JSON.stringify(items));
redraw();
} catch (err) {
alert("중기공식 저장 실패: " + err.message);
}
};
$("eq-close").onclick = () => ((u.activeScreen = "wM_Edit_iLWi"), redraw());
}
P.screens.wM_Edit_EQ = { render, bind };
P.actions.Act_Qty_EditEQ = (ctx, app) => (
(ctx.uiState.activeScreen = "wM_Edit_EQ"),
app.renderWorkspace()
);
if (!P.menus.some((m) => m.act === "Act_Qty_EditEQ"))
P.menus.push({ menu: "m2", label: "표준중기공식 편집", act: "Act_Qty_EditEQ" });
})(window);