강석 최 2024-03-04 15:08:25 +09:00
commit f1f0602d4e
10 changed files with 230 additions and 111 deletions

View File

@ -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)=> {

View File

@ -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>

View File

@ -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',

View File

@ -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>

View File

@ -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>

View File

@ -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}

View File

@ -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")));

View File

@ -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;

View File

@ -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);

View File

@ -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")));