Merge branch 'master' of http://118.219.150.34:50501/DBNT/FAISP
commit
bb79a6cea2
|
|
@ -0,0 +1,65 @@
|
||||||
|
package com.dbnt.faisp.main.userInfo;
|
||||||
|
|
||||||
|
|
||||||
|
import com.dbnt.faisp.main.authMgt.service.AuthMgtService;
|
||||||
|
import com.dbnt.faisp.main.codeMgt.service.CodeMgtService;
|
||||||
|
import com.dbnt.faisp.main.userInfo.model.UserInfo;
|
||||||
|
import com.dbnt.faisp.main.userInfo.service.UserInfoService;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.springframework.security.core.annotation.AuthenticationPrincipal;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RequestMapping("/faisp")
|
||||||
|
public class FaispController {
|
||||||
|
|
||||||
|
private final AuthMgtService authMgtService;
|
||||||
|
private final CodeMgtService codeMgtService;
|
||||||
|
private final UserInfoService userInfoService;
|
||||||
|
|
||||||
|
|
||||||
|
@GetMapping("/policeList")
|
||||||
|
public ModelAndView partInfoList(@AuthenticationPrincipal UserInfo loginUser,UserInfo userInfo, HttpServletResponse response) {
|
||||||
|
ModelAndView mav = new ModelAndView("faisp/policeList");
|
||||||
|
userInfo.setDownOrganCdList(loginUser.getDownOrganCdList());
|
||||||
|
if(userInfo.getUserStatus() == null) {
|
||||||
|
userInfo.setUserStatus("USC003");
|
||||||
|
}
|
||||||
|
|
||||||
|
//메뉴권한 확인
|
||||||
|
String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/faisp/policeList").get(0).getAccessAuth();
|
||||||
|
mav.addObject("accessAuth", accessAuth);
|
||||||
|
userInfo.setQueryInfo();
|
||||||
|
mav.addObject("policeList", userInfoService.selectPoliceList(userInfo));
|
||||||
|
userInfo.setContentCnt(userInfoService.selectPoliceListCnt(userInfo));
|
||||||
|
userInfo.setPaginationInfo();
|
||||||
|
mav.addObject("mgtOrganList", loginUser.getDownOrganCdList());
|
||||||
|
mav.addObject("userSatus", userInfo.getUserStatus());
|
||||||
|
mav.addObject("searchParams", userInfo);
|
||||||
|
return mav;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/policeEditModal")
|
||||||
|
public ModelAndView menuEditModal(UserInfo userInfo){
|
||||||
|
ModelAndView mav = new ModelAndView("/faisp/policeEditModal");
|
||||||
|
mav.addObject("ogList", codeMgtService.selectCodeMgtList("OG"));
|
||||||
|
mav.addObject("ofcList", codeMgtService.selectCodeMgtList("OFC"));
|
||||||
|
mav.addObject("titleList", codeMgtService.selectCodeMgtList("JT"));
|
||||||
|
mav.addObject("outturnList", codeMgtService.selectCodeMgtList("OTC"));
|
||||||
|
mav.addObject("seriesList", codeMgtService.selectCodeMgtList("SRC"));
|
||||||
|
mav.addObject("languageList", codeMgtService.selectCodeMgtList("LNG"));
|
||||||
|
mav.addObject("statusList", codeMgtService.selectCodeMgtList("USC"));
|
||||||
|
|
||||||
|
mav.addObject("userInfo", userInfoService.selectUserInfo(userInfo.getUserSeq()));
|
||||||
|
return mav;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -17,4 +17,8 @@ public interface UserInfoMapper {
|
||||||
List<ParamMap> selectManagerList(ParamMap param);
|
List<ParamMap> selectManagerList(ParamMap param);
|
||||||
|
|
||||||
List<DashboardConfig> selectDashboardConfigList(Integer userSeq);
|
List<DashboardConfig> selectDashboardConfigList(Integer userSeq);
|
||||||
|
|
||||||
|
List<UserInfo> selectPoliceList(UserInfo userInfo);
|
||||||
|
|
||||||
|
Integer selectPoliceListCnt(UserInfo userInfo);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,121 @@
|
||||||
|
package com.dbnt.faisp.main.userInfo.model;
|
||||||
|
|
||||||
|
|
||||||
|
import com.dbnt.faisp.config.BaseModel;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
import org.hibernate.annotations.DynamicInsert;
|
||||||
|
import org.hibernate.annotations.DynamicUpdate;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
|
|
||||||
|
import javax.persistence.*;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@Entity
|
||||||
|
@NoArgsConstructor
|
||||||
|
@DynamicInsert
|
||||||
|
@DynamicUpdate
|
||||||
|
@IdClass(UserInfoHistory.UserInfoHistoryId.class)
|
||||||
|
@Table(name = "user_info_history")
|
||||||
|
public class UserInfoHistory extends BaseModel implements Serializable{
|
||||||
|
@Id
|
||||||
|
@Column(name = "user_seq")
|
||||||
|
private Integer userSeq;
|
||||||
|
@Id
|
||||||
|
@Column(name = "version_no")
|
||||||
|
private Integer versionNo;
|
||||||
|
@Column(name = "dic_code")
|
||||||
|
private String dicCode;
|
||||||
|
@Column(name = "user_id")
|
||||||
|
private String userId;
|
||||||
|
@Column(name = "user_nm")
|
||||||
|
private String userNm;
|
||||||
|
@Column(name = "birth_date")
|
||||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||||
|
private LocalDate birthDate;
|
||||||
|
@Column(name = "sex")
|
||||||
|
private String sex;
|
||||||
|
@Column(name = "email")
|
||||||
|
private String email;
|
||||||
|
@Column(name = "phone_no")
|
||||||
|
private String phoneNo;
|
||||||
|
@Column(name = "area_cd")
|
||||||
|
private String areaCd;
|
||||||
|
@Column(name = "og_cd")
|
||||||
|
private String ogCd;
|
||||||
|
@Column(name = "ofc_cd")
|
||||||
|
private String ofcCd;
|
||||||
|
@Column(name = "title_cd")
|
||||||
|
private String titleCd;
|
||||||
|
@Column(name = "group_cd")
|
||||||
|
private String groupCd;
|
||||||
|
@Column(name = "series_cd")
|
||||||
|
private String seriesCd;
|
||||||
|
@Column(name = "ofc_head_yn")
|
||||||
|
private String ofcHeadYn;
|
||||||
|
@Column(name = "hiring_cd")
|
||||||
|
private String hiringCd;
|
||||||
|
@Column(name = "employ_cd")
|
||||||
|
private String employCd;
|
||||||
|
@Column(name = "outturn_cd")
|
||||||
|
private String outturnCd;
|
||||||
|
@Column(name = "work_cd")
|
||||||
|
private String workCd;
|
||||||
|
@Column(name = "job_in_cd")
|
||||||
|
private String jobInCd;
|
||||||
|
@Column(name = "language_cd")
|
||||||
|
private String languageCd;
|
||||||
|
@Column(name = "police_in_date")
|
||||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||||
|
private LocalDate policeInDate;
|
||||||
|
@Column(name = "organ_in_date")
|
||||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||||
|
private LocalDate organInDate;
|
||||||
|
@Column(name = "ofc_in_date")
|
||||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||||
|
private LocalDate ofcInDate;
|
||||||
|
@Column(name = "title_in_date")
|
||||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||||
|
private LocalDate titleInDate;
|
||||||
|
@Column(name = "user_status")
|
||||||
|
private String userStatus;
|
||||||
|
@Column(name = "wrt_organ")
|
||||||
|
private String wrtOrgan;
|
||||||
|
@Column(name = "wrt_part")
|
||||||
|
private String wrtPart;
|
||||||
|
@Column(name = "wrt_title")
|
||||||
|
private String wrtTitle;
|
||||||
|
@Column(name = "wrt_user_seq")
|
||||||
|
private Integer wrtUserSeq;
|
||||||
|
@Column(name = "wrt_nm")
|
||||||
|
private String wrtNm;
|
||||||
|
@Column(name = "wrt_dt")
|
||||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
|
||||||
|
private LocalDateTime wrtDt;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Embeddable
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public static class UserInfoHistoryId implements Serializable {
|
||||||
|
private Integer userSeq;
|
||||||
|
private Integer versionNo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.dbnt.faisp.main.userInfo.repository;
|
||||||
|
|
||||||
|
import com.dbnt.faisp.main.userInfo.model.UserInfoHistory;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public interface UserInfoHistoryRepository extends JpaRepository<UserInfoHistory, UserInfoHistory.UserInfoHistoryId> {
|
||||||
|
|
||||||
|
UserInfoHistory findByUserSeq(Integer userSeq);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
package com.dbnt.faisp.main.userInfo.service;
|
package com.dbnt.faisp.main.userInfo.service;
|
||||||
|
|
||||||
import com.dbnt.faisp.config.Role;
|
import com.dbnt.faisp.config.Role;
|
||||||
|
import com.dbnt.faisp.main.fipTarget.model.PartInfo;
|
||||||
import com.dbnt.faisp.main.userInfo.mapper.UserInfoMapper;
|
import com.dbnt.faisp.main.userInfo.mapper.UserInfoMapper;
|
||||||
import com.dbnt.faisp.main.userInfo.model.DashboardConfig;
|
import com.dbnt.faisp.main.userInfo.model.DashboardConfig;
|
||||||
import com.dbnt.faisp.main.userInfo.model.UserInfo;
|
import com.dbnt.faisp.main.userInfo.model.UserInfo;
|
||||||
|
import com.dbnt.faisp.main.userInfo.model.UserInfoHistory;
|
||||||
import com.dbnt.faisp.main.userInfo.repository.DashboardConfigRepository;
|
import com.dbnt.faisp.main.userInfo.repository.DashboardConfigRepository;
|
||||||
|
import com.dbnt.faisp.main.userInfo.repository.UserInfoHistoryRepository;
|
||||||
import com.dbnt.faisp.main.userInfo.repository.UserInfoRepository;
|
import com.dbnt.faisp.main.userInfo.repository.UserInfoRepository;
|
||||||
import com.dbnt.faisp.util.ParamMap;
|
import com.dbnt.faisp.util.ParamMap;
|
||||||
|
|
||||||
|
|
@ -24,6 +27,7 @@ import java.util.List;
|
||||||
public class UserInfoService implements UserDetailsService {
|
public class UserInfoService implements UserDetailsService {
|
||||||
|
|
||||||
private final UserInfoRepository userInfoRepository;
|
private final UserInfoRepository userInfoRepository;
|
||||||
|
private final UserInfoHistoryRepository userInfoHistoryRepository;
|
||||||
private final DashboardConfigRepository dashboardConfigRepository;
|
private final DashboardConfigRepository dashboardConfigRepository;
|
||||||
private final UserInfoMapper userInfoMapper;
|
private final UserInfoMapper userInfoMapper;
|
||||||
|
|
||||||
|
|
@ -36,7 +40,46 @@ public class UserInfoService implements UserDetailsService {
|
||||||
userInfo.setUserStatus("USC002");
|
userInfo.setUserStatus("USC002");
|
||||||
userInfo.setPassword(convertPassword(userInfo.getPassword()));
|
userInfo.setPassword(convertPassword(userInfo.getPassword()));
|
||||||
userInfo.setWrtDt(LocalDateTime.now());
|
userInfo.setWrtDt(LocalDateTime.now());
|
||||||
return userInfoRepository.save(userInfo).getUserId();
|
UserInfo result = userInfoRepository.save(userInfo);
|
||||||
|
UserInfoHistory dbHis = userInfoHistoryRepository.findByUserSeq(result.getUserSeq());
|
||||||
|
if(dbHis == null) {
|
||||||
|
UserInfoHistory hisTmp = new UserInfoHistory();
|
||||||
|
hisTmp.setUserSeq(result.getUserSeq());
|
||||||
|
hisTmp.setVersionNo(1);
|
||||||
|
hisTmp.setDicCode(result.getDicCode());
|
||||||
|
hisTmp.setUserId(result.getUserId());
|
||||||
|
hisTmp.setUserNm(result.getUserNm());
|
||||||
|
hisTmp.setBirthDate(result.getBirthDate());
|
||||||
|
hisTmp.setSex(result.getSex());
|
||||||
|
hisTmp.setEmail(result.getEmail());
|
||||||
|
hisTmp.setPhoneNo(result.getPhoneNo());
|
||||||
|
hisTmp.setAreaCd(result.getAreaCd());
|
||||||
|
hisTmp.setOgCd(result.getOgCd());
|
||||||
|
hisTmp.setOfcCd(result.getOfcCd());
|
||||||
|
hisTmp.setTitleCd(result.getTitleCd());
|
||||||
|
hisTmp.setGroupCd(result.getGroupCd());
|
||||||
|
hisTmp.setSeriesCd(result.getSeriesCd());
|
||||||
|
hisTmp.setOfcHeadYn(result.getOfcHeadYn());
|
||||||
|
hisTmp.setHiringCd(result.getHiringCd());
|
||||||
|
hisTmp.setEmployCd(result.getEmployCd());
|
||||||
|
hisTmp.setOutturnCd(result.getOutturnCd());
|
||||||
|
hisTmp.setWorkCd(result.getWorkCd());
|
||||||
|
hisTmp.setJobInCd(result.getJobInCd());
|
||||||
|
hisTmp.setLanguageCd(result.getLanguageCd());
|
||||||
|
hisTmp.setPoliceInDate(result.getPoliceInDate());
|
||||||
|
hisTmp.setOrganInDate(result.getOrganInDate());
|
||||||
|
hisTmp.setOfcInDate(result.getOfcInDate());
|
||||||
|
hisTmp.setTitleInDate(result.getTitleInDate());
|
||||||
|
hisTmp.setUserStatus(result.getUserStatus());
|
||||||
|
hisTmp.setWrtOrgan(result.getOgCd());
|
||||||
|
hisTmp.setWrtPart(result.getOfcCd());
|
||||||
|
hisTmp.setWrtTitle(result.getTitleCd());
|
||||||
|
hisTmp.setWrtUserSeq(result.getUserSeq());
|
||||||
|
hisTmp.setWrtNm(result.getUserNm());
|
||||||
|
hisTmp.setWrtDt(result.getWrtDt());
|
||||||
|
userInfoHistoryRepository.save(hisTmp);
|
||||||
|
}
|
||||||
|
return result.getUserId();
|
||||||
}
|
}
|
||||||
@Transactional
|
@Transactional
|
||||||
public void updateUserInfo(UserInfo userInfo){
|
public void updateUserInfo(UserInfo userInfo){
|
||||||
|
|
@ -188,4 +231,11 @@ public class UserInfoService implements UserDetailsService {
|
||||||
}
|
}
|
||||||
dashboardConfigRepository.saveAll(configList);
|
dashboardConfigRepository.saveAll(configList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<UserInfo> selectPoliceList(UserInfo userInfo) {
|
||||||
|
return userInfoMapper.selectPoliceList(userInfo);
|
||||||
|
}
|
||||||
|
public Integer selectPoliceListCnt(UserInfo userInfo) {
|
||||||
|
return userInfoMapper.selectPoliceListCnt(userInfo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -80,4 +80,58 @@
|
||||||
where b.user_seq = #{userSeq}
|
where b.user_seq = #{userSeq}
|
||||||
order by b.order_num
|
order by b.order_num
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<sql id="selectPoliceListWhere">
|
||||||
|
<where>
|
||||||
|
user_status = #{userStatus}
|
||||||
|
and og_cd in
|
||||||
|
<foreach collection="downOrganCdList" item="item" index="index" separator="," open="(" close=")">
|
||||||
|
#{item}
|
||||||
|
</foreach>
|
||||||
|
</where>
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
<select id="selectPoliceList" resultType="UserInfo" parameterType="UserInfo">
|
||||||
|
select user_seq,
|
||||||
|
(select item_value from code_mgt where item_cd = title_cd) as title_cd,
|
||||||
|
user_nm,
|
||||||
|
og_cd,
|
||||||
|
(select item_value from code_mgt where item_cd = og_cd) as organ_nm,
|
||||||
|
(select item_value from code_mgt where item_cd = ofc_cd) as ofc_cd,
|
||||||
|
birth_date,
|
||||||
|
(select item_value from code_mgt where item_cd = sex) as sex,
|
||||||
|
police_in_date,
|
||||||
|
title_in_date,
|
||||||
|
ofc_in_date,
|
||||||
|
(select item_value from code_mgt where item_cd = outturn_cd) as outturn_cd,
|
||||||
|
(select item_value from code_mgt where item_cd = job_in_cd) as job_in_cd,
|
||||||
|
wrt_dt
|
||||||
|
from user_info
|
||||||
|
<include refid="selectPoliceListWhere"></include>
|
||||||
|
order by user_seq desc
|
||||||
|
limit #{rowCnt} offset #{firstIndex}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectPoliceListCnt" resultType="Integer" parameterType="UserInfo">
|
||||||
|
select count(*)
|
||||||
|
from(
|
||||||
|
select user_seq,
|
||||||
|
(select item_value from code_mgt where item_cd = title_cd) as title_cd,
|
||||||
|
user_nm,
|
||||||
|
og_cd,
|
||||||
|
(select item_value from code_mgt where item_cd = og_cd) as organ_nm,
|
||||||
|
(select item_value from code_mgt where item_cd = ofc_cd) as ofc_cd,
|
||||||
|
birth_date,
|
||||||
|
(select item_value from code_mgt where item_cd = sex) as sex,
|
||||||
|
police_in_date,
|
||||||
|
title_in_date,
|
||||||
|
ofc_in_date,
|
||||||
|
(select item_value from code_mgt where item_cd = outturn_cd) as outturn_cd,
|
||||||
|
(select item_value from code_mgt where item_cd = job_in_cd) as job_in_cd,
|
||||||
|
wrt_dt
|
||||||
|
from user_info
|
||||||
|
<include refid="selectPoliceListWhere"></include>
|
||||||
|
order by user_seq desc
|
||||||
|
) a
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
$(document).on('click', '.policeTr', function (){
|
||||||
|
const userSeq = (Number($(this).find(".userSeq").val()));
|
||||||
|
console.log(userSeq);
|
||||||
|
showModal(userSeq);
|
||||||
|
});
|
||||||
|
|
||||||
|
function showModal(userSeq){
|
||||||
|
$.ajax({
|
||||||
|
url: '/faisp/policeEditModal',
|
||||||
|
data: {userSeq: userSeq},
|
||||||
|
type: 'GET',
|
||||||
|
dataType:"html",
|
||||||
|
success: function(html){
|
||||||
|
$("#policeEditModalContent").empty().append(html);
|
||||||
|
$("#policeEditModal").modal('show');
|
||||||
|
},
|
||||||
|
error:function(){
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,149 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="menuEditModalLabel">외사경찰 수정</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form id="userInfoUpdate" action="#" method="post">
|
||||||
|
<input type="hidden" name="userSeq" id="userSeq" class="userSeq" th:value="${userInfo.userSeq}">
|
||||||
|
<input type="hidden" name="userStatus" th:value="${userInfo.userStatus}">
|
||||||
|
<div class="mb-3 mt-3 row">
|
||||||
|
<label for="dicCode" class="col-sm-2 col-form-label col-form-label-sm text-center ">공무원식별번호</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<input type="text" class="form-control form-control-sm" id="dicCode" name="dicCode" autocomplete="off" th:value="${userInfo.dicCode}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="userId" class="col-sm-2 col-form-label col-form-label-sm text-center ">아이디</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<input type="text" class="form-control form-control-sm" id="userId" name="userId" autocomplete="off" th:value="${userInfo.userId}" readonly>
|
||||||
|
<label for="userId" style="font-size: 12px">아이디는 수정할 수 없습니다.</label>
|
||||||
|
</div>
|
||||||
|
<label for="userNm" class="col-sm-2 col-form-label col-form-label-sm text-center">이름</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<input type="text" class=" form-control form-control-sm" id="userNm" name="userNm" autocomplete="off" th:value="${userInfo.userNm}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="phoneNo" class="col-sm-2 col-form-label col-form-label-sm text-center">휴대전화</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<input type="tel" class="form-control form-control-sm" id="phoneNo" name="phoneNo" th:value="${userInfo.phoneNo}">
|
||||||
|
</div>
|
||||||
|
<label for="email" class="col-sm-2 col-form-label col-form-label-sm text-center">이메일</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<input type="email" class="form-control form-control-sm" id="email" name="email" th:value="${userInfo.email}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="sex" class="col-sm-2 col-form-label col-form-label-sm text-center">성별</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<select class="form-select form-select-sm" id="sex" name="sex">
|
||||||
|
<option value="M" th:selected="${userInfo.sex eq 'M'}">남</option>
|
||||||
|
<option value="F" th:selected="${userInfo.sex eq 'F'}">여</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="birthDate" class="col-sm-2 col-form-label col-form-label-sm text-center">생년월일</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<input type="text" class="form-control form-control-sm dateSelector" id="birthDate" name="birthDate" th:value="${userInfo.birthDate}" readonly>
|
||||||
|
</div>
|
||||||
|
<label for="policeInDate" class="col-sm-2 col-form-label col-form-label-sm text-center">해양경찰배명일</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<input type="text" class="form-control form-control-sm dateSelector" id="policeInDate" name="policeInDate" th:value="${userInfo.policeInDate}" readonly>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="ogCd" class="col-sm-2 col-form-label col-form-label-sm text-center">관서</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<select class="form-select form-select-sm" id="ogCd" name="ogCd">
|
||||||
|
<option value="">--선택--</option>
|
||||||
|
<th:block th:each="code:${ogList}">
|
||||||
|
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq userInfo.ogCd}"></option>
|
||||||
|
</th:block>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<label for="organInDate" class="col-sm-2 col-form-label col-form-label-sm text-center">현관서전입일</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<input type="text" class="form-control form-control-sm dateSelector" id="organInDate" name="organInDate" th:value="${userInfo.organInDate}" readonly>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="ofcCd" class="col-sm-2 col-form-label col-form-label-sm text-center">부서</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<select class="form-select form-select-sm" id="ofcCd" name="ofcCd">
|
||||||
|
<option value="">--선택--</option>
|
||||||
|
<th:block th:each="code:${ofcList}">
|
||||||
|
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq userInfo.ofcCd}"></option>
|
||||||
|
</th:block>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<label for="ofcInDate" class="col-sm-2 col-form-label col-form-label-sm text-center">현부서임용일</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<input type="text" class="form-control form-control-sm dateSelector" id="ofcInDate" name="ofcInDate" th:value="${userInfo.ofcInDate}" readonly>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="ogCd" class="col-sm-2 col-form-label col-form-label-sm text-center">계급</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<select class="form-select form-select-sm" id="titleCd" name="titleCd">
|
||||||
|
<option value="">--선택--</option>
|
||||||
|
<th:block th:each="code:${titleList}">
|
||||||
|
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq userInfo.titleCd}"></option>
|
||||||
|
</th:block>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<label for="titleInDate" class="col-sm-2 col-form-label col-form-label-sm text-center">현계급임용일</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<input type="text" class="form-control form-control-sm dateSelector" id="titleInDate" name="titleInDate" th:value="${userInfo.titleInDate}" readonly>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="outturnCd" class="col-sm-2 col-form-label col-form-label-sm text-center">경과</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<select class="form-select form-select-sm" id="outturnCd" name="outturnCd">
|
||||||
|
<option value="">--선택--</option>
|
||||||
|
<th:block th:each="code:${outturnList}">
|
||||||
|
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq userInfo.outturnCd}"></option>
|
||||||
|
</th:block>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<label for="seriesCd" class="col-sm-2 col-form-label col-form-label-sm text-center">직별</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<select class="form-select form-select-sm" id="seriesCd" name="seriesCd">
|
||||||
|
<option value="">--선택--</option>
|
||||||
|
<th:block th:each="code:${seriesList}">
|
||||||
|
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq userInfo.seriesCd}"></option>
|
||||||
|
</th:block>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="languageCd" class="col-sm-2 col-form-label col-form-label-sm text-center">외국어특채</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<select class="form-select form-select-sm" id="languageCd" name="languageCd">
|
||||||
|
<option value="">--선택--</option>
|
||||||
|
<th:block th:each="code:${languageList}">
|
||||||
|
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq userInfo.languageCd}"></option>
|
||||||
|
</th:block>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer row justify-content-between">
|
||||||
|
<div class="col-auto">
|
||||||
|
<th:block th:if="${userInfo.userStatus eq 'USC003'}">
|
||||||
|
<button type="button" class="btn btn-info" id="syncToKwmsBtn" th:disabled="${#strings.isEmpty(userInfo.dicCode)}">인사시스템 정보 불러오기</button>
|
||||||
|
<th:block th:if="${#strings.isEmpty(userInfo.dicCode)}">
|
||||||
|
<label for="syncToKwmsBtn" style="font-size: 12px">공무원식별번호가 필요합니다.</label>
|
||||||
|
</th:block>
|
||||||
|
</th:block>
|
||||||
|
</div>
|
||||||
|
<div class="col-auto">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>
|
||||||
|
<button type="button" class="btn btn-warning" id="updateBtn">수정</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,171 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ko" xmlns:th="http://www.thymeleaf.org"
|
||||||
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
|
layout:decorate="~{layout/layout}">
|
||||||
|
<th:block layout:fragment="script">
|
||||||
|
<script type="text/javascript" th:src="@{/js/faisp/police.js}"></script>
|
||||||
|
</th:block>
|
||||||
|
<div layout:fragment="content">
|
||||||
|
<main class="pt-3">
|
||||||
|
<h4>現 외사경찰 현황</h4>
|
||||||
|
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
|
||||||
|
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
|
||||||
|
<div class="row mx-0">
|
||||||
|
<div class="col-12 card text-center">
|
||||||
|
<div class="card-body">
|
||||||
|
<form id="searchFm" method="get" th:action="@{/faisp/policeList}">
|
||||||
|
<input type="hidden" name="excel">
|
||||||
|
<input type="hidden" name="pageIndex" id="pageIndex" th:value="${searchParams.pageIndex}">
|
||||||
|
<div class="row justify-content-between pe-3 py-1">
|
||||||
|
<div class="col-auto">
|
||||||
|
<select class="form-select" name="rowCnt" id="rowCnt">
|
||||||
|
<th:block th:each="num : ${#numbers.sequence(1,5)}">
|
||||||
|
<option th:value="${num*10}" th:text="${num*10}" th:selected="${searchParams.rowCnt==num*10}"></option>
|
||||||
|
</th:block>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-auto">
|
||||||
|
<button type="button" class="btn btn-success" id="goExcel">엑셀다운</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row justify-content-end pe-3 py-1">
|
||||||
|
<div class="col-auto">
|
||||||
|
<div class="row justify-content-end">
|
||||||
|
<div class="col-auto" th:if="${accessAuth eq 'ACC003'}">
|
||||||
|
<select class="form-select form-select-sm" name="mgtOrgan">
|
||||||
|
<option value="">관서</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-auto">
|
||||||
|
<select class="form-select form-select-sm" name="detailType">
|
||||||
|
<option value="">성별</option>
|
||||||
|
<th:block th:each="commonCode:${session.commonCode.get('PVREUSE')}">
|
||||||
|
<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" placeholder="이름" name="useNo">
|
||||||
|
</div>
|
||||||
|
<input type="submit" class="btn btn-sm btn-primary col-auto" id="searchBtn" value="검색">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<div class="row justify-content-start">
|
||||||
|
<div class="col-12">
|
||||||
|
<ul class="nav nav-tabs" id="userTab" role="tablist">
|
||||||
|
<li class="nav-item" role="presentation">
|
||||||
|
<button class="nav-link active" id="affairTab" data-bs-toggle="tab" type="button" role="tab">現외사경찰</button>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" role="presentation">
|
||||||
|
<button class="nav-link" id="stayTab" data-bs-toggle="tab" type="button" role="tab">前외사경찰</button>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" role="presentation">
|
||||||
|
<button class="nav-link" id="commitTab" data-bs-toggle="tab" type="button" role="tab">非외사경찰</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="row">
|
||||||
|
<table class="table table-hover table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>순번</th>
|
||||||
|
<th>계급</th>
|
||||||
|
<th>성명</th>
|
||||||
|
<th>청</th>
|
||||||
|
<th>현부서<br>과</th>
|
||||||
|
<th>생년월일</th>
|
||||||
|
<th>성별</th>
|
||||||
|
<th>최초<br>임용</th>
|
||||||
|
<th>현 계급<br>임용</th>
|
||||||
|
<th>현 부서<br>임용</th>
|
||||||
|
<th>수사경과<br>보유여부</th>
|
||||||
|
<th>외사경력</th>
|
||||||
|
<th>입직<br>경로</th>
|
||||||
|
<th>최종<br>수정일</th>
|
||||||
|
<th>전출<input type="checkbox"></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody class="table-group-divider">
|
||||||
|
<tr class="policeTr" th:each="list:${policeList}">
|
||||||
|
<th:block>
|
||||||
|
<input type="hidden" class="userSeq" th:value="${list.userSeq}">
|
||||||
|
</th:block>
|
||||||
|
<td th:text="${list.userSeq}"></td>
|
||||||
|
<td th:text="${list.titleCd}"></td>
|
||||||
|
<td th:text="${list.userNm}"></td>
|
||||||
|
<td th:text="${list.ogCd}"></td>
|
||||||
|
<td th:text="${list.ofcCd}"></td>
|
||||||
|
<td th:text="${list.birthDate}"></td>
|
||||||
|
<td th:text="${list.sex}"></td>
|
||||||
|
<td th:text="${list.policeInDate}"></td>
|
||||||
|
<td th:text="${list.titleInDate}"></td>
|
||||||
|
<td th:text="${list.ofcInDate}"></td>
|
||||||
|
<td th:text="${list.outturnCd}"></td>
|
||||||
|
<td></td>
|
||||||
|
<td th:text="${list.jobInCd}"></td>
|
||||||
|
<td th:text="${#temporals.format(list.wrtDt, 'yyyy-MM-dd HH:mm')}"></td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="row justify-content-between">
|
||||||
|
<div class="col-auto">
|
||||||
|
</div>
|
||||||
|
<div class="col-auto">
|
||||||
|
<nav aria-label="Page navigation">
|
||||||
|
<ul class="pagination">
|
||||||
|
<th:block th:if="${searchParams.pageIndex>3}">
|
||||||
|
<li class="page-item" th:data-pageindex="${(searchParams.pageIndex)-3}">
|
||||||
|
<a class="page-link" href="#" aria-label="Previous">
|
||||||
|
<span aria-hidden="true">«</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</th:block>
|
||||||
|
<th:block th:each="num : ${#numbers.sequence(searchParams.startNum, searchParams.endNum)}">
|
||||||
|
<li class="page-item" th:data-pageindex="${num}" th:classappend="${searchParams.pageIndex==num?'active':''}">
|
||||||
|
<a class="page-link" href="#" th:text="${num}"></a>
|
||||||
|
</li>
|
||||||
|
</th:block>
|
||||||
|
<th:block th:if="${searchParams.maxNum>searchParams.endNum+2}">
|
||||||
|
<li class="page-item" th:data-pageindex="${(searchParams.pageIndex)+3}">
|
||||||
|
<a class="page-link" href="#" aria-label="Next">
|
||||||
|
<span aria-hidden="true">»</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</th:block>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
<div class="col-auto">
|
||||||
|
<button type="button" class="btn btn-success"id="addPvre" th:if="${accessAuth eq 'ACC003'}">전출</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<div class="modal fade" id="policeEditModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="userEditModalLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-lg modal-dialog-scrollable">
|
||||||
|
<div class="modal-content" id="policeEditModalContent">
|
||||||
|
<div class="modal-header">
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="tab-content border border-top-0" id="configCellPhone">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</html>
|
||||||
|
|
@ -124,8 +124,8 @@
|
||||||
<td th:text="${trInfo.trLang}"></td>
|
<td th:text="${trInfo.trLang}"></td>
|
||||||
<td th:text="${trInfo.trCareer}"></td>
|
<td th:text="${trInfo.trCareer}"></td>
|
||||||
<td th:text="${trInfo.trName}"></td>
|
<td th:text="${trInfo.trName}"></td>
|
||||||
<td th:text="${trInfo.trAge}"></td>
|
|
||||||
<td th:text="${trInfo.trSex}"></td>
|
<td th:text="${trInfo.trSex}"></td>
|
||||||
|
<td th:text="${trInfo.trAge}"></td>
|
||||||
<td th:text="${trInfo.trNny}"></td>
|
<td th:text="${trInfo.trNny}"></td>
|
||||||
<td th:text="${trInfo.trEdu}"></td>
|
<td th:text="${trInfo.trEdu}"></td>
|
||||||
<td th:text="${trInfo.trCft}"></td>
|
<td th:text="${trInfo.trCft}"></td>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue