수정요청사항 작업중.

master
강석 최 2023-01-09 18:46:11 +09:00
parent efddb3c7b7
commit ff4bfb9dee
15 changed files with 191 additions and 137 deletions

View File

@ -11,6 +11,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.session.SessionRegistryImpl;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.crypto.password.Pbkdf2PasswordEncoder; import org.springframework.security.crypto.password.Pbkdf2PasswordEncoder;
import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.security.web.AuthenticationEntryPoint;
@ -111,6 +112,14 @@ public class SecurityConfig{
@Bean @Bean
protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeRequests() // 페이지 권한 설정 http.authorizeRequests() // 페이지 권한 설정
.antMatchers(
"/css/**",
"/img/**",
"/js/**",
"/vendor/**",
"/login",
"/Crosseditor/uploadImg"
).permitAll() // 권한 없이 접근 허용
.antMatchers( .antMatchers(
"/dashboard", "/dashboard",
"/myInfo/**", "/myInfo/**",
@ -140,14 +149,6 @@ public class SecurityConfig{
"/organMgt/**", "/organMgt/**",
"/menuMgt/**" "/menuMgt/**"
).hasRole(Role.ADMIN.name()) // ADMIN 접근 허용 ).hasRole(Role.ADMIN.name()) // ADMIN 접근 허용
.antMatchers(
"/login",
"/css/**",
"/img/**",
"/js/**",
"/vendor/**",
"/Crosseditor/uploadImg"
).permitAll() // 로그인 페이지는 권한 없이 접근 허용
.and() // 로그인 설정 .and() // 로그인 설정
.formLogin().loginPage("/login") // Custom login form 사용 .formLogin().loginPage("/login") // Custom login form 사용
.failureHandler(loginFailureHandler()) // 로그인 실패시 동작 수행 .failureHandler(loginFailureHandler()) // 로그인 실패시 동작 수행
@ -169,6 +170,7 @@ public class SecurityConfig{
http.headers().frameOptions().sameOrigin(); http.headers().frameOptions().sameOrigin();
// 나모에디터 이미지 업로드시 csrf 토큰을 추가할 수 없어서 예외처리. // 나모에디터 이미지 업로드시 csrf 토큰을 추가할 수 없어서 예외처리.
http.csrf().ignoringAntMatchers("/Crosseditor/uploadImg"); http.csrf().ignoringAntMatchers("/Crosseditor/uploadImg");
return http.build(); return http.build();
} }

View File

@ -98,7 +98,29 @@ public class CodeMgtService{
} }
public String searchCodeToCategoryAndValue(String categoryCd, String value){ public String searchCodeToCategoryAndValue(String categoryCd, String value){
CodeMgt code = codeMgtRepository.findByCategoryCdAndItemValue(categoryCd, value).orElse(null); CodeMgt code = codeMgtRepository.findByCategoryCdAndItemValue(categoryCd, value).orElse(null);
return code==null?null:code.getItemCd(); if(code==null){
List<CodeMgt> codeList = codeMgtRepository.findByCategoryCdOrderByItemCdAsc(categoryCd);
Integer codeNum = 1;
String itemCd="";
for(CodeMgt savedCode : codeList){
if(!savedCode.getItemValue().equals("기타") && !savedCode.getItemValue().equals("직접입력")){
codeNum = Integer.parseInt(savedCode.getItemCd().replace(categoryCd, ""));
}
if(codeNum==1){
itemCd = savedCode.getItemCd().replace(categoryCd, "").replace("1", "");
}
}
codeNum++;
itemCd = categoryCd+(itemCd.substring((int)Math.log10((double)codeNum)))+codeNum;
CodeMgt newCode = new CodeMgt();
newCode.setCategoryCd(categoryCd);
newCode.setItemCd(itemCd);
newCode.setItemValue(value);
newCode.setUseChk("T");
codeMgtRepository.save(newCode);
return newCode.getItemCd();
}
return code.getItemCd();
} }
public List<CodeCatg> selectAllCategoryList() { public List<CodeCatg> selectAllCategoryList() {

View File

@ -185,6 +185,7 @@ public class AffairController { // 첩보수집활동 > 외사경찰 견문관
affairBoard.setWrtPart(loginUser.getOfcCd()); affairBoard.setWrtPart(loginUser.getOfcCd());
affairBoard.setWrtUserSeq(loginUser.getUserSeq()); affairBoard.setWrtUserSeq(loginUser.getUserSeq());
affairBoard.setWrtUserNm(loginUser.getUserNm()); affairBoard.setWrtUserNm(loginUser.getUserNm());
affairBoard.setWrtUserGrd(loginUser.getTitleCd());
affairBoard.setWrtDt(LocalDateTime.now()); affairBoard.setWrtDt(LocalDateTime.now());
affairBoard.setReportDt(LocalDate.now()); affairBoard.setReportDt(LocalDate.now());
} }

View File

@ -61,6 +61,8 @@ public class AffairBoard extends BaseModel {
private String viewStatus; private String viewStatus;
@Column(name = "affair_category") @Column(name = "affair_category")
private String affairCategory; private String affairCategory;
@Column(name = "wrt_user_grd")
private String wrtUserGrd;
@Transient @Transient
private String organUp; private String organUp;

File diff suppressed because one or more lines are too long

View File

@ -19,24 +19,6 @@
background-color: #ffffff; background-color: #ffffff;
} }
#fadeSearchDiv{
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
background-color: #00000050;
z-index: 2090;
}
#fadeSearchDiv > div{
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
background-color: #ffffff;
}
#alarmCntDiv{ #alarmCntDiv{
width: 16px; width: 16px;
height: 16px; height: 16px;

View File

@ -8,15 +8,11 @@ function contentFade(action){
$("#fadeDiv").hide() $("#fadeDiv").hide()
} }
} }
$(document).on('mouseenter', '.leftMenuItem', function (e){
function searchFade(action){ if($(this).attr("aria-expanded")==='false'){
if(action === "in"){ $(this).click();
$("#fadeSearchDiv").show()
}else{
$("#fadeSearchDiv").hide()
} }
} })
$(document).on('click', '#bellIcon', function (){ $(document).on('click', '#bellIcon', function (){
const alarmListDiv = $("#alarmListDiv")[0]; const alarmListDiv = $("#alarmListDiv")[0];
if(alarmListDiv.className.includes('d-none')){ if(alarmListDiv.className.includes('d-none')){

View File

@ -77,7 +77,7 @@ $(document).on('click', '#sailorAddBtn', function (e){
e.preventDefault(); e.preventDefault();
$('#sailorDiv').append( $('#sailorDiv').append(
'<div class="row">' '<div class="row">'
+ '<label class="col-sm-1 col-form-label col-form-label-sm text-center">선원이름</label>' + '<label class="col-sm-1 col-form-label col-form-label-sm text-center fw-bold">선원이름</label>'
+ '<div class="col-sm-2">' + '<div class="col-sm-2">'
+ '<input class="form-control form-control-sm" name="sailorNameKr">' + '<input class="form-control form-control-sm" name="sailorNameKr">'
+ '</div>' + '</div>'

View File

@ -79,19 +79,19 @@ $(document).on('click', '#spiAddBtn', function (){
$("#spiDiv").append( $("#spiDiv").append(
'<div class="row dynamic spi-list pb-1">' '<div class="row dynamic spi-list pb-1">'
+ '<label class="col-sm-1 col-form-label col-form-label-sm text-center">성별</label>' + '<label class="col-sm-1 col-form-label col-form-label-sm text-center fw-bold">성별</label>'
+ '<div class="col-sm-2" id="sexFormDiv">' + '<div class="col-sm-2" id="sexFormDiv">'
+ '<select class="form-select form-select-sm" name="sex">' + '<select class="form-select form-select-sm" name="sex">'
+ sex + sex
+ '</select>' + '</select>'
+ '</div>' + '</div>'
+ '<label class="col-sm-1 col-form-label col-form-label-sm text-center">나이</label>' + '<label class="col-sm-1 col-form-label col-form-label-sm text-center fw-bold">나이</label>'
+ '<div class="col-sm-2" id="ageFormDiv">' + '<div class="col-sm-2" id="ageFormDiv">'
+ '<select class="form-select form-select-sm" name="age">' + '<select class="form-select form-select-sm" name="age">'
+ age + age
+ '</select>' + '</select>'
+ '</div>' + '</div>'
+ '<label class="col-sm-1 col-form-label col-form-label-sm text-center">국적</label>' + '<label class="col-sm-1 col-form-label col-form-label-sm text-center fw-bold">국적</label>'
+ '<div class="col-sm-2" id="countryFormDiv">' + '<div class="col-sm-2" id="countryFormDiv">'
+ '<select class="form-select form-select-sm country" name="country">' + '<select class="form-select form-select-sm country" name="country">'
+ country + country
@ -148,7 +148,7 @@ $(document).on('change', '#crimeType', function (){
if ($(this).val() == 'CTH2') { if ($(this).val() == 'CTH2') {
makeArrestAreaDiv('장소'); makeArrestAreaDiv('장소');
$('#smugglingAmountDiv').append( $('#smugglingAmountDiv').append(
'<label class="col-sm-2 col-form-label col-form-label-sm text-center">밀수입출 품목</label>' '<label class="col-sm-2 col-form-label col-form-label-sm text-center fw-bold">밀수입출 품목</label>'
+ '<div class="col-sm-2">' + '<div class="col-sm-2">'
+ '<select class="form-select form-select-sm" name="smuggledGoods" id="smugglingAmount">' + '<select class="form-select form-select-sm" name="smuggledGoods" id="smugglingAmount">'
+ '<option>선택</option>' + '<option>선택</option>'
@ -156,11 +156,11 @@ $(document).on('change', '#crimeType', function (){
+ '<option value="etc">기타</option>' + '<option value="etc">기타</option>'
+ '</select>' + '</select>'
+ '</div>' + '</div>'
+ '<label class="col-sm-2 col-form-label col-form-label-sm text-center">밀수가액</label>' + '<label class="col-sm-2 col-form-label col-form-label-sm text-center fw-bold">밀수가액</label>'
+ '<div class="col-sm-2">' + '<div class="col-sm-2">'
+ '<input class="form-control form-control-sm" type="number" min="0" name="smugglingAmount">' + '<input class="form-control form-control-sm" type="number" min="0" name="smugglingAmount">'
+ '</div>' + '</div>'
+ '<label class="col-sm-2 col-form-label col-form-label-sm text-center">단속 인원(경찰관)</label>' + '<label class="col-sm-2 col-form-label col-form-label-sm text-center fw-bold">단속 인원(경찰관)</label>'
+ '<div class="col-sm-2">' + '<div class="col-sm-2">'
+ '<input class="form-control form-control-sm" type="number" min="0" name="caseNum">' + '<input class="form-control form-control-sm" type="number" min="0" name="caseNum">'
+ '</div>' + '</div>'

View File

@ -56,7 +56,7 @@ $(document).on('change', '#autoDeleteSelector', function (){
}) })
$(document).on('click', '#saveAffairBtn', function (){ $(document).on('click', '#saveAffairBtn', function (){
saveAffair('DST002') saveAffair($(this).attr("data-status"))
}) })
$(document).on('click', '#saveTempBtn', function (){ $(document).on('click', '#saveTempBtn', function (){
saveAffair('DST001') saveAffair('DST001')
@ -94,6 +94,7 @@ $(document).on('click', '.apprvBtn', function (){
$(document).on('click', '#tableApprvBtn', function (){ $(document).on('click', '#tableApprvBtn', function (){
const ratingList = []; const ratingList = [];
const apprvAuth = $(this).attr("data-apprvauth") const apprvAuth = $(this).attr("data-apprvauth")
let affairRateFlag = true;
$.each($(".apprvTd"), function (idx, el) { $.each($(".apprvTd"), function (idx, el) {
if (apprvAuth === "APC003" || apprvAuth === "APC004") { if (apprvAuth === "APC003" || apprvAuth === "APC004") {
const chkbox = $(el).find(".apprvChkbox:checked") const chkbox = $(el).find(".apprvChkbox:checked")
@ -113,12 +114,21 @@ $(document).on('click', '#tableApprvBtn', function (){
if(selectorValue !== ""){ if(selectorValue !== ""){
affairRating["affairRate"] = selectorValue; affairRating["affairRate"] = selectorValue;
affairRating["organUp"] = $(el).find(".organUpChkBox").prop("checked")?"T":"F"; affairRating["organUp"] = $(el).find(".organUpChkBox").prop("checked")?"T":"F";
}else{
if(chkbox.val()==="DST006"){
//부장승인 & 평가 미입력.
affairRateFlag = false;
}
} }
ratingList.push(affairRating); ratingList.push(affairRating);
} }
} }
}) })
if(affairRateFlag){
affairStateChange(ratingList); affairStateChange(ratingList);
}else{
alert("평가가 선택되지 않은 항목이 있습니다.")
}
}) })
$(document).on('change', '.apprvChkbox', function (){ $(document).on('change', '.apprvChkbox', function (){
@ -182,8 +192,12 @@ function getAffairEditModal(affairKey){
}); });
} }
function saveAffair(affairStatus){ function saveAffair(affairStatus){
if(contentCheck()){
if(confirm("저장하시겠습니까?")){ if(confirm("저장하시겠습니까?")){
let flag = true;
if(affairStatus!=="DST001"){
flag = contentCheck()
}
if(flag){
$("#affairStatus").val(affairStatus); $("#affairStatus").val(affairStatus);
contentFade("in"); contentFade("in");
const formData = new FormData($("#affairEditForm")[0]); const formData = new FormData($("#affairEditForm")[0]);
@ -242,35 +256,33 @@ function affairStateChange(ratingList){
}) })
} }
function contentCheck(){ function contentCheck(){
let flag = true;
if(!$("#title").val()){ if(!$("#title").val()){
alert("제목을 입력해주세요.") alert("제목을 입력해주세요.")
flag = false; return false;
} }
if(!$("#affairType1").val()){ if(!$("#affairType1").val()){
alert("분야1을 입력해주세요.") alert("분야1을 입력해주세요.")
flag = false; return false;
} }
if(!$("#affairType2").val()){ if(!$("#affairType2").val()){
alert("분야2을 입력해주세요.") alert("분야2을 입력해주세요.")
flag = false; return false;
} }
if(!$("#affairType3").val()){ if(!$("#affairType3").val()){
alert("분야3을 입력해주세요.") alert("분야3을 입력해주세요.")
flag = false; return false;
} }
if(!$("#affairType4").val()){ if(!$("#affairType4").val()){
alert("분야4을 입력해주세요.") alert("분야4을 입력해주세요.")
flag = false; return false;
} }
if(!$("#viewStatus").val()){ if(!$("#viewStatus").val()){
alert("공개여부를 입력해주세요.") alert("공개여부를 입력해주세요.")
flag = false; return false;
} }
if(!$("#hashTags").val()){ if(!$("#hashTags").val()){
alert("해시태그를 입력해주세요.") alert("해시태그를 입력해주세요.")
flag = false; return false;
} }
flag = fileCheck(flag, files); return fileCheck(true, files);
return flag;
} }

View File

@ -6,7 +6,7 @@
<li class="mb-1" th:each="firstMenu:${session.menuList}"> <li class="mb-1" th:each="firstMenu:${session.menuList}">
<th:block th:each="cat1Code:${session.commonCode.get('CAT1')}"> <th:block th:each="cat1Code:${session.commonCode.get('CAT1')}">
<th:block th:if="${cat1Code.itemCd eq firstMenu.cat1Cd}"> <th:block th:if="${cat1Code.itemCd eq firstMenu.cat1Cd}">
<button class="btn btn-toggle align-items-center rounded collapsed text-light" <button class="btn btn-toggle align-items-center rounded collapsed leftMenuItem text-light"
data-bs-toggle="collapse" aria-expanded="false" data-bs-toggle="collapse" aria-expanded="false"
th:data-bs-target="'#collapse'+${cat1Code.itemCd}" th:text="${cat1Code.itemValue}"> th:data-bs-target="'#collapse'+${cat1Code.itemCd}" th:text="${cat1Code.itemValue}">
</button> </button>
@ -18,7 +18,7 @@
<ul class="list-unstyled ps-0"> <ul class="list-unstyled ps-0">
<li class="mb-1"> <li class="mb-1">
<th:block th:unless="${#lists.isEmpty(secondMenu.childList)}"> <th:block th:unless="${#lists.isEmpty(secondMenu.childList)}">
<button class="btn btn-toggle align-items-center rounded collapsed text-light" <button class="btn btn-toggle align-items-center rounded collapsed leftMenuItem text-light"
data-bs-toggle="collapse" aria-expanded="false" th:onclick="location.href='#'" data-bs-toggle="collapse" aria-expanded="false" th:onclick="location.href='#'"
th:data-bs-target="'#collapse'+${cat2Code.itemCd}" th:text="${cat2Code.itemValue}"> th:data-bs-target="'#collapse'+${cat2Code.itemCd}" th:text="${cat2Code.itemValue}">
</button> </button>

View File

@ -13,6 +13,7 @@
<input type="hidden" name="wrtOrgan" th:value="${affair.wrtOrgan}"> <input type="hidden" name="wrtOrgan" th:value="${affair.wrtOrgan}">
<input type="hidden" name="wrtPart" th:value="${affair.wrtPart}"> <input type="hidden" name="wrtPart" th:value="${affair.wrtPart}">
<input type="hidden" name="wrtUserSeq" th:value="${affair.wrtUserSeq}"> <input type="hidden" name="wrtUserSeq" th:value="${affair.wrtUserSeq}">
<input type="hidden" name="wrtUserGrd" th:value="${affair.wrtUserGrd}">
<input type="hidden" name="affairStatus" id="affairStatus" th:value="${affair.affairStatus}"> <input type="hidden" name="affairStatus" id="affairStatus" th:value="${affair.affairStatus}">
<input type="hidden" name="wrtDt" id="wrtDt" th:value="${#temporals.format(affair.wrtDt, 'yyyy-MM-dd HH:mm')}"> <input type="hidden" name="wrtDt" id="wrtDt" th:value="${#temporals.format(affair.wrtDt, 'yyyy-MM-dd HH:mm')}">
<div class="row mb-1"> <div class="row mb-1">
@ -119,6 +120,8 @@
</div> </div>
<div class="modal-footer bg-light"> <div class="modal-footer bg-light">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>
<th:block th:if="${affair.affairKey eq null or (affair.affairStatus eq 'DST001' or affair.affairStatus eq 'DST002')}">
<button type="button" class="btn btn-warning" id="saveTempBtn">임시저장</button> <button type="button" class="btn btn-warning" id="saveTempBtn">임시저장</button>
<button type="button" class="btn btn-primary" id="saveAffairBtn">저장</button> </th:block>
<button type="button" class="btn btn-primary" id="saveAffairBtn" th:data-status="${(affair.affairStatus eq 'DST004' or affair.affairStatus eq 'DST006')?affair.affairStatus:'DST002'}">저장</button>
</div> </div>

View File

@ -130,6 +130,7 @@
<thead> <thead>
<tr class="table-secondary"> <tr class="table-secondary">
<th></th> <th></th>
<th>문서번호</th>
<th>분야1</th> <th>분야1</th>
<th>분야2</th> <th>분야2</th>
<th>분야3</th> <th>분야3</th>
@ -154,31 +155,46 @@
<tr class="affairTr" th:each="affair:${affairList}"> <tr class="affairTr" th:each="affair:${affairList}">
<input type="hidden" class="affairKey" th:value="${affair.affairKey}"> <input type="hidden" class="affairKey" th:value="${affair.affairKey}">
<td><input type="checkbox" class="trChkBox"></td> <td><input type="checkbox" class="trChkBox"></td>
<td th:text="|해양경찰청외사-${affair.affairKey}|"></td>
<td>
<th:block th:each="commonCode:${session.commonCode.get('DC01')}"> <th:block th:each="commonCode:${session.commonCode.get('DC01')}">
<td th:if="${affair.affairType1 eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td> <th:block th:if="${affair.affairType1 eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></th:block>
</th:block> </th:block>
</td>
<td>
<th:block th:each="commonCode:${session.commonCode.get('DC02')}"> <th:block th:each="commonCode:${session.commonCode.get('DC02')}">
<td th:if="${affair.affairType2 eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td> <th:block th:if="${affair.affairType2 eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></th:block>
</th:block> </th:block>
</td>
<td>
<th:block th:each="commonCode:${session.commonCode.get('DC03')}"> <th:block th:each="commonCode:${session.commonCode.get('DC03')}">
<td th:if="${affair.affairType3 eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td> <th:block th:if="${affair.affairType3 eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></th:block>
</th:block> </th:block>
</td>
<td>
<th:block th:each="commonCode:${session.commonCode.get('DC04')}"> <th:block th:each="commonCode:${session.commonCode.get('DC04')}">
<td th:if="${affair.affairType4 eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td> <th:block th:if="${affair.affairType4 eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></th:block>
</th:block> </th:block>
</td>
<td th:text="${affair.title}"></td> <td th:text="${affair.title}"></td>
<td>
<th:block th:each="commonCode:${session.commonCode.get('OG')}"> <th:block th:each="commonCode:${session.commonCode.get('OG')}">
<td th:if="${affair.wrtOrgan eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td> <th:block th:if="${affair.wrtOrgan eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></th:block>
</th:block> </th:block>
</td>
<td>
<th:block th:each="commonCode:${session.commonCode.get('OFC')}"> <th:block th:each="commonCode:${session.commonCode.get('OFC')}">
<td th:if="${affair.wrtPart eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td> <th:block th:if="${affair.wrtPart eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></th:block>
</th:block> </th:block>
</td>
<td th:text="${affair.wrtUserNm}"></td> <td th:text="${affair.wrtUserNm}"></td>
<td th:text="${#temporals.format(affair.wrtDt, 'yyyy-MM-dd HH:mm')}"></td> <td th:text="${#temporals.format(affair.wrtDt, 'yyyy-MM-dd HH:mm')}"></td>
<td th:text="${affair.fileCnt eq null?'파일 없음':#strings.concat(affair.fileCnt,' 건')}"></td> <td th:text="${affair.fileCnt eq null?'파일 없음':#strings.concat(affair.fileCnt,' 건')}"></td>
<td>
<th:block th:each="commonCode:${session.commonCode.get('DST')}"> <th:block th:each="commonCode:${session.commonCode.get('DST')}">
<td th:if="${affair.affairStatus eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td> <th:block th:if="${affair.affairStatus eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></th:block>
</th:block> </th:block>
</td>
<th:block th:if="${page eq 'stay'}"> <th:block th:if="${page eq 'stay'}">
<th:block th:if="${apprvAuth eq 'APC004' or apprvAuth eq 'APC003'}"> <th:block th:if="${apprvAuth eq 'APC004' or apprvAuth eq 'APC003'}">
<td class="apprvTd"> <td class="apprvTd">

View File

@ -17,17 +17,26 @@
<div class="tab-content bg-white border border-top-0 p-2"> <div class="tab-content bg-white border border-top-0 p-2">
<div class="tab-pane fade p-2 show active" id="boardTabPanel" role="tabpanel" tabindex="0"> <div class="tab-pane fade p-2 show active" id="boardTabPanel" role="tabpanel" tabindex="0">
<div class="row mb-1"> <div class="row mb-1">
<label class="col-sm-1 col-form-label col-form-label-sm text-center">작성자</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center fw-bold">문서번호</label>
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${affair.wrtUserNm}"></label> <label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="|해양경찰청외사-${affair.affairKey}|"></label>
<label class="col-sm-1 col-form-label col-form-label-sm text-center">보고일자</label> </div>
<div class="row mb-1">
<label class="col-sm-1 col-form-label col-form-label-sm text-center fw-bold">작성자</label>
<label class="col-sm-2 col-form-label col-form-label-sm text-start">
<th:block th:each="code:${session.commonCode.get('JT')}">
<th:block th:if="${code.itemCd eq affair.wrtUserGrd}" th:text="${code.itemValue}"></th:block>
</th:block>
<th:block th:text="${affair.wrtUserNm}"></th:block>
</label>
<label class="col-sm-1 col-form-label col-form-label-sm text-center fw-bold">보고일자</label>
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${#temporals.format(affair.reportDt, 'yyyy-MM-dd')}"></label> <label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${#temporals.format(affair.reportDt, 'yyyy-MM-dd')}"></label>
<label class="col-sm-1 col-form-label col-form-label-sm text-center">공개여부</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center fw-bold">공개여부</label>
<th:block th:each="code:${session.commonCode.get('AVS')}"> <th:block th:each="code:${session.commonCode.get('AVS')}">
<th:block th:if="${code.itemCd eq affair.viewStatus}"> <th:block th:if="${code.itemCd eq affair.viewStatus}">
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${code.itemValue}"></label> <label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${code.itemValue}"></label>
</th:block> </th:block>
</th:block> </th:block>
<label class="col-sm-1 col-form-label col-form-label-sm text-center">상태</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center fw-bold">상태</label>
<th:block th:each="code:${session.commonCode.get('DST')}"> <th:block th:each="code:${session.commonCode.get('DST')}">
<th:block th:if="${code.itemCd eq affair.affairStatus}"> <th:block th:if="${code.itemCd eq affair.affairStatus}">
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${code.itemValue}"></label> <label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${code.itemValue}"></label>
@ -36,27 +45,27 @@
</div> </div>
<hr> <hr>
<div class="row"> <div class="row">
<label class="col-sm-1 col-form-label col-form-label-sm text-center">제목</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center fw-bold">제목</label>
<label class="col-sm-11 col-form-label col-form-label-sm text-start" th:text="${affair.title}"></label> <label class="col-sm-11 col-form-label col-form-label-sm text-start" th:text="${affair.title}"></label>
<label class="col-sm-1 col-form-label col-form-label-sm text-center">분야1</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center fw-bold">분야1</label>
<th:block th:each="code:${session.commonCode.get('DC01')}"> <th:block th:each="code:${session.commonCode.get('DC01')}">
<th:block th:if="${code.itemCd eq affair.affairType1}"> <th:block th:if="${code.itemCd eq affair.affairType1}">
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${code.itemValue}"></label> <label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${code.itemValue}"></label>
</th:block> </th:block>
</th:block> </th:block>
<label class="col-sm-1 col-form-label col-form-label-sm text-center">분야2</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center fw-bold">분야2</label>
<th:block th:each="code:${session.commonCode.get('DC02')}"> <th:block th:each="code:${session.commonCode.get('DC02')}">
<th:block th:if="${code.itemCd eq affair.affairType2}"> <th:block th:if="${code.itemCd eq affair.affairType2}">
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${code.itemValue}"></label> <label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${code.itemValue}"></label>
</th:block> </th:block>
</th:block> </th:block>
<label class="col-sm-1 col-form-label col-form-label-sm text-center">분야3</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center fw-bold">분야3</label>
<th:block th:each="code:${session.commonCode.get('DC03')}"> <th:block th:each="code:${session.commonCode.get('DC03')}">
<th:block th:if="${code.itemCd eq affair.affairType3}"> <th:block th:if="${code.itemCd eq affair.affairType3}">
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${code.itemValue}"></label> <label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${code.itemValue}"></label>
</th:block> </th:block>
</th:block> </th:block>
<label class="col-sm-1 col-form-label col-form-label-sm text-center">분야4</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center fw-bold">분야4</label>
<th:block th:each="code:${session.commonCode.get('DC04')}"> <th:block th:each="code:${session.commonCode.get('DC04')}">
<th:block th:if="${code.itemCd eq affair.affairType4}"> <th:block th:if="${code.itemCd eq affair.affairType4}">
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${code.itemValue}"></label> <label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${code.itemValue}"></label>
@ -65,18 +74,18 @@
</div> </div>
<hr> <hr>
<div class="row"> <div class="row">
<label class="col-sm-1 col-form-label col-form-label-sm text-center">내용</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center fw-bold">내용</label>
<div class="col-sm-11 form-control-sm" id="contentDiv"> <div class="col-sm-11 form-control-sm" id="contentDiv">
<div th:utext="${affair.content}"></div> <div th:utext="${affair.content}"></div>
</div> </div>
</div> </div>
<hr> <hr>
<div class="row mb-1"> <div class="row mb-1">
<label class="col-sm-1 col-form-label col-form-label-sm text-center">해시태그</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center fw-bold">해시태그</label>
<label class="col-sm-11 col-form-label col-form-label-sm text-start" th:text="${affair.hashTags}"></label> <label class="col-sm-11 col-form-label col-form-label-sm text-start" th:text="${affair.hashTags}"></label>
</div> </div>
<div class="row mb-1"> <div class="row mb-1">
<label class="col-sm-1 col-form-label col-form-label-sm text-center">비고</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center fw-bold">비고</label>
<label class="col-sm-11 col-form-label col-form-label-sm text-start" th:text="${affair.etc}"></label> <label class="col-sm-11 col-form-label col-form-label-sm text-start" th:text="${affair.etc}"></label>
</div> </div>
</div> </div>
@ -111,7 +120,7 @@
<hr> <hr>
<th:block th:each="rate:${affair.rateList}"> <th:block th:each="rate:${affair.rateList}">
<div class="row py-1"> <div class="row py-1">
<label class="col-sm-1 col-form-label col-form-label-sm text-center"> <label class="col-sm-1 col-form-label col-form-label-sm text-center fw-bold">
<th:block th:each="code:${session.commonCode.get('OG')}"> <th:block th:each="code:${session.commonCode.get('OG')}">
<th:block th:if="${code.itemCd eq rate.ratingOrgan}" th:text="${code.itemValue}"></th:block> <th:block th:if="${code.itemCd eq rate.ratingOrgan}" th:text="${code.itemValue}"></th:block>
</th:block> </th:block>
@ -121,24 +130,24 @@
<label class="col-sm-auto col-form-label col-form-label-sm text-center">결재정보가 없습니다.</label> <label class="col-sm-auto col-form-label col-form-label-sm text-center">결재정보가 없습니다.</label>
</div> </div>
<div class="row" th:if="${rate.sectionApprv ne null}"> <div class="row" th:if="${rate.sectionApprv ne null}">
<label class="col-sm-auto col-form-label col-form-label-sm text-center">결재결과: </label> <label class="col-sm-auto col-form-label col-form-label-sm text-center fw-bold">결재결과: </label>
<label class="col-sm-auto col-form-label col-form-label-sm text-start"> <label class="col-sm-auto col-form-label col-form-label-sm text-start">
<th:block th:each="code:${session.commonCode.get('DST')}"> <th:block th:each="code:${session.commonCode.get('DST')}">
<th:block th:if="${code.itemCd eq rate.sectionApprv}" th:text="${code.itemValue}"></th:block> <th:block th:if="${code.itemCd eq rate.sectionApprv}" th:text="${code.itemValue}"></th:block>
</th:block> </th:block>
</label> </label>
<label class="col-sm-auto col-form-label col-form-label-sm text-center">결재자: </label> <label class="col-sm-auto col-form-label col-form-label-sm text-center fw-bold">결재자: </label>
<label class="col-sm-auto col-form-label col-form-label-sm text-start" th:text="${rate.sectionNm}"></label> <label class="col-sm-auto col-form-label col-form-label-sm text-start" th:text="${rate.sectionNm}"></label>
<label class="col-sm-auto col-form-label col-form-label-sm text-center">결재일시: </label> <label class="col-sm-auto col-form-label col-form-label-sm text-center fw-bold">결재일시: </label>
<label class="col-sm-auto col-form-label col-form-label-sm text-start" th:text="${#temporals.format(rate.sectionApprvDt, 'yyyy-MM-dd HH:mm:ss')}"></label> <label class="col-sm-auto col-form-label col-form-label-sm text-start" th:text="${#temporals.format(rate.sectionApprvDt, 'yyyy-MM-dd HH:mm:ss')}"></label>
</div> </div>
<div class="row" th:if="${rate.sectionApprv ne null and !#strings.isEmpty(rate.sectionEtc)}"> <div class="row" th:if="${rate.sectionApprv ne null and !#strings.isEmpty(rate.sectionEtc)}">
<label class="col-sm-auto col-form-label col-form-label-sm text-center">기타의견: </label> <label class="col-sm-auto col-form-label col-form-label-sm text-center fw-bold">기타의견: </label>
<label class="col-sm-auto col-form-label col-form-label-sm text-start" th:text="${rate.sectionEtc}"></label> <label class="col-sm-auto col-form-label col-form-label-sm text-start" th:text="${rate.sectionEtc}"></label>
</div> </div>
<div class="row" th:if="${rate.headApprv ne null}"> <div class="row" th:if="${rate.headApprv ne null}">
<th:block th:if="${rate.headApprv eq 'DST006'}"> <th:block th:if="${rate.headApprv eq 'DST006'}">
<label class="col-sm-auto col-form-label col-form-label-sm text-center">견문평가: </label> <label class="col-sm-auto col-form-label col-form-label-sm text-center fw-bold">견문평가: </label>
<label class="col-sm-auto col-form-label col-form-label-sm text-start"> <label class="col-sm-auto col-form-label col-form-label-sm text-start">
<th:block th:each="code:${session.commonCode.get('AAR')}"> <th:block th:each="code:${session.commonCode.get('AAR')}">
<th:block th:if="${code.itemCd eq rate.affairRate}" th:text="|${code.itemValue}${rate.organUp eq 'T'?'(상보)':''}|"></th:block> <th:block th:if="${code.itemCd eq rate.affairRate}" th:text="|${code.itemValue}${rate.organUp eq 'T'?'(상보)':''}|"></th:block>
@ -146,20 +155,20 @@
</label> </label>
</th:block> </th:block>
<th:block th:if="${rate.headApprv eq 'DST005'}"> <th:block th:if="${rate.headApprv eq 'DST005'}">
<label class="col-sm-auto col-form-label col-form-label-sm text-center">결재결과: </label> <label class="col-sm-auto col-form-label col-form-label-sm text-center fw-bold">결재결과: </label>
<label class="col-sm-auto col-form-label col-form-label-sm text-start"> <label class="col-sm-auto col-form-label col-form-label-sm text-start">
<th:block th:each="code:${session.commonCode.get('DST')}"> <th:block th:each="code:${session.commonCode.get('DST')}">
<th:block th:if="${code.itemCd eq rate.headApprv}" th:text="${code.itemValue}"></th:block> <th:block th:if="${code.itemCd eq rate.headApprv}" th:text="${code.itemValue}"></th:block>
</th:block> </th:block>
</label> </label>
</th:block> </th:block>
<label class="col-sm-auto col-form-label col-form-label-sm text-center">결재자: </label> <label class="col-sm-auto col-form-label col-form-label-sm text-center fw-bold">결재자: </label>
<label class="col-sm-auto col-form-label col-form-label-sm text-start" th:text="${rate.headNm}"></label> <label class="col-sm-auto col-form-label col-form-label-sm text-start" th:text="${rate.headNm}"></label>
<label class="col-sm-auto col-form-label col-form-label-sm text-center">결재일시: </label> <label class="col-sm-auto col-form-label col-form-label-sm text-center fw-bold">결재일시: </label>
<label class="col-sm-auto col-form-label col-form-label-sm text-start" th:text="${#temporals.format(rate.headApprvDt, 'yyyy-MM-dd HH:mm:ss')}"></label> <label class="col-sm-auto col-form-label col-form-label-sm text-start" th:text="${#temporals.format(rate.headApprvDt, 'yyyy-MM-dd HH:mm:ss')}"></label>
</div> </div>
<div class="row" th:if="${rate.headApprv ne null and !#strings.isEmpty(rate.headEtc)}"> <div class="row" th:if="${rate.headApprv ne null and !#strings.isEmpty(rate.headEtc)}">
<label class="col-sm-auto col-form-label col-form-label-sm text-center">기타의견: </label> <label class="col-sm-auto col-form-label col-form-label-sm text-center fw-bold">기타의견: </label>
<label class="col-sm-auto col-form-label col-form-label-sm text-start" th:text="${rate.headEtc}"></label> <label class="col-sm-auto col-form-label col-form-label-sm text-start" th:text="${rate.headEtc}"></label>
</div> </div>
</div> </div>
@ -217,8 +226,16 @@
</div> </div>
</div> </div>
<div class="modal-footer bg-light"> <div class="modal-footer bg-light">
<th:block th:unless="${affair.affairStatus eq 'DST004' or affair.affairStatus eq 'DST006'}"><!--승인 상태일때는 수정 불가--> <th:block th:unless="${affair.affairStatus eq 'DST004' or affair.affairStatus eq 'DST006'}">
<th:block th:if="${userSeq eq affair.wrtUserSeq or accessAuth eq 'ACC003'}"><!--작성자일 경우 수정 허용--><!--관리자일 경우 수정 허용--> <!--승인 상태일때는 수정 불가-->
<th:block th:if="${userSeq eq affair.wrtUserSeq or accessAuth eq 'ACC003'}">
<!--작성자일 경우 수정 허용--><!--관리자일 경우 수정 허용-->
<button type="button" class="btn btn-warning" id="editAffairBtn">수정</button>
</th:block>
</th:block>
<th:block th:if="${affair.affairStatus eq 'DST004' or affair.affairStatus eq 'DST006'}">
<!--승인 상태일때 본청 관리자 수정 허용-->
<th:block th:if="${userOrgan eq 'OG001' and accessAuth eq 'ACC003'}">
<button type="button" class="btn btn-warning" id="editAffairBtn">수정</button> <button type="button" class="btn btn-warning" id="editAffairBtn">수정</button>
</th:block> </th:block>
</th:block> </th:block>

View File

@ -9,7 +9,7 @@
<div class="mb-3 mt-3 row"> <div class="mb-3 mt-3 row">
<label for="dicCode" class="col-sm-2 col-form-label col-form-label-sm text-center ">공무원식별번호</label> <label for="dicCode" class="col-sm-2 col-form-label col-form-label-sm text-center ">공무원식별번호</label>
<div class="col-sm-3"> <div class="col-sm-3">
<input type="text" class="form-control form-control-sm" id="dicCode" name="dicCode" autocomplete="off" th:value="${userInfo.dicCode}"> <input type="text" class="form-control form-control-sm" id="dicCode" name="dicCode" autocomplete="off" th:value="${userInfo.dic}">
<label for="dicCode" style="font-size: 12px" th:text="${msg}"></label> <label for="dicCode" style="font-size: 12px" th:text="${msg}"></label>
</div> </div>
<button type="button" class="btn btn-sm btn-outline-primary col-sm-1" id="dicCodeSearchBtn">검색</button> <button type="button" class="btn btn-sm btn-outline-primary col-sm-1" id="dicCodeSearchBtn">검색</button>