style: Apply form compaction to Create/Edit pages
TaxBaik CI/CD / build-and-deploy (push) Successful in 1m13s

Standardize all Create and Edit forms with:
- card-body p-2 padding
- form-control-sm, form-select-sm, form-label-sm for compact layout
- btn-sm for buttons
- row g-2 spacing instead of g-3
- Consistent empty state and danger action styling

Affected pages: Clients, Announcements, FAQs, Inquiries, Blog

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-07-09 22:11:35 +09:00
parent 51beea51b6
commit d94edc5a30
6 changed files with 99 additions and 99 deletions
@@ -6,17 +6,17 @@
@await Html.PartialAsync("_AdminPageHeader", new TaxBaik.Web.Models.AdminPageHeaderModel("Content", "공지사항 작성", "Tabler 표준 폼으로 공지사항을 등록합니다.", null, null))
<form method="post" class="card">
<div class="card-body">
<div class="card-body p-2">
@await Html.PartialAsync("_ValidationSummary")
<div class="row g-3">
<div class="row g-2">
<div class="col-lg-8">
<label asp-for="Input.Title" class="form-label"></label>
<input asp-for="Input.Title" class="form-control" />
<label asp-for="Input.Title" class="form-label form-label-sm"></label>
<input asp-for="Input.Title" class="form-control form-control-sm" />
<span asp-validation-for="Input.Title" class="text-danger small"></span>
</div>
<div class="col-lg-4">
<label asp-for="Input.DisplayType" class="form-label"></label>
<select asp-for="Input.DisplayType" class="form-select">
<label asp-for="Input.DisplayType" class="form-label form-label-sm"></label>
<select asp-for="Input.DisplayType" class="form-select form-select-sm">
<option value="info">info</option>
<option value="success">success</option>
<option value="warning">warning</option>
@@ -24,33 +24,33 @@
</select>
</div>
<div class="col-12">
<label asp-for="Input.Content" class="form-label"></label>
<textarea asp-for="Input.Content" class="form-control" rows="8"></textarea>
<label asp-for="Input.Content" class="form-label form-label-sm"></label>
<textarea asp-for="Input.Content" class="form-control form-control-sm" rows="8"></textarea>
<span asp-validation-for="Input.Content" class="text-danger small"></span>
</div>
<div class="col-md-4">
<label asp-for="Input.SortOrder" class="form-label"></label>
<input asp-for="Input.SortOrder" class="form-control" type="number" />
<label asp-for="Input.SortOrder" class="form-label form-label-sm"></label>
<input asp-for="Input.SortOrder" class="form-control form-control-sm" type="number" />
</div>
<div class="col-md-4">
<label asp-for="Input.StartsAt" class="form-label"></label>
<input asp-for="Input.StartsAt" class="form-control" type="datetime-local" />
<label asp-for="Input.StartsAt" class="form-label form-label-sm"></label>
<input asp-for="Input.StartsAt" class="form-control form-control-sm" type="datetime-local" />
</div>
<div class="col-md-4">
<label asp-for="Input.EndsAt" class="form-label"></label>
<input asp-for="Input.EndsAt" class="form-control" type="datetime-local" />
<label asp-for="Input.EndsAt" class="form-label form-label-sm"></label>
<input asp-for="Input.EndsAt" class="form-control form-control-sm" type="datetime-local" />
</div>
<div class="col-12">
<label class="form-check">
<input asp-for="Input.IsActive" class="form-check-input" type="checkbox" />
<span class="form-check-label">활성</span>
<span class="form-check-label form-label-sm">활성</span>
</label>
</div>
</div>
</div>
<div class="card-footer d-flex justify-content-end gap-2">
<a class="btn btn-outline-secondary" href="/admin/announcements">취소</a>
<button class="btn btn-primary" type="submit">저장</button>
<a class="btn btn-outline-secondary btn-sm" href="/admin/announcements">취소</a>
<button class="btn btn-primary btn-sm" type="submit">저장</button>
</div>
</form>
</section>
@@ -9,7 +9,7 @@
@await Html.PartialAsync("_AdminPageHeader", new TaxBaik.Web.Models.AdminPageHeaderModel("콘텐츠", "새 글 작성", "블로그 글을 등록합니다.", null, null))
<div class="card">
<div class="card-body">
<div class="card-body p-2">
@await Html.PartialAsync("_BlogEditor", new TaxBaik.Web.Pages.Shared.BlogEditorModel(
Model.Input.Title,
Model.Input.Content,
@@ -8,51 +8,51 @@
@await Html.PartialAsync("_AdminPageHeader", new TaxBaik.Web.Models.AdminPageHeaderModel("고객 관리", "고객 등록", "FluentValidation과 Tabler 표준 폼으로 신규 고객을 등록합니다.", null, null))
<form method="post" class="card">
<div class="card-body">
<div class="card-body p-2">
@await Html.PartialAsync("_ValidationSummary")
<div class="row g-3">
<div class="row g-2">
<div class="col-md-6">
<label asp-for="Input.Name" class="form-label"></label>
<input asp-for="Input.Name" class="form-control" />
<label asp-for="Input.Name" class="form-label form-label-sm"></label>
<input asp-for="Input.Name" class="form-control form-control-sm" />
<span asp-validation-for="Input.Name" class="text-danger small"></span>
</div>
<div class="col-md-6">
<label asp-for="Input.CompanyName" class="form-label"></label>
<input asp-for="Input.CompanyName" class="form-control" />
<label asp-for="Input.CompanyName" class="form-label form-label-sm"></label>
<input asp-for="Input.CompanyName" class="form-control form-control-sm" />
</div>
<div class="col-md-6">
<label asp-for="Input.Phone" class="form-label"></label>
<input asp-for="Input.Phone" class="form-control" />
<label asp-for="Input.Phone" class="form-label form-label-sm"></label>
<input asp-for="Input.Phone" class="form-control form-control-sm" />
</div>
<div class="col-md-6">
<label asp-for="Input.Email" class="form-label"></label>
<input asp-for="Input.Email" class="form-control" />
<label asp-for="Input.Email" class="form-label form-label-sm"></label>
<input asp-for="Input.Email" class="form-control form-control-sm" />
</div>
<div class="col-md-4">
<label asp-for="Input.Status" class="form-label"></label>
<input asp-for="Input.Status" class="form-control" />
<label asp-for="Input.Status" class="form-label form-label-sm"></label>
<input asp-for="Input.Status" class="form-control form-control-sm" />
</div>
<div class="col-md-4">
<label asp-for="Input.ServiceType" class="form-label"></label>
<input asp-for="Input.ServiceType" class="form-control" />
<label asp-for="Input.ServiceType" class="form-label form-label-sm"></label>
<input asp-for="Input.ServiceType" class="form-control form-control-sm" />
</div>
<div class="col-md-4">
<label asp-for="Input.TaxType" class="form-label"></label>
<input asp-for="Input.TaxType" class="form-control" />
<label asp-for="Input.TaxType" class="form-label form-label-sm"></label>
<input asp-for="Input.TaxType" class="form-control form-control-sm" />
</div>
<div class="col-12">
<label asp-for="Input.Source" class="form-label"></label>
<input asp-for="Input.Source" class="form-control" />
<label asp-for="Input.Source" class="form-label form-label-sm"></label>
<input asp-for="Input.Source" class="form-control form-control-sm" />
</div>
<div class="col-12">
<label asp-for="Input.Memo" class="form-label"></label>
<textarea asp-for="Input.Memo" class="form-control" rows="5"></textarea>
<label asp-for="Input.Memo" class="form-label form-label-sm"></label>
<textarea asp-for="Input.Memo" class="form-control form-control-sm" rows="5"></textarea>
</div>
</div>
</div>
<div class="card-footer d-flex justify-content-end gap-2">
<a class="btn btn-outline-secondary" href="/admin/clients">취소</a>
<button class="btn btn-primary" type="submit">저장</button>
<a class="btn btn-outline-secondary btn-sm" href="/admin/clients">취소</a>
<button class="btn btn-primary btn-sm" type="submit">저장</button>
</div>
</form>
</section>
+28 -28
View File
@@ -7,8 +7,8 @@
<section class="admin-page-shell">
@await Html.PartialAsync("_AdminPageHeader", new TaxBaik.Web.Models.AdminPageHeaderModel("고객 관리", "고객 수정", "기존 고객 정보를 불러와 Tabler 표준 폼으로 수정합니다.", null, null))
<div class="card mb-3">
<div class="card-body">
<div class="card mb-2">
<div class="card-body p-2">
<div class="text-muted small text-uppercase mb-1">불러온 원본</div>
<div class="fw-semibold">@Model.Input.Name</div>
<div class="text-muted small">@Model.Input.CompanyName / @Model.Input.Phone</div>
@@ -16,63 +16,63 @@
</div>
<form method="post" class="card">
<div class="card-body">
<div class="card-body p-2">
@await Html.PartialAsync("_ValidationSummary")
<div class="row g-3">
<div class="row g-2">
<div class="col-md-6">
<label asp-for="Input.Name" class="form-label"></label>
<input asp-for="Input.Name" class="form-control" />
<label asp-for="Input.Name" class="form-label form-label-sm"></label>
<input asp-for="Input.Name" class="form-control form-control-sm" />
<span asp-validation-for="Input.Name" class="text-danger small"></span>
</div>
<div class="col-md-6">
<label asp-for="Input.CompanyName" class="form-label"></label>
<input asp-for="Input.CompanyName" class="form-control" />
<label asp-for="Input.CompanyName" class="form-label form-label-sm"></label>
<input asp-for="Input.CompanyName" class="form-control form-control-sm" />
</div>
<div class="col-md-6">
<label asp-for="Input.Phone" class="form-label"></label>
<input asp-for="Input.Phone" class="form-control" />
<label asp-for="Input.Phone" class="form-label form-label-sm"></label>
<input asp-for="Input.Phone" class="form-control form-control-sm" />
</div>
<div class="col-md-6">
<label asp-for="Input.Email" class="form-label"></label>
<input asp-for="Input.Email" class="form-control" />
<label asp-for="Input.Email" class="form-label form-label-sm"></label>
<input asp-for="Input.Email" class="form-control form-control-sm" />
</div>
<div class="col-md-4">
<label asp-for="Input.Status" class="form-label"></label>
<input asp-for="Input.Status" class="form-control" />
<label asp-for="Input.Status" class="form-label form-label-sm"></label>
<input asp-for="Input.Status" class="form-control form-control-sm" />
</div>
<div class="col-md-4">
<label asp-for="Input.ServiceType" class="form-label"></label>
<input asp-for="Input.ServiceType" class="form-control" />
<label asp-for="Input.ServiceType" class="form-label form-label-sm"></label>
<input asp-for="Input.ServiceType" class="form-control form-control-sm" />
</div>
<div class="col-md-4">
<label asp-for="Input.TaxType" class="form-label"></label>
<input asp-for="Input.TaxType" class="form-control" />
<label asp-for="Input.TaxType" class="form-label form-label-sm"></label>
<input asp-for="Input.TaxType" class="form-control form-control-sm" />
</div>
<div class="col-12">
<label asp-for="Input.Source" class="form-label"></label>
<input asp-for="Input.Source" class="form-control" />
<label asp-for="Input.Source" class="form-label form-label-sm"></label>
<input asp-for="Input.Source" class="form-control form-control-sm" />
</div>
<div class="col-12">
<label asp-for="Input.Memo" class="form-label"></label>
<textarea asp-for="Input.Memo" class="form-control" rows="5"></textarea>
<label asp-for="Input.Memo" class="form-label form-label-sm"></label>
<textarea asp-for="Input.Memo" class="form-control form-control-sm" rows="5"></textarea>
</div>
</div>
</div>
<div class="card-footer d-flex justify-content-end gap-2">
<a class="btn btn-outline-secondary" href="/admin/clients/@Model.Id">취소</a>
<button class="btn btn-primary" type="submit">저장</button>
<a class="btn btn-outline-secondary btn-sm" href="/admin/clients/@Model.Id">취소</a>
<button class="btn btn-primary btn-sm" type="submit">저장</button>
</div>
</form>
</section>
<div class="card mt-3">
<div class="card-body d-flex justify-content-between align-items-center gap-3">
<div class="card mt-2">
<div class="card-body p-2 d-flex justify-content-between align-items-center gap-3">
<div>
<div class="text-muted small text-uppercase">위험 작업</div>
<div class="fw-semibold">고객을 삭제합니다.</div>
<div class="fw-semibold small">고객을 삭제합니다.</div>
</div>
<form method="post" asp-page-handler="Delete" onsubmit="return confirm('정말 삭제하시겠습니까?');">
<button class="btn btn-outline-danger" type="submit">삭제</button>
<button class="btn btn-outline-danger btn-sm" type="submit">삭제</button>
</form>
</div>
</div>
+13 -13
View File
@@ -6,16 +6,16 @@
@await Html.PartialAsync("_AdminPageHeader", new TaxBaik.Web.Models.AdminPageHeaderModel("Support", "FAQ 작성", "Tabler 표준 폼으로 FAQ를 등록합니다.", null, null))
<form method="post" class="card">
<div class="card-body">
<div class="card-body p-2">
@await Html.PartialAsync("_ValidationSummary")
<div class="row g-3">
<div class="row g-2">
<div class="col-lg-8">
<label asp-for="Input.Question" class="form-label"></label>
<input asp-for="Input.Question" class="form-control" />
<label asp-for="Input.Question" class="form-label form-label-sm"></label>
<input asp-for="Input.Question" class="form-control form-control-sm" />
</div>
<div class="col-lg-4">
<label asp-for="Input.Category" class="form-label"></label>
<input asp-for="Input.Category" class="form-control" list="faq-categories" />
<label asp-for="Input.Category" class="form-label form-label-sm"></label>
<input asp-for="Input.Category" class="form-control form-control-sm" list="faq-categories" />
<datalist id="faq-categories">
@foreach (var category in Model.Categories)
{
@@ -24,24 +24,24 @@
</datalist>
</div>
<div class="col-12">
<label asp-for="Input.Answer" class="form-label"></label>
<textarea asp-for="Input.Answer" class="form-control" rows="10"></textarea>
<label asp-for="Input.Answer" class="form-label form-label-sm"></label>
<textarea asp-for="Input.Answer" class="form-control form-control-sm" rows="10"></textarea>
</div>
<div class="col-md-4">
<label asp-for="Input.SortOrder" class="form-label"></label>
<input asp-for="Input.SortOrder" class="form-control" type="number" />
<label asp-for="Input.SortOrder" class="form-label form-label-sm"></label>
<input asp-for="Input.SortOrder" class="form-control form-control-sm" type="number" />
</div>
<div class="col-12">
<label class="form-check">
<input asp-for="Input.IsActive" class="form-check-input" type="checkbox" />
<span class="form-check-label">활성</span>
<span class="form-check-label form-label-sm">활성</span>
</label>
</div>
</div>
</div>
<div class="card-footer d-flex justify-content-end gap-2">
<a class="btn btn-outline-secondary" href="/admin/faqs">취소</a>
<button class="btn btn-primary" type="submit">저장</button>
<a class="btn btn-outline-secondary btn-sm" href="/admin/faqs">취소</a>
<button class="btn btn-primary btn-sm" type="submit">저장</button>
</div>
</form>
</section>
@@ -6,42 +6,42 @@
@await Html.PartialAsync("_AdminPageHeader", new TaxBaik.Web.Models.AdminPageHeaderModel("Customer Requests", "문의 등록", "관리자가 직접 상담 요청을 등록할 수 있습니다.", null, null))
<form method="post" class="card">
<div class="card-body">
<div class="card-body p-2">
@await Html.PartialAsync("_ValidationSummary")
<div class="row g-3">
<div class="row g-2">
<div class="col-md-6">
<label asp-for="Input.Name" class="form-label"></label>
<input asp-for="Input.Name" class="form-control" />
<label asp-for="Input.Name" class="form-label form-label-sm"></label>
<input asp-for="Input.Name" class="form-control form-control-sm" />
</div>
<div class="col-md-6">
<label asp-for="Input.Phone" class="form-label"></label>
<input asp-for="Input.Phone" class="form-control" />
<label asp-for="Input.Phone" class="form-label form-label-sm"></label>
<input asp-for="Input.Phone" class="form-control form-control-sm" />
</div>
<div class="col-md-6">
<label asp-for="Input.Email" class="form-label"></label>
<input asp-for="Input.Email" class="form-control" />
<label asp-for="Input.Email" class="form-label form-label-sm"></label>
<input asp-for="Input.Email" class="form-control form-control-sm" />
</div>
<div class="col-md-6">
<label asp-for="Input.ServiceType" class="form-label"></label>
<input asp-for="Input.ServiceType" class="form-control" />
<label asp-for="Input.ServiceType" class="form-label form-label-sm"></label>
<input asp-for="Input.ServiceType" class="form-control form-control-sm" />
</div>
<div class="col-12">
<label asp-for="Input.Message" class="form-label"></label>
<textarea asp-for="Input.Message" class="form-control" rows="8"></textarea>
<label asp-for="Input.Message" class="form-label form-label-sm"></label>
<textarea asp-for="Input.Message" class="form-control form-control-sm" rows="8"></textarea>
</div>
<div class="col-md-6">
<label asp-for="Input.Status" class="form-label"></label>
<input asp-for="Input.Status" class="form-control" />
<label asp-for="Input.Status" class="form-label form-label-sm"></label>
<input asp-for="Input.Status" class="form-control form-control-sm" />
</div>
<div class="col-12">
<label asp-for="Input.AdminMemo" class="form-label"></label>
<textarea asp-for="Input.AdminMemo" class="form-control" rows="4"></textarea>
<label asp-for="Input.AdminMemo" class="form-label form-label-sm"></label>
<textarea asp-for="Input.AdminMemo" class="form-control form-control-sm" rows="4"></textarea>
</div>
</div>
</div>
<div class="card-footer d-flex justify-content-end gap-2">
<a class="btn btn-outline-secondary" href="/admin/inquiries">취소</a>
<button class="btn btn-primary" type="submit">저장</button>
<a class="btn btn-outline-secondary btn-sm" href="/admin/inquiries">취소</a>
<button class="btn btn-primary btn-sm" type="submit">저장</button>
</div>
</form>
</section>