Commit 3354548ba2c0622f0d9a6dcbd7f9b4b5edf1ebc3
1 parent
5bb75329
线调 线路选择
Showing
6 changed files
with
607 additions
and
196 deletions
src/main/resources/static/pages/control/line/css/lineControl.css
| 1 | +label { | |
| 2 | + max-width: none; | |
| 3 | +} | |
| 4 | +.load-text{ | |
| 5 | + position: absolute; | |
| 6 | + top: 50%; | |
| 7 | + left: 50%; | |
| 8 | + transform: translate(-50%); | |
| 9 | + font-size: 14px; | |
| 10 | + font-family: 仿宋; | |
| 11 | +} | |
| 12 | +body{ | |
| 13 | + overflow: hidden; | |
| 14 | +} | |
| 15 | + | |
| 16 | +/* ^_^ 隐藏logo */ | |
| 17 | +.anchorBL, | |
| 18 | +.anchorBL, | |
| 19 | +.amap-logo, | |
| 20 | +.amap-copyright{ | |
| 21 | + display: none; | |
| 22 | +} | |
| 23 | + | |
| 24 | + | |
| 1 | 25 | /* .dropdown-menu { |
| 2 | 26 | background-color: rgba(76, 115, 142, 0.95); |
| 3 | 27 | border: 1px solid #4C738E; |
| ... | ... | @@ -196,7 +220,7 @@ |
| 196 | 220 | } |
| 197 | 221 | |
| 198 | 222 | .card_wrap{ |
| 199 | - height: 263px; | |
| 223 | + height: 268px; | |
| 200 | 224 | text-align: center; |
| 201 | 225 | } |
| 202 | 226 | |
| ... | ... | @@ -207,8 +231,8 @@ |
| 207 | 231 | |
| 208 | 232 | .card_wrap .line_chart{ |
| 209 | 233 | height: 100%; |
| 210 | - padding: 0; | |
| 211 | - border-top: 1px solid #DADADA; | |
| 234 | + padding: 0; | |
| 235 | + border-top: 1px solid #DADADA; | |
| 212 | 236 | } |
| 213 | 237 | |
| 214 | 238 | .card_wrap .line_chart .top{ |
| ... | ... | @@ -222,7 +246,7 @@ |
| 222 | 246 | .card_wrap .line_chart .top .center{ |
| 223 | 247 | height: 100%; |
| 224 | 248 | font-size: 15px; |
| 225 | - color: #B9B9B9; | |
| 249 | + color: #5E96D2; | |
| 226 | 250 | padding: 10px 0px; |
| 227 | 251 | width: auto; |
| 228 | 252 | float: left; |
| ... | ... | @@ -339,7 +363,7 @@ |
| 339 | 363 | margin-right: 0; |
| 340 | 364 | overflow-y: hidden; |
| 341 | 365 | background: #fdfdfd; |
| 342 | - margin-top: 5.8px; | |
| 366 | + margin-top: 0; | |
| 343 | 367 | /* box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); */ |
| 344 | 368 | } |
| 345 | 369 | |
| ... | ... | @@ -358,11 +382,18 @@ |
| 358 | 382 | |
| 359 | 383 | /* svg 样式 */ |
| 360 | 384 | .line_chart svg{ |
| 361 | - height: 100%; | |
| 385 | +/* height: 100%; | |
| 362 | 386 | margin: 0; |
| 363 | 387 | z-index: 1; |
| 364 | 388 | position: absolute; |
| 365 | 389 | top: 0; |
| 390 | + left: 0; */ | |
| 391 | + | |
| 392 | + height: calc(100% - 40px); | |
| 393 | + margin: 0; | |
| 394 | + z-index: 1; | |
| 395 | + position: absolute; | |
| 396 | + bottom: 0; | |
| 366 | 397 | left: 0; |
| 367 | 398 | } |
| 368 | 399 | /* .station_circle{ |
| ... | ... | @@ -376,16 +407,16 @@ |
| 376 | 407 | } |
| 377 | 408 | |
| 378 | 409 | .up_station_circle{ |
| 379 | - fill: #5e96d2; | |
| 410 | + fill: #5e96d2; | |
| 380 | 411 | r: 6; |
| 381 | - stroke: #fff; | |
| 412 | + stroke: rgb(253, 253, 253); | |
| 382 | 413 | stroke-width: 3; |
| 383 | 414 | } |
| 384 | 415 | |
| 385 | 416 | .down_station_circle{ |
| 386 | - fill: #c92121; | |
| 417 | + fill: #c92121; | |
| 387 | 418 | r: 6; |
| 388 | - stroke: #fff; | |
| 419 | + stroke: rgb(253, 253, 253); | |
| 389 | 420 | stroke-width: 3; |
| 390 | 421 | } |
| 391 | 422 | |
| ... | ... | @@ -394,32 +425,36 @@ |
| 394 | 425 | letter-spacing: -2.6px; |
| 395 | 426 | } |
| 396 | 427 | |
| 428 | +.station_text:hover{ | |
| 429 | + background-color: red; | |
| 430 | +} | |
| 431 | + | |
| 397 | 432 | .station_text.up{ |
| 398 | - fill: #5e96d2; | |
| 433 | + fill: #5E96D2; | |
| 399 | 434 | } |
| 400 | 435 | |
| 401 | 436 | .station_text.down{ |
| 402 | - fill: #c92121; | |
| 437 | + fill: #C92121 | |
| 403 | 438 | } |
| 404 | 439 | |
| 405 | 440 | .station_text.end{ |
| 406 | - fill: none; | |
| 407 | - stroke: #c92121; | |
| 441 | + fill: none; | |
| 442 | + stroke: #C92121; | |
| 408 | 443 | } |
| 409 | 444 | |
| 410 | 445 | .station_text.start{ |
| 411 | - stroke: #5e96d2; | |
| 446 | + stroke: #5E96D2; | |
| 412 | 447 | fill: none; |
| 413 | 448 | } |
| 414 | 449 | |
| 415 | 450 | .up_path{ |
| 416 | - stroke-width: 7.4px; | |
| 417 | - stroke: #5e96d2; | |
| 451 | + stroke-width: 5.4px; | |
| 452 | + stroke: #5E96D2; | |
| 418 | 453 | } |
| 419 | 454 | |
| 420 | 455 | .down_path{ |
| 421 | - stroke-width: 7.4px; | |
| 422 | - stroke: #c92121; | |
| 456 | + stroke-width: 5.4px; | |
| 457 | + stroke: #C92121; | |
| 423 | 458 | } |
| 424 | 459 | |
| 425 | 460 | .up_path.arc, |
| ... | ... | @@ -437,6 +472,94 @@ |
| 437 | 472 | r: 0; |
| 438 | 473 | } |
| 439 | 474 | |
| 475 | +.vehci-g.up{ | |
| 476 | + transform: translate(-15px, -34px); | |
| 477 | +} | |
| 478 | + | |
| 479 | +.vehci-g.down{ | |
| 480 | + transform: translate(-15px, 8px); | |
| 481 | +} | |
| 482 | + | |
| 483 | +.vehci-g.up rect, | |
| 484 | +.vehci-g.down rect{ | |
| 485 | + width: 28px; | |
| 486 | + height: 25px; | |
| 487 | + fill: rgba(253, 253, 253, 0.17); | |
| 488 | + rx: 5px; | |
| 489 | + stroke: #26c281; | |
| 490 | +} | |
| 491 | + | |
| 492 | +.vehci-g.up text, | |
| 493 | +.vehci-g.down text{ | |
| 494 | + stroke: #26c281; | |
| 495 | + font-size: 12px; | |
| 496 | + cursor: default; | |
| 497 | +} | |
| 498 | + | |
| 499 | +.vehci-g.updown-error rect, | |
| 500 | +.vehci-g.updown-error text{ | |
| 501 | + stroke: #CACA17; | |
| 502 | + fill: rgba(253, 253, 253, 0); | |
| 503 | +} | |
| 504 | + | |
| 505 | +.number-g{ | |
| 506 | + transform: translate(-13px, -32px); | |
| 507 | +} | |
| 508 | +.number-g text{ | |
| 509 | + transform: translate(9px, 17px); | |
| 510 | + stroke: white; | |
| 511 | +} | |
| 512 | + | |
| 513 | +.number-g rect{ | |
| 514 | + width: 25px; | |
| 515 | + height: 25px; | |
| 516 | + fill: #333333; | |
| 517 | + rx: 11px; | |
| 518 | + stroke: #FDFDFD; | |
| 519 | + stroke-width: 5px; | |
| 520 | +} | |
| 521 | + | |
| 522 | +.number-g.start{ | |
| 523 | + transform: translate(-38px, 52px); | |
| 524 | +} | |
| 525 | + | |
| 526 | +.number-g.end{ | |
| 527 | + transform: translate(13px, 52px); | |
| 528 | +} | |
| 529 | + | |
| 530 | +g.park .park-rect{ | |
| 531 | + width: 50px; | |
| 532 | + height: 130px; | |
| 533 | + fill: rgba(94, 150, 210, 0.32); | |
| 534 | + rx: 5px; | |
| 535 | +} | |
| 536 | +g.park.start rect, | |
| 537 | +g.park.start text{ | |
| 538 | + transform: translate(-56px, 0); | |
| 539 | +} | |
| 540 | + | |
| 541 | +g.park .gps-rect{ | |
| 542 | + width: 28px; | |
| 543 | + height: 25px; | |
| 544 | + fill: #ccc; | |
| 545 | + rx: 5px; | |
| 546 | + stroke: #ccc; | |
| 547 | +} | |
| 548 | + | |
| 549 | +g.park text{ | |
| 550 | + stroke: #fafafa; | |
| 551 | + font-size: 12px; | |
| 552 | + cursor: default; | |
| 553 | + | |
| 554 | +} | |
| 555 | + | |
| 556 | +/* .svg-bg{ | |
| 557 | + width: 100%; | |
| 558 | + height: 100%; | |
| 559 | + fill: rgba(94, 150, 210, 0.32); | |
| 560 | +} */ | |
| 561 | + | |
| 562 | + | |
| 440 | 563 | /* tab_map 地图嵌入样式修正 */ |
| 441 | 564 | #tab_map #mapContainer{ |
| 442 | 565 | margin-top: -8px |
| ... | ... | @@ -513,7 +636,7 @@ |
| 513 | 636 | color: #000; |
| 514 | 637 | } |
| 515 | 638 | #tab_map .mapRightWrap.gaode.vehicle p.head{ |
| 516 | - color: #7D7777; | |
| 639 | + color: #504B4B; | |
| 517 | 640 | } |
| 518 | 641 | #tab_map .mapRightWrap.vehicle.gaode p.head>span.icon>a:hover{ |
| 519 | 642 | color: #555555; |
| ... | ... | @@ -555,4 +678,79 @@ |
| 555 | 678 | background: #ddd; |
| 556 | 679 | color: #333333; |
| 557 | 680 | } |
| 558 | -/* GaoDe style end------- */ | |
| 559 | 681 | \ No newline at end of file |
| 682 | +/* GaoDe style end------- */ | |
| 683 | +#tooltipShade { | |
| 684 | + position: absolute; | |
| 685 | + z-index: 99998; | |
| 686 | + width: 100%; | |
| 687 | + height: 100%; | |
| 688 | + display: none; | |
| 689 | + left: 0; | |
| 690 | + top: 0; | |
| 691 | + | |
| 692 | + background: rgba(102, 102, 102, 0.63); | |
| 693 | + animation-duration:.2s; | |
| 694 | + -webkit-animation-duration:.2s; | |
| 695 | +} | |
| 696 | + | |
| 697 | +#tooltipShade.level2{ | |
| 698 | + background: rgba(102, 102, 102, 0.13); | |
| 699 | +} | |
| 700 | + | |
| 701 | +#tooltip{ | |
| 702 | + position: absolute; | |
| 703 | + z-index: 99999; | |
| 704 | + /* border-radius: 5px !important; */ | |
| 705 | + border: 1px solid rgba(94, 150, 210, 1); | |
| 706 | + background: rgba(255, 255, 255, 0.95); | |
| 707 | + box-shadow: 0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12); | |
| 708 | + width: 185px; | |
| 709 | +} | |
| 710 | + | |
| 711 | +#tooltip hr{ | |
| 712 | + margin: 9px 0 9px -10px; | |
| 713 | + border-top: 1px solid #ddd; | |
| 714 | + width: calc(100% + 20px); | |
| 715 | +} | |
| 716 | + | |
| 717 | +#tooltip.fixed{ | |
| 718 | + transition: all .5s ease; | |
| 719 | + border: 1px solid #fff; | |
| 720 | + background: #fff; | |
| 721 | +} | |
| 722 | + | |
| 723 | +#tooltip #tooltip-Container{ | |
| 724 | + padding: 10px; | |
| 725 | +} | |
| 726 | + | |
| 727 | +#tooltip #tooltip-Container div{ | |
| 728 | + margin: 3px; | |
| 729 | + font-size: 13.4px; | |
| 730 | +} | |
| 731 | + | |
| 732 | +#tooltip #tooltip-Container div a{ | |
| 733 | + color: #274865; | |
| 734 | +} | |
| 735 | + | |
| 736 | +#tooltip #tooltip-Container .title a{ | |
| 737 | + font-size: 16px; | |
| 738 | + font-family: 微软雅黑; | |
| 739 | + color: blue; | |
| 740 | +} | |
| 741 | + | |
| 742 | +#tooltip #tooltip-Container .subtitle, | |
| 743 | +#tooltip #tooltip-Container .subtitle a{ | |
| 744 | + color: #999; | |
| 745 | + font-size: 13px; | |
| 746 | +} | |
| 747 | + | |
| 748 | +#tooltip.tooltip-modal{ | |
| 749 | +width: 700px; | |
| 750 | +height: 400px; | |
| 751 | + box-shadow: 0 12px 15px 0 rgba(0,0,0,0.24),0 17px 50px 0 rgba(0,0,0,0.19); | |
| 752 | +} | |
| 753 | + | |
| 754 | +#tooltip #tip_map_wrap{ | |
| 755 | + width: 100%; | |
| 756 | + height: 100%; | |
| 757 | +} | |
| 560 | 758 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/control/line/index.html
| ... | ... | @@ -76,22 +76,33 @@ |
| 76 | 76 | <div class="tab-content" style="padding: 5px;overflow-y: auto;"> |
| 77 | 77 | <div class="tab-pane fade active in" id="tab_home" ></div> |
| 78 | 78 | <div class="tab-pane fade" id="tab_map" style="position: relative;"></div> |
| 79 | - <div class="tab-pane fade" id="tab_line">单线路调度</div> | |
| 79 | + <div class="tab-pane fade" id="tab_line">单线路调度aaa</div> | |
| 80 | 80 | </div> |
| 81 | 81 | </div> |
| 82 | +<div id="tooltipShade" class="animated fadeIn"></div> | |
| 83 | + | |
| 82 | 84 | </div> |
| 83 | 85 | <div id="temps"></div> |
| 84 | 86 | |
| 85 | -<script src="js/drawSvg.js"></script> | |
| 86 | -<script src="js/data.js"></script> | |
| 87 | -<script src="js/main.js"></script> | |
| 87 | + | |
| 88 | +<div id="tooltip" style="display: none;"> | |
| 89 | +</div> | |
| 90 | + | |
| 91 | +<script src="/pages/control/line/js/tooltip.js"></script> | |
| 92 | +<script src="/pages/control/line/js/drawSvg.js"></script> | |
| 93 | +<script src="/pages/control/line/js/data.js"></script> | |
| 94 | +<script src="/pages/control/line/js/main.js"></script> | |
| 88 | 95 | <script> |
| 89 | 96 | $(function() { |
| 90 | - | |
| 91 | - // 关闭左侧栏 http://222.66.0.204:8899/transport_server/rtgps | |
| 92 | -/* if (!$('body').hasClass('page-sidebar-closed')) | |
| 93 | - $('.menu-toggler.sidebar-toggler').click(); | |
| 94 | - */ | |
| 95 | - | |
| 97 | + //加载模板文件 | |
| 98 | + getTemp('temps/home_tp.html'); | |
| 99 | + getTemp('temps/home_table_tp.html'); | |
| 100 | + getTemp('temps/tooltip_tp.html'); | |
| 101 | + | |
| 102 | + function getTemp(url){ | |
| 103 | + $.get(url, function(template){ | |
| 104 | + $('#temps').append(template); | |
| 105 | + }); | |
| 106 | + } | |
| 96 | 107 | }); |
| 97 | 108 | </script> |
| 98 | 109 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/control/line/js/data.js
| ... | ... | @@ -4,24 +4,19 @@ |
| 4 | 4 | var _data = (function(){ |
| 5 | 5 | |
| 6 | 6 | var storage = window.localStorage; |
| 7 | - //写入模拟数据 | |
| 8 | - storage.setItem('lineControlItems',JSON.stringify( | |
| 9 | - [ | |
| 10 | - {id: 10232, name: '604路', start: '三林世博家园', end: '西营路德州路'}, | |
| 11 | - {id: 10566, name: '778路', start: '莱阳路五莲路', end: '张江地铁站'} , | |
| 12 | - {id: 10904, name: '新川专线', start: '上海火车站(北广场)', end: '华戴路川环南路'}, | |
| 13 | - {id: 10069, name: '85路', start: '陆家嘴地铁站', end: '长岛路东陆路'}, | |
| 14 | - {id: 10474, name: '987路', start: '源华路双桥路', end: '世纪大道地铁站'}, | |
| 15 | - {id: 10507, name: '636路', start: '龚丰路溪平路', end: '张江地铁站'}, | |
| 16 | - {id: 10702, name: '浦东23路', start: '南汇汽车站', end: '五七场部'}, | |
| 17 | - {id: 10220, name: '573路', start: '宁桥路申江路', end: '东方路栖霞路'} | |
| 18 | - ])); | |
| 19 | 7 | |
| 8 | + //实时GPS数据 | |
| 9 | + var allGps = {}; | |
| 10 | + //10秒刷新一次实时GPS | |
| 11 | + var realGpsT = 1000 * 30; | |
| 20 | 12 | |
| 21 | 13 | var dataObject = { |
| 22 | 14 | getLines: function(){ |
| 23 | 15 | return JSON.parse(storage.getItem('lineControlItems')); |
| 24 | 16 | }, |
| 17 | + getLineIds: function(){ | |
| 18 | + return JSON.parse(storage.getItem('lineIds')); | |
| 19 | + }, | |
| 25 | 20 | getRealVehic: function(lineArray, cb){ |
| 26 | 21 | var tabList = [ |
| 27 | 22 | {nbbm: 'W9H108', endDistance: '13.14', endTime: '82', instructions: '', speed: '16', roadSigns: '另1'}, |
| ... | ... | @@ -56,20 +51,37 @@ var _data = (function(){ |
| 56 | 51 | $get('/stationroute/all', {'line.lineCode_eq': lineId}, function(routes){ |
| 57 | 52 | var svgData = analyData(routes); |
| 58 | 53 | |
| 59 | - cb && cb(svgData, container); | |
| 54 | + cb && cb(lineId, svgData, container); | |
| 60 | 55 | }); |
| 56 | + }, | |
| 57 | + /** | |
| 58 | + * 实时GPS定时刷新 | |
| 59 | + */ | |
| 60 | + startRefreshGpsTimer: function(){ | |
| 61 | + var f = arguments.callee; | |
| 62 | + refreshGpsProxy(); | |
| 63 | + setTimeout(f, realGpsT); | |
| 61 | 64 | } |
| 62 | 65 | }; |
| 63 | 66 | |
| 64 | - //加载模板文件 | |
| 65 | - getTemp('temps/home_tp.html'); | |
| 66 | - getTemp('temps/home_table_tp.html'); | |
| 67 | + //地图tab页显示时 注入gps数据 | |
| 68 | + $('a[href=#tab_map]').on('shown.bs.tab', function(){ | |
| 69 | + $('#tab_map #mapContainer').trigger('gps_refresh', [allGps]); | |
| 70 | + }); | |
| 67 | 71 | |
| 68 | - function getTemp(url){ | |
| 69 | - $.get(url, function(template){ | |
| 70 | - $('#temps').append(template); | |
| 72 | + function refreshGpsProxy(){ | |
| 73 | + refreshGps(function(add, up){ | |
| 74 | + $('#tab_home,#tab_map #mapContainer').trigger('gps_refresh', [add, up]); | |
| 71 | 75 | }); |
| 72 | 76 | } |
| 77 | + | |
| 78 | + | |
| 79 | + //初始化lineCodes | |
| 80 | + var lineCodes = ''; | |
| 81 | + $.each(dataObject.getLines(), function(i, obj){ | |
| 82 | + lineCodes += (obj.lineCode + ','); | |
| 83 | + }); | |
| 84 | + lineCodes = lineCodes.substr(0, lineCodes.length - 1); | |
| 73 | 85 | |
| 74 | 86 | var upSort = function(a, b){ |
| 75 | 87 | return a.outStationNmber - b.outStationNmber; |
| ... | ... | @@ -84,7 +96,7 @@ var _data = (function(){ |
| 84 | 96 | |
| 85 | 97 | for(var i = start, obj; obj = array[i++];){ |
| 86 | 98 | |
| 87 | - if(obj.station.stationName == station.stationName){ | |
| 99 | + if(obj.stationName == station.stationName){ | |
| 88 | 100 | res = i; |
| 89 | 101 | break; |
| 90 | 102 | } |
| ... | ... | @@ -93,6 +105,50 @@ var _data = (function(){ |
| 93 | 105 | return res; |
| 94 | 106 | } |
| 95 | 107 | |
| 108 | + | |
| 109 | + /** | |
| 110 | + * 刷新GPS车辆信息 | |
| 111 | + */ | |
| 112 | + function refreshGps(cb){ | |
| 113 | + $.ajax({ | |
| 114 | + url: '/gps/real/line', | |
| 115 | + data: {lineCodes: lineCodes}, | |
| 116 | + timeout: 5000,//5秒超时 | |
| 117 | + success: getGpsSuccess, | |
| 118 | + error: getGpsError | |
| 119 | + }); | |
| 120 | + | |
| 121 | + function getGpsSuccess(gpsList){ | |
| 122 | + if(!gpsList || gpsList.length == 0) | |
| 123 | + return; | |
| 124 | + | |
| 125 | + var prve = allGps | |
| 126 | + ,addArray = [] | |
| 127 | + ,upArray = [] | |
| 128 | + ,oldGps; | |
| 129 | + for(var i = 0, gps; gps=gpsList[i++];){ | |
| 130 | + oldGps = prve[gps.deviceId]; | |
| 131 | + if(!oldGps){ | |
| 132 | + //添加 | |
| 133 | + prve[gps.deviceId] = gps; | |
| 134 | + addArray.push(gps); | |
| 135 | + } | |
| 136 | + else if(gps.timestamp > oldGps.timestamp){ | |
| 137 | + //更新 | |
| 138 | + upArray.push(gps); | |
| 139 | + } | |
| 140 | + } | |
| 141 | + cb && cb(addArray, upArray); | |
| 142 | + } | |
| 143 | + | |
| 144 | + function getGpsError(jqXHR, textStatus){ | |
| 145 | + if(textStatus === 'error') | |
| 146 | + layer.alert('获取GPS数据时,服务器出现异常', {icon: 2}); | |
| 147 | + else if(textStatus === 'timeout') | |
| 148 | + layer.alert('连接服务器超时', {icon: 2}); | |
| 149 | + } | |
| 150 | + } | |
| 151 | + | |
| 96 | 152 | /** |
| 97 | 153 | * 解析数据成svg想要的格式 |
| 98 | 154 | */ |
| ... | ... | @@ -112,9 +168,9 @@ var _data = (function(){ |
| 112 | 168 | //合并 |
| 113 | 169 | var data = []; |
| 114 | 170 | for(var j = 0; j < up.length; j ++){ |
| 115 | - var upS = up[j].station | |
| 116 | - , downS = down[j].station | |
| 117 | - ,op = {name: [upS.stationName], id: [upS.stationCod, downS.stationCod], type: 2}; | |
| 171 | + var upS = up[j] == null?{}:up[j] | |
| 172 | + ,downS = down[j] == null?{}:down[j] | |
| 173 | + ,op = {name: [upS.stationName], id: [upS.stationCode, downS.stationCode], type: 2, stationMark: upS.stationMark}; | |
| 118 | 174 | |
| 119 | 175 | //编码相同 |
| 120 | 176 | if(upS.stationName != downS.stationName){ |
| ... | ... | @@ -126,8 +182,8 @@ var _data = (function(){ |
| 126 | 182 | down.splice(j, 0, {}); |
| 127 | 183 | }else{ |
| 128 | 184 | for(var t = j; t < dIndex - 1; t++){ |
| 129 | - var temp = down[t].station; | |
| 130 | - data.push({name: [temp.stationName], type:1, id: [temp.stationCod]}); | |
| 185 | + var temp = down[t]; | |
| 186 | + data.push({name: [temp.stationName], type:1, id: [temp.stationCode]}); | |
| 131 | 187 | } |
| 132 | 188 | //delete |
| 133 | 189 | down.splice(j, dIndex - 1 - j); | ... | ... |
src/main/resources/static/pages/control/line/js/drawSvg.js
| ... | ... | @@ -4,10 +4,17 @@ |
| 4 | 4 | */ |
| 5 | 5 | var drawSvg = (function(){ |
| 6 | 6 | |
| 7 | - var mt = 81//顶部距离 | |
| 7 | + var mt = 44//顶部距离 | |
| 8 | 8 | ,p = 132//上下行之间的间隔 |
| 9 | 9 | ,x = d3.scale.linear() |
| 10 | - ,w; | |
| 10 | + ,w | |
| 11 | + ,lineSvgMapp = {} | |
| 12 | + ,lineStations = {} | |
| 13 | + ,seGps = {} //起终点gps信号; | |
| 14 | + | |
| 15 | +/* var arcPath = function(cx, cy, arc){ | |
| 16 | + return 'M' + cx + ',' + cy + ' C' + arc + ',' + (cy + 5) + ' ' + arc + ',' + (cy + p - 13) + ' ' + cx + ',' + (cy + p - 8); | |
| 17 | + }*/ | |
| 11 | 18 | |
| 12 | 19 | var upStation = function(value){ |
| 13 | 20 | return value.type != 1 ; |
| ... | ... | @@ -17,63 +24,65 @@ var drawSvg = (function(){ |
| 17 | 24 | return value.type != 0; |
| 18 | 25 | } |
| 19 | 26 | |
| 20 | - var textY = function(d){ | |
| 21 | - } | |
| 22 | - | |
| 23 | - var upLine = d3.svg.line().x(function(d) { | |
| 27 | + var line = { | |
| 28 | + up: d3.svg.line().x(function(d) { | |
| 24 | 29 | return d.cx; |
| 25 | - }).y(function(){return mt}); | |
| 26 | - | |
| 27 | - var downLine = d3.svg.line().x(function(d) { | |
| 30 | + }).y(function(){return mt}), | |
| 31 | + down: d3.svg.line().x(function(d) { | |
| 28 | 32 | return d.cx; |
| 29 | - }).y(function(){return mt + p}); | |
| 33 | + }).y(function(){return mt + p}) | |
| 34 | + } | |
| 35 | + | |
| 30 | 36 | |
| 31 | 37 | var cx = function(d, i){ |
| 32 | 38 | return x(i); |
| 33 | 39 | } |
| 34 | 40 | |
| 41 | + var cutNbbm = function(nbbm){ | |
| 42 | + return nbbm.substr(nbbm.length - 3, nbbm.length); | |
| 43 | + } | |
| 44 | + | |
| 35 | 45 | var drawSvgObject = { |
| 36 | - init: function(data, container){ | |
| 46 | + init: function(lineId, data, container){ | |
| 47 | + //记录起终点站 | |
| 48 | + $.each(data, function(){ | |
| 49 | + if(this.stationMark == 'B' || this.stationMark == 'E' ) | |
| 50 | + seGps[lineId + '_' + this.id[0]] = []; | |
| 51 | + }); | |
| 52 | + | |
| 37 | 53 | w = $('.line_chart:first').width(); |
| 38 | 54 | var svg = d3.select('#' + container).append('svg') |
| 39 | - .attr('width', w).attr('opacity', 0) | |
| 40 | - ,dLen = data.length; | |
| 55 | + .attr('width', w).attr('opacity', 0) | |
| 56 | + .attr('id', lineId); | |
| 41 | 57 | |
| 42 | - x.range([ 50 , w - 10]).domain([ 0, dLen]); | |
| 58 | + lineSvgMapp[lineId] = svg; | |
| 59 | + lineStations[lineId] = data.slice(0); | |
| 60 | + //抽站 | |
| 61 | + cleanStation(data); | |
| 62 | + var dLen = data.length; | |
| 43 | 63 | |
| 44 | - //上行线条 path | |
| 45 | - svg.append('path') | |
| 46 | - .attr('d', function(){ | |
| 47 | - return upLine([{cx: x(0)}, {cx: x(dLen - 1)}]); | |
| 48 | - }) | |
| 49 | - .attr('class', 'up_path'); | |
| 64 | + x.range([ 60 , w - 15]).domain([ 0, dLen]); | |
| 50 | 65 | |
| 51 | - //下行线条 path | |
| 52 | - svg.append('path') | |
| 53 | - .attr('d', function(){ | |
| 54 | - return downLine([{cx: x(0)}, {cx: x(dLen - 1)}]); | |
| 55 | - }) | |
| 56 | - .attr('class', 'down_path'); | |
| 66 | + //上行线条 | |
| 67 | + drawPath(svg, data, 'up', 11); | |
| 68 | + //下行线条 | |
| 69 | + drawPath(svg, data, 'down', 10); | |
| 57 | 70 | |
| 58 | - //左弧线 path | |
| 71 | +/* //左弧线 path | |
| 59 | 72 | svg.append('path') |
| 60 | 73 | .attr('d', function(){ |
| 61 | - var cx = x(0) - 8 | |
| 62 | - ,cy = mt + 5 | |
| 63 | - ,arc = cx - 18; | |
| 64 | - return 'M' + cx + ',' + cy + ' C' + arc + ',' + (cy + 5) + ' ' + arc + ',' + (cy + p - 13) + ' ' + cx + ',' + (cy + p - 8); | |
| 74 | + var cx = x(0) - 8; | |
| 75 | + return arcPath(cx , mt + 5,cx - 20); | |
| 65 | 76 | }) |
| 66 | 77 | .attr('class', 'up_path arc'); |
| 67 | 78 | |
| 68 | 79 | //右弧线 path |
| 69 | 80 | svg.append('path') |
| 70 | 81 | .attr('d', function(){ |
| 71 | - var cx = x(dLen - 1) + 8 | |
| 72 | - ,cy = mt + 5 | |
| 73 | - ,arc = cx + 18; | |
| 74 | - return 'M' + cx + ',' + cy + ' C' + arc + ',' + (cy + 5) + ' ' + arc + ',' + (cy + p - 13) + ' ' + cx + ',' + (cy + p - 8); | |
| 82 | + var cx = x(dLen - 1) + 8; | |
| 83 | + return arcPath(cx , mt + 5,cx + 20); | |
| 75 | 84 | }) |
| 76 | - .attr('class', 'down_path arc'); | |
| 85 | + .attr('class', 'down_path arc');*/ | |
| 77 | 86 | |
| 78 | 87 | var g = svg.append('g').selectAll('g') |
| 79 | 88 | .data(data) |
| ... | ... | @@ -81,17 +90,13 @@ var drawSvg = (function(){ |
| 81 | 90 | .append('g').attr('class', 'item'); |
| 82 | 91 | |
| 83 | 92 | //上行站点 circle |
| 84 | - g.append('circle') | |
| 85 | - .attr('class', function(d){ | |
| 86 | - if(d.type != 1) | |
| 87 | - return 'up_station_circle'; | |
| 88 | - }) | |
| 89 | - .attr('cx', cx) | |
| 90 | - .attr('cy', mt); | |
| 93 | + drawCircle(g, 'up', lineId); | |
| 94 | + | |
| 95 | + //下行站点 circle | |
| 96 | + drawCircle(g.select(function(d){return d.type!=0?this:null}), 'down', lineId); | |
| 91 | 97 | |
| 92 | 98 | //站点名称 text |
| 93 | - g.append('text') | |
| 94 | - .attr('class', function(d, i){ | |
| 99 | + g.append('text').attr('class', function(d, i){ | |
| 95 | 100 | var c = 'station_text'; |
| 96 | 101 | if(i == 0) |
| 97 | 102 | c += ' start'; |
| ... | ... | @@ -107,15 +112,6 @@ var drawSvg = (function(){ |
| 107 | 112 | .attr('x', function(d, i){return (d.type==3?(x(i) - 8):x(i))}) |
| 108 | 113 | .attr('y', mt + 10); |
| 109 | 114 | |
| 110 | - //下行站点 | |
| 111 | - g.select(function(d){return d.type!=0?this:null}) | |
| 112 | - .append('circle') | |
| 113 | - .attr('class', function(d){ | |
| 114 | - if(d.type != 0) | |
| 115 | - return 'down_station_circle'; | |
| 116 | - }) | |
| 117 | - .attr('cx', cx) | |
| 118 | - .attr('cy', mt + p); | |
| 119 | 115 | |
| 120 | 116 | //上下行不同名(异站合并) |
| 121 | 117 | g.select(function(d){return d.type==3?this:null}) |
| ... | ... | @@ -137,8 +133,8 @@ var drawSvg = (function(){ |
| 137 | 133 | var t = $(this).text() |
| 138 | 134 | len = t.length; |
| 139 | 135 | if(len > 7){ |
| 140 | - $(this).data('fullname', t); | |
| 141 | - return t.substring(0, 7); | |
| 136 | + var sortText = t.substring(0, 7); | |
| 137 | + return sortText; | |
| 142 | 138 | } |
| 143 | 139 | return t; |
| 144 | 140 | }); |
| ... | ... | @@ -146,86 +142,210 @@ var drawSvg = (function(){ |
| 146 | 142 | $(' .text-load', '#'+container).remove(); |
| 147 | 143 | svg.transition().duration(500).attr('opacity', 1); |
| 148 | 144 | |
| 149 | - up(svg, data, g); | |
| 145 | + //GPS点容器 | |
| 146 | + svg.append('g').attr('class', 'gps-g-wrap'); | |
| 147 | + | |
| 148 | + d3.selectAll('g.item circle').select(function(){ | |
| 149 | + return $(this).attr('class')?null:this; | |
| 150 | + }).remove(); | |
| 151 | + | |
| 152 | + }, | |
| 153 | + | |
| 154 | + //画出GPS点 | |
| 155 | + drawVehicle: function(gpsArray){ | |
| 156 | + | |
| 157 | + for(var i = 0, gps; gps = gpsArray[i ++];){ | |
| 158 | + var svg = lineSvgMapp[gps.lineId] | |
| 159 | + ,stionId = gps.lineId + '_' + gps.stopNo | |
| 160 | + ,station = $('#' + stionId) | |
| 161 | + ,c = station.attr('class')||"" | |
| 162 | + ,start = c.indexOf('start') != -1 | |
| 163 | + ,end = c.indexOf('end') != -1; | |
| 164 | + | |
| 165 | + if(station.length == 0) | |
| 166 | + continue; | |
| 167 | + | |
| 168 | + //起终点站GPS信号 | |
| 169 | + if(seGps[stionId]){ | |
| 170 | + seGps[stionId].push(gps); | |
| 171 | + continue; | |
| 172 | + } | |
| 173 | + | |
| 174 | + var cx = parseInt(station.attr('cx')) | |
| 175 | + ,cy = parseInt(station.attr('cy')) | |
| 176 | + ,updown = station.attr('updown') | |
| 177 | + ,gpsGWrap = svg.select('.gps-g-wrap') | |
| 178 | + ,gpscont; | |
| 179 | + | |
| 180 | + if($('g[for='+stionId+']').length == 0){ | |
| 181 | + gpscont = gpsGWrap.append('g') | |
| 182 | + .attr('class', 'station-gps-container') | |
| 183 | + .attr('updown', updown) | |
| 184 | + .attr('for', stionId); | |
| 185 | + }else{ | |
| 186 | + gpscont = gpsGWrap.selectAll('g') | |
| 187 | + .select(function(){return $(this).attr('for') == stionId?this:null}) | |
| 188 | + .classed({'multiple': true}); | |
| 189 | + } | |
| 190 | + var vg = gpscont.selectAll('g[deviceId="'+gps.deviceId+'"]') | |
| 191 | + .data([gps]).enter().append('g') | |
| 192 | + .attr('deviceId', gps.deviceId) | |
| 193 | + .attr('class', 'vehci-g ' + (updown==0?'up':'down')) | |
| 194 | + .attr('station', gps.stopNo); | |
| 195 | + | |
| 196 | + //上下行异常 | |
| 197 | + /*if(!start && !end && updown != gps.upDown){ | |
| 198 | + vg.classed({'updown-error': true}); | |
| 199 | + }*/ | |
| 200 | + | |
| 201 | + vg.append('text') | |
| 202 | + .attr('x', cx + 4).attr('y', cy + 17) | |
| 203 | + .text(cutNbbm(gps.nbbm)); | |
| 204 | + | |
| 205 | + var rect = vg.append('rect').attr('x', cx).attr('y', cy); | |
| 206 | + | |
| 207 | + //tooltip | |
| 208 | + _tooltip.initGpsTip(vg); | |
| 209 | + } | |
| 210 | + | |
| 211 | + //画出起终点GPS信号 | |
| 212 | + var len; | |
| 213 | + for(var eid in seGps){ | |
| 214 | + len = seGps[eid].length; | |
| 215 | + if(len > 0){ | |
| 216 | + var e = $('#' + eid) | |
| 217 | + ,x = parseInt(e.attr('cx')) | |
| 218 | + ,y = parseInt(e.attr('cy')); | |
| 219 | + | |
| 220 | + var svg = lineSvgMapp[seGps[eid][0].lineId]; | |
| 221 | + | |
| 222 | + var gs = svg.append('g').classed({'start': e.attr('class').indexOf('start') != -1, 'park': true}) | |
| 223 | + .selectAll('g').data(seGps[eid]).enter().append('g'); | |
| 224 | + //Y轴居中 | |
| 225 | + y = (y + 66) - len * 13; | |
| 226 | + gs.append('rect') | |
| 227 | + .attr('x', x + 15) | |
| 228 | + .attr('y', function(d, i){ | |
| 229 | + return y + i * 27; | |
| 230 | + }) | |
| 231 | + .classed({'gps-rect': true}); | |
| 232 | + | |
| 233 | + gs.append('text') | |
| 234 | + .attr('x', x + 18) | |
| 235 | + .attr('y', function(d, i){ | |
| 236 | + return y + i * 27 + 17; | |
| 237 | + }) | |
| 238 | + .text(function(d){return cutNbbm(d.nbbm)}); | |
| 239 | + } | |
| 240 | + } | |
| 241 | + | |
| 242 | + /** | |
| 243 | + * 堆叠多个GPS信号 | |
| 244 | + | |
| 245 | + $.each($('.station-gps-container'), function(i, multiGps){ | |
| 246 | + var tArray = $(multiGps).find('g') | |
| 247 | + ,updowm = $(multiGps).attr('updown') | |
| 248 | + ,translateY | |
| 249 | + ,len = tArray.length; | |
| 250 | + | |
| 251 | + var circle = $('#' + $(multiGps).attr('for')) | |
| 252 | + ,c = circle.attr('class') | |
| 253 | + ,start = c.indexOf('start') != -1 | |
| 254 | + ,end = c.indexOf('end') != -1; | |
| 255 | + | |
| 256 | + if(start || end || len > 2){ | |
| 257 | + tArray.hide(); | |
| 258 | + drawNumber(multiGps, len, this, start, end); | |
| 259 | + }if(len == 2){ | |
| 260 | + if(updowm == 0){ | |
| 261 | + translateY = -60; | |
| 262 | + }else | |
| 263 | + translateY = 32; | |
| 264 | + | |
| 265 | + $(tArray[1]).css('transform', 'translate(-15px, '+ translateY +'px)'); | |
| 266 | + } | |
| 267 | + }); */ | |
| 268 | + | |
| 269 | +/* function drawNumber(multiGps, num, that, start, end){ | |
| 270 | + var circle = $('#' + $(multiGps).attr('for')) | |
| 271 | + ,x = circle.attr('cx') | |
| 272 | + ,y = circle.attr('cy'); | |
| 273 | + | |
| 274 | + //数字标记 | |
| 275 | + var numberG = d3.select(that).append('g').attr('class', 'number-g'); | |
| 276 | + | |
| 277 | + if(start) | |
| 278 | + numberG.classed({'start': true});//始发站 | |
| 279 | + else if(end) | |
| 280 | + numberG.classed({'end': true});//终点站 | |
| 281 | + | |
| 282 | + numberG.append('rect').attr('x', x).attr('y', y); | |
| 283 | + numberG.append('text').attr('x', x).attr('y', y).text(num); | |
| 284 | + }*/ | |
| 150 | 285 | } |
| 151 | 286 | }; |
| 152 | 287 | |
| 153 | - //更新 | |
| 154 | - function up(svg, data, g){ | |
| 155 | - /** | |
| 156 | - * ------------- 抽站 -------------------------------- | |
| 157 | - */ | |
| 158 | - var ms = w / 37 | |
| 159 | - ,dLen = data.length; | |
| 160 | - if(ms < dLen){ | |
| 161 | - var rs = dLen - ms | |
| 162 | - ,s = parseInt(dLen / 2 - rs) | |
| 163 | - ,e = (rs + s) * 2; | |
| 164 | - | |
| 165 | - var rsEmes = []; | |
| 166 | - //中间开始,隔站抽 | |
| 167 | - for(;s < e; s +=2) | |
| 168 | - rsEmes.push(g[0][s]); | |
| 169 | - | |
| 170 | - var i = 0; | |
| 171 | - (function(){ | |
| 172 | - var f = arguments.callee; | |
| 173 | - if(i >= rsEmes.length){ | |
| 174 | - upPosi(svg) | |
| 288 | + function drawPath(svg, data,updown, noclear){ | |
| 289 | + svg.append('g').selectAll('path') | |
| 290 | + .data(data.slice(0, data.length - 1)).enter().append('path') | |
| 291 | + .attr('d', function(d, i) { | |
| 292 | + return line[updown]([{cx: x(i)}, {cx: x(i + 1)} ]); | |
| 293 | + }) | |
| 294 | + .attr('class', updown + '_path') | |
| 295 | + .attr('stroke-dasharray', function(d){//虚线 | |
| 296 | + if(d.clear && d.clear != noclear){ | |
| 297 | + $(this).css('stroke-width', '5px'); | |
| 298 | + return '2,1'; | |
| 175 | 299 | } |
| 300 | + return 0; | |
| 301 | + }); | |
| 302 | + } | |
| 303 | + | |
| 304 | + function drawCircle(g, updown, lineId){ | |
| 305 | + var len = g[0].length; | |
| 306 | + g.append('circle') | |
| 307 | + .attr('cx', cx) | |
| 308 | + .attr('cy', updown=='up'?mt:mt + p) | |
| 309 | + .attr('id',function(d){ | |
| 310 | + if(d.id[0] != -1) | |
| 311 | + return lineId + '_' + d.id[0]; | |
| 312 | + }) | |
| 313 | + .attr('updown', updown=='up'?0:1) | |
| 314 | + .attr('class', function(d, i){ | |
| 315 | + var no = updown=='up'?1:0 | |
| 316 | + ,classz= ''; | |
| 317 | + if(d.type != no) | |
| 318 | + classz += (updown + '_station_circle'); | |
| 176 | 319 | |
| 177 | - $(rsEmes[i]).fadeOut(30, function(){ | |
| 178 | - $(this).remove(); | |
| 179 | - i ++; | |
| 180 | - f(); | |
| 181 | - }); | |
| 182 | - })(); | |
| 183 | - } | |
| 320 | + if(i == 0) | |
| 321 | + classz += ' start'; | |
| 322 | + else if(i == len-1) | |
| 323 | + classz += ' end'; | |
| 324 | + | |
| 325 | + return classz; | |
| 326 | + }); | |
| 184 | 327 | } |
| 185 | 328 | |
| 186 | - function upPosi(svg){ | |
| 187 | - //重新等比例位置 | |
| 188 | - var gItems = svg.selectAll('g.item') | |
| 189 | - ,dLen = gItems[0].length; | |
| 190 | - x.domain([ 0, dLen]); | |
| 191 | - gItems.select(function(d, i){ | |
| 192 | - var ts = $(this).find('text') | |
| 193 | - ,xv = x(i); | |
| 194 | - if(ts.length == 2){ | |
| 195 | - xv = x(i) - 8; | |
| 196 | - d3.select(ts[1]) | |
| 197 | - .transition().duration(500)//过渡 | |
| 198 | - .attr('x', x(i) + 8); | |
| 329 | + function cleanStation(data){ | |
| 330 | + var ms = w / 52 | |
| 331 | + ,dLen = data.length; | |
| 332 | + if(ms < dLen){ | |
| 333 | + var end; | |
| 334 | + //最多清理一半 | |
| 335 | + if(ms < dLen / 2) | |
| 336 | + end = parseInt(dLen / 2) + 1; | |
| 337 | + else | |
| 338 | + end = dLen - ms + 1; | |
| 339 | + | |
| 340 | + for(var i = 1; i < end; i ++){ | |
| 341 | + var rem = data[i]; | |
| 342 | + var prev = data[i - 1]; | |
| 343 | + | |
| 344 | + prev.clear = rem.type + 10;//设置哪些点需要虚线连接 | |
| 345 | + data.splice(i, 1);//要被清理的站点 | |
| 346 | + | |
| 199 | 347 | } |
| 200 | - d3.select(ts[0]) | |
| 201 | - .transition().duration(500)//过渡 | |
| 202 | - .attr('x', xv); | |
| 203 | - | |
| 204 | - d3.select(this).selectAll('circle') | |
| 205 | - .transition().duration(500)//过渡 | |
| 206 | - .attr('cx', x(i)); | |
| 207 | - }); | |
| 208 | - //缩线 | |
| 209 | - svg.select('path.up_path') | |
| 210 | - .transition().delay(500).duration(500)//过渡 | |
| 211 | - .attr('d', function(){ | |
| 212 | - return upLine([{cx: x(0)}, {cx: x(dLen - 1)}]); | |
| 213 | - }); | |
| 214 | - | |
| 215 | - svg.select('path.down_path') | |
| 216 | - .transition().delay(500).duration(500)//过渡 | |
| 217 | - .attr('d', function(){ | |
| 218 | - return downLine([{cx: x(0)}, {cx: x(dLen - 1)}]); | |
| 219 | - }); | |
| 220 | - | |
| 221 | - svg.select('path.down_path.arc') | |
| 222 | - .transition().delay(500).duration(500)//过渡 | |
| 223 | - .attr('d', function(){ | |
| 224 | - var cx = x(dLen - 1) + 8 | |
| 225 | - ,cy = mt + 5 | |
| 226 | - ,arc = cx + 18; | |
| 227 | - return 'M' + cx + ',' + cy + ' C' + arc + ',' + (cy + 5) + ' ' + arc + ',' + (cy + p - 13) + ' ' + cx + ',' + (cy + p - 8); | |
| 228 | - }); | |
| 348 | + } | |
| 229 | 349 | } |
| 230 | 350 | |
| 231 | 351 | return drawSvgObject; | ... | ... |
src/main/resources/static/pages/control/line/js/main.js
| 1 | 1 | !function(){ |
| 2 | 2 | |
| 3 | + var gpsOff = 1000 * 60 * 5; | |
| 4 | + | |
| 3 | 5 | var homeObject = { |
| 4 | 6 | init:function(){ |
| 5 | 7 | //初始化主页 |
| ... | ... | @@ -41,14 +43,27 @@ |
| 41 | 43 | |
| 42 | 44 | //svg线路图 |
| 43 | 45 | $.each(lineArray, function(i, obj){ |
| 44 | - _data.queryStationRoute( obj.id, 'line_chart_' + obj.id , drawSvg.init); | |
| 46 | + _data.queryStationRoute( obj.lineCode, 'line_chart_' + obj.lineCode , drawSvg.init); | |
| 45 | 47 | }); |
| 46 | 48 | |
| 47 | - //_data.queryStationRoute( lineArray[2].id, 'line_chart_' + lineArray[2].id , drawSvg.init); | |
| 48 | - | |
| 49 | 49 | $('.line_chart .top .top-remark').slimscroll({ |
| 50 | 50 | height: '47px' |
| 51 | 51 | }); |
| 52 | + | |
| 53 | + //模拟图GPS刷新事件 | |
| 54 | + $('#tab_home').on('gps_refresh', function(e, add, up){ | |
| 55 | + drawSvg.drawVehicle(add); | |
| 56 | + }); | |
| 57 | + | |
| 58 | + //定时刷新GPS | |
| 59 | + _data.startRefreshGpsTimer(); | |
| 60 | + /* setTimeout(function(){ | |
| 61 | + homeObject.refreshGps(function(add, update){ | |
| 62 | + //将新增的点画到模拟图上 | |
| 63 | + drawSvg.drawVehicle(add); | |
| 64 | + }); | |
| 65 | + }, 300);*/ | |
| 66 | + | |
| 52 | 67 | } |
| 53 | 68 | } |
| 54 | 69 | |
| ... | ... | @@ -61,10 +76,21 @@ setTimeout(function(){ |
| 61 | 76 | }); |
| 62 | 77 | $('#top-tabs-wrap .nav-tabs').append(topTabs); |
| 63 | 78 | |
| 64 | - //加载地图页数据 | |
| 65 | - //$('#tab_map').load('/pages/mapmonitor/real/real.html'); | |
| 66 | - | |
| 79 | + setTimeout(function(){ | |
| 80 | + //加载地图页数据 | |
| 81 | + $('#tab_map').load('/pages/mapmonitor/real/real.html'); | |
| 82 | + }, 500); | |
| 67 | 83 | |
| 68 | 84 | homeObject.init(); |
| 85 | + | |
| 69 | 86 | }, 200) |
| 87 | + | |
| 88 | + | |
| 89 | + function gpslistToMap(gpslist){ | |
| 90 | + var map = {} | |
| 91 | + for(var i = 0, gps; gps = gpslist[i++];){ | |
| 92 | + map[gps.deviceId] = gps; | |
| 93 | + } | |
| 94 | + return map; | |
| 95 | + } | |
| 70 | 96 | }(); |
| 71 | 97 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/control/line/temps/home_tp.html
| ... | ... | @@ -4,11 +4,11 @@ |
| 4 | 4 | {{each tabList as tabObj i}} |
| 5 | 5 | <div class="tab-pane {{if i == 0}}active in{{/if}}" id="tab_{{tabObj.id}}"> |
| 6 | 6 | {{each tabObj.array as lineObj j}} |
| 7 | -<div class="row card_wrap" style="{{if j == 0}}margin-top: 0px;{{/if}}"> | |
| 7 | +<div class="row card_wrap" > | |
| 8 | 8 | <div class="col-lg-2 "> |
| 9 | 9 | |
| 10 | 10 | <div class="title"> |
| 11 | - 发往{{lineObj.start}}方向 <span class="badge"> 13 </span> | |
| 11 | + 发往{{lineObj.startStationName}}方向 <span class="badge"> 13 </span> | |
| 12 | 12 | <div class="help_text dropdown"> |
| 13 | 13 | <span class=" blue dropdown-toggle col_hide_1440" |
| 14 | 14 | data-toggle="dropdown" aria-expanded="true" |
| ... | ... | @@ -51,7 +51,7 @@ |
| 51 | 51 | <div class="table_wrap"> |
| 52 | 52 | <table |
| 53 | 53 | class="table table-striped table-bordered table-advance table-hover vehicDataTable" |
| 54 | - style="table-layout: fixed;" id="tab_{{lineObj.id}}_0"> | |
| 54 | + style="table-layout: fixed;" id="tab_{{lineObj.lineCode}}_0"> | |
| 55 | 55 | <colgroup> |
| 56 | 56 | <col style="width: 20%;"> |
| 57 | 57 | <col style="width: 19%;"> |
| ... | ... | @@ -64,7 +64,7 @@ |
| 64 | 64 | </table> |
| 65 | 65 | </div> |
| 66 | 66 | </div> |
| 67 | - <div class="col-lg-8 line_chart" id="line_chart_{{lineObj.id}}"> | |
| 67 | + <div class="col-lg-8 line_chart" id="line_chart_{{lineObj.lineCode}}"> | |
| 68 | 68 | <div class="top"> |
| 69 | 69 | <div class="center"> |
| 70 | 70 | <strong>{{lineObj.name}}</strong> |
| ... | ... | @@ -75,7 +75,7 @@ |
| 75 | 75 | <div class="col-lg-2 down"> |
| 76 | 76 | |
| 77 | 77 | <div class="title"> |
| 78 | - 发往{{lineObj.end}}方向 <span class="badge"> 7 </span> | |
| 78 | + 发往{{lineObj.endStationName}}方向 <span class="badge"> 7 </span> | |
| 79 | 79 | <div class="help_text dropdown"> |
| 80 | 80 | <span class=" blue dropdown-toggle col_hide_1440" |
| 81 | 81 | data-toggle="dropdown" aria-expanded="true" |
| ... | ... | @@ -114,7 +114,7 @@ |
| 114 | 114 | <div class="table_wrap"> |
| 115 | 115 | <table |
| 116 | 116 | class="table table-striped table-bordered table-advance table-hover vehicDataTable" |
| 117 | - style="table-layout: fixed;" id="tab_{{lineObj.id}}_1"> | |
| 117 | + style="table-layout: fixed;" id="tab_{{lineObj.lineCode}}_1"> | |
| 118 | 118 | <colgroup> |
| 119 | 119 | <col style="width: 20%;"> |
| 120 | 120 | <col style="width: 19%;"> | ... | ... |