feat(wbs): consolidate 3 master specifications into WBS-MASTER-2026 and implement TPL-CREATE-01, TPL-DETAIL-01, TPL-CANCEL-01 templates
Validators (Pushes and Pull Requests) / UI & Storage Validation (push) Failing after 11s
Validators (Pushes and Pull Requests) / Database & Schema Validation (push) Successful in 11s
Validators (Pushes and Pull Requests) / Core Validators & Database Setup (push) Failing after 21s
Validators (Pushes and Pull Requests) / .NET Contracts (push) Has been skipped
Validators (Pushes and Pull Requests) / WBS & Audit Validations (push) Has been skipped
Validators (Pushes and Pull Requests) / Calibration & Performance (push) Has been skipped
Validators (Pushes and Pull Requests) / Operational Report & Decision Packet (push) Has been skipped
Validators (Pushes and Pull Requests) / CI Workflow Lint (push) Failing after 10s
Validators (Pushes and Pull Requests) / Security & Secrets (push) Successful in 11s
Validators (Pushes and Pull Requests) / Notify PR Results (push) Has been skipped

This commit is contained in:
2026-07-26 01:47:57 +09:00
parent d286952392
commit 1a06e1402d
4 changed files with 227 additions and 56 deletions
@@ -0,0 +1,41 @@
<!-- Enterprise Template Implementation: TPL-CANCEL-01 (취소·역처리 템플릿) -->
<template>
<div class="tpl-cancel-01-container flex flex-col h-full w-full bg-slate-100 p-4 gap-3 overflow-y-auto">
<!-- Page Header -->
<div class="page-header flex justify-between items-center bg-white p-3.5 rounded-md border border-slate-200 shadow-sm">
<div class="flex items-center gap-2">
<h2 class="text-base font-bold text-rose-700">주문 취소 역처리 (`TPL-CANCEL-01`)</h2>
<span class="px-2 py-0.5 rounded bg-rose-100 text-rose-800 text-xs font-bold">역트랜잭션 생성</span>
</div>
</div>
<!-- Preview & Cancellation Impact -->
<div class="bg-white p-4 rounded-md border border-slate-200 shadow-sm flex flex-col gap-3">
<div class="p-3 bg-rose-50 border border-rose-200 rounded text-xs text-rose-800">
<strong>주의:</strong> 작업은 완료된 시점 거래 데이터를 직접 덮어쓰거나 물리 삭제하지 않으며, <strong>반제 역트랜잭션(Audit Cancellation Token)</strong> 생성합니다.
</div>
<div class="text-xs text-slate-700 flex flex-col gap-1">
<div>취소 대상: <strong>SO-2026-000128 (대한유통)</strong></div>
<div>예상 영향: <span class="text-emerald-700 font-bold">재고예약 24EA 해제</span>, <span class="text-blue-700 font-bold">결제 취소 요청 생성</span></div>
</div>
<StringField label="취소 사유" v-model="cancelReason" placeholder="고객 요청에 따른 출고 전 취소" required />
</div>
<!-- Actions Bar -->
<div class="bg-white p-3 rounded-md border border-slate-200 shadow-md flex justify-between items-center">
<span class="text-xs text-slate-500">Preview Token: <code class="font-mono text-slate-700">CANCEL-PREVIEW-18277</code></span>
<div class="flex gap-2">
<button class="px-4 py-1.5 bg-rose-600 hover:bg-rose-700 text-white text-xs font-bold rounded transition shadow-sm">
취소 역트랜잭션 실행
</button>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import StringField from '../../components/fields/StringField.vue';
const cancelReason = ref('고객 요청에 따른 출고 전 취소 요청');
</script>
@@ -0,0 +1,57 @@
<!-- Enterprise Template Implementation: TPL-CREATE-01 (단일 등록 템플릿) -->
<template>
<div class="tpl-create-01-container flex flex-col h-full w-full bg-slate-100 p-4 gap-3 overflow-y-auto">
<!-- Page Header -->
<div class="page-header flex justify-between items-center bg-white p-3.5 rounded-md border border-slate-200 shadow-sm">
<div class="flex items-center gap-2">
<h2 class="text-base font-bold text-slate-800">거래처 마스터 등록 (`TPL-CREATE-01`)</h2>
<span class="px-2 py-0.5 rounded bg-blue-100 text-blue-800 text-xs font-bold">단일 마스터</span>
</div>
</div>
<!-- Form Body -->
<div class="bg-white p-4 rounded-md border border-slate-200 shadow-sm flex flex-col gap-4">
<h3 class="font-bold text-sm text-slate-800 border-b pb-2">기본 정보</h3>
<div class="grid grid-cols-2 gap-4">
<StringField label="거래처 코드" v-model="customerCode" placeholder="CUST-001" required />
<StringField label="거래처명" v-model="customerName" placeholder="(주) 대한유통" required />
</div>
<div class="grid grid-cols-2 gap-4">
<NumberField label="여신 한도액 (KRW)" v-model="creditLimit" placeholder="100,000,000" />
<DateField label="계약 개시일" v-model="contractDate" showTodayBtn />
</div>
<AddressEditor
v-model:address2="address2"
postalCode="05500"
address1="서울특별시 송파구 올림픽로 300"
/>
</div>
<!-- Sticky Action Bar -->
<div class="sticky bottom-0 bg-white p-3 rounded-md border border-slate-200 shadow-md flex justify-between items-center">
<span class="text-xs text-slate-500">Idempotency Key: <code class="font-mono text-slate-700">3e0143da-71f1-4b73</code></span>
<div class="flex gap-2">
<button class="px-3.5 py-1.5 bg-slate-100 hover:bg-slate-200 text-slate-700 text-xs font-bold rounded transition">
저장 계속 등록
</button>
<button class="px-4 py-1.5 bg-blue-600 hover:bg-blue-700 text-white text-xs font-bold rounded transition shadow-sm">
저장
</button>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import StringField from '../../components/fields/StringField.vue';
import NumberField from '../../components/fields/NumberField.vue';
import DateField from '../../components/fields/DateField.vue';
import AddressEditor from '../../components/business-composites/AddressEditor.vue';
const customerCode = ref('CUST-00128');
const customerName = ref('(주) 대한유통');
const creditLimit = ref('50000000');
const contractDate = ref('2026-07-26');
const address2 = ref('101호');
</script>
@@ -0,0 +1,63 @@
<!-- Enterprise Template Implementation: TPL-DETAIL-01 (상세 조회 템플릿) -->
<template>
<div class="tpl-detail-01-container flex flex-col h-full w-full bg-slate-100 p-4 gap-3 overflow-y-auto">
<!-- Page Header -->
<div class="page-header flex justify-between items-center bg-white p-3.5 rounded-md border border-slate-200 shadow-sm">
<div class="flex items-center gap-3">
<h2 class="text-base font-bold text-slate-800">주문 상세 `SO-2026-000128`</h2>
<span class="px-2.5 py-0.5 rounded bg-amber-100 text-amber-800 text-xs font-bold">출고대기</span>
<span class="px-2 py-0.5 rounded bg-blue-50 text-blue-700 text-xs font-mono">결제완료</span>
</div>
<div class="flex gap-2">
<button class="px-3.5 py-1.5 bg-emerald-600 hover:bg-emerald-700 text-white text-xs font-bold rounded transition shadow-sm">
출고 지시
</button>
<button class="px-3 py-1.5 bg-slate-100 hover:bg-slate-200 text-slate-700 text-xs font-bold rounded transition">
수정 (`TPL-EDIT-01`)
</button>
</div>
</div>
<!-- Status Timeline -->
<div class="status-timeline bg-white p-4 rounded-md border border-slate-200 shadow-sm flex justify-between items-center text-xs">
<div class="step flex flex-col items-center gap-1 text-emerald-600 font-bold">
<span class="w-6 h-6 rounded-full bg-emerald-100 flex items-center justify-center"></span>
<span>주문접수</span>
</div>
<div class="line flex-1 h-0.5 bg-emerald-500 mx-2"></div>
<div class="step flex flex-col items-center gap-1 text-emerald-600 font-bold">
<span class="w-6 h-6 rounded-full bg-emerald-100 flex items-center justify-center"></span>
<span>결제완료</span>
</div>
<div class="line flex-1 h-0.5 bg-emerald-500 mx-2"></div>
<div class="step flex flex-col items-center gap-1 text-amber-600 font-bold">
<span class="w-6 h-6 rounded-full bg-amber-100 border-2 border-amber-500 flex items-center justify-center"></span>
<span>출고대기</span>
</div>
<div class="line flex-1 h-0.5 bg-slate-200 mx-2"></div>
<div class="step flex flex-col items-center gap-1 text-slate-400">
<span class="w-6 h-6 rounded-full bg-slate-100 flex items-center justify-center"></span>
<span>출고완료</span>
</div>
</div>
<!-- Detail Info Cards -->
<div class="grid grid-cols-3 gap-3">
<div class="bg-white p-3.5 rounded-md border border-slate-200 shadow-sm">
<span class="text-xs text-slate-500 block mb-1">거래처</span>
<strong class="text-sm text-slate-800 font-semibold">() 대한유통 (CUST-00128)</strong>
</div>
<div class="bg-white p-3.5 rounded-md border border-slate-200 shadow-sm">
<span class="text-xs text-slate-500 block mb-1">주문총액</span>
<strong class="text-sm text-blue-700 font-mono font-bold">1,250,000 KRW</strong>
</div>
<div class="bg-white p-3.5 rounded-md border border-slate-200 shadow-sm">
<span class="text-xs text-slate-500 block mb-1">배송지</span>
<span class="text-xs text-slate-700 font-medium">서울특별시 송파구 올림픽로 300</span>
</div>
</div>
</div>
</template>
<script setup lang="ts">
</script>