diff --git a/egovframe-template-simple-backend-contribution/src/main/java/egovframework/dbnt/kcsc/standardCode/StandardCodeController.java b/egovframe-template-simple-backend-contribution/src/main/java/egovframework/dbnt/kcsc/standardCode/StandardCodeController.java index ac82400..4a55081 100644 --- a/egovframe-template-simple-backend-contribution/src/main/java/egovframework/dbnt/kcsc/standardCode/StandardCodeController.java +++ b/egovframe-template-simple-backend-contribution/src/main/java/egovframework/dbnt/kcsc/standardCode/StandardCodeController.java @@ -213,6 +213,25 @@ public class StandardCodeController { private final StandardCodeService standardCodeService; + @Operation( + summary = "건설기준코드 트리 조회", + description = "건설기준코드 트리 조회", + tags = {"StandardCodeController"} + ) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "조회 성공"), + @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님") + }) + @PostMapping(value = "/getCodeTree.do", consumes = MediaType.APPLICATION_JSON_VALUE) + public ResultVO getCodeTree(@RequestBody StandardCodeVO param, @AuthenticationPrincipal LoginVO user) + throws Exception { + ResultVO resultVO = new ResultVO(); + Map resultMap = new HashMap<>(); + resultMap.put("codeTree", standardCodeService.selectStandardCodeTree()); + resultVO.setResult(resultMap); + return resultVO; + } + @Operation( summary = "건설기준코드 내용 조회", description = "건설기준코드 내용 조회", @@ -222,12 +241,11 @@ public class StandardCodeController { @ApiResponse(responseCode = "200", description = "조회 성공"), @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님") }) - @PostMapping(value = "/viewer.do", consumes = MediaType.APPLICATION_JSON_VALUE) - public ResultVO selectStandardCode(@RequestBody StandardCodeVO param, @AuthenticationPrincipal LoginVO user) + @PostMapping(value = "/getCodeDetailInfo.do", consumes = MediaType.APPLICATION_JSON_VALUE) + public ResultVO getCodeDetailInfo(@RequestBody StandardCodeVO param, @AuthenticationPrincipal LoginVO user) throws Exception { ResultVO resultVO = new ResultVO(); Map resultMap = new HashMap<>(); - resultMap.put("codeTree", standardCodeService.selectStandardCodeTree()); resultMap.put("document", standardCodeService.selectStandardCodeDocument(param)); resultVO.setResult(resultMap); return resultVO; diff --git a/egovframe-template-simple-react-contribution/src/constants/url.js b/egovframe-template-simple-react-contribution/src/constants/url.js index c09e94a..0bc39ad 100644 --- a/egovframe-template-simple-react-contribution/src/constants/url.js +++ b/egovframe-template-simple-react-contribution/src/constants/url.js @@ -77,7 +77,7 @@ const URL = { //기준코드 STANDARD_CODE_LIST : "/standardCode/list", //건설기준코드/리스트 - STANDARD_CODE_VIEWER : "/standardCode/viewer/:docCode", //건설기준코드/뷰어 + STANDARD_CODE_VIEWER : "/standardCode/viewer", //건설기준코드/뷰어 } export default URL; \ No newline at end of file diff --git a/egovframe-template-simple-react-contribution/src/css/page.css b/egovframe-template-simple-react-contribution/src/css/page.css index 9c6d78d..f06b3be 100644 --- a/egovframe-template-simple-react-contribution/src/css/page.css +++ b/egovframe-template-simple-react-contribution/src/css/page.css @@ -304,4 +304,6 @@ .calendar_info ul li {position: relative; padding: 15px 180px 15px 30px; border-bottom: 1px solid #c8d0d5; color: #222;} .calendar_info ul li::before {content: ""; display: block; position: absolute; left: 20px; top: 27px; width: 2px; height: 2px; background: #222;} .calendar_info ul li a {color: #222; font-size: 16px; font-weight: 300;} - .calendar_info ul li span {position: absolute; right: 15px; top: 15px; color: #808080; font-size: 16px; font-weight: 300;} \ No newline at end of file + .calendar_info ul li span {position: absolute; right: 15px; top: 15px; color: #808080; font-size: 16px; font-weight: 300;} + + .viewerDiv{max-height: 650px; overflow-y: auto;} \ No newline at end of file diff --git a/egovframe-template-simple-react-contribution/src/pages/standardCode/SbItem.js b/egovframe-template-simple-react-contribution/src/pages/standardCode/SbItem.js index 105bd4f..9ee1c4b 100644 --- a/egovframe-template-simple-react-contribution/src/pages/standardCode/SbItem.js +++ b/egovframe-template-simple-react-contribution/src/pages/standardCode/SbItem.js @@ -1,12 +1,11 @@ import {React, useState} from 'react' -import { useNavigate } from 'react-router-dom'; -import {SbTitle, SbSub, SbLink} from './Sb.style' +import {SbTitle, SbSub} from './Sb.style' import { FcFolder, FcOpenedFolder, FcFile } from 'react-icons/fc' import { AiOutlinePlusSquare, AiOutlineMinusSquare } from 'react-icons/ai' -const SbItem = ({ item }) => { +const SbItem = ({item, updateDocCode}) => { + const [collapsed, setCollapsed] = useState(false); - const navigate = useNavigate(); function toggleCollapse() { setCollapsed(prevValue => !prevValue); } @@ -19,7 +18,7 @@ const SbItem = ({ item }) => { {icon1}{icon2} {(item.doc_level === 1?'':item.doc_code)+' '+item.doc_code_name} {item.childrens.map((child) => ( - + ))} @@ -28,14 +27,9 @@ const SbItem = ({ item }) => { const icon = ; return ( - {/*{ - navigate('/standardCode/viewer', { - state:{ - docCode: item.doc_code - } - }) - }}>{icon} {(item.doc_level === 1?'':item.doc_code)+' '+item.doc_code_name}*/} - {icon} {(item.doc_level === 1?'':item.doc_code)+' '+item.doc_code_name} + { + updateDocCode(item.doc_code, item.doc_code_name) + }}>{icon} {(item.doc_level === 1?'':item.doc_code)+' '+item.doc_code_name} ) } diff --git a/egovframe-template-simple-react-contribution/src/pages/standardCode/viewer.js b/egovframe-template-simple-react-contribution/src/pages/standardCode/viewer.js index 424fd01..5d09c90 100644 --- a/egovframe-template-simple-react-contribution/src/pages/standardCode/viewer.js +++ b/egovframe-template-simple-react-contribution/src/pages/standardCode/viewer.js @@ -1,5 +1,5 @@ import React, { useState, useEffect, useCallback } from 'react'; -import { useLocation, useParams } from 'react-router-dom'; +import { useLocation } from 'react-router-dom'; import SbItem from './SbItem' import {SbContainer} from './Sb.style' import Row from 'react-bootstrap/Row'; @@ -7,8 +7,8 @@ import Col from 'react-bootstrap/Col'; import * as EgovNet from 'api/egovFetch'; function CodeViewer(props) { - - const [{docCode}, setDocCode] = useState(useParams()); + const [docCode, setDocCode] = useState(props.docCode); + const [docName, setDocName] = useState(props.docName); const [codeTree, setCodeTree] = useState(); const [docSummary, setDocSummary] = useState(); const [docDetail, setDocDetail] = useState(); @@ -21,21 +21,23 @@ function CodeViewer(props) { console.log("viewer [docCode] : ", docCode); - const retrieveList = useCallback(() => { - console.groupCollapsed("EgovMain.retrieveList()"); - const retrieveListURL = '/standardCode/viewer.do'; - const requestOptions = { - method: "POST", - headers: { - 'Content-type': 'application/json' - }, - body: JSON.stringify({ - docCode: docCode - }) - } - EgovNet.requestFetch(retrieveListURL, - requestOptions, + const updateDocCode = useCallback((docCode, docName)=>{ + setDocCode(docCode); + setDocName(docName); + getCodeDetailInfo(docCode); + }) + + const getCodeTree = useCallback(()=>{ + EgovNet.requestFetch( + '/standardCode/getCodeTree.do', + { + method: "POST", + headers: { + 'Content-type': 'application/json' + }, + body: JSON.stringify({}) + }, (resp) => { const menuData = resp.result.codeTree; // 코드 목록 트리 구성 @@ -48,8 +50,8 @@ function CodeViewer(props) { if(tree.length>0){ treeTag.push( - {tree.map((subItem, index) => - + {tree.map((subItem) => + )} ) @@ -57,18 +59,42 @@ function CodeViewer(props) { treeTag.push(
검색된 결과가 없습니다.
); // 코드 목록 초기값 } setCodeTree(treeTag); + }, + function (resp) { + console.log("err response : ", resp); + } + ); + }) + const getCodeDetailInfo = useCallback((docCode) => { + console.groupCollapsed("EgovMain.getCodeDetailInfo()"); + EgovNet.requestFetch( + '/standardCode/getCodeDetailInfo.do', + { + method: "POST", + headers: { + 'Content-type': 'application/json' + }, + body: JSON.stringify({ + docCode: docCode + }) + }, + (resp) => { // 목차 구성 let summaryTag = []; // 문서 전문 구성 let detailTag = []; if(resp.result.document.length>0){ resp.result.document.forEach(function (item, index){ - summaryTag.push( -
{item.group_title}
- ) + if(item.full_content.includes(item.group_title)){ + summaryTag.push( +

{ + document.location.hash="#"+item.cont_type_cd; + }}>{item.group_title}

+ ) + } detailTag.push( -
+
) }) }else{ @@ -81,25 +107,34 @@ function CodeViewer(props) { console.log("err response : ", resp); } ); - console.groupEnd("EgovMain.retrieveList()"); + console.groupEnd("EgovMain.getCodeDetailInfo()"); },[]); useEffect(() => { - retrieveList(); - }, [retrieveList]); + getCodeDetailInfo(); + }, []); + useEffect(() => { + getCodeTree(); + }, []); console.log("------------------------------viewer [End]"); console.groupEnd("viewer"); return ( - + + + + {docCode} {docName} + + + {codeTree} - + {docSummary} - + {docDetail}