GoodsDetailForm.html 103 KB

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