View.cshtml 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. @page "{id:int}"
  2. @model Admin.Pages.Forum.Posts.List.ViewModel
  3. @{
  4. ViewData["Title"] = "게시글 상세";
  5. }
  6. <link rel="stylesheet" href="~/lib/ckeditor/browser/ckeditor5-content.css" asp-append-version="true" />
  7. <div class="container">
  8. <h3 class="mb-3">@ViewData["Title"]</h3>
  9. <hr />
  10. <partial name="_StatusMessage" />
  11. <div class="table-responsive">
  12. <table class="table table-striped table-bordered">
  13. <colgroup>
  14. <col style="width: 15%;" />
  15. <col />
  16. </colgroup>
  17. <tr>
  18. <th>ID</th>
  19. <td>@Model.ID</td>
  20. </tr>
  21. <tr>
  22. <th>게시판</th>
  23. <td>@Model.BoardName</td>
  24. </tr>
  25. <tr>
  26. <th>말머리</th>
  27. <td>
  28. @if (Model.BoardPrefixName is not null)
  29. {
  30. <span class="fw-bold" style="color: @(Model.BoardPrefixColor ?? "green")">[@Model.BoardPrefixName]</span>
  31. }
  32. else
  33. {
  34. <text>-</text>
  35. }
  36. </td>
  37. </tr>
  38. <tr>
  39. <th>제목</th>
  40. <td>@Model.Subject</td>
  41. </tr>
  42. <tr>
  43. <th>작성자</th>
  44. <td>@(Model.Name ?? Model.SID ?? "-")</td>
  45. </tr>
  46. <tr>
  47. <th>내용</th>
  48. <td>
  49. <div class="ck-content border rounded p-3" style="min-height: 100px;">@Html.Raw(Model.Content)</div>
  50. </td>
  51. </tr>
  52. <tr>
  53. <th>대표 이미지</th>
  54. <td>
  55. @if (!string.IsNullOrWhiteSpace(Model.Thumbnail))
  56. {
  57. <img src="@Model.Thumbnail" class="img-fluid img-thumbnail" style="max-width: 300px;" alt="대표 이미지" />
  58. }
  59. else
  60. {
  61. <text>-</text>
  62. }
  63. </td>
  64. </tr>
  65. <tr>
  66. <th>태그</th>
  67. <td>
  68. @if (Model.Tags.Count > 0)
  69. {
  70. foreach (var tag in Model.Tags)
  71. {
  72. <span class="badge bg-secondary me-1">@tag.Name</span>
  73. }
  74. }
  75. else
  76. {
  77. <text>-</text>
  78. }
  79. </td>
  80. </tr>
  81. <tr>
  82. <th>첨부파일</th>
  83. <td>
  84. @if (Model.Files.Count > 0)
  85. {
  86. <ul class="list-unstyled mb-0">
  87. @foreach (var file in Model.Files)
  88. {
  89. <li>
  90. <a href="@file.Url" target="_blank">@file.FileName</a>
  91. @if (file.Size.HasValue)
  92. {
  93. <small class="text-muted">(@(file.Size.Value > 1048576 ? $"{file.Size.Value / 1048576.0:F1}MB" : $"{file.Size.Value / 1024.0:F1}KB"))</small>
  94. }
  95. <small class="text-muted">다운로드: @file.Downloads</small>
  96. </li>
  97. }
  98. </ul>
  99. }
  100. else
  101. {
  102. <text>-</text>
  103. }
  104. </td>
  105. </tr>
  106. <tr>
  107. <th>이미지</th>
  108. <td>
  109. @if (Model.Images.Count > 0)
  110. {
  111. foreach (var img in Model.Images)
  112. {
  113. <a href="@img.Url" target="_blank">
  114. <img src="@img.Url" class="img-thumbnail me-1 mb-1" style="max-width: 120px; max-height: 120px;" alt="@img.FileName" />
  115. </a>
  116. }
  117. }
  118. else
  119. {
  120. <text>-</text>
  121. }
  122. </td>
  123. </tr>
  124. <tr>
  125. <th>상태</th>
  126. <td>
  127. @if (Model.IsNotice) { <span class="badge bg-warning text-dark me-1">공지</span> }
  128. @if (Model.IsSecret) { <span class="badge bg-dark me-1">비밀</span> }
  129. @if (Model.IsAnonymous) { <span class="badge bg-info me-1">익명</span> }
  130. @if (Model.IsSpeaker) { <span class="badge bg-primary me-1">스피커</span> }
  131. @if (Model.IsDeleted) { <span class="badge bg-danger me-1">삭제됨</span> }
  132. @if (!Model.IsNotice && !Model.IsSecret && !Model.IsAnonymous && !Model.IsSpeaker && !Model.IsDeleted)
  133. {
  134. <text>일반</text>
  135. }
  136. </td>
  137. </tr>
  138. <tr>
  139. <th>조회 / 공감 / 비공감</th>
  140. <td>@Model.Views / @Model.Likes / @Model.Dislikes</td>
  141. </tr>
  142. <tr>
  143. <th>댓글</th>
  144. <td>@Model.CommentCount</td>
  145. </tr>
  146. <tr>
  147. <th>수정일</th>
  148. <td>@(Model.UpdatedAt ?? "-")</td>
  149. </tr>
  150. <tr>
  151. <th>등록일</th>
  152. <td>@Model.CreatedAt</td>
  153. </tr>
  154. </table>
  155. </div>
  156. <div class="d-grid gap-2 text-center d-md-block">
  157. <a href="/Forum/Posts/List/Edit/@(Model.ID)@(Model.QueryString)" class="btn btn-info">수정</a>
  158. <a href="@(string.IsNullOrWhiteSpace(Model.ReturnUrl) ? "/Forum/Posts/List" : Model.ReturnUrl)" class="btn btn-secondary">목록</a>
  159. </div>
  160. <br />
  161. </div>