add.html 35 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090
  1. {extend name="app/shop/view/base.html"/}
  2. {block name="resources"}
  3. <style>
  4. .gift-box .layui-form{padding: 0!important;}
  5. .exchange-coupon, .exchange-red-packet {display: none;}
  6. .form-wrap{margin-top: 0;}
  7. .exchange-type {padding: 0 20px; position: relative;}
  8. .exchange-type i{position: absolute;bottom: -10px;right: -1px;display: none;}
  9. .exchange-type.border-color i{display: block;}
  10. .layui-input {display: inline-block;}
  11. .text-empty {color: #454545;}
  12. .js-coupon-discount{display: none;}
  13. .layui-table-body{max-height: 480px !important;}
  14. .gift-box .layui-table-body{max-height: 350px !important;}
  15. .goods-title{display: flex;align-items: center;}
  16. .goods-title .goods-img{display: flex;align-items: center;justify-content: center;width: 55px;height: 55px;margin-right: 5px;}
  17. .goods-title .goods-img img{max-height: 100%;max-width: 100%;}
  18. .goods-title .goods-name{flex: 1;line-height: 1.6;}
  19. .prompt-block .prompt-box{
  20. top:unset;bottom:30px;left:-85px;
  21. }
  22. .layui-table-cell{overflow:inherit;}
  23. .layui-table-box{overflow:inherit;}
  24. .layui-table-header{overflow:inherit;}
  25. .prompt-block .prompt-box:before{
  26. transform:rotate(-90deg);left:84px;top:104px;
  27. }
  28. .prompt-block .prompt-box:after{
  29. transform:rotate(-90deg);left:84px;top:103px;
  30. }
  31. .delivery_model{width:20%;display: inline-block;}
  32. .layui-input-block{margin-bottom:16px;}
  33. .print.delivery_model .layui-anim-upbit{z-index:1000}
  34. .goods_num {padding-left: 20px;}
  35. </style>
  36. {/block}
  37. {block name="main"}
  38. <div class="form-wrap">
  39. <div class="layui-form">
  40. <div class="layui-form-item">
  41. <label class="layui-form-label">兑换类型:</label>
  42. <div class="layui-input-block">
  43. <button class="layui-btn layui-btn-primary exchange-type border-color" id="gift_btn">商品<i class="iconfont iconxuanzhong text-color"></i></button>
  44. <button class="layui-btn layui-btn-primary exchange-type" id="coupon_btn">优惠券<i class="iconfont iconxuanzhong text-color"></i></button>
  45. <button class="layui-btn layui-btn-primary exchange-type" id="red_packet_btn">红包<i class="iconfont iconxuanzhong text-color"></i></button>
  46. </div>
  47. </div>
  48. </div>
  49. <!-- 商品 -->
  50. <div class="exchange-gift layui-form content">
  51. <div class="layui-form-item">
  52. <label class="layui-form-label">是否上架:</label>
  53. <div class="layui-input-block">
  54. <input type="checkbox" name="state" lay-skin="switch" value="1" lay-filter="state" checked>
  55. </div>
  56. </div>
  57. <div class="layui-form-item">
  58. <label class="layui-form-label">是否免邮:</label>
  59. <div class="layui-input-block">
  60. <input type="checkbox" name="is_free_shipping" value="1" lay-filter="shipping" checked class="shipping" lay-skin="switch">
  61. </div>
  62. </div>
  63. <div class="layui-form-item ems_block" style="display:none;padding-left:100px;">
  64. <div class="layui-input-block">
  65. <input type="checkbox" name="delivery_type" title="按照商品设置" lay-skin="primary" lay-filter="delivery_type" class="delivery_type" value="2">
  66. <div class="word-aux" style="margin-left: 28px;margin-top: 0">
  67. <p>如果选择按照商品设置,那么积分商城商品将会根据商品中设置的运费模版进行</p>
  68. <p>计算运费</p>
  69. </div>
  70. </div>
  71. <div class="layui-input-block">
  72. <input type="checkbox" name="delivery_type" title="固定运费" lay-skin="primary" lay-filter="delivery_type" class="delivery_type" value="0">
  73. <input class="layui-input len-short print" type="number" style="display:none;" name="delivery_price" onblur="checkInput(this)">
  74. <div class="word-aux" style="margin-left: 28px;margin-top: 0">
  75. <p>如果选择固定运费,积分商城的商品无论购买几件,将会按照设置的固定运费收取,</p>
  76. <p>如:固定运费设置为12元,客户兑换A商品时无论一次兑换几件,运费都是12元.</p>
  77. </div>
  78. </div>
  79. <div class="layui-input-block">
  80. <input type="checkbox" name="delivery_type" title="运费模版" lay-skin="primary" lay-filter="delivery_type" class="delivery_type layui-form-label" value="1">
  81. <div class="print delivery_model" style="display:none;">
  82. <select name="shipping_template" lay-filter="delivery_model">
  83. <option value="0">请选择运费模版</option>
  84. {foreach name="$express_template_list" item="vo"}
  85. <option value="{$vo['template_id']}">{$vo['template_name']}</option>
  86. {/foreach}
  87. </select>
  88. </div>
  89. <div class="word-aux" style="margin-left: 28px;margin-top: 0">
  90. <p>如果选择运费模版,积分商城的商品将会按照该处选择的运费模版进行单独计算</p>
  91. <p>运费,与商品本身设置的是否包邮以及运费模版无关.</p>
  92. </div>
  93. </div>
  94. </div>
  95. <div class="layui-form-item">
  96. <label class="layui-form-label">兑换规则:</label>
  97. <div class="layui-input-block special-length">
  98. <script id="containerG" name="containerG" type="text/plain" style="width:100%;height:500px;"></script>
  99. </div>
  100. </div>
  101. <div class="layui-form-item goods_list">
  102. <label class="layui-form-label"><span class="required">*</span>商品选择:</label>
  103. <div class="layui-input-block layui-form">
  104. <table id="selected_goods_list" lay-filter="selected_goods_list"></table>
  105. <button class="layui-btn" onclick="addGoods()">选择商品</button> <span class="goods_num">已选商品(<span id="goods_num" class="text-color">0</span>)</span>
  106. </div>
  107. </div>
  108. <div class="form-row">
  109. <button class="layui-btn" lay-submit lay-filter="save_gift">保存</button>
  110. <button class="layui-btn layui-btn-primary" onclick="back()">返回</button>
  111. </div>
  112. <input type="hidden" name="sku_id">
  113. <input type="hidden" name="type" value="1">
  114. </div>
  115. <!-- 优惠券 -->
  116. <div class="exchange-coupon content layui-form">
  117. <div class="layui-form-item">
  118. <label class="layui-form-label"><span class="required">*</span>选择优惠券:</label>
  119. <div class="layui-input-block">
  120. <div class="upload-img-block square">
  121. <div class="upload-img-box upload-coupon" id="coupon_img" lay-verify="select">
  122. <div class="upload-default">
  123. <i class="iconfont iconshangchuan"></i>
  124. <p>选择优惠券</p>
  125. </div>
  126. </div>
  127. </div>
  128. </div>
  129. </div>
  130. <div class="layui-form-item">
  131. <label class="layui-form-label">优惠券名称:</label>
  132. <div class="layui-input-block" id="coupon_name">
  133. <p class="input-text text-empty">优惠券名称</p>
  134. </div>
  135. </div>
  136. <div class="layui-form-item js-coupon-price">
  137. <label class="layui-form-label">优惠券面值(元):</label>
  138. <div class="layui-input-block" id="coupon_price">
  139. <p class="input-text text-empty">¥0.00</p>
  140. </div>
  141. </div>
  142. <div class="layui-form-item js-coupon-discount">
  143. <label class="layui-form-label">优惠券折扣:</label>
  144. <div class="layui-input-block" id="coupon_discount">
  145. <p class="input-text text-empty">0.00折</p>
  146. </div>
  147. </div>
  148. <div class="layui-form-item">
  149. <label class="layui-form-label"><span class="required">*</span>兑换积分:</label>
  150. <div class="layui-input-block">
  151. <input type="number" name="point" min="0" lay-verify="required|required_point" placeholder="兑换积分数" value="0" onchange="detectionNumType(this,'integral')" class="layui-input len-short expoint">
  152. </div>
  153. </div>
  154. <div class="layui-form-item">
  155. <label class="layui-form-label"><span class="required">*</span>可兑换数量:</label>
  156. <div class="layui-input-block">
  157. <input type="number" name="stock" min="0" lay-verify="required|required_coupon_stock" placeholder="可兑换数量" value="" onchange="detectionNumType(this,'integral')" class="layui-input len-short stock">
  158. </div>
  159. </div>
  160. <div class="layui-form-item">
  161. <label class="layui-form-label">是否上架:</label>
  162. <div class="layui-input-block">
  163. <input type="checkbox" name="state" lay-skin="switch" value="1" lay-filter="state" checked>
  164. </div>
  165. </div>
  166. <div class="layui-form-item">
  167. <label class="layui-form-label">兑换规则:</label>
  168. <div class="layui-input-block special-length">
  169. <script id="container" name="content" type="text/plain" style="width: 800px; height: 300px;"></script>
  170. </div>
  171. </div>
  172. <div class="form-row">
  173. <button class="layui-btn" lay-submit lay-filter="save_coupon">保存</button>
  174. <button class="layui-btn layui-btn-primary" onclick="back()">返回</button>
  175. </div>
  176. <input type="hidden" name="coupon_type_id">
  177. <input type="hidden" name="type" value="2">
  178. </div>
  179. <!-- 红包 -->
  180. <div class="exchange-red-packet content layui-form">
  181. <div class="layui-form-item">
  182. <label class="layui-form-label"><span class="required">*</span>名称:</label>
  183. <div class="layui-input-block">
  184. <input type="text" name="name" lay-verify="required" placeholder="请输入红包名称" value="" class="layui-input len-long">
  185. </div>
  186. </div>
  187. <div class="layui-form-item">
  188. <label class="layui-form-label">红包封面:</label>
  189. <div class="layui-input-inline img-upload">
  190. <div class="upload-img-block icon square">
  191. <div class="upload-img-box" >
  192. <div class="upload-default" id="redPacket">
  193. <div class="upload">
  194. <i class="iconfont iconshangchuan"></i>
  195. <p>点击上传</p>
  196. </div>
  197. </div>
  198. <div class="operation">
  199. <div>
  200. <i title="图片预览" class="iconfont iconreview js-preview" style="margin-right: 20px;"></i>
  201. <i title="删除图片" class="layui-icon layui-icon-delete js-delete"></i>
  202. </div>
  203. <div class="replace_img js-replace">点击替换</div>
  204. </div>
  205. <input type="hidden" name="image" />
  206. </div>
  207. <!-- <p id="redPacket" class="no-replace">替换</p>
  208. <input type="hidden" name="image" />
  209. <i class="del">x</i> -->
  210. </div>
  211. </div>
  212. </div>
  213. <div class="layui-form-item">
  214. <label class="layui-form-label"><span class="required">*</span>兑换积分:</label>
  215. <div class="layui-input-block">
  216. <input type="number" name="point" min="0" lay-verify="required|required_point" placeholder="兑换积分数" value="0" onchange="detectionNumType(this,'integral')" class="layui-input len-short expoint">
  217. </div>
  218. </div>
  219. <div class="layui-form-item">
  220. <label class="layui-form-label"><span class="required">*</span>可兑换数量:</label>
  221. <div class="layui-input-block">
  222. <input type="number" name="stock" min="0" lay-verify="required|required_balance_stock" placeholder="可兑换数量" value="" onchange="detectionNumType(this,'integral')" class="layui-input len-short stock">
  223. </div>
  224. </div>
  225. <div class="layui-form-item">
  226. <label class="layui-form-label"><span class="required">*</span>余额:</label>
  227. <div class="layui-input-block">
  228. <input type="number" name="balance" min="0" lay-verify="required|required_balance" placeholder="红包余额" value="" onchange="detectionNumType(this,'positiveNumber')" class="layui-input len-short">
  229. </div>
  230. <p class="word-aux">兑换的红包会以余额的形式发放给指定会员</p>
  231. </div>
  232. <div class="layui-form-item">
  233. <label class="layui-form-label">是否上架:</label>
  234. <div class="layui-input-block">
  235. <input type="checkbox" name="state" lay-skin="switch" value="1" lay-filter="state" checked>
  236. </div>
  237. </div>
  238. <div class="layui-form-item">
  239. <label class="layui-form-label">兑换规则:</label>
  240. <div class="layui-input-block special-length">
  241. <script id="containerT" name="content" type="text/plain" style="width: 800px; height: 300px;"></script>
  242. </div>
  243. </div>
  244. <div class="form-row">
  245. <button class="layui-btn" lay-submit lay-filter="save">保存</button>
  246. <button class="layui-btn layui-btn-primary" onclick="back()">返回</button>
  247. </div>
  248. <input type="hidden" name="type" value="3">
  249. <input type="hidden" name="" id="redPacketContent" value="" />
  250. </div>
  251. </div>
  252. <a id="redPacketImage"></a>
  253. {/block}
  254. {block name="script"}
  255. <script type="text/html" id="toolbarOperation">
  256. <button class="layui-btn layui-btn-primary" lay-event="change-number">兑换次数</button>
  257. <button class="layui-btn layui-btn-primary" lay-event="goods-integral">所需积分</button>
  258. <button class="layui-btn layui-btn-primary" lay-event="goods-price">所需金额</button>
  259. </script>
  260. <!-- 优惠券 -->
  261. <script type="text/html" id="couponList">
  262. <div class="gift-box">
  263. <div class="single-filter-box">
  264. <div class="layui-form">
  265. <div class="layui-input-inline">
  266. <input type="text" name="coupon_name" placeholder="请输入优惠券名称" class="layui-input len-mid">
  267. <button type="button" class="layui-btn layui-btn-primary" lay-filter="coupon-search" lay-submit>
  268. <i class="layui-icon">&#xe615;</i>
  269. </button>
  270. </div>
  271. </div>
  272. </div>
  273. <table id="coupon_list" lay-filter="coupon_list"></table>
  274. </div>
  275. </script>
  276. <!-- 优惠券-名称 -->
  277. <script type="text/html" id="couponName">
  278. <div class="table-tuwen-box">
  279. <div class="img-box">
  280. {{# if(d.image){ }}
  281. <img layer-src src="{{ns.img(d.image.split(',')[0])}}" alt="">
  282. {{# }else{ }}
  283. <img layer-src src="__STATIC__/img/coupon_default.png"/>
  284. {{# } }}
  285. </div>
  286. <div class="font-box">
  287. <p class="multi-line-hiding">{{d.coupon_name}}</p>
  288. </div>
  289. </div>
  290. </script>
  291. <!-- 优惠券-操作 -->
  292. <script type="text/html" id="couponOperation">
  293. {{# if(d.is_exit == 1){ }}
  294. <p title="该优惠券已参加积分兑换活动">已添加</p>
  295. {{# }else{ }}
  296. <a class="layui-btn" lay-event="add">添加</a>
  297. {{# } }}
  298. </script>
  299. <!-- 商品操作 -->
  300. <script type="text/html" id="operation">
  301. <div class="table-btn">
  302. <a class="layui-btn" onclick="delGoods(this,{{d.sku_id}})">删除</a>
  303. </div>
  304. </script>
  305. <script type="text/html" id="exchangePoint">
  306. <input type="number" class="layui-input len-input exchange_point expoint" onchange="setSkulist('point', {{d.sku_id}}, this , 'integral')" value="{{d.point ? d.point : 0.00}}" lay-verify="exchange_point" min="0.00"/>
  307. </script>
  308. <script type="text/html" id="exchangeLimit">
  309. <input type="number" class="layui-input len-input exchange_limit_num expoint" onchange="setSkulist('limit_num', {{d.sku_id}}, this, 'integral')" value="{{d.limit_num ? d.limit_num : 0}}" lay-verify="exchange_point" min="0.00"/>
  310. </script>
  311. <script type="text/html" id="exchangeMoney">
  312. <input type="number" class="layui-input len-input exchange_money" value="{{d.exchange_price ? d.exchange_price : 0.00}}" lay-verify="exchange_money" min="0.00" onchange="setSkulist('exchange_price', {{d.sku_id}}, this, 'positiveNumber')"/>
  313. </script>
  314. <script type="text/html" id="ems_price">
  315. <div>
  316. <input type="checkbox" name="delivery_type" lay-filter="is_set_ems" data-id="{{d.sku_id}}" onclick="setSkulist('delivery_type', {{d.sku_id}}, this, 'integral')" lay-skin="primary" checked>单独设置
  317. <input type="number" class="set_{{d.sku_id}} layui-input len-input" style="width:50%;margin-left:5%;" onchange="setSkulist('delivery_price', {{d.sku_id}}, this, 'integral')" value="0">
  318. </div>
  319. </script>
  320. <script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/ueditor.config.js"></script>
  321. <script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/ueditor.all.js"></script>
  322. <script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/lang/zh-cn/zh-cn.js"></script>
  323. <script>
  324. var giftTable, couponTable, form, laytpl,
  325. selectGoodsSkuId = [],
  326. exchangeType = 1;
  327. var goods_id = [], selectedGoodsId = [], sku_list = [];
  328. var saveData = null;
  329. var totalUploadNum = 0;
  330. var completeUploadNum = 0;
  331. //实例化富文本
  332. var ue = UE.getEditor('container'),
  333. ue_t = UE.getEditor('containerT'),
  334. ue_g = UE.getEditor('containerG'),
  335. html = '';
  336. // 已经添加的兑换列表
  337. var gift_list = [];
  338. var coupon_list = [];
  339. $.ajax({
  340. url: ns.url("pointexchange://shop/exchange/lists"),
  341. dataType: 'JSON',
  342. type: 'POST',
  343. async: false,
  344. success: function(res) {
  345. var data = res.data.list;
  346. for (var i=0; i<data.length; i++) {
  347. if (data[i].type == 1) {
  348. gift_list.push(data[i].type_id);
  349. }
  350. if (data[i].type == 2) {
  351. coupon_list.push(data[i].type_id);
  352. }
  353. }
  354. }
  355. });
  356. layui.use(['form', 'laytpl'], function(){
  357. form = layui.form;
  358. laytpl = layui.laytpl;
  359. form.render();
  360. /* form.on('radio(exchange_type)', function(data){
  361. exchangeType = data.value;
  362. $(".content").addClass("display-none").eq(exchangeType - 1).removeClass("display-none");
  363. }); */
  364. renderTable(sku_list);
  365. $(".exchange-type").click(function() {
  366. $(this).addClass("border-color");
  367. $(this).siblings("button").removeClass("border-color");
  368. if ($(this).index() == 0) {
  369. $(".exchange-gift").show();
  370. $(".exchange-coupon").hide();
  371. $(".exchange-red-packet").hide();
  372. } else if ($(this).index() == 1) {
  373. $(".exchange-coupon").show();
  374. $(".exchange-gift").hide();
  375. $(".exchange-red-packet").hide();
  376. } else if ($(this).index() == 2) {
  377. $(".exchange-red-packet").show();
  378. $(".exchange-gift").hide();
  379. $(".exchange-coupon").hide();
  380. }
  381. });
  382. var upload = new Upload({
  383. elem: '#redPacket',
  384. auto:false,
  385. bindAction:'#redPacketImage',
  386. callback: function(res) {
  387. uploadComplete('image', res.data.pic_path);
  388. }
  389. });
  390. /**
  391. * 商品列表搜索
  392. */
  393. form.on('submit(gift-search)', function(data) {
  394. giftTable.reload({
  395. page: {
  396. curr: 1
  397. },
  398. where: data.field
  399. });
  400. });
  401. form.on('switch(shipping)', function(data){
  402. if(data.elem.checked){
  403. $(".ems_block").hide();
  404. }else{
  405. $(".ems_block").show();
  406. }
  407. });
  408. //监听邮费设置
  409. form.on('checkbox(delivery_type)', function(data){
  410. if(data.elem.checked){
  411. $("input[name='delivery_type']").prop("checked", false);
  412. $(this).prop("checked", true);
  413. form.render('checkbox');
  414. $(this).siblings(".print").show();
  415. $(this).parent().siblings().children(".print").hide()
  416. }else{
  417. $(this).siblings(".print").hide();
  418. }
  419. });
  420. /**
  421. * 优惠券列表搜索
  422. */
  423. form.on('submit(coupon-search)', function(data) {
  424. couponTable.reload({
  425. page: {
  426. curr: 1
  427. },
  428. where: data.field
  429. });
  430. });
  431. /**
  432. * 监听表单提交
  433. */
  434. form.on('submit(save_gift)', function(data) {
  435. if(goodsVerify()) {
  436. var sku_ids = [];
  437. var goods_data = [];
  438. $.each(sku_list, function (i, e) {
  439. var goods = {};
  440. goods.goods_id = e.goods_id;
  441. sku_ids.push(e.sku_id);
  442. if(goods_data.length == 0){
  443. goods_data.push(goods);
  444. }else {
  445. $.each(goods_data, function(index, event){
  446. if(goods_data.length == index+1 && event.goods_id != goods.goods_id){
  447. goods_data.push(goods);
  448. }
  449. })
  450. }
  451. });
  452. if (sku_ids.length == 0) {
  453. layer.msg('请选择兑换商品', {icon: 5, anim: 6});
  454. return;
  455. }
  456. $.each(goods_data, function (i, e) {
  457. goods_data[i]['sku_list'] = [];
  458. $.each(sku_list, function (index, event) {
  459. if(event.goods_id == e.goods_id) {
  460. goods_data[i]['sku_list'].push(event);
  461. }
  462. });
  463. });
  464. ue_g.ready(function() { //对编辑器的操作最好在编辑器ready之后再做
  465. html = ue_g.getContent(); //获取html内容,返回: <p>hello</p>
  466. });
  467. data.field.content = html;
  468. data.field.goods_data = goods_data;
  469. if (data.field.state == undefined) {
  470. data.field.state = 0;
  471. }
  472. saveData = data;
  473. ajax_save();
  474. }
  475. });
  476. form.on('submit(save_coupon)', function(data) {
  477. var _val = $("input[name='coupon_type_id']").val();
  478. if (!_val) {
  479. layer.msg('请选择兑换优惠券', {icon: 5, anim: 6});
  480. return;
  481. }
  482. if (data.field.state == undefined) {
  483. data.field.state = 0;
  484. }
  485. ue.ready(function() { //对编辑器的操作最好在编辑器ready之后再做
  486. html = ue.getContent(); //获取html内容,返回: <p>hello</p>
  487. });
  488. data.field.content = html;
  489. saveData = data;
  490. ajax_save();
  491. });
  492. form.on('submit(save)', function(data) {
  493. if (data.field.state == undefined) {
  494. data.field.state = 0;
  495. }
  496. ue_t.ready(function() { //对编辑器的操作最好在编辑器ready之后再做
  497. html = ue_t.getContent(); //获取html内容,返回: <p>hello</p>
  498. });
  499. data.field.content = html;
  500. // 删除图片
  501. // if(!data.field.image) upload.delete();
  502. saveData = data;
  503. var obj = $("img.img_prev[data-prev='1']");
  504. totalUploadNum = obj.length;
  505. if(totalUploadNum > 0){
  506. obj.each(function(){
  507. var actionId = $(this).attr('data-action-id');
  508. $(actionId).click();
  509. })
  510. }else{
  511. ajax_save();
  512. }
  513. });
  514. function uploadComplete(field, pic_path) {
  515. saveData.field[field] = pic_path;
  516. completeUploadNum += 1;
  517. if(completeUploadNum == totalUploadNum){
  518. ajax_save();
  519. }
  520. }
  521. function goodsVerify(){
  522. for (var i in sku_list){
  523. if (parseFloat(sku_list[i]['point']) <= 0) {
  524. layer.msg('兑换积分不能小于等于0', {icon: 5, anim: 6});
  525. return false;
  526. }
  527. }
  528. return true;
  529. }
  530. function ajax_save() {
  531. var data = saveData.field;
  532. // 删除图片
  533. if(!data.image) upload.delete();
  534. var type = $('.exchange-type .border-color').attr('id');
  535. if (type == 'gift_btn') {
  536. //不免邮
  537. if(data.is_free_shipping==undefined){
  538. data.is_free_shipping = 0;
  539. }
  540. if(data.is_free_shipping == 0 && data.type == 1){
  541. if(data.delivery_type==undefined){
  542. layer.msg('请选择运费类型', {icon: 5, anim: 6});
  543. return false;
  544. }else if(data.delivery_type==0){
  545. if(data.delivery_price==""){
  546. layer.msg('请填写固定邮费', {icon: 5, anim: 6});
  547. return false;
  548. }
  549. }else if(data.delivery_type==1){
  550. if(data.shipping_template<=0){
  551. layer.msg('请选择运费模版', {icon: 5, anim: 6});
  552. return false;
  553. }
  554. }
  555. }else{
  556. data.delivery_type = "";
  557. data.delivery_price = "";
  558. data.shipping_template = 0;
  559. }
  560. }
  561. $.ajax({
  562. url: ns.url("pointexchange://shop/exchange/add"),
  563. data: data,
  564. dataType: 'JSON',
  565. type: 'POST',
  566. async: false,
  567. success: function (res) {
  568. if (res.code == 0) {
  569. layer.confirm('添加成功', {
  570. title:'操作提示',
  571. btn: ['返回列表', '继续操作'],
  572. closeBtn: 0,
  573. yes: function(){
  574. location.href = ns.url("pointexchange://shop/exchange/lists")
  575. },
  576. btn2: function() {
  577. location.reload();
  578. }
  579. });
  580. } else {
  581. layer.msg(res.message, {icon: 5, anim: 6});
  582. }
  583. }
  584. });
  585. }
  586. //监听兑换方式
  587. form.on('radio(pay_type)', function(data){
  588. var value = data.value;
  589. var html = '';
  590. if(value == 1){
  591. html = '<input type="number" name="point" min="0" lay-verify="required_point" autocomplete="off" class="layui-input len-short"> 积分' +
  592. '&nbsp;&nbsp;+ &nbsp;&nbsp;<input type="number" name="price" min="0" lay-verify="required_money" autocomplete="off" class="layui-input len-short"> 元' +
  593. '';
  594. }
  595. if(value == 0){
  596. html = '<input type="number" name="point" min="0" lay-verify="required" autocomplete="off" class="layui-input len-short"> 积分';
  597. }
  598. $('.pay_price').html(html);
  599. });
  600. form.verify({
  601. required_point: function(value) {
  602. if (value == "") {
  603. return '积分不能为空';
  604. }
  605. if (Number(value) <= 0){
  606. return '积分必须大于0!';
  607. }
  608. },
  609. required_money: function(value) {
  610. if (value == "") {
  611. return '金额不能为空';
  612. }
  613. if (Number(value) <= 0){
  614. return '价格必须大于0!';
  615. }
  616. },
  617. required_limit: function(value) {
  618. if (Number(value) < 1){
  619. return '兑换限制不能小于1!';
  620. }
  621. },
  622. required_coupon_stock: function(value) {
  623. if (Number(value) <= 0){
  624. return '可兑换数量必须大于0!';
  625. }
  626. },
  627. required_balance_stock: function(value) {
  628. if (Number(value) <= 0){
  629. return '可兑换数量必须大于0!';
  630. }
  631. },
  632. required_balance: function(value) {
  633. if (Number(value) <= 0){
  634. return '红包余额必须大于0!';
  635. }
  636. }
  637. })
  638. });
  639. /* 商品 */
  640. $("body").on("click", ".upload-gift",function () {
  641. goodsSelect(function (res) {
  642. if(!res.length) return false;
  643. selectGoodsSkuId = [];
  644. var html = "", price = 0.00;
  645. for (var i = 0; i < res.length; i++) {
  646. for (var k = 0; k < res[i].selected_sku_list.length; k++) {
  647. var item = res[i].selected_sku_list[k];
  648. var img_path = ns.img(item.sku_image,'small');
  649. $("#gift_name").html("<p class='input-text'>"+item.sku_name+"</p>");
  650. if (item.sku_image != "") {
  651. $("#gift_img").html('<img src="'+ img_path +'" />');
  652. } else {
  653. $("#gift_img").html("");
  654. }
  655. $("#gift_price").html("<p class='input-text'>¥<span class='sku_price'>"+item.price+"</span></p>");
  656. $("#gift_stock").html("<p class='input-text'>"+item.stock+"</p>");
  657. $(".select-gift-list tbody").html(html);
  658. $("input[name=sku_id]").val(item.sku_id);
  659. selectGoodsSkuId.push(item.sku_id);
  660. }
  661. }
  662. $("#goods tbody").html(html);
  663. $(".original-price").text(price);
  664. $(".combined-price").val(price);
  665. $(".save-prices").text(0);
  666. }, selectGoodsSkuId, {mode: "sku", max_num: 1, min_num: 1,disabled:0});
  667. });
  668. /* 优惠券 */
  669. $("body").on("click", ".upload-coupon",function () {
  670. layer.open({
  671. type: 1,
  672. area: ["900px","650px"],
  673. title: '优惠券列表',
  674. content: $("#couponList").html()
  675. });
  676. couponTable = new Table({
  677. elem: "#coupon_list",
  678. url: ns.url("pointexchange://shop/exchange/getCouponList"),
  679. where: {'status': 1},
  680. cols: [
  681. [{
  682. title: '优惠券名称',
  683. unresize: 'false',
  684. width: '20%',
  685. templet: '#couponName'
  686. }, {
  687. field: 'money',
  688. title: '优惠券面额(元)',
  689. unresize: 'false',
  690. width: '15%'
  691. }, {
  692. field: 'count',
  693. title: '发放数量',
  694. unresize: 'false',
  695. width: '15%',
  696. templet: function(data){
  697. return data.count == -1 ? '无限制' : data.count;
  698. }
  699. }, {
  700. field: 'max_fetch',
  701. title: '最大领取数量',
  702. unresize: 'false',
  703. width: '15%',
  704. templet:function(data){
  705. return data.max_fetch == 0 ? '无限制' : data.max_fetch;
  706. }
  707. }, {
  708. field: 'gift_state',
  709. title: '有效期限',
  710. unresize: 'false',
  711. width: '25%',
  712. templet: function (res) {
  713. if(res.validity_type == 0){
  714. return "有效时间至" + ns.time_to_date(res.end_time);
  715. }else{
  716. return "有效时间" + res.fixed_term + "天";
  717. }
  718. }
  719. }, {
  720. title: '操作',
  721. toolbar: '#couponOperation',
  722. unresize: 'false',
  723. align:'right'
  724. }]
  725. ]
  726. });
  727. couponTable.tool(function(obj) {
  728. var data = obj.data;
  729. switch (obj.event) {
  730. case "add":
  731. addcoupon(data);
  732. break;
  733. }
  734. });
  735. function addcoupon(data){
  736. var img_path = ns.img(data.image);
  737. $("#coupon_name").html("<p class='input-text'>"+data.coupon_name+"</p>");
  738. if (data.image) {
  739. $("#coupon_img").html('<img src="'+ img_path +'" />');
  740. } else {
  741. $("#coupon_img").html('<img src="__STATIC__/img/coupon_default.png" />');
  742. }
  743. if(data.type == "reward"){
  744. $(".js-coupon-price").show();
  745. $(".js-coupon-discount").hide();
  746. $("#coupon_price").html("<p class='input-text'>¥"+data.money+"</p>");
  747. }else{
  748. $(".js-coupon-price").hide();
  749. $(".js-coupon-discount").show();
  750. $("#coupon_discount").html("<p class='input-text'>"+data.discount+"折</p>");
  751. }
  752. $("input[name=coupon_type_id]").val(data.coupon_type_id);
  753. layer.closeAll();
  754. }
  755. });
  756. function delGoods(obj,id) {
  757. var goods_ids = [];
  758. for (let i = 0; i < sku_list.length; i++){
  759. if (sku_list[i].sku_id == parseInt(id)){
  760. sku_list.splice(i,1);
  761. }
  762. }
  763. for (let i = 0; i < sku_list.length; i++){
  764. goods_ids.push(sku_list[i].goods_id);
  765. }
  766. $(obj).parents("tr").remove();
  767. $("#goods_num").html(sku_list.length);
  768. selectedGoodsId = goods_ids.toString();
  769. }
  770. // 表格渲染
  771. function renderTable(sku_list) {
  772. //展示已知数据
  773. table = new Table({
  774. elem: '#selected_goods_list',
  775. page: false,
  776. limit: Number.MAX_VALUE,
  777. cols: [
  778. [{
  779. width: "3%",
  780. type: 'checkbox',
  781. unresize: 'false'
  782. },{
  783. field: 'sku_name',
  784. title: '商品名称',
  785. width: '23%',
  786. unresize: 'false',
  787. templet: function(data) {
  788. var html = '';
  789. html += `
  790. <div class="goods-title">
  791. <div class="goods-img">
  792. <img layer-src src="${data.sku_image ? ns.img(data.sku_image) : ''}" alt="">
  793. </div>
  794. <p class="multi-line-hiding goods-name" data-goods_id="${data.goods_id}" data-sku_id="${data.sku_id}" title="${data.sku_name}">${data.sku_name}</p>
  795. </div>
  796. `;
  797. return html;
  798. }
  799. }, {
  800. field: 'price',
  801. title: '商品价格',
  802. unresize: 'false',
  803. align: 'left',
  804. width: '10%',
  805. templet: function(data) {
  806. return '<p class="line-hiding" title="'+ data.price +'">¥<span>' + data.price +'</span></p>';
  807. }
  808. }, {
  809. field: 'stock',
  810. title: '库存',
  811. unresize: 'false',
  812. width: '10%',
  813. templet: function(data) {
  814. return '<p class="stock">' + data.stock +'</p>';
  815. }
  816. }, {
  817. title: '<span title="兑换次数(0为不限次)">兑换次数(0为不限次)</span>',
  818. unresize: 'false',
  819. width: '14%',
  820. templet: '#exchangeLimit'
  821. }, {
  822. title: '<span title="兑换所需积分">所需积分</span>',
  823. unresize: 'false',
  824. width: '12%',
  825. templet: '#exchangePoint'
  826. }, {
  827. title: '<span title="兑换所需金额">所需金额</span>',
  828. unresize: 'false',
  829. width: '12%',
  830. templet: '#exchangeMoney'
  831. },
  832. {
  833. title: '操作',
  834. toolbar: '#operation',
  835. unresize: 'false',
  836. align:'right'
  837. }]
  838. ],
  839. callback:function(){
  840. form.render();
  841. },
  842. data: sku_list,
  843. toolbar: '#toolbarOperation'
  844. });
  845. table.toolbar(function(obj) {
  846. if (obj.data.length < 1) {
  847. layer.msg('请选择要操作的数据');
  848. return;
  849. }
  850. switch (obj.event) {
  851. case "change-number":
  852. editInput(0,obj);
  853. break;
  854. case "goods-integral":
  855. editInput(1,obj);
  856. break;
  857. case "goods-price":
  858. editInput(2,obj);
  859. break;
  860. }
  861. });
  862. }
  863. function editInput(textIndex=0,data) {
  864. var text = [{
  865. name: '兑换次数',
  866. value: 'limit_num'
  867. },{
  868. name: '所需积分',
  869. value: 'point'
  870. },{
  871. name: '所需金额',
  872. value: 'exchange_price'
  873. }];
  874. layer.open({
  875. type: 1,
  876. title:"修改"+text[textIndex].name,
  877. area:['600px'],
  878. btn:["保存","返回"],
  879. content: `
  880. <div class="layui-form-item">
  881. <label class="layui-form-label"><span class="required">*</span>${text[textIndex].name}:</label>
  882. <div class="layui-input-block">
  883. <input type="text" name="bargain_edit_input" lay-verify="required" autocomplete="off" onchange="detectionNumType(this,'integral')" class="layui-input len-mid" placeholder="请输入${text[textIndex].name}">
  884. </div>
  885. </div>
  886. `,
  887. yes: function(index, layero){
  888. var val = $("input[name='bargain_edit_input']").val();
  889. if (!val){
  890. layer.msg("请输入" + text[textIndex].name);
  891. return false;
  892. }
  893. data.data.forEach(function (item,index) {
  894. sku_list.forEach(function (skuItem,skuIndex) {
  895. if (item.sku_id == skuItem.sku_id){
  896. sku_list[skuIndex][text[textIndex].value] = val;
  897. }
  898. })
  899. });
  900. renderTable(sku_list);
  901. layer.closeAll();
  902. }
  903. });
  904. }
  905. /* 商品 */
  906. function addGoods(){
  907. goodsSelect(function (res) {
  908. if (!res.length) return false;
  909. goods_id = [];
  910. sku_list = [];
  911. for(var i=0;i<res.length;i++) {
  912. for (var k = 0; k < res[i].selected_sku_list.length; k++) {
  913. var item = res[i].selected_sku_list[k];
  914. item.exchange_price = 0;
  915. item.point = 0;
  916. item.limit_num = 0;
  917. goods_id.push(item.goods_id);
  918. sku_list.push(item);
  919. }
  920. }
  921. renderTable(sku_list);
  922. selectedGoodsId = goods_id;
  923. $("#goods_num").html(sku_list.length)
  924. }, selectedGoodsId);
  925. }
  926. function setSkulist(type, sku_id, obj,num_type){
  927. var value = $(obj).val();
  928. //大于零 且 不是小数
  929. if (value < 0 && num_type == 'integral')
  930. $(obj).val(0);
  931. else if (num_type == 'integral')
  932. $(obj).val(Math.round(value));
  933. //大于1 且 不是小数
  934. if (value < 1 && num_type == 'positiveInteger')
  935. $(obj).val(1);
  936. else if (num_type == 'positiveInteger')
  937. $(obj).val(Math.round(value));
  938. //大于零可以是小数
  939. if (num_type == 'positiveNumber') {
  940. value = parseFloat(value).toFixed(2);
  941. if (value < 0)
  942. $(obj).val(0);
  943. else
  944. $(obj).val(value);
  945. }
  946. $.each(sku_list, function (i, e) {
  947. if(sku_id == e.sku_id){
  948. sku_list[i][type] = $(obj).val();
  949. }
  950. })
  951. }
  952. //返回
  953. function back() {
  954. location.href = ns.url("pointexchange://shop/exchange/lists");
  955. }
  956. $("body").on('keyup', '.stock', function() {
  957. var value = $(this).val();
  958. if(value % 1 !== 0){
  959. layer.msg("红包数量请输入整数");
  960. $(this).val(0);
  961. }
  962. });
  963. $("body").on('keyup', '.expoint', function() {
  964. var value = $(this).val() ;
  965. if(value % 1 !== 0){
  966. layer.msg("兑换积分请输入整数");
  967. $(this).val(0);
  968. }
  969. });
  970. //检测数据类型
  971. function detectionNumType(el, type) {
  972. var value = $(el).val();
  973. //大于零 且 不是小数
  974. if (value < 0 && type == 'integral')
  975. $(el).val(0);
  976. else if (type == 'integral')
  977. $(el).val(Math.round(value));
  978. //大于1 且 不是小数
  979. if (value < 1 && type == 'positiveInteger')
  980. $(el).val(1);
  981. else if (type == 'positiveInteger')
  982. $(el).val(Math.round(value));
  983. //大于零可以是小数
  984. if (type == 'positiveNumber') {
  985. value = parseFloat(value).toFixed(2);
  986. if (value < 0)
  987. $(el).val(0);
  988. else
  989. $(el).val(value);
  990. }
  991. }
  992. function checkInput(obj){
  993. $(obj).val(Math.abs($(obj).val()));
  994. }
  995. </script>
  996. {/block}