| | |
| | | <template> |
| | | <div class="systemMonitoring_box"> |
| | | <My-bread :list="['运维管理', '系统监控']"></My-bread> |
| | | <My-bread |
| | | :list="[ |
| | | `${$t('operatManage.operatManage')}`, |
| | | `${$t('operatManage.systemMonitoring')}`, |
| | | ]" |
| | | ></My-bread> |
| | | <el-divider /> |
| | | <div class="table_box"> |
| | | <p class="title_box">服务列表</p> |
| | | <el-table |
| | | <div class="inform_box"> |
| | | <div class="content_box"> |
| | | <div class="top_box"> |
| | | <div style="width: 100%; height: 100%"> |
| | | <div |
| | | style=" |
| | | width: 30%; |
| | | height: 100%; |
| | | |
| | | |
| | | :data="tableData" |
| | | |
| | | style="width: 100%" |
| | | |
| | | > |
| | | <el-table-column type="selection" width="55"> </el-table-column> |
| | | <el-table-column prop="name" label="服务名称"> </el-table-column> |
| | | <el-table-column prop="servicecatalog" label="服务目录"> |
| | | float: left; |
| | | margin-left: 20%; |
| | | " |
| | | > |
| | | <div class="Syslabel"> |
| | | <p style="line-height: 25px"> |
| | | {{ $t('operatManage.systemMonitoringObj.haveBeenUsed') }} |
| | | {{ memInfo.use }} |
| | | </p> |
| | | <br /> |
| | | <p style="line-height: 25px"> |
| | | {{ $t('operatManage.systemMonitoringObj.totalMemory') }} |
| | | {{ memInfo.totalMem }} |
| | | </p> |
| | | </div> |
| | | </div> |
| | | <div |
| | | id="shuiwen" |
| | | style=" |
| | | width: 40%; |
| | | height: 100%; |
| | | |
| | | float: left; |
| | | " |
| | | ></div> |
| | | </div> |
| | | <!-- <div class="Syslabel"> |
| | | {{ $t('operatManage.systemMonitoringObj.totalMemory') }} |
| | | </div> |
| | | <div class="details">{{ memInfo.totalMem }}</div> --> |
| | | <!-- --> |
| | | <!-- <div class="Syslabel"> |
| | | <span |
| | | >{{ $t('operatManage.systemMonitoringObj.haveBeenUsed') }} |
| | | {{ memInfo.use }}</span |
| | | > |
| | | <span style="margin-left: 25px" |
| | | >{{ $t('operatManage.systemMonitoringObj.usageRate') }} |
| | | {{ memInfo.usage }}</span |
| | | > |
| | | </div> --> |
| | | </div> |
| | | <div class="bottom_box"> |
| | | {{ $t('operatManage.systemMonitoringObj.systemMemory') }} |
| | | </div> |
| | | </div> |
| | | <div class="content_box"> |
| | | <div class="top_box"> |
| | | <div class="Syslabel"> |
| | | {{ $t('operatManage.systemMonitoringObj.CPUusage') }} |
| | | </div> |
| | | <div class="details">{{ cpuInfo.cpuSysUsage }}</div> |
| | | <div id="Sys_cpu_chart"></div> |
| | | </div> |
| | | <div class="bottom_box"> |
| | | {{ $t('operatManage.systemMonitoringObj.CPUsystemUsage') }} |
| | | </div> |
| | | </div> |
| | | <div class="content_box"> |
| | | <div class="top_box"> |
| | | <div class="Syslabel"> |
| | | {{ $t('operatManage.systemMonitoringObj.numberOfExceptions') }} |
| | | </div> |
| | | <div class="details">{{ resInfoCount }}</div> |
| | | </div> |
| | | <div class="bottom_box"> |
| | | {{ $t('operatManage.systemMonitoringObj.numberOfAbnormalSystems') }} |
| | | </div> |
| | | </div> |
| | | <!-- <div class="content_box"> |
| | | <div class="top_box"> |
| | | <div class="Syslabel">{{$t('operatManage.systemMonitoringObj.serviceAarm')}}</div> |
| | | <div class="details">8</div> |
| | | </div> |
| | | <div class="bottom_box">{{$t('operatManage.systemMonitoringObj.serviceResourceAlarm')}}</div> |
| | | </div> --> |
| | | </div> |
| | | <div class="chart_box"> |
| | | <p class="title_box"> |
| | | {{ $t('operatManage.systemMonitoringObj.abnormalResources') }} |
| | | </p> |
| | | <el-table :data="resInfo" style="width: 100%"> |
| | | <el-table-column |
| | | prop="id" |
| | | :label="$t('operatManage.systemMonitoringObj.resourceID')" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column prop="visitTimes" label="访问次数"> </el-table-column> |
| | | <el-table-column prop="date" label="创建时间" show-overflow-tooltip> |
| | | <el-table-column |
| | | prop="name" |
| | | :label="$t('operatManage.systemMonitoringObj.resourceName')" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column prop="state" label="运行状态" fixed="right"> |
| | | <el-table-column |
| | | prop="bak" |
| | | :label="$t('operatManage.systemMonitoringObj.resourceState')" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="createTime" |
| | | :label="$t('operatManage.systemMonitoringObj.abnormaltime')" |
| | | show-overflow-tooltip |
| | | > |
| | | </el-table-column> |
| | | </el-table> |
| | | <div style="margin-top: 40px" class="pagination_box"> |
| | | <!-- <div style="margin-top: 10px" class="pagination_box"> |
| | | <el-pagination |
| | | @size-change="handleSizeChange" |
| | | @current-change="handleCurrentChange" |
| | |
| | | :total="4" |
| | | > |
| | | </el-pagination> |
| | | </div> |
| | | </div> --> |
| | | </div> |
| | | <div class="chart_box"> |
| | | <div class="left_box"> |
| | | <p class="title_box">实时服务调用</p> |
| | | <div id="line_chart"></div> |
| | | </div> |
| | | <div class="right_box"> |
| | | <p class="title_box">系统使用状况</p> |
| | | <div class="gauge_box"> |
| | | <div id="gauge_chart1"></div> |
| | | <div id="gauge_chart2"></div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="left"> |
| | | <p class="title_box"> |
| | | {{ $t('operatManage.systemMonitoringObj.onlinePersonnel') }} |
| | | </p> |
| | | <el-table :data="tableData" style="width: 100%"> |
| | | <el-table-column |
| | | align="center" |
| | | type="index" |
| | | :label="$t('operatManage.ELM.index')" |
| | | width="100px" |
| | | /> |
| | | <el-table-column |
| | | prop="uid" |
| | | :label="$t('operatManage.systemMonitoringObj.userID')" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="uname" |
| | | :label="$t('operatManage.systemMonitoringObj.username')" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="loginTime" |
| | | :label="$t('operatManage.systemMonitoringObj.onlineTime')" |
| | | fixed="right" |
| | | > |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <!-- <div style="margin-top: 10px" class="pagination_box"> |
| | | <el-pagination |
| | | @size-change="handleSizeChange" |
| | | @current-change="handleCurrentChange" |
| | | :current-page="currentPage4" |
| | | :page-sizes="[10, 20, 30, 40]" |
| | | :page-size="10" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="4" |
| | | > |
| | | </el-pagination> |
| | | </div> --> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import MyBread from "../../components/MyBread.vue"; |
| | | import MyBread from '../../components/MyBread.vue'; |
| | | import 'echarts-liquidfill'; |
| | | export default { |
| | | //import引入的组件需要注入到对象中才能使用 |
| | | components: { |
| | |
| | | data() { |
| | | //这里存放数据 |
| | | return { |
| | | currentPage4: 1, |
| | | tableData: [ |
| | | { |
| | | date: "2022-08-03", |
| | | name: "test", |
| | | servicecatalog: "业务图层", |
| | | visitTimes: "12", |
| | | state: "不可用", |
| | | }, |
| | | { |
| | | date: "2022-08-03", |
| | | name: "cs9", |
| | | servicecatalog: "业务图层", |
| | | visitTimes: "7", |
| | | state: "不可用", |
| | | }, |
| | | { |
| | | date: "2022-08-03", |
| | | name: "test1", |
| | | servicecatalog: "业务图层", |
| | | visitTimes: "5", |
| | | state: "不可用", |
| | | }, |
| | | { |
| | | date: "2022-08-03", |
| | | name: "cs3", |
| | | servicecatalog: "业务图层", |
| | | visitTimes: "8", |
| | | state: "不可用", |
| | | }, |
| | | ], |
| | | ws: null, |
| | | tableData: [], |
| | | memInfo: { totalMem: 0, use: 0, usage: 0 }, |
| | | cpuInfo: { cpuSysUsage: 0 }, |
| | | resInfo: [], |
| | | resInfoCount: 0, |
| | | echartData: [], |
| | | }; |
| | | }, |
| | | //方法集合 |
| | | methods: { |
| | | handleSizeChange(val) { |
| | | console.log(`每页 ${val} 条`); |
| | | SetTableData1(res) { |
| | | this.tableData = res.userInfo; |
| | | this.memInfo = res.memInfo; |
| | | this.cpuInfo = res.cpuInfo; |
| | | if (this.echartData.length == 7) { |
| | | this.echartData.splice(0, 1); |
| | | } |
| | | this.echartData.push(parseFloat(res.cpuInfo.cpuSysUsage)); |
| | | this.lineChart1(); |
| | | console.log(this.memInfo.usage); |
| | | this.lineChart2(this.memInfo.usage); |
| | | }, |
| | | handleCurrentChange(val) { |
| | | console.log(`当前页: ${val}`); |
| | | SetTableData2(res) { |
| | | this.resInfo = res.resInfo; |
| | | this.resInfoCount = res.resInfo.length; |
| | | }, |
| | | gaugeChart1() { |
| | | const gaugeData = [ |
| | | { |
| | | value: 20, |
| | | name: "CPU利用率", |
| | | title: { |
| | | offsetCenter: ["0%", "10%"], |
| | | }, |
| | | detail: { |
| | | valueAnimation: true, |
| | | offsetCenter: ["0%", "-10%"], |
| | | }, |
| | | lineChart1() { |
| | | let option = { |
| | | grid: { |
| | | top: 0, |
| | | left: '0%', |
| | | right: '4%', |
| | | bottom: '0%', |
| | | containLabel: true, |
| | | }, |
| | | ]; |
| | | let option = { |
| | | series: [ |
| | | { |
| | | type: "gauge", |
| | | // radius: "10%", |
| | | itemStyle: { |
| | | normal: { |
| | | color: "#5c5dd3", |
| | | }, |
| | | }, |
| | | startAngle: 90, |
| | | endAngle: -270, |
| | | pointer: { |
| | | show: false, |
| | | }, |
| | | progress: { |
| | | show: true, |
| | | overlap: false, |
| | | roundCap: true, |
| | | clip: false, |
| | | itemStyle: { |
| | | borderWidth: 1, |
| | | borderColor: "#5c5dd3", |
| | | }, |
| | | }, |
| | | axisLine: { |
| | | lineStyle: { |
| | | width: 40, |
| | | }, |
| | | }, |
| | | splitLine: { |
| | | show: false, |
| | | distance: 0, |
| | | length: 10, |
| | | }, |
| | | axisTick: { |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | show: false, |
| | | distance: 50, |
| | | }, |
| | | data: gaugeData, |
| | | title: { |
| | | fontSize: 24, |
| | | fontWeight: 800, |
| | | }, |
| | | detail: { |
| | | fontSize: 40, |
| | | color: "auto", |
| | | borderColor: "auto", |
| | | borderRadius: 20, |
| | | borderWidth: 0, |
| | | formatter: "{value}%", |
| | | }, |
| | | }, |
| | | ], |
| | | }; |
| | | let myChart = this.$echarts.init(document.getElementById("gauge_chart1")); |
| | | myChart.setOption(option); |
| | | window.addEventListener("resize", function () { |
| | | myChart.resize(); |
| | | }); |
| | | }, |
| | | gaugeChart2() { |
| | | const gaugeData = [ |
| | | { |
| | | value: 20, |
| | | name: "内存利用率", |
| | | title: { |
| | | offsetCenter: ["0%", "10%"], |
| | | }, |
| | | detail: { |
| | | valueAnimation: true, |
| | | offsetCenter: ["0%", "-10%"], |
| | | }, |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | }, |
| | | ]; |
| | | let option = { |
| | | series: [ |
| | | { |
| | | type: "gauge", |
| | | itemStyle: { |
| | | normal: { |
| | | color: "#78c9f8", |
| | | }, |
| | | }, |
| | | // radius: "10%", |
| | | startAngle: 90, |
| | | endAngle: -270, |
| | | pointer: { |
| | | show: false, |
| | | }, |
| | | progress: { |
| | | show: true, |
| | | overlap: false, |
| | | roundCap: true, |
| | | clip: false, |
| | | itemStyle: { |
| | | borderWidth: 1, |
| | | borderColor: "#78c9f8", |
| | | normal: { |
| | | color: "#78c9f8", |
| | | }, |
| | | }, |
| | | }, |
| | | axisLine: { |
| | | lineStyle: { |
| | | width: 40, |
| | | }, |
| | | }, |
| | | splitLine: { |
| | | show: false, |
| | | distance: 0, |
| | | length: 10, |
| | | }, |
| | | axisTick: { |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | show: false, |
| | | distance: 50, |
| | | }, |
| | | data: gaugeData, |
| | | title: { |
| | | fontSize: 24, |
| | | fontWeight: 800, |
| | | }, |
| | | detail: { |
| | | fontSize: 40, |
| | | color: "auto", |
| | | borderColor: "auto", |
| | | borderRadius: 20, |
| | | borderWidth: 0, |
| | | formatter: "{value}%", |
| | | }, |
| | | }, |
| | | ], |
| | | }; |
| | | let myChart = this.$echarts.init(document.getElementById("gauge_chart2")); |
| | | myChart.setOption(option); |
| | | window.addEventListener("resize", function () { |
| | | myChart.resize(); |
| | | }); |
| | | }, |
| | | lineChart() { |
| | | let option = { |
| | | xAxis: { |
| | | type: "category", |
| | | data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], |
| | | type: 'category', |
| | | boundaryGap: false, |
| | | data: ['', '', '', '', '', '', ''], |
| | | }, |
| | | yAxis: { |
| | | name: "次数", |
| | | type: "value", |
| | | type: 'value', |
| | | axisLabel: { |
| | | show: false, // 不显示坐标轴上的文字 |
| | | }, |
| | | }, |
| | | series: [ |
| | | { |
| | | data: [150, 230, 224, 218, 135, 147, 260], |
| | | type: "line", |
| | | itemStyle: { |
| | | normal: { |
| | | color: "#1f88ff", |
| | | lineStyle: { |
| | | color: "#1f88ff", |
| | | data: this.echartData, |
| | | type: 'line', |
| | | areaStyle: {}, |
| | | }, |
| | | ], |
| | | }; |
| | | let myChart = this.$echarts.init( |
| | | document.getElementById('Sys_cpu_chart') |
| | | ); |
| | | myChart.setOption(option); |
| | | window.addEventListener('resize', function () { |
| | | myChart.resize(); |
| | | }); |
| | | }, |
| | | lineChart2(res) { |
| | | var a = res.split('%').join(''); |
| | | console.log(a); |
| | | let value = parseFloat(a); |
| | | let data = [value, value, value]; |
| | | let option = { |
| | | title: { |
| | | text: value + '{a|%}', |
| | | textStyle: { |
| | | fontSize: 15, |
| | | fontFamily: 'Microsoft Yahei', |
| | | fontWeight: 'normal', |
| | | color: '#00FFFF', |
| | | rich: { |
| | | a: { |
| | | fontSize: 15, |
| | | }, |
| | | }, |
| | | }, |
| | | x: 'center', |
| | | y: '35%', |
| | | }, |
| | | graphic: [ |
| | | { |
| | | type: 'group', |
| | | left: 'center', |
| | | |
| | | children: [ |
| | | { |
| | | type: 'text', |
| | | z: 20, |
| | | left: '10', |
| | | top: '50', |
| | | style: { |
| | | fill: '#00FFFF', |
| | | text: '使用率', |
| | | font: '14px Microsoft YaHei', |
| | | }, |
| | | }, |
| | | ], |
| | | }, |
| | | ], |
| | | series: [ |
| | | { |
| | | type: 'liquidFill', |
| | | radius: '80%', |
| | | center: ['50%', '50%'], |
| | | // shape: 'roundRect', |
| | | data: data, |
| | | backgroundStyle: { |
| | | color: { |
| | | type: 'linear', |
| | | x: 1, |
| | | y: 0, |
| | | x2: 0.5, |
| | | y2: 1, |
| | | colorStops: [ |
| | | { |
| | | offset: 1, |
| | | color: 'rgba(68, 145, 253, 0)', |
| | | }, |
| | | { |
| | | offset: 0.5, |
| | | color: 'rgba(68, 145, 253, .25)', |
| | | }, |
| | | { |
| | | offset: 0, |
| | | color: 'rgba(68, 145, 253, 1)', |
| | | }, |
| | | ], |
| | | globalCoord: false, |
| | | }, |
| | | }, |
| | | outline: { |
| | | borderDistance: 0, |
| | | itemStyle: { |
| | | borderWidth: 20, |
| | | borderColor: { |
| | | type: 'linear', |
| | | x: 0, |
| | | y: 0, |
| | | x2: 0, |
| | | y2: 1, |
| | | colorStops: [ |
| | | { |
| | | offset: 0, |
| | | color: 'rgba(69, 73, 240, 0)', |
| | | }, |
| | | { |
| | | offset: 0.5, |
| | | color: 'rgba(69, 73, 240, .25)', |
| | | }, |
| | | { |
| | | offset: 1, |
| | | color: 'rgba(69, 73, 240, 1)', |
| | | }, |
| | | ], |
| | | globalCoord: false, |
| | | }, |
| | | shadowBlur: 10, |
| | | shadowColor: '#000', |
| | | }, |
| | | }, |
| | | itemStyle: { |
| | | color: { |
| | | type: 'linear', |
| | | x: 0, |
| | | y: 0, |
| | | x2: 0, |
| | | y2: 1, |
| | | colorStops: [ |
| | | { |
| | | offset: 1, |
| | | color: 'rgba(58, 71, 212, 0)', |
| | | }, |
| | | { |
| | | offset: 0.5, |
| | | color: 'rgba(31, 222, 225, .2)', |
| | | }, |
| | | { |
| | | offset: 0, |
| | | color: 'rgba(31, 222, 225, 1)', |
| | | }, |
| | | ], |
| | | globalCoord: false, |
| | | }, |
| | | }, |
| | | label: { |
| | | normal: { |
| | | formatter: '', |
| | | }, |
| | | }, |
| | | }, |
| | | ], |
| | | }; |
| | | let myChart = this.$echarts.init(document.getElementById("line_chart")); |
| | | myChart.setOption(option); |
| | | window.addEventListener("resize", function () { |
| | | |
| | | let myChart1 = this.$echarts.init(document.getElementById('shuiwen')); |
| | | myChart1.setOption(option); |
| | | window.addEventListener('resize', function () { |
| | | myChart.resize(); |
| | | }); |
| | | }, |
| | | handleSelectionChange() {}, |
| | | }, |
| | | created() {}, |
| | | created() { |
| | | if (Window.ws != null) { |
| | | Window.ws.close(); |
| | | Window.ws.onclose = () => { |
| | | console.log('服务器关闭'); |
| | | }; |
| | | Window.ws = null; |
| | | } |
| | | Window.ws = new WebSocket('ws://192.168.20.55:12316/ws'); |
| | | Window.ws.option = () => {}; |
| | | var that = this; |
| | | Window.ws.onmessage = (msg) => { |
| | | // console.log('来自服务器端的数据:' + msg.data); //监听接受来自服务端的信息 |
| | | var data = JSON.parse(msg.data); |
| | | |
| | | if (data.resInfo == undefined) { |
| | | that.SetTableData1(data); |
| | | } else { |
| | | that.SetTableData2(data); |
| | | } |
| | | }; |
| | | }, |
| | | |
| | | mounted() { |
| | | this.lineChart(); |
| | | this.gaugeChart1(); |
| | | this.gaugeChart2(); |
| | | this.lineChart2(0); |
| | | }, |
| | | }; |
| | | </script> |
| | |
| | | height: 100%; |
| | | padding: 10px; |
| | | box-sizing: border-box; |
| | | .table_box { |
| | | height: 40%; |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: space-around; |
| | | .inform_box { |
| | | height: 16%; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | .content_box { |
| | | box-sizing: border-box; |
| | | padding: 10px; |
| | | padding-top: 30px; |
| | | width: 33%; |
| | | height: 100%; |
| | | background: #fff; |
| | | border-radius: 5px; |
| | | border: 1px solid rgb(202, 201, 204); |
| | | .top_box { |
| | | width: 70%; |
| | | height: 90%; |
| | | margin-left: 15%; |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: space-around; |
| | | padding-bottom: 15px; |
| | | box-sizing: border-box; |
| | | .Syslabel { |
| | | font-family: sans-serif; |
| | | font-size: 13px; |
| | | color: gray; |
| | | text-align: left; |
| | | // margin-left: 20px; |
| | | } |
| | | .details { |
| | | font-family: sans-serif; |
| | | font-size: 31px; |
| | | color: #1b1e21; |
| | | text-align: center; |
| | | letter-spacing: 2px; |
| | | } |
| | | #Sys_cpu_chart { |
| | | width: 100%; |
| | | height: 30%; |
| | | } |
| | | } |
| | | .bottom_box { |
| | | border-top: 1px solid rgb(202, 201, 204); |
| | | text-align: center; |
| | | color: #6c757d; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .left { |
| | | box-sizing: border-box; |
| | | padding: 10px; |
| | | width: 100%; |
| | | height: 37%; |
| | | background: #fff; |
| | | border-radius: 5px; |
| | | border: 1px solid rgb(202, 201, 204); |
| | |
| | | text-align: center; |
| | | } |
| | | .chart_box { |
| | | height: calc(60% - 100px); |
| | | margin-top: 20px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | .left_box { |
| | | width: 40%; |
| | | padding: 10px; |
| | | background: #fff; |
| | | border-radius: 5px; |
| | | border: 1px solid rgb(202, 201, 204); |
| | | box-sizing: border-box; |
| | | #line_chart { |
| | | height: 36%; |
| | | padding: 10px; |
| | | background: #fff; |
| | | border-radius: 5px; |
| | | border: 1px solid rgb(202, 201, 204); |
| | | box-sizing: border-box; |
| | | .el-tabs { |
| | | height: 100%; |
| | | } |
| | | /deep/ .el-tabs__content { |
| | | height: calc(100% - 55px); |
| | | } |
| | | .el-tab-pane { |
| | | height: 100%; |
| | | } |
| | | .gauge_box { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | width: 100%; |
| | | height: 95%; |
| | | position: relative; |
| | | .input_box { |
| | | position: absolute; |
| | | top: 0; |
| | | left: 0; |
| | | } |
| | | #gauge_chart2 { |
| | | width: 49%; |
| | | height: 100%; |
| | | } |
| | | #gauge_chart1 { |
| | | width: 49%; |
| | | height: 100%; |
| | | } |
| | | #gauge_chart3 { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | } |
| | | .right_box { |
| | | margin-left: 20px; |
| | | width: 60%; |
| | | padding: 10px; |
| | | background: #fff; |
| | | border-radius: 5px; |
| | | border: 1px solid rgb(202, 201, 204); |
| | | box-sizing: border-box; |
| | | |
| | | .gauge_box { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | #gauge_chart4 { |
| | | width: 100%; |
| | | height: 95%; |
| | | #gauge_chart2 { |
| | | width: 49%; |
| | | height: 100%; |
| | | } |
| | | #gauge_chart1 { |
| | | width: 49%; |
| | | height: 100%; |
| | | } |
| | | height: 100%; |
| | | } |
| | | #gauge_chart5 { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | #line_chart { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | } |
| | | } |