From c0c034b3ef0fdf0fd9c802d5984dbd717db6817a Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期三, 06 九月 2023 17:54:55 +0800
Subject: [PATCH] 定制桌面.

---
 src/pages/systemMonitor/index/App.vue |  847 ++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 553 insertions(+), 294 deletions(-)

diff --git a/src/pages/systemMonitor/index/App.vue b/src/pages/systemMonitor/index/App.vue
index 88437be..8e2fb1d 100644
--- a/src/pages/systemMonitor/index/App.vue
+++ b/src/pages/systemMonitor/index/App.vue
@@ -1,94 +1,148 @@
 <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湪杩涜{{algoProcessData.length}}涓畻娉曞崟鍏�)
-          <el-table :data="algoProcessData" style="width: 100%">
-            <el-table-column prop="desc" label="鍚嶇О" width="180"></el-table-column>
-            <el-table-column label="CPU" width="180">
+      <el-tab-pane name="proc" v-if="false">
+        <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>
+        <div class="form-title" v-if="activeTab == 0">
+          <div class="desc">
+            <b>绠楁硶鍗曞厓</b>
+            (姝e湪杩涜{{ algoProcessData.length }}涓畻娉曞崟鍏�)
+          </div>
+
+          <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>{{ scope.row.cpu.toFixed(2)}} %</span>
+                <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>
+                <span>{{ scope.row.mem.toFixed(2) }} %</span>
               </template>
             </el-table-column>
-            <el-table-column prop="disk" label="纭洏"></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>
+                <span>{{ scope.row.gpu }} M</span>
               </template>
             </el-table-column>
-            <el-table-column prop="net" label="缃戠粶"></el-table-column>
           </el-table>
         </div>
 
-        <div class="form-title" style="margin-top:20px">
-          <b>搴旂敤鍗曞厓</b>
-          (姝e湪杩涜{{appProcessData.length}}涓簲鐢ㄥ崟鍏�)
-          <el-table :data="appProcessData" style="width: 100%">
-            <el-table-column prop="desc" label="鍚嶇О" width="180"></el-table-column>
-            <el-table-column prop="cpu" label="CPU" width="180"></el-table-column>
-            <el-table-column prop="mem" label="鍐呭瓨"></el-table-column>
-            <el-table-column prop="disk" label="纭洏"></el-table-column>
+        <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-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', activeChartItem == 'cpu' ?'selected': '']"
-              @click="setActiveChartItem('cpu')"
-            >
+            <div :class="['ax_default', activeChartItem == 'cpu' ? 'selected' : '']" @click="setActiveChartItem('cpu')">
               <div class="ax_default_pic color-cpu"></div>
-              <div class="ax_default_text">CPU</div>
-              <div class="ax_default_subtext">{{cpuUsedPercent}}%</div>
+              <div>
+                <div class="ax_default_text">CPU</div>
+                <div class="ax_default_subtext">{{ cpuUsedPercent }}%</div>
+              </div>
             </div>
 
-            <div
-              :class="['ax_default', activeChartItem == 'mem' ?'selected': '']"
-              @click="setActiveChartItem('mem')"
-            >
+            <div :class="['ax_default', activeChartItem == 'mem' ? 'selected' : '']" @click="setActiveChartItem('mem')">
               <div class="ax_default_pic color-mem"></div>
-              <div class="ax_default_text">鍐呭瓨</div>
-              <div class="ax_default_subtext">{{memUsedPercent}}%</div>
+              <div>
+                <div class="ax_default_text">鍐呭瓨</div>
+                <div class="ax_default_subtext">{{ memUsedPercent }}%</div>
+              </div>
             </div>
 
-            <div
-              :class="['ax_default', activeChartItem == 'gpu' ?'selected': '']"
-              @click="setActiveChartItem('gpu')"
-            >
+            <div :class="['ax_default', activeChartItem == 'gpu' ? 'selected' : '']" @click="setActiveChartItem('gpu')">
               <div class="ax_default_pic color-gpu"></div>
-              <div class="ax_default_text">绠楀姏</div>
-              <div class="ax_default_subtext">{{gpuUsedPercent}}%</div>
+              <div>
+                <div class="ax_default_text">绠楀姏</div>
+                <div class="ax_default_subtext">{{ gpuUsedPercent }}%</div>
+              </div>
             </div>
 
-            <div
-              :class="['ax_default', activeChartItem == 'net' ?'selected': '']"
-              @click="setActiveChartItem('net')"
-            >
+            <div :class="['ax_default', activeChartItem == 'net' ? 'selected' : '']" @click="setActiveChartItem('net')">
               <div class="ax_default_pic color-net"></div>
-              <div class="ax_default_text">缃戠粶</div>
-              <div class="ax_default_subtext">{{netSend | byteConver}} / {{netRecive | byteConver}}</div>
+              <div>
+                <div class="ax_default_text">缃戠粶</div>
+                <div class="ax_default_subtext">{{ netSend | byteConver }} / {{ netRecive | byteConver }}</div>
+              </div>
             </div>
 
             <div
               v-for="(v, k) in disks"
               :key="k"
-              :class="['ax_default', activeChartItem == ('disk|' + k) ?'selected': '']"
-              @click="setActiveChartItem('disk|'+k)"
+              :class="['ax_default', activeChartItem == 'disk|' + k ? 'selected' : '']"
+              @click="setActiveChartItem('disk|' + k)"
             >
               <div class="ax_default_pic color-disk"></div>
-              <div class="ax_default_text">纾佺洏 {{k}}</div>
-              <div class="ax_default_subtext">{{v.info.total | byteConver}}</div>
+              <div>
+                <div class="ax_default_text">纾佺洏 {{ k }}</div>
+                <div class="ax_default_subtext">
+                  {{ v.info.total | byteConver }}
+                </div>
+              </div>
             </div>
           </div>
 
@@ -96,92 +150,104 @@
         </div>
 
         <div class="column-right">
-          <div class="max-val">{{yAxisMaxVal}}</div>
+          <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>
+              <p>{{ cpuUsedPercent }}%</p>
             </div>
             <div class="ax_default_label">
               <b>涓婚</b>
-              <p>{{cpuMaxRate}}Ghz</p>
+              <p>{{ cpuMaxRate }}Ghz</p>
             </div>
             <div class="ax_default_label">
               <b>鎻掓Ы</b>
-              <p>{{cpuCount}}</p>
+              <p>{{ cpuCount }}</p>
             </div>
             <div class="ax_default_label">
               <b>鍐呮牳</b>
-              <p>{{cpuCore}}</p>
+              <p>{{ cpuCore }}</p>
             </div>
           </div>
 
           <div v-show="activeChartItem == 'mem'">
             <div class="ax_default_label">
               <b>浣跨敤涓�</b>
-              <p>{{memUsed}}G</p>
+              <p>{{ memUsed }}G</p>
             </div>
             <div class="ax_default_label">
               <b>宸茬紦瀛�</b>
-              <p>{{memCache}}G</p>
+              <p>{{ memCache }}G</p>
             </div>
             <div class="ax_default_label">
               <b>鍙敤</b>
-              <p>{{memFree}}G</p>
+              <p>{{ memFree }}G</p>
             </div>
           </div>
 
           <div v-show="activeChartItem == 'net'">
             <div class="ax_default_label">
               <b>鎺ユ敹</b>
-              <p>{{netRecive |byteConver}}</p>
+              <p>{{ netRecive | byteConver }}</p>
             </div>
             <div class="ax_default_label">
               <b>鍙戦��</b>
-              <p>{{netSend |byteConver}}</p>
+              <p>{{ netSend | byteConver }}</p>
             </div>
             <div class="ax_default_label">
               <b>IP鍦板潃</b>
-              <p>{{ipAddr}}</p>
+              <p>{{ ipAddr }}</p>
             </div>
-            <div class="ax_default_label" style="margin-left: 19px;">
+            <div class="ax_default_label" style="margin-left: 19px">
               <b>MAC鍦板潃</b>
-              <p>{{macAddr}}</p>
+              <p>{{ macAddr }}</p>
             </div>
           </div>
 
           <div v-show="isDisk">
             <div class="ax_default_label">
               <b>瀹归噺</b>
-              <p>{{activeDisk.total |byteConver}}</p>
+              <p>{{ activeDisk.total | byteConver }}</p>
             </div>
             <div class="ax_default_label">
               <b>宸茬敤</b>
-              <p>{{activeDisk.used |byteConver}}</p>
+              <p>{{ activeDisk.used | byteConver }}</p>
             </div>
             <div class="ax_default_label">
               <b>鍙敤</b>
-              <p>{{activeDisk.free |byteConver}}</p>
+              <p>{{ activeDisk.free | byteConver }}</p>
             </div>
             <div class="ax_default_label">
               <b>璇诲彇閫熷害</b>
-              <p>{{ioRead | byteConver}}</p>
+              <p>{{ ioRead | byteConver }}</p>
             </div>
             <div class="ax_default_label">
               <b>鍐欏叆閫熷害</b>
-              <p>{{ioWrite | byteConver}}</p>
+              <p>{{ ioWrite | byteConver }}</p>
             </div>
           </div>
         </div>
       </el-tab-pane>
 
-      <el-tab-pane label="鏈嶅姟" name="service">
-        <el-table :data="vasystemServicesData">
+      <el-tab-pane name="service" v-if="false">
+        <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">
@@ -197,76 +263,77 @@
 </template>
 
 <script>
-import echarts from "echarts";
+import echarts from "echarts"
 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'
-        )
+      if (sessionStorage.getItem("userInfo") && sessionStorage.getItem("userInfo") !== "") {
+        let loginName = JSON.parse(sessionStorage.getItem("userInfo")).username
+        return loginName === "superadmin" || loginName === "basic"
       }
-      return false;
+      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";
+      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";
+        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);
+      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;
+      return sizestr
     }
   },
   data() {
     return {
-      activeName: "proc",
+      activeName: "top",
       activeChartItem: "cpu",
       yAxisMaxVal: "100%",
       algoProcessData: [],
       appProcessData: [],
       vasystemServicesData: [],
       eChartsObj: {},
+      activeTab: 0,
       eChartsBaseOpt: {
         title: {
-          top: 10,
+          top: 10
         },
         animation: false,
         grid: {
           show: true,
-          left: '1%',
-          right: '4%',
-          bottom: '3%',
+          left: "1%",
+          right: "4%",
+          bottom: "3%",
+
           containLabel: true,
           borderWidth: 2,
-          borderColor: '#000'
+          borderColor: "#000"
         },
         xAxis: {
           type: "category",
@@ -284,12 +351,13 @@
             interval: 5,
             lineStyle: {
               width: 1,
-              type: 'solid'
+              type: "solid",
+              color: "rgb(242,242,242)"
             }
           }
         },
         yAxis: {
-          type: 'value',
+          type: "value",
           // show: false,
           axisLine: {
             show: false
@@ -299,12 +367,17 @@
           },
           axisTick: {
             show: false
+          },
+          splitLine: {
+            lineStyle: {
+              color: "rgb(242,242,242)"
+            }
           }
         },
         series: [
           {
-            type: 'line',
-            symbol: 'none',
+            type: "line",
+            symbol: "none",
             data: Array.from({ length: 60 }, () => 0),
             // smooth: true,
             itemStyle: {},
@@ -338,25 +411,95 @@
       activeDisk: {},
       ioRead: 0,
       ioWrite: 0
-    };
+    }
   },
   mounted() {
-    this.dataCollection();
-    this.initChart();
+    this.dataCollection()
+    this.initChart()
   },
   methods: {
     // 寰幆閲囬泦鎵�鏈夋暟鎹�
     dataCollection() {
-      this.serviceCollect();
-      this.procCollect();
+      this.serviceCollect()
+      this.procCollect()
       setTimeout(() => {
-        this.dataCollection();
+        this.dataCollection()
       }, 5000)
     },
     serviceCollect() {
-      showService().then(rsp => {
+      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) {
-          rsp.data.sort(function (obj1, obj2) {
+          // 澶勭悊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) {
@@ -367,175 +510,99 @@
               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;
+          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 {
-              return 0;
+              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)
             }
           })
-
-          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();
+        this.setChartData()
         setTimeout(() => {
-          this.getSystemState();
+          this.getSystemState()
         }, 1000)
       })
     },
     isShow(authority) {
       if (this.isAdmin) {
         return true
-      } else if (
-        this.buttonAuthority.indexOf(',' + authority + ',') > -1
-      ) {
+      } else if (this.buttonAuthority.indexOf("," + authority + ",") > -1) {
         return true
       } else {
         return false
       }
     },
     format(array) {
-      return [
-        this.$moment(array[0]).format("YYYY-MM-DD"),
-        this.$moment(array[1]).format("YYYY-MM-DD")
-      ];
+      return [this.$moment(array[0]).format("YYYY-MM-DD"), this.$moment(array[1]).format("YYYY-MM-DD")]
     },
     setActiveChartItem(item) {
-      this.activeChartItem = item;
-      this.eChartsObj.clear();
-      this.setChartData();
+      this.activeChartItem = item
+      this.eChartsObj.clear()
+      this.setChartData()
     },
     initChart() {
-      this.eChartsObj = echarts.init(this.$refs.graphs);
-      this.getSystemState();
+      this.eChartsObj = echarts.init(this.$refs.graphs)
+      this.getSystemState()
     },
     setChartData() {
-      let option = JSON.parse(JSON.stringify(this.eChartsBaseOpt));
+      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;
+        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;
+          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',
+            type: "line",
+            symbol: "none",
             data: this.netSendCount,
             // smooth: true,
             itemStyle: {
@@ -545,21 +612,21 @@
               color: "#4eacfd"
             }
           })
-          break;
+          break
         default:
           if (this.activeChartItem.indexOf("disk|") == 0) {
-            let dev = this.activeChartItem.split("|")[1];
+            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;
+            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',
+              type: "line",
+              symbol: "none",
               data: this.disks[dev].writeBytes,
               // smooth: true,
               itemStyle: {
@@ -570,30 +637,207 @@
               }
             })
 
-            this.activeDisk = this.disks[dev].info;
-            this.ioRead = this.disks[dev].readBytes[59];
-            this.ioWrite = this.disks[dev].writeBytes[59];
+            this.activeDisk = this.disks[dev].info
+            this.ioRead = this.disks[dev].readBytes[59]
+            this.ioWrite = this.disks[dev].writeBytes[59]
           }
-          break;
+          break
       }
 
-      this.eChartsObj.setOption(option);
+      this.eChartsObj.setOption(option)
     }
-
   }
-};
+}
 </script>
 <style lang="scss">
 .s-system-monitor {
   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 {
@@ -610,8 +854,8 @@
   }
 
   .column-right {
-    //overflow: hidden;
-    overflow-y: hidden;
+    background-color: #fff;
+    overflow-y: auto;
     overflow-x: auto;
   }
 
@@ -622,8 +866,8 @@
   }
 
   .resize-bar {
-    width: 238px;
-    height: 610px;
+    width: 285px;
+    // height: 600px;
   }
 
   /* 鎷栨嫿绾� */
@@ -638,28 +882,42 @@
   }
 
   .ax_default {
-    width: 207px;
-    height: 45px;
+    width: 270px;
+    height: 70px;
     padding: 10px;
-    font-size: 15px;
+    font-size: 14px;
     margin: 5px;
     cursor: pointer;
+    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: #cde8ff;
+    background-color: #4e94ff;
     border: none;
     border-radius: 8px;
+    color: #fff;
   }
 
   .ax_default_pic {
-    position: absolute;
+    // position: absolute;
     border-width: 0px;
     width: 66px;
-    height: 45px;
+    height: 50px;
     box-sizing: border-box;
     border: 1px solid rgba(255, 153, 0, 1);
+    background-color: #fff;
     background-repeat: no-repeat;
     background-position: bottom;
   }
@@ -691,16 +949,17 @@
 
   .ax_default_text {
     position: relative;
-    text-align: left;
-    margin-left: 72px;
+    text-align: right;
+
+    font-size: 16px;
+    line-height: 22px;
+    font-weight: bold;
   }
 
   .ax_default_subtext {
-    font-size: 13px;
-    margin-left: 72px;
-    line-height: 35px;
-    color: #4e4d4d;
-    text-align: left;
+    font-size: 14px;
+    line-height: 20px;
+    text-align: right;
   }
 
   .ax_default_label {

--
Gitblit v1.8.0