Merge branch 'master' into advc

This commit is contained in:
wyh 2025-03-12 11:59:48 +09:00
commit 6da0adae9d
48 changed files with 12240 additions and 1558 deletions

View File

@ -0,0 +1,40 @@
package itn.com.uss.ion.bnr.pop.service;
import java.io.Serializable;
import itn.com.cmm.ComDefaultVO;
import lombok.Getter;
import lombok.Setter;
/**
*
* @author : 이호영
* @fileName : MainPopupLinkVO.java
* @date : 2025.02.26
* @description :
* ===========================================================
* DATE AUTHOR NOTE
* ----------------------------------------------------------- *
* 2025.02.26 이호영 최초 생성
*
*
*
*/
@Getter
@Setter
public class MainPopupLinkVO extends ComDefaultVO implements Serializable {
/**
* @description :
*/
private static final long serialVersionUID = 1998370534684278351L;
private String popId; // 메인존ID
private String mlink; // 링크
private String coords; // 링크좌표
private String popLinkId; // 링크좌표
}

View File

@ -0,0 +1,34 @@
package itn.com.uss.ion.bnr.pop.service;
import java.util.List;
import itn.com.cmm.RestResponse;
/**
* 개요
* - 팝업창에 대한 Service Interface를 정의한다.
*
* 상세내용
* - 팝업창에 대한 등록, 수정, 삭제, 조회, 반영확인 기능을 제공한다.
* - 팝업창의 조회기능은 목록조회, 상세조회, 팝업사용자 보기로 구분된다.
* @author 이창원
* @version 1.0
* @created 05-8-2009 오후 2:19:58
*/
public interface MainPopupManageService {
public List<?> selectMainPopupList(MainPopupVO mainPopupVO) throws Exception;
public int selectMainPopupCount(MainPopupVO mainPopupVO) throws Exception;
public MainPopupVO selectMainPopupVO(String mazId) throws Exception;
public List<MainPopupVO> selectMainPopupListRolling();
public void deleteMainPopup(String id);
public void resetMainPopupSort(MainPopupVO mainPopupVO);
public RestResponse deleteMainPopupLink(MainPopupLinkVO mainPopupLinkVO);
}

View File

@ -0,0 +1,59 @@
package itn.com.uss.ion.bnr.pop.service;
import java.io.Serializable;
import java.util.List;
import itn.com.cmm.ComDefaultVO;
import lombok.Getter;
import lombok.Setter;
/**
*
* @author : 이호영
* @fileName : MainPopupVO.java
* @date : 2025.02.26
* @description :
* ===========================================================
* DATE AUTHOR NOTE
* ----------------------------------------------------------- *
* 2025.02.26 이호영 최초 생성
*
*
*
*/
@Getter
@Setter
public class MainPopupVO extends ComDefaultVO implements Serializable {
/**
* @description :
*/
private static final long serialVersionUID = 1998370534684278351L;
private String popId; // 메인존ID
private String content; // 대체택스트
private String del; // 삭제여부
private String mainzoneImageFile; // 이미지파일ID
private String mainzoneImage; // 이미지파일명
private String regdt; // 등록일
private String moddt; // 수정일
private String popNm; // 메인팝업존키
private String useYn; // 사용여부
private String registerId; // 등록자 아이디
private String deviceType; // 접근타입
private String ntceBgnde; // 게시 시작일자
private String ntceEndde; // 게시 종료일자
private String ntceBgndeHH;
private String ntceBgndeMM;
private String ntceEnddeHH;
private String ntceEnddeMM;
private String devicetype;
private List<MainPopupLinkVO> mainPopupLinkList; // 게시 종료일자
}

View File

@ -0,0 +1,62 @@
package itn.com.uss.ion.bnr.pop.service.impl;
import java.util.List;
import org.springframework.stereotype.Repository;
import itn.com.cmm.service.impl.EgovComAbstractDAO;
import itn.com.uss.ion.bnr.pop.service.MainPopupLinkVO;
import itn.com.uss.ion.bnr.pop.service.MainPopupVO;
/**
* 개요
* - 팝업창에 대한 DAO를 정의한다.
*
* 상세내용
* - 팝업창에 대한 등록, 수정, 삭제, 조회, 반영확인 기능을 제공한다.
* - 팝업창의 조회기능은 목록조회, 상세조회로, 사용자화면 보기로 구분된다.
* @author 이창원
* @version 1.0
* @created 05-8-2009 오후 2:21:04
*/
@Repository("mainPopupManageDAO")
public class MainPopupManageDAO extends EgovComAbstractDAO {
/**
* 메인이미지 목록을 조회한다.
* @return 목록
* @exception Exception
*/
public List<?> selectMainPopupList(MainPopupVO mainPopupVO ) throws Exception{
return list("mainPopup.selectMainPopupList", mainPopupVO);
}
public int selectMainPopupCount(MainPopupVO mainPopupVO) throws Exception{
return (int)select("mainPopup.selectMainPopupCount", mainPopupVO);
}
public MainPopupVO selectMainPopupVO(String mazId) throws Exception{
return (MainPopupVO)select("mainPopup.selectMainPopupVO", mazId);
}
public List<MainPopupVO> selectMainPopupListRolling() {
return (List<MainPopupVO>) list("mainPopup.selectMainPopupListRolling");
}
public void deleteMainPopup(String popId) {
delete("mainPopup.deleteMainPopup", popId);
}
public void resetMainPopupSort(MainPopupVO mainPopupVO) {
update("mainPopup.resetMainPopupSort", mainPopupVO);
}
public void deleteMainPopupLinkInfo(MainPopupLinkVO mainPopupLinkVO) {
delete("mainPopup.deleteMainPopupLinkInfo", mainPopupLinkVO);
}
}

View File

@ -0,0 +1,89 @@
package itn.com.uss.ion.bnr.pop.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import itn.com.cmm.RestResponse;
import itn.com.uss.ion.bnr.pop.service.MainPopupLinkVO;
import itn.com.uss.ion.bnr.pop.service.MainPopupManageService;
import itn.com.uss.ion.bnr.pop.service.MainPopupVO;
import itn.com.uss.ion.pwm.service.impl.PopupManageDAO;
/**
* 개요
* - 팝업창에 대한 ServiceImpl을 정의한다.
*
* 상세내용
* - 팝업창에 대한 등록, 수정, 삭제, 조회, 반영확인 기능을 제공한다.
* - 팝업창의 조회기능은 목록조회, 상세조회로, 사용자화면 보기로 구분된다.
* @author 이창원
* @version 1.0
* @created 05-8-2009 오후 2:19:58
*/
@Service("mainPopupManageService")
public class MainPopupManageServiceImpl extends EgovAbstractServiceImpl implements MainPopupManageService {
@Resource(name = "mainPopupManageDAO")
public MainPopupManageDAO dao;
@Resource(name = "popupManageDAO")
public PopupManageDAO popupDao;
@Resource(name = "egovPopupManageIdGnrService")
private EgovIdGnrService idgenService;
@Override
public List<?> selectMainPopupList(MainPopupVO mainPopupVO) throws Exception {
return dao.selectMainPopupList(mainPopupVO);
}
@Override
public int selectMainPopupCount(MainPopupVO mainPopupVO) throws Exception {
return dao.selectMainPopupCount(mainPopupVO);
}
@Override
public MainPopupVO selectMainPopupVO(String mazId) throws Exception {
MainPopupVO resultVO = dao.selectMainPopupVO(mazId);
if (resultVO == null)
throw processException("info.nodata.msg");
return resultVO;
}
@Override
public List<MainPopupVO> selectMainPopupListRolling() {
return dao.selectMainPopupListRolling();
}
@Override
public void deleteMainPopup(String id) {
popupDao.deleteMainPopupLinkInfo(id);
dao.deleteMainPopup(id);
}
@Override
public void resetMainPopupSort(MainPopupVO mainPopupVO) {
dao.resetMainPopupSort(mainPopupVO);
}
@Override
public RestResponse deleteMainPopupLink(MainPopupLinkVO mainPopupLinkVO) {
dao.deleteMainPopupLinkInfo(mainPopupLinkVO);
return RestResponse.builder()
.status(HttpStatus.OK) // 200, Series.SUCCESSFUL, "OK"
.msg("삭제 되었습니다.")
.build();
}
}

View File

@ -0,0 +1,343 @@
package itn.com.uss.ion.bnr.pop.web;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springmodules.validation.commons.DefaultBeanValidator;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.fdl.property.EgovPropertyService;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import itn.com.cmm.ComDefaultCodeVO;
import itn.com.cmm.EgovMessageSource;
import itn.com.cmm.LoginVO;
import itn.com.cmm.RestResponse;
import itn.com.cmm.service.EgovCmmUseService;
import itn.com.cmm.service.EgovFileMngService;
import itn.com.cmm.service.EgovFileMngUtil;
import itn.com.cmm.service.FileVO;
import itn.com.cmm.util.RedirectUrlMaker;
import itn.com.uss.ion.bnr.pop.service.MainPopupLinkVO;
import itn.com.uss.ion.bnr.pop.service.MainPopupManageService;
import itn.com.uss.ion.bnr.pop.service.MainPopupVO;
import itn.com.uss.ion.bnr.sub.service.SubMainZoneManageService;
import itn.let.sym.site.service.EgovSiteManagerService;
/**
* 개요
* - 팝업창에 대한 Controller를 정의한다.
*
* 상세내용
* - 팝업창에 대한 등록, 수정, 삭제, 조회, 반영확인 기능을 제공한다.
* - 팝업창의 조회기능은 목록조회, 상세조회로, 사용자 화면 보기로 구분된다.
* @author 이창원
* @version 1.0
* @created 05-8-2009 오후 2:19:57
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2025.02.24 이호영 최초 생성
*
* </pre>
*/
@Controller
public class MainPopupController {
private static final Logger LOGGER = LoggerFactory.getLogger(MainPopupController.class);
@Autowired
private DefaultBeanValidator beanValidator;
/** EgovMessageSource */
@Resource(name = "egovMessageSource")
EgovMessageSource egovMessageSource;
/** EgovPropertyService */
@Resource(name = "propertiesService")
protected EgovPropertyService propertiesService;
/** EgovPopupManageService */
@Resource(name = "subMainZoneManageService")
private SubMainZoneManageService subMainZoneManageService;
@Resource(name = "mainPopupManageService")
private MainPopupManageService mainPopupManageService;
/** cmmUseService */
@Resource(name = "EgovCmmUseService")
private EgovCmmUseService cmmUseService;
@Resource(name="EgovFileMngUtil")
private EgovFileMngUtil fileUtil;
@Resource(name="EgovFileMngService")
private EgovFileMngService fileMngService;
@Resource(name = "egovPopupZoneIdGnrService")
private EgovIdGnrService idgenService;
// @Resource(name = "egovMainZoneIdGnrService")
// private EgovIdGnrService idgenServiceMain;
@Resource(name = "egovSubMainZoneIdGnrService")
private EgovIdGnrService idgenServiceSubMain;
@Resource(name = "egovSiteManagerService")
EgovSiteManagerService egovSiteManagerService;
@Resource(name = "EgovFileMngService")
private EgovFileMngService fileService;
/*메인이미지 관리*/
// @RequestMapping(value="/uss/ion/bnr/subMainZoneList.do")
@RequestMapping(value="/uss/ion/bnr/pop/mainPopupList.do")
public String selectMainzoneList(ModelMap model , MainPopupVO mainPopupVO , HttpSession session ) throws Exception {
LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
if(mainPopupVO.getPageUnit()% 8 != 0) {//9 배수로 넘어오지 않으면 초기세팅
mainPopupVO.setPageUnit(8);
}else {
mainPopupVO.setPageUnit(mainPopupVO.getPageUnit());
}
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(mainPopupVO.getPageIndex());
paginationInfo.setRecordCountPerPage(mainPopupVO.getPageUnit());
paginationInfo.setPageSize(mainPopupVO.getPageSize());
mainPopupVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
mainPopupVO.setLastIndex(paginationInfo.getLastRecordIndex());
mainPopupVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
if(null != loginVO && !"super".equals(loginVO.getSiteId())){ //각각의 사이트
mainPopupVO.setSiteId(loginVO.getSiteId());
}
List<?> mainPopupList = mainPopupManageService.selectMainPopupList(mainPopupVO);
model.addAttribute("mainPopupList", mainPopupList);
int totCnt = mainPopupManageService.selectMainPopupCount(mainPopupVO);
paginationInfo.setTotalRecordCount(totCnt);
model.addAttribute("paginationInfo", paginationInfo);
return "uss/ion/bnr/pop/mainPopupList";
}
/*알림창등록/수정 view*/
@RequestMapping(value="/uss/ion/bnr/pop/mainPopupModify.do")
public String updateMainZoneView(@RequestParam Map<?, ?> commandMap,
HttpServletRequest request, Model model, HttpSession session)
throws Exception {
MainPopupVO mainPopupVO = new MainPopupVO();
if("Modify".equals((String)commandMap.get("pageType"))){ //수정
String mazId = (String)commandMap.get("selectedId");
mainPopupVO = mainPopupManageService.selectMainPopupVO(mazId);
String sNtceBgnde = mainPopupVO.getNtceBgnde();
String sNtceEndde = mainPopupVO.getNtceEndde();
if(sNtceBgnde != null && sNtceEndde != null ) {
mainPopupVO.setNtceBgndeHH(sNtceBgnde.substring(8, 10));
mainPopupVO.setNtceBgndeMM(sNtceBgnde.substring(10, 12));
mainPopupVO.setNtceEnddeHH(sNtceEndde.substring(8, 10));
mainPopupVO.setNtceEnddeMM(sNtceEndde.substring(10, 12));
//게시기간 시작일자()
model.addAttribute("ntceBgndeHH", getTimeHH());
//게시기간 시작일자()
model.addAttribute("ntceBgndeMM", getTimeMM());
//게시기간 종료일자()
model.addAttribute("ntceEnddeHH", getTimeHH());
//게시기간 종료일자()
model.addAttribute("ntceEnddeMM", getTimeMM());
}
if(mainPopupVO != null){
mainPopupVO.setBeSort(mainPopupVO.getSort());
FileVO fileVO = new FileVO();
String atchFileId = mainPopupVO.getMainzoneImageFile();
fileVO.setAtchFileId(atchFileId);
List<FileVO> fileList = fileService.selectFileInfs(fileVO);
model.addAttribute("fileList", fileList);
}
}else{ //등록
//게시기간 시작일자()
model.addAttribute("ntceBgndeHH", getTimeHH());
//게시기간 시작일자()
model.addAttribute("ntceBgndeMM", getTimeMM());
//게시기간 종료일자()
model.addAttribute("ntceEnddeHH", getTimeHH());
//게시기간 종료일자()
model.addAttribute("ntceEnddeMM", getTimeMM());
}
//model.addAttribute("sortList", sortList);
model.addAttribute("mainPopupVO", mainPopupVO);
System.out.println("mainPopupVO :: "+ mainPopupVO.toString());
/* 타겟 코드 */
ComDefaultCodeVO vo = new ComDefaultCodeVO();
vo.setCodeId("COM037");
//List<?> targetList = cmmUseService.selectCmmCodeDetail(vo);
//model.addAttribute("targetList", targetList);
return "uss/ion/bnr/pop/mainPopupModify";
}
/*메인 이미지삭제 */
@RequestMapping("/uss/ion/bnr/pop/mainPopupListDelete.do")
public String deleteMainzoneDelete(@RequestParam("del") String[] del, RedirectAttributes redirectAttributes , Model model) throws Exception {
LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
MainPopupVO mainPopupVO = new MainPopupVO();
for(String id:del) {
try{
mainPopupVO = mainPopupManageService.selectMainPopupVO(id);
}catch(Exception e){
redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("info.nodata.msg"));
RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/bnr/pop/mainPopupList.do");
return redirectUrlMaker.getRedirectUrl();
}
mainPopupManageService.deleteMainPopup(id);
if(null != loginVO && !"super".equals(loginVO.getSiteId())){
mainPopupVO.setSiteId(loginVO.getSiteId());
}
mainPopupManageService.resetMainPopupSort(mainPopupVO);
}
redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete"));
RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/bnr/pop/mainPopupList.do");
return redirectUrlMaker.getRedirectUrl();
}
/**
* @methodName : mainPopupLinkDeleteAjax
* @author : 이호영
* @date : 2025.03.04
* @description : 메인팝업링크 데이터 삭제
* @param request
* @param mainPopupLinkVO
* @return
* @throws Exception
*/
@ResponseBody
@RequestMapping(value="/uss/ion/bnr/pop/mainPopupLinkDeleteAjax.do")
public ResponseEntity<?> mainPopupLinkDeleteAjax(
HttpServletRequest request
,@RequestBody MainPopupLinkVO mainPopupLinkVO) throws Exception {
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if(!isAuthenticated) {
return ResponseEntity.ok(
RestResponse.builder()
.status(HttpStatus.UNAUTHORIZED) // 401 권한 인증 에러
.msg("로그인을 하셔야 이용 가능합니다.")
.build()
);
}
return ResponseEntity.ok(mainPopupManageService.deleteMainPopupLink(mainPopupLinkVO));
}
/**
* 시간을 LIST를 반환한다.
* @return List
* @throws
*/
@SuppressWarnings("unused")
private List<ComDefaultCodeVO> getTimeHH() {
ArrayList<ComDefaultCodeVO> listHH = new ArrayList<ComDefaultCodeVO>();
HashMap<?, ?> hmHHMM;
for (int i = 0; i <= 24; i++) {
String sHH = "";
String strI = String.valueOf(i);
if (i < 10) {
sHH = "0" + strI;
} else {
sHH = strI;
}
ComDefaultCodeVO codeVO = new ComDefaultCodeVO();
codeVO.setCode(sHH);
codeVO.setCodeNm(sHH);
listHH.add(codeVO);
}
return listHH;
}
/**
* 분을 LIST를 반환한다.
* @return List
* @throws
*/
@SuppressWarnings("unused")
private List<ComDefaultCodeVO> getTimeMM() {
ArrayList<ComDefaultCodeVO> listMM = new ArrayList<ComDefaultCodeVO>();
HashMap<?, ?> hmHHMM;
for (int i = 0; i <= 60; i++) {
String sMM = "";
String strI = String.valueOf(i);
if (i < 10) {
sMM = "0" + strI;
} else {
sMM = strI;
}
ComDefaultCodeVO codeVO = new ComDefaultCodeVO();
codeVO.setCode(sMM);
codeVO.setCodeNm(sMM);
listMM.add(codeVO);
}
return listMM;
}
}

View File

@ -0,0 +1,37 @@
package itn.com.uss.ion.bnr.sub.service;
import java.util.List;
import java.util.Map;
import itn.com.uss.ion.pwm.service.MainzoneVO;
import itn.com.uss.ion.pwm.service.PopupManageVO;
import itn.com.uss.ion.pwm.service.PopupzoneVO;
import itn.com.uss.ion.pwm.service.SocialVO;
import itn.com.uss.ion.pwm.service.SortVO;
/**
* 개요
* - 팝업창에 대한 Service Interface를 정의한다.
*
* 상세내용
* - 팝업창에 대한 등록, 수정, 삭제, 조회, 반영확인 기능을 제공한다.
* - 팝업창의 조회기능은 목록조회, 상세조회, 팝업사용자 보기로 구분된다.
* @author 이창원
* @version 1.0
* @created 05-8-2009 오후 2:19:58
*/
public interface SubMainZoneManageService {
public List<?> selectSubMainzoneList(MainzoneVO mainzoneVO) throws Exception;
public int selectSubMainzoneCount(MainzoneVO mainzoneVO) throws Exception;
public MainzoneVO selectSubMainzoneVO(String mazId) throws Exception;
public List<MainzoneVO> selectSubMainzoneListRolling();
public void deleteSubMainzone(String id);
public void resetSubMainVOSort(MainzoneVO mainzoneVO);
}

View File

@ -0,0 +1,309 @@
package itn.com.uss.ion.bnr.sub.service.impl;
import java.util.List;
import org.springframework.stereotype.Repository;
import egovframework.rte.psl.dataaccess.util.EgovMap;
import itn.com.cmm.service.impl.EgovComAbstractDAO;
import itn.com.uss.ion.pwm.service.MainzoneVO;
import itn.com.uss.ion.pwm.service.PopupManageVO;
import itn.com.uss.ion.pwm.service.PopupzoneVO;
import itn.com.uss.ion.pwm.service.SocialVO;
import itn.com.uss.ion.pwm.service.SortVO;
/**
* 개요
* - 팝업창에 대한 DAO를 정의한다.
*
* 상세내용
* - 팝업창에 대한 등록, 수정, 삭제, 조회, 반영확인 기능을 제공한다.
* - 팝업창의 조회기능은 목록조회, 상세조회로, 사용자화면 보기로 구분된다.
* @author 이창원
* @version 1.0
* @created 05-8-2009 오후 2:21:04
*/
@Repository("subMainZoneManageDAO")
public class SubMainZoneManageDAO extends EgovComAbstractDAO {
/**
* 메인이미지 목록을 조회한다.
* @return 목록
* @exception Exception
*/
public List<?> selectSubMainzoneList(MainzoneVO mainzoneVO ) throws Exception{
return list("subMainzoneManage.selectSubMainzoneList", mainzoneVO);
}
public int selectSubMainzoneCount(MainzoneVO mainzoneVO) throws Exception{
return (int)select("subMainzoneManage.selectSubMainzoneCount", mainzoneVO);
}
public MainzoneVO selectSubMainzoneVO(String mazId) throws Exception{
return (MainzoneVO)select("subMainzoneManage.selectSubMainzoneVO", mazId);
}
public List<MainzoneVO> selectSubMainzoneListRolling() {
return (List<MainzoneVO>) list("subMainzoneManage.selectSubMainzoneListRolling");
}
public void deleteSubMainzone(String mazId) {
delete("subMainzoneManage.deleteSubMainzone", mazId);
}
public void resetSubMainVOSort(MainzoneVO mainzoneVO) {
update("subMainzoneManage.resetSubMainVOSort", mainzoneVO);
}
//
// public SubMainZoneManageDAO(){}
//
// /**
// * 등록된 팝업창정보를 삭제한다.
// * @param popupManage - 팝업창 model
// * @return boolean - 반영성공 여부
// *
// * @param popupManage
// */
// public void deletePopup(PopupManageVO popupManageVO) throws Exception {
// delete("PopupManage.deletePopupManage", popupManageVO);
// }
//
// /**
// * 팝업창정보를 신규로 등록한다.
// * @param popupManage - 팝업창 model
// * @return boolean - 반영성공 여부
// *
// * @param popupManage
// */
// public void insertPopup(PopupManageVO popupManageVO) throws Exception {
// insert("PopupManage.insertPopupManage", popupManageVO);
// }
//
// /**
// * 등록된 팝업창정보를 수정한다.
// * @param popupManage - 팝업창 model
// * @return boolean - 반영성공 여부
// *
// * @param popupManage
// */
// public void updatePopup(PopupManageVO popupManageVO) throws Exception {
// update("PopupManage.updatePopupManage", popupManageVO);
// }
//
// /**
// * 팝업창을 사용자 화면에서 볼수 있는 정보들을 조회한다.
// * @param popupManageVO - 팝업창 Vo
// * @return popupManageVO - 팝업창 Vo
// *
// * @param popupManageVO
// */
// public PopupManageVO selectPopup(PopupManageVO popupManageVO) throws Exception {
// return (PopupManageVO)select("PopupManage.selectPopupManageDetail", popupManageVO);
// }
//
// /**
// * 팝업창를 관리하기 위해 등록된 팝업창목록을 조회한다.
// * @param popupManageVO - 팝업창 Vo
// * @return List - 팝업창 목록
// *
// * @param popupManageVO
// */
// public List<?> selectPopupList(PopupManageVO popupManageVO) throws Exception {
// return list("PopupManage.selectPopupManage", popupManageVO);
// }
//
// /**
// * 팝업창를 관리하기 위해 등록된 팝업창목록 총갯수를 조회한다.
// * @param popupManageVO - 팝업창 Vo
// * @return List - 팝업창 목록
// *
// * @param popupManageVO
// */
// public int selectPopupListCount(PopupManageVO popupManageVO) throws Exception {
// return (Integer)select("PopupManage.selectPopupManageCnt", popupManageVO);
// }
//
// /**
// * 팝업창를 사용하기 위해 등록된 팝업창목록을 조회한다.
// * @param popupManageVO - 팝업창 Vo
// * @return List - 팝업창 목록
// *
// * @param popupManageVO
// */
// public List<?> selectPopupMainList(PopupManageVO popupManageVO) throws Exception {
// return list("PopupManage.selectPopupManageMain", popupManageVO);
// }
//
// /**
// * 메인알림창 목록을 조회한다.
// * @return 목록
// * @exception Exception
// */
// public List<?> selectPopupzoneList(PopupzoneVO popupzoneVo) throws Exception{
// return list("PopupzoneManage.selectPopupzoneList", popupzoneVo);
// }
//
// /**
// * 메인배너 순번정보를 가져온다.
// * @param mode - 0:등록 1:수정
// * @return 순번정보
// * @exception Exception
// */
// @SuppressWarnings("unchecked")
// public List<EgovMap> getSortList() throws Exception{
// return (List<EgovMap>) list("PopupzoneManage.getSortList",null);
// }
//
// public PopupzoneVO selectPopupzoneVO(String pozId) throws Exception {
// return (PopupzoneVO)select("PopupzoneManage.selectPopupzoneVO", pozId);
// }
//
// /**
// * 메인배너 변경할때 나머지 배너들 순서 변경
// * @param 입력된 sort번호
// * @return 등록 결과
// * @exception Exception
// */
// public void updateSortUp(SortVO sortVO) throws Exception{
// update("PopupzoneManage.updateSortUp", sortVO);
// }
//
// public void updateSortDown(SortVO sortVO) throws Exception {
// update("PopupzoneManage.updateSortDown", sortVO);
// }
//
// public void updatePopupzone(PopupzoneVO popupzoneVO) throws Exception {
// update("PopupzoneManage.updatePopupzone", popupzoneVO);
// }
//
// /**
// * 메인알림창을 삭제한다.
// * @param pozId - 삭제할 메인알림창 번호
// * @return void형
// * @exception Exception
// */
// public void deletePopupzone(String pozId) throws Exception {
// delete("PopupzoneManage.deletePopupzone", pozId);
// }
//
// public int getMaxSort() throws Exception{
// return (Integer)select("PopupzoneManage.getMaxSort") ;
// }
//
// /**
// * 메인배너의 새로운seq를 가지고온다.
// * @return seq
// * @exception Exception
// */
// public int selectNextSeq() throws Exception{
// return (Integer)select("PopupzoneManage.selectNextSeq");
// }
//
// public void insertPopupzone(PopupzoneVO popupzoneVO) throws Exception{
// insert("PopupzoneManage.insertPopupzone", popupzoneVO);
// }
//
// public void resetSort(PopupzoneVO popupzoneVO) throws Exception{
// update("PopupzoneManage.resetSort", popupzoneVO);
// }
//
// /**
// * 메인이미지 목록을 조회한다.
// * @return 목록
// * @exception Exception
// */
// public List<?> selectMainzoneList(MainzoneVO mainzoneVO ) throws Exception{
// return list("MainzoneManage.selectMainzoneList", mainzoneVO);
// }
//
// public int getMainMaxSort() throws Exception{
// return (Integer)select("MainzoneManage.getMainMaxSort");
// }
//
// public void insertMainzone(MainzoneVO mainzoneVO) throws Exception{
// insert("MainzoneManage.insertMainzone", mainzoneVO);
// }
//
// public void resetMainSort(MainzoneVO mainzoneVO) throws Exception{
// insert("MainzoneManage.resetMainSort", mainzoneVO);
// }
//
// public void updateMainSortUp(SortVO sortVO) throws Exception{
// update("MainzoneManage.updateMainSortUp", sortVO);
// }
//
// public MainzoneVO selectMainzoneVO(String mazId) throws Exception{
// return (MainzoneVO)select("MainzoneManage.selectMainzoneVO", mazId);
// }
//
// @SuppressWarnings("unchecked")
// public List<EgovMap> getMainSortList() throws Exception{
// return (List<EgovMap>) list("MainzoneManage.getMainSortList",null);
// }
//
// public void deleteMainzone(String mazId) throws Exception{
// delete("MainzoneManage.deleteMainzone", mazId);
// }
//
// public void updateMainSortDown(SortVO sortVO) throws Exception{
// update("MainzoneManage.updateMainSortDown", sortVO);
// }
//
// public void updateMainzone(MainzoneVO mainzoneVO) throws Exception{
// update("MainzoneManage.updateMainzone", mainzoneVO);
// }
//
// @SuppressWarnings("unchecked")
// public List<MainzoneVO> selectMainzoneListRolling() throws Exception{
// return (List<MainzoneVO>) list("MainzoneManage.selectMainzoneListRolling");
// }
//
// public int selectPopupzoneListTotCnt(PopupzoneVO popupzoneVo) throws Exception {
// return (int)select("PopupzoneManage.selectPopupzoneListTotCnt", popupzoneVo);
// }
//
// public int selectMainzoneCount(MainzoneVO mainzoneVO) throws Exception{
// return (int)select("MainzoneManage.selectMainzoneCount", mainzoneVO);
// }
//
// public void resetVOSort(PopupzoneVO popupzoneVO) throws Exception{
// update("PopupzoneManage.resetVOSort", popupzoneVO);
// }
//
// public void resetMainVOSort(MainzoneVO mainzoneVO) throws Exception{
// update("MainzoneManage.resetMainVOSort", mainzoneVO);
// }
//
// @SuppressWarnings("unchecked")
// public List<SocialVO> selectSocialList(SocialVO socialVO) throws Exception{
// return (List<SocialVO>) list("SocialManage.selectSocialList",socialVO);
// }
//
// public SocialVO selectSocialVO(String socialId) throws Exception{
// return (SocialVO)select("SocialManage.selectSocialVO", socialId);
// }
//
// public void updateSocial(SocialVO socialVO) throws Exception{
// update("SocialManage.updateSocial", socialVO);
// }
//
// public void resetSocialSort(SocialVO socialVO) throws Exception{
// update("SocialManage.resetSocialSort", socialVO);
// }
//
// public void insertSocial(SocialVO socialVO) throws Exception{
// insert("SocialManage.insertSocial", socialVO);
// }
//
// public void deleteSocial(String id) throws Exception{
// delete("SocialManage.deleteSocial", id);
// }
}

View File

@ -0,0 +1,85 @@
package itn.com.uss.ion.bnr.sub.service.impl;
import java.math.BigDecimal;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.psl.dataaccess.util.EgovMap;
import itn.com.uss.ion.bnr.sub.service.SubMainZoneManageService;
import itn.com.uss.ion.pwm.service.MainzoneVO;
import itn.com.uss.ion.pwm.service.PopupManageVO;
import itn.com.uss.ion.pwm.service.PopupzoneVO;
import itn.com.uss.ion.pwm.service.SocialVO;
import itn.com.uss.ion.pwm.service.SortVO;
import itn.com.uss.ion.pwm.service.impl.PopupManageDAO;
import itn.com.uss.ion.pwm.service.impl.PopupzoneManageDAO;
/**
* 개요
* - 팝업창에 대한 ServiceImpl을 정의한다.
*
* 상세내용
* - 팝업창에 대한 등록, 수정, 삭제, 조회, 반영확인 기능을 제공한다.
* - 팝업창의 조회기능은 목록조회, 상세조회로, 사용자화면 보기로 구분된다.
* @author 이창원
* @version 1.0
* @created 05-8-2009 오후 2:19:58
*/
@Service("subMainZoneManageService")
public class SubMainZoneManageServiceImpl extends EgovAbstractServiceImpl implements SubMainZoneManageService {
@Resource(name = "subMainZoneManageDAO")
public SubMainZoneManageDAO dao;
/** PopupzoneManageDAO */
@Resource(name="popupzoneManageDAO")
private PopupzoneManageDAO popupzoneManageDAO;
@Resource(name = "egovPopupManageIdGnrService")
private EgovIdGnrService idgenService;
@Override
public List<?> selectSubMainzoneList(MainzoneVO mainzoneVO) throws Exception {
return dao.selectSubMainzoneList(mainzoneVO);
}
@Override
public int selectSubMainzoneCount(MainzoneVO mainzoneVO) throws Exception {
return dao.selectSubMainzoneCount(mainzoneVO);
}
@Override
public MainzoneVO selectSubMainzoneVO(String mazId) throws Exception {
MainzoneVO resultVO = dao.selectSubMainzoneVO(mazId);
if (resultVO == null)
throw processException("info.nodata.msg");
return resultVO;
}
@Override
public List<MainzoneVO> selectSubMainzoneListRolling() {
return dao.selectSubMainzoneListRolling();
}
@Override
public void deleteSubMainzone(String id) {
dao.deleteSubMainzone(id);
}
@Override
public void resetSubMainVOSort(MainzoneVO mainzoneVO) {
dao.resetSubMainVOSort(mainzoneVO);
}
}

View File

@ -0,0 +1,308 @@
package itn.com.uss.ion.bnr.sub.web;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springmodules.validation.commons.DefaultBeanValidator;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.fdl.property.EgovPropertyService;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import itn.com.cmm.ComDefaultCodeVO;
import itn.com.cmm.EgovMessageSource;
import itn.com.cmm.LoginVO;
import itn.com.cmm.service.EgovCmmUseService;
import itn.com.cmm.service.EgovFileMngService;
import itn.com.cmm.service.EgovFileMngUtil;
import itn.com.cmm.service.FileVO;
import itn.com.cmm.util.RedirectUrlMaker;
import itn.com.uss.ion.bnr.sub.service.SubMainZoneManageService;
import itn.com.uss.ion.pwm.service.MainzoneVO;
import itn.let.sym.site.service.EgovSiteManagerService;
/**
* 개요
* - 팝업창에 대한 Controller를 정의한다.
*
* 상세내용
* - 팝업창에 대한 등록, 수정, 삭제, 조회, 반영확인 기능을 제공한다.
* - 팝업창의 조회기능은 목록조회, 상세조회로, 사용자 화면 보기로 구분된다.
* @author 이창원
* @version 1.0
* @created 05-8-2009 오후 2:19:57
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2025.02.24 이호영 최초 생성
*
* </pre>
*/
@Controller
public class SubMainZoneManageController {
private static final Logger LOGGER = LoggerFactory.getLogger(SubMainZoneManageController.class);
@Autowired
private DefaultBeanValidator beanValidator;
/** EgovMessageSource */
@Resource(name = "egovMessageSource")
EgovMessageSource egovMessageSource;
/** EgovPropertyService */
@Resource(name = "propertiesService")
protected EgovPropertyService propertiesService;
/** EgovPopupManageService */
@Resource(name = "subMainZoneManageService")
private SubMainZoneManageService subMainZoneManageService;
/** cmmUseService */
@Resource(name = "EgovCmmUseService")
private EgovCmmUseService cmmUseService;
@Resource(name="EgovFileMngUtil")
private EgovFileMngUtil fileUtil;
@Resource(name="EgovFileMngService")
private EgovFileMngService fileMngService;
@Resource(name = "egovPopupZoneIdGnrService")
private EgovIdGnrService idgenService;
// @Resource(name = "egovMainZoneIdGnrService")
// private EgovIdGnrService idgenServiceMain;
@Resource(name = "egovSubMainZoneIdGnrService")
private EgovIdGnrService idgenServiceSubMain;
@Resource(name = "egovSiteManagerService")
EgovSiteManagerService egovSiteManagerService;
@Resource(name = "EgovFileMngService")
private EgovFileMngService fileService;
/*메인이미지 관리*/
@RequestMapping(value="/uss/ion/bnr/sub/subMainZoneList.do")
// @RequestMapping(value="/uss/ion/pwm/mainzoneList.do")
public String selectMainzoneList(ModelMap model , MainzoneVO mainzoneVO , HttpSession session ) throws Exception {
LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
if(mainzoneVO.getPageUnit()% 8 != 0) {//9 배수로 넘어오지 않으면 초기세팅
mainzoneVO.setPageUnit(8);
}else {
mainzoneVO.setPageUnit(mainzoneVO.getPageUnit());
}
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(mainzoneVO.getPageIndex());
paginationInfo.setRecordCountPerPage(mainzoneVO.getPageUnit());
paginationInfo.setPageSize(mainzoneVO.getPageSize());
mainzoneVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
mainzoneVO.setLastIndex(paginationInfo.getLastRecordIndex());
mainzoneVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
if(null != loginVO && !"super".equals(loginVO.getSiteId())){ //각각의 사이트
mainzoneVO.setSiteId(loginVO.getSiteId());
}
List<?> mainzoneList = subMainZoneManageService.selectSubMainzoneList(mainzoneVO);
model.addAttribute("mainzoneList", mainzoneList);
int totCnt = subMainZoneManageService.selectSubMainzoneCount(mainzoneVO);
paginationInfo.setTotalRecordCount(totCnt);
model.addAttribute("paginationInfo", paginationInfo);
return "uss/ion/bnr/sub/subMainZoneList";
}
/*알림창등록/수정 view*/
@RequestMapping(value="/uss/ion/bnr/sub/subMainzoneModify.do")
public String updateMainZoneView(@RequestParam Map<?, ?> commandMap,
HttpServletRequest request, Model model, HttpSession session)
throws Exception {
MainzoneVO mainzoneVO = new MainzoneVO();
if("Modify".equals((String)commandMap.get("pageType"))){ //수정
String mazId = (String)commandMap.get("selectedId");
mainzoneVO = subMainZoneManageService.selectSubMainzoneVO(mazId);
String sNtceBgnde = mainzoneVO.getNtceBgnde();
String sNtceEndde = mainzoneVO.getNtceEndde();
if(sNtceBgnde != null && sNtceEndde != null ) {
mainzoneVO.setNtceBgndeHH(sNtceBgnde.substring(8, 10));
mainzoneVO.setNtceBgndeMM(sNtceBgnde.substring(10, 12));
mainzoneVO.setNtceEnddeHH(sNtceEndde.substring(8, 10));
mainzoneVO.setNtceEnddeMM(sNtceEndde.substring(10, 12));
//게시기간 시작일자()
model.addAttribute("ntceBgndeHH", getTimeHH());
//게시기간 시작일자()
model.addAttribute("ntceBgndeMM", getTimeMM());
//게시기간 종료일자()
model.addAttribute("ntceEnddeHH", getTimeHH());
//게시기간 종료일자()
model.addAttribute("ntceEnddeMM", getTimeMM());
}
if(mainzoneVO != null){
mainzoneVO.setBeSort(mainzoneVO.getSort());
FileVO fileVO = new FileVO();
String atchFileId = mainzoneVO.getMainzoneImageFile();
fileVO.setAtchFileId(atchFileId);
List<FileVO> fileList = fileService.selectFileInfs(fileVO);
model.addAttribute("fileList", fileList);
}
}else{ //등록
//게시기간 시작일자()
model.addAttribute("ntceBgndeHH", getTimeHH());
//게시기간 시작일자()
model.addAttribute("ntceBgndeMM", getTimeMM());
//게시기간 종료일자()
model.addAttribute("ntceEnddeHH", getTimeHH());
//게시기간 종료일자()
model.addAttribute("ntceEnddeMM", getTimeMM());
}
//model.addAttribute("sortList", sortList);
model.addAttribute("mainzoneVO", mainzoneVO);
System.out.println("mainzoneVO :: "+ mainzoneVO.toString());
/* 타겟 코드 */
ComDefaultCodeVO vo = new ComDefaultCodeVO();
vo.setCodeId("COM037");
//List<?> targetList = cmmUseService.selectCmmCodeDetail(vo);
//model.addAttribute("targetList", targetList);
return "uss/ion/bnr/sub/subMainZoneModify";
}
/*메인 이미지삭제 */
@RequestMapping("/uss/ion/bnr/sub/subMainzoneListDelete.do")
public String deleteMainzoneDelete(@RequestParam("del") String[] del, RedirectAttributes redirectAttributes , Model model) throws Exception {
LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
MainzoneVO mainzoneVO = new MainzoneVO();
for(String id:del) {
try{
mainzoneVO = subMainZoneManageService.selectSubMainzoneVO(id);
}catch(Exception e){
redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("info.nodata.msg"));
RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/bnr/subMainZoneList.do");
return redirectUrlMaker.getRedirectUrl();
}
subMainZoneManageService.deleteSubMainzone(id);
if(null != loginVO && !"super".equals(loginVO.getSiteId())){
mainzoneVO.setSiteId(loginVO.getSiteId());
}
subMainZoneManageService.resetSubMainVOSort(mainzoneVO);
}
redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete"));
RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/bnr/subMainZoneList.do");
return redirectUrlMaker.getRedirectUrl();
}
/**
* 시간을 LIST를 반환한다.
* @return List
* @throws
*/
@SuppressWarnings("unused")
private List<ComDefaultCodeVO> getTimeHH() {
ArrayList<ComDefaultCodeVO> listHH = new ArrayList<ComDefaultCodeVO>();
HashMap<?, ?> hmHHMM;
for (int i = 0; i <= 24; i++) {
String sHH = "";
String strI = String.valueOf(i);
if (i < 10) {
sHH = "0" + strI;
} else {
sHH = strI;
}
ComDefaultCodeVO codeVO = new ComDefaultCodeVO();
codeVO.setCode(sHH);
codeVO.setCodeNm(sHH);
listHH.add(codeVO);
}
return listHH;
}
/**
* 분을 LIST를 반환한다.
* @return List
* @throws
*/
@SuppressWarnings("unused")
private List<ComDefaultCodeVO> getTimeMM() {
ArrayList<ComDefaultCodeVO> listMM = new ArrayList<ComDefaultCodeVO>();
HashMap<?, ?> hmHHMM;
for (int i = 0; i <= 60; i++) {
String sMM = "";
String strI = String.valueOf(i);
if (i < 10) {
sMM = "0" + strI;
} else {
sMM = strI;
}
ComDefaultCodeVO codeVO = new ComDefaultCodeVO();
codeVO.setCode(sMM);
codeVO.setCodeNm(sMM);
listMM.add(codeVO);
}
return listMM;
}
}

View File

@ -38,6 +38,7 @@ import itn.com.cmm.service.EgovFileMngService;
import itn.com.cmm.service.EgovFileMngUtil; import itn.com.cmm.service.EgovFileMngUtil;
import itn.com.cmm.service.FileVO; import itn.com.cmm.service.FileVO;
import itn.com.cmm.util.RedirectUrlMaker; import itn.com.cmm.util.RedirectUrlMaker;
import itn.com.uss.ion.bnr.pop.service.MainPopupVO;
import itn.com.uss.ion.bnr.service.Banner; import itn.com.uss.ion.bnr.service.Banner;
import itn.com.uss.ion.bnr.service.BannerVO; import itn.com.uss.ion.bnr.service.BannerVO;
import itn.com.uss.ion.bnr.service.EgovBannerService; import itn.com.uss.ion.bnr.service.EgovBannerService;
@ -112,6 +113,12 @@ public class FmsFileController {
@Resource(name = "egovMainZoneIdGnrService") @Resource(name = "egovMainZoneIdGnrService")
private EgovIdGnrService idgenServiceMain; private EgovIdGnrService idgenServiceMain;
@Resource(name = "egovSubMainZoneIdGnrService")
private EgovIdGnrService idgenServiceSubMain;
@Resource(name = "egovMainPopupIdGnrService")
private EgovIdGnrService idgenServiceMainPopup;
@Resource(name = "egovBannerService") @Resource(name = "egovBannerService")
private EgovBannerService egovBannerService; private EgovBannerService egovBannerService;
@ -387,6 +394,7 @@ public class FmsFileController {
public ModelAndView insertFmsFileInsertAjax(@RequestParam Map<?, ?> commandMap, public ModelAndView insertFmsFileInsertAjax(@RequestParam Map<?, ?> commandMap,
@ModelAttribute("fmsFileVO") FmsFileVO fmsFileVO, @ModelAttribute("fmsFileVO") FmsFileVO fmsFileVO,
MainzoneVO mainzoneVO, MainzoneVO mainzoneVO,
MainPopupVO mainPopupVO,
PopupzoneVO popupzoneVO, PopupzoneVO popupzoneVO,
Banner banner, Banner banner,
BannerVO bannerVO, BannerVO bannerVO,
@ -414,6 +422,10 @@ public class FmsFileController {
String KeyStr = "FMS_"; String KeyStr = "FMS_";
if("mainzone".equals(fileVO.getMenuName())) { //메인비주얼 if("mainzone".equals(fileVO.getMenuName())) { //메인비주얼
KeyStr = "MAZ_"; KeyStr = "MAZ_";
}else if("subMainzone".equals(fileVO.getMenuName())) { //메인비주얼
KeyStr = "SMAZ_";
}else if("mainPopup".equals(fileVO.getMenuName())) { //메인비주얼
KeyStr = "MPP_";
}else if("popupzone".equals(fileVO.getMenuName())) { //매뉴별 비주얼 }else if("popupzone".equals(fileVO.getMenuName())) { //매뉴별 비주얼
KeyStr = "POZ_"; KeyStr = "POZ_";
}else if("banner".equals(fileVO.getMenuName())) { //매뉴별 비주얼 }else if("banner".equals(fileVO.getMenuName())) { //매뉴별 비주얼
@ -442,6 +454,9 @@ public class FmsFileController {
mainzoneVO.setMainzoneImage(orignlFileNm); mainzoneVO.setMainzoneImage(orignlFileNm);
mainzoneVO.setMainzoneImageFile(atchFileId); mainzoneVO.setMainzoneImageFile(atchFileId);
mainPopupVO.setMainzoneImage(orignlFileNm);
mainPopupVO.setMainzoneImageFile(atchFileId);
fmsFileVO.setFmsImage(orignlFileNm); fmsFileVO.setFmsImage(orignlFileNm);
fmsFileVO.setFmsImageFile(atchFileId); fmsFileVO.setFmsImageFile(atchFileId);
@ -477,7 +492,24 @@ public class FmsFileController {
egovPopupManageService.insertMainzone(mainzoneVO); egovPopupManageService.insertMainzone(mainzoneVO);
mainzoneVO.setSortOver("D"); //앞쪽에 넣음 mainzoneVO.setSortOver("D"); //앞쪽에 넣음
egovPopupManageService.resetMainVOSort(mainzoneVO); egovPopupManageService.resetMainVOSort(mainzoneVO);
}else if("popupzone".equals(fileVO.getMenuName())) { //매뉴별 비주얼 }
else if("subMainzone".equals(fileVO.getMenuName())) { // 서브 메인비주얼 새글
String mainId = idgenServiceSubMain.getNextStringId();
mainzoneVO.setMazId(mainId);
mainzoneVO.setRegisterId(loginVO.getUniqId());
egovPopupManageService.insertSubMainzone(mainzoneVO);
mainzoneVO.setSortOver("D"); //앞쪽에 넣음
egovPopupManageService.resetSubMainVOSort(mainzoneVO);
}
else if("mainPopup".equals(fileVO.getMenuName())) { // 메인팝업 새글
String mainId = idgenServiceMainPopup.getNextStringId();
mainPopupVO.setPopId(mainId);
mainPopupVO.setRegisterId(loginVO.getUniqId());
egovPopupManageService.insertMainPopup(mainPopupVO);
mainPopupVO.setSortOver("D"); //앞쪽에 넣음
egovPopupManageService.resetMainPopup(mainPopupVO);
}
else if("popupzone".equals(fileVO.getMenuName())) { //매뉴별 비주얼
String pozId = idgenService.getNextStringId(); String pozId = idgenService.getNextStringId();
popupzoneVO.setPozId(pozId); popupzoneVO.setPozId(pozId);
popupzoneVO.setRegisterId(loginVO.getUniqId()); popupzoneVO.setRegisterId(loginVO.getUniqId());
@ -521,6 +553,19 @@ public class FmsFileController {
mainzoneVO.setSortOver("D"); mainzoneVO.setSortOver("D");
} }
egovPopupManageService.resetMainVOSort(mainzoneVO); egovPopupManageService.resetMainVOSort(mainzoneVO);
}else if("subMainzone".equals(fileVO.getMenuName())) { //메인비주얼 수정
egovPopupManageService.updateSubMainzone(mainzoneVO);
if(mainzoneVO.getSort() < mainzoneVO.getBeSort() ){ //sortOver : A 후번호로 변경 , D : 선번호로 변경
mainzoneVO.setSortOver("D");
}
egovPopupManageService.resetMainVOSort(mainzoneVO);
}else if("mainPopup".equals(fileVO.getMenuName())) { // 메인팝업 새글
egovPopupManageService.updateMainPopup(mainPopupVO);
if(mainzoneVO.getSort() < mainzoneVO.getBeSort() ){ //sortOver : A 후번호로 변경 , D : 선번호로 변경
mainzoneVO.setSortOver("D");
}
egovPopupManageService.resetMainPopup(mainPopupVO);
}else if("popupzone".equals(fileVO.getMenuName())) { //매뉴별 비주얼 }else if("popupzone".equals(fileVO.getMenuName())) { //매뉴별 비주얼
egovPopupManageService.updatePopupzone(popupzoneVO); egovPopupManageService.updatePopupzone(popupzoneVO);
if(popupzoneVO.getSort() < popupzoneVO.getBeSort() ){ //sortOver : A 후번호로 변경 , D : 선번호로 변경 if(popupzoneVO.getSort() < popupzoneVO.getBeSort() ){ //sortOver : A 후번호로 변경 , D : 선번호로 변경
@ -557,7 +602,8 @@ public class FmsFileController {
} }
} }
modelAndView.addObject("result", "success"); modelAndView.addObject("result", "success");
}catch (Exception e) { }catch (Exception e) {
e.printStackTrace();
modelAndView.addObject("result", "fail"); modelAndView.addObject("result", "fail");
} }
return modelAndView; return modelAndView;

View File

@ -3,6 +3,8 @@ package itn.com.uss.ion.pwm.service;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import itn.com.uss.ion.bnr.pop.service.MainPopupVO;
/** /**
* 개요 * 개요
* - 팝업창에 대한 Service Interface를 정의한다. * - 팝업창에 대한 Service Interface를 정의한다.
@ -123,6 +125,8 @@ public interface EgovPopupManageService {
public int getMainMaxSort() throws Exception; public int getMainMaxSort() throws Exception;
public void insertMainzone(MainzoneVO mainzoneVO) throws Exception; public void insertMainzone(MainzoneVO mainzoneVO) throws Exception;
public void insertSubMainzone(MainzoneVO mainzoneVO) throws Exception;
public void resetMainSort(MainzoneVO mainzoneVO) throws Exception; public void resetMainSort(MainzoneVO mainzoneVO) throws Exception;
@ -137,6 +141,8 @@ public interface EgovPopupManageService {
public void updateMainSortDown(SortVO sortVO) throws Exception; public void updateMainSortDown(SortVO sortVO) throws Exception;
public void updateMainzone(MainzoneVO mainzoneVO) throws Exception; public void updateMainzone(MainzoneVO mainzoneVO) throws Exception;
public void updateSubMainzone(MainzoneVO mainzoneVO) throws Exception;
public int selectPopupzoneListTotCnt(PopupzoneVO popupzoneVo) throws Exception; public int selectPopupzoneListTotCnt(PopupzoneVO popupzoneVo) throws Exception;
@ -145,6 +151,8 @@ public interface EgovPopupManageService {
public void resetVOSort(PopupzoneVO popupzoneVO) throws Exception; public void resetVOSort(PopupzoneVO popupzoneVO) throws Exception;
public void resetMainVOSort(MainzoneVO mainzoneVO) throws Exception; public void resetMainVOSort(MainzoneVO mainzoneVO) throws Exception;
public void resetSubMainVOSort(MainzoneVO mainzoneVO) throws Exception;
public List<SocialVO> selectSocialList(SocialVO socialVO) throws Exception; public List<SocialVO> selectSocialList(SocialVO socialVO) throws Exception;
@ -161,4 +169,11 @@ public interface EgovPopupManageService {
//사용자 메인화면 롤링 배너 이미지 조회 //사용자 메인화면 롤링 배너 이미지 조회
public List<MainzoneVO> selectMainzoneListRolling() throws Exception; public List<MainzoneVO> selectMainzoneListRolling() throws Exception;
public void insertMainPopup(MainPopupVO mainPopupVO);
public void resetMainPopup(MainPopupVO mainPopupVO) throws Exception;
public void updateMainPopup(MainPopupVO mainPopupVO) throws Exception;
} }

View File

@ -18,6 +18,8 @@ package itn.com.uss.ion.pwm.service;
import java.io.Serializable; import java.io.Serializable;
import itn.com.cmm.ComDefaultVO; import itn.com.cmm.ComDefaultVO;
import lombok.Getter;
import lombok.Setter;
/** /**
* @Class Name : MainzoneVO.java * @Class Name : MainzoneVO.java
@ -35,6 +37,8 @@ import itn.com.cmm.ComDefaultVO;
* *
* *
*/ */
@Getter
@Setter
public class MainzoneVO extends ComDefaultVO implements Serializable { public class MainzoneVO extends ComDefaultVO implements Serializable {
@ -95,190 +99,8 @@ public class MainzoneVO extends ComDefaultVO implements Serializable {
private String ntceEnddeHH = ""; private String ntceEnddeHH = "";
private String ntceEnddeMM = ""; private String ntceEnddeMM = "";
public int getSeq() { private String topTxt = "";
return seq; private String lowTxt = "";
}
public void setSeq(int seq) {
this.seq = seq;
}
public String getUpfile() {
return upfile;
}
public void setUpfile(String upfile) {
this.upfile = upfile;
}
public String getUpfileUrl() {
return upfileUrl;
}
public void setUpfileUrl(String upfileUrl) {
this.upfileUrl = upfileUrl;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getMlink() {
return mlink;
}
public void setMlink(String mlink) {
this.mlink = mlink;
}
public String getIstarget() {
return istarget;
}
public void setIstarget(String istarget) {
this.istarget = istarget;
}
public String getDel() {
return del;
}
public void setDel(String del) {
this.del = del;
}
public int getSort() {
return sort;
}
public void setSort(int sort) {
this.sort = sort;
}
public String getRegdt() {
return regdt;
}
public void setRegdt(String regdt) {
this.regdt = regdt;
}
public String getMainzoneImage() {
return mainzoneImage;
}
public void setMainzoneImage(String mainzoneImage) {
this.mainzoneImage = mainzoneImage;
}
public String getMainzoneImageFile() {
return mainzoneImageFile;
}
public void setMainzoneImageFile(String mainzoneImageFile) {
this.mainzoneImageFile = mainzoneImageFile;
}
public String getMazId() {
return mazId;
}
public void setMazId(String mazId) {
this.mazId = mazId;
}
public String getMazNm() {
return mazNm;
}
public void setMazNm(String mazNm) {
this.mazNm = mazNm;
}
public String getUseYn() {
return useYn;
}
public void setUseYn(String useYn) {
this.useYn = useYn;
}
public String getRegisterId() {
return registerId;
}
public void setRegisterId(String registerId) {
this.registerId = registerId;
}
public String getModdt() {
return moddt;
}
public void setModdt(String moddt) {
this.moddt = moddt;
}
public String getDeviceType() {
return deviceType;
}
public void setDeviceType(String deviceType) {
this.deviceType = deviceType;
}
public String getNtceBgnde() {
return ntceBgnde;
}
public void setNtceBgnde(String ntceBgnde) {
this.ntceBgnde = ntceBgnde;
}
public String getNtceEndde() {
return ntceEndde;
}
public void setNtceEndde(String ntceEndde) {
this.ntceEndde = ntceEndde;
}
public String getNtceBgndeHH() {
return ntceBgndeHH;
}
public void setNtceBgndeHH(String ntceBgndeHH) {
this.ntceBgndeHH = ntceBgndeHH;
}
public String getNtceBgndeMM() {
return ntceBgndeMM;
}
public void setNtceBgndeMM(String ntceBgndeMM) {
this.ntceBgndeMM = ntceBgndeMM;
}
public String getNtceEnddeHH() {
return ntceEnddeHH;
}
public void setNtceEnddeHH(String ntceEnddeHH) {
this.ntceEnddeHH = ntceEnddeHH;
}
public String getNtceEnddeMM() {
return ntceEnddeMM;
}
public void setNtceEnddeMM(String ntceEnddeMM) {
this.ntceEnddeMM = ntceEnddeMM;
}
} }

View File

@ -1,17 +1,23 @@
package itn.com.uss.ion.pwm.service.impl; package itn.com.uss.ion.pwm.service.impl;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.IntStream;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import egovframework.rte.fdl.idgnr.EgovIdGnrService; import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.psl.dataaccess.util.EgovMap; import egovframework.rte.psl.dataaccess.util.EgovMap;
import itn.com.uss.ion.bnr.pop.service.MainPopupLinkVO;
import itn.com.uss.ion.bnr.pop.service.MainPopupVO;
import itn.com.uss.ion.pwm.service.EgovPopupManageService; import itn.com.uss.ion.pwm.service.EgovPopupManageService;
import itn.com.uss.ion.pwm.service.MainzoneVO; import itn.com.uss.ion.pwm.service.MainzoneVO;
import itn.com.uss.ion.pwm.service.PopupManageVO; import itn.com.uss.ion.pwm.service.PopupManageVO;
@ -239,6 +245,15 @@ public class EgovPopupManageServiceImpl extends EgovAbstractServiceImpl implemen
public void insertMainzone(MainzoneVO mainzoneVO) throws Exception { public void insertMainzone(MainzoneVO mainzoneVO) throws Exception {
dao.insertMainzone(mainzoneVO); dao.insertMainzone(mainzoneVO);
} }
@Override
public void insertSubMainzone(MainzoneVO mainzoneVO) throws Exception {
dao.insertSubMainzone(mainzoneVO);
}
@Override
public void resetMainPopup(MainPopupVO mainPopupVO) throws Exception {
dao.resetMainPopup(mainPopupVO);
}
@Override @Override
public void resetMainSort(MainzoneVO mainzoneVO) throws Exception { public void resetMainSort(MainzoneVO mainzoneVO) throws Exception {
@ -295,6 +310,12 @@ public class EgovPopupManageServiceImpl extends EgovAbstractServiceImpl implemen
dao.updateMainzone(mainzoneVO); dao.updateMainzone(mainzoneVO);
} }
@Override
public void updateSubMainzone(MainzoneVO mainzoneVO) throws Exception {
dao.updateSubMainzone(mainzoneVO);
}
//사용자 메인화면 롤링 배너 이미지 조회 //사용자 메인화면 롤링 배너 이미지 조회
@Override @Override
public List<MainzoneVO> selectMainzoneListRolling() throws Exception{ public List<MainzoneVO> selectMainzoneListRolling() throws Exception{
@ -324,6 +345,12 @@ public class EgovPopupManageServiceImpl extends EgovAbstractServiceImpl implemen
dao.resetMainVOSort(mainzoneVO); dao.resetMainVOSort(mainzoneVO);
} }
@Override
public void resetSubMainVOSort(MainzoneVO mainzoneVO) throws Exception {
dao.resetSubMainVOSort(mainzoneVO);
}
@Override @Override
public List<SocialVO> selectSocialList(SocialVO socialVO) throws Exception { public List<SocialVO> selectSocialList(SocialVO socialVO) throws Exception {
@ -355,4 +382,52 @@ public class EgovPopupManageServiceImpl extends EgovAbstractServiceImpl implemen
public void deleteSocial(String id) throws Exception { public void deleteSocial(String id) throws Exception {
dao.deleteSocial(id); dao.deleteSocial(id);
} }
@Override
public void insertMainPopup(MainPopupVO mainPopupVO) {
dao.insertMainPopup(mainPopupVO);
if(CollectionUtils.isNotEmpty(mainPopupVO.getMainPopupLinkList())) {
List<MainPopupLinkVO> mainPopupLinkListVO = getMainPopupLinkList(mainPopupVO);
// mainPopupLinkListVO.stream().forEach(t-> System.out.println(t.toString()));
dao.insertMainPopupLinkInfo(mainPopupLinkListVO);
}
}
@Override
public void updateMainPopup(MainPopupVO mainPopupVO) throws Exception {
dao.updateMainPopup(mainPopupVO);
if(CollectionUtils.isNotEmpty(mainPopupVO.getMainPopupLinkList())) {
List<MainPopupLinkVO> mainPopupLinkListVO = getMainPopupLinkList(mainPopupVO);
dao.deleteMainPopupLinkInfo(mainPopupVO.getPopId());
dao.insertMainPopupLinkInfo(mainPopupLinkListVO);
}
}
private List<MainPopupLinkVO> getMainPopupLinkList(MainPopupVO mainPopupVO) {
List<MainPopupLinkVO> mainPopupLinkListVO = mainPopupVO.getMainPopupLinkList();
// 기존 sort 값을 숫자로 변환하여 오름차순 정렬
mainPopupLinkListVO.sort(Comparator.comparingInt(vo -> vo.getSort()));
// 2. 정렬된 상태에서 sort 값을 연속적인 숫자로 변경 (1, 2, 3, ...)
IntStream.range(0, mainPopupLinkListVO.size())
.forEach(i -> mainPopupLinkListVO.get(i).setSort(i + 1));
mainPopupLinkListVO.stream().forEach(t-> t.setPopId(mainPopupVO.getPopId()));
return mainPopupLinkListVO;
}
} }

View File

@ -5,6 +5,8 @@ import org.springframework.stereotype.Repository;
import egovframework.rte.psl.dataaccess.util.EgovMap; import egovframework.rte.psl.dataaccess.util.EgovMap;
import itn.com.cmm.service.impl.EgovComAbstractDAO; import itn.com.cmm.service.impl.EgovComAbstractDAO;
import itn.com.uss.ion.bnr.pop.service.MainPopupLinkVO;
import itn.com.uss.ion.bnr.pop.service.MainPopupVO;
import itn.com.uss.ion.pwm.service.MainzoneVO; import itn.com.uss.ion.pwm.service.MainzoneVO;
import itn.com.uss.ion.pwm.service.PopupManageVO; import itn.com.uss.ion.pwm.service.PopupManageVO;
import itn.com.uss.ion.pwm.service.PopupzoneVO; import itn.com.uss.ion.pwm.service.PopupzoneVO;
@ -193,6 +195,10 @@ public class PopupManageDAO extends EgovComAbstractDAO {
public void insertMainzone(MainzoneVO mainzoneVO) throws Exception{ public void insertMainzone(MainzoneVO mainzoneVO) throws Exception{
insert("MainzoneManage.insertMainzone", mainzoneVO); insert("MainzoneManage.insertMainzone", mainzoneVO);
} }
public void insertSubMainzone(MainzoneVO mainzoneVO) throws Exception{
insert("MainzoneManage.insertSubMainzone", mainzoneVO);
}
public void resetMainSort(MainzoneVO mainzoneVO) throws Exception{ public void resetMainSort(MainzoneVO mainzoneVO) throws Exception{
insert("MainzoneManage.resetMainSort", mainzoneVO); insert("MainzoneManage.resetMainSort", mainzoneVO);
@ -223,6 +229,10 @@ public class PopupManageDAO extends EgovComAbstractDAO {
update("MainzoneManage.updateMainzone", mainzoneVO); update("MainzoneManage.updateMainzone", mainzoneVO);
} }
public void updateSubMainzone(MainzoneVO mainzoneVO) throws Exception{
update("MainzoneManage.updateSubMainzone", mainzoneVO);
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MainzoneVO> selectMainzoneListRolling() throws Exception{ public List<MainzoneVO> selectMainzoneListRolling() throws Exception{
return (List<MainzoneVO>) list("MainzoneManage.selectMainzoneListRolling"); return (List<MainzoneVO>) list("MainzoneManage.selectMainzoneListRolling");
@ -243,6 +253,10 @@ public class PopupManageDAO extends EgovComAbstractDAO {
public void resetMainVOSort(MainzoneVO mainzoneVO) throws Exception{ public void resetMainVOSort(MainzoneVO mainzoneVO) throws Exception{
update("MainzoneManage.resetMainVOSort", mainzoneVO); update("MainzoneManage.resetMainVOSort", mainzoneVO);
} }
public void resetSubMainVOSort(MainzoneVO mainzoneVO) throws Exception{
update("MainzoneManage.resetSubMainVOSort", mainzoneVO);
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<SocialVO> selectSocialList(SocialVO socialVO) throws Exception{ public List<SocialVO> selectSocialList(SocialVO socialVO) throws Exception{
@ -268,4 +282,30 @@ public class PopupManageDAO extends EgovComAbstractDAO {
public void deleteSocial(String id) throws Exception{ public void deleteSocial(String id) throws Exception{
delete("SocialManage.deleteSocial", id); delete("SocialManage.deleteSocial", id);
} }
public void insertMainPopup(MainPopupVO mainPopupVO) {
insert("MainzoneManage.insertMainPopup", mainPopupVO);
}
public void insertMainPopupLinkInfo(List<MainPopupLinkVO> mainPopupLinkListVO) {
insert("MainzoneManage.insertMainPopupLinkInfo", mainPopupLinkListVO);
}
public void resetMainPopup(MainPopupVO mainPopupVO) {
// update("MainzoneManage.resetSubMainVOSort", mainzoneVO);
insert("MainzoneManage.resetMainPopup", mainPopupVO);
}
public void updateMainPopup(MainPopupVO mainPopupVO) throws Exception{
update("MainzoneManage.updateMainPopup", mainPopupVO);
}
public void updateMainPopupLinkInfo(MainPopupLinkVO mainPopupLinkVO) {
update("MainzoneManage.updateMainPopupLinkInfo", mainPopupLinkVO);
}
public void deleteMainPopupLinkInfo(String popId) {
delete("MainzoneManage.deleteMainPopupLinkInfo", popId);
}
} }

View File

@ -845,6 +845,8 @@ public class EgovPopupManageController {
HttpServletRequest request, Model model, HttpSession session) HttpServletRequest request, Model model, HttpSession session)
throws Exception { throws Exception {
System.out.println("??????");
MainzoneVO mainzoneVO = new MainzoneVO(); MainzoneVO mainzoneVO = new MainzoneVO();
if("Modify".equals((String)commandMap.get("pageType"))){ //수정 if("Modify".equals((String)commandMap.get("pageType"))){ //수정
String mazId = (String)commandMap.get("selectedId"); String mazId = (String)commandMap.get("selectedId");
@ -896,7 +898,8 @@ public class EgovPopupManageController {
//model.addAttribute("sortList", sortList); //model.addAttribute("sortList", sortList);
model.addAttribute("mainzoneVO", mainzoneVO); model.addAttribute("mainzoneVO", mainzoneVO);
System.out.println("mainzoneVO :: "+ mainzoneVO.toString());
/* 타겟 코드 */ /* 타겟 코드 */
ComDefaultCodeVO vo = new ComDefaultCodeVO(); ComDefaultCodeVO vo = new ComDefaultCodeVO();
vo.setCodeId("COM037"); vo.setCodeId("COM037");

View File

@ -13,11 +13,9 @@ import java.nio.charset.Charset;
import java.text.NumberFormat; import java.text.NumberFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
@ -41,18 +39,12 @@ import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser; import org.json.simple.parser.JSONParser;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.HandlerMapping; import org.springframework.web.servlet.HandlerMapping;
@ -67,7 +59,6 @@ import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import itn.com.cmm.ComDefaultCodeVO; import itn.com.cmm.ComDefaultCodeVO;
import itn.com.cmm.EgovMessageSource; import itn.com.cmm.EgovMessageSource;
import itn.com.cmm.LoginVO; import itn.com.cmm.LoginVO;
import itn.com.cmm.RestResponse;
import itn.com.cmm.service.EgovCmmUseService; import itn.com.cmm.service.EgovCmmUseService;
import itn.com.cmm.service.FileVO; import itn.com.cmm.service.FileVO;
import itn.com.cmm.util.DateUtils; import itn.com.cmm.util.DateUtils;
@ -76,8 +67,6 @@ import itn.com.cmm.util.PayUtils;
import itn.com.cmm.util.RedirectUrlMaker; import itn.com.cmm.util.RedirectUrlMaker;
import itn.com.cmm.util.StringUtil; import itn.com.cmm.util.StringUtil;
import itn.com.utl.fcc.service.EgovStringUtil; import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.fax.admin.service.FaxStatVO;
import itn.let.mail.service.StatusResponse;
import itn.let.mjo.mjocommon.MjonCommon; import itn.let.mjo.mjocommon.MjonCommon;
import itn.let.mjo.msg.service.MjonMsgService; import itn.let.mjo.msg.service.MjonMsgService;
import itn.let.mjo.msg.service.MjonMsgVO; import itn.let.mjo.msg.service.MjonMsgVO;
@ -107,6 +96,7 @@ import itn.let.uss.umt.service.EgovUserManageService;
import itn.let.uss.umt.service.MberManageVO; import itn.let.uss.umt.service.MberManageVO;
import itn.let.uss.umt.service.UserManageVO; import itn.let.uss.umt.service.UserManageVO;
import itn.let.utl.fcc.service.EgovCryptoUtil; import itn.let.utl.fcc.service.EgovCryptoUtil;
import itn.let.utl.user.service.ExcelUtil;
import itn.let.utl.user.service.MjonNoticeSendUtil; import itn.let.utl.user.service.MjonNoticeSendUtil;
@Controller @Controller
@ -1952,7 +1942,6 @@ public class MjonPayController {
model.addAttribute("prePaymentYn", userManageVO.getPrePaymentYn()); model.addAttribute("prePaymentYn", userManageVO.getPrePaymentYn());
System.out.println("pattern :: "+ pattern); System.out.println("pattern :: "+ pattern);
if(pattern.equals("/web/member/pay/PayListAllAjax.do") if(pattern.equals("/web/member/pay/PayListAllAjax.do")
|| pattern.equals("/web/member/pay/PayListMobileAjax.do") || pattern.equals("/web/member/pay/PayListMobileAjax.do")
@ -2051,7 +2040,7 @@ public class MjonPayController {
return "/web/pay/PayListRefundAjax"; return "/web/pay/PayListRefundAjax";
} }
//일반 결제 페이지 처리 //일반 결제 페이지 처리
if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
mjonPayVO.setSearchSortCnd("moid"); mjonPayVO.setSearchSortCnd("moid");
@ -2073,7 +2062,7 @@ public class MjonPayController {
} }
} }
if(pattern.equals("/web/member/pay/PayListAllAjax.do")) { //전체 if(pattern.equals("/web/member/pay/PayListAllAjax.do")) { //전체
mjonPayVO.setPageType("all"); mjonPayVO.setPageType("all");
} }
@ -2121,7 +2110,7 @@ public class MjonPayController {
// mjonPayVO.setStartDate(mjonPayVO.getStartDate() == null ? DateUtil.getDateDaysAgo(365) : mjonPayVO.getStartDate()); // mjonPayVO.setStartDate(mjonPayVO.getStartDate() == null ? DateUtil.getDateDaysAgo(365) : mjonPayVO.getStartDate());
// mjonPayVO.setEndDate(mjonPayVO.getEndDate() == null ? DateUtil.getCurrentDate() : mjonPayVO.getEndDate()); // mjonPayVO.setEndDate(mjonPayVO.getEndDate() == null ? DateUtil.getCurrentDate() : mjonPayVO.getEndDate());
if(!DateUtils.dateChkAndValueChk(mjonPayVO.getStartDate(),mjonPayVO.getEndDate(), 12 )) { if(!DateUtils.dateChkAndValueChk(mjonPayVO.getStartDate(),mjonPayVO.getEndDate(), 12 )) {
mjonPayVO.setStartDate(DateUtils.getDateMonthsAgo(12)); mjonPayVO.setStartDate(DateUtils.getDateMonthsAgo(12));
mjonPayVO.setEndDate(DateUtils.getCurrentDate()); mjonPayVO.setEndDate(DateUtils.getCurrentDate());
@ -4085,7 +4074,7 @@ public class MjonPayController {
} }
//결제 엑셀 다운로드 //결제 엑셀 다운로드
@RequestMapping(value= {"/web/member/pay/PayExcelDownload.do"}) @RequestMapping(value= {"/web/member/pay/PayExcelDownload_OLD.do"})
public void PayExcelDownload( MjonPayVO mjonPayVO, public void PayExcelDownload( MjonPayVO mjonPayVO,
HttpServletRequest request, HttpServletRequest request,
HttpServletResponse response , HttpServletResponse response ,
@ -4180,6 +4169,118 @@ public class MjonPayController {
} }
} }
//결제 엑셀 다운로드
@RequestMapping(value= {"/web/member/pay/PayExcelDownload.do"})
public void PayNewExcelDownload( MjonPayVO mjonPayVO,
HttpServletRequest request,
HttpServletResponse response ,
ModelMap model) throws Exception {
//로그인 여부 체크 ID 획득
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(loginVO != null) {
String fileName ="결제내역 엑셀 리스트"; //file name
try{
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(1);
paginationInfo.setRecordCountPerPage(10000);
paginationInfo.setPageSize(10);
mjonPayVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
mjonPayVO.setLastIndex(paginationInfo.getLastRecordIndex());
mjonPayVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
mjonPayVO.setUserId(userId);
//url에 따른 타입 처리
String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
System.out.println("pattern========");
System.out.println(pattern);
//url에 따른 검색 조건 처리
mjonPayVO = this.p_checkSearchCnd(pattern, mjonPayVO);
//검색 기간 처리
mjonPayVO = this.p_checkSearchDate(mjonPayVO);
//정렬 처리
mjonPayVO = this.p_checkSortCnd(mjonPayVO);
//결과 리스트 정보 불러오기
List<MjonPayVO> resultList = mjonPayService.selectPayList(mjonPayVO);
//필요 컬럼 추가
for (int i=0;i<resultList.size();i++) {
MjonPayVO tMjonPayVO = resultList.get(i);
tMjonPayVO.setSeqNo(resultList.size()-i);
}
//excel 만들기
List<Object> excelData = new ArrayList<>();
excelData.addAll(resultList);
// 세팅값
String title = "요금결제내역"; //sheet name & title
// 너비
int[] width = {
4000
, 4000
, 4000
, 4000
, 4000
, 4000
//, 4000
, 4000
};
// 헤더
String[] header = {
"번호"
, "결제일시"
, "결제방식"
, "결제금액"
, "충전금액"
, "결제상태"
//, "증빙서류 발행 요청"
, "비고1"
};
// 컬럼명
String[] order = {
"SeqNo"
, "RegDate"
, "PayMethodTxt"
, "Amt"
, "Cash"
, "PgStatusTxt"
//, "RcptTypeTxt"
, "VbankNum"
};
// 호출 - download file 처리
SXSSFWorkbook workbook = ExcelUtil.makeSimpleFruitExcelWorkbook(excelData , header, order, width, title);
response = this.p_makeResponse(response, fileName);
workbook.write(response.getOutputStream());
}catch(Exception e) {
e.printStackTrace();
}
}
}
//포인트 교환내역 엑셀 다운로드 //포인트 교환내역 엑셀 다운로드
@RequestMapping(value= {"/web/member/pay/PointExcelDownload.do"}) @RequestMapping(value= {"/web/member/pay/PointExcelDownload.do"})
@ -6088,6 +6189,119 @@ public class MjonPayController {
model.addAttribute("paginationInfo", paginationInfo); model.addAttribute("paginationInfo", paginationInfo);
return "/uss/ion/pay/cashPointSendList"; return "/uss/ion/pay/cashPointSendList";
} }
/**
* @param p_pattern
* @param p_mjonPayVO
* @return
* @throws Exception
*/
private MjonPayVO p_checkSearchCnd(
String p_pattern
, MjonPayVO p_mjonPayVO
) throws Exception{
if(p_pattern.equals("/web/member/pay/PayListAllAjax.do")) { //전체
p_mjonPayVO.setPageType("all");
}
if(p_pattern.equals("/web/member/pay/PayListMobileAjax.do")) { //모바일일때
p_mjonPayVO.setSearchCondition2("CELLPHONE");
p_mjonPayVO.setPayMethod("CELLPHONE");
p_mjonPayVO.setPageType("cellphone");
}
if(p_pattern.equals("/web/member/pay/PayListCardAjax.do")) { //신용카드
p_mjonPayVO.setSearchCondition2("CARD");
p_mjonPayVO.setPayMethod("CARD");
p_mjonPayVO.setPageType("card");
}
if(p_pattern.equals("/web/member/pay/PayListVBankAjax.do")) { //전용계좌
p_mjonPayVO.setSearchCondition2("VBANK");
p_mjonPayVO.setPayMethod("VBANK");
p_mjonPayVO.setPageType("vbank");
}
if(p_pattern.equals("/web/member/pay/PayListBankAjax.do")) { //즉시이체
p_mjonPayVO.setSearchCondition2("BANK");
p_mjonPayVO.setPayMethod("BANK");
p_mjonPayVO.setPageType("bank");
}
if(p_pattern.equals("/web/member/pay/PayListSPayAjax.do")) { //즉시이체
p_mjonPayVO.setSearchCondition2("SPAY");
p_mjonPayVO.setPayMethod("SPAY");
p_mjonPayVO.setPageType("SPAY");
}
if(p_pattern.equals("/web/member/pay/PayListOfflineAjax.do")) { //무통장
p_mjonPayVO.setSearchCondition2("OFFLINE");
p_mjonPayVO.setPayMethod("OFFLINE");
p_mjonPayVO.setPageType("offline");
}
return p_mjonPayVO;
}
/**
* @param p_mjonPayVO
* @return
* @throws Exception
*/
private MjonPayVO p_checkSortCnd(
MjonPayVO p_mjonPayVO
) throws Exception{
//정렬 처리
if("".equals(p_mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
p_mjonPayVO.setSearchSortCnd("moid");
p_mjonPayVO.setSearchSortOrd("desc");
}else {//포인트 교환내역에서 정렬 종류가 달라서 변환처리 해줌
String sortCnt = p_mjonPayVO.getSearchSortCnd();
if(sortCnt.equals("pointUseId") || sortCnt.equals("refundId")) {
p_mjonPayVO.setSearchSortCnd("moid");
}else if(sortCnt.equals("frstRegistPnttm") || sortCnt.equals("frstRegisterPnttm") || sortCnt.equals("refundHandlePnttm")) {
p_mjonPayVO.setSearchSortCnd("regDate");
}else if(sortCnt.equals("type")) {
p_mjonPayVO.setSearchSortCnd("payMethodTxt");
}else if(sortCnt.equals("point") || sortCnt.equals("refundMoney") || sortCnt.equals("refundCash")) {
p_mjonPayVO.setSearchSortCnd("amt");
}else if(sortCnt.equals("cmpltYn") || sortCnt.equals("refundStatus")) {
p_mjonPayVO.setSearchSortCnd("pgStatusTxt");
}
}
return p_mjonPayVO;
}
/**
* @param p_mjonPayVO
* @return
* @throws Exception
*/
private MjonPayVO p_checkSearchDate(
MjonPayVO p_mjonPayVO
) throws Exception{
//검색 기간 처리
if(!DateUtils.dateChkAndValueChk(p_mjonPayVO.getStartDate(),p_mjonPayVO.getEndDate(), 12 ))
{
p_mjonPayVO.setStartDate(DateUtils.getDateMonthsAgo(12));
p_mjonPayVO.setEndDate(DateUtils.getCurrentDate());
}
return p_mjonPayVO;
}
private HttpServletResponse p_makeResponse(
HttpServletResponse p_response
, String p_fileName
) throws Exception{
p_response.setHeader("Set-Cookie", "fileDownload=true; path=/");
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy_MM_dd_HH_mm_ss", Locale.KOREA );
Date currentTime = new Date ();
String mTime = mSimpleDateFormat.format ( currentTime );
p_fileName = p_fileName+"("+mTime+")";
p_response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((p_fileName).getBytes("KSC5601"),"8859_1")+".xlsx"));
return p_response;
}
} }

View File

@ -0,0 +1,143 @@
package itn.let.utl.user.service;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class ExcelUtil {
private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class);
/**
* 엑셀 파일을 방출합니다.
*
* @param voList 엑셀에 넣고 싶은 vo 리스트 형태로 넣습니다.
* @param header 엑셀 해더
* @param order 헤더에 해당하는 내용의 vo 필드 이름을 작성합니다. 예를 들어 String userName; 필드의 1번째 해더이름을 "사용자 이름" 으로 정했으면
* 순서를 맞추어 1번째 order 배열에 "UserName" 이라는 글짜를 입력해줍니다(*주의: 문자는 대문자, 낙타체). 첫번째 컬럼에는 "줄번호"
* 들어가는데, 이것에 대한 내용은 order에 값을 입력하지 않습니다.
* @param width 컬럼 너비를 설정합니다. length가 해더의 length와 일치할 필요는 없습니다.
* @param title
* @throws Exception
* @return SXSSFSheet
*
* 특징 : 해더보다 내용의 컬럼수가 많을 해당 줄의 컬럼은 cut, 해더 이름이 vo와 다르게 되면 해당 컬럼 출력 안됨 require : 날짜 포멧은
* 지원하지 않습니다.
*
*
* ***********************************************************************************************
* EX String title = "게시판 리스트";
* int[] width = {1500, 1500, 1500, 3000, 30000, 3000 };
* String[] header = {"번호", "게시판번호", "작성자", "제목", "내용", "작성일" };
* String[] order = { "Seq", "UserId", "Title", "Content", "RegDt" };
* => 첫번째 "번호" 대한 order 이름이 비어있습니다.
*
* ***********************************************************************************************
*/
public static SXSSFWorkbook makeSimpleFruitExcelWorkbook(List<Object> voList, String[] header, String[] order, int[] width, String title) throws Exception {
// 시트 생성
SXSSFWorkbook workbook = new SXSSFWorkbook();
SXSSFSheet sheet = workbook.createSheet(title);
for (int i = 0; i < width.length; i++) {
// JSP 2022.02.24 => width 변경
//sheet.setColumnWidth(0, width[width.length - (i + 1)]);
sheet.setColumnWidth(i, width[i]);
}
int r = 2;// 줄부터 찍기
CellStyle headerstyle = workbook.createCellStyle();
headerstyle.setAlignment(HorizontalAlignment.CENTER);
headerstyle.setVerticalAlignment(VerticalAlignment.CENTER);
headerstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
// 헤더
Row headerRow = sheet.createRow(r);
// 해더 채움 (우측 방향으로)
Cell headerCell = null;
for (int i = 0; i < header.length; i++) {
headerRow.setHeight((short)512);
headerCell = headerRow.createCell(i);
headerCell.setCellStyle(headerstyle);
headerCell.setCellValue(header[i]);
}
// 내용 생성
Row bodyRow = null;
Cell bodyCell = null;
bodyRow = sheet.createRow(0);
bodyCell = bodyRow.createCell(0);
bodyCell.setCellValue(title);// 읽어온 데이터 표시
//System.out.println("voList.size()");
//System.out.println(voList.size());
//System.out.println(voList.size());
int c = 0;// 컬럼
for (Object vo : voList) {
bodyRow = sheet.createRow(r + 1);
bodyCell = bodyRow.createCell(0);
//bodyCell.setCellValue(r + 1); // 컬럼은 번호
PropertyDescriptor pd; // 클래스의 필드 메소드를 찾아줌. 이름을 기존에 vo.setUserId() 메소드를 통해서만 호출이 가능 했다면, PropertyDescriptor는 이름만으로 메소드
// 호출이 가능함. 클래스가 변경 되어도 동일한 작동으로 getter&setter 호출이 가능하도록 도와줌
Method[] methods = vo.getClass().getDeclaredMethods(); // 메소드들 호출함
// 배열로 이름 같으면 해당 데이터 쓰기
for (int i = 0; i < order.length; i++) {
for (Method method : methods) { // vo 내부 메소드 반복
// System.out.println("i :: "+ i + "methods : "+ methods);
/*System.out.println("voList.method()");
System.out.println(method.getName());*/
if (method.getName().equals("get" + (order[i] == null ? "" : order[i]))) { // vo메소드 이름과 order의 이름 비교
// getter 호출 준비
String getMethodName = method.getName().substring(3); // getter의 이름 가져옴
pd = new PropertyDescriptor(getMethodName, vo.getClass());
// vo의 데이터 세팅
String cellData = (pd.getReadMethod().invoke(vo) != null ? pd.getReadMethod().invoke(vo) : "").toString();
bodyCell = bodyRow.createCell(c++); // 데이터 순서
if(getMethodName.equals("InstrFee") || getMethodName.equals("SpecialWorkAllow") || getMethodName.equals("DistanceAllow")
|| getMethodName.equals("TrafficFee") || getMethodName.equals("AcmdtFee")
|| getMethodName.equals("Amt") || getMethodName.equals("Cash")
){
// JSP 2022.02.22 => null 에러 try~catch 추가
try {
double num = Double.parseDouble(cellData);
CellStyle bodyStyle = workbook.createCellStyle();
bodyCell.setCellValue(num);// 읽어온 데이터 표시
bodyStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0"));
bodyCell.setCellStyle(bodyStyle);
}
catch (Exception ex) {
bodyCell.setCellValue(cellData);
}
}else {
bodyCell.setCellValue(cellData);// 읽어온 데이터 표시
}
//System.out.println("@@ : "+getMethodName +" --- " + cellData);
}
}
}
c = 0;
r++;
}
return workbook;
}
}

View File

@ -78,8 +78,11 @@ import itn.com.cmm.service.EgovFileMngUtil;
import itn.com.cmm.service.FileVO; import itn.com.cmm.service.FileVO;
import itn.com.cmm.util.StringUtil; import itn.com.cmm.util.StringUtil;
import itn.com.cmm.util.WebUtil; import itn.com.cmm.util.WebUtil;
import itn.com.uss.ion.bnr.pop.service.MainPopupManageService;
import itn.com.uss.ion.bnr.pop.service.MainPopupVO;
import itn.com.uss.ion.bnr.service.BannerVO; import itn.com.uss.ion.bnr.service.BannerVO;
import itn.com.uss.ion.bnr.service.EgovBannerService; import itn.com.uss.ion.bnr.service.EgovBannerService;
import itn.com.uss.ion.bnr.sub.service.SubMainZoneManageService;
import itn.com.uss.ion.cnf.service.MetaTagManageService; import itn.com.uss.ion.cnf.service.MetaTagManageService;
import itn.com.uss.ion.cyb.service.CyberAlertManageService; import itn.com.uss.ion.cyb.service.CyberAlertManageService;
import itn.com.uss.ion.cyb.service.CyberAlertManageVO; import itn.com.uss.ion.cyb.service.CyberAlertManageVO;
@ -262,6 +265,13 @@ public class MainController {
@Resource(name = "mjonCandidateService") @Resource(name = "mjonCandidateService")
private MjonCandidateService mjonCandidateService; private MjonCandidateService mjonCandidateService;
@Resource(name = "subMainZoneManageService")
private SubMainZoneManageService subMainZoneManageService;
/** 메인팝업 service */
@Resource(name = "mainPopupManageService")
private MainPopupManageService mainPopupManageService;
@Value("#{globalSettings['Globals.email.host']}") @Value("#{globalSettings['Globals.email.host']}")
@ -689,6 +699,22 @@ public class MainController {
} }
{//하단 서브메인배너 롤링 이미지 불러오기
List<MainzoneVO> resultSubMainzoneList = subMainZoneManageService.selectSubMainzoneListRolling();
model.addAttribute("subMainzoneList", resultSubMainzoneList);
}
{//팝업 롤링 이미지 불러오기
List<MainPopupVO> resultMainPopupList = mainPopupManageService.selectMainPopupListRolling();
model.addAttribute("mainPopupList", resultMainPopupList);
System.out.println("===================mainPopupList");
}
return "web/main/mainPage"; return "web/main/mainPage";
} }

View File

@ -2002,6 +2002,41 @@
<property name="fillChar" value="0" /> <property name="fillChar" value="0" />
</bean> </bean>
<!-- 알림이미지 ID Generation Strategy Config -->
<bean name="egovSubMainZoneIdGnrService"
class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl"
destroy-method="destroy">
<property name="dataSource" ref="dataSource" />
<property name="strategy" ref="subMainZoneStrategy" />
<property name="blockSize" value="10"/>
<property name="table" value="IDS"/>
<property name="tableName" value="MAZ_S_ID"/>
</bean>
<!-- 메인상단 이미지 ID Generation Strategy Config -->
<bean name="subMainZoneStrategy"
class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
<property name="prefix" value="MAZS_" />
<property name="cipers" value="12" />
<property name="fillChar" value="0" />
</bean>
<bean name="egovMainPopupIdGnrService"
class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl"
destroy-method="destroy">
<property name="dataSource" ref="dataSource" />
<property name="strategy" ref="mainPopupIdStrategy" />
<property name="blockSize" value="10"/>
<property name="table" value="IDS"/>
<property name="tableName" value="MPP_ID"/>
</bean>
<!-- 메인상단 이미지 ID Generation Strategy Config -->
<bean name="mainPopupIdStrategy"
class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
<property name="prefix" value="MPP_" />
<property name="cipers" value="12" />
<property name="fillChar" value="0" />
</bean>
<!-- 컨텐츠 관리 ID Generation Strategy Config --> <!-- 컨텐츠 관리 ID Generation Strategy Config -->
<bean name="egovCntManageIdGnrService" <bean name="egovCntManageIdGnrService"

View File

@ -4,4 +4,6 @@
<sqlMapConfig> <sqlMapConfig>
<sqlMap resource="egovframework/sqlmap/com/uss/ion/bnr/EgovBanner_SQL_Mysql.xml"/><!-- 배너 추가 --> <sqlMap resource="egovframework/sqlmap/com/uss/ion/bnr/EgovBanner_SQL_Mysql.xml"/><!-- 배너 추가 -->
<sqlMap resource="egovframework/sqlmap/let/uss/ion/bnr/SubMainZoneManage_SQL_Mysql.xml"/><!-- 서브팝업관리 -->
<sqlMap resource="egovframework/sqlmap/let/uss/ion/bnr/MainPopupManage_SQL_Mysql.xml"/><!-- 서브팝업관리 -->
</sqlMapConfig> </sqlMapConfig>

View File

@ -0,0 +1,231 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<!--
수정일 수정자 수정내용
=========== ======== =================================================
2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
-->
<sqlMap namespace="UnityLink">
<typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>
<typeAlias alias="comDefaultVO" type="itn.com.cmm.ComDefaultVO"/>
<typeAlias alias="PopupManageVO" type="itn.com.uss.ion.pwm.service.PopupManageVO" />
<typeAlias alias="popupzoneVO" type="itn.com.uss.ion.pwm.service.PopupzoneVO"/>
<typeAlias alias="mainPopupVO" type="itn.com.uss.ion.bnr.pop.service.MainPopupVO"/>
<typeAlias alias="mainPopupLinkVO" type="itn.com.uss.ion.bnr.pop.service.MainPopupLinkVO"/>
<resultMap id="MainPopupLinkResultMap" class="itn.com.uss.ion.bnr.pop.service.MainPopupLinkVO">
<result property="popId" column="POP_ID"></result>
<result property="mlink" column="MLINK"></result>
<result property="coords" column="COORDS"></result>
<result property="popLinkId" column="POP_LINK_ID"></result>
</resultMap>
<resultMap id="MainPopupResultMap" class="itn.com.uss.ion.bnr.pop.service.MainPopupVO">
<result property="popId" column="POP_ID" ></result>
<result property="content" column="CONTENT"></result>
<result property="regdt" column="REGDT"></result>
<result property="del" column="DEL"></result>
<result property="sort" column="SORT"></result>
<result property="mainzoneImage" column="MAINZONE_IMAGE"></result>
<result property="mainzoneImageFile" column="MAINZONE_IMAGE_FILE"></result>
<result property="popNm" column="POP_NM"></result>
<result property="useYn" column="USE_YN"></result>
<result property="moddt" column="MODDT"></result>
<result property="registerId" column="REGISTERID"></result>
<result property="deviceType" column="DEVICETYPE"></result>
<result property="ntceBgnde" column="NTCE_BGNDE"></result>
<result property="ntceEndde" column="NTCE_ENDDE"></result>
<result property="mainPopupLinkList" column="POP_ID" select="mainPopup.selectMainPopupVOLink" />
</resultMap>
<!-- 매인이미지 관리자 리스트 -->
<select id="mainPopup.selectMainPopupList" parameterClass="mainPopupVO" resultClass="egovMap">
/* mainPopup.selectMainPopupList */
<![CDATA[
SELECT
POP_ID,
CONTENT AS IMG_ALT,
CASE WHEN
DATE(SUBDATE(NOW(), INTERVAL 7 DAY)) < DATE(REGDT)
THEN 'Y'
ELSE 'N'
END AS NEW_FLAG,
DATE_FORMAT(REGDT, '%Y-%m-%d') REGDT,
MAINZONE_IMAGE,
MAINZONE_IMAGE_FILE ,
SORT,
POP_NM,
USE_YN,
(SELECT USER_NM FROM LETTNEMPLYRINFO WHERE ESNTL_ID = REGISTER_ID) REGISTER_ID ,
DEVICETYPE,
STR_TO_DATE(NTCE_BGNDE,'%Y%m%d') AS ntceBgnde,
STR_TO_DATE(NTCE_ENDDE,'%Y%m%d') AS ntceEndde
FROM MAIN_POPUP
WHERE 1=1
]]>
<isEqual property="useYn" compareValue="Y">
AND USE_YN = 'Y'
</isEqual>
<isNotEmpty property="searchKeyword">
<isEqual property="searchCondition" compareValue="">
AND ( POP_NM LIKE CONCAT ('%', #searchKeyword#,'%')
OR CONTENT LIKE CONCAT ('%', #searchKeyword#,'%')
)
</isEqual>
<isEqual property="searchCondition" compareValue="1">
AND POP_NM LIKE CONCAT ('%', #searchKeyword#,'%')
</isEqual>
<isEqual property="searchCondition" compareValue="2">
AND CONTENT LIKE CONCAT ('%', #searchKeyword#,'%')
</isEqual>
</isNotEmpty>
<isNotEmpty property="deviceType">
<isEqual property="deviceType" compareValue="P">
AND ( DEVICETYPE IS NULL OR DEVICETYPE = #deviceType# )
</isEqual>
<isEqual property="deviceType" compareValue="M">
AND DEVICETYPE = #deviceType#
</isEqual>
</isNotEmpty>
ORDER BY SORT
LIMIT #recordCountPerPage# OFFSET #firstIndex#
</select>
<select id="mainPopup.selectMainPopupCount" resultClass="int">
/* mainPopup.selectMainPopupCount */
SELECT
COUNT(*) totcnt
FROM MAIN_POPUP
WHERE 1=1
<isNotEmpty property="searchKeyword">
<isEqual property="searchCondition" compareValue="">
AND ( POP_NM LIKE CONCAT ('%', #searchKeyword#,'%')
OR CONTENT LIKE CONCAT ('%', #searchKeyword#,'%')
)
</isEqual>
<isEqual property="searchCondition" compareValue="1">
AND POP_NM LIKE CONCAT ('%', #searchKeyword#,'%')
</isEqual>
<isEqual property="searchCondition" compareValue="2">
AND CONTENT LIKE CONCAT ('%', #searchKeyword#,'%')
</isEqual>
</isNotEmpty>
</select>
<select id="mainPopup.selectMainPopupVO" parameterClass="String" resultMap="MainPopupResultMap">
/* mainPopup.selectMainPopupVO */
SELECT
MP.POP_ID,
MP.CONTENT,
MP.REGDT,
MP.DEL,
MP.SORT,
MP.MAINZONE_IMAGE,
MP.MAINZONE_IMAGE_FILE,
MP.POP_NM,
MP.USE_YN,
DATE_FORMAT(MP.MODDT, '%Y-%m-%d %T') MODDT,
(SELECT USER_NM FROM LETTNEMPLYRINFO WHERE ESNTL_ID = MP.REGISTER_ID) AS REGISTERID,
MP.DEVICETYPE,
MP.NTCE_BGNDE,
MP.NTCE_ENDDE
FROM MAIN_POPUP MP
WHERE MP.POP_ID = #popId#
</select>
<select id="mainPopup.selectMainPopupVOLink" parameterClass="String" resultMap="MainPopupLinkResultMap">
/* mainPopup.selectMainPopupVOLink */
SELECT
POP_LINK_ID,
POP_ID,
MLINK,
COORDS
FROM MAIN_POPUP_LINK
WHERE POP_ID = #popId#
</select>
<select id="mainPopup.selectMainPopupListRolling" resultMap="MainPopupResultMap">
/* mainPopup.selectMainPopupListRolling */
SELECT
MP.POP_ID,
MP.CONTENT,
MP.REGDT,
MP.DEL,
MP.SORT,
MP.MAINZONE_IMAGE,
MP.MAINZONE_IMAGE_FILE,
MP.POP_NM,
MP.USE_YN,
DATE_FORMAT(MP.MODDT, '%Y-%m-%d %T') MODDT,
(SELECT USER_NM FROM LETTNEMPLYRINFO WHERE ESNTL_ID = MP.REGISTER_ID) AS REGISTERID,
MP.DEVICETYPE,
MP.NTCE_BGNDE,
MP.NTCE_ENDDE
FROM MAIN_POPUP MP
WHERE MP.NTCE_BGNDE IS NOT NULL
AND MP.NTCE_ENDDE IS NOT NULL
<![CDATA[
AND DATE_FORMAT(SYSDATE(),'%Y%m%d%H%i') >= MP.NTCE_BGNDE
AND DATE_FORMAT(SYSDATE(),'%Y%m%d%H%i') <= MP.NTCE_ENDDE
]]>
AND MP.USE_YN = 'Y'
ORDER BY MP.SORT
</select>
<delete id="mainPopup.deleteMainPopup" parameterClass="String">
DELETE FROM MAIN_POPUP WHERE POP_ID=#popId#
</delete>
<delete id="mainPopup.deleteMainPopupLinkInfo" parameterClass="mainPopupLinkVO">
/* mainPopup.deleteMainPopupLinkInfo */
DELETE FROM MAIN_POPUP_LINK
WHERE
POP_ID=#popId#
AND
POP_LINK_ID = #popLinkId#
</delete>
<update id="mainPopup.resetMainPopupSort" parameterClass="mainPopupVO">
/*mainPopup.resetMainPopupSort*/
UPDATE MAIN_POPUP A ,
(SELECT ROW_NUMBER() OVER(ORDER BY SORT
<isEqual property="sortOver" compareValue="A">
, MODDT ASC
</isEqual>
<isEqual property="sortOver" compareValue="D">
, MODDT DESC
</isEqual>
) AS SORT1 , POP_ID FROM MAIN_POPUP
WHERE 1=1
ORDER BY SORT1
) B
SET A.SORT = B.SORT1
WHERE A.POP_ID = B.POP_ID
</update>
</sqlMap>

View File

@ -0,0 +1,205 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<!--
수정일 수정자 수정내용
=========== ======== =================================================
2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
-->
<sqlMap namespace="UnityLink">
<typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>
<typeAlias alias="comDefaultVO" type="itn.com.cmm.ComDefaultVO"/>
<typeAlias alias="PopupManageVO" type="itn.com.uss.ion.pwm.service.PopupManageVO" />
<typeAlias alias="popupzoneVO" type="itn.com.uss.ion.pwm.service.PopupzoneVO"/>
<typeAlias alias="mainzoneVO" type="itn.com.uss.ion.pwm.service.MainzoneVO"/>
<typeAlias alias="socialVO" type="itn.com.uss.ion.pwm.service.SocialVO"/>
<typeAlias alias="sortVO" type="itn.com.uss.ion.pwm.service.SortVO"/>
<!-- ::ResultMap 선언 -->
<resultMap id="PopupManageVOs" class="itn.com.uss.ion.pwm.service.PopupManageVO">
<result property="popupId" column="POPUP_ID" columnIndex="1"/>
<result property="popupTitleNm" column="POPUP_SJ_NM" columnIndex="2"/>
<result property="fileUrl" column="FILE_URL" columnIndex="3"/>
<result property="popupHlc" column="POPUP_VRTICL_LC" columnIndex="4"/>
<result property="popupWlc" column="POPUP_WIDTH_LC" columnIndex="5"/>
<result property="popupHSize" column="POPUP_VRTICL_SIZE" columnIndex="6"/>
<result property="popupWSize" column="POPUP_WIDTH_SIZE" columnIndex="7"/>
<result property="ntceBgnde" column="NTCE_BGNDE" columnIndex="8"/>
<result property="ntceEndde" column="NTCE_ENDDE" columnIndex="9"/>
<result property="stopVewAt" column="STOPVEW_SETUP_AT" columnIndex="10"/>
<result property="ntceAt" column="NTCE_AT" columnIndex="11"/>
<result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM" columnIndex="12"/>
<result property="frstRegisterId" column="FRST_REGISTER_ID" columnIndex="13"/>
<result property="lastUpdusrPnttm" column="LAST_UPDT_PNTTM" columnIndex="14"/>
<result property="lastUpdusrId" column="LAST_UPDUSR_ID" columnIndex="15"/>
<result property="popupType" column="POPUP_TYPE" columnIndex="16"/>
<result property="scrollType" column="SCROLL_TYPE" columnIndex="17"/>
<result property="nttCn" column="NTT_CN" columnIndex="18"/>
<result property="sortNum" column="SORT_NUM" columnIndex="19"/>
</resultMap>
<!-- 매인이미지 관리자 리스트 -->
<select id="subMainzoneManage.selectSubMainzoneList" parameterClass="mainzoneVO" resultClass="egovMap">
/* subMainzoneManage.selectSubMainzoneList */
<![CDATA[
SELECT
MAZ_ID,
CONCAT("/UPLOADROOT/POPUPZONE/",UPFILE ) AS IMG,
CONTENT AS IMG_ALT,
MLINK,
ISTARGET,
CASE WHEN
DATE(SUBDATE(NOW(), INTERVAL 7 DAY)) < DATE(REGDT)
THEN 'Y'
ELSE 'N'
END AS NEW_FLAG,
DATE_FORMAT(REGDT, '%Y-%m-%d') REGDT,
MAINZONE_IMAGE,
MAINZONE_IMAGE_FILE ,
SORT,
MAZ_NM,
USE_YN,
(SELECT USER_NM FROM LETTNEMPLYRINFO WHERE ESNTL_ID = REGISTER_ID) REGISTER_ID ,
DEVICETYPE,
STR_TO_DATE(NTCE_BGNDE,'%Y%m%d') AS ntceBgnde,
STR_TO_DATE(NTCE_ENDDE,'%Y%m%d') AS ntceEndde
FROM SUB_MAINZONE MB
WHERE 1=1
]]>
<isEqual property="useYn" compareValue="Y">
AND USE_YN = 'Y'
</isEqual>
<isNotEmpty property="searchKeyword">
<isEqual property="searchCondition" compareValue="">
AND ( MAZ_NM LIKE CONCAT ('%', #searchKeyword#,'%')
OR CONTENT LIKE CONCAT ('%', #searchKeyword#,'%')
)
</isEqual>
<isEqual property="searchCondition" compareValue="1">
AND MAZ_NM LIKE CONCAT ('%', #searchKeyword#,'%')
</isEqual>
<isEqual property="searchCondition" compareValue="2">
AND CONTENT LIKE CONCAT ('%', #searchKeyword#,'%')
</isEqual>
</isNotEmpty>
<isNotEmpty property="searchConditionSite">
AND SITE_ID = #searchConditionSite#
</isNotEmpty>
<isNotEmpty property="deviceType">
<isEqual property="deviceType" compareValue="P">
AND ( DEVICETYPE IS NULL OR DEVICETYPE = #deviceType# )
</isEqual>
<isEqual property="deviceType" compareValue="M">
AND DEVICETYPE = #deviceType#
</isEqual>
</isNotEmpty>
ORDER BY SORT
LIMIT #recordCountPerPage# OFFSET #firstIndex#
</select>
<select id="subMainzoneManage.selectSubMainzoneCount" resultClass="int">
/* subMainzoneManage.selectSubMainzoneCount */
SELECT
COUNT(*) totcnt
FROM SUB_MAINZONE
WHERE 1=1
<isNotEmpty property="searchKeyword">
<isEqual property="searchCondition" compareValue="">
AND ( MAZ_NM LIKE CONCAT ('%', #searchKeyword#,'%')
OR CONTENT LIKE CONCAT ('%', #searchKeyword#,'%')
)
</isEqual>
<isEqual property="searchCondition" compareValue="1">
AND MAZ_NM LIKE CONCAT ('%', #searchKeyword#,'%')
</isEqual>
<isEqual property="searchCondition" compareValue="2">
AND CONTENT LIKE CONCAT ('%', #searchKeyword#,'%')
</isEqual>
</isNotEmpty>
<isNotEmpty property="searchConditionSite">
AND SITE_ID = #searchConditionSite#
</isNotEmpty>
</select>
<select id="subMainzoneManage.selectSubMainzoneVO" parameterClass="String" resultClass="mainzoneVO">
/* subMainzoneManage.selectSubMainzoneVO */
SELECT
MAZ_ID AS MAZID,
UPFILE,
CONCAT("/UPLOADROOT/POPUPZONE/",UPFILE ) AS UPFILEURL,
CONTENT,
MLINK,
ISTARGET,
REGDT,
DEL,
SORT,
MAINZONE_IMAGE AS MAINZONEIMAGE ,
MAINZONE_IMAGE_FILE AS MAINZONEIMAGEFILE,
MAZ_NM AS MAZNM,
USE_YN AS USEYN,
DATE_FORMAT(MODDT, '%Y-%m-%d %T') MODDT ,
(SELECT USER_NM FROM LETTNEMPLYRINFO WHERE ESNTL_ID = REGISTER_ID) REGISTERID,
DEVICETYPE AS deviceType,
NTCE_BGNDE AS ntceBgnde,
NTCE_ENDDE AS ntceEndde,
TOP_TXT AS topTxt,
LOW_TXT AS lowTxt
FROM SUB_MAINZONE
WHERE MAZ_ID=#mazId#
</select>
<select id="subMainzoneManage.selectSubMainzoneListRolling" resultClass="mainzoneVO">
/* subMainzoneManage.selectSubMainzoneListRolling */
SELECT MZ.MAZ_ID AS mazId,
MZ.CONTENT AS content,
MZ.SORT AS sort,
MZ.MAINZONE_IMAGE_FILE AS mainzoneImageFile,
MZ.MAZ_NM AS mazNm,
MZ.MLINK AS mlink,
MZ.TOP_TXT AS topTxt,
MZ.LOW_TXT AS lowTxt
FROM SUB_MAINZONE MZ
WHERE MZ.NTCE_BGNDE IS NOT NULL
AND MZ.NTCE_ENDDE IS NOT NULL
<![CDATA[
AND DATE_FORMAT(SYSDATE(),'%Y%m%d%H%i') >= MZ.NTCE_BGNDE
AND DATE_FORMAT(SYSDATE(),'%Y%m%d%H%i') <= MZ.NTCE_ENDDE
]]>
AND MZ.USE_YN = 'Y'
ORDER BY MZ.SORT
</select>
<delete id="subMainzoneManage.deleteSubMainzone" parameterClass="String">
DELETE FROM SUB_MAINZONE WHERE MAZ_ID=#mazId#
</delete>
<update id="subMainzoneManage.resetSubMainVOSort" parameterClass="mainzoneVO">
UPDATE SUB_MAINZONE A ,
(SELECT ROW_NUMBER() OVER(ORDER BY SORT
<isEqual property="sortOver" compareValue="A">
, MODDT ASC
</isEqual>
<isEqual property="sortOver" compareValue="D">
, MODDT DESC
</isEqual>
) AS SORT1 , MAZ_ID FROM SUB_MAINZONE
WHERE 1=1
ORDER BY SORT1
) B
SET A.SORT = B.SORT1
WHERE A.MAZ_ID = B.MAZ_ID
</update>
</sqlMap>

View File

@ -12,6 +12,10 @@
<typeAlias alias="PopupManageVO" type="itn.com.uss.ion.pwm.service.PopupManageVO" /> <typeAlias alias="PopupManageVO" type="itn.com.uss.ion.pwm.service.PopupManageVO" />
<typeAlias alias="popupzoneVO" type="itn.com.uss.ion.pwm.service.PopupzoneVO"/> <typeAlias alias="popupzoneVO" type="itn.com.uss.ion.pwm.service.PopupzoneVO"/>
<typeAlias alias="mainzoneVO" type="itn.com.uss.ion.pwm.service.MainzoneVO"/> <typeAlias alias="mainzoneVO" type="itn.com.uss.ion.pwm.service.MainzoneVO"/>
<typeAlias alias="mainPopupVO" type="itn.com.uss.ion.bnr.pop.service.MainPopupVO"/>
<typeAlias alias="mainPopupLinkVO" type="itn.com.uss.ion.bnr.pop.service.MainPopupLinkVO"/>
<typeAlias alias="socialVO" type="itn.com.uss.ion.pwm.service.SocialVO"/> <typeAlias alias="socialVO" type="itn.com.uss.ion.pwm.service.SocialVO"/>
<typeAlias alias="sortVO" type="itn.com.uss.ion.pwm.service.SortVO"/> <typeAlias alias="sortVO" type="itn.com.uss.ion.pwm.service.SortVO"/>
<!-- ::ResultMap 선언 --> <!-- ::ResultMap 선언 -->
@ -605,6 +609,56 @@
) )
</insert> </insert>
<insert id="MainzoneManage.insertSubMainzone" parameterClass="mainzoneVO">
INSERT INTO SUB_MAINZONE (
MAZ_ID,
UPFILE,
CONTENT,
MLINK,
ISTARGET,
REGDT,
MODDT,
DEL,
SORT,
MAINZONE_IMAGE,
MAINZONE_IMAGE_FILE,
MAZ_NM,
USE_YN,
<isNotEmpty property="deviceType">
DEVICETYPE,
</isNotEmpty>
REGISTER_ID,
NTCE_BGNDE,
NTCE_ENDDE,
TOP_TXT,
LOW_TXT
) VALUES (
#mazId#,
#upfile#,
#content#,
#mlink#,
#istarget#,
now(),
now(),
#del#,
#sort#,
#mainzoneImage#,
#mainzoneImageFile#,
#mazNm#,
#useYn#,
<isNotEmpty property="deviceType">
#deviceType#,
</isNotEmpty>
#registerId#,
#ntceBgnde#,
#ntceEndde#,
#topTxt#,
#lowTxt#
)
</insert>
<update id="MainzoneManage.resetMainSort" parameterClass="mainzoneVO"> <update id="MainzoneManage.resetMainSort" parameterClass="mainzoneVO">
UPDATE MAINZONE A , (SELECT ROW_NUMBER() OVER(ORDER BY SORT) AS SORT1 , MAZ_ID FROM MAINZONE UPDATE MAINZONE A , (SELECT ROW_NUMBER() OVER(ORDER BY SORT) AS SORT1 , MAZ_ID FROM MAINZONE
WHERE 1=1 WHERE 1=1
@ -690,6 +744,28 @@
WHERE MAZ_ID=#mazId# WHERE MAZ_ID=#mazId#
</update> </update>
<update id="MainzoneManage.updateSubMainzone" parameterClass="mainzoneVO">
UPDATE SUB_MAINZONE SET
UPFILE=#upfile#,
CONTENT=#content#,
MLINK=#mlink#,
ISTARGET=#istarget#,
SORT=#sort#,
MAINZONE_IMAGE = #mainzoneImage#,
MAINZONE_IMAGE_FILE = #mainzoneImageFile#,
USE_YN = #useYn#,
MAZ_NM = #mazNm# ,
<isNotEmpty property="deviceType">
DEVICETYPE = #deviceType# ,
</isNotEmpty>
NTCE_BGNDE = #ntceBgnde#,
NTCE_ENDDE = #ntceEndde#,
TOP_TXT = #topTxt#,
LOW_TXT = #lowTxt#,
MODDT = now()
WHERE MAZ_ID=#mazId#
</update>
<select id="MainzoneManage.selectMainzoneCount" resultClass="int"> <select id="MainzoneManage.selectMainzoneCount" resultClass="int">
SELECT SELECT
COUNT(*) totcnt COUNT(*) totcnt
@ -750,6 +826,44 @@
WHERE A.MAZ_ID = B.MAZ_ID WHERE A.MAZ_ID = B.MAZ_ID
</update> </update>
<update id="MainzoneManage.resetSubMainVOSort" parameterClass="mainzoneVO">
UPDATE SUB_MAINZONE A ,
(SELECT ROW_NUMBER() OVER(ORDER BY SORT
<isEqual property="sortOver" compareValue="A">
, MODDT ASC
</isEqual>
<isEqual property="sortOver" compareValue="D">
, MODDT DESC
</isEqual>
) AS SORT1 , MAZ_ID FROM SUB_MAINZONE
WHERE 1=1
ORDER BY SORT1
) B
SET A.SORT = B.SORT1
WHERE A.MAZ_ID = B.MAZ_ID
</update>
<update id="MainzoneManage.resetMainPopup" parameterClass="mainPopupVO">
UPDATE MAIN_POPUP A ,
(
SELECT ROW_NUMBER() OVER
(
ORDER BY SORT
<isEqual property="sortOver" compareValue="A">
, MODDT ASC
</isEqual>
<isEqual property="sortOver" compareValue="D">
, MODDT DESC
</isEqual>
) AS SORT1 , POP_ID
FROM MAIN_POPUP
WHERE 1=1
ORDER BY SORT1
) B
SET A.SORT = B.SORT1
WHERE A.POP_ID = B.POP_ID
</update>
<!-- 소설 관리자 리스트 --> <!-- 소설 관리자 리스트 -->
<select id="SocialManage.selectSocialList" parameterClass="socialVO" resultClass="socialVO"> <select id="SocialManage.selectSocialList" parameterClass="socialVO" resultClass="socialVO">
@ -914,7 +1028,8 @@
MZ.CONTENT AS content, MZ.CONTENT AS content,
MZ.SORT AS sort, MZ.SORT AS sort,
MZ.MAINZONE_IMAGE_FILE AS mainzoneImageFile, MZ.MAINZONE_IMAGE_FILE AS mainzoneImageFile,
MZ.MAZ_NM AS mazNm MZ.MAZ_NM AS mazNm,
MZ.MLINK AS mlink
FROM MAINZONE MZ FROM MAINZONE MZ
WHERE MZ.NTCE_BGNDE IS NOT NULL WHERE MZ.NTCE_BGNDE IS NOT NULL
AND MZ.NTCE_ENDDE IS NOT NULL AND MZ.NTCE_ENDDE IS NOT NULL
@ -926,7 +1041,95 @@
AND MZ.USE_YN = 'Y' AND MZ.USE_YN = 'Y'
ORDER BY MZ.SORT ORDER BY MZ.SORT
</select> </select>
<insert id="MainzoneManage.insertMainPopup" parameterClass="mainPopupVO">
INSERT INTO MAIN_POPUP (
POP_ID
, CONTENT
, SORT
, DEL
, MAINZONE_IMAGE_FILE
, MAINZONE_IMAGE
, REGDT
, MODDT
, POP_NM
, USE_YN
, REGISTER_ID
, DEVICETYPE
, NTCE_BGNDE
, NTCE_ENDDE
) VALUES (
#popId#
, #content#
, #sort#
, #del#
, #mainzoneImageFile#
, #mainzoneImage#
, now()
, now()
, #popNm#
, #useYn#
, #registerId#
, #devicetype#
, #ntceBgnde#
, #ntceEndde#
)
</insert>
<insert id="MainzoneManage.insertMainPopupLinkInfo" parameterClass="java.util.List">
INSERT INTO MAIN_POPUP_LINK (
POP_ID
, MLINK
, COORDS
)
VALUES
<iterate conjunction=",">
(
#[].popId#
, #[].mlink#
, #[].coords#
)
</iterate>
</insert>
<update id="MainzoneManage.updateMainPopup" parameterClass="mainPopupVO">
UPDATE MAIN_POPUP
SET
CONTENT = #content#,
SORT = #sort#,
DEL = #del#,
MAINZONE_IMAGE_FILE = #mainzoneImageFile#,
MAINZONE_IMAGE = #mainzoneImage#,
MODDT = now(),
POP_NM = #popNm#,
USE_YN = #useYn#,
<isNotEmpty property="deviceType">
DEVICETYPE = #deviceType# ,
</isNotEmpty>
NTCE_BGNDE = #ntceBgnde#,
NTCE_ENDDE = #ntceEndde#
WHERE POP_ID = #popId#
</update>
<update id="MainzoneManage.updateMainPopupLinkInfo" parameterClass="mainPopupLinkVO">
UPDATE MAIN_POPUP_LINK
SET
MLINK = #mlink#
, COORDS = #coords#
WHERE POP_ID = #popId#
</update>
<delete id="MainzoneManage.deleteMainPopupLinkInfo" parameterClass="String">
DELETE FROM MAIN_POPUP_LINK
WHERE POP_ID = #popId#
</delete>
</sqlMap> </sqlMap>

View File

@ -0,0 +1,236 @@
<%--
Class Name : EgovPopupList.jsp
Description : 팝업창관리 목록 페이지
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2009.09.16 장동한 최초 생성
author : 공통서비스 개발팀 장동한
since : 2009.09.16
Copyright (C) 2009 by MOPAS All right reserved.
--%>
<%@ 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="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<title>메인이미지 관리</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javaScript" language="javascript">
$(document).ready(function(){
$(".img_cont").click(function(e){
clickEvent = true;
});
$(".check").click(function(e){
e.stopPropagation();
});
});
/* 메인창 수정 화면*/
function fn_mainzone_view(id, pageType){
document.modiForm.selectedId.value = id;
document.modiForm.pageType.value = "Modify";
document.modiForm.action = "<c:url value='/uss/ion/bnr/pop/mainPopupModify.do'/>";
document.modiForm.submit();
}
/* 메인창 등록화면*/
function fn_mainzone_insert_view(){
document.modiForm.pageType.value = "Insert";
document.modiForm.action = "<c:url value='/uss/ion/bnr/pop/mainPopupModify.do'/>";
document.modiForm.submit();
}
function doDep3(event){
event.preventDefault();
}
function linkPage(pageNo){
<c:if test="${!empty loginId}">
if(""!= document.listForm.searchKeyword.value){
updateRecentSearch();//최근검색어 등록
}
</c:if>
var listForm = document.listForm ;
listForm.pageIndex.value = pageNo ;
listForm.searchCondition.value = $('#searchCondition').val();
listForm.submit();
}
function fnCheckAll() {
var checkField = document.listForm.del;
if(document.listForm.checkAll.checked) {
if(checkField) {
if(checkField.length > 1) {
for(var i=0; i < checkField.length; i++) {
checkField[i].checked = true;
}
} else {
checkField.checked = true;
}
}
} else {
if(checkField) {
if(checkField.length > 1) {
for(var j=0; j < checkField.length; j++) {
checkField[j].checked = false;
}
} else {
checkField.checked = false;
}
}
}
}
/* 체크된 메인배너 목록 삭제 */
function fn_mainzone_contest_delete(){
if($("input[name=del]:checked").length == 0){
alert("선택된 항목이 없습니다.");
return;
}
if (confirm("해당 메인이미지 삭제하시겠습니까?")){
frm = document.listForm;
frm.action = "<c:url value='/uss/ion/bnr/pop/mainPopupListDelete.do' />";
frm.submit();
}
}
/* 테마별 색상맞추기 */
$(window).load(function() {
$('table.bbs01_list td.subject a').hover(
function () {
$(this).css("color","#d10000");
},
function () {
$(this).css("color","#333333");
}
);
});
</script>
</head>
<body>
<form name="listForm" action="<c:url value='/uss/ion/bnr/pop/mainPopupList.do'/>" method="post">
<input name="pageIndex" type="hidden" value="<c:out value='${mainPopupVO.pageIndex}'/>"/>
<input type="hidden" name="selectedId" />
<input type="hidden" name="pageType" />
<div class="contWrap">
<div class="pageTitle">
<div class="pageIcon"><img src="/pb/img/pageTitIcon4.png" alt=""></div>
<h2 class="titType1 c_222222 fwBold">팝업 관리</h2>
<p class="tType6 c_999999">사용자 메인 팝업에 적용되는 이미지를 등록, 수정, 삭제할 수 있습니다.</p>
</div>
<div class="pageCont">
<div class="listSerch">
<c:if test="${siteId eq 'super'}">
<select name="searchConditionSite" id="searchConditionSite" title="사이트검색">
<option value="" <c:if test="${empty userSearchVO.searchConditionSite }">selected="selected"</c:if> >전체 사이트</option>
<c:forEach var="result" items="${siteManageList}" varStatus="status">
<option value="${result.siteId}" <c:if test="${result.siteId eq mainPopupVO.searchConditionSite }">selected="selected"</c:if> >${result.siteNm}</option>
</c:forEach>
</select>
</c:if>
<select name="searchCondition" id="searchCondition" class="select" title="검색조건선택">
<option value=''>전체</option>
<option value='1' <c:if test="${mainPopupVO.searchCondition == '1'}">selected</c:if>>제목</option>
<option value='2' <c:if test="${mainPopupVO.searchCondition == '2'}">selected</c:if>>대체텍스트</option>
</select>
<input id="searchKeyword" name="searchKeyword" class="recentSearch" type="text" value="<c:out value='${mainPopupVO.searchKeyword}'/>" size="40" title="검색" maxlength="100"/>
<input type="button" class="btnType1" value="검색" onclick="linkPage(1); return false;">
</div>
<div class="listTop">
<p class="tType5">총 <span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${paginationInfo.totalRecordCount}" pattern="#,###" /></span>건</p>
<div class="rightWrap">
<input type="button" class="printBtn" >
<select name="pageUnit" id="pageUnit" class="select" title="검색조건선택" onchange="linkPage(1);">
<option value='8' <c:if test="${mainPopupVO.pageUnit == '8' or searchVO.pageUnit == ''}">selected</c:if>>8개씩 보기</option>
<option value='16' <c:if test="${mainPopupVO.pageUnit == '16'}">selected</c:if>>16개씩 보기</option>
<option value='24' <c:if test="${mainPopupVO.pageUnit == '24'}">selected</c:if>>24개씩 보기</option>
</select>
</div>
</div>
<div class="galleryListWrap">
<ul class="inline">
<c:forEach var="result" items="${mainPopupList}" varStatus="status">
<li onclick="javascript:fn_mainzone_view('${result.popId}'); return false;">
<div class="check"><input type="checkbox" name="del" id="check_box${status.index}" value="${result.popId}"></div>
<%-- <div class="img_cont_check"><input type="checkbox" name="del" id="img_cont_check_box${status.index}" class="img_cont_check_box" value="${result.mazId}"><label for="img_cont_check_box${status.index}"></label></div> --%>
<ul class="listCategory">
<li class="useCg">
<c:if test="${result.useYn eq 'Y'}">
사용
</c:if>
<c:if test="${result.useYn ne 'Y'}">
미사용
</c:if>
</li>
</ul>
<div class="imgBox"><img onerror="this.src='/pb/img/noImg.png'" src="<c:url value='/cmm/fms/getImage.do'/>?atchFileId=<c:out value="${result.mainzoneImageFile}"/>" alt=""></div>
<%-- <div class="imgBox"><img onerror="this.src='/pb/img/noImg.png'" src="<c:url value='/cmm/fms/getImage.do'/>?atchFileId=<c:out value="${result.mainzoneImageFile}"/>" alt=""></div> --%>
<div class="listInfo">
<h3>${result.mazNm}</h3>
<table>
<tr>
<td colspan="2">작성자 : ${result.registerId}</td>
</tr>
<tr>
<td>노출순서 : ${result.sort}</td>
<td class="right">${result.ntceBgnde} ~ ${result.ntceEndde}</td>
</tr>
</table>
</div>
</li>
</c:forEach>
</ul>
<c:if test="${empty mainPopupList}">
<div class="board1_btn">
<ul style="text-align: center;"><spring:message code="common.nodata.msg" /></ul>
</div>
</c:if>
</div>
<div class="btnWrap">
<input type="button" class="btnType2" value="삭제" onclick="fn_mainzone_contest_delete(); return false;">
<input type="button" class="btnType1" value="등록" onclick="fn_mainzone_insert_view(); return false;">
</div>
<!-- 페이지 네비게이션 시작 -->
<c:if test="${!empty mainPopupList}">
<div class="page">
<ul class="inline">
<ui:pagination paginationInfo = "${paginationInfo}" type="image" jsFunction="linkPage" />
</ul>
</div>
</c:if>
<!-- //페이지 네비게이션 끝 -->
</div>
</div>
</form>
<form name="modiForm" method="get" action="<c:url value='/uss/ion/bnr/pop/mainPopupModify.do'/>" >
<input name="selectedId" type="hidden" />
<input name="pageType" type="hidden" />
</form>
<form name="searchForm" method="get" action="<c:url value='/uss/ion/bnr/pop/mainPopupList.do'/>">
<input name="pageIndex" type="hidden" value="1" />
<input name="searchCondition" type="hidden" />
<input name="searchKeyword" type="hidden" />
<input name="searchConditionSite" type="hidden" />
</form>
</body>
</html>

View File

@ -0,0 +1,622 @@
<%--
Class Name : EgovPopupList.jsp
Description : 팝업창관리 목록 페이지
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2009.09.16 장동한 최초 생성
author : 공통서비스 개발팀 장동한
since : 2009.09.16
Copyright (C) 2009 by MOPAS All right reserved.
--%>
<%@ 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"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<title>팝업창관리 관리</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javascript" src="<c:url value='/js/EgovCalPopup.js' />"></script>
<script type="text/javascript" src="<c:url value='/js/EgovMultiFile.js'/>"></script>
<script type="text/javaScript" language="javascript">
$( document ).ready(function(){
makeDate('ntceBgndeYYYMMDD');
makeTomorrow('ntceEnddeYYYMMDD');
// class="mlink"인 모든 input 요소에 대해 이벤트 리스너 추가
document.getElementById('linkTable').addEventListener('paste', function(event) {
if (event.target.classList.contains('mlink')) {
let pastedText = event.clipboardData.getData("text");
console.log("붙여넣기 한 URL:", pastedText);
let cleanedUrl = cleanUrlParameters(pastedText);
setTimeout(() => {
event.target.value = cleanedUrl;
console.log("정리된 URL:", cleanedUrl);
}, 0);
}
});
});
/**
* URL에서 빈 값의 파라미터를 제거하는 함수
* @param {string} url 원본 URL 문자열
* @returns {string} 불필요한 파라미터가 제거된 URL
*/
function cleanUrlParameters(url) {
try {
// URL이 절대경로 (/web/... 형태)인지 확인
let hasFullDomain = url.startsWith("http://") || url.startsWith("https://");
let urlObj;
if (hasFullDomain) {
// 도메인이 포함된 URL 처리
urlObj = new URL(url);
} else {
// 절대경로 URL 처리 (가상의 도메인 추가 후 파싱)
urlObj = new URL("https://www.munjaon.co.kr" + url);
}
let params = new URLSearchParams(urlObj.search);
// 값이 비어있는 모든 파라미터 제거
for (let [key, value] of [...params.entries()]) {
if (!value.trim()) { // 값이 비어있는 경우 제거
params.delete(key);
}
}
// 정리된 URL 반환
let cleanedPath = urlObj.pathname + (params.toString() ? "?" + params.toString() : "");
return cleanedPath.replace(/^https:\/\/www\.munjaon\.co\.kr/, "");
} catch (e) {
console.warn("잘못된 URL 형식:", url);
return url; // URL 파싱 실패 시 원본 유지
}
}
//게시기간이 없으면 초기 값 입력
function makeDate(id){
if($("#"+id).val()== '--'){
let today = new Date();
let formattedDate = today.toISOString().split('T')[0]; // YYYY-MM-DD 형식
$("#"+id).val(formattedDate);
}
}
function makeTomorrow(id){
if($("#"+id).val()== '--'){
// 하루 후 날짜 계산
let tomorrow = new Date();
tomorrow.setDate(new Date().getDate() + 1);
let formattedDateTomorrow = tomorrow.toISOString().split('T')[0]; // YYYY-MM-DD 형식
$("#"+id).val(formattedDateTomorrow);
}
}
/* pagination 페이지 링크 function */
function goList(){
document.searchForm.submit();
}
/* 배너 삭제 function */
function fn_mainzone_delete() {
var msg;
msg = "해당 메인이미지를 삭제하시겠습니까?";
if (confirm(msg)) {
frm = document.writeForm;
frm.del.value = frm.popId.value ;
frm.action = "<c:url value='/uss/ion/bnr/pop/mainPopupListDelete.do'/>";
frm.submit();
}
}
function validate(method_parm) {
frm = document.writeForm;
if(frm.popNm.value=="") {
alert("비주얼명을 입력해 주십시오");
frm.popNm.focus();
return false;
}
if(frm.sort.value=="") {
alert("노출순서를 입력해 주십시오");
frm.sort.focus();
return false;
}else{
var regexp = /^[0-9]*$/
if( !regexp.test(frm.sort.value) ) {
alert("노출순서에는 숫자만 입력하세요");
frm.sort.focus();
return false;
}
}
// 링크 및 순서 값 검증 추가
let linkRows = document.querySelectorAll("#linkTable tr");
for (let i = 0; i < linkRows.length; i++) {
let linkInput = document.querySelector('input[name="mainPopupLinkList['+i+'].mlink"]');
let coordInput = document.querySelector('input[name="mainPopupLinkList['+i+'].coords"]');
if (linkInput.value.trim() === "") {
alert('['+(i + 1)+']번째 링크주소를 입력해 주십시오');
linkInput.focus();
return false;
}
if (coordInput.value.trim() === "") {
alert('['+(i + 1)+']번째 링크좌표를 입력해 주십시오');
coordInput.focus();
return false;
}
}
console.log('isTbodyEmpty("tbody_fiielist") : ', isTbodyEmpty("tbody_fiielist"));
if(isTbodyEmpty("tbody_fiielist")){
alert("이미지를 첨부해 주세요");
return false;
}
if(frm.content.value=="") {
alert("대체텍스트를 입력해 주십시오");
frm.content.focus();
return false;
}
var ntceBgndeYYYMMDD = document.getElementById('ntceBgndeYYYMMDD').value;
var ntceEnddeYYYMMDD = document.getElementById('ntceEnddeYYYMMDD').value;
console.log("ntceBgndeYYYMMDD ::: "+ntceBgndeYYYMMDD);
console.log("ntceEnddeYYYMMDD ::: "+ntceEnddeYYYMMDD);
if(ntceBgndeYYYMMDD ==""){
alert("게시기간 시작일을 입력해 주세요.");
return false;
}else if(ntceEnddeYYYMMDD == ""){
alert("게시기간 종료일을 입력해 주세요.");
return false;
}else{
var iChkBeginDe = Number( ntceBgndeYYYMMDD.replaceAll("-","") );
var iChkEndDe = Number( ntceEnddeYYYMMDD.replaceAll("-","") );
if(iChkBeginDe > iChkEndDe || iChkEndDe < iChkBeginDe ){
alert("게시시작일자는 게시종료일자 보다 클수 없고,\n게시종료일자는 게시시작일자 보다 작을수 없습니다. ");
return;
}
frm.ntceBgnde.value = ntceBgndeYYYMMDD.replaceAll('-','') + fn_egov_SelectBoxValue('ntceBgndeHH') + fn_egov_SelectBoxValue('ntceBgndeMM');
frm.ntceEndde.value = ntceEnddeYYYMMDD.replaceAll('-','') + fn_egov_SelectBoxValue('ntceEnddeHH') + fn_egov_SelectBoxValue('ntceEnddeMM');
}
var msg = "메인 팝업을 등록하시겠습니까?";
if(method_parm == "mainzone_U"){
msg ="메인 팝업을 수정하시겠습니까?";
}
if(!confirm(msg)){
return false;
}
goSave(method_parm);
}
function fn_egov_downFile(atchFileId, fileSn){
window.open("<c:url value='/cmm/fms/FileDown.do?atchFileId="+atchFileId+"&fileSn="+fileSn+"'/>");
}
function isTbodyEmpty(tbodyId) {
const tbody = document.getElementById(tbodyId);
if (!tbody) {
console.error("해당 ID를 가진 tbody가 없습니다.");
return false;
}
// tbody 내부에 <tr> 태그가 있는지 확인
return tbody.querySelector("tr") === null;
}
/* ********************************************************
* SELECT BOX VALUE FUNCTION
******************************************************** */
function fn_egov_SelectBoxValue(sbName)
{
var FValue = "";
for(var i=0; i < document.getElementById(sbName).length; i++)
{
if(document.getElementById(sbName).options[i].selected == true){
FValue=document.getElementById(sbName).options[i].value;
}
}
return FValue;
}
function addLinkRow() {
// 링크 목록 tbody
let tbody = document.getElementById("linkTable");
let rowCount = tbody.getElementsByTagName("tr").length; // 현재 tr 개수 가져오기
// 새로운 tr 생성
let newRow = document.createElement("tr");
let rowCountP = rowCount + 1;
// 첫 번째 컬럼 (링크 주소)
let linkTh = document.createElement("th");
linkTh.innerHTML = '<span>['+rowCountP+']링크주소</span>';
let linkTd = document.createElement("td");
linkTd.innerHTML = '<input type="text" name="mainPopupLinkList['+rowCount+'].mlink" class="mlink" maxlength="200" />';
// 두 번째 컬럼 (링크 좌표)
let coordTh = document.createElement("th");
coordTh.innerHTML = '<span>링크좌표</span>';
let coordTd = document.createElement("td");
coordTd.innerHTML = '<input type="text" name="mainPopupLinkList['+rowCount+'].coords" maxlength="200" />';
// 세 번째 컬럼 (링크 좌표)
let sortTd = document.createElement("td");
sortTd.setAttribute("colspan", "2");
sortTd.innerHTML = '<input type="button" class="btnType2" value="삭제" onclick="fn_linkDel(\'\')" />';
// tr에 추가
newRow.appendChild(linkTh);
newRow.appendChild(linkTd);
newRow.appendChild(coordTh);
newRow.appendChild(coordTd);
newRow.appendChild(sortTd);
// tbody에 추가
tbody.appendChild(newRow);
}
function fn_linkDel(p_linkId) {
// event.target을 저장
const $target = $(event.target);
if (!p_linkId) {
$target.closest('tr').remove();
}else{
var p_popId = $('#popId').val();
var p_popLinkId = p_linkId;
var sendData = {
"popId" : p_popId
, "popLinkId" : p_popLinkId
}
$.ajax({
type: 'POST',
url: '<c:url value="/uss/ion/bnr/pop/mainPopupLinkDeleteAjax.do" />',
contentType: 'application/json',
data: JSON.stringify(sendData),
dataType: 'json',
success : function(data) {
alert(data.msg);
console.log('data : ', data);
if(data.status == 'OK')
{
console.log('data OK : ', data);
$target.closest('tr').remove();
}
else
{
// 실패 처리 로직
}
},
error : function(jqXHR, textStatus, errorThrown) {
console.error("AJAX Error:", textStatus, errorThrown);
console.error("Response:", jqXHR.responseText);
}
});
}
}
</script>
<style>
.date_format{width:91px !important;}
.del_file_btn{border: none;background-color: transparent;background-image: url(/direct/img/upload_delect_img.png);background-repeat: no-repeat;background-position: center center;vertical-align: middle;margin-top: -4px;margin-right: 15px;}
.file_size{color: #0388d2;font-weight: bold;}
.uploaded_obj{width: 100%;}
.btnType2 {
border: 1px solid #456ded;
color: #456ded;
}
</style>
</head>
<body>
<form:form commandName="mainPopupVO" name="writeForm" enctype="multipart/form-data" method="post">
<input type="hidden" name="deviceType" id="deviceType" value="P"/>
<input type="hidden" name="selectedId" />
<form:input path="popId" type="hidden" />
<form:input path="del" type="hidden" />
<form:input path="mainzoneImageFile" type="hidden" />
<form:hidden path="ntceBgnde" />
<form:hidden path="ntceEndde" />
<input type="hidden" name="beSort" value="${mainPopupVO.beSort}" />
<!-- 드래그앤 드롭 파라미터 -->
<input type="hidden" name="menuName" value="mainPopup" />
<input type="hidden" name="fmsId" value="${mainPopupVO.popId}" />
<input type="hidden" name="limitcount" value="1" /><!-- 최대 업로드 파일갯수 -->
<div class="contWrap">
<div class="pageTitle">
<div class="pageIcon"><img src="/pb/img/pageTitIcon4.png" alt=""></div>
<h2 class="titType1 c_222222 fwBold">팝업 등록/수정</h2>
<p class="tType6 c_999999">사용자 메인 팝업에 적용되는 이미지를 등록, 수정, 삭제할 수 있습니다.</p>
</div>
<div class="pageNav">
<img src="/pb/img/common/homeIcon.png" alt="홈이미지">&ensp;>&ensp;<p class="topDepth">비주얼관리</p>&ensp;>&ensp;<p class="subDepth">메인비주얼관리</p>
</div>
<div class="pageCont">
<div class="tableWrap">
<p class="right fwMd"><span class="tType4 c_e40000 fwBold">*</span>는 필수입력 항목입니다.</p>
<table class="tbType2">
<colgroup>
<col style="width: 10%">
<col style="width: 30%">
<col style="width: 10%">
<col style="width: 20%">
<col style="width: 10%">
<col style="width: 20%">
</colgroup>
<tbody>
<c:if test="${not empty mainPopupVO.popId }">
<tr>
<th><span>원본이미지</span></th>
<td colspan="5">
<c:if test="${mainPopupVO.popId == ''}">
<div class="imgBox"></div>
</c:if>
<c:if test="${mainPopupVO.popId != ''}">
<img alt="${mainPopupVO.content}" onerror="this.src='/pb/img/noImg.png'" src='<c:url value='/cmm/fms/getImage.do'/>?atchFileId=<c:out value="${mainPopupVO.mainzoneImageFile}"/>' style="max-width:300px;padding: 10px;" />
<%-- <img alt="${mainPopupVO.content}" onerror="this.src='/images/no_img.jpg'" src='<c:url value='/cmm/fms/getImage.do'/>?atchFileId=<c:out value="${mainPopupVO.mainzoneImageFile}"/>' style="max-width:600px;" /> --%>
</c:if>
</td>
</tr>
</c:if>
<!-- <tr> -->
<!-- <th class="td_title1"><span class="star_t">*</span>기기종류</th> -->
<!-- <td colspan="5"> -->
<!-- <input type="radio" name="deviceType" id="deviceType" value="P" style="margin-left: 13px; margin-right: 5px;" -->
<!-- checked="checked" -->
<%-- ${mainPopupVO.deviceType eq 'P' or mainPopupVO.deviceType eq '' ? 'checked="checked"' : ''} --%>
<!-- >PC -->
<!-- <input type="radio" name="deviceType" id="deviceType" value="M" style="margin-left: 13px; margin-right: 5px;" -->
<%-- ${mainPopupVO.deviceType eq 'M' ? 'checked="checked"' : ''} --%>
<!-- >모바일 -->
<!-- </td> -->
<!-- </tr> -->
<tr>
<th><span class="reqArea">비주얼명</span></th>
<td colspan="5">
<form:input path="popNm" maxlength="30" />
</td>
</tr>
<tr>
<th><span class="reqArea">사용여부</span></th>
<td colspan="5">
<input type="radio" name="useYn" id="useY" value="Y" style="margin-left: 13px; margin-right: 5px;" ${empty mainPopupVO.useYn or mainPopupVO.useYn eq 'Y' or mainPopupVO.useYn eq '' ? 'checked="checked"' : ''} />
<label for="useY">사용</label>
<input type="radio" name="useYn" id="useN" value="N" style="margin-left: 13px; margin-right: 5px;" ${mainPopupVO.useYn eq 'N' ? 'checked="checked"' : ''} />
<label for="useN">미사용</label>
</td>
</tr>
<tr>
<th><span class="reqArea">노출순서</span></th>
<td colspan="5">
<form:input path="sort" maxlength="10" onkeyup="this.value=this.value.replace(/[^-\.0-9]/g,'')"/>
</td>
</tr>
<tr>
<th><span class="reqArea">게시기간</span></th>
<td colspan="5">
<input type="hidden" name="cal_url" id="cal_url" value="<c:url value='/sym/cmm/EgovNormalCalPopup.do'/>" >
<input type="text" class="date_format" name="ntceBgndeYYYMMDD" id="ntceBgndeYYYMMDD" size="10" maxlength="10" class="readOnlyClass" value="<c:out value="${fn:substring(mainPopupVO.ntceBgnde, 0, 4)}"/>-<c:out value="${fn:substring(mainPopupVO.ntceBgnde, 4, 6)}"/>-<c:out value="${fn:substring(mainPopupVO.ntceBgnde, 6, 8)}"/>" readonly>
<a href="#" onClick="javascript:fn_egov_NormalCalendar(document.forms.mainPopupVO, document.forms.mainPopupVO.ntceBgndeYYYMMDD);">
<input type="button" class="calBtn">
<%-- <img src="<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif' />" align="middle" style="border:0px" alt="달력창팝업버튼이미지"> --%>
</a>
<form:select path="ntceBgndeHH" class="date_format">
<form:options items="${ntceBgndeHH}" itemValue="code" itemLabel="codeNm"/>
</form:select>시
<form:select path="ntceBgndeMM" class="date_format">
<form:options items="${ntceBgndeMM}" itemValue="code" itemLabel="codeNm"/>
</form:select>분
&nbsp&nbsp~&nbsp&nbsp
<input type="text" class="date_format" name="ntceEnddeYYYMMDD" id="ntceEnddeYYYMMDD" size="10" maxlength="10" class="readOnlyClass" value="<c:out value="${fn:substring(mainPopupVO.ntceEndde, 0, 4)}"/>-<c:out value="${fn:substring(mainPopupVO.ntceEndde, 4, 6)}"/>-<c:out value="${fn:substring(mainPopupVO.ntceEndde, 6, 8)}"/>" readonly>
<a href="#" onClick="javascript:fn_egov_NormalCalendar(document.forms.mainPopupVO, document.forms.mainPopupVO.ntceEnddeYYYMMDD);">
<input type="button" class="calBtn">
<%-- <img src="<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif' />" align="middle" style="border:0px" alt="달력창팝업버튼이미지"> --%>
</a>
<form:select path="ntceEnddeHH" class="date_format">
<form:options items="${ntceEnddeHH}" itemValue="code" itemLabel="codeNm"/>
</form:select>시
<form:select path="ntceEnddeMM" class="date_format">
<form:options items="${ntceEnddeMM}" itemValue="code" itemLabel="codeNm"/>
</form:select>분
</td>
</tr>
<tbody id="linkTable">
<c:choose>
<c:when test="${not empty mainPopupVO.mainPopupLinkList}">
<c:forEach var="link" items="${mainPopupVO.mainPopupLinkList}" varStatus="status">
<tr>
<th><span>[${status.index + 1}]링크주소</span></th>
<td>
<form:input path="mainPopupLinkList[${status.index}].mlink" class="mlink" maxlength="200" />
</td>
<th><span>링크좌표</span></th>
<td>
<form:input path="mainPopupLinkList[${status.index}].coords" class="mlink" maxlength="200" />
</td>
<td colspan="2">
<input type="button" class="btnType2" value="삭제" onclick="fn_linkDel('${link.popLinkId }'); return false;">
</td>
</tr>
</c:forEach>
</c:when>
</c:choose>
</tbody>
<tr>
<td colspan="4">
<button type="button" class="btnType1" onclick="addLinkRow()">링크 추가</button>
</td>
</tr>
<tr>
<th><span class="reqArea">파일 첨부</span></th>
<td class="upload_area" colspan="5">
<div class="file_upload_box no_img_box fileWrap">
<table>
<colgroup>
<col style="width: 60%">
<col style="width: 10%">
<col style="width: 20%">
<col style="width: 10%">
</colgroup>
<thead>
<tr>
<th>파일명</th>
<th>크기</th>
<th>등록일시</th>
<th>삭제</th>
</tr>
</thead>
</table>
</div>
<div class="fileWrap fileAfter file_list_div asset_no_use_pro_table" style="display:none">
<table>
<colgroup>
<col style="width: 60%">
<col style="width: 10%">
<col style="width: 20%">
<col style="width: 10%">
</colgroup>
<thead>
<tr>
<th>파일명</th>
<th>크기</th>
<th>등록일시</th>
<th>삭제</th>
</tr>
</thead>
<tbody id="tbody_fiielist">
<c:forEach var="fileList" items="${fileList}" varStatus="status">
<tr class="item_${fileList.atchFileId}_${fileList.fileSn} uploaded_obj">
<td class="file_name">
<a href="javascript:fn_egov_downFile('${fileList.atchFileId}','${fileList.fileSn}')">
<img src="/direct/img/upload_hwp_img.png" alt="" />
<span class="file_name_text">${fileList.orignlFileNm}</span>
</a>
</td>
<td><span class="file_size_text" value="${fileList.fileMg}"></span></td>
<td>${fileList.creatDt}</td>
<td>
<input type="button" class="delBtn" onclick="delAtchFile('${fileList.atchFileId}', '${fileList.fileSn}'); return false;">
</td>
<input type="hidden" name="fileSize" class="item_file_size" value="${fileList.fileMg}" >
</tr>
</c:forEach>
</tbody>
</table>
</div>
<div class="fileInfo file_list_div">
<ul class="inline">
<li>
<p><span class="c_456ded fwBold totalfileCount">0</span>개 <span class="c_456ded fwBold totalfileSize">0MB</span></p>
</li>
<li>
<p>최대 <span class="c_e40000 fwBold limitcount_li"></span>개 <span class="c_e40000 fwBold upload_number">50MB</span>제한</p>
</li>
</ul>
</div>
<div class="uploadBtm">
<input type="file" id="file_temp" name="file_temp" class="uploadFile">
<!-- <span class="uploadTtype4">메인비주얼 이미지 크기는 </span><span class="uploadTtype4" style="color: red;">1920 X 843 </span>입니다.</p> -->
</div>
</td>
</tr>
<tr>
<th><span class="reqArea">대체텍스트</span></th>
<td colspan="5">
<form:input path="content" maxlength="500" />
</td>
</tr>
<%-- <tr>
<th class="td_title1"><span class="star_t">*</span>첨부 파일</th>
<td colspan="5" class="td_txt_exist">
<c:import url="/cmm/fms/selectFileInfsForUpdate.do" charEncoding="utf-8">
<c:param name="param_atchFileId" value="${mainPopupVO.mainzoneImageFile }" />
<c:param name="img_view" value="N" />
<c:param name="img_view_w" value="200" />
<c:param name="img_view_h" value="200" />
<c:param name="updateFlag" value="N" />
<c:param name="img_change_view" value="Y" />
</c:import>
</td>
</tr> --%>
<c:if test="${!empty mainPopupVO.popId}">
<tr>
<th><span class="reqArea">최종수정일</span></th>
<td>
${mainPopupVO.moddt}
</td>
</tr>
<tr>
<th><span class="reqArea">작성자</span></th>
<td>
${mainPopupVO.registerId}
</td>
</tr>
</c:if>
</tbody>
</table>
</div>
<div class="btnWrap right">
<input type="button" class="btnType1 bg_888888" value="목 록" onclick="goList(); return false;" >
<c:if test="${!empty mainPopupVO.popId }">
<input type="button" class="btnType1 bg_ed4545" value="삭 제" onclick="fn_mainzone_delete(); return false;" >
<input type="button" class="btnType1" value="수 정" onclick="validate('mainzone_U'); return false;">
</c:if>
<c:if test="${empty mainPopupVO.popId }">
<input type="button" class="btnType1" value="저 장" onclick="validate('mainzone_I'); return false;">
</c:if>
</div>
</div>
</div>
</form:form>
<form name="searchForm" id="searchForm" method="get" action="<c:url value='/uss/ion/bnr/pop/mainPopupList.do'/>" ></form>
</body>
</html>

View File

@ -0,0 +1,254 @@
<%--
Class Name : EgovPopupList.jsp
Description : 팝업창관리 목록 페이지
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2009.09.16 장동한 최초 생성
author : 공통서비스 개발팀 장동한
since : 2009.09.16
Copyright (C) 2009 by MOPAS All right reserved.
--%>
<%@ 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="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%
response.setHeader("Cache-Control","no-store");
response.setHeader("Pragma","no-cache");
response.setDateHeader("Expires",0);
if (request.getProtocol().equals("HTTP/1.1")) response.setHeader("Cache-Control", "no-cache");
%>
<c:set var="ImgUrl" value="${pageContext.request.contextPath}/images/egovframework/com/cmm/" />
<c:set var="CssUrl" value="${pageContext.request.contextPath}/css/egovframework/com/" />
<c:set var="JsUrl" value="${pageContext.request.contextPath}/js/egovframework/com/uss/ion/pwm/"/>
<!DOCTYPE html>
<html lang="ko">
<head>
<title>메인이미지 관리</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javaScript" language="javascript">
$(document).ready(function(){
$(".img_cont").click(function(e){
clickEvent = true;
});
$(".check").click(function(e){
e.stopPropagation();
});
});
/* 메인창 수정 화면*/
function fn_mainzone_view(id, pageType){
document.modiForm.selectedId.value = id;
document.modiForm.pageType.value = "Modify";
document.modiForm.action = "<c:url value='/uss/ion/bnr/sub/subMainzoneModify.do'/>";
document.modiForm.submit();
}
/* 메인창 등록화면*/
function fn_mainzone_insert_view(){
document.modiForm.pageType.value = "Insert";
document.modiForm.action = "<c:url value='/uss/ion/bnr/sub/subMainzoneModify.do'/>";
document.modiForm.submit();
}
function doDep3(event){
event.preventDefault();
}
function linkPage(pageNo){
<c:if test="${!empty loginId}">
if(""!= document.listForm.searchKeyword.value){
updateRecentSearch();//최근검색어 등록
}
</c:if>
var listForm = document.listForm ;
listForm.pageIndex.value = pageNo ;
listForm.searchCondition.value = $('#searchCondition').val();
listForm.submit();
}
function fnCheckAll() {
var checkField = document.listForm.del;
if(document.listForm.checkAll.checked) {
if(checkField) {
if(checkField.length > 1) {
for(var i=0; i < checkField.length; i++) {
checkField[i].checked = true;
}
} else {
checkField.checked = true;
}
}
} else {
if(checkField) {
if(checkField.length > 1) {
for(var j=0; j < checkField.length; j++) {
checkField[j].checked = false;
}
} else {
checkField.checked = false;
}
}
}
}
/* 체크된 메인배너 목록 삭제 */
function fn_mainzone_contest_delete(){
if($("input[name=del]:checked").length == 0){
alert("선택된 항목이 없습니다.");
return;
}
if (confirm("해당 메인이미지 삭제하시겠습니까?")){
frm = document.listForm;
frm.action = "<c:url value='/uss/ion/bnr/sub/subMainzoneListDelete.do' />";
frm.submit();
}
}
/* 테마별 색상맞추기 */
$(window).load(function() {
$('table.bbs01_list td.subject a').hover(
function () {
$(this).css("color","#d10000");
},
function () {
$(this).css("color","#333333");
}
);
});
</script>
</head>
<body>
<form name="listForm" action="<c:url value='/uss/ion/bnr/sub/subMainZoneList.do'/>" method="post">
<input name="pageIndex" type="hidden" value="<c:out value='${mainzoneVO.pageIndex}'/>"/>
<input type="hidden" name="selectedId" />
<input type="hidden" name="pageType" />
<div class="contWrap">
<div class="pageTitle">
<div class="pageIcon"><img src="/pb/img/pageTitIcon4.png" alt=""></div>
<h2 class="titType1 c_222222 fwBold">서비스안내 배너관리</h2>
<p class="tType6 c_999999">사이트별로 사용자 메인 상단에 적용되는 (하단)비주얼 이미지를 등록, 수정, 삭제할 수 있습니다.</p>
</div>
<div class="pageCont">
<div class="listSerch">
<c:if test="${siteId eq 'super'}">
<select name="searchConditionSite" id="searchConditionSite" title="사이트검색">
<option value="" <c:if test="${empty userSearchVO.searchConditionSite }">selected="selected"</c:if> >전체 사이트</option>
<c:forEach var="result" items="${siteManageList}" varStatus="status">
<option value="${result.siteId}" <c:if test="${result.siteId eq mainzoneVO.searchConditionSite }">selected="selected"</c:if> >${result.siteNm}</option>
</c:forEach>
</select>
</c:if>
<select name="searchCondition" id="searchCondition" class="select" title="검색조건선택">
<option value=''>전체</option>
<option value='1' <c:if test="${mainzoneVO.searchCondition == '1'}">selected</c:if>>제목</option>
<option value='2' <c:if test="${mainzoneVO.searchCondition == '2'}">selected</c:if>>대체텍스트</option>
</select>
<input id="searchKeyword" name="searchKeyword" class="recentSearch" type="text" value="<c:out value='${mainzoneVO.searchKeyword}'/>" size="40" title="검색" maxlength="100"/>
<input type="button" class="btnType1" value="검색" onclick="linkPage(1); return false;">
</div>
<div class="listTop">
<p class="tType5">총 <span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${paginationInfo.totalRecordCount}" pattern="#,###" /></span>건</p>
<div class="rightWrap">
<input type="button" class="printBtn" >
<select name="pageUnit" id="pageUnit" class="select" title="검색조건선택" onchange="linkPage(1);">
<option value='8' <c:if test="${mainzoneVO.pageUnit == '8' or searchVO.pageUnit == ''}">selected</c:if>>8개씩 보기</option>
<option value='16' <c:if test="${mainzoneVO.pageUnit == '16'}">selected</c:if>>16개씩 보기</option>
<option value='24' <c:if test="${mainzoneVO.pageUnit == '24'}">selected</c:if>>24개씩 보기</option>
</select>
</div>
</div>
<div class="galleryListWrap">
<ul class="inline">
<c:forEach var="result" items="${mainzoneList}" varStatus="status">
<li onclick="javascript:fn_mainzone_view('${result.mazId}'); return false;">
<div class="check"><input type="checkbox" name="del" id="check_box${status.index}" value="${result.mazId}"></div>
<%-- <div class="img_cont_check"><input type="checkbox" name="del" id="img_cont_check_box${status.index}" class="img_cont_check_box" value="${result.mazId}"><label for="img_cont_check_box${status.index}"></label></div> --%>
<ul class="listCategory">
<c:if test="${siteId eq 'super'}">
<c:forEach var="siteManageList" items="${siteManageList}" varStatus="status">
<c:if test="${result.siteId eq siteManageList.siteId}">
<li>
<c:out value="${siteManageList.siteNm}"/>
</li>
</c:if>
</c:forEach>
</c:if>
<li class="useCg">
<c:if test="${result.useYn eq 'Y'}">
사용
</c:if>
<c:if test="${result.useYn ne 'Y'}">
미사용
</c:if>
</li>
</ul>
<div class="imgBox"><img onerror="this.src='/pb/img/noImg.png'" src="<c:url value='/cmm/fms/getImage.do'/>?atchFileId=<c:out value="${result.mainzoneImageFile}"/>" alt=""></div>
<%-- <div class="imgBox"><img onerror="this.src='/pb/img/noImg.png'" src="<c:url value='/cmm/fms/getImage.do'/>?atchFileId=<c:out value="${result.mainzoneImageFile}"/>" alt=""></div> --%>
<div class="listInfo">
<h3>${result.mazNm}</h3>
<table>
<tr>
<td colspan="2">작성자 : ${result.registerId}</td>
</tr>
<tr>
<td>노출순서 : ${result.sort}</td>
<td class="right">${result.ntceBgnde} ~ ${result.ntceEndde}</td>
</tr>
</table>
</div>
</li>
</c:forEach>
</ul>
<c:if test="${empty mainzoneList}">
<div class="board1_btn">
<ul style="text-align: center;"><spring:message code="common.nodata.msg" /></ul>
</div>
</c:if>
</div>
<div class="btnWrap">
<input type="button" class="btnType2" value="삭제" onclick="fn_mainzone_contest_delete(); return false;">
<input type="button" class="btnType1" value="등록" onclick="fn_mainzone_insert_view(); return false;">
</div>
<!-- 페이지 네비게이션 시작 -->
<c:if test="${!empty mainzoneList}">
<div class="page">
<ul class="inline">
<ui:pagination paginationInfo = "${paginationInfo}" type="image" jsFunction="linkPage" />
</ul>
</div>
</c:if>
<!-- //페이지 네비게이션 끝 -->
</div>
</div>
</form>
<form name="modiForm" method="get" action="<c:url value='/uss/ion/bnr/sub/subMainzoneModify.do'/>" >
<input name="selectedId" type="hidden" />
<input name="pageType" type="hidden" />
</form>
<form name="searchForm" method="get" action="<c:url value='/uss/ion/bnr/sub/subMainZoneList.do'/>">
<input name="pageIndex" type="hidden" value="1" />
<input name="searchCondition" type="hidden" />
<input name="searchKeyword" type="hidden" />
<input name="searchConditionSite" type="hidden" />
</form>
</body>
</html>

View File

@ -0,0 +1,583 @@
<%--
Class Name : EgovPopupList.jsp
Description : 팝업창관리 목록 페이지
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2009.09.16 장동한 최초 생성
author : 공통서비스 개발팀 장동한
since : 2009.09.16
Copyright (C) 2009 by MOPAS All right reserved.
--%>
<%@ 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"%>
<%
response.setHeader("Cache-Control","no-store");
response.setHeader("Pragma","no-cache");
response.setDateHeader("Expires",0);
if (request.getProtocol().equals("HTTP/1.1")) response.setHeader("Cache-Control", "no-cache");
%>
<c:set var="ImgUrl" value="${pageContext.request.contextPath}/images/egovframework/com/cmm/" />
<c:set var="CssUrl" value="${pageContext.request.contextPath}/css/egovframework/com/" />
<c:set var="JsUrl" value="${pageContext.request.contextPath}/js/egovframework/com/uss/ion/pwm/"/>
<!DOCTYPE html>
<html lang="ko">
<head>
<title>팝업창관리 관리</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javascript" src="<c:url value='/js/EgovCalPopup.js' />"></script>
<script type="text/javascript" src="<c:url value='/js/EgovMultiFile.js'/>"></script>
<script type="text/javaScript" language="javascript">
$( document ).ready(function(){
makeDate('ntceBgndeYYYMMDD');
makeDate('ntceEnddeYYYMMDD');
document.getElementById("mlink").addEventListener("paste", function(event) {
// 클립보드 데이터를 가져옴
let pastedText = event.clipboardData.getData("text");
// 콘솔 출력 (붙여넣은 URL 확인)
console.log("붙여넣기 한 URL:", pastedText);
// 불필요한 파라미터 제거 후 새로운 URL 생성
let cleanedUrl = cleanUrlParameters(pastedText);
// input 필드에 깨끗한 URL 입력
setTimeout(() => {
this.value = cleanedUrl;
console.log("정리된 URL:", cleanedUrl);
}, 0);
});
});
/**
* URL에서 빈 값의 파라미터를 제거하는 함수
* @param {string} url 원본 URL 문자열
* @returns {string} 불필요한 파라미터가 제거된 URL
*/
function cleanUrlParameters(url) {
try {
// URL이 절대경로 (/web/... 형태)인지 확인
let hasFullDomain = url.startsWith("http://") || url.startsWith("https://");
let urlObj;
if (hasFullDomain) {
// 도메인이 포함된 URL 처리
urlObj = new URL(url);
} else {
// 절대경로 URL 처리 (가상의 도메인 추가 후 파싱)
urlObj = new URL("https://www.munjaon.co.kr" + url);
}
let params = new URLSearchParams(urlObj.search);
// ❗ 값이 비어있는 모든 파라미터 제거
for (let [key, value] of [...params.entries()]) { // `params.entries()`를 배열로 변환하여 반복
if (!value.trim()) { // 값이 비어있는 경우 제거
params.delete(key);
}
}
// 정리된 URL 반환
let cleanedPath = urlObj.pathname + (params.toString() ? "?" + params.toString() : "");
// 정리된 URL 반환 (도메인을 제거하고 절대경로만 반환)
return cleanedPath.replace(/^https:\/\/www\.munjaon\.co\.kr/, "");
} catch (e) {
console.warn("잘못된 URL 형식:", url);
return url; // URL 파싱 실패 시 원본 유지
}
}
//게시기간이 없으면 초기 값 입력
function makeDate(id){
if($("#"+id).val()== '--'){
let today = new Date();
let formattedDate = today.toISOString().split('T')[0]; // YYYY-MM-DD 형식
$("#"+id).val(formattedDate);
}
}
/* pagination 페이지 링크 function */
function goList(){
document.searchForm.submit();
}
/* 등록시 값 확인 */
function fn_checkForm() {
frm = document.writeForm;
if(frm.mazNm.value=="") {
alert("비주얼명을 입력해 주십시오");
frm.mazNm.focus();
return false;
}
if(frm.content.value=="") {
alert("대체텍스트를 입력해 주십시오");
frm.content.focus();
return false;
}
if(frm.sort.value=="") {
alert("노출순서를 입력해 주십시오");
frm.sort.focus();
return false;
}else{
var regexp = /^[0-9]*$/
if( !regexp.test(frm.sort.value) ) {
alert("노출순서에는 숫자만 입력하세요");
frm.sort.focus();
return false;
}
}
return true;
}
// /* 글 등록 function */
// function fn_mainzone_insert() {
// frm = document.writeForm;
// frm.action = "<c:url value='/uss/ion/pwm/mainzoneInsert.do'/>";
// if(fn_checkForm())
// frm.submit();
// }
/* 배너 삭제 function */
function fn_mainzone_delete() {
var msg;
msg = "해당 메인이미지를 삭제하시겠습니까?";
if (confirm(msg)) {
frm = document.writeForm;
frm.del.value = frm.mazId.value ;
frm.action = "<c:url value='/uss/ion/bnr/sub/subMainzoneListDelete.do'/>";
frm.submit();
}
}
function validate(method_parm) {
frm = document.writeForm;
if(frm.mazNm.value=="") {
alert("비주얼명을 입력해 주십시오");
frm.mazNm.focus();
return false;
}
if(frm.content.value=="") {
alert("대체텍스트를 입력해 주십시오");
frm.content.focus();
return false;
}
console.log('isTbodyEmpty("tbody_fiielist") : ', isTbodyEmpty("tbody_fiielist"));
if(isTbodyEmpty("tbody_fiielist")){
alert("이미지를 첨부해 주세요");
return false;
}
if(frm.sort.value=="") {
alert("노출순서를 입력해 주십시오");
frm.sort.focus();
return false;
}else{
var regexp = /^[0-9]*$/
if( !regexp.test(frm.sort.value) ) {
alert("노출순서에는 숫자만 입력하세요");
frm.sort.focus();
return false;
}
}
if(frm.topTxt.value=="") {
alert("상단텍스트를 입력해 주십시오");
frm.content.focus();
return false;
}
if(frm.lowTxt.value=="") {
alert("하단텍스트를 입력해 주십시오");
frm.content.focus();
return false;
}
var ntceBgndeYYYMMDD = document.getElementById('ntceBgndeYYYMMDD').value;
var ntceEnddeYYYMMDD = document.getElementById('ntceEnddeYYYMMDD').value;
console.log("ntceBgndeYYYMMDD ::: "+ntceBgndeYYYMMDD);
console.log("ntceEnddeYYYMMDD ::: "+ntceEnddeYYYMMDD);
if(ntceBgndeYYYMMDD ==""){
alert("게시기간 시작일을 입력해 주세요.");
return false;
}else if(ntceEnddeYYYMMDD == ""){
alert("게시기간 종료일을 입력해 주세요.");
return false;
}else{
var iChkBeginDe = Number( ntceBgndeYYYMMDD.replaceAll("-","") );
var iChkEndDe = Number( ntceEnddeYYYMMDD.replaceAll("-","") );
if(iChkBeginDe > iChkEndDe || iChkEndDe < iChkBeginDe ){
alert("게시시작일자는 게시종료일자 보다 클수 없고,\n게시종료일자는 게시시작일자 보다 작을수 없습니다. ");
return;
}
frm.ntceBgnde.value = ntceBgndeYYYMMDD.replaceAll('-','') + fn_egov_SelectBoxValue('ntceBgndeHH') + fn_egov_SelectBoxValue('ntceBgndeMM');
frm.ntceEndde.value = ntceEnddeYYYMMDD.replaceAll('-','') + fn_egov_SelectBoxValue('ntceEnddeHH') + fn_egov_SelectBoxValue('ntceEnddeMM');
}
var msg = "서브 메인 배너를 등록하시겠습니까?";
if(method_parm == "mainzone_U"){
msg ="서브 메인 배너를 수정하시겠습니까?";
}
if(!confirm(msg)){
return false;
}
// 공통 수정/삭제 :: /uss/ion/fms/FmsFileInsertAjax.do
goSave(method_parm);
}
function fn_egov_downFile(atchFileId, fileSn){
window.open("<c:url value='/cmm/fms/FileDown.do?atchFileId="+atchFileId+"&fileSn="+fileSn+"'/>");
}
function isTbodyEmpty(tbodyId) {
const tbody = document.getElementById(tbodyId);
if (!tbody) {
console.error("해당 ID를 가진 tbody가 없습니다.");
return false;
}
// tbody 내부에 <tr> 태그가 있는지 확인
return tbody.querySelector("tr") === null;
}
/* ********************************************************
* SELECT BOX VALUE FUNCTION
******************************************************** */
function fn_egov_SelectBoxValue(sbName)
{
var FValue = "";
for(var i=0; i < document.getElementById(sbName).length; i++)
{
if(document.getElementById(sbName).options[i].selected == true){
FValue=document.getElementById(sbName).options[i].value;
}
}
return FValue;
}
</script>
<style>
.date_format{width:91px !important;}
.del_file_btn{border: none;background-color: transparent;background-image: url(/direct/img/upload_delect_img.png);background-repeat: no-repeat;background-position: center center;vertical-align: middle;margin-top: -4px;margin-right: 15px;}
.file_size{color: #0388d2;font-weight: bold;}
.uploaded_obj{width: 100%;}
</style>
</head>
<body>
<form:form commandName="mainzoneVO" name="writeForm" enctype="multipart/form-data" method="post">
<input type="hidden" name="deviceType" id="deviceType" value="P"/>
<input type="hidden" name="selectedId" />
<form:input path="mazId" type="hidden" />
<form:input path="del" type="hidden" />
<form:input path="upfile" type="hidden" />
<form:input path="mainzoneImageFile" type="hidden" />
<form:hidden path="ntceBgnde" />
<form:hidden path="ntceEndde" />
<input type="hidden" name="beSort" value="${mainzoneVO.beSort}" />
<!-- 드래그앤 드롭 파라미터 -->
<input type="hidden" name="menuName" value="subMainzone" />
<input type="hidden" name="fmsId" value="${mainzoneVO.mazId}" />
<input type="hidden" name="limitcount" value="1" /><!-- 최대 업로드 파일갯수 -->
<div class="contWrap">
<div class="pageTitle">
<div class="pageIcon"><img src="/pb/img/pageTitIcon4.png" alt=""></div>
<h2 class="titType1 c_222222 fwBold">서비스안내 배너관리 등록/수정</h2>
<p class="tType6 c_999999">사이트별로 사용자 메인 상단에 적용되는 비주얼 이미지를 등록, 수정, 삭제할 수 있습니다.</p>
</div>
<div class="pageNav">
<img src="/pb/img/common/homeIcon.png" alt="홈이미지">&ensp;>&ensp;<p class="topDepth">비주얼관리</p>&ensp;>&ensp;<p class="subDepth">메인비주얼관리</p>
</div>
<div class="pageCont">
<div class="tableWrap">
<p class="right fwMd"><span class="tType4 c_e40000 fwBold">*</span>는 필수입력 항목입니다.</p>
<table class="tbType2">
<colgroup>
<col style="width: 15%">
<col style="width: 85%">
</colgroup>
<tbody>
<%-- <tr>
<th class="td_title1"><span class="star_t"></span>메인화면에 보이는 메인 이미지</th>
<td colspan="3" class="td_txt_exist">
<c:if test="${mainzoneVO.mazId == null}">
등록된 메인 이미지가 없습니다.
</c:if>
<c:if test="${mainzoneVO.mazId != null}">
<img alt="${mainzoneVO.content}" onerror="this.src='/images/no_img.jpg'" src='<c:url value='/cmm/fms/getImage.do'/>?atchFileId=<c:out value="${mainzoneVO.mainzoneImageFile}"/>' width="196" height="237" />
</c:if>
</td>
</tr> --%>
<c:if test="${siteId eq 'super'}">
<tr>
<th><span class="reqArea">사이트</span></th>
<td>
<select name="siteId" id="siteId" title="권한">
<c:forEach var="resultList" items="${siteManageList}" varStatus="status">
<option value="<c:out value="${resultList.siteId}"/>"
<c:if test="${mainzoneVO.siteId eq resultList.siteId}"> selected='selected' </c:if>>
<c:out value="${resultList.siteNm}"/>
</option>
</c:forEach>
</select>
</td>
</tr>
</c:if>
<c:if test="${not empty mainzoneVO.mazId }">
<tr>
<th><span>원본이미지</span></th>
<td>
<c:if test="${mainzoneVO.mazId == ''}">
<div class="imgBox"></div>
</c:if>
<c:if test="${mainzoneVO.mazId != ''}">
<img alt="${mainzoneVO.content}" onerror="this.src='/pb/img/noImg.png'" src='<c:url value='/cmm/fms/getImage.do'/>?atchFileId=<c:out value="${mainzoneVO.mainzoneImageFile}"/>' style="max-width:300px;padding: 10px;" />
<%-- <img alt="${mainzoneVO.content}" onerror="this.src='/images/no_img.jpg'" src='<c:url value='/cmm/fms/getImage.do'/>?atchFileId=<c:out value="${mainzoneVO.mainzoneImageFile}"/>' style="max-width:600px;" /> --%>
</c:if>
</td>
</tr>
</c:if>
<!-- <tr> -->
<!-- <th class="td_title1"><span class="star_t">*</span>기기종류</th> -->
<!-- <td colspan="3"> -->
<!-- <input type="radio" name="deviceType" id="deviceType" value="P" style="margin-left: 13px; margin-right: 5px;" -->
<!-- checked="checked" -->
<%-- ${mainzoneVO.deviceType eq 'P' or mainzoneVO.deviceType eq '' ? 'checked="checked"' : ''} --%>
<!-- >PC -->
<!-- <input type="radio" name="deviceType" id="deviceType" value="M" style="margin-left: 13px; margin-right: 5px;" -->
<%-- ${mainzoneVO.deviceType eq 'M' ? 'checked="checked"' : ''} --%>
<!-- >모바일 -->
<!-- </td> -->
<!-- </tr> -->
<tr>
<th><span class="reqArea">비주얼명</span></th>
<td>
<form:input path="mazNm" maxlength="30" />
</td>
</tr>
<tr>
<th><span class="reqArea">사용여부</span></th>
<td>
<input type="radio" name="useYn" id="useY" value="Y" style="margin-left: 13px; margin-right: 5px;" ${mainzoneVO.useYn eq 'Y' or mainzoneVO.useYn eq '' ? 'checked="checked"' : ''} /><label for="">사용</label>
<input type="radio" name="useYn" id="useN" value="N" style="margin-left: 13px; margin-right: 5px;" ${mainzoneVO.useYn eq 'N' ? 'checked="checked"' : ''} /><label for="">미사용</label>
</td>
</tr>
<tr>
<th><span class="reqArea">노출순서</span></th>
<td colspan="3">
<form:input path="sort" maxlength="10" onkeyup="this.value=this.value.replace(/[^-\.0-9]/g,'')"/>
</td>
</tr>
<tr>
<th><span class="reqArea">게시기간</span></th>
<td>
<input type="hidden" name="cal_url" id="cal_url" value="<c:url value='/sym/cmm/EgovNormalCalPopup.do'/>" >
<input type="text" class="date_format" name="ntceBgndeYYYMMDD" id="ntceBgndeYYYMMDD" size="10" maxlength="10" class="readOnlyClass" value="<c:out value="${fn:substring(mainzoneVO.ntceBgnde, 0, 4)}"/>-<c:out value="${fn:substring(mainzoneVO.ntceBgnde, 4, 6)}"/>-<c:out value="${fn:substring(mainzoneVO.ntceBgnde, 6, 8)}"/>" readonly>
<a href="#" onClick="javascript:fn_egov_NormalCalendar(document.forms.mainzoneVO, document.forms.mainzoneVO.ntceBgndeYYYMMDD);">
<input type="button" class="calBtn">
<%-- <img src="<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif' />" align="middle" style="border:0px" alt="달력창팝업버튼이미지"> --%>
</a>
<form:select path="ntceBgndeHH" class="date_format">
<form:options items="${ntceBgndeHH}" itemValue="code" itemLabel="codeNm"/>
</form:select>시
<form:select path="ntceBgndeMM" class="date_format">
<form:options items="${ntceBgndeMM}" itemValue="code" itemLabel="codeNm"/>
</form:select>분
&nbsp&nbsp~&nbsp&nbsp
<input type="text" class="date_format" name="ntceEnddeYYYMMDD" id="ntceEnddeYYYMMDD" size="10" maxlength="10" class="readOnlyClass" value="<c:out value="${fn:substring(mainzoneVO.ntceEndde, 0, 4)}"/>-<c:out value="${fn:substring(mainzoneVO.ntceEndde, 4, 6)}"/>-<c:out value="${fn:substring(mainzoneVO.ntceEndde, 6, 8)}"/>" readonly>
<a href="#" onClick="javascript:fn_egov_NormalCalendar(document.forms.mainzoneVO, document.forms.mainzoneVO.ntceEnddeYYYMMDD);">
<input type="button" class="calBtn">
<%-- <img src="<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif' />" align="middle" style="border:0px" alt="달력창팝업버튼이미지"> --%>
</a>
<form:select path="ntceEnddeHH" class="date_format">
<form:options items="${ntceEnddeHH}" itemValue="code" itemLabel="codeNm"/>
</form:select>시
<form:select path="ntceEnddeMM" class="date_format">
<form:options items="${ntceEnddeMM}" itemValue="code" itemLabel="codeNm"/>
</form:select>분
</td>
</tr>
<tr>
<th><span class="reqArea">상단텍스트</span></th>
<td colspan="3">
<form:input path="topTxt" maxlength="200" />
</td>
</tr>
<tr>
<th><span class="reqArea">하단텍스트</span></th>
<td colspan="3">
<form:input path="lowTxt" maxlength="200" />
</td>
</tr>
<tr>
<th><span>링크주소</span></th>
<td colspan="3">
<form:input path="mlink" maxlength="200" />
</td>
</tr>
<tr>
<th><span class="reqArea">파일 첨부</span></th>
<td class="upload_area">
<div class="file_upload_box no_img_box fileWrap">
<table>
<colgroup>
<col style="width: 60%">
<col style="width: 10%">
<col style="width: 20%">
<col style="width: 10%">
</colgroup>
<thead>
<tr>
<th>파일명</th>
<th>크기</th>
<th>등록일시</th>
<th>삭제</th>
</tr>
</thead>
</table>
</div>
<div class="fileWrap fileAfter file_list_div asset_no_use_pro_table" style="display:none">
<table>
<colgroup>
<col style="width: 60%">
<col style="width: 10%">
<col style="width: 20%">
<col style="width: 10%">
</colgroup>
<thead>
<tr>
<th>파일명</th>
<th>크기</th>
<th>등록일시</th>
<th>삭제</th>
</tr>
</thead>
<tbody id="tbody_fiielist">
<c:forEach var="fileList" items="${fileList}" varStatus="status">
<tr class="item_${fileList.atchFileId}_${fileList.fileSn} uploaded_obj">
<td class="file_name">
<a href="javascript:fn_egov_downFile('${fileList.atchFileId}','${fileList.fileSn}')">
<img src="/direct/img/upload_hwp_img.png" alt="" />
<span class="file_name_text">${fileList.orignlFileNm}</span>
</a>
</td>
<td><span class="file_size_text" value="${fileList.fileMg}"></span></td>
<td>${fileList.creatDt}</td>
<td>
<input type="button" class="delBtn" onclick="delAtchFile('${fileList.atchFileId}', '${fileList.fileSn}'); return false;">
</td>
<input type="hidden" name="fileSize" class="item_file_size" value="${fileList.fileMg}" >
</tr>
</c:forEach>
</tbody>
</table>
</div>
<div class="fileInfo file_list_div">
<ul class="inline">
<li>
<p><span class="c_456ded fwBold totalfileCount">0</span>개 <span class="c_456ded fwBold totalfileSize">0MB</span></p>
</li>
<li>
<p>최대 <span class="c_e40000 fwBold limitcount_li"></span>개 <span class="c_e40000 fwBold upload_number">50MB</span>제한</p>
</li>
</ul>
</div>
<div class="uploadBtm">
<input type="file" id="file_temp" name="file_temp" class="uploadFile">
<!-- <span class="uploadTtype4">메인비주얼 이미지 크기는 </span><span class="uploadTtype4" style="color: red;">1920 X 843 </span>입니다.</p> -->
</div>
</td>
</tr>
<tr>
<th><span class="reqArea">대체텍스트</span></th>
<td>
<form:input path="content" maxlength="500" />
</td>
</tr>
<%-- <tr>
<th class="td_title1"><span class="star_t">*</span>첨부 파일</th>
<td colspan="3" class="td_txt_exist">
<c:import url="/cmm/fms/selectFileInfsForUpdate.do" charEncoding="utf-8">
<c:param name="param_atchFileId" value="${mainzoneVO.mainzoneImageFile }" />
<c:param name="img_view" value="N" />
<c:param name="img_view_w" value="200" />
<c:param name="img_view_h" value="200" />
<c:param name="updateFlag" value="N" />
<c:param name="img_change_view" value="Y" />
</c:import>
</td>
</tr> --%>
<c:if test="${!empty mainzoneVO.mazId}">
<tr>
<th><span class="reqArea">최종수정일</span></th>
<td>
${mainzoneVO.moddt}
</td>
</tr>
<tr>
<th><span class="reqArea">작성자</span></th>
<td>
${mainzoneVO.registerId}
</td>
</tr>
</c:if>
</tbody>
</table>
</div>
<div class="btnWrap right">
<input type="button" class="btnType1 bg_888888" value="목 록" onclick="goList(); return false;" >
<c:if test="${!empty mainzoneVO.mazId }">
<input type="button" class="btnType1 bg_ed4545" value="삭 제" onclick="fn_mainzone_delete(); return false;" >
<input type="button" class="btnType1" value="수 정" onclick="validate('mainzone_U'); return false;">
</c:if>
<c:if test="${empty mainzoneVO.mazId }">
<input type="button" class="btnType1" value="저 장" onclick="validate('mainzone_I'); return false;">
</c:if>
</div>
</div>
</div>
</form:form>
<form name="searchForm" id="searchForm" method="get" action="<c:url value='/uss/ion/bnr/sub/subMainZoneList.do'/>" ></form>
</body>
</html>

View File

@ -37,10 +37,82 @@
<script type="text/javascript" src="<c:url value='/js/EgovMultiFile.js'/>"></script> <script type="text/javascript" src="<c:url value='/js/EgovMultiFile.js'/>"></script>
<script type="text/javaScript" language="javascript"> <script type="text/javaScript" language="javascript">
$( document ).ready(function(){ $( document ).ready(function(){
makeDate('ntceBgndeYYYMMDD');
makeDate('ntceEnddeYYYMMDD');
document.getElementById("mlink").addEventListener("paste", function(event) {
// 클립보드 데이터를 가져옴
let pastedText = event.clipboardData.getData("text");
// 콘솔 출력 (붙여넣은 URL 확인)
console.log("붙여넣기 한 URL:", pastedText);
// 불필요한 파라미터 제거 후 새로운 URL 생성
let cleanedUrl = cleanUrlParameters(pastedText);
// input 필드에 깨끗한 URL 입력
setTimeout(() => {
this.value = cleanedUrl;
console.log("정리된 URL:", cleanedUrl);
}, 0);
});
}); });
/**
* URL에서 빈 값의 파라미터를 제거하는 함수
* @param {string} url 원본 URL 문자열
* @returns {string} 불필요한 파라미터가 제거된 URL
*/
function cleanUrlParameters(url) {
try {
// URL이 절대경로 (/web/... 형태)인지 확인
let hasFullDomain = url.startsWith("http://") || url.startsWith("https://");
let urlObj;
if (hasFullDomain) {
// 도메인이 포함된 URL 처리
urlObj = new URL(url);
} else {
// 절대경로 URL 처리 (가상의 도메인 추가 후 파싱)
urlObj = new URL("https://www.munjaon.co.kr" + url);
}
let params = new URLSearchParams(urlObj.search);
// ❗ 값이 비어있는 모든 파라미터 제거
for (let [key, value] of [...params.entries()]) { // `params.entries()`를 배열로 변환하여 반복
if (!value.trim()) { // 값이 비어있는 경우 제거
params.delete(key);
}
}
// 정리된 URL 반환
let cleanedPath = urlObj.pathname + (params.toString() ? "?" + params.toString() : "");
// 정리된 URL 반환 (도메인을 제거하고 절대경로만 반환)
return cleanedPath.replace(/^https:\/\/www\.munjaon\.co\.kr/, "");
} catch (e) {
console.warn("잘못된 URL 형식:", url);
return url; // URL 파싱 실패 시 원본 유지
}
}
//게시기간이 없으면 초기 값 입력
function makeDate(id){
if($("#"+id).val()== '--'){
let today = new Date();
let formattedDate = today.toISOString().split('T')[0]; // YYYY-MM-DD 형식
$("#"+id).val(formattedDate);
}
}
/* pagination 페이지 링크 function */ /* pagination 페이지 링크 function */
function goList(){ function goList(){
document.searchForm.submit(); document.searchForm.submit();
@ -109,6 +181,14 @@ function validate(method_parm) {
frm.content.focus(); frm.content.focus();
return false; return false;
} }
console.log('isTbodyEmpty("tbody_fiielist") : ', isTbodyEmpty("tbody_fiielist"));
if(isTbodyEmpty("tbody_fiielist")){
alert("이미지를 첨부해 주세요");
return false;
}
if(frm.sort.value=="") { if(frm.sort.value=="") {
alert("노출순서를 입력해 주십시오"); alert("노출순서를 입력해 주십시오");
frm.sort.focus(); frm.sort.focus();
@ -122,6 +202,9 @@ function validate(method_parm) {
} }
} }
var ntceBgndeYYYMMDD = document.getElementById('ntceBgndeYYYMMDD').value; var ntceBgndeYYYMMDD = document.getElementById('ntceBgndeYYYMMDD').value;
var ntceEnddeYYYMMDD = document.getElementById('ntceEnddeYYYMMDD').value; var ntceEnddeYYYMMDD = document.getElementById('ntceEnddeYYYMMDD').value;
@ -170,6 +253,17 @@ function fn_egov_downFile(atchFileId, fileSn){
window.open("<c:url value='/cmm/fms/FileDown.do?atchFileId="+atchFileId+"&fileSn="+fileSn+"'/>"); window.open("<c:url value='/cmm/fms/FileDown.do?atchFileId="+atchFileId+"&fileSn="+fileSn+"'/>");
} }
function isTbodyEmpty(tbodyId) {
const tbody = document.getElementById(tbodyId);
if (!tbody) {
console.error("해당 ID를 가진 tbody가 없습니다.");
return false;
}
// tbody 내부에 <tr> 태그가 있는지 확인
return tbody.querySelector("tr") === null;
}
/* ******************************************************** /* ********************************************************
* SELECT BOX VALUE FUNCTION * SELECT BOX VALUE FUNCTION
******************************************************** */ ******************************************************** */
@ -336,12 +430,12 @@ function fn_egov_SelectBoxValue(sbName)
</form:select>분 </form:select>분
</td> </td>
</tr> </tr>
<%-- <tr> <tr>
<th class="td_title1"><span class="star_t">*</span>링크주소</th> <th><span>링크주소</span></th>
<td colspan="3"> <td colspan="3">
<form:input path="mlink" maxlength="200" /> <form:input path="mlink" maxlength="200" />
</td> </td>
</tr> --%> </tr>
<tr> <tr>
<th><span class="reqArea">파일 첨부</span></th> <th><span class="reqArea">파일 첨부</span></th>
<td class="upload_area"> <td class="upload_area">

View File

@ -90,6 +90,7 @@ function fnCheckAll() {
/* 메인창 수정 화면*/ /* 메인창 수정 화면*/
function fn_mainzone_view(id, pageType){ function fn_mainzone_view(id, pageType){
console.log(id, pageType);
document.modiForm.selectedId.value = id; document.modiForm.selectedId.value = id;
document.modiForm.pageType.value = "Modify"; document.modiForm.pageType.value = "Modify";
document.modiForm.action = "<c:url value='/uss/ion/pwm/mainzoneModify.do'/>"; document.modiForm.action = "<c:url value='/uss/ion/pwm/mainzoneModify.do'/>";

View File

@ -628,7 +628,7 @@
<div class="tooltip-wrap"> <div class="tooltip-wrap">
<div class="popup-com adr_layer popup02" tabindex="0" data-tooltip-con="popup02" data-focus="popup02" data-focus-prev="popup02-close" style="width: 1000px;"> <div class="popup-com adr_layer popup02" tabindex="0" data-tooltip-con="popup02" data-focus="popup02" data-focus-prev="popup02-close" style="width: 1000px;">
<div class="tooltip-wrap"> <div class="tooltip-wrap">
<div class="popup-com adr_layer adr_popup14 adr_detail_result" tabindex="0" data-tooltip-con="adr_popup14" data-focus="adr_popup14" data-focus-prev="adr_popu14-close" style="width: 525px;"> <div class="popup-com adr_layer adr_popup14 adr_detail_result" tabindex="0" data-tooltip-con="adr_popup14" data-focus="adr_popup14" data-focus-prev="adr_popu14-close" style="width: 525px; z-index:125;">
<div class="popup_heading"> <div class="popup_heading">
<p>주소록 상세 결과</p> <p>주소록 상세 결과</p>
<button type="button" class="tooltip-close" data-focus="adr_popup14-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> <button type="button" class="tooltip-close" data-focus="adr_popup14-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>

View File

@ -1,681 +0,0 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<title>한국공예·디자인문화진흥원</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="description" content="한국공예·디자인문화진흥원에 대한 정보를 제공합니다.">
<meta name="keywords" content="한국공예·디자인문화진흥원">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="text/javascript" src="/js/tab.js"></script>
<link href="/css/style.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="/css/style.min.css">
<link href="/js/font-awesome/css/font-awesome.min.css" rel="stylesheet">
<link href="/css/page.css" rel="stylesheet">
<link rel="stylesheet" href="/css/flexslider.css" type="text/css" media="screen" /><!-- 이미지슬라이드 -->
<script defer src="/js/jquery.flexslider.js"></script>
<link href="/css/index.css" rel="stylesheet">
<script type="text/javascript">
$(document).ready(function(){
if($(window).width() < 701){
$('.main_magazine').attr("onclick", "javascript:location.href='${popupzoneList_05[0].mlink}'");
}
// 실서버
if($(location).attr('host').indexOf("kcdf.or.kr") != -1){
if($(location).attr('host').indexOf("www") == -1){
var strurl = $(location).attr('href');
strurl = strurl.replace("kcdf.or.kr", "www.kcdf.or.kr");
window.location.replace(strurl);
}
}
//레이어 팝업 띄우기
<c:forEach var="popupListData" items="${popupList}" varStatus="status" end="10">
<c:if test="${popupListData.popupType eq 'L'}">
if(fnGetCookie('layer_${popupListData.popupId}') == null){
$("#layer_pop_${popupListData.popupId}").fadeIn();
}
</c:if>
</c:forEach>
//윈도우 팝업 띄우기
<c:forEach var="popupListData" items="${popupList}" varStatus="status" end="10">
<c:if test="${popupListData.popupType eq 'W'}">
if(fnGetCookie('${popupListData.popupId}') == null ){
fn_openPopup('${popupListData.popupId}', '${popupListData.sortNum}','${popupListData.popupWidthSize}','${popupListData.popupVrticlSize}','${popupListData.popupWidthLc}','${popupListData.popupVrticlLc}');
}
</c:if>
</c:forEach>
});
function fn_layerClose(popupId){
$("#layer_pop_"+popupId).fadeOut();
}
function fn_egov_inqire_notice(bbsId, nttId) {
document.frm.bbsId.value = bbsId;
document.frm.nttId.value = nttId;
document.frm.method = "get";
if("EXTBBSM_000000000002" == bbsId){ //입찰
document.frm.action = "/web/cop/bbs/viewExtBoard.do";
}else{
document.frm.action = "/web/cop/bbsWeb/selectBoardArticle.do";
}
//document.frm.action = "/web/cop/bbsWeb/selectBoardArticle.do";
document.frm.submit();
}
function fn_egov_inqire_notice_secd(bbsId, nttId, seCd) {
document.frmSecd.bbsId.value = bbsId;
document.frmSecd.nttId.value = nttId;
document.frmSecd.seCd.value = seCd;
document.frmSecd.method = "get";
if("EXTBBSM_000000000002" == bbsId){ //입찰
document.frmSecd.action = "/web/cop/bbs/selectExtBbsList.do";
document.frmSecd.submit();
}else{
document.frmSecd.action = "/web/cop/bbsWeb/selectBoardArticle.do";
document.frmSecd.submit();
}
}
function checkMobileDevice() {
var mobileKeyWords = new Array('Android', 'iPhone', 'iPod', 'BlackBerry', 'Windows CE', 'SAMSUNG', 'LG', 'MOT', 'SonyEricsson');
for (var info in mobileKeyWords) {
if (navigator.userAgent.match(mobileKeyWords[info]) != null) {
return true;
}
}
return false;
}
function fn_egov_addNotice() {
document.frm.method = "get";
document.frm.bbsId.value = "BBSMSTR_000000000153";
document.frm.action = "/web/cop/bbs/addBoardArticle.do";
document.frm.submit();
}
/* ********************************************************
* 팝업창 오픈 쿠키 정보 OPEN
******************************************************** */
function fnGetCookie(name) {
var prefix = name + "=";
var cookieStartIndex = document.cookie.indexOf(prefix);
if (cookieStartIndex == -1) return null;
var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length;
return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
}
/* ********************************************************
* 쿠키설정
******************************************************** */
function fnSetCookiePopup( name, value, expiredays ) {
var todayDate = new Date();
todayDate.setDate( todayDate.getDate() + expiredays );
document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + todayDate.toGMTString() + ";"
}
/* ********************************************************
* 체크버튼 클릭시
******************************************************** */
function fnPopupCheck(popupId , typeFlag) {
fnSetCookiePopup( typeFlag+"_"+popupId , "done" , 1);
fn_layerClose(popupId);
}
function fn_openPopup(popupId,seq,width,height,x,y){
if(width < 200){
width = 200;
}
if(height < 200){
height = 200;
}
var openPopup = window.open('<c:url value='/web/main/EgovPopup.do'/>'+'?popupId='+popupId,
'pop_'+popupId,'width='+width+',height='+height+',top='+y+',left='+x);
if(openPopup != null){
if (window.focus) {openPopup.focus()}
}
}
</script>
<style>
.btn{ background: none;}
.btn:hover {background:none;}
</style>
</head>
<body>
<section class="main">
<!-- 메인비주얼 -->
<!-- <div class="visual_txt"><img src="/img/index/visual_txt.png" alt="한국공예디자인문화진흥원"></div> -->
<div id="slides" class="visual" style="cursor:pointer;">
<c:forEach var="result" items="${mainzoneList}" varStatus="status">
<img alt="${result.mazNm}" onerror="this.src='/images/no_img.jpg'" src='<c:url value='/cmm/fms/getImage.do'/>?atchFileId=<c:out value="${result.mainzoneImageFile}"/>'
<c:if test="${not empty result.mlink}" >
onclick="window.open('${result.mlink}', '_blank');"
</c:if>
/>
</c:forEach>
</div>
<script src="/js/jquery.slides.min.js"></script>
<script type="text/javascript">
$('#slides').slidesjs({
play: {
active: true,
auto: false,
interval: 9000,
navigation:false,
swap: true,
effect : "slide"
},
navigation: {
active: true
},
});
</script>
<!-- 메인 공지글 -->
<div class="main_board_pc">
<div class="main_board">
<div class="main_board_box">
<div class="board_title">공지</div>
<div class="board_more"><a href="/web/cop/bbsWeb/selectBoardList.do?bbsId=BBSMSTR_000000000122">more +</a></div>
<div class="board_list">
<ul>
<c:forEach var="result" items="${noticeMap}" varStatus="status">
<li><span class="lt_list">
<a href="javascript:fn_egov_inqire_notice('${result.bbsId}', '${result.nttId}');">
<c:out value="${result.nttSj}" />
</a>
</span><span class="lt_date">${result.frstRegisterPnttm}</span></li>
</c:forEach>
</ul>
</div>
</div>
<div class="main_board_box">
<div class="board_title">사업</div>
<div class="board_more"><a href="/web/cop/bbsWeb/selectBoardList.do?bbsId=BBSMSTR_000000000119&seCd=SE01">more +</a></div>
<div class="board_list">
<ul>
<c:forEach var="result" items="${bizMap}" varStatus="status">
<li><span class="lt_list">
<a href="javascript:fn_egov_inqire_notice_secd('${result.bbsId}', '${result.nttId}' , '${result.seCd}' );">
<c:out value="${result.nttSj}" />
</a>
</span><span class="lt_date">${result.frstRegisterPnttm}</span></li>
</c:forEach>
</ul>
</div>
</div>
<div class="main_board_box">
<div class="board_title">입찰</div>
<div class="board_more"><a href="/web/cop/bbs/selectExtBbsList.do?bbsId=EXTBBSM_000000000002">more +</a></div>
<div class="board_list">
<ul>
<c:forEach var="result" items="${bidMap}" varStatus="status">
<li><span class="lt_list">
<a href="javascript:fn_egov_inqire_notice('${result.bbsId}', '${result.nttId}');">
<c:out value="${result.nttSj}" />
</a>
</span><span class="lt_date">${result.frstRegisterPnttm}</span></li>
</c:forEach>
</ul>
</div>
</div>
<div class="main_board_box">
<div class="board_title">채용</div>
<div class="board_more"><a href="/web/cop/bbsWeb/selectBoardList.do?bbsId=BBSMSTR_000000000124&seCd=SE01">more +</a></div>
<div class="board_list">
<ul>
<c:forEach var="result" items="${hireMap}" varStatus="status">
<li><span class="lt_list">
<a href="javascript:fn_egov_inqire_notice_secd('${result.bbsId}', '${result.nttId}' , '${result.seCd}' );">
<c:out value="${result.nttSj}" />
</a>
</span><span class="lt_date">${result.frstRegisterPnttm}</span></li>
</c:forEach>
</ul>
</div>
</div>
</div>
</div>
<div class="main_board_mobile">
<ul class="tab_main">
<li class="current" data-tab="tab1">공지</li>
<li data-tab="tab2">입찰</li>
<li data-tab="tab3">사업</li>
<li data-tab="tab4">채용</li>
</ul>
<!--공지-->
<div class="tabcontent current" id="tab1">
<div class="main_board_box">
<div class="board_more"><a href="/web/cop/bbsWeb/selectBoardList.do?bbsId=BBSMSTR_000000000122">more +</a></div>
<div class="board_list">
<ul>
<c:forEach var="result" items="${noticeMap}" varStatus="status">
<li><span class="lt_list">
<a href="javascript:fn_egov_inqire_notice('${result.bbsId}', '${result.nttId}');">
<c:out value="${result.nttSj}" />
</a>
</span><span class="lt_date">${result.frstRegisterPnttm}</span></li>
</c:forEach>
</ul>
</div>
</div>
</div>
<!--입찰-->
<div class="tabcontent" id="tab2">
<div class="main_board_box">
<div class="board_more"><a href="/web/cop/bbs/selectExtBbsList.do?bbsId=EXTBBSM_000000000002">more +</a></div>
<div class="board_list">
<ul>
<c:forEach var="result" items="${bidMap}" varStatus="status">
<li><span class="lt_list">
<a href="javascript:fn_egov_inqire_notice('${result.bbsId}', '${result.nttId}' );">
<c:out value="${result.nttSj}" />
</a>
</span><span class="lt_date">${result.frstRegisterPnttm}</span></li>
</c:forEach>
</ul>
</div>
</div>
</div>
<!--사업-->
<div class="tabcontent" id="tab3">
<div class="main_board_box">
<div class="board_more"><a href="/web/cop/bbsWeb/selectBoardList.do?bbsId=BBSMSTR_000000000119&seCd=SE01">more +</a></div>
<div class="board_list">
<ul>
<c:forEach var="result" items="${bizMap}" varStatus="status">
<li><span class="lt_list">
<a href="javascript:fn_egov_inqire_notice_secd('${result.bbsId}', '${result.nttId}' , '${result.seCd}' );">
<c:out value="${result.nttSj}" />
</a>
</span><span class="lt_date">${result.frstRegisterPnttm}</span></li>
</c:forEach>
</ul>
</div>
</div>
<script>
$(function() {
$('ul.tab_main li').click(function() {
var activeTab = $(this).attr('data-tab');
$('ul.tab_main li').removeClass('current');
$('.tabcontent').removeClass('current');
$(this).addClass('current');
$('#' + activeTab).addClass('current');
})
});
</script>
</div>
<!--채용-->
<div class="tabcontent" id="tab4">
<div class="main_board_box">
<div class="board_more"><a href="/web/cop/bbsWeb/selectBoardList.do?bbsId=BBSMSTR_000000000124&seCd=SE01">more +</a></div>
<div class="board_list">
<ul>
<c:forEach var="result" items="${hireMap}" varStatus="status">
<li><span class="lt_list">
<a href="javascript:fn_egov_inqire_notice_secd('${result.bbsId}', '${result.nttId}' , '${result.seCd}' );">
<c:out value="${result.nttSj}" />
</a>
</span><span class="lt_date">${result.frstRegisterPnttm}</span></li>
</c:forEach>
</ul>
</div>
</div>
</div>
</div>
<!-- 메인 소식 -->
<div class="main_notice">
<div class="main_title_wr"><img src="/img/index/main_notice_icon.png" alt="아이콘"> 한국공예디자인문화진흥원 소식</div>
<div class="flexslider main_notice_img">
<ul class="slides">
<c:forEach var="result" items="${popupzoneList_01}" varStatus="status">
<li>
<div alt="${result.pozNm}" style="background:url(<c:url value='/cmm/fms/getImage.do'/>?atchFileId=<c:out value="${result.popupzoneImageFile}"/>); cursor:pointer;"
<c:if test="${result.istarget eq 'C'}" >
onclick="javascript:location.href='${result.mlink}';"
</c:if>
<c:if test="${result.istarget eq 'N'}" >
onclick="window.open('${result.mlink}', '_blank');"
</c:if>
>
</div>
</li>
</c:forEach>
</ul>
</div>
<!-- FlexSlider -->
<script type="text/javascript">
(function() {
// store the slider in a local variable
var $window = $(window),
flexslider = { vars:{} };
// tiny helper function to add breakpoints
function getGridSize() {
return (window.innerWidth < 600) ? 1 :
(window.innerWidth < 900) ? 2 : 3;
}
$window.load(function() {
$('.flexslider').flexslider({
slideshow: false,
animation: "slide",
animationSpeed: 400,
animationLoop: false,
itemWidth: 463,
itemMargin: 46,
minItems: getGridSize(), // use function to pull in initial value
maxItems: getGridSize(), // use function to pull in initial value
start: function(slider){
$('body').removeClass('loading');
flexslider = slider;
}
});
});
// check grid size on resize event
$window.resize(function() {
var gridSize = getGridSize();
flexslider.vars.minItems = gridSize;
flexslider.vars.maxItems = gridSize;
});
}());
</script>
</div>
<div class="main_gal_wr">
<div class="main_top_wr">
<!-- KCDF 갤러리 안내 -->
<div class="main_gal_left">
<div class="main_title_wr"><img src="/img/index/main_notice_icon.png" alt="아이콘"> KCDF 갤러리 안내</div>
<div class="main_gal_menu">
<ul>
<li><a href="/web/content.do?proFn=kcdf_gallery" target="_blank"><img src="/img/index/main_gallery_menu01.png" alt="KCDF 갤러리 소개"></a></li>
<li><a href="/web/cop/resve/selectResveList.do?viewCnd=resveList" target="_blank"><img src="/img/index/main_gallery_menu02.png" alt="KCDF 갤러리 대관신청"></a></li>
<li><a href="https://library.kcdf.kr/web/" target="_blank" ><img src="/img/index/main_gallery_menu03.png" alt="KCDF 도서관 바로가기"></a></li>
<li><a href="http://kcdfshop.kr/" target="_blank" ><img src="/img/index/main_gallery_menu04.png" alt="KCDF 온라인샵 바로가기"></a></li>
</ul>
</div>
</div>
<!-- KCDF 갤러리 전시 -->
<div class="main_gal_right">
<div class="main_title_wr"><img src="/img/index/main_gallery2_icon.png" alt="아이콘"> KCDF 갤러리 전시</div>
<div class="flexslider02 main_gal_img">
<ul class="slides">
<c:forEach var="result" items="${popupzoneList_02}" varStatus="status">
<li>
<div alt="${result.pozNm}" style="cursor:pointer; background-image:url(<c:url value='/cmm/fms/getImage.do'/>?atchFileId=<c:out value="${result.popupzoneImageFile}"/>);"
<c:if test="${result.istarget eq 'C'}" >
onclick="javascript:location.href='${result.mlink}';"
</c:if>
<c:if test="${result.istarget eq 'N'}" >
onclick="window.open('${result.mlink}', '_blank');"
</c:if>
>
</div>
</li>
</c:forEach>
</ul>
</div>
<!-- FlexSlider -->
<script type="text/javascript">
(function() {
// store the slider in a local variable
var $window = $(window),
flexslider = { vars:{} };
// tiny helper function to add breakpoints
function getGridSize() {
return (window.innerWidth < 600) ? 1 :
(window.innerWidth < 900) ? 1 : 1;
}
$window.load(function() {
$('.flexslider02').flexslider({
slideshow: false,
animation: "slide",
animationSpeed: 400,
animationLoop: false,
itemWidth: 463,
itemMargin: 10,
minItems: getGridSize(), // use function to pull in initial value
maxItems: getGridSize(), // use function to pull in initial value
start: function(slider){
$('body').removeClass('loading');
flexslider = slider;
}
});
});
// check grid size on resize event
$window.resize(function() {
var gridSize = getGridSize();
flexslider.vars.minItems = gridSize;
flexslider.vars.maxItems = gridSize;
});
}());
</script>
</div>
<div class="mobile_bottom">
<!-- KCDF 블로그 -->
<div class="main_blog">
<div class="main_title_wr"><img src="/img/index/main_blog_icon.png" alt="아이콘"> 한국공예디자인문화진흥원 블로그</div>
<ul class="main_blog_list">
<c:forEach var="result" items="${popupzoneList_03}" varStatus="status">
<li alt="${fn:substring(result.pozNm,0,7)}" style="background:url('<c:url value='/cmm/fms/getImage.do'/>?atchFileId=<c:out value="${result.popupzoneImageFile}"/>') no-repeat center #f3f3f3; background-size:cover;cursor:pointer;"
<c:if test="${result.istarget eq 'C'}" >
onclick="javascript:location.href='${result.mlink}';"
</c:if>
<c:if test="${result.istarget eq 'N'}" >
onclick="window.open('${result.mlink}', '_blank');"
</c:if>
>
<div class="blog_thum_bg" style="width: 100%;">${result.pozNm}</div></li>
</c:forEach>
</ul>
</div>
<!-- 우수문화상품지정제 190207 수정s -->
<c:if test="${not empty popupzoneList_04}" >
<div class="main_kribbon"><!-- 190207 링크추가 수정-->
<div class="kribbon_thumnail" alt="${popupzoneList_04[0].pozNm}" style="background:url('<c:url value='/cmm/fms/getImage.do'/>?atchFileId=<c:out value="${popupzoneList_04[0].popupzoneImageFile}"/>') no-repeat center; background-size:contain;"></div>
<div class="kribbon_left">
<div class="btn">
<a href="${popupzoneList_04[0].mlink}"
<c:if test="${popupzoneList_04[0].istarget ne 'C'}" >
target="_blank"
</c:if>
>바로가기</a>
</div>
</div>
<div class="kribbon_right">
<div class="title">우수문화상품지정제</div>
<div class="text">
우수문화상품 지정제도는
한국의 문화적 가치를 담은 우수문화상품을
지정하여 한복의 옷고름 모양을 딴
K-ribbon 마크를 부착하고, 체계적인
관리와 브랜드마케팅을 통해
‘코리아프리미엄’을 창출하고자 하는
제도 입니다.
<p class="maTop10">2015년 11월 부터 시행되었으며,
문화콘텐츠, 한복, 공예품, 한식·식품 등
한국을 대표할 수 있는 문화상품들을
대상으로 합니다. </p>
</div>
</div>
</div>
</c:if>
<!-- 정기구독 s 190207 수정-->
<c:if test="${not empty popupzoneList_05}" >
<div class="main_magazine"><!-- 190207 링크추가 수정-->
<div class="magazine_thumnail" alt="${popupzoneList_05[0].pozNm}" style="background:url('<c:url value='/cmm/fms/getImage.do'/>?atchFileId=<c:out value="${popupzoneList_05[0].popupzoneImageFile}"/>') no-repeat center; background-size:contain"></div>
<div class="btn">
<a href="${popupzoneList_05[0].mlink}"
<c:if test="${popupzoneList_05[0].istarget ne 'C'}" >
target="_blank"
</c:if>
><img src="/img/index/main_magazine_btn.png" alt="정기구독신청"></a></div>
<div class="text01">
「공예+디자인」은<br>
한국공예디자인문화진흥원이<br>
격월로 발행하는 공예·디자인<br>
전문간행물입니다.
</div>
<div class="text02">공예 + 디자인 격월발행</div>
</div>
</c:if>
</div>
</div>
</div>
<!-- 배너 -->
<div id="link_wrap">
<div class="link_wrap_1300">
<div class="flexslider03 banner_img">
<!--190207 수정 s-->
<ul class="slides">
<c:forEach var="banner" items="${bannerList}" varStatus="status">
<li>
<div alt="${banner.bannerNm}" style="background:url(<c:url value='/cmm/fms/getImage.do'/>?atchFileId=<c:out value="${banner.bannerImageFile}"/>) no-repeat center; background-size:contain ;cursor: pointer;";
<c:if test="${banner.istarget ne 'C'}" >
onclick="window.open('${banner.linkUrl}', '_blank');"
</c:if>
<c:if test="${banner.istarget eq 'C'}" >
onclick="window.open('${banner.linkUrl}', '_self');"
</c:if>
></div>
</li>
</c:forEach>
</ul>
<!--190207 수정 e-->
</div>
<!-- FlexSlider -->
<script type="text/javascript">
(function() {
// store the slider in a local variable
var $window = $(window),
flexslider = { vars:{} };
// tiny helper function to add breakpoints
function getGridSize() {
return (window.innerWidth < 500) ? 3 :
(window.innerWidth < 900) ? 5 : 8;
}
$window.load(function() {
$('.flexslider03').flexslider({
slideshow: false,
animation: "slide",
animationSpeed: 400,
animationLoop: false,
itemWidth: 140,
itemMargin: 30, // 190207 수정
minItems: getGridSize(), // use function to pull in initial value
maxItems: getGridSize(), // use function to pull in initial value
start: function(slider){
$('body').removeClass('loading');
flexslider = slider;
}
});
});
// check grid size on resize event
$window.resize(function() {
var gridSize = getGridSize();
flexslider.vars.minItems = gridSize;
flexslider.vars.maxItems = gridSize;
});
}());
</script>
</div>
</div>
</section>
<form name="frm" action="web/cop/bbsWeb/selectBoardArticle.do" method="get">
<input type="hidden" name="bbsId" />
<input type="hidden" name="nttId" value="0" />
</form>
<form name="frmSecd" action="web/cop/bbsWeb/selectBoardArticle.do" method="get">
<input type="hidden" name="bbsId" />
<input type="hidden" name="nttId" value="0" />
<input type="hidden" name="seCd" />
</form>
<!-- 레이어 팝업 -->
<c:if test="${fn:length(popupList) > 0}" >
<style type="text/css">
.pop-layer .pop-container {padding: 0px 0px;}
.pop-layer p.ctxt {color: #666;line-height: 25px;}
.pop-layer .btn-r {width: 100%; padding-top: 10px;border-top: 1px solid #DDD;text-align: right;}
.pop-layer {display: none;position: absolute;background-color: #fff;border: 1px solid #3571B5;z-index: 10;}
</style>
<c:forEach var="popupListData" items="${popupList}" varStatus="status" end="4">
<c:if test="${popupListData.popupType eq 'L'}">
<style type="text/css">
#layer_pop_${popupListData.popupId}{
top: ${popupListData.popupVrticlLc}px;
left: ${popupListData.popupWidthLc}px;
height: auto;
}
</style>
<div id="layer_pop_${popupListData.popupId}" class="pop-layer">
<div class="pop-container">
<div class="pop-conts">
<!--content //-->
${popupListData.nttCn}
<div class="btn-r">
<a href="#" onclick="fn_layerClose('${popupListData.popupId}'); return false;" class="btn-layerClose">Close</a>
<br/>
하루동안 창을 열지 않음 <input type="checkbox" name="chkPopup" value="" onClick="fnPopupCheck('${popupListData.popupId}' , 'layer')" title="하루동안창열지않기체크">
</div>
<!--// content-->
</div>
</div>
</div>
</c:if>
</c:forEach>
</c:if>
<!-- 레이어 팝업 끝-->
</body>
</html>

View File

@ -13,138 +13,18 @@
<script src="/publish/js/swiper.min.js"></script> <script src="/publish/js/swiper.min.js"></script>
<script type="text/javascript"> <script type="text/javascript">
let cookieCache = null; // 쿠키 데이터를 캐시할 변수
$(document).ready(function() { $(document).ready(function() {
// http => https 로 이동 // http => https 로 이동
if(${Env eq 'prod'}){ if(${Env eq 'prod'}){
httpsRedirect(); httpsRedirect();
} }
// 슬라이드 이미지 변경
//setMainSlideImgChange();
//슬라이드 이미지 변경 => Double
// 9월 30일 개천절
// 10월 4일 한글날
//setMainSlideImgChangeDouble();
//추석연휴 고객센터 안내 팝업
var holidayShow = false;
var rsvSDate = "2024-11-01";
var rsvEDate = "2024-11-01";
var now = new Date();
now = leadingZeros(now.getFullYear(), 4) + '-' + leadingZeros(now.getMonth() + 1, 2) + '-' + leadingZeros(now.getDate(), 2);
if (now < rsvSDate || now > rsvEDate) {
$('.pointPop').hide();
}
// 2단팝업 제거
var agreePrivateSDate = "2024-11-29";
var agreePrivateNow = new Date();
agreePrivateNow = leadingZeros(agreePrivateNow.getFullYear(), 4) + '-' + leadingZeros(agreePrivateNow.getMonth() + 1, 2) + '-' + leadingZeros(agreePrivateNow.getDate(), 2);
if (agreePrivateNow < agreePrivateSDate) {
$("#agreePrivatePop_20241129").show();
}else{
$("#agreePrivatePop_20241129").hide();
}
//개인정보처리방침 팝업 날짜 설정
var agreePrivateSDate = "2024-11-23";
var agreePrivateNow = new Date();
agreePrivateNow = leadingZeros(agreePrivateNow.getFullYear(), 4) + '-' + leadingZeros(agreePrivateNow.getMonth() + 1, 2) + '-' + leadingZeros(agreePrivateNow.getDate(), 2);
if (agreePrivateNow < agreePrivateSDate) {
$("#agreePrivatePop_20241121").show();
$("#agreePrivatePop_20241122").hide();
}else{
$("#agreePrivatePop_20241121").hide();
$("#agreePrivatePop_20241122").show();
}
//메인 팝업 호출 여부
var evntPopCk = fnGetCookie('layer_evntPayPop'); // 이벤트 쿠키
var cookieDelPopCk = fnGetCookie('layer_cookieDelPop'); // 브라우저 쿠키
var agreePrivatePopCk = fnGetCookie('layer_agreePrivatePop');
console.log("# 팝업 레이어 : START");
console.log("layer_evntPayPop : " + evntPopCk);
console.log("layer_cookieDelPop : " + cookieDelPopCk);
if(agreePrivatePopCk != null){//개인정보 및 이용약관 개정 팝업 노출, 3일안보기 쿠키 있으면 팝업 안모여준다.
$(".agreePrivatePop").css("display","none");
$(".agreePrivatePop").hide();
}
if(evntPopCk != null && cookieDelPopCk != null){//팝업 쿠키가 모두 있는 경우 안보여준다.
console.log("eventLayerPop : STEP 1. 이벤트 팝업 쿠키가 모두 있는 경우 안보여준다.");
$(".eventLayerPop").css("display","none");
$(".eventLayerPop").hide();
}else if(evntPopCk == null && cookieDelPopCk == null){// 이벤트 팝업 쿠키가 모두 없으면 팝업 보여주기
console.log("eventLayerPop : STEP 2. 이벤트 팝업 쿠키가 모두 없으면 팝업 보여주기.");
$(".eventLayerPop").css("display","block");
$(".eventLayerPop").show();
}else if(evntPopCk != null || cookieDelPopCk != null){
console.log("eventLayerPop : STEP 3. 이벤트 팝업 쿠키가 하나라도 있으면 보여주기");
$(".eventLayerPop").css("display", "block");
$(".eventLayerPop").show();
if (fnGetCookie('layer_evntPayPop') != null) { //첫결제 이벤트 쿠키가 없으면 보여주기
console.log("이벤트 쿠키 있음 : HIDE");
$('.payEventPop').css("display","none");
$('.payEventPop').hide();
}
if (fnGetCookie('layer_cookieDelPop') != null) { //포인트 안내 팝업, 3일 안보기 체크
console.log("포인트 쿠키 있음 : HIDE");
$('.delCookiePop').css("display","none");
$('.delCookiePop').hide();
}
}
//레이어 팝업이 하나도 없으면 배경도 안보이도록 처리
if($(".layer_popup:visible").length == 0){
$(".layer_popup_wrap").hide();
}
if (fnGetCookie('todayClose') != null) { //상단팝업
scrTop = $(window).scrollTop();
var bodyWid = $("body").width();
var windowHei = $("window").height();
var topBnnHei = $(".topBanner").height();
var hdHei = $("header").height();
$(".topBanner").hide();
$("header").removeClass("bnnOn");
$(".mainContent").removeClass("bnnOn");
$(".allMenu").removeClass("bnnOn");
}
/* if(fnGetCookie('tdClose') != null ){ //좌측팝업
$(".mainContent").removeClass("bnnOn");
$(".allMenu").removeClass("bnnOn");
$(".popLayer").removeClass("on");
} */
var bdWid = $("body").width();
if (fnGetCookie('tdClose') == null && bdWid > 769) { //좌측팝업
$(".mainContent").addClass("bnnOn");
$(".allMenu").addClass("bnnOn");
$(".popLayer").addClass("on");
}
//그림문자 리스트 불러오기 //그림문자 리스트 불러오기
document.letterForm.categoryCode.value = "best" document.letterForm.categoryCode.value = "best"
fnPhotoListAjax(); fnPhotoListAjax();
//장문문자 로딩시 데이터 불러오기
//fnLongLetterListBlind();
/* 메인-문자샘플 탭 선택 시 활성화 */ /* 메인-문자샘플 탭 선택 시 활성화 */
$(".tab_depth1 a").click(function() { $(".tab_depth1 a").click(function() {
@ -321,24 +201,14 @@ $(document).ready(function() {
/** /**
이벤트 팝업 호출 처리 이벤트 팝업 호출 처리
*/ */
/*
var payCount = '${payCount}'; var payCount = '${payCount}';
var eventYn = false; var eventYn = false;
<c:if test="${not empty resultEvent}"> <c:if test="${not empty resultEvent}">
eventYn = true; eventYn = true;
</c:if> </c:if>
var blineCode = '${blineCode}';
blineCode = $.trim(blineCode);
if (blineCode == null || blineCode == "" || blineCode == undefined) {
blineCode = "N";
}
console.log("");
console.log("이벤트 팝업 호출 처리");
console.log("payCount : " + payCount);
console.log("eventYn : " + eventYn);
console.log("blineCode : " + blineCode);
if(payCount < 1 && eventYn && blineCode == 'N'){//결제내역이 하나도 없고, 이벤트가 진행중이면 팝업 호출 if(payCount < 1 && eventYn && blineCode == 'N'){//결제내역이 하나도 없고, 이벤트가 진행중이면 팝업 호출
console.log("이벤트 팝업 함수 CALL"); console.log("이벤트 팝업 함수 CALL");
remoteEventPayPop(payCount); remoteEventPayPop(payCount);
@ -351,11 +221,130 @@ $(document).ready(function() {
if($(".layer_popup:visible").length == 0){ if($(".layer_popup:visible").length == 0){
$(".layer_popup_wrap").hide(); $(".layer_popup_wrap").hide();
} }
} } */
console.log("# 팝업 레이어 : END"); setTimeout(function () {
hidePopupByCookie();
}, 300);
}); });
/* ********************************************************
* 쿠키설정
******************************************************** */
/**
* 쿠키 설정 함수
* @param {string} name - 쿠키 이름
* @param {string} value - 쿠키 값
* @param {number} days - 쿠키 유지 기간 (일 단위)
*/
function setMainCookie(name, value, expires) {
var todayDate = new Date();
todayDate.setDate(todayDate.getDate() + expires);
document.cookie = name + "=" + escape(value) + "; path=/; expires=" + todayDate.toGMTString() + ";"
// 캐시에도 즉시 반영하여 최신 데이터 유지
if (cookieCache !== null) {
cookieCache[name] = value;
}
}
/**
* 쿠키 가져오기 함수
* @param {string} name - 가져올 쿠키의 이름
* @returns {string|null} - 쿠키 값 (없으면 null 반환)
*/
function getMainCookie(name) {
let allCookies = getAllCookies(); // 쿠키 전체를 한 번만 가져옴
return allCookies[name] || null; // 해당 쿠키가 있으면 반환, 없으면 null
}
/**
* 전체 쿠키를 한 번만 읽어서 객체(Map)로 변환하는 함수
*/
function getAllCookies() {
if (cookieCache !== null) {
return cookieCache; // 기존 캐시된 값이 있으면 재조회하지 않고 반환
}
let cookieObj = {};
let cookies = document.cookie.split(";");
for (let i = 0; i < cookies.length; i++) {
let c = cookies[i].trim();
let parts = c.split("=");
let key = parts[0];
let value = parts.slice(1).join("=");
cookieObj[key] = value;
}
cookieCache = cookieObj; // 쿠키 데이터를 캐시에 저장
console.log('cookieCache : ', cookieCache);
return cookieObj;
}
/**
* "3일간 보지 않음" 체크 시 실행되는 함수
* @param {string} popupId - 닫을 팝업 ID
*/
window.fnPopupChk = function (popupId) {
setMainCookie("hidePopup_" + popupId, "true", 3); // 3일간 유지되는 쿠키 설정
$("#" + popupId).hide(); // 해당 팝업 즉시 숨김 처리
};
/**
* 페이지 로딩 시 쿠키 확인 후 팝업 숨김 처리
*/
function hidePopupByCookie() {
let showPopup = false; // 팝업이 하나라도 보일 경우 true로 변경
$(".layer_popup").each(function () {
let popupId = $(this).attr("id"); // 현재 팝업의 ID 가져오기
console.log('popupId : ', popupId);
if (getMainCookie("hidePopup_" + popupId)) {
$(this).hide(); // 쿠키가 존재하면 해당 팝업 숨김 처리
} else {
$(this).show(); // 쿠키가 없으면 해당 팝업 표시
showPopup = true; // 팝업이 하나라도 보이면 true 설정
}
});
// 쿠키에 의해 숨겨지지 않은 팝업이 하나라도 있다면 `.eventLayerPop`을 표시
if (showPopup) {
$(".eventLayerPop").show();
} else {
$(".eventLayerPop").hide();
}
}
/**
* 팝업 닫기 버튼 클릭 시 해당 팝업 숨김 처리
*/
$(".popup_close").on("click", function () {
$(this).closest(".layer_popup").hide(); // 가장 가까운 `.layer_popup` 요소 숨김
hidePopupByCookie(); // 전체 팝업 표시 여부 다시 확인
});
/* ********************************************************
* //쿠키설정
******************************************************** */
function leadingZeros(n, digits) { function leadingZeros(n, digits) {
var zero = ''; var zero = '';
n = n.toString(); n = n.toString();
@ -367,90 +356,6 @@ function leadingZeros(n, digits) {
return zero + n; return zero + n;
} }
// 슬라이드 이미지 변경
function setMainSlideImgChange() {
var parentsDayShow = false;
var rsvDate = "2023-10-10";
var now = new Date();
now = leadingZeros(now.getFullYear(), 4) + '-' + leadingZeros(now.getMonth() + 1, 2) + '-' + leadingZeros(now.getDate(), 2);
if (now >= rsvDate) {
parentsDayShow = true;
}
// 석가탄신일 => 현충일 이미지로 변경
if (parentsDayShow == true) {
$("#mainSlideImg_1001").attr("src", "/publish/images/main/f_visual_01_20231006.jpg");
$("#mainSlideImg_1001").attr("alt", "문자는 이제, 문자온! 단 한번, 국내 최저가! 인생 최저가! 첫결제 단문 7.5원 장문 32원 그림 59원 Halloween 즐겁고 유쾌한 할로윈데이 보내세요 가을엔 독서 같이 책읽으실래요?");
$("#mainSlideImg_1002").attr("src", "/publish/images/main/f_visual_03_20231006.jpg");
$("#mainSlideImg_1002").attr("alt", "다른 사이트에는 없다! 오직 문자온에만 있다! 최고의 디자이너가 직접 제작하는 그림문자 맞춤제작을 통해 나만의 문자를 디자인 해보세요. 가을은 캠핑의 계절! 낭만캠핑 캠핑하기 좋은 계절, 가을이 돌아왔습니다. 즐거운 캠핑을 떠나고 싶으신가요? 지금 이벤트에 참여하시면, 캠핑 지원금을 드립니다. 지금 바로 참여하세요! 즐거운 캠핑 지원금 문자온에서 확인해보세요! HALLOWEEN 할로윈이벤트 이벤트에 참여하시고 무시무시한 혜택을 받아보세요 이벤트 기간 2099.10.01 10.31 이벤트 대상 10,000원 이상 구매한 모든 고객 event 01 5만원 이상 구매시 5,000원할인쿠폰 증정! event02 이벤트 기간동안 무료배송! event03 어플 설치 시 10% 추가 할인 쿠폰 증정! HALLOWEEN 할로윈 코스튬 할로윈 분위기에 맞게 코스튬을 하고 와요! 할로윈 CAKE 할로윈을 맞이하여 호박케이크를 만들어봐요! 문자온 영어학원 T.031.123.4567");
// Main Visual Swiper
getMainVisualSwiper();
}
}
//슬라이드 이미지 변경 => Double
// 9월 30일 개천절
// 10월 4일 한글날
function setMainSlideImgChangeDouble() {
var showMainSlideImg1 = false;
var showMainSlideImg2 = false;
var rsvDate1 = "2023-09-30";
var rsvDate2 = "2023-10-04";
var now = new Date();
now = leadingZeros(now.getFullYear(), 4) + '-' + leadingZeros(now.getMonth() + 1, 2) + '-' + leadingZeros(now.getDate(), 2);
if (now >= rsvDate2) {
showMainSlideImg2 = true;
}
else if (now >= rsvDate1) {
showMainSlideImg1 = true;
}
if (showMainSlideImg1 == true) {
$("#mainSlideImg_1001").attr("src", "/publish/images/main/f_visual_01_20230930.jpg");
$("#mainSlideImg_1001").attr("alt", "문자는 이제, 문자온! 단 한번, 국내 최저가! 인생 최저가! 첫결제 단문 7.5원 장문 32원 그림 59원 책과 함께 하는 가을 여행 10월 9일 한글날 아름다운 우리말을 사용하며, 행복한 한글날 보내시길 바랍니다.");
$("#mainSlideImg_1002").attr("src", "/publish/images/main/f_visual_03_20230930.jpg");
$("#mainSlideImg_1002").attr("alt", "다른 사이트에는 없다! 오직 문자온에만 있다! 최고의 디자이너가 직접 제작하는 그림문자 맞춤제작을 통해 나만의 문자를 디자인 해보세요. AUTUMN 가을맞이 정기세일 9.15-10.15 가을맞이 특별한 세일 전품목 최대 70% 할인의 기회를 누리세요! 10월 3일(화) 휴진 개천절 휴진안내 예약 및 내원에 착오 없으시길 바랍니다. 건강한 10월 보내세요 S M T W T F S 1 2-3(휴진) 4 5 6 7 10월 3일은 개천절은 하늘이 열린날 개천절 휴/진/안/내");
// Main Visual Swiper
getMainVisualSwiper();
}
if (showMainSlideImg2 == true) {
$("#mainSlideImg_1001").attr("src", "/publish/images/main/f_visual_01_20231004.jpg");
$("#mainSlideImg_1001").attr("alt", "문자는 이제, 문자온! 단 한번, 국내 최저가! 인생 최저가! 첫결제 단문 7.5원 장문 32원 그림 59원 책과 함께 하는 가을 여행 10월 9일 한글날 아름다운 우리말을 사용하며, 행복한 한글날 보내시길 바랍니다.");
$("#mainSlideImg_1002").attr("src", "/publish/images/main/f_visual_03_20231004.jpg");
$("#mainSlideImg_1002").attr("alt", "다른 사이트에는 없다! 오직 문자온에만 있다! 최고의 디자이너가 직접 제작하는 그림문자 맞춤제작을 통해 나만의 문자를 디자인 해보세요. Fall in Music Autumn Concert 09/15(토) 출연가수 온밴드, 온스파, 온와이스, 온뱅, 문자아이들, 온마이걸 주관: 문자온 코리아 협찬: 문자온추진위원회 후원 : 문자온추진위원회 한글날 한글날 이벤트 3행시 짓기 #한글날 #쿠폰 #이벤트 #좋아요 #댓글 이벤트 기간 2023.10.01 ~ 2023.10.06 당첨상품 음료 기프티콘 쿠폰(200명) 100% 국내산 유기농 우리김치 김장김치 예약판매 최적의 산지에서 수확한 신선한 배추와 엄선된 양념으로 보다 깊은 감칠맛을 선사합니다. 행사기간 2029.10.20~11.7");
// Main Visual Swiper
getMainVisualSwiper();
}
}
// Main Visual Swiper
function getMainVisualSwiper() {
var mainSwiper = new Swiper('.visual_swiper', {
effect: "fade",
slidesPerView: 1,
spaceBetween: 0,
speed : 400,
loop: true,
autoplay: {
delay: 3000,
disableOnInteraction: false,
},
pagination: {
el: '.swiper-pagination',
clickable: true,
},
navigation: {
nextEl: '.visual_swiper .swiper-button-next',
prevEl: '.visual_swiper .swiper-button-prev',
},
});
}
//http => https 로 이동 //http => https 로 이동
function httpsRedirect() { function httpsRedirect() {
@ -505,6 +410,8 @@ function addrRecvListAjax() {
}); });
} }
//Show Html //Show Html
function getAddrRecvListShow(jsonList, addrRecvListSize) { function getAddrRecvListShow(jsonList, addrRecvListSize) {
var addrGrpId = ""; var addrGrpId = "";
@ -780,14 +687,6 @@ function fnPhotoListAjax() {
}); });
} }
//메인화면 첫 로딩시 인기장문문자 히든 시켜두기
function fnLongLetterListBlind(){
fnLetterListAjax();
$("#photoLoad").css('display','block')
$("#letterLoad").css('display','none')
}
//장문, 단문 문자 샘플 로드 //장문, 단문 문자 샘플 로드
function fnLetterListAjax() { function fnLetterListAjax() {
@ -896,65 +795,7 @@ function fn_egov_inqire_notice(bbsId, nttId) {
document.searchForm.submit(); document.searchForm.submit();
} }
/* ********************************************************
* 쿠키설정
******************************************************** */
//쿠키설정
function fnSetCookieEventPopup(name, value, expiredays) {
console.log("cash name ::: " + name);
var todayDate = new Date();
todayDate.setDate(todayDate.getDate() + expiredays);
document.cookie = name + "=" + escape(value) + "; path=/; expires=" + todayDate.toGMTString() + ";"
}
//쿠키정보 가져오기
function fnGetCookie(name) {
var prefix = name + "=";
var cookieStartIndex = document.cookie.indexOf(prefix);
if (cookieStartIndex == -1) return null;
var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length;
return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
}
/* ********************************************************
* 체크버튼 클릭시
******************************************************** */
function fnPopupChk(popupId , typeFlag) {
var pcVal = $('#'+popupId).is(':checked');
if(pcVal){
fnSetCookieEventPopup(typeFlag+"_"+popupId , "done" , 3);
}
if(popupId == 'cookieDelPop'){
console.log(popupId);
$('.cookieDelPopClose').click(); //팝업 자동으로 닫기
}
if(popupId == 'evntPayPop'){
console.log(popupId);
$('.evntPayPopClose').click(); //팝업 자동으로 닫기
}
if(popupId == 'pointPop'){
console.log(popupId);
$('.pointPopClose').click(); //팝업 자동으로 닫기
}
if(popupId == 'agreePrivatePop'){
console.log(popupId);
$('.agreePrivatePopClose').click(); //팝업 자동으로 닫기
}
//fn_layerClose(popupId);
//레이어 팝업이 하나도 없으면 배경도 안보이도록 처리
if($(".layer_popup:visible").length == 0){
$(".layer_popup_wrap").hide();
}
}
function fnMainImgSendMsg(atchFileId, fileSn, strImgPath){ function fnMainImgSendMsg(atchFileId, fileSn, strImgPath){
@ -1034,12 +875,12 @@ function popScrCloseSetting(){
//이벤트 팝업 호출 //이벤트 팝업 호출
function remoteEventPayPop(payCount) { /* function remoteEventPayPop(payCount) {
if (fnGetCookie('layer_evntPayPop') != null) { //첫결제 이벤트 팝업 3일 안보기 체크 if (fnGetCookie('layer_evntPayPop') != null) { //첫결제 이벤트 팝업 3일 안보기 체크
console.log("이벤트 쿠키 있음 : HIDE"); console.log("이벤트 쿠키 있음 : HIDE");
$('.payEventPop').css("display","none"); // $('.payEventPop').css("display","none");
$('.payEventPop').hide(); // $('.payEventPop').hide();
}else{ }else{
console.log("이벤트 쿠키 없음 : SHOW"); console.log("이벤트 쿠키 없음 : SHOW");
@ -1051,9 +892,9 @@ function remoteEventPayPop(payCount) {
window.open("about:blank", 'eventPayPop', 'width=700, height=700, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbar=no'); window.open("about:blank", 'eventPayPop', 'width=700, height=700, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbar=no');
document.eventForm.action = "<c:url value='/web/event/selectEventPopAjax.do'/>"; document.eventForm.action = "<c:url value='/web/event/selectEventPopAjax.do'/>";
document.eventForm.target = "eventPayPop"; document.eventForm.target = "eventPayPop";
document.eventForm.submit(); */ document.eventForm.submit();
} }
*/
function fnEventLoginChk(){ function fnEventLoginChk(){
var userId = '${userId}'; var userId = '${userId}';
@ -1201,32 +1042,41 @@ function fn_click_banner_add_stat(bannerMenuCode){
</form> </form>
<!-- 이벤트 팝업 --> <!-- 이벤트 팝업 -->
<div class="layer_popup_wrap eventLayerPop" style="display:none;"> <div class="layer_popup_wrap eventLayerPop" style="display:none; ">
<!-- <div class="layer_popup_wrap eventLayerPop"> -->
<div class="popup_inner"> <div class="popup_inner">
<c:forEach var="result" items="${mainPopupList}" varStatus="status">
<div class="layer_popup" id="<c:out value='${result.popId}'/>">
<div class="layer_popup_cont">
<img src="/cmm/fms/getImage.do?atchFileId=<c:out value='${result.mainzoneImageFile}'/>"
alt="<c:out value='${result.content}'/>"
<c:if test="${not empty result.mainPopupLinkList}"> usemap="#<c:out value='${result.popId}'/>map"</c:if> />
<c:if test="${not empty result.mainPopupLinkList }">
<map name="${result.popId }map">
<c:forEach var="low" items="${result.mainPopupLinkList }">
<area href="${low.mlink }" coords="${low.coords }" shape="rect">
</c:forEach>
</map>
</c:if>
</div>
<div class="popup_btm">
<input type="checkbox" id="label${status.index }"
onclick="javascript:fnPopupChk('<c:out value='${result.popId}'/>')">
<label for="label${status.index }">3일간 열지 않음</label>
<button type="button" class="popup_close <c:out value='${result.popId}'/>Close">
<img src="/publish/images/main/btn_popup_close01.png" alt="팝업닫기">
</button>
</div>
</div>
</c:forEach>
</div>
</div>
<%-- <div class="layer_popup pointPop chusPopup">
<div class="layer_popup_cont">
<img src="/publish/images/main/popup03.jpg" alt="[추석 연휴 고객센터 운영 안내] 풍성하고 넉넉한 한가위 되시길 기원하며, 추석 연휴 동안의 고객센터 운영에 대하여 안내드립니다. 연휴기간 : 09월 16일(월) ~ 09월 18일(수) - 고객센터(1551-8011)를 통한 전화상담은 운영되지 않습니다. - 온라인(카카오톡/홈페이지1:1문의/E-mail) 상담은 24시간 접수 가능합니다. - 접수된 문의는 순차적으로 처리되며 빠른 시일 내에 답변드리도록 하겠습니다. 감사합니다">
</div>
<div class="popup_btm">
<input type="checkbox" id="pointPop" name="pointPop" onclick="javascript:fnPopupChk('pointPop' , 'layer')"><label for="pointPop">3일간 열지 않음</label>
<button type="button" class="popup_close pointPopClose"><img src="/publish/images/main/btn_popup_close01.png" alt="팝업닫기"></button>
</div>
</div> --%>
<!-- 20241101 작업공지 팝업 -->
<div class="layer_popup pointPop">
<div class="layer_popup_cont">
<img src="/publish/images/main/popup05_241101.jpg" alt="작업공지 문자온 대표전화 서비스 일시 중단 안내 ARS시스템 점검으로 인하여 다음과 같이 대표전화 서비스가 일시 중단되오니 서비스 이용에 참고하시기 바랍니다.작업일시 : 2024.11.01(금), 15:00 ~ 17:30 작업내용 : ARS시스템 정기점검 작업영향 : 작업시간 동안 고객센터(1551-8011)를 통한 전화상담 중지 ※ 온라인(카카오톡/홈페이지1:1문의/E-mail) 상담은 가능하며, 접수된 문의는 빠른 시일 내에 순차적으로 답변드리도록 하겠습니다. 감사합니다.">
</div>
<div class="popup_btm">
<input type="checkbox" id="pointPop" name="pointPop" onclick="javascript:fnPopupChk('pointPop' , 'layer')"><label for="pointPop">3일간 열지 않음</label>
<button type="button" class="popup_close pointPopClose"><img src="/publish/images/main/btn_popup_close01.png" alt="팝업닫기"></button>
</div>
</div>
<!-- 20241028 이용약관, 개인정보처리방침 팝업 --> <!-- 20241028 이용약관, 개인정보처리방침 팝업 -->
<div class="layer_popup agreePrivatePop" id="agreePrivatePop_20241105" style="display: none;"> <!-- <div class="layer_popup agreePrivatePop" id="agreePrivatePop_20241105">
<div class="layer_popup_cont"> <div class="layer_popup_cont">
<img src="/publish/images/main/popup04_241028.jpg" alt="이용약관, 개인정보처리방침 개정 안내 변함없는 문자온 서비스 이용에 감사의 말씀 드립니다. 당사 이용약관 및 개인정보처리방침이 개정되오니 서비스 이용에 참고하시기 바랍니다. 이용약관 공지사항 개인정보처리방침 공지사항 항상 최선의 서비스를 제공할 수 있도록 노력하겠습니다. 감사합니다." usemap="#popup-service-map"> <img src="/publish/images/main/popup04_241028.jpg" alt="이용약관, 개인정보처리방침 개정 안내 변함없는 문자온 서비스 이용에 감사의 말씀 드립니다. 당사 이용약관 및 개인정보처리방침이 개정되오니 서비스 이용에 참고하시기 바랍니다. 이용약관 공지사항 개인정보처리방침 공지사항 항상 최선의 서비스를 제공할 수 있도록 노력하겠습니다. 감사합니다." usemap="#popup-service-map">
<map name="popup-service-map"> <map name="popup-service-map">
@ -1238,70 +1088,15 @@ function fn_click_banner_add_stat(bannerMenuCode){
<input type="checkbox" id="agreePrivatePop" name="agreePrivatePop" onclick="javascript:fnPopupChk('agreePrivatePop' , 'layer')"><label for="agreePrivatePop">3일간 열지 않음</label> <input type="checkbox" id="agreePrivatePop" name="agreePrivatePop" onclick="javascript:fnPopupChk('agreePrivatePop' , 'layer')"><label for="agreePrivatePop">3일간 열지 않음</label>
<button type="button" class="popup_close agreePrivatePopClose"><img src="/publish/images/main/btn_popup_close01.png" alt="팝업닫기"></button> <button type="button" class="popup_close agreePrivatePopClose"><img src="/publish/images/main/btn_popup_close01.png" alt="팝업닫기"></button>
</div> </div>
</div> </div> -->
<!-- 20241105 이용약관 팝업 -->
<div class="layer_popup agreePrivatePop" id="agreePrivatePop_20241106" style="display: none;">
<div class="layer_popup_cont">
<img src="/publish/images/main/popup04_241105.jpg" alt="이용약관 개정 안내 변함없는 문자온 서비스 이용에 감사의 말씀 드립니다. 당사 이용약관이 개정되오니 서비스 이용에 참고하시기 바랍니다. 이용약관 공지사항 항상 최선의 서비스를 제공할 수 있도록 노력하겠습니다. 감사합니다." usemap="#popup-use-map">
<map name="popup-use-map">
<area href="https://www.munjaon.co.kr/web/cop/bbs/NoticeDetail.do?bbsId=BBSMSTR_000000000721&nttId=700" coords="35,295,378,352" shape="rect">
</map>
</div>
<div class="popup_btm">
<input type="checkbox" id="agreePrivatePop" name="agreePrivatePop" onclick="javascript:fnPopupChk('agreePrivatePop' , 'layer')"><label for="agreePrivatePop">3일간 열지 않음</label>
<button type="button" class="popup_close agreePrivatePopClose"><img src="/publish/images/main/btn_popup_close01.png" alt="팝업닫기"></button>
</div>
</div>
<!-- 세로가 짧은 팝업 2개일때 -->
<div class="popup_range" id="agreePrivatePop_20241129">
<!-- 20241119 보안강화 인증 수단 도입 안내 팝업 -->
<div class="layer_popup agreePrivatePop" style="margin: 0 0 20px 30px;" id="agreePrivatePop_20241121">
<div class="layer_popup_cont">
<img src="/publish/images/main/popup06_241119.jpg" alt="보안강화 인증수단 도입 안내 2024년11월 17일자로 보안강화를 위해 서비스 로그인시 휴대폰 본인인증 기능을 도입하였으니 서비스 이용에 참고하시기 바랍니다." usemap="#popup-user-map1" style="height:220px; width:413px;">
<map name="popup-user-map1">
<area href="https://www.munjaon.co.kr/web/cop/bbs/NoticeDetail.do?bbsId=BBSMSTR_000000000723&nttId=720" coords="65,148,345,182" shape="rect">
</map>
</div>
<div class="popup_btm">
<input type="checkbox" id="agreePrivatePop" name="agreePrivatePop" onclick="javascript:fnPopupChk('agreePrivatePop' , 'layer')"><label for="agreePrivatePop">3일간 열지 않음</label>
<button type="button" class="popup_close agreePrivatePopClose"><img src="/publish/images/main/btn_popup_close01.png" alt="팝업닫기"></button>
</div>
</div>
<!-- 20241122 보안강화 인증 수단 도입 안내 팝업 -->
<div class="layer_popup agreePrivatePop" style="margin: 0 0 20px 30px;" id="agreePrivatePop_20241122">
<div class="layer_popup_cont">
<img src="/publish/images/main/popup06_241122.jpg" alt="보안로그인 서비스 안내 계정 보안 강화를 위해 도입한 기존 보안로그인 서비스를 2024년 11월 22일자로 개선 및 추가하오니 이용에 참고하시기 바랍니다." usemap="#popup-user-map2" style="height:220px; width:413px;">
<map name="popup-user-map2">
<area href="https://www.munjaon.co.kr/web/cop/bbs/NoticeDetail.do?bbsId=BBSMSTR_000000000723&nttId=726&seCmmnCdId=&frstRegisterId=&viewsYn=&menuNo=&searchBgnDe=&searchEndDe=&pageIndex=1&searchSortCnd=&searchSortOrd=&searchCnd=&searchWrd=&pageUnit=10" coords="65,148,345,182" shape="rect">
</map>
</div>
<div class="popup_btm">
<input type="checkbox" id="agreePrivatePop" name="agreePrivatePop" onclick="javascript:fnPopupChk('agreePrivatePop' , 'layer')"><label for="agreePrivatePop">3일간 열지 않음</label>
<button type="button" class="popup_close agreePrivatePopClose"><img src="/publish/images/main/btn_popup_close01.png" alt="팝업닫기"></button>
</div>
</div>
<!-- 20241119 이용약관 팝업 -->
<div class="layer_popup agreePrivatePop">
<div class="layer_popup_cont">
<img src="/publish/images/main/popup04_241119.jpg" alt="이용약관 개정 안내 변함없는 문자온 서비스 이용에 감사의 말씀 드립니다. 당사 이용약관이 개정되오니 서비스 이용에 참고하시기 바랍니다." usemap="#popup-use-map1" style="height:220px; width:413px;">
<map name="popup-use-map1">
<area href="https://www.munjaon.co.kr/web/cop/bbs/NoticeDetail.do?bbsId=BBSMSTR_000000000721&nttId=700" coords="65,148,345,182" shape="rect">
</map>
</div>
<div class="popup_btm">
<input type="checkbox" id="agreePrivatePop" name="agreePrivatePop" onclick="javascript:fnPopupChk('agreePrivatePop' , 'layer')"><label for="agreePrivatePop">3일간 열지 않음</label>
<button type="button" class="popup_close agreePrivatePopClose"><img src="/publish/images/main/btn_popup_close01.png" alt="팝업닫기"></button>
</div>
</div>
</div>
<!--// 세로가 짧은 팝업 2개일때 -->
<!-- 20241224 브라우저 쿠키 삭제 방법 안내 팝업 --> <!--
20241224 브라우저 쿠키 삭제 방법 안내 팝업
<div class="layer_popup delCookiePop"> <div class="layer_popup delCookiePop">
<div class="layer_popup_cont"> <div class="layer_popup_cont">
<img src="/publish/images/main/popup07.jpg" alt="브라우저 쿠키 삭제 방법 안내 2024. 12. 23.자로 사이트 일부가 개편됨에 따라, 원활한 서비스 이용을 위한 “쿠키 및 기타 사이트 데이터”삭제 방법을 다음과 같이 안내해 드립니다. ※ 버튼 클릭 시 기능이 작동하지 않는 경우 해당 조치 필요 항상 최선의 서비스를 제공할 수 있도록 노력하겠습니다. 감사합니다." usemap="#popup-use-map7"> <img src="/publish/images/main/popup07.jpg" alt="브라우저 쿠키 삭제 방법 안내 2024. 12. 23.자로 사이트 일부가 개편됨에 따라, 원활한 서비스 이용을 위한 “쿠키 및 기타 사이트 데이터”삭제 방법을 다음과 같이 안내해 드립니다. ※ 버튼 클릭 시 기능이 작동하지 않는 경우 해당 조치 필요 항상 최선의 서비스를 제공할 수 있도록 노력하겠습니다. 감사합니다." usemap="#popup-use-map7">
@ -1314,7 +1109,7 @@ function fn_click_banner_add_stat(bannerMenuCode){
<button type="button" class="popup_close cookieDelPopClose"><img src="/publish/images/main/btn_popup_close01.png" alt="팝업닫기"></button> <button type="button" class="popup_close cookieDelPopClose"><img src="/publish/images/main/btn_popup_close01.png" alt="팝업닫기"></button>
</div> </div>
</div> </div>
<!--// 20241224 브라우저 쿠키 삭제 방법 안내 팝업 --> // 20241224 브라우저 쿠키 삭제 방법 안내 팝업
<div class="layer_popup payEventPop"> <div class="layer_popup payEventPop">
<div class="layer_popup_cont"> <div class="layer_popup_cont">
@ -1327,7 +1122,7 @@ function fn_click_banner_add_stat(bannerMenuCode){
<input type="checkbox" id="evntPayPop" name="evntPayPop" onclick="javascript:fnPopupChk('evntPayPop' , 'layer')"><label for="evntPayPop">3일간 열지 않음</label> <input type="checkbox" id="evntPayPop" name="evntPayPop" onclick="javascript:fnPopupChk('evntPayPop' , 'layer')"><label for="evntPayPop">3일간 열지 않음</label>
<button type="button" class="popup_close evntPayPopClose"><img src="/publish/images/main/btn_popup_close01.png" alt="팝업닫기"></button> <button type="button" class="popup_close evntPayPopClose"><img src="/publish/images/main/btn_popup_close01.png" alt="팝업닫기"></button>
</div> </div>
</div> </div> -->
<%-- <div class="layer_popup pointPop"> <%-- <div class="layer_popup pointPop">
<div class="layer_popup_cont"> <div class="layer_popup_cont">
@ -1340,8 +1135,6 @@ function fn_click_banner_add_stat(bannerMenuCode){
<button type="button" class="popup_close pointPopClose"><img src="/publish/images/main/btn_popup_close01.png" alt="팝업닫기"></button> <button type="button" class="popup_close pointPopClose"><img src="/publish/images/main/btn_popup_close01.png" alt="팝업닫기"></button>
</div> </div>
</div> --%> </div> --%>
</div>
</div>
<!-- 신고 알림 팝업 --> <!-- 신고 알림 팝업 -->
<div class="tooltip-wrap"> <div class="tooltip-wrap">
@ -1425,29 +1218,30 @@ function fn_click_banner_add_stat(bannerMenuCode){
<!-- visual 영역 --> <!-- visual 영역 -->
<div class="visual"> <div class="visual">
<div class="swiper-container visual_swiper"> <div class="swiper-container visual_swiper">
<div class="swiper-wrapper" id="mainSwiperWrapperArea"> <div class="swiper-wrapper" id=" ">
<c:choose> <c:choose>
<c:when test="${not empty mainzoneList}"> <c:when test="${not empty mainzoneList}">
<c:forEach var="mainzone" items="${mainzoneList}" varStatus="status"> <c:forEach var="mainzone" items="${mainzoneList}" varStatus="status">
<div class="swiper-slide"> <div class="swiper-slide">
<div class="slideImg"> <div class="slideImg">
<c:choose> <c:if test="${not empty mainzone.mlink }">
<c:when test="${fn:contains(mainzone.content,'알림톡')}"> <a href="<c:out value='${mainzone.mlink }'/>">
<img src="/cmm/fms/getImage.do?atchFileId=<c:out value='${mainzone.mainzoneImageFile}'/>" alt="<c:out value='${mainzone.content}'/>" usemap="#allimtalk-map"> </c:if>
</c:when> <img src="/cmm/fms/getImage.do?atchFileId=<c:out value='${mainzone.mainzoneImageFile}'/>" alt="<c:out value='${mainzone.content}'/>">
<c:otherwise> <c:if test="${not empty mainzone.mlink }">
<img src="/cmm/fms/getImage.do?atchFileId=<c:out value='${mainzone.mainzoneImageFile}'/>" alt="<c:out value='${mainzone.content}'/>"> </a>
</c:otherwise> </c:if>
</c:choose>
</div> </div>
</div> </div>
</c:forEach> </c:forEach>
</c:when> </c:when>
<c:otherwise> <c:otherwise>
<%-- 메인 배너 이미지 등록된 건이 없는 경우 기본적으로 나오는 이미지 3개 --%> <%-- 메인 배너 이미지 등록된 건이 없는 경우 기본적으로 나오는 이미지 3개 --%>
<div class="swiper-slide"> <a href='/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do'>
<div class="slideImg"><img src="/publish/images/main/f_visual_06_20230802.jpg" alt="문자온, 카카오 '알림톡' 서비스 오픈! 문자온 알림톡, 대한민국 최저가 선언! 조건없이 무조건 6.9원! 카카오톡 채널아이디 추가를 하지 않은 이용자에게도 카카오톡 메시지 발송이 가능한 서비스! 알림톡 바로가기 알림톡 도착 kakao 문자온에서 알림톡이 도착하였습니다! 기업전용/1,000자 이하 텍스트 & 이미지/문자 대비 65% 저렴" usemap="#allimtalk-map"></div> <div class="swiper-slide">
</div> <div class="slideImg"><img src="/publish/images/main/f_visual_06_20230802.jpg" alt="문자온, 카카오 '알림톡' 서비스 오픈! 문자온 알림톡, 대한민국 최저가 선언! 조건없이 무조건 6.9원! 카카오톡 채널아이디 추가를 하지 않은 이용자에게도 카카오톡 메시지 발송이 가능한 서비스! 알림톡 바로가기 알림톡 도착 kakao 문자온에서 알림톡이 도착하였습니다! 기업전용/1,000자 이하 텍스트 & 이미지/문자 대비 65% 저렴"></div>
</div>
</a>
<div class="swiper-slide"> <div class="swiper-slide">
<div class="slideImg"><img src="/publish/images/main/f_visual_02_20221116.jpg" alt="문자도 보내고! 현금도 챙기는! 문자온만의 특별한 혜택! 결제금액의 2% 포인트 추가 적립! 포인트 1만점 이상 적립 시 현금페이백" /></div> <div class="slideImg"><img src="/publish/images/main/f_visual_02_20221116.jpg" alt="문자도 보내고! 현금도 챙기는! 문자온만의 특별한 혜택! 결제금액의 2% 포인트 추가 적립! 포인트 1만점 이상 적립 시 현금페이백" /></div>
</div> </div>
@ -1474,9 +1268,9 @@ function fn_click_banner_add_stat(bannerMenuCode){
</div> </div>
--%> --%>
<map name="allimtalk-map"> <!-- <map name="allimtalk-map"> -->
<area href="/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do" coords="299,286,514,338" shape="rect"> <!-- <area href="/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do" coords="299,286,514,338" shape="rect"> -->
</map> <!-- </map> -->
<!-- <div class="swiper-slide"> <!-- <div class="swiper-slide">
@ -1506,117 +1300,97 @@ function fn_click_banner_add_stat(bannerMenuCode){
<div class="sw_wrap"> <div class="sw_wrap">
<div class="swiper-container swiper2"> <div class="swiper-container swiper2">
<div class="swiper-wrapper"> <div class="swiper-wrapper">
<div class="swiper-slide">
<div class="contWrap ct1"> <!-- 배너수정 250224 -->
<a href="/web/mjon/msgdata/excel/selectMsgExcelDataView.do" title="페이지 이동"> <c:choose>
<ul class="slide_cont table_cell"> <c:when test="${not empty subMainzoneList}">
<li class="cont1_title">대량문자·단체문자 전송</li> <c:forEach var="sub" items="${subMainzoneList}" varStatus="status">
<li class="cont1_ex">별도의 프로그램 설치 없이<br>컴퓨터로 단체·대량문자 <br>발송 가능</li> <div class="swiper-slide">
<li class="more">자세히보기</li> <div class="contWrap">
</ul> <c:if test="${not empty sub.mlink }">
</a> <a href="<c:out value='${sub.mlink}'/>" title="페이지 이동">
</c:if>
<ul class="slide_cont1 table_cell1">
<li class="cont1_title"><c:out value="${sub.topTxt }" /></li>
<li class="cont_ex">
<p class="txt"><c:out value="${sub.lowTxt }" /></p>
<p class="bg_icon">
<img src="/cmm/fms/getImage.do?atchFileId=<c:out value='${sub.mainzoneImageFile}'/>" alt="<c:out value='${mainzone.content}'/>">
</p>
</li>
<c:if test="${not empty sub.mlink }">
<li class="more">자세히보기</li>
</c:if>
</ul>
<c:if test="${not empty sub.mlink }">
</a>
</c:if>
</div>
</div>
</c:forEach>
</c:when>
<c:otherwise>
<div class="swiper-slide">
<div class="contWrap">
<a href="/web/mjon/msgdata/excel/selectMsgExcelDataView.do" title="페이지 이동">
<ul class="slide_cont1 table_cell1">
<li class="cont1_title">대량문자·단체문자 전송</li>
<li class="cont_ex">
<p class="txt">별도의 프로그램 설치 없이 컴퓨터로 단체·대량문자 발송 가능</p>
<p class="bg_icon"><img src="/publish/images/main/cont1_1.png" alt="대량문자·단체문자 전송 아이콘"></p>
</li>
<li class="more">자세히보기</li>
</ul>
</a>
</div>
</div> </div>
</div>
<div class="swiper-slide"> <div class="swiper-slide">
<div class="contWrap ct9"> <div class="contWrap">
<a href="/web/api/intrdView.do" title="페이지 이동" rel="nosublink"> <a href="/web/mjon/msgdata/excel/selectMsgExcelDataView.do" title="페이지 이동" rel="nosublink">
<ul class="slide_cont table_cell"> <ul class="slide_cont1 table_cell1">
<li class="cont1_title">문자연동(API) 서비스 제공</li> <li class="cont1_title">문자연동(API) 서비스 제공</li>
<li class="cont1_ex">맞춤형 웹 API 연동 서비스 제공<br>별도 모듈 설치 없이 소스를<br>추가하여 간단하게 문자 발송</li> <li class="cont_ex">
<li class="more" >자세히보기</li> <p class="txt">별도의 프로그램 설치 없이 컴퓨터로 단체·대량문자 발송 가능</p>
</ul> <p class="bg_icon"><img src="/publish/images/main/cont1_9.png" alt="문자연동(API) 서비스 제공 아이콘"></p>
</a> </li>
<li class="more">자세히보기</li>
</ul>
</a>
</div>
</div> </div>
</div> <div class="swiper-slide">
<div class="swiper-slide"> <div class="contWrap">
<div class="contWrap ct2"> <a href="/web/mjon/custom/selectMsgCustomView.do" title="페이지 이동" rel="nosublink">
<a href="/web/mjon/custom/selectMsgCustomView.do" title="페이지 이동" rel="nosublink"> <ul class="slide_cont1 table_cell1">
<ul class="slide_cont table_cell"> <li class="cont1_title">그림문자 맞춤제작</li>
<li class="cont1_title">그림문자 맞춤제작</li> <li class="cont_ex">
<li class="cont1_ex">나만의 그림문자 이미지<br>맞춤제작으로 홍보효과 극대화</li> <p class="txt">나만의 그림문자 이미지 맞춤제작으로 홍보효과 극대화</p>
<li class="more" >자세히보기</li> <p class="bg_icon"><img src="/publish/images/main/cont1_2.png" alt="그림문자 맞춤제작 아이콘"></p>
</ul> </li>
</a> <li class="more">자세히보기</li>
</ul>
</a>
</div>
</div> </div>
</div> <div class="swiper-slide">
<div class="swiper-slide"> <div class="contWrap">
<div class="contWrap ct3"> <a href="/web/mjon/custom/selectMsgCustomView.do" title="페이지 이동" rel="nosublink">
<a href="/web/mjon/addragency/selectAddrAgencyList.do" title="페이지 이동" rel="nosublink"> <ul class="slide_cont1 table_cell1">
<ul class="slide_cont table_cell"> <li class="cont1_title">주소록 등록 무료대행</li>
<li class="cont1_title">주소록 등록 무료대행</li> <li class="cont_ex">
<li class="cont1_ex">주소록 직접 등록이 어려운<br>고객을 위해 엑셀, TXT 파일 등<br>주소록 등록 무료대행</li> <p class="txt">주소록 직접 등록이 어려운 고객을 위해 엑셀, TXT 파일 등 주소록 등록 무료대행</p>
<li class="more">자세히보기</li> <p class="bg_icon"><img src="/publish/images/main/cont1_3.png" alt="주소록 등록 무료대행 아이콘"></p>
</ul> </li>
</a> <li class="more">자세히보기</li>
</ul>
</a>
</div>
</div> </div>
</div> </c:otherwise>
<div class="swiper-slide"> </c:choose>
<div class="contWrap ct4"> <!--// 배너수정 250224 -->
<ul class="slide_cont table_cell">
<li class="cont1_title">080수신거부 무료 제공</li>
<li class="cont1_ex">광고, 선거 등 문자 전송 시<br>반드시 표기되어야 하는<br>080 수신거부 서비스 무료 제공</li>
<%-- <li class="more">자세히보기</li> --%>
</ul>
</div>
</div>
<div class="swiper-slide">
<div class="contWrap ct5">
<a href="/web/mjon/msgdata/selectMsgDataView.do" title="페이지 이동">
<ul class="slide_cont table_cell">
<li class="cont1_title">특정문구 일괄변환 기능</li>
<li class="cont1_ex">문자내용의 특정문구<br>(성명, 단어, 문구 등)<br>수신자마다 다르게 일괄 변환</li>
<li class="more">자세히보기</li>
</ul>
</a>
</div>
</div>
<div class="swiper-slide">
<div class="contWrap ct6">
<a href="/web/mjon/msgdata/selectMsgDataView.do" title="페이지 이동">
<ul class="slide_cont table_cell">
<li class="cont1_title">문자 포토에디터 무료 제공</li>
<li class="cont1_ex">국내 최초 자사 기술로 개발한<br>문자 포토에디터 무료 제공</li>
<li class="more">자세히보기</li>
</ul>
</a>
</div>
</div>
<div class="swiper-slide">
<div class="contWrap ct7">
<a href="/web/mjon/msgdata/selectMsgDataView.do" title="페이지 이동">
<ul class="slide_cont table_cell">
<li class="cont1_title">문자 제목 및 약도 추가</li>
<li class="cont1_ex">문자메시지 내 제목 및 약도<br>추가 기능</li>
<li class="more">자세히보기</li>
</ul>
</a>
</div>
</div>
<div class="swiper-slide">
<div class="contWrap ct8">
<a href="/web/member/pay/BillPub.do" title="페이지 이동" rel="nosublink">
<ul class="slide_cont table_cell">
<li class="cont1_title">자동화 기반 비용처리</li>
<li class="cont1_ex">세금계산서, 현금영수증 등<br>(충전금 전액 계산서 발행 가능)</li>
<li class="more">자세히보기</li>
</ul>
</a>
</div>
</div>
<!--
<div class="swiper-slide">
<div class="contWrap ct1">
<a href="#" title="페이지 이동">
<ul class="slide_cont table_cell">
<li class="cont1_title">문자 대량전송</li>
<li class="cont1_ex">별다른 프로그램 설치없이<br>pc에서 바로 전송이 가능
</li>
<li class="more">자세히보기</li>
</ul>
</a>
</div>
</div>
-->
</div> </div>
<!-- 버튼 --> <!-- 버튼 -->
<div class="swiper-button-next"> <div class="swiper-button-next">

File diff suppressed because it is too large Load Diff

View File

@ -1119,20 +1119,8 @@ $(document).ready(function (){
.map(num => removeDash(num.trim())) .map(num => removeDash(num.trim()))
.filter(num => num !== "") .filter(num => num !== "")
.filter(num => isValidPhoneNumber(num)); // 유효한 번호만 필터링; .filter(num => isValidPhoneNumber(num)); // 유효한 번호만 필터링;
console.log('numbers : ', numbers);
const addrData = processPhoneNumbers(numbers);
fn_phoneAddProcess(tableL, numbers);
// 기존 tableL의 데이터를 가져옵니다.
var existingData = tableL.getData();
// 데이터 병합 및 중복 제거
const result = mergeAndValidateData(existingData, addrData);
// 테이블 데이터 업데이트
if (!updateTableData(tableL, result)) return false;
// textarea 초기화 // textarea 초기화
textarea.val(''); // jQuery 객체에서 값을 초기화할 때는 .val('') 사용 textarea.val(''); // jQuery 객체에서 값을 초기화할 때는 .val('') 사용
@ -1302,19 +1290,8 @@ $(document).ready(function (){
return false; return false;
} }
console.log('numbers : ', numbers);
const addrData = processPhoneNumbers(numbers);
fn_phoneAddProcess(tableL, numbers);
// 기존 tableL의 데이터를 가져옵니다.
var existingData = tableL.getData();
// 데이터 병합 및 중복 제거
const result = mergeAndValidateData(existingData, addrData);
// 테이블 데이터 업데이트
if (!updateTableData(tableL, result)) return false;
$("#btnLatestAddPhoneClose").trigger("click"); $("#btnLatestAddPhoneClose").trigger("click");
@ -1340,19 +1317,8 @@ $(document).ready(function (){
return false; return false;
} }
console.log('numbers : ', numbers);
const addrData = processPhoneNumbers(numbers);
fn_phoneAddProcess(tableL, numbers);
// 기존 tableL의 데이터를 가져옵니다.
var existingData = tableL.getData();
// 데이터 병합 및 중복 제거
const result = mergeAndValidateData(existingData, addrData);
// 테이블 데이터 업데이트
if (!updateTableData(tableL, result)) return false;
$("#btnLatestAddPhoneClose").trigger("click"); $("#btnLatestAddPhoneClose").trigger("click");
@ -1392,19 +1358,8 @@ $(document).ready(function (){
return false; return false;
} }
console.log('numbers : ', numbers);
const addrData = processPhoneNumbers(numbers);
fn_phoneAddProcess(tableL, numbers);
// 기존 tableL의 데이터를 가져옵니다.
var existingData = tableL.getData();
// 데이터 병합 및 중복 제거
const result = mergeAndValidateData(existingData, addrData);
// 테이블 데이터 업데이트
if (!updateTableData(tableL, result)) return false;
$("#btnLatestAddPhoneClose").trigger("click"); $("#btnLatestAddPhoneClose").trigger("click");
@ -1430,19 +1385,8 @@ $(document).ready(function (){
return false; return false;
} }
console.log('numbers : ', numbers);
const addrData = processPhoneNumbers(numbers);
fn_phoneAddProcess(tableL, numbers);
// 기존 tableL의 데이터를 가져옵니다.
var existingData = tableL.getData();
// 데이터 병합 및 중복 제거
const result = mergeAndValidateData(existingData, addrData);
// 테이블 데이터 업데이트
if (!updateTableData(tableL, result)) return false;
$("#btnLatestAddPhoneClose").trigger("click"); $("#btnLatestAddPhoneClose").trigger("click");
@ -3195,20 +3139,55 @@ function fnMyMsgAdd(msgId){
//fnLetterListAjax(); //fnLetterListAjax();
/* 윈도우팝업 열기 */ /* 윈도우팝업 열기 */
function infoPop(pageUrl){ /* 윈도우팝업 열기 */
var infoPopT; // 전역 변수로 선언하여 팝업 추적
function infoPop(pageUrl) {
// 기존 팝업이 존재하면 닫기
if (infoPopT && !infoPopT.closed) {
infoPopT.close();
}
// 기본값 설정
let width = 790, height = 350;
if (pageUrl === "adrvertisement1") {
width = 790;
height = 800;
} else if (pageUrl === "selectMsgDataView3") {
width = 500;
height = 550;
}
// 🔥 현재 브라우저 창 크기 가져오기
let screenWidth = window.innerWidth || document.documentElement.clientWidth || screen.width;
let screenHeight = window.innerHeight || document.documentElement.clientHeight || screen.height;
// 💡 팝업을 브라우저 창 중앙에 위치시키기 위해 `top`, `left` 계산
let left = (screenWidth - width) / 2 + window.screenX;
let top = (screenHeight - height) / 2 + window.screenY;
// 📝 옵션 문자열 (정확한 중앙 정렬 적용)
let options = "width=" + width + ",height=" + height + ",top=" + top + ",left=" + left +
",fullscreen=no,menubar=no,status=no,toolbar=no,titlebar=yes,location=no,scrollbars=1";
console.log('팝업 옵션 : ', options);
// 🔥 window.open() 호출
infoPopT = window.open("", 'infoPop', options);
// 🔄 폼 데이터 설정 및 제출
document.popForm.pageType.value = pageUrl; document.popForm.pageType.value = pageUrl;
document.popForm.action = "/web/pop/infoPop.do"; document.popForm.action = "/web/pop/infoPop.do";
document.popForm.method = "post"; document.popForm.method = "post";
if(pageUrl == "adrvertisement1"){
window.open("about:blank", 'infoPop', 'width=790, height=800, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1');
}else{
window.open("about:blank", 'infoPop', 'width=790, height=350, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1');
}
document.popForm.target = "infoPop"; document.popForm.target = "infoPop";
document.popForm.submit(); document.popForm.submit();
} }
$(document).on('click', '.addressregi_btn', function() { $(document).on('click', '.addressregi_btn', function() {
var tableData = tableL.getRows(); var tableData = tableL.getRows();
var dataLen = tableL.getRows().length; var dataLen = tableL.getRows().length;
@ -3981,7 +3960,7 @@ function getMjMsgSentListAll(pageNo) {
</c:when> </c:when>
<c:otherwise> <c:otherwise>
대량문자(광고문자) 대량문자(광고문자)
<button type="button" class="button info ad_btn" onclick="infoPop('adrvertisement1');" style="right: 128px;"><i></i>광고규정</button> <button type="button" class="button info ad_btn" onclick="infoPop('adrvertisement1');" style="right: 128px;"><i></i>광고규정</button>
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
</h2> </h2>
@ -4219,7 +4198,7 @@ function getMjMsgSentListAll(pageNo) {
<label for="" class="label">받는 번호입력</label> <label for="" class="label">받는 번호입력</label>
<!-- <input type="text" placeholder="번호를 입력하세요" onfocus="this.placeholder=''" onblur="this.placeholder='번호를 입력하세요'" style="width:340px;"> --> <!-- <input type="text" placeholder="번호를 입력하세요" onfocus="this.placeholder=''" onblur="this.placeholder='번호를 입력하세요'" style="width:340px;"> -->
<!-- oninput="this.value = this.value.replace(/[^0-9.\n]/g, '').replace(/(\..*)\./g, '$1');" --> <!-- oninput="this.value = this.value.replace(/[^0-9.\n]/g, '').replace(/(\..*)\./g, '$1');" -->
<textarea name="callTo" id="callTo" cols="30" rows="10" class="receipt_num" <textarea name="callTo" id="callTo" cols="30" rows="10" class="receipt_num phone_num"
placeholder="번호를 입력하세요" placeholder="번호를 입력하세요"
onfocus="this.placeholder=''" onfocus="this.placeholder=''"
onblur="this.placeholder='번호를 입력하세요'" onblur="this.placeholder='번호를 입력하세요'"
@ -4227,7 +4206,8 @@ function getMjMsgSentListAll(pageNo) {
<!-- <button type="button" class="btnType btnType6">번호추가</button> --> <!-- <button type="button" class="btnType btnType6">번호추가</button> -->
<div class="btn_popup_wrap"> <div class="btn_popup_wrap">
<button type="button" class="btnType btnType6 btn_add_number addCallToF">번호추가<i class="qmMark"></i></button> <button type="button" class="btnType btnType6 btn_add_number addCallToF">번호추가<i class="qmMark"></i></button>
<span style="display:block;margin:10px 0 0 0;"><span class="vMiddle">*</span> 중복번호는 한번만 추가됩니다.</span> <span style="display:block;margin:8px 0 0 0;"><span class="vMiddle">*</span> 중복번호는 한번만 추가됩니다.</span>
<button type="button" class="button info info_guide" onclick="infoPop('selectMsgDataView3');">* 일부 안심번호(050*)는 발송이 제한될 수 있습니다.</button>
<div class="error_hover_cont send_hover_cont"> <div class="error_hover_cont send_hover_cont">
<!-- <p>휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능</p> --> <!-- <p>휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능</p> -->
<p>줄바꿈(Enter) 기준으로 핸드폰 번호 입력이 가능합니다.</p> <p>줄바꿈(Enter) 기준으로 핸드폰 번호 입력이 가능합니다.</p>

View File

@ -749,7 +749,7 @@ $(document).on('click', '#errorExcelBtn', function() {
<!-- 주소록 상세 결과 팝업 data-tooltip:adr_popup14 --> <!-- 주소록 상세 결과 팝업 data-tooltip:adr_popup14 -->
<div class="tooltip-wrap"> <div class="tooltip-wrap">
<div class="popup-com adr_layer adr_detail_result adr_popup14" tabindex="0" data-tooltip-con="adr_popup14" data-focus="adr_popup14" data-focus-prev="adr_popu14-close" style="width: 525px;"> <div class="popup-com adr_layer adr_detail_result adr_popup14" tabindex="0" data-tooltip-con="adr_popup14" data-focus="adr_popup14" data-focus-prev="adr_popu14-close" style="width: 525px;z-index:125;">
<div class="popup_heading"> <div class="popup_heading">
<p>주소록 상세 결과</p> <p>주소록 상세 결과</p>
<button type="button" class="tooltip-close" data-focus="adr_popup14-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> <button type="button" class="tooltip-close" data-focus="adr_popup14-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>

View File

@ -38,6 +38,48 @@
</div> </div>
</c:when> </c:when>
<c:when test="${pageType == 'selectMsgDataView3'}">
<!-- 문자전송 안심번호 사용안내 -->
<div class="info_popup ad_layer adpopup01 info_guide_popup" style="min-width:400px;">
<div class="popup_heading">
<p>안심번호(050*) 문자 발송 서비스 이용 제한 안내</p>
</div>
<div class="layer_in">
<ul class="info_list">
<li>
<strong>① SMS(단문)</strong>
<ul class="sub_te">
<li>0503 : 0503-0~8 발송 가능, 그 외 발송 불가</li>
<li>0508 : 0508-6~7 발송 가능, 그 외 발송 불가</li>
<li>0509 : 발송 불가</li>
<li>0502~0507 : 모두 발송 가능</li>
</ul>
</li>
<li class="center">
<strong>② LMS(장문</strong>)
<ul class="sub_te">
<li>0502, 0508, 0509 : 발송 불가</li>
<li>0503 : 0503-0~8 발송 가능, 그 외 발송 불가</li>
<li>0504~0507 : 모두 발송 가능</li>
</ul>
</li>
<li>
<strong>③ MMS(그림문자)</strong>
<ul class="sub_te">
<li>0502, 0506, 0508, 0509 : 발송 불가</li>
<li>0503 : 0503-5~7 발송 가능, 그 외 발송 불가</li>
<li>0504, 0505, 0507 : 모두 발송 가능</li>
</ul>
</li>
</ul>
<div class="info_guide_sub">
<p>※ 발송 불가 번호는 전송 시 <span>수신오류(발송실패)</span> 처리됩니다.</p>
<p>※ 보다 상세한 사항은 문자온 고객센터로 문의해 주시기 바랍니다.</p>
</div>
</div>
</div>
</c:when>
<c:when test="${pageType == 'adrvertisement1'}"> <c:when test="${pageType == 'adrvertisement1'}">
<!--광고문자 관련법규 안내 팝업 --> <!--광고문자 관련법규 안내 팝업 -->
<div class="info_popup ad_layer adpopup01" style="min-width:773px;"> <div class="info_popup ad_layer adpopup01" style="min-width:773px;">

File diff suppressed because it is too large Load Diff

View File

@ -20,6 +20,7 @@
/*// 발송결과 화면개선 */ /*// 발송결과 화면개선 */
.table {display: table;width: 100%;} .table {display: table;width: 100%;}
.table_cell {display: table-cell;vertical-align: middle;} .table_cell {display: table-cell;vertical-align: middle;}
.table_cell1 {display: table-cell;vertical-align: top; position: relative; top: 25px;}
.vMiddle {vertical-align: middle;} .vMiddle {vertical-align: middle;}
.tRight {text-align: right !important;} .tRight {text-align: right !important;}
.tLeft {text-align: left !important;} .tLeft {text-align: left !important;}
@ -601,6 +602,7 @@ input[type=text]::-ms-reveal, input[type=password]::-ms-reveal, input[type=email
.send_general.sec .tType1 tbody tr:first-child {border-top: 0;} .send_general.sec .tType1 tbody tr:first-child {border-top: 0;}
.send_top .excelWrap {padding: 20px 0;} .send_top .excelWrap {padding: 20px 0;}
.excel_middle {background-color: #f2f2f2; padding: 9px 20px; border-radius: 5px; margin: 20px 0;} .excel_middle {background-color: #f2f2f2; padding: 9px 20px; border-radius: 5px; margin: 20px 0;}
.excel_middle .select_btnWrap div{gap:6px;}
.send_top .excelWrap .excel_selBox {margin-bottom: 10px; display: flex; justify-content: space-between;} .send_top .excelWrap .excel_selBox {margin-bottom: 10px; display: flex; justify-content: space-between;}
.send_top .excelWrap .excel_selBox select.selType1 {padding: 0 80px 0 10px;} .send_top .excelWrap .excel_selBox select.selType1 {padding: 0 80px 0 10px;}
.send_top .excelWrap .excel_selBox span {color: #e40000; font-size: 14px; padding-left: 5px;} .send_top .excelWrap .excel_selBox span {color: #e40000; font-size: 14px; padding-left: 5px;}
@ -1466,8 +1468,8 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px
/* 발송관리 */ /* 발송관리 */
.table_tab_wrap .tab_depth1 {position: absolute; top: 50%; right: 20px; transform: translateY(-50%); text-align: center;} .table_tab_wrap .tab_depth1 {position: absolute; top: 50%; right: 20px; transform: translateY(-50%); text-align: center;}
.table_tab_wrap .tab_depth1 a {width: 150px;} .table_tab_wrap .tab_depth1 a {width: 150px;}
/*.kakao_rev_content .rev_admin_in{width: calc(100% / 3 - 20px);}*/ .kakao_rev_content .rev_admin_in{width: calc(100% / 3 - 20px);}
.kakao_rev_content .rev_admin_in{width: calc(100% / 2 - 20px);} /*.kakao_rev_content .rev_admin_in{width: calc(100% / 2 - 20px);}*/
/*// 발송관리 */ /*// 발송관리 */
/*발송결과*/ /*발송결과*/
@ -1576,8 +1578,9 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px
.kakaotalkset_cont .list_info .btn_list{background-image: url(/publish/images/btn_list_icon.png);} .kakaotalkset_cont .list_info .btn_list{background-image: url(/publish/images/btn_list_icon.png);}
.kakaotalkset_cont .list_info .btn_thumbnail{background-image: url(/publish/images/btn_thumbnail_icon.png);} .kakaotalkset_cont .list_info .btn_thumbnail{background-image: url(/publish/images/btn_thumbnail_icon.png);}
.kakaotalkset_cont .list_info .btnType8{width: 140px;} .kakaotalkset_cont .list_info .btnType8{width: 140px;}
.kakaotalkset_cont .kakao_template_list{margin: 20px 0 0 0;} .kakaotalkset_cont .kakao_template_list{display:flex;margin: 20px 0 0 0;flex-wrap:wrap;gap:13px;}
.kakaotalkset_cont .kakao_template_list li{position: relative; display: inline-block; width: calc((100% - 135px)/4); border-radius: 25px; box-shadow: inset 0 0px 8px rgba(0,0,0,0.2); padding: 8px 8px 16px 8px; margin: 0 20px 40px 0;} /* .kakaotalkset_cont .kakao_template_list li{position: relative; display: inline-block; width: calc((100% - 135px)/4); border-radius: 25px; box-shadow: inset 0 0px 8px rgba(0,0,0,0.2); padding: 8px 8px 16px 8px; margin: 0 20px 40px 0;} */
.kakaotalkset_cont .kakao_template_list li{position: relative; width:calc((100%/4) - 26px); border-radius: 25px; box-shadow: inset 0 0px 8px rgba(0,0,0,0.2); padding: 8px 8px 16px 8px;}
.kakaotalkset_cont .kakao_template_list li.template_none{box-shadow: none; width: 100%; text-align: center; font-size: 18px; font-weight: 400;} .kakaotalkset_cont .kakao_template_list li.template_none{box-shadow: none; width: 100%; text-align: center; font-size: 18px; font-weight: 400;}
.kakaotalkset_cont .kakao_template_list li.template_none::after{display: none;} .kakaotalkset_cont .kakao_template_list li.template_none::after{display: none;}
.kakaotalkset_cont .kakao_template_list li:nth-child(4n){margin: 0 0 0 0;} .kakaotalkset_cont .kakao_template_list li:nth-child(4n){margin: 0 0 0 0;}
@ -1733,6 +1736,7 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px
.send_top .kakaotalksend_cont .kakao_wrap .send_left .variable_wrap .excel_btn{height: 40px; border: 5px solid #129738; color: #129738; font-size: 16px; font-weight: 500; padding: 0 15px; border-radius: 5px;} .send_top .kakaotalksend_cont .kakao_wrap .send_left .variable_wrap .excel_btn{height: 40px; border: 5px solid #129738; color: #129738; font-size: 16px; font-weight: 500; padding: 0 15px; border-radius: 5px;}
.send_top .kakaotalksend_cont .kakao_wrap .send_left .variable_wrap .excel_btn i{width: 17px; height: 15px; background-image: url(/publish/images/content/excel_img.png); margin: 0 5px 5px 0;} .send_top .kakaotalksend_cont .kakao_wrap .send_left .variable_wrap .excel_btn i{width: 17px; height: 15px; background-image: url(/publish/images/content/excel_img.png); margin: 0 5px 5px 0;}
.send_top .kakaotalksend_cont .kakao_wrap .send_left .receiver_wrap01{display: none !important;} .send_top .kakaotalksend_cont .kakao_wrap .send_left .receiver_wrap01{display: none !important;}
.send_top .kakaotalksend_cont .kakao_wrap .send_left .receiver_wrap02 .btnType{margin:0 0 0 6px;}
.send_top .kakaotalksend_cont .kakao_wrap .send_left .receiver_wrap02 .listType{width: 100%;} .send_top .kakaotalksend_cont .kakao_wrap .send_left .receiver_wrap02 .listType{width: 100%;}
.send_top .kakaotalksend_cont .kakao_wrap .send_left .receipt_num .list_table_num{width: calc(100% - 60px);} .send_top .kakaotalksend_cont .kakao_wrap .send_left .receipt_num .list_table_num{width: calc(100% - 60px);}
.kakaotalksend_cont .kakao_wrap .put_right .qmMark{width: 19px; height: 19px; background-image: url(/publish/images/content/qmIcon_s.png); margin: -0.3px 0 2px 4px;} .kakaotalksend_cont .kakao_wrap .put_right .qmMark{width: 19px; height: 19px; background-image: url(/publish/images/content/qmIcon_s.png); margin: -0.3px 0 2px 4px;}
@ -1740,7 +1744,7 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px
.kakaotalksend_cont .kakao_wrap .kakao_template_text {display: flex;justify-content: space-between;} .kakaotalksend_cont .kakao_wrap .kakao_template_text {display: flex;justify-content: space-between;}
.kakaotalksend_cont .kakao_wrap .put_right .btn_popup_wrap{margin: 0 0 5px 0;} .kakaotalksend_cont .kakao_wrap .put_right .btn_popup_wrap{margin: 0 0 5px 0;}
.kakaotalksend_cont .kakao_wrap .replace_send_wrap .put_left{height: 234px;} .kakaotalksend_cont .kakao_wrap .replace_send_wrap .put_left{height: 234px;}
.kakaotalksend_cont .kakao_wrap .replace_send_wrap .put_left.short textarea{height: calc(100% - 58px);} .kakaotalksend_cont .kakao_wrap .replace_send_wrap .put_left.short textarea{height: calc(100% - 80px);}
.kakaotalksend_cont .kakao_wrap .button_type_wrap{display: flex; border: 1px solid #e5e5e5; border-radius: 5px; padding: 10px 20px; margin: 10px 0 0 0;} .kakaotalksend_cont .kakao_wrap .button_type_wrap{display: flex; border: 1px solid #e5e5e5; border-radius: 5px; padding: 10px 20px; margin: 10px 0 0 0;}
.kakaotalksend_cont .kakao_wrap .button_type_wrap dt{width: 110px; font-weight: 400; padding: 8px 0 0 0;} .kakaotalksend_cont .kakao_wrap .button_type_wrap dt{width: 110px; font-weight: 400; padding: 8px 0 0 0;}
.kakaotalksend_cont .kakao_wrap .button_type_wrap .button_type_input{width: 483px;} .kakaotalksend_cont .kakao_wrap .button_type_wrap .button_type_input{width: 483px;}
@ -2122,6 +2126,8 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px
.res_info .res_info_in .res_info_btm {margin:20px 0 0 0;padding:10px;background:#fff;border-radius:5px;box-sizing:border-box;} .res_info .res_info_in .res_info_btm {margin:20px 0 0 0;padding:10px;background:#fff;border-radius:5px;box-sizing:border-box;}
.res_info .res_info_in .res_info_btm dl {display:flex;padding:8px 10px;font-size:16px;font-weight:300;justify-content:space-between; color:#222;} .res_info .res_info_in .res_info_btm dl {display:flex;padding:8px 10px;font-size:16px;font-weight:300;justify-content:space-between; color:#222;}
.res_info .res_info_in .res_info_btm dl.charge_line {border-top:1px solid #e6e6e6; text-align:center;}
.res_info .res_info_in .res_info_btm dl dt.charge_title {font-size:15px; padding:0 0 0 5px;}
.res_info .res_info_in .res_info_btm dl dt {font-weight:400;} .res_info .res_info_in .res_info_btm dl dt {font-weight:400;}
.res_info .res_info_in .res_info_btm dl dt.btm_charge {font-size:16px;} .res_info .res_info_in .res_info_btm dl dt.btm_charge {font-size:16px;}
.res_info .res_info_in .res_info_btm dl dd span {font-weight:500;} .res_info .res_info_in .res_info_btm dl dd span {font-weight:500;}
@ -2139,6 +2145,9 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px
/* right area 문자 미리보기 */ /* right area 문자 미리보기 */
.send_top .resultcont_right {flex-basis: calc(100% - 68% - 80px); position: relative;min-height:630px;} .send_top .resultcont_right {flex-basis: calc(100% - 68% - 80px); position: relative;min-height:630px;}
.send_top .send_general.sec .resultcont_right {min-height:auto;} .send_top .send_general.sec .resultcont_right {min-height:auto;}
.send_top .resultcont_right .tab_phone {display: none; }
.send_top .resultcont_right .tab_phone.current {display: block;}
/* phone 기본 -- sticky */ /* phone 기본 -- sticky */
.send_top .resultcont_right .phone {width: 374px; position: absolute; right: -2px; top: 0;} .send_top .resultcont_right .phone {width: 374px; position: absolute; right: -2px; top: 0;}
.send_top .resultcont_right .phone .phoneIn {background-image: url(/publish/images/content/phoneBg.png); height: 720px; background-size: 100% auto; background-repeat: no-repeat; } .send_top .resultcont_right .phone .phoneIn {background-image: url(/publish/images/content/phoneBg.png); height: 720px; background-size: 100% auto; background-repeat: no-repeat; }
@ -2173,7 +2182,7 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px
/* 알림톡 미리보기 */ /* 알림톡 미리보기 */
.send_top .resultcont_right .phone_kakao {width: 374px; position: absolute; right:0; top: 0;} .send_top .resultcont_right .phone_kakao {width: 374px; position: absolute; right:0; top: 0;}
.send_top .resultcont_right .phone_kakako .phoneIn{height: 690px; width:340px; background-image: url(/publish/images/content/kakaoBg.png); padding: 27px 25px 0 25px;} .send_top .resultcont_right .phone_kakako .phoneIn{height: 720px; width:346px; background-image: url(/publish/images/content/kakaoBg.png); padding: 27px 25px 0 25px; margin:0 0 0 -12px;}
.send_top .resultcont_right .phone_kakako .prev_p{padding: 0 0 0 10px; border: 0; letter-spacing: -0.25px;} .send_top .resultcont_right .phone_kakako .prev_p{padding: 0 0 0 10px; border: 0; letter-spacing: -0.25px;}
.send_top .resultcont_right .phone_kakako .prev_p img{margin: 0 10px 0 0;} .send_top .resultcont_right .phone_kakako .prev_p img{margin: 0 10px 0 0;}
.send_top .resultcont_right .phone_kakako .allimtalk_title{position: relative; width: calc(100% - 20px); background-color: #fae100; font-family: 'LotteMartDream'; font-size: 18px; padding: 12px 21px; border-radius: 5px 5px 0 0; box-sizing: border-box;} .send_top .resultcont_right .phone_kakako .allimtalk_title{position: relative; width: calc(100% - 20px); background-color: #fae100; font-family: 'LotteMartDream'; font-size: 18px; padding: 12px 21px; border-radius: 5px 5px 0 0; box-sizing: border-box;}
@ -2391,6 +2400,11 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px
.tb_wrap1{height:302px; overflow-y: auto; position:relative; border:1px solid #ccc; border-radius:5px;} .tb_wrap1{height:302px; overflow-y: auto; position:relative; border:1px solid #ccc; border-radius:5px;}
.tb_wrap1 table.type4 th{position: sticky; top:0; z-index: 1; background-color:#ededed;} .tb_wrap1 table.type4 th{position: sticky; top:0; z-index: 1; background-color:#ededed;}
/*문자전송_안심번호 안내 추가*/
.top_content .send_general .send_left .tType1 .btn_popup_wrap .info_guide{margin: -11px 0 0 0; text-align: left; line-height: 1.3; font-size: 14px; color: #e40000; font-weight: 400;}
.top_content .send_general .send_left .tType1 .btn_popup_wrap .info_guide:hover{text-decoration: underline;}
.tType1 tbody tr td.putText textarea.phone_num{height: 84px;}
@keyframes rotate-loading { @keyframes rotate-loading {
0% {transform:rotate(0)} 0% {transform:rotate(0)}
@ -2586,6 +2600,10 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px
.sub .election .receipt_number_table_wrap .list_bottom{width:100%;} .sub .election .receipt_number_table_wrap .list_bottom{width:100%;}
.sub .election .list_bottom .list_bottom_right button{height:30px;font-size:14px;letter-spacing:-1.4px;} .sub .election .list_bottom .list_bottom_right button{height:30px;font-size:14px;letter-spacing:-1.4px;}
.sub .election .list_bottom .pagination button{display:inline-flex;width:25px;height:30px;align-items:center;justify-content:center;} .sub .election .list_bottom .pagination button{display:inline-flex;width:25px;height:30px;align-items:center;justify-content:center;}
/*문자전송_안심번호 안내 추가*/
.top_content .send_general .send_left .tType1 .btn_popup_wrap .info_guide{margin: 0 0 0 11px; text-indent: -11px;}
.tType1 tbody tr td.putText textarea.phone_num{height: 103px;}
} }
@media only screen and (max-width:1380px){ @media only screen and (max-width:1380px){

View File

@ -52,6 +52,17 @@
.swiper2 .contWrap.ct8 .slide_cont::after {background:url('../images/main/cont1_8.png') #e1e1e5 center center no-repeat;} .swiper2 .contWrap.ct8 .slide_cont::after {background:url('../images/main/cont1_8.png') #e1e1e5 center center no-repeat;}
.swiper2 .contWrap.ct9 .slide_cont::after {background:url('../images/main/cont1_9.png') #e1e1e5 center no-repeat;} .swiper2 .contWrap.ct9 .slide_cont::after {background:url('../images/main/cont1_9.png') #e1e1e5 center no-repeat;}
.swiper2 .contWrap .slide_cont .more {width: 115px;height: 30px; padding-right:15px;border: 1px solid #d9d9d9; border-radius: 14px; text-align: center; color: #555;background-image: url(../images/main/cont1_arrow.png);background-position: 86% center;background-repeat: no-repeat;line-height: 29px;} .swiper2 .contWrap .slide_cont .more {width: 115px;height: 30px; padding-right:15px;border: 1px solid #d9d9d9; border-radius: 14px; text-align: center; color: #555;background-image: url(../images/main/cont1_arrow.png);background-position: 86% center;background-repeat: no-repeat;line-height: 29px;}
.swiper2 .contWrap .slide_cont .more {margin:5px 0 0 0; width: 115px;height: 30px; padding-right:15px;border: 1px solid #d9d9d9; border-radius: 14px; text-align: center; color: #555;background-image: url(../images/main/cont1_arrow.png);background-position: 86% center;background-repeat: no-repeat;line-height: 29px;}
.swiper2 .contWrap .slide_cont1 {padding: 0 30px 0 40px; height: 190px; }
.swiper2 .contWrap .slide_cont1 .cont1_title {font-size: 22px;font-weight: 700;}
.swiper2 .contWrap .slide_cont1 .cont_ex {display:flex; justify-content: space-between;}
.swiper2 .contWrap .slide_cont1 .cont_ex .txt {padding:13px 0 0 0; line-height: 1.4; width:70%; color:#555;}
.swiper2 .contWrap .slide_cont1 .cont_ex .bg_icon {position:relative; background-color: #e1e1e5; border-radius: 50%; top:50px; right:0; transform: translateY(-50%); width: 70px; height: 70px; display:flex; justify-content: center; align-items: center; }
.swiper2 .contWrap .slide_cont1 .cont_ex .bg_icon img {width: auto; height: auto; max-width: initial; max-height: initial;}
.swiper2 .contWrap .slide_cont1 .more {margin:5px 0 0 0; width: 115px;height: 30px; padding-right:15px;border: 1px solid #d9d9d9; border-radius: 14px; text-align: center; color: #555;background-image: url(../images/main/cont1_arrow.png);background-position: 86% center;background-repeat: no-repeat;line-height: 29px;}
/* on클래스 */ /* on클래스 */
.swiper2 .swiper-slide-next .contWrap::after, .swiper2 .swiper-slide-next .contWrap::after,
.swiper2 .swiper-slide.on .contWrap.on::after {background-color: #ffcc33;width: 100%;height:110%;z-index: -1;cursor: pointer;transition: all 0.2s ease-in-out;box-shadow: 0 0 15px rgba(0, 0, 0, 0.3);border-radius: 15px;} .swiper2 .swiper-slide.on .contWrap.on::after {background-color: #ffcc33;width: 100%;height:110%;z-index: -1;cursor: pointer;transition: all 0.2s ease-in-out;box-shadow: 0 0 15px rgba(0, 0, 0, 0.3);border-radius: 15px;}
@ -63,6 +74,17 @@
.swiper2 .swiper-slide.on .contWrap.on .slide_cont::after {background-color: #edb818;} .swiper2 .swiper-slide.on .contWrap.on .slide_cont::after {background-color: #edb818;}
.swiper2 .swiper-slide-next .contWrap.active:after {display:none;} .swiper2 .swiper-slide-next .contWrap.active:after {display:none;}
.swiper2 .swiper-slide-next .contWrap .slide_cont1 .more,
.swiper2 .swiper-slide.on .contWrap.on .slide_cont1 .more {background-color: #eea301;color: #fff;border: 1px solid #eea301;background-image: url(../images/main/cont1_arrow_white.png);}
.swiper2 .swiper-slide-next .contWrap .slide_cont1::after,
.swiper2 .swiper-slide.on .contWrap.on .slide_cont1::after {background-color: #edb818;}
.swiper2 .swiper-slide-next .contWrap .slide_cont1 .cont_ex .bg_icon,
.swiper2 .swiper-slide.on .contWrap.on .slide_cont1 .cont_ex .bg_icon {background-color: #edb818;}
.swiper2 .swiper-slide-next .contWrap .slide_cont1 .cont_ex .txt,
.swiper2 .swiper-slide.on .contWrap.on .slide_cont1 .cont_ex .txt {color: #222;}
.swiper2 .swiper-slide-next .contWrap .slide_cont1::after,
.swiper2 .swiper-slide.on .contWrap.on .slide_cont1::after {background-color: #edb818;}
/*// content1 */ /*// content1 */
@ -303,6 +325,7 @@
.swiper2 .contWrap .slide_cont::before {right: 22px;} .swiper2 .contWrap .slide_cont::before {right: 22px;}
.swiper2 .contWrap .slide_cont::before {right: 7px;} .swiper2 .contWrap .slide_cont::before {right: 7px;}
.swiper2 .contWrap .slide_cont::before {right: 17px;} .swiper2 .contWrap .slide_cont::before {right: 17px;}
.swiper2 .contWrap .slide_cont1 .txt {font-size:14px; line-height: 1.2;}
/* content2 문자샘플 영역 */ /* content2 문자샘플 영역 */
.msg_text .area_in_text{padding: 15px 0; height: 286px; background-position: 15px 12px;} .msg_text .area_in_text{padding: 15px 0; height: 286px; background-position: 15px 12px;}
.msg_text .area_in_text p{height: 253px;} .msg_text .area_in_text p{height: 253px;}

View File

@ -296,7 +296,7 @@
.histroy_trans ul {background-color: #f5f5f5; padding: 0 20px; border: 1px solid #dadada; border-radius: 0 0 5px 5px; margin-top: -3px;} .histroy_trans ul {background-color: #f5f5f5; padding: 0 20px; border: 1px solid #dadada; border-radius: 0 0 5px 5px; margin-top: -3px;}
.histroy_trans ul li {position: relative; height: 30px; line-height: 30px; border-bottom: 1px solid #e8e8e8;} .histroy_trans ul li {position: relative; height: 30px; line-height: 30px; border-bottom: 1px solid #e8e8e8;}
.histroy_trans ul li:only-child {border-bottom: 0;} .histroy_trans ul li:only-child {border-bottom: 0;}
.histroy_trans ul li p {display: inline-block; color: #666; font-size: 14px; font-weight: 300; padding-left: 15px; letter-spacing: 0.5px;} .histroy_trans ul li p {display: inline-block; width: 100%; color: #666; font-size: 14px; font-weight: 300; letter-spacing: 0.5px; text-align:center;}
.histroy_trans ul li button {position: absolute; right: 0; top: 50%; transform: translateY(-50%);} .histroy_trans ul li button {position: absolute; right: 0; top: 50%; transform: translateY(-50%);}
.popup_btn_wrap2.hisroy_btn {width: 178px;} .popup_btn_wrap2.hisroy_btn {width: 178px;}
.popup_btn_wrap2.hisroy_btn button {width: calc(100%/2 - 2.5px); height: 32px; font-size: 14px;} .popup_btn_wrap2.hisroy_btn button {width: calc(100%/2 - 2.5px); height: 32px; font-size: 14px;}
@ -1035,7 +1035,7 @@
/* 발신프로필 등록 */ /* 발신프로필 등록 */
.add_profile_popup01 .layer_tType1 .cf_text{display: block; font-size: 16px; font-weight: 300; color: #666; padding: 10px 0 0 0;} .add_profile_popup01 .layer_tType1 .cf_text{display: block; font-size: 16px; font-weight: 300; color: #666; padding: 10px 0 0 0;}
.add_profile_popup01 .layer_tType1 td{padding: 10px 0 10px 10px;} .add_profile_popup01 .layer_tType1 td{padding: 10px 0 10px 10px;}
.add_profile_popup01 .layer_tType1 select{width: 207px;} .add_profile_popup01 .layer_tType1 select{min-width: 200px;width:auto;}
.add_profile_popup01 .table_top{padding: 0 0 10px 0;} .add_profile_popup01 .table_top{padding: 0 0 10px 0;}
.add_profile_popup01 .table_top p{font-size: 16px; color: #555;} .add_profile_popup01 .table_top p{font-size: 16px; color: #555;}
.add_profile_popup01 .kakaotalk_tag{position: absolute; left: 27px; top: 20px;} .add_profile_popup01 .kakaotalk_tag{position: absolute; left: 27px; top: 20px;}
@ -1252,7 +1252,14 @@
.tabulator .tabulator-header .tabulator-col .tabulator-col-content{background-color: #ededed;} .tabulator .tabulator-header .tabulator-col .tabulator-col-content{background-color: #ededed;}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder .tabulator-col-title{position: relative; z-index: 1;} .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder .tabulator-col-title{position: relative; z-index: 1;}
/*문자전송_안심번호 안내 추가 팝업*/
.info_guide_popup .layer_in{padding: 30px 25px 36px;}
.info_guide_popup .layer_in .info_list .center{margin: 6px 0;}
.info_guide_popup .layer_in .info_list li:before{content: normal;}
.info_guide_popup .layer_in .info_list li .sub_te{margin: 0 0 0 8px;}
.info_guide_popup .layer_in .info_list li .sub_te li:before{content: '-'; position: absolute; left: 0; top: 0; font-size: 15px; font-weight: 300; line-height: 26px;}
.info_guide_popup .layer_in .info_guide_sub{margin: -20px 0 0 0; font-size: 14px; color: #666; font-weight: 300; line-height: 1.5;}
.info_guide_popup .layer_in .info_guide_sub span{color: #222; font-weight: 400;}
/* ie */ /* ie */
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {

View File

@ -18,6 +18,8 @@
<!-- <p>***<span class="font1"> (컨텐츠)</span> : 반복적으로 사용 안함</p> <!-- <p>***<span class="font1"> (컨텐츠)</span> : 반복적으로 사용 안함</p>
<p>***<span class="font2"> (보드)</span> : 반복적으로 사용</p> --> <p>***<span class="font2"> (보드)</span> : 반복적으로 사용</p> -->
<ul class="page"> <ul class="page">
<li><a href="/publish/textingmsg_2025_detail_kakao.html">textingmsg_2025_detail_kakao.html</a>[개선] 카카오 발송결과 상세</li>
<li><a href="/publish/index_2025.html">index_2025.html</a>메인비주얼 아래 서비스안내 배너를 관리자페이지에서 텍스트 및 아이콘 등록 가능 하도록 수정</li>
<li><a href="/publish/textingmsg_2025_detail.html">textingmsg_2025_detail.html</a>[개선] 발송결과 상세 수정</li> <li><a href="/publish/textingmsg_2025_detail.html">textingmsg_2025_detail.html</a>[개선] 발송결과 상세 수정</li>
<li><a href="/publish/textingmsg_2025_list.html">textingmsg_2025_list.html</a>[개선] 발송결과 수정</li> <li><a href="/publish/textingmsg_2025_list.html">textingmsg_2025_list.html</a>[개선] 발송결과 수정</li>
<li><a href="/publish/service3_spam_2024.html">service3_spam_2024.html</a>불법스팸방지정책 (2024.11.29)</li> <li><a href="/publish/service3_spam_2024.html">service3_spam_2024.html</a>불법스팸방지정책 (2024.11.29)</li>

File diff suppressed because it is too large Load Diff

View File

@ -390,10 +390,10 @@ $(document).ready(function () {
// 번호추가 ? 호버 시 팝업 // 번호추가 ? 호버 시 팝업
$(".btn_add_number .qmMark").mouseover(function(){ $(".btn_add_number .qmMark").mouseover(function(){
$(this).parents(".btnType").next().next(".send_hover_cont").addClass("on"); $(this).parents(".btnType").siblings(".send_hover_cont").addClass("on");
}) })
$(".btn_add_number .qmMark").mouseleave(function(){ $(".btn_add_number .qmMark").mouseleave(function(){
$(this).parents(".btnType").next().next(".send_hover_cont").removeClass("on"); $(this).parents(".btnType").siblings(".send_hover_cont").removeClass("on");
}) })
@ -933,6 +933,25 @@ function contentTab(obj, tabId){
currTabId = tabId; currTabId = tabId;
} }
//콘텐츠 - 발송결과 미리보기 tab
function phoneTab(obj, tabId){
var $tab = $(obj).closest("li");
$tab.addClass("active");
$tab.find("button").attr("title", "선택됨");
$tab.siblings("li.tab").removeClass("active");
$tab.siblings("li.btn_tab").removeClass("active");
$tab.siblings("li.tab").find("button").removeAttr("title");
var $tabCn = $("#tab_phone_" + tabId);
$tabCn.fadeIn(0);
$tabCn.addClass("current");
$(".tab_phone").not($tabCn).removeClass("current");
$(".tab_phone").not($tabCn).fadeOut(0);
currTabId = tabId;
}
/* 회원가입 약관동의 list */ /* 회원가입 약관동의 list */
function clause_list(obj){ function clause_list(obj){
var listBody = $(obj).parents(".clause_list_head").siblings(".clause_list_body"); var listBody = $(obj).parents(".clause_list_head").siblings(".clause_list_body");

View File

@ -116,6 +116,19 @@ function tooltip() {
$("body").find(".mask").addClass("on"); $("body").find(".mask").addClass("on");
$("body").css("overflow","hidden"); $("body").css("overflow","hidden");
wrapWindowByMask(popName); wrapWindowByMask(popName);
if($(e.target).closest(".popup-com").is(".popup-com") == true){
$(".mask").attr("style","z-index:101;");
$("."+popName).closest(".tooltip-wrap").attr("style","z-index:105;");
}
// 엑셀 불러오기 > 주소록 상세결과 팝업 마스크 오류 예외처리
if($("[data-tooltip-con="+popName+"]").is(".adr_detail_result")){
$(".mask").removeClass("on");
$(".adr_detail_result").before('<div class="mask on"></div>');
$("body").css("overflow","hidden");
$(".adr_detail_result").closest(".tooltip-wrap").attr("style","z-index:120;");
}
/* 주소록 대량등록, 주소롟 불러오기 팝업에 있는 테이블 스크롤바 꾸미기 */ /* 주소록 대량등록, 주소롟 불러오기 팝업에 있는 테이블 스크롤바 꾸미기 */
$(".adr_pop_list2 .adr_bd_wrap").mCustomScrollbar({ $(".adr_pop_list2 .adr_bd_wrap").mCustomScrollbar({
@ -148,17 +161,32 @@ function tooltip() {
/* 상세보기 버튼 클릭 시 레이어팝업*/ /* 상세보기 버튼 클릭 시 레이어팝업*/
// 팝업이 보이고 있으면 마스크 노출/미노출 // 팝업이 보이고 있으면 마스크 노출/미노출
// 레이어 팝업 2개 뜰 경우 // 레이어 팝업 2개 뜰 경우
if($(".popup-com:visible").length <= 1){ if($(".popup-com:visible").length < 1){
$(".mask").removeClass("on"); $(".mask").removeClass("on");
}else{} }else{
$(".mask").attr("style","z-index:99;");
$(".mask").addClass("on");
$("body").css("overflow","hidden");
}
if($(this).closest(".adr_layer").is(".adr_popup14") == true){ if($(this).closest(".adr_layer").is(".adr_popup14") == true){
$(".mask").addClass("on"); $(".mask").addClass("on");
$("body").css("overflow","hidden");
}else{} }else{}
// 결과상세에서 레이어팝업 2개 뜰 경우 // 결과상세에서 레이어팝업 2개 뜰 경우
if($(this).closest(".adr_layer").is(".rev_popup02") == true){ if($(this).closest(".adr_layer").is(".rev_popup02") == true && $(this).closest(".adr_layer").is(".add_adr_popup") == false){
$(".mask").addClass("on"); $(".mask").addClass("on");
}else{} $("body").css("overflow","hidden");
}
else{}
// 엑셀 불러오기 > 주소록 상세결과 팝업 마스크 오류 예외처리
if($(this).closest(".adr_layer").is(".adr_detail_result")){
$(".mask").removeClass("off");
$(".adr_detail_result").siblings(".mask").remove();
}
}) })
} }

View File

@ -244,7 +244,7 @@
<!-- 발송대상리스트 팝업 --> <!-- 발송대상리스트 팝업 -->
<div class="tooltip-wrap"> <div class="tooltip-wrap">
<div class="popup-com ad_layer rev_popup04" tabindex="0" data-tooltip-con="rev_popup04" data-focus="rev_popup04" data-focus-prev="rev_popup04-close" style="width:530px;"> <div class="popup-com ad_layer rev_popup04 transmit_list_popup" tabindex="0" data-tooltip-con="rev_popup04" data-focus="rev_popup04" data-focus-prev="rev_popup04-close" style="width:530px;">
<div class="popup_heading"> <div class="popup_heading">
<p>발송대상 리스트</p> <p>발송대상 리스트</p>
<button type="button" class="tooltip-close" data-focus="rev_popup04-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> <button type="button" class="tooltip-close" data-focus="rev_popup04-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
@ -335,7 +335,7 @@
<div class="table_btn clearfix"> <div class="table_btn clearfix">
<div class="table_btn_left"> <div class="table_btn_left">
<button type="button" class="excel_btn btnType"><i class="downroad"></i>엑셀 다운로드</button> <button type="button" class="excel_btn btnType"><i class="downroad"></i>엑셀 다운로드</button>
<button type="button" data-tooltip="rev_popup02" class="btnType btnType14"><i class="add_img"></i>주소록 등록</button> <button type="button" data-tooltip="rev_popup02" class="btnType btnType14 btn_adr_add"><i class="add_img"></i>주소록 등록</button>
</div> </div>
</div> </div>
@ -542,7 +542,7 @@
<!-- 주소록에 등록 팝업 --> <!-- 주소록에 등록 팝업 -->
<div class="tooltip-wrap"> <div class="tooltip-wrap">
<div class="popup-com adr_layer rev_popup02" tabindex="0" data-tooltip-con="rev_popup02" data-focus="rev_popup02" data-focus-prev="rev_popup02-close" style="width: 510px;"> <div class="popup-com adr_layer rev_popup02 add_adr_popup" tabindex="0" data-tooltip-con="rev_popup02" data-focus="rev_popup02" data-focus-prev="rev_popup02-close" style="width: 510px;">
<div class="popup_heading"> <div class="popup_heading">
<p>주소록에 등록</p> <p>주소록에 등록</p>
<button type="button" class="tooltip-close" data-focus="rev_popup02-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> <button type="button" class="tooltip-close" data-focus="rev_popup02-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>

File diff suppressed because it is too large Load Diff

View File

@ -220,8 +220,7 @@
<ul class="tabType1"> <ul class="tabType1">
<li class="tab active"><button type="button" onclick="TabType5(this,'1');return false;">문자</button> <li class="tab active"><button type="button" onclick="TabType5(this,'1');return false;">문자</button>
</li> </li>
<li class="tab "><button type="button" <li class="tab "><button type="button" onclick="TabType5(this,'2');return false;">카카오톡</button></li>
onclick="TabType5(this,'2');return false;">카카오톡</button></li>
</ul> </ul>
<!--// tab button --> <!--// tab button -->
</div> </div>
@ -613,7 +612,6 @@
<div class="titBox_result"> <div class="titBox_result">
<p>- 최대 3개월간의 발송내역만 확인하실 수 있습니다.</p> <p>- 최대 3개월간의 발송내역만 확인하실 수 있습니다.</p>
<p>- 전송내역이 필요한 경우 기간 내에 다운로드하여 주시기 바랍니다.</p> <p>- 전송내역이 필요한 경우 기간 내에 다운로드하여 주시기 바랍니다.</p>
<p>- 단문문자는 최대 24시간, 장문 및 그림문자는 최대 72시간까지 결과값이 수신되지 않은 경우 실패(비과금) 처리됩니다.</p>
</div> </div>
<!--// 발송결과 개선 : 문구추가 --> <!--// 발송결과 개선 : 문구추가 -->
@ -638,11 +636,11 @@
<button type="button" class="btnType6">조회</button> <button type="button" class="btnType6">조회</button>
</div> </div>
<div class="btn_right"> <div class="btn_right">
<label for="" class="label">발신번호 선택</label> <label for="" class="label">채널선택</label>
<select name="" id="" class="selType2"> <select name="" id="" class="selType2">
<option value="">발신번호</option> <option value="">채널ID</option>
<option value="">발신번호</option> <option value="">채널명</option>
<option value="">발신번호</option> <option value="">내용</option>
</select> </select>
<div class="search"> <div class="search">
<label for="id" class="label"></label> <label for="id" class="label"></label>
@ -695,7 +693,7 @@
</dl> </dl>
</div> </div>
</div> </div>
<!-- <div class="rev_admin_in"> <div class="rev_admin_in">
<div class="rev_admin_top clearfix"> <div class="rev_admin_top clearfix">
<p>친구톡</p> <p>친구톡</p>
<p><span>171</span></p> <p><span>171</span></p>
@ -714,7 +712,7 @@
<dd><span class="c_e40000">0</span></dd> <dd><span class="c_e40000">0</span></dd>
</dl> </dl>
</div> </div>
</div> --> </div>
</div> </div>
<div class="list_tab_wrap2 type4"> <div class="list_tab_wrap2 type4">
@ -728,44 +726,24 @@
<!--// tab button --> <!--// tab button -->
</div> </div>
<!-- 발송관리 > 전체 --> <!-- 발송관리 > 전체 -->
<div class="price_history_cont" id="listTab_2"> <div class="price_history_cont price_wrap" id="listTab_2">
<div class="table_tab_wrap"> <div class="table_tab_wrap">
<!-- tab button --> <!-- tab button -->
<ul> <ul>
<li class="tab active"><button type="button">전체</button></li> <li class="tab active"><button type="button">전체</button></li>
<li class="tab"><button type="button">대기</button></li> <li class="tab"><button type="button">즉시</button></li>
<li class="tab"><button type="button">성공</button></li>
<li class="tab"><button type="button">실패</button></li>
<li class="tab"><button type="button">예약</button></li> <li class="tab"><button type="button">예약</button></li>
</ul> </ul>
<!--// tab button --> <!--// tab button -->
<!-- 발송화면 개선 : 발송결과 추가-->
<div class="tab_btnbox" style="z-index:999;">
<button type="button" class="btnType btnType14 check_validity" >발송결과<i class="qmMark"></i></button>
<div class="info_hover_cont send_hover_cont">
<dl>
<dt class="c_666">[<span>대기</span>]</dt>
<dd>발송은 성공하였으며, 수신자측 통신사로부터 수신여부를
확인중인 상태</dd>
<dt class="c_002c9a">[<span>성공</span>]</dt>
<dd>발송 및 수신이 완료된 상태</dd>
<dt class="c_e40000">[<span>실패</span>]</dt>
<dd>결번, 일시정지, 전화번호 오류 등의 사유로 발송이
불가한 상태</dd>
<dt class="c_222">[<span>예약</span>]</dt>
<dd>예약 발송 대기 상태</dd>
</dl>
</div>
</div>
<!--// 발송화면 개선 : 발송결과 추가-->
</div> </div>
<div class="table_cont current"> <div class="table_cont current">
<div class="list_info"> <div class="list_info">
<p>총 발송건수 <span class="c_e40000">171</span></p> <p>총 발송건수 <span class="c_e40000">171</span></p>
<div> <div>
<p class="cf_text c_e40000">※ 예약문자 발송취소는 예약 발송시간 기준 5분 전까지만 가능</p> <p class="cf_text c_e40000">※ 예약 발송취소는 예약 발송시간 기준 5분 전까지만 가능</p>
<label for="" class="label">줄보기 선택</label> <label for="" class="label">줄보기 선택</label>
<select id="" class="selType2"> <select id="" class="selType2">
<option>10개보기</option> <option>10개보기</option>
@ -779,17 +757,16 @@
<colgroup> <colgroup>
<col style="width: 45px;"> <col style="width: 45px;">
<col style="width: 12%;"> <col style="width: 12%;">
<col style="width: 8%;"> <col style="width: 7%;">
<col style="width: auto;"> <col style="width: auto;">
<col style="width: 7%;">
<col style="width: 6%;">
<col style="width: 6%;">
<col style="width: 6%;">
<col style="width: 6%;">
<col style="width: 6%;">
<col style="width: 8%;">
<col style="width: 8%;"> <col style="width: 8%;">
<col style="width: 6%;">
<col style="width: 6%;">
<col style="width: 6%;">
<col style="width: 6%;">
<col style="width: 6%;">
<col style="width: 6%;">
<col style="width: 9%;">
<col style="width: 11%;">
</colgroup> </colgroup>
<thead> <thead>
<tr> <tr>
@ -813,30 +790,36 @@
<input type="button" class="sort sortBtn" id="sort_msgGroupCnt"> <input type="button" class="sort sortBtn" id="sort_msgGroupCnt">
</div> </div>
</th> </th>
<th colspan="4">카카오톡 결과</th> <th colspan="3">카카오톡결과</th>
<th colspan="2">대체문자 결과</th> <th colspan="2">대체문자결과</th>
<th rowspan="2">금액</th> <th rowspan="2">금액(원)</th>
<th rowspan="2">예약관리</th> <th rowspan="2">진행상황</th>
</tr> </tr>
<tr> <tr>
<th>대기</th> <th>대기</th>
<th>성공</th> <th>성공</th>
<th>실패</th> <th>실패</th>
<th>예약</th>
<th>성공</th> <th>성공</th>
<th>실패</th> <th>실패</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td> <td>
<label for="" class="label">선택</label> <label for="" class="label">선택</label>
<input type="checkbox"> <input type="checkbox" disabled>
</td> </td>
<td>2024-01-09 17:42</td> <td>2024-01-09 17:42</td>
<td>단문</td> <td>알림톡</td>
<td class="result_cont"><a href="#">내용을 클릭하면 상세보기 화면으로 이동합니다.</a></td> <td class="result_cont">
<td>125,895</td> <div class="icon_wrap">
<span class="re">예약</span>
<span class="di">분할</span>
<a href="#">내용을 클릭하면 상세보기 화면으로 이동합니다.</a>
</div>
</td>
<td>0</td>
<td> <td>
<p class="c_666">0</p> <p class="c_666">0</p>
</td> </td>
@ -850,40 +833,123 @@
<p class="c_002c9a">0</p> <p class="c_002c9a">0</p>
</td> </td>
<td> <td>
<p class="c_002c9a">0</p> <p class="c_e40000">0</p>
</td> </td>
<td> <td>
<p class="c_e40000">125,895</p> 8,485,258
</td>
<td>
8,485,258원
</td> </td>
<td> <td>
<p><button class="btnType btnType20">예약취소</button></p> <p><button class="btnType btnType20">예약취소</button></p>
</td> </td>
</tr> </tr>
<tr>
<td>
<label for="" class="label">선택</label>
<input type="checkbox">
</td>
<td>2024-01-09 17:42</td>
<td>친구톡</td>
<td class="result_cont">
<div class="icon_wrap">
<span class="re">예약</span>
<a href="#">내용을 클릭하면 상세보기 화면으로 이동합니다.</a>
</div>
</td>
<td>0</td>
<td>
<p class="c_666">0</p>
</td>
<td>
<p class="c_002c9a">0</p>
</td>
<td>
<p class="c_e40000">0</p>
</td>
<td>
<p class="c_002c9a">0</p>
</td>
<td>
<p class="c_e40000">0</p>
</td>
<td>-</td>
<td>예약취소</td>
</tr>
<tr>
<td>
<label for="" class="label">선택</label>
<input type="checkbox">
</td>
<td>2024-01-09 17:42</td>
<td>친구톡</td>
<td class="result_cont">
<div class="icon_wrap">
<a href="#">내용을 클릭하면 상세보기 화면으로 이동합니다.</a>
</div>
</td>
<td>458,002</td>
<td>
<p class="c_666">1</p>
</td>
<td>
<p class="c_002c9a">458,000</p>
</td>
<td>
<p class="c_e40000">1</p>
</td>
<td>
<p class="c_002c9a">1</p>
</td>
<td>
<p class="c_e40000">1</p>
</td>
<td>12,580</td>
<td>진행중</td>
</tr>
<tr>
<td>
<label for="" class="label">선택</label>
<input type="checkbox">
</td>
<td>2024-01-09 17:42</td>
<td>친구톡</td>
<td class="result_cont">
<div class="icon_wrap">
<a href="#">내용을 클릭하면 상세보기 화면으로 이동합니다.</a>
</div>
</td>
<td>458,002</td>
<td>
<p class="c_666">1</p>
</td>
<td>
<p class="c_002c9a">458,000</p>
</td>
<td>
<p class="c_e40000">1</p>
</td>
<td>
<p class="c_002c9a">1</p>
</td>
<td>
<p class="c_e40000">1</p>
</td>
<td>12,580</td>
<td>완료</td>
</tr>
</tbody> </tbody>
</table> </table>
</div> </div>
<!--// 발송화면 개선 : 카카오톡 테이블 수정 --> <!--// 발송화면 개선 : 카카오톡 테이블 수정 -->
<div class="table_btn clearfix"> <div class="table_btn clearfix">
<div class="table_btn_left"> <div class="table_btn_left">
<button type="button" onclick="" class="btnType btnType15"><i class="remove_img"></i>선택삭제</button>
<button type="button" data-tooltip="rev_popup02" class="btnType btnType15"><i
class="add_img"></i>그룹등록</button>
<button type="button" class="btnType btnType15"><i class="remove_img"></i>주소록에서
번호 삭제</button>
<button type="button" class="btnType btnType15">수신거부번호 등록</button>
</div> </div>
<div class="table_btn_right"> <div class="table_btn_right">
<button type="button" class="excel_btn btnType"><i class="downroad"></i>엑셀 <button type="button" class="excel_btn btnType"><i class="downroad"></i>엑셀 다운로드</button>
다운로드</button>
<button type="button" class="print_btn btnType"><i class="print_img"></i>발송결과
출력하기</button>
</div> </div>
</div> </div>
<!-- pagination --> <!-- pagination -->
<ul class="pagination"> <ul class="pagination">