카트 : 퍼블 적용 작업
This commit is contained in:
parent
005ee3fbad
commit
f5728ff520
@ -84,16 +84,6 @@ public interface CartService
|
|||||||
*/
|
*/
|
||||||
public String deleteCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, CollectionVO cartVO) throws Exception;
|
public String deleteCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, CollectionVO cartVO) throws Exception;
|
||||||
|
|
||||||
/**
|
|
||||||
* 비로그인시 카트에 저장된 내역을 로그인한 후 해당 사용자의 카트로 저장하고, 쿠키 카트내용은 초기화한다.
|
|
||||||
*
|
|
||||||
* @param mbInfoId
|
|
||||||
* @param request
|
|
||||||
* @return
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
public int saveCartItemsOfNonMember(String mbInfoId, HttpServletRequest request) throws Exception;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 쿠키 카트(비로그인 상태의 카트정보) 존재하는 경우, 해당 사용자 카트(DB)로 등록한 후, 쿠키 카트 삭제한다.
|
* 쿠키 카트(비로그인 상태의 카트정보) 존재하는 경우, 해당 사용자 카트(DB)로 등록한 후, 쿠키 카트 삭제한다.
|
||||||
@ -106,4 +96,25 @@ public interface CartService
|
|||||||
*/
|
*/
|
||||||
public int mergeCart(String mbInfoId, HttpServletRequest request, HttpServletResponse response) throws Exception;
|
public int mergeCart(String mbInfoId, HttpServletRequest request, HttpServletResponse response) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 쿠키 카트(비로그인 상태의 카트정보)에 존재하는 자료 개수를 리턴한다.
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @param response
|
||||||
|
* @param cartTypeCd
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public int countCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, String cartTypeCd) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 사용자 카트의 자료 개수를 리턴한다.
|
||||||
|
*
|
||||||
|
* @param mbInfoId
|
||||||
|
* @param cartTypeCd
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public int countCartItems(String mbInfoId, String cartTypeCd) throws Exception;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -44,4 +44,17 @@ public interface CollectionService {
|
|||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public List<CollectionVO> setDetailInfoForList(List<CollectionVO> list) throws Exception;
|
public List<CollectionVO> setDetailInfoForList(List<CollectionVO> list) throws Exception;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 목록의 자료정보에 상세정보를 조회하여 설정한 후 리턴한다.
|
||||||
|
*
|
||||||
|
* @param list
|
||||||
|
* @param mbInfoId
|
||||||
|
* @param defaultThumbnailUrl
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public List<CollectionVO> setDetailInfoForList(List<CollectionVO> list, String mbInfoId, String defaultThumbnailUrl) throws Exception;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -32,9 +32,6 @@ import nlib.util.StringUtil;
|
|||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
public class CollectionVO extends PagingVO {
|
public class CollectionVO extends PagingVO {
|
||||||
|
|
||||||
// 기본 썸네일 (썸네일 존재하지 않는 경우, default url)
|
|
||||||
public final String THUMBNAIL_IMG_URL = NlibProperty.getString("item.thumbnail.image.url");
|
|
||||||
|
|
||||||
//--------------------------------------------
|
//--------------------------------------------
|
||||||
// 자료항목
|
// 자료항목
|
||||||
//--------------------------------------------
|
//--------------------------------------------
|
||||||
@ -103,6 +100,7 @@ public class CollectionVO extends PagingVO {
|
|||||||
private String assetLink; /* 자산링크 */
|
private String assetLink; /* 자산링크 */
|
||||||
private String regId; /* 등록자ID */
|
private String regId; /* 등록자ID */
|
||||||
private String modId; /* 변경자ID */
|
private String modId; /* 변경자ID */
|
||||||
|
private String mUseYn; /* 관심여부 */
|
||||||
|
|
||||||
//--------------------------------------------
|
//--------------------------------------------
|
||||||
// 기타 연관기능 항목
|
// 기타 연관기능 항목
|
||||||
@ -183,11 +181,15 @@ public class CollectionVO extends PagingVO {
|
|||||||
this.title = title;
|
this.title = title;
|
||||||
}
|
}
|
||||||
public String getRprsThumbUrl() {
|
public String getRprsThumbUrl() {
|
||||||
return rprsThumbUrl == null ? THUMBNAIL_IMG_URL : rprsThumbUrl;
|
return rprsThumbUrl;
|
||||||
}
|
}
|
||||||
public void setRprsThumbUrl(String rprsThumbUrl) {
|
public void setRprsThumbUrl(String rprsThumbUrl) {
|
||||||
this.rprsThumbUrl = rprsThumbUrl;
|
this.rprsThumbUrl = rprsThumbUrl;
|
||||||
}
|
}
|
||||||
|
public void setRprsThumbUrl(String rprsThumbUrl, String defaultImgUrl) {
|
||||||
|
if(StringUtil.isEmpty(rprsThumbUrl) || !rprsThumbUrl.startsWith("/")) this.rprsThumbUrl = defaultImgUrl;
|
||||||
|
else this.rprsThumbUrl = rprsThumbUrl;
|
||||||
|
}
|
||||||
public String getUseYn() {
|
public String getUseYn() {
|
||||||
return useYn;
|
return useYn;
|
||||||
}
|
}
|
||||||
@ -691,5 +693,13 @@ public class CollectionVO extends PagingVO {
|
|||||||
this.rtnDd = rtnDd;
|
this.rtnDd = rtnDd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getMUseYn() {
|
||||||
|
return StringUtil.isEmpty(mUseYn) ? "N" : mUseYn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMUseYn(String mUseYn) {
|
||||||
|
this.mUseYn = mUseYn;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -22,4 +22,6 @@ public interface CartDAO {
|
|||||||
|
|
||||||
public int changeCartType(CollectionVO cartVO) throws Exception;
|
public int changeCartType(CollectionVO cartVO) throws Exception;
|
||||||
|
|
||||||
|
public int countCartItems(@Param("mbInfoId") String mbInfoId, @Param("cartTypeCd") String cartTypeCd) throws Exception;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -77,28 +77,25 @@ public class CartServiceImpl implements CartService
|
|||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public List<CollectionVO> listCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, String cartTypeCd) throws Exception {
|
public List<CollectionVO> listCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, String cartTypeCd) throws Exception {
|
||||||
Cookie[] cookies = request.getCookies();
|
|
||||||
if(cookies == null || cookies.length < 1) return null;
|
|
||||||
|
|
||||||
|
if(StringUtil.isEmpty(cartTypeCd)) return null;
|
||||||
List<CollectionVO> list = new ArrayList<CollectionVO>();
|
List<CollectionVO> list = new ArrayList<CollectionVO>();
|
||||||
|
|
||||||
String targetCookieName = CART_COOKIE_NAME + (cartTypeCd == null || cartTypeCd.equals("0") ? "" : cartTypeCd);
|
String targetCookieName = CART_COOKIE_NAME + cartTypeCd;
|
||||||
|
|
||||||
for(Cookie cookie : cookies) {
|
|
||||||
String cookieName = cookie.getName();
|
|
||||||
if(cookieName.startsWith(targetCookieName)) {
|
|
||||||
|
|
||||||
// _NLIB_COOKIE1=:masterId:masterId:
|
// _NLIB_COOKIE1=:masterId:masterId:
|
||||||
String cartStr = cookie.getValue();
|
String cartStr = getCookie(request, targetCookieName);
|
||||||
|
if(StringUtil.isEmpty(cartStr)) return null;
|
||||||
|
|
||||||
String[] cartItemsStr = cartStr.split(":");
|
String[] cartItemsStr = cartStr.split(":");
|
||||||
for(String itemStr : cartItemsStr) {
|
for(String itemStr : cartItemsStr) {
|
||||||
if(StringUtil.isEmpty(itemStr)) continue;
|
if(StringUtil.isEmpty(itemStr)) continue;
|
||||||
CollectionVO vo = CollectionVO.createWithMasterId(cookieName.substring(cookieName.length()-2), itemStr);
|
CollectionVO vo = CollectionVO.createWithMasterId(targetCookieName.substring(targetCookieName.length()-2), itemStr);
|
||||||
vo.setMbCartId(vo.getMasterId()); // 비회원 쿠키 카트의 경우, 카트ID를 자료ID로 대체한다.
|
vo.setMbCartId(vo.getMasterId()); // 비회원 쿠키 카트의 경우, 카트ID를 자료ID로 대체한다.
|
||||||
if(vo != null) list.add(vo);
|
if(vo != null) list.add(vo);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
if(list.size() < 1) return null;
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
@ -525,18 +522,6 @@ public class CartServiceImpl implements CartService
|
|||||||
log.debug("updateSelItemsForDB > " + cartVO.getSelItems());
|
log.debug("updateSelItemsForDB > " + cartVO.getSelItems());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 비로그인시 카트에 저장된 내역을 로그인한 후 해당 사용자의 카트로 저장하고, 쿠키 카트내용은 초기화한다.
|
|
||||||
*
|
|
||||||
* @param mbInfoId
|
|
||||||
* @param request
|
|
||||||
* @return
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
public int saveCartItemsOfNonMember(String mbInfoId, HttpServletRequest request) throws Exception {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 쿠키 카트(비로그인 상태의 카트정보) 존재하는 경우, 해당 사용자 카트(DB)로 등록한 후, 쿠키 카트 삭제한다.
|
* 쿠키 카트(비로그인 상태의 카트정보) 존재하는 경우, 해당 사용자 카트(DB)로 등록한 후, 쿠키 카트 삭제한다.
|
||||||
*
|
*
|
||||||
@ -570,4 +555,46 @@ public class CartServiceImpl implements CartService
|
|||||||
return mergeCnt;
|
return mergeCnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 쿠키 카트(비로그인 상태의 카트정보)에 존재하는 자료 개수를 리턴한다.
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @param response
|
||||||
|
* @param cartTypeCd
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public int countCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, String cartTypeCd) throws Exception {
|
||||||
|
|
||||||
|
if(StringUtil.isEmpty(cartTypeCd)) return 0;
|
||||||
|
|
||||||
|
String targetCookieName = CART_COOKIE_NAME + cartTypeCd;
|
||||||
|
|
||||||
|
String cartStr = getCookie(request, targetCookieName);
|
||||||
|
if(StringUtil.isEmpty(cartStr)) return 0;
|
||||||
|
|
||||||
|
String[] cartItemsStr = cartStr.split(":");
|
||||||
|
int retCnt = 0;
|
||||||
|
for(String itemStr : cartItemsStr) {
|
||||||
|
if(StringUtil.isEmpty(itemStr)) continue;
|
||||||
|
retCnt++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return retCnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 사용자 카트의 자료 개수를 리턴한다.
|
||||||
|
*
|
||||||
|
* @param mbInfoId
|
||||||
|
* @param cartTypeCd
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public int countCartItems(String mbInfoId, String cartTypeCd) throws Exception {
|
||||||
|
return cartDAO.countCartItems(mbInfoId, cartTypeCd);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -96,110 +96,25 @@ public class CollectionServiceImpl implements CollectionService {
|
|||||||
* @return
|
* @return
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public List<CollectionVO> setDetailInfoForList_BK(List<CollectionVO> list) throws Exception {
|
public List<CollectionVO> setDetailInfoForList(List<CollectionVO> list) throws Exception {
|
||||||
|
return setDetailInfoForList(list, null, null);
|
||||||
if(list == null || list.size() < 1) return list;
|
|
||||||
|
|
||||||
final int MAX_CNT_FOR_ONE_QUERY = 10;
|
|
||||||
int cnt = list.size();
|
|
||||||
HashMap<String, String> orgCdMasterIdMap = new HashMap<String, String>();
|
|
||||||
HashMap<String, CollectionVO> collectionMap = new HashMap<String, CollectionVO>();
|
|
||||||
String mbInfoId = null;
|
|
||||||
|
|
||||||
// 문화원별 자료ID 항목값 생성
|
|
||||||
for(int i=0; i<cnt; i++) {
|
|
||||||
CollectionVO vo = list.get(i);
|
|
||||||
String orgCd = vo.getMngOrgCd();
|
|
||||||
String jsonMasterId = orgCdMasterIdMap.get(orgCd);
|
|
||||||
|
|
||||||
if(jsonMasterId == null) jsonMasterId = "";
|
|
||||||
|
|
||||||
if(mbInfoId == null) mbInfoId = vo.getMbInfoId();
|
|
||||||
|
|
||||||
// [{"masterId":"xxxx"}, {"masterId":"xxxb"},…]
|
|
||||||
if(jsonMasterId.length() > 0) jsonMasterId += ",";
|
|
||||||
jsonMasterId += "{'masterId':'" + vo.getMasterId() + "}";
|
|
||||||
|
|
||||||
orgCdMasterIdMap.put(orgCd, jsonMasterId);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 문화원별 API 요청 처리
|
|
||||||
for(String orgCd : orgCdMasterIdMap.keySet()) {
|
|
||||||
|
|
||||||
String jsonMasterId = orgCdMasterIdMap.get(orgCd);
|
|
||||||
if(StringUtil.isEmpty(jsonMasterId)) continue;
|
|
||||||
|
|
||||||
jsonMasterId = "[" + jsonMasterId + "]";
|
|
||||||
|
|
||||||
// API 호출
|
|
||||||
DataApiReqVO reqVO = new DataApiReqVO("/uac/service/nlib/col/listItemInfo", HttpMethod.GET);
|
|
||||||
reqVO.putInfoItem("mngOrgCd", orgCd);
|
|
||||||
reqVO.putInfoItem("jsonMasterId", jsonMasterId);
|
|
||||||
|
|
||||||
reqVO.setMbInfoId(mbInfoId); // 통신 시, 암호화되어 송수신됨
|
|
||||||
DataApiResVO resVO = dataApi.request(reqVO);
|
|
||||||
|
|
||||||
// 결과 처리
|
|
||||||
if(resVO.getResultCode().charAt(0) == 'S') {
|
|
||||||
List<HashMap<String, String>> recordList = resVO.getList("record");
|
|
||||||
if(recordList == null || recordList.size() < 1) continue;
|
|
||||||
|
|
||||||
for(HashMap<String, String> record : recordList) {
|
|
||||||
CollectionVO cVO = (CollectionVO)XmlConverter.convertMapToObject(record, CollectionVO.class);
|
|
||||||
if(cVO != null && StringUtil.isNotEmpty(cVO.getMasterId())) {
|
|
||||||
collectionMap.put(cVO.getMasterId(), cVO);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
log.error("setDetailInfoForCartItems > 소장자료 다건 메타정보 조회 오류(API) : " + resVO.getResultCode() + " : " + resVO.getResultMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 목록에 업데이트 설정
|
|
||||||
for(int i=0; i<cnt; i++) {
|
|
||||||
CollectionVO vo = list.get(i);
|
|
||||||
String masterId = vo.getMasterId();
|
|
||||||
CollectionVO cVO = collectionMap.get(masterId);
|
|
||||||
|
|
||||||
if(cVO == null) continue;
|
|
||||||
|
|
||||||
vo.setTitle (cVO.getTitle());
|
|
||||||
vo.setTypeDivCd (cVO.getTypeDivCd());
|
|
||||||
vo.setTypeCodeNm (cVO.getTypeCodeNm());
|
|
||||||
vo.setSubjectNm (cVO.getSubjectNm());
|
|
||||||
vo.setOrgNm (cVO.getOrgNm());
|
|
||||||
vo.setCreatYyyy (cVO.getCreatYyyy());
|
|
||||||
vo.setRprsThumbUrl (cVO.getRprsThumbUrl());
|
|
||||||
vo.setInterfaceId (cVO.getInterfaceId());
|
|
||||||
vo.setOpenDivCd (cVO.getOpenDivCd());
|
|
||||||
vo.setOperReadRangeCd(cVO.getOperReadRangeCd());
|
|
||||||
vo.setOperOutRangeCd (cVO.getOperOutRangeCd());
|
|
||||||
vo.setUseStatus (cVO.getUseStatus());
|
|
||||||
vo.setRtnExpctDd (cVO.getRtnExpctDd());
|
|
||||||
vo.setAwaiterCnt (cVO.getAwaiterCnt());
|
|
||||||
vo.setBookLentPsblYn (cVO.getBookLentPsblYn());
|
|
||||||
vo.setRsrvPsblYn (cVO.getRsrvPsblYn());
|
|
||||||
vo.setReqPsblYn (cVO.getReqPsblYn());
|
|
||||||
vo.setInterestYn (cVO.getInterestYn());
|
|
||||||
}
|
|
||||||
|
|
||||||
return list;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 목록의 자료정보에 상세정보를 조회하여 설정한 후 리턴한다.
|
* 목록의 자료정보에 상세정보를 조회하여 설정한 후 리턴한다.
|
||||||
*
|
*
|
||||||
* @param list
|
* @param list
|
||||||
|
* @param mbInfoId
|
||||||
|
* @param defaultThumbnailUrl
|
||||||
* @return
|
* @return
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public List<CollectionVO> setDetailInfoForList(List<CollectionVO> list) throws Exception {
|
public List<CollectionVO> setDetailInfoForList(List<CollectionVO> list, String mbInfoId, String defaultThumbnailUrl) throws Exception {
|
||||||
|
|
||||||
if(list == null || list.size() < 1) return list;
|
if(list == null || list.size() < 1) return list;
|
||||||
|
|
||||||
int cnt = list.size();
|
int cnt = list.size();
|
||||||
HashMap<String, CollectionVO> collectionMap = new HashMap<String, CollectionVO>();
|
HashMap<String, CollectionVO> collectionMap = new HashMap<String, CollectionVO>();
|
||||||
String mbInfoId = null;
|
|
||||||
|
|
||||||
// 문화원별 API 요청 처리
|
// 문화원별 API 요청 처리
|
||||||
String jsonMasterId = "";
|
String jsonMasterId = "";
|
||||||
@ -254,18 +169,19 @@ public class CollectionServiceImpl implements CollectionService {
|
|||||||
vo.setSubjectNm (cVO.getSubjectNm());
|
vo.setSubjectNm (cVO.getSubjectNm());
|
||||||
vo.setOrgNm (cVO.getOrgNm());
|
vo.setOrgNm (cVO.getOrgNm());
|
||||||
vo.setCreatYyyy (cVO.getCreatYyyy());
|
vo.setCreatYyyy (cVO.getCreatYyyy());
|
||||||
vo.setRprsThumbUrl (cVO.getRprsThumbUrl());
|
vo.setRprsThumbUrl (cVO.getRprsThumbUrl(), defaultThumbnailUrl);
|
||||||
vo.setInterfaceId (cVO.getInterfaceId());
|
vo.setInterfaceId (cVO.getInterfaceId());
|
||||||
vo.setOpenDivCd (cVO.getOpenDivCd());
|
vo.setOpenDivCd (cVO.getOpenDivCd());
|
||||||
vo.setOperReadRangeCd(cVO.getOperReadRangeCd());
|
vo.setOperReadRangeCd(cVO.getOperReadRangeCd());
|
||||||
vo.setOperOutRangeCd (cVO.getOperOutRangeCd());
|
vo.setOperOutRangeCd (cVO.getOperOutRangeCd());
|
||||||
vo.setUseStatus (cVO.getUseStatus());
|
vo.setUseStatus (cVO.getUseStatus());
|
||||||
vo.setRtnExpctDd (cVO.getRtnExpctDd());
|
vo.setRtnExpctDd (StringUtil.formatDateStr(cVO.getRtnExpctDd(), "-"));
|
||||||
vo.setAwaiterCnt (cVO.getAwaiterCnt());
|
vo.setAwaiterCnt (cVO.getAwaiterCnt());
|
||||||
vo.setBookLentPsblYn (cVO.getBookLentPsblYn());
|
vo.setBookLentPsblYn (cVO.getBookLentPsblYn());
|
||||||
vo.setRsrvPsblYn (cVO.getRsrvPsblYn());
|
vo.setRsrvPsblYn (cVO.getRsrvPsblYn());
|
||||||
vo.setReqPsblYn (cVO.getReqPsblYn());
|
vo.setReqPsblYn (cVO.getReqPsblYn());
|
||||||
vo.setInterestYn (cVO.getInterestYn());
|
vo.setInterestYn (cVO.getInterestYn());
|
||||||
|
vo.setMUseYn (cVO.getMUseYn());
|
||||||
|
|
||||||
// DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
|
// DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
|
||||||
// API에 존재하지 않을 경우, 추가 DB 조회
|
// API에 존재하지 않을 경우, 추가 DB 조회
|
||||||
|
|||||||
@ -80,6 +80,8 @@ public class CartController extends NlibCommonController
|
|||||||
String mbInfoId = getMbInfoId(request);
|
String mbInfoId = getMbInfoId(request);
|
||||||
|
|
||||||
List<CollectionVO> list = null;
|
List<CollectionVO> list = null;
|
||||||
|
int cartTypeCd1Cnt = 0; // 대출 카트건수
|
||||||
|
int cartTypeCd2Cnt = 0; // 열람 카트건수
|
||||||
|
|
||||||
// 카트 목록 가져오기
|
// 카트 목록 가져오기
|
||||||
if(StringUtil.isEmpty(mbInfoId)) {
|
if(StringUtil.isEmpty(mbInfoId)) {
|
||||||
@ -87,21 +89,33 @@ public class CartController extends NlibCommonController
|
|||||||
list = cartService.listCartItemsFromCookie(request, response, cartTypeCd);
|
list = cartService.listCartItemsFromCookie(request, response, cartTypeCd);
|
||||||
|
|
||||||
// 카트 목록 자료에 대한 상세자료 설정
|
// 카트 목록 자료에 대한 상세자료 설정
|
||||||
collectionService.setDetailInfoForList(list);
|
collectionService.setDetailInfoForList(list, null, NlibProperty.getString("thumbnail.image.url.small"));
|
||||||
|
|
||||||
// 문화원별 정령 처리
|
// 문화원별 정렬 처리
|
||||||
list = sortCollectionListByMngOrgCd(list);
|
list = sortCollectionListByMngOrgCd(list);
|
||||||
|
|
||||||
|
// 카트 건수
|
||||||
|
cartTypeCd1Cnt = cartService.countCartItemsFromCookie(request, response, "1");
|
||||||
|
cartTypeCd2Cnt = cartService.countCartItemsFromCookie(request, response, "2");
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
list = cartService.listCartItems(mbInfoId, cartTypeCd);
|
list = cartService.listCartItems(mbInfoId, cartTypeCd);
|
||||||
|
|
||||||
// 카트 목록 자료에 대한 상세자료 설정
|
// 카트 목록 자료에 대한 상세자료 설정
|
||||||
collectionService.setDetailInfoForList(list);
|
collectionService.setDetailInfoForList(list, getMbInfoId(request), NlibProperty.getString("thumbnail.image.url.small"));
|
||||||
}
|
|
||||||
|
|
||||||
|
// 카트 건수
|
||||||
|
cartTypeCd1Cnt = cartService.countCartItems(mbInfoId, "1");
|
||||||
|
cartTypeCd2Cnt = cartService.countCartItems(mbInfoId, "2");
|
||||||
|
}
|
||||||
|
|
||||||
if(StringUtil.isNotEmpty(message) && message.startsWith("%")) {
|
if(StringUtil.isNotEmpty(message) && message.startsWith("%")) {
|
||||||
message = StringUtil.decodeUrl(message);
|
message = StringUtil.decodeUrl(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
model.addAttribute("cartTypeCd1Cnt", cartTypeCd1Cnt);
|
||||||
|
model.addAttribute("cartTypeCd2Cnt", cartTypeCd2Cnt);
|
||||||
|
|
||||||
model.addAttribute("list", list);
|
model.addAttribute("list", list);
|
||||||
model.addAttribute("cartTypeCd", cartTypeCd);
|
model.addAttribute("cartTypeCd", cartTypeCd);
|
||||||
model.addAttribute("message", message);
|
model.addAttribute("message", message);
|
||||||
|
|||||||
@ -36,6 +36,28 @@ import org.slf4j.LoggerFactory;
|
|||||||
* @version 1.0
|
* @version 1.0
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* @Class Name : StringUtil.java
|
||||||
|
*
|
||||||
|
* @Description :
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @ ------------ -------- ---------------------------
|
||||||
|
* @ 수정일 수정자 수정내용
|
||||||
|
* @ ------------ -------- ---------------------------
|
||||||
|
* @ 2021. 10. 25. KNKIM 최초 생성
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author 이씨플라자 * DIGITALSHIP KNKIM
|
||||||
|
* @since 2021. 10. 25.
|
||||||
|
* @version 1.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
public class StringUtil extends StringUtils {
|
public class StringUtil extends StringUtils {
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(StringUtil.class);
|
private static final Logger log = LoggerFactory.getLogger(StringUtil.class);
|
||||||
@ -238,6 +260,28 @@ public class StringUtil extends StringUtils {
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 날짜 문자열(YYYYMMDD)을 받아서 화면 출력용 날짜 형식 문자열(YYYY-MM-DD)로 리턴한다.
|
||||||
|
*
|
||||||
|
* @param dateStr
|
||||||
|
* @param defaultStr
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String formatDateStr(String dateStr, String defaultStr) {
|
||||||
|
|
||||||
|
if(isEmpty(dateStr)) return defaultStr;
|
||||||
|
|
||||||
|
String tmpDateStr = dateStr.trim();
|
||||||
|
switch(tmpDateStr.length()) {
|
||||||
|
case 4 : return dateStr; // 연도만 있는 경우
|
||||||
|
case 6 : return tmpDateStr.substring(0, 4) + "-" + tmpDateStr.substring(4); // YYYY-MM
|
||||||
|
case 8 : return tmpDateStr.substring(0, 4) + "-" + tmpDateStr.substring(4, 6) + "-" + tmpDateStr.substring(6); // YYYY-MM-DD
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultStr;
|
||||||
|
}
|
||||||
|
|
||||||
/** * 이메일 masking 후 리턴<br> * 변환 실패시 입력값 그대로 리턴<br> * 이메일 아이디 앞 2자리 노출<br> */
|
/** * 이메일 masking 후 리턴<br> * 변환 실패시 입력값 그대로 리턴<br> * 이메일 아이디 앞 2자리 노출<br> */
|
||||||
public static String maskEmail(String email){
|
public static String maskEmail(String email){
|
||||||
try{
|
try{
|
||||||
@ -284,4 +328,5 @@ public class StringUtil extends StringUtils {
|
|||||||
catch (Exception e){
|
catch (Exception e){
|
||||||
} return name;
|
} return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,6 +30,18 @@
|
|||||||
ORDER BY B.MNG_ORG_CD
|
ORDER BY B.MNG_ORG_CD
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="countCartItems" parameterType="String" resultType="Integer">
|
||||||
|
SELECT COUNT(A.MB_CART_ID) AS CNT
|
||||||
|
FROM MB_CART A
|
||||||
|
INNER JOIN RG_MASTER B ON A.MASTER_ID = B.MASTER_ID
|
||||||
|
WHERE A.MB_INFO_ID = #{mbInfoId}
|
||||||
|
<if test='cartTypeCd != null and !cartTypeCd.equals("") and !cartTypeCd.equals("0")'>
|
||||||
|
AND A.CART_TYPE_CD = #{cartTypeCd}
|
||||||
|
</if>
|
||||||
|
AND A.DELETE_YN = 'N'
|
||||||
|
AND IFNULL(A.CART_PROC_DIV_CD, 'N') = 'N'
|
||||||
|
</select>
|
||||||
|
|
||||||
<select id="countCartItem" parameterType="CollectionVO" resultType="Integer">
|
<select id="countCartItem" parameterType="CollectionVO" resultType="Integer">
|
||||||
SELECT COUNT(1)
|
SELECT COUNT(1)
|
||||||
FROM MB_CART A
|
FROM MB_CART A
|
||||||
|
|||||||
@ -165,3 +165,12 @@ cart.cookie.domain = nculture.org
|
|||||||
# \ubbf8\ub85c\uadf8\uc778 \uc0ac\uc6a9\uc790\uc758 \uce74\ud2b8\uc815\ubcf4\uac00 \uc800\uc7a5\ub418\ub294 \ucfe0\ud0a4\uba85
|
# \ubbf8\ub85c\uadf8\uc778 \uc0ac\uc6a9\uc790\uc758 \uce74\ud2b8\uc815\ubcf4\uac00 \uc800\uc7a5\ub418\ub294 \ucfe0\ud0a4\uba85
|
||||||
cart.cookie.name = _NLIB_CART_COOKIE
|
cart.cookie.name = _NLIB_CART_COOKIE
|
||||||
cart.cookie.path = /
|
cart.cookie.path = /
|
||||||
|
|
||||||
|
|
||||||
|
#----------------------------------------
|
||||||
|
# \uc378\ub124\uc77c \uae30\ubcf8 \uc774\ubbf8\uc9c0 (\uc378\ub124\uc77c \uc5c6\uc74c)
|
||||||
|
#----------------------------------------
|
||||||
|
thumbnail.image.url.small = /images/thumbnail/noimage-s.jpg
|
||||||
|
thumbnail.image.url.middle = /images/thumbnail/noimage-m.jpg
|
||||||
|
thumbnail.image.url.big = /images/thumbnail/noimage-b.jpg
|
||||||
|
|
||||||
|
|||||||
@ -30,6 +30,7 @@
|
|||||||
<%@ 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" uri="http://www.springmodules.org/tags/commons-validator" %>
|
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
|
||||||
|
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
|
||||||
|
|
||||||
<script type="text/javaScript" language="javascript">
|
<script type="text/javaScript" language="javascript">
|
||||||
var BTN_APP_PREFIX = "대출신청/예약";
|
var BTN_APP_PREFIX = "대출신청/예약";
|
||||||
@ -73,6 +74,7 @@ $( document ).ready(function() {
|
|||||||
$("[id^=chk_all_" + mngOrgCd + "]").prop("checked", checked);
|
$("[id^=chk_all_" + mngOrgCd + "]").prop("checked", checked);
|
||||||
|
|
||||||
$("#btnApp").val(BTN_APP_PREFIX + " (" + selNum + ")");
|
$("#btnApp").val(BTN_APP_PREFIX + " (" + selNum + ")");
|
||||||
|
$("#appCnt").text("(" + selNum + ")");
|
||||||
});
|
});
|
||||||
|
|
||||||
$("[id^=selMngOrgCd]").filter(":first").prop("checked", true);
|
$("[id^=selMngOrgCd]").filter(":first").prop("checked", true);
|
||||||
@ -80,6 +82,8 @@ $( document ).ready(function() {
|
|||||||
|
|
||||||
}); // document ready
|
}); // document ready
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function fn_deleteCartItems() {
|
function fn_deleteCartItems() {
|
||||||
if($("[id^=chk_item_]:checked").length < 1) {
|
if($("[id^=chk_item_]:checked").length < 1) {
|
||||||
alert("삭제할 대상을 선택해 주세요.");
|
alert("삭제할 대상을 선택해 주세요.");
|
||||||
@ -152,6 +156,37 @@ function fn_changeCartItems(cartTypeCd, cartTypeNm) {
|
|||||||
$("#frm").submit();
|
$("#frm").submit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function fn_appRent() {
|
||||||
|
|
||||||
|
<sec:authorize access="not isAuthenticated()">
|
||||||
|
alert("먼저 로그인하신 후, 이용해 주시기 바랍니다.");
|
||||||
|
</sec:authorize>
|
||||||
|
|
||||||
|
<sec:authorize access="isAuthenticated()">
|
||||||
|
if($("[id^=chk_item_]:checked").length < 1) {
|
||||||
|
alert("대출할 대상을 선택해 주세요.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!confirm(($("[id^=chk_item_]:checked").length) + "건을 대출신청하시겠습니까?\n\n[안내]\n- 대출중인 자료는 대출예약으로 신청됩니다.\n- 대출대기자가 존재하는 경우, 대출신청/예약이 불가능합니다.")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#selItems").val(fn_getCheckedCartItemsValues());
|
||||||
|
$("#frm").attr("action","${pageContext.request.contextPath}/cart/confirmRent.do");
|
||||||
|
$("#frm").submit();
|
||||||
|
</sec:authorize>
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function fn_changeInterest(masterId, onOff) {
|
||||||
|
alert("관심등록/삭제 준비중 : " + masterId + ", " + onOff);
|
||||||
|
}
|
||||||
|
|
||||||
|
function fn_gotoDetail(masterId) {
|
||||||
|
alert("상세보기 준비중 : " + masterId);
|
||||||
|
}
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
|
|
||||||
/* 탭메뉴 */
|
/* 탭메뉴 */
|
||||||
@ -200,10 +235,10 @@ $(document).ready(function() {
|
|||||||
</div>
|
</div>
|
||||||
<div class="contents row-bottom">
|
<div class="contents row-bottom">
|
||||||
<div class="cart-box">
|
<div class="cart-box">
|
||||||
<div class="tab">
|
<div class="cartTab">
|
||||||
<ul class="tabs active">
|
<ul class="tabs active">
|
||||||
<li><a href="javascript:void(0);" onclick="fn_search('1')" <c:if test='${cartTypeCd == "1"}'>class="current"</c:if> >대출 <span>(5)</span></a></li>
|
<li><a href="javascript:void(0);" onclick="fn_search('1')" <c:if test='${cartTypeCd == "1"}'>class="current"</c:if> >대출 <span>(${cartTypeCd1Cnt })</span></a></li>
|
||||||
<li><a href="javascript:void(0);" onclick="fn_search('2')" <c:if test='${cartTypeCd == "2"}'>class="current"</c:if> >방문열람 <span>(3)</span></a></li>
|
<li><a href="javascript:void(0);" onclick="fn_search('2')" <c:if test='${cartTypeCd == "2"}'>class="current"</c:if> >방문열람 <span>(${cartTypeCd2Cnt })</span></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="tab_content">
|
<div class="tab_content">
|
||||||
@ -214,6 +249,7 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
<c:set var="preMngOrgCd" value="" />
|
<c:set var="preMngOrgCd" value="" />
|
||||||
<c:set var="mngOrgCdCnt" value="0" />
|
<c:set var="mngOrgCdCnt" value="0" />
|
||||||
|
<c:set var="totCnt" value="0" />
|
||||||
|
|
||||||
<c:forEach var="cart" items="${list}" varStatus="status">
|
<c:forEach var="cart" items="${list}" varStatus="status">
|
||||||
|
|
||||||
@ -242,21 +278,32 @@ $(document).ready(function() {
|
|||||||
</c:if>
|
</c:if>
|
||||||
|
|
||||||
<c:set var="mngOrgCdCnt" value="${mngOrgCdCnt+1}" />
|
<c:set var="mngOrgCdCnt" value="${mngOrgCdCnt+1}" />
|
||||||
|
<c:set var="totCnt" value="${totCnt+1}" />
|
||||||
|
|
||||||
<!-- 행 : 시작 -->
|
<!-- 행 : 시작 -->
|
||||||
<div class="list">
|
<div class="list">
|
||||||
<div class="t-chk"><input type="checkbox" name="chk_item_${cart.mngOrgCd }" id="chk_item_${cart.mngOrgCd }" value="${cart.masterId }" ></div>
|
<div class="t-chk"><input type="checkbox" name="chk_item_${cart.mngOrgCd }" id="chk_item_${cart.mngOrgCd }" value="${cart.masterId }" ></div>
|
||||||
<div class="t-data">
|
<div class="t-data">
|
||||||
<div class="img">${cart.interestYn }
|
<div class="img">${cart.interestYn }
|
||||||
<a href="javascript:void(0)"><img src="/images/img/img-cart-img01.jpg" alt=""></a>
|
<a href="javascript:void(0)"><img src="${cart.rprsThumbUrl }" alt="" width="60" height="91" title="상세보기" onclick="fn_gotoDetail('${cart.masterId }')"></a>
|
||||||
<span class="favorites"><img src="images/icon/icon-cart-Favorites.png" class="off" alt="즐겨찾기 아이콘">
|
<sec:authorize access="isAuthenticated()">
|
||||||
<img src="images/icon/icon-cart-Favorites-on.png" class="on" alt="즐겨찾기 아이콘">
|
|
||||||
|
<c:if test='${cart.MUseYn == "Y"}'>
|
||||||
|
<span class="favorites" onclick="fn_changeInterest('${cart.masterId }', 'off')" title="관심자료에서 삭제합니다.">
|
||||||
|
<img src="/images/icon/icon-cart-Favorites-on.png" class="off" alt="즐겨찾기 아이콘">
|
||||||
|
<img src="/images/icon/icon-cart-Favorites.png" class="on" alt="즐겨찾기 아이콘">
|
||||||
</span>
|
</span>
|
||||||
${cart.rprsThumbUrl }
|
</c:if>
|
||||||
|
<c:if test='${cart.MUseYn != "Y"}'>
|
||||||
|
<span class="favorites" onclick="fn_changeInterest('${cart.masterId }', 'on')" title="관심자료로 등록합니다.">
|
||||||
|
<img src="/images/icon/icon-cart-Favorites.png" class="off" alt="즐겨찾기 아이콘">
|
||||||
|
<img src="/images/icon/icon-cart-Favorites-on.png" class="on" alt="즐겨찾기 아이콘">
|
||||||
|
</span>
|
||||||
|
</c:if>
|
||||||
|
</sec:authorize>
|
||||||
</div>
|
</div>
|
||||||
<div class="type">
|
<div class="type">
|
||||||
|
<c:if test="${cart.openDivCd != '3' }">
|
||||||
<c:if test="${cart.operReadRangeCd == '01' }">
|
|
||||||
<span class="online">온라인열람</span>
|
<span class="online">온라인열람</span>
|
||||||
</c:if>
|
</c:if>
|
||||||
|
|
||||||
@ -264,17 +311,17 @@ $(document).ready(function() {
|
|||||||
<span class="loan">대출</span>
|
<span class="loan">대출</span>
|
||||||
</c:if>
|
</c:if>
|
||||||
|
|
||||||
<c:if test="${cart.operReadRangeCd == '01' }">
|
<c:if test="${cart.operReadRangeCd != '03' }">
|
||||||
<span class="visit">방문열람</span>
|
<span class="visit">방문열람</span>
|
||||||
</c:if>
|
</c:if>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="title">${cart.mbCartId }<a href="#">${cart.title }</a> ${cart.masterId }${cart.mngOrgCd }</div>
|
<div class="title"><a href="javascript:void(0)" onclick="fn_gotoDetail('${cart.masterId }')" title="상세보기">${cart.title }</a></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="t-state"><p>${cart.useStatusNm }</p></div>
|
<div class="t-state <c:if test="${cart.useStatus != '03' and cart.useStatus != '06' }">poss</c:if> <c:if test="${cart.useStatus == '03' or cart.useStatus == '06' }">imposs</c:if>"><p>${cart.useStatusNm }</p></div>
|
||||||
<div class="t-date">${cart.rtnExpctDd }</div>
|
<div class="t-date">${cart.rtnExpctDd }</div>
|
||||||
<div class="t-loan poss">${cart.operOutRangeNm }</div>
|
<div class="t-loan <c:if test="${cart.operOutRangeCd == '01' }">poss</c:if> <c:if test="${cart.operOutRangeCd != '01' }">imposs</c:if>">${cart.operOutRangeNm }</div>
|
||||||
<div class="t-visit imposs">${cart.operReadRangeNm }</div>
|
<div class="t-visit <c:if test="${cart.operReadRangeCd != '03' }">poss</c:if> <c:if test="${cart.operReadRangeCd == '03' }">imposs</c:if>">${cart.operReadRangeNm }</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- 행 : 종료 -->
|
<!-- 행 : 종료 -->
|
||||||
</c:forEach>
|
</c:forEach>
|
||||||
@ -285,6 +332,25 @@ $(document).ready(function() {
|
|||||||
$("#_${preMngOrgCd}_cnt").text("${mngOrgCdCnt }");
|
$("#_${preMngOrgCd}_cnt").text("${mngOrgCdCnt }");
|
||||||
</script>
|
</script>
|
||||||
</c:if>
|
</c:if>
|
||||||
|
|
||||||
|
<c:if test="${totCnt < 1 }">
|
||||||
|
<!-- 자료 없음 -->
|
||||||
|
<div class="list-cart">
|
||||||
|
<div class="list t-tit-line">
|
||||||
|
<div class="t-chk"><input type="checkbox"></div>
|
||||||
|
<div class="t-data">자료정보</div>
|
||||||
|
<div class="t-state">이용상태</div>
|
||||||
|
<div class="t-date">반납예정일</div>
|
||||||
|
<div class="t-loan">대출</div>
|
||||||
|
<div class="t-visit">방문열람</div>
|
||||||
|
</div>
|
||||||
|
<div class="compl-box">
|
||||||
|
<div class="compl-text">카트에 저장된 자료가 없습니다.</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
<c:if test="${totCnt > 0 }">
|
||||||
<div class="btn-box">
|
<div class="btn-box">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<button type="button" class="btn btn-gray" onclick="fn_deleteCartItems()">선택삭제</button>
|
<button type="button" class="btn btn-gray" onclick="fn_deleteCartItems()">선택삭제</button>
|
||||||
@ -299,15 +365,19 @@ $(document).ready(function() {
|
|||||||
</div>
|
</div>
|
||||||
<div class="right">
|
<div class="right">
|
||||||
<c:if test='${cartTypeCd == "1"}'>
|
<c:if test='${cartTypeCd == "1"}'>
|
||||||
<button type="button" name="btnApp" id="btnApp" class="btn btn-color" onclick="fn_reserveCartItems()">대출신청/예약 <span class="count">(2)</span></button>
|
<button type="button" name="btnApp" id="btnApp" class="btn btn-color" onclick="fn_appRent()">대출신청/예약 <span id="appCnt" name="appCnt" class="count">(0)</span></button>
|
||||||
<script>BTN_APP_PREFIX = "대출신청/예약"; </script>
|
<script>BTN_APP_PREFIX = "대출신청/예약"; </script>
|
||||||
</c:if>
|
</c:if>
|
||||||
<c:if test='${cartTypeCd == "2"}'>
|
<c:if test='${cartTypeCd == "2"}'>
|
||||||
<button type="button" name="btnApp" id="btnApp" class="btn btn-color" onclick="fn_reserveCartItems()">열람신청 <span class="count">(2)</span></button>
|
<button type="button" name="btnApp" id="btnApp" class="btn btn-color" onclick="fn_appVisit()">열람신청 <span id="appCnt" name="appCnt" class="count">(0)</span></button>
|
||||||
<script>BTN_APP_PREFIX = "열람신청"; </script>
|
<script>BTN_APP_PREFIX = "열람신청"; </script>
|
||||||
</c:if>
|
</c:if>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
BIN
src/main/webapp/images/thumbnail/noimage-b.jpg
Normal file
BIN
src/main/webapp/images/thumbnail/noimage-b.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
BIN
src/main/webapp/images/thumbnail/noimage-m.jpg
Normal file
BIN
src/main/webapp/images/thumbnail/noimage-m.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.1 KiB |
BIN
src/main/webapp/images/thumbnail/noimage-s.jpg
Normal file
BIN
src/main/webapp/images/thumbnail/noimage-s.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
Loading…
Reference in New Issue
Block a user