6b17c1fadf
Build & Deploy to K8s / build-and-deploy (push) Failing after 8m6s
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.
203 lines
10 KiB
HTML
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>
|