VM暫存
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

999 wiersze
43KB

  1. <!DOCTYPE html>
  2. <html lang="zh-TW">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <meta name="description" content="">
  8. <meta name="author" content="">
  9. <title><?=STATION_NAME?>停車場</title>
  10. <!-- Bootstrap Core CSS -->
  11. <link href="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
  12. <!-- MetisMenu CSS -->
  13. <link href="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet">
  14. <!-- Timeline CSS -->
  15. <link href="<?=BOOTSTRAPS?>dist/css/timeline.css" rel="stylesheet">
  16. <!-- Custom CSS -->
  17. <link href="<?=BOOTSTRAPS?>dist/css/sb-admin-2.css" rel="stylesheet">
  18. <!-- Morris Charts CSS -->
  19. <link href="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.css" rel="stylesheet">
  20. <!-- Custom Fonts -->
  21. <link href="<?=BOOTSTRAPS?>bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
  22. </head>
  23. <body style="font-family:Microsoft JhengHei;">
  24. <div id="wrapper">
  25. <!-- Navigation -->
  26. <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0">
  27. <div class="navbar-header">
  28. <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
  29. <span class="sr-only">Toggle navigation</span>
  30. <span class="icon-bar"></span>
  31. <span class="icon-bar"></span>
  32. <span class="icon-bar"></span>
  33. </button>
  34. <a class="navbar-brand" href=""><?=STATION_NAME?>停車場</a>
  35. </div>
  36. <!-- /.navbar-top-links(左側選單) -->
  37. <div class="navbar-default sidebar" role="navigation">
  38. <div class="sidebar-nav navbar-collapse">
  39. <ul class="nav" id="side-menu">
  40. <li>
  41. <a href="#"><i class="fa fa-user fa-fw"></i>服務項目<span class="fa arrow"></span></a>
  42. <ul class="nav nav-second-level">
  43. <li>
  44. <a href="#" onclick="show_item('payment');">臨停繳費</a>
  45. </li>
  46. <li>
  47. <a href="#" onclick="show_item('car_lock');">會員鎖車</a>
  48. </li>
  49. </ul>
  50. <!-- /.nav-second-level -->
  51. </li>
  52. </ul>
  53. </div>
  54. <!-- /.sidebar-collapse -->
  55. </div>
  56. <!-- /.navbar-static-side -->
  57. </nav>
  58. <div id="page-wrapper"><?php /* 主要資料顯示區 */ ?>
  59. <div class="row">
  60. <div class="col-lg-12">
  61. <h1 class="page-header"><?=STATION_NAME?>停車場</h1><?php /* 右側小表頭 */ ?>
  62. </div>
  63. <!-- /.col-lg-12 -->
  64. </div>
  65. <!-- /.row -->
  66. <?php /* ----- 付款 ----- */ ?>
  67. <div data-items="payment" class="row">
  68. <div class="col-lg-12">
  69. <div class="panel panel-default">
  70. <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?>
  71. 臨停繳費
  72. </div>
  73. <div class="panel-body">
  74. <div data-rows class="row">
  75. <div class="col-lg-6">
  76. <form id="payment_form" role="form" method="post">
  77. <div class="form-group">
  78. <label>車牌號碼</label>
  79. <input type="text" id="payment_lpr" class="form-control" style="text-transform:uppercase" placeholder="限英數字" autofocus required pattern="[A-Za-z0-9]*" />
  80. </div>
  81. <button type="submit" class="btn btn-default"onclick="do_payment(event);">確定</button>
  82. <button type="reset" class="btn btn-default">重填</button>
  83. </form>
  84. </div>
  85. <!-- /.col-lg-6 (nested) -->
  86. </div>
  87. </div>
  88. <!-- /.panel-body -->
  89. </div>
  90. <!-- /.panel -->
  91. </div>
  92. <!-- /.col-lg-12 -->
  93. </div>
  94. <?php /* ----- 付款(結束) ----- */ ?>
  95. <?php /* ----- 帳單明細顯示 ----- */ ?>
  96. <div data-items="price_data" class="row" style="display:none;">
  97. <div class="col-lg-12">
  98. <div class="panel panel-default">
  99. <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?>
  100. 帳單明細
  101. </div>
  102. <div class="panel-body">
  103. <div data-rows class="row">
  104. <div class="col-lg-12">
  105. <div class="dataTable_wrapper">
  106. <table class="table table-striped table-bordered table-hover">
  107. <thead>
  108. <tr>
  109. <th style="text-align:center;"></th>
  110. <th style="text-align:center;">說明</th>
  111. <th style="text-align:center;">結算</th>
  112. </tr>
  113. <tr id="price_data_list" style="display:none;">
  114. <td data-tag="p_no" style="text-align:center;vertical-align: middle;"></td>
  115. <td data-tag="p_meta" style="text-align:left;vertical-align: middle;"></td>
  116. <td data-tag="p_result" style="text-align:left;vertical-align: middle;"></td>
  117. </tr>
  118. </thead>
  119. <tbody id="price_data_tbody" style="font-size:10px;"></tbody>
  120. <tr>
  121. <td style="text-align:left;vertical-align: middle;">
  122. </td>
  123. <td style="text-align:left;vertical-align: middle;">
  124. </td>
  125. <td style="text-align:left;vertical-align: middle;">
  126. </td>
  127. </tr>
  128. <tr>
  129. <td style="text-align:left;vertical-align: middle;">
  130. </td>
  131. <td style="text-align:center;vertical-align: middle;">
  132. </td>
  133. <td style="text-align:center;vertical-align: middle;">
  134. </td>
  135. </tr>
  136. <tr>
  137. <td style="text-align:left;vertical-align: middle;">
  138. </td>
  139. <td style="text-align:center;vertical-align: middle;">
  140. 時間加總
  141. </td>
  142. <td style="text-align:center;vertical-align: middle;">
  143. 費用加總
  144. </td>
  145. </tr>
  146. <tr>
  147. <td style="text-align:left;vertical-align: middle;">
  148. </td>
  149. <td style="text-align:center;vertical-align: middle;">
  150. <span id="show_amt_detail_time"></span>
  151. </td>
  152. <td style="text-align:center;vertical-align: middle;">
  153. <span id="show_amt_detail_price"></span>
  154. </td>
  155. </tr>
  156. <tr>
  157. <td style="text-align:left;vertical-align: middle;">
  158. </td>
  159. <td style="text-align:center;vertical-align: middle;">
  160. </td>
  161. <td style="text-align:center;vertical-align: middle;">
  162. <button type="button" class="btn btn-default" onclick="show_item_without_change('payment_data');">返回結帳畫面</button>
  163. </td>
  164. </tr>
  165. </table>
  166. </div>
  167. </div>
  168. <!-- /.col-lg-6 (nested) -->
  169. </div>
  170. <?php /* ----- 報表清單(結束) ----- */ ?>
  171. </div>
  172. <!-- /.panel-body -->
  173. </div>
  174. <!-- /.panel -->
  175. </div>
  176. <!-- /.col-lg-12 -->
  177. </div>
  178. <?php /* ----- 帳單明細顯示(結束) ----- */ ?>
  179. <?php /* ----- 帳單查詢結果 ----- */ ?>
  180. <!-- div data-items="rent_sync" class="row" style="display:none;"-->
  181. <div data-items="payment_data" class="row" style="display:none;">
  182. <div class="col-lg-12">
  183. <div class="panel panel-default">
  184. <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?>
  185. 帳單查詢結果
  186. </div>
  187. <div class="panel-body" style="margin: 0px auto;">
  188. <div data-rows class="row">
  189. <div class="col-lg-6" style="margin: 0px auto;">
  190. <form id="payment_data" role="form" method="post">
  191. <table class="table table-striped table-bordered table-hover"">
  192. <tbody id="available_curr_tbody" style="font-size:14px;">
  193. <tr>
  194. <td style="text-align:right;vertical-align: middle;" width="20%">車號</td>
  195. <td id="show_payment_lpr" style="text-align:left;vertical-align:middle;text-transform:uppercase;"></td>
  196. </tr>
  197. <tr>
  198. <td style="text-align:right;vertical-align: middle;">進場時間</td>
  199. <td id="show_in_time" style="text-align:left;vertical-align: middle;"></td>
  200. </tr>
  201. <tr>
  202. <td style="text-align:right;vertical-align: middle;">結算時間</td>
  203. <td id="show_balance_time" style="text-align:left;vertical-align: middle;"></td>
  204. </tr>
  205. <tr>
  206. <td style="text-align:right;vertical-align: middle;">停車時間</td>
  207. <td id="show_amt_detail" style="text-align:left;vertical-align: middle;"></td>
  208. </tr>
  209. <tr>
  210. <td style="text-align:right;vertical-align: middle;">金額 (NTD)</td>
  211. <td id="show_amt" style="text-align:left;vertical-align: middle;"></td>
  212. </tr>
  213. <tr class="form-group"style="display:none;">
  214. <td style="text-align:right;vertical-align: middle;">發票載具 <br/>(手機條碼)</td>
  215. <td style="text-align:left;vertical-align: middle;">
  216. <input type="text" id="invoice_receiver" class="form-control" placeholder="如不要發票請留空白"
  217. data-validation="custom"
  218. data-validation-regexp="^$|^(?=.{7}$)([A-Za-z0-9]+)$|^(?=.{8}$)\u002F([A-Za-z0-9]+)$"
  219. data-validation-error-msg="請輸入正確載具<br/>格式: / + 7碼 <br/>(共8碼)"
  220. />
  221. </td>
  222. </tr>
  223. <tr class="form-group" style="display:none;">
  224. <td style="text-align:right;vertical-align: middle;"></td>
  225. <td style="text-align:left;vertical-align: middle; color: red;">
  226. 若發票載具留空白,發票將自動送個社福團體
  227. </td>
  228. </tr>
  229. <tr class="form-group">
  230. <td style="text-align:right;vertical-align: middle;">公司統編</td>
  231. <td style="text-align:left;vertical-align: middle;">
  232. <input type="tel" id="company_no" class="form-control" placeholder="如不打統編請留空白"
  233. data-validation="custom"
  234. data-validation-optional="true"
  235. data-validation-regexp="^(?=.{8}$)([0-9]+)$"
  236. data-validation-error-msg="請輸入正確統編<br/>例如:80682490"
  237. data-validation-error-msg-container="#company_no_error_msg"
  238. />
  239. <span id="company_no_error_msg"></span>
  240. </td>
  241. </tr>
  242. <!--tr class="form-group">
  243. <td style="text-align:right;vertical-align: middle;">TEST</td>
  244. <td style="text-align:left;vertical-align: middle;">
  245. <select multiple="multiple" size="5" data-validation="length" data-validation-length="min2">
  246. <option>A</option>
  247. <option>B</option>
  248. <option>C</option>
  249. <option>D</option>
  250. <option>E</option>
  251. </select>
  252. </td>
  253. </tr-->
  254. <tr class="form-group">
  255. <td style="text-align:right;vertical-align: middle;">電子信箱</td>
  256. <td style="text-align:left;vertical-align: middle;">
  257. <input type="email" id="email" class="form-control" placeholder="發票將寄信通知"
  258. data-validation="email"
  259. data-validation-optional="true"
  260. data-validation-error-msg="請輸入正確信箱<br/>例如:altob@gmail.com"
  261. data-validation-error-msg-container="#email_error_msg"
  262. />
  263. <span id="email_error_msg"></span>
  264. </td>
  265. </tr>
  266. <tr class="form-group">
  267. <td style="text-align:right;vertical-align: middle;">手機號碼</td>
  268. <td style="text-align:left;vertical-align: middle;">
  269. <input type="tel" id="mobile" class="form-control" placeholder="發票將寄簡訊通知"
  270. data-validation="custom"
  271. data-validation-optional="true"
  272. data-validation-regexp="^(?=.{10}$)09([0-9]+)$"
  273. data-validation-error-msg="請輸入正確手機號碼<br/>例如:0912345678"
  274. data-validation-error-msg-container="#mobile_error_msg"
  275. />
  276. <span id="mobile_error_msg"></span>
  277. </td>
  278. </tr>
  279. <tr>
  280. <td style="text-align:right;vertical-align: middle;">訂單编號</td>
  281. <td id="show_order_no" style="text-align:left;vertical-align: middle;"></td>
  282. </tr>
  283. <tr>
  284. <td style="text-align:right;vertical-align: middle;">有效期限</td>
  285. <td id="show_balance_time_limit_countdown" style="text-align:left;vertical-align: middle; color: red;"></td>
  286. </tr>
  287. <!--tr>
  288. <td style="text-align:right;vertical-align: middle;">※</td>
  289. <td id="show_balance_time_limit_countdown" style="text-align:left;vertical-align: middle; color: red;"></td>
  290. </tr-->
  291. <tr>
  292. <td style="text-align:right;vertical-align: middle;">
  293. <button type="button" class="btn btn-default" onclick="transfer_money(event);">開始付款</button>
  294. </td>
  295. <td style="text-align:left;vertical-align: middle;">
  296. <button type="button" class="btn btn-default" onclick="show_item('price_data');">查看明細</button>
  297. <button type="button" class="btn btn-default" onclick="show_item('payment');">取消</button>
  298. </td>
  299. </tr>
  300. </tbody>
  301. </table>
  302. </form>
  303. </div>
  304. <!-- /.col-lg-6 (nested) -->
  305. </div>
  306. <!-- /.row (nested) -->
  307. </div>
  308. <!-- /.panel-body -->
  309. </div>
  310. <!-- /.panel -->
  311. </div>
  312. <!-- /.col-lg-12 -->
  313. </div>
  314. <?php /* ----- 帳單查詢結果(結束) ----- */ ?>
  315. <?php /* ----- 鎖車作業 ----- */ ?>
  316. <div data-items="car_lock" class="row" style="display:none;">
  317. <div class="col-lg-12">
  318. <div class="panel panel-default">
  319. <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?>
  320. 會員鎖車
  321. </div>
  322. <div class="panel-body">
  323. <div data-rows class="row">
  324. <div class="col-lg-6">
  325. <div class="form-group">
  326. <form id="form_lock" method="post">
  327. <label>請鍵入車牌號碼</label>
  328. <input type="text" id="lpr_lock" class="form-control" style="text-transform:uppercase;" placeholder="限英數字" autofocus required pattern="[A-Za-z0-9]*" /><br />
  329. <label>密碼(第一次與車號相同)</label>
  330. <input type="password" id="pswd_lock" class="form-control" style="text-transform:uppercase;" autofocus required pattern="[A-Za-z0-9]*" /><br />
  331. <button type="submit" id="qcar_lock" class="btn btn-default">查詢</button>
  332. <button type="submit" id="change_pswd_lock" class="btn btn-default">更改密碼</button>
  333. <button type="reset" class="btn btn-default">清除資料</button>
  334. </form>
  335. </div>
  336. </div>
  337. <!-- /.col-lg-6 (nested) -->
  338. </div>
  339. </div>
  340. <!-- /.panel-body -->
  341. </div>
  342. <!-- /.panel -->
  343. </div>
  344. <!-- /.col-lg-12 -->
  345. </div>
  346. <?php /* ----- 鎖車(結束) ----- */ ?>
  347. <?php /* ----- 更改鎖車密碼 ----- */ ?>
  348. <div data-items="pswd_lock" class="row" style="display:none;">
  349. <div class="col-lg-12">
  350. <div class="panel panel-default">
  351. <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?>
  352. 更改鎖車密碼
  353. </div>
  354. <div class="panel-body">
  355. <div data-rows class="row">
  356. <div class="col-lg-6">
  357. <div class="form-group">
  358. <form id="form_new_pswd" method="post">
  359. <label>新密碼</label>
  360. <input type="text" id="new_pswd1" class="form-control" style="text-transform:uppercase;" placeholder="限英數字" autofocus required pattern="[A-Za-z0-9]*" /><br />
  361. <label>再鍵一次密碼</label>
  362. <input type="password" id="new_pswd2" class="form-control" style="text-transform:uppercase;" placeholder="限英數字" autofocus required pattern="[A-Za-z0-9]*" /><br />
  363. <button type="submit" class="btn btn-default">儲存</button>
  364. <button type="button" class="btn btn-default">取消</button>
  365. </form>
  366. </div>
  367. </div>
  368. <!-- /.col-lg-6 (nested) -->
  369. </div>
  370. </div>
  371. <!-- /.panel-body -->
  372. </div>
  373. <!-- /.panel -->
  374. </div>
  375. <!-- /.col-lg-12 -->
  376. </div>
  377. <?php /* ----- 更改密碼(結束) ----- */ ?>
  378. <?php /* ----- 鎖車與解鎖 ----- */ ?>
  379. <div data-items="status_lock" class="row" style="display:none;">
  380. <div class="col-lg-12">
  381. <div class="panel panel-default">
  382. <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?>
  383. 鎖車/解鎖
  384. </div>
  385. <div class="panel-body">
  386. <div data-rows class="row">
  387. <div class="col-lg-6">
  388. <div class="form-group">
  389. <form id="form_active_lock" method="post">
  390. <label><span id="lpr_on_off"></span>: [<span id="lock_on_off">無</span>鎖車]</label><br />
  391. <input type="button" id="lock_unlock" class="btn btn-default" value="鎖車" />
  392. <input type="button" id="lock_back" class="btn btn-default" value="結束" />
  393. </form>
  394. </div>
  395. </div>
  396. <!-- /.col-lg-6 (nested) -->
  397. </div>
  398. </div>
  399. <!-- /.panel-body -->
  400. </div>
  401. <!-- /.panel -->
  402. </div>
  403. <!-- /.col-lg-12 -->
  404. </div>
  405. <?php /* ----- 鎖車與解鎖(結束) ----- */ ?>
  406. <!-- /#page-wrapper -->
  407. </div>
  408. <!-- /#wrapper -->
  409. <!-- jQuery -->
  410. <script src="<?=BOOTSTRAPS?>bower_components/jquery/dist/jquery.min.js"></script>
  411. <!-- Bootstrap Core JavaScript -->
  412. <script src="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
  413. <!-- Metis Menu Plugin JavaScript -->
  414. <script src="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.js"></script>
  415. <!-- Morris Charts JavaScript -->
  416. <script src="<?=BOOTSTRAPS?>bower_components/raphael/raphael-min.js"></script>
  417. <!--script src="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.min.js"></script-->
  418. <!--script src="<?=BOOTSTRAPS?>js/morris-data.js"></script-->
  419. <!-- virtual keyboard -->
  420. <!--link href="<?=WEB_LIB?>virtual-keyboard/css/jquery-ui.min.css" rel="stylesheet">
  421. <link href="<?=WEB_LIB?>virtual-keyboard/css/keyboard.css" rel="stylesheet">
  422. <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery-ui.min.js"></script>
  423. <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.js"></script>
  424. <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.extension-caret.js"></script-->
  425. <!-- jQuery validate -->
  426. <script src="<?=WEB_LIB?>form-validator/jquery.form-validator.min.js"></script>
  427. <!-- alertify -->
  428. <link href="<?=WEB_LIB?>css/alertify.core.css" rel="stylesheet">
  429. <link href="<?=WEB_LIB?>css/alertify.bootstrap.css" rel="stylesheet">
  430. <script src="<?=WEB_LIB?>js/alertify.min.js"></script>
  431. <!-- alertify -->
  432. <script src="<?=WEB_LIB?>js/moment.min.js"></script>
  433. <!-- md5 -->
  434. <script src="<?=WEB_LIB?>js/md5.min.js"></script>
  435. <!-- Custom Theme JavaScript -->
  436. <script src="<?=BOOTSTRAPS?>dist/js/sb-admin-2.js"></script>
  437. <div id="works" style="display:none;"></div><?php /* 作為浮動顯示區之用 */ ?>
  438. </body>
  439. </html>
  440. <script>
  441. <?php /* alertify function */ ?>
  442. function alertify_log($msg)
  443. {
  444. alertify.set({delay : 2000});
  445. alertify.log($msg);
  446. }
  447. function alertify_error($msg)
  448. {
  449. alertify.set({delay : 2000});
  450. alertify.error($msg);
  451. }
  452. function alertify_success($msg)
  453. {
  454. alertify.set({delay : 2000});
  455. alertify.success($msg);
  456. }
  457. var refreshIntervalId = 0; // timer id
  458. <?php /* 顯示指定項目 */ ?>
  459. function show_item(tags)
  460. {
  461. $("#payment_lpr").val("");<?php /* 清除車號欄位 */ ?>
  462. $("#show_in_time").val("");
  463. $("#show_balance_time").val("");
  464. $("#show_amt_detail").val("");
  465. $("#show_amt").val("");
  466. $("#invoice_receiver").val("");<?php /* 清除載具欄位 */ ?>
  467. $("#show_order_no").val("");
  468. //$("#show_balance_time_limit").val("");
  469. $("#show_balance_time_limit_countdown").val("");
  470. if(tags.indexOf('payment_data') < 0 && tags.indexOf('price_data') < 0){
  471. clearInterval(refreshIntervalId); // 消除倒數計時timer
  472. //console.log("clearInterval..");
  473. }
  474. $("[data-items]").hide();
  475. $("[data-items="+tags+"]").show();
  476. return false;
  477. }
  478. <?php /* 顯示指定項目, 不修改資料 */ ?>
  479. function show_item_without_change(tags)
  480. {
  481. $("[data-items]").hide();
  482. $("[data-items="+tags+"]").show();
  483. return false;
  484. }
  485. // 付款
  486. function do_payment(event)
  487. {
  488. event.preventDefault();
  489. if ($("#payment_lpr").val() == "")
  490. {
  491. alertify_error("請填寫車號");
  492. return false;
  493. }
  494. $.ajax
  495. ({
  496. url: "<?=APP_URL?>payment_lpr",
  497. type: "post",
  498. dataType:"text",
  499. data:{
  500. "payment_lpr": $("#payment_lpr").val()
  501. },
  502. success: function(result)
  503. {
  504. if (/^[\],:{}\s]*$/.test(result.replace(/\\["\\\/bfnrtu]/g, '@').
  505. replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
  506. replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
  507. //the json is ok
  508. }else{
  509. //the json is not ok
  510. alertify_error("查無資料,請鍵入正確資料 (回傳資料有誤)");
  511. return false;
  512. }
  513. var jdata = JSON.parse(result);
  514. //console.log(jdata);
  515. if(!jdata)
  516. {
  517. alertify_error("查無資料,請鍵入正確資料");
  518. return false;
  519. }
  520. if(jdata.member_no > 0)
  521. {
  522. alertify_log("會員無須繳款,謝謝");
  523. return false;
  524. }
  525. if(jdata.amt <= 0)
  526. {
  527. alertify_log("目前無須繳款,謝謝");
  528. return false;
  529. }
  530. if(jdata.amt > 1000)
  531. {
  532. alertify_log("[ 代碼:001 ]<br/>請到管理室繳費, 謝謝");
  533. return false;
  534. }
  535. // variables for time units
  536. var days, hours, minutes, seconds;
  537.  
  538. // get tag element
  539. var countdown = $("#show_balance_time_limit_countdown");
  540. //var countdown_offset_ms = 60*5*1000; // 比資料庫早5分鐘timeout
  541. var duration = moment.duration({minutes: 5}); // 比資料庫早5分鐘timeout
  542. // set the date we're counting down to
  543. var target_date = moment(jdata.balance_time_limit).subtract(duration);
  544. //var target_date = new Date(jdata.balance_time_limit).getTime();
  545. //console.log(target_date.diff(moment(), 'seconds'));
  546. // update the tag with id "countdown" every 1 second
  547. refreshIntervalId = setInterval(function () {
  548.     // find the amount of "seconds" between now and target
  549. var seconds_left = target_date.diff(moment(), 'seconds');
  550. //console.log(seconds_left);
  551. //var current_date = new Date().getTime();
  552.     //var seconds_left = (target_date - current_date - countdown_offset_ms) / 1000;
  553. if(seconds_left <= 0){
  554. clearInterval(refreshIntervalId);
  555. // reload page
  556. location.reload();
  557. }
  558.  
  559.     // do some time calculations
  560.     days = parseInt(seconds_left / 86400);
  561.     seconds_left = seconds_left % 86400;
  562.      
  563.     hours = parseInt(seconds_left / 3600);
  564.     seconds_left = seconds_left % 3600;
  565.      
  566.     minutes = parseInt(seconds_left / 60);
  567.     seconds = parseInt(seconds_left % 60);
  568. if(minutes < 10){
  569. minutes = '0' + minutes;
  570. }
  571. if(seconds < 10){
  572. seconds = '0' + seconds;
  573. }
  574.     // format countdown string + set tag value
  575. countdown.text(['還剩 ', minutes, ' : ', seconds, ' 有效'].join(''));
  576. }, 1000);
  577. $("#show_payment_lpr").text(jdata.lpr);
  578. $("#show_in_time").text(jdata.in_time);
  579. $("#show_balance_time").text(jdata.balance_time);
  580. $("#show_amt_detail").text([jdata.bill_days, ' 天 : ', jdata.bill_hours, ' 小時 : ', jdata.bill_mins, ' 分鐘'].join(''));
  581. $("#show_amt").text([jdata.amt, ' 元'].join(''));
  582. $("#show_order_no").text(jdata.order_no);
  583. //$("#show_balance_time_limit").text(new Date(target_date - countdown_offset_ms));
  584. show_item("payment_data");
  585. // parse price detail
  586. $("#price_data_tbody").html("");
  587. <?php /* 明細頁面產生 (開始) */ ?>
  588. // A. 依r_no 分群, 暫存到 tmp_r_no_array
  589. var tmp_r_no_array = [];
  590. for(lv1 in jdata.price_detail)
  591. {
  592. if (lv1 == 0) { continue; }
  593. var today = jdata.price_detail[lv1];
  594. for(lv2 in today)
  595. {
  596. if(lv2.match(/\u003A/)){ // 取出有時間的部份
  597. var detail = today[lv2];
  598. if(!(detail.r_no in tmp_r_no_array)){
  599. tmp_r_no_array[detail.r_no] = [];
  600. }
  601. tmp_r_no_array[detail.r_no].push([detail.r_no, '_', lv1, '_', lv2].join(''));
  602. }
  603. }
  604. }
  605. //console.log('tmp_r_no_array: ' + tmp_r_no_array);
  606. // B. 將 tmp_r_no_array 解析, 產生顯示用的 price_result_array
  607. var price_result_array = [];
  608. var last_r_no_keys_array = [];
  609. var check_p = 0;
  610. for(r_no in tmp_r_no_array)
  611. {
  612. var r_no_array = tmp_r_no_array[r_no].sort(); // 依r_no 排序
  613. //console.log(r_no + ' length: ' + r_no_array.length);
  614. for(key in r_no_array)
  615. {
  616. var keys = r_no_array[key].split('_');
  617. var r_no = keys[0];
  618. var lv1 = keys[1];
  619. var lv2 = keys[2];
  620. var time_str = [lv1, ' ', lv2].join('');
  621. var detail = jdata.price_detail[lv1][lv2];
  622. var detail_p0_price = jdata.price_detail[lv1].p0;
  623. var detail_limit0 = jdata.price_detail[lv1].limit0;
  624. var detail_free0_min = jdata.price_detail[lv1].free0_min;
  625. if(detail.p > 0){
  626. check_p += detail.p;
  627. var before_keys = last_r_no_keys_array.pop(); //r_no_array[key - 1].split('_');
  628. var before_r_no = before_keys[0];
  629. var before_lv1 = before_keys[1];
  630. var before_lv2 = before_keys[2];
  631. var before_time_str = [before_lv1, ' ', before_lv2].join('');
  632. var before_detail = jdata.price_detail[before_lv1][before_lv2];
  633. // create result
  634. var data_p_desc = '';
  635. var data_p_time = '';
  636. var data_p_time_desc = ['*時段 ', before_time_str, '<br/>至 ', time_str].join('');
  637. var data_p_price_desc = [detail.p, ' 元'].join('');
  638. // p_desc
  639. if(detail.status == 1){
  640. data_p_desc = ['費率:每日最高收費上限 ', detail_limit0, ' 元,已達當日上限'].join(''); // '每日最高收費上限 150元';
  641. }else{
  642. data_p_desc = [' 每小時 ', 2 * detail_p0_price, ' 元,前 ', detail_free0_min, ' 分鐘免費。'].join(''); // '費率:每小時 20元';
  643. }
  644. // p_time
  645. var detail_part = [];
  646. if('h' in detail && detail.h > 0){
  647. detail_part.push(detail.h, ' 小時 ');
  648. }
  649. if('i' in detail && detail.i > 0){
  650. detail_part.push(detail.i, ' 分鐘');
  651. }
  652. //if(detail.p < before_detail_p2_price){detail_part.push(' (', r_no, ') ');}
  653. data_p_time = detail_part.join('');
  654. if(price_result_array.length > 0){
  655. if(r_no == price_result_array[price_result_array.length - 1].r_no){
  656. // 與上一筆結算為同一價錢週期時, 更新上一筆結算
  657. var last_result = price_result_array[price_result_array.length - 1];
  658. last_result.p_desc = '每日最高收費上限 150元';
  659. last_result.p_time = [last_result.p_time, '接續<br/><br/>', data_p_time].join('');;
  660. last_result.p_time_desc = [last_result.p_time_desc, ' 接續<br/><br/>', data_p_time_desc].join('');
  661. last_result.p_price_desc = [last_result.p_price_desc, ' + ', data_p_price_desc].join('');
  662. // push last
  663. last_r_no_keys_array.push(keys);
  664. continue;
  665. }
  666. }
  667. // 與上一筆結算不同價錢週期, 新增一筆結算
  668. var data = [];
  669. data.r_no = r_no;
  670. data.p_desc = data_p_desc;
  671. data.p_time = data_p_time;
  672. data.p_time_desc = data_p_time_desc;
  673. data.p_price_desc = data_p_price_desc;
  674. price_result_array.push(data);
  675. // push last
  676. last_r_no_keys_array.push(keys);
  677. }else{
  678. // push last
  679. last_r_no_keys_array.push(keys);
  680. }
  681. }
  682. }
  683. // C. 根據 price_result_array, 產生頁面顯示
  684. var seq = 0;
  685. for(key in price_result_array)
  686. {
  687. var result = price_result_array[key];
  688. var meta_0_str = ++seq;
  689. $("#price_data_list>[data-tag=p_no]").text(meta_0_str);
  690. $("#price_data_list>[data-tag=p_meta]").html(result.p_time_desc);
  691. $("#price_data_list>[data-tag=p_result]").html(result.p_time);
  692. $("<tr data-day='day'>"+$("#price_data_list").html()+"</tr>").appendTo("#price_data_tbody");
  693. $("#price_data_list>[data-tag=p_no]").text("");
  694. $("#price_data_list>[data-tag=p_meta]").html(result.p_desc);
  695. $("#price_data_list>[data-tag=p_result]").html(result.p_price_desc);
  696. $("<tr data-day='day' style='color: red;'>"+$("#price_data_list").html()+"</tr>").appendTo("#price_data_tbody");
  697. }
  698. var bill_time_part = ['共 '];
  699. if('bill_days' in jdata && jdata.bill_days > 0){
  700. bill_time_part.push(jdata.bill_days, ' 天 : ');
  701. }
  702. if('bill_hours' in jdata && jdata.bill_hours > 0){
  703. bill_time_part.push(jdata.bill_hours, ' 小時 : ');
  704. }
  705. if('bill_mins' in jdata && jdata.bill_mins > 0){
  706. bill_time_part.push(jdata.bill_mins, ' 分鐘');
  707. }
  708. $("#show_amt_detail_time").text(bill_time_part.join(''));
  709. $("#show_amt_detail_price").text([jdata.amt, ' 元'].join(''));
  710. <?php /* 明細頁面產生 (結束) */ ?>
  711. }
  712. });
  713. }
  714. // 開啟轉帳畫面
  715. function transfer_money(event)
  716. {
  717. event.preventDefault();
  718. if(! $("#payment_data").isValid()) return false;
  719. if($("#email").val() == '' && $("#mobile").val() == '')
  720. {
  721. alertify_error("請至少提供一項發票通知方式<br/>1. 電子信箱 <br/>2. 或 手機號碼<br/><br/>謝謝!!");
  722. return false;
  723. }
  724. if (! confirm("開始結帳嗎 ?")) return false;
  725. // Create Base64 Object
  726. var Base64 = {_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/\r\n/g,"\n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}}
  727. var order_no = $("#show_order_no").text() == '' ? '0' : $("#show_order_no").text();
  728. var invoice_receiver = $("#invoice_receiver").val() == '' ? '0' : $("#invoice_receiver").val();
  729. var company_no = $("#company_no").val() == '' ? '0' : $("#company_no").val();
  730. var email = $("#email").val() == '' ? '0' : Base64.encode($("#email").val()).slice(0, -1); // remove base64 '=' for URI rule
  731. var mobile = $("#mobile").val() == '' ? '0' : $("#mobile").val();
  732. webatm = window.open(
  733. ["<?=APP_URL?>transfer_money/",
  734. order_no, "/",
  735. encodeURI(invoice_receiver), "/",
  736. encodeURI(company_no), "/",
  737. email, "/",
  738. mobile, "/"
  739. ].join('')
  740. , "_self");
  741. /*
  742. location.replace(
  743. ["<?=APP_URL?>transfer_money/",
  744. order_no, "/",
  745. encodeURI(invoice_receiver), "/",
  746. encodeURI(company_no), "/",
  747. email, "/",
  748. mobile, "/"
  749. ].join('')
  750. );
  751. */
  752. // window.top.close(); // 關視窗
  753. // setTimeout(function(){ webatm.close(); }, 3000);
  754. }
  755. $(document).ready(function()
  756. {
  757. <?php /* validate 設定start */ ?>
  758. $.validate(
  759. {
  760. modules : 'security',
  761. }
  762. );
  763. <?php /* validate 設定end */ ?>
  764. // 定時自動更新頁面
  765. (function autoReloadPage(){
  766. var pageReloadTimeMillis = 600000; // 頁面, 自動重新載入週期 ( 10 min )
  767. var pageCheckReloadTimeMillis = 10000; // 頁面, 判斷重新載入週期 ( 10 sec )
  768. var aliveTime = moment();
  769. $(document.body).bind("mousemove keypress", function(e) {
  770. aliveTime = moment();
  771. });
  772. function refresh() {
  773. if(moment() - aliveTime >= pageReloadTimeMillis) // 如果頁面沒動作, 才更新
  774. window.location.reload(true);
  775. else
  776. setTimeout(refresh, pageCheckReloadTimeMillis);
  777. }
  778. setTimeout(refresh, pageCheckReloadTimeMillis);
  779. })();
  780. // ----- 鎖車密碼更新 -----
  781. $("#form_new_pswd").submit(function(event)
  782. {
  783. event.preventDefault();
  784. $("#new_pswd1").val($("#new_pswd1").val().toUpperCase());
  785. $("#new_pswd2").val($("#new_pswd2").val().toUpperCase());
  786. if ($("#new_pswd1").val() != $("#new_pswd2").val() || $("#new_pswd1").val() == "" || $("#new_pswd2").val() == "")
  787. {
  788. alert("密碼不符規定, 請重新輸入 !");
  789. return false;
  790. }
  791. // 查詢目前有無鎖車狀況
  792. $.ajax
  793. ({
  794. url:"<?=APP_URL?>change_pswd",
  795. dataType:"text",
  796. type:"post",
  797. data:
  798. { "lpr":$("#lpr_lock").val(),
  799. "new_pswd":$("#new_pswd1").val()
  800. },
  801. success:function(jdata)
  802. {
  803. alert("密碼更新完成 !");
  804. $("#pswd_lock").val("");
  805. show_item("car_lock");
  806. }
  807. });
  808. });
  809. // ----- 鎖車 -----
  810. $("#form_lock").submit(function(event)
  811. {
  812. event.preventDefault();
  813. submit_id = $(document.activeElement).prop('id');
  814. if ($("#lpr_lock").val() == "" || $("#pswd_lock").val() == "")
  815. {
  816. alert("請填寫車號及密碼");
  817. return false;
  818. }
  819. $("#lpr_lock").val($("#lpr_lock").val().toUpperCase());
  820. $("#pswd_lock").val($("#pswd_lock").val().toUpperCase());
  821. // 查詢目前有無鎖車狀況
  822. $.ajax
  823. ({
  824. url: "<?=APP_URL?>security_action/"+$("#lpr_lock").val()+"/"+md5($("#pswd_lock").val().toUpperCase())+"/2",
  825. dataType:"json",
  826. type:"post",
  827. data:{},
  828. success:function(jdata)
  829. {
  830. if (jdata["result_code"] == "FAIL")
  831. {
  832. alert("車號或密碼錯誤");
  833. return false;
  834. }
  835. // 更改密碼, 進入下一個畫面
  836. if (submit_id == "change_pswd_lock")
  837. {
  838. $("#new_pswd1").val("");
  839. $("#new_pswd2").val("");
  840. show_item("pswd_lock");
  841. return true;
  842. }
  843. $("#lpr_on_off").text($("#lpr_lock").val());
  844. lock_on_off = jdata["result"][0]["result"];
  845. if (lock_on_off == "ON")
  846. {
  847. $("#lock_on_off").text("已");
  848. $("#lock_unlock").val("解鎖");
  849. }
  850. else
  851. {
  852. $("#lock_on_off").text("無");
  853. $("#lock_unlock").val("鎖車");
  854. }
  855. show_item("status_lock");
  856. }
  857. });
  858. return false;
  859. });
  860. // ----- 鎖車或解鎖 -----
  861. $("#lock_unlock").click(function()
  862. {
  863. lock_str = $("#lock_unlock").val();
  864. if (!confirm("確定"+lock_str+"嗎 ?")) return false;
  865. lock_val = lock_str == "解鎖" ? "0" : "1";
  866. // 查詢目前有無鎖車狀況
  867. $.ajax
  868. ({
  869. url: "<?=APP_URL?>security_action/"+$("#lpr_lock").val()+"/"+md5($("#pswd_lock").val())+"/"+lock_val,
  870. dataType:"json",
  871. type:"post",
  872. data:{},
  873. success:function(jdata)
  874. {
  875. if (lock_val == "1")
  876. {
  877. $("#lock_on_off").text("已");
  878. $("#lock_unlock").val("解鎖");
  879. }
  880. else
  881. {
  882. $("#lock_on_off").text("無");
  883. $("#lock_unlock").val("鎖車");
  884. }
  885. show_item("status_lock");
  886. }
  887. });
  888. });
  889. // ----- 鎖車結東 -----
  890. $("#lock_back,#end_qcar").click(function()
  891. {
  892. window.location.reload(true);
  893. });
  894. });
  895. </script>