index.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>壹管家上门服务</title>
  5. <meta http-equiv="Content-type" content="text/html; charset=utf-8">
  6. <meta name="viewport"
  7. content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
  8. <meta name="apple-mobile-web-app-capable" content="yes">
  9. <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/>
  10. <meta http-equiv="Pragma" content="no-cache">
  11. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  12. <link rel="stylesheet" type="text/css" href="/webapp/framework/ratchet-2.0.2/dist/css/ratchet.min.css">
  13. <link rel="stylesheet" type="text/css" href="/webapp/framework/ratchet-2.0.2/dist/css/ratchet-theme-ios.min.css">
  14. <link rel="stylesheet" type="text/css" href="/webapp/o2o/dist/css/main.css">
  15. <style>
  16. html {
  17. height: 100%;
  18. }
  19. body {
  20. position: relative;
  21. margin: 0;
  22. padding: 0;
  23. width: 100%;
  24. height: 100%;
  25. overflow: hidden;
  26. }
  27. .spa-fullscreen {
  28. position: absolute;
  29. left: 0;
  30. top: 0;
  31. margin: 0;
  32. padding: 0;
  33. width: 100%;
  34. visibility: hidden;
  35. overflow: hidden;
  36. z-index: -1;
  37. }
  38. .spa-page {
  39. position: absolute;
  40. left: 0;
  41. top: 0;
  42. bottom: 0;
  43. right: 0;
  44. margin: 0;
  45. padding: 0;
  46. overflow: hidden;
  47. z-index: 2000;
  48. -webkit-transform: translateZ(0);
  49. -webkit-backface-visibility: hidden;
  50. -webkit-transform-style: preserve-3d;
  51. }
  52. .spa-page-bg {
  53. position: absolute;
  54. left: 0;
  55. top: 0;
  56. bottom: 0;
  57. right: 0;
  58. margin: 0;
  59. padding: 0;
  60. }
  61. .spa-page-body {
  62. position: absolute;
  63. left: 0;
  64. top: 0;
  65. bottom: 0;
  66. right: 0;
  67. margin: 0;
  68. padding: 0;
  69. overflow: hidden;
  70. -webkit-transform: translateZ(0);
  71. -webkit-backface-visibility: hidden;
  72. -webkit-transform-style: preserve-3d;
  73. }
  74. .spa-scroll {
  75. overflow: auto;
  76. }
  77. .spa-scroll-touch {
  78. -webkit-overflow-scrolling: touch;
  79. }
  80. .spa-scroll-x {
  81. overflow-y: hidden;
  82. }
  83. .spa-scroll-y {
  84. overflow-x: hidden;
  85. }
  86. .spa-cover {
  87. display: none;
  88. position: absolute;
  89. left: 0;
  90. right: 0;
  91. top: 0;
  92. bottom: 0;
  93. text-align: center;
  94. z-index: 5000;
  95. }
  96. .spa-loader {
  97. position: absolute;
  98. left: 0;
  99. right: 0;
  100. top: 0;
  101. bottom: 0;
  102. text-align: center;
  103. overflow: hidden;
  104. z-index: 5001;
  105. }
  106. .spa-loader-animate {
  107. position: absolute;
  108. top: 50%;
  109. left: 50%;
  110. }
  111. .spa-loader-animate .bg {
  112. position: absolute;
  113. width: 64px;
  114. height: 64px;
  115. margin: 0 auto;
  116. top: -32px;
  117. left: -32px;
  118. border-radius: 50%;
  119. background: #2C3E50;
  120. opacity: 0.5;
  121. }
  122. .spa-loader-animate .ball {
  123. display: block;
  124. float: left;
  125. padding: 8px;
  126. margin-top: -8px;
  127. margin-left: -10px;
  128. -webkit-border-radius: 50%;
  129. -moz-border-radius: 50%;
  130. -ms-border-radius: 50%;
  131. -o-border-radius: 50%;
  132. border-radius: 50%;
  133. }
  134. .spa-loader-animate span:nth-child(2) {
  135. background: #16A085;
  136. -webkit-animation: move-left 800ms ease-in-out infinite alternate;
  137. -moz-animation: move-left 800ms ease-in-out infinite alternate;
  138. -ms-animation: move-left 800ms ease-in-out infinite alternate;
  139. -animation: move-left 800ms ease-in-out infinite alternate;
  140. }
  141. .spa-loader-animate .ball:nth-child(3) {
  142. background: #E67E22;
  143. -webkit-animation: move-right 800ms ease-in-out infinite alternate;
  144. -moz-animation: move-right 800ms ease-in-out infinite alternate;
  145. -ms-animation: move-right 800ms ease-in-out infinite alternate;
  146. animation: move-right 800ms ease-in-out infinite alternate;
  147. }
  148. @-webkit-keyframes move-left {
  149. to {
  150. -webkit-transform: translate(20px, 0);
  151. transform: translate(20px, 0);
  152. background: #e85932;
  153. }
  154. }
  155. @-webkit-keyframes move-right {
  156. to {
  157. -webkit-transform: translate(-20px, 0);
  158. transform: translate(-20px, 0);
  159. background: #44bbcc;
  160. }
  161. }
  162. </style>
  163. <style>
  164. .spa-page-pay-success .content {
  165. background: #fff;
  166. top: 0;
  167. }
  168. .spa-page-pay-success .result-content {
  169. background: #8bc34a;
  170. padding-top: 38px;
  171. }
  172. .spa-page-pay-success .result-info {
  173. padding-left: 10px;
  174. padding-right: 10px;
  175. }
  176. .spa-page-pay-success .order-result {
  177. color: #fff;
  178. font-weight: bold;
  179. }
  180. .spa-page-pay-success .success-title p {
  181. color: #fff;
  182. }
  183. .spa-page-pay-success .border-top {
  184. padding-top: 10px;
  185. border-top: 1px solid #fff;
  186. }
  187. .spa-page-pay-success .border-top p {
  188. color: #fff;
  189. }
  190. .spa-page-pay-success .padding-top-bottom p {
  191. color: #fff;
  192. }
  193. .spa-page-pay-success .btn-group .btn {
  194. font-size: 16px;
  195. padding: 10px 25px;
  196. margin-top: 0;
  197. background: #8bc34a;
  198. border-color: #8bc34a;
  199. }
  200. .spa-page-pay-success #icon-success {
  201. display: inline-block;
  202. vertical-align: middle;
  203. margin-right: 10px;
  204. }
  205. .spa-page-pay-success .btn-group {
  206. text-align: center;
  207. background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0i5Zu+5bGCXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSItMTg3IDE0OCAzNzUgNSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAtMTg3IDE0OCAzNzUgNTsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6IzhCQzM0QTt9DQo8L3N0eWxlPg0KPGcgaWQ9IlhNTElEXzFfIj4NCgk8cG9seWdvbiBpZD0iWE1MSURfMzZfIiBjbGFzcz0ic3QwIiBwb2ludHM9IjE5Mi4zLDE0OCAxODEuMywxNDggMTg2LjksMTUzIAkiLz4NCgk8cG9seWdvbiBpZD0iWE1MSURfMzVfIiBjbGFzcz0ic3QwIiBwb2ludHM9IjE4MS4zLDE0OCAxNzAuMywxNDggMTc1LjksMTUzIAkiLz4NCgk8cG9seWdvbiBpZD0iWE1MSURfMzRfIiBjbGFzcz0ic3QwIiBwb2ludHM9IjE3MC4zLDE0OCAxNTkuMywxNDggMTY0LjksMTUzIAkiLz4NCgk8cG9seWdvbiBpZD0iWE1MSURfMzNfIiBjbGFzcz0ic3QwIiBwb2ludHM9IjE1OS4zLDE0OCAxNDguMywxNDggMTUzLjksMTUzIAkiLz4NCgk8cG9seWdvbiBpZD0iWE1MSURfMzJfIiBjbGFzcz0ic3QwIiBwb2ludHM9IjE0OC4zLDE0OCAxMzcuMywxNDggMTQyLjksMTUzIAkiLz4NCgk8cG9seWdvbiBpZD0iWE1MSURfMzFfIiBjbGFzcz0ic3QwIiBwb2ludHM9IjEzNy4zLDE0OCAxMjYuMywxNDggMTMxLjksMTUzIAkiLz4NCgk8cG9seWdvbiBpZD0iWE1MSURfMzBfIiBjbGFzcz0ic3QwIiBwb2ludHM9IjEyNi4zLDE0OCAxMTUuMywxNDggMTIwLjksMTUzIAkiLz4NCgk8cG9seWdvbiBpZD0iWE1MSURfMjlfIiBjbGFzcz0ic3QwIiBwb2ludHM9IjExNS4zLDE0OCAxMDQuMywxNDggMTA5LjksMTUzIAkiLz4NCgk8cG9seWdvbiBpZD0iWE1MSURfMjhfIiBjbGFzcz0ic3QwIiBwb2ludHM9IjEwNC4zLDE0OCA5My4zLDE0OCA5OC45LDE1MyAJIi8+DQoJPHBvbHlnb24gaWQ9IlhNTElEXzI3XyIgY2xhc3M9InN0MCIgcG9pbnRzPSI5My4zLDE0OCA4Mi4zLDE0OCA4Ny45LDE1MyAJIi8+DQoJPHBvbHlnb24gaWQ9IlhNTElEXzI2XyIgY2xhc3M9InN0MCIgcG9pbnRzPSI4Mi4zLDE0OCA3MS4zLDE0OCA3Ni45LDE1MyAJIi8+DQoJPHBvbHlnb24gaWQ9IlhNTElEXzI1XyIgY2xhc3M9InN0MCIgcG9pbnRzPSI3MS4zLDE0OCA2MC4zLDE0OCA2NS45LDE1MyAJIi8+DQoJPHBvbHlnb24gaWQ9IlhNTElEXzI0XyIgY2xhc3M9InN0MCIgcG9pbnRzPSI2MC4zLDE0OCA0OS4zLDE0OCA1NC45LDE1MyAJIi8+DQoJPHBvbHlnb24gaWQ9IlhNTElEXzIzXyIgY2xhc3M9InN0MCIgcG9pbnRzPSI0OS4zLDE0OCAzOC4zLDE0OCA0My45LDE1MyAJIi8+DQoJPHBvbHlnb24gaWQ9IlhNTElEXzIyXyIgY2xhc3M9InN0MCIgcG9pbnRzPSIzOC4zLDE0OCAyNy4zLDE0OCAzMi45LDE1MyAJIi8+DQoJPHBvbHlnb24gaWQ9IlhNTElEXzIxXyIgY2xhc3M9InN0MCIgcG9pbnRzPSIxNi4zLDE0OCAyMS45LDE1MyAyNy4zLDE0OCAxNi4zLDE0OCAxNi4zLDE0OCA1LjMsMTQ4IDEwLjksMTUzIAkiLz4NCgk8cG9seWdvbiBpZD0iWE1MSURfMjBfIiBjbGFzcz0ic3QwIiBwb2ludHM9IjUuMywxNDggLTUuNywxNDggLTAuMSwxNTMgCSIvPg0KCTxwb2x5Z29uIGlkPSJYTUxJRF8xOV8iIGNsYXNzPSJzdDAiIHBvaW50cz0iLTUuNywxNDggLTE2LjcsMTQ4IC0xMS4xLDE1MyAJIi8+DQoJPHBvbHlnb24gaWQ9IlhNTElEXzE4XyIgY2xhc3M9InN0MCIgcG9pbnRzPSItMTYuNywxNDggLTI3LjcsMTQ4IC0yMi4xLDE1MyAJIi8+DQoJPHBvbHlnb24gaWQ9IlhNTElEXzE3XyIgY2xhc3M9InN0MCIgcG9pbnRzPSItMjcuNywxNDggLTM4LjcsMTQ4IC0zMy4xLDE1MyAJIi8+DQoJPHBvbHlnb24gaWQ9IlhNTElEXzE2XyIgY2xhc3M9InN0MCIgcG9pbnRzPSItMzguNywxNDggLTQ5LjcsMTQ4IC00NC4xLDE1MyAJIi8+DQoJPHBvbHlnb24gaWQ9IlhNTElEXzE1XyIgY2xhc3M9InN0MCIgcG9pbnRzPSItNDkuNywxNDggLTYwLjcsMTQ4IC01NS4xLDE1MyAJIi8+DQoJPHBvbHlnb24gaWQ9IlhNTElEXzE0XyIgY2xhc3M9InN0MCIgcG9pbnRzPSItNjAuNywxNDggLTcxLjcsMTQ4IC02Ni4xLDE1MyAJIi8+DQoJPHBvbHlnb24gaWQ9IlhNTElEXzEzXyIgY2xhc3M9InN0MCIgcG9pbnRzPSItNzEuNywxNDggLTgyLjcsMTQ4IC03Ny4xLDE1MyAJIi8+DQoJPHBvbHlnb24gaWQ9IlhNTElEXzEyXyIgY2xhc3M9InN0MCIgcG9pbnRzPSItODIuNywxNDggLTkzLjcsMTQ4IC04OC4xLDE1MyAJIi8+DQoJPHBvbHlnb24gaWQ9IlhNTElEXzExXyIgY2xhc3M9InN0MCIgcG9pbnRzPSItOTMuNywxNDggLTEwNC43LDE0OCAtOTkuMSwxNTMgCSIvPg0KCTxwb2x5Z29uIGlkPSJYTUxJRF8xMF8iIGNsYXNzPSJzdDAiIHBvaW50cz0iLTEwNC43LDE0OCAtMTE1LjcsMTQ4IC0xMTAuMSwxNTMgCSIvPg0KCTxwb2x5Z29uIGlkPSJYTUxJRF85XyIgY2xhc3M9InN0MCIgcG9pbnRzPSItMTE1LjcsMTQ4IC0xMjYuNywxNDggLTEyMS4xLDE1MyAJIi8+DQoJPHBvbHlnb24gaWQ9IlhNTElEXzhfIiBjbGFzcz0ic3QwIiBwb2ludHM9Ii0xMjYuNywxNDggLTEzNy43LDE0OCAtMTMyLjEsMTUzIAkiLz4NCgk8cG9seWdvbiBpZD0iWE1MSURfN18iIGNsYXNzPSJzdDAiIHBvaW50cz0iLTEzNy43LDE0OCAtMTQ4LjcsMTQ4IC0xNDMuMSwxNTMgCSIvPg0KCTxwb2x5Z29uIGlkPSJYTUxJRF82XyIgY2xhc3M9InN0MCIgcG9pbnRzPSItMTU5LjcsMTQ4LjEgLTE1NC4xLDE1MyAtMTQ4LjcsMTQ4IC0xNTkuNywxNDggLTE1OS43LDE0OCAtMTcwLjcsMTQ4IC0xNjUsMTUzIAkiLz4NCgk8cG9seWdvbiBpZD0iWE1MSURfNV8iIGNsYXNzPSJzdDAiIHBvaW50cz0iLTE3MC43LDE0OCAtMTgxLjcsMTQ4IC0xNzYsMTUzIAkiLz4NCgk8cG9seWdvbiBpZD0iWE1MSURfM18iIGNsYXNzPSJzdDAiIHBvaW50cz0iLTE4NywxNTMgLTE4MS43LDE0OCAtMTkyLjcsMTQ4IAkiLz4NCjwvZz4NCjwvc3ZnPg0K);
  208. background-position: 0px -1px;
  209. background-size: 100%;
  210. background-repeat: no-repeat;
  211. background-color: #f2f2f2;
  212. padding-top: 20px;
  213. padding-bottom: 20px;
  214. }
  215. .spa-page-pay-success .j-pay-result {
  216. display: none;
  217. }
  218. .spa-page-pay-success .btn:visited {
  219. color: #fff;
  220. }
  221. </style>
  222. </head>
  223. <body>
  224. <div id="result" class="spa-page spa-page-pay-success">
  225. <div class="spa-page-body">
  226. <div class="content">
  227. <div class="result-content">
  228. <div class="result-info">
  229. <div class="padding-top-bottom j-pay-result">
  230. <p>
  231. <svg version="1.1" id="icon-success" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
  232. width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve">
  233. <circle fill="#fff" cx="15" cy="15" r="15"/>
  234. <polygon fill-rule="evenodd" clip-rule="evenodd" fill="#87C34B" points="12.791,18.624 6.604,12.437 4.571,14.469 10.758,20.656
  235. 12.791,22.689 14.824,20.656 25.828,9.652 23.795,7.619 "/>
  236. </svg>
  237. 支付完成,等待保洁师上门为您服务吧!
  238. </p>
  239. </div>
  240. <div class="success-title"><p>壹管家上门服务</p></div>
  241. <div class="border-top">
  242. <p>服务:<span id="order-name" class="order-name"></span></p>
  243. <p>时间:<span id="order-time" class="order-time"></span></p>
  244. </div>
  245. <div class="border-top">
  246. <p>实付: <span id="order-result" class="order-result"></span></p>
  247. </div>
  248. </div>
  249. <div class="box-center btn-group j-pay-btn">
  250. <a class="btn btn-positive btn-pay">立即支付</a>
  251. </div>
  252. <div class="box-center btn-group j-pay-result">
  253. <a href="/o2o/web/index#myOrder/1" class="btn btn-positive my-order">我的预约</a>
  254. <a href="/o2o/web/index" class="btn btn-positive btn-home">继续购买</a>
  255. </div>
  256. </div>
  257. </div>
  258. </div>
  259. </div>
  260. <script src="../../../common/js/zepto.min.js"></script>
  261. <script>
  262. if (location.search.length > 1) {
  263. var urlParam = {};
  264. for (var aItKey, nKeyId = 0, aCouples = location.search.substr(1).split("&"); nKeyId < aCouples.length; nKeyId++) {
  265. aItKey = aCouples[nKeyId].split("=");
  266. urlParam[decodeURIComponent(aItKey[0])] = aItKey.length > 1 ? decodeURIComponent(aItKey[1]) : "";
  267. }
  268. var amount = urlParam.amount,
  269. created = urlParam.created,
  270. bookingTime = urlParam.bookingTime,
  271. body = urlParam.body,
  272. isSpecial = urlParam.isSpecial;
  273. function formatDate(now) {
  274. var d = new Date(now * 1000);
  275. var year = d.getFullYear();
  276. var month = d.getMonth() + 1;
  277. var date = d.getDate();
  278. var hour = d.getHours();
  279. var minute = d.getMinutes();
  280. return year + '年' + month + '月' + date + '日 ' + hour + ':' + minute;
  281. }
  282. created = formatDate(created);
  283. amount = amount / 100;
  284. $('#order-name').text(body);
  285. if (bookingTime != 'undefined') {
  286. $('#order-time').text(bookingTime);
  287. } else {
  288. $('#order-time').parent().hide();
  289. }
  290. $('#order-result').text(amount + '元');
  291. $('.btn-pay').click(function () {
  292. callpay();
  293. });
  294. //调用微信JS api 支付
  295. function jsApiCall() {
  296. WeixinJSBridge.invoke(
  297. 'getBrandWCPayRequest', {
  298. "appId": urlParam.appId,
  299. "nonceStr": urlParam.nonceStr,
  300. "package": 'prepay_id=' + urlParam["package"],
  301. "signType": urlParam.signType,
  302. "timeStamp": urlParam.timeStamp.toString(),
  303. "paySign": urlParam.paySign
  304. }, function (res) {
  305. console.log(res);
  306. if (res.err_msg == "get_brand_wcpay_request:ok") {
  307. if (isSpecial) {
  308. location.href = '/o2o/web/index#bargain';
  309. } else {
  310. $('.j-pay-btn').hide();
  311. $('.j-pay-result').show();
  312. }
  313. } else if (res.err_msg == "get_brand_wcpay_request:cancel") {
  314. // alert('取消支付');
  315. } else {
  316. alert('支付失败');
  317. location.href = '/o2o/web/index';
  318. }
  319. }
  320. );
  321. }
  322. function callpay() {
  323. if (typeof WeixinJSBridge == "undefined") {
  324. if (document.addEventListener) {
  325. document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
  326. } else if (document.attachEvent) {
  327. document.attachEvent('WeixinJSBridgeReady', jsApiCall);
  328. document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
  329. }
  330. } else {
  331. jsApiCall();
  332. }
  333. }
  334. // callpay();
  335. }
  336. </script>
  337. </body>
  338. </html>