Merge remote-tracking branch 'origin/master'

This commit is contained in:
JSYOO 2021-11-09 10:16:12 +09:00
commit 322638fa98
33 changed files with 933 additions and 549 deletions

View File

@ -69,7 +69,7 @@ public interface AttachFileService
* @return * @return
* @throws Exception * @throws Exception
*/ */
public int deleteAttachFileGroup(AttachFileVO attachFileVO) throws Exception; public int deleteAttachFileGroup(String attachFileId) throws Exception;
/** /**
* 첨부파일 삭제한다. * 첨부파일 삭제한다.

View File

@ -8,6 +8,7 @@ import java.util.Map;
import nlib.restful.service.DataApiReqVO; import nlib.restful.service.DataApiReqVO;
import nlib.restful.service.DataApiResVO; import nlib.restful.service.DataApiResVO;
import nlib.user.service.NlibLoginVO; import nlib.user.service.NlibLoginVO;
import nlib.util.StringUtil;
public interface QnaService extends BoardService public interface QnaService extends BoardService
{ {
@ -45,5 +46,24 @@ public interface QnaService extends BoardService
*/ */
public int deleteArticle(ArticleVO articleVO) throws Exception; public int deleteArticle(ArticleVO articleVO) throws Exception;
/**
* 해당 QNA 글을 변경할 있는지 여부를 확인한다.
*
* @param articleVO
* @return
* @throws Exception
*/
public String canModify(ArticleVO articleVO) throws Exception;
/**
* 해당 QNA 글을 읽을 있는지 여부를 확인한다.
*
* @param articleVO
* @return
* @throws Exception
*/
public String canRead(ArticleVO articleVO) throws Exception;
} }

View File

@ -76,7 +76,16 @@ public interface AttachFileDAO {
* @return * @return
* @throws Exception * @throws Exception
*/ */
public int deleteAttachFileGroup(AttachFileVO attachFileVO) throws Exception; public int deleteAttachFileGroup(String attachFileId) throws Exception;
/**
* 첨부파일그룹에 속한 모든 파일을 삭제한다.
*
* @param attachFileVO
* @return
* @throws Exception
*/
public int deleteAllFilesOfAttachFileGroup(String attachFileId) throws Exception;
/** /**
* 첨부파일 삭제한다. * 첨부파일 삭제한다.

View File

@ -8,8 +8,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import nlib.bbs.service.ArticleVO;
import nlib.bbs.service.AttachFileService; import nlib.bbs.service.AttachFileService;
import nlib.bbs.service.AttachFileVO; import nlib.bbs.service.AttachFileVO;
import nlib.bbs.service.QnaService;
import nlib.util.StringUtil; import nlib.util.StringUtil;
/** /**
@ -42,6 +44,9 @@ public class AttachFileServiceImpl implements AttachFileService
@Resource(name="attachFileDAO") @Resource(name="attachFileDAO")
AttachFileDAO attachFileDAO; AttachFileDAO attachFileDAO;
@Resource(name = "qnaService")
private QnaService qnaService;
/** /**
* 첨부파일 목록을 조회한다. * 첨부파일 목록을 조회한다.
* *
@ -86,8 +91,10 @@ public class AttachFileServiceImpl implements AttachFileService
* @throws Exception * @throws Exception
*/ */
@Override @Override
public int deleteAttachFileGroup(AttachFileVO attachFileVO) throws Exception { public int deleteAttachFileGroup(String attachFileId) throws Exception {
return attachFileDAO.deleteAttachFileGroup(attachFileVO); int ret = attachFileDAO.deleteAttachFileGroup(attachFileId);
attachFileDAO.deleteAllFilesOfAttachFileGroup(attachFileId);
return ret;
} }
/** /**
@ -120,7 +127,6 @@ public class AttachFileServiceImpl implements AttachFileService
return attachFileDAO.selectAttachFile(attachFileVO); return attachFileDAO.selectAttachFile(attachFileVO);
} }
/** /**
* 다운로드 가능 여부를 확인하다. * 다운로드 가능 여부를 확인하다.
* *
@ -129,10 +135,13 @@ public class AttachFileServiceImpl implements AttachFileService
* @throws Exception * @throws Exception
*/ */
public boolean checkAttachFileDownload(AttachFileVO attachFileVO) throws Exception { public boolean checkAttachFileDownload(AttachFileVO attachFileVO) throws Exception {
String ret = attachFileDAO.checkAttachFileDownload(attachFileVO);
if(StringUtil.isEmpty(ret)) return false; String bdType = attachFileVO.getBdType();
if(StringUtil.isEmpty(bdType)) return false;
return ret.charAt(0) == 'Y'; String ret = "Y";
ret = attachFileDAO.checkAttachFileDownload(attachFileVO);
return StringUtil.isEmpty(ret) ? false : (ret.charAt(0) == 'Y');
} }
} }

View File

@ -159,8 +159,55 @@ public class QnaServiceImpl extends BoardServiceImpl implements QnaService
* @param reqVO * @param reqVO
* @return * @return
*/ */
public int deleteArticle(ArticleVO articleVO) { public int deleteArticle(ArticleVO articleVO) throws Exception {
return qnaDAO.deleteArticle(articleVO); int ret = qnaDAO.deleteArticle(articleVO);
attachFileService.deleteAttachFileGroup(articleVO.getBdAttachFileId());
return ret;
} }
/**
* 해당 QNA 글을 변경할 있는지 여부를 확인한다.
*
* @param articleVO
* @return
* @throws Exception
*/
public String canModify(ArticleVO articleVO) throws Exception {
if(StringUtil.isEmpty(articleVO.getLoginedMbInfoId())) {
return "로그인 후, 이용하실 수 있습니다.";
}
ArticleVO savedArticleVO = selectArticle(articleVO);
if(!"Y".equals(savedArticleVO.getMyQnaYn())) {
return "본인의 글만 변경할 수 있습니다.";
}
if("Y".equals(savedArticleVO.getAnswerYn())) {
return "이미 답변완료된 글은 변경할 수 없습니다.";
}
return null;
}
/**
* 해당 QNA 글을 읽을 있는지 여부를 확인한다.
*
* @param articleVO
* @return
* @throws Exception
*/
public String canRead(ArticleVO articleVO) throws Exception {
ArticleVO savedArticleVO = selectArticle(articleVO);
if("Y".equals(savedArticleVO.getMyQnaYn())) return null;
if("Y".equals(savedArticleVO.getSecretYn())) {
return "다른 사용자의 비밀글은 조회할 수 없습니다.";
}
return null;
}
} }

View File

@ -146,7 +146,15 @@ public class QnaController extends NlibCommonController {
// 읽음처리 상세내용 조회 // 읽음처리 상세내용 조회
searchArticleVO.setLoginedMbInfoId(getMbInfoId(request)); searchArticleVO.setLoginedMbInfoId(getMbInfoId(request));
ArticleVO articleVO = qnaService.selectArticle(searchArticleVO); ArticleVO articleVO = null;
String canRead = qnaService.canRead(searchArticleVO);
if(canRead != null) {
model.addAttribute("message", canRead);
articleVO = searchArticleVO;
} else {
articleVO = qnaService.selectArticle(searchArticleVO);
}
model.addAttribute("searchArticle", searchArticleVO); model.addAttribute("searchArticle", searchArticleVO);
model.addAttribute("article", articleVO); model.addAttribute("article", articleVO);
@ -228,7 +236,7 @@ public class QnaController extends NlibCommonController {
//--------------------------- //---------------------------
// 기본 정보 설정 // 기본 정보 설정
//--------------------------- //---------------------------
articleVO.setRegDd(loginVO.getMbInfoId()); articleVO.setRegId(loginVO.getMbInfoId());
articleVO.setMngOrgCd(getCurCouncilCd(request)); // 문화원코드 articleVO.setMngOrgCd(getCurCouncilCd(request)); // 문화원코드
articleVO.setBdType(BD_TYPE_QNA); articleVO.setBdType(BD_TYPE_QNA);
articleVO.setAnswerYn("N"); articleVO.setAnswerYn("N");
@ -333,7 +341,7 @@ public class QnaController extends NlibCommonController {
HttpServletRequest request HttpServletRequest request
, ArticleVO articleVO , ArticleVO articleVO
, String fileList , String fileList
, String removedfile , String delFileList
, RedirectAttributes redirectAttrs , RedirectAttributes redirectAttrs
, ModelMap model) throws Exception { , ModelMap model) throws Exception {
@ -341,13 +349,15 @@ public class QnaController extends NlibCommonController {
// 권한 변경 가능 상태 체크 // 권한 변경 가능 상태 체크
articleVO.setLoginedMbInfoId(getMbInfoId(request)); articleVO.setLoginedMbInfoId(getMbInfoId(request));
String message = canModify(articleVO); String message = qnaService.canModify(articleVO);
if(message != null) { if(message != null) {
redirectAttrs.addFlashAttribute("searchArticle", articleVO); redirectAttrs.addFlashAttribute("searchArticle", articleVO);
redirectAttrs.addFlashAttribute("message", message); redirectAttrs.addFlashAttribute("message", message);
return "redirect:/bbs/insertQnaForm.do"; return "redirect:/bbs/listQnas.do";
} }
articleVO.setModId(nlibLoginVO.getMbInfoId());
//--------------------------- //---------------------------
// 첨부파일 정보 설정 // 첨부파일 정보 설정
@ -388,7 +398,7 @@ public class QnaController extends NlibCommonController {
} }
if(StringUtil.isNotEmpty(attachFileId)) { if(StringUtil.isNotEmpty(attachFileId)) {
articleVO.setBdAttachFileId(attachFileId); if(StringUtil.isNotEmpty(articleVO.getBdAttachFileId())) articleVO.setBdAttachFileId(attachFileId);
String fileSStreCours = NlibProperty.getProperty("fileupload.base.path") + NlibProperty.getProperty("fileupload.bbs.qna.subpath") + "/"; String fileSStreCours = NlibProperty.getProperty("fileupload.base.path") + NlibProperty.getProperty("fileupload.bbs.qna.subpath") + "/";
List<AttachFileVO> attachFiles = new ArrayList<AttachFileVO>(); List<AttachFileVO> attachFiles = new ArrayList<AttachFileVO>();
@ -417,9 +427,9 @@ public class QnaController extends NlibCommonController {
} }
// 첨부파일 삭제 // 첨부파일 삭제
if(StringUtil.isNotEmpty(removedfile)) { if(StringUtil.isNotEmpty(delFileList)) {
String removedFileListJsonStr = removedfile; String removedFileListJsonStr = delFileList;
if(removedFileListJsonStr.startsWith("&")) removedFileListJsonStr = StringEscapeUtils.unescapeHtml(removedFileListJsonStr); if(removedFileListJsonStr.startsWith("&")) removedFileListJsonStr = StringEscapeUtils.unescapeHtml(removedFileListJsonStr);
if(removedFileListJsonStr.startsWith("\"")) removedFileListJsonStr = removedFileListJsonStr.substring(1); if(removedFileListJsonStr.startsWith("\"")) removedFileListJsonStr = removedFileListJsonStr.substring(1);
if(removedFileListJsonStr.endsWith("\"")) removedFileListJsonStr = removedFileListJsonStr.substring(0, removedFileListJsonStr.length()-1); if(removedFileListJsonStr.endsWith("\"")) removedFileListJsonStr = removedFileListJsonStr.substring(0, removedFileListJsonStr.length()-1);
@ -452,10 +462,10 @@ public class QnaController extends NlibCommonController {
log.error("첨부파일 아이디(attachFileId) 값은 필수 항목입니다. 첨부파일 삭제에 실패하였습니다. 그러나, 게시물 등록은 계속 진행됩니다."); log.error("첨부파일 아이디(attachFileId) 값은 필수 항목입니다. 첨부파일 삭제에 실패하였습니다. 그러나, 게시물 등록은 계속 진행됩니다.");
} }
if(StringUtil.isNotEmpty(attachFileId)) { if(StringUtil.isNotEmpty(attachFileId) && attachFileId.equals(articleVO.getBdAttachFileId())) {
articleVO.setBdAttachFileId(attachFileId); //articleVO.setBdAttachFileId(attachFileId);
String fileSStreCours = NlibProperty.getProperty("fileupload.base.path") + NlibProperty.getProperty("fileupload.bbs.qna.subpath") + "/"; //String fileSStreCours = NlibProperty.getProperty("fileupload.base.path") + NlibProperty.getProperty("fileupload.bbs.qna.subpath") + "/";
List<AttachFileVO> removedAttachFiles = new ArrayList<AttachFileVO>(); List<AttachFileVO> removedAttachFiles = new ArrayList<AttachFileVO>();
for(int i=0; i<removedFileListObj.size(); i++) { for(int i=0; i<removedFileListObj.size(); i++) {
@ -476,12 +486,7 @@ public class QnaController extends NlibCommonController {
} }
fVO.setAttachFileId(attachFileId); fVO.setAttachFileId(attachFileId);
fVO.setStreFileNm((String)remFinfo.get("streFileNm"));
fVO.setFileSn(fileSn); fVO.setFileSn(fileSn);
fVO.setFileSize(((Integer)remFinfo.get("fileSize")).intValue());
File f = new File(fVO.getFileStreCours() + fVO.getStreFileNm());
if(!f.exists() || !f.isFile()) continue;
removedAttachFiles.add(fVO); removedAttachFiles.add(fVO);
} }
@ -522,45 +527,30 @@ public class QnaController extends NlibCommonController {
// 권한 변경 가능 상태 체크 // 권한 변경 가능 상태 체크
articleVO.setLoginedMbInfoId(getMbInfoId(request)); articleVO.setLoginedMbInfoId(getMbInfoId(request));
String message = canModify(articleVO); String message = qnaService.canModify(articleVO);
if(message != null) { if(message != null) {
redirectAttrs.addFlashAttribute("searchArticle", articleVO); redirectAttrs.addFlashAttribute("searchArticle", articleVO);
redirectAttrs.addFlashAttribute("message", message); redirectAttrs.addFlashAttribute("message", message);
return "redirect:/bbs/insertQnaForm.do"; return "redirect:/bbs/insertQnaForm.do";
} }
ArticleVO articleOrgVO = qnaService.selectArticle(articleVO);
articleOrgVO.setModId(nlibLoginVO.getMbInfoId());
// 삭제 처리 // 삭제 처리
int ret = qnaService.deleteArticle(articleVO); int ret = qnaService.deleteArticle(articleOrgVO);
if(ret < 1) { if(ret < 1) {
redirectAttrs.addFlashAttribute("searchArticle", articleVO); redirectAttrs.addFlashAttribute("searchArticle", articleOrgVO);
redirectAttrs.addFlashAttribute("message", "삭제 처리되지 못했습니다."); redirectAttrs.addFlashAttribute("message", "삭제 처리되지 못했습니다.");
return "redirect:/bbs/insertQnaForm.do"; return "redirect:/bbs/insertQnaForm.do";
} }
model.addAttribute("searchArticle", articleVO); model.addAttribute("searchArticle", articleOrgVO);
redirectAttrs.addFlashAttribute("message", "성공적으로 삭제되었습니다."); redirectAttrs.addFlashAttribute("message", "성공적으로 삭제되었습니다.");
return "redirect:/bbs/listQnas.do"; return "redirect:/bbs/listQnas.do";
} }
public String canModify(ArticleVO articleVO) throws Exception {
if(StringUtil.isEmpty(articleVO.getLoginedMbInfoId())) {
return "로그인 후, 이용하실 수 있습니다.";
}
ArticleVO savedArticleVO = qnaService.selectArticle(articleVO);
if("Y".equals(articleVO.getMyQnaYn())) {
return "본인의 글만 변경할 수 있습니다.";
}
if("Y".equals(savedArticleVO.getAnswerYn())) {
return "이미 답변완료된 글은 변경할 수 없습니다.";
}
return null;
}
} }

View File

@ -8,6 +8,7 @@ import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -26,9 +27,10 @@ import org.springframework.web.servlet.ModelAndView;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import egovframework.com.cmm.service.FileVO;
import nlib.bbs.service.AttachFileService; import nlib.bbs.service.AttachFileService;
import nlib.bbs.service.AttachFileVO; import nlib.bbs.service.AttachFileVO;
import nlib.bbs.service.QnaService;
import nlib.cmm.NlibCommonController;
import nlib.cmm.exception.ErrorMessage; import nlib.cmm.exception.ErrorMessage;
import nlib.cmm.service.NlibProperty; import nlib.cmm.service.NlibProperty;
import nlib.util.FileUtil; import nlib.util.FileUtil;
@ -58,7 +60,7 @@ import nlib.util.UUID;
* *
*/ */
@Controller @Controller
public class FileUploadController { public class FileUploadController extends NlibCommonController {
private static final Logger log = LoggerFactory.getLogger(FileUploadController.class); private static final Logger log = LoggerFactory.getLogger(FileUploadController.class);
@ -229,7 +231,7 @@ public class FileUploadController {
* @throws Exception * @throws Exception
*/ */
@RequestMapping(value="/fileupload/downloadAttachFile.do") @RequestMapping(value="/fileupload/downloadAttachFile.do")
public ModelAndView downloadAttachFile(AttachFileVO attachFileVO, ModelAndView mv) throws Exception { public ModelAndView downloadAttachFile(HttpServletRequest request, AttachFileVO attachFileVO, ModelAndView mv) throws Exception {
//--------------------------------- //---------------------------------
// 권한체크 // 권한체크
@ -238,6 +240,7 @@ public class FileUploadController {
// QnA : 공개된 글인 경우, 모두 공개 // QnA : 공개된 글인 경우, 모두 공개
// QnA : 비밀글 (본인에 한정) // QnA : 비밀글 (본인에 한정)
attachFileVO.setMbInfoId(getMbInfoId(request));
boolean hasAuth = attachFileService.checkAttachFileDownload(attachFileVO); boolean hasAuth = attachFileService.checkAttachFileDownload(attachFileVO);
if(!hasAuth) { if(!hasAuth) {

View File

@ -17,6 +17,9 @@ public class NotificationVO extends PagingVO {
private int totCnt = 0; /* 알림건수(최근1개월) */ private int totCnt = 0; /* 알림건수(최근1개월) */
private int rno = 0; /* 행번호 */ private int rno = 0; /* 행번호 */
private String mngOrgCd; /* 관리문화원코드 */
private String mngOrgNm; /* 관리문화원명 */
public String getNotiId() { public String getNotiId() {
return notiId; return notiId;
} }
@ -95,5 +98,17 @@ public class NotificationVO extends PagingVO {
public void setRno(int rno) { public void setRno(int rno) {
this.rno = rno; this.rno = rno;
} }
public String getMngOrgCd() {
return mngOrgCd;
}
public void setMngOrgCd(String mngOrgCd) {
this.mngOrgCd = mngOrgCd;
}
public String getMngOrgNm() {
return mngOrgNm;
}
public void setMngOrgNm(String mngOrgNm) {
this.mngOrgNm = mngOrgNm;
}
} }

View File

@ -23,6 +23,7 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import nlib.cmm.NlibCommonController; import nlib.cmm.NlibCommonController;
import nlib.cmm.service.NotificationService; import nlib.cmm.service.NotificationService;
import nlib.cmm.service.NotificationVO; import nlib.cmm.service.NotificationVO;
import nlib.cmm.service.PagingVO;
import nlib.cmm.service.NlibProperty; import nlib.cmm.service.NlibProperty;
import nlib.restful.service.DataApiReqVO; import nlib.restful.service.DataApiReqVO;
import nlib.restful.service.DataApiResVO; import nlib.restful.service.DataApiResVO;
@ -87,7 +88,7 @@ public class NotificationController extends NlibCommonController {
searchNotificationVO.setRecvUserId(mbInfoId); searchNotificationVO.setRecvUserId(mbInfoId);
List<NotificationVO> list = notificationService.listNotifications(searchNotificationVO); List<NotificationVO> list = notificationService.listNotifications(searchNotificationVO);
int totRecordCount = (list == null || list.get(0) == null) ? 0 : list.get(0).getTotCnt(); int totRecordCount = (list == null) ? 0 : list.size();
searchNotificationVO.setTotRecordCount(totRecordCount); searchNotificationVO.setTotRecordCount(totRecordCount);
model.addAttribute("notificationList", list); model.addAttribute("notificationList", list);
@ -110,7 +111,7 @@ public class NotificationController extends NlibCommonController {
Authentication authentication, @RequestBody Map<String, String> paramMap) throws Exception { Authentication authentication, @RequestBody Map<String, String> paramMap) throws Exception {
String mbInfoId = getMbInfoId(req); String mbInfoId = getMbInfoId(req);
String pageIndex = StringUtil.getString(paramMap.get("pageIndex"), "1"); int pageIndex = StringUtil.toNumber(paramMap.get("pageIndex"), 1);
int pageSize = StringUtil.toNumber(paramMap.get("pageSize"), DEFUALT_PAGE_SIZE); int pageSize = StringUtil.toNumber(paramMap.get("pageSize"), DEFUALT_PAGE_SIZE);
log.debug("listNotificationsAjax > pageIndex = " + pageIndex); log.debug("listNotificationsAjax > pageIndex = " + pageIndex);
@ -136,6 +137,14 @@ public class NotificationController extends NlibCommonController {
retMap.put("data", list); retMap.put("data", list);
retMap.put("itemsCount", totRecordCount); retMap.put("itemsCount", totRecordCount);
PagingVO pageVO = new PagingVO();
pageVO.setPagingVO(totRecordCount, pageIndex, pageSize);
retMap.put("pagingPageIndex" , pageVO.getPageIndex());
retMap.put("pagingTotRecordCount", pageVO.getTotRecordCount());
retMap.put("pagingStartPage" , pageVO.getStartPage());
retMap.put("pagingEndPage" , pageVO.getEndPage());
retMap.put("pagingLastPage" , pageVO.getLastPage());
return makeResponseEntityJson(retMap); return makeResponseEntityJson(retMap);
} }

View File

@ -123,6 +123,8 @@ public class CollectionVO extends PagingVO {
protected String bookLtRvStatusNm; /* 대출상태구분코드명 */ protected String bookLtRvStatusNm; /* 대출상태구분코드명 */
protected String rsrvExpctDd; /* 대출예약만료일자 */ protected String rsrvExpctDd; /* 대출예약만료일자 */
protected String rtnDd; /* 반납일자 */ protected String rtnDd; /* 반납일자 */
protected String rsrvDivCd; /* 대출/예약 신청구분코드 */
protected String rsrvDivNm; /* 대출/예약 신청구분코드명 */
//-------------------------------------------- //--------------------------------------------
// 열람관련 // 열람관련
@ -739,5 +741,21 @@ public class CollectionVO extends PagingVO {
public void setSubjectCode(String subjectCode) { public void setSubjectCode(String subjectCode) {
this.subjectCode = subjectCode; this.subjectCode = subjectCode;
} }
public String getRsrvDivCd() {
return rsrvDivCd;
}
public void setRsrvDivCd(String rsrvDivCd) {
this.rsrvDivCd = rsrvDivCd;
}
public String getRsrvDivNm() {
return rsrvDivNm;
}
public void setRsrvDivNm(String rsrvDivNm) {
this.rsrvDivNm = rsrvDivNm;
}
} }

View File

@ -26,6 +26,15 @@ public interface RentService
*/ */
public DataApiResVO listRentItems(CollectionVO searchVO); public DataApiResVO listRentItems(CollectionVO searchVO);
/**
* 대출(예약)신청을 취소한다.
*
* @param searchVO
* @return
*/
public DataApiResVO cancelRentItem(CollectionVO searchVO);
/** /**
* 대출을 신청한다. * 대출을 신청한다.
* *
@ -34,7 +43,7 @@ public interface RentService
* @param mngOrgCd * @param mngOrgCd
* @return * @return
*/ */
public List<CollectionVO> insertRentItems(List<CollectionVO> list, String mbInfoId, String mngOrgCd); public List<CollectionVO> insertRentItems(List<CollectionVO> list, String mbInfoId, String mngOrgCd, boolean fromCart) throws Exception;
// //
// /** // /**

View File

@ -24,4 +24,6 @@ public interface CartDAO {
public int countCartItems(@Param("mbInfoId") String mbInfoId, @Param("cartTypeCd") String cartTypeCd) throws Exception; public int countCartItems(@Param("mbInfoId") String mbInfoId, @Param("cartTypeCd") String cartTypeCd) throws Exception;
public int changeCartProcDivCd(CollectionVO cartVO) throws Exception;
} }

View File

@ -10,6 +10,9 @@ import org.slf4j.LoggerFactory;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.fasterxml.jackson.databind.deser.std.ReferenceTypeDeserializer;
import nlib.col.service.CartService;
import nlib.col.service.CollectionVO; import nlib.col.service.CollectionVO;
import nlib.col.service.RentService; import nlib.col.service.RentService;
import nlib.restful.DataApi; import nlib.restful.DataApi;
@ -26,6 +29,10 @@ public class RentServiceImpl implements RentService
@Resource(name="rentDAO") @Resource(name="rentDAO")
private RentDAO rentDAO; private RentDAO rentDAO;
@Resource(name="cartDAO")
private CartDAO cartDAO;
/** RESTFul API 송수신 모듈 */ /** RESTFul API 송수신 모듈 */
@Resource(name = "dataApi") @Resource(name = "dataApi")
private DataApi dataApi; private DataApi dataApi;
@ -72,6 +79,48 @@ public class RentServiceImpl implements RentService
} }
/**
* 대출(예약)신청을 취소한다.
*
* @param searchVO
* @return
*/
public DataApiResVO cancelRentItem(CollectionVO searchVO) {
String message = null;
if(searchVO == null || StringUtil.isEmpty(searchVO.getMbInfoId())) {
message = "대출(예약)신청 취소 요청 정보가 부적합합니다 (MbInfoId)";
log.error("cancelRentItem > " + message);
return new DataApiResVO("E", message);
}
if(StringUtil.isEmpty(searchVO.getMngOrgCd())) {
message = "문화원정보가 부적합합니다. 다시 요청하여 주시기 바랍니다.";
log.error("cancelRentItem > " + message);
return new DataApiResVO("E", message);
}
if(StringUtil.isEmpty(searchVO.getRsrvId())) {
message = "취소할 대출(예약)선청번호 정보가 부적합합니다. 다시 요청하여 주시기 바랍니다.";
log.error("cancelRentItem > " + message);
return new DataApiResVO("E", message);
}
// API 호출
/*
mngOrgCd 문화원코드
mbInfoId 사용자아이디
rsrvId 대출신청예약번호
*/
DataApiReqVO reqVO = new DataApiReqVO("/uac/service/nlib/rent/deleteRentItem", HttpMethod.POST);
reqVO.setMbInfoId(searchVO.getMbInfoId()); // 통신 , 암호화되어 송수신됨
reqVO.putInfoItem("mngOrgCd", searchVO.getMngOrgCd());
reqVO.putInfoItem("rsrvId", searchVO.getRsrvId());
return dataApi.request(reqVO);
}
/** /**
* 대출을 신청한다. * 대출을 신청한다.
* *
@ -80,7 +129,7 @@ public class RentServiceImpl implements RentService
* @param mngOrgCd * @param mngOrgCd
* @return * @return
*/ */
public List<CollectionVO> insertRentItems(List<CollectionVO> list, String mbInfoId, String mngOrgCd) { public List<CollectionVO> insertRentItems(List<CollectionVO> list, String mbInfoId, String mngOrgCd, boolean fromCart) throws Exception {
if(list == null || list.size() < 1) return null; if(list == null || list.size() < 1) return null;
@ -122,12 +171,18 @@ public class RentServiceImpl implements RentService
if(StringUtil.startsWithIgnoreCase(resVO.getResultCode(), "S")) { if(StringUtil.startsWithIgnoreCase(resVO.getResultCode(), "S")) {
cVO.setRsrvId(resVO.getInfoItem("rsrvId", "")); cVO.setRsrvId(resVO.getInfoItem("rsrvId", ""));
cVO.setRsrvDd(StringUtil.formatDateStr(resVO.getInfoItem("rsrvDd", ""), "")); cVO.setRsrvDd(StringUtil.formatDateStr(resVO.getInfoItem("rsrvDd", ""), ""));
cVO.setRsrvDivCd(resVO.getInfoItem("rsrvDivCd")); // 대출상태구분코드
if("1".equals(cVO.getRsrvDivCd())) cVO.setRsrvDivNm("대출신청");
else if("2".equals(cVO.getRsrvDivCd())) cVO.setRsrvDivNm("대출예약");
// 대출신청, 대출예약 구분 : API 팀에서 처리완료시까지 임시 데이터 설정 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDd // 카트에서의 처리 여부 업데이트
cVO.setBookLtRvStatusCd("1"); // 대출상태구분코드 if(fromCart) {
cVO.setBookLtRvStatusNm("대출신청"); // 대출상태구분코드명 cVO.setMbInfoId(mbInfoId);
//cVO.setBookLtRvStatusCd("2"); // 대출상태구분코드 cVO.setCartProcDivCd("R"); // 대출신청완료
//cVO.setBookLtRvStatusNm("대출예약"); // 대출상태구분코드명 cVO.setModId(mbInfoId);
int retUpdateProc = cartDAO.changeCartProcDivCd(cVO);
log.debug("insertRentItems > retUpdateProc=" + retUpdateProc);
}
} else { } else {
cVO.setRsrvId(null); cVO.setRsrvId(null);

View File

@ -23,6 +23,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import nlib.cmm.NlibCommonController; import nlib.cmm.NlibCommonController;
import nlib.cmm.service.CodeService; import nlib.cmm.service.CodeService;
import nlib.cmm.service.NlibProperty; import nlib.cmm.service.NlibProperty;
import nlib.cmm.service.PagingVO;
import nlib.col.service.CollectionService; import nlib.col.service.CollectionService;
import nlib.col.service.CollectionVO; import nlib.col.service.CollectionVO;
import nlib.col.service.RentService; import nlib.col.service.RentService;
@ -95,8 +96,7 @@ public class RentController extends NlibCommonController
List<HashMap<String, String>> rentMngOrgList = rentService.listRentMngOrg(mbInfoId); List<HashMap<String, String>> rentMngOrgList = rentService.listRentMngOrg(mbInfoId);
model.addAttribute("rentMngOrgList" , rentMngOrgList); model.addAttribute("rentMngOrgList" , rentMngOrgList);
model.addAttribute("bookLtRvStatusCd", searchVO.getBookLtRvStatusCd()); model.addAttribute("bookLtRvStatusCd", StringUtil.getString(searchVO.getBookLtRvStatusCd(), "A"));
model.addAttribute("pageSize" , searchVO.getPageSize());
model.addAttribute("pageSize" , searchVO.getPageSize()); model.addAttribute("pageSize" , searchVO.getPageSize());
model.addAttribute("pageIndex" , searchVO.getPageIndex()); model.addAttribute("pageIndex" , searchVO.getPageIndex());
model.addAttribute("message" , message); model.addAttribute("message" , message);
@ -117,11 +117,16 @@ public class RentController extends NlibCommonController
String message = null; String message = null;
String mbInfoId = getMbInfoId(request); String mbInfoId = getMbInfoId(request);
int totCount = 0;
if(StringUtil.isEmpty(mbInfoId)) { if(StringUtil.isEmpty(mbInfoId)) {
message = "로그인하신 후, 이용바랍니다."; message = "로그인하신 후, 이용바랍니다.";
} }
if(StringUtil.isEmpty(searchVO.getBookLtRvStatusCd())) {
searchVO.setBookLtRvStatusCd("A"); // 신청/예약 기본 설정
}
//------------------------------- //-------------------------------
// JSON변환 응답 처리 // JSON변환 응답 처리
//------------------------------- //-------------------------------
@ -135,21 +140,75 @@ public class RentController extends NlibCommonController
// 로그인 사용자 정보 설정 // 로그인 사용자 정보 설정
searchVO.setMbInfoId(mbInfoId); searchVO.setMbInfoId(mbInfoId);
// TO-DO : DDDDDDDDDDDDDDDDDDDddd
// 기본값은 전체이나, API 반영전까지 문화원 코드 전송
// if(StringUtil.isEmpty(searchVO.getMngOrgCd())) searchVO.setMngOrgCd(getCurCouncilCd(request));
searchVO.setMngOrgCd("KCCF");
// 조회 // 조회
// 대출상태구분코드("": 전체, A:신청, B:대출준비완료, C:취소, W:대출중, R0:정상반납, R1:연체반납, P:연체) // 대출상태구분코드("": 전체, A:신청, B:대출준비완료, C:취소, W:대출중, R0:정상반납, R1:연체반납, P:연체)
// TO-DO : api 코드 변경 요청. 변경 처리된 확인할
DataApiResVO resVO = rentService.listRentItems(searchVO); DataApiResVO resVO = rentService.listRentItems(searchVO);
totCount = resVO.getRecordTotCount();
retMap.put("data" , resVO.getRecordList()); retMap.put("data" , resVO.getRecordList());
retMap.put("itemsCount", resVO.getRecordTotCount());
retMap.put("pageIndex" , resVO.getPageIndex()); retMap.put("pageIndex" , resVO.getPageIndex());
} else { } else {
retMap.put("pageIndex" , searchVO.getPageIndex());
retMap.put("message" , "로그인하신 후, 이용바랍니다."); retMap.put("message" , "로그인하신 후, 이용바랍니다.");
} }
retMap.put("itemsCount", totCount);
PagingVO pageVO = new PagingVO();
pageVO.setPagingVO(totCount, searchVO.getPageIndex(), searchVO.getPageSize());
retMap.put("pagingPageIndex" , pageVO.getPageIndex());
retMap.put("pagingTotRecordCount", pageVO.getTotRecordCount());
retMap.put("pagingStartPage" , pageVO.getStartPage());
retMap.put("pagingEndPage" , pageVO.getEndPage());
retMap.put("pagingLastPage" , pageVO.getLastPage());
return makeResponseEntityJson(retMap);
}
@RequestMapping(value="/rent/cancelRentItemAjax.do")
public ResponseEntity<String> cancelRentItemAjax(
HttpServletRequest request,
@RequestBody CollectionVO searchVO) {
String resultMessage = null;
String resultCode = "F";
String mbInfoId = getMbInfoId(request);
int totCount = 0;
if(StringUtil.isEmpty(mbInfoId)) {
resultMessage = "로그인하신 후, 이용바랍니다.";
}
if(StringUtil.isEmpty(searchVO.getMngOrgCd())) {
resultMessage = "문화원정보가 부적합합니다. 다시 요청하여 주시기 바랍니다.";
}
if(StringUtil.isEmpty(searchVO.getRsrvId())) {
resultMessage = "취소할 대출(예약)선청번호 정보가 부적합합니다. 다시 요청하여 주시기 바랍니다.";
}
//-------------------------------
// JSON변환 응답 처리
//-------------------------------
// JS-GRID 페이징 처리를 포함한 응답값 처리
// {data: [{...}],
// itemsCount: 255
// }
HashMap<String, Object> retMap = new HashMap<String, Object>();
if(resultMessage == null) {
// 로그인 사용자 정보 설정
searchVO.setMbInfoId(mbInfoId);
// 대출취소신청
DataApiResVO resVO = rentService.cancelRentItem(searchVO);
resultCode = resVO.getResultCode();
resultMessage = resVO.getResultMessage();
}
retMap.put("resultCode" , resultCode);
retMap.put("resultMessage" , resultMessage);
return makeResponseEntityJson(retMap); return makeResponseEntityJson(retMap);
} }
@ -208,8 +267,7 @@ public class RentController extends NlibCommonController
List<CollectionVO> list = collectionService.makeListOfCollectionVO(selItems); List<CollectionVO> list = collectionService.makeListOfCollectionVO(selItems);
// 임시 막음 DDDDDDDDDDDDDDDDDDDDDDDdd list = rentService.insertRentItems(list, mbInfoId, rentVO.getMngOrgCd(), fromCart);
//list = rentService.insertRentItems(list, mbInfoId, rentVO.getMngOrgCd());
list = collectionService.setDetailInfoForList(list, mbInfoId, NlibProperty.getString("thumbnail.image.url.small")); list = collectionService.setDetailInfoForList(list, mbInfoId, NlibProperty.getString("thumbnail.image.url.small"));
model.addAttribute("rentVO", rentVO); model.addAttribute("rentVO", rentVO);

View File

@ -35,7 +35,7 @@
, A.POST_START_DATE , A.POST_START_DATE
, A.POST_END_DATE , A.POST_END_DATE
, A.VIEW_CNT , A.VIEW_CNT
, CASE WHEN A.BD_ATTACH_FILE_ID IS NULL OR A.BD_ATTACH_FILE_ID = '' THEN 'N' ELSE 'Y' END AS ATTACH_YN , CASE WHEN IFNULL((SELECT COUNT(1) FROM BD_FILE F1 LEFT OUTER JOIN BD_FILEDETAIL F2 ON F1.ATTACH_FILE_ID = F2.ATTACH_FILE_ID WHERE F1.ATTACH_FILE_ID = A.BD_ATTACH_FILE_ID AND F1.USE_AT = 'Y' AND F2.USE_AT = 'Y'),0) > 0 THEN 'Y' ELSE 'N' END AS ATTACH_YN
, DATE_FORMAT(A.REG_DD, '%Y-%m-%d') AS REG_DD , DATE_FORMAT(A.REG_DD, '%Y-%m-%d') AS REG_DD
, A2.RNO , A2.RNO
, IF(IFNULL(C.USER_NM,'') = '', '관리자', C.USER_NM) AS REG_NM , IF(IFNULL(C.USER_NM,'') = '', '관리자', C.USER_NM) AS REG_NM
@ -77,7 +77,7 @@
, A.POST_START_DATE , A.POST_START_DATE
, A.POST_END_DATE , A.POST_END_DATE
, A.VIEW_CNT , A.VIEW_CNT
, CASE WHEN A.BD_ATTACH_FILE_ID IS NULL OR A.BD_ATTACH_FILE_ID = '' THEN 'N' ELSE 'Y' END AS ATTACH_YN , CASE WHEN IFNULL((SELECT COUNT(1) FROM BD_FILE F1 LEFT OUTER JOIN BD_FILEDETAIL F2 ON F1.ATTACH_FILE_ID = F2.ATTACH_FILE_ID WHERE F1.ATTACH_FILE_ID = A.BD_ATTACH_FILE_ID AND F1.USE_AT = 'Y' AND F2.USE_AT = 'Y'),0) > 0 THEN 'Y' ELSE 'N' END AS ATTACH_YN
, A.BD_ATTACH_FILE_ID , A.BD_ATTACH_FILE_ID
, DATE_FORMAT(A.REG_DD, '%Y-%m-%d') AS REG_DD , DATE_FORMAT(A.REG_DD, '%Y-%m-%d') AS REG_DD
, IF(IFNULL(C.USER_NM,'') = '', '관리자', C.USER_NM) AS REG_NM , IF(IFNULL(C.USER_NM,'') = '', '관리자', C.USER_NM) AS REG_NM

View File

@ -43,14 +43,14 @@
SELECT 'Y' AS checkResult SELECT 'Y' AS checkResult
<if test='bdType != null and bdType.equals("QNA")'> <if test='bdType != null and bdType.equals("QNA")'>
FROM BD_NLIB_QNA FROM BD_NLIB_QNA
WHERE BD_TYPE = 'QNA' WHERE UPPER(BD_TYPE) = 'QNA'
AND BD_ATTACH_FILE_ID = #{attachFileId} AND BD_ATTACH_FILE_ID = #{attachFileId}
AND (SECRET_YN = 'N' OR REG_ID = #{mbInfoId}) AND (IFNULL(SECRET_YN,'N') = 'N' OR REG_ID = #{mbInfoId})
AND IFNULL(USE_YN,'Y') = 'Y' AND IFNULL(USE_YN,'Y') = 'Y'
</if> </if>
<if test='bdType != null and bdType.equals("FAQ")'> <if test='bdType != null and bdType.equals("FAQ")'>
FROM BD_NLIB_QNA FROM BD_NLIB_QNA
WHERE BD_TYPE = UPPER('FAQ') WHERE UPPER(BD_TYPE) = 'FAQ'
AND BD_ATTACH_FILE_ID = #{attachFileId} AND BD_ATTACH_FILE_ID = #{attachFileId}
AND IFNULL(USE_YN,'Y') = 'Y' AND IFNULL(USE_YN,'Y') = 'Y'
</if> </if>
@ -61,6 +61,7 @@
AND IFNULL(DELETE_YN, 'N') = 'N' AND IFNULL(DELETE_YN, 'N') = 'N'
AND DATE_FORMAT(NOW(), '%Y%m%d') BETWEEN IFNULL(POST_START_DATE,'00010101') AND IFNULL(POST_END_DATE, '99991231') AND DATE_FORMAT(NOW(), '%Y%m%d') BETWEEN IFNULL(POST_START_DATE,'00010101') AND IFNULL(POST_END_DATE, '99991231')
</if> </if>
LIMIT 1
</select> </select>
<insert id="insertAttachFileGroup" parameterType="AttachFileVO"> <insert id="insertAttachFileGroup" parameterType="AttachFileVO">
@ -74,7 +75,7 @@
, 'Y' , 'Y'
) )
ON DUPLICATE KEY ON DUPLICATE KEY
UPDATE REG_DD = REG_DD; UPDATE USE_AT = 'Y';
</insert> </insert>
<insert id="insertAttachFile" parameterType="AttachFileVO"> <insert id="insertAttachFile" parameterType="AttachFileVO">
@ -106,9 +107,16 @@
) )
</insert> </insert>
<update id="deleteAttachFileGroup" parameterType="AttachFileVO"> <update id="deleteAttachFileGroup" parameterType="String">
UPDATE BD_FILE SET USE_AT = 'N' UPDATE BD_FILE SET USE_AT = 'N'
WHERE ATTACH_FILE_ID = #{attachFileId} WHERE ATTACH_FILE_ID = #{attachFileId}
AND IFNULL(USE_AT, 'Y') = 'Y'
</update>
<update id="deleteAllFilesOfAttachFileGroup" parameterType="String">
UPDATE BD_FILEDETAIL SET USE_AT = 'N'
WHERE ATTACH_FILE_ID = #{attachFileId}
AND IFNULL(USE_AT, 'Y') = 'Y'
</update> </update>
<update id="deleteAttachFile" parameterType="AttachFileVO"> <update id="deleteAttachFile" parameterType="AttachFileVO">

View File

@ -39,7 +39,7 @@
, IFNULL(A.ANSWER_YN, 'N') AS ANSWER_YN , IFNULL(A.ANSWER_YN, 'N') AS ANSWER_YN
, IFNULL(A.USE_YN,'Y') AS USE_YN , IFNULL(A.USE_YN,'Y') AS USE_YN
, A.VIEW_CNT , A.VIEW_CNT
, CASE WHEN A.BD_ATTACH_FILE_ID IS NULL OR A.BD_ATTACH_FILE_ID = '' THEN 'N' ELSE 'Y' END AS ATTACH_YN , CASE WHEN IFNULL((SELECT COUNT(1) FROM BD_FILE F1 LEFT OUTER JOIN BD_FILEDETAIL F2 ON F1.ATTACH_FILE_ID = F2.ATTACH_FILE_ID WHERE F1.ATTACH_FILE_ID = A.BD_ATTACH_FILE_ID AND F1.USE_AT = 'Y' AND F2.USE_AT = 'Y'),0) > 0 THEN 'Y' ELSE 'N' END AS ATTACH_YN
, DATE_FORMAT(A.REG_DD, '%Y-%m-%d') AS REG_DD , DATE_FORMAT(A.REG_DD, '%Y-%m-%d') AS REG_DD
, A2.RNO , A2.RNO
, C.USER_NM AS REG_NM , C.USER_NM AS REG_NM
@ -86,7 +86,7 @@
, IFNULL(A.USE_YN, 'Y') AS USE_YN , IFNULL(A.USE_YN, 'Y') AS USE_YN
, A.VIEW_CNT , A.VIEW_CNT
, A.BD_ATTACH_FILE_ID , A.BD_ATTACH_FILE_ID
, CASE WHEN A.BD_ATTACH_FILE_ID IS NULL OR A.BD_ATTACH_FILE_ID = '' THEN 'N' ELSE 'Y' END AS ATTACH_YN , CASE WHEN IFNULL((SELECT COUNT(1) FROM BD_FILE F1 LEFT OUTER JOIN BD_FILEDETAIL F2 ON F1.ATTACH_FILE_ID = F2.ATTACH_FILE_ID WHERE F1.ATTACH_FILE_ID = A.BD_ATTACH_FILE_ID AND F1.USE_AT = 'Y' AND F2.USE_AT = 'Y'),0) > 0 THEN 'Y' ELSE 'N' END AS ATTACH_YN
, DATE_FORMAT(A.REG_DD, '%Y-%m-%d') AS REG_DD , DATE_FORMAT(A.REG_DD, '%Y-%m-%d') AS REG_DD
, C.USER_NM AS REG_NM , C.USER_NM AS REG_NM
FROM BD_NLIB_QNA A FROM BD_NLIB_QNA A

View File

@ -38,7 +38,7 @@
, IFNULL(A.SECRET_YN, 'N') AS SECRET_YN , IFNULL(A.SECRET_YN, 'N') AS SECRET_YN
, IFNULL(A.EMAIL_RECV_YN, 'N') AS EMAIL_RECV_YN , IFNULL(A.EMAIL_RECV_YN, 'N') AS EMAIL_RECV_YN
, A.VIEW_CNT , A.VIEW_CNT
, CASE WHEN A.BD_ATTACH_FILE_ID IS NULL OR A.BD_ATTACH_FILE_ID = '' THEN 'N' ELSE 'Y' END AS ATTACH_YN , CASE WHEN IFNULL((SELECT COUNT(1) FROM BD_FILE F1 LEFT OUTER JOIN BD_FILEDETAIL F2 ON F1.ATTACH_FILE_ID = F2.ATTACH_FILE_ID WHERE F1.ATTACH_FILE_ID = A.BD_ATTACH_FILE_ID AND F1.USE_AT = 'Y' AND F2.USE_AT = 'Y'),0) > 0 THEN 'Y' ELSE 'N' END AS ATTACH_YN
, DATE_FORMAT(A.REG_DD, '%Y-%m-%d') AS REG_DD , DATE_FORMAT(A.REG_DD, '%Y-%m-%d') AS REG_DD
, A2.RNO , A2.RNO
, C.USER_NM AS REG_NM , C.USER_NM AS REG_NM
@ -94,7 +94,7 @@
, IFNULL(A.SECRET_YN, 'N') AS SECRET_YN , IFNULL(A.SECRET_YN, 'N') AS SECRET_YN
, A.VIEW_CNT , A.VIEW_CNT
, A.BD_ATTACH_FILE_ID , A.BD_ATTACH_FILE_ID
, CASE WHEN A.BD_ATTACH_FILE_ID IS NULL OR A.BD_ATTACH_FILE_ID = '' THEN 'N' ELSE 'Y' END AS ATTACH_YN , CASE WHEN IFNULL((SELECT COUNT(1) FROM BD_FILE F1 LEFT OUTER JOIN BD_FILEDETAIL F2 ON F1.ATTACH_FILE_ID = F2.ATTACH_FILE_ID WHERE F1.ATTACH_FILE_ID = A.BD_ATTACH_FILE_ID AND F1.USE_AT = 'Y' AND F2.USE_AT = 'Y'),0) > 0 THEN 'Y' ELSE 'N' END AS ATTACH_YN
, DATE_FORMAT(A.REG_DD, '%Y-%m-%d') AS REG_DD , DATE_FORMAT(A.REG_DD, '%Y-%m-%d') AS REG_DD
, DATE_FORMAT(A.MOD_DD, '%Y-%m-%d') AS MOD_DD , DATE_FORMAT(A.MOD_DD, '%Y-%m-%d') AS MOD_DD
, C.USER_NM AS REG_NM , C.USER_NM AS REG_NM
@ -182,6 +182,7 @@
, MOD_DD = NOW() , MOD_DD = NOW()
WHERE QNA_ID = #{articleId} WHERE QNA_ID = #{articleId}
AND BD_TYPE = 'QNA' AND BD_TYPE = 'QNA'
AND REG_ID = #{modId} /* 본인글만 삭제 */
AND IFNULL(ANSWER_YN, 'N') = 'N' AND IFNULL(ANSWER_YN, 'N') = 'N'
AND IFNULL(USE_YN, 'Y') = 'Y' AND IFNULL(USE_YN, 'Y') = 'Y'
]]> ]]>

View File

@ -3,30 +3,6 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="NotificationDAO"> <mapper namespace="NotificationDAO">
<select id="listNotifications_bk20210910" parameterType="NotificationVO" resultType="NotificationVO">
<![CDATA[
SELECT
A.NOTI_ID
, A.RECV_USER_ID
, A.TITLE
, A.CONTENT
, A.NOTI_METHOD
, A.NOTI_TYPE_CD
, B.S_CODE_NM AS NOTI_TYPE_NM
, IF(A.READ_DD IS NULL, 'N', 'Y') AS READ_YN
, DATE_FORMAT(A.REG_DD, '%Y-%m-%d') AS REG_DD
, COUNT(A.NOTI_ID) OVER(PARTITION BY 1) AS TOT_CNT
FROM SM_NOTIFICATION A
JOIN SM_CODE_S B
ON B.S_CODE_ID = A.NOTI_TYPE_CD
WHERE A.RECV_USER_ID = #{recvUserId}
AND A.REG_DD > DATE_SUB(NOW(), INTERVAL 1 MONTH)
AND B.L_CODE_ID = 'NOTI_TYPE_CD'
AND B.USE_YN = 'Y'
ORDER BY A.NOTI_ID DESC
]]>
</select>
<select id="listNotifications" parameterType="NotificationVO" resultType="NotificationVO"> <select id="listNotifications" parameterType="NotificationVO" resultType="NotificationVO">
<![CDATA[ <![CDATA[
SELECT SELECT
@ -38,9 +14,12 @@
, A.NOTI_TYPE_CD , A.NOTI_TYPE_CD
, B.S_CODE_NM AS NOTI_TYPE_NM , B.S_CODE_NM AS NOTI_TYPE_NM
, IF(A.READ_DD IS NULL, 'N', 'Y') AS READ_YN , IF(A.READ_DD IS NULL, 'N', 'Y') AS READ_YN
, DATE_FORMAT(A.REG_DD, '%Y-%M-%D') AS REG_DD , DATE_FORMAT(A.READ_DD, '%Y-%m-%d') AS READ_DD
, DATE_FORMAT(A.REG_DD, '%Y-%m-%d') AS REG_DD
, COUNT(A.NOTI_ID) OVER(PARTITION BY 1) AS TOT_CNT , COUNT(A.NOTI_ID) OVER(PARTITION BY 1) AS TOT_CNT
, A2.RNO , A2.RNO
, A.MNG_ORG_CD
, C.DEPT_NM AS MNG_ORG_NM
FROM SM_NOTIFICATION A FROM SM_NOTIFICATION A
INNER JOIN ( INNER JOIN (
SELECT S.NOTI_ID SELECT S.NOTI_ID
@ -54,6 +33,8 @@
USING(NOTI_ID) USING(NOTI_ID)
JOIN SM_CODE_S B JOIN SM_CODE_S B
ON B.S_CODE_ID = A.NOTI_TYPE_CD ON B.S_CODE_ID = A.NOTI_TYPE_CD
LEFT OUTER JOIN SM_DEPT C
ON A.MNG_ORG_CD = C.ORG_CD
WHERE 1=1 WHERE 1=1
AND B.L_CODE_ID = 'NOTI_TYPE_CD' AND B.L_CODE_ID = 'NOTI_TYPE_CD'
AND B.USE_YN = 'Y' AND B.USE_YN = 'Y'
@ -83,7 +64,10 @@
<![CDATA[ <![CDATA[
SELECT A.* SELECT A.*
, IF(A.READ_DD IS NULL, 'N', 'Y') AS READ_YN , IF(A.READ_DD IS NULL, 'N', 'Y') AS READ_YN
, B.DEPT_NM AS MNG_ORG_NM
FROM SM_NOTIFICATION A FROM SM_NOTIFICATION A
LEFT OUTER JOIN SM_DEPT B
ON A.MNG_ORG_CD = B.ORG_CD
WHERE A.RECV_USER_ID = #{recvUserId} WHERE A.RECV_USER_ID = #{recvUserId}
AND A.NOTI_ID = #{notiId} AND A.NOTI_ID = #{notiId}
]]> ]]>

View File

@ -30,6 +30,15 @@
ORDER BY B.MNG_ORG_CD ORDER BY B.MNG_ORG_CD
</select> </select>
<update id="changeCartProcDivCd" parameterType="CollectionVO">
<![CDATA[
UPDATE MB_CART SET CART_PROC_DIV_CD = #{cartProcDivCd}, MOD_ID = #{modId}, MOD_DD = NOW()
WHERE MB_INFO_ID = #{mbInfoId}
AND MASTER_ID = #{masterId}
AND DELETE_YN = 'N'
]]>
</update>
<select id="countCartItems" parameterType="String" resultType="Integer"> <select id="countCartItems" parameterType="String" resultType="Integer">
SELECT COUNT(A.MB_CART_ID) AS CNT SELECT COUNT(A.MB_CART_ID) AS CNT
FROM MB_CART A FROM MB_CART A

View File

@ -149,7 +149,7 @@
<span>반납 하루전입니다</span> <span>반납 하루전입니다</span>
<span class="date">2021-08-23</span> <span class="date">2021-08-23</span>
</button> </button>
<div class="answer" style="display: none;"> <div class="answer" style="display: block;">
<p>반납예정일: 21/09/10</p> <p>반납예정일: 21/09/10</p>
<p>(자료제목이 들어갑니다…)</p> <p>(자료제목이 들어갑니다…)</p>
</div> </div>

View File

@ -85,8 +85,8 @@ $(window.document).ready(function() {
url: "${pageContext.request.contextPath}/fileupload/uploadFilesAjax.do?subPathKey=fileupload.bbs.qna.subpath&attachFileId=${searchArticle.bdAttachFileId}" url: "${pageContext.request.contextPath}/fileupload/uploadFilesAjax.do?subPathKey=fileupload.bbs.qna.subpath&attachFileId=${searchArticle.bdAttachFileId}"
}); });
<c:if test="${searchArticle.attachFileCnt > 0}">
// 기존 첨부파일 출력 // 기존 첨부파일 출력
<c:if test="${searchArticle.attachFileCnt > 0}">
var re = /(?:\.([^.]+))?$/; var re = /(?:\.([^.]+))?$/;
<c:forEach var="attachFile" items="${searchArticle.attachFiles }" varStatus="status"> <c:forEach var="attachFile" items="${searchArticle.attachFiles }" varStatus="status">
myDropzone.addFile({ myDropzone.addFile({
@ -253,6 +253,25 @@ function fn_saveSubmit() {
$("#articleForm").submit(); $("#articleForm").submit();
} }
//파일 다운로드
function fn_downloadFile(attachFileId, fileSn) {
if(attachFileId == null || attachFileId.trim().length < 1) {
alert("파일정보를 확인해 주시기 바랍니다.[1]");
return;
}
if(fileSn < 1) {
alert("파일정보를 확인해 주시기 바랍니다.[3]");
return;
}
$("#attachFileId").val(attachFileId);
$("#fileSn").val(fileSn);
$("#downloadFileForm").submit();
}
</script> </script>
@ -288,17 +307,14 @@ function fn_saveSubmit() {
<input type="hidden" name="searchType" id="searchType" title="검색구분" value="${searchArticle.searchType}" /> <input type="hidden" name="searchType" id="searchType" title="검색구분" value="${searchArticle.searchType}" />
<input type="hidden" name="searchKeyword" id="searchKeyword" title="검색어" value="${searchArticle.searchKeyword}" /> <input type="hidden" name="searchKeyword" id="searchKeyword" title="검색어" value="${searchArticle.searchKeyword}" />
<input type="hidden" name="articleId" id="articleId" title="선택글번호" value="${searchArticle.articleId}" /> <input type="hidden" name="articleId" id="articleId" title="선택글번호" value="${searchArticle.articleId}" />
<input type="hidden" name="regId" id="regId" value="${searchArticle.loginedMbInfoId}" />
<input type="hidden" name="regName" id="regName" value="${searchArticle.loginedName}" />
<input type="hidden" name="fileList" id="fileList" title="첨부파일정보" /> <input type="hidden" name="fileList" id="fileList" title="첨부파일정보" />
<input type="hidden" name="delFileList" id="delFileList" title="삭제첨부파일정보" />
<input type="hidden" name="bdAttachFileId" id="bdAttachFileId" value="${searchArticle.bdAttachFileId}" />
<fieldset> <fieldset>
<li class="wt-title fl"> <li class="wt-title fl">
<div class="w-tit">제목</div> <div class="w-tit">제목</div>
<div class="w-form"> <div class="w-form">
delFileList : <input type="text" name="delFileList" id="delFileList" title="삭제첨부파일정보" />
bdAttachFileId : <input type="text" name="bdAttachFileId" id="bdAttachFileId" value="${searchArticle.bdAttachFileId}" />
<input type="text" name="title" id="title" title="제목" value="${searchArticle.title}" size="100" maxlength="200" class="grid-1" placeholder="제목을 입력하세요." required /> <input type="text" name="title" id="title" title="제목" value="${searchArticle.title}" size="100" maxlength="200" class="grid-1" placeholder="제목을 입력하세요." required />
</div> </div>
</li> </li>
@ -355,3 +371,13 @@ function fn_saveSubmit() {
</div> </div>
</div> </div>
<!-- 첨부파일 다운로드용 폼 -->
<form name="downloadFileForm" id="downloadFileForm"
action="${pageContext.request.contextPath}/fileupload/downloadAttachFile.do"
method="post">
<input type="hidden" name="bdType" id="bdType" value="ANCMNT" readonly />
<input type="hidden" name="attachFileId" id="attachFileId" value="" readonly />
<input type="hidden" name="streFileNm" id="streFileNm" value="" readonly />
<input type="hidden" name="fileSn" id="fileSn" value="" readonly />
<input type="hidden" name="orignlFileNm" id="orignlFileNm" value="" readonly />
</form>

View File

@ -104,7 +104,7 @@
console.log(jsonObj.itemsCount); console.log(jsonObj.itemsCount);
// 건수 // 건수
if(jsonObj.itemsCount == undefined) { if(typeof jsonObj.itemsCount == 'undefined') {
$("#itemsCount").text("0"); $("#itemsCount").text("0");
$("#searchItemsCount").text("0"); $("#searchItemsCount").text("0");
} }

View File

@ -133,7 +133,7 @@ $( document ).ready(function() {
console.log(jsonObj.itemsCount); console.log(jsonObj.itemsCount);
// 건수 // 건수
if(jsonObj.itemsCount == undefined) { if(typeof jsonObj.itemsCount == 'undefined') {
$("#itemsCount").text("0"); $("#itemsCount").text("0");
$("#searchItemsCount").text("0"); $("#searchItemsCount").text("0");
} }

View File

@ -38,11 +38,6 @@
$( document ).ready(function() { $( document ).ready(function() {
// 메시지 표출
if(!fn_isEmpty('${message}')) {
alert("${message}");
}
// 검색 수행 이벤트 // 검색 수행 이벤트
$("#btnSearch").on("click", function(e) { $("#btnSearch").on("click", function(e) {
fn_searchArticle(1); fn_searchArticle(1);
@ -56,6 +51,11 @@
//초기 자료 조회 //초기 자료 조회
fn_searchArticle(); fn_searchArticle();
// 메시지 표출
if(!fn_isEmpty('${message}')) {
alert("${message}");
}
}); // document ready }); // document ready
@ -112,7 +112,7 @@
console.log(jsonObj.itemsCount); console.log(jsonObj.itemsCount);
// 건수 // 건수
if(jsonObj.itemsCount == undefined) { if(typeof jsonObj.itemsCount == 'undefined') {
$("#itemsCount").text("0"); $("#itemsCount").text("0");
$("#searchItemsCount").text("0"); $("#searchItemsCount").text("0");
} }
@ -175,6 +175,7 @@
//게시글 작성으로 이동 //게시글 작성으로 이동
function fn_newArticle() { function fn_newArticle() {
<sec:authorize access="not isAuthenticated()"> <sec:authorize access="not isAuthenticated()">
alert("로그인 후, 이용하여 주시기 바랍니다."); alert("로그인 후, 이용하여 주시기 바랍니다.");
</sec:authorize> </sec:authorize>
@ -182,6 +183,7 @@
<sec:authorize access="isAuthenticated()"> <sec:authorize access="isAuthenticated()">
$("#articleNo").val(""); $("#articleNo").val("");
$("#articleForm").attr("action", "${pageContext.request.contextPath}/bbs/insertQnaForm.do"); $("#articleForm").attr("action", "${pageContext.request.contextPath}/bbs/insertQnaForm.do");
$('#articleForm').removeAttr('onsubmit');
$("#articleForm").submit(); $("#articleForm").submit();
</sec:authorize> </sec:authorize>
} }

View File

@ -198,10 +198,9 @@ function fn_downloadFile(attachFileId, fileSn) {
<form name="downloadFileForm" id="downloadFileForm" <form name="downloadFileForm" id="downloadFileForm"
action="${pageContext.request.contextPath}/fileupload/downloadAttachFile.do" action="${pageContext.request.contextPath}/fileupload/downloadAttachFile.do"
method="post"> method="post">
<input type="hidden" name="bdType" id="bdType" value="ANCMNT" readonly /> <input type="hidden" name="bdType" id="bdType" value="QNA" />
<input type="hidden" name="attachFileId" id="attachFileId" value="" readonly /> <input type="hidden" name="attachFileId" id="attachFileId" value="" />
<input type="hidden" name="streFileNm" id="streFileNm" value="" readonly /> <input type="hidden" name="streFileNm" id="streFileNm" value="" />
<input type="hidden" name="fileSn" id="fileSn" value="" readonly /> <input type="hidden" name="fileSn" id="fileSn" value="" />
<input type="hidden" name="orignlFileNm" id="orignlFileNm" value="" readonly /> <input type="hidden" name="orignlFileNm" id="orignlFileNm" value="" />
</form> </form>

View File

@ -10,9 +10,6 @@ String councilCd = (String)session.getAttribute("councilCd");
String councilNm = (String)session.getAttribute("councilNm"); String councilNm = (String)session.getAttribute("councilNm");
%> %>
<script> <script>
$(document).ready(function() {
});
function goSearch(){ function goSearch(){
document.searchHeaderForm.submit(); document.searchHeaderForm.submit();

View File

@ -5,11 +5,12 @@
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%> <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
<script type="text/javascript"> <script type="text/javascript">
window.onload = function() {
fn_myAlert('${unreadNotiCnt}'); $(document).ready(function() {
}; var unreadNotiCnt = $(".noti-btn span.count").text();
fn_myAlert(unreadNotiCnt);
});
</script> </script>

View File

@ -22,6 +22,30 @@
* *
*/ */
%> %>
<%
/**
* <pre>
* @Class Name : listFaqs.jsp
*
* @Description : 자주하는질문 목록 화면을 표출한다.
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 9. 15. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 9. 15.
* @version 1.0
*
*/
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" %> <%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %> <%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
@ -33,102 +57,23 @@
<c:set var="pageTitle">알림</c:set> <c:set var="pageTitle">알림</c:set>
<!DOCTYPE html>
<html lang="ko">
<head>
<title>${pageTitle}</title>
<!-- GRID -->
<link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/js/jsgrid/nlib-jsgrid.css" />
<link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/js/jsgrid/nlib-jsgrid-theme.css" />
<script src="${pageContext.request.contextPath}/js/jsgrid/nlib-jsgrid.js"></script>
<script type="text/javaScript" language="javascript"> <script type="text/javaScript" language="javascript">
var GRID_INDEX_OF_READYN = 5;
$( document ).ready(function() { $( document ).ready(function() {
//======================================================= // 메시지 표출
// 그리드 생성 환경설정 if(!fn_isEmpty('${message}')) {
//======================================================= alert("${message}");
$("#jsGrid").jsGrid({ }
pageSize : $("#pageSize").val(),
scrollOffset:0,
controller: {
loadData: function (filter) { // 그리드에 데이터를 가져올 때 실팽되는 함수
var data = $.Deferred();
//======================================
// 요청 정보 구성 : 시작 (각 요청에 맞게 조정)
//======================================
var reqUrl = "${pageContext.request.contextPath}/cmm/listNotificationsAjax.do";
var pageIndex = ( filter && filter.pageIndex ? filter.pageIndex : $("#pageIndex").val());
var pageSize = ( filter && filter.pageSize ? filter.pageSize : $("#pageSize").val());
$("#pageIndex").val(pageIndex); // 검색 수행 이벤트
var inputData = {
"pageIndex" : pageIndex
, "pageSize": pageSize};
//--------------------------------------
// 요청 처리
//--------------------------------------
$.ajax({
type: "post",
contentType: "application/json; charset=utf-8",
url: reqUrl,
dataType: "json",
data: JSON.stringify(inputData),
}).done(function(response){
<%
// 그리드 데이터 예시 :
// (1) 페이징 클라이언트에서 수행하는 경우(pageloading = false) : [{ "articleNo": 1, "articleType": "01" }, { "articleNo": 2, "articleType": "02" }]
// (2) 페이징 서버에서 수행하는 경우(pageloading = true) : {data: [{...}], itemsCount: 255}
%>
var jsonObj = JSON.parse(response);
//$("#itemsCount").val(jsonOjb.itemsCount);
console.log(jsonObj.itemsCount);
if(jsonObj.itemsCount == undefined) $("#itemsCount").val("0");
else $("#itemsCount").val(jsonObj.itemsCount);
data.resolve(jsonObj);
});
return data.promise();
} // loadData
},
rowClick: function(args) { // 행 클릭 시, 실행되는 이벤트 함수
// 클릭된 행의 자료 객체
var getData = args.item;
// 추출할 컬럼의 데이터 가져오기
var notiId = getData["notiId"];
var selectedRow = $("#jsGrid").find('table tr.jsgrid-selected-row');
// 상세 내용 보기
fn_viewDetail(notiId, selectedRow);
},
//======================================
// 그리드 컬럼 정의 (각 요청에 맞게 조정)
//======================================
fields: [
{ title:"ID", name: "notiId" , type: "text", width: 200, align: "left" },
{ title:"알림방법", name: "notiMethod" , type: "text", width: 100, align: "center"},
{ title:"구분코드", name: "notiTypeCd" , type: "text", width: 100, align: "center"},
{ title:"구분", name: "notiTypeNm" , type: "text", width: 100, align: "center"},
{ title:"제목", name: "title" , type: "text", width: 200, align: "left" },
{ title:"확인여부", name: "readYn" , type: "text", width: 100, align: "center"},
{ title:"날짜", name: "regDd" , type: "text", width: 100, align: "center"}
]
});
// 검색 버튼 클릭
$("#btnSearch").on("click", function(e) { $("#btnSearch").on("click", function(e) {
fn_searchArticle($("#pageSize").val(), 1); fn_searchArticle(1);
});
$("#searchKeyword").on("keydown", function(e) {
if(e.keyCode == 13) {
fn_searchArticle(1);
}
}); });
//초기 자료 조회 //초기 자료 조회
@ -136,11 +81,14 @@
}); // document ready }); // document ready
// 선택한 글 상세 보기로 이동 // 선택한 글 상세 보기로 이동
function fn_viewDetail(notiId, selectedRow) { function fn_viewDetail(qObj, notiId) {
var $qObj = $(qObj);
if($qObj.hasClass('on')) {
return;
}
var $selectedRow = $(selectedRow);
var reqUrl = "${pageContext.request.contextPath}/cmm/selectNotificationAjax.do"; var reqUrl = "${pageContext.request.contextPath}/cmm/selectNotificationAjax.do";
var inputData = { "notiId" : notiId }; var inputData = { "notiId" : notiId };
@ -155,65 +103,145 @@
data: JSON.stringify(inputData), data: JSON.stringify(inputData),
}).done(function(response){ }).done(function(response){
var jsonObj = JSON.parse(response); var jsonObj = JSON.parse(response);
$("#jsGrid").find('table tr.answer').remove(); var answerHtml = jsonObj.data.content;
//alert("DDDDDDDD remove = " + $("#jsGrid")[0].scrollHeight);
$("#jsGrid").jsGrid("rowByItem", $selectedRow).data("JSGridItem")["readYn"] = jsonObj.data.readYn; $('.list-accordion .answer').html("");
$selectedRow.find('td').eq(GRID_INDEX_OF_READYN).text(jsonObj.data.readYn); $qObj.next(".answer").html("<p>" + answerHtml + "<p>&nbsp;</p>");
$selectedRow.after("<tr class='answer'><td colspan='7'>" + jsonObj.data.content // 펼치기
+ "<br/>" + jsonObj.data.content $('.list-accordion .answer').stop().slideUp(300);
+ "<br/>" + jsonObj.data.content $qObj.next('.answer').stop().slideDown(300);
+ "<br/>" + jsonObj.data.content
+ "<br/>알림확인여부=" + jsonObj.data.readYn $('.list-accordion .question').removeClass('on');
+ "<br/>알림일자=" + jsonObj.data.regDd $qObj.addClass('on');
+ "</td></tr>");
}); });
$("#jsGrid").closest('.ui-jqgrid-bdiv').width($("#jsGrid").closest('.ui-jqgrid-bdiv').width() + 1);
} }
// 그리드 데이터 조회 호출 // 그리드 데이터 조회 호출
function fn_searchArticle(pageSize, pageIndex) { function fn_searchArticle(pageIndex) {
$("#jsGrid").jsGrid("search"
, {'pageSize' : (pageSize ? pageSize : fn_getIntValue("pageSize", ${pageSize}) ), if(fn_isEmpty(pageIndex)) pageIndex = $("#pageIndex").val();
'pageIndex' : (pageIndex ? pageIndex : fn_getIntValue("pageIndex", 1)) if(fn_isEmpty(pageIndex)) pageIndex = "1";
$("#pageIndex").val(pageIndex);
var reqUrl = "${pageContext.request.contextPath}/cmm/listNotificationsAjax.do";
var inputData = {
"pageIndex" : $("#pageIndex").val()
, "pageSize" : $("#pageSize").val()
};
//--------------------------------------
// 요청 처리
//--------------------------------------
$.ajax({
type: "post",
contentType: "application/json; charset=utf-8",
url: reqUrl,
dataType: "json",
data: JSON.stringify(inputData),
}).done(function(data) {
<%
// 그리드 데이터 예시 :
// (1) 페이징 클라이언트에서 수행하는 경우(pageloading = false) : [{ "articleNo": 1, "articleType": "01" }, { "articleNo": 2, "articleType": "02" }]
// (2) 페이징 서버에서 수행하는 경우(pageloading = true) : {data: [{...}], itemsCount: 255}
%>
var jsonObj = JSON.parse(data);
console.log(jsonObj.itemsCount);
// 건수
if(jsonObj.itemsCount == undefined) {
$("#itemsCount").text("0");
} }
); else {
$("#itemsCount").text(jsonObj.itemsCount);
}
// 기존 데이터 CLEAR
$( "ul.list-faq li").not('.no-result').remove();
if(!jsonObj.data || jsonObj.data.length <= 0 ) {
$("ul.list-faq li.no-result").show();
} else {
$("ul.list-faq li.no-result").hide();
// 출력
$.each(jsonObj.data,function(key,obj) {
var li = $(document.createElement('li'));
li.attr("articleId", obj.articleId);
li.append($('<button type="button"></button>').attr('class', 'question').on("click", function() {
fn_viewDetail(this, obj.notiId);
}));
if(!fn_isEmpty(obj.mngOrgNm)) li.find(".question").append($('<span />').attr("class", "type").html("[" + obj.mngOrgNm + "]"));
else li.find(".question").append($('<span />').attr("class", "type").html("[소장자료관]"));
var unread = "";
if(obj.readYn != "Y") unread = " (미확인)";
li.find(".question").append($('<span />').html(obj.title + unread));
li.find(".question").append($('<span />').attr('class', 'date').html(obj.regDd));
li.append($('<div></div>').attr('class', 'answer').attr('style', 'display: none;'));
$( "ul.list-faq").append(li);
});
}
pageLoad("fn_searchArticle", jsonObj.pagingPageIndex, jsonObj.pagingTotRecordCount, jsonObj.pagingStartPage, jsonObj.pagingEndPage, jsonObj.pagingLastPage);
}).fail(function (jqXHR, textStatus, errorThrown) {
alert("조회에 실패하였습니다. 관리자에게 문의 바랍니다.");
});
} }
</script> </script>
</head>
<body> <!-- 알림 섹션 -->
<div class="location noti-data">
<h2 class="blind">알림 섹션영역</h2>
<div class="inner">
<div class="row-top">
<div class="location-box">
<ul class="loc">
<li>HOME</li>
<li class="on">${pageTitle}</li>
</ul>
<ul class="tit">
<li><span>${pageTitle}</span></li>
</ul>
</div>
<div class="arr"><img src="/images/icon/icon-join-arr2.png" alt="화살표 아이콘"></div>
</div>
<div class="contents row-bottom">
<div class="list-box noti-box">
<div class="title">
<span class="count">총 <em name="itemsCount" id="itemsCount">0</em>건</span>
<div class="text">
<p>- 최근 한달동안 발송된 알림 내역만 보관됩니다.</p>
</div>
</div>
<h1>${pageTitle }</h1> <div class="notifi">
<div class="list-accordion">
<ul class="list-faq">
<li class="no-result" style="display:none;">
<span>검색결과가 없습니다.</span>
</li>
</ul>
</div>
<ul id="paging" class="paging"></ul>
</div>
메시지 : ${message} </div>
</div>
</div>
&nbsp;<br/> </div>
<form name="articleForm" id="articleForm"
action="${pageContext.request.contextPath}/cmm/listAlerts.do"
method="post">
<!-- 검색조건 -->
<input type="text" name="pageSize" id="pageSize" value="${pageSize }" />
<input type="text" name="itemsCount" id="itemsCount" value="0" />
<input type="text" name="pageIndex" id="pageIndex" title="페이지번호" value="${pageIndex }" size="5" maxlength="5" />
<input type="button" name="btnSearch" id="btnSearch" title="새로고침" value="새로고침" />
<br/>
<div id="jsGrid" name="jsGrid" style="height: 100%"></div>
<input type="text" name="articleNo" id="articleNo" value="" title="선택글번호" readonly />
<form name="articleForm" id="articleForm" method="post" onsubmit="return false;">
<input type="hidden" name="pageSize" id="pageSize" value="${pageSize }" />
<input type="hidden" name="pageIndex" id="pageIndex" title="페이지번호" value="${pageIndex }" />
<input type="hidden" name="articleId" id="articleId" title="게시글번호" value="" readonly />
</form> </form>
</body>
</html>

View File

@ -29,46 +29,41 @@
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %> <%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%> <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
<c:set var="pageTitle">휴면계좌 해제 처리결과</c:set> <c:set var="pageTitle">휴면계정 해제</c:set>
<!DOCTYPE html> <!-- 휴면계정 섹션 -->
<html> <div class="location join succ dormant">
<head> <h2 class="blind">휴면계정 섹션영역</h2>
<title>LoginTest</title> <div class="inner">
<script src = "//developers.kakao.com/sdk/js/kakao.min.js"></script> <div class="row-top icon">
<script type="text/javascript" src="https://static.nid.naver.com/js/naverLogin_implicit-1.0.2.js" charset="utf-8"></script> <div class="icon"><img src="/images/icon/icon-dormant.png" alt="자물쇠 아이콘"></div>
<script src="https://apis.google.com/js/api:client.js"></script> <p>${pageTitle }</p>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.3.min.js"></script> </div>
<script> <div class="contents row-bottom">
function signUp(){ <div class="join-box">
location.href="${pageContext.request.contextPath}/member/selectMemberJoiningInfo.do";
}
function findInfo(){
location.href="${pageContext.request.contextPath}/member/initPasswordForm.do";
}
</script>
</head>
<body>
<br>
<h1>${pageTitle }</h1> <form name="dormantForm" id="dormantForm" action="${pageContext.request.contextPath}/login/activateDormantAcc.do" method="post">
<input type="hidden" id="mbInfoId" name="mbInfoId" value="${oauthUser.nlibVO.mbInfoId}" />
<div class="success">
<form name="dormantForm" id="dormantForm" <div class="text">
action="${pageContext.request.contextPath}/login/activateDormantAcc.do" <p><span>${oauthUser.nlibVO.name}</span> 회원님의 계정이 정상적으로 <span>휴면 해제</span>되었습니다.</p>
method="post"> </div>
<br /> <div class="box">
<input type="text" id="mbInfoId" name="mbInfoId" value="${oauthUser.nlibVO.mbInfoId}" /> <c:if test="${empty message}">
<br /> <p><span>[로그인]</span>을 클릭하여 로그인을 계속 진행해 주시기 바랍니다.</p>
</c:if>
정상적으로 휴면 해제되었습니다.<br /> <c:if test="${not empty message}">
<br /> <p><span>${message }</span></p>
- 이름 : ${oauthUser.nlibVO.name}<br /> </c:if>
- 로그인ID : ${oauthUser.nlibVO.loginUserId}<br /> </div>
- 이메일 : ${oauthUser.nlibVO.email}<br /> <div class="btn">
<br/> <a href="javascript:void(0)" class="btn-color" id="activateBtn" name="activateBtn" onclick="javascript: location.href = '${pageContext.request.contextPath}/login/loginCouncilSSO.do';">로그인</a>
<input type="button" id="continueBtn" name="continueBtn" value="로그인 계속 진행" onclick="javascript: location.href = '${pageContext.request.contextPath}/login/loginCouncilSSO.do';" /> </div>
</div>
</form> </form>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -29,55 +29,41 @@
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %> <%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%> <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
<c:set var="pageTitle">휴면계안내</c:set> <c:set var="pageTitle">휴면계안내</c:set>
<!DOCTYPE html> <!-- 휴면계정 섹션 -->
<html> <div class="location join succ dormant">
<head> <h2 class="blind">휴면계정 섹션영역</h2>
<title>LoginTest</title> <div class="inner">
<script src = "//developers.kakao.com/sdk/js/kakao.min.js"></script> <div class="row-top icon">
<script type="text/javascript" src="https://static.nid.naver.com/js/naverLogin_implicit-1.0.2.js" charset="utf-8"></script> <div class="icon"><img src="/images/icon/icon-dormant.png" alt="자물쇠 아이콘"></div>
<script src="https://apis.google.com/js/api:client.js"></script> <p>${pageTitle }</p>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.3.min.js"></script> </div>
<script> <div class="contents row-bottom">
function signUp(){ <div class="join-box">
location.href="${pageContext.request.contextPath}/member/selectMemberJoiningInfo.do"; <form name="dormantForm" id="dormantForm" action="${pageContext.request.contextPath}/login/activateDormantAcc.do" method="post">
} <input type="hidden" id="mbInfoId" name="mbInfoId" value="${oauthUser.nlibVO.mbInfoId}" />
function findInfo(){ <div class="success">
location.href="${pageContext.request.contextPath}/member/initPasswordForm.do"; <div class="text">
} <p><span>${oauthUser.nlibVO.name}</span> 회원님의 계정은 현재 <span>휴면 상태</span>입니다.<br>서비스 이용을 원하신다면 지금 바로 휴면을 해제하세요!</p>
</script> <p>회원님의 정보를 안전하게 보호하기 위하여 <span>일정 기간동안</span> 이용내역이 없는 경우<br>휴면 상태로 계정을 전환하여 보관하는 정책을 실시하고 있습니다.</p>
</head> </div>
<body> <div class="box">
<br> <c:if test="${empty message}">
<p>휴면 상태의 회원의 경우 서비스 이용이 제한되며,<br><span>[휴면해제]</span> 버튼을 통해 휴면해제 가능합니다. </p>
<h1>휴면계좌안내</h1> </c:if>
<c:if test="${not empty message}">
<p><span>${message }</span></p>
<form name="dormantForm" id="dormantForm" </c:if>
action="${pageContext.request.contextPath}/login/activateDormantAcc.do" </div>
method="post"> <div class="btn">
<br /> <a href="javascript:void(0)" class="btn-gray" id="inactivateBtn" onclick="javascript: location.href = '/';">취소</a>
<input type="text" id="mbInfoId" name="mbInfoId" value="${oauthUser.nlibVO.mbInfoId}" /> <a href="javascript:void(0)" class="btn-color" id="activateBtn" name="activateBtn" onclick="javascript:$('#dormantForm').submit();">휴면해제</a>
<br /> </div>
</div>
사용자 계정이 아래와 같이 휴면된 상태입니다. <br />
<br />
- 이름 : ${oauthUser.nlibVO.name}<br />
- 로그인ID : ${oauthUser.nlibVO.loginUserId}<br />
- 이메일 : ${oauthUser.nlibVO.email}<br />
- 휴면전환일자 :
<fmt:parseDate value="${oauthUser.nlibVO.dmtProcDd}" var="dmtProcDd" pattern="yyyyMMddHHmmss"/>
<fmt:formatDate value="${dmtProcDd}" pattern="yyyy.MM.dd HH:mm"/><br />
<br/>
정상적인 서비스를 이용하시려면 휴면상태를 해제하여야 합니다. <br />
휴면상태를 해제하시겠습니까?
<br/>
<input type="submit" id="activateBtn" name="activateBtn" value="예, 해제합니다." />
<input type="button" id="inactivateBtn" name="" value="홈화면 이동" onclick="javascript: location.href = '${pageContext.request.contextPath}';" />
</form> </form>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -16,7 +16,7 @@
* @ ------------ -------- --------------------------- * @ ------------ -------- ---------------------------
* @ 2021. 7. 21. JSYOO 최초 생성 * @ 2021. 7. 21. JSYOO 최초 생성
* @ 2021.10. 14. KNKIM 변경API 및 화면설계서 반영 * @ 2021.10. 14. KNKIM 변경API 및 화면설계서 반영
* * @ 2021.11. 08. KNKIM 퍼블 템플릿 적용 작업
* *
* @author 이씨플라자 * DIGITALSHIP JSYOO * @author 이씨플라자 * DIGITALSHIP JSYOO
* @since 2021. 7. 21. * @since 2021. 7. 21.
@ -31,54 +31,62 @@
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="validator" <%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator"%>
uri="http://www.springmodules.org/tags/commons-validator"%> <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
<%@ taglib prefix="sec"
uri="http://www.springframework.org/security/tags"%>
<c:set var="pageTitle">대출관리</c:set> <c:set var="pageTitle">대출관리</c:set>
<!DOCTYPE html>
<html>
<head>
<title>${pageTitle}</title>
<!-- GRID -->
<link type="text/css" rel="stylesheet"
href="${pageContext.request.contextPath}/js/jsgrid/nlib-jsgrid.css" />
<link type="text/css" rel="stylesheet"
href="${pageContext.request.contextPath}/js/jsgrid/nlib-jsgrid-theme.css" />
<script
src="${pageContext.request.contextPath}/js/jsgrid/nlib-jsgrid.js"></script>
<script type="text/javaScript" language="javascript"> <script type="text/javaScript" language="javascript">
window.onload = function() { $( document ).ready(function() {
//=======================================================
// 그리드 생성 환경설정
//=======================================================
$("#jsGrid").jsGrid({
pageSize : $("#pageSize").val(),
controller: {
loadData: function (filter) { // 그리드에 데이터를 가져올 때 실팽되는 함수
var data = $.Deferred();
//======================================
// 요청 정보 구성 : 시작 (각 요청에 맞게 조정)
//======================================
var reqUrl = "${pageContext.request.contextPath}/rent/listRentItemsAjax.do";
var pageIndex = ( filter && filter.pageIndex ? filter.pageIndex : $("#pageIndex").val());
var pageSize = ( filter && filter.pageSize ? filter.pageSize : $("#pageSize").val());
// 메시지 표출
if(!fn_isEmpty('${message}')) {
alert("${message}");
}
$("#mngOrgCd").on("change", function(e) {
fn_searchArticle($("#pageSize").val(), 1);
});
<sec:authorize access="isAuthenticated()">
//초기 자료 조회
fn_searchArticle(1);
</sec:authorize>
}); // document ready
function fn_search(bookLtRvStatusCd) {
$("#bookLtRvStatusCd").val(bookLtRvStatusCd);
fn_searchArticle(1);
}
// 선택한 글 상세 보기로 이동
function fn_viewDetail(masterId) {
$("#masterId").val(masterId);
$("#frm").attr("action", "/search/searchItemDetail.do");
$("#frm").attr("target", "_blank");
$("#frm").submit();
}
// 그리드 데이터 조회 호출
function fn_searchArticle(pageIndex) {
if(fn_isEmpty(pageIndex)) pageIndex = $("#pageIndex").val();
if(fn_isEmpty(pageIndex)) pageIndex = "1";
$("#pageIndex").val(pageIndex); $("#pageIndex").val(pageIndex);
var reqUrl = "${pageContext.request.contextPath}/rent/listRentItemsAjax.do";
var inputData = { var inputData = {
"pageIndex" : pageIndex "pageIndex" : $("#pageIndex").val()
, "pageSize" : pageSize , "pageSize" : $("#pageSize").val()
, "bookLtRvStatusCd" : $("#bookLtRvStatusCd").val() , "bookLtRvStatusCd" : $("#bookLtRvStatusCd").val()
, "mngOrgCd" : $("#mngOrgCd").val() , "mngOrgCd" : $("#mngOrgCd").val()
}; };
//-------------------------------------- //--------------------------------------
// 요청 처리 // 요청 처리
//-------------------------------------- //--------------------------------------
@ -89,122 +97,185 @@ window.onload = function() {
dataType: "json", dataType: "json",
data: JSON.stringify(inputData), data: JSON.stringify(inputData),
}).done(function(data){ }).done(function(data){
<%// 그리드 데이터 예시 : <%
// 그리드 데이터 예시 :
// (1) 페이징 클라이언트에서 수행하는 경우(pageloading = false) : [{ "articleNo": 1, "articleType": "01" }, { "articleNo": 2, "articleType": "02" }] // (1) 페이징 클라이언트에서 수행하는 경우(pageloading = false) : [{ "articleNo": 1, "articleType": "01" }, { "articleNo": 2, "articleType": "02" }]
// (2) 페이징 서버에서 수행하는 경우(pageloading = true) : {data: [{...}], itemsCount: 255}%> // (2) 페이징 서버에서 수행하는 경우(pageloading = true) : {data: [{...}], itemsCount: 255}
var retObj = JSON.parse(response); %>
if(retObj.data == null) { var jsonObj = JSON.parse(data);
retObj.data = [];
// 건수
if(typeof jsonObj.itemsCount == 'undefined') {
$("#itemsCount").text("0");
} }
data.resolve(retObj); else {
$("#itemsCount").text(jsonObj.itemsCount);
}
// 기존 데이터 CLEAR
$("div.list-data div.list").not('.t-tit-line').not('.no-result').remove();
if(!jsonObj.data || jsonObj.data.length <= 0 ) {
$("div.list-data div.no-result").show();
} else {
$("div.list-data div.no-result").hide();
// 출력
$.each(jsonObj.data,function(key,obj) {
var div = $(document.createElement('div'));
div.attr('class', 'list');
div.append($('<div />').attr('class', 'n-cultural').html("[" + obj.mngOrgNm + "]"));
div.append($('<div />').attr('class', 'n-data').html("<a href=\"javascript:void(0)\" onclick=\"fn_viewDetail('" + obj.masterId + "')\">" + obj.title + "</a>"));
div.append($('<div />').attr('class', 'n-reservation').html(fn_formatDateStr(obj.rsrvDd,"-"))); /* 대출신청예약일자 */
div.append($('<div />').attr('class', 'n-expiry').html(fn_formatDateStr(obj.rsrvExpctDd,"-"))); /* 대출예약만료일자 */
div.append($('<div />').attr('class', 'n-return').html(fn_formatDateStr(obj.rtnExpctDd,"-"))); /* 반납일자 */
var statusHtml = "";
if(obj.bookLtRvStatusCd == null) {
statusHtml = "";
} else if(obj.bookLtRvStatusCd.startsWith("A")) {
statusHtml = "<button type='button' onclick='fn_cancel(\"" + obj.title + "\",\"" + obj.bookLtRvStatusNm + "\",\"" + obj.mngOrgCd + "\", \"" + obj.rsrvId + "\")'>취소</button>";
} else if(obj.bookLtRvStatusCd.startsWith("R")) {
statusHtml = "&nbsp;<span>" + fn_formatDateStr(obj.rtnDd,"-") + "</span>";
}
div.append($('<div />').attr('class', 'n-use').html("<span>" + obj.bookLtRvStatusNm + "</span>" + statusHtml));
$("div.list-data").append(div);
});
}
pageLoad("fn_searchArticle", jsonObj.pagingPageIndex, jsonObj.pagingTotRecordCount, jsonObj.pagingStartPage, jsonObj.pagingEndPage, jsonObj.pagingLastPage);
}).fail(function (jqXHR, textStatus, errorThrown) { }).fail(function (jqXHR, textStatus, errorThrown) {
alert("오류 : " + textStatus); alert("조회에 실패하였습니다. 관리자에게 문의 바랍니다.");
});
}
function fn_cancel(title, bookLtRvStatusNm, mngOrgCd, rsrvId) {
if(!confirm(title + " " + bookLtRvStatusNm + "을 취소하시겠습니까?")) return;
var reqUrl = "${pageContext.request.contextPath}/rent/cancelRentItemAjax.do";
var inputData = {
"mngOrgCd" : mngOrgCd
, "rsrvId" : rsrvId
, "bookLtRvStatusNm" : bookLtRvStatusNm
};
//--------------------------------------
// 요청 처리
//--------------------------------------
$.ajax({
type: "post",
contentType: "application/json; charset=utf-8",
url: reqUrl,
dataType: "json",
data: JSON.stringify(inputData),
}).done(function(data){
<%
// 그리드 데이터 예시 :
// (1) 페이징 클라이언트에서 수행하는 경우(pageloading = false) : [{ "articleNo": 1, "articleType": "01" }, { "articleNo": 2, "articleType": "02" }]
// (2) 페이징 서버에서 수행하는 경우(pageloading = true) : {data: [{...}], itemsCount: 255}
%>
var jsonObj = JSON.parse(data);
// 자료 신청(or 예약)이 취소되었습니다.
if(jsonObj.resultCode == "S") {
fn_searchArticle(1);
alert(jsonObj.resultMessage);
} else {
alert(jsonObj.resultMessage);
}
}).fail(function (jqXHR, textStatus, errorThrown) {
alert("처리에 실패하였습니다. 관리자에게 문의 바랍니다.");
}); });
} // loadData
},
//======================================
// 그리드 컬럼 정의 (각 요청에 맞게 조정)
//======================================
fields: [
{ title:"번호", name: "no" , type: "text" , width: 50, align: "center"},
{ title:"masterId", name: "masterId" , type: "text" , width: 50, align: "center"},
{ title:"문화원", name: "mngOrgNm", type: "text" , width: 200, align: "center" },
{ title:"자료정보", name: "title", type: "text", width: 50, align: "center" },
{ title:"신청/예약일", name: "rsrvDd", type: "text", width: 100, align: "center"},
{ title:"신청/예약만료일", name: "rsrvExpctDd", type: "text", width: 100, align: "center"},
{ title:"반납예정일", name: "rtnExpctDd", type: "text", width: 100, align: "center"},
{ title:"반납일", name: "rtnDd", type: "text", width: 100, align: "center"},
{ title:"대출상태", name: "useStatus", type: "text", width: 100, align: "center"},
{ title:"대출상태구분코드", name: "bookLtRvStatusCd", type: "text", width: 100, align: "center"},
{ title:"대출상태구분코드명", name: "bookLtRvStatusNm", type: "text", width: 100, align: "center"},
{ title:"취소", name: "loanExtension", type: "text", width: 80, align: "center" , itemTemplate: function (_, item) {
var btn = $("<button type='button'>").text("취소").click(function (e) {
alert("Clicked!");
e.stopPropagation();
});
return $("<div>").append(item.loanExtension).append("&nbsp;&nbsp;&nbsp;").append(btn);
} }
}
]
});
$("#mngOrgCd").on("change", function(e) {
fn_search_article($("#pageSize").val(), 1);
});
<sec:authorize access="isAuthenticated()">
//초기 자료 조회
fn_search_article();
</sec:authorize>
}; // window.onload
// 그리드 데이터 조회 호출
function fn_search_article(pageSize, pageIndex) {
$("#jsGrid").jsGrid("search"
, {'pageSize' : (pageSize ? pageSize : fn_getIntValue("pageSize", ${pageSize})),
'pageIndex': (pageIndex ? pageIndex : fn_getIntValue("pageIndex", 1))
}
);
}
//----------------------------------------------------------------------------------------------
function fn_search(bookLtRvStatusCd) {
$("#bookLtRvStatusCd").val(bookLtRvStatusCd);
fn_search_article();
}
</script> </script>
</head>
<body>
<h1>${pageTitle }</h1>
<br /> 메시지 :
<span style="color: red !important;">${message }</span>
<br />
<br />
<!-- 대출관리 섹션 -->
<div class="location loan-data">
<h2 class="blind">대출관리 섹션영역</h2>
<div class="inner">
<div class="row-top">
<div class="location-box">
<ul class="loc">
<li>HOME</li>
<li>마이페이지</li>
<li class="on">${pageTitle }</li>
</ul>
<ul class="tit">
<li><span>대출</span>관리</li>
</ul>
</div>
<div class="arr"><img src="/images/icon/icon-join-arr2.png" alt="화살표 아이콘"></div>
</div>
<div class="contents row-bottom">
<div class="list-box loan-box">
<form name="frm" id="frm" method="post"> <form name="frm" id="frm" method="post">
총 <span name="totRecordCount" id="totRecordCount">0</span> 건 <input type="hidden" name="bookLtRvStatusCd" id="bookLtRvStatusCd" value="${bookLtRvStatusCd }" />
<input type="hidden" name="pageIndex" id="pageIndex" title="페이지번호" value="${pageIndex }" size="5" maxlength="5" />
<input type="hidden" name="pageSize" id="pageSize" title="페이지크기" value="${pageSize }" size="5" maxlength="5" />
<input type="hidden" name="masterId" id="masterId" title="페이지크기" value="" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <div class="tab">
bookLtRvStatusCd <input type="text" name="bookLtRvStatusCd" <ul class="tabs">
id="bookLtRvStatusCd" value="${bookLtRvStatusCd }" title="대출상태구분" /> <li><a href="javascript:void(0);" onclick="fn_search('A')">신청/예약</a></li>
<br> <a href="javascript:void(0);" onclick="fn_search('')"> <span <li><a href="javascript:void(0);" onclick="fn_search('C')">취소</a></li>
id="bookLtRvStatusCd" style="color: red">전체</span></a> | <a <li><a href="javascript:void(0);" onclick="fn_search('W')">대출중</a></li>
href="javascript:void(0);" onclick="fn_search('A')"><span <li><a href="javascript:void(0);" onclick="fn_search('R')"><!-- <img src="/images/icon/icon-new.png" alt="뉴 아이콘"> -->반납</a></li>
id="bookLtRvStatusCdA" style="color: red">신청/예약</span></a> | <a <li><a href="javascript:void(0);" onclick="fn_search('P')">연체</a></li>
href="javascript:void(0);" onclick="fn_search('C')"><span </ul>
id="bookLtRvStatusCdC" style="color: red">취소</span></a> | <a
href="javascript:void(0);" onclick="fn_search('W')"><span <div class="title">
id="bookLtRvStatusCdW" style="color: red">대출중</span></a> | <a <span class="count">총 <em name="itemsCount" id="itemsCount">0</em>건</span>
href="javascript:void(0);" onclick="fn_search('R')"><span <div class="list-search-wrap list-top">
id="bookLtRvStatusCdR" style="color: red">반납</span></a> | <a <div class="list-select">
href="javascript:void(0);" onclick="fn_search('P')"><span <select name="mngOrgCd" id="mngOrgCd" title="문화원 선택">
id="bookLtRvStatusCdP" style="color: red">연체</span></a> &nbsp; &nbsp; <select <option value="">문화원 전체</option>
name="mngOrgCd" id="mngOrgCd" title="문화원 선택">
<option value="">전체</option>
<c:forEach var="orgItem" items="${rentMngOrgList}" varStatus="status"> <c:forEach var="orgItem" items="${rentMngOrgList}" varStatus="status">
<option value="<c:out value="${orgItem.mngOrgCd }" />" <option value="<c:out value="${orgItem.mngOrgCd }" />"
<c:if test="${orgItem.mngOrgCd == mngOrgCd }">selected</c:if>><c:out <c:if test="${orgItem.mngOrgCd == mngOrgCd }">selected</c:if>><c:out
value="${orgItem.mngOrgNm }" /></option> value="${orgItem.mngOrgNm }" /></option>
</c:forEach> </c:forEach>
</select> pageIndex <input type="text" name="pageIndex" id="pageIndex" </select>
title="페이지번호" value="${pageIndex }" size="5" maxlength="5" /> </div>
</div>
</div>
<div id="jsGrid" name="jsGrid" style="height: 100%"></div> <div class="tab_content">
<input type="button" value="대출 취소목록" <div class="tabs_item">
onClick="location.href='${pageContext.request.contextPath}/rent/listCanceledRentItems.do'"> <div class="inner">
<input type="button" value="반납 연기"
onClick="location.href='${pageContext.request.contextPath}/rent/listPostpones.do'">
<div class="list-wrap">
<div class="list-data">
<div class="list t-tit-line">
<div class="n-cultural">문화원</div>
<div class="n-data">자료정보</div>
<div class="n-reservation">신청/예약일</div>
<div class="n-expiry">신청/예약 만료일</div>
<div class="n-return">반납예정일</div>
<div class="n-use">이용</div>
</div>
<div class="no-result" style="display:none;">
<span>자료가 없습니다.</span>
</div>
</div>
</div>
<ul id="paging" class="paging"></ul>
</div>
</div>
</div>
</div>
</form> </form>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -269,16 +269,30 @@
_ref = file.previewElement.querySelectorAll("[data-dz-name]"); _ref = file.previewElement.querySelectorAll("[data-dz-name]");
for (_i = 0, _len = _ref.length; _i < _len; _i++) { for (_i = 0, _len = _ref.length; _i < _len; _i++) {
node = _ref[_i]; node = _ref[_i];
node.textContent = (file.name + "_" + file.accepted + "_" + file.type); // DDDDDDDDDDDDDDDDDDDDddddd node.textContent = file.name;
} }
_ref1 = file.previewElement.querySelectorAll("[data-dz-size]"); _ref1 = file.previewElement.querySelectorAll("[data-dz-size]");
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
node = _ref1[_j]; node = _ref1[_j];
node.innerHTML = this.filesize(file.size); node.innerHTML = this.filesize(file.size);
} }
// 이미 등록된 파일인 경우, 다운로드 가능토록 처리
if(file.fileUploadType && file.fileUploadType == "uploaded") {
_ref1 = file.previewElement.querySelectorAll("[data-dz-file-icon]");
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
node = _ref1[_j];
node.title = '이미 등록된 파일입니다. 클릭하여 다운로드할 수 있습니다.';
$(node).css("cursor", "pointer");
$(node).on("click", function() {
fn_downloadFile(file.attachFileId, file.fileSn);
});
}
}
if (this.options.addRemoveLinks) { if (this.options.addRemoveLinks) {
//file._removeLink = Dropzone.createElement("<a class=\"dz-remove\" href=\"javascript:undefined;\" data-dz-remove>" + this.options.dictRemoveFile + "</a>"); //file._removeLink = Dropzone.createElement("<a class=\"dz-remove\" href=\"javascript:undefined;\" data-dz-remove>" + this.options.dictRemoveFile + "</a>");
// NLIB DDDDDDDDDDDDDDDDDDDDDDDDDDDD // 첨부파일 삭제버트 변경 (NLIB)
file._removeLink = Dropzone.createElement('<button class="close" data-dz-remove><img src="/images/btn/btn-close-maplayer.png" alt="닫기 아이콘"></button>'); file._removeLink = Dropzone.createElement('<button class="close" data-dz-remove><img src="/images/btn/btn-close-maplayer.png" alt="닫기 아이콘"></button>');
file.previewElement.appendChild(file._removeLink); file.previewElement.appendChild(file._removeLink);
} }
@ -412,7 +426,15 @@
queuecomplete: noop, queuecomplete: noop,
addedfiles: noop, addedfiles: noop,
//previewTemplate: "<div class=\"dz-preview dz-file-preview\">\n <div class=\"dz-image\"><img data-dz-thumbnail /></div>\n <div class=\"dz-details\">\n <div class=\"dz-size\"><span data-dz-size></span></div>\n <div class=\"dz-filename\"><span data-dz-name></span></div>\n </div>\n <div class=\"dz-progress\"><span class=\"dz-upload\" data-dz-uploadprogress></span></div>\n <div class=\"dz-error-message\"><span data-dz-errormessage></span></div>\n <div class=\"dz-success-mark\">\n <svg width=\"54px\" height=\"54px\" viewBox=\"0 0 54 54\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n <title>Check</title>\n <defs></defs>\n <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n <path d=\"M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\" id=\"Oval-2\" stroke-opacity=\"0.198794158\" stroke=\"#747474\" fill-opacity=\"0.816519475\" fill=\"#FFFFFF\" sketch:type=\"MSShapeGroup\"></path>\n </g>\n </svg>\n </div>\n <div class=\"dz-error-mark\">\n <svg width=\"54px\" height=\"54px\" viewBox=\"0 0 54 54\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n <title>Error</title>\n <defs></defs>\n <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n <g id=\"Check-+-Oval-2\" sketch:type=\"MSLayerGroup\" stroke=\"#747474\" stroke-opacity=\"0.198794158\" fill=\"#FFFFFF\" fill-opacity=\"0.816519475\">\n <path d=\"M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\" id=\"Oval-2\" sketch:type=\"MSShapeGroup\"></path>\n </g>\n </g>\n </svg>\n </div>\n</div>" //previewTemplate: "<div class=\"dz-preview dz-file-preview\">\n <div class=\"dz-image\"><img data-dz-thumbnail /></div>\n <div class=\"dz-details\">\n <div class=\"dz-size\"><span data-dz-size></span></div>\n <div class=\"dz-filename\"><span data-dz-name></span></div>\n </div>\n <div class=\"dz-progress\"><span class=\"dz-upload\" data-dz-uploadprogress></span></div>\n <div class=\"dz-error-message\"><span data-dz-errormessage></span></div>\n <div class=\"dz-success-mark\">\n <svg width=\"54px\" height=\"54px\" viewBox=\"0 0 54 54\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n <title>Check</title>\n <defs></defs>\n <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n <path d=\"M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\" id=\"Oval-2\" stroke-opacity=\"0.198794158\" stroke=\"#747474\" fill-opacity=\"0.816519475\" fill=\"#FFFFFF\" sketch:type=\"MSShapeGroup\"></path>\n </g>\n </svg>\n </div>\n <div class=\"dz-error-mark\">\n <svg width=\"54px\" height=\"54px\" viewBox=\"0 0 54 54\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n <title>Error</title>\n <defs></defs>\n <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n <g id=\"Check-+-Oval-2\" sketch:type=\"MSLayerGroup\" stroke=\"#747474\" stroke-opacity=\"0.198794158\" fill=\"#FFFFFF\" fill-opacity=\"0.816519475\">\n <path d=\"M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\" id=\"Oval-2\" sketch:type=\"MSShapeGroup\"></path>\n </g>\n </g>\n </svg>\n </div>\n</div>"
previewTemplate: '<div class="file dz-preview dz-file-preview"><span class="icon"><img src="/images/icon/icon-file.png" alt="파일 아이콘"></span><span class="text"><span data-dz-name></span><em>(<span data-dz-size></span>)</em></span></div>&nsp;' previewTemplate:
'<div class="file dz-preview dz-file-preview">' +
'<span class="icon"><img src="/images/icon/icon-file.png" data-dz-file-icon alt="파일 아이콘"></span>' +
'<span class="text"><span data-dz-name></span>' +
'<em>(<span data-dz-size></span>)</em>' +
'</span></div>'
// data-dz-file-icon span data-dz-name
// /images/icon/icon-file-down.png
// /images/icon/icon-file.png
}; };
extend = function() { extend = function() {
@ -987,7 +1009,12 @@
bytesSent: 0 bytesSent: 0
}; };
this.files.push(file); this.files.push(file);
if(file.fileUploadType && file.fileUploadType == 'uploaded') { // NLIB
file.status = Dropzone.SUCCESS
} else {
file.status = Dropzone.ADDED; file.status = Dropzone.ADDED;
}
this.emit("addedfile", file); this.emit("addedfile", file);
this._enqueueThumbnail(file); this._enqueueThumbnail(file);
return this.accept(file, (function(_this) { return this.accept(file, (function(_this) {
@ -1604,6 +1631,12 @@
Dropzone.isValidFile = function(file, acceptedFiles) { Dropzone.isValidFile = function(file, acceptedFiles) {
var baseMimeType, mimeType, validType, _i, _len; var baseMimeType, mimeType, validType, _i, _len;
if(file.fileUploadType == 'uploaded') {
// 이미 등록된 파일로써 true 처리 (NLIB)
return true;
}
if (!acceptedFiles) { if (!acceptedFiles) {
return true; return true;
} }