From 0b8e43d5f5fd889ffcb715dafdaa6d4511532665 Mon Sep 17 00:00:00 2001 From: suerwei <18810552194@163.com> Date: 星期六, 22 六月 2024 18:04:15 +0800 Subject: [PATCH] 摄像头列表功能 --- javaweb-plus/javaweb-admin/src/main/resources/templates/main.html | 536 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 487 insertions(+), 49 deletions(-) diff --git a/javaweb-plus/javaweb-admin/src/main/resources/templates/main.html b/javaweb-plus/javaweb-admin/src/main/resources/templates/main.html index 0dd78b1..5d6e63c 100644 --- a/javaweb-plus/javaweb-admin/src/main/resources/templates/main.html +++ b/javaweb-plus/javaweb-admin/src/main/resources/templates/main.html @@ -2,57 +2,56 @@ <html lang="zh" xmlns:th="http://www.thymeleaf.org"> <head> <th:block th:include="include :: header('寮瑰眰缁勪欢')" /> -<link href="../static/css/bootstrap.min.css" - th:href="@{/css/bootstrap.min.css}" rel="stylesheet" /> -<link href="../static/css/font-awesome.min.css" - th:href="@{/css/font-awesome.min.css}" rel="stylesheet" /> -<link href="../static/css/main/animate.min.css" - th:href="@{/css/main/animate.min.css}" rel="stylesheet" /> -<link href="../static/css/main/style.min862f.css" - th:href="@{/css/main/style.min862f.css}" rel="stylesheet" /> +<link href="../static/css/bootstrap.min.css" th:href="@{/css/bootstrap.min.css}" rel="stylesheet" /> +<link href="../static/css/font-awesome.min.css" th:href="@{/css/font-awesome.min.css}" rel="stylesheet" /> +<link href="../static/css/main/animate.min.css" th:href="@{/css/main/animate.min.css}" rel="stylesheet" /> +<link href="../static/css/main/style.min862f.css" th:href="@{/css/main/style.min862f.css}" rel="stylesheet" /> <link rel="stylesheet" th:href="@{/css/custom/main.css}" /> - <th:block th:include="include :: datetimepicker-css" /> - <style type="text/css"> - .content { - width: 100%; - background-color: rgba(0,0,0,0.01) !important; - } - </style> +<link href="../static/js/elementUI/index.css" th:href="@{/js/elementUI/index.css}" rel="stylesheet" /> + +<style type="text/css"> + .content { + width: 100%; + background-color: rgba(0,0,0,0.01) !important; + padding:10px; + } + [v-cloak]{ + display: none; + } + .ilblock>span{ + display: block; + line-height: 30px; + } + .el-table th, + .el-table tr, + .el-table td { + background-color: transparent; + border: 0px; + color: #4D4D4D; + font-size: 13px; + font-family: Source Han Sans CN Normal, Source Han Sans CN Normal-Normal; + font-weight: Normal; + } + .el-table__body tr, + .el-table__body td { + padding: 0; + height: 22px; + } + .custom-icon:hover { + color: #0981ea; + cursor: pointer; + } +</style> </head> <body class="gray-bg"> - <div class="content"> - <div class="col-sm-12"> - <div class="ibox float-e-margins"> - <div class="ibox-title"> - <h3>娌夐檷鐩戞祴缃戝缓璁惧伐绋嬮」鐩垎甯�</h3> - </div> - <div class="ibox-content"> - - <div class="row"> - <div class="col-sm-8"> - <div id="map_div" style="width: 100%;height: 750px;"></div> - </div> - - <div class="col-sm-4"> - <div> - <div class="col-md-6"> - <span style="font-size:16px;font-weight: bold;line-height: 40px;">鐩戠鍗曚綅椤圭洰缁熻</span> - </div> - <div class="col-md-6" style="z-index:1;"> - <div class="btn-group statistic-btn" style="float: right"> - <button class="btn btn-white" type="button">鎬昏</button> - <button class="btn btn-white" type="button">鏈勾搴�</button> - <button class="btn btn-white" type="button">鏈湀搴�</button> - </div> - </div> - </div> - <div id="rank_chart" style="width: 100%;height: 600px;margin-top: 10px"></div> - </div> - </div> - </div> - </div> + <div class="content" id="app" v-cloak> + <div id="map_div" style="position:fixed;width: 100%;height: 100vh;margin-top: -5px"></div> + <div style="position:fixed;top: 5px"> + <li onclick="careraFunction()" class="el-icon-video-camera custom-icon" style="font-size: 100px;margin-right: 5px;margin-left: -5px;"></li> + <li onclick="tubFunction()" class="el-icon-user custom-icon" style="font-size: 100px;margin-right: 5px;margin-left: -5px;"></li> </div> + <div id="Chart1" style="position:fixed;width: 300px;height: 300px;bottom: -60px;right: -40px"></div> </div> @@ -61,16 +60,455 @@ <script th:src="@{/ajax/libs/flot/jquery.flot.js}"></script> <script th:src="@{/ajax/libs/report/echarts/echarts-all.js}"></script> <script th:src="@{/js/tdt.js}" type="text/javascript"></script> - <script src="http://lbs.tianditu.gov.cn/js/lib/d3/d3.min.js" type="text/javascript"></script> <script src="http://lbs.tianditu.gov.cn/api/js4.0/opensource/openlibrary/D3SvgOverlay.js" type="text/javascript"></script> - <script th:src="@{/js/custom/main.js}"></script> + <script th:src="@{/js/vue.min.js}"></script> + <script th:src="@{/js/elementUI/index.js}"></script> <th:block th:include="include :: sparkline-js" /> - <th:block th:include="include :: footer" /> + <script th:inline="javascript"> + + $(function() { + loadMap(); + getReallyData(); + totalProcess(); + //stationProcess(); + //indexCount(); + //tubLogs(); + }) + //鍦哄湴鍜屽湴鍥剧偣鍑昏仈鍔� + function viewStation(station) { + var lng = station.lng; + var lat = station.lat; + map.centerAndZoom(new T.LngLat(lng, lat), 13); + } + + function tubLogs() { + + const chart = echarts.init(document.getElementById("column-chart")); + const option = { + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow' + } + }, + legend: {}, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true + }, + xAxis: [ + { + type: 'category', + data: [] + } + ], + yAxis: [ + { + type: 'value' + } + ], + series: [ + { + name: '鍑哄簱', + type: 'bar', + emphasis: { + focus: 'series' + }, + data: [], + itemStyle: { + // 淇敼鏌卞瓙鐨勯鑹� + color: '#e2b507' + } + }, + { + name: '鍏ュ簱', + type: 'bar', + stack: 'Ad', + emphasis: { + focus: 'series' + }, + data: [], + itemStyle: { + // 淇敼鏌卞瓙鐨勯鑹� + color: '#2992c6' + } + }, + + ] + }; + + let url = ctx + "/system/stat/tubLogData"; + $.ajaxSettings.async = false; + $.get(url,{},function(res){ + vm.tubLogs = res.tubLogs; + + res.tubLogs.forEach(function(value, index, array) { + const tubName = value.tubName; + const inboundNumber = value.inboundNumber; + const outboundNumber = value.outboundNumber; + const unit = value.unit; + option.xAxis[0].data[index] = tubName; + option.series[0].data[index] = outboundNumber; + option.series[1].data[index] = inboundNumber; + }); + chart.setOption(option, true); + }) + $.ajaxSettings.async = false; + } + + //棣栭〉绗竴琛屼釜鏁扮粺璁� + function indexCount() { + let url = ctx + "/system/stat/indexDataCount"; + $.ajaxSettings.async = false; + $.get(url,{},function(res){ + vm.indexDataCount = res.data; + vm.indexDataCount.cameraCountNaN = 68 -vm.indexDataCount.cameraCount; + }) + $.ajaxSettings.async = false; + + } + + //鎽勫儚澶村垪琛� + function careraFunction() { + let url = ctx + "/system/camera"; + $.modal.openTab("鎽勫儚澶村垪琛�",url); + } + + //绠℃潗缁熻 + function tubFunction() { + let url = ctx + "/system/tub"; + $.modal.openTab("绠℃潗缁熻",url); + } + + //鍦哄湴杩涘害 + function stationProcess() { + let url = ctx + "/system/stat/projectProcess"; + $.ajaxSettings.async = false; + $.get(url,{},function(res){ + vm.stationProcessData = res.projectData; + }) + $.ajaxSettings.async = false; + } + var vm = new Vue({ + el: "#app", + data() { + return { + stationProcessData: [], + indexDataCount :"", + tubLogs:[], + }; + }, + methods: { + tableRowClassName({ row, rowIndex }) { + if (rowIndex % 2 == 0) { + return ""; + } else { + return "warning-row"; + } + }, + } + }); + // 鍔犺浇鍦板浘 + let map=null; + var countries = []; + var countriesOverlay = new T.D3Overlay(init,redraw); + var countriesOverlay1 = new T.D3Overlay(init1,redraw1); + function loadMap() { + map = new T.Map('map_div'); + map.centerAndZoom(new T.LngLat(116.38, 40.2), 9); + + var control = new T.Control.Zoom(); + control.setPosition(T_ANCHOR_TOP_RIGHT); + map.addControl(control);// 娣诲姞缂╂斁骞崇Щ鎺т欢 + var scale = new T.Control.Scale();// 鍒涘缓姣斾緥灏烘帶浠跺璞� + d3.json("/bjfw/js/custom/beijing.json", function (data) { + countries = data.features; + map.addOverLay(countriesOverlay) + countriesOverlay.bringToBack(); + map.addOverLay(countriesOverlay1) + countriesOverlay.bringToBack(); + }); + + //map.setStyle("indigo"); + } + + function init(sel, transform) { + var upd = sel.selectAll('path.geojson').data(countries); + upd.enter() + .append('path') + .attr("class", "geojson") + .attr('stroke', 'grey') + .attr('fill', function (d, i) { + //return d3.hsl(Math.random() * 360, 0.9, 0.5) + return "transparent" + }) + .attr('fill-opacity', '0') + } + function redraw(sel, transform) { + sel.selectAll('path.geojson').each( + function (d, i) { + d3.select(this).attr('d', transform.pathFromGeojson) + } + ) + } + function init1(sel, transform) { + var upd = sel.selectAll('path.geojson1').data(countries); + upd.enter() + .append('path') + .attr("class", "geojson1") + .attr('stroke', 'grey') + .attr('fill', function (d, i) { + return d3.hsl(Math.random() * 360, 0.9, 0.5) + }) + .attr('fill-opacity', '0.1') + } + + function redraw1(sel, transform) { + sel.selectAll('path.geojson1').each( + function (d, i) { + d3.select(this).attr('d', transform.pathFromGeojson) + } + ) + } + + // 鑾峰彇鏁版嵁搴撶湡瀹炴暟鎹� + function getReallyData() { + let url = window.location.protocol + "//" + window.location.host + "/bjfw/system/stat/project"; + $.get(url,function(res){ + var data = res.projects; + showProjectPoint(data); + }) + } + //鍦板浘涓婂睍绀洪」鐩偣 + function showProjectPoint(data){ + var projectIcon; + for(let i =0;i<data.length;i++){ + + if (data[i].status === '1'){ + projectIcon = new T.Icon({ + iconUrl: '/bjfw/images/icon/yellow.png', + iconSize: new T.Point(30, 30), + iconAnchor: new T.Point(6, 40), + }); + }else if (data[i].status === '2'){ + projectIcon = new T.Icon({ + iconUrl: '/bjfw/images/icon/blue.png', + iconSize: new T.Point(30, 30), + iconAnchor: new T.Point(6, 40), + }); + }else { + projectIcon = new T.Icon({ + iconUrl: '/bjfw/images/icon/red.png', + iconSize: new T.Point(30, 30), + iconAnchor: new T.Point(6, 40), + }); + } + + let lng = data[i].lng; + let lat = data[i].lat; + let marker = new T.Marker(new T.LngLat(lng, lat), { title: "鍦哄湴浣嶇疆",icon:projectIcon}); + let proj = infoWindowProject(data[i]); + addClickHandler(proj, marker); + + map.addOverLay(marker); + } + + } + + function infoWindowProject(e){ + + let ids = e.ids + ""; + var sContent = + "<div style='margin:0px;'>" + + "<div>" + + "<div style='margin:1px 0px 1px 2px;width: 200px;'>" + + "<font style='font-weight: bolder;'>鍦哄湴缂栧彿 :</font>" + e.code + "<br>" + + "<font style='font-weight: bolder;'>鍦哄湴鍚嶅瓧 :</font>" + e.fullName + "<br>" + + "<font style='font-weight: bolder;'>璐熻矗浜� :</font>" + e.leader + "<br>" + + "<a class='btn' onclick=viewdata(" +"'" + ids+ "'" + ")>鍦哄湴鏁版嵁</a>" + "<br>" + + "</div>" + + "</div>" + + "</div>"; + return sContent; + } + function viewdata (id) { + $.modal.openTab("鍦哄湴瀵艰埅",ctx+ "/geo/project/navigate?ids="+id); + } + + function addClickHandler(content, marker) { + marker.addEventListener("click", function (e) { + console.log("浣犵偣鍑讳簡",content); + openInfo(content, e) + }); + } + + function openInfo(content, e) { + var point = e.lnglat; + var markerInfoWin = new T.InfoWindow(content, { offset: new T.Point(0, -30) }); // 鍒涘缓淇℃伅绐楀彛瀵硅薄 + map.openInfoWindow(markerInfoWin, point); //寮�鍚俊鎭獥鍙� + } + + + //鎬昏繘搴︿华琛ㄧ洏 + function totalProcess() { + var Chart1 = echarts.init(document.getElementById('Chart1')); + var pointerData = 0; // 浠〃鎸囬拡鏁版嵁 + let url = ctx + "/system/stat/totalProcess"; + $.ajaxSettings.async = false; + $.get(url,{},function(res){ + pointerData = res.pointerData; + pointerData = (pointerData*100).toFixed(0); + }); + + $.ajaxSettings.async = false; + var option = { + backgroundColor: "transparent", + series: [ + { + type: "gauge", + radius: 80, + z: 1, + startAngle: 225, + endAngle: -45, + splitNumber: 50, + title: { + color: "red", + }, + splitLine: { + show: true, + length: 15, + distance: -10, + lineStyle: { + color: "#fff", + width: 1, + }, + }, + detail: { + show: true, + offsetCenter: [0, 60], + fontSize: 22, + formatter: (val) => [`{a|${val}}`, `{b|%}`].join(""), + rich: { + a: { + fontSize: 20, + color: "rgba(84, 108, 198, 0.65)", + }, + b: { + fontSize: 24, + color: "rgba(84, 108, 198, 0.65)", + }, + }, + }, + // 浠〃鐩樼殑绾匡紝棰滆壊鍊间负涓�涓暟缁� + axisLine: { + show: true, + // 涓ょ鏄惁璁剧疆涓哄渾瑙掞紱鍦�5.0涔嬪悗鐨勭増鏈湁鏁� + roundCap: false, + lineStyle: { + width: 15, + shadowColor: "#0093ee", //榛樿閫忔槑 + shadowOffsetX: 0, + shadowOffsetY: 0, + shadowBlur: 20, + opacity: 1, + color: [ + [ + pointerData / 100, + { + x: 0, + y: 0, + x1: 1, + y1: 0, + colorStops: [ + { + offset: 0, + color: "rgba(0, 255, 255, 0.6)", + }, + { + offset: 1, + color: "rgba(0, 0, 255, .6)", + }, + ], + }, + ], + [1, "rgba(0,0,0,0.15)"], + ], + }, + }, + // 浠〃鐩樺埢搴︽爣绛� + axisLabel: { + show: true, + color: "rgba(84, 108, 198, 0.65)", + fontSize: 14, + distance: 20, + formatter: (val) => { + const num = Math.floor(val); + return num % 20 === 0 ? num : ""; + }, + }, + // 鍒诲害 + axisTick: { + show: false, + }, + // 鎸囬拡锛屾璁剧疆浠呭5.0浠ヤ笂鐨勭増鏈敓鏁� + anchor: { + show: true, + icon: "circle", + showAbove: true, + size: 20, + itemStyle: { + borderWidth: 6, + borderColor: "rgba(84, 108, 198, 0.85)", + }, + }, + data: [pointerData], + }, + { + // 鑳屾櫙娓愬彉鑹� + type: "pie", + radius: "80%", + // 涓嶅搷搴斿強瑙﹀彂榧犳爣浜嬩欢 + silent: true, + // 鍏抽棴鑳屾櫙鍔ㄧ敾 + animation: false, + z: 0, + itemStyle: { + color: { + type: "radial", // 寰勫悜娓愬彉 + x: 0.5, + y: 0.5, + r: 0.25, + colorStops: [ + { + offset: 0, + color: "rgba(84, 103, 198, 0.6)", + }, + { + offset: 0.1, + color: "rgba(84, 103, 198, 0.35)", + }, + { + offset: 1, + color: "rgba(84, 103, 198, 0)", + }, + ], + }, + }, + data: [pointerData], + }, + ], + }; + Chart1.setOption(option); + } + +</script> </body> </html> -- Gitblit v1.9.1