預約系統 IOS / Android Windows

index2.html 43KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681
  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  5. <meta name="description" content="">
  6. <meta name="author" content="">
  7. <script src="js/teacrypt.js" type="text/javascript"></script>
  8. <script src="js/mqttws31.min.js" type="text/javascript"></script>
  9. <script src="js/jquery-3.5.1.min.js"></script>
  10. <title>預約 QR Code</title>
  11. <link href="css/bootstrap.min.css" rel="stylesheet" type="text/css" />
  12. <script type="text/javascript">
  13. window.addEventListener( "pageshow",function ( event ) {
  14. var historyTraversal = event.persisted ||
  15. ( typeof window.performance != "undefined" &&
  16. window.performance.navigation.type === 2 );
  17. if ( historyTraversal ) {
  18. // Handle page restore.
  19. window.location.reload();
  20. }
  21. });
  22. </script>
  23. </head>
  24. <body class="text-center" onload="init()" >
  25. <div class="card" style="width: 480px ;box-shadow: 0px 0px 1px 1px rgba(0,0,0,0.1);margin: 21px auto;background-color:#FFFFFF;">
  26. <table style="width: 100%">
  27. <tbody>
  28. <tr>
  29. <td style="width: 33.3%"><button type="button" style="border-color: #dcdcdc;border-width: 0px;border-color: #dcdcdc;border-width: 0px;margin: 0px 0px 0px 0px;color:#787878;font-family: Roboto_Light; font-size: 24px;width: 110px; height: 60px; background-color: transparent;width:100%;" onclick="btback()"><img src="image/arrowiosback.png" width="40" height="40" style=" margin: -8px 0px 0px -120px ;" alt=""/></button></td><td style="width: 33.3%"><button type="button" style="border-color: #dcdcdc;border-width: 1px;border-color: #dcdcdc;border-width: 1px;margin: 0px 0px 0px 0px;color:#787878;font-family: Roboto_Light; font-size: 24px;width: 110px; height: 60px; background-color: #cce8fc;width:100%;" hidden onclick="pcbtnSaveTmp()"'+
  30. '>複製</button> </td><td style="width: 33.3%"><button type="button" style="border-color: #dcdcdc;border-width: 1px;border-color: #dcdcdc;border-width: 1px;margin: 0px 0px 0px 0px;color:#FFFFFF;font-family: Roboto_Light; font-size: 24px;width: 110px; height: 60px; background-color: #64c800;width:100%;" hidden onclick="pcbtnSaveqr()">下載</button></td>
  31. </tbody>
  32. </table>
  33. <div style="margin: 1px 0 0px 1px;background-color:#FFFFFF;" >
  34. <button id="btn100" style="margin: 2px 0px 0px 0px;outline:none;line-height:40px;vertical-align: middle; text-align: left;width:60%;border:0px white none;background-color:#FFFFFF;font-family:Roboto_Light;font-size:24px;color:#646464;height:46px;"></button>
  35. <button id="btn200" style="margin: 0px 5px 0px 0px;box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);outline:none;line-height:40px;vertical-align: middle; text-align: center;width:35%;border:0px white none;background-color:#e6e6e6;font-family:Roboto_Light;font-size:24px;color:#646464;height:42px;" onclick="Addpay6()">全部</button>
  36. </div>
  37. <div style="text-align:center">
  38. <!-- <h1 class="h3 mb-3 font-weight-normal">預收貨款</h1> -->
  39. <!-- <form class="form-signin" id="senddocument"> -->
  40. <div style="width: 100%;">
  41. <button id="addneworder" style="border-color: #dcdcdc;border-width: 1px;width: 95%;
  42. height: 56px;
  43. margin: 10px 0px 10px 0px ;
  44. padding: 11px 0 22px;
  45. border-radius: 3px;
  46. font-family:Roboto_Light;font-size:24px;color:#646464;
  47. background-color: #e6e6e6;" onclick="Addpay5()" disabled>
  48. 新增預約 <img src="image/addorder.png" width="40" height="40" style=" margin: -8px 0px 0px 10px ;" alt=""/></button></div>
  49. <div id="doorlist" >
  50. </div>
  51. </div>
  52. </div>
  53. <div id="output" style="display:none">
  54. <h2>Output</h2>
  55. </div>
  56. <div id="output2" style="display:none">
  57. <br>
  58. <h2>無資料</h2>
  59. </div>
  60. <script type="text/javascript">
  61. var message345 ;
  62. var message467;
  63. var isconn=false;
  64. var paytype='0';
  65. function btback()
  66. {
  67. document.location = "index1.html??ID="+kkid+"&SubID="+SubID+"&CID="+CID+"&PW="+PW+"&TYPE=PC&SN="+SN+"&MQTT="+vmqtt;
  68. }
  69. function Addpay6()
  70. {
  71. switch (paytype) {
  72. case '0': //all to t
  73. //alert(paytype);
  74. document.getElementById("btn200").innerHTML ='週期';
  75. document.getElementById("btn200").style.backgroundColor ="rgb(223,247,198)"
  76. paytype='1';
  77. doorlist.innerHTML ='';
  78. try
  79. {
  80. for (i=0;i<keylist.length;i++)
  81. {
  82. var vobk=keylist[i];
  83. var vttovt = vobk.TimeStamp;
  84. vttovt=vttovt.replace('_',' ');
  85. vttovt=vttovt.replace(',','~');
  86. vttovt=vttovt.replace('_',' ');
  87. var vdddt = vttovt.split('~')[1];
  88. vdddt=vdddt.replace('/','-');
  89. vdddt=vdddt.replace('/','-');
  90. vdddt=vdddt.replace(' ','T');
  91. vdddt='20'+vdddt+':00'
  92. //alert(vdddt);
  93. let date1 = new Date();
  94. //let date2 = new Date(2022, 08, 03, 11, 45, 55);
  95. //let date2 = new Date( Date.parse(vdddt));
  96. //let date2 = Date.parse("2019-01-01T12:30:00")
  97. let date2 = Date.parse(vdddt);
  98. //alert(Date.parse(date1)+','+date2);
  99. //alert(date1<date2);
  100. if (date1<date2)
  101. {
  102. if (vobk.Type=='2')
  103. {
  104. var vcy = vobk.Cycle.split(',');
  105. var hpix = 56;
  106. //var hpix = 66;
  107. var cytxt='';
  108. let days=[];
  109. if (vcy[0]=='0000000')
  110. {
  111. }else
  112. {
  113. hpix=hpix+34;
  114. if (vcy[0].substring(0,1)=='1')
  115. days.push('日');
  116. if (vcy[0].substring(1,2)=='1')
  117. days.push('一');
  118. if (vcy[0].substring(2,3)=='1')
  119. days.push('二');
  120. if (vcy[0].substring(3,4)=='1')
  121. days.push('三');
  122. if (vcy[0].substring(4,5)=='1')
  123. days.push('四');
  124. if (vcy[0].substring(5,6)=='1')
  125. days.push('五');
  126. if (vcy[0].substring(6,7)=='1')
  127. days.push('六');
  128. vcy[1]=vcy[1].substr(0,2)+':'+vcy[1].substr(2,2);
  129. vcy[2]=vcy[2].substr(0,2)+':'+vcy[2].substr(2,2);
  130. cytxt=cytxt+'<br>1.'+vcy[1]+'~'+vcy[2]+'&nbsp'+'&nbsp'+days.join(',');
  131. }
  132. days=[];
  133. if (vcy[3]=='0000000')
  134. {
  135. }else
  136. {
  137. hpix=hpix+34;
  138. if (vcy[3].substring(0,1)=='1')
  139. days.push('日');
  140. if (vcy[3].substring(1,2)=='1')
  141. days.push('一');
  142. if (vcy[3].substring(2,3)=='1')
  143. days.push('二');
  144. if (vcy[3].substring(3,4)=='1')
  145. days.push('三');
  146. if (vcy[3].substring(4,5)=='1')
  147. days.push('四');
  148. if (vcy[3].substring(5,6)=='1')
  149. days.push('五');
  150. if (vcy[3].substring(6,7)=='1')
  151. days.push('六');
  152. vcy[4]=vcy[4].substr(0,2)+':'+vcy[4].substr(2,2);
  153. vcy[5]=vcy[5].substr(0,2)+':'+vcy[5].substr(2,2);
  154. cytxt=cytxt+'<br>2.'+vcy[4]+'~'+vcy[5]+'&nbsp'+'&nbsp'+days.join(',');
  155. }
  156. days=[];
  157. if (vcy[6]=='0000000')
  158. {
  159. }else
  160. {
  161. hpix=hpix+34;
  162. if (vcy[6].substring(0,1)=='1')
  163. days.push('日');
  164. if (vcy[6].substring(1,2)=='1')
  165. days.push('一');
  166. if (vcy[6].substring(2,3)=='1')
  167. days.push('二');
  168. if (vcy[6].substring(3,4)=='1')
  169. days.push('三');
  170. if (vcy[6].substring(4,5)=='1')
  171. days.push('四');
  172. if (vcy[6].substring(5,6)=='1')
  173. days.push('五');
  174. if (vcy[6].substring(6,7)=='1')
  175. days.push('六');
  176. vcy[7]=vcy[7].substr(0,2)+':'+vcy[7].substr(2,2);
  177. vcy[8]=vcy[8].substr(0,2)+':'+vcy[8].substr(2,2);
  178. cytxt=cytxt+'<br>3.'+vcy[7]+'~'+vcy[8]+'&nbsp'+'&nbsp'+days.join(',');
  179. }
  180. doorlist.innerHTML =doorlist.innerHTML+'<div style="width: 100%;text-align:center"><label style="text-align:left;box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);;width: 95%;height: '+hpix+'px;margin: 5px 0px 10px 0px ;padding: 6px 6px 5px;font-family:Roboto_Light;font-size:16px;color:#000000;background-color: #ffffff;" onclick="btnitemback2(\''+vobk.IndexID+'\')">'+vttovt+'<br>'+vobk.Title+cytxt+'</label></div>';
  181. }
  182. }
  183. }
  184. }catch(e)
  185. {
  186. alert(e);
  187. }
  188. break;
  189. case '1': //t to cycle
  190. //alert(paytype);
  191. document.getElementById("btn200").innerHTML ='時段';
  192. document.getElementById("btn200").style.backgroundColor ="rgb(255,255,255)"
  193. paytype='2'; //cycle to all
  194. doorlist.innerHTML ='';
  195. try
  196. {
  197. for (i=0;i<keylist.length;i++)
  198. {
  199. var vobk=keylist[i];
  200. var vttovt = vobk.TimeStamp;
  201. vttovt=vttovt.replace('_',' ');
  202. vttovt=vttovt.replace(',','~');
  203. vttovt=vttovt.replace('_',' ');
  204. var vdddt = vttovt.split('~')[1];
  205. vdddt=vdddt.replace('/','-');
  206. vdddt=vdddt.replace('/','-');
  207. vdddt=vdddt.replace(' ','T');
  208. vdddt='20'+vdddt+':00'
  209. //alert(vdddt);
  210. let date1 = new Date();
  211. //let date2 = new Date(2022, 08, 03, 11, 45, 55);
  212. //let date2 = new Date( Date.parse(vdddt));
  213. //let date2 = Date.parse("2019-01-01T12:30:00")
  214. let date2 = Date.parse(vdddt);
  215. //alert(Date.parse(date1)+','+date2);
  216. //alert(date1<date2);
  217. if (date1<date2)
  218. {
  219. if (vobk.Type=='1')
  220. {
  221. doorlist.innerHTML =doorlist.innerHTML+'<div style="width: 100%;text-align:center"><label style="text-align:left;box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);;width: 95%;height: 66px;margin: 5px 0px 10px 0px ;padding: 6px 6px 5px;font-family:Roboto_Light;font-size:16px;color:#000000;background-color: #ffffff;" onclick="btnitemback2(\''+vobk.IndexID+'\')">'+vttovt+'<br>'+vobk.Title+'</label></div>';
  222. }
  223. }
  224. }
  225. }catch(e)
  226. {
  227. alert(e);
  228. }
  229. break;
  230. case '2':
  231. //alert(paytype);
  232. document.getElementById("btn200").innerHTML ='全部';
  233. document.getElementById("btn200").style.backgroundColor ="rgb(230,230,230)"
  234. paytype='0';
  235. doorlist.innerHTML ='';
  236. try
  237. {
  238. for (i=0;i<keylist.length;i++)
  239. {
  240. var vobk=keylist[i];
  241. var vttovt = vobk.TimeStamp;
  242. vttovt=vttovt.replace('_',' ');
  243. vttovt=vttovt.replace(',','~');
  244. vttovt=vttovt.replace('_',' ');
  245. var vdddt = vttovt.split('~')[1];
  246. vdddt=vdddt.replace('/','-');
  247. vdddt=vdddt.replace('/','-');
  248. vdddt=vdddt.replace(' ','T');
  249. vdddt='20'+vdddt+':00'
  250. //alert(vdddt);
  251. let date1 = new Date();
  252. //let date2 = new Date(2022, 08, 03, 11, 45, 55);
  253. //let date2 = new Date( Date.parse(vdddt));
  254. //let date2 = Date.parse("2019-01-01T12:30:00")
  255. let date2 = Date.parse(vdddt);
  256. //alert(Date.parse(date1)+','+date2);
  257. //alert(date1<date2);
  258. if (date1<date2)
  259. {
  260. if (vobk.Type=='1')
  261. {
  262. doorlist.innerHTML = doorlist.innerHTML+'<div style="width: 100%;text-align:center"><label style="text-align:left;box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);;width: 95%;height: 66px;margin: 5px 0px 10px 0px ;padding: 6px 6px 5px;font-family:Roboto_Light;font-size:16px;color:#000000;background-color: #ffffff;" onclick="btnitemback2(\''+vobk.IndexID+'\')">'+vttovt+'<br>'+vobk.Title+'</label></div>';
  263. }
  264. if (vobk.Type=='2')
  265. {
  266. var vcy = vobk.Cycle.split(',');
  267. var hpix = 56;
  268. //var hpix = 66;
  269. var cytxt='';
  270. let days=[];
  271. if (vcy[0]=='0000000')
  272. {
  273. }else
  274. {
  275. hpix=hpix+34;
  276. if (vcy[0].substring(0,1)=='1')
  277. days.push('日');
  278. if (vcy[0].substring(1,2)=='1')
  279. days.push('一');
  280. if (vcy[0].substring(2,3)=='1')
  281. days.push('二');
  282. if (vcy[0].substring(3,4)=='1')
  283. days.push('三');
  284. if (vcy[0].substring(4,5)=='1')
  285. days.push('四');
  286. if (vcy[0].substring(5,6)=='1')
  287. days.push('五');
  288. if (vcy[0].substring(6,7)=='1')
  289. days.push('六');
  290. vcy[1]=vcy[1].substring(0,2)+':'+vcy[1].substring(2,4);
  291. vcy[2]=vcy[2].substring(0,2)+':'+vcy[2].substring(2,4);
  292. cytxt=cytxt+'<br>1.'+vcy[1]+'~'+vcy[2]+'&nbsp'+'&nbsp'+days.join(',');
  293. }
  294. days=[];
  295. if (vcy[3]=='0000000')
  296. {
  297. }else
  298. {
  299. hpix=hpix+34;
  300. if (vcy[3].substring(0,1)=='1')
  301. days.push('日');
  302. if (vcy[3].substring(1,2)=='1')
  303. days.push('一');
  304. if (vcy[3].substring(2,3)=='1')
  305. days.push('二');
  306. if (vcy[3].substring(3,4)=='1')
  307. days.push('三');
  308. if (vcy[3].substring(4,5)=='1')
  309. days.push('四');
  310. if (vcy[3].substring(5,6)=='1')
  311. days.push('五');
  312. if (vcy[3].substring(6,7)=='1')
  313. days.push('六');
  314. vcy[4]=vcy[4].substring(0,2)+':'+vcy[4].substring(2,4);
  315. vcy[5]=vcy[5].substring(0,2)+':'+vcy[5].substring(2,4);
  316. cytxt=cytxt+'<br>2.'+vcy[4]+'~'+vcy[5]+'&nbsp'+'&nbsp'+days.join(',');
  317. }
  318. days=[];
  319. if (vcy[6]=='0000000')
  320. {
  321. }else
  322. {
  323. hpix=hpix+34;
  324. if (vcy[6].substring(0,1)=='1')
  325. days.push('日');
  326. if (vcy[6].substring(1,2)=='1')
  327. days.push('一');
  328. if (vcy[6].substring(2,3)=='1')
  329. days.push('二');
  330. if (vcy[6].substring(3,4)=='1')
  331. days.push('三');
  332. if (vcy[6].substring(4,5)=='1')
  333. days.push('四');
  334. if (vcy[6].substring(5,6)=='1')
  335. days.push('五');
  336. if (vcy[6].substring(6,7)=='1')
  337. days.push('六');
  338. vcy[7]=vcy[7].substring(0,2)+':'+vcy[7].substring(2,4);
  339. vcy[8]=vcy[8].substring(0,2)+':'+vcy[8].substring(2,4);
  340. cytxt=cytxt+'<br>3.'+vcy[7]+'~'+vcy[8]+'&nbsp'+'&nbsp'+days.join(',');
  341. }
  342. doorlist.innerHTML =doorlist.innerHTML+'<div style="width: 100%;text-align:center"><label style="text-align:left;box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);;width: 95%;height: '+hpix+'px;margin: 5px 0px 10px 0px ;padding: 6px 6px 5px;font-family:Roboto_Light;font-size:16px;color:#000000;background-color: #ffffff;" onclick="btnitemback2(\''+vobk.IndexID+'\')">'+vttovt+'<br>'+vobk.Title+cytxt+'</label></div>';
  343. }
  344. }
  345. }
  346. }catch(e)
  347. {
  348. alert(e);
  349. }
  350. break;
  351. }
  352. // alert(paytype);
  353. }
  354. function Addpay5()
  355. {
  356. var vvvi='';
  357. var isf = false;
  358. //alert(itnos.join(','));
  359. for (i=0;i<50;i++)
  360. {
  361. if (itnos.includes(i.toString()))
  362. {
  363. //alert(i+"in");
  364. }
  365. else
  366. {
  367. if (isf)
  368. {
  369. }else
  370. {
  371. //alert(i+'no');
  372. isf=true;
  373. vvvi=i.toString();
  374. //alert(vvvi);
  375. }
  376. }
  377. }
  378. //alert(vvvi);
  379. //return;
  380. //alert('5');
  381. if (vvvi.length==0)
  382. {
  383. alert('預約數量已滿,請刪除其它預約後重新新增!');
  384. return;
  385. }
  386. else
  387. {
  388. //alter(Id);
  389. // alter(kkid);
  390. // document.location = "index3.html?idx="+vvvi+"&tt="+"&cy="+"&name="+kname+"&st="+"&et="+"&tp=1"+"&cid="+kkid+"&CID="+CID+"&ID="+ID+"&PW="+PW+"&TYPE="+TYPE+"&SN="+SN+"&MQTT="+vmqtt+"&SubID="+SubID;
  391. document.location = "index3.html?idx="+vvvi+"&tt="+"&qrcd=&cy="+"&name="+kname+"&st="+"&et="+"&tp=1"+"&CID="+CID+"&ID="+kkid+"&PW="+PW+"&TYPE="+TYPE+"&SN="+SN+"&MQTT="+vmqtt+"&SubID="+SubID;
  392. }
  393. }
  394. function btnitemback2(i)
  395. {
  396. try
  397. {
  398. // alert(i);
  399. //alert(keylist.length);
  400. var vobk='';
  401. //jm123
  402. for (ij=0;ij<keylist.length;ij++)
  403. {
  404. if (keylist[ij].IndexID==i)
  405. {
  406. //alert(keylist[ij].IndexID);
  407. vobk=keylist[ij];
  408. }
  409. }
  410. // alert(vobk);
  411. var vttovt = vobk.TimeStamp;
  412. //vttovt=vttovt.replace('_',' ');
  413. //vttovt=vttovt.replace(',','~');
  414. //vttovt=vttovt.replace('_',' ');
  415. vst = vttovt.split(',')[0];
  416. vet = vttovt.split(',')[1];
  417. //alert(vst);
  418. //alert(vet);
  419. var type = vobk.Type;
  420. var cy=vobk.Cycle;
  421. var vvqrcd = vobk.CardID;
  422. vvqrcd=vvqrcd.replaceAll('=','-');
  423. cy=cy.replace('(null)','');
  424. var ttt = vobk.Title;
  425. ttt=ttt.replace('(null)','');
  426. //alert(ID);
  427. //alert(kkid);
  428. document.location = "index3.html?idx="+vobk.IndexID+"&qrcd="+vvqrcd+"&tt="+ttt+"&cy="+cy+"&name="+kname+"&st="+vst+"&et="+vet+"&tp="+type+"&CID="+CID+"&ID="+kkid+"&PW="+PW+"&TYPE="+TYPE+"&SN="+SN+"&MQTT="+vmqtt+"&SubID="+SubID;;
  429. }catch(e)
  430. {
  431. alert(e);
  432. }
  433. }
  434. function getKeylist()
  435. {
  436. var vt=new Date().format("yyyy/MM/dd_HH:mm:ss")
  437. //alert(vt);
  438. //alert(kkid);
  439. // var edata ="{\"action\":\"mqttqueryRemoteKey\",\"data\":{\"Command\":\"UserID=35503000&IndexID=1&ORDER=T&PassWord=CMM87krWqj8Ltt00\",\"SerialNo\":\"Reserve8869990002301\",\"TimeStamp\":\""+vt+"\",\"Token\":\"Gigatech23634857\"}}";
  440. var edata ="{\"action\":\"mqttqueryRemoteKey\",\"data\":{\"Command\":\"UserID="+kkid+"&IndexID=*&ORDER=T&PassWord="+PW+"\",\"SerialNo\":\"Reserve"+CID+"1-"+SubID+"\",\"TimeStamp\":\""+vt+"\",\"Token\":\"Gigatech23634857\"}}";
  441. var jsonString = "{\"action\":\"encode\", \"serial\":\"001\",\"data\":"+edata+"}";
  442. vsn='001';
  443. updateOutput(jsonString);
  444. if (TYPE=='IOS')
  445. {
  446. window.webkit.messageHandlers.WebToApp.postMessage(jsonString);
  447. }
  448. if (TYPE=='ANDROID')
  449. {
  450. webSocket.send(jsonString);
  451. }
  452. if (TYPE=='PC')
  453. {
  454. selfendecode(edata);
  455. }
  456. }
  457. </script>
  458. <script type="text/javascript">
  459. var CID = '';
  460. var ID = '';
  461. var PW = '';
  462. var TYPE = '';
  463. var client;
  464. var myclientid='';
  465. var callist = '';
  466. var kkid='';
  467. var kname='';
  468. var keylist='';
  469. let itnos=[];
  470. var isget = false;
  471. var vmqtt='';
  472. var SN='';
  473. var vsn='';
  474. var SubID='';
  475. var isget2=false;
  476. function init()
  477. {
  478. try
  479. {
  480. kkid= getUrlParameter('KID');
  481. kname= getUrlParameter('name');
  482. CID = getUrlParameter('CID');
  483. ID = getUrlParameter('ID');
  484. PW= getUrlParameter('PW');
  485. TYPE= getUrlParameter('TYPE');
  486. SN = getUrlParameter('SN');
  487. vmqtt = getUrlParameter('MQTT');
  488. SubID = getUrlParameter('SubID');
  489. //alert(kname);
  490. document.getElementById("btn100").innerHTML =kname;
  491. // alert( 'xx'+document.getElementById("btn100").innerHTML );
  492. updateOutput('init');
  493. /*
  494. CID = getUrlParameter('CID');
  495. ID = getUrlParameter('ID');
  496. PW= getUrlParameter('PW');
  497. TYPE= getUrlParameter('TYPE');
  498. */
  499. //CID = '886999000230';
  500. //ID = '00000000';
  501. //PW= 'CMM87krWqj8Ltt00';
  502. //TYPE='IOS';
  503. updateOutput('CID='+CID);
  504. updateOutput('ID='+ID);
  505. updateOutput('PW='+PW);
  506. updateOutput('TYPE='+TYPE);
  507. if (TYPE=='ANDROID')
  508. {
  509. connect();
  510. }
  511. if (TYPE=='IOS')
  512. {
  513. var vivi = 0;
  514. var intervalID = setInterval(() => {
  515. if (isget)
  516. {
  517. // break;
  518. }
  519. else
  520. {
  521. if (vivi>4)
  522. {
  523. clearInterval(intervalID);
  524. alert('連線異常');
  525. }
  526. else
  527. {
  528. vivi++;
  529. getKeylist() ;
  530. }
  531. }
  532. }, 400);
  533. }
  534. if (TYPE=='PC')
  535. {
  536. var vivi = 0;
  537. var intervalID = setInterval(() => {
  538. if (isget)
  539. {
  540. // break;
  541. }
  542. else
  543. {
  544. if (vivi>4)
  545. {
  546. clearInterval(intervalID);
  547. alert('連線異常');
  548. }
  549. else
  550. {
  551. vivi++;
  552. getKeylist() ;
  553. }
  554. }
  555. }, 400);
  556. }
  557. //myclientid="Giga"+CID+"1-"+ parseInt(Math.random() * 100000000, 10);
  558. myclientid="GigaPC"+CID+"1-"+SubID;
  559. client = new Paho.MQTT.Client(vmqtt, Number(8083), myclientid);
  560. client.onMessageArrived = onMessageArrived;
  561. client.onConnectionLost = onConnectionLost;
  562. //client.connect( {onSuccess: onConnect,timeout: 3});
  563. client.connect( {onSuccess: onConnect, onFailure : onFailedConnect,timeout: 3,keepAliveInterval: 35});
  564. }catch(e)
  565. {
  566. alert(e);
  567. }
  568. }
  569. function onConnectionLost(message)
  570. {
  571. alert('連線失敗或重複登入,將返回登入畫面');
  572. document.location = "index.html?TYPE=PC&ID=00000000";
  573. // client.connect( {onSuccess: onConnect, onFailure : onFailedConnect});
  574. }
  575. function onMessageArrived(message)
  576. {
  577. //alert(message.destinationName);
  578. //alert(message.payloadString);
  579. // output2.innerHTML += "<br/>" + message.payloadString;
  580. var errda = message.payloadString;
  581. if (errda.startsWith('modify'))
  582. {
  583. var kkdd = errda.split(',');
  584. if (kkdd[3]==kname)
  585. {
  586. //alert('same');
  587. if (kkdd[2]!=SubID)
  588. {
  589. isget=false;
  590. var vivi = 0;
  591. var intervalID = setInterval(() => {
  592. if (isget)
  593. {
  594. // break;
  595. }
  596. else
  597. {
  598. if (vivi>4)
  599. {
  600. clearInterval(intervalID);
  601. alert('連線異常');
  602. }
  603. else
  604. {
  605. vivi++;
  606. getKeylist() ;
  607. }
  608. // vii++;
  609. }
  610. }, 400);
  611. }
  612. }
  613. }
  614. else
  615. {
  616. isget2=true;
  617. var vobj = JSON.parse( errda);
  618. var jsonString = "{\"action\":\"decode\", \"serial\":\"002\",\"data\":\""+vobj.data+"\"}";
  619. updateOutput('----------------------------------------------');
  620. updateOutput(jsonString);
  621. vsn='002';
  622. /// "WebToApp". 為我們和前端開發人員的約定
  623. if (TYPE=='IOS')
  624. {
  625. window.webkit.messageHandlers.WebToApp.postMessage(jsonString);
  626. }
  627. if (TYPE=='ANDROID')
  628. {
  629. webSocket.send(jsonString);
  630. }
  631. if (TYPE=='PC')
  632. {
  633. selfendecode(vobj.data);
  634. }
  635. }
  636. }
  637. function onFailedConnect()
  638. {
  639. //alert('連線異常');
  640. }
  641. function onConnect()
  642. {
  643. isconn=true;
  644. client.subscribe('Reserve'+CID+'1-'+SubID);
  645. try
  646. {
  647. }
  648. catch(e)
  649. {
  650. alert(e);
  651. }
  652. //alert('c');
  653. }
  654. </script>
  655. <script type="text/javascript">
  656. var webSocket;
  657. var input = document.getElementById("input")
  658. var output = document.getElementById("output");
  659. var vdata="";
  660. var isok=true;
  661. var webSocket;
  662. //var wsUrl = "ws://localhost:2980/";
  663. //var wsUrl = "ws://192.168.0.25:2980/";
  664. var wsUrl = "ws://127.0.0.1:2980/";
  665. function connect() {
  666. // open the connection if one does not exist
  667. if (webSocket !== undefined
  668. && webSocket.readyState !== WebSocket.CLOSED) {
  669. return;
  670. }
  671. updateOutput("Trying to establish a WebSocket connection to <code>" + wsUrl + "</code>");
  672. // Create a websocket
  673. webSocket = new WebSocket(wsUrl);
  674. webSocket.onopen = function(event) {
  675. updateOutput("Connected!");
  676. // alert('');
  677. var vivi = 0;
  678. var intervalID = setInterval(() => {
  679. if (isget)
  680. {
  681. // break;
  682. }
  683. else
  684. {
  685. if (vivi>15)
  686. {
  687. clearInterval(intervalID);
  688. alert('連線異常');
  689. }
  690. else
  691. {
  692. vivi++;
  693. if (isconn)
  694. {
  695. getKeylist() ;
  696. }
  697. }
  698. // vii++;
  699. }
  700. }, 400);
  701. };
  702. webSocket.onmessage = function(event)
  703. {
  704. if (vsn=='002')
  705. {
  706. var ress = event.data;
  707. // ress=ress.replace(/[^a-z0-9\s]/gi, 'a').replace(/[_\s]/g, '-');
  708. // ress=ress+"}";
  709. // ress= ress.substring(1300,ress.length);
  710. //alert(event.data);
  711. // alert( event.data.trim().substring(1300,event.data.length) );
  712. doorlist.innerHTML ='';
  713. try
  714. {
  715. var vobj = JSON.parse(ress);
  716. keylist = vobj.data.data;
  717. var showkeylistl=0;
  718. //alert(keylist[0]);
  719. for (i=0;i<keylist.length;i++)
  720. {
  721. // alert(keylist[i].Cycle+' '+keylist[i].Type+' '+keylist[i].IndexID);
  722. var vobk=keylist[i];
  723. //alert(vobk.UserID);
  724. //alert(vobk.Type);
  725. var vttovt = vobk.TimeStamp;
  726. vttovt=vttovt.replace('_',' ');
  727. vttovt=vttovt.replace(',','~');
  728. vttovt=vttovt.replace('_',' ');
  729. var vdddt = vttovt.split('~')[1];
  730. vdddt=vdddt.replace('/','-');
  731. vdddt=vdddt.replace('/','-');
  732. vdddt=vdddt.replace(' ','T');
  733. vdddt='20'+vdddt+':00'
  734. //alert(vdddt);
  735. let date1 = new Date();
  736. //let date2 = new Date(2022, 08, 03, 11, 45, 55);
  737. //let date2 = new Date( Date.parse(vdddt));
  738. //let date2 = Date.parse("2019-01-01T12:30:00")
  739. let date2 = Date.parse(vdddt);
  740. //alert(Date.parse(date1)+','+date2);
  741. //alert(date1<date2);
  742. if (date1<date2)
  743. {
  744. //alert(vttovt);
  745. //alert(vobk.IndexID);
  746. itnos.push(vobk.IndexID);
  747. var ttt = vobk.Title;
  748. ttt=ttt.replace('(null)','');
  749. //alert(vobk.Type);
  750. if (vobk.Type=='1')
  751. {
  752. //alert(vobk.Type);
  753. //doorlist.innerHTML =doorlist.innerHTML+'<div style="margin: 10px 35px 0px -14px;"><button id="doorsin'+i+'" style="line-height:28px;vertical-align: middle; text-align: left;width:80%;border:0px white none;background-color:white;font-family:Roboto_Light;font-size:24px;outline:none;color:#646464;height:28px;" onclick="btnitemback2(\''+i+'\')">'+tttxt+'</button></div><br>';
  754. //doorlist.innerHTML =doorlist.innerHTML+'<div style="width: 100%;text-align:center"><label style="text-align:left;box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);;width: 95%;height: 56px;margin: 5px 0px 10px 0px ;padding: 6px 6px 5px;font-family:Roboto_Light;font-size:16px;color:#000000;background-color: #ffffff;" onclick="btnitemback2(\''+i+'\')">'+vttovt+'<br>'+ttt+'</label></div>';
  755. doorlist.innerHTML =doorlist.innerHTML+'<div style="width: 100%;text-align:center"><label style="text-align:left;box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);;width: 95%;height: 66px;margin: 5px 0px 10px 0px ;padding: 6px 6px 5px;font-family:Roboto_Light;font-size:16px;color:#000000;background-color: #ffffff;" onclick="btnitemback2(\''+vobk.IndexID+'\')">'+vttovt+'<br>'+ttt+'</label></div>';
  756. showkeylistl++;
  757. }
  758. if (vobk.Type=='2')
  759. {
  760. //alert(vobk.Cycle);
  761. var vcy = vobk.Cycle.split(',');
  762. var hpix = 56;
  763. //var hpix = 66;
  764. var cytxt='';
  765. let days=[];
  766. if (vcy[0]=='0000000')
  767. {
  768. }else
  769. {
  770. hpix=hpix+34;
  771. if (vcy[0].substring(0,1)=='1')
  772. days.push('日');
  773. if (vcy[0].substring(1,2)=='1')
  774. days.push('一');
  775. if (vcy[0].substring(2,3)=='1')
  776. days.push('二');
  777. if (vcy[0].substring(3,4)=='1')
  778. days.push('三');
  779. if (vcy[0].substring(4,5)=='1')
  780. days.push('四');
  781. if (vcy[0].substring(5,6)=='1')
  782. days.push('五');
  783. if (vcy[0].substring(6,7)=='1')
  784. days.push('六');
  785. vcy[1]=vcy[1].substring(0,2)+':'+vcy[1].substring(2,4);
  786. vcy[2]=vcy[2].substring(0,2)+':'+vcy[2].substring(2,4);
  787. cytxt=cytxt+'<br>1.'+vcy[1]+'~'+vcy[2]+'&nbsp'+'&nbsp'+days.join(',');
  788. }
  789. days=[];
  790. if (vcy[3]=='0000000')
  791. {
  792. }else
  793. {
  794. hpix=hpix+34;
  795. if (vcy[3].substring(0,1)=='1')
  796. days.push('日');
  797. if (vcy[3].substring(1,2)=='1')
  798. days.push('一');
  799. if (vcy[3].substring(2,3)=='1')
  800. days.push('二');
  801. if (vcy[3].substring(3,4)=='1')
  802. days.push('三');
  803. if (vcy[3].substring(4,5)=='1')
  804. days.push('四');
  805. if (vcy[3].substring(5,6)=='1')
  806. days.push('五');
  807. if (vcy[3].substring(6,7)=='1')
  808. days.push('六');
  809. vcy[4]=vcy[4].substring(0,2)+':'+vcy[4].substring(2,4);
  810. vcy[5]=vcy[5].substring(0,2)+':'+vcy[5].substring(2,4);
  811. cytxt=cytxt+'<br>2.'+vcy[4]+'~'+vcy[5]+'&nbsp'+'&nbsp'+days.join(',');
  812. }
  813. days=[];
  814. if (vcy[6]=='0000000')
  815. {
  816. }else
  817. {
  818. hpix=hpix+34;
  819. if (vcy[6].substring(0,1)=='1')
  820. days.push('日');
  821. if (vcy[6].substring(1,2)=='1')
  822. days.push('一');
  823. if (vcy[6].substring(2,3)=='1')
  824. days.push('二');
  825. if (vcy[6].substring(3,4)=='1')
  826. days.push('三');
  827. if (vcy[6].substring(4,5)=='1')
  828. days.push('四');
  829. if (vcy[6].substring(5,6)=='1')
  830. days.push('五');
  831. if (vcy[6].substring(6,7)=='1')
  832. days.push('六');
  833. vcy[7]=vcy[7].substring(0,2)+':'+vcy[7].substring(2,4);
  834. vcy[8]=vcy[8].substring(0,2)+':'+vcy[8].substring(2,4);
  835. cytxt=cytxt+'<br>3.'+vcy[7]+'~'+vcy[8]+'&nbsp'+'&nbsp'+days.join(',');
  836. }
  837. //doorlist.innerHTML =doorlist.innerHTML+'<div style="width: 100%;text-align:center"><label style="text-align:left;box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);;width: 95%;height: '+hpix+'px;margin: 5px 0px 10px 0px ;padding: 6px 6px 5px;font-family:Roboto_Light;font-size:16px;color:#000000;background-color: #ffffff;" onclick="btnitemback2(\''+i+'\')">'+vttovt+'<br>'+ttt+cytxt+'</label></div>';
  838. doorlist.innerHTML =doorlist.innerHTML+'<div style="width: 100%;text-align:center"><label style="text-align:left;box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);;width: 95%;height: '+hpix+'px;margin: 5px 0px 10px 0px ;padding: 6px 6px 5px;font-family:Roboto_Light;font-size:16px;color:#000000;background-color: #ffffff;" onclick="btnitemback2(\''+vobk.IndexID+'\')">'+vttovt+'<br>'+ttt+cytxt+'</label></div>';
  839. showkeylistl++;
  840. }
  841. }
  842. }
  843. // var sevobj = JSON.parse( vobj);
  844. // alert( sevobj.data);
  845. }catch(e)
  846. {
  847. alert(e);
  848. }
  849. var addneworder = document.getElementById("addneworder");
  850. addneworder.disabled = false;
  851. if (showkeylistl==0)
  852. {
  853. output2.style='';
  854. }
  855. }
  856. if (vsn=='001')
  857. {
  858. try
  859. {
  860. // alert( event.data );
  861. isget=true;
  862. var ress = event.data;
  863. var vobj = JSON.parse( ress);
  864. vdata = "{\"encrypt\":\"1\",\"data\":\""+vobj.data+"\"}";
  865. }catch(e)
  866. {
  867. alert(e);
  868. }
  869. updateOutput('---------------------------');
  870. updateOutput(vdata);
  871. isget2=false;
  872. var payload =vdata;
  873. try{
  874. message467 = new Paho.MQTT.Message(payload);
  875. message467.destinationName = SN ;
  876. message467.qos = 2;
  877. message467.retained = false;
  878. var vivi = 0;
  879. var intervalID = setInterval(() => {
  880. if (isget2)
  881. {
  882. // break;
  883. }
  884. else
  885. {
  886. if (vivi>4)
  887. {
  888. clearInterval(intervalID);
  889. alert('連線異常');
  890. }
  891. else
  892. {
  893. vivi++;
  894. client.send(message467);
  895. }
  896. // vii++;
  897. }
  898. }, 400);
  899. }catch(e)
  900. {
  901. alert(e);
  902. }
  903. }
  904. updateOutput('------------xxx------------');
  905. updateOutput(event.data);
  906. };
  907. webSocket.onclose = function(event) {
  908. updateOutput("Connection Closed");
  909. //sendBtn.disabled = true;
  910. };
  911. }
  912. function AppToWeb(message) {
  913. // updateOutput(message);
  914. var showkeylistl=0;
  915. if (vsn=='002')
  916. {
  917. var ress = message;
  918. isget2=true;
  919. doorlist.innerHTML ='';
  920. try
  921. {
  922. var vobj = JSON.parse(ress);
  923. keylist = vobj.data.data;
  924. for (i=0;i<keylist.length;i++)
  925. {
  926. var vobk=keylist[i];
  927. var vttovt = vobk.TimeStamp;
  928. vttovt=vttovt.replace('_',' ');
  929. vttovt=vttovt.replace(',','~');
  930. vttovt=vttovt.replace('_',' ');
  931. var vdddt = vttovt.split('~')[1];
  932. vdddt=vdddt.replace('/','-');
  933. vdddt=vdddt.replace('/','-');
  934. vdddt=vdddt.replace(' ','T');
  935. vdddt='20'+vdddt+':00'
  936. //alert(vdddt);
  937. let date1 = new Date();
  938. //let date2 = new Date(2022, 08, 03, 11, 45, 55);
  939. //let date2 = new Date( Date.parse(vdddt));
  940. //let date2 = Date.parse("2019-01-01T12:30:00")
  941. let date2 = Date.parse(vdddt)
  942. //alert(date1);
  943. //alert(date2);
  944. //alert(date1>date2);
  945. if (date1<date2)
  946. {
  947. itnos.push(vobk.IndexID);
  948. var ttt = vobk.Title;
  949. ttt=ttt.replace('(null)','');
  950. //alert(vobk.Type);
  951. if (vobk.Type=='1')
  952. {
  953. //alert(vobk.Type);
  954. //doorlist.innerHTML =doorlist.innerHTML+'<div style="margin: 10px 35px 0px -14px;"><button id="doorsin'+i+'" style="line-height:28px;vertical-align: middle; text-align: left;width:80%;border:0px white none;background-color:white;font-family:Roboto_Light;font-size:24px;outline:none;color:#646464;height:28px;" onclick="btnitemback2(\''+i+'\')">'+tttxt+'</button></div><br>';
  955. //doorlist.innerHTML =doorlist.innerHTML+'<div style="width: 100%;text-align:center"><label style="text-align:left;box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);;width: 95%;height: 56px;margin: 5px 0px 10px 0px ;padding: 6px 6px 5px;font-family:Roboto_Light;font-size:16px;color:#000000;background-color: #ffffff;" onclick="btnitemback2(\''+i+'\')">'+vttovt+'<br>'+ttt+'</label></div>';
  956. doorlist.innerHTML =doorlist.innerHTML+'<div style="width: 100%;text-align:center"><label style="text-align:left;box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);;width: 95%;height: 56px;margin: 5px 0px 10px 0px ;padding: 6px 6px 5px;font-family:Roboto_Light;font-size:16px;color:#000000;background-color: #ffffff;" onclick="btnitemback2(\''+vobk.IndexID+'\')">'+vttovt+'<br>'+ttt+'</label></div>';
  957. showkeylistl++;
  958. }
  959. if (vobk.Type=='2')
  960. {
  961. //alert(vobk.Cycle);
  962. var vcy = vobk.Cycle.split(',');
  963. var hpix = 66;
  964. // var hpix = 66;
  965. var cytxt='';
  966. let days=[];
  967. if (vcy[0]=='0000000')
  968. {
  969. }else
  970. {
  971. hpix=hpix+38;
  972. if (vcy[0].substring(0,1)=='1')
  973. days.push('日');
  974. if (vcy[0].substring(1,2)=='1')
  975. days.push('一');
  976. if (vcy[0].substring(2,3)=='1')
  977. days.push('二');
  978. if (vcy[0].substring(3,4)=='1')
  979. days.push('三');
  980. if (vcy[0].substring(4,5)=='1')
  981. days.push('四');
  982. if (vcy[0].substring(5,6)=='1')
  983. days.push('五');
  984. if (vcy[0].substring(6,7)=='1')
  985. days.push('六');
  986. vcy[1]=vcy[1].substring(0,2)+':'+vcy[1].substring(2,4);
  987. vcy[2]=vcy[2].substring(0,2)+':'+vcy[2].substring(2,4);
  988. cytxt=cytxt+'<br>1.'+vcy[1]+'~'+vcy[2]+'&nbsp'+'&nbsp'+days.join(',');
  989. }
  990. days=[];
  991. if (vcy[3]=='0000000')
  992. {
  993. }else
  994. {
  995. hpix=hpix+38;
  996. if (vcy[3].substring(0,1)=='1')
  997. days.push('日');
  998. if (vcy[3].substring(1,2)=='1')
  999. days.push('一');
  1000. if (vcy[3].substring(2,3)=='1')
  1001. days.push('二');
  1002. if (vcy[3].substring(3,4)=='1')
  1003. days.push('三');
  1004. if (vcy[3].substring(4,5)=='1')
  1005. days.push('四');
  1006. if (vcy[3].substring(5,6)=='1')
  1007. days.push('五');
  1008. if (vcy[3].substring(6,7)=='1')
  1009. days.push('六');
  1010. vcy[4]=vcy[4].substring(0,2)+':'+vcy[4].substring(2,4);
  1011. vcy[5]=vcy[5].substring(0,2)+':'+vcy[5].substring(2,4);
  1012. cytxt=cytxt+'<br>2.'+vcy[4]+'~'+vcy[5]+'&nbsp'+'&nbsp'+days.join(',');
  1013. }
  1014. days=[];
  1015. if (vcy[6]=='0000000')
  1016. {
  1017. }else
  1018. {
  1019. hpix=hpix+38;
  1020. if (vcy[6].substring(0,1)=='1')
  1021. days.push('日');
  1022. if (vcy[6].substring(1,2)=='1')
  1023. days.push('一');
  1024. if (vcy[6].substring(2,3)=='1')
  1025. days.push('二');
  1026. if (vcy[6].substring(3,4)=='1')
  1027. days.push('三');
  1028. if (vcy[6].substring(4,5)=='1')
  1029. days.push('四');
  1030. if (vcy[6].substring(5,6)=='1')
  1031. days.push('五');
  1032. if (vcy[6].substring(6,7)=='1')
  1033. days.push('六');
  1034. vcy[7]=vcy[7].substring(0,2)+':'+vcy[7].substring(2,4);
  1035. vcy[8]=vcy[8].substring(0,2)+':'+vcy[8].substring(2,4);
  1036. cytxt=cytxt+'<br>3.'+vcy[7]+'~'+vcy[8]+'&nbsp'+'&nbsp'+days.join(',');
  1037. }
  1038. //doorlist.innerHTML =doorlist.innerHTML+'<div style="width: 100%;text-align:center"><label style="text-align:left;box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);;width: 95%;height: '+hpix+'px;margin: 5px 0px 10px 0px ;padding: 6px 6px 5px;font-family:Roboto_Light;font-size:16px;color:#000000;background-color: #ffffff;" onclick="btnitemback2(\''+i+'\')">'+vttovt+'<br>'+ttt+cytxt+'</label></div>';
  1039. doorlist.innerHTML =doorlist.innerHTML+'<div style="width: 100%;text-align:center"><label style="text-align:left;box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);;width: 95%;height: '+hpix+'px;margin: 5px 0px 10px 0px ;padding: 6px 6px 5px;font-family:Roboto_Light;font-size:16px;color:#000000;background-color: #ffffff;" onclick="btnitemback2(\''+vobk.IndexID+'\')">'+vttovt+'<br>'+ttt+cytxt+'</label></div>';
  1040. showkeylistl++;
  1041. }
  1042. }
  1043. }
  1044. // var sevobj = JSON.parse( vobj);
  1045. // alert( sevobj.data);
  1046. var addneworder = document.getElementById("addneworder");
  1047. addneworder.disabled = false;
  1048. if (showkeylistl==0)
  1049. {
  1050. output2.style='';
  1051. }
  1052. }catch(e)
  1053. {
  1054. alert(e);
  1055. }
  1056. }
  1057. if (vsn=='001')
  1058. {
  1059. try
  1060. {
  1061. isget=true;
  1062. var ress = message;
  1063. isget2=false;
  1064. var vobj = JSON.parse( ress);
  1065. vdata = "{\"encrypt\":\"1\",\"data\":\""+vobj.data+"\"}";
  1066. var payload =vdata;
  1067. message345 = new Paho.MQTT.Message(payload);
  1068. message345.destinationName = SN ;
  1069. message345.qos = 2;
  1070. message345.retained = false;
  1071. var vivi = 0;
  1072. var intervalID = setInterval(() => {
  1073. if (isget2)
  1074. {
  1075. // break;
  1076. }
  1077. else
  1078. {
  1079. if (vivi>4)
  1080. {
  1081. clearInterval(intervalID);
  1082. alert('連線異常');
  1083. }
  1084. else
  1085. {
  1086. vivi++;
  1087. client.send(message345);
  1088. }
  1089. // vii++;
  1090. }
  1091. }, 400);
  1092. }catch(e)
  1093. {
  1094. alert(e);
  1095. }
  1096. }
  1097. return "Got it"
  1098. }
  1099. //start
  1100. function selfendecode(message) {
  1101. // updateOutput(message);
  1102. var showkeylistl=0;
  1103. if (vsn=='002')
  1104. {
  1105. message = teaDecrypt(message,'75$095huOQ77kKv!');
  1106. //console.log(message);
  1107. var ress = message;
  1108. isget2=true;
  1109. doorlist.innerHTML ='';
  1110. try
  1111. {
  1112. var vobj = JSON.parse(ress);
  1113. // keylist = vobj.data.data;
  1114. keylist = vobj.data;
  1115. // alert(keylist.length);
  1116. for (i=0;i<keylist.length;i++)
  1117. {
  1118. var vobk=keylist[i];
  1119. var vttovt = vobk.TimeStamp;
  1120. vttovt=vttovt.replace('_',' ');
  1121. vttovt=vttovt.replace(',','~');
  1122. vttovt=vttovt.replace('_',' ');
  1123. var vdddt = vttovt.split('~')[1];
  1124. vdddt=vdddt.replace('/','-');
  1125. vdddt=vdddt.replace('/','-');
  1126. vdddt=vdddt.replace(' ','T');
  1127. vdddt='20'+vdddt+':00'
  1128. //alert(vdddt);
  1129. let date1 = new Date();
  1130. //let date2 = new Date(2022, 08, 03, 11, 45, 55);
  1131. //let date2 = new Date( Date.parse(vdddt));
  1132. //let date2 = Date.parse("2019-01-01T12:30:00")
  1133. let date2 = Date.parse(vdddt)
  1134. //alert(date1);
  1135. //alert(date2);
  1136. //alert(date1>date2);
  1137. if (date1<date2)
  1138. {
  1139. itnos.push(vobk.IndexID);
  1140. var ttt = vobk.Title;
  1141. ttt=ttt.replace('(null)','');
  1142. //alert(vobk.Type);
  1143. if (vobk.Type=='1')
  1144. {
  1145. //alert(vobk.Type);
  1146. //doorlist.innerHTML =doorlist.innerHTML+'<div style="margin: 10px 35px 0px -14px;"><button id="doorsin'+i+'" style="line-height:28px;vertical-align: middle; text-align: left;width:80%;border:0px white none;background-color:white;font-family:Roboto_Light;font-size:24px;outline:none;color:#646464;height:28px;" onclick="btnitemback2(\''+i+'\')">'+tttxt+'</button></div><br>';
  1147. //doorlist.innerHTML =doorlist.innerHTML+'<div style="width: 100%;text-align:center"><label style="text-align:left;box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);;width: 95%;height: 56px;margin: 5px 0px 10px 0px ;padding: 6px 6px 5px;font-family:Roboto_Light;font-size:16px;color:#000000;background-color: #ffffff;" onclick="btnitemback2(\''+i+'\')">'+vttovt+'<br>'+ttt+'</label></div>';
  1148. doorlist.innerHTML =doorlist.innerHTML+'<div style="width: 100%;text-align:center"><label style="text-align:left;box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);;width: 95%;height: 56px;margin: 5px 0px 10px 0px ;padding: 6px 6px 5px;font-family:Roboto_Light;font-size:16px;color:#000000;background-color: #ffffff;" onclick="btnitemback2(\''+vobk.IndexID+'\')">'+vttovt+'<br>'+ttt+'</label></div>';
  1149. showkeylistl++;
  1150. }
  1151. if (vobk.Type=='2')
  1152. {
  1153. //alert(vobk.Cycle);
  1154. var vcy = vobk.Cycle.split(',');
  1155. var hpix = 66;
  1156. // var hpix = 66;
  1157. var cytxt='';
  1158. let days=[];
  1159. if (vcy[0]=='0000000')
  1160. {
  1161. }else
  1162. {
  1163. hpix=hpix+38;
  1164. if (vcy[0].substring(0,1)=='1')
  1165. days.push('日');
  1166. if (vcy[0].substring(1,2)=='1')
  1167. days.push('一');
  1168. if (vcy[0].substring(2,3)=='1')
  1169. days.push('二');
  1170. if (vcy[0].substring(3,4)=='1')
  1171. days.push('三');
  1172. if (vcy[0].substring(4,5)=='1')
  1173. days.push('四');
  1174. if (vcy[0].substring(5,6)=='1')
  1175. days.push('五');
  1176. if (vcy[0].substring(6,7)=='1')
  1177. days.push('六');
  1178. vcy[1]=vcy[1].substring(0,2)+':'+vcy[1].substring(2,4);
  1179. vcy[2]=vcy[2].substring(0,2)+':'+vcy[2].substring(2,4);
  1180. cytxt=cytxt+'<br>1.'+vcy[1]+'~'+vcy[2]+'&nbsp'+'&nbsp'+days.join(',');
  1181. }
  1182. days=[];
  1183. if (vcy[3]=='0000000')
  1184. {
  1185. }else
  1186. {
  1187. hpix=hpix+38;
  1188. if (vcy[3].substring(0,1)=='1')
  1189. days.push('日');
  1190. if (vcy[3].substring(1,2)=='1')
  1191. days.push('一');
  1192. if (vcy[3].substring(2,3)=='1')
  1193. days.push('二');
  1194. if (vcy[3].substring(3,4)=='1')
  1195. days.push('三');
  1196. if (vcy[3].substring(4,5)=='1')
  1197. days.push('四');
  1198. if (vcy[3].substring(5,6)=='1')
  1199. days.push('五');
  1200. if (vcy[3].substring(6,7)=='1')
  1201. days.push('六');
  1202. vcy[4]=vcy[4].substring(0,2)+':'+vcy[4].substring(2,4);
  1203. vcy[5]=vcy[5].substring(0,2)+':'+vcy[5].substring(2,4);
  1204. cytxt=cytxt+'<br>2.'+vcy[4]+'~'+vcy[5]+'&nbsp'+'&nbsp'+days.join(',');
  1205. }
  1206. days=[];
  1207. if (vcy[6]=='0000000')
  1208. {
  1209. }else
  1210. {
  1211. hpix=hpix+38;
  1212. if (vcy[6].substring(0,1)=='1')
  1213. days.push('日');
  1214. if (vcy[6].substring(1,2)=='1')
  1215. days.push('一');
  1216. if (vcy[6].substring(2,3)=='1')
  1217. days.push('二');
  1218. if (vcy[6].substring(3,4)=='1')
  1219. days.push('三');
  1220. if (vcy[6].substring(4,5)=='1')
  1221. days.push('四');
  1222. if (vcy[6].substring(5,6)=='1')
  1223. days.push('五');
  1224. if (vcy[6].substring(6,7)=='1')
  1225. days.push('六');
  1226. vcy[7]=vcy[7].substring(0,2)+':'+vcy[7].substring(2,4);
  1227. vcy[8]=vcy[8].substring(0,2)+':'+vcy[8].substring(2,4);
  1228. cytxt=cytxt+'<br>3.'+vcy[7]+'~'+vcy[8]+'&nbsp'+'&nbsp'+days.join(',');
  1229. }
  1230. //doorlist.innerHTML =doorlist.innerHTML+'<div style="width: 100%;text-align:center"><label style="text-align:left;box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);;width: 95%;height: '+hpix+'px;margin: 5px 0px 10px 0px ;padding: 6px 6px 5px;font-family:Roboto_Light;font-size:16px;color:#000000;background-color: #ffffff;" onclick="btnitemback2(\''+i+'\')">'+vttovt+'<br>'+ttt+cytxt+'</label></div>';
  1231. doorlist.innerHTML =doorlist.innerHTML+'<div style="width: 100%;text-align:center"><label style="text-align:left;box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);;width: 95%;height: '+hpix+'px;margin: 5px 0px 10px 0px ;padding: 6px 6px 5px;font-family:Roboto_Light;font-size:16px;color:#000000;background-color: #ffffff;" onclick="btnitemback2(\''+vobk.IndexID+'\')">'+vttovt+'<br>'+ttt+cytxt+'</label></div>';
  1232. showkeylistl++;
  1233. }
  1234. }
  1235. }
  1236. // var sevobj = JSON.parse( vobj);
  1237. // alert( sevobj.data);
  1238. var addneworder = document.getElementById("addneworder");
  1239. addneworder.disabled = false;
  1240. if (showkeylistl==0)
  1241. {
  1242. output2.style='';
  1243. }
  1244. }catch(e)
  1245. {
  1246. alert(e);
  1247. }
  1248. }
  1249. if (vsn=='001')
  1250. {
  1251. try
  1252. {
  1253. message = teaEncrypt(message,'75$095huOQ77kKv!');
  1254. isget=true;
  1255. var ress = message;
  1256. isget2=false;
  1257. // var vobj = JSON.parse( ress);
  1258. // vdata = "{\"encrypt\":\"1\",\"data\":\""+vobj.data+"\"}";
  1259. vdata = "{\"encrypt\":\"1\",\"data\":\""+message+"\"}";
  1260. var payload =vdata;
  1261. message345 = new Paho.MQTT.Message(payload);
  1262. message345.destinationName = SN ;
  1263. message345.qos = 2;
  1264. message345.retained = false;
  1265. var vivi = 0;
  1266. var intervalID = setInterval(() => {
  1267. if (isget2)
  1268. {
  1269. // break;
  1270. }
  1271. else
  1272. {
  1273. if (vivi>4)
  1274. {
  1275. clearInterval(intervalID);
  1276. alert('連線異常');
  1277. }
  1278. else
  1279. {
  1280. vivi++;
  1281. client.send(message345);
  1282. }
  1283. // vii++;
  1284. }
  1285. }, 400);
  1286. }catch(e)
  1287. {
  1288. alert(e);
  1289. }
  1290. }
  1291. }
  1292. //end
  1293. function endode() {
  1294. var text = input.value;
  1295. var jsonString = "{\"action\":\"encode\", \"serial\":\"001\",\"data\":\""+text+"\"}";
  1296. updateOutput(jsonString);
  1297. /// "WebToApp". 為我們和前端開發人員的約定
  1298. if (TYPE=='IOS')
  1299. {
  1300. window.webkit.messageHandlers.WebToApp.postMessage(jsonString);
  1301. }
  1302. if (TYPE=='ANDROID')
  1303. {
  1304. webSocket.send(jsonString);
  1305. }
  1306. }
  1307. function decode() {
  1308. var text = input.value;
  1309. var jsonString = "{\"action\":\"decode\", \"serial\":\"001\",\"data\":\""+text+"\"}";
  1310. updateOutput(jsonString);
  1311. /// "WebToApp". 為我們和前端開發人員的約定
  1312. if (TYPE=='IOS')
  1313. {
  1314. window.webkit.messageHandlers.AppToWeb.postMessage(jsonString);
  1315. }
  1316. if (TYPE=='ANDROID')
  1317. {
  1318. webSocket.send(jsonString);
  1319. }
  1320. }
  1321. function updateOutput(text) {
  1322. output.innerHTML += "<br/>" + text;
  1323. }
  1324. </script>
  1325. <script type="text/javascript">
  1326. </script>
  1327. <script>
  1328. var getUrlParameter = function getUrlParameter(sParam) {
  1329. var sPageURL = decodeURIComponent(window.location.search.substring(1)),
  1330. sURLVariables = sPageURL.split('&'),
  1331. sParameterName,
  1332. i;
  1333. for (i = 0; i < sURLVariables.length; i++) {
  1334. sParameterName = sURLVariables[i].split('=');
  1335. if (sParameterName[0] === sParam) {
  1336. return sParameterName[1] === undefined ? true : sParameterName[1];
  1337. }
  1338. }
  1339. };
  1340. Date.prototype.format = function (format) {
  1341. //eg:format="yyyy-MM-dd hh:mm:ss";
  1342. if (!format) {
  1343. format = "yyyy-MM-dd hh:mm:ss";
  1344. }
  1345. var o = {
  1346. "M+": this.getMonth() + 1, // month
  1347. "d+": this.getDate(), // day
  1348. "H+": this.getHours(), // hour
  1349. "h+": this.getHours(), // hour
  1350. "m+": this.getMinutes(), // minute
  1351. "s+": this.getSeconds(), // second
  1352. "q+": Math.floor((this.getMonth() + 3) / 3), // quarter
  1353. "S": this.getMilliseconds()
  1354. };
  1355. if (/(y+)/.test(format)) {
  1356. format = format.replace(RegExp.$1, (this.getFullYear() + "")
  1357. .substr(4 - RegExp.$1.length));
  1358. }
  1359. for (var k in o) {
  1360. if (new RegExp("(" + k + ")").test(format)) {
  1361. format = format.replace(RegExp.$1, RegExp.$1.length == 1
  1362. ? o[k]
  1363. : ("00" + o[k]).substr(("" + o[k]).length));
  1364. }
  1365. }
  1366. return format;
  1367. };
  1368. </script>
  1369. <br>
  1370. </body>
  1371. </html>