|  |  | 
 |  |  | <template> | 
 |  |  | <div id="app"> | 
 |  |  |     <el-container> | 
 |  |  |         <el-header> | 
 |  |  |             <uiHeader></uiHeader> | 
 |  |  |         </el-header> | 
 |  |  |         <el-main> | 
 |  |  |             <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;"> | 
 |  |  |                 <span style="font-size: 1rem; font-weight: bold;">控制台</span> | 
 |  |  |                 <div style="position: absolute; right: 17rem; top: 0.3rem;"> | 
 |  |  |                   节点选择: <el-select size="mini" @change="chooseMediaChange" style="width: 18rem; margin-right: 8rem;" v-model="mediaServerChoose" placeholder="请选择" default-first-option> | 
 |  |  |                   <el-option | 
 |  |  |                     v-for="item in mediaServerList" | 
 |  |  |                     :key="item.id" | 
 |  |  |                     :label="item.id + '( ' + item.streamIp + ' )'" | 
 |  |  |                     :value="item.id"> | 
 |  |  |                   </el-option> | 
 |  |  |                   </el-select> | 
 |  |  |                   <span >{{loadCount}}</span> | 
 |  |  |                 </div> | 
 |  |  |                 <div style="position: absolute; right: 1rem; top: 0.3rem;"> | 
 |  |  |                     <el-popover placement="bottom" width="900" height="300" trigger="click"> | 
 |  |  |                         <div style="height: 600px; overflow:auto; padding: 20px"> | 
 |  |  |                           <el-descriptions v-for="(value, key, index) in serverConfig" border column="1" style="margin-bottom: 1rem"> | 
 |  |  |                             <template slot="title"> | 
 |  |  |                               {{key}} | 
 |  |  |                             </template> | 
 |  |  |                             <el-descriptions-item v-for="(value1, key1, index1) in serverConfig[key]"> | 
 |  |  |                               <template slot="label" > | 
 |  |  |                                 {{ getMediaKeyNameFromKey(key1) }} | 
 |  |  |                               </template> | 
 |  |  |                               {{ value1 }} | 
 |  |  |                             </el-descriptions-item> | 
 |  |  |                           </el-descriptions> | 
 |  |  |                         </div> | 
 |  |  |                         <el-button type="primary" slot="reference" size="mini" @click="getServerConfig()">媒体服务器配置</el-button> | 
 |  |  |                     </el-popover> | 
 |  |  |                     <el-popover placement="bottom" width="900" height="300" trigger="click"> | 
 |  |  |                         <div style="height: 600px;overflow:auto; padding: 20px"> | 
 |  |  |   <div id="app" style="width: 100%"> | 
 |  |  |     <div class="page-header"> | 
 |  |  |       <div class="page-title">控制台</div> | 
 |  |  |       <div class="page-header-btn"> | 
 |  |  |         节点选择: | 
 |  |  |         <el-select size="mini" @change="chooseMediaChange" style="width: 18rem; margin-right: 8rem;" | 
 |  |  |                    v-model="mediaServerChoose" placeholder="请选择" default-first-option> | 
 |  |  |           <el-option | 
 |  |  |             v-for="item in mediaServerList" | 
 |  |  |             :key="item.id" | 
 |  |  |             :label="item.id + '( ' + item.streamIp + ' )'" | 
 |  |  |             :value="item.id"> | 
 |  |  |           </el-option> | 
 |  |  |         </el-select> | 
 |  |  |         <span>{{ loadCount }}</span> | 
 |  |  |       </div> | 
 |  |  |       <div class="page-header-btn"> | 
 |  |  |         <el-popover placement="bottom" width="900" height="300" trigger="click"> | 
 |  |  |           <div style="height: 600px; overflow:auto; padding: 20px"> | 
 |  |  |             <el-descriptions v-for="(value, key, index) in serverConfig" :key="key" border :column="1" | 
 |  |  |                              style="margin-bottom: 1rem"> | 
 |  |  |               <template slot="title"> | 
 |  |  |                 {{ key }} | 
 |  |  |               </template> | 
 |  |  |               <el-descriptions-item v-for="(value1, key1, index1) in serverConfig[key]" :key="key1"> | 
 |  |  |                 <template slot="label"> | 
 |  |  |                   {{ getMediaKeyNameFromKey(key1) }} | 
 |  |  |                 </template> | 
 |  |  |                 {{ value1 }} | 
 |  |  |               </el-descriptions-item> | 
 |  |  |             </el-descriptions> | 
 |  |  |           </div> | 
 |  |  |           <el-button type="primary" slot="reference" size="mini" @click="getServerConfig()">媒体服务器配置</el-button> | 
 |  |  |         </el-popover> | 
 |  |  |         <el-popover placement="bottom" width="900" height="300" trigger="click"> | 
 |  |  |           <div style="height: 600px;overflow:auto; padding: 20px"> | 
 |  |  |             <el-descriptions title="国标配置" border :column="1"> | 
 |  |  |               <template slot="extra"> | 
 |  |  |                 <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy" title="点击拷贝" | 
 |  |  |                            v-clipboard="JSON.stringify(wvpServerConfig.sip)|| ''" | 
 |  |  |                            @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></el-button> | 
 |  |  |               </template> | 
 |  |  |               <el-descriptions-item v-for="(value, key, index) in wvpServerConfig.sip" :key="key"> | 
 |  |  |                 <template slot="label"> | 
 |  |  |                   {{ getNameFromKey(key) }} | 
 |  |  |                 </template> | 
 |  |  |                 {{ value }} | 
 |  |  |               </el-descriptions-item> | 
 |  |  |             </el-descriptions> | 
 |  |  |  | 
 |  |  |                           <el-descriptions title="基础配置" border column="1"> | 
 |  |  |                               <template slot="extra"> | 
 |  |  |                                 <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy"  title="点击拷贝" v-clipboard="JSON.stringify(wvpServerConfig.base)" @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></el-button> | 
 |  |  |                               </template> | 
 |  |  |                               <el-descriptions-item v-for="(value, key, index) in wvpServerConfig.base" > | 
 |  |  |                                 <template slot="label" > | 
 |  |  |                                   {{ getNameFromKey(key) }} | 
 |  |  |                                 </template> | 
 |  |  |                                 <div v-if="key === 'interfaceAuthenticationExcludes'"> | 
 |  |  |                                   <el-dropdown> | 
 |  |  |             <div style="margin-top: 1rem"> | 
 |  |  |               <el-descriptions title="基础配置" border :column="1"> | 
 |  |  |                 <template slot="extra"> | 
 |  |  |                   <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy" title="点击拷贝" | 
 |  |  |                              v-clipboard="JSON.stringify(wvpServerConfig.base)|| ''" | 
 |  |  |                              @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></el-button> | 
 |  |  |                 </template> | 
 |  |  |                 <el-descriptions-item v-for="(value, key, index) in wvpServerConfig.base" :key="key"> | 
 |  |  |                   <template slot="label"> | 
 |  |  |                     {{ getNameFromKey(key) }} | 
 |  |  |                   </template> | 
 |  |  |                   <div v-if="key === 'interfaceAuthenticationExcludes'"> | 
 |  |  |                     <el-dropdown> | 
 |  |  |                                       <span class="el-dropdown-link"> | 
 |  |  |                                         查看<i class="el-icon-arrow-down el-icon--right"></i> | 
 |  |  |                                       </span> | 
 |  |  |                                     <el-dropdown-menu slot="dropdown"> | 
 |  |  |                                       <el-dropdown-item v-for="(value, key, index) in wvpServerConfig.base.interfaceAuthenticationExcludes">{{value}}</el-dropdown-item> | 
 |  |  |                                     </el-dropdown-menu> | 
 |  |  |                                   </el-dropdown> | 
 |  |  |                                 </div> | 
 |  |  |                                 <div v-if="key !== 'interfaceAuthenticationExcludes'"> | 
 |  |  |                                   <div v-if="value === true"> | 
 |  |  |                                     已启用 | 
 |  |  |                                   </div> | 
 |  |  |                                   <div v-if="value === false"> | 
 |  |  |                                     未启用 | 
 |  |  |                                   </div> | 
 |  |  |                                   <div v-if="value !== true && value !== false"> | 
 |  |  |                                     {{ value }} | 
 |  |  |                                   </div> | 
 |  |  |                                 </div> | 
 |  |  |                       <el-dropdown-menu slot="dropdown"> | 
 |  |  |                         <el-dropdown-item | 
 |  |  |                           v-for="(value, key, index) in wvpServerConfig.base.interfaceAuthenticationExcludes" | 
 |  |  |                           :key="key">{{ value }} | 
 |  |  |                         </el-dropdown-item> | 
 |  |  |                       </el-dropdown-menu> | 
 |  |  |                     </el-dropdown> | 
 |  |  |                   </div> | 
 |  |  |                   <div v-if="key !== 'interfaceAuthenticationExcludes'"> | 
 |  |  |                     <div v-if="value === true"> | 
 |  |  |                       已启用 | 
 |  |  |                     </div> | 
 |  |  |                     <div v-if="value === false"> | 
 |  |  |                       未启用 | 
 |  |  |                     </div> | 
 |  |  |                     <div v-if="value !== true && value !== false"> | 
 |  |  |                       {{ value }} | 
 |  |  |                     </div> | 
 |  |  |                   </div> | 
 |  |  |  | 
 |  |  |                               </el-descriptions-item> | 
 |  |  |                             </el-descriptions> | 
 |  |  |                           <div style="margin-top: 1rem"> | 
 |  |  |                             <el-descriptions title="国标配置" border column="1"> | 
 |  |  |                               <template slot="extra"> | 
 |  |  |                                 <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy"  title="点击拷贝" v-clipboard="JSON.stringify(wvpServerConfig.sip)" @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></el-button> | 
 |  |  |                               </template> | 
 |  |  |                               <el-descriptions-item v-for="(value, key, index) in wvpServerConfig.sip"> | 
 |  |  |                                 <template slot="label"> | 
 |  |  |                                   {{ getNameFromKey(key) }} | 
 |  |  |                                 </template> | 
 |  |  |                                 {{ value }} | 
 |  |  |                               </el-descriptions-item> | 
 |  |  |                             </el-descriptions> | 
 |  |  |                           </div> | 
 |  |  |                           <div style="margin-top: 1rem"> | 
 |  |  |                             <el-descriptions title="版本信息" border column="1"> | 
 |  |  |                               <template slot="extra"> | 
 |  |  |                                 <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy"  title="点击拷贝" v-clipboard="JSON.stringify(wvpServerVersion)" @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></el-button> | 
 |  |  |                               </template> | 
 |  |  |                               <el-descriptions-item v-for="(value, key, index) in wvpServerVersion"> | 
 |  |  |                                 <template slot="label"> | 
 |  |  |                                  {{ getNameFromKey(key) }} | 
 |  |  |                                 </template> | 
 |  |  |                                 {{ value }} | 
 |  |  |                               </el-descriptions-item> | 
 |  |  |                             </el-descriptions> | 
 |  |  |  | 
 |  |  |  | 
 |  |  |                           </div> | 
 |  |  |                         </div> | 
 |  |  |                       <el-button type="primary" slot="reference" size="mini" @click="getWVPServerConfig()">信令服务器配置</el-button> | 
 |  |  |                     </el-popover> | 
 |  |  |                     <el-button style="margin-left: 1rem;" type="danger" size="mini" @click="reStartServer()">重启媒体服务器</el-button> | 
 |  |  |                 </div> | 
 |  |  |                 </el-descriptions-item> | 
 |  |  |               </el-descriptions> | 
 |  |  |             </div> | 
 |  |  |             <el-row :gutter="30"> | 
 |  |  |                 <el-col :span="12"> | 
 |  |  |                     <div class="control-table" id="ThreadsLoad">table1</div> | 
 |  |  |                 </el-col> | 
 |  |  |                 <el-col :span="12"> | 
 |  |  |                     <div class="control-table" id="WorkThreadsLoad">table2</div> | 
 |  |  |                 </el-col> | 
 |  |  |             </el-row> | 
 |  |  |             <el-table :data="allSessionData" style="margin-top: 1rem;"> | 
 |  |  |                 <el-table-column prop="peer_ip" label="远端"></el-table-column> | 
 |  |  |                 <el-table-column prop="local_ip" label="本地"></el-table-column> | 
 |  |  |                 <el-table-column prop="typeid" label="类型"></el-table-column> | 
 |  |  |                 <el-table-column align="right"> | 
 |  |  |                     <template slot="header" slot-scope="scope"> | 
 |  |  |                         <el-button icon="el-icon-refresh-right" circle @click="getAllSession()"></el-button> | 
 |  |  |                     </template> | 
 |  |  |                     <template slot-scope="scope"> | 
 |  |  |                         <el-button @click.native.prevent="deleteRow(scope.$index, allSessionData)" type="text" size="small">移除</el-button> | 
 |  |  |                     </template> | 
 |  |  |                 </el-table-column> | 
 |  |  |             </el-table> | 
 |  |  |             <div style="margin-top: 1rem"> | 
 |  |  |               <el-descriptions title="版本信息" border :column="1"> | 
 |  |  |                 <template slot="extra"> | 
 |  |  |                   <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy" title="点击拷贝" | 
 |  |  |                              v-clipboard="JSON.stringify(wvpServerVersion) || ''" | 
 |  |  |                              @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></el-button> | 
 |  |  |                 </template> | 
 |  |  |                 <el-descriptions-item v-for="(value, key, index) in wvpServerVersion" :key="key"> | 
 |  |  |                   <template slot="label"> | 
 |  |  |                     {{ getNameFromKey(key) }} | 
 |  |  |                   </template> | 
 |  |  |                   {{ value }} | 
 |  |  |                 </el-descriptions-item> | 
 |  |  |               </el-descriptions> | 
 |  |  |  | 
 |  |  |         </el-main> | 
 |  |  |         <!-- <el-footer style="position: absolute; bottom: 0; width: 100%;">ZLMediaKit-VUE_UI v1</el-footer> --> | 
 |  |  |     </el-container> | 
 |  |  |  | 
 |  |  | </div> | 
 |  |  |             </div> | 
 |  |  |           </div> | 
 |  |  |           <el-button type="primary" slot="reference" size="mini" @click="getWVPServerConfig()">信令服务器配置</el-button> | 
 |  |  |         </el-popover> | 
 |  |  |         <el-button style="margin-left: 1rem;" type="danger" size="mini" @click="reStartServer()">重启媒体服务器</el-button> | 
 |  |  |       </div> | 
 |  |  |     </div> | 
 |  |  |     <!--    <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;">--> | 
 |  |  |     <!--      <span style="font-size: 1rem; font-weight: bold;">控制台</span>--> | 
 |  |  |     <!--      <div style="position: absolute; right: 17rem; top: 0.3rem;">--> | 
 |  |  |     <!--        节点选择:--> | 
 |  |  |     <!--        <el-select size="mini" @change="chooseMediaChange" style="width: 18rem; margin-right: 8rem;"--> | 
 |  |  |     <!--                   v-model="mediaServerChoose" placeholder="请选择" default-first-option>--> | 
 |  |  |     <!--          <el-option--> | 
 |  |  |     <!--            v-for="item in mediaServerList"--> | 
 |  |  |     <!--            :key="item.id"--> | 
 |  |  |     <!--            :label="item.id + '( ' + item.streamIp + ' )'"--> | 
 |  |  |     <!--            :value="item.id">--> | 
 |  |  |     <!--          </el-option>--> | 
 |  |  |     <!--        </el-select>--> | 
 |  |  |     <!--        <span>{{ loadCount }}</span>--> | 
 |  |  |     <!--      </div>--> | 
 |  |  |     <!--      <div style="position: absolute; right: 1rem; top: 0.3rem;">--> | 
 |  |  |     <!--        <el-popover placement="bottom" width="900" height="300" trigger="click">--> | 
 |  |  |     <!--          <div style="height: 600px; overflow:auto; padding: 20px">--> | 
 |  |  |     <!--            <el-descriptions v-for="(value, key, index) in serverConfig" :key="key" border :column="1"--> | 
 |  |  |     <!--                             style="margin-bottom: 1rem">--> | 
 |  |  |     <!--              <template slot="title">--> | 
 |  |  |     <!--                {{ key }}--> | 
 |  |  |     <!--              </template>--> | 
 |  |  |     <!--              <el-descriptions-item v-for="(value1, key1, index1) in serverConfig[key]" :key="key1">--> | 
 |  |  |     <!--                <template slot="label">--> | 
 |  |  |     <!--                  {{ getMediaKeyNameFromKey(key1) }}--> | 
 |  |  |     <!--                </template>--> | 
 |  |  |     <!--                {{ value1 }}--> | 
 |  |  |     <!--              </el-descriptions-item>--> | 
 |  |  |     <!--            </el-descriptions>--> | 
 |  |  |     <!--          </div>--> | 
 |  |  |     <!--          <el-button type="primary" slot="reference" size="mini" @click="getServerConfig()">媒体服务器配置</el-button>--> | 
 |  |  |     <!--        </el-popover>--> | 
 |  |  |     <!--        <el-popover placement="bottom" width="900" height="300" trigger="click">--> | 
 |  |  |     <!--          <div style="height: 600px;overflow:auto; padding: 20px">--> | 
 |  |  |     <!--            <el-descriptions title="国标配置" border :column="1">--> | 
 |  |  |     <!--              <template slot="extra">--> | 
 |  |  |     <!--                <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy" title="点击拷贝"--> | 
 |  |  |     <!--                           v-clipboard="JSON.stringify(wvpServerConfig.sip)|| ''"--> | 
 |  |  |     <!--                           @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></el-button>--> | 
 |  |  |     <!--              </template>--> | 
 |  |  |     <!--              <el-descriptions-item v-for="(value, key, index) in wvpServerConfig.sip" :key="key">--> | 
 |  |  |     <!--                <template slot="label">--> | 
 |  |  |     <!--                  {{ getNameFromKey(key) }}--> | 
 |  |  |     <!--                </template>--> | 
 |  |  |     <!--                {{ value }}--> | 
 |  |  |     <!--              </el-descriptions-item>--> | 
 |  |  |     <!--            </el-descriptions>--> | 
 |  |  |  | 
 |  |  |     <!--            <div style="margin-top: 1rem">--> | 
 |  |  |     <!--              <el-descriptions title="基础配置" border :column="1">--> | 
 |  |  |     <!--                <template slot="extra">--> | 
 |  |  |     <!--                  <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy" title="点击拷贝"--> | 
 |  |  |     <!--                             v-clipboard="JSON.stringify(wvpServerConfig.base)|| ''"--> | 
 |  |  |     <!--                             @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></el-button>--> | 
 |  |  |     <!--                </template>--> | 
 |  |  |     <!--                <el-descriptions-item v-for="(value, key, index) in wvpServerConfig.base" :key="key">--> | 
 |  |  |     <!--                  <template slot="label">--> | 
 |  |  |     <!--                    {{ getNameFromKey(key) }}--> | 
 |  |  |     <!--                  </template>--> | 
 |  |  |     <!--                  <div v-if="key === 'interfaceAuthenticationExcludes'">--> | 
 |  |  |     <!--                    <el-dropdown>--> | 
 |  |  |     <!--                                      <span class="el-dropdown-link">--> | 
 |  |  |     <!--                                        查看<i class="el-icon-arrow-down el-icon--right"></i>--> | 
 |  |  |     <!--                                      </span>--> | 
 |  |  |     <!--                      <el-dropdown-menu slot="dropdown">--> | 
 |  |  |     <!--                        <el-dropdown-item--> | 
 |  |  |     <!--                          v-for="(value, key, index) in wvpServerConfig.base.interfaceAuthenticationExcludes"--> | 
 |  |  |     <!--                          :key="key">{{ value }}--> | 
 |  |  |     <!--                        </el-dropdown-item>--> | 
 |  |  |     <!--                      </el-dropdown-menu>--> | 
 |  |  |     <!--                    </el-dropdown>--> | 
 |  |  |     <!--                  </div>--> | 
 |  |  |     <!--                  <div v-if="key !== 'interfaceAuthenticationExcludes'">--> | 
 |  |  |     <!--                    <div v-if="value === true">--> | 
 |  |  |     <!--                      已启用--> | 
 |  |  |     <!--                    </div>--> | 
 |  |  |     <!--                    <div v-if="value === false">--> | 
 |  |  |     <!--                      未启用--> | 
 |  |  |     <!--                    </div>--> | 
 |  |  |     <!--                    <div v-if="value !== true && value !== false">--> | 
 |  |  |     <!--                      {{ value }}--> | 
 |  |  |     <!--                    </div>--> | 
 |  |  |     <!--                  </div>--> | 
 |  |  |  | 
 |  |  |     <!--                </el-descriptions-item>--> | 
 |  |  |     <!--              </el-descriptions>--> | 
 |  |  |     <!--            </div>--> | 
 |  |  |     <!--            <div style="margin-top: 1rem">--> | 
 |  |  |     <!--              <el-descriptions title="版本信息" border :column="1">--> | 
 |  |  |     <!--                <template slot="extra">--> | 
 |  |  |     <!--                  <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy" title="点击拷贝"--> | 
 |  |  |     <!--                             v-clipboard="JSON.stringify(wvpServerVersion) || ''"--> | 
 |  |  |     <!--                             @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></el-button>--> | 
 |  |  |     <!--                </template>--> | 
 |  |  |     <!--                <el-descriptions-item v-for="(value, key, index) in wvpServerVersion" :key="key">--> | 
 |  |  |     <!--                  <template slot="label">--> | 
 |  |  |     <!--                    {{ getNameFromKey(key) }}--> | 
 |  |  |     <!--                  </template>--> | 
 |  |  |     <!--                  {{ value }}--> | 
 |  |  |     <!--                </el-descriptions-item>--> | 
 |  |  |     <!--              </el-descriptions>--> | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     <!--            </div>--> | 
 |  |  |     <!--          </div>--> | 
 |  |  |     <!--          <el-button type="primary" slot="reference" size="mini" @click="getWVPServerConfig()">信令服务器配置</el-button>--> | 
 |  |  |     <!--        </el-popover>--> | 
 |  |  |     <!--        <el-button style="margin-left: 1rem;" type="danger" size="mini" @click="reStartServer()">重启媒体服务器</el-button>--> | 
 |  |  |     <!--      </div>--> | 
 |  |  |     <!--    </div>--> | 
 |  |  |     <el-row style="width: 100%"> | 
 |  |  |       <el-col :span="12"> | 
 |  |  |         <div class="control-table" id="ThreadsLoad" style="margin-right:10px;">table1</div> | 
 |  |  |       </el-col> | 
 |  |  |       <el-col :span="12"> | 
 |  |  |         <div class="control-table" id="WorkThreadsLoad" style="margin-left:10px;">table2</div> | 
 |  |  |       </el-col> | 
 |  |  |     </el-row> | 
 |  |  |     <el-table :data="allSessionData" style="margin-top: 1rem;"> | 
 |  |  |       <el-table-column prop="peer_ip" label="远端"></el-table-column> | 
 |  |  |       <el-table-column prop="local_ip" label="本地"></el-table-column> | 
 |  |  |       <el-table-column prop="typeid" label="类型"></el-table-column> | 
 |  |  |       <el-table-column align="right"> | 
 |  |  |         <template slot="header" slot-scope="scope"> | 
 |  |  |           <el-button icon="el-icon-refresh-right" circle @click="getAllSession()"></el-button> | 
 |  |  |         </template> | 
 |  |  |         <template slot-scope="scope"> | 
 |  |  |           <el-button @click.native.prevent="deleteRow(scope.$index, allSessionData)" type="text" size="small">移除 | 
 |  |  |           </el-button> | 
 |  |  |         </template> | 
 |  |  |       </el-table-column> | 
 |  |  |     </el-table> | 
 |  |  |   </div> | 
 |  |  | </template> | 
 |  |  |  | 
 |  |  | <script> | 
 |  |  | import uiHeader from './UiHeader.vue' | 
 |  |  | import uiHeader from '../layout/UiHeader.vue' | 
 |  |  | import MediaServer from './service/MediaServer' | 
 |  |  |  | 
 |  |  | import echarts from 'echarts'; | 
 |  |  |  | 
 |  |  | export default { | 
 |  |  |     name: 'app', | 
 |  |  |     components: { | 
 |  |  |         echarts, | 
 |  |  |         uiHeader | 
 |  |  |   name: 'app', | 
 |  |  |   components: { | 
 |  |  |     echarts, | 
 |  |  |     uiHeader | 
 |  |  |   }, | 
 |  |  |   data() { | 
 |  |  |     return { | 
 |  |  |       tableOption: { | 
 |  |  |         // legend: {}, | 
 |  |  |         xAxis: {}, | 
 |  |  |         yAxis: {}, | 
 |  |  |         label: {}, | 
 |  |  |         tooltip: {}, | 
 |  |  |         dataZoom: [], | 
 |  |  |         series: [] | 
 |  |  |       }, | 
 |  |  |       table1Option: { | 
 |  |  |         // legend: {}, | 
 |  |  |         xAxis: {}, | 
 |  |  |         yAxis: {}, | 
 |  |  |         label: {}, | 
 |  |  |         tooltip: {}, | 
 |  |  |         series: [] | 
 |  |  |       }, | 
 |  |  |       mChart: null, | 
 |  |  |       mChart1: null, | 
 |  |  |       charZoomStart: 0, | 
 |  |  |       charZoomEnd: 100, | 
 |  |  |       chartInterval: 0, //更新图表统计图定时任务标识 | 
 |  |  |       allSessionData: [], | 
 |  |  |       visible: false, | 
 |  |  |       wvpVisible: false, | 
 |  |  |       serverConfig: {}, | 
 |  |  |       wvpServerConfig: {}, | 
 |  |  |       wvpServerVersion: {}, | 
 |  |  |       mediaServer: new MediaServer(), | 
 |  |  |       mediaServerChoose: null, | 
 |  |  |       loadCount: 0, | 
 |  |  |       mediaServerList: [] | 
 |  |  |     }; | 
 |  |  |   }, | 
 |  |  |   mounted() { | 
 |  |  |     this.initTable() | 
 |  |  |     this.chartInterval = setInterval(this.updateData, 3000); | 
 |  |  |     this.mediaServer.getOnlineMediaServerList((data) => { | 
 |  |  |       this.mediaServerList = data.data; | 
 |  |  |       if (this.mediaServerList && this.mediaServerList.length > 0) { | 
 |  |  |         this.mediaServerChoose = this.mediaServerList[0].id | 
 |  |  |         this.loadCount = this.mediaServerList[0].count; | 
 |  |  |         this.updateData(); | 
 |  |  |       } | 
 |  |  |     }) | 
 |  |  |   }, | 
 |  |  |   destroyed() { | 
 |  |  |     clearInterval(this.chartInterval); //释放定时任务 | 
 |  |  |   }, | 
 |  |  |   methods: { | 
 |  |  |     chooseMediaChange: function (val) { | 
 |  |  |       this.loadCount = 0 | 
 |  |  |       this.initTable() | 
 |  |  |       this.updateData(); | 
 |  |  |     }, | 
 |  |  |     data() { | 
 |  |  |         return { | 
 |  |  |             tableOption: { | 
 |  |  |                 // legend: {}, | 
 |  |  |                 xAxis: {}, | 
 |  |  |                 yAxis: {}, | 
 |  |  |                 label: {}, | 
 |  |  |                 tooltip: {}, | 
 |  |  |                 dataZoom: [], | 
 |  |  |                 series: [] | 
 |  |  |             }, | 
 |  |  |             table1Option: { | 
 |  |  |                 // legend: {}, | 
 |  |  |                 xAxis: {}, | 
 |  |  |                 yAxis: {}, | 
 |  |  |                 label: {}, | 
 |  |  |                 tooltip: {}, | 
 |  |  |                 series: [] | 
 |  |  |             }, | 
 |  |  |             mChart: null, | 
 |  |  |             mChart1: null, | 
 |  |  |             charZoomStart: 0, | 
 |  |  |             charZoomEnd: 100, | 
 |  |  |             chartInterval: 0, //更新图表统计图定时任务标识 | 
 |  |  |             allSessionData: [], | 
 |  |  |             visible: false, | 
 |  |  |             wvpVisible: false, | 
 |  |  |             serverConfig: {}, | 
 |  |  |             wvpServerConfig: {}, | 
 |  |  |             wvpServerVersion: {}, | 
 |  |  |             mediaServer : new MediaServer(), | 
 |  |  |             mediaServerChoose : null, | 
 |  |  |             loadCount : 0, | 
 |  |  |             mediaServerList : [] | 
 |  |  |         }; | 
 |  |  |     updateData: function () { | 
 |  |  |       this.getThreadsLoad(); | 
 |  |  |       this.getLoadCount(); | 
 |  |  |       this.getAllSession(); | 
 |  |  |     }, | 
 |  |  |     mounted() { | 
 |  |  |     /** | 
 |  |  |      * 获取线程状态 | 
 |  |  |      */ | 
 |  |  |     getThreadsLoad: function () { | 
 |  |  |       let that = this; | 
 |  |  |       if (that.mediaServerChoose != null) { | 
 |  |  |         this.$axios({ | 
 |  |  |           method: 'get', | 
 |  |  |           url: '/zlm/' + that.mediaServerChoose + '/index/api/getThreadsLoad' | 
 |  |  |         }).then(function (res) { | 
 |  |  |           if (res.data.code == 0) { | 
 |  |  |             that.tableOption.xAxis.data.push(new Date().toLocaleTimeString('chinese', { | 
 |  |  |               hour12: false | 
 |  |  |             })); | 
 |  |  |             that.table1Option.xAxis.data.push(new Date().toLocaleTimeString('chinese', { | 
 |  |  |               hour12: false | 
 |  |  |             })); | 
 |  |  |  | 
 |  |  |         this.initTable(); | 
 |  |  |         this.chartInterval = setInterval(this.updateData, 3000); | 
 |  |  |         this.mediaServer.getOnlineMediaServerList((data)=>{ | 
 |  |  |           this.mediaServerList = data.data; | 
 |  |  |           if (this.mediaServerList && this.mediaServerList.length > 0) { | 
 |  |  |             this.mediaServerChoose = this.mediaServerList[0].id | 
 |  |  |             this.loadCount = this.mediaServerList[0].count; | 
 |  |  |             this.updateData(); | 
 |  |  |           } | 
 |  |  |         }) | 
 |  |  |     }, | 
 |  |  |     destroyed() { | 
 |  |  |         clearInterval(this.chartInterval); //释放定时任务 | 
 |  |  |     }, | 
 |  |  |     methods: { | 
 |  |  |         chooseMediaChange: function (val) { | 
 |  |  |             this.loadCount = 0 | 
 |  |  |             this.initTable() | 
 |  |  |             this.updateData(); | 
 |  |  |         }, | 
 |  |  |         updateData: function () { | 
 |  |  |             this.getThreadsLoad(); | 
 |  |  |             this.getLoadCount(); | 
 |  |  |             this.getAllSession(); | 
 |  |  |         }, | 
 |  |  |         /** | 
 |  |  |          * 获取线程状态 | 
 |  |  |          */ | 
 |  |  |         getThreadsLoad: function () { | 
 |  |  |             let that = this; | 
 |  |  |             if (that.mediaServerChoose != null) { | 
 |  |  |               this.$axios({ | 
 |  |  |                 method: 'get', | 
 |  |  |                 url: '/zlm/' + that.mediaServerChoose +'/index/api/getThreadsLoad' | 
 |  |  |               }).then(function (res) { | 
 |  |  |                 if (res.data.code == 0) { | 
 |  |  |                   that.tableOption.xAxis.data.push(new Date().toLocaleTimeString('chinese', { | 
 |  |  |                     hour12: false | 
 |  |  |                   })); | 
 |  |  |                   that.table1Option.xAxis.data.push(new Date().toLocaleTimeString('chinese', { | 
 |  |  |                     hour12: false | 
 |  |  |                   })); | 
 |  |  |  | 
 |  |  |                   for (var i = 0; i < res.data.data.length; i++) { | 
 |  |  |                     if (that.tableOption.series[i] === undefined) { | 
 |  |  |                       let data = { | 
 |  |  |                         data: [], | 
 |  |  |                         type: 'line' | 
 |  |  |                       }; | 
 |  |  |                       let data1 = { | 
 |  |  |                         data: [], | 
 |  |  |                         type: 'line' | 
 |  |  |                       }; | 
 |  |  |                       data.data.push(res.data.data[i].delay); | 
 |  |  |                       data1.data.push(res.data.data[i].load); | 
 |  |  |                       that.tableOption.series.push(data); | 
 |  |  |                       that.table1Option.series.push(data1); | 
 |  |  |                     } else { | 
 |  |  |                       that.tableOption.series[i].data.push(res.data.data[i].delay); | 
 |  |  |                       that.table1Option.series[i].data.push(res.data.data[i].load); | 
 |  |  |                     } | 
 |  |  |                   } | 
 |  |  |                   that.tableOption.dataZoom[0].start = that.charZoomStart; | 
 |  |  |                   that.tableOption.dataZoom[0].end = that.charZoomEnd; | 
 |  |  |                   that.table1Option.dataZoom[0].start = that.charZoomStart; | 
 |  |  |                   that.table1Option.dataZoom[0].end = that.charZoomEnd; | 
 |  |  |                   //that.myChart = echarts.init(document.getElementById('ThreadsLoad')); | 
 |  |  |                   that.myChart.setOption(that.tableOption, true); | 
 |  |  |                   // that.myChart1 = echarts.init(document.getElementById('WorkThreadsLoad')); | 
 |  |  |                   that.myChart1.setOption(that.table1Option, true); | 
 |  |  |                 } | 
 |  |  |               }); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         }, | 
 |  |  |         getLoadCount: function (){ | 
 |  |  |           let that = this; | 
 |  |  |           if (that.mediaServerChoose != null) { | 
 |  |  |             that.mediaServer.getMediaServer(that.mediaServerChoose, (data)=>{ | 
 |  |  |               if (data.code == 0) { | 
 |  |  |                 that.loadCount = data.data.count | 
 |  |  |             for (var i = 0; i < res.data.data.length; i++) { | 
 |  |  |               if (that.tableOption.series[i] === undefined) { | 
 |  |  |                 let data = { | 
 |  |  |                   data: [], | 
 |  |  |                   type: 'line' | 
 |  |  |                 }; | 
 |  |  |                 let data1 = { | 
 |  |  |                   data: [], | 
 |  |  |                   type: 'line' | 
 |  |  |                 }; | 
 |  |  |                 data.data.push(res.data.data[i].delay); | 
 |  |  |                 data1.data.push(res.data.data[i].load); | 
 |  |  |                 that.tableOption.series.push(data); | 
 |  |  |                 that.table1Option.series.push(data1); | 
 |  |  |               } else { | 
 |  |  |                 that.tableOption.series[i].data.push(res.data.data[i].delay); | 
 |  |  |                 that.table1Option.series[i].data.push(res.data.data[i].load); | 
 |  |  |               } | 
 |  |  |             } | 
 |  |  |             that.tableOption.dataZoom[0].start = that.charZoomStart; | 
 |  |  |             that.tableOption.dataZoom[0].end = that.charZoomEnd; | 
 |  |  |             that.table1Option.dataZoom[0].start = that.charZoomStart; | 
 |  |  |             that.table1Option.dataZoom[0].end = that.charZoomEnd; | 
 |  |  |             //that.myChart = echarts.init(document.getElementById('ThreadsLoad')); | 
 |  |  |             that.myChart.setOption(that.tableOption, true); | 
 |  |  |             // that.myChart1 = echarts.init(document.getElementById('WorkThreadsLoad')); | 
 |  |  |             that.myChart1.setOption(that.table1Option, true); | 
 |  |  |             that.$nextTick(() => { | 
 |  |  |               that.myChart.resize() | 
 |  |  |               that.myChart1.resize() | 
 |  |  |             }) | 
 |  |  |           } | 
 |  |  |         }, | 
 |  |  |         initTable: function () { | 
 |  |  |             let that = this; | 
 |  |  |             this.tableOption.xAxis = { | 
 |  |  |                 type: 'category', | 
 |  |  |                 data: [], // x轴数据 | 
 |  |  |                 name: '时间', // x轴名称 | 
 |  |  |                 // x轴名称样式 | 
 |  |  |                 nameTextStyle: { | 
 |  |  |                     fontWeight: 300, | 
 |  |  |                     fontSize: 15 | 
 |  |  |                 } | 
 |  |  |             }; | 
 |  |  |             this.tableOption.yAxis = { | 
 |  |  |                 type: 'value', | 
 |  |  |                 name: '延迟率', // y轴名称 | 
 |  |  |                 boundaryGap: [0, '100%'], | 
 |  |  |                 max: 100, | 
 |  |  |                 axisLabel: { | 
 |  |  |                     show: true, | 
 |  |  |                     interval: 'auto', | 
 |  |  |                     formatter: '{value} %' | 
 |  |  |                 }, | 
 |  |  |                 // y轴名称样式 | 
 |  |  |                 nameTextStyle: { | 
 |  |  |                     fontWeight: 300, | 
 |  |  |                     fontSize: 15 | 
 |  |  |                 } | 
 |  |  |             }; | 
 |  |  |             this.tableOption.dataZoom = [{ | 
 |  |  |                 show: true, | 
 |  |  |                 start: this.charZoomStart, | 
 |  |  |                 end: this.charZoomEnd | 
 |  |  |             }]; | 
 |  |  |             this.myChart = echarts.init(document.getElementById('ThreadsLoad')); | 
 |  |  |             this.myChart.setOption(this.tableOption); | 
 |  |  |             this.myChart.on('dataZoom', function (event) { | 
 |  |  |                 if (event.batch) { | 
 |  |  |                     that.charZoomStart = event.batch[0].start; | 
 |  |  |                     that.charZoomEnd = event.batch[0].end; | 
 |  |  |                 } else { | 
 |  |  |                     that.charZoomStart = event.start; | 
 |  |  |                     that.charZoomEnd = event.end; | 
 |  |  |                 } | 
 |  |  |             }); | 
 |  |  |         }); | 
 |  |  |       } | 
 |  |  |  | 
 |  |  |             this.table1Option.xAxis = { | 
 |  |  |                 type: 'category', | 
 |  |  |                 data: [], // x轴数据 | 
 |  |  |                 name: '时间', // x轴名称 | 
 |  |  |                 // x轴名称样式 | 
 |  |  |                 nameTextStyle: { | 
 |  |  |                     fontWeight: 300, | 
 |  |  |                     fontSize: 15 | 
 |  |  |                 } | 
 |  |  |             }; | 
 |  |  |             this.table1Option.yAxis = { | 
 |  |  |                 type: 'value', | 
 |  |  |                 name: '负载率', // y轴名称 | 
 |  |  |                 boundaryGap: [0, '100%'], | 
 |  |  |                 max: 100, | 
 |  |  |                 axisLabel: { | 
 |  |  |                     show: true, | 
 |  |  |                     interval: 'auto', | 
 |  |  |                     formatter: '{value} %' | 
 |  |  |                 }, | 
 |  |  |                 // y轴名称样式 | 
 |  |  |                 nameTextStyle: { | 
 |  |  |                     fontWeight: 300, | 
 |  |  |                     fontSize: 15 | 
 |  |  |                 } | 
 |  |  |             }; | 
 |  |  |             this.table1Option.dataZoom = [{ | 
 |  |  |                 show: true, | 
 |  |  |                 start: this.charZoomStart, | 
 |  |  |                 end: this.charZoomEnd | 
 |  |  |             }]; | 
 |  |  |             this.myChart1 = echarts.init(document.getElementById('WorkThreadsLoad')); | 
 |  |  |             this.myChart1.setOption(this.table1Option); | 
 |  |  |             this.myChart1.on('dataZoom', function (event) { | 
 |  |  |                 if (event.batch) { | 
 |  |  |                     that.charZoomStart = event.batch[0].start; | 
 |  |  |                     that.charZoomEnd = event.batch[0].end; | 
 |  |  |                 } else { | 
 |  |  |                     that.charZoomStart = event.start; | 
 |  |  |                     that.charZoomEnd = event.end; | 
 |  |  |                 } | 
 |  |  |             }); | 
 |  |  |         }, | 
 |  |  |  | 
 |  |  |         getAllSession: function () { | 
 |  |  |             let that = this; | 
 |  |  |             that.allSessionData = []; | 
 |  |  |             this.$axios({ | 
 |  |  |                 method: 'get', | 
 |  |  |                 url: '/zlm/' + that.mediaServerChoose +'/index/api/getAllSession' | 
 |  |  |             }).then(function (res) { | 
 |  |  |                 res.data.data.forEach(item => { | 
 |  |  |                     let data = { | 
 |  |  |                         peer_ip: item.peer_ip, | 
 |  |  |                         local_ip: item.local_ip, | 
 |  |  |                         typeid: item.typeid, | 
 |  |  |                         id: item.id | 
 |  |  |                     }; | 
 |  |  |                     that.allSessionData.push(data); | 
 |  |  |                 }); | 
 |  |  |             }); | 
 |  |  |         }, | 
 |  |  |         getServerConfig: function () { | 
 |  |  |             let that = this; | 
 |  |  |             this.$axios({ | 
 |  |  |                 method: 'get', | 
 |  |  |                 url: '/zlm/' + that.mediaServerChoose +'/index/api/getServerConfig' | 
 |  |  |             }).then(function (res) { | 
 |  |  |                 let info = res.data.data[0]; | 
 |  |  |                 let serverInfo = {} | 
 |  |  |                 for (let i = 0; i < Object.keys(info).length; i++) { | 
 |  |  |                   let key = Object.keys(info)[i]; | 
 |  |  |                   let group = key.substring(0, key.indexOf(".")) | 
 |  |  |                   let itemKey = key.substring(key.indexOf(".") + 1) | 
 |  |  |                   if (!serverInfo[group]) serverInfo[group] = {} | 
 |  |  |                   serverInfo[group][itemKey] = info[key] | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 that.serverConfig = serverInfo; | 
 |  |  |                 that.visible = true; | 
 |  |  |             }); | 
 |  |  |         }, | 
 |  |  |         getWVPServerConfig: function () { | 
 |  |  |             let that = this; | 
 |  |  |             this.$axios({ | 
 |  |  |                 method: 'get', | 
 |  |  |                 url: '/api/server/config' | 
 |  |  |             }).then(function (res) { | 
 |  |  |                 console.log(res) | 
 |  |  |                 that.wvpServerConfig = res.data.data; | 
 |  |  |                 that.wvpVisible = true; | 
 |  |  |             }); | 
 |  |  |             this.$axios({ | 
 |  |  |                 method: 'get', | 
 |  |  |                 url: '/api/server/version' | 
 |  |  |             }).then(function (res) { | 
 |  |  |                 console.log(res) | 
 |  |  |                 that.wvpServerVersion = res.data.data; | 
 |  |  |                 that.wvpVisible = true; | 
 |  |  |             }); | 
 |  |  |         }, | 
 |  |  |         reStartServer: function () { | 
 |  |  |             let that = this; | 
 |  |  |             this.$confirm('此操作将重启媒体服务器, 是否继续?', '提示', { | 
 |  |  |                 confirmButtonText: '确定', | 
 |  |  |                 cancelButtonText: '取消', | 
 |  |  |                 type: 'warning' | 
 |  |  |             }).then(() => { | 
 |  |  |                 let that = this; | 
 |  |  |                 this.$axios({ | 
 |  |  |                     method: 'get', | 
 |  |  |                     url: '/zlm/' + that.mediaServerChoose +'/index/api/restartServer' | 
 |  |  |                 }).then(function (res) { | 
 |  |  |                     that.getAllSession(); | 
 |  |  |                     if (res.data.code == 0) { | 
 |  |  |                         that.$message({ | 
 |  |  |                             type: 'success', | 
 |  |  |                             message: '操作完成' | 
 |  |  |                         }); | 
 |  |  |                     } | 
 |  |  |                 }); | 
 |  |  |             }); | 
 |  |  |         }, | 
 |  |  |         deleteRow: function (index, tabledata) { | 
 |  |  |             let that = this; | 
 |  |  |             this.$confirm('此操作将断开该通信链路, 是否继续?', '提示', { | 
 |  |  |                     confirmButtonText: '确定', | 
 |  |  |                     cancelButtonText: '取消', | 
 |  |  |                     type: 'warning' | 
 |  |  |                 }) | 
 |  |  |                 .then(() => { | 
 |  |  |                     that.deleteSession(tabledata[index].id); | 
 |  |  |                 }) | 
 |  |  |                 .catch(() => { | 
 |  |  |                     console.log('id:' + JSON.stringify(tabledata[index])); | 
 |  |  |                     this.$message({ | 
 |  |  |                         type: 'info', | 
 |  |  |                         message: '已取消删除' | 
 |  |  |                     }); | 
 |  |  |                 }); | 
 |  |  |             console.log(JSON.stringify(tabledata[index])); | 
 |  |  |         }, | 
 |  |  |         deleteSession: function (id) { | 
 |  |  |             let that = this; | 
 |  |  |             this.$axios({ | 
 |  |  |                 method: 'get', | 
 |  |  |                 url: '/zlm/' + that.mediaServerChoose +'/index/api/kick_session&id=' + id | 
 |  |  |             }).then(function (res) { | 
 |  |  |                 that.getAllSession(); | 
 |  |  |                 that.$message({ | 
 |  |  |                     type: 'success', | 
 |  |  |                     message: '删除成功!' | 
 |  |  |                 }); | 
 |  |  |             }); | 
 |  |  |         }, | 
 |  |  |         getNameFromKey: function(key) { | 
 |  |  |           let nameData = { | 
 |  |  |             "waitTrack": "等待编码信息", | 
 |  |  |             "interfaceAuthenticationExcludes": "不进行鉴权的接口", | 
 |  |  |             "playTimeout": "点播超时时间", | 
 |  |  |             "autoApplyPlay": "自动点播", | 
 |  |  |             "recordPushLive": "推流录像", | 
 |  |  |             "redisConfig": "自动配置redis", | 
 |  |  |             "thirdPartyGBIdReg": "stream信息正则", | 
 |  |  |             "savePositionHistory": "保存轨迹信息", | 
 |  |  |             "interfaceAuthentication": "接口鉴权", | 
 |  |  |             "serverId": "服务ID", | 
 |  |  |             "logInDatebase": "日志存储进数据库", | 
 |  |  |             "seniorSdp": "扩展SDP", | 
 |  |  |             "password": "密码", | 
 |  |  |             "port": "端口号", | 
 |  |  |             "keepaliveTimeOut": "心跳超时", | 
 |  |  |             "domain": "国标域", | 
 |  |  |             "ip": "IP地址", | 
 |  |  |             "monitorIp": "监听IP", | 
 |  |  |             "alarm": "存储报警信息", | 
 |  |  |             "ptzSpeed": "云台控制速度", | 
 |  |  |             "id": "国标ID", | 
 |  |  |             "registerTimeInterval": "注册间隔", | 
 |  |  |             "artifactId": "模块名称", | 
 |  |  |             "version": "版本", | 
 |  |  |             "project": "工程", | 
 |  |  |             "git_Revision": "GIT修订版本", | 
 |  |  |             "git_BRANCH": "GIT分支", | 
 |  |  |             "git_URL": "GIT地址", | 
 |  |  |             "build_DATE": "构建时间", | 
 |  |  |             "create_By": "作者", | 
 |  |  |             "git_Revision_SHORT": "GIT修订版本(短)", | 
 |  |  |             "build_Jdk": "构建用JDK", | 
 |  |  |           }; | 
 |  |  |           console.log(key + ": " + nameData[key]) | 
 |  |  |  | 
 |  |  |           if (nameData[key]) { | 
 |  |  |             return nameData[key] | 
 |  |  |           }else { | 
 |  |  |             return key; | 
 |  |  |     }, | 
 |  |  |     getLoadCount: function () { | 
 |  |  |       let that = this; | 
 |  |  |       if (that.mediaServerChoose != null) { | 
 |  |  |         that.mediaServer.getMediaServer(that.mediaServerChoose, (data) => { | 
 |  |  |           if (data.code == 0) { | 
 |  |  |             that.loadCount = data.data.count | 
 |  |  |           } | 
 |  |  |         }, | 
 |  |  |         getMediaKeyNameFromKey: function(key) { | 
 |  |  |           let nameData = { | 
 |  |  |             "waitTrack": "等待编码信息", | 
 |  |  |             "interfaceAuthenticationExcludes": "不进行鉴权的接口", | 
 |  |  |             "playTimeout": "点播超时时间", | 
 |  |  |             "autoApplyPlay": "自动点播", | 
 |  |  |             "recordPushLive": "推流录像", | 
 |  |  |             "redisConfig": "自动配置redis", | 
 |  |  |             "thirdPartyGBIdReg": "stream信息正则", | 
 |  |  |             "savePositionHistory": "保存轨迹信息", | 
 |  |  |             "interfaceAuthentication": "接口鉴权", | 
 |  |  |             "serverId": "服务ID", | 
 |  |  |             "logInDatebase": "日志存储进数据库", | 
 |  |  |             "seniorSdp": "扩展SDP", | 
 |  |  |             "password": "密码", | 
 |  |  |             "port": "端口号", | 
 |  |  |             "keepaliveTimeOut": "心跳超时", | 
 |  |  |             "domain": "国标域", | 
 |  |  |             "ip": "IP地址", | 
 |  |  |             "monitorIp": "监听IP", | 
 |  |  |             "alarm": "存储报警信息", | 
 |  |  |             "ptzSpeed": "云台控制速度", | 
 |  |  |             "id": "国标ID", | 
 |  |  |             "registerTimeInterval": "注册间隔", | 
 |  |  |             "artifactId": "模块名称", | 
 |  |  |             "version": "版本", | 
 |  |  |             "project": "工程", | 
 |  |  |             "git_Revision": "GIT修订版本", | 
 |  |  |             "git_BRANCH": "GIT分支", | 
 |  |  |             "git_URL": "GIT地址", | 
 |  |  |             "build_DATE": "构建时间", | 
 |  |  |             "create_By": "作者", | 
 |  |  |             "git_Revision_SHORT": "GIT修订版本(短)", | 
 |  |  |             "build_Jdk": "构建用JDK", | 
 |  |  |           }; | 
 |  |  |           console.log(key + ": " + nameData[key]) | 
 |  |  |  | 
 |  |  |           if (nameData[key]) { | 
 |  |  |             return nameData[key] | 
 |  |  |           }else { | 
 |  |  |             return key; | 
 |  |  |           } | 
 |  |  |         }) | 
 |  |  |       } | 
 |  |  |     }, | 
 |  |  |     initTable: function () { | 
 |  |  |       let that = this; | 
 |  |  |       this.tableOption.xAxis = { | 
 |  |  |         type: 'category', | 
 |  |  |         data: [], // x轴数据 | 
 |  |  |         name: '时间', // x轴名称 | 
 |  |  |         // x轴名称样式 | 
 |  |  |         nameTextStyle: { | 
 |  |  |           fontWeight: 300, | 
 |  |  |           fontSize: 15 | 
 |  |  |         } | 
 |  |  |       }; | 
 |  |  |       this.tableOption.yAxis = { | 
 |  |  |         type: 'value', | 
 |  |  |         name: '延迟率', // y轴名称 | 
 |  |  |         boundaryGap: [0, '100%'], | 
 |  |  |         max: 100, | 
 |  |  |         axisLabel: { | 
 |  |  |           show: true, | 
 |  |  |           interval: 'auto', | 
 |  |  |           formatter: '{value} %' | 
 |  |  |         }, | 
 |  |  |         // y轴名称样式 | 
 |  |  |         nameTextStyle: { | 
 |  |  |           fontWeight: 300, | 
 |  |  |           fontSize: 15 | 
 |  |  |         } | 
 |  |  |       }; | 
 |  |  |       this.tableOption.dataZoom = [{ | 
 |  |  |         show: true, | 
 |  |  |         start: this.charZoomStart, | 
 |  |  |         end: this.charZoomEnd | 
 |  |  |       }]; | 
 |  |  |       this.myChart = echarts.init(document.getElementById('ThreadsLoad')); | 
 |  |  |       this.myChart.setOption(this.tableOption); | 
 |  |  |       this.myChart.on('dataZoom', function (event) { | 
 |  |  |         if (event.batch) { | 
 |  |  |           that.charZoomStart = event.batch[0].start; | 
 |  |  |           that.charZoomEnd = event.batch[0].end; | 
 |  |  |         } else { | 
 |  |  |           that.charZoomStart = event.start; | 
 |  |  |           that.charZoomEnd = event.end; | 
 |  |  |         } | 
 |  |  |       }); | 
 |  |  |  | 
 |  |  |       this.table1Option.xAxis = { | 
 |  |  |         type: 'category', | 
 |  |  |         data: [], // x轴数据 | 
 |  |  |         name: '时间', // x轴名称 | 
 |  |  |         // x轴名称样式 | 
 |  |  |         nameTextStyle: { | 
 |  |  |           fontWeight: 300, | 
 |  |  |           fontSize: 15 | 
 |  |  |         } | 
 |  |  |       }; | 
 |  |  |       this.table1Option.yAxis = { | 
 |  |  |         type: 'value', | 
 |  |  |         name: '负载率', // y轴名称 | 
 |  |  |         boundaryGap: [0, '100%'], | 
 |  |  |         max: 100, | 
 |  |  |         axisLabel: { | 
 |  |  |           show: true, | 
 |  |  |           interval: 'auto', | 
 |  |  |           formatter: '{value} %' | 
 |  |  |         }, | 
 |  |  |         // y轴名称样式 | 
 |  |  |         nameTextStyle: { | 
 |  |  |           fontWeight: 300, | 
 |  |  |           fontSize: 15 | 
 |  |  |         } | 
 |  |  |       }; | 
 |  |  |       this.table1Option.dataZoom = [{ | 
 |  |  |         show: true, | 
 |  |  |         start: this.charZoomStart, | 
 |  |  |         end: this.charZoomEnd | 
 |  |  |       }]; | 
 |  |  |       this.myChart1 = echarts.init(document.getElementById('WorkThreadsLoad')); | 
 |  |  |       this.myChart1.setOption(this.table1Option); | 
 |  |  |       this.myChart1.on('dataZoom', function (event) { | 
 |  |  |         if (event.batch) { | 
 |  |  |           that.charZoomStart = event.batch[0].start; | 
 |  |  |           that.charZoomEnd = event.batch[0].end; | 
 |  |  |         } else { | 
 |  |  |           that.charZoomStart = event.start; | 
 |  |  |           that.charZoomEnd = event.end; | 
 |  |  |         } | 
 |  |  |       }); | 
 |  |  |     }, | 
 |  |  |  | 
 |  |  |     getAllSession: function () { | 
 |  |  |       let that = this; | 
 |  |  |       that.allSessionData = []; | 
 |  |  |       this.$axios({ | 
 |  |  |         method: 'get', | 
 |  |  |         url: '/zlm/' + that.mediaServerChoose + '/index/api/getAllSession' | 
 |  |  |       }).then(function (res) { | 
 |  |  |         res.data.data.forEach(item => { | 
 |  |  |           let data = { | 
 |  |  |             peer_ip: item.peer_ip, | 
 |  |  |             local_ip: item.local_ip, | 
 |  |  |             typeid: item.typeid, | 
 |  |  |             id: item.id | 
 |  |  |           }; | 
 |  |  |           that.allSessionData.push(data); | 
 |  |  |         }); | 
 |  |  |       }); | 
 |  |  |     }, | 
 |  |  |     getServerConfig: function () { | 
 |  |  |       let that = this; | 
 |  |  |       this.$axios({ | 
 |  |  |         method: 'get', | 
 |  |  |         url: '/zlm/' + that.mediaServerChoose + '/index/api/getServerConfig' | 
 |  |  |       }).then(function (res) { | 
 |  |  |         let info = res.data.data[0]; | 
 |  |  |         let serverInfo = {} | 
 |  |  |         for (let i = 0; i < Object.keys(info).length; i++) { | 
 |  |  |           let key = Object.keys(info)[i]; | 
 |  |  |           let group = key.substring(0, key.indexOf(".")) | 
 |  |  |           let itemKey = key.substring(key.indexOf(".") + 1) | 
 |  |  |           if (!serverInfo[group]) serverInfo[group] = {} | 
 |  |  |           serverInfo[group][itemKey] = info[key] | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         that.serverConfig = serverInfo; | 
 |  |  |         that.visible = true; | 
 |  |  |       }); | 
 |  |  |     }, | 
 |  |  |     getWVPServerConfig: function () { | 
 |  |  |       let that = this; | 
 |  |  |       this.$axios({ | 
 |  |  |         method: 'get', | 
 |  |  |         url: '/api/server/config' | 
 |  |  |       }).then(function (res) { | 
 |  |  |         console.log(res) | 
 |  |  |         that.wvpServerConfig = res.data.data; | 
 |  |  |         that.wvpVisible = true; | 
 |  |  |       }); | 
 |  |  |       this.$axios({ | 
 |  |  |         method: 'get', | 
 |  |  |         url: '/api/server/version' | 
 |  |  |       }).then(function (res) { | 
 |  |  |         console.log(res) | 
 |  |  |         that.wvpServerVersion = res.data.data; | 
 |  |  |         that.wvpVisible = true; | 
 |  |  |       }); | 
 |  |  |     }, | 
 |  |  |     reStartServer: function () { | 
 |  |  |       let that = this; | 
 |  |  |       this.$confirm('此操作将重启媒体服务器, 是否继续?', '提示', { | 
 |  |  |         confirmButtonText: '确定', | 
 |  |  |         cancelButtonText: '取消', | 
 |  |  |         type: 'warning' | 
 |  |  |       }).then(() => { | 
 |  |  |         let that = this; | 
 |  |  |         this.$axios({ | 
 |  |  |           method: 'get', | 
 |  |  |           url: '/zlm/' + that.mediaServerChoose + '/index/api/restartServer' | 
 |  |  |         }).then(function (res) { | 
 |  |  |           that.getAllSession(); | 
 |  |  |           if (res.data.code == 0) { | 
 |  |  |             that.$message({ | 
 |  |  |               type: 'success', | 
 |  |  |               message: '操作完成' | 
 |  |  |             }); | 
 |  |  |           } | 
 |  |  |         }); | 
 |  |  |       }); | 
 |  |  |     }, | 
 |  |  |     deleteRow: function (index, tabledata) { | 
 |  |  |       let that = this; | 
 |  |  |       this.$confirm('此操作将断开该通信链路, 是否继续?', '提示', { | 
 |  |  |         confirmButtonText: '确定', | 
 |  |  |         cancelButtonText: '取消', | 
 |  |  |         type: 'warning' | 
 |  |  |       }) | 
 |  |  |         .then(() => { | 
 |  |  |           that.deleteSession(tabledata[index].id); | 
 |  |  |         }) | 
 |  |  |         .catch(() => { | 
 |  |  |           console.log('id:' + JSON.stringify(tabledata[index])); | 
 |  |  |           this.$message({ | 
 |  |  |             type: 'info', | 
 |  |  |             message: '已取消删除' | 
 |  |  |           }); | 
 |  |  |         }); | 
 |  |  |       console.log(JSON.stringify(tabledata[index])); | 
 |  |  |     }, | 
 |  |  |     deleteSession: function (id) { | 
 |  |  |       let that = this; | 
 |  |  |       this.$axios({ | 
 |  |  |         method: 'get', | 
 |  |  |         url: '/zlm/' + that.mediaServerChoose + '/index/api/kick_session&id=' + id | 
 |  |  |       }).then(function (res) { | 
 |  |  |         that.getAllSession(); | 
 |  |  |         that.$message({ | 
 |  |  |           type: 'success', | 
 |  |  |           message: '删除成功!' | 
 |  |  |         }); | 
 |  |  |       }); | 
 |  |  |     }, | 
 |  |  |     getNameFromKey: function (key) { | 
 |  |  |       let nameData = { | 
 |  |  |         "waitTrack": "等待编码信息", | 
 |  |  |         "interfaceAuthenticationExcludes": "不进行鉴权的接口", | 
 |  |  |         "playTimeout": "点播超时时间", | 
 |  |  |         "autoApplyPlay": "自动点播", | 
 |  |  |         "recordPushLive": "推流录像", | 
 |  |  |         "redisConfig": "自动配置redis", | 
 |  |  |         "thirdPartyGBIdReg": "stream信息正则", | 
 |  |  |         "savePositionHistory": "保存轨迹信息", | 
 |  |  |         "interfaceAuthentication": "接口鉴权", | 
 |  |  |         "serverId": "服务ID", | 
 |  |  |         "logInDatebase": "日志存储进数据库", | 
 |  |  |         "seniorSdp": "扩展SDP", | 
 |  |  |         "password": "密码", | 
 |  |  |         "port": "端口号", | 
 |  |  |         "keepaliveTimeOut": "心跳超时", | 
 |  |  |         "domain": "国标域", | 
 |  |  |         "ip": "IP地址", | 
 |  |  |         "monitorIp": "监听IP", | 
 |  |  |         "alarm": "存储报警信息", | 
 |  |  |         "ptzSpeed": "云台控制速度", | 
 |  |  |         "id": "国标ID", | 
 |  |  |         "registerTimeInterval": "注册间隔", | 
 |  |  |         "artifactId": "模块名称", | 
 |  |  |         "version": "版本", | 
 |  |  |         "project": "工程", | 
 |  |  |         "git_Revision": "GIT修订版本", | 
 |  |  |         "git_BRANCH": "GIT分支", | 
 |  |  |         "git_URL": "GIT地址", | 
 |  |  |         "build_DATE": "构建时间", | 
 |  |  |         "create_By": "作者", | 
 |  |  |         "git_Revision_SHORT": "GIT修订版本(短)", | 
 |  |  |         "build_Jdk": "构建用JDK", | 
 |  |  |       }; | 
 |  |  |       console.log(key + ": " + nameData[key]) | 
 |  |  |  | 
 |  |  |       if (nameData[key]) { | 
 |  |  |         return nameData[key] | 
 |  |  |       } else { | 
 |  |  |         return key; | 
 |  |  |       } | 
 |  |  |     }, | 
 |  |  |     getMediaKeyNameFromKey: function (key) { | 
 |  |  |       let nameData = { | 
 |  |  |         "waitTrack": "等待编码信息", | 
 |  |  |         "interfaceAuthenticationExcludes": "不进行鉴权的接口", | 
 |  |  |         "playTimeout": "点播超时时间", | 
 |  |  |         "autoApplyPlay": "自动点播", | 
 |  |  |         "recordPushLive": "推流录像", | 
 |  |  |         "redisConfig": "自动配置redis", | 
 |  |  |         "thirdPartyGBIdReg": "stream信息正则", | 
 |  |  |         "savePositionHistory": "保存轨迹信息", | 
 |  |  |         "interfaceAuthentication": "接口鉴权", | 
 |  |  |         "serverId": "服务ID", | 
 |  |  |         "logInDatebase": "日志存储进数据库", | 
 |  |  |         "seniorSdp": "扩展SDP", | 
 |  |  |         "password": "密码", | 
 |  |  |         "port": "端口号", | 
 |  |  |         "keepaliveTimeOut": "心跳超时", | 
 |  |  |         "domain": "国标域", | 
 |  |  |         "ip": "IP地址", | 
 |  |  |         "monitorIp": "监听IP", | 
 |  |  |         "alarm": "存储报警信息", | 
 |  |  |         "ptzSpeed": "云台控制速度", | 
 |  |  |         "id": "国标ID", | 
 |  |  |         "registerTimeInterval": "注册间隔", | 
 |  |  |         "artifactId": "模块名称", | 
 |  |  |         "version": "版本", | 
 |  |  |         "project": "工程", | 
 |  |  |         "git_Revision": "GIT修订版本", | 
 |  |  |         "git_BRANCH": "GIT分支", | 
 |  |  |         "git_URL": "GIT地址", | 
 |  |  |         "build_DATE": "构建时间", | 
 |  |  |         "create_By": "作者", | 
 |  |  |         "git_Revision_SHORT": "GIT修订版本(短)", | 
 |  |  |         "build_Jdk": "构建用JDK", | 
 |  |  |       }; | 
 |  |  |       console.log(key + ": " + nameData[key]) | 
 |  |  |  | 
 |  |  |       if (nameData[key]) { | 
 |  |  |         return nameData[key] | 
 |  |  |       } else { | 
 |  |  |         return key; | 
 |  |  |       } | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  | }; | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <style> | 
 |  |  | #app { | 
 |  |  |     height: 100%; | 
 |  |  |   height: 100%; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .control-table { | 
 |  |  |     background-color: #ffffff; | 
 |  |  |     height: 25rem; | 
 |  |  |   background-color: #ffffff; | 
 |  |  |   height: 25rem; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .table-c { | 
 |  |  |     border-right: 1px solid #dcdcdc; | 
 |  |  |     border-bottom: 1px solid #dcdcdc; | 
 |  |  |   border-right: 1px solid #dcdcdc; | 
 |  |  |   border-bottom: 1px solid #dcdcdc; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .table-c td { | 
 |  |  |     border-left: 1px solid #dcdcdc; | 
 |  |  |     border-top: 1px solid #dcdcdc; | 
 |  |  |     padding: 0.2rem; | 
 |  |  |   border-left: 1px solid #dcdcdc; | 
 |  |  |   border-top: 1px solid #dcdcdc; | 
 |  |  |   padding: 0.2rem; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .el-table { | 
 |  |  |     width: 99.9% !important; | 
 |  |  |   width: 99.9% !important; | 
 |  |  | } | 
 |  |  | </style> |