Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim
|
After Width: | Height: | Size: 352 B |
|
After Width: | Height: | Size: 195 B |
|
After Width: | Height: | Size: 515 B |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1020 B |
|
After Width: | Height: | Size: 992 B |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1007 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 388 B |
|
After Width: | Height: | Size: 382 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 297 B |
|
After Width: | Height: | Size: 354 B |
|
After Width: | Height: | Size: 380 KiB |
|
After Width: | Height: | Size: 587 KiB |
|
After Width: | Height: | Size: 618 B |
|
After Width: | Height: | Size: 459 B |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 362 B |
|
After Width: | Height: | Size: 411 B |
|
After Width: | Height: | Size: 30 KiB |
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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' && '[관리자]'} */}
|
||||
{/* <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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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", //건설기준코드/뷰어/새 창 링크
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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; }
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
After Width: | Height: | Size: 618 B |
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -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>
|
||||
{/* <!--// 버튼영역 --> */}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
{/* <!--// 버튼영역 --> */}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -224,7 +224,7 @@ function ProgressStatusEdit(props) {
|
|||
|
||||
const getList = (orgSearchCondition) => {
|
||||
|
||||
EgovNet.requestFetch(`/admin/config/committee-code-management?paramCodeGroup=${orgSearchCondition.paramCodeGroup}¶mCodeLevel=${orgSearchCondition.paramCodeLevel}`,
|
||||
EgovNet.requestFetch(`/admin/config/committee-code-mgt?paramCodeGroup=${orgSearchCondition.paramCodeGroup}¶mCodeLevel=${orgSearchCondition.paramCodeLevel}`,
|
||||
requestOptions,
|
||||
function (resp) {
|
||||
const myIndex = Number(String(orgSearchCondition.paramCodeLevel).replace('LV_','')) - 1;
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ function CommitteeCodeMgt(props) {
|
|||
|
||||
const getList = (searchCondition) => {
|
||||
|
||||
EgovNet.requestFetch(`/admin/config/committee-code-management?paramCodeGroup=${searchCondition.paramCodeGroup}¶mCodeLevel=${searchCondition.paramCodeLevel}`,
|
||||
EgovNet.requestFetch(`/admin/config/committee-code-mgt?paramCodeGroup=${searchCondition.paramCodeGroup}¶mCodeLevel=${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};
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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){
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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: {
|
||||
|
|
|
|||
|
|
@ -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: {
|
||||
|
|
|
|||
|
|
@ -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: {
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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: {
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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}>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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"> </li>
|
||||
<li className="no_dot">◌ 수집하는 개인정보의 항목</li>
|
||||
<li className="no_dot"> 수집항목: 아이디(ID), 비밀번호, 이메일(e-mail)</li>
|
||||
|
|
@ -13,7 +13,7 @@ function InfoShareChk() {
|
|||
<li className="no_dot"> 회원가입정보 : 탈퇴시까지</li>
|
||||
<li className="no_dot">◌ 정보주체의 동의 거부 권리 및 그에 따른 불이익 사항</li>
|
||||
<li className="no_dot"> </li>
|
||||
<li>귀하는 건설기준 포털시스템(KCSC) 이용을 위한 개인정보의 수집·이용 동의를 거부할 권리가 있습니다. 다만, 개인정보의 수집·이용 동의를 거부할 경우 건설기준 포털시스템(KCSC) 일부 기능에 대한 서비스 이용에 제한을 받으실 수 있습니다.</li>
|
||||
<li>귀하는 건설기준 포털시스템(KCSC) 이용을 위한 개인정보의 수집·이용 동의를 거부할 권리가 있습니다. <br />다만, 개인정보의 수집·이용 동의를 거부할 경우 건설기준 포털시스템(KCSC) 일부 기능에 대한 서비스 이용에 제한을 받으실 수 있습니다.</li>
|
||||
</ul>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -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"}> 6 가설공사</div>
|
||||
<div className={"text-truncate"}> 7 가설공사가설공사가설공사가설공사</div>
|
||||
<div className={"text-truncate"}> 8 가설공사</div>
|
||||
<div className={"text-truncate"}> 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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
@ -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" />
|
||||
{/*답변완료시 아이콘*/}
|
||||
{/*<img src="/assets/images/icon_answer.png" className="pt-1 h_30 pb-1" /> */}
|
||||
공통컴포넌트 중 모니터링 관련 서비스 실행시 오류가 발생합니다.</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;
|
||||
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
@ -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 />
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||