logo NodeSeekbeta

【已PR并合入官方v0.16.3】【哪吒优化教程最后一期】三网延迟界面图表美化

  • 有空试试,帮顶!

  • mark

  • 大神牛逼!!!!

  • 表情包-image_emoticon13 表情包-image_emoticon13

  • @xy #0 用lvgj大佬的主题修改后将#app改为#network之后点击别的机器就会403(访问被拒绝) xhj027

  • 牛逼

  • @Stevie0427 #35 发布于2024/2/19 09:10:00,编辑于2024/2/19 09:11:40
    @xy #0 用lvgj大佬的主题修改后将#app改为#network之后点击别的机器就会403(访问被拒绝) xhj027

    不好意思是我的问题 ac01 后面有个地方函数名没改,现在把用LVGJ大佬的修改后(app修改为network)的代码贴上来

    {{define "theme-custom/network"}}
    {{template "theme-custom/header" .}}
    {{if ts .CustomCode}}
    {{.CustomCode|safe}}
    {{end}}
    {{template "theme-custom/menu" .}}
    <div id="network" class="nb-container">
        <div class="ui container">
            <div class="service-status">
                <div class="ui icon button"
                     v-for='server in servers'
                     :id="server.ID"
                     style="margin-top: 3px"
                     @click="redirectNetwork(server.ID)">
                    @#server.Name#@<i :class="server.Host.CountryCode + ' flag'"></i>&nbsp;<i
                        v-if='server.Host.Platform == "darwin"' class="apple icon"></i><i
                        v-else-if='isWindowsPlatform(server.Host.Platform)' class="windows icon"></i><i
                        v-else :class="'fl-' + getFontLogoClass(server.Host.Platform)"></i>
                </div>
                <div ref="chartDom" style="border-radius: 28px; margin-top: 15px;height: 520px;max-width: 1400px;overflow: hidden"></div>
            </div>
        </div>
    </div>
    
    {{template "theme-custom/footer" .}}
    <script>
        const monitorInfo =  JSON.parse('{{.MonitorInfos}}');
        const initData = JSON.parse('{{.Servers}}').servers;
        let MaxTCPPingValue = {{.MaxTCPPingValue}};
        if (MaxTCPPingValue == null) {
            MaxTCPPingValue = 1000;
        }
        new Vue({
            el: '#network',
            delimiters: ['@#', '#@'],
            data: {
                servers: initData,
                option: {
                    tooltip: {
                        trigger: 'axis',
                        position: function (pt) {
                            return [pt[0], '10%'];
                        },
                        formatter: function(params){
                            let result = params[0].axisValueLabel + "<br />";
                            params.forEach(function(item){
                                result += item.marker + item.seriesName + ": " + item.value[1].toFixed(2) + " ms<br />";
                             })
                            return result;
                        },
                        confine: true,
                        transitionDuration: 0
                    },
                    title: {
                        left: 'center',
                        text: "",
                        textStyle: {}
                    },
                    legend: {
                        top: '5%',
                        data: [],
                        textStyle: {
                            fontSize: 14
                        }
                    },
                    backgroundColor: 'rgba(255, 255, 255, 0.8)',
                    toolbox: {
                        feature: {
                            dataZoom: {
                                yAxisIndex: 'none'
                            },
                            restore: {},
                            saveAsImage: {}
                        }
                    },
                    dataZoom: [
                        {
                            start: 0,
                            end: 100
                        }
                    ],
                    xAxis: {
                        type: 'time',
                        boundaryGap: false
                    },
                    yAxis: {
                        type: 'value',
                        boundaryGap: false
                    },
                    series: [],
                },
                chartOnOff: true,
            },
            mounted() {
                this.renderChart();
                 this.parseMonitorInfo(monitorInfo);
            },
            methods: {
                getFontLogoClass(str) {
                    if (["almalinux",
                            "alpine",
                            "aosc",
                            "apple",
                            "archlinux",
                            "archlabs",
                            "artix",
                            "budgie",
                            "centos",
                            "coreos",
                            "debian",
                            "deepin",
                            "devuan",
                            "docker",
                            "elementary",
                            "fedora",
                            "ferris",
                            "flathub",
                            "freebsd",
                            "gentoo",
                            "gnu-guix",
                            "illumos",
                            "kali-linux",
                            "linuxmint",
                            "mageia",
                            "mandriva",
                            "manjaro",
                            "nixos",
                            "openbsd",
                            "opensuse",
                            "pop-os",
                            "raspberry-pi",
                            "redhat",
                            "rocky-linux",
                            "sabayon",
                            "slackware",
                            "snappy",
                            "solus",
                            "tux",
                            "ubuntu",
                            "void",
                            "zorin"].indexOf(str)
                        > -1) {
                        return str;
                    }
                    if (['openwrt', 'linux', "immortalwrt"].indexOf(str) > -1) {
                        return 'tux';
                    }
                    if (str == 'amazon') {
                        return 'redhat';
                    }
                    if (str == 'arch') {
                        return 'archlinux';
                    }
                    return '';
                },
                redirectNetwork(id) {
                        this.getMonitorHistory(id)
                        .then(function(monitorInfo) {
                              var vm = network.__vue__;
                              vm.parseMonitorInfo(monitorInfo);
                        })
                        .catch(function(error){
                            window.location.href = "/404";
                        })
                    },
                getMonitorHistory(id) {
                      return $.ajax({
                        url: "/api/v1/monitor/"+id,
                        method: "GET"
                      });
                },
                parseMonitorInfo(monitorInfo) {
                    let tSeries = [];
                    let tLegendData = [];
                    for (let i = 0; i < monitorInfo.result.length; i++) {
                        let loss = 0;
                        let data = [];
                        for (let j = 0; j < monitorInfo.result[i].created_at.length; j++) {
                            avgDelay = Math.round(monitorInfo.result[i].avg_delay[j]);
                            if (avgDelay > 0.9 * MaxTCPPingValue) {
                                loss += 1
                            }
                            if (avgDelay > 0) {
                                data.push([monitorInfo.result[i].created_at[j], avgDelay]);
                            }
                        }
                        lossRate = ((loss / monitorInfo.result[i].created_at.length) * 100).toFixed(1);
                        legendName = monitorInfo.result[i].monitor_name +" "+ lossRate + "%";
                        tLegendData.push(legendName);
                        tSeries.push({
                                name: legendName,
                                type: 'line',
                                smooth: true,
                                symbol: 'none',
                                data: data,
                                markPoint: {
                                    data: [
                                        { type: 'max', symbol: 'pin', name: 'Max', itemStyle: { color: '#f00' } },
                                        { type: 'min', symbol: 'pin', name: 'Min', itemStyle: { color: '#0f0' } }
                                    ]
                                }
                        });
                    }
                    this.option.title.text = monitorInfo.result[0].server_name;
                    this.option.series = tSeries;
                    this.option.legend.data = tLegendData;
                    this.myChart.clear();
                    this.myChart.setOption(this.option);
                },
                isWindowsPlatform(str) {
                    return str.includes('Windows')
                },
                renderChart() {
                  this.myChart = echarts.init(this.$refs.chartDom);
                  this.myChart.setOption(this.option);
                },
            },
            beforeDestroy() {
                this.myChart.dispose();
                this.myChart = null;
            },
        });
    </script>
    {{end}}
    
    
  • 教程适用于官方升级版本,先保证官方版本能正常显示后,在使用本教程进行美化 xhj008 @搁浅 #29 @frederick #26 @Stevie0427 #37

  • 好耶,mark

  • 有些主题没有网络监控这一栏,这个怎么解决呢

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有72280位seeker

🎉欢迎新用户🎉