2023-10-12 04:15:42 +00:00
|
|
|
import React, { useState, useEffect, useCallback } from 'react';
|
|
|
|
|
import { Link, useLocation } from 'react-router-dom';
|
|
|
|
|
import Row from 'react-bootstrap/Row';
|
|
|
|
|
import Col from 'react-bootstrap/Col';
|
|
|
|
|
import Button from 'react-bootstrap/Button';
|
2024-05-29 03:16:11 +00:00
|
|
|
import CountUp from 'react-countup';
|
|
|
|
|
|
2024-06-05 08:37:19 +00:00
|
|
|
import { Box, Tabs, Tab, Typography } from '@mui/material';
|
|
|
|
|
|
2024-05-29 03:16:11 +00:00
|
|
|
import Slider from "react-slick";
|
|
|
|
|
import "slick-carousel/slick/slick.css";
|
|
|
|
|
import "slick-carousel/slick/slick-theme.css";
|
|
|
|
|
|
2023-10-12 04:15:42 +00:00
|
|
|
import * as EgovNet from 'api/egovFetch';
|
|
|
|
|
import URL from 'constants/url';
|
|
|
|
|
|
2024-06-05 08:37:19 +00:00
|
|
|
|
2023-10-12 04:15:42 +00:00
|
|
|
function EgovMain(props) {
|
|
|
|
|
console.group("EgovMain");
|
|
|
|
|
console.log("[Start] EgovMain ------------------------------");
|
|
|
|
|
console.log("EgovMain [props] : ", props);
|
|
|
|
|
|
|
|
|
|
const location = useLocation();
|
|
|
|
|
console.log("EgovMain [location] : ", location);
|
|
|
|
|
|
2024-05-29 03:16:11 +00:00
|
|
|
const settings = {
|
|
|
|
|
dots: false,
|
|
|
|
|
infinite: true,
|
|
|
|
|
speed: 500,
|
|
|
|
|
slidesToShow: 6,
|
|
|
|
|
slidesToScroll: 1,
|
|
|
|
|
arrows: false,
|
|
|
|
|
autoplay: true,
|
|
|
|
|
autoplaySpeed: 3000,
|
|
|
|
|
pauseOnHover: true
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
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' },
|
|
|
|
|
// 필요한 만큼 배너 이미지를 추가합니다.
|
|
|
|
|
];
|
|
|
|
|
|
2024-06-05 08:37:19 +00:00
|
|
|
|
|
|
|
|
// TAB 상태를 정의합니다.
|
|
|
|
|
const [value, setValue] = useState(0);
|
|
|
|
|
const handleChange = (event, newValue) => {
|
|
|
|
|
setValue(newValue);
|
|
|
|
|
};
|
|
|
|
|
|
2023-10-12 04:15:42 +00:00
|
|
|
// 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()");
|
|
|
|
|
|
2024-05-29 03:16:11 +00:00
|
|
|
const retrieveListURL = '/';
|
2023-10-12 04:15:42 +00:00
|
|
|
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]);
|
|
|
|
|
|
|
|
|
|
console.log("------------------------------EgovMain [End]");
|
|
|
|
|
console.groupEnd("EgovMain");
|
|
|
|
|
|
|
|
|
|
return (
|
2024-05-28 08:25:17 +00:00
|
|
|
<div className="P_MAIN">{/* container */}
|
2023-10-12 04:15:42 +00:00
|
|
|
<div className="c_wrap">
|
2024-05-28 08:25:17 +00:00
|
|
|
<div className="topbox d-flex justify-content-center align-items-center">
|
|
|
|
|
<div className="topbox_1"></div>
|
|
|
|
|
<div className="topbox_2"></div>
|
|
|
|
|
<div className="topbox_3"></div>
|
2023-10-12 04:15:42 +00:00
|
|
|
</div>
|
2024-05-28 08:25:17 +00:00
|
|
|
<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>
|
2024-06-05 08:37:19 +00:00
|
|
|
<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>
|
2024-05-28 08:25:17 +00:00
|
|
|
<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">
|
2024-06-05 08:37:19 +00:00
|
|
|
<div className="qnabox_1 d-flex justify-content-center">
|
|
|
|
|
<div className="qnabox_11 d-flex justify-content-start align-items-end">Q&A</div>
|
|
|
|
|
<div className="qnabox_12 d-flex justify-content-end align-items-end">1/2</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div className="qnabox_2 d-flex justify-content-center align-items-center">
|
|
|
|
|
<div className="qnabox_n">1</div>
|
|
|
|
|
<div className="qnabox_n">2</div>
|
|
|
|
|
<div className="qnabox_n">3</div>
|
|
|
|
|
<div className="qnabox_n">4</div>
|
|
|
|
|
</div>
|
2024-05-28 08:25:17 +00:00
|
|
|
</div>
|
2024-05-29 03:16:11 +00:00
|
|
|
<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>
|
2024-05-28 08:25:17 +00:00
|
|
|
</div>
|
2024-06-05 08:37:19 +00:00
|
|
|
<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}
|
|
|
|
|
aria-label="wrapped label tabs example"
|
|
|
|
|
>
|
|
|
|
|
<Tab value={0} label="공지사항" wrapped />
|
|
|
|
|
<Tab value={1} label="위원회 진행현황" />
|
|
|
|
|
<Tab value={2} label="건설기준고시" />
|
|
|
|
|
<Tab value={3} label="건설기준연구" />
|
|
|
|
|
<Tab value={4} label="기술자료" />
|
|
|
|
|
<Tab value={5} label="보도자료" />
|
|
|
|
|
</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>
|
2024-05-29 03:16:11 +00:00
|
|
|
<div className="bbsbox_2">2</div>
|
2024-05-28 08:25:17 +00:00
|
|
|
</div>
|
|
|
|
|
<div className="bannerbox">
|
2024-05-29 03:16:11 +00:00
|
|
|
<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>
|
2024-05-28 08:25:17 +00:00
|
|
|
</div>
|
2023-10-12 04:15:42 +00:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2024-06-05 08:37:19 +00:00
|
|
|
|
|
|
|
|
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>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-12 04:15:42 +00:00
|
|
|
export default EgovMain;
|