이지우 - 저작권체험교실 작업중

This commit is contained in:
jiwoo 2023-10-04 14:13:44 +09:00
parent a7f8cbd561
commit db2a329644
12 changed files with 869 additions and 521 deletions

View File

@ -127,5 +127,7 @@ public interface EgovUserManageService {
public UserManageVO selectOffeduUser(UserManageVO userManageVO) throws Exception;
public List<UserManageVO> selectOffeduUserList(UserManageVO userManageVO) throws Exception;
public void insertOffeduUser(UserManageVO userManageVO) throws Exception;
}

View File

@ -176,6 +176,8 @@ public class UserManageVO extends UserDefaultVO{
private String mberId; //회원 Id
private int totCnt = 0; //회원 Id
public String getAuthorCode() {
return authorCode;
}
@ -707,6 +709,12 @@ public class UserManageVO extends UserDefaultVO{
public void setMberId(String mberId) {
this.mberId = mberId;
}
public int getTotCnt() {
return totCnt;
}
public void setTotCnt(int totCnt) {
this.totCnt = totCnt;
}
}

View File

@ -312,6 +312,11 @@ public class EgovUserManageServiceImpl extends EgovAbstractServiceImpl implement
return userManageVO;
}
@Override
public List<UserManageVO> selectOffeduUserList(UserManageVO userManageVO) throws Exception{
return userManageDAO.selectOffeduUserList(userManageVO);
}
@Override
// @Transactional(rollbackFor = Exception.class)
public void insertOffeduUser(UserManageVO userManageVO) throws Exception {

View File

@ -189,6 +189,9 @@ public class UserManageDAO extends EgovAbstractDAO{
return (UserManageVO)select("userManageDAO.selectOffeduUser", userManageVO);
}
public List<UserManageVO> selectOffeduUserList(UserManageVO userManageVO) throws Exception{
return (List<UserManageVO>)list("userManageDAO.selectOffeduUserList", userManageVO);
}
public void insertOffeudUser(UserManageVO userManageVO){
insert("userManageDAO.insertOffeduUser", userManageVO);
}

View File

@ -14,8 +14,9 @@ import org.springframework.web.servlet.ModelAndView;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import kcc.com.cmm.LoginVO;
import kcc.com.cmm.util.StringUtil;
import kcc.com.utl.user.service.CheckLoginUtil;
import kcc.let.uss.umt.service.EgovUserManageService;
import kcc.let.uss.umt.service.UserManageVO;
import kcc.ve.aplct.cpyrgExprnClsrm.exprnClsrmAplct.service.ScholInfoMIXService;
import kcc.ve.aplct.cpyrgExprnClsrm.exprnClsrmAplct.service.ScholInfoService;
import kcc.ve.aplct.cpyrgExprnClsrm.exprnClsrmAplct.service.ScholInfoVO;
@ -54,6 +55,11 @@ public class CommonManageWebController {
@Resource(name = "vEEduAplctSndHstryService")
private VEEduAplctSndHstryService vEEduAplctSndHstryService;
//회원조회
@Resource(name = "userManageService")
private EgovUserManageService userManageService;
/**
* 학교정보 검색 팝업 리스트
*/
@ -78,12 +84,25 @@ public class CommonManageWebController {
//검색 조건
String selectCondition = new String();
if (!"".equals(scholInfoVO.getSearchKeyword())) {
selectCondition += "AND a.SCHOL_NM LIKE CONCAT ('%', '" +scholInfoVO.getSearchKeyword() + "', '%')";
selectCondition += " AND A.SCHOL_NM LIKE '%"+scholInfoVO.getSearchKeyword()+"%' ";
}
//2.2 학교종류
if(StringUtil.isNotEmpty(scholInfoVO.getSearchCondition())){
/*if(StringUtil.isNotEmpty(scholInfoVO.getSearchCondition())){
selectCondition += "AND DECODE(schol_grade_nm, '초등학교','10', '중학교','20', '고등학교','30',IF (INSTR(schol_grade_nm,'각종학교')>0,'40','50')) IN ('"+scholInfoVO.getSearchCondition()+"')";
}*/
if (!"".equals(scholInfoVO.getSearchCondition())) {
if(scholInfoVO.getSearchCondition().equals("10")) {
selectCondition += " AND A.SCHOL_GRADE_NM LIKE '%초등%' ";
}else if(scholInfoVO.getSearchCondition().equals("20")) {
selectCondition += " AND A.SCHOL_GRADE_NM LIKE '%중학%' ";
}else if(scholInfoVO.getSearchCondition().equals("30")) {
selectCondition += " AND A.SCHOL_GRADE_NM LIKE '%고등%' ";
}else if(scholInfoVO.getSearchCondition().equals("40")) {
selectCondition += " AND A.SCHOL_GRADE_NM LIKE '%특수%' ";
}else if(scholInfoVO.getSearchCondition().equals("50")) {
selectCondition += " AND A.SCHOL_GRADE_NM LIKE '%각종%' ";
}
}
scholInfoVO.setSelectPagingListQuery(selectCondition);
@ -198,5 +217,35 @@ public class CommonManageWebController {
return "/web/ve/comm/selectPrcsDetailList";
}
/**
* 회원 검색 팝업 리스트
*/
@RequestMapping("popup/userPopList.do")
public String userPopList(@ModelAttribute("searchVO") UserManageVO userManageVO , ModelMap model , HttpServletRequest request ) throws Exception {
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(userManageVO.getPageIndex());
paginationInfo.setRecordCountPerPage(userManageVO.getPageUnit());
paginationInfo.setPageSize(10);
// paging step2
userManageVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
userManageVO.setLastIndex(paginationInfo.getLastRecordIndex());
userManageVO.setRecordCountPerPage(10);
if("".equals(userManageVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
userManageVO.setSearchSortCnd("mber_id");
userManageVO.setSearchSortOrd("asc");
}
List<UserManageVO> userList = userManageService.selectOffeduUserList(userManageVO);
//3.paging step3
int totCnt = 0;
if(userList.size() > 0) totCnt = userList.get(0).getTotCnt();
paginationInfo.setTotalRecordCount(totCnt);
model.addAttribute("paginationInfo", paginationInfo);
//학교정보 리스트, 페이징 정보 전달
model.addAttribute("userList", userList);
return "oprtn/cmm/userPopListBower";
}
}

View File

@ -24,8 +24,10 @@ import kcc.com.cmm.service.FileVO;
import kcc.com.cmm.util.DateUtil;
import kcc.com.utl.user.service.CheckFileUtil;
import kcc.com.utl.user.service.CheckLoginUtil;
import kcc.ve.cmm.VeConstants;
import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsAplctPrdService;
import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsDetailVO;
import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsMIXService;
import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsOnlnCntntService;
import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsService;
@ -91,6 +93,9 @@ public class OprtnAplctAnncmMngController {
@Resource(name = "checkFileUtil")
private CheckFileUtil checkFileUtil;
//교육과정신청
@Resource(name = "vEPrcsMIXService")
private VEPrcsMIXService vEPrcsMIXService;
/*
@ -174,6 +179,21 @@ public class OprtnAplctAnncmMngController {
}
/**
* 저작권체험교실 등록 화면
*/
@RequestMapping("oprtnAplctAnncmMngReg.do")
public String oprtnAplctMgrReg( @ModelAttribute("modelVO") VEPrcsDetailVO vEPrcsDetailVO , ModelMap model) throws Exception {
vEPrcsDetailVO.setMode(VeConstants.MODE_CRT);
//온라인차시 리스트
vEPrcsDetailVO.setUseYn("Y");
vEPrcsDetailVO.setLctrDivCd(VeConstants.LCTR_DIV_CD_30);
List<VEPrcsDetailVO> vEPrcsDetailVOList = vEPrcsMIXService.selectPrcsList(vEPrcsDetailVO);
//대상 리스트, 페이징 정보 전달
model.addAttribute("list", vEPrcsDetailVOList);
return "oprtn/cpyrgExprnClsrm/oprtnAplctAnncmMngReg";
}
/**
* 교육과정관리 상세 화면
@ -402,29 +422,7 @@ public class OprtnAplctAnncmMngController {
/**
* 교육과정관리 등록 화면
*/
@RequestMapping("oprtnAplctAnncmMngReg.do")
public String OprtnAplctAnncmMngReg(
@ModelAttribute("vEPrcsDetailVO") VEPrcsDetailVO vEPrcsDetailVO
, ModelMap model
) throws Exception {
//로그인 처리====================================
//로그인 정보 가져오기
String s_oprtnLoginCheckNInfo = checkLoginUtil.oprtnCheckNInfo(model);
if (!"".equals(s_oprtnLoginCheckNInfo)) return s_oprtnLoginCheckNInfo;
LoginVO loginVO = checkLoginUtil.getAuthLoginVO(); //권한에 따른 로그인 정보 가져오기
model.addAttribute("loginVO", loginVO);
//로그인 처리====================================
return "oprtn/cpyrgExprnClsrm/oprtnAplctAnncmMngReg";
}
/**
* 교육과정관리 등록

View File

@ -1,21 +1,36 @@
package kcc.ve.oprtn.cpyrgExprnClsrm.oprtnAplctMng.web;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
@ -153,19 +168,27 @@ public class OprtnAplctMngController {
/**
* 저작권체험교실 등록 화면
* 교육과정관리 등록 화면
*/
@RequestMapping("oprtnAplctMngReg.do")
public String oprtnAplctMgrReg( @ModelAttribute("modelVO") VEPrcsDetailVO vEPrcsDetailVO , ModelMap model) throws Exception {
vEPrcsDetailVO.setMode(VeConstants.MODE_CRT);
//온라인차시 리스트
vEPrcsDetailVO.setUseYn("Y");
vEPrcsDetailVO.setLctrDivCd(VeConstants.LCTR_DIV_CD_30);
List<VEPrcsDetailVO> vEPrcsDetailVOList = vEPrcsMIXService.selectPrcsList(vEPrcsDetailVO);
//대상 리스트, 페이징 정보 전달
model.addAttribute("list", vEPrcsDetailVOList);
return "oprtn/cpyrgExprnClsrm/oprtnAplctMngReg";
public String OprtnAplctAnncmMngReg(
@ModelAttribute("vEPrcsDetailVO") VEPrcsDetailVO vEPrcsDetailVO
, ModelMap model
) throws Exception {
//로그인 처리====================================
//로그인 정보 가져오기
String s_oprtnLoginCheckNInfo = checkLoginUtil.oprtnCheckNInfo(model);
if (!"".equals(s_oprtnLoginCheckNInfo)) return s_oprtnLoginCheckNInfo;
LoginVO loginVO = checkLoginUtil.getAuthLoginVO(); //권한에 따른 로그인 정보 가져오기
model.addAttribute("loginVO", loginVO);
//로그인 처리====================================
return "oprtn/cpyrgExprnClsrm/oprtnAplctMngReg";
}
/**
@ -459,7 +482,222 @@ String[] order = {
return modelAndView;
}
/**
* 저작권 체험교실 운영신청 목록 업로드 파일 일괄 다운로드
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value = "oprtnAplctFileAllDownLoad.do")
public void oprtnAplctFileAllDownLoad(@RequestParam Map<String, Object> commandMap
, HttpServletRequest request, HttpServletResponse response) throws Exception {
//파일 SN을 리스트에 담기
List<String> atchFileIdList = new ArrayList<String>();
//파일 SN을 리스트에 담기
List<String> atchFileSnList = new ArrayList<String>();
//split을 이용해 아이디를 각자 배열에 담기
String[] splitIdStr = commandMap.get("atchFileId").toString().split(",");
String[] splitSnStr = commandMap.get("fileSn").toString().split(",");
//zip파일 이름
String orgnZipNm = commandMap.get("orgnZipNm").toString();
//downloadType (A:ID가 여러개고 fileSn이 1개인 경우 || B:ID는 하나이고 fileSn이 여러개인 경우)
String downloadType = commandMap.get("downloadType").toString();
String atchFileId = new String();
String fileSn = new String();
//ID가 여러개고 fileSn이 1개인 경우
if("A".equals(downloadType)) {
fileSn = "0";
for(int i=0; i<splitIdStr.length; i++) {
atchFileIdList.add(splitIdStr[i]);
}
}
//ID는 하나이고 fileSn이 여러개인 경우
if("B".equals(downloadType)) {
atchFileId = splitIdStr[0];
for(int i=0; i<splitSnStr.length; i++) {
atchFileSnList.add(splitSnStr[i]);
}
}
FileVO fileVO = new FileVO();
fileVO.setDownloadType(downloadType);
if("A".equals(downloadType)) {
fileVO.setAtchFileIdList(atchFileIdList);
fileVO.setFileSn(fileSn);
} else if("B".equals(downloadType)) {
fileVO.setAtchFileId(atchFileId);
fileVO.setAtchFileSnList(atchFileSnList);
}
List<FileVO> fvoList = fileService.selectZipFileList(fileVO); // 해당 기능에 맞게 파일 조회
if(fvoList.size() == 0){
response.setContentType("application/x-msdownload");
PrintWriter printwriter = response.getWriter();
printwriter.println("<html>");
printwriter.println("<br><br><br><h2>Could not get file name:<br></h2>");
printwriter.println("<br><br><br><center><h3><a href='javascript: history.go(-1)'>Back</a></h3></center>");
printwriter.println("<br><br><br>&copy; webAccess");
printwriter.println("</html>");
printwriter.flush();
printwriter.close();
return ;
}
// buffer size
int size = 1024;
byte[] buf = new byte[size];
String outZipNm = fvoList.get(0).getFileStreCours()+File.separator + orgnZipNm;
FileInputStream fis = null;
ZipArchiveOutputStream zos = null;
BufferedInputStream bis = null;
try {
// Zip 파일생성
zos = new ZipArchiveOutputStream(new BufferedOutputStream(new FileOutputStream(outZipNm)));
for ( FileVO vo : fvoList ){
zos.setEncoding("UTF-8");
//buffer에 해당파일의 stream을 입력한다.
fis = new FileInputStream(vo.getFileStreCours() + "/" + vo.getStreFileNm());
bis = new BufferedInputStream(fis,size);
//zip에 넣을 다음 entry 가져온다.
zos.putArchiveEntry(new ZipArchiveEntry(vo.getOrignlFileNm()));
//준비된 버퍼에서 집출력스트림으로 write 한다.
int len;
while((len = bis.read(buf,0,size)) != -1) zos.write(buf,0,len);
bis.close();
fis.close();
zos.closeArchiveEntry();
}
zos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
if( zos != null ) zos.close();
if( fis != null ) fis.close();
if( bis != null ) bis.close();
}
File uFile = new File(fvoList.get(0).getFileStreCours(), orgnZipNm);
long fSize = uFile.length();
if (fSize > 0) {
String mimetype = "application/x-msdownload";
response.setContentType(mimetype);
setDisposition(orgnZipNm, request, response);
//response.setContentLength(fSize);
BufferedInputStream in = null;
BufferedOutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(uFile));
out = new BufferedOutputStream(response.getOutputStream());
FileCopyUtils.copy(in, out);
out.flush();
} catch (Exception ex) {
LOGGER.debug("IGNORED: {}", ex.getMessage());
} finally {
if (in != null) {
try {
in.close();
} catch (Exception ignore) {
LOGGER.debug("IGNORED: {}", ignore.getMessage());
}
}
if (out != null) {
try {
out.close();
} catch (Exception ignore) {
LOGGER.debug("IGNORED: {}", ignore.getMessage());
}
}
}
//파일 다운로드 파일 삭제
File delFile = new File(outZipNm);
delFile.delete();
} else {
response.setContentType("application/x-msdownload");
PrintWriter printwriter = response.getWriter();
printwriter.println("<html>");
printwriter.println("<br><br><br><h2>Could not get file name:<br>" + orgnZipNm + "</h2>");
printwriter.println("<br><br><br><center><h3><a href='javascript: history.go(-1)'>Back</a></h3></center>");
printwriter.println("<br><br><br>&copy; webAccess");
printwriter.println("</html>");
printwriter.flush();
printwriter.close();
}
}
private void setDisposition(String filename, HttpServletRequest request, HttpServletResponse response) throws Exception {
String browser = getBrowser(request);
String dispositionPrefix = "attachment; filename=";
String encodedFilename = null;
if (browser.equals("MSIE")) {
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");
} else if (browser.equals("Trident")) { // IE11 문자열 깨짐 방지
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");
} else if (browser.equals("Firefox")) {
encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
} else if (browser.equals("Opera")) {
encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
} else if (browser.equals("Chrome")) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < filename.length(); i++) {
char c = filename.charAt(i);
if (c > '~') {
sb.append(URLEncoder.encode("" + c, "UTF-8"));
} else {
sb.append(c);
}
}
encodedFilename = sb.toString();
} else {
//throw new RuntimeException("Not supported browser");
throw new IOException("Not supported browser");
}
// response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename); // 파일명에 콤마 포함시 오류
response.setHeader("Content-Disposition", dispositionPrefix + "\"" + encodedFilename + "\"");
if ("Opera".equals(browser)) {
response.setContentType("application/octet-stream;charset=UTF-8");
}
}
private String getBrowser(HttpServletRequest request) {
String header = request.getHeader("User-Agent");
if (header.indexOf("MSIE") > -1) {
return "MSIE";
} else if (header.indexOf("Trident") > -1) { // IE11 문자열 깨짐 방지
return "Trident";
} else if (header.indexOf("Chrome") > -1) {
return "Chrome";
} else if (header.indexOf("Opera") > -1) {
return "Opera";
}
return "Firefox";
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//

View File

@ -927,4 +927,16 @@
)
</insert>
<select id="userManageDAO.selectOffeduUserList" parameterClass="userVO" resultClass="userVO">
/* 임시.*NOT_SQL_LOG.* userManageDAO.selectOffeduUser */
SELECT COUNT(mber_id) OVER() AS totCnt,
a.mber_id AS mberId
FROM lettngnrlmber a
WHERE 1=1
<isNotEmpty property="searchWord" prepend="AND">
a.mber_id LIKE '%'||#searchWord#||'%'
</isNotEmpty>
OFFSET #firstIndex# ROWS FETCH NEXT #recordCountPerPage# ROWS ONLY;
</select>
</sqlMap>

View File

@ -53,6 +53,7 @@
<!-- 강사 정보 L page -->
<select id="ScholInfoMIXDAO.selectPagingList" parameterClass="ScholInfoVO" resultClass="ScholInfoVO">
/* 임시.*NOT_SQL_LOG.* ScholInfoDAO.selectPagingList*/
SELECT
COUNT(1) OVER() AS totCnt ,
a.SCHOL_ID AS scholId
@ -81,25 +82,27 @@
,a.ESTBS_DT AS estbsDt
,a.SCHOL_ANVSRY AS scholAnvsry
,a.LAST_UPDT_PNTTM AS lastUpdtPnttm
, IF(b.stndrd_schol_cd IS null,'N','Y') AS isltnScholYn
, DECODE(schol_grade_nm, '초등학교','10', '중학교','20', '고등학교','30',if (INSTR(schol_grade_nm,'각종학교')>0,'40','50')) AS scholDivCd
/* , IF(b.stndrd_schol_cd IS null,'N','Y') AS isltnScholYn */
, CASE WHEN b.schol_isltn_ord is null THEN 'N' ELSE 'Y' END isltnScholYn
/* , DECODE(schol_grade_nm, '초등학교','10', '중학교','20', '고등학교','30',if (INSTR(schol_grade_nm,'각종학교')>0,'40','50')) AS scholDivCd */
, DECODE(schol_grade_nm, '초등학교','10', '중학교','20', '고등학교','30',CASE WHEN INSTR(schol_grade_nm, '각종학교') > 0 THEN '40' ELSE '50' END) AS scholDivCd
FROM <include refid="ScholInfoMIXDAO.table_name"/> a
LEFT OUTER JOIN ve_schol_isltn b
ON(a.schol_id=b.schol_id)
ON(a.schol_id=b.schol_isltn_ord)
WHERE 1=1
<isNotEmpty property="selectPagingListQuery">
$selectPagingListQuery$
</isNotEmpty>
ORDER BY 1=1
ORDER BY 1
<isEmpty property="orderByQuery">
, a.schol_nm asc
</isEmpty>
<isNotEmpty property="orderByQuery">
, $orderByQuery$
</isNotEmpty>
LIMIT #recordCountPerPage# OFFSET #firstIndex#
OFFSET #firstIndex# ROWS FETCH NEXT #recordCountPerPage# ROWS ONLY;
</select>
</sqlMap>

View File

@ -0,0 +1,84 @@
<%@ 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"%>
<%@ taglib prefix="kc" uri="/WEB-INF/tlds/kcc_tld.tld"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<title>학교명 검색</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/kccadrPb/usr/script/popup.js"></script>
<script type="text/javaScript" language="javascript">
$(document).ready(function(){
});
function fncGoList(){
linkPage(1);
}
function linkPage(pageNo){
var popList = document.popList ;
popList.pageIndex.value = pageNo ;
popList.action = "<c:url value='/kccadr/oprtn/comm/popup/userPopList.do'/>";
popList.submit();
}
function fncUserDataSlct(obj){
opener.$("#userId").val(obj.getAttribute('data-value'));
self.close();
}
</script>
</head>
<body>
<!-- 일정 상세 -->
<form:form commandName="userManageVO" id="popList" name="popList" method="post" onsubmit="return false;">
<input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}' default='1' />"/>
<input type="hidden" name="pageUnit" value="<c:out value='${searchVO.pageUnit}' default='1' />"/>
<input type="hidden" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" />
<input type="hidden" name="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" />
<div class="area_popup">
<div class="cont_popup">
<div class="pop_list_top">
<input type="text" name="searchWord" id="searchWord" style="width: 450px;" value="<c:out value='${searchVO.searchWord}' />" placeholder="아이디 입력" size="20">
<button type="button" class="btn_type08" onclick="fncGoList(); return false;">검색</button>
</div>
<div class="pop_tb_type01 list2">
<table>
<colgroup>
<col style="width: auto;">
</colgroup>
<thead>
<tr>
<th scope="col">아이디</th>
</tr>
</thead>
<tbody>
<c:forEach var="row" items="${userList}" varStatus="status">
<tr>
<td>
<a href="#" onclick="fncUserDataSlct(this); return false;" data-value="${row.mberId}"><c:out value="${row.mberId}" /></a>
<input type="hidden" name="userId" value="${row.mberId}"/>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
<div class="page">
<ui:pagination paginationInfo = "${paginationInfo}" type="image" jsFunction="linkPage" />
</div>
</div>
</div>
</form:form>
</body>
</html>

View File

@ -139,6 +139,20 @@ input:read-only {
});
}
}
function fileDownLoad() {
alert("개발전");
return;
var listForm = document.listForm;
listForm.action = "<c:url value='/kccadr/oprtn/cpyrgExprnClsrm/oprtnAplctFileAllDownLoad.do'/>";
listForm.submit();
}
function fncCreate() {
var listForm = document.listForm ;
listForm.action = "<c:url value='/kccadr/oprtn/cpyrgExprnClsrm/oprtnAplctMngReg.do'/>";
listForm.submit();
}
</script>
<title>신청관리</title>
</head>
@ -279,7 +293,7 @@ input:read-only {
<c:if test="${vEEduAplctVO.pageUnit == '100'}">selected</c:if>>100줄</option>
</select>
<button type="button"
onclick="excelDownLoad();">첨부파일 다운로드</button>
onclick="fileDownLoad();">첨부파일 다운로드</button>
<button type="button" class="btn_down_excel"
onclick="excelDownLoad();">엑셀 다운로드</button>
</div>
@ -385,10 +399,6 @@ input:read-only {
<!-- //list -->
<div class="btn_wrap btn_layout01">
<div class="btn_left">
</div>
<div class="btn_center">
</div>
<div class="btn_right">
<select name="aprvlCdSelect" id="aprvlCdSelect"class="sel_type1">
<option value="">선택</option>
<option value="10">운영신청</option>
@ -397,7 +407,13 @@ input:read-only {
<option value="60">운영확정</option>
<option value="90">운영미확정</option>
</select>
<button class="btn_type06" onclick="fncStatusChangeAll(); return false;" >일괄변경</button>
<button class="btn_type04" onclick="fncStatusChangeAll(); return false;" >일괄변경</button>
</div>
<div class="btn_center">
</div>
<div class="btn_right">
<button class="btn_type06" onclick="fncCreate(); return false;" >등록</button>
</div>
</div>
<!-- page -->

View File

@ -1,44 +1,123 @@
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ 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="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="kc" uri="/WEB-INF/tlds/kcc_tld.tld"%>
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="kc" uri="/WEB-INF/tlds/kcc_tld.tld"%>
<%@ taglib prefix="un" uri="http://jakarta.apache.org/taglibs/unstandard-1.0" %>
<un:useConstants var="VeConstants" className="kcc.ve.cmm.VeConstants" />
<%
/**
* @Class Name : oprtnAplctAnncmMngReg.jsp
* @Description : 운영신청안내관리 등록
* @Modification Information
* @
* @ 수정일 수정자 수정내용
* @ ------- -------- ---------------------------
* @ 2021.12.16 조용준 최초 생성
* @author 조용주
* @since 2021.12.16
* @version 1.0
* @see
*
*/
%>
<c:set var="now" value="<%=new java.util.Date()%>" />
<c:set var="sysYear"><fmt:formatDate value="${now}" pattern="yyyy" /></c:set>
<c:set var="sysYear">
<fmt:formatDate value="${now}" pattern="yyyy" />
</c:set>
<html lang="ko">
<head>
<title>교육신청 수정</title>
<title>교육과정관리</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript">
$( document ).ready(function(){
$(".btn_add_file").on('click', function(){
$(document).ready(function() {
/* 학교구분 라이도버튼 비활성화 */
$("input[name=scholDivCd]").attr("onclick", "return(false);")
$(".btn_type01").on('click', function(){
$("#file_temp").click();
});
});
function fncSave(){
if($("#title").val() == ""){
alert("제목을 입력해주세요.");
return false;
}
if($("#strtPnttm").val() == ""){
alert("시작일을 입력해주세요.");
return false;
}
if($("#endPnttm").val() == ""){
alert("종료일을 입력해주세요.");
return false;
}
/* if($("#anncmCn").val() == ""){
alert("안내내용을 입력해주세요.");
return false;
}
if($("#popupCn").val() == ""){
alert("팝업내용을 입력해주세요.");
return false;
} */
//첨부파일 등록 처리
$('#file_temp').val(""); //첨부파일 중복 등록 방지를 위해 추가
//var data = new FormData(form);
var data = new FormData(document.getElementById("createForm"));
//첨부파일 등록 처리-step1
//if(!data.get("fileSize")){
if($('#tbody_fiielist tr').length*1<=0){
alert("첨부파일을 등록해 주세요");
return false;
}
//첨부파일 등록 처리-step2
_fileForm2.forEach(function(obj, idx) {
if (obj) data.append("file"+idx, obj.fileObj);
});
if(confirm("저장하시겠습니까?")){
var url = "${pageContext.request.contextPath}/kccadr/oprtn/cpyrgExprnClsrm/oprtnAplctAnncmMngRegAjax.do";
console.log(data);
$.ajax({
type:"POST",
enctype: 'multipart/form-data',
url: url,
data: data,
dataType:'json',
async: false,
processData: false,
contentType: false,
cache: false,
success:function(returnData){
//if(returnData.result == "success" && returnData.rsCnt > 0 ){
if(returnData.result == "success"){
alert("저장되었습니다.");
fncGoList();
}
},
error:function(request , status, error){
alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
}
});
}
}
function fncGoList(){
var listForm = document.listForm ;
listForm.action = "<c:url value='/kccadr/oprtn/cpyrgExprnClsrm/oprtnAplctMngList.do'/>";
listForm.submit();
}
function fncGoDetail(){
var createForm = document.createForm ;
createForm.action = "<c:url value='/kccadr/oprtn/cpyrgExprnClsrm/oprtnAplctMngDetail.do'/>";
createForm.submit();
}
function fncScholList() {
commonPopWindowopenForm(
"${pageContext.request.contextPath}/kccadr/oprtn/comm/popup/scholPopList.do"
@ -48,6 +127,15 @@
);
}
function fncUserList() {
commonPopWindowopenForm(
"${pageContext.request.contextPath}/kccadr/oprtn/comm/popup/userPopList.do"
, "700"
, "750"
, "UserListPop",$("#popupForm")
);
}
function callBackSchPop(schData){
if(emptyObject(schData)){
alert("오류가 발생하였습니다. 관리자에게 문의해주세요 [ERR-SCH-POP]")
@ -63,288 +151,85 @@
$('input[name=isltnScholYn][value='+schData.isltnScholYn+']').prop('checked', true);
}
function fncSave(type){
if(type == 'S'){
if (!validCheck()) return;
}
var url = '${pageContext.request.contextPath}/kccadr/oprtn/cpyrgExprnClsrm/oprtnAplctMngRegAjax.do';
if(VeConstants.MODE_UPT == $("#mode").val()){
url = '${pageContext.request.contextPath}/kccadr/oprtn/cpyrgExprnClsrm/oprtnAplctMngMdfyAjax.do';
}
fncDataReplace();
var data = new FormData(document.getElementById("createForm"));
if(confirm("교육신청을 "+(type == 'I'? '임시저장' : '등록')+"하시겠습니까?")){
_fileForm2.forEach(function(obj, idx) {
if (obj) data.append("file"+idx, obj.fileObj);
});
//첨부파일 등록 처리
$('#file_temp').val(""); //첨부파일 중복 등록 방지를 위해 추가
$.ajax({
type: "POST",
enctype: 'multipart/form-data',
url: url,
data: data,
dataType:'json',
async: false,
processData: false,
contentType: false,
cache: false,
success: function (returnData, status) {
$("#eduAplctOrd").val(returnData.VO.eduAplctOrd);
if(status == 'success'){
alert("등록 되었습니다.");
fncGoDetail(); //현재 메인화면 이동
} else if(status== 'fail'){
alert("등록에 실패하였습니다.");
}
},
error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); }
});
function oprtnYn(){
var radioVal = $('input[name="exprnClsrnCd"]:checked').val();
if(radioVal == "01"){
$('input[name="eClsrnYear"]').attr('disabled',false);
}else{
$('input[name="eClsrnYear"]').attr('disabled',true);
$('input[name="eClsrnYear"]').prop('checked',false);
}
}
// 데이터 저장전 치환해야할 데이터
function fncDataReplace(){
if($("#email1").val() != '' && $("#email2").val() != '') {
var emailAll = document.getElementById("email1").value + "@" + document.getElementById("email2").value;
$("#email").val(emailAll)
function fncEtcInputEnable(thisObj){
$("#exprnClsrnAplctCn").val('');
if($(thisObj).val() == '04'){
$("#exprnClsrnAplctCn").prop('disabled' , false);
}else{
$("#exprnClsrnAplctCn").prop('disabled' , true);
}
if($("#birthYear").val() != '' && $("#birthMonth").val() != '' && $("#birthDay").val() != ''){
$("#dBirth").val($("#birthYear").val()+$("#birthMonth").val()+$("#birthDay").val());
}
if($("#cmpltNum").val() != ''){
$('#cmpltNum').val($('#cmpltNum').val().replace(/-/gi, ''));
}
if($("input[name=eClsrnYear]:checked").length != 0){
var arr = $.map($("input[name=eClsrnYear]:checked"), function(elm,idx){return [elm.value]});
$('#exprnClsrnYear').val(arr);
}
$('#rprtSbmt').val($('#rprtSbmt').val().replace(/-/gi, ''));
$('#oprtnStrtDt').val($('#oprtnStrtDt').val().replace(/[.]/gi, ''));
$('#oprtnEndDt').val($('#oprtnEndDt').val().replace(/[.]/gi, ''));
}
function validCheck(){
if($("#scholInsttNm").val() == ''){
alert('학교(기관)명을 선택해주세요.');
$("#scholInsttNm").focus();
return false;
};
if($("#chrgNm").val() == ''){
alert('교사명을 입력해주세요.');
$("#chrgNm").focus();
return false;
};
if($("#chrgSexCd").val() == ''){
alert('성별을 선택해주세요.');
$("#chrgSexCd").focus();
return false;
};
if($("#email1").val() == '' || $("#email2").val() == ''){
alert('이메일을 입력해주세요.');
$("#email1").focus();
return false;
}
if($("#post").val() == ''){
alert('주소를 입력해주세요.');
$("#post").focus();
return false;
};
if($("#addrDetail").val() == ''){
alert('상세주소를 입력해주세요.');
$("#addrDetail").focus();
return false;
};
if($("#chrgMjr").val() == ''){
alert('담당교과를 입력해주세요.');
$("#chrgMjr").focus();
return false;
};
if($("#birthYear").val() == ''){
alert('생년월일 년도를 선택해주세요.');
$("#birthYear").focus();
return false;
};
if($("#birthMonth").val() == ''){
alert('생년월일 월를 선택해주세요.');
$("#birthMonth").focus();
return false;
};
if($("#birthDay").val() == ''){
alert('생년월일 일자를 선택해주세요.');
$("#birthDay").focus();
return false;
};
if($("#cmpltYear").val() == ''){
alert('이수년도를 입력해주세요.');
$("#cmpltYear").focus();
return false;
};
if($("#cmpltNum").val() == ''){
alert('이수번호를 입력해주세요.');
$("#cmpltNum").focus();
return false;
}
if($("#exprnClsrnCd").val() == ''){
alert('체험교실운영여부 구분을 선택해주세요.');
$("#exprnClsrnCd").focus();
return false;
};
if($("input[name=eClsrnYear]:checked").length == 0){
alert('체험교실운영여부 년도를 하나이상 선택하셔야합니다.');
return false;
}
if($("#exprnClsrnAplct").val() == ''){
alert('신청경로을 선택해주세요.');
$("#exprnClsrnAplct").focus();
return false;
};
if($("#exprnClsrnAplct").val() == '04'){
if($("#exprnClsrnAplctCn").val() == '') {
alert('신청경로 기타 내용을 입력해주세요.');
$("#exprnClsrnAplctCn").focus();
return false;
}
};
if($("#trgtGrade").val() == ''){
alert('대학년수를 입력해주세요.');
$("#trgtGrade").focus();
return false;
};
if($("#trgtClsrm").val() == ''){
alert('대상반을 입력해주세요.');
$("#trgtClsrm").focus();
return false;
};
if($("#trgtPrsnl").val() == ''){
alert('대학생수를 입력해주세요.');
$("#trgtPrsnl").focus();
return false;
};
if($("#rprtSbmt").val() == ''){
alert('보고서제출일을 입력해주세요.');
$("#rprtSbmt").focus();
return false;
}
if($("#oprtnStrtDt").val() == ''){
alert('운영시기 시작일을 입력해주세요.');
$("#oprtnStrtDt").focus();
return false;
}
if($("#oprtnEndDt").val() == ''){c
alert('운영시기 종료일을 입력해주세요.');
$("#oprtnEndDt").focus();
return false;
}
if($(".uploaded_obj").length == 0){
alert("파일을 첨부해 주세요.");
return false;
}
return true;
}
</script>
</head>
<body>
<div class="mask2" onclick="timeLayerUtil()"></div>
<form:form id="listForm" name="listForm" method="post">
<input type="hidden" name="pageIndex" value="<c:out value='${vEPrcsDetailVO.pageIndex}' />"/>
<input type="hidden" name="searchSortCnd" value="<c:out value="${vEPrcsDetailVO.searchSortCnd}" />" />
<input type="hidden" name="searchSortOrd" value="<c:out value="${vEPrcsDetailVO.searchSortOrd}" />" />
</form:form>
<form id="popupForm" name="popupForm" method="post">
<input type="hidden" name="openType" id="openType" value="callBackSchPop" />
<input type="hidden" name="pageIndex" id="pageIndex" value="1" />
<input type="hidden" name="pageUnit" id="pageUnit" value="5" />
<input type="hidden" name="callBackFnc" id="callBackFnc" value="callBackSchPop" />
</form>
<form:form id="listForm" name="listForm" commandName="modelVO" method="post" onsubmit="return false;">
<input type="hidden" name="pageIndex" value="<c:out value='${modelVO.pageIndex}' default='1' />"/>
<input type="hidden" name="searchSortCnd" value="<c:out value="${modelVO.searchSortCnd}" />" />
<input type="hidden" name="searchSortOrd" value="<c:out value="${modelVO.searchSortOrd}" />" />
</form:form>
<form:form id="createForm" name="createForm" commandName="modelVO" onsubmit="return false;">
<input type="hidden" name="userId" id="userId" value="<c:out value='${info.userId}'/>"/> <!-- 사용자 아이디 -->
<!-- validator 체크를 위한 핸드폰, 이메일 input -->
<input type="hidden" name="clphone" id="clphone" value=""/><!-- 연락처(핸드폰) -->
<input type="hidden" name="email" id="email" value=""/><!-- 이메일 -->
<input type="hidden" name="sbmtYn" id="sbmtYn" value=""/><!-- 제출여부 -->
<input type="hidden" name="aprvlCd" id="aprvlCd" value=""/><!-- 승인코드 -->
<input type="hidden" name="dBirth" id="dBirth" value=""/><!-- dBirth -->
<input type="hidden" name="exprnClsrnYear" id="exprnClsrnYear" value=""/><!-- exprnClsrnYear -->
<input type="hidden" name="limitcount" id="limitcount" value="3" /><!-- 최대 업로드 파일갯수 -->
<input type="hidden" name="allrowFileExtsn" id="allrowFileExtsn" value="gif,jpg,jpeg,png" /><!-- 최대 업로드 파일갯수 -->
<input type="hidden" name="mode" id="mode" value="${modelVO.mode}" />
<input type="hidden" name="eduAplctOrd" id="eduAplctOrd" value="${info.eduAplctOrd}" />
<input type="hidden" name="oprtnFileId" id="oprtnFileId" value="${info.oprtnFileId}" />
<!-- cont -->
<div class="cont_wrap">
<form:form id="createForm" name="createForm" commandName="vEPrcsDetailVO" method="post">
<input type="hidden" name="lctrDivCd" value="30"/>
<input type="hidden" name="limitcount" id="limitcount" value="3" /><!-- 최대 업로드 파일갯수 -->
<!-- cont -->
<div class="cont_wrap">
<div class="box">
<!-- cont_tit -->
<div class="cont_tit">
<h2>교육신청 내용 변경</h2>
<h2>운영신청서 등록</h2>
<ul class="cont_nav">
<li class="home"><a href="/"><i></i></a></li>
<li>
<p>교육신청관리</p>
<p>저작권 체험교실</p>
</li>
<li><span class="cur_nav">교육신청 내용 변경</span></li>
<li>
<p>운영신청 관리</p>
</li>
<li><span class="cur_nav">운영신청서 등록</span></li>
</ul>
</div>
<!-- //cont_tit -->
<div class="cont">
<!-- list_상세 -->
<div class="tb_tit01">
<p>교육신청 내용</p>
<p>저작권 체험교실 운영 신청 등록</p>
</div>
<div class="tb_type02">
<!-- list_상세 -->
<div class="tb_type02 wirte">
<table>
<colgroup>
<col style="width: 220px;">
<col style="width: 210px;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th scope="row">
<p class="req_text"><span>필수입력 항목</span>*</p>
<p>학교(기관)명</p>
<p>교사 아이디</p>
</th>
<td colspan="3">
<input type="text" value="${info.scholInsttNm}" size="25" readonly id="scholInsttNm" name="scholInsttNm" title="학교(기관)명">
<button type="button" class="btn_type06" data-tooltip="sub01_pop02" onclick="fncScholList();">학교검색</button>
<input type="hidden" size="25" title="학교명코드" id="stndrdScholCd" name="stndrdScholCd" value="${info.stndrdScholCd}">
<td>
<input type="text" value="${info.userId}" style="min-width:400px;" size="25" readonly id="userId" name="userId" title="교사아이디">
<button type="button" class="btn_type06" onclick="fncUserList();">사용자 검색</button>
</td>
</tr>
<tr>
@ -353,8 +238,10 @@
<p>교사명</p>
</th>
<td>
<input type="text" value="${info.chrgNm}" size="25" id="chrgNm" name="chrgNm" title="담당자명">
<input type="text" value="${info.chrgNm}" style="min-width:400px;" size="25" id="chrgNm" name="chrgNm" title="교사명">
</td>
</tr>
<tr>
<th scope="row">
<p class="req_text"><span>필수입력 항목</span>*</p>
<p>성별</p>
@ -366,17 +253,64 @@
<tr>
<th scope="row">
<p class="req_text"><span>필수입력 항목</span>*</p>
<p>이메일</p>
<p>휴대폰</p>
</th>
<td class="input_mail" colspan="3">
<c:set var="email" value="${fn:split(info.email,'@')}"/>
<input type="text" value="${email[0]}" name="email1" id="email1" size="20" maxlength="30" title="이메일 주소 입력">
@
<input type="text" value="${email[1]}" name="email2" id="email2" size="20" maxlength="30" title="이메일 직접 입력">
<kc:select codeId="ADR030" id="emailType" name="emailType" styleClass="sel_type1" defaultValue="" defaultText="직접입력" onChange="emailSelect(this);"/>
<span class="table_req_text">
※ 교내에서 확인 가능한 메일 계정 입력 (예) 교육청 도메인
</span>
<td class="input_phone">
<c:set var="clphone" value="${fn:split(info.clphone,'-')}"/>
<kc:select codeId="ADR020" id="clphone1" name="clphone1" selectedValue="${clphone[0]}" defaultValue="010" styleClass="sel_type1"/>
-
<input type="text" value="${clphone[1]}" id="clphone2" onkeyup="onlyNumber(this);" name="clphone2" maxlength="4" title="휴대폰 중간자리">
-
<input type="text" value="${clphone[2]}" id="clphone3" onkeyup="onlyNumber(this);" name="clphone3" maxlength="4" title="휴대폰 마지막자리">
</td>
</tr>
<tr>
<th scope="row">
<p class="req_text"><span>필수입력 항목</span>*</p>
<p>전화</p>
</th>
<td class="input_phone">
<c:set var="phone" value="${fn:split(info.phone,'-')}"/>
<input type="text" value="${phone[0]}" name="phone1" id="phone1" onkeyup="onlyNumber(this);" maxlength="3" style="width: 87px;" title="전화번호입력">
-
<input type="text" value="${phone[1]}" name="phone2" id="phone2" onkeyup="onlyNumber(this);" maxlength="4" title="전화번호입력">
-
<input type="text" value="${phone[2]}" name="phone3" id="phone3" onkeyup="onlyNumber(this);" maxlength="4" title="전화번호입력">
</td>
</tr>
<tr>
<th scope="row">
<p class="req_text"><span>필수입력 항목</span>*</p>
<p>학교(기관)명</p>
</th>
<td>
<label for="eduSlctAreaCd" class="label">지역 선택</label>
<kc:select codeId="VE0008" selectedValue="${info.eduSlctAreaCd}" id="eduSlctAreaCd" name="eduSlctAreaCd" styleClass="selType1" css="readonly" defaultText="지역" defaultValue=""
script="onFocus='this.initialSelect = this.selectedIndex;' onChange='this.selectedIndex = this.initialSelect;'"/>
<input type="text" value="${info.scholInsttNm}" style="min-width:400px;" size="25" readonly id="scholInsttNm" name="scholInsttNm" title="학교(기관)명">
<button type="button" class="btn_type06" onclick="fncScholList();">학교검색</button>
<input type="hidden" size="25" title="학교명코드" id="stndrdScholCd" name="stndrdScholCd" value="${info.stndrdScholCd}">
</td>
</tr>
<tr>
<th scope="row">
<p class="req_text"><span>필수입력 항목</span>*</p>
<p>학교구분</p>
</th>
<td>
<kc:radio codeId="VE0009" id="scholDivCd" name="scholDivCd" selectedValue="${empty info.scholDivCd ? '10' : info.scholDivCd}" />
</td>
<!-- </tr> -->
<tr>
<th scope="row">
<p class="req_text"><span>필수입력 항목</span>*</p>
<p>학교지역특성</p>
</th>
<td>
<input type="checkbox" id="islandsYn" name="islandsYn" value="Y"><label for="islandsYn"> 도서지역</label>
<input type="checkbox" id="remoteYn" name="remoteYn" value="Y"><label for="remoteYn"> 벽지지역</label>
<input type="checkbox" id="clsCmbtYn" name="clsCmbtYn" value="Y"><label for="clsCmbtYn"> 접적지역</label>
<input type="checkbox" id="ppulDclnYn" name="ppulDclnYn" value="Y"><label for="ppulDclnYn"> 인구감소지역</label>
</td>
</tr>
<tr class="input_adress">
@ -384,11 +318,23 @@
<p class="req_text"><span>필수입력 항목</span>*</p>
<p>주소</p>
</th>
<td colspan="3">
<input type="text" class="adressFst adr_input" value="${info.post}" id="post" name="post" title="우편번호" readonly />
<%--<button type="button" class="btnType01" onclick="fn_postCode(this);" title="팝업 열림">주소찾기</button>--%><br/>
<input type="text" class="adressMid searchResultAddr" value="${info.addr}" id="addr" name="addr" title="중간주소" readonly /><br/>
<input type="text" class="adressLst usrInsertAddr" value="${info.addrDetail}" id="addrDetail" name="addrDetail" title="상세주소" readonly>
<td>
<input type="text" value="${info.post}" class="adressFst" id="post" name="post" title="우편번호" readonly><br/><%--<button type="button" class="btnType01">주소찾기</button>--%>
<input type="text" value="${info.addr}" class="adressMid" id="addr" name="addr" title="중간주소" readonly><br/>
<input type="text" value="${info.addrDetail}" class="adressLst" id="addrDetail" name="addrDetail" title="상세주소" readonly>
</td>
</tr>
<tr>
<th scope="row">
<p class="req_text"><span>필수입력 항목</span>*</p>
<p>이메일</p>
</th>
<td class="input_mail">
<c:set var="email" value="${fn:split(info.email,'@')}"/>
<input type="text" value="${email[0]}" onkeyup="onlyAlphabetNumber(this);" name="email1" id="email1" size="20" maxlength="30" title="이메일 주소 입력">
@
<input type="text" value="${email[1]}" name="email2" id="email2" size="20" maxlength="30" title="이메일 직접 입력">
<kc:select codeId="ADR030" id="emailType" name="emailType" styleClass="sel_type1" defaultValue="" defaultText="직접입력" onChange="emailSelect(this);"/>
</td>
</tr>
<tr>
@ -397,6 +343,7 @@
<p>담당교과</p>
</th>
<td colspan="3">
<label for="chrgMjr" class="label">담당교과 입력</label>
<input type="text" name="chrgMjr" id="chrgMjr" value="${info.chrgMjr}" size="25">
</td>
</tr>
@ -411,24 +358,12 @@
<c:set var="birthMonth" value="${fn:substring(info.dBirth, 4, 6)}"/>
<c:set var="birthDay" value="${fn:substring(info.dBirth, 6, 8)}"/>
</c:if>
<select name="birthYear" id="birthYear" class="sel_type1 birthYear" selectValue="${birthYear}"></select>
<select name="birthMonth" id="birthMonth" class="sel_type1 birthMonth" selectValue="${birthMonth}"></select>
<select name="birthDay" id="birthDay" class="sel_type1 birthDay" selectValue="${birthDay}"></select>
</td>
</tr>
<tr>
<th scope="row">
<p class="req_text"><span>필수입력 항목</span>*</p>
<p>저작권 오프라인<br/>교원연수</p>
</th>
<td colspan="3">
<span class="t_bold">이수년도</span>
<select id="cmpltYear" name="cmpltYear" class="sel_type1 yearSelect"
selectValue="${info.cmpltYear}" start="${sysYear}" emptyOption="true" selected="" order="asc"></select> &nbsp;&nbsp;&nbsp;
<span class="t_bold">이수번호</span> <input type="text" value="${info.cmpltNum}" size="15" id="cmpltNum" name="cmpltNum" maxlength="12" onkeyup="cmpltNoFormat(this);" title="이수번호">
<span class="table_req_text">
※ 교내에서 확인 가능한 메일 계정 입력 (예) 교육청 도메인
</span>
<label for="birthYear" class="label">년도 선택</label>
<select name="birthYear" id="birthYear" class="selType1 birthYear" selectValue="${birthYear}"></select>
<label for="birthMonth" class="label">월 선택</label>
<select name="birthMonth" id="birthMonth" class="selType1 birthMonth" selectValue="${birthMonth}"></select>
<label for="birthDay" class="label">일 선택</label>
<select name="birthDay" id="birthDay" class="selType1 birthDay" selectValue="${birthDay}"></select>
</td>
</tr>
<tr>
@ -437,14 +372,18 @@
<p>체험교실운영여부</p>
</th>
<td colspan="3">
<kc:radio codeId="VE0031" name="exprnClsrnCd" id="exprnClsrnCd" selectedValue="${empty info.exprnClsrnCd ? '01' : info.exprnClsrnCd}"/><br/>
<c:forEach var="year" begin="2009" end="${sysYear}" varStatus="status">
<kc:radio codeId="VE0031" name="exprnClsrnCd" id="exprnClsrnCd"
selectedValue="${empty info.exprnClsrnCd ? '01' : info.exprnClsrnCd}"
onChange="oprtnYn()"/><br/>
<c:forEach var="year" begin="2009" end="${sysYear-1}" varStatus="status">
<input type="checkbox" id="exprnClsrnYear${status.count}" name="eClsrnYear" title="${year}" value="${year}" ${fn:contains(info.exprnClsrnYear, year) ? 'checked' : ''}>
<label for="exprnClsrnYear${status.count}">${year}</label>
<c:if test="${status.count % 10 eq 0}">
<br/>
</c:if>
</c:forEach>
</br>
<span>※ 소속학교 변동 여부와는 관계없이 기운영 여부를 체크.</span>
</td>
</tr>
<tr>
@ -454,59 +393,52 @@
</th>
<td colspan="3">
<kc:radio codeId="VE0030" name="exprnClsrnAplct" id="exprnClsrnAplct" selectedValue="${empty info.exprnClsrnAplct ? '01' : info.exprnClsrnAplct}" onChange="fncEtcInputEnable(this)"/>
<input type="text" value="${info.exprnClsrnAplctCn}" size="25" id="exprnClsrnAplctCn" name="exprnClsrnAplctCn" title="신청경로기타설명" ${info.exprnClsrnAplct eq '04' ? '' : 'disabled'}>
<label for="exprnClsrnAplctCn" class="label">신청경로 기타설명</label>
<input type="text" value="${info.exprnClsrnAplctCn}" size="25" id="exprnClsrnAplctCn" name="exprnClsrnAplctCn" ${info.exprnClsrnAplct eq '04' ? '' : 'disabled'}>
</td>
</tr>
</tbody>
</table>
</div>
<div class="tb_tit01">
<div class="tb_tit01_left">
<p>운영 계획</p>
<span class="cf_text">* 항목은 필수 입력 사항입니다.</span>
<p>운영계획</p>
</div>
</div>
<div class="tb_type02">
<div class="tb_type02 wirte">
<table>
<colgroup>
<col style="width: 220px;">
<col style="width: 210px;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th scope="row">
<p class="req_text"><span>필수입력 항목</span>*</p>
<p>학년수</p>
<p>학년수 </p>
</th>
<td>
<input type="text" name="trgtGrade" id="trgtGrade" onkeyup="onlyNumber(this);" maxlength="3" value="${info.trgtGrade}" title="교육대상" size="20"> 학년
<td colspan="3">
<label for="trgtGrade" class="label">대상 학년 입력</label>
<input type="text" name="trgtGrade" id="trgtGrade" onkeyup="onlyNumber(this);" maxlength="3" value="${info.trgtGrade}" size="20"> 학년
</td>
</tr>
<tr>
<th scope="row">
<p class="req_text"><span>필수입력 항목</span>*</p>
<p>대상 반</p>
</th>
<td>
<input type="text" name="trgtClsrm" id="trgtClsrm" onkeyup="onlyNumber(this);" maxlength="3" value="${info.trgtClsrm}" title="교육인원" size="20"> 반
<td colspan="3">
<label for="trgtClsrm" class="label">대상 반 입력</label>
<input type="text" name="trgtClsrm" id="trgtClsrm" value="${info.trgtClsrm}" title="교육인원" size="20"> 반
</td>
</tr>
<tr>
<th scope="row">
<p class="req_text"><span>필수입력 항목</span>*</p>
<p>학생수</p>
<p>학생수</p>
</th>
<td>
<input type="text" name="trgtPrsnl" id="trgtPrsnl" onkeyup="onlyNumber(this);" maxlength="4" value="${info.trgtPrsnl}" title="교육대상" size="20"> 명
</td>
<th scope="row">
<p class="req_text"><span>필수입력 항목</span>*</p>
<p>보고서제출일</p>
</th>
<td>
<div class="calendar_wrap">
<fmt:parseDate value="${info.rprtSbmt}" var="rprtSbmt" pattern="yyyyMMdd"/>
<input type="text" value="<fmt:formatDate value="${rprtSbmt}" pattern="yyyy.MM.dd"/>" name="rprtSbmt" id="rprtSbmt" class="calendar" title="시작일 선택">
</div>
<td colspan="3">
<label for="trgtPrsnl" class="label">학생 수 입력</label>
<input type="text" name="trgtPrsnl" id="trgtPrsnl" onkeyup="onlyNumber(this);" maxlength="4" value="${info.trgtPrsnl}" size="20"> 명
</td>
</tr>
<tr>
@ -515,15 +447,9 @@
<p>운영시기</p>
</th>
<td colspan="3">
<div class="calendar_wrap">
<fmt:parseDate value="${info.oprtnStrtDt}" var="oprtnStrtDt" pattern="yyyyMMdd"/>
<input type="text" value="<fmt:formatDate value="${oprtnStrtDt}" pattern="yyyy.MM.dd"/>" name="oprtnStrtDt" id="oprtnStrtDt" class="calendar" title="시작일 선택">
</div>
~
<div class="calendar_wrap">
<fmt:parseDate value="${info.oprtnEndDt}" var="oprtnEndDt" pattern="yyyyMMdd"/>
<input type="text" value="<fmt:formatDate value="${oprtnEndDt}" pattern="yyyy.MM.dd"/>" name="oprtnEndDt" id="oprtnEndDt" class="calendar" title="종료일 선택">
</div>
<kc:radio codeId="VE0030" name="exprnClsrnAplct" id="exprnClsrnAplct" selectedValue="${empty info.exprnClsrnAplct ? '01' : info.exprnClsrnAplct}" onChange="fncEtcInputEnable(this)"/>
<label for="exprnClsrnAplctCn" class="label">신청경로 기타설명</label>
<input type="text" value="${info.exprnClsrnAplctCn}" size="25" id="exprnClsrnAplctCn" name="exprnClsrnAplctCn" ${info.exprnClsrnAplct eq '04' ? '' : 'disabled'}>
</td>
</tr>
<tr>
@ -531,52 +457,63 @@
<p class="req_text"><span>필수입력 항목</span>*</p>
<p>첨부파일</p>
</th>
<td class="upload_area" colspan="3">
<div class="btn_wrap">
<button type="button" class="btnType01 btn_add_file">파일찾기</button>
<td class="upload_area">
<!-- <input type="text" id="fileNm" size="30" class="file_input" readonly> --><!-- <button type="button" class="btnType01 btn_add_file">파일 첨부하기</button> -->
<input type="file" id="file_temp" name="file_temp" class="uploadFile" style="display:none"/>
</div>
<div class="file_wrap">
<table>
<button type="button" id="filebutton" class="btn_type01">파일 첨부하기</button>
<p style="padding-left:30px;">첨부파일 가능 용량은 20MB입니다. </p><p style="color:red;font-weight:500">업로드 순서는 1.신청서 2.안내문 입니다.</p>
<div class="file_wrap file_upload_box no_img_box">
<table class="tbType02">
<caption>첨부파일 리스트 : 파일명, 종류, 크기, 삭제</caption>
<colgroup>
<col style="width: 60%;">
<col style="width: auto;">
<col style="width: 15%;">
<col style="width: 15%;">
<col style="width: 20%;">
<col style="width: 10%;">
</colgroup>
<thead>
<th>파일 명</th>
<th>종류</th>
<th>크기</th>
<!-- <th>
<input type="checkbox" id="all_check"><label for="all_check"></label>
</th> -->
<th scope="col">파일 명</th>
<th scope="col">종류</th>
<th scope="col">크기</th>
<th scope="col">삭제</th>
</thead>
<tbody class="tb_file_before">
<tr>
<td colspan="3">
<p>첨부하실 파일을 <span>마우스끌어서</span> 넣어주세요.</p>
<td colspan="4">
<p>첨부하실 파일을 <span>마우스끌어서</span> 넣어주세요.</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="file_wrap">
<table>
<div class="file_wrap fileAfter file_list_div">
<table class="tbType02">
<caption>첨부파일 리스트 : 파일명, 종류, 크기, 삭제</caption>
<colgroup>
<col style="width: auto;">
<col style="width: 15%;">
<col style="width: 15%;">
<col style="width: 100px;">
<col style="width: 60%">
<col style="width: 10%">
<col style="width: 20%">
<col style="width: 10%">
</colgroup>
<thead>
<th>파일 명</th>
<th>종류</th>
<th>크기</th>
<th>삭제</th>
<!-- <th>
<input type="checkbox" id="all_check"><label for="all_check"></label>
</th> -->
<th scope="col">파일 명</th>
<th scope="col">종류</th>
<th scope="col">크기</th>
<th scope="col">삭제</th>
</thead>
<tbody id="tbody_fiielist" class="tb_file_after">
<c:forEach var="fileList" items="${fileList}" varStatus="status">
<tr class="item_${fileList.atchFileId}_${fileList.fileSn} uploaded_obj">
<tr class="item_<c:out value='${fileList.atchFileId}' />_<c:out value='${fileList.fileSn}' /> uploaded_obj">
<input type="hidden" name="fileSize" class="item_file_size" value="${fileList.fileSize}">
<td class="td_filename">
<span class="file_name_text">${fileList.orignlFileNm}</span>
<!-- <img src="/direct/img/upload_hwp_img.png" alt="" /> -->
<span class="file_name_text"><c:out value='${fileList.orignlFileNm}' /></span>
</td>
<td class="td_filesort">
<span class="file_filesort_text" value="<c:out value="${fileList.fileExtsn}"/>"><c:out value="${fileList.fileExtsn}"/></span>
@ -585,39 +522,32 @@
<span class="file_size_text" value="<c:out value="${fileList.fileMg}"/>"><c:out value="${fileList.fileMg}"/></span>
</td>
<td>
<button type="button" class="btn_del" onclick="delAtchFile('${fileList.atchFileId}', '${fileList.fileSn}'); return false;"><i></i></button>
<button type="button" class="btn_del" onclick="delAtchFile('<c:out value='${fileList.atchFileId}' />', '<c:out value='${fileList.fileSn}' />'); return false;" title="파일삭제"><i></i></button>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
<div class="file_cf">
<div class="cf_left">
<p>최대 <span>3</span>개</p>
<p><span>50MB</span>제한</p>
</div>
</div>
<span class="table_req_text">
※ 신청서(공문)양식 다운로드 후, 직인을 포함하여 업로드 해주세요.
</span>
</td>
</tr>
</tbody>
</tbody>
</table>
</div>
<!-- //list_상세 -->
<!-- btn_wrap -->
<div class="btn_wrap btn_layout01">
<div class="btn_left">
</div>
<div class="btn_center">
</div>
<div class="btn_right">
<button type="button" class="btn_type01" onclick="fncSave('S');">저장</button>
<button type="button" class="btn_type03" onclick="fncGoList();">취소</button>
<button type="button" class="btn_type05" onclick="fncSave(); return false;">등록</button>
<button type="button" class="btn_type03" onclick="fncGoList(); return false;">취소</button>
</div>
</div>
</div>
</div>
</div>