feat(793-3b): 근거 제안 세 단을 793-3a 길로 이음 · 이 줄에 잇기 고른 것 = 옮길 층 SK · 환산 계수 넣을 때 서버가 다시 바꿈

- 가져온 식 만들 때 SK 가져온.근거후보 = 793-3a 블록 제안 근거후보(San_Basis_Store.block · 못 셈 = 빈 칸)
- 머리 판 후보 = 원문번호 · 옵션 · 품검산 · 입력필요 n · 까닭 [표지 글] · [우리 기초로 바꾸기] 입력 필요 = 바인딩 + 후보 입력필요 + 환산
- 환산 계수 = 가져온 식에서 to-base 다시(바꿈 전 · 후 서버 정본) · 계수 없을 땐 시트 안 엶(셈 길 400 없음)
- 단산 줄 고른 것 층 · 주인 뺌 — 층을 주면 옮기기가 SK 를 못 찾아 고정 줄로 옮겨짐
- 시험 test_793_3b 9(근거후보 채움 · SK 참조 옮기기)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-05 18:41:43 +09:00
co-authored by Claude Opus 5.5
parent 538151177e
commit 9b92d67189
6 changed files with 86 additions and 27 deletions
@@ -25,6 +25,7 @@ import {
gapText,
isImported,
needValues,
reasonText,
stillNeed,
tiers,
TIERS,
@@ -57,6 +58,7 @@ const TEXT = {
근접: ["근접", "Near"],
사람: ["사람 고름", "Human pick"],
None: ["없음", "None"],
Qty: ["품 {v}", "Qty {v}"],
NoCand: ["근거 제안 없음 — [기초 고르기]로 고름", "No suggestion — pick a basis"],
ToBase: ["우리 기초로 바꾸기", "Convert to our basis"],
PickBase: ["기초 고르기", "Pick basis"],
@@ -146,9 +148,11 @@ function cand(c: BasisCand, s: PanelState, a: PanelActs): HTMLElement {
attrs: { "data-basis-cand": c.기초, "data-basis-tier": c.단 },
children: [
createBadge(`${c.기초}${c.이름 ? ` ${c.이름}` : ""}`, "accent"),
...(c.원문번호 ? [muted(c.원문번호)] : []),
...(opts ? [muted(opts)] : []),
...(c.차이 !== undefined ? [muted(String(c.차이))] : []),
...(c.까닭 ? [muted(c.까닭)] : []),
...(c.품검산 ? [createBadge(tx("Qty").replace("{v}", c.품검산), c.품검산 === "같음" ? "success" : "warning")] : []), // prettier-ignore
...(c.입력필요?.length ? [createBadge(`${tx("Need")} ${c.입력필요.length}`, "danger")] : []),
...(reasonText(c) ? [muted(reasonText(c))] : []),
go,
],
});
@@ -201,7 +205,7 @@ export function importedPanel(s: PanelState, a: PanelActs): HTMLElement {
head.push("divider", muted(`${tx("Basis")} ${meta.단가기준 ?? "엑셀"}`), flip);
if (s.price) {
const g = tx("Gap").replace("{a}", won(s.price.전)).replace("{b}", won(s.price.후));
const t = muted(g.replace("{d}", gapText(s.price.전, s.price.후) || "0"));
const t = muted(g.replace("{d}", gapText(s.price.전, s.price.후)));
t.dataset.importedGap = "";
head.push(t);
}
@@ -222,7 +226,7 @@ export function importedPanel(s: PanelState, a: PanelActs): HTMLElement {
const gone = meta.바꿈;
if (!here && gone) {
const g = tx("Gap").replace("{a}", won(gone.전)).replace("{b}", won(gone.후));
kids.push(createBanner({ tone: "info", text: g.replace("{d}", gapText(gone.전, gone.후) || "0") })); // prettier-ignore
kids.push(createBanner({ tone: "info", text: g.replace("{d}", gapText(gone.전, gone.후)) })); // prettier-ignore
}
const values = needValues(s.doc);
const left = stillNeed(s.need, values);