Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim

thkim
thkim 2024-06-11 13:12:15 +09:00
commit dee9fe01f4
175 changed files with 5662 additions and 1393 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 515 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1020 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 992 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1007 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 587 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 459 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -1,9 +1,12 @@
<!DOCTYPE html>
<html>
<head>
<title>React App</title>
<!-- 아래 뷰포트 설정이 있어야 크롬 개발자도구에서 디바이스별로 반응형 미리보기가 가능하다.: 2023.04.13(목) 김일국 추가 -->
<meta name="viewport" content="width=device-width">
<title>국가건설기준센터(KCSC)</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="keywords" content="국가건설기준센터,설계기준,표준시방서,시방서,지반코드,구조코드,내진코드,가설코드,교량코드,터널코드,설비코드,조경코드,건축코드,도로코드,철도코드,하천코드,댐코드,상수도코드,하수도코드,항만코드,어항코드,농업기반코드">
<link rel="shortcut icon" href="assets/images/kcsc.ico">
</head>
<body>
<div id="root"></div>

View File

@ -56,8 +56,12 @@ export function requestFetch(url, requestOptions, handler, errorHandler) {
})
.then((resp) => {
if (Number(resp.resultCode) === Number(CODE.RCV_ERROR_AUTH)) {
alert("로그인이 해제되었습니다.")
window.location.href = "/login"
if(url === "/auth/login"){
alert("로그인을 실패하였습니다.")
}else{
alert("로그인이 해제되었습니다.")
window.location.href = "/login"
}
}else{
return resp;
}

View File

@ -1,7 +1,13 @@
import React from 'react';
import { Link } from 'react-router-dom';
import React, { useState, useCallback } from 'react';
import {Link, NavLink} from 'react-router-dom';
import URL from "../constants/url";
import Collapse from 'react-bootstrap/Collapse'
function EgovFooter() {
const [toggle, setToggle] = useState(false);
const toggleFunc = useCallback(() => setToggle(!toggle), [toggle]);
if(window.location.pathname.includes("/standardCode/viewer")){
return null;
}else{
@ -9,34 +15,52 @@ function EgovFooter() {
<div className="footer">
<div className="upper">
<div className="row up">
<div className="col-2 left"><span>건설기준코드 <br />건설기준위원회 <br />정보제공 <br /></span>센터소개</div>
<div className="col-10 right"><span>건설기준코드 안내 | 건설기준코드 검색 | ()건설기준 검색<br />
진행현황 | 위원회 일정<br />
공지사항 | Q&A | 수요조사 | 주요행사 | 건설교육안내 | 기술자료 | 보도자료 | 관련사이트 | API서비스 | 영문기준 제공 | 건설기준용어 | 건설기준 연구 <br /></span>
인사말 | 연혁 | 홍보자료 | 주요업무 | 찾아오시는길
<div className="left"><Collapse in={toggle}><span id="collapseLeft">건설기준코드 <br />건설기준위원회 <br />정보제공 <br /></span></Collapse>센터소개</div>
<div className="col-auto right">
<Collapse in={toggle}>
<span id="collapseRight">
<NavLink to={URL.STANDARD_CODE_INFO}>건설기준코드 안내</NavLink>
<NavLink to={URL.STANDARD_CODE_LIST}>건설기준코드 검색</NavLink>
<NavLink to={URL.STANDARD_CODE_OLD}>()건설기준 검색</NavLink>
<NavLink to={URL.SUPPORT_LIST_NOCODE+'/KCKC-INV'}>건설기준고시</NavLink>
<NavLink to={URL.STANDARD_CODE_ENG}>영문건설기준</NavLink>
<NavLink to={URL.STANDARD_CODE_TERM}>건설기준용어</NavLink><br />
<NavLink to={URL.COMMITTEE_PROGRESS}>진행현황</NavLink>
<NavLink to={URL.COMMITTEE_SCHEDULE}>위원회 일정</NavLink><br />
<NavLink to={URL.SUPPORT_LIST_NOCODE+'/KCSC-NTC'}>공지사항</NavLink>
<NavLink to={URL.SUPPORT_QNA}>Q&A</NavLink>
<NavLink to={URL.SUPPORT_LIST_NOCODE+'/KCKC-INV'}>수요조사</NavLink>
<NavLink to={URL.SUPPORT_LIST_NOCODE+'/KCSC-EVT'}>주요행사</NavLink>
{/*<NavLink to={URL.SUPPORT_LIST_NOCODE+'/KCSC-EDU'}>건설교육안내</NavLink>*/}
<NavLink to={URL.SUPPORT_LIST_NOCODE+'/KCSC-TEC'}>기술자료</NavLink>
<NavLink to={URL.SUPPORT_LIST_NOCODE+'/KCSC-NWS'}>보도자료</NavLink>
<NavLink to={URL.SUPPORT_RESEARCH}>건설기준 연구</NavLink>
<NavLink to={URL.SUPPORT_SITE}>관련사이트</NavLink>
<NavLink to={URL.SUPPORT_API}>API서비스</NavLink>
<NavLink to={URL.SUPPORT_POLL}>설문조사</NavLink><br />
</span>
</Collapse>
<NavLink to={URL.ABOUT_SITE}>인사말</NavLink>
<NavLink to={URL.ABOUT_HISTORY}>연혁</NavLink>
<NavLink to={URL.ABOUT_PROMOTE}>홍보자료</NavLink>
<NavLink to={URL.ABOUT_ORGANIZATION}>주요업무</NavLink>
<NavLink to={URL.ABOUT_LOCATION}>찾아오시는길</NavLink>
<NavLink to={URL.ABOUT_SITEMAP}>SITEMAP</NavLink>
</div>
<div className="col open"><button type="button" className="btn" aria-expanded={toggle} aria-controls="collapseLeft collapseRight" onClick={toggleFunc}>{toggle ? '' : '∧'}</button></div>
</div>
</div>
<div className="inner">
<h1>
<img className="w" src="/assets/images/copy3.png" alt="" />
</h1>
<div className="info">
<div className="inner row">
<div className="col info">
<p>
상호명 : 한국건설기술연구원 <span className="m_hide">|</span> 대표자 : 김병석 | 대표메일 : kcsc@kict.re.kr<br />
사업자등록번호 : 229-82-01135 | 주소 : 경기도 고양시 일산서구 고양대로 283(대화동)
</p>
<p className="copy">Copyright © 2011 KOREA INSTITUTE of CIVIL ENGINEERING and BUILDING TECHNOLOGY. All Rights Reserved.</p>
</div>
<div className="right_col">
{/*<Link to="">*/}
{/* <img className="w" src="/assets/images/banner_w_01.png" alt="" />*/}
{/* <img className="m" src="/assets/images/banner_m_01.png" alt="" />*/}
{/*</Link>*/}
{/*<Link to="">*/}
{/* <img className="w" src="/assets/images/banner_w_02.png" alt="" />*/}
{/* <img className="m" src="/assets/images/banner_m_02.png" alt="" />*/}
{/*</Link>*/}
<div className="col-auto right_col">
<NavLink to={URL.PRIVATE}>개인정보처리방침</NavLink>
<NavLink to={URL.EMAIL}>이메일 무단수집거부</NavLink>
</div>
</div>
</div>

View File

@ -8,6 +8,8 @@ import CODE from 'constants/code';
import { getSessionItem, setSessionItem } from 'utils/storage';
import { getLocalItem, setLocalItem } from 'utils/storage';
import {parseJwt} from "../utils/parseJwt";
import Col from "react-bootstrap/Col";
import Row from "react-bootstrap/Row";
function EgovHeader({ loginUser, onChangeLogin }) {
console.group("EgovHeader");
@ -18,9 +20,15 @@ function EgovHeader({ loginUser, onChangeLogin }) {
const userInfo = parseJwt(accessToken);
const sessionUserId = userInfo?.id;
const sessionUserSe = userInfo?.userSe;
const sessionUserRole = userInfo?.userRole;
const navigate = useNavigate();
const [showMore, setShowMore] = useState(false);
const toggleShowMore = () => {
setShowMore(!showMore);
};
const logInHandler = () => { //
navigate(URL.LOGIN);
// PC Mobile : 2023.04.13()
@ -57,6 +65,13 @@ function EgovHeader({ loginUser, onChangeLogin }) {
);
}
const myHandler = () => { //
if (sessionUserId)
navigate(URL.MY);
else
navigate(URL.JOIN);
}
function allMenuControl(){
setMenuDiv(!menuDiv);
}
@ -73,27 +88,90 @@ function EgovHeader({ loginUser, onChangeLogin }) {
// <!-- header -->
<div className="header">
<div className="inner">
<h1 className="logo">
<Link to={URL.MAIN} className="w">
<div className="logotop"><img src="/assets/images/copy.png" alt="국가건설기준센터" /></div><img src="/assets/images/logo.png" alt="국가건설기준센터" /></Link>
<Link to={URL.MAIN} className="m"><img src="/assets/images/logo_m.png" alt="국가건설기준센터" /></Link>{/*<img src="/assets/images/logo_m.png" alt="국가건설기준센터" />*/}
</h1>
<div className="gnb">
<h2 className="blind">주메뉴</h2>
<ul>
<div className="row ">
<div className="w-100">
<form className="form-inline">
<div className="input-group w-75" style={{ border: "2px solid #1c488f", borderRadius: "20px", padding: "10px", width: "fit-content" }}>
<input type="text" className="form-control border-0" placeholder="검색어를 입력하세요." />
<div className="input-group-append">
<button type="button" className="topsearch"></button>
</div>
</div>
</form>
</div>
<div className="row logo w-100 justify-content-between pt-3">
<div className="col-3">
<Link to={URL.MAIN} className="w"><img src="/assets/images/logo.png" alt="국가건설기준센터" /></Link>
<Link to={URL.MAIN} className="m"><img src="/assets/images/logo_m.png" alt="국가건설기준센터" /></Link>
</div>
<div className="col-6 d-flex justify-content-center align-items-end"><img src="/assets/images/copy.png" alt="국가건설기준센터" className="align-self-end" /></div>
<div className="col-3 d-flex justify-content-end align-items-end">
<div className="col-1 person" onClick={myHandler}></div>
<div className="col-1 right_a" onClick={allMenuControl}>
<button type="button" className="btn btnAllMenu" title="전체메뉴 닫힘">전체메뉴</button>
<button type="button" className="btn mobile btnAllMenuM" title="전체메뉴 닫힘">전체메뉴</button>
</div>
</div>
</div>
<div className="search">
<div className="search_input">
<form className="row justify-content-between w-100 m-0">
<div className="col-2">
<select name="" className="form-select shadow-none">
<option value="">코드명</option>
<option value="">목차</option>
<option value="">본문</option>
</select>
</div>
<div className="col-10 d-flex justify-content-between">
<div className="col-11"><input type="text" className="form-control shadow-none" placeholder="검색어를 입력하세요." lang="ko" /></div>
<div className="col-1 text-center">
<button type="button" className="topsearch"></button>
</div>
</div>
</form>
</div>
</div>
<div className="topcode d-flex justify-content-center w-100">
<div className={showMore ? 'topcode_c justify-content-center' : 'topcode_n justify-content-center'}>
<Row className="">
<Col><a href="/standardCode/list/1010" title="공통코드" className={"topcodebnt"}>공통코드</a></Col>
<Col><a href="/standardCode/list/101011" title="지반코드" className={"topcodebnt"}>지반코드</a></Col>
<Col><a href="/standardCode/list/101014" title="구조코드" className={"topcodebnt"}>구조코드</a></Col>
<Col><a href="/standardCode/list/101017" title="내진코드" className={"topcodebnt"}>내진코드</a></Col>
<Col><a href="/standardCode/list/102021" title="가설코드" className={"topcodebnt"}>가설코드</a></Col>
<Col><a href="/standardCode/list/102024" title="교량코드" className={"topcodebnt"}>교량코드</a></Col>
<Col><a href="/standardCode/list/102027" title="터널코드" className={"topcodebnt"}>터널코드</a></Col>
<Col><a href="/standardCode/list/102029" title="공동구코드" className={"topcodebnt"}>공동구코드</a></Col>
<Col><a href="/standardCode/list/102031" title="설비코드" className={"topcodebnt"}>설비코드</a></Col>
<Col><Link onClick={toggleShowMore} title="..." className={"topcodebnt"}>{showMore ? (<b> </b>) : (<b> · · · </b>)}</Link></Col>
</Row>
{showMore && (
<Row className="">
<Col><a href="/standardCode/list/102034" title="조경코드" className="topcodebnt">조경코드</a></Col>
<Col><a href="/standardCode/list/102041" title="건축코드" className="topcodebnt">건축코드</a></Col>
<Col><a href="/standardCode/list/102044" title="도로코드" className="topcodebnt">도로코드</a></Col>
<Col><a href="/standardCode/list/102047" title="철도코드" className="topcodebnt">철도코드</a></Col>
<Col><a href="/standardCode/list/102051" title="하천코드" className="topcodebnt">하천코드</a></Col>
<Col><a href="/standardCode/list/102054" title="댐코드" className="topcodebnt">댐코드</a></Col>
<Col><a href="/standardCode/list/102057" title="상수도코드" className="topcodebnt">상수도코드</a></Col>
<Col><a href="/standardCode/list/102061" title="하수도코드" className="topcodebnt">하수도코드</a></Col>
<Col><a href="/standardCode/list/102067" title="농업기반코드" className="topcodebnt">농업기반코드</a></Col>
</Row>
)}
</div>
</div>
{/*<h1 className="logo">*/}
{/* <Link to={URL.MAIN} className="w">*/}
{/* <div className="logotop"><img src="/assets/images/copy.png" alt="국가건설기준센터" /></div><img src="/assets/images/logo.png" alt="국가건설기준센터" /></Link>*/}
{/* <Link to={URL.MAIN} className="m"><img src="/assets/images/logo_m.png" alt="국가건설기준센터" /></Link>/!*<img src="/assets/images/logo_m.png" alt="국가건설기준센터" />*!/*/}
{/*</h1>*/}
{/*<div className="gnb">*/}
{/* <h2 className="blind">주메뉴</h2>*/}
{/* <ul>*/}
{/*<div className="row ">*/}
{/* <div className="w-100">*/}
{/* <form className="form-inline">*/}
{/* <div className="input-group w-75" style={{ border: "2px solid #1c488f", borderRadius: "20px", padding: "10px", width: "fit-content" }}>*/}
{/* <input type="text" className="form-control border-0" placeholder="검색어를 입력하세요." />*/}
{/* <div className="input-group-append">*/}
{/* <button type="button" className="topsearch"></button>*/}
{/* </div>*/}
{/* </div>*/}
{/* </form>*/}
{/* </div>*/}
{/*</div>*/}
{/*<li><NavLink to={URL.STANDARD_CODE_INFO} className={({ isActive }) => (isActive ? "cur" : "")}>건설기준코드</NavLink></li>*/}
{/*/!*<li><NavLink to={URL.ABOUT} className={({ isActive }) => (isActive ? "cur" : "")}>사이트소개</NavLink></li>*!/*/}
{/*<li><NavLink to={URL.INTRO} className={({ isActive }) => (isActive ? "cur" : "")}>정보마당</NavLink></li>*/}
@ -102,92 +180,135 @@ function EgovHeader({ loginUser, onChangeLogin }) {
{/*{sessionUserSe ==='ACC_TP01' &&*/}
{/* <li><NavLink to={URL.ADMIN} className={({ isActive }) => (isActive ? "cur" : "")}>사이트관리</NavLink></li>*/}
{/*}*/}
</ul>
</div>
{/* </ul>*/}
{/*</div>*/}
{/* <!-- PC web에서 보여지는 영역 --> */}
<div className="user_info">
{/* 로그아웃 : 로그인 정보 있을때 */}
{sessionUserId &&
<>
<span className="person">{sessionUserId} </span> 님이, {sessionUserSe==='ACC_TP01'?'관리자':'사용자'} 로그인하셨습니다.
<button onClick={logOutHandler} className="btn">로그아웃</button>
</>
}
{/* 로그인 : 로그인 정보 없을 때 */}
{!sessionUserId &&
<button onClick={logInHandler} className="btn login">로그인</button>
}
</div>
{/*<div className="user_info">*/}
{/* /!* 로그아웃 : 로그인 정보 있을때 *!/*/}
{/* {sessionUserId &&*/}
{/* <>*/}
{/* {sessionUserId} {sessionUserRole==='ROLE_001' && '[최고관리]'}{sessionUserRole==='ROLE_002' && '[관리자]'} &nbsp;*/}
{/* <span className="person"> </span>*/}
{/* <button onClick={logOutHandler} className="btn">로그아웃</button>*/}
{/* </>*/}
{/* }*/}
{/* /!* 로그인 : 로그인 정보 없을 때 *!/*/}
{/* {!sessionUserId &&*/}
{/* <button onClick={logInHandler} className="btn login">로그인</button>*/}
{/* }*/}
{/*</div>*/}
{/* <!--// PC web에서 보여지는 영역 --> */}
{/* <!-- right area --> */}
<div className="right_a" onClick={allMenuControl}>
<button type="button" className="btn btnAllMenu" title="전체메뉴 닫힘">전체메뉴</button>
<button type="button" className="btn mobile btnAllMenuM" title="전체메뉴 닫힘">전체메뉴</button>
</div>
{/*<div className="right_a" onClick={allMenuControl}>*/}
{/* <button type="button" className="btn btnAllMenu" title="전체메뉴 닫힘">전체메뉴</button>*/}
{/* <button type="button" className="btn mobile btnAllMenuM" title="전체메뉴 닫힘">전체메뉴</button>*/}
{/*</div>*/}
</div>
{/* <!-- All menu : web --> */}
<div className={`all_menu WEB ${menuDiv?"open":"closed"}`}>
<h2 className="blind">전체메뉴</h2>
<div className="inner row">
<div className="col">
<div className="">
<h3>건설기준코드</h3>
<ul>
<li><NavLink to={URL.STANDARD_CODE_INFO} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>건설기준코드 안내</NavLink></li>
<li><NavLink to={URL.STANDARD_CODE_LIST} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>건설기준코드 검색</NavLink></li>
<li><NavLink to={URL.STANDARD_CODE_OLD} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>()건설기준검색</NavLink></li>
<li><NavLink to={URL.SUPPORT_LIST_NOCODE+'/KCSC-NOT'} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>건설기준고시</NavLink></li>
<li><NavLink to={URL.STANDARD_CODE_ENG} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>영문건설기준</NavLink></li>
<li><NavLink to={URL.STANDARD_CODE_TERM} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>건설기준용어</NavLink></li>
</ul>
</div>
{/*<div className="col">
<h3>사이트소개</h3>
<div className="">
<h3>건설기준위원회</h3>
<ul>
<li><NavLink to={URL.ABOUT_SITE} className={({ isActive }) => (isActive ? "cur" : "")}>소개</NavLink></li>
<li><NavLink to={URL.ABOUT_HISTORY} className={({ isActive }) => (isActive ? "cur" : "")}>연혁</NavLink></li>
<li><NavLink to={URL.ABOUT_ORGANIZATION} className={({ isActive }) => (isActive ? "cur" : "")}>조직소개</NavLink></li>
<li><NavLink to={URL.ABOUT_LOCATION} className={({ isActive }) => (isActive ? "cur" : "")}>찾아오시는 </NavLink></li>
<li><NavLink to={URL.COMMITTEE_PROGRESS} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>진행현황</NavLink></li>
<li><NavLink to={URL.COMMITTEE_SCHEDULE} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>위원회일정</NavLink></li>
</ul>
</div>*/}
</div>
<div className="">
<h3>정보제공</h3>
<ul>
<li><NavLink to={URL.SUPPORT_LIST_NOCODE+'/KCSC-NTC'} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>공지사항</NavLink></li>
<li><NavLink to={URL.SUPPORT_QNA} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>Q&A</NavLink></li>
<li><NavLink to={URL.SUPPORT_LIST_NOCODE+'/KCKC-INV'} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>수요조사</NavLink></li>
<li><NavLink to={URL.SUPPORT_LIST_NOCODE+'/KCSC-EVT'} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>주요행사</NavLink></li>
{/*<li><NavLink to={URL.SUPPORT_LIST_NOCODE+'/KCSC-EDU'} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>건설교육안내</NavLink></li>*/}
<li><NavLink to={URL.SUPPORT_LIST_NOCODE+'/KCSC-TEC'} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>기술자료</NavLink></li>
<li><NavLink to={URL.SUPPORT_LIST_NOCODE+'/KCSC-NWS'} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>보도자료</NavLink></li>
<li><NavLink to={URL.SUPPORT_RESEARCH} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>건설기준연구</NavLink></li>
<li><NavLink to={URL.SUPPORT_SITE} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>관련사이트</NavLink></li>
<li><NavLink to={URL.SUPPORT_API} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>API서비스</NavLink></li>
<li><NavLink to={URL.SUPPORT_POLL} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>설문조사</NavLink></li>
</ul>
</div>
<div className="">
<h3>센터소개</h3>
<ul>
<li><NavLink to={URL.ABOUT_SITE} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>인사말</NavLink></li>
<li><NavLink to={URL.ABOUT_HISTORY} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>연혁</NavLink></li>
<li><NavLink to={URL.ABOUT_PROMOTE} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>홍보자료</NavLink></li>
<li><NavLink to={URL.ABOUT_ORGANIZATION} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>주요업무</NavLink></li>
<li><NavLink to={URL.ABOUT_LOCATION} onClick={allMenuControl} className={({ isActive }) => (isActive ? "cur" : "")}>찾아오시는길</NavLink></li>
</ul>
</div>
<div className="col">
<h3>정보마당</h3>
<ul>
<li><NavLink to={URL.INTRO_WORKS} className={({ isActive }) => (isActive ? "cur" : "")}>주요사업 소개</NavLink></li>
<li><NavLink to={URL.INTRO_SERVICE} className={({ isActive }) => (isActive ? "cur" : "")}>대표서비스 소개</NavLink></li>
</ul>
</div>
<div className="col">
<h3>고객지원</h3>
<ul>
<li><NavLink to={URL.SUPPORT_DOWNLOAD} className={({ isActive }) => (isActive ? "cur" : "")}>자료실</NavLink></li>
<li><NavLink to={URL.SUPPORT_QNA} className={({ isActive }) => (isActive ? "cur" : "")}>묻고 답하기</NavLink></li>
<li><NavLink to={URL.SUPPORT_APPLY} className={({ isActive }) => (isActive ? "cur" : "")}>서비스 신청</NavLink></li>
</ul>
</div>
<div className="col">
<h3>알림마당</h3>
<ul>
<li><NavLink to={URL.INFORM_DAILY}>오늘의 행사</NavLink></li>
<li><NavLink to={URL.INFORM_WEEKLY} className={({ isActive }) => (isActive ? "cur" : "")}>금주의 행사</NavLink></li>
<li><NavLink to={URL.INFORM_NOTICE} className={({ isActive }) => (isActive ? "cur" : "")}>공지사항</NavLink></li>
<li><NavLink to={URL.INFORM_GALLERY} className={({ isActive }) => (isActive ? "cur" : "")}>사이트 갤러리</NavLink></li>
</ul>
</div>
{/*<div className="">*/}
{/* <h3>정보마당</h3>*/}
{/* <ul>*/}
{/* <li><NavLink to={URL.INTRO_WORKS} className={({ isActive }) => (isActive ? "cur" : "")}>주요사업 소개</NavLink></li>*/}
{/* <li><NavLink to={URL.INTRO_SERVICE} className={({ isActive }) => (isActive ? "cur" : "")}>대표서비스 소개</NavLink></li>*/}
{/* </ul>*/}
{/*</div>*/}
{/*<div className="">*/}
{/* <h3>고객지원</h3>*/}
{/* <ul>*/}
{/* <li><NavLink to={URL.SUPPORT_DOWNLOAD} className={({ isActive }) => (isActive ? "cur" : "")}>자료실</NavLink></li>*/}
{/* <li><NavLink to={URL.SUPPORT_QNA} className={({ isActive }) => (isActive ? "cur" : "")}>묻고 답하기</NavLink></li>*/}
{/* <li><NavLink to={URL.SUPPORT_APPLY} className={({ isActive }) => (isActive ? "cur" : "")}>서비스 신청</NavLink></li>*/}
{/* </ul>*/}
{/*</div>*/}
{/*<div className="">*/}
{/* <h3>알림마당</h3>*/}
{/* <ul>*/}
{/* <li><NavLink to={URL.INFORM_DAILY}>오늘의 행사</NavLink></li>*/}
{/* <li><NavLink to={URL.INFORM_WEEKLY} className={({ isActive }) => (isActive ? "cur" : "")}>금주의 행사</NavLink></li>*/}
{/* <li><NavLink to={URL.INFORM_NOTICE} className={({ isActive }) => (isActive ? "cur" : "")}>공지사항</NavLink></li>*/}
{/* <li><NavLink to={URL.INFORM_GALLERY} className={({ isActive }) => (isActive ? "cur" : "")}>사이트 갤러리</NavLink></li>*/}
{/* </ul>*/}
{/*</div>*/}
{sessionUserSe ==='ACC_TP01' &&
<div className="col">
<div className="">
<h3>사이트관리</h3>
<ul>
<li><NavLink to={URL.ADMIN_SCHEDULE} className={({ isActive }) => (isActive ? "cur" : "")}>일정관리</NavLink></li>
<li><NavLink to={URL.ADMIN_BOARD} className={({ isActive }) => (isActive ? "cur" : "")}>게시판생성관리</NavLink></li>
<li><NavLink to={URL.ADMIN_SCHEDULE} className={({ isActive }) => (isActive ? "cur" : "")}>Dashboard</NavLink></li>
{/*<li><NavLink to={URL.ADMIN_BOARD} className={({ isActive }) => (isActive ? "cur" : "")}></NavLink></li>
<li><NavLink to={URL.ADMIN_USAGE} className={({ isActive }) => (isActive ? "cur" : "")}>게시판사용관리</NavLink></li>
<li><NavLink to={URL.ADMIN_NOTICE} className={({ isActive }) => (isActive ? "cur" : "")}>공지사항관리</NavLink></li>
<li><NavLink to={URL.ADMIN_GALLERY} className={({ isActive }) => (isActive ? "cur" : "")}>사이트갤러리관리</NavLink></li>
<li><NavLink to={URL.ADMIN_MANAGER} className={({ isActive }) => (isActive ? "cur" : "")}>사이트관리자 암호변경</NavLink></li>
<li><NavLink to={URL.ADMIN_MANAGER} className={({ isActive }) => (isActive ? "cur" : "")}>사이트관리자 암호변경</NavLink></li>*/}
</ul>
</div>
}
{sessionUserId &&
<div>
<button onClick={logOutHandler} className="btn btn-22498E w-100 rounded-5">로그아웃</button>
</div>
}
{!sessionUserId &&
<div>
<button onClick={logInHandler} className="btn btn-22498E w-100 rounded-5">로그인</button>
</div>
}
</div>
</div>
{/* <!-- All menu : mobile --> */}
<div className="all_menu Mobile closed">
<div className="user_info_m">
@ -209,9 +330,10 @@ function EgovHeader({ loginUser, onChangeLogin }) {
<h3><Link to={URL.ABOUT}>사이트소개</Link></h3>
<div className="submenu closed">
<ul>
<li><NavLink to={URL.ABOUT_SITE} className={({ isActive }) => (isActive ? "cur" : "")}>소개</NavLink></li>
<li><NavLink to={URL.ABOUT_SITE} className={({ isActive }) => (isActive ? "cur" : "")}>인사말</NavLink></li>
<li><NavLink to={URL.ABOUT_HISTORY} className={({ isActive }) => (isActive ? "cur" : "")}>연혁</NavLink></li>
<li><NavLink to={URL.ABOUT_ORGANIZATION} className={({ isActive }) => (isActive ? "cur" : "")}>조직소개</NavLink></li>
<li><NavLink to={URL.ABOUT_PROMOTE} className={({ isActive }) => (isActive ? "cur" : "")}>홍보자료</NavLink></li>
<li><NavLink to={URL.ABOUT_ORGANIZATION} className={({ isActive }) => (isActive ? "cur" : "")}>주요업무</NavLink></li>
<li><NavLink to={URL.ABOUT_LOCATION} className={({ isActive }) => (isActive ? "cur" : "")}>찾아오시는 </NavLink></li>
</ul>
</div>
@ -241,8 +363,8 @@ function EgovHeader({ loginUser, onChangeLogin }) {
</div>
{sessionUserSe ==='ACC_TP01' &&
<>
<h3><Link to={URL.ADMIN}>사이트관리</Link></h3>
<div className="submenu closed">
<h3><Link to={URL.ADMIN_SCHEDULE}>사이트관리</Link></h3>
{/*<div className="submenu closed">
<ul>
<li><NavLink to={URL.ADMIN_SCHEDULE} className={({ isActive }) => (isActive ? "cur" : "")}>일정관리</NavLink></li>
<li><NavLink to={URL.ADMIN_BOARD} className={({ isActive }) => (isActive ? "cur" : "")}>게시판생성관리</NavLink></li>
@ -251,7 +373,7 @@ function EgovHeader({ loginUser, onChangeLogin }) {
<li><NavLink to={URL.ADMIN_GALLERY} className={({ isActive }) => (isActive ? "cur" : "")}>사이트갤러리관리</NavLink></li>
<li><NavLink to={URL.ADMIN_MANAGER} className={({ isActive }) => (isActive ? "cur" : "")}>사이트관리자 암호변경</NavLink></li>
</ul>
</div>
</div>*/}
</>
}
</div>

View File

@ -5,13 +5,14 @@ import URL from 'constants/url';
function EgovLeftNavAbout() {
return (
<div className="nav">
<div className="inner">
<h2>사이트 소개</h2>
<ul className="menu4">
<li><NavLink to={URL.ABOUT_SITE} className={({ isActive }) => (isActive ? "cur" : "")}>소개</NavLink></li>
<div className="nav1">
<div className="">
<h2 className={"nav_title"}>센터 소개</h2>
<ul className="menu10">
<li><NavLink to={URL.ABOUT_SITE} className={({ isActive }) => (isActive ? "cur" : "")}>인사말</NavLink></li>
<li><NavLink to={URL.ABOUT_HISTORY} className={({ isActive }) => (isActive ? "cur" : "")}>연혁</NavLink></li>
<li><NavLink to={URL.ABOUT_ORGANIZATION} className={({ isActive }) => (isActive ? "cur" : "")}>조직소개</NavLink></li>
<li><NavLink to={URL.ABOUT_PROMOTE} className={({ isActive }) => (isActive ? "cur" : "")}>홍보자료</NavLink></li>
<li><NavLink to={URL.ABOUT_ORGANIZATION} className={({ isActive }) => (isActive ? "cur" : "")}>주요업무</NavLink></li>
<li><NavLink to={URL.ABOUT_LOCATION} className={({ isActive }) => (isActive ? "cur" : "")}>찾아오시는 </NavLink></li>
</ul>
</div>

View File

@ -18,19 +18,19 @@ function EgovLeftNavAdmin(props) {
let activeKey;
if (activeFolder === "config") {
activeKey = "0";
activeKey = 0;
} else if (activeFolder === "users") {
activeKey = "1";
activeKey = 1;
} else if (activeFolder === "boards") {
activeKey = "2";
activeKey = 2;
} else if (activeFolder === "standards") {
activeKey = "3";
activeKey = 3;
} else if (activeFolder === "contents") {
activeKey = "4";
activeKey = 4;
} else if (activeFolder === "committee") {
activeKey = "5";
activeKey = 5;
} else if (activeFolder === "logs") {
activeKey = "6";
activeKey = 6;
}
// else {
// activeKey = "7";
@ -55,7 +55,7 @@ function EgovLeftNavAdmin(props) {
{/* </ul>*/}
{/* </Accordion.Body>*/}
{/*</Accordion.Item>*/}
<Accordion.Item eventKey={"0"}>
<Accordion.Item eventKey={0}>
<Accordion.Header>환경설정</Accordion.Header>
<Accordion.Body>
<ul className="menu4">
@ -69,7 +69,7 @@ function EgovLeftNavAdmin(props) {
</Accordion.Body>
</Accordion.Item>
<Accordion.Item eventKey={"1"}>
<Accordion.Item eventKey={1}>
<Accordion.Header>사용자 관리</Accordion.Header>
<Accordion.Body>
<ul className="menu4">
@ -78,7 +78,7 @@ function EgovLeftNavAdmin(props) {
</Accordion.Body>
</Accordion.Item>
<Accordion.Item eventKey={"2"}>
<Accordion.Item eventKey={2}>
<Accordion.Header>게시판현황</Accordion.Header>
<Accordion.Body>
<ul className="menu4">
@ -89,19 +89,19 @@ function EgovLeftNavAdmin(props) {
</Accordion.Body>
</Accordion.Item>
<Accordion.Item eventKey={"3"}>
<Accordion.Item eventKey={3}>
<Accordion.Header>건설기준관리</Accordion.Header>
<Accordion.Body>
<ul className="menu4">
{/*<li><NavLink to={URL.ADMIN__STANDARDS__REFERENCE_CODES} className={({ isActive }) => (isActive ? "cur" : "")}>참조코드 관리</NavLink></li>*/}
<li><NavLink to={URL.ADMIN__STANDARDS__API_KYES} className={({ isActive }) => (isActive ? "cur" : "")}>API KEY 관리</NavLink></li>
<li><NavLink to={URL.ADMIN__STANDARDS__API_KEYS} className={({ isActive }) => (isActive ? "cur" : "")}>API KEY 관리</NavLink></li>
<li><NavLink to={URL.ADMIN__STANDARDS__SIMILARITY_CHECK} className={({ isActive }) => (isActive ? "cur" : "")}>유사성 검사</NavLink></li>
<li><NavLink to={URL.ADMIN__STANDARDS__INFO_DISCLOSURE} className={({ isActive }) => (isActive ? "cur" : "")}>건설기준 내용 관리</NavLink></li>
</ul>
</Accordion.Body>
</Accordion.Item>
<Accordion.Item eventKey={"4"}>
<Accordion.Item eventKey={4}>
<Accordion.Header>컨텐츠관리</Accordion.Header>
<Accordion.Body>
<ul className="menu4">
@ -113,7 +113,7 @@ function EgovLeftNavAdmin(props) {
</Accordion.Body>
</Accordion.Item>
<Accordion.Item eventKey={"5"}>
<Accordion.Item eventKey={5}>
<Accordion.Header>위원회관리</Accordion.Header>
<Accordion.Body>
<ul className="menu4">
@ -123,7 +123,7 @@ function EgovLeftNavAdmin(props) {
</Accordion.Body>
</Accordion.Item>
<Accordion.Item eventKey={"6"}>
<Accordion.Item eventKey={6}>
<Accordion.Header>로그현황</Accordion.Header>
<Accordion.Body>
<ul className="menu4">

View File

@ -5,46 +5,82 @@ const URL = {
LOGIN : "/login", //로그인
JOIN : "/join", //회원가입
MY : "/myPage", //나의페이지
ERROR : "/error", //에러
PRIVATE : "/private", //개인정보처리방침
EMAIL : "/email", //이메일 무단 수집 거부
CHANGE_PW : "/PwChange", // 비밀번호 변경
//ABOUT
ABOUT : "/about", //사이트소개
ABOUT_SITE : "/about/site", // 사이트소개/소개
ABOUT_HISTORY : "/about/history", // 사이트소개/연혁
ABOUT_PROMOTE : "/about/promote", // 사이트소개/홍보자료
ABOUT_ORGANIZATION : "/about/organization", // 사이트소개/조직소개
ABOUT_LOCATION : "/about/location", // 사이트소개/찾아오시는길
ABOUT_SITEMAP : "/about/sitemap", // 사이트소개/사이트맵
//INTRO
INTRO : "/intro", //정보마당
INTRO_WORKS : "/intro/works", // 정보마당/주요사업소개
INTRO_SERVICE : "/intro/service", // 정보마당/주요서비스소개
// INTRO : "/intro", //정보마당
// INTRO_WORKS : "/intro/works", // 정보마당/주요사업소개
// INTRO_SERVICE : "/intro/service", // 정보마당/주요서비스소개
//COMMITTEE
COMMITTEE : "/committee", //위원회
COMMITTEE_PROGRESS : "/committee/progress", // 위원회/진행현황
COMMITTEE_SCHEDULE : "/committee/schedule", // 위원회/위원회일정
//SUPPORT
SUPPORT : "/support", // 고객지원
SUPPORT_QNA : "/support/qna", // 게시판/QNA 소개
SUPPORT_LIST : "/support/list/:BbsCode", // 게시판/리스트
SUPPORT_DETAIL : "/support/detail/:BbsCode", // 게시판/상세보기
SUPPORT_CREATE : "/support/create/:BbsCode", // 게시판/글쓰기
SUPPORT_LIST_NOCODE : "/support/list",
SUPPORT_DETAIL_NOCODE : "/support/detail", // 게시판/상세보기
SUPPORT_CREATE_NOCODE : "/support/create", // 게시판/글쓰기
SUPPORT_SITE : "/support/site", // 관련사이트
SUPPORT_API : "/support/api", // API 서비스
SUPPORT_RESEARCH : "/support/research", // 건설기준 연구
SUPPORT_POLL : "/support/poll", // 설문조사
SUPPORT_DOWNLOAD : "/support/download", // 고객지원/자료실
SUPPORT_DOWNLOAD_DETAIL : "/support/download/detail", // 고객지원/자료실/상세
SUPPORT_DOWNLOAD_CREATE : "/support/download/create", // 고객지원/자료실/등록
SUPPORT_QNA : "/support/qna", // 고객지원/묻고답하기
SUPPORT_QNA_DETAIL : "/support/qna/detail", // 고객지원/묻고답하기/상세
SUPPORT_APPLY : "/support/apply", // 고객지원/서비스신청
// SUPPORT_DOWNLOAD_DETAIL : "/support/download/detail", // 고객지원/자료실/상세
// SUPPORT_DOWNLOAD_CREATE : "/support/download/create", // 고객지원/자료실/등록
// SUPPORT_QNA : "/support/qna", // 고객지원/묻고답하기
// SUPPORT_QNA_DETAIL : "/support/qna/detail", // 고객지원/묻고답하기/상세
// SUPPORT_APPLY : "/support/apply", // 고객지원/서비스신청
//기준코드
STANDARD_CODE_INFO : "/standardCode/info", //건설기준코드/건설기준코드 안내
STANDARD_CODE_TERM : "/standardCode/term", //건설기준코드/건설기준코드 용어
STANDARD_CODE_ENG : "/standardCode/eng", //건설기준코드/영문 건설기준코드
STANDARD_CODE_OLD : "/standardCode/old", //건설기준코드/(구)건설기준코드
STANDARD_CODE_LIST : "/standardCode/list", //건설기준코드/리스트
STANDARD_CODE_LIST_LINK : "/standardCode/list/:listCode", //건설기준코드/리스트
STANDARD_CODE_DETAIL : "/standardCode/detail", //건설기준코드/리스트
STANDARD_CODE_VIEWER : "/standardCode/viewer", //건설기준코드/뷰어
STANDARD_CODE_VIEWER_LINK : "/standardCode/viewer/:linkedDocCode", //건설기준코드/뷰어/새 창 링크
//INFORM
INFORM : "/inform", // 알림마당
INFORM_DAILY : "/inform/daily", // 알림마당/오늘의행사
INFORM_DAILY_DETAIL : "/inform/daily/detail", // 알림마당/오늘의행사상세
INFORM_WEEKLY : "/inform/weekly", // 알림마당/금주의행사
INFORM_WEEKLY_DETAIL : "/inform/weekly/detail", // 알림마당/금주의행사상세
INFORM_NOTICE : "/inform/notice", // 알림마당/공지사항
INFORM_NOTICE_DETAIL : "/inform/notice/detail", // 알림마당/공지사항상세
INFORM_NOTICE_CREATE : "/inform/notice/create", // 알림마당/공지사항등록
INFORM_NOTICE_MODIFY : "/inform/notice/modify", // 알림마당/공지사항수정
INFORM_NOTICE_REPLY : "/inform/notice/reply", // 알림마당/공지사항답글
INFORM_GALLERY : "/inform/gallery", // 알림마당/사이트갤러리
INFORM_GALLERY_DETAIL : "/inform/gallery/detail", // 알림마당/사이트갤러리상세
INFORM_GALLERY_CREATE : "/inform/gallery/create", // 알림마당/사이트갤러리등록
INFORM_GALLERY_MODIFY : "/inform/gallery/modify", // 알림마당/사이트갤러리수정
INFORM_GALLERY_REPLY : "/inform/gallery/reply", // 알림마당/사이트갤러리답글
// INFORM : "/inform", // 알림마당
// INFORM_DAILY : "/inform/daily", // 알림마당/오늘의행사
// INFORM_DAILY_DETAIL : "/inform/daily/detail", // 알림마당/오늘의행사상세
// INFORM_WEEKLY : "/inform/weekly", // 알림마당/금주의행사
// INFORM_WEEKLY_DETAIL : "/inform/weekly/detail", // 알림마당/금주의행사상세
// INFORM_NOTICE : "/inform/notice", // 알림마당/공지사항
// INFORM_NOTICE_DETAIL : "/inform/notice/detail", // 알림마당/공지사항상세
// INFORM_NOTICE_CREATE : "/inform/notice/create", // 알림마당/공지사항등록
// INFORM_NOTICE_MODIFY : "/inform/notice/modify", // 알림마당/공지사항수정
// INFORM_NOTICE_REPLY : "/inform/notice/reply", // 알림마당/공지사항답글
// INFORM_GALLERY : "/inform/gallery", // 알림마당/사이트갤러리
// INFORM_GALLERY_DETAIL : "/inform/gallery/detail", // 알림마당/사이트갤러리상세
// INFORM_GALLERY_CREATE : "/inform/gallery/create", // 알림마당/사이트갤러리등록
// INFORM_GALLERY_MODIFY : "/inform/gallery/modify", // 알림마당/사이트갤러리수정
// INFORM_GALLERY_REPLY : "/inform/gallery/reply", // 알림마당/사이트갤러리답글
//ADMIN
ADMIN : "/admin", // 사이트관리
ADMIN_SCHEDULE : "/admin/schedule", // 사이트관리/일정관리
@ -84,16 +120,15 @@ const URL = {
ADMIN_ABOUT_SITE : "/admin/config/about-site-mgt", // 사이트관리/환경설정/관련사이트 관리
// 관리자 - 사용자 현황
ADMIN__USERS__LIST : "/admin/users/list", // 사용자 현황
ADMIN__USERS__LIST : "/admin/users/mgt", // 사용자 현황
// 관리자 - 게시판 현황
ADMIN__BOARDS__LIST : "/admin/boards/list", // 게시판 현황/게시판 관리
ADMIN__BOARDS__LIST : "/admin/boards/mgt", // 게시판 현황/게시판 관리
ADMIN__BOARDS__POSTS : "/admin/boards/posts", // 게시판 현황/게시물 관리
ADMIN__BOARDS__KEYWORDS : "/admin/boards/keywords", // 게시판 현황/키워드 관리
// 관리자 - 건설기준 관리
ADMIN__STANDARDS__REFERENCE_CODES : "/admin/standards/reference-codes", // 건설기준 관리/참조코드 조회
ADMIN__STANDARDS__API_KYES : "/admin/standards/api-kyes", // 건설기준 관리/API KEY 관리
ADMIN__STANDARDS__API_KEYS : "/admin/standards/api-keys", // 건설기준 관리/API KEY 관리
ADMIN__STANDARDS__SIMILARITY_CHECK : "/admin/standards/standards/similarity-check", // 건설기준 관리/유사성 검사
ADMIN__STANDARDS__INFO_DISCLOSURE : "/admin/standards/info-disclosure", // 건설기준 관리/정보공개 관리
@ -123,13 +158,6 @@ const URL = {
ADMIN__LOGS__PRIVACY_LOGS : "/admin/logs/privacy-logs", // 위원회 관리/개인정보 로그
ADMIN__LOGS__FILE_DOWNLOAD_STATUS : "/admin/logs/file-download-status", // 위원회 관리/파일 다운현황
//기준코드
STANDARD_CODE_INFO : "/standardCode/info",
STANDARD_CODE_LIST : "/standardCode/list", //건설기준코드/리스트
STANDARD_CODE_LIST_LINK : "/standardCode/list/:listCode", //건설기준코드/리스트
STANDARD_CODE_DETAIL : "/standardCode/detail", //건설기준코드/리스트
STANDARD_CODE_VIEWER : "/standardCode/viewer", //건설기준코드/뷰어
STANDARD_CODE_VIEWER_LINK : "/standardCode/viewer/:linkedDocCode", //건설기준코드/뷰어/새 창 링크

View File

@ -1,32 +1,39 @@
@charset "utf-8";
/* Web Font */
@font-face {font-family: 'Noto Sans KR';font-style: normal;font-weight: 300;
src: url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Light.woff2) format('woff2'),
url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Light.woff) format('woff'),
url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Light.otf) format('opentype');}
@font-face {font-family: 'Noto Sans KR';font-style: normal;font-weight: 400;src:
url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Regular.woff2) format('woff2'),
url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Regular.woff) format('woff'),
url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Regular.otf) format('opentype');}
@font-face {font-family: 'Noto Sans KR';font-style: normal;font-weight: 500;
src: url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Medium.woff2) format('woff2'),
url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Medium.woff) format('woff'),
url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Medium.otf) format('opentype');}
@font-face {font-family: 'Noto Sans KR';font-style: normal;font-weight: 700;
src: url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Bold.woff2) format('woff2'),
url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Bold.woff) format('woff'),
url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Bold.otf) format('opentype');}
/*@font-face {font-family: 'Noto Sans KR';font-style: normal;font-weight: 300;*/
/* src: url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Light.woff2) format('woff2'),*/
/* url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Light.woff) format('woff'),*/
/* url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Light.otf) format('opentype');}*/
/*@font-face {font-family: 'Noto Sans KR';font-style: normal;font-weight: 400;src:*/
/* url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Regular.woff2) format('woff2'),*/
/* url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Regular.woff) format('woff'),*/
/* url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Regular.otf) format('opentype');}*/
/*@font-face {font-family: 'Noto Sans KR';font-style: normal;font-weight: 500;*/
/* src: url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Medium.woff2) format('woff2'),*/
/* url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Medium.woff) format('woff'),*/
/* url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Medium.otf) format('opentype');}*/
/*@font-face {font-family: 'Noto Sans KR';font-style: normal;font-weight: 700;*/
/* src: url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Bold.woff2) format('woff2'),*/
/* url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Bold.woff) format('woff'),*/
/* url(https://fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Bold.otf) format('opentype');}*/
@font-face {
font-family: 'Pretendard-Regular';
src: url('font/Pretendard-Regular.otf');
font-weight: normal;
font-style: normal;
}
/* Reset style */
* {word-break: keep-all; word-wrap: break-word; box-sizing: border-box; -webkit-box-sizing: border-box;}
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p,
blockquote, pre, a, abbr, acronym, address, big, cite, code, del, em, font, img, ins, q, s, small, strike, strong, sub, sup,
dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, thead, tbody, tfoot, tr, th, td, input {
margin: 0; padding: 0;
margin: 0; padding: 0; font-family: 'Pretendard-Regular';
}
blockquote, button, fieldset, iframe {border: 0;}
@ -72,8 +79,22 @@ button {cursor: pointer;}
.w_400 {width: 400px;}
.w_500 {width: 500px;}
.mw_400 {max-width: 400px;}
.mw_450 {max-width: 450px;}
.h_25 {height: 25px;}
.h_30 {height: 30px;}
.h_50 {height: 50px;}
.h_100 {height: 100px;}
.h-100 {height: 100%;}
.f_11 {font-size: 11px;}
.f_12 {font-size: 12px;}
.f_13 {font-size: 13px;}
.f_14 {font-size: 14px;}
.f_15 {font-size: 15px;}
.f_16 {font-size: 16px;}
.f_17 {font-size: 17px;}
/* 여백 */
@ -83,5 +104,11 @@ button {cursor: pointer;}
.ml10 {margin-left: 10px !important;}
.pb10 {padding-bottom: 10px !important;}
.bg-fa {background: #FAFAFA !important;}
.clickable{cursor: pointer;}
.text-4c6 {color: #4C6C84 !important;}
.text-224 {color: #22498E !important;}
.clickable{cursor: pointer;}
.MuiTab-root.Mui-selected { color: #22498E; }

View File

@ -51,30 +51,35 @@
.board_list {border-top: 2px solid #222;}
.board_list .head {display: table; table-layout: fixed; width: 100%;}
/* changed by lim padding: 25px 0 27px 0; */
.board_list .head > span {display: table-cell; padding: 10px 0 10px 0; border-bottom: 1px solid #888; font-size: 16px; font-weight: 500px; text-align: center;}
.board_list .head > span {display: table-cell; padding: 10px 0 10px 0; border-bottom: 1px solid #888; font-size: 16px; font-weight: 500; text-align: center;}
.logs_list .result {max-height: 430px;} /* added by lim .logs_list .result {max-height: 430px;} */
.board_list .result .list_item {display: table; width: 100%; table-layout: fixed;}
/* changed by lim padding: 18px 0 20px 0; */
.board_list .result .list_item > div {display: table-cell; padding: 7px 0 7px 0; border-bottom: 1px solid #dde2e5; color: #666; font-size: 14px; text-align: center; vertical-align: middle;}
.board_list .result .list_item > div.al {padding: 18px 30px 20px 30px; text-align: left;}
.board_list .result .list_item > .left_align {text-align: left;}
.board_list .result .list_item > div.al {padding: 10px 20px 12px 20px; text-align: left;}
.board_list .result .list_item > div.reply {position: relative; padding: 18px 30px 20px 52px;}
.board_list .result .list_item > div.reply::before {content: ""; display: block; position: absolute; left: 27px; top: 24px; width: 22px; height: 14px; background: url(css/images/ico_reply.png) no-repeat;}
.board_list .no_data {height: 60px; border-bottom: 1px solid #dde2e5; color: #666; font-size: 16px; line-height: 60px; text-align: center;}
/* 영문건설기준 리스트 */
.board_list .result .list_item1 {display: table; width: 100%; table-layout: fixed; margin-left: 0px;}
.board_list .result .list_item1 > div {display: table-cell; padding: 5px 0; border-bottom: 1px solid #dde2e5; color: #666; font-size: 14px; text-align: center; vertical-align: middle; }
.board_bot {margin-top: 40px;}
.paging {text-align: center;}
.paging .btn {margin-top: 0; padding: 5px;} /* added by lim padding: 5px; */
.paging .btn + .btn {margin-left: 5px;}
.paging .btn button {display: inline-block; width: 32px; height: 32px; border: 1px solid #dde2e5; border-radius: 5px; font-size: 0;} /* changed by lim width: 42px; height: 42px; */
.paging .first {background: url(css/images/ico_prev.png) no-repeat center; vertical-align: top; }
.paging .prev {margin-right: 6px; background: url(css/images/ico_arrow_r_gray_9x15.png) no-repeat center; vertical-align: top; transform: rotate(180deg);} /* changed by lim margin-right: 26px; */
.paging .next {margin-left: 6px; background: url(css/images/ico_arrow_r_gray_9x15.png) no-repeat center; vertical-align: top;} /* changed by lim margin-left: 26px; */
.paging .last {background: url(css/images/ico_prev.png) no-repeat center; vertical-align: top; transform: rotate(180deg);}
.paging .btn button {display: inline-block; width: 32px; height: 32px; border: 1px solid #dde2e5; border-radius: 25px; font-size: 0;} /* changed by lim width: 42px; height: 42px; */
.paging .first {background: url(css/images/ico_prev.png) no-repeat center; background-size: 30%; vertical-align: top; }
.paging .prev {margin-right: 6px; background: url(css/images/ico_arrow_r_gray_9x15.png) no-repeat center; background-size: 20%; vertical-align: top; transform: rotate(180deg);} /* changed by lim margin-right: 26px; */
.paging .next {margin-left: 6px; background: url(css/images/ico_arrow_r_gray_9x15.png) no-repeat center; background-size: 20%; vertical-align: top;} /* changed by lim margin-left: 26px; */
.paging .last {background: url(css/images/ico_prev.png) no-repeat center; background-size: 30%; vertical-align: top; transform: rotate(180deg);}
.paging ul {display: inline-block; vertical-align: top;}
.paging ul li {display: inline-block; margin-top: 4px; vertical-align: top;}
.paging ul li button {display: block; width: 34px; height: 34px; color: #888; font-size: 16px; line-height: 34px; text-align: center; background: white;}
.paging ul li button.cur {border-radius: 50%; color: #fff; background: #222;}
.paging ul li button.cur {border-radius: 50%; color: #fff; background: #004994;}
.board_view {border-top: 2px solid #222;}
.board_view_top {border-bottom: 1px solid #dde2e5;}
@ -107,13 +112,13 @@
.board_btn_area {position: relative; min-height: 46px;}
.board_btn_area .left_col {font-size: 0;}
.board_btn_area .left_col .btn + .btn {margin-left: 10px;}
.board_btn_area .right_col {position: absolute; right: 0; top: 0; font-size: 0;}
/*.board_btn_area .right_col {position: absolute; right: 0; top: 0; font-size: 0;}*/
.board_btn_area .right_col .btn + .btn {margin-left: 10px;}
.board_view2 {border-top: 2px solid #222;}
.board_view2 dl {display: table; width: 100%; table-layout: fixed; border-bottom: 1px solid #dde2e5;}
.board_view2 dl > * {display: table-cell; table-layout: fixed; vertical-align: middle;}
.board_view2 dl dt {width: 176px; padding: 12px 25px; color: #000; font-size: 15px; letter-spacing: -2px; background: #f5f6f7; word-break: break-all;} /* changed by lim font-size: 18px;*/
.board_view2 dl dt {width: 176px; padding: 12px 25px; color: #000; font-size: 15px; letter-spacing: -2px; background: #FAFAFA; word-break: break-all; border-right: 1px solid #B4B3B3;} /* changed by lim font-size: 18px;*/
.board_view2 dl dt .req {display: inline-block; width: 7px; height: 7px; margin-left: 2px; font-size: 0; background: url(css/images/ico_req.png) no-repeat; vertical-align: 17px;}
.board_view2 dl dd {padding: 12px 15px; color: #222; font-size: 16px; font-weight: 300;}
.board_view2 .file_add {margin-top: 5px;}
@ -154,20 +159,20 @@
.qna_a {position: relative; padding: 8px 30px 3px 75px; border-bottom: 1px solid #dde2e5; color: #666; font-size: 16px; font-weight: 300; line-height: 30px;}
.qna_a > span {display: block; position: absolute; left: 30px; top: 30px; width: 32px; height: 32px; border-radius: 50%; color: #fff; font-size: 20px; line-height: 32px; text-align: center; background: #fc8175;}
.qna_a ul li {position: relative; padding: 21px 0 30px 0; border-bottom: 1px dashed #dde2e5;}
.qna_a ul li {position: relative; padding: 10px 0 15px 0; border-bottom: 1px dashed #dde2e5;}
.qna_a ul li:last-child {border-bottom: 0;}
.qna_a ul li span {display: block;}
.qna_a ul li .delete {position: absolute; right: 20px; bottom: 11px; color: #222; font-size: 16px; font-weight: 300;}
.qna_a ul li .delete::before {content: ""; display: inline-block; width: 18px; height: 18px; margin-right: 5px; background: url(css/images/ico_delete.png) no-repeat; background-size: contain; vertical-align: -2px;}
.replay {display: table; table-layout: fixed; width: 100%; padding: 18px 0; border: 2px solid #dde2e5; border-radius: 10px;}
.replay {padding: 18px 0; border: 2px solid #dde2e5; border-radius: 10px;}
.replay > * {display: table-cell; vertical-align: top;}
.replay .left_col {width: 850px; font-size: 0;}
.replay .left_col label {display: inline-block; width: 108px; height: 80px; padding-left: 28px; color: #000; font-size: 16px; line-height: 80px; vertical-align: top;}
.replay .left_col div {display: inline-block; width: 740px; vertical-align: top;}
.replay .left_col div textarea {height: 80px;}
.replay .right_col {padding: 0 18px;}
.replay .right_col .btn {width: 100%; height: 80px; border-radius: 5px; color: #005b82; font-size: 16px; text-align: center; line-height: 80px; background: #daedf5;}
/*.replay .left_col {width: 850px; font-size: 0;}*/
/*.replay .left_col label {display: inline-block; width: 108px; height: 80px; padding-left: 28px; color: #000; font-size: 16px; line-height: 80px; vertical-align: top;}*/
/*.replay .left_col div {display: inline-block; width: 740px; vertical-align: top;}*/
/*.replay .left_col div textarea {height: 80px;}*/
/*.replay .right_col {padding: 0 18px;}*/
/*.replay .right_col .btn {width: 100%; height: 80px; border-radius: 5px; color: #005b82; font-size: 16px; text-align: center; line-height: 80px; background: #daedf5;}*/
.bottom_navi {border-top: 1px solid #dde2e5;}
@ -198,7 +203,11 @@
.condition > ul li .prev + span {display: inline-block; height: 32px; margin: 0 10px; padding: 0 30px; border-radius: 5px; font-size: 16px; line-height: 32px; background: #f7f7f7; vertical-align: top;}
.condition .lb {display: inline-block; height: 32px; margin-right: 20px; color: #222; font-size: 16px; font-weight: 300; line-height: 32px; vertical-align: top;} /* changed by lim height: 46px;*/
.condition1 {padding: 10px; border: 1px solid #dde2e5; border-radius: 10px; text-align: right; background: #FAFAFA; margin-bottom: 20px;}
.condition1 > ul,
.condition1 > ul li {display: inline-block; vertical-align: top; padding-left: 20px;}
.condition2 {padding: 20px; border: 1px solid #000; background: #FFF; margin-bottom: 20px; line-height: 25px; box-shadow: 3px 4px 5px #ccc;}
/* Icon */
.ico {display: inline-block; font-size: 0; vertical-align: top;}
@ -275,7 +284,7 @@ select::-ms-expand {display:none;}
.tit_2 {font-size: 30px; font-weight: 700;}
.tit_3 {color: #222; font-size: 48px; font-weight: 500; line-height: 44px; letter-spacing: -2px;}
.tit_3 {color: #004994; font-size: 30px; font-weight: 700; line-height: 80px; letter-spacing: -2px;}
.tit_4 {position: relative; padding-top: 12px; font-size: 30px; font-weight: 700;}
.tit_4::before {content: ""; display: block; position: absolute; left: 0; top: 0; width: 30px; height: 2px; background: #0465be;}
@ -332,4 +341,79 @@ select::-ms-expand {display:none;}
.recharts-legend-item-text {
font-size: 11px;
}
.uploadIcon {
width: 100px;
height: 100px;
pointer-events: none;
}
.file {
display: none;
}
.file::file-selector-button {
font-size: 14px;
background: #fff;
border: 1px solid #111;
border-radius: 12px;
padding: 4px 32px;
cursor: pointer;
}
.preview {
width: 400px;
height: 350px;
margin: auto;
background-color: #fff;
border-radius: 5px;
border: 3px dashed #eee;
padding: 70px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
cursor: pointer;
}
.preview_image {
max-width: 100%;
max-height: 100%;
object-fit: contain;
}
.preview:hover {
border-color: #111;
}
.preview_msg {
font-weight: 500;
font-size: 18px;
margin: 20px 0 10px;
}
.preview_desc {
margin: 0;
font-size: 14px;
}
.preview_info {
width: 100%;
list-style: none;
padding: 0;
gap: 16px;
display: flex;
flex-direction: column;
}
.preview_info .info_key {
display: block;
font-weight: 500;
font-size: 12px;
margin-bottom: 4px;
}
.preview_info .info_value {
font-size: 14px;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

View File

@ -2,71 +2,111 @@
body {min-width: 1400px;}
.header {position: relative;}
.header::after {content: ""; display: block; position: absolute; left: 0; bottom: 0; width: 100%; height: 1px; background: #dedede;}
.header > .inner {position: relative; width: 1400px; height: 150px; margin: 0 auto; padding: 0 50px;}
/*.header {position: relative;}*/
.header::after {content: ""; display: block; left: 0; bottom: 0; width: 100%; height: 1px; background: #dedede;}
.header > .inner {max-width: 1400px; height: 210px; margin: 0 auto; } /* position: relative; padding: 0 50px; */
.header h1 {display: inline-block; margin-top: 32px;}
.header h1 a,
.header h1 img {display: block;}
.header .logo .m {display: none;}
.header .logo .logotop {display: flex; width: 220px; justify-content: flex-end;}
.header .user_info {position: absolute; right: 50px; top: 10px; line-height: 30px;}
.header .user_info .person {display: inline-block; color: #169bd5; font-weight: 500;}
.header .user_info .person::before {content: ""; display: inline-block; width: 22px; height: 22px; margin-right: 7px; background: url(css/images/ico_person.png) no-repeat; background-size: contain; vertical-align: -4px;}
.header .person {width: 30px; height: 30px; margin-right:20px; cursor: pointer;}
.header .person::before {content: ""; display: inline-block; width: 30px; height: 30px; background: url(css/images/ico_user.png) no-repeat center bottom; background-size: 30px 30px; }
.header .user_info .btn {margin-left: 14px; padding: 0 20px; border-radius: 15px; color: #fff; font-size: 14px; line-height: 30px; background: #169bd5;}
.header .gnb {position: absolute; left: 430px; top: 50px; width: 920px;}
.header .gnb ul {font-size: 0; text-align: center;}
.header .gnb ul::after {content: ""; display: block; clear: both;}
.header .gnb ul li {float: left;}
.header .gnb ul li + li {margin-left: 98px;}
.header .gnb ul li a {color: #666; font-size: 20px; font-weight: 700; letter-spacing: -0.25px;}
.header .gnb ul li a.cur {color: #222;}
/*.header .gnb {position: absolute; left: 430px; top: 50px; width: 920px;}*/
/*.header .gnb ul {font-size: 0; text-align: center;}*/
/*.header .gnb ul::after {content: ""; display: block; clear: both;}*/
/*.header .gnb ul li {float: left;}*/
/*.header .gnb ul li + li {margin-left: 98px;}*/
/*.header .gnb ul li a {color: #666; font-size: 20px; font-weight: 700; letter-spacing: -0.25px;}*/
/*.header .gnb ul li a.cur {color: #222;}*/
.header .right_a {position: absolute; right: 50px; top: 65px;}
.header .right_a .btn {width: 30px; height: 30px; font-size: 0; background: url(css/images/ico_allmenu.png) no-repeat right; background-size: 22px 18px;}
.header .right_a .btn.active {background: url(css/images/ico_allmenu_close.png) no-repeat right; background-size: 22px 18px;}
/*.header .right_a {position: absolute; right: 50px; top: 65px;}*/
.header .right_a .btn {width: 30px; height: 30px; font-size: 0; background: url(css/images/ico_allmenu.png) no-repeat center; background-size: 22px 18px;}
.header .right_a .btn.active {background: url(css/images/ico_allmenu_close.png) no-repeat center; background-size: 22px 18px;}
.header .right_a .btn.mobile {display: none;}
.header .topsearch {width: 25px; height: 27px; background: url(css/images/ico_search_b.png) no-repeat; margin: 5px;}
.header .search {height:96px; padding:24px 0px 10px; margin: 0 auto; }
.header .search .search_input {max-width: 734px; width: calc(100% - 40px); height:62px; margin: 0 auto; border: 2px solid #004994; border-radius: 20px; padding: 10px}
.header .search .search_input select {border: none;}
.header .search .search_input input {ime-mode:active; border: none;}
.header .search .topsearch {width: 40px; height: 40px; background: url(css/images/ico_search_b.png) no-repeat center center; background-size: 22px 22px; filter: brightness(1) sepia(1) saturate(3) hue-rotate(175deg);}
/* All menu */
.all_menu {transition: transform .2s ease-in-out, opacity .2s ease-in-out; transform-origin: top; z-index: 10;}
.header .topcode {position: relative; width: 100%; top: -8px;}
.header .topcode .topcode_c {max-width: 1020px; margin:0 auto; border: 1px solid #ccc; z-index: 100; border-radius: 10px; box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.2); background-color: #fff; padding: 0 20px; }
.header .topcode .topcode_n {max-width: 1020px; margin:0 auto; border: 1px solid #fff; z-index: 100; background-color: #fff; padding: 0 20px; }
.header .topcode .row {flex-wrap: wrap; padding: 8px 0; }
.header .topcode .topcodebnt {
min-width: 45px;
height: 40px;
line-height: 40px;
display: block;
background-color: #fff;
text-align: center;
border-radius: 20px;
color: #909090;
text-decoration: none;
/*margin: 5px;*/
padding: 0 12px 0 12px;
box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.2);
}
.header .topcode .topcodebnt:hover{
background-color: #8F8F8F;
color: #fff;
box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.4);
}
/* All menu */
.all_menu {transition: transform .2s ease-in-out, opacity .2s ease-in-out; transform-origin: top; z-index: 10; padding: 50px 20px;}
.all_menu.Mobile {display: none;}
.all_menu.WEB.closed {transform: scaleY(0); opacity: 0;}
.all_menu.WEB {position: absolute; left: 0; top: 150px; width: 100%; background: #fff;}
.all_menu.WEB::after {content: ""; display: block; position: absolute; left: 0; bottom: 0; width: 100%; height: 1px; background: #ddd;}
.all_menu.WEB .inner {width: 1400px; margin: 0 auto; padding: 41px 50px 47px 50px;}
.all_menu.WEB .inner::after {content: ""; display: block; clear: both;}
.all_menu.WEB .inner .col {float: left; width: 280px;}
.all_menu.WEB .inner .col:last-child {width: auto;}
.all_menu.WEB .inner .col h3 {color: #222; font-size: 24px; font-weight: 700; pointer-events: none;}
.all_menu.WEB .inner .col ul {padding-top: 36px;}
.all_menu.WEB .inner .col ul li + li {margin-top: 17px;}
.all_menu.WEB .inner .col ul li a {color: #777; font-size: 18px;}
.all_menu.WEB .inner .col ul li a:hover {color: #222; text-decoration: underline;}
.all_menu.WEB {position: absolute; right: calc((100% - 1400px) / 2); top: 70px; width: 340px; background: #fff; border-radius: 20px; box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.2); z-index: 200;}
/*.all_menu.WEB::after {content: ""; display: block; position: absolute; left: 0; bottom: 0; width: 100%; height: 1px; background: #ddd;}*/
/*.all_menu.WEB .inner {width: 1400px; margin: 0 auto; } !* padding: 41px 50px 47px 50px; *!*/
/*.all_menu.WEB .inner::after {content: ""; display: block; clear: both;}*/
/*.all_menu.WEB .inner .col {float: left; width: 280px;}*/
/*.all_menu.WEB .inner .col:last-child {width: auto;}*/
.all_menu.WEB .inner h3 {color: #222; font-size: 20px; font-weight: 700; pointer-events: none;}
.all_menu.WEB .inner ul {display: flex; flex-wrap: wrap; padding: 16px 0 16px;}
.all_menu.WEB .inner ul li {padding: 0 15px 0 0;}
.all_menu.WEB .inner ul li a {color: #777; font-size: 12px;}
.all_menu.WEB .inner ul li a:hover {color: #333; border-bottom: 1px solid transparent; transition: border-color 0.3s; border-color: #36588B; }
/*.inner img {height: 35px !important;}*/
.user_info_m {display: none;}
.container {min-height: calc(100vh - 300px);}
.c_wrap { margin: 0 auto;} /* removed by lim width: 1400px; padding: 0 50px; */
.container {min-width: 1400px; min-height: calc(100vh - 400px); padding: 0; }
.c_wrap { margin: auto 0; } /* removed by lim width: 1400px; padding: 0 50px; */
.c_wrap .layout {display: table; width: 100%; table-layout: fixed; padding-bottom: 20px;} /* added by lim padding-bottom: 20px; */
/* sub navigation */
.c_wrap .layout .nav:not(.tabs) {display: table-cell; width: 220px; vertical-align: top;} /* changed by lim width: 260px; */
.c_wrap .layout .nav .inner {border: 1px solid #dde2e5; border-radius: 10px;}
.nav_title{padding: 35px 30px 26px 30px;} /* changed by lim border-bottom: 4px solid #dde2e5; */
.c_wrap .layout .nav h2 {color: #222; font-size: 24px;}
.c_wrap .layout .nav ul {padding: 0 10px} /* changed by lim padding: 26px 30px 27px 30px;*/
.c_wrap .layout .nav ul li + li {margin-top: 18px;} /* changed by lim margin-top: 27px; */
/*.c_wrap .layout .nav .inner {border: 1px solid #dde2e5; border-radius: 10px;}*/
.nav_title{padding: 35px 30px 26px 20px;} /* changed by lim border-bottom: 4px solid #dde2e5; */
.c_wrap .layout .nav h2 {color: #222; font-size: 24px; font-weight: 700;}
.c_wrap .layout .nav button {font-size: 14px; font-weight: 600;}
.c_wrap .layout .nav ul {padding: 0 10px; } /* changed by lim padding: 26px 30px 27px 30px;*/
.c_wrap .layout .nav ul li + li {margin-top: 18px; } /* changed by lim margin-top: 27px; */
.c_wrap .layout .nav ul li a {display: block; position: relative; color: #666; font-size: 14px;} /* changed by lim font-size: 18px; */
.c_wrap .layout .nav ul li a:hover::after {content: ""; display: block; position: absolute; right: 0px; top: 50%; transform: translateY(-50%); width: 9px; height: 15px; background: url(css/images/ico_arrow_r_gray_9x15.png) no-repeat;}
.c_wrap .layout .nav ul li a.cur {color: #222; font-weight: 700;}
.c_wrap .layout .contents {display: table-cell; width: auto; padding: 0 0 50px 30px; vertical-align: top;} /* changed by lim padding: 0 0 120px 70px; */
.c_wrap .layout .contents {display: table-cell; width: auto; vertical-align: top; padding-left: 30px;} /* changed by lim padding: 0 0 120px 70px; */
/* location */
/* 센터소개 */
.c_wrap .layout .nav1:not(.tabs) {display: table-cell; width: 220px; vertical-align: top;}
.c_wrap .layout .nav1 h2 {color: #222; font-size: 24px; font-weight: 700;}
.c_wrap .layout .nav1 .menu10 {mnargin: 0; border: 1px solid #dde2e5;}
/*.c_wrap .layout .nav1 li {margin: 10px;}*/
.c_wrap .layout .nav1 .menu10 li + li {border-top: 1px solid #dde2e5; }
.c_wrap .layout .nav1 ul li a {display: block; position: relative; color: #666; font-size: 14px; padding: 10px;} /* changed by lim font-size: 18px; */
/*.c_wrap .layout .nav1 ul li a:hover {}*/
.c_wrap .layout .nav1 ul li a:hover::after {content: ""; display: block; position: absolute; right: 10px; top: 50%; transform: translateY(-50%); width: 9px; height: 15px; background: url(css/images/ico_arrow_r_gray_9x15.png) no-repeat; }
.c_wrap .layout .nav1 ul li a.cur {color: #fff; font-weight: 700; background-color: #004994; }
/* location */
.location {height: 30px; padding-top: 23px; text-align: right;} /* chagned by lim height: 70px; padding-top: 43px; */
.location ul, .location ul li {display: inline-block; vertical-align: top;}
.location ul li {position: relative; color: #666; font-size: 14px;}
@ -79,22 +119,27 @@ body {min-width: 1400px;}
.footer {position: relative; background-color: #2c394b; }
.footer .upper {width: 100%; background-color: #384556; font-size: 12px;}
.footer .upper .up {width: 1400px; margin: 0 auto; padding: 10px 50px; }
.footer .upper .up .left {text-align: right; color: #B4B5B7; font-weight: 700;}
.footer .upper .up .right {color: #96A1AE; }
.footer::before {content: ""; display: block; position: absolute; left: 0; top: 0; width: 100%; height: 1px; background: #ccc;}
.footer .inner {position: relative; width: 1400px; margin: 0 auto; padding: 0 50px;}
.footer .upper {width: 100%; background-color: #384556; font-size: 12px; border-bottom: 1px solid #56626F;}
.footer .upper .up {width: 1400px; margin: 0 auto; padding: 20px 0; }
.footer .upper .up .left {width: 100px; color: #D9DADB; font-weight: 700; line-height: 30px;}
.footer .upper .up .right {color: #96A1AE; line-height: 30px;}
.footer .upper .up .right a {color: #96A1AE; margin-right: 15px;}
.footer .upper .open {width: 100px; text-align: right; }
.footer .upper button {color: #fff; border: 1px solid #A2A2A2; padding: 3px 30px;}
.footer::before {content: ""; display: block; width: 100%; height: 1px; background: #ccc;}
.footer .inner {width: 1400px; margin: 0 auto; }
.footer .inner::after {content: ""; display: block; clear: both;}
.footer h1 {float: left; width: 220px; padding-top: 20px;}
.footer h1 .m {display: none;}
.footer .info {float: left; padding: 14px 10px; color: #888; font-size: 13px; }
.footer .info {padding: 20px 0; color: #A4A4A4; font-size: 12px; }
.footer .info .copy {padding-top: 5px;}
.footer .info .m_show {display: none;}
.footer .right_col {position: absolute; right: 0; top: 73px; font-size: 0;}
.footer .right_col a {display: inline-block; margin-right: 60px; vertical-align: top;}
.footer .right_col a .m {display: none;}
.footer .right_col img {display: block;}
.footer .right_col {width: 220px; text-align: right;}
.footer .right_col a {color: #A4A4A4; font-size: 12px;}
/*.footer .right_col {position: absolute; right: 0; top: 73px; font-size: 0;}*/
/*.footer .right_col a {display: inline-block; margin-right: 60px; vertical-align: top;}*/
/*.footer .right_col a .m {display: none;}*/
/*.footer .right_col img {display: block;}*/
/* popup */
@ -138,4 +183,40 @@ body {min-width: 1400px;}
.msg_1 + .tit_5 {margin-top: 42px;}
.qna_a + .replay {margin-top: 30px;}
.qna_a + .replay {margin-top: 30px;}
.btn-22498E {
--bs-btn-color: #fff;
--bs-btn-bg: #22498E;
--bs-btn-border-color: #22498E;
--bs-btn-hover-color: #fff;
--bs-btn-hover-bg: #2B5AB3;
--bs-btn-hover-border-color: #2B5AB3;
--bs-btn-focus-shadow-rgb: 130, 138, 145;
--bs-btn-active-color: #fff;
--bs-btn-active-bg: #2B5AB3;
--bs-btn-active-border-color: #51585e;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
--bs-btn-disabled-color: #1B376D;
--bs-btn-disabled-bg: #2a4702;
--bs-btn-disabled-border-color: #1B376D;
}
.btn-outline-22498E {
--bs-btn-color: #22498E;
--bs-btn-border-color: #2B5AB3;
--bs-btn-hover-color: #fff;
--bs-btn-hover-bg: #22498E;
--bs-btn-hover-border-color: #2B5AB3;
--bs-btn-focus-shadow-rgb: 108, 117, 125;
--bs-btn-active-color: #fff;
--bs-btn-active-bg: #2B5AB3;
--bs-btn-active-border-color: #2B5AB3;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
--bs-btn-disabled-color: #2B5AB3;
--bs-btn-disabled-bg: transparent;
--bs-btn-disabled-border-color: #2B5AB3;
--bs-gradient: none;
}

View File

@ -1,92 +1,146 @@
@charset "utf-8";
.Plogin {padding-bottom: 100px;}
.Plogin h1 {color: #222; font-size: 48px; font-weight: 500; letter-spacing: -2px; line-height: 48px; text-align: center;}
.Plogin h1 {color: #222; font-size: 30px; font-weight: 600; text-align: center; padding-top: 30px;}
.Plogin .txt {margin-top: 43px; color: #666; font-size: 20px; line-height: 30px; text-align: center;}
.Plogin .login_box {position: relative; width: 690px; margin: 54px auto 0; padding: 70px 95px ; border: 1px solid #dde2e5; border-radius: 25px; box-shadow: 3px 4px 5px #ccc;}
.Plogin .login_box {position: relative; width: 690px; margin: 54px auto 0; padding: 30px 50px ; border: 1px solid #dde2e5; border-radius: 25px; box-shadow: 3px 4px 5px #ccc;}
.Plogin .login_box .group {display: block; width: 320px;}
.Plogin .login_box input[type=text],
.Plogin .login_box input[type=password] {width: 100%; height: 46px; padding: 0 20px; border: 0; border-radius: 8px; color: #666; font-size: 16px; background: #f5f5f5;}
.Plogin .login_box input[type=password] {height: 50px; border-top-right-radius: 10px; border-bottom-right-radius: 10px;}
/*.Plogin .login_box input[type=text],*/
/*.Plogin .login_box input[type=password] {width: 100%; height: 46px; padding: 0 20px; border: 0; border-radius: 8px; color: #666; font-size: 16px; background: #f5f5f5;}*/
.Plogin .login_box .group input + input {margin-top: 18px;}
.Plogin .login_box input[type=text]:-ms-input-placeholder,
.Plogin .login_box input[type=password]:-ms-input-placeholder {color: #aaa; opacity: 1;}
.Plogin .login_box button {display: block; position: absolute; left: 435px; top: 70px; width: 160px; height: 110px; border-radius: 8px; color: #fff; font-size: 20px; font-weight: 500; text-align: center; line-height: 110px; background: #169bd5;}
.Plogin .login_box button span {display: block; position: relative; height: 100%;}
.Plogin .login_box button {width: 100%; height: 50px; font-size: 15px;}
.Plogin .login_box a {font-size: 15px;}
/*.Plogin .login_box button {display: block; width: 160px; height: 110px; border-radius: 8px; color: #fff; font-size: 20px; font-weight: 500; text-align: center; line-height: 110px; background: #169bd5;}*/
/*.Plogin .login_box button span {display: block; position: relative; height: 100%;}*/
.line_t {height: 15px; border-bottom: 1px solid #D6D6D6; }
.line_b {height: 15px; border-top: 1px solid #C2C2C2; }
.Plogin .login_box .chk {margin-top: 20px;}
.Plogin .login_box .chk em {display: inline-block; height: 30px; margin-left: 40px; color: #666; font-size: 16px;}
.Plogin .login_box .chk label {display: inline-block; height: 30px; color: #666; font-size: 16px;}
.Plogin .login_box .chk em {display: inline-block; height: 30px; color: #666; font-size: 15px;}
.Plogin .login_box .chk em:nth-child(2) {padding: 0 10px;}
.Plogin .login_box .chk label {display: inline-block; height: 30px; color: #666; font-size: 15px;}
.Plogin .list {margin-top: 44px; padding: 0 360px;}
.Plogin .list li {position: relative; padding-left: 15px; color: #666; font-size: 16px; line-height: 26px;}
.Plogin .list li::before {content: ""; display: block; position: absolute; left: 0; top: 12px; width: 4px; height: 4px; background: #666;}
.Plogin .list li + li {margin-top: 5px;}
.Pjoin h1 {color: #222; font-size: 48px; font-weight: 500; letter-spacing: -2px; line-height: 48px; text-align: center;}
.Pjoin .join_box {position: relative; width: 690px; margin: 54px auto 0; padding: 70px 95px; border: 1px solid #dde2e5; border-radius: 25px; box-shadow: 3px 4px 5px #ccc;}
.Pjoin h1 {color: #222; font-size: 30px; font-weight: 600; text-align: center; padding-top: 30px;}
.Pjoin .join_box {width: 690px; margin: 40px auto 0; padding: 30px 50px; border: 1px solid #dde2e5; border-radius: 25px; box-shadow: 3px 4px 5px #ccc;}
.Pjoin .join_box input[type=text],
.Pjoin .join_box input[type=password] {width: 100%; height: 46px; padding: 0 20px; border: 0; border-radius: 8px; color: #666; font-size: 16px; background: #f5f5f5;}
.Pjoin .join_box .group input + input {margin-top: 18px;}
.Pjoin .join_box input[type=text]:-ms-input-placeholder,
.Pjoin .join_box input[type=password]:-ms-input-placeholder {color: #aaa; opacity: 1;}
.Pjoin .join_box label {padding-top: 20px; font-weight: 700;}
.Pjoin .join_box .chk {margin-top: 20px;}
.Pjoin .join_box .chk em {display: inline-block; height: 30px; margin-left: 40px; color: #666; font-size: 16px;}
.Pjoin .join_box button {width: 500px;height: 50px;border-radius: 8px;color: #fff;font-size: 20px;font-weight: 500;text-align: center;line-height: 50px;background: #169bd5;}
.Pjoin .join_box button:disabled {background: rgba(22, 155, 213, 0.4); cursor: auto;}
.Pjoin .join_box button span {display: block; position: relative; height: 100%;}
.Pjoin .join_box .list li {position: relative; padding-left: 15px; color: #666; font-size: 16px; line-height: 26px;}
.Pjoin .join_box button {width: 50%; padding-top: 10px; }
/*.Pjoin .join_box button {width: 500px;height: 50px;border-radius: 8px;color: #fff;font-size: 20px;font-weight: 500;text-align: center;line-height: 50px;background: #169bd5;}*/
/*.Pjoin .join_box button:disabled {background: rgba(22, 155, 213, 0.4); cursor: auto;}*/
/*.Pjoin .join_box button span {display: block; position: relative; height: 100%;}*/
.Pjoin .join_box .list li {padding-left: 15px; color: #666; font-size: 13px; line-height: 23px;}
.Pjoin .join_box .list li + li {margin-top: 5px;}
.radius_r {border-top-right-radius: 8px !important; border-bottom-right-radius: 8px !important;}
/* Board */
/* 메인 */
.P_MAIN {position: relative; background: #f5f5f5;}
.P_MAIN::before {content: ""; display: block; position: absolute; left: 0; top: 0; width: 100%; height: 360px; background: #fff;}
.P_MAIN .c_wrap {position: relative;}
.P_MAIN .colbox::after {content: ""; display: block; clear: both;}
.P_MAIN .colbox > * {float: left;}
.P_MAIN .colbox .left_col {width: 620px; margin-right: 60px; padding-top: 30px;}
.P_MAIN .colbox .left_col img {max-width: 100%; border-radius: 38px; box-shadow: 8px 8px 13px #ccc;}
.P_MAIN .colbox .right_col {width: 620px; padding-top: 25px;}
/*.P_MAIN {position: relative; background: #f5f5f5;}*/
/*.P_MAIN::before {content: ""; display: block; position: absolute; left: 0; top: 0; width: 100%; height: 360px; background: #fff;}*/
.P_MAIN .c_wrap .topbox {width: 100%; height:490px; background: #F8F8F8; margin: 0 auto;}
.P_MAIN .c_wrap .topbox .topbox_1 {width: 360px; height: 390px; border: 1px solid #dde2e5; border-radius: 25px; box-shadow: 0 4px 5px #ccc; background: #fff; padding: 30px;}
.P_MAIN .c_wrap .topbox .topbox_1 .topbox_11{font-size: 22px; font-weight: 700; padding-bottom: 20px;}
.P_MAIN .c_wrap .topbox .topbox_1 .topbox_12{font-size: 14px; }
.P_MAIN .c_wrap .topbox .topbox_1 .topbox_13{font-size: 12px; font-weight: 700; color: #22498E; padding-bottom: 30px;}
.P_MAIN .c_wrap .topbox .topbox_1 .topbox_14{font-size: 17px; font-weight: 600; line-height: 42px; white-space: nowrap;}
.P_MAIN .c_wrap .topbox .topbox_2 {width: 630px; height: 390px; border: 1px solid #dde2e5; border-radius: 25px; box-shadow: 0 4px 5px #ccc; background: #fff; margin: 0 25px; padding: 30px;}
.P_MAIN .c_wrap .topbox .topbox_2 .topbox_11{font-size: 22px; font-weight: 700; padding-bottom: 20px;}
.P_MAIN .c_wrap .topbox .topbox_2 .topbox_12{font-size: 19px; padding-bottom: 70px;}
.P_MAIN .c_wrap .topbox .topbox_2 .topbox_13 {width: 80px; height: 80px; border-radius: 50%; background: #E2E9F6; display: flex; justify-content: center; align-items: center; margin-left: 1.2rem;}
.P_MAIN .c_wrap .topbox .topbox_2 .topbox_14{font-size: 16px; font-weight: 600; text-align: center; line-height: 40px; color: #222; padding: 10px 0;}
.P_MAIN .c_wrap .topbox .topbox_2 .topbox_15{text-align: center; line-height: 40px;}
.P_MAIN .c_wrap .topbox .topbox_3 {width: 360px; height: 390px; border: 1px solid #dde2e5; border-radius: 25px; box-shadow: 0 4px 5px #ccc; background: #fff; padding: 30px;}
.P_MAIN .c_wrap .topbox .topbox_3 .topbox_11{font-size: 22px; font-weight: 700; padding-bottom: 20px;}
.P_MAIN .c_wrap .login_search {border: 1px solid #6F6F6F; border-radius: 10px; overflow: hidden;}
.P_MAIN .c_wrap .login_search_word {max-height: 125px; padding: 5px; overflow-x: auto; overflow-y: auto;}
.P_MAIN .c_wrap .menubox {width: 100%; height:200px;}
.P_MAIN .c_wrap .menubox .menubox_n {padding: 0 50px;}
.P_MAIN .c_wrap .menubox .menu_img {width: 100px; height: 100px; border-radius: 50%; background: #E2E9F6; display: flex; justify-content: center; align-items: center;}
.P_MAIN .c_wrap .menubox .menu_text {font-size: 16px; font-weight: 700; padding-top: 10px; justify-content: center; color: #222;}
.P_MAIN .c_wrap .qnabox {width: 100%; height:390px; background: #F8FAFC;}
.P_MAIN .c_wrap .qnabox .qnabox_1 {width: 1400px; height: 100px; margin:0 auto; padding: 0 10px; font-size: 35px; font-weight: 700; color: #004994;}
.P_MAIN .c_wrap .qnabox .qnabox_11 {width: 50%; font-size: 35px; font-weight: 700; color: #004994;}
.P_MAIN .c_wrap .qnabox .qnabox_12 {width: 50%; font-size: 20px; font-weight: 500; color: #6C6C6C;}
.P_MAIN .c_wrap .qnabox .qnabox_12 .rounded_circle_qna {width: 32px; height: 32px; border-radius: 50%; background: #FFF; box-shadow: 0 4px 5px #ccc; align-items: center; text-align: center; display: flex; }
.P_MAIN .c_wrap .qnabox .qnabox_2 {width: 1400px; margin:0 auto; }
.P_MAIN .c_wrap .qnabox .qnabox_n {width: 330px; height: 200px; border: 1px solid #dde2e5; border-radius: 10px; box-shadow: 0 4px 5px #ccc; background: #fff; margin: 20px 10px; padding: 30px;}
.P_MAIN .c_wrap .qnabox .qnabox_n .qnabox_n_file {background: #EBF1FF; border-radius: 10px; color: #22498E; font-size: 12px;}
.P_MAIN .c_wrap .qnabox .qnabox_n .qnabox_n_title {height: 100px; font-size: 18px; overflow: hidden; text-overflow: ellipsis; font-weight: 600;}
.P_MAIN .c_wrap .qnabox .qnabox_n .qnabox_n_date {font-size: 13px; }
.P_MAIN .c_wrap .numbox {width: 100%; height:200px; background: #4C6C84;}
.P_MAIN .c_wrap .numbox .numbox_n {width: 300px; color: #fff; text-align: center;}
.P_MAIN .c_wrap .numbox .num_text {font-size: 22px; font-weight: 700;}
.P_MAIN .c_wrap .numbox .num_count {font-size: 40px; font-weight: 700; padding-top: 10px;}
.P_MAIN .c_wrap .numbox .num_count span.unit {font-size: 22px;}
.P_MAIN .c_wrap .bbsbox {width: 100%; height:430px; border-bottom: 1px solid #E6E6E6; margin: 0 auto; padding-top: 85px;}
.P_MAIN .c_wrap .bbsbox .bbsbox_1 {width: 980px; }
.P_MAIN .c_wrap .bbsbox .bbsbox_2 {width: 370px; margin-left: 50px;}
.P_MAIN .c_wrap .bbsbox .bbsbox_2 img {max-width: 370px; border-radius: 20px; }
.P_MAIN .mini_board {position: relative;}
.P_MAIN .mini_board .tab::after {content: ""; display: block; clear: both;}
.P_MAIN .mini_board .tab li {float: left;}
.P_MAIN .mini_board .tab li + li {margin-left: 40px;}
.P_MAIN .mini_board .tab li a {display: block; position: relative; padding-bottom: 12px; color: #ccc; font-size: 30px; font-weight: 700;}
.P_MAIN .mini_board .tab li a.on {color: #222;}
.P_MAIN .mini_board .tab li a.on::after {content: ""; display: block; position: absolute; left: 0; bottom: 0; width: 100%; height: 4px; background: #0465be;}
.P_MAIN .mini_board .more {display: block; position: absolute; right: 0; top: 16px; height: 16px; padding-left: 27px; color: #444; font-size: 18px; line-height: 16px; background: url(css/images/ico_plus.png) no-repeat;}
.P_MAIN .mini_board .list ul {margin-top: 33px;}
.P_MAIN .mini_board .list ul > li {position: relative;}
.P_MAIN .mini_board .list ul > li + li {margin-top: 10px;}
.P_MAIN .mini_board .list ul > li a {display: block; width: calc(100% - 100px); color: #666; font-size: 20px; text-overflow: ellipsis; white-space: nowrap; overflow: hidden;}
.P_MAIN .mini_board .list ul > li a:hover {color: #222; text-decoration: underline;}
.P_MAIN .mini_board .list ul > li span {position: absolute; right: 0; top: 4px; color: #aaa; font-size: 16px;}
.P_MAIN .mini_board .gallary {display: none;}
.P_MAIN .c_wrap .bannerbox {width: 1400px; height:80px; margin: 0 auto;}
/*.P_MAIN .c_wrap .bannerbox .slick-list {width: 1400px; margin: 0 auto;}*/
.P_MAIN .c_wrap .bannerbox .banner_slide {max-width: 210px; max-height: 60px; border: 1px solid #dde2e5; border-radius: 15px; text-align: center; padding: 10px; margin: 10px;}
.P_MAIN .c_wrap .bannerbox .slick-slide img {max-width: 180px; max-height: 60px;}
.P_MAIN .banner {margin-top: 100px;}
.P_MAIN .banner::after {content: ""; display: block; clear: both;}
.P_MAIN .banner > a {display: block; position: relative; float: left; width: calc(50% - 10px); height: 160px; padding: 38px 0 0 39px; border-radius: 25px; background: #fff; overflow: hidden;}
.P_MAIN .banner > a.bn1::before {content: ""; display: block; position: absolute; right: 30px; top: -70px; width: 130px; height: 130px; border-radius: 50%; background: #bfe6e1;}
.P_MAIN .banner > a.bn2::before {content: ""; display: block; position: absolute; right: 30px; top: -70px; width: 130px; height: 130px; border-radius: 50%; background: #fad6d7;}
.P_MAIN .banner > a strong {display: block; padding-bottom: 8px; position: relative; color: #000; font-size: 26px; font-weight: 700;}
.P_MAIN .banner > a span {display: block; color: #666; font-size: 18px; font-weight: 300; line-height: 24px;}
.P_MAIN .banner > a:nth-child(1) {margin-right: 10px;}
.P_MAIN .banner > a:nth-child(2) {margin-left: 10px;}
/*.P_MAIN .c_wrap {position: relative;}*/
/*.P_MAIN .colbox::after {content: ""; display: block; clear: both;}*/
/*.P_MAIN .colbox > * {float: left;}*/
/*.P_MAIN .colbox .left_col {width: 620px; margin-right: 60px; padding-top: 30px;}*/
/*.P_MAIN .colbox .left_col img {max-width: 100%; border-radius: 38px; box-shadow: 8px 8px 13px #ccc;}*/
/*.P_MAIN .colbox .right_col {width: 620px; padding-top: 25px;}*/
/*.P_MAIN .mini_board {position: relative;}*/
/*.P_MAIN .mini_board .tab::after {content: ""; display: block; clear: both;}*/
/*.P_MAIN .mini_board .tab li {float: left;}*/
/*.P_MAIN .mini_board .tab li + li {margin-left: 40px;}*/
/*.P_MAIN .mini_board .tab li a {display: block; position: relative; padding-bottom: 12px; color: #ccc; font-size: 30px; font-weight: 700;}*/
/*.P_MAIN .mini_board .tab li a.on {color: #222;}*/
/*.P_MAIN .mini_board .tab li a.on::after {content: ""; display: block; position: absolute; left: 0; bottom: 0; width: 100%; height: 4px; background: #0465be;}*/
/*.P_MAIN .mini_board .more {display: block; position: absolute; right: 0; top: 16px; height: 16px; padding-left: 27px; color: #444; font-size: 18px; line-height: 16px; background: url(css/images/ico_plus.png) no-repeat;}*/
/*.P_MAIN .mini_board .list ul {margin-top: 33px;}*/
/*.P_MAIN .mini_board .list ul > li {position: relative;}*/
/*.P_MAIN .mini_board .list ul > li + li {margin-top: 10px;}*/
/*.P_MAIN .mini_board .list ul > li a {display: block; width: calc(100% - 100px); color: #666; font-size: 20px; text-overflow: ellipsis; white-space: nowrap; overflow: hidden;}*/
/*.P_MAIN .mini_board .list ul > li a:hover {color: #222; text-decoration: underline;}*/
/*.P_MAIN .mini_board .list ul > li span {position: absolute; right: 0; top: 4px; color: #aaa; font-size: 16px;}*/
/*.P_MAIN .mini_board .gallary {display: none;}*/
/*.P_MAIN .banner {margin-top: 100px;}*/
/*.P_MAIN .banner::after {content: ""; display: block; clear: both;}*/
/*.P_MAIN .banner > a {display: block; position: relative; float: left; width: calc(50% - 10px); height: 160px; padding: 38px 0 0 39px; border-radius: 25px; background: #fff; overflow: hidden;}*/
/*.P_MAIN .banner > a.bn1::before {content: ""; display: block; position: absolute; right: 30px; top: -70px; width: 130px; height: 130px; border-radius: 50%; background: #bfe6e1;}*/
/*.P_MAIN .banner > a.bn2::before {content: ""; display: block; position: absolute; right: 30px; top: -70px; width: 130px; height: 130px; border-radius: 50%; background: #fad6d7;}*/
/*.P_MAIN .banner > a strong {display: block; padding-bottom: 8px; position: relative; color: #000; font-size: 26px; font-weight: 700;}*/
/*.P_MAIN .banner > a span {display: block; color: #666; font-size: 18px; font-weight: 300; line-height: 24px;}*/
/*.P_MAIN .banner > a:nth-child(1) {margin-right: 10px;}*/
/*.P_MAIN .banner > a:nth-child(2) {margin-left: 10px;}*/
/*.P_MAIN .banner_bot {padding: 60px 0 70px 0;}*/
/*.P_MAIN .banner_bot::after {content: ""; display: block; clear: both;}*/
/*.P_MAIN .banner_bot > div {float: left; width: 310px; height: 480px; padding: 0 30px; border-radius: 30px; text-align: center; background: #fff;}*/
/*.P_MAIN .banner_bot > div + div {margin-left: 20px;}*/
/*.P_MAIN .banner_bot > div > div {height: 410px; padding-top: 232px; border-bottom: 1px solid #e8e8e8;}*/
/*.P_MAIN .banner_bot > div h2 {color: #000; font-size: 26px; font-weight: 700;}*/
/*.P_MAIN .banner_bot > div p {margin-top: 23px; color: #666; font-size: 20px; line-height: 30px;}*/
/*.P_MAIN .banner_bot > div a {display: inline-block; height: 70px; color: #666; font-size: 20px; line-height: 70px;}*/
/*.P_MAIN .banner_bot > div a::before {content: ""; display: inline-block; width: 20px; height: 20px; margin-right: 9px; background: url(css/images/ico_more.png) no-repeat; vertical-align: -2px;}*/
/*.P_MAIN .banner_bot > div.b1 > div {background: url(css/images/ico_bn01.png) no-repeat center 60px;}*/
/*.P_MAIN .banner_bot > div.b2 > div {background: url(css/images/ico_bn02.png) no-repeat center 60px;}*/
/*.P_MAIN .banner_bot > div.b3 > div {background: url(css/images/ico_bn03.png) no-repeat center 60px;}*/
/*.P_MAIN .banner_bot > div.b4 > div {background: url(css/images/ico_bn04.png) no-repeat center 60px;}*/
.P_MAIN .banner_bot {padding: 60px 0 70px 0;}
.P_MAIN .banner_bot::after {content: ""; display: block; clear: both;}
.P_MAIN .banner_bot > div {float: left; width: 310px; height: 480px; padding: 0 30px; border-radius: 30px; text-align: center; background: #fff;}
.P_MAIN .banner_bot > div + div {margin-left: 20px;}
.P_MAIN .banner_bot > div > div {height: 410px; padding-top: 232px; border-bottom: 1px solid #e8e8e8;}
.P_MAIN .banner_bot > div h2 {color: #000; font-size: 26px; font-weight: 700;}
.P_MAIN .banner_bot > div p {margin-top: 23px; color: #666; font-size: 20px; line-height: 30px;}
.P_MAIN .banner_bot > div a {display: inline-block; height: 70px; color: #666; font-size: 20px; line-height: 70px;}
.P_MAIN .banner_bot > div a::before {content: ""; display: inline-block; width: 20px; height: 20px; margin-right: 9px; background: url(css/images/ico_more.png) no-repeat; vertical-align: -2px;}
.P_MAIN .banner_bot > div.b1 > div {background: url(css/images/ico_bn01.png) no-repeat center 60px;}
.P_MAIN .banner_bot > div.b2 > div {background: url(css/images/ico_bn02.png) no-repeat center 60px;}
.P_MAIN .banner_bot > div.b3 > div {background: url(css/images/ico_bn03.png) no-repeat center 60px;}
.P_MAIN .banner_bot > div.b4 > div {background: url(css/images/ico_bn04.png) no-repeat center 60px;}
/* 오늘의 행사 */
.BRD001 .head > span:nth-child(1) {width: 150px;}
@ -141,17 +195,17 @@
.BRD005 .result .list_item > div:nth-child(4) {width: 120px;}
.BRD005 .result .list_item > div:nth-child(5) {width: 100px;}
/* 게시판생성 관리 */
.BRD006 .head > span:nth-child(1) {width: 70px;}
/* 게시판 관리 */
.BRD006 .head > span:nth-child(1) {width: 160px; text-align: left;}
.BRD006 .head > span:nth-child(3) {width: 160px;}
.BRD006 .head > span:nth-child(4) {width: 168px;}
.BRD006 .head > span:nth-child(5) {width: 140px;}
.BRD006 .head > span:nth-child(6) {width: 140px;}
.BRD006 .result .list_item > div:nth-child(1) {width: 70px;}
.BRD006 .head > span:nth-child(4) {width: 70px;}
.BRD006 .head > span:nth-child(5) {width: 70px;}
.BRD006 .head > span:nth-child(6) {width: 120px;}
.BRD006 .result .list_item > div:nth-child(1) {width: 160px; text-align: left;}
.BRD006 .result .list_item > div:nth-child(3) {width: 160px;}
.BRD006 .result .list_item > div:nth-child(4) {width: 168px;}
.BRD006 .result .list_item > div:nth-child(5) {width: 140px;}
.BRD006 .result .list_item > div:nth-child(6) {width: 140px;}
.BRD006 .result .list_item > div:nth-child(4) {width: 70px;}
.BRD006 .result .list_item > div:nth-child(5) {width: 70px;}
.BRD006 .result .list_item > div:nth-child(6) {width: 120px;}
/* 사이트관리 > 사용자관리 > 사용자목록 */
.userList .head > span:nth-child(1) {width: 60px;}
@ -229,16 +283,20 @@
.SITE_INTRO .ds_1 .bot + .tit_5 {margin-top: 46px;}
.SITE_INTRO .ds_1 .msg_1 + .tit_5 {margin-top: 42px;}
.PDS_LIST .pdslist {margin-top: 24px; border-top: 2px solid #dde2e5; background: #f7f7f7;}
.PDS_LIST .pdslist ul {padding-top: 40px;}
/* 홍보자료 */
.PDS_LIST .pdslist {margin-top: 10px; } /* changed by lim margin-top: 24px; border-top: 2px solid #dde2e5; background: #f7f7f7; */
/*.PDS_LIST .pdslist ul {padding-top: 40px; }*/
.PDS_LIST .pdslist ul {display: flex; flex-wrap: wrap; gap: 22px;}
.PDS_LIST .pdslist ul::after {content: ""; display: block; clear: both;}
.PDS_LIST .pdslist ul li {float: left; width: 50%; padding: 0 0 40px 40px;}
.PDS_LIST .pdslist ul li > a {display: block;}
.PDS_LIST .pdslist ul li:last-child {margin-right: 0;}
.PDS_LIST .pdslist ul li {border: 1px solid #B7B7B7; padding: 10px; width: auto;} /* changed by lim float: left; width: 50%; padding: 0 0 40px 40px; */
.PDS_LIST .pdslist ul li > a {display: block; color: #383838;}
.PDS_LIST .pdslist ul li > a::after {content: ""; display: block; clear: both;}
.PDS_LIST .pdslist ul li > a img {display: block; float: left; width: 160px; margin-right: 20px;}
.PDS_LIST .pdslist ul li > a > span {display: block; float: left; width: calc(100% - 180px); padding-right: 10px;}
.PDS_LIST .pdslist ul li > a > span strong {display: block; padding-bottom: 8px; color: #222; font-size: 18px; font-weight: 400;}
.PDS_LIST .pdslist ul li > a > span span {color: #666; font-size: 16px; font-weight: 300; line-height: 26px;}
.PDS_LIST .pdslist ul li > img.promotion {width: 249px; margin-bottom:10px; border: 1px solid #CACACA; border-radius: 10px; cursor: pointer;} /* changed by lim display: block; float: left; margin-right: 20px; */
/*.PDS_LIST .pdslist ul li > a > span {display: block; float: left; width: calc(100% - 180px); padding-right: 10px;}*/
/*.PDS_LIST .pdslist ul li > a > span strong {display: block; padding-bottom: 8px; color: #222; font-size: 18px; font-weight: 400;}*/
/*.PDS_LIST .pdslist ul li > a > span span {font-size: 16px; font-weight: 300; line-height: 26px;}*/
.PDS_LIST .recent {height: 290px; margin-top: 24px; border: 2px solid #dde2e5;}
.PDS_LIST .recent::after {content: ""; display: block; clear: both;}
@ -253,14 +311,22 @@
.PDS_LIST .recent > ul li .ymd {display: block; position: absolute; right: 0; top: 0; height: 30px; color: #666; font-size: 16px; line-height: 30px;}
.PDS_LIST .tit_5 {margin-top: 42px;}
.PDS_LIST .board_list {margin-top: 50px;}
/* 사이트관리 > 게시판현황 > 게시물관리 */
.BRD007 .head > span:nth-child(1) {width: 70px;}
.BRD007 .head > span:nth-child(3) {width: 90px;}
.BRD007 .head > span:nth-child(4) {width: 90px;}
.BRD007 .head > span:nth-child(5) {width: 120px;}
.BRD007 .head > span:nth-child(3) {width: 70px;}
.BRD007 .head > span:nth-child(4) {width: 120px;}
.BRD007 .head > span:nth-child(5) {width: 160px;}
.BRD007 .head > span:nth-child(6) {width: 120px;}
.BRD007 .head > span:nth-child(7) {width: 140px;}
.BRD007 .result .list_item > div:nth-child(1) {width: 70px;}
.BRD007 .result .list_item > div:nth-child(3) {width: 90px;}
.BRD007 .result .list_item > div:nth-child(4) {width: 90px;}
.BRD007 .result .list_item > div:nth-child(5) {width: 120px;}
.BRD007 .result .list_item > div:nth-child(3) {width: 70px;}
.BRD007 .result .list_item > div:nth-child(4) {width: 120px;}
.BRD007 .result .list_item > div:nth-child(5) {width: 160px;}
.BRD007 .result .list_item > div:nth-child(6) {width: 120px;}
.BRD007 .result .list_item > div:nth-child(7) {width: 140px;}
.PDS_REG .pds_desc_edit {margin: 14px 0 30px 0;}
@ -340,6 +406,31 @@
.BOARD_USE_LIST .board_view2 dl dt {width: 185px;}
.BOARD_USE_LIST .board_view2 dl:nth-child(2) dd .f_input2 {width: 490px; margin-left: 17px;}
/* 사용자 게시판 */
.BRD013 .head > span:nth-child(1) {position: relative; width: 60px;}
.BRD013 .head > span:nth-child(2) {position: relative;}
.BRD013 .head > span:nth-child(3) {position: relative; width: 100px;}
.BRD013 .head > span:nth-child(4) {position: relative; width: 100px;}
.BRD013 .head > span:nth-child(5) {position: relative; width: 120px;}
.BRD013 .head > span:nth-child(6) {width: 80px;}
.BRD013 .head > span:nth-child(-n+5)::after {position: absolute; content: ''; right: 0; bottom: 0; height: 50%; border-right: 1px solid #B5B5B5;}
.BRD013 .result .list_item > div:nth-child(1) {width: 60px;}
.BRD013 .result .list_item > div:nth-child(2) {text-overflow: ellipsis; white-space: nowrap; overflow: hidden;}
.BRD013 .result .list_item > div:nth-child(3) {width: 100px;}
.BRD013 .result .list_item > div:nth-child(4) {width: 100px;}
.BRD013 .result .list_item > div:nth-child(5) {width: 120px;}
.BRD013 .result .list_item > div:nth-child(6) {width: 80px;}
/* 사용자 영문건설기준 */
.BRD014 .head > span:nth-child(1) {position: relative; width: 30%; background: #22498E; color: #fff; border-right: 2px solid #657E9E;}
.BRD014 .head > span:nth-child(2) {position: relative; width: 35%; background: #22498E; color: #fff; border-right: 2px solid #657E9E;}
.BRD014 .head > span:nth-child(3) {position: relative; width: 35%; background: #22498E; color: #fff; border-right: 2px solid #657E9E;}
.BRD014 .result .list_item1 > div:nth-child(1) {width: 30%; border-right: 2px solid #657E9E;}
.BRD014 .result .list_item1 > div:nth-child(2) {width: 35%; border-right: 2px solid #657E9E;}
.BRD014 .result .list_item1 > div:nth-child(3) {width: 35%; }
/* 찾아오시는길 */
.SITE_CONTACT_US .map {margin-top: 43px;}
.SITE_CONTACT_US .map img {max-width: 100%;}
@ -431,20 +522,20 @@
.bookmark:hover{cursor: pointer}
.errorText{color:white; background-color: red; font-size: x-small; vertical-align: bottom; padding: 0 10px;}
/*기준코드 뷰어*/
.titleCheckBox ~ p {display: inline}
.errorCnt{display: inline; color:red;}
.errorText{display: inline; cursor: pointer}
.detailInfoDiv > div > input {margin-right: 5px;}
.docInfoTitle{white-space: nowrap;}
.yearInfo{font-size: 9px}
.yearInfoActive{color: #0d6efd}
.docInfoBtn{--bs-btn-padding-y: 0.1rem;--bs-btn-padding-x: 0.25rem;--bs-btn-font-size: 0.7rem; filter: grayscale(100%);}
.docInfoActive{filter: grayscale(0%);}
.modalYearInfo{font-size: 9px}
.modalYearInfoActive{color: #0d6efd}
.modalDocInfoBtn{--bs-btn-padding-y: 0.1rem;--bs-btn-padding-x: 0.25rem;--bs-btn-font-size: 0.7rem; filter: grayscale(100%);}
.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;}
/*기준코드 뷰어*/
.titleCheckBox ~ p {display: inline}
.errorCnt{display: inline; color:red;}
.errorText{display: inline; cursor: pointer}
.detailInfoDiv > div > input {margin-right: 5px;}
.docInfoTitle{white-space: nowrap;}
.yearInfo{font-size: 9px}
.yearInfoActive{color: #0d6efd}
.docInfoBtn{--bs-btn-padding-y: 0.1rem;--bs-btn-padding-x: 0.25rem;--bs-btn-font-size: 0.7rem; filter: grayscale(100%);}
.docInfoActive{filter: grayscale(0%);}
.modalYearInfo{font-size: 9px}
.modalYearInfoActive{color: #0d6efd}
.modalDocInfoBtn{--bs-btn-padding-y: 0.1rem;--bs-btn-padding-x: 0.25rem;--bs-btn-font-size: 0.7rem; filter: grayscale(100%);}
.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;}

View File

@ -12,7 +12,7 @@ function EgovAboutHistory() {
<div className="location">
<ul>
<li><Link to={URL.MAIN} className="home" >Home</Link></li>
<li><Link to={URL.ABOUT}>사이트 소개</Link></li>
<li><Link to={URL.ABOUT}>센터 소개</Link></li>
<li>연혁</li>
</ul>
</div>
@ -26,17 +26,17 @@ function EgovAboutHistory() {
<div className="contents SITE_INTRO" id="contents">
{/* <!-- 본문 --> */}
<h1 className="tit_3">사이트 소개</h1>
<h1 className="tit_3">연혁</h1>
<p className="txt_1">표준프레임워크 경량환경 포털사이트를 소개합니다.</p>
{/*<p className="txt_1">표준프레임워크 경량환경 포털사이트를 소개합니다.</p>*/}
<h2 className="tit_4">전자정부표준프레임워크 연혁</h2>
<h3 className="tit_5">연혁</h3>
<p className="msg_1">표준프레임워크 활성화 전담조직으로 한국정보화진흥원(NIA) 2010 11 4 표준프레임워크센터 <br/>
설립되었으며 정책지원, 글로벌 확산 등을 담당할 NIA 인력과 R&D, 기술지원 등을 담당할 외부 민간 전문가로 <br/>
구성되었습니다.</p>
{/*<h2 className="tit_4">전자정부표준프레임워크 연혁</h2>*/}
{/*<h3 className="tit_5">연혁</h3>*/}
{/*<p className="msg_1">표준프레임워크 활성화 전담조직으로 한국정보화진흥원(NIA)에 2010년 11월 4일 「표준프레임워크센터」가 <br/>*/}
{/* 설립되었으며 정책지원, 글로벌 확산 등을 담당할 NIA 인력과 R&D, 기술지원 등을 담당할 외부 민간 전문가로 <br/>*/}
{/* 구성되었습니다.</p>*/}
{/* <!--// 본문 --> */}
</div>

View File

@ -12,8 +12,8 @@ function EgovAboutLocation() {
<div className="location">
<ul>
<li><Link to={URL.MAIN} className="home" >Home</Link></li>
<li><Link to={URL.ABOUT}>사이트 소개</Link></li>
<li>찾아오시는</li>
<li><Link to={URL.ABOUT}>센터 소개</Link></li>
<li>찾아오시는 </li>
</ul>
</div>
{/* <!--// Location --> */}
@ -26,64 +26,64 @@ function EgovAboutLocation() {
<div className="contents SITE_CONTACT_US" id="contents">
{/* <!-- 본문 --> */}
<h1 className="tit_3">사이트 소개</h1>
<h1 className="tit_3">찾아오시는 </h1>
<p className="txt_1">표준프레임워크 경량환경 포털사이트를 소개합니다.</p>
{/*<p className="txt_1">표준프레임워크 경량환경 포털사이트를 소개합니다.</p>*/}
<h2 className="tit_4">찾아오시는길</h2>
{/*<h2 className="tit_4">찾아오시는길</h2>*/}
<div className="map">
<a href="https://naver.me/FHYuP0ok" target="_blank" rel="noreferrer">
<img src="/assets/images/map.png" alt="" />
</a>
</div>
{/*<div className="map">*/}
{/* <a href="https://naver.me/FHYuP0ok" target="_blank" rel="noreferrer">*/}
{/* <img src="/assets/images/map.png" alt="" />*/}
{/* </a>*/}
{/*</div>*/}
<div className="addr">
<div className="left_col">
<h3>표준프레임워크센터 주소</h3>
<dl>
<dt>도로명주소</dt>
<dd>04513 서울특별시 중구 세종대로 39 대한서울상공회의소 7</dd>
</dl>
<dl>
<dt>지번주소</dt>
<dd>04513 서울특별시 중구 남대문로4가 45 대한서울상공회의소 7</dd>
</dl>
</div>
<div className="right_col">
<h3>QR코드로 위치알아보기</h3>
<p>스마트폰에서 QR코드<br />
리더를 이용해 사진·<br />
지도 다양한 정보를<br />
확인하세요.</p>
<img className="qr" src="/assets/images/qrcode.png" alt="qr code" />
</div>
</div>
{/*<div className="addr">*/}
{/* <div className="left_col">*/}
{/* <h3>표준프레임워크센터 주소</h3>*/}
{/* <dl>*/}
{/* <dt>도로명주소</dt>*/}
{/* <dd>04513 서울특별시 중구 세종대로 39 대한서울상공회의소 7층</dd>*/}
{/* </dl>*/}
{/* <dl>*/}
{/* <dt>지번주소</dt>*/}
{/* <dd>04513 서울특별시 중구 남대문로4가 45 대한서울상공회의소 7층</dd>*/}
{/* </dl>*/}
{/* </div>*/}
{/* <div className="right_col">*/}
{/* <h3>QR코드로 위치알아보기</h3>*/}
{/* <p>스마트폰에서 QR코드<br />*/}
{/* 리더를 이용해 사진·<br />*/}
{/* 지도 등 다양한 정보를<br />*/}
{/* 확인하세요.</p>*/}
{/* <img className="qr" src="/assets/images/qrcode.png" alt="qr code" />*/}
{/* </div>*/}
{/*</div>*/}
<div className="way">
<div className="left_col">
<h3>찾아오시는 </h3>
<dl>
<dt>지하철 2호선</dt>
<dd>시청역 9 출구 5분거리</dd>
</dl>
<dl>
<dt>지하철 1호선</dt>
<dd>서울역 3 출구 5분거리</dd>
</dl>
</div>
<div className="right_col">
<h3>연락처</h3>
<dl>
<dt className="call">전화</dt>
<dd>0000-0000</dd>
</dl>
<dl>
<dt className="email">이메일</dt>
<dd>egovframeexample@gmail.com</dd>
</dl>
</div>
</div>
{/*<div className="way">*/}
{/* <div className="left_col">*/}
{/* <h3>찾아오시는 길</h3>*/}
{/* <dl>*/}
{/* <dt>지하철 2호선</dt>*/}
{/* <dd>시청역 9번 출구 5분거리</dd>*/}
{/* </dl>*/}
{/* <dl>*/}
{/* <dt>지하철 1호선</dt>*/}
{/* <dd>서울역 3번 출구 5분거리</dd>*/}
{/* </dl>*/}
{/* </div>*/}
{/* <div className="right_col">*/}
{/* <h3>연락처</h3>*/}
{/* <dl>*/}
{/* <dt className="call">전화</dt>*/}
{/* <dd>0000-0000</dd>*/}
{/* </dl>*/}
{/* <dl>*/}
{/* <dt className="email">이메일</dt>*/}
{/* <dd>egovframeexample@gmail.com</dd>*/}
{/* </dl>*/}
{/* </div>*/}
{/*</div>*/}
{/* <!--// 본문 --> */}
</div>

View File

@ -12,8 +12,8 @@ function EgovAboutOrganization() {
<div className="location">
<ul>
<li><Link to={URL.MAIN} className="home" >Home</Link></li>
<li><Link to={URL.ABOUT}>사이트 소개</Link></li>
<li>조직소개</li>
<li><Link to={URL.ABOUT}>센터 소개</Link></li>
<li>주요업무</li>
</ul>
</div>
{/* <!--// Location --> */}
@ -26,17 +26,17 @@ function EgovAboutOrganization() {
<div className="contents SITE_INTRO" id="contents">
{/* <!-- 본문 --> */}
<h1 className="tit_3">사이트 소개</h1>
<h1 className="tit_3">홍보자료</h1>
<p className="txt_1">표준프레임워크 경량환경 포털사이트를 소개합니다.</p>
{/*<p className="txt_1">표준프레임워크 경량환경 포털사이트를 소개합니다.</p>*/}
<h2 className="tit_4">조직소개</h2>
{/*<h2 className="tit_4">조직소개</h2>*/}
<h3 className="tit_5">조직</h3>
{/*<h3 className="tit_5">조직</h3>*/}
<p className="msg_1">오픈커뮤니티의 초기 정착을 위해 표준프레임워크 개발 참여자와 국내 주요 오픈커뮤니티의 운영자·전문가를 리딩<br />
그룹(PMC, 커미터)으로 구성 오픈커뮤니티의 지속적인 확대·발전을 위해 프로젝트 활동에 적극적으로 참여하는 <br />
커뮤니티 회원이 리딩그룹의 역할을 획득할 있도록 투명하고 공정한 의사결정 체계를 수립</p>
{/*<p className="msg_1">오픈커뮤니티의 초기 정착을 위해 표준프레임워크 개발 참여자와 국내 주요 오픈커뮤니티의 운영자·전문가를 리딩<br />*/}
{/* 그룹(PMC, 커미터)으로 구성 오픈커뮤니티의 지속적인 확대·발전을 위해 프로젝트 활동에 적극적으로 참여하는 <br />*/}
{/* 커뮤니티 회원이 리딩그룹의 역할을 획득할 수 있도록 투명하고 공정한 의사결정 체계를 수립</p>*/}
{/* <!--// 본문 --> */}
</div>

View File

@ -0,0 +1,179 @@
import React, { useEffect, useState, useRef } from 'react';
import {Link, useLocation, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';
import Modal from 'react-bootstrap/Modal';
import { default as EgovLeftNav } from 'components/leftmenu/EgovLeftNavAbout';
import URL from "constants/url";
function Promote(){
const [show, setShow] = useState(false);
const [modalContent, setModalContent] = useState({});
const handleClose = () => setShow(false);
const handleShow = (content) => {
setModalContent(content);
setShow(true);
};
const items = [
{
id: 1,
imgSrc: '/assets/images/nanae-1.png',
link: '/support-download-detail',
linkText: '2023년 12월 14호',
modalTitle: '2023년 12월 14호',
modalBody: `
- 교량 건설기준 국제 통용성 분석 연구<br />
- [기고문]건설산업 변화와 디지털 건설기준 도입<br />
- [기고문]인공지능 기술을 활용한 건설기준 중복 상충부 검토<br />
- 건설산업 디지털 전환 동향 파악을 위한 국외출장 결과<br />
- 건설기준 주요 민원사례 소개<br />
- 2023 건설기준위원회 중앙건설기술심의위원회 개최 현황<br />
- 2023 건설기준 ·개정 고시 현황
`
},
{
id: 2,
imgSrc: '/assets/images/nanae-1.png',
link: '/support-download-detail',
linkText: '2022년 12월 13호',
modalTitle: '2022년 12월 13호',
modalBody: `
- 다른 내용1<br />
- 다른 내용2<br />
- 다른 내용3<br />
- 다른 내용4<br />
`
},
//
];
return (
<div className="container">
<div className="c_wrap">
{/* <!-- Location --> */}
<div className="location">
<ul>
<li><Link to={URL.MAIN} className="home f" >Home</Link></li>
<li><Link to={URL.ABOUT}>센터소개</Link></li>
<li>홍보자료</li>
</ul>
</div>
{/* <!--// Location --> */}
<div className="layout">
{/* <!-- Navigation --> */}
<EgovLeftNav></EgovLeftNav>
{/* <!--// Navigation --> */}
<div className="contents PDS_LIST" id="contents">
{/* <!-- 본문 --> */}
<h1 className="tit_3 fs">홍보자료</h1>
<Row className="justify-content-between">
<Col><img src={"/assets/images/t_count.png"} /> 전체: <span className={"text-danger"}>14</span></Col>
<Col className={"text-end"}>PDF 파일을 보시려면 PC에 <img src="/assets/images/pdf1.png" alt="Adobe Reader" className={"pt-1"}/> <a href="https://get.adobe.com/kr/reader/" target="_blank" rel="noopener noreferrer">Adobe Reader</a> 설치하셔야 합니다.</Col>
</Row>
<div className="pdslist">
<ul>
{items.map(item => (
<React.Fragment key={item.id}>
<li>
<img src="/assets/images/nanae-1.png" alt="" className={"promotion"} onClick={() => handleShow({ title: item.modalTitle, body: item.modalBody })} />
<Link to="">
<img src="/assets/images/pdf.png" alt=""/> <strong>{item.linkText}</strong>
</Link>
</li>
</React.Fragment>
))}
<li>
<img src="/assets/images/nanae-1.png" alt="" className={"promotion"} />
<Link to="">
<img src="/assets/images/pdf.png" alt=""/> <strong>2022 12 13</strong>
</Link>
</li>
<li>
<img src="/assets/images/nanae-1.png" alt="" className={"promotion"} />
<Link to="">
<img src="/assets/images/pdf.png" alt=""/> <strong>2021 12 12</strong>
</Link>
</li>
<li>
<img src="/assets/images/nanae-1.png" alt="" className={"promotion"} />
<Link to="">
<img src="/assets/images/pdf.png" alt=""/> <strong>2020 12 11</strong>
</Link>
</li>
<li>
<img src="/assets/images/nanae-1.png" alt="" className={"promotion"} />
<Link to="">
<img src="/assets/images/pdf.png" alt=""/> <strong>2023 12 14</strong>
</Link>
</li>
<li>
<img src="/assets/images/nanae-1.png" alt="" className={"promotion"} />
<Link to="">
<img src="/assets/images/pdf.png" alt=""/> <strong>2022 12 13</strong>
</Link>
</li>
<li>
<img src="/assets/images/nanae-1.png" alt="" className={"promotion"} />
<Link to="">
<img src="/assets/images/pdf.png" alt=""/> <strong>2021 12 12</strong>
</Link>
</li>
</ul>
</div>
<Row className="board_bot justify-content-between">
<Col xs={3} className=""></Col>
{/* <!-- Paging --> */}
<Col xs={6} className="paging">
<ul>
<li className="btn"><button to="" className="first">처음</button></li>
<li className="btn"><button to="" className="prev">이전</button></li>
<li><button to="" className="cur">1</button></li>
<li><button to="">2</button></li>
<li><button to="">3</button></li>
<li><button to="">4</button></li>
<li><button to="">5</button></li>
<li><button to="">6</button></li>
<li><button to="">7</button></li>
<li><button to="">8</button></li>
<li><button to="">9</button></li>
<li><button to="">10</button></li>
<li className="btn"><button to="" className="next">다음</button></li>
<li className="btn"><button to="" className="last">마지막</button></li>
</ul>
</Col>
{/* <!--/ Paging --> */}
<Col xs={3} className="text-end"></Col>
</Row>
{/* <!--// 본문 --> */}
</div>
</div>
</div>
<Modal show={show} onHide={handleClose}>
<Modal.Header closeButton>
<Modal.Title>{modalContent.title}</Modal.Title>
</Modal.Header>
<Modal.Body dangerouslySetInnerHTML={{ __html: modalContent.body }}></Modal.Body>
{/*<Modal.Footer>*/}
{/* <Button variant="secondary" onClick={handleClose}>*/}
{/* 닫기*/}
{/* </Button>*/}
{/*</Modal.Footer>*/}
</Modal>
</div>
);
}
export default Promote;

View File

@ -11,8 +11,8 @@ function EgovAboutSite() {
<div className="location">
<ul>
<li><Link to="" className="home">Home</Link></li>
<li><Link to="">사이트 소개</Link></li>
<li>소개</li>
<li><Link to="">센터 소개</Link></li>
<li>인사말</li>
</ul>
</div>
{/* <!--// Location --> */}
@ -25,73 +25,73 @@ function EgovAboutSite() {
<div className="contents SITE_INTRO" id="contents">
{/* <!-- 본문 --> */}
<h1 className="tit_3">사이트 소개</h1>
<h1 className="tit_3">인사말</h1>
<p className="txt_1">표준프레임워크 경량환경의 개요와 연혁, 조직소개,<br/>
표준프레임워크센터의 약도 등의 정보를 제공하고 있습니다.</p>
{/*<p className="txt_1">표준프레임워크 경량환경의 개요와 연혁, 조직소개,<br/>*/}
{/* 표준프레임워크센터의 약도 등의 정보를 제공하고 있습니다.</p>*/}
<h2 className="tit_4">전자정부표준프레임워크 소개</h2>
{/*<h2 className="tit_4">전자정부표준프레임워크 소개</h2>*/}
<h3 className="tit_5">개요</h3>
{/*<h3 className="tit_5">개요</h3>*/}
<p className="msg_1">전자정부 표준 프레임워크는 응용SW의 구성기반이 되며 응용SW실행 필요한 기본 기능을 제공하는 환경이다.<br/>
전자정부 표준 프레임워크는 전자정부 서비스의 품질향상 정보화 투자 효율성 향상 위해 개발 프레임워크<br/>
표준을 정립하고, 개발 프레임워크 표준 적용을 통한 응용 SW의 표준화 품질과 재사용성 향상을 목표로 한다.</p>
<div className="ds_1">
{/*<p className="msg_1">전자정부 표준 프레임워크는 응용SW의 구성기반이 되며 응용SW실행 시 필요한 기본 기능을 제공하는 환경이다.<br/>*/}
{/* 전자정부 표준 프레임워크는 ‘전자정부 서비스의 품질향상 및 정보화 투자 효율성 향상’을 위해 개발 프레임워크<br/>*/}
{/* 표준을 정립하고, 개발 프레임워크 표준 적용을 통한 응용 SW의 표준화 및 품질과 재사용성 향상을 목표로 한다.</p>*/}
<h4 className="t_1">전자정부 서비스 품질향상 정보화투자 효율성 향상</h4>
<ul className="li_1">
<li>국가 정보화<br/>투자효율성 제고</li>
<li>중소SI업체<br/>경쟁력 확보</li>
<li>선진 국가정보화<br/>기반환경 제공</li>
</ul>
<p className="t_2">전자정부표준프레임워크<br/>활용</p>
{/*<div className="ds_1">*/}
<div className="bot">
<h4 className="t_3">전자정부표준프레임워크 구축 적용 요구</h4>
<ul>
<li><span>특정업체 종속성 발생으로<br/>
인한 공정경쟁 저하 사업자<br/>
변경 예산낭비</span></li>
<li><span>기관별/사업별 개별적인<br/>
정보화 사업추진으로 중복개발</span></li>
<li><span>표준화된 공통 개발기반 부재로<br/>
시스템간 상호 운용성 <br/>
재사용성 저하</span></li>
</ul>
<p className="t_4">전자정부표준프레임워크는 응용SW의 구성기반이 되며 응용SW실행 필요한 기본 기능을 제공하는 환경으로
정보시스템 구축 특정 대기업의 프레임워크로 구축·운영되어, 사업자 종속-비용증가 중소기업의 입찰제한
등의 폐단이 발생하는 것을 방지하기 위한 목적과 전자정부 서비스의 품질향상 정보화 투자 효율성 향상
위해 개발 프레임워크 표준을 정립하고, 개발 프레임워크 표준 적용을 통한 응용 SW의 표준화 품질과
재사용성 향상을 목표로 한다.</p>
</div>
{/* <h4 className="t_1">전자정부 서비스 품질향상 및 정보화투자 효율성 향상</h4>*/}
{/* */}
{/* <ul className="li_1">*/}
{/* <li>국가 정보화<br/>투자효율성 제고</li>*/}
{/* <li>중소SI업체<br/>경쟁력 확보</li>*/}
{/* <li>선진 국가정보화<br/>기반환경 제공</li>*/}
{/* </ul>*/}
{/* */}
{/* <p className="t_2">전자정부표준프레임워크<br/>활용</p>*/}
<h3 className="tit_5">배경</h3>
<p className="msg_1">현재 전자정부는 유사한 기능을 가지는 다양한 종류 버전의 프레임워크를 개별 시스템 단위로 적용/관리하고
있으며, 이에 따라 다양한 문제점들이 발생하고 있다. 전자정부에 적용된 개발프레임워크는 Black Box 형태로
제공되어 사업자의 기술지원 없이는 응용 SW를 유지보수하기 어렵기 때문에 사업자에 대한 의존성이 발생한다.
복수개의 개발프레임워크가 적용된 사업의 경우, 프레임워크에 따라 개발표준 정의, 개발자수급, 교육시행
별도의 유지보수 체계를 갖추는 중복 투자가 발생하며, 개발프레임워크의 체계적인 관리절차의 미비로 동일
개발프레임워크라 하더라도 버전 관리에 어려움이 있다.전자정부의 프레임워크의 표준화는 사업자 고유 개발
프레임워크에 대한 기술 종속성을 배제하고 표준화를 통해 응용 SW의 표준화와 품질, 재사용성을 향상시키며,
개발 프레임워크의 유지 보수 단일화를 통한 투자 효율성을 높인다.</p>
<h3 className="tit_5">특징</h3>
<p className="msg_1">현재 전자정부는 유사한 기능을 가지는 다양한 종류 버전의 프레임워크를 개별 시스템 단위로 적용/관리하고
있으며, 이에 따라 다양한 문제점들이 발생하고 있다. 전자정부에 적용된 개발프레임워크는 Black Box 형태로
제공되어 사업자의 기술지원 없이는 응용 SW를 유지보수하기 어렵기 때문에 사업자에 대한 의존성이 발생한다.
복수개의 개발프레임워크가 적용된 사업의 경우, 프레임워크에 따라 개발표준 정의, 개발자수급, 교육시행
별도의 유지보수 체계를 갖추는 중복 투자가 발생하며, 개발프레임워크의 체계적인 관리절차의 미비로 동일
개발프레임워크라 하더라도 버전 관리에 어려움이 있다.전자정부의 프레임워크의 표준화는 사업자 고유 개발
프레임워크에 대한 기술 종속성을 배제하고 표준화를 통해 응용 SW의 표준화와 품질, 재사용성을 향상시키며,
개발 프레임워크의 유지 보수 단일화를 통한 투자 효율성을 높인다.</p>
{/* <div className="bot">*/}
{/* <h4 className="t_3">전자정부표준프레임워크 구축 및 적용 요구</h4>*/}
{/* <ul>*/}
{/* <li><span>특정업체 종속성 발생으로<br/>*/}
{/* 인한 공정경쟁 저하 및 사업자<br/>*/}
{/* 변경 시 예산낭비</span></li>*/}
{/* <li><span>기관별/사업별 개별적인<br/>*/}
{/* 정보화 사업추진으로 중복개발</span></li>*/}
{/* <li><span>표준화된 공통 개발기반 부재로<br/>*/}
{/* 시스템간 상호 운용성 및<br/>*/}
{/* 재사용성 저하</span></li>*/}
{/* </ul>*/}
{/* <p className="t_4">전자정부표준프레임워크는 응용SW의 구성기반이 되며 응용SW실행 시 필요한 기본 기능을 제공하는 환경으로*/}
{/* 정보시스템 구축 시 특정 대기업의 프레임워크로 구축·운영되어, 사업자 종속-비용증가 및 중소기업의 입찰제한*/}
{/* 등의 폐단이 발생하는 것을 방지하기 위한 목적과 ‘전자정부 서비스의 품질향상 및 정보화 투자 효율성 향상’을 */}
{/* 위해 개발 프레임워크 표준을 정립하고, 개발 프레임워크 표준 적용을 통한 응용 SW의 표준화 및 품질과 */}
{/* 재사용성 향상을 목표로 한다.</p>*/}
{/* </div>*/}
</div>
{/* <h3 className="tit_5">배경</h3>*/}
{/* <p className="msg_1">현재 전자정부는 유사한 기능을 가지는 다양한 종류 및 버전의 프레임워크를 개별 시스템 단위로 적용/관리하고*/}
{/* 있으며, 이에 따라 다양한 문제점들이 발생하고 있다. 전자정부에 적용된 개발프레임워크는 Black Box 형태로*/}
{/* 제공되어 사업자의 기술지원 없이는 응용 SW를 유지보수하기 어렵기 때문에 사업자에 대한 의존성이 발생한다.*/}
{/* */}
{/* 복수개의 개발프레임워크가 적용된 사업의 경우, 프레임워크에 따라 개발표준 정의, 개발자수급, 교육시행 등*/}
{/* 별도의 유지보수 체계를 갖추는 중복 투자가 발생하며, 개발프레임워크의 체계적인 관리절차의 미비로 동일*/}
{/* 개발프레임워크라 하더라도 버전 관리에 어려움이 있다.전자정부의 프레임워크의 표준화는 사업자 고유 개발*/}
{/* 프레임워크에 대한 기술 종속성을 배제하고 표준화를 통해 응용 SW의 표준화와 품질, 재사용성을 향상시키며,*/}
{/* 개발 프레임워크의 유지 보수 단일화를 통한 투자 효율성을 높인다.</p>*/}
{/* */}
{/* <h3 className="tit_5">특징</h3>*/}
{/* <p className="msg_1">현재 전자정부는 유사한 기능을 가지는 다양한 종류 및 버전의 프레임워크를 개별 시스템 단위로 적용/관리하고*/}
{/* 있으며, 이에 따라 다양한 문제점들이 발생하고 있다. 전자정부에 적용된 개발프레임워크는 Black Box 형태로*/}
{/* 제공되어 사업자의 기술지원 없이는 응용 SW를 유지보수하기 어렵기 때문에 사업자에 대한 의존성이 발생한다.*/}
{/* */}
{/* 복수개의 개발프레임워크가 적용된 사업의 경우, 프레임워크에 따라 개발표준 정의, 개발자수급, 교육시행 등*/}
{/* 별도의 유지보수 체계를 갖추는 중복 투자가 발생하며, 개발프레임워크의 체계적인 관리절차의 미비로 동일*/}
{/* 개발프레임워크라 하더라도 버전 관리에 어려움이 있다.전자정부의 프레임워크의 표준화는 사업자 고유 개발*/}
{/* 프레임워크에 대한 기술 종속성을 배제하고 표준화를 통해 응용 SW의 표준화와 품질, 재사용성을 향상시키며,*/}
{/* 개발 프레임워크의 유지 보수 단일화를 통한 투자 효율성을 높인다.</p>*/}
{/*</div>*/}
{/* <!--// 본문 --> */}
</div>

View File

@ -0,0 +1,14 @@
import React, { useState } from 'react';
import {Link, useLocation, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
function Sitemap(){
return (
<div>사이트맵</div>
);
}
export default Sitemap;

View File

@ -13,7 +13,8 @@ import RichTextEditor from "../../../components/editor/RichTextEditor";
import AttachFile from "../../../components/file/AttachFile";
function AdminPostMgtEdit({props, reloadFunction}) {
function AdminPostMgtEdit({props, reloadFunction, searchCondition}) {
console.log("@@@ searchCondition : " + JSON.stringify(searchCondition));
console.group("AdminPostMgtEdit");
console.log("[Start] AdminPostMgtEdit ------------------------------");
console.log("AdminPostMgtEdit [props] : ", props);
@ -28,14 +29,14 @@ function AdminPostMgtEdit({props, reloadFunction}) {
item = props;
console.log("@@@ item : " + JSON.stringify(item));
const [modeInfo, setModeInfo] = useState(item != null ? {mode: props.mode} : {mode: CODE.MODE_CREATE});
const [modeInfo, setModeInfo] = useState(props.selectedBbsSeq ? {mode: CODE.MODE_CREATE} : {mode: props.mode});
const [boardDetail, setBoardDetail] = useState({});
console.log("@@@ mode : " + modeInfo.mode);
const [categoryList, setCategoryList] = useState([]);
const retrieveList = useCallback(() => {
const retrieveListURL = '/admin/boards/get-category-and-file-list';
const retrieveListURL = '/admin/boards/posts/get-category-and-file-list';
const requestOptions = {
method: "POST",
@ -68,6 +69,7 @@ function AdminPostMgtEdit({props, reloadFunction}) {
}, []);
const initMode = () => {
console.log("@@@@@@@@@@");
if (modeInfo.mode === CODE.MODE_MODIFY) {
setBoardDetail(item);
setSelectedBbsSeq(props?.bbsSeq);
@ -82,7 +84,7 @@ function AdminPostMgtEdit({props, reloadFunction}) {
formData.append('fixedYn', defaultFixedYn);
formData.append('secretYn', defaultSecretYn);
formData.append('bbsId', form.bbsId.value);
formData.append('bbsSeq', selectedBbsSeq);
formData.append('bbsSeq', selectedBbsSeq ? selectedBbsSeq : props.selectedBbsSeq);
formData.append('bbsContTitle', form.bbsContTitle.value);
formData.append('bbsContents', text);
//
@ -100,7 +102,7 @@ function AdminPostMgtEdit({props, reloadFunction}) {
formData.append('bbsContSeq', props.bbsContSeq);
}
EgovNet.requestFetch(
'/admin/boards/post-mgt',
'/admin/boards/posts/post-mgt',
{
method: "PUT",
body: formData
@ -108,7 +110,7 @@ function AdminPostMgtEdit({props, reloadFunction}) {
(resp) => {
if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
alert("저장되었습니다.");
reloadFunction();
reloadFunction(searchCondition);
} else if (Number(resp.resultCode) === Number(CODE.RCV_ERROR_AUTH)) {
console.log("토큰 갱신중.")
} else {
@ -121,7 +123,7 @@ function AdminPostMgtEdit({props, reloadFunction}) {
function deletePost(post) {
if (window.confirm("삭제하시겠습니까?")) {
EgovNet.requestFetch(
'/admin/boards/post-mgt',
'/admin/boards/posts/post-mgt',
{
method: "DELETE",
headers: {
@ -131,8 +133,7 @@ function AdminPostMgtEdit({props, reloadFunction}) {
},
(resp) => {
if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
alert("삭제되었습니다.")
reloadFunction();
reloadFunction(searchCondition);
} else if (Number(resp.resultCode) === Number(CODE.RCV_ERROR_AUTH)) {
console.log("토큰 갱신중.")
} else {
@ -149,12 +150,11 @@ function AdminPostMgtEdit({props, reloadFunction}) {
const [defaultFixedYn, setDefaultFixedYn] = useState(props?.fixedYn || "N");
const [defaultSecretYn, setDefaultSecretYn] = useState(props?.secretYn || "N");
const [text, setText] = useState(props?.bbsContents);
const [selectedBbsSeq, setSelectedBbsSeq] = useState(null);
const [selectedBbsSeq, setSelectedBbsSeq] = useState(props?.selectedBbsSeq ? props?.selectedBbsSeq : props?.bbsSeq);
const handleSelectChange = (e) => {
const selectedBbsId = e.target.value;
const selectedOption = categoryList.find((item) => item.bbsId === selectedBbsId);
setSelectedBbsSeq(selectedOption.bbsSeq);
const selectedBbsSeq = e.target.value;
setSelectedBbsSeq(selectedBbsSeq);
}
const fileTypes = ["JPG", "PNG", "GIF", "PDF", "HWP", "HWPX", "ZIP", "JPEG", "MP4", "TXT"];
@ -201,37 +201,42 @@ function AdminPostMgtEdit({props, reloadFunction}) {
<Form onSubmit={(e) => {
editPost(e)
}} noValidate>
<dl>
<dt><label htmlFor="siteTitle">상단고정</label><span className="req">필수</span></dt>
<dd>
<Form.Check
type="checkbox"
id="fixedYnCheckbox"
label="상단고정"
checked={defaultFixedYn === 'Y'}
onChange={(e) => setDefaultFixedYn(e.target.checked ? 'Y' : 'N')}
/>
</dd>
</dl>
<dl>
<dt><label htmlFor="siteTitle">비밀글</label><span className="req">필수</span></dt>
<dd>
<Form.Check
type="checkbox"
id="secretYnCheckbox"
label="비밀글"
checked={defaultSecretYn === 'Y'}
onChange={(e) => setDefaultSecretYn(e.target.checked ? 'Y' : 'N')}
/>
</dd>
</dl>
{selectedBbsSeq == '20' ? null : (
<>
<dl>
<dt><label htmlFor="siteTitle">상단고정</label><span className="req">필수</span></dt>
<dd>
<Form.Check
type="checkbox"
id="fixedYnCheckbox"
label="상단고정"
checked={defaultFixedYn === 'Y'}
onChange={(e) => setDefaultFixedYn(e.target.checked ? 'Y' : 'N')}
/>
</dd>
</dl>
<dl>
<dt><label htmlFor="siteTitle">비밀글</label><span className="req">필수</span></dt>
<dd>
<Form.Check
type="checkbox"
id="secretYnCheckbox"
label="비밀글"
checked={defaultSecretYn === 'Y'}
onChange={(e) => setDefaultSecretYn(e.target.checked ? 'Y' : 'N')}
/>
</dd>
</dl>
</>
)}
<dl>
<dt><label htmlFor="siteTitle">카테고리</label><span className="req">필수</span></dt>
<dd>
<Form.Select id="select1" name="bbsId" onChange={handleSelectChange}>
<option value="">선택</option>
{categoryList.map((item) => (
<option key={item.bbsSeq} value={item.bbsId} selected={props?.bbsId === item.bbsId}>{item.bbsTitle}</option>
<option key={item.bbsSeq} value={item.bbsSeq}
selected={props?.mode === CODE.MODE_MODIFY ? item.bbsSeq == props.bbsSeq : item.bbsSeq == props.selectedBbsSeq}>{item.bbsTitle}</option>
))}
</Form.Select>
</dd>
@ -249,30 +254,38 @@ function AdminPostMgtEdit({props, reloadFunction}) {
<AttachFile name="preDataFile" multiple={true} files={files} setFiles={setFiles} serverFiles={serverFiles} fileTypes={fileTypes} deleteFile={deleteFile}/>
</dd>
</dl>
<dl>
<dt><label htmlFor="contents">내용</label><span className="req">필수</span></dt>
<dd>
<RichTextEditor item={text} setText={setText}/>
</dd>
</dl>
{selectedBbsSeq == '20' ? (
<>
<dl>
<dt><label htmlFor="">예시</label><span></span></dt>
<dd>
<img src="/assets/images/예시.png" alt="예시 이미지"/>
</dd>
</dl>
</>
) : (
<>
<dl>
<dt><label htmlFor="contents">내용</label><span className="req">필수</span></dt>
<dd>
<RichTextEditor item={text} setText={setText}/>
</dd>
</dl>
</>
)}
{/* <!-- 버튼영역 --> */}
<div className="board_btn_area">
<div className="left_col btn1">
<button type="submit" className="btn btn_skyblue_h46 w_100">저장
</button>
{modeInfo.mode === CODE.MODE_MODIFY &&
<button type={"button"} className="btn btn_skyblue_h46 w_100" onClick={() => {
<button type={"button"} className="btn btn_red_h46 w_100" onClick={() => {
deletePost(props)
}}>삭제</button>
}
</div>
<div className="right_col btn1">
<button type={"button"} className="btn btn_blue_h46 w_100" onClick={() => {
reloadFunction()
}}>목록
</button>
<button type="submit" className="btn btn_skyblue_h46 w_100">저장</button>
</div>
</div>
{/* <!--// 버튼영역 --> */}

View File

@ -14,6 +14,7 @@ import AdminPostMgtEdit from "./AdminPostMgtEdit";
import Modal from "react-bootstrap/Modal";
import {format} from "date-fns";
import {Form} from "react-bootstrap";
const fileIconPath = require('../../../css/images/ico_file.png');
function AdminPostMgtList(props) {
console.group("EgovAdminPostList");
@ -24,7 +25,7 @@ function AdminPostMgtList(props) {
console.log("EgovAdminPostList [location] : ", location);
// eslint-disable-next-line no-unused-vars
const [searchCondition, setSearchCondition] = useState(location.state?.searchCondition || { pageIndex: 1, searchCnd: '0', searchWrd: '' });// ||
const [searchCondition, setSearchCondition] = useState(location.state?.searchCondition || { pageIndex: 1, searchCnd: '0', searchKeyword: '', bbsSeq:8 });// ||
const [paginationInfo, setPaginationInfo] = useState({});
const cndRef = useRef();
@ -38,19 +39,19 @@ function AdminPostMgtList(props) {
const handleClose = () => setShow(false);
const handleShow = () => setShow(true);
const retrieveList = useCallback(() => {
const retrieveList = useCallback((searchCondition) => {
handleClose();
const params = EgovNet.convParams(searchCondition);
console.groupCollapsed("EgovAdminPostList.retrieveList()");
const retrieveListURL = '/admin/boards/post-list';
const retrieveListURL = '/admin/boards/posts/post-list' + params;
const requestOptions = {
method: "GET",
headers: {
'Content-type': 'application/json',
},
body: JSON.stringify()
}
}
EgovNet.requestFetch(retrieveListURL,
@ -58,29 +59,42 @@ function AdminPostMgtList(props) {
(resp) => {
setPaginationInfo(resp.result.paginationInfo);
setCategoryList(resp.result.categoryList);
console.log("@@@ resultCnt : " + resp.result.resultCnt);
let mutListTag = [];
listTag.push(<p className="no_data" key="0">검색된 결과가 없습니다.</p>); //
//
resp.result.postList.forEach(function (item, index) {
if (index === 0) mutListTag = []; //
const finalModifiedDate = item.lastChgDt ? item.lastChgDt : item.frstCrtDt;
setListTag([]);
resp.result.fixedList.forEach(function (item) {
const finalModifiedDate = item?.lastChgDt ? item?.lastChgDt : item?.frstCrtDt;
const formattedDate = finalModifiedDate ? format(finalModifiedDate, "yyyy-MM-dd HH:mm") : "";
mutListTag.push(
<div className="list_item">
<div></div>
<div>{item.bbsContTitle}</div>
<div>{item.frstCrtId}</div>
<div>공지</div>
<div className="left_align">{item?.bbsContTitle}</div>
<div>{item?.bbsReadCnt}</div>
<div>{item?.fileGrpId && <img src={fileIconPath} alt="File Icon" />}</div>
<div>{item?.frstCrtId}</div>
<div>{formattedDate}</div>
<div>{item.bbsReadCnt}</div>
<div>{item.fileGrpId}</div>
<div><button className={"btn btn_blue_h31 px-1"} onClick={()=>{editPost(item)}}>수정</button></div>
</div>
);
});
resp.result.postList.forEach(function (item, index) {
const finalModifiedDate = item?.lastChgDt ? item?.lastChgDt : item?.frstCrtDt;
const formattedDate = finalModifiedDate ? format(finalModifiedDate, "yyyy-MM-dd HH:mm") : "";
mutListTag.push(
<div className="list_item">
<div>{resp.result.resultCnt - (resp.result.paginationInfo.pageIndex -1) * resp.result.paginationInfo.rowCnt - index}</div>
<div className="left_align">{item?.bbsContTitle}</div>
<div>{item?.bbsReadCnt}</div>
<div>{item?.fileGrpId && <img src={fileIconPath} alt="File Icon" />}</div>
<div>{item?.frstCrtId}</div>
<div>{formattedDate}</div>
<div><button className={"btn btn_blue_h31 px-1"} onClick={()=>{editPost(item)}}>수정</button></div>
</div>
);
});
if(!mutListTag.length) mutListTag.push(<p className="no_data" key="0">검색된 결과가 없습니다.</p>); //
setListTag(mutListTag);
},
function (resp) {
@ -88,15 +102,15 @@ function AdminPostMgtList(props) {
}
);
console.groupEnd("EgovAdminPostList.retrieveList()");
},[listTag, searchCondition]);
},[listTag]);
useEffect(() => {
retrieveList(searchCondition);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
}, [searchCondition]);
const handleSelectChange = (e) => {
setSearchCondition({...searchCondition, bbsSeq: e.target.value})
}
function editPost(item){
@ -104,7 +118,12 @@ function AdminPostMgtList(props) {
if(item != undefined) {
item.mode = CODE.MODE_MODIFY;
}
setModalBody(<AdminPostMgtEdit props={item} reloadFunction={retrieveList}/>)
else {
item = {};
item.mode = CODE.MODE_CREATE;
item.selectedBbsSeq = searchCondition.bbsSeq;
}
setModalBody(<AdminPostMgtEdit props={item} reloadFunction={(searchCondition) => retrieveList(searchCondition)} searchCondition={searchCondition}/>)
}
console.log("------------------------------EgovAdminPostList [End]");
@ -139,12 +158,11 @@ function AdminPostMgtList(props) {
<div className="condition">
<ul>
<li className="third_1 L">
<span className="lb">검색유형선택</span>
<span className="lb">게시판선택</span>
<label className="f_select" htmlFor="searchCnd">
<Form.Select id="select1" name="bbsId" onChange={handleSelectChange}>
<option value="">선택</option>
<Form.Select id="select1" name="bbsSeq" value={searchCondition.bbsSeq} onChange={handleSelectChange}>
{categoryList.map((item) => (
<option key={item.bbsSeq} value={item.bbsId} selected={props?.bbsId === item.bbsId}>{item.bbsTitle}</option>
<option key={item.bbsSeq} value={item.bbsSeq}>{item.bbsTitle}</option>
))}
</Form.Select>
</label>
@ -152,15 +170,9 @@ function AdminPostMgtList(props) {
<li className="third_2 R">
<span className="lb">검색어</span>
<span className="f_search w_400">
<input type="text" name="" defaultValue={searchCondition && searchCondition.searchWrd} placeholder="" ref={wrdRef}
onChange={e => {
wrdRef.current.value = e.target.value;
}}
/>
<button type="button"
onClick={() => {
retrieveList({ ...searchCondition, pageIndex: 1, searchCnd: cndRef.current.value, searchWrd: wrdRef.current.value });
}}>조회</button>
<input type="text" name="" defaultValue={searchCondition.searchKeyword} placeholder=""
onChange={(e) => {setSearchCondition({...searchCondition, searchKeyword: e.target.value})}}/>
<button type="button" onClick={() => {retrieveList(searchCondition)}}>조회</button>
</span>
</li>
</ul>
@ -168,14 +180,14 @@ function AdminPostMgtList(props) {
{/* <!--// 검색조건 --> */}
{/* <!-- 게시판목록 --> */}
<div className="board_list BRD006">
<div className="board_list BRD007">
<div className="head">
<span></span>
<span>번호</span>
<span>제목</span>
<span>작성자</span>
<span>최종수정일</span>
<span>조회수</span>
<span>파일</span>
<span>작성자</span>
<span>작성일</span>
<span><button className={"btn btn_blue_h31 px-1"} onClick={()=>{editPost(undefined)}}>추가</button></span>
</div>
<div className="result">
@ -187,7 +199,7 @@ function AdminPostMgtList(props) {
<div className="board_bot">
{/* <!-- Paging --> */}
<EgovPaging pagination={paginationInfo} moveToPage={passedPage => {
retrieveList({ ...searchCondition, pageIndex: passedPage, searchCnd: cndRef.current.value, searchWrd: wrdRef.current.value })
retrieveList({ ...searchCondition, pageIndex: passedPage}) //, searchCnd: cndRef.current.value, searchKeyword: wrdRef.current.value
}} />
{/* <!--/ Paging --> */}
</div>

View File

@ -32,9 +32,10 @@ function EgovAdminBoardEdit({props, reloadFunction}) {
const [bbsTypeList, setBbsTypeList] = useState([]);
const [roleList, setRoleList] = useState([]);
const [duplicateYn, setDuplicateYn] = useState("");
const retrieveList = useCallback(() => {
const retrieveListURL = '/admin/boards/get-option-list';
const retrieveListURL = '/admin/boards/mgt/get-option-list';
const requestOptions = {
method: "GET",
@ -72,6 +73,20 @@ function EgovAdminBoardEdit({props, reloadFunction}) {
function editBoard(e) {
e.preventDefault();
e.stopPropagation();
if (modeInfo.mode === CODE.MODE_CREATE) {
if (duplicateYn === "") {
alert("중복확인을 해주세요.");
return;
} else if (duplicateYn === "Y") {
alert("중복된 아이디 입니다.");
return;
} else if (duplicateYn === "C") {
alert("중복확인을 다시 해주세요.");
return;
}
}
const form = e.target;
const info = {
bbsId: form.bbsId.value,
@ -88,7 +103,7 @@ function EgovAdminBoardEdit({props, reloadFunction}) {
info.bbsSeq = props.bbsSeq;
}
EgovNet.requestFetch(
'/admin/boards/board-mgt',
'/admin/boards/mgt/board-mgt',
{
method: "PUT",
headers: {
@ -103,7 +118,7 @@ function EgovAdminBoardEdit({props, reloadFunction}) {
} else if (Number(resp.resultCode) === Number(CODE.RCV_ERROR_AUTH)) {
console.log("토큰 갱신중.")
} else {
alert(resp.result.resultMessage)
alert(resp.resultMessage);
}
}
)
@ -112,7 +127,7 @@ function EgovAdminBoardEdit({props, reloadFunction}) {
function deleteBoard(bbs){
if(window.confirm("삭제하시겠습니까?")) {
EgovNet.requestFetch(
'/admin/boards/board-mgt',
'/admin/boards/mgt/board-mgt',
{
method: "DELETE",
headers: {
@ -122,7 +137,6 @@ function EgovAdminBoardEdit({props, reloadFunction}) {
},
(resp) => {
if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
alert("삭제되었습니다.")
reloadFunction();
} else if (Number(resp.resultCode) === Number(CODE.RCV_ERROR_AUTH)) {
console.log("토큰 갱신중.")
@ -134,6 +148,44 @@ function EgovAdminBoardEdit({props, reloadFunction}) {
}
}
const handleInputChange = (e) => {
setDuplicateYn("C");
};
const handleCheckDuplicate = () => {
const bbsId = document.querySelector('[name="bbsId"]').value;
if (!bbsId.trim()) {
alert("게시판 ID를 입력해주세요.");
return;
}
const checkDuplicateURL = '/admin/boards/mgt/check-duplicate?bbsId=' + bbsId;
const requestOptions = {
method: "GET",
headers: {
'Content-type': 'application/json',
}
}
EgovNet.requestFetch(checkDuplicateURL,
requestOptions,
(resp) => {
setDuplicateYn(resp.result.duplicateYn);
console.log("@@@ duplicateYn : " + JSON.stringify(resp.result.duplicateYn));
if (resp.result.duplicateYn === "Y") {
alert("중복된 아이디 입니다.");
}
else if (resp.result.duplicateYn === "N") {
alert("사용 가능한 아이디 입니다.");
}
},
function (resp) {
console.log("err response : ", resp);
}
);
}
console.log("------------------------------EgovAdminBoardEdit [End]");
console.groupEnd("EgovAdminBoardEdit");
@ -158,7 +210,12 @@ function EgovAdminBoardEdit({props, reloadFunction}) {
<dt><label htmlFor="bbsId">게시판 ID</label><span className="req">필수</span></dt>
<dd>
<Form.Control className="f_input2 w_full" type="text" name="bbsId" placeholder="게시판 ID" required
defaultValue={props?.bbsId} readOnly={props!==undefined}/>
defaultValue={props?.bbsId} readOnly={modeInfo.mode === CODE.MODE_MODIFY} onChange={handleInputChange}/>
</dd>
<dd>
{modeInfo.mode !== CODE.MODE_MODIFY && (
<button type="button" className="btn btn_skyblue_h46 w_100" onClick={handleCheckDuplicate}>중복확인</button>
)}
</dd>
</dl>
<dl>
@ -179,7 +236,6 @@ function EgovAdminBoardEdit({props, reloadFunction}) {
<dt><label htmlFor="bbsTitle">게시판 타입</label><span className="req">필수</span></dt>
<dd>
<Form.Select id="select1" name="bbsType">
<option value="">선택</option>
{bbsTypeList.map((item) => (
<option key={item.itemCd} value={item.itemCd} selected={props?.bbsType === item.itemCd}>{item.itemNm}</option>
))}
@ -226,7 +282,7 @@ function EgovAdminBoardEdit({props, reloadFunction}) {
<dt><label htmlFor="bbsTitle">읽기 권한</label><span className="req">필수</span></dt>
<dd>
<Form.Select id="select1" name="readRole">
<option value="">선택</option>
<option value="0">비회원</option>
{roleList.map((item) => (
<option key={item.itemCd} value={item.grpOrder} selected={props?.readRole === item.grpOrder}>{item.itemNm}</option>
))}
@ -237,7 +293,6 @@ function EgovAdminBoardEdit({props, reloadFunction}) {
<dt><label htmlFor="bbsTitle">쓰기 권한</label><span className="req">필수</span></dt>
<dd>
<Form.Select id="select1" name="writeRole">
<option value="">선택</option>
{roleList.map((item) => (
<option key={item.itemCd} value={item.grpOrder} selected={props?.writeRole === item.grpOrder}>{item.itemNm}</option>
))}
@ -248,15 +303,12 @@ function EgovAdminBoardEdit({props, reloadFunction}) {
{/* <!-- 버튼영역 --> */}
<div className="board_btn_area">
<div className="left_col btn1">
<button type="submit" className="btn btn_skyblue_h46 w_100">저장
</button>
{modeInfo.mode === CODE.MODE_MODIFY &&
<button type={"button"} className="btn btn_skyblue_h46 w_100" onClick={()=>{deleteBoard(props)}}>삭제</button>
}
{modeInfo.mode === CODE.MODE_MODIFY && (
<button type={"button"} className="btn btn_red_h46 w_100" onClick={()=>{deleteBoard(props)}}>삭제</button>
)}
</div>
<div className="right_col btn1">
<button type={"button"} className="btn btn_blue_h46 w_100" onClick={()=>{reloadFunction()}}>목록</button>
<button type="submit" className="btn btn_skyblue_h46 w_100">저장</button>
</div>
</div>
{/* <!--// 버튼영역 --> */}

View File

@ -1,185 +0,0 @@
import React, {useState, useEffect, useCallback} from 'react';
import {Link, useLocation} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
import URL from 'constants/url';
import {default as EgovLeftNav} from 'components/leftmenu/EgovLeftNavAdmin';
import Modal from "react-bootstrap/Modal";
import CODE from "../../../constants/code";
import EgovAdminBoardEdit from "../board/EgovAdminBoardEdit";
import {format} from "date-fns";
function StandardCodeMgt(props) {
const location = useLocation();
const [searchCondition, setSearchCondition] = useState(location.state?.searchCondition || { pageIndex: 1, searchCnd: '0', searchWrd: '' });// ||
const [paginationInfo, setPaginationInfo] = useState({});
const [listTag, setListTag] = useState([]);
const [show, setShow] = useState(false);
const [modalBody, setModalBody] = useState();
const handleClose = () => setShow(false);
const handleShow = () => setShow(true);
const retrieveList = useCallback(() => {
handleClose();
console.groupCollapsed("AdminBoardList.retrieveList()");
const retrieveListURL = '/admin/boards/board-list';
const requestOptions = {
method: "GET",
headers: {
'Content-type': 'application/json',
},
body: JSON.stringify()
}
EgovNet.requestFetch(retrieveListURL,
requestOptions,
(resp) => {
let mutListTag = [];
listTag.push(<p className="no_data" key="0">검색된 결과가 없습니다.</p>); //
//
resp.result.boardList.forEach(function (item, index) {
if (index === 0) mutListTag = []; //
mutListTag.push(
<div className="list_item">
<div>{item.bbsSeq}</div>
<div>{item.bbsId}</div>
<div>{item.bbsTitle}</div>
<div>{item.frstCrtId}</div>
<div>{item.frstCrtDt ? format(item.frstCrtDt, "yyyy-MM-dd HH:mm") : ""}</div>
<div>{item.lastChgDt ? format(item.lastChgDt, "yyyy-MM-dd HH:mm") : ""}</div>
<div><button className={"btn btn_blue_h31 px-1"} onClick={()=>{editBoard(item)}}>수정</button></div>
</div>
);
});
setListTag(mutListTag);
console.log("@@@ resp : ");
},
function (resp) {
console.log("err response : ", resp);
}
);
console.groupEnd("EgovAdminBoardList.retrieveList()");
},[]);
useEffect(() => {
retrieveList(searchCondition);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
function editBoard(item){
handleShow();
if(item != undefined) {
item.mode = CODE.MODE_MODIFY;
}
setModalBody(<EgovAdminBoardEdit props={item} reloadFunction={retrieveList}/>)
}
return (
<div className="container">
<div className="c_wrap">
{/* <!-- Location --> */}
<div className="location">
<ul>
<li><Link to={URL.MAIN} className="home">Home</Link></li>
<li><Link to={URL.ADMIN}>사이트관리</Link></li>
<li>게시판현황</li>
<li>키워드 관리</li>
</ul>
</div>
{/* <!--// Location --> */}
<div className="layout">
{/* <!-- Navigation --> */}
<EgovLeftNav></EgovLeftNav>
{/* <!--// Navigation --> */}
<div className="contents NOTICE_LIST" id="contents">
<div className="top_tit">
<h1 className="tit_1">사이트관리</h1>
</div>
<h2 className="tit_2">키워드 관리</h2>
{/* <!-- 검색조건 --> */}
{/*<div className="condition">
<ul>
<li className="third_1 L">
<span className="lb">검색유형선택</span>
<label className="f_select" htmlFor="searchCnd">
<select id="searchCnd" name="searchCnd" title="검색유형선택" ref={cndRef}
onChange={e => {
cndRef.current.value = e.target.value;
}}
>
<option value="0">게시판명</option>
<option value="1">게시판유형</option>
</select>
</label>
</li>
<li className="third_2 R">
<span className="lb">검색어</span>
<span className="f_search w_400">
<input type="text" name="" defaultValue={searchCondition && searchCondition.searchWrd} placeholder="" ref={wrdRef}
onChange={e => {
wrdRef.current.value = e.target.value;
}}
/>
<button type="button"
onClick={() => {
retrieveList({ ...searchCondition, pageIndex: 1, searchCnd: cndRef.current.value, searchWrd: wrdRef.current.value });
}}>조회</button>
</span>
</li>
<li>
<Link to={URL.ADMIN_BOARD_CREATE} className="btn btn_blue_h46 pd35">등록</Link>
</li>
</ul>
</div>*/}
{/* <!--// 검색조건 --> */}
{/* <!-- 게시판목록 --> */}
<div className="board_list BRD006">
<div className="head">
<span>번호</span>
<span>아이디</span>
<span>제목</span>
<span>작성자</span>
<span>작성일</span>
<span>수정일</span>
<span><button className={"btn btn_blue_h31 px-1"} onClick={()=>{editBoard(undefined)}}>추가</button></span>
</div>
<div className="result">
{listTag}
</div>
</div>
{/* <!--// 게시판목록 --> */}
<div className="board_bot">
{/* <!-- Paging --> */}
{/*<EgovPaging pagination={paginationInfo} moveToPage={passedPage => {
retrieveList({ ...searchCondition, pageIndex: passedPage, searchCnd: cndRef.current.value, searchWrd: wrdRef.current.value })
}} />*/}
{/* <!--/ Paging --> */}
</div>
{/* <!--// 본문 --> */}
</div>
</div>
</div>
<Modal show={show} onHide={handleClose} keyboard={false}>
{modalBody}
</Modal>
</div>
);
}
export default StandardCodeMgt;

View File

@ -32,7 +32,7 @@ function EgovAdminBoardList(props) {
handleClose();
console.groupCollapsed("AdminBoardList.retrieveList()");
const retrieveListURL = '/admin/boards/board-list';
const retrieveListURL = '/admin/boards/mgt/board-list';
const requestOptions = {
method: "GET",
@ -58,7 +58,6 @@ function EgovAdminBoardList(props) {
mutListTag.push(
<div className="list_item">
<div></div>
<div>{item.bbsId}</div>
<div>{item.bbsTitle}</div>
<div>{item.frstCrtId}</div>
@ -122,7 +121,6 @@ function EgovAdminBoardList(props) {
{/* <!-- 게시판목록 --> */}
<div className="board_list BRD006">
<div className="head">
<span></span>
<span>아이디</span>
<span>제목</span>
<span>작성자</span>

View File

@ -224,7 +224,7 @@ function ProgressStatusEdit(props) {
const getList = (orgSearchCondition) => {
EgovNet.requestFetch(`/admin/config/committee-code-management?paramCodeGroup=${orgSearchCondition.paramCodeGroup}&paramCodeLevel=${orgSearchCondition.paramCodeLevel}`,
EgovNet.requestFetch(`/admin/config/committee-code-mgt?paramCodeGroup=${orgSearchCondition.paramCodeGroup}&paramCodeLevel=${orgSearchCondition.paramCodeLevel}`,
requestOptions,
function (resp) {
const myIndex = Number(String(orgSearchCondition.paramCodeLevel).replace('LV_','')) - 1;

View File

@ -5,9 +5,11 @@ import * as EgovNet from 'api/egovFetch';
import URL from 'constants/url';
import { default as EgovLeftNav } from 'components/leftmenu/EgovLeftNavAdmin';
import CODE from "../../../constants/code";
import CODE from "constants/code";
import Modal from "react-bootstrap/Modal";
import AboutSiteModal from "./aboutSiteMgt/AboutSiteModal";
import {Image} from "react-bootstrap";
import {SERVER_URL} from "config";
function StandardCodeMgt(props) {
@ -26,7 +28,7 @@ function StandardCodeMgt(props) {
handleClose();
console.groupCollapsed("AdminPartnerSiteList.retrieveList()");
const retrieveListURL = '/admin/config/partner-site-list';
const retrieveListURL = '/admin/config/about-site-mgt/list';
const requestOptions = {
method: "GET",
@ -50,10 +52,9 @@ function StandardCodeMgt(props) {
mutListTag.push(
<div className="list_item">
<div></div>
<div>{item.siteTitle}</div>
<div>{item.siteUrl}</div>
<div>{item.fileGrpId}</div>
<div><Image src={SERVER_URL+"/admin/config/about-site-mgt/get-site-image?fileGrpId=" + item.fileGrpId} alt="이미지" onClick={(e) => window.open(e.target.src)} width={"150"}/></div>
<div>{item.siteOrder}</div>
<div>{item.useYn}</div>
<div><button className={"btn btn_blue_h31 px-1"} onClick={()=>{editPartnerSite(item)}}>수정</button></div>
@ -147,7 +148,6 @@ function StandardCodeMgt(props) {
{/* <!-- 게시판목록 --> */}
<div className="board_list BRD006">
<div className="head">
<span></span>
<span>사이트명</span>
<span>URL</span>
<span>배너이미지</span>

View File

@ -111,7 +111,7 @@ function CommitteeCodeMgt(props) {
const getList = (searchCondition) => {
EgovNet.requestFetch(`/admin/config/committee-code-management?paramCodeGroup=${searchCondition.paramCodeGroup}&paramCodeLevel=${searchCondition.paramCodeLevel}`,
EgovNet.requestFetch(`/admin/config/committee-code-mgt?paramCodeGroup=${searchCondition.paramCodeGroup}&paramCodeLevel=${searchCondition.paramCodeLevel}`,
requestOptions,
function (resp) {
if( searchCondition.paramCodeLevel === 'LV_01' ) {
@ -163,7 +163,7 @@ function CommitteeCodeMgt(props) {
const requestTask = () => {
EgovNet.requestFetch(`/admin/config/committee-code-management/${deleteItem.orgId}`,
EgovNet.requestFetch(`/admin/config/committee-code-mgt/${deleteItem.orgId}`,
requestOptions,
function (resp) {
let forChangeObject = {...searchCondition, paramCodeGroup, paramCodeLevel};

View File

@ -95,7 +95,7 @@ function CommitteeCodeRegistrationPopup(props) {
if( props.createOrModifyCondition.mode === CODE.MODE_MODIFY ) {
appendRequestURL = `/${props.createOrModifyCondition.target.orgId}`;
}
const requestURL = "/admin/config/committee-code-management" + appendRequestURL;
const requestURL = "/admin/config/committee-code-mgt" + appendRequestURL;
EgovNet.requestFetch(requestURL,
requestOptions,
function (resp) {

View File

@ -33,16 +33,24 @@ function MenuAuthMgt(props) {
roleList.forEach(function (role) {
checkboxs.push(
<div className={"checkboxDiv"}>
<Form.Check className={role.itemCd} value={role.itemCd}
onClick={(e)=>{
const checked = e.target.checked;
if(checked) {
item.menuAuth += ","+role.itemCd
}else{
item.menuAuth = item.menuAuth.replace(","+role.itemCd, '');
}
}}
defaultChecked={item.menuAuth.includes(role.itemCd)}/>
{role.itemCd === "ROLE_001"?
(<Form.Check className={role.itemCd} value={role.itemCd}
defaultChecked={item.menuAuth.includes(role.itemCd)} disabled={true} />)
:
(<Form.Check className={role.itemCd} value={role.itemCd}
onClick={(e)=>{
const checked = e.target.checked;
if(checked) {
item.menuAuth += ","+role.itemCd
}else{
item.menuAuth = item.menuAuth.replace(role.itemCd, '');
if(item.menuAuth.startsWith(",")) {
item.menuAuth.replace(",", "")
}
}
}}
defaultChecked={item.menuAuth.includes(role.itemCd)} />)
}
</div>
)
/*if(item.menuGroup){

View File

@ -19,6 +19,7 @@ function AboutSiteModal({props, reloadFunction}) {
const navigate = useNavigate();
const location = useLocation();
const checkRef = useRef([]);
const fileInputRef = useRef(null);
console.log("AboutSiteModal [location] : ", location);
@ -32,7 +33,18 @@ function AboutSiteModal({props, reloadFunction}) {
useEffect(() => {
initMode();
// eslint-disable-next-line react-hooks/exhaustive-deps
const fileDOM = document.querySelector('#file');
const preview = document.querySelector('.preview');
if(fileDOM) {
fileDOM.addEventListener('change', () => {
const reader = new FileReader();
reader.onload = ({target}) => {
preview.src = target.result;
};
reader.readAsDataURL(fileDOM.files[0]);
});
}
}, []);
const initMode = () => {
@ -45,24 +57,22 @@ function AboutSiteModal({props, reloadFunction}) {
e.preventDefault();
e.stopPropagation();
const form = e.target;
const info = {
siteTitle: form.siteTitle.value,
siteUrl: form.siteUrl.value,
fileGrpId: form.fileGrpId.value,
siteOrder: form.siteOrder.value,
useYn: form.useYn.value
}
const formData = new FormData(form); // FormData
// FormData
console.log("@@@ current : " + fileInputRef.current);
console.log("@@@ file : " + fileInputRef.current.files[0]);
formData.append('file', currentFile);
if (modeInfo.mode === CODE.MODE_MODIFY) {
info.siteSeq = props.siteSeq;
formData.append('siteSeq', props.siteSeq); //
formData.append('fileGrpId', props.fileGrpId);
}
EgovNet.requestFetch(
'/admin/config/partner-site-mgt',
'/admin/config/about-site-mgt/partner-site-mgt',
{
method: "PUT",
headers: {
'Content-type': 'application/json'
},
body: JSON.stringify(info)
body: formData
},
(resp) => {
if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
@ -80,7 +90,7 @@ function AboutSiteModal({props, reloadFunction}) {
function deletePartnerSite(partnerSite){
if(window.confirm("삭제하시겠습니까?")) {
EgovNet.requestFetch(
'/admin/config/partner-site-mgt',
'/admin/config/about-site-mgt/partner-site-mgt',
{
method: "DELETE",
headers: {
@ -102,6 +112,100 @@ function AboutSiteModal({props, reloadFunction}) {
}
}
const Logo = () => (
<svg className="uploadIcon" x="0px" y="0px" viewBox="0 0 24 24">
<path fill="transparent" d="M0,0h24v24H0V0z"/>
<path fill="#000" d="M20.5,5.2l-1.4-1.7C18.9,3.2,18.5,3,18,3H6C5.5,3,5.1,3.2,4.8,3.5L3.5,5.2C3.2,5.6,3,6,3,6.5V19 c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V6.5C21,6,20.8,5.6,20.5,5.2z M12,17.5L6.5,12H10v-2h4v2h3.5L12,17.5z M5.1,5l0.8-1h12l0.9,1 H5.1z"/>
</svg>
)
const [currentFile, setCurrentFile] = useState(null);
const [uploadedInfo, setUploadedInfo] = useState(null);
const [previewImage, setPreviewImage] = useState(null);
const UploadBox = () => {
const [isActive, setActive] = useState(false);
const onDragEnter = (e: React.DragEvent<HTMLDivElement>) => {
e.preventDefault();
e.stopPropagation();
};
const onDragLeave = (e: React.DragEvent<HTMLDivElement>) => {
e.preventDefault();
e.stopPropagation();
};
const onDragOver = (e: React.DragEvent<HTMLDivElement>) => {
e.preventDefault();
e.stopPropagation();
};
const setFileInfo = (file) => {
const { name, size: byteSize, type } = file;
const isImage = type.includes('image');
const size = (byteSize / (1024 * 1024)).toFixed(2) + 'mb';
setUploadedInfo({ name, size, type }); // name, size, type uploadedInfo
if (!isImage) {
setUploadedInfo({ name, size, type });
return;
}
const reader = new FileReader();
reader.onload = () => {
setPreviewImage(reader.result);
setUploadedInfo({ name, size, type, imageUrl: String(reader.result) });
};
reader.readAsDataURL(file);
};
const onDrop = (e: React.DragEvent<HTMLDivElement>) => {
e.preventDefault();
e.stopPropagation();
setActive(false);
const droppedFile = e.dataTransfer.files[0];
console.log("@@@ handleDrop file : " + droppedFile);
if (droppedFile.type.startsWith('image/')) {
setCurrentFile(droppedFile);
setFileInfo(droppedFile);
} else {
//
alert('이미지 파일만 업로드할 수 있습니다.');
}
};
const handleUpload = (e: ChangeEvent<HTMLInputElement>) => {
const file = e.target.files[0];
console.log("@@@ handleUpload file : " + file);
if (file.type.startsWith('image/')) {
setCurrentFile(file);
setFileInfo(file);
} else {
//
alert('이미지 파일만 업로드할 수 있습니다.');
}
};
return (
<label
className={`preview${isActive ? ' active' : ''}`}
onDragEnter={onDragEnter}
onDragOver={onDragOver}
onDragLeave={onDragLeave}
onDrop={onDrop}
>
<input type="file" className="file" onChange={handleUpload} ref={fileInputRef} />
{previewImage && <img src={previewImage} alt="Preview Image" className="preview_image" />}
{!uploadedInfo && (
<>
<Logo />
<p className="preview_msg">클릭 혹은 파일을 이곳에 드롭하세요.</p>
<p className="preview_desc">파일당 최대 3MB</p>
</>
)}
</label>
);
};
console.log("------------------------------AboutSiteModal [End]");
console.groupEnd("AboutSiteModal");
@ -118,6 +222,7 @@ function AboutSiteModal({props, reloadFunction}) {
</Modal.Header>
<Modal.Body>
<UploadBox/>
<div className="board_view2">
<Form onSubmit={(e) => {editPartnerSite(e)}} noValidate>
<dl>
@ -134,18 +239,15 @@ function AboutSiteModal({props, reloadFunction}) {
defaultValue={props?.siteUrl}/>
</dd>
</dl>
<dl>
<dt><label htmlFor="fileGrpId">배너이미지</label><span className="req">필수</span></dt>
<dd>
<Form.Control className="f_txtar w_full" type="text" name="fileGrpId" placeholder="배너이미지" required
defaultValue={props?.fileGrpId}/>
</dd>
</dl>
<dl>
<dt><label htmlFor="siteOrder">정렬순서</label><span className="req">필수</span></dt>
<dd>
<Form.Control className="f_txtar w_full" type="text" name="siteOrder" placeholder="정렬순서" required
defaultValue={props?.siteOrder}/>
defaultValue={props?.siteOrder} onChange={(e) => {
const inputValue = e.target.value;
const numericValue = inputValue.replace(/\D/g, '');
e.target.value = numericValue;
}}/>
</dd>
</dl>
<dl>

View File

@ -20,7 +20,7 @@ function ChildCodeDiv({}, ref){
setCodeItemRow([]);
setGrpCd(parentCd)
EgovNet.requestFetch(
'/admin/config/code-item?grpCd='+parentCd,
'/admin/config/base-code-mgt/code-item?grpCd='+parentCd,
{
method: "GET"
},
@ -54,7 +54,7 @@ function ChildCodeDiv({}, ref){
alert("코드와 코드명을 입력해주세요.")
}else{
EgovNet.requestFetch(
'/admin/config/code-item',
'/admin/config/base-code-mgt/code-item',
{
method: "POST",
headers: {
@ -99,7 +99,7 @@ function ChildCodeDiv({}, ref){
useYn: action==="modify"?'Y':'N'
}
EgovNet.requestFetch(
'/admin/config/code-item',
'/admin/config/base-code-mgt/code-item',
{
method: "PUT",
headers: {
@ -125,7 +125,7 @@ function ChildCodeDiv({}, ref){
}
return (
<Container className={"pt-3"} id={"codeItemDiv"}>
<div className={""} id={"codeItemDiv"}>
<input type={"hidden"} id={"grpCd"} value={grpCd}/>
<Row className={"py-2 bg-light border-bottom"}>
<Col xs={3}>코드</Col>
@ -152,7 +152,7 @@ function ChildCodeDiv({}, ref){
<Col>코드 그룹을 선택해주세요.</Col>
</Row>
)}
</Container>
</div>
);
}

View File

@ -14,7 +14,7 @@ function ParentCodeDiv({getCodeItem}){
const getCodeGrp = useCallback(()=>{
EgovNet.requestFetch(
'/admin/config/code-grp',
'/admin/config/base-code-mgt/code-grp',
{
method: "GET"
},
@ -62,7 +62,7 @@ function ParentCodeDiv({getCodeItem}){
alert("코드 그룹을 입력해주세요.")
}else{
EgovNet.requestFetch(
'/admin/config/code-grp',
'/admin/config/base-code-mgt/code-grp',
{
method: "POST",
headers: {
@ -102,7 +102,7 @@ function ParentCodeDiv({getCodeItem}){
useYn: action==="modify"?'Y':'N'
}
EgovNet.requestFetch(
'/admin/config/code-grp',
'/admin/config/base-code-mgt/code-grp',
{
method: "PUT",
headers: {
@ -129,7 +129,7 @@ function ParentCodeDiv({getCodeItem}){
}
return (
<Container className={"pt-3"} >
<div className={"pe-3"} >
<Row className={"py-2 bg-light border-bottom"}>
<Col xs={3}>코드그룹</Col>
<Col xs={5}>코드그룹명</Col>
@ -146,7 +146,7 @@ function ParentCodeDiv({getCodeItem}){
</Col>
<Col xs={{span:2, offset:2}}><Button type={"button"} variant={"primary"} size={"sm"} onClick={addCodeGrp}>등록</Button></Col>
</Row>
</Container>
</div>
);
}

View File

@ -23,7 +23,7 @@ function Survey({}) {
const retrieveList = useCallback(() => {
handleClose()
EgovNet.requestFetch(
'/admin/survey/list',
'/admin/contents/survey/list',
{
method: "GET"
},
@ -58,7 +58,7 @@ function Survey({}) {
function editUseYn(svySeq){
EgovNet.requestFetch(
'/admin/survey/info-use-yn',
'/admin/contents/survey/info-use-yn',
{
method: "PUT",
headers: {

View File

@ -15,7 +15,7 @@ function QuestionModal({svySeq}){
function getSurveyQt(){
EgovNet.requestFetch(
'/admin/survey/info-qt?svySeq='+svySeq,
'/admin/contents/survey/info-qt?svySeq='+svySeq,
{
method: "GET"
},
@ -77,7 +77,7 @@ function QuestionModal({svySeq}){
function editSurveyQt(e){
EgovNet.requestFetch(
'/admin/survey/info-qt',
'/admin/contents/survey/info-qt',
{
method: "PUT",
headers: {

View File

@ -21,7 +21,7 @@ function SurveyModal({savedInfo, reloadFunction}){
e.preventDefault();
e.stopPropagation();
EgovNet.requestFetch(
'/admin/survey/info',
'/admin/contents/survey/info',
{
method: "PUT",
headers: {
@ -44,7 +44,7 @@ function SurveyModal({savedInfo, reloadFunction}){
e.preventDefault();
e.stopPropagation();
EgovNet.requestFetch(
'/admin/survey/info',
'/admin/contents/survey/info',
{
method: "DELETE",
headers: {

View File

@ -55,7 +55,7 @@ function FileConnections(props) {
const retrieveList = useCallback((srchCnd) => {
// console.groupCollapsed("EgovAdminUsageList.retrieveList()");
const retrieveListURL = '/admin/logs/file';
const retrieveListURL = '/admin/logs/file-download-status';
const requestOptions = {
method: "POST",

View File

@ -36,7 +36,7 @@ function MenuConnections(props) {
const retrieveList = useCallback((srchCnd) => {
// console.groupCollapsed("EgovAdminUsageList.retrieveList()");
const retrieveListURL = '/admin/logs/menu';
const retrieveListURL = '/admin/logs/menu-access-info';
const requestOptions = {
method: "POST",

View File

@ -30,7 +30,7 @@ function PrivacyConnections(props) {
const retrieveList = useCallback((srchCnd) => {
// console.groupCollapsed("EgovAdminUsageList.retrieveList()");
const retrieveListURL = '/admin/logs/privacy';
const retrieveListURL = '/admin/logs/privacy-logs';
const requestOptions = {
method: "POST",

View File

@ -35,7 +35,7 @@ function UserConnections(props) {
const retrieveList = useCallback((srchCnd) => {
// console.groupCollapsed("EgovAdminUsageList.retrieveList()");
const retrieveListURL = '/admin/logs/user';
const retrieveListURL = '/admin/logs/user-connections';
const requestOptions = {
method: "POST",

View File

@ -32,7 +32,7 @@ function ApiKeys(props) {
const retrieveList = useCallback((srchCnd) => {
// console.groupCollapsed("EgovAdminUsageList.retrieveList()");
const retrieveListURL = '/admin/standards/apikey';
const retrieveListURL = '/admin/standards/api-keys';
const requestOptions = {
method: "POST",
@ -95,7 +95,7 @@ function ApiKeys(props) {
const handleSwitchToggle = async (item) => {
try {
const updateApiEndpoint = '/admin/standards/apiupdate';
const updateApiEndpoint = '/admin/standards/api-keys/api-update';
const requestOptions = {
method: 'POST',
headers: {
@ -122,7 +122,7 @@ function ApiKeys(props) {
const handleApiKeyChart = (item) => {
try {
const updateApiEndpoint = '/admin/standards/apiDailyChart';
const updateApiEndpoint = '/admin/standards/api-keys/api-daily-chart';
const requestOptions = {
method: 'POST',
headers: {

View File

@ -20,9 +20,7 @@ function List({}) {
});
const [listTag, setListTag] = useState([]);
const [paginationInfo, setPaginationInfo] = useState({});
const [show, setShow] = useState(false);
const [modalBody, setModalBody] = useState();
@ -32,7 +30,7 @@ function List({}) {
const retrieveList = useCallback((searchCondition) => {
const params = EgovNet.convParams(searchCondition);
EgovNet.requestFetch(
'/admin/users/list'+params,
'/admin/users/mgt/list'+params,
{
method: "GET"
},
@ -42,13 +40,15 @@ function List({}) {
setListTag([]);
//
const cmtList = resp.result.cmtList;
resp.result.userList.forEach(function (item, index) {
mutListTag.push(
<div className={"list_item"} key={"userListDiv_"+index}>
<div><a href={"#"} onClick={()=>{userInfoModal(item)}}>{item.userId}</a></div>
<div><a href={"#"} onClick={()=>{userInfoModal(item, cmtList)}}>{item.userId}</a></div>
<div>{item.userNm}</div>
<div>{item.email}</div>
<div>{item.phoneNum}</div>
<div>{item.cmtOrgNm}</div>
<div>{item.statusValue}</div>
<div><button className={"btn btn_red_h31 px-1"} onClick={()=>{removeUserInfo(item.userSeq)}}>삭제</button></div>
</div>
@ -72,15 +72,15 @@ function List({}) {
setSearchCondition({...searchCondition, pageIndex: passedPage})
});
function userInfoModal(userInfo){
function userInfoModal(userInfo, cmtList){
handleShow()
setModalBody(<UserInfoModal savedInfo={userInfo} reloadFunction={retrieveList}></UserInfoModal>)
setModalBody(<UserInfoModal savedInfo={userInfo} cmtList={cmtList} reloadFunction={retrieveList}></UserInfoModal>)
}
const removeUserInfo = useCallback((seq)=>{
if(window.confirm("삭제하시겠습니까?\n복구할 수 없습니다.")){
EgovNet.requestFetch(
'/admin/users/info',
'/admin/users/mgt/info',
{
method: "DELETE",
headers: {
@ -151,6 +151,7 @@ function List({}) {
<span>이름</span>
<span>이메일</span>
<span>연락처</span>
<span>위원회</span>
<span>상태</span>
<span>삭제</span>
</div>

View File

@ -1,4 +1,4 @@
import React, {useCallback, useEffect, useState} from "react"
import React, {useEffect, useState} from "react"
import Modal from "react-bootstrap/Modal";
import * as EgovNet from "api/egovFetch";
import Form from "react-bootstrap/Form";
@ -6,11 +6,12 @@ import Row from "react-bootstrap/Row";
import Col from "react-bootstrap/Col";
import Button from "react-bootstrap/Button";
import SelectOption from "components/commonCode/SelectOption";
import CheckBox from "components/commonCode/CheckBox";
import CODE from "../../../constants/code";
function UserInfoModal({savedInfo, reloadFunction}){
function UserInfoModal({savedInfo, cmtList, reloadFunction}){
const [selectedCmtList, setSelectedCmtList] = useState(cmtList);
const [cmtOrg, setCmtOrg] = useState({cmtSeq: savedInfo?.cmtOrg, cmtNm: savedInfo?.cmtOrgNm});
function userInfoChange(e){
e.preventDefault();
e.stopPropagation();
@ -23,20 +24,12 @@ function UserInfoModal({savedInfo, reloadFunction}){
userNm: form.userNm.value,
email: form.email.value,
phoneNum: form.phoneNum.value,
userRole: '',
userRole: form.userRole.value,
cmtOrg: form.cmtOrg.value,
status: form.status.value,
}
let userRole = '';
form.userRole.forEach(function (input){
if(input.checked){
userRole += input.value+','
}
})
if(userRole){
info.userRole = userRole.slice(0, -1)
}
EgovNet.requestFetch(
'/admin/users/info',
'/admin/users/mgt/info',
{
method: "PUT",
headers: {
@ -56,10 +49,21 @@ function UserInfoModal({savedInfo, reloadFunction}){
}
)
}
function modalOpen(){
const changeSelectorOption = (e) => {
selectedCmtList.forEach(function (cmt){
if(cmt.cmtSeq === Number(e.target.value)){
setCmtOrg({cmtSeq: cmt.cmtSeq, cmtNm: cmt.cmtNm});
if(cmt.childList.length === 0){
setSelectedCmtList(cmtList);
}else{
setSelectedCmtList(cmt.childList);
}
}
})
}
/*function modalOpen(){
EgovNet.requestFetch(
'/admin/users/info?userId='+savedInfo?.userId,
'/admin/users/mgt/info?userId='+savedInfo?.userId,
{
method: "GET",
headers: {
@ -70,10 +74,10 @@ function UserInfoModal({savedInfo, reloadFunction}){
}
)
}
}*/
useEffect(() => {
modalOpen();
/*modalOpen();*/
}, []);
return (
@ -99,7 +103,7 @@ function UserInfoModal({savedInfo, reloadFunction}){
비밀번호
</Form.Label>
<Col sm={9}>
<Form.Control type="password" name="password" placeholder="비밀번호 변경 시 입력" />
<Form.Control type="password" name="password" placeholder="비밀번호 변경 시 입력" autoComplete={"new-password"}/>
</Col>
</Form.Group>
<Form.Group as={Row} className="mb-3">
@ -139,7 +143,23 @@ function UserInfoModal({savedInfo, reloadFunction}){
사용자 권한
</Form.Label>
<Col sm={9}>
<CheckBox name={"userRole"} grpCd={"ROLE"} selectedValue={savedInfo?.userRole} />
{/*<CheckBox name={"userRole"} grpCd={"ROLE"} selectedValue={savedInfo?.userRole} />*/}
<SelectOption name={"userRole"} grpCd={"ROLE"} selectedValue={savedInfo?.userRole} />
</Col>
</Form.Group>
<Form.Group as={Row} className="mb-3">
<Form.Label column sm={3}>
위원회
</Form.Label>
<Col sm={9} className={"cmtSelector"}>
<input type={"hidden"} name={"cmtOrg"} id={"cmtOrg"} value={cmtOrg?.cmtSeq}/>
<Form.Control type={"text"} id={"cmtOrgNm"} value={cmtOrg?.cmtNm} disabled />
<Form.Select name={"cmtLv1"} onChange={changeSelectorOption}>
<option value={""}>선택</option>
{selectedCmtList.map((cmt) => (
<option key={cmt.cmtSeq} value={cmt.cmtSeq} data-cmt={cmt} selected={savedInfo?.cmtOrg === cmt.cmtSeq}>{cmt.cmtNm}</option>
))}
</Form.Select>
</Col>
</Form.Group>
<Form.Group as={Row} className="mb-3">

View File

@ -0,0 +1,14 @@
import React, { useState } from 'react';
import {Link, useLocation, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
function Progress(){
return (
<div>위원회 - 진행현황</div>
);
}
export default Progress;

View File

@ -0,0 +1,14 @@
import React, { useState } from 'react';
import {Link, useLocation, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
function Schedule(){
return (
<div>위원회 - 위원회일정</div>
);
}
export default Schedule;

View File

@ -0,0 +1,14 @@
import React, { useState } from 'react';
import {Link, useLocation, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
function Email(){
return (
<div>이메일 무단수집 거부</div>
);
}
export default Email;

View File

@ -0,0 +1,14 @@
import React, { useState } from 'react';
import {Link, useLocation, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
function Private(){
return (
<div>개인정보처리방침</div>
);
}
export default Private;

View File

@ -0,0 +1,14 @@
import React, { useState } from 'react';
import {Link, useLocation, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
function Sitemap(){
return (
<div>사이트맵</div>
);
}
export default Sitemap;

View File

@ -21,12 +21,12 @@ function EgovLogin(props) {
<div className="container">
<div className="c_wrap">
{/* <!-- Location --> */}
<div className="location">
<ul>
<li><Link to={URL.MAIN} className="home" >Home</Link></li>
<li>로그인</li>
</ul>
</div>
{/*<div className="location">*/}
{/* <ul>*/}
{/* <li><Link to={URL.MAIN} className="home" >Home</Link></li>*/}
{/* <li>로그인</li>*/}
{/* </ul>*/}
{/*</div>*/}
{/* <!--// Location --> */}
<div className="layout">

View File

@ -82,40 +82,42 @@ function EgovLoginContent(props) {
EgovNet.requestFetch(loginUrl,
requestOptions,
(resp) => {
if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
let accessToken = resp?.accessToken || null;
let resultVO = parseJwt(accessToken);
let refreshToken = resp?.refreshToken || null;
if(resp !== undefined){
if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
let accessToken = resp?.accessToken || null;
let resultVO = parseJwt(accessToken);
let refreshToken = resp?.refreshToken || null;
// setSessionItem('accessToken', accessToken);
setLocalItem('accessToken', accessToken);
setLocalItem('refreshToken', refreshToken);
// setSessionItem('loginUser', resultVO);
props.onChangeLogin(resultVO);
if (saveIDFlag) {
setLocalItem(KEY_ID, resultVO?.id);
// setSessionItem('accessToken', accessToken);
setLocalItem('accessToken', accessToken);
setLocalItem('refreshToken', refreshToken);
// setSessionItem('loginUser', resultVO);
props.onChangeLogin(resultVO);
if (saveIDFlag) {
setLocalItem(KEY_ID, resultVO?.id);
}
navigate(URL.MAIN);
// PC Mobile
document.querySelector('.all_menu.WEB').classList.add('closed');
document.querySelector('.btnAllMenu').classList.remove('active');
document.querySelector('.btnAllMenu').title = '전체메뉴 닫힘';
document.querySelector('.all_menu.Mobile').classList.add('closed');
} else {
alert(resp.resultMessage)
}
navigate(URL.MAIN);
// PC Mobile
document.querySelector('.all_menu.WEB').classList.add('closed');
document.querySelector('.btnAllMenu').classList.remove('active');
document.querySelector('.btnAllMenu').title = '전체메뉴 닫힘';
document.querySelector('.all_menu.Mobile').classList.add('closed');
} else {
alert(resp.resultMessage)
}
})
}
const idFindModal = useCallback(
()=> {
setModalTitle("ID 찾기")
setModalTitle("아이디 찾기")
setModalBody(IdFindForm)
handleShow();
}
)
const pwFindModal = () => {
setModalTitle("PW 찾기")
setModalTitle("비밀번호 찾기")
setModalBody(PwFindForm)
handleShow();
}
@ -129,40 +131,45 @@ function EgovLoginContent(props) {
{/* <!-- 본문 --> */}
<div className="Plogin">
<h1>로그인</h1>
<p className="txt">전자정부표준프레임워크 경량환경 홈페이지 로그인 페이지입니다.<br />로그인을 하시면 모든 서비스를 제한없이 이용하실 있습니다.</p>
<div className="login_box">
<fieldset>
<legend>로그인</legend>
<span className="group">
<input type="text" name="" title="아이디" placeholder="아이디" value={userInfo?.username}
onChange={e => setUserInfo({ ...userInfo, username: e.target.value })} />
<input type="password" name="" title="비밀번호" placeholder="비밀번호"
onChange={e => setUserInfo({ ...userInfo, password: e.target.value })} />
</span>
<div className="input-group">
<span className="input-group-text"><img src="/assets/images/icon_id.png" /></span>
<input type="text" className="form-control shadow-none" title="아이디" placeholder="아이디" value={userInfo?.username}
onChange={e => setUserInfo({ ...userInfo, username: e.target.value })} />
</div>
<div className="input-group mt-3">
<span className="input-group-text"><img src="/assets/images/icon_pw.png" /></span>
<input type="password" className="form-control shadow-none" title="비밀번호" placeholder="비밀번호"
onChange={e => setUserInfo({ ...userInfo, password: e.target.value })} />
</div>
{/*<span className="group">*/}
{/*<input type="text" name="" title="아이디" placeholder="아이디" value={userInfo?.username}*/}
{/* onChange={e => setUserInfo({ ...userInfo, username: e.target.value })} />*/}
{/*<input type="password" name="" title="비밀번호" placeholder="비밀번호"*/}
{/* onChange={e => setUserInfo({ ...userInfo, password: e.target.value })} />*/}
{/*</span>*/}
<Row className="chk justify-content-between">
<Col xs={3}>
<Form.Check inline label={"ID 저장"} id={"saveid"} name={""} checked={saveIDFlag} onChange={handleSaveIDFlag}/>
<Form.Check inline label={"아이디 저장"} id={"saveid"} name={""} checked={saveIDFlag} onChange={handleSaveIDFlag}/>
{/*<label className="f_chk" htmlFor="saveid" ref={checkRef}>
<input type="checkbox" name="" id="saveid" onChange={handleSaveIDFlag} checked={saveIDFlag}/> <em>ID저장</em>
</label>*/}
</Col>
<Col xs={"auto"}>
<em className="clickable" onClick={idFindModal}>ID 찾기</em>
<em className="clickable" onClick={pwFindModal}>PW 찾기</em>
<Link to={URL.JOIN}><em>회원가입</em></Link>
<em className="clickable" onClick={idFindModal}>아이디 찾기</em>
<em> | </em>
<em className="clickable" onClick={pwFindModal}>비밀번호 찾기</em>
</Col>
</Row>
<button type="button" onClick={submitFormHandler}><span>LOGIN</span></button>
<button type="button" onClick={submitFormHandler} className="btn btn-22498E btn-lg">로그인</button>
<div className="line_t"></div>
<div className="line_b"></div>
<Link to={URL.JOIN} className="btn btn-outline-secondary btn-lg w-100">회원가입</Link>
</fieldset>
</div>
<ul className="list">
<li>비밀번호는 6~12자의 영문 /소문자, 숫자, 특수문자를 혼합해서 사용하실 있습니다.</li>
<li>쉬운 비밀번호나 자주 쓰는 사이트의 비밀번호가 같을 경우, 도용되기 쉬우므로 주기적으로
변경하셔서 사용하는 것이 좋습니다.</li>
</ul>
</div>
</div>
<Modal show={findModalState} onHide={handleClose}>

View File

@ -33,19 +33,22 @@ function IdFindForm(){
return (
<Form onSubmit={findId} noValidate>
<Form.Group as={Row} className="mb-3" controlId="formHorizontalEmail">
<Form.Label column sm={2}>
이메일
<Form.Group as={Row} controlId="formHorizontalEmail">
<Form.Label column sm={12} className="text-center">
찾으려는 아이디의 이메일입력해 주세요.
</Form.Label>
<Col sm={10}>
<Form.Control type="email" placeholder="Email" name="email" required />
<Col sm={12} className="input-group h_50">
<span className="input-group-text">
<img src="/assets/images/mail.png" alt="email icon" />
</span>
<Form.Control type="email" placeholder="이메일" name="email" required className={"radius_r shadow-none"} />
<Form.Control.Feedback type={"invalid"} >메일을 입력해주세요.</Form.Control.Feedback>
</Col>
</Form.Group>
<Row className="mb-3">
<Form.Label column xs={{span:8, offset:2}} id="findResultLabel"></Form.Label>
<Col xs={2}>
<Button type="submit">찾기</Button>
<Form.Label column xs={{span:8, offset:2}} id="findResultLabel" className={"text-center f_17"}></Form.Label>
<Col xs={12}>
<Button type="submit" className={"btn btn-22498E btn-lg w-100 f_15"}>아이디 찾기</Button>
</Col>
</Row>
</Form>

View File

@ -0,0 +1,14 @@
import React, { useState } from 'react';
import {Link, useLocation, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
function My(){
return (
<div>마이 페이지</div>
);
}
export default My;

View File

@ -0,0 +1,116 @@
import React, { useState } from 'react';
import {Link, useLocation, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
import CODE from "constants/code";
import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';
import {getLocalItem, setLocalItem} from 'utils/storage';
import {parseJwt} from "../../utils/parseJwt";
function PwChange(props) {
console.group("JoinContent");
console.log("[Start] JoinContent ------------------------------");
console.log("JoinContent [props] : ", props);
const navigate = useNavigate();
const location = useLocation();
console.log("JoinContent [location] : ", location);
const accessToken = getLocalItem('accessToken');
const userInfo = parseJwt(accessToken);
// const [userInfo, setUserInfo] = useState({ id: '', password: '', passwordChk: '', userNm: '', email: '', phoneNum: ''});
const submitFormHandler = (e) => {
// console.log("JoinContent submitFormHandler()");
// let valueChk = true;
// for(let value in userInfo){
// if(!userInfo[value]){
// valueChk = false;
// }
// }
// if(valueChk){
// const loginUrl = "/auth/join"
// const requestOptions = {
// method: "POST",
// headers: {
// 'Content-type': 'application/json'
// },
// body: JSON.stringify(userInfo)
// }
//
// EgovNet.requestFetch(loginUrl,
// requestOptions,
// (resp) => {
// let resultVO = resp.resultVO;
// let accessToken = resp?.accessToken || null;
//
// setLocalItem('accessToken', accessToken);
// if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
// alert(resp.resultMessage);
// navigate('/login');
// }else{
// alert(resp.resultMessage);
// }
//
// })
// }else{
// window.alert(" .")
// }
}
console.log("------------------------------JoinContent [End]");
console.groupEnd("JoinContent");
return (
<div className="container">
<div className="c_wrap">
<div className="layout">
<div className="contents" id="contents">
{/* <!-- 본문 --> */}
<div className="Pjoin">
<h1>비밀번호 변경</h1>
<div className="join_box">
{userInfo?.id?(
<form name="" method="" action="" >
<span className="group">
<label for="idInput">현재 비밀번호</label>
<input type="password" name="" title="현재 비밀번호" placeholder="현재 비밀번호를 입력하세요." />
<label for="passwordInput">신규 비밀번호</label>
<input type="password" name="" id="passwordInput" title="비밀번호" placeholder="변경할 비밀번호를 입력하세요." />
<input type="password" name="" id="passwordChkInput" title="비밀번호 확인" placeholder="변경할 비밀번호를 다시 입력하세요." />
<ul className="list">
<li>비밀번호는 6~12자의 영문 /소문자, 숫자, 특수문자를 혼합해서 사용하실 있습니다.
{/*<br />쉬운 비밀번호나 자주 쓰는 사이트의 비밀번호가 같을 경우, 도용되기 쉬우므로 주기적으로*/}
{/* 변경하셔서 사용하는 것이 좋습니다.*/}
</li>
</ul>
</span>
<div className="pt-3 d-flex justify-content-center"><button type="button" onClick={submitFormHandler} className="btn btn-22498E">변경하기</button></div>
</form>
):(
<Row className="justify-content-center">
<Col xs={12}>
</Col>
<Col xs={12} className="pt-3 d-flex justify-content-center">
비로그인 로그인창으로
</Col>
</Row>
)}
</div>
</div>
{/* <!--// 본문 --> */}
</div>
</div>
</div>
</div>
);
}
export default PwChange;

View File

@ -33,25 +33,28 @@ function PwFindForm(){
return (
<Form onSubmit={findPw} noValidate>
<Form.Group as={Row} className="mb-3" controlId="formHorizontalEmail">
<Form.Label column sm={2}>
아이디
<Form.Label column sm={12} className="text-center">
비밀번호를 찾고자하는 아이디이메일을 입력해 주세요.
</Form.Label>
<Col sm={10}>
<Form.Control type="text" name="id" placeholder="ID" required />
<Col sm={12} className="input-group h_50">
<span className="input-group-text">
<img src="/assets/images/icon_id.png" alt="email icon" />
</span>
<Form.Control type="text" name="id" placeholder="아이디" required className={"radius_r shadow-none"} />
</Col>
</Form.Group>
<Form.Group as={Row} className="mb-3" controlId="formHorizontalEmail">
<Form.Label column sm={2}>
이메일
</Form.Label>
<Col sm={10}>
<Form.Control type="email" name="email" placeholder="Email" required/>
<Form.Group as={Row} controlId="formHorizontalEmail">
<Col sm={12} className="input-group h_50">
<span className="input-group-text">
<img src="/assets/images/mail.png" alt="email icon" />
</span>
<Form.Control type="email" name="email" placeholder="이메일" required className={"radius_r shadow-none"} />
</Col>
</Form.Group>
<Row className="mb-3">
<Form.Label column xs={{span:8, offset:2}} id="findResultLabel"></Form.Label>
<Col xs={2}>
<Button type="submit">찾기</Button>
<Form.Label column xs={{span:8, offset:2}} id="findResultLabel" className={"text-center f_17"}></Form.Label>
<Col xs={12}>
<Button type="submit" className={"btn btn-22498E btn-lg w-100 f_15"}>비밀번호 찾기</Button>
</Col>
</Row>
</Form>

View File

@ -3,7 +3,7 @@ import React from 'react'
function InfoShareChk() {
return (
<ul className="list">
<li>건설기준 포털시스템(KCSC) 회원님께 원활한 서비스 제공을 위해 최소한의 개인정보를 수집하고 있으며, 목적 별로 수집하는 개인정보를 다음과 같이 정하고 있습니다.</li>
<li>건설기준 포털시스템(KCSC) 회원님께 원활한 서비스 제공을 위해 최소한의 개인정보를 수집하고 있으며,<br /> 목적 별로 수집하는 개인정보를 다음과 같이 정하고 있습니다.</li>
<li className="no_dot">&nbsp;</li>
<li className="no_dot"> 수집하는 개인정보의 항목</li>
<li className="no_dot">&nbsp;&nbsp;&nbsp;수집항목: 아이디(ID), 비밀번호, 이메일(e-mail)</li>
@ -13,7 +13,7 @@ function InfoShareChk() {
<li className="no_dot">&nbsp;&nbsp;&nbsp;회원가입정보 : 탈퇴시까지</li>
<li className="no_dot"> 정보주체의 동의 거부 권리 그에 따른 불이익 사항</li>
<li className="no_dot">&nbsp;</li>
<li>귀하는 건설기준 포털시스템(KCSC) 이용을 위한 개인정보의 수집·이용 동의를 거부할 권리가 있습니다. 다만, 개인정보의 수집·이용 동의를 거부할 경우 건설기준 포털시스템(KCSC) 일부 기능에 대한 서비스 이용에 제한을 받으실 있습니다.</li>
<li>귀하는 건설기준 포털시스템(KCSC) 이용을 위한 개인정보의 수집·이용 동의를 거부할 권리가 있습니다. <br />다만, 개인정보의 수집·이용 동의를 거부할 경우 건설기준 포털시스템(KCSC) 일부 기능에 대한 서비스 이용에 제한을 받으실 있습니다.</li>
</ul>
)
}

View File

@ -71,13 +71,13 @@ function Join(props) {
<div className="container">
<div className="c_wrap">
{/* <!-- Location --> */}
<div className="location">
<ul>
<li><Link to={URL.MAIN} className="home" >Home</Link></li>
<li><Link to={URL.LOGIN}>로그인</Link></li>
<li>회원가입</li>
</ul>
</div>
{/*<div className="location">*/}
{/* <ul>*/}
{/* <li><Link to={URL.MAIN} className="home" >Home</Link></li>*/}
{/* <li><Link to={URL.LOGIN}>로그인</Link></li>*/}
{/* <li>회원가입</li>*/}
{/* </ul>*/}
{/*</div>*/}
{/* <!--// Location --> */}
<div className="layout">
@ -89,33 +89,39 @@ function Join(props) {
{infoShareChk?(
<form name="" method="" action="" >
<span className="group">
<label for="idInput">아이디</label>
<input type="text" name="" title="아이디" placeholder="아이디" value={userInfo?.id}
onChange={e => setUserInfo({ ...userInfo, id: e.target.value })} />
<label for="passwordInput">비밀번호</label>
<input type="password" name="" id="passwordInput" title="비밀번호" placeholder="비밀번호"
onChange={e => setUserInfo({ ...userInfo, password: e.target.value })}/>
<input type="password" name="" id="passwordChkInput" title="비밀번호 확인" placeholder="비밀번호 확인"
onChange={e => setUserInfo({ ...userInfo, passwordChk: e.target.value })}/>
<ul className="list">
<li>비밀번호는 6~12자의 영문 /소문자, 숫자, 특수문자를 혼합해서 사용하실 있습니다.
{/*<br />쉬운 비밀번호나 자주 쓰는 사이트의 비밀번호가 같을 경우, 도용되기 쉬우므로 주기적으로*/}
{/* 변경하셔서 사용하는 것이 좋습니다.*/}
</li>
</ul>
<label for="userNmInput">이름</label>
<input type="text" name="" title="이름" placeholder="이름" value={userInfo?.userNm}
onChange={e => setUserInfo({ ...userInfo, userNm: e.target.value })} />
<label for="emailInput">이메일</label>
<input type="text" name="" title="이메일" placeholder="이메일" value={userInfo?.email}
onChange={e => setUserInfo({ ...userInfo, email: e.target.value })} />
<label for="phoneNumInput">연락처</label>
<input type="text" name="" title="연락처" placeholder="연락처" value={userInfo?.phoneNum}
onChange={e => setUserInfo({ ...userInfo, phoneNum: e.target.value })} />
</span>
<ul className="list">
<li>비밀번호는 6~12자의 영문 /소문자, 숫자, 특수문자를 혼합해서 사용하실 있습니다.</li>
<li>쉬운 비밀번호나 자주 쓰는 사이트의 비밀번호가 같을 경우, 도용되기 쉬우므로 주기적으로
변경하셔서 사용하는 것이 좋습니다.</li>
</ul>
<button type="button" onClick={submitFormHandler}><span>회원가입</span></button>
<div className="pt-3 d-flex justify-content-center"><button type="button" onClick={submitFormHandler} className="btn btn-22498E">회원가입</button></div>
</form>
):(
<Row className="justify-content-end">
<Row className="justify-content-center">
<Col xs={12}>
<InfoShareChk/>
</Col>
<Col xs={"auto"}>
<button onClick={infoShareBtn}>동의하기</button>
<Col xs={12} className="pt-3 d-flex justify-content-center">
<button type="button" onClick={infoShareBtn} className="btn btn-22498E">동의하기</button>
</Col>
</Row>
)}

View File

@ -0,0 +1,197 @@
import React, {useCallback, useEffect, useRef, useState} from "react";
import {getLocalItem, setLocalItem} from "utils/storage";
import * as EgovNet from "api/egovFetch";
import CODE from "constants/code";
import {parseJwt} from "../../utils/parseJwt";
import URL from "constants/url";
import IdFindForm from "../login/IdFindForm";
import PwFindForm from "../login/PwFindForm";
import Row from "react-bootstrap/Row";
import Col from "react-bootstrap/Col";
import Form from "react-bootstrap/Form";
import {Link, useLocation, useNavigate} from "react-router-dom";
import Modal from "react-bootstrap/Modal";
function EgovLoginContent(props) {
const navigate = useNavigate();
const location = useLocation();
const sessionUser = parseJwt(getLocalItem('accessToken'));
const [userInfo, setUserInfo] = useState({ username: '', password: 'default', email: '', userSe: 'ACC_TP02'});
// eslint-disable-next-line no-unused-vars
const [saveIDFlag, setSaveIDFlag] = useState(false);
const [findModalState, setFindModalState] = useState(false);
const [modalTitle, setModalTitle] = useState();
const [modalBody, setModalBody] = useState();
const handleClose = () => setFindModalState(false);
const handleShow = () => setFindModalState(true);
const checkRef = useRef();
const KEY_ID = "KEY_ID";
const KEY_SAVE_ID_FLAG = "KEY_SAVE_ID_FLAG";
const handleSaveIDFlag = () => {
setLocalItem(KEY_SAVE_ID_FLAG, !saveIDFlag)
setSaveIDFlag(!saveIDFlag);
};
useEffect(() => {
let idFlag = getLocalItem(KEY_SAVE_ID_FLAG);
if (idFlag === null) {
setSaveIDFlag(false);
// eslint-disable-next-line react-hooks/exhaustive-deps
idFlag = false;
} else {
setSaveIDFlag(idFlag);
}
if (idFlag === false) {
setLocalItem(KEY_ID, "");
} else {
}
}, []);
useEffect(() => {
let data = getLocalItem(KEY_ID);
if (data !== null) {
setUserInfo({ username: data, password: 'default', email: '', userSe: 'ACC_TP02' });
}
}, []);
const submitFormHandler = (e) => {
console.log("EgovLoginContent submitFormHandler()");
const loginUrl = "/auth/login"
const requestOptions = {
method: "POST",
headers: {
'Content-type': 'application/json'
},
body: JSON.stringify(userInfo)
}
EgovNet.requestFetch(loginUrl,
requestOptions,
(resp) => {
if(resp !== undefined){
if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
let accessToken = resp?.accessToken || null;
let resultVO = parseJwt(accessToken);
let refreshToken = resp?.refreshToken || null;
// setSessionItem('accessToken', accessToken);
setLocalItem('accessToken', accessToken);
setLocalItem('refreshToken', refreshToken);
// setSessionItem('loginUser', resultVO);
props.onChangeLogin(resultVO);
if (saveIDFlag) {
setLocalItem(KEY_ID, resultVO?.id);
}
// PC Mobile
document.querySelector('.all_menu.WEB').classList.add('closed');
document.querySelector('.btnAllMenu').classList.remove('active');
document.querySelector('.btnAllMenu').title = '전체메뉴 닫힘';
document.querySelector('.all_menu.Mobile').classList.add('closed');
} else {
alert(resp.resultMessage)
}
}
})
}
const idFindModal = useCallback(
()=> {
setModalTitle("아이디 찾기")
setModalBody(IdFindForm)
handleShow();
}
)
const pwFindModal = () => {
setModalTitle("비밀번호 찾기")
setModalBody(PwFindForm)
handleShow();
}
return (
<>
{sessionUser != null ? (
<div>
<Row>
<Col xs={6} className={"fw-bold"}>최근검색어</Col>
<Col xs={6} className={"text-end f_11"}>전체삭제</Col>
</Row>
<div className={"login_search"}>
<div className={"login_search_word"}>
{/*<div className={"text-224 f_12 py-5 text-center"}>최근 검색한 내용이 없습니다.</div>*/}
<div className={"text-truncate"}>검색어</div>
<div className={"text-truncate"}>검색어</div>
<div className={"text-truncate"}>검색어검색어검색어검색어검색어검색어검색어검색어</div>
<div className={"text-truncate"}>검색어</div>
<div className={"text-truncate"}>검색어</div>
<div className={"text-truncate"}>검색어</div>
</div>
</div>
<div className="line_t"></div>
<div className="line_b"></div>
<Row>
<Col xs={6} className={"fw-bold f_15 d-flex align-items-center"}>Q&A 접수현황</Col>
<Col xs={6} className={"text-end"}><span className={"fs-5 text-224"}>0</span> </Col>
</Row>
<div className="line_t"></div>
<div className="line_b"></div>
<Row>
<Col xs={6} className={"fw-bold f_15 d-flex align-items-center"}>즐겨찾기</Col>
<Col xs={6} className={"text-end text-224"}><Link to={URL.MY}><span className={"f_12"}>바로가기</span> ></Link></Col>
</Row>
<div className="line_t"></div>
<div className="line_b"></div>
</div>
) : (
<>
<fieldset>
<legend>로그인</legend>
<div className="input-group">
<span className="input-group-text"><img src="/assets/images/icon_id.png" /></span>
<input type="text" className="form-control shadow-none py-3" title="아이디" placeholder="아이디" value={userInfo?.username}
onChange={e => setUserInfo({ ...userInfo, username: e.target.value })} />
</div>
<div className="input-group mt-3">
<span className="input-group-text"><img src="/assets/images/icon_pw.png" /></span>
<input type="password" className="form-control shadow-none py-3" title="비밀번호" placeholder="비밀번호"
onChange={e => setUserInfo({ ...userInfo, password: e.target.value })} />
</div>
<Row className="chk justify-content-between f_12 py-2">
<Col xs={5}>
<Form.Check inline label={"아이디 저장"} id={"saveid"} name={""} checked={saveIDFlag} onChange={handleSaveIDFlag}/>
</Col>
<Col xs={"auto"}>
<em className="clickable" onClick={idFindModal}>아이디 찾기</em>
<em> | </em>
<em className="clickable" onClick={pwFindModal}>비밀번호 찾기</em>
</Col>
</Row>
<button type="button" onClick={submitFormHandler} className="btn btn-22498E w-100 f_13 py-2"> </button>
<div className="line_t"></div>
<div className="line_b"></div>
<Link to={URL.JOIN} className="btn btn-outline-secondary w-100 f_13">회원가입</Link>
</fieldset>
<Modal show={findModalState} onHide={handleClose}>
<Modal.Header closeButton>
<Modal.Title>{modalTitle}</Modal.Title>
</Modal.Header>
<Modal.Body>{modalBody}</Modal.Body>
</Modal>
</>
)}
</>
);
}
export default EgovLoginContent;

View File

@ -1,213 +1,413 @@
import React, { useState, useEffect, useCallback } from 'react';
import { Link, useLocation } from 'react-router-dom';
import React, {useState, useEffect, useCallback, useRef} from 'react';
import { Link, useLocation, useNavigate } from 'react-router-dom';
import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';
import Button from 'react-bootstrap/Button';
import CountUp from 'react-countup';
import { Box, Tabs, Tab, Typography } from '@mui/material';
import Slider from "react-slick";
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";
import * as EgovNet from 'api/egovFetch';
import URL from 'constants/url';
import EgovLogin from "../main/EgovLogin";
import {parseJwt} from "../../utils/parseJwt";
import {getLocalItem, setLocalItem} from "utils/storage";
import CODE from "../../constants/code";
function a11yProps(index) {
return {
id: `wrapped-tab-${index}`,
'aria-controls': `wrapped-tabpanel-${index}`,
};
}
function EgovMain(props) {
console.group("EgovMain");
console.log("[Start] EgovMain ------------------------------");
console.log("EgovMain [props] : ", props);
const location = useLocation();
const navigate = useNavigate();
console.log("EgovMain [location] : ", location);
// eslint-disable-next-line no-unused-vars
const [noticeBoard, setNoticeBoard] = useState();
// eslint-disable-next-line no-unused-vars
const [gallaryBoard, setGallaryBoard] = useState();
const [noticeListTag, setNoticeListTag] = useState();
const [gallaryListTag, setGallaryListTag] = useState();
const [user, setUser] = useState(parseJwt(getLocalItem('accessToken')) || null);
console.log(user);
const retrieveList = useCallback(() => {
console.groupCollapsed("EgovMain.retrieveList()");
const retrieveListURL = '/cmm/main/mainPageAPI.do';
const requestOptions = {
method: "POST",
headers: {
'Content-type': 'application/json'
},
body: JSON.stringify()
const handlePlusClick = () => {
const urls = [
URL.SUPPORT_LIST_NOCODE+'/KCSC-NTC',
URL.COMMITTEE_PROGRESS,
URL.SUPPORT_LIST_NOCODE+'/KCSC-NOT',
URL.SUPPORT_RESEARCH,
URL.SUPPORT_LIST_NOCODE+'/KCSC-TEC',
URL.SUPPORT_LIST_NOCODE+'/KCSC-NWS'
];
if (value >= 0 && value < urls.length) {
navigate(urls[value]);
}
};
EgovNet.requestFetch(retrieveListURL,
requestOptions,
(resp) => {
const settings = {
dots: false,
infinite: true,
speed: 500,
slidesToShow: 6,
slidesToScroll: 1,
arrows: false,
autoplay: true,
autoplaySpeed: 3000,
pauseOnHover: true
};
setNoticeBoard(resp.result.notiList);
setGallaryBoard(resp.result.galList);
const banners = [
{ src: '/assets/images/f-logo.png', url: 'https://talbakkum.com' },
{ src: '/assets/images/copy2.png', url: 'https://talbakkum.com' },
{ src: '/assets/images/f-logo.png', url: 'https://talbakkum.com' },
{ src: '/assets/images/f-logo.png', url: 'https://talbakkum.com' },
{ src: '/assets/images/copy2.png', url: 'https://talbakkum.com' },
{ src: '/assets/images/f-logo.png', url: 'https://talbakkum.com' },
{ src: '/assets/images/f-logo.png', url: 'https://talbakkum.com' },
{ src: '/assets/images/f-logo.png', url: 'https://talbakkum.com' },
{ src: '/assets/images/f-logo.png', url: 'https://talbakkum.com' },
{ src: '/assets/images/copy2.png', url: 'https://talbakkum.com' },
{ src: '/assets/images/f-logo.png', url: 'https://talbakkum.com' },
{ src: '/assets/images/f-logo.png', url: 'https://talbakkum.com' },
{ src: '/assets/images/copy2.png', url: 'https://talbakkum.com' },
{ src: '/assets/images/f-logo.png', url: 'https://talbakkum.com' },
{ src: '/assets/images/f-logo.png', url: 'https://talbakkum.com' },
{ src: '/assets/images/f-logo.png', url: 'https://talbakkum.com' },
// .
];
let mutNotiListTag = [];
mutNotiListTag.push(<li key="0">검색된 결과가 없습니다.</li>); //
// TAB .
const [value, setValue] = useState(0);
const handleChange = (event, newValue) => {
setValue(newValue);
};
//
resp.result.notiList.forEach(function (item, index) {
if (index === 0) mutNotiListTag = []; //
mutNotiListTag.push(
<li key={item.nttId}>
<Link
to={{pathname: URL.INFORM_NOTICE_DETAIL}}
state={{
nttId: item.nttId,
bbsId: item.bbsId
}}
>
{item.nttSj}
<span>{item.frstRegisterPnttm}</span>
</Link>
</li>
);
});
setNoticeListTag(mutNotiListTag);
// eslint-disable-next-line no-unused-vars
// const [noticeBoard, setNoticeBoard] = useState();
// // eslint-disable-next-line no-unused-vars
// const [gallaryBoard, setGallaryBoard] = useState();
// const [noticeListTag, setNoticeListTag] = useState();
// const [gallaryListTag, setGallaryListTag] = useState();
//
// const retrieveList = useCallback(() => {
// console.groupCollapsed("EgovMain.retrieveList()");
//
//
// const retrieveListURL = '/';
// const requestOptions = {
// method: "POST",
//
// headers: {
// 'Content-type': 'application/json'
// },
// body: JSON.stringify()
// }
//
// EgovNet.requestFetch(retrieveListURL,
// requestOptions,
// (resp) => {
//
// setNoticeBoard(resp.result.notiList);
// setGallaryBoard(resp.result.galList);
//
// let mutNotiListTag = [];
// mutNotiListTag.push(<li key="0"> .</li>); //
//
// //
// resp.result.notiList.forEach(function (item, index) {
// if (index === 0) mutNotiListTag = []; //
// mutNotiListTag.push(
// <li key={item.nttId}>
// <Link
// to={{pathname: URL.INFORM_NOTICE_DETAIL}}
// state={{
// nttId: item.nttId,
// bbsId: item.bbsId
// }}
// >
// {item.nttSj}
// <span>{item.frstRegisterPnttm}</span>
// </Link>
// </li>
// );
// });
// setNoticeListTag(mutNotiListTag);
//
// let mutGallaryListTag = [];
// mutGallaryListTag.push(<li key="0"> .</li>); //
//
// //
// resp.result.galList.forEach(function (item, index) {
// if (index === 0) mutGallaryListTag = []; //
// mutGallaryListTag.push(
// <li key={index}>
// <Link
// to={{pathname: URL.INFORM_GALLERY_DETAIL}}
// state={{
// nttId: item.nttId,
// bbsId: item.bbsId
// }}
// >
// {item.nttSj}
// <span>{item.frstRegisterPnttm}</span>
// </Link>
// </li>
// );
// });
// setGallaryListTag(mutGallaryListTag);
// },
// function (resp) {
// console.log("err response : ", resp);
// }
// );
// console.groupEnd("EgovMain.retrieveList()");
// },[]);
//
// useEffect(() => {
// retrieveList();
// }, [retrieveList]);
let mutGallaryListTag = [];
mutGallaryListTag.push(<li key="0">검색된 결과가 없습니다.</li>); //
//
resp.result.galList.forEach(function (item, index) {
if (index === 0) mutGallaryListTag = []; //
mutGallaryListTag.push(
<li key={index}>
<Link
to={{pathname: URL.INFORM_GALLERY_DETAIL}}
state={{
nttId: item.nttId,
bbsId: item.bbsId
}}
>
{item.nttSj}
<span>{item.frstRegisterPnttm}</span>
</Link>
</li>
);
});
setGallaryListTag(mutGallaryListTag);
const onChangeLogin = (user) => {
setUser(user);
// props.onChangeLogin(user);
}
const logOutHandler = () => {//
const logOutUrl = '/auth/logout';
const requestOptions = {
headers: {
'Content-type': 'application/json',
},
credentials: 'include',
}
EgovNet.requestFetch(logOutUrl, requestOptions,
function (resp) {
console.log("err response : ", resp);
console.log("===>>> logout resp= ", resp);
if (parseInt(resp.resultCode) === parseInt(CODE.RCV_SUCCESS)) {
onChangeLogin({ loginVO: {} });
setLocalItem('loginUser', {"id":""});
setLocalItem('accessToken', null);
setLocalItem('refreshToken', null);
window.alert("로그아웃되었습니다!");
// PC Mobile : 2023.04.13()
document.querySelector('.all_menu.WEB').classList.add('closed');
document.querySelector('.btnAllMenu').classList.remove('active');
document.querySelector('.btnAllMenu').title = '전체메뉴 닫힘';
document.querySelector('.all_menu.Mobile').classList.add('closed');
onChangeLogin(null);
}
}
);
console.groupEnd("EgovMain.retrieveList()");
},[]);
useEffect(() => {
retrieveList();
}, [retrieveList]);
}
console.log("------------------------------EgovMain [End]");
console.groupEnd("EgovMain");
return (
<div className="container P_MAIN">
<div className="P_MAIN">{/* container */}
<div className="c_wrap">
<div className="colbox">
<div className="left_col">
{/*<img src="/assets/images/img_simple_main.png" alt="단순 홈페이지 전자정부 국가건설기준센터의 경량환경 내부업무에 대한 최신 정보와 기술을 제공하고 있습니다." />*/}
<h3>건설기준코드 검색</h3>
<Row>
<Col xs={3}><a href="/standardCode/list/1010" title="공통코드" className={"mainbnt"}>공통코드</a></Col>
<Col xs={3}><a href="/standardCode/list/101011" title="공통코드" className={"mainbnt"}>지반코드</a></Col>
<Col xs={3}><a href="/standardCode/list/101014" title="공통코드" className={"mainbnt"}>구조코드</a></Col>
<Col xs={3}><a href="/standardCode/list/101017" title="공통코드" className={"mainbnt"}>내진코드</a></Col>
<Col xs={3}><a href="/standardCode/list/102021" title="공통코드" className={"mainbnt"}>가설코드</a></Col>
<Col xs={3}><a href="/standardCode/list/102024" title="공통코드" className={"mainbnt"}>교량코드</a></Col>
<Col xs={3}><a href="/standardCode/list/102027" title="공통코드" className={"mainbnt"}>터널코드</a></Col>
<Col xs={3}><a href="/standardCode/list/102029" title="공통코드" className={"mainbnt"}>공동구코드</a></Col>
<Col xs={3}><a href="/standardCode/list/102031" title="공통코드" className={"mainbnt"}>설비코드</a></Col>
<Col xs={3}><a href="/standardCode/list/102034" title="공통코드" className={"mainbnt"}>조경코드</a></Col>
<Col xs={3}><a href="/standardCode/list/102041" title="공통코드" className={"mainbnt"}>건축코드</a></Col>
<Col xs={3}><a href="/standardCode/list/102044" title="공통코드" className={"mainbnt"}>도로코드</a></Col>
<Col xs={3}><a href="/standardCode/list/102047" title="공통코드" className={"mainbnt"}>철도코드</a></Col>
<Col xs={3}><a href="/standardCode/list/102051" title="공통코드" className={"mainbnt"}>하천코드</a></Col>
<Col xs={3}><a href="/standardCode/list/102054" title="공통코드" className={"mainbnt"}>댐코드</a></Col>
<Col xs={3}><a href="/standardCode/list/102057" title="공통코드" className={"mainbnt"}>상수도코드</a></Col>
<Col xs={3}><a href="/standardCode/list/102061" title="공통코드" className={"mainbnt"}>하수도코드</a></Col>
<Col xs={3}><a href="/standardCode/list/102067" title="공통코드" className={"mainbnt"}>농업기반코드</a></Col>
<div className="topbox d-flex justify-content-center align-items-center">
<div className="topbox_1">
<div className="topbox_11">실시간 인기키워드</div>
<div className="topbox_12">현재 기준 사용자가 가장 많이 검색하는 키워드입니다.</div>
<div className="topbox_13">2024 5 9 목요일 오전 11:45</div>
<Row className="topbox_14">
<Col xs={6}>
<div className={"text-truncate"}>1 가설공사</div>
<div className={"text-truncate"}>2 가설공사</div>
<div className={"text-truncate"}>3 가설공사</div>
<div className={"text-truncate"}>4 가설공사가설공사</div>
<div className={"text-truncate"}>5 가설공사</div>
</Col>
<Col xs={6}>
<div className={"text-truncate"}>&nbsp;&nbsp;6 가설공사</div>
<div className={"text-truncate"}>&nbsp;&nbsp;7 가설공사가설공사가설공사가설공사</div>
<div className={"text-truncate"}>&nbsp;&nbsp;8 가설공사</div>
<div className={"text-truncate"}>&nbsp;&nbsp;9 가설공사</div>
<div className={"text-truncate"}>10 가설공사</div>
</Col>
</Row>
</div>
{/*<div className="right_col">*/}
{/* <div className="mini_board">*/}
{/* <ul className="tab">*/}
{/* <li><a href="#공지사항" className="on">공지사항</a></li>*/}
{/* <li><a href="#갤러리">갤러리</a></li>*/}
{/* </ul>*/}
{/* <div className="list">*/}
{/* <div className="notice">*/}
{/* <h2 className="blind">공지사항</h2>*/}
{/* <ul>*/}
{/* {noticeListTag}*/}
{/* </ul>*/}
{/* <Link to={URL.INFORM_NOTICE} className="more">더보기</Link>*/}
{/* </div>*/}
{/* <div className="gallary">*/}
{/* <h2 className="blind">갤러리</h2>*/}
{/* <ul>*/}
{/* {gallaryListTag}*/}
{/* </ul>*/}
{/* <Link to={URL.INFORM_GALLERY} className="more">더보기</Link>*/}
{/* </div>*/}
{/* </div>*/}
{/* </div>*/}
{/* <div className="banner">*/}
{/* <Link to={URL.SUPPORT_DOWNLOAD} className="bn1">*/}
{/* <strong>자료실</strong>*/}
{/* <span>다양한 자료를<br />다운로드 받으실 수 있습니다.</span>*/}
{/* </Link>*/}
{/* <Link to={URL.ABOUT} className="bn2">*/}
{/* <strong>국가건설기준센터</strong>*/}
{/* <span>국가건설기준센터의<br />약도 등의 정보를 제공합니다.</span>*/}
{/* </Link>*/}
{/* </div>*/}
{/*</div>*/}
<div className="topbox_2">
<div className={"topbox_11"}>자주찾는 서비스</div>
<div className={"topbox_12"}>버튼을 선택하시면 해당 서비스로 이동합니다.</div>
<Row>
<Col>
<Link to={URL.STANDARD_CODE_LIST} className="link-wrapper">
<div className={"topbox_13"}><img src="/assets/images/ico-landing1.png" /></div>
<div className={"topbox_14"}>코드검색</div>
<div className={"topbox_15"}><Button type={"button"} className={"btn btn-22498E px-3"}>바로가기</Button> </div>
</Link>
</Col>
<Col>
<Link to={URL.STANDARD_CODE_INFO} className="link-wrapper">
<div className={"topbox_13"}><img src="/assets/images/ico-landing2.png" /></div>
<div className={"topbox_14"}>코드안내</div>
<div className={"topbox_15"}><Button type={"button"} className={"btn btn-22498E px-3"}>바로가기</Button> </div>
</Link>
</Col>
<Col>
<Link to={URL.COMMITTEE_SCHEDULE} className="link-wrapper">
<div className={"topbox_13"}><img src="/assets/images/ico-landing3.png" /></div>
<div className={"topbox_14"}>위원회일정</div>
<div className={"topbox_15"}><Button type={"button"} className={"btn btn-22498E px-3"}>바로가기</Button> </div>
</Link>
</Col>
<Col>
<Link to={URL.STANDARD_CODE_LIST + '/5000'} className="link-wrapper">
<div className={"topbox_13"}><img src="/assets/images/ico-landing4.png" /></div>
<div className={"topbox_14"}>전문시방서</div>
<div className={"topbox_15"}><Button type={"button"} className={"btn btn-22498E px-3"}>바로가기</Button> </div>
</Link>
</Col>
</Row>
</div>
<div className="topbox_3">
<div className={"topbox_11"}>{user ? (
<>
<Row>
<Col xs={6}>{user.id} .</Col>
<Col xs={6} className={"text-end"}><Button type={"button"} className={"btn btn-22498E btn-sm"} onClick={logOutHandler}>로그아웃</Button> </Col>
</Row>
</>
) : ('로그인')}
</div>
<div>
<EgovLogin onChangeLogin={onChangeLogin}></EgovLogin>
</div>
</div>
</div>
<div className="menubox d-flex justify-content-center align-items-center">
<div className="menubox_n text-center"><Link to={URL.STANDARD_CODE_OLD}><div className="menu_img"><img src="/assets/images/ico-landing5.png" /></div><div className="menu_text">훈령/예규/지침</div></Link></div>
<div className="menubox_n text-center"><Link to={URL.STANDARD_CODE_ENG}><div className="menu_img"><img src="/assets/images/ico-landing6.png" /></div><div className="menu_text">영문건설기준</div></Link></div>
<div className="menubox_n text-center"><Link to={URL.STANDARD_CODE_TERM}><div className="menu_img"><img src="/assets/images/ico-landing8.png" /></div><div className="menu_text">건설기준용어</div></Link></div>
<div className="menubox_n text-center"><Link to={URL.SUPPORT_LIST_NOCODE+'/KCSC-EVT'}><div className="menu_img"><img src="/assets/images/ico-landing7.png" /></div><div className="menu_text">주요행사</div></Link></div>
<div className="menubox_n text-center"><Link to={URL.SUPPORT_LIST_NOCODE+'/KCSC-INV'}><div className="menu_img"><img src="/assets/images/ico-landing9.png" /></div><div className="menu_text">수요조사</div></Link></div>
<div className="menubox_n text-center"><Link to={URL.SUPPORT_API}><div className="menu_img"><img src="/assets/images/ico-landing10.png" /></div><div className="menu_text">API 서비스</div></Link></div>
<div className="menubox_n text-center"><Link to={URL.SUPPORT_SITE}><div className="menu_img"><img src="/assets/images/ico-landing11.png" /></div><div className="menu_text">관련사이트</div></Link></div>
</div>
<div className="qnabox">
<div className="qnabox_1 d-flex justify-content-center">
<div className="qnabox_11 d-flex justify-content-start align-items-end">Q&A</div>
<Row className="qnabox_12 text-center align-items-end">
<Col xs={9}></Col>
<Col xs={1} className={"rounded_circle_qna"}><img src={"/assets/images/left.png"} /></Col>
<Col xs={1} className={""}> 1/2 </Col>
<Col xs={1} className={"rounded_circle_qna"}><img src={"/assets/images/right.png"} /></Col>
</Row>
</div>
<div className="qnabox_2 d-flex justify-content-center align-items-center">
<div className="qnabox_n">
<Row>
<Col xs={10} className={"qnabox_n_file py-1"}>00.jpg</Col>
<Col xs={2} className={"text-end p-0"}><img src={"/assets/images/file.png"} /></Col>
</Row>
<Row className={"qnabox_n_title pt-2"}>콘크리트 내구성 설계 평가 문의요.. 정말 되나요? 콘크리트 내구성 설계 평가 문의요.. 정말 되나요?</Row>
<Row className={"qnabox_n_date justify-content-end"}>2024.01.23</Row>
</div>
<div className="qnabox_n">
<Row>
<Col xs={10} className={"qnabox_n_file py-1"}>00.jpg</Col>
<Col xs={2} className={"text-end p-0"}><img src={"/assets/images/file.png"} /></Col>
</Row>
<Row className={"qnabox_n_title pt-2"}>콘크리트 내구성 설계 평가 문의요.. 정말 되나요? 콘크리트 내구성 설계 평가 문의요.. 정말 되나요?</Row>
<Row className={"qnabox_n_date justify-content-end"}>2024.01.23</Row></div>
<div className="qnabox_n">
<Row>
<Col xs={10} className={"qnabox_n_file py-1"}>00.jpg</Col>
<Col xs={2} className={"text-end p-0"}><img src={"/assets/images/file.png"} /></Col>
</Row>
<Row className={"qnabox_n_title pt-2"}>콘크리트 내구성 설계 평가 문의요.. 정말 되나요? 콘크리트 내구성 설계 평가 문의요.. 정말 되나요?</Row>
<Row className={"qnabox_n_date justify-content-end"}>2024.01.23</Row></div>
<div className="qnabox_n">
<Row>
<Col xs={10} className={"qnabox_n_file py-1"}>00.jpg</Col>
<Col xs={2} className={"text-end p-0"}><img src={"/assets/images/file.png"} /></Col>
</Row>
<Row className={"qnabox_n_title pt-2"}>콘크리트 내구성 설계 평가 문의요.. 정말 되나요? 콘크리트 내구성 설계 평가 문의요.. 정말 되나요?</Row>
<Row className={"qnabox_n_date justify-content-end"}>2024.01.23</Row></div>
</div>
</div>
<div className="numbox d-flex justify-content-center align-items-center">
<div className="numbox_n"><div className="num_text">다운로드 </div><div className="num_count"><CountUp start={0} end={334345} duration={2.5} separator="," /><span className="unit"></span></div></div>
<div className="numbox_n"><div className="num_text">회원가입자 </div><div className="num_count"><CountUp start={0} end={12345} duration={2.5} separator="," /><span className="unit"></span></div></div>
<div className="numbox_n"><div className="num_text"> 편균 방문자</div><div className="num_count"><CountUp start={0} end={56427} duration={2.5} separator="," /><span className="unit"></span></div></div>
<div className="numbox_n"><div className="num_text">개정고시</div><div className="num_count"><CountUp start={0} end={99875} duration={2.5} separator="," /><span className="unit"></span></div></div>
</div>
<div className="bbsbox d-flex justify-content-center align-items-start">
<div className="bbsbox_1">
<Box sx={{ borderBottom: 2, borderColor: 'divider' }}>
<Tabs
value={value}
onChange={handleChange}
indicatorColor="secondary"
textColor="secondary"
>
<Tab value={0} {...a11yProps(0)} sx={{ fontSize: value === 0 ? '1.5rem' : '1rem', fontWeight: 700}} label="공지사항" wrapped />
<Tab value={1} {...a11yProps(1)} sx={{ fontSize: value === 1 ? '1.5rem' : '1rem', fontWeight: 700}} label="위원회 진행현황" />
<Tab value={2} {...a11yProps(2)} sx={{ fontSize: value === 2 ? '1.5rem' : '1rem', fontWeight: 700}} label="건설기준고시" />
<Tab value={3} {...a11yProps(3)} sx={{ fontSize: value === 3 ? '1.5rem' : '1rem', fontWeight: 700}} label="건설기준연구" />
<Tab value={4} {...a11yProps(4)} sx={{ fontSize: value === 4 ? '1.5rem' : '1rem', fontWeight: 700}} label="기술자료" />
<Tab value={5} {...a11yProps(5)} sx={{ fontSize: value === 5 ? '1.5rem' : '1rem', fontWeight: 700}} label="보도자료" />
<Tab value="" label="+" sx={{ fontSize: '1.75rem', ml: 'auto' }} onClick={handlePlusClick} />
</Tabs>
</Box>
<TabPanel value={value} index={0}>Item 0</TabPanel>
<TabPanel value={value} index={1}>Item 1</TabPanel>
<TabPanel value={value} index={2}>Item 2</TabPanel>
<TabPanel value={value} index={3}>Item 3</TabPanel>
<TabPanel value={value} index={4}>Item 4</TabPanel>
<TabPanel value={value} index={5}>Item 5</TabPanel>
</div>
<div className="bbsbox_2"><Link to={URL.ABOUT_PROMOTE}><img src="/assets/images/narae.jpg" /></Link></div>
</div>
<div className="bannerbox">
<Slider {...settings}>
{banners.map((banner, index) => (
<div key={index} className="banner_slide d-flex justify-content-center align-items-center">
<a href={banner.url} target="_blank" rel="noopener noreferrer">
<img src={banner.src} alt={`Banner ${index + 1}`} />
</a>
</div>
))}
</Slider>
</div>
{/*<div className="banner_bot">*/}
{/* <div className="b1">*/}
{/* <div>*/}
{/* <h2>주요사업 소개</h2>*/}
{/* <p>국가건설기준센터가 제공하는<br />*/}
{/* 주요 사업을 소개합니다.</p>*/}
{/* </div>*/}
{/* <Link to={URL.INTRO_WORKS}>자세히 보기</Link>*/}
{/* </div>*/}
{/* <div className="b2">*/}
{/* <div>*/}
{/* <h2>대표서비스 소개</h2>*/}
{/* <p>국가건설기준센터 실행환경의<br />*/}
{/* 서비스 그룹에서 제공하는<br />*/}
{/* 대표서비스입니다.</p>*/}
{/* </div>*/}
{/* <Link to={URL.INTRO_SERVICE}>자세히 보기</Link>*/}
{/* </div>*/}
{/* <div className="b3">*/}
{/* <div>*/}
{/* <h2>서비스 신청</h2>*/}
{/* <p>국가건설기준센터 경량환경<br />*/}
{/* 홈페이지의 다양한 서비스를<br />*/}
{/* 신청 하실 수 있습니다.</p>*/}
{/* </div>*/}
{/* <Link to={URL.SUPPORT_APPLY}>자세히 보기</Link>*/}
{/* </div>*/}
{/* <div className="b4">*/}
{/* <div>*/}
{/* <h2>일정 현황</h2>*/}
{/* <p>국가건설기준센터 경량환경<br />*/}
{/* 홈페이지의 전체적인 일정<br />*/}
{/* 현황을 조회하실 수 있습니다.</p>*/}
{/* </div>*/}
{/* <Link to={URL.INFORM}>자세히 보기</Link>*/}
{/* </div>*/}
{/*</div>*/}
</div>
</div>
);
}
function TabPanel(props) {
const { children, value, index, ...other } = props;
return (
<div
role="tabpanel"
hidden={value !== index}
id={`wrapped-tabpanel-${index}`}
aria-labelledby={`wrapped-tab-${index}`}
{...other}
>
{value === index && (
<Box sx={{ p: 3 }}>
<Typography>{children}</Typography>
</Box>
)}
</div>
);
}
export default EgovMain;

View File

@ -0,0 +1,107 @@
import React, { useState } from 'react';
import {Link, useLocation, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
import URL from "constants/url";
import Row from "react-bootstrap/Row";
import Col from "react-bootstrap/Col";
import Button from "react-bootstrap/Button";
function CodeEng(){
const navigate = useNavigate();
const goToDown = () => {
// navigate('/support/create/KCSC-QA');
alert('다운로드 진행중입니다.') // .
};
return (
<div className="container">
<div className="c_wrap">
{/* <!-- Location --> */}
<div className="location">
<ul>
<li><Link to={URL.MAIN} className="home" >Home</Link></li>
<li><Link to={URL.SUPPORT_LIST_NOCODE+'/KCSC-NTC'}>정보제공</Link></li>
<li>영문 건설기준</li>
</ul>
</div>
{/* <!--// Location --> */}
<div className="layout">
<div className="contents QNA_LIST" id="contents">
{/* <!-- 본문 --> */}
<h1 className="tit_3">영문 건설기준</h1>
{/* <!-- 영문건설기준 안내 --> */}
<div className="condition2">
<ul>
<li className="">
- 건설산업의 해외진출 참고자료로 활용 있도록 영문 건설기준을 단계적으로 제공 예정입니다.
</li>
<li className="">
- 영문 건설기준은 영문화 시점에서의 국문 건설기준을 번역한 것으로 현행 국문 건설기준의 최신 내용을 반영하지 못한 부분이 있음을 알려드리오니, 영문화된 건설기준 활용 유의하여 주시기 바랍니다.
</li>
<li className="">
- 그리고, 법령, 표준 등의 영문 명칭과 건설용어 등은 검토와 협의를 통해 수정하고 있으며 이를 비롯하여 영문 건설기준에 대한 의견을 남겨주시면 검토 반영할 있도록 하겠습니다.
</li>
</ul>
</div>
<div className={"text-end w-100 py-3 fw-bold"}> 대표메일 : kcsc@kict.re.kr</div>
{/* <!-- 게시판목록 --> */}
<div className="board_list BRD014">
<div className="head">
<span>기준명</span>
<span>설계기준(KDS)</span>
<span>표준시방서(KCS)</span>
</div>
<div className="result">
{/* <!-- case : 데이터 없을때 --> */}
{/* <p className="no_data" key="0">검색된 결과가 없습니다.</p> */}
{/* <!-- case : 데이터 있을때 --> */}
<Row className="list_item1">
<div>공통 (KDS 10 00 00)</div>
<div className="">
<Button type={"button"} variant={"outline-secondary btn-sm mx-1"} onClick={goToDown}>다운로드</Button>
</div>
<div>
<Button type={"button"} variant={"outline-secondary btn-sm mx-1"} onClick={goToDown}>다운로드</Button>
</div>
</Row>
<Row className="list_item1">
<div>지반 (KDS 11 00 00)</div>
<div className="">
<Button type={"button"} variant={"outline-secondary btn-sm mx-1"} onClick={goToDown}>다운로드(콘크리트 구조))</Button>
<Button type={"button"} variant={"outline-secondary btn-sm mx-1"} onClick={goToDown}>다운로드(강구조))</Button>
</div>
<div>
<Button type={"button"} variant={"outline-secondary btn-sm mx-1"} onClick={goToDown}>다운로드</Button>
</div>
</Row>
<Row className="list_item1">
<div>구조 (KDS 14 00 00)</div>
<div className="">
<Button type={"button"} variant={"outline-secondary btn-sm mx-1"} onClick={goToDown}>다운로드</Button>
</div>
<div>
<Button type={"button"} variant={"outline-secondary btn-sm mx-1"} onClick={goToDown}>다운로드(콘크리트 구조))</Button>
<Button type={"button"} variant={"outline-secondary btn-sm mx-1"} onClick={goToDown}>다운로드(강구조))</Button>
</div>
</Row>
</div>
</div>
{/* <!--// 게시판목록 --> */}
{/* <!--// 본문 --> */}
</div>
</div>
</div>
</div>
);
}
export default CodeEng;

View File

@ -0,0 +1,14 @@
import React, { useState } from 'react';
import {Link, useLocation, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
function CodeOld(){
return (
<div>12() 건설기준코드</div>
);
}
export default CodeOld;

View File

@ -0,0 +1,14 @@
import React, { useState } from 'react';
import {Link, useLocation, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
function CodeTerm(){
return (
<div>건설기준코드 용어</div>
);
}
export default CodeTerm;

View File

@ -0,0 +1,14 @@
import React, { useState } from 'react';
import {Link, useLocation, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
function API(){
return (
<div>API 서비스</div>
);
}
export default API;

View File

@ -0,0 +1,153 @@
import React, { useState } from 'react';
import {Link, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
import URL from 'constants/url';
import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';
import Button from 'react-bootstrap/Button';
function Create(){
const navigate = useNavigate();
const goToList = () => {
navigate('/support/list/KCSC-QA');
};
return (
<div className="container">
<div className="c_wrap">
{/* <!-- Location --> */}
<div className="location">
<ul>
<li><Link to={URL.MAIN} className="home" >Home</Link></li>
<li><Link to={URL.SUPPORT}>정보제공</Link></li>
<li>게시판명</li>
</ul>
</div>
{/* <!--// Location --> */}
<div className="layout">
<div className="contents QNA_LIST" id="contents">
{/* <!-- 본문 --> */}
<h1 className="tit_3">게시판명</h1>
<div className="board_view2">
{/*카테고리랑 공개여부는 Q&A만 보이게 처리*/}
<dl>
<dt>카테고리</dt>
<dd className="d-flex justify-content-start">
<div className="me-3">
<select defaultValue={"0"} className={"form-select"}>
<option value="0">설계기준</option>
<option value="">설계기준</option>
<option value="">설계기준</option>
<option value="">설계기준</option>
</select>
</div>
<div className="me-3">
<select defaultValue={"0"} className={"form-select"}>
<option value="0">구분</option>
<option value="">설계기준</option>
<option value="">설계기준</option>
<option value="">설계기준</option>
</select>
</div>
<div className="me-3">
<select defaultValue={"0"} className={"form-select"}>
<option value="0">대분류</option>
<option value="">설계기준</option>
<option value="">설계기준</option>
<option value="">설계기준</option>
</select>
</div>
<div className="me-3">
<select defaultValue={"0"} className={"form-select"}>
<option value="0">중분류</option>
<option value="">설계기준</option>
<option value="">설계기준</option>
<option value="">설계기준</option>
</select>
</div>
<div className="">
<select defaultValue={"0"} className={"form-select"}>
<option value="0">소분류</option>
<option value="">설계기준</option>
<option value="">설계기준</option>
<option value="">설계기준</option>
</select>
</div>
</dd>
</dl>
<dl>
<dt>공개여부</dt>
<dd>
<input type={"radio"} name={"isOpen"} value={""} checked /> 공개
<input type={"radio"} name={"isOpen"} value={""} className={"ms-3"} /> 비공개
</dd>
</dl>
{/*카테고리랑 공개여부는 Q&A만 보이게 처리*/}
<dl>
<dt>첨부파일</dt>
<dd>
<span className={"card p-2 mb-2 h_100 text-center"}> 파일을 이곳에 드래그 해주세요. </span>
{/*글 수정시 첨부파일 삭제버튼 사용*/}
<span className="file_attach">
<Link to="">file_name.hwp</Link> <span>[3,626] byte</span>
<Button to="#" variant={"danger"} className="btn-sm ms-2">삭제</Button>
</span>
</dd>
</dl>
<dl>
<dt>제목</dt>
<dd>
<input type={"text"} name={"title"} value={""} className={"form-control rounded-2"} />
</dd>
</dl>
</div>
<div className="p-3">
에디터 넣어주세요.<br />
에디터 넣어주세요.<br />
에디터 넣어주세요.<br />
에디터 넣어주세요.<br />
에디터 넣어주세요.
</div>
{/*Q&A만 보이게 처리하세요*/}
<div className={"card m-3 p-5"}>
<span className={"pb-4 fs-4 fw-bold"}>개인정보 수집 이용 동의</span>
<span className={"pb-4"}>국가건설기준센터는 게시물 작성자의 개인정보를 다음의 목적을 위해 처리합니다.<br />
처리한 개인정보는 다음의 목적 이외의 용도로는 사용되지 않으며, 이용 목적이 변경될 시에는 사전동의를 구할 예정입니다.</span>
<span className={"pb-4"}> 개인정보의 수집·이용 목적 : 질의신청<br />
수집하려는 개인정보의 항목 : 작성자 아이디<br />
개인정보의 보유 이용 기간 : 작성자가 게시물을 삭제할 까지</span>
<span className={"pb-4"}>귀하께서는 개인정보 수집에 대한 동의를 거부할 권리가 있으며, 동의를 거부하는 경우 "질의신청" 이용 없습니다.<br />
위의 개인정보 수집 이용동의에 동의 하며 "질의신청" 진행하겠습니까?</span>
<span>
<label><input type={"radio"} name={"isAgree"} value={""} /> 동의</label>
<label><input type={"radio"} name={"isAgree"} value={""} className={"ms-3"} checked /> 비동의</label>
</span>
</div>
<Row className={"px-3 justify-content-between"} >
<Col><Button type={"button"} className={"btn btn-22498E px-4"} onClick={goToList} >목록</Button></Col>
<Col className={"text-end"}><Button type={"button"} className={"btn btn-22498E px-4"} onClick={goToList} >저장</Button></Col>
</Row>
{/* <!--// 본문 --> */}
</div>
</div>
</div>
</div>
);
}
export default Create;

View File

@ -0,0 +1,148 @@
import React, { useState } from 'react';
import {Link, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
import URL from 'constants/url';
import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';
import Button from 'react-bootstrap/Button';
function Detail(){
const navigate = useNavigate();
const goToList = () => {
navigate('/support/list/KCSC-QA');
};
const goToCreate = () => {
navigate('/support/create/KCSC-QA');
};
return (
<div className="container">
<div className="c_wrap">
{/* <!-- Location --> */}
<div className="location">
<ul>
<li><Link to={URL.MAIN} className="home" >Home</Link></li>
<li><Link to={URL.SUPPORT}>정보제공</Link></li>
<li>게시판명</li>
</ul>
</div>
{/* <!--// Location --> */}
<div className="layout">
<div className="contents QNA_LIST" id="contents">
{/* <!-- 본문 --> */}
<h1 className="tit_3">게시판명</h1>
<div className="board_view2">
<dl>
<dt>카테고리</dt>
<dd>
설계기준 > 시설물편 > 건축 구조기준 > 건축물 설계하중
</dd>
<dt>등록일자</dt>
<dd>
2011-08-08 11:11:11
</dd>
</dl>
<dl>
<dt>작성자</dt>
<dd>
박성환
</dd>
<dt>조회</dt>
<dd>
100
</dd>
</dl>
<dl>
<dt>첨부파일</dt>
<dd>
<span className="file_attach">
<Link to="">file_name.hwp</Link> <span>[3626] byte</span>
</span>
</dd>
</dl>
<dl>
<dd>[공지] jsp파일을 못찼습니다. 제목 뿌려주세요.</dd>
</dl>
</div>
<div className="qna_q">
<span>Q</span>
안녕하세요 웹호스팅에 올렸더니 jsp파일에서 이런에러로그가 남았는데요 jsp파일을 못찾는것같습니다? xml을 수정해야하나요?<br/>
심각: Servlet.service() for servlet action threw exception<br/>
javax.servlet.ServletException: Could not get RequestDispatcher for [/WEB-INF/jsp/egovframework//main/main.jsp]: check that
this file exists within your WAR<br/>
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:217)
</div>
<div className="qna_a">
<span>A</span>
<ul>
<li>
{/*답변 처리중인경우*/}
{/*질문 확인 후 답변을 처리중입니다.*/}
{/*답변 달린경우*/}
<span>admin님의 답변 2011-08-08 12:33:33</span>
심각: Servlet.service() for servlet action threw exception은 jsp파일을 열어서 보셔야합니다.
javax.servlet.ServletException: Could not get RequestDispatcher for [/WEB-INF/jsp/egovframework//main/main.jsp]: check that
this file exists within your WAR
</li>
</ul>
</div>
<Row className={"py-3 justify-content-between"} >
<Col><Button type={"button"} className={"btn btn-22498E px-4"} onClick={goToList} >목록</Button></Col>
<Col className={"text-end"}><Button type={"button"} className={"btn btn-22498E px-4"} onClick={goToCreate} >수정</Button></Col>
</Row>
{/* <!-- 답변달기 관리자에서 설정된 경우만--> */}
<Row className="replay justify-content-between">
<Col xs={1} className="text-center">
<label htmlFor="replay_write">Comment</label>
</Col>
<Col xs={10} className="">
{/*<div>*/}
<textarea className="f_txtar w-100 h-100" name="" id="replay_write" rows="4"></textarea>
{/*</div>*/}
</Col>
<Col xs={1} className="">
<Button type={"button"} className="btn btn-22498E w-100 h-100" >등록</Button>
</Col>
</Row>
{/* <!--// 답변달기 --> */}
<div className="qna_a">
<ul>
<li>
<span>chanjin, 2011-08-08 12:33:33</span>
심각: Servlet.service() for servlet action threw exception은 jsp파일을 열어서 보셔야합니다.<br />
javax.servlet.ServletException: Could not get RequestDispatcher for [/WEB-INF/jsp/egovframework//main/main.jsp]: check that<br />
<Link to="#" className="btn delete">삭제</Link>
</li>
<li>
<span>sunrise, 2011-08-07 11:11:11</span>
tomcat서버를 재시동해보세요. 그렇게 하니깐 되던데요.
<Link to="#" className="btn delete">삭제</Link>
</li>
<li>
<span>auto, 2011-08-07 11:11:11</span>
제가 살펴볼께요 메일로 주세요. test@naver.com
<Link to="#" className="btn delete">삭제</Link>
</li>
</ul>
</div>
{/* <!--// 본문 --> */}
</div>
</div>
</div>
</div>
);
}
export default Detail;

View File

@ -0,0 +1,143 @@
import React, { useState } from 'react';
import {Link, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
import URL from 'constants/url';
import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';
import Button from 'react-bootstrap/Button';
function List(){
const navigate = useNavigate();
const goToCreate = () => {
navigate('/support/create/KCSC-QA');
};
return (
<div className="container">
<div className="c_wrap">
{/* <!-- Location --> */}
<div className="location">
<ul>
<li><Link to={URL.MAIN} className="home" >Home</Link></li>
<li><Link to={URL.SUPPORT_LIST_NOCODE+'/KCSC-NTC'}>정보제공</Link></li>
<li>게시판명</li>
</ul>
</div>
{/* <!--// Location --> */}
<div className="layout">
<div className="contents QNA_LIST" id="contents">
{/* <!-- 본문 --> */}
<h1 className="tit_3">게시판명</h1>
{/* <!-- 검색조건 --> */}
<div className="condition1">
<ul>
<li className="">
<label className="" htmlFor="search_select">
<select defaultValue={"0"} name="search_select" id="search_select" className="form-select shadow-none" >
<option value="0">전체</option>
<option value="1">제목</option>
<option value="2">제목/내용</option>
<option value="3">작성자</option>
</select>
</label>
</li>
<li className="">
<input type="text" name="" placeholder="" className="form-control shadow-none rounded-2" />
</li>
<li className="">
<button type="button" className="btn btn-outline-secondary px-4">검색</button>
</li>
</ul>
</div>
{/* <!--// 검색조건 --> */}
{/* <!-- 게시판목록 --> */}
<div className="board_list BRD013">
<div className="head">
<span>번호</span>
<span>제목</span>
<span>작성자</span>
<span>조회수</span>
<span>등록일</span>
<span>파일</span>
</div>
<div className="result">
{/* <!-- case : 데이터 없을때 --> */}
{/* <p className="no_data" key="0">검색된 결과가 없습니다.</p> */}
{/* <!-- case : 데이터 있을때 --> */}
<Link to={URL.SUPPORT_DETAIL_NOCODE+'/KCSC-NTC'} className="list_item">
<div>3</div>
<div className="al">[공지] 공통컴포넌트 모니터링 관련 서비스 실행시 오류가 발생합니다 [15] <img src="/assets/images/lock.png" className="pt-1" /> <img src="/assets/images/new.png" className="pt-1" /></div>
<div>관리자</div>
<div>3</div>
<div>2021-7-24</div>
<div><img src="/assets/images/file.png" /></div>
</Link>
<Link to={URL.SUPPORT_DETAIL_NOCODE+'/KCSC-NTC'} className="list_item">
<div>2</div>
<div className="al"><img src="/assets/images/re.png" className="pt-1" /> validation 처리 .패스워드에 대한 메소드를 찾지 못합니다.</div>
<div>홍길동</div>
<div>3</div>
<div>2021-7-24</div>
<div></div>
</Link>
<Link to={URL.SUPPORT_DETAIL_NOCODE+'/KCSC-NTC'} className="list_item">
<div>1</div>
<div className="al d-flex align-items-center">
{/*미답변시 아이콘*/}
<img src="/assets/images/icon_answer0.png" className="pt-1 h_30 pb-1" /> &nbsp;
{/*답변완료시 아이콘*/}
{/*<img src="/assets/images/icon_answer.png" className="pt-1 h_30 pb-1" /> &nbsp;*/}
공통컴포넌트 모니터링 관련 서비스 실행시 오류가 발생합니다.</div>
<div>홍길동</div>
<div>3</div>
<div>2021-7-24</div>
<div></div>
</Link>
</div>
</div>
{/* <!--// 게시판목록 --> */}
<Row className="board_bot justify-content-between">
<Col xs={3} className=""></Col>
{/* <!-- Paging --> */}
<Col xs={6} className="paging">
<ul>
<li className="btn"><button to="" className="first">처음</button></li>
<li className="btn"><button to="" className="prev">이전</button></li>
<li><button to="" className="cur">1</button></li>
<li><button to="">2</button></li>
<li><button to="">3</button></li>
<li><button to="">4</button></li>
<li><button to="">5</button></li>
<li><button to="">6</button></li>
<li><button to="">7</button></li>
<li><button to="">8</button></li>
<li><button to="">9</button></li>
<li><button to="">10</button></li>
<li className="btn"><button to="" className="next">다음</button></li>
<li className="btn"><button to="" className="last">마지막</button></li>
</ul>
</Col>
{/* <!--/ Paging --> */}
{/* 수요조사는 버튼명 "의견 접수" 수요조사와 QNA만 작성가능하게 관리자 세팅되어야 함/관리자 쓰기권한만 작성가능 */}
<Col xs={3} className="text-end"><button type={"button"} className={"btn btn-outline-secondary px-4"} onClick={goToCreate}>질의 작성</button></Col>
</Row>
{/* <!--// 본문 --> */}
</div>
</div>
</div>
</div>
);
}
export default List;

View File

@ -0,0 +1,131 @@
import React, { useState } from 'react';
import {Link, useLocation, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
import URL from "constants/url";
import Row from "react-bootstrap/Row";
import Col from "react-bootstrap/Col";
import Button from "react-bootstrap/Button";
function Poll(){
const navigate = useNavigate();
const goToDetail = () => {
// navigate('/support/list/KCSC-QA');
};
return (
<div className="container">
<div className="c_wrap">
{/* <!-- Location --> */}
<div className="location">
<ul>
<li><Link to={URL.MAIN} className="home" >Home</Link></li>
<li><Link to={URL.SUPPORT_LIST_NOCODE+'/KCSC-NTC'}>정보제공</Link></li>
<li>설문조사</li>
</ul>
</div>
{/* <!--// Location --> */}
<div className="layout">
<div className="contents QNA_LIST" id="contents">
{/* <!-- 본문 --> */}
<h1 className="tit_3">설문조사</h1>
{/* <!-- 건설기준연구 안내 (리스트 5개씩만 뿌려주세요.)--> */}
<Row className={"py-3 justify-content-between align-items-end"} >
<Col className={"fs-6 fw-bold text-4c6 ps-4"}>2023 건설기준 포털시스템 이용자 만족도 조사</Col>
<Col className={"text-end"}><Button type={"button"} className={"btn btn-22498E px-4"} onClick={goToDetail} >참여하기</Button></Col>
</Row>
<div className="board_view2 pb-4">
<dl>
<dt>참여기간</dt>
<dd>
2014-06-25 ~ 2015-09-17
</dd>
</dl>
<dl>
<dt>내용</dt>
<dd>
연구의 목적은 건설공사기준 코드체계(국토교통부 고시 제2013-640, 13.10) 전환에 따른 분야별 코드별로 현행 설계기준과 표준시방서에 대하여 중복 상충 항목의 검토 정비하여 통합 코드() 마련.
</dd>
</dl>
</div>
<Row className={"py-3 justify-content-between align-items-end"} >
<Col className={"fs-6 fw-bold text-4c6 ps-4"}>2022 건설기준 포털시스템 이용자 만족도 조사</Col>
<Col className={"text-end"}><Button type={"button"} className={"btn btn-secondary px-4"} onClick={goToDetail} >설문마감</Button></Col>
</Row>
<div className="board_view2 pb-4">
<dl>
<dt>참여기간</dt>
<dd>
2013-12-26 ~ 2015-06-30
</dd>
</dl>
<dl>
<dt>내용</dt>
<dd>
연구의 목적은 건설공사기준 코드체계(국토교통부 고시 제2013-640, 13.10) 전환에 따른 분야별 코드별로 현행 설계기준과 표준시방서에 대하여 중복 상충 항목의 검토 정비하여 통합 코드() 마련.
</dd>
</dl>
</div>
<Row className={"py-3 justify-content-between align-items-end"} >
<Col className={"fs-6 fw-bold text-4c6 ps-4"}>2021 건설기준 포털시스템 이용자 만족도 조사</Col>
<Col className={"text-end"}><Button type={"button"} className={"btn btn-secondary px-4"} onClick={goToDetail} >설문마감</Button></Col>
</Row>
<div className="board_view2 pb-4">
<dl>
<dt>참여기간</dt>
<dd>
2013-03-01 ~ 2014-07-01
</dd>
</dl>
<dl>
<dt>내용</dt>
<dd>
현장 여건 변화 민원 등에 따른 합리적 표준시방서 개정
2009 개정 이후 민원 감사원 지적 등에 따른 시방서 내용 개정
</dd>
</dl>
</div>
<Row className="board_bot justify-content-between">
<Col xs={3} className=""></Col>
{/* <!-- Paging --> */}
<Col xs={6} className="paging">
<ul>
<li className="btn"><button to="" className="first">처음</button></li>
<li className="btn"><button to="" className="prev">이전</button></li>
<li><button to="" className="cur">1</button></li>
<li><button to="">2</button></li>
<li><button to="">3</button></li>
<li><button to="">4</button></li>
<li><button to="">5</button></li>
<li><button to="">6</button></li>
<li><button to="">7</button></li>
<li><button to="">8</button></li>
<li><button to="">9</button></li>
<li><button to="">10</button></li>
<li className="btn"><button to="" className="next">다음</button></li>
<li className="btn"><button to="" className="last">마지막</button></li>
</ul>
</Col>
{/* <!--/ Paging --> */}
{/* 수요조사는 버튼명 "의견 접수" 수요조사와 QNA만 작성가능하게 관리자 세팅되어야 함/관리자 쓰기권한만 작성가능 */}
<Col xs={3} className="text-end"></Col>
</Row>
</div>
</div>
</div>
</div>
);
}
export default Poll;

View File

@ -0,0 +1,87 @@
import React, { useState } from 'react';
import {Link, useNavigate} from 'react-router-dom';
// import * as EgovNet from 'api/egovFetch';
import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';
import Button from 'react-bootstrap/Button';
import URL from 'constants/url';
import StandardCodeInfo from "../standardCode/info/StandardCodeInfo";
function QNA(){
const navigate = useNavigate();
const goToQna = () => {
navigate('/support/list/KCSC-QA');
};
return (
<div className="container">
<div className="c_wrap">
{/* <!-- Location --> */}
<div className="location">
<ul>
<li><Link to={URL.MAIN} className="home" >Home</Link></li>
<li><Link to={URL.SUPPORT_LIST_NOCODE+'/KCSC-NTC'}>정보제공</Link></li>
<li>Q&A</li>
</ul>
</div>
{/* <!--// Location --> */}
<div className="layout">
<div className="contents SITE_INTRO" id="contents">
{/* <!-- 본문 --> */}
<h1 className="tit_3">Q & A</h1>
<div className="card bg-fa">
<Row className="p-3">
<Col xs={"auto"} className="px-4"><img src="/assets/images/icon_qna.png" /></Col>
<Col xs={"auto"} className="">
건설기준 포털시스템(국가건설기준센터)에서는 건설공사의 기술성, 환경성 향상 품질확보와 효율적인 공사 관리를 위한 건설기준(설계기준, 표준시방서, 전문시방서) 제공하고 있습니다.<br />
건설기준을 활용과정에서 각종 질의, 제안사항 등이 있으신 경우에는 질의지원 시스템을 적극 활용하여 주시기 바랍니다.
</Col>
</Row>
</div>
<div className="card bg-fa mt-4 ps-3">
<Row className="ps-3 py-3">
<Col xs={"auto"} className=""><img src="/assets/images/icon_chk.png" /></Col>
<Col xs={"auto"} className="">
(질의처리 관련) 건설기준 관련단체와 협의가 필요한 경우 질의처리 기간이 2 이상 소요될 있음을 양지하시기 바라며, 최대한 빠른 질의처리가 이루어질 있도록 노력하겠습니다.
</Col>
</Row>
<Row className="ps-3">
<Col xs={"auto"} className=""><img src="/assets/images/icon_chk.png" /></Col>
<Col xs={"auto"} className="">
(건설기준 유권해석) 건설기준의 유권해석은 건설기술진흥업무 운영규정(국토교통부 훈령)제40조제2항제3호의 규정에 따라 해당 건설기준 소관부서(부처)에서 담당하도록 되어 있습니다.<br />
따라서 우리 센터에서는 건설기준 관련 질의에 대한 검토 의견을 드릴 수는 있으나, 의견이 건설기준 유권해석은 아님을 양지하여 주시기 바랍니다.<br />
건설기준에 대한 유권해석을 원하시는 경우에는 조금 불편하시더라도 국민신문고 등을 통해 해당 건설기준의 소관부서(부처) 문의하여 주시기 바랍니다
</Col>
</Row>
<Row className="ps-3 py-3">
<Col xs={"auto"} className=""><img src="/assets/images/icon_chk.png" /></Col>
<Col xs={"auto"} className="">
(민원공개 관련) 공공기관의 정보공개에 관한 법률 제9조(비공개대상정보) 따라 아래의 사항은 질의응답이나 민원공개가 제한됨을 알려드립니다..<br />
* 성명·주민등록번호 개인에 관한 사항으로서 공개될 경우 사생활의 비밀 또는 자유를 침해할 우려가 있다고 인정되는 정보<br />
* 불법적인 사유나 불편·부당한 수단을 동원하여 민원처리기관에 특정한 행위를 요구하는 경우<br />
* 기타 질의자가 비공개를 요청하는 경우
</Col>
</Row>
</div>
<div className="text-center p-3 text-danger">
건설기준 포털시스템에서는 개인정보(개인 연락처, 이메일 ) 수집하지 않습니다.<br />
질의 답변은 접수현황에서 확인하시기 바랍니다.
</div>
<div className="text-center p-3">
<Button className="btn-22498E py-4 px-5" onClick={goToQna}>질의 신청</Button>
</div>
{/* <!--// 본문 --> */}
</div>
</div>
</div>
</div>
);
}
export default QNA;

View File

@ -0,0 +1,184 @@
import React, { useState } from 'react';
import {Link, useLocation, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
import URL from "constants/url";
import Row from "react-bootstrap/Row";
import Col from "react-bootstrap/Col";
import Button from "react-bootstrap/Button";
import Modal from 'react-bootstrap/Modal';
function Research(){
const [show, setShow] = useState(false);
const [modalContent, setModalContent] = useState({});
const handleClose = () => setShow(false);
const handleShow = (content) => {
setModalContent(content);
setShow(true);
};
const items = [
{
id: 1,
modalPeriod: '2014-06-25 ~ 2015-09-17',
modalCharge: '이영호 연구위원',
modalGoal: '본 연구의 목적은 “건설공사기준 코드체계(국토교통부 고시 제2013-640호, 13.10)” 전환에 따른 분야별 코드별로 현행 설계기준과 표준시방서에 대하여 중복 및 상충 항목의 검토 정비하여 통합 코드(안) 마련.',
modalTitle: '예산절감을 위한 건설기준 개정 연구',
modalBody: `
- 교량 건설기준 국제 통용성 분석 연구<br />
- [기고문]건설산업 변화와 디지털 건설기준 도입<br />
- [기고문]인공지능 기술을 활용한 건설기준 중복 상충부 검토<br />
- 건설산업 디지털 전환 동향 파악을 위한 국외출장 결과<br />
- 건설기준 주요 민원사례 소개<br />
- 2023 건설기준위원회 중앙건설기술심의위원회 개최 현황<br />
- 2023 건설기준 ·개정 고시 현황
`,
modalEffect: `
- 교량 건설기준 국제 통용성 분석 연구<br />
- [기고문]건설산업 변화와 디지털 건설기준 도입
`
},
{
id: 2,
modalPeriod: '2013-12-26 ~ 2015-06-30',
moadalCharge: '이영호 연구위원',
modalGoal: '본 연구의 목적은 “건설공사기준 코드체계(국토교통부 고시 제2013-640호, 13.10)” 전환에 따른 분야별 코드별로 현행 설계기준과 표준시방서에 대하여 중복 및 상충 항목의 검토 정비하여 통합 코드(안) 마련.',
modalTitle: '건설공사 설계·시공 표준화 연구(도로 및 수자원 시설분야)(국가 R&D)',
modalBody: `
- 다른 내용1<br />
- 다른 내용2<br />
- 다른 내용3<br />
- 다른 내용4<br />
`,
modalEffect: `
- 교량 건설기준 국제 통용성 분석 연구<br />
- [기고문]건설산업 변화와 디지털 건설기준 도입
`
},
//
];
return (
<div className="container">
<div className="c_wrap">
{/* <!-- Location --> */}
<div className="location">
<ul>
<li><Link to={URL.MAIN} className="home" >Home</Link></li>
<li><Link to={URL.SUPPORT_LIST_NOCODE+'/KCSC-NTC'}>정보제공</Link></li>
<li>건설기준 연구</li>
</ul>
</div>
{/* <!--// Location --> */}
<div className="layout">
<div className="contents QNA_LIST" id="contents">
{/* <!-- 본문 --> */}
<h1 className="tit_3">건설기준 연구</h1>
{/* <!-- 건설기준연구 안내 (리스트가 많이 없으니 5개씩만 뿌려주세요.)--> */}
{items.map(item => (
<React.Fragment key={item.id}>
<Row className={"py-3 justify-content-between align-items-end"} >
<Col className={"fs-6 fw-bold text-4c6 ps-4"}>{item.modalTitle}</Col>
<Col className={"text-end"}><Button type={"button"} className={"btn btn-22498E px-4"} onClick={() => handleShow({ title: item.modalTitle, body: item.modalBody, effect: item.modalEffect })} >상세보기</Button></Col>
</Row>
<div className="board_view2 pb-4">
<dl>
<dt>연구기간</dt>
<dd>
{item.modalPeriod}
</dd>
</dl>
<dl>
<dt>연구책임자</dt>
<dd>
{item.modalCharge}
</dd>
</dl>
<dl>
<dt>연구목적</dt>
<dd>
{item.modalGoal}
</dd>
</dl>
</div>
</React.Fragment>
))}
<Row className={"py-3 justify-content-between align-items-end"} >
<Col className={"fs-6 fw-bold text-4c6 ps-4"}>도로공사표준시방서 개정(국고보조금사업)</Col>
<Col className={"text-end"}><Button type={"button"} className={"btn btn-22498E px-4"} >상세보기</Button></Col>
</Row>
<div className="board_view2 pb-4">
<dl>
<dt>연구기간</dt>
<dd>
2013-03-01 ~ 2014-07-01
</dd>
</dl>
<dl>
<dt>연구책임자</dt>
<dd>
한국도로교통협회
</dd>
</dl>
<dl>
<dt>연구목적</dt>
<dd>
현장 여건 변화 민원 등에 따른 합리적 표준시방서 개정<br />
2009 개정 이후 민원 감사원 지적 등에 따른 시방서 내용 개정
</dd>
</dl>
</div>
<Row className="board_bot justify-content-between">
<Col xs={3} className=""></Col>
{/* <!-- Paging --> */}
<Col xs={6} className="paging">
<ul>
<li className="btn"><button to="" className="first">처음</button></li>
<li className="btn"><button to="" className="prev">이전</button></li>
<li><button to="" className="cur">1</button></li>
<li><button to="">2</button></li>
<li><button to="">3</button></li>
<li><button to="">4</button></li>
<li><button to="">5</button></li>
<li><button to="">6</button></li>
<li><button to="">7</button></li>
<li><button to="">8</button></li>
<li><button to="">9</button></li>
<li><button to="">10</button></li>
<li className="btn"><button to="" className="next">다음</button></li>
<li className="btn"><button to="" className="last">마지막</button></li>
</ul>
</Col>
{/* <!--/ Paging --> */}
{/* 수요조사는 버튼명 "의견 접수" 수요조사와 QNA만 작성가능하게 관리자 세팅되어야 함/관리자 쓰기권한만 작성가능 */}
<Col xs={3} className="text-end"></Col>
</Row>
</div>
</div>
</div>
<Modal show={show} onHide={handleClose}>
<Modal.Header closeButton>
<Modal.Title>{modalContent.title}</Modal.Title>
</Modal.Header>
<Modal.Body>
<h6 className={"text-224"}>연구내용</h6>
<hr />
<div dangerouslySetInnerHTML={{ __html: modalContent.body }} className={"f_12"}></div>
<br />
<h6 className={"text-224"}>기대효과</h6>
<hr />
<div dangerouslySetInnerHTML={{ __html: modalContent.effect }} className={"f_12"}></div>
</Modal.Body>
</Modal>
</div>
);
}
export default Research;

View File

@ -0,0 +1,14 @@
import React, { useState } from 'react';
import {Link, useLocation, useNavigate} from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
function Site(){
return (
<div>관련사이트</div>
);
}
export default Site;

View File

@ -13,37 +13,66 @@ import EgovError from 'components/EgovError';
import EgovMain from 'pages/main/EgovMain';
import EgovLogin from 'pages/login/EgovLogin';
import Join from 'pages/login/join/Join';
import My from 'pages/login/My';
import Private from 'pages/inform/Private';
import Email from 'pages/inform/Email';
import ChangePw from 'pages/login/PwChange'
//ABOUT
import EgovAboutSite from 'pages/about/EgovAboutSite';
import EgovAboutHistory from 'pages/about/EgovAboutHistory';
import EgovAboutPromote from 'pages/about/EgovAboutPromote';
import EgovAboutOrganization from 'pages/about/EgovAboutOrganization';
import EgovAboutLocation from 'pages/about/EgovAboutLocation';
import EgovAboutSitemap from 'pages/about/EgovAboutSitemap';
//INTRO
import EgovIntroWork from 'pages/intro/EgovIntroWork';
import EgovIntroService from 'pages/intro/EgovIntroService';
// import EgovIntroWork from 'pages/intro/EgovIntroWork';
// import EgovIntroService from 'pages/intro/EgovIntroService';
//COMMITTEE
import CommitteeProgress from 'pages/committee/Progress';
import CommitteeSchedule from 'pages/committee/Schedule';
//SUPPORT
import SupportList from 'pages/support/List';
import SupportDetail from 'pages/support/Detail';
import SupportCreate from 'pages/support/Create';
import SupportQna from 'pages/support/Qna';
import SupportSite from 'pages/support/Site';
import SupportApi from 'pages/support/Api';
import SupportResearch from 'pages/support/Research';
import SupportPoll from 'pages/support/Poll';
import EgovSupportDownloadList from 'pages/support/download/EgovDownloadList';
import EgovSupportDownloadDetail from 'pages/support/download/EgovDownloadDetail';
import EgovSupportDownloadCreate from 'pages/support/download/EgovDownloadCreate';
import EgovSupportQnaList from 'pages/support/qna/EgovQnaList';
import EgovSupportQnaDetail from 'pages/support/qna/EgovQnaDetail';
import EgovSupportApply from 'pages/support/apply/EgovSupportApply';
// import EgovSupportDownloadDetail from 'pages/support/download/EgovDownloadDetail';
// import EgovSupportDownloadCreate from 'pages/support/download/EgovDownloadCreate';
// import EgovSupportQnaList from 'pages/support/qna/EgovQnaList';
// import EgovSupportQnaDetail from 'pages/support/qna/EgovQnaDetail';
// import EgovSupportApply from 'pages/support/apply/EgovSupportApply';
//
import CodeViewer from 'pages/standardCode/viewer/CodeViewer';
import StandardCodePage from "../pages/standardCode/list/StandardCodePage";
import StandardCodeInfo from "../pages/standardCode/info/StandardCodeInfo";
import StandardCodeTerm from "pages/standardCode/StandardCodeTerm";
import StandardCodeEng from "pages/standardCode/StandardCodeEng";
import StandardCodeOld from "pages/standardCode/StandardCodeOld";
//INFORM
import EgovDailyList from 'pages/inform/daily/EgovDailyList';
import EgovDailyDetail from 'pages/inform/daily/EgovDailyDetail';
import EgovWeeklyList from 'pages/inform/weekly/EgovWeeklyList';
import EgovNoticeList from 'pages/inform/notice/EgovNoticeList';
import EgovNoticeDetail from 'pages/inform/notice/EgovNoticeDetail';
import EgovNoticeEdit from 'pages/inform/notice/EgovNoticeEdit';
import EgovGalleryList from 'pages/inform/gallery/EgovGalleryList';
import EgovGalleryDetail from 'pages/inform/gallery/EgovGalleryDetail';
import EgovGalleryEdit from 'pages/inform/gallery/EgovGalleryEdit';
// import EgovDailyList from 'pages/inform/daily/EgovDailyList';
// import EgovDailyDetail from 'pages/inform/daily/EgovDailyDetail';
// import EgovWeeklyList from 'pages/inform/weekly/EgovWeeklyList';
//
// import EgovNoticeList from 'pages/inform/notice/EgovNoticeList';
// import EgovNoticeDetail from 'pages/inform/notice/EgovNoticeDetail';
// import EgovNoticeEdit from 'pages/inform/notice/EgovNoticeEdit';
//
// import EgovGalleryList from 'pages/inform/gallery/EgovGalleryList';
// import EgovGalleryDetail from 'pages/inform/gallery/EgovGalleryDetail';
// import EgovGalleryEdit from 'pages/inform/gallery/EgovGalleryEdit';
//ADMIN
import EgovAdminScheduleList from 'pages/admin/schedule/EgovAdminScheduleList';
@ -63,6 +92,9 @@ import EgovAdminNoticeEdit from 'pages/admin/notice/EgovAdminNoticeEdit';
import EgovAdminGalleryList from 'pages/admin/gallery/EgovAdminGalleryList';
import EgovAdminGalleryDetail from 'pages/admin/gallery/EgovAdminGalleryDetail';
import EgovAdminGalleryEdit from 'pages/admin/gallery/EgovAdminGalleryEdit';
// 2023.04.15()
import EgovAdminPasswordUpdate from 'pages/admin/manager/EgovAdminPasswordUpdate';
@ -79,8 +111,7 @@ import AdminUsersList from 'pages/admin/users/List';
// -
import AdminBoardsList from 'pages/admin/boards/List'; // - /
import AdminBoardsPosts from 'pages/admin/boards/Posts'; // - /
import AdminBoardsKeywords from 'pages/admin/boards/Keywords'; // - /
import AdminPostMgtList from "../pages/admin/board/AdminPostMgtList"; // - /
// -
import AdminStandardsReferenceCodes from 'pages/admin/standards/ReferenceCodes'; // - /
@ -101,7 +132,6 @@ import AdminCommitteeProgressStatus from 'pages/admin/committee/ProgressStatus';
import AdminCommitteeProgressStatusDetail from 'pages/admin/committee/ProgressStatus/Detail'; // - / /
import AdminCommitteeProgressStatusEdit from 'pages/admin/committee/ProgressStatus/Edit'; // - / /
import AdminCommitteeSchedules from 'pages/admin/committee/Schedules'; // - /
import AdminCommitteeSchedulesDetail from 'pages/admin/committee/Schedules/Detail'; // - / /
import AdminCommitteeSchedulesEdit from 'pages/admin/committee/Schedules/Edit'; // - / /
@ -113,15 +143,8 @@ import AdminLogsPrivacyLogs from 'pages/admin/logs/PrivacyLogs';
import AdminLogsFileDownloadStatus from 'pages/admin/logs/FileDownloadStatus'; // - /
//
import CodeViewer from 'pages/standardCode/viewer/CodeViewer';
import StandardCodePage from "../pages/standardCode/list/StandardCodePage";
import StandardCodeInfo from "../pages/standardCode/info/StandardCodeInfo";
import * as EgovNet from 'api/egovFetch'; // jwt
import initPage from 'js/ui';
import AdminPostMgtList from "../pages/admin/board/AdminPostMgtList";
const RootRoutes = () => {
//useLocation /admin/~ ( 1) */}
@ -206,6 +229,10 @@ const SecondRoutes = () => {
<Route path={URL.LOGIN} element={<EgovLogin onChangeLogin={(user) => setLoginVO(user)}/>}/>
{/*{JOIN}*/}
<Route path={URL.JOIN} element={<Join />} />
<Route path={URL.MY} element={<My />} />
<Route path={URL.PRIVATE} element={<Private />} />
<Route path={URL.EMAIL} element={<Email />} />
<Route path={URL.CHANGE_PW} element={<ChangePw />} />
{/* ERROR */}
<Route path={URL.ERROR} element={<EgovError />} />
@ -214,45 +241,75 @@ const SecondRoutes = () => {
<Route path={URL.ABOUT} element={<Navigate to={URL.ABOUT_SITE} />} />
<Route path={URL.ABOUT_SITE} element={<EgovAboutSite />} />
<Route path={URL.ABOUT_HISTORY} element={<EgovAboutHistory />} />
<Route path={URL.ABOUT_PROMOTE} element={<EgovAboutPromote />} />
<Route path={URL.ABOUT_ORGANIZATION} element={<EgovAboutOrganization />} />
<Route path={URL.ABOUT_LOCATION} element={<EgovAboutLocation />} />
<Route path={URL.ABOUT_SITEMAP} element={<EgovAboutSitemap />} />
{/* INTRO */}
<Route path={URL.INTRO} element={<Navigate to={URL.INTRO_WORKS} />} />
<Route path={URL.INTRO_WORKS} element={<EgovIntroWork />} />
<Route path={URL.INTRO_SERVICE} element={<EgovIntroService />} />
{/*<Route path={URL.INTRO} element={<Navigate to={URL.INTRO_WORKS} />} />*/}
{/*<Route path={URL.INTRO_WORKS} element={<EgovIntroWork />} />*/}
{/*<Route path={URL.INTRO_SERVICE} element={<EgovIntroService />} />*/}
{/* COMMITTEE */}
<Route path={URL.COMMITTEE} element={<Navigate to={URL.COMMITTEE_PROGRESS} />} />
<Route path={URL.COMMITTEE_PROGRESS} element={<CommitteeProgress />} />
<Route path={URL.COMMITTEE_SCHEDULE} element={<CommitteeSchedule />} />
{/* SUPPORT */}
<Route path={URL.SUPPORT} element={<Navigate to={URL.SUPPORT_DOWNLOAD} />} />
<Route path={URL.SUPPORT} element={<Navigate to={URL.SUPPORT_LIST} />} />
<Route path={URL.SUPPORT_QNA} element={<SupportQna />} />
<Route path={URL.SUPPORT_LIST} element={<SupportList />} />
<Route path={URL.SUPPORT_DETAIL} element={<SupportDetail />} />
<Route path={URL.SUPPORT_CREATE} element={<SupportCreate />} />
<Route path={URL.SUPPORT_SITE} element={<SupportSite />} />
<Route path={URL.SUPPORT_API} element={<SupportApi />} />
<Route path={URL.SUPPORT_RESEARCH} element={<SupportResearch />} />
<Route path={URL.SUPPORT_POLL} element={<SupportPoll />} />
<Route path={URL.SUPPORT_DOWNLOAD} element={<EgovSupportDownloadList />} />
<Route path={URL.SUPPORT_DOWNLOAD_DETAIL} element={<EgovSupportDownloadDetail />} />
<Route path={URL.SUPPORT_DOWNLOAD_CREATE} element={<EgovSupportDownloadCreate />} />
{/*<Route path={URL.SUPPORT_DOWNLOAD_DETAIL} element={<EgovSupportDownloadDetail />} />*/}
{/*<Route path={URL.SUPPORT_DOWNLOAD_CREATE} element={<EgovSupportDownloadCreate />} />*/}
<Route path={URL.SUPPORT_QNA} element={<EgovSupportQnaList />} />
<Route path={URL.SUPPORT_QNA_DETAIL} element={<EgovSupportQnaDetail />} />
{/*<Route path={URL.SUPPORT_QNA} element={<EgovSupportQnaList />} />*/}
{/*<Route path={URL.SUPPORT_QNA_DETAIL} element={<EgovSupportQnaDetail />} />*/}
<Route path={URL.SUPPORT_APPLY} element={<EgovSupportApply />} />
{/*<Route path={URL.SUPPORT_APPLY} element={<EgovSupportApply />} />*/}
{/* INFORM */}
<Route path={URL.INFORM} element={<Navigate to={URL.INFORM_DAILY} />} />
{/*<Route path={URL.INFORM} element={<Navigate to={URL.INFORM_DAILY} />} />*/}
<Route path={URL.INFORM_DAILY} element={<EgovDailyList />} />
<Route path={URL.INFORM_DAILY_DETAIL} element={<EgovDailyDetail />} />
<Route path={URL.INFORM_WEEKLY} element={<EgovWeeklyList />} />
<Route path={URL.INFORM_WEEKLY_DETAIL} element={<EgovDailyDetail />} />
{/*<Route path={URL.INFORM_DAILY} element={<EgovDailyList />} />*/}
{/*<Route path={URL.INFORM_DAILY_DETAIL} element={<EgovDailyDetail />} />*/}
{/*<Route path={URL.INFORM_WEEKLY} element={<EgovWeeklyList />} />*/}
{/*<Route path={URL.INFORM_WEEKLY_DETAIL} element={<EgovDailyDetail />} />*/}
{/*<Route path={URL.INFORM_NOTICE} element={<EgovNoticeList />} />*/}
{/*<Route path={URL.INFORM_NOTICE_DETAIL} element={<EgovNoticeDetail />} />*/}
{/*<Route path={URL.INFORM_NOTICE_CREATE} element={<EgovNoticeEdit mode={CODE.MODE_CREATE} />} />*/}
{/*<Route path={URL.INFORM_NOTICE_MODIFY} element={<EgovNoticeEdit mode={CODE.MODE_MODIFY} />} />*/}
{/*<Route path={URL.INFORM_NOTICE_REPLY} element={<EgovNoticeEdit mode={CODE.MODE_REPLY} />} />*/}
{/*<Route path={URL.INFORM_GALLERY} element={<EgovGalleryList />} />*/}
{/*<Route path={URL.INFORM_GALLERY_DETAIL} element={<EgovGalleryDetail />} />*/}
{/*<Route path={URL.INFORM_GALLERY_CREATE} element={<EgovGalleryEdit mode={CODE.MODE_CREATE} />} />*/}
{/*<Route path={URL.INFORM_GALLERY_MODIFY} element={<EgovGalleryEdit mode={CODE.MODE_MODIFY} />} />*/}
{/*<Route path={URL.INFORM_GALLERY_REPLY} element={<EgovGalleryEdit mode={CODE.MODE_REPLY} />} />*/}
{/*기준코드 뷰어*/}
<Route path={URL.STANDARD_CODE_VIEWER} element={<CodeViewer mode={CODE.MODE_READ} />} />
<Route path={URL.STANDARD_CODE_VIEWER_LINK} element={<CodeViewer mode={CODE.MODE_READ} />} />
<Route path={URL.STANDARD_CODE_INFO} element={<StandardCodeInfo />} />
<Route path={URL.STANDARD_CODE_TERM} element={<StandardCodeTerm />} />
<Route path={URL.STANDARD_CODE_ENG} element={<StandardCodeEng />} />
<Route path={URL.STANDARD_CODE_OLD} element={<StandardCodeOld />} />
{/*기준코드리스트*/}
<Route path={URL.STANDARD_CODE_LIST} element={<StandardCodePage />} />
<Route path={URL.STANDARD_CODE_LIST_LINK} element={<StandardCodePage />} />
<Route path={URL.INFORM_NOTICE} element={<EgovNoticeList />} />
<Route path={URL.INFORM_NOTICE_DETAIL} element={<EgovNoticeDetail />} />
<Route path={URL.INFORM_NOTICE_CREATE} element={<EgovNoticeEdit mode={CODE.MODE_CREATE} />} />
<Route path={URL.INFORM_NOTICE_MODIFY} element={<EgovNoticeEdit mode={CODE.MODE_MODIFY} />} />
<Route path={URL.INFORM_NOTICE_REPLY} element={<EgovNoticeEdit mode={CODE.MODE_REPLY} />} />
<Route path={URL.INFORM_GALLERY} element={<EgovGalleryList />} />
<Route path={URL.INFORM_GALLERY_DETAIL} element={<EgovGalleryDetail />} />
<Route path={URL.INFORM_GALLERY_CREATE} element={<EgovGalleryEdit mode={CODE.MODE_CREATE} />} />
<Route path={URL.INFORM_GALLERY_MODIFY} element={<EgovGalleryEdit mode={CODE.MODE_MODIFY} />} />
<Route path={URL.INFORM_GALLERY_REPLY} element={<EgovGalleryEdit mode={CODE.MODE_REPLY} />} />
{/* ADMIN */}
<Route path={URL.ADMIN} element={<Navigate to={URL.ADMIN_SCHEDULE} />} />
@ -297,11 +354,10 @@ const SecondRoutes = () => {
{/* 관리자 - 게시판 현황 */}
<Route path={URL.ADMIN__BOARDS__LIST} element={<AdminBoardsList />} />
<Route path={URL.ADMIN__BOARDS__POSTS} element={<AdminPostMgtList />} />
<Route path={URL.ADMIN__BOARDS__KEYWORDS} element={<AdminBoardsKeywords />} />
{/* 관리자 - 건설기준 관리 */}
<Route path={URL.ADMIN__STANDARDS__REFERENCE_CODES} element={<AdminStandardsReferenceCodes />} />
<Route path={URL.ADMIN__STANDARDS__API_KYES} element={<AdminStandardsApiKeys />} />
<Route path={URL.ADMIN__STANDARDS__API_KEYS} element={<AdminStandardsApiKeys />} />
<Route path={URL.ADMIN__STANDARDS__SIMILARITY_CHECK} element={<AdminStandardsSimilarityCheck />} />
<Route path={URL.ADMIN__STANDARDS__INFO_DISCLOSURE} element={<AdminStandardsInfoDisclosure />} />
@ -326,8 +382,6 @@ const SecondRoutes = () => {
<Route path={URL.ADMIN__COMMITTEE__SCHEDULES__CREATE} element={<AdminCommitteeSchedulesEdit mode={CODE.MODE_CREATE} />} />
<Route path={URL.ADMIN__COMMITTEE__SCHEDULES__MODIFY} element={<AdminCommitteeSchedulesEdit mode={CODE.MODE_MODIFY} />} />
{/* 관리자 - 로그 관리 */}
<Route path={URL.ADMIN__LOGS__MENU_ACCESS_INFO} element={<AdminLogsMenuAccessInfo />} />
<Route path={URL.ADMIN__LOGS__USER_CONNECTIONS} element={<AdminLogsUserConnections />} />
@ -335,16 +389,6 @@ const SecondRoutes = () => {
<Route path={URL.ADMIN__LOGS__FILE_DOWNLOAD_STATUS} element={<AdminLogsFileDownloadStatus />} />
{/*기준코드 뷰어*/}
<Route path={URL.STANDARD_CODE_VIEWER} element={<CodeViewer mode={CODE.MODE_READ} />} />
<Route path={URL.STANDARD_CODE_VIEWER_LINK} element={<CodeViewer mode={CODE.MODE_READ} />} />
<Route path={URL.STANDARD_CODE_INFO} element={<StandardCodeInfo />} />
{/*기준코드리스트*/}
<Route path={URL.STANDARD_CODE_LIST} element={<StandardCodePage />} />
<Route path={URL.STANDARD_CODE_LIST_LINK} element={<StandardCodePage />} />
</Routes>
<EgovFooter />
<EgovInfoPopup />

View File

@ -89,6 +89,10 @@ dependencies {
implementation 'org.apache.commons:commons-lang3'
// https://mvnrepository.com/artifact/org.apache.httpcomponents.client5/httpclient5
implementation group: 'org.apache.httpcomponents.client5', name: 'httpclient5', version: '5.3.1'
// https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple
implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'
}

Some files were not shown because too many files have changed in this diff Show More