index.html 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. <!DOCTYPE html>
  2. <html class="">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport"
  6. content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"/>
  7. <title>配置终端</title>
  8. </head>
  9. <style>
  10. #qrcode {
  11. padding: 10px;
  12. background: #fff;
  13. border-radius: 2px;
  14. }
  15. .grid-hero {
  16. margin-top: 1rem;
  17. margin-bottom: 1rem;
  18. }
  19. .section {
  20. color: #fff;
  21. }
  22. .bg-grey {
  23. padding: 1rem;
  24. }
  25. .modal-container {
  26. width: 80%;
  27. }
  28. .input-section {
  29. overflow: hidden;
  30. }
  31. html {
  32. /*可以选其中一种背景色*/
  33. background-blend-mode: multiply;
  34. background-image: linear-gradient(to top, #a3bded 0%, #6991c7 100%);
  35. height: 100%;
  36. }
  37. body {
  38. background: transparent !important;
  39. height: 100%;
  40. position: relative;
  41. }
  42. body .btn.btn-primary {
  43. height: 4rem;
  44. background: rgba(16, 142, 233, 0.92);
  45. border-color: rgba(16, 142, 233, 96);
  46. }
  47. body .btn.btn-primary:hover, body .btn.btn-primary:active {
  48. background: rgba(16, 142, 233, 0.96);
  49. border-color: rgba(16, 142, 233, 1);
  50. }
  51. body .form-input {
  52. border-color: rgba(16, 142, 233, .1);
  53. height: 4rem;
  54. }
  55. body .form-input:focus {
  56. border-color: rgba(16, 142, 233, 1);
  57. }
  58. #connect {
  59. margin-top: 20px;
  60. padding: 0 40px;
  61. }
  62. .toast-msg {
  63. position: absolute;
  64. top: 0;
  65. left: 0;
  66. width: 100%;
  67. z-index: 99999;
  68. padding: 10px 15px;
  69. color: #fff;
  70. text-align: center;
  71. white-space: nowrap;
  72. background-color: rgba(0, 0, 0, .9);
  73. border-radius: 3px;
  74. }
  75. .toast-msg .toast-text {
  76. font-size: 14px
  77. }
  78. </style>
  79. <body>
  80. <section class="section bg-grey">
  81. <section class="grid-hero container grid-480">
  82. <header class="text-center">
  83. <div id="qrcode" style="display: inline-block"></div>
  84. <p id="imei">IMEI</p>
  85. </header>
  86. </section>
  87. </section>
  88. <section class="section input-section">
  89. <section class="container grid-480">
  90. <header class="text-left mb-10"><h5 class="top-tips" style="margin-top: 0">配置终端接入一个无线网络</h5></header>
  91. <form class="main-form">
  92. <div class="form-group">
  93. <label class="form-label">让我连接到</label>
  94. <div class="input-group">
  95. <input type="text" id="ssid" class="form-input" placeholder="无线网络名">
  96. <button type="button" id="scanap" class="btn btn-primary input-group-btn">附近网络</button>
  97. </div>
  98. </div>
  99. <div class="form-group">
  100. <label class="form-label" for="input-pwd">网络密码</label>
  101. <input id="pwd" class="form-input" type="text" id="input-pwd" placeholder="无线网络密码(无密码请留空)">
  102. </div>
  103. <div class="form-group text-center ">
  104. <button type="button" id="connect" class="btn btn-primary ">连接网络</button>
  105. </div>
  106. </form>
  107. </section>
  108. </section>
  109. <div id="selectwifi" class="modal">
  110. <div class="modal-overlay"></div>
  111. <div class="modal-container">
  112. <div class="modal-header">
  113. <div class="modal-title">选择一个无线网络</div>
  114. </div>
  115. <div id="aplist" class="modal-body"></div>
  116. </div>
  117. </div>
  118. <script id="item-ap" type="text/html">
  119. <div class="chip hand text-ellipsis">
  120. <svg width="30px" height="20px" class="chip-icon">
  121. <path d="M15,20 L0.86,5.86 A20,20 0 0,1 29.14,5.86" fill="#d0d0d0"/>
  122. <path d="M15,20 L{0},{1} A{2},{2} 0 0,1 {3},{1}" fill="#666"/>
  123. </svg>
  124. <span class="chip-content">{4}</span>
  125. </div>
  126. </script>
  127. <link href="spectre.min.css" rel="stylesheet"/>
  128. <script src="zepto.min.js"></script>
  129. <script src="qrcode.min.js"></script>
  130. <!--<script src="vconsole.min.js"></script>-->
  131. <script>
  132. // new VConsole();
  133. function toast(e) {
  134. var t = ($("body").append('<div class=""></div>'), $(".toast")),
  135. n = '<div class="toast-msg"><div class="toast-text">' + e + "</div></div>";
  136. $("body").append(n), setTimeout(function () {
  137. t.remove(), $(".toast-msg").remove()
  138. }, 3000)
  139. }
  140. String.prototype.format = function () {
  141. var args = arguments;
  142. return this.replace(/\{(\d+)\}/g
  143. , function (m, i) {
  144. return args[i];
  145. });
  146. }
  147. $(function () {
  148. $.get('../devInfo', function (resJson) {
  149. if (resJson.imei) {
  150. var imei = resJson.imei || "没有编号";
  151. $('#imei').text(imei);
  152. var qrcode = new QRCode("qrcode", {
  153. text: imei,
  154. width: 128,
  155. height: 128,
  156. colorDark: "#108EE9",
  157. colorLight: "#ffffff",
  158. correctLevel: QRCode.CorrectLevel.H
  159. });
  160. }
  161. },'json');
  162. $('#connect').click(function () {
  163. var ssid = $('#ssid').val()
  164. if (!ssid) {
  165. toast('请选择要连接的网络!');
  166. return
  167. }
  168. $('#connect').addClass('loading').prop('disabled', true);
  169. $.get('../config?ssid={0}&pwd={1}'.format(ssid, $('#pwd').val())
  170. , function (resJson) {
  171. var status = resJson.result || resJson.status
  172. var tips
  173. if (status) {
  174. tips = '已经连接网络'
  175. toast(tips)
  176. $('.top-tips').text(tips).css('text-align', 'center')
  177. $('.main-form').hide()
  178. } else {
  179. toast('连接失败,请确保输入正确')
  180. }
  181. $('#connect').removeClass('loading').prop('disabled', false);
  182. }, 'json');
  183. });
  184. $('#scanap').click(function () {
  185. $('#scanap').addClass('loading').prop('disabled', true);
  186. $.get('../scanap', function (resJson) {
  187. $('#scanap').removeClass('loading').prop('disabled', false);
  188. //resJson = JSON.parse(resJson);
  189. var template = $('#item-ap').html();
  190. var cos45, sin45 = cos45 = 0.70710678118655;
  191. var html = '';
  192. for (var i = 0; i < resJson.length; i++) {
  193. var r = 0.3333 * parseInt(resJson[i]["rssi"]) + 33.3333;
  194. r = r > 20 ? 20 : (r < 0 ? 0 : r)
  195. html += template.format(
  196. 15 - r * cos45
  197. , 20 - r * sin45
  198. , r
  199. , 15 + r * cos45
  200. , resJson[i]["ssid"]
  201. );
  202. }
  203. $('#aplist').html(html)
  204. $('#selectwifi').addClass('active');
  205. $(".modal-overlay").click(function () {
  206. $('#selectwifi').removeClass('active');
  207. });
  208. $("#aplist div").click(function () {
  209. $('#selectwifi').removeClass('active');
  210. var ssid = $(this).children('.chip-content').html()
  211. $('#ssid').val(ssid);
  212. });
  213. },'json');
  214. });
  215. })
  216. </script>
  217. </body>
  218. </html>