VM暫存
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1588 lines
64KB

  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?>) - 歐Pa卡 (管理)</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="<?=APP_URL?>">歐特儀停車場 (<?=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('check_user');">用戶查詢</a>
  45. </li>
  46. <!--li>
  47. <a href="#" onclick="get_allpa_products(event);">加值清單</a>
  48. </li-->
  49. <li>
  50. <a href="#" onclick="show_item('card_register_barcode_input');">卡片記名</a>
  51. </li>
  52. <li>
  53. <a href="#" onclick="get_allpa_admin_products(event);">管理員加值</a>
  54. </li>
  55. <!--li>
  56. <a href="#" onclick="show_item('about_allpa');">使用說明</a>
  57. </li-->
  58. <li>
  59. <a href="#" onclick="logout(event)">登出</a>
  60. </li>
  61. </ul>
  62. <!-- /.nav-second-level -->
  63. </li>
  64. </ul>
  65. </div>
  66. <!-- /.sidebar-collapse -->
  67. </div>
  68. <!-- /.navbar-static-side -->
  69. </nav>
  70. <div id="page-wrapper">
  71. <div class="row">
  72. <div class="col-lg-12">
  73. <h1 class="page-header">歡迎使用 - 歐Pa卡</h1>
  74. </div>
  75. <!-- /.col-lg-12 -->
  76. </div>
  77. <!-- /.row -->
  78. <?php /* ----- 查詢用戶 ----- */ ?>
  79. <div data-items="check_user" class="row">
  80. <div class="col-lg-12">
  81. <div class="panel panel-default">
  82. <div class="panel-body">
  83. <div data-rows class="row">
  84. <div class="col-lg-6">
  85. <form id="check_user_form" role="form" method="post">
  86. <div class="form-group">
  87. <label>車牌號碼</label>
  88. <input type="text" id="user_lpr" class="form-control" style="text-transform:uppercase"
  89. placeholder="請輸入您的車牌號碼"
  90. data-validation="custom"
  91. data-validation-regexp="^([a-zA-Z0-9]+)$"
  92. data-validation-error-msg="限英數字 (範例: ABC2016)"/>
  93. </div>
  94. <button type="submit" class="btn btn-default" onclick="do_check_user(event);">查詢</button>
  95. <button type="reset" class="btn btn-default">重填</button>
  96. </form>
  97. </div>
  98. <!-- /.col-lg-6 (nested) -->
  99. </div>
  100. <!-- /.row (nested) -->
  101. </div>
  102. <!-- /.panel-body -->
  103. </div>
  104. <!-- /.panel -->
  105. </div>
  106. <!-- /.col-lg-12 -->
  107. </div>
  108. <?php /* ----- 查詢用戶 (END) ----- */ ?>
  109. <?php /* ----- 加值清單 ----- */ ?>
  110. <div data-items="allpa_admin_products" class="row" style="display:none;">
  111. <div class="col-lg-12">
  112. <div class="panel panel-default">
  113. <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?>
  114. 管理員加值清單
  115. </div>
  116. <div class="panel-body">
  117. <div data-rows class="row">
  118. <div class="col-lg-12">
  119. <div class="dataTable_wrapper">
  120. <table class="table table-striped table-bordered table-hover">
  121. <thead>
  122. <tr>
  123. <th style="text-align:center;">卡片</th>
  124. <th style="text-align:center;">說明</th>
  125. <th style="text-align:center;">功能</th>
  126. </tr>
  127. <tr id="product_list" style="display:none;">
  128. <td data-tag="p_name" style="text-align:center;vertical-align: middle;"></td>
  129. <td data-tag="p_desc" style="text-align:left;vertical-align: middle;"></td>
  130. <td data-tag="p_function" style="text-align:center;vertical-align: middle;"></td>
  131. </tr>
  132. </thead>
  133. <tbody id="product_data_tbody" style="font-size:10px;"></tbody>
  134. </table>
  135. </div>
  136. </div>
  137. <!-- /.col-lg-6 (nested) -->
  138. </div>
  139. </div>
  140. <!-- /.panel-body -->
  141. </div>
  142. <!-- /.panel -->
  143. </div>
  144. <!-- /.col-lg-12 -->
  145. </div>
  146. <?php /* ----- 加值清單 (END) ----- */ ?>
  147. <?php /* ----- 用戶資訊 ----- */ ?>
  148. <div data-items="user_allpa_info" class="row" style="display:none;">
  149. <div id="user_invalid_allpa_info" class="col-lg-12" style="display:none;">
  150. <div class="panel panel-default">
  151. <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?>
  152. 卡片異常
  153. </div>
  154. <div class="panel-body">
  155. <div data-rows class="row">
  156. <div class="col-lg-6" style="margin: 0px auto;">
  157. <form id="invalid_allpa_info" role="form" method="post">
  158. <table class="table table-striped table-bordered table-hover"">
  159. <tbody id="available_curr_tbody" style="font-size:14px;">
  160. <tr>
  161. <td style="text-align:right;vertical-align: middle; color: blue;">綁定車牌號碼</td>
  162. <td id="show_invalid_lpr" style="text-align:left;vertical-align: middle;"></td>
  163. </tr>
  164. <tr>
  165. <td style="text-align:right;vertical-align: middle; color: red;">歐Pa卡號 (32碼)</td>
  166. <td id="show_invalid_barcode" style="text-align:left;vertical-align: middle;"></td>
  167. </tr>
  168. <tr>
  169. <td style="text-align:right;vertical-align: middle;">卡片餘額</td>
  170. <td id="show_invalid_balance" style="text-align:left;vertical-align: middle;"></td>
  171. </tr>
  172. <tr>
  173. <td style="text-align:right;vertical-align: middle;">紅利點數</td>
  174. <td id="show_invalid_bonus" style="text-align:left;vertical-align: middle;"></td>
  175. </tr>
  176. <tr>
  177. <td style="text-align:right;vertical-align: middle; color: red;">卡片狀態</td>
  178. <td id="show_invalid_card_status" style="text-align:left;vertical-align: middle;"></td>
  179. </tr>
  180. </tbody>
  181. </table>
  182. </form>
  183. </div>
  184. </div>
  185. <!-- /.row (nested) -->
  186. </div>
  187. <!-- /.panel-body -->
  188. </div>
  189. <!-- /.panel -->
  190. </div>
  191. <!-- /.col-lg-12 -->
  192. <div id="user_current_allpa_info" class="col-lg-12" style="display:none;">
  193. <div class="panel panel-default">
  194. <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?>
  195. 我的歐Pa卡
  196. </div>
  197. <div class="panel-body">
  198. <div data-rows class="row">
  199. <div class="col-lg-6" style="margin: 0px auto;">
  200. <form id="current_allpa_info" role="form" method="post">
  201. <table class="table table-striped table-bordered table-hover"">
  202. <tbody id="available_curr_tbody" style="font-size:14px;">
  203. <tr>
  204. <td style="text-align:right;vertical-align: middle; color: blue;">綁定車牌號碼</td>
  205. <td id="show_info_lpr" style="text-align:left;vertical-align: middle;"></td>
  206. </tr>
  207. <tr>
  208. <td style="text-align:right;vertical-align: middle;">歐Pa卡號 (32碼)</td>
  209. <td id="show_info_barcode" style="text-align:left;vertical-align: middle;"></td>
  210. </tr>
  211. <tr>
  212. <td style="text-align:right;vertical-align: middle;">卡片餘額</td>
  213. <td id="show_info_balance" style="text-align:left;vertical-align: middle;"></td>
  214. </tr>
  215. <tr>
  216. <td style="text-align:right;vertical-align: middle;">紅利點數</td>
  217. <td id="show_info_bonus" style="text-align:left;vertical-align: middle;"></td>
  218. </tr>
  219. </tbody>
  220. </table>
  221. </form>
  222. </div>
  223. </div>
  224. <!-- /.row (nested) -->
  225. </div>
  226. <!-- /.panel-body -->
  227. </div>
  228. <!-- /.panel -->
  229. </div>
  230. <!-- /.col-lg-12 -->
  231. <div id="allpa_user_bill_info" class="col-lg-12" style="display:none;">
  232. <div class="panel panel-default">
  233. <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?>
  234. 使用記錄
  235. </div>
  236. <div class="panel-body">
  237. <div data-rows class="row">
  238. <div class="col-lg-12">
  239. <div class="dataTable_wrapper">
  240. <table class="table table-striped table-bordered table-hover">
  241. <thead>
  242. <tr>
  243. <th style="text-align:center;">項目</th>
  244. <th style="text-align:center;">說明</th>
  245. <th style="text-align:center;">金額</th>
  246. <th style="text-align:center;">狀態</th>
  247. </tr>
  248. <tr id="allpa_user_bill_list" style="display:none;">
  249. <td data-tag="b_name" style="text-align:center;vertical-align: middle;"></td>
  250. <td data-tag="b_desc" style="text-align:left;vertical-align: middle;"></td>
  251. <td data-tag="b_amt" style="text-align:center;vertical-align: middle;"></td>
  252. <td data-tag="b_function" style="text-align:center;vertical-align: middle;"></td>
  253. </tr>
  254. </thead>
  255. <tbody id="allpa_user_bill_data_tbody" style="font-size:10px;"></tbody>
  256. </table>
  257. </div>
  258. </div>
  259. <!-- /.col-lg-6 (nested) -->
  260. </div>
  261. </div>
  262. <!-- /.panel-body -->
  263. </div>
  264. <!-- /.panel -->
  265. </div>
  266. <!-- /.col-lg-12 -->
  267. <div id="user_bill_info" class="col-lg-12" style="display:none;">
  268. <div class="panel panel-default">
  269. <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?>
  270. 加值清單
  271. </div>
  272. <div class="panel-body">
  273. <div data-rows class="row">
  274. <div class="col-lg-12">
  275. <div class="dataTable_wrapper">
  276. <table class="table table-striped table-bordered table-hover">
  277. <thead>
  278. <tr>
  279. <th style="text-align:center;">卡片</th>
  280. <th style="text-align:center;">說明</th>
  281. <th style="text-align:center;">狀態</th>
  282. </tr>
  283. <tr id="bill_list" style="display:none;">
  284. <td data-tag="b_name" style="text-align:center;vertical-align: middle;"></td>
  285. <td data-tag="b_desc" style="text-align:left;vertical-align: middle;"></td>
  286. <td data-tag="b_function" style="text-align:center;vertical-align: middle;"></td>
  287. </tr>
  288. </thead>
  289. <tbody id="bill_data_tbody" style="font-size:10px;"></tbody>
  290. </table>
  291. </div>
  292. </div>
  293. <!-- /.col-lg-6 (nested) -->
  294. </div>
  295. </div>
  296. <!-- /.panel-body -->
  297. </div>
  298. <!-- /.panel -->
  299. </div>
  300. <!-- /.col-lg-12 -->
  301. </div>
  302. <?php /* ----- 用戶資訊 (END) ----- */ ?>
  303. <?php /* ----- 結帳頁 ----- */ ?>
  304. <div data-items="payment_data" class="row" style="display:none;">
  305. <div class="col-lg-12">
  306. <div class="panel panel-default">
  307. <div class="panel-body">
  308. <div data-rows class="row">
  309. <div class="col-lg-6" style="margin: 0px auto;">
  310. <form id="payment_data" role="form" method="post">
  311. <table class="table table-striped table-bordered table-hover"">
  312. <tbody id="available_curr_tbody" style="font-size:14px;">
  313. <tr class="form-group">
  314. <td style="text-align:right;vertical-align: middle; color: blue;">車牌號碼</td>
  315. <td style="text-align:left;vertical-align: middle;">
  316. <input type="text" id="payment_lpr" class="form-control" style="text-transform:uppercase"
  317. placeholder="請輸入您要加值的車牌號碼"
  318. data-validation="custom"
  319. data-validation-regexp="^([a-zA-Z0-9]+)$"
  320. data-validation-error-msg="限英數字 (範例: ABC2016)"
  321. data-validation-error-msg-container="#lpr_error_msg"
  322. />
  323. <span id="lpr_error_msg"></span>
  324. </td>
  325. </tr>
  326. <tr>
  327. <td style="text-align:right;vertical-align: middle;">卡片名稱</td>
  328. <td id="show_product_name" style="text-align:left;vertical-align: middle;"></td>
  329. </tr>
  330. <tr>
  331. <td style="text-align:right;vertical-align: middle;">說明</td>
  332. <td id="show_product_desc" style="text-align:left;vertical-align: middle;"></td>
  333. </tr>
  334. <tr>
  335. <td style="text-align:right;vertical-align: middle;">備註</td>
  336. <td id="show_remarks" style="text-align:left;vertical-align: middle;"></td>
  337. </tr>
  338. <tr>
  339. <td style="text-align:right;vertical-align: middle;">金額 (NTD)</td>
  340. <td id="show_amt" style="text-align:left;vertical-align: middle;"></td>
  341. </tr>
  342. <tr class="form-group"style="display:none;">
  343. <td style="text-align:right;vertical-align: middle;">發票載具 <br/>(手機條碼)</td>
  344. <td style="text-align:left;vertical-align: middle;">
  345. <input type="text" id="invoice_receiver" class="form-control" placeholder="如不要發票請留空白"
  346. data-validation="custom"
  347. data-validation-regexp="^$|^(?=.{7}$)([A-Za-z0-9]+)$|^(?=.{8}$)\u002F([A-Za-z0-9]+)$"
  348. data-validation-error-msg="請輸入正確載具<br/>格式: / + 7碼 <br/>(共8碼)"
  349. />
  350. </td>
  351. </tr>
  352. <tr class="form-group" style="display:none;">
  353. <td style="text-align:right;vertical-align: middle;"></td>
  354. <td style="text-align:left;vertical-align: middle; color: red;">
  355. 若發票載具留空白,發票將自動送個社福團體
  356. </td>
  357. </tr>
  358. <tr class="form-group">
  359. <td style="text-align:right;vertical-align: middle;">公司統編</td>
  360. <td style="text-align:left;vertical-align: middle;">
  361. <input type="tel" id="company_no" class="form-control" placeholder="如不打統編請留空白"
  362. data-validation="custom"
  363. data-validation-optional="true"
  364. data-validation-regexp="^(?=.{8}$)([0-9]+)$"
  365. data-validation-error-msg="請輸入正確統編<br/>例如:80682490"
  366. data-validation-error-msg-container="#company_no_error_msg"
  367. />
  368. <span id="company_no_error_msg"></span>
  369. </td>
  370. </tr>
  371. <tr class="form-group">
  372. <td style="text-align:right;vertical-align: middle;">電子信箱</td>
  373. <td style="text-align:left;vertical-align: middle;">
  374. <input type="email" id="email" class="form-control" placeholder="發票將寄信通知"
  375. data-validation="email"
  376. data-validation-optional="true"
  377. data-validation-error-msg="請輸入正確信箱<br/>例如:altob@gmail.com"
  378. data-validation-error-msg-container="#email_error_msg"
  379. />
  380. <span id="email_error_msg"></span>
  381. </td>
  382. </tr>
  383. <tr class="form-group">
  384. <td style="text-align:right;vertical-align: middle;">手機號碼</td>
  385. <td style="text-align:left;vertical-align: middle;">
  386. <input type="tel" id="mobile" class="form-control" placeholder="發票將寄簡訊通知"
  387. data-validation="custom"
  388. data-validation-optional="true"
  389. data-validation-regexp="^(?=.{10}$)09([0-9]+)$"
  390. data-validation-error-msg="請輸入正確手機號碼<br/>例如:0912345678"
  391. data-validation-error-msg-container="#mobile_error_msg"
  392. />
  393. <span id="mobile_error_msg"></span>
  394. </td>
  395. </tr>
  396. <tr>
  397. <td style="text-align:right;vertical-align: middle;">訂單编號</td>
  398. <td id="show_order_no" style="text-align:left;vertical-align: middle;"></td>
  399. </tr>
  400. <tr>
  401. <td style="text-align:right;vertical-align: middle;">有效期限</td>
  402. <td id="show_valid_time_countdown" style="text-align:left;vertical-align: middle; color: red;"></td>
  403. </tr>
  404. <tr>
  405. <td style="text-align:right;vertical-align: middle;">
  406. <button type="button" class="btn btn-default" onclick="transfer_money_admin(event);">開始付款</button>
  407. </td>
  408. <td style="text-align:left;vertical-align: middle;">
  409. <button type="button" class="btn btn-default" onclick="show_item('allpa_admin_products');">取消</button>
  410. </td>
  411. </tr>
  412. </tbody>
  413. </table>
  414. </form>
  415. </div>
  416. </div>
  417. <!-- /.row (nested) -->
  418. </div>
  419. <!-- /.panel-body -->
  420. </div>
  421. <!-- /.panel -->
  422. </div>
  423. <!-- /.col-lg-12 -->
  424. </div>
  425. <?php /* ----- 結帳頁 (END) ----- */ ?>
  426. <?php /* ----- PIN碼, 儲值 ----- */ ?>
  427. <div data-items="allpa_reload" class="row" style="display:none;">
  428. <div class="col-lg-12">
  429. <div class="panel panel-default">
  430. <div class="panel-body">
  431. <div data-rows class="row">
  432. <div class="col-lg-6" style="margin: 0px auto;">
  433. <form id="allpa_reload_data" role="form" method="post">
  434. <table class="table table-striped table-bordered table-hover"">
  435. <tbody id="available_curr_tbody" style="font-size:14px;">
  436. <tr>
  437. <td style="text-align:right;vertical-align: middle; color: blue;">車牌號碼</td>
  438. <td id="show_reload_lpr" style="text-align:left;vertical-align: middle;"></td>
  439. </tr>
  440. <tr>
  441. <td style="text-align:right;vertical-align: middle;">歐Pa卡號 (32碼)</td>
  442. <td id="show_reload_barcode" style="text-align:left;vertical-align: middle;"></td>
  443. </tr>
  444. <tr>
  445. <td style="text-align:right;vertical-align: middle;">儲值前金額</td>
  446. <td id="show_reload_amount_before" style="text-align:left;vertical-align: middle;"></td>
  447. </tr>
  448. <tr>
  449. <td style="text-align:right;vertical-align: middle; color: blue;">本次加值金額</td>
  450. <td id="show_reload_amt" style="text-align:left;vertical-align: middle;"></td>
  451. </tr>
  452. <tr>
  453. <td style="text-align:right;vertical-align: middle;">儲值後金額</td>
  454. <td id="show_reload_amount_next" style="text-align:left;vertical-align: middle;"></td>
  455. </tr>
  456. <tr>
  457. <td style="text-align:right;vertical-align: middle;">儲值 PIN 碼</td>
  458. <td id="show_pin_pic" style="text-align:left;vertical-align: middle;"></td>
  459. </tr>
  460. <tr class="form-group">
  461. <td style="text-align:right;vertical-align: middle;"></td>
  462. <td style="text-align:left;vertical-align: middle;">
  463. <input type="text" id="reload_pin" class="form-control" placeholder="請輸入儲值PIN碼"
  464. data-validation="custom"
  465. data-validation-regexp="^([a-zA-Z0-9]+)$"
  466. data-validation-error-msg="請輸入儲值PIN碼"
  467. data-validation-error-msg-container="#pin_error_msg"
  468. />
  469. <span id="pin_error_msg"></span>
  470. </td>
  471. </tr>
  472. <tr>
  473. <td style="text-align:right;vertical-align: middle;">有效期限</td>
  474. <td id="show_pin_valid_time_countdown" style="text-align:left;vertical-align: middle; color: red;"></td>
  475. </tr>
  476. <tr>
  477. <td style="text-align:right;vertical-align: middle;">
  478. <button type="button" class="btn btn-default" onclick="do_allpa_reload(event);">確定儲值</button>
  479. </td>
  480. <td style="text-align:left;vertical-align: middle;">
  481. <button type="button" class="btn btn-default" onclick="show_item('user_allpa_info');">取消</button>
  482. </td>
  483. </tr>
  484. <input id="reload_pin_check_id" type="hidden" name="reload_pin_check_id" value="0" />
  485. <input id="reload_order_no" type="hidden" name="reload_order_no" value="0" />
  486. </tbody>
  487. </table>
  488. </form>
  489. </div>
  490. </div>
  491. <!-- /.row (nested) -->
  492. </div>
  493. <!-- /.panel-body -->
  494. </div>
  495. <!-- /.panel -->
  496. </div>
  497. <!-- /.col-lg-12 -->
  498. </div>
  499. <?php /* ----- PIN碼, 儲值 (END) ----- */ ?>
  500. <?php /* ----- 實體卡記名A ----- */ ?>
  501. <div data-items="card_register_barcode_input" class="row" style="display:none;">
  502. <div class="col-lg-12">
  503. <div class="panel panel-default">
  504. <div class="panel-body">
  505. <div data-rows class="row">
  506. <div class="col-lg-6">
  507. <form id="card_register_barcode_input_form" role="form" method="post">
  508. <div class="form-group">
  509. <label>歐Pa卡號</label>
  510. <input type="text" id="card_register_barcode" class="form-control"
  511. placeholder="請輸入歐Pa卡號 (32碼)"
  512. data-validation="custom"
  513. data-validation-regexp="^(?=.{32}$)([0-9]+)$"
  514. data-validation-error-msg="歐Pa卡號碼格式: 32碼 數字">
  515. </div>
  516. <button type="submit" class="btn btn-default" onclick="do_card_register_barcode_input(event);">確定</button>
  517. <button type="reset" class="btn btn-default">重填</button>
  518. </form>
  519. </div>
  520. <!-- /.col-lg-6 (nested) -->
  521. </div>
  522. <!-- /.row (nested) -->
  523. </div>
  524. <!-- /.panel-body -->
  525. </div>
  526. <!-- /.panel -->
  527. </div>
  528. <!-- /.col-lg-12 -->
  529. </div>
  530. <?php /* ----- 實體卡記名A (END) ----- */ ?>
  531. <?php /* ----- 實體卡記名B (卡片查詢結果顯示, 輸入要綁定的車牌) ----- */ ?>
  532. <div data-items="card_register_lpr_input" class="row" style="display:none;">
  533. <div class="col-lg-12">
  534. <div class="panel panel-default">
  535. <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?>
  536. 卡片上的金額, 將轉移給車牌號碼
  537. </div>
  538. <div class="panel-body">
  539. <div data-rows class="row">
  540. <div class="col-lg-6">
  541. <form id="card_register_lpr_input_form" role="form" method="post">
  542. <table class="table table-striped table-bordered table-hover"">
  543. <tbody id="available_curr_tbody" style="font-size:14px;">
  544. <tr>
  545. <td style="text-align:right;vertical-align: middle; color: blue;">歐Pa卡號 (32碼)</td>
  546. <td id="card_register_barcode_value" style="text-align:left;vertical-align: middle;"></td>
  547. </tr>
  548. <tr>
  549. <td style="text-align:right;vertical-align: middle;">卡片金額</td>
  550. <td id="card_register_balance_value" style="text-align:left;vertical-align: middle;"></td>
  551. </tr>
  552. <tr>
  553. <td style="text-align:right;vertical-align: middle;">紅利點數</td>
  554. <td id="card_register_bonus_value" style="text-align:left;vertical-align: middle;"></td>
  555. </tr>
  556. <tr>
  557. <td style="text-align:right;vertical-align: middle;">卡片狀態</td>
  558. <td id="card_register_card_status_value" style="text-align:left;vertical-align: middle;"></td>
  559. </tr>
  560. </tbody>
  561. </table>
  562. <div class="form-group">
  563. <label>要綁定的車牌號碼</label>
  564. <input type="text" id="card_register_lpr" class="form-control" style="text-transform:uppercase"
  565. placeholder="請輸入您要綁定的車牌號碼"
  566. data-validation="custom"
  567. data-validation-regexp="^([a-zA-Z0-9]+)$"
  568. data-validation-error-msg="限英數字 (範例: ABC2016)"/>
  569. </div>
  570. <button type="submit" class="btn btn-default" onclick="do_card_register(event);">確認綁定</button>
  571. <button type="reset" class="btn btn-default">重填</button>
  572. </form>
  573. </div>
  574. <!-- /.col-lg-6 (nested) -->
  575. </div>
  576. <!-- /.row (nested) -->
  577. </div>
  578. <!-- /.panel-body -->
  579. </div>
  580. <!-- /.panel -->
  581. </div>
  582. <!-- /.col-lg-12 -->
  583. </div>
  584. <?php /* ----- 實體卡記名B (卡片查詢結果顯示, 輸入要綁定的車牌) (END) ----- */ ?>
  585. <?php /* ----- 歐趴卡使用說明 ----- */ ?>
  586. <div data-items="about_allpa" class="row" style="display:none;">
  587. <div class="col-lg-12">
  588. <div class="panel panel-default">
  589. <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?>
  590. 歐Pa卡使用說明
  591. </div>
  592. <div class="panel-body">
  593. <div data-rows class="row">
  594. <div class="col-lg-6">
  595. <!--div class="col-lg-8 col-lg-offset-2 text-center">
  596. <h3 class="section-heading">使用條款、一</h2>
  597. <hr class="light">
  598. ※本卡僅限一卡設定一台車號,車主或持卡人同意於本公司全台停車場停車出場時,自動於歐趴卡扣除停車費。
  599. </div>
  600. <div class="col-lg-8 col-lg-offset-2 text-center">
  601. <h3 class="section-heading">使用條款、二</h2>
  602. <hr class="light">
  603. ※如遇歐趴卡餘額不足時請於出場前進行加值;若無法扣款則需請車主或持卡人自行以其他方式繳付停車費。
  604. </div>
  605. <div class="col-lg-8 col-lg-offset-2 text-center">
  606. <h3 class="section-heading">使用條款、三</h2>
  607. <hr class="light">
  608. ※本卡提供記名服務,若消費者選擇不記名時,使用認卡不認人,若卡片遺失、遭竊、詐取、毀損至系統無法辯識或遭第三人佔領等情事發生,儲值金額等同現金遺失,恕無法提供儲值金額賠償或掛失止付,請消費者妥善保管使用;若完成記名作業,如遇卡片遺失可逕向本公司申請掛失、補發新卡及餘額返還,惟補發新卡費用將酌收50元。
  609. </div>
  610. <div class="col-lg-8 col-lg-offset-2 text-center">
  611. <h3 class="section-heading">使用條款、四</h2>
  612. <hr class="light">
  613. ※退卡作業:如卡片使用後尚有餘額,請逕自將餘額用罄,恕不退還。
  614. </div>
  615. <div class="col-lg-8 col-lg-offset-2 text-center">
  616. <h3 class="section-heading">使用條款、五</h2>
  617. <hr class="light">
  618. ※本卡所收取之金額,已存入發行人於中國信託商業銀行開立之信託專戶,專款專用;所稱專用係指供發行人履行交付商品或提供服務義務使用。本信託受益人為發行人,非本卡持有人,信託期間自開卡日起一年,託存續期間屆滿後,由中國信託商業銀行將信託專戶餘額交由發行人領回。
  619. </div-->
  620. <div class="col-lg-8 col-lg-offset-2 text-center">
  621. <h3 class="section-heading">說明、一</h2>
  622. <hr class="light">
  623. ※目前停車場付費方式包括在自動繳費機付費、月租繳費以及行動支付,此外,公司也發行歐Pa卡,提供客人另一種付費管道。
  624. </div>
  625. <div class="col-lg-8 col-lg-offset-2 text-center">
  626. <h3 class="section-heading">說明、二</h2>
  627. <hr class="light">
  628. ※客人只須上網登錄車號,當進入停車場時,系統會直接在雲端扣點數,無須搖下車窗,即可透過車牌辨識進場。
  629. </div>
  630. <div class="col-lg-8 col-lg-offset-2 text-center">
  631. <h3 class="section-heading">說明、三</h2>
  632. <hr class="light">
  633. ※出場時,系統也會自動比對餘額與自動扣款。
  634. </div>
  635. <div class="col-lg-8 col-lg-offset-2 text-center">
  636. <h3 class="section-heading">說明、四</h2>
  637. <hr class="light">
  638. ※未來歐Pa卡可透過現金、上網等管道儲值。
  639. </div>
  640. <div class="col-lg-8 col-lg-offset-2 text-center">
  641. <h3 class="section-heading">說明、五</h2>
  642. <hr class="light">
  643. ※目前首先在板車導入,接下來將陸續導入本公司各停車場,未來只要是本公司歐Pa卡客戶,即可方便進出各停車場。
  644. </div>
  645. <div class="col-lg-8 col-lg-offset-2 text-center">
  646. <h3 class="section-heading">謝謝!!</h2>
  647. <hr class="light">
  648. ※若遇卡片使用問題,請參照:<a href="<?=APP_URL?>">官網</a>說明或洽各<p><a href="maps://maps.google.com/maps?daddr=25.0267747,121.5410621&amp;ll=">歐特儀特約停車場站管理室</a>或電洽歐特儀<a href="tel:+886227057716">(02) 2705-7716 </a>將有專人為您服務。
  649. </div>
  650. </div>
  651. <!-- /.col-lg-6 (nested) -->
  652. </div>
  653. <!-- /.row (nested) -->
  654. </div>
  655. <!-- /.panel-body -->
  656. </div>
  657. <!-- /.panel -->
  658. </div>
  659. <!-- /.col-lg-12 -->
  660. </div>
  661. <?php /* ----- 歐趴卡使用說明 (END) ----- */ ?>
  662. </div>
  663. <!-- /#page-wrapper -->
  664. </div>
  665. <!-- /#wrapper -->
  666. <!-- jQuery -->
  667. <script src="<?=BOOTSTRAPS?>bower_components/jquery/dist/jquery.min.js"></script>
  668. <!-- Bootstrap Core JavaScript -->
  669. <script src="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
  670. <!-- Metis Menu Plugin JavaScript -->
  671. <script src="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.js"></script>
  672. <!-- Morris Charts JavaScript -->
  673. <script src="<?=BOOTSTRAPS?>bower_components/raphael/raphael-min.js"></script>
  674. <!--script src="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.min.js"></script-->
  675. <!--script src="<?=BOOTSTRAPS?>js/morris-data.js"></script-->
  676. <!-- virtual keyboard -->
  677. <!--link href="<?=WEB_LIB?>virtual-keyboard/css/jquery-ui.min.css" rel="stylesheet">
  678. <link href="<?=WEB_LIB?>virtual-keyboard/css/keyboard.css" rel="stylesheet">
  679. <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery-ui.min.js"></script>
  680. <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.js"></script>
  681. <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.extension-caret.js"></script-->
  682. <!-- jQuery validate -->
  683. <script src="<?=WEB_LIB?>form-validator/jquery.form-validator.min.js"></script>
  684. <!-- alertify -->
  685. <link href="<?=WEB_LIB?>css/alertify.core.css" rel="stylesheet">
  686. <link href="<?=WEB_LIB?>css/alertify.bootstrap.css" rel="stylesheet">
  687. <script src="<?=WEB_LIB?>js/alertify.min.js"></script>
  688. <!-- alertify -->
  689. <script src="<?=WEB_LIB?>js/moment.min.js"></script>
  690. <!-- Custom Theme JavaScript -->
  691. <script src="<?=BOOTSTRAPS?>dist/js/sb-admin-2.js"></script>
  692. <div id="works" style="display:none;"></div><?php /* 作為浮動顯示區之用 */ ?>
  693. </body>
  694. </html>
  695. <script>
  696. var pinIntervalId = 0; // pin timer
  697. var refreshIntervalId = 0; // payment timer
  698. <?php /* alertify function */ ?>
  699. function alertify_log($msg)
  700. {
  701. alertify.set({delay : 2000});
  702. alertify.log($msg);
  703. }
  704. function alertify_error($msg)
  705. {
  706. alertify.set({delay : 2000});
  707. alertify.error($msg);
  708. }
  709. function alertify_success($msg)
  710. {
  711. alertify.set({ labels: {
  712. ok : "確定"
  713. } });
  714. alertify.alert($msg, function (e){
  715. location.reload(); // F5
  716. });
  717. }
  718. <?php /* 顯示指定項目 */ ?>
  719. function show_item(tags)
  720. {
  721. // 查詢
  722. $("#user_lpr").val("");
  723. // 啟用
  724. $("#reload_pin").val("");
  725. // 付款
  726. $("#payment_lpr").val("");
  727. $("#company_no").val("");
  728. $("#email").val("");
  729. $("#mobile").val("");
  730. // 記名
  731. $("#card_register_barcode").val("");
  732. $("#card_register_lpr").val("");
  733. if(tags.indexOf('payment_data') < 0){
  734. clearInterval(refreshIntervalId); // 消除倒數計時timer
  735. //console.log("clearInterval..");
  736. }
  737. if(tags.indexOf('allpa_reload') < 0){
  738. clearInterval(pinIntervalId); // 消除倒數計時timer
  739. //console.log("pinIntervalId..");
  740. }
  741. $("[data-items]").hide();
  742. $("[data-items="+tags+"]").show();
  743. return false;
  744. }
  745. // 判斷回傳資料是否有效
  746. function is_valid_result(result)
  747. {
  748. if(result){
  749. return true;
  750. }else{
  751. alertify_error("未知的錯誤..");
  752. return false;
  753. }
  754. }
  755. // 判斷回傳資料是否為json
  756. function is_json_result(result)
  757. {
  758. if (/^[\],:{}\s]*$/.test(result.replace(/\\["\\\/bfnrtu]/g, '@').
  759. replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
  760. replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
  761. //the json is ok
  762. return true;
  763. }else{
  764. //the json is not ok
  765. alertify_error("查無資料,請鍵入正確資料 (回傳資料有誤)");
  766. return false;
  767. }
  768. }
  769. // 執行卡片記名 step 1
  770. function do_card_register_barcode_input(event)
  771. {
  772. event.preventDefault();
  773. if(! $("#card_register_barcode_input_form").isValid()) return false;
  774. var barcode = $("#card_register_barcode").val() == '' ? '0' : $("#card_register_barcode").val();
  775. $.ajax
  776. ({
  777. url: "<?=APP_URL?>get_barcode_info",
  778. type: "post",
  779. dataType:"text",
  780. data:{
  781. "barcode": barcode
  782. },
  783. success: function(result)
  784. {
  785. if(!is_valid_result(result)){ return false; }
  786. if(!is_json_result(result)){ return false; }
  787. var jdata = JSON.parse(result);
  788. if(jdata.result_code == "OK")
  789. {
  790. //console.log(jdata);
  791. // 已開卡
  792. if(jdata.result){
  793. alertify_log("已開卡..");
  794. user_allpa_info_handler(jdata);
  795. return false;
  796. }
  797. // 綁定頁
  798. $("#card_register_barcode_value").text(jdata.barcode);
  799. $("#card_register_balance_value").text(jdata.balance);
  800. $("#card_register_card_status_value").text(jdata.card_status);
  801. $("#card_register_bonus_value").text(jdata.bonus);
  802. show_item("card_register_lpr_input");
  803. }else{
  804. alertify_error([
  805. "查詢失敗..<br/><br/>",
  806. "[代碼] : ", jdata.result_code, "<br/>",
  807. "[訊息] : ", jdata.result_msg, "<br/>"
  808. ].join(''));
  809. }
  810. },
  811. error: function (xhr, ajaxOptions, thrownError)
  812. {
  813. alertify_error("發生未知錯誤, 請稍候再試");
  814. }
  815. })
  816. }
  817. // 執行卡片記名 step 2
  818. function do_card_register(event)
  819. {
  820. event.preventDefault();
  821. if(! $("#card_register_lpr_input_form").isValid()) return false;
  822. var barcode = $("#card_register_barcode_value").text() == '' ? '0' : $("#card_register_barcode_value").text();
  823. var lpr = $("#card_register_lpr").val();
  824. $.ajax
  825. ({
  826. url: "<?=APP_URL?>card_register",
  827. type: "post",
  828. dataType:"text",
  829. data:{
  830. "barcode": barcode,
  831. "lpr": lpr
  832. },
  833. success: function(result)
  834. {
  835. if(!is_valid_result(result)){ return false; }
  836. if(!is_json_result(result)){ return false; }
  837. var jdata = JSON.parse(result);
  838. if(jdata.result_code == "OK")
  839. {
  840. alertify_log("卡片記名完成");
  841. user_allpa_info_handler(jdata);
  842. return false;
  843. } else if(jdata.result_code == "-201") // 已註冊的車牌, 詢問點數轉移
  844. {
  845. console.log("switch?? " + jdata);
  846. alertify_log([
  847. "車牌已綁卡, 請直接購卡加值..<br/><br/>",
  848. "[代碼] : ", jdata.result_code, "<br/>",
  849. "[訊息] : ", jdata.result_msg, "<br/>"
  850. ].join(''));
  851. } else {
  852. alertify_error([
  853. "卡片記名失敗..<br/><br/>",
  854. "[代碼] : ", jdata.result_code, "<br/>",
  855. "[訊息] : ", jdata.result_msg, "<br/>"
  856. ].join(''));
  857. }
  858. },
  859. error: function (xhr, ajaxOptions, thrownError)
  860. {
  861. alertify_error("發生未知錯誤, 請稍候再試");
  862. }
  863. })
  864. }
  865. // 開啟轉帳畫面
  866. function transfer_money_admin(event)
  867. {
  868. event.preventDefault();
  869. if($("#payment_lpr").val() == '')
  870. {
  871. alertify_log("請指定要加值的車牌號碼!!");
  872. return false;
  873. }
  874. if(! $("#payment_data").isValid()) return false;
  875. if($("#email").val() == '' && $("#mobile").val() == '')
  876. {
  877. alertify_error("請至少提供一項發票通知方式<br/>1. 電子信箱 <br/>2. 或 手機號碼<br/><br/>謝謝!!");
  878. return false;
  879. }
  880. if (! confirm("開始結帳嗎 ?")) return false;
  881. // Create Base64 Object
  882. 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}}
  883. var lpr = $("#payment_lpr").val() == '' ? 'UNKNOWN' : $("#payment_lpr").val();
  884. var order_no = $("#show_order_no").text() == '' ? '0' : $("#show_order_no").text();
  885. var invoice_receiver = $("#invoice_receiver").val() == '' ? '0' : $("#invoice_receiver").val();
  886. var company_no = $("#company_no").val() == '' ? '0' : $("#company_no").val();
  887. var email = $("#email").val() == '' ? '0' : Base64.encode($("#email").val()).slice(0, -1); // remove base64 '=' for URI rule
  888. var mobile = $("#mobile").val() == '' ? '0' : $("#mobile").val();
  889. webatm = window.open(
  890. ["<?=APP_URL?>transfer_money_admin/",
  891. lpr, "/",
  892. order_no, "/",
  893. encodeURI(invoice_receiver), "/",
  894. encodeURI(company_no), "/",
  895. email, "/",
  896. mobile, "/"
  897. ].join('')
  898. , "_self");
  899. }
  900. // 執行 PIN 儲值
  901. function do_allpa_reload(event)
  902. {
  903. event.preventDefault();
  904. if(! $("#allpa_reload_data").isValid()) return false;
  905. var pin_check_id = $("#reload_pin_check_id").text() == '' ? '0' : $("#reload_pin_check_id").text();
  906. var order_no = $("#reload_order_no").text() == '' ? '0' : $("#reload_order_no").text();
  907. var reload_pin = $("#reload_pin").val() == '' ? '0' : $("#reload_pin").val();
  908. $.ajax
  909. ({
  910. url: "<?=APP_URL?>allpa_reload",
  911. type: "post",
  912. dataType:"text",
  913. data:{
  914. "pin_check_id": pin_check_id,
  915. "order_no": order_no,
  916. "reload_pin": reload_pin
  917. },
  918. success: function(result)
  919. {
  920. if(!is_valid_result(result)){ return false; }
  921. if(!is_json_result(result)){ return false; }
  922. var jdata = JSON.parse(result);
  923. if(jdata.result_code == "OK")
  924. {
  925. alertify_log([
  926. "PIN 儲值成功..<br/><br/>",
  927. "[代碼] : ", jdata.result_code, "<br/>",
  928. "[訊息] : ", jdata.result_msg, "<br/>"
  929. ].join(''));
  930. user_allpa_info_handler(jdata);
  931. }else{
  932. alertify_error([
  933. "PIN 儲值失敗..<br/><br/>",
  934. "[代碼] : ", jdata.result_code, "<br/>",
  935. "[訊息] : ", jdata.result_msg, "<br/>"
  936. ].join(''));
  937. }
  938. },
  939. error: function (xhr, ajaxOptions, thrownError)
  940. {
  941. alertify_error("發生未知錯誤, 請稍候再試");
  942. }
  943. })
  944. }
  945. // 啟用卡片
  946. function do_activate(order_no)
  947. {
  948. $.ajax
  949. ({
  950. url: "<?=APP_URL?>activate_bill",
  951. type: "post",
  952. dataType:"text",
  953. data:{
  954. "order_no": order_no
  955. },
  956. success: function(result)
  957. {
  958. if(!is_valid_result(result)){ return false; }
  959. if(!is_json_result(result)){ return false; }
  960. var jdata = JSON.parse(result);
  961. if(jdata.result_code == "OK")
  962. {
  963. //console.log(jdata);
  964. // 新開卡
  965. if(!jdata.encoded_pic){
  966. user_allpa_info_handler(jdata);
  967. return false;
  968. }
  969. // variables for time units
  970. var days, hours, minutes, seconds = 0;
  971.  
  972. // get tag element
  973. var countdown = $("#show_pin_valid_time_countdown");
  974. countdown.val("");
  975. //var countdown_offset_ms = 60*5*1000; // 比資料庫早5分鐘timeout
  976. var duration = moment.duration({minutes: 0}); // 比資料庫早5分鐘timeout
  977. // set the date we're counting down to
  978. var target_date = moment(jdata.valid_before).subtract(duration);
  979. //var target_date = new Date(jdata.balance_time_limit).getTime();
  980. pinIntervalId = setInterval(function () {
  981.     // find the amount of "seconds" between now and target
  982. var seconds_left = target_date.diff(moment(), 'seconds');
  983. //console.log(seconds_left);
  984. //var current_date = new Date().getTime();
  985.     //var seconds_left = (target_date - current_date - countdown_offset_ms) / 1000;
  986. if(seconds_left <= 0){
  987. clearInterval(pinIntervalId);
  988. // reload page
  989. show_item('check_user');
  990. }
  991.  
  992.     // do some time calculations
  993.     days = parseInt(seconds_left / 86400);
  994.     seconds_left = seconds_left % 86400;
  995.      
  996.     hours = parseInt(seconds_left / 3600);
  997.     seconds_left = seconds_left % 3600;
  998.      
  999.     minutes = parseInt(seconds_left / 60);
  1000.     seconds = parseInt(seconds_left % 60);
  1001. if(minutes < 10){
  1002. minutes = '0' + minutes;
  1003. }
  1004. if(seconds < 10){
  1005. seconds = '0' + seconds;
  1006. }
  1007.     // format countdown string + set tag value
  1008. countdown.text(['還剩 ', minutes, ' : ', seconds, ' 有效'].join(''));
  1009. }, 1000);
  1010. $("#show_reload_lpr").text(jdata.lpr);
  1011. $("#show_reload_barcode").text(jdata.barcode);
  1012. $("#show_reload_amount_before").text([jdata.amount_before, ' 元'].join(''));
  1013. $("#show_reload_amt").text([jdata.amt, ' 元'].join(''));
  1014. $("#show_reload_amount_next").text([jdata.amount_before, ' 元', " + ", jdata.amt, ' 元'].join(''));
  1015. $("#show_pin_pic").html('<img src="data:image/gif;base64,' +jdata.encoded_pic+ '" />');
  1016. // hidden
  1017. $("#reload_pin_check_id").text(jdata.pin_check_id);
  1018. $("#reload_order_no").text(jdata.order_no);
  1019. show_item("allpa_reload");
  1020. }else{
  1021. alertify_error([
  1022. "啟用失敗..<br/><br/>",
  1023. "[代碼] : ", jdata.result_code, "<br/>",
  1024. "[訊息] : ", jdata.result_msg, "<br/>"
  1025. ].join(''));
  1026. }
  1027. },
  1028. error: function (xhr, ajaxOptions, thrownError)
  1029. {
  1030. alertify_error("發生未知錯誤, 請稍候再試");
  1031. }
  1032. })
  1033. }
  1034. // 購買卡片
  1035. function do_purchase(product_id)
  1036. {
  1037. $.ajax
  1038. ({
  1039. url: "<?=APP_URL?>purchase_admin_products",
  1040. type: "post",
  1041. dataType:"text",
  1042. data:{
  1043. "product_id": product_id
  1044. },
  1045. success: function(result)
  1046. {
  1047. if(!is_valid_result(result)){ return false; }
  1048. if(!is_json_result(result)){ return false; }
  1049. var jdata = JSON.parse(result);
  1050. if(jdata.result_code == "OK")
  1051. {
  1052. //console.log(jdata);
  1053. // variables for time units
  1054. var days, hours, minutes, seconds = 0;
  1055.  
  1056. // get tag element
  1057. var countdown = $("#show_valid_time_countdown");
  1058. countdown.val("");
  1059. //var countdown_offset_ms = 60*5*1000; // 比資料庫早5分鐘timeout
  1060. var duration = moment.duration({minutes: 5}); // 比資料庫早5分鐘timeout
  1061. // set the date we're counting down to
  1062. var target_date = moment(jdata.valid_time).subtract(duration);
  1063. //var target_date = new Date(jdata.balance_time_limit).getTime();
  1064. refreshIntervalId = setInterval(function () {
  1065.     // find the amount of "seconds" between now and target
  1066. var seconds_left = target_date.diff(moment(), 'seconds');
  1067. //console.log(seconds_left);
  1068. //var current_date = new Date().getTime();
  1069.     //var seconds_left = (target_date - current_date - countdown_offset_ms) / 1000;
  1070. if(seconds_left <= 0){
  1071. clearInterval(refreshIntervalId);
  1072. // reload page
  1073. show_item('allpa_products');
  1074. }
  1075.  
  1076.     // do some time calculations
  1077.     days = parseInt(seconds_left / 86400);
  1078.     seconds_left = seconds_left % 86400;
  1079.      
  1080.     hours = parseInt(seconds_left / 3600);
  1081.     seconds_left = seconds_left % 3600;
  1082.      
  1083.     minutes = parseInt(seconds_left / 60);
  1084.     seconds = parseInt(seconds_left % 60);
  1085. if(minutes < 10){
  1086. minutes = '0' + minutes;
  1087. }
  1088. if(seconds < 10){
  1089. seconds = '0' + seconds;
  1090. }
  1091.     // format countdown string + set tag value
  1092. countdown.text(['還剩 ', minutes, ' : ', seconds, ' 有效'].join(''));
  1093. }, 1000);
  1094. $("#show_product_name").text(jdata.product_name);
  1095. $("#show_product_desc").text(jdata.product_desc);
  1096. $("#show_remarks").text(jdata.remarks);
  1097. $("#show_amt").text([jdata.amt, ' 元'].join(''));
  1098. $("#show_order_no").text(jdata.order_no);
  1099. show_item("payment_data");
  1100. }else{
  1101. alertify_error([
  1102. "購買失敗..<br/><br/>",
  1103. "[代碼] : ", jdata.result_code, "<br/>",
  1104. "[訊息] : ", jdata.result_msg, "<br/>"
  1105. ].join(''));
  1106. }
  1107. },
  1108. error: function (xhr, ajaxOptions, thrownError)
  1109. {
  1110. alertify_error("發生未知錯誤, 請稍候再試");
  1111. }
  1112. })
  1113. }
  1114. // 管理員加值清單
  1115. function get_allpa_admin_products(event)
  1116. {
  1117. event.preventDefault();
  1118. $.ajax
  1119. ({
  1120. url: "<?=APP_URL?>get_allpa_admin_products",
  1121. type: "post",
  1122. dataType:"text",
  1123. success: function(result)
  1124. {
  1125. if(!is_valid_result(result)){ return false; }
  1126. if(!is_json_result(result)){ return false; }
  1127. var jdata = JSON.parse(result);
  1128. // 清空
  1129. $("#product_data_tbody").html("");
  1130. if(jdata.length > 0){
  1131. for(key in jdata) {
  1132. var result = jdata[key];
  1133. $("#product_list>[data-tag=p_name]").text(result['product_name']);
  1134. $("#product_list>[data-tag=p_desc]").html(result['product_desc']);
  1135. $("#product_list>[data-tag=p_function]").html("<pre type='button' class='btn btn-default' onclick='do_purchase("+result['product_id']+")'> 購 買 </pre>");
  1136. $("<tr data-day='day'>"+$("#product_list").html()+"</tr>").appendTo("#product_data_tbody");
  1137. }
  1138. }else{
  1139. $("#product_list>[data-tag=p_name]").text("暫不提供, 敬請期待..");
  1140. $("#product_list>[data-tag=p_desc]").html("");
  1141. $("#product_list>[data-tag=p_function]").html("");
  1142. $("<tr data-day='day'>"+$("#product_list").html()+"</tr>").appendTo("#product_data_tbody");
  1143. }
  1144. show_item('allpa_admin_products');
  1145. },
  1146. error: function (xhr, ajaxOptions, thrownError)
  1147. {
  1148. alertify_error("發生未知錯誤, 請稍候再試");
  1149. }
  1150. })
  1151. }
  1152. // 查詢用戶
  1153. function do_check_user(event)
  1154. {
  1155. event.preventDefault();
  1156. if ($("#user_lpr").val() == "")
  1157. {
  1158. alertify_error("請填寫車號");
  1159. return false;
  1160. }
  1161. if(! $("#check_user_form").isValid()) return false;
  1162. $.ajax
  1163. ({
  1164. url: "<?=APP_URL?>get_allpa_info",
  1165. type: "post",
  1166. dataType:"text",
  1167. data:{
  1168. "user_lpr": $("#user_lpr").val()
  1169. },
  1170. success: function(result)
  1171. {
  1172. if(!is_valid_result(result)){ return false; }
  1173. if(!is_json_result(result)){ return false; }
  1174. var jdata = JSON.parse(result);
  1175. if(jdata.result_code == "OK")
  1176. {
  1177. user_allpa_info_handler(jdata);
  1178. }else{
  1179. alertify_error([
  1180. "查無資料..<br/><br/>",
  1181. "[代碼] : ", jdata.result_code, "<br/>",
  1182. "[訊息] : ", jdata.result_msg, "<br/>"
  1183. ].join(''));
  1184. }
  1185. },
  1186. error: function (xhr, ajaxOptions, thrownError)
  1187. {
  1188. alertify_error("發生未知錯誤, 請稍候再試");
  1189. }
  1190. })
  1191. }
  1192. // 歐Pa卡 - 繳費
  1193. function do_allpa_pay_bill(order_no)
  1194. {
  1195. $.ajax
  1196. ({
  1197. url: "<?=APP_URL?>allpa_pay_bill",
  1198. type: "post",
  1199. dataType:"text",
  1200. data:{
  1201. "order_no": order_no
  1202. },
  1203. success: function(result)
  1204. {
  1205. if(!is_valid_result(result)){ return false; }
  1206. if(!is_json_result(result)){ return false; }
  1207. var jdata = JSON.parse(result);
  1208. if(jdata.result_code == "OK")
  1209. {
  1210. user_allpa_info_handler(jdata);
  1211. }else{
  1212. alertify_error([
  1213. "處理失敗..<br/><br/>",
  1214. "[代碼] : ", jdata.result_code, "<br/>",
  1215. "[訊息] : ", jdata.result_msg, "<br/>"
  1216. ].join(''));
  1217. }
  1218. },
  1219. error: function (xhr, ajaxOptions, thrownError)
  1220. {
  1221. alertify_error("發生未知錯誤, 請稍候再試");
  1222. }
  1223. })
  1224. }
  1225. // user_allpa_info, 頁面回傳流程
  1226. function user_allpa_info_handler(jdata)
  1227. {
  1228. //console.log(jdata.result);
  1229. var allpa_current = jdata.result.allpa_current;
  1230. var allpa_invalid = jdata.result.allpa_invalid;
  1231. var allpa_other = jdata.result.allpa_other;
  1232. var bill_ready = jdata.result.bill_ready;
  1233. var bill_finished = jdata.result.bill_finished;
  1234. var allpa_user_bill_finished = jdata.result.allpa_user_bill_finished;
  1235. var allpa_user_bill_gg = jdata.result.allpa_user_bill_gg;
  1236. var allpa_user_bill_debt = jdata.result.allpa_user_bill_debt;
  1237. //console.log("allpa_current: " + allpa_current);
  1238. //console.log("allpa_other: " + allpa_other);
  1239. //console.log("bill_ready: " + bill_ready);
  1240. //console.log("bill_finished: " + bill_finished);
  1241. // 目前卡片資訊
  1242. if(allpa_current){
  1243. $("#show_info_lpr").text(allpa_current.lpr);
  1244. $("#show_info_barcode").text(allpa_current.barcode);
  1245. $("#show_info_balance").text(allpa_current.balance);
  1246. $("#show_info_bonus").text(allpa_current.bonus);
  1247. $("#user_current_allpa_info").show();
  1248. }else{
  1249. $("#user_current_allpa_info").hide();
  1250. }
  1251. // 無效的卡片資訊
  1252. if(allpa_invalid){
  1253. $("#show_invalid_card_status").text(allpa_invalid.card_status);
  1254. $("#show_invalid_lpr").text(allpa_invalid.lpr);
  1255. $("#show_invalid_barcode").text(allpa_invalid.barcode);
  1256. $("#show_invalid_balance").text(allpa_invalid.balance);
  1257. $("#show_invalid_bonus").text(allpa_invalid.bonus);
  1258. $("#user_invalid_allpa_info").show();
  1259. }else{
  1260. $("#user_invalid_allpa_info").hide();
  1261. }
  1262. // 卡片使用資訊
  1263. if(allpa_user_bill_finished || allpa_user_bill_gg || allpa_user_bill_debt){
  1264. $("#allpa_user_bill_data_tbody").html("");
  1265. for(key in allpa_user_bill_debt) {
  1266. var result = allpa_user_bill_debt[key];
  1267. var b_name = "尚未付款";
  1268. var b_desc = ['*時段 ', result['in_time'], '<br/>至 ', result['balance_time']].join('');
  1269. var b_amt = [result['amt'], ' 元'].join('');
  1270. $("#allpa_user_bill_list>[data-tag=b_name]").text(b_name);
  1271. $("#allpa_user_bill_list>[data-tag=b_desc]").html(b_desc);
  1272. $("#allpa_user_bill_list>[data-tag=b_amt]").text(b_amt);
  1273. $("#allpa_user_bill_list>[data-tag=b_function]").html("<pre type='button' class='btn btn-default' onclick='do_allpa_pay_bill("+result['order_no']+")'>繳 費</pre>");
  1274. $("<tr data-day='day' style='color: blue;'>"+$("#allpa_user_bill_list").html()+"</tr>").appendTo("#allpa_user_bill_data_tbody");
  1275. }
  1276. for(key in allpa_user_bill_gg) {
  1277. var result = allpa_user_bill_gg[key];
  1278. var b_name = "系統錯誤";
  1279. var b_desc = ['*時段 ', result['in_time'], '<br/>至 ', result['balance_time']].join('');
  1280. var b_amt = [result['amt'], ' 元'].join('');
  1281. $("#allpa_user_bill_list>[data-tag=b_name]").text(b_name);
  1282. $("#allpa_user_bill_list>[data-tag=b_desc]").html(b_desc);
  1283. $("#allpa_user_bill_list>[data-tag=b_amt]").text(b_amt);
  1284. $("#allpa_user_bill_list>[data-tag=b_function]").html("請通知管理員");
  1285. $("<tr data-day='day' style='color: red;'>"+$("#allpa_user_bill_list").html()+"</tr>").appendTo("#allpa_user_bill_data_tbody");
  1286. }
  1287. for(key in allpa_user_bill_finished) {
  1288. var result = allpa_user_bill_finished[key];
  1289. var b_name = "結帳完成";
  1290. var b_desc = ['*時段 ', result['in_time'], '<br/>至 ', result['balance_time']].join('');
  1291. var b_amt = [result['amt'], ' 元'].join('');
  1292. $("#allpa_user_bill_list>[data-tag=b_name]").text(b_name);
  1293. $("#allpa_user_bill_list>[data-tag=b_desc]").html(b_desc);
  1294. $("#allpa_user_bill_list>[data-tag=b_amt]").text(b_amt);
  1295. $("#allpa_user_bill_list>[data-tag=b_function]").html("已完成");
  1296. $("<tr data-day='day'>"+$("#allpa_user_bill_list").html()+"</tr>").appendTo("#allpa_user_bill_data_tbody");
  1297. }
  1298. $("#allpa_user_bill_info").show();
  1299. }else{
  1300. $("#allpa_user_bill_info").hide();
  1301. }
  1302. // 卡片購買資訊
  1303. if(bill_ready || bill_finished){
  1304. $("#bill_data_tbody").html("");
  1305. for(key in bill_ready) {
  1306. var result = bill_ready[key];
  1307. $("#bill_list>[data-tag=b_name]").text(result['product_name']);
  1308. $("#bill_list>[data-tag=b_desc]").html(result['product_desc']);
  1309. $("#bill_list>[data-tag=b_function]").html("<pre type='button' class='btn btn-default' onclick='do_activate("+result['order_no']+")'>啟 用</pre>");
  1310. $("<tr data-day='day'>"+$("#bill_list").html()+"</tr>").appendTo("#bill_data_tbody");
  1311. }
  1312. for(key in bill_finished) {
  1313. var result = bill_finished[key];
  1314. $("#bill_list>[data-tag=b_name]").text(result['product_name']);
  1315. $("#bill_list>[data-tag=b_desc]").html(result['product_desc']);
  1316. $("#bill_list>[data-tag=b_function]").html("已啟用");
  1317. $("<tr data-day='day'>"+$("#bill_list").html()+"</tr>").appendTo("#bill_data_tbody");
  1318. }
  1319. $("#user_bill_info").show();
  1320. }else{
  1321. $("#user_bill_info").hide();
  1322. }
  1323. show_item('user_allpa_info');
  1324. }
  1325. // 執行卡號綁定
  1326. /*
  1327. function do_register(event)
  1328. {
  1329. event.preventDefault();
  1330. if ($("#register_lpr").val() == "")
  1331. {
  1332. alertify_error("請填寫車號");
  1333. return false;
  1334. }
  1335. if ($("#register_barcode").val() == "")
  1336. {
  1337. alertify_error("請填寫卡號");
  1338. return false;
  1339. }
  1340. if(! $("#register_form").isValid()) return false;
  1341. $.ajax
  1342. ({
  1343. url: "<?=APP_URL?>register",
  1344. type: "post",
  1345. dataType:"text",
  1346. data:{
  1347. "register_lpr": $("#register_lpr").val(),
  1348. "register_barcode": $("#register_barcode").val()
  1349. },
  1350. success: function(result)
  1351. {
  1352. if(!is_valid_result(result)){ return false; }
  1353. if(!is_json_result(result)){ return false; }
  1354. var jdata = JSON.parse(result);
  1355. if(jdata.result_code == "OK")
  1356. {
  1357. alertify_success([
  1358. jdata.result_msg, "<br/><br/>",
  1359. "[歐Pa卡, 記名處理完成]", "<br/>",
  1360. "* 車牌號碼 : ", jdata.register_lpr, "<br/>",
  1361. "* 卡片號碼 : ", jdata.register_barcode, "<br/>"
  1362. ].join(''));
  1363. }else{
  1364. alertify_error([
  1365. "綁定失敗..<br/><br/>",
  1366. "[代碼] : ", jdata.result_code, "<br/>",
  1367. "[訊息] : ", jdata.result_msg, "<br/>"
  1368. ].join(''));
  1369. }
  1370. },
  1371. error: function (xhr, ajaxOptions, thrownError)
  1372. {
  1373. alertify_error("發生未知錯誤, 請稍候再試");
  1374. }
  1375. })
  1376. }
  1377. */
  1378. <?php /* 登出 */ ?>
  1379. function logout(event)
  1380. {
  1381. event.preventDefault();
  1382. $.ajax
  1383. ({
  1384. url: "<?=APP_URL?>user_logout",
  1385. success: function(jdata)
  1386. {
  1387. window.location = "<?=APP_URL?>admin";
  1388. }
  1389. });
  1390. }
  1391. $(document).ready(function()
  1392. {
  1393. <?php /* validate 設定start */ ?>
  1394. $.validate(
  1395. {
  1396. modules : 'security',
  1397. }
  1398. );
  1399. <?php /* validate 設定end */ ?>
  1400. // 如果畫面沒動作, 自動更新頁面
  1401. var reloadTimeMillis = 600000; // 每 10 min 自動重新載入頁面
  1402. var checkReloadTimeMillis = 10000; // 每 10 sec 判斷一次
  1403. // 如果畫面沒動作, 每10分鐘自動重新載入頁面
  1404. var aliveTime = moment();
  1405. $(document.body).bind("mousemove keypress", function(e) {
  1406. aliveTime = moment();
  1407. });
  1408. function refresh() {
  1409. if(moment() - aliveTime >= reloadTimeMillis)
  1410. window.location.reload(true);
  1411. else
  1412. setTimeout(refresh, checkReloadTimeMillis);
  1413. }
  1414. setTimeout(refresh, checkReloadTimeMillis);
  1415. });
  1416. </script>