buy.html 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. {extend name="app/shop/view/base.html"/}
  2. {block name="resources"}
  3. <style>
  4. .card-common{
  5. margin-top: 0;
  6. }
  7. .sms-package-list {
  8. }
  9. .sms-package-list h3 {
  10. border-bottom: 1px solid #f1f1f1;
  11. padding: 10px 0;
  12. font-size: 16px;
  13. }
  14. .sms-package-list ul {
  15. overflow: hidden;
  16. }
  17. .sms-package-list ul li {
  18. border: 1px solid #f1f1f1;
  19. float: left;
  20. width: 150px;
  21. padding: 10px;
  22. text-align: center;
  23. cursor: pointer;
  24. margin-right: 10px;
  25. margin-bottom: 10px;
  26. border-radius: 5px;
  27. }
  28. .sms-package-list ul li .package-name {
  29. margin-bottom: 10px;
  30. display: block;
  31. }
  32. .sms-num {
  33. font-size: 24px;
  34. margin-bottom: 10px;
  35. display: block;
  36. }
  37. .sms-package-list ul li .price {
  38. }
  39. .sms-package-list ul li .original-price {
  40. text-decoration: line-through;
  41. }
  42. .sms-invoice-list {
  43. }
  44. .sms-invoice-list h3 {
  45. border-bottom: 1px solid #f1f1f1;
  46. padding: 10px 0;
  47. font-size: 16px;
  48. }
  49. .sms-invoice-list .layui-form-item {
  50. display: none;
  51. }
  52. .pay-way h3 {
  53. border-bottom: 1px solid #f1f1f1;
  54. padding: 10px 0;
  55. font-size: 16px;
  56. }
  57. .settlement-wrap ul li {
  58. margin-bottom: 10px;
  59. }
  60. .settlement-wrap ul li.invoice{
  61. display: none;
  62. }
  63. .settlement-wrap ul li label {
  64. width: 80px;
  65. display: inline-block;
  66. text-align: right;
  67. }
  68. .js-pay-money span{
  69. font-size: 24px;
  70. font-weight: 600;
  71. }
  72. </style>
  73. {/block}
  74. {block name="main"}
  75. <div class="layui-form">
  76. <div class="layui-card card-common card-brief">
  77. <div class="layui-card-header">
  78. <div>
  79. <span class="card-title">选择套餐</span>
  80. </div>
  81. </div>
  82. <div class="layui-card-body sms-package-list">
  83. <ul>
  84. {foreach name="$sms_package_list['sms_list']" item="vo" key="k"}
  85. <li data-package-id="{$vo['package_id']}" {if $k===0 }class="border-color" {/if}>
  86. <span class="package-name">{$vo['package_name']}</span>
  87. <span class="sms-num text-color">{$vo['sms_num']}条</span>
  88. <p>
  89. <span class="price">¥{$vo['price']}</span>
  90. <span class="original-price text-color-gray">¥{$vo['original_price']}</span>
  91. </p>
  92. </li>
  93. {/foreach}
  94. </ul>
  95. </div>
  96. </div>
  97. {notempty name="$sms_package_list['invoice_list']"}
  98. <div class="layui-card card-common card-brief">
  99. <div class="layui-card-header">
  100. <div>
  101. <span class="card-title">发票</span>
  102. </div>
  103. </div>
  104. <div class="layui-card-body sms-invoice-list">
  105. <div>
  106. <input type="radio" name="invoice" value="0" title="无需发票" lay-filter="invoice" checked>
  107. {foreach name="$sms_package_list['invoice_list']" item="vo"}
  108. <input type="radio" name="invoice" value="{$vo['id']}" title="{$vo['name']}" lay-filter="invoice" data-rate="{$vo['rate']}" data-type="{$vo['type']}" data-invoice-type="{$vo['invoice_type']}" data-invoice-content="{$vo['invoice_content']}">
  109. {/foreach}
  110. </div>
  111. <div class="layui-form-item">
  112. <label class="layui-form-label mid"><span class="required">*</span>收件人:</label>
  113. <div class="layui-input-block">
  114. <input type="text" name="consigner" lay-verify="required" autocomplete="off" class="layui-input len-mid">
  115. </div>
  116. </div>
  117. <div class="layui-form-item">
  118. <label class="layui-form-label mid"><span class="required">*</span>手机号:</label>
  119. <div class="layui-input-block">
  120. <input type="text" name="mobile" lay-verify="required" autocomplete="off" class="layui-input len-mid">
  121. </div>
  122. </div>
  123. <div class="layui-form-item">
  124. <label class="layui-form-label mid"><span class="required">*</span>邮编:</label>
  125. <div class="layui-input-block">
  126. <input type="text" name="zip_code" lay-verify="required" autocomplete="off" class="layui-input len-mid">
  127. </div>
  128. </div>
  129. <div class="layui-form-item">
  130. <label class="layui-form-label mid"><span class="required">*</span>收货地址:</label>
  131. <div class="layui-input-block">
  132. <input type="text" name="address" lay-verify="required" autocomplete="off" class="layui-input len-long">
  133. </div>
  134. </div>
  135. <div class="layui-form-item">
  136. <label class="layui-form-label mid"><span class="required">*</span>抬头名称:</label>
  137. <div class="layui-input-block">
  138. <input type="text" name="invoice_title" lay-verify="required" autocomplete="off" class="layui-input len-mid">
  139. </div>
  140. </div>
  141. <div class="layui-form-item">
  142. <label class="layui-form-label mid"><span class="required">*</span>纳税人识别号:</label>
  143. <div class="layui-input-block">
  144. <input type="text" name="invoice_number" lay-verify="required" autocomplete="off" class="layui-input len-mid">
  145. </div>
  146. </div>
  147. </div>
  148. </div>
  149. {/notempty}
  150. <div class="layui-card card-common card-brief">
  151. <div class="layui-card-header">
  152. <div>
  153. <span class="card-title">选择支付方式</span>
  154. </div>
  155. </div>
  156. <div class="layui-card-body pay-way">
  157. <input type="radio" name="pay_way" value="alipay" title="支付宝" checked>
  158. </div>
  159. </div>
  160. <div class="settlement-wrap">
  161. <ul>
  162. {notempty name="$sms_package_list['invoice_list']"}
  163. <li class="invoice">
  164. <label>税率:</label>
  165. <span class="js-rate">0</span>
  166. </li>
  167. <li class="invoice">
  168. <label>类型:</label>
  169. <span class="js-type"></span>
  170. </li>
  171. <li class="invoice">
  172. <label>发票类型:</label>
  173. <span class="js-invoice-type"></span>
  174. </li>
  175. <li class="invoice">
  176. <label>发票内容:</label>
  177. <span class="js-invoice-content"></span>
  178. </li>
  179. <li class="invoice">
  180. <label>税费:</label>
  181. <span class="js-invoice-money">¥0.00</span>
  182. </li>
  183. <li class="invoice">
  184. <label>订单金额:</label>
  185. <span class="js-order-money">¥0.00</span>
  186. </li>
  187. {/notempty}
  188. <li>
  189. <label>应付:</label>
  190. <span class="js-pay-money text-color">¥<span class="text-color">0.00</span></span>
  191. </li>
  192. </ul>
  193. </div>
  194. <input type="hidden" name="invoice_id">
  195. <input type="hidden" name="invoice_content">
  196. <div class="form-row sm">
  197. <button class="layui-btn" lay-submit lay-filter="save">支付</button>
  198. <button class="layui-btn layui-btn-primary" onclick="location.href=ns.url('niusms://shop/sms/index')">返回</button>
  199. </div>
  200. </div>
  201. {/block}
  202. {block name="script"}
  203. <script>
  204. layui.use('form', function () {
  205. var form = layui.form,
  206. repeat_flag = false; //防重复标识
  207. form.render();
  208. calculate(0, 0);
  209. form.on('radio(invoice)', function (data) {
  210. var rate = $(data.elem).attr("data-rate");
  211. var type = $(data.elem).attr("data-type");
  212. var type_value = "";
  213. if (type == 1) {
  214. type_value = "纸质发票";
  215. } else if (type == 2) {
  216. type_value = "电子发票";
  217. }
  218. var invoice_type = $(data.elem).attr("data-invoice-type");
  219. var invoice_type_value = "";
  220. if (invoice_type == 1) {
  221. invoice_type_value = "普票";
  222. } else if (invoice_type == 2) {
  223. invoice_type_value = "专票";
  224. }
  225. var invoice_content = $(data.elem).attr("data-invoice-content");
  226. calculate(parseInt(data.value) ? 1 : 0, data.value);
  227. if (parseInt(data.value)) {
  228. $(".js-rate").html("<strong class='text-color'>" + rate + "%</strong>");
  229. $(".js-type").text(type_value);
  230. $(".js-invoice-type").text(invoice_type_value);
  231. $(".js-invoice-content").text(invoice_content);
  232. $(".settlement-wrap .invoice").show();
  233. $(".sms-invoice-list .layui-form-item").show();
  234. $("input[name='invoice_id']").val(data.value);
  235. $("input[name='invoice_content']").val(invoice_content);
  236. } else {
  237. $(".settlement-wrap .invoice").hide();
  238. $(".sms-invoice-list .layui-form-item").hide();
  239. $("input[name='invoice_id']").val(0);
  240. $("input[name='invoice_content']").val('');
  241. }
  242. });
  243. $("body").off("click").on("click",".sms-package-list ul li",function () {
  244. $(this).addClass("border-color").siblings().removeClass("border-color");
  245. var isInvoice = parseInt($("input[name='invoice']:checked").val()) ? 1 : 0;
  246. var packageId =$(".sms-package-list ul li.border-color").attr("data-package-id");
  247. calculate(isInvoice, packageId);
  248. });
  249. form.verify({
  250. required: function (value, item) {
  251. var str = $(item).parent().parent().find("label").text().toString().replace("*", "").replace(":", "");
  252. if (parseInt($("input[name='invoice']:checked").val())) {
  253. if (value == null || value.trim() == "" || value == undefined || value == null) {
  254. return str + "不能为空";
  255. }
  256. }
  257. }
  258. });
  259. form.on("submit(save)", function (data) {
  260. data.field.package_id =$(".sms-package-list ul li.border-color").attr("data-package-id");
  261. data.field.is_invoice = parseInt($("input[name='invoice']:checked").val()) ? 1 : 0;
  262. if(repeat_flag) return false;
  263. repeat_flag = true;
  264. var newWin = window.open('about:blank');
  265. $.ajax({
  266. url: ns.url("niusms://shop/sms/createSmsOrder"),
  267. dataType: 'JSON',
  268. type: 'POST',
  269. data: data.field,
  270. success: function (res) {
  271. if (res.code == 0) {
  272. newWin.location.href = ns.url("niusms://shop/sms/payment", {out_trade_no: res.data.out_trade_no});
  273. var index = layer.confirm('请确认支付是否完成',{
  274. title: '支付提示',
  275. btn: ['已完成支付', '返回'],
  276. yes: function() {
  277. location.href=ns.url('niusms://shop/sms/index');
  278. },btn2: function() {
  279. repeat_flag = false;
  280. layer.close(index);
  281. }
  282. });
  283. } else {
  284. repeat_flag = false;
  285. layer.msg(res.message);
  286. }
  287. }
  288. })
  289. })
  290. });
  291. function calculate(is_invoice, invoice_id) {
  292. $.ajax({
  293. url: ns.url("niusms://shop/sms/calculate"),
  294. dataType: 'JSON',
  295. type: 'POST',
  296. data: {
  297. package_id: $(".sms-package-list ul li.border-color").attr("data-package-id"),
  298. is_invoice: is_invoice,
  299. invoice_id: invoice_id
  300. },
  301. success: function (res) {
  302. if (res.code >= 0) {
  303. var data = res.data;
  304. $(".settlement-wrap .js-invoice-money").text("¥" + parseFloat(data.invoice_money).toFixed(2));
  305. $(".settlement-wrap .js-order-money").text("¥" + parseFloat(data.order_money).toFixed(2));
  306. $(".settlement-wrap .js-pay-money").html("¥" + "<span class='text-color'>" + parseFloat(data.pay_money).toFixed(2) +"</span>");
  307. }
  308. }
  309. });
  310. }
  311. </script>
  312. {/block}