Compare commits

..

11 Commits

23 changed files with 375 additions and 207 deletions

View File

@ -37,7 +37,7 @@ function SchedulesDetail(props) {
const deleteBoardURL = `/admin/committee/progress-status/${drftSeq}`; const deleteBoardURL = `/admin/committee/progress-status/${drftSeq}`;
const requestOptions = { const requestOptions = {
method: "DELETE", method: "POST",
headers: { headers: {
'Content-type': 'application/json', 'Content-type': 'application/json',
} }

View File

@ -30,6 +30,9 @@ const useStyles = makeStyles(() => ({
})); }));
const StyledDiv = styled.div` const StyledDiv = styled.div`
margin-bottom: 100px;
.f_select.w_250 { .f_select.w_250 {
@media only screen and (max-width: 768px) { @media only screen and (max-width: 768px) {
width: 100%; width: 100%;
@ -48,6 +51,13 @@ const StyledDiv = styled.div`
margin: 0px; margin: 0px;
} }
} }
.right_col {
position: absolute;
right: 0px;
top: 0px;
text-align: right;
}
`; `;

View File

@ -9,174 +9,11 @@ import Paper from '@mui/material/Paper';
import ListSubheader from '@mui/material/ListSubheader'; import ListSubheader from '@mui/material/ListSubheader';
import * as EgovNet from 'api/egovFetch';
import ReferenceCodePopupDialogCotentsHeader from './ReferenceCodePopupDialogCotentsHeader'; import ReferenceCodePopupDialogCotentsHeader from './ReferenceCodePopupDialogCotentsHeader';
import ReferenceCodePopupDialogCotentsListItem from './ReferenceCodePopupDialogCotentsListItem'; import ReferenceCodePopupDialogCotentsListItem from './ReferenceCodePopupDialogCotentsListItem';
const data = [
{
codeTitle: "KDS 10 00 00",
codeName: '설계기준',
depth: 1,
children: [
{
codeTitle: "KDS 10 10 00",
codeName: '공통편',
depth: 2,
children: [
{
codeTitle: "KDS 10 10 00",
codeName: '공통편',
depth: 3,
children: [
{
codeTitle: "KDS 10 00 00",
codeName: '공통 설계기준',
depth: 4,
children: [
]
},
{
codeTitle: "KDS 10 20 00",
codeName: '지반 설계 기준',
depth: 4,
children: [
]
},
{
codeTitle: "KDS 12 00 00",
codeName: '건설측량 설계기준',
depth: 4,
children: [
]
},
{
codeTitle: "KDS 14 00 00",
codeName: '구조 설계기준',
depth: 4,
children: [
]
},
{
codeTitle: "KDS 17 00 00",
codeName: '내진 설계기준',
depth: 4,
children: [
]
},
]
},
{
codeTitle: "KDS 10 20 00",
codeName: '시설물편',
depth: 3,
children: [
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
{
codeTitle: "TEST 17 00 00",
codeName: 'test',
depth: 4,
children: [
]
},
]
},
]
},
{
codeTitle: "KDS 10 20 00",
codeName: '시설물편',
depth: 2,
children: [
]
},
]
},
{ codeTitle: "KCS 20 00 00", codeName: '표준시방서', depth: 1, },
{ codeTitle: "SMCS 40 00 00", codeName: '서울시 전문시방서', depth: 1, },
{ codeTitle: "EXCS 50 00 00", codeName: '고속도로공사 전문시방서', depth: 1, },
{ codeTitle: "KRCCS 60 00 00", codeName: '농업생산기반시설 전문시방서', depth: 1, },
];
const FireNav = styled(List)({ const FireNav = styled(List)({
'& .MuiListItemButton-root': { '& .MuiListItemButton-root': {
paddingLeft: 0, paddingLeft: 0,
@ -194,12 +31,37 @@ const FireNav = styled(List)({
export default function ReferenceCodePopupDialogCotents() { export default function ReferenceCodePopupDialogCotents() {
const [selectedValue, setSelectedValue] = React.useState('a'); const [StandardCodeList, setSelectedValue] = React.useState(null);
const [standardCodeList, setStandardCodeList] = React.useState(null);
const handleChange = (event) => { const handleChange = (event) => {
setSelectedValue(event.target.value); setSelectedValue(event.target.value);
}; };
React.useEffect(function () {
getStandardCodeList();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const requestOptions = {
method: "GET",
headers: {
'Content-type': 'application/json'
}
}
const getStandardCodeList = () => {
EgovNet.requestFetch(`/admin/committee/progress-status/standard-code-api/list`,
requestOptions,
function (resp) {
console.log('%o', resp);
setStandardCodeList(resp.result.items);
}
);
}
return ( return (
@ -224,22 +86,21 @@ export default function ReferenceCodePopupDialogCotents() {
<FireNav <FireNav
sx={{ my: 0, }} sx={{ my: 0, }}
component="nav" disablePadding> component="nav" disablePadding>
<ListItemButton component="a" href="#customized-list">
<ListItemText <ListItemText
sx={{ my: 0 }} sx={{ my: 0 }}
primary="문서번호 또는 코드명을 선택 하시면 하위 문서를 검색 하실 수 있습니다" primary="문서번호 또는 코드명을 선택 하시면 하위 문서를 검색 하실 수 있습니다"
primaryTypographyProps={{ primaryTypographyProps={{
backgroundColor: '#ffffff', backgroundColor: '#fafafa',
color: '#333333', color: '#333333',
border: '1px solid #333333', border: '1px solid #eaeaea',
fontSize: 15, fontSize: 15,
fontWeight: 'medium', fontWeight: 'bold',
letterSpacing: 0, letterSpacing: 0,
padding: '10px', padding: '10px',
borderRadius: '6px', borderRadius: '6px',
marginBottom: '20px',
}} }}
/> />
</ListItemButton>
<List <List
sx={{ width: '100%' }} sx={{ width: '100%' }}
@ -261,7 +122,7 @@ export default function ReferenceCodePopupDialogCotents() {
} }
> >
<ReferenceCodePopupDialogCotentsListItem <ReferenceCodePopupDialogCotentsListItem
data={data} data={standardCodeList}
/> />
</List> </List>

View File

@ -19,7 +19,7 @@ export default function ReferenceCodePopupDialogCotentsHeader() {
fontSize: ' 16px', fontSize: ' 16px',
display: 'grid', display: 'grid',
gridAutoFlow: 'row', gridAutoFlow: 'row',
gridTemplateColumns: 'auto 160px 90px', gridTemplateColumns: 'auto 175px 60px',
gap: 1, gap: 1,
}} }}

View File

@ -59,10 +59,10 @@ const ItemComponent = (props) => {
}} }}
> >
<Item <Item
sx={{paddingLeft: `${Number(Number(item.depth)-1) * 20}px`,}} sx={{paddingLeft: `${Number(Number(item.docLevel)-1) * 20}px`,}}
> >
{ {
item.children && item.children.length > 0 item.children && 0 < item.children.length
? ?
<span> <span>
{ {
@ -76,11 +76,17 @@ const ItemComponent = (props) => {
: :
<span> <InsertDriveFileOutlinedIcon sx={{ color: '#777777', height: '30px;'}} /> </span> <span> <InsertDriveFileOutlinedIcon sx={{ color: '#777777', height: '30px;'}} /> </span>
} }
&nbsp;{item.codeTitle} &nbsp;{item.groupTitle}
</Item> </Item>
<Item>{item.codeName}</Item> <Item>{item.groupNm}</Item>
<Item sx={{textAlign: 'center'}}> <Item sx={{textAlign: 'center'}}>
<button type="button" class="btn btn_blue_h31 px-1">선택</button> {
item.children && 0 < item.children.length
?
<span>-</span>
:
<button type="button" class="btn btn_blue_h31 px-1">선택</button>
}
</Item> </Item>
</Box> </Box>
</ListItemButton> </ListItemButton>
@ -88,6 +94,7 @@ const ItemComponent = (props) => {
{ {
item.children && item.children &&
item.children.map(function(item, index) { item.children.map(function(item, index) {
console.log('thkim 2024-03-21 11:29 %o', item);
return ( return (
<ItemComponent item={item} index={index} openSelf={open} /> <ItemComponent item={item} index={index} openSelf={open} />
); );

View File

@ -1,12 +1,24 @@
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import { Link, useLocation, useNavigate } from 'react-router-dom'; import { Link, useLocation, useNavigate } from 'react-router-dom';
import styled from "styled-components";
import * as EgovNet from 'api/egovFetch'; import * as EgovNet from 'api/egovFetch';
import URL from 'constants/url'; import URL from 'constants/url';
import CODE from 'constants/code'; import CODE from 'constants/code';
import { default as EgovLeftNav } from 'components/leftmenu/EgovLeftNavAdmin'; import { default as EgovLeftNav } from 'components/leftmenu/EgovLeftNavAdmin';
const StyledDiv = styled.div`
.right_col {
position: absolute;
right: 0px;
top: 0px;
text-align: right;
}
`;
function SchedulesDetail(props) { function SchedulesDetail(props) {
console.group("EgovAdminScheduleDetail"); console.group("EgovAdminScheduleDetail");
console.log("[Start] EgovAdminScheduleDetail ------------------------------"); console.log("[Start] EgovAdminScheduleDetail ------------------------------");
@ -60,7 +72,7 @@ function SchedulesDetail(props) {
const deleteBoardURL = `/schedule/${schdulId}`; const deleteBoardURL = `/schedule/${schdulId}`;
const requestOptions = { const requestOptions = {
method: "DELETE", method: "POST",
headers: { headers: {
'Content-type': 'application/json', 'Content-type': 'application/json',
} }
@ -90,7 +102,7 @@ function SchedulesDetail(props) {
console.log("------------------------------EgovAdminScheduleDetail [End]"); console.log("------------------------------EgovAdminScheduleDetail [End]");
console.groupEnd("EgovAdminScheduleDetail"); console.groupEnd("EgovAdminScheduleDetail");
return ( return (
<div className="container"> <StyledDiv className="container">
<div className="c_wrap"> <div className="c_wrap">
{/* <!-- Location --> */} {/* <!-- Location --> */}
<div className="location"> <div className="location">
@ -167,7 +179,7 @@ function SchedulesDetail(props) {
</div> </div>
</div> </div>
</div> </div>
</div> </StyledDiv>
); );
} }

View File

@ -31,6 +31,7 @@ const useStyles = makeStyles(() => ({
})); }));
const StyledDiv = styled.div` const StyledDiv = styled.div`
margin-bottom: 70px;
.org-under-id { .org-under-id {
margin-left: 20px; margin-left: 20px;
@media only screen and (max-width: 768px) { @media only screen and (max-width: 768px) {
@ -51,6 +52,12 @@ const StyledDiv = styled.div`
width: 100%; width: 100%;
} }
} }
.right_col {
position: absolute;
right: 0px;
top: 0px;
text-align: right;
}
`; `;
function SchedulesEdit(props) { function SchedulesEdit(props) {
@ -252,7 +259,7 @@ function SchedulesEdit(props) {
} }
if (formData.get('schdulBgnde') > formData.get('schdulEndde')) { if (formData.get('schdulBgnde') > formData.get('schdulEndde')) {
alert("종료일시는 시작일시보다 앞 설 수 없습니다."); alert("종료일시는 시작일시보다 앞 설 수 없습니다.");
//return false; return false;
} }
return true; return true;
} }
@ -286,7 +293,7 @@ function SchedulesEdit(props) {
const deleteBoardURL = `/schedule/${schdulId}`; const deleteBoardURL = `/schedule/${schdulId}`;
const requestOptions = { const requestOptions = {
method: "DELETE", method: "POST",
headers: { headers: {
'Content-type': 'application/json', 'Content-type': 'application/json',
} }

View File

@ -155,7 +155,7 @@ function CommitteeCodeMgt(props) {
} }
const requestOptions = { const requestOptions = {
method: "DELETE", method: "POST",
headers: { headers: {
'Content-type': 'application/json', 'Content-type': 'application/json',
} }

View File

@ -218,7 +218,7 @@ function PopupEditor(props) {
const deleteBoardURL = `/contents/api/popup-manage/${popupId}`; const deleteBoardURL = `/contents/api/popup-manage/${popupId}`;
const requestOptions = { const requestOptions = {
method: "DELETE", method: "POST",
headers: { headers: {
'Content-type': 'application/json', 'Content-type': 'application/json',
} }
@ -247,7 +247,7 @@ function PopupEditor(props) {
const deleteFileURL = `/contents/api/popup-manage/file/${fileSeq}`; const deleteFileURL = `/contents/api/popup-manage/file/${fileSeq}`;
const requestOptions = { const requestOptions = {
method: "DELETE", method: "POST",
headers: { headers: {
'Content-type': 'application/json', 'Content-type': 'application/json',
} }

View File

@ -223,7 +223,7 @@ function StandardResearchEditor(props) {
const deleteBoardURL = `/contents/standard-research/${rsId}`; const deleteBoardURL = `/contents/standard-research/${rsId}`;
const requestOptions = { const requestOptions = {
method: "DELETE", method: "POST",
headers: { headers: {
'Content-type': 'application/json', 'Content-type': 'application/json',
} }

View File

@ -3650,6 +3650,11 @@ cjs-module-lexer@^1.0.0:
resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz"
integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==
classnames@^2.2.5:
version "2.5.1"
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b"
integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==
classnames@^2.2.6, classnames@^2.3.2: classnames@^2.2.6, classnames@^2.3.2:
version "2.3.2" version "2.3.2"
resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz"
@ -3904,6 +3909,11 @@ cosmiconfig@^7.0.0:
path-type "^4.0.0" path-type "^4.0.0"
yaml "^1.10.0" yaml "^1.10.0"
countup.js@^2.8.0:
version "2.8.0"
resolved "https://registry.yarnpkg.com/countup.js/-/countup.js-2.8.0.tgz#64951f2df3ede28839413d654d8fef28251c32a8"
integrity sha512-f7xEhX0awl4NOElHulrl4XRfKoNH3rB+qfNSZZyjSZhaAoUk6elvhH+MNxMmlmuUJ2/QNTWPSA7U4mNtIAKljQ==
cross-spawn@^7.0.2, cross-spawn@^7.0.3: cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3" version "7.0.3"
resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
@ -4620,6 +4630,11 @@ enhanced-resolve@^5.10.0:
graceful-fs "^4.2.4" graceful-fs "^4.2.4"
tapable "^2.2.0" tapable "^2.2.0"
enquire.js@^2.1.6:
version "2.1.6"
resolved "https://registry.yarnpkg.com/enquire.js/-/enquire.js-2.1.6.tgz#3e8780c9b8b835084c3f60e166dbc3c2a3c89814"
integrity sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==
entities@^2.0.0: entities@^2.0.0:
version "2.2.0" version "2.2.0"
resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz"
@ -6875,6 +6890,13 @@ json-stable-stringify-without-jsonify@^1.0.1:
resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"
integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
json2mq@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a"
integrity sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==
dependencies:
string-convert "^0.2.0"
json5@^1.0.2: json5@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz"
@ -8563,6 +8585,13 @@ react-copy-to-clipboard@^5.1.0:
copy-to-clipboard "^3.3.1" copy-to-clipboard "^3.3.1"
prop-types "^15.8.1" prop-types "^15.8.1"
react-countup@^6.5.3:
version "6.5.3"
resolved "https://registry.yarnpkg.com/react-countup/-/react-countup-6.5.3.tgz#e892aa3eab2d6ba9c3cdba30bf4ed6764826d848"
integrity sha512-udnqVQitxC7QWADSPDOxVWULkLvKUWrDapn5i53HE4DPRVgs+Y5rr4bo25qEl8jSh+0l2cToJgGMx+clxPM3+w==
dependencies:
countup.js "^2.8.0"
react-csv@^2.2.2: react-csv@^2.2.2:
version "2.2.2" version "2.2.2"
resolved "https://registry.npmjs.org/react-csv/-/react-csv-2.2.2.tgz" resolved "https://registry.npmjs.org/react-csv/-/react-csv-2.2.2.tgz"
@ -8781,6 +8810,17 @@ react-scripts@5.0.1:
optionalDependencies: optionalDependencies:
fsevents "^2.3.2" fsevents "^2.3.2"
react-slick@^0.30.2:
version "0.30.2"
resolved "https://registry.yarnpkg.com/react-slick/-/react-slick-0.30.2.tgz#b28e992f9c519bb516a0af8d37e82cb59fee08ce"
integrity sha512-XvQJi7mRHuiU3b9irsqS9SGIgftIfdV5/tNcURTb5LdIokRA5kIIx3l4rlq2XYHfxcSntXapoRg/GxaVOM1yfg==
dependencies:
classnames "^2.2.5"
enquire.js "^2.1.6"
json2mq "^0.2.0"
lodash.debounce "^4.0.8"
resize-observer-polyfill "^1.5.0"
react-smooth@^2.0.5: react-smooth@^2.0.5:
version "2.0.5" version "2.0.5"
resolved "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.5.tgz" resolved "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.5.tgz"
@ -9006,6 +9046,11 @@ requires-port@^1.0.0:
resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz"
integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
resize-observer-polyfill@^1.5.0:
version "1.5.1"
resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
resolve-cwd@^3.0.0: resolve-cwd@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz"
@ -9351,6 +9396,11 @@ slash@^4.0.0:
resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz"
integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
slick-carousel@^1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/slick-carousel/-/slick-carousel-1.8.1.tgz#a4bfb29014887bb66ce528b90bd0cda262cc8f8d"
integrity sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==
sockjs@^0.3.24: sockjs@^0.3.24:
version "0.3.24" version "0.3.24"
resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz"
@ -9481,6 +9531,11 @@ stop-iteration-iterator@^1.0.0:
dependencies: dependencies:
internal-slot "^1.0.4" internal-slot "^1.0.4"
string-convert@^0.2.0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97"
integrity sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==
string-length@^4.0.1: string-length@^4.0.1:
version "4.0.2" version "4.0.2"
resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz"

View File

@ -112,4 +112,42 @@ public class AdminCommitteeController extends BaseController {
} }
@Operation(
summary = "'진행현황 관리' 페이지에서 등록 또는 수정 시 '기준코드' 목록 불러오는 API",
description = "관리자 단에서 '위원회관리' > '진행현황 관리' 페이지에서 하단 '등록' 버튼 누른 후 '기준코드'에서 보여질 기준코드 목록 불러오는 API",
tags = {"AdminCommitteeController"}
)
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "조회 성공")
})
@GetMapping(value = "/progress-status/standard-code-api/list")
public ResultVO getCommitteeProgressStatusStandardCodeApiList(
HttpServletRequest request,
@AuthenticationPrincipal LoginVO user
)
throws Exception {
ResultVO resultVO = new ResultVO();
try {
resultVO = adminCommitteeProgressStatusService.getCommitteeProgressStatusStandardCodeApiList(resultVO, request, user);
} catch (Exception e) {
resultVO.setResultCode(ResponseCode.FAILED.getCode());
resultVO.setResultMessage(e.getMessage());
}
System.out.println(
"\n--------------------------------------------------------------\n" +
request.getRequestURI() + " OUT:" +
"\n--------------------------------------------------------------\n" +
"resultVO.toString():" + "\n" +
resultVO.toString() + "\n" +
"\n--------------------------------------------------------------\n"
);
return resultVO;
}
} }

View File

@ -146,7 +146,7 @@ public class SchedulesApiController {
@ApiResponse(responseCode = "200", description = "등록 성공"), @ApiResponse(responseCode = "200", description = "등록 성공"),
@ApiResponse(responseCode = "403", description = "인가된 사용자가 아님") @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
}) })
@DeleteMapping(value = "/schedule/{scheduleId}") @PostMapping(value = "/schedule/{scheduleId}")
public ResultVO deleteSchedule public ResultVO deleteSchedule
( (
@AuthenticationPrincipal LoginVO user, @AuthenticationPrincipal LoginVO user,

View File

@ -15,5 +15,7 @@ public interface AdminCommitteeProgressStatusService {
public ResultVO deleteCommitteeProgressStatus(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long drftSeq) throws Exception; public ResultVO deleteCommitteeProgressStatus(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long drftSeq) throws Exception;
public ResultVO getCommitteeProgressStatusDetail(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long drftSeq) throws Exception; public ResultVO getCommitteeProgressStatusDetail(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long drftSeq) throws Exception;
public ResultVO getCommitteeProgressStatusStandardCodeApiList(ResultVO resultVO, HttpServletRequest request, LoginVO user) throws Exception;
} }

View File

@ -17,12 +17,17 @@ import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
@Service("adminCommitteeProgressStatusService") @Service("adminCommitteeProgressStatusService")
@RequiredArgsConstructor @RequiredArgsConstructor
public class AdminCommitteeProgressStatusServiceImpl extends EgovAbstractServiceImpl implements AdminCommitteeProgressStatusService { public class AdminCommitteeProgressStatusServiceImpl extends EgovAbstractServiceImpl implements AdminCommitteeProgressStatusService {
@ -192,12 +197,12 @@ public class AdminCommitteeProgressStatusServiceImpl extends EgovAbstractService
@Override @Override
public ResultVO deleteCommitteeProgressStatus(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long cmtSeq) throws Exception { public ResultVO deleteCommitteeProgressStatus(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long cmtSeq) throws Exception {
System.out.println( System.out.println(
"\n--------------------------------------------------------------\n" + "\n--------------------------------------------------------------\n" +
request.getRequestURI() + " IN:" + request.getRequestURI() + " IN:" +
"\n--------------------------------------------------------------\n" + "\n--------------------------------------------------------------\n" +
"cmtSeq:" + "\n" + "cmtSeq:" + "\n" +
cmtSeq + "\n" + cmtSeq + "\n" +
"\n--------------------------------------------------------------\n" "\n--------------------------------------------------------------\n"
); );
@ -224,14 +229,14 @@ public class AdminCommitteeProgressStatusServiceImpl extends EgovAbstractService
@Override @Override
public ResultVO getCommitteeProgressStatusDetail(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long drftSeq) throws Exception { public ResultVO getCommitteeProgressStatusDetail(ResultVO resultVO, HttpServletRequest request, LoginVO user, Long drftSeq) throws Exception {
System.out.println( System.out.println(
"\n--------------------------------------------------------------\n" + "\n--------------------------------------------------------------\n" +
request.getRequestURI() + " IN:" + request.getRequestURI() + " IN:" +
"\n--------------------------------------------------------------\n" + "\n--------------------------------------------------------------\n" +
"user.getEmail():" + "\n" + "user.getEmail():" + "\n" +
user.getEmail() + "\n" + user.getEmail() + "\n" +
"drftSeq:" + "\n" + "drftSeq:" + "\n" +
drftSeq + "\n" + drftSeq + "\n" +
"\n--------------------------------------------------------------\n" "\n--------------------------------------------------------------\n"
); );
Map<String, Object> item = tnCmtDraftRepository.getCommitteeProgressStatusDetail(drftSeq); Map<String, Object> item = tnCmtDraftRepository.getCommitteeProgressStatusDetail(drftSeq);
@ -245,4 +250,99 @@ public class AdminCommitteeProgressStatusServiceImpl extends EgovAbstractService
return resultVO; return resultVO;
} }
@Override
public ResultVO getCommitteeProgressStatusStandardCodeApiList(ResultVO resultVO, HttpServletRequest request, LoginVO user) throws Exception {
System.out.println("\n--------------------------------------------------------------\n" +
request.getRequestURI() + " IN:" +
"\n--------------------------------------------------------------\n" +
"user.getEmail():" + "\n" +
user.getEmail() + "\n" +
"\n--------------------------------------------------------------\n");
long startTime = System.currentTimeMillis();
List<Map<String, Object>> standardCodeList = tnCmtDraftRepository.getCommitteeProgressStatusStandardCodeApiList();
Map<Integer, List<Map<String, Object>>> nodeMap = new HashMap<>();
// nodeMap 초기화
for (int i = 1; i <= 6; i++) {
nodeMap.put(i, new ArrayList<>());
}
// docLevel 별로 데이터 분류
for (Map<String, Object> standardCode : standardCodeList) {
int nDocLevel = (int) standardCode.get("doc_level");
nodeMap.get(nDocLevel).add(standardCode);
}
JSONArray items = buildJsonTree(nodeMap, 1, null); // 재귀 호출 시작 (루트 노드부터)
Map<String, Object> dto = new HashMap<>();
dto.put("items", items);
resultVO.setResult(dto);
resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
resultVO.setResultMessage(ResponseCode.SUCCESS.getMessage());
long endTime = System.currentTimeMillis();
long elapsedTime = endTime - startTime;
System.out.println("처리 시간: " + elapsedTime + "ms");
return resultVO;
}
private JSONArray buildJsonTree(Map<Integer, List<Map<String, Object>>> nodeMap, int docLevel, Integer upperParentgroupSeq) {
JSONArray items = new JSONArray();
List<Map<String, Object>> currentNodes = nodeMap.get(docLevel);
for (Map<String, Object> node : currentNodes) {
Integer groupSeq = (Integer) node.get("group_seq");
Integer parentGroupSeq = (Integer) node.get("parent_group_seq");
JSONObject item = new JSONObject();
if( upperParentgroupSeq == null || upperParentgroupSeq.equals( parentGroupSeq) ) {
String kcscCd = (String)node.get("kcsc_cd");
String groupFullCd = (String) node.get("group_full_cd");
item.put("docLevel", node.get("doc_level"));
item.put("groupTitle", makeCode(kcscCd, groupFullCd, docLevel));
item.put("groupNm", node.get("group_nm"));
item.put("groupSeq", groupSeq);
if (nodeMap.containsKey(docLevel + 1)) { // 자식 노드 존재 여부 확인
item.put("children", buildJsonTree(nodeMap, docLevel + 1, groupSeq)); // 재귀 호출
} else {
item.put("children", new JSONArray());
}
items.add(item);
}
}
return items;
}
private String makeCode(String kcscCd, String groupFullCd, int docLevel) {
if( docLevel < 3 ) {
int codeLength = groupFullCd.length();
String firstWord = kcscCd.split(" ")[0]; // 공백을 기준으로 문자열을 분리하고 첫 번째 요소를 가져옴
if (codeLength == 2) {
return String.format("%s %s %s", firstWord, groupFullCd, "00 00");
} else {
return String.format("%s %s %s", spaceEveryTwoChars(firstWord), groupFullCd, "00");
}
} else {
return kcscCd;
}
}
public static String spaceEveryTwoChars(String input) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
result.append(input.charAt(i));
if ((i + 1) % 2 == 0 && i != input.length() - 1) { // 짝수 번째 문자이고 마지막 문자가 아닌 경우
result.append(" "); // 띄어쓰기 추가
}
}
return result.toString();
}
} }

View File

@ -464,7 +464,7 @@ public class AdminConfigController extends BaseController {
@ApiResponse(responseCode = "200", description = "등록 성공"), @ApiResponse(responseCode = "200", description = "등록 성공"),
@ApiResponse(responseCode = "403", description = "인가된 사용자가 아님") @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
}) })
@DeleteMapping(value = "/committee-code-mgt/{orgId}") @PostMapping(value = "/committee-code-mgt/{orgId}")
public ResultVO deleteSchedule public ResultVO deleteSchedule
( (
@AuthenticationPrincipal LoginVO user, @AuthenticationPrincipal LoginVO user,

View File

@ -167,7 +167,7 @@ public class PopUpApiController {
@ApiResponse(responseCode = "200", description = "등록 성공"), @ApiResponse(responseCode = "200", description = "등록 성공"),
@ApiResponse(responseCode = "403", description = "인가된 사용자가 아님"), @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님"),
}) })
@DeleteMapping(value = "/contents/api/popup-manage/{popupId}") @PostMapping(value = "/contents/api/popup-manage/{popupId}")
public ResultVO contentsApiPopUpManageDelete public ResultVO contentsApiPopUpManageDelete
( (
@AuthenticationPrincipal LoginVO user, @AuthenticationPrincipal LoginVO user,
@ -282,7 +282,7 @@ public class PopUpApiController {
@ApiResponse(responseCode = "200", description = "등록 성공"), @ApiResponse(responseCode = "200", description = "등록 성공"),
@ApiResponse(responseCode = "403", description = "인가된 사용자가 아님"), @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님"),
}) })
@DeleteMapping(value = "/contents/api/popup-manage/file/{fileSeq}") @PostMapping(value = "/contents/api/popup-manage/file/{fileSeq}")
public ResultVO deleteFileContentsApiPopUpManage public ResultVO deleteFileContentsApiPopUpManage
( (
@AuthenticationPrincipal LoginVO user, @AuthenticationPrincipal LoginVO user,

View File

@ -164,7 +164,7 @@ public class AdminStandardResearchController {
@ApiResponse(responseCode = "200", description = "등록 성공"), @ApiResponse(responseCode = "200", description = "등록 성공"),
@ApiResponse(responseCode = "403", description = "인가된 사용자가 아님"), @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님"),
}) })
@DeleteMapping(value = "/contents/standard-research/{rsId}") @PostMapping(value = "/contents/standard-research/{rsId}")
public ResultVO contentsStandardResearchDelete public ResultVO contentsStandardResearchDelete
( (
@AuthenticationPrincipal LoginVO user, @AuthenticationPrincipal LoginVO user,

View File

@ -282,4 +282,26 @@ public interface TnCmtDraftRepository extends JpaRepository<TnCmtDraft, Long> {
); );
@Query(value =
"select\n" +
" tdg.group_seq,\n" +
" tdg.kcsc_cd,\n" +
" tdg.group_cur_cd,\n" +
" tdg.group_nm,\n" +
" tdg.group_full_cd,\n" +
" tdg.doc_level,\n" +
" tdg.parent_group_seq\n" +
"from\n" +
" tn_document_group tdg\n" +
" left join tc_code_item tci on tdg.item_cd = tci.item_cd\n" +
"where\n" +
" tdg.use_yn = 'Y' and\n" +
" tdg.item_cd <> '00'\n" +
"order by \n" +
" tdg.group_full_cd\n" +
"limit 10000",
nativeQuery = true)
List<Map<String, Object>> getCommitteeProgressStatusStandardCodeApiList( );
} }

View File

@ -5,6 +5,10 @@ Globals.Allow.Origin = http://localhost:3000
spring.devtools.livereload.enabled=true spring.devtools.livereload.enabled=true
#Datasource Configuration #Datasource Configuration
spring.sql.init.encoding=utf-8 spring.sql.init.encoding=utf-8
spring.servlet.multipart.max-file-size=20MB
spring.servlet.multipart.max-request-size=50MB
#maximum-pool-size: CPU core count #maximum-pool-size: CPU core count
spring.datasource.hikari.maximum-pool-size=4 spring.datasource.hikari.maximum-pool-size=4
#postgresql #postgresql

View File

@ -0,0 +1,44 @@
# ??? ? ?? ?? properties ?? ?? ? ?? ??.
# Access-Control-Allow-Origin
Globals.Allow.Origin = https://back.dbnt.co.kr
server.port=50688
spring.devtools.livereload.enabled=false
server.error.path=/errors
logging.level.org.apache.tomcat: info
logging.level.org.apache.catalina: info
spring.servlet.multipart.max-file-size=20MB
spring.servlet.multipart.max-request-size=50MB
#Datasource Configuration
spring.sql.init.encoding=utf-8
#maximum-pool-size: CPU core count
spring.datasource.hikari.maximum-pool-size=4
#postgresql
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/kcsc
spring.datasource.username=dbnt0031
spring.datasource.password=dbnt0928!
#jpa
spring.jpa.show-sql=false
spring.jpa.generate-ddl=false
spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.properties.hibernate.proc.param_null_passing=true
# MyBatis
mybatis.mapper-locations: mybatisMapper/*.xml
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.type-aliases-package=com.dbnt.kcscbackend.**.entity
logging.level.com.atoz_develop.mybatissample.repository=info
# File Config
Globals.posblAtchFileSize=5242880
Globals.fileStorePath=/kcscUploadFiles
Globals.addedOptions=false
kcsc.opensearch.url=http://192.168.0.89:8090

View File

@ -12,6 +12,9 @@ server.error.path=/errors
logging.level.org.apache.tomcat: info logging.level.org.apache.tomcat: info
logging.level.org.apache.catalina: info logging.level.org.apache.catalina: info
spring.servlet.multipart.max-file-size=20MB
spring.servlet.multipart.max-request-size=50MB
#Datasource Configuration #Datasource Configuration
spring.sql.init.encoding=utf-8 spring.sql.init.encoding=utf-8
#maximum-pool-size: CPU core count #maximum-pool-size: CPU core count

View File

@ -11,6 +11,9 @@ server.error.path=/errors
logging.level.org.apache.tomcat: info logging.level.org.apache.tomcat: info
logging.level.org.apache.catalina: info logging.level.org.apache.catalina: info
spring.servlet.multipart.max-file-size=20MB
spring.servlet.multipart.max-request-size=50MB
#Datasource Configuration #Datasource Configuration
spring.sql.init.encoding=utf-8 spring.sql.init.encoding=utf-8
#maximum-pool-size: CPU core count #maximum-pool-size: CPU core count