From 4a800a8fc83c6bd1f86a8e847b079a51a7532c09 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期三, 20 七月 2022 15:05:58 +0800
Subject: [PATCH] 修复国标配置的bug

---
 src/pages/systemMonitor/index/App.vue | 1063 +++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 934 insertions(+), 129 deletions(-)

diff --git a/src/pages/systemMonitor/index/App.vue b/src/pages/systemMonitor/index/App.vue
index 73ad2c8..d95e0c4 100644
--- a/src/pages/systemMonitor/index/App.vue
+++ b/src/pages/systemMonitor/index/App.vue
@@ -1,68 +1,310 @@
 <template>
   <div class="s-system-monitor">
     <el-tabs id="systemMonitor" v-model="activeName">
-      <el-tab-pane label="鍗曞厓" name="proc">
-        <div class="form-title">
-          <b>绠楁硶鍗曞厓</b>(姝e湪杩涜5涓畻娉曞崟鍏�)
+      <el-tab-pane name="proc">
+        <span slot="label">
+          <span class="iconfont icon">&#xe742;</span>
+          鍗曞厓</span
+        >
+        <div class="left-tab">
+          <div
+            class="tab-item"
+            :class="activeTab == 0 ? 'tab-item-active' : ''"
+            @click="activeTab = 0"
+          >
+            <div class="title">绠楁硶鍗曞厓</div>
+            <div class="subtitle">
+              姝e湪杩涜{{ algoProcessData.length }}涓畻娉曞崟鍏�
+            </div>
+            <span
+              class="iconfont icon"
+              :style="activeTab == 0 ? {} : { color: '#fff' }"
+              >&#xe741;</span
+            >
+          </div>
+          <div
+            class="tab-item"
+            :class="activeTab == 1 ? 'tab-item-active' : ''"
+            @click="activeTab = 1"
+          >
+            <div class="title">搴旂敤鍗曞厓</div>
+            <div class="subtitle">
+              姝e湪杩涜{{ appProcessData.length }}涓簲鐢ㄥ崟鍏�
+            </div>
+            <span
+              class="iconfont icon"
+              :style="activeTab == 1 ? {} : { color: '#fff' }"
+              >&#xe744;</span
+            >
+          </div>
         </div>
-        <el-divider></el-divider>
+        <div class="form-title" v-if="activeTab == 0">
+          <div class="desc">
+            <b>绠楁硶鍗曞厓</b>
+            (姝e湪杩涜{{ algoProcessData.length }}涓畻娉曞崟鍏�)
+          </div>
 
-        <div class="form-title">
-          <b>搴旂敤鍗曞厓</b>(姝e湪杩涜5涓簲鐢ㄥ崟鍏�)
+          <el-table
+            :data="algoProcessData"
+            style="width: 100%"
+            :header-cell-style="'background: #F2F2F7;color: #333333;height: 40px;font-size: 16px;'"
+            stripe
+            class="tableBox"
+          >
+            <el-table-column label="鍚嶇О" width="231">
+              <template slot-scope="scope">
+                <span class="iconfont icon">&#xe74d;</span>
+                <span>{{ scope.row.desc }} </span>
+              </template>
+            </el-table-column>
+            <el-table-column label="CPU">
+              <template slot-scope="scope">
+                <span>{{ scope.row.cpu.toFixed(2) }} %</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="鍐呭瓨">
+              <template slot-scope="scope">
+                <span>{{ scope.row.mem.toFixed(2) }} %</span>
+              </template>
+            </el-table-column>
+            <!-- <el-table-column
+              prop="disk"
+              label="纭洏"
+              width="150"
+            ></el-table-column> -->
+            <el-table-column label="绠楀姏">
+              <template slot-scope="scope">
+                <span>{{ scope.row.gpu }} M</span>
+              </template>
+            </el-table-column>
+          </el-table>
         </div>
-        <el-divider></el-divider>
+
+        <div class="form-title" v-if="activeTab == 1">
+          <div class="desc">
+            <b>搴旂敤鍗曞厓</b>
+            (姝e湪杩涜{{ appProcessData.length }}涓畻娉曞崟鍏�)
+          </div>
+
+          <el-table
+            :data="appProcessData"
+            style="width: 100%"
+            :header-cell-style="'background: #F2F2F7;color: #333333;height: 40px;font-size: 16px;'"
+            stripe
+            class="tableBox"
+          >
+            <el-table-column prop="desc" label="鍚嶇О"></el-table-column>
+            <el-table-column prop="cpu" label="CPU">
+              <template slot-scope="scope">
+                <span>{{ scope.row.cpu.toFixed(2) }} %</span>
+              </template>
+            </el-table-column>
+            <el-table-column prop="mem" label="鍐呭瓨">
+              <template slot-scope="scope">
+                <span>{{ scope.row.mem.toFixed(2) }} %</span>
+              </template>
+            </el-table-column>
+            <!--   <el-table-column prop="disk" label="纭洏"></el-table-column>
+            <el-table-column prop="gpu" label="绠楀姏"></el-table-column>
+            <el-table-column prop="net" label="缃戠粶"></el-table-column> -->
+          </el-table>
+        </div>
       </el-tab-pane>
 
-      <el-tab-pane label="鎬ц兘" name="top">
+      <el-tab-pane name="top">
+        <span slot="label">
+          <span class="iconfont icon">&#xe743;</span>
+          鎬ц兘</span
+        >
         <div class="column-left" ref="left">
           <div class="resize-bar">
-            <div class="ax_default">
-              <div class="ax_default_pic"></div>
-              <div>CPU</div>
-              <div>100%</div>
+            <div
+              :class="[
+                'ax_default',
+                activeChartItem == 'cpu' ? 'selected' : '',
+              ]"
+              @click="setActiveChartItem('cpu')"
+            >
+              <div class="ax_default_pic color-cpu"></div>
+              <div>
+                <div class="ax_default_text">CPU</div>
+                <div class="ax_default_subtext">{{ cpuUsedPercent }}%</div>
+              </div>
             </div>
 
-            <div class="ax_default">
-              <div class="ax_default_pic"></div>
-              <div>鍐呭瓨</div>
-              <div>100%</div>
+            <div
+              :class="[
+                'ax_default',
+                activeChartItem == 'mem' ? 'selected' : '',
+              ]"
+              @click="setActiveChartItem('mem')"
+            >
+              <div class="ax_default_pic color-mem"></div>
+              <div>
+                <div class="ax_default_text">鍐呭瓨</div>
+                <div class="ax_default_subtext">{{ memUsedPercent }}%</div>
+              </div>
             </div>
 
-            <div class="ax_default">
-              <div class="ax_default_pic"></div>
-              <div>纾佺洏</div>
-              <div>100%</div>
+            <div
+              :class="[
+                'ax_default',
+                activeChartItem == 'gpu' ? 'selected' : '',
+              ]"
+              @click="setActiveChartItem('gpu')"
+            >
+              <div class="ax_default_pic color-gpu"></div>
+              <div>
+                <div class="ax_default_text">绠楀姏</div>
+                <div class="ax_default_subtext">{{ gpuUsedPercent }}%</div>
+              </div>
             </div>
 
-            <div class="ax_default">
-              <div class="ax_default_pic"></div>
-              <div>绠楀姏</div>
-              <div>100%</div>
+            <div
+              :class="[
+                'ax_default',
+                activeChartItem == 'net' ? 'selected' : '',
+              ]"
+              @click="setActiveChartItem('net')"
+            >
+              <div class="ax_default_pic color-net"></div>
+              <div>
+                <div class="ax_default_text">缃戠粶</div>
+                <div class="ax_default_subtext">
+                  {{ netSend | byteConver }} / {{ netRecive | byteConver }}
+                </div>
+              </div>
             </div>
 
-            <div class="ax_default">
-              <div class="ax_default_pic"></div>
-              <div>缃戠粶</div>
-              <div>100%</div>
+            <div
+              v-for="(v, k) in disks"
+              :key="k"
+              :class="[
+                'ax_default',
+                activeChartItem == 'disk|' + k ? 'selected' : '',
+              ]"
+              @click="setActiveChartItem('disk|' + k)"
+            >
+              <div class="ax_default_pic color-disk"></div>
+              <div>
+                <div class="ax_default_text">纾佺洏 {{ k }}</div>
+                <div class="ax_default_subtext">
+                  {{ v.info.total | byteConver }}
+                </div>
+              </div>
             </div>
           </div>
 
           <div class="resize-line"></div>
         </div>
+
         <div class="column-right">
+          <div class="max-val">{{ yAxisMaxVal }}</div>
           <div ref="graphs" class="graphs-chart"></div>
+
+          <div v-show="activeChartItem == 'cpu'">
+            <div class="ax_default_label">
+              <b>鍗犵敤鐜�</b>
+              <p>{{ cpuUsedPercent }}%</p>
+            </div>
+            <div class="ax_default_label">
+              <b>涓婚</b>
+              <p>{{ cpuMaxRate }}Ghz</p>
+            </div>
+            <div class="ax_default_label">
+              <b>鎻掓Ы</b>
+              <p>{{ cpuCount }}</p>
+            </div>
+            <div class="ax_default_label">
+              <b>鍐呮牳</b>
+              <p>{{ cpuCore }}</p>
+            </div>
+          </div>
+
+          <div v-show="activeChartItem == 'mem'">
+            <div class="ax_default_label">
+              <b>浣跨敤涓�</b>
+              <p>{{ memUsed }}G</p>
+            </div>
+            <div class="ax_default_label">
+              <b>宸茬紦瀛�</b>
+              <p>{{ memCache }}G</p>
+            </div>
+            <div class="ax_default_label">
+              <b>鍙敤</b>
+              <p>{{ memFree }}G</p>
+            </div>
+          </div>
+
+          <div v-show="activeChartItem == 'net'">
+            <div class="ax_default_label">
+              <b>鎺ユ敹</b>
+              <p>{{ netRecive | byteConver }}</p>
+            </div>
+            <div class="ax_default_label">
+              <b>鍙戦��</b>
+              <p>{{ netSend | byteConver }}</p>
+            </div>
+            <div class="ax_default_label">
+              <b>IP鍦板潃</b>
+              <p>{{ ipAddr }}</p>
+            </div>
+            <div class="ax_default_label" style="margin-left: 19px">
+              <b>MAC鍦板潃</b>
+              <p>{{ macAddr }}</p>
+            </div>
+          </div>
+
+          <div v-show="isDisk">
+            <div class="ax_default_label">
+              <b>瀹归噺</b>
+              <p>{{ activeDisk.total | byteConver }}</p>
+            </div>
+            <div class="ax_default_label">
+              <b>宸茬敤</b>
+              <p>{{ activeDisk.used | byteConver }}</p>
+            </div>
+            <div class="ax_default_label">
+              <b>鍙敤</b>
+              <p>{{ activeDisk.free | byteConver }}</p>
+            </div>
+            <div class="ax_default_label">
+              <b>璇诲彇閫熷害</b>
+              <p>{{ ioRead | byteConver }}</p>
+            </div>
+            <div class="ax_default_label">
+              <b>鍐欏叆閫熷害</b>
+              <p>{{ ioWrite | byteConver }}</p>
+            </div>
+          </div>
         </div>
       </el-tab-pane>
 
-      <el-tab-pane label="鏈嶅姟" name="service">
-        <el-table height="93%" :data="services" border :cell-style="cellStyle">
-          <el-table-column label="鍚嶇О" align="center" show-overflow-tooltip>
+      <el-tab-pane name="service">
+        <span slot="label">
+          <span class="iconfont icon">&#xe944;</span>
+          鏈嶅姟</span
+        >
+        <el-table
+          :data="vasystemServicesData"
+          :header-cell-style="'color: #333333;height: 40px;font-size: 16px;'"
+          stripe
+          class="tableBox"
+        >
+          <el-table-column label="鍚嶇О" show-overflow-tooltip>
             <template slot-scope="scope">
-              <span>{{ scope.row.name}}</span>
+              <div class="name_container">
+                <span class="iconfont icon">&#xe74d;</span>
+                <span>{{ scope.row.name }}</span>
+              </div>
             </template>
           </el-table-column>
-          <el-table-column label="鐘舵��" prop="status" align="center" width="130px"></el-table-column>
-          <el-table-column label="鎻忚堪" prop="text" align="center"></el-table-column>
+          <el-table-column label="鐘舵��" prop="status">
+            <template slot-scope="scope">
+              <span>{{ scope.row.pid == 0 ? "鏈惎鍔�" : "宸插惎鍔�" }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="鎻忚堪" prop="desc"></el-table-column>
         </el-table>
       </el-tab-pane>
     </el-tabs>
@@ -71,114 +313,412 @@
 
 <script>
 import echarts from "echarts";
-import { showSystemStates } from "../api/api"
+import { showSystemStates, showService, showProcesses } from "../api/api";
 
 export default {
-  components: {
-    
+  components: {},
+  computed: {
+    isDisk() {
+      return this.activeChartItem.indexOf("disk") == 0;
+    },
+    isAdmin() {
+      if (
+        sessionStorage.getItem("userInfo") &&
+        sessionStorage.getItem("userInfo") !== ""
+      ) {
+        let loginName = JSON.parse(sessionStorage.getItem("userInfo")).username;
+        return loginName === "superadmin" || loginName === "basic";
+      }
+      return false;
+    },
+  },
+  filters: {
+    byteConver(limit) {
+      var size = "";
+      if (limit < 1024) {
+        //濡傛灉灏忎簬0.1KB杞寲鎴怋
+        size = limit + "B";
+      } else if (limit < 1024 * 1024) {
+        //濡傛灉灏忎簬0.1MB杞寲鎴怟B
+        size = (limit / 1024).toFixed(2) + "KB";
+      } else if (limit < 1024 * 1024 * 1024) {
+        //濡傛灉灏忎簬0.1GB杞寲鎴怣B
+        size = (limit / (1024 * 1024)).toFixed(2) + "MB";
+      } else if (limit < 1024 * 1024 * 1024 * 1024) {
+        //鍏朵粬杞寲鎴怗B
+        size = (limit / (1024 * 1024 * 1024)).toFixed(2) + "GB";
+      } else {
+        size = (limit / (1024 * 1024 * 1024 * 1024)).toFixed(2) + "TB";
+      }
 
+      var sizestr = size + "";
+      var len = sizestr.indexOf(".");
+      var dec = sizestr.substr(len + 1, 2);
+      if (dec == "00") {
+        //褰撳皬鏁扮偣鍚庝负00鏃� 鍘绘帀灏忔暟閮ㄥ垎
+        return sizestr.substring(0, len) + sizestr.substr(len + 3, 2);
+      }
+
+      return sizestr;
+    },
   },
   data() {
     return {
       activeName: "proc",
+      activeChartItem: "cpu",
+      yAxisMaxVal: "100%",
+      algoProcessData: [],
+      appProcessData: [],
+      vasystemServicesData: [],
       eChartsObj: {},
+      activeTab: 0,
       eChartsBaseOpt: {
+        title: {
+          top: 10,
+        },
         animation: false,
+        grid: {
+          show: true,
+          left: "1%",
+          right: "4%",
+          bottom: "3%",
+
+          containLabel: true,
+          borderWidth: 2,
+          borderColor: "#000",
+        },
         xAxis: {
           type: "category",
           boundaryGap: false,
-          data: Array.from({ length: 100 }, () => 0),
+          data: Array.from({ length: 60 }, () => 0),
+          // show: false,
           axisLabel: {
-            show: false
+            show: false,
           },
           axisTick: {
-            show: false
-          }
+            show: false,
+          },
+          splitLine: {
+            show: true,
+            interval: 5,
+            lineStyle: {
+              width: 1,
+              type: "solid",
+              color: "rgb(242,242,242)",
+            },
+          },
         },
         yAxis: {
-          type: 'value',
+          type: "value",
+          // show: false,
+          axisLine: {
+            show: false,
+          },
           axisLabel: {
-            show: false
+            show: false,
           },
           axisTick: {
-            show: false
-          }
+            show: false,
+          },
+          splitLine: {
+            lineStyle: {
+              color: "rgb(242,242,242)",
+            },
+          },
         },
         series: [
           {
-            type: 'line',
-            symbol: 'none',
-            data: Array.from({ length: 100 }, () => 0),
+            type: "line",
+            symbol: "none",
+            data: Array.from({ length: 60 }, () => 0),
             // smooth: true,
-            areaStyle: {}
-          }
-        ]
+            itemStyle: {},
+            areaStyle: {},
+          },
+        ],
       },
-      services: [
-        {
-          name: "绯荤粺閰嶇疆鏈嶅姟",
-          status: "宸插惎鍔�",
-          text: "瀹炵幇绯荤粺鐨勯�氱敤鍔熻兘閰嶇疆"
-
-        }
-      ]
+      cpuUtilizations: Array.from({ length: 60 }, () => 0),
+      memUtilizations: Array.from({ length: 60 }, () => 0),
+      gpuUtilizations: Array.from({ length: 60 }, () => 0),
+      diskIOWriteCount: Array.from({ length: 60 }, () => 0),
+      diskIOReadCount: Array.from({ length: 60 }, () => 0),
+      netReciveCount: Array.from({ length: 60 }, () => 0),
+      netSendCount: Array.from({ length: 60 }, () => 0),
+      cpuModel: "",
+      cpuUsedPercent: 0,
+      cpuMaxRate: 0,
+      cpuCount: 0,
+      cpuCore: 0,
+      memTotal: 0,
+      memUsed: 0,
+      memFree: 0,
+      memCache: 0,
+      memUsedPercent: 0,
+      netSend: 0,
+      netRecive: 0,
+      ipAddr: "",
+      macAddr: "",
+      gpuUsedPercent: 0,
+      disks: {},
+      activeDisk: {},
+      ioRead: 0,
+      ioWrite: 0,
     };
   },
   mounted() {
+    this.dataCollection();
     this.initChart();
-    if (!this.isShow('vindicate:device')) {
-      this.activeName = "dbvdc"
-    }
-  },
-  computed: {
-    isAdmin() {
-      if (
-        sessionStorage.getItem('userInfo') &&
-        sessionStorage.getItem('userInfo') !== ''
-      ) {
-        let loginName = JSON.parse(sessionStorage.getItem('userInfo')).username
-        return (
-          loginName === 'superadmin' || loginName === 'basic'
-        )
-      }
-      return false;
-    }
   },
   methods: {
+    // 寰幆閲囬泦鎵�鏈夋暟鎹�
+    dataCollection() {
+      this.serviceCollect();
+      this.procCollect();
+      setTimeout(() => {
+        this.dataCollection();
+      }, 5000);
+    },
+    serviceCollect() {
+      showService()
+        .then((rsp) => {
+          if (rsp && rsp.success) {
+            rsp.data.sort(function (obj1, obj2) {
+              var val1 = obj1.name;
+              var val2 = obj2.name;
+              if (val1 < val2) {
+                return -1;
+              } else if (val1 > val2) {
+                return 1;
+              } else {
+                return 0;
+              }
+            });
+            this.vasystemServicesData = rsp.data;
+          }
+        })
+        .catch(() => {});
+    },
+    procCollect() {
+      showProcesses()
+        .then((rsp) => {
+          if (rsp && rsp.success) {
+            if (rsp.data.algos) this.algoProcessData = rsp.data.algos;
+
+            if (rsp.data.apps) this.appProcessData = rsp.data.apps;
+          }
+        })
+        .catch(() => {});
+    },
+    getSystemState() {
+      showSystemStates().then((rsp) => {
+        if (rsp && rsp.success) {
+          // 澶勭悊cpu
+          this.cpuUtilizations = this.cpuUtilizations.slice(1);
+          this.cpuUtilizations.push(rsp.data.cpu.toFixed(2));
+          this.cpuUsedPercent = this.cpuUtilizations[59];
+          if (rsp.data.cpu_info) {
+            this.cpuMaxRate = (rsp.data.cpu_info[0].mhz / 1024).toFixed(2);
+            this.cpuModel = rsp.data.cpu_info[0].modelName;
+            this.cpuCore =
+              Number(rsp.data.cpu_info[rsp.data.cpu_info.length - 1].coreId) +
+              1;
+            this.cpuCount = (rsp.data.cpu_info.length / this.cpuCore).toFixed(
+              0
+            );
+          }
+
+          // 鍐呭瓨
+          this.memUtilizations = this.memUtilizations.slice(1);
+          this.memUtilizations.push(rsp.data.mem.usedPercent.toFixed(2));
+          this.memTotal = (rsp.data.mem.total / 1024 / 1024 / 1000).toFixed(0);
+          this.memUsed = (rsp.data.mem.used / 1024 / 1024 / 1000).toFixed(2);
+          this.memFree = (rsp.data.mem.free / 1024 / 1024 / 1000).toFixed(2);
+          this.memCache = (
+            (rsp.data.mem.cached + rsp.data.mem.buffers) /
+            1024 /
+            1024 /
+            1000
+          ).toFixed(2);
+          this.memUsedPercent = rsp.data.mem.usedPercent.toFixed(2);
+
+          // 绠楀姏
+          this.gpuUtilizations = this.gpuUtilizations.slice(1);
+          this.gpuUtilizations.push(rsp.data.gpu.toFixed(2));
+          this.gpuUsedPercent = this.gpuUtilizations[59];
+
+          // 缃戠粶
+          this.netReciveCount = this.netReciveCount.slice(1);
+          this.netReciveCount.push(rsp.data.net.bytesRecv);
+          this.netSendCount = this.netSendCount.slice(1);
+          this.netSendCount.push(rsp.data.net.bytesSent);
+
+          this.netRecive = this.netReciveCount[59];
+          this.netSend = this.netSendCount[59];
+          this.macAddr = rsp.data.net.mac;
+          if (rsp.data.net.addr.length) {
+            this.ipAddr = rsp.data.net.addr[0].addr;
+          }
+
+          // 纾佺洏
+          rsp.data.disk.sort(function (obj1, obj2) {
+            var val1 = obj1.name;
+            var val2 = obj2.name;
+            if (val1 < val2) {
+              return -1;
+            } else if (val1 > val2) {
+              return 1;
+            } else {
+              return 0;
+            }
+          });
+
+          rsp.data.disk.forEach((d) => {
+            if (d.name in this.disks) {
+              this.disks[d.name].readBytes =
+                this.disks[d.name].readBytes.slice(1);
+              this.disks[d.name].readBytes.push(d.readBytes);
+              this.disks[d.name].writeBytes =
+                this.disks[d.name].writeBytes.slice(1);
+              this.disks[d.name].writeBytes.push(d.writeBytes);
+            } else {
+              this.disks[d.name] = {};
+              this.disks[d.name]["info"] = d.info;
+              this.disks[d.name]["readBytes"] = Array.from(
+                { length: 60 },
+                () => 0
+              );
+              this.disks[d.name]["writeBytes"] = Array.from(
+                { length: 60 },
+                () => 0
+              );
+            }
+          });
+
+          // this.disks = rsp.data.disk;
+        }
+
+        this.setChartData();
+        setTimeout(() => {
+          this.getSystemState();
+        }, 1000);
+      });
+    },
     isShow(authority) {
       if (this.isAdmin) {
-        return true
-      } else if (
-        this.buttonAuthority.indexOf(',' + authority + ',') > -1
-      ) {
-        return true
+        return true;
+      } else if (this.buttonAuthority.indexOf("," + authority + ",") > -1) {
+        return true;
       } else {
-        return false
+        return false;
       }
     },
     format(array) {
       return [
         this.$moment(array[0]).format("YYYY-MM-DD"),
-        this.$moment(array[1]).format("YYYY-MM-DD")
+        this.$moment(array[1]).format("YYYY-MM-DD"),
       ];
+    },
+    setActiveChartItem(item) {
+      this.activeChartItem = item;
+      this.eChartsObj.clear();
+      this.setChartData();
     },
     initChart() {
       this.eChartsObj = echarts.init(this.$refs.graphs);
-      this.eChartsObj.setOption(this.eChartsBaseOpt);
-      this.cpuMonitor()
+      this.getSystemState();
     },
-    cpuMonitor() {
-      let rate = Math.floor(Math.random() * 100);
-      let data = this.eChartsBaseOpt.series[0].data.slice(1);
-      data.push(rate)
-      this.eChartsBaseOpt.series[0].data = data;
-      this.eChartsObj.setOption(this.eChartsBaseOpt);
-      setTimeout(() => {
-        this.cpuMonitor()
-      }, 1000)
-    }
+    setChartData() {
+      let option = JSON.parse(JSON.stringify(this.eChartsBaseOpt));
+      switch (this.activeChartItem) {
+        case "cpu":
+          this.yAxisMaxVal = this.cpuModel;
+          option.title.text = "CPU";
+          option.title.subtext = "%鍗犵敤鐜�";
+          option.yAxis.max = 100;
+          option.yAxis.min = 0;
+          option.grid.borderColor = "#8aadd0";
+          option.series[0].itemStyle.color = "#8aadd0";
+          option.series[0].areaStyle.color = "#a8d4ff";
+          option.series[0].data = this.cpuUtilizations;
 
-  }
+          break;
+        case "mem":
+          this.yAxisMaxVal = this.memTotal + "G";
+          option.title.text = "鍐呭瓨";
+          option.title.subtext = "鍐呭瓨浣跨敤閲�";
+          option.yAxis.max = 100;
+          option.yAxis.min = 0;
+          option.grid.borderColor = "#ff9900";
+          option.series[0].itemStyle.color = "#ff9900";
+          option.series[0].areaStyle.color = "#f7bb88";
+          option.series[0].data = this.memUtilizations;
+          break;
+        case "gpu":
+          this.yAxisMaxVal = "100%";
+          option.title.text = "绠楀姏";
+          option.title.subtext = "%浣跨敤鐜�";
+          option.yAxis.max = 100;
+          option.yAxis.min = 0;
+          option.grid.borderColor = "#bc84d8";
+          option.series[0].itemStyle.color = "#bc84d8";
+          option.series[0].areaStyle.color = "#de9dff";
+          option.series[0].data = this.gpuUtilizations;
+          break;
+        case "net":
+          this.yAxisMaxVal = "";
+          option.title.text = "缃戠粶";
+          option.title.subtext = "缃戠粶璐熻浇";
+          option.grid.borderColor = "#4696da";
+          option.series[0].itemStyle.color = "#ffa16a";
+          option.series[0].areaStyle.color = "#d68658";
+          option.series[0].data = this.netReciveCount;
+          option.series.push({
+            type: "line",
+            symbol: "none",
+            data: this.netSendCount,
+            // smooth: true,
+            itemStyle: {
+              color: "#4696da",
+            },
+            areaStyle: {
+              color: "#4eacfd",
+            },
+          });
+          break;
+        default:
+          if (this.activeChartItem.indexOf("disk|") == 0) {
+            let dev = this.activeChartItem.split("|")[1];
+
+            this.yAxisMaxVal = "";
+            option.title.text = "纾佺洏";
+            option.title.subtext = "纾佺洏浼犺緭閫熺巼";
+            option.grid.borderColor = "#33cc66";
+            option.series[0].itemStyle.color = "#4696da";
+            option.series[0].areaStyle.color = "#4eacfd";
+            option.series[0].data = this.disks[dev].readBytes;
+            option.series.push({
+              type: "line",
+              symbol: "none",
+              data: this.disks[dev].writeBytes,
+              // smooth: true,
+              itemStyle: {
+                color: "#33ff66",
+              },
+              areaStyle: {
+                color: "#33cc66",
+              },
+            });
+
+            this.activeDisk = this.disks[dev].info;
+            this.ioRead = this.disks[dev].readBytes[59];
+            this.ioWrite = this.disks[dev].writeBytes[59];
+          }
+          break;
+      }
+
+      this.eChartsObj.setOption(option);
+    },
+  },
 };
 </script>
 <style lang="scss">
@@ -186,33 +726,225 @@
   width: 100% !important;
   min-width: 759px;
   box-sizing: border-box;
-  padding: 10px;
-  // background-color: #e9ebf2;
   background-color: #fff;
+  height: 100%;
+
+  .name_container {
+    text-align: left;
+    margin-left: 38%;
+  }
+
+  .el-table th.el-table__cell.is-leaf,
+  .el-table td.el-table__cell {
+    border-bottom: none;
+  }
+  .el-table--enable-row-hover .el-table__body tr:hover > td {
+    background-color: #4e94ff !important;
+    color: #fff;
+  }
+  .el-table th.el-table__cell > .cell {
+    text-align: center;
+  }
+  .tableBox {
+    .el-table td.el-table__cell {
+      border-bottom: none;
+    }
+    .el-table--striped
+      .el-table__body
+      tr.el-table__row--striped
+      td.el-table__cell {
+      background: #f8f8ff;
+    }
+
+    th {
+      padding: 0 !important;
+      height: 40px;
+      line-height: 40px;
+      border-radius: 4px;
+    }
+    td {
+      padding: 0 !important;
+      height: 40px;
+      line-height: 40px;
+      text-align: center;
+    }
+  }
+  .el-tabs--top {
+    height: 100%;
+    background: #f2f2f7;
+    padding: 4px;
+    box-sizing: border-box;
+  }
+  #systemMonitor .el-tabs__header {
+    background: #fff;
+    border-radius: 4px;
+    background-image: url("/images/systemMonitor/Group 224.png");
+    background-repeat: no-repeat;
+    background-size: 116px;
+    background-position: top 15px right 18px;
+  }
+  .el-tabs__nav-wrap {
+    padding: 25px 20px;
+  }
+  #systemMonitor .el-tabs__active-bar {
+    /* background-color: #ff7733; */
+    visibility: hidden;
+  }
+  #systemMonitor .el-tabs__content {
+    padding: 0px !important;
+    height: calc(100% - 97px);
+    width: calc(100% - 0px);
+    .el-tab-pane {
+      width: 100%;
+      display: flex;
+      height: 100%;
+      .form-title {
+        text-align: left;
+        font-size: 14px;
+        width: calc(100% - 200px);
+        padding: 10px;
+        box-sizing: border-box;
+        .desc {
+          font-size: 16px;
+          line-height: 22px;
+          color: #4e94ff;
+          margin-left: 10px;
+          margin-bottom: 5px;
+        }
+      }
+    }
+  }
+
+  .left-tab {
+    width: 200px;
+    height: 100%;
+    border-radius: 4px;
+    background: #ffffff;
+    padding: 20px;
+
+    border-radius: 4px;
+    box-sizing: border-box;
+
+    .tab-item {
+      width: 160px;
+      height: 85px;
+      /* left: 24px; */
+      color: #333333;
+      /* top: 158px; */
+      background: #f8f8ff;
+      cursor: pointer;
+      border: 2px solid transparent;
+      border-radius: 8px;
+      margin-bottom: 20px;
+      padding: 12px;
+      box-sizing: border-box;
+      text-align: left;
+      position: relative;
+      .title {
+        font-weight: bold;
+        font-size: 16px;
+        line-height: 22px;
+        margin-bottom: 4px;
+      }
+      .subtitle {
+        font-size: 12px;
+        line-height: 17px;
+        z-index: 99;
+        position: absolute;
+      }
+      .icon {
+        color: #6da3f3;
+        font-size: 60px;
+        position: absolute;
+        bottom: 4px;
+        right: 4px;
+      }
+    }
+    .tab-item-active {
+      background-color: #4e94ff;
+      color: #fff;
+    }
+    .tab-item:hover {
+      border: 2px solid #4e94ff;
+    }
+  }
+  .el-tabs__header {
+    margin: 0;
+  }
+  .el-tabs__nav-wrap::after {
+    content: "";
+    position: absolute;
+    left: 0;
+    bottom: 0;
+    width: 100%;
+    height: 3px;
+    background-color: #f2f2f7;
+    z-index: 1;
+  }
   .form-title {
     text-align: left;
     font-size: 14px;
+    margin-left: 4px;
+    background: #fff;
+  }
+  #systemMonitor .el-tabs__header .el-tabs__item:nth-child(2) {
+    padding-left: 39px;
+  }
+  #systemMonitor .el-tabs__header .el-tabs__item {
+    padding: 0 39px;
+
+    height: 40px;
+    background: #f8f8ff;
+    font-family: PingFangSC-Regular;
+    font-size: 14px;
+    font-weight: bold;
+    font-size: 16px;
+    color: #222222;
+    text-align: center;
+    border: 0px solid transparent;
+    margin-right: 2px;
+  }
+
+  #systemMonitor .el-tabs__header .el-tabs__item:not(.is-disabled):hover {
+    color: initial;
+  }
+  #systemMonitor .el-tabs__header .el-tabs__item.is-active {
+    border: none;
+    /* font-weight: bold; */
+    background: #4e94ff;
+    color: #fff !important;
   }
 
   .graphs-chart {
-    height: 380px;
-    width: 450px;
+    height: 500px;
+    width: 900px;
+    margin-left: 15px;
     // border: 1px solid rgb(69, 69, 172);
   }
+
   .column-left {
     background-color: #fff;
     position: relative;
     float: left;
   }
+
   .column-right {
-    //overflow: hidden;
-    overflow-y: hidden;
+    background-color: #fff;
+    overflow-y: auto;
     overflow-x: auto;
   }
-  .resize-bar {
-    width: 200px;
-    height: 400px;
+
+  .max-val {
+    position: absolute;
+    right: 4%;
+    top: 8%;
   }
+
+  .resize-bar {
+    width: 285px;
+    // height: 600px;
+  }
+
   /* 鎷栨嫿绾� */
   .resize-line {
     position: absolute;
@@ -225,41 +957,113 @@
   }
 
   .ax_default {
-    font-family: "Arial Normal", "Arial";
-    font-weight: 400;
-    font-style: normal;
-    font-size: 13px;
-    text-align: center;
-    line-height: normal;
-    width: 200px;
-    height: 50px;
-    font-size: 16px;
+    width: 270px;
+    height: 70px;
+    padding: 10px;
+    font-size: 14px;
+    margin: 5px;
     cursor: pointer;
-    margin-bottom: 15px;
+    border-radius: 4px;
+    box-sizing: border-box;
+    display: flex;
+    justify-content: space-between;
+    color: #333333;
+  }
+  .ax_default:hover {
+    color: #333333;
+    background: #f8f8ff;
+  }
+  .selected {
+    // background: inherit;
+    // background-color: #cde8ff;
+    // border: none;
+    // border-radius: 8px;
+    background: inherit;
+    background-color: #4e94ff;
+    border: none;
+    border-radius: 8px;
+    color: #fff;
   }
 
   .ax_default_pic {
-    position: absolute;
+    // position: absolute;
     border-width: 0px;
-    width: 65px;
-    height: 45px;
-    background: inherit;
-    background-color: rgba(255, 255, 255, 0);
+    width: 66px;
+    height: 50px;
     box-sizing: border-box;
-    border-width: 1px;
-    border-style: solid;
-    border-color: rgba(255, 153, 0, 1);
-    border-radius: 0px;
-    -moz-box-shadow: none;
-    -webkit-box-shadow: none;
-    box-shadow: none;
+    border: 1px solid rgba(255, 153, 0, 1);
+    background-color: #fff;
+    background-repeat: no-repeat;
+    background-position: bottom;
   }
 
+  .color-cpu {
+    border-color: #8aadd0;
+    background-image: url("/images/systemMonitor/cpu.png");
+  }
+
+  .color-mem {
+    border-color: #ff9900;
+    background-image: url("/images/systemMonitor/mem.png");
+  }
+
+  .color-gpu {
+    border-color: #bc84d8;
+    background-image: url("/images/systemMonitor/gpu.png");
+  }
+
+  .color-net {
+    border-color: #4696da;
+    background-image: url("/images/systemMonitor/net.png");
+  }
+
+  .color-disk {
+    border-color: #33cc66;
+    background-image: url("/images/systemMonitor/disk.png");
+  }
+
+  .ax_default_text {
+    position: relative;
+    text-align: right;
+
+    font-size: 16px;
+    line-height: 22px;
+    font-weight: bold;
+  }
+
+  .ax_default_subtext {
+    font-size: 14px;
+    line-height: 20px;
+    text-align: right;
+  }
+
+  .ax_default_label {
+    width: 120px;
+    font-size: 15px;
+    display: inline-block;
+    float: left;
+
+    b {
+      font-family: "鎬濇簮榛戜綋";
+      font-weight: 400;
+      font-style: normal;
+      color: #a1a1a1;
+    }
+
+    p {
+      margin-top: 5px;
+    }
+  }
+  .ax_label_flex {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    flex-direction: column;
+  }
   .s-system-monitor-breadcrumb {
     height: 5%;
     box-sizing: border-box;
     border: 1px solid #e4e7ed;
-    box-shadow: #e4e7ed 0px 0px 9px inset;
     box-shadow: #e4e7ed 0px 0px 9px inset;
     border-radius: 5px;
   }
@@ -296,12 +1100,13 @@
       }
     }
   }
+
   .el-tabs__content {
     height: calc(100% - 64px);
     width: calc(100% - 20px);
     box-sizing: border-box;
     overflow-y: auto;
-    padding: 10px 40px !important;
+    padding: 10px 10px !important;
     .el-tab-pane {
       width: 100%;
       .s-title {

--
Gitblit v1.8.0