<template> <div class="bigscreen"> <header class="screen-header"> <!-- <div class="top-bg"></div> --> <div class="header-title"> <div class="header-left"> <div class="now-page headerchoice">当前主页</div> <div class="now-date">{{ nowDate.date }}</div> </div> <div class="header-right"> <a href="/" class="go-index headerchoice">后台管理</a> <div class="now-time font_digit">{{ nowDate.time }}</div> <div class="go-index headertime"></div> </div> <h1> {{ screenTitle }} <!-- <div class="shine shine2">star</div> --> </h1> </div> </header> <section class="screen-section"> <div class="section-left"> <div class="section-content card"> <div class="card-title"><i>天气预报</i></div> <div class="card-content"> <div id="weather1" class="weather"> <div class="rt1-info"> <p style="color: #fff">天气接口暂停服务</p> </div> </div> </div> </div> <div class="section-content card"> <div class="card-title"> <i>累计降雨量柱状图</i> </div> <div class="card-content"> <div class="left-chart" ref="left1" id="left1"></div> </div> </div> <div class="section-content card"> <div class="card-title"> <i>气象环境曲线图</i> </div> <div class="card-content"> <ChartsForLine :ChartsForLineParant="singleLineLeft2" v-if="singleLineLeft2" /> </div> </div> <div class="section-content card"> <div class="card-title"> <i>地下水位曲线图</i> </div> <div class="card-content"> <ChartsForLine :ChartsForLineParant="singleLineLeft3" v-if="singleLineLeft3" /> </div> </div> </div> <div class="section-mid"> <div class="mid-top"></div> <div class="mid-fir"> <div class="section-content card"> <div class="card-title"><i>雷达实时图</i></div> <div class="card-content"> <div class="map"></div> </div> </div> <!-- --> </div> <div class="mid-sec"> <div class="section-content card" style="margin-right: 4px"> <div class="card-title"> <i>爆破振动曲线图</i> </div> <div class="card-content"> <ChartsForLine :ChartsForLineParant="singleLineMid1" v-if="singleLineMid1" /> </div> </div> <div class="section-content card" style="margin-left: 4px"> <div class="card-title"> <i>地表裂缝曲线图</i> </div> <div class="card-content"> <div id="mid2"></div> </div> </div> </div> </div> <div class="section-right"> <div class="section-content card"> <div class="card-title"> <i>设备在线率</i> </div> <div class="card-content"> <div id="pie" class="pie3d"></div> <!-- <div class="left-chart" ref="left1" id="left1"></div> --> </div> </div> <div class="section-content card"> <div class="card-title"> <i>土压力监测图</i> </div> <div class="card-content"> <div id="ground-pre"></div> </div> </div> <div class="section-content card"> <div class="card-title"> <i>地面隆起监测图</i> </div> <div class="card-content"> <div id="right3"></div> </div> </div> <div class="section-content card"> <div class="card-title"> <i>实时报警数据列表</i> </div> <div class="card-content"> <div class="yinhuan"> <div class="yinhuan-left"> <div class="yinhuan-lefttop yinhuan-left-item"> <span class="yinhuan-item-top" v-if="troubleNum[0].value1">{{ troubleNum[0].value1 }}</span> <span class="yinhuan-item-top" v-else>{{ 1 }}</span> <span class="yinhuan-item-bottom">隐患数量</span> </div> <div class="yinhuan-leftbottom yinhuan-left-item"> <span class="yinhuan-item-top" v-if="troubleNum[0].value2">{{ troubleNum[0].value2 }}</span> <span class="yinhuan-item-top" v-else>{{ 1 }}</span> <span class="yinhuan-item-bottom">已经处理</span> </div> </div> <div class="yinhuan-right"> <div class="lcl-table"> <div class="lcl-table-header"> <span>日期</span> <span>发现方式</span> <span>处置方式</span> </div> <div class="lcl-table-body scrollingout"> <div class="lcl-tr" v-for="item in troubleData" :key="item.id" > <span class="lcl-td" :title="item.plandisposaltime">{{ item.plandisposaltime }}</span> <span class="lcl-td" :title="item.troublename">{{ item.troublename }}</span> <span class="lcl-td"> {{ item.status | yinhuanFilter }} </span> </div> </div> </div> </div> </div> </div> </div> </div> </section> </div> </template> <script> // import { defineComponent } from '@vue/composition-api' //npm install echarts@4.9.0 --save import Vue from "vue"; import ElementUI from "element-ui"; Vue.use(ElementUI); import * as echarts from "echarts"; // import cuAmap from "@/components/AMap"; import lineCharts from "@/components/lclEcharts/lineCharts"; import nLineCharts from "@/components/lclEcharts/nLineCharts"; import ChartsForLine from "@/components/lclEcharts/ChartsForLine"; import { getSevenTime, getAfterSevenTime } from "@/components/lclEcharts/time"; import { getWeather } from "@/api/lclApi/lclapi"; import Highcharts from "highcharts/highstock"; import HighchartsMore from "highcharts/highcharts-more"; import HighchartsDrilldown from "highcharts/modules/drilldown"; import Highcharts3D from "highcharts/highcharts-3d"; HighchartsMore(Highcharts); HighchartsDrilldown(Highcharts); Highcharts3D(Highcharts); (function (H) { Highcharts.wrap( Highcharts.seriesTypes.pie.prototype, "translate", function (proceed) { proceed.apply(this, [].slice.call(arguments, 1)); if (!this.chart.is3d()) { return; } this.data.forEach((d) => { // 修改 3 if (d.options.depth && typeof d.options.depth === "number") { d.shapeArgs.depth = d.shapeArgs.depth * 0.75 + d.options.depth; } }); } ); var cos = Math.cos, sin = Math.sin, PI = Math.PI, dFactor = (4 * (Math.sqrt(2) - 1)) / 3 / (PI / 2); function curveTo(cx, cy, rx, ry, start, end, dx, dy) { var result = [], arcAngle = end - start; if (end > start && end - start > Math.PI / 2 + 0.0001) { result = result.concat( curveTo(cx, cy, rx, ry, start, start + Math.PI / 2, dx, dy) ); result = result.concat( curveTo(cx, cy, rx, ry, start + Math.PI / 2, end, dx, dy) ); return result; } if (end < start && start - end > Math.PI / 2 + 0.0001) { result = result.concat( curveTo(cx, cy, rx, ry, start, start - Math.PI / 2, dx, dy) ); result = result.concat( curveTo(cx, cy, rx, ry, start - Math.PI / 2, end, dx, dy) ); return result; } return [ [ "C", cx + rx * Math.cos(start) - rx * dFactor * arcAngle * Math.sin(start) + dx, cy + ry * Math.sin(start) + ry * dFactor * arcAngle * Math.cos(start) + dy, cx + rx * Math.cos(end) + rx * dFactor * arcAngle * Math.sin(end) + dx, cy + ry * Math.sin(end) - ry * dFactor * arcAngle * Math.cos(end) + dy, cx + rx * Math.cos(end) + dx, cy + ry * Math.sin(end) + dy, ], ]; } Highcharts.SVGRenderer.prototype.arc3dPath = function (shapeArgs) { let cx = shapeArgs.x || 0, // x coordinate of the center cy = shapeArgs.y || 0, // y coordinate of the center start = shapeArgs.start || 0, // start angle end = (shapeArgs.end || 0) - 0.00001, // end angle r = shapeArgs.r || 0, // radius ir = shapeArgs.innerR || 0, // inner radius d = shapeArgs.depth || 0, // depth alpha = shapeArgs.alpha || 0, // alpha rotation of the chart beta = shapeArgs.beta || 0; // beta rotation of the chart // Derived Variables const cs = Math.cos(start), // cosinus of the start angle ss = Math.sin(start), // sinus of the start angle ce = Math.cos(end), // cosinus of the end angle se = Math.sin(end), // sinus of the end angle rx = r * Math.cos(beta), // x-radius ry = r * Math.cos(alpha), // y-radius irx = ir * Math.cos(beta), // x-radius (inner) iry = ir * Math.cos(alpha), // y-radius (inner) dx = d * Math.sin(beta), // distance between top and bottom in x dy = d * Math.sin(alpha); // distance between top and bottom in y // 修改 1 cy -= dy; // TOP let top = [["M", cx + rx * cs, cy + ry * ss]]; top = top.concat(curveTo(cx, cy, rx, ry, start, end, 0, 0)); top.push(["L", cx + irx * ce, cy + iry * se]); top = top.concat(curveTo(cx, cy, irx, iry, end, start, 0, 0)); top.push(["Z"]); // OUTSIDE const b = beta > 0 ? Math.PI / 2 : 0, a = alpha > 0 ? 0 : Math.PI / 2; const start2 = start > -b ? start : end > -b ? -b : start, end2 = end < PI - a ? end : start < PI - a ? PI - a : end, midEnd = 2 * PI - a; // When slice goes over bottom middle, need to add both, left and right // outer side. Additionally, when we cross right hand edge, create sharp // edge. Outer shape/wall: // // ------- // / ^ \ // 4) / / \ \ 1) // / / \ \ // / / \ \ // (c)=> ==== ==== <=(d) // \ \ / / // \ \<=(a)/ / // \ \ / / <=(b) // 3) \ v / 2) // ------- // // (a) - inner side // (b) - outer side // (c) - left edge (sharp) // (d) - right edge (sharp) // 1..n - rendering order for startAngle = 0, when set to e.g 90, order // changes clockwise (1->2, 2->3, n->1) and counterclockwise for // negative startAngle let out = [["M", cx + rx * cos(start2), cy + ry * sin(start2)]]; out = out.concat(curveTo(cx, cy, rx, ry, start2, end2, 0, 0)); // When shape is wide, it can cross both, (c) and (d) edges, when using // startAngle if (end > midEnd && start < midEnd) { // Go to outer side out.push(["L", cx + rx * cos(end2) + dx, cy + ry * sin(end2) + dy]); // Curve to the right edge of the slice (d) out = out.concat(curveTo(cx, cy, rx, ry, end2, midEnd, dx, dy)); // Go to the inner side out.push(["L", cx + rx * cos(midEnd), cy + ry * sin(midEnd)]); // Curve to the true end of the slice out = out.concat(curveTo(cx, cy, rx, ry, midEnd, end, 0, 0)); // Go to the outer side out.push(["L", cx + rx * cos(end) + dx, cy + ry * sin(end) + dy]); // Go back to middle (d) out = out.concat(curveTo(cx, cy, rx, ry, end, midEnd, dx, dy)); out.push(["L", cx + rx * cos(midEnd), cy + ry * sin(midEnd)]); // Go back to the left edge out = out.concat(curveTo(cx, cy, rx, ry, midEnd, end2, 0, 0)); // But shape can cross also only (c) edge: } else if (end > PI - a && start < PI - a) { // Go to outer side out.push([ "L", cx + rx * Math.cos(end2) + dx, cy + ry * Math.sin(end2) + dy, ]); // Curve to the true end of the slice out = out.concat(curveTo(cx, cy, rx, ry, end2, end, dx, dy)); // Go to the inner side out.push(["L", cx + rx * Math.cos(end), cy + ry * Math.sin(end)]); // Go back to the artifical end2 out = out.concat(curveTo(cx, cy, rx, ry, end, end2, 0, 0)); } out.push([ "L", cx + rx * Math.cos(end2) + dx, cy + ry * Math.sin(end2) + dy, ]); out = out.concat(curveTo(cx, cy, rx, ry, end2, start2, dx, dy)); out.push(["Z"]); // INSIDE let inn = [["M", cx + irx * cs, cy + iry * ss]]; inn = inn.concat(curveTo(cx, cy, irx, iry, start, end, 0, 0)); inn.push([ "L", cx + irx * Math.cos(end) + dx, cy + iry * Math.sin(end) + dy, ]); inn = inn.concat(curveTo(cx, cy, irx, iry, end, start, dx, dy)); inn.push(["Z"]); // SIDES const side1 = [ ["M", cx + rx * cs, cy + ry * ss], ["L", cx + rx * cs + dx, cy + ry * ss + dy], ["L", cx + irx * cs + dx, cy + iry * ss + dy], ["L", cx + irx * cs, cy + iry * ss], ["Z"], ]; const side2 = [ ["M", cx + rx * ce, cy + ry * se], ["L", cx + rx * ce + dx, cy + ry * se + dy], ["L", cx + irx * ce + dx, cy + iry * se + dy], ["L", cx + irx * ce, cy + iry * se], ["Z"], ]; // correction for changed position of vanishing point caused by alpha // and beta rotations let angleCorr = Math.atan2(dy, -dx), angleEnd = Math.abs(end + angleCorr), angleStart = Math.abs(start + angleCorr), angleMid = Math.abs((start + end) / 2 + angleCorr); /** * set to 0-PI range * @private */ function toZeroPIRange(angle) { angle = angle % (2 * Math.PI); if (angle > Math.PI) { angle = 2 * Math.PI - angle; } return angle; } angleEnd = toZeroPIRange(angleEnd); angleStart = toZeroPIRange(angleStart); angleMid = toZeroPIRange(angleMid); // *1e5 is to compensate pInt in zIndexSetter const incPrecision = 1e5, a1 = angleMid * incPrecision, a2 = angleStart * incPrecision, a3 = angleEnd * incPrecision; let result = { top: top, // max angle is PI, so this is always higher zTop: Math.PI * incPrecision + 1, out: out, zOut: Math.max(a1, a2, a3), inn: inn, zInn: Math.max(a1, a2, a3), side1: side1, // to keep below zOut and zInn in case of same values zSide1: a3 * 0.99, side2: side2, zSide2: a2 * 0.99, }; // 修改 2 result.zTop = (result.zOut + 0.5) / 100; return result; }; })(Highcharts); export default { data() { return { screenTitle: "隧道结构稳定性监测系统", nowDate: "2023-01-01", nowTime: "23:59:59", jxlEquipno: 19, swEquipno: 2, fsdEquipno: 18, jrxDevList: [{ equipname: "双山水库渗压1-1", equipno: "ss0511" }], jrxDevValue: "ss0511", wyDevList: [{ equipname: "双山水库渗压1-1", equipno: "ss0511" }], wyDevValue: "ss0511", troubleNum: [{ value1: "1", value2: "1" }], troubleData: [ { plandisposaltime: "2023-03-20", troublename: "人工巡检", status: "1", }, ], cgxObj: { num: 4, arr: [{ id: 1, cgq: [] }], }, left1Data: [2, 4, 5, 2, 2, 1, 2], singleLineLeft2: { chartId: "chartid2", }, singleLineLeft3: { chartId: "chartid3", }, singleLineLeft4: { chartId: "chartid4", }, singleLineRight1: { chartId: "chartid4", }, singleLineJrx: { chartId: "chartid4", }, nLineChartsWy: { chartId: "chartidwy", }, singleLineMid1: { chartId: "chartid5", }, satellite: false, //视频 videoList: [ { id: "1", url: "", name: "视频1" }, { id: "2", url: "", name: "视频2" }, { id: "3", url: "", name: "视频3" }, { id: "4", url: "", name: "视频4" }, ], mapBtn: 0, mapOptions: { zooms: [4, 20], center: [120.08, 36.95], zoom: 10, mapStyle: "amap://styles/blue", layers: null, }, mapBaseInfor: [{ longitude: "122.05", latitude: "37.49", name: "水库1" }], beforeSevenDay: ["03-25"], d3nterval: null, d3data: [ { name: "离线", y: 1, sliced: true, selected: true, depth: 5 }, { name: "在线", y: 3, sliced: true, selected: true, depth: 8 }, ], }; }, components: { lineCharts, nLineCharts, ChartsForLine, }, created() { var that = this; this.$nextTick(() => { // this.amapInfor(); // var satellite = new AMap.TileLayer.Satellite(); // var roadNet = new AMap.TileLayer.RoadNet(); // new AMap.Map("A_Map", that.mapOptions); }); }, mounted() { let that = this; this.$nextTick(() => { this.beforeSevenDay = getSevenTime(7); console.log(this.beforeSevenDay, "this.beforeSevenDay"); setInterval(this.getNowTime, 1000); this.weather(); this.left1Year(); // this.pieFun(); that.highchart3d(); this.d3nterval = setInterval(function () { if (that.d3data[1].depth == 5) { that.d3data = [ { name: "离线", y: 1, sliced: true, selected: true, depth: 5 }, { name: "在线", y: 3, sliced: true, selected: true, depth: 8 }, ]; } else { that.d3data = [ { name: "离线", y: 1, sliced: true, selected: true, depth: 8 }, { name: "在线", y: 3, sliced: true, selected: true, depth: 5 }, ]; } that.highchart3d(); }, 5000); this.groundFun(); this.mid2Fun(); this.right3Fun(); this.loading(); }); }, beforeDestroy() { clearInterval(this.d3nterval); }, filters: { yinhuanFilter(v) { let value = Number(v); if (value === 1) { return "已处理"; } else { return "未处理"; } }, }, methods: { loading() { this.singleLineLeft2 = { chartId: "left2", color: ["#00FFDE"], chartType: "line", unit: "", axisLabel: "#BAE7FF", grid: { left: "10%", right: "5%", bottom: "10%", top: "15%", z: 22, }, showlegend: false, legendItem: ["气象"], xAxisData: this.beforeSevenDay, yData: [[0.2, 0.4, 0.5, 0.2, 0.2, 0.1, 0.2]], }; this.singleLineLeft3 = { chartId: "left3", color: ["#18AAF6"], chartType: "line", unit: "mm", axisLabel: "#BAE7FF", grid: { left: "10%", right: "5%", bottom: "10%", top: "15%", z: 22, }, showlegend: false, legendItem: ["地下水"], xAxisData: this.beforeSevenDay, yData: [[0.5, 0.2, 0.3, 0.1, 0.2, 0.1, 0.3]], }; this.singleLineMid1 = { chartId: "mid1", color: ["#F9EB0C"], chartType: "line", unit: "mm", axisLabel: "#BAE7FF", grid: { left: "10%", right: "5%", bottom: "10%", top: "15%", z: 22, }, showlegend: false, legendItem: ["爆破振动"], xDataShow: "1", xAxisData: "", yData: [ [ 200, 444, 300, 10, 200, 123, 200, 200, 444, 300, 10, 200, 123, 200, 200, 444, 300, 200, 200, 123, 200, 200, 444, 300, 200, 200, 123, 200, 200, 444, 300, 200, 200, 123, 200, 200, 444, 1000, 200, 200, 123, 200, 200, 600, 1000, 200, 200, 123, 200, 200, 600, 1000, 10, 200, 123, 200, 200, 600, 1000, 10, 200, 123, 200, 200, 600, 500, 10, 200, 123, 200, 200, 444, 500, -500, 200, 123, 200, 200, 444, 500, -500, 200, 123, 200, ], ], }; }, left1Year() { let that = this; let myChart = echarts.init(document.getElementById("left1")); let option = { // backgroundColor: "#0a142f", color: ["#0EECE4"], tooltip: { // trigger: 'axis', confine: true, // axisPointer: { // 坐标轴指示器,坐标轴触发有效 // type: 'line', // 默认为直线,可选为:'line' | 'shadow' // lineStyle: { // color: 'transparent', // }, // }, }, grid: { left: "12%", right: "5%", bottom: "15%", top: "10%", z: 22, }, xAxis: [ { type: "category", // gridIndex: 0, data: that.beforeSevenDay, axisLine: { lineStyle: { color: "#BAE7FF", }, }, axisLabel: { show: true, color: "#BAE7FF", fontSize: 11, // formatter: (value) => { // let labelArr = value.split(""); // labelArr.splice(4, 0, "\n\n"); // return labelArr.join(""); // }, }, }, ], yAxis: [ { type: "value", name: "", nameTextStyle: { fontSize: 11, color: "#68B4DD", align: "left", }, splitArea: { show: false }, gridIndex: 0, splitLine: { show: true, lineStyle: { color: "rgba(186,231,255,.3)", type: "dashed ", }, }, axisTick: { show: false, }, min: 0, axisLine: { show: true, // inside: true, lineStyle: { color: "#BAE7FF", }, }, axisLabel: { show: true, }, max: Math.max.apply(null, that.left1Data) * 1.5, }, { type: "value", splitArea: { show: false }, gridIndex: 0, min: 0, splitNumber: 12, splitLine: { show: false, }, axisLine: { show: false, }, axisTick: { show: false, }, axisLabel: { show: false, }, max: Math.max.apply(null, that.left1Data) * 1.5, }, ], series: [ { data: that.left1Data, name: "", type: "bar", barWidth: "30%", xAxisIndex: 0, yAxisIndex: 0, label: { show: true, position: "top", distance: 15, color: "#fff", fontSize: 11, formatter: "{c}", }, itemStyle: { normal: { //圆角 barBorderRadius: [30, 30, 0, 0], color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ { offset: 0, color: "#0EECE4", }, { offset: 1, color: "#058FE7", }, ]), }, }, zlevel: 11, }, { name: "", type: "bar", barWidth: "50%", xAxisIndex: 0, yAxisIndex: 1, barGap: "-135%", data: that.left1Data.map( () => Math.max.apply(null, that.left1Data) * 1.5 ), tooltip: { backgroundColor: "transparent", formatter: " ", }, itemStyle: { normal: { color: "rgba(255,255,255,0.1)", }, }, zlevel: 9, }, ], }; myChart.setOption(option); setTimeout(() => { myChart.resize(); }, 600); }, // 水位趋势图 weather() { getWeather({ c: "code", a: "getcode", id: 48, icon: 1, py: "weihai", }).then((res) => { var body = document.createElement("div"); var weather = this.$el.querySelector("#weather1"); setTimeout(function () { body.innerHTML = res; var styles = body.querySelectorAll("link"); for (var style of styles) { body.removeChild(style); } var scripts = body.querySelectorAll("script"); for (var script of scripts) { script.parentNode.removeChild(script); } // 查看图片 var img = body.querySelector("#day_1 .img").firstElementChild; img.src = "http://plugin.tianqistatic.com/static/" + img.src.split("static/")[1]; // 修剪dom var mobile05 = body.querySelector("#mobile05"); mobile05.removeChild(mobile05.firstElementChild); mobile05.removeChild(mobile05.lastElementChild); var childs = mobile05.children; for (var child of childs) { child.innerHTML = child.firstElementChild.innerHTML; } weather.innerHTML = body.innerHTML; }, 300); }); }, //设备在线率 pieFun() { let that = this; var isSet = true; var charPie3currentIndex = 0; let myChart = echarts.init(document.getElementById("pie")); var colorList = ["#22D7BB", "#24AAFF", "#5EDDF8", "#FCB840", "#F9D660"]; let color1 = [ ["rgba(34,215,187,0.5)", "rgba(34,215,187,1)"], ["rgba(36,170,255,0.5)", "rgba(36,170,255,1)"], ]; var scale = 1; var echartData = [ { name: "离线", value: 1 }, { name: "在线", value: 3 }, ]; let unit = "个"; let option = { color: colorList, grid: { bottom: 150, left: 0, right: "10%", }, legend: { show: false, orient: "vertical", top: "middle", right: "5%", textStyle: { color: "#f2f2f2", fontSize: 25, }, icon: "roundRect", }, series: [ // 主要展示层的 { radius: "82%", center: ["50%", "50%"], name: "", type: "pie", hoverAnimation: true, color: [ "#c487ee", "#deb140", "#49dff0", "#034079", "#6f81da", "#00ffb4", ], label: { normal: { formatter: function (params, ticket, callback) { var total = 0; //考生总数量 var percent = 0; //考生占比 echartData.forEach(function (value, index, array) { total += value.value; }); percent = ((params.value / total) * 100).toFixed(1); return ( "{normal|" + params.name + " " + percent + "%}\n{value|" + params.value + "}{unit|" + unit + "}" ); }, padding: [0, -0], rich: { normal: { fontSize: 12 * scale, padding: [15, 4], align: "center", }, value: { align: "center", fontSize: 26 * scale, }, unit: { padding: [0, 0, 5 * scale, 0], }, }, }, }, labelLine: { length: 20 * scale, length2: 30, }, itemStyle: { borderColor: "#03213E", borderWidth: 7, }, data: echartData, }, ], }; myChart.setOption(option); setTimeout(() => { // myChart.clear(); // window.onresize = function () { myChart.resize(); // }; }, 900); }, //highchart3d highchart3d() { var echartData = this.d3data; var chart = Highcharts.chart("pie", { chart: { type: "pie", backgroundColor: "rgba(0,0,0,0)", options3d: { enabled: true, alpha: 60, beta: 0, }, animation: false, }, colors: [ //扇形颜色 "#00A8FF", "#00D7E9", "#5f75e5", "#67acfe", "#5f75e5", "#7ca2ff", "#4bcdec", "#6648ff", "#5f75e5", "#5a9be7", ], title: { text: "", }, credits: { enabled: false, // 禁用版权信息 }, tooltip: { pointFormat: "{series.name}: <b>{point.percentage:.1f}%</b>", }, plotOptions: { pie: { allowPointSelect: true, cursor: "pointer", depth: 5, //高度 dataLabels: { enabled: true, // format: "{point.name}: <b>{point.percentage:.1f}%</b>", formatter: function () { return `<p style="color:${this.point.color};font-size:14px;">${this.point.options.name}:<span style="font-family: diget year;font-size:26px;font-wight:blod;">${this.point.options.y}</span>个</p>`; }, }, }, }, series: [ { type: "pie", name: "在线率", data: echartData, animation: false, }, ], }); }, //土压力 groundFun() { let myChart = echarts.init(document.getElementById("ground-pre")); let yLabel = ["W1", "W2", "W3", "W4", "W5", "W6", "W7"]; let yData = [10, 2, 3, 5, 6, 8, 1, 2, 6, 1]; let bgData = []; for (let i in yData) { bgData.push(20); } let option = { grid: { left: "5%", right: "5%", bottom: "5%", top: "10%", containLabel: true, }, dataZoom: [ { start: 0, //默认为0 end: 50, //默认为100 type: "slider", maxValueSpan: 9, //显示数据的条数(默认显示10个) show: true, handleSize: 0, //滑动条的 左右2个滑动条的大小 height: "80%", //组件高度 left: 600, //左边的距离 right: 8, //右边的距离 top: 20, //上边边的距离 borderColor: "rgba(43,48,67,0.8)", fillerColor: "#33384b", //滑动块的颜色 backgroundColor: "rgba(13,33,117,0.5)", //两边未选中的滑动条区域的颜色 showDataShadow: false, //是否显示数据阴影 默认auto showDetail: false, //即拖拽时候是否显示详细数值信息 默认true realtime: true, //是否实时更新 filterMode: "filter", yAxisIndex: [0], //控制的y轴 }, //滑块的属性 { type: "inside", show: true, yAxisIndex: [0, 1], start: 0, //默认为1 end: 50, //默认为100 }, ], tooltip: { trigger: "axis", axisPointer: { type: "none", }, formatter: function (params) { return ( params[0].name + "<br/>" + "<span style='display:inline-block;margin-right:5px;border-radius:10px;width:9px;height:9px;background-color:rgba(36,207,233,0.9)'></span>" + params[0].seriesName + " : " + params[0].value + " <br/>" ); }, }, xAxis: { show: false, type: "value", }, yAxis: [ { type: "category", inverse: true, axisLabel: { show: true, margin: 15, textStyle: { color: "#fff", }, }, splitLine: { show: false, }, axisTick: { show: false, }, axisLine: { show: false, }, data: yLabel, }, { type: "category", inverse: true, axisTick: "none", axisLine: "none", show: true, // axisLabel: { // textStyle: { // color: "#FFF", // fontSize: "12", // }, // }, data: yData, }, ], series: [ { name: "土压力值", type: "bar", zlevel: 1, itemStyle: { normal: { barBorderRadius: [0, 30, 30, 0], color: "#2a82fd", shadowBlur: 0, shadowColor: "rgba(87,220,222,0.7)", }, }, barWidth: 10, data: yData, label: { normal: { show: true, position: "right", color: "#fff", formatter: (params) => { var value = params.value; var suffix = params.data.suffix || "KPa"; //标签显示单位 return value + suffix; }, }, }, }, { name: "背景", type: "bar", barWidth: 10, barGap: "-100%", data: bgData, itemStyle: { normal: { color: "rgba(24,31,68,1)", barBorderRadius: [0, 30, 30, 0], }, }, }, ], }; myChart.setOption(option); setTimeout(() => { // myChart.clear(); // window.onresize = function () { myChart.resize(); // }; }, 900); }, //mid2 地表 mid2Fun() { let myChart = echarts.init(document.getElementById("mid2")); // mock数据 const dataArr = { xdata: [ "12:05", "12:06", "12:07", "12:08", "12:09", "12:10", "12:11", "12:12", "12:13", "12:14", "12:15", "12:16", "12:17", "12:18", "12:19", "12:20", ], // xdata: ['12:05', '12:06', '12:07', '12:08', '12:09'], vaccination: [ 0.2, 0.3, 0.02, 0.1, 0.05, 0.1, 0.09, 0.2, 0.3, 0.02, 0.1, 0.05, 0.1, 0.09, 0.2, 0.3, ], }; // tooltip const tooltip = { trigger: "axis", textStyle: { fontSize: "100%" }, formatter: (params) => { let rander = params .map( (item) => // item.seriesType !== 'pictorialBar' // ? `<div>${item.seriesName}: ${item.seriesType !== 'line' ? item.value : item.value + '%'}</div>` // : '' `<div>${item.seriesName}: ${item.value}</div>` ) .join(""); return ` <div>${params[0].axisValue}</div> ${rander} `; }, }; const legend = { data: ["地表裂隙"], textStyle: { fontSize: 14, color: "#000" }, itemWidth: 25, itemHeight: 15, itemGap: 15, bottom: "5%", show: false, }; const grid = { left: "10%", right: "5%", bottom: "10%", top: "15%", z: 22, }; // xAxis const xAxis = { // boundaryGap: false, type: "category", gridIndex: 0, axisTick: { show: true }, axisLine: { lineStyle: { color: "#BAE7FF", }, onZero: false, }, // splitLine: { lineStyle: { color: "#0562AF" } }, axisLabel: { textStyle: { fontSize: 10, color: "#BAE7FF" } }, data: dataArr.xdata, }; // yAxis const yAxis = [ { show: true, splitLine: { show: true, lineStyle: { color: "rgba(186,231,255,.3)", type: "dashed ", }, }, axisLine: { show: true, lineStyle: { color: "#BAE7FF", }, }, axisLabel: { textStyle: { fontSize: 10, color: "#BAE7FF" } }, }, ]; // series const series = [ { name: "地表裂隙", type: "line", smooth: true, //是否平滑 showAllSymbol: true, // symbol: 'image://./static/images/guang-circle.png', symbol: "circle", symbolSize: 5, lineStyle: { normal: { color: "#00FFFC", // shadowColor: "rgba(0, 0, 0, .3)", // shadowBlur: 0, // shadowOffsetY: 3, // shadowOffsetX: 3, }, }, label: { show: true, position: "top", textStyle: { color: "#F9EB0C", }, }, itemStyle: { color: "#F9EB0C", // borderColor: "#fff", // borderWidth: 1, // shadowColor: "rgba(0, 0, 0, .3)", // shadowBlur: 0, // shadowOffsetY: 2, // shadowOffsetX: 2, }, data: dataArr.vaccination, }, ]; let option = { tooltip, xAxis, yAxis, series, grid, }; myChart.setOption(option); setTimeout(() => { // myChart.clear(); // window.onresize = function () { myChart.resize(); // }; }, 900); }, //right3 right3Fun() { let myChart = echarts.init(document.getElementById("right3")); var ageArea = this.beforeSevenDay; var FbarData = [3100, 2142, 1218, 581, 431, 581, 431]; //男 var MbarData = [-3010, -2742, -218, -381, -521, -381, -521]; //女 let option = { tooltip: { trigger: "axis", axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: "shadow", // 默认为直线,可选为:'line' | 'shadow' }, formatter: function (params, ticket, callback) { console.log(params); var res = params[0].name; for (var i = 0, l = params.length; i < l; i++) { res += "<br/>" + params[i].seriesName + " : " + Math.abs(params[i].value); } setTimeout(function () { // 仅为了模拟异步回调 callback(ticket, res); }, 10); return "loading..."; }, }, legend: { center: true, top: 5, data: ["监测值1", "监测值2"], textStyle: { color: "#BAE7FF", }, }, grid: { left: "3%", right: "4%", bottom: "3%", top: "15%", containLabel: true, }, xAxis: [ { type: "value", axisLabel: { show: true, color: "#BAE7FF", fontSize: 10, formatter: function (value) { return Math.abs(value); //显示的数值都取绝对值 }, }, nameTextStyle: { fontSize: 10, color: "#BAE7FF", align: "left", padding: [5, -5, 0, 0], // 上右下左与原位置距离 }, splitLine: { show: true, lineStyle: { color: "rgba(186,231,255,.3)", type: "dashed ", }, }, axisLine: { show: true, lineStyle: { color: "#BAE7FF", }, }, axisTick: { show: false, }, }, ], yAxis: [ { type: "category", axisTick: { show: false }, nameTextStyle: { fontSize: 10, color: "#BAE7FF", align: "left", padding: [5, -5, 0, 0], // 上右下左与原位置距离 }, axisLine: { show: true, lineStyle: { color: "#BAE7FF", }, }, axisTick: { show: false, }, data: ageArea, }, ], series: [ { name: "监测值1", type: "bar", stack: "总量", label: { normal: { show: true, position: "right", color: "#fff", }, }, data: FbarData, }, { name: "监测值2", type: "bar", stack: "总量", label: { normal: { show: true, position: "left", color: "#fff", formatter: function (v) { return Math.abs(v.data); }, }, }, // data:[-120, -132, -101, -134, -190, -230, -210] data: MbarData, }, ], }; myChart.setOption(option); setTimeout(() => { // myChart.clear(); // window.onresize = function () { myChart.resize(); // }; }, 900); }, //时间 getNowTime() { let date = new Date(); let year = date.getFullYear(); let month = date.getMonth() + 1; let day = date.getDate(); let hour = date.getHours(); let mins = date.getMinutes(); let second = date.getSeconds(); this.nowDate = { date: `${year}-${this.addZero(month)}-${this.addZero(day)}`, time: `${this.addZero(hour)}:${this.addZero(mins)}:${this.addZero( second )}`, }; }, addZero(s) { return s < 10 ? "0" + s : s; }, }, }; window.onload = function () { let testsk = document.querySelector("#testsk"); testsk.onclick = function (e) { console.log(e); }; }; </script> <style lang="scss" scoped> @keyframes opacity-change { 0% { opacity: 0; } 50% { opacity: 1; } 100% { opacity: 0; } } @-webkit-keyframes opacity-change { 0% { opacity: 0; } 50% { opacity: 1; } 100% { opacity: 0; } } @-moz-keyframes opacity-change { 0% { opacity: 0; } 50% { opacity: 1; } 100% { opacity: 0; } } @-o-keyframes opacity-change { 0% { opacity: 0; } 50% { opacity: 1; } 100% { opacity: 0; } } @font-face { font-family: "diget year"; src: url("~@/assets/fonts/DS-Digital.ttf"); } .font_digit { font-family: diget year; } .bigscreen { position: relative; height: 100%; width: 100%; overflow: hidden; box-sizing: border-box; background-color: #0d1d34; background-image: radial-gradient(#082b3f 7.4%, transparent 0); background-size: 0.2rem 0.2rem; color: #fff; ::v-deep .el-dialog { background: url("~@/assets/images/bigscreen/videoBg.png") no-repeat center; background-size: 100%; } ::v-deep .el-dialog__header { border-bottom: none; } ::v-deep .el-dialog__body { padding: 10px 20px; width: 100%; height: 40vh; .video-infor { width: 100%; height: 37vh; display: block; border: 1px solid red; } } ::v-deep .el-dialog__headerbtn .el-dialog__close { color: #fff; } ::v-deep .el-dialog__title { color: #fff; } .lcl-table { width: 100%; height: 100%; .lcl-table-header { width: 100%; height: 0.3rem; background: url("~@/assets/images/bigscreen/table-header.png") no-repeat; background-position: 0 -600%; background-size: 100%; font-size: 0.12rem; font-weight: 400; color: #00f0ff; display: flex; justify-content: space-around; } .lcl-table-body { width: 100%; max-height: 1.3rem; .lcl-tr { width: 100%; height: 0.36rem; line-height: 0.36rem; display: flex; justify-content: space-between; .lcl-td { display: inline-block; width: 33%; overflow: hidden; text-overflow: ellipsis; } .lcl-td:nth-child(3) { text-align: center; } } .lcl-tr:nth-child(2n) { background: rgba(29, 100, 221, 0.22); } } // @media only screen and (min-width: 1440px) { // .lcl-table-header { // background: url("~@/assets/images/bigscreen/table-header.png") no-repeat; // background-position: 0 -600%; // background-size: 100%; // } // } // @media only screen and (max-width: 1440px) { // .lcl-table-header { // background: url("~@/assets/images/bigscreen/table-header.png") no-repeat; // background-position: 0 200%; // background-size: 100%; // } // } } .card { width: 100%; height: 100%; .card-title { position: relative; width: 100%; height: 0.32rem; color: #fff; background: url("~@/assets/images/bigscreen/title.png") no-repeat center; background-size: cover; padding-left: 0.38rem; i { font-size: 0.18rem; font-style: italic; line-height: 0.32rem; font-weight: bold; text-shadow: 0px 0px 9px rgba(32, 22, 0, 0.45); } &:before { content: ""; position: absolute; left: 0.08rem; top: 0.03rem; display: block; height: 0.22rem; width: 0.21rem; background: no-repeat url("~@/assets/images/bigscreen/title-before.png"); background-size: cover; } .card-select { width: 1.2rem; height: 0.24rem; position: absolute; right: 0.08rem; top: 0.03rem; display: inline-block; // 修改input默认值颜色 兼容其它主流浏览器 ::v-deep input::-webkit-input-placeholder { color: rgba(255, 255, 255, 0.5); } ::v-deep input::-moz-input-placeholder { color: rgba(255, 255, 255, 0.5); } ::v-deep input::-ms-input-placeholder { color: rgba(255, 255, 255, 0.5); } // input框 ::v-deep .el-select, ::v-deep .el-input, ::v-deep .el-input__inner { height: 0.24rem; background-color: rgba(8, 148, 255, 0.3); border: 1px solid #1d80da; // background-color: rgba(255, 255, 255, 0.04); color: rgba(255, 255, 255, 1); border: none; // 去掉边框 // border-color: #XXXXXX // 默认边框的颜色 text-align: left; border-radius: 4px; line-height: 0.24rem; } // 选中时边框颜色 // ::v-deep .el-input__inner:focus{ // border-color: #XXXXXX; // } // 鼠标悬浮时 input框颜色 ::v-deep .el-input__inner:hover { background-color: rgba(255, 255, 255, 0.12); } ::v-deep .el-input__suffix-inner { display: inline-block; } // input框 右侧的箭头 ::v-deep .el-select .el-input .el-select__caret { transform: rotate(180deg); color: rgba(255, 255, 255, 1); } ::v-deep .el-select .el-input .el-select__caret.is-reverse { transform: rotate(0deg); } ::v-deep .el-input__icon { position: relative; line-height: 0.24rem; width: 0.12rem; } ::v-deep .el-select .el-input .el-select__caret:before { position: absolute; content: "\E6E1"; text-align: center; line-height: 3px; display: inline-block; top: 0.11rem; left: -0.01rem; } // option选项 上面的箭头 ::v-deep .el-popper[x-placement^="bottom"] .popper__arrow::after { border-bottom-color: rgba(43, 45, 55, 0.8); z-index: 9999; } ::v-deep .popper__arrow { border: none; } // option选项 最外层 ::v-deep .el-select-dropdown { border: none !important; background: rgba(43, 45, 55, 0.8) !important; z-index: 9999; } // option选项 文字样式 ::v-deep .el-select-dropdown__item { color: rgba(255, 255, 255, 1) !important; z-index: 9999; } ::v-deep .el-select-dropdown__item.selected span { color: rgba(255, 255, 255, 0.8) !important; z-index: 9999; } // 移入option选项 样式调整 ::v-deep .el-select-dropdown__item.hover { background-color: rgba(255, 255, 255, 0.06); color: rgba(255, 255, 255, 0.8) !important; z-index: 9999; } // 下拉框垂直滚动条宽度 ::v-deep .el-scrollbar__bar.is-vertical { width: 10px; top: 2px; } // 下拉框最大高度 ::v-deep .el-select-dropdown__wrap { max-height: 2rem; } } .card-select-dev { right: 1.3rem; } } } .screen-header { // left: 0; // top: 0; // right: 0; width: 100%; height: 1.52rem; // border: 1px solid red; // background-color: #00164e; .header-title { position: relative; // width: 18.6rem; width: 100%; height: 1.52rem; margin: 0 auto; background: url("~@/assets/images/bigscreen/header.png") no-repeat center; background-size: 100%; .headerchoice { color: #fff; width: 1.74rem; height: 0.8rem; background: url("~@/assets/images/bigscreen/headerchoice.png") no-repeat center; background-size: 100%; font-size: 0.2rem; line-height: 0.4rem; text-align: center; cursor: pointer; font-weight: bold; -webkit-text-stroke: 1px #0085c0; text-stroke: 1px #0085c0; font-style: italic; } .header-left { position: absolute; width: 30%; height: 0.48rem; left: 0.07rem; .now-page { float: left; } .now-date { float: left; width: 1.5rem; font-weight: normal; font-style: italic; font-size: 0.2rem; color: #c3e1ff; line-height: 0.6rem; } } .header-right { position: absolute; width: 30%; height: 0.48rem; right: 0.07rem; a { text-decoration: none; display: block; } .go-index { float: right; } .now-time { float: right; width: 1.1rem; font-weight: normal; font-style: italic; font-size: 0.3rem; color: #25eef0; line-height: 0.6rem; } } h1 { font-size: 0.44rem; font-family: Source Han Sans CN; text-align: center; font-weight: bold; color: #ffffff; line-height: 0.7rem; text-shadow: 0px 2px 14px rgba(0, 121, 177, 0.88); margin: 0; } } // .title { // .shine { // background-image: url("https://static.oschina.net/uploads/space/2018/0521/211357_VOTl_3549294.png"); // background-repeat: no-repeat; // background-position: center; // width: 155px; // height: 155px; // position: absolute; // animation: opacity-change 1s ease-in-out infinite; // -webkit-animation: opacity-change 1s ease-in-out infinite; // -moz-animation: opacity-change 1s ease-in-out infinite; // -o-animation: opacity-change 1s ease-in-out infinite; // } // .shine2 { // animation: opacity-change 1.75s ease-in-out infinite; // -webkit-animation: opacity-change 1.75s ease-in-out infinite; // -moz-animation: opacity-change 1.75s ease-in-out infinite; // -o-animation: opacity-change 1.75s ease-in-out infinite; // } // } } .screen-section { position: absolute; left: 0; top: 0.7rem; right: 0; bottom: 0; z-index: 3; display: flex; width: 100%; height: calc(100% - 0.7rem); flex-direction: row; flex: 1; padding: 0 0.08rem; overflow: hidden; .section-left { width: 100%; height: 100%; display: flex; // margin-left: 0.08rem; // margin-right: 0.08rem; flex-direction: column; flex: 1; .section-content { width: 100%; height: 100%; flex: 1; border: 1px solid #127baa; box-sizing: border-box; margin-bottom: 0.08rem; .card-title { .card-choice { position: absolute; right: 1.3rem; top: 0.03rem; width: 0.56rem; height: 0.24rem; display: flex; flex-direction: row; justify-content: space-between; .card-year-month { width: 0.26rem; height: 0.24rem; text-align: center; line-height: 0.24rem; display: inline-block; cursor: pointer; } .choice-normal { background: url("~@/assets/images/bigscreen/normal.png") no-repeat center; background-size: 100%; } .choice-active { background: url("~@/assets/images/bigscreen/active.png") no-repeat center; background-size: 100%; } } } .card-content { width: 100%; height: calc(100% - 0.32rem); flex: 1; .left-chart { width: 100%; height: 100%; } } } } .section-mid { display: flex; flex-shrink: 0; height: 100%; flex-direction: column; flex: 1; > div { width: 10rem; flex: 1; border: 1px solid #127baa; box-sizing: border-box; margin: 0 0.08rem 0.08rem; } .mid-top { flex: 0.12; border: none; width: 100%; } .mid-fir { flex: 2.94; margin-top: 0; width: 100%; .nothing { height: 0.32rem; width: 100%; } .card-content { width: 100%; height: calc(100% - 0.32rem); position: relative; .map { width: 100%; height: 100%; padding: 0.08rem; background: url("~@/assets/images/index.png") no-repeat center; background-size: cover; } } } .mid-sec { flex: 1; display: flex; flex-wrap: nowrap; justify-content: space-between; align-items: stretch; border: none; width: 100%; .section-content { border: 1px solid #0085c0; .card-content { height: calc(100% - 0.32rem); #mid2 { width: 100%; height: 100%; } } } } } .section-right { width: 100%; height: 100%; overflow: hidden; display: flex; flex-direction: column; // margin-right: 0.08rem; flex: 1; > div { width: 100%; height: 100%; flex: 1; border: 1px solid #127baa; box-sizing: border-box; margin-bottom: 0.08rem; margin-right: 0.08rem; } .card-content { width: 100%; height: calc(100% - 0.32rem); flex: 1; overflow: hidden; .left-chart, #pie, #ground-pre, #mid2, #right3 { width: 100%; height: 100%; } .yinhuan { width: 100%; height: 100%; display: flex; .yinhuan-left { width: 1.12rem; height: 100%; margin-right: 0.08rem; margin-left: 0.08rem; .yinhuan-left-item { position: relative; width: 1.12rem; height: 0.64rem; background: url("~@/assets/images/bigscreen/yinhuanleft.png") no-repeat; background-size: 100%; margin-top: 0.2rem; .yinhuan-item-top { text-align: center; font-family: diget year; font-weight: 400; color: #22f2ff; font-size: 0.2rem; display: block; padding-top: -0.2rem; } .yinhuan-item-bottom { text-align: center; font-family: diget year; font-size: 0.18rem; font-weight: bold; display: block; } } } .yinhuan-right { width: calc(100% - 1.28rem); height: 100%; padding: 0.08rem; } } } } } } /* 滚动条 */ .scrollingout { // max-height: 250px; width: 100%; overflow-y: scroll; } .scrollingout { scrollbar-width: thin; scrollbar-color: #1674ee rgba(255, 255, 255, 0); } .scrollingout::-webkit-scrollbar { width: 3px; height: 5px; cursor: pointer; } .scrollingout::-webkit-scrollbar-thumb { border-radius: 10px; background: #1674ee; margin-right: 10px; cursor: pointer; } .scrollingout::-webkit-scrollbar-thumb:hover { background-color: #1854e8; } .scrollingout::-webkit-scrollbar-track { border-radius: 10px; // background: rgba(255, 255, 255, 0.1); margin-right: 10px; } /* 滚动条-火狐 */ .scrollingout { scrollbar-width: thin; scrollbar-color: #1674ee rgba(255, 254, 254, 0.993); } .scrollingout::-webkit-scrollbar { width: 3px; height: 5px; cursor: pointer; } .scrollingout::-webkit-scrollbar-thumb { border-radius: 10px; background: #1674ee; margin-right: 10px; cursor: pointer; } .scrollingout::-webkit-scrollbar-thumb:hover { background-color: #1854e8; } .scrollingout::-webkit-scrollbar-track { border-radius: 10px; background: rgba(255, 255, 255, 0); margin-right: 10px; } /* 滚动条-火狐 */ .scrollingout { scrollbar-width: thin; scrollbar-color: #1674ee rgba(255, 255, 255, 0); } </style> <style lang="scss" > .bigscreen { .screen-section { .section-left { .card-content { .weather { font-size: 11px; // margin: 15px; padding: 0.08rem; .mleft { display: none; } .wtpath { display: none; } .mright { flex: 1; text-align: center; } img { display: block; width: 2vw !important; height: auto !important; margin: 0 auto; } ul { margin: 5px 0; color: #d0d2ff; width: 100%; padding: 0; li { width: 100%; list-style: none; text-align: center; overflow: hidden; span { width: 100%; display: inline-block; float: left; } } } #mobile05 { display: flex; position: relative; padding-top: 7vh !important; } #mobile05 > div:last-child { display: none; } #mright_1 { position: absolute; top: 0; left: 0; height: auto; width: 100%; ul { margin: 0; color: #03d3fe; li { list-style: none; } } .wt { display: flex; align-items: center; margin-left: 140px; } .day { display: none; } span:last-child { display: block; position: absolute; top: -5px; left: 8px; height: auto; font-size: 26px; } #day_1 { margin-left: 30px; span:last-child { position: relative; } } } } } } } } </style>