Jelajahi Sumber

Merge branch 'develop' of http://112.172.147.34:4936/style24/style24.front into develop

card007 5 tahun lalu
induk
melakukan
a3abcad716
30 mengubah file dengan 642 tambahan dan 491 penghapusan
  1. 22 0
      src/main/java/com/style24/front/biz/dao/TsfCommonDao.java
  2. 25 0
      src/main/java/com/style24/front/biz/service/TsfCommonService.java
  3. 49 11
      src/main/java/com/style24/front/biz/service/TsfCounselService.java
  4. 37 3
      src/main/java/com/style24/front/biz/web/TsfCustomerController.java
  5. 2 2
      src/main/java/com/style24/persistence/domain/Counsel.java
  6. 27 0
      src/main/java/com/style24/persistence/domain/SupplyCompany.java
  7. 28 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCommon.xml
  8. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfCounsel.xml
  9. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  10. 5 13
      src/main/webapp/WEB-INF/views/mob/callcenter/OneToOneQnaFormMob.html
  11. 22 5
      src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html
  12. 1 1
      src/main/webapp/WEB-INF/views/mob/customer/PrivacyPolicyLayerFormMob.html
  13. 40 50
      src/main/webapp/WEB-INF/views/mob/customer/SupplyCompanyLayerFormMob.html
  14. 13 2
      src/main/webapp/WEB-INF/views/mob/display/CategoryMainFormMob.html
  15. 44 22
      src/main/webapp/WEB-INF/views/mob/display/LookbookDetailFormMob.html
  16. 37 36
      src/main/webapp/WEB-INF/views/mob/display/MallMainFormMob.html
  17. 3 3
      src/main/webapp/WEB-INF/views/mob/display/OutletMainFormMob.html
  18. 3 3
      src/main/webapp/WEB-INF/views/mob/planning/PlanningReplyPhotoFormMob.html
  19. 2 2
      src/main/webapp/WEB-INF/views/web/callcenter/OneToOneQnaFormWeb.html
  20. 6 6
      src/main/webapp/WEB-INF/views/web/callcenter/OneToOneQnaRegisterFormWeb.html
  21. 15 1
      src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html
  22. 51 238
      src/main/webapp/WEB-INF/views/web/customer/PrivacyPolicyFormWeb.html
  23. 101 0
      src/main/webapp/WEB-INF/views/web/customer/SupplyCompanyLayerFormWeb.html
  24. 1 1
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  25. 6 4
      src/main/webapp/WEB-INF/views/web/display/CategoryMainFormWeb.html
  26. 9 2
      src/main/webapp/WEB-INF/views/web/display/LookbookDetailFormWeb.html
  27. 44 44
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  28. 36 33
      src/main/webapp/WEB-INF/views/web/display/OutletMainFormWeb.html
  29. 6 4
      src/main/webapp/ux/mo/css/layout_m.css
  30. 5 3
      src/main/webapp/ux/style24_link.js

+ 22 - 0
src/main/java/com/style24/front/biz/dao/TsfCommonDao.java

@@ -1,11 +1,14 @@
 package com.style24.front.biz.dao;
 
+import com.style24.persistence.domain.SupplyCompany;
 import org.springframework.stereotype.Repository;
 
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.InflowHst;
 import com.style24.persistence.domain.Order;
 
+import java.util.Collection;
+
 /**
  * 공통 Dao
  *
@@ -91,4 +94,23 @@ public interface TsfCommonDao {
 	 */
 	String getSearchEngineSyncYn();
 
+	/**
+	 * 공급업체 총 건수
+	 *
+	 * @return int - 건수
+	 * @author jsshin
+	 * @since 2021. 06. 10
+	 */
+	int getSupplyCompanyCount();
+
+	/**
+	 * 공급업체 목록
+	 *
+	 * @param supplyCompany - 페이징 정보
+	 * @return Collection<SupplyCompany> - 목록
+	 * @author jsshin
+	 * @since 2021. 06. 10
+	 */
+	Collection<SupplyCompany> getSupplyCompanyList(SupplyCompany supplyCompany);
+
 }

+ 25 - 0
src/main/java/com/style24/front/biz/service/TsfCommonService.java

@@ -1,5 +1,6 @@
 package com.style24.front.biz.service;
 
+import com.style24.persistence.domain.SupplyCompany;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
@@ -14,6 +15,8 @@ import com.style24.persistence.domain.Order;
 
 import lombok.extern.slf4j.Slf4j;
 
+import java.util.Collection;
+
 /**
  * 공통 Service
  *
@@ -121,4 +124,26 @@ public class TsfCommonService {
 		return commonDao.getSearchEngineSyncYn();
 	}
 
+	/**
+	 * 공급업체 총 건수
+	 *
+	 * @return int - 건수
+	 * @author jsshin
+	 * @since 2021. 06. 10
+	 */
+	public int getSupplyCompanyCount() {
+		return commonDao.getSupplyCompanyCount();
+	}
+
+	/**
+	 * 공급업체 목록
+	 *
+	 * @param supplyCompany - 페이징 정보
+	 * @return Collection<SupplyCompany> - 목록
+	 * @author jsshin
+	 * @since 2021. 06. 10
+	 */
+	public Collection<SupplyCompany> getSupplyCompanyList(SupplyCompany supplyCompany) {
+		return commonDao.getSupplyCompanyList(supplyCompany);
+	}
 }

+ 49 - 11
src/main/java/com/style24/front/biz/service/TsfCounselService.java

@@ -1,9 +1,11 @@
 package com.style24.front.biz.service;
 
+import java.io.File;
 import java.util.Collection;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -14,6 +16,8 @@ import com.style24.persistence.domain.Counsel;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.web.util.GagaDateUtil;
+import com.gagaframework.web.util.GagaFileUtil;
 import com.gagaframework.web.util.GagaStringUtil;
 
 /**
@@ -28,6 +32,9 @@ public class TsfCounselService {
 
 	@Autowired
 	private TsfCounselDao counselDao;
+	
+	@Autowired
+	private Environment env;
 
 	/**
 	 * 1:1문의 생성
@@ -42,20 +49,51 @@ public class TsfCounselService {
 		counsel.setCustNo(TsfSession.getInfo().getCustNo());
 		counsel.setCellPhnno(TsfSession.getInfo().getCellPhnno());
 		counsel.setEmail(TsfSession.getInfo().getEmail());
-
-		if (StringUtils.isNotBlank(counsel.getFile1SysFileNm())) {
-			counsel.setOrgFileNm1(counsel.getFile1OrgFileNm());
-			counsel.setSysFileNm1(counsel.getFile1SysFileNm());
-		}
-
-		if (StringUtils.isNotBlank(counsel.getFile2SysFileNm())) {
-			counsel.setOrgFileNm2(counsel.getFile2OrgFileNm());
-			counsel.setSysFileNm2(counsel.getFile2SysFileNm());
-		}
-
 		counsel.setRegNo(TsfSession.getInfo().getCustNo());
 		counsel.setUpdNo(TsfSession.getInfo().getCustNo());
 		counselDao.createOneToOneQna(counsel);
+		
+		if(counsel.getOrgFileNmArr() != null) {
+			int ind = 1;
+			String[] orgItem = counsel.getOrgFileNmArr();
+			String[] sysItem = counsel.getSysFileNmArr();
+			
+			for (int i = 0; i < orgItem.length; i++) {
+				String imgInd = String.valueOf(ind);
+				if (ind < 10) {
+					imgInd = "0" + imgInd;
+				}
+				String planUploadPath = env.getProperty("upload.default.target.path");
+				String yearMonth = GagaDateUtil.getToday().substring(0, 6);
+				planUploadPath = GagaFileUtil.getConcatenationPath(planUploadPath, "/counsel");
+				File newFile = new File(GagaFileUtil.getConcatenationPath(planUploadPath, sysItem[i]));
+				planUploadPath = GagaFileUtil.getConcatenationPath(planUploadPath, yearMonth);
+				String newFilename = "COUNSEL_" + GagaDateUtil.getTodayDateTime() + "_" + imgInd + "." + org.springframework.util.StringUtils.getFilenameExtension(sysItem[i]);
+				File uniqueFile = GagaFileUtil.getUniqueFile(new File(GagaFileUtil.getConcatenationPath(planUploadPath, newFilename)));
+				// Rename a file
+				File path = new File(planUploadPath);
+				if (!path.exists()) {
+					path.mkdir();
+				}
+				newFile.renameTo(uniqueFile);
+				
+				if (i == 0) {
+					counsel.setOrgFileNm1(orgItem[i]);
+					counsel.setSysFileNm1("/counsel/" + yearMonth + "/" + newFilename);
+				}else {
+					counsel.setOrgFileNm2(orgItem[i]);
+					counsel.setSysFileNm2("/counsel/" + yearMonth + "/" + newFilename);
+				}
+				
+				ind++;
+			}
+			
+			counselDao.updateOneToOneQna(counsel);
+		}
+		
+
+		
+		
 	}
 
 	/**

+ 37 - 3
src/main/java/com/style24/front/biz/web/TsfCustomerController.java

@@ -4,8 +4,12 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
 import com.style24.core.biz.service.TscMailService;
+import com.style24.front.biz.service.TsfCommonService;
 import com.style24.front.biz.service.TsfCouponService;
+import com.style24.persistence.TscPageRequest;
+import com.style24.persistence.domain.Clause;
 import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.SupplyCompany;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -67,6 +71,9 @@ public class TsfCustomerController extends TsfBaseController {
 	@Autowired
 	private Yes24Login yes24Login;
 
+	@Autowired
+	private TsfCommonService commonService;
+
 	/**
 	 * 아이디 찾기 화면
 	 *
@@ -842,7 +849,7 @@ public class TsfCustomerController extends TsfBaseController {
 		ModelAndView mav = new ModelAndView(super.getDeviceViewName("customer/PrivacyPolicyForm"));
 
 		mav.addObject("clause", clauseService.getClause(TscConstants.Site.STYLE24.value(), "G057_11"));
-
+		mav.addObject("clauseList", clauseService.getClauseList(TscConstants.Site.STYLE24.value(), "G057_11"));
 		return mav;
 	}
 
@@ -929,6 +936,12 @@ public class TsfCustomerController extends TsfBaseController {
 		return mav;
 	}
 
+	@GetMapping("/clause/info/{clauseSq}")
+	@ResponseBody
+	public Clause getClauseInfo(@PathVariable Integer clauseSq) {
+		return clauseService.getClauseInfo(clauseSq);
+	}
+
 	/**
 	 * 공급업체목록 화면
 	 *
@@ -937,12 +950,33 @@ public class TsfCustomerController extends TsfBaseController {
 	 * @since 2021. 04. 01
 	 */
 	@PostMapping("/supply/company/layer")
-	public ModelAndView getSupplyCompanyLayer() {
+	public ModelAndView getSupplyCompanyLayer(HttpServletRequest request) {
 		ModelAndView mav = new ModelAndView();
-		mav.setViewName(super.getDeviceViewName("customer/SupplyComanyLayerForm"));
+		mav.addObject("mallGb", request.getParameter("mallGb"));
+		mav.setViewName(super.getDeviceViewName("customer/SupplyCompanyLayerForm"));
 		return mav;
 	}
 
+	/**
+	 * 공급업체목록
+	 *
+	 * @param supplyCompany
+	 * @return GagaMap
+	 * @author jsshin
+	 * @since 2021. 06. 10
+	 */
+	@PostMapping("/supply/company/list")
+	@ResponseBody
+	public GagaMap getSupplyCompanyList(@RequestBody SupplyCompany supplyCompany) {
+		GagaMap result = new GagaMap();
+		TscPageRequest pageable = new TscPageRequest((supplyCompany.getPageNo() > 0 ? supplyCompany.getPageNo() - 1 : 0), supplyCompany.getPageSize(), supplyCompany.getPageUnit());
+		pageable.setTotalCount(commonService.getSupplyCompanyCount());
+		supplyCompany.setPageable(pageable);
+		result.set("supplyCompanyList",commonService.getSupplyCompanyList(supplyCompany));
+		result.set("paging", supplyCompany);
+		return result;
+	}
+
 	/**
 	 * 개인정보위탁 화면
 	 *

+ 2 - 2
src/main/java/com/style24/persistence/domain/Counsel.java

@@ -68,9 +68,9 @@ public class Counsel extends TscBaseDomain {
 	}
 	
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	private String[] fileOrgFileNm;
+	private String[] orgFileNmArr;
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	private String[] fileSysFileNm;
+	private String[] sysFileNmArr;
 
 
 	// Pagination

+ 27 - 0
src/main/java/com/style24/persistence/domain/SupplyCompany.java

@@ -0,0 +1,27 @@
+package com.style24.persistence.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.style24.persistence.TscBaseDomain;
+
+import com.style24.persistence.TscPageRequest;
+import lombok.Data;
+
+/**
+ * 공급업체 Domain
+ *
+ * @author gagamel
+ * @since 2020. 10. 7
+ */
+@SuppressWarnings("serial")
+@Data
+public class SupplyCompany extends TscBaseDomain {
+
+	private String supplyCompCd;		// 공급업체코드
+	private String supplyCompNm;		// 공급업체명
+	private String ownerNm;
+
+	private TscPageRequest pageable;
+	private int pageNo = 1;
+	private int pageSize = 10;
+	private int pageUnit = 5;
+}

+ 28 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfCommon.xml

@@ -87,5 +87,33 @@
 		WHERE  CD_GB = 'G085'
 		AND    CD = 'SEARCHSYNCYN'
 	</select>
+	
+	<select id="getSupplyCompanyCount" resultType="int">
+		/* TsfCommon.getSupplyCompanyCount */
+		SELECT COUNT(*) AS CNT
+		FROM   TB_SUPPLY_COMPANY SC
+		     , TB_SUPPLY_VENDOR SV
+		WHERE  SC.SUPPLY_VENDOR_CD = SV.SUPPLY_VENDOR_CD
+		AND    SC.USE_YN = 'Y'
+	</select>
+
+	<select id="getSupplyCompanyList" parameterType="SupplyCompany" resultType="SupplyCompany">
+		/* TsfCommon.getSupplyCompanyList */
+		SELECT SUPPLY_COMP_CD
+		     , SUPPLY_COMP_NM
+		     , OWNER_NM
+		     , NUMB
+		FROM (
+		      SELECT SC.SUPPLY_COMP_CD       /*공급업체코드*/
+		           , SC.SUPPLY_COMP_NM       /*공급업체명*/
+		           , SV.OWNER_NM             /*대표자명*/
+		           , ROW_NUMBER() OVER(ORDER BY SV.REG_DT DESC)   AS NUMB
+		      FROM   TB_SUPPLY_COMPANY SC
+		           , TB_SUPPLY_VENDOR SV
+		      WHERE  SC.SUPPLY_VENDOR_CD = SV.SUPPLY_VENDOR_CD
+		      AND    SC.USE_YN = 'Y'
+		) ORIGINAL
+		WHERE NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
+	</select>
 
 </mapper>

+ 1 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsfCounsel.xml

@@ -15,7 +15,7 @@
 	</sql>
 	
 	<!-- 1:1문의 생성 -->
-	<insert id="createOneToOneQna" parameterType="Counsel">
+	<insert id="createOneToOneQna" parameterType="Counsel" useGeneratedKeys="true" keyProperty="counselSq">
 		/* TsfCounsel.createOneToOneQna */
 		INSERT INTO TB_COUNSEL (
 		       COUNSEL_SQ

+ 1 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml

@@ -1117,7 +1117,7 @@
 	<!-- 브랜드 전체 조회 -->
 	<select id="getAllBrandList" parameterType="BrandGroup" resultType="BrandGroup">
 		/* TsfDisplay.getAllBrandList */
-		SELECT	Z.BRAND_GROUP_NO
+		SELECT	DISTINCT Z.BRAND_GROUP_NO
 		      , FN_GET_BRAND_INITIAL(Z.BRAND_GROUP_NM) AS BRAND_INITIAL
 		      , Z.BRAND_GROUP_NM
 		      , Z.DISP_NM_LANG

+ 5 - 13
src/main/webapp/WEB-INF/views/mob/callcenter/OneToOneQnaFormMob.html

@@ -150,17 +150,9 @@
 											<div class="input_wrap">
 												<!-- 이미지첨부 -->
 												<div class="form_field">
-													<div class="imgUpload">
-														<label for="fileAdd" class="fileAdd">업로드</label>
-														<input type="file" id="fileAdd" name="file1">
-														<input type="hidden" name="file1OrgFileNm"/>
-														<input type="hidden" name="file1SysFileNm"/>
-													</div>
 													<div class="imgUpload">
 														<label for="fileAdds" class="fileAdd">업로드</label>
 														<input type="file" id="fileAdds" name="file2">
-														<input type="hidden" name="file2OrgFileNm"/>
-														<input type="hidden" name="file2SysFileNm"/>
 													</div>
 												</div>
 												<!-- //이미지첨부 -->
@@ -329,14 +321,14 @@
 					if (!gagajf.isNull(item.sysFileNm1)) {
 						tag += '		<span class="thumb_pic">\n';
 // 						tag += '			<img src="' + _uploadImageUrl + '/counsel/' + item.sysFileNm1 + '" alt="" onerror="this.src=\'/image/bg_profile.png\'">\n';
-						tag += '			<img src="' + _uploadImageUrl + '/counsel/' + item.sysFileNm1 + '" alt="">\n';
+						tag += '			<img src="' + _uploadImageUrl + '/' + item.sysFileNm1 + '" alt="">\n';
 						tag += '		</span>\n';
 					}
 					
 					if (!gagajf.isNull(item.sysFileNm2)) {
 						tag += '		<span class="thumb_pic">\n';
 // 						tag += '			<img src="' + _uploadImageUrl + '/counsel/' + item.sysFileNm2 + '" alt="" onerror="this.src=\'/image/bg_profile.png\'">\n';
-						tag += '			<img src="' + _uploadImageUrl + '/counsel/' + item.sysFileNm2 + '" alt="">\n';
+						tag += '			<img src="' + _uploadImageUrl + '/' + item.sysFileNm2 + '" alt="">\n';
 						tag += '		</span>\n';
 					}
 					
@@ -462,8 +454,8 @@
 				, file
 				, function(result) {
 					// 업로드한 파일명 설정
-					$('input[name=' + obj.name + 'OrgFileNm]').val(result.oldFileName);
-					$('input[name=' + obj.name + 'SysFileNm]').val(result.newFileName);
+					$(".pics").children().last().append("<input type='hidden' name='orgFileNmArr' value='"+result.oldFileName+"'>");
+					$(".pics").children().last().append("<input type='hidden' name='sysFileNmArr' value='"+result.newFileName+"'>");
 				}
 		);
 	}
@@ -483,7 +475,7 @@
 						, function() {
 							cfnGoToPage(_PAGE_ONETOONE_QNA);
 						}
-				);
+				); 
 			}
 		});
 	});

+ 22 - 5
src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html

@@ -20,6 +20,9 @@
 
 	<!-- 장바구니 화면 -->
 	<form id="cartListForm" method="post" action="/order/noMember" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+		<input type="hidden" id="checkAbleCpnNm" value="N" />
+		<input type="hidden" id="ableCpnNm" value="" />
+
 		<div class="inner shotDelvSelect">
 			<div class="od_method">
 				<div class="tbl_tit">
@@ -178,7 +181,7 @@
 						</div>
 
 						<div class="goods_txt reserv" th:if="${!#strings.isEmpty(cart.delvResDt)}">
-							<span>예약배송 상품</span><span th:text="|${cart.delvResDt} 배송예정|"></span> 배송예정
+							<span>예약배송 상품</span><span th:text="|${cart.delvResDt} 배송예정|"></span>
 						</div>
 
 						<div class="goods_txt" th:if="${cart.ordCanYn.equals('N')}">
@@ -281,7 +284,7 @@
 						</div>
 
 						<div class="goods_txt reserv" th:if="${!#strings.isEmpty(cart.delvResDt)}">
-							<span>예약배송 상품</span><span th:text="|${cart.delvResDt} 배송예정|"></span> 배송예정
+							<span>예약배송 상품</span><span th:text="|${cart.delvResDt} 배송예정|"></span>
 						</div>
 
 						<div class="goods_txt" th:if="${cart.ordCanYn.equals('N')}">
@@ -340,7 +343,7 @@
 						<input type="hidden" name="cartSq"    th:value="${cart.cartSq}" />
 						<input type="hidden" name="orgSavePntAmt" th:value="${cart.orgSavePntAmt}" />
 
-						<button type="button" class="btn_delete"><span><em class="sr-only">상품삭제</em></span></button>
+						<button type="button" class="btn_delete" th:onclick="|deleteCart(${cart.cartSq}, 'cart')|"><span><em class="sr-only">상품삭제</em></span></button>
 						<div class="goods_detail">
 							<div class="form_field">
 								<input th:id="|od_item_${cart.cartSq}|" name="cartSqArr" type="checkbox" th:value="${cart.cartSq}"
@@ -404,7 +407,7 @@
 						</div>
 
 						<div class="goods_txt reserv" th:if="${!#strings.isEmpty(cart.delvResDt)}">
-							<span>예약배송 상품</span><span th:text="|${cart.delvResDt} 배송예정|"></span> 배송예정
+							<span>예약배송 상품</span><span th:text="|${cart.delvResDt} 배송예정|"></span>
 						</div>
 
 						<div class="goods_txt" th:if="${cart.ordCanYn.equals('N')}">
@@ -739,6 +742,7 @@
 			function serialCpnApply() {
 				let cartArr = [];
 				let currPrices = [];
+				let rdCpnNm = $("#cartListForm #serialCpnNm").val();
 
 				if(!$("#serialCpnNm").val()) {
 					mcxDialog.alert("할인코드를 입력해주세요.");
@@ -833,7 +837,12 @@
 							if(cpnInfo.downloadCnt > 0) {
 								mcxDialog.alert("성공적으로 등록되었습니다.");
 							}
+
+							$("#cartListForm #checkAbleCpnNm").val("Y");
+							$("#cartListForm #ableCpnNm").val(rdCpnNm);
 						} else {
+							$("#cartListForm #checkAbleCpnNm").val("N");
+							$("#cartListForm #ableCpnNm").val("");
 							mcxDialog.alert(result.serialCpnInfo.result);
 						}
 					}
@@ -961,6 +970,7 @@
 						$(".selfGoodsDelv").html("<span class='dlvr_fee delvFeeArea'>배송비 무료</span>");
 					} else {
 						let html = "<span class='dlvr_fee delvFeeArea'>배송비 <em>" + Number(order.wmsDelvFee).toLocaleString() + "</em> 원</span><span>STYLE24  배송</span>";
+						$(".selfGoodsDelv").parent().find(".goods_dlvr_save a").attr("href", "javascript:fnGetDelvFeeSaveGoods('WMS', '" + (order.minOrdAmt - order.compSumPrice) + "');")
 						$(".selfGoodsDelv").parent().find(".goods_dlvr_save").show();
 						$(".selfGoodsDelv").html(html);
 					}
@@ -994,6 +1004,7 @@
 								$(".delvList").find(".delv_" + delv.delvFeeCd).html("<span class='dlvr_fee delvFeeArea'>배송비 무료</span><span class='dlvr_fee'><em>" + delv.supplyCompNm + "</em> 업체직배송</span>");
 							} else {
 								let html = "<span class='dlvr_fee delvFeeArea'>배송비 <em>" + Number(delv.delvFee).toLocaleString() + "</em>원</span><span class='dlvr_shop'><em>" + delv.supplyCompNm + "</em> 업체직배송</span>";
+								$(".delvList").find(".delv_" + delv.delvFeeCd).parent().find(".goods_dlvr_save a").attr("href", "javascript:fnGetDelvFeeSaveGoods('" + delv.delvFeeCd + "','" + (delv.minOrdAmt - delv.compSumPrice) +  "');")
 								$(".delvList").find(".delv_" + delv.delvFeeCd).parent().find(".goods_dlvr_save").show();
 								$(".delvList").find(".delv_" + delv.delvFeeCd).html(html);
 							}
@@ -1014,7 +1025,13 @@
 
 				// 할인코드 쿠폰 금액 재확인
 				if($("#cartListForm #serialCpnNm").val()) {
-					serialCpnApply();
+					if($("#cartListForm #checkAbleCpnNm").val() == "Y" && $("#cartListForm #ableCpnNm").val() == $("#cartListForm #serialCpnNm").val()) {
+						serialCpnApply();
+					} else {
+						$("#cartListForm .totDcAmt").text(Number(totDcAmt).toLocaleString());
+						$("#cartListForm .sumRealPayAmt").text(Number(sumRealPayAmt).toLocaleString());
+						cancelCartCpn();
+					}
 				} else {
 					$("#cartListForm .totDcAmt").text(Number(totDcAmt).toLocaleString());
 					$("#cartListForm .sumRealPayAmt").text(Number(sumRealPayAmt).toLocaleString());

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/customer/PrivacyPolicyLayerFormMob.html

@@ -32,7 +32,7 @@
 </div>
 <script th:inline="javascript">
 /*<![CDATA[*/
-	$("#partners").click(function() {
+	$("#partners").on('click', function() {
 		cfnSupplyComanyLayer();
 	});
 	//약관내부링크

+ 40 - 50
src/main/webapp/WEB-INF/views/mob/customer/SupplyComanyLayerFormMob.html → src/main/webapp/WEB-INF/views/mob/customer/SupplyCompanyLayerFormMob.html

@@ -3,7 +3,7 @@
 	  xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : SupplyComanyLayerFormMob.html
+ * @source  : SupplyCompanyLayerFormMob.html
  * @desc    : 공급업체 리스트 page
  *============================================================================
  * STYLE24
@@ -22,7 +22,7 @@
 		<div class="modal-body">
 			<div class="pop_cont">
 				<!-- 컨텐츠 시작 -->
-				<div class="ps ptn">
+				<div class="ps ptn" >
 					<table>
 						<colgroup>
 							<col width="*">
@@ -34,55 +34,11 @@
 								<th>대표자</th>
 							</tr>
 						</thead>
-						<tbody>
-							<tr>
-								<td>(enercircle)이너서클</td>
-								<td>최인석</td>
-							</tr>
-							<tr>
-								<td>(유)결피부과학연구소</td>
-								<td>이종주</td>
-							</tr>
-							<tr>
-								<td>(유)결피부과학연구소(중복)</td>
-								<td>이종주</td>
-							</tr>
-							<tr>
-								<td>(재)아름다운커피</td>
-								<td>심상달</td>
-							</tr>
-							<tr>
-								<td>(주)CJ오쇼핑</td>
-								<td>이해선</td>
-							</tr>
-							<tr>
-								<td>(주)IDSDK</td>
-								<td>유정현</td>
-							</tr>
-							<tr>
-								<td>(주)L&D코리아</td>
-								<td>심홍섭</td>
-							</tr>
-							<tr>
-								<td>(주)M.O.V</td>
-								<td>김맹규</td>
-							</tr>
-							<tr>
-								<td>(유)결피부과학연구소(중복)</td>
-								<td>이종주</td>
-							</tr>
-							<tr>
-								<td>(enercircle)이너서클</td>
-								<td>최인석</td>
-							</tr>
+						<tbody id="supplyCompanyList">
 						</tbody>
 					</table>
-					<div class="pager">
-						<ul class="pageNav">
-							<li class="prev disabled"><a href="#">‹</a></li>
-							<li class="active"><a href="#">02</a></li>
-							<li class="lastpage"><a href="#">10</a></li>
-							<li class="next"><a href="#">›</a></li>
+					<div class="paging_wrap">
+						<ul class="pageNav" id="paging">
 						</ul>
 					</div>
 				</div>
@@ -91,10 +47,44 @@
 		</div>
 	</div>
 </div>
+<form id="supplyCompanyForm" name="supplyCompanyForm" th:action="@{/customer/supply/company/list}" th:method="post">
+	<input type="hidden" name="pageNo" value="1" />
+	<input type="hidden" name="pageSize" value="10" />
+</form>
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
+	var mallGb = [[${mallGb}]];
+	var fnGetSupplyCompanyList = function () {
+		gagaPaging.init('supplyCompanyForm', fnSearchCallback, 'paging', 10);
+		gagaPaging.load(1);
+	}
+
+	var fnSearchCallback = function (result) {
+		$('#supplyCompanyList').html('');
+		let html = '';
+		if (!gagajf.isNull(result) && result.supplyCompanyList.length > 0) {
+			$.each(result.supplyCompanyList, function (idx, item) {
+				html += '<tr>\n';
+				html += '    <td>\n';
+				html += item.supplyCompNm;
+				html += '    </td>\n';
+				html += '    <td>\n';
+				html += item.ownerNm;
+				html += '    </td>\n';
+				html += '</tr>\n';
+			});
+		}
+		$('#supplyCompanyList').html(html);
+
+		gagaPaging.createSinglePagination(result.paging.pageable);
+	}
+
 	$(document).ready(function() {
-		$("#supplyCompanyPop").modal({closeExisting: false});
+		fnGetSupplyCompanyList();
+		$('#supplyCompanyPop .close-modal').on('click', function () {
+			cfnPrivacyPolicyLayer(mallGb);
+		});
 	});
 
 	//약관내부링크

+ 13 - 2
src/main/webapp/WEB-INF/views/mob/display/CategoryMainFormMob.html

@@ -61,7 +61,7 @@
 				</th:block>
 
 				<th:block th:if="${contentsLoc=='002'}">
-					<div class="inner wide" th:if="${newGoodsList != null}">
+					<div class="inner wide" th:if="${newGoodsList != null and !newGoodsList.empty}">
 						<div class="new_item">
 							<h2 class="dp_subtitle" th:text="${contentsTitle}">신상품</h2>
 							<div class="swiper-container item_list">
@@ -93,7 +93,7 @@
 				</th:block>
 
 				<th:block th:if="${contentsLoc=='003'}">
-					<div class="inner" th:if="${bestGoodsList != null}">
+					<div class="inner" th:if="${bestGoodsList != null and !bestGoodsList.empty}">
 						<div class="best_item">
 							<h2 class="dp_subtitle" th:text="${contentsTitle}">베스트 상품</h2>
 							<div class="item_list">
@@ -115,6 +115,17 @@
 												<p class="itemPrice"><span class="itemPrice_original" th:if="${item.currPrice != item.listPrice}" th:text="${#numbers.formatInteger(item.listPrice,3,'COMMA')}">89,000</span>[[${#numbers.formatInteger(item.currPrice,1,'COMMA')}]]
 													<span class=" itemPercent" th:if="${item.currPrice != item.listPrice}" th:text="${(item.listPrice == 0 ? 0 : #numbers.formatDecimal((item.listPrice - item.currPrice) / (item.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
 												</p>
+												<div class="itemcolorchip">
+													<th:block th:each="option, idx : ${item.colorArr}" th:with="colorArray=${#strings.arraySplit(idx.current,':')}">
+														<span th:if="${colorArray[1]=='#FFFFFF'}" th:style="${'background-color:'+colorArray[1]+';border:1px solid #aaa;'}" class="chip_color" th:value="${colorArray[0]}"></span>
+														<span th:if="${colorArray[1]!='#FFFFFF'}" th:style="${'background-color:'+colorArray[1]+';'}" class="chip_color" th:value="${colorArray[0]}"></span>
+													</th:block>
+												</div>
+												<p class="itemBadge">
+													<th:block th:each="option, idx : ${item.benefitArr}" th:with="iconArray=${#strings.arraySplit(idx.current,':')}" >
+														<span class="badge13" th:if="${idx.index<3}" th:value="${iconArray[0]}" th:text="${iconArray[1]}"></span>
+													</th:block>
+												</p>
 												<div class="itemComment" th:if="${not #strings.isEmpty(item.goodsTnm)}" th:text="${item.goodsTnm}">#주문 폭주 상품</div>
 											</a>
 										</div>

+ 44 - 22
src/main/webapp/WEB-INF/views/mob/display/LookbookDetailFormMob.html

@@ -315,8 +315,8 @@
 	}
 
 	$(document).ready(function(){
-		//setHtop();
-
+		setHtop();
+		more_br();
 		var spc = $('.swiper-pagination-current');
 		var spt = $('.swiper-pagination-total');
 		setInterval(function(){
@@ -356,6 +356,38 @@
 		}
 	}
 
+	// 210609_ 추가 : '더보기' 노출관련 (show/hide, 토글)
+	// 더보기 show/hide
+	function more_br(){
+		var desc_br = $('.lb_text .active').height();
+		if (desc_br < 50) {
+			$('.lb_text .active').css({"height": "auto"});
+			$('.lb_text .btn').css({"display": "none"});
+			return 0;
+		}else{
+			$('.lb_text .active').css({"height": "3.4rem"});
+			$('.lb_text .btn').css({"display": "inline-block"});
+		};
+	};
+	// 더보기 토글
+	var count = 0;
+	function view_fold(){
+		document.querySelector(".lb_text button").onclick = function () {
+			if(count === 0) {
+				$('.lb_text .active').css('height', 'auto');
+				document.querySelector(".lb_text .btn p").innerText="접기";
+				document.querySelector(".lb_text .btn span").style.background="url(/images/mo/br_arrow_up.png)";
+				count = 1;
+			} else {
+				$('.lb_text .active').css('height', '3.4rem');
+				document.querySelector(".lb_text .btn p").innerText="더보기";
+				document.querySelector(".lb_text .btn span").style.background="url(/images/mo/br_arrow_down.png)";
+				count = 0;
+			}
+		}
+	};
+	view_fold();
+
 	// 룩북 슬라이드
 	var rcmdPicimgSwiper = new Swiper('.recommendedArea .area_slider .swiper-container', {
 		loop: true,
@@ -371,7 +403,7 @@
 		//},
 		on: {
 			slideChange:function(){
-				// 05.06_ 추가 : .ioTit , .ioBtn
+				// 210506_ 추가 : .ioTit , .ioBtn
 				$('.text_cont').removeClass('active');
 				$('.ioTit').removeClass('active');
 				$('.itemsOut').removeClass('active');
@@ -380,6 +412,9 @@
 				$('.ioTit').eq(this.realIndex).addClass('active');
 				$('.itemsOut').eq(this.realIndex).addClass('active');
 				$('.ioBtn').eq(this.realIndex).addClass('active');
+				// 210609_ 추가 : '더보기' 노출관련
+				$('.text_cont').removeAttr("style");
+				more_br();
 			}
 		},
 	});
@@ -406,26 +441,13 @@
 		//},
 	});
 
-	// 더보기
-	var count = 0;
-	function view_fold(){
-		document.querySelector(".lb_text button").onclick = function () {
-			if(count === 0) {
-				//document.querySelector(".lb_text .text_cont").style.height = "auto";
-				$('.lb_text .text_cont').css('height', 'auto');
-				document.querySelector(".lb_text .btnText p").innerText="접기";
-				document.querySelector(".lb_text .btnText span").style.background="url(/images/mo/br_arrow_up.png)";
-				count = 1;
-			} else {
-				//document.querySelector(".lb_text .text_cont").style.height = "3.4rem";
-				$('.lb_text .text_cont').css('height', '3.4rem');
-				document.querySelector(".lb_text .btnText p").innerText="더보기";
-				document.querySelector(".lb_text .btnText span").style.background="url(/images/mo/br_arrow_down.png)";
-				count = 0;
-			}
-		}
+	//210527_ 추가 : #htopSub 서브헤더와 페이지 키클래스 .br을 가지고 있을 시 여백 조정.
+	if($('#htopSub').length && $('main').hasClass('br')){
+		$('section.br_lookbook').css('marginTop','5.5rem');
+	}else{
+		$('section.br_lookbook').css('marginTop','11rem');
 	}
-	view_fold();
+
 	/*]]>*/
 </script>
 

+ 37 - 36
src/main/webapp/WEB-INF/views/mob/display/MallMainFormMob.html

@@ -93,7 +93,7 @@
 
 					<th:block th:if="${contentsLoc=='003'}">
 						<!-- 3. 트렌디한 신상아이템 -->
-						<div class="inner" th:if="${mainData.goodsList != null}">
+						<div class="inner" th:if="${mainData.goodsList != null and !mainData.goodsList.empty}">
 							<div class="main_trendy">
 								<th:block th:if="${mainData.contentsTitle != null and !mainData.contentsTitle.empty}">
 									<div class="titWrap">
@@ -143,11 +143,9 @@
 						<div class="inner">
 							<div class="main_it">
 								<div class="titWrap">
-									<th:block th:each="ContentsData, ContentsStat : ${mainData.ContentsList}">
-										<a href="javascript:void(0)" th:onclick="cfnGoToPage([[${ContentsData.strVar1}]]);">
-											<h2 th:text="${contentsTitle}"></h2>
-										</a>
-									</th:block>
+									<a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_BEST_MAIN);">
+										<h2 th:text="${contentsTitle}"></h2>
+									</a>
 								</div>
 								<div class="inner_head">
 									<ul class="it_nav">
@@ -240,7 +238,7 @@
 					<th:block th:if="${contentsLoc=='006'}">
 						<!-- 6. 타임딜 : 슬라이드 -->
 						<th:block th:each="socialData, socialStat : ${mainData.socialInfo}">
-						<div class="inner bg_dark" th:if="${socialData.socialGoodsList != null}">
+						<div class="inner bg_dark" th:if="${socialData.socialGoodsList != null and !socialData.socialGoodsList.empty}">
 							<div class="main_deal">
 								<div class="titWrap">
 									<a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_SOCIAL_MAIN);">
@@ -293,7 +291,7 @@
 
 					<th:block th:if="${contentsLoc=='007'}">
 						<!-- 7. 브랜드픽 -->
-						<div class="inner" th:if="${mainData.ContentsList != null}">
+						<div class="inner" th:if="${mainData.ContentsList != null and !mainData.ContentsList.empty}">
 							<div class="main_pick" >
 								<div class="titWrap">
 									<h2 th:text="${contentsTitle}"></h2>
@@ -368,7 +366,7 @@
 
 					<th:block th:if="${contentsLoc=='008'}">
 						<!-- 8. 가로 긴 배너 슬라이드 -->
-						<div class="inner wide">
+						<div class="inner wide" th:if="${mainData.ContentsList != null and !mainData.ContentsList.empty}">
 							<div class="main_1stage">
 								<div class="swiper-container post-bnnWide">
 									<div class="swiper-wrapper">
@@ -399,7 +397,7 @@
 
 					<th:block th:if="${contentsLoc=='009'}">
 						<!-- 9. MD추천 스타일 -->
-						<div class="inner">
+						<div class="inner" th:if="${mainData.mdPickList != null and !mainData.mdPickList.empty}">
 							<div class="main_recomm">
 								<div class="titWrap">
 									<h2 th:text="${contentsTitle}">MD가 추천하는 스타일</h2>
@@ -723,7 +721,7 @@
 
 					<th:block th:if="${contentsLoc=='011'}">
 						<!-- 11. TV 슬라이드 -->
-						<div class="inner wide bg_dark" th:if="${mainData.ContentsList != null}">
+						<div class="inner wide bg_dark" th:if="${mainData.ContentsList != null and !mainData.ContentsList.empty}">
 							<div class="titWrap">
 								<h2 data-style="unusual" th:text="${mainData.contentsTitle}">STYLE24 TV</h2>
 							</div>
@@ -755,42 +753,45 @@
 		var mainLayoutList = [[${mainLayoutList}]];
 		// console.log(mainLayoutList);
 
-		var targetTime = $("#socailForm").find("input[name=targetTime]").val().toDate("YYYYMMDD");
-		if(targetTime != null && targetTime != ''){
-			/* 핫딜 countDown */
-			var endTime = new Date(targetTime); // 남은시간 지정
-			endTime = (Date.parse(endTime) / 1000);
+		if(!gagajf.isNull($("#socailForm").find("input[name=targetTime]").val())){
+			var targetTime = $("#socailForm").find("input[name=targetTime]").val().toDate("YYYYMMDD");
+			if(targetTime != null && targetTime != ''){
+				/* 핫딜 countDown */
+				var endTime = new Date(targetTime); // 남은시간 지정
+				endTime = (Date.parse(endTime) / 1000);
 
-			var countdown = document.getElementById("tiles"); // get tag element
+				var countdown = document.getElementById("tiles"); // get tag element
 
-			getCountdown();
+				getCountdown();
 
-			setInterval(function () { getCountdown(); }, 1000);
+				setInterval(function () { getCountdown(); }, 1000);
 
-			function getCountdown(){
-				// find the amount of "seconds" between now and target
-				var now = new Date();
-				now = (Date.parse(now) / 1000);
+				function getCountdown(){
+					// find the amount of "seconds" between now and target
+					var now = new Date();
+					now = (Date.parse(now) / 1000);
 
-				var timeLeft = endTime - now;
+					var timeLeft = endTime - now;
 
-				var days = Math.floor(timeLeft / 86400);
-				var hours = Math.floor((timeLeft - (days * 86400)) / 3600);
-				var minutes = Math.floor((timeLeft - (days * 86400) - (hours * 3600 )) / 60);
-				var seconds = Math.floor((timeLeft - (days * 86400) - (hours * 3600) - (minutes * 60)));
+					var days = Math.floor(timeLeft / 86400);
+					var hours = Math.floor((timeLeft - (days * 86400)) / 3600);
+					var minutes = Math.floor((timeLeft - (days * 86400) - (hours * 3600 )) / 60);
+					var seconds = Math.floor((timeLeft - (days * 86400) - (hours * 3600) - (minutes * 60)));
 
-				if (hours < '10') { hours = '0' + hours; }
-				if (minutes < '10') { minutes = '0' + minutes; }
-				if (seconds < '10') { seconds = '0' + seconds; }
+					if (hours < '10') { hours = '0' + hours; }
+					if (minutes < '10') { minutes = '0' + minutes; }
+					if (seconds < '10') { seconds = '0' + seconds; }
 
-				// format countdown string + set tag value
-				countdown.innerHTML = "<span>" + hours + "</span><span>" + minutes + "</span><span>" + seconds + "</span>";
-			}
+					// format countdown string + set tag value
+					countdown.innerHTML = "<span>" + hours + "</span><span>" + minutes + "</span><span>" + seconds + "</span>";
+				}
 
-			function pad(n) {
-				return (n < 10 ? '0' : '') + n;
+				function pad(n) {
+					return (n < 10 ? '0' : '') + n;
+				}
 			}
 		}
+
 		// 컨텐츠 호출
 		$(document).ready(function() {
 			// 몰메인 띠배너 표출

+ 3 - 3
src/main/webapp/WEB-INF/views/mob/display/OutletMainFormMob.html

@@ -32,7 +32,7 @@
 											<div class="img">
 												<img th:src="${@environment.getProperty('domain.image') + item.imgPath2}" alt="">
 											</div>
-											<div class="txtWrap">
+											<div class="txtWrap" th:classAppend="${(item.strVar7 == 'BLACK') ? '' :'w'}">
 												<p class="subject">
 													<input type="hidden" name="mainTitle" th:value="${item.strTitle1}"/>
 												</p>
@@ -55,7 +55,7 @@
 				</th:block>
 
 				<th:block th:if="${contentsLoc=='002'}">
-					<div class="inner wide" th:if="${mdPickGoodsList != null}">
+					<div class="inner wide" th:if="${mdPickGoodsList != null and !mdPickGoodsList.empty}">
 						<div class="md_item">
 							<h2 class="dp_subtitle" th:text="${contentsTitle}">MD가 추천하는 아울렛 아이템</h2>
 							<div class="swiper-container item_list">
@@ -91,7 +91,7 @@
 				</th:block>
 
 				<th:block th:if="${contentsLoc=='003'}">
-					<div class="inner" th:if="${bestGoodsList != null}">
+					<div class="inner" th:if="${bestGoodsList != null and !bestGoodsList.empty}">
 						<div class="best_item">
 							<h2 class="dp_subtitle" th:text="${contentsTitle}">베스트 상품</h2>
 							<div class="item_list">

+ 3 - 3
src/main/webapp/WEB-INF/views/mob/planning/PlanningReplyPhotoFormMob.html

@@ -36,7 +36,7 @@
 					<div class="swiper-pagination"></div>
 				</div>
 				<div class="pop_detail">
-					<button class="pop_open_btn" onclick="togglePopOpen()"><span class="sr-only"></span>
+					<button class="pop_open_btn"><span class="sr-only"></span>
 					</button>
 					<!-- 210414_추가 : comment_wrap 태그 추가. -->
 					
@@ -63,14 +63,14 @@
 	$(document).ready( function() {
 		
 		/* 210414_추가 : swiper fraction 숫자 1자리수 일때 앞에 0 스크립트 추가 */
-		var togglePopOpen = function() {
+	/* 	var togglePopOpen = function() {
 			if ($('.pop_detail').hasClass('active')) {
 				$('.pop_detail').removeClass('active');
 			}else{
 				$('.pop_detail').addClass('active');
 			}
 			
-		};
+		}; */
 		
 		let replyAttchSq = 0; 
 		if (!gagajf.isNull( [[${plan.attachSq}]])){

+ 2 - 2
src/main/webapp/WEB-INF/views/web/callcenter/OneToOneQnaFormWeb.html

@@ -199,13 +199,13 @@
 					
 					if (!gagajf.isNull(item.sysFileNm1)) {
 						tag += '					<span class="thumb_pic">\n';
-						tag += '						<img src="' + _uploadImageUrl + '/counsel/' + item.sysFileNm1 + '" alt="" onerror="this.src=\'/images/pc/thumb/bg_item_none.png\'">\n';
+						tag += '						<img src="' + _uploadImageUrl + '/' + item.sysFileNm1 + '" alt="" onerror="this.src=\'/images/pc/thumb/bg_item_none.png\'">\n';
 						tag += '					</span>\n';
 					}
 					
 					if (!gagajf.isNull(item.sysFileNm2)) {
 						tag += '					<span class="thumb_pic">\n';
-						tag += '						<img src="' + _uploadImageUrl + '/counsel/' + item.sysFileNm2 + '" alt="" onerror="this.src=\'/images/pc/thumb/bg_item_none.png\'">\n';
+						tag += '						<img src="' + _uploadImageUrl + '/' + item.sysFileNm2 + '" alt="" onerror="this.src=\'/images/pc/thumb/bg_item_none.png\'">\n';
 						tag += '					</span>\n';
 					}
 					

+ 6 - 6
src/main/webapp/WEB-INF/views/web/callcenter/OneToOneQnaRegisterFormWeb.html

@@ -84,14 +84,14 @@
 													<div class="imgUpload">
 														<label for="fileAdd" class="fileAdd">첫번째업로드</label>
 														<input type="file" id="fileAdd" name="file1"/>
-														<input type="hidden" name="file1OrgFileNm"/>
-														<input type="hidden" name="file1SysFileNm"/>
+														<input type="hidden" name="orgFileNmArr" id="file1OrgFileNm"/>
+														<input type="hidden" name="sysFileNmArr" id="file1SysFileNm"/>
 													</div>
 													<div class="imgUpload">
 														<label for="fileAdds" class="fileAdd">두번째업로드</label>
 														<input type="file" id="fileAdds" name="file2"/>
-														<input type="hidden" name="file2OrgFileNm"/>
-														<input type="hidden" name="file2SysFileNm"/>
+														<input type="hidden" name="orgFileNmArr" id="file2OrgFileNm"/>
+														<input type="hidden" name="sysFileNmArr" id="file2SysFileNm"/>
 													</div>
 												</div>
 												<!-- //이미지첨부 -->
@@ -185,8 +185,8 @@
 				, file
 				, function(result) {
 					// 업로드한 파일명 설정
-					$('input[name=' + obj.name + 'OrgFileNm]').val(result.oldFileName);
-					$('input[name=' + obj.name + 'SysFileNm]').val(result.newFileName);
+					$('input[id=' + obj.name + 'OrgFileNm]').val(result.oldFileName);
+					$('input[id=' + obj.name + 'SysFileNm]').val(result.newFileName);
 				}
 		);
 	}

+ 15 - 1
src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html

@@ -16,6 +16,8 @@
 <div id="cartAjaxArea">
 	<form id="cartListForm" method="post" action="/order/noMember" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 		<!--<input type="hidden" name="cartCpnDcAmt" id="cartCpnDcAmt" th:value="${param.cartCpnDcAmt}" />-->
+		<input type="hidden" id="checkAbleCpnNm" value="N" />
+		<input type="hidden" id="ableCpnNm" value="" />
 
 		<!-- CONT-BODY -->
 		<div class="od_cont">
@@ -707,6 +709,7 @@
 		function serialCpnApply() {
 			let cartArr = [];
 			let currPrices = [];
+			let rdCpnNm = $("#cartListForm #serialCpnNm").val();
 
 			if(!$("#serialCpnNm").val()) {
 				mcxDialog.alert("할인코드를 입력해주세요.");
@@ -805,7 +808,12 @@
 						if(cpnInfo.downloadCnt > 0) {
 							mcxDialog.alert("성공적으로 등록되었습니다.");
 						}
+
+						$("#cartListForm #checkAbleCpnNm").val("Y");
+						$("#cartListForm #ableCpnNm").val(rdCpnNm);
 					} else {
+						$("#cartListForm #checkAbleCpnNm").val("N");
+						$("#cartListForm #ableCpnNm").val("");
 						mcxDialog.alert(result.serialCpnInfo.result);
 					}
 				}
@@ -987,7 +995,13 @@
 
 			// 할인코드 쿠폰 금액 재확인
 			if($("#cartListForm #serialCpnNm").val()) {
-				serialCpnApply();
+				if($("#cartListForm #checkAbleCpnNm").val() == "Y" && $("#cartListForm #ableCpnNm").val() == $("#cartListForm #serialCpnNm").val()) {
+					serialCpnApply();
+				} else {
+					$("#cartListForm .totDcAmt").text(Number(order.totDcAmt).toLocaleString());
+					$("#cartListForm .sumRealPayAmt").text(Number(order.sumRealPayAmt + order.totDelvFee).toLocaleString());
+					cancelCartCpn();
+				}
 			} else {
 				$("#cartListForm .totDcAmt").text(Number(order.totDcAmt).toLocaleString());
 				$("#cartListForm .sumRealPayAmt").text(Number(order.sumRealPayAmt + order.totDelvFee).toLocaleString());

+ 51 - 238
src/main/webapp/WEB-INF/views/web/customer/PrivacyPolicyFormWeb.html

@@ -35,252 +35,50 @@
 				</div>
 			</div>
 			<div class="cont_body" th:utext="${#strings.replace(#strings.replace(clause,'&amplt;','<'),'&ampgt;','>')}">
-				<!-- <p>
-                        아이스타일이십사 주식회사에서 운영하는 www.istyle24.com은 고객님의 개인정보를 소중히 여기며, 안전한 거래를 위해 관련법령의 규정을 반영하여 준수하고 있습니다.
-                    </p>                    
-                    <div class="hookGrp">
-                        <div class="hook_list">
-                            <ul>
-                                <li>
-                                    <a href="#prvc1"><span>제1조 개인정보의 수집, 이용목적</span></a>
-                                    <a href="#prvc2"><span>제2조 정의</span></a>
-                                    <a href="#prvc3"><span>제3조 약관 등의 명시와 설명 및 개정</span></a>
-                                    <a href="#prvc4"><span>제4조 서비스의 제공 및 변경</span></a>
-                                    <a href="#prvc5"><span>제5조 서비스의 중단</span></a>
-                                    <a href="#prvc6"><span>제6조 회원가입</span></a>
-                                    <a href="#prvc7"><span>제7조 회원 탈퇴 및 자격 상실 등</span></a>
-                                    <a href="#prvc8"><span>제8조 회원에 대한 통지</span></a>
-                                </li>
-                                <li>
-                                    <a href="#prvc9"><span>제9조 구매신청</span></a>
-                                    <a href="#prvc10"><span>제10조 계약의 성립</span></a>
-                                    <a href="#prvc11"><span>제 11조</span></a>
-                                    <a href="#prvc12"><span>제 12조</span></a>
-                                    <a href="#prvc13"><span>제 13조</span></a>
-                                    <a href="#prvc14"><span>제 14조</span></a>
-                                    <a href="#prvc15"><span>제 15조</span></a>
-                                    <a href="#prvc16"><span>제 16조</span></a>
-                                </li>
-                                <li>
-                                    <a href="#prvc17"><span>제 17조</a>
-                                    <a href="#prvc18"><span>제 18조</span></a>
-                                    <a href="#prvc19"><span>제 19조</span></a>
-                                    <a href="#prvc20"><span>제 20조</span></a>
-                                    <a href="#prvc21"><span>제 21조</span></a>
-                                    <a href="#prvc22"><span>제 22조</span></a>
-                                    <a href="#prvc23"><span>제 23조</span></a>
-                                    <a href="#prvc24"><span>제24조 재판권 및 준거법</span></a>
-                                </li>
-                            </ul>
-                            
-                        </div>
-                        <div class="hook_cont"> 
-                            <div id="prvc1">
-                                <h4><span>제1조 개인정보의 수집, 이용목적</span></h4>
-                                <p>
-                                    이 약관은 아이스타일이십사 주식회사가 운영하는 www.istyle24.com(이하 "몰"이라 한다)에서 제공하는 인터넷 관련 서비스 (이하 "서비스"라 한다)를 이용함에 있어 사이버 몰과 이용자의
-                                    권리, 의무 및 책임사항을 규정함을 목적으로 합니다.
-                                </p>
-                                <table>
-                                    <colgroup>
-                                        <col width="300">
-                                        <col width="*">
-                                    </colgroup>   
-                                    <thead>
-                                        <tr>
-                                            <th>구분</th>
-                                            <th>이용목적</th>
-                                        </tr>
-                                    </thead>
-                                    <tbody>
-                                        <tr>
-                                            <td rowspan="5">회원관리</td>
-                                            <td>회원제 서비스 이용에 따른 본인확인, 개인식별</td>
-                                        </tr>
-                                        <tr>
-                                            <td>불량회원의 부정이용 방지와 비인가 사용 방지, 중복가입방지</td>
-                                        </tr>
-                                        <tr>
-                                            <td></td>
-                                        </tr>
-                                        <tr>
-                                            <td></td>
-                                        </tr>
-                                        <tr>
-                                            <td></td>
-                                        </tr>
-                                        <tr>
-                                            <td rowspan="3">서비스 제공에 관한 계약의 이행 및 서비스 제공에 따른 요금정산</td>
-                                            <td>콘텐츠 제공, 이벤트 당첨 결과안내 및 경품배송</td>
-                                        </tr>
-                                        <tr>
-                                            <td>금융거래 본인 인증 및 금융 서비스</td>
-                                        </tr>
-                                        <tr>
-                                            <td>물품 배송, 구매 및 요금 결제</td>
-                                        </tr>
-                                        <tr>
-                                            <td rowspan="7">마케팅 광고에 활용</td>
-                                            <td></td>
-                                        </tr>
-                                        <tr>
-                                            <td></td>
-                                        </tr>
-                                        <tr>
-                                            <td></td>
-                                        </tr>
-                                        <tr>
-                                            <td></td>
-                                        </tr>
-                                        <tr>
-                                            <td></td>
-                                        </tr>
-                                        <tr>
-                                            <td></td>
-                                        </tr>
-                                        <tr>
-                                            <td></td>
-                                        </tr>
-                                    </tbody>
-                                </table>
-                            </div>
-                            <div id="prvc2">
-                                <h4><span>제2조 정의</span></h4>
-                                <p>1. “몰”이란 아이스타일24가 재화 또는 용역(이하 “재화 등”이라 함)을 이용자에게 제공하기 위하여 컴퓨터 등 정보통신설비를 이용하여 재화 등을 거래할 수 있도록 설정한 가상의 영업장을 말하며, 아울러 사이버몰을 운영하는 사업자의 의미로도 사용합니다.</p>
-                                <p>2. '이용자'란 "몰"에 접속하여 이 약관에 따라 "몰"이 제공하는 서비스를 받는 회원 및 비회원을 말합니다.</p>
-                                <p>3. '회원'이라 함은 "몰"에 개인정보를 제공하여 회원등록을 한 자로서, "몰"의 정보를 지속적으로 제공받으며, "몰"이 제공하는 서비스를 계속적으로 이용할 수 있는 자를 말합니다.</p>
-                                <p>4. ‘비회원’이라 함은 회원에 가입하지 않고 몰”이 제공하는 서비스를 이용하는 자를 말합니다.</p>
-                                <p>5. '아이디(ID)'란 이용자가 회원가입 당시 몰에 등록한 사용자 '개인이용문자'를 말합니다.</p>
-                                <p>6. '비밀번호'란 회원의 동일성 확인과 비밀보호를 위하여 회원 스스로가 설정하여 몰에 등록한 '개인이용문자'로 회원으로 로그인을 하기위해 아이디와 같이 사용됩니다.</p>
-                                <p>7. ‘영업일’이란 회사가 정상적으로 서비스를 제공한 날로서 토요일, 일요일 및 법정 공휴일을 제외한 날을 말합니다.</p>
-                                <p>8. ‘아이포인트’란 아이스타일24를 통하여 회원이 상품을 구매할 때, 구매금액의 일정 비율이 적립되는 ‘몰’전용 마일리지로 적립일로부터 3년이 지나면 자동 소멸 됩니다</p>
-                                <p>9. ‘아이머니’란 상품구매 시 현금과 같이 이용할 수 있는 ‘몰’ 전용 사이버머니로, 적립된 아이포인트를 일정한 단위로 환전하여 사용할 수 있습니다.</p>
-                                <p>10. 기타 ‘2조’에서 정의되지 아니한 이 약관상의 용어의 의미는 일반적인 거래관행에 의합니다.</p>
-                            </div>
-                            <div id="prvc3">
-                                <h4><span>제3조 약관 등의 명시와 설명 및 개정</span></h4>
-                                <p>1. "몰"은 이 약관의 내용과 상호 및 대표자 성명, 영업소 소재지 주소(소비자의 불만을 처리할 수 있는 곳의 주소를 포함), 전화번호, 팩스번호, 전자우편주소, 사업자등록번호,
-                                    통신판매업신고번호, 개인정보관리책임자 등을 이용자가 쉽게 알 수 있도록 www.istyle24.com의 초기 서비스화면(전면)에 게시합니다.
-                                    다만, 이용약관의 내용은 이용자가 연결화면을 통하여 볼 수 있도록 할 수 있습니다.</p>
-                                <p>2. "몰"은 이용자가 약관에 동의하기에 앞서 약관에 정하여져 있는 내용 중 청약철회 배송책임 환불조건 등과 같은 중요한 내용을 이용자가 이해할 수 있도록 별도의 연결화면 또는 팝업화면 등을
-                                    제공하여 이용자의 확인을 구하여야 합니다.</p>
-                                <p>3. "몰"은 전자상거래등에서의소비자보호에관한법률, 약관의규제에관한법률, 전자거래기본법, 전자서명법, 정보통신망이용촉진등에관한법률, 방문판매등에관한법률, 소비자보호법 등
-                                    관련법을 위배하지 않는 범위에서 이 약관을 개정할 수 있습니다.</p>
-                                <p>4. "몰"이 약관을 개정할 경우에는 적용일자 및 개정사유를 명시하여 현행약관과 함께 몰의 초기화면에 그 적용일자 7일 이전부터 적용일자 전일까지 공지합니다.
-                                    다만, 이용자에게 불리하게 약관내용을 변경하는 경우에는 최소한 30일 이상의 사전 유예기간을 두고 공지합니다. 이 경우 "몰"은 개정 전 내용과 개정 후 내용을 명확하게 비교하여 이용자가
-                                    알기 쉽도록 표시합니다.</p>
-                                <p>5. "몰"이 약관을 개정할 경우에는 그 개정 약관은 그 적용일자 이후에 체결되는 계약에만 적용되고 그 이전에 이미 체결된 계약에 대해서는 개정전의 약관조항이 그대로 적용됩니다.
-                                    다만 이미 계약을 체결한 이용자가 개정 약관 조항의 적용을 받기를 원하는 뜻을 제3조에 의한 개정약관의 공지기간내에 "몰"에 송신하여 "몰"의 동의를 받은 경우에는 개정약관 조항이
-                                    적용됩니다.</p>
-                                <p>6. 본 약관에서 정하지 아니한 사항과 이 약관의 해석에 관하여는 전자상거래등에서의 소비자보호에관한법률, 약관의규제등에관한법률, 공정거래위원회가 정하는 전자상거래등에서의
-                                    소비자보호지침 및 관계법령 또는 상관례에 따릅니다.</p>
-                            </div>
-                            <div id="prvc4">
-                                <h4><span>제4조 서비스의 제공 및 변경</span></h4>
-                                <p>1. “몰"은 다음과 같은 업무를 수행합니다.</p>
-                                <ol>
-                                    <li>① 재화 또는 용역에 대한 정보 제공 및 구매계약의 체결</li>
-                                    <li>② 구매계약이 체결된 재화 또는 용역의 배송</li>
-                                    <li>③ 기타 “몰”이 정하는 업무</li>
-                                </ol>
-                                <p>2. "몰"은 재화 또는 용역의 품절 또는 기술적 사양의 변경 등의 경우에는 장차 체결되는 계약에 의해 제공할 재화 또는 용역의 내용을 변경할 수 있습니다. 이 경우에는 변경된 재화 또는 용역의
-                                    내용 및 제공일자를 명시하여 현재의 재화 또는 용역의 내용을 게시한 곳에 즉시 공지합니다.단, "몰"이 합리적으로 예측할 수 없는 불가피한 여건이나 사정이 있는 경우, 위 공지를 하지 않을 수
-                                    있습니다.
-                                    </p>
-                                <p>3. "몰"이 제공하기로 이용자와 계약을 체결한 서비스의 내용을 재화등의 품절 또는 기술적 사양의 변경 등의 사유로 변경할 경우에는 그 사유를 이용자에게 통지 합니다.</p>
-                                <p>4. 전항의 경우 "몰"은 이로 인하여 이용자가 입은 손해를 배상합니다. 다만, "몰"이 고의 또는 과실이 없음을 입증하는 경우에는 그러하지 아니합니다.</p>
-                            </div>
-                            <div id="prvc5">
-                                <h4><span>제5조 서비스의 중단</span></h4>
-                                <p>1. "몰"은 컴퓨터 등 정보통신설비의 보수점검·교체 및 고장, 통신의 두절 등의 사유가 발생한 경우에는 서비스의 제공을 일시적으로 중단할 수 있습니다.</p>
-                                <p>2. "몰"은 제1항의 사유로 서비스의 제공이 일시적으로 중단됨으로 인하여 이용자 또는 제3자가 입은 손해에 대하여 배상합니다.단, "몰"에 고의 또는 과실이 없는 경우에는 그러하지
-                                    아니합니다.</p>
-                                <p>3. "사업종목의 전환, 사업의 포기, 업체간의 통합 등의 이유로 서비스를 제공할 수 없게 되는 경우에는 "몰"은 제8조에 정한 방법으로 이용자에게 통지하고 당초 "몰"에서 제시한 조건에 따라
-                                    소비자에게 보상합니다.</p>
-                                <p>4. 다만, "몰"이 보상기준 등을 고지하지 아니한 경우에는 이용자들의 적립금 등을 "몰"에서 통용되는 통화가치에 상응하는 현물 또는 현금으로 이용자에게 지급합니다.</p>
-                            </div>
-                            <div>
-                                <h4  id="prvc6"><span>제6조 회원가입</span></h4>
-                                <p>1. 이용자는 "몰"이 정한 가입 양식에 따라 회원정보를 기입한 후 이 약관에 동의한다는 의사표시를 함으로서 회원가입을 신청합니다.</p>
-                                <p>2. "몰"은 제1항과 같이 회원으로 가입할 것을 신청한 이용자 중 다음 각호에 해당하지 않는 한 회원으로 등록합니다.</p>
-                                <ol>
-                                    <li>① 가입신청자가 이 약관 제7조 제3항에 의하여 이전에 회원자격을 상실한 적이 있는 경우, 다만 제7조 제3항에 의한 회원자격 상실후 3년이 경과한 자로서 "몰"의 회원 재가입 승낙을 얻은
-                                        경우에는 예외로 한다.</li>
-                                    <li>② 등록 내용에 허위, 기재누락, 오기가 있는 경우</li>
-                                    <li>③ 만 14세가 되지 않은 자가 신청하였을 경우</li>
-                                    <li>④기타 회원으로 등록하는 것이 "몰"의 기술상 현저히 지장이 있다고 판단되는 경우</li>
-                                </ol>
-                                <p>3. 회원가입계약의 성립시기는 "몰"의 승낙이 회원에게 도달한 시점으로 합니다.</p>
-                                <p>4. 가입신청자가 "몰"에 회원으로 가입하더라도 로그인하지 않은 상태에서 주문하는 경우는 회원주문이 아니라 비회원주문으로 인정합니다.</p>
-                                <p>5. 회원은 제15조 제1항에 의한 등록사항에 변경이 있는 경우, 즉시 전자우편 기타 방법으로 "몰"에 대하여 그 변경사항을 알려야 합니다.이러한 변경사항의 미 통보로 인해 발생하는 손해는
-                                    회원에게 그 책임이 있습니다.</p>
-                            </div>
-                            <div id="prvc7">
-                                <h4><span>제7조 회원 탈퇴 및 자격 상실 등</span></h4>
-                                <p>1. 회원은 "몰"에 언제든지 탈퇴를 요청할 수 있으며 "몰"은 즉시 회원탈퇴를 처리합니다.</p>
-                                <p>2. 회원이 다음 각호의 사유에 해당하는 경우, "몰"은 회원자격을 제한 및 정지시킬 수 있습니다.</p>
-                                <p>3. "몰"이 회원 자격을 제한 정지 시킨 후, 동일한 행위가 2회 이상 반복되거나 30일 이내에 그 사유가 시정되지 아니하는 경우 "몰"은 회원자격을 상실시킬 수 있습니다.</p>
-                                <p>4. "몰"이 회원자격을 상실시키는 경우에는 회원등록을 말소합니다. 이 경우 회원에게 이를 통지하고, 회원등록 말소 전에 최소한 30일 이상의 기간을 정하여 소명할 기회를 부여합니다.</p>
-                            </div>
-                            <div id="prvc8">
-                                <h4><span>제8조 회원에 대한 통지</span></h4>
-                                <p>1. "몰"이 회원에 대한 통지를 하는 경우, 회원이 "몰"에 제출하여 지정한 전자우편 주소로 할 수 있습니다.</p>
-                                <p>2. "몰"은 불특정다수 회원에 대한 통지의 경우 1주일이상 "몰" 게시판에 게시함으로서 개별 통지에 갈음할 수 있습니다.
-                                    다만, 회원 본인의 거래와 관련하여 중대한 영향을 미치는 사항에 대하여는 개별통지를 합니다.</p>
-                            </div>
-                            <div id="prvc9">
-                                <h4><span>제9조 구매신청</span></h4>
-                                <p>"몰"이용자는 "몰"상에서 다음 또는 이와 유사한 방법에 의하여 구매를 신청하며, "몰"은 이용자가 구매신청을 함에 있어서 다음의 각 내용을 알기 쉽게 제공하여야 합니다.
-                                    단, 회원인 경우 제2호 내지 제4호의 적용을 제외할 수 있습니다.</p>
-                                <p>1. 재화 등의 검색 및 선택</p>
-                                <p>2. 성명, 주소, 전화번호, 전자우편주소(또는 이동전화번호) 등의 입력</p>
-                                <p>3. 약관내용, 청약철회권이 제한되는 서비스, 배송료 설치비 등의 비용부담과 관련한 내용에 대한 확인</p>
-                                <p>4. 이 약관에 동의하고 위 3.호의 사항을 확인하거나 거부하는 표시(예, 마우스 클릭)</p>
-                                <p>5. 재화 등의 구매신청 및 이에 관한 확인 또는 "몰"의 확인에 대한 동의</p>
-                                <p>6. 결제방법의 선택</p>
-                            </div>
-                            <div id="prvc10">
-                                <h4><span>제10조 계약의 성립</span></h4>
-                                <p>1."몰"은 제9조와 같은 구매신청에 대하여 다음 각호에 해당하면 승낙하지 않을 수 있습니다. 다만, 미성년자와 계약을 체결하는 경우에는 법정대리인의 동의를 얻지 못하면 미성년자 본인 또는
-                                    법정대리인이 계약을 취소할 수 있다는 내용을 고지하여야 합니다.</p>
-                                    <ol>
-                                        <li>① 신청 내용에 허위, 기재누락, 오기가 있는 경우</li>
-                                        <li>② 미성년자가 담배, 주류 등 청소년보호법에서 금지하는 재화 및 용역을 구매하는 경우</li>
-                                        <li>③ 기타 구매신청에 승낙하는 것이 "몰" 기술상 현저히 지장이 있다고 판단하는 경우</li>
-                                    </ol>
-                                <p>2. "몰"의 승낙이 제12조 제1항의 수신확인통지형태로 이용자에게 도달한 시점에 계약이 성립한 것으로 봅니다.</p>
-                                <p>3. "몰"의 승낙의 의사표시에는 이용자의 구매 신청에 대한 확인 및 판매가능 여부, 구매신청의 정정 취소 등에 관한 정보 등을 포함하여야 합니다.</p>
-                                <p>4. 이 약관에 동의하고 위 3.호의 사항을 확인하거나 거부하는 표시(예, 마우스 클릭)</p>
-                                <p>5. 재화 등의 구매신청 및 이에 관한 확인 또는 "몰"의 확인에 대한 동의</p>
-                            </div>
-                            <div id="prvc24">
-                                <h4><span>제24조 재판권 및 준거법</span></h4>
-                                <p>1."몰"과 이용자간에 발생한 전자상거래 분쟁에 관한 소송은 제소 당시의 이용자의 주소에 의하고, 주소가 없는 경우에는 거소를 관할하는 지방법원의 전속관할로 합니다.
-                                    다만, 제소 당시 이용자의 주소 또는 거소가 분명하지 않거나 외국 거주자의 경우에는 민사소송법상의 관할법원에 제기합니다.</p>
-                                <p>2. "몰"과 이용자간에 제기된 전자상거래 소송에는 한국법을 적용합니다.</p>
-                            </div>
-                            <div id="prvc">
-                                <h4><span></span></h4>
-                                <p></p>
-                                <p></p>
-                                <p></p>
-                                <p></p>
-                                <p></p>
-                            </div>
-                            
-                            <div>
-                                <p>부칙 : 본 약관은 2016년 01월 04일부터 시행하며, 종전의 약관내용은 본 약관으로 대체합니다.</p>
-                            </div>
 
-                        </div>
-                    </div> -->
 			</div>
+			<div class="cont_foot">
+				<div id="prvc_sel">
+					<form class="form_wrap">
+						<div class="form_field">
+							<div class="select_custom prvs_detail">
+								<div class="combo">
+									<div class="select">개인정보 처리방침 v1.0</div>
+									<ul class="list" style="display: none;">
+										<th:block th:if="${clauseList}" th:each="oneData, status : ${clauseList}">
+											<li th:text="${oneData.clauseTitle}" th:onclick="fnGetCaluseInfo([[${oneData.clauseSq}]]);"></li>
+										</th:block>
+									</ul>
+								</div>
+							</div>
+						</div>
+					</form>
+				</div>
+			</div>
+
 		</div>
 	</div>
 </div>
 
 <script th:inline="javascript">
 /*<![CDATA[*/
+
+	$(document).ready(function() {
+		$(document).on("click","#partners",function(event){
+			cfnSupplyComanyLayer();
+		});
+	});
+
+	var fnGetCaluseInfo = function (clauseSq) {
+		$.get('/customer/clause/info/' + clauseSq
+			, function (data) {
+			if(!gagajf.isNull(data.clauseContent)) {
+				$('.cont_body').html(data.clauseContent);
+				$("html, body").animate({scrollTop : $("#container").offset().top},100)
+			}
+		});
+	};
+
 	// 약관 내부 링크
 	$(function() {
 		$(".hook_list ul li a").on("click", function() {
@@ -290,6 +88,21 @@
 			var hookPos = hookPot.offset().top - hookHeader;
 			$("html, body").animate({ scrollTop: hookPos }, 300);
 		});
+
+		$(window).scroll(function(){
+			var scroll = $(this).scrollTop();
+			var headerH = $(".header").height();
+			if ($(window).scrollTop() > headerH){
+				$(".header").addClass("minify");
+				return false;
+			}
+			else {
+				$(".header").removeClass("minify");
+				return false;
+			}
+		});
+
+		var prvc_select = new sCombo('.select_custom.prvs_detail');
 	});
 /*]]>*/
 </script>

+ 101 - 0
src/main/webapp/WEB-INF/views/web/customer/SupplyCompanyLayerFormWeb.html

@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : SupplyCompanyLayerFormWeb.html
+ * @desc    : 공급업체 리스트 page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.06.09   jsshin       최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document">
+	<div class="modal-content">
+		<div class="modal-header">
+			<h5 class="modal-title" id="psptnLabel">업체 리스트</h5>
+		</div>
+		<div class="modal-body">
+			<div class="pop_cont">
+				<!-- 컨텐츠 시작 -->
+				<div class="ps ptn" >
+					<table>
+						<colgroup>
+							<col width="*">
+							<col width="30%">
+						</colgroup>
+						<thead>
+							<tr>
+								<th>업체명</th>
+								<th>대표자</th>
+							</tr>
+						</thead>
+						<tbody id="supplyCompanyList">
+						</tbody>
+					</table>
+					<div class="paging_wrap">
+						<ul class="pageNav" id="paging">
+						</ul>
+					</div>
+				</div>
+				<!-- 컨텐츠 종료 -->
+			</div>
+		</div>
+		<div class="modal-footer">
+			<a href="#close-modal" rel="modal:close" className="close-modal" class="btn btn_default">닫기</a>
+		</div>
+	</div>
+</div>
+<form id="supplyCompanyForm" name="supplyCompanyForm" th:action="@{/customer/supply/company/list}" th:method="post">
+	<input type="hidden" name="pageNo" value="1" />
+	<input type="hidden" name="pageSize" value="5" />
+</form>
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	var fnGetSupplyCompanyList = function () {
+		gagaPaging.init('supplyCompanyForm', fnSearchCallback, 'paging', 10);
+		gagaPaging.load(1);
+	}
+
+	var fnSearchCallback = function (result) {
+		$('#supplyCompanyList').html('');
+		let html = '';
+		if (!gagajf.isNull(result) && result.supplyCompanyList.length > 0) {
+			$.each(result.supplyCompanyList, function (idx, item) {
+				html += '<tr>\n';
+				html += '    <td>\n';
+				html += item.supplyCompNm;
+				html += '    </td>\n';
+				html += '    <td>\n';
+				html += item.ownerNm;
+				html += '    </td>\n';
+				html += '</tr>\n';
+			});
+		}
+		$('#supplyCompanyList').html(html);
+
+		gagaPaging.createPagination(result.paging.pageable);
+	}
+
+	$(document).ready(function() {
+		fnGetSupplyCompanyList();
+	});
+
+	//약관내부링크
+	$(function(){
+		$(".hook_list ul li a").on("click", function(){
+			var hookHeader = $(".modal-header").outerHeight() + 3000;
+			var hookHref = $(this).attr("href");
+			var hookPot = $(hookHref == "#" || hookHref == "" ? "body" : hookHref);
+			var hookPos = hookPot.offset().top - hookHeader;
+			$("html, body").animate({ scrollTop: hookPos }, 3000);
+		});
+	});
+/*]]>*/
+</script>
+</html>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html

@@ -25,7 +25,7 @@
 <!--			<th:block th:if="${brandMainLayoutData.ContentsList != null and !brandMainLayoutData.ContentsList.empty}">-->
 				<th:block th:if="${contentsLoc=='004'}">
 					<!-- 1. 비주얼 슬라이드 -->
-					<div class="content wide main_visual brand_visual" th:if="${brandMainLayoutData.ContentsList != null}">
+					<div class="content wide main_visual brand_visual" th:if="${brandMainLayoutData.ContentsList != null and !brandMainLayoutData.ContentsList.empty}">
 						<div class="cont_head dpnone">
 							<p class="t_c">비주얼 슬라이드</p>
 						</div>

+ 6 - 4
src/main/webapp/WEB-INF/views/web/display/CategoryMainFormWeb.html

@@ -70,7 +70,7 @@
 			<th:block th:if="${contentsLoc=='004'}">
 				<div class="content wide dp_category">
 					<div class="cont_head">
-						<h4>카테고리 바로가기</h4>
+						<h4 th:text="${contentsTitle!=null and contentsTitle!=''}?${contentsTitle}:'카테고리 바로가기'"></h4>
 					</div>
 					<div class="cont_body">
 						<div class="dp_cate_list">
@@ -81,7 +81,7 @@
 
 			<th:block th:if="${contentsLoc=='002'}">
 				<!-- 신상품 -->
-				<div class="content new_item" th:if="${newGoodsList != null}">
+				<div class="content new_item" th:if="${newGoodsList != null and !newGoodsList.empty}">
 					<div class="cont_head">
 						<h4 th:text="${contentsTitle}">신상품</h4>
 					</div>
@@ -118,9 +118,11 @@
 				<!-- //신상품 -->
 			</th:block>
 			<th:block th:if="${contentsLoc=='003'}">
-				<div class="content dp_best_list" th:if="${bestGoodsList != null}">
+				<div class="content dp_best_list" th:if="${bestGoodsList != null and !bestGoodsList.empty}">
 					<div class="cont_head">
-						<h3 class="displayH" th:text="${contentsTitle}">베스트</h3>
+						<div>
+						<h4 th:text="${contentsTitle}">베스트</h4>
+						</div>
 					</div>
 					<div class="cont_body">
 						<div class="list_content">

+ 9 - 2
src/main/webapp/WEB-INF/views/web/display/LookbookDetailFormWeb.html

@@ -56,10 +56,11 @@
 				</div>
 			</div>
 
-			<div class="content br_lookbook_view cont_txts" th:if="${lookbookDetailList != null}">
+			<div class="content br_lookbook_view cont_txts" id="lbImgDesc" th:if="${lookbookDetailList != null}">
 				<div class="cont_body">
 					<th:block th:each="item, stat : ${lookbookDetailList}">
-						<div class="text_cont" th:text="${item.imgDesc}">
+						<div class="text_cont">
+							<input type="hidden" name="title" th:value="${item.imgDesc}">
 						</div>
 					</th:block>
 				</div>
@@ -395,6 +396,12 @@
 		}
 	});
 
+	$('#lbImgDesc .text_cont').each(function (){
+		var brText = $(this).find("input[name=title]").val();
+		let tag = brText.replace(/(?:\r\n|\r|\n)/g, '<br>');
+		$(this).append(tag);
+	});
+
 /*]]>*/
 </script>
 

+ 44 - 44
src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html

@@ -107,7 +107,7 @@
 
 				<!-- 3. 트렌디한 신상아이템 -->
 				<th:block th:if="${contentsLoc=='003'}">
-					<div class="content main_trendy" th:if="${mainLayoutData.goodsList != null}">
+					<div class="content main_trendy" th:if="${mainLayoutData.goodsList != null and !mainLayoutData.goodsList.empty}">
 						<div class="cont_head">
 							<p class="displayH t_c" th:text="${mainLayoutData.contentsTitle}"></p>
 						</div>
@@ -147,14 +147,12 @@
 
 				<!-- 4. 잇 아이템 -->
 				<th:block th:if="${contentsLoc=='004'}">
-					<div class="content main_it" th:if="${mainLayoutData.BestItemList != null}">
+					<div class="content main_it" th:if="${mainLayoutData.BestItemList != null and !mainLayoutData.BestItemList.empty}">
 						<div class="cont_head">
 							<p class="displayH" id="id004">
 								<input type="hidden" name="title" th:value="${mainLayoutData.contentsTitle}">
 							</p>
-							<th:block th:each="ContentsData, ContentsStat : ${mainLayoutData.ContentsList}">
-								<a href="javascript:void(0);" th:onclick="cfnGoToPage([[${ContentsData.strVar1}]]);"><span>전체보기</span></a>
-							</th:block>
+							<a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_BEST_MAIN);"><span>전체보기</span></a>
 						</div>
 						<div class="cont_body">
 							<div class="it_nav">
@@ -205,7 +203,7 @@
 
 				<!-- 5. 프로모션배너 -->
 				<th:block th:if="${contentsLoc=='005'}">
-					<div class="content main_2stage" th:if="${mainLayoutData.ContentsList != null}">
+					<div class="content main_2stage" th:if="${mainLayoutData.ContentsList != null and !mainLayoutData.ContentsList.empty}">
 						<div class="cont_head dpnone">
 							<p class="t_c">프로모션배너</p>
 						</div>
@@ -240,7 +238,7 @@
 				<!-- 6. 타임딜 : 슬라이드 -->
 				<th:block th:if="${contentsLoc=='006'}">
 					<th:block th:each="socialData, socialStat : ${mainLayoutData.socialInfo}">
-					<div class="content wide main_deal" th:if="${socialData.socialGoodsList != null}">
+					<div class="content wide main_deal" th:if="${socialData.socialGoodsList != null and !socialData.socialGoodsList.empty}">
 						<div class="cont_head">
 							<p class="displayH" id="id006">
 								<input type="hidden" name="title" th:value="${mainLayoutData.contentsTitle}">
@@ -271,54 +269,56 @@
 							<script>
 								/* 핫딜 countDown */
 								// var target_date = new Date().getTime() + (1000*3600*8); // set the countdown date
-								var target_date = $("#socailForm").find("input[name=targetTime]").val().toDate("YYYYMMDD");
-								var days, hours, minutes, seconds; // variables for time units
+								if(!gagajf.isNull($("#socailForm").find("input[name=targetTime]").val())){
+									var target_date = $("#socailForm").find("input[name=targetTime]").val().toDate("YYYYMMDD");
+									var days, hours, minutes, seconds; // variables for time units
 
-								var countdown = document.getElementById("tiles"); // get tag element
+									var countdown = document.getElementById("tiles"); // get tag element
 
-								getCountdown();
+									getCountdown();
 
-								var timerStop = setInterval(function () { getCountdown(); }, 1000);
+									var timerStop = setInterval(function () { getCountdown(); }, 1000);
 
-								var fixDate = new Date().getTime();
-								var fixTarget = (target_date - fixDate) / 1000;
-								var width = (86400-fixTarget)*100/86400;
+									var fixDate = new Date().getTime();
+									var fixTarget = (target_date - fixDate) / 1000;
+									var width = (86400-fixTarget)*100/86400;
 
-								function getCountdown(){
+									function getCountdown(){
 
-									// find the amount of "seconds" between now and target
-									var current_date = new Date().getTime();
-									var seconds_left = (target_date - current_date) / 1000;
+										// find the amount of "seconds" between now and target
+										var current_date = new Date().getTime();
+										var seconds_left = (target_date - current_date) / 1000;
 
-									seconds_left = seconds_left % 86400;
+										seconds_left = seconds_left % 86400;
 
-									hours = pad( parseInt(seconds_left / 3600) );
-									seconds_left = seconds_left % 3600;
+										hours = pad( parseInt(seconds_left / 3600) );
+										seconds_left = seconds_left % 3600;
 
-									minutes = pad( parseInt(seconds_left / 60) );
-									seconds = pad( parseInt( seconds_left % 60 ) );
+										minutes = pad( parseInt(seconds_left / 60) );
+										seconds = pad( parseInt( seconds_left % 60 ) );
 
-									// format countdown string + set tag value
-									countdown.innerHTML = "<span>" + hours + "</span><span>" + minutes + "</span><span>" + seconds + "</span>";
+										// format countdown string + set tag value
+										countdown.innerHTML = "<span>" + hours + "</span><span>" + minutes + "</span><span>" + seconds + "</span>";
 
-									var elem = document.getElementById("barCurrent");
-									function progressMove(){
-										width += (100-width)/fixTarget;
-										elem.style.width = width + "%";
-									}
-									progressMove();
+										var elem = document.getElementById("barCurrent");
+										function progressMove(){
+											width += (100-width)/fixTarget;
+											elem.style.width = width + "%";
+										}
+										progressMove();
 
-									if(seconds_left < 1){
-										clearInterval(timerStop);
-										elem.style.width = "100%";
-									}
+										if(seconds_left < 1){
+											clearInterval(timerStop);
+											elem.style.width = "100%";
+										}
 
-								}
+									}
 
-								function pad(n) {
-									return (n < 10 ? '0' : '') + n;
+									function pad(n) {
+										return (n < 10 ? '0' : '') + n;
+									}
+									/* countDown */
 								}
-								/* countDown */
 
 							</script>
 						</div>
@@ -362,7 +362,7 @@
 
 				<!-- 7. 브랜드픽 -->
 				<th:block th:if="${contentsLoc=='007'}">
-					<div class="content main_pick">
+					<div class="content main_pick" th:if="${mainLayoutData.ContentsList != null and !mainLayoutData.ContentsList.empty}">
 						<div class="cont_head">
 							<p class="displayH t_c" th:text="${mainLayoutData.contentsTitle}">브랜드 PICK1</p>
 						</div>
@@ -441,7 +441,7 @@
 				<!-- 8. 가로 긴 배너 슬라이드 -->
 				<!-- bnn_1stage -->
 				<th:block th:if="${contentsLoc=='008'}">
-					<div class="content wide main_1stage">
+					<div class="content wide main_1stage" th:if="${mainLayoutData.ContentsList != null and !mainLayoutData.ContentsList.empty}">
 						<div class="cont_head dpnone">
 							<p class="t_c">배너 슬라이드</p>
 						</div>
@@ -479,7 +479,7 @@
 
 				<!-- 9. MD추천 스타일 -->
 				<th:block th:if="${contentsLoc=='009'}">
-					<div class="content main_recomm" >
+					<div class="content main_recomm" th:if="${mainLayoutData.mdPickList != null and !mainLayoutData.mdPickList.empty}">
 						<div class="cont_head">
 							<p class="displayH t_c" th:text="${mainLayoutData.contentsTitle}"></p>
 						</div>
@@ -541,7 +541,7 @@
 
 				<!-- 11. TV 슬라이드 -->
 				<th:block th:if="${contentsLoc=='011'}">
-					<div class="content wide main_tv" th:if="${mainLayoutData.ContentsList != null}">
+					<div class="content wide main_tv" th:if="${mainLayoutData.ContentsList != null and !mainLayoutData.ContentsList.empty}">
 						<div class="cont_head">
 							<p class="displayH t_c" th:text="${mainLayoutData.contentsTitle}"></p>
 						</div>

+ 36 - 33
src/main/webapp/WEB-INF/views/web/display/OutletMainFormWeb.html

@@ -85,7 +85,7 @@
 
 			<!-- MD 추천 아이템 -->
 			<th:block th:if="${contentsLoc=='002'}">
-			<div class="content md_item" th:if="${mdPickGoodsList != null}">
+			<div class="content md_item" th:if="${mdPickGoodsList != null and !mdPickGoodsList.empty}">
 				<div class="cont_head">
 					<h4 th:text="${contentsTitle}">MD가 추천하는 아울렛 아이템</h4>
 				</div>
@@ -126,7 +126,7 @@
 			<!-- //MD 추천 아이템 -->
 			<!-- 베스트 상품 리스트 -->
 			<th:block th:if="${contentsLoc=='003'}">
-			<div class="content dp_best_list" th:if="${bestGoodsList != null}">
+			<div class="content dp_best_list" th:if="${bestGoodsList != null and !bestGoodsList.empty}">
 				<div class="cont_head">
 					<div>
 						<h4 th:text="${contentsTitle}">베스트</h4>
@@ -182,40 +182,43 @@
 /*<![CDATA[*/
 	$(document).ready(function() {
 		fnSetCategory1Depts();
-	});
 
-	/* SLIDE - 상단 스크롤 슬라이드 배너 */
-	var submain_slide = new Swiper('.dp_submain .swiper-container', {
-		slidesPerView: 4,
-		spaceBetween: 20,
-		freeMode:true,
-		scrollbar: {
-			el: '.dp_submain .swiper-scrollbar',
-			hide: false,
-		},
-	});
+		/* SLIDE - 상단 스크롤 슬라이드 배너 */
+		var submain_slide = new Swiper('.dp_submain .swiper-container', {
+			slidesPerView: 4,
+			spaceBetween: 20,
+			freeMode:true,
+			scrollbar: {
+				el: '.dp_submain .swiper-scrollbar',
+				hide: false,
+			},
+		});
 
-	/* SLIDE - MD ITEMS */
-	var dp_submain_mditem = new Swiper('.dp .md_item .swiper-container', {
-		slidesPerView: 5,
-		spaceBetween: 20,
-		watchSlidesProgress: true,
-		watchSlidesVisibility: true,
-		allowTouchMove: false,
-		speed : 1000,
-		autoplay: {
-			delay: 3000,
-			disableOnInteraction:false,
-		},
-		navigation: {
-			nextEl: '.dp .md_item .swiper-button-next',
-			prevEl: '.dp .md_item .swiper-button-prev',
-		},
-		pagination: {
-			el: '.dp .md_item .swiper-pagination',
-			clickable: true,
-		},
+		/* SLIDE - MD ITEMS */
+		var dp_submain_mditem = new Swiper('.dp .md_item .swiper-container', {
+			slidesPerView: 5,
+			slidesPerGroup: 5,
+			spaceBetween: 20,
+			loop: true,
+			watchSlidesProgress: true,
+			watchSlidesVisibility: true,
+			allowTouchMove: false,
+			speed : 1000,
+			// autoplay: {
+			//     delay: 3000,
+			//     disableOnInteraction:false,
+			// },
+			navigation: {
+				nextEl: '.dp .md_item .swiper-button-next',
+				prevEl: '.dp .md_item .swiper-button-prev',
+			},
+			pagination: {
+				el: '.dp .md_item .swiper-pagination',
+				clickable: true,
+			},
+		});
 	});
+
 // 카테고리1Depts 설정
 	var fnSetCategory1Depts = function() {
 		let allCate = [[${allCateList}]];

+ 6 - 4
src/main/webapp/ux/mo/css/layout_m.css

@@ -1717,8 +1717,9 @@
 .dp .dp_outlets .outlets_visual img {width: 100%;}
 .dp .dp_outlets .outlets_visual .swiper-pagination-fraction {bottom: 4rem ; width:auto; left: 2rem; background: rgba(34,34,34,.5); color: #fff; font-weight: 300;padding:0.5rem 0.7rem; line-height: 1; font-size: 1.2rem; border-radius:2rem;}
 .dp .dp_outlets .outlets_visual .swiper-pagination-current {font-weight: 600;}
-.dp .dp_outlets .outlets_visual .txtWrap {position: absolute; left: 2rem; bottom: 9rem; color: fff;}
-.dp .dp_outlets .outlets_visual .txtWrap p {color: #fff; font-size: 3rem; font-weight: 500; line-height: 1.2;}
+.dp .dp_outlets .outlets_visual .txtWrap {position: absolute; left: 2rem; bottom: 9rem; color: #222;}
+.dp .dp_outlets .outlets_visual .txtWrap.w {color: #fff;}
+.dp .dp_outlets .outlets_visual .txtWrap p {font-size: 3rem; font-weight: 500; line-height: 1.2;}
 .dp .dp_outlets .outlets_visual .txtWrap p.txt_xs {font-size: 1.4rem; margin-top: 1.6rem; font-weight: 300;}
 .dp .dp_outlets .dp_cate_list {margin:-1.2rem 0;}
 .dp .dp_outlets .dp_cate_list:after {content:''; display: block; clear: both;}
@@ -2311,8 +2312,9 @@
 .br .br_main .submain_visual img {width: 100%;}
 .br .br_main .submain_visual .swiper-pagination-fraction {position:absolute; bottom: 4rem ; width:auto; left: 2rem; background: rgba(34,34,34,.5); color: #fff; font-weight: 300;padding:0.5rem 0.7rem; line-height: 1; font-size: 1.2rem; border-radius:2rem;}
 .br .br_main .submain_visual .swiper-pagination-current {font-weight: 600;}
-.br .br_main .submain_visual .txtWrap {position: absolute; left: 2rem; bottom: 9rem; color: fff;}
-.br .br_main .submain_visual .txtWrap p {color: #fff; font-size: 3rem; font-weight: 500; line-height: 1.2;}
+.br .br_main .submain_visual .txtWrap {position: absolute; left: 2rem; bottom: 9rem; color: #222;}
+.br .br_main .submain_visual .txtWrap.w {color: #fff;}
+.br .br_main .submain_visual .txtWrap p {font-size: 3rem; font-weight: 500; line-height: 1.2;}
 .br .br_main .submain_visual .txtWrap p.txt_xs {font-size: 1.4rem; margin-top: 1.6rem; font-weight: 300;}
 .br .br_main .br_top_info{position:relative; margin-top:-1rem;}
 .br .br_main .br_top_info .br_subtitle{text-align:left;}

+ 5 - 3
src/main/webapp/ux/style24_link.js

@@ -1014,16 +1014,18 @@ function cfnPrivacyPolicyLayer(mallGb) {
 	cfnOpenLayer(_PAGE_PRIVACY_POLICY_LAYER, 'policiesPrivacyPop', params);
 }
 
-function cfnSupplyComanyLayer() {
+function cfnSupplyComanyLayer(mallGb) {
 	let str;
 	if (_frontGb === 'P') {
-
+		str ='<div class="modal fade pd_pop psptn_pop" id="supplyCompanyPop" tabIndex="-1" role="dialog" aria-labelledby="psptnLabel" aria-hidden="true"></div>'
 	} else {
 		str = '<div class="modal pop_full fade" id="supplyCompanyPop" role="dialog" aria-labelledby="partnersPopFullLabel" aria-hidden="true"></div>';
 	}
-	if($('#partnersPop').length == 0) {
+	if($('#supplyCompanyPop').length == 0) {
 		$('body').append(str);
 	}
+	let params = {}
+	params.mallGb = mallGb;
 	cfnOpenLayer(_PAGE_SUPPLY_COMPANY_LAYER,'supplyCompanyPop');
 }