Merge branch 'master' of http://118.219.150.34:50501/DBNT/kcscDev
commit
f1f0602d4e
|
|
@ -115,13 +115,15 @@ function ListCreateUpdateDelete(props) {
|
|||
</Grid>
|
||||
</Typography>
|
||||
<Demo>
|
||||
<List dense={false} sx={{ px: 0, '&': { height: '253px', overflowY: 'auto'}}}>
|
||||
<List dense={false} sx={{ px: 0, '&': { minHeight: '315px', height: '650px', overflowY: 'auto'}}}>
|
||||
{generate(
|
||||
props.items,
|
||||
<ListItem
|
||||
secondaryAction={
|
||||
<div>
|
||||
<IconButton sx={{ mx: 0 }} edge="start" aria-label="edit" onClick={(e)=> {alert('수정 클릭')}}>
|
||||
<IconButton sx={{ mx: 0 }} edge="start" aria-label="edit" onClick={(e)=> {
|
||||
props.setIsPopupOpen(true);
|
||||
}}>
|
||||
<EditIcon />
|
||||
</IconButton>
|
||||
<IconButton edge="end" aria-label="delete" onClick={(e)=> {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,50 @@
|
|||
/* eslint-disable jsx-a11y/heading-has-content */
|
||||
import React, { useState, useEffect, useCallback } from 'react';
|
||||
import { Link, useLocation } from 'react-router-dom';
|
||||
|
||||
import styled from "styled-components";
|
||||
|
||||
|
||||
import * as EgovNet from 'api/egovFetch';
|
||||
import URL from 'constants/url';
|
||||
import CODE from 'constants/code';
|
||||
|
||||
import { default as EgovLeftNav } from 'components/leftmenu/EgovLeftNavAdmin';
|
||||
|
||||
const StyledDiv = styled.div`
|
||||
.calendar_list table {
|
||||
thead tr th {
|
||||
height: auto;
|
||||
line-height: 35px;
|
||||
text-align: left;
|
||||
}
|
||||
tbody td {
|
||||
padding: 0px 5px;
|
||||
text-align: left;
|
||||
font-size: 12px;
|
||||
.day {
|
||||
display: inline-block;
|
||||
font-size: 14px;
|
||||
padding-bottom: 7px;
|
||||
}
|
||||
.title {
|
||||
&:link {
|
||||
color: #647ea3;
|
||||
}
|
||||
&:visited {
|
||||
color: #647ea3;
|
||||
}
|
||||
&::hover {
|
||||
color: #345ef3;
|
||||
}
|
||||
&::active {
|
||||
color: #345ef3;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
function Schedules(props) {
|
||||
|
||||
|
|
@ -154,7 +192,7 @@ function Schedules(props) {
|
|||
if (scheduleList.length > 0) {//일정 있는 경우
|
||||
return (
|
||||
<td key={keyIdx++}>
|
||||
<Link to={{pathname: URL.ADMIN__COMMITTEE__SCHEDULES__CREATE}} sss="test" state={{ iUseDate: mutsUseYearMonth + sDate + "000000"}} className="day"
|
||||
<Link to={{pathname: URL.ADMIN__COMMITTEE__SCHEDULES__CREATE}} state={{ iUseDate: mutsUseYearMonth + sDate + "000000"}} className="day"
|
||||
key={keyIdx++}>{day}</Link><br/>
|
||||
{
|
||||
scheduleList.map((schedule, scheduleIdx) => {
|
||||
|
|
@ -168,8 +206,9 @@ function Schedules(props) {
|
|||
return (
|
||||
<>
|
||||
<Link to={{pathname: URL.ADMIN__COMMITTEE__SCHEDULES__DETAIL}}
|
||||
state={{schdulId: schedule.schdulId}}
|
||||
key={keyIdx++}>{schedule.schdulNm}
|
||||
className="title"
|
||||
state={{schdulId: schedule.schdulId}}
|
||||
key={keyIdx++}>{schedule.schdulNm}
|
||||
</Link>
|
||||
<br/>
|
||||
</>
|
||||
|
|
@ -241,77 +280,79 @@ function Schedules(props) {
|
|||
<h1 className="tit_1">위원회 일정 관리</h1>
|
||||
</div>
|
||||
|
||||
<h2 className="tit_2"></h2>
|
||||
{/* <!-- 검색조건 --> */}
|
||||
<div className="condition">
|
||||
<ul>
|
||||
{false &&
|
||||
<li>
|
||||
<label className="f_select" htmlFor="sel1">
|
||||
<select name="schdulSe" id="sel1" title="조건"
|
||||
onChange={e => {
|
||||
setSearchCondition({ ...searchCondition, schdulSe: e.target.value });
|
||||
<StyledDiv>
|
||||
<h2 className="tit_2"></h2>
|
||||
{/* <!-- 검색조건 --> */}
|
||||
<div className="condition">
|
||||
<ul>
|
||||
{false &&
|
||||
<li>
|
||||
<label className="f_select" htmlFor="sel1">
|
||||
<select name="schdulSe" id="sel1" title="조건"
|
||||
onChange={e => {
|
||||
setSearchCondition({ ...searchCondition, schdulSe: e.target.value });
|
||||
}}
|
||||
>
|
||||
<option value="">전체</option>
|
||||
<option value="1">회의</option>
|
||||
<option value="2">세미나</option>
|
||||
<option value="3">강의</option>
|
||||
<option value="4">교육</option>
|
||||
<option value="5">기타</option>
|
||||
</select>
|
||||
</label>
|
||||
</li>
|
||||
}
|
||||
|
||||
<li className="half L">
|
||||
<button className="prev"
|
||||
onClick={() => {
|
||||
changeDate(CODE.DATE_YEAR, -1);
|
||||
}}
|
||||
>
|
||||
<option value="">전체</option>
|
||||
<option value="1">회의</option>
|
||||
<option value="2">세미나</option>
|
||||
<option value="3">강의</option>
|
||||
<option value="4">교육</option>
|
||||
<option value="5">기타</option>
|
||||
</select>
|
||||
</label>
|
||||
</li>
|
||||
}
|
||||
|
||||
<li className="half L">
|
||||
<button className="prev"
|
||||
onClick={() => {
|
||||
changeDate(CODE.DATE_YEAR, -1);
|
||||
}}
|
||||
></button>
|
||||
<span>{searchCondition.year}</span>
|
||||
<button className="next"
|
||||
onClick={() => {
|
||||
changeDate(CODE.DATE_YEAR, 1);
|
||||
}}
|
||||
></button>
|
||||
</li>
|
||||
<li className="half R">
|
||||
<button className="prev"
|
||||
onClick={() => {
|
||||
changeDate(CODE.DATE_MONTH, -1);
|
||||
}}
|
||||
></button>
|
||||
<span>{(searchCondition.month + 1)}</span>
|
||||
<button className="next"
|
||||
onClick={() => {
|
||||
changeDate(CODE.DATE_MONTH, 1);
|
||||
}}
|
||||
></button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
{/* <!--// 검색조건 --> */}
|
||||
></button>
|
||||
<span>{searchCondition.year}</span>
|
||||
<button className="next"
|
||||
onClick={() => {
|
||||
changeDate(CODE.DATE_YEAR, 1);
|
||||
}}
|
||||
></button>
|
||||
</li>
|
||||
<li className="half R">
|
||||
<button className="prev"
|
||||
onClick={() => {
|
||||
changeDate(CODE.DATE_MONTH, -1);
|
||||
}}
|
||||
></button>
|
||||
<span>{(searchCondition.month + 1)}</span>
|
||||
<button className="next"
|
||||
onClick={() => {
|
||||
changeDate(CODE.DATE_MONTH, 1);
|
||||
}}
|
||||
></button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
{/* <!--// 검색조건 --> */}
|
||||
|
||||
<div className="calendar_list">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>일</th>
|
||||
<th>월</th>
|
||||
<th>화</th>
|
||||
<th>수</th>
|
||||
<th>목</th>
|
||||
<th>금</th>
|
||||
<th>토</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{true && calendarTag}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div className="calendar_list">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>일</th>
|
||||
<th>월</th>
|
||||
<th>화</th>
|
||||
<th>수</th>
|
||||
<th>목</th>
|
||||
<th>금</th>
|
||||
<th>토</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{true && calendarTag}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</StyledDiv>
|
||||
{/* <!--// 본문 --> */}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -30,6 +30,9 @@ function CommitteeCodeMgt(props) {
|
|||
|
||||
const [confirm, setConfirm] = React.useState();
|
||||
|
||||
const [editCreateMode, setEditCreateMode] = React.useState(); // 생성 or 수정 여부
|
||||
|
||||
|
||||
|
||||
// 위원회 코드 등록 팝업을 보이거나 닫는다.
|
||||
const [isCommitteeCodeRegistrationPopupOpen, setIsCommitteeCodeRegistrationPopupOpen] = React.useState(false);
|
||||
|
|
@ -324,7 +327,7 @@ function CommitteeCodeMgt(props) {
|
|||
/>
|
||||
|
||||
</Box>
|
||||
{ true &&
|
||||
{ false &&
|
||||
<Box
|
||||
sx={{
|
||||
display: 'flex',
|
||||
|
|
|
|||
|
|
@ -13,8 +13,37 @@ import EgovPagingPaginationInfo from 'components/EgovPagingPaginationInfo';
|
|||
import styled from "styled-components";
|
||||
|
||||
const StyledDiv = styled.div`
|
||||
.board_btn_area {
|
||||
margin: 12px 0px;
|
||||
|
||||
.BRD008 {
|
||||
.head > span:nth-child(3) {
|
||||
width: 180px;
|
||||
}
|
||||
.result .list_item > div:nth-child(3) {
|
||||
width: 180px;
|
||||
}
|
||||
}
|
||||
|
||||
.board-bot {
|
||||
margin-top: 20px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
align-items: stretch;
|
||||
justify-content: center;
|
||||
|
||||
& > *:nth-child(1) {
|
||||
width: 16%;
|
||||
justify-content: left;
|
||||
}
|
||||
& > *:nth-child(2) {
|
||||
width: 68%;
|
||||
justify-content: center;
|
||||
}
|
||||
& > *:nth-child(3) {
|
||||
width: 16%;
|
||||
justify-content: right;
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
|
|
@ -112,14 +141,6 @@ function PopUp(props) {
|
|||
<div className="top_tit">
|
||||
<h1 className="tit_1">팝업 관리</h1>
|
||||
</div>
|
||||
|
||||
{/* <!-- 버튼영역 --> */}
|
||||
<div className="board_btn_area">
|
||||
<div className="right_col btn1">
|
||||
<Link to={URL.ADMIN__CONTENTS__POP_UP__CREATE} className="btn btn_blue_h46 w_100">팝업 추가</Link>
|
||||
</div>
|
||||
</div>
|
||||
{/* <!--// 버튼영역 --> */}
|
||||
|
||||
{/* <!-- 게시판목록 --> */}
|
||||
<div className="board_list BRD008">
|
||||
|
|
@ -136,7 +157,7 @@ function PopUp(props) {
|
|||
}
|
||||
{listPopup.map((it)=>(
|
||||
<div className='list_item' key={it.seq}>
|
||||
<div>{it.seq}</div>
|
||||
<div>{it.number}</div>
|
||||
<div className="al"><Link to={URL.ADMIN__CONTENTS__POP_UP__MODIFY} state={{popupId: it.seq} } key={it.seq}>{it.popupTitle}</Link></div>
|
||||
<div>{it.startDate} ~ {it.endDate}</div>
|
||||
<div>{it.useYn === 'Y' ? <Switch {...label} key={it.seq} onChange={(e) => onChangeActivationSwitch(e, it.seq)} defaultChecked /> : <Switch key={it.seq} onChange={(e) => onChangeActivationSwitch(e, it.seq)} {...label} />}</div>
|
||||
|
|
@ -146,13 +167,24 @@ function PopUp(props) {
|
|||
</div>
|
||||
{/* <!--// 게시판목록 --> */}
|
||||
|
||||
<div className="board_bot">
|
||||
{/* <!-- Paging --> */}
|
||||
|
||||
|
||||
|
||||
|
||||
{/* <!-- Paging --> */}
|
||||
<div className="board-bot">
|
||||
<div></div>
|
||||
<EgovPagingPaginationInfo pagination={paginationInfo} setPaginationInfo={setPaginationInfo} moveToPage={passedPage => {
|
||||
getList({ ...searchCondition, pageIndex: passedPage })
|
||||
}} />
|
||||
{/* <!--/ Paging --> */}
|
||||
<div className="right_col btn1">
|
||||
<Link to={URL.ADMIN__CONTENTS__POP_UP__CREATE} className="btn btn_blue_h46 w_100">등록</Link>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{/* <!--/ Paging --> */}
|
||||
|
||||
|
||||
</StyledDiv>
|
||||
{/* <!--// 본문 --> */}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -13,8 +13,36 @@ import EgovPagingPaginationInfo from 'components/EgovPagingPaginationInfo';
|
|||
import styled from "styled-components";
|
||||
|
||||
const StyledDiv = styled.div`
|
||||
.board_btn_area {
|
||||
margin: 12px 0px;
|
||||
.BRD008 {
|
||||
.head > span:nth-child(3) {
|
||||
width: 200px;
|
||||
}
|
||||
.result .list_item > div:nth-child(3) {
|
||||
width: 200px;
|
||||
}
|
||||
}
|
||||
|
||||
.board-bot {
|
||||
margin-top: 20px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
align-items: stretch;
|
||||
justify-content: center;
|
||||
|
||||
& > *:nth-child(1) {
|
||||
width: 16%;
|
||||
justify-content: left;
|
||||
}
|
||||
& > *:nth-child(2) {
|
||||
width: 68%;
|
||||
justify-content: center;
|
||||
}
|
||||
& > *:nth-child(3) {
|
||||
width: 16%;
|
||||
justify-content: right;
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
|
|
@ -110,14 +138,10 @@ function StandardResearch(props) {
|
|||
<StyledDiv>
|
||||
<div className="top_tit">
|
||||
<h1 className="tit_1">건설기준연구 관리</h1>
|
||||
</div>
|
||||
{/* <!-- 버튼영역 --> */}
|
||||
<div className="board_btn_area">
|
||||
<div className="right_col btn1">
|
||||
<Link to={URL.ADMIN__CONTENTS__STANDARDS_RESEARCH__CREATE} className="btn btn_blue_h46 w_100">글 작성</Link>
|
||||
</div>
|
||||
</div>
|
||||
{/* <!--// 버튼영역 --> */}
|
||||
|
||||
|
||||
|
||||
|
||||
{/* <!-- 게시판목록 --> */}
|
||||
<div className="board_list BRD008">
|
||||
|
|
@ -134,7 +158,7 @@ function StandardResearch(props) {
|
|||
}
|
||||
{list.map((it)=>(
|
||||
<div className='list_item' key={it.id}>
|
||||
<div>{it.id}</div>
|
||||
<div>{it.number}</div>
|
||||
<div className="al"><Link to={URL.ADMIN__CONTENTS__STANDARDS_RESEARCH__MODIFY} state={{rsId: it.id} } key={it.id}>{it.title}</Link></div>
|
||||
<div>{it.researchStartDate} ~ {it.researchEndDate}</div>
|
||||
<div>{it.director}</div>
|
||||
|
|
@ -144,13 +168,27 @@ function StandardResearch(props) {
|
|||
</div>
|
||||
{/* <!--// 게시판목록 --> */}
|
||||
|
||||
<div className="board_bot">
|
||||
{/* <!-- Paging --> */}
|
||||
|
||||
|
||||
|
||||
|
||||
{/* <!-- Paging --> */}
|
||||
<div className="board-bot">
|
||||
<div></div>
|
||||
<EgovPagingPaginationInfo pagination={paginationInfo} setPaginationInfo={setPaginationInfo} moveToPage={passedPage => {
|
||||
getList({ ...searchCondition, pageIndex: passedPage })
|
||||
}} />
|
||||
{/* <!--/ Paging --> */}
|
||||
<div className="right_col btn1">
|
||||
<Link to={URL.ADMIN__CONTENTS__STANDARDS_RESEARCH__CREATE} className="btn btn_blue_h46 w_100">등록</Link>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{/* <!--/ Paging --> */}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</StyledDiv>
|
||||
{/* <!--// 본문 --> */}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import { default as EgovLeftNav } from 'components/leftmenu/EgovLeftNavAdmin';
|
|||
import EgovPaging from 'components/EgovPaging';
|
||||
|
||||
import { itemIdxByPage } from 'utils/calc';
|
||||
import {format} from "date-fns";
|
||||
|
||||
function PrivacyConnections(props) {
|
||||
// console.group("EgovAdminPrivacyList");
|
||||
|
|
@ -66,7 +67,7 @@ function PrivacyConnections(props) {
|
|||
<div>{item.targetUserId}</div>
|
||||
<div>{item.accessType === "PRV_LIST" ? "사용자현황 조회" : item.accessType === "PRV_VIEW" ? "User 상세조회" : "User 수정"}</div>
|
||||
<div>{item.ipAddress}</div>
|
||||
<div>{item.accessDt}</div>
|
||||
<div>{item.accessDt ? format(item.accessDt, "yyyy-MM-dd HH:mm") : ""}</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
@ -122,7 +123,7 @@ function PrivacyConnections(props) {
|
|||
<span>수정 ID</span>
|
||||
<span>타입</span>
|
||||
<span>접속IP</span>
|
||||
<span>변경일자</span>
|
||||
<span>일자</span>
|
||||
</div>
|
||||
<div className="result">
|
||||
{listTag}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import java.time.format.DateTimeFormatter;
|
|||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service("popUpApiService")
|
||||
|
|
@ -47,12 +48,14 @@ public class PopUpApiServiceImpl extends EgovAbstractServiceImpl implements PopU
|
|||
);
|
||||
|
||||
|
||||
Long totalRecordCount = tnPopupMngRepositoryWithoutPopupContents.count();
|
||||
Long totalRecordCount = tnPopupMngRepositoryWithoutPopupContents.count();
|
||||
AtomicInteger index = new AtomicInteger();
|
||||
//List<Map<String, Object>> listPopup = tnPopupMngRepositoryWithoutPopupContents.findAll(Sort.by(Sort.Direction.DESC, "popupSeq"))
|
||||
List<Map<String, Object>> listPopup = tnPopupMngRepositoryWithoutPopupContents.findAll(pageable)
|
||||
.stream()
|
||||
.map(item -> {
|
||||
Map<String, Object> codeMap = new HashMap<>();
|
||||
codeMap.put("number", totalRecordCount - (long) pageable.getPageNumber() * pageable.getPageSize() - index.getAndIncrement());
|
||||
codeMap.put("seq", item.getPopupSeq());
|
||||
codeMap.put("popupTitle", item.getPopupTitle());
|
||||
codeMap.put("startDate", item.getPopupStartDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
||||
|
|
|
|||
|
|
@ -3,17 +3,14 @@ package com.dbnt.kcscbackend.admin.logs.entity;
|
|||
import java.io.Serializable;
|
||||
|
||||
import com.dbnt.kcscbackend.config.common.BoardParams;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.hibernate.annotations.DynamicInsert;
|
||||
import org.hibernate.annotations.DynamicUpdate;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Getter
|
||||
|
|
@ -45,8 +42,7 @@ public class ThPrivacyLog extends BoardParams implements Serializable {
|
|||
private String ipAddress;
|
||||
|
||||
@Column(name = "access_dt")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
private LocalDate accessDt;
|
||||
private LocalDateTime accessDt;
|
||||
|
||||
@Column(name = "session_id")
|
||||
private String sessionId;
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ public class AdminLogsService extends EgovAbstractServiceImpl {
|
|||
public void insertPrivacyLog(String userId, String ipAddress, String accessType, String targetUserId){
|
||||
ThPrivacyLog log = new ThPrivacyLog();
|
||||
log.setUserId(userId);
|
||||
log.setAccessDt(LocalDate.now());
|
||||
log.setAccessDt(LocalDateTime.now());
|
||||
log.setIpAddress(ipAddress);
|
||||
log.setAccessType(accessType);
|
||||
log.setTargetUserId(targetUserId);
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import java.time.format.DateTimeFormatter;
|
|||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service("adminStandardResearchService")
|
||||
|
|
@ -55,10 +56,12 @@ public class AdminStandardResearchServiceImpl extends EgovAbstractServiceImpl im
|
|||
|
||||
|
||||
long totalRecordCount = tnResearchRepositoryLightweight.countByUseYn("Y");
|
||||
AtomicInteger index = new AtomicInteger();
|
||||
List<Map<String, Object>> list = tnResearchRepositoryLightweight.findByUseYn("Y", pageable)
|
||||
.stream()
|
||||
.map(item -> {
|
||||
Map<String, Object> codeMap = new HashMap<>();
|
||||
codeMap.put("number", totalRecordCount - (long) pageable.getPageNumber() * pageable.getPageSize() - index.getAndIncrement());
|
||||
codeMap.put("id", item.getRsSeq());
|
||||
codeMap.put("title", item.getRsTitle());
|
||||
codeMap.put("researchStartDate", item.getRsStartDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
||||
|
|
|
|||
Loading…
Reference in New Issue