회원가입시 인사시스템 연동정보 호출 기능 추가. 회원가입 양식 변경 등.

강석 최 2022-10-27 15:38:53 +09:00
parent 7aabcae1b1
commit d38469999c
11 changed files with 276 additions and 143 deletions

View File

@ -37,18 +37,12 @@ public class BaseController {
@GetMapping("/login")
public ModelAndView goLogin() {
ModelAndView mav = new ModelAndView("login/login");
mav.addObject("OgList", codeMgtService.selectCodeMgtList("OG"));
mav.addObject("OfcList", codeMgtService.selectCodeMgtList("OFC"));
mav.addObject("titleList", codeMgtService.selectCodeMgtList("JT"));
return mav;
}
@GetMapping("/login-error")
public ModelAndView loginError() {
ModelAndView mav = new ModelAndView("login/login");
mav.addObject("OgList", codeMgtService.selectCodeMgtList("OG"));
mav.addObject("OfcList", codeMgtService.selectCodeMgtList("OFC"));
mav.addObject("titleList", codeMgtService.selectCodeMgtList("JT"));
mav.addObject("loginError", true);
return mav;
}

View File

@ -2,20 +2,47 @@ package com.dbnt.faisp.kwms;
import com.dbnt.faisp.kwms.model.VEmployee;
import com.dbnt.faisp.kwms.service.KwmsService;
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 org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
@RestController
@RequiredArgsConstructor
@RequestMapping("/kwms")
public class KwmsController {
private final KwmsService kwmsService;
private final UserInfoService userInfoService;
private final CodeMgtService codeMgtService;
@GetMapping("/getEmpInfo")
public UserInfo getEmpInfo(VEmployee empInfo){
return kwmsService.selectEmpInfo(empInfo.getDicCode());
public ModelAndView getEmpInfo(VEmployee empInfo) throws Exception {
ModelAndView mav = new ModelAndView("login/joinForm");
if(userInfoService.selectUserInfoToDicCode(empInfo.getDicCode()) == null){
UserInfo userInfo = kwmsService.selectEmpInfo(empInfo.getDicCode());
if(userInfo==null){
mav.addObject("joinFlag", "F");
mav.addObject("userInfo", empInfo);
mav.addObject("msg", "검색 결과가 없습니다.");
}else{
mav.addObject("joinFlag", "T");
mav.addObject("userInfo", userInfo);
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"));
}
}else{
mav.addObject("joinFlag", "F");
mav.addObject("userInfo", empInfo);
mav.addObject("msg", "이미 가입된 식별번호입니다.");
}
return mav;
}
}

View File

@ -2,13 +2,14 @@ package com.dbnt.faisp.kwms.service;
import com.dbnt.faisp.kwms.model.VEmployee;
import com.dbnt.faisp.kwms.repository.VEmployeeRepository;
import com.dbnt.faisp.main.codeMgt.model.CodeMgt;
import com.dbnt.faisp.main.codeMgt.service.CodeMgtService;
import com.dbnt.faisp.main.userInfo.model.UserInfo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
@Service
@RequiredArgsConstructor
@ -16,9 +17,13 @@ public class KwmsService {
private final VEmployeeRepository vEmployeeRepository;
private final CodeMgtService codeMgtService;
public UserInfo selectEmpInfo(String dicCode) {
public UserInfo selectEmpInfo(String dicCode){
VEmployee empInfo = vEmployeeRepository.findByDicCode(dicCode).orElse(null);
return convertVEmployeeToUserInfo(empInfo);
if(empInfo==null){
return null;
}else{
return convertVEmployeeToUserInfo(empInfo);
}
}
private UserInfo convertVEmployeeToUserInfo(VEmployee empInfo){
@ -35,6 +40,12 @@ public class KwmsService {
userInfo.setOutturnCd(codeMgtService.searchCode("OTC", empInfo.getGyunggwa()));
userInfo.setSeriesCd(codeMgtService.searchCode("SRC", empInfo.getJikbyul()));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
empInfo.setBirthDate(
(Integer.parseInt(empInfo.getBirthDate().substring(0,2))>60?"19":"20")+empInfo.getBirthDate());
userInfo.setBirthDate(LocalDate.parse(empInfo.getBirthDate(), formatter));
userInfo.setPoliceInDate(LocalDate.parse(empInfo.getPoliceBmngIl(), formatter));
userInfo.setTitleInDate(LocalDate.parse(empInfo.getHnJikgeupImyngil(), formatter));
return userInfo;
}
}

View File

@ -8,6 +8,7 @@ import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
@ -41,6 +42,7 @@ public class UserInfo extends BaseModel implements UserDetails{
@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;
@ -65,6 +67,7 @@ public class UserInfo extends BaseModel implements UserDetails{
@Column(name = "title_cd")
private String titleCd;
@Column(name = "wrt_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
private LocalDateTime wrtDt;
@Column(name = "group_cd")
private String groupCd;
@ -85,12 +88,16 @@ public class UserInfo extends BaseModel implements UserDetails{
@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;
@Transient

View File

@ -7,8 +7,9 @@ import java.util.Optional;
public interface UserInfoRepository extends JpaRepository<UserInfo, Integer> {
Optional<UserInfo> findByUserId(String userId);
Optional<UserInfo> findByUserId(String userId);
Optional<UserInfo> findByUserSeq(Integer userSeq);
Optional<UserInfo> findByUserSeq(Integer userSeq);
Optional<UserInfo> findByDicCode(String dicCode);
}

View File

@ -77,6 +77,10 @@ public class UserInfoService implements UserDetailsService {
return userInfoRepository.findByUserSeq(userSeq).orElse(null);
}
public UserInfo selectUserInfoToDicCode(String dicCode){
return userInfoRepository.findByDicCode(dicCode).orElse(null);
}
@Transactional
public int updateUserApproval(List<UserInfo> userInfo) {
int cnt = 0;

View File

@ -36,10 +36,11 @@
email,
og_cd,
ofc_cd,
title_cd,
wrt_dt
from user_info
<include refid="selectUserInfoWhere"></include>
order by og_cd, ofc_cd desc
order by og_cd, ofc_cd, title_cd desc
limit #{rowCnt} offset #{firstIndex}
</select>

View File

@ -1,17 +1,20 @@
$(document).on('change', '#dicCode', function (){
if(this.value!==''){
$(document).on('click', '#dicCodeSearchBtn', function (){
const dicCode = $("#dicCode").val();
if(dicCode!==''){
$.ajax({
url: '/kwms/getEmpInfo',
data: {dicCode: this.value},
data: {dicCode: dicCode},
type: 'GET',
dataType:"json",
success: function(data){
debugger
dataType:"html",
success: function(html){
$("#userInsertModalContent").empty().append(html)
},
error:function(){
error:function(e){
debugger
}
});
}else{
alert("공무원식별번호를 입력해주세요.")
}
})
@ -51,8 +54,9 @@ function valueCheck(){
const password = targetForm.find("#modalPassword");
const passwordConfirm = targetForm.find("#passwordConfirm");
const userNm = targetForm.find("#userNm").val();
const phoneNo = targetForm.find("#phoneNo").val();
const email = targetForm.find("#email").val();
const ogCd = targetForm.find("#ogCd").val();
const ofcCd = targetForm.find("#ofcCd").val();
const titleCd = targetForm.find("#titleCd").val();
let returnFlag = true;
@ -75,7 +79,15 @@ function valueCheck(){
returnFlag = false;
}
if(!userNm){
alert("이름 입력해주세요.");
alert("이름을 입력해주세요.");
returnFlag = false;
}
if(!phoneNo){
alert("휴대전화를 입력해주세요.");
returnFlag = false;
}
if(!email){
alert("이메일을 입력해주세요.");
returnFlag = false;
}
if(returnFlag){
@ -96,10 +108,6 @@ function valueCheck(){
alert("관서를 선택해주세요.");
returnFlag = false;
}
if(!ofcCd){
alert("부서를 선택해주세요.");
returnFlag = false;
}
if(!titleCd){
alert("계급을 선택해주세요.");
returnFlag = false;

View File

@ -96,17 +96,36 @@
<td>
<input type="checkbox" id="userChk" name="userChk" class="userInfoCheckBox" th:value="${userInfo.userSeq}">
</td>
<th:block th:each="commonCode:${session.commonCode.get('OG')}">
<th:block th:if="${commonCode.itemCd == userInfo.ogCd}">
<td th:text="${commonCode.itemValue}"></td>
<th:block th:if="${userInfo.ogCd eq null or userInfo.ogCd eq ''}">
<td></td>
</th:block>
<th:block th:unless="${userInfo.ogCd eq null or userInfo.ogCd eq ''}">
<th:block th:each="commonCode:${session.commonCode.get('OG')}">
<th:block th:if="${commonCode.itemCd == userInfo.ogCd}">
<td th:text="${commonCode.itemValue}"></td>
</th:block>
</th:block>
</th:block>
<th:block th:each="commonCode:${session.commonCode.get('OFC')}">
<th:block th:if="${commonCode.itemCd == userInfo.ofcCd}">
<td th:text="${commonCode.itemValue}"></td>
<th:block th:if="${userInfo.ofcCd eq null or userInfo.ofcCd eq ''}">
<td></td>
</th:block>
<th:block th:unless="${userInfo.ofcCd eq null or userInfo.ofcCd eq ''}">
<th:block th:each="commonCode:${session.commonCode.get('OFC')}">
<th:block th:if="${commonCode.itemCd == userInfo.ofcCd}">
<td th:text="${commonCode.itemValue}"></td>
</th:block>
</th:block>
</th:block>
<th:block th:if="${userInfo.titleCd eq null or userInfo.titleCd eq ''}">
<td></td>
</th:block>
<th:block th:unless="${userInfo.titleCd eq null or userInfo.titleCd eq ''}">
<th:block th:each="commonCode:${session.commonCode.get('JT')}">
<th:block th:if="${commonCode.itemCd == userInfo.titleCd}">
<td th:text="${commonCode.itemValue}"></td>
</th:block>
</th:block>
</th:block>
<td></td>
<td th:text="${userInfo.userNm}"></td>
<td th:text="${userInfo.userId}"></td>
<td th:text="${#temporals.format(userInfo.wrtDt, 'yyyy-MM-dd HH:mm:ss')}"></td>

View File

@ -0,0 +1,161 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<div class="modal-content " id="userInsertModalContent">
<div class="modal-header">
<h5 class="modal-title" id="userInsertModalLabel">사용자 신청</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body" th:if="${joinFlag eq 'F'}">
<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-3">
<input type="text" class="form-control form-control-sm" id="dicCode" name="dicCode" autocomplete="off" th:value="${userInfo.dicCode}">
<label for="dicCode" style="font-size: 12px" th:text="${msg}"></label>
</div>
<button type="button" class="btn btn-sm btn-outline-primary col-sm-1" id="dicCodeSearchBtn">검색</button>
</div>
</div>
<div class="modal-body" th:if="${joinFlag eq 'T'}">
<form id="userInfoInsert" action="#" th:action="@{/admin/insertUserInfo}" method="post">
<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-3">
<input type="text" class="form-control form-control-sm" id="dicCode" name="dicCode" autocomplete="off" th:value="${userInfo.dicCode}">
</div>
<button type="button" class="btn btn-sm btn-outline-primary col-sm-1" id="dicCodeSearchBtn">검색</button>
</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">
<label for="userId" style="font-size: 12px">6~20자 사이의 알파벳, 숫자를 입력하세요</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="modalPassword" class="col-sm-2 col-form-label col-form-label-sm text-center">비밀번호</label>
<div class="col-sm-4">
<input type="password" class="form-control form-control-sm" id="modalPassword" name="password" >
<label for="userId" style="font-size: 12px">8~16자 사이의 알파벳, 숫자, 특수문자 조합</label>
</div>
<label for="passwordConfirm" class="col-sm-2 col-form-label col-form-label-sm text-center">비밀번호 확인</label>
<div class="col-sm-4">
<input type="password" class="form-control form-control-sm" id="passwordConfirm">
</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">
</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">
</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" id="birthDate" name="birthDate" th:value="${userInfo.birthDate}">
</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" id="policeInDate" name="policeInDate" th:value="${userInfo.policeInDate}">
</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" id="organInDate" name="organInDate" th:value="${userInfo.organInDate}">
</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" id="ofcInDate" name="ofcInDate" th:value="${userInfo.ofcInDate}">
</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" id="titleInDate" name="titleInDate" th:value="${userInfo.titleInDate}">
</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.groupCd}"></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.groupCd}"></option>
</th:block>
</select>
</div>
</div>
</form>
</div>
<div class="modal-footer" th:if="${joinFlag eq 'T'}">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal" id="closeModalBtn">닫기</button>
<button type="button" class="btn btn-primary" id="saveBtn">신청</button>
</div>
</div>
</html>

View File

@ -52,119 +52,19 @@
<div class="modal fade" id="userInsertModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="userInsertModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content ">
<div class="modal-content " id="userInsertModalContent">
<div class="modal-header">
<h5 class="modal-title" id="userInsertModalLabel">사용자 신청</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form id="userInfoInsert" action="#" th:action="@{/admin/insertUserInfo}" method="post">
<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">
</div>
<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-3">
<input type="text" class="form-control form-control-sm" id="dicCode" name="dicCode" autocomplete="off">
</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">
<label for="userId" style="font-size: 12px">6~20자 사이의 알파벳, 숫자를 입력하세요</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">
</div>
</div>
<div class="mb-3 row">
<label for="modalPassword" class="col-sm-2 col-form-label col-form-label-sm text-center">비밀번호</label>
<div class="col-sm-4">
<input type="password" class="form-control form-control-sm" id="modalPassword" name="password" >
<label for="userId" style="font-size: 12px">8~16자 사이의 알파벳, 숫자, 특수문자 조합</label>
</div>
<label for="passwordConfirm" class="col-sm-2 col-form-label col-form-label-sm text-center">비밀번호 확인</label>
<div class="col-sm-4">
<input type="password" class="form-control form-control-sm" id="passwordConfirm">
</div>
</div>
<div class="mb-3 row">
<label for="telP" 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="telP">
</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">
</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>
<option th:each="val : ${OgList}" th:value="${val?.itemCd}" th:utext="${val?.itemValue}">
</option>
</select>
</div>
<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>
<option th:each="val : ${OfcList}" th:value="${val?.itemCd}" th:utext="${val?.itemValue}">
</option>
</select>
</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>
<option th:each="val : ${titleList}" th:value="${val?.itemCd}" th:utext="${val?.itemValue}">
</option>
</select>
</div>
</div>
<div class="mb-3 row" >
<label for="address" class="col-sm-2 col-form-label col-form-label-sm text-center">주소</label>
<div class="col-sm-8">
<input type="adress" class="form-control form-control-sm" id="address">
</div>
<div class="col-sm-2">
<button type="button" class="btn btn-sm btn-secondary" id="search">주소검색</button>
</div>
</div>
<div class="mb-3 row">
<label for="addresses" class="col-sm-2 col-form-label col-form-label-sm text-center">상세주소</label>
<div class="col-sm-10">
<input type="address" class="form-control form-control-sm" id="addresses">
</div>
</div>
<!--<div class="mb-3 row">
<label for="photo" class="col-sm-2 col-form-label col-form-label-sm text-center">사진</label>
<div class="col-sm-4">
<input type="file" style="font-size: 12px" class="form-control form-control-sm" id="photo">
</div>
<label for="sign" class="col-sm-2 col-form-label col-form-label-sm text-center">서명</label>
<div class="col-sm-4">
<input type="file" style="font-size: 12px" class="form-control form-control-sm" id="sign">
</div>
</div>-->
<!--<div class="mb-3 row">
<label for="tel" 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="need">
</div>
<label for="precautions" 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="precautions">
</div>
</div>-->
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal" id="closeModalBtn">닫기</button>
<button type="button" class="btn btn-primary" id="saveBtn">신청</button>
<button type="button" class="btn btn-sm btn-outline-primary col-sm-1" id="dicCodeSearchBtn">검색</button>
</div>
</div>
</div>
</div>