zhp.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta
  7. http-equiv="Cache-Control"
  8. content="no-cache, no-store, must-revalidate"
  9. />
  10. <meta http-equiv="Pragma" content="no-cache" />
  11. <meta http-equiv="Expires" content="0" />
  12. <link
  13. rel="shortcut icon"
  14. href="https://www.baidu.com/favicon.ico"
  15. type="image/x-icon"
  16. />
  17. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  18. <title>排队叫号综合屏</title>
  19. </head>
  20. <body>
  21. <div class="container">
  22. <div class="header">
  23. <img src="./landscape/logo.png" />
  24. <span id="title"></span><span>—叫号信息综合显示屏</span>
  25. </div>
  26. <div class="content">
  27. <div class="con_left">
  28. <div class="list_box" id="first"></div>
  29. <div class="list_box" id="second"></div>
  30. <div class="lists_box" id="lists"></div>
  31. </div>
  32. <div class="con_right">
  33. <div class="con_right_title">扫码关注看排队省时省力又省心</div>
  34. <div class="con_right_code">
  35. <img src="./img/gzhCode.jpg" />
  36. </div>
  37. </div>
  38. </div>
  39. <div class="foolter">
  40. <div class="fool_left">
  41. <div class="time"><span id="time"></span></div>
  42. </div>
  43. <div class="fool_center">请留意叫号信息,过号请重新排队</div>
  44. <div class="fool_right" id="logo_text"></div>
  45. </div>
  46. </div>
  47. <div class="alert" id="alert"></div>
  48. </body>
  49. </html>
  50. <script>
  51. // 定义全局变量
  52. var url = window.location.search.slice(1).split("&");
  53. var dpi = 1920;
  54. if (url[2]) {
  55. dpi = url[2].slice(url[2].lastIndexOf("=") + 1);
  56. }
  57. var params = {
  58. zhpname: url[0].slice(url[0].lastIndexOf("=") + 1),
  59. sljgdm: url[1].slice(url[1].lastIndexOf("=") + 1),
  60. };
  61. // 接口地址
  62. var initUrl = "https://pdjh.shizhi.tv/machine/init/old/zhp";
  63. var pollingUrl = "https://pdjh.shizhi.tv/machine/init/old/split/getRedis";
  64. // dom 数据
  65. var firstData = new Object();
  66. var secondData = new Object();
  67. var codeList = new Array();
  68. // 闪烁延时器
  69. var flashTimer = null;
  70. // 闪烁定时器
  71. var flashingTimer = null;
  72. </script>
  73. <script>
  74. // 定义全局方法
  75. // 获取元素
  76. function $(id) {
  77. return document.getElementById(id);
  78. }
  79. // 创建元素
  80. function $create(ele) {
  81. return document.createElement(ele);
  82. }
  83. </script>
  84. <script>
  85. // 综合屏初始化信息
  86. function getInitData() {
  87. var xhr = new XMLHttpRequest();
  88. xhr.open("post", initUrl);
  89. xhr.setRequestHeader("Content-type", "application/json;charset=UTF-8");
  90. var form = JSON.stringify({
  91. userType: "综合屏",
  92. machineName: params.zhpname,
  93. sljgdm: params.sljgdm,
  94. });
  95. xhr.send(form);
  96. xhr.onreadystatechange = function () {
  97. if (xhr.readyState == 4 && xhr.status === 200) {
  98. var respose = JSON.parse(xhr.responseText) || {};
  99. if (respose.bsfwtmc) {
  100. // 处理响应结果
  101. initFormatter(respose);
  102. setTimeout(function () {
  103. getPolling();
  104. }, 800);
  105. } else {
  106. myAlert(respose.msg || "参数错误", 3000);
  107. setTimeout(function () {
  108. getInitData();
  109. }, 3000);
  110. }
  111. } else if (xhr.readyState == 4) {
  112. setTimeout(function () {
  113. getInitData();
  114. }, 800);
  115. }
  116. };
  117. }
  118. // 综合屏轮询信息
  119. function getPolling() {
  120. var xhr = new XMLHttpRequest();
  121. xhr.open("get", pollingUrl + "?machineName=" + params.zhpname);
  122. xhr.send();
  123. xhr.onreadystatechange = function () {
  124. if (xhr.readyState == 4 && xhr.status === 200) {
  125. var respose = JSON.parse(xhr.responseText) || {};
  126. // 处理响应结果
  127. pollingFormatter(respose);
  128. setTimeout(function () {
  129. getPolling();
  130. }, 800);
  131. } else if (xhr.readyState == 4) {
  132. setTimeout(function () {
  133. getPolling();
  134. }, 800);
  135. }
  136. };
  137. }
  138. </script>
  139. <script>
  140. // 设置屏幕缩放比例
  141. function setScreenSize() {
  142. var page = document.body;
  143. page.style.zoom = dpi / 1920;
  144. }
  145. // 弹框
  146. function myAlert(msg, dur) {
  147. var alert = $("alert");
  148. alert.style.display = "block";
  149. alert.innerHTML = msg;
  150. setTimeout(function () {
  151. alert.style.display = "none";
  152. }, dur);
  153. }
  154. // 获取时间
  155. function getTime() {
  156. var date = new Date();
  157. var h = date.getHours();
  158. var m = date.getMinutes();
  159. if (h < 10) {
  160. h = "0" + h;
  161. }
  162. if (m < 10) {
  163. m = "0" + m;
  164. }
  165. var time = h + ":" + m;
  166. $("time").innerHTML = time;
  167. setTimeout(function () {
  168. getTime();
  169. }, 1000);
  170. }
  171. // 处理初始化数据
  172. function initFormatter(data) {
  173. $("title").innerHTML = data.bsfwtjc;
  174. $("logo_text").innerHTML = data.dttsy;
  175. if (data.top) {
  176. firstData = data.top;
  177. }
  178. if (data.historyList) {
  179. for (var i = 0; i < data.historyList.length; i++) {
  180. var list = data.historyList[i];
  181. if (i == 0) {
  182. secondData = list;
  183. } else {
  184. codeList.push(list);
  185. }
  186. }
  187. }
  188. rendering();
  189. }
  190. // 处理轮询数据
  191. function pollingFormatter(data) {
  192. if (data.code == 0) {
  193. var listData = JSON.parse(data.msg);
  194. if (listData.zhpInit && listData.zhpInit.top) {
  195. codeList.unshift(secondData);
  196. if (codeList.length > 15) {
  197. codeList.pop();
  198. }
  199. secondData = firstData;
  200. firstData = listData.zhpInit.top;
  201. rendering();
  202. }
  203. }
  204. }
  205. // 创建元素
  206. function buildElemet() {
  207. // list
  208. var list = $create("div");
  209. list.className = "list";
  210. // label1
  211. var label1 = $create("div");
  212. label1.className = "label1";
  213. var label1_span = $create("span");
  214. label1_span.innerHTML = "请";
  215. label1.appendChild(label1_span);
  216. // label2
  217. var label2 = $create("div");
  218. label2.className = "label2";
  219. var label2_span = $create("span");
  220. var label2_div = $create("div");
  221. label2_div.className = "yy";
  222. // label3
  223. var label3 = $create("div");
  224. label3.className = "label3";
  225. var label3_span = $create("span");
  226. label3_span.innerHTML = "到";
  227. label3.appendChild(label3_span);
  228. // label4
  229. var label4 = $create("div");
  230. label4.className = "label4";
  231. var label4_span = $create("span");
  232. // label5
  233. var label5 = $create("div");
  234. label5.className = "label5";
  235. var label5_span = $create("span");
  236. label5_span.innerHTML = "窗口办理业务";
  237. label5.appendChild(label5_span);
  238. return {
  239. list: list,
  240. label1: label1,
  241. label1_span: label1_span,
  242. label2: label2,
  243. label2_span: label2_span,
  244. label2_div: label2_div,
  245. label3: label3,
  246. label3_span: label3_span,
  247. label4: label4,
  248. label4_span: label4_span,
  249. label5: label5,
  250. label5_span: label5_span,
  251. };
  252. }
  253. // 组合dom
  254. function margeDom(data) {
  255. if (data.phhm) {
  256. var elements = buildElemet();
  257. elements.label2_span.innerHTML = data.phhm + "号";
  258. elements.label2.appendChild(elements.label2_span);
  259. if (data.phhm.toString()[0] == "Y") {
  260. elements.label2_div.innerHTML = "预约";
  261. elements.label2.appendChild(elements.label2_div);
  262. } else if (data.phhm.toString()[0] == "L") {
  263. elements.label2_div.innerHTML = "绿通";
  264. elements.label2.appendChild(elements.label2_div);
  265. }
  266. elements.label4_span.innerHTML = data.ckhm;
  267. elements.label4.appendChild(elements.label4_span);
  268. elements.list.appendChild(elements.label1);
  269. elements.list.appendChild(elements.label2);
  270. elements.list.appendChild(elements.label3);
  271. elements.list.appendChild(elements.label4);
  272. elements.list.appendChild(elements.label5);
  273. return elements.list;
  274. } else {
  275. return null;
  276. }
  277. }
  278. // 渲染dom
  279. function rendering() {
  280. var firstParent = $("first");
  281. firstParent.innerHTML = "";
  282. var firstEle = margeDom(firstData);
  283. if (firstEle) {
  284. firstParent.appendChild(firstEle);
  285. }
  286. var secondParent = $("second");
  287. secondParent.innerHTML = "";
  288. var secondEle = margeDom(secondData);
  289. if (secondEle) {
  290. secondParent.appendChild(secondEle);
  291. }
  292. var listEle = $("lists");
  293. listEle.innerHTML = "";
  294. for (var i = 0; i < codeList.length; i++) {
  295. var listData = codeList[i];
  296. var list_box = $create("div");
  297. list_box.className = "list_box";
  298. var listBoxEle = margeDom(listData);
  299. if (listBoxEle) {
  300. list_box.appendChild(listBoxEle);
  301. }
  302. listEle.appendChild(list_box);
  303. }
  304. startFlashing();
  305. }
  306. // 闪烁动画
  307. function startFlashing() {
  308. var firstEle = $("first");
  309. firstEle.classList.remove("flashing");
  310. clearTimeout(flashTimer);
  311. flashTimer = null;
  312. clearInterval(flashingTimer);
  313. flashingTimer = null;
  314. // 定时修改样式
  315. var staring = false;
  316. flashingTimer = setInterval(function () {
  317. if (staring) {
  318. firstEle.classList.remove("flashing");
  319. } else {
  320. firstEle.classList.add("flashing");
  321. }
  322. staring = !staring;
  323. }, 500);
  324. // 延时清除定时器等
  325. flashTimer = setTimeout(function () {
  326. clearInterval(flashingTimer);
  327. flashingTimer = null;
  328. clearTimeout(flashTimer);
  329. flashTimer = null;
  330. firstEle.classList.remove("flashing");
  331. }, 5000);
  332. }
  333. </script>
  334. <script>
  335. // 获取数据
  336. getInitData();
  337. // 获取时间
  338. getTime();
  339. setScreenSize();
  340. </script>
  341. <style>
  342. @font-face {
  343. font-family: "苹方简M";
  344. src: url("./PFM.OTF");
  345. }
  346. html,
  347. body {
  348. padding: 0;
  349. margin: 0;
  350. font-family: "苹方简M";
  351. }
  352. .container {
  353. width: 1920px;
  354. height: 1080px;
  355. background-image: url("./landscape/bg.png");
  356. }
  357. .header {
  358. width: 100%;
  359. height: 120px;
  360. line-height: 120px;
  361. text-align: center;
  362. font-size: 60px;
  363. color: #ffffff;
  364. }
  365. .header > img {
  366. position: relative;
  367. top: 7px;
  368. height: 60px;
  369. }
  370. .content {
  371. width: 100%;
  372. height: 850px;
  373. overflow: hidden;
  374. }
  375. .con_left,
  376. .con_right {
  377. float: left;
  378. overflow: hidden;
  379. }
  380. .con_left {
  381. margin-left: 30px;
  382. padding: 20px;
  383. width: 1460px;
  384. height: 100%;
  385. background: #fff;
  386. border-radius: 20px;
  387. box-shadow: 0px 3px 10px 1px #005273;
  388. box-sizing: border-box;
  389. }
  390. .lists_box {
  391. width: 100%;
  392. height: 486px;
  393. }
  394. .list_box {
  395. width: 100%;
  396. height: 160px;
  397. border-bottom: 2px dashed #938484;
  398. }
  399. .list {
  400. width: 100%;
  401. height: 160px;
  402. line-height: 160px;
  403. background: #ff5c21;
  404. transition: all 0.35s;
  405. }
  406. #first .list {
  407. border-radius: 20px 20px 0 0;
  408. }
  409. .flashing .list {
  410. background: #ffffff;
  411. }
  412. .lists_box .list {
  413. background: #ffffff;
  414. }
  415. .label1,
  416. .label2,
  417. .label3,
  418. .label4,
  419. .label5 {
  420. float: left;
  421. }
  422. .label1 {
  423. margin-left: 20px;
  424. width: 80px;
  425. font-size: 70px;
  426. color: #0067e4;
  427. }
  428. .label2 {
  429. padding-left: 20px;
  430. position: relative;
  431. width: 500px;
  432. text-align: left;
  433. font-size: 100px;
  434. color: #ffffff;
  435. font-weight: bold;
  436. letter-spacing: 5px;
  437. box-sizing: border-box;
  438. }
  439. .lists_box .label2 {
  440. color: #0067e4;
  441. }
  442. .flashing .label2,
  443. .flashing .label4 {
  444. color: #ff5c21;
  445. }
  446. .yy {
  447. padding: 15px 0;
  448. position: absolute;
  449. top: 30px;
  450. right: 0;
  451. width: 40px;
  452. height: 100px;
  453. border-radius: 20px;
  454. font-size: 25px;
  455. line-height: 35px;
  456. text-align: center;
  457. color: #ffffff;
  458. background: #22cc4d;
  459. box-sizing: border-box;
  460. font-weight: normal;
  461. letter-spacing: 0;
  462. }
  463. .lists_box .yy {
  464. color: #ffffff;
  465. background: #ff5500;
  466. }
  467. .label3 {
  468. width: 100px;
  469. text-align: center;
  470. font-size: 70px;
  471. color: #0067e4;
  472. }
  473. .label4 {
  474. width: 220px;
  475. text-align: center;
  476. font-size: 100px;
  477. color: #ffffff;
  478. font-weight: bold;
  479. letter-spacing: 5px;
  480. }
  481. .lists_box .label4 {
  482. color: #0067e4;
  483. }
  484. .label5 {
  485. width: 500px;
  486. text-align: center;
  487. font-size: 70px;
  488. color: #0067e4;
  489. }
  490. .con_right {
  491. margin-left: 15px;
  492. width: 400px;
  493. height: 100%;
  494. }
  495. .con_right_title {
  496. padding: 95px 0;
  497. width: 100%;
  498. height: 350px;
  499. line-height: 80px;
  500. color: #ffffff;
  501. letter-spacing: 1px;
  502. font-size: 55px;
  503. text-align: center;
  504. box-sizing: border-box;
  505. }
  506. .con_right_code {
  507. position: relative;
  508. width: 100%;
  509. height: 500px;
  510. background-image: url(./landscape/phones.png);
  511. background-size: 380px auto;
  512. background-repeat: no-repeat;
  513. background-position: center top;
  514. }
  515. .con_right_code > img {
  516. position: absolute;
  517. top: 110px;
  518. left: 89px;
  519. width: 225px;
  520. border-radius: 10px;
  521. }
  522. .foolter {
  523. width: 100%;
  524. height: 110px;
  525. background: #ffffff;
  526. }
  527. .fool_left,
  528. .fool_center,
  529. .fool_right {
  530. float: left;
  531. height: 110px;
  532. }
  533. .fool_left,
  534. .fool_right {
  535. width: 600px;
  536. }
  537. .time {
  538. width: 300px;
  539. height: 110px;
  540. line-height: 110px;
  541. background: #169dff;
  542. border-radius: 0px 62px 62px 0px;
  543. font-size: 60px;
  544. font-weight: 500;
  545. color: #ffffff;
  546. text-align: center;
  547. letter-spacing: 2px;
  548. }
  549. .fool_center {
  550. width: 720px;
  551. line-height: 110px;
  552. text-align: center;
  553. font-size: 40px;
  554. font-weight: 400;
  555. color: #000000;
  556. }
  557. .fool_right {
  558. padding-right: 45px;
  559. line-height: 110px;
  560. text-align: right;
  561. font-size: 40px;
  562. font-weight: 400;
  563. color: #016cb3;
  564. letter-spacing: 2px;
  565. box-sizing: border-box;
  566. }
  567. .alert {
  568. display: none;
  569. padding: 0 20px;
  570. position: fixed;
  571. top: 20px;
  572. left: 460px;
  573. width: 1000px;
  574. height: 80px;
  575. line-height: 80px;
  576. font-size: 35px;
  577. color: #e00000;
  578. white-space: nowrap;
  579. overflow: hidden;
  580. text-overflow: ellipsis;
  581. text-align: center;
  582. background: #ffcccc;
  583. border: 2px solid #e00000;
  584. border-radius: 10px;
  585. box-sizing: border-box;
  586. }
  587. </style>