qjtMobile.html 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta name=”SiteName” content=”重庆市南岸区人民政府”>
  7. <meta name="SiteDomain" content="http://www.cqna.gov.cn" />
  8. <meta name="SiteIDCode" content="5001080014">
  9. <meta name="ColumnName" content="政务全景通">
  10. <meta name="ColumnDescription" content="政务全景通" />
  11. <meta name="ColumnKeywords" content="政务全景通" />
  12. <meta name="ColumnType" content="政务全景通" />
  13. <title>政务全景通-重庆市南岸区人民政府网</title>
  14. <script src="https://www.cqna.gov.cn/syygapi/naxsb/3ddemo/three.js"></script>
  15. <script src="https://www.cqna.gov.cn/syygapi/naxsb/3ddemo/Detector.js"></script>
  16. <script src="https://www.cqna.gov.cn/syygapi/naxsb/3ddemo/examples/js/libs/stats.min.js"></script>
  17. <script src="https://www.cqna.gov.cn/syygapi/naxsb/3ddemo/examples/js/controls/OrbitControls.js"></script>
  18. <script src="https://www.cqna.gov.cn/syygapi/naxsb/3ddemo/examples/js/loaders/GLTFLoader.js"></script>
  19. <script src="https://www.cqna.gov.cn/syygapi/naxsb/3ddemo/examples/js/loaders/DRACOLoader.js"></script>
  20. <script src="https://www.cqna.gov.cn/syygapi/naxsb/3ddemo/examples/js/renderers/CSS3DRenderer.js"></script>
  21. <script src="https://www.cqna.gov.cn/syygapi/naxsb/3ddemo/examples/js/renderers/CSS2DRenderer.js"></script>
  22. <!-- 引入 Vue -->
  23. <script src="https://www.cqna.gov.cn/syygapi/naxsb/js/vue.min.js"></script>
  24. <!-- 引入样式 -->
  25. <link rel="stylesheet" href="https://www.cqna.gov.cn/syygapi/naxsb/css/index.css">
  26. <!-- 引入组件库 -->
  27. <script src="https://www.cqna.gov.cn/syygapi/naxsb/js/index.js"></script>
  28. <script src="https://www.cqna.gov.cn/syygapi/naxsb/js/echarts.min.js"></script>
  29. <script src="https://www.cqna.gov.cn/syygapi/naxsb/js/jquery-3.5.1.min.js"></script>
  30. <script src="https://www.cqna.gov.cn/syygapi/naxsb/js/urljson.js"></script>
  31. <style>
  32. * {
  33. margin: 0;
  34. padding: 0;
  35. }
  36. ul {
  37. padding: 0;
  38. margin: 0;
  39. }
  40. li {
  41. list-style: none;
  42. }
  43. html,
  44. body {
  45. font-size: 14px;
  46. }
  47. .building-box {
  48. cursor: pointer;
  49. }
  50. @keyframes blink {
  51. from {
  52. opacity: 1;
  53. }
  54. to {
  55. opacity: 0;
  56. }
  57. }
  58. .finger {
  59. position: absolute;
  60. top: -35px;
  61. right: 20px;
  62. color: #FF8000;
  63. font-size: 14px;
  64. }
  65. #loading {
  66. position: absolute;
  67. left: 50%;
  68. top: 45%;
  69. transform: translate(-50%, 0)
  70. }
  71. .building-box {
  72. text-align: center;
  73. font-size: 12px;
  74. width: 120px;
  75. position: absolute;
  76. top: 186px;
  77. left: -58px;
  78. }
  79. .building-text {
  80. background: #18A65A;
  81. color: #fff;
  82. padding: 4px;
  83. border-radius: 8px;
  84. margin-bottom: -8px;
  85. display: flex;
  86. flex-direction: column;
  87. }
  88. .building-bottom {
  89. background: #18A65A;
  90. width: 10px;
  91. height: 10px;
  92. border-radius: 5px;
  93. margin-left: calc(50% - 5px);
  94. }
  95. .building-line {
  96. width: 1px;
  97. height: 40px;
  98. border-left: 1px dashed #18A65A;
  99. position: absolute;
  100. top: 229px;
  101. left: 2px;
  102. }
  103. .qjttitle {
  104. width: 100%;
  105. position: absolute;
  106. top: 0;
  107. height: 14vw;
  108. background-image: url(images/bg-qjt.png);
  109. background-size: 100% 100%;
  110. text-align: center;
  111. line-height: 8vw;
  112. }
  113. .qjttitle span {
  114. font-family: DOUYU;
  115. font-size: 18px;
  116. font-weight: 600;
  117. background: -webkit-linear-gradient(top, #FFFFFF, #B0E0F6);
  118. -webkit-background-clip: text;
  119. color: transparent;
  120. background-clip: text;
  121. display: inline-block;
  122. font-style: italic;
  123. letter-spacing: 5px;
  124. }
  125. .floortitle {
  126. width: 90%;
  127. height: 18vw;
  128. line-height: 20vw;
  129. background-image: url(images/qjt1.png);
  130. background-size: 100% 100%;
  131. font-family: Microsoft YaHei;
  132. font-size: 16px;
  133. color: #FFFFFF;
  134. font-style: italic;
  135. padding-left: 8vw;
  136. box-sizing: border-box;
  137. }
  138. .floorcontent {
  139. width: 95vw;
  140. height: 50vw;
  141. background: #D3EBFF;
  142. box-shadow: 5px 9px 9px 0px rgba(17, 126, 202, 0.24);
  143. border-radius: 20px;
  144. border: 2px solid #D0E0EA;
  145. display: flex;
  146. flex-wrap: wrap;
  147. align-items: center;
  148. justify-content: center;
  149. border: 2px solid #D0E0EA;
  150. }
  151. .floorcontent .list {
  152. width: 40%;
  153. font-size: 14px;
  154. }
  155. .floorcontent .bottom {
  156. display: flex;
  157. align-items: center;
  158. margin-top: 10px;
  159. }
  160. .floorcontent .bottom span:first-child{
  161. font-size: 20px;
  162. font-weight: 600;
  163. font-style: italic;
  164. margin-right: 5px;
  165. }
  166. .floorcontent .radio::before {
  167. content: '';
  168. display: inline-block;
  169. width: 10px;
  170. height: 10px;
  171. border-radius: 50%;
  172. margin-right: 10px;
  173. }
  174. .floorcontent .blue .radio::before {
  175. background-color: rgb(26 149 235 / 50%);
  176. }
  177. .floorcontent .blue .bottom {
  178. color: #1A95EB;
  179. }
  180. .floorcontent .yellow .radio::before {
  181. background-color: rgb(255 128 0 / 50%);
  182. }
  183. .floorcontent .yellow .bottom {
  184. color: #FF8000;
  185. }
  186. .floorcontent .green .radio::before {
  187. background-color: rgb(35 177 74 / 50%);
  188. }
  189. .floorcontent .green .bottom {
  190. color: #23B14A;
  191. }
  192. .floorcontent .purple .radio::before {
  193. background-color: rgb(137 84 255 / 50%);
  194. }
  195. .floorcontent .purple .bottom {
  196. color: #8954FF;
  197. }
  198. .blsl .list {
  199. width: 44%;
  200. display: flex;
  201. align-items: center;
  202. height: 33%;
  203. }
  204. .blsl .list .img {
  205. /* width: 30%; */
  206. height: 90%;
  207. display: flex;
  208. justify-content: flex-end;
  209. align-items: center;
  210. margin-right: 5px;
  211. }
  212. .blsl .list .right {
  213. display: flex;
  214. flex-direction: column;
  215. justify-content: space-between;
  216. height: 75%;
  217. }
  218. .blsl .list .right>span {
  219. white-space: nowrap;
  220. font-size: 14px;
  221. }
  222. .blsl .list .right .number {
  223. color: #5482F9;
  224. font-size: 10px;
  225. }
  226. .blsl .list .right .number span:first-child {
  227. font-weight: bold;
  228. font-size: 20px;
  229. font-style: italic;
  230. }
  231. .top_t {
  232. padding: 10px 0;
  233. border-bottom: 1px solid #5482F9;
  234. height: 26px;
  235. justify-content: space-between;
  236. }
  237. .top_t,
  238. .bottom-t {
  239. width: 100%;
  240. display: flex;
  241. font-size: 14px;
  242. color: #5482F9;
  243. }
  244. .bottom-t {
  245. flex-direction: column;
  246. overflow-y: scroll;
  247. }
  248. .bottom-t::-webkit-scrollbar {
  249. display: none;
  250. /* Chrome, Safari 和 Opera */
  251. -ms-overflow-style: none;
  252. /* IE 和 Edge */
  253. scrollbar-width: none;
  254. /* Firefox */
  255. }
  256. .bottom-t .item {
  257. width: 100%;
  258. display: flex;
  259. font-size: 14px;
  260. padding: 10px 0;
  261. justify-content: space-between;
  262. border-bottom: 1px solid #5482F9;
  263. }
  264. .t1 {
  265. width: 70px;
  266. text-align: center;
  267. }
  268. .t1 span {
  269. background: #1D96E9;
  270. border: 1px solid #1D96E9;
  271. padding: 0 5px;
  272. border-radius: 2px;
  273. color: #fff;
  274. }
  275. .t2 {
  276. width: 100px;
  277. text-align: center;
  278. overflow: hidden;
  279. word-break: break-all;
  280. white-space: nowrap;
  281. text-overflow: ellipsis;
  282. }
  283. .t3 {
  284. width: calc(100% - 230px);
  285. text-align: center;
  286. overflow: hidden;
  287. word-break: break-all;
  288. white-space: nowrap;
  289. text-overflow: ellipsis;
  290. }
  291. </style>
  292. </head>
  293. <body>
  294. <div style="width:100%;" class="header"></div>
  295. <div class="container" style="position: relative;">
  296. <div class="row">
  297. <div class="col-sm-12">
  298. <div class="model-container"
  299. style="background: linear-gradient(180deg, rgb(246, 250, 255) 10%, rgb(214, 224, 235) 70%);">
  300. <div class="model-view">
  301. <canvas id="canvas-model-view" style="width: 100%;height: 100%;">您的浏览器不支持canvas!</canvas>
  302. </div>
  303. <div id="qjt">
  304. <div class="qjttitle">
  305. <span>
  306. 南岸全景政务通
  307. </span>
  308. </div>
  309. <div class="onefloor conList">
  310. <div class="floortitle">叫号数据</div>
  311. <div class="floorcontent">
  312. <div class="list blue">
  313. <div class="top radio">当前排队人数:</div>
  314. <div class="bottom">
  315. <img src="images/floor1.png" alt="">
  316. <div><span class="number" id="currWaitPeople2">-</span>
  317. <span>人</span>
  318. </div>
  319. </div>
  320. </div>
  321. <div class="list yellow">
  322. <div class="top radio">可办事项数量:</div>
  323. <div class="bottom">
  324. <img src="images/floor2.png" alt="">
  325. <div><span class="number" id="taskNum2">-</span>
  326. <span>项</span>
  327. </div>
  328. </div>
  329. </div>
  330. <div class="list green">
  331. <div class="top radio">平均等待时长:</div>
  332. <div class="bottom">
  333. <img src="images/floor3.png" alt="">
  334. <div><span class="number" id="waitTime2">-</span>
  335. <span>分钟</span>
  336. </div>
  337. </div>
  338. </div>
  339. <div class="list purple">
  340. <div class="top radio">窗口数:</div>
  341. <div class="bottom">
  342. <img src="images/floor4.png" alt="">
  343. <div><span class="number" id="winNum2">-</span>
  344. <span>个</span>
  345. </div>
  346. </div>
  347. </div>
  348. </div>
  349. </div>
  350. <div class="blsl conList">
  351. <div class="floortitle">累计办理数量</div>
  352. <div class="floorcontent">
  353. <div class="list">
  354. <div class="img">
  355. <img src="images/blsl4.png" alt="">
  356. </div>
  357. <div class="right">
  358. <span>本日办理数量</span>
  359. <div class="number">
  360. <span id="currDayTaskNum">324</span>
  361. <span>件</span>
  362. </div>
  363. </div>
  364. </div>
  365. <div class="list">
  366. <div class="img">
  367. <img src="images/blsl1.png" alt="">
  368. </div>
  369. <div class="right">
  370. <span>本周办理数量</span>
  371. <div class="number">
  372. <span id="currWeekTaskNum">7152</span>
  373. <span>件</span>
  374. </div>
  375. </div>
  376. </div>
  377. <div class="list">
  378. <div class="img">
  379. <img src="images/blsl2.png" alt="">
  380. </div>
  381. <div class="right">
  382. <span>本月办理数量</span>
  383. <div class="number">
  384. <span id="currMonthTaskNum">78</span>
  385. <span>件</span>
  386. </div>
  387. </div>
  388. </div>
  389. <div class="list">
  390. <div class="img">
  391. <img src="images/blsl3.png" alt="">
  392. </div>
  393. <div class="right">
  394. <span>本年办理数量</span>
  395. <div class="number">
  396. <span id="currYearTaskNum">78</span>
  397. <span>件</span>
  398. </div>
  399. </div>
  400. </div>
  401. </div>
  402. </div>
  403. <div class="twofloor conList">
  404. <div class="floortitle">实时办件详情</div>
  405. <div class="floorcontent" style="flex-wrap: nowrap;flex-direction: column;padding: 5px;">
  406. <div class="top_t">
  407. <div class="t1">状态</div>
  408. <div class="t2">受理部门</div>
  409. <div class="t3">办理名称</div>
  410. </div>
  411. <div style="width: 100%;height:100%;overflow:hidden;">
  412. <div class="bottom-t">
  413. <div class="item" v-for="(item, index) in bjxqList">
  414. <div class="title t1"><span
  415. v-if="item.state&&item.state=='在办'">{{item.state}}</span>
  416. <span style="background: #18A65A;border: 1px solid #18A65A;"
  417. v-else>{{item.state}}</span>
  418. </div>
  419. <div class="date t2" :title="item.acceptedDepartment">
  420. {{item.acceptedDepartment}}</div>
  421. <div class="date t3" :title="item.handlingName">
  422. {{item.handlingName?item.handlingName.split("—")[0]:''}}</div>
  423. </div>
  424. </div>
  425. </div>
  426. </div>
  427. </div>
  428. <div class="pdgdf conList">
  429. <div class="floortitle">大厅取号高低峰图</div>
  430. <div class="floorcontent">
  431. <div id="pdgdfechart" style="width: 100%;height: 100%;"></div>
  432. </div>
  433. </div>
  434. </div>
  435. </div>
  436. </div>
  437. </div>
  438. <div id="loading">
  439. <i class="fa fa-spinner fa-spin fa-fw"></i>加载中...
  440. </div>
  441. </div>
  442. <div style="width:100%;" class="footer"></div>
  443. </body>
  444. <script>
  445. $(function () {
  446. $(".header").load('https://www.cqna.gov.cn/syygapi/naxsb/top/top_style.html');
  447. $(".footer").load('https://www.cqna.gov.cn/syygapi/naxsb/footer/footer.html');
  448. });
  449. </script>
  450. <script src="https://www.cqna.gov.cn/syygapi/naxsb/js/jquery-3.5.1.min.js"></script>
  451. <script>
  452. // 判断浏览器是否支持 webgl
  453. if (!Detector.webgl) Detector.addGetWebGLMessage();
  454. let mwidth = window.innerWidth;
  455. let mheight = window.innerHeight;
  456. // 初始化场景
  457. let scene = new THREE.Scene();
  458. // 初始化摄像机
  459. let camera = new THREE.PerspectiveCamera(10, mwidth / mheight, 1, 1000000);
  460. // camera.position.set(90000, 41120, 81120);
  461. camera.position.set(50000, 71120, 51120);
  462. camera.lookAt(new THREE.Vector3(0, 0, 0));
  463. let renderer = new THREE.WebGLRenderer({
  464. canvas: document.getElementById("canvas-model-view"),
  465. antialias: true, // 设置抗锯齿
  466. alpha: true, // 背景透明
  467. autoClear: true,
  468. logarithmicDepthBuffer: true
  469. });
  470. renderer.setSize(mwidth, 1.4*mwidth);
  471. renderer.shadowMap.enabled = true;
  472. // 2D 文字渲染
  473. let css2Renderer = new THREE.CSS2DRenderer();
  474. css2Renderer.setSize(mwidth, mheight);
  475. css2Renderer.domElement.style.position = 'absolute';
  476. css2Renderer.domElement.style.top = '0px';
  477. css2Renderer.domElement.style.pointerEvents = 'none';
  478. document.body.appendChild(css2Renderer.domElement);
  479. // 四个方向的平行光
  480. // 环境光
  481. let ambient = new THREE.AmbientLight(0x404040, 0.1);
  482. scene.add(ambient);
  483. var pointLight = new THREE.PointLight(0xf0e68c, 0.9, 12500);
  484. pointLight.position.set(0, 8500, 0);
  485. pointLight.castShadow = true;
  486. pointLight.shadow.camera.near = 1;
  487. pointLight.shadow.camera.far = 15000;
  488. pointLight.shadow.mapSize.width = 10240;
  489. pointLight.shadow.mapSize.height = 10240;
  490. scene.add(pointLight);
  491. // 加载模型文件
  492. let gLTFLoader = new THREE.GLTFLoader()
  493. let dracoLoader = new THREE.DRACOLoader();
  494. dracoLoader.setDecoderPath('https://www.cqna.gov.cn/syygapi/naxsb/3ddemo/examples/js/libs/draco/gltf/');
  495. dracoLoader.setDecoderConfig({
  496. type: 'js'
  497. });
  498. gLTFLoader.setDRACOLoader(dracoLoader);
  499. gLTFLoader.load('https://www.cqna.gov.cn/syygapi/naxsb/3ddemo/model/27.gltf', function (obj) {
  500. obj.scene.traverse(function (child) {
  501. if (child.isMesh) {
  502. child.frustumCulled = false;
  503. child.castShadow = true;
  504. child.receiveShadow = true;
  505. child.material.emissive = child.material.color;
  506. child.material.emissiveMap = child.material.map;
  507. child.material.transparent = true;
  508. child.material.emissiveIntensity = 0.8;
  509. if (child.name) {
  510. const div = document.createElement('div');
  511. div.id = child.uuid;
  512. div.style = 'color:red;';
  513. div.setAttribute("data", child.name);
  514. div.innerHTML = '<p data-name="' + child.name + '"></p>';
  515. let tag = new THREE.CSS2DObject(div);
  516. }
  517. // 一号楼
  518. if (child.name == 'yihaolou') {
  519. const div = document.createElement('div');
  520. div.id = child.uuid;
  521. let html = '';
  522. html += '<div class="building-box" style="width: 100px; top: 20px; left: -48px;">';
  523. html += '<div class="building-text" style="background: #1D96E9;" onclick="handleClick()">';
  524. html += '<span>1号楼</span><span style="font-size: 10px;">社保大厅、医保大厅</span>';
  525. html += '</div>';
  526. html += '<svg width="10" height="10"><polygon id="triangle" points="0,0 10,0 5,10" fill="#1D96E9"/></svg>';
  527. html += '</div>';
  528. html += '<div class="building-line" style="border-left: 1px dashed #1D96E9; height: 100px; top: 50px;"></div>';
  529. html += `<div style="font-size: 12px;background: #18A65A;width: 100px;top: 166px;left: 38px;position: absolute;display: flex;flex-direction: column;align-items: flex-start;color: #fff;">
  530. <span>地下停车场入口⬇</span>
  531. </div>`
  532. html += '<div class="building-line" style="border-left: 1px dashed #1D96E9; height: 100px; top: 166px;left: 38px;"></div>';
  533. div.innerHTML = html;
  534. let tag = new THREE.CSS2DObject(div);
  535. child.add(tag);
  536. }
  537. // 二号楼
  538. if (child.name == 'erhaolou') {
  539. const div = document.createElement('div');
  540. div.id = child.uuid;
  541. let html = '';
  542. html += '<div class="building-box" style="width: 100px; top: 28px; left: -48px;">';
  543. html += '<div class="finger" style="animation:blink 1s infinite;"><img src="images/finger.png">点我</div>';
  544. html += '<div class="building-text" style="background: #1D96E9;">';
  545. html += '<span>2号楼</span></span></span><span style="font-size: 10px;">南岸区政务服务中心</span>';
  546. html += '</div>';
  547. html += '<svg width="10" height="10"><polygon id="triangle" points="0,0 10,0 5,10" fill="#1D96E9"/></svg>';
  548. html += '</div>';
  549. html += '<div class="building-line" style="border-left: 1px dashed #1D96E9; height: 100px; top: 72px;"></div>';
  550. div.innerHTML = html;
  551. let tag = new THREE.CSS2DObject(div);
  552. child.add(tag);
  553. div.style.pointerEvents = 'auto';
  554. div.addEventListener('click', function (event) {
  555. window.location.href = 'flooroneMobile.html?floorid=' + 2;
  556. });
  557. }
  558. // 三号楼
  559. if (child.name == 'sanhaolou') {
  560. const div = document.createElement('div');
  561. div.id = child.uuid;
  562. let html = '';
  563. html += '<div class="building-box" style="width: 50px; top: 73px; left: -23px;">';
  564. html += '<div class="building-text" style="background: #1D96E9;">';
  565. html += '<span>3号楼</span><span style="font-size: 10px;"></span>';
  566. html += '</div>';
  567. html += '<svg width="10" height="10"><polygon id="triangle" points="0,0 10,0 5,10" fill="#1D96E9"/></svg>';
  568. html += '</div>';
  569. html += '<div class="building-line" style="border-left: 1px dashed #1D96E9; height: 100px; top: 90px;"></div>';
  570. div.innerHTML = html;
  571. let tag = new THREE.CSS2DObject(div);
  572. child.add(tag);
  573. }
  574. // 四号楼
  575. if (child.name == 'sihaolou-Chrome') {
  576. const div = document.createElement('div');
  577. div.id = child.uuid;
  578. let html = '';
  579. html += '<div class="building-box" style="top: 73px;">';
  580. html += `<div class="text" style="top: -51px;left: 146px;position: absolute;display: flex;flex-direction: column;align-items: flex-start;color: #1A95EB;">
  581. <span style="font-size: 16px;font-weight: bold;margin-bottom: 5px;">地铁6号线</span>
  582. <span>邱家湾站2B出口</span>
  583. <span>距离:800米</span>
  584. <img src="https://www.cqna.gov.cn/syygapi/naxsb/images/qjtArrow.png" alt="" style="">
  585. </div>`
  586. html += '<div class="building-text">';
  587. html += '<span>4号楼</span><span style="font-size: 10px;">商务打印、小卖部、食堂</span>';
  588. html += '</div>';
  589. html += '<svg width="10" height="10"><polygon id="triangle" points="0,0 10,0 5,10" fill="#18A65A"/></svg>';
  590. html += '</div>';
  591. html += '<div class="building-line" style="top: 110px;"></div>';
  592. div.innerHTML = html;
  593. let tag = new THREE.CSS2DObject(div);
  594. child.add(tag);
  595. }
  596. if (child.name == 'chedao-chedao') {
  597. const div = document.createElement('div');
  598. div.id = child.uuid;
  599. let html = '';
  600. html += '<div style="font-size: 12px; width: 80px; text-align: center;">';
  601. html += '<div class="building-text" style="background: #18A65A; margin-bottom: -2px;">';
  602. html += '<span style="text-align: left;">停车场</span>';
  603. html += '<span style="font-size: 10px; text-align: left;">空余车位:-</span>';
  604. html += '<span style="font-size: 10px; text-align: left;">空余充电桩:-</span>';
  605. html += '</div>';
  606. html += '</div>';
  607. div.innerHTML = html;
  608. let tag = new THREE.CSS2DObject(div);
  609. child.add(tag);
  610. }
  611. }
  612. });
  613. scene.add(obj.scene);
  614. const box = new THREE.Box3().setFromObject(obj.scene);
  615. const center = new THREE.Vector3();
  616. box.getCenter(center);
  617. obj.scene.position.sub(center);
  618. document.getElementById('loading').style.display = 'none';
  619. render();
  620. }, function (xhr) {
  621. }, function (error) {
  622. })
  623. function render() {
  624. css2Renderer.render(scene, camera)
  625. renderer.render(scene, camera);
  626. }
  627. render();
  628. let controls = new THREE.OrbitControls(camera, renderer.domElement);
  629. controls.enableZoom = false
  630. controls.maxPolarAngle = Math.PI / 2
  631. controls.minPolarAngle = 0
  632. controls.addEventListener('change', render);
  633. let axisHelper = new THREE.AxisHelper(50050);
  634. </script>
  635. <script>
  636. new Vue({
  637. el: '#qjt',
  638. data: function () {
  639. return {
  640. bjxqList: []
  641. };
  642. },
  643. created() {
  644. this.getSSbj();
  645. },
  646. beforeDestroy() {
  647. this.stopClock();
  648. },
  649. methods: {
  650. addKeyFrames(y) {
  651. let i = 0
  652. setInterval(function () {
  653. if (i >= y) return i = 0
  654. i++
  655. document.querySelector('.bottom-t').style.marginTop = `-${i}px`
  656. }, 50);
  657. },
  658. getSSbj() {
  659. let that = this;
  660. $.ajax({
  661. url: 'https://data.cqna.gov.cn:8088/kshapi/api/page2/top2',
  662. type: "get",
  663. dataType: "json",
  664. async: false,
  665. success: function (data) {
  666. var data = data.data;
  667. that.bjxqList = data.data;
  668. }
  669. });
  670. var height = document.querySelector('.item') ? document.querySelector('.item').clientHeight - 20 : 0;
  671. if (this.bjxqList.length) {
  672. this.addKeyFrames(height * this.bjxqList.length);
  673. }
  674. }
  675. }
  676. });
  677. </script>
  678. <script>
  679. var chartDom = document.getElementById('pdgdfechart');
  680. var myChart = echarts.init(chartDom);
  681. var option;
  682. option = {
  683. color: ['#80FFA5'],
  684. tooltip: {
  685. trigger: 'axis',
  686. axisPointer: {
  687. type: 'cross',
  688. label: {
  689. backgroundColor: '#6a7985'
  690. }
  691. }
  692. },
  693. grid: {
  694. left: '3%',
  695. right: '4%',
  696. bottom: '3%',
  697. containLabel: true
  698. },
  699. xAxis: [
  700. {
  701. type: 'category',
  702. boundaryGap: false,
  703. data: ['8:00', '9:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:30'],
  704. axisLabel: {
  705. color: 'rgba(26,149,235,0.5);' // 这里设置刻度字的颜色为蓝色
  706. }
  707. }
  708. ],
  709. yAxis: [
  710. {
  711. type: 'value',
  712. name: '人次',
  713. nameTextStyle: {
  714. color: "#2A6594",
  715. fontSize: '14'
  716. },
  717. axisTick: {
  718. show: true // 显示Y轴刻度线
  719. },
  720. axisLine: {
  721. show: true
  722. },
  723. axisLabel: {
  724. color: 'rgba(26,149,235,0.5);' // 这里设置刻度字的颜色为蓝色
  725. }
  726. }
  727. ],
  728. series: [
  729. {
  730. name: '大厅取号高低峰指数',
  731. type: 'line',
  732. stack: 'Total',
  733. smooth: true,
  734. lineStyle: {
  735. width: 0
  736. },
  737. areaStyle: {
  738. opacity: 0.8,
  739. color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
  740. {
  741. offset: 0,
  742. color: 'rgb(17 126 202)'
  743. },
  744. {
  745. offset: 1,
  746. color: 'rgb(192 215 231)'
  747. }
  748. ])
  749. },
  750. emphasis: {
  751. focus: 'series'
  752. },
  753. data: [14, 72, 138, 150, 26, 2, 60, 154, 100, 44]
  754. }
  755. ]
  756. };
  757. option && myChart.setOption(option);
  758. </script>
  759. <script>
  760. var path = "https://www.cqna.gov.cn/data";
  761. function handlingNumber(area, timeType) {
  762. var data1 = ''
  763. $.ajax({
  764. url: path + "/department/getOfficeNumberByAreaInfo",
  765. dataType: "json",
  766. type: "get",
  767. cache: false,
  768. async: false,
  769. data: {
  770. "area": area,
  771. "timeType": timeType
  772. },
  773. success: function (data) {
  774. data1 = data.data
  775. },
  776. error: function () {
  777. alert('网络错误,请稍后再试!');
  778. }
  779. });
  780. return data1;
  781. }
  782. function animateValue(obj, start, end, duration) {
  783. let startTimestamp = null;
  784. const step = (timestamp) => {
  785. if (!startTimestamp) startTimestamp = timestamp;
  786. const progress = Math.min((timestamp - startTimestamp) / duration, 1);
  787. obj.innerHTML = Math.floor(progress * (end - start) + start);
  788. if (progress < 1) {
  789. window.requestAnimationFrame(step);
  790. } else {
  791. obj.classList.remove('animate');
  792. }
  793. };
  794. obj.classList.add('animate');
  795. window.requestAnimationFrame(step);
  796. }
  797. const time = 2 * 1000;
  798. let that = this;
  799. function getCurrentPerson() {
  800. $.ajax({
  801. url: conpath + "/qjt/",
  802. type: "get",
  803. dataType: "json",
  804. async: false,
  805. success: function (data) {
  806. const waitTime2 = document.getElementById('waitTime2');
  807. animateValue(waitTime2, 0, data.data[0], time);
  808. const currWaitPeople2 = document.getElementById('currWaitPeople2');
  809. animateValue(currWaitPeople2, 0, data.data[1], time);
  810. }
  811. })
  812. }
  813. getCurrentPerson();
  814. var intervalId = setInterval(getCurrentPerson, 1800000);
  815. function getCurrentItem() {
  816. $.ajax({
  817. url: conpath + "/solveAffairs/",
  818. type: "get",
  819. dataType: "json",
  820. async: false,
  821. success: function (data) {
  822. var data = data.data;
  823. const currDayTaskNumElement = document.getElementById('currDayTaskNum');
  824. animateValue(currDayTaskNumElement, 0, data[0], time);
  825. const currWeekTaskNumElement = document.getElementById('currWeekTaskNum');
  826. animateValue(currWeekTaskNumElement, 0, data[1], time);
  827. const currMonthTaskNumElement = document.getElementById('currMonthTaskNum');
  828. animateValue(currMonthTaskNumElement, 0, data[2], time);
  829. const currYearTaskNumElement = document.getElementById('currYearTaskNum');
  830. animateValue(currYearTaskNumElement, 0, data[3], time);
  831. }
  832. })
  833. }
  834. getCurrentItem();
  835. var intervalId1 = setInterval(getCurrentItem, 300000);
  836. window.addEventListener('beforeunload', function () {
  837. clearInterval(intervalId);
  838. clearInterval(intervalId1);
  839. });
  840. const taskNumElement2 = document.getElementById('taskNum2');
  841. animateValue(taskNumElement2, 0, 798, time);
  842. const winNumElement2 = document.getElementById('winNum2');
  843. animateValue(winNumElement2, 0, 78, time);
  844. </script>
  845. </html>