퍼블 업뎃

thkim
Lim\jun 2024-07-04 09:37:05 +09:00
parent 86dc19ceaf
commit ccd190f511
4 changed files with 84 additions and 49 deletions

View File

@ -84,6 +84,7 @@ button {cursor: pointer;}
.mw_400 {max-width: 400px;}
.mw_450 {max-width: 450px;}
.h_10 {height: 10px;}
.h_20 {height: 20px;}
.h_25 {height: 25px;}
.h_30 {height: 30px;}
@ -119,5 +120,5 @@ button {cursor: pointer;}
.text-224 {color: #22498E !important;}
.clickable{cursor: pointer;}
.cursor{cursor: pointer;}
/*.MuiTab-root.Mui-selected { color: #22498E; }*/

View File

@ -647,7 +647,7 @@
.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;}
.viewerDiv{height: calc(100vh - 190px); overflow-y: auto;}
.viewerDiv{height: calc(100vh - 153px); overflow-y: auto;}
.openDoc{background-color: bisque;}
.docLink{color: black;background-color: palegreen}
.docLink:hover{cursor: pointer}
@ -671,7 +671,10 @@
.modalDocInfoActive{filter: grayscale(0%);}
.docInfoRow > div{--bs-gutter-x: 0.5rem;}
.bookmarkModalHeader{--bs-modal-title-line-height:1;}
.optionBtn{--bs-btn-padding-y: 0.1rem;--bs-btn-padding-x: 0.25rem;--bs-btn-font-size: 0.7rem; margin-right: 7px;}
.optionBtn{--bs-btn-padding-y: 0.15rem;--bs-btn-padding-x: 0.25rem;--bs-btn-font-size: 0.7rem; margin-right: 7px;}
.detailInfoDiv {position: relative;}
.datailcollapse {position: absolute; top: 0; left: 0; margin-top: 200px; margin-left: 0;}
.datailcollapse img {position: fixed;}
/* 건설기준코드 안내*/

View File

@ -1,5 +1,5 @@
import React, { useState, useEffect, useCallback } from 'react';
import { useLocation, useParams } from 'react-router-dom';
import { useLocation, useParams, Link } from 'react-router-dom';
import Loading from 'components/Loading'
import BookmarkModal from './BookmarkModal';
import {VwDiv, VwPtag} from './Vw.style'
@ -31,8 +31,7 @@ function CodeViewer(props) {
const [show, setShow] = useState(false);
const [bookMarkModal, setBookMarkModal] = useState();
const [colList, setColList] = useState([3,2,7]);
const [colList, setColList] = useState([3,7,2]);
const sessionUser = parseJwt(getLocalItem('accessToken'));
const sessionUserSe = sessionUser?.userSe;
@ -71,9 +70,9 @@ function CodeViewer(props) {
if(docInfo.length>0){
let optionTag = [];
let activeIndex = 0;
let docTitle = "";
let docFileGrpId = "";
let rvsnFileGrpId = "";
let docTitle = "";
if(ymd===undefined){
activeIndex = docInfo.length-1
docTitle = docInfo[docInfo.length-1].doc_nm
@ -94,8 +93,8 @@ function CodeViewer(props) {
buttonClass += "btn-primary "
}
if(index === activeIndex){
buttonClass += "docInfoActive"
pClass += "yearInfoActive"
buttonClass += "docInfoActive "
pClass += "yearInfoActive "
docFileGrpId = item.doc_file_grp_id;
rvsnFileGrpId = item.rvsn_file_grp_id;
}
@ -108,25 +107,51 @@ function CodeViewer(props) {
onClick={docInfoSelectorChange}
data-ymd={item.rvsn_ymd}
data-doccode={item.kcsc_cd}
data-docinfoseq={item.doc_info_seq}/>
<br/>
<p className={pClass}>{item.doc_yr}</p>
data-docinfoseq={item.doc_info_seq} />
{/*<div onClick={docInfoSelectorChange} value={item.doc_er==='E'?'제':'개'} data-ymd={item.rvsn_ymd} data-doccode={item.kcsc_cd} data-docinfoseq={item.doc_info_seq}>*/}
{/* <img*/}
{/* src={item.doc_er === 'E' ? '/assets/images/je.png' : '/assets/images/ge.png'}*/}
{/* alt={item.rvsn_ymd}*/}
{/* className={"h_20"}*/}
{/* />*/}
<br/>
<p className={pClass}>{item.doc_yr}</p>
{/*</Button>*/}
</Col>)
})
headTag.push(
<>
<Col xs={"auto"}>
<Row className="docInfoRow">
<Col className="docInfoTitle">{docCode} {docTitle}</Col>
{optionTag}
<Col xs={3} className={"d-flex align-items-center fw-bold"}>{docCode} {docTitle}</Col>
<Col xs={9}>
<Row className="justify-content-between">
<Col xs={"auto"}>
<Row>
<Col xs={"auto"}>
<Row className="docInfoRow">
{/*<Col className="docInfoTitle">{docCode} {docTitle}</Col>*/}
{optionTag}
</Row>
</Col>
<Col className={"d-flex align-items-center"}>
<Button type="button" variant={"22498E"} className="optionBtn w_75 h_30" >연혁</Button>
<Button type="button" variant={"22498E"} className="optionBtn w_75 h_30" >2단비교</Button>
{rvsnFileGrpId?<Button type="button" variant={"22498E"} className="optionBtn w_75 h_30" onClick={()=>{File.download(rvsnFileGrpId)}} >신구조문</Button>:''}
{docFileGrpId?<Button type="button" variant={"22498E"} className="optionBtn w_75 h_30" onClick={()=>{File.standardCode(docFileGrpId)}} >첨부파일</Button>:''}
<Button type="button" variant={"22498E"} className="optionBtn w_75 h_30" >인용(3)</Button>
<Button type="button" variant={"22498E"} className="optionBtn w_75 h_30" >피인용(5)</Button>
<Button type="button" variant={"22498E"} className="optionBtn w_75 h_30" >인쇄</Button>
</Col>
</Row>
</Col>
<Col xs={"auto"}>
<InputGroup>
<Form.Control type="text" size={"sm"} placeholder={"문서 내 검색"} className={"me-2 rounded-1"}/>
{errorSelector}
<Button type={"button"} variant={"outline-22498E"} className={"px-3 rounded-1 btn-sm"} ><img src={"/assets/images/menu.png"} className={"h_10 mt-1"} /> 목차 닫기</Button>
</InputGroup>
</Col>
</Row>
</Col>
<Col>
<input type="button" className="btn btn-sm btn-primary optionBtn" value="연혁"/>
<input type="button" className="btn btn-sm btn-primary optionBtn" value="2단비교"/>
{rvsnFileGrpId?<input type="button" className="btn btn-sm btn-primary optionBtn" value="신구조문" onClick={()=>{File.download(rvsnFileGrpId)}}/>:''}
{docFileGrpId?<input type="button" className="btn btn-sm btn-primary optionBtn" value="첨부파일" onClick={()=>{File.standardCode(docFileGrpId)}}/>:''}
</Col>
</>
)
}else{
@ -262,7 +287,7 @@ function CodeViewer(props) {
setDocSummary(summaryTag);
setDocDetail(detailTag);
if(optionTag.length>0){
errorTag.push(<Form.Select size="sm" onChange={errorSelectorChange}><option value="">선택</option>{optionTag}</Form.Select>)
errorTag.push(<Form.Select size="sm" onChange={errorSelectorChange} className={"me-2 rounded-1"}><option value="">선택</option>{optionTag}</Form.Select>)
setErrorSelector(errorTag);
}
setDocLoading(false);
@ -403,9 +428,9 @@ function CodeViewer(props) {
}
function treeControl(){
if(colList[0]===3){
setColList([0,3,9]);
setColList([0,10,2]);
}else{
setColList([3,2,7]);
setColList([3,7,2]);
}
}
@ -422,38 +447,44 @@ function CodeViewer(props) {
<Loading loadingState={treeLoading || docLoading}/>
<Row className={`mx-0 ${treeLoading || docLoading?'d-none':''}`}>
<Col xs={12} className="border-bottom">
<Row>
<Col xs={3}></Col>
<Col xs={9}>
<Row className="justify-content-between">
<Col xs={"auto"}>
<Row>
<Row className={"pt-1"}>
{/*<Col xs={3}></Col>*/}
{/*<Col xs={9}>*/}
{/* <Row className="justify-content-between">*/}
{/* <Col xs={"auto"}>*/}
{/* <Row>*/}
{docInfo}
</Row>
</Col>
<Col xs={"auto"}>
<InputGroup>
<Form.Control type="text" size={"sm"} placeholder={"문서 내 검색"}/>
{errorSelector}
</InputGroup>
</Col>
</Row>
</Col>
{/* </Row>*/}
{/* </Col>*/}
{/* <Col xs={"auto"}>*/}
{/* <InputGroup>*/}
{/* <Form.Control type="text" size={"sm"} placeholder={"문서 내 검색"}/>*/}
{/* {errorSelector}*/}
{/* </InputGroup>*/}
{/* </Col>*/}
{/* </Row>*/}
{/*</Col>*/}
</Row>
</Col>
<Col xs={colList[0]} className={`border-end viewerDiv ${colList[0]===3?'':'d-none'}`}>
{/*{codeTree}*/}
<ViewerTree docCode={docCode} updateDocCode={updateDocCode} setTreeLoading={setTreeLoading}/>
</Col>
<Col xs={colList[1]} className="border-end viewerDiv">
<div>
<Button size={"sm"} variant={"outline-secondary"} onClick={treeControl}>{colList[0]===3?'트리 접기':'트리 펼치기'}</Button>
<Col xs={colList[1]} className="viewerDiv detailInfoDiv" ref={actionAppend}>
<div className={"datailcollapse"}>
{/*<Button size={"sm"} variant={"outline-secondary"} onClick={treeControl}>{colList[0]===3?'트리 접기':'트리 펼치기'}</Button>*/}
<img
src={colList[0]===3 ? "/assets/images/close.png" : "/assets/images/open.png"}
alt={colList[0]===3 ? "접기" : "열기"}
onClick={treeControl}
className={"cursor"}
/>
</div>
{docSummary}
</Col>
<Col xs={colList[2]} className="viewerDiv detailInfoDiv" ref={actionAppend}>
{docDetail}
</Col>
<Col xs={colList[2]} className="border-end viewerDiv">
{docSummary}
</Col>
</Row>
<Modal show={show} onHide={handleClose} size="xl" keyboard={false} scrollable>
{bookMarkModal}

View File

@ -67,7 +67,7 @@ export function CodeTree({docCode, setdoccodandname}) {
//TODO
export function CodeCotentData({docCode}) {
const [codeChapter, setcodeChapter] = useState([]);
const [codeContent, setcodeContetn] = useState([]);
const [codeContent, setcodeContent] = useState([]);
let result =[];
const getCodeDetail = (docCode) => {
EgovNet.requestFetch(
@ -98,7 +98,7 @@ export function CodeCotentData({docCode}) {
</VwDiv>
)
}))
setcodeContetn(result.map(item =>{
setcodeContent(result.map(item =>{
const isTitle = item.full_content.includes(item.group_title);
const docLinkReg = /([A-Z]{3,5}(\s[0-9]{2}){3,4})/g
const docPartReg = /\((?:표|그림|부록)?\s*([A-Z]\.)?(?!\d\))\d+(\.\d+)*(\s?\(\d\))?(-\d+)?(?:\s*[A-Z])?\)/g