buy.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>添加页面</title>
  6. </head>
  7. <body>
  8. <form class="layui-form" lay-filter="layui-form" id="htmlNode"></form>
  9. <script type="text/html" id="loginTemplate">
  10. <div class="mainBox">
  11. <div class="main-container">
  12. <div class="main-container">
  13. <blockquote class="layui-elem-quote">
  14. 此处登录laytp官网账号
  15. 如果没有laytp官网账号
  16. 请先 <a style="color:#2d8cf0;" href="https://www.laytp.com" target="_blank">注册</a>
  17. </blockquote>
  18. <div class="layui-form-item">
  19. <label class="layui-form-label" title="用户名"> <text title="必填项" style="color:red;">*</text> 用户名</label>
  20. <div class="layui-input-block">
  21. <input autocomplete="off" type="text" name="username" id="username" placeholder="用户名" class="layui-input" lay-verify="required">
  22. </div>
  23. </div>
  24. <div class="layui-form-item">
  25. <label class="layui-form-label" title="密码"> <text title="必填项" style="color:red;">*</text> 密码</label>
  26. <div class="layui-input-block">
  27. <input autocomplete="off" type="password" name="password" id="password" placeholder="密码" class="layui-input" lay-verify="required">
  28. </div>
  29. </div>
  30. </div>
  31. </div>
  32. </div>
  33. <div class="bottom">
  34. <div class="button-container">
  35. <button type="submit" class="laytp-btn laytp-btn-primary laytp-btn-sm addBtn" lay-submit="" lay-filter="add">
  36. <i class="layui-icon layui-icon-ok"></i>
  37. 提交
  38. </button>
  39. <button type="reset" class="laytp-btn laytp-btn-sm">
  40. <i class="layui-icon layui-icon-refresh"></i>
  41. 重置
  42. </button>
  43. </div>
  44. </div>
  45. </script>
  46. <script type="text/html" id="userTemplate">
  47. <div class="mainBox">
  48. <div class="main-container">
  49. <div class="main-container">
  50. <blockquote class="layui-elem-quote">
  51. 您已登录,昵称:{{d.nickname}}。请先购买插件<br />
  52. </blockquote>
  53. <div class="layui-row">
  54. <div class="layui-col-md6">
  55. <div class="layui-form-item">
  56. <label class="layui-form-label" title="插件名">插件名</label>
  57. <div class="layui-input-block">
  58. <div class="layui-form-mid">{{d.name}}({{d.alias}})</div>
  59. </div>
  60. </div>
  61. </div>
  62. <div class="layui-col-md6">
  63. <div class="layui-form-item">
  64. <label class="layui-form-label" title="价格">价格</label>
  65. <div class="layui-input-block">
  66. <div class="layui-form-mid">¥{{d.price/100}}</div>
  67. </div>
  68. </div>
  69. </div>
  70. </div>
  71. <div class="layui-form-item">
  72. <label class="layui-form-label" title="支付方式">支付方式</label>
  73. <div class="layui-input-block">
  74. <input type="radio" name="payment" value="ali" title="支付宝" checked>
  75. <button type="button" class="layui-btn layui-btn-normal createOrder">生成支付二维码</button>
  76. </div>
  77. </div>
  78. <div class="layui-row">
  79. <div class="layui-col-md6">
  80. <div class="layui-form-item">
  81. <label class="layui-form-label" title="支付二维码">支付二维码</label>
  82. <div class="layui-input-block">
  83. <div class="layui-form-mid" id="qrCode">请点击[生成支付二维码]按钮,生成支付二维码</div>
  84. </div>
  85. </div>
  86. </div>
  87. <div class="layui-col-md6">
  88. <div class="layui-form-item">
  89. <label class="layui-form-label" title="支付状态">支付状态</label>
  90. <div class="layui-input-block">
  91. <div class="layui-form-mid" id="payStatus">
  92. 请点击[生成支付二维码]按钮,生成支付二维码
  93. </div>
  94. </div>
  95. </div>
  96. </div>
  97. </div>
  98. </div>
  99. </div>
  100. </div>
  101. </script>
  102. <script>
  103. if(localStorage.getItem("staticDomain")){
  104. document.write("<link rel='stylesheet' href='" + localStorage.getItem("staticDomain") + "/component/layui/css/layui.css?v=" + localStorage.getItem("version") + "'>");
  105. document.write("<script src='" + localStorage.getItem("staticDomain") + "/component/layui/layui.js?v="+localStorage.getItem("version")+"'><\/script>");
  106. document.write("<script src='" + localStorage.getItem("staticDomain") + "/component/laytp/layuiConfig.js?v="+localStorage.getItem("version")+"'><\/script>");
  107. document.write("<script src='" + localStorage.getItem("staticDomain") + "/component/jquery_3.3.1.js?v="+localStorage.getItem("version")+"'><\/script>");
  108. document.write("<script src='" + localStorage.getItem("staticDomain") + "/component/jquery.qrcode.js?v="+localStorage.getItem("version")+"'><\/script>");
  109. document.write("<script src='" + localStorage.getItem("staticDomain") + "/component/qrcode.js?v="+localStorage.getItem("version")+"'><\/script>");
  110. }else{
  111. document.write("<link rel='stylesheet' href='/static/component/layui/css/layui.css?v=" + localStorage.getItem("version") + "'>");
  112. document.write("<script src='/static/component/layui/layui.js?v="+localStorage.getItem("version")+"'><\/script>");
  113. document.write("<script src='/static/component/laytp/layuiConfig.js?v="+localStorage.getItem("version")+"'><\/script>");
  114. document.write("<script src='/static/component/jquery_3.3.1.js?v="+localStorage.getItem("version")+"'><\/script>");
  115. document.write("<script src='/static/component/jquery.qrcode.js?v="+localStorage.getItem("version")+"'><\/script>");
  116. document.write("<script src='/static/component/qrcode.js?v="+localStorage.getItem("version")+"'><\/script>");
  117. }
  118. </script>
  119. <script>
  120. layui.use(['laytp'],function(){
  121. var name = decodeURI(facade.getUrlParam('name'));
  122. var alias = facade.getUrlParam('alias');
  123. var price = facade.getUrlParam('price');
  124. facade.ajax({
  125. headers: layui.context.get("laytpGwToken"),
  126. url: "https://api.laytp.com/user/info",
  127. successAlert: false
  128. }).done(function(res){
  129. if(res.code === 0){
  130. if(res.data){
  131. res.data.name = name;
  132. res.data.alias = alias;
  133. res.data.price = price;
  134. layui.laytpl($("#userTemplate").html()).render(res.data, function(string){
  135. $("#htmlNode").html(string);
  136. layui.form.render();
  137. });
  138. }else{
  139. layui.laytpl($("#loginTemplate").html()).render({}, function(string){
  140. $("#htmlNode").html(string);
  141. });
  142. }
  143. }
  144. });
  145. var interval;
  146. // 监听生成支付二维码按钮点击
  147. $(document).off("click", ".createOrder").on("click", ".createOrder", function () {
  148. var createOrderBtnAnim = layui.button.load({elem:$(".createOrder")});
  149. var data = layui.form.val("layui-form");
  150. facade.ajax({
  151. headers: layui.context.get("laytpGwToken"),
  152. url: "https://api.laytp.com/plugins/createOrder",
  153. data:{plugin:alias, payment:data.payment},
  154. successAlert: false
  155. }).done(function(res){
  156. createOrderBtnAnim.stop();
  157. clearInterval(interval);
  158. if(res.code === 0){
  159. $('#qrCode').html('');
  160. $('#qrCode').qrcode(res.data.code_url);
  161. $('#payStatus').html('<i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i><span style="color:red">等待扫码支付中,支付完成请勿关闭当前页面,程序将自动安装插件...</span>');
  162. // 开始轮询获取订单支付状态
  163. interval = setInterval(function(){
  164. facade.ajax({
  165. url: "https://api.laytp.com/plugins/getOrderStatus",
  166. data: {order_no:res.data.order_no},
  167. successAlert: false,
  168. errorAlert: false
  169. }).done(function(res){
  170. if(res.code === 0 && parseInt(res.data) === 2){
  171. clearInterval(interval);
  172. $('#payStatus').html('<i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i><span style="color:#36b368">支付完成,正在安装插件</span>');
  173. facade.ajax({
  174. route:"/admin.plugins/install",
  175. data:{"plugin":alias, "laytpGwToken":layui.context.get("laytpGwToken").token}
  176. }).done(function(installRes){
  177. if(installRes.code === 0){
  178. parent.facade.success("安装成功");
  179. parent.layui.layer.close(parent.layui.layer.getFrameIndex(window.name));//关闭当前页
  180. parent.layui.table.reload("laytp-table");
  181. }else{
  182. facade.error("插件包程序错误,无法安装,请联系管理员");
  183. }
  184. }).fail(function(){
  185. facade.error("插件购买成功,安装时网络错误,请重新安装");
  186. });
  187. }
  188. });
  189. }, 5000);
  190. }
  191. }).fail(function(){
  192. createOrderBtnAnim.stop();
  193. });
  194. });
  195. })
  196. </script>
  197. </body>
  198. </html>