Compare commits

...

439 Commits
cks ... master

Author SHA1 Message Date
thkim 9434c931f7 dev server file uplaod 2024-08-22 09:30:41 +09:00
유민형 aa3f52b7cf 댓글 삭제 작업중 2024-07-24 17:59:58 +09:00
유민형 ff761d4385 댓글조회/등록 2024-07-18 17:53:10 +09:00
Lim\jun a53cc8237b 관리자 퍼블 업뎃 2024-07-04 17:28:53 +09:00
Lim\jun 4837200e37 관리자 퍼블 업뎃 2024-07-04 17:22:09 +09:00
Lim\jun 856494948e 관리자 퍼블 업뎃 2024-07-04 17:14:46 +09:00
Lim\jun ad16d765da 관리자 퍼블 업뎃 2024-07-04 15:58:33 +09:00
Lim\jun aeca739cd1 관리자 퍼블 업뎃 2024-07-04 15:55:04 +09:00
Lim\jun 3253cc7188 관리자 퍼블 업뎃 2024-07-04 15:52:21 +09:00
Lim\jun 3b78048101 관리자 퍼블 업뎃 2024-07-04 15:47:03 +09:00
Lim\jun 61d5d7c943 관리자 퍼블 업뎃 2024-07-04 14:21:59 +09:00
Lim\jun a6669fbf53 관리자 퍼블 업뎃 2024-07-04 14:13:38 +09:00
Lim\jun e96ac23190 @Param 제거 2024-07-04 13:17:34 +09:00
Lim\jun 823846d3cd 퍼블 업뎃 2024-07-04 10:30:59 +09:00
Lim\jun ccd190f511 퍼블 업뎃 2024-07-04 09:37:05 +09:00
유민형 86dc19ceaf 게시판 상세 작업중 2024-07-03 18:01:07 +09:00
Lim\jun a4a0491f0c key값 추가 2024-07-03 15:12:01 +09:00
Lim\jun 2b905a8f82 @Param 추가 2024-07-03 14:04:41 +09:00
Lim\jun 04e4ba2d0d 퍼블 업뎃 2024-07-03 13:21:58 +09:00
Lim\jun fcfaf300cc 퍼블 업뎃 2024-07-03 11:44:10 +09:00
Lim\jun 6d8b1c9f7b 퍼블 업뎃 2024-07-03 11:31:18 +09:00
Lim\jun 7bade62b72 퍼블 업뎃 2024-07-01 17:45:49 +09:00
Lim\jun 4f4e461fae 퍼블 업뎃 2024-07-01 10:06:46 +09:00
Lim\jun f4724fd2d9 퍼블 업뎃 2024-07-01 10:00:18 +09:00
Lim\jun 12d50bfc7b 퍼블 업뎃 2024-06-27 15:56:38 +09:00
유민형 b104647378 게시글 등록 카테고리 변경 수정 2024-06-26 17:15:35 +09:00
Lim\jun 02e4c621e5 퍼블 업뎃 2024-06-25 17:02:36 +09:00
Lim\jun 2f01abb5dd 퍼블 업뎃 2024-06-25 15:07:50 +09:00
유민형 842f729ef0 게시판 페이징 2024-06-25 11:24:20 +09:00
유민형 5ba3be78fb 게시글 등록시 bbsId 저장 변경 2024-06-25 10:32:11 +09:00
유민형 a8e435876b 게시판 작업중 2024-06-24 17:59:36 +09:00
thkim 1406047290 style: 관리자 팝업등록 하단 버튼 어긋나 있는 부분 수정 2024-06-23 22:14:36 +09:00
thkim 8ea8a97301 fix: K) 관리자 - 위원회 일정관리) 경고창 후 페이지 안넘어가게 수정 2024-06-23 18:16:35 +09:00
thkim fa2d2d6fd3 fix: K) 관리자 - 팝업관리) 첨부파일 업로드 오류 수정 건 2024-06-23 18:09:18 +09:00
thkim 2e8e1f2f92 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-06-23 17:05:59 +09:00
Lim\jun f502ca3524 퍼블 업뎃 2024-06-20 15:29:27 +09:00
Lim\jun dc6811870f 퍼블 업뎃 2024-06-20 15:07:33 +09:00
Lim\jun cec6d47e5a 퍼블 업뎃 2024-06-20 14:13:46 +09:00
유민형 023c641e1c Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev
# Conflicts:
#	egovframe-template-simple-react-contribution/.env.production
2024-06-20 11:39:25 +09:00
유민형 d05496b324 백엔드 경로 변경 2024-06-20 11:38:19 +09:00
Lim\jun 6849850039 퍼블 업뎃 2024-06-20 11:06:15 +09:00
Lim\jun 9cd309c4db 퍼블 업뎃 2024-06-20 10:23:17 +09:00
Lim\jun 087131d0c8 퍼블 업뎃 2024-06-19 15:32:57 +09:00
Lim\jun 35b0c4bddb 퍼블 업뎃 2024-06-19 13:12:54 +09:00
Lim\jun 432c6fdef5 url 변경 2024-06-19 11:06:59 +09:00
Lim\jun 8be3d8a5bf 퍼블 업뎃 2024-06-17 14:07:38 +09:00
Lim\jun d60de9a9e7 퍼블 업뎃 2024-06-17 13:53:24 +09:00
Lim\jun 0f48281a0c 퍼블 업뎃 2024-06-17 11:47:35 +09:00
thkim 4a04cab8ce fix: K) 관리자 - put, delete 메소드 없애기 front-end 2024-06-13 18:04:38 +09:00
thkim 378611bed7 fix: K) 관리자 - put, delete 메소드 없애기 2024-06-13 18:04:22 +09:00
Lim\jun ea6f251d16 퍼블 업뎃 2024-06-13 17:44:08 +09:00
Lim\jun 78969ae87e 퍼블 업뎃 2024-06-13 17:43:34 +09:00
thkim 611895be83 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-06-13 17:16:30 +09:00
thkim 6be91489cf feat: '진행현황 관리' 페이지에서 등록 또는 수정 시 '기준코드' 목록 불러오는 API연동 - front-end 2024-06-13 17:16:06 +09:00
thkim baff901cee feat: '진행현황 관리' 페이지에서 등록 또는 수정 시 '기준코드' 목록 불러오는 API 추가 2024-06-13 17:15:30 +09:00
Lim\jun 4eba33b6ec 퍼블 업뎃 2024-06-13 15:29:14 +09:00
Lim\jun acc53ad2db 퍼블 업뎃 2024-06-13 11:11:17 +09:00
유민형 3170d1a511 관련사이트 이미지 안보이는 오류 수정 2024-06-12 17:45:18 +09:00
유민형 d50677efff 관련사이트 2024-06-12 10:58:56 +09:00
Lim\jun 3b11c1bf11 퍼블 업뎃 2024-06-12 10:44:32 +09:00
Lim\jun cea085b8b3 퍼블 업뎃 2024-06-12 10:15:26 +09:00
thkim 79c62396f3 fix: 관리자 - 위원회관리 - 위원회 일정 관리 화면 어긋나는 거 수정 2024-06-12 10:04:38 +09:00
Lim\jun 758a27c10b 퍼블 업뎃 2024-06-12 09:49:50 +09:00
Lim\jun 72e86b51b3 퍼블 업뎃 2024-06-12 09:39:05 +09:00
thkim dee9fe01f4 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-06-11 13:12:15 +09:00
thkim 71e2f04bda . 2024-06-11 13:12:03 +09:00
Lim\jun 4915ff4362 퍼블 업뎃 2024-06-10 17:59:19 +09:00
Lim\jun 833eca5b3a 퍼블 업뎃 2024-06-10 17:03:40 +09:00
Lim\jun c778f4173a 글자 깨짐 2024-06-10 13:38:42 +09:00
Lim\jun 5deb1ea05e 퍼블 업뎃 2024-06-07 14:22:59 +09:00
Lim\jun a7928a66e0 퍼블 업뎃 2024-06-07 14:20:04 +09:00
Lim\jun 946816a442 퍼블 업뎃 2024-06-07 14:18:17 +09:00
Lim\jun 3bf786ae8d 퍼블 업뎃 (관리자) 2024-06-07 13:55:34 +09:00
Lim\jun 450d57195d 퍼블 업뎃 2024-06-07 13:45:12 +09:00
Lim\jun f384901f3b 퍼블 업뎃 2024-06-05 17:38:27 +09:00
Lim\jun 21d90bb7c1 퍼블 업뎃 2024-06-05 17:37:19 +09:00
Lim\jun 6acab8a641 퍼블 업뎃 2024-05-29 12:16:11 +09:00
Lim\jun d4fd86ac98 퍼블 업뎃 2024-05-28 17:25:17 +09:00
Lim\jun 82ffd839e7 퍼블 업뎃 2024-05-28 14:08:17 +09:00
Lim\jun b9f3d858b4 퍼블 업뎃 2024-05-28 13:18:21 +09:00
Lim\jun b60daa003f 퍼블 업뎃 2024-05-28 12:56:16 +09:00
Lim\jun 8bdb96d6e7 퍼블 업뎃 2024-05-28 11:15:53 +09:00
Lim\jun 56ef69f757 퍼블 업뎃 2024-05-28 11:10:41 +09:00
Lim\jun b86b21f02e 퍼블 업뎃 2024-05-28 09:45:53 +09:00
강석 최 dc377d7cd0 로그인 실패 안내메시지 오류 수정.
관리자메뉴 > 사용자 목록 사용자 정보 수정시 크롬에 저장된 비밀번호 자동입력 해제.
2024-05-24 14:00:23 +09:00
유민형 19e2e126ba 영문건설기준 등록/수정시 양식 변경 2024-05-03 11:51:00 +09:00
유민형 4326dd805b 게시물관리 디자인 수정, 선택 삭제 2024-05-03 09:58:11 +09:00
유민형 c7c8f80843 게시물관리 저장후 카테고리 반영되서 조회되도록 수정 2024-05-03 09:43:36 +09:00
유민형 f09da411c0 게시물 저장 수정 2024-04-30 17:57:38 +09:00
유민형 f538ca64e8 게시물관리 추가시 카테고리 기본선택 및 디자인 수정 2024-04-30 17:42:55 +09:00
강석 최 5b4b42d347 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-04-25 17:10:25 +09:00
강석 최 eb147a80e9 메뉴 생성 시 슈퍼관리자 권한 생성
슈퍼 메뉴권한 수정 불허.
2024-04-25 17:10:22 +09:00
유민형 6cdca8f5b7 게시판 관리 디자인 변경 2024-04-25 16:48:40 +09:00
유민형 47bd58c75f Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-04-25 16:45:25 +09:00
유민형 16d0119ff1 게시판 관리 ID 중복확인, 유효성검사 2024-04-25 16:45:20 +09:00
강석 최 380cd52d2e 사용자 정보 위원회 추가. 2024-04-25 16:42:59 +09:00
강석 최 758b87d93e 관리자 권한 확인 로직에 맞춰 url 수정. 2024-04-25 09:47:53 +09:00
강석 최 a4362f3783 불필요 파일 삭제.
관리자 페이지 접근 권한 확인으로 인한 URL 수정.
2024-04-24 17:56:46 +09:00
강석 최 150310ebf3 관리자 메뉴 벡엔드 확인 절차 추가. 2024-04-23 18:00:38 +09:00
강석 최 200ddd96b9 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-04-22 14:24:04 +09:00
강석 최 d31b147935 사용자 권한 설정 방식 변경.
관리자 메뉴 목록 호출 쿼리 변경.
2024-04-22 14:24:02 +09:00
Lim\jun c7c34f6354 관련싸이트 디자인 수정 2024-04-22 11:59:39 +09:00
강석 최 fcb5ed5a42 누락 소스 추가. 2024-04-19 17:45:34 +09:00
강석 최 49a474103a 메뉴별 권한 설정 2024-04-19 17:42:51 +09:00
유민형 d3b0cdd749 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-04-16 17:52:39 +09:00
유민형 242940d653 관련사이트, 게시물 수정사항 반영 2024-04-16 17:52:29 +09:00
강석 최 c50039f935 propertis 정리
미사용 class 삭제.
2024-04-16 17:49:15 +09:00
강석 최 cb9aff3e56 테스트서버 opensearch 연동 설정 완료. 2024-04-16 16:11:16 +09:00
강석 최 192c9b9b93 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-04-15 17:54:23 +09:00
강석 최 a7e798d5d7 kcsc-back-end <> kcsc-opensearch 통신 작업 완료
kcsc-opensearch <> opensearch 배포서버 세팅중.
2024-04-15 17:54:20 +09:00
유민형 b4d0596992 게시물관리 게시판유형, 검색어, 페이지 2024-04-08 15:32:05 +09:00
강석 최 d0f17a8086 검색 요청 api 개선 2024-04-05 17:18:32 +09:00
강석 최 182186dc26 오픈서치 인덱싱, 검색 프로젝트 추가. 2024-04-05 16:09:26 +09:00
유민형 10a2b0da22 관련사이트 리스트 이미지 2024-04-03 10:30:23 +09:00
유민형 961f0abf67 관련사이트 리스트 이미지 2024-04-03 10:14:05 +09:00
유민형 487e3946d6 설정 2024-04-02 18:01:57 +09:00
유민형 70f1067884 관련사이트 리스트 이미지 2024-04-02 17:54:52 +09:00
유민형 28bb4a6075 관려사이트 리스트 이미지 2024-04-01 16:31:14 +09:00
유민형 e51a2006e2 관련사이트 리스트 이미지 2024-04-01 11:45:31 +09:00
유민형 9c7651f2cd 리스트 이미지 출력 2024-03-29 15:38:36 +09:00
유민형 5f0bed4df0 관련사이트 이미지 드래그앤드롭 업로드, 직접선택 업로드, 미리보기 2024-03-26 18:00:33 +09:00
thkim ce748c7ec1 feat: 관리자 - 진행현황관리 등록 시 문서번호 선택 팝업 적용 2024-03-25 11:23:35 +09:00
thkim a4a33196cf feat: 중간저장 2024-03-22 17:59:46 +09:00
thkim 3744b08f9a build: https로 접근 시, URL에 NaN생기는 버그 수정 2024-03-22 14:14:56 +09:00
thkim 4468bd78a9 test: back-end URL console.log 수정 건 2024-03-22 13:50:32 +09:00
thkim 788b1910ed build: changed React back-end URL for backend 2024-03-22 13:35:13 +09:00
thkim 5b18827bb5 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-03-22 13:34:02 +09:00
thkim f454a5900f build: https 지원하도록 수정 2024-03-22 13:33:58 +09:00
thkim 2530a3e847 build: react에서 back-end URL 변경 2024-03-22 11:59:51 +09:00
유민형 c3cd079a8f 게시물 리스트 카테고리 2024-03-22 10:34:43 +09:00
유민형 3c00f5101b 게시물 파일업로드 2024-03-21 17:48:09 +09:00
thkim 4642e5d820 fix: 첨부파일 - 업로드 후 수정페이지에서 수정시 현파일 없어짐 버그 수정 건 2024-03-19 10:48:06 +09:00
thkim 52cfa4a257 fix: K) 위원회 일정관리 날짜형식 변경 2024-03-18 17:56:38 +09:00
thkim 964b0ebf34 fix: K) 위원회 일정관리 날짜형식 변경 2024-03-18 17:56:07 +09:00
thkim 72e996193a fix: K) 첨부파일 - 기능 오류
관리자 - 팝업 관리 > 특정 글 수정 시, file download 적용 건.
2024-03-18 17:42:25 +09:00
thkim 3075d39606 feat: 관리자 - 팝업 관리 > 특정 글 수정 시, 특정 file 삭제하는 API 추가 건 2024-03-18 15:28:38 +09:00
thkim ac4625a174 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-03-18 10:42:03 +09:00
thkim cbefc9f74f feat: 관리자 - 팝업 관리 > 특정 글 수정 시, 파일 여러개 일 경우 파일 목록이 안 나타나는 문제 수정 2024-03-18 10:41:54 +09:00
thkim 44b2507d99 feat: 관리자 - 팝업 관리 > 특정 글 수정 시, 파일 여러개 일 경우 파일 목록이 안 나타나는 문제 수정 2024-03-18 10:41:07 +09:00
강석 최 100656b50f 메뉴권한관리 표현방식 변경.
로그인 제한 주석 수정.
2024-03-12 18:01:54 +09:00
강석 최 33da2b2129 로그인 제한 해제 2024-03-12 10:53:25 +09:00
강석 최 7933c125d5 설문관리 질문의 보기 리스트에 응답 컬럼 표현. 2024-03-11 17:51:40 +09:00
강석 최 57d669cbdc 설문관리 작업완료. 2024-03-11 17:29:45 +09:00
thkim 11ca97d87c Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-03-11 09:39:57 +09:00
강석 최 bfef1ce1a8 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-03-08 18:01:18 +09:00
강석 최 efd35230c1 헤더 메뉴 선택 후 닫히도록 수정.
설문관리 작업중.
2024-03-08 18:01:14 +09:00
유민형 a18f373701 오타수정 2024-03-08 17:58:17 +09:00
유민형 8ee3517f6b 게시물 관리 등록, 수정 2024-03-08 17:56:00 +09:00
thkim 4d60a15104 중간 저장 2024-03-08 17:55:59 +09:00
thkim 92b2b44d6e feat: 관리자 - 위원회관리> 진행현황 관리> 자세히 보기 - back-end 2024-03-08 09:57:16 +09:00
thkim e358d5acaa Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-03-08 09:20:16 +09:00
thkim 31e8d91c15 관리자 - 위원회관리> 진행현황 관리> 자세히 보기 대략적인 구현 2024-03-08 09:20:10 +09:00
유민형 274ade0af0 게시판관리 최종수정일, 사용여부 표시 2024-03-08 09:17:01 +09:00
강석 최 0d338b97b1 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-03-07 18:06:20 +09:00
강석 최 47e443e000 설문관리 작업중. 2024-03-07 18:06:17 +09:00
유민형 4c5567f6ae 게시판관리 useYn에 상관없이 출력되도록 변경 2024-03-07 18:01:27 +09:00
유민형 9fd00518a5 게시판관리 수정 2024-03-07 17:57:35 +09:00
thkim fba3342c69 feat: 관리자 - 위원회관리 - 진행현황 관리에서 목록 구현 건 - backEnd 2024-03-07 15:18:29 +09:00
thkim 855eea9820 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-03-07 15:17:47 +09:00
thkim d97a49340c feat: 관리자 - 위원회관리 - 진행현황 관리에서 목록 구현 건 2024-03-07 15:17:44 +09:00
Lim\jun 49acd32502 상단 하단 간단 변경 2024-03-07 14:18:17 +09:00
강석 최 03c93da6cc 설문관리 중간저장. 2024-03-06 19:37:09 +09:00
강석 최 8afc775f18 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-03-06 18:12:33 +09:00
강석 최 543bac81ac 설문관리 작업중. 2024-03-06 18:12:30 +09:00
thkim 485e2a69e7 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-03-06 09:25:59 +09:00
thkim 6855aab706 fix: 관리자 - 사이트관리>환경설정>위원회코드 관리에서 추가 팝업 글자가 리셋 안 되는 버그 수정 건 2024-03-06 09:25:51 +09:00
강석 최 71fbb763e1 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev
# Conflicts:
#	kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/AdminConfigController.java
2024-03-05 18:09:12 +09:00
강석 최 e0c2aab3ea 설문관리 작업중. 2024-03-05 18:07:54 +09:00
thkim 67d1b3d827 feat: feat: 관리자 - 환경설정 - 위원회 코드관리 수정 구현 건 back-end 2024-03-05 16:53:57 +09:00
thkim 6e0548c233 feat: 관리자 - 환경설정 - 위원회 코드관리 수정 구현 건 2024-03-05 16:53:05 +09:00
thkim b8136827fd feat: 관리자 - 사이트관리 > 컨텐츠관리 > 팝업 관리 첨부파일 구현 건 2024-03-05 13:29:55 +09:00
thkim 5fc1e01f57 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-03-05 13:28:44 +09:00
thkim 6e4266dde9 feat: 관리자 - 컨텐츠관리> 팝업 관리 첨부파일 drag & drop지원 건 2024-03-05 13:28:41 +09:00
강석 최 a4441cc083 메뉴관리 목록, css 수정. 2024-03-05 11:12:52 +09:00
강석 최 d90fbbec3e Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-03-05 09:41:38 +09:00
강석 최 43d6706469 사용자관리 페이지 조회 로그 중복 오류 수정. 2024-03-05 09:41:34 +09:00
Lim\jun e333191efd Dashboard 1차 완료(링크 연결 남음) 2024-03-04 17:34:43 +09:00
강석 최 5b49f4ec85 관리자 - 사용자 목록 정렬 변경 2024-03-04 17:18:49 +09:00
강석 최 a8049966fe Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-03-04 17:17:10 +09:00
강석 최 94aff6bed9 메뉴관리 요청사항 반영. 2024-03-04 17:17:07 +09:00
Lim\jun 2d6f03f8f2 마감일 포함되게 수정 2024-03-04 16:30:32 +09:00
강석 최 2b962e7f7f 비로그인시 파일 다운로드 오류 수정. 2024-03-04 15:21:40 +09:00
강석 최 f1f0602d4e Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-03-04 15:08:25 +09:00
강석 최 38edb60201 파일 다운로드 이력 생성 작업완료. 2024-03-04 15:08:19 +09:00
강석 최 3079a00832 no message 2024-03-04 15:08:00 +09:00
thkim 458594779c Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-03-04 13:28:50 +09:00
thkim c3582ed28c style: 관리자 - 위원회 일정관리 디자인 변경 건 2024-03-04 13:28:34 +09:00
Lim\jun cf69ff4893 개인정보 로그현황 시/분 표시 2024-03-04 11:48:52 +09:00
thkim bc9f30c502 feat: 관리자 - 팝업관리 디자인 변경 건 2024-03-04 11:42:44 +09:00
thkim 26351bd549 feat: 관리자 - 사이트관리 > 컨텐츠관리 > 건설기준연구 관리에 게시글 번호추가 건 2024-03-04 11:21:02 +09:00
thkim 617bc8d482 feat: 관리자 - 사이트관리 > 컨텐츠관리 > 팝업 관리에 번호를 PK값이 아닌 게시글 번호로 변경 건 2024-03-04 11:13:40 +09:00
thkim 3a8f9f700e style: 관리자 - 위원회 코드관리 디자인 변경 2024-03-04 10:12:27 +09:00
Lim\jun 2c7604f3fa 왼쪽 메뉴 수정 2024-03-03 16:19:38 +09:00
Lim\jun 65b0154477 왼쪽 메뉴 수정 2024-03-03 15:45:08 +09:00
Lim\jun ca9dd81dc1 Dashboard count 0으로 나누기 오류 수정 2024-03-03 13:44:08 +09:00
강석 최 d2901908c8 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-02-29 18:04:31 +09:00
강석 최 1857be50ee 파일 다운로드 이력생성 작업중. 2024-02-29 18:04:28 +09:00
thkim 0ea10e7313 feat: 관리자 - 환경설정 - 위원회 코드관리 삭제 시, 삭제 여부 확인 후 삭제하도록 수정 2024-02-29 17:30:28 +09:00
thkim c0504044ad build: merge with master 2024-02-29 16:13:52 +09:00
thkim d98798e7b5 feat: 관리자 - 환경설정 - 위원회 코드관리 삭제 기능 구현 - backend 2024-02-29 16:10:21 +09:00
thkim 29215ccaae feat: 관리자 - 환경설정 - 위원회 코드관리 삭제 시, 선택 안 된 항목 삭제 안 되는 버그 수정 건 2024-02-29 16:09:28 +09:00
강석 최 3ba58816e8 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-02-28 18:01:51 +09:00
강석 최 6c472bf28c 다운로드 로그 생성 작업중.
관리자 로그인 제한 주석 해제.
2024-02-28 18:01:48 +09:00
Lim\jun e3845c304b Dashboard 수정 2024-02-28 17:59:40 +09:00
Lim\jun 44063a0ac6 Dashboard 수정 2024-02-28 17:55:01 +09:00
Lim\jun 67ca3cef15 Dashboard 업뎃 2024-02-28 17:51:58 +09:00
유민형 f86690f8be 관련사이트 등록수정삭제 2024-02-28 16:03:40 +09:00
유민형 12feac5480 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev
# Conflicts:
#	kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/AdminConfigController.java
#	kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/service/AdminConfigService.java
2024-02-28 09:14:12 +09:00
유민형 56c5db686f 관련사이트 관리 작업중 2024-02-28 09:08:26 +09:00
thkim a93fa295ed fix: 관리자 - 환경설정 - 위원회 코드관리에서 '중앙건설기술심의' 추가 시, 상위코드 선택해 달라는 문구 나오는 버그 수정 2024-02-27 17:34:30 +09:00
thkim b8e28f2b29 feat: 관리자 - 환경설정 - 위원회 코드관리 추가 기능 구현 2024-02-27 17:10:49 +09:00
thkim a51af7d97c Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-02-27 17:09:34 +09:00
thkim dfc40d0a11 feat: 관리자 - 환경설정 - 위원회 코드관리 에서 '총괄위원회' 선택 시 '중앙건설기술심의' 항목이 선택되어 있지 않다면 '상위 코드를 선택해주세요.' 문구 보여주도록 수정 2024-02-27 17:09:22 +09:00
강석 최 42196383be 로그인, 로그아웃 로그 생성. 2024-02-27 14:15:03 +09:00
Lim\jun 3963007183 소스 정리 2024-02-27 13:36:11 +09:00
강석 최 144b6790a1 에러 수정. 2024-02-27 13:27:54 +09:00
강석 최 e321c6e45e Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev
# Conflicts:
#	kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/logs/entity/TnDailyUserLog.java
2024-02-27 13:26:27 +09:00
강석 최 4b9d5a065f 로그인로그 생성 작업중. 2024-02-27 13:24:54 +09:00
Lim\jun 57ce1a5dab TnDailyUserLog 수정 2024-02-27 13:23:25 +09:00
강석 최 71e513dd68 사이트관리 > 사용자관리 로그 삽입 구문 추가. 2024-02-26 17:45:39 +09:00
thkim ee6b850bc4 style: 관리자 - 환경설정 - 위원회 코드관리 목록에서 '위원회 코드정보' input 넓이 변경 건 2024-02-23 17:29:17 +09:00
thkim 4749369909 style: 관리자 - 환경설정 - 위원회 코드관리 목록 box 높이 고정 건 2024-02-23 17:15:18 +09:00
thkim 655c26f5bb feat: 관리자 - 환경설정 - 위원회 코드관리 목록 구현 건 2024-02-23 17:05:34 +09:00
thkim 74597f1e5a build: Update package list for build 2024-02-23 14:32:59 +09:00
thkim 432cad27ab feat: 관리자 - 환경설정 - 위원회 코드관리 목록 구현 - 총괄위원회 목록 가져오기 구현 건 2024-02-23 14:20:23 +09:00
유민형 a357df161d 게시물관리 작업중 2024-02-20 15:06:42 +09:00
유민형 ff036473d7 게시판관리 버튼 수정 2024-02-14 15:32:38 +09:00
강석 최 694f0ef918 코드 정리 2024-02-14 09:24:19 +09:00
강석 최 bf3a460610 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-02-13 17:59:34 +09:00
강석 최 f210629907 북마크 모달 오류 수정. 2024-02-13 17:59:31 +09:00
유민형 1fd7ba0fb1 게시판관리 조회, 삭제, 날짜포맷 수정 2024-02-13 17:25:29 +09:00
Lim\jun cbfb9b2ca3 기본 포멧 업뎃 2024-02-13 09:18:41 +09:00
Lim\jun 6ca96a65ad 기본 포멧 업뎃 2024-02-13 09:15:48 +09:00
Lim\jun a2fcdfe569 기본 포멧 업뎃 2024-02-13 09:14:09 +09:00
강석 최 60521e4995 관리자 로그인 아이피 제한 해제. 2024-02-13 09:07:21 +09:00
유민형 e825207231 게시판관리 추가, 수정 2024-02-08 15:52:22 +09:00
강석 최 a63a47a7b8 기준코드 뷰어 수정중. 2024-02-08 15:46:10 +09:00
Lim\jun b84bb9a7a9 Dashboard - 다운로드수 업뎃 2024-02-07 19:02:07 +09:00
Lim\jun 8e22399ec4 Dashboard - 다운로드수 2024-02-07 18:52:29 +09:00
강석 최 f14ee3b03d Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-02-07 18:01:26 +09:00
강석 최 701e813fbb 기준코드 뷰어 수정중. 2024-02-07 18:01:23 +09:00
Lim\jun 2ec64ceac0 Dashboard - 메뉴접속수 / 방문자수 2024-02-07 14:57:15 +09:00
Lim\jun 9e3a856d23 확장자 변경 2024-02-07 09:22:04 +09:00
강석 최 b5003f30d2 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-02-06 18:02:36 +09:00
강석 최 7c5a94ed38 기준코드 목록 화면 구성 완료.
기준코드 뷰어 수정중.
2024-02-06 18:02:33 +09:00
Lim\jun 3bf8cb065a 관리자 메인 디자인 2024-02-06 17:35:59 +09:00
강석 최 7a141fff89 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-02-05 17:53:21 +09:00
강석 최 a476f3e00c 통합 다운로드 모달 내용 추가.
기준코드 목록 페이지 css 조정.
2024-02-05 17:53:18 +09:00
유민형 1f5485249b Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-02-05 14:51:10 +09:00
유민형 1cd9cf8202 게시판관리 추가/수정 모달 2024-02-05 14:51:06 +09:00
Lim\jun 94963507c4 배경색 제거 2024-02-05 13:08:48 +09:00
Lim\jun 76ce7a9a36 소스정리 2024-02-05 11:56:29 +09:00
강석 최 64e4b07953 만료 토큰 재발급 절차 수정.
기준코드 검색 페이지 즐겨찾기 기능 추가.
2024-02-02 16:50:54 +09:00
강석 최 cdd6f726c2 기준코드 목록 작업중. 2024-02-01 17:58:23 +09:00
강석 최 a7bdd5093f StandardCodeList 분리 2024-02-01 11:42:49 +09:00
강석 최 720033ece6 건설기준코드 검색 기능 추가 2024-02-01 11:30:25 +09:00
강석 최 52e6aed96e 중간저장 2024-01-31 18:00:33 +09:00
Lim\jun dc0046a3c1 Dashboard 중간저장 2024-01-31 17:41:00 +09:00
Lim\jun 7936704abd Dashboard 중간저장 2024-01-31 16:37:36 +09:00
Lim\jun 2bbd80d40b Dashboard 중간저장 2024-01-31 16:28:08 +09:00
Lim\jun ebe40f2f3e Dashboard 중간저장 2024-01-31 16:26:36 +09:00
Lim\jun 33f3654222 Dashboard 중간저장 2024-01-31 16:20:36 +09:00
강석 최 c7440cbc0d 관리자 허용 아이피 추가. 2024-01-31 13:55:29 +09:00
Lim\jun f0fdfbfcbb 필요없는 파일 삭제 2024-01-31 10:04:05 +09:00
강석 최 67852a87d0 .nav 충돌 수정. 2024-01-31 09:51:55 +09:00
강석 최 2ac1241ef1 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-01-31 09:45:35 +09:00
강석 최 7136da0529 css 주석 해제
sql 오류 수정.
2024-01-31 09:43:35 +09:00
유민형 d413c605cd css 사이드바 밀림 수정 2024-01-31 09:35:52 +09:00
강석 최 c308ec3691 중간저장. 2024-01-30 17:59:30 +09:00
강석 최 3657c16a15 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-01-30 13:10:03 +09:00
강석 최 47e4fda988 관리자페이지 검증 로직 수정. 2024-01-30 13:10:00 +09:00
thkim 98d2da2e21 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-30 11:00:53 +09:00
thkim c524e2b7d9 feat: 관리자 - 환경설정 - 위원회 코드관리 목록 구현 - 퍼블리싱 2024-01-30 11:00:24 +09:00
강석 최 847d0c619d 미완성코드 삭제 2024-01-30 09:43:47 +09:00
강석 최 163d0ecd4f 중간저장. 2024-01-29 18:01:11 +09:00
thkim 3ff1ce7481 build: 중간 저장 2024-01-26 17:56:41 +09:00
thkim 90973d65d1 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-26 17:56:07 +09:00
thkim 76533cff1c build: 중간 저장 2024-01-26 17:56:03 +09:00
강석 최 5d380ab794 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-01-26 17:53:30 +09:00
강석 최 903ef68f86 건설기준코드 검색 페이지 작업중. 2024-01-26 17:53:28 +09:00
Lim\jun d42accff75 API Key 관리 2024-01-26 13:50:34 +09:00
thkim 5d87831386 feat: 관리자 - 컨텐츠관리 - 건설기준연구 관리에서 삭제 기능 구현 front-end 2024-01-26 13:18:37 +09:00
thkim bcaf14dfc3 feat: 관리자 - 컨텐츠관리 - 건설기준연구 관리에서 삭제 기능 구현 back-end 2024-01-26 13:18:12 +09:00
thkim d9f223960a feat: 관리자 - 컨텐츠관리 - 건설기준연구 관리에서 수정 기능 구현 front-end 2024-01-26 11:32:59 +09:00
thkim 8797ad9570 feat: 관리자 - 컨텐츠관리 - 건설기준연구 관리에서 수정 기능 구현 back-end 2024-01-26 11:32:29 +09:00
thkim e2e4c075b7 feat: 관리자 - 컨텐츠관리 - 건설기준연구 관리 목록 구현 front-end 2024-01-26 09:28:20 +09:00
thkim 2431425362 feat: 관리자 - 컨텐츠관리 - 건설기준연구 관리 목록 구현 back-end 2024-01-26 09:27:56 +09:00
thkim a23833a00b Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-25 15:37:42 +09:00
thkim 9769d3b48c feat: 관리자 - 컨텐츠관리 - 팝업관리에서 특정 팝업 눌러서 삭제 및 수정 시 물어보고 수행하도록 로직 변경 2024-01-25 15:37:31 +09:00
Lim\jun f519a8af38 소스 정리 2024-01-25 14:35:14 +09:00
thkim 081f34f883 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-25 14:04:51 +09:00
thkim b3eecb0f50 feat: 관리자 - 컨텐츠관리 - 팝업관리에서 특정 팝업 눌러서 삭제 시, 실제 삭제 되도록 API 수정 2024-01-25 14:04:47 +09:00
강석 최 eef87b6e81 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-01-25 12:08:58 +09:00
강석 최 5f855dc6b0 사용자 목록 페이지 사용자 유형 삭제.
사용자 목록 페이지 모달 동작 방식 변경.
공통코드 체크박스 컴포넌트 동작 방식 변경.
2024-01-25 12:08:55 +09:00
thkim 2f7456ae62 feat: 관리자 - 컨텐츠관리 - 팝업관리에서 특정 팝업 눌러서 수정 시, 비활성화 API 추가 건 back-end 2024-01-25 10:53:33 +09:00
thkim ffea204820 feat: 관리자 - 컨텐츠관리 - 팝업관리에서 특정 팝업 눌러서 수정 시, 수정하는 API 추가 건 back-end 2024-01-25 10:02:49 +09:00
thkim 88104efc50 feat: 관리자 - 컨텐츠관리 - 팝업관리에서 특정 팝업 눌러서 수정 시, 수정하는 API 추가 건 back-end 2024-01-25 10:02:06 +09:00
thkim 4fc4240ded Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-24 18:02:51 +09:00
thkim 6d02a20ac1 build: 중간저장 2024-01-24 18:02:47 +09:00
thkim 22a185a3ab build: 중간저장 2024-01-24 18:02:10 +09:00
강석 최 139ab45831 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-01-24 17:13:54 +09:00
강석 최 cad4e6d5e0 관리자 페이지 접근시 인증 로직 오류 수정. 2024-01-24 17:13:50 +09:00
thkim 811e914666 feat: 관리자 - 컨텐츠관리 - 팝업관리에서 '팝업 추가' API 요청 front-end 2024-01-24 16:43:14 +09:00
thkim b3c99b68cf feat: 관리자 - 컨텐츠관리 - 팝업관리에서 '팝업 추가' API 추가 건 back-end 2024-01-24 16:42:42 +09:00
Lim\jun e40a1d9018 api key관리 css 수정 2024-01-24 14:23:25 +09:00
Lim\jun dc8c3579cd api key관리 css 수정 2024-01-24 14:21:33 +09:00
thkim d67c3d90e2 feat: 관리자 - 컨텐츠관리 - 팝업관리에서 '팝업 추가' 화면 publishing 2024-01-24 13:17:45 +09:00
thkim a4fc8808eb feat: 관리자 - 컨텐츠관리 - 팝업관리 paging 처리 건 2024-01-24 10:41:16 +09:00
thkim 8f45a131bf feat: 관리자 - 컨텐츠관리 - 팝업관리 paging 처리 건 2024-01-24 10:40:55 +09:00
thkim 1ed8437fb3 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-23 18:01:35 +09:00
thkim 62163de6b1 build: 중간저장 2024-01-23 18:01:31 +09:00
강석 최 f67c3ee502 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-01-23 17:22:04 +09:00
강석 최 279333780a 관리자 계정 접속 아이피 제한 기능 추가. 2024-01-23 17:22:01 +09:00
thkim e55d5081a3 feat: 관리자 - 컨텐츠관리 - 팝업관리에서 목록 불러오기 API 추가 건 2024-01-23 16:54:57 +09:00
Lim\jun e6f436ac22 메인 주석처리 2024-01-23 10:45:58 +09:00
thkim 4605f802b8 feat: 관리자 - 위원회관리 - 위원회 일정관리에서 일정 수정 시에는 '삭제'버튼 동작 되지 않는 버그 수정 2024-01-23 10:25:21 +09:00
thkim a7bd005ca3 feat: 관리자 - 위원회관리 - 위원회 일정관리에서 일정 등록시에는 '삭제'버튼 나타나지 않도록 수정 2024-01-23 10:22:32 +09:00
thkim 1c47a9adf0 feat:일정 등록 시, '종료일시는 시작일시보다 앞 설 수 없습니다.' 예외 처리 - back-end
관리자 - 위원회관리 - 위원회 일정관리에서 일정 등록 시, '종료일시는 시작일시보다 앞 설 수 없습니다.' 예외 처리 추가 건
2024-01-23 10:05:35 +09:00
thkim 88a549dd42 feat:일정 등록 시, '종료일시는 시작일시보다 앞 설 수 없습니다.' 예외 처리 - front-end
관리자 - 위원회관리 - 위원회 일정관리에서 일정 등록 시, '종료일시는 시작일시보다 앞 설 수 없습니다.' 예외 처리 추가 건
2024-01-23 09:50:50 +09:00
thkim 14c321dcf7 feat: 관리자 - 위원회관리 - 위원회 일정관리에서 삭제 된 목록은 안 보이도록 버그 수정 - Back-end 2024-01-23 09:14:28 +09:00
thkim 88b23e0fe5 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-22 17:59:05 +09:00
thkim a5bb7fdaa9 feat: 관리자 - 위원회관리 - 위원회 일정관리에서 일정 삭제 기능 구현 건 - Back-end 2024-01-22 17:58:55 +09:00
강석 최 7e3827ac07 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-01-22 17:56:28 +09:00
강석 최 cb7bd9b003 메뉴권한관리 css 수정 2024-01-22 17:56:25 +09:00
thkim 2944f9d95e feat: 관리자 - 위원회관리 - 위원회 일정관리에서 일정 수정 시 저장 기능 구현 건 2024-01-22 17:32:10 +09:00
thkim 5677e0dfe9 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-01-22 17:31:12 +09:00
thkim f6d0399f82 feat: 관리자 - 위원회관리 - 위원회 일정관리에서 일정 수정 시 저장 기능 구현 건 2024-01-22 17:31:05 +09:00
강석 최 1a656c8f6d 메뉴 권한 관리 작업 완료 2024-01-22 17:02:59 +09:00
thkim 6c3aa18b94 Merge branch 'thkim' 2024-01-22 14:01:12 +09:00
thkim 8013ce1456 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-01-22 14:01:00 +09:00
thkim 4f85ca9bf5 fix: . 2024-01-22 14:00:52 +09:00
강석 최 b2cedd163f 메뉴 권한 관리 중간저장. 2024-01-22 13:57:59 +09:00
thkim 6601e744c4 fix: 일정 시간차 문제 수정 건 2024-01-22 13:54:52 +09:00
thkim 37616477ae feat: 관리자 - 위원회관리 - 위원회 일정관리에서 날짜 오류 수정 건
관리자 - 위원회관리 - 위원회 일정관리에서 일정을 만들기 위해 특정 날짜를 선택 할 때, 자동완성되는 날짜가 선택된 날짜가 아닌 금일로 나타나는 버그 수정 건
2024-01-22 11:55:36 +09:00
thkim 201698ccd9 feat: 관리자 - 위원회관리 - 위원회 일정관리 추가 건 2024-01-22 10:28:36 +09:00
thkim 1f20255dd9 feat: 관리자 - 위원회관리 - 위원회 일정관리 추가 건 2024-01-22 10:28:12 +09:00
thkim 8f6aa05847 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-22 09:25:04 +09:00
강석 최 9bbb1c1d71 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-01-19 18:00:00 +09:00
강석 최 1a18729a54 메뉴권한관리 작업중. 2024-01-19 17:59:57 +09:00
thkim 27c3377e8d Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-19 17:59:33 +09:00
thkim 18b6f702e2 build: 중간저장 2024-01-19 17:59:19 +09:00
유민형 36d9d28d9d 게시판 관리 리스트 2024-01-19 17:25:19 +09:00
thkim 42df5ab159 build: 중간저장 2024-01-19 16:46:50 +09:00
thkim 87c6a09aa4 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-19 16:32:07 +09:00
Lim\jun e3c91a9449 로그현황 - 파일다운 현황 2024-01-19 13:59:22 +09:00
thkim 13c3bd88ca Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-19 11:22:58 +09:00
강석 최 cc718b8df3 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-01-18 17:48:57 +09:00
강석 최 e23f997e8d 메뉴 관리 작업 완료.
메뉴 권한 관리 작업중.
2024-01-18 17:48:55 +09:00
Lim\jun e1b715188d react-csv 추가 2024-01-18 15:13:32 +09:00
강석 최 f7ba2ef68b 메뉴관리 작업중. 2024-01-17 17:57:58 +09:00
강석 최 28b54fcc47 메뉴관리 작업중. 2024-01-16 17:59:52 +09:00
thkim e865725999 chore: 중간저장 2024-01-16 17:59:27 +09:00
강석 최 2556628890 메뉴관리 작업중. 2024-01-15 18:00:07 +09:00
강석 최 a74da82d17 관리자 메뉴 조정.
로그인화면 id저장 기능 오류 수정.
2024-01-15 16:43:04 +09:00
강석 최 881f4fc080 사용자 목록 페이지 검색기능 추가. 2024-01-15 16:18:06 +09:00
강석 최 ebdecf4b62 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-01-12 17:54:49 +09:00
강석 최 5d8c1fce1c 중간저장. 2024-01-12 17:54:46 +09:00
유민형 acde8223ea 대시보드 일정관리 관련코드 삭제 2024-01-12 17:50:27 +09:00
Lim\jun cb0d6baf6d 사용자 접속 현황 2024-01-12 16:18:49 +09:00
Lim\jun 75f12d485f css 수정 2024-01-12 15:18:04 +09:00
Lim\jun dbbd831ed9 package-lock.json 업뎃 2024-01-12 15:11:45 +09:00
Lim\jun c42ba6cc7e 메뉴별 접속현황 2024-01-12 15:06:29 +09:00
강석 최 510acbd7a7 사용자 목록 작업중. 2024-01-11 18:41:42 +09:00
thkim c3258630dc feat: 관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지에서 항목 입력 후 '저장'을 버튼 누른 후 상세 정보 가져오기 중간 저장 2024-01-11 18:01:02 +09:00
thkim d00696c73e feat: 관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지에서 항목 입력 후 '저장'을 버튼 누를 때 저장되도록 구현 2024-01-11 16:36:30 +09:00
thkim cdaaebd6d8 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-11 08:36:59 +09:00
강석 최 e79432a0e1 사용자 목록 작업중. 2024-01-10 17:59:14 +09:00
강석 최 babd8ac3e9 사용자 목록 중간저장 2024-01-10 16:38:38 +09:00
thkim 788c6787d3 feat: 관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지에서 항목 입력 후 '저장'을 버튼 누를 때 저장되도록 구현 2024-01-09 18:03:42 +09:00
thkim 7376a86de3 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-01-09 18:02:39 +09:00
thkim bb9375513c feat: 관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지에서 항목 입력 후 '저장'을 버튼 누를 때 저장되도록 구현 2024-01-09 18:02:31 +09:00
강석 최 08a140f5f4 가입 양식 변경.
사용자 목록 작업중.
2024-01-09 17:59:01 +09:00
Lim\jun 38ad18fc74 css 수정 2024-01-09 15:56:12 +09:00
thkim 7767f27c23 feat: 관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지 placeholder 수정 건 2024-01-09 13:30:28 +09:00
thkim a7ee5c3318 refactor : 불필요한 소스코드 제거 2024-01-09 13:24:05 +09:00
thkim 317ee491ad feat: 관리자 단에서 '컨텐츠 관리' > '팝업 관리'에 '팝업 추가' 버튼 클래스 변경 건 2024-01-09 10:47:48 +09:00
Lim\jun 61412ab597 tit_2 제거 2024-01-09 10:19:19 +09:00
Lim\jun 0812a24e67 버튼 css 수정 2024-01-09 10:17:05 +09:00
Lim\jun 516691ea24 버튼 css 수정 2024-01-09 10:13:50 +09:00
Lim\jun 965af353b4 글자크기, 버튼크기 css 수정 2024-01-09 09:39:20 +09:00
Lim\jun 3bd88c669e 공간, 글자크기, 버튼크기 css 수정 2024-01-09 09:32:26 +09:00
Lim\jun b35220416e 공간 css 수정 2024-01-08 16:16:20 +09:00
thkim 545d1cda05 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-01-08 15:58:22 +09:00
thkim 2ff16b4620 Merge branch 'thkim' 2024-01-08 15:58:14 +09:00
Lim\jun 1a52fb522a 공간 css 수정 2024-01-08 15:53:48 +09:00
thkim ec8ec0e04d feat: '위원회 일정 등록' 페이지에서 '심의위원회'을 서버로 부터 목록 받도록 기능 추가
관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지에서 '심의위원회'을 서버로 부터 목록 받도록 기능 추가
2024-01-08 15:49:32 +09:00
thkim 9fa9958e7f feat: '위원회 일정 등록' 페이지에서 '구분'을 서버로 부터 목록 받도록 기능 추가
관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지에서 '구분'을 서버로 부터 목록 받도록 기능 추가
2024-01-08 13:58:54 +09:00
thkim ebd006154a Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-08 13:57:59 +09:00
thkim 39c539c61e feat: '위원회 일정 등록' 페이지에서 '구분'을 서버로 부터 목록 받도록 기능 추가
관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지에서 '구분'을 서버로 부터 목록 받도록 기능 추가
2024-01-08 13:57:47 +09:00
Lim\jun 9f430ca7ff nav 링크 안걸리는 현상 css 수정 2024-01-08 10:50:17 +09:00
Lim\jun 4cee7da416 오른쪽 쏠림 css 수정 2024-01-08 10:25:19 +09:00
thkim 020739c98a feat: 관리자 화면 상단 우측 location 부분 수정 건
K) 관리자 - 컨텐츠관리 - 팝업관리
    K) 관리자 - 컨텐츠관리 - 건설기준연구 관리
    K) 관리자 - 환경설정 - 위원회 코드관리
    K) 관리자 - 위원회관리 - 진행현황 관리
    K) 관리자 - 위원회관리 - 위원회 일정관리
    K) 관리자 - 컨텐츠관리 - 설문관리
2024-01-08 09:23:45 +09:00
thkim abbbbddcb0 Merge branch 'thkim' 2024-01-05 18:01:46 +09:00
thkim c9ea180686 feat: '위원회 일정 등록' 페이지에서 심의위원회 첫 번째 거 선택 시, 하위 목록 불러오는 API 추가 건
관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지에서 심의위원회 첫 번째 거 선택 시, 하위 목록 불러오는 API 추가
2024-01-05 18:01:30 +09:00
강석 최 56a71cb934 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-01-05 18:00:04 +09:00
강석 최 a839bd5708 페이지네이션 주석 삭제.
관리자 좌측 메뉴 자동화.
2024-01-05 18:00:00 +09:00
Lim\jun 9b5e5f51b0 개인정보 front-end 수정 2024-01-05 17:56:07 +09:00
thkim 29690fdf38 Merge branch 'thkim' 2024-01-05 17:49:49 +09:00
thkim f8fcda0369 feat: '위원회 일정 등록' 페이지 로딩 시, 필요한 데이터 불러 오는 API 구현 완료 건
관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지 로딩 시, 필요한 데이터 불러 오는 API 구현 완료.
2024-01-05 17:49:31 +09:00
유민형 d05a5864c4 대시보드 사용자 접속현황 그래프 월별차트보기 추가 2024-01-05 17:39:51 +09:00
강석 최 5cd1c3148d 개인정보 로그현황 페이지네이션 관련 소스 수정 2024-01-05 17:38:31 +09:00
thkim 823ff346e8 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-05 17:32:58 +09:00
thkim 33ed87a6d8 feat:'위원회 일정 등록' 페이지 로딩 시, 필요한 데이터 불러 오는 API listTopOrg 목록 추가\관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지 로딩 시, 필요한 데이터 불러 오는 API 2024-01-05 17:32:38 +09:00
thkim e3cc93b986 feat:'위원회 일정 등록' 페이지 로딩 시, 필요한 데이터 불러 오는 API listTopOrg 목록 추가관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지 로딩 시, 필요한 데이터 불러 오는 API 2024-01-05 17:32:08 +09:00
강석 최 4d4cb60413 사용자관리 작업중. 페이지네이션 수정. 2024-01-05 17:31:38 +09:00
thkim c18143c542 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-05 16:44:03 +09:00
thkim 549a78b47e feat:'위원회 일정 등록' 페이지 로딩 시, 필요한 데이터 불러 오는 API 일부 기능 추가 관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지 로딩 시, 필요한 데이터 불러 오는 API 2024-01-05 16:43:54 +09:00
Lim\jun 4248a47916 왼쪽메뉴 하단이랑 붙는 경우 대비 20px 공간추가 2024-01-05 15:00:25 +09:00
Lim\jun 6c3a17f0f2 paging css 수정 2024-01-05 13:55:17 +09:00
Lim\jun 71e621d63e 왼쪽메뉴 상단 및 본문 간격 줄임 2024-01-05 13:46:11 +09:00
thkim 7549c0bcd7 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-05 09:59:53 +09:00
thkim 83f11fb4e5 feat: merged egovframe-template-simple-react-contribution/yarn.lock 2024-01-05 09:59:49 +09:00
thkim a799f454e2 feat: '위원회 일정 등록' 페이지 로딩 API를 개발하기 위한 폴더 구조 생성
관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록'버튼을 누른 후 '위원회 일정 등록' 페이지 로딩 시, 필요한 데이터 불러오는 API 제작
2024-01-05 09:58:08 +09:00
Lim\jun ff14346de4 로그현황 - 개인정보 로그 2024-01-04 18:33:36 +09:00
강석 최 5fa0e3f25f 사용자 목록 작업중. 2024-01-04 18:01:35 +09:00
강석 최 dc59f66c11 코드관리 작업완료. 2024-01-04 16:43:56 +09:00
강석 최 37b84a9975 코드관리 작업중.
front gitignore 수정.
2024-01-04 16:11:31 +09:00
강석 최 6713bc933d Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-01-03 17:59:17 +09:00
강석 최 021f61f126 기본코드관리 작업중. 2024-01-03 17:59:14 +09:00
유민형 0e16df04a4 대시보드 사용자 접속현황 그래프(6개월 전으로 해놓음) 2024-01-03 17:33:17 +09:00
thkim 20a84b6d1e build: .vscode 디렉토리가 git에 포함되지 않도록 .gitignore 생성 2024-01-03 15:26:21 +09:00
thkim 0396f144bb feat: 위원회 관리/위원회 일정 관리 페이지 추가 건
위원회 관리/위원회 일정 관리/일정관리상세
위원회 관리/위원회 일정 관리/일정관리생성
위원회 관리/위원회 일정 관리/일정관리수정
2024-01-03 10:09:41 +09:00
강석 최 eee0b471bf Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2024-01-02 18:02:33 +09:00
강석 최 5f72e43ca1 기본코드관리 작업중. 2024-01-02 18:02:31 +09:00
thkim d005366d8f feat: 네비게이터 수정 건
K) 관리자 - 컨텐츠관리 - 팝업관리
        K) 관리자 - 컨텐츠관리 - 건설기준연구 관리
        K) 관리자 - 환경 설정 - 위원회 코드관리
        K) 관리자 - 위원회관리 - 진행현황 관리
        K) 관리자 - 위원회관리 - 위원회 일정관리
        K) 관리자 - 컨텐츠관리 - 설문관리
2024-01-02 16:27:42 +09:00
thkim 84984ddcfc Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-02 16:12:54 +09:00
Lim\jun ce07c30157 왼쪽메뉴 css 글자 크기 및 공간 변경 2024-01-02 13:43:45 +09:00
thkim a8aec3860e Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev into thkim 2024-01-02 10:27:13 +09:00
thkim d1633ce61a update git ignore 2024-01-02 10:27:03 +09:00
강석 최 cb7773b0c5 기본코드관리 작업중. 2023-12-29 11:56:04 +09:00
thkim 097089d048 Merge branch 'thkim' 2023-12-28 17:05:47 +09:00
thkim 18f3f729c1 test: 관리자 위원회 관리 / 위원회 일정 관리에 달력 일정 표시 테스트 2023-12-28 17:05:35 +09:00
강석 최 943e759060 Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev 2023-12-28 16:24:24 +09:00
강석 최 3983cf4ce4 id, pw 찾기 추가. 2023-12-28 16:24:22 +09:00
thkim de9edc41ee feat: 관리자 위원회 관리 / 위원회 일정 관리에 달력 추가 2023-12-28 13:56:39 +09:00
thkim e65a4757a8 feat: 관리자 건설 기준 관리 쪽 사이드 메뉴 추가 2023-12-28 13:47:35 +09:00
thkim 3040c9c5ac feat: 관리자 컨텐츠 관리 쪽 사이드 메뉴 추가 2023-12-28 13:30:07 +09:00
강석 최 f379513681 id 찾기 기능 추가. 2023-12-27 16:46:10 +09:00
강석 최 51b5907916 id, pw 찾기 작업중. 2023-12-26 18:05:40 +09:00
438 changed files with 38126 additions and 23806 deletions

View File

@ -4,7 +4,11 @@
NODE_PATH=src/
## 절대경로 지정
REACT_APP_EGOV_CONTEXT_URL=118.219.150.34:50688
<<<<<<< HEAD
=======
## REACT_APP_EGOV_CONTEXT_URL=https://back.kcsc.dbnt.co.kr
>>>>>>> 6849850039413527a8e94951eb8b08586f5bdfe7
REACT_APP_EGOV_CONTEXT_URL=58.234.249.138:50688
## [보안] 소스맵 삭제
GENERATE_SOURCEMAP=false

View File

@ -3,6 +3,8 @@
.github/
.Docs/
.idea/
**/.idea
**/.vscode
# dependencies
/node_modules
@ -28,3 +30,6 @@ yarn-error.log*
# code
.history
# Develop environment
.env.development.local

File diff suppressed because it is too large Load Diff

View File

@ -3,23 +3,50 @@
"version": "0.1.0",
"private": true,
"dependencies": {
"@ant-design/colors": "^6.0.0",
"@ant-design/icons": "^4.7.0",
"@babel/runtime": "^7.23.9",
"@base2/pretty-print-object": "^1.0.2",
"@emotion/react": "^11.11.3",
"@emotion/styled": "^11.11.0",
"@material-ui/core": "^4.12.4",
"@material-ui/icons": "^4.11.3",
"@mui/icons-material": "^5.15.6",
"@mui/material": "^5.14.19",
"@mui/styles": "^5.15.3",
"apexcharts": "^3.45.2",
"bootstrap": "^5.3.2",
"date-fns": "^3.2.0",
"dompurify": "^3.1.5",
"prop-types": "^15.8.1",
"qs": "^6.11.0",
"react": "^18.2.0",
"react-apexcharts": "^1.4.0",
"react-bootstrap": "^2.9.0",
"react-copy-to-clipboard": "^5.1.0",
"react-countup": "^6.5.3",
"react-csv": "^2.2.2",
"react-datepicker": "^4.8.0",
"react-dom": "^18.2.0",
"react-drag-drop-files": "^2.3.10",
"react-element-to-jsx-string": "^15.0.0",
"react-icons": "^4.11.0",
"react-loader-spinner": "^5.4.5",
"react-quill": "^2.0.0",
"react-router-dom": "^6.4.0",
"react-scripts": "5.0.1",
"react-slick": "^0.30.2",
"react-syntax-highlighter": "^15.5.0",
"recharts": "^2.10.3",
"slick-carousel": "^1.8.1",
"styled-components": "^6.0.9",
"web-vitals": "^2.1.4"
},
"devDependencies": {
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "^13.3.0",
"@testing-library/user-event": "^13.5.0"
"@testing-library/user-event": "^13.5.0",
"react-cookie": "^7.1.4"
},
"scripts": {
"start": "react-scripts start",

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 515 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 554 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1020 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 992 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1007 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 587 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 459 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 880 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

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

View File

@ -1,5 +1,8 @@
import RootRoutes from './routes';
import React from 'react';
import ThemeCustomization from 'themes';
import ScrollTop from 'components/ScrollTop';
import React, { useEffect } from 'react';
import { useLocation } from 'react-router-dom';
import 'bootstrap/dist/css/bootstrap.min.css';
import './css/base.css';
@ -9,16 +12,35 @@ import './css/page.css';
import './css/response.css';
import './css/Custom/customMain.css'
import URL from "constants/url";
function App() {
return (
<div className="wrap">
<RootRoutes />
</div>
<ThemeCustomization>
<ScrollTop>
<ScrollControl />
<RootRoutes />
</ScrollTop>
</ThemeCustomization>
)
}
const ScrollControl = () => {
const location = useLocation();
useEffect(() => {
const hideFooterPaths = [URL.STANDARD_CODE_VIEWER, URL.STANDARD_CODE_LIST];
if (hideFooterPaths.some(path => location.pathname.includes(path))) {
document.body.style.overflow = 'hidden';
} else {
document.body.style.overflow = '';
}
}, [location]);
return null;
};
console.log("process.env.NODE_ENV", process.env.NODE_ENV);
console.log("process.env.REACT_APP_EGOV_CONTEXT_URL", process.env.REACT_APP_EGOV_CONTEXT_URL);
console.log("process.env.REACT_APP_EGOV_CONTEXT_URL", "[" + process.env.REACT_APP_EGOV_CONTEXT_URL + "]");
export default App;

View File

@ -10,6 +10,16 @@ export function getQueryString(params){
return `?${Object.entries(params).map(e => e.join('=')).join('&') }`
}
export function convParams(params){
let str = "?"
for(let key in params){
if(params[key]){
str = str+key+"="+params[key]+"&";
}
}
return str;
}
export function requestFetch(url, requestOptions, handler, errorHandler) {
console.groupCollapsed("requestFetch");
console.log("requestFetch [URL] : ", SERVER_URL + url);
@ -19,65 +29,71 @@ export function requestFetch(url, requestOptions, handler, errorHandler) {
const accessToken = getLocalItem('accessToken');
const sessionUser = parseJwt(accessToken);
const sessionUserId = sessionUser?.id || null;
const refreshToken = getLocalItem('refreshToken');
if(sessionUserId != null){
if( !requestOptions['headers'] ) requestOptions['headers']={}
if( !requestOptions['headers']['Authorization'] ) requestOptions['headers']['Authorization']=null;
requestOptions['headers']['Authorization'] = accessToken;
if(accessToken && new Date(sessionUser.exp*1000) < new Date()){
//만료된 토큰 재발급 절차 진행.
accessTokenRefresh(url, requestOptions, handler, errorHandler);
}else{
if(sessionUserId != null){
if( !requestOptions['headers'] ) requestOptions['headers']={}
if( !requestOptions['headers']['Authorization'] ) requestOptions['headers']['Authorization']=null;
requestOptions['headers']['Authorization'] = accessToken;
}
//CORS ISSUE 로 인한 조치 - origin 및 credentials 추가
// origin 추가
if (!requestOptions['origin']) {
requestOptions = { ...requestOptions, origin: SERVER_URL };
}
// credentials 추가
if (!requestOptions['credentials']) {
requestOptions = { ...requestOptions, credentials: 'include' };
}
fetch(SERVER_URL + url, requestOptions)
.then(response => {// response Stream. Not completion object
return response.json();
})
.then((resp) => {
if (Number(resp.resultCode) === Number(CODE.RCV_ERROR_AUTH)) {
if(url === "/auth/login"){
alert("로그인을 실패하였습니다.")
}else{
alert("로그인이 해제되었습니다.")
window.location.href = "/login"
}
}else{
return resp;
}
})
.then((resp) => {
console.groupCollapsed("requestFetch.then()");
console.log("requestFetch [response] ", resp);
if (typeof handler === 'function') {
handler(resp);
} else {
console.log('egov fetch handler not assigned!');
}
console.groupEnd("requestFetch.then()");
})
.catch(error => {
console.error('There was an error!', error);
if (error === 'TypeError: Failed to fetch') {
alert("서버와의 연결이 원활하지 않습니다. 서버를 확인하세요.");
}
if (typeof errorHandler === 'function') {
errorHandler(error);
} else {
console.error('egov error handler not assigned!');
alert("ERR : " + error.message);
}
})
.finally(() => {
console.log("requestFetch finally end");
console.groupEnd("requestFetch");
});
}
//CORS ISSUE 로 인한 조치 - origin 및 credentials 추가
// origin 추가
if (!requestOptions['origin']) {
requestOptions = { ...requestOptions, origin: SERVER_URL };
}
// credentials 추가
if (!requestOptions['credentials']) {
requestOptions = { ...requestOptions, credentials: 'include' };
}
fetch(SERVER_URL + url, requestOptions)
.then(response => {// response Stream. Not completion object
//console.log("requestFetch [Response Stream] ", response);
return response.json();
})
.then((resp) => {
if (Number(resp.resultCode) === Number(CODE.RCV_ERROR_AUTH)) {
//accessToken 갱신 요청
accessTokenRefresh(url, requestOptions, handler, errorHandler);
return resp;
} else {
return resp;
}
})
.then((resp) => {
console.groupCollapsed("requestFetch.then()");
console.log("requestFetch [response] ", resp);
if (typeof handler === 'function') {
handler(resp);
} else {
console.log('egov fetch handler not assigned!');
}
console.groupEnd("requestFetch.then()");
})
.catch(error => {
console.error('There was an error!', error);
if (error === 'TypeError: Failed to fetch') {
alert("서버와의 연결이 원활하지 않습니다. 서버를 확인하세요.");
}
if (typeof errorHandler === 'function') {
errorHandler(error);
} else {
console.error('egov error handler not assigned!');
alert("ERR : " + error.message);
}
})
.finally(() => {
console.log("requestFetch finally end");
console.groupEnd("requestFetch");
});
}
function accessTokenRefresh(url, requestOptions, handler, errorHandler){

View File

@ -1,36 +1,68 @@
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() {
if(window.location.pathname.includes("/standardCode/viewer")){
const [toggle, setToggle] = useState(false);
const toggleFunc = useCallback(() => setToggle(!toggle), [toggle]);
const hideFooterPaths = [URL.STANDARD_CODE_VIEWER, URL.STANDARD_CODE_LIST];
const currentPath = window.location.pathname;
if(hideFooterPaths.some(path => currentPath.includes(path))){
return null;
}else{
return (
<div className="footer">
<div className="inner">
<h1>
<Link to="">
국가건설 기준센터
{/*<img className="w" src="/assets/images/logo_footer_w.png" alt="" />
<img className="m" src="/assets/images/logo_footer_m.png" alt="" />*/}
</Link>
</h1>
<div className="info">
<p>
대표문의메일 : kcsc@kict.re.kr <span className="m_hide">|</span><br className="m_show" /> 대표전화 : 0000-0000 (000-0000-0000)<br />
호환성확인 : 000-0000-0000 | 교육문의 : 0000-0000-0000
</p>
<p className="copy">Copyright © 2021 Ministry Of The Interior And Safety. All Rights Reserved.</p>
<div className="upper">
<div className="row up">
<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 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>
<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="col-auto right_col">
<NavLink to={URL.PRIVATE}>개인정보처리방침</NavLink>
<NavLink to={URL.EMAIL}>이메일 무단수집거부</NavLink>
</div>
</div>
</div>

View File

@ -1,4 +1,4 @@
import React from 'react';
import React, {useEffect, useState} from 'react';
import { Link, NavLink, useNavigate } from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
@ -8,18 +8,27 @@ 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");
console.log("[Start] EgovHeader ------------------------------");
const [menuDiv, setMenuDiv] = useState(false);
const accessToken = getLocalItem('accessToken');
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()
@ -56,106 +65,277 @@ function EgovHeader({ loginUser, onChangeLogin }) {
);
}
const myHandler = () => { //
if (sessionUserId)
navigate(URL.MY);
else
navigate(URL.JOIN);
}
const SearchHandler = () => {
navigate(URL.STANDARD_CODE_SEARCH);
}
function allMenuControl(){
setMenuDiv(!menuDiv);
}
console.log("------------------------------EgovHeader [End]");
console.groupEnd("EgovHeader");
useEffect(() => {
setMenuDiv(false);
}, [navigate]);
return (
// <!-- header -->
<div className="header">
<div className="inner">
<h1 className="logo">
<Link to={URL.MAIN} className="w">국가건설기준센터</Link>{/*<img src="/assets/images/logo_w.png" alt="국가건설기준센터" />*/}
<Link to={URL.MAIN} className="m">국가건설기준센터</Link>{/*<img src="/assets/images/logo_m.png" alt="국가건설기준센터" />*/}
</h1>
<Row className="logo pt-4">
<Col xs={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>
</Col>
<Col xs={6} className="text-center">
{/*<img src="/assets/images/copy.png" alt="국가건설기준센터" className="align-self-end" />*/}
<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" onClick={SearchHandler}></button>
</div>
</div>
</form>
</div>
</div>
</Col>
<Col xs={3}>
<Row className="justify-content-end">
<Col xs={"auto"} className="person mt-2" onClick={myHandler}></Col>
<Col xs={"auto"} className="right_a mt-2" onClick={allMenuControl}>
<button type="button" className="btn btnAllMenu" title="전체메뉴 닫힘">전체메뉴</button>
<button type="button" className="btn mobile btnAllMenuM" title="전체메뉴 닫힘">전체메뉴</button>
</Col>
</Row>
</Col>
</Row>
{/*<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" onClick={SearchHandler}></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>*/}
<div className="gnb">
<h2 className="blind">주메뉴</h2>
<ul>
<li><NavLink to={URL.ABOUT} className={({ isActive }) => (isActive ? "cur" : "")}>사이트소개</NavLink></li>
<li><NavLink to={URL.INTRO} className={({ isActive }) => (isActive ? "cur" : "")}>정보마당</NavLink></li>
<li><NavLink to={URL.SUPPORT} className={({ isActive }) => (isActive ? "cur" : "")}>고객지원</NavLink></li>
<li><NavLink to={URL.INFORM} className={({ isActive }) => (isActive ? "cur" : "")}>알림마당</NavLink></li>
{sessionUserSe ==='ADM' &&
<li><NavLink to={URL.ADMIN} className={({ isActive }) => (isActive ? "cur" : "")}>사이트관리</NavLink></li>
}
</ul>
</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>*/}
{/*<li><NavLink to={URL.SUPPORT} className={({ isActive }) => (isActive ? "cur" : "")}>고객지원</NavLink></li>*/}
{/*<li><NavLink to={URL.INFORM} className={({ isActive }) => (isActive ? "cur" : "")}>알림마당</NavLink></li>*/}
{/*{sessionUserSe ==='ACC_TP01' &&*/}
{/* <li><NavLink to={URL.ADMIN} className={({ isActive }) => (isActive ? "cur" : "")}>사이트관리</NavLink></li>*/}
{/*}*/}
{/* </ul>*/}
{/*</div>*/}
{/* <!-- PC web에서 보여지는 영역 --> */}
<div className="user_info">
{/* 로그아웃 : 로그인 정보 있을때 */}
{sessionUserId &&
<>
<span className="person">{sessionUserId} </span> 님이, {sessionUserSe==='ADM'?'관리자':'사용자'} 로그인하셨습니다.
<button onClick={logOutHandler} className="btn">로그아웃</button>
</>
}
{/* 로그인 : 로그인 정보 없을 때 */}
{!sessionUserId &&
<button onClick={logInHandler} className="btn login">로그인</button>
}
</div>
{/*<div className="user_info">*/}
{/* /!* 로그아웃 : 로그인 정보 있을때 *!/*/}
{/* {sessionUserId &&*/}
{/* <>*/}
{/* {sessionUserId} {sessionUserRole==='ROLE_001' && '[최고관리]'}{sessionUserRole==='ROLE_002' && '[관리자]'} &nbsp;*/}
{/* <span className="person"> </span>*/}
{/* <button onClick={logOutHandler} className="btn">로그아웃</button>*/}
{/* </>*/}
{/* }*/}
{/* /!* 로그인 : 로그인 정보 없을 때 *!/*/}
{/* {!sessionUserId &&*/}
{/* <button onClick={logInHandler} className="btn login">로그인</button>*/}
{/* }*/}
{/*</div>*/}
{/* <!--// PC web에서 보여지는 영역 --> */}
{/* <!-- right area --> */}
<div className="right_a">
<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 closed">
<div className={`all_menu WEB ${menuDiv?"open":"closed"}`}>
<h2 className="blind">전체메뉴</h2>
<div className="inner">
<div className="col">
<h3>사이트소개</h3>
<div className="inner row">
<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.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.INTRO_WORKS} className={({ isActive }) => (isActive ? "cur" : "")}>주요사업 소개</NavLink></li>
<li><NavLink to={URL.INTRO_SERVICE} 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 className="col">
<h3>고객지원</h3>
<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>
<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="col">
<h3>알림마당</h3>
<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>
<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>
{sessionUserSe ==='ADM' &&
<div className="col">
{/*<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="">
<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">
@ -177,9 +357,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>
@ -207,10 +388,10 @@ function EgovHeader({ loginUser, onChangeLogin }) {
<li><NavLink to={URL.INFORM_GALLERY} className={({ isActive }) => (isActive ? "cur" : "")}>사이트 갤러리</NavLink></li>
</ul>
</div>
{sessionUserSe ==='ADM' &&
{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>
@ -219,7 +400,7 @@ function EgovHeader({ loginUser, onChangeLogin }) {
<li><NavLink to={URL.ADMIN_GALLERY} className={({ isActive }) => (isActive ? "cur" : "")}>사이트갤러리관리</NavLink></li>
<li><NavLink to={URL.ADMIN_MANAGER} className={({ isActive }) => (isActive ? "cur" : "")}>사이트관리자 암호변경</NavLink></li>
</ul>
</div>
</div>*/}
</>
}
</div>

View File

@ -1,65 +1,50 @@
import React from 'react';
function EgovPaging(props) {
function EgovPaging({pagination, moveToPage}) {
console.groupCollapsed("EgovPaging");
console.log("EgovPaging [props] : ", props);
console.log("EgovPaging [pagination] : ", pagination);
let paginationTag = [];
if (props.pagination === undefined) {
if (pagination === undefined) {
paginationTag = "-";
} else {
const currentPageNo = props.pagination.currentPageNo;
const pageSize = props.pagination.pageSize;
const totalRecordCount = props.pagination.totalRecordCount;
const recordCountPerPage = props.pagination.recordCountPerPage;
const totalPageCount = Math.ceil(totalRecordCount / recordCountPerPage);
const currentFirstPage = Math.floor((currentPageNo - 1) / pageSize) * pageSize + 1;
let currentLastPage = currentFirstPage + pageSize - 1;
currentLastPage = (currentLastPage > totalPageCount) ? totalPageCount : currentLastPage;
if (totalPageCount > pageSize) {
if(pagination.startNum>1){
//
const firstPageTag = <li key="fp" className="btn">
<button onClick={e => {props.moveToPage(1)}} className="first">처음</button></li>;
paginationTag.push(firstPageTag);
paginationTag.push(<li key="fp" className="btn">
<button onClick={e => {moveToPage(1)}} className="first">처음</button>
</li>);
//
const prevPageIndex = (currentPageNo - 1 > 0) ? currentPageNo - 1 : 1;
const previousPageTag = <li key="pp" className="btn">
<button onClick={e => {props.moveToPage(prevPageIndex)}} className="prev">이전</button></li>;
paginationTag.push(previousPageTag);
const prevPageIndex = pagination.pageIndex-10 < 0?1:(pagination.pageIndex-10)
paginationTag.push(<li key="pp" className="btn">
<button onClick={e => {moveToPage(prevPageIndex)}} className="prev">이전</button>
</li>);
}
for (let i = currentFirstPage; i <= currentLastPage; i++) {
if (i === currentPageNo) {
for (let i = pagination.startNum; i <= pagination.endNum; i++) {
if (i === pagination.pageIndex) {
//
const currentPage = <li key={i}>
paginationTag.push(<li key={i}>
<button className="cur">{i}</button>
</li>;
paginationTag.push(currentPage);
</li>);
} else {
//
const otherPage = <li key={i}>
<button onClick={e => {props.moveToPage(i)}}>{i}</button>
</li>;
console.log("@@@ otherpage : " + otherPage);
paginationTag.push(otherPage);
paginationTag.push(<li key={i}>
<button onClick={e => {moveToPage(i)}}>{i}</button>
</li>);
}
}
if (totalPageCount > pageSize) {
if(pagination.endNum!=pagination.maxNum){
//
const nextPageIndex = (currentLastPage + 1 < totalPageCount) ? currentLastPage + 1 : totalPageCount;
const nextPageTag = <li key="np" className="btn">
<button onClick={e => {props.moveToPage(nextPageIndex)}} className="next">다음</button>
</li>;
paginationTag.push(nextPageTag);
const nextPageIndex = pagination.pageIndex+10 > pagination.maxNum?pagination.maxNum:(pagination.pageIndex+10)
paginationTag.push(<li key="np" className="btn">
<button onClick={e => {moveToPage(nextPageIndex)}} className="next">다음</button>
</li>);
//
const lastPageTag = <li key="lp" className="btn">
<button onClick={e => {props.moveToPage(totalPageCount)}} className="last"></button></li>;
paginationTag.push(lastPageTag);
paginationTag.push(<li key="lp" className="btn">
<button onClick={e => {moveToPage(pagination.maxNum)}} className="last"></button>
</li>);
}
}
console.log("paginationTag", paginationTag);

View File

@ -0,0 +1,63 @@
import React from 'react';
function EgovPagingPaginationInfo({pagination, setPaginationInfo, moveToPage}) {
console.groupCollapsed("EgovPagingPaginationInfo");
console.log("EgovPagingPaginationInfo [pagination] : ", pagination);
let paginationTag = [];
if (pagination === undefined) {
paginationTag = "-";
} else {
if(pagination.firstPageNoOnPageList>1){
//
paginationTag.push(<li key="fp" className="btn">
<button onClick={e => {moveToPage(1)}} className="first">처음</button>
</li>);
//
const prevPageIndex = pagination.currentPageNo-pagination.pageSize < 0?1:(pagination.currentPageNo-pagination.pageSize)
paginationTag.push(<li key="pp" className="btn">
<button onClick={e => {moveToPage(prevPageIndex)}} className="prev">이전</button>
</li>);
}
for (let i = pagination.firstPageNoOnPageList; i <= pagination.lastPageNoOnPageList; i++) {
if (i === pagination.currentPageNo) {
//
paginationTag.push(<li key={i}>
<button className="cur">{i}</button>
</li>);
} else {
//
paginationTag.push(<li key={i}>
<button onClick={e => {moveToPage(i)}}>{i}</button>
</li>);
}
}
if(pagination.lastPageNoOnPageList!=pagination.lastPageNo){
//
const nextPageIndex = pagination.currentPageNo+pagination.pageSize > pagination.lastPageNo?pagination.lastPageNo:(pagination.currentPageNo+pagination.pageSize)
paginationTag.push(<li key="np" className="btn">
<button onClick={e => {moveToPage(nextPageIndex)}} className="next">다음</button>
</li>);
//
paginationTag.push(<li key="lp" className="btn">
<button onClick={e => {moveToPage(pagination.lastPageNo)}} className="last"></button>
</li>);
}
}
console.log("paginationTag", paginationTag);
console.groupEnd("EgovPagingPaginationInfo");
return (
<div className="paging">
<ul>
{paginationTag}
</ul>
</div>
);
}
export default React.memo(EgovPagingPaginationInfo);

View File

@ -1,10 +1,16 @@
import React from 'react';
import React, {useEffect, useState} from 'react';
import {Blocks} from "react-loader-spinner";
import {LoadingDiv} from "./Loading.style";
function Loading () {
function Loading ({loadingState}) {
const [visible, setVisible] = useState(loadingState);
useEffect(() => {
setVisible(loadingState)
}, [loadingState]);
return (
<LoadingDiv>
<LoadingDiv $visible={visible}>
<Blocks
height="150"
width="150"

View File

@ -4,4 +4,5 @@ export const LoadingDiv = styled.div`
min-height: 83vh;
padding-top: calc(40vh - 150px);
padding-left: calc(54vw - 150px);
display: ${props=>props.$visible?"block":"none"};
`

View File

@ -0,0 +1,26 @@
import PropTypes from 'prop-types';
import { useEffect } from 'react';
import { useLocation } from 'react-router-dom';
// ==============================|| NAVIGATION - SCROLL TO TOP ||============================== //
const ScrollTop = ({ children }) => {
const location = useLocation();
const { pathname } = location;
useEffect(() => {
window.scrollTo({
top: 0,
left: 0,
behavior: 'smooth'
});
}, [pathname]);
return children || null;
};
ScrollTop.propTypes = {
children: PropTypes.node
};
export default ScrollTop;

View File

@ -0,0 +1,58 @@
import React, { useEffect } from 'react';
import Button from '@mui/material/Button';
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
import DialogContentText from '@mui/material/DialogContentText';
import DialogTitle from '@mui/material/DialogTitle';
import Slide from '@mui/material/Slide';
const Transition = React.forwardRef(function Transition(props, ref) {
return <Slide direction="up" ref={ref} {...props} />;
});
export default function AlertDialogSlide({confirm, setConfirm}) {
useEffect(function () {
if( confirm ) {
setConfirm({
...confirm,
//open: !confirm.open && false,
//title: !confirm.title && "",
///yes: !confirm.yes && "",
//no: !confirm.no && "",
});
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const handleClose = () => {
setConfirm({...confirm, open: false});
};
return (
<React.Fragment>
{confirm &&
<Dialog
open={ confirm.open }
TransitionComponent={Transition}
keepMounted
onClose={handleClose}
aria-describedby="alert-dialog-slide-description"
>
<DialogTitle>{confirm.title ? confirm.title : "알림"}</DialogTitle>
<DialogContent>
<DialogContentText id="alert-dialog-slide-description">{confirm.body}</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={() => {handleClose(); confirm.yesCallback && confirm.yesCallback(confirm.yesCallbackParams);}}>{confirm.yes ? confirm.yes : "예"}</Button>
<Button onClick={() => {handleClose(); confirm.noCallback && confirm.noCallback(confirm.noCallbackParams);}}>{confirm.no ? confirm.no : "아니요"}</Button>
</DialogActions>
</Dialog>
}
</React.Fragment>
);
}

View File

@ -0,0 +1,55 @@
import * as React from 'react';
import Button from '@mui/material/Button';
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
import DialogContentText from '@mui/material/DialogContentText';
import DialogTitle from '@mui/material/DialogTitle';
export default function FormDialog( {open, setOpen, title, contentText, children, handleOk} ) {
const handleClickOpen = () => {
setOpen(true);
};
const handleClose = (event, reason) => {
// background click dialog .
if(reason !== 'backdropClick' && reason !== 'escapeKeyDown') {
// Set 'open' to false, however you would do that with your particular code.
setOpen(false);
}
};
return (
<React.Fragment>
<Dialog
open={open}
onClose={handleClose}
PaperProps={{
component: 'form',
onSubmit: (event) => {
event.preventDefault();
const formData = new FormData(event.currentTarget);
const formJson = Object.fromEntries(formData.entries());
const email = formJson.email;
console.log(email);
handleClose();
},
}}
>
<DialogTitle>{title}</DialogTitle>
<DialogContent>
<DialogContentText>
{contentText}
</DialogContentText>
{children}
</DialogContent>
<DialogActions>
<Button onClick={handleClose}>취소</Button>
<Button type="button" onClick={handleOk}>저장</Button>
</DialogActions>
</Dialog>
</React.Fragment>
);
}

View File

@ -0,0 +1,70 @@
import PropTypes from 'prop-types';
// material-ui
import { Box, Chip, Grid, Stack, Typography } from '@mui/material';
// project import
import MainCard from 'components/cards/MainCard';
// assets
import { RiseOutlined, FallOutlined } from '@ant-design/icons';
// ==============================|| STATISTICS - ECOMMERCE CARD ||============================== //
const AnalyticEcommerce = ({ color, title, count, percentage, isLoss, extra }) => (
<MainCard contentSX={{ p: 2.25 }}>
<Stack spacing={0.5}>
<Typography variant="h6" color="textSecondary">
{title}
</Typography>
<Grid container alignItems="center">
<Grid item>
<Typography variant="h4" color="inherit">
{count}
</Typography>
</Grid>
{percentage !== undefined && (
<Grid item>
<Chip
variant="combined"
color={color}
icon={
<>
{!isLoss && <RiseOutlined style={{ fontSize: '0.75rem', color: 'inherit' }} />}
{isLoss && <FallOutlined style={{ fontSize: '0.75rem', color: 'inherit' }} />}
</>
}
label={`${percentage}%`}
sx={{ ml: 1.25, pl: 1 }}
size="small"
/>
</Grid>
)}
</Grid>
</Stack>
<Box sx={{ pt: 2.25 }}>
<Typography variant="caption" color="textSecondary">
지난달{' '}
<Typography component="span" variant="caption" sx={{ color: `${color || 'primary'}.main` }}>
{extra}
</Typography>{' '}
건이 기록되었습니다.
</Typography>
</Box>
</MainCard>
);
AnalyticEcommerce.propTypes = {
color: PropTypes.string,
title: PropTypes.string,
count: PropTypes.string,
percentage: PropTypes.number,
isLoss: PropTypes.bool,
extra: PropTypes.oneOfType([PropTypes.node, PropTypes.string])
};
AnalyticEcommerce.defaultProps = {
color: 'primary'
};
export default AnalyticEcommerce;

View File

@ -0,0 +1,103 @@
import PropTypes from 'prop-types';
import { forwardRef } from 'react';
// material-ui
import { useTheme } from '@mui/material/styles';
import { Card, CardContent, CardHeader, Divider, Typography } from '@mui/material';
// project import
import Highlighter from '../third-party/Highlighter';
// header style
const headerSX = {
p: 2.5,
'& .MuiCardHeader-action': { m: '0px auto', alignSelf: 'center' }
};
// ==============================|| CUSTOM - MAIN CARD ||============================== //
const MainCard = forwardRef(
(
{
border = true,
boxShadow,
children,
content = true,
contentSX = {},
darkTitle,
elevation,
secondary,
shadow,
sx = {},
title,
codeHighlight,
...others
},
ref
) => {
const theme = useTheme();
boxShadow = theme.palette.mode === 'dark' ? boxShadow || true : boxShadow;
return (
<Card
elevation={elevation || 0}
ref={ref}
{...others}
sx={{
border: border ? '1px solid' : 'none',
borderRadius: 2,
borderColor: theme.palette.mode === 'dark' ? theme.palette.divider : theme.palette.grey.A800,
boxShadow: boxShadow && (!border || theme.palette.mode === 'dark') ? shadow || theme.customShadows.z1 : 'inherit',
':hover': {
boxShadow: boxShadow ? shadow || theme.customShadows.z1 : 'inherit'
},
'& pre': {
m: 0,
p: '16px !important',
fontFamily: theme.typography.fontFamily,
fontSize: '0.75rem'
},
...sx
}}
>
{/* card header and action */}
{!darkTitle && title && (
<CardHeader sx={headerSX} titleTypographyProps={{ variant: 'subtitle1' }} title={title} action={secondary} />
)}
{darkTitle && title && <CardHeader sx={headerSX} title={<Typography variant="h3">{title}</Typography>} action={secondary} />}
{/* card content */}
{content && <CardContent sx={contentSX}>{children}</CardContent>}
{!content && children}
{/* card footer - clipboard & highlighter */}
{codeHighlight && (
<>
<Divider sx={{ borderStyle: 'dashed' }} />
<Highlighter codeHighlight={codeHighlight} main>
{children}
</Highlighter>
</>
)}
</Card>
);
}
);
MainCard.propTypes = {
border: PropTypes.bool,
boxShadow: PropTypes.bool,
contentSX: PropTypes.object,
darkTitle: PropTypes.bool,
divider: PropTypes.bool,
elevation: PropTypes.number,
secondary: PropTypes.node,
shadow: PropTypes.string,
sx: PropTypes.object,
title: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
codeHighlight: PropTypes.bool,
content: PropTypes.bool,
children: PropTypes.node
};
export default MainCard;

View File

@ -0,0 +1,56 @@
import React, {useCallback, useEffect, useState} from "react";
import Form from "react-bootstrap/Form";
import * as EgovNet from "api/egovFetch";
function CheckBox({name, grpCd, selectedValue}){
const [checkBox, setCheckBox] = useState();
useEffect(() => {
getCodeItemList()
}, []);
useEffect(() => {
if(checkBox&&selectedValue){
const itemCdAry = selectedValue.split(',');
itemCdAry.forEach(function(itemCd){
document.querySelector(`#chkBox_${itemCd}`).checked = true;
})
}
}, [checkBox]);
function getCodeItemList() {
EgovNet.requestFetch(
'/commonCode/code-item?grpCd='+grpCd,
{
method: "GET"
},
(resp) => {
let checkBoxTag = [];
resp.result.codeList.forEach(function (item, index) {
checkBoxTag.push(
<Form.Check inline
label={item.itemNm}
id={`chkBox_${item.itemCd}`}
key={`chkBox_${item.itemCd}_${index}`}
name={name}
value={item.itemCd}
/>
);
});
setCheckBox(checkBoxTag);
},
function (resp) {
console.log("err response : ", resp);
}
);
}
return (
<div id={`${grpCd}_checkBoxDiv`} key={`checkBox_${grpCd}`}>
{checkBox}
</div>
)
}
export default CheckBox;

View File

@ -0,0 +1,47 @@
import React, {useEffect, useState} from "react";
import Form from "react-bootstrap/Form";
import * as EgovNet from "api/egovFetch";
function SelectOption({name, grpCd, selectedValue}){
const [options, setOptions] = useState();
const [value, setValue] = useState(selectedValue)
useEffect(() => {
getCodeItemList()
}, []);
useEffect(() => {
setValue(selectedValue)
}, [selectedValue]);
function getCodeItemList(){
EgovNet.requestFetch(
'/commonCode/code-item?grpCd='+grpCd,
{
method: "GET"
},
(resp) => {
let optionTag = [];
//
resp.result.codeList.forEach(function (item, index) {
optionTag.push(
<option value={item.itemCd} key={`${grpCd}option${index}`}>{item.itemNm}</option>
);
});
setOptions(optionTag);
},
function (resp) {
console.log("err response : ", resp);
}
);
}
return (
<Form.Select name={name} value={value} onChange={(e)=>{setValue(e.target.value)}}>
{options}
</Form.Select>
)
}
export default SelectOption;

View File

@ -0,0 +1,68 @@
import React from "react";
import ReactQuill from 'react-quill';
import 'react-quill/dist/quill.snow.css';
// react-quill에 기반을 둔 텍스트 에디터 컴포넌트
const RichTextEditor = ({item, setText}) => {
const style = { height: "400px", paddingBottom: "69px"};
const onChangeEvent = (e) => {
setText(e);
}
// Quill Tool bar
const modules = {
toolbar: {
container: [
[{ header: '1' }, { header: '2' }, { font: [] }],
[{ size: [] }],
[{ color: [] }],
["bold", "italic", "underline", "strike", "blockquote"],
[
{ list: "ordered" },
{ list: "bullet" },
{ indent: '-1' },
{ indent: '+1' },
{ align: [] }
],
["link", "image", "video"],
["clean"]
],
// handlers: { image: this.imageHandler }
},
clipboard: { matchVisual: false }
};
const formats = [
"header",
"bold",
"italic",
"underline",
"strike",
"blockquote",
"size",
"color",
"list",
"bullet",
"indent",
"link",
"image",
"video",
"align"
];
return (
<ReactQuill
style={style}
theme="snow"
onChange={onChangeEvent}
modules={modules}
formats={formats}
value={item}
>
</ReactQuill>
)
}
export default RichTextEditor;

View File

@ -0,0 +1,256 @@
import React, { useState, useEffect } from 'react';
import Button from '@mui/material/Button';
import AttachFileIcon from '@mui/icons-material/AttachFile';
import IconButton from '@mui/material/IconButton';
import DeleteIcon from '@mui/icons-material/Delete';
import styled from "styled-components";
import FileDragDrop from "./FileDragDrop";
import * as File from "utils/file";
const StyledDiv = styled.div`
label {
//background: red;
width: 100%;
height: auto;
border: 2px dashed #888;
border-radius: 6px;
& > div {
height: 100%;
line-height: auto;
padding: 20px;
color: #999999;
}
}
`;
function AttachFile(props) {
const multiple = props.multiple ? props.multiple : false;
// dialog
let oldTagName;
useEffect(function () {
const labelEle = document.querySelectorAll("label[for='preDataFile']")[0];
// event
const onClickLabel = (e) => {
const tagName = String(e.target.tagName).toLowerCase();
if( tagName !== 'input' ) {
// eslint-disable-next-line react-hooks/exhaustive-deps
oldTagName = tagName;
e.preventDefault();
return false;
} else {
if(
oldTagName === 'path' ||
oldTagName === 'svg' ||
oldTagName === 'button'
) {
oldTagName = undefined;
e.preventDefault();
return false;
}
}
}
// remove Event
labelEle.removeEventListener("click", onClickLabel);
labelEle.addEventListener("click", onClickLabel);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
// server upload file props.serverFiles file
useEffect(function () {
if( !props.serverFiles ) {
return;
}
let items = [];
let nNewIndex = 0;
for( let idx in props.serverFiles ) {
props.serverFiles[idx].index=nNewIndex++;
items.push( props.serverFiles[idx] );
}
setFileItem(items);
props.setFiles(items);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [props.serverFiles]);
const [disabled, setDisabled] = useState( props.disabled ? props.disabled : false );
useEffect(function () {
if( !props.disabled ) {
return;
}
setDisabled(props.disabled);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [props.disabled]);
const [maxSize, setMaxSize] = useState(props.maxSize ? props.maxSize : 100);
useEffect(function () {
if( !props.maxSize ) {
return;
}
setMaxSize(props.maxSize);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [props.maxSize]);
const [fileItem, setFileItem] = useState();
const onDrop = (e) => {
//alert('ddd');
};
const handleChange = (files) => {
if( !files ) {
return;
}
let items = [];
let nNewIndex = 0;
// .
for( let idx in fileItem ) {
fileItem[idx].index=nNewIndex++;
items.push( fileItem[idx] );
}
Object.keys(files).forEach(function(key, index) {
if( typeof files[key].name === 'undefined' ) {
return;
}
files[key].index=nNewIndex++;
items.push( files[key] );
});
setFileItem(items);
props.setFiles(items);
};
const onClickDeleteItem = (e, targetEle) => {
const dataIndex = Number(targetEle.getAttribute('data-index'));
let items = [];
let nNewIndex = 0;
Object.keys(fileItem).forEach(function(key, index) {
if( dataIndex !== index ) {
fileItem[key].index=nNewIndex++;
items.push( fileItem[key] );
}
});
setFileItem(items);
props.setFiles(items);
};
const onClickFile = (e, item) => {
e = e || window.event;
const target = e.target || e.srcElement;
const dataSeq = target.getAttribute('data-seq');
if( dataSeq ) {
// server download
const fileSeq = Number(dataSeq);
File.download(fileSeq);
} else {
// file
const file = item;
let fr = new FileReader();
fr.readAsDataURL(file);
var blob = new Blob([file], { type: "application/pdf" });
var objectURL = window.URL.createObjectURL(blob);
if (navigator.appVersion.toString().indexOf('.NET') > 0) {
window.navigator.msSaveOrOpenBlob(blob, item.name);
} else {
var link = document.createElement('a');
link.href = objectURL;
link.download = item.name;
document.body.appendChild(link);
link.click();
link.remove();
}
}
};
return (
<StyledDiv>
<FileDragDrop
className="file-drag-drop"
multiple={multiple}
name={props.name}
fileTypes={props.fileTypes}
onDrop={onDrop}
handleChange={handleChange}
dropMessageStyle={{backgroundColor: '#cfe2ff'}}
maxSize={maxSize}
disabled={disabled}
>
<div>
{fileItem && fileItem.length > 0
?
fileItem.map((item) => (
<span key={item.index} data-index={item.index}>
<IconButton aria-label="delete" size="small"
sx={{color: '#094c72', padding: '2px 4px'}}
onClick={(e)=> {
e = e || window.event;
const target = e.target || e.srcElement;
const tagName = String(target.tagName).toLowerCase();
// target
let targetEle = target.parentNode.parentNode.parentNode;
if( tagName === 'svg' ) {
targetEle = target.parentNode.parentNode;
} else if( tagName === 'button' ) {
targetEle = target.parentNode;
}
onClickDeleteItem(e, targetEle);
}}
>
<DeleteIcon fontSize="small" />
</IconButton>
<Button
variant="text"
sx={{textTransform: 'none', color: '#032b77', fontSize: '14px', padding: '2px 5px 4px 5px'}}
onClick={(e)=> {
onClickFile(e, item);
}}
key={item.index}
data-seq={item.seq}
>{item.name}</Button>
<br />
</span>
))
:
<span>여기를 누르시거나 파일을 마우스로 끌어놓으세요.</span>
}
</div>
</FileDragDrop>
</StyledDiv>
);
}
export default AttachFile;

View File

@ -0,0 +1,33 @@
import React, { useState } from "react";
import { FileUploader } from "react-drag-drop-files";
/**
* https://www.npmjs.com/package/react-drag-drop-files .
* @param {fileTypes} const fileTypes = ["JPG", "PNG", "GIF"];
* @returns
*/
function FileDragDrop({fileTypes, children, multiple, label, onDrop, handleChange, file, setFile, dropMessageStyle, name, maxSize, disabled}) {
return (
<FileUploader
hoverTitle=" "
handleChange={handleChange}
name={name}
types={fileTypes ? fileTypes : "*"}
multiple={multiple ? multiple : false}
label={label}
onDrop={onDrop}
dropMessageStyle={dropMessageStyle}
maxSize={maxSize}
disabled={disabled}
onSelect={(e)=> {
e = e || window.event;
}}
>
{children && children}
</FileUploader>
);
}
export default FileDragDrop;

View File

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

View File

@ -1,16 +1,61 @@
import React from 'react';
import { useLocation } from 'react-router-dom';
import { NavLink } from 'react-router-dom';
import URL from 'constants/url';
import {Accordion} from "react-bootstrap";
function EgovLeftNavAdmin() {
function EgovLeftNavAdmin(props) {
const location = useLocation();
const getMiddleFolder = (url) => { //
const parts = url.split('/').filter(Boolean); // '/'
if (parts.length >= 2) {
return parts[1]; //
}
return null;
};
const activeFolder = getMiddleFolder(location.pathname);
let activeKey;
if (activeFolder === "config") {
activeKey = 0;
} else if (activeFolder === "users") {
activeKey = 1;
} else if (activeFolder === "boards") {
activeKey = 2;
} else if (activeFolder === "standards") {
activeKey = 3;
} else if (activeFolder === "contents") {
activeKey = 4;
} else if (activeFolder === "committee") {
activeKey = 5;
} else if (activeFolder === "logs") {
activeKey = 6;
}
// else {
// activeKey = "7";
// }
return (
<div className="nav">
<div className="inner">
<h2 className={"nav_title"}>사이트관리</h2>
<Accordion>
<Accordion.Item eventKey={"0"}>
<h2 className={"nav_title"}>사이트관리
<NavLink to={URL.ADMIN_SCHEDULE} className={({ isActive }) => (isActive ? "cur" : "")}><h6 className={"nav_subtitle"}>Dashboard</h6></NavLink></h2>
<Accordion defaultActiveKey={activeKey}>
{/*<Accordion.Item eventKey={"7"}>*/}
{/* <Accordion.Header>사이트 관리</Accordion.Header>*/}
{/* <Accordion.Body>*/}
{/* <ul className="menu4">*/}
{/* <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>*!/*/}
{/* </ul>*/}
{/* </Accordion.Body>*/}
{/*</Accordion.Item>*/}
<Accordion.Item eventKey={0}>
<Accordion.Header>환경설정</Accordion.Header>
<Accordion.Body>
<ul className="menu4">
@ -24,51 +69,51 @@ function EgovLeftNavAdmin() {
</Accordion.Body>
</Accordion.Item>
<Accordion.Item eventKey={"1"}>
<Accordion.Header>사용자현황</Accordion.Header>
<Accordion.Item eventKey={1}>
<Accordion.Header>사용자 관리</Accordion.Header>
<Accordion.Body>
<ul className="menu4">
<li><NavLink to={URL.ADMIN__USERS__LIST} className={({ isActive }) => (isActive ? "cur" : "")}>사용자 현황</NavLink></li>
<li><NavLink to={URL.ADMIN__USERS__LIST} className={({ isActive }) => (isActive ? "cur" : "")}>사용자 목록</NavLink></li>
</ul>
</Accordion.Body>
</Accordion.Item>
<Accordion.Item eventKey={"2"}>
<Accordion.Item eventKey={2}>
<Accordion.Header>게시판현황</Accordion.Header>
<Accordion.Body>
<ul className="menu4">
<li><NavLink to={URL.ADMIN__BOARDS__LIST} className={({ isActive }) => (isActive ? "cur" : "")}>게시판 관리</NavLink></li>
<li><NavLink to={URL.ADMIN__BOARDS__POSTS} className={({ isActive }) => (isActive ? "cur" : "")}>게시물 관리</NavLink></li>
<li><NavLink to={URL.ADMIN__BOARDS__KEYWORDS} className={({ isActive }) => (isActive ? "cur" : "")}>키워드 관리</NavLink></li>
{/*<li><NavLink to={URL.ADMIN__BOARDS__KEYWORDS} className={({ isActive }) => (isActive ? "cur" : "")}>키워드 관리</NavLink></li>*/}
</ul>
</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__REFERENCE_CODES} className={({ isActive }) => (isActive ? "cur" : "")}>참조코드 관리</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">
<li><NavLink to={URL.ADMIN__CONTENTS__SURVEY} className={({ isActive }) => (isActive ? "cur" : "")}>설문 관리</NavLink></li>
<li><NavLink to={URL.ADMIN__CONTENTS__POP_UP} className={({ isActive }) => (isActive ? "cur" : "")}>팝업 관리</NavLink></li>
<li><NavLink to={URL.ADMIN__CONTENTS__STANDARDS_RESEARCH} className={({ isActive }) => (isActive ? "cur" : "")}>건설기준연구 관리</NavLink></li>
<li><NavLink to={URL.ADMIN__CONTENTS__TEXT_MESSAGES} className={({ isActive }) => (isActive ? "cur" : "")}>문자 발송</NavLink></li>
{/*<li><NavLink to={URL.ADMIN__CONTENTS__TEXT_MESSAGES} className={({ isActive }) => (isActive ? "cur" : "")}>문자 발송</NavLink></li>*/}
</ul>
</Accordion.Body>
</Accordion.Item>
<Accordion.Item eventKey={"5"}>
<Accordion.Item eventKey={5}>
<Accordion.Header>위원회관리</Accordion.Header>
<Accordion.Body>
<ul className="menu4">
@ -78,30 +123,17 @@ function EgovLeftNavAdmin() {
</Accordion.Body>
</Accordion.Item>
<Accordion.Item eventKey={"6"}>
<Accordion.Item eventKey={6}>
<Accordion.Header>로그현황</Accordion.Header>
<Accordion.Body>
<ul className="menu4">
<li><NavLink to={URL.ADMIN__LOGS__MENU_ACCESS_INFO} className={({ isActive }) => (isActive ? "cur" : "")}>메뉴별 접속 현황</NavLink></li>
<li><NavLink to={URL.ADMIN__LOGS__USER_CONNECTIONS} className={({ isActive }) => (isActive ? "cur" : "")}>사용자 접속 현황</NavLink></li>
<li><NavLink to={URL.ADMIN__LOGS__PRIVACY_LOGS} className={({ isActive }) => (isActive ? "cur" : "")}>개인정보 로그</NavLink></li>
<li><NavLink to={URL.ADMIN__LOGS__PRIVACY_LOGS} className={({ isActive }) => (isActive ? "cur" : "")}>개인정보 로그 현황</NavLink></li>
<li><NavLink to={URL.ADMIN__LOGS__FILE_DOWNLOAD_STATUS} className={({ isActive }) => (isActive ? "cur" : "")}>파일 다운 현황</NavLink></li>
</ul>
</Accordion.Body>
</Accordion.Item>
<Accordion.Item eventKey={"7"}>
<Accordion.Header>전자정부 기본 메뉴</Accordion.Header>
<Accordion.Body>
<ul className="menu4">
<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_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>
</ul>
</Accordion.Body>
</Accordion.Item>
</Accordion>
</div>

View File

@ -3,24 +3,22 @@ import React from 'react';
import { NavLink } from 'react-router-dom';
import URL from 'constants/url';
function EgovLeftNavInform() {
console.groupCollapsed("EgovLeftNavInform");
console.log("[Start] EgovLeftNavInform ------------------------------");
console.log("------------------------------EgovLeftNavInform [End]");
console.groupEnd("EgovLeftNavInform");
return (
<div className="nav">
<div className="nav1">
<div className="inner">
<h2>알림마당</h2>
<ul className="menu4">
<li><NavLink to={URL.INFORM_DAILY} className={({ isActive }) => (isActive ? "cur" : "")}>오늘의행사</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>
<h2 className={"nav_title"}>사이트 안내</h2>
<ul className="menu10">
<li><NavLink to={URL.ABOUT_SITEMAP} className={({ isActive }) => (isActive ? "cur" : "")}>사이트맵</NavLink></li>
<li><NavLink to={URL.PRIVATE} className={({ isActive }) => (isActive ? "cur" : "")}>개인정보처리방침</NavLink></li>
<li><NavLink to={URL.EMAIL} className={({ isActive }) => (isActive ? "cur" : "")}>이메일무단수집거부</NavLink></li>
</ul>
</div>
</div>
);
}
export default React.memo(EgovLeftNavInform);
// export default React.memo(EgovLeftNavInform);
export default EgovLeftNavInform;

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