From 401524fb5661d57ffb2229d683fe4de85b65fd1c Mon Sep 17 00:00:00 2001
From: haoxuan <haoxuan>
Date: 星期四, 31 八月 2023 17:54:24 +0800
Subject: [PATCH] 生产管理看板+删不需要的文件

---
 src/pages/settings/components/BasicSetting.vue |  889 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 440 insertions(+), 449 deletions(-)

diff --git a/src/pages/settings/components/BasicSetting.vue b/src/pages/settings/components/BasicSetting.vue
index ff22658..985f4bc 100644
--- a/src/pages/settings/components/BasicSetting.vue
+++ b/src/pages/settings/components/BasicSetting.vue
@@ -5,16 +5,16 @@
       v-model="activeName"
       v-loading="loading"
       :element-loading-text="loadingText"
-      type="card"
+      type="border-card"
     >
       <!-- 鏈満淇℃伅 -->
-      <el-tab-pane label="鏈満淇℃伅" name="first">
+      <el-tab-pane label="鏈満淇℃伅" name="sysInfo" v-if="isShow('settings:sysInfo')">
         <el-menu
           :default-openeds="openeds"
           background-color="#fff"
           text-color="#303133"
           active-text-color="#409EFF"
-          style="height: 100%;"
+          style="height: 100%"
           class="menu-css"
           @open="menuOpen"
           @close="menuClose"
@@ -28,8 +28,15 @@
               <el-form :model="sysinfo" :rules="rules" ref="sysinfo" label-width="100px">
                 <el-row>
                   <el-col :span="12">
-                    <el-form-item label="鍚嶇О" prop="server_name">
+                    <el-form-item label="鏈嶅姟鍣ㄥ悕绉�" prop="server_name">
                       <el-input v-model="sysinfo.server_name" placeholder="鏈嶅姟鍣ㄥ悕绉�" size="small"></el-input>
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+                <el-row>
+                  <el-col :span="12">
+                    <el-form-item label="鍩熷悕" prop="server_name">
+                      <el-input v-model="sysinfo.server_domain" placeholder="WEB鏈嶅姟鍩熷悕" size="small"></el-input>
                     </el-form-item>
                   </el-col>
                   <el-col :span="12">
@@ -71,44 +78,55 @@
             </el-menu-item-group>
           </el-submenu>
 
-          <!-- 璇︾粏淇℃伅 -->
           <el-submenu index="1">
             <template slot="title">
               <b class="tree-font">璇︾粏淇℃伅</b>
             </template>
-            <el-menu-item-group class="item-group">
+            <el-menu-item-group class="item-group desc-info">
               <el-row :gutter="gutter">
                 <el-col :span="12" class="flex-box">
-                  <div class="xiangqin-label">ID</div>
-                  <div class="xiangqing-info">{{sysinfo.server_id}}</div>
+                  <div class="xiangqin-label">璁惧ID</div>
+                  <div class="xiangqing-info">{{ sysinfo.server_id }}</div>
                 </el-col>
-                <el-col :span="12" class="flex-box">
+                <!-- <el-col :span="12" class="flex-box">
                   <div class="xiangqin-label">璁惧缂栧彿</div>
                   <div class="xiangqing-info">{{sysinfo.deviceNum}}</div>
-                </el-col>
+                </el-col>-->
                 <el-col :span="12" class="flex-box">
                   <div class="xiangqin-label">璁惧鍨嬪彿</div>
-                  <div class="xiangqing-info">{{sysinfo.deviceType}}</div>
+                  <div class="xiangqing-info">{{ sysinfo.deviceModel }}</div>
                 </el-col>
                 <el-col :span="12" class="flex-box">
-                  <div class="xiangqin-label">璁惧搴忓垪鍙�</div>
-                  <div class="xiangqing-info">{{sysinfo.deviceSerialNum}}</div>
-                </el-col>
-                <el-col :span="12" class="flex-box">
-                  <div class="xiangqin-label">涓绘帶鐗堟湰</div>
-                  <div class="xiangqing-info">{{sysinfo.masterVersion}}</div>
-                </el-col>
-                <el-col :span="12" class="flex-box">
-                  <div class="xiangqin-label">web鐗堟湰</div>
-                  <div class="xiangqing-info">{{sysinfo.webVersion}}</div>
+                  <div class="xiangqin-label">璁惧绫诲瀷</div>
+                  <div class="xiangqing-info">{{ sysinfo.deviceDesc }}</div>
                 </el-col>
                 <el-col :span="12" class="flex-box">
                   <div class="xiangqin-label">閫氶亾涓暟</div>
-                  <div class="xiangqing-info">{{sysinfo.channelCount}}</div>
+                  <div class="xiangqing-info">{{ sysinfo.channelCount }}</div>
                 </el-col>
                 <el-col :span="12" class="flex-box">
-                  <div class="xiangqin-label">纭洏涓暟</div>
-                  <div class="xiangqing-info">{{sysinfo.diskCount}}</div>
+                  <div class="xiangqin-label">涓绘帶鐗堟湰</div>
+                  <div class="xiangqing-info">{{ sysinfo.masterVersion }}</div>
+                </el-col>
+                <el-col :span="12" class="flex-box">
+                  <div class="xiangqin-label">web鐗堟湰</div>
+                  <div class="xiangqing-info">{{ sysinfo.webVersion }}</div>
+                </el-col>
+                <el-col :span="12" class="flex-box">
+                  <div class="xiangqin-label">纭洏淇℃伅</div>
+                  <div class="xiangqing-info">{{ sysinfo.disks }}</div>
+                </el-col>
+                <el-col :span="12" class="flex-box">
+                  <div class="xiangqin-label">CPU</div>
+                  <div class="xiangqing-info">{{ sysinfo.cpuInfo }}</div>
+                </el-col>
+                <el-col :span="12" class="flex-box">
+                  <div class="xiangqin-label">鍐呭瓨</div>
+                  <div class="xiangqing-info">{{ sysinfo.mem }}</div>
+                </el-col>
+                <el-col :span="12" class="flex-box">
+                  <div class="xiangqin-label">杩愯鏃堕棿</div>
+                  <div class="xiangqing-info">{{ sysinfo.uptime }}</div>
                 </el-col>
               </el-row>
             </el-menu-item-group>
@@ -119,38 +137,50 @@
               <b class="tree-font">浜嬩欢褰曞儚鏃堕暱</b>
             </template>
             <el-menu-item-group class="item-group">
-              <el-form
-                label-width="150px"
-                class="alarmSetting"
-                style="padding-left:5px;padding-right:5px;"
-              >
-                <el-form-item label="瑙嗛鎴彇鏈�鐭椂闀�" style="width:724px;">
+              <el-form label-width="150px" class="alarmSetting" style="padding-left: 5px; padding-right: 5px">
+                <el-form-item label="瑙嗛鎴彇鏈�鐭椂闀�" style="width: 724px">
                   <el-slider
                     id="cut_min_duration"
-                    v-model="alarmConf.min_video_len"
-                    :show-tooltip="false"
+                    @input="min_len = min_video_len"
+                    v-model="fakeObj.min"
+                    :min="5 / 1.2"
+                    :max="100"
+                    :step="5 / 1.2"
+                    show-stops
+                    :show-tooltip="true"
+                    :format-tooltip="formatTooltip"
                   ></el-slider>
                   <el-input-number
-                    v-model="alarmConf.min_video_len"
+                    v-model="min_len"
+                    @change="fakeObj.min = +(min_len / 1.2)"
                     controls-position="right"
-                    :min="0"
-                    :max="100"
+                    :min="5"
+                    :max="120"
                     size="small"
-                  ></el-input-number>&nbsp;s
+                  ></el-input-number
+                  >&nbsp;s
                 </el-form-item>
-                <el-form-item label="瑙嗛鎴彇鏈�闀挎椂闀�" style="width:724px">
+                <el-form-item label="瑙嗛鎴彇鏈�闀挎椂闀�" style="width: 724px">
                   <el-slider
                     id="cut_max_duration"
-                    v-model="alarmConf.max_video_len"
-                    :show-tooltip="false"
+                    v-model="fakeObj.max"
+                    :min="5 / 1.2"
+                    @input="max_len = max_video_len"
+                    :max="100"
+                    :step="5 / 1.2"
+                    show-stops
+                    :format-tooltip="formatTooltip"
+                    :show-tooltip="true"
                   ></el-slider>
                   <el-input-number
-                    v-model="alarmConf.max_video_len"
+                    v-model="max_len"
+                    @change="fakeObj.max = +(max_len / 1.2)"
                     controls-position="right"
-                    :min="0"
-                    :max="100"
+                    :min="5"
+                    :max="120"
                     size="small"
-                  ></el-input-number>&nbsp;s
+                  ></el-input-number
+                  >&nbsp;s
                 </el-form-item>
                 <div class="mt15 mb10 save-btn">
                   <el-button type="primary" @click="submitAlarm" size="small">淇濆瓨</el-button>
@@ -159,144 +189,27 @@
             </el-menu-item-group>
           </el-submenu>
           <!-- 瀵瑰鏈嶅姟IP 鏀瑰悕涓哄閮ㄧ綉缁�(鏂皌ab)-->
-
-          <!-- 鏂囦欢闊宠棰� -->
-          <!-- <el-submenu index="4">
-            <template slot="title">
-              <b class="tree-font">鏂囦欢闊宠棰�</b>
-            </template>
-            <el-menu-item-group class="item-group">
-              <el-row :gutter="20">
-                <el-col :span="8">
-                  <div class="p5">
-                    <span class="iconfont iconpicture" style="margin-right: 5px;"></span>
-                    <span class="mr10">鍥剧墖绔彛</span>
-                    <el-input v-model="localFile.picPort" style="width:300px;" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
-                  </div>
-                  <div class="p5">
-                    <span class="iconfont iconshipin" style="margin-right: 5px;"></span>
-                    <span class="mr10">瑙嗛绔彛</span>
-                    <el-input v-model="localFile.videoPort" style="width:300px;" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
-                  </div>
-                  <div class="p5">
-                    <span class="iconfont iconyinpinx" style="margin-right: 5px;"></span>
-                    <span class="mr10">闊抽绔彛</span>
-                    <el-input v-model="localFile.audioPort" style="width:300px;" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
-                  </div>
-                </el-col>
-                <el-col :span="16">
-                  <el-table
-                    :data="localFile.fileTable"
-                    border
-                    style="width: 100%">
-                    <el-table-column
-                      type="index"
-                      label="搴忓彿"
-                      align="center"
-                      width="50">
-                    </el-table-column>
-                    <el-table-column
-                      prop="date"
-                      label="鍚嶇О"
-                      align="center"
-                      width="180">
-                    </el-table-column>
-                    <el-table-column
-                      prop="name"
-                      label="ID"
-                      align="center"
-                      width="180">
-                    </el-table-column>
-                    <el-table-column
-                      prop="name"
-                      label="IP"
-                      align="center"
-                      width="180">
-                    </el-table-column>
-                    <el-table-column
-                      prop="name"
-                      label="鍦ㄧ嚎鐘舵��"
-                      align="center"
-                      width="80">
-                    </el-table-column>
-                    <el-table-column
-                      label="绫诲埆"
-                      align="center"
-                      width="100">
-                      <template>
-                        <span class="iconfont iconpicture" style="margin-right: 5px;"></span>
-                        <span class="iconfont iconshipin" style="margin-right: 5px;"></span>
-                        <span class="iconfont iconyinpinx" style="margin-right: 5px;"></span>
-                      </template>
-                    </el-table-column>
-                    <el-table-column
-                      prop="address"
-                      align="center"
-                      label="澶囨敞">
-                      <template slot-scope="{row}">
-                        <div v-if="row.edit">
-                          <el-input :autofocus="row.edit" v-focus v-model="row.address" size="small" />
-                          <el-button size="mini" type="info" @click="handleCancel(row)">鍙栨秷</el-button>
-                          <el-button size="mini" type="primary" @click="handleSave(row)">淇濆瓨</el-button>
-                        </div>
-                        <div v-else>
-                          <span>{{ row.address }}</span>
-                          <el-button
-                            type="text"
-                            style="color: black;font-size:16px"
-                            @click="handleEdit(row)"
-                            icon="iconfont iconbianji"
-                          ></el-button>
-                        </div>
-                      </template>
-                    </el-table-column>
-                  </el-table>
-                </el-col>
-              </el-row>
-            </el-menu-item-group>
-          </el-submenu>-->
         </el-menu>
       </el-tab-pane>
 
       <!-- 鏃堕棿閰嶇疆 -->
-      <el-tab-pane label="鏃堕棿閰嶇疆" name="second">
+      <el-tab-pane label="鏃堕棿閰嶇疆" name="timeSet" v-if="isShow('settings:timeSet')">
         <el-form label-width="100px">
           <el-form-item label="璁惧鏃堕棿">
-            <!-- <el-input v-model="equipmentTime" placeholder="璇疯緭鍏�" size="small"></el-input> -->
             {{ equipmentTime }}
           </el-form-item>
-
-          <el-form-item label="鏃跺尯" prop="timezone">
-            <el-select
-              v-model="timezone"
-              placeholder="璇烽�夋嫨"
-              style="width: 360px; height: 32px"
-              size="small"
-            >
-              <el-option
-                v-for="item in timeZoneOption"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-          <div style="text-align: left;padding: 10px 0px">
+          <div style="text-align: left; padding: 10px 0px">
             <div class="time-type">NTP鏍℃椂</div>
-            <div style="padding: 10px 0px;">
+            <div style="padding: 10px 0px">
               <el-radio v-model="syncType" label="1">NTP鏍℃椂</el-radio>
             </div>
           </div>
 
           <el-form-item label="鏈嶅姟鍣ㄥ湴鍧�">
-            <ip-input
-              :ip="ntpServer"
-              @on-blur="ntpServer= arguments[0]"
-              :disabled="syncType === '2'"
-            ></ip-input>
+            <ip-input :ip="ntpServer" @on-blur="ntpServer = arguments[0]" :disabled="syncType === '2'"></ip-input>
           </el-form-item>
 
-          <el-form-item label="鏍℃椂鏃堕棿闂撮殧" style="width: 41.3%;">
+          <el-form-item label="鏍℃椂鏃堕棿闂撮殧" style="width: 41.3%">
             <el-input-number
               v-model.number="timeInterval"
               :min="1"
@@ -305,18 +218,21 @@
               size="small"
               :controls="false"
               :disabled="syncType === '2'"
-            ></el-input-number>&nbsp;&nbsp;&nbsp;鍒嗛挓
+            ></el-input-number
+            >&nbsp;&nbsp;&nbsp;鍒嗛挓
             <el-button
               type="text"
-              style="position: absolute; left: 330px;"
+              style="position: absolute; left: 330px"
               :disabled="syncType === '2'"
               @click="testNTP"
-            >娴嬭瘯</el-button>
+              :loading="ntpTestLoading"
+              >娴嬭瘯</el-button
+            >
           </el-form-item>
 
-          <div style="text-align: left;padding: 10px 0px">
+          <div style="text-align: left; padding: 10px 0px">
             <div class="time-type">鎵嬪姩鏍℃椂</div>
-            <div style="padding: 10px 0px;">
+            <div style="padding: 10px 0px">
               <el-radio v-model="syncType" label="2">鎵嬪姩鏍℃椂</el-radio>
             </div>
           </div>
@@ -328,18 +244,18 @@
               placeholder="閫夋嫨鏃ユ湡鏃堕棿"
               size="small"
               value-format="yyyy-MM-dd HH:mm:ss"
-              :readonly="settimeRadio"
               :disabled="syncType === '1'"
             ></el-date-picker>
             <el-checkbox
               v-model="settimeRadio"
-              style="margin-left: 12px;"
+              style="margin-left: 12px"
               @change="syncBrowser"
               :disabled="syncType === '1'"
-            >鍚屾鏈绠楁満鏃堕棿</el-checkbox>
+              >鍚屾鏈绠楁満鏃堕棿</el-checkbox
+            >
           </el-form-item>
 
-          <el-col :span="12" style="padding-right: 40px;">
+          <el-col :span="12" style="padding-right: 40px">
             <el-form-item>
               <el-button type="primary" @click="submitClock" size="small">淇濆瓨</el-button>
             </el-form-item>
@@ -348,43 +264,54 @@
       </el-tab-pane>
 
       <!-- 闆嗙兢绠$悊 -->
-      <el-tab-pane label="闆嗙兢绠$悊" name="third">
+      <el-tab-pane label="闆嗙兢绠$悊" name="cluster" v-if="isShow('settings:cluster')">
         <cluster-management></cluster-management>
       </el-tab-pane>
-      <el-tab-pane label="澶栭儴缃戠粶" name="fourth">
-        <div class="flex-box">
-          <label>璁剧疆澶栭儴IP</label>
-          <div style="width:300px;">
-            <ip-input :ip="ipServer.ip" @on-blur="ipServer.ip = arguments[0]"></ip-input>
-          </div>
-          <el-checkbox label="閫夌敤鏈満IP" size="small" style="margin-left: 20px"></el-checkbox>
-        </div>
-        <div class="flex-box">
-          <label>鍩熷悕</label>
-          <el-input size="small" v-model="ipServer.localhost"></el-input>
-        </div>
-        <div class="flex-box">
-          <label>鏈湴鏂囦欢绔彛</label>
-          <el-input size="small" v-model="ipServer.localFilePort"></el-input>
-        </div>
-        <div class="mt15 save-btn" style="width:460px; margin-bottom:20px; float:left;">
-          <el-button type="primary" @click="submitResource" size="small">淇濆瓨</el-button>
-        </div>
-        <div>
-          <el-table :data="ipServer.fileTable" border fit style="width: 100%">
-            <el-table-column type="index" label="搴忓彿" align="center" width="50"></el-table-column>
-            <el-table-column prop="date" label="鍚嶇О" align="center"></el-table-column>
-            <el-table-column prop="name" label="ID" align="center"></el-table-column>
-            <el-table-column prop="name" label="IP" align="center"></el-table-column>
-            <el-table-column prop="name" label="鍦ㄧ嚎鐘舵��" align="center"></el-table-column>
-          </el-table>
-        </div>
+      <!-- <el-tab-pane label="澶栭儴璁块棶" name="fourth">
+        <el-menu
+          :default-openeds="openeds"
+          background-color="#fff"
+          text-color="#303133"
+          active-text-color="#409EFF"
+          style="height: 100%;"
+          class="menu-css"
+          @open="menuOpen"
+          @close="menuClose"
+        >
+          <el-submenu index="0">
+            <template slot="title">
+              <b class="tree-font">澶栭儴璁块棶璁剧疆</b>
+            </template>
+            <el-menu-item-group class="item-group">
+              <el-form :model="sysinfo" :rules="rules" ref="sysinfo" label-width="100px">
+                <div class="flex-box">
+                  <label>璁剧疆澶栭儴IP</label>
+                  <div style="width:300px;">
+                    <ip-input :ip="ipServer.ip" @on-blur="ipServer.ip = arguments[0]"></ip-input>
+                  </div>
+                  <el-checkbox label="閫夌敤鏈満IP" size="small" style="margin-left: 20px"></el-checkbox>
+                </div>
+                <div class="flex-box">
+                  <label>鍩熷悕</label>
+                  <el-input size="small" v-model="ipServer.localhost"></el-input>
+                </div>
+                <div class="flex-box">
+                  <label>鏈湴鏂囦欢绔彛</label>
+                  <el-input size="small" v-model="ipServer.localFilePort"></el-input>
+                </div>
+                <div class="mt15 mb10 save-btn">
+                  <el-button type="primary" @click="submitSysinfo" size="small">淇濆瓨</el-button>
+                </div>
+              </el-form>
+            </el-menu-item-group>
+          </el-submenu>
+        </el-menu>
+      </el-tab-pane>-->
+      <el-tab-pane label="鏉冮檺绠$悊" name="permission" v-if="isShow('settings:permission')">
+        <authority-management v-if="activeName === 'permission'"></authority-management>
       </el-tab-pane>
-      <el-tab-pane label="鏉冮檺绠$悊" name="user">
-        <authority-management v-if="activeName === 'user'"></authority-management>
-      </el-tab-pane>
-      <el-tab-pane label="骞挎挱璁剧疆" name="radio">
-        <radio-set v-if="activeName === 'radio'"></radio-set>
+      <el-tab-pane label="骞挎挱璁剧疆" name="broadcast" v-if="isShow('settings:broadcast')">
+        <radio-set v-if="activeName === 'broadcast'"></radio-set>
       </el-tab-pane>
     </el-tabs>
   </div>
@@ -400,16 +327,17 @@
   saveClockInfo,
   testNTPserver,
   getResourceConfig,
-  saveResourceConfig,
-} from "@/api/system";
+  saveResourceConfig
+} from "@/api/system"
 
-import { isPort, isIPv4 } from "@/scripts/validate";
-import ipInput from "@/components/subComponents/IPInput";
+import { isPort, isIPv4 } from "@/scripts/validate"
+import ipInput from "@/components/subComponents/IPInput"
 import TimeZones from "@/Pool/TimeZones"
 
-import ClusterManagement from "./ClusterManagement";
-import AuthorityManagement from "./AuthorityManagement";
-import RadioSet from "./RadioSet";
+import ClusterManagement from "./ClusterManagement"
+import AuthorityManagement from "./AuthorityManagement"
+import RadioSet from "./RadioSet"
+import config from "../../../../package.json"
 
 export default {
   name: "BasicSettings",
@@ -420,20 +348,26 @@
     RadioSet
   },
   computed: {
-    timeZoneOption() {
-      let options = []
-      TimeZones.forEach(zone => {
-        options = options.concat(zone.utc.map(v => {
-          return { value: v, label: v }
-        }))
-      })
-      return options
+    min_video_len() {
+      // return +(this.fakeObj.min * 1.2).toFixed(0);
+      return Math.round(this.fakeObj.min * 1.2)
+    },
+    max_video_len() {
+      return Math.round(this.fakeObj.max * 1.2)
+      // return +(this.fakeObj.max * 1.2).toFixed(0);
+    },
+    isAdmin() {
+      if (sessionStorage.getItem("userInfo") && sessionStorage.getItem("userInfo") !== "") {
+        let loginName = JSON.parse(sessionStorage.getItem("userInfo")).username
+        return loginName === "superadmin" || loginName === "basic"
+      }
+      return false
     }
   },
   directives: {
     focus: {
-      inserted: function (el) {
-        el.querySelector('input').focus()
+      inserted: function(el) {
+        el.querySelector("input").focus()
       }
     }
   },
@@ -442,7 +376,7 @@
       loading: true,
       loadingText: "",
       gutter: 10,
-      activeName: "first",
+      activeName: "sysInfo",
       timezone: "",
       syncType: "1",
       ntpServer: "",
@@ -456,6 +390,12 @@
       timestamp: 0,
       sysinfo: {},
       alarmConf: {},
+      min_len: 0,
+      max_len: 0,
+      fakeObj: {
+        min: 0,
+        max: 0
+      },
       originNetConfig: {
         ip: "",
         gw: "",
@@ -511,9 +451,7 @@
           },
           { validator: isIPv4, trigger: "change" }
         ],
-        server_name: [
-          { required: true, message: "璇疯緭鍏ュ悕绉�", trigger: "change" }
-        ],
+        server_name: [{ required: true, message: "璇疯緭鍏ュ悕绉�", trigger: "change" }],
         subMask: [
           {
             required: true,
@@ -528,101 +466,123 @@
         diyOrLocalIP: "1",
         ip: "",
         localhost: "",
-        localFilePort: "",
-        fileTable: [
-          {
-            date: '2016-05-02',
-            name: '鐜嬪皬铏�',
-            address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1518 寮�',
-            edit: false
-          }, {
-            date: '2016-05-04',
-            name: '鐜嬪皬铏�',
-            address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1517 寮�',
-            edit: false
-          }, {
-            date: '2016-05-01',
-            name: '鐜嬪皬铏�',
-            address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1519 寮�',
-            edit: false
-          }, {
-            date: '2016-05-03',
-            name: '鐜嬪皬铏�',
-            address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1516 寮�',
-            edit: false
-          }
-        ]
+        localFilePort: ""
       },
       locationCity: {
-        province: '',
-        city: '',
-        county: '',
+        province: "",
+        city: "",
+        county: "",
         provinceOptions: [],
         cityOptions: [],
         countyOptions: []
       },
-    };
-    webPort: 0;
+      webPort: 0,
+      ntpTestLoading: false,
+      buttonAuthority: sessionStorage.getItem("buttonAuthoritys") || []
+    }
+  },
+  created() {
+    if (this.isShow("settings:sysInfo")) {
+      this.activeName = "sysInfo"
+    } else if (this.isShow("settings:timeSet")) {
+      this.activeName = "timeSet"
+    } else if (this.isShow("settings:cluster")) {
+      this.activeName = "cluster"
+    } else if (this.isShow("settings:permission")) {
+      this.activeName = "permission"
+    } else if (this.isShow("settings:broadcast")) {
+      this.activeName = "broadcast"
+    }
   },
   mounted() {
     this.$nextTick(() => {
-      this.initSysinfo();
+      this.initSysinfo()
       // this.initAlarmConf();
-      this.initResourceConfig();
-      this.initClockConf();
-    });
+      this.initResourceConfig()
+      this.initClockConf()
+      //this.markStartTime();
+    })
   },
   beforeDestroy() {
-    clearTimeout(this.clockTimer);
-    clearInterval(this.browserTimer);
+    clearTimeout(this.clockTimer)
+    clearInterval(this.browserTimer)
   },
   methods: {
+    formatTooltip(v) {
+      return Math.round(v * 1.2)
+    },
+    isShow(authority) {
+      return this.isAdmin || this.buttonAuthority.indexOf("," + authority + ",") > -1
+    },
     initSysinfo() {
-      this.loadingText = "姝e湪鑾峰彇璁惧淇℃伅...";
-      getDevInfo().then(rsp => {
-        if (rsp && rsp.success) {
-          this.sysinfo = rsp.data;
-          this.sysinfo.gateway = this.sysinfo.gateway.trim();
-          this.originNetConfig.ip = this.sysinfo.ip;
-          this.originNetConfig.mask = this.sysinfo.subMask;
-          this.originNetConfig.gw = this.sysinfo.gateway.trim();
-          this.originNetConfig.dns = this.sysinfo.dns ? this.sysinfo.dns : "";
-          this.alarmConf.min_video_len = rsp.data.min_video_len;
-          this.alarmConf.max_video_len = rsp.data.max_video_len;
+      this.loadingText = "姝e湪鑾峰彇璁惧淇℃伅..."
+      getDevInfo()
+        .then((rsp) => {
+          if (rsp && rsp.success) {
+            this.sysinfo = rsp.data
+            this.sysinfo.gateway = this.sysinfo.gateway.trim()
+            this.originNetConfig.ip = this.sysinfo.ip
+            this.originNetConfig.mask = this.sysinfo.subMask
+            this.originNetConfig.gw = this.sysinfo.gateway.trim()
+            this.originNetConfig.dns = this.sysinfo.dns ? this.sysinfo.dns : ""
+            // this.alarmConf.min_video_len = rsp.data.min_video_len;
+            // this.alarmConf.max_video_len = rsp.data.max_video_len;
+            this.fakeObj.min = rsp.data.min_video_len / 1.2
+            this.fakeObj.max = rsp.data.max_video_len / 1.2
+            if (this.sysinfo.deviceInfo) {
+              let devInfo = this.sysinfo.deviceInfo
 
-          if (!this.sysinfo.server_port) {
-            this.sysinfo.server_port = 7003;
+              this.sysinfo.cpuInfo = devInfo.cpu[0].modelName
+              this.sysinfo.disks = "( " + devInfo.disk + ") "
+              this.sysinfo.mem = (devInfo.mem.total / 1024 / 1024 / 1024).toFixed(2) + "GB"
+              // this.sysinfo.arch = devInfo.host.kernelArch;
+              this.sysinfo.uptime = this.secondsFormat(devInfo.host.uptime)
+            }
+
+            if (!this.sysinfo.server_port) {
+              this.sysinfo.server_port = 7003
+            }
+
+            this.webPort = this.sysinfo.server_port
+
+            this.sysinfo.webVersion = "V" + config.version
           }
 
-          this.webPort = this.sysinfo.server_port;
-        }
-
-        this.loading = false;
-      }).catch(err => {
-        this.loading = false;
-      });
+          this.loading = false
+        })
+        .catch((err) => {
+          this.loading = false
+        })
     },
-    initClockConf() {
-      getClockInfo().then(rsp => {
+    secondsFormat(s) {
+      var day = Math.floor(s / (24 * 3600)) // Math.floor()鍚戜笅鍙栨暣
+      var hour = Math.floor((s - day * 24 * 3600) / 3600)
+      var minute = Math.floor((s - day * 24 * 3600 - hour * 3600) / 60)
+      var second = s - day * 24 * 3600 - hour * 3600 - minute * 60
+      return day + "澶�" + hour + "鏃�" + minute + "鍒�" + second + "绉�"
+    },
+    initClockConf(ntpTest = false) {
+      getClockInfo().then((rsp) => {
         if (rsp && rsp.success) {
-          this.timezone = rsp.data.time_zone;
-          this.syncType = rsp.data.ntp ? "1" : "2";
+          this.timezone = rsp.data.time_zone
+          if (!ntpTest) {
+            this.syncType = rsp.data.ntp ? "1" : "2"
+          }
           if (rsp.data.ntp) {
-            this.ntpServer = rsp.data.ntp_server;
-            this.timeInterval = rsp.data.interval;
+            this.ntpServer = rsp.data.ntp_server
+            this.timeInterval = rsp.data.interval
           }
           this.timestamp = rsp.data.local_time
           if (this.clockTimer === null) {
-            this.runClock();
+            this.runClock()
           }
         }
       })
     },
     runClock() {
-      this.equipmentTime = this.formatTime(++this.timestamp, 'Y-M-D h:m:s');
-      // console.log(this.equipmentTime)
+      this.equipmentTime = this.formatTime(++this.timestamp, "Y-M-D h:m:s")
       this.clockTimer = setTimeout(() => {
-        this.runClock();
+        this.runClock()
       }, 1000)
     },
     initAlarmConf() {
@@ -633,7 +593,7 @@
       // });
     },
     initResourceConfig() {
-      getResourceConfig().then(rsp => {
+      getResourceConfig().then((rsp) => {
         if (rsp && rsp.success) {
           this.ipServer.diyOrLocalIP = rsp.data.ipType
           this.ipServer.ip = rsp.data.serviceIp
@@ -647,237 +607,258 @@
         clearInterval(this.browserTimer)
       } else {
         this.browserTimer = setInterval(() => {
-          let timestamp = new Date().getTime() / 1000;
-          this.settime = this.formatTime(timestamp, 'Y-M-D h:m:s')
+          let timestamp = new Date().getTime() / 1000
+          this.settime = this.formatTime(timestamp, "Y-M-D h:m:s")
         }, 1000)
       }
     },
+    markStartTime() {
+      let timestamp = new Date().getTime() / 1000
+      this.settime = this.formatTime(timestamp, "Y-M-D h:m:s")
+    },
     submitSysinfo() {
-      this.$refs["sysinfo"].validate(valid => {
+      this.$refs["sysinfo"].validate((valid) => {
         if (valid) {
-          if (this.sysinfo.ip !== this.originNetConfig.ip
-            || this.sysinfo.subMask !== this.originNetConfig.mask
-            || this.sysinfo.dns !== this.originNetConfig.dns
-            || this.sysinfo.gateway !== this.originNetConfig.gw) {
-
+          if (
+            this.sysinfo.ip !== this.originNetConfig.ip ||
+            this.sysinfo.subMask !== this.originNetConfig.mask ||
+            this.sysinfo.dns !== this.originNetConfig.dns ||
+            this.sysinfo.gateway !== this.originNetConfig.gw ||
+            this.sysinfo.server_port !== this.originNetConfig.server_port ||
+            this.sysinfo.server_domain !== this.originNetConfig.server_domain
+          ) {
             if (this.sysinfo.ip !== this.originNetConfig.ip) {
-              let newUri = location.protocol + "//" + this.sysinfo.ip + ":" + this.sysinfo.server_port;
+              let newUri = location.protocol + "//" + this.sysinfo.ip + ":" + this.sysinfo.server_port
               var changeIPTimer = setTimeout(() => {
-                this.$alert('<strong>鎮ㄥ凡淇敼浜嗘湇鍔″櫒ip, 璇烽噸鏂扮櫥褰�</strong><a href="' + newUri + '"> ' + newUri + '<a/>', '鎻愮ず', {
-                  dangerouslyUseHTMLString: true
-                });
+                this.$alert(
+                  '<strong>鎮ㄥ凡淇敼浜嗘湇鍔″櫒閰嶇疆, 璇烽噸鏂扮櫥褰�</strong><a target="_parent" href="' +
+                    newUri +
+                    '"> ' +
+                    newUri +
+                    "<a/>",
+                  "鎻愮ず",
+                  {
+                    dangerouslyUseHTMLString: true
+                  }
+                )
               }, 10000)
             }
 
-            this.$confirm("纭闇�瑕佷慨鏀规湇鍔″櫒缃戠粶閰嶇疆鍚楋紵", {
+            this.$confirm("纭闇�瑕佷慨鏀规湇鍔″櫒閰嶇疆鍚楋紵", {
               center: true,
               cancelButtonClass: "comfirm-class-cancle",
               confirmButtonClass: "comfirm-class-sure"
-            }).then(() => {
-              this.loading = true;
-              this.loadingText = "姝e湪澶勭悊..."
-              saveDevInfo(this.sysinfo).then(rsp => {
-                if (rsp && rsp.success) {
-                  this.$notify({
-                    type: "success",
-                    message: "鏈満淇℃伅淇濆瓨鎴愬姛"
-                  });
-                }
-                this.initSysinfo();
-                this.loading = false;
-              }).catch(err => {
-                this.loading = false;
-                clearTimeout(changeIPTimer)
-                this.$notify({
-                  type: "error",
-                  message: "淇濆瓨澶辫触"
-                });
-              });
-            }).catch(err => {
-            });
+            })
+              .then(() => {
+                this.loading = true
+                this.loadingText = "姝e湪澶勭悊..."
+                saveDevInfo(this.sysinfo)
+                  .then((rsp) => {
+                    if (rsp && rsp.success) {
+                      this.$notify({
+                        type: "success",
+                        message: "鏈嶅姟鍣ㄩ厤缃垚鍔�"
+                      })
+                    }
+                    this.initSysinfo()
+                    this.loading = false
+                  })
+                  .catch((err) => {
+                    this.loading = false
+                    clearTimeout(changeIPTimer)
+                    this.$notify({
+                      type: "error",
+                      message: "淇濆瓨澶辫触"
+                    })
+                  })
+              })
+              .catch((err) => {})
           } else {
-            saveDevInfo(this.sysinfo).then(rsp => {
+            saveDevInfo(this.sysinfo).then((rsp) => {
               if (rsp && rsp.success) {
                 this.$notify({
                   type: "success",
-                  message: "鏈満淇℃伅淇濆瓨鎴愬姛"
-                });
-                this.initSysinfo();
+                  message: "鏈満淇℃伅淇敼鎴愬姛"
+                })
+                this.initSysinfo()
+              } else {
+                this.$notify({
+                  type: "error",
+                  message: "淇濆瓨澶辫触"
+                })
               }
-            });
-
-            if (this.sysinfo.server_port !== this.webPort) {
-              let newUri = location.protocol + "//" + this.sysinfo.ip + ":" + this.sysinfo.server_port;
-              var changeIPTimer = setTimeout(() => {
-                this.$alert('<strong>鎮ㄥ凡淇敼浜嗘湇鍔″櫒绔彛, 璇烽噸鏂扮櫥褰�</strong><a href="' + newUri + '"> ' + newUri + '<a/>', '鎻愮ず', {
-                  dangerouslyUseHTMLString: true
-                });
-              }, 5000)
-            }
+            })
           }
         } else {
-          console.log("error submit!!");
-          return false;
+          console.log("error submit!!")
+          return false
         }
-      });
+      })
     },
+    checkTimeZone(val) {},
     submitClock() {
-      if (this.syncType === '1') {
+      if (this.syncType === "1") {
         if (this.ntpServer === "") {
           this.$notify({
             type: "error",
             message: "NTP 鏈嶅姟鍣ㄥ湴鍧�涓嶈兘涓虹┖"
-          });
+          })
           return false
         } else if (this.timeInterval === "") {
-          this.timeInterval = 1;
+          this.timeInterval = 1
         }
       } else {
         if (this.settime === "") {
           this.$notify({
             type: "error",
             message: "璁剧疆鏃堕棿涓嶈兘涓虹┖"
-          });
+          })
           return false
         }
       }
       let requestBody = {
         timeZone: this.timezone,
-        ntp: this.syncType === '1',
+        ntp: this.syncType === "1",
         ntpServer: this.ntpServer,
         interval: this.timeInterval,
         newTime: this.settime
       }
-      saveClockInfo(requestBody).then(rsp => {
+      saveClockInfo(requestBody).then((rsp) => {
         if (rsp && rsp.success) {
           this.$notify({
             type: "success",
             message: "璁剧疆鎴愬姛"
-          });
+          })
         }
+        this.initClockConf()
       })
     },
     testNTP() {
-      testNTPserver({ server: this.ntpServer }).then(rsp => {
-        if (rsp && rsp.success) {
-          this.$notify({
-            type: "success",
-            message: "鏃堕棿鍚屾鎴愬姛"
-          });
-        } else {
+      this.ntpTestLoading = true
+      testNTPserver({ server: this.ntpServer })
+        .then((rsp) => {
+          if (rsp && rsp.success) {
+            this.$notify({
+              type: "success",
+              message: "鏃堕棿鍚屾鎴愬姛"
+            })
+          } else {
+            this.$notify({
+              type: "error",
+              message: "鏃堕棿鍚屾澶辫触"
+            })
+          }
+          this.ntpTestLoading = false
+          this.initClockConf(true)
+        })
+        .catch((err) => {
           this.$notify({
             type: "error",
-            message: "鏃堕棿鍚屾澶辫触"
-          });
-        }
-      }).catch(err => {
-        this.$notify({
-          type: "error",
-          message: "鏃堕棿鍚屾澶辫触,璇锋鏌ユ湇鍔″櫒ip"
-        });
-      })
+            message: "鏃堕棿鍚屾澶辫触,璇锋鏌ユ湇鍔″櫒ip"
+          })
+          this.ntpTestLoading = false
+        })
     },
     submitAlarm() {
-      saveAlarmConfig(this.alarmConf).then(rsp => {
+      saveAlarmConfig({
+        min_video_len: this.min_video_len,
+        max_video_len: this.max_video_len
+      }).then((rsp) => {
         if (rsp && rsp.success) {
           this.$notify({
             type: "success",
             message: "淇濆瓨鎴愬姛"
-          });
-        }
-      });
-    },
-    submitResource() {
-      let regNum = /^[0-9]*$/;
-      if (!this.vaildHost(this.ipServer.localhost)) {
-        this.$notify({
-          type: "warning",
-          message: "璇疯緭鍏ユ纭牸寮忓緱鍩熷悕锛�"
-        })
-        return false;
-      }
-      if (!regNum.test(this.ipServer.localFilePort)) {
-        this.$notify({
-          type: 'warning',
-          message: "璇疯緭鍏ユ纭殑绔彛鍙凤紒"
-        })
-        return false;
-      }
-      saveResourceConfig({
-        domain: this.ipServer.localhost,
-        ipType: this.ipServer.diyOrLocalIP,
-        serviceIp: this.ipServer.ip,
-        filePort: Number(this.ipServer.localFilePort)
-      }).then(res => {
-        if (res && res.success) {
-          this.$notify({
-            type: "success",
-            message: "淇濆瓨鎴愬姛"
-          });
-        } else {
-          this.$notify({
-            type: "error",
-            message: "淇濆瓨澶辫触"
-          });
+          })
         }
       })
     },
-    onIpBlur(e, ip) {
-      console.log(e, ip);
-    },
+    // submitResource() {
+    //   let regNum = /^[0-9]*$/;
+    //   if (!this.vaildHost(this.ipServer.localhost)) {
+    //     this.$notify({
+    //       type: "warning",
+    //       message: "璇疯緭鍏ユ纭牸寮忓緱鍩熷悕锛�",
+    //     });
+    //     return false;
+    //   }
+    //   if (!regNum.test(this.ipServer.localFilePort)) {
+    //     this.$notify({
+    //       type: "warning",
+    //       message: "璇疯緭鍏ユ纭殑绔彛鍙凤紒",
+    //     });
+    //     return false;
+    //   }
+    //   saveResourceConfig({
+    //     domain: this.ipServer.localhost,
+    //     ipType: this.ipServer.diyOrLocalIP,
+    //     serviceIp: this.ipServer.ip,
+    //     filePort: Number(this.ipServer.localFilePort),
+    //   }).then((res) => {
+    //     if (res && res.success) {
+    //       this.$notify({
+    //         type: "success",
+    //         message: "淇濆瓨鎴愬姛",
+    //       });
+    //     } else {
+    //       this.$notify({
+    //         type: "error",
+    //         message: "淇濆瓨澶辫触",
+    //       });
+    //     }
+    //   });
+    // },
+    // onIpBlur(e, ip) {
+    //   console.log(e, ip);
+    // },
     formatTime(number, format) {
-      var formateArr = ['Y', 'M', 'D', 'h', 'm', 's'];
-      var returnArr = [];
+      var formateArr = ["Y", "M", "D", "h", "m", "s"]
+      var returnArr = []
 
-      var date = new Date(number * 1000);
-      returnArr.push(date.getFullYear());
-      returnArr.push(this.formatNumber(date.getMonth() + 1));
-      returnArr.push(this.formatNumber(date.getDate()));
+      var date = new Date(number * 1000)
+      returnArr.push(date.getFullYear())
+      returnArr.push(this.formatNumber(date.getMonth() + 1))
+      returnArr.push(this.formatNumber(date.getDate()))
 
-      returnArr.push(this.formatNumber(date.getHours()));
-      returnArr.push(this.formatNumber(date.getMinutes()));
-      returnArr.push(this.formatNumber(date.getSeconds()));
+      returnArr.push(this.formatNumber(date.getHours()))
+      returnArr.push(this.formatNumber(date.getMinutes()))
+      returnArr.push(this.formatNumber(date.getSeconds()))
 
       for (var i in returnArr) {
-        format = format.replace(formateArr[i], returnArr[i]);
+        format = format.replace(formateArr[i], returnArr[i])
       }
-      return format;
+      return format
     },
 
-    //鏁版嵁杞寲  
+    //鏁版嵁杞寲
     formatNumber(n) {
       n = n.toString()
-      return n[1] ? n : '0' + n
+      return n[1] ? n : "0" + n
     },
-    menuOpen(event) {
-
-    },
-    menuClose(event) {
-
-    },
-    handleEdit(row) {
-      console.log(row);
-      row.edit = true;
-    },
-    handleCancel(row) {
-      row.edit = false;
-      console.log(row);
-    },
-    handleSave(row) {
-      console.log(row);
-      row.edit = false;
-      this.$notify({
-        message: "淇濆瓨鎴愬姛",
-        type: "success"
-      });
-    },
+    menuOpen(event) {},
+    menuClose(event) {},
+    // handleEdit(row) {
+    //   console.log(row);
+    //   row.edit = true;
+    // },
+    // handleCancel(row) {
+    //   row.edit = false;
+    //   console.log(row);
+    // },
+    // handleSave(row) {
+    //   console.log(row);
+    //   row.edit = false;
+    //   this.$notify({
+    //     message: "淇濆瓨鎴愬姛",
+    //     type: "success",
+    //   });
+    // },
     //鏍¢獙鍩熷悕
     vaildHost(str) {
       let re = /^(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+\.\w+)*$/
       return re.test(str)
-    },
+    }
   }
-};
+}
 </script>
 <style lang="scss">
 .s-basic-setting {
@@ -889,8 +870,8 @@
     // margin-left: -80px;
     .el-form-item {
       text-align: left;
-      &.is-required:not(.is-no-asterisk)>.el-form-item__label:before{
-        margin-left:-8px;
+      &.is-required:not(.is-no-asterisk) > .el-form-item__label:before {
+        margin-left: -8px;
       }
       .el-button {
         float: right;
@@ -1039,6 +1020,16 @@
     width: 300px;
   }
 }
+.desc-info {
+  margin-bottom: 14px;
+  .flex-box {
+    height: 40px;
+    line-height: 40px;
+    .xiangqin-label {
+      width: 80px;
+    }
+  }
+}
 .menu-css,
 .el-menu {
   border-right: none;

--
Gitblit v1.8.0