Merge branch 'JIWOO' into advc
Conflicts: src/main/java/kcc/ve/instr/tngrVisitEdu/instrInfo/service/VEInstrMixService.java src/main/java/kcc/ve/instr/tngrVisitEdu/instrInfo/service/impl/VEInstrMixServiceImpl.java src/main/resources/egovframework/sqlmap/ve/instr/VEInstr_MIX_SQL_Tibero.xml
This commit is contained in:
commit
5336cf6a40
@ -27,5 +27,6 @@ public interface VEEduAplctSndHstryService {
|
|||||||
|
|
||||||
//Page List
|
//Page List
|
||||||
List<VEEduAplctVO> selectPagingList(VEEduAplctVO paramVO) throws Exception;
|
List<VEEduAplctVO> selectPagingList(VEEduAplctVO paramVO) throws Exception;
|
||||||
|
|
||||||
|
void insertInstrChkNo(VEEduAplctVO paramVO) throws Exception;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -74,4 +74,7 @@ public class VEEduAplctSndHstryDAO extends EgovAbstractDAO {
|
|||||||
return update("VEEduAplctSndHstryDAO.chrgInfoUpdate", paramVO);
|
return update("VEEduAplctSndHstryDAO.chrgInfoUpdate", paramVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void insertInstrChkNo(VEEduAplctVO paramVO) throws Exception {
|
||||||
|
insert("VEEduAplctSndHstryDAO.insertInstrChkNo", paramVO);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -58,4 +58,8 @@ public class VEEduAplctSndHstryServiceImpl implements VEEduAplctSndHstryService
|
|||||||
public int chrgInfoUpdate(VEEduAplctVO paramVO) throws Exception {
|
public int chrgInfoUpdate(VEEduAplctVO paramVO) throws Exception {
|
||||||
return vEEduAplctSndHstryDAO.chrgInfoUpdate(paramVO);
|
return vEEduAplctSndHstryDAO.chrgInfoUpdate(paramVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void insertInstrChkNo(VEEduAplctVO paramVO) throws Exception {
|
||||||
|
vEEduAplctSndHstryDAO.insertInstrChkNo(paramVO);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -171,6 +171,8 @@ public class VEInstrDetailVO extends ComDefaultVO implements Serializable {
|
|||||||
private String day1cnt;
|
private String day1cnt;
|
||||||
private String day0cnt;
|
private String day0cnt;
|
||||||
|
|
||||||
|
private String crtfdNumber; //인증번호
|
||||||
|
|
||||||
|
|
||||||
//수료증 출력용 데이터
|
//수료증 출력용 데이터
|
||||||
private String desc1;
|
private String desc1;
|
||||||
@ -900,5 +902,11 @@ public class VEInstrDetailVO extends ComDefaultVO implements Serializable {
|
|||||||
public void setChk(String chk) {
|
public void setChk(String chk) {
|
||||||
this.chk = chk;
|
this.chk = chk;
|
||||||
}
|
}
|
||||||
|
public String getCrtfdNumber() {
|
||||||
|
return crtfdNumber;
|
||||||
|
}
|
||||||
|
public void setCrtfdNumber(String crtfdNumber) {
|
||||||
|
this.crtfdNumber = crtfdNumber;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -94,4 +94,19 @@ public interface VEInstrMixService {
|
|||||||
List<VELctrDetailVO> selectEduPrfrmInfoFndthEnhanceTrn(VEInstrDetailVO vEInstrDetailVO) throws Exception;
|
List<VELctrDetailVO> selectEduPrfrmInfoFndthEnhanceTrn(VEInstrDetailVO vEInstrDetailVO) throws Exception;
|
||||||
|
|
||||||
VELctrDetailVO findByIdFromVeInstr(VEInstrDetailVO vEInstrDetailVO);
|
VELctrDetailVO findByIdFromVeInstr(VEInstrDetailVO vEInstrDetailVO);
|
||||||
|
|
||||||
|
//R (강사 디테일 엑셀 업로드 데이터 정보. 메일 비교)
|
||||||
|
VEInstrDetailVO selectUploadInfoChkWithEmail(VEInstrDetailVO vEInstrDetailVO) throws Exception;
|
||||||
|
|
||||||
|
//강사 인증 이메일 삭제 처리
|
||||||
|
int deleteInstrEmailCrtfd(VEInstrDetailVO vEInstrDetailVO) throws Exception;
|
||||||
|
|
||||||
|
//강사 인증 이메일 생성 처리
|
||||||
|
int insertInstrEmailCrtfd(VEInstrDetailVO vEInstrDetailVO) throws Exception;
|
||||||
|
|
||||||
|
VEInstrDetailVO selectInstrEmailCrtfdNumber(VEInstrDetailVO vEInstrDetailVO) throws Exception;
|
||||||
|
|
||||||
|
//강사 등록 신청 제출 처리
|
||||||
|
int updateInstrId(VEInstrDetailVO vEInstrDetailVO) throws Exception;
|
||||||
|
int updateInstrDetailSbmtY(VEInstrDetailVO vEInstrDetailVO) throws Exception;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -213,4 +213,26 @@ public class VEInstrMixDAO extends EgovAbstractDAO {
|
|||||||
return (VELctrDetailVO) select("VEInstrMixDAO.findByIdFromVeInstr", vEInstrDetailVO);
|
return (VELctrDetailVO) select("VEInstrMixDAO.findByIdFromVeInstr", vEInstrDetailVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public VEInstrDetailVO selectUploadInfoChkWithEmail(VEInstrDetailVO vEInstrDetailVO) throws Exception {
|
||||||
|
return (VEInstrDetailVO) select("VEInstrMixDAO.selectUploadInfoChkWithEmail", vEInstrDetailVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int deleteInstrEmailCrtfd(VEInstrDetailVO vEInstrDetailVO) throws Exception {
|
||||||
|
return update("VEInstrMixDAO.deleteInstrEmailCrtfd", vEInstrDetailVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int insertInstrEmailCrtfd(VEInstrDetailVO vEInstrDetailVO) throws Exception {
|
||||||
|
return update("VEInstrMixDAO.insertInstrEmailCrtfd", vEInstrDetailVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
public VEInstrDetailVO selectInstrEmailCrtfdNumber(VEInstrDetailVO vEInstrDetailVO) throws Exception {
|
||||||
|
return (VEInstrDetailVO) select("VEInstrMixDAO.selectInstrEmailCrtfdNumber", vEInstrDetailVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int updateInstrId(VEInstrDetailVO vEInstrDetailVO) throws Exception {
|
||||||
|
return update("VEInstrMixDAO.updateInstrId", vEInstrDetailVO);
|
||||||
|
}
|
||||||
|
public int updateInstrDetailSbmtY(VEInstrDetailVO vEInstrDetailVO) throws Exception {
|
||||||
|
return update("VEInstrMixDAO.updateInstrDetailSbmtY", vEInstrDetailVO);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -159,4 +159,31 @@ public class VEInstrMixServiceImpl implements VEInstrMixService {
|
|||||||
public VELctrDetailVO findByIdFromVeInstr(VEInstrDetailVO vEInstrDetailVO) {
|
public VELctrDetailVO findByIdFromVeInstr(VEInstrDetailVO vEInstrDetailVO) {
|
||||||
return vEInstrMixDAO.findByIdFromVeInstr(vEInstrDetailVO);
|
return vEInstrMixDAO.findByIdFromVeInstr(vEInstrDetailVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public VEInstrDetailVO selectUploadInfoChkWithEmail(VEInstrDetailVO vEInstrDetailVO) throws Exception {
|
||||||
|
return vEInstrMixDAO.selectUploadInfoChkWithEmail(vEInstrDetailVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int deleteInstrEmailCrtfd(VEInstrDetailVO vEInstrDetailVO) throws Exception{
|
||||||
|
|
||||||
|
return vEInstrMixDAO.deleteInstrEmailCrtfd(vEInstrDetailVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int insertInstrEmailCrtfd(VEInstrDetailVO vEInstrDetailVO) throws Exception{
|
||||||
|
|
||||||
|
return vEInstrMixDAO.insertInstrEmailCrtfd(vEInstrDetailVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
public VEInstrDetailVO selectInstrEmailCrtfdNumber(VEInstrDetailVO vEInstrDetailVO) throws Exception {
|
||||||
|
return vEInstrMixDAO.selectInstrEmailCrtfdNumber(vEInstrDetailVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int updateInstrId(VEInstrDetailVO vEInstrDetailVO) throws Exception{
|
||||||
|
|
||||||
|
return vEInstrMixDAO.updateInstrId(vEInstrDetailVO);
|
||||||
|
}
|
||||||
|
public int updateInstrDetailSbmtY(VEInstrDetailVO vEInstrDetailVO) throws Exception{
|
||||||
|
|
||||||
|
return vEInstrMixDAO.updateInstrDetailSbmtY(vEInstrDetailVO);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import javax.annotation.Resource;
|
|||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.RandomStringUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
@ -24,6 +25,7 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
|
||||||
|
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
||||||
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
|
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
|
||||||
import kcc.com.cmm.EgovMessageSource;
|
import kcc.com.cmm.EgovMessageSource;
|
||||||
import kcc.com.cmm.LoginVO;
|
import kcc.com.cmm.LoginVO;
|
||||||
@ -42,8 +44,11 @@ import kcc.let.utl.fcc.service.EgovCryptoUtil;
|
|||||||
import kcc.let.utl.fcc.service.EgovCryptoUtil4VO;
|
import kcc.let.utl.fcc.service.EgovCryptoUtil4VO;
|
||||||
import kcc.ve.adv.tngr.stngInfo.service.VEAStngService;
|
import kcc.ve.adv.tngr.stngInfo.service.VEAStngService;
|
||||||
import kcc.ve.adv.tngr.stngInfo.service.VEAStngVO;
|
import kcc.ve.adv.tngr.stngInfo.service.VEAStngVO;
|
||||||
|
import kcc.ve.cmm.VeSendMail;
|
||||||
import kcc.ve.instr.tngrVisitEdu.asgnmInfo.service.VEAsgnmMIXService;
|
import kcc.ve.instr.tngrVisitEdu.asgnmInfo.service.VEAsgnmMIXService;
|
||||||
import kcc.ve.instr.tngrVisitEdu.asgnmInfo.service.VEInstrAsgnmVO;
|
import kcc.ve.instr.tngrVisitEdu.asgnmInfo.service.VEInstrAsgnmVO;
|
||||||
|
import kcc.ve.instr.tngrVisitEdu.eduInfo.service.VEEduAplctSndHstryService;
|
||||||
|
import kcc.ve.instr.tngrVisitEdu.eduInfo.service.VEEduAplctVO;
|
||||||
import kcc.ve.instr.tngrVisitEdu.instrInfo.service.VEInstrDetailActvtHstryService;
|
import kcc.ve.instr.tngrVisitEdu.instrInfo.service.VEInstrDetailActvtHstryService;
|
||||||
import kcc.ve.instr.tngrVisitEdu.instrInfo.service.VEInstrDetailActvtHstryVO;
|
import kcc.ve.instr.tngrVisitEdu.instrInfo.service.VEInstrDetailActvtHstryVO;
|
||||||
import kcc.ve.instr.tngrVisitEdu.instrInfo.service.VEInstrDetailService;
|
import kcc.ve.instr.tngrVisitEdu.instrInfo.service.VEInstrDetailService;
|
||||||
@ -159,6 +164,13 @@ public class InstrPrflController {
|
|||||||
@Resource(name = "vEInstrDetailActvtHstryService")
|
@Resource(name = "vEInstrDetailActvtHstryService")
|
||||||
private VEInstrDetailActvtHstryService vEInstrDetailActvtHstryService;
|
private VEInstrDetailActvtHstryService vEInstrDetailActvtHstryService;
|
||||||
|
|
||||||
|
@Resource(name = "sndGnrService")
|
||||||
|
private EgovIdGnrService sndGnrService;
|
||||||
|
|
||||||
|
// 교육신청발송이력
|
||||||
|
@Resource(name = "vEEduAplctSndHstryService")
|
||||||
|
private VEEduAplctSndHstryService vEEduAplctSndHstryService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 1.신청변경신청 목록 - L
|
* 1.신청변경신청 목록 - L
|
||||||
*/
|
*/
|
||||||
@ -964,6 +976,12 @@ public class InstrPrflController {
|
|||||||
System.out.println("=================");
|
System.out.println("=================");
|
||||||
return schduleManageService.selectSchManageStatusInstrList(schduleManageVO);
|
return schduleManageService.selectSchManageStatusInstrList(schduleManageVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RequestMapping("/web/ve/instr/popup/instrInfoChkPop.do")
|
||||||
|
public String instrInfoChkPop(@ModelAttribute("vEEduAplctVO") VEEduAplctVO vEEduAplctVO, ModelMap model, HttpServletRequest request) throws Exception{
|
||||||
|
|
||||||
|
return "/web/ve/instr/tngrVisitEdu/instrInfo/popup/instrInfoChkPop";
|
||||||
|
}
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@ -1139,5 +1157,126 @@ public class InstrPrflController {
|
|||||||
modelAndView.addObject("adultInstrYn", vEInstrDetailVO.getAdultInstrYn());
|
modelAndView.addObject("adultInstrYn", vEInstrDetailVO.getAdultInstrYn());
|
||||||
return modelAndView;
|
return modelAndView;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//이름과 이메일로 등록된 강사 정보 조회
|
||||||
|
@RequestMapping(value="/web/ve/instr/instrInfo/instrInfoChkAjax.do")
|
||||||
|
public ModelAndView instrInfoChkAjax(
|
||||||
|
VEInstrDetailVO vEInstrDetailVO
|
||||||
|
, ModelMap model
|
||||||
|
, HttpServletRequest request
|
||||||
|
) throws Exception {
|
||||||
|
|
||||||
|
ModelAndView modelAndView = new ModelAndView();
|
||||||
|
modelAndView.setViewName("jsonView");
|
||||||
|
|
||||||
|
//로그인 처리====================================
|
||||||
|
//로그인 정보 가져오기
|
||||||
|
LoginVO loginVO = checkLoginUtil.getAuthLoginVO(); //권한에 따른 로그인 정보 가져오기
|
||||||
|
vEInstrDetailVO.setUserId(loginVO.getUniqId());
|
||||||
|
String resultMsg = "success";
|
||||||
|
//이름 암호화
|
||||||
|
VEInstrDetailVO vEInstrInfoVO = new VEInstrDetailVO();
|
||||||
|
vEInstrDetailVO = egovCryptoUtil.encryptVEInstrDetailVO(vEInstrDetailVO);
|
||||||
|
vEInstrInfoVO = vEInstrMixService.selectUploadInfoChkWithEmail(vEInstrDetailVO);
|
||||||
|
if(vEInstrInfoVO != null) {
|
||||||
|
//인증번호 발송하기
|
||||||
|
VeSendMail sendMail = new VeSendMail();
|
||||||
|
VEEduAplctVO vEEduAplctVO = new VEEduAplctVO();
|
||||||
|
//인증번호 생성
|
||||||
|
String code = RandomStringUtils.randomNumeric(6);
|
||||||
|
vEEduAplctVO.setSndCn("교육운영관리 시스템입니다. 강사 신청 인증번호는 " + code + "입니다.");
|
||||||
|
//로그 pk
|
||||||
|
//사용자 ID
|
||||||
|
vEEduAplctVO.setUserId(loginVO.getUniqId());
|
||||||
|
//플래그(성인, 청소년)
|
||||||
|
String flag = "C";
|
||||||
|
if("20".equals(vEInstrDetailVO.getInstrDiv())) {
|
||||||
|
flag = "S";
|
||||||
|
}
|
||||||
|
//메일 발송
|
||||||
|
String result = sendMail.VeSendMail(flag, vEInstrDetailVO.getEmail(), vEEduAplctVO);
|
||||||
|
if("success".equals(result)) {
|
||||||
|
//메일 발송 로그
|
||||||
|
String snd_ord = sndGnrService.getNextStringId();
|
||||||
|
vEEduAplctVO.setSndHstryOrd(snd_ord);
|
||||||
|
vEEduAplctVO.setTrgtId(loginVO.getUniqId());
|
||||||
|
vEEduAplctVO.setTrgt(vEInstrDetailVO.getEmail());
|
||||||
|
vEEduAplctSndHstryService.insertInstrChkNo(vEEduAplctVO);
|
||||||
|
|
||||||
|
//인증번호 row 생성
|
||||||
|
vEInstrDetailVO.setCrtfdNumber(code);
|
||||||
|
vEInstrDetailVO.setUserId(loginVO.getUniqId());
|
||||||
|
vEInstrMixService.deleteInstrEmailCrtfd(vEInstrDetailVO);
|
||||||
|
vEInstrMixService.insertInstrEmailCrtfd(vEInstrDetailVO);
|
||||||
|
}else {
|
||||||
|
resultMsg = "sndFail";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}else {
|
||||||
|
resultMsg = "fail";
|
||||||
|
}
|
||||||
|
if(vEInstrInfoVO != null) {
|
||||||
|
modelAndView.addObject("userId", vEInstrInfoVO.getUserId());
|
||||||
|
modelAndView.addObject("instrDetailOrd", vEInstrInfoVO.getInstrDetailOrd());
|
||||||
|
}
|
||||||
|
modelAndView.addObject("result", resultMsg);
|
||||||
|
return modelAndView;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//강사 등록 이메일 인증 체크
|
||||||
|
@RequestMapping(value="/web/ve/instr/instrInfo/emailCrtfdChkAjax.do")
|
||||||
|
public ModelAndView emailCrtfdChkAjax(
|
||||||
|
VEInstrDetailVO vEInstrDetailVO
|
||||||
|
, ModelMap model
|
||||||
|
, HttpServletRequest request
|
||||||
|
) throws Exception {
|
||||||
|
|
||||||
|
ModelAndView modelAndView = new ModelAndView();
|
||||||
|
modelAndView.setViewName("jsonView");
|
||||||
|
|
||||||
|
//로그인 처리====================================
|
||||||
|
//로그인 정보 가져오기
|
||||||
|
LoginVO loginVO = checkLoginUtil.getAuthLoginVO(); //권한에 따른 로그인 정보 가져오기
|
||||||
|
vEInstrDetailVO.setUserId(loginVO.getUniqId());
|
||||||
|
String resultMsg = "success";
|
||||||
|
vEInstrDetailVO = vEInstrMixService.selectInstrEmailCrtfdNumber(vEInstrDetailVO);
|
||||||
|
if(vEInstrDetailVO == null) {
|
||||||
|
resultMsg = "fail";
|
||||||
|
}
|
||||||
|
modelAndView.addObject("result", resultMsg);
|
||||||
|
return modelAndView;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//강사 등록 신청 처리
|
||||||
|
@RequestMapping(value="/web/ve/instr/instrInfo/updateInstrSbmtYAjax.do")
|
||||||
|
public ModelAndView updateInstrSbmtYAjax(
|
||||||
|
VEInstrDetailVO vEInstrDetailVO
|
||||||
|
, ModelMap model
|
||||||
|
, HttpServletRequest request
|
||||||
|
) throws Exception {
|
||||||
|
|
||||||
|
ModelAndView modelAndView = new ModelAndView();
|
||||||
|
modelAndView.setViewName("jsonView");
|
||||||
|
|
||||||
|
//로그인 처리====================================
|
||||||
|
//로그인 정보 가져오기
|
||||||
|
LoginVO loginVO = checkLoginUtil.getAuthLoginVO(); //권한에 따른 로그인 정보 가져오기
|
||||||
|
vEInstrDetailVO.setRqstId(loginVO.getUniqId());
|
||||||
|
String resultMsg = "success";
|
||||||
|
//강사 등록 신청 제출 Y 처리
|
||||||
|
try {
|
||||||
|
vEInstrMixService.updateInstrId(vEInstrDetailVO);
|
||||||
|
vEInstrMixService.updateInstrDetailSbmtY(vEInstrDetailVO);
|
||||||
|
}catch(Exception e){
|
||||||
|
resultMsg = "fail";
|
||||||
|
}
|
||||||
|
modelAndView.addObject("result", resultMsg);
|
||||||
|
return modelAndView;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -233,4 +233,25 @@
|
|||||||
</isNotEmpty>
|
</isNotEmpty>
|
||||||
WHERE EDU_APLCT_ORD = #eduAplctOrd#
|
WHERE EDU_APLCT_ORD = #eduAplctOrd#
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
<insert id="VEEduAplctSndHstryDAO.insertInstrChkNo" parameterClass="VEEduAplctVO">
|
||||||
|
|
||||||
|
/* VEEduAplctSndHstryDAO.insertInstrChkNo */
|
||||||
|
INSERT INTO <include refid="VEEduAplctSndHstryDAO.table_name"/>
|
||||||
|
(
|
||||||
|
<include refid="VEEduAplctSndHstryDAO.column_name"/>
|
||||||
|
)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
|
'강사 등록 인증메일',
|
||||||
|
#sndHstryOrd#,
|
||||||
|
'20',
|
||||||
|
SYSDATE,
|
||||||
|
#sndId#,
|
||||||
|
SUBSTR(#sndCn#,0,950),
|
||||||
|
#trgtId#,
|
||||||
|
#trgt#
|
||||||
|
)
|
||||||
|
|
||||||
|
</insert>
|
||||||
</sqlMap>
|
</sqlMap>
|
||||||
|
|||||||
@ -355,7 +355,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
ORDER BY 1=1
|
ORDER BY 1
|
||||||
|
|
||||||
<isEmpty property="orderByQuery">
|
<isEmpty property="orderByQuery">
|
||||||
, b.user_id desc
|
, b.user_id desc
|
||||||
@ -1306,6 +1306,23 @@
|
|||||||
AND b.instr_nm = #instrNm#
|
AND b.instr_nm = #instrNm#
|
||||||
AND b.phone = #phone#)
|
AND b.phone = #phone#)
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<!-- 엑셀 업로드 한 강사 디테일 정보 R(메일확인) -->
|
||||||
|
<select id="VEInstrMixDAO.selectUploadInfoChkWithEmail" parameterClass="VEInstrDetailVO" resultClass="VEInstrDetailVO">
|
||||||
|
/* VEInstrMixDAO.selectUploadInfoChkWithEmail */
|
||||||
|
SELECT
|
||||||
|
<include refid="VEInstrMixDAO.select_detail_column_name"/>
|
||||||
|
FROM
|
||||||
|
<include refid="VEInstrMixDAO.detail_table_name"/> a
|
||||||
|
WHERE
|
||||||
|
a.instr_div = #instrDiv#
|
||||||
|
AND a.instr_nm = #instrNm#
|
||||||
|
AND a.email = #email#
|
||||||
|
AND (a.SBMT_YN != 'Y' or a.SBMT_YN IS NULL)
|
||||||
|
AND a.frst_regist_pnttm = (SELECT MIN(b.frst_regist_pnttm) FROM ve_instr_detail b WHERE b.instr_div = #instrDiv#
|
||||||
|
AND b.instr_nm = #instrNm#
|
||||||
|
AND b.email = #email#)
|
||||||
|
</select>
|
||||||
|
|
||||||
<!-- 엑셀 업로드 한 강사 디테일 정보 R 데이터 있는 경우-->
|
<!-- 엑셀 업로드 한 강사 디테일 정보 R 데이터 있는 경우-->
|
||||||
<select id="VEInstrMixDAO.selectUploadInfoDetailWithData" parameterClass="VEInstrDetailVO" resultClass="VEInstrDetailVO">
|
<select id="VEInstrMixDAO.selectUploadInfoDetailWithData" parameterClass="VEInstrDetailVO" resultClass="VEInstrDetailVO">
|
||||||
@ -3442,6 +3459,7 @@
|
|||||||
)bbb
|
)bbb
|
||||||
on(bbb.prcs_aplct_prd_ord=aaa.prcsOrd)
|
on(bbb.prcs_aplct_prd_ord=aaa.prcsOrd)
|
||||||
GROUP BY rollup(yr, bbb.prcs_nm)
|
GROUP BY rollup(yr, bbb.prcs_nm)
|
||||||
|
<<<<<<< HEAD
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="VEInstrMixDAO.findByIdFromVeInstr" parameterClass="VEInstrDetailVO" resultClass="VELctrDetailVO">
|
<select id="VEInstrMixDAO.findByIdFromVeInstr" parameterClass="VEInstrDetailVO" resultClass="VELctrDetailVO">
|
||||||
@ -3463,4 +3481,64 @@
|
|||||||
USER_ID = #userId#
|
USER_ID = #userId#
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
=======
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<delete id="VEInstrMixDAO.deleteInstrEmailCrtfd" parameterClass="VEInstrDetailVO">
|
||||||
|
/* VEInstrMixDAO.deleteInstrEmailCrtfd */
|
||||||
|
DELETE FROM VEA_INSTR_EMAIL_CRTFD
|
||||||
|
WHERE user_id = #userId#
|
||||||
|
</delete>
|
||||||
|
<insert id="VEInstrMixDAO.insertInstrEmailCrtfd" parameterClass="VEInstrDetailVO">
|
||||||
|
/* VEInstrMixDAO.insertInstrEmailCrtfd */
|
||||||
|
INSERT INTO VEA_INSTR_EMAIL_CRTFD
|
||||||
|
(
|
||||||
|
user_id,
|
||||||
|
email,
|
||||||
|
crtfd_number,
|
||||||
|
frst_regist_pnttm
|
||||||
|
)
|
||||||
|
VALUES(
|
||||||
|
#userId#,
|
||||||
|
#email#,
|
||||||
|
#crtfdNumber#,
|
||||||
|
sysdate
|
||||||
|
)
|
||||||
|
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<select id="VEInstrMixDAO.selectInstrEmailCrtfdNumber" parameterClass="VEInstrDetailVO" resultClass="VEInstrDetailVO">
|
||||||
|
/* VEInstrMixDAO.selectInstrEmailCrtfdNumber */
|
||||||
|
SELECT
|
||||||
|
user_id,
|
||||||
|
email,
|
||||||
|
crtfd_number
|
||||||
|
FROM
|
||||||
|
VEA_INSTR_EMAIL_CRTFD
|
||||||
|
WHERE
|
||||||
|
user_id = #userId#
|
||||||
|
AND crtfd_number = #crtfdNumber#
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<update id="VEInstrMixDAO.updateInstrId" parameterClass="VEInstrDetailVO">
|
||||||
|
/* VEInstrMixDAO.updateInstrId */
|
||||||
|
UPDATE <include refid="VEInstrMixDAO.table_name"/> SET
|
||||||
|
user_id = #rqstId#
|
||||||
|
,last_updt_pnttm = sysdate
|
||||||
|
,last_updusr_id = #rqstId#
|
||||||
|
WHERE user_id = #userId#
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<update id="VEInstrMixDAO.updateInstrDetailSbmtY" parameterClass="VEInstrDetailVO">
|
||||||
|
/* VEInstrMixDAO.updateInstrDetailSbmtY */
|
||||||
|
UPDATE <include refid="VEInstrMixDAO.detail_table_name"/> SET
|
||||||
|
user_id = #rqstId#
|
||||||
|
,sbmt_yn = 'Y'
|
||||||
|
,sbmt_pnttm = sysdate
|
||||||
|
,last_updt_pnttm = sysdate
|
||||||
|
,last_updusr_id = #rqstId#
|
||||||
|
WHERE instr_detail_ord = #instrDetailOrd#
|
||||||
|
AND instr_div = #instrDiv#
|
||||||
|
</update>
|
||||||
|
>>>>>>> refs/heads/JIWOO
|
||||||
</sqlMap>
|
</sqlMap>
|
||||||
|
|||||||
@ -47,22 +47,16 @@
|
|||||||
</style>
|
</style>
|
||||||
<script type="text/javaScript" language="javascript">
|
<script type="text/javaScript" language="javascript">
|
||||||
|
|
||||||
function fncGoReg(instrDiv){
|
function fncGoRegPopupLayer(type){
|
||||||
var varFrom = document.getElementById("createForm");
|
commonPopLayeropen(
|
||||||
varFrom.instrDiv.value = instrDiv;
|
"${pageContext.request.contextPath}/web/ve/instr/popup/instrInfoChkPop.do"
|
||||||
if(instrDiv == '10'){
|
, 900
|
||||||
var url = "${pageContext.request.contextPath}/web/ve/instr/tngrVisitEdu/instrInfo/instrPrflReg.do";
|
, 464
|
||||||
/* var url = "${pageContext.request.contextPath}/web/ve/instr/tngrVisitEdu/instrInfo/instrPrflRegRqst.do"; */
|
, {'instrDiv' : type}
|
||||||
}
|
, "Y"
|
||||||
if(instrDiv == '20'){
|
, "fileUploadPop"
|
||||||
var url = "${pageContext.request.contextPath}/web/ve/instr/adultVisitEdu/instrInfo/instrPrflReg.do";
|
);
|
||||||
}
|
}
|
||||||
varFrom.action = url;
|
|
||||||
varFrom.submit();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@ -87,11 +81,11 @@
|
|||||||
<div class="sel_tpye">
|
<div class="sel_tpye">
|
||||||
<p><span>강사유형</span>을 선택해주세요</p>
|
<p><span>강사유형</span>을 선택해주세요</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li class="type1" onclick="fncGoReg('10'); return false;">
|
<li class="type1" onclick="fncGoRegPopupLayer('10'); return false;">
|
||||||
<i></i>
|
<i></i>
|
||||||
<p>청소년 대상</p>
|
<p>청소년 대상</p>
|
||||||
</li>
|
</li>
|
||||||
<li class="type2" onclick="fncGoReg('20'); return false;">
|
<li class="type2" onclick="fncGoRegPopupLayer('20'); return false;">
|
||||||
<i></i>
|
<i></i>
|
||||||
<p>성인 대상</p>
|
<p>성인 대상</p>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@ -0,0 +1,104 @@
|
|||||||
|
<%--
|
||||||
|
|
||||||
|
Class Name : instrPrflReg.jsp
|
||||||
|
Description : 강사등록
|
||||||
|
Modification Information
|
||||||
|
|
||||||
|
수정일 수정자 수정내용
|
||||||
|
------- -------- ---------------------------
|
||||||
|
2021.12.02 조용준 내용
|
||||||
|
|
||||||
|
author : 조용준
|
||||||
|
since : 2021.12.02
|
||||||
|
|
||||||
|
--%>
|
||||||
|
<%@ page contentType="text/html; charset=utf-8"%>
|
||||||
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
||||||
|
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||||
|
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||||
|
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
|
||||||
|
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||||
|
|
||||||
|
<!-- for validator #1 -->
|
||||||
|
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
|
||||||
|
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator"%>
|
||||||
|
<!-- for validator #1 -->
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ko">
|
||||||
|
<head>
|
||||||
|
<title>강사프로필 등록</title>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||||
|
|
||||||
|
<!-- for validator #2 -->
|
||||||
|
<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
|
||||||
|
<validator:javascript formName="vEInstrDetailVO" staticJavascript="false" xhtml="true" cdata="false" />
|
||||||
|
<!-- for validator #2 -->
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
input:disabled {
|
||||||
|
background-color: #f9f9f9 !important;
|
||||||
|
}
|
||||||
|
input:read-only {
|
||||||
|
background-color: #f9f9f9 !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script type="text/javaScript" language="javascript">
|
||||||
|
|
||||||
|
function fncGoReg(instrDiv){
|
||||||
|
var varFrom = document.getElementById("createForm");
|
||||||
|
varFrom.instrDiv.value = instrDiv;
|
||||||
|
if(instrDiv == '10'){
|
||||||
|
var url = "${pageContext.request.contextPath}/web/ve/instr/tngrVisitEdu/instrInfo/instrPrflReg.do";
|
||||||
|
/* var url = "${pageContext.request.contextPath}/web/ve/instr/tngrVisitEdu/instrInfo/instrPrflRegRqst.do"; */
|
||||||
|
}
|
||||||
|
if(instrDiv == '20'){
|
||||||
|
var url = "${pageContext.request.contextPath}/web/ve/instr/adultVisitEdu/instrInfo/instrPrflReg.do";
|
||||||
|
}
|
||||||
|
varFrom.action = url;
|
||||||
|
varFrom.submit();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- cont -->
|
||||||
|
<div class="cont_wrap" id="sub">
|
||||||
|
<form:form id="createForm" name="createForm" commandName="vEInstrDetailVO" onsubmit="return false;">
|
||||||
|
<input type="hidden" name="instrDiv" value="<c:out value='${info.instrDiv}'/>"/><!-- 강사구분 -->
|
||||||
|
</form:form>
|
||||||
|
<div class="tit_box">
|
||||||
|
<i class="tit_box_icon1"></i>
|
||||||
|
<div>
|
||||||
|
<p>찾아가는 저작권 교육</p>
|
||||||
|
<span>‘찾아가는 저작권 교육’은 저작권 교육이 필요한 <span>전국 초ㆍ중ㆍ고등학교, 청소년ㆍ아동복지ㆍ노인ㆍ장애인 기관 및 단체 등</span>에 직접 방문하여
|
||||||
|
무료로 강의를 지원하는 맞춤형 교육 서비스입니다.
|
||||||
|
<p style="font-weight:400;color:red;font-size:17px;padding-top:8px; padding-bottom: 0;">담당자 연락처) 055-792-0233</p></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="sel_tpye">
|
||||||
|
<p><span>강사유형</span>을 선택해주세요</p>
|
||||||
|
<ul>
|
||||||
|
<li class="type1" onclick="fncGoReg('10'); return false;">
|
||||||
|
<i></i>
|
||||||
|
<p>청소년 대상</p>
|
||||||
|
</li>
|
||||||
|
<li class="type2" onclick="fncGoReg('20'); return false;">
|
||||||
|
<i></i>
|
||||||
|
<p>성인 대상</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!-- //cont -->
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@ -0,0 +1,186 @@
|
|||||||
|
|
||||||
|
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
|
||||||
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||||
|
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
||||||
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
|
||||||
|
<%@ taglib prefix="ve" uri="/WEB-INF/tlds/kcc_tld.tld"%>
|
||||||
|
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||||
|
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||||
|
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
|
||||||
|
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator"%>
|
||||||
|
<%@ taglib prefix="un" uri="http://jakarta.apache.org/taglibs/unstandard-1.0" %>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="<c:url value='/innorix/innorix.css'/>" type="text/css">
|
||||||
|
<script type="text/javascript">
|
||||||
|
function fncInfoChk(){
|
||||||
|
//# sourceURL=foo.coffee
|
||||||
|
|
||||||
|
if($("#instrNm").val() == ''){
|
||||||
|
alert('성명을 입력해주세요.');
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
if($("#email1").val() == ''){
|
||||||
|
alert('이메일을 입력해주세요.');
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
if($("#email2").val() == ''){
|
||||||
|
alert('이메일을 입력해주세요.');
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
//이메일 합치기
|
||||||
|
$("#email").val($("#email1").val() + "@"+ $("#email2").val());
|
||||||
|
var data = new FormData(document.getElementById("linkForm"));
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
url: "${pageContext.request.contextPath}/web/ve/instr/instrInfo/instrInfoChkAjax.do",
|
||||||
|
data: data,
|
||||||
|
dataType:'json',
|
||||||
|
async: false,
|
||||||
|
processData: false,
|
||||||
|
contentType: false,
|
||||||
|
cache: false,
|
||||||
|
success: function (returnData, status) {
|
||||||
|
if(returnData.result == 'success'){
|
||||||
|
alert("이메일로 발송된 인증번호를 확인해주세요.");
|
||||||
|
$("#chkNo").show();
|
||||||
|
$(".btnType05").hide();
|
||||||
|
$("#instrDetailOrd").val(returnData.instrDetailOrd);
|
||||||
|
$("#userId").val(returnData.userId);
|
||||||
|
} else if(returnData.result == 'sndFail'){
|
||||||
|
alert("인증번호 발송이 실패했습니다. 관리자에게 문의해주세요.");
|
||||||
|
}else{
|
||||||
|
alert("등록된 강사정보가 없습니다. 관리자에게 문의해주세요.");
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); }
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
function fncChkNo(){
|
||||||
|
|
||||||
|
if($("#crtfdNumber").val().length != 6){
|
||||||
|
alert("인증번호 6자리를 입력해주세요.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var data = new FormData(document.getElementById("linkForm"));
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
url: "${pageContext.request.contextPath}/web/ve/instr/instrInfo/emailCrtfdChkAjax.do",
|
||||||
|
data: data,
|
||||||
|
dataType:"json",
|
||||||
|
async: false,
|
||||||
|
processData: false,
|
||||||
|
contentType: false,
|
||||||
|
cache: false,
|
||||||
|
success: function (returnData, status) {
|
||||||
|
if(returnData.result == 'success'){
|
||||||
|
instrAplct();
|
||||||
|
} else {
|
||||||
|
alert("인증번호가 일치하지 않습니다.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); }
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function instrAplct(){
|
||||||
|
var data = new FormData(document.getElementById("linkForm"));
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
url: "${pageContext.request.contextPath}/web/ve/instr/instrInfo/updateInstrSbmtYAjax.do",
|
||||||
|
data: data,
|
||||||
|
dataType:"json",
|
||||||
|
async: false,
|
||||||
|
processData: false,
|
||||||
|
contentType: false,
|
||||||
|
cache: false,
|
||||||
|
success: function (returnData, status) {
|
||||||
|
if(returnData.result == 'success'){
|
||||||
|
alert("강사 신청 완료하였습니다.");
|
||||||
|
location.href="<c:url value='/web/main/mainPage.do'/>";
|
||||||
|
} else {
|
||||||
|
alert("강사 신청 실패하였습니다");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- 파일 업로드 -->
|
||||||
|
<form name="linkForm" id="linkForm" method="post" >
|
||||||
|
<input type="hidden" name="instrDiv" id="instrDiv" value="<c:out value='${vEEduAplctVO.instrDiv}'/>"/><!-- 강사구분 -->
|
||||||
|
<input type="hidden" name="email" id="email" value=""/><!-- 강사구분 -->
|
||||||
|
<input type="hidden" name="instrDetailOrd" id="instrDetailOrd" value=""/>
|
||||||
|
<input type="hidden" name="userId" id="userId" value=""/>
|
||||||
|
<div class="tooltip-wrap">
|
||||||
|
<div class="popup_wrap popType03" tabindex="0" data-tooltip-con="sub35_pop01" data-focus="sub35_pop01" data-focus-prev="sub35_pop01_close">
|
||||||
|
<div class="popup_tit">
|
||||||
|
<p>
|
||||||
|
강사 인증
|
||||||
|
</p>
|
||||||
|
<button class="btn_popup_close tooltip-close" data-focus="list_popup_close" title="팝업 닫기"><i></i></button>
|
||||||
|
</div>
|
||||||
|
<div class="popup_cont">
|
||||||
|
<div class="pop_tb_type01">
|
||||||
|
<table>
|
||||||
|
<caption>숙박신청 (th)를 제공하는 표</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 120px;">
|
||||||
|
<col style="width: auto">
|
||||||
|
</colgroup>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">
|
||||||
|
<p>성명</p>
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="instrNm" id="instrNm">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">
|
||||||
|
<p>이메일</p>
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="email1" id="email1" onkeyup="onlyAlphabetNumber(this);" size="20" maxlength="30">
|
||||||
|
@
|
||||||
|
<input type="text" name="email2" id="email2" onkeyup="onlyAlphabetNumber(this);" size="20" maxlength="30">
|
||||||
|
<ve:select codeId="ADR030" id="emailType" name="emailType" styleClass="selType1" defaultValue="" defaultText="직접입력" onChange="emailSelect(this);"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr id="chkNo" style="display:none;">
|
||||||
|
<th scope="row">
|
||||||
|
<p>인증번호</p>
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="crtfdNumber" id="crtfdNumber" onkeyup="onlyNumber(this);" size="20" maxlength="6">
|
||||||
|
<button type="button" class="btnType06" onclick="fncChkNo();">인증하기</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="pop_btn_wrap btn_layout01">
|
||||||
|
<div class="btn_left">
|
||||||
|
</div>
|
||||||
|
<div class="btn_center">
|
||||||
|
<button type="button" class="btnType05" onclick="fncInfoChk();">정보 확인</button>
|
||||||
|
<button type="button" class="btnType02 tooltip-close" data-focus="sub35_pop01_close" data-focus-next="sub35_pop01">취소</button>
|
||||||
|
</div>
|
||||||
|
<div class="btn_right">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<!--// 파일 업로드 -->
|
||||||
Loading…
Reference in New Issue
Block a user