Images.cshtml 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. @page
  2. @model Admin.Pages.Config.Basic.ImagesModel
  3. @{
  4. ViewData["Title"] = "이미지 설정";
  5. }
  6. <div class="container">
  7. <h3>@ViewData["Title"]</h3>
  8. <hr />
  9. <partial name="_navTabs" />
  10. <div asp-validation-summary="ModelOnly" class="text-danger"></div>
  11. <partial name="_StatusMessage" />
  12. <form name="f_admin_write" id="fAdminWrite" class="mt-2" method="post" autocomplete="off" accept-charset="UTF-8" enctype="multipart/form-data">
  13. <!-- Favicon -->
  14. <div class="row mb-2 align-items-center">
  15. <label asp-for="Input.Images.FaviconFile" class="col-sm-2 col-form-label">Favicon</label>
  16. <div class="col-sm-10">
  17. @if (string.IsNullOrEmpty(Model.Input.Images.FaviconPath))
  18. {
  19. <input asp-for="Input.Images.FaviconFile" class="form-control" accept=".ico,image/x-icon" />
  20. <span asp-validation-for="Input.Images.FaviconFile" class="text-danger"></span>
  21. <div class="form-text text-muted">브라우저 탭/즐겨찾기에 표시됩니다. 권장: .ico, 32x32 또는 48x48</div>
  22. }
  23. else
  24. {
  25. <img src="@Model.Input.Images.FaviconPath" alt="favicon" class="img-fluid rounded" />
  26. <div class="form-check mt-2">
  27. <input class="form-check-input" type="checkbox" value="1" name="delete_favicon" id="deleteFavicon" />
  28. <label class="form-check-label" for="deleteFavicon">삭제</label>
  29. </div>
  30. }
  31. </div>
  32. </div>
  33. <hr />
  34. <!-- Logo Square -->
  35. <div class="row mb-2 align-items-center">
  36. <label asp-for="Input.Images.LogoSquareFile" class="col-sm-2 col-form-label">Logo-square</label>
  37. <div class="col-sm-10">
  38. @if (string.IsNullOrEmpty(Model.Input.Images.LogoSquarePath))
  39. {
  40. <input asp-for="Input.Images.LogoSquareFile" class="form-control" accept="image/png,image/jpeg,image/gif,image/webp,image/svg+xml" />
  41. <span asp-validation-for="Input.Images.LogoSquareFile" class="text-danger"></span>
  42. <div class="form-text text-muted">정사각형 로고(프로필/아이콘 영역)에 사용됩니다. 권장: 512x512 PNG 투명 배경</div>
  43. }
  44. else
  45. {
  46. <img src="@Model.Input.Images.LogoSquarePath" alt="logo-square" class="img-fluid rounded" />
  47. <div class="form-check mt-2">
  48. <input class="form-check-input" type="checkbox" value="1" name="delete_logo_square" id="deleteLogoSquare" />
  49. <label class="form-check-label" for="deleteLogoSquare">삭제</label>
  50. </div>
  51. }
  52. </div>
  53. </div>
  54. <hr />
  55. <!-- Logo Horizontal -->
  56. <div class="row mb-2 align-items-center">
  57. <label asp-for="Input.Images.LogoHorizontalFile" class="col-sm-2 col-form-label">Logo-horizontal</label>
  58. <div class="col-sm-10">
  59. @if (string.IsNullOrEmpty(Model.Input.Images.LogoHorizontalPath))
  60. {
  61. <input asp-for="Input.Images.LogoHorizontalFile" class="form-control" accept="image/png,image/jpeg,image/gif,image/webp,image/svg+xml" />
  62. <span asp-validation-for="Input.Images.LogoHorizontalFile" class="text-danger"></span>
  63. <div class="form-text text-muted">헤더/상단 영역에 사용되는 가로형 로고입니다. 권장: 가로 200~400px 이상</div>
  64. }
  65. else
  66. {
  67. <img src="@Model.Input.Images.LogoHorizontalPath" alt="logo-horizontal" class="img-fluid rounded" />
  68. <div class="form-check mt-2">
  69. <input class="form-check-input" type="checkbox" value="1" name="delete_logo_horizontal" id="deleteLogoHorizontal" />
  70. <label class="form-check-label" for="deleteLogoHorizontal">삭제</label>
  71. </div>
  72. }
  73. </div>
  74. </div>
  75. <hr />
  76. <!-- OG Default -->
  77. <div class="row mb-2 align-items-center">
  78. <label asp-for="Input.Images.OgDefaultFile" class="col-sm-2 col-form-label">og-default</label>
  79. <div class="col-sm-10">
  80. @if (string.IsNullOrEmpty(Model.Input.Images.OgDefaultPath))
  81. {
  82. <input asp-for="Input.Images.OgDefaultFile" class="form-control" accept="image/png,image/jpeg,image/gif,image/webp" />
  83. <span asp-validation-for="Input.Images.OgDefaultFile" class="text-danger"></span>
  84. <div class="form-text text-muted">SNS 공유(Open Graph) 기본 이미지입니다. 권장: 1200x630</div>
  85. }
  86. else
  87. {
  88. <img src="@Model.Input.Images.OgDefaultPath" alt="og-default" class="img-fluid rounded" />
  89. <div class="form-check mt-2">
  90. <input class="form-check-input" type="checkbox" value="1" name="delete_og_default" id="deleteOgDefault" />
  91. <label class="form-check-label" for="deleteOgDefault">삭제</label>
  92. </div>
  93. }
  94. </div>
  95. </div>
  96. <hr />
  97. <!-- Twitter Image -->
  98. <div class="row mb-2 align-items-center">
  99. <label asp-for="Input.Images.TwitterImageFile" class="col-sm-2 col-form-label">Twitter-image</label>
  100. <div class="col-sm-10">
  101. @if (string.IsNullOrEmpty(Model.Input.Images.TwitterImagePath))
  102. {
  103. <input asp-for="Input.Images.TwitterImageFile" class="form-control" accept="image/png,image/jpeg,image/gif,image/webp" />
  104. <span asp-validation-for="Input.Images.TwitterImageFile" class="text-danger"></span>
  105. <div class="form-text text-muted">트위터 카드 공유 이미지입니다. 권장: 1200x600 또는 1200x628</div>
  106. }
  107. else
  108. {
  109. <img src="@Model.Input.Images.TwitterImagePath" alt="twitter-image" class="img-fluid rounded" />
  110. <div class="form-check mt-2">
  111. <input class="form-check-input" type="checkbox" value="1" name="delete_twitter_image" id="deleteTwitterImage" />
  112. <label class="form-check-label" for="deleteTwitterImage">삭제</label>
  113. </div>
  114. }
  115. </div>
  116. </div>
  117. <hr />
  118. <!-- Apple Touch Icon -->
  119. <div class="row mb-2 align-items-center">
  120. <label asp-for="Input.Images.AppleTouchIconFile" class="col-sm-2 col-form-label">Apple-touch-icon</label>
  121. <div class="col-sm-10">
  122. @if (string.IsNullOrEmpty(Model.Input.Images.AppleTouchIconPath))
  123. {
  124. <input asp-for="Input.Images.AppleTouchIconFile" class="form-control" accept="image/png,image/jpeg,image/gif,image/webp" />
  125. <span asp-validation-for="Input.Images.AppleTouchIconFile" class="text-danger"></span>
  126. <div class="form-text text-muted">iOS 홈 화면에 추가 시 아이콘으로 사용됩니다. 권장: 180x180 PNG</div>
  127. }
  128. else
  129. {
  130. <img src="@Model.Input.Images.AppleTouchIconPath" alt="apple-touch-icon" class="img-fluid rounded" />
  131. <div class="form-check mt-2">
  132. <input class="form-check-input" type="checkbox" value="1" name="delete_apple_touch_icon" id="deleteAppleTouchIcon" />
  133. <label class="form-check-label" for="deleteAppleTouchIcon">삭제</label>
  134. </div>
  135. }
  136. </div>
  137. </div>
  138. <hr />
  139. <!-- App Icon 192 -->
  140. <div class="row mb-2 align-items-center">
  141. <label asp-for="Input.Images.AppIcon192File" class="col-sm-2 col-form-label">App-icon-192</label>
  142. <div class="col-sm-10">
  143. @if (string.IsNullOrEmpty(Model.Input.Images.AppIcon192Path))
  144. {
  145. <input asp-for="Input.Images.AppIcon192File" class="form-control" accept="image/png,image/jpeg,image/gif,image/webp" />
  146. <span asp-validation-for="Input.Images.AppIcon192File" class="text-danger"></span>
  147. <div class="form-text text-muted">PWA/앱 아이콘(192)으로 사용됩니다. 권장: 192x192 PNG</div>
  148. }
  149. else
  150. {
  151. <img src="@Model.Input.Images.AppIcon192Path" alt="app-icon-192" class="img-fluid rounded" />
  152. <div class="form-check mt-2">
  153. <input class="form-check-input" type="checkbox" value="1" name="delete_app_icon_192" id="deleteAppIcon192" />
  154. <label class="form-check-label" for="deleteAppIcon192">삭제</label>
  155. </div>
  156. }
  157. </div>
  158. </div>
  159. <hr />
  160. <!-- App Icon 512 -->
  161. <div class="row mb-2 align-items-center">
  162. <label asp-for="Input.Images.AppIcon512File" class="col-sm-2 col-form-label">App-icon-512</label>
  163. <div class="col-sm-10">
  164. @if (string.IsNullOrEmpty(Model.Input.Images.AppIcon512Path))
  165. {
  166. <input asp-for="Input.Images.AppIcon512File" class="form-control" accept="image/png,image/jpeg,image/gif,image/webp" />
  167. <span asp-validation-for="Input.Images.AppIcon512File" class="text-danger"></span>
  168. <div class="form-text text-muted">PWA/앱 아이콘(512)으로 사용됩니다. 권장: 512x512 PNG</div>
  169. }
  170. else
  171. {
  172. <img src="@Model.Input.Images.AppIcon512Path" alt="app-icon-512" class="img-fluid rounded" />
  173. <div class="form-check mt-2">
  174. <input class="form-check-input" type="checkbox" value="1" name="delete_app_icon_512" id="deleteAppIcon512" />
  175. <label class="form-check-label" for="deleteAppIcon512">삭제</label>
  176. </div>
  177. }
  178. </div>
  179. </div>
  180. <hr/>
  181. <div class="row">
  182. <div class="col text-center p-3">
  183. <button type="submit" class="btn btn-success">저장하기</button>
  184. </div>
  185. </div>
  186. <br />
  187. </form>
  188. </div>
  189. @section Scripts {
  190. @* <partial name="_ValidationScriptsPartial" /> *@
  191. }