import { drawAxis, drawAxis2D, draw2DText } from './draw.js';
import { loadOption, GIL1, GIL2, GIL3, GIL4, CPD, CPD1 } from './echartsOptions.js';
let renderer, scene, camera, controls, renderer2D, scene2D, camera2D, controls2D;
//let socket = null;
let axis = new THREE.Group();
let axis2D = new THREE.Group();
let initAxis = 80;//正值最大值
let maxNum = [];//上一次的最大值
let minNum = 0;//负值最大值
let planes = [];//截断面
let i18n;
let viewType = 1;//窗口显示状态1：初始状态，PRPSorPRPD只显示一个且可以切换， 2：半屏状态：3：其他窗口半屏状态
const paramsStr = window.location.search
const params = new URLSearchParams(paramsStr)
let viewIndex = params.get('viewIndex') || 0;//视窗序号
let productId = params.get('productId') || 2;//产品id
let deviceId = params.get('deviceId') || '50100001_1';//设备id
let win;//窗口序列
let isReconnect = false;
let socket;
let token = 'a04cc4a938c376496c36264973e471a3'
let url = `ws://192.168.1.23:8844/messaging/${token}`
//const stats = new Stats();
//document.body.appendChild(stats.dom);
let box3D = document.getElementById("box3D2");
let box2D = document.getElementById("box2D2");
let box2D5 = document.getElementById('box2D5');
let box2D6 = document.getElementById('box2D6');
let box3Dchart = '';
let box2Dchart = '';
let box2D5chart = '';
let box2D6chart = '';

let maxRange = 100;

let clearHistory = 30;
// //打点统计次数颜色
let realTime = {
    channelFiltering: 0,//频段过滤 //必填
    switch: 1,//开关：1、启动、0、关闭 //必填
    mapCategory: 3,//图谱类型：1、PRPS、2、PRPD、3、PRPS/PRPD //必填
    monitorType: 1,// GIS 1  GIL故障定位  2  GIL局放  3  电缆  4 //必填
    cumulativeDot: 1,//累计打点时长 默认1秒，-1则无限累计 //必填
    correlationDenoising: 0,//关联降噪1、启动、0、关闭 //不必填
    adaptiveNoise: 0,//自适应降噪1、启动、0、关闭 //不必填
    groundNoise: 0,//手动降噪 //不必填
    migrationPhase: 0,//偏移相位//不必填
    waveSwitch: 0,//录播开关：1、开始、0、停止 //不必填
    atlasType: 1,
}
//电缆局放，1 PRPS/PRPD 2 折现图
let atlasType = 1;
// monitorType  GIS 1  GIL故障定位  2  GIL局放  3  电缆  4
// atlasType  1  PRPS/PRPD  2  飞行模式/脉冲数据   3  连续模式
const lut = new THREE.Lut();
lut.addColorMap('axis', [[0.0, 0x00ee00], [0.25, 0xeeee00], [0.75, 0xee0000], [1.0, 0x4e0211]],);
lut.setColorMap('axis', 500)
let meshList = new THREE.Group();//图例柱子
const dummy = new THREE.Object3D();

meshList.name = 'chartsMesh';
let pointsList = new THREE.Group();//图例散点
pointsList.name = 'chartsPoint';
let axisTextGroup = new THREE.Group();
axisTextGroup.name = 'axisText';
let axisTextGroup2D = new THREE.Group();
axisTextGroup2D.name = 'axisText';
// 周期，相位 柱子数
let period = 50, phase = 128, count = period * phase;
const geometry = new THREE.BoxGeometry(0.6, 1, 2.5);
geometry.computeVertexNormals()
//非光泽表面的材质，没有镜面高光
//const initInstancedMesh = new THREE.InstancedMesh(geometry, new THREE.MeshLambertMaterial(), count);
//最佳性能材质
const initInstancedMesh = new THREE.InstancedMesh(geometry, new THREE.MeshBasicMaterial(), count);
initInstancedMesh.name = 'initInstancedMesh';
/* prpd初始Instanced点 */
let initInstancedPoints,//prpd实例
    pointPositions, pointColors,//PRPS位置及颜色的集合
    pointsGeometry = new THREE.BufferGeometry(),
    pointCount;
//pointsGeometry = new THREE.BoxGeometry(0, 0.8, (360 / initAxis) * 0.8,),// prpd位置属性数组

//pointsGeometry.computeVertexNormals()
let counter = 1;

//菜单展示隐藏
$('#show').click(function () {
    $('.LinkANC').toggle();
    $('#associated-noise-box').toggle()
    $('.eventList').toggle();
    $('#record-btn-box').toggle();
    $('.refreshtitle').toggle();
    $('#total').toggle();
    $('.noisy-slide-box').toggle();
    $('#addPointNumDiv').toggle();
    $(this).toggleClass('ready')
})
//prps or prpd 切换
$('#prps').click(function () {
    updateParams('mapCategory', $(this), 1)
    $('#box3D1').toggle();
    $('#box2D1').toggle();
    $('#prpd').toggleClass('ready')
})

$('#prpd').click(function () {
    updateParams('mapCategory', $(this), 2)
    $('#box2D1').toggle();
    $('#box3D1').toggle();
    $('#prps').toggleClass('ready')
})
//暂停or开启
$('#start').click(function () {
    updateParams('switch', $(this))
})
//图谱放大缩小
$('.scale').click(function () {
    if ($(this).hasClass('big')) {
        maxRange = maxRange + 25;
        $('.small').removeClass('ready')
        if (maxRange == 100) {
            $(this).toggleClass('ready')
        }
    } else {
        maxRange = maxRange - 25;
        $('.big').removeClass('ready')
        if (maxRange == 25) {
            $(this).toggleClass('ready')
        }
    }
    drawAxis((maxRange / 100) * initAxis, 0);
    clearPoints()
    let constant = (360 / (maxRange)) * maxRange + 1
    planes[0].constant = constant
})
//自适应降噪
$('#adaptive-noise').click(function () {
    if (!realTime.adaptiveNoise) {//groundNoise
        $(".noisy-slide").slider({ value: -80 });
        $(".noisy-slide span").attr('data-content', '底噪' + ' ' + -80);
        $(".noisy-slide").slider({ disabled: true });
        realTime.groundNoise = 0;
    } else {
        $(".noisy-slide").slider({ disabled: false });
    }
    updateParams('adaptiveNoise', $(this))
})
//关联传感器降噪
$('#associated-noise').click(function () {
    updateParams('correlationDenoising', $(this))
})
// 录播按钮点击
$('.record-btn-box').click(function () {
    let $this = $(this).children();
    if (socket) {
        //初始状态：没暂停clss且录播状态为停止的时候添加该class
        if (!$this.hasClass('pause') && !realTime.waveSwitch) {
            $this.addClass('pause')
        }
        $this.toggleClass('live')
        $this.toggleClass('pause')
    }
    updateParams('waveSwitch', null)
})
$('.refresh-btn').click(function () {
    $('#total').slideToggle()
})
//累计打点时间输入
$("#total-time").on("input", function () {  // 使用 "input" 事件可以实现实时过滤
    var currentValue = $(this).val();
    var filteredValue = currentValue.replace(/[^0-9]/g, '');  // 使用正则表达式过滤非数字字符
    if (currentValue !== filteredValue) {
        $(this).val(filteredValue);  // 如果有变化，则更新输入框的值
    }
});
$('#total-time').blur(function () {
    const value = $(this).val() || 1
    updateParams('cumulativeDot', null, value)
    if (value == 1) {
        if (!$('.refresh-btn').hasClass('ready')) {
            $('.refresh-btn').addClass('ready')
        }
    } else {
        $('.refresh-btn').removeClass('ready')
    }
})
//频段切换
$('#channelFiltering').on('change', function () {
    let val = $(this).val();
    updateParams('channelFiltering', null, val)
})

//更新socket参数
function updateParams(prams, that, value) {
    if (socket) {
        realTime[prams] = value || (realTime[prams] ? 0 : 1);
        that && that.toggleClass('ready')
        sendMessage()
    }
}
loadOption();
init();
init2D();
render();
render2D();
initTrendChart()
function initTrendChart() {
    box2D6chart = echarts.init(box2D6)
    setTimeout(() => {
        box2D6chart.setOption(CPD);
    })
}
const generateArray = () => {
    const newArray = [];
    const step = 360 / phase;
    for (let i = 1; i <= phase; i++) {
        newArray.push([counter, (360 - parseInt(i * step)), getRandomInt(10, 65)]);
    }
    counter = (counter % period) + 1;
    return newArray;
}
const generateArray1 = () => {
    const newArray = [];
    for (let i = 0; i < 4000; i++) {
        newArray.push([getRandomInt(0, 360), getRandomInt(0, 80), getRandomInt(1, 15)])
    }
    return newArray
}
function initPointsFun() {
    if (initInstancedPoints) {
        pointsList.remove(initInstancedPoints);
        initInstancedPoints.material.dispose()//map(i => { i.dispose() })
        initInstancedPoints.geometry.dispose()//map(i => { i.disponse() })
        initInstancedPoints = null;
    }
    let maxYPointsMap = [800, 10000, 10000, 7000];
    let maxYPoints = maxYPointsMap[realTime.monitorType - 1];
    pointCount = phase * maxYPoints;
    pointPositions = new Float32Array(pointCount * 3) // x, y, z
    pointColors = new Float32Array(pointCount * 3) // r, g, b
    // 初始化点的位置和颜色
    for (let i = 0; i < pointCount; i++) {
        const x = i
        const y = 9999
        const z = 10

        pointPositions[i * 3] = x
        pointPositions[i * 3 + 1] = y
        pointPositions[i * 3 + 2] = z

        pointColors[i * 3] = Math.random()
        pointColors[i * 3 + 1] = Math.random()
        pointColors[i * 3 + 2] = Math.random()
    }
    pointsGeometry.setAttribute('position', new THREE.BufferAttribute(pointPositions, 3))
    pointsGeometry.setAttribute('color', new THREE.BufferAttribute(pointColors, 3))
    // 创建 ShaderMateria
    const material = new THREE.PointsMaterial({ size: 2, vertexColors: true })
    // 创建 Points 对象
    initInstancedPoints = new THREE.Points(pointsGeometry, material)
    initInstancedPoints.name = 'initInstancedPoints';
    // const object1 = meshList.getObjectByName('initInstancedMesh');
    // if (!object1) {
    pointsList.add(initInstancedPoints);
    //}
}
initCharts()
function initCharts(type) {
    if (type == 'open') {
        meshList.visible = true;
        return;
    } else if (type == 'close') {
        meshList.visible = false;
        let k = 1, s = 1;
        for (let j = 0; j < period; j++) {
            for (let i = 0; i < phase; i++) {
                initInstancedMesh.getMatrixAt(k, dummy.matrix);
                dummy.position.setFromMatrixPosition(dummy.matrix);
                dummy.scale.setFromMatrixScale(dummy.matrix);
                dummy.position.y = 99999;
                dummy.scale.y = Math.abs(1);
                const color = lut.getColor(Math.abs(0) / initAxis);
                initInstancedMesh.setColorAt(k, color);
                dummy.updateMatrix();
                initInstancedMesh.setMatrixAt(k, dummy.matrix);
                k++;
            }
        }
        initInstancedMesh.instanceMatrix.needsUpdate = true;
        initInstancedMesh.instanceColor.needsUpdate = true;
        for (let i = 0; i < pointCount; i++) {
            pointPositions[i * 3 + 1] = 9999999 // Y//移到y轴高出，隐藏多余的点
        }
        // 通知 Three.js 更新 BufferGeometry
        pointsGeometry.attributes.position.needsUpdate = true
        return;
    }
    let k = 0, initList = [];
    for (let i = 0; i < period; i++) {
        initList.push(generateArray());
    }
    for (let j = 0; j < initList.length; j++) {
        for (let i = 0; i < initList[j].length; i++) {
            const [a, b, c] = initList[j][i];
            dummy.position.set(j, 99999, b);
            dummy.scale.y = 0;
            dummy.updateMatrix();
            initInstancedMesh.setMatrixAt(k, dummy.matrix);

            const color = lut.getColor(Math.abs(c) / initAxis);
            initInstancedMesh.setColorAt(k, color);
            k++;
        }
    }
    initInstancedMesh.instanceMatrix.needsUpdate = true;
    initInstancedMesh.instanceColor.needsUpdate = true;
    const object = meshList.getObjectByName('initInstancedMesh');
    if (!object) {
        meshList.add(initInstancedMesh);
    }
    initPointsFun()
}
function drawPRPD(list, clear) {
    if (clear) {
        if (initInstancedPoints) {
            for (let i = 0; i < pointCount; i++) {
                pointPositions[i * 3 + 1] = 9999999 // Y//移到y轴高出，隐藏多余的点
            }
            // 通知 Three.js 更新 BufferGeometry
            pointsGeometry.attributes.position.needsUpdate = true
        }
    }
    const colors = [
        {
            color: new THREE.Color(0x50A3BA),
            num: 5,
        },
        {
            color: new THREE.Color(0x9DB578),
            num: 7,
        },
        {
            color: new THREE.Color(0xEAC736),
            num: 10,
        },
        {
            color: new THREE.Color(0xE28B4A),
            num: 14,
        },
    ];
    const range = realTime.monitorType == 1 ? maxRange : false;
    const max = range ? initAxis * (range / 100) : initAxis;
    list.forEach((item, index) => {
        // 更新颜色
        const color = item[2] <= 3 ? new THREE.Color(0x0082df) : (item[2] >= 15 ? new THREE.Color(0xD94E5D) : colors.find(i => item[2] <= i.num).color);
        pointPositions[index * 3] = 10 // X
        pointPositions[index * 3 + 1] = item[1] > max ? max : item[1] // Y
        pointPositions[index * 3 + 2] = 360 - item[0] // Z
        pointColors[index * 3] = color.r //R
        pointColors[index * 3 + 1] = color.g //G
        pointColors[index * 3 + 2] = color.b //B
    })
    for (let i = list.length - 1; i < pointCount; i++) {
        pointPositions[i * 3 + 1] = 9999999 // Y//移到y轴高出，隐藏多余的点
    }
    // 通知 Three.js 更新 BufferGeometry
    pointsGeometry.attributes.position.needsUpdate = true
    pointsGeometry.attributes.color.needsUpdate = true
}
function drawPRPS(data) {
    let k = 0;
    let list = JSON.parse(JSON.stringify(data))
    list = list.map((i) => ({
        h: i[2],
        color: lut.getColor(Math.abs((i[2]) / initAxis).toFixed(2)),
    }))
    for (let j = 0; j < period; j++) {
        for (let i = 0; i < list.length; i++) {
            initInstancedMesh.getMatrixAt(k, dummy.matrix);
            dummy.position.setFromMatrixPosition(dummy.matrix);
            dummy.scale.setFromMatrixScale(dummy.matrix);
            if (dummy.position.x > 0) {
                dummy.position.x -= 1;
            } else {
                let { h, color } = list[i];
                dummy.position.x = 49;
                dummy.position.y = h == 0 ? 99999 : h / 2;
                dummy.scale.y = Math.abs(h);
                initInstancedMesh.setColorAt(k, color);
            }
            dummy.updateMatrix();
            initInstancedMesh.setMatrixAt(k, dummy.matrix);
            k++;
        }
    }
    initInstancedMesh.instanceMatrix.needsUpdate = true;
    initInstancedMesh.instanceColor.needsUpdate = true;
}
// 在页面加载完成后执行WebSocket连接的代码
document.addEventListener('DOMContentLoaded', function () {
    initSocket()
    //    aaa()
    //bbb()
});
function sendMessage() {
    let ws = new WebSocket(url); // 替换成你的WebSocket服务器地址
    // 当WebSocket连接打开时，执行此函数
    ws.onopen = function (event) {
        ws.send(JSON.stringify({
            "type": "sub",
            "topic": `/device-message-sender/${productId}/${deviceId}`,
            "parameter": {
                "messageType": "INVOKE_FUNCTION",
                "inputs": realTime,
                "functionId": "requestPrpsData",
                "headers": {
                    "async": true
                }
            },
            "id": "request-id"
        }))
    }
}
//滑动条初始化
function LoadSlide() {
    // 相位偏移滑动条
    $(".cdf-slide").slider({
        orientation: "horizontal",
        animate: "slow",
        min: -180,
        max: 180,
        step: 1,
        value: 0,
        create: function (event, ui) {
            $(this).children('.ui-slider-handle').attr('data-content', '相位偏移' + ` 0 ` + '度')
        },
        slide: function (event, ui) {
            $(this).children('.ui-slider-handle').attr('data-content', '相位偏移' + ` ${ui.value} ` + '度');
            $(this).attr('data-price', ui.value);

        },
        change: function (event, ui) {
            updateParams('migrationPhase', null, ui.value)
        }
    });

    // 底噪滑动条
    $(".noisy-slide.GIS").slider({
        orientation: "vertical",
        animate: "slow",
        min: -80,
        max: 0,
        step: 1,
        value: -80,
        create: function (event, ui) {
            $(this).children('.ui-slider-handle').attr('data-content', '底噪' + ` -80`)
        },
        slide(event, ui) {
            $(this).children('.ui-slider-handle').attr('data-content', '底噪' + ` ${ui.value}`);
        },
        change: function (event, ui) {
            updateParams('groundNoise', null, 80 + ui.value)
        }
    });

    $(".noisy-slide.GIL").slider({
        orientation: "vertical",
        animate: "slow",
        min: 0,
        max: 80,
        step: 1,
        value: 0,
        create: function (event, ui) {
            $(this).children('.ui-slider-handle').attr('data-content', '底噪' + ` 0`)
        },
        slide(event, ui) {
            $(this).children('.ui-slider-handle').attr('data-content', '底噪' + ` ${ui.value}`);
        },
        change: function (event, ui) {
            $(this).attr('data-price', ui.value);
            if ($(this).parent().parent().parent().hasClass('realdata')) {
                realTime.groundNoise = ui.value;
                if (socket != '' && socket != null && !$('#adaptive-noise').hasClass("ready")) {
                    socket.emit('realTimeSet', realTime);
                }
            }

        }
    });

}
//更新趋势图谱
function updataHistory(timestamp, realData) {
    let time = timestampToTime(timestamp),
        data = [[time, (realData.max).toFixed(2)]],
        data1 = [[time, realData.count]],
        option = box2D6chart.getOption();
    if (option.xAxis[0].data.length > clearHistory) {
        box2D6chart.setOption({
            xAxis: [{
                type: 'category',
                data: [time],
            }],
            series: [
                { seriesIndex: 0, data },
                { seriesIndex: 1, data: data1 }
            ]
        })
    } else {
        box2D6chart.setOption({
            xAxis: [{
                type: 'category',
                data: [...box2D6chart.getOption().xAxis[0].data, time],
            }]
        })
        box2D6chart.appendData({ seriesIndex: 0, data })
        box2D6chart.appendData({ seriesIndex: 1, data: data1 })
        box2D6chart.resize()
    }
}
function initSocket() {
    socket = new WebSocket(url); // 替换成你的WebSocket服务器地址

    // 当WebSocket连接打开时，执行此函数
    socket.onopen = function (event) {
        console.log('WebSocket连接已打开');
        socket.send(JSON.stringify({
            "type": "sub",
            "topic": `/device/${productId}/${deviceId}/message/property/report`,
            "parameter": {
                "messageType": "READ_PROPERTY",
            },
            "id": "request-id"
        }));
        $('#start').addClass('ready')
        $('.record-btn').addClass('ready')
        $('#total-time').prop('disabled', false)

        sendMessage()
        LoadSlide()
    };

    // 当接收到服务器发送的消息时，执行此函数
    socket.onmessage = function (event) {

        const data = JSON.parse(event.data);
        const { payload: { properties: { realData }, timestamp } } = data

        if (realData?.lists2d?.length) {
            drawEcharts1(null, realData.lists2d);
            $('#maxValue').html(`${(realData.max).toFixed(2)}`);
            $('#averageValue').html(`${(realData.avg).toFixed(2)}`);
            $('#impulseQuantity').html(`${realData.count}`);
            updataHistory(timestamp, realData)
        }
        if (realData?.lists3d?.length) {
            drawEcharts1(realData.lists3d);
        }

    };

    // 当WebSocket连接关闭时，执行此函数
    socket.onclose = function (event) {
        console.log('WebSocket连接已关闭');
    };

    // 当发生错误时，执行此函数
    socket.onerror = function (error) {
        console.error('WebSocket错误:', error);
    };
}
// 时间戳：1637244864707
/* 时间戳转换为时间 */
function timestampToTime(timestamp) {
    timestamp = timestamp ? timestamp : null;
    let date = new Date(timestamp);//时间戳为10位需*1000，时间戳为13位的话不需乘1000
    let Y = date.getFullYear() + '-';
    let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
    let D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';
    let h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
    let m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
    let s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
    return Y + M + D + h + m + s;
}

function bbb() {
    setTimeout(() => {
        drawPRPD(generateArray1())
        const now = new Date();
        const hours = now.getHours();
        const minutes = now.getMinutes();
        const seconds = now.getSeconds();
        //console.log(box2D6chart.series)
        const data1 = [[`${hours}:${minutes}:${seconds}`, getRandomInt(-20, -40)], ...box2D6chart.getOption().series[0].data]
        //const data2 = [[`${hours}:${minutes}:${seconds}`, getRandomInt(2000, 4400)],...box2D7chart.getOption().series[0].data]
        box2D6chart.setOption({ series: [{ type: 'line', data: data1 }] });
        bbb()
    }, 1000)
}
function aaa() {
    setTimeout(() => {
        drawPRPS(generateArray());
        aaa();
    }, 20);
}
//aaa();
// 生成指定范围内的随机整数
function getRandomInt(min, max) {
    const randomNumber = Math.random() * (max - min) + min;
    const roundedNumber = randomNumber.toFixed(0);
    return parseFloat(roundedNumber);
}

//电缆局放折线图更新提交
$('#form-submit').click(function () {
    if ($('#realdata').attr('data-id')) {
        socket.emit('getFrequencyData', { wl: $('#form-wl').val(), fltr: $('#form-fltr').val() });
    }
})
//dom加载完成时
$(window).ready(function () {
    $(window).scrollTop(0, 0);
    let maxHeight1 = 500, maxHeight = 273
    let h = $(window).height();
    let w = $(window).width();
    $(".loading-box").css('height', h * 0.75)
    $(".loading-box-mini").css('height', h * 0.25)
    $('.noisy-slide').css('height', h * 0.4)

    $('.toggle--checkbox').attr('checked', 'false');
    $('.record-btn').removeClass('ready');
    $('#total-time').prop('disabled', true)


    let isLoad = { command: 'load', win: win }
    // title 国际化
    window.parent.postMessage(isLoad, '*');
})
// 页面放大缩小时
$(window).resize(function () {
    window.requestAnimationFrame(function () {
        onWindowResize()
    })
})
$(window).resize()
//电缆局放时Three图谱和echarts图谱相互切换
function cpdSwitchChart(type, callBack) {
    if (type == 1) {
        $('#box3D1').show();
        $('#box2D5').hide();
        $('#box2D1').show();
        $('#form-line').fadeOut();
        $('.cdf-slide-box').fadeIn();
    } else {
        $('#form-line').fadeIn();
        $('.cdf-slide-box').fadeOut();
        $('#box3D1').hide();
        $('#box2D5').show();
        $('#box2D1').hide();
        if (echarts.getInstanceByDom(box2D5) == null) {
            box2D5chart = echarts.init(box2D5)
        }

        setTimeout(() => {
            box2D5chart.setOption(CPD);
        })
    }
    if (callBack) { callBack() }
    //onWindowResize()
}
//GIL模式时THREE图谱和echarts图谱相互切换
function gilSwitchChart(type, callBack) {
    if (type == 1) {
        $('#box3D1').show();
        $('#box3D2').hide();
        $('#box2D1').show();
        $('#box2D2').hide();
    } else {
        $('#box3D1').hide();
        $('#box3D2').show();
        $('#box2D1').hide();
        $('#box2D2').show();
        if (echarts.getInstanceByDom(box3D) == null) {
            box3Dchart = echarts.init(box3D)
        }
        if (echarts.getInstanceByDom(box2D) == null) {
            box2Dchart = echarts.init(box2D)
        }

        box3Dchart.setOption(type == 2 ? GIL1 : GIL3, true);
        box2Dchart.setOption(type == 2 ? GIL2 : GIL4, true);

    }
    if (callBack) { callBack() }
    //onWindowResize()

}
//清空Three中的Point点位
function clearPoints(type) {
    // drawPRPS([], true);
    drawPRPD([], true);
}
//电缆局放图谱更改
$('#model-tab-dl button').click(function () {
    let $this = $(this);
    atlasType = $this.val();
    $this.addClass('active').siblings().removeClass('active');
    cpdSwitchChart(atlasType)
    if (atlasType == 1) {
        if ($('#realdata').attr('data-id')) {
            if (socket != '' && socket != null) {
                socket.emit('restartRealTime');
            }
        }
    } else if (atlasType == 2) {

        if ($('#realdata').attr('data-id')) {
            if (socket != '' && socket != null) {
                //  socket.disconnect();
                socket.emit('getFrequencyData', { wl: $('#form-wl').val(), fltr: $('#form-fltr').val() });
            }
        }
    }
    $(window).resize()
})
// GIL 图谱更改
$('#model-tab button').click(function () {
    let $this = $(this);
    realTime.atlasType = $this.val();
    $this.addClass('active').siblings().removeClass('active');
    gilSwitchChart($this.val());
    if ($this.val() == 1) {
        $('.cdf-slide-box').fadeIn()
        $('.noisy-slide-box').fadeIn()
        rms = [];
        peak = [];
        p50 = [];
        p100 = [];
    } else if ($this.val() == 2) {
        box2Dchart.setOption(GIL2, true);
        $('.cdf-slide-box').fadeIn()
        $('.noisy-slide-box').fadeIn()
        rms = [];
        peak = [];
        p50 = [];
        p100 = [];
    } else {
        $('.cdf-slide-box').fadeOut()
        $('.noisy-slide-box').fadeOut()
        box2Dchart.setOption(GIL4, true);
    }
    socket.emit('message', realTime);
    $(window).resize()
})
//量程切换
// 实时数据量程修改
$('#original').on('change', function () {
    let val = ($(this).val() / 100) * initAxis;
    console.log("🚀  val:", val)

    if (maxRange != val) {
        clearPoints();
        let $this = $(this);
        const max = ($this.val() / 100) * initAxis
        $this.parent().addClass('is-checked').parent().addClass('is-checked').siblings().removeClass('is-checked').children().removeClass('is-checked')
        $("[name='range']:checked").attr("checked", false);
        $("[name='range'][value='" + $this.val() + "']").attr("checked", true);
        //initAxis = val;
        drawAxis(val, 0);
        clearPoints()
        maxRange = $this.val();
        let constant = (360 / (max)) * max + 1
        planes[0].constant = constant
    }
})
// 打开事件列表
$('.event-btn').on('click', function () {
    if ($(this).hasClass('ready')) {
        var isFull = !!(document.webkitIsFullScreen || document.mozFullScreen ||
            document.msFullscreenElement || document.fullscreenElement
        );

        if (isFull) {
            var dblChoseAlert = simpleAlert({
                "content": i18n.message.exitFullScreen + ` ！`,
                "buttons": {
                    "确定": function () {
                        dblChoseAlert.close();
                    }
                }
            })
        } else {
            let deviceNum = $('#realdata').attr('data-deviceNum'),
                channelNum = $('#realdata').attr('data-chanel'),
                name = $('#realdata').attr('data-name');

            let data = { command: 'eventList', win: win, deviceNum: deviceNum, channelNum: channelNum, name: name };
            window.parent.postMessage(data, '*');
        }
    }
})
//全屏
$(".charts").on("dblclick", function () {
    if (viewIndex == 88) {
        window.parent.postMessage({ command: 'closeFullScreen', index: viewIndex }, '*');
    } else {
        window.parent.postMessage({ command: 'dblClick', index: viewIndex }, '*');
    }
})
$("#prps-img").on('click', function () {
    // 获取渲染器renderer的canvas，然后调用todataurl方法获取数据URI
    let dataUrl = renderer.domElement.toDataURL();
    console.log("🚀  renderer.domElement:", renderer.domElement)
    // 将DataURL转换为Blob对象
    let blob = dataURLtoBlob(dataUrl);

    // 创建下载链接
    let link = document.createElement('a');
    link.setAttribute('download', 'PRPS.png');
    let url = URL.createObjectURL(blob);
    console.log("🚀  url:", url)
    link.href = url//.replace('http', 'https');

    // 将下载链接添加到HTML页面
    document.body.appendChild(link);

    // 触发下载链接的单击事件
    link.click();
})
function dataURLtoBlob(dataUrl) {
    const arr = dataUrl.split(',');
    const mime = arr[0].match(/:(.*?);/)[1];
    const bstr = atob(arr[1]);
    let n = bstr.length;
    const u8arr = new Uint8Array(n);

    while (n--) {
        u8arr[n] = bstr.charCodeAt(n);
    }

    return new Blob([u8arr], { type: mime });
}
$("#prpd-img").on('click', function () {
    // 获取渲染器renderer的canvas，然后调用todataurl方法获取数据URI

    let dataUrl = renderer2D.domElement.toDataURL('image/png');
    // 将DataURL转换为Blob对象
    let blob = dataURLtoBlob(dataUrl);

    // 创建下载链接
    let link = document.createElement('a');
    link.setAttribute('download', 'PRPD.png');
    link.href = URL.createObjectURL(blob);

    // 将下载链接添加到HTML页面
    document.body.appendChild(link);

    // 触发下载链接的单击事件
    link.click();
})
//主页面传递事件
window.addEventListener('message', function (e) {
    let data = e.data;
    window.parent.postMessage(data, '*');
    if (data.command == 'i18n') {
        viewIndex = viewIndex ? viewIndex : data.index;
        $('.phaseOffset').html('相位偏移')
        $('.LinkNC').attr('title', '关联噪声传感器降噪')
        $('.LinkANC').attr('title', '自适应降噪')
        $('#record-btn-box').attr('title', '录波')
        $('#toggle-box').attr('title', '开启/暂停')
        $('.noise').html('底噪')
        // $('.addPointNum').html(CumulativeRBI)
        $('.eventList').attr('title', '事件列表')
        $('.refreshtitle').attr('title', '刷新')

        $('.channelNum .name').html('监测点' + "：")
        $('.maxValue .name').html('脉冲最大值' + "：")
        // $('.pc-tip .name').html(discharge + '：')
        // $('.avgValue .name').html(data.i18n.content.realTime.gil.averageValue + "：")
        $('.pulseNumber .name').html('脉冲数量' + "：")
        //onWindowResize()
    } else if (data.command == 'setView') {
        viewType = data.viewType;
        onWindowResize()
    } else if (data.command == 'open') {

        $('#box3D1').show();
        $('#box3D2').hide();
        let { id, name, equipmentId, channelNum, monitorType, ipAddress } = data;
        $("#range100").click();
        $('#model-tab-dl-1').click();
        $('#realdata').attr('data-id', id)
        $('#realdata').attr('data-name', name)
        $('#realdata').attr('data-deviceNum', equipmentId)
        $('#realdata').attr('data-chanel', channelNum)
        atlasType = 1;
        initChangeType(monitorType)
        //不一致  切换图谱
        if (realTime.monitorType != monitorType) {
            realTime.monitorType = monitorType;
            changeEcharts(monitorType);
            initPointsFun();
        }
        initCharts('open');
        if ($('#realdata').children('.echarts-btn').first().children('.toggle--knob').children('.toggle--checkbox').is(':checked')) {
            // console.log("kai----"+data.win)
            // console.log(data)
            // console.log($('#toggle--knob1'))
            $('#toggle--knob1').click()
        }
        win = data.win;
        initRealTime();
    } else if (data.command == 'close') {
        if ($('#realdata').attr('data-id') == data.id) {
            $('#realdata').attr('data-id', '')
            $('#realdata').attr('data-name', '')
            $('#realdata').attr('data-deviceNum', '')
            $('#realdata').attr('data-chanel', '')
            $(".noisy-slide").slider({ disabled: false });
            if (!$('#realdata').children('.echarts-btn').first().children('.toggle--knob').children('.toggle--checkbox').is(':checked')) {
                $('#toggle--knob1').click()
            }
            $('#channelNum').html('&nbsp;&nbsp;');
            $('#maxValue').html("0");
            $('#averageValue').html("0");
            $('#impulseQuantity').html("0");
            // $('#pc-number').html('0');
            $('#clear').click();
            $('#model-tab-dl-1').click()
            $('#associated-noise').addClass('disabled');
            $('#adaptive-noise').addClass('disabled');
            clearPoints()
            win = undefined;
            initCharts('close');
        }
    } else if (data.command == 'historyPRPD') {

    } else if (data.command == 'historyPRPS') {

    }
})
function changeEcharts(type) {
    upDrawAxis(0, 0, type)
    if (type == 1) {
        $('.unit').html('dBm')
        $(".noisy-slide.GIL").fadeOut(() => {
            $(".noisy-slide.GIS").fadeIn();
        });
        // $('.pc-tip').hide();
        $('#model-tab-dl').hide();

    } else if (type == 2 || type == 3) {
        realTime.atlasType = 1;
        $('#model-tab button:first-child').addClass('active').siblings().removeClass('active')
        $('.unit').html('mV')

        $(".noisy-slide.GIS").fadeOut(() => {
            $(".noisy-slide.GIL").fadeIn();
        });
        //$('.pc-tip').hide();
        $('#model-tab-dl').hide();
    } else if (type == 4) {
        atlasType = 1;
        $('#model-tab-dl button:first-child').addClass('active').siblings().removeClass('active')
        $('.unit').html('mV');
        //$('.pc-tip').show();
        $('#model-tab-dl').show()
    }
}
function initRealTime() {
    $('.associated-noise').removeClass('ready');
    $('.adaptive-noise').removeClass('ready');
    $("#channelFiltering").val(0);
    if (realTime.monitorType == 1) {
        $(".noisy-slide").slider({ value: -80 });
        $(".noisy-slide span").attr('data-content', i18n.content.realTime.gis.noise1 + ' ' + -80);
    } else if (realTime.monitorType == 2 || realTime.monitorType == 3) {
        $(".noisy-slide").slider({ value: 0 });
        $(".noisy-slide span").attr('data-content', i18n.content.realTime.gis.noise1 + ' ' + 0);
    }


    realTime.channelFiltering = 0;
    realTime.cumulativeDot = 1;
    realTime.correlationDenoising = 0;
    realTime.adaptiveNoise = 0;
    realTime.groundNoise = 0;
}
function downloadPng(type) {
    let dataUrl = '';
    // 获取渲染器renderer的canvas，然后调用todataurl方法获取数据URI
    if (type) {
        dataUrl = renderer.domElement.toDataURL('image/png');
    } else {
        dataUrl = renderer2D.domElement.toDataURL('image/png');
    }

    // 将DataURL转换为Blob对象
    let blob = new Blob([dataUrl], { type: 'image/png' });

    // 创建下载链接
    let link = document.createElement('a');
    link.setAttribute('download', 'my_scene_image.png');
    link.href = URL.createObjectURL(blob);

    // 将下载链接添加到HTML页面
    document.body.appendChild(link);

    // 触发下载链接的单击事件
    link.click();
}
//初始化绘制坐标轴文字
function drawAxisText(textMap, type) {
    let setTextMap = '';
    if (textMap) {
        setTextMap = textMap;
    } else {
        let {
            content: {
                analyzeDiagnosis: {
                    analyzeDiagnosis: { amplitude }
                },
            },
            tip: { period, phase, } } = i18n;
        let inifo = {
            amplitude,
            period,
            phase,
        };
        setTextMap = inifo;
    }
    if (type == 2 || type == 3) {
        setTextMap.amplitude = 'mV';
    } else if (type == 4) {
        setTextMap.amplitude = 'mV';
    }
    let infoNum = [
        {}, {
            w: 60,
            h: 32,
            cw: 9,
            ch: 8,
            size: 26.3,
        }, {}, {
            w: 125,
            h: 50,
            size: 38.3,
        }, {
            w: 125,
            h: 50,
            size: 38.3,
        },
        {
            w: 130,
            h: 50,
            size: 38.3,
        }, {}, {}, {
            w: 165,
            h: 122,
            size: 68.3,
        },
    ]
    let axisText = [{
        type: 'text',
        lang: true,
        content: 'amplitude',
        rotate: 90,
        color: '#000000',
        size: 30,
        font: 'normal Bold  500px Arial,sans-serif',
        xyz: [-60, minNum ? 0 : 120, 382],
    },
    {
        type: 'text',
        lang: true,
        content: 'period',
        xyz: [150, -180, 420],
        xyz: [minNum ? 250 : 150, minNum ? -220 : -130, 420],
        color: '#000000',
        size: 30,
        font: 'normal Bold  500px Arial,sans-serif',
    },
    {
        type: 'text',
        lang: true,
        content: 'phase',
        color: '#000000',
        size: 30,
        font: 'normal Bold  500px Arial,sans-serif',
        xyz: [500, -110, 140],
    },];
    let axis2dText = [{
        type: 'text',
        lang: true,
        content: 'amplitude',
        rotate: 10,
        color: '#000000',
        size: 30,
        font: 'normal Bold  500px Arial,sans-serif',
        xyz: [-20, minNum ? 0 : 180, 405],
    },
    {
        type: 'text',
        lang: true,
        content: 'phase',
        color: '#000000',
        size: 30,
        font: 'normal Bold  500px Arial,sans-serif',
        xyz: [0, minNum ? -265 : -87, 180],
    },];
    let setList = (list) => {
        let newList = [];
        for (let i of list) {
            let str = setTextMap[i.content];
            i.content = [str];
            let { w, h, cw, ch, size } = infoNum[str.length - 1]
            i.w = i.rotate ? h : w;
            i.h = i.rotate ? w : h;
            i.cw = i.rotate ? ch : cw;
            i.ch = i.rotate ? cw : ch;
            i.size = size;
            if (i.rotate) {
                i.xyz[2] = 445 + size / 2;
            }
            newList.push(draw2DText(i))
        }
        return newList
    }
    axisTextGroup.children.length && axisTextGroup.remove(...axisTextGroup.children)
    axisTextGroup.add(...setList(axisText))

    axisTextGroup2D.children.length && axisTextGroup2D.remove(...axisTextGroup2D.children)
    axisTextGroup2D.add(...setList(axis2dText))
}
//根据坐标轴类型更新坐标轴
function upDrawAxis(max, min, type) {
    if (!type) {
        initAxis = max; minNum = min; drawAxis(initAxis, minNum);
        return;
    }
    if (type == 1) {
        initAxis = 80; minNum = 0;
        drawAxis(initAxis, minNum);
    } else if (type == 3 || type == 2) {
        initAxis = 500; minNum = 0;
        drawAxis(initAxis, minNum)
    } else if (type == 4) {
        initAxis = 2000; minNum = -2000;
        drawAxis(initAxis, minNum);
    }
    drawAxisText(0, type);
    onWindowResize()
    planes[0].constant = (360 / (initAxis)) * initAxis + 1
}
renderer.domElement.addEventListener('webglcontextlost', handleContextLost, false);
function handleContextLost(event) {
    event.preventDefault();
    init();
}
renderer2D.domElement.addEventListener('webglcontextlost', handleContextLost2, false);
function handleContextLost2(event) {
    event.preventDefault();
    init2D();
}
function handleVisibilityChange() {
    if (document.hidden) {
        // 页面被最小化或切换应用程序，暂停渲染并清除 InstancedMesh 相关资源
        instancedMesh.dispose();
    } else {
        // 页面重新显示，重新创建 WebGL 上下文并重新设置 InstancedMesh
        init();
    }
}
//prps初始化
function init() {
    let box = $('#box3D1');
    let width = box.width();
    let height = box.height();
    renderer = new THREE.WebGLRenderer({ logarithmicDepthBuffer: true, antialias: true, preserveDrawingBuffer: true, });//preserveDrawingBuffer保存three.js canvas画布上的信息
    renderer.localClippingEnabled = true
    let constant = (360 / (initAxis)) * initAxis + 1
    planes = [
        new THREE.Plane(new THREE.Vector3(0, -1, 0), constant), //y轴正值截取
    ]
    renderer.clippingPlanes = planes
    renderer.setSize(width, height);//设置渲染区域尺寸
    renderer.setClearColor(0xffffff, 1); //设置背景颜色
    //renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色
    renderer.setPixelRatio(window.devicePixelRatio)//设备像素比，优化渲染效果
    box?.append(renderer.domElement); //body元素中插入canvas对象
    scene = new THREE.Scene();
    scene.add(meshList, axis, pointsList, axisTextGroup);

    /* var point = new THREE.PointLight(0xffffff);
    point.position.set(600, 600, 600); //点光源位置
    scene.add(point); //点光源添加到场景中
    var ambient = new THREE.AmbientLight(0x444444);
    scene.add(ambient); */

    drawAxis(initAxis, minNum, true)

    var k = width / height; //窗口宽高比
    var s = 420; //三维场景显示范围控制系数，系数越大，显示的范围越大
    //创建相机对象
    camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1600);
    camera.position.set(500, 200, 500); //设置相机位置
    camera.lookAt(scene.position); //设置相机方向(指向的场景对象)
    controls = new THREE.OrbitControls(camera, renderer.domElement);
    // 设置左右方向的最大、最小角度限制为 90 度和 0 度
    controls.minAzimuthAngle = 0;
    controls.maxAzimuthAngle = Math.PI / 2;
    // 设置上下方向的最大、最小角度限制为 90 度和 0 度
    controls.minPolarAngle = 0;
    controls.maxPolarAngle = Math.PI / 2;
    //设置放大缩小上下限
    controls.minZoom = 0.5;
    controls.maxZoom = 2;
    //controls.enablePan = false;
    //设置控制器中心点
    controls.target.set(25, 0, 180);
    renderer.render(scene, camera);

    //controls.addEventListener('change', render);
}
//prpd初始化
function init2D() {
    let box = $('#box2D1');
    let width = box.width();
    let height = box.height();
    renderer2D = new THREE.WebGLRenderer({ logarithmicDepthBuffer: true, antialias: true, preserveDrawingBuffer: true, });//preserveDrawingBuffer保存three.js canvas画布上的信息\    
    renderer2D.localClippingEnabled = true
    let constant = (360 / (initAxis)) * initAxis + 1
    planes = [
        new THREE.Plane(new THREE.Vector3(0, -1, 0), constant), //y轴正值截取
    ]
    renderer2D.clippingPlanes = planes
    renderer2D.setSize(width, height);//设置渲染区域尺寸
    renderer2D.setClearColor(0xffffff, 1); //设置背景颜色
    renderer2D.setPixelRatio(window.devicePixelRatio)//设备像素比，优化渲染效果
    box?.append(renderer2D.domElement); //body元素中插入canvas对象
    scene2D = new THREE.Scene();
    const List = pointsList.clone()
    scene2D.add(axis2D, List, axisTextGroup2D, pointsList)
    drawAxis2D(initAxis, minNum)
    // 辅助坐标系  参数250表示坐标系大小，可以根据场景大小去设置
    // let axisHelper = new THREE.AxesHelper(250);
    // scene2D.add(axisHelper);
    var k = width / height; //窗口宽高比
    var s = 380; //三维场景显示范围控制系数，系数越大，显示的范围越大
    //创建相机对象
    camera2D = new THREE.OrthographicCamera(-s * k - 200, s * k - 200, s + 160, -s + 160, 1, 1200);
    camera2D.position.set(600, 0, 0); //设置相机位置
    camera2D.lookAt(scene2D.position); //设置相机方向(指向的场景对象)
    controls2D = new THREE.OrbitControls(camera2D, renderer2D.domElement);
    controls2D.enablePan = false//右键位移禁用
    controls2D.enableZoom = false//放大缩小禁用
    //设置放大缩小上下限
    controls2D.minZoom = 0.5;
    controls2D.maxZoom = 2;
    controls2D.enableRotate = false
    renderer2D.render(scene2D, camera2D);
    controls2D.addEventListener('change', render2D);
}
function onWindowResize() {
    if (viewType == 1 || viewType == 2) {//全功能PrpsAndPrpd
        let h = $(window).height();
        let w = $(window).width();
        $(".loading-box").css('height', h * 0.65)
        $(".loading-box-mini").css('height', h * 0.35)
        $('.noisy-slide').css('height', h * 0.4)
        $('#realdata').show();
        $('.noisy-slide-box').show();
        $('#echarts-text').show();
        $('#addPointNumDiv').show();
        $('#box3D1').show();
        $('#box2D1').hide();
        $('#box2D6').show();
    } else if (viewType == 3) {//实时数据仅展示prpd
        let h = $(window).height();
        let w = $(window).width();
        $(".loading-box").css('height', h * 0.9)
        $(".loading-box").css('width', w * 0.9)
        $('#realdata').hide();
        $('.noisy-slide-box').hide();
        $('#echarts-text').hide();
        $('#addPointNumDiv').hide();
        $('#box3D1').hide();
        $('#box2D1').show();
        $('#box2D6').hide();
    } else if (viewType == 4) {//历史趋势仅展示prps
        let h = $(window).height();
        let w = $(window).width();
        $(".loading-box").css('height', h * 0.9)
        $(".loading-box").css('width', w * 0.9)
        $('#realdata').hide();
        $('.noisy-slide-box').hide();
        $('#echarts-text').hide();
        $('#addPointNumDiv').hide();
        $('#box3D1').hide();
        $('#box2D1').show();
        $('#box2D6').hide();
    } else if (viewType == 5) {//历史趋势仅展示prpd
        let h = $(window).height();
        let w = $(window).width();
        $(".loading-box").css('height', h * 0.9)
        $(".loading-box").css('width', w * 0.9)
        $('#realdata').hide();
        $('.noisy-slide-box').hide();
        $('#echarts-text').hide();
        $('#addPointNumDiv').hide();
        $('#box3D1').hide();
        $('#box2D1').show();
        $('#box2D6').hide();
    }

    if (echarts.getInstanceByDom(box3D) != null) {
        box3Dchart.resize();
    }
    if (echarts.getInstanceByDom(box2D) != null) {
        box2Dchart.resize();
    }
    if (echarts.getInstanceByDom(box2D5) != null) {
        box2D5chart.resize();
    }
    setTimeout(() => {
        box2D6chart.resize();
    })

    let box = $('#box3D1');
    let width = box.width();

    let height = box.height();
    let k = width / height; //窗口宽高比
    let s = 350; //三维场景显示范围控制系数，系数越大，显示的范围越大

    camera.left = -s * k - 20;
    camera.right = s * k - 20;
    camera.top = s + (minNum ? -80 : 60);
    camera.bottom = -s + (minNum ? -80 : 60);
    camera.aspect = k;
    camera.updateProjectionMatrix();
    renderer.setSize(width, height);
    renderer.setPixelRatio(window.devicePixelRatio)//设备像素比，优化渲染效果

    let s2D = 270;
    camera2D.left = -s2D * k - 200;
    camera2D.right = s2D * k - 200;
    camera2D.top = s2D + (minNum ? -30 : 155);
    camera2D.bottom = -s2D + (minNum ? -30 : 155);
    camera2D.aspect = k;
    camera2D.updateProjectionMatrix();
    renderer2D.setSize(width, height);
    renderer2D.setPixelRatio(window.devicePixelRatio)//设备像素比，优化渲染效果
}
function render() {
    // 获取摄像机的视锥体
    const frustum = new THREE.Frustum();
    const cameraViewProjectionMatrix = new THREE.Matrix4();
    camera.updateMatrixWorld(); // 确保摄像机的世界矩阵已更新
    cameraViewProjectionMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);
    frustum.setFromProjectionMatrix(cameraViewProjectionMatrix);

    // 遍历场景中的每个对象，并根据视锥体进行剔除
    scene.traverse((object) => {
        if (object.isMesh) {
            object.visible = frustum.intersectsObject(object);
        }
    });
    // 更新帧率显示器
    //stats.update();
    renderer.render(scene, camera);
    requestAnimationFrame(render)
}
function render2D() {
    //scene.rotateY(0.001);//每次绕y轴旋转0.01弧度
    requestAnimationFrame(render2D)
    renderer2D.render(scene2D, camera2D);
}
function initChangeType(monitorType) {
    gilSwitchChart(1)
    cpdSwitchChart(1)
    upDrawAxis(0, 0, monitorType)
    if (monitorType == 1) {
        //$('.avgValue').fadeOut()

        $('#model-tab').fadeOut(() => {
            $('#channelFiltering').fadeIn()
            $('.pm-slide-box').fadeIn()
            $('#associated-noise-box').fadeIn()
            // $('#record-btn-box').fadeIn()
            $('#toggle-box').fadeIn()
            $('.noisy-slide-box').fadeIn()
            $('.radiogroup').fadeIn()
            $('.cdf-slide-box').fadeIn()
            $('.eventList').fadeIn()
            $('.refreshtitle').fadeIn()

            $('#associated-noise').removeClass('disabled');
            $('#adaptive-noise').removeClass('disabled');
            $(".noisy-slide").slider({ disabled: false });
            $("#channelFiltering").val(0);

            $('.monitorType').html('UHF')
        })
    } else if (monitorType == 2 || monitorType == 3) {
        $('#channelFiltering').fadeOut(() => {
            $('#model-tab').fadeIn()
            if (realTime.atlasType == 1) {
                $('#model-tab button:first-child').addClass('active').siblings().removeClass('active')
            } else if (realTime.atlasType == 2) {
                $('#model-tab button:nth-child(2)').addClass('active').siblings().removeClass('active')
            } else {
                $('#model-tab button:last-child').addClass('active').siblings().removeClass('active')
                $('.cdf-slide-box').fadeOut()
                $('.noisy-slide-box').fadeOut()
            }
        })
        $('.pm-slide-box').fadeOut()
        $('#associated-noise-box').fadeOut()
        // $('#record-btn-box').fadeOut()
        // $('#toggle-box').fadeOut()
        $('.radiogroup').fadeOut()
        // $('.eventList').fadeOut()
        $('.refreshtitle').fadeOut()

        //$('.avgValue').fadeIn()
        $('.avgValue .name').html(i18n.content.realTime.gil.averageValue + "：")

        $('.monitorType').html('AE')
        $('#line-btn-box').hide();
        $('#form-line').hide();
    } else if (monitorType == 4) {
        $('#channelFiltering').fadeOut()
        $('.pm-slide-box').fadeOut()
        $('#associated-noise-box').fadeOut()
        // $('#record-btn-box').fadeOut()
        // $('#toggle-box').fadeOut()
        $('.noisy-slide-box').fadeOut()
        $('.radiogroup').fadeOut()
        $('.refreshtitle').fadeOut()
        $('#model-tab').fadeOut()

        $('.cdf-slide-box').fadeIn()
        $('.eventList').fadeIn()
        //$('.avgValue').fadeIn()
        $('.avgValue .name').html(i18n.content.realTime.gis.averageValue + "：")

        $('.monitorType').html('HFCT')
    }
}
// 图表绘制
function drawEcharts1(list1, list2) {
    // monitorType  GIS 1  GIL故障定位  2  GIL局放  3  电缆  4
    // atlasType  1  PRPS/PRPD  2  飞行模式/脉冲数据   3  连续模式
    if (list1?.length) {
        drawPRPS(list1)
    }
    if (list2?.length) {
        drawPRPD(list2)
    }
}
export { scene, axis, meshList, pointsList, axis2D, scene2D, i18n, }