Files
invyone/notes/gbpark/2026-05-20-numbering-admin-variants-v2/variant-a-cascade.html
T
DDD1542 6b17c1fadf
Build & Deploy to K8s / build-and-deploy (push) Failing after 8m6s
chore: commit remaining workspace updates
Include the outstanding numbering-rule admin page changes, TabBar interaction updates, V5 layout theme accent styling, and auto-generation option compatibility fix.

Add the local web-prototype skill assets, numbering-rule design variants, control IDE refactor note, and the table canonical cleanup plan/prompts used across phases B through F.

This commit captures the remaining workspace files after the canonical table cleanup commit so the branch can be pushed without leaving local dirty work behind.
2026-05-21 12:06:55 +09:00

203 lines
10 KiB
HTML

<!doctype html>
<html lang="ko" class="dark">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>채번 Admin V2 A · 3컬럼 관리형</title>
<link rel="stylesheet" href="./numbering-v2.css" />
</head>
<body>
<div class="demo-shell">
<header class="topbar">
<div class="brand">
<span class="brand-mark">#</span>
<div>
<h1>채번 관리</h1>
<div class="breadcrumb"><span>ADMIN</span><span>/</span><b>시스템관리</b><span>/</span><b>채번 규칙</b></div>
</div>
</div>
<div class="top-actions">
<span class="status-chip"><span class="dot" style="color:var(--green);"></span>14개 테이블 연결</span>
<span class="kbd">Ctrl K</span>
<button class="btn ghost" id="themeBtn">라이트</button>
<button class="btn">변경 이력</button>
<button class="btn primary">새 채번 규칙</button>
</div>
</header>
<div class="viewport cascade">
<aside class="col scope">
<div class="panel-head">
<span class="step-label"><b>01</b>범위 선택</span>
<h2>업무 도메인</h2>
<p>채번을 쓰는 업무 기준으로 먼저 좁힙니다.</p>
</div>
<div class="search"><input id="domainSearch" placeholder="영업, 구매, 생산 검색" /><span class="kbd">/</span></div>
<div class="scroll" id="domainList">
<button class="scope-card on" data-domain="sales">
<div class="scope-top"><span class="scope-name">영업 관리</span><span class="chip green">정상</span></div>
<span class="scope-code">sales_order · quote · delivery</span>
<div class="mini-meter"><span style="width:82%;"></span></div>
<span class="scope-meta">규칙 6개 · 테이블 연결 5개</span>
</button>
<button class="scope-card" data-domain="purchase">
<div class="scope-top"><span class="scope-name">구매 관리</span><span class="chip primary">운영</span></div>
<span class="scope-code">purchase_order · inbound</span>
<div class="mini-meter"><span style="width:64%;"></span></div>
<span class="scope-meta">규칙 4개 · 테이블 연결 4개</span>
</button>
<button class="scope-card" data-domain="production">
<div class="scope-top"><span class="scope-name">생산 관리</span><span class="chip amber">검토</span></div>
<span class="scope-code">work_order · lot · routing</span>
<div class="mini-meter"><span style="width:48%;"></span></div>
<span class="scope-meta">규칙 5개 · 미연결 2개</span>
</button>
<button class="scope-card" data-domain="master">
<div class="scope-top"><span class="scope-name">기준 정보</span><span class="chip">초안</span></div>
<span class="scope-code">item_master · customer · bom</span>
<div class="mini-meter"><span style="width:34%;"></span></div>
<span class="scope-meta">규칙 3개 · 포맷 정리 필요</span>
</button>
</div>
</aside>
<aside class="col nav">
<div class="panel-head">
<span class="step-label"><b>02</b>규칙 묶음</span>
<h2>영업 관리</h2>
<p>테이블과 컬럼 단위로 규칙을 훑습니다.</p>
</div>
<div class="search"><input id="ruleSearch" placeholder="수주, 견적, 출하 번호 검색" /><span class="kbd">K</span></div>
<div class="scroll" id="ruleList">
<div class="section-title"><span>LIVE RULES</span><span>6</span></div>
<button class="nav-card on" data-rule="so">
<div class="nav-top"><span class="nav-name">수주번호 자동채번</span><span class="chip green">LIVE</span></div>
<span class="rule-pattern">SO-{yyyyMM}-{0000}</span>
<span class="nav-meta">sales_order.order_no · 월별 리셋</span>
</button>
<button class="nav-card" data-rule="quote">
<div class="nav-top"><span class="nav-name">견적번호</span><span class="chip green">LIVE</span></div>
<span class="rule-pattern">QT-{yyyy}-{00000}</span>
<span class="nav-meta">quote.quote_no · 연도별 리셋</span>
</button>
<button class="nav-card" data-rule="claim">
<div class="nav-top"><span class="nav-name">클레임 접수번호</span><span class="chip amber">확인</span></div>
<span class="rule-pattern">CLM-{company}-{000}</span>
<span class="nav-meta">claim.claim_no · 회사별 범위</span>
</button>
<div class="section-title"><span>NEEDS LINK</span><span>2</span></div>
<button class="nav-card" data-rule="delivery">
<div class="nav-top"><span class="nav-name">출하 배차번호</span><span class="chip">미연결</span></div>
<span class="rule-pattern">DLV-{date}-{seq}</span>
<span class="nav-meta">배송 화면에서 사용 예정</span>
</button>
</div>
</aside>
<main class="main-scroll">
<section class="detail-head" data-od-id="detail-head">
<div>
<div class="title-line">
<h2 id="detailTitle">수주번호 자동채번</h2>
<span class="chip green">사용 중</span>
<span class="chip primary">sales_order.order_no</span>
</div>
<div class="detail-meta">
<span>생성 위치 <b>영업관리 / 수주등록</b></span>
<span>리셋 기준 <b>매월 1일</b></span>
<span>마지막 수정 <b>오늘 09:42</b></span>
</div>
</div>
<div class="top-actions">
<button class="btn">되돌리기</button>
<button class="btn primary">저장</button>
</div>
</section>
<section class="content-pad" data-od-id="cascade-content">
<div class="code-hero">
<div class="hero-kicker"><span>NEXT NUMBER PREVIEW</span><button class="btn" id="copyCode">복사</button></div>
<div class="code-line" id="codeLine">
<span class="code-token prefix">SO</span><span class="code-dash">-</span><span class="code-token date">202605</span><span class="code-dash">-</span><span class="code-token seq">0048</span>
</div>
<div class="hero-foot">
<span>현재 순번<b>47</b></span>
<span>다음 순번<b>48</b></span>
<span>리셋 주기<b>월별</b></span>
<span>충돌 검사<b>통과</b></span>
</div>
</div>
<div class="three-col card">
<div class="metric-card"><span>ACTIVE RULES</span><b>18</b><small>전체 채번 규칙</small></div>
<div class="metric-card"><span>TABLE LINKS</span><b>14</b><small>실제 컬럼 연결</small></div>
<div class="metric-card"><span>NEEDS REVIEW</span><b>3</b><small>미연결 또는 경고</small></div>
</div>
<div class="two-col">
<article class="card">
<div class="card-head">
<div><h3>포맷 구성</h3><p>읽는 즉시 어떤 코드가 만들어지는지 보이게 합니다.</p></div>
<button class="btn">파트 추가</button>
</div>
<div class="composer">
<button class="part on"><span class="type">prefix</span><span class="value">SO</span></button><span class="joiner">-</span>
<button class="part"><span class="type">date</span><span class="value">yyyyMM</span></button><span class="joiner">-</span>
<button class="part"><span class="type">sequence</span><span class="value">0000</span></button>
<button class="add-part">+ 검증 파트</button>
</div>
</article>
<article class="card">
<div class="card-head">
<div><h3>운영 상태</h3><p>발번 사고를 막기 위한 최소 정보입니다.</p></div>
<span class="chip green">정상</span>
</div>
<div class="field-grid" style="grid-template-columns:1fr 1fr;">
<label class="field">현재 순번<input value="47" /></label>
<label class="field">다음 순번<input value="48" /></label>
<label class="field">동시성 정책<select><option>DB 잠금 후 증가</option><option>트랜잭션 단위 예약</option></select></label>
<label class="field">중복 허용<select><option>허용 안 함</option><option>관리자 승인</option></select></label>
</div>
</article>
</div>
</section>
<div class="savebar">
<div class="note"><span>저장 전</span> 미리보기와 테이블 연결을 다시 확인하세요.</div>
<div class="top-actions"><button class="btn">변경 취소</button><button class="btn primary">규칙 저장</button></div>
</div>
</main>
</div>
</div>
<script>
const html = document.documentElement;
document.getElementById("themeBtn").addEventListener("click", (event) => {
html.classList.toggle("dark");
event.currentTarget.textContent = html.classList.contains("dark") ? "라이트" : "다크";
});
document.querySelectorAll(".scope-card, .nav-card").forEach((btn) => {
btn.addEventListener("click", () => {
btn.parentElement.querySelectorAll(".on").forEach((item) => item.classList.remove("on"));
btn.classList.add("on");
if (btn.dataset.rule === "quote") {
document.getElementById("detailTitle").textContent = "견적번호";
document.getElementById("codeLine").innerHTML = '<span class="code-token prefix">QT</span><span class="code-dash">-</span><span class="code-token date">2026</span><span class="code-dash">-</span><span class="code-token seq">00129</span>';
}
});
});
document.getElementById("ruleSearch").addEventListener("input", (event) => {
const term = event.target.value.trim().toLowerCase();
document.querySelectorAll("#ruleList .nav-card").forEach((row) => {
row.style.display = row.textContent.toLowerCase().includes(term) ? "grid" : "none";
});
});
document.getElementById("copyCode").addEventListener("click", (event) => {
event.currentTarget.textContent = "복사됨";
setTimeout(() => event.currentTarget.textContent = "복사", 900);
});
</script>
</body>
</html>