a97378b84d
- 공개범위 설정 기능 개발(ALL/ORG/PRIVATE) - 게시물/댓글 정교화 - 요청 및 DB 처리 확장 - UI, DTO, Service 계층 업데이트 - 감사 로그 및 조회수 처리 로직 추가
130 lines
5.7 KiB
HTML
130 lines
5.7 KiB
HTML
<!DOCTYPE html>
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
|
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout/djbank_title_layout}">
|
|
|
|
<body>
|
|
<section layout:fragment="title">
|
|
<div class="page-title-banner">
|
|
<img th:src="@{/img/img_title_bg.png}" class="title-image" alt="타이틀 배경">
|
|
<h1>Q&A</h1>
|
|
</div>
|
|
</section>
|
|
|
|
<section layout:fragment="contentFragment">
|
|
<div class="inquiry-detail-container" th:attr="data-inquiry-id=${inquiry.id}">
|
|
|
|
<!-- Inquiry Header: Status Badge and Title -->
|
|
<div class="inquiry-detail-header">
|
|
<div class="inquiry-header-top">
|
|
<span class="inquiry-status-badge"
|
|
th:classappend="${T(com.eactive.apim.portal.djb.community.qna.constant.DjbInquiryStatus).badgeClass(inquiry.inquiryStatus)}"
|
|
th:text="${T(com.eactive.apim.portal.djb.community.qna.constant.DjbInquiryStatus).displayName(inquiry.inquiryStatus)}">
|
|
답변대기
|
|
</span>
|
|
<div class="inquiry-header-right">
|
|
<span class="inquiry-detail-writer" th:text="${inquiry.inquirerDisplay}">작성자 (법인명)</span>
|
|
<span class="inquiry-detail-divider">|</span>
|
|
<span class="inquiry-detail-date" th:text="${#temporals.format(inquiry.createdDate, 'yyyy.MM.dd')}">2025.11.01</span>
|
|
<span class="inquiry-detail-divider">|</span>
|
|
<span class="inquiry-detail-views" th:text="|조회 ${inquiry.viewCount}|">조회 0</span>
|
|
<span class="inquiry-detail-divider">|</span>
|
|
<span class="inquiry-detail-visibility"
|
|
th:classappend="${inquiry.visibility == 'PRIVATE'} ? ' inquiry-detail-visibility--private'">
|
|
<svg th:if="${inquiry.visibility == 'PRIVATE'}" class="inquiry-lock-icon" width="13" height="13" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-label="비공개">
|
|
<rect x="4" y="10" width="16" height="11" rx="2" fill="currentColor"/>
|
|
<path d="M7 10V7a5 5 0 0 1 10 0v3" stroke="currentColor" stroke-width="2" fill="none"/>
|
|
</svg>
|
|
<span th:text="${inquiry.visibilityLabel}">법인공개</span>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<h2 class="inquiry-detail-title" th:text="${inquiry.inquirySubject}">질문 제목</h2>
|
|
</div>
|
|
|
|
<!-- Inquiry Content Section -->
|
|
<div class="inquiry-detail-content">
|
|
<div id="inquiryDetail" class="inquiry-content-body" th:utext="${inquiry.inquiryDetail}">
|
|
문의 내용이 여기에 표시됩니다.
|
|
</div>
|
|
<!-- Attachment: 강제 다운로드 링크만 제공 (이미지 인라인 노출 안 함) -->
|
|
<div class="inquiry-detail-attach" th:if="${inquiry.attachFile != null and !inquiry.attachFile.isEmpty()}">
|
|
<a th:href="@{/file/download(fileId=${inquiry.attachFile}, fileSn=1)}" class="inquiry-attach-link" download>
|
|
첨부 이미지 다운로드
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Admin Response Section -->
|
|
<div class="inquiry-response-section" th:if="${inquiry.inquiryStatus == 'RESPONDED' or inquiry.inquiryStatus == 'CLOSED'}">
|
|
<div class="inquiry-response-header">
|
|
<span class="response-label">관리자 답변</span>
|
|
<span class="response-date" th:text="${#temporals.format(inquiry.responseDate, 'yyyy.MM.dd')}">2025.11.02</span>
|
|
</div>
|
|
<div class="inquiry-response-body" id="responseDetail" th:utext="${inquiry.responseDetail}">
|
|
답변 내용이 여기에 표시됩니다.
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Comment Section (DJBank Custom DJPGPT0002) -->
|
|
<th:block th:replace="~{apps/community/djb/fragments-inquiry-comments :: commentSection(${inquiry}, ${commentWritable})}"></th:block>
|
|
|
|
<!-- Action Buttons -->
|
|
<div class="inquiry-detail-actions">
|
|
<div class="actions-left">
|
|
<button type="button" class="btn-inquiry-list" th:onclick="|location.href='@{/inquiry}'|">목록</button>
|
|
</div>
|
|
<div class="actions-right" th:if="${inquiry.inquiryStatus == 'PENDING' && inquiry.inquirer.id == #authentication.principal.id}">
|
|
<form id="deleteForm" th:action="@{/inquiry/{id}/delete(id=${inquiry.id})}" method="post" style="display: none;"></form>
|
|
<button type="button" class="btn-inquiry-edit" th:onclick="|location.href='@{/inquiry/edit(id=${inquiry.id})}'|">수정</button>
|
|
<button type="button" class="btn-inquiry-delete" onclick="confirmDelete()">삭제</button>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</section>
|
|
|
|
</body>
|
|
|
|
<th:block layout:fragment="contentScript">
|
|
<script th:inline="javascript">
|
|
$(document).ready(function() {
|
|
var successMsg = [[${success}]];
|
|
if (successMsg) {
|
|
customPopups.showAlert(successMsg);
|
|
}
|
|
});
|
|
</script>
|
|
|
|
<script>
|
|
function decodeHTMLEntities(text) {
|
|
var textArea = document.createElement('textarea');
|
|
textArea.innerHTML = text;
|
|
return textArea.value;
|
|
}
|
|
|
|
function confirmDelete() {
|
|
customPopups.showConfirm('문의글을 삭제하시겠습니까?', function(result) {
|
|
if (result) {
|
|
document.getElementById('deleteForm').submit();
|
|
}
|
|
});
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
var inquiryElement = document.getElementById('inquiryDetail');
|
|
if (inquiryElement) {
|
|
inquiryElement.innerHTML = decodeHTMLEntities(inquiryElement.innerHTML);
|
|
}
|
|
|
|
var responseElement = document.getElementById('responseDetail');
|
|
if (responseElement) {
|
|
responseElement.innerHTML = decodeHTMLEntities(responseElement.innerHTML);
|
|
}
|
|
});
|
|
</script>
|
|
<script th:src="@{/js/djb/inquiry-comments.js}"></script>
|
|
<script th:src="@{/js/djb/inquiry-view.js}"></script>
|
|
</th:block>
|
|
|
|
</html>
|