<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: 1rem; top: 0.3rem;"> 
 | 
                        <el-popover placement="bottom" width="750" height="300" trigger="click"> 
 | 
                            <div style="height: 600px;overflow:auto;"> 
 | 
                                <table class="table-c" cellspacing="0"> 
 | 
                                    <tr v-for="(value, key, index) in serverConfig"> 
 | 
                                        <td style="width: 18rem; text-align: right;">{{ key }}</td> 
 | 
                                        <td style="width: 33rem; text-align:left">{{ value }}</td> 
 | 
                                    </tr> 
 | 
                                </table> 
 | 
                            </div> 
 | 
                            <el-button type="primary" slot="reference" size="mini" @click="getServerConfig()">查看服务器配置</el-button> 
 | 
                        </el-popover> 
 | 
                        <el-button style="margin-left: 1rem;" type="danger" size="mini" @click="reStartServer()">重启服务器</el-button> 
 | 
                    </div> 
 | 
                </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> 
 | 
  
 | 
            </el-main> 
 | 
            <!-- <el-footer style="position: absolute; bottom: 0; width: 100%;">ZLMediaKit-VUE_UI v1</el-footer> --> 
 | 
        </el-container> 
 | 
  
 | 
    </div> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
  
 | 
import uiHeader from './UiHeader.vue' 
 | 
  
 | 
import echarts from 'echarts'; 
 | 
export default { 
 | 
    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, 
 | 
            serverConfig: {} 
 | 
        }; 
 | 
    }, 
 | 
    mounted() { 
 | 
        this.getAllSession(); 
 | 
        this.initTable(); 
 | 
        this.updateData(); 
 | 
        this.chartInterval = setInterval(this.updateData, 3000); 
 | 
    }, 
 | 
    destroyed() { 
 | 
        clearInterval(this.chartInterval); //释放定时任务 
 | 
    }, 
 | 
    methods: { 
 | 
        updateData: function() { 
 | 
            this.getThreadsLoad(); 
 | 
        }, 
 | 
        /** 
 | 
         * 获取线程状态 
 | 
         */ 
 | 
        getThreadsLoad: function() { 
 | 
            let that = this; 
 | 
            this.$axios({ 
 | 
                method: 'get', 
 | 
                url: '/zlm/index/api/getThreadsLoad' 
 | 
            }).then(function(res) { 
 | 
                if (res.data.code == 0) { 
 | 
                    that.tableOption.xAxis.data.push(new Date().toLocaleTimeString()); 
 | 
                    that.table1Option.xAxis.data.push(new Date().toLocaleTimeString()); 
 | 
  
 | 
                    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); 
 | 
                } 
 | 
            }); 
 | 
        }, 
 | 
        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 = []; 
 | 
            console.log("地址:"+'/zlm/index/api/getAllSession'); 
 | 
            this.$axios({ 
 | 
                method: 'get', 
 | 
                url: '/zlm/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/index/api/getServerConfig' 
 | 
            }).then(function(res) { 
 | 
                that.serverConfig = res.data.data[0]; 
 | 
                that.visible = true; 
 | 
            }); 
 | 
        }, 
 | 
        reStartServer: function() { 
 | 
            let that = this; 
 | 
            this.$confirm('此操作将重启媒体服务器, 是否继续?', '提示', { 
 | 
                confirmButtonText: '确定', 
 | 
                cancelButtonText: '取消', 
 | 
                type: 'warning' 
 | 
            }).then(() => { 
 | 
                let that = this; 
 | 
                this.$axios({ 
 | 
                    method: 'get', 
 | 
                    url: '/zlm/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/index/api/kick_session&id=' + id 
 | 
            }).then(function(res) { 
 | 
                that.getAllSession(); 
 | 
                that.$message({ 
 | 
                    type: 'success', 
 | 
                    message: '删除成功!' 
 | 
                }); 
 | 
            }); 
 | 
        } 
 | 
    } 
 | 
}; 
 | 
</script> 
 | 
  
 | 
<style> 
 | 
#app { 
 | 
    height: 100%; 
 | 
} 
 | 
.control-table { 
 | 
    background-color: #ffffff; 
 | 
    height: 25rem; 
 | 
} 
 | 
.table-c { 
 | 
    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; 
 | 
} 
 | 
.el-table { 
 | 
    width: 99.9% !important; 
 | 
} 
 | 
</style> 
 |