문단 내용 보기 기능 추가.

cks
강석 최 2023-10-24 11:06:12 +09:00
parent a146c34e4d
commit fab5847f95
5 changed files with 60 additions and 33 deletions

View File

@ -10,7 +10,7 @@ import java.util.List;
public interface TnDocumentContentRepository extends JpaRepository<TnDocumentContent, Integer> { public interface TnDocumentContentRepository extends JpaRepository<TnDocumentContent, Integer> {
@Query(value = "select * from get_recent_full_context_by_content(:docCode, :contentPoint)", nativeQuery = true) @Query(value = "select * from get_recent_full_context_by_content(:docCode, :docPart)", nativeQuery = true)
public List<StandardCodeContentInterface> getRecentFullContextByContent(String docCode, String contentPoint); public List<StandardCodeContentInterface> getRecentFullContextByContent(String docCode, String docPart);
} }

View File

@ -19,6 +19,6 @@ public class StandardCodeService {
} }
public List<StandardCodeContentInterface> selectStandardCodeDocument(StandardCodeVO param) { public List<StandardCodeContentInterface> selectStandardCodeDocument(StandardCodeVO param) {
return tnDocumentContentRepository.getRecentFullContextByContent(param.getDocCode(), param.getContentPoint()); return tnDocumentContentRepository.getRecentFullContextByContent(param.getDocCode(), param.getDocPart());
} }
} }

View File

@ -7,5 +7,5 @@ import lombok.Setter;
@Setter @Setter
public class StandardCodeVO { public class StandardCodeVO {
private String docCode; private String docCode;
private String contentPoint; private String docPart;
} }

View File

@ -1,27 +1,50 @@
import { React, useState } from "react"; import {React, useCallback, useEffect, useState} from "react";
import Modal from "react-bootstrap/Modal"; import Modal from "react-bootstrap/Modal";
import Button from "react-bootstrap/Button";
import * as EgovNet from "../../api/egovFetch"; import * as EgovNet from "../../api/egovFetch";
import {VwDiv} from "./Sb.style";
const BookmarkModal = ({state, docCode, docPart}) => { const BookmarkModal = ({docCode, docPart}) => {
const [show, setShow] = useState(state);
const [modalTitle, setModalTitle] = useState(); const [modalTitle, setModalTitle] = useState();
const [modalBody, setModalBody] = useState(); const [modalBody, setModalBody] = useState();
const handleClose = () => setShow(false);
const handleShow = () => setShow(true); const getModalContent = useCallback(() => {
/*EgovNet.requestFetch( EgovNet.requestFetch(
"", '/standardCode/getCodeDetailInfo.do',
"", {
(resp) => { method: "POST",
setModalTitle(); headers: {
setModalBody(); 'Content-type': 'application/json'
}, },
(resp) => { body: JSON.stringify({
console.log("err response : ", resp); docCode: docCode,
} docPart: docPart
);*/ })
},
(resp) => {
setModalTitle(docCode + " " + docPart);
let bodyTag = []
if(resp.result.document.length>0){
resp.result.document.forEach(function (item, index){
const isTitle = item.full_content.includes(item.group_title);
bodyTag.push(
<VwDiv depth={item.cont_level} isTitle={isTitle} id={item.cont_type_cd} dangerouslySetInnerHTML={ {__html: item.full_content} }></VwDiv>
)
})
}
setModalBody(bodyTag);
},
(resp) => {
console.log("err response : ", resp);
}
);
})
useEffect(() => {
getModalContent();
}, []);
return ( return (
<Modal show={show} onHide={handleClose} size="xl" backdrop="static" keyboard={false}> <>
<Modal.Header closeButton> <Modal.Header closeButton>
<Modal.Title> <Modal.Title>
{modalTitle} {modalTitle}
@ -30,12 +53,7 @@ const BookmarkModal = ({state, docCode, docPart}) => {
<Modal.Body> <Modal.Body>
{modalBody} {modalBody}
</Modal.Body> </Modal.Body>
<Modal.Footer> </>
<Button variant="secondary" onClick={handleClose}>
Close
</Button>
</Modal.Footer>
</Modal>
); );
} }
export default BookmarkModal export default BookmarkModal

View File

@ -5,6 +5,7 @@ import BookmarkModal from './BookmarkModal';
import {SbContainer, VwDiv, VwPtag} from './Sb.style' import {SbContainer, VwDiv, VwPtag} from './Sb.style'
import Row from 'react-bootstrap/Row'; import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col'; import Col from 'react-bootstrap/Col';
import Modal from 'react-bootstrap/Modal';
import * as EgovNet from 'api/egovFetch'; import * as EgovNet from 'api/egovFetch';
function CodeViewer(props) { function CodeViewer(props) {
@ -15,9 +16,12 @@ function CodeViewer(props) {
const [docSummary, setDocSummary] = useState(); const [docSummary, setDocSummary] = useState();
const [docDetail, setDocDetail] = useState(); const [docDetail, setDocDetail] = useState();
const [show, setShow] = useState(false);
const [bookMarkModal, setBookMarkModal] = useState(); const [bookMarkModal, setBookMarkModal] = useState();
const handleClose = () => setShow(false);
const handleShow = () => setShow(true);
console.group("viewer"); console.group("viewer");
console.log("[Start] viewer ------------------------------"); console.log("[Start] viewer ------------------------------");
console.log("viewer [props] : ", props); console.log("viewer [props] : ", props);
@ -118,8 +122,9 @@ function CodeViewer(props) {
const docPartMap = new Map(); const docPartMap = new Map();
for(let i=0; i<docPartAry.length; i++) { for(let i=0; i<docPartAry.length; i++) {
const docPart = docPartAry[i]; const docPart = docPartAry[i];
const docCode = item.full_content.substring(item.full_content.indexOf(docPart)-30).match(docLinkReg)[0];
docPartMap.set(docPart, docPart + docPartMap.set(docPart, docPart +
'<key class="bookmark" data-doccode="'+docCode+'" data-docpart="'+docPart+'">'+ '<key class="bookmark" data-doccode="'+docCode+'" data-docpart="'+docPart.replace('(', '').replace(')', '')+'">'+
'<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 16 16" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M2 4a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v11.5a.5.5 0 0 1-.777.416L7 13.101l-4.223 2.815A.5.5 0 0 1 2 15.5V4z"></path><path d="M4.268 1A2 2 0 0 1 6 0h6a2 2 0 0 1 2 2v11.5a.5.5 0 0 1-.777.416L13 13.768V2a1 1 0 0 0-1-1H4.268z"></path></svg>'+ '<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 16 16" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M2 4a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v11.5a.5.5 0 0 1-.777.416L7 13.101l-4.223 2.815A.5.5 0 0 1 2 15.5V4z"></path><path d="M4.268 1A2 2 0 0 1 6 0h6a2 2 0 0 1 2 2v11.5a.5.5 0 0 1-.777.416L13 13.768V2a1 1 0 0 0-1-1H4.268z"></path></svg>'+
'</key>'); '</key>');
} }
@ -158,8 +163,10 @@ function CodeViewer(props) {
}else{ }else{
const bookmarkList = el.getElementsByClassName("bookmark") const bookmarkList = el.getElementsByClassName("bookmark")
for(let bookmark of bookmarkList){ for(let bookmark of bookmarkList){
bookmark.onclick = () => { bookmark.onclick = (e) => {
setBookMarkModal(<BookmarkModal state="true"/>)/*docCode={} docPart={}*/ handleShow();
const params = e.currentTarget.dataset
setBookMarkModal(<BookmarkModal docCode={params.doccode} docPart={params.docpart}/>)
} }
} }
} }
@ -191,7 +198,9 @@ function CodeViewer(props) {
{docDetail} {docDetail}
</Col> </Col>
</Row> </Row>
{bookMarkModal} <Modal show={show} onHide={handleClose} size="xl" backdrop="static" keyboard={false}>
{bookMarkModal}
</Modal>
</> </>
); );
} }