사용자로그 작업 완료.

강석 최 2022-11-23 11:51:20 +09:00
parent 9696cac273
commit 94a7a9c305
48 changed files with 180 additions and 140 deletions

View File

@ -76,6 +76,7 @@ public class BaseController {
session.setAttribute("menuList", menuMgtService.selectAccessMenuListWhereUserSeq(loginUser.getUserSeq()));
Map<String, List<CodeMgt>> codeMap = codeMgtService.getCommonCode();
session.setAttribute("commonCode", codeMap);
session.setAttribute("userOrgan", loginUser.getOgCd());
String belongValue = "";
belongValue += searchCodeValue(loginUser.getOgCd(), codeMap.get("OG"));
belongValue += searchCodeValue(loginUser.getOfcCd(), codeMap.get("OFC"));

View File

@ -36,6 +36,7 @@ public class FaispInterceptor implements HandlerInterceptor {
log.setRequestMethod(request.getMethod());
log.setSearchParams(request.getQueryString());
log.setHandlerDescription(((HandlerMethod) handler).toString());
log.setUserOrgan((String) request.getSession().getAttribute("userOrgan"));
log.setUserBelong((String) request.getSession().getAttribute("belongValue"));
userLogService.saveRequestLog(log);
}

View File

@ -19,6 +19,7 @@ import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.access.AccessDeniedHandler;
import org.springframework.security.web.authentication.AuthenticationFailureHandler;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.security.web.authentication.logout.LogoutHandler;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
import org.springframework.security.web.savedrequest.HttpSessionRequestCache;
import org.springframework.security.web.savedrequest.SavedRequest;
@ -72,6 +73,7 @@ public class SecurityConfig{
inoutLog.setInoutType("IOT001");
inoutLog.setContactIp(Utils.getClientIP(request));
inoutLog.setSessionId(request.getSession().getId());
inoutLog.setUserOrgan((String) request.getSession().getAttribute("userOrgan"));
inoutLog.setUserBelong((String) request.getSession().getAttribute("belongValue"));
userLogService.saveInoutLog(inoutLog);
@ -95,16 +97,15 @@ public class SecurityConfig{
};
}
@Bean
public LogoutSuccessHandler logoutSuccessHandler(){
public LogoutHandler logoutHandler(){
return (request, response, authentication) -> {
UserInoutLog inoutLog = new UserInoutLog();
inoutLog.setInoutType("IOT003");
inoutLog.setContactIp(Utils.getClientIP(request));
inoutLog.setSessionId(request.getSession().getId());
inoutLog.setUserOrgan((String) request.getSession().getAttribute("userOrgan"));
inoutLog.setUserBelong((String) request.getSession().getAttribute("belongValue"));
userLogService.saveInoutLog(inoutLog);
new DefaultRedirectStrategy().sendRedirect(request, response, "/");
};
}
@ -152,7 +153,8 @@ public class SecurityConfig{
.successHandler(loginSuccessHandler()) // 로그인 성공시 동작 수행.
.and() // 로그아웃 설정
.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")) // 로그아웃 시 URL 재정의
.logoutSuccessHandler(logoutSuccessHandler()) // 로그아웃 성공시 동작 수행.
.addLogoutHandler(logoutHandler()) // 로그아웃 전 실행.
.logoutSuccessUrl("/login")
.invalidateHttpSession(true) // HTTP Session 초기화
.deleteCookies("JSESSIONID") // 특정 쿠키 제거
.and() // 403 예외처리 핸들링

View File

@ -16,6 +16,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
.addPathPatterns("/**")
.excludePathPatterns(
"/",
"/login",
"/favicon.ico",
"/editorFileDisplay",
"/fileDisplay",

View File

@ -44,7 +44,6 @@ public class CodeMgtService{
}
public Map<String, List<CodeMgt>> getCommonCode() {
//return codeMgtRepository.findByUseChkOrderByItemCdAsc("T");
List<CodeCatg> categoryList = codeCatgRepository.findAll();
List<CodeMgt> codeList = codeMgtRepository.findByOrderByItemCdAsc();
Map<String, List<CodeMgt>> categoryMap = new HashMap<>();

View File

@ -32,6 +32,8 @@ public class UserInoutLog extends BaseModel {
private String contactIp;
@Column(name = "session_id")
private String sessionId;
@Column(name = "user_organ")
private String userOrgan;
@Column(name = "user_belong")
private String userBelong;
@Column(name = "wrt_dt")

View File

@ -31,20 +31,11 @@ public class UserRequestLog extends BaseModel {
private String searchParams;
@Column(name = "handler_description")
private String handlerDescription;
@Column(name = "user_organ")
private String userOrgan;
@Column(name = "user_belong")
private String userBelong;
@Column(name = "wrt_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDateTime wrtDt;
@Transient
private String organValue;
@Transient
private String officeValue;
@Transient
private String titleValue;
@Transient
private String userNm;
@Transient
private String userId;
}

View File

@ -316,7 +316,28 @@
</select>
<sql id="selectRequestLogListWhere">
<where>
user_organ in
<foreach collection="downOrganCdList" item="organCd" separator="," open="(" close=")">
#{organCd}
</foreach>
<if test='contactIp != null and contactIp != ""'>
and contact_ip like '%'||#{contactIp}||'%'
</if>
<if test='requestUrl != null and requestUrl != ""'>
and request_url like '%'||#{requestUrl}||'%'
</if>
<if test='requestMethod != null and requestMethod != ""'>
and request_method = #{requestMethod}
</if>
<if test='userBelong != null and userBelong != ""'>
and user_belong like '%'||#{userBelong}||'%'
</if>
<if test='startDate != null and startDate != ""'>
and wrt_dt >= #{startDate}::date
</if>
<if test='endDate != null and endDate != ""'>
and wrt_dt &lt;= #{endDate}::date+1
</if>
</where>
</sql>
<select id="selectRequestLogList" resultType="UserRequestLog" parameterType="UserRequestLog">
@ -333,7 +354,25 @@
</select>
<sql id="selectInoutLogListWhere">
<where>
user_organ in
<foreach collection="downOrganCdList" item="organCd" separator="," open="(" close=")">
#{organCd}
</foreach>
<if test='contactIp != null and contactIp != ""'>
and contact_ip like '%'||#{contactIp}||'%'
</if>
<if test='inoutType != null and inoutType != ""'>
and inout_type = #{inoutType}
</if>
<if test='userBelong != null and userBelong != ""'>
and user_belong like '%'||#{userBelong}||'%'
</if>
<if test='startDate != null and startDate != ""'>
and wrt_dt >= #{startDate}::date
</if>
<if test='endDate != null and endDate != ""'>
and wrt_dt &lt;= #{endDate}::date+1
</if>
</where>
</sql>
<select id="selectInoutLogList" resultType="UserInoutLog" parameterType="UserInoutLog">

View File

@ -1,4 +1,10 @@
$(function(){
$("#dateSelectorDiv").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
})
$(document).on('click', '#requestTab', function (){
location.href='/userMgt/userLog/requestLog';
})

View File

@ -4,7 +4,7 @@
<div class="tab-pane fade show active" id="accessTabPanel" role="tabpanel" aria-labelledby="accessTab" tabindex="0">
<table class="table table-hover text-center" id="accessEditTable">
<thead>
<tr>
<tr class="table-secondary">
<th>대분류</th>
<th>중분류</th>
<th>소분류</th>
@ -54,7 +54,7 @@
<div class="tab-pane fade" id="approvalTabPanel" role="tabpanel" aria-labelledby="approvalTab" tabindex="0">
<table class="table table-hover text-center" id="approvalEditTable">
<thead>
<tr>
<tr class="table-secondary">
<th>대분류</th>
<th>중분류</th>
<th>소분류</th>

View File

@ -59,7 +59,7 @@
<div class="row">
<table class="table table-striped">
<thead>
<tr>
<tr class="table-secondary">
<th></th>
<th>소속</th>
<th>부서</th>

View File

@ -27,7 +27,7 @@
<div class="row">
<table class="table table-striped" id="categoryTable">
<thead>
<tr>
<tr class="table-secondary">
<th></th>
<th>분류코드</th>
<th>분류명</th>
@ -51,7 +51,7 @@
<div class="row">
<table class="table table-striped" id="itemTable">
<thead>
<tr>
<tr class="table-secondary">
<th></th>
<th>하위코드</th>
<th></th>

View File

@ -71,7 +71,7 @@
<div class="row">
<table class="table table-striped">
<thead>
<tr>
<tr class="table-secondary">
<th><input type="checkbox" class="allChk"></th>
<th>대분류</th>
<th>중분류</th>

View File

@ -7,7 +7,7 @@
</th:block>
<div layout:fragment="content">
<main class="pt-3">
<h4>외사경찰 관리</h4>
<h4>사용자 로그</h4>
<ul class="nav nav-tabs" id="boardTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link" id="requestTab" data-bs-toggle="tab" type="button" role="tab">메뉴로그</button>
@ -28,39 +28,37 @@
</th:block>
</select>
</div>
<div class="col-auto">
<div class="row justify-content-end">
<div class="col-auto">
<select class="form-select form-select-sm" name="ogCd">
<option value="">관서 선택</option>
<th:block th:each="commonCode:${session.commonCode.get('OG')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"></option>
</th:block>
</select>
<div class="col-6">
<div class="row">
<div class="col-10">
<div class="row justify-content-end pb-1">
<div class="col-4">
<select class="form-select form-select-sm" name="inoutType">
<option value="">결과</option>
<th:block th:each="code:${session.commonCode.get('IOT')}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${searchParams.inoutType eq code.itemCd}"></option>
</th:block>
</select>
</div>
<div class="col-4">
<input type="text" class="form-control form-control-sm" name="contactIp" placeholder="아이피" th:value="${searchParams.contactIp}">
</div>
</div>
<div class="row">
<div class="col-4">
<input type="text" class="form-control form-control-sm" name="userBelong" placeholder="사용자" th:value="${searchParams.userBelong}">
</div>
<div class="col-8">
<div class="input-group w-auto input-daterange" id="dateSelectorDiv">
<input type="text" class="form-control form-control-sm" id="startDate" name="startDate" placeholder="시작일" autocomplete="off" readonly th:value="${searchParams.startDate}">
<input type="text" class="form-control form-control-sm" id="endDate" name="endDate" placeholder="종료일" autocomplete="off" readonly th:value="${searchParams.endDate}">
</div>
</div>
</div>
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="ofcCd">
<option value="">부서 선택</option>
<th:block th:each="commonCode:${session.commonCode.get('OFC')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"></option>
</th:block>
</select>
<div class="col-2 d-grid gap-2">
<input type="submit" class="btn btn-sm btn-primary mx-2" id="searchBtn" value="검색">
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="titleCd">
<option value="">계급 선택</option>
<th:block th:each="commonCode:${session.commonCode.get('JT')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<input type="text" class="form-control form-control-sm" name="userNm" placeholder="사용자명">
</div>
<div class="col-auto">
<input type="text" class="form-control form-control-sm" name="userId" placeholder="사용자 아이디">
</div>
<input type="submit" class="btn btn-sm btn-primary col-auto" id="searchBtn" value="검색">
</div>
</div>
</div>
@ -72,7 +70,7 @@
<div class="row">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th>접속아이피</th>
<th>결과</th>
<th>사용자</th>

View File

@ -7,7 +7,7 @@
</th:block>
<div layout:fragment="content">
<main class="pt-3">
<h4>외사경찰 관리</h4>
<h4>사용자 로그</h4>
<ul class="nav nav-tabs" id="boardTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="requestTab" data-bs-toggle="tab" type="button" role="tab">메뉴로그</button>
@ -28,39 +28,39 @@
</th:block>
</select>
</div>
<div class="col-auto">
<div class="col-6">
<div class="row justify-content-end">
<div class="col-auto">
<select class="form-select form-select-sm" name="ogCd">
<option value="">관서 선택</option>
<th:block th:each="commonCode:${session.commonCode.get('OG')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"></option>
</th:block>
</select>
<div class="col-10">
<div class="row pb-1">
<div class="col-4">
<input type="text" class="form-control form-control-sm" name="contactIp" placeholder="아이피" th:value="${searchParams.contactIp}">
</div>
<div class="col-4">
<input type="text" class="form-control form-control-sm" name="requestUrl" placeholder="URL" th:value="${searchParams.requestUrl}">
</div>
<div class="col-4">
<select class="form-select form-select-sm" name="requestMethod">
<option value="">접근방식</option>
<option value="GET" th:selected="${searchParams.requestMethod eq 'GET'}">GET</option>
<option value="POST" th:selected="${searchParams.requestMethod eq 'POST'}">POST</option>
</select>
</div>
</div>
<div class="row">
<div class="col-4">
<input type="text" class="form-control form-control-sm" name="userBelong" placeholder="사용자" th:value="${searchParams.userBelong}">
</div>
<div class="col-8">
<div class="input-group w-auto input-daterange" id="dateSelectorDiv">
<input type="text" class="form-control form-control-sm" id="startDate" name="startDate" placeholder="시작일" autocomplete="off" readonly th:value="${searchParams.startDate}">
<input type="text" class="form-control form-control-sm" id="endDate" name="endDate" placeholder="종료일" autocomplete="off" readonly th:value="${searchParams.endDate}">
</div>
</div>
</div>
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="ofcCd">
<option value="">부서 선택</option>
<th:block th:each="commonCode:${session.commonCode.get('OFC')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"></option>
</th:block>
</select>
<div class="col-2 d-grid gap-2">
<input type="submit" class="btn btn-sm btn-primary mx-2" id="searchBtn" value="검색">
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="titleCd">
<option value="">계급 선택</option>
<th:block th:each="commonCode:${session.commonCode.get('JT')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<input type="text" class="form-control form-control-sm" name="userNm" placeholder="사용자명">
</div>
<div class="col-auto">
<input type="text" class="form-control form-control-sm" name="userId" placeholder="사용자 아이디">
</div>
<input type="submit" class="btn btn-sm btn-primary col-auto" id="searchBtn" value="검색">
</div>
</div>
</div>
@ -72,7 +72,7 @@
<div class="row">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th>접속아이피</th>
<th>요청 URL</th>
<th>접근 방식</th>

View File

@ -75,7 +75,7 @@
<div class="row">
<table class="table table-striped">
<thead>
<tr>
<tr class="table-secondary">
<th> <input type="checkbox" class="allChk"></th>
<th>소속</th>
<th>부서</th>

View File

@ -24,7 +24,7 @@
<div class="col-12" style="overflow: hidden; overflow-x: scroll">
<table class="table table-striped table-bordered" style="max-width: none; width: auto;" id="cdsTable">
<thead>
<tr>
<tr class="table-secondary">
<th rowspan="4">연번</th>
<th rowspan="4">사건번호</th>
<th rowspan="4">나포일시</th>

View File

@ -52,7 +52,7 @@
<div class="col-12">
<table class="table table-striped">
<thead>
<tr>
<tr class="table-secondary">
<th></th>
<th>대분류</th>
<th>중분류</th>

View File

@ -43,7 +43,7 @@
<div class="row">
<table class="table table-striped">
<thead>
<tr>
<tr class="table-secondary">
<th><input type="checkbox" class="allChk"></th>
<th>소속</th>
<th>부서</th>

View File

@ -46,7 +46,7 @@
<div class="row">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th> <input type="checkbox" id="chk-all" class="equInfoCheckBox"></th>
<th>연번</th>
<th>소속</th>

View File

@ -19,7 +19,7 @@
<div class="row">
<table class="table table-striped" id="categoryTable">
<thead>
<tr>
<tr class="table-secondary">
<th></th>
<th>작성자</th>
<th>등록일</th>

View File

@ -38,7 +38,7 @@
<div class="row">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th> <input type="checkbox" id="chk-all" class="equInfoCheckBox"></th>
<th>소속</th>
<th>세부소속</th>

View File

@ -46,7 +46,7 @@
<div class="row">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th>분류</th>
<th>세부분류</th>
<th>관서</th>

View File

@ -38,7 +38,7 @@
<div class="row">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th rowspan="2">분류</th>
<th rowspan="2">세부분류</th>
<th rowspan="2">총계</th>
@ -49,7 +49,7 @@
<th colspan="5">동해</th>
<th colspan="3">제주</th>
</tr>
<tr>
<tr class="table-secondary">
<th></th>
<th>인천서</th>
<th>평택서</th>

View File

@ -73,7 +73,7 @@
<div class="row">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th> <input type="checkbox" id="chk-all" class="useCheckBox"></th>
<th>연번</th>
<th>경찰서</th>

View File

@ -73,7 +73,7 @@
<div class="row">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th> <input type="checkbox" id="chk-all" class="useCheckBox"></th>
<th>연번</th>
<th>경찰서</th>

View File

@ -19,7 +19,7 @@
<div class="row">
<table class="table table-striped" id="categoryTable">
<thead>
<tr>
<tr class="table-secondary">
<th></th>
<th>작성자</th>
<th>등록일</th>

View File

@ -77,7 +77,7 @@
<div class="row">
<table class="table table-hover">
<thead>
<tr>
<tr class="table-secondary">
<th></th>
<th th:if="${searchParams.status ne 'receive'}">상태</th>
<th>분류</th>

View File

@ -132,7 +132,7 @@
<div class="row overflow-auto">
<table class="table table-hover table-bordered ws-nowrap">
<thead>
<tr>
<tr class="table-secondary">
<th></th>
<th>나포일시</th>
<th>나포해점</th>

View File

@ -34,7 +34,7 @@
<div class="row">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th>항로</th>
<th>사업자<br>(한국대리점)</th>
<th>선명</th>

View File

@ -81,7 +81,7 @@
<input type="hidden" id="selectedVerNo">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th rowspan="3">해경서</th>
<th rowspan="3">육경서</th>
<th rowspan="3">터미널명</th>
@ -92,7 +92,7 @@
<th rowspan="3">공공요금</th>
<th rowspan="3">최종수정일</th>
</tr>
<tr>
<tr class="table-secondary">
<th:block th:if="${not #strings.isEmpty(total)}">
<th th:text="|상주 ${total.mp_sangju}개소 ${total.mp_sangju_total}명|"></th>
<th th:text="|비상주 ${total.mp_bsangju}개소 ${total.mp_bsangju_total}명|"></th>
@ -110,7 +110,7 @@
<th>폐쇄 0개소 0명</th>
</th:block>
</tr>
<tr>
<tr class="table-secondary">
<th>근무방법</th>
<th></th>
<th>비고</th>

View File

@ -36,7 +36,7 @@
<input type="hidden" id="selectedVerNo">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th rowspan="2">외사<br>터미널명</th>
<th rowspan="2">작성자</th>
<th rowspan="2">일시</th>
@ -45,7 +45,7 @@
<th rowspan="2">첨부파일</th>
<th rowspan="2">최근수정일</th>
</tr>
<tr>
<tr class="table-secondary">
<th>사건처리</th>
<th>범죄첩보제공</th>
<th>SRI</th>

View File

@ -28,12 +28,12 @@
<div class="row">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th rowspan="2">구분</th>
<th rowspan="2">경찰서</th>
<th colspan="3">취약등급</th>
</tr>
<tr>
<tr class="table-secondary">
<th>A급</th>
<th>B급</th>
<th>C급</th>

View File

@ -117,9 +117,9 @@
<div class="card">
<div class="card-body">
<div class="row">
<table class="table table-hover">
<table class="table table-bordered table-hover">
<thead>
<tr>
<tr class="table-secondary">
<th></th>
<th>분야1</th>
<th>분야2</th>
@ -141,7 +141,7 @@
</th:block>
</tr>
</thead>
<tbody>
<tbody class="table-group-divider">
<tr class="affairTr" th:each="affair:${affairList}">
<input type="hidden" class="affairKey" th:value="${affair.affairKey}">
<td><input type="checkbox" class="trChkBox"></td>

View File

@ -83,9 +83,9 @@
<div class="card">
<div class="card-body">
<div class="row">
<table class="table table-hover">
<table class="table table-bordered table-hover">
<thead>
<tr>
<tr class="table-secondary">
<th></th>
<th>제목</th>
<th>시행일자</th>
@ -97,7 +97,7 @@
<th>상태</th>
</tr>
</thead>
<tbody>
<tbody class="table-group-divider">
<tr class="planTr" th:each="plan:${planList}">
<input type="hidden" class="planKey" th:value="${plan.planKey}">
<td><input type="checkbox" class="trChkBox"></td>

View File

@ -78,9 +78,9 @@
<div class="card">
<div class="card-body">
<div class="row">
<table class="table table-hover">
<table class="table table-bordered table-hover">
<thead>
<tr>
<tr class="table-secondary">
<th></th>
<th>제목</th>
<th>사업기간</th>
@ -93,7 +93,7 @@
<th>상태</th>
</tr>
</thead>
<tbody>
<tbody class="table-group-divider">
<tr class="resultTr" th:each="result:${resultList}">
<input type="hidden" class="resultKey" th:value="${result.resultKey}">
<td><input type="checkbox" class="trChkBox"></td>

View File

@ -78,7 +78,7 @@
<div class="col-12">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th>순번</th>
<th>계급</th>
<th>성명</th>

View File

@ -79,7 +79,7 @@
<div class="col-12">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th>순번</th>
<th>계급</th>
<th>성명</th>

View File

@ -34,7 +34,7 @@
<div class="card-body">
<table class="table table-hover table-bordered" id="psTable">
<thead>
<tr>
<tr class="table-secondary">
<th rowspan="3">관서</th>
<th>정원</th>
<th>현원</th>
@ -44,7 +44,7 @@
</th:block>
<th rowspan="3">수정일</th>
</tr>
<tr>
<tr class="table-secondary">
<th></th>
<th></th>
<th></th>
@ -53,7 +53,7 @@
<th>현원</th>
</th:block>
</tr>
<tr>
<tr class="table-secondary">
<th th:text="${statusSummary.sumMax}"></th>
<th th:text="${statusSummary.sumNow}"></th>
<th th:text="${statusSummary.sumNow-statusSummary.sumMax}" th:classappend="${(statusSummary.sumNow-statusSummary.sumMax)>=0?'text-primary':'text-danger'}"></th>

View File

@ -82,7 +82,7 @@
<div class="col-12">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th>순번</th>
<th>계급</th>
<th>성명</th>

View File

@ -58,7 +58,7 @@
<div class="row">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th></th>
<th>제목</th>
<th>관서</th>

View File

@ -61,7 +61,7 @@
<div class="row">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th></th>
<th>제목</th>
<th>관서</th>

View File

@ -59,7 +59,7 @@
<div class="row">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th></th>
<th>제목</th>
<th>관서</th>

View File

@ -68,7 +68,7 @@
<div class="row">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th></th>
<th>제목</th>
<th>관서</th>

View File

@ -72,9 +72,9 @@
<div class="card">
<div class="card-body">
<div class="row">
<table class="table table-hover">
<table class="table table-bordered table-hover">
<thead>
<tr>
<tr class="table-secondary">
<th></th>
<th th:if="${searchParams.status ne 'receive'}">상태</th>
<th>보고서<br>번호</th>
@ -87,7 +87,7 @@
<th>작성일시</th>
</tr>
</thead>
<tbody>
<tbody class="table-group-divider">
<tr class="faSriTr" th:each="sri:${SriList}">
<th:block>
<input type="hidden" class="faSriKey" th:value="${sri.faSriKey}">

View File

@ -92,7 +92,7 @@
<input type="hidden" id="selectedVerNo">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th>연번</th>
<th>관서명</th>
<th>언어</th>

View File

@ -25,7 +25,7 @@
<div class="row">
<table class="table table-hover table-bordered">
<thead>
<tr>
<tr class="table-secondary">
<th colspan="2">어권별 구분</th>
<th>총계</th>
<th>중부청</th>
@ -34,7 +34,7 @@
<th>동해청</th>
<th>제주청</th>
</tr>
<tr>
<tr class="table-secondary">
<th>연번</th>
<th></th>
<th:block th:if="${not #strings.isEmpty(total)}">

View File

@ -191,9 +191,9 @@
</button>
</div>
</div>
<table class="table table-hover">
<table class="table table-bordered table-hover">
<thead>
<tr>
<tr class="table-secondary">
<th><input type="checkbox" class="allChk"></th>
<th>순번</th>
<th>대분류</th>