GoodsDetailForm.html 89 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213
  1. <!DOCTYPE html>
  2. <html lang="ko"
  3. xmlns:th="http://www.thymeleaf.org">
  4. <!--
  5. *******************************************************************************
  6. * @source : GoodsDetailForm.html
  7. * @desc : 상품 상세 팝업
  8. *============================================================================
  9. * STYLE24
  10. * Copyright(C) 2020 TSIT, All rights reserved.
  11. *============================================================================
  12. * VER DATE AUTHOR DESCRIPTION
  13. * === =========== ========== =============================================
  14. * 1.0 2020.10.23 eskim 최초 작성
  15. *******************************************************************************
  16. -->
  17. <div class="modalPopup" data-width="1500" > <!-- data-width="1500" data-height="870" -->
  18. <div class="panelStyle">
  19. <div class="panelTitle">
  20. <h2>상품상세</h2>
  21. <button type="button" class="close" onclick="fnGoodsDetailClose()"><i class="fa fa-times"></i></button>
  22. </div>
  23. <form id="goodsDetailForm" name="goodsDetailForm" action="#" th:method="post">
  24. <input type="hidden" id="mode" name="mode" th:value="${params.mode}"/>
  25. <input type="hidden" id="goodsCd" name="goodsCd" th:value="${params.goodsCd}"/>
  26. <input type="hidden" id="niClsfCd" name="niClsfCd"/>
  27. <input type="hidden" id="selfGoodsYn" name="selfGoodsYn"/>
  28. <input type="hidden" id="notiList" name="notiList" />
  29. <input type="hidden" id="chDataYn" name="chDataYn" />
  30. <input type="hidden" id="chStockDataYn" name="chStockDataYn" />
  31. <input type="hidden" id="goodsImageYn" name="goodsImageYn" />
  32. <input type="hidden" id="niClsfNm" name="niClsfNm" />
  33. <input type="hidden" id="uploadGoodsUrl" name="uploadGoodsUrl" th:value="${@environment.getProperty('upload.goods.view')}"/>
  34. <input type="hidden" id="mainColorCd" name="mainColorCd" />
  35. <input type="hidden" id="goodsType" name="goodsType" />
  36. <input type="hidden" id="goodsComposeList" name="goodsComposeList" />
  37. <input type="hidden" id="repGoodsCd" name="repGoodsCd" /> <!-- 대표상품(딜 가격) -->
  38. <div class="panelContent">
  39. <table class="frmStyle">
  40. <colgroup>
  41. <col width="11%"/>
  42. <col/>
  43. <col width="11%"/>
  44. <col width="14%"/>
  45. <col width="11%"/>
  46. <col width="14%"/>
  47. <col width="11%"/>
  48. <col width="14%"/>
  49. </colgroup>
  50. <tr>
  51. <th>브랜드명<em class="required" title="필수"></em></th>
  52. <td colspan="3">
  53. <select name="selSupplyCompCd" id="selSupplyCompCd" disabled="disabled" class="w40p">
  54. <option value="">[선택]</option>
  55. <option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  56. </select>
  57. <select name="selBrandCd" id="selBrandCd" disabled="disabled" class="w40p">
  58. <option value="">[선택]</option>
  59. </select>
  60. <input type="hidden" name="supplyCompCd" id="supplyCompCd" />
  61. <input type="hidden" name="brandGrpNm" id="brandGrpNm" />
  62. <input type="hidden" name="brandCd" id="brandCd" />
  63. </td>
  64. <th>상품코드<em class="required" title="필수"></em></th>
  65. <td><div id="goodsCdTxt"></div></td>
  66. <th>원코드</th>
  67. <td><span id="supplyGoodsCdTxt"></span></td>
  68. </tr>
  69. </table>
  70. <!-- TABS SPACE -->
  71. <div class="tabs">
  72. <!-- TABS NAVI -->
  73. <div class="tabsNav">
  74. <ul>
  75. <li class="on"><a href="#goodstab1">기본정보</a></li>
  76. <li><a href="#goodstab2">옵션/재고정보</a></li>
  77. <li><a href="#goodstab3">상품상세정보</a></li>
  78. <li id="goodsNotiTab"><a href="#goodstab4">고시정보</a></li>
  79. <li id="goodsComposeTab" style="display:none;"><a href="#goodstab5">구성상품</a></li>
  80. <li><a href="#goodstab6">변경이력</a></li>
  81. </ul>
  82. </div>
  83. <!-- //TABS NAVI -->
  84. <!-- TABS CONTENTS -->
  85. <ul class="tabsCont" th:with="uxImgUrl=${@environment.getProperty('domain.uximage')}">
  86. <!-- TAB1 : 기본정보 -->
  87. <li class="tab on" id="goodstab1">
  88. <!-- TAB1 CONTENTS AREA -->
  89. <div class="panelStyle">
  90. <table class="frmStyle">
  91. <colgroup>
  92. <col width="10%"/>
  93. <col width="15%"/>
  94. <col width="15%"/>
  95. <col width="15%"/>
  96. <col width="15%"/>
  97. <col width="15%"/>
  98. <col/>
  99. </colgroup>
  100. <tbody>
  101. <tr>
  102. <td rowspan="4" style="text-align:center">
  103. <img id="goodsImgUrl" src="" width="100px"/>
  104. <input type="hidden" name="sysImgNm" id="sysImgNm" />
  105. </td>
  106. <th>상품타이틀</th>
  107. <td colspan="5">
  108. <input type="text" class="w80p" id="goodsTnm" name="goodsTnm" maxlength=""></input>
  109. <span class="byteChk"><em class="cBlue" id="goodsTnmLen">0</em>/100 bytes</span>
  110. <input type="hidden" id="goodsTnmOrg" name="goodsTnmOrg"/>
  111. </td>
  112. </tr>
  113. <tr>
  114. <th>상품명<em class="required" title="필수"></em></th>
  115. <td colspan="5">
  116. <input type="text" class="w80p" id="goodsNm" name="goodsNm"></input>
  117. <span class="byteChk"><em class="cBlue" id="goodsNmLen">0</em>/200 bytes</span>
  118. <input type="hidden" id="goodsNmOrg" name="goodsNmOrg"/>
  119. </td>
  120. </tr>
  121. <tr>
  122. <th>사용자검색어</th>
  123. <td colspan="5">
  124. <input type="text" class="w60p" id="goodsSnm1" name="goodsSnm1"></input>
  125. <span class="byteChk"><em class="cBlue" id="goodsSnm1Len">0</em>/200 bytes</span><font class="cBlue padL10"><b>* 여러개설정할경우 ; 구분자 사용 / 공백은 자동삭제처리</b></font>
  126. <input type="hidden" id="goodsSnm1Org" name="goodsSnm1Org"/>
  127. </td>
  128. </tr>
  129. <tr>
  130. <th>검색어</th>
  131. <td colspan="5">
  132. <textarea class="textareaR2 w100p" id="goodsSnmTxt" name="goodsSnmTxt" disabled="disabled"></textarea>
  133. <!-- <input type="text" class="w100p" id="goodsSnmTxt" name="goodsSnmTxt" disabled="disabled"></input> -->
  134. <input type="hidden" id="goodsSnm" name="goodsSnm"></input>
  135. </td>
  136. </tr>
  137. <tr>
  138. <td class="aC cRed" style="font-weight:bold;"><span id="goodsTypeNm"></span></td> <!-- 상품타입노출 -->
  139. <th>정상/이월 구분<em class="required" title="필수"></em></th>
  140. <td>
  141. <label class="rdoBtn" th:if="${formalGbList}" th:each="oneData, status : ${formalGbList}" ><input type="radio" id="formalGb" name="formalGb" th:value="${oneData.cd}" th:text="${oneData.cdNm}" /></label>
  142. <input type="hidden" id="formalGbOrg" name="formalGbOrg"/>
  143. </td>
  144. <th>상품상태<em class="required" title="필수"></em></th>
  145. <td>
  146. <select name="goodsStat" id="goodsStat">
  147. <option value="">[선택]</option>
  148. <option th:if="${goodsStatList}" th:each="oneData, status : ${goodsStatList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  149. </select>
  150. <input type="hidden" id="goodsStatOrg" name="goodsStatOrg"/>
  151. </td>
  152. <th>자사몰 노출여부<em class="required" title="필수"></em></th>
  153. <td>
  154. <label class="rdoBtn"><input type="radio" name="selfMallYn" id="selfMallYnY" value="Y" />Y</label>
  155. <label class="rdoBtn"><input type="radio" name="selfMallYn" id="selfMallYnN" value="N"/>N</label>
  156. <input type="hidden" id="selfMallYnOrg" name="selfMallYnOrg"/>
  157. </td>
  158. </tr>
  159. <tr>
  160. <td rowspan="12">&nbsp;</td>
  161. <th>시즌<em class="required" title="필수"></em></th>
  162. <td >
  163. <select name="seasonCd" id="seasonCd">
  164. <option value="">[선택]</option>
  165. <option th:if="${seasonList}" th:each="oneData, status : ${seasonList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  166. </select>
  167. <input type="hidden" id="seasonCdOrg" name="seasonCdOrg"/>
  168. </td>
  169. <th>성별<em class="required" title="필수"></em></th>
  170. <td>
  171. <select name="sexGb" id="sexGb">
  172. <option value="">[선택]</option>
  173. <option th:if="${sexGbList}" th:each="oneData, status : ${sexGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  174. </select>
  175. <input type="hidden" id="sexGbOrg" name="sexGbOrg"/>
  176. </td>
  177. <th>스타일년도</th>
  178. <td><span id="styleYearTxt"></span></td>
  179. </tr>
  180. <tr id="erplinkarea">
  181. <th>원산지</th>
  182. <td><span id="makeNmTxt"></span></td>
  183. <th>상품구분<em class="required" title="필수"></em></th>
  184. <td>
  185. <select name="goodsGb" id="goodsGb">
  186. <option value="">[선택]</option>
  187. <option th:if="${goodsGbList}" th:each="oneData, status : ${goodsGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  188. </select>
  189. <input type="hidden" id="goodsGbOrg" name="goodsGbOrg"/>
  190. </td>
  191. <th>유통구분<em class="required" title="필수"></em></th>
  192. <td><select name="distributionGb" id="distributionGb">
  193. <option value="">[선택]</option>
  194. <option th:if="${distributionGbList}" th:each="oneData, status : ${distributionGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  195. </select>
  196. <input type="hidden" id="distributionGbOrg" name="distributionGbOrg"/>
  197. </td>
  198. </tr>
  199. <tr id="erplinkarea">
  200. <th>상품연령대</th>
  201. <td>
  202. <select name="ageGrpCd" id="ageGrpCd">
  203. <option value="">[선택]</option>
  204. <option th:if="${ageGrpCdList}" th:each="oneData, status : ${ageGrpCdList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  205. </select>
  206. <input type="hidden" id="ageGrpCdOrg" name="ageGrpCdOrg"/>
  207. </td>
  208. <th>선물 주문가능여부<em class="required" title="필수"></em></th>
  209. <td>
  210. <label class="rdoBtn"><input type="radio" name="giftPackYn" id="giftPackYnY" value="Y" />Y</label>
  211. <label class="rdoBtn"><input type="radio" name="giftPackYn" id="giftPackYnN" value="N"/>N</label>
  212. <input type="hidden" id="giftPackYnOrg" name="giftPackYnOrg"/>
  213. </td>
  214. <th>가격변경일</th>
  215. <td><span id="priceUpdDtTxt"></span></td>
  216. </tr>
  217. <tr>
  218. <th>정상가</th>
  219. <td class="aR"><span id="listPriceTxt"></span> 원
  220. <input type="hidden" id="listPrice" name="listPrice"/>
  221. </td>
  222. <th>판매가<em class="required" title="필수"></em></th>
  223. <td><input type="text" class="w80p aR" id="currPrice" name="currPrice" maxlength="10" data-valid-type="numeric"/> 원
  224. <input type="hidden" id="currPriceOrg" name="currPriceOrg"/>
  225. </td>
  226. <th>할인율</th>
  227. <td class="aR" ><span id="dcRateTxt"></span> % <input type="hidden" id="dcRate" name="dcRate"/></td>
  228. </tr>
  229. <tr id="selfGoodsNSellFeeRate">
  230. <th>최초승인일</th>
  231. <td><span id="frstCfrmDtTxt"></span></td>
  232. <th>판매수수료율<em class="required" title="필수"></em></th>
  233. <td><input type="text" class="w80p aR" id="sellFeeRate" name="sellFeeRate" maxlength="10" data-valid-type="numeric"/> %
  234. <input type="hidden" id="sellFeeRateOrg" name="sellFeeRateOrg"/>
  235. </td>
  236. <th>과세구분</th>
  237. <td>
  238. <select name="taxGb" disabled="disabled">
  239. <option value="">[선택]</option>
  240. <option value="10">과세</option>
  241. <option value="20">비과세</option>
  242. </select>
  243. </td>
  244. </tr>
  245. <tr>
  246. <th>품목코드<em class="required" title="필수"></em></th>
  247. <td colspan="3">
  248. <select name="itemkindCd" id="itemkindCd" th:disabled="${sessionInfo.roleCd != 'G001_0000' AND sessionInfo.roleCd != 'G001_A000' AND sessionInfo.roleCd != 'G001_A101' AND sessionInfo.roleCd != 'G001_A100' AND sessionInfo.roleCd != 'G001_A001'}">
  249. <option th:if="${itemkindList}" th:each="oneData, status : ${itemkindList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  250. </select>
  251. <input type="hidden" id="orgItemkindCd" name="orgItemkindCd"/>
  252. <th:block th:if="${sessionInfo.roleCd == 'G001_0000' OR sessionInfo.roleCd == 'G001_A000' OR sessionInfo.roleCd == 'G001_A101' OR sessionInfo.roleCd == 'G001_A100' OR sessionInfo.roleCd == 'G001_A001' }">
  253. <button type="button" class="btn btn-success btn-lg" id="btnGoodsItemkindChange">품목변경</button>
  254. </th:block>
  255. </td>
  256. <th>원가</th>
  257. <td><input type="text" class="w80p aR" id="costPrice" name="costPrice" maxlength="10" data-valid-type="numeric"/> 원
  258. <input type="hidden" id="costPriceOrg" name="costPriceOrg"/>
  259. </td>
  260. </tr>
  261. <tr>
  262. <th>반품여부<em class="required" title="필수"></em></th>
  263. <td>
  264. <label class="rdoBtn"><input type="radio" name="returnableYn" id="returnableYnY" value="Y" />Y</label>
  265. <label class="rdoBtn"><input type="radio" name="returnableYn" id="returnableYnN" value="N"/>N</label>
  266. <input type="hidden" id="returnableYnOrg" name="returnableYnOrg"/>
  267. </td>
  268. <th>교환여부<em class="required" title="필수"></em></th>
  269. <td>
  270. <label class="rdoBtn"><input type="radio" name="changeableYn" id="changeableYnY" value="Y" />Y</label>
  271. <label class="rdoBtn"><input type="radio" name="changeableYn" id="changeableYnN" value="N"/>N</label>
  272. <input type="hidden" id="changeableYnOrg" name="changeableYnOrg"/>
  273. </td>
  274. <th>신규가입구매가입여부<em class="required" title="필수"></em></th>
  275. <td>
  276. <label class="rdoBtn"><input type="radio" name="newCustOrdYn" id="newCustOrdYnY" value="Y" />Y</label>
  277. <label class="rdoBtn"><input type="radio" name="newCustOrdYn" id="newCustOrdYnN" value="N"/>N</label>
  278. <input type="hidden" id="newCustOrdYnOrg" name="newCustOrdYnOrg"/>
  279. </td>
  280. </tr>
  281. <tr>
  282. <th>배송비정책<em class="required" title="필수"></em></th>
  283. <td>
  284. <select name="delvFeeCd">
  285. </select>
  286. <input type="hidden" id="delvFeeCdOrg" name="delvFeeCdOrg"/>
  287. </td>
  288. <th>기본배송비</th>
  289. <td>
  290. <input type="text" class="w100 aR" id="delvFee" name="delvFee" disabled="disabled"/> 원
  291. </td>
  292. <th>무료배송비기준</th>
  293. <td>
  294. <input type="text" class="w100 aR" id="minOrdAmt" name="minOrdAmt" disabled="disabled"/> 원
  295. </td>
  296. </tr>
  297. <tr>
  298. <th>PC포인트<em class="required" title="필수"></em></th>
  299. <td>
  300. <input type="text" class="w50 aR" id="pntPrate" name="pntPrate" data-valid-type="numeric" maxlength="3"/> % /&nbsp;
  301. <input type="hidden" id="pntPrateOrg" name="pntPrateOrg"/>
  302. <label class="rdoBtn"><input type="radio" name="prePpntUsableYn" id="prePpntUsableYnY" value="Y"/>Y</label>
  303. <label class="rdoBtn"><input type="radio" name="prePpntUsableYn" id="prePpntUsableYnN" value="N"/>N</label>
  304. <input type="hidden" id="prePpntUsableYnOrg" name="prePpntUsableYnOrg"/>
  305. </td>
  306. <th>모바일포인트<em class="required" title="필수"></em></th>
  307. <td>
  308. <input type="text" class="w50 aR" id="pntMrate" name="pntMrate" data-valid-type="numeric" maxlength="3"/> % /&nbsp;
  309. <input type="hidden" id="pntMrateOrg" name="pntMrateOrg"/>
  310. <label class="rdoBtn"><input type="radio" name="preMpntUsableYn" id="preMpntUsableYnY" value="Y"/>Y</label>
  311. <label class="rdoBtn"><input type="radio" name="preMpntUsableYn" id="preMpntUsableYnN" value="N"/>N</label>
  312. <input type="hidden" id="preMpntUsableYnOrg" name="preMpntUsableYnOrg"/>
  313. </td>
  314. <th>성인용품여부<em class="required" title="필수"></em></th>
  315. <td>
  316. <label class="rdoBtn"><input type="radio" name="adultYn" id="adultYnY" value="Y" />Y</label>
  317. <label class="rdoBtn"><input type="radio" name="adultYn" id="adultYnN" value="N"/>N</label>
  318. <input type="hidden" id="adultYnOrg" name="adultYnOrg"/>
  319. </td>
  320. </tr>
  321. <tr>
  322. <th>최소주문수량<em class="required" title="필수"></em></th>
  323. <td>
  324. <input type="text" class="w100 aR" id="minOrdQty" name="minOrdQty" data-valid-type="integer" maxlength="5"/>
  325. <input type="hidden" id="minOrdQtyOrg" name="minOrdQtyOrg"/>
  326. </td>
  327. <th>최대주문수량<em class="required" title="필수"></em></th>
  328. <td>
  329. <input type="text" class="w100 aR" id="maxOrdQty" name="maxOrdQty" data-valid-type="integer" maxlength="5"/>
  330. <input type="hidden" id="maxOrdQtyOrg" name="maxOrdQtyOrg"/>
  331. </td>
  332. <th>ID당1일최대구매수량<em class="required" title="필수"></em></th>
  333. <td>
  334. <input type="text" class="w100 aR" id="dayMaxOrdQty" name="dayMaxOrdQty" data-valid-type="integer" maxlength="5"/>
  335. <input type="hidden" id="dayMaxOrdQtyOrg" name="dayMaxOrdQtyOrg"/>
  336. </td>
  337. </tr>
  338. <tr>
  339. <th>구매등급</th>
  340. <td colspan="5">
  341. <div id="goodsCustGradeList"></div>
  342. </td>
  343. </tr>
  344. <tr>
  345. <th>안전인증번호</th>
  346. <td colspan="5">
  347. <input type="text" class="w150" id="certNum" name="certNum" maxlength="20"/>
  348. <input type="hidden" id="certNumOrg" name="certNumOrg"/>
  349. <button type="button" class="btn btn-success btn-lg" id="btnGoodsSafetyCertNum">안전인증</button>
  350. </td>
  351. </tr>
  352. </tbody>
  353. </table>
  354. </div>
  355. <!-- //TAB1 CONTENTS AREA -->
  356. </li>
  357. <!-- //TAB1 -->
  358. <!-- TAB2 : 옵셥/재고 -->
  359. <li class="tab" id="goodstab2">
  360. <!-- TAB2 CONTENTS AREA -->
  361. <div class="panelStyle">
  362. <!-- <ul class="notice cBlue">
  363. <li><strong>상품 이미지 사이즈</strong> : <em><strong>600 × 600</strong> px</em></li>
  364. </ul> -->
  365. <div id="sizeStockArea"></div>
  366. </div>
  367. <!-- //TAB2 CONTENTS AREA -->
  368. </li>
  369. <!-- //TAB2 : 이미지/옵셥/재고 -->
  370. <!-- TAB3 : 상품상세 -->
  371. <li class="tab" id="goodstab3">
  372. <!-- TAB3 CONTENTS AREA -->
  373. <div class="panelStyle">
  374. <table class="frmStyle">
  375. <colgroup>
  376. <col width="12%"/>
  377. <col/>
  378. </colgroup>
  379. <tr>
  380. <th>상세설명</th>
  381. <td><label class="chkBox"><input type="checkbox" name="chkDescKeep" checked="checked" value="Y">정보유지<span></span></label>
  382. </td>
  383. </tr>
  384. </table>
  385. <!-- TABS SPACE -->
  386. <div class="tabsJr">
  387. <!-- TABS NAVI -->
  388. <ul class="tabsJrNav">
  389. <li class="on"><a href="#goodstab11">타이틀/내용/특징</a></li>
  390. <li><a href="#goodstab12">상세html</a></li>
  391. </ul>
  392. <!-- //TABS NAVI -->
  393. <!-- TABS CONTENT -->
  394. <ul class="tabsJrCont">
  395. <!-- TAB11 CONTENTS AREA -->
  396. <!-- TAB -->
  397. <li class="tabJr on" id="goodstab11">
  398. <div class="panelStyle">
  399. <!-- TAB11 CONTENTS AREA -->
  400. <table class="frmStyle">
  401. <colgroup>
  402. <col width="12%"/>
  403. <col/>
  404. </colgroup>
  405. <tr>
  406. <th>타이틀</th>
  407. <td><input type="text" class= "w100p" id="goodsTitlesDesc" name="goodsTitlesDesc" maxlength="100" />
  408. </td>
  409. </tr>
  410. <tr>
  411. <th>내용</th>
  412. <td><div class="tabJrContArea">
  413. <textarea class="textareaR3 summernote" name="goodsContentsDesc" id="goodsContentsDesc"></textarea>
  414. </div>
  415. </td>
  416. </tr>
  417. <tr>
  418. <th>상품 특징</th>
  419. <td><div class="tabJrContArea">
  420. <textarea class="textareaR3 summernote" name="goodsCharacterDesc" id="goodsCharacterDesc"></textarea>
  421. </div>
  422. </td>
  423. </tr>
  424. </table>
  425. </div>
  426. </li>
  427. <li class="tabJr" id="goodstab12">
  428. <div class="panelStyle">
  429. <!-- TAB11 CONTENTS AREA -->
  430. <table class="frmStyle">
  431. <colgroup>
  432. <col width="12%"/>
  433. <col/>
  434. </colgroup>
  435. <tr>
  436. <th>상위(PC)</th>
  437. <td><div class="tabJrContArea">
  438. <textarea class="textareaR4 summernote" name="goodsPcTopDesc" id="goodsPcTopDesc"></textarea>
  439. </div>
  440. </td>
  441. </tr>
  442. <tr>
  443. <th>상위(MOBILE)</th>
  444. <td><div class="tabJrContArea">
  445. <textarea class="textareaR4 summernote" name="goodsMobileTopDesc" id="goodsMobileTopDesc"></textarea>
  446. </div>
  447. </td>
  448. </tr>
  449. <tr>
  450. <th>하위(PC)</th>
  451. <td><div class="tabJrContArea">
  452. <textarea class="textareaR4 summernote" name="goodsPcDownDesc" id="goodsPcDownDesc"></textarea>
  453. </div>
  454. </td>
  455. </tr>
  456. <tr>
  457. <th>하위(MOBILE)</th>
  458. <td><div class="tabJrContArea">
  459. <textarea class="textareaR4 summernote" name="goodsMobileDownDesc" id="goodsMobileDownDesc"></textarea>
  460. </div>
  461. </td>
  462. </tr>
  463. </table>
  464. </div>
  465. </li>
  466. <!-- //TAB -->
  467. </ul>
  468. <!-- //TAB CONTENT -->
  469. </div>
  470. <!-- //TABS SPACE -->
  471. </div>
  472. <!-- //TAB3 CONTENTS AREA -->
  473. </li>
  474. <!-- //TAB3 : 상품상세 -->
  475. <!-- TAB4 : 고시정보 -->
  476. <li class="tab" id="goodstab4">
  477. <!-- TAB5 CONTENTS AREA -->
  478. <div class="panelStyle">
  479. <!-- TABS SPACE -->
  480. <table class="frmStyle">
  481. <colgroup>
  482. <col style="width:10%"/>
  483. <col/>
  484. </colgroup>
  485. <tr>
  486. <th>Details (상품상세정보 고시)<em class="required" title="필수"></em></th>
  487. <td>
  488. <select id="selNiClsfCd" name="selNiClsfCd" class="w40p">
  489. <option value="">[선택]</option>
  490. <option th:if="${niClsfCdList}" th:each="oneData, status : ${niClsfCdList}" th:value="${oneData.cd}" th:text="${oneData.cdNm}"></option>
  491. </select>
  492. <button type="button" class="btn btn-dark btn-lg" id="btnNotinfo">선택</button>
  493. <span class="padL10" id='itemkindNoti'></span>
  494. </td>
  495. </tr>
  496. </table>
  497. <hr/>
  498. <div id="notiArea"></div>
  499. <!-- //TABS SPACE -->
  500. </div>
  501. <!-- //TAB4 CONTENTS AREA -->
  502. </li>
  503. <!-- //TAB4 : 고시정보 -->
  504. <!-- 구성상품 -->
  505. <li class="tab" id="goodstab5">
  506. <!-- TAB6 CONTENTS AREA -->
  507. <div class="panelStyle">
  508. <!-- 내용 삽입 -->
  509. <ul class="panelBar" id="GoodsComposeBtnArea">
  510. <li class="right">
  511. <button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF003');">양식다운로드</button>
  512. <button type="button" class="btn btn-success btn-lg" id="btnGoodsDealSearchExcel">엑셀조회</button>
  513. <button type="button" class="btn btn-base btn-lg" onclick="fnOpenGoodsDetailPopup()">상품조회</button>
  514. </li>
  515. </ul>
  516. <div id="gridGoodsComposeList" style="height: 600px;" class="ag-theme-balham lh60"></div>
  517. <!-- 내용 삽입 -->
  518. </div>
  519. <!-- //TAB6 CONTENTS AREA -->
  520. </li>
  521. <!-- TAB5 : 이력정보 -->
  522. <li class="tab" id="goodstab6">
  523. <!-- TAB8 CONTENTS AREA -->
  524. <div class="panelStyle">
  525. <!-- 내용 삽입 -->
  526. <div id="gridGoodsHstoryList" style="height: 600px;" class="ag-theme-balham"></div>
  527. <!-- 내용 삽입 -->
  528. </div>
  529. <!-- //TAB5 CONTENTS AREA -->
  530. </li>
  531. <!-- //TAB5 : 추가정보 -->
  532. </ul>
  533. <!-- //TABS CONTENTS -->
  534. <!-- TABS BUTTON AREA -->
  535. <ul class="panelBar marT10">
  536. <li class="left">
  537. <button type="button" class="btn btnLeft btn-base btn-lg" id="btnGoodsDetailPreview">미리보기</button>
  538. <!-- <button type="button" class="btn btnLeft btn-base btn-lg" id="btnGoodsDetailImg">이미지보기</button> -->
  539. </li>
  540. <li class="right">
  541. <th:block th:if="${sessionInfo.roleCd == 'G001_0000' OR sessionInfo.roleCd == 'G001_A000' OR sessionInfo.roleCd == 'G001_A101' OR sessionInfo.roleCd == 'G001_A100' OR sessionInfo.roleCd == 'G001_A001'}">
  542. <button type="button" class="btn btnRight btn-success btn-lg" id="btnGoodsDetailSave">저장</button>
  543. </th:block>
  544. </li>
  545. </ul>
  546. <!-- //TABS BUTTON AREA -->
  547. </div>
  548. <!-- //TABS SPACE -->
  549. </div> <!-- class=panelContent -->
  550. </form>
  551. </div> <!-- class=panelStyle -->
  552. </div> <!-- class=modalPopup -->
  553. <script type="text/javascript" src="/ux/plugins/summernote/summernote.js?v=2020103001"></script>
  554. <script type="text/javascript" src="/ux/plugins/gaga/gaga.summernote.js?v=2020103001"></script>
  555. <script th:inline="javascript">
  556. /*<![CDATA[*/
  557. var sessRoleCd = [[${sessionInfo.roleCd}]];
  558. var formalGbList = gagajf.convertToArray([[${formalGbList}]]);
  559. var goodsStatList = gagajf.convertToArray([[${goodsStatList}]]);
  560. var itemkindList = gagajf.convertToArray([[${itemkindList}]]);
  561. var authBrandList = [[${authBrandList}]];
  562. var useYnList = gagajf.convertToArray([[${useYnList}]]);
  563. var goodsTypeList = gagajf.convertToArray([[${goodsTypeList}]]);
  564. // Get a SmartEditor options
  565. //var seOptions = gagaSe.getEditorOptions();
  566. // specify the columns - 상품변경이력
  567. var columnGoodsHstoryDefs = [
  568. {headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
  569. {headerName: "변경일자", field: "regDt", width: 130, cellClass: 'text-center' ,
  570. cellRenderer: function(params) {
  571. return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
  572. }
  573. },
  574. {headerName: "변경자", field: "regNm", width: 100, cellClass: 'text-center'},
  575. {headerName: "판매가", field: "currPrice" , width: 100, cellClass: 'text-right'
  576. ,valueFormatter: function(params) { return Number(params.value).addComma();}
  577. },
  578. {headerName: "변경전판매가", field: "currBprice" , width: 100, cellClass: 'text-right'
  579. ,valueFormatter: function(params) { return Number(params.value).addComma(); }
  580. },
  581. {headerName: "상품상태", field: "goodsStat" , width: 100, cellClass: 'text-center',
  582. cellEditorParams: { values: gagaAgGrid.extractValues(goodsStatList) },
  583. valueFormatter: function (params) { return gagaAgGrid.lookupValue(goodsStatList, params.value); },
  584. valueParser: function (params) { return gagaAgGrid.lookupKey(goodsStatList, params.newValue); }
  585. },
  586. {headerName: "상품명", field: "goodsNm" , width: 180, cellClass: 'text-left'},
  587. {headerName: "상품타이틀", field: "goodsTnm" , width: 180, cellClass: 'text-left'},
  588. /* {headerName: "상품검색어", field: "goodsSnm" , width: 180, cellClass: 'text-left'}, */
  589. {headerName: "정상이월구분", field: "formalGb" , width: 100, cellClass: 'text-center',
  590. cellEditorParams: { values: gagaAgGrid.extractValues(formalGbList) },
  591. valueFormatter: function (params) { return gagaAgGrid.lookupValue(formalGbList, params.value); },
  592. valueParser: function (params) { return gagaAgGrid.lookupKey(formalGbList, params.newValue); }
  593. },
  594. {headerName: "품목", field: "itemkindCd" , width: 180, cellClass: 'text-left',
  595. cellEditorParams: { values: gagaAgGrid.extractValues(itemkindList) },
  596. valueFormatter: function (params) { return gagaAgGrid.lookupValue(itemkindList, params.value); },
  597. valueParser: function (params) { return gagaAgGrid.lookupKey(itemkindList, params.newValue); }
  598. },
  599. {headerName: "최초승인일자", field: "frstCfrmDt", width: 150, cellClass: 'text-center' ,
  600. cellRenderer: function(params) {
  601. return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
  602. }
  603. },
  604. {headerName: "재고연동여부", field: "erpStockLinkYn" , width: 100, cellClass: 'text-center'},
  605. {headerName: "자사몰노출여부", field: "selfMallYn" , width: 120, cellClass: 'text-center'},
  606. {headerName: "선물주문여부", field: "giftPackYn" , width: 120, cellClass: 'text-center'},
  607. {headerName: "판매수수료율", field: "sellFeeRate" , width: 120, cellClass: 'text-right'},
  608. {headerName: "사용자검색어", field: "goodsSnm1" , width: 150, cellClass: 'text-left'},
  609. {headerName: "검색어", field: "goodsSnm" , width: 450, cellClass: 'text-left', tooltipField: "goodsSnm"}
  610. ];
  611. // specify the columns - 구성상품
  612. var columnGoodsComposeDefs = [
  613. {headerName: "정렬", field: "dispOrd", width: 70 ,hide: false, cellClass: 'text-center', rowDrag: true },
  614. {headerName: "CRUD", field: "crud", width: 75, minWidth: 75, hide: true},
  615. //{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
  616. {headerName: "이미지", field: "sysImgNm", width: 100, height: 60, cellClass: 'text-center'
  617. ,cellRenderer: function(params) {
  618. return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \''+ _goodsUrl+ "/" + params.value +'\')" onerror="this.src=\'/image/no.gif\';"/>';
  619. }
  620. },
  621. {headerName: "상품타입", field: "goodsType" , width: 100, cellClass: 'text-center',
  622. cellEditorParams: { values: gagaAgGrid.extractValues(goodsTypeList) },
  623. valueFormatter: function (params) { return gagaAgGrid.lookupValue(goodsTypeList, params.value); },
  624. valueParser: function (params) { return gagaAgGrid.lookupKey(goodsTypeList, params.newValue); }
  625. },
  626. {headerName: "구성상품코드", field: "compsGoodsCd" , width: 130, cellClass: 'text-center'},
  627. {headerName: "구성상품코드명", field: "compsGoodsNm" , width: 200, cellClass: 'text-left'},
  628. //{headerName: "순서", field: "dispOrd" , width: 80, cellClass: 'text-right',editable: true, required: true},
  629. {headerName: "수량", field: "qty" , width: 80, cellClass: 'text-right'
  630. ,valueFormatter: function(params) { return Number(params.value).addComma();}
  631. },
  632. {headerName: "판매가", field: "currPrice" , width: 100, cellClass: 'text-right'
  633. ,valueFormatter: function(params) { return Number(params.value).addComma();}
  634. },
  635. {headerName: "상품판매가", field: "compsCurrPrice" , width: 100, cellClass: 'text-right'
  636. ,valueFormatter: function(params) { return Number(params.value).addComma();}, editable: true, required: true,
  637. cellEditor: 'textCellEditor',
  638. cellEditorParams: { maxlength: 14, validType: 'numeric'}
  639. },
  640. {headerName: "상품판매가ORG", field: "compsCurrPriceOrg" , width: 100, cellClass: 'text-right', hide: true},
  641. {headerName: "기준여부(품목-카테고리)", field: "baseYn", width: 160, cellClass: 'text-center'
  642. },
  643. {headerName: "대표여부(가격)", field: "repYn", width: 160, cellClass: 'text-center',editable: true,
  644. cellEditor: 'agRichSelectCellEditor',
  645. cellEditorParams: { values: gagaAgGrid.extractValues(useYnList), required: true },
  646. valueFormatter: function (params) { return gagaAgGrid.lookupValue(useYnList, params.value); },
  647. valueParser: function (params) { return gagaAgGrid.lookupKey(useYnList, params.newValue); }
  648. },
  649. {headerName: "대표상품", field: "repGoodsCd" , width: 100, cellClass: 'text-right', hide: true},
  650. {headerName: "전시여부", field: "useYn", width: 100, cellClass: 'text-center',editable: true,
  651. cellEditor: 'agRichSelectCellEditor',
  652. cellEditorParams: { values: gagaAgGrid.extractValues(useYnList), required: true },
  653. valueFormatter: function (params) { return gagaAgGrid.lookupValue(useYnList, params.value); },
  654. valueParser: function (params) { return gagaAgGrid.lookupKey(useYnList, params.newValue); }
  655. },
  656. {headerName: "옵션명(딜상품용)", field: "compsGoodsOptNm" , width: 200, cellClass: 'text-left',editable: true, required: true},
  657. {headerName: "상품상태", field: "goodsStat" , width: 100, cellClass: 'text-center',
  658. cellEditorParams: { values: gagaAgGrid.extractValues(goodsStatList) },
  659. valueFormatter: function (params) { return gagaAgGrid.lookupValue(goodsStatList, params.value); },
  660. valueParser: function (params) { return gagaAgGrid.lookupKey(goodsStatList, params.newValue); }
  661. },
  662. {headerName: "등록일시", field: "regDt", width: 140, cellClass: 'text-center' ,
  663. cellRenderer: function(params) {
  664. return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
  665. }
  666. },
  667. {headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
  668. {headerName: "수정일시", field: "updDt", width: 140, cellClass: 'text-center' ,
  669. cellRenderer: function(params) {
  670. return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
  671. }
  672. },
  673. {headerName: "수정자", field: "updNm", width: 100, cellClass: 'text-center'}
  674. ];
  675. // Get GridOptions
  676. var gridGoodsHstoryOptions = gagaAgGrid.getGridOptions(columnGoodsHstoryDefs);
  677. gridGoodsHstoryOptions.enableBrowserTooltips = true;
  678. var gridGoodsComposeOptions = gagaAgGrid.getGridOptions(columnGoodsComposeDefs);
  679. gridGoodsComposeOptions.enableBrowserTooltips = true;
  680. // 드래그
  681. gridGoodsComposeOptions.suppressRowClickSelection = true;
  682. gridGoodsComposeOptions.rowDragManaged = true;
  683. gridGoodsComposeOptions.stopEditingWhenGridLosesFocus = true;
  684. //gridGoodsComposeOptions.rowDeselection = true;
  685. //gridGoodsComposeOptions.enableMultiRowDragging = true;
  686. //gridGoodsComposeOptions.rowSelection = 'multiple';
  687. gridGoodsComposeOptions.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
  688. //기준여부 표시
  689. gridGoodsComposeOptions.getRowStyle = function(params) {
  690. if ("Y" == params.data.baseYn) {
  691. return { background: '#1ab394' };
  692. }else{
  693. return { background: '#ffffff' };
  694. }
  695. }
  696. // Row
  697. gridGoodsComposeOptions.onCellValueChanged = function(event) {
  698. var rowIdx = null;
  699. var isChangColor = true;
  700. if (event.colDef.field == "baseYn"){
  701. if (event.data.baseYn == "Y"){
  702. rowIdx = event.rowIndex;
  703. //다른 기준여부 'Y'가 존재하는지 확인
  704. gridGoodsComposeOptions.api.forEachNode(function(rowNode, index) {
  705. if (rowNode.data.baseYn == "Y" && index != rowIdx){
  706. event.data.baseYn = event.oldValue;
  707. gridGoodsComposeOptions.api.updateRowData({update: [event.data]});
  708. isChangColor = false;
  709. return;
  710. }
  711. });
  712. if (!isChangColor){
  713. mcxDialog.alert('다른 구성상품에 기준여부가 선택되어 있습니다.');
  714. return;
  715. }
  716. }
  717. }
  718. if ($("#goodsDetailForm input[name=goodsType]").val() == "G056_D"){
  719. isChangColor = true;
  720. if (event.colDef.field == "repYn"){
  721. if (event.data.repYn == "Y"){
  722. rowIdx = event.rowIndex;
  723. //다른 대표여부 'Y'가 존재하는지 확인
  724. gridGoodsComposeOptions.api.forEachNode(function(rowNode, index) {
  725. if (rowNode.data.repYn == "Y" && index != rowIdx){
  726. event.data.repYn = event.oldValue;
  727. gridGoodsComposeOptions.api.updateRowData({update: [event.data]});
  728. isChangColor = false;
  729. return;
  730. }
  731. });
  732. if (!isChangColor){
  733. mcxDialog.alert('다른 구성상품에 대표여부가 선택되어 있습니다.');
  734. return;
  735. }
  736. }
  737. }
  738. }
  739. }
  740. // 상품상세 조회
  741. var fnGoodsDeailSearch = function() {
  742. $('#goodsDetailForm').find('.tabs .tabsNav li a').attr("style", "color:#888;"); //탭색 초기화
  743. var params = new Object();
  744. params.mode = $('#goodsDetailForm input[name=mode]').val();
  745. params.goodsCd = $('#goodsDetailForm input[name=goodsCd]').val();
  746. cfnAjaxSubmit("/goods/detail", "json", fnGoodDetailSearchCallback, params);
  747. }
  748. var fnGoodDetailSearchCallback = function(result) {
  749. $('#goodsDetailForm').find(".tabsNav > li").removeClass('on');
  750. $('#goodsDetailForm').find(".tabsNav > li").eq(0).addClass('on');
  751. $('#goodsDetailForm').find(".tabsCont > li").removeClass('on');
  752. $('#goodsDetailForm').find(".tabsCont > li").eq(0).addClass('on');
  753. if (result != null){
  754. //기본정보
  755. $('#goodsDetailForm select[name=selSupplyCompCd]').val(result.supplyCompCd);
  756. $('#goodsDetailForm input[name=supplyCompCd]').val(result.supplyCompCd);
  757. $('#goodsDetailForm input[name=brandCd]').val(result.brandCd);
  758. fnBrand(result.supplyCompCd, result.brandCd);
  759. $('#goodsDetailForm').find('#goodsCdTxt').html(result.goodsCd);
  760. $('#goodsDetailForm').find('#supplyGoodsCdTxt').html(result.supplyGoodsCd);
  761. $("#goodsDetailForm input[name=goodsImageYn]").val(result.goodsImageYn);
  762. $("#goodsDetailForm input[name=niClsfCd]").val(result.niClsfCd);
  763. $("#goodsDetailForm select[name=selNiClsfCd]").val(result.niClsfCd);
  764. $("#goodsDetailForm input[name=selfGoodsYn]").val(result.selfGoodsYn);
  765. $('#goodsDetailForm').find('#goodsNumTxt').html(result.goodsNum);
  766. $('#goodsDetailForm input[name=goodsNum]').val(result.goodsNum);
  767. $('#goodsDetailForm select[name=goodsStat]').val(result.goodsStat);
  768. $("#goodsDetailForm input[name=goodsStatOrg]").val(result.goodsStat);
  769. $('#goodsDetailForm').find('#brandGrpNmTxt').html(result.brandGrpNm);
  770. $('#goodsDetailForm select[name=itemkindCd]').val(result.itemkindCd);
  771. $('#goodsDetailForm input[name=orgItemkindCd]').val(result.itemkindCd);
  772. $('#goodsDetailForm select[name=seasonCd]').val(result.seasonCd);
  773. $('#goodsDetailForm input[name=seasonCdOrg]').val(result.seasonCd);
  774. $('#goodsDetailForm select[name=sexGb]').val(result.sexGb);
  775. $('#goodsDetailForm input[name=sexGbOrg]').val(result.sexGb);
  776. $('#goodsDetailForm').find('#makeNmTxt').html(result.makeNm);
  777. $('#goodsDetailForm').find('#styleYearTxt').html(result.styleYear);
  778. $('#goodsDetailForm select[name=goodsGb]').val(result.goodsGb);
  779. $('#goodsDetailForm input[name=goodsGbOrg]').val(result.goodsGb);
  780. $('#goodsDetailForm input[name=mainColorCd]').val(result.mainColorCd);
  781. $("#goodsDetailForm input[name=goodsNm]").val(result.goodsNm);
  782. $('#goodsDetailForm input[name=goodsNmOrg]').val(result.goodsNm);
  783. fnDataLengthCheck('goodsNm',200);
  784. $("#goodsDetailForm input[name=goodsTnm]").val(result.goodsTnm);
  785. $('#goodsDetailForm input[name=goodsTnmOrg]').val(result.goodsTnm);
  786. fnDataLengthCheck('goodsTnm',100);
  787. $("#goodsDetailForm input[name=goodsSnm1]").val(result.goodsSnm1);
  788. $("#goodsDetailForm input[name=goodsSnm1Org]").val(result.goodsSnm1);
  789. fnDataLengthCheck('goodsSnm1',200);
  790. $("#goodsDetailForm textarea[name=goodsSnmTxt]").val(result.goodsSnm);
  791. $("#goodsDetailForm input[name=goodsSnm]").val(result.goodsSnm);
  792. $('#goodsDetailForm').find('#listPriceTxt').html(result.listPrice.addComma());
  793. $('#goodsDetailForm input[name=listPrice]').val(result.listPrice);
  794. $('#goodsDetailForm input[name=currPrice]').val(result.currPrice.addComma());
  795. $('#goodsDetailForm input[name=currPriceOrg]').val(result.currPrice);
  796. $('#goodsDetailForm').find('#dcRateTxt').html(result.dcRate);
  797. $('#goodsDetailForm input[name=dcRate]').val(result.dcRate);
  798. $('#goodsDetailForm input[name=costPrice]').val(result.costPrice.addComma());
  799. $('#goodsDetailForm input[name=costPriceOrg]').val(result.costPrice);
  800. $('#goodsDetailForm').find('#priceUpdDtTxt').html(!gagajf.isNull(result.priceUpdDt) ? result.priceUpdDt.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD") : '');
  801. $('#goodsDetailForm').find('#frstCfrmDtTxt').html(!gagajf.isNull(result.frstCfrmDt) ? result.frstCfrmDt.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD") : '');
  802. $('#goodsDetailForm select[name=distributionGb]').val(result.distributionGb);
  803. $("#goodsDetailForm input[name=distributionGbOrg]").val(result.distributionGb);
  804. $('#goodsDetailForm select[name=ageGrpCd]').val(result.ageGrpCd);
  805. $("#goodsDetailForm input[name=ageGrpCdOrg]").val(result.ageGrpCd);
  806. $('#goodsDetailForm select[name=taxGb]').val(result.taxGb);
  807. $("#goodsDetailForm input[type=radio]").parent().removeClass("checked");
  808. $("#goodsDetailForm input[type=radio]").removeAttr('checked');
  809. if (result.formalGb == "G009_20"){
  810. $("#goodsDetailForm input:radio[name=formalGb]:input[value='G009_20']").trigger('click');
  811. }else{
  812. $("#goodsDetailForm input:radio[name=formalGb]:input[value='G009_10']").trigger('click');
  813. }
  814. if (result.erpPriceLinkYn == "Y"){
  815. $("#goodsDetailForm input:radio[name=erpPriceLinkYn]:input[value='Y']").trigger('click');
  816. }else{
  817. $("#goodsDetailForm input:radio[name=erpPriceLinkYn]:input[value='N']").trigger('click');
  818. }
  819. if (result.selfMallYn == "Y"){
  820. $("#goodsDetailForm input:radio[name=selfMallYn]:input[value='Y']").trigger('click');
  821. }else{
  822. $("#goodsDetailForm input:radio[name=selfMallYn]:input[value='N']").trigger('click');
  823. }
  824. if (result.giftPackYn == "Y"){
  825. $("#goodsDetailForm input:radio[name=giftPackYn]:input[value='Y']").trigger('click');
  826. }else{
  827. $("#goodsDetailForm input:radio[name=giftPackYn]:input[value='N']").trigger('click');
  828. }
  829. if (result.returnableYn == "Y"){
  830. $("#goodsDetailForm input:radio[name=returnableYn]:input[value='Y']").trigger('click');
  831. }else{
  832. $("#goodsDetailForm input:radio[name=returnableYn]:input[value='N']").trigger('click');
  833. }
  834. if (result.changeableYn == "Y"){
  835. $("#goodsDetailForm input:radio[name=changeableYn]:input[value='Y']").trigger('click');
  836. }else{
  837. $("#goodsDetailForm input:radio[name=changeableYn]:input[value='N']").trigger('click');
  838. }
  839. if (result.newCustOrdYn == "Y"){
  840. $("#goodsDetailForm input:radio[name=newCustOrdYn]:input[value='Y']").trigger('click');
  841. }else{
  842. $("#goodsDetailForm input:radio[name=newCustOrdYn]:input[value='N']").trigger('click');
  843. }
  844. if (result.adultYn == "Y"){
  845. $("#goodsDetailForm input:radio[name=adultYn]:input[value='Y']").trigger('click');
  846. }else{
  847. $("#goodsDetailForm input:radio[name=adultYn]:input[value='N']").trigger('click');
  848. }
  849. $('#goodsDetailForm input[name=sellFeeRate]').val(result.sellFeeRate);
  850. $("#goodsDetailForm input[name=sellFeeRateOrg]").val(result.sellFeeRate);
  851. if (result.prePpntUsableYn == "Y"){
  852. $("#goodsDetailForm input:radio[name=prePpntUsableYn]:input[value='Y']").trigger('click');
  853. }else{
  854. $("#goodsDetailForm input:radio[name=prePpntUsableYn]:input[value='N']").trigger('click');
  855. }
  856. if (result.preMpntUsableYn == "Y"){
  857. $("#goodsDetailForm input:radio[name=preMpntUsableYn]:input[value='Y']").trigger('click');
  858. }else{
  859. $("#goodsDetailForm input:radio[name=preMpntUsableYn]:input[value='N']").trigger('click');
  860. }
  861. if (result.changeableYn == "Y"){
  862. $("#goodsDetailForm input:radio[name=changeableYn]:input[value='Y']").trigger('click');
  863. }else{
  864. $("#goodsDetailForm input:radio[name=changeableYn]:input[value='N']").trigger('click');
  865. }
  866. $("#goodsDetailForm input[name=formalGbOrg]").val(result.formalGb);
  867. $("#goodsDetailForm input[name=erpPriceLinkYnOrg]").val(result.erpPriceLinkYn);
  868. $("#goodsDetailForm input[name=selfMallYnOrg]").val(result.selfMallYn);
  869. $("#goodsDetailForm input[name=giftPackYnOrg]").val(result.giftPackYn);
  870. $("#goodsDetailForm input[name=prePpntUsableYnOrg]").val(result.prePpntUsableYn);
  871. $("#goodsDetailForm input[name=preMpntUsableYnOrg]").val(result.preMpntUsableYn);
  872. $("#goodsDetailForm input[name=changeableYnOrg]").val(result.changeableYn);
  873. $("#goodsDetailForm input[name=returnableYnOrg]").val(result.returnableYn);
  874. $("#goodsDetailForm input[name=newCustOrdYnOrg]").val(result.newCustOrdYn);
  875. $("#goodsDetailForm input[name=adultYnOrg]").val(result.adultYn);
  876. $("#goodsDetailForm input[type=radio][checked]").addClass("checked");
  877. //$("#goodsDetailForm input[type=radio][checked]").parent("label").addClass("checked");
  878. //입점상품일 경우
  879. if (result.selfGoodsYn == "N"){
  880. //$('#goodsDetailForm').find('#erplinkarea').hide();
  881. $("#goodsDetailForm").find("#selfGoodsDpTitle").html('원코드');
  882. $("#goodsDetailForm").find("#selfGoodsDpTxt").html('<div id="supplyGoodsCdTxt"></div>');
  883. $('#goodsDetailForm').find('#supplyGoodsCdTxt').html(result.supplyGoodsCd);
  884. $('#goodsDetailForm select[name=distributionGb]').attr('readonly', true);
  885. }
  886. $('#goodsDetailForm input[name=delvFee]').val(result.delvFee.addComma());
  887. $('#goodsDetailForm input[name=pntPrate]').val(result.pntPrate);
  888. $('#goodsDetailForm input[name=pntPrateOrg]').val(result.pntPrate);
  889. $('#goodsDetailForm input[name=pntMrate]').val(result.pntMrate);
  890. $('#goodsDetailForm input[name=pntMrateOrg]').val(result.pntMrate);
  891. $('#goodsDetailForm input[name=minOrdAmt]').val(result.minOrdAmt.addComma());
  892. $('#goodsDetailForm input[name=minOrdQty]').val(result.minOrdQty);
  893. $('#goodsDetailForm input[name=minOrdQtyOrg]').val(result.minOrdQty);
  894. $('#goodsDetailForm input[name=maxOrdQty]').val(result.maxOrdQty);
  895. $('#goodsDetailForm input[name=maxOrdQtyOrg]').val(result.maxOrdQty);
  896. $('#goodsDetailForm input[name=dayMaxOrdQty]').val(result.dayMaxOrdQty);
  897. $('#goodsDetailForm input[name=dayMaxOrdQtyOrg]').val(result.dayMaxOrdQty);
  898. $('#goodsDetailForm input[name=goodsType]').val(result.goodsType);
  899. $("#goodsDetailForm").find("#goodsTypeNm").html(result.goodsTypeNm);
  900. cfnCreateCombo('/renderer/delvFee/list/' + result.supplyCompCd, $('#goodsDetailForm select[name=delvFeeCd]'), "[선택]", result.delvFeeCd);
  901. $('#goodsDetailForm input[name=delvFeeCdOrg]').val(result.delvFeeCd);
  902. $('#goodsDetailForm input[name=certNum]').val(result.certNum);
  903. $('#goodsDetailForm input[name=certNumOrg]').val(result.certNum);
  904. //상품상세
  905. $('#goodsDetailForm input[name=goodsTitlesDesc]').val(result.goodsTitlesDesc);
  906. // Summernote에 값 세팅
  907. gagaSn.setContents('#goodsContentsDesc', result.goodsContentsDesc);
  908. gagaSn.setContents('#goodsCharacterDesc', result.goodsCharacterDesc);
  909. gagaSn.setContents('#goodsPcTopDesc', result.goodsPcTopDesc);
  910. gagaSn.setContents('#goodsMobileTopDesc', result.goodsMobileTopDesc);
  911. gagaSn.setContents('#goodsPcDownDesc', result.goodsPcDownDesc);
  912. gagaSn.setContents('#goodsMobileDownDesc', result.goodsMobileDownDesc);
  913. if (!gagajf.isNull(result.niClsfNm)){
  914. $('#goodsDetailForm').find('#itemkindNoti').html('품목기준 고시분류 : ' + result.niClsfNm);
  915. $('#goodsDetailForm input[name=niClsfNm]').val(result.niClsfNm);
  916. var objNotiInfo = $("#goodsDetailForm select[name=selNiClsfCd] option");
  917. for(var i=0;i<objNotiInfo.length; i++ ){
  918. if (objNotiInfo.eq(i).text() == result.niClsfNm){
  919. objNotiInfo.eq(i).prop("selected","true");
  920. }
  921. }
  922. }
  923. $('#goodsDetailForm').find('#goodsImgUrl').attr('src', _goodsUrl + '/'+ result.sysImgNm);
  924. $('#goodsDetailForm input[name=sysImgNm]').val(result.sysImgNm);
  925. $("#goodsDetailForm input[type=checkbox][checked]").parent("label").addClass("checked");
  926. //품목변경 권한 관련 처리
  927. //md권한
  928. if(sessRoleCd == "G001_A101" || sessRoleCd == "G001_B000"){
  929. var roleFlag = "N";
  930. $.each(authBrandList, function(idx, item) {
  931. if (result.brandCd == item.cd ){
  932. roleFlag = "Y";
  933. return false;
  934. }
  935. });
  936. if (roleFlag == "N"){
  937. $('#goodsDetailForm select[name=itemkindCd]').attr('disabled',true);
  938. $('#goodsDetailForm #btnGoodsItemkindChange').addClass('off');
  939. }
  940. }
  941. //상품 구분에 따른 컬럼 사용여부처리 start
  942. //세트
  943. if ("G056_S" == result.goodsType){
  944. //$('#goodsDetailForm #erplinkarea').addClass('off');
  945. if (result.selfGoodsYn == "Y") $('#goodsDetailForm #goodsComposeTab').css('display','block');
  946. $('#goodsDetailForm #goodsNotiTab').css('display','none');
  947. $('#goodsDetailForm input[name=sellFeeRate]').attr('readonly', true);
  948. $('#goodsDetailForm input[name=currPrice]').attr('readonly', true);
  949. }else if ("G056_D" == result.goodsType){
  950. //$('#goodsDetailForm #erplinkarea').addClass('off');
  951. if (result.selfGoodsYn == "Y") $('#goodsDetailForm #goodsComposeTab').css('display','block');
  952. $('#goodsDetailForm #goodsNotiTab').css('display','none');
  953. $('#goodsDetailForm input[name=sellFeeRate]').attr('readonly', true);
  954. }
  955. //상품 구분에 따른 컬럼 사용여부처리 end
  956. var params = new Object();
  957. params.mode = $('#goodsDetailForm input[name=mode]').val();
  958. params.goodsCd = result.goodsCd;
  959. params.brandCd = result.brandCd;
  960. params.supplyCompCd = result.supplyCompCd;
  961. params.niClsfCd = result.niClsfCd;
  962. params.goodsType = result.goodsType;
  963. params.erpPriceLinkYn = result.erpPriceLinkYn;
  964. //옵셥 재고(ajax html)
  965. fnGoodsDetailSizeStockSearch(params);
  966. //정보고시
  967. fnGoodsDetailNotiInfoSearch(params);
  968. //구매등급
  969. fnGoodsDetailOrderGradeSearch(params);
  970. //구성상품
  971. if ("G056_S" == result.goodsType || "G056_D" == result.goodsType){
  972. fnGoodsComposeListSearch(params);
  973. }
  974. //이력
  975. fnGoodsDetailHstSearch();
  976. }
  977. //기본정보탭 변경여부
  978. $('#goodsDetailForm').find('#goodstab1').find("input, select, textarea").on('change', function() {
  979. $('#goodsDetailForm').find('.tabs .tabsNav li:eq(0) a').attr("style", "color:red;");
  980. });
  981. }
  982. //옵셥 재고
  983. var fnGoodsDetailSizeStockSearch = function(params) {
  984. cfnAjaxSubmit("/goods/detail/sizeStock/form", "html", "sizeStockArea", params);
  985. }
  986. //정보고시
  987. var fnGoodsDetailNotiInfoSearch = function(params) {
  988. cfnAjaxSubmit("/goods/detail/notiInfo/list", "json", fnGoodsDetailNotiInfoSearchCallback, params);
  989. }
  990. //구매등급
  991. var fnGoodsDetailOrderGradeSearch = function(params) {
  992. cfnAjaxSubmit("/goods/detail/order/grade/list", "json", fnGoodsDetailOrderGradeSearchCallback, params);
  993. }
  994. //구성상품
  995. var fnGoodsComposeListSearch = function(params) {
  996. if ("G056_S" == params.goodsType){ //세트
  997. gagaAgGrid.showOrHideColumn(gridGoodsComposeOptions, 'currPrice', false);
  998. gagaAgGrid.showOrHideColumn(gridGoodsComposeOptions, 'useYn', false);
  999. gagaAgGrid.showOrHideColumn(gridGoodsComposeOptions, 'compsGoodsOptNm', false);
  1000. gagaAgGrid.showOrHideColumn(gridGoodsComposeOptions, 'repYn', false);
  1001. $('#GoodsComposeBtnArea').addClass("off");
  1002. }else{ //딜
  1003. gagaAgGrid.showOrHideColumn(gridGoodsComposeOptions, 'qty', false);
  1004. gagaAgGrid.showOrHideColumn(gridGoodsComposeOptions, 'compsCurrPrice', false);
  1005. gagaAgGrid.showOrHideColumn(gridGoodsComposeOptions, 'compsCurrPriceOrg', false);
  1006. }
  1007. gagaAgGrid.fetch("/goods/detail/compose/list?goodsCd=" + params.goodsCd , gridGoodsComposeOptions);
  1008. }
  1009. //이력
  1010. var fnGoodsDetailHstSearch = function() {
  1011. gagaAgGrid.fetch("/goods/detail/hst/list?goodsCd=" + $('#goodsDetailForm input[name=goodsCd]').val() , gridGoodsHstoryOptions);
  1012. }
  1013. //정보고시 콜백
  1014. var fnGoodsDetailNotiInfoSearchCallback = function(result) {
  1015. if (result == null) return;
  1016. var notiHtml = "";
  1017. var idx = 0;
  1018. $('#goodsDetailForm').find('#notiArea').html('');
  1019. notiHtml += '<table class="frmStyle">';
  1020. notiHtml += '<colgroup><col style="width:20%"/><col/><col style="width:5%"/><col style="width:5%"/></colgroup>';
  1021. notiHtml += '<tbody id="infoContents">\n';
  1022. notiHtml += '<tr><th>고시항목</th><th>고시내용</th><th>필수여부</th><th>전시여부</th></tr>';
  1023. result.forEach(function(info){
  1024. notiHtml += '<tr><th>'+ gagajf.convNull(info.niItemNm, '') +'<input type="hidden" name="niItemCd" value="'+ gagajf.convNull(info.niItemCd, '') +'" />\n<input type="hidden" name="dispOrd" value="'+ gagajf.convNull(info.dispOrd, '') +'" /></th>';
  1025. notiHtml += '<td><input type="text" name="niContent" value="'+ gagajf.convNull(info.niContent, '') +'"/></td>\n';
  1026. notiHtml += '<td class="aC">'+gagajf.convNull(info.reqYn, '')+'<input type="hidden" name="reqYn" value="'+ gagajf.convNull(info.reqYn, '') +'"/></td>\n';
  1027. notiHtml += '<td class="aC">'+gagajf.convNull(info.dispYn, '')+'<input type="hidden" name="dispYn" value="'+ gagajf.convNull(info.dispYn, '') +'"/></td>\n';
  1028. notiHtml += '</tr>\n';
  1029. });
  1030. notiHtml += '</tbody></table>';
  1031. $('#goodsDetailForm').find('#notiArea').append(notiHtml);
  1032. //고시정보탭 변경여부
  1033. $('#goodsDetailForm').find('#goodstab4').find("input, select, textarea").on('change', function() {
  1034. $('#goodsDetailForm').find('.tabs .tabsNav li:eq(3) a').attr("style", "color:red;");
  1035. });
  1036. }
  1037. //구매등급 콜백
  1038. var fnGoodsDetailOrderGradeSearchCallback = function(result) {
  1039. if (result == null) return;
  1040. result.forEach(function(info){
  1041. $("#goodsDetailForm #goodsCustGradeList").find("input").each(function() {
  1042. if (info.custGrade == $(this).val() ){
  1043. $(this).prop("checked", true);
  1044. $(this).parent("label").addClass("checked");
  1045. }
  1046. });
  1047. });
  1048. }
  1049. //상품명 길이표시
  1050. $("#goodsDetailForm input[name=goodsNm]").bind('focus focusout input keyup keydown paste change', function () {
  1051. fnDataLengthCheck('goodsNm',200);
  1052. });
  1053. //상품타이틀 길이표시
  1054. $("#goodsDetailForm input[name=goodsTnm]").bind('focus focusout input keyup keydown paste change', function () {
  1055. fnDataLengthCheck('goodsTnm',100);
  1056. });
  1057. //사용자검색어 길이표시
  1058. $("#goodsDetailForm input[name=goodsSnm1]").bind('focus focusout input keyup keydown paste change', function () {
  1059. fnDataLengthCheck('goodsSnm1',200);
  1060. });
  1061. //판매가 변경시 할인율 계산
  1062. $("#goodsDetailForm input[name=currPrice]").bind('focusout paste', function () {
  1063. fnCurrPriceCheck();
  1064. });
  1065. //판매가의 할인율 확인
  1066. var fnCurrPriceCheck = function(){
  1067. var dcRate = 0;
  1068. var listPrice = $("#goodsDetailForm input[name=listPrice]").val().removeComma();
  1069. var currPrice = $("#goodsDetailForm input[name=currPrice]").val().removeComma();
  1070. dcRate = 100 - Math.floor(Number(currPrice) / Number(listPrice) * 100); //절사
  1071. $("#goodsDetailForm").find("#dcRateTxt").html(dcRate);
  1072. $("#goodsDetailForm input[name=dcRate]").val(dcRate);
  1073. }
  1074. //판매가의 할인율 확인
  1075. /* var fnCurrPriceCheck_org = function(){
  1076. var dcRate = 0;
  1077. var listPrice = $("#goodsDetailForm input[name=listPrice]").val().removeComma();
  1078. var currPrice = $("#goodsDetailForm input[name=currPrice]").val().removeComma();
  1079. //dcRate = Math.round(100 - Math.floor((Number(currPrice) / Number(listPrice) * 100)*100)/100);
  1080. //dcRate = 100 - (Number((Number(currPrice) / Number(listPrice)).toFixed(2)) *100);
  1081. dcRate = 100 - Math.floor(Number(currPrice) / Number(listPrice) * 100);
  1082. if (dcRate < 0){
  1083. mcxDialog.alert('할인율이 0보다 작습니다.\n판매가를 확인해주세요.', function(){
  1084. $("#goodsDetailForm input[name=currPrice]").focus();
  1085. });
  1086. return false;
  1087. }else if (dcRate >= 90){
  1088. gagaAlert.confirm("할인율이 90%이상입니다. 계속하시겠습니까?", function(){
  1089. $("#goodsDetailForm").find("#dcRateTxt").html(dcRate);
  1090. $("#goodsDetailForm input[name=dcRate]").val(dcRate);
  1091. return true;
  1092. },
  1093. function(){
  1094. $('#goodsDetailForm input[name=currPrice]').val($('#goodsDetailForm input[name=currPriceOrg]').val().addComma());
  1095. return false;
  1096. });
  1097. }else{
  1098. $("#goodsDetailForm").find("#dcRateTxt").html(dcRate);
  1099. $("#goodsDetailForm input[name=dcRate]").val(dcRate);
  1100. return true;
  1101. }
  1102. } */
  1103. // 브랜드 조회
  1104. var fnBrand = function(supplyCompCd, brandCd) {
  1105. var actionUrl = '/renderer/supplyCompany/brand/list/' + supplyCompCd;
  1106. if(sessRoleCd == "G001_B000"){
  1107. actionUrl = '/renderer/brand/AuthBrandlist';
  1108. }
  1109. $("#goodsDetailForm select[name=selBrandCd] option:gt(0)").remove();
  1110. cfnCreateCombo(actionUrl, $('#goodsDetailForm select[name=selBrandCd]'), "[선택]", brandCd);
  1111. }
  1112. //데이터 길이 확인
  1113. var fnDataLengthCheck = function(id , maxByte){
  1114. var maximumByte = maxByte;
  1115. var strLenEng = $('#goodsDetailForm').find('#'+id).val().length;
  1116. var cbyteStr = 0;
  1117. var liLenStr = 0;
  1118. for (i = 0; i < strLenEng; i++) {
  1119. var lsOneChar = $('#goodsDetailForm').find('#'+id).val().charAt(i);
  1120. if (lsOneChar == "\n" || lsOneChar == "\'") {
  1121. cbyteStr += 5; //엔터면 5를 더한다
  1122. } else if (lsOneChar == "\"") {
  1123. cbyteStr += 6; //쌍따옴표면 6를 더한다
  1124. } else if (escape(lsOneChar).length > 4) {
  1125. cbyteStr += 3; //한글이면 3를 더한다
  1126. } else {
  1127. cbyteStr++; //한글아니면 1을 다한다
  1128. }
  1129. if (cbyteStr <= maximumByte) {
  1130. liLenStr = i + 1;
  1131. }
  1132. }
  1133. // 사용자가 입력한 값이 제한 값을 초과하는지를 검사한다.
  1134. if (parseInt(cbyteStr) > parseInt(maximumByte)) {
  1135. mcxDialog.alertC('허용된 글자수가 초과되었습니다.\n초과된 부분은 자동으로 삭제됩니다.', {
  1136. sureBtnText: "확인",
  1137. sureBtnClick: function() {
  1138. $('#goodsDetailForm').find('#'+id).focus();
  1139. }
  1140. });
  1141. var str = $('#goodsDetailForm').find('#'+id).val().substr(0, liLenStr);
  1142. $('#goodsDetailForm').find('#'+id).val(str);
  1143. var cbyteStr = 0;
  1144. for (i = 0; i < $('#goodsDetailForm').find('#'+id).val().length; i++) {
  1145. var lsOneChar = $('#goodsDetailForm').find('#'+id).val().charAt(i);
  1146. if (lsOneChar == "\n" || lsOneChar == "\'") {
  1147. cbyteStr += 5; //엔터면 5를 더한다
  1148. } else if (lsOneChar == "\"") {
  1149. cbyteStr += 6; //쌍따옴표면 6를 더한다
  1150. } else if (escape(lsOneChar).length > 4) {
  1151. cbyteStr += 3; //한글이면 3를 더한다
  1152. } else {
  1153. cbyteStr++; //한글아니면 1을 다한다
  1154. }
  1155. }
  1156. }
  1157. $('#goodsDetailForm').find('#'+id+'Len').text(cbyteStr);
  1158. }
  1159. //상품저장 버튼 클릭 시
  1160. $('#btnGoodsDetailSave').click(function() {
  1161. var optCheck = false;
  1162. var idx = 0;
  1163. //상품상태가 승인대기나 승인 완료일 경우
  1164. if($("#goodsDetailForm select[name=goodsStat]").val() == "G008_40" || $("#goodsDetailForm select[name=goodsStat]").val() == "G008_90"){
  1165. // SUPER관리자, 어드민관리자, 계정관리자. 총괄관리자, MD 를 제외하고 승인처리 할수 없음
  1166. if ("G001_0000" != sessRoleCd && "G001_A000" != sessRoleCd && "G001_A001" != sessRoleCd && "G001_A100" != sessRoleCd && "G001_A101" != sessRoleCd ){
  1167. if ($("#goodsDetailForm select[name=goodsStat]").val() == "G008_90" && $("#goodsDetailForm select[name=goodsStatOrg]").val() != "G008_90"){
  1168. mcxDialog.alert(" '승인완료' 상태로 변경할 권한이 없습니다.");
  1169. return false;
  1170. }
  1171. }
  1172. //list가 등록되지 않은 상품은 상태변경 불가
  1173. if(Number($("#goodsDetailForm input[name=listPrice]").val()) == 0){
  1174. mcxDialog.alertC("TAG가 등록되지 않은 상품은 '승인대기'나 '승인완료' 상태로 변경할 수 없습니다.", {
  1175. sureBtnText: "확인",
  1176. sureBtnClick: function() {
  1177. $("#goodsDetailForm select[name=goodsStat]").focus();
  1178. }
  1179. });
  1180. return false;
  1181. }
  1182. //판매가가 0인 상품은 상태변경 불가
  1183. if((gagajf.isNull($("#goodsDetailForm input[name=currPrice]").val()) || $("#goodsDetailForm input[name=currPrice]").val() == 0)){
  1184. mcxDialog.alertC("판매가가 등록되지 않은 상품은 '승인대기'나 '승인완료' 상태로 변경할 수 없습니다.", {
  1185. sureBtnText: "확인",
  1186. sureBtnClick: function() {
  1187. $("#goodsDetailForm select[name=goodsStat]").focus();
  1188. }
  1189. });
  1190. return;
  1191. }
  1192. //사이즈정보가 등록되지 않은 상품은 상태변경 불가
  1193. if($("#goodsDetailForm #sizeStockArea").find("#optionList tr").length == 0){
  1194. mcxDialog.alertC("사이즈정보가 등록되지 않은 상품은 '승인대기'나 '승인완료' 상태로 변경할 수 없습니다.", {
  1195. sureBtnText: "확인",
  1196. sureBtnClick: function() {
  1197. $("#goodsDetailForm select[name=goodsStat]").focus();
  1198. }
  1199. });
  1200. return;
  1201. }
  1202. //이미지가 등록되지 않은 상품은 상태변경 불가
  1203. if($("#goodsDetailForm input[name=goodsImageYn]").val() == "N"){
  1204. mcxDialog.alertC("이미지가 등록되지 않은 상품은 '승인대기'나 '승인완료' 상태로 변경할 수 없습니다.", {
  1205. sureBtnText: "확인",
  1206. sureBtnClick: function() {
  1207. $("#goodsDetailForm select[name=goodsStat]").focus();
  1208. }
  1209. });
  1210. return;
  1211. }
  1212. //고시정보가 등록되지 않은 상품은 상태변경 불가 - 일반상품만 체크
  1213. if ("G056_N" == $("#goodsDetailForm input[name=goodsType]").val()){
  1214. if($("#goodsDetailForm #notiArea").find("#infoContents tr").length == 0){
  1215. mcxDialog.alertC("고시정보가 등록되지 않은 상품은 '승인대기'나 '승인완료' 상태로 변경할 수 없습니다.", {
  1216. sureBtnText: "확인",
  1217. sureBtnClick: function() {
  1218. $("#goodsDetailForm select[name=goodsStat]").focus();
  1219. }
  1220. });
  1221. return;
  1222. }
  1223. idx = 0;
  1224. $("#goodsDetailForm #notiArea").find("#infoContents tr").each(function() {
  1225. if ("Y" == $(this).find("input[name=reqYn]").val() || "Y" == $(this).find("input[name=dispYn]").val()){
  1226. if (gagajf.isNull($(this).find("input[name=niContent]").val())){
  1227. optCheck = true;
  1228. mcxDialog.alertC("고시정보를 입력해주세요.");
  1229. return false;
  1230. }
  1231. }
  1232. idx++;
  1233. });
  1234. }
  1235. // 자사일 경우 대표색상 선택 여부
  1236. if ("Y" == $('#goodsDetailForm input[name=selfGoodsYn]').val()){
  1237. if($("#goodsDetailForm input[name=basicColor]:checked").length == 0) {
  1238. mcxDialog.alert("대표색상을 선택해주세요.")
  1239. return false;
  1240. }
  1241. }
  1242. }
  1243. if(optCheck) {
  1244. return false;
  1245. }
  1246. //상품명
  1247. if(gagajf.isNull($("#goodsDetailForm input[name=goodsNm]").val())){
  1248. mcxDialog.alertC("상품명을 입력해 주세요.", {
  1249. sureBtnText: "확인",
  1250. sureBtnClick: function() {
  1251. $("#goodsDetailForm input[name=goodsNm]").focus();
  1252. }
  1253. });
  1254. return;
  1255. }
  1256. //상품상태
  1257. if(gagajf.isNull($("#goodsDetailForm select[name=goodsStat]").val())){
  1258. mcxDialog.alertC("상품상태를 선택해 주세요.", {
  1259. sureBtnText: "확인",
  1260. sureBtnClick: function() {
  1261. $("#goodsDetailForm select[name=goodsStat]").focus();
  1262. }
  1263. });
  1264. return;
  1265. }
  1266. //성별
  1267. if(gagajf.isNull($("#goodsDetailForm select[name=sexGb]").val())){
  1268. mcxDialog.alertC("성별을 선택해 주세요.", {
  1269. sureBtnText: "확인",
  1270. sureBtnClick: function() {
  1271. $("#goodsDetailForm select[name=sexGb]").focus();
  1272. }
  1273. });
  1274. return;
  1275. }
  1276. // 상품구분
  1277. if(gagajf.isNull($("#goodsDetailForm select[name=goodsGb]").val())){
  1278. mcxDialog.alertC("상품구분을 선택해 주세요.", {
  1279. sureBtnText: "확인",
  1280. sureBtnClick: function() {
  1281. $("#goodsDetailForm select[name=goodsGb]").focus();
  1282. }
  1283. });
  1284. return;
  1285. }
  1286. //시즌
  1287. if(gagajf.isNull($("#goodsDetailForm select[name=seasonCd]").val())){
  1288. mcxDialog.alertC("시즌을 선택해 주세요.", {
  1289. sureBtnText: "확인",
  1290. sureBtnClick: function() {
  1291. $("#goodsDetailForm select[name=seasonCd]").focus();
  1292. }
  1293. });
  1294. return;
  1295. }
  1296. //판매가
  1297. if(gagajf.isNull($("#goodsDetailForm input[name=currPrice]").val())) {
  1298. mcxDialog.alertC("판매가를 올바르게 입력해주세요.", {
  1299. sureBtnText: "확인",
  1300. sureBtnClick: function() {
  1301. $("#goodsDetailForm input[name=currPrice]").focus();
  1302. }
  1303. });
  1304. return false;
  1305. }
  1306. /* if(Number($("#goodsDetailForm input[name=currPrice]").val().removeComma()) < 1000) {
  1307. mcxDialog.alertC("판매가는 1000원 이상을 입력하셔야 합니다.", {
  1308. sureBtnText: "확인",
  1309. sureBtnClick: function() {
  1310. $("#goodsDetailForm input[name=currPrice]").focus();
  1311. }
  1312. });
  1313. } */
  1314. //정상가와 판매가 비교
  1315. if ($("#goodsDetailForm input[name=goodsType]").val() != "G056_D"){
  1316. if(Number($("#goodsDetailForm input[name=listPrice]").val().removeComma()) < Number($("#goodsDetailForm input[name=currPrice]").val().removeComma())) {
  1317. mcxDialog.alertC("판매가를 올바르게 입력해주세요.", {
  1318. sureBtnText: "확인",
  1319. sureBtnClick: function() {
  1320. $("#goodsDetailForm input[name=currPrice]").focus();
  1321. }
  1322. });
  1323. return false;
  1324. }
  1325. }
  1326. //판매 수수료율
  1327. if ( gagajf.isNull($("#goodsDetailForm input[name=sellFeeRate]").val())) {
  1328. mcxDialog.alertC("판매수수료를 입력해 주세요.", {
  1329. sureBtnText: "확인",
  1330. sureBtnClick: function() {
  1331. $("#goodsDetailForm input[name=sellFeeRate]").focus();
  1332. }
  1333. });
  1334. return false;
  1335. }
  1336. if(Number($("#goodsDetailForm input[name=sellFeeRate]").val()) < 0 || Number($("#goodsDetailForm input[name=sellFeeRate]").val()) > 100) {
  1337. mcxDialog.alertC("판매수수료를 올바르게 입력해주세요.", {
  1338. sureBtnText: "확인",
  1339. sureBtnClick: function() {
  1340. $("#goodsDetailForm input[name=sellFeeRate]").focus();
  1341. }
  1342. });
  1343. return false;
  1344. }
  1345. // 배송비구분
  1346. if(gagajf.isNull($("#goodsDetailForm select[name=delvFeeCd]").val())){
  1347. mcxDialog.alertC("배송비정책을 선택해 주세요.", {
  1348. sureBtnText: "확인",
  1349. sureBtnClick: function() {
  1350. $("#goodsDetailForm select[name=delvFeeCd]").focus();
  1351. }
  1352. });
  1353. return;
  1354. }
  1355. // 포인트
  1356. if ( gagajf.isNull($("#goodsDetailForm input[name=pntPrate]").val())) {
  1357. mcxDialog.alertC("PC 포인트를 입력해 주세요.", {
  1358. sureBtnText: "확인",
  1359. sureBtnClick: function() {
  1360. $("#goodsDetailForm input[name=pntPrate]").focus();
  1361. }
  1362. });
  1363. return false;
  1364. }
  1365. if(Number($("#goodsDetailForm input[name=pntPrate]").val()) < 0 || Number($("#goodsDetailForm input[name=pntPrate]").val()) > 100) {
  1366. mcxDialog.alertC("PC 포인트를 올바르게 입력해주세요.", {
  1367. sureBtnText: "확인",
  1368. sureBtnClick: function() {
  1369. $("#goodsDetailForm input[name=pntPrate]").focus();
  1370. }
  1371. });
  1372. return false;
  1373. }
  1374. if ( gagajf.isNull($("#goodsDetailForm input[name=pntMrate]").val())) {
  1375. mcxDialog.alertC("MOBILE 포인트를 입력해 주세요.", {
  1376. sureBtnText: "확인",
  1377. sureBtnClick: function() {
  1378. $("#goodsDetailForm input[name=pntMrate]").focus();
  1379. }
  1380. });
  1381. return false;
  1382. }
  1383. if(Number($("#goodsDetailForm input[name=pntMrate]").val()) < 0 || Number($("#goodsDetailForm input[name=pntMrate]").val()) > 100) {
  1384. mcxDialog.alertC("MOBILE 포인트를 올바르게 입력해주세요.", {
  1385. sureBtnText: "확인",
  1386. sureBtnClick: function() {
  1387. $("#goodsDetailForm input[name=pntMrate]").focus();
  1388. }
  1389. });
  1390. return false;
  1391. }
  1392. // 주문수량
  1393. if ( gagajf.isNull($("#goodsDetailForm input[name=minOrdQty]").val())) {
  1394. mcxDialog.alertC("최소주문 수량을 입력해 주세요.", {
  1395. sureBtnText: "확인",
  1396. sureBtnClick: function() {
  1397. $("#goodsDetailForm input[name=minOrdQty]").focus();
  1398. }
  1399. });
  1400. return false;
  1401. }
  1402. if (Number($("#goodsDetailForm input[name=minOrdQty]").val()) <= 0) {
  1403. mcxDialog.alertC("최소주문 수량을 입력해 주세요.", {
  1404. sureBtnText: "확인",
  1405. sureBtnClick: function() {
  1406. $("#goodsDetailForm input[name=minOrdQty]").focus();
  1407. }
  1408. });
  1409. return false;
  1410. }
  1411. if ( gagajf.isNull($("#goodsDetailForm input[name=maxOrdQty]").val())) {
  1412. mcxDialog.alertC("최대주문 수량을 입력해 주세요.", {
  1413. sureBtnText: "확인",
  1414. sureBtnClick: function() {
  1415. $("#goodsDetailForm input[name=maxOrdQty]").focus();
  1416. }
  1417. });
  1418. return false;
  1419. }
  1420. if (Number($("#goodsDetailForm input[name=maxOrdQty]").val()) <= 0) {
  1421. mcxDialog.alertC("최대주문 수량을 입력해 주세요.", {
  1422. sureBtnText: "확인",
  1423. sureBtnClick: function() {
  1424. $("#goodsDetailForm input[name=maxOrdQty]").focus();
  1425. }
  1426. });
  1427. return false;
  1428. }
  1429. if ( gagajf.isNull($("#goodsDetailForm input[name=dayMaxOrdQty]").val())) {
  1430. mcxDialog.alertC("ID당1일최대구매 수량을 입력해 주세요.", {
  1431. sureBtnText: "확인",
  1432. sureBtnClick: function() {
  1433. $("#goodsDetailForm input[name=dayMaxOrdQty]").focus();
  1434. }
  1435. });
  1436. return false;
  1437. }
  1438. if (Number($("#goodsDetailForm input[name=dayMaxOrdQty]").val()) <= 0) {
  1439. mcxDialog.alertC("ID당1일최대구매 수량을 입력해 주세요.", {
  1440. sureBtnText: "확인",
  1441. sureBtnClick: function() {
  1442. $("#goodsDetailForm input[name=dayMaxOrdQty]").focus();
  1443. }
  1444. });
  1445. return false;
  1446. }
  1447. if(Number($("#goodsDetailForm input[name=minOrdQty]").val()) > Number($("#goodsDetailForm input[name=maxOrdQty]").val())){
  1448. mcxDialog.alertC("최소주문수량은 최대주문수량보다 클 수 없습니다.", {
  1449. sureBtnText: "확인",
  1450. sureBtnClick: function() {
  1451. $("#goodsDetailForm input[name=minOrdQty]").focus();
  1452. }
  1453. });
  1454. return false;
  1455. }
  1456. if(Number($("#goodsDetailForm input[name=maxOrdQty]").val()) > Number($("#goodsDetailForm input[name=dayMaxOrdQty]").val())){
  1457. mcxDialog.alertC("최대주문수량이 ID당1일최대구매수량보다 클 수 없습니다.", {
  1458. sureBtnText: "확인",
  1459. sureBtnClick: function() {
  1460. $("#goodsDetailForm input[name=maxOrdQty]").focus();
  1461. }
  1462. });
  1463. return false;
  1464. }
  1465. idx = 0;
  1466. //재고 옵션 관련 확인
  1467. $("#goodsDetailForm input[name=chStockDataYn]").val('N');
  1468. $("#optionList tr").each(function() {
  1469. var optCd1 = $(this).find("input[name=optCd1]").val();
  1470. var optCd2 = $(this).find("input[name=optCd2]").val();
  1471. //var hidOptCd1 = $(this).find("input[name=hidOptCd1]").val();
  1472. //var hidOptCd2 = $(this).find("input[name=hidOptCd2]").val();
  1473. var baseStockQty = $(this).find("input[name=baseStockQty]").val();
  1474. var hidBaseStockQty = $(this).find("input[name=hidBaseStockQty]").val();
  1475. var dispOrd = $(this).find("input[name=dispOrd]").val();
  1476. var hidDispOrd = $(this).find("input[name=hidDispOrd]").val();
  1477. var dispYn = $(this).find("select[name=dispYn]").val();
  1478. var hidDispYn = $(this).find("input[name=hidDispYn]").val();
  1479. var soldoutYn = $(this).find("select[name=soldoutYn]").val();
  1480. var hidSoldoutYn = $(this).find("input[name=hidSoldoutYn]").val();
  1481. var editCurrStockQty = $(this).find("input[name=editCurrStockQty]").val(); // 입점 확인용
  1482. var currStockQty = $(this).find("input[name=currStockQty]").val(); // 입점 확인용 (hidden)
  1483. if(gagajf.isNull(dispOrd)){
  1484. optCheck = true;
  1485. mcxDialog.alertC("우선순위를 입력해주세요", {
  1486. sureBtnText: "확인",
  1487. sureBtnClick: function() {
  1488. $("#optionList tr").find("input[name=dispOrd]").eq(idx).focus();
  1489. }
  1490. });
  1491. return false;
  1492. }
  1493. //ERP재고연동여부가 'Y'일 경우 수정여부 확인
  1494. /* if ( $('#goodsDetailForm input[name=erpStockLinkYn]:checked').val() == "Y"){
  1495. if (Number(editCurrStockQty) != Number(currStockQty) ){
  1496. optCheck = true;
  1497. mcxDialog.alertC("ERP가용재고가 변경되었습니다.<br/>확인해주세요", {
  1498. sureBtnText: "확인",
  1499. sureBtnClick: function() {
  1500. $("#optionList tr").find("input[name=erpStockLinkYn]").eq(idx).focus();
  1501. }
  1502. });
  1503. return false;
  1504. }
  1505. } */
  1506. // 입점만 체크
  1507. if ("N" == $('#goodsDetailForm input[name=selfGoodsYn]').val()){
  1508. if(gagajf.isNull(editCurrStockQty)){
  1509. optCheck = true;
  1510. mcxDialog.alertC("가용재고를 입력해주세요", {
  1511. sureBtnText: "확인",
  1512. sureBtnClick: function() {
  1513. $("#optionList tr").find("input[name=editCurrStockQty]").eq(idx).focus();
  1514. }
  1515. });
  1516. return false;
  1517. }
  1518. }
  1519. if(gagajf.isNull(baseStockQty)){
  1520. optCheck = true;
  1521. mcxDialog.alertC("안전재고를 입력해주세요", {
  1522. sureBtnText: "확인",
  1523. sureBtnClick: function() {
  1524. $("#optionList tr").find("input[name=baseStockQty]").eq(idx).focus();
  1525. }
  1526. });
  1527. return false;
  1528. }
  1529. if (editCurrStockQty != currStockQty){
  1530. $("#goodsDetailForm input[name=chStockDataYn]").val('Y');
  1531. }
  1532. if (baseStockQty != hidBaseStockQty){
  1533. $("#goodsDetailForm input[name=chStockDataYn]").val('Y');
  1534. }
  1535. if (dispOrd != hidDispOrd){
  1536. $("#goodsDetailForm input[name=chStockDataYn]").val('Y');
  1537. }
  1538. if (dispYn != hidDispYn){
  1539. $("#goodsDetailForm input[name=chStockDataYn]").val('Y');
  1540. }
  1541. if (soldoutYn != hidSoldoutYn){
  1542. $("#goodsDetailForm input[name=chStockDataYn]").val('Y');
  1543. }
  1544. idx++;
  1545. });
  1546. if(optCheck) {
  1547. return false;
  1548. }
  1549. var basicColor = $("#goodsDetailForm input[name=basicColor]:checked").val();
  1550. var dcRate = 0;
  1551. var listPrice = $("#goodsDetailForm input[name=listPrice]").val().removeComma();
  1552. var currPrice = $("#goodsDetailForm input[name=currPrice]").val().removeComma();
  1553. dcRate = 100 - Math.floor(Number(currPrice) / Number(listPrice) * 100); //절사
  1554. if (dcRate < 0 && ($("#goodsDetailForm input[name=goodsType]").val() != "G056_D")){
  1555. mcxDialog.alertC('할인율이 0보다 작습니다.\n판매가를 확인해주세요.', {
  1556. sureBtnText: "확인",
  1557. sureBtnClick: function() {
  1558. $("#goodsDetailForm input[name=currPrice]").focus();
  1559. }
  1560. });
  1561. return false;
  1562. }else if (dcRate >= 90 && ($("#goodsDetailForm input[name=goodsType]").val() != "G056_D")){
  1563. mcxDialog.confirmC("할인율이 90%이상입니다. 계속하시겠습니까?", {
  1564. btn: ["아니요","예"],
  1565. btnClick: function(index){
  1566. if (index == 1){
  1567. optCheck = true;
  1568. } else {
  1569. if (!fnGoodsComposeCheck()) return false;
  1570. fnSaveCheck();
  1571. }
  1572. }
  1573. });
  1574. }else{
  1575. $("#goodsDetailForm").find("#dcRateTxt").html(dcRate);
  1576. $("#goodsDetailForm input[name=dcRate]").val(dcRate);
  1577. if (!fnGoodsComposeCheck()) return false;
  1578. fnSaveCheck();
  1579. }
  1580. if (optCheck) return false;
  1581. });
  1582. //저장 관련 체크
  1583. var fnSaveCheck = function(idx){
  1584. if($("#goodsDetailForm input:checkbox[name=chkDescKeep]").is(':checked')){
  1585. mcxDialog.confirmC("'정보유지' 체크박스가 선택되어 있어 '상품상세설명' 항목이 저장되지 않습니다.<br/>저장을 원하시면 체크를 해제하세요. 계속하시겠습니까?", {
  1586. btn: ["아니요","예"],
  1587. btnClick: function(index){
  1588. if (index == 1){
  1589. optCheck = true;
  1590. } else {
  1591. fnGoodsSave();
  1592. }
  1593. }
  1594. });
  1595. }else{
  1596. fnGoodsSave();
  1597. }
  1598. }
  1599. // 구성 정보 관련 체크
  1600. var fnGoodsComposeCheck = function(){
  1601. if ($("#goodsDetailForm input[name=goodsType]").val() == "G056_N"){
  1602. return true;
  1603. }
  1604. var allData = gagaAgGrid.getAllRowData(gridGoodsComposeOptions);
  1605. var comSupplyCompCd = '';
  1606. var comSelfGoodsYn = '';
  1607. var index = 0;
  1608. //기준여부 Y 존재하는지 확인
  1609. var checkBaseYn = false;
  1610. //대표여부 Y 존재하는지 확인
  1611. var checkRepYn = false;
  1612. optCheck = false;
  1613. $.each(allData, function(index, item) {
  1614. if (index == 0){
  1615. comSelfGoodsYn = item.selfGoodsYn;
  1616. comSupplyCompCd = item.supplyCompCd;
  1617. $("#goodsDetailForm input[name=repGoodsCd]").val(item.repGoodsCd); // 대표상품
  1618. }
  1619. if (item.baseYn == "Y"){
  1620. checkBaseYn = true;
  1621. }
  1622. if (item.repYn == "Y"){
  1623. checkRepYn = true;
  1624. }
  1625. if (comSelfGoodsYn != item.selfGoodsYn){
  1626. optCheck = true;
  1627. mcxDialog.alertC("구성상품중 자사/입점상품 구분값이 다릅니다.<br/>확인해 주세요", {
  1628. sureBtnText: "확인",
  1629. sureBtnClick: function() {
  1630. gridGoodsComposeOptions.api.setFocusedCell(index, "goodsCd", null);
  1631. }
  1632. });
  1633. return false;
  1634. /*
  1635. }else{
  1636. if (comSelfGoodsYn == "N" && (comSupplyCompCd != item.supplyCompCd)){
  1637. optCheck = true;
  1638. mcxDialog.alertC("구성상품중 입점은 같은 업체 상품만 가능합니다.<br/>확인해 주세요", {
  1639. sureBtnText: "확인",
  1640. sureBtnClick: function() {
  1641. gridGoodsComposeOptions.api.setFocusedCell(index, "goodsCd", null);
  1642. }
  1643. });
  1644. return false;
  1645. }
  1646. */
  1647. }
  1648. // 세트 가격 체크
  1649. if ($("#goodsDetailForm input[name=goodsType]").val() == "G056_S"){
  1650. if (item.compsCurrPrice <= 0){
  1651. optCheck = true;
  1652. mcxDialog.alertC("구성상품 판매가를 확인해 주세요", {
  1653. sureBtnText: "확인",
  1654. sureBtnClick: function() {
  1655. gridGoodsComposeOptions.api.setFocusedCell(index, "compsCurrPrice", null);
  1656. }
  1657. });
  1658. return false;
  1659. }
  1660. }
  1661. index++;
  1662. });
  1663. if(optCheck) {
  1664. return false;
  1665. }
  1666. if (!checkBaseYn){
  1667. mcxDialog.alert('구성상품중 기준여부를 선택해 주세요.');
  1668. return false;
  1669. }
  1670. if (!checkRepYn){
  1671. mcxDialog.alert('구성상품중 대표여부를 선택해 주세요.');
  1672. return false;
  1673. }
  1674. return true;
  1675. }
  1676. //저장처리
  1677. var fnGoodsSave = function(){
  1678. mcxDialog.confirm('저장하시겠습니까?', {
  1679. cancelBtnText: "취소",
  1680. sureBtnText: "확인",
  1681. sureBtnClick: function(){
  1682. fnGoodsDeailNotiSave();
  1683. if (fnChangeCheck()){
  1684. $("#goodsDetailForm input[name=chDataYn]").val('Y');
  1685. }else{
  1686. $("#goodsDetailForm input[name=chDataYn]").val('N');
  1687. }
  1688. $("#goodsDetailForm input[name=mainColorCd]").val($("#goodsDetailForm input[name=basicColor]:checked").val());
  1689. //구성상품
  1690. var allData = gagaAgGrid.getAllRowData(gridGoodsComposeOptions);
  1691. var jsonData = JSON.stringify(allData);
  1692. $('#goodsDetailForm input[name=goodsComposeList]').val(jsonData);
  1693. $('#goodsDetailForm input[name=goodsNm]').val($('#goodsDetailForm input[name=goodsNm]').val().trim().replace(/\n|\r/g, "<br/>").replace(/\"/gi, "&quot;").replace(/\'/gi, "&#39;"));
  1694. $('#goodsDetailForm input[name=goodsTnm]').val($('#goodsDetailForm input[name=goodsTnm]').val().trim().replace(/\n|\r/g, "<br/>").replace(/\"/gi, "&quot;").replace(/\'/gi, "&#39;"));
  1695. $('#goodsDetailForm input[name=goodsSnm1]').val($('#goodsDetailForm input[name=goodsSnm1]').val().trim().replace(/\n|\r/g, "<br/>").replace(/\"/gi, "&quot;").replace(/\'/gi, "&#39;"));
  1696. gagajf.ajaxFormSubmit("/goods/detail/save", "#goodsDetailForm", fnGoodsSaveCallBack);
  1697. }
  1698. });
  1699. }
  1700. //미리보기 클릭 시
  1701. $('#btnGoodsDetailPreview').click(function(e) {
  1702. cfnOpenFrontGoodsPopup($('#goodsDetailForm input[name=goodsCd]').val(), $('#goodsDetailForm input[name=siteCd]').val());
  1703. });
  1704. //이미지 클릭 시
  1705. $('#btnGoodsDetailImg').click(function(e) {
  1706. cfnOpenGoodsImagePopup($('#goodsDetailForm input[name=goodsCd]').val());
  1707. });
  1708. //창종료
  1709. var fnGoodsDetailClose = function(){
  1710. uifnPopupClose('popupGoodsDetail');
  1711. }
  1712. //저장후 callback
  1713. var fnGoodsSaveCallBack = function(){
  1714. var goodsCd = $('#goodsDetailForm input[name=goodsCd]').val();
  1715. fnGoodsDetailClose();
  1716. cfnOpenGoodsDetailPopup('U', goodsCd);
  1717. }
  1718. //고시정보 저장을 위한 데이터 처리
  1719. var fnGoodsDeailNotiSave = function(){
  1720. var goodsCd = $('#goodsDetailForm input[name=goodsCd]').val();
  1721. var goodsInfoList = [];
  1722. var index = 0;
  1723. $("#goodsDetailForm").find("#infoContents tr").each(function() {
  1724. if (index > 0){
  1725. var goodsInfo = {goodsCd: goodsCd
  1726. , niClsfCd : $('#goodsDetailForm input[name=niClsfCd]').val()
  1727. , niItemCd : $(this).find("input[name=niItemCd]").val()
  1728. , niContent : $(this).find("input[name=niContent]").val()
  1729. , dispOrd : $(this).find("input[name=dispOrd]").val()
  1730. };
  1731. goodsInfoList.push(goodsInfo);
  1732. }
  1733. index++;
  1734. });
  1735. $("#goodsDetailForm input[name=notiList]").val(JSON.stringify(goodsInfoList));
  1736. }
  1737. //상품기본정보 변경여부 확인
  1738. var fnChangeCheck = function(){
  1739. //상품타이틀
  1740. if ($("#goodsDetailForm input[name=goodsTnmOrg]").val() != $("#goodsDetailForm input[name=goodsTnm]").val()){
  1741. return true;
  1742. }
  1743. //사용자검색어
  1744. if ($("#goodsDetailForm input[name=goodsSnm1Org]").val() != $("#goodsDetailForm input[name=goodsSnm1]").val()){
  1745. return true;
  1746. }
  1747. //상품명
  1748. if ($("#goodsDetailForm input[name=goodsNmOrg]").val() != $("#goodsDetailForm input[name=goodsNm]").val()){
  1749. return true;
  1750. }
  1751. //상품정상이월구분
  1752. if ($("#goodsDetailForm input[name=formalGbOrg]").val() != $("input:radio[name=formalGb]:checked").val()){
  1753. return true;
  1754. }
  1755. //상품구분
  1756. if ($("#goodsDetailForm input[name=goodsGbOrg]").val() != $("#goodsDetailForm select[name=goodsGb]").val()){
  1757. return true;
  1758. }
  1759. //상품상태
  1760. if ($("#goodsDetailForm input[name=goodsStatOrg]").val() != $("#goodsDetailForm select[name=goodsStat]").val()){
  1761. return true;
  1762. }
  1763. //시즌
  1764. if ($("#goodsDetailForm input[name=seasonCdOrg]").val() != $("#goodsDetailForm select[name=seasonCd]").val()){
  1765. return true;
  1766. }
  1767. //성별
  1768. if ($("#goodsDetailForm input[name=sexGbOrg]").val() != $("#goodsDetailForm select[name=sexGb]").val()){
  1769. return true;
  1770. }
  1771. //판매가
  1772. if ($("#goodsDetailForm input[name=currPriceOrg]").val() != $("#goodsDetailForm input[name=currPrice]").val().removeComma()){
  1773. return true;
  1774. }
  1775. //원가
  1776. if ($("#goodsDetailForm input[name=costPriceOrg]").val() != $("#goodsDetailForm input[name=costPrice]").val().removeComma()){
  1777. return true;
  1778. }
  1779. //자사 일반상품만
  1780. if($("#goodsDetailForm input[name=selfGoodsYn]").val() == 'Y' && $("#goodsDetailForm input[name=goodType]").val() == 'G056_N'){
  1781. //ERP재고연동여부
  1782. if ($("#goodsDetailForm input[name=erpStockLinkYnOrg]").val() != $("#goodsDetailForm input[name=erpStockLinkYn]:checked").val()){
  1783. return true;
  1784. }
  1785. }
  1786. //자사몰 노출여부
  1787. if ($("#goodsDetailForm input[name=selfMallYnOrg]").val() != $("input[name=selfMallYn]:checked").val()){
  1788. return true;
  1789. }
  1790. //선물주문여부
  1791. if ($("#goodsDetailForm input[name=giftPackYnOrg]").val() != $("input[name=giftPackYn]:checked").val()){
  1792. return true;
  1793. }
  1794. //PC포인트
  1795. if ($("#goodsDetailForm input[name=pntPrateOrg]").val() != $("#goodsDetailForm input[name=pntPrate]").val()){
  1796. return true;
  1797. }
  1798. //PC 선포인트 사용여부
  1799. if ($("#goodsDetailForm input[name=prePpntUsableYnOrg]").val() != $("input[name=prePpntUsableYn]:checked").val()){
  1800. return true;
  1801. }
  1802. //MOBILE포인트
  1803. if ($("#goodsDetailForm input[name=pntMrateOrg]").val() != $("#goodsDetailForm input[name=pntMrate]").val()){
  1804. return true;
  1805. }
  1806. //MOBILE 선포인트 사용여부
  1807. if ($("#goodsDetailForm input[name=preMpntUsableYnOrg]").val() != $("input[name=preMpntUsableYn]:checked").val()){
  1808. return true;
  1809. }
  1810. //최소주문수량
  1811. if ($("#goodsDetailForm input[name=minOrdQtyOrg]").val() != $("#goodsDetailForm input[name=minOrdQty]").val()){
  1812. return true;
  1813. }
  1814. //최대주문수량
  1815. if ($("#goodsDetailForm input[name=maxOrdQtyOrg]").val() != $("#goodsDetailForm input[name=maxOrdQty]").val()){
  1816. return true;
  1817. }
  1818. //ID당1일최대구매수량
  1819. if ($("#goodsDetailForm input[name=dayMaxOrdQtyOrg]").val() != $("#goodsDetailForm input[name=dayMaxOrdQty]").val()){
  1820. return true;
  1821. }
  1822. //유통구분
  1823. if ($("#goodsDetailForm input[name=distributionGbOrg]").val() != $("#goodsDetailForm select[name=distributionGb]").val()){
  1824. return true;
  1825. }
  1826. //상품연령대
  1827. if ($("#goodsDetailForm input[name=ageGrpCdOrg]").val() != $("#goodsDetailForm select[name=ageGrpCd]").val()){
  1828. return true;
  1829. }
  1830. // 판매수수료율
  1831. if ($("#goodsDetailForm input[name=sellFeeRateOrg]").val() != $("#goodsDetailForm input[name=sellFeeRate]").val()){
  1832. return true;
  1833. }
  1834. // 메인 색상코드
  1835. if ($("#goodsDetailForm input[name=mainColorCd]").val() != $("#goodsDetailForm input[name=basicColor]:checked").val()){
  1836. return true;
  1837. }
  1838. // 반품가능여부
  1839. if ($("#goodsDetailForm input[name=returnableYnOrg]").val() != $("input[name=returnableYn]:checked").val()){
  1840. return true;
  1841. }
  1842. // 배송비정책
  1843. if ($("#goodsDetailForm input[name=delvFeeCdOrg]").val() != $("#goodsDetailForm select[name=delvFeeCd]").val()){
  1844. return true;
  1845. }
  1846. // 교환가능여부
  1847. if ($("#goodsDetailForm input[name=changeableYnOrg]").val() != $("input[name=changeableYn]:checked").val()){
  1848. return true;
  1849. }
  1850. // 신규가입구매가능여부
  1851. if ($("#goodsDetailForm input[name=newCustOrdYnOrg]").val() != $("input[name=newCustOrdYn]:checked").val()){
  1852. return true;
  1853. }
  1854. // 성인용품여부
  1855. if ($("#goodsDetailForm input[name=adultYnOrg]").val() != $("input[name=adultYn]:checked").val()){
  1856. return true;
  1857. }
  1858. return false;
  1859. }
  1860. // 상품 고시 선택 버튼 클릭 시
  1861. $('#btnNotinfo').click(function(e) {
  1862. if(gagajf.isNull($("#goodsDetailForm select[name=selNiClsfCd]").val())) {
  1863. mcxDialog.alertC("상품정보제공 고시를 선택해주세요.", {
  1864. sureBtnText: "확인",
  1865. sureBtnClick: function() {
  1866. $("#goodsDetailForm select[name=selNiClsfCd]").focus();
  1867. }
  1868. });
  1869. return false;
  1870. }
  1871. // 고시정보 수정은 맘대로 할수 있음 20200821 신현장 부장 확인
  1872. /* if ($("#goodsDetailForm input[name=niClsfCd]").val() != $("#goodsDetailForm select[name=selNiClsfCd]").val()){
  1873. mcxDialog.alertC("상품의 고시분류는 [" + $("#goodsDetailForm input[name=niClsfNm]").val() +"] 입니다." , {
  1874. sureBtnText: "확인",
  1875. sureBtnClick: function() {
  1876. $("#goodsDetailForm select[name=selNiClsfCd]").focus();
  1877. }
  1878. });
  1879. return false;
  1880. } */
  1881. var params = new Object();
  1882. params.supplyCompCd = $("#goodsDetailForm input[name=supplyCompCd]").val();
  1883. params.niClsfCd = $("#goodsDetailForm select[name=selNiClsfCd]").val();
  1884. params.goodsCd = $("#goodsDetailForm input[name=goodsCd]").val();
  1885. cfnAjaxSubmit("/goods/noti/goodsInfo/list", "json", fnGoodsDetailNotiInfoSearchCallback, params);
  1886. });
  1887. // 품목변경
  1888. $("#btnGoodsItemkindChange").on("click", function(){
  1889. if($("#goodsDetailForm select[name=itemkindCd]").val() == $("#goodsDetailForm input[name=orgItemkindCd]").val()){
  1890. mcxDialog.alert("품목코드가 변경되지 않았습니다.");
  1891. return false;
  1892. }
  1893. mcxDialog.confirm('품목변경 하시겠습니까?', {
  1894. cancelBtnText: "취소",
  1895. sureBtnText: "확인",
  1896. sureBtnClick: function(){
  1897. var data = [{ goodsCd : $('#goodsDetailForm input[name=goodsCd]').val()
  1898. , itemkindCd : $("#goodsDetailForm select[name=itemkindCd]").val()
  1899. , supplyCompCd : $("#goodsDetailForm input[name=supplyCompCd]").val()
  1900. }];
  1901. var jsonData = JSON.stringify(data);
  1902. gagajf.ajaxJsonSubmit('/goods/itemKind/change/save', jsonData, fnGoodsDeailSearch);
  1903. }
  1904. });
  1905. });
  1906. // 안전인증
  1907. $("#btnGoodsSafetyCertNum").on("click", function(){
  1908. /*
  1909. if($("#goodsDetailForm input[name=certNum]").val() == $("#goodsDetailForm input[name=certNumOrg]").val()){
  1910. mcxDialog.alert("안전인증번호가 변경되지 않았습니다.");
  1911. return false;
  1912. }
  1913. */
  1914. mcxDialog.confirm('안전인증번호를 변경 하시겠습니까?', {
  1915. cancelBtnText: "취소",
  1916. sureBtnText: "확인",
  1917. sureBtnClick: function(){
  1918. var data = { goodsCd : $('#goodsDetailForm input[name=goodsCd]').val()
  1919. , certNum : $("#goodsDetailForm input[name=certNum]").val()
  1920. };
  1921. var jsonData = JSON.stringify(data);
  1922. gagajf.ajaxJsonSubmit('/goods/detail/certNum/save', jsonData ); //, fnGoodsDeailSearch
  1923. }
  1924. });
  1925. });
  1926. // 상품구매등급
  1927. var fnGoodsOrderGrade = function(){
  1928. var code = $('#goodsDetailForm select[name=custGrade]').val();
  1929. var codeText = $("#goodsDetailForm select[name=custGrade] option:selected").text();
  1930. var addHtml = '';
  1931. var addFlag = true;
  1932. $("#goodsDetailForm #goodsCustGradeList").find("input").each(function() {
  1933. if (code == $(this).val() ){
  1934. addFlag = false;
  1935. }
  1936. });
  1937. if (addFlag){
  1938. addHtml = '<span class="memAdd"><input type="hidden" name="goodsOrderGrade" value="'+code+'"/>'+ codeText+' <button type="button" onclick="$(this).parent().remove();return false;">삭제</button></span>';
  1939. $('#goodsCustGradeList').append(addHtml);
  1940. //$('#goodsDetailForm').find('.tabs .tabsNav li:eq(4) a').attr("style", "color:red;");
  1941. }
  1942. }
  1943. // 구성상품 조회 팝업
  1944. var fnOpenGoodsDetailPopup = function() {
  1945. cfnOpenGoodsPopup('fnGoodsDetailGoodsDeal');
  1946. }
  1947. // 구성상품 조회 팝업 - 상품추가
  1948. var fnGoodsDetailGoodsDeal = function(goodsData) {
  1949. if (goodsData.length < 1) return;
  1950. // 기존상품
  1951. var oldGoodsDealList = gagaAgGrid.getAllRowData(gridGoodsComposeOptions);
  1952. var idx = oldGoodsDealList.length+1;
  1953. var isExist = false;
  1954. goodsData.forEach(function(goods){
  1955. isExist = false;
  1956. gridGoodsComposeOptions.api.forEachNode(function(rowNode, index) {
  1957. if (goods.goodsCd == rowNode.data.extendGoodsCd){
  1958. isExist = true;
  1959. }
  1960. });
  1961. if (goods.goodsType != 'N'){
  1962. isExist = true;
  1963. }
  1964. if(!isExist){
  1965. var data = {
  1966. goodsCd : $('#goodsDetailForm input[name=goodsCd]').val()
  1967. , extendGoodsCd: goods.goodsCd
  1968. , goodsType: $('#goodsDetailForm input[name=goodsType]').val()
  1969. , dispOrd: idx
  1970. , qty: 1
  1971. , compsCurrPrice: goods.currPrice
  1972. , extendStaffCurrPrice: goods.currPrice
  1973. , baseYn: 'N'
  1974. , goodsStat : goods.goodsStat
  1975. , useYn: 'Y'
  1976. , extendGoodsOptNm : goods.goodsNm
  1977. , extendGoodsCdNm : goods.goodsNm
  1978. , currPrice : goods.currPrice
  1979. , selfGoodsYn : goods.selfGoodsYn
  1980. , sysImgNm : goods.sysImgNm
  1981. };
  1982. gridGoodsComposeOptions.api.updateRowData({add: [data], addIndex: idx});
  1983. idx++;
  1984. $('#goodsDetailForm').find('.tabs .tabsNav li:eq(5) a').attr("style", "color:red;");
  1985. }
  1986. });
  1987. gridGoodsComposeOptions.api.refreshCells();
  1988. }
  1989. //엑셀 상품 조회
  1990. $('#btnGoodsDealSearchExcel').on('click', function() {
  1991. cfnExcelUploadPopup('goodsDetailExcelUpload', 'goodsDetailExcelUpload');
  1992. });
  1993. var goodsDetailExcelUpload = function(result){
  1994. var data = {procJob : result.procJob
  1995. ,excelFileNm : result.excelFileNm
  1996. };
  1997. var jsonData = JSON.stringify(data);
  1998. gagajf.ajaxJsonSubmit('/goods/search/excelupload/save', jsonData, goodsDetailExcelUploadCallBack);
  1999. }
  2000. var goodsDetailExcelUploadCallBack = function(result){
  2001. gagajf.ajaxJsonSubmit('/goods/excel/upload/goods/list', '', fnGoodsDetailSearchExcel);
  2002. }
  2003. var fnGoodsDetailSearchExcel = function(result){
  2004. fnGoodsDetailGoodsDeal(result.goodsExcelList);
  2005. }
  2006. $("img").on("error", function () {
  2007. $(this).attr("src", _uximgUrl+"/image/no.gif");
  2008. });
  2009. $(document).ready(function() {
  2010. cfnCreateCheckbox("/renderer/avail/commonCode/list/G101", $('#goodsCustGradeList'), "goodsOrderGrade");
  2011. gagaAgGrid.createGrid('gridGoodsHstoryList', gridGoodsHstoryOptions);
  2012. gagaAgGrid.createGrid('gridGoodsComposeList', gridGoodsComposeOptions);
  2013. fnGoodsDeailSearch();
  2014. });
  2015. /*]]>*/
  2016. </script>
  2017. </html>