GoodsDetailForm.html 121 KB

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